From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: =?UTF-8?B?UmU6IEhlcmUgaXMgYSBwYXRjaCBJIHdhbnQgdG8gYWRkIHRvIG9y?= =?UTF-8?B?Zy5lbOKApuKApg==?= Date: Wed, 25 Feb 2015 04:41:48 +0000 Message-ID: <54ED53D0.C21CC0.17727@m12-18.163.com> References: <54ED4E97.C3CC91.30527@m12-13.163.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="_B27A0DEB-789B-42AE-8732-E4CB0E369E58_" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:33483) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YQTu9-0000Q2-Bl for emacs-orgmode@gnu.org; Tue, 24 Feb 2015 23:49:05 -0500 Received: from m12-18.163.com ([220.181.12.18]:40040) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YQTsd-0004wC-AC for emacs-orgmode@gnu.org; Tue, 24 Feb 2015 23:49:01 -0500 In-Reply-To: <54ED4E97.C3CC91.30527@m12-13.163.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: "=?utf-8?Q?kuangdash@163.com?=" Cc: "=?utf-8?Q?emacs-orgmode@gnu.org?=" --_B27A0DEB-789B-42AE-8732-E4CB0E369E58_ Content-Type: multipart/alternative; boundary="_105FF091-4104-4F52-A819-1141E966F896_" --_105FF091-4104-4F52-A819-1141E966F896_ Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8" DQoNCg0KDQpJIGhhdmUgdXNlZCBteSBlZGl0aW9uIG9mIG9yZy5lbCBmb3IgYSBsb25nIHRpbWUg d2l0aG91dCBhIHNlcmlvdXMgcHJvYmxlbSAob3JnIDguMi4xMCkNCg0Kc28gaGVyZSBpcyB0aGUg ZWwgZmlsZSBmb3IgYW55b25l4oCZcyB0ZXN0Lg0KDQoNCg0KDQpTZW50IGZyb20gV2luZG93cyBN YWlsDQoNCg0KDQoNCg0KRnJvbToga3VhbmdkYXNoQDE2My5jb20NClNlbnQ6IOKAjldlZG5lc2Rh eeKAjiwg4oCORmVicnVhcnnigI4g4oCOMjXigI4sIOKAjjIwMTUg4oCOMTLigI464oCOMTTigI4g 4oCOUE0NClRvOiBlbWFjcy1vcmdtb2RlQGdudS5vcmcNCg0KDQoNCg0KDQoNCg0KDQoNCkJ1dCBo b3cgdG8gZG8gaXTvvJ8NCg0KDQoNCg0KQmVzaWRlc++8jCBJ4oCYbSBnbGFkIHRvIHZpZXcgeW91 ciBvcGluaW9uc++8jHNvIGhlcmUgY29tZXMgdGhlIGNvZGVz77yaDQoNCg0KDQoNClRoZSBwbGFj Ze+8mihkZWZ1biBvcmctY3RybC1jLWN0cmwtYyAgICAgICB0aGUgZmlyc3QgICAgICAoY29uZA0K DQoNCg0KDQphZGTvvJoNCg0KIChjb25kDQogICAoKG92ZXJsYXlwIChjYXIgKG92ZXJsYXlzLWF0 IChwb2ludCkpKSkgKGxldCAoKG92ZXJsYXkgKGNhciAob3ZlcmxheXMtYXQgKHBvaW50KSkpKSkN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAob3ZlcmxheXAgb3ZlcmxheSkNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGUtb3ZlcmxheSBvdmVybGF5KQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpDQoNCg0KDQoNCnNvIHRoYXQgSSB3b27igJl0 IG1ha2UgYWxsIG92ZXJsYXlzIGRpc2FwcGVhciBhdCBvbmx5IG9uY2Ug4oCcQy1jIEMtY+KAnQ0K DQoNCg0KDQpTZW50IGZyb20gV2luZG93cyBNYWls --_105FF091-4104-4F52-A819-1141E966F896_ Content-Transfer-Encoding: base64 Content-Type: text/html; charset="utf-8" CjxodG1sPgo8aGVhZD4KPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJXaW5kb3dzIE1h aWwgMTcuNS45NjAwLjIwNjg5Ij4KPHN0eWxlIGRhdGEtZXh0ZXJuYWxzdHlsZT0idHJ1ZSI+PCEt LQpwLk1zb0xpc3RQYXJhZ3JhcGgsIGxpLk1zb0xpc3RQYXJhZ3JhcGgsIGRpdi5Nc29MaXN0UGFy YWdyYXBoIHsKbWFyZ2luLXRvcDowaW47Cm1hcmdpbi1yaWdodDowaW47Cm1hcmdpbi1ib3R0b206 MGluOwptYXJnaW4tbGVmdDouNWluOwptYXJnaW4tYm90dG9tOi4wMDAxcHQ7Cn0KcC5Nc29Ob3Jt YWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbCB7Cm1hcmdpbjowaW47Cm1hcmdpbi1ib3R0 b206LjAwMDFwdDsKfQpwLk1zb0xpc3RQYXJhZ3JhcGhDeFNwRmlyc3QsIGxpLk1zb0xpc3RQYXJh Z3JhcGhDeFNwRmlyc3QsIGRpdi5Nc29MaXN0UGFyYWdyYXBoQ3hTcEZpcnN0LCAKcC5Nc29MaXN0 UGFyYWdyYXBoQ3hTcE1pZGRsZSwgbGkuTXNvTGlzdFBhcmFncmFwaEN4U3BNaWRkbGUsIGRpdi5N c29MaXN0UGFyYWdyYXBoQ3hTcE1pZGRsZSwgCnAuTXNvTGlzdFBhcmFncmFwaEN4U3BMYXN0LCBs aS5Nc29MaXN0UGFyYWdyYXBoQ3hTcExhc3QsIGRpdi5Nc29MaXN0UGFyYWdyYXBoQ3hTcExhc3Qg ewptYXJnaW4tdG9wOjBpbjsKbWFyZ2luLXJpZ2h0OjBpbjsKbWFyZ2luLWJvdHRvbTowaW47Cm1h cmdpbi1sZWZ0Oi41aW47Cm1hcmdpbi1ib3R0b206LjAwMDFwdDsKbGluZS1oZWlnaHQ6MTE1JTsK fQotLT48L3N0eWxlPjwvaGVhZD4KPGJvZHkgZGlyPSJsdHIiPgo8ZGl2IGRhdGEtZXh0ZXJuYWxz dHlsZT0iZmFsc2UiIGRpcj0ibHRyIiBzdHlsZT0iZm9udC1mYW1pbHk6ICdDYWxpYnJpJywgJ01p Y3Jvc29mdCBZYUhlaSBVSScsICdTZWdvZSBVSScsICdNZWlyeW8nLCAnTWljcm9zb2Z0IEpoZW5n SGVpIFVJJywgJ01hbGd1biBHb3RoaWMnLCAnc2Fucy1zZXJpZic7Zm9udC1zaXplOjEycHQ7Ij48 ZGl2Pjxicj48L2Rpdj48ZGl2IGRhdGEtc2lnbmF0dXJlYmxvY2s9InRydWUiPjxkaXY+SSBoYXZl IHVzZWQmbmJzcDtteSBlZGl0aW9uIG9mIG9yZy5lbCBmb3IgYSBsb25nIHRpbWUgd2l0aG91dCBh IHNlcmlvdXMgcHJvYmxlbSAob3JnIDguMi4xMCk8L2Rpdj48ZGl2PnNvIGhlcmUgaXMgdGhlIGVs IGZpbGUgZm9yIGFueW9uZeKAmXMgdGVzdC48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlNlbnQg ZnJvbSBXaW5kb3dzIE1haWw8L2Rpdj48ZGl2Pjxicj48L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJw YWRkaW5nLXRvcDogNXB4OyBib3JkZXItdG9wLWNvbG9yOiByZ2IoMjI5LCAyMjksIDIyOSk7IGJv cmRlci10b3Atd2lkdGg6IDFweDsgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7Ij48ZGl2Pjxmb250 IGZhY2U9IiAnQ2FsaWJyaScsICdNaWNyb3NvZnQgWWFIZWkgVUknLCAnU2Vnb2UgVUknLCAnTWVp cnlvJywgJ01pY3Jvc29mdCBKaGVuZ0hlaSBVSScsICdNYWxndW4gR290aGljJywgJ3NhbnMtc2Vy aWYnIiBzdHlsZT0nbGluZS1oZWlnaHQ6IDE1cHQ7IGxldHRlci1zcGFjaW5nOiAwLjAyZW07IGZv bnQtZmFtaWx5OiAiQ2FsaWJyaSIsICJNaWNyb3NvZnQgWWFIZWkgVUkiLCAiU2Vnb2UgVUkiLCAi TWVpcnlvIiwgIk1pY3Jvc29mdCBKaGVuZ0hlaSBVSSIsICJNYWxndW4gR290aGljIiwgInNhbnMt c2VyaWYiOyBmb250LXNpemU6IDEycHQ7Jz48Yj5Gcm9tOjwvYj4mbmJzcDs8YSBocmVmPSJtYWls dG86a3VhbmdkYXNoQDE2My5jb20iIHRhcmdldD0iX3BhcmVudCI+a3VhbmdkYXNoQDE2My5jb208 L2E+PGJyPjxiPlNlbnQ6PC9iPiZuYnNwO+KAjldlZG5lc2RheeKAjiwg4oCORmVicnVhcnnigI4g 4oCOMjXigI4sIOKAjjIwMTUg4oCOMTLigI464oCOMTTigI4g4oCOUE08YnI+PGI+VG86PC9iPiZu YnNwOzxhIGhyZWY9Im1haWx0bzplbWFjcy1vcmdtb2RlQGdudS5vcmciIHRhcmdldD0iX3BhcmVu dCI+ZW1hY3Mtb3JnbW9kZUBnbnUub3JnPC9hPjwvZm9udD48L2Rpdj48L2Rpdj48ZGl2Pjxicj48 L2Rpdj48ZGl2IGRpcj0ibHRyIj4KPGRpdj48YnI+PC9kaXY+PGRpdiBkYXRhLXNpZ25hdHVyZWJs b2NrPSJ0cnVlIj48ZGl2PkJ1dCBob3cgdG8gZG8gaXTvvJ88L2Rpdj48ZGl2Pjxicj48L2Rpdj48 ZGl2PkJlc2lkZXPvvIwgSeKAmG0gZ2xhZCB0byB2aWV3IHlvdXIgb3BpbmlvbnPvvIxzbyBoZXJl IGNvbWVzIHRoZSBjb2Rlc++8mjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlIHBsYWNl77ya KGRlZnVuIG9yZy1jdHJsLWMtY3RybC1jJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7IHRoZSBmaXJzdCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAoY29uZDwvZGl2Pjxk aXY+PGJyPjwvZGl2PjxkaXY+YWRk77yaPC9kaXY+PGRpdj4mbmJzcDsoY29uZDxicj4mbmJzcDsm bmJzcDsgKChvdmVybGF5cCAoY2FyIChvdmVybGF5cy1hdCAocG9pbnQpKSkpIChsZXQgKChvdmVy bGF5IChjYXIgKG92ZXJsYXlzLWF0IChwb2ludCkpKSkpPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAoaWYgKG92ZXJsYXlwIG92 ZXJsYXkpPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyAoZGVsZXRlLW92ZXJsYXkgb3ZlcmxheSk8YnI+Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICkpKTwvZGl2Pjxk aXY+PGJyPjwvZGl2PjxkaXY+c28gdGhhdCBJIHdvbuKAmXQgbWFrZSBhbGwgb3ZlcmxheXMgZGlz YXBwZWFyIGF0IG9ubHkmbmJzcDtvbmNlJm5ic3A74oCcQy1jIEMtY+KAnTwvZGl2PjxkaXY+PGJy PjwvZGl2PjxkaXY+U2VudCBmcm9tIFdpbmRvd3MgTWFpbDwvZGl2PjxkaXY+PGJyPjwvZGl2Pjwv ZGl2PgoKCjwvZGl2PjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K --_105FF091-4104-4F52-A819-1141E966F896_-- --_B27A0DEB-789B-42AE-8732-E4CB0E369E58_ Content-Type: application/octet-stream; name="=?utf-8?Q?org.el?=" Content-Description: =?utf-8?Q?org.el?= Content-Disposition: attachment; name="=?utf-8?Q?org.el?=" Content-Transfer-Encoding: base64 Ozs7IG9yZy5lbCAtLS0gT3V0bGluZS1iYXNlZCBub3RlcyBtYW5hZ2VtZW50IGFuZCBvcmdhbml6 ZXINCg0KOzsgQ2Fyc3RlbnMgb3V0bGluZS1tb2RlIGZvciBrZWVwaW5nIHRyYWNrIG9mIGV2ZXJ5 dGhpbmcuDQo7OyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4NCjs7DQo7OyBBdXRob3I6IENhcnN0ZW4gRG9taW5payA8Y2Fyc3RlbiBhdCBvcmdt b2RlIGRvdCBvcmc+DQo7OyBNYWludGFpbmVyOiBDYXJzdGVuIERvbWluaWsgPGNhcnN0ZW4gYXQg b3JnbW9kZSBkb3Qgb3JnPg0KOzsgS2V5d29yZHM6IG91dGxpbmVzLCBoeXBlcm1lZGlhLCBjYWxl bmRhciwgd3ANCjs7IEhvbWVwYWdlOiBodHRwOi8vb3JnbW9kZS5vcmcNCjs7DQo7OyBUaGlzIGZp bGUgaXMgcGFydCBvZiBHTlUgRW1hY3MuDQo7Ow0KOzsgR05VIEVtYWNzIGlzIGZyZWUgc29mdHdh cmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCjs7IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 DQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcg0KOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCg0K OzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsDQo7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZg0KOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4NCg0KOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCjs7IGFsb25nIHdpdGggR05VIEVtYWNz LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0KOzsNCjs7OyBD b21tZW50YXJ5Og0KOzsNCjs7IE9yZy1tb2RlIGlzIGEgbW9kZSBmb3Iga2VlcGluZyBub3Rlcywg bWFpbnRhaW5pbmcgVG9EbyBsaXN0cywgYW5kIGRvaW5nDQo7OyBwcm9qZWN0IHBsYW5uaW5nIHdp dGggYSBmYXN0IGFuZCBlZmZlY3RpdmUgcGxhaW4tdGV4dCBzeXN0ZW0uDQo7Ow0KOzsgT3JnLW1v ZGUgZGV2ZWxvcHMgb3JnYW5pemF0aW9uYWwgdGFza3MgYXJvdW5kIE5PVEVTIGZpbGVzIHRoYXQg Y29udGFpbg0KOzsgaW5mb3JtYXRpb24gYWJvdXQgcHJvamVjdHMgYXMgcGxhaW4gdGV4dC4gIE9y Zy1tb2RlIGlzIGltcGxlbWVudGVkIG9uDQo7OyB0b3Agb2Ygb3V0bGluZS1tb2RlLCB3aGljaCBt YWtlcyBpdCBwb3NzaWJsZSB0byBrZWVwIHRoZSBjb250ZW50IG9mDQo7OyBsYXJnZSBmaWxlcyB3 ZWxsIHN0cnVjdHVyZWQuICBWaXNpYmlsaXR5IGN5Y2xpbmcgYW5kIHN0cnVjdHVyZSBlZGl0aW5n DQo7OyBoZWxwIHRvIHdvcmsgd2l0aCB0aGUgdHJlZS4gIFRhYmxlcyBhcmUgZWFzaWx5IGNyZWF0 ZWQgd2l0aCBhIGJ1aWx0LWluDQo7OyB0YWJsZSBlZGl0b3IuICBPcmctbW9kZSBzdXBwb3J0cyBU b0RvIGl0ZW1zLCBkZWFkbGluZXMsIHRpbWUgc3RhbXBzLA0KOzsgYW5kIHNjaGVkdWxpbmcuICBJ dCBkeW5hbWljYWxseSBjb21waWxlcyBlbnRyaWVzIGludG8gYW4gYWdlbmRhIHRoYXQNCjs7IHV0 aWxpemVzIGFuZCBzbW9vdGhseSBpbnRlZ3JhdGVzIG11Y2ggb2YgdGhlIEVtYWNzIGNhbGVuZGFy IGFuZCBkaWFyeS4NCjs7IFBsYWluIHRleHQgVVJMLWxpa2UgbGlua3MgY29ubmVjdCB0byB3ZWJz aXRlcywgZW1haWxzLCBVc2VuZXQNCjs7IG1lc3NhZ2VzLCBCQkRCIGVudHJpZXMsIGFuZCBhbnkg ZmlsZXMgcmVsYXRlZCB0byB0aGUgcHJvamVjdHMuICBGb3INCjs7IHByaW50aW5nIGFuZCBzaGFy aW5nIG9mIG5vdGVzLCBhbiBPcmctbW9kZSBmaWxlIGNhbiBiZSBleHBvcnRlZCBhcyBhDQo7OyBz dHJ1Y3R1cmVkIEFTQ0lJIGZpbGUsIGFzIEhUTUwsIG9yICh0b2RvIGFuZCBhZ2VuZGEgaXRlbXMg b25seSkgYXMgYW4NCjs7IGlDYWxlbmRhciBmaWxlLiAgSXQgY2FuIGFsc28gc2VydmUgYXMgYSBw dWJsaXNoaW5nIHRvb2wgZm9yIGEgc2V0IG9mDQo7OyBsaW5rZWQgd2VicGFnZXMuDQo7Ow0KOzsg SW5zdGFsbGF0aW9uIGFuZCBBY3RpdmF0aW9uDQo7OyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCjs7IFNlZSB0aGUgY29ycmVzcG9uZGluZyBzZWN0aW9ucyBpbiB0aGUgbWFudWFsIGF0DQo7 Ow0KOzsgICBodHRwOi8vb3JnbW9kZS5vcmcvb3JnLmh0bWwjSW5zdGFsbGF0aW9uDQo7Ow0KOzsg RG9jdW1lbnRhdGlvbg0KOzsgLS0tLS0tLS0tLS0tLQ0KOzsgVGhlIGRvY3VtZW50YXRpb24gb2Yg T3JnLW1vZGUgY2FuIGJlIGZvdW5kIGluIHRoZSBUZVhJbmZvIGZpbGUuICBUaGUNCjs7IGRpc3Ry aWJ1dGlvbiBhbHNvIGNvbnRhaW5zIGEgUERGIHZlcnNpb24gb2YgaXQuICBBdCB0aGUgaG9tZXBh Z2Ugb2YNCjs7IE9yZy1tb2RlLCB5b3UgY2FuIHJlYWQgdGhlIHNhbWUgdGV4dCBvbmxpbmUgYXMg SFRNTC4gIFRoZXJlIGlzIGFsc28gYW4NCjs7IGV4Y2VsbGVudCByZWZlcmVuY2UgY2FyZCBtYWRl IGJ5IFBoaWxpcCBSb29rZS4gIFRoaXMgY2FyZCBjYW4gYmUgZm91bmQNCjs7IGluIHRoZSBldGMv IGRpcmVjdG9yeSBvZiBFbWFjcyAyMi4NCjs7DQo7OyBBIGxpc3Qgb2YgcmVjZW50IGNoYW5nZXMg Y2FuIGJlIGZvdW5kIGF0DQo7OyBodHRwOi8vb3JnbW9kZS5vcmcvQ2hhbmdlcy5odG1sDQo7Ow0K Ozs7IENvZGU6DQoNCihkZWZ2YXIgb3JnLWluaGliaXQtaGlnaGxpZ2h0LXJlbW92YWwgbmlsKSA7 IGR5bmFtaWNhbGx5IHNjb3BlZCBwYXJhbQ0KKGRlZnZhciBvcmctdGFibGUtZm9ybXVsYS1jb25z dGFudHMtbG9jYWwgbmlsDQogICJMb2NhbCB2ZXJzaW9uIG9mIGBvcmctdGFibGUtZm9ybXVsYS1j b25zdGFudHMnLiIpDQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy10YWJsZS1mb3Jt dWxhLWNvbnN0YW50cy1sb2NhbCkNCg0KOzs7OyBSZXF1aXJlIG90aGVyIHBhY2thZ2VzDQoNCihl dmFsLXdoZW4tY29tcGlsZQ0KICAocmVxdWlyZSAnY2wpDQogIChyZXF1aXJlICdnbnVzLXN1bSkp DQoNCihyZXF1aXJlICdjYWxlbmRhcikNCihyZXF1aXJlICdmaW5kLWZ1bmMpDQoocmVxdWlyZSAn Zm9ybWF0LXNwZWMpDQoNCihsb2FkICJvcmctbG9hZGRlZnMuZWwiIHQgdCB0KQ0KDQoocmVxdWly ZSAnb3JnLW1hY3MpDQoocmVxdWlyZSAnb3JnLWNvbXBhdCkNCg0KOzsgYG9yZy1vdXRsaW5lLXJl Z2V4cCcgb3VnaHQgdG8gYmUgYSBkZWZjb25zdCBidXQgaXMgbGV0LWJvdW5kIGluDQo7OyBzb21l IHBsYWNlcyAtLSBlLmcuIHNlZSB0aGUgbWFjcm8gYG9yZy13aXRoLWxpbWl0ZWQtbGV2ZWxzJy4N Cjs7DQo7OyBJbiBPcmcgYnVmZmVycywgdGhlIHZhbHVlIG9mIGBvdXRsaW5lLXJlZ2V4cCcgaXMg dGhhdCBvZg0KOzsgYG9yZy1vdXRsaW5lLXJlZ2V4cCcuICBUaGUgb25seSBmdW5jdGlvbiBzdGls bCBkaXJlY3RseSByZWx5aW5nIG9uDQo7OyBgb3V0bGluZS1yZWdleHAnIGlzIGBvcmctb3ZlcnZp ZXcnIHNvIHRoYXQgYG9yZy1jeWNsZScgY2FuIGRvIGl0cw0KOzsgam9iIHdoZW4gYG9yZ3N0cnVj dC1tb2RlJyBpcyBhY3RpdmUuDQooZGVmdmFyIG9yZy1vdXRsaW5lLXJlZ2V4cCAiXFwqKyAiDQog ICJSZWdleHAgdG8gbWF0Y2ggT3JnIGhlYWRsaW5lcy4iKQ0KDQooZGVmdmFyIG9yZy1vdXRsaW5l LXJlZ2V4cC1ib2wgIl5cXCorICINCiAgIlJlZ2V4cCB0byBtYXRjaCBPcmcgaGVhZGxpbmVzLg0K VGhpcyBpcyBzaW1pbGFyIHRvIGBvcmctb3V0bGluZS1yZWdleHAnIGJ1dCBhZGRpdGlvbmFsbHkg bWFrZXMNCnN1cmUgdGhhdCB3ZSBhcmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4iKQ0K DQooZGVmdmFyIG9yZy1oZWFkaW5nLXJlZ2V4cCAiXlxcKFxcKitcXClcXCg/OiArXFwoLio/XFwp XFwpP1sgXHRdKiQiDQogICJNYXRjaGVzIGEgaGVhZGxpbmUsIHB1dHRpbmcgc3RhcnMgYW5kIHRl eHQgaW50byBncm91cHMuDQpTdGFycyBhcmUgcHV0IGluIGdyb3VwIDEgYW5kIHRoZSB0cmltbWVk IGJvZHkgaW4gZ3JvdXAgMi4iKQ0KDQo7OyBFbWFjcyAyMiBjYWxlbmRhciBjb21wYXRpYmlsaXR5 OiAgTWFrZSBzdXJlIHRoZSBuZXcgdmFyaWFibGVzIGFyZSBhdmFpbGFibGUNCih1bmxlc3MgKGJv dW5kcCAnY2FsZW5kYXItdmlldy1ob2xpZGF5cy1pbml0aWFsbHktZmxhZykNCiAgKG9yZy1kZWZ2 YXJhbGlhcyAnY2FsZW5kYXItdmlldy1ob2xpZGF5cy1pbml0aWFsbHktZmxhZw0KICAgICd2aWV3 LWNhbGVuZGFyLWhvbGlkYXlzLWluaXRpYWxseSkpDQoodW5sZXNzIChib3VuZHAgJ2NhbGVuZGFy LXZpZXctZGlhcnktaW5pdGlhbGx5LWZsYWcpDQogIChvcmctZGVmdmFyYWxpYXMgJ2NhbGVuZGFy LXZpZXctZGlhcnktaW5pdGlhbGx5LWZsYWcNCiAgICAndmlldy1kaWFyeS1lbnRyaWVzLWluaXRp YWxseSkpDQoodW5sZXNzIChib3VuZHAgJ2RpYXJ5LWZhbmN5LWJ1ZmZlcikNCiAgKG9yZy1kZWZ2 YXJhbGlhcyAnZGlhcnktZmFuY3ktYnVmZmVyICdmYW5jeS1kaWFyeS1idWZmZXIpKQ0KDQooZGVj bGFyZS1mdW5jdGlvbiBvcmctYWRkLWFyY2hpdmUtZmlsZXMgIm9yZy1hcmNoaXZlIiAoZmlsZXMp KQ0KDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctaW5saW5ldGFzay1hdC10YXNrLXAgIm9yZy1pbmxp bmV0YXNrIiAoKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1pbmxpbmV0YXNrLW91dGxpbmUtcmVn ZXhwICJvcmctaW5saW5ldGFzayIgKCkpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctaW5saW5ldGFz ay10b2dnbGUtdmlzaWJpbGl0eSAib3JnLWlubGluZXRhc2siICgpKQ0KKGRlY2xhcmUtZnVuY3Rp b24gb3JnLXBvcC10by1idWZmZXItc2FtZS13aW5kb3cgIm9yZy1jb21wYXQiICgmb3B0aW9uYWwg YnVmZmVyLW9yLW5hbWUgbm9yZWNvcmQgbGFiZWwpKQ0KKGRlY2xhcmUtZnVuY3Rpb24gb3JnLWNs b2NrLWdldC1sYXN0LWNsb2NrLW91dC10aW1lICJvcmctY2xvY2siICgpKQ0KKGRlY2xhcmUtZnVu Y3Rpb24gb3JnLWNsb2NrLXRpbWVzdGFtcHMtdXAgIm9yZy1jbG9jayIgKCZvcHRpb25hbCBuKSkN CihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1jbG9jay10aW1lc3RhbXBzLWRvd24gIm9yZy1jbG9jayIg KCZvcHRpb25hbCBuKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1jbG9jay1yZW1vdmUtb3Zlcmxh eXMgIm9yZy1jbG9jayIgKCZvcHRpb25hbCBiZWcgZW5kIG5vcmVtb3ZlKSkNCihkZWNsYXJlLWZ1 bmN0aW9uIG9yZy1jbG9jay1zdW0tY3VycmVudC1pdGVtICJvcmctY2xvY2siICgmb3B0aW9uYWwg dHN0YXJ0KSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1jbG9jay11cGRhdGUtdGltZS1tYXliZSAi b3JnLWNsb2NrIiAoKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1jbG9ja3RhYmxlLXNoaWZ0ICJv cmctY2xvY2siIChkaXIgbikpDQoNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZ3RibC1tb2RlICJvcmct dGFibGUiICgmb3B0aW9uYWwgYXJnKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1jbG9jay1vdXQg Im9yZy1jbG9jayIgKCZvcHRpb25hbCBzd2l0Y2gtdG8tc3RhdGUgZmFpbC1xdWlldGx5IGF0LXRp bWUpKQ0KKGRlY2xhcmUtZnVuY3Rpb24gb3JnLWJlYW1lci1tb2RlICJveC1iZWFtZXIiICgpKQ0K KGRlY2xhcmUtZnVuY3Rpb24gb3JnLXRhYmxlLWVkaXQtZmllbGQgIm9yZy10YWJsZSIgKGFyZykp DQooZGVjbGFyZS1mdW5jdGlvbiBvcmctdGFibGUtanVzdGlmeS1maWVsZC1tYXliZSAib3JnLXRh YmxlIiAoJm9wdGlvbmFsIG5ldykpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctdGFibGUtc2V0LWNv bnN0YW50cyAib3JnLXRhYmxlIiAoKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy10YWJsZS1jYWxj LWN1cnJlbnQtVEJMRk0gIm9yZy10YWJsZSIgKCZvcHRpb25hbCBhcmcpKQ0KKGRlY2xhcmUtZnVu Y3Rpb24gb3JnLWlkLWdldC1jcmVhdGUgIm9yZy1pZCIgKCZvcHRpb25hbCBmb3JjZSkpDQooZGVj bGFyZS1mdW5jdGlvbiBvcmctaWQtZmluZC1pZC1maWxlICJvcmctaWQiIChpZCkpDQooZGVjbGFy ZS1mdW5jdGlvbiBvcmctdGFncy12aWV3ICJvcmctYWdlbmRhIiAoJm9wdGlvbmFsIHRvZG8tb25s eSBtYXRjaCkpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctYWdlbmRhLWxpc3QgIm9yZy1hZ2VuZGEi ICgmb3B0aW9uYWwgYXJnIHN0YXJ0LWRheSBzcGFuKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1h Z2VuZGEtcmVkbyAib3JnLWFnZW5kYSIgKCZvcHRpb25hbCBhbGwpKQ0KKGRlY2xhcmUtZnVuY3Rp b24gb3JnLXRhYmxlLWFsaWduICJvcmctdGFibGUiICgpKQ0KKGRlY2xhcmUtZnVuY3Rpb24gb3Jn LXRhYmxlLWJlZ2luICJvcmctdGFibGUiICgmb3B0aW9uYWwgdGFibGUtdHlwZSkpDQooZGVjbGFy ZS1mdW5jdGlvbiBvcmctdGFibGUtYmxhbmstZmllbGQgIm9yZy10YWJsZSIgKCkpDQooZGVjbGFy ZS1mdW5jdGlvbiBvcmctdGFibGUtZW5kICJvcmctdGFibGUiICgmb3B0aW9uYWwgdGFibGUtdHlw ZSkpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctdGFibGUtaW5zZXJ0LXJvdyAib3JnLXRhYmxlIiAo Jm9wdGlvbmFsIGFyZykpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctdGFibGUtcGFzdGUtcmVjdGFu Z2xlICJvcmctdGFibGUiICgpKQ0KKGRlY2xhcmUtZnVuY3Rpb24gb3JnLXRhYmxlLW1heWJlLWV2 YWwtZm9ybXVsYSAib3JnLXRhYmxlIiAoKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy10YWJsZS1t YXliZS1yZWNhbGN1bGF0ZS1saW5lICJvcmctdGFibGUiICgpKQ0KDQooZGVjbGFyZS1mdW5jdGlv biBvcmctZWxlbWVudC0tcGFyc2Utb2JqZWN0cyAib3JnLWVsZW1lbnQiDQoJCSAgKGJlZyBlbmQg YWNjIHJlc3RyaWN0aW9uKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1lbGVtZW50LWF0LXBvaW50 ICJvcmctZWxlbWVudCIgKCZvcHRpb25hbCBrZWVwLXRyYWlsKSkNCihkZWNsYXJlLWZ1bmN0aW9u IG9yZy1lbGVtZW50LWNvbnRlbnRzICJvcmctZWxlbWVudCIgKGVsZW1lbnQpKQ0KKGRlY2xhcmUt ZnVuY3Rpb24gb3JnLWVsZW1lbnQtY29udGV4dCAib3JnLWVsZW1lbnQiICgmb3B0aW9uYWwgZWxl bWVudCkpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctZWxlbWVudC1pbnRlcnByZXQtZGF0YSAib3Jn LWVsZW1lbnQiDQoJCSAgKGRhdGEgJm9wdGlvbmFsIHBhcmVudCkpDQooZGVjbGFyZS1mdW5jdGlv biBvcmctZWxlbWVudC1tYXAgIm9yZy1lbGVtZW50Ig0KCQkgIChkYXRhIHR5cGVzIGZ1biAmb3B0 aW9uYWwgaW5mbyBmaXJzdC1tYXRjaCBuby1yZWN1cnNpb24pKQ0KKGRlY2xhcmUtZnVuY3Rpb24g b3JnLWVsZW1lbnQtbmVzdGVkLXAgIm9yZy1lbGVtZW50IiAoZWxlbS1hIGVsZW0tYikpDQooZGVj bGFyZS1mdW5jdGlvbiBvcmctZWxlbWVudC1wYXJzZS1idWZmZXIgIm9yZy1lbGVtZW50Ig0KCQkg ICgmb3B0aW9uYWwgZ3JhbnVsYXJpdHkgdmlzaWJsZS1vbmx5KSkNCihkZWNsYXJlLWZ1bmN0aW9u IG9yZy1lbGVtZW50LXByb3BlcnR5ICJvcmctZWxlbWVudCIgKHByb3BlcnR5IGVsZW1lbnQpKQ0K KGRlY2xhcmUtZnVuY3Rpb24gb3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5ICJvcmctZWxlbWVudCIN CgkJICAoZWxlbWVudCBwcm9wZXJ0eSB2YWx1ZSkpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctZWxl bWVudC1zd2FwLUEtQiAib3JnLWVsZW1lbnQiIChlbGVtLWEgZWxlbS1iKSkNCihkZWNsYXJlLWZ1 bmN0aW9uIG9yZy1lbGVtZW50LS1wYXJzZS1vYmplY3RzICJvcmctZWxlbWVudCINCgkJICAoYmVn IGVuZCBhY2MgcmVzdHJpY3Rpb24pKQ0KKGRlY2xhcmUtZnVuY3Rpb24gb3JnLWVsZW1lbnQtcGFy c2UtYnVmZmVyICJvcmctZWxlbWVudCINCgkJICAoJm9wdGlvbmFsIGdyYW51bGFyaXR5IHZpc2li bGUtb25seSkpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctZWxlbWVudC1yZXN0cmljdGlvbiAib3Jn LWVsZW1lbnQiIChlbGVtZW50KSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1lbGVtZW50LXR5cGUg Im9yZy1lbGVtZW50IiAoZWxlbWVudCkpDQoNCjs7IGxvYWQgbGFuZ3VhZ2VzIGJhc2VkIG9uIHZh bHVlIG9mIGBvcmctYmFiZWwtbG9hZC1sYW5ndWFnZXMnDQooZGVmdmFyIG9yZy1iYWJlbC1sb2Fk LWxhbmd1YWdlcykNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBvcmctYmFiZWwtZG8tbG9hZC1s YW5ndWFnZXMgKHN5bSB2YWx1ZSkNCiAgIkxvYWQgdGhlIGxhbmd1YWdlcyBkZWZpbmVkIGluIGBv cmctYmFiZWwtbG9hZC1sYW5ndWFnZXMnLiINCiAgKHNldC1kZWZhdWx0IHN5bSB2YWx1ZSkNCiAg KG1hcGMgKGxhbWJkYSAocGFpcikNCgkgIChsZXQgKChhY3RpdmUgKGNkciBwYWlyKSkgKGxhbmcg KHN5bWJvbC1uYW1lIChjYXIgcGFpcikpKSkNCgkgICAgKGlmIGFjdGl2ZQ0KCQkocHJvZ24NCgkJ ICAocmVxdWlyZSAoaW50ZXJuIChjb25jYXQgIm9iLSIgbGFuZykpKSkNCgkgICAgICAocHJvZ24N CgkJKGZ1bmNhbGwgJ2ZtYWt1bmJvdW5kDQoJCQkgKGludGVybiAoY29uY2F0ICJvcmctYmFiZWwt ZXhlY3V0ZToiIGxhbmcpKSkNCgkJKGZ1bmNhbGwgJ2ZtYWt1bmJvdW5kDQoJCQkgKGludGVybiAo Y29uY2F0ICJvcmctYmFiZWwtZXhwYW5kLWJvZHk6IiBsYW5nKSkpKSkpKQ0KCW9yZy1iYWJlbC1s b2FkLWxhbmd1YWdlcykpDQoNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1iYWJlbC10YW5nbGUtZmls ZSAib2ItdGFuZ2xlIiAoZmlsZSAmb3B0aW9uYWwgdGFyZ2V0LWZpbGUgbGFuZykpDQo7OzsjIyNh dXRvbG9hZA0KKGRlZnVuIG9yZy1iYWJlbC1sb2FkLWZpbGUgKGZpbGUgJm9wdGlvbmFsIGNvbXBp bGUpDQogICJMb2FkIEVtYWNzIExpc3Agc291cmNlIGNvZGUgYmxvY2tzIGluIHRoZSBPcmctbW9k ZSBGSUxFLg0KVGhpcyBmdW5jdGlvbiBleHBvcnRzIHRoZSBzb3VyY2UgY29kZSB1c2luZyBgb3Jn LWJhYmVsLXRhbmdsZScNCmFuZCB0aGVuIGxvYWRzIHRoZSByZXN1bHRpbmcgZmlsZSB1c2luZyBg bG9hZC1maWxlJy4gIFdpdGggcHJlZml4DQphcmcgKG5vbmludGVyYWN0aXZlbHk6IDJuZCBhcmcp IENPTVBJTEUgdGhlIHRhbmdsZWQgRW1hY3MgTGlzcA0KZmlsZSB0byBieXRlLWNvZGUgYmVmb3Jl IGl0IGlzIGxvYWRlZC4iDQogIChpbnRlcmFjdGl2ZSAiZkZpbGUgdG8gbG9hZDogXG5QIikNCiAg KHJlcXVpcmUgJ29iLWNvcmUpDQogIChsZXQqICgoYWdlIChsYW1iZGEgKGZpbGUpDQoJCShmbG9h dC10aW1lDQoJCSAodGltZS1zdWJ0cmFjdCAoY3VycmVudC10aW1lKQ0KCQkJCShudGggNSAob3Ig KGZpbGUtYXR0cmlidXRlcyAoZmlsZS10cnVlbmFtZSBmaWxlKSkNCgkJCQkJICAgKGZpbGUtYXR0 cmlidXRlcyBmaWxlKSkpKSkpKQ0KCSAoYmFzZS1uYW1lIChmaWxlLW5hbWUtc2Fucy1leHRlbnNp b24gZmlsZSkpDQoJIChleHBvcnRlZC1maWxlIChjb25jYXQgYmFzZS1uYW1lICIuZWwiKSkpDQog ICAgOzsgdGFuZ2xlIGlmIHRoZSBvcmctbW9kZSBmaWxlIGlzIG5ld2VyIHRoYW4gdGhlIGVsaXNw IGZpbGUNCiAgICAodW5sZXNzIChhbmQgKGZpbGUtZXhpc3RzLXAgZXhwb3J0ZWQtZmlsZSkNCgkJ ICg+IChmdW5jYWxsIGFnZSBmaWxlKSAoZnVuY2FsbCBhZ2UgZXhwb3J0ZWQtZmlsZSkpKQ0KICAg ICAgKHNldHEgZXhwb3J0ZWQtZmlsZQ0KCSAgICAoY2FyIChvcmctYmFiZWwtdGFuZ2xlLWZpbGUg ZmlsZSBleHBvcnRlZC1maWxlICJlbWFjcy1saXNwIikpKSkNCiAgICAobWVzc2FnZSAiJXMgJXMi DQoJICAgICAoaWYgY29tcGlsZQ0KCQkgKHByb2duIChieXRlLWNvbXBpbGUtZmlsZSBleHBvcnRl ZC1maWxlICdsb2FkKQ0KCQkJIkNvbXBpbGVkIGFuZCBsb2FkZWQiKQ0KCSAgICAgICAocHJvZ24g KGxvYWQtZmlsZSBleHBvcnRlZC1maWxlKSAiTG9hZGVkIikpDQoJICAgICBleHBvcnRlZC1maWxl KSkpDQoNCihkZWZjdXN0b20gb3JnLWJhYmVsLWxvYWQtbGFuZ3VhZ2VzICcoKGVtYWNzLWxpc3Ag LiB0KSkNCiAgIkxhbmd1YWdlcyB3aGljaCBjYW4gYmUgZXZhbHVhdGVkIGluIE9yZy1tb2RlIGJ1 ZmZlcnMuDQpUaGlzIGxpc3QgY2FuIGJlIHVzZWQgdG8gbG9hZCBzdXBwb3J0IGZvciBhbnkgb2Yg dGhlIGxhbmd1YWdlcw0KYmVsb3csIG5vdGUgdGhhdCBlYWNoIGxhbmd1YWdlIHdpbGwgZGVwZW5k IG9uIGEgZGlmZmVyZW50IHNldCBvZg0Kc3lzdGVtIGV4ZWN1dGFibGVzIGFuZC9vciBFbWFjcyBt b2Rlcy4gIFdoZW4gYSBsYW5ndWFnZSBpcw0KXCJsb2FkZWRcIiwgdGhlbiBjb2RlIGJsb2NrcyBp biB0aGF0IGxhbmd1YWdlIGNhbiBiZSBldmFsdWF0ZWQNCndpdGggYG9yZy1iYWJlbC1leGVjdXRl LXNyYy1ibG9jaycgYm91bmQgYnkgZGVmYXVsdCB0byBDLWMNCkMtYyAobm90ZSB0aGUgYG9yZy1i YWJlbC1uby1ldmFsLW9uLWN0cmwtYy1jdHJsLWMnIHZhcmlhYmxlIGNhbg0KYmUgc2V0IHRvIHJl bW92ZSBjb2RlIGJsb2NrIGV2YWx1YXRpb24gZnJvbSB0aGUgQy1jIEMtYw0Ka2V5YmluZGluZy4g IEJ5IGRlZmF1bHQgb25seSBFbWFjcyBMaXNwICh3aGljaCBoYXMgbm8NCnJlcXVpcmVtZW50cykg aXMgbG9hZGVkLiINCiAgOmdyb3VwICdvcmctYmFiZWwNCiAgOnNldCAnb3JnLWJhYmVsLWRvLWxv YWQtbGFuZ3VhZ2VzDQogIDp2ZXJzaW9uICIyNC4xIg0KICA6dHlwZSAnKGFsaXN0IDp0YWcgIkJh YmVsIExhbmd1YWdlcyINCgkJOmtleS10eXBlDQoJCShjaG9pY2UNCgkJIChjb25zdCA6dGFnICJB d2siIGF3aykNCgkJIChjb25zdCA6dGFnICJDIiBDKQ0KCQkgKGNvbnN0IDp0YWcgIlIiIFIpDQoJ CSAoY29uc3QgOnRhZyAiQXN5bXB0b3RlIiBhc3ltcHRvdGUpDQoJCSAoY29uc3QgOnRhZyAiQ2Fs YyIgY2FsYykNCgkJIChjb25zdCA6dGFnICJDbG9qdXJlIiBjbG9qdXJlKQ0KCQkgKGNvbnN0IDp0 YWcgIkNTUyIgY3NzKQ0KCQkgKGNvbnN0IDp0YWcgIkRpdGFhIiBkaXRhYSkNCgkJIChjb25zdCA6 dGFnICJEb3QiIGRvdCkNCgkJIChjb25zdCA6dGFnICJFbWFjcyBMaXNwIiBlbWFjcy1saXNwKQ0K CQkgKGNvbnN0IDp0YWcgIkZvcnRyYW4iIGZvcnRyYW4pDQoJCSAoY29uc3QgOnRhZyAiR251cGxv dCIgZ251cGxvdCkNCgkJIChjb25zdCA6dGFnICJIYXNrZWxsIiBoYXNrZWxsKQ0KCQkgKGNvbnN0 IDp0YWcgIklPIiBpbykNCgkJIChjb25zdCA6dGFnICJKYXZhIiBqYXZhKQ0KCQkgKGNvbnN0IDp0 YWcgIkphdmFzY3JpcHQiIGpzKQ0KCQkgKGNvbnN0IDp0YWcgIkxhVGVYIiBsYXRleCkNCgkJIChj b25zdCA6dGFnICJMZWRnZXIiIGxlZGdlcikNCgkJIChjb25zdCA6dGFnICJMaWx5cG9uZCIgbGls eXBvbmQpDQoJCSAoY29uc3QgOnRhZyAiTGlzcCIgbGlzcCkNCgkJIChjb25zdCA6dGFnICJNYWtl ZmlsZSIgbWFrZWZpbGUpDQoJCSAoY29uc3QgOnRhZyAiTWF4aW1hIiBtYXhpbWEpDQoJCSAoY29u c3QgOnRhZyAiTWF0bGFiIiBtYXRsYWIpDQoJCSAoY29uc3QgOnRhZyAiTXNjZ2VuIiBtc2NnZW4p DQoJCSAoY29uc3QgOnRhZyAiT2NhbWwiIG9jYW1sKQ0KCQkgKGNvbnN0IDp0YWcgIk9jdGF2ZSIg b2N0YXZlKQ0KCQkgKGNvbnN0IDp0YWcgIk9yZyIgb3JnKQ0KCQkgKGNvbnN0IDp0YWcgIlBlcmwi IHBlcmwpDQoJCSAoY29uc3QgOnRhZyAiUGljbyBMaXNwIiBwaWNvbGlzcCkNCgkJIChjb25zdCA6 dGFnICJQbGFudFVNTCIgcGxhbnR1bWwpDQoJCSAoY29uc3QgOnRhZyAiUHl0aG9uIiBweXRob24p DQoJCSAoY29uc3QgOnRhZyAiUnVieSIgcnVieSkNCgkJIChjb25zdCA6dGFnICJTYXNzIiBzYXNz KQ0KCQkgKGNvbnN0IDp0YWcgIlNjYWxhIiBzY2FsYSkNCgkJIChjb25zdCA6dGFnICJTY2hlbWUi IHNjaGVtZSkNCgkJIChjb25zdCA6dGFnICJTY3JlZW4iIHNjcmVlbikNCgkJIChjb25zdCA6dGFn ICJTaGVsbCBTY3JpcHQiIHNoKQ0KCQkgKGNvbnN0IDp0YWcgIlNoZW4iIHNoZW4pDQoJCSAoY29u c3QgOnRhZyAiU3FsIiBzcWwpDQoJCSAoY29uc3QgOnRhZyAiU3FsaXRlIiBzcWxpdGUpKQ0KCQk6 dmFsdWUtdHlwZSAoYm9vbGVhbiA6dGFnICJBY3RpdmF0ZSIgOnZhbHVlIHQpKSkNCg0KOzs7OyBD dXN0b21pemF0aW9uIHZhcmlhYmxlcw0KKGRlZmN1c3RvbSBvcmctY2xvbmUtZGVsZXRlLWlkIG5p bA0KICAiUmVtb3ZlIElEIHByb3BlcnR5IG9mIGNsb25lcyBvZiBhIHN1YnRyZWUuDQpXaGVuIG5v bi1uaWwsIGNsb25lcyBvZiBhIHN1YnRyZWUgZG9uJ3QgaW5oZXJpdCB0aGUgSUQgcHJvcGVydHku DQpPdGhlcndpc2UgdGhleSBpbmhlcml0IHRoZSBJRCBwcm9wZXJ0eSB3aXRoIGEgbmV3IHVuaXF1 ZQ0KaWRlbnRpZmllci4iDQogIDp0eXBlICdib29sZWFuDQogIDp2ZXJzaW9uICIyNC4xIg0KICA6 Z3JvdXAgJ29yZy1pZCkNCg0KOzs7IFZlcnNpb24NCihvcmctY2hlY2stdmVyc2lvbikNCg0KOzs7 IyMjYXV0b2xvYWQNCihkZWZ1biBvcmctdmVyc2lvbiAoJm9wdGlvbmFsIGhlcmUgZnVsbCBtZXNz YWdlKQ0KICAiU2hvdyB0aGUgb3JnLW1vZGUgdmVyc2lvbiBpbiB0aGUgZWNobyBhcmVhLg0KV2l0 aCBwcmVmaXggYXJndW1lbnQgSEVSRSwgaW5zZXJ0IGl0IGF0IHBvaW50Lg0KV2hlbiBGVUxMIGlz IG5vbi1uaWwsIHVzZSBhIHZlcmJvc2UgdmVyc2lvbiBzdHJpbmcuDQpXaGVuIE1FU1NBR0UgaXMg bm9uLW5pbCwgZGlzcGxheSBhIG1lc3NhZ2Ugd2l0aCB0aGUgdmVyc2lvbi4iDQogIChpbnRlcmFj dGl2ZSAiUCIpDQogIChsZXQqICgob3JnLWRpciAgICAgICAgIChpZ25vcmUtZXJyb3JzIChvcmct ZmluZC1saWJyYXJ5LWRpciAib3JnIikpKQ0KCSAoc2F2ZS1sb2FkLXN1ZmZpeGVzICh3aGVuIChi b3VuZHAgJ2xvYWQtc3VmZml4ZXMpIGxvYWQtc3VmZml4ZXMpKQ0KCSAobG9hZC1zdWZmaXhlcyAo bGlzdCAiLmVsIikpDQoJIChvcmctaW5zdGFsbC1kaXIgKGlnbm9yZS1lcnJvcnMgKG9yZy1maW5k LWxpYnJhcnktZGlyICJvcmctbG9hZGRlZnMiKSkpDQoJIChvcmctdHJhc2ggICAgICAgKG9yDQoJ CQkgICAoYW5kIChmYm91bmRwICdvcmctcmVsZWFzZSkgKGZib3VuZHAgJ29yZy1naXQtdmVyc2lv bikpDQoJCQkgICAob3JnLWxvYWQtbm9lcnJvci1tdXN0c3VmZml4IChjb25jYXQgb3JnLWRpciAi b3JnLXZlcnNpb24iKSkpKQ0KCSAobG9hZC1zdWZmaXhlcyBzYXZlLWxvYWQtc3VmZml4ZXMpDQoJ IChvcmctdmVyc2lvbiAob3JnLXJlbGVhc2UpKQ0KCSAoZ2l0LXZlcnNpb24gKG9yZy1naXQtdmVy c2lvbikpDQoJICh2ZXJzaW9uIChmb3JtYXQgIk9yZy1tb2RlIHZlcnNpb24gJXMgKCVzIEAgJXMp Ig0KCQkJICBvcmctdmVyc2lvbg0KCQkJICBnaXQtdmVyc2lvbg0KCQkJICAoaWYgb3JnLWluc3Rh bGwtZGlyDQoJCQkgICAgICAoaWYgKHN0cmluZz0gb3JnLWRpciBvcmctaW5zdGFsbC1kaXIpDQoJ CQkJICBvcmctaW5zdGFsbC1kaXINCgkJCQkoY29uY2F0ICJtaXhlZCBpbnN0YWxsYXRpb24hICIg b3JnLWluc3RhbGwtZGlyICIgYW5kICIgb3JnLWRpcikpDQoJCQkgICAgIm9yZy1sb2FkZGVmcy5l bCBjYW4gbm90IGJlIGZvdW5kISIpKSkNCgkgKHZlcnNpb24xIChpZiBmdWxsIHZlcnNpb24gb3Jn LXZlcnNpb24pKSkNCiAgICAoaWYgKG9yZy1jYWxsZWQtaW50ZXJhY3RpdmVseS1wICdpbnRlcmFj dGl2ZSkNCgkoaWYgaGVyZQ0KCSAgICAoaW5zZXJ0IHZlcnNpb24pDQoJICAobWVzc2FnZSB2ZXJz aW9uKSkNCiAgICAgIChpZiBtZXNzYWdlIChtZXNzYWdlIHZlcnNpb24xKSkNCiAgICAgIHZlcnNp b24xKSkpDQoNCihkZWZjb25zdCBvcmctdmVyc2lvbiAob3JnLXZlcnNpb24pKQ0KDQo7OzsgQ29t cGF0aWJpbGl0eSBjb25zdGFudHMNCg0KOzs7IFRoZSBjdXN0b20gdmFyaWFibGVzDQoNCihkZWZn cm91cCBvcmcgbmlsDQogICJPdXRsaW5lLWJhc2VkIG5vdGVzIG1hbmFnZW1lbnQgYW5kIG9yZ2Fu aXplci4iDQogIDp0YWcgIk9yZyINCiAgOmdyb3VwICdvdXRsaW5lcw0KICA6Z3JvdXAgJ2NhbGVu ZGFyKQ0KDQooZGVmY3VzdG9tIG9yZy1tb2RlLWhvb2sgbmlsDQogICJNb2RlIGhvb2sgZm9yIE9y Zy1tb2RlLCBydW4gYWZ0ZXIgdGhlIG1vZGUgd2FzIHR1cm5lZCBvbi4iDQogIDpncm91cCAnb3Jn DQogIDp0eXBlICdob29rKQ0KDQooZGVmY3VzdG9tIG9yZy1sb2FkLWhvb2sgbmlsDQogICJIb29r IHRoYXQgaXMgcnVuIGFmdGVyIG9yZy5lbCBoYXMgYmVlbiBsb2FkZWQuIg0KICA6Z3JvdXAgJ29y Zw0KICA6dHlwZSAnaG9vaykNCg0KKGRlZmN1c3RvbSBvcmctbG9nLWJ1ZmZlci1zZXR1cC1ob29r IG5pbA0KICAiSG9vayB0aGF0IGlzIHJ1biBhZnRlciBhbiBPcmcgbG9nIGJ1ZmZlciBpcyBjcmVh dGVkLiINCiAgOmdyb3VwICdvcmcNCiAgOnZlcnNpb24gIjI0LjEiDQogIDp0eXBlICdob29rKQ0K DQooZGVmdmFyIG9yZy1tb2R1bGVzKSAgOyBkZWZpbmVkIGJlbG93DQooZGVmdmFyIG9yZy1tb2R1 bGVzLWxvYWRlZCBuaWwNCiAgIkhhdmUgdGhlIG1vZHVsZXMgYmVlbiBsb2FkZWQgYWxyZWFkeT8i KQ0KDQooZGVmdW4gb3JnLWxvYWQtbW9kdWxlcy1tYXliZSAoJm9wdGlvbmFsIGZvcmNlKQ0KICAi TG9hZCBhbGwgZXh0ZW5zaW9ucyBsaXN0ZWQgaW4gYG9yZy1tb2R1bGVzJy4iDQogICh3aGVuIChv ciBmb3JjZSAobm90IG9yZy1tb2R1bGVzLWxvYWRlZCkpDQogICAgKG1hcGMgKGxhbWJkYSAoZXh0 KQ0KCSAgICAoY29uZGl0aW9uLWNhc2UgbmlsIChyZXF1aXJlIGV4dCkNCgkgICAgICAoZXJyb3Ig KG1lc3NhZ2UgIlByb2JsZW1zIHdoaWxlIHRyeWluZyB0byBsb2FkIGZlYXR1cmUgYCVzJyIgZXh0 KSkpKQ0KCSAgb3JnLW1vZHVsZXMpDQogICAgKHNldHEgb3JnLW1vZHVsZXMtbG9hZGVkIHQpKSkN Cg0KKGRlZnVuIG9yZy1zZXQtbW9kdWxlcyAodmFyIHZhbHVlKQ0KICAiU2V0IFZBUiB0byBWQUxV RSBhbmQgY2FsbCBgb3JnLWxvYWQtbW9kdWxlcy1tYXliZScgd2l0aCB0aGUgZm9yY2UgZmxhZy4i DQogIChzZXQgdmFyIHZhbHVlKQ0KICAod2hlbiAoZmVhdHVyZXAgJ29yZykNCiAgICAob3JnLWxv YWQtbW9kdWxlcy1tYXliZSAnZm9yY2UpKSkNCg0KKGRlZmN1c3RvbSBvcmctbW9kdWxlcyAnKG9y Zy13M20gb3JnLWJiZGIgb3JnLWJpYnRleCBvcmctZG9jdmlldyBvcmctZ251cyBvcmctaW5mbyBv cmctaXJjIG9yZy1taGUgb3JnLXJtYWlsKQ0KICAiTW9kdWxlcyB0aGF0IHNob3VsZCBhbHdheXMg YmUgbG9hZGVkIHRvZ2V0aGVyIHdpdGggb3JnLmVsLg0KDQpJZiBhIGRlc2NyaXB0aW9uIHN0YXJ0 cyB3aXRoIDxDPiwgdGhlIGZpbGUgaXMgbm90IHBhcnQgb2YgRW1hY3MNCmFuZCBsb2FkaW5nIGl0 IHdpbGwgcmVxdWlyZSB0aGF0IHlvdSBoYXZlIGRvd25sb2FkZWQgYW5kIHByb3Blcmx5DQppbnN0 YWxsZWQgdGhlIE9yZyBtb2RlIGRpc3RyaWJ1dGlvbi4NCg0KWW91IGNhbiBhbHNvIHVzZSB0aGlz IHN5c3RlbSB0byBsb2FkIGV4dGVybmFsIHBhY2thZ2VzIChpLmUuIG5laXRoZXIgT3JnDQpjb3Jl IG1vZHVsZXMsIG5vciBtb2R1bGVzIGZyb20gdGhlIENPTlRSSUIgZGlyZWN0b3J5KS4gIEp1c3Qg YWRkIHN5bWJvbHMNCnRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuICBJZiB0aGUgcGFja2FnZSBpcyBj YWxsZWQgb3JnLXh5ei5lbCwgdGhlbiB5b3UgbmVlZA0KdG8gYWRkIHRoZSBzeW1ib2wgYHh5eics IGFuZCB0aGUgcGFja2FnZSBtdXN0IGhhdmUgYSBjYWxsIHRvOg0KDQogICBcKHByb3ZpZGUgJ29y Zy14eXopDQoNCkZvciBleHBvcnQgc3BlY2lmaWMgbW9kdWxlcywgc2VlIGFsc28gYG9yZy1leHBv cnQtYmFja2VuZHMnLiINCiAgOmdyb3VwICdvcmcNCiAgOnNldCAnb3JnLXNldC1tb2R1bGVzDQog IDp2ZXJzaW9uICIyNC40Ig0KICA6cGFja2FnZS12ZXJzaW9uICcoT3JnIC4gIjguMCIpDQogIDp0 eXBlDQogICcoc2V0IDpncmVlZHkgdA0KCShjb25zdCA6dGFnICIgICBiYmRiOiAgICAgICAgICAg ICAgTGlua3MgdG8gQkJEQiBlbnRyaWVzIiBvcmctYmJkYikNCgkoY29uc3QgOnRhZyAiICAgYmli dGV4OiAgICAgICAgICAgIExpbmtzIHRvIEJpYlRlWCBlbnRyaWVzIiBvcmctYmlidGV4KQ0KCShj b25zdCA6dGFnICIgICBjcnlwdDogICAgICAgICAgICAgRW5jcnlwdGlvbiBvZiBzdWJ0cmVlcyIg b3JnLWNyeXB0KQ0KCShjb25zdCA6dGFnICIgICBjdGFnczogICAgICAgICAgICAgQWNjZXNzIHRv IEVtYWNzIHRhZ3Mgd2l0aCBsaW5rcyIgb3JnLWN0YWdzKQ0KCShjb25zdCA6dGFnICIgICBkb2N2 aWV3OiAgICAgICAgICAgTGlua3MgdG8gZG9jLXZpZXcgYnVmZmVycyIgb3JnLWRvY3ZpZXcpDQoJ KGNvbnN0IDp0YWcgIiAgIGdudXM6ICAgICAgICAgICAgICBMaW5rcyB0byBHTlVTIGZvbGRlcnMv bWVzc2FnZXMiIG9yZy1nbnVzKQ0KCShjb25zdCA6dGFnICIgICBoYWJpdDogICAgICAgICAgICAg VHJhY2sgeW91ciBjb25zaXN0ZW5jeSB3aXRoIGhhYml0cyIgb3JnLWhhYml0KQ0KCShjb25zdCA6 dGFnICIgICBpZDogICAgICAgICAgICAgICAgR2xvYmFsIElEcyBmb3IgaWRlbnRpZnlpbmcgZW50 cmllcyIgb3JnLWlkKQ0KCShjb25zdCA6dGFnICIgICBpbmZvOiAgICAgICAgICAgICAgTGlua3Mg dG8gSW5mbyBub2RlcyIgb3JnLWluZm8pDQoJKGNvbnN0IDp0YWcgIiAgIGlubGluZXRhc2s6ICAg ICAgICBUYXNrcyBpbmRlcGVuZGVudCBvZiBvdXRsaW5lIGhpZXJhcmNoeSIgb3JnLWlubGluZXRh c2spDQoJKGNvbnN0IDp0YWcgIiAgIGlyYzogICAgICAgICAgICAgICBMaW5rcyB0byBJUkMvRVJD IGNoYXQgc2Vzc2lvbnMiIG9yZy1pcmMpDQoJKGNvbnN0IDp0YWcgIiAgIG1oZTogICAgICAgICAg ICAgICBMaW5rcyB0byBNSEUgZm9sZGVycy9tZXNzYWdlcyIgb3JnLW1oZSkNCgkoY29uc3QgOnRh ZyAiICAgbW91c2U6ICAgICAgICAgICAgIEFkZGl0aW9uYWwgbW91c2Ugc3VwcG9ydCIgb3JnLW1v dXNlKQ0KCShjb25zdCA6dGFnICIgICBwcm90b2NvbDogICAgICAgICAgSW50ZXJjZXB0IGNhbGxz IGZyb20gZW1hY3NjbGllbnQiIG9yZy1wcm90b2NvbCkNCgkoY29uc3QgOnRhZyAiICAgcm1haWw6 ICAgICAgICAgICAgIExpbmtzIHRvIFJNQUlMIGZvbGRlcnMvbWVzc2FnZXMiIG9yZy1ybWFpbCkN CgkoY29uc3QgOnRhZyAiICAgdzNtOiAgICAgICAgICAgICAgIFNwZWNpYWwgY3V0L3Bhc3RlIGZy b20gdzNtIHRvIE9yZy1tb2RlLiIgb3JnLXczbSkNCg0KCShjb25zdCA6dGFnICJDICBhbm5vdGF0 ZS1maWxlOiAgICAgQW5ub3RhdGUgYSBmaWxlIHdpdGggb3JnIHN5bnRheCIgb3JnLWFubm90YXRl LWZpbGUpDQoJKGNvbnN0IDp0YWcgIkMgIGJvb2ttYXJrOiAgICAgICAgICBPcmctbW9kZSBsaW5r cyB0byBib29rbWFya3MiIG9yZy1ib29rbWFyaykNCgkoY29uc3QgOnRhZyAiQyAgYnVsbGV0czog ICAgICAgICAgIEFkZCBvdmVybGF5cyB0byBoZWFkbGluZXMgc3RhcnMiIG9yZy1idWxsZXRzKQ0K CShjb25zdCA6dGFnICJDICBjaGVja2xpc3Q6ICAgICAgICAgRXh0cmEgZnVuY3Rpb25zIGZvciBj aGVja2xpc3RzIGluIHJlcGVhdGVkIHRhc2tzIiBvcmctY2hlY2tsaXN0KQ0KCShjb25zdCA6dGFn ICJDICBjaG9vc2U6ICAgICAgICAgICAgVXNlIFRPRE8ga2V5d29yZHMgdG8gbWFyayBkZWNpc2lv bnMgc3RhdGVzIiBvcmctY2hvb3NlKQ0KCShjb25zdCA6dGFnICJDICBjb2xsZWN0b3I6ICAgICAg ICAgQ29sbGVjdCBwcm9wZXJ0aWVzIGludG8gdGFibGVzIiBvcmctY29sbGVjdG9yKQ0KCShjb25z dCA6dGFnICJDICBkZXBlbmQ6ICAgICAgICAgICAgVE9ETyBkZXBlbmRlbmNpZXMgZm9yIE9yZy1t b2RlXG5cdFx0XHQoUEFSVElBTExZIE9CU09MRVRFLCBzZWUgYnVpbHQtaW4gZGVwZW5kZW5jeSBz dXBwb3J0KSkiIG9yZy1kZXBlbmQpDQoJKGNvbnN0IDp0YWcgIkMgIGRyaWxsOiAgICAgICAgICAg ICBGbGFzaGNhcmRzIGFuZCBzcGFjZWQgcmVwZXRpdGlvbiBmb3IgT3JnLW1vZGUiIG9yZy1kcmls bCkNCgkoY29uc3QgOnRhZyAiQyAgZWxpc3Atc3ltYm9sOiAgICAgIE9yZy1tb2RlIGxpbmtzIHRv IGVtYWNzLWxpc3Agc3ltYm9scyIgb3JnLWVsaXNwLXN5bWJvbCkNCgkoY29uc3QgOnRhZyAiQyAg ZXNoZWxsICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGxpbmtzIHRvIHdvcmtpbmcgZGlyZWN0b3Jp ZXMgaW4gZXNoZWxsIiBvcmctZXNoZWxsKQ0KCShjb25zdCA6dGFnICJDICBldmFsLWxpZ2h0OiAg ICAgICAgRXZhbHVhdGUgaW5idWZmZXItY29kZSBvbiBkZW1hbmQiIG9yZy1ldmFsLWxpZ2h0KQ0K CShjb25zdCA6dGFnICJDICBldmFsOiAgICAgICAgICAgICAgSW5jbHVkZSBjb21tYW5kIG91dHB1 dCBhcyB0ZXh0IiBvcmctZXZhbCkNCgkoY29uc3QgOnRhZyAiQyAgZXhwaXJ5OiAgICAgICAgICAg IEV4cGlyeSBtZWNoYW5pc20gZm9yIE9yZy1tb2RlIGVudHJpZXMiIG9yZy1leHBpcnkpDQoJKGNv bnN0IDp0YWcgIkMgIGZhdnRhYmxlOiAgICAgICAgICBMb29rdXAgdGFibGUgb2YgZmF2b3JpdGUg cmVmZXJlbmNlcyBhbmQgbGlua3MiIG9yZy1mYXZ0YWJsZSkNCgkoY29uc3QgOnRhZyAiQyAgZ2l0 LWxpbms6ICAgICAgICAgIFByb3ZpZGUgb3JnIGxpbmtzIHRvIHNwZWNpZmljIGZpbGUgdmVyc2lv biIgb3JnLWdpdC1saW5rKQ0KCShjb25zdCA6dGFnICJDICBpbnRlcmFjdGl2ZS1xdWVyeTogSW50 ZXJhY3RpdmUgbW9kaWZpY2F0aW9uIG9mIHRhZ3MgcXVlcnlcblx0XHRcdChQQVJUSUFMTFkgT0JT T0xFVEUsIHNlZSBzZWNvbmRhcnkgZmlsdGVyaW5nKSIgb3JnLWludGVyYWN0aXZlLXF1ZXJ5KQ0K ICAgICAgICAoY29uc3QgOnRhZyAiQyAgaW52b2ljZTogICAgICAgICAgIEhlbHAgbWFuYWdlIGNs aWVudCBpbnZvaWNlcyBpbiBPcmctbW9kZSIgb3JnLWludm9pY2UpDQoJKGNvbnN0IDp0YWcgIkMg IGppcmE6ICAgICAgICAgICAgICBBZGQgYSBqaXJhOnRpY2tldCBwcm90b2NvbCB0byBPcmctbW9k ZSIgb3JnLWppcmEpDQoJKGNvbnN0IDp0YWcgIkMgIGxlYXJuOiAgICAgICAgICAgICBTdXBlck1l bW8ncyBpbmNyZW1lbnRhbCBsZWFybmluZyBhbGdvcml0aG0iIG9yZy1sZWFybikNCgkoY29uc3Qg OnRhZyAiQyAgbWFjLWlDYWwgICAgICAgICAgIEltcG9ydHMgZXZlbnRzIGZyb20gaUNhbC5hcHAg dG8gdGhlIEVtYWNzIGRpYXJ5IiBvcmctbWFjLWlDYWwpDQoJKGNvbnN0IDp0YWcgIkMgIG1hYy1s aW5rOiAgICAgICAgICBHcmFiIGxpbmtzIGFuZCB1cmwgZnJvbSB2YXJpb3VzIG1hYyBBcHBsaWNh dGlvbnMiIG9yZy1tYWMtbGluaykNCgkoY29uc3QgOnRhZyAiQyAgbWFpcml4OiAgICAgICAgICAg IEhvb2sgbWFpcml4IHNlYXJjaCBpbnRvIE9yZy1tb2RlIGZvciBkaWZmZXJlbnQgTVVBcyIgb3Jn LW1haXJpeCkNCgkoY29uc3QgOnRhZyAiQyAgbWFuOiAgICAgICAgICAgICAgIFN1cHBvcnQgZm9y IGxpbmtzIHRvIG1hbnBhZ2VzIGluIE9yZy1tb2RlIiBvcmctbWFuKQ0KCShjb25zdCA6dGFnICJD ICBtZXc6ICAgICAgICAgICAgICAgTGlua3MgdG8gTWV3IGZvbGRlcnMvbWVzc2FnZXMiIG9yZy1t ZXcpDQoJKGNvbnN0IDp0YWcgIkMgIG10YWdzOiAgICAgICAgICAgICBTdXBwb3J0IGZvciBtdXNl LWxpa2UgdGFncyIgb3JnLW10YWdzKQ0KCShjb25zdCA6dGFnICJDICBub3RtdWNoOiAgICAgICAg ICAgUHJvdmlkZSBvcmcgbGlua3MgdG8gbm90bXVjaCBzZWFyY2hlcyBvciBtZXNzYWdlcyIgb3Jn LW5vdG11Y2gpDQoJKGNvbnN0IDp0YWcgIkMgIHBhbmVsOiAgICAgICAgICAgICBTaW1wbGUgcm91 dGluZXMgZm9yIHVzIHdpdGggYmFkIG1lbW9yeSIgb3JnLXBhbmVsKQ0KCShjb25zdCA6dGFnICJD ICByZWdpc3RyeTogICAgICAgICAgQSByZWdpc3RyeSBmb3IgT3JnLW1vZGUgbGlua3MiIG9yZy1y ZWdpc3RyeSkNCgkoY29uc3QgOnRhZyAiQyAgc2NyZWVuOiAgICAgICAgICAgIFZpc2l0IHNjcmVl biBzZXNzaW9ucyB0aHJvdWdoIE9yZy1tb2RlIGxpbmtzIiBvcmctc2NyZWVuKQ0KCShjb25zdCA6 dGFnICJDICBzZWNyZXRhcnk6ICAgICAgICAgVGVhbSBtYW5hZ2VtZW50IHdpdGggb3JnLW1vZGUi IG9yZy1zZWNyZXRhcnkpDQoJKGNvbnN0IDp0YWcgIkMgIHNxbGluc2VydDogICAgICAgICBDb252 ZXJ0IE9yZy1tb2RlIHRhYmxlcyB0byBTUUwgaW5zZXJ0aW9ucyIgb3JndGJsLXNxbGluc2VydCkN CgkoY29uc3QgOnRhZyAiQyAgdG9jOiAgICAgICAgICAgICAgIFRhYmxlIG9mIGNvbnRlbnRzIGZv ciBPcmctbW9kZSBidWZmZXIiIG9yZy10b2MpDQoJKGNvbnN0IDp0YWcgIkMgIHRyYWNrOiAgICAg ICAgICAgICBLZWVwIHVwIHdpdGggT3JnLW1vZGUgZGV2ZWxvcG1lbnQiIG9yZy10cmFjaykNCgko Y29uc3QgOnRhZyAiQyAgdmVsb2NpdHkgICAgICAgICAgIFNvbWV0aGluZyBsaWtlIE5vdGF0aW9u YWwgVmVsb2NpdHkgZm9yIE9yZyIgb3JnLXZlbG9jaXR5KQ0KCShjb25zdCA6dGFnICJDICB2bTog ICAgICAgICAgICAgICAgTGlua3MgdG8gVk0gZm9sZGVycy9tZXNzYWdlcyIgb3JnLXZtKQ0KCShj b25zdCA6dGFnICJDICB3aWtpbm9kZXM6ICAgICAgICAgQ2FtZWxDYXNlIHdpa2ktbGlrZSBsaW5r cyIgb3JnLXdpa2lub2RlcykNCgkoY29uc3QgOnRhZyAiQyAgd2w6ICAgICAgICAgICAgICAgIExp bmtzIHRvIFdhbmRlcmx1c3QgZm9sZGVycy9tZXNzYWdlcyIgb3JnLXdsKQ0KCShyZXBlYXQgOnRh ZyAiRXh0ZXJuYWwgcGFja2FnZXMiIDppbmxpbmUgdCAoc3ltYm9sIDp0YWcgIlBhY2thZ2UiKSkp KQ0KDQooZGVmdmFyIG9yZy1leHBvcnQtLXJlZ2lzdGVyZWQtYmFja2VuZHMpIDsgRnJvbSBveC5l bC4NCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1leHBvcnQtZGVyaXZlZC1iYWNrZW5kLXAgIm94IiAo YmFja2VuZCAmcmVzdCBiYWNrZW5kcykpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctZXhwb3J0LWJh Y2tlbmQtbmFtZSAib3giIChiYWNrZW5kKSkNCihkZWZjdXN0b20gb3JnLWV4cG9ydC1iYWNrZW5k cyAnKGFzY2lpIGh0bWwgaWNhbGVuZGFyIGxhdGV4KQ0KICAiTGlzdCBvZiBleHBvcnQgYmFjay1l bmRzIHRoYXQgc2hvdWxkIGJlIGFsd2F5cyBhdmFpbGFibGUuDQoNCklmIGEgZGVzY3JpcHRpb24g c3RhcnRzIHdpdGggPEM+LCB0aGUgZmlsZSBpcyBub3QgcGFydCBvZiBFbWFjcw0KYW5kIGxvYWRp bmcgaXQgd2lsbCByZXF1aXJlIHRoYXQgeW91IGhhdmUgZG93bmxvYWRlZCBhbmQgcHJvcGVybHkN Cmluc3RhbGxlZCB0aGUgT3JnIG1vZGUgZGlzdHJpYnV0aW9uLg0KDQpVbmxpa2UgdG8gYG9yZy1t b2R1bGVzJywgbGlicmFyaWVzIGluIHRoaXMgbGlzdCB3aWxsIG5vdCBiZQ0KbG9hZGVkIGFsb25n IHdpdGggT3JnLCBidXQgb25seSBvbmNlIHRoZSBleHBvcnQgZnJhbWV3b3JrIGlzDQpuZWVkZWQu DQoNClRoaXMgdmFyaWFibGUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBvcmcuZWwgaXMgbG9hZGVk LiAgSWYgeW91DQpuZWVkIHRvIG1ha2UgYSBjaGFuZ2Ugd2hpbGUgRW1hY3MgaXMgcnVubmluZywg dXNlIHRoZSBjdXN0b21pemUNCmludGVyZmFjZSBvciBydW4gdGhlIGZvbGxvd2luZyBjb2RlLCB3 aGVyZSBWQUwgc3RhbmRzIGZvciB0aGUgbmV3DQp2YWx1ZSBvZiB0aGUgdmFyaWFibGUsIGFmdGVy IHVwZGF0aW5nIGl0Og0KDQogIFwocHJvZ24NCiAgICBcKHNldHEgb3JnLWV4cG9ydC0tcmVnaXN0 ZXJlZC1iYWNrZW5kcw0KICAgICAgICAgIFwob3JnLXJlbW92ZS1pZi1ub3QNCiAgICAgICAgICAg XChsYW1iZGEgKGJhY2tlbmQpDQogICAgICAgICAgICAgXChsZXQgKChuYW1lIChvcmctZXhwb3J0 LWJhY2tlbmQtbmFtZSBiYWNrZW5kKSkpDQogICAgICAgICAgICAgICBcKG9yIChtZW1xIG5hbWUg dmFsKQ0KICAgICAgICAgICAgICAgICAgIFwoY2F0Y2ggJ3BhcmVudHANCiAgICAgICAgICAgICAg ICAgICAgIFwoZG9saXN0IChiIHZhbCkNCiAgICAgICAgICAgICAgICAgICAgICAgXChhbmQgKG9y Zy1leHBvcnQtZGVyaXZlZC1iYWNrZW5kLXAgYiBuYW1lKQ0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwodGhyb3cgJ3BhcmVudHAgdCkpKSkpKSkNCiAgICAgICAgICAgb3JnLWV4cG9ydC0t cmVnaXN0ZXJlZC1iYWNrZW5kcykpDQogICAgXChsZXQgKChuZXctbGlzdCAobWFwY2FyICdvcmct ZXhwb3J0LWJhY2tlbmQtbmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy1leHBv cnQtLXJlZ2lzdGVyZWQtYmFja2VuZHMpKSkNCiAgICAgIFwoZG9saXN0IChiYWNrZW5kIHZhbCkN CiAgICAgICAgXChjb25kDQogICAgICAgICBcKChub3QgKGxvYWQgKGZvcm1hdCBcIm94LSVzXCIg YmFja2VuZCkgdCB0KSkNCiAgICAgICAgICBcKG1lc3NhZ2UgXCJQcm9ibGVtcyB3aGlsZSB0cnlp bmcgdG8gbG9hZCBleHBvcnQgYmFjay1lbmQgYCVzJ1wiDQogICAgICAgICAgICAgICAgICAgYmFj a2VuZCkpDQogICAgICAgICBcKChub3QgKG1lbXEgYmFja2VuZCBuZXctbGlzdCkpIChwdXNoIGJh Y2tlbmQgbmV3LWxpc3QpKSkpDQogICAgICBcKHNldC1kZWZhdWx0ICdvcmctZXhwb3J0LWJhY2tl bmRzIG5ldy1saXN0KSkpDQoNCkFkZGluZyBhIGJhY2stZW5kIHRvIHRoaXMgbGlzdCB3aWxsIGFs c28gcHVsbCB0aGUgYmFjay1lbmQgaXQNCmRlcGVuZHMgb24sIGlmIGFueS4iDQogIDpncm91cCAn b3JnDQogIDpncm91cCAnb3JnLWV4cG9ydA0KICA6dmVyc2lvbiAiMjQuNCINCiAgOnBhY2thZ2Ut dmVyc2lvbiAnKE9yZyAuICI4LjAiKQ0KICA6aW5pdGlhbGl6ZSAnY3VzdG9tLWluaXRpYWxpemUt c2V0DQogIDpzZXQgKGxhbWJkYSAodmFyIHZhbCkNCgkgKGlmIChub3QgKGZlYXR1cmVwICdveCkp IChzZXQtZGVmYXVsdCB2YXIgdmFsKQ0KCSAgIDs7IEFueSBiYWNrLWVuZCBub3QgcmVxdWlyZWQg YW55bW9yZSAobm90IHByZXNlbnQgaW4gVkFMIGFuZCBub3QNCgkgICA7OyBhIHBhcmVudCBvZiBh bnkgYmFjay1lbmQgaW4gdGhlIG5ldyB2YWx1ZSkgaXMgcmVtb3ZlZCBmcm9tIHRoZQ0KCSAgIDs7 IGxpc3Qgb2YgcmVnaXN0ZXJlZCBiYWNrLWVuZHMuDQoJICAgKHNldHEgb3JnLWV4cG9ydC0tcmVn aXN0ZXJlZC1iYWNrZW5kcw0KCQkgKG9yZy1yZW1vdmUtaWYtbm90DQoJCSAgKGxhbWJkYSAoYmFj a2VuZCkNCgkJICAgIChsZXQgKChuYW1lIChvcmctZXhwb3J0LWJhY2tlbmQtbmFtZSBiYWNrZW5k KSkpDQoJCSAgICAgIChvciAobWVtcSBuYW1lIHZhbCkNCgkJCSAgKGNhdGNoICdwYXJlbnRwDQoJ CQkgICAgKGRvbGlzdCAoYiB2YWwpDQoJCQkgICAgICAoYW5kIChvcmctZXhwb3J0LWRlcml2ZWQt YmFja2VuZC1wIGIgbmFtZSkNCgkJCQkgICAodGhyb3cgJ3BhcmVudHAgdCkpKSkpKSkNCgkJICBv cmctZXhwb3J0LS1yZWdpc3RlcmVkLWJhY2tlbmRzKSkNCgkgICA7OyBOb3cgYnVpbGQgTkVXLUxJ U1Qgb2YgYm90aCBuZXcgYmFjay1lbmRzIGFuZCByZXF1aXJlZA0KCSAgIDs7IHBhcmVudHMuDQoJ ICAgKGxldCAoKG5ldy1saXN0IChtYXBjYXIgJ29yZy1leHBvcnQtYmFja2VuZC1uYW1lDQoJCQkJ ICAgb3JnLWV4cG9ydC0tcmVnaXN0ZXJlZC1iYWNrZW5kcykpKQ0KCSAgICAgKGRvbGlzdCAoYmFj a2VuZCB2YWwpDQoJICAgICAgIChjb25kDQoJCSgobm90IChsb2FkIChmb3JtYXQgIm94LSVzIiBi YWNrZW5kKSB0IHQpKQ0KCQkgKG1lc3NhZ2UgIlByb2JsZW1zIHdoaWxlIHRyeWluZyB0byBsb2Fk IGV4cG9ydCBiYWNrLWVuZCBgJXMnIg0KCQkJICBiYWNrZW5kKSkNCgkJKChub3QgKG1lbXEgYmFj a2VuZCBuZXctbGlzdCkpIChwdXNoIGJhY2tlbmQgbmV3LWxpc3QpKSkpDQoJICAgICA7OyBTZXQg VkFSIHRvIHRoYXQgbGlzdCB3aXRoIGZpeGVkIGRlcGVuZGVuY2llcy4NCgkgICAgIChzZXQtZGVm YXVsdCB2YXIgbmV3LWxpc3QpKSkpDQogIDp0eXBlICcoc2V0IDpncmVlZHkgdA0KCSAgICAgIChj b25zdCA6dGFnICIgICBhc2NpaSAgICAgICBFeHBvcnQgYnVmZmVyIHRvIEFTQ0lJIGZvcm1hdCIg YXNjaWkpDQoJICAgICAgKGNvbnN0IDp0YWcgIiAgIGJlYW1lciAgICAgIEV4cG9ydCBidWZmZXIg dG8gQmVhbWVyIHByZXNlbnRhdGlvbiIgYmVhbWVyKQ0KCSAgICAgIChjb25zdCA6dGFnICIgICBo dG1sICAgICAgICBFeHBvcnQgYnVmZmVyIHRvIEhUTUwgZm9ybWF0IiBodG1sKQ0KCSAgICAgIChj b25zdCA6dGFnICIgICBpY2FsZW5kYXIgICBFeHBvcnQgYnVmZmVyIHRvIGlDYWxlbmRhciBmb3Jt YXQiIGljYWxlbmRhcikNCgkgICAgICAoY29uc3QgOnRhZyAiICAgbGF0ZXggICAgICAgRXhwb3J0 IGJ1ZmZlciB0byBMYVRlWCBmb3JtYXQiIGxhdGV4KQ0KCSAgICAgIChjb25zdCA6dGFnICIgICBt YW4gICAgICAgICBFeHBvcnQgYnVmZmVyIHRvIE1BTiBmb3JtYXQiIG1hbikNCgkgICAgICAoY29u c3QgOnRhZyAiICAgbWQgICAgICAgICAgRXhwb3J0IGJ1ZmZlciB0byBNYXJrZG93biBmb3JtYXQi IG1kKQ0KCSAgICAgIChjb25zdCA6dGFnICIgICBvZHQgICAgICAgICBFeHBvcnQgYnVmZmVyIHRv IE9EVCBmb3JtYXQiIG9kdCkNCgkgICAgICAoY29uc3QgOnRhZyAiICAgb3JnICAgICAgICAgRXhw b3J0IGJ1ZmZlciB0byBPcmcgZm9ybWF0IiBvcmcpDQoJICAgICAgKGNvbnN0IDp0YWcgIiAgIHRl eGluZm8gICAgIEV4cG9ydCBidWZmZXIgdG8gVGV4aW5mbyBmb3JtYXQiIHRleGluZm8pDQoJICAg ICAgKGNvbnN0IDp0YWcgIkMgIGNvbmZsdWVuY2UgIEV4cG9ydCBidWZmZXIgdG8gQ29uZmx1ZW5j ZSBXaWtpIGZvcm1hdCIgY29uZmx1ZW5jZSkNCgkgICAgICAoY29uc3QgOnRhZyAiQyAgZGVjayAg ICAgICAgRXhwb3J0IGJ1ZmZlciB0byBkZWNrLmpzIHByZXNlbnRhdGlvbnMiIGRlY2spDQoJICAg ICAgKGNvbnN0IDp0YWcgIkMgIGZyZWVtaW5kICAgIEV4cG9ydCBidWZmZXIgdG8gRnJlZW1pbmQg bWluZG1hcCBmb3JtYXQiIGZyZWVtaW5kKQ0KCSAgICAgIChjb25zdCA6dGFnICJDICBncm9mZiAg ICAgICBFeHBvcnQgYnVmZmVyIHRvIEdyb2ZmIGZvcm1hdCIgZ3JvZmYpDQoJICAgICAgKGNvbnN0 IDp0YWcgIkMgIGtvbWEtbGV0dGVyIEV4cG9ydCBidWZmZXIgdG8gS09NQSBTY3JsdHRybDIgZm9y bWF0IiBrb21hLWxldHRlcikNCgkgICAgICAoY29uc3QgOnRhZyAiQyAgUlNTIDIuMCAgICAgRXhw b3J0IGJ1ZmZlciB0byBSU1MgMi4wIGZvcm1hdCIgcnNzKQ0KCSAgICAgIChjb25zdCA6dGFnICJD ICBzNSAgICAgICAgICBFeHBvcnQgYnVmZmVyIHRvIHM1IHByZXNlbnRhdGlvbnMiIHM1KQ0KCSAg ICAgIChjb25zdCA6dGFnICJDICB0YXNranVnZ2xlciBFeHBvcnQgYnVmZmVyIHRvIFRhc2tKdWdn bGVyIGZvcm1hdCIgdGFza2p1Z2dsZXIpKSkNCg0KKGV2YWwtYWZ0ZXItbG9hZCAnb3gNCiAgJyht YXBjDQogICAgKGxhbWJkYSAoYmFja2VuZCkNCiAgICAgIChjb25kaXRpb24tY2FzZSBuaWwgKHJl cXVpcmUgKGludGVybiAoZm9ybWF0ICJveC0lcyIgYmFja2VuZCkpKQ0KCShlcnJvciAobWVzc2Fn ZSAiUHJvYmxlbXMgd2hpbGUgdHJ5aW5nIHRvIGxvYWQgZXhwb3J0IGJhY2stZW5kIGAlcyciDQoJ CQliYWNrZW5kKSkpKQ0KICAgIG9yZy1leHBvcnQtYmFja2VuZHMpKQ0KDQooZGVmY3VzdG9tIG9y Zy1zdXBwb3J0LXNoaWZ0LXNlbGVjdCBuaWwNCiAgIk5vbi1uaWwgbWVhbnMgbWFrZSBzaGlmdC1j dXJzb3IgY29tbWFuZHMgc2VsZWN0IHRleHQgd2hlbiBwb3NzaWJsZS4NCg0KSW4gRW1hY3MgMjMs IHdoZW4gYHNoaWZ0LXNlbGVjdC1tb2RlJyBpcyBvbiwgc2hpZnRlZCBjdXJzb3Iga2V5cw0Kc3Rh cnQgc2VsZWN0aW5nIGEgcmVnaW9uLCBvciBlbmxhcmdlIHJlZ2lvbnMgc3RhcnRlZCBpbiB0aGlz IHdheS4NCkluIE9yZy1tb2RlLCBpbiBzcGVjaWFsIGNvbnRleHRzLCB0aGVzZSBzYW1lIGtleXMg YXJlIHVzZWQgZm9yDQpvdGhlciBwdXJwb3NlcywgaW1wb3J0YW50IGVub3VnaCB0byBjb21wZXRl IHdpdGggc2hpZnQgc2VsZWN0aW9uLg0KT3JnIHRyaWVzIHRvIGJhbGFuY2UgdGhlc2UgbmVlZHMg Ynkgc3VwcG9ydGluZyBgc2hpZnQtc2VsZWN0LW1vZGUnDQpvdXRzaWRlIHRoZXNlIHNwZWNpYWwg Y29udGV4dHMsIHVuZGVyIGNvbnRyb2wgb2YgdGhpcyB2YXJpYWJsZS4NCg0KVGhlIGRlZmF1bHQg b2YgdGhpcyB2YXJpYWJsZSBpcyBuaWwsIHRvIGF2b2lkIGNvbmZ1c2luZyBiZWhhdmlvci4gIFNo aWZ0ZWQNCmN1cnNvciBrZXlzIHdpbGwgdGhlbiBleGVjdXRlIE9yZyBjb21tYW5kcyBpbiB0aGUg Zm9sbG93aW5nIGNvbnRleHRzOg0KLSBvbiBhIGhlYWRsaW5lLCBjaGFuZ2luZyBUT0RPIHN0YXRl IChsZWZ0L3JpZ2h0KSBhbmQgcHJpb3JpdHkgKHVwL2Rvd24pDQotIG9uIGEgdGltZSBzdGFtcCwg Y2hhbmdpbmcgdGhlIHRpbWUNCi0gaW4gYSBwbGFpbiBsaXN0IGl0ZW0sIGNoYW5naW5nIHRoZSBi dWxsZXQgdHlwZQ0KLSBpbiBhIHByb3BlcnR5IGRlZmluaXRpb24gbGluZSwgc3dpdGNoaW5nIGJl dHdlZW4gYWxsb3dlZCB2YWx1ZXMNCi0gaW4gdGhlIEJFR0lOIGxpbmUgb2YgYSBjbG9jayB0YWJs ZSAoY2hhbmdpbmcgdGhlIHRpbWUgYmxvY2spLg0KT3V0c2lkZSB0aGVzZSBjb250ZXh0cywgdGhl IGNvbW1hbmRzIHdpbGwgdGhyb3cgYW4gZXJyb3IuDQoNCldoZW4gdGhpcyB2YXJpYWJsZSBpcyB0 IGFuZCB0aGUgY3Vyc29yIGlzIG5vdCBpbiBhIHNwZWNpYWwNCmNvbnRleHQsIE9yZy1tb2RlIHdp bGwgc3VwcG9ydCBzaGlmdC1zZWxlY3Rpb24gZm9yIG1ha2luZyBhbmQNCmVubGFyZ2luZyByZWdp b25zLiAgVG8gbWFrZSB0aGlzIG1vcmUgZWZmZWN0aXZlLCB0aGUgYnVsbGV0DQpjeWNsaW5nIHdp bGwgbm8gbG9uZ2VyIGhhcHBlbiBhbnl3aGVyZSBpbiBhbiBpdGVtIGxpbmUsIGJ1dCBvbmx5DQpp ZiB0aGUgY3Vyc29yIGlzIGV4YWN0bHkgb24gdGhlIGJ1bGxldC4NCg0KSWYgeW91IHNldCB0aGlz IHZhcmlhYmxlIHRvIHRoZSBzeW1ib2wgYGFsd2F5cycsIHRoZW4gdGhlIGtleXMNCndpbGwgbm90 IGJlIHNwZWNpYWwgaW4gaGVhZGxpbmVzLCBwcm9wZXJ0eSBsaW5lcywgYW5kIGl0ZW0gbGluZXMs DQp0byBtYWtlIHNoaWZ0IHNlbGVjdGlvbiB3b3JrIHRoZXJlIGFzIHdlbGwuICBJZiB0aGlzIGlz IHdoYXQgeW91DQp3YW50LCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIGNv bW1hbmRzOiBgQy1jIEMtdCcNCmFuZCBgQy1jICwnIHRvIGNoYW5nZSBUT0RPIHN0YXRlIGFuZCBw cmlvcml0eSwgYEMtdSBDLXUgQy1jIEMtdCcNCmNhbiBiZSB1c2VkIHRvIHN3aXRjaCBUT0RPIHNl dHMsIGBDLWMgLScgdG8gY3ljbGUgaXRlbSBidWxsZXQNCnR5cGVzLCBhbmQgcHJvcGVydGllcyBj YW4gYmUgZWRpdGVkIGJ5IGhhbmQgb3IgaW4gY29sdW1uIHZpZXcuDQoNCkhvd2V2ZXIsIHdoZW4g dGhlIGN1cnNvciBpcyBvbiBhIHRpbWVzdGFtcCwgc2hpZnQtY3Vyc29yIGNvbW1hbmRzDQp3aWxs IHN0aWxsIGVkaXQgdGhlIHRpbWUgc3RhbXAgLSB0aGlzIGlzIGp1c3QgdG9vIGdvb2QgdG8gZ2l2 ZSB1cC4NCg0KWEVtYWNzIHVzZXIgc2hvdWxkIGhhdmUgdGhpcyB2YXJpYWJsZSBzZXQgdG8gbmls LCBiZWNhdXNlDQpgc2hpZnQtc2VsZWN0LW1vZGUnIGlzIGluIEVtYWNzIDIzIG9yIGxhdGVyIG9u bHkuIg0KICA6Z3JvdXAgJ29yZw0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIk5l dmVyIiBuaWwpDQoJICAoY29uc3QgOnRhZyAiV2hlbiBvdXRzaWRlIHNwZWNpYWwgY29udGV4dCIg dCkNCgkgIChjb25zdCA6dGFnICJFdmVyeXdoZXJlIGV4Y2VwdCB0aW1lc3RhbXBzIiBhbHdheXMp KSkNCg0KKGRlZmN1c3RvbSBvcmctbG9vcC1vdmVyLWhlYWRsaW5lcy1pbi1hY3RpdmUtcmVnaW9u IG5pbA0KICAiU2hhbGwgc29tZSBjb21tYW5kcyBhY3QgdXBvbiBoZWFkbGluZXMgaW4gdGhlIGFj dGl2ZSByZWdpb24/DQoNCldoZW4gc2V0IHRvIGB0Jywgc29tZSBjb21tYW5kcyB3aWxsIGJlIHBl cmZvcm1lZCBpbiBhbGwgaGVhZGxpbmVzDQp3aXRoaW4gdGhlIGFjdGl2ZSByZWdpb24uDQoNCldo ZW4gc2V0IHRvIGBzdGFydC1sZXZlbCcsIHNvbWUgY29tbWFuZHMgd2lsbCBiZSBwZXJmb3JtZWQg aW4gYWxsDQpoZWFkbGluZXMgd2l0aGluIHRoZSBhY3RpdmUgcmVnaW9uLCBwcm92aWRlZCB0aGF0 IHRoZXNlIGhlYWRsaW5lcw0KYXJlIG9mIHRoZSBzYW1lIGxldmVsIHRoYW4gdGhlIGZpcnN0IG9u ZS4NCg0KV2hlbiBzZXQgdG8gYSBzdHJpbmcsIHRob3NlIGNvbW1hbmRzIHdpbGwgYmUgcGVyZm9y bWVkIG9uIHRoZQ0KbWF0Y2hpbmcgaGVhZGxpbmVzIHdpdGhpbiB0aGUgYWN0aXZlIHJlZ2lvbi4g IFN1Y2ggc3RyaW5nIG11c3QgYmUNCmEgdGFncy9wcm9wZXJ0eS90b2RvIG1hdGNoIGFzIGl0IGlz IHVzZWQgaW4gdGhlIGFnZW5kYSB0YWdzIHZpZXcuDQoNClRoZSBsaXN0IG9mIGNvbW1hbmRzIGlz OiBgb3JnLXNjaGVkdWxlJywgYG9yZy1kZWFkbGluZScsDQpgb3JnLXRvZG8nLCBgb3JnLWFyY2hp dmUtc3VidHJlZScsIGBvcmctYXJjaGl2ZS1zZXQtdGFnJyBhbmQNCmBvcmctYXJjaGl2ZS10by1h cmNoaXZlLXNpYmxpbmcnLiAgVGhlIGFyY2hpdmluZyBjb21tYW5kcyBza2lwDQphbHJlYWR5IGFy Y2hpdmVkIGVudHJpZXMuIg0KICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiRG9uJ3QgbG9v cCIgbmlsKQ0KCQkgKGNvbnN0IDp0YWcgIkFsbCBoZWFkbGluZXMgaW4gYWN0aXZlIHJlZ2lvbiIg dCkNCgkJIChjb25zdCA6dGFnICJJbiBhY3RpdmUgcmVnaW9uLCBoZWFkbGluZXMgYXQgdGhlIHNh bWUgbGV2ZWwgdGhhbiB0aGUgZmlyc3Qgb25lIiBzdGFydC1sZXZlbCkNCgkJIChzdHJpbmcgOnRh ZyAiVGFncy9Qcm9wZXJ0eS9Ub2RvIG1hdGNoZXIiKSkNCiAgOnZlcnNpb24gIjI0LjEiDQogIDpn cm91cCAnb3JnLXRvZG8NCiAgOmdyb3VwICdvcmctYXJjaGl2ZSkNCg0KKGRlZmdyb3VwIG9yZy1z dGFydHVwIG5pbA0KICAiT3B0aW9ucyBjb25jZXJuaW5nIHN0YXJ0dXAgb2YgT3JnLW1vZGUuIg0K ICA6dGFnICJPcmcgU3RhcnR1cCINCiAgOmdyb3VwICdvcmcpDQoNCihkZWZjdXN0b20gb3JnLXN0 YXJ0dXAtZm9sZGVkIHQNCiAgIk5vbi1uaWwgbWVhbnMgZW50ZXJpbmcgT3JnLW1vZGUgd2lsbCBz d2l0Y2ggdG8gT1ZFUlZJRVcuDQpUaGlzIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXIt ZmlsZSBiYXNpcyBieSBhZGRpbmcgb25lIG9mDQp0aGUgZm9sbG93aW5nIGxpbmVzIGFueXdoZXJl IGluIHRoZSBidWZmZXI6DQoNCiAgICMrU1RBUlRVUDogZm9sZCAgICAgICAgICAgICAgKG9yIGBv dmVydmlldycsIHRoaXMgaXMgZXF1aXZhbGVudCkNCiAgICMrU1RBUlRVUDogbm9mb2xkICAgICAg ICAgICAgKG9yIGBzaG93YWxsJywgdGhpcyBpcyBlcXVpdmFsZW50KQ0KICAgIytTVEFSVFVQOiBj b250ZW50DQogICAjK1NUQVJUVVA6IHNob3dldmVyeXRoaW5nDQoNCkJ5IGRlZmF1bHQsIHRoaXMg b3B0aW9uIGlzIGlnbm9yZWQgd2hlbiBPcmcgb3BlbnMgYWdlbmRhIGZpbGVzDQpmb3IgdGhlIGZp cnN0IHRpbWUuICBJZiB5b3Ugd2FudCB0aGUgYWdlbmRhIHRvIGhvbm9yIHRoZSBzdGFydHVwDQpv cHRpb24sIHNldCBgb3JnLWFnZW5kYS1pbmhpYml0LXN0YXJ0dXAnIHRvIG5pbC4iDQogIDpncm91 cCAnb3JnLXN0YXJ0dXANCiAgOnR5cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6dGFnICJub2ZvbGQ6 IHNob3cgYWxsIiBuaWwpDQoJICAoY29uc3QgOnRhZyAiZm9sZDogb3ZlcnZpZXciIHQpDQoJICAo Y29uc3QgOnRhZyAiY29udGVudDogYWxsIGhlYWRsaW5lcyIgY29udGVudCkNCgkgIChjb25zdCA6 dGFnICJzaG93IGV2ZXJ5dGhpbmcsIGV2ZW4gZHJhd2VycyIgc2hvd2V2ZXJ5dGhpbmcpKSkNCg0K KGRlZmN1c3RvbSBvcmctc3RhcnR1cC10cnVuY2F0ZWQgdA0KICAiTm9uLW5pbCBtZWFucyBlbnRl cmluZyBPcmctbW9kZSB3aWxsIHNldCBgdHJ1bmNhdGUtbGluZXMnLg0KVGhpcyBpcyB1c2VmdWwg c2luY2Ugc29tZSBsaW5lcyBjb250YWluaW5nIGxpbmtzIGNhbiBiZSB2ZXJ5IGxvbmcgYW5kDQp1 bmludGVyZXN0aW5nLiAgQWxzbyB0YWJsZXMgbG9vayB0ZXJyaWJsZSB3aGVuIHdyYXBwZWQuIg0K ICA6Z3JvdXAgJ29yZy1zdGFydHVwDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9y Zy1zdGFydHVwLWluZGVudGVkIG5pbA0KICAiTm9uLW5pbCBtZWFucyB0dXJuIG9uIGBvcmctaW5k ZW50LW1vZGUnIG9uIHN0YXJ0dXAuDQpUaGlzIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgb24gYSBw ZXItZmlsZSBiYXNpcyBieSBhZGRpbmcgb25lIG9mDQp0aGUgZm9sbG93aW5nIGxpbmVzIGFueXdo ZXJlIGluIHRoZSBidWZmZXI6DQoNCiAgICMrU1RBUlRVUDogaW5kZW50DQogICAjK1NUQVJUVVA6 IG5vaW5kZW50Ig0KICA6Z3JvdXAgJ29yZy1zdHJ1Y3R1cmUNCiAgOnR5cGUgJyhjaG9pY2UNCgkg IChjb25zdCA6dGFnICJOb3QiIG5pbCkNCgkgIChjb25zdCA6dGFnICJHbG9iYWxseSAoc2xvdyBv biBzdGFydHVwIGluIGxhcmdlIGZpbGVzKSIgdCkpKQ0KDQooZGVmY3VzdG9tIG9yZy11c2Utc3Vi LXN1cGVyc2NyaXB0cyB0DQogICJOb24tbmlsIG1lYW5zIGludGVycHJldCBcIl9cIiBhbmQgXCJe XCIgZm9yIGRpc3BsYXkuDQoNCklmIHlvdSB3YW50IHRvIGNvbnRyb2wgaG93IE9yZyBleHBvcnRz IHRob3NlIGNoYXJhY3RlcnMsIHNlZQ0KYG9yZy1leHBvcnQtd2l0aC1zdWItc3VwZXJzY3JpcHRz Jy4gIGBvcmctdXNlLXN1Yi1zdXBlcnNjcmlwdHMnDQp1c2VkIHRvIGJlIGFuIGFsaWFzIGZvciBg b3JnLWV4cG9ydC13aXRoLXN1Yi1zdXBlcnNjcmlwdHMnIGluDQpPcmcgPDguMCwgaXQgaXMgbm90 IGFueW1vcmUuDQoNCldoZW4gdGhpcyBvcHRpb24gaXMgdHVybmVkIG9uLCB5b3UgY2FuIHVzZSBU ZVgtbGlrZSBzeW50YXggZm9yDQpzdWItIGFuZCBzdXBlcnNjcmlwdHMgd2l0aGluIHRoZSBidWZm ZXIuICBTZXZlcmFsIGNoYXJhY3RlcnMgYWZ0ZXINClwiX1wiIG9yIFwiXlwiIHdpbGwgYmUgY29u c2lkZXJlZCBhcyBhIHNpbmdsZSBpdGVtIC0gc28gZ3JvdXBpbmcNCndpdGgge30gaXMgbm9ybWFs bHkgbm90IG5lZWRlZC4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRoaW5ncw0Kd2lsbCBi ZSBwYXJzZWQgYXMgc2luZ2xlIHN1Yi0gb3Igc3VwZXJzY3JpcHRzOg0KDQogMTBeMjQgICBvciAg IDEwXnRhdSAgICAgc2V2ZXJhbCBkaWdpdHMgd2lsbCBiZSBjb25zaWRlcmVkIDEgaXRlbS4NCiAx MF4tMTIgIG9yICAgMTBeLXRhdSAgICBhIGxlYWRpbmcgc2lnbiB3aXRoIGRpZ2l0cyBvciBhIHdv cmQNCiB4XjIteV4zICAgICAgICAgICAgICAgICB3aWxsIGJlIHJlYWQgYXMgeF4yIC0geV4zLCBi ZWNhdXNlIGl0ZW1zIGFyZQ0KCQkJIHRlcm1pbmF0ZWQgYnkgYWxtb3N0IGFueSBub253b3JkL25v bmRpZ2l0IGNoYXIuDQogeF97aV4yfSBvciAgIHheKDItaSkgICAgYnJhY2VzIG9yIHBhcmVudGhl c2lzIGRvIGdyb3VwaW5nLg0KDQpTdGlsbCwgYW1iaWd1aXR5IGlzIHBvc3NpYmxlLiAgU28gd2hl biBpbiBkb3VidCwgdXNlIHt9IHRvIGVuY2xvc2UNCnRoZSBzdWIvc3VwZXJzY3JpcHQuICBJZiB5 b3Ugc2V0IHRoaXMgdmFyaWFibGUgdG8gdGhlIHN5bWJvbCBge30nLA0KdGhlIGJyYWNlcyBhcmUg KnJlcXVpcmVkKiBpbiBvcmRlciB0byB0cmlnZ2VyIGludGVycHJldGF0aW9ucyBhcw0Kc3ViL3N1 cGVyc2NyaXB0LiAgVGhpcyBjYW4gYmUgaGVscGZ1bCBpbiBkb2N1bWVudHMgdGhhdCBuZWVkIFwi X1wiDQpmcmVxdWVudGx5IGluIHBsYWluIHRleHQuIg0KICA6Z3JvdXAgJ29yZy1zdGFydHVwDQog IDp2ZXJzaW9uICIyNC40Ig0KICA6cGFja2FnZS12ZXJzaW9uICcoT3JnIC4gIjguMCIpDQogIDp0 eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRhZyAiQWx3YXlzIGludGVycHJldCIgdCkNCgkgIChj b25zdCA6dGFnICJPbmx5IHdpdGggYnJhY2VzIiB7fSkNCgkgIChjb25zdCA6dGFnICJOZXZlciBp bnRlcnByZXQiIG5pbCkpKQ0KDQooZGVmY3VzdG9tIG9yZy1zdGFydHVwLXdpdGgtYmVhbWVyLW1v ZGUgbmlsDQogICJOb24tbmlsIG1lYW5zIHR1cm4gb24gYG9yZy1iZWFtZXItbW9kZScgb24gc3Rh cnR1cC4NClRoaXMgY2FuIGFsc28gYmUgY29uZmlndXJlZCBvbiBhIHBlci1maWxlIGJhc2lzIGJ5 IGFkZGluZyBvbmUgb2YNCnRoZSBmb2xsb3dpbmcgbGluZXMgYW55d2hlcmUgaW4gdGhlIGJ1ZmZl cjoNCg0KICAgIytTVEFSVFVQOiBiZWFtZXIiDQogIDpncm91cCAnb3JnLXN0YXJ0dXANCiAgOnZl cnNpb24gIjI0LjEiDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1zdGFydHVw LWFsaWduLWFsbC10YWJsZXMgbmlsDQogICJOb24tbmlsIG1lYW5zIGFsaWduIGFsbCB0YWJsZXMg d2hlbiB2aXNpdGluZyBhIGZpbGUuDQpUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBjb2x1bW4gd2lk dGggaW4gdGFibGVzIGlzIGZvcmNlZCB3aXRoIDxOPiBjb29raWVzDQppbiB0YWJsZSBmaWVsZHMu ICBTdWNoIHRhYmxlcyB3aWxsIGxvb2sgY29ycmVjdCBvbmx5IGFmdGVyIHRoZSBmaXJzdCByZS1h bGlnbi4NClRoaXMgY2FuIGFsc28gYmUgY29uZmlndXJlZCBvbiBhIHBlci1maWxlIGJhc2lzIGJ5 IGFkZGluZyBvbmUgb2YNCnRoZSBmb2xsb3dpbmcgbGluZXMgYW55d2hlcmUgaW4gdGhlIGJ1ZmZl cjoNCiAgICMrU1RBUlRVUDogYWxpZ24NCiAgICMrU1RBUlRVUDogbm9hbGlnbiINCiAgOmdyb3Vw ICdvcmctc3RhcnR1cA0KICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmctc3RhcnR1 cC13aXRoLWlubGluZS1pbWFnZXMgbmlsDQogICJOb24tbmlsIG1lYW5zIHNob3cgaW5saW5lIGlt YWdlcyB3aGVuIGxvYWRpbmcgYSBuZXcgT3JnIGZpbGUuDQpUaGlzIGNhbiBhbHNvIGJlIGNvbmZp Z3VyZWQgb24gYSBwZXItZmlsZSBiYXNpcyBieSBhZGRpbmcgb25lIG9mDQp0aGUgZm9sbG93aW5n IGxpbmVzIGFueXdoZXJlIGluIHRoZSBidWZmZXI6DQogICAjK1NUQVJUVVA6IGlubGluZWltYWdl cw0KICAgIytTVEFSVFVQOiBub2lubGluZWltYWdlcyINCiAgOmdyb3VwICdvcmctc3RhcnR1cA0K ICA6dmVyc2lvbiAiMjQuMSINCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZjdXN0b20gb3JnLXN0 YXJ0dXAtd2l0aC1sYXRleC1wcmV2aWV3IG5pbA0KICAiTm9uLW5pbCBtZWFucyBwcmV2aWV3IExh VGVYIGZyYWdtZW50cyB3aGVuIGxvYWRpbmcgYSBuZXcgT3JnIGZpbGUuDQoNClRoaXMgY2FuIGFs c28gYmUgY29uZmlndXJlZCBvbiBhIHBlci1maWxlIGJhc2lzIGJ5IGFkZGluZyBvbmUgb2YNCnRo ZSBmb2xsb3dpbmcgbGluZXMgYW55d2hlcmUgaW4gdGhlIGJ1ZmZlcjoNCiAgICMrU1RBUlRVUDog bGF0ZXhwcmV2aWV3DQogICAjK1NUQVJUVVA6IG5vbGF0ZXhwcmV2aWV3Ig0KICA6Z3JvdXAgJ29y Zy1zdGFydHVwDQogIDp2ZXJzaW9uICIyNC40Ig0KICA6cGFja2FnZS12ZXJzaW9uICcoT3JnIC4g IjguMCIpDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1pbnNlcnQtbW9kZS1s aW5lLWluLWVtcHR5LWZpbGUgbmlsDQogICJOb24tbmlsIG1lYW5zIGluc2VydCB0aGUgZmlyc3Qg bGluZSBzZXR0aW5nIE9yZy1tb2RlIGluIGVtcHR5IGZpbGVzLg0KV2hlbiB0aGUgZnVuY3Rpb24g YG9yZy1tb2RlJyBpcyBjYWxsZWQgaW50ZXJhY3RpdmVseSBpbiBhbiBlbXB0eSBmaWxlLCB0aGlz DQpub3JtYWxseSBtZWFucyB0aGF0IHRoZSBmaWxlIG5hbWUgZG9lcyBub3QgYXV0b21hdGljYWxs eSB0cmlnZ2VyIE9yZy1tb2RlLg0KVG8gZW5zdXJlIHRoYXQgdGhlIGZpbGUgd2lsbCBhbHdheXMg YmUgaW4gT3JnLW1vZGUgaW4gdGhlIGZ1dHVyZSwgYQ0KbGluZSBlbmZvcmNpbmcgT3JnLW1vZGUg d2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBidWZmZXIsIGlmIHRoaXMgb3B0aW9uDQpoYXMgYmVl biBzZXQuIg0KICA6Z3JvdXAgJ29yZy1zdGFydHVwDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVm Y3VzdG9tIG9yZy1yZXBsYWNlLWRpc3B1dGVkLWtleXMgbmlsDQogICJOb24tbmlsIG1lYW5zIHVz ZSBhbHRlcm5hdGl2ZSBrZXkgYmluZGluZ3MgZm9yIHNvbWUga2V5cy4NCk9yZy1tb2RlIHVzZXMg Uy08Y3Vyc29yPiBrZXlzIGZvciBjaGFuZ2luZyB0aW1lc3RhbXBzIGFuZCBwcmlvcml0aWVzLg0K VGhlc2Uga2V5cyBhcmUgYWxzbyB1c2VkIGJ5IG90aGVyIHBhY2thZ2VzIGxpa2Ugc2hpZnQtc2Vs ZWN0aW9uLW1vZGUnDQpcKGJ1aWx0IGludG8gRW1hY3MgMjMpLCBgQ1VBLW1vZGUnIG9yIGB3aW5k bW92ZS5lbCcuDQpJZiB5b3Ugd2FudCB0byB1c2UgT3JnLW1vZGUgdG9nZXRoZXIgd2l0aCBvbmUg b2YgdGhlc2Ugb3RoZXIgbW9kZXMsDQpvciBtb3JlIGdlbmVyYWxseSBpZiB5b3Ugd291bGQgbGlr ZSB0byBtb3ZlIHNvbWUgT3JnLW1vZGUgY29tbWFuZHMgdG8NCm90aGVyIGtleXMsIHNldCB0aGlz IHZhcmlhYmxlIGFuZCBjb25maWd1cmUgdGhlIGtleXMgd2l0aCB0aGUgdmFyaWFibGUNCmBvcmct ZGlzcHV0ZWQta2V5cycuDQoNClRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgYXQgbG9hZC10 aW1lIG9mIE9yZy1tb2RlLCBhbmQgbXVzdCBiZSBzZXQNCipiZWZvcmUqIG9yZy5lbCBpcyBsb2Fk ZWQuICBDaGFuZ2luZyBpdCByZXF1aXJlcyBhIHJlc3RhcnQgb2YgRW1hY3MgdG8NCmJlY29tZSBl ZmZlY3RpdmUuIg0KICA6Z3JvdXAgJ29yZy1zdGFydHVwDQogIDp0eXBlICdib29sZWFuKQ0KDQoo ZGVmY3VzdG9tIG9yZy11c2UtZXh0cmEta2V5cyBuaWwNCiAgIk5vbi1uaWwgbWVhbnMgdXNlIGV4 dHJhIGtleSBzZXF1ZW5jZSBkZWZpbml0aW9ucyBmb3IgY2VydGFpbiBjb21tYW5kcy4NClRoaXMg aGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdSBydW4gWEVtYWNzIG9yIGlmIGB3aW5kb3ctc3lz dGVtJw0KaXMgbmlsLiAgVGhpcyB2YXJpYWJsZSBsZXRzIHlvdSBkbyB0aGUgc2FtZSBtYW51YWxs eS4gIFlvdSBtdXN0DQpzZXQgaXQgYmVmb3JlIGxvYWRpbmcgb3JnLg0KDQpFeGFtcGxlOiBvbiBD YXJib24gRW1hY3MgMjIgcnVubmluZyBncmFwaGljYWxseSwgd2l0aCBhbiBleHRlcm5hbA0Ka2V5 Ym9hcmQgb24gYSBQb3dlcmJvb2ssIHRoZSBkZWZhdWx0IHdheSBvZiBzZXR0aW5nIE0tbGVmdCBt aWdodA0Kbm90IHdvcmsgZm9yIGVpdGhlciBBbHQgb3IgRVNDLiAgU2V0dGluZyB0aGlzIHZhcmlh YmxlIHdpbGwgbWFrZQ0KaXQgd29yayBmb3IgRVNDLiINCiAgOmdyb3VwICdvcmctc3RhcnR1cA0K ICA6dHlwZSAnYm9vbGVhbikNCg0KKG9yZy1kZWZ2YXJhbGlhcyAnb3JnLUNVQS1jb21wYXRpYmxl ICdvcmctcmVwbGFjZS1kaXNwdXRlZC1rZXlzKQ0KDQooZGVmY3VzdG9tIG9yZy1kaXNwdXRlZC1r ZXlzDQogICcoKFsoc2hpZnQgdXApXQkJLiBbKG1ldGEgcCldKQ0KICAgIChbKHNoaWZ0IGRvd24p XQkJLiBbKG1ldGEgbildKQ0KICAgIChbKHNoaWZ0IGxlZnQpXQkJLiBbKG1ldGEgLSldKQ0KICAg IChbKHNoaWZ0IHJpZ2h0KV0JCS4gWyhtZXRhICspXSkNCiAgICAoWyhjb250cm9sIHNoaWZ0IHJp Z2h0KV0gCS4gWyhtZXRhIHNoaWZ0ICspXSkNCiAgICAoWyhjb250cm9sIHNoaWZ0IGxlZnQpXQku IFsobWV0YSBzaGlmdCAtKV0pKQ0KICAiS2V5cyBmb3Igd2hpY2ggT3JnLW1vZGUgYW5kIG90aGVy IG1vZGVzIGNvbXBldGUuDQpUaGlzIGlzIGFuIGFsaXN0LCBjYXJzIGFyZSB0aGUgZGVmYXVsdCBr ZXlzLCBzZWNvbmQgZWxlbWVudCBzcGVjaWZpZXMNCnRoZSBhbHRlcm5hdGl2ZSB0byB1c2Ugd2hl biBgb3JnLXJlcGxhY2UtZGlzcHV0ZWQta2V5cycgaXMgdC4NCg0KS2V5cyBjYW4gYmUgc3BlY2lm aWVkIGluIGFueSBzeW50YXggc3VwcG9ydGVkIGJ5IGBkZWZpbmUta2V5Jy4NClRoZSB2YWx1ZSBv ZiB0aGlzIG9wdGlvbiB0YWtlcyBlZmZlY3Qgb25seSBhdCBPcmctbW9kZSdzIHN0YXJ0dXAsDQp0 aGVyZWZvcmUgeW91J2xsIGhhdmUgdG8gcmVzdGFydCBFbWFjcyB0byBhcHBseSBpdCBhZnRlciBj aGFuZ2luZy4iDQogIDpncm91cCAnb3JnLXN0YXJ0dXANCiAgOnR5cGUgJ2FsaXN0KQ0KDQooZGVm dW4gb3JnLWtleSAoa2V5KQ0KICAiU2VsZWN0IGtleSBhY2NvcmRpbmcgdG8gYG9yZy1yZXBsYWNl LWRpc3B1dGVkLWtleXMnIGFuZCBgb3JnLWRpc3B1dGVkLWtleXMnLg0KT3IgcmV0dXJuIHRoZSBv cmlnaW5hbCBpZiBub3QgZGlzcHV0ZWQuDQpBbHNvIGFwcGx5IHRoZSB0cmFuc2xhdGlvbnMgZGVm aW5lZCBpbiBgb3JnLXhlbWFjcy1rZXktZXF1aXZhbGVudHMnLiINCiAgKHdoZW4gb3JnLXJlcGxh Y2UtZGlzcHV0ZWQta2V5cw0KICAgIChsZXQqICgobmtleSAoa2V5LWRlc2NyaXB0aW9uIGtleSkp DQoJICAgKHggKG9yZy1maW5kLWlmIChsYW1iZGEgKHgpDQoJCQkgICAgIChlcXVhbCAoa2V5LWRl c2NyaXB0aW9uIChjYXIgeCkpIG5rZXkpKQ0KCQkJICAgb3JnLWRpc3B1dGVkLWtleXMpKSkNCiAg ICAgIChzZXRxIGtleSAoaWYgeCAoY2RyIHgpIGtleSkpKSkNCiAgKHdoZW4gKGZlYXR1cmVwICd4 ZW1hY3MpDQogICAgKHNldHEga2V5IChvciAoY2RyIChhc3NvYyBrZXkgb3JnLXhlbWFjcy1rZXkt ZXF1aXZhbGVudHMpKSBrZXkpKSkNCiAga2V5KQ0KDQooZGVmdW4gb3JnLWZpbmQtaWYgKHByZWRp Y2F0ZSBzZXEpDQogIChjYXRjaCAnZXhpdA0KICAgICh3aGlsZSBzZXENCiAgICAgIChpZiAoZnVu Y2FsbCBwcmVkaWNhdGUgKGNhciBzZXEpKQ0KCSAgKHRocm93ICdleGl0IChjYXIgc2VxKSkNCgko cG9wIHNlcSkpKSkpDQoNCihkZWZ1biBvcmctZGVma2V5IChrZXltYXAga2V5IGRlZikNCiAgIkRl ZmluZSBhIGtleSwgcG9zc2libHkgdHJhbnNsYXRlZCwgYXMgcmV0dXJuZWQgYnkgYG9yZy1rZXkn LiINCiAgKGRlZmluZS1rZXkga2V5bWFwIChvcmcta2V5IGtleSkgZGVmKSkNCg0KKGRlZmN1c3Rv bSBvcmctZWxsaXBzaXMgbmlsDQogICJUaGUgZWxsaXBzaXMgdG8gdXNlIGluIHRoZSBPcmctbW9k ZSBvdXRsaW5lLg0KV2hlbiBuaWwsIGp1c3QgdXNlIHRoZSBzdGFuZGFyZCB0aHJlZSBkb3RzLg0K V2hlbiBhIHN0cmluZywgdXNlIHRoYXQgc3RyaW5nIGluc3RlYWQuDQpXaGVuIGEgZmFjZSwgdXNl IHRoZSBzdGFuZGFyZCAzIGRvdHMsIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgZmFjZS4NClRoZSBj aGFuZ2UgYWZmZWN0cyBvbmx5IE9yZy1tb2RlICh3aGljaCB3aWxsIHRoZW4gdXNlIGl0cyBvd24g ZGlzcGxheSB0YWJsZSkuDQpDaGFuZ2luZyB0aGlzIHJlcXVpcmVzIGV4ZWN1dGluZyBgTS14IG9y Zy1tb2RlIFJFVCcgaW4gYSBidWZmZXIgdG8gYmVjb21lDQplZmZlY3RpdmUuIg0KICA6Z3JvdXAg J29yZy1zdGFydHVwDQogIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJEZWZhdWx0IiBuaWwp DQoJCSAoZmFjZSA6dGFnICJGYWNlIiA6dmFsdWUgb3JnLXdhcm5pbmcpDQoJCSAoc3RyaW5nIDp0 YWcgIlN0cmluZyIgOnZhbHVlICIuLi4jIikpKQ0KDQooZGVmdmFyIG9yZy1kaXNwbGF5LXRhYmxl IG5pbA0KICAiVGhlIGRpc3BsYXkgdGFibGUgZm9yIG9yZy1tb2RlLCBpbiBjYXNlIGBvcmctZWxs aXBzaXMnIGlzIG5vbi1uaWwuIikNCg0KKGRlZmdyb3VwIG9yZy1rZXl3b3JkcyBuaWwNCiAgIktl eXdvcmRzIGluIE9yZy1tb2RlLiINCiAgOnRhZyAiT3JnIEtleXdvcmRzIg0KICA6Z3JvdXAgJ29y ZykNCg0KKGRlZmN1c3RvbSBvcmctZGVhZGxpbmUtc3RyaW5nICJERUFETElORToiDQogICJTdHJp bmcgdG8gbWFyayBkZWFkbGluZSBlbnRyaWVzLg0KQSBkZWFkbGluZSBpcyB0aGlzIHN0cmluZywg Zm9sbG93ZWQgYnkgYSB0aW1lIHN0YW1wLiAgU2hvdWxkIGJlIGEgd29yZCwNCnRlcm1pbmF0ZWQg YnkgYSBjb2xvbi4gIFlvdSBjYW4gaW5zZXJ0IGEgc2NoZWR1bGUga2V5d29yZCBhbmQNCmEgdGlt ZXN0YW1wIHdpdGggXFxbb3JnLWRlYWRsaW5lXS4NCkNoYW5nZXMgYmVjb21lIG9ubHkgZWZmZWN0 aXZlIGFmdGVyIHJlc3RhcnRpbmcgRW1hY3MuIg0KICA6Z3JvdXAgJ29yZy1rZXl3b3Jkcw0KICA6 dHlwZSAnc3RyaW5nKQ0KDQooZGVmY3VzdG9tIG9yZy1zY2hlZHVsZWQtc3RyaW5nICJTQ0hFRFVM RUQ6Ig0KICAiU3RyaW5nIHRvIG1hcmsgc2NoZWR1bGVkIFRPRE8gZW50cmllcy4NCkEgc2NoZWR1 bGUgaXMgdGhpcyBzdHJpbmcsIGZvbGxvd2VkIGJ5IGEgdGltZSBzdGFtcC4gIFNob3VsZCBiZSBh IHdvcmQsDQp0ZXJtaW5hdGVkIGJ5IGEgY29sb24uICBZb3UgY2FuIGluc2VydCBhIHNjaGVkdWxl IGtleXdvcmQgYW5kDQphIHRpbWVzdGFtcCB3aXRoIFxcW29yZy1zY2hlZHVsZV0uDQpDaGFuZ2Vz IGJlY29tZSBvbmx5IGVmZmVjdGl2ZSBhZnRlciByZXN0YXJ0aW5nIEVtYWNzLiINCiAgOmdyb3Vw ICdvcmcta2V5d29yZHMNCiAgOnR5cGUgJ3N0cmluZykNCg0KKGRlZmN1c3RvbSBvcmctY2xvc2Vk LXN0cmluZyAiQ0xPU0VEOiINCiAgIlN0cmluZyB1c2VkIGFzIHRoZSBwcmVmaXggZm9yIHRpbWVz dGFtcHMgbG9nZ2luZyBjbG9zaW5nIGEgVE9ETyBlbnRyeS4iDQogIDpncm91cCAnb3JnLWtleXdv cmRzDQogIDp0eXBlICdzdHJpbmcpDQoNCihkZWZjdXN0b20gb3JnLWNsb2NrLXN0cmluZyAiQ0xP Q0s6Ig0KICAiU3RyaW5nIHVzZWQgYXMgcHJlZml4IGZvciB0aW1lc3RhbXBzIGNsb2NraW5nIHdv cmsgaG91cnMgb24gYW4gaXRlbS4iDQogIDpncm91cCAnb3JnLWtleXdvcmRzDQogIDp0eXBlICdz dHJpbmcpDQoNCihkZWZjdXN0b20gb3JnLWNsb3NlZC1rZWVwLXdoZW4tbm8tdG9kbyBuaWwNCiAg IlJlbW92ZSBDTE9TRUQ6IHRpbWUtc3RhbXAgd2hlbiBzd2l0Y2hpbmcgYmFjayB0byBhIG5vbi10 b2RvIHN0YXRlPyINCiAgOmdyb3VwICdvcmctdG9kbw0KICA6Z3JvdXAgJ29yZy1rZXl3b3Jkcw0K ICA6dmVyc2lvbiAiMjQuNCINCiAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAuICI4LjAiKQ0KICA6 dHlwZSAnYm9vbGVhbikNCg0KKGRlZmNvbnN0IG9yZy1wbGFubmluZy1vci1jbG9jay1saW5lLXJl IChjb25jYXQgIl5bIFx0XSpcXCgiDQoJCQkJCQlvcmctc2NoZWR1bGVkLXN0cmluZyAiXFx8Ig0K CQkJCQkJb3JnLWRlYWRsaW5lLXN0cmluZyAiXFx8Ig0KCQkJCQkJb3JnLWNsb3NlZC1zdHJpbmcg IlxcfCINCgkJCQkJCW9yZy1jbG9jay1zdHJpbmcgIlxcKSIpDQogICJNYXRjaGVzIGEgbGluZSB3 aXRoIHBsYW5uaW5nIG9yIGNsb2NrIGluZm8uIikNCg0KKGRlZmN1c3RvbSBvcmctY29tbWVudC1z dHJpbmcgIkNPTU1FTlQiDQogICJFbnRyaWVzIHN0YXJ0aW5nIHdpdGggdGhpcyBrZXl3b3JkIHdp bGwgbmV2ZXIgYmUgZXhwb3J0ZWQuDQpBbiBlbnRyeSBjYW4gYmUgdG9nZ2xlZCBiZXR3ZWVuIENP TU1FTlQgYW5kIG5vcm1hbCB3aXRoDQpcXFtvcmctdG9nZ2xlLWNvbW1lbnRdLg0KQ2hhbmdlcyBi ZWNvbWUgb25seSBlZmZlY3RpdmUgYWZ0ZXIgcmVzdGFydGluZyBFbWFjcy4iDQogIDpncm91cCAn b3JnLWtleXdvcmRzDQogIDp0eXBlICdzdHJpbmcpDQoNCihkZWZjdXN0b20gb3JnLXF1b3RlLXN0 cmluZyAiUVVPVEUiDQogICJFbnRyaWVzIHN0YXJ0aW5nIHdpdGggdGhpcyBrZXl3b3JkIHdpbGwg YmUgZXhwb3J0ZWQgaW4gZml4ZWQtd2lkdGggZm9udC4NClF1b3RpbmcgYXBwbGllcyBvbmx5IHRv IHRoZSB0ZXh0IGluIHRoZSBlbnRyeSBmb2xsb3dpbmcgdGhlIGhlYWRsaW5lLCBhbmQgZG9lcw0K bm90IGV4dGVuZCBiZXlvbmQgdGhlIG5leHQgaGVhZGxpbmUsIGV2ZW4gaWYgdGhhdCBpcyBsb3dl ciBsZXZlbC4NCkFuIGVudHJ5IGNhbiBiZSB0b2dnbGVkIGJldHdlZW4gUVVPVEUgYW5kIG5vcm1h bCB3aXRoDQpcXFtvcmctdG9nZ2xlLWZpeGVkLXdpZHRoLXNlY3Rpb25dLiINCiAgOmdyb3VwICdv cmcta2V5d29yZHMNCiAgOnR5cGUgJ3N0cmluZykNCg0KKGRlZmNvbnN0IG9yZy1yZXBlYXQtcmUN CiAgIjxbMC05XVxcezRcXH0tWzAtOV1bMC05XS1bMC05XVswLTldIFtePlxuXSo/XFwoWy4rXT9c XCtbMC05XStbaGR3bXldXFwoL1swLTldK1toZHdteV1cXCk/XFwpIg0KICAiUmVndWxhciBleHBy ZXNzaW9uIGZvciBzcGVjaWZ5aW5nIHJlcGVhdGVkIGV2ZW50cy4NCkFmdGVyIGEgbWF0Y2gsIGdy b3VwIDEgY29udGFpbnMgdGhlIHJlcGVhdCBleHByZXNzaW9uLiIpDQoNCihkZWZncm91cCBvcmct c3RydWN0dXJlIG5pbA0KICAiT3B0aW9ucyBjb25jZXJuaW5nIHRoZSBnZW5lcmFsIHN0cnVjdHVy ZSBvZiBPcmctbW9kZSBmaWxlcy4iDQogIDp0YWcgIk9yZyBTdHJ1Y3R1cmUiDQogIDpncm91cCAn b3JnKQ0KDQooZGVmZ3JvdXAgb3JnLXJldmVhbC1sb2NhdGlvbiBuaWwNCiAgIk9wdGlvbnMgYWJv dXQgaG93IHRvIG1ha2UgY29udGV4dCBvZiBhIGxvY2F0aW9uIHZpc2libGUuIg0KICA6dGFnICJP cmcgUmV2ZWFsIExvY2F0aW9uIg0KICA6Z3JvdXAgJ29yZy1zdHJ1Y3R1cmUpDQoNCihkZWZjb25z dCBvcmctY29udGV4dC1jaG9pY2UNCiAgJyhjaG9pY2UNCiAgICAoY29uc3QgOnRhZyAiQWx3YXlz IiB0KQ0KICAgIChjb25zdCA6dGFnICJOZXZlciIgbmlsKQ0KICAgIChyZXBlYXQgOmdyZWVkeSB0 IDp0YWcgIkluZGl2aWR1YWwgY29udGV4dHMiDQoJICAgIChjb25zDQoJICAgICAoY2hvaWNlIDp0 YWcgIkNvbnRleHQiDQoJCSAgICAgKGNvbnN0IGFnZW5kYSkNCgkJICAgICAoY29uc3Qgb3JnLWdv dG8pDQoJCSAgICAgKGNvbnN0IG9jY3VyLXRyZWUpDQoJCSAgICAgKGNvbnN0IHRhZ3MtdHJlZSkN CgkJICAgICAoY29uc3QgbGluay1zZWFyY2gpDQoJCSAgICAgKGNvbnN0IG1hcmstZ290bykNCgkJ ICAgICAoY29uc3QgYm9va21hcmstanVtcCkNCgkJICAgICAoY29uc3QgaXNlYXJjaCkNCgkJICAg ICAoY29uc3QgZGVmYXVsdCkpDQoJICAgICAoYm9vbGVhbikpKSkNCiAgIkNvbnRleHRzIGZvciB0 aGUgcmV2ZWFsIG9wdGlvbnMuIikNCg0KKGRlZmN1c3RvbSBvcmctc2hvdy1oaWVyYXJjaHktYWJv dmUgJygoZGVmYXVsdCAuIHQpKQ0KICAiTm9uLW5pbCBtZWFucyBzaG93IGZ1bGwgaGllcmFyY2h5 IHdoZW4gcmV2ZWFsaW5nIGEgbG9jYXRpb24uDQpPcmctbW9kZSBvZnRlbiBzaG93cyBsb2NhdGlv bnMgaW4gYW4gb3JnLW1vZGUgZmlsZSB3aGljaCBtaWdodCBoYXZlDQpiZWVuIGludmlzaWJsZSBi ZWZvcmUuICBXaGVuIHRoaXMgaXMgc2V0LCB0aGUgaGllcmFyY2h5IG9mIGhlYWRpbmdzDQphYm92 ZSB0aGUgZXhwb3NlZCBsb2NhdGlvbiBpcyBzaG93bi4NClR1cm5pbmcgdGhpcyBvZmYgZm9yIGV4 YW1wbGUgZm9yIHNwYXJzZSB0cmVlcyBtYWtlcyB0aGVtIHZlcnkgY29tcGFjdC4NCkluc3RlYWQg b2YgdCwgdGhpcyBjYW4gYWxzbyBiZSBhbiBhbGlzdCBzcGVjaWZ5aW5nIHRoaXMgb3B0aW9uIGZv ciBkaWZmZXJlbnQNCmNvbnRleHRzLiAgVmFsaWQgY29udGV4dHMgYXJlDQogIGFnZW5kYSAgICAg ICAgIHdoZW4gZXhwb3NpbmcgYW4gZW50cnkgZnJvbSB0aGUgYWdlbmRhDQogIG9yZy1nb3RvICAg ICAgIHdoZW4gdXNpbmcgdGhlIGNvbW1hbmQgYG9yZy1nb3RvJyBvbiBrZXkgQy1jIEMtag0KICBv Y2N1ci10cmVlICAgICB3aGVuIHVzaW5nIHRoZSBjb21tYW5kIGBvcmctb2NjdXInIG9uIGtleSBD LWMgLw0KICB0YWdzLXRyZWUgICAgICB3aGVuIGNvbnN0cnVjdGluZyBhIHNwYXJzZSB0cmVlIGJh c2VkIG9uIHRhZ3MgbWF0Y2hlcw0KICBsaW5rLXNlYXJjaCAgICB3aGVuIGV4cG9zaW5nIHNlYXJj aCBtYXRjaGVzIGFzc29jaWF0ZWQgd2l0aCBhIGxpbmsNCiAgbWFyay1nb3RvICAgICAgd2hlbiBl eHBvc2luZyB0aGUganVtcCBnb2FsIG9mIGEgbWFyaw0KICBib29rbWFyay1qdW1wICB3aGVuIGV4 cG9zaW5nIGEgYm9va21hcmsgbG9jYXRpb24NCiAgaXNlYXJjaCAgICAgICAgd2hlbiBleGl0aW5n IGZyb20gYW4gaW5jcmVtZW50YWwgc2VhcmNoDQogIGRlZmF1bHQgICAgICAgIGRlZmF1bHQgZm9y IGFsbCBjb250ZXh0cyBub3Qgc2V0IGV4cGxpY2l0bHkiDQogIDpncm91cCAnb3JnLXJldmVhbC1s b2NhdGlvbg0KICA6dHlwZSBvcmctY29udGV4dC1jaG9pY2UpDQoNCihkZWZjdXN0b20gb3JnLXNo b3ctZm9sbG93aW5nLWhlYWRpbmcgJygoZGVmYXVsdCAuIG5pbCkpDQogICJOb24tbmlsIG1lYW5z IHNob3cgZm9sbG93aW5nIGhlYWRpbmcgd2hlbiByZXZlYWxpbmcgYSBsb2NhdGlvbi4NCk9yZy1t b2RlIG9mdGVuIHNob3dzIGxvY2F0aW9ucyBpbiBhbiBvcmctbW9kZSBmaWxlIHdoaWNoIG1pZ2h0 IGhhdmUNCmJlZW4gaW52aXNpYmxlIGJlZm9yZS4gIFdoZW4gdGhpcyBpcyBzZXQsIHRoZSBoZWFk aW5nIGZvbGxvd2luZyB0aGUNCm1hdGNoIGlzIHNob3duLg0KVHVybmluZyB0aGlzIG9mZiBmb3Ig ZXhhbXBsZSBmb3Igc3BhcnNlIHRyZWVzIG1ha2VzIHRoZW0gdmVyeSBjb21wYWN0LA0KYnV0IG1h a2VzIGl0IGhhcmRlciB0byBlZGl0IHRoZSBsb2NhdGlvbiBvZiB0aGUgbWF0Y2guICBJbiBzdWNo IGEgY2FzZSwNCnVzZSB0aGUgY29tbWFuZCBcXFtvcmctcmV2ZWFsXSB0byBzaG93IG1vcmUgY29u dGV4dC4NCkluc3RlYWQgb2YgdCwgdGhpcyBjYW4gYWxzbyBiZSBhbiBhbGlzdCBzcGVjaWZ5aW5n IHRoaXMgb3B0aW9uIGZvciBkaWZmZXJlbnQNCmNvbnRleHRzLiAgU2VlIGBvcmctc2hvdy1oaWVy YXJjaHktYWJvdmUnIGZvciB2YWxpZCBjb250ZXh0cy4iDQogIDpncm91cCAnb3JnLXJldmVhbC1s b2NhdGlvbg0KICA6dHlwZSBvcmctY29udGV4dC1jaG9pY2UpDQoNCihkZWZjdXN0b20gb3JnLXNo b3ctc2libGluZ3MgJygoZGVmYXVsdCAuIG5pbCkgKGlzZWFyY2ggdCkgKGJvb2ttYXJrLWp1bXAg dCkpDQogICJOb24tbmlsIG1lYW5zIHNob3cgYWxsIHNpYmxpbmcgaGVhZGluZyB3aGVuIHJldmVh bGluZyBhIGxvY2F0aW9uLg0KT3JnLW1vZGUgb2Z0ZW4gc2hvd3MgbG9jYXRpb25zIGluIGFuIG9y Zy1tb2RlIGZpbGUgd2hpY2ggbWlnaHQgaGF2ZQ0KYmVlbiBpbnZpc2libGUgYmVmb3JlLiAgV2hl biB0aGlzIGlzIHNldCwgdGhlIHNpYmxpbmcgb2YgdGhlIGN1cnJlbnQgZW50cnkNCmhlYWRpbmcg YXJlIGFsbCBtYWRlIHZpc2libGUuICBJZiBgb3JnLXNob3ctaGllcmFyY2h5LWFib3ZlJyBpcyB0 LA0KdGhlIHNhbWUgaGFwcGVucyBvbiBlYWNoIGxldmVsIG9mIHRoZSBoaWVyYXJjaHkgYWJvdmUg dGhlIGN1cnJlbnQgZW50cnkuDQoNCkJ5IGRlZmF1bHQgdGhpcyBpcyBvbiBmb3IgdGhlIGlzZWFy Y2ggY29udGV4dCwgb2ZmIGZvciBhbGwgb3RoZXIgY29udGV4dHMuDQpUdXJuaW5nIHRoaXMgb2Zm IGZvciBleGFtcGxlIGZvciBzcGFyc2UgdHJlZXMgbWFrZXMgdGhlbSB2ZXJ5IGNvbXBhY3QsDQpi dXQgbWFrZXMgaXQgaGFyZGVyIHRvIGVkaXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBtYXRjaC4gIElu IHN1Y2ggYSBjYXNlLA0KdXNlIHRoZSBjb21tYW5kIFxcW29yZy1yZXZlYWxdIHRvIHNob3cgbW9y ZSBjb250ZXh0Lg0KSW5zdGVhZCBvZiB0LCB0aGlzIGNhbiBhbHNvIGJlIGFuIGFsaXN0IHNwZWNp ZnlpbmcgdGhpcyBvcHRpb24gZm9yIGRpZmZlcmVudA0KY29udGV4dHMuICBTZWUgYG9yZy1zaG93 LWhpZXJhcmNoeS1hYm92ZScgZm9yIHZhbGlkIGNvbnRleHRzLiINCiAgOmdyb3VwICdvcmctcmV2 ZWFsLWxvY2F0aW9uDQogIDp0eXBlIG9yZy1jb250ZXh0LWNob2ljZQ0KICA6dmVyc2lvbiAiMjQu NCINCiAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAuICI4LjAiKSkNCg0KKGRlZmN1c3RvbSBvcmct c2hvdy1lbnRyeS1iZWxvdyAnKChkZWZhdWx0IC4gbmlsKSkNCiAgIk5vbi1uaWwgbWVhbnMgc2hv dyB0aGUgZW50cnkgYmVsb3cgYSBoZWFkbGluZSB3aGVuIHJldmVhbGluZyBhIGxvY2F0aW9uLg0K T3JnLW1vZGUgb2Z0ZW4gc2hvd3MgbG9jYXRpb25zIGluIGFuIG9yZy1tb2RlIGZpbGUgd2hpY2gg bWlnaHQgaGF2ZQ0KYmVlbiBpbnZpc2libGUgYmVmb3JlLiAgV2hlbiB0aGlzIGlzIHNldCwgdGhl IHRleHQgYmVsb3cgdGhlIGhlYWRsaW5lIHRoYXQgaXMNCmV4cG9zZWQgaXMgYWxzbyBzaG93bi4N Cg0KQnkgZGVmYXVsdCB0aGlzIGlzIG9mZiBmb3IgYWxsIGNvbnRleHRzLg0KSW5zdGVhZCBvZiB0 LCB0aGlzIGNhbiBhbHNvIGJlIGFuIGFsaXN0IHNwZWNpZnlpbmcgdGhpcyBvcHRpb24gZm9yIGRp ZmZlcmVudA0KY29udGV4dHMuICBTZWUgYG9yZy1zaG93LWhpZXJhcmNoeS1hYm92ZScgZm9yIHZh bGlkIGNvbnRleHRzLiINCiAgOmdyb3VwICdvcmctcmV2ZWFsLWxvY2F0aW9uDQogIDp0eXBlIG9y Zy1jb250ZXh0LWNob2ljZSkNCg0KKGRlZmN1c3RvbSBvcmctaW5kaXJlY3QtYnVmZmVyLWRpc3Bs YXkgJ290aGVyLXdpbmRvdw0KICAiSG93IHNob3VsZCBpbmRpcmVjdCB0cmVlIGJ1ZmZlcnMgYmUg ZGlzcGxheWVkPw0KVGhpcyBhcHBsaWVzIHRvIGluZGlyZWN0IGJ1ZmZlcnMgY3JlYXRlZCB3aXRo IHRoZSBjb21tYW5kcw0KXFxbb3JnLXRyZWUtdG8taW5kaXJlY3QtYnVmZmVyXSBhbmQgXFxbb3Jn LWFnZW5kYS10cmVlLXRvLWluZGlyZWN0LWJ1ZmZlcl0uDQpWYWxpZCB2YWx1ZXMgYXJlOg0KY3Vy cmVudC13aW5kb3cgICBEaXNwbGF5IGluIHRoZSBjdXJyZW50IHdpbmRvdw0Kb3RoZXItd2luZG93 ICAgICBKdXN0IGRpc3BsYXkgaW4gYW5vdGhlciB3aW5kb3cuDQpkZWRpY2F0ZWQtZnJhbWUgIENy ZWF0ZSBvbmUgbmV3IGZyYW1lLCBhbmQgcmUtdXNlIGl0IGVhY2ggdGltZS4NCm5ldy1mcmFtZSAg ICAgICAgTWFrZSBhIG5ldyBmcmFtZSBlYWNoIHRpbWUuICBOb3RlIHRoYXQgaW4gdGhpcyBjYXNl DQogICAgICAgICAgICAgICAgIHByZXZpb3VzbHktbWFkZSBpbmRpcmVjdCBidWZmZXJzIGFyZSBr ZXB0LCBhbmQgeW91IG5lZWQgdG8NCiAgICAgICAgICAgICAgICAga2lsbCB0aGVzZSBidWZmZXJz IHlvdXJzZWxmLiINCiAgOmdyb3VwICdvcmctc3RydWN0dXJlDQogIDpncm91cCAnb3JnLWFnZW5k YS13aW5kb3dzDQogIDp0eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRhZyAiSW4gY3VycmVudCB3 aW5kb3ciIGN1cnJlbnQtd2luZG93KQ0KCSAgKGNvbnN0IDp0YWcgIkluIGN1cnJlbnQgZnJhbWUs IG90aGVyIHdpbmRvdyIgb3RoZXItd2luZG93KQ0KCSAgKGNvbnN0IDp0YWcgIkVhY2ggdGltZSBh IG5ldyBmcmFtZSIgbmV3LWZyYW1lKQ0KCSAgKGNvbnN0IDp0YWcgIk9uZSBkZWRpY2F0ZWQgZnJh bWUiIGRlZGljYXRlZC1mcmFtZSkpKQ0KDQooZGVmY3VzdG9tIG9yZy11c2Utc3BlZWQtY29tbWFu ZHMgbmlsDQogICJOb24tbmlsIG1lYW5zIGFjdGl2YXRlIHNpbmdsZSBsZXR0ZXIgY29tbWFuZHMg YXQgYmVnaW5uaW5nIG9mIGEgaGVhZGxpbmUuDQpUaGlzIG1heSBhbHNvIGJlIGEgZnVuY3Rpb24g dG8gdGVzdCBmb3IgYXBwcm9wcmlhdGUgbG9jYXRpb25zIHdoZXJlIHNwZWVkDQpjb21tYW5kcyBz aG91bGQgYmUgYWN0aXZlLiINCiAgOmdyb3VwICdvcmctc3RydWN0dXJlDQogIDp0eXBlICcoY2hv aWNlDQoJICAoY29uc3QgOnRhZyAiTmV2ZXIiIG5pbCkNCgkgIChjb25zdCA6dGFnICJBdCBiZWdp bm5pbmcgb2YgaGVhZGxpbmUgc3RhcnMiIHQpDQoJICAoZnVuY3Rpb24pKSkNCg0KKGRlZmN1c3Rv bSBvcmctc3BlZWQtY29tbWFuZHMtdXNlciBuaWwNCiAgIkFsaXN0IG9mIGFkZGl0aW9uYWwgc3Bl ZWQgY29tbWFuZHMuDQpUaGlzIGxpc3Qgd2lsbCBiZSBjaGVja2VkIGJlZm9yZSBgb3JnLXNwZWVk LWNvbW1hbmRzLWRlZmF1bHQnDQp3aGVuIHRoZSB2YXJpYWJsZSBgb3JnLXVzZS1zcGVlZC1jb21t YW5kcycgaXMgbm9uLW5pbA0KYW5kIHdoZW4gdGhlIGN1cnNvciBpcyBhdCB0aGUgYmVnaW5uaW5n IG9mIGEgaGVhZGxpbmUuDQpUaGUgY2FyIGlmIGVhY2ggZW50cnkgaXMgYSBzdHJpbmcgd2l0aCBh IHNpbmdsZSBsZXR0ZXIsIHdoaWNoIG11c3QNCmJlIGFzc2lnbmVkIHRvIGBzZWxmLWluc2VydC1j b21tYW5kJyBpbiB0aGUgZ2xvYmFsIG1hcC4NClRoZSBjZHIgaXMgZWl0aGVyIGEgY29tbWFuZCB0 byBiZSBjYWxsZWQgaW50ZXJhY3RpdmVseSwgYSBmdW5jdGlvbg0KdG8gYmUgY2FsbGVkLCBvciBh IGZvcm0gdG8gYmUgZXZhbHVhdGVkLg0KQW4gZW50cnkgdGhhdCBpcyBqdXN0IGEgbGlzdCB3aXRo IGEgc2luZ2xlIHN0cmluZyB3aWxsIGJlIGludGVycHJldGVkDQphcyBhIGRlc2NyaXB0aXZlIGhl YWRsaW5lIHRoYXQgd2lsbCBiZSBhZGRlZCB3aGVuIGxpc3RpbmcgdGhlIHNwZWVkDQpjb21tYW5k cyBpbiB0aGUgSGVscCBidWZmZXIgdXNpbmcgdGhlIGA/JyBzcGVlZCBjb21tYW5kLiINCiAgOmdy b3VwICdvcmctc3RydWN0dXJlDQogIDp0eXBlICcocmVwZWF0IDp2YWx1ZSAoImsiIC4gaWdub3Jl KQ0KCQkgKGNob2ljZSA6dmFsdWUgKCJrIiAuIGlnbm9yZSkNCgkJCSAobGlzdCA6dGFnICJEZXNj cmlwdGl2ZSBIZWFkbGluZSIgKHN0cmluZyA6dGFnICJIZWFkbGluZSIpKQ0KCQkJIChjb25zIDp0 YWcgIkxldHRlciBhbmQgQ29tbWFuZCINCgkJCSAgICAgICAoc3RyaW5nIDp0YWcgIkNvbW1hbmQg bGV0dGVyIikNCgkJCSAgICAgICAoY2hvaWNlDQoJCQkJKGZ1bmN0aW9uKQ0KCQkJCShzZXhwKSkp KSkpDQoNCihkZWZjdXN0b20gb3JnLWJvb2ttYXJrLW5hbWVzLXBsaXN0DQogICcoOmxhc3QtY2Fw dHVyZSAib3JnLWNhcHR1cmUtbGFzdC1zdG9yZWQiDQogICAgICAgICAgICAgICAgICA6bGFzdC1y ZWZpbGUgIm9yZy1yZWZpbGUtbGFzdC1zdG9yZWQiDQogICAgICAgICAgICAgICAgICA6bGFzdC1j YXB0dXJlLW1hcmtlciAib3JnLWNhcHR1cmUtbGFzdC1zdG9yZWQtbWFya2VyIikNCiAgIk5hbWVz IGZvciBib29rbWFya3MgYXV0b21hdGljYWxseSBzZXQgYnkgc29tZSBPcmcgY29tbWFuZHMuDQpU aGlzIGNhbiBwcm92aWRlIHN0cmluZ3MgYXMgbmFtZXMgZm9yIGEgbnVtYmVyIG9mIGJvb2ttYXJr cyBPcmcgc2V0cw0KYXV0b21hdGljYWxseS4gIFRoZSBmb2xsb3dpbmcga2V5cyBhcmUgY3VycmVu dGx5IGltcGxlbWVudGVkOg0KICA6bGFzdC1jYXB0dXJlDQogIDpsYXN0LWNhcHR1cmUtbWFya2Vy DQogIDpsYXN0LXJlZmlsZQ0KV2hlbiBhIGtleSBkb2VzIG5vdCBzaG93IHVwIGluIHRoZSBwcm9w ZXJ0eSBsaXN0LCB0aGUgY29ycmVzcG9uZGluZyBib29rbWFyaw0KaXMgbm90IHNldC4iDQogIDpn cm91cCAnb3JnLXN0cnVjdHVyZQ0KICA6dHlwZSAncGxpc3QpDQoNCihkZWZncm91cCBvcmctY3lj bGUgbmlsDQogICJPcHRpb25zIGNvbmNlcm5pbmcgdmlzaWJpbGl0eSBjeWNsaW5nIGluIE9yZy1t b2RlLiINCiAgOnRhZyAiT3JnIEN5Y2xlIg0KICA6Z3JvdXAgJ29yZy1zdHJ1Y3R1cmUpDQoNCihk ZWZjdXN0b20gb3JnLWN5Y2xlLXNraXAtY2hpbGRyZW4tc3RhdGUtaWYtbm8tY2hpbGRyZW4gdA0K ICAiTm9uLW5pbCBtZWFucyBza2lwIENISUxEUkVOIHN0YXRlIGluIGVudHJpZXMgdGhhdCBkb24n dCBoYXZlIGFueS4iDQogIDpncm91cCAnb3JnLWN5Y2xlDQogIDp0eXBlICdib29sZWFuKQ0KDQoo ZGVmY3VzdG9tIG9yZy1jeWNsZS1tYXgtbGV2ZWwgbmlsDQogICJNYXhpbXVtIGxldmVsIHdoaWNo IHNob3VsZCBzdGlsbCBiZSBzdWJqZWN0IHRvIHZpc2liaWxpdHkgY3ljbGluZy4NCkxldmVscyBo aWdoZXIgdGhhbiB0aGlzIHdpbGwsIGZvciBjeWNsaW5nLCBiZSB0cmVhdGVkIGFzIHRleHQsIG5v dCBhIGhlYWRsaW5lLg0KV2hlbiBgb3JnLW9kZC1sZXZlbHMtb25seScgaXMgc2V0LCBhIHZhbHVl IG9mIE4gaW4gdGhpcyB2YXJpYWJsZSBhY3R1YWxseQ0KbWVhbnMgMk4tMSBzdGFycyBhcyB0aGUg bGltaXRpbmcgaGVhZGxpbmUuDQpXaGVuIG5pbCwgY3ljbGUgYWxsIGxldmVscy4NCk5vdGUgdGhh dCB0aGUgbGltaXRpbmcgbGV2ZWwgb2YgY3ljbGluZyBpcyBhbHNvIGluZmx1ZW5jZWQgYnkNCmBv cmctaW5saW5ldGFzay1taW4tbGV2ZWwnLiAgV2hlbiBgb3JnLWN5Y2xlLW1heC1sZXZlbCcgaXMg bm90IHNldCBidXQNCmBvcmctaW5saW5ldGFzay1taW4tbGV2ZWwnIGlzLCBjeWNsaW5nIHdpbGwg YmUgbGltaXRlZCB0byBsZXZlbHMgb25lIGxlc3MNCnRoYW4gaXRzIHZhbHVlLiINCiAgOmdyb3Vw ICdvcmctY3ljbGUNCiAgOnR5cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6dGFnICJObyBsaW1pdCIg bmlsKQ0KCSAgKGludGVnZXIgOnRhZyAiTWF4aW11bSBsZXZlbCIpKSkNCg0KKGRlZmN1c3RvbSBv cmctZHJhd2VycyAnKCJQUk9QRVJUSUVTIiAiQ0xPQ0siICJMT0dCT09LIiAiUkVTVUxUUyIpDQog ICJOYW1lcyBvZiBkcmF3ZXJzLiAgRHJhd2VycyBhcmUgbm90IG9wZW5lZCBieSBjeWNsaW5nIG9u IHRoZSBoZWFkbGluZSBhYm92ZS4NCkRyYXdlcnMgb25seSBvcGVuIHdpdGggYSBUQUIgb24gdGhl IGRyYXdlciBsaW5lIGl0c2VsZi4gIEEgZHJhd2VyIGxvb2tzIGxpa2UNCnRoaXM6DQogICA6RFJB V0VSTkFNRToNCiAgIC4uLi4uDQogICA6RU5EOg0KVGhlIGRyYXdlciBcIlBST1BFUlRJRVNcIiBp cyBzcGVjaWFsIGZvciBjYXB0dXJpbmcgcHJvcGVydGllcyB0aHJvdWdoDQp0aGUgcHJvcGVydHkg QVBJLg0KDQpEcmF3ZXJzIGNhbiBiZSBkZWZpbmVkIG9uIHRoZSBwZXItZmlsZSBiYXNpcyB3aXRo IGEgbGluZSBsaWtlOg0KDQojK0RSQVdFUlM6IEhJRERFTiBTVEFURSBQUk9QRVJUSUVTIg0KICA6 Z3JvdXAgJ29yZy1zdHJ1Y3R1cmUNCiAgOmdyb3VwICdvcmctY3ljbGUNCiAgOnR5cGUgJyhyZXBl YXQgKHN0cmluZyA6dGFnICJEcmF3ZXIgTmFtZSIpKSkNCg0KKGRlZmN1c3RvbSBvcmctaGlkZS1i bG9jay1zdGFydHVwIG5pbA0KICAiTm9uLW5pbCBtZWFucyBlbnRlcmluZyBPcmctbW9kZSB3aWxs IGZvbGQgYWxsIGJsb2Nrcy4NClRoaXMgY2FuIGFsc28gYmUgc2V0IGluIG9uIGEgcGVyLWZpbGUg YmFzaXMgd2l0aA0KDQojK1NUQVJUVVA6IGhpZGVibG9ja3MNCiMrU1RBUlRVUDogc2hvd2Jsb2Nr cyINCiAgOmdyb3VwICdvcmctc3RhcnR1cA0KICA6Z3JvdXAgJ29yZy1jeWNsZQ0KICA6dHlwZSAn Ym9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmctY3ljbGUtZ2xvYmFsLWF0LWJvYiBuaWwNCiAgIkN5 Y2xlIGdsb2JhbGx5IGlmIGN1cnNvciBpcyBhdCBiZWdpbm5pbmcgb2YgYnVmZmVyIGFuZCBub3Qg YXQgYSBoZWFkbGluZS4NClRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZG8gZ2xvYmFsIGN5Y2xp bmcgd2l0aG91dCBoYXZpbmcgdG8gdXNlIFMtVEFCIG9yDQpcXFt1bml2ZXJzYWwtYXJndW1lbnRd IFRBQi4gIEZvciB0aGlzIHNwZWNpYWwgY2FzZSB0byB3b3JrLCB0aGUgZmlyc3QgbGluZQ0Kb2Yg dGhlIGJ1ZmZlciBtdXN0IG5vdCBiZSBhIGhlYWRsaW5lIC0tIGl0IG1heSBiZSBlbXB0eSBvciBz b21lIG90aGVyIHRleHQuDQpXaGVuIHVzZWQgaW4gdGhpcyB3YXksIGBvcmctY3ljbGUtaG9vaycg aXMgZGlzYWJsZWQgdGVtcG9yYXJpbHkgdG8gbWFrZQ0Kc3VyZSB0aGUgY3Vyc29yIHN0YXlzIGF0 IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4gIFdoZW4gdGhpcyBvcHRpb24gaXMNCm5pbCwg ZG9uJ3QgZG8gYW55dGhpbmcgc3BlY2lhbCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIu Ig0KICA6Z3JvdXAgJ29yZy1jeWNsZQ0KICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBv cmctY3ljbGUtbGV2ZWwtYWZ0ZXItaXRlbS9lbnRyeS1jcmVhdGlvbiB0DQogICJOb24tbmlsIG1l YW5zIGN5Y2xlIGVudHJ5IGxldmVsIG9yIGl0ZW0gaW5kZW50YXRpb24gaW4gbmV3IGVtcHR5IGVu dHJpZXMuDQoNCldoZW4gdGhlIGN1cnNvciBpcyBhdCB0aGUgZW5kIG9mIGFuIGVtcHR5IGhlYWRs aW5lLCBpLmUuLCB3aXRoIG9ubHkgc3RhcnMNCmFuZCBtYXliZSBhIFRPRE8ga2V5d29yZCwgVEFC IHdpbGwgdGhlbiBzd2l0Y2ggdGhlIGVudHJ5IHRvIGJlY29tZSBhIGNoaWxkLA0KYW5kIHRoZW4g YWxsIHBvc3NpYmxlIGFuY2VzdG9yIHN0YXRlcywgYmVmb3JlIHJldHVybmluZyB0byB0aGUgb3Jp Z2luYWwgc3RhdGUuDQpUaGlzIG1ha2VzIGRhdGEgZW50cnkgZXh0cmVtZWx5IGZhc3Q6ICBNLVJF VCB0byBjcmVhdGUgYSBuZXcgaGVhZGxpbmUsDQpvbiBUQUIgdG8gbWFrZSBpdCBhIGNoaWxkLCB0 d28gb3IgbW9yZSB0YWJzIHRvIG1ha2UgaXQgYSAoZ3JhbmQtKXVuY2xlLg0KDQpXaGVuIHRoZSBj dXJzb3IgaXMgYXQgdGhlIGVuZCBvZiBhbiBlbXB0eSBwbGFpbiBsaXN0IGl0ZW0sIG9uZSBUQUIg d2lsbA0KbWFrZSBpdCBhIHN1Yml0ZW0sIHR3byBvciBtb3JlIHRhYnMgd2lsbCBiYWNrIHVwIHRv IG1ha2UgdGhpcyBhbiBpdGVtDQpoaWdoZXIgdXAgaW4gdGhlIGl0ZW0gaGllcmFyY2h5LiINCiAg Omdyb3VwICdvcmctY3ljbGUNCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZjdXN0b20gb3JnLWN5 Y2xlLWVtdWxhdGUtdGFiIHQNCiAgIldoZXJlIHNob3VsZCBgb3JnLWN5Y2xlJyBlbXVsYXRlIFRB Qi4NCm5pbCAgICAgICAgIE5ldmVyDQp3aGl0ZSAgICAgICBPbmx5IGluIGNvbXBsZXRlbHkgd2hp dGUgbGluZXMNCndoaXRlc3RhcnQgIE9ubHkgYXQgdGhlIGJlZ2lubmluZyBvZiBsaW5lcywgYmVm b3JlIHRoZSBmaXJzdCBub24td2hpdGUgY2hhcg0KdCAgICAgICAgICAgRXZlcnl3aGVyZSBleGNl cHQgaW4gaGVhZGxpbmVzDQpleGMtaGwtYm9sICBFdmVyeXdoZXJlIGV4Y2VwdCBhdCB0aGUgc3Rh cnQgb2YgYSBoZWFkbGluZQ0KSWYgVEFCIGlzIHVzZWQgaW4gYSBwbGFjZSB3aGVyZSBpdCBkb2Vz IG5vdCBlbXVsYXRlIFRBQiwgdGhlIGN1cnJlbnQgc3VidHJlZQ0KdmlzaWJpbGl0eSBpcyBjeWNs ZWQuIg0KICA6Z3JvdXAgJ29yZy1jeWNsZQ0KICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAi TmV2ZXIiIG5pbCkNCgkJIChjb25zdCA6dGFnICJPbmx5IGluIGNvbXBsZXRlbHkgd2hpdGUgbGlu ZXMiIHdoaXRlKQ0KCQkgKGNvbnN0IDp0YWcgIkJlZm9yZSBmaXJzdCBjaGFyIGluIGEgbGluZSIg d2hpdGVzdGFydCkNCgkJIChjb25zdCA6dGFnICJFdmVyeXdoZXJlIGV4Y2VwdCBpbiBoZWFkbGlu ZXMiIHQpDQoJCSAoY29uc3QgOnRhZyAiRXZlcnl3aGVyZSBleGNlcHQgYXQgYm9sIGluIGhlYWRs aW5lcyIgZXhjLWhsLWJvbCkpKQ0KDQooZGVmY3VzdG9tIG9yZy1jeWNsZS1zZXBhcmF0b3ItbGlu ZXMgMg0KICAiTnVtYmVyIG9mIGVtcHR5IGxpbmVzIG5lZWRlZCB0byBrZWVwIGFuIGVtcHR5IGxp bmUgYmV0d2VlbiBjb2xsYXBzZWQgdHJlZXMuDQpJZiB5b3UgbGVhdmUgYW4gZW1wdHkgbGluZSBi ZXR3ZWVuIHRoZSBlbmQgb2YgYSBzdWJ0cmVlIGFuZCB0aGUgZm9sbG93aW5nDQpoZWFkbGluZSwg dGhpcyBlbXB0eSBsaW5lIGlzIGhpZGRlbiB3aGVuIHRoZSBzdWJ0cmVlIGlzIGZvbGRlZC4NCk9y Zy1tb2RlIHdpbGwgbGVhdmUgKGV4YWN0bHkpIG9uZSBlbXB0eSBsaW5lIHZpc2libGUgaWYgdGhl IG51bWJlciBvZg0KZW1wdHkgbGluZXMgaXMgZXF1YWwgb3IgbGFyZ2VyIHRvIHRoZSBudW1iZXIg Z2l2ZW4gaW4gdGhpcyB2YXJpYWJsZS4NClNvIHRoZSBkZWZhdWx0IDIgbWVhbnMgYXQgbGVhc3Qg MiBlbXB0eSBsaW5lcyBhZnRlciB0aGUgZW5kIG9mIGEgc3VidHJlZQ0KYXJlIG5lZWRlZCB0byBw cm9kdWNlIGZyZWUgc3BhY2UgYmV0d2VlbiBhIGNvbGxhcHNlZCBzdWJ0cmVlIGFuZCB0aGUNCmZv bGxvd2luZyBoZWFkbGluZS4NCg0KSWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSwgYW5kIHRoZSBu dW1iZXIgb2YgZW1wdHkgbGluZXMgaXMgYXQgbGVhc3QgLU4sDQphbGwgZW1wdHkgbGluZXMgYXJl IHNob3duLg0KDQpTcGVjaWFsIGNhc2U6IHdoZW4gMCwgbmV2ZXIgbGVhdmUgZW1wdHkgbGluZXMg aW4gY29sbGFwc2VkIHZpZXcuIg0KICA6Z3JvdXAgJ29yZy1jeWNsZQ0KICA6dHlwZSAnaW50ZWdl cikNCihwdXQgJ29yZy1jeWNsZS1zZXBhcmF0b3ItbGluZXMgJ3NhZmUtbG9jYWwtdmFyaWFibGUg J2ludGVnZXJwKQ0KDQooZGVmY3VzdG9tIG9yZy1wcmUtY3ljbGUtaG9vayBuaWwNCiAgIkhvb2sg dGhhdCBpcyBydW4gYmVmb3JlIHZpc2liaWxpdHkgY3ljbGluZyBpcyBoYXBwZW5pbmcuDQpUaGUg ZnVuY3Rpb24ocykgaW4gdGhpcyBob29rIG11c3QgYWNjZXB0IGEgc2luZ2xlIGFyZ3VtZW50IHdo aWNoIGluZGljYXRlcw0KdGhlIG5ldyBzdGF0ZSB0aGF0IHdpbGwgYmUgc2V0IHJpZ2h0IGFmdGVy IHJ1bm5pbmcgdGhpcyBob29rLiAgVGhlDQphcmd1bWVudCBpcyBhIHN5bWJvbC4gIEJlZm9yZSBh IGdsb2JhbCBzdGF0ZSBjaGFuZ2UsIGl0IGNhbiBoYXZlIHRoZSB2YWx1ZXMNCmBvdmVydmlldycs IGBjb250ZW50Jywgb3IgYGFsbCcuICBCZWZvcmUgYSBsb2NhbCBzdGF0ZSBjaGFuZ2UsIGl0IGNh biBoYXZlDQp0aGUgdmFsdWVzIGBmb2xkZWQnLCBgY2hpbGRyZW4nLCBvciBgc3VidHJlZScuIg0K ICA6Z3JvdXAgJ29yZy1jeWNsZQ0KICA6dHlwZSAnaG9vaykNCg0KKGRlZmN1c3RvbSBvcmctY3lj bGUtaG9vayAnKG9yZy1jeWNsZS1oaWRlLWFyY2hpdmVkLXN1YnRyZWVzDQoJCQkgICAgb3JnLWN5 Y2xlLWhpZGUtZHJhd2Vycw0KCQkJICAgIG9yZy1jeWNsZS1oaWRlLWlubGluZS10YXNrcw0KCQkJ ICAgIG9yZy1jeWNsZS1zaG93LWVtcHR5LWxpbmVzDQoJCQkgICAgb3JnLW9wdGltaXplLXdpbmRv dy1hZnRlci12aXNpYmlsaXR5LWNoYW5nZSkNCiAgIkhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgYG9y Zy1jeWNsZScgaGFzIGNoYW5nZWQgdGhlIGJ1ZmZlciB2aXNpYmlsaXR5Lg0KVGhlIGZ1bmN0aW9u KHMpIGluIHRoaXMgaG9vayBtdXN0IGFjY2VwdCBhIHNpbmdsZSBhcmd1bWVudCB3aGljaCBpbmRp Y2F0ZXMNCnRoZSBuZXcgc3RhdGUgdGhhdCB3YXMgc2V0IGJ5IHRoZSBtb3N0IHJlY2VudCBgb3Jn LWN5Y2xlJyBjb21tYW5kLiAgVGhlDQphcmd1bWVudCBpcyBhIHN5bWJvbC4gIEFmdGVyIGEgZ2xv YmFsIHN0YXRlIGNoYW5nZSwgaXQgY2FuIGhhdmUgdGhlIHZhbHVlcw0KYG92ZXJ2aWV3JywgYGNv bnRlbnRzJywgb3IgYGFsbCcuICBBZnRlciBhIGxvY2FsIHN0YXRlIGNoYW5nZSwgaXQgY2FuIGhh dmUNCnRoZSB2YWx1ZXMgYGZvbGRlZCcsIGBjaGlsZHJlbicsIG9yIGBzdWJ0cmVlJy4iDQogIDpn cm91cCAnb3JnLWN5Y2xlDQogIDp0eXBlICdob29rKQ0KDQooZGVmZ3JvdXAgb3JnLWVkaXQtc3Ry dWN0dXJlIG5pbA0KICAiT3B0aW9ucyBjb25jZXJuaW5nIHN0cnVjdHVyZSBlZGl0aW5nIGluIE9y Zy1tb2RlLiINCiAgOnRhZyAiT3JnIEVkaXQgU3RydWN0dXJlIg0KICA6Z3JvdXAgJ29yZy1zdHJ1 Y3R1cmUpDQoNCihkZWZjdXN0b20gb3JnLW9kZC1sZXZlbHMtb25seSBuaWwNCiAgIk5vbi1uaWwg bWVhbnMgc2tpcCBldmVuIGxldmVscyBhbmQgb25seSB1c2Ugb2RkIGxldmVscyBmb3IgdGhlIG91 dGxpbmUuDQpUaGlzIGhhcyB0aGUgZWZmZWN0IHRoYXQgdHdvIHN0YXJzIGFyZSBiZWluZyBhZGRl ZC90YWtlbiBhd2F5IGluDQpwcm9tb3Rpb24vZGVtb3Rpb24gY29tbWFuZHMuICBJdCBhbHNvIGlu Zmx1ZW5jZXMgaG93IGxldmVscyBhcmUNCmhhbmRsZWQgYnkgdGhlIGV4cG9ydGVycy4NCkNoYW5n aW5nIGl0IHJlcXVpcmVzIHJlc3RhcnQgb2YgYGZvbnQtbG9jay1tb2RlJyB0byBiZWNvbWUgZWZm ZWN0aXZlDQpmb3IgZm9udGlmaWNhdGlvbiBhbHNvIGluIHJlZ2lvbnMgYWxyZWFkeSBmb250aWZp ZWQuDQpZb3UgbWF5IGFsc28gc2V0IHRoaXMgb24gYSBwZXItZmlsZSBiYXNpcyBieSBhZGRpbmcg b25lIG9mIHRoZSBmb2xsb3dpbmcNCmxpbmVzIHRvIHRoZSBidWZmZXI6DQoNCiAgICMrU1RBUlRV UDogb2RkDQogICAjK1NUQVJUVVA6IG9kZGV2ZW4iDQogIDpncm91cCAnb3JnLWVkaXQtc3RydWN0 dXJlDQogIDpncm91cCAnb3JnLWFwcGVhcmFuY2UNCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZj dXN0b20gb3JnLWFkYXB0LWluZGVudGF0aW9uIHQNCiAgIk5vbi1uaWwgbWVhbnMgYWRhcHQgaW5k ZW50YXRpb24gdG8gb3V0bGluZSBub2RlIGxldmVsLg0KDQpXaGVuIHRoaXMgdmFyaWFibGUgaXMg c2V0LCBPcmcgYXNzdW1lcyB0aGF0IHlvdSB3cml0ZSBvdXRsaW5lcyBieQ0KaW5kZW50aW5nIHRl eHQgaW4gZWFjaCBub2RlIHRvIGFsaWduIHdpdGggdGhlIGhlYWRsaW5lIChhZnRlciB0aGUgc3Rh cnMpLg0KVGhlIGZvbGxvd2luZyBpc3N1ZXMgYXJlIGluZmx1ZW5jZWQgYnkgdGhpcyB2YXJpYWJs ZToNCg0KLSBXaGVuIHRoaXMgaXMgc2V0IGFuZCB0aGUgKmVudGlyZSogdGV4dCBpbiBhbiBlbnRy eSBpcyBpbmRlbnRlZCwgdGhlDQogIGluZGVudGF0aW9uIGlzIGluY3JlYXNlZCBieSBvbmUgc3Bh Y2UgaW4gYSBkZW1vdGlvbiBjb21tYW5kLCBhbmQNCiAgZGVjcmVhc2VkIGJ5IG9uZSBpbiBhIHBy b21vdGlvbiBjb21tYW5kLiAgSWYgYW55IGxpbmUgaW4gdGhlIGVudHJ5DQogIGJvZHkgc3RhcnRz IHdpdGggdGV4dCBhdCBjb2x1bW4gMCwgaW5kZW50YXRpb24gaXMgbm90IGNoYW5nZWQgYXQgYWxs Lg0KDQotIFByb3BlcnR5IGRyYXdlcnMgYW5kIHBsYW5uaW5nIGluZm9ybWF0aW9uIGlzIGluc2Vy dGVkIGluZGVudGVkIHdoZW4NCiAgdGhpcyB2YXJpYWJsZSBzIHNldC4gIFdoZW4gbmlsLCB0aGV5 IHdpbGwgbm90IGJlIGluZGVudGVkLg0KDQotIFRBQiBpbmRlbnRzIGEgbGluZSByZWxhdGl2ZSB0 byBjb250ZXh0LiAgVGhlIGxpbmVzIGJlbG93IGEgaGVhZGxpbmUNCiAgd2lsbCBiZSBpbmRlbnRl ZCB3aGVuIHRoaXMgdmFyaWFibGUgaXMgc2V0Lg0KDQpOb3RlIHRoYXQgdGhpcyBpcyBhbGwgYWJv dXQgdHJ1ZSBpbmRlbnRhdGlvbiwgYnkgYWRkaW5nIGFuZCByZW1vdmluZw0Kc3BhY2UgY2hhcmFj dGVycy4gIFNlZSBhbHNvIGBvcmctaW5kZW50LmVsJyB3aGljaCBkb2VzIGxldmVsLWRlcGVuZGVu dA0KaW5kZW50YXRpb24gaW4gYSB2aXJ0dWFsIHdheSwgaS5lLiBhdCBkaXNwbGF5IHRpbWUgaW4g RW1hY3MuIg0KICA6Z3JvdXAgJ29yZy1lZGl0LXN0cnVjdHVyZQ0KICA6dHlwZSAnYm9vbGVhbikN Cg0KKGRlZmN1c3RvbSBvcmctc3BlY2lhbC1jdHJsLWEvZSBuaWwNCiAgIk5vbi1uaWwgbWVhbnMg YEMtYScgYW5kIGBDLWUnIGJlaGF2ZSBzcGVjaWFsbHkgaW4gaGVhZGxpbmVzIGFuZCBpdGVtcy4N Cg0KV2hlbiB0LCBgQy1hJyB3aWxsIGJyaW5nIGJhY2sgdGhlIGN1cnNvciB0byB0aGUgYmVnaW5u aW5nIG9mIHRoZQ0KaGVhZGxpbmUgdGV4dCwgaS5lLiBhZnRlciB0aGUgc3RhcnMgYW5kIGFmdGVy IGEgcG9zc2libGUgVE9ETw0Ka2V5d29yZC4gIEluIGFuIGl0ZW0sIHRoaXMgd2lsbCBiZSB0aGUg cG9zaXRpb24gYWZ0ZXIgYnVsbGV0IGFuZA0KY2hlY2stYm94LCBpZiBhbnkuICBXaGVuIHRoZSBj dXJzb3IgaXMgYWxyZWFkeSBhdCB0aGF0IHBvc2l0aW9uLA0KYW5vdGhlciBgQy1hJyB3aWxsIGJy aW5nIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuDQoNCmBDLWUnIHdpbGwganVtcCB0 byB0aGUgZW5kIG9mIHRoZSBoZWFkbGluZSwgaWdub3JpbmcgdGhlIHByZXNlbmNlDQpvZiB0YWdz IGluIHRoZSBoZWFkbGluZS4gIEEgc2Vjb25kIGBDLWUnIHdpbGwgdGhlbiBqdW1wIHRvIHRoZQ0K dHJ1ZSBlbmQgb2YgdGhlIGxpbmUsIGFmdGVyIGFueSB0YWdzLiAgVGhpcyBhbHNvIG1lYW5zIHRo YXQsIHdoZW4NCnRoaXMgdmFyaWFibGUgaXMgbm9uLW5pbCwgYEMtZScgYWxzbyB3aWxsIG5ldmVy IGp1bXAgYmV5b25kIHRoZQ0KZW5kIG9mIHRoZSBoZWFkaW5nIG9mIGEgZm9sZGVkIHNlY3Rpb24s IGkuZS4gbm90IGFmdGVyIHRoZQ0KZWxsaXBzZXMuDQoNCldoZW4gc2V0IHRvIHRoZSBzeW1ib2wg YHJldmVyc2VkJywgdGhlIGZpcnN0IGBDLWEnIG9yIGBDLWUnIHdvcmtzDQpub3JtYWxseSwgZ29p bmcgdG8gdGhlIHRydWUgbGluZSBib3VuZGFyeSBmaXJzdC4gIE9ubHkgYSBkaXJlY3RseQ0KZm9s bG93aW5nLCBpZGVudGljYWwga2V5cHJlc3Mgd2lsbCBicmluZyB0aGUgY3Vyc29yIHRvIHRoZQ0K c3BlY2lhbCBwb3NpdGlvbnMuDQoNClRoaXMgbWF5IGFsc28gYmUgYSBjb25zIGNlbGwgd2hlcmUg dGhlIGJlaGF2aW9yIGZvciBgQy1hJyBhbmQNCmBDLWUnIGlzIHNldCBzZXBhcmF0ZWx5LiINCiAg Omdyb3VwICdvcmctZWRpdC1zdHJ1Y3R1cmUNCiAgOnR5cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6 dGFnICJvZmYiIG5pbCkNCgkgIChjb25zdCA6dGFnICJvbjogYWZ0ZXIgc3RhcnMvYnVsbGV0IGFu ZCBiZWZvcmUgdGFncyBmaXJzdCIgdCkNCgkgIChjb25zdCA6dGFnICJyZXZlcnNlZDogdHJ1ZSBs aW5lIGJvdW5kYXJ5IGZpcnN0IiByZXZlcnNlZCkNCgkgIChjb25zIDp0YWcgIlNldCBDLWEgYW5k IEMtZSBzZXBhcmF0ZWx5Ig0KCQkoY2hvaWNlIDp0YWcgIlNwZWNpYWwgQy1hIg0KCQkJKGNvbnN0 IDp0YWcgIm9mZiIgbmlsKQ0KCQkJKGNvbnN0IDp0YWcgIm9uOiBhZnRlciAgc3RhcnMvYnVsbGV0 IGZpcnN0IiB0KQ0KCQkJKGNvbnN0IDp0YWcgInJldmVyc2VkOiBiZWZvcmUgc3RhcnMvYnVsbGV0 IGZpcnN0IiByZXZlcnNlZCkpDQoJCShjaG9pY2UgOnRhZyAiU3BlY2lhbCBDLWUiDQoJCQkoY29u c3QgOnRhZyAib2ZmIiBuaWwpDQoJCQkoY29uc3QgOnRhZyAib246IGJlZm9yZSB0YWdzIGZpcnN0 IiB0KQ0KCQkJKGNvbnN0IDp0YWcgInJldmVyc2VkOiBhZnRlciB0YWdzIGZpcnN0IiByZXZlcnNl ZCkpKSkpDQoob3JnLWRlZnZhcmFsaWFzICdvcmctc3BlY2lhbC1jdHJsLWEgJ29yZy1zcGVjaWFs LWN0cmwtYS9lKQ0KDQooZGVmY3VzdG9tIG9yZy1zcGVjaWFsLWN0cmwtayBuaWwNCiAgIk5vbi1u aWwgbWVhbnMgYEMtaycgd2lsbCBiZWhhdmUgc3BlY2lhbGx5IGluIGhlYWRsaW5lcy4NCldoZW4g bmlsLCBgQy1rJyB3aWxsIGNhbGwgdGhlIGRlZmF1bHQgYGtpbGwtbGluZScgY29tbWFuZC4NCldo ZW4gdCwgdGhlIGZvbGxvd2luZyB3aWxsIGhhcHBlbiB3aGlsZSB0aGUgY3Vyc29yIGlzIGluIHRo ZSBoZWFkbGluZToNCg0KLSBXaGVuIHRoZSBjdXJzb3IgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBh IGhlYWRsaW5lLCBraWxsIHRoZSBlbnRpcmUNCiAgbGluZSBhbmQgcG9zc2libGUgdGhlIGZvbGRl ZCBzdWJ0cmVlIGJlbG93IHRoZSBsaW5lLg0KLSBXaGVuIGluIHRoZSBtaWRkbGUgb2YgdGhlIGhl YWRsaW5lIHRleHQsIGtpbGwgdGhlIGhlYWRsaW5lIHVwIHRvIHRoZSB0YWdzLg0KLSBXaGVuIGFm dGVyIHRoZSBoZWFkbGluZSB0ZXh0LCBraWxsIHRoZSB0YWdzLiINCiAgOmdyb3VwICdvcmctZWRp dC1zdHJ1Y3R1cmUNCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZjdXN0b20gb3JnLWN0cmwtay1w cm90ZWN0LXN1YnRyZWUgbmlsDQogICJOb24tbmlsIG1lYW5zLCBkbyBub3QgZGVsZXRlIGEgaGlk ZGVuIHN1YnRyZWUgd2l0aCBDLWsuDQpXaGVuIHNldCB0byB0aGUgc3ltYm9sIGBlcnJvcicsIHNp bXBseSB0aHJvdyBhbiBlcnJvciB3aGVuIEMtayBpcw0KdXNlZCB0byBraWxsIChwYXJ0LW9mKSBh IGhlYWRsaW5lIHRoYXQgaGFzIGhpZGRlbiB0ZXh0IGJlaGluZCBpdC4NCkFueSBvdGhlciBub24t bmlsIHZhbHVlIHdpbGwgcmVzdWx0IGluIGEgcXVlcnkgdG8gdGhlIHVzZXIsIGlmIGl0IGlzDQpP SyB0byBraWxsIHRoYXQgaGlkZGVuIHN1YnRyZWUuICBXaGVuIG5pbCwga2lsbCB3aXRob3V0IHJl bW9yc2UuIg0KICA6Z3JvdXAgJ29yZy1lZGl0LXN0cnVjdHVyZQ0KICA6dmVyc2lvbiAiMjQuMSIN CiAgOnR5cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6dGFnICJEbyBub3QgcHJvdGVjdCBoaWRkZW4g c3VidHJlZXMiIG5pbCkNCgkgIChjb25zdCA6dGFnICJQcm90ZWN0IGhpZGRlbiBzdWJ0cmVlcyB3 aXRoIGEgc2VjdXJpdHkgcXVlcnkiIHQpDQoJICAoY29uc3QgOnRhZyAiTmV2ZXIga2lsbCBhIGhp ZGRlbiBzdWJ0cmVlIHdpdGggQy1rIiBlcnJvcikpKQ0KDQooZGVmY3VzdG9tIG9yZy1zcGVjaWFs LWN0cmwtbyB0DQogICJOb24tbmlsIG1lYW5zLCBtYWtlIGBDLW8nIGluc2VydCBhIHJvdyBpbiB0 YWJsZXMuIg0KICA6Z3JvdXAgJ29yZy1lZGl0LXN0cnVjdHVyZQ0KICA6dHlwZSAnYm9vbGVhbikN Cg0KKGRlZmN1c3RvbSBvcmctY2F0Y2gtaW52aXNpYmxlLWVkaXRzIG5pbA0KICAiQ2hlY2sgaWYg aW4gaW52aXNpYmxlIHJlZ2lvbiBiZWZvcmUgaW5zZXJ0aW5nIG9yIGRlbGV0aW5nIGEgY2hhcmFj dGVyLg0KVmFsaWQgdmFsdWVzIGFyZToNCg0KbmlsICAgICAgICAgICAgICBEbyBub3QgY2hlY2ss IHNvIGp1c3QgZG8gaW52aXNpYmxlIGVkaXRzLg0KZXJyb3IgICAgICAgICAgICBUaHJvdyBhbiBl cnJvciBhbmQgZG8gbm90aGluZy4NCnNob3cgICAgICAgICAgICAgTWFrZSBwb2ludCB2aXNpYmxl LCBhbmQgZG8gdGhlIHJlcXVlc3RlZCBlZGl0Lg0Kc2hvdy1hbmQtZXJyb3IgICBNYWtlIHBvaW50 IHZpc2libGUsIHRoZW4gdGhyb3cgYW4gZXJyb3IgYW5kIGFib3J0IHRoZSBlZGl0Lg0Kc21hcnQg ICAgICAgICAgICBNYWtlIHBvaW50IHZpc2libGUsIGFuZCBkbyBpbnNlcnRpb24vZGVsZXRpb24g aWYgaXQgaXMNCiAgICAgICAgICAgICAgICAgYWRqYWNlbnQgdG8gdmlzaWJsZSB0ZXh0IGFuZCB0 aGUgY2hhbmdlIGZlZWxzIHByZWRpY3RhYmxlLg0KICAgICAgICAgICAgICAgICBOZXZlciBkZWxl dGUgYSBwcmV2aW91c2x5IGludmlzaWJsZSBjaGFyYWN0ZXIgb3IgYWRkIGluIHRoZQ0KICAgICAg ICAgICAgICAgICBtaWRkbGUgb3IgcmlnaHQgYWZ0ZXIgYW4gaW52aXNpYmxlIHJlZ2lvbi4gIEJh c2ljYWxseSwgdGhpcw0KICAgICAgICAgICAgICAgICBhbGxvd3MgaW5zZXJ0aW9uIGFuZCBiYWNr d2FyZC1kZWxldGUgcmlnaHQgYmVmb3JlIGVsbGlwc2VzLg0KICAgICAgICAgICAgICAgICBGSVhN RTogbWF5YmUgaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBub3QgZXZlbiBzaG93PyINCiAgOmdyb3Vw ICdvcmctZWRpdC1zdHJ1Y3R1cmUNCiAgOnZlcnNpb24gIjI0LjEiDQogIDp0eXBlICcoY2hvaWNl DQoJICAoY29uc3QgOnRhZyAiRG8gbm90IGNoZWNrIiBuaWwpDQoJICAoY29uc3QgOnRhZyAiVGhy b3cgZXJyb3Igd2hlbiB0cnlpbmcgdG8gZWRpdCIgZXJyb3IpDQoJICAoY29uc3QgOnRhZyAiVW5o aWRlLCBidXQgZG8gbm90IGRvIHRoZSBlZGl0IiBzaG93LWFuZC1lcnJvcikNCgkgIChjb25zdCA6 dGFnICJTaG93IGludmlzaWJsZSBwYXJ0IGFuZCBkbyB0aGUgZWRpdCIgc2hvdykNCgkgIChjb25z dCA6dGFnICJCZSBzbWFydCBhbmQgZG8gdGhlIHJpZ2h0IHRoaW5nIiBzbWFydCkpKQ0KDQooZGVm Y3VzdG9tIG9yZy15YW5rLWZvbGRlZC1zdWJ0cmVlcyB0DQogICJOb24tbmlsIG1lYW5zIHdoZW4g eWFua2luZyBzdWJ0cmVlcywgZm9sZCB0aGVtLg0KSWYgdGhlIGtpbGwgaXMgYSBzaW5nbGUgc3Vi dHJlZSwgb3IgYSBzZXF1ZW5jZSBvZiBzdWJ0cmVlcywgaS5lLiBpZg0KaXQgc3RhcnRzIHdpdGgg YSBoZWFkaW5nIGFuZCBhbGwgb3RoZXIgaGVhZGluZ3MgaW4gaXQgYXJlIGVpdGhlciBjaGlsZHJl bg0Kb3Igc2libGluZ3MsIHRoZW4gZm9sZCBhbGwgdGhlIHN1YnRyZWVzLiAgSG93ZXZlciwgZG8g dGhpcyBvbmx5IGlmIG5vDQp0ZXh0IGFmdGVyIHRoZSB5YW5rIHdvdWxkIGJlIHN3YWxsb3dlZCBp bnRvIGEgZm9sZGVkIHRyZWUgYnkgdGhpcyBhY3Rpb24uIg0KICA6Z3JvdXAgJ29yZy1lZGl0LXN0 cnVjdHVyZQ0KICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmcteWFuay1hZGp1c3Rl ZC1zdWJ0cmVlcyBuaWwNCiAgIk5vbi1uaWwgbWVhbnMgd2hlbiB5YW5raW5nIHN1YnRyZWVzLCBh ZGp1c3QgdGhlIGxldmVsLg0KV2l0aCB0aGlzIHNldHRpbmcsIGBvcmctcGFzdGUtc3VidHJlZScg aXMgdXNlZCB0byBpbnNlcnQgdGhlIHN1YnRyZWUsIHNlZQ0KdGhpcyBmdW5jdGlvbiBmb3IgZGV0 YWlscy4iDQogIDpncm91cCAnb3JnLWVkaXQtc3RydWN0dXJlDQogIDp0eXBlICdib29sZWFuKQ0K DQooZGVmY3VzdG9tIG9yZy1NLVJFVC1tYXktc3BsaXQtbGluZSAnKChkZWZhdWx0IC4gdCkpDQog ICJOb24tbmlsIG1lYW5zIE0tUkVUIHdpbGwgc3BsaXQgdGhlIGxpbmUgYXQgdGhlIGN1cnNvciBw b3NpdGlvbi4NCldoZW4gbmlsLCBpdCB3aWxsIGdvIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgYmVm b3JlIG1ha2luZyBhDQpuZXcgbGluZS4NCllvdSBtYXkgYWxzbyBzZXQgdGhpcyBvcHRpb24gaW4g YSBkaWZmZXJlbnQgd2F5IGZvciBkaWZmZXJlbnQNCmNvbnRleHRzLiAgVmFsaWQgY29udGV4dHMg YXJlOg0KDQpoZWFkbGluZSAgd2hlbiBjcmVhdGluZyBhIG5ldyBoZWFkbGluZQ0KaXRlbSAgICAg IHdoZW4gY3JlYXRpbmcgYSBuZXcgaXRlbQ0KdGFibGUgICAgIGluIGEgdGFibGUgZmllbGQNCmRl ZmF1bHQgICB0aGUgdmFsdWUgdG8gYmUgdXNlZCBmb3IgYWxsIGNvbnRleHRzIG5vdCBleHBsaWNp dGx5DQogICAgICAgICAgY3VzdG9taXplZCINCiAgOmdyb3VwICdvcmctc3RydWN0dXJlDQogIDpn cm91cCAnb3JnLXRhYmxlDQogIDp0eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRhZyAiQWx3YXlz IiB0KQ0KCSAgKGNvbnN0IDp0YWcgIk5ldmVyIiBuaWwpDQoJICAocmVwZWF0IDpncmVlZHkgdCA6 dGFnICJJbmRpdmlkdWFsIGNvbnRleHRzIg0KCQkgIChjb25zDQoJCSAgIChjaG9pY2UgOnRhZyAi Q29udGV4dCINCgkJCSAgIChjb25zdCBoZWFkbGluZSkNCgkJCSAgIChjb25zdCBpdGVtKQ0KCQkJ ICAgKGNvbnN0IHRhYmxlKQ0KCQkJICAgKGNvbnN0IGRlZmF1bHQpKQ0KCQkgICAoYm9vbGVhbikp KSkpDQoNCg0KKGRlZmN1c3RvbSBvcmctaW5zZXJ0LWhlYWRpbmctcmVzcGVjdC1jb250ZW50IG5p bA0KICAiTm9uLW5pbCBtZWFucyBpbnNlcnQgbmV3IGhlYWRpbmdzIGFmdGVyIHRoZSBjdXJyZW50 IHN1YnRyZWUuDQpXaGVuIG5pbCwgdGhlIG5ldyBoZWFkaW5nIGlzIGNyZWF0ZWQgZGlyZWN0bHkg YWZ0ZXIgdGhlIGN1cnJlbnQgbGluZS4NClRoZSBjb21tYW5kcyBcXFtvcmctaW5zZXJ0LWhlYWRp bmctcmVzcGVjdC1jb250ZW50XSBhbmQgXFxbb3JnLWluc2VydC10b2RvLWhlYWRpbmctcmVzcGVj dC1jb250ZW50XSB0dXJuDQp0aGlzIHZhcmlhYmxlIG9uIGZvciB0aGUgZHVyYXRpb24gb2YgdGhl IGNvbW1hbmQuIg0KICA6Z3JvdXAgJ29yZy1zdHJ1Y3R1cmUNCiAgOnR5cGUgJ2Jvb2xlYW4pDQoN CihkZWZjdXN0b20gb3JnLWJsYW5rLWJlZm9yZS1uZXctZW50cnkgJygoaGVhZGluZyAuIGF1dG8p DQoJCQkJCShwbGFpbi1saXN0LWl0ZW0gLiBhdXRvKSkNCiAgIlNob3VsZCBgb3JnLWluc2VydC1o ZWFkaW5nJyBsZWF2ZSBhIGJsYW5rIGxpbmUgYmVmb3JlIG5ldyBoZWFkaW5nL2l0ZW0/DQpUaGUg dmFsdWUgaXMgYW4gYWxpc3QsIHdpdGggYGhlYWRpbmcnIGFuZCBgcGxhaW4tbGlzdC1pdGVtJyBh cyBDQVIsDQphbmQgYSBib29sZWFuIGZsYWcgYXMgQ0RSLiAgVGhlIGNkciBtYXkgYWxzbyBiZSB0 aGUgc3ltYm9sIGBhdXRvJywgaW4NCndoaWNoIGNhc2UgT3JnIHdpbGwgbG9vayBhdCB0aGUgc3Vy cm91bmRpbmcgaGVhZGluZ3MvaXRlbXMgYW5kIHRyeSB0bw0KbWFrZSBhbiBpbnRlbGxpZ2VudCBk ZWNpc2lvbiB3aGV0aGVyIHRvIGluc2VydCBhIGJsYW5rIGxpbmUgb3Igbm90Lg0KDQpGb3IgcGxh aW4gbGlzdHMsIGlmIGBvcmctbGlzdC1lbXB0eS1saW5lLXRlcm1pbmF0ZXMtcGxhaW4tbGlzdHMn IGlzIHNldCwNCnRoZSBzZXR0aW5nIGhlcmUgaXMgaWdub3JlZCBhbmQgbm8gZW1wdHkgbGluZSBp cyBpbnNlcnRlZCB0byBhdm9pZCBicmVha2luZw0KdGhlIGxpc3Qgc3RydWN0dXJlLiINCiAgOmdy b3VwICdvcmctZWRpdC1zdHJ1Y3R1cmUNCiAgOnR5cGUgJyhsaXN0DQoJICAoY29ucyAoY29uc3Qg aGVhZGluZykNCgkJKGNob2ljZSAoY29uc3QgOnRhZyAiTmV2ZXIiIG5pbCkNCgkJCShjb25zdCA6 dGFnICJBbHdheXMiIHQpDQoJCQkoY29uc3QgOnRhZyAiQXV0byIgYXV0bykpKQ0KCSAgKGNvbnMg KGNvbnN0IHBsYWluLWxpc3QtaXRlbSkNCgkJKGNob2ljZSAoY29uc3QgOnRhZyAiTmV2ZXIiIG5p bCkNCgkJCShjb25zdCA6dGFnICJBbHdheXMiIHQpDQoJCQkoY29uc3QgOnRhZyAiQXV0byIgYXV0 bykpKSkpDQoNCihkZWZjdXN0b20gb3JnLWluc2VydC1oZWFkaW5nLWhvb2sgbmlsDQogICJIb29r IGJlaW5nIHJ1biBhZnRlciBpbnNlcnRpbmcgYSBuZXcgaGVhZGluZy4iDQogIDpncm91cCAnb3Jn LWVkaXQtc3RydWN0dXJlDQogIDp0eXBlICdob29rKQ0KDQooZGVmY3VzdG9tIG9yZy1lbmFibGUt Zml4ZWQtd2lkdGgtZWRpdG9yIHQNCiAgIk5vbi1uaWwgbWVhbnMgbGluZXMgc3RhcnRpbmcgd2l0 aCBcIjpcIiBhcmUgdHJlYXRlZCBhcyBmaXhlZC13aWR0aC4NClRoaXMgY3VycmVudGx5IG9ubHkg bWVhbnMgdGhleSBhcmUgbmV2ZXIgYXV0by13cmFwcGVkLg0KV2hlbiBuaWwsIHN1Y2ggbGluZXMg d2lsbCBiZSB0cmVhdGVkIGxpa2Ugb3JkaW5hcnkgbGluZXMuDQpTZWUgYWxzbyB0aGUgUVVPVEUg a2V5d29yZC4iDQogIDpncm91cCAnb3JnLWVkaXQtc3RydWN0dXJlDQogIDp0eXBlICdib29sZWFu KQ0KDQooZGVmY3VzdG9tIG9yZy1nb3RvLWF1dG8taXNlYXJjaCB0DQogICJOb24tbmlsIG1lYW5z IHR5cGluZyBjaGFyYWN0ZXJzIGluIGBvcmctZ290bycgc3RhcnRzIGluY3JlbWVudGFsIHNlYXJj aC4NCldoZW4gbmlsLCB5b3UgY2FuIHVzZSB0aGVzZSBrZXliaW5kaW5ncyB0byBuYXZpZ2F0ZSB0 aGUgYnVmZmVyOg0KDQogIHEgICAgUXVpdCB0aGUgb3JnLWdvdG8gaW50ZXJmYWNlDQogIG4gICAg R28gdG8gdGhlIG5leHQgdmlzaWJsZSBoZWFkaW5nDQogIHAgICAgR28gdG8gdGhlIHByZXZpb3Vz IHZpc2libGUgaGVhZGluZw0KICBmICAgIEdvIG9uZSBoZWFkaW5nIGZvcndhcmQgb24gc2FtZSBs ZXZlbA0KICBiICAgIEdvIG9uZSBoZWFkaW5nIGJhY2t3YXJkIG9uIHNhbWUgbGV2ZWwNCiAgdSAg ICBHbyBvbmUgaGVhZGluZyB1cCINCiAgOmdyb3VwICdvcmctZWRpdC1zdHJ1Y3R1cmUNCiAgOnR5 cGUgJ2Jvb2xlYW4pDQoNCihkZWZncm91cCBvcmctc3BhcnNlLXRyZWVzIG5pbA0KICAiT3B0aW9u cyBjb25jZXJuaW5nIHNwYXJzZSB0cmVlcyBpbiBPcmctbW9kZS4iDQogIDp0YWcgIk9yZyBTcGFy c2UgVHJlZXMiDQogIDpncm91cCAnb3JnLXN0cnVjdHVyZSkNCg0KKGRlZmN1c3RvbSBvcmctaGln aGxpZ2h0LXNwYXJzZS10cmVlLW1hdGNoZXMgdA0KICAiTm9uLW5pbCBtZWFucyBoaWdobGlnaHQg YWxsIG1hdGNoZXMgdGhhdCBkZWZpbmUgYSBzcGFyc2UgdHJlZS4NClRoZSBoaWdobGlnaHRzIHdp bGwgYXV0b21hdGljYWxseSBkaXNhcHBlYXIgdGhlIG5leHQgdGltZSB0aGUgYnVmZmVyIGlzDQpj aGFuZ2VkIGJ5IGFuIGVkaXQgY29tbWFuZC4iDQogIDpncm91cCAnb3JnLXNwYXJzZS10cmVlcw0K ICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmctcmVtb3ZlLWhpZ2hsaWdodHMtd2l0 aC1jaGFuZ2UgdA0KICAiTm9uLW5pbCBtZWFucyBhbnkgY2hhbmdlIHRvIHRoZSBidWZmZXIgd2ls bCByZW1vdmUgdGVtcG9yYXJ5IGhpZ2hsaWdodHMuDQpTdWNoIGhpZ2hsaWdodHMgYXJlIGNyZWF0 ZWQgYnkgYG9yZy1vY2N1cicgYW5kIGBvcmctY2xvY2stZGlzcGxheScuDQpXaGVuIG5pbCwgYEMt YyBDLWMgbmVlZHMgdG8gYmUgdXNlZCB0byBnZXQgcmlkIG9mIHRoZSBoaWdobGlnaHRzLg0KVGhl IGhpZ2hsaWdodHMgY3JlYXRlZCBieSBgb3JnLXByZXZpZXctbGF0ZXgtZnJhZ21lbnQnIGFsd2F5 cyBuZWVkDQpgQy1jIEMtYycgdG8gYmUgcmVtb3ZlZC4iDQogIDpncm91cCAnb3JnLXNwYXJzZS10 cmVlcw0KICA6Z3JvdXAgJ29yZy10aW1lDQogIDp0eXBlICdib29sZWFuKQ0KDQoNCihkZWZjdXN0 b20gb3JnLW9jY3VyLWhvb2sgJyhvcmctZmlyc3QtaGVhZGxpbmUtcmVjZW50ZXIpDQogICJIb29r IHRoYXQgaXMgcnVuIGFmdGVyIGBvcmctb2NjdXInIGhhcyBjb25zdHJ1Y3RlZCBhIHNwYXJzZSB0 cmVlLg0KVGhpcyBjYW4gYmUgdXNlZCB0byByZWNlbnRlciB0aGUgd2luZG93IHRvIHNob3cgYXMg bXVjaCBvZiB0aGUgc3RydWN0dXJlDQphcyBwb3NzaWJsZS4iDQogIDpncm91cCAnb3JnLXNwYXJz ZS10cmVlcw0KICA6dHlwZSAnaG9vaykNCg0KKGRlZmdyb3VwIG9yZy1pbWVudS1hbmQtc3BlZWRi YXIgbmlsDQogICJPcHRpb25zIGNvbmNlcm5pbmcgaW1lbnUgYW5kIHNwZWVkYmFyIGluIE9yZy1t b2RlLiINCiAgOnRhZyAiT3JnIEltZW51IGFuZCBTcGVlZGJhciINCiAgOmdyb3VwICdvcmctc3Ry dWN0dXJlKQ0KDQooZGVmY3VzdG9tIG9yZy1pbWVudS1kZXB0aCAyDQogICJUaGUgbWF4aW11bSBs ZXZlbCBmb3IgSW1lbnUgYWNjZXNzIHRvIE9yZy1tb2RlIGhlYWRsaW5lcy4NClRoaXMgYWxzbyBh cHBsaWVkIGZvciBzcGVlZGJhciBhY2Nlc3MuIg0KICA6Z3JvdXAgJ29yZy1pbWVudS1hbmQtc3Bl ZWRiYXINCiAgOnR5cGUgJ2ludGVnZXIpDQoNCihkZWZncm91cCBvcmctdGFibGUgbmlsDQogICJP cHRpb25zIGNvbmNlcm5pbmcgdGFibGVzIGluIE9yZy1tb2RlLiINCiAgOnRhZyAiT3JnIFRhYmxl Ig0KICA6Z3JvdXAgJ29yZykNCg0KKGRlZmN1c3RvbSBvcmctZW5hYmxlLXRhYmxlLWVkaXRvciAn b3B0aW1pemVkDQogICJOb24tbmlsIG1lYW5zIGxpbmVzIHN0YXJ0aW5nIHdpdGggXCJ8XCIgYXJl IGhhbmRsZWQgYnkgdGhlIHRhYmxlIGVkaXRvci4NCldoZW4gbmlsLCBzdWNoIGxpbmVzIHdpbGwg YmUgdHJlYXRlZCBsaWtlIG9yZGluYXJ5IGxpbmVzLg0KDQpXaGVuIGVxdWFsIHRvIHRoZSBzeW1i b2wgYG9wdGltaXplZCcsIHRoZSB0YWJsZSBlZGl0b3Igd2lsbCBiZSBvcHRpbWl6ZWQgdG8NCmRv IHRoZSBmb2xsb3dpbmc6DQotIEF1dG9tYXRpYyBvdmVyd3JpdGUgbW9kZSBpbiBmcm9udCBvZiB3 aGl0ZXNwYWNlIGluIHRhYmxlIGZpZWxkcy4NCiAgVGhpcyBtYWtlcyB0aGUgc3RydWN0dXJlIG9m IHRoZSB0YWJsZSBzdGF5IGluIHRhY3QgYXMgbG9uZyBhcyB0aGUgZWRpdGVkDQogIGZpZWxkIGRv ZXMgbm90IGV4Y2VlZCB0aGUgY29sdW1uIHdpZHRoLg0KLSBNaW5pbWl6ZSB0aGUgbnVtYmVyIG9m IHJlYWxpZ25zLiAgTm9ybWFsbHksIHRoZSB0YWJsZSBpcyBhbGlnbmVkIGVhY2ggdGltZQ0KICBU QUIgb3IgUkVUIGFyZSBwcmVzc2VkIHRvIG1vdmUgdG8gYW5vdGhlciBmaWVsZC4gIFdpdGggb3B0 aW1pemF0aW9uIHRoaXMNCiAgaGFwcGVucyBvbmx5IGlmIGNoYW5nZXMgdG8gYSBmaWVsZCBtaWdo dCBoYXZlIGNoYW5nZWQgdGhlIGNvbHVtbiB3aWR0aC4NCk9wdGltaXphdGlvbiByZXF1aXJlcyBy ZXBsYWNpbmcgdGhlIGZ1bmN0aW9ucyBgc2VsZi1pbnNlcnQtY29tbWFuZCcsDQpgZGVsZXRlLWNo YXInLCBhbmQgYGJhY2t3YXJkLWRlbGV0ZS1jaGFyJyBpbiBPcmctbW9kZSBidWZmZXJzLCB3aXRo IGENCnNsaWdodCAoaW4gZmFjdDogdW5ub3RpY2VhYmxlKSBzcGVlZCBpbXBhY3QgZm9yIG5vcm1h bCB0eXBpbmcuICBPcmctbW9kZSBpcw0KdmVyeSBnb29kIGF0IGd1ZXNzaW5nIHdoZW4gYSByZS1h bGlnbiB3aWxsIGJlIG5lY2Vzc2FyeSwgYnV0IHlvdSBjYW4gYWx3YXlzDQpmb3JjZSBvbmUgd2l0 aCBcXFtvcmctY3RybC1jLWN0cmwtY10uDQoNCklmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGUg b3B0aW1pemVkIHZlcnNpb24gaW4gT3JnLW1vZGUsIGJ1dCB0aGUNCnVuLW9wdGltaXplZCB2ZXJz aW9uIGluIE9yZ1RibC1tb2RlLCBzZWUgdGhlIHZhcmlhYmxlIGBvcmd0Ymwtb3B0aW1pemVkJy4N Cg0KVGhpcyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byB0dXJuIG9uIGFuZCBvZmYgdGhlIHRhYmxl IGVkaXRvciBkdXJpbmcgYSBzZXNzaW9uLA0KYnV0IGluIG9yZGVyIHRvIHRvZ2dsZSBvcHRpbWl6 YXRpb24sIGEgcmVzdGFydCBpcyByZXF1aXJlZC4NCg0KU2VlIGFsc28gdGhlIHZhcmlhYmxlIGBv cmctdGFibGUtYXV0by1ibGFuay1maWVsZCcuIg0KICA6Z3JvdXAgJ29yZy10YWJsZQ0KICA6dHlw ZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIm9mZiIgbmlsKQ0KCSAgKGNvbnN0IDp0YWcgIm9u IiB0KQ0KCSAgKGNvbnN0IDp0YWcgIm9uLCBvcHRpbWl6ZWQiIG9wdGltaXplZCkpKQ0KDQooZGVm Y3VzdG9tIG9yZy1zZWxmLWluc2VydC1jbHVzdGVyLWZvci11bmRvIChvciAoZmVhdHVyZXAgJ3hl bWFjcykNCgkJCQkJCSh2ZXJzaW9uPD0gZW1hY3MtdmVyc2lvbiAiMjQuMSIpKQ0KICAiTm9uLW5p bCBtZWFucyBjbHVzdGVyIHNlbGYtaW5zZXJ0IGNvbW1hbmRzIGZvciB1bmRvIHdoZW4gcG9zc2li bGUuDQpJZiB0aGlzIGlzIHNldCwgdGhlbiwgbGlrZSBpbiB0aGUgRW1hY3MgY29tbWFuZCBsb29w LCAyMCBjb25zZWN1dGl2ZQ0KY2hhcmFjdGVycyB3aWxsIGJlIHVuZG9uZSB0b2dldGhlci4NClRo aXMgaXMgY29uZmlndXJhYmxlLCBiZWNhdXNlIHRoZXJlIGlzIHNvbWUgaW1wYWN0IG9uIHR5cGlu ZyBwZXJmb3JtYW5jZS4iDQogIDpncm91cCAnb3JnLXRhYmxlDQogIDp0eXBlICdib29sZWFuKQ0K DQooZGVmY3VzdG9tIG9yZy10YWJsZS10YWItcmVjb2duaXplcy10YWJsZS5lbCB0DQogICJOb24t bmlsIG1lYW5zIFRBQiB3aWxsIGF1dG9tYXRpY2FsbHkgbm90aWNlIGEgdGFibGUuZWwgdGFibGUu DQpXaGVuIGl0IHNlZXMgc3VjaCBhIHRhYmxlLCBpdCBtb3ZlcyBwb2ludCBpbnRvIGl0IGFuZCAt IGlmIG5lY2Vzc2FyeSAtDQpjYWxscyBgdGFibGUtcmVjb2duaXplLXRhYmxlJy4iDQogIDpncm91 cCAnb3JnLXRhYmxlLWVkaXRpbmcNCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZncm91cCBvcmct bGluayBuaWwNCiAgIk9wdGlvbnMgY29uY2VybmluZyBsaW5rcyBpbiBPcmctbW9kZS4iDQogIDp0 YWcgIk9yZyBMaW5rIg0KICA6Z3JvdXAgJ29yZykNCg0KKGRlZnZhciBvcmctbGluay1hYmJyZXYt YWxpc3QtbG9jYWwgbmlsDQogICJCdWZmZXItbG9jYWwgdmVyc2lvbiBvZiBgb3JnLWxpbmstYWJi cmV2LWFsaXN0Jywgd2hpY2ggc2VlLg0KVGhlIHZhbHVlIG9mIHRoaXMgaXMgdGFrZW4gZnJvbSB0 aGUgIytMSU5LIGxpbmVzLiIpDQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy1saW5r LWFiYnJldi1hbGlzdC1sb2NhbCkNCg0KKGRlZmN1c3RvbSBvcmctbGluay1hYmJyZXYtYWxpc3Qg bmlsDQogICJBbGlzdCBvZiBsaW5rIGFiYnJldmlhdGlvbnMuDQpUaGUgY2FyIG9mIGVhY2ggZWxl bWVudCBpcyBhIHN0cmluZywgdG8gYmUgcmVwbGFjZWQgYXQgdGhlIHN0YXJ0IG9mIGEgbGluay4N ClRoZSBjZHJzIGFyZSByZXBsYWNlbWVudCB2YWx1ZXMsIGxpa2UgKFwibGlua2tleVwiIC4gUkVQ TEFDRSkuICBBYmJyZXZpYXRlZA0KbGlua3MgaW4gT3JnLW1vZGUgYnVmZmVycyBjYW4gaGF2ZSBh biBvcHRpb25hbCB0YWcgYWZ0ZXIgYSBkb3VibGUgY29sb24sIGUuZy4NCg0KICAgICBbW2xpbmtr ZXk6dGFnXVtkZXNjcmlwdGlvbl1dDQoNClRoZSAnbGlua2tleScgbXVzdCBiZSBhIHdvcmQgd29y ZCwgc3RhcnRpbmcgd2l0aCBhIGxldHRlciwgZm9sbG93ZWQNCmJ5IGxldHRlcnMsIG51bWJlcnMs ICctJyBvciAnXycuDQoNCklmIFJFUExBQ0UgaXMgYSBzdHJpbmcsIHRoZSB0YWcgd2lsbCBzaW1w bHkgYmUgYXBwZW5kZWQgdG8gY3JlYXRlIHRoZSBsaW5rLg0KSWYgdGhlIHN0cmluZyBjb250YWlu cyBcIiVzXCIsIHRoZSB0YWcgd2lsbCBiZSBpbnNlcnRlZCB0aGVyZS4gIElmIHRoZSBzdHJpbmcN CmNvbnRhaW5zIFwiJWhcIiwgaXQgd2lsbCBjYXVzZSBhIHVybC1lbmNvZGVkIHZlcnNpb24gb2Yg dGhlIHRhZyB0byBiZSBpbnNlcnRlZA0KYXQgdGhhdCBwb2ludCAoc2VlIHRoZSBmdW5jdGlvbiBg dXJsLWhleGlmeS1zdHJpbmcnKS4gIElmIHRoZSBzdHJpbmcgY29udGFpbnMNCnRoZSBzcGVjaWZp ZXIgXCIlKG15LWZ1bmN0aW9uKVwiLCB0aGVuIHRoZSBjdXN0b20gZnVuY3Rpb24gYG15LWZ1bmN0 aW9uJyB3aWxsDQpiZSBpbnZva2VkOiB0aGlzIGZ1bmN0aW9uIHRha2VzIHRoZSB0YWcgYXMgaXRz IG9ubHkgYXJndW1lbnQgYW5kIG11c3QgcmV0dXJuDQphIHN0cmluZy4NCg0KUkVQTEFDRSBtYXkg YWxzbyBiZSBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdGFnIGFzIHRo ZQ0Kb25seSBhcmd1bWVudCB0byBjcmVhdGUgdGhlIGxpbmssIHdoaWNoIHNob3VsZCBiZSByZXR1 cm5lZCBhcyBhIHN0cmluZy4NCg0KU2VlIHRoZSBtYW51YWwgZm9yIGV4YW1wbGVzLiINCiAgOmdy b3VwICdvcmctbGluaw0KICA6dHlwZSAnKHJlcGVhdA0KCSAgKGNvbnMNCgkgICAoc3RyaW5nIDp0 YWcgIlByb3RvY29sIikNCgkgICAoY2hvaWNlDQoJICAgIChzdHJpbmcgOnRhZyAiRm9ybWF0IikN CgkgICAgKGZ1bmN0aW9uKSkpKSkNCg0KKGRlZmN1c3RvbSBvcmctZGVzY3JpcHRpdmUtbGlua3Mg dA0KICAiTm9uLW5pbCBtZWFucyBPcmcgd2lsbCBkaXNwbGF5IGRlc2NyaXB0aXZlIGxpbmtzLg0K RS5nLiBbW2h0dHA6Ly9vcmdtb2RlLm9yZ11bT3JnIHdlYnNpdGVdXSB3aWxsIGJlIGRpc3BsYXll ZCBhcw0KXCJPcmcgV2Vic2l0ZVwiLCBoaWRpbmcgdGhlIGxpbmsgaXRzZWxmIGFuZCBqdXN0IGRp c3BsYXlpbmcgaXRzDQpkZXNjcmlwdGlvbi4gIFdoZW4gc2V0IHRvIGBuaWwnLCBPcmcgd2lsbCBk aXNwbGF5IHRoZSBmdWxsIGxpbmtzDQpsaXRlcmFsbHkuDQoNCllvdSBjYW4gaW50ZXJhY3RpdmVs eSBzZXQgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgY2FsbGluZw0KYG9yZy10b2dnbGUt bGluay1kaXNwbGF5JyBvciBmcm9tIHRoZSBtZW51IE9yZz5IeXBlcmxpbmtzIG1lbnUuIg0KICA6 Z3JvdXAgJ29yZy1saW5rDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1saW5r LWZpbGUtcGF0aC10eXBlICdhZGFwdGl2ZQ0KICAiSG93IHRoZSBwYXRoIG5hbWUgaW4gZmlsZSBs aW5rcyBzaG91bGQgYmUgc3RvcmVkLg0KVmFsaWQgdmFsdWVzIGFyZToNCg0KcmVsYXRpdmUgIFJl bGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgaS5lLiB0aGUgZGlyZWN0b3J5IG9mIHRo ZSBmaWxlDQogICAgICAgICAgaW50byB3aGljaCB0aGUgbGluayBpcyBiZWluZyBpbnNlcnRlZC4N CmFic29sdXRlICBBYnNvbHV0ZSBwYXRoLCBpZiBwb3NzaWJsZSB3aXRoIH4gZm9yIGhvbWUgZGly ZWN0b3J5Lg0Kbm9hYmJyZXYgIEFic29sdXRlIHBhdGgsIG5vIGFiYnJldmlhdGlvbiBvZiBob21l IGRpcmVjdG9yeS4NCmFkYXB0aXZlICBVc2UgcmVsYXRpdmUgcGF0aCBmb3IgZmlsZXMgaW4gdGhl IGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBzdWItDQogICAgICAgICAgZGlyZWN0b3JpZXMgb2YgaXQu ICBGb3Igb3RoZXIgZmlsZXMsIHVzZSBhbiBhYnNvbHV0ZSBwYXRoLiINCiAgOmdyb3VwICdvcmct bGluaw0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IHJlbGF0aXZlKQ0KCSAgKGNvbnN0IGFi c29sdXRlKQ0KCSAgKGNvbnN0IG5vYWJicmV2KQ0KCSAgKGNvbnN0IGFkYXB0aXZlKSkpDQoNCihk ZWZjdXN0b20gb3JnLWFjdGl2YXRlLWxpbmtzICcoYnJhY2tldCBhbmdsZSBwbGFpbiByYWRpbyB0 YWcgZGF0ZSBmb290bm90ZSkNCiAgIlR5cGVzIG9mIGxpbmtzIHRoYXQgc2hvdWxkIGJlIGFjdGl2 YXRlZCBpbiBPcmctbW9kZSBmaWxlcy4NClRoaXMgaXMgYSBsaXN0IG9mIHN5bWJvbHMsIGVhY2gg bGVhZGluZyB0byB0aGUgYWN0aXZhdGlvbiBvZiBhIGNlcnRhaW4gbGluaw0KdHlwZS4gIEluIHBy aW5jaXBsZSwgaXQgZG9lcyBub3QgaHVydCB0byB0dXJuIG9uIG1vc3QgbGluayB0eXBlcyAtIHRo ZXJlIG1heQ0KYmUgYSBzbWFsbCBnYWluIHdoZW4gdHVybmluZyBvZmYgdW51c2VkIGxpbmsgdHlw ZXMuICBUaGUgdHlwZXMgYXJlOg0KDQpicmFja2V0ICAgVGhlIHJlY29tbWVuZGVkIFtbbGlua11b ZGVzY3JpcHRpb25dXSBvciBbW2xpbmtdXSBsaW5rcyB3aXRoIGhpZGluZy4NCmFuZ2xlICAgICBM aW5rcyBpbiBhbmd1bGFyIGJyYWNrZXRzIHRoYXQgbWF5IGNvbnRhaW4gd2hpdGVzcGFjZSBsaWtl DQogICAgICAgICAgPGJiZGI6Q2Fyc3RlbiBEb21pbmlrPi4NCnBsYWluICAgICBQbGFpbiBsaW5r cyBpbiBub3JtYWwgdGV4dCwgbm8gd2hpdGVzcGFjZSwgbGlrZSBodHRwOi8vZ29vZ2xlLmNvbS4N CnJhZGlvICAgICBUZXh0IHRoYXQgaXMgbWF0Y2hlZCBieSBhIHJhZGlvIHRhcmdldCwgc2VlIG1h bnVhbCBmb3IgZGV0YWlscy4NCnRhZyAgICAgICBUYWcgc2V0dGluZ3MgaW4gYSBoZWFkbGluZSAo bGluayB0byB0YWcgc2VhcmNoKS4NCmRhdGUgICAgICBUaW1lIHN0YW1wcyAobGluayB0byBjYWxl bmRhcikuDQpmb290bm90ZSAgRm9vdG5vdGUgbGFiZWxzLg0KDQpDaGFuZ2luZyB0aGlzIHZhcmlh YmxlIHJlcXVpcmVzIGEgcmVzdGFydCBvZiBFbWFjcyB0byBiZWNvbWUgZWZmZWN0aXZlLiINCiAg Omdyb3VwICdvcmctbGluaw0KICA6dHlwZSAnKHNldCA6Z3JlZWR5IHQNCgkgICAgICAoY29uc3Qg OnRhZyAiRG91YmxlIGJyYWNrZXQgbGlua3MiIGJyYWNrZXQpDQoJICAgICAgKGNvbnN0IDp0YWcg IkFuZ3VsYXIgYnJhY2tldCBsaW5rcyIgYW5nbGUpDQoJICAgICAgKGNvbnN0IDp0YWcgIlBsYWlu IHRleHQgbGlua3MiIHBsYWluKQ0KCSAgICAgIChjb25zdCA6dGFnICJSYWRpbyB0YXJnZXQgbWF0 Y2hlcyIgcmFkaW8pDQoJICAgICAgKGNvbnN0IDp0YWcgIlRhZ3MiIHRhZykNCgkgICAgICAoY29u c3QgOnRhZyAiVGltZXN0YW1wcyIgZGF0ZSkNCgkgICAgICAoY29uc3QgOnRhZyAiRm9vdG5vdGVz IiBmb290bm90ZSkpKQ0KDQooZGVmY3VzdG9tIG9yZy1tYWtlLWxpbmstZGVzY3JpcHRpb24tZnVu Y3Rpb24gbmlsDQogICJGdW5jdGlvbiB0byB1c2UgZm9yIGdlbmVyYXRpbmcgbGluayBkZXNjcmlw dGlvbnMgZnJvbSBsaW5rcy4NCldoZW4gbmlsLCB0aGUgbGluayBsb2NhdGlvbiB3aWxsIGJlIHVz ZWQuICBUaGlzIGZ1bmN0aW9uIG11c3QgdGFrZQ0KdHdvIHBhcmFtZXRlcnM6IHRoZSBmaXJzdCBv bmUgaXMgdGhlIGxpbmssIHRoZSBzZWNvbmQgb25lIGlzIHRoZQ0KZGVzY3JpcHRpb24gZ2VuZXJh dGVkIGJ5IGBvcmctaW5zZXJ0LWxpbmsnLiAgVGhlIGZ1bmN0aW9uIHNob3VsZA0KcmV0dXJuIHRo ZSBkZXNjcmlwdGlvbiB0byB1c2UuIg0KICA6Z3JvdXAgJ29yZy1saW5rDQogIDp0eXBlICcoY2hv aWNlIChjb25zdCBuaWwpIChmdW5jdGlvbikpKQ0KDQooZGVmZ3JvdXAgb3JnLWxpbmstc3RvcmUg bmlsDQogICJPcHRpb25zIGNvbmNlcm5pbmcgc3RvcmluZyBsaW5rcyBpbiBPcmctbW9kZS4iDQog IDp0YWcgIk9yZyBTdG9yZSBMaW5rIg0KICA6Z3JvdXAgJ29yZy1saW5rKQ0KDQooZGVmY3VzdG9t IG9yZy11cmwtaGV4aWZ5LXAgdA0KICAiV2hlbiBub24tbmlsLCBoZXhpZnkgVVJMIHdoZW4gY3Jl YXRpbmcgYSBsaW5rLiINCiAgOnR5cGUgJ2Jvb2xlYW4NCiAgOnZlcnNpb24gIjI0LjMiDQogIDpn cm91cCAnb3JnLWxpbmstc3RvcmUpDQoNCihkZWZjdXN0b20gb3JnLWVtYWlsLWxpbmstZGVzY3Jp cHRpb24tZm9ybWF0ICJFbWFpbCAlYzogJS4zMHMiDQogICJGb3JtYXQgb2YgdGhlIGRlc2NyaXB0 aW9uIHBhcnQgb2YgYSBsaW5rIHRvIGFuIGVtYWlsIG9yIHVzZW5ldCBtZXNzYWdlLg0KVGhlIGZv bGxvd2luZyAlLWVzY2FwZXMgd2lsbCBiZSByZXBsYWNlZCBieSBjb3JyZXNwb25kaW5nIGluZm9y bWF0aW9uOg0KDQolRiAgIGZ1bGwgXCJGcm9tXCIgZmllbGQNCiVmICAgbmFtZSwgdGFrZW4gZnJv bSBcIkZyb21cIiBmaWVsZCwgYWRkcmVzcyBpZiBubyBuYW1lDQolVCAgIGZ1bGwgXCJUb1wiIGZp ZWxkDQoldCAgIGZpcnN0IG5hbWUgaW4gXCJUb1wiIGZpZWxkLCBhZGRyZXNzIGlmIG5vIG5hbWUN CiVjICAgY29ycmVzcG9uZGVudC4gIFVzdWFsbHkgXCJmcm9tIE5BTUVcIiwgYnV0IGlmIHlvdSBz ZW50IGl0IHlvdXJzZWxmLCBpdA0KICAgICB3aWxsIGJlIFwidG8gTkFNRVwiLiAgU2VlIGFsc28g dGhlIHZhcmlhYmxlIGBvcmctZnJvbS1pcy11c2VyLXJlZ2V4cCcuDQolcyAgIHN1YmplY3QNCiVk ICAgZGF0ZQ0KJW0gICBtZXNzYWdlLWlkLg0KDQpZb3UgbWF5IHVzZSBub3JtYWwgZmllbGQgd2lk dGggc3BlY2lmaWNhdGlvbiBiZXR3ZWVuIHRoZSAlIGFuZCB0aGUgbGV0dGVyLg0KVGhpcyBpcyBm b3IgZXhhbXBsZSB1c2VmdWwgdG8gbGltaXQgdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdC4NCg0K RXhhbXBsZXM6IFwiJWYgb246ICUuMzBzXCIsIFwiRW1haWwgZnJvbSAlZlwiLCBcIkVtYWlsICVj XCIiDQogIDpncm91cCAnb3JnLWxpbmstc3RvcmUNCiAgOnR5cGUgJ3N0cmluZykNCg0KKGRlZmN1 c3RvbSBvcmctZnJvbS1pcy11c2VyLXJlZ2V4cA0KICAobGV0IChyMSByMikNCiAgICAod2hlbiAo YW5kIHVzZXItbWFpbC1hZGRyZXNzIChub3QgKHN0cmluZz0gdXNlci1tYWlsLWFkZHJlc3MgIiIp KSkNCiAgICAgIChzZXRxIHIxIChjb25jYXQgIlxcPCIgKHJlZ2V4cC1xdW90ZSB1c2VyLW1haWwt YWRkcmVzcykgIlxcPiIpKSkNCiAgICAod2hlbiAoYW5kIHVzZXItZnVsbC1uYW1lIChub3QgKHN0 cmluZz0gdXNlci1mdWxsLW5hbWUgIiIpKSkNCiAgICAgIChzZXRxIHIyIChjb25jYXQgIlxcPCIg KHJlZ2V4cC1xdW90ZSB1c2VyLWZ1bGwtbmFtZSkgIlxcPiIpKSkNCiAgICAoaWYgKGFuZCByMSBy MikgKGNvbmNhdCByMSAiXFx8IiByMikgKG9yIHIxIHIyKSkpDQogICJSZWdleHAgbWF0Y2hlZCBh Z2FpbnN0IHRoZSBcIkZyb206XCIgaGVhZGVyIG9mIGFuIGVtYWlsIG9yIHVzZW5ldCBtZXNzYWdl Lg0KSXQgc2hvdWxkIG1hdGNoIGlmIHRoZSBtZXNzYWdlIGlzIGZyb20gdGhlIHVzZXIgaGltL2hl cnNlbGYuIg0KICA6Z3JvdXAgJ29yZy1saW5rLXN0b3JlDQogIDp0eXBlICdyZWdleHApDQoNCihk ZWZjdXN0b20gb3JnLWNvbnRleHQtaW4tZmlsZS1saW5rcyB0DQogICJOb24tbmlsIG1lYW5zIGZp bGUgbGlua3MgZnJvbSBgb3JnLXN0b3JlLWxpbmsnIGNvbnRhaW4gY29udGV4dC4NCkEgc2VhcmNo IHN0cmluZyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBmaWxlIG5hbWUgd2l0aCA6OiBhcyBzZXBhcmF0 b3IgYW5kDQp1c2VkIHRvIGZpbmQgdGhlIGNvbnRleHQgd2hlbiB0aGUgbGluayBpcyBhY3RpdmF0 ZWQgYnkgdGhlIGNvbW1hbmQNCmBvcmctb3Blbi1hdC1wb2ludCcuICBXaGVuIHRoaXMgb3B0aW9u IGlzIHQsIHRoZSBlbnRpcmUgYWN0aXZlIHJlZ2lvbg0Kd2lsbCBiZSBwbGFjZWQgaW4gdGhlIHNl YXJjaCBzdHJpbmcgb2YgdGhlIGZpbGUgbGluay4gIElmIHNldCB0byBhDQpwb3NpdGl2ZSBpbnRl Z2VyLCBvbmx5IHRoZSBmaXJzdCBuIGxpbmVzIG9mIGNvbnRleHQgd2lsbCBiZSBzdG9yZWQuDQoN ClVzaW5nIGEgcHJlZml4IGFyZyB0byB0aGUgY29tbWFuZCBcXFtvcmctc3RvcmUtbGlua10gKGBv cmctc3RvcmUtbGluaycpDQpuZWdhdGVzIHRoaXMgc2V0dGluZyBmb3IgdGhlIGR1cmF0aW9uIG9m IHRoZSBjb21tYW5kLiINCiAgOmdyb3VwICdvcmctbGluay1zdG9yZQ0KICA6dHlwZSAnKGNob2lj ZSBib29sZWFuIGludGVnZXIpKQ0KDQooZGVmY3VzdG9tIG9yZy1rZWVwLXN0b3JlZC1saW5rLWFm dGVyLWluc2VydGlvbiBuaWwNCiAgIk5vbi1uaWwgbWVhbnMga2VlcCBsaW5rIGluIGxpc3QgZm9y IGVudGlyZSBzZXNzaW9uLg0KDQpUaGUgY29tbWFuZCBgb3JnLXN0b3JlLWxpbmsnIGFkZHMgYSBs aW5rIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50DQpsb2NhdGlvbiB0byBhbiBpbnRlcm5hbCBsaXN0 LiAgVGhlc2UgbGlua3MgYWNjdW11bGF0ZSBkdXJpbmcgYSBzZXNzaW9uLg0KVGhlIGNvbW1hbmQg YG9yZy1pbnNlcnQtbGluaycgY2FuIGJlIHVzZWQgdG8gaW5zZXJ0IGxpbmtzIGludG8gYW55DQpP cmctbW9kZSBmaWxlIChvZmZlcmluZyBjb21wbGV0aW9uIGZvciBhbGwgc3RvcmVkIGxpbmtzKS4g IFdoZW4gdGhpcw0Kb3B0aW9uIGlzIG5pbCwgZXZlcnkgbGluayB3aGljaCBoYXMgYmVlbiBpbnNl cnRlZCBvbmNlIHVzaW5nIFxcW29yZy1pbnNlcnQtbGlua10NCndpbGwgYmUgcmVtb3ZlZCBmcm9t IHRoZSBsaXN0LCB0byBtYWtlIGNvbXBsZXRpbmcgdGhlIHVudXNlZCBsaW5rcw0KbW9yZSBlZmZp Y2llbnQuIg0KICA6Z3JvdXAgJ29yZy1saW5rLXN0b3JlDQogIDp0eXBlICdib29sZWFuKQ0KDQoo ZGVmZ3JvdXAgb3JnLWxpbmstZm9sbG93IG5pbA0KICAiT3B0aW9ucyBjb25jZXJuaW5nIGZvbGxv d2luZyBsaW5rcyBpbiBPcmctbW9kZS4iDQogIDp0YWcgIk9yZyBGb2xsb3cgTGluayINCiAgOmdy b3VwICdvcmctbGluaykNCg0KKGRlZmN1c3RvbSBvcmctbGluay10cmFuc2xhdGlvbi1mdW5jdGlv biBuaWwNCiAgIkZ1bmN0aW9uIHRvIHRyYW5zbGF0ZSBsaW5rcyB3aXRoIGRpZmZlcmVudCBzeW50 YXggdG8gT3JnIHN5bnRheC4NClRoaXMgY2FuIGJlIHVzZWQgdG8gdHJhbnNsYXRlIGxpbmtzIGNy ZWF0ZWQgZm9yIGV4YW1wbGUgYnkgdGhlIFBsYW5uZXINCm9yIGVtYWNzLXdpa2kgcGFja2FnZXMg dG8gT3JnIHN5bnRheC4NClRoZSBmdW5jdGlvbiBtdXN0IGFjY2VwdCB0d28gcGFyYW1ldGVycywg YSBUWVBFIGNvbnRhaW5pbmcgdGhlIGxpbmsNCnByb3RvY29sIG5hbWUgbGlrZSBcInJtYWlsXCIg b3IgXCJnbnVzXCIgYXMgYSBzdHJpbmcsIGFuZCB0aGUgbGlua2VkIHBhdGgsDQp3aGljaCBpcyBl dmVyeXRoaW5nIGFmdGVyIHRoZSBsaW5rIHByb3RvY29sLiAgSXQgc2hvdWxkIHJldHVybiBhIGNv bnMNCndpdGggcG9zc2libHkgbW9kaWZpZWQgdmFsdWVzIG9mIHR5cGUgYW5kIHBhdGguDQpPcmcg Y29udGFpbnMgYSBmdW5jdGlvbiBmb3IgdGhpcywgc28gaWYgeW91IHNldCB0aGlzIHZhcmlhYmxl IHRvDQpgb3JnLXRyYW5zbGF0ZS1saW5rLWZyb20tcGxhbm5lcicsIHlvdSBzaG91bGQgYmUgYWJs ZSBmb2xsb3cgbWFueQ0KbGlua3MgY3JlYXRlZCBieSBwbGFubmVyLiINCiAgOmdyb3VwICdvcmct bGluay1mb2xsb3cNCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IG5pbCkgKGZ1bmN0aW9uKSkpDQoN CihkZWZjdXN0b20gb3JnLWZvbGxvdy1saW5rLWhvb2sgbmlsDQogICJIb29rIHRoYXQgaXMgcnVu IGFmdGVyIGEgbGluayBoYXMgYmVlbiBmb2xsb3dlZC4iDQogIDpncm91cCAnb3JnLWxpbmstZm9s bG93DQogIDp0eXBlICdob29rKQ0KDQooZGVmY3VzdG9tIG9yZy10YWItZm9sbG93cy1saW5rIG5p bA0KICAiTm9uLW5pbCBtZWFucyBvbiBsaW5rcyBUQUIgd2lsbCBmb2xsb3cgdGhlIGxpbmsuDQpO ZWVkcyB0byBiZSBzZXQgYmVmb3JlIG9yZy5lbCBpcyBsb2FkZWQuDQpUaGlzIHJlYWxseSBzaG91 bGQgbm90IGJlIHVzZWQsIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGFuZCB0aGUNCmltcGxlbWVu dGF0aW9uIGlzIGJhZC4iDQogIDpncm91cCAnb3JnLWxpbmstZm9sbG93DQogIDp0eXBlICdib29s ZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1yZXR1cm4tZm9sbG93cy1saW5rIG5pbA0KICAiTm9uLW5p bCBtZWFucyBvbiBsaW5rcyBSRVQgd2lsbCBmb2xsb3cgdGhlIGxpbmsuDQpJbiB0YWJsZXMsIHRo ZSBzcGVjaWFsIGJlaGF2aW9yIG9mIFJFVCBoYXMgcHJlY2VkZW5jZS4iDQogIDpncm91cCAnb3Jn LWxpbmstZm9sbG93DQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1tb3VzZS0x LWZvbGxvd3MtbGluaw0KICAoaWYgKGJvdW5kcCAnbW91c2UtMS1jbGljay1mb2xsb3dzLWxpbmsp IG1vdXNlLTEtY2xpY2stZm9sbG93cy1saW5rIHQpDQogICJOb24tbmlsIG1lYW5zIG1vdXNlLTEg b24gYSBsaW5rIHdpbGwgZm9sbG93IHRoZSBsaW5rLg0KQSBsb25nZXIgbW91c2UgY2xpY2sgd2ls bCBzdGlsbCBzZXQgcG9pbnQuICBEb2VzIG5vdCB3b3JrIG9uIFhFbWFjcy4NCk5lZWRzIHRvIGJl IHNldCBiZWZvcmUgb3JnLmVsIGlzIGxvYWRlZC4iDQogIDpncm91cCAnb3JnLWxpbmstZm9sbG93 DQogIDp2ZXJzaW9uICIyNC40Ig0KICA6cGFja2FnZS12ZXJzaW9uICcoT3JnIC4gIjguMyIpDQog IDp0eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRhZyAiQSBkb3VibGUgY2xpY2sgZm9sbG93cyB0 aGUgbGluayIgZG91YmxlKQ0KCSAgKGNvbnN0IDp0YWcgIlVuY29uZGl0aW9uYWxseSBmb2xsb3cg dGhlIGxpbmsgd2l0aCBtb3VzZS0xIiB0KQ0KCSAgKGludGVnZXIgOnRhZyAibW91c2UtMSBjbGlj ayBkb2VzIG5vdCBmb2xsb3cgdGhlIGxpbmsgaWYgbG9uZ2VyIHRoYW4gTiBtcyIgNDUwKSkpDQoN CihkZWZjdXN0b20gb3JnLW1hcmstcmluZy1sZW5ndGggNA0KICAiTnVtYmVyIG9mIGRpZmZlcmVu dCBwb3NpdGlvbnMgdG8gYmUgcmVjb3JkZWQgaW4gdGhlIHJpbmcuDQpDaGFuZ2luZyB0aGlzIHJl cXVpcmVzIGEgcmVzdGFydCBvZiBFbWFjcyB0byB3b3JrIGNvcnJlY3RseS4iDQogIDpncm91cCAn b3JnLWxpbmstZm9sbG93DQogIDp0eXBlICdpbnRlZ2VyKQ0KDQooZGVmY3VzdG9tIG9yZy1saW5r LXNlYXJjaC1tdXN0LW1hdGNoLWV4YWN0LWhlYWRsaW5lICdxdWVyeS10by1jcmVhdGUNCiAgIk5v bi1uaWwgbWVhbnMgaW50ZXJuYWwgbGlua3MgaW4gT3JnIGZpbGVzIG11c3QgZXhhY3RseSBtYXRj aCBhIGhlYWRsaW5lLg0KV2hlbiBuaWwsIHRoZSBsaW5rIHNlYXJjaCB0cmllcyB0byBtYXRjaCBh IHBocmFzZSB3aXRoIGFsbCB3b3Jkcw0KaW4gdGhlIHNlYXJjaCB0ZXh0LiINCiAgOmdyb3VwICdv cmctbGluay1mb2xsb3cNCiAgOnZlcnNpb24gIjI0LjEiDQogIDp0eXBlICcoY2hvaWNlDQoJICAo Y29uc3QgOnRhZyAiVXNlIGZ1enp5IHRleHQgc2VhcmNoIiBuaWwpDQoJICAoY29uc3QgOnRhZyAi TWF0Y2ggb25seSBleGFjdCBoZWFkbGluZSIgdCkNCgkgIChjb25zdCA6dGFnICJNYXRjaCBleGFj dCBoZWFkbGluZSBvciBxdWVyeSB0byBjcmVhdGUgaXQiDQoJCSBxdWVyeS10by1jcmVhdGUpKSkN Cg0KKGRlZmN1c3RvbSBvcmctbGluay1mcmFtZS1zZXR1cA0KICAnKCh2bSAuIHZtLXZpc2l0LWZv bGRlci1vdGhlci1mcmFtZSkNCiAgICAodm0taW1hcCAuIHZtLXZpc2l0LWltYXAtZm9sZGVyLW90 aGVyLWZyYW1lKQ0KICAgIChnbnVzIC4gb3JnLWdudXMtbm8tbmV3LW5ld3MpDQogICAgKGZpbGUg LiBmaW5kLWZpbGUtb3RoZXItd2luZG93KQ0KICAgICh3bCAuIHdsLW90aGVyLWZyYW1lKSkNCiAg IlNldHVwIHRoZSBmcmFtZSBjb25maWd1cmF0aW9uIGZvciBmb2xsb3dpbmcgbGlua3MuDQpXaGVu IGZvbGxvd2luZyBhIGxpbmsgd2l0aCBFbWFjcywgaXQgbWF5IG9mdGVuIGJlIHVzZWZ1bCB0byBk aXNwbGF5DQp0aGlzIGxpbmsgaW4gYW5vdGhlciB3aW5kb3cgb3IgZnJhbWUuICBUaGlzIHZhcmlh YmxlIGNhbiBiZSB1c2VkIHRvDQpzZXQgdGhpcyB1cCBmb3IgdGhlIGRpZmZlcmVudCB0eXBlcyBv ZiBsaW5rcy4NCkZvciBWTSwgdXNlIGFueSBvZg0KICAgIGB2bS12aXNpdC1mb2xkZXInDQogICAg YHZtLXZpc2l0LWZvbGRlci1vdGhlci13aW5kb3cnDQogICAgYHZtLXZpc2l0LWZvbGRlci1vdGhl ci1mcmFtZScNCkZvciBHbnVzLCB1c2UgYW55IG9mDQogICAgYGdudXMnDQogICAgYGdudXMtb3Ro ZXItZnJhbWUnDQogICAgYG9yZy1nbnVzLW5vLW5ldy1uZXdzJw0KRm9yIEZJTEUsIHVzZSBhbnkg b2YNCiAgICBgZmluZC1maWxlJw0KICAgIGBmaW5kLWZpbGUtb3RoZXItd2luZG93Jw0KICAgIGBm aW5kLWZpbGUtb3RoZXItZnJhbWUnDQpGb3IgV2FuZGVybHVzdCB1c2UgYW55IG9mDQogICAgYHds Jw0KICAgIGB3bC1vdGhlci1mcmFtZScNCkZvciB0aGUgY2FsZW5kYXIsIHVzZSB0aGUgdmFyaWFi bGUgYGNhbGVuZGFyLXNldHVwJy4NCkZvciBCQkRCLCBpdCBpcyBjdXJyZW50bHkgb25seSBwb3Nz aWJsZSB0byBkaXNwbGF5IHRoZSBtYXRjaGVzIGluDQphbm90aGVyIHdpbmRvdy4iDQogIDpncm91 cCAnb3JnLWxpbmstZm9sbG93DQogIDp0eXBlICcobGlzdA0KCSAgKGNvbnMgKGNvbnN0IHZtKQ0K CQkoY2hvaWNlDQoJCSAoY29uc3Qgdm0tdmlzaXQtZm9sZGVyKQ0KCQkgKGNvbnN0IHZtLXZpc2l0 LWZvbGRlci1vdGhlci13aW5kb3cpDQoJCSAoY29uc3Qgdm0tdmlzaXQtZm9sZGVyLW90aGVyLWZy YW1lKSkpDQoJICAoY29ucyAoY29uc3Qgdm0taW1hcCkNCgkJKGNob2ljZQ0KCQkgKGNvbnN0IHZt LXZpc2l0LWltYXAtZm9sZGVyKQ0KCQkgKGNvbnN0IHZtLXZpc2l0LWltYXAtZm9sZGVyLW90aGVy LXdpbmRvdykNCgkJIChjb25zdCB2bS12aXNpdC1pbWFwLWZvbGRlci1vdGhlci1mcmFtZSkpKQ0K CSAgKGNvbnMgKGNvbnN0IGdudXMpDQoJCShjaG9pY2UNCgkJIChjb25zdCBnbnVzKQ0KCQkgKGNv bnN0IGdudXMtb3RoZXItZnJhbWUpDQoJCSAoY29uc3Qgb3JnLWdudXMtbm8tbmV3LW5ld3MpKSkN CgkgIChjb25zIChjb25zdCBmaWxlKQ0KCQkoY2hvaWNlDQoJCSAoY29uc3QgZmluZC1maWxlKQ0K CQkgKGNvbnN0IGZpbmQtZmlsZS1vdGhlci13aW5kb3cpDQoJCSAoY29uc3QgZmluZC1maWxlLW90 aGVyLWZyYW1lKSkpDQoJICAoY29ucyAoY29uc3Qgd2wpDQoJCShjaG9pY2UNCgkJIChjb25zdCB3 bCkNCgkJIChjb25zdCB3bC1vdGhlci1mcmFtZSkpKSkpDQoNCihkZWZjdXN0b20gb3JnLWRpc3Bs YXktaW50ZXJuYWwtbGluay13aXRoLWluZGlyZWN0LWJ1ZmZlciBuaWwNCiAgIk5vbi1uaWwgbWVh bnMgdXNlIGluZGlyZWN0IGJ1ZmZlciB0byBkaXNwbGF5IGluZmlsZSBsaW5rcy4NCkFjdGl2YXRp bmcgaW50ZXJuYWwgbGlua3MgKGZyb20gb25lIGxvY2F0aW9uIGluIGEgZmlsZSB0byBhbm90aGVy IGxvY2F0aW9uDQppbiB0aGUgc2FtZSBmaWxlKSBub3JtYWxseSBqdXN0IGp1bXBzIHRvIHRoZSBs b2NhdGlvbi4gIFdoZW4gdGhlIGxpbmsgaXMNCmFjdGl2YXRlZCB3aXRoIGEgXFxbdW5pdmVyc2Fs LWFyZ3VtZW50XSBwcmVmaXggKG9yIHdpdGggbW91c2UtMyksIHRoZSBsaW5rIFwNCmlzIGRpc3Bs YXllZCBpbg0KYW5vdGhlciB3aW5kb3cuICBXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIG90 aGVyIHdpbmRvdyBhY3R1YWxseSBkaXNwbGF5cw0KYW4gaW5kaXJlY3QgYnVmZmVyIGNsb25lIG9m IHRoZSBjdXJyZW50IGJ1ZmZlciwgdG8gYXZvaWQgYW55IHZpc2liaWxpdHkNCmNoYW5nZXMgdG8g dGhlIGN1cnJlbnQgYnVmZmVyLiINCiAgOmdyb3VwICdvcmctbGluay1mb2xsb3cNCiAgOnR5cGUg J2Jvb2xlYW4pDQoNCihkZWZjdXN0b20gb3JnLW9wZW4tbm9uLWV4aXN0aW5nLWZpbGVzIG5pbA0K ICAiTm9uLW5pbCBtZWFucyBgb3JnLW9wZW4tZmlsZScgd2lsbCBvcGVuIG5vbi1leGlzdGluZyBm aWxlcy4NCldoZW4gbmlsLCBhbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZC4NClRoaXMgdmFyaWFi bGUgYXBwbGllcyBvbmx5IHRvIGV4dGVybmFsIGFwcGxpY2F0aW9ucyBiZWNhdXNlIHRoZXkNCm1p Z2h0IGNob2tlIG9uIG5vbi1leGlzdGluZyBmaWxlcy4gIElmIHRoZSBsaW5rIGlzIHRvIGEgZmls ZSB0aGF0DQp3aWxsIGJlIG9wZW5lZCBpbiBFbWFjcywgdGhlIHZhcmlhYmxlIGlzIGlnbm9yZWQu Ig0KICA6Z3JvdXAgJ29yZy1saW5rLWZvbGxvdw0KICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1 c3RvbSBvcmctb3Blbi1kaXJlY3RvcnktbWVhbnMtaW5kZXgtZG90LW9yZyBuaWwNCiAgIk5vbi1u aWwgbWVhbnMgYSBsaW5rIHRvIGEgZGlyZWN0b3J5IHJlYWxseSBtZWFucyB0byBpbmRleC5vcmcu DQpXaGVuIG5pbCwgZm9sbG93aW5nIGEgZGlyZWN0b3J5IGxpbmsgd2lsbCBydW4gZGlyZWQgb3Ig b3BlbiBhIGZpbmRlci9leHBsb3Jlcg0Kd2luZG93IG9uIHRoYXQgZGlyZWN0b3J5LiINCiAgOmdy b3VwICdvcmctbGluay1mb2xsb3cNCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZjdXN0b20gb3Jn LWxpbmstbWFpbHRvLXByb2dyYW0gJyhicm93c2UtdXJsICJtYWlsdG86JWE/c3ViamVjdD0lcyIp DQogICJGdW5jdGlvbiBhbmQgYXJndW1lbnRzIHRvIGNhbGwgZm9yIGZvbGxvd2luZyBtYWlsdG8g bGlua3MuDQpUaGlzIGlzIGEgbGlzdCB3aXRoIHRoZSBmaXJzdCBlbGVtZW50IGJlaW5nIGEgTGlz cCBmdW5jdGlvbiwgYW5kIHRoZQ0KcmVtYWluaW5nIGVsZW1lbnRzIGJlaW5nIGFyZ3VtZW50cyB0 byB0aGUgZnVuY3Rpb24uICBJbiBzdHJpbmcgYXJndW1lbnRzLA0KJWEgd2lsbCBiZSByZXBsYWNl ZCBieSB0aGUgYWRkcmVzcywgYW5kICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHN1YmplY3QN CmlmIG9uZSB3YXMgZ2l2ZW4gbGlrZSBpbiA8bWFpbHRvOmFydGh1ckBnYWxheHkub3JnOjp0aGlz IHN1YmplY3Q+LiINCiAgOmdyb3VwICdvcmctbGluay1mb2xsb3cNCiAgOnR5cGUgJyhjaG9pY2UN CgkgIChjb25zdCA6dGFnICJicm93c2UtdXJsIiAoYnJvd3NlLXVybC1tYWlsICJtYWlsdG86JWE/ c3ViamVjdD0lcyIpKQ0KCSAgKGNvbnN0IDp0YWcgImNvbXBvc2UtbWFpbCIgKGNvbXBvc2UtbWFp bCAiJWEiICIlcyIpKQ0KCSAgKGNvbnN0IDp0YWcgIm1lc3NhZ2UtbWFpbCIgKG1lc3NhZ2UtbWFp bCAiJWEiICIlcyIpKQ0KCSAgKGNvbnMgOnRhZyAib3RoZXIiIChmdW5jdGlvbikgKHJlcGVhdCA6 dGFnICJhcmd1bWVudCIgc2V4cCkpKSkNCg0KKGRlZmN1c3RvbSBvcmctY29uZmlybS1zaGVsbC1s aW5rLWZ1bmN0aW9uICd5ZXMtb3Itbm8tcA0KICAiTm9uLW5pbCBtZWFucyBhc2sgZm9yIGNvbmZp cm1hdGlvbiBiZWZvcmUgZXhlY3V0aW5nIHNoZWxsIGxpbmtzLg0KU2hlbGwgbGlua3MgY2FuIGJl IGRhbmdlcm91czoganVzdCB0aGluayBhYm91dCBhIGxpbmsNCg0KICAgICBbW3NoZWxsOnJtIC1y ZiB+LypdW0dvb2dsZSBTZWFyY2hdXQ0KDQpUaGlzIGxpbmsgd291bGQgc2hvdyB1cCBpbiB5b3Vy IE9yZy1tb2RlIGRvY3VtZW50IGFzIFwiR29vZ2xlIFNlYXJjaFwiLA0KYnV0IHJlYWxseSBpdCB3 b3VsZCByZW1vdmUgeW91ciBlbnRpcmUgaG9tZSBkaXJlY3RvcnkuDQpUaGVyZWZvcmUgd2UgYWR2 aXNlIGFnYWluc3Qgc2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIG5pbC4NCkp1c3QgY2hhbmdlIGl0 IHRvIGB5LW9yLW4tcCcgaWYgeW91IHdhbnQgdG8gY29uZmlybSB3aXRoIGENCnNpbmdsZSBrZXlz dHJva2UgcmF0aGVyIHRoYW4gaGF2aW5nIHRvIHR5cGUgXCJ5ZXNcIi4iDQogIDpncm91cCAnb3Jn LWxpbmstZm9sbG93DQogIDp0eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRhZyAid2l0aCB5ZXMt b3Itbm8gKHNhZmVyKSIgeWVzLW9yLW5vLXApDQoJICAoY29uc3QgOnRhZyAid2l0aCB5LW9yLW4g KGZhc3RlcikiIHktb3Itbi1wKQ0KCSAgKGNvbnN0IDp0YWcgIm5vIGNvbmZpcm1hdGlvbiAoZGFu Z2Vyb3VzKSIgbmlsKSkpDQoocHV0ICdvcmctY29uZmlybS1zaGVsbC1saW5rLWZ1bmN0aW9uDQog ICAgICdzYWZlLWxvY2FsLXZhcmlhYmxlDQogICAgICMnKGxhbWJkYSAoeCkgKG1lbWJlciB4ICco eWVzLW9yLW5vLXAgeS1vci1uLXApKSkpDQoNCihkZWZjdXN0b20gb3JnLWNvbmZpcm0tc2hlbGwt bGluay1ub3QtcmVnZXhwICIiDQogICJBIHJlZ2V4cCB0byBza2lwIGNvbmZpcm1hdGlvbiBmb3Ig c2hlbGwgbGlua3MuIg0KICA6Z3JvdXAgJ29yZy1saW5rLWZvbGxvdw0KICA6dmVyc2lvbiAiMjQu MSINCiAgOnR5cGUgJ3JlZ2V4cCkNCg0KKGRlZmN1c3RvbSBvcmctY29uZmlybS1lbGlzcC1saW5r LWZ1bmN0aW9uICd5ZXMtb3Itbm8tcA0KICAiTm9uLW5pbCBtZWFucyBhc2sgZm9yIGNvbmZpcm1h dGlvbiBiZWZvcmUgZXhlY3V0aW5nIEVtYWNzIExpc3AgbGlua3MuDQpFbGlzcCBsaW5rcyBjYW4g YmUgZGFuZ2Vyb3VzOiBqdXN0IHRoaW5rIGFib3V0IGEgbGluaw0KDQogICAgIFtbZWxpc3A6KHNo ZWxsLWNvbW1hbmQgXCJybSAtcmYgfi8qXCIpXVtHb29nbGUgU2VhcmNoXV0NCg0KVGhpcyBsaW5r IHdvdWxkIHNob3cgdXAgaW4geW91ciBPcmctbW9kZSBkb2N1bWVudCBhcyBcIkdvb2dsZSBTZWFy Y2hcIiwNCmJ1dCByZWFsbHkgaXQgd291bGQgcmVtb3ZlIHlvdXIgZW50aXJlIGhvbWUgZGlyZWN0 b3J5Lg0KVGhlcmVmb3JlIHdlIGFkdmlzZSBhZ2FpbnN0IHNldHRpbmcgdGhpcyB2YXJpYWJsZSB0 byBuaWwuDQpKdXN0IGNoYW5nZSBpdCB0byBgeS1vci1uLXAnIGlmIHlvdSB3YW50IHRvIGNvbmZp cm0gd2l0aCBhDQpzaW5nbGUga2V5c3Ryb2tlIHJhdGhlciB0aGFuIGhhdmluZyB0byB0eXBlIFwi eWVzXCIuIg0KICA6Z3JvdXAgJ29yZy1saW5rLWZvbGxvdw0KICA6dHlwZSAnKGNob2ljZQ0KCSAg KGNvbnN0IDp0YWcgIndpdGggeWVzLW9yLW5vIChzYWZlcikiIHllcy1vci1uby1wKQ0KCSAgKGNv bnN0IDp0YWcgIndpdGggeS1vci1uIChmYXN0ZXIpIiB5LW9yLW4tcCkNCgkgIChjb25zdCA6dGFn ICJubyBjb25maXJtYXRpb24gKGRhbmdlcm91cykiIG5pbCkpKQ0KKHB1dCAnb3JnLWNvbmZpcm0t c2hlbGwtbGluay1mdW5jdGlvbg0KICAgICAnc2FmZS1sb2NhbC12YXJpYWJsZQ0KICAgICAjJyhs YW1iZGEgKHgpIChtZW1iZXIgeCAnKHllcy1vci1uby1wIHktb3Itbi1wKSkpKQ0KDQooZGVmY3Vz dG9tIG9yZy1jb25maXJtLWVsaXNwLWxpbmstbm90LXJlZ2V4cCAiIg0KICAiQSByZWdleHAgdG8g c2tpcCBjb25maXJtYXRpb24gZm9yIEVsaXNwIGxpbmtzLiINCiAgOmdyb3VwICdvcmctbGluay1m b2xsb3cNCiAgOnZlcnNpb24gIjI0LjEiDQogIDp0eXBlICdyZWdleHApDQoNCihkZWZjb25zdCBv cmctZmlsZS1hcHBzLWRlZmF1bHRzLWdudQ0KICAnKChyZW1vdGUgLiBlbWFjcykNCiAgICAoc3lz dGVtIC4gbWFpbGNhcCkNCiAgICAodCAuIG1haWxjYXApKQ0KICAiRGVmYXVsdCBmaWxlIGFwcGxp Y2F0aW9ucyBvbiBhIFVOSVggb3IgR05VL0xpbnV4IHN5c3RlbS4NClNlZSBgb3JnLWZpbGUtYXBw cycuIikNCg0KKGRlZmNvbnN0IG9yZy1maWxlLWFwcHMtZGVmYXVsdHMtbWFjb3N4DQogICcoKHJl bW90ZSAuIGVtYWNzKQ0KICAgICh0IC4gIm9wZW4gJXMiKQ0KICAgIChzeXN0ZW0gLiAib3BlbiAl cyIpDQogICAgKCJwcy5neiIgIC4gImd2ICVzIikNCiAgICAoImVwcy5neiIgLiAiZ3YgJXMiKQ0K ICAgICgiZHZpIiAgICAuICJ4ZHZpICVzIikNCiAgICAoImZpZyIgICAgLiAieGZpZyAlcyIpKQ0K ICAiRGVmYXVsdCBmaWxlIGFwcGxpY2F0aW9ucyBvbiBhIE1hY09TIFggc3lzdGVtLg0KVGhlIHN5 c3RlbSBcIm9wZW5cIiBpcyBrbm93biBhcyBhIGRlZmF1bHQsIGJ1dCB3ZSB1c2UgWDExIGFwcGxp Y2F0aW9ucw0KZm9yIHNvbWUgZmlsZXMgZm9yIHdoaWNoIHRoZSBPUyBkb2VzIG5vdCBoYXZlIGEg Z29vZCBkZWZhdWx0Lg0KU2VlIGBvcmctZmlsZS1hcHBzJy4iKQ0KDQooZGVmY29uc3Qgb3JnLWZp bGUtYXBwcy1kZWZhdWx0cy13aW5kb3dzbnQNCiAgKGxpc3QNCiAgICcocmVtb3RlIC4gZW1hY3Mp DQogICAoY29ucyB0DQoJIChsaXN0IChpZiAoZmVhdHVyZXAgJ3hlbWFjcykNCgkJICAgJ21zd2lu ZG93cy1zaGVsbC1leGVjdXRlDQoJCSAndzMyLXNoZWxsLWV4ZWN1dGUpDQoJICAgICAgICJvcGVu IiAnZmlsZSkpDQogICAoY29ucyAnc3lzdGVtDQoJIChsaXN0IChpZiAoZmVhdHVyZXAgJ3hlbWFj cykNCgkJICAgJ21zd2luZG93cy1zaGVsbC1leGVjdXRlDQoJCSAndzMyLXNoZWxsLWV4ZWN1dGUp DQoJICAgICAgICJvcGVuIiAnZmlsZSkpKQ0KICAiRGVmYXVsdCBmaWxlIGFwcGxpY2F0aW9ucyBv biBhIFdpbmRvd3MgTlQgc3lzdGVtLg0KVGhlIHN5c3RlbSBcIm9wZW5cIiBpcyB1c2VkIGZvciBt b3N0IGZpbGVzLg0KU2VlIGBvcmctZmlsZS1hcHBzJy4iKQ0KDQooZGVmY3VzdG9tIG9yZy1maWxl LWFwcHMNCiAgJygoYXV0by1tb2RlIC4gZW1hY3MpDQogICAgKCJcXC5tbVxcJyIgLiBkZWZhdWx0 KQ0KICAgICgiXFwueD9odG1sP1xcJyIgLiBkZWZhdWx0KQ0KICAgICgiXFwucGRmXFwnIiAuIGRl ZmF1bHQpKQ0KICAiRXh0ZXJuYWwgYXBwbGljYXRpb25zIGZvciBvcGVuaW5nIGBmaWxlOnBhdGgn IGl0ZW1zIGluIGEgZG9jdW1lbnQuDQpPcmctbW9kZSB1c2VzIHN5c3RlbSBkZWZhdWx0cyBmb3Ig ZGlmZmVyZW50IGZpbGUgdHlwZXMsIGJ1dA0KeW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSB0byBz ZXQgdGhlIGFwcGxpY2F0aW9uIGZvciBhIGdpdmVuIGZpbGUNCmV4dGVuc2lvbi4gIFRoZSBlbnRy aWVzIGluIHRoaXMgbGlzdCBhcmUgY29ucyBjZWxscyB3aGVyZSB0aGUgY2FyIGlkZW50aWZpZXMN CmZpbGVzIGFuZCB0aGUgY2RyIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmQuICBQb3NzaWJsZSB2 YWx1ZXMgZm9yIHRoZQ0KZmlsZSBpZGVudGlmaWVyIGFyZQ0KIFwic3RyaW5nXCIgICAgQSBzdHJp bmcgYXMgYSBmaWxlIGlkZW50aWZpZXIgY2FuIGJlIGludGVycHJldGVkIGluIGRpZmZlcmVudA0K ICAgICAgICAgICAgICAgd2F5cywgZGVwZW5kaW5nIG9uIGl0cyBjb250ZW50czoNCg0KICAgICAg ICAgICAgICAgLSBBbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvbmx5Og0KICAgICAgICAgICAgICAg ICBNYXRjaCBsaW5rcyB3aXRoIHRoaXMgZmlsZSBleHRlbnNpb24uDQogICAgICAgICAgICAgICAg IEV4YW1wbGU6IChcInBkZlwiIC4gXCJldmluY2UgJXNcIikNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgdG8gb3BlbiBQREZzIHdpdGggZXZpbmNlLg0KDQogICAgICAgICAgICAgICAtIFJlZ3Vs YXIgZXhwcmVzc2lvbjogTWF0Y2ggbGlua3Mgd2hlcmUgdGhlDQogICAgICAgICAgICAgICAgIGZp bGVuYW1lIG1hdGNoZXMgdGhlIHJlZ2V4cC4gIElmIHlvdSB3YW50IHRvDQogICAgICAgICAgICAg ICAgIHVzZSBncm91cHMgaGVyZSwgdXNlIHNoeSBncm91cHMuDQoNCiAgICAgICAgICAgICAgICAg RXhhbXBsZTogKFwiXFwueD9odG1sXFwnXCIgLiBcImZpcmVmb3ggJXNcIikNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgKFwiXFwoPzp4aHRtbFxcfGh0bWxcXClcIiAuIFwiZmlyZWZveCAlc1wi KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICB0byBvcGVuICouaHRtbCBhbmQgKi54aHRtbCB3 aXRoIGZpcmVmb3guDQoNCiAgICAgICAgICAgICAgIC0gUmVndWxhciBleHByZXNzaW9uIHdoaWNo IGNvbnRhaW5zIChub24tc2h5KSBncm91cHM6DQogICAgICAgICAgICAgICAgIE1hdGNoIGxpbmtz IHdoZXJlIHRoZSB3aG9sZSBsaW5rLCBpbmNsdWRpbmcgXCI6OlwiLCBhbmQNCiAgICAgICAgICAg ICAgICAgYW55dGhpbmcgYWZ0ZXIgdGhhdCwgbWF0Y2hlcyB0aGUgcmVnZXhwLg0KICAgICAgICAg ICAgICAgICBJbiBhIGN1c3RvbSBjb21tYW5kIHN0cmluZywgJTEsICUyLCBldGMuIGFyZSByZXBs YWNlZCB3aXRoDQogICAgICAgICAgICAgICAgIHRoZSBwYXJ0cyBvZiB0aGUgbGluayB0aGF0IHdl cmUgbWF0Y2hlZCBieSB0aGUgZ3JvdXBzLg0KICAgICAgICAgICAgICAgICBGb3IgYmFja3dhcmRz IGNvbXBhdGliaWxpdHksIGlmIGEgY29tbWFuZCBzdHJpbmcgaXMgZ2l2ZW4NCiAgICAgICAgICAg ICAgICAgdGhhdCBkb2VzIG5vdCB1c2UgYW55IG9mIHRoZSBncm91cCBtYXRjaGVzLCB0aGlzIGNh c2UgaXMNCiAgICAgICAgICAgICAgICAgaGFuZGxlZCBpZGVudGljYWxseSB0byB0aGUgc2Vjb25k IG9uZSAoaS5lLiBtYXRjaCBhZ2FpbnN0DQogICAgICAgICAgICAgICAgIGZpbGUgbmFtZSBvbmx5 KS4NCiAgICAgICAgICAgICAgICAgSW4gYSBjdXN0b20gbGlzcCBmb3JtLCB5b3UgY2FuIGFjY2Vz cyB0aGUgZ3JvdXAgbWF0Y2hlcyB3aXRoDQogICAgICAgICAgICAgICAgIChtYXRjaC1zdHJpbmcg biBsaW5rKS4NCg0KICAgICAgICAgICAgICAgICBFeGFtcGxlOiAoXCJcXC5wZGY6OlxcKFxcZCtc XClcXCdcIiAuIFwiZXZpbmNlIC1wICUxICVzXCIpDQogICAgICAgICAgICAgICAgICAgICB0byBv cGVuIFtbZmlsZTpkb2N1bWVudC5wZGY6OjVdXSB3aXRoIGV2aW5jZSBhdCBwYWdlIDUuDQoNCiBg ZGlyZWN0b3J5JyAgIE1hdGNoZXMgYSBkaXJlY3RvcnkNCiBgcmVtb3RlJyAgICAgIE1hdGNoZXMg YSByZW1vdGUgZmlsZSwgYWNjZXNzaWJsZSB0aHJvdWdoIHRyYW1wIG9yIGVmcy4NCiAgICAgICAg ICAgICAgIFJlbW90ZSBmaWxlcyBtb3N0IGxpa2VseSBzaG91bGQgYmUgdmlzaXRlZCB0aHJvdWdo IEVtYWNzDQogICAgICAgICAgICAgICBiZWNhdXNlIGV4dGVybmFsIGFwcGxpY2F0aW9ucyBjYW5u b3QgaGFuZGxlIHN1Y2ggcGF0aHMuDQpgYXV0by1tb2RlJyAgICBNYXRjaGVzIGZpbGVzIHRoYXQg YXJlIG1hdGNoZWQgYnkgYW55IGVudHJ5IGluIGBhdXRvLW1vZGUtYWxpc3QnLA0KICAgICAgICAg ICAgICAgc28gYWxsIGZpbGVzIEVtYWNzIGtub3dzIGhvdyB0byBoYW5kbGUuICBVc2luZyB0aGlz IHdpdGgNCiAgICAgICAgICAgICAgIGNvbW1hbmQgYGVtYWNzJyB3aWxsIG9wZW4gbW9zdCBmaWxl cyBpbiBFbWFjcy4gIEJld2FyZSB0aGF0IHRoaXMNCiAgICAgICAgICAgICAgIHdpbGwgYWxzbyBv cGVuIGh0bWwgZmlsZXMgaW5zaWRlIEVtYWNzLCB1bmxlc3MgeW91IGFkZA0KICAgICAgICAgICAg ICAgKFwiaHRtbFwiIC4gZGVmYXVsdCkgdG8gdGhlIGxpc3QgYXMgd2VsbC4NCiB0ICAgICAgICAg ICAgIERlZmF1bHQgZm9yIGZpbGVzIG5vdCBtYXRjaGVkIGJ5IGFueSBvZiB0aGUgb3RoZXIgb3B0 aW9ucy4NCiBgc3lzdGVtJyAgICAgIFRoZSBzeXN0ZW0gY29tbWFuZCB0byBvcGVuIGZpbGVzLCBs aWtlIGBvcGVuJyBvbiBXaW5kb3dzDQogICAgICAgICAgICAgICBhbmQgTWFjIE9TIFgsIGFuZCBt YWlsY2FwIHVuZGVyIEdOVS9MaW51eC4gIFRoaXMgaXMgdGhlIGNvbW1hbmQNCiAgICAgICAgICAg ICAgIHRoYXQgd2lsbCBiZSBzZWxlY3RlZCBpZiB5b3UgY2FsbCBgQy1jIEMtbycgd2l0aCBhIGRv dWJsZQ0KICAgICAgICAgICAgICAgXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBcXFt1bml2ZXJzYWwt YXJndW1lbnRdIHByZWZpeC4NCg0KUG9zc2libGUgdmFsdWVzIGZvciB0aGUgY29tbWFuZCBhcmU6 DQogYGVtYWNzJyAgICAgICBUaGUgZmlsZSB3aWxsIGJlIHZpc2l0ZWQgYnkgdGhlIGN1cnJlbnQg RW1hY3MgcHJvY2Vzcy4NCiBgZGVmYXVsdCcgICAgIFVzZSB0aGUgZGVmYXVsdCBhcHBsaWNhdGlv biBmb3IgdGhpcyBmaWxlIHR5cGUsIHdoaWNoIGlzIHRoZQ0KICAgICAgICAgICAgICAgYXNzb2Np YXRpb24gZm9yIHQgaW4gdGhlIGxpc3QsIG1vc3QgbGlrZWx5IGluIHRoZSBzeXN0ZW0tc3BlY2lm aWMNCiAgICAgICAgICAgICAgIHBhcnQuDQogICAgICAgICAgICAgICBUaGlzIGNhbiBiZSB1c2Vk IHRvIG92ZXJydWxlIGFuIHVud2FudGVkIHNldHRpbmcgaW4gdGhlDQogICAgICAgICAgICAgICBz eXN0ZW0tc3BlY2lmaWMgdmFyaWFibGUuDQogYHN5c3RlbScgICAgICBVc2UgdGhlIHN5c3RlbSBj b21tYW5kIGZvciBvcGVuaW5nIGZpbGVzLCBsaWtlIFwib3BlblwiLg0KICAgICAgICAgICAgICAg VGhpcyBjb21tYW5kIGlzIHNwZWNpZmllZCBieSB0aGUgZW50cnkgd2hvc2UgY2FyIGlzIGBzeXN0 ZW0nLg0KICAgICAgICAgICAgICAgTW9zdCBsaWtlbHksIHRoZSBzeXN0ZW0tc3BlY2lmaWMgdmVy c2lvbiBvZiB0aGlzIHZhcmlhYmxlDQogICAgICAgICAgICAgICBkb2VzIGRlZmluZSB0aGlzIGNv bW1hbmQsIGJ1dCB5b3UgY2FuIG92ZXJydWxlL3JlcGxhY2UgaXQNCiAgICAgICAgICAgICAgIGhl cmUuDQogc3RyaW5nICAgICAgICBBIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgYnkgYSBzaGVsbDsg JXMgd2lsbCBiZSByZXBsYWNlZA0KICAgICAgICAgICAgICAgYnkgdGhlIHBhdGggdG8gdGhlIGZp bGUuDQogc2V4cCAgICAgICAgICBBIExpc3AgZm9ybSB3aGljaCB3aWxsIGJlIGV2YWx1YXRlZC4g IFRoZSBmaWxlIHBhdGggd2lsbA0KICAgICAgICAgICAgICAgYmUgYXZhaWxhYmxlIGluIHRoZSBM aXNwIHZhcmlhYmxlIGBmaWxlJy4NCkZvciBtb3JlIGV4YW1wbGVzLCBzZWUgdGhlIHN5c3RlbSBz cGVjaWZpYyBjb25zdGFudHMNCmBvcmctZmlsZS1hcHBzLWRlZmF1bHRzLW1hY29zeCcNCmBvcmct ZmlsZS1hcHBzLWRlZmF1bHRzLXdpbmRvd3NudCcNCmBvcmctZmlsZS1hcHBzLWRlZmF1bHRzLWdu dScuIg0KICA6Z3JvdXAgJ29yZy1saW5rLWZvbGxvdw0KICA6dHlwZSAnKHJlcGVhdA0KCSAgKGNv bnMgKGNob2ljZSA6dmFsdWUgIiINCgkJCShzdHJpbmcgOnRhZyAiRXh0ZW5zaW9uIikNCgkJCShj b25zdCA6dGFnICJTeXN0ZW0gY29tbWFuZCB0byBvcGVuIGZpbGVzIiBzeXN0ZW0pDQoJCQkoY29u c3QgOnRhZyAiRGVmYXVsdCBmb3IgdW5yZWNvZ25pemVkIGZpbGVzIiB0KQ0KCQkJKGNvbnN0IDp0 YWcgIlJlbW90ZSBmaWxlIiByZW1vdGUpDQoJCQkoY29uc3QgOnRhZyAiTGlua3MgdG8gYSBkaXJl Y3RvcnkiIGRpcmVjdG9yeSkNCgkJCShjb25zdCA6dGFnICJBbnkgZmlsZXMgdGhhdCBoYXZlIEVt YWNzIG1vZGVzIg0KCQkJICAgICAgIGF1dG8tbW9kZSkpDQoJCShjaG9pY2UgOnZhbHVlICIiDQoJ CQkoY29uc3QgOnRhZyAiVmlzaXQgd2l0aCBFbWFjcyIgZW1hY3MpDQoJCQkoY29uc3QgOnRhZyAi VXNlIGRlZmF1bHQiIGRlZmF1bHQpDQoJCQkoY29uc3QgOnRhZyAiVXNlIHRoZSBzeXN0ZW0gY29t bWFuZCIgc3lzdGVtKQ0KCQkJKHN0cmluZyA6dGFnICJDb21tYW5kIikNCgkJCShzZXhwIDp0YWcg Ikxpc3AgZm9ybSIpKSkpKQ0KDQooZGVmY3VzdG9tIG9yZy1kb2ktc2VydmVyLXVybCAiaHR0cDov L2R4LmRvaS5vcmcvIg0KICAiVGhlIFVSTCBvZiB0aGUgRE9JIHNlcnZlci4iDQogIDp0eXBlICdz dHJpbmcNCiAgOnZlcnNpb24gIjI0LjMiDQogIDpncm91cCAnb3JnLWxpbmstZm9sbG93KQ0KDQoo ZGVmZ3JvdXAgb3JnLXJlZmlsZSBuaWwNCiAgIk9wdGlvbnMgY29uY2VybmluZyByZWZpbGluZyBl bnRyaWVzIGluIE9yZy1tb2RlLiINCiAgOnRhZyAiT3JnIFJlZmlsZSINCiAgOmdyb3VwICdvcmcp DQoNCihkZWZjdXN0b20gb3JnLWRpcmVjdG9yeSAifi9vcmciDQogICJEaXJlY3Rvcnkgd2l0aCBv cmcgZmlsZXMuDQpUaGlzIGlzIGp1c3QgYSBkZWZhdWx0IGxvY2F0aW9uIHRvIGxvb2sgZm9yIE9y ZyBmaWxlcy4gIFRoZXJlIGlzIG5vIG5lZWQNCmF0IGFsbCB0byBwdXQgeW91ciBmaWxlcyBpbnRv IHRoaXMgZGlyZWN0b3J5LiAgSXQgaXMgb25seSB1c2VkIGluIHRoZQ0KZm9sbG93aW5nIHNpdHVh dGlvbnM6DQoNCjEuIFdoZW4gYSBjYXB0dXJlIHRlbXBsYXRlIHNwZWNpZmllcyBhIHRhcmdldCBm aWxlIHRoYXQgaXMgbm90IGFuDQogICBhYnNvbHV0ZSBwYXRoLiAgVGhlIHBhdGggd2lsbCB0aGVu IGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvDQogICBgb3JnLWRpcmVjdG9yeScNCjIuIFdoZW4g YSBjYXB0dXJlIG5vdGUgaXMgZmlsZWQgYXdheSBpbiBhbiBpbnRlcmFjdGl2ZSB3YXkgKHdoZW4g ZXhpdGluZyB0aGUNCiAgIG5vdGUgYnVmZmVyIHdpdGggYEMtMSBDLWMgQy1jJy4gIFRoZSB1c2Vy IGlzIHByb21wdGVkIGZvciBhbiBvcmcgZmlsZSwNCiAgIHdpdGggYG9yZy1kaXJlY3RvcnknIGFz IHRoZSBkZWZhdWx0IHBhdGguIg0KICA6Z3JvdXAgJ29yZy1yZWZpbGUNCiAgOmdyb3VwICdvcmct Y2FwdHVyZQ0KICA6dHlwZSAnZGlyZWN0b3J5KQ0KDQooZGVmY3VzdG9tIG9yZy1kZWZhdWx0LW5v dGVzLWZpbGUgKGNvbnZlcnQtc3RhbmRhcmQtZmlsZW5hbWUgIn4vLm5vdGVzIikNCiAgIkRlZmF1 bHQgdGFyZ2V0IGZvciBzdG9yaW5nIG5vdGVzLg0KVXNlZCBhcyBhIGZhbGwgYmFjayBmaWxlIGZv ciBvcmctY2FwdHVyZS5lbCwgZm9yIHRlbXBsYXRlcyB0aGF0DQpkbyBub3Qgc3BlY2lmeSBhIHRh cmdldCBmaWxlLiINCiAgOmdyb3VwICdvcmctcmVmaWxlDQogIDpncm91cCAnb3JnLWNhcHR1cmUN CiAgOnR5cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6dGFnICJEZWZhdWx0IGZyb20gcmVtZW1iZXIt ZGF0YS1maWxlIiBuaWwpDQoJICBmaWxlKSkNCg0KKGRlZmN1c3RvbSBvcmctZ290by1pbnRlcmZh Y2UgJ291dGxpbmUNCiAgIlRoZSBkZWZhdWx0IGludGVyZmFjZSB0byBiZSB1c2VkIGZvciBgb3Jn LWdvdG8nLg0KQWxsb3dlZCB2YWx1ZXMgYXJlOg0Kb3V0bGluZSAgICAgICAgICAgICAgICAgIFRo ZSBpbnRlcmZhY2Ugc2hvd3MgYW4gb3V0bGluZSBvZiB0aGUgcmVsZXZhbnQgZmlsZQ0KICAgICAg ICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgY29ycmVjdCBoZWFkaW5nIGlzIGZvdW5kIGJ5IG1v dmluZyB0aHJvdWdoDQogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG91dGxpbmUgb3IgYnkg c2VhcmNoaW5nIHdpdGggaW5jcmVtZW50YWwgc2VhcmNoLg0Kb3V0bGluZS1wYXRoLWNvbXBsZXRp b24gIEhlYWRsaW5lcyBpbiB0aGUgY3VycmVudCBidWZmZXIgYXJlIG9mZmVyZWQgdmlhDQogICAg ICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbi4gIFRoaXMgaXMgdGhlIGludGVyZmFjZSBh bHNvIHVzZWQgYnkNCiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVmaWxlIGNvbW1hbmQu Ig0KICA6Z3JvdXAgJ29yZy1yZWZpbGUNCiAgOnR5cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6dGFn ICJPdXRsaW5lIiBvdXRsaW5lKQ0KCSAgKGNvbnN0IDp0YWcgIk91dGxpbmUtcGF0aC1jb21wbGV0 aW9uIiBvdXRsaW5lLXBhdGgtY29tcGxldGlvbikpKQ0KDQooZGVmY3VzdG9tIG9yZy1nb3RvLW1h eC1sZXZlbCA1DQogICJNYXhpbXVtIHRhcmdldCBsZXZlbCB3aGVuIHJ1bm5pbmcgYG9yZy1nb3Rv JyB3aXRoIHJlZmlsZSBpbnRlcmZhY2UuIg0KICA6Z3JvdXAgJ29yZy1yZWZpbGUNCiAgOnR5cGUg J2ludGVnZXIpDQoNCihkZWZjdXN0b20gb3JnLXJldmVyc2Utbm90ZS1vcmRlciBuaWwNCiAgIk5v bi1uaWwgbWVhbnMgc3RvcmUgbmV3IG5vdGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWxlIG9y IGVudHJ5Lg0KV2hlbiBuaWwsIG5ldyBub3RlcyB3aWxsIGJlIGZpbGVkIHRvIHRoZSBlbmQgb2Yg YSBmaWxlIG9yIGVudHJ5Lg0KVGhpcyBjYW4gYWxzbyBiZSBhIGxpc3Qgd2l0aCBjb25zIGNlbGxz IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdA0KYXJlIG1hdGNoZWQgYWdhaW5zdCBmaWxlIG5h bWVzLCBhbmQgdmFsdWVzLiINCiAgOmdyb3VwICdvcmctY2FwdHVyZQ0KICA6Z3JvdXAgJ29yZy1y ZWZpbGUNCiAgOnR5cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6dGFnICJSZXZlcnNlIGFsd2F5cyIg dCkNCgkgIChjb25zdCA6dGFnICJSZXZlcnNlIG5ldmVyIiBuaWwpDQoJICAocmVwZWF0IDp0YWcg IkJ5IGZpbGUgbmFtZSByZWdleHAiDQoJCSAgKGNvbnMgcmVnZXhwIGJvb2xlYW4pKSkpDQoNCihk ZWZjdXN0b20gb3JnLWxvZy1yZWZpbGUgbmlsDQogICJJbmZvcm1hdGlvbiB0byByZWNvcmQgd2hl biBhIHRhc2sgaXMgcmVmaWxlZC4NCg0KUG9zc2libGUgdmFsdWVzIGFyZToNCg0KbmlsICAgICBE b24ndCBhZGQgYW55dGhpbmcNCnRpbWUgICAgQWRkIGEgdGltZSBzdGFtcCB0byB0aGUgdGFzaw0K bm90ZSAgICBQcm9tcHQgZm9yIGEgbm90ZSBhbmQgYWRkIGl0IHdpdGggdGVtcGxhdGUgYG9yZy1s b2ctbm90ZS1oZWFkaW5ncycNCg0KVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggb24g YSBwZXItZmlsZS1iYXNpcyB3aXRoDQoNCiAgICMrU1RBUlRVUDogbm9sb2dyZWZpbGUNCiAgICMr U1RBUlRVUDogbG9ncmVmaWxlDQogICAjK1NUQVJUVVA6IGxvZ25vdGVyZWZpbGUNCg0KWW91IGNh biBoYXZlIGxvY2FsIGxvZ2dpbmcgc2V0dGluZ3MgZm9yIGEgc3VidHJlZSBieSBzZXR0aW5nIHRo ZSBMT0dHSU5HDQpwcm9wZXJ0eSB0byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBrZXl3b3Jkcy4NCg0K V2hlbiBidWxrLXJlZmlsaW5nIGZyb20gdGhlIGFnZW5kYSwgdGhlIHZhbHVlIGBub3RlJyBpcyBm b3JiaWRkZW4gYW5kDQp3aWxsIHRlbXBvcmFyaWx5IGJlIGNoYW5nZWQgdG8gYHRpbWUnLiINCiAg Omdyb3VwICdvcmctcmVmaWxlDQogIDpncm91cCAnb3JnLXByb2dyZXNzDQogIDp2ZXJzaW9uICIy NC4xIg0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIk5vIGxvZ2dpbmciIG5pbCkN CgkgIChjb25zdCA6dGFnICJSZWNvcmQgdGltZXN0YW1wIiB0aW1lKQ0KCSAgKGNvbnN0IDp0YWcg IlJlY29yZCB0aW1lc3RhbXAgd2l0aCBub3RlLiIgbm90ZSkpKQ0KDQooZGVmY3VzdG9tIG9yZy1y ZWZpbGUtdGFyZ2V0cyBuaWwNCiAgIlRhcmdldHMgZm9yIHJlZmlsaW5nIGVudHJpZXMgd2l0aCBc XFtvcmctcmVmaWxlXS4NClRoaXMgaXMgYSBsaXN0IG9mIGNvbnMgY2VsbHMuICBFYWNoIGNlbGwg Y29udGFpbnM6DQotIGEgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZmlsZXMgdG8gYmUgY29uc2lkZXJl ZCwgZWl0aGVyIGEgbGlzdCBvZiBmaWxlcywNCiAgb3IgYSBzeW1ib2wgd2hvc2UgZnVuY3Rpb24g b3IgdmFyaWFibGUgdmFsdWUgd2lsbCBiZSB1c2VkIHRvIHJldHJpZXZlDQogIGEgZmlsZSBuYW1l IG9yIGEgbGlzdCBvZiBmaWxlIG5hbWVzLiAgSWYgeW91IHVzZSBgb3JnLWFnZW5kYS1maWxlcycg Zm9yDQogIHRoYXQsIGFsbCBhZ2VuZGEgZmlsZXMgd2lsbCBiZSBzY2FubmVkIGZvciB0YXJnZXRz LiAgTmlsIG1lYW5zIGNvbnNpZGVyDQogIGhlYWRpbmdzIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4N Ci0gQSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0byBmaW5kIGNhbmRpZGF0ZSByZWZpbGUgdGFyZ2V0 cy4gIFRoaXMgbWF5IGJlDQogIGFueSBvZjoNCiAgLSBhIGNvbnMgY2VsbCAoOnRhZyAuIFwiVEFH XCIpIHRvIGlkZW50aWZ5IHJlZmlsZSB0YXJnZXRzIGJ5IGEgdGFnLg0KICAgIFRoaXMgdGFnIGhh cyB0byBiZSBwcmVzZW50IGluIGFsbCB0YXJnZXQgaGVhZGxpbmVzLCBpbmhlcml0YW5jZSB3aWxs DQogICAgbm90IGJlIGNvbnNpZGVyZWQuDQogIC0gYSBjb25zIGNlbGwgKDp0b2RvIC4gXCJLRVlX T1JEXCIpIHRvIGlkZW50aWZ5IHJlZmlsZSB0YXJnZXRzIGJ5DQogICAgdG9kbyBrZXl3b3JkLg0K ICAtIGEgY29ucyBjZWxsICg6cmVnZXhwIC4gXCJSRUdFWFBcIikgd2l0aCBhIHJlZ3VsYXIgZXhw cmVzc2lvbiBtYXRjaGluZw0KICAgIGhlYWRsaW5lcyB0aGF0IGFyZSByZWZpbGluZyB0YXJnZXRz Lg0KICAtIGEgY29ucyBjZWxsICg6bGV2ZWwgLiBOKS4gIEFueSBoZWFkbGluZSBvZiBsZXZlbCBO IGlzIGNvbnNpZGVyZWQgYSB0YXJnZXQuDQogICAgTm90ZSB0aGF0LCB3aGVuIGBvcmctb2RkLWxl dmVscy1vbmx5JyBpcyBzZXQsIGxldmVsIGNvcnJlc3BvbmRzIHRvDQogICAgb3JkZXIgaW4gaGll cmFyY2h5LCBub3QgdG8gdGhlIG51bWJlciBvZiBzdGFycy4NCiAgLSBhIGNvbnMgY2VsbCAoOm1h eGxldmVsIC4gTikuICBBbnkgaGVhZGxpbmUgd2l0aCBsZXZlbCA8PSBOIGlzIGEgdGFyZ2V0Lg0K ICAgIE5vdGUgdGhhdCwgd2hlbiBgb3JnLW9kZC1sZXZlbHMtb25seScgaXMgc2V0LCBsZXZlbCBj b3JyZXNwb25kcyB0bw0KICAgIG9yZGVyIGluIGhpZXJhcmNoeSwgbm90IHRvIHRoZSBudW1iZXIg b2Ygc3RhcnMuDQoNCkVhY2ggZWxlbWVudCBvZiB0aGlzIGxpc3QgZ2VuZXJhdGVzIGEgc2V0IG9m IHBvc3NpYmxlIHRhcmdldHMuDQpUaGUgdW5pb24gb2YgdGhlc2Ugc2V0cyBpcyBwcmVzZW50ZWQg KHdpdGggY29tcGxldGlvbikgdG8NCnRoZSB1c2VyIGJ5IGBvcmctcmVmaWxlJy4NCg0KWW91IGNh biBzZXQgdGhlIHZhcmlhYmxlIGBvcmctcmVmaWxlLXRhcmdldC12ZXJpZnktZnVuY3Rpb24nIHRv IGEgZnVuY3Rpb24NCnRvIHZlcmlmeSBlYWNoIGhlYWRsaW5lIGZvdW5kIGJ5IHRoZSBzaW1wbGUg Y3JpdGVyaWEgYWJvdmUuDQoNCldoZW4gdGhpcyB2YXJpYWJsZSBpcyBuaWwsIGFsbCB0b3AtbGV2 ZWwgaGVhZGxpbmVzIGluIHRoZSBjdXJyZW50IGJ1ZmZlcg0KYXJlIHVzZWQsIGVxdWl2YWxlbnQg dG8gdGhlIHZhbHVlIGAoKG5pbCAuICg6bGV2ZWwgLiAxKSknLiINCiAgOmdyb3VwICdvcmctcmVm aWxlDQogIDp0eXBlICcocmVwZWF0DQoJICAoY29ucw0KCSAgIChjaG9pY2UgOnZhbHVlIG9yZy1h Z2VuZGEtZmlsZXMNCgkJICAgKGNvbnN0IDp0YWcgIkFsbCBhZ2VuZGEgZmlsZXMiIG9yZy1hZ2Vu ZGEtZmlsZXMpDQoJCSAgIChjb25zdCA6dGFnICJDdXJyZW50IGJ1ZmZlciIgbmlsKQ0KCQkgICAo ZnVuY3Rpb24pICh2YXJpYWJsZSkgKGZpbGUpKQ0KCSAgIChjaG9pY2UgOnRhZyAiSWRlbnRpZnkg dGFyZ2V0IGhlYWRsaW5lIGJ5Ig0KCQkgICAoY29ucyA6dGFnICJTcGVjaWZpYyB0YWciIChjb25z dCA6dmFsdWUgOnRhZykgKHN0cmluZykpDQoJCSAgIChjb25zIDp0YWcgIlRPRE8ga2V5d29yZCIg KGNvbnN0IDp2YWx1ZSA6dG9kbykgKHN0cmluZykpDQoJCSAgIChjb25zIDp0YWcgIlJlZ3VsYXIg ZXhwcmVzc2lvbiIgKGNvbnN0IDp2YWx1ZSA6cmVnZXhwKSAocmVnZXhwKSkNCgkJICAgKGNvbnMg OnRhZyAiTGV2ZWwgbnVtYmVyIiAoY29uc3QgOnZhbHVlIDpsZXZlbCkgKGludGVnZXIpKQ0KCQkg ICAoY29ucyA6dGFnICJNYXggTGV2ZWwgbnVtYmVyIiAoY29uc3QgOnZhbHVlIDptYXhsZXZlbCkg KGludGVnZXIpKSkpKSkNCg0KKGRlZmN1c3RvbSBvcmctcmVmaWxlLXRhcmdldC12ZXJpZnktZnVu Y3Rpb24gbmlsDQogICJGdW5jdGlvbiB0byB2ZXJpZnkgaWYgdGhlIGhlYWRsaW5lIGF0IHBvaW50 IHNob3VsZCBiZSBhIHJlZmlsZSB0YXJnZXQuDQpUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQg d2l0aG91dCBhcmd1bWVudHMsIHdpdGggcG9pbnQgYXQgdGhlDQpiZWdpbm5pbmcgb2YgdGhlIGhl YWRsaW5lLiAgSXQgc2hvdWxkIHJldHVybiB0IGFuZCBsZWF2ZSBwb2ludA0Kd2hlcmUgaXQgaXMg aWYgdGhlIGhlYWRsaW5lIGlzIGEgdmFsaWQgdGFyZ2V0IGZvciByZWZpbGluZy4NCg0KSWYgdGhl IHRhcmdldCBzaG91bGQgbm90IGJlIHNlbGVjdGVkLCB0aGUgZnVuY3Rpb24gbXVzdCByZXR1cm4g bmlsLg0KSW4gYWRkaXRpb24gdG8gdGhpcywgaXQgbWF5IG1vdmUgcG9pbnQgdG8gYSBwbGFjZSBm cm9tIHdoZXJlIHRoZSBzZWFyY2gNCnNob3VsZCBiZSBjb250aW51ZWQuICBGb3IgZXhhbXBsZSwg dGhlIGZ1bmN0aW9uIG1heSBkZWNpZGUgdGhhdCB0aGUgZW50aXJlDQpzdWJ0cmVlIG9mIHRoZSBj dXJyZW50IGVudHJ5IHNob3VsZCBiZSBleGNsdWRlZCBhbmQgbW92ZSBwb2ludCB0byB0aGUgZW5k DQpvZiB0aGUgc3VidHJlZS4iDQogIDpncm91cCAnb3JnLXJlZmlsZQ0KICA6dHlwZSAnKGNob2lj ZQ0KCSAgKGNvbnN0IG5pbCkNCgkgIChmdW5jdGlvbikpKQ0KDQooZGVmY3VzdG9tIG9yZy1yZWZp bGUtdXNlLWNhY2hlIG5pbA0KICAiTm9uLW5pbCBtZWFucyBjYWNoZSByZWZpbGUgdGFyZ2V0cyB0 byBzcGVlZCB1cCB0aGUgcHJvY2Vzcy4NClRoZSBjYWNoZSBmb3IgYSBwYXJ0aWN1bGFyIGZpbGUg d2lsbCBiZSB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbg0KdGhlIGJ1ZmZlciBoYXMgYmVlbiBr aWxsZWQsIG9yIHdoZW4gYW55IG9mIHRoZSBtYXJrZXIgdXNlZCBmb3IgZmxhZ2dpbmcNCnJlZmls ZSB0YXJnZXRzIG5vIGxvbmdlciBwb2ludHMgYXQgYSBsaXZlIGJ1ZmZlci4NCklmIHlvdSBoYXZl IGFkZGVkIG5ldyBlbnRyaWVzIHRvIGEgYnVmZmVyIHRoYXQgbWlnaHQgdGhlbXNlbHZlcyBiZSB0 YXJnZXRzLA0KeW91IG5lZWQgdG8gY2xlYXIgdGhlIGNhY2hlIG1hbnVhbGx5IGJ5IHByZXNzaW5n IGBDLTAgQy1jIEMtdycgb3IsIGlmIHlvdQ0KZmluZCB0aGF0IGVhc2llciwgYEMtdSBDLXUgQy11 IEMtYyBDLXcnLiINCiAgOmdyb3VwICdvcmctcmVmaWxlDQogIDp2ZXJzaW9uICIyNC4xIg0KICA6 dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmctcmVmaWxlLXVzZS1vdXRsaW5lLXBhdGgg bmlsDQogICJOb24tbmlsIG1lYW5zIHByb3ZpZGUgcmVmaWxlIHRhcmdldHMgYXMgcGF0aHMuDQpT byBhIGxldmVsIDMgaGVhZGxpbmUgd2lsbCBiZSBhdmFpbGFibGUgYXMgbGV2ZWwxL2xldmVsMi9s ZXZlbDMuDQoNCldoZW4gdGhlIHZhbHVlIGlzIGBmaWxlJywgYWxzbyBpbmNsdWRlIHRoZSBmaWxl IG5hbWUgKHdpdGhvdXQgZGlyZWN0b3J5KQ0KaW50byB0aGUgcGF0aC4gIEluIHRoaXMgY2FzZSwg eW91IGNhbiBhbHNvIHN0b3AgdGhlIGNvbXBsZXRpb24gYWZ0ZXINCnRoZSBmaWxlIG5hbWUsIHRv IGdldCBlbnRyaWVzIGluc2VydGVkIGFzIHRvcCBsZXZlbCBpbiB0aGUgZmlsZS4NCg0KV2hlbiBg ZnVsbC1maWxlLXBhdGgnLCBpbmNsdWRlIHRoZSBmdWxsIGZpbGUgcGF0aC4iDQogIDpncm91cCAn b3JnLXJlZmlsZQ0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIk5vdCIgbmlsKQ0K CSAgKGNvbnN0IDp0YWcgIlllcyIgdCkNCgkgIChjb25zdCA6dGFnICJTdGFydCB3aXRoIGZpbGUg bmFtZSIgZmlsZSkNCgkgIChjb25zdCA6dGFnICJTdGFydCB3aXRoIGZ1bGwgZmlsZSBwYXRoIiBm dWxsLWZpbGUtcGF0aCkpKQ0KDQooZGVmY3VzdG9tIG9yZy1vdXRsaW5lLXBhdGgtY29tcGxldGUt aW4tc3RlcHMgdA0KICAiTm9uLW5pbCBtZWFucyBjb21wbGV0ZSB0aGUgb3V0bGluZSBwYXRoIGlu IGhpZXJhcmNoaWNhbCBzdGVwcy4NCldoZW4gT3JnLW1vZGUgdXNlcyB0aGUgcmVmaWxlIGludGVy ZmFjZSB0byBzZWxlY3QgYW4gb3V0bGluZSBwYXRoDQpcKHNlZSB2YXJpYWJsZSBgb3JnLXJlZmls ZS11c2Utb3V0bGluZS1wYXRoJyksIHRoZSBjb21wbGV0aW9uIG9mDQp0aGUgcGF0aCBjYW4gYmUg ZG9uZSBpcyBhIHNpbmdsZSBnbywgb3IgaWYgY2FuIGJlIGRvbmUgaW4gc3RlcHMgZG93bg0KdGhl IGhlYWRsaW5lIGhpZXJhcmNoeS4gIEdvaW5nIGluIHN0ZXBzIGlzIHByb2JhYmx5IHRoZSBiZXN0 IGlmIHlvdQ0KZG8gbm90IHVzZSBhIHNwZWNpYWwgY29tcGxldGlvbiBwYWNrYWdlIGxpa2UgYGlk bycgb3IgYGljaWNsZXMnLg0KSG93ZXZlciwgd2hlbiB1c2luZyB0aGVzZSBwYWNrYWdlcywgZ29p bmcgaW4gb25lIHN0ZXAgY2FuIGJlIHZlcnkNCmZhc3QsIHdoaWxlIHN0aWxsIHNob3dpbmcgdGhl IHdob2xlIHBhdGggdG8gdGhlIGVudHJ5LiINCiAgOmdyb3VwICdvcmctcmVmaWxlDQogIDp0eXBl ICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1yZWZpbGUtYWxsb3ctY3JlYXRpbmctcGFyZW50 LW5vZGVzIG5pbA0KICAiTm9uLW5pbCBtZWFucyBhbGxvdyB0byBjcmVhdGUgbmV3IG5vZGVzIGFz IHJlZmlsZSB0YXJnZXRzLg0KTmV3IG5vZGVzIGFyZSB0aGVuIGNyZWF0ZWQgYnkgYWRkaW5nIFwi L25ldyBub2RlIG5hbWVcIiB0byB0aGUgY29tcGxldGlvbg0Kb2YgYW4gZXhpc3Rpbmcgbm9kZS4g IFdoZW4gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgYGNvbmZpcm0nLA0KbmV3IG5vZGUg Y3JlYXRpb24gbXVzdCBiZSBjb25maXJtZWQgYnkgdGhlIHVzZXIgKHJlY29tbWVuZGVkKS4NCldo ZW4gbmlsLCB0aGUgY29tcGxldGlvbiBtdXN0IG1hdGNoIGFuIGV4aXN0aW5nIGVudHJ5Lg0KDQpO b3RlIHRoYXQsIGlmIHRoZSBuZXcgaGVhZGluZyBpcyBub3Qgc2VlbiBieSB0aGUgY3JpdGVyaWEN Cmxpc3RlZCBpbiBgb3JnLXJlZmlsZS10YXJnZXRzJywgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRo ZSBzYW1lDQpoZWFkaW5nIHdvdWxkIGJlIGNyZWF0ZWQgYnkgdHJ5aW5nIGFnYWluIHRvIGZpbGUg dW5kZXIgdGhlIG5ldw0KaGVhZGluZy4iDQogIDpncm91cCAnb3JnLXJlZmlsZQ0KICA6dHlwZSAn KGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIk5ldmVyIiBuaWwpDQoJICAoY29uc3QgOnRhZyAiQWx3 YXlzIiB0KQ0KCSAgKGNvbnN0IDp0YWcgIlByb21wdCBmb3IgY29uZmlybWF0aW9uIiBjb25maXJt KSkpDQoNCihkZWZjdXN0b20gb3JnLXJlZmlsZS1hY3RpdmUtcmVnaW9uLXdpdGhpbi1zdWJ0cmVl IG5pbA0KICAiTm9uLW5pbCBtZWFucyBhbHNvIHJlZmlsZSBhY3RpdmUgcmVnaW9uIHdpdGhpbiBh IHN1YnRyZWUuDQoNCkJ5IGRlZmF1bHQgYG9yZy1yZWZpbGUnIGRvZXNuJ3QgYWxsb3cgcmVmaWxp bmcgcmVnaW9ucyBpZiB0aGV5DQpkb24ndCBjb250YWluIGEgc2V0IG9mIHN1YnRyZWVzLCBidXQg aXQgbWlnaHQgYmUgY29udmVuaWVudCB0bw0KZG8gc28gc29tZXRpbWVzOiBpbiB0aGF0IGNhc2Us IHRoZSBmaXJzdCBsaW5lIG9mIHRoZSByZWdpb24gaXMNCmNvbnZlcnRlZCB0byBhIGhlYWRsaW5l IGJlZm9yZSByZWZpbGluZy4iDQogIDpncm91cCAnb3JnLXJlZmlsZQ0KICA6dmVyc2lvbiAiMjQu MSINCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZncm91cCBvcmctdG9kbyBuaWwNCiAgIk9wdGlv bnMgY29uY2VybmluZyBUT0RPIGl0ZW1zIGluIE9yZy1tb2RlLiINCiAgOnRhZyAiT3JnIFRPRE8i DQogIDpncm91cCAnb3JnKQ0KDQooZGVmZ3JvdXAgb3JnLXByb2dyZXNzIG5pbA0KICAiT3B0aW9u cyBjb25jZXJuaW5nIFByb2dyZXNzIGxvZ2dpbmcgaW4gT3JnLW1vZGUuIg0KICA6dGFnICJPcmcg UHJvZ3Jlc3MiDQogIDpncm91cCAnb3JnLXRpbWUpDQoNCihkZWZ2YXIgb3JnLXRvZG8taW50ZXJw cmV0YXRpb24td2lkZ2V0cw0KICAnKCg6dGFnICJTZXF1ZW5jZSAoY3ljbGluZyBoaXRzIGV2ZXJ5 IHN0YXRlKSIgc2VxdWVuY2UpDQogICAgKDp0YWcgIlR5cGUgICAgIChjeWNsaW5nIGRpcmVjdGx5 IHRvIERPTkUpIiB0eXBlKSkNCiAgIlRoZSBhdmFpbGFibGUgaW50ZXJwcmV0YXRpb24gc3ltYm9s cyBmb3IgY3VzdG9taXppbmcgYG9yZy10b2RvLWtleXdvcmRzJy4NCkludGVyZXN0ZWQgbGlicmFy aWVzIHNob3VsZCBhZGQgdG8gdGhpcyBsaXN0LiIpDQoNCihkZWZjdXN0b20gb3JnLXRvZG8ta2V5 d29yZHMgJygoc2VxdWVuY2UgIlRPRE8iICJET05FIikpDQogICJMaXN0IG9mIFRPRE8gZW50cnkg a2V5d29yZCBzZXF1ZW5jZXMgYW5kIHRoZWlyIGludGVycHJldGF0aW9uLg0KXFw8b3JnLW1vZGUt bWFwPlRoaXMgaXMgYSBsaXN0IG9mIHNlcXVlbmNlcy4NCg0KRWFjaCBzZXF1ZW5jZSBzdGFydHMg d2l0aCBhIHN5bWJvbCwgZWl0aGVyIGBzZXF1ZW5jZScgb3IgYHR5cGUnLA0KaW5kaWNhdGluZyBp ZiB0aGUga2V5d29yZHMgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGEgc2VxdWVuY2Ugb2YNCmFj dGlvbiBzdGVwcywgb3IgYXMgZGlmZmVyZW50IHR5cGVzIG9mIFRPRE8gaXRlbXMuICBUaGUgZmly c3QNCmtleXdvcmRzIGFyZSBzdGF0ZXMgcmVxdWlyaW5nIGFjdGlvbiAtIHRoZXNlIHN0YXRlcyB3 aWxsIHNlbGVjdCBhIGhlYWRsaW5lDQpmb3IgaW5jbHVzaW9uIGludG8gdGhlIGdsb2JhbCBUT0RP IGxpc3QgT3JnLW1vZGUgcHJvZHVjZXMuICBJZiBvbmUgb2YNCnRoZSBcImtleXdvcmRzXCIgaXMg dGhlIHZlcnRpY2FsIGJhciwgXCJ8XCIsIHRoZSByZW1haW5pbmcga2V5d29yZHMNCnNpZ25pZnkg dGhhdCBubyBmdXJ0aGVyIGFjdGlvbiBpcyBuZWNlc3NhcnkuICBJZiBcInxcIiBpcyBub3QgZm91 bmQsDQp0aGUgbGFzdCBrZXl3b3JkIGlzIHRyZWF0ZWQgYXMgdGhlIG9ubHkgRE9ORSBzdGF0ZSBv ZiB0aGUgc2VxdWVuY2UuDQoNClRoZSBjb21tYW5kIFxcW29yZy10b2RvXSBjeWNsZXMgYW4gZW50 cnkgdGhyb3VnaCB0aGVzZSBzdGF0ZXMsIGFuZCBvbmUNCmFkZGl0aW9uYWwgc3RhdGUgd2hlcmUg bm8ga2V5d29yZCBpcyBwcmVzZW50LiAgRm9yIGRldGFpbHMgYWJvdXQgdGhpcw0KY3ljbGluZywg c2VlIHRoZSBtYW51YWwuDQoNClRPRE8ga2V5d29yZHMgYW5kIGludGVycHJldGF0aW9uIGNhbiBh bHNvIGJlIHNldCBvbiBhIHBlci1maWxlIGJhc2lzIHdpdGgNCnRoZSBzcGVjaWFsICMrU0VRX1RP RE8gYW5kICMrVFlQX1RPRE8gbGluZXMuDQoNCkVhY2gga2V5d29yZCBjYW4gb3B0aW9uYWxseSBz cGVjaWZ5IGEgY2hhcmFjdGVyIGZvciBmYXN0IHN0YXRlIHNlbGVjdGlvbg0KXChpbiBjb21iaW5h dGlvbiB3aXRoIHRoZSB2YXJpYWJsZSBgb3JnLXVzZS1mYXN0LXRvZG8tc2VsZWN0aW9uJykNCmFu ZCBzcGVjaWZpZXJzIGZvciBzdGF0ZSBjaGFuZ2UgbG9nZ2luZywgdXNpbmcgdGhlIHNhbWUgc3lu dGF4IHRoYXQNCmlzIHVzZWQgaW4gdGhlIFwiIytUT0RPOlwiIGxpbmVzLiAgRm9yIGV4YW1wbGUs IFwiV0FJVCh3KVwiIHNheXMgdGhhdA0KdGhlIFdBSVQgc3RhdGUgY2FuIGJlIHNlbGVjdGVkIHdp dGggdGhlIFwid1wiIGtleS4gIFwiV0FJVCh3ISlcIg0KaW5kaWNhdGVzIHRvIHJlY29yZCBhIHRp bWUgc3RhbXAgZWFjaCB0aW1lIHRoaXMgc3RhdGUgaXMgc2VsZWN0ZWQuDQoNCkVhY2gga2V5d29y ZCBtYXkgYWxzbyBzcGVjaWZ5IGlmIGEgdGltZXN0YW1wIG9yIGEgbm90ZSBzaG91bGQgYmUNCnJl Y29yZGVkIHdoZW4gZW50ZXJpbmcgb3IgbGVhdmluZyB0aGUgc3RhdGUsIGJ5IGFkZGluZyBhZGRp dGlvbmFsDQpjaGFyYWN0ZXJzIGluIHRoZSBwYXJlbnRoZXNpcyBhZnRlciB0aGUga2V5d29yZC4g IFRoaXMgbG9va3MgbGlrZSB0aGlzOg0KXCJXQUlUKHdALyEpXCIuICBcIkBcIiBtZWFucyB0byBh ZGQgYSBub3RlICh3aXRoIHRpbWUpLCBcIiFcIiBtZWFucyB0bw0KcmVjb3JkIG9ubHkgdGhlIHRp bWUgb2YgdGhlIHN0YXRlIGNoYW5nZS4gIFdpdGggWCBhbmQgWSBiZWluZyBlaXRoZXINClwiQFwi IG9yIFwiIVwiLCBcIlgvWVwiIG1lYW5zIHVzZSBYIHdoZW4gZW50ZXJpbmcgdGhlIHN0YXRlLCBh bmQgdXNlDQpZIHdoZW4gbGVhdmluZyB0aGUgc3RhdGUgaWYgYW5kIG9ubHkgaWYgdGhlICp0YXJn ZXQqIHN0YXRlIGRvZXMgbm90DQpkZWZpbmUgWC4gIFlvdSBtYXkgb21pdCBhbnkgb2YgdGhlIGZh c3Qtc2VsZWN0aW9uIGtleSBvciBYIG9yIC9ZLA0Kc28gV0FJVCh3QCksIFdBSVQody9AKSBhbmQg V0FJVChAL0ApIGFyZSBhbGwgdmFsaWQuDQoNCkZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0 aGlzIHZhcmlhYmxlIG1heSBhbHNvIGJlIGp1c3QgYSBsaXN0DQpvZiBrZXl3b3Jkcy4gIEluIHRo aXMgY2FzZSB0aGUgaW50ZXJwcmV0YXRpb24gKHNlcXVlbmNlIG9yIHR5cGUpIHdpbGwgYmUNCnRh a2VuIGZyb20gdGhlIChvdGhlcndpc2Ugb2Jzb2xldGUpIHZhcmlhYmxlIGBvcmctdG9kby1pbnRl cnByZXRhdGlvbicuIg0KICA6Z3JvdXAgJ29yZy10b2RvDQogIDpncm91cCAnb3JnLWtleXdvcmRz DQogIDp0eXBlICcoY2hvaWNlDQoJICAocmVwZWF0IDp0YWcgIk9sZCBzeW50YXgsIGp1c3Qga2V5 d29yZHMiDQoJCSAgKHN0cmluZyA6dGFnICJLZXl3b3JkIikpDQoJICAocmVwZWF0IDp0YWcgIk5l dyBzeW50YXgiDQoJCSAgKGNvbnMNCgkJICAgKGNob2ljZQ0KCQkgICAgOnRhZyAiSW50ZXJwcmV0 YXRpb24iDQoJCSAgICA7O1F1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gc2VlDQoJCSAgICA7O2Bvcmct dG9kby1pbnRlcnByZXRhdGlvbnMnLiAgVGhpcyB0YWtlcyB0aGUNCgkJICAgIDs7cGxhY2Ugb2Yg aXRlbSBhcmd1bWVudHMNCgkJICAgIDpjb252ZXJ0LXdpZGdldA0KCQkgICAgKGxhbWJkYSAod2lk Z2V0KQ0KCQkgICAgICAod2lkZ2V0LXB1dCB3aWRnZXQNCgkJCQkgIDphcmdzIChtYXBjYXINCgkJ CQkJICMnKGxhbWJkYSAoeCkNCgkJCQkJICAgICAod2lkZ2V0LWNvbnZlcnQNCgkJCQkJICAgICAg KGNvbnMgJ2NvbnN0IHgpKSkNCgkJCQkJIG9yZy10b2RvLWludGVycHJldGF0aW9uLXdpZGdldHMp KQ0KCQkgICAgICB3aWRnZXQpKQ0KCQkgICAocmVwZWF0DQoJCSAgICAoc3RyaW5nIDp0YWcgIktl eXdvcmQiKSkpKSkpDQoNCihkZWZ2YXIgb3JnLXRvZG8ta2V5d29yZHMtMSBuaWwNCiAgIkFsbCBU T0RPIGFuZCBET05FIGtleXdvcmRzIGFjdGl2ZSBpbiBhIGJ1ZmZlci4iKQ0KKG1ha2UtdmFyaWFi bGUtYnVmZmVyLWxvY2FsICdvcmctdG9kby1rZXl3b3Jkcy0xKQ0KKGRlZnZhciBvcmctdG9kby1r ZXl3b3Jkcy1mb3ItYWdlbmRhIG5pbCkNCihkZWZ2YXIgb3JnLWRvbmUta2V5d29yZHMtZm9yLWFn ZW5kYSBuaWwpDQooZGVmdmFyIG9yZy1kcmF3ZXJzLWZvci1hZ2VuZGEgbmlsKQ0KKGRlZnZhciBv cmctdG9kby1rZXl3b3JkLWFsaXN0LWZvci1hZ2VuZGEgbmlsKQ0KKGRlZnZhciBvcmctdGFnLWFs aXN0LWZvci1hZ2VuZGEgbmlsDQogICJBbGlzdCBvZiBhbGwgdGFncyBmcm9tIGFsbCBhZ2VuZGEg ZmlsZXMuIikNCihkZWZ2YXIgb3JnLXRhZy1ncm91cHMtYWxpc3QtZm9yLWFnZW5kYSBuaWwNCiAg IkFsaXN0IG9mIGFsbCBncm91cHMgdGFncyBmcm9tIGFsbCBjdXJyZW50IGFnZW5kYSBmaWxlcy4i KQ0KKGRlZnZhciBvcmctdGFnLWdyb3Vwcy1hbGlzdCBuaWwpDQoobWFrZS12YXJpYWJsZS1idWZm ZXItbG9jYWwgJ29yZy10YWctZ3JvdXBzLWFsaXN0KQ0KKGRlZnZhciBvcmctYWdlbmRhLWNvbnRy aWJ1dGluZy1maWxlcyBuaWwpDQooZGVmdmFyIG9yZy1ub3QtZG9uZS1rZXl3b3JkcyBuaWwpDQoo bWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy1ub3QtZG9uZS1rZXl3b3JkcykNCihkZWZ2 YXIgb3JnLWRvbmUta2V5d29yZHMgbmlsKQ0KKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdv cmctZG9uZS1rZXl3b3JkcykNCihkZWZ2YXIgb3JnLXRvZG8taGVhZHMgbmlsKQ0KKG1ha2UtdmFy aWFibGUtYnVmZmVyLWxvY2FsICdvcmctdG9kby1oZWFkcykNCihkZWZ2YXIgb3JnLXRvZG8tc2V0 cyBuaWwpDQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy10b2RvLXNldHMpDQooZGVm dmFyIG9yZy10b2RvLWxvZy1zdGF0ZXMgbmlsKQ0KKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2Fs ICdvcmctdG9kby1sb2ctc3RhdGVzKQ0KKGRlZnZhciBvcmctdG9kby1rd2QtYWxpc3QgbmlsKQ0K KG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdvcmctdG9kby1rd2QtYWxpc3QpDQooZGVmdmFy IG9yZy10b2RvLWtleS1hbGlzdCBuaWwpDQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29y Zy10b2RvLWtleS1hbGlzdCkNCihkZWZ2YXIgb3JnLXRvZG8ta2V5LXRyaWdnZXIgbmlsKQ0KKG1h a2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdvcmctdG9kby1rZXktdHJpZ2dlcikNCg0KKGRlZmN1 c3RvbSBvcmctdG9kby1pbnRlcnByZXRhdGlvbiAnc2VxdWVuY2UNCiAgIkNvbnRyb2xzIGhvdyBU T0RPIGtleXdvcmRzIGFyZSBpbnRlcnByZXRlZC4NClRoaXMgdmFyaWFibGUgaXMgaW4gcHJpbmNp cGxlIG9ic29sZXRlIGFuZCBpcyBvbmx5IHVzZWQgZm9yDQpiYWNrd2FyZCBjb21wYXRpYmlsaXR5 LCBpZiB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdG9kbyBrZXl3b3JkcyBpcw0Kbm90IGdpdmVuIGFs cmVhZHkgaW4gYG9yZy10b2RvLWtleXdvcmRzJy4gIFNlZSB0aGF0IHZhcmlhYmxlIGZvcg0KbW9y ZSBpbmZvcm1hdGlvbi4iDQogIDpncm91cCAnb3JnLXRvZG8NCiAgOmdyb3VwICdvcmcta2V5d29y ZHMNCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IHNlcXVlbmNlKQ0KCQkgKGNvbnN0IHR5cGUpKSkN Cg0KKGRlZmN1c3RvbSBvcmctdXNlLWZhc3QtdG9kby1zZWxlY3Rpb24gdA0KICAiTm9uLW5pbCBt ZWFucyB1c2UgdGhlIGZhc3QgdG9kbyBzZWxlY3Rpb24gc2NoZW1lIHdpdGggQy1jIEMtdC4NClRo aXMgdmFyaWFibGUgZGVzY3JpYmVzIGlmIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhl IGN5Y2xpbmcNCm1lY2hhbmlzbSBmb3IgVE9ETyBrZXl3b3JkcyB3aWxsIGJlIHJlcGxhY2VkIGJ5 IGEgc2luZ2xlLWtleSwgZGlyZWN0DQpzZWxlY3Rpb24gc2NoZW1lLg0KDQpXaGVuIG5pbCwgZmFz dCBzZWxlY3Rpb24gaXMgbmV2ZXIgdXNlZC4NCg0KV2hlbiB0aGUgc3ltYm9sIGBwcmVmaXgnLCBp dCB3aWxsIGJlIHVzZWQgd2hlbiBgb3JnLXRvZG8nIGlzIGNhbGxlZA0Kd2l0aCBhIHByZWZpeCBh cmd1bWVudCwgIGkuZS4gYEMtdSBDLWMgQy10JyBpbiBhbiBPcmctbW9kZSBidWZmZXIsIGFuZA0K YEMtdSB0JyBpbiBhbiBhZ2VuZGEgYnVmZmVyLg0KDQpXaGVuIHQsIGZhc3Qgc2VsZWN0aW9uIGlz IHVzZWQgYnkgZGVmYXVsdC4gIEluIHRoaXMgY2FzZSwgdGhlIHByZWZpeA0KYXJndW1lbnQgZm9y Y2VzIGN5Y2xpbmcgaW5zdGVhZC4NCg0KSW4gYWxsIGNhc2VzLCB0aGUgc3BlY2lhbCBpbnRlcmZh Y2UgaXMgb25seSB1c2VkIGlmIGFjY2VzcyBrZXlzIGhhdmUNCmFjdHVhbGx5IGJlZW4gYXNzaWdu ZWQgYnkgdGhlIHVzZXIsIGkuZS4gaWYga2V5d29yZHMgaW4gdGhlIGNvbmZpZ3VyYXRpb24NCmFy ZSBmb2xsb3dlZCBieSBhIGxldHRlciBpbiBwYXJlbnRoZXNpcywgbGlrZSBUT0RPKHQpLiINCiAg Omdyb3VwICdvcmctdG9kbw0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIk5ldmVy IiBuaWwpDQoJICAoY29uc3QgOnRhZyAiQnkgZGVmYXVsdCIgdCkNCgkgIChjb25zdCA6dGFnICJP bmx5IHdpdGggQy11IEMtYyBDLXQiIHByZWZpeCkpKQ0KDQooZGVmY3VzdG9tIG9yZy1wcm92aWRl LXRvZG8tc3RhdGlzdGljcyB0DQogICJOb24tbmlsIG1lYW5zIHVwZGF0ZSB0b2RvIHN0YXRpc3Rp Y3MgYWZ0ZXIgaW5zZXJ0IGFuZCB0b2dnbGUuDQpBTEwtSEVBRExJTkVTIG1lYW5zIHVwZGF0ZSB0 b2RvIHN0YXRpc3RpY3MgYnkgaW5jbHVkaW5nIGhlYWRsaW5lcw0Kd2l0aCBubyBUT0RPIGtleXdv cmQgYXMgd2VsbCwgY291bnRpbmcgdGhlbSBhcyBub3QgZG9uZS4NCkEgbGlzdCBvZiBUT0RPIGtl eXdvcmRzIG1lYW5zIHRoZSBzYW1lLCBidXQgc2tpcCBrZXl3b3JkcyB0aGF0IGFyZQ0Kbm90IGlu IHRoaXMgbGlzdC4NCg0KV2hlbiB0aGlzIGlzIHNldCwgdG9kbyBzdGF0aXN0aWNzIGlzIHVwZGF0 ZWQgaW4gdGhlIHBhcmVudCBvZiB0aGUNCmN1cnJlbnQgZW50cnkgZWFjaCB0aW1lIGEgdG9kbyBz dGF0ZSBpcyBjaGFuZ2VkLiINCiAgOmdyb3VwICdvcmctdG9kbw0KICA6dHlwZSAnKGNob2ljZQ0K CSAgKGNvbnN0IDp0YWcgIlllcywgb25seSBmb3IgVE9ETyBlbnRyaWVzIiB0KQ0KCSAgKGNvbnN0 IDp0YWcgIlllcywgaW5jbHVkaW5nIGFsbCBlbnRyaWVzIiBhbGwtaGVhZGxpbmVzKQ0KCSAgKHJl cGVhdCA6dGFnICJZZXMsIGZvciBUT0RPcyBpbiB0aGlzIGxpc3QiDQoJCSAgKHN0cmluZyA6dGFn ICJUT0RPIGtleXdvcmQiKSkNCgkgIChvdGhlciA6dGFnICJObyBUT0RPIHN0YXRpc3RpY3MiIG5p bCkpKQ0KDQooZGVmY3VzdG9tIG9yZy1oaWVyYXJjaGljYWwtdG9kby1zdGF0aXN0aWNzIHQNCiAg Ik5vbi1uaWwgbWVhbnMgVE9ETyBzdGF0aXN0aWNzIGNvdmVycyBqdXN0IGRpcmVjdCBjaGlsZHJl bi4NCldoZW4gbmlsLCBhbGwgZW50cmllcyBpbiB0aGUgc3VidHJlZSBhcmUgY29uc2lkZXJlZC4N ClRoaXMgaGFzIG9ubHkgYW4gZWZmZWN0IGlmIGBvcmctcHJvdmlkZS10b2RvLXN0YXRpc3RpY3Mn IGlzIHNldC4NClRvIHNldCB0aGlzIHRvIG5pbCBmb3Igb25seSBhIHNpbmdsZSBzdWJ0cmVlLCB1 c2UgYSBDT09LSUVfREFUQQ0KcHJvcGVydHkgYW5kIGluY2x1ZGUgdGhlIHdvcmQgXCJyZWN1cnNp dmVcIiBpbnRvIHRoZSB2YWx1ZS4iDQogIDpncm91cCAnb3JnLXRvZG8NCiAgOnR5cGUgJ2Jvb2xl YW4pDQoNCihkZWZjdXN0b20gb3JnLWFmdGVyLXRvZG8tc3RhdGUtY2hhbmdlLWhvb2sgbmlsDQog ICJIb29rIHdoaWNoIGlzIHJ1biBhZnRlciB0aGUgc3RhdGUgb2YgYSBUT0RPIGl0ZW0gd2FzIGNo YW5nZWQuDQpUaGUgbmV3IHN0YXRlIChhIHN0cmluZyB3aXRoIGEgVE9ETyBrZXl3b3JkLCBvciBu aWwpIGlzIGF2YWlsYWJsZSBpbiB0aGUNCkxpc3AgdmFyaWFibGUgYG9yZy1zdGF0ZScuIg0KICA6 Z3JvdXAgJ29yZy10b2RvDQogIDp0eXBlICdob29rKQ0KDQooZGVmdmFyIG9yZy1ibG9ja2VyLWhv b2sgbmlsDQogICJIb29rIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgYWxsb3dlZCB0byBibG9jayBh IHN0YXRlIGNoYW5nZS4NCg0KRnVuY3Rpb25zIGluIHRoaXMgaG9vayBzaG91bGQgbm90IG1vZGlm eSB0aGUgYnVmZmVyLg0KRWFjaCBmdW5jdGlvbiBnZXRzIGFzIGl0cyBzaW5nbGUgYXJndW1lbnQg YSBwcm9wZXJ0eSBsaXN0LA0Kc2VlIGBvcmctdHJpZ2dlci1ob29rJyBmb3IgbW9yZSBpbmZvcm1h dGlvbiBhYm91dCB0aGlzIGxpc3QuDQoNCklmIGFueSBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMg aG9vayByZXR1cm5zIG5pbCwgdGhlIHN0YXRlIGNoYW5nZQ0KaXMgYmxvY2tlZC4iKQ0KDQooZGVm dmFyIG9yZy10cmlnZ2VyLWhvb2sgbmlsDQogICJIb29rIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUg dHJpZ2dlcmVkIGJ5IGEgc3RhdGUgY2hhbmdlLg0KDQpFYWNoIGZ1bmN0aW9uIGdldHMgYXMgaXRz IHNpbmdsZSBhcmd1bWVudCBhIHByb3BlcnR5IGxpc3Qgd2l0aCBhdA0KbGVhc3QgdGhlIGZvbGxv d2luZyBlbGVtZW50czoNCg0KICg6dHlwZSB0eXBlLW9mLWNoYW5nZSA6cG9zaXRpb24gcG9zLWF0 LWVudHJ5LXN0YXJ0DQogIDpmcm9tIG9sZC1zdGF0ZSA6dG8gbmV3LXN0YXRlKQ0KDQpEZXBlbmRp bmcgb24gdGhlIHR5cGUsIG1vcmUgcHJvcGVydGllcyBtYXkgYmUgcHJlc2VudC4NCg0KVGhpcyBt ZWNoYW5pc20gaXMgY3VycmVudGx5IGltcGxlbWVudGVkIGZvcjoNCg0KVE9ETyBzdGF0ZSBjaGFu Z2VzDQotLS0tLS0tLS0tLS0tLS0tLS0NCjp0eXBlICB0b2RvLXN0YXRlLWNoYW5nZQ0KOmZyb20g IHByZXZpb3VzIHN0YXRlIChrZXl3b3JkIGFzIGEgc3RyaW5nKSwgb3IgbmlsLCBvciBhIHN5bWJv bA0KICAgICAgICd0b2RvJyBvciAnZG9uZScsIHRvIGluZGljYXRlIHRoZSBnZW5lcmFsIHR5cGUg b2Ygc3RhdGUuDQo6dG8gICAgbmV3IHN0YXRlLCBsaWtlIGluIDpmcm9tIikNCg0KKGRlZmN1c3Rv bSBvcmctZW5mb3JjZS10b2RvLWRlcGVuZGVuY2llcyBuaWwNCiAgIk5vbi1uaWwgbWVhbnMgdW5k b25lIFRPRE8gZW50cmllcyB3aWxsIGJsb2NrIHN3aXRjaGluZyB0aGUgcGFyZW50IHRvIERPTkUu DQpBbHNvLCBpZiBhIHBhcmVudCBoYXMgYW4gOk9SREVSRUQ6IHByb3BlcnR5LCBzd2l0Y2hpbmcg YW4gZW50cnkgdG8gRE9ORSB3aWxsDQpiZSBibG9ja2VkIGlmIGFueSBwcmlvciBzaWJsaW5nIGlz IG5vdCB5ZXQgZG9uZS4NCkZpbmFsbHksIGlmIHRoZSBwYXJlbnQgaXMgYmxvY2tlZCBiZWNhdXNl IG9mIG9yZGVyZWQgc2libGluZ3Mgb2YgaXRzIG93biwNCnRoZSBjaGlsZCB3aWxsIGFsc28gYmUg YmxvY2tlZC4iDQogIDpzZXQgKGxhbWJkYSAodmFyIHZhbCkNCgkgKHNldCB2YXIgdmFsKQ0KCSAo aWYgdmFsDQoJICAgICAoYWRkLWhvb2sgJ29yZy1ibG9ja2VyLWhvb2sNCgkJICAgICAgICdvcmct YmxvY2stdG9kby1mcm9tLWNoaWxkcmVuLW9yLXNpYmxpbmdzLW9yLXBhcmVudCkNCgkgICAocmVt b3ZlLWhvb2sgJ29yZy1ibG9ja2VyLWhvb2sNCgkJCSdvcmctYmxvY2stdG9kby1mcm9tLWNoaWxk cmVuLW9yLXNpYmxpbmdzLW9yLXBhcmVudCkpKQ0KICA6Z3JvdXAgJ29yZy10b2RvDQogIDp0eXBl ICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1lbmZvcmNlLXRvZG8tY2hlY2tib3gtZGVwZW5k ZW5jaWVzIG5pbA0KICAiTm9uLW5pbCBtZWFucyB1bmNoZWNrZWQgYm94ZXMgd2lsbCBibG9jayBz d2l0Y2hpbmcgdGhlIHBhcmVudCB0byBET05FLg0KV2hlbiB0aGlzIGlzIG5pbCwgY2hlY2tib3hl cyBoYXZlIG5vIGluZmx1ZW5jZSBvbiBzd2l0Y2hpbmcgVE9ETyBzdGF0ZXMuDQpXaGVuIG5vbi1u aWwsIHlvdSBmaXJzdCBuZWVkIHRvIGNoZWNrIG9mZiBhbGwgY2hlY2sgYm94ZXMgYmVmb3JlIHRo ZSBUT0RPDQplbnRyeSBjYW4gYmUgc3dpdGNoZWQgdG8gRE9ORS4NClRoaXMgdmFyaWFibGUgbmVl ZHMgdG8gYmUgc2V0IGJlZm9yZSBvcmcuZWwgaXMgbG9hZGVkLCBhbmQgeW91IG5lZWQgdG8NCnJl c3RhcnQgRW1hY3MgYWZ0ZXIgYSBjaGFuZ2UgdG8gbWFrZSB0aGUgY2hhbmdlIGVmZmVjdGl2ZS4g IFRoZSBvbmx5IHdheQ0KdG8gY2hhbmdlIGlzIHdoaWxlIEVtYWNzIGlzIHJ1bm5pbmcgaXMgdGhy b3VnaCB0aGUgY3VzdG9taXplIGludGVyZmFjZS4iDQogIDpzZXQgKGxhbWJkYSAodmFyIHZhbCkN CgkgKHNldCB2YXIgdmFsKQ0KCSAoaWYgdmFsDQoJICAgICAoYWRkLWhvb2sgJ29yZy1ibG9ja2Vy LWhvb2sNCgkJICAgICAgICdvcmctYmxvY2stdG9kby1mcm9tLWNoZWNrYm94ZXMpDQoJICAgKHJl bW92ZS1ob29rICdvcmctYmxvY2tlci1ob29rDQoJCQknb3JnLWJsb2NrLXRvZG8tZnJvbS1jaGVj a2JveGVzKSkpDQogIDpncm91cCAnb3JnLXRvZG8NCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZj dXN0b20gb3JnLXRyZWF0LWluc2VydC10b2RvLWhlYWRpbmctYXMtc3RhdGUtY2hhbmdlIG5pbA0K ICAiTm9uLW5pbCBtZWFucyBpbnNlcnRpbmcgYSBUT0RPIGhlYWRpbmcgaXMgdHJlYXRlZCBhcyBz dGF0ZSBjaGFuZ2UuDQpTbyB3aGVuIHRoZSBjb21tYW5kIFxcW29yZy1pbnNlcnQtdG9kby1oZWFk aW5nXSBpcyB1c2VkLCBzdGF0ZSBjaGFuZ2UNCmxvZ2dpbmcgd2lsbCBhcHBseSBpZiBhcHByb3By aWF0ZS4gIFdoZW4gbmlsLCB0aGUgbmV3IFRPRE8gaXRlbSB3aWxsDQpiZSBpbnNlcnRlZCBkaXJl Y3RseSwgYW5kIG5vIGxvZ2dpbmcgd2lsbCB0YWtlIHBsYWNlLiINCiAgOmdyb3VwICdvcmctdG9k bw0KICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmctdHJlYXQtUy1jdXJzb3ItdG9k by1zZWxlY3Rpb24tYXMtc3RhdGUtY2hhbmdlIHQNCiAgIk5vbi1uaWwgbWVhbnMgc3dpdGNoaW5n IFRPRE8gc3RhdGVzIHdpdGggUy1jdXJzb3IgY291bnRzIGFzIHN0YXRlIGNoYW5nZS4NClRoaXMg aXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuICBIb3dldmVyLCBzZXR0aW5nIHRoaXMgdG8gbmlsIGFs bG93cyBhDQpjb252ZW5pZW50IHdheSB0byBzZWxlY3QgYSBUT0RPIHN0YXRlIGFuZCBieXBhc3Mg YW55IGxvZ2dpbmcgYXNzb2NpYXRlZA0Kd2l0aCB0aGF0LiINCiAgOmdyb3VwICdvcmctdG9kbw0K ICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmctdG9kby1zdGF0ZS10YWdzLXRyaWdn ZXJzIG5pbA0KICAiVGFnIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgdHJpZ2dlcmVkIGJ5IFRPRE8g c3RhdGUgY2hhbmdlcy4NClRoaXMgaXMgYSBsaXN0LiAgRWFjaCBlbnRyeSBpcw0KDQogIChzdGF0 ZS1jaGFuZ2UgKHRhZyAuIGZsYWcpIC4uLi4uLi4pDQoNClN0YXRlLWNoYW5nZSBjYW4gYmUgYSBz dHJpbmcgd2l0aCBhIHN0YXRlLCBhbmQgZW1wdHkgc3RyaW5nIHRvIGluZGljYXRlIHRoZQ0Kc3Rh dGUgdGhhdCBoYXMgbm8gVE9ETyBrZXl3b3JkLCBvciBpdCBjYW4gYmUgb25lIG9mIHRoZSBzeW1i b2xzIGB0b2RvJw0Kb3IgYGRvbmUnLCBtZWFuaW5nIGFueSBub3QtZG9uZSBvciBkb25lIHN0YXRl LCByZXNwZWN0aXZlbHkuIg0KICA6Z3JvdXAgJ29yZy10b2RvDQogIDpncm91cCAnb3JnLXRhZ3MN CiAgOnR5cGUgJyhyZXBlYXQNCgkgIChjb25zIChjaG9pY2UgOnRhZyAiV2hlbiBjaGFuZ2luZyB0 byINCgkJCShjb25zdCA6dGFnICJOb3QtZG9uZSBzdGF0ZSIgdG9kbykNCgkJCShjb25zdCA6dGFn ICJEb25lIHN0YXRlIiBkb25lKQ0KCQkJKHN0cmluZyA6dGFnICJTdGF0ZSIpKQ0KCQkocmVwZWF0 DQoJCSAoY29ucyA6dGFnICJUYWcgYWN0aW9uIg0KCQkgICAgICAgKHN0cmluZyA6dGFnICJUYWci KQ0KCQkgICAgICAgKGNob2ljZSAoY29uc3QgOnRhZyAiQWRkIiB0KSAoY29uc3QgOnRhZyAiUmVt b3ZlIiBuaWwpKSkpKSkpDQoNCihkZWZjdXN0b20gb3JnLWxvZy1kb25lIG5pbA0KICAiSW5mb3Jt YXRpb24gdG8gcmVjb3JkIHdoZW4gYSB0YXNrIG1vdmVzIHRvIHRoZSBET05FIHN0YXRlLg0KDQpQ b3NzaWJsZSB2YWx1ZXMgYXJlOg0KDQpuaWwgICAgIERvbid0IGFkZCBhbnl0aGluZywganVzdCBj aGFuZ2UgdGhlIGtleXdvcmQNCnRpbWUgICAgQWRkIGEgdGltZSBzdGFtcCB0byB0aGUgdGFzaw0K bm90ZSAgICBQcm9tcHQgZm9yIGEgbm90ZSBhbmQgYWRkIGl0IHdpdGggdGVtcGxhdGUgYG9yZy1s b2ctbm90ZS1oZWFkaW5ncycNCg0KVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggb24g YSBwZXItZmlsZS1iYXNpcyB3aXRoDQoNCiAgICMrU1RBUlRVUDogbm9sb2dkb25lDQogICAjK1NU QVJUVVA6IGxvZ2RvbmUNCiAgICMrU1RBUlRVUDogbG9nbm90ZWRvbmUNCg0KWW91IGNhbiBoYXZl IGxvY2FsIGxvZ2dpbmcgc2V0dGluZ3MgZm9yIGEgc3VidHJlZSBieSBzZXR0aW5nIHRoZSBMT0dH SU5HDQpwcm9wZXJ0eSB0byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBrZXl3b3Jkcy4iDQogIDpncm91 cCAnb3JnLXRvZG8NCiAgOmdyb3VwICdvcmctcHJvZ3Jlc3MNCiAgOnR5cGUgJyhjaG9pY2UNCgkg IChjb25zdCA6dGFnICJObyBsb2dnaW5nIiBuaWwpDQoJICAoY29uc3QgOnRhZyAiUmVjb3JkIENM T1NFRCB0aW1lc3RhbXAiIHRpbWUpDQoJICAoY29uc3QgOnRhZyAiUmVjb3JkIENMT1NFRCB0aW1l c3RhbXAgd2l0aCBub3RlLiIgbm90ZSkpKQ0KDQo7OyBOb3JtYWxpemUgb2xkIHVzZXMgb2Ygb3Jn LWxvZy1kb25lLg0KKGNvbmQNCiAoKGVxIG9yZy1sb2ctZG9uZSB0KSAoc2V0cSBvcmctbG9nLWRv bmUgJ3RpbWUpKQ0KICgoYW5kIChsaXN0cCBvcmctbG9nLWRvbmUpIChtZW1xICdkb25lIG9yZy1s b2ctZG9uZSkpDQogIChzZXRxIG9yZy1sb2ctZG9uZSAnbm90ZSkpKQ0KDQooZGVmY3VzdG9tIG9y Zy1sb2ctcmVzY2hlZHVsZSBuaWwNCiAgIkluZm9ybWF0aW9uIHRvIHJlY29yZCB3aGVuIHRoZSBz Y2hlZHVsaW5nIGRhdGUgb2YgYSB0YXNrcyBpcyBtb2RpZmllZC4NCg0KUG9zc2libGUgdmFsdWVz IGFyZToNCg0KbmlsICAgICBEb24ndCBhZGQgYW55dGhpbmcsIGp1c3QgY2hhbmdlIHRoZSBkYXRl DQp0aW1lICAgIEFkZCBhIHRpbWUgc3RhbXAgdG8gdGhlIHRhc2sNCm5vdGUgICAgUHJvbXB0IGZv ciBhIG5vdGUgYW5kIGFkZCBpdCB3aXRoIHRlbXBsYXRlIGBvcmctbG9nLW5vdGUtaGVhZGluZ3Mn DQoNClRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHNldCB3aXRoIG9uIGEgcGVyLWZpbGUtYmFzaXMg d2l0aA0KDQogICAjK1NUQVJUVVA6IG5vbG9ncmVzY2hlZHVsZQ0KICAgIytTVEFSVFVQOiBsb2dy ZXNjaGVkdWxlDQogICAjK1NUQVJUVVA6IGxvZ25vdGVyZXNjaGVkdWxlIg0KICA6Z3JvdXAgJ29y Zy10b2RvDQogIDpncm91cCAnb3JnLXByb2dyZXNzDQogIDp0eXBlICcoY2hvaWNlDQoJICAoY29u c3QgOnRhZyAiTm8gbG9nZ2luZyIgbmlsKQ0KCSAgKGNvbnN0IDp0YWcgIlJlY29yZCB0aW1lc3Rh bXAiIHRpbWUpDQoJICAoY29uc3QgOnRhZyAiUmVjb3JkIHRpbWVzdGFtcCB3aXRoIG5vdGUuIiBu b3RlKSkpDQoNCihkZWZjdXN0b20gb3JnLWxvZy1yZWRlYWRsaW5lIG5pbA0KICAiSW5mb3JtYXRp b24gdG8gcmVjb3JkIHdoZW4gdGhlIGRlYWRsaW5lIGRhdGUgb2YgYSB0YXNrcyBpcyBtb2RpZmll ZC4NCg0KUG9zc2libGUgdmFsdWVzIGFyZToNCg0KbmlsICAgICBEb24ndCBhZGQgYW55dGhpbmcs IGp1c3QgY2hhbmdlIHRoZSBkYXRlDQp0aW1lICAgIEFkZCBhIHRpbWUgc3RhbXAgdG8gdGhlIHRh c2sNCm5vdGUgICAgUHJvbXB0IGZvciBhIG5vdGUgYW5kIGFkZCBpdCB3aXRoIHRlbXBsYXRlIGBv cmctbG9nLW5vdGUtaGVhZGluZ3MnDQoNClRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHNldCB3aXRo IG9uIGEgcGVyLWZpbGUtYmFzaXMgd2l0aA0KDQogICAjK1NUQVJUVVA6IG5vbG9ncmVkZWFkbGlu ZQ0KICAgIytTVEFSVFVQOiBsb2dyZWRlYWRsaW5lDQogICAjK1NUQVJUVVA6IGxvZ25vdGVyZWRl YWRsaW5lDQoNCllvdSBjYW4gaGF2ZSBsb2NhbCBsb2dnaW5nIHNldHRpbmdzIGZvciBhIHN1YnRy ZWUgYnkgc2V0dGluZyB0aGUgTE9HR0lORw0KcHJvcGVydHkgdG8gb25lIG9yIG1vcmUgb2YgdGhl c2Uga2V5d29yZHMuIg0KICA6Z3JvdXAgJ29yZy10b2RvDQogIDpncm91cCAnb3JnLXByb2dyZXNz DQogIDp0eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRhZyAiTm8gbG9nZ2luZyIgbmlsKQ0KCSAg KGNvbnN0IDp0YWcgIlJlY29yZCB0aW1lc3RhbXAiIHRpbWUpDQoJICAoY29uc3QgOnRhZyAiUmVj b3JkIHRpbWVzdGFtcCB3aXRoIG5vdGUuIiBub3RlKSkpDQoNCihkZWZjdXN0b20gb3JnLWxvZy1u b3RlLWNsb2NrLW91dCBuaWwNCiAgIk5vbi1uaWwgbWVhbnMgcmVjb3JkIGEgbm90ZSB3aGVuIGNs b2NraW5nIG91dCBvZiBhbiBpdGVtLg0KVGhpcyBjYW4gYWxzbyBiZSBjb25maWd1cmVkIG9uIGEg cGVyLWZpbGUgYmFzaXMgYnkgYWRkaW5nIG9uZSBvZg0KdGhlIGZvbGxvd2luZyBsaW5lcyBhbnl3 aGVyZSBpbiB0aGUgYnVmZmVyOg0KDQogICAjK1NUQVJUVVA6IGxvZ25vdGVjbG9jay1vdXQNCiAg ICMrU1RBUlRVUDogbm9sb2dub3RlY2xvY2stb3V0Ig0KICA6Z3JvdXAgJ29yZy10b2RvDQogIDpn cm91cCAnb3JnLXByb2dyZXNzDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1s b2ctZG9uZS13aXRoLXRpbWUgdA0KICAiTm9uLW5pbCBtZWFucyB0aGUgQ0xPU0VEIHRpbWUgc3Rh bXAgd2lsbCBjb250YWluIGRhdGUgYW5kIHRpbWUuDQpXaGVuIG5pbCwgb25seSB0aGUgZGF0ZSB3 aWxsIGJlIHJlY29yZGVkLiINCiAgOmdyb3VwICdvcmctcHJvZ3Jlc3MNCiAgOnR5cGUgJ2Jvb2xl YW4pDQoNCihkZWZjdXN0b20gb3JnLWxvZy1ub3RlLWhlYWRpbmdzDQogICcoKGRvbmUgLiAgIkNM T1NJTkcgTk9URSAldCIpDQogICAgKHN0YXRlIC4gIlN0YXRlICUtMTJzIGZyb20gJS0xMlMgJXQi KQ0KICAgIChub3RlIC4gICJOb3RlIHRha2VuIG9uICV0IikNCiAgICAocmVzY2hlZHVsZSAuICAi UmVzY2hlZHVsZWQgZnJvbSAlUyBvbiAldCIpDQogICAgKGRlbHNjaGVkdWxlIC4gICJOb3Qgc2No ZWR1bGVkLCB3YXMgJVMgb24gJXQiKQ0KICAgIChyZWRlYWRsaW5lIC4gICJOZXcgZGVhZGxpbmUg ZnJvbSAlUyBvbiAldCIpDQogICAgKGRlbGRlYWRsaW5lIC4gICJSZW1vdmVkIGRlYWRsaW5lLCB3 YXMgJVMgb24gJXQiKQ0KICAgIChyZWZpbGUgLiAiUmVmaWxlZCBvbiAldCIpDQogICAgKGNsb2Nr LW91dCAuICIiKSkNCiAgIkhlYWRpbmdzIGZvciBub3RlcyBhZGRlZCB0byBlbnRyaWVzLg0KVGhl IHZhbHVlIGlzIGFuIGFsaXN0LCB3aXRoIHRoZSBjYXIgYmVpbmcgYSBzeW1ib2wgaW5kaWNhdGlu ZyB0aGUgbm90ZQ0KY29udGV4dCwgYW5kIHRoZSBjZHIgaXMgdGhlIGhlYWRpbmcgdG8gYmUgdXNl ZC4gIFRoZSBoZWFkaW5nIG1heSBhbHNvIGJlIHRoZQ0KZW1wdHkgc3RyaW5nLg0KJXQgaW4gdGhl IGhlYWRpbmcgd2lsbCBiZSByZXBsYWNlZCBieSBhIHRpbWUgc3RhbXAuDQolVCB3aWxsIGJlIGFu IGFjdGl2ZSB0aW1lIHN0YW1wIGluc3RlYWQgdGhlIGRlZmF1bHQgaW5hY3RpdmUgb25lDQolZCB3 aWxsIGJlIHJlcGxhY2VkIGJ5IGEgc2hvcnQtZm9ybWF0IHRpbWUgc3RhbXAuDQolRCB3aWxsIGJl IHJlcGxhY2VkIGJ5IGFuIGFjdGl2ZSBzaG9ydC1mb3JtYXQgdGltZSBzdGFtcC4NCiVzIHdpbGwg YmUgcmVwbGFjZWQgYnkgdGhlIG5ldyBUT0RPIHN0YXRlLCBpbiBkb3VibGUgcXVvdGVzLg0KJVMg d2lsbCBiZSByZXBsYWNlZCBieSB0aGUgb2xkIFRPRE8gc3RhdGUsIGluIGRvdWJsZSBxdW90ZXMu DQoldSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB1c2VyIG5hbWUuDQolVSB3aWxsIGJlIHJlcGxh Y2VkIGJ5IHRoZSBmdWxsIHVzZXIgbmFtZS4NCg0KSW4gZmFjdCwgaXQgaXMgbm90IGEgZ29vZCBp ZGVhIHRvIGNoYW5nZSB0aGUgYHN0YXRlJyBlbnRyeSwgYmVjYXVzZQ0KYWdlbmRhIGxvZyBtb2Rl IGRlcGVuZHMgb24gdGhlIGZvcm1hdCBvZiB0aGVzZSBlbnRyaWVzLiINCiAgOmdyb3VwICAnb3Jn LXRvZG8NCiAgOmdyb3VwICAnb3JnLXByb2dyZXNzDQogIDp0eXBlICcobGlzdCA6Z3JlZWR5IHQN CgkgICAgICAgKGNvbnMgKGNvbnN0IDp0YWcgIkhlYWRpbmcgd2hlbiBjbG9zaW5nIGFuIGl0ZW0i IGRvbmUpIHN0cmluZykNCgkgICAgICAgKGNvbnMgKGNvbnN0IDp0YWcNCgkJCSAgICAiSGVhZGlu ZyB3aGVuIGNoYW5naW5nIHRvZG8gc3RhdGUgKHRvZG8gc2VxdWVuY2Ugb25seSkiDQoJCQkgICAg c3RhdGUpIHN0cmluZykNCgkgICAgICAgKGNvbnMgKGNvbnN0IDp0YWcgIkhlYWRpbmcgd2hlbiBq dXN0IHRha2luZyBhIG5vdGUiIG5vdGUpIHN0cmluZykNCgkgICAgICAgKGNvbnMgKGNvbnN0IDp0 YWcgIkhlYWRpbmcgd2hlbiByZXNjaGVkdWxpbmciIHJlc2NoZWR1bGUpIHN0cmluZykNCgkgICAg ICAgKGNvbnMgKGNvbnN0IDp0YWcgIkhlYWRpbmcgd2hlbiBhbiBpdGVtIGlzIG5vIGxvbmdlciBz Y2hlZHVsZWQiIGRlbHNjaGVkdWxlKSBzdHJpbmcpDQoJICAgICAgIChjb25zIChjb25zdCA6dGFn ICJIZWFkaW5nIHdoZW4gY2hhbmdpbmcgZGVhZGxpbmUiICByZWRlYWRsaW5lKSBzdHJpbmcpDQoJ ICAgICAgIChjb25zIChjb25zdCA6dGFnICJIZWFkaW5nIHdoZW4gZGVsZXRpbmcgYSBkZWFkbGlu ZSIgZGVsZGVhZGxpbmUpIHN0cmluZykNCgkgICAgICAgKGNvbnMgKGNvbnN0IDp0YWcgIkhlYWRp bmcgd2hlbiByZWZpbGluZyIgcmVmaWxlKSBzdHJpbmcpDQoJICAgICAgIChjb25zIChjb25zdCA6 dGFnICJIZWFkaW5nIHdoZW4gY2xvY2tpbmcgb3V0IiBjbG9jay1vdXQpIHN0cmluZykpKQ0KDQoo dW5sZXNzIChhc3NxICdub3RlIG9yZy1sb2ctbm90ZS1oZWFkaW5ncykNCiAgKHB1c2ggJyhub3Rl IC4gIiV0Iikgb3JnLWxvZy1ub3RlLWhlYWRpbmdzKSkNCg0KKGRlZmN1c3RvbSBvcmctbG9nLWlu dG8tZHJhd2VyIG5pbA0KICAiTm9uLW5pbCBtZWFucyBpbnNlcnQgc3RhdGUgY2hhbmdlIG5vdGVz IGFuZCB0aW1lIHN0YW1wcyBpbnRvIGEgZHJhd2VyLg0KV2hlbiBuaWwsIHN0YXRlIGNoYW5nZXMg bm90ZXMgd2lsbCBiZSBpbnNlcnRlZCBhZnRlciB0aGUgaGVhZGxpbmUgYW5kDQphbnkgc2NoZWR1 bGluZyBhbmQgY2xvY2sgbGluZXMsIGJ1dCBub3QgaW5zaWRlIGEgZHJhd2VyLg0KDQpUaGUgdmFs dWUgb2YgdGhpcyB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGRyYXdlciB0byB1 c2UuDQpMT0dCT09LIGlzIHByb3Bvc2VkIGFzIHRoZSBkZWZhdWx0IGRyYXdlciBmb3IgdGhpcyBw dXJwb3NlLCB5b3UgY2FuDQphbHNvIHNldCB0aGlzIHRvIGEgc3RyaW5nIHRvIGRlZmluZSB0aGUg ZHJhd2VyIG9mIHlvdXIgY2hvaWNlLg0KDQpBIHZhbHVlIG9mIHQgaXMgYWxzbyBhbGxvd2VkLCBy ZXByZXNlbnRpbmcgXCJMT0dCT09LXCIuDQoNCkEgdmFsdWUgb2YgdCBvciBuaWwgY2FuIGFsc28g YmUgc2V0IHdpdGggb24gYSBwZXItZmlsZS1iYXNpcyB3aXRoDQoNCiAgICMrU1RBUlRVUDogbG9n ZHJhd2VyDQogICAjK1NUQVJUVVA6IG5vbG9nZHJhd2VyDQoNCklmIHRoaXMgdmFyaWFibGUgaXMg c2V0LCBgb3JnLWxvZy1zdGF0ZS1ub3Rlcy1pbnNlcnQtYWZ0ZXItZHJhd2VycycNCndpbGwgYmUg aWdub3JlZC4NCg0KWW91IGNhbiBzZXQgdGhlIHByb3BlcnR5IExPR19JTlRPX0RSQVdFUiB0byBv dmVycnVsZSB0aGlzIHNldHRpbmcgZm9yDQphIHN1YnRyZWUuIg0KICA6Z3JvdXAgJ29yZy10b2Rv DQogIDpncm91cCAnb3JnLXByb2dyZXNzDQogIDp0eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRh ZyAiTm90IGludG8gYSBkcmF3ZXIiIG5pbCkNCgkgIChjb25zdCA6dGFnICJMT0dCT09LIiB0KQ0K CSAgKHN0cmluZyA6dGFnICJPdGhlciIpKSkNCg0KKG9yZy1kZWZ2YXJhbGlhcyAnb3JnLWxvZy1z dGF0ZS1ub3Rlcy1pbnRvLWRyYXdlciAnb3JnLWxvZy1pbnRvLWRyYXdlcikNCg0KKGRlZnVuIG9y Zy1sb2ctaW50by1kcmF3ZXIgKCkNCiAgIlJldHVybiB0aGUgdmFsdWUgb2YgYG9yZy1sb2ctaW50 by1kcmF3ZXInLCBidXQgbGV0IHByb3BlcnRpZXMgb3ZlcnJ1bGUuDQpJZiB0aGUgY3VycmVudCBl bnRyeSBoYXMgb3IgaW5oZXJpdHMgYSBMT0dfSU5UT19EUkFXRVIgcHJvcGVydHksIGl0IHdpbGwg YmUNCnVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCB2YWx1ZS4iDQogIChsZXQgKChwIChvcmct ZW50cnktZ2V0IG5pbCAiTE9HX0lOVE9fRFJBV0VSIiAnaW5oZXJpdCB0KSkpDQogICAgKGNvbmQN CiAgICAgKChub3QgcCkgb3JnLWxvZy1pbnRvLWRyYXdlcikNCiAgICAgKChlcXVhbCBwICJuaWwi KSBuaWwpDQogICAgICgoZXF1YWwgcCAidCIpICJMT0dCT09LIikNCiAgICAgKHQgcCkpKSkNCg0K KGRlZmN1c3RvbSBvcmctbG9nLXN0YXRlLW5vdGVzLWluc2VydC1hZnRlci1kcmF3ZXJzIG5pbA0K ICAiTm9uLW5pbCBtZWFucyBpbnNlcnQgc3RhdGUgY2hhbmdlIG5vdGVzIGFmdGVyIGFueSBkcmF3 ZXJzIGluIGVudHJ5Lg0KT25seSB0aGUgZHJhd2VycyB0aGF0ICppbW1lZGlhdGVseSogZm9sbG93 IHRoZSBoZWFkbGluZSBhbmQgdGhlDQpkZWFkbGluZS9zY2hlZHVsZWQgbGluZSBhcmUgc2tpcHBl ZC4NCldoZW4gbmlsLCBpbnNlcnQgbm90ZXMgcmlnaHQgYWZ0ZXIgdGhlIGhlYWRpbmcgYW5kIHBl cmhhcHMgdGhlIGxpbmUNCndpdGggZGVhZGxpbmUvc2NoZWR1bGluZyBpZiBwcmVzZW50Lg0KDQpU aGlzIHZhcmlhYmxlIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgYG9yZy1sb2ctaW50by1kcmF3ZXIn IGlzDQpzZXQuIg0KICA6Z3JvdXAgJ29yZy10b2RvDQogIDpncm91cCAnb3JnLXByb2dyZXNzDQog IDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1sb2ctc3RhdGVzLW9yZGVyLXJldmVy c2VkIHQNCiAgIk5vbi1uaWwgbWVhbnMgdGhlIGxhdGVzdCBzdGF0ZSBub3RlIHdpbGwgYmUgZGly ZWN0bHkgYWZ0ZXIgaGVhZGluZy4NCldoZW4gbmlsLCB0aGUgc3RhdGUgY2hhbmdlIG5vdGVzIHdp bGwgYmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGltZS4NCg0KVGhpcyBvcHRpb24gY2FuIGFsc28g YmUgc2V0IHdpdGggb24gYSBwZXItZmlsZS1iYXNpcyB3aXRoDQoNCiAgICMrU1RBUlRVUDogbG9n c3RhdGVzcmV2ZXJzZWQNCiAgICMrU1RBUlRVUDogbm9sb2dzdGF0ZXNyZXZlcnNlZCINCiAgOmdy b3VwICdvcmctdG9kbw0KICA6Z3JvdXAgJ29yZy1wcm9ncmVzcw0KICA6dHlwZSAnYm9vbGVhbikN Cg0KKGRlZmN1c3RvbSBvcmctdG9kby1yZXBlYXQtdG8tc3RhdGUgbmlsDQogICJUaGUgVE9ETyBz dGF0ZSB0byB3aGljaCBhIHJlcGVhdGVyIHNob3VsZCByZXR1cm4gdGhlIHJlcGVhdGluZyB0YXNr Lg0KQnkgZGVmYXVsdCB0aGlzIGlzIHRoZSBmaXJzdCB0YXNrIGluIGEgVE9ETyBzZXF1ZW5jZSwg b3IgdGhlIHByZXZpb3VzIHN0YXRlDQppbiBhIFRPRE9fVFlQIHNldC4gIEJ1dCB5b3UgY2FuIHNw ZWNpZnkgYW5vdGhlciB0YXNrIGhlcmUuDQphbHRlcm5hdGl2ZWx5LCBzZXQgdGhlIDpSRVBFQVRf VE9fU1RBVEU6IHByb3BlcnR5IG9mIHRoZSBlbnRyeS4iDQogIDpncm91cCAnb3JnLXRvZG8NCiAg OnZlcnNpb24gIjI0LjEiDQogIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJIZWFkIG9mIHNl cXVlbmNlIiBuaWwpDQoJCSAoc3RyaW5nIDp0YWcgIlNwZWNpZmljIHN0YXRlIikpKQ0KDQooZGVm Y3VzdG9tIG9yZy1sb2ctcmVwZWF0ICd0aW1lDQogICJOb24tbmlsIG1lYW5zIHJlY29yZCBtb3Zp bmcgdGhyb3VnaCB0aGUgRE9ORSBzdGF0ZSB3aGVuIHRyaWdnZXJpbmcgcmVwZWF0Lg0KQW4gYXV0 by1yZXBlYXRpbmcgdGFzayBpcyBpbW1lZGlhdGVseSBzd2l0Y2hlZCBiYWNrIHRvIFRPRE8gd2hl bg0KbWFya2VkIERPTkUuICBJZiB5b3UgYXJlIG5vdCBsb2dnaW5nIHN0YXRlIGNoYW5nZXMgKGJ5 IGFkZGluZyBcIkBcIg0Kb3IgXCIhXCIgdG8gdGhlIFRPRE8ga2V5d29yZCBkZWZpbml0aW9uKSwg b3Igc2V0IGBvcmctbG9nLWRvbmUnIHRvDQpyZWNvcmQgYSBjbG9zaW5nIG5vdGUsIHRoZXJlIHdp bGwgYmUgbm8gcmVjb3JkIG9mIHRoZSB0YXNrIG1vdmluZw0KdGhyb3VnaCBET05FLiAgVGhpcyB2 YXJpYWJsZSBmb3JjZXMgdGFraW5nIGEgbm90ZSBhbnl3YXkuDQoNCm5pbCAgICAgRG9uJ3QgZm9y Y2UgYSByZWNvcmQNCnRpbWUgICAgUmVjb3JkIGEgdGltZSBzdGFtcA0Kbm90ZSAgICBQcm9tcHQg Zm9yIGEgbm90ZSBhbmQgYWRkIGl0IHdpdGggdGVtcGxhdGUgYG9yZy1sb2ctbm90ZS1oZWFkaW5n cycNCg0KVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggb24gYSBwZXItZmlsZS1iYXNp cyB3aXRoDQoNCiAgICMrU1RBUlRVUDogbm9sb2dyZXBlYXQNCiAgICMrU1RBUlRVUDogbG9ncmVw ZWF0DQogICAjK1NUQVJUVVA6IGxvZ25vdGVyZXBlYXQNCg0KWW91IGNhbiBoYXZlIGxvY2FsIGxv Z2dpbmcgc2V0dGluZ3MgZm9yIGEgc3VidHJlZSBieSBzZXR0aW5nIHRoZSBMT0dHSU5HDQpwcm9w ZXJ0eSB0byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBrZXl3b3Jkcy4iDQogIDpncm91cCAnb3JnLXRv ZG8NCiAgOmdyb3VwICdvcmctcHJvZ3Jlc3MNCiAgOnR5cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6 dGFnICJEb24ndCBmb3JjZSBhIHJlY29yZCIgbmlsKQ0KCSAgKGNvbnN0IDp0YWcgIkZvcmNlIHJl Y29yZGluZyB0aGUgRE9ORSBzdGF0ZSIgdGltZSkNCgkgIChjb25zdCA6dGFnICJGb3JjZSByZWNv cmRpbmcgYSBub3RlIHdpdGggdGhlIERPTkUgc3RhdGUiIG5vdGUpKSkNCg0KDQooZGVmZ3JvdXAg b3JnLXByaW9yaXRpZXMgbmlsDQogICJQcmlvcml0aWVzIGluIE9yZy1tb2RlLiINCiAgOnRhZyAi T3JnIFByaW9yaXRpZXMiDQogIDpncm91cCAnb3JnLXRvZG8pDQoNCihkZWZjdXN0b20gb3JnLWVu YWJsZS1wcmlvcml0eS1jb21tYW5kcyB0DQogICJOb24tbmlsIG1lYW5zIHByaW9yaXR5IGNvbW1h bmRzIGFyZSBhY3RpdmUuDQpXaGVuIG5pbCwgdGhlc2UgY29tbWFuZHMgd2lsbCBiZSBkaXNhYmxl ZCwgc28gdGhhdCB5b3UgbmV2ZXIgYWNjaWRlbnRhbGx5DQpzZXQgYSBwcmlvcml0eS4iDQogIDpn cm91cCAnb3JnLXByaW9yaXRpZXMNCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZjdXN0b20gb3Jn LWhpZ2hlc3QtcHJpb3JpdHkgP0ENCiAgIlRoZSBoaWdoZXN0IHByaW9yaXR5IG9mIFRPRE8gaXRl bXMuICBBIGNoYXJhY3RlciBsaWtlID9BLCA/QiBldGMuDQpNdXN0IGhhdmUgYSBzbWFsbGVyIEFT Q0lJIG51bWJlciB0aGFuIGBvcmctbG93ZXN0LXByaW9yaXR5Jy4iDQogIDpncm91cCAnb3JnLXBy aW9yaXRpZXMNCiAgOnR5cGUgJ2NoYXJhY3RlcikNCg0KKGRlZmN1c3RvbSBvcmctbG93ZXN0LXBy aW9yaXR5ID9DDQogICJUaGUgbG93ZXN0IHByaW9yaXR5IG9mIFRPRE8gaXRlbXMuICBBIGNoYXJh Y3RlciBsaWtlID9BLCA/QiBldGMuDQpNdXN0IGhhdmUgYSBsYXJnZXIgQVNDSUkgbnVtYmVyIHRo YW4gYG9yZy1oaWdoZXN0LXByaW9yaXR5Jy4iDQogIDpncm91cCAnb3JnLXByaW9yaXRpZXMNCiAg OnR5cGUgJ2NoYXJhY3RlcikNCg0KKGRlZmN1c3RvbSBvcmctZGVmYXVsdC1wcmlvcml0eSA/Qg0K ICAiVGhlIGRlZmF1bHQgcHJpb3JpdHkgb2YgVE9ETyBpdGVtcy4NClRoaXMgaXMgdGhlIHByaW9y aXR5IGFuIGl0ZW0gZ2V0cyBpZiBubyBleHBsaWNpdCBwcmlvcml0eSBpcyBnaXZlbi4NCldoZW4g c3RhcnRpbmcgdG8gY3ljbGUgb24gYW4gZW1wdHkgcHJpb3JpdHkgdGhlIGZpcnN0IHN0ZXAgaW4g dGhlIGN5Y2xlDQpkZXBlbmRzIG9uIGBvcmctcHJpb3JpdHktc3RhcnQtY3ljbGUtd2l0aC1kZWZh dWx0Jy4gIFRoZSByZXN1bHRpbmcgZmlyc3QNCnN0ZXAgcHJpb3JpdHkgbXVzdCBub3QgZXhjZWVk IHRoZSByYW5nZSBmcm9tIGBvcmctaGlnaGVzdC1wcmlvcml0eScgdG8NCmBvcmctbG93ZXN0LXBy aW9yaXR5JyB3aGljaCBtZWFucyB0aGF0IGBvcmctZGVmYXVsdC1wcmlvcml0eScgaGFzIHRvIGJl DQppbiB0aGlzIHJhbmdlIGV4Y2x1c2l2ZSBvciBpbmNsdXNpdmUgdGhlIHJhbmdlIGJvdW5kYXJp ZXMuICBFbHNlIHRoZQ0KZmlyc3Qgc3RlcCByZWZ1c2VzIHRvIHNldCB0aGUgZGVmYXVsdCBhbmQg dGhlIHNlY29uZCB3aWxsIGZhbGwgYmFjaw0KdG8gKGRlcGVuZGluZyBvbiB0aGUgY29tbWFuZCB1 c2VkKSB0aGUgaGlnaGVzdCBvciBsb3dlc3QgcHJpb3JpdHkuIg0KICA6Z3JvdXAgJ29yZy1wcmlv cml0aWVzDQogIDp0eXBlICdjaGFyYWN0ZXIpDQoNCihkZWZjdXN0b20gb3JnLXByaW9yaXR5LXN0 YXJ0LWN5Y2xlLXdpdGgtZGVmYXVsdCB0DQogICJOb24tbmlsIG1lYW5zIHN0YXJ0IHdpdGggZGVm YXVsdCBwcmlvcml0eSB3aGVuIHN0YXJ0aW5nIHRvIGN5Y2xlLg0KV2hlbiB0aGlzIGlzIG5pbCwg dGhlIGZpcnN0IHN0ZXAgaW4gdGhlIGN5Y2xlIHdpbGwgYmUgKGRlcGVuZGluZyBvbiB0aGUNCmNv bW1hbmQgdXNlZCkgb25lIGhpZ2hlciBvciBsb3dlciB0aGFuIHRoZSBkZWZhdWx0IHByaW9yaXR5 Lg0KU2VlIGFsc28gYG9yZy1kZWZhdWx0LXByaW9yaXR5Jy4iDQogIDpncm91cCAnb3JnLXByaW9y aXRpZXMNCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZjdXN0b20gb3JnLWdldC1wcmlvcml0eS1m dW5jdGlvbiBuaWwNCiAgIkZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHByaW9yaXR5IGZyb20gYSBz dHJpbmcuDQpUaGUgc3RyaW5nIGlzIG5vcm1hbGx5IHRoZSBoZWFkbGluZS4gIElmIHRoaXMgaXMg bmlsIE9yZyBjb21wdXRlcyB0aGUNCnByaW9yaXR5IGZyb20gdGhlIHByaW9yaXR5IGNvb2tpZSBs aWtlIFsjQV0gaW4gdGhlIGhlYWRsaW5lLiAgSXQgcmV0dXJucw0KYW4gaW50ZWdlciwgaW5jcmVh c2luZyBieSAxMDAwIGZvciBlYWNoIHByaW9yaXR5IGxldmVsLg0KVGhlIHVzZXIgY2FuIHNldCBh IGRpZmZlcmVudCBmdW5jdGlvbiBoZXJlLCB3aGljaCBzaG91bGQgdGFrZSBhIHN0cmluZw0KYXMg YW4gYXJndW1lbnQgYW5kIHJldHVybiB0aGUgbnVtZXJpYyBwcmlvcml0eS4iDQogIDpncm91cCAn b3JnLXByaW9yaXRpZXMNCiAgOnZlcnNpb24gIjI0LjEiDQogIDp0eXBlICcoY2hvaWNlDQoJICAo Y29uc3QgbmlsKQ0KCSAgKGZ1bmN0aW9uKSkpDQoNCihkZWZncm91cCBvcmctdGltZSBuaWwNCiAg Ik9wdGlvbnMgY29uY2VybmluZyB0aW1lIHN0YW1wcyBhbmQgZGVhZGxpbmVzIGluIE9yZy1tb2Rl LiINCiAgOnRhZyAiT3JnIFRpbWUiDQogIDpncm91cCAnb3JnKQ0KDQooZGVmY3VzdG9tIG9yZy1p bnNlcnQtbGFiZWxlZC10aW1lc3RhbXBzLWF0LXBvaW50IG5pbA0KICAiTm9uLW5pbCBtZWFucyBT Q0hFRFVMRUQgYW5kIERFQURMSU5FIHRpbWVzdGFtcHMgYXJlIGluc2VydGVkIGF0IHBvaW50Lg0K V2hlbiBuaWwsIHRoZXNlIGxhYmVsZWQgdGltZSBzdGFtcHMgYXJlIGZvcmNlcyBpbnRvIHRoZSBz ZWNvbmQgbGluZSBvZiBhbg0KZW50cnksIGp1c3QgYWZ0ZXIgdGhlIGhlYWRsaW5lLiAgV2hlbiBz Y2hlZHVsaW5nIGZyb20gdGhlIGdsb2JhbCBUT0RPIGxpc3QsDQp0aGUgdGltZSBzdGFtcCB3aWxs IGFsd2F5cyBiZSBmb3JjZWQgaW50byB0aGUgc2Vjb25kIGxpbmUuIg0KICA6Z3JvdXAgJ29yZy10 aW1lDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY29uc3Qgb3JnLXRpbWUtc3RhbXAtZm9ybWF0 cyAnKCI8JVktJW0tJWQgJWE+IiAuICI8JVktJW0tJWQgJWEgJUg6JU0+IikNCiAgIkZvcm1hdHMg Zm9yIGBmb3JtYXQtdGltZS1zdHJpbmcnIHdoaWNoIGFyZSB1c2VkIGZvciB0aW1lIHN0YW1wcy4N Ckl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBjaGFuZ2UgdGhpcyBjb25zdGFudC4iKQ0KDQooZGVm Y3VzdG9tIG9yZy10aW1lLXN0YW1wLXJvdW5kaW5nLW1pbnV0ZXMgJygwIDUpDQogICJOdW1iZXIg b2YgbWludXRlcyB0byByb3VuZCB0aW1lIHN0YW1wcyB0by4NClRoZXNlIGFyZSB0d28gdmFsdWVz LCB0aGUgZmlyc3QgYXBwbGllcyB3aGVuIGZpcnN0IGNyZWF0aW5nIGEgdGltZSBzdGFtcC4NClRo ZSBzZWNvbmQgYXBwbGllcyB3aGVuIGNoYW5naW5nIGl0IHdpdGggdGhlIGNvbW1hbmRzIGBTLXVw JyBhbmQgYFMtZG93bicuDQpXaGVuIGNoYW5naW5nIHRoZSB0aW1lIHN0YW1wLCB0aGlzIG1lYW5z IHRoYXQgaXQgd2lsbCBjaGFuZ2UgaW4gc3RlcHMNCm9mIE4gbWludXRlcywgYXMgZ2l2ZW4gYnkg dGhlIHNlY29uZCB2YWx1ZS4NCg0KV2hlbiBhIHNldHRpbmcgaXMgMCBvciAxLCBpbnNlcnQgdGhl IHRpbWUgdW5tb2RpZmllZC4gIFVzZWZ1bCByb3VuZGluZw0KbnVtYmVycyBzaG91bGQgYmUgZmFj dG9ycyBvZiA2MCwgc28gZm9yIGV4YW1wbGUgNSwgMTAsIDE1Lg0KDQpXaGVuIHRoaXMgaXMgbGFy Z2VyIHRoYW4gMSwgeW91IGNhbiBzdGlsbCBmb3JjZSBhbiBleGFjdCB0aW1lIHN0YW1wIGJ5IHVz aW5nDQphIGRvdWJsZSBwcmVmaXggYXJndW1lbnQgdG8gYSB0aW1lIHN0YW1wIGNvbW1hbmQgbGlr ZSBgQy1jIC4nIG9yIGBDLWMgIScsDQphbmQgYnkgdXNpbmcgYSBwcmVmaXggYXJnIHRvIGBTLXVw L2Rvd24nIHRvIHNwZWNpZnkgdGhlIGV4YWN0IG51bWJlcg0Kb2YgbWludXRlcyB0byBzaGlmdC4i DQogIDpncm91cCAnb3JnLXRpbWUNCiAgOmdldCAjJyhsYW1iZGEgKHZhcikgOyBNYWtlIHN1cmUg Ym90aCBlbGVtZW50cyBhcmUgdGhlcmUNCgkgICAoaWYgKGludGVnZXJwIChkZWZhdWx0LXZhbHVl IHZhcikpDQoJICAgICAgIChsaXN0IChkZWZhdWx0LXZhbHVlIHZhcikgNSkNCgkgICAgIChkZWZh dWx0LXZhbHVlIHZhcikpKQ0KICA6dHlwZSAnKGxpc3QNCgkgIChpbnRlZ2VyIDp0YWcgIndoZW4g aW5zZXJ0aW5nIHRpbWVzIikNCgkgIChpbnRlZ2VyIDp0YWcgIndoZW4gbW9kaWZ5aW5nIHRpbWVz IikpKQ0KDQo7OyBOb3JtYWxpemUgb2xkIGN1c3RvbWl6YXRpb25zIG9mIHRoaXMgdmFyaWFibGUu DQood2hlbiAoaW50ZWdlcnAgb3JnLXRpbWUtc3RhbXAtcm91bmRpbmctbWludXRlcykNCiAgKHNl dHEgb3JnLXRpbWUtc3RhbXAtcm91bmRpbmctbWludXRlcw0KCShsaXN0IG9yZy10aW1lLXN0YW1w LXJvdW5kaW5nLW1pbnV0ZXMNCgkgICAgICBvcmctdGltZS1zdGFtcC1yb3VuZGluZy1taW51dGVz KSkpDQoNCihkZWZjdXN0b20gb3JnLWRpc3BsYXktY3VzdG9tLXRpbWVzIG5pbA0KICAiTm9uLW5p bCBtZWFucyBvdmVybGF5IGN1c3RvbSBmb3JtYXRzIG92ZXIgYWxsIHRpbWUgc3RhbXBzLg0KVGhl IGZvcm1hdHMgYXJlIGRlZmluZWQgdGhyb3VnaCB0aGUgdmFyaWFibGUgYG9yZy10aW1lLXN0YW1w LWN1c3RvbS1mb3JtYXRzJy4NClRvIHR1cm4gdGhpcyBvbiBvbiBhIHBlci1maWxlIGJhc2lzLCBp bnNlcnQgYW55d2hlcmUgaW4gdGhlIGZpbGU6DQogICAjK1NUQVJUVVA6IGN1c3RvbXRpbWUiDQog IDpncm91cCAnb3JnLXRpbWUNCiAgOnNldCAnc2V0LWRlZmF1bHQNCiAgOnR5cGUgJ3NleHApDQoo bWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy1kaXNwbGF5LWN1c3RvbS10aW1lcykNCg0K KGRlZmN1c3RvbSBvcmctdGltZS1zdGFtcC1jdXN0b20tZm9ybWF0cw0KICAnKCI8JW0vJWQvJXkg JWE+IiAuICI8JW0vJWQvJXkgJWEgJUg6JU0+IikgOyBhbWVyaWNhbg0KICAiQ3VzdG9tIGZvcm1h dHMgZm9yIHRpbWUgc3RhbXBzLiAgU2VlIGBmb3JtYXQtdGltZS1zdHJpbmcnIGZvciB0aGUgc3lu dGF4Lg0KVGhlc2UgYXJlIG92ZXJsYWlkIG92ZXIgdGhlIGRlZmF1bHQgSVNPIGZvcm1hdCBpZiB0 aGUgdmFyaWFibGUNCmBvcmctZGlzcGxheS1jdXN0b20tdGltZXMnIGlzIHNldC4gIFRpbWUgbGlr ZSAlSDolTSBzaG91bGQgYmUgYXQgdGhlDQplbmQgb2YgdGhlIHNlY29uZCBmb3JtYXQuICBUaGUg Y3VzdG9tIGZvcm1hdHMgYXJlIGFsc28gaG9ub3JlZCBieSBleHBvcnQNCmNvbW1hbmRzLCBpZiBj dXN0b20gdGltZSBkaXNwbGF5IGlzIHR1cm5lZCBvbiBhdCB0aGUgdGltZSBvZiBleHBvcnQuIg0K ICA6Z3JvdXAgJ29yZy10aW1lDQogIDp0eXBlICdzZXhwKQ0KDQooZGVmdW4gb3JnLXRpbWUtc3Rh bXAtZm9ybWF0ICgmb3B0aW9uYWwgbG9uZyBpbmFjdGl2ZSkNCiAgIkdldCB0aGUgcmlnaHQgZm9y bWF0IGZvciBhIHRpbWUgc3RyaW5nLiINCiAgKGxldCAoKGYgKGlmIGxvbmcgKGNkciBvcmctdGlt ZS1zdGFtcC1mb3JtYXRzKQ0KCSAgICAgKGNhciBvcmctdGltZS1zdGFtcC1mb3JtYXRzKSkpKQ0K ICAgIChpZiBpbmFjdGl2ZQ0KCShjb25jYXQgIlsiIChzdWJzdHJpbmcgZiAxIC0xKSAiXSIpDQog ICAgICBmKSkpDQoNCihkZWZjdXN0b20gb3JnLXRpbWUtY2xvY2tzdW0tZm9ybWF0DQogICcoOmRh eXMgIiVkZCAiIDpob3VycyAiJWQiIDpyZXF1aXJlLWhvdXJzIHQgOm1pbnV0ZXMgIjolMDJkIiA6 cmVxdWlyZS1taW51dGVzIHQpDQogICJUaGUgZm9ybWF0IHN0cmluZyB1c2VkIHdoZW4gY3JlYXRp bmcgQ0xPQ0tTVU0gbGluZXMuDQpUaGlzIGlzIGFsc28gdXNlZCB3aGVuIE9yZyBtb2RlIGdlbmVy YXRlcyBhIHRpbWUgZHVyYXRpb24uDQoNClRoZSB2YWx1ZSBjYW4gYmUgYSBzaW5nbGUgZm9ybWF0 IHN0cmluZyBjb250YWluaW5nIHR3bw0KJS1zZXF1ZW5jZXMsIHdoaWNoIHdpbGwgYmUgZmlsbGVk IHdpdGggdGhlIG51bWJlciBvZiBob3VycyBhbmQNCm1pbnV0ZXMgaW4gdGhhdCBvcmRlci4NCg0K QWx0ZXJuYXRpdmVseSwgdGhlIHZhbHVlIGNhbiBiZSBhIHBsaXN0IGFzc29jaWF0aW5nIGFueSBv ZiB0aGUNCmtleXMgOnllYXJzLCA6bW9udGhzLCA6d2Vla3MsIDpkYXlzLCA6aG91cnMgb3IgOm1p bnV0ZXMgd2l0aA0KZm9ybWF0IHN0cmluZ3MuICBUaGUgdGltZSBkdXJhdGlvbiBpcyBmb3JtYXR0 ZWQgdXNpbmcgb25seSB0aGUNCnRpbWUgY29tcG9uZW50cyB0aGF0IGFyZSBuZWVkZWQgYW5kIGNv bmNhdGVuYXRpbmcgdGhlIHJlc3VsdHMuDQpJZiBhIHRpbWUgdW5pdCBpbiBhYnNlbnQsIGl0IGZh bGxzIGJhY2sgdG8gdGhlIG5leHQgc21hbGxlc3QNCnVuaXQuDQoNClRoZSBrZXlzIDpyZXF1aXJl LXllYXJzLCA6cmVxdWlyZS1tb250aHMsIDpyZXF1aXJlLWRheXMsDQo6cmVxdWlyZS13ZWVrcywg OnJlcXVpcmUtaG91cnMsIDpyZXF1aXJlLW1pbnV0ZXMgYXJlIGFsc28NCm1lYW5pbmdmdWwuICBB IG5vbi1uaWwgdmFsdWUgZm9yIHRoZXNlIGtleXMgaW5kaWNhdGVzIHRoYXQgdGhlDQpjb3JyZXNw b25kaW5nIHRpbWUgY29tcG9uZW50IHNob3VsZCBhbHdheXMgYmUgaW5jbHVkZWQsIGV2ZW4gaWYN Cml0cyB2YWx1ZSBpcyAwLg0KDQoNCkZvciBleGFtcGxlLA0KDQogIFwoOmRheXMgXCIlZGRcIiA6 aG91cnMgXCIlZFwiIDpyZXF1aXJlLWhvdXJzIHQgOm1pbnV0ZXMgXCI6JTAyZFwiDQogICAgOnJl cXVpcmUtbWludXRlcyB0KQ0KDQptZWFucyBkdXJhdGlvbnMgbG9uZ2VyIHRoYW4gYSBkYXkgd2ls bCBiZSBleHByZXNzZWQgaW4gZGF5cywNCmhvdXJzIGFuZCBtaW51dGVzLCBhbmQgZHVyYXRpb25z IGxlc3MgdGhhbiBhIGRheSB3aWxsIGFsd2F5cyBiZQ0KZXhwcmVzc2VkIGluIGhvdXJzIGFuZCBt aW51dGVzIChldmVuIGZvciBkdXJhdGlvbnMgbGVzcyB0aGFuIGFuDQpob3VyKS4NCg0KVGhlIHZh bHVlDQoNCiAgXCg6ZGF5cyBcIiVkZFwiIDptaW51dGVzIFwiJWRtXCIpDQoNCm1lYW5zIGR1cmF0 aW9ucyBsb25nZXIgdGhhbiBhIGRheSB3aWxsIGJlIGV4cHJlc3NlZCBpbiBkYXlzIGFuZA0KbWlu dXRlcywgYW5kIGR1cmF0aW9ucyBsZXNzIHRoYW4gYSBkYXkgd2lsbCBiZSBleHByZXNzZWQgZW50 aXJlbHkNCmluIG1pbnV0ZXMgKGV2ZW4gZm9yIGR1cmF0aW9ucyBsb25nZXIgdGhhbiBhbiBob3Vy KS4iDQogIDpncm91cCAnb3JnLXRpbWUNCiAgOmdyb3VwICdvcmctY2xvY2sNCiAgOnZlcnNpb24g IjI0LjQiDQogIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOC4wIikNCiAgOnR5cGUgJyhjaG9p Y2UgKHN0cmluZyA6dGFnICJGb3JtYXQgc3RyaW5nIikNCgkJIChzZXQgOnRhZyAiUGxpc3QiDQoJ CSAgICAgIChncm91cCA6aW5saW5lIHQgKGNvbnN0IDp0YWcgIlllYXJzIiA6eWVhcnMpDQoJCQkg ICAgIChzdHJpbmcgOnRhZyAiRm9ybWF0IHN0cmluZyIpKQ0KCQkgICAgICAoZ3JvdXAgOmlubGlu ZSB0DQoJCQkgICAgIChjb25zdCA6dGFnICJBbHdheXMgc2hvdyB5ZWFycyIgOnJlcXVpcmUteWVh cnMpDQoJCQkgICAgIChjb25zdCB0KSkNCgkJICAgICAgKGdyb3VwIDppbmxpbmUgdCAoY29uc3Qg OnRhZyAiTW9udGhzIiA6bW9udGhzKQ0KCQkJICAgICAoc3RyaW5nIDp0YWcgIkZvcm1hdCBzdHJp bmciKSkNCgkJICAgICAgKGdyb3VwIDppbmxpbmUgdA0KCQkJICAgICAoY29uc3QgOnRhZyAiQWx3 YXlzIHNob3cgbW9udGhzIiA6cmVxdWlyZS1tb250aHMpDQoJCQkgICAgIChjb25zdCB0KSkNCgkJ ICAgICAgKGdyb3VwIDppbmxpbmUgdCAoY29uc3QgOnRhZyAiV2Vla3MiIDp3ZWVrcykNCgkJCSAg ICAgKHN0cmluZyA6dGFnICJGb3JtYXQgc3RyaW5nIikpDQoJCSAgICAgIChncm91cCA6aW5saW5l IHQNCgkJCSAgICAgKGNvbnN0IDp0YWcgIkFsd2F5cyBzaG93IHdlZWtzIiA6cmVxdWlyZS13ZWVr cykNCgkJCSAgICAgKGNvbnN0IHQpKQ0KCQkgICAgICAoZ3JvdXAgOmlubGluZSB0IChjb25zdCA6 dGFnICJEYXlzIiA6ZGF5cykNCgkJCSAgICAgKHN0cmluZyA6dGFnICJGb3JtYXQgc3RyaW5nIikp DQoJCSAgICAgIChncm91cCA6aW5saW5lIHQNCgkJCSAgICAgKGNvbnN0IDp0YWcgIkFsd2F5cyBz aG93IGRheXMiIDpyZXF1aXJlLWRheXMpDQoJCQkgICAgIChjb25zdCB0KSkNCgkJICAgICAgKGdy b3VwIDppbmxpbmUgdCAoY29uc3QgOnRhZyAiSG91cnMiIDpob3VycykNCgkJCSAgICAgKHN0cmlu ZyA6dGFnICJGb3JtYXQgc3RyaW5nIikpDQoJCSAgICAgIChncm91cCA6aW5saW5lIHQNCgkJCSAg ICAgKGNvbnN0IDp0YWcgIkFsd2F5cyBzaG93IGhvdXJzIiA6cmVxdWlyZS1ob3VycykNCgkJCSAg ICAgKGNvbnN0IHQpKQ0KCQkgICAgICAoZ3JvdXAgOmlubGluZSB0IChjb25zdCA6dGFnICJNaW51 dGVzIiA6bWludXRlcykNCgkJCSAgICAgKHN0cmluZyA6dGFnICJGb3JtYXQgc3RyaW5nIikpDQoJ CSAgICAgIChncm91cCA6aW5saW5lIHQNCgkJCSAgICAgKGNvbnN0IDp0YWcgIkFsd2F5cyBzaG93 IG1pbnV0ZXMiIDpyZXF1aXJlLW1pbnV0ZXMpDQoJCQkgICAgIChjb25zdCB0KSkpKSkNCg0KKGRl ZmN1c3RvbSBvcmctdGltZS1jbG9ja3N1bS11c2UtZnJhY3Rpb25hbCBuaWwNCiAgIldoZW4gbm9u LW5pbCwgXFxbb3JnLWNsb2NrLWRpc3BsYXldIHVzZXMgZnJhY3Rpb25hbCB0aW1lcy4NClNlZSBg b3JnLXRpbWUtY2xvY2tzdW0tZm9ybWF0JyBmb3IgbW9yZSBvbiB0aW1lIGNsb2NrIGZvcm1hdHMu Ig0KICA6Z3JvdXAgJ29yZy10aW1lDQogIDpncm91cCAnb3JnLWNsb2NrDQogIDp2ZXJzaW9uICIy NC4zIg0KICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmctdGltZS1jbG9ja3N1bS11 c2UtZWZmb3J0LWR1cmF0aW9ucyBuaWwNCiAgIldoZW4gbm9uLW5pbCwgXFxbb3JnLWNsb2NrLWRp c3BsYXldIHVzZXMgZWZmb3J0IGR1cmF0aW9ucy4NCkUuZy4gYnkgZGVmYXVsdCwgb25lIGRheSBp cyBjb25zaWRlcmVkIHRvIGJlIGEgOCBob3VycyBlZmZvcnQsDQpzbyBhIHRhc2sgdGhhdCBoYXMg YmVlbiBjbG9ja2VkIGZvciAxNiBob3VycyB3aWxsIGJlIGRpc3BsYXllZA0KYXMgZHVyaW5nIDIg ZGF5cyBpbiB0aGUgY2xvY2sgZGlzcGxheSBvciBpbiB0aGUgY2xvY2t0YWJsZS4NCg0KU2VlIGBv cmctZWZmb3J0LWR1cmF0aW9ucycgb24gaG93IHRvIHNldCBlZmZvcnQgZHVyYXRpb25zDQphbmQg YG9yZy10aW1lLWNsb2Nrc3VtLWZvcm1hdCcgZm9yIG1vcmUgb24gdGltZSBjbG9jayBmb3JtYXRz LiINCiAgOmdyb3VwICdvcmctdGltZQ0KICA6Z3JvdXAgJ29yZy1jbG9jaw0KICA6dmVyc2lvbiAi MjQuNCINCiAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAuICI4LjAiKQ0KICA6dHlwZSAnYm9vbGVh bikNCg0KKGRlZmN1c3RvbSBvcmctdGltZS1jbG9ja3N1bS1mcmFjdGlvbmFsLWZvcm1hdCAiJS4y ZiINCiAgIlRoZSBmb3JtYXQgc3RyaW5nIHVzZWQgd2hlbiBjcmVhdGluZyBDTE9DS1NVTSBsaW5l cywNCm9yIHdoZW4gT3JnIG1vZGUgZ2VuZXJhdGVzIGEgdGltZSBkdXJhdGlvbiwgaWYNCmBvcmct dGltZS1jbG9ja3N1bS11c2UtZnJhY3Rpb25hbCcgaXMgZW5hYmxlZC4NCg0KVGhlIHZhbHVlIGNh biBiZSBhIHNpbmdsZSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5pbmcgb25lDQolLXNlcXVlbmNlLCB3 aGljaCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBudW1iZXIgb2YgaG91cnMgYXMNCmEgZmxvYXQu DQoNCkFsdGVybmF0aXZlbHksIHRoZSB2YWx1ZSBjYW4gYmUgYSBwbGlzdCBhc3NvY2lhdGluZyBh bnkgb2YgdGhlDQprZXlzIDp5ZWFycywgOm1vbnRocywgOndlZWtzLCA6ZGF5cywgOmhvdXJzIG9y IDptaW51dGVzIHdpdGgNCmEgZm9ybWF0IHN0cmluZy4gIFRoZSB0aW1lIGR1cmF0aW9uIGlzIGZv cm1hdHRlZCB1c2luZyB0aGUNCmxhcmdlc3QgdGltZSB1bml0IHdoaWNoIGdpdmVzIGEgbm9uLXpl cm8gaW50ZWdlciBwYXJ0LiAgSWYgYWxsDQpzcGVjaWZpZWQgZm9ybWF0cyBoYXZlIHplcm8gaW50 ZWdlciBwYXJ0LCB0aGUgc21hbGxlc3QgdGltZSB1bml0DQppcyB1c2VkLiINCiAgOmdyb3VwICdv cmctdGltZQ0KICA6dHlwZSAnKGNob2ljZSAoc3RyaW5nIDp0YWcgIkZvcm1hdCBzdHJpbmciKQ0K CQkgKHNldCAoZ3JvdXAgOmlubGluZSB0IChjb25zdCA6dGFnICJZZWFycyIgOnllYXJzKQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nIDp0YWcgIkZvcm1hdCBzdHJpbmciKSkN CgkJICAgICAgKGdyb3VwIDppbmxpbmUgdCAoY29uc3QgOnRhZyAiTW9udGhzIiA6bW9udGhzKQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nIDp0YWcgIkZvcm1hdCBzdHJpbmci KSkNCgkJICAgICAgKGdyb3VwIDppbmxpbmUgdCAoY29uc3QgOnRhZyAiV2Vla3MiIDp3ZWVrcykN CgkJCSAgICAgKHN0cmluZyA6dGFnICJGb3JtYXQgc3RyaW5nIikpDQoJCSAgICAgIChncm91cCA6 aW5saW5lIHQgKGNvbnN0IDp0YWcgIkRheXMiIDpkYXlzKQ0KCQkJICAgICAoc3RyaW5nIDp0YWcg IkZvcm1hdCBzdHJpbmciKSkNCgkJICAgICAgKGdyb3VwIDppbmxpbmUgdCAoY29uc3QgOnRhZyAi SG91cnMiIDpob3VycykNCgkJCSAgICAgKHN0cmluZyA6dGFnICJGb3JtYXQgc3RyaW5nIikpDQoJ CSAgICAgIChncm91cCA6aW5saW5lIHQgKGNvbnN0IDp0YWcgIk1pbnV0ZXMiIDptaW51dGVzKQ0K CQkJICAgICAoc3RyaW5nIDp0YWcgIkZvcm1hdCBzdHJpbmciKSkpKSkNCg0KKGRlZmN1c3RvbSBv cmctZGVhZGxpbmUtd2FybmluZy1kYXlzIDE0DQogICJOdW1iZXIgb2YgZGF5cyBiZWZvcmUgZXhw aXJhdGlvbiBkdXJpbmcgd2hpY2ggYSBkZWFkbGluZSBiZWNvbWVzIGFjdGl2ZS4NClRoaXMgdmFy aWFibGUgZ292ZXJucyB0aGUgZGlzcGxheSBpbiBzcGFyc2UgdHJlZXMgYW5kIGluIHRoZSBhZ2Vu ZGEuDQpXaGVuIDAgb3IgbmVnYXRpdmUsIGl0IG1lYW5zIHVzZSB0aGlzIG51bWJlciAodGhlIGFi c29sdXRlIHZhbHVlIG9mIGl0KQ0KZXZlbiBpZiBhIGRlYWRsaW5lIGhhcyBhIGRpZmZlcmVudCBp bmRpdmlkdWFsIGxlYWQgdGltZSBzcGVjaWZpZWQuDQoNCkN1c3RvbSBjb21tYW5kcyBjYW4gc2V0 IHRoaXMgdmFyaWFibGUgaW4gdGhlIG9wdGlvbnMgc2VjdGlvbi4iDQogIDpncm91cCAnb3JnLXRp bWUNCiAgOmdyb3VwICdvcmctYWdlbmRhLWRhaWx5L3dlZWtseQ0KICA6dHlwZSAnaW50ZWdlcikN Cg0KKGRlZmN1c3RvbSBvcmctc2NoZWR1bGVkLWRlbGF5LWRheXMgMA0KICAiTnVtYmVyIG9mIGRh eXMgYmVmb3JlIGEgc2NoZWR1bGVkIGl0ZW0gYmVjb21lcyBhY3RpdmUuDQpUaGlzIHZhcmlhYmxl IGdvdmVybnMgdGhlIGRpc3BsYXkgaW4gc3BhcnNlIHRyZWVzIGFuZCBpbiB0aGUgYWdlbmRhLg0K VGhlIGRlZmF1bHQgdmFsdWUgKGkuZS4gMCkgbWVhbnM6IGRvbid0IGRlbGF5IHNjaGVkdWxlZCBp dGVtLg0KV2hlbiBuZWdhdGl2ZSwgaXQgbWVhbnMgdXNlIHRoaXMgbnVtYmVyICh0aGUgYWJzb2x1 dGUgdmFsdWUgb2YgaXQpDQpldmVuIGlmIGEgc2NoZWR1bGVkIGl0ZW0gaGFzIGEgZGlmZmVyZW50 IGluZGl2aWR1YWwgZGVsYXkgdGltZQ0Kc3BlY2lmaWVkLg0KDQpDdXN0b20gY29tbWFuZHMgY2Fu IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBvcHRpb25zIHNlY3Rpb24uIg0KICA6Z3JvdXAgJ29y Zy10aW1lDQogIDpncm91cCAnb3JnLWFnZW5kYS1kYWlseS93ZWVrbHkNCiAgOnZlcnNpb24gIjI0 LjQiDQogIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOC4wIikNCiAgOnR5cGUgJ2ludGVnZXIp DQoNCihkZWZjdXN0b20gb3JnLXJlYWQtZGF0ZS1wcmVmZXItZnV0dXJlIHQNCiAgIk5vbi1uaWwg bWVhbnMgYXNzdW1lIGZ1dHVyZSBmb3IgaW5jb21wbGV0ZSBkYXRlIGlucHV0IGZyb20gdXNlci4N ClRoaXMgYWZmZWN0cyB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnM6DQoxLiBUaGUgdXNlciBnaXZl cyBhIG1vbnRoIGJ1dCBub3QgYSB5ZWFyLg0KICAgRm9yIGV4YW1wbGUsIGlmIGl0IGlzIEFwcmls IGFuZCB5b3UgZW50ZXIgXCJmZWIgMlwiLCB0aGlzIHdpbGwgYmUgcmVhZA0KICAgYXMgRmViIDIs ICpuZXh0KiB5ZWFyLiAgXCJNYXkgNVwiLCBob3dldmVyLCB3aWxsIGJlIHRoaXMgeWVhci4NCjIu IFRoZSB1c2VyIGdpdmVzIGEgZGF5LCBidXQgbm8gbW9udGguDQogICBGb3IgZXhhbXBsZSwgaWYg dG9kYXkgaXMgdGhlIDE1dGgsIGFuZCB5b3UgZW50ZXIgXCIzXCIsIE9yZy1tb2RlIHdpbGwNCiAg IHJlYWQgdGhpcyBhcyB0aGUgdGhpcmQgb2YgKm5leHQqIG1vbnRoLiAgSG93ZXZlciwgaWYgeW91 IGVudGVyIFwiMTdcIiwNCiAgIGl0IHdpbGwgYmUgY29uc2lkZXJlZCBhcyAqdGhpcyogbW9udGgu DQoNCklmIHlvdSBzZXQgdGhpcyB2YXJpYWJsZSB0byB0aGUgc3ltYm9sIGB0aW1lJywgdGhlbiBh bHNvIHRoZSBmb2xsb3dpbmcNCndpbGwgd29yazoNCg0KMy4gSWYgdGhlIHVzZXIgZ2l2ZXMgYSB0 aW1lLg0KICAgSWYgdGhlIHRpbWUgaXMgYmVmb3JlIG5vdywgaXQgd2lsbCBiZSBpbnRlcnByZXRl ZCBhcyB0b21vcnJvdy4NCg0KQ3VycmVudGx5IG5vbmUgb2YgdGhpcyB3b3JrcyBmb3IgSVNPIHdl ZWsgc3BlY2lmaWNhdGlvbnMuDQoNCldoZW4gdGhpcyBvcHRpb24gaXMgbmlsLCB0aGUgY3VycmVu dCBkYXksIG1vbnRoIGFuZCB5ZWFyIHdpbGwgYWx3YXlzIGJlDQp1c2VkIGFzIGRlZmF1bHRzLg0K DQpTZWUgYWxzbyBgb3JnLWFnZW5kYS1qdW1wLXByZWZlci1mdXR1cmUnLiINCiAgOmdyb3VwICdv cmctdGltZQ0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIk5ldmVyIiBuaWwpDQoJ ICAoY29uc3QgOnRhZyAiQ2hlY2sgbW9udGggYW5kIGRheSIgdCkNCgkgIChjb25zdCA6dGFnICJD aGVjayBtb250aCwgZGF5LCBhbmQgdGltZSIgdGltZSkpKQ0KDQooZGVmY3VzdG9tIG9yZy1hZ2Vu ZGEtanVtcC1wcmVmZXItZnV0dXJlICdvcmctcmVhZC1kYXRlLXByZWZlci1mdXR1cmUNCiAgIlNo b3VsZCB0aGUgYWdlbmRhIGp1bXAgY29tbWFuZCBwcmVmZXIgdGhlIGZ1dHVyZSBmb3IgaW5jb21w bGV0ZSBkYXRlcz8NClRoZSBkZWZhdWx0IGlzIHRvIGRvIHRoZSBzYW1lIGFzIGNvbmZpZ3VyZWQg aW4gYG9yZy1yZWFkLWRhdGUtcHJlZmVyLWZ1dHVyZScuDQpCdXQgeW91IGNhbiBhbHNvIHNldCBh IGRldmlhdGluZyB2YWx1ZSBoZXJlLg0KVGhpcyBtYXkgdCBvciBuaWwsIG9yIHRoZSBzeW1ib2wg YG9yZy1yZWFkLWRhdGUtcHJlZmVyLWZ1dHVyZScuIg0KICA6Z3JvdXAgJ29yZy1hZ2VuZGENCiAg Omdyb3VwICdvcmctdGltZQ0KICA6dmVyc2lvbiAiMjQuMSINCiAgOnR5cGUgJyhjaG9pY2UNCgkg IChjb25zdCA6dGFnICJVc2Ugb3JnLXJlYWQtZGF0ZS1wcmVmZXItZnV0dXJlIg0KCQkgb3JnLXJl YWQtZGF0ZS1wcmVmZXItZnV0dXJlKQ0KCSAgKGNvbnN0IDp0YWcgIk5ldmVyIiBuaWwpDQoJICAo Y29uc3QgOnRhZyAiQWx3YXlzIiB0KSkpDQoNCihkZWZjdXN0b20gb3JnLXJlYWQtZGF0ZS1mb3Jj ZS1jb21wYXRpYmxlLWRhdGVzIHQNCiAgIlNob3VsZCBkYXRlL3RpbWUgcHJvbXB0IGZvcmNlIGRh dGVzIHRoYXQgYXJlIGd1YXJhbnRlZWQgdG8gd29yayBpbiBFbWFjcz8NCg0KRGVwZW5kaW5nIG9u IHRoZSBzeXN0ZW0gRW1hY3MgaXMgcnVubmluZyBvbiwgY2VydGFpbiBkYXRlcyBjYW5ub3QNCmJl IHJlcHJlc2VudGVkIHdpdGggdGhlIHR5cGUgdXNlZCBpbnRlcm5hbGx5IHRvIHJlcHJlc2VudCB0 aW1lLg0KRGF0ZXMgYmV0d2VlbiAxOTcwLTEtMSBhbmQgMjAzOC0xLTEgY2FuIGFsd2F5cyBiZSBy ZXByZXNlbnRlZA0KY29ycmVjdGx5LiAgU29tZSBzeXN0ZW1zIGFsbG93IGZvciBlYXJsaWVyIGRh dGVzLCBzb21lIGZvciBsYXRlciwNCnNvbWUgZm9yIGJvdGguICBPbmUgd2F5IHRvIGZpbmQgb3V0 IGl0IHRvIGluc2VydCBhbnkgZGF0ZSBpbnRvIGFuDQpPcmcgYnVmZmVyLCBwdXR0aW5nIHRoZSBj dXJzb3Igb24gdGhlIHllYXIgYW5kIGhpdHRpbmcgUy11cCBhbmQNClMtZG93biB0byB0ZXN0IHRo ZSByYW5nZS4NCg0KV2hlbiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byB0LCB0aGUgZGF0ZS90aW1l IHByb21wdCB3aWxsIG5vdCBsZXQNCnlvdSBzcGVjaWZ5IGRhdGVzIG91dHNpZGUgdGhlIDE5NzAt MjAzNyByYW5nZSwgc28gaXQgaXMgY2VydGFpbiB0aGF0DQp0aGVzZSBkYXRlcyB3aWxsIHdvcmsg aW4gd2hhdGV2ZXIgdmVyc2lvbiBvZiBFbWFjcyB5b3UgYXJlDQpydW5uaW5nLCBhbmQgYWxzbyB0 aGF0IHlvdSBjYW4gbW92ZSBhIGZpbGUgZnJvbSBvbmUgRW1hY3MgaW1wbGVtZW50YXRpb24NCnRv IGFub3RoZXIuICBXSGVuZXZlciBPcmcgaXMgZm9yY2luZyB0aGUgeWVhciBmb3IgeW91LCBpdCB3 aWxsIGRpc3BsYXkNCmEgbWVzc2FnZSBhbmQgYmVlcC4NCg0KV2hlbiB0aGlzIHZhcmlhYmxlIGlz IG5pbCwgT3JnIHdpbGwgY2hlY2sgaWYgdGhlIGRhdGUgaXMNCnJlcHJlc2VudGFibGUgaW4gdGhl IHNwZWNpZmljIEVtYWNzIGltcGxlbWVudGF0aW9uIHlvdSBhcmUgdXNpbmcuDQpJZiBub3QsIGl0 IHdpbGwgZm9yY2UgYSB5ZWFyLCB1c3VhbGx5IHRoZSBjdXJyZW50IHllYXIsIGFuZCBiZWVwDQp0 byByZW1pbmQgeW91LiAgQ3VycmVudGx5IHRoaXMgc2V0dGluZyBpcyBub3QgcmVjb21tZW5kZWQg YmVjYXVzZQ0KdGhlIGxpa2VsaWhvb2QgdGhhdCB5b3Ugd2lsbCBvcGVuIHlvdXIgT3JnIGZpbGVz IGluIGFuIEVtYWNzIHRoYXQNCmhhcyBsaW1pdGVkIGRhdGUgcmFuZ2UgaXMgbm90IG5lZ2xpZ2li bGUuDQoNCkEgd29ya2Fyb3VuZCBmb3IgdGhpcyBwcm9ibGVtIGlzIHRvIHVzZSBkaWFyeSBzZXhw IGRhdGVzIGZvciB0aW1lDQpzdGFtcHMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlLiINCiAgOmdyb3Vw ICdvcmctdGltZQ0KICA6dmVyc2lvbiAiMjQuMSINCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZj dXN0b20gb3JnLXJlYWQtZGF0ZS1kaXNwbGF5LWxpdmUgdA0KICAiTm9uLW5pbCBtZWFucyBkaXNw bGF5IGN1cnJlbnQgaW50ZXJwcmV0YXRpb24gb2YgZGF0ZSBwcm9tcHQgbGl2ZS4NClRoaXMgZGlz cGxheSB3aWxsIGJlIGluIGFuIG92ZXJsYXksIGluIHRoZSBtaW5pYnVmZmVyLiINCiAgOmdyb3Vw ICdvcmctdGltZQ0KICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmctcmVhZC1kYXRl LXBvcHVwLWNhbGVuZGFyIHQNCiAgIk5vbi1uaWwgbWVhbnMgcG9wIHVwIGEgY2FsZW5kYXIgd2hl biBwcm9tcHRpbmcgZm9yIGEgZGF0ZS4NCkluIHRoZSBjYWxlbmRhciwgdGhlIGRhdGUgY2FuIGJl IHNlbGVjdGVkIHdpdGggbW91c2UtMS4gIEhvd2V2ZXIsIHRoZQ0KbWluaWJ1ZmZlciB3aWxsIGFs c28gYmUgYWN0aXZlLCBhbmQgeW91IGNhbiBzaW1wbHkgZW50ZXIgdGhlIGRhdGUgYXMgd2VsbC4N CldoZW4gbmlsLCBvbmx5IHRoZSBtaW5pYnVmZmVyIHdpbGwgYmUgYXZhaWxhYmxlLiINCiAgOmdy b3VwICdvcmctdGltZQ0KICA6dHlwZSAnYm9vbGVhbikNCihvcmctZGVmdmFyYWxpYXMgJ29yZy1w b3B1cC1jYWxlbmRhci1mb3ItZGF0ZS1wcm9tcHQNCiAgJ29yZy1yZWFkLWRhdGUtcG9wdXAtY2Fs ZW5kYXIpDQoNCihtYWtlLW9ic29sZXRlLXZhcmlhYmxlDQogJ29yZy1yZWFkLWRhdGUtbWluaWJ1 ZmZlci1zZXR1cC1ob29rDQogIlNldCBgb3JnLXJlYWQtZGF0ZS1taW5pYnVmZmVyLWxvY2FsLW1h cCcgaW5zdGVhZC4iICIyNC40IikNCihkZWZjdXN0b20gb3JnLXJlYWQtZGF0ZS1taW5pYnVmZmVy LXNldHVwLWhvb2sgbmlsDQogICJIb29rIHRvIGJlIHVzZWQgdG8gc2V0IHVwIGtleXMgZm9yIHRo ZSBkYXRlL3RpbWUgaW50ZXJmYWNlLg0KQWRkIGtleSBkZWZpbml0aW9ucyB0byBgbWluaWJ1ZmZl ci1sb2NhbC1tYXAnLCB3aGljaCB3aWxsIGJlIGENCnRlbXBvcmFyeSBjb3B5Lg0KDQpXQVJOSU5H OiBUaGlzIG9wdGlvbiBpcyBvYnNvbGV0ZSwgeW91IHNob3VsZCB1c2UNCmBvcmctcmVhZC1kYXRl LW1pbmlidWZmZXItbG9jYWwtbWFwJyB0byBzZXQgdXAga2V5cy4iDQogIDpncm91cCAnb3JnLXRp bWUNCiAgOnR5cGUgJ2hvb2spDQoNCihkZWZjdXN0b20gb3JnLWV4dGVuZC10b2RheS11bnRpbCAw DQogICJUaGUgaG91ciB3aGVuIHlvdXIgZGF5IHJlYWxseSBlbmRzLiAgTXVzdCBiZSBhbiBpbnRl Z2VyLg0KVGhpcyBoYXMgaW5mbHVlbmNlIGZvciB0aGUgZm9sbG93aW5nIGFwcGxpY2F0aW9uczoN Ci0gV2hlbiBzd2l0Y2hpbmcgdGhlIGFnZW5kYSB0byBcInRvZGF5XCIuICBJdCBpdCBpcyBzdGls bCBlYXJsaWVyIHRoYW4NCiAgdGhlIHRpbWUgZ2l2ZW4gaGVyZSwgdGhlIGRheSByZWNvZ25pemVk IGFzIFRPREFZIGlzIGFjdHVhbGx5IHllc3RlcmRheS4NCi0gV2hlbiBhIGRhdGUgaXMgcmVhZCBm cm9tIHRoZSB1c2VyIGFuZCBpdCBpcyBzdGlsbCBiZWZvcmUgdGhlIHRpbWUgZ2l2ZW4NCiAgaGVy ZSwgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgeWVzdGVy ZGF5LCAyMzo1OS4NCiAgQWxzbywgdGltZXN0YW1wcyBpbnNlcnRlZCBpbiBjYXB0dXJlIHRlbXBs YXRlcyBmb2xsb3cgdGhpcyBydWxlLg0KDQpJTVBPUlRBTlQ6ICBUaGlzIGlzIGEgZmVhdHVyZSB3 aG9zZSBpbXBsZW1lbnRhdGlvbiBpcyBhbmQgbGlrZWx5IHdpbGwNCnJlbWFpbiBpbmNvbXBsZXRl LiAgUmVhbGx5LCBpdCBpcyBvbmx5IGhlcmUgYmVjYXVzZSBwYXN0IG1pZG5pZ2h0IHNlZW1zIHRv DQpiZSB0aGUgZmF2b3JpdGUgd29ya2luZyB0aW1lIG9mIEpvaG4gV2llZ2xleSA6LSkiDQogIDpn cm91cCAnb3JnLXRpbWUNCiAgOnR5cGUgJ2ludGVnZXIpDQoNCihkZWZjdXN0b20gb3JnLXVzZS1l ZmZlY3RpdmUtdGltZSBuaWwNCiAgIklmIG5vbi1uaWwsIGNvbnNpZGVyIGBvcmctZXh0ZW5kLXRv ZGF5LXVudGlsJyB3aGVuIGNyZWF0aW5nIHRpbWVzdGFtcHMuDQpGb3IgZXhhbXBsZSwgaWYgYG9y Zy1leHRlbmQtdG9kYXktdW50aWwnIGlzIDgsIGFuZCBpdCdzIDRhbSwgdGhlbiB0aGUNClwiZWZm ZWN0aXZlIHRpbWVcIiBvZiBhbnkgdGltZXN0YW1wcyBiZXR3ZWVuIG1pZG5pZ2h0IGFuZCA4YW0g d2lsbCBiZQ0KMjM6NTkgb2YgdGhlIHByZXZpb3VzIGRheS4iDQogIDpncm91cCAnb3JnLXRpbWUN CiAgOnZlcnNpb24gIjI0LjEiDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy11 c2UtbGFzdC1jbG9jay1vdXQtdGltZS1hcy1lZmZlY3RpdmUtdGltZSBuaWwNCiAgIldoZW4gbm9u LW5pbCwgdXNlIHRoZSBsYXN0IGNsb2NrIG91dCB0aW1lIGZvciBgb3JnLXRvZG8nLg0KTm90ZSB0 aGF0IHRoaXMgb3B0aW9uIGhhcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGNvbWJpbmVkIHVzZSBvZg0K YG9yZy11c2UtZWZmZWN0aXZlLXRpbWUnIGFuZCBgb3JnLWV4dGVuZC10b2RheS11bnRpbCcuIg0K ICA6Z3JvdXAgJ29yZy10aW1lDQogIDp2ZXJzaW9uICIyNC40Ig0KICA6cGFja2FnZS12ZXJzaW9u ICcoT3JnIC4gIjguMCIpDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1lZGl0 LXRpbWVzdGFtcC1kb3duLW1lYW5zLWxhdGVyIG5pbA0KICAiTm9uLW5pbCBtZWFucyBTLWRvd24g d2lsbCBpbmNyZWFzZSB0aGUgdGltZSBpbiBhIHRpbWUgc3RhbXAuDQpXaGVuIG5pbCwgUy11cCB3 aWxsIGluY3JlYXNlLiINCiAgOmdyb3VwICdvcmctdGltZQ0KICA6dHlwZSAnYm9vbGVhbikNCg0K KGRlZmN1c3RvbSBvcmctY2FsZW5kYXItZm9sbG93LXRpbWVzdGFtcC1jaGFuZ2UgdA0KICAiTm9u LW5pbCBtZWFucyBtYWtlIHRoZSBjYWxlbmRhciB3aW5kb3cgZm9sbG93IHRpbWVzdGFtcCBjaGFu Z2VzLg0KV2hlbiBhIHRpbWVzdGFtcCBpcyBtb2RpZmllZCBhbmQgdGhlIGNhbGVuZGFyIHdpbmRv dyBpcyB2aXNpYmxlLCBpdCB3aWxsIGJlDQptb3ZlZCB0byB0aGUgbmV3IGRhdGUuIg0KICA6Z3Jv dXAgJ29yZy10aW1lDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmZ3JvdXAgb3JnLXRhZ3Mgbmls DQogICJPcHRpb25zIGNvbmNlcm5pbmcgdGFncyBpbiBPcmctbW9kZS4iDQogIDp0YWcgIk9yZyBU YWdzIg0KICA6Z3JvdXAgJ29yZykNCg0KKGRlZmN1c3RvbSBvcmctdGFnLWFsaXN0IG5pbA0KICAi TGlzdCBvZiB0YWdzIGFsbG93ZWQgaW4gT3JnLW1vZGUgZmlsZXMuDQpXaGVuIHRoaXMgbGlzdCBp cyBuaWwsIE9yZy1tb2RlIHdpbGwgYmFzZSBUQUcgaW5wdXQgb24gd2hhdCBpcyBhbHJlYWR5IGlu IHRoZQ0KYnVmZmVyLg0KVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgYW4gYWxpc3QsIHRo ZSBjYXIgb2YgZWFjaCBlbnRyeSBtdXN0IGJlIGENCmtleXdvcmQgYXMgYSBzdHJpbmcsIHRoZSBj ZHIgbWF5IGJlIGEgY2hhcmFjdGVyIHRoYXQgaXMgdXNlZCB0byBzZWxlY3QNCnRoYXQgdGFnIHRo cm91Z2ggdGhlIGZhc3QtdGFnLXNlbGVjdGlvbiBpbnRlcmZhY2UuDQpTZWUgdGhlIG1hbnVhbCBm b3IgZGV0YWlscy4iDQogIDpncm91cCAnb3JnLXRhZ3MNCiAgOnR5cGUgJyhyZXBlYXQNCgkgIChj aG9pY2UNCgkgICAoY29ucyAgIChzdHJpbmcgICAgOnRhZyAiVGFnIG5hbWUiKQ0KCQkgICAoY2hh cmFjdGVyIDp0YWcgIkFjY2VzcyBjaGFyIikpDQoJICAgKGxpc3QgOnRhZyAiU3RhcnQgcmFkaW8g Z3JvdXAiDQoJCSAoY29uc3QgOnN0YXJ0Z3JvdXApDQoJCSAob3B0aW9uIChzdHJpbmcgOnRhZyAi R3JvdXAgZGVzY3JpcHRpb24iKSkpDQoJICAgKGxpc3QgOnRhZyAiR3JvdXAgdGFncyBkZWxpbWl0 ZXIiDQoJCSAoY29uc3QgOmdyb3VwdGFncykpDQoJICAgKGxpc3QgOnRhZyAiRW5kIHJhZGlvIGdy b3VwIg0KCQkgKGNvbnN0IDplbmRncm91cCkNCgkJIChvcHRpb24gKHN0cmluZyA6dGFnICJHcm91 cCBkZXNjcmlwdGlvbiIpKSkNCgkgICAoY29uc3QgOnRhZyAiTmV3IGxpbmUiICg6bmV3bGluZSkp KSkpDQoNCihkZWZjdXN0b20gb3JnLXRhZy1wZXJzaXN0ZW50LWFsaXN0IG5pbA0KICAiTGlzdCBv ZiB0YWdzIHRoYXQgd2lsbCBhbHdheXMgYXBwZWFyIGluIGFsbCBPcmctbW9kZSBmaWxlcy4NClRo aXMgaXMgaW4gYWRkaXRpb24gdG8gYW55IGluIGJ1ZmZlciBzZXR0aW5ncyBvciBjdXN0b21pemF0 aW9ucw0Kb2YgYG9yZy10YWctYWxpc3QnLg0KV2hlbiB0aGlzIGxpc3QgaXMgbmlsLCBPcmctbW9k ZSB3aWxsIGJhc2UgVEFHIGlucHV0IG9uIGBvcmctdGFnLWFsaXN0Jy4NClRoZSB2YWx1ZSBvZiB0 aGlzIHZhcmlhYmxlIGlzIGFuIGFsaXN0LCB0aGUgY2FyIG9mIGVhY2ggZW50cnkgbXVzdCBiZSBh DQprZXl3b3JkIGFzIGEgc3RyaW5nLCB0aGUgY2RyIG1heSBiZSBhIGNoYXJhY3RlciB0aGF0IGlz IHVzZWQgdG8gc2VsZWN0DQp0aGF0IHRhZyB0aHJvdWdoIHRoZSBmYXN0LXRhZy1zZWxlY3Rpb24g aW50ZXJmYWNlLg0KU2VlIHRoZSBtYW51YWwgZm9yIGRldGFpbHMuDQpUbyBkaXNhYmxlIHRoZXNl IHRhZ3Mgb24gYSBwZXItZmlsZSBiYXNpcywgaW5zZXJ0IGFueXdoZXJlIGluIHRoZSBmaWxlOg0K ICAgIytTVEFSVFVQOiBub3B0YWciDQogIDpncm91cCAnb3JnLXRhZ3MNCiAgOnR5cGUgJyhyZXBl YXQNCgkgIChjaG9pY2UNCgkgICAoY29ucyAgIChzdHJpbmcgICAgOnRhZyAiVGFnIG5hbWUiKQ0K CQkgICAoY2hhcmFjdGVyIDp0YWcgIkFjY2VzcyBjaGFyIikpDQoJICAgKGNvbnN0IDp0YWcgIlN0 YXJ0IHJhZGlvIGdyb3VwIiAoOnN0YXJ0Z3JvdXApKQ0KCSAgIChjb25zdCA6dGFnICJHcm91cCB0 YWdzIGRlbGltaXRlciIgKDpncm91cHRhZ3MpKQ0KCSAgIChjb25zdCA6dGFnICJFbmQgcmFkaW8g Z3JvdXAiICg6ZW5kZ3JvdXApKQ0KCSAgIChjb25zdCA6dGFnICJOZXcgbGluZSIgKDpuZXdsaW5l KSkpKSkNCg0KKGRlZmN1c3RvbSBvcmctY29tcGxldGUtdGFncy1hbHdheXMtb2ZmZXItYWxsLWFn ZW5kYS10YWdzIG5pbA0KICAiSWYgbm9uLW5pbCwgYWx3YXlzIG9mZmVyIGNvbXBsZXRpb24gZm9y IGFsbCB0YWdzIG9mIGFsbCBhZ2VuZGEgZmlsZXMuDQpJbnN0ZWFkIG9mIGN1c3RvbWl6aW5nIHRo aXMgdmFyaWFibGUgZGlyZWN0bHksIHlvdSBtaWdodCB3YW50IHRvDQpzZXQgaXQgbG9jYWxseSBm b3IgY2FwdHVyZSBidWZmZXJzLCBiZWNhdXNlIHRoZXJlIG5vIGxpc3Qgb2YNCnRhZ3MgaW4gdGhh dCBmaWxlIGNhbiBiZSBjcmVhdGVkIGR5bmFtaWNhbGx5ICh0aGVyZSBhcmUgbm9uZSkuDQoNCiAg KGFkZC1ob29rICdvcmctY2FwdHVyZS1tb2RlLWhvb2sNCiAgICAgICAgICAgIChsYW1iZGEgKCkN CiAgICAgICAgICAgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZQ0KICAgICAgICAgICAgICAg ICAgICAnb3JnLWNvbXBsZXRlLXRhZ3MtYWx3YXlzLW9mZmVyLWFsbC1hZ2VuZGEtdGFncykNCiAg ICAgICAgICAgICAgICAgICB0KSkpIg0KICA6Z3JvdXAgJ29yZy10YWdzDQogIDp2ZXJzaW9uICIy NC4xIg0KICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZnZhciBvcmctZmlsZS10YWdzIG5pbA0KICAi TGlzdCBvZiB0YWdzIHRoYXQgY2FuIGJlIGluaGVyaXRlZCBieSBhbGwgZW50cmllcyBpbiB0aGUg ZmlsZS4NClRoZSB0YWdzIHdpbGwgYmUgaW5oZXJpdGVkIGlmIHRoZSB2YXJpYWJsZSBgb3JnLXVz ZS10YWctaW5oZXJpdGFuY2UnDQpzYXlzIHRoZXkgc2hvdWxkIGJlLg0KVGhpcyB2YXJpYWJsZSBp cyBwb3B1bGF0ZWQgZnJvbSAjK0ZJTEVUQUdTIGxpbmVzLiIpDQoNCihkZWZjdXN0b20gb3JnLXVz ZS1mYXN0LXRhZy1zZWxlY3Rpb24gJ2F1dG8NCiAgIk5vbi1uaWwgbWVhbnMgdXNlIGZhc3QgdGFn IHNlbGVjdGlvbiBzY2hlbWUuDQpUaGlzIGlzIGEgc3BlY2lhbCBpbnRlcmZhY2UgdG8gc2VsZWN0 IGFuZCBkZXNlbGVjdCB0YWdzIHdpdGggc2luZ2xlIGtleXMuDQpXaGVuIG5pbCwgZmFzdCBzZWxl Y3Rpb24gaXMgbmV2ZXIgdXNlZC4NCldoZW4gdGhlIHN5bWJvbCBgYXV0bycsIGZhc3Qgc2VsZWN0 aW9uIGlzIHVzZWQgaWYgYW5kIG9ubHkgaWYgc2VsZWN0aW9uDQpjaGFyYWN0ZXJzIGZvciB0YWdz IGhhdmUgYmVlbiBjb25maWd1cmVkLCBlaXRoZXIgdGhyb3VnaCB0aGUgdmFyaWFibGUNCmBvcmct dGFnLWFsaXN0JyBvciB0aHJvdWdoIGEgIytUQUdTIGxpbmUgaW4gdGhlIGJ1ZmZlci4NCldoZW4g dCwgZmFzdCBzZWxlY3Rpb24gaXMgYWx3YXlzIHVzZWQgYW5kIHNlbGVjdGlvbiBrZXlzIGFyZSBh c3NpZ25lZA0KYXV0b21hdGljYWxseSBpZiBuZWNlc3NhcnkuIg0KICA6Z3JvdXAgJ29yZy10YWdz DQogIDp0eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRhZyAiQWx3YXlzIiB0KQ0KCSAgKGNvbnN0 IDp0YWcgIk5ldmVyIiBuaWwpDQoJICAoY29uc3QgOnRhZyAiV2hlbiBzZWxlY3Rpb24gY2hhcmFj dGVycyBhcmUgY29uZmlndXJlZCIgYXV0bykpKQ0KDQooZGVmY3VzdG9tIG9yZy1mYXN0LXRhZy1z ZWxlY3Rpb24tc2luZ2xlLWtleSBuaWwNCiAgIk5vbi1uaWwgbWVhbnMgZmFzdCB0YWcgc2VsZWN0 aW9uIGV4aXRzIGFmdGVyIGZpcnN0IGNoYW5nZS4NCldoZW4gbmlsLCB5b3UgaGF2ZSB0byBwcmVz cyBSRVQgdG8gZXhpdCBpdC4NCkR1cmluZyBmYXN0IHRhZyBzZWxlY3Rpb24sIHlvdSBjYW4gdG9n Z2xlIHRoaXMgZmxhZyB3aXRoIGBDLWMnLg0KVGhpcyB2YXJpYWJsZSBjYW4gYWxzbyBoYXZlIHRo ZSB2YWx1ZSBgZXhwZXJ0Jy4gIEluIHRoaXMgY2FzZSwgdGhlIHdpbmRvdw0KZGlzcGxheWluZyB0 aGUgdGFncyBtZW51IGlzIG5vdCBldmVuIHNob3duLCB1bnRpbCB5b3UgcHJlc3MgQy1jIGFnYWlu LiINCiAgOmdyb3VwICdvcmctdGFncw0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcg Ik5vIiBuaWwpDQoJICAoY29uc3QgOnRhZyAiWWVzIiB0KQ0KCSAgKGNvbnN0IDp0YWcgIkV4cGVy dCIgZXhwZXJ0KSkpDQoNCihkZWZ2YXIgb3JnLWZhc3QtdGFnLXNlbGVjdGlvbi1pbmNsdWRlLXRv ZG8gbmlsDQogICJOb24tbmlsIG1lYW5zIGZhc3QgdGFncyBzZWxlY3Rpb24gaW50ZXJmYWNlIHdp bGwgYWxzbyBvZmZlciBUT0RPIHN0YXRlcy4NClRoaXMgaXMgYW4gdW5kb2N1bWVudGVkIGZlYXR1 cmUsIHlvdSBzaG91bGQgbm90IHJlbHkgb24gaXQuIikNCg0KKGRlZmN1c3RvbSBvcmctdGFncy1j b2x1bW4gKGlmIChmZWF0dXJlcCAneGVtYWNzKSAtNzYgLTc3KQ0KICAiVGhlIGNvbHVtbiB0byB3 aGljaCB0YWdzIHNob3VsZCBiZSBpbmRlbnRlZCBpbiBhIGhlYWRsaW5lLg0KSWYgdGhpcyBudW1i ZXIgaXMgcG9zaXRpdmUsIGl0IHNwZWNpZmllcyB0aGUgY29sdW1uLiAgSWYgaXQgaXMgbmVnYXRp dmUsDQppdCBtZWFucyB0aGF0IHRoZSB0YWdzIHNob3VsZCBiZSBmbHVzaHJpZ2h0IHRvIHRoYXQg Y29sdW1uLiAgRm9yIGV4YW1wbGUsDQotODAgd29ya3Mgd2VsbCBmb3IgYSBub3JtYWwgODAgY2hh cmFjdGVyIHNjcmVlbi4NCldoZW4gMCwgcGxhY2UgdGFncyBkaXJlY3RseSBhZnRlciBoZWFkbGlu ZSB0ZXh0LCB3aXRoIG9ubHkgb25lIHNwYWNlIGluDQpiZXR3ZWVuLiINCiAgOmdyb3VwICdvcmct dGFncw0KICA6dHlwZSAnaW50ZWdlcikNCg0KKGRlZmN1c3RvbSBvcmctYXV0by1hbGlnbi10YWdz IHQNCiAgIk5vbi1uaWwga2VlcHMgdGFncyBhbGlnbmVkIHdoZW4gbW9kaWZ5aW5nIGhlYWRsaW5l cy4NClNvbWUgb3BlcmF0aW9ucyAoaS5lLiBkZW1vdGluZykgY2hhbmdlIHRoZSBsZW5ndGggb2Yg YSBoZWFkbGluZSBhbmQNCnRoZXJlZm9yZSBzaGlmdCB0aGUgdGFncyBhcm91bmQuICBXaXRoIHRo aXMgb3B0aW9uIHR1cm5lZCBvbiwgYWZ0ZXINCmVhY2ggc3VjaCBvcGVyYXRpb24gdGhlIHRhZ3Mg YXJlIGFnYWluIGFsaWduZWQgdG8gYG9yZy10YWdzLWNvbHVtbicuIg0KICA6Z3JvdXAgJ29yZy10 YWdzDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy11c2UtdGFnLWluaGVyaXRh bmNlIHQNCiAgIk5vbi1uaWwgbWVhbnMgdGFncyBpbiBsZXZlbHMgYXBwbHkgYWxzbyBmb3Igc3Vi bGV2ZWxzLg0KV2hlbiBuaWwsIG9ubHkgdGhlIHRhZ3MgZGlyZWN0bHkgZ2l2ZW4gaW4gYSBzcGVj aWZpYyBsaW5lIGFwcGx5IHRoZXJlLg0KVGhpcyBtYXkgYWxzbyBiZSBhIGxpc3Qgb2YgdGFncyB0 aGF0IHNob3VsZCBiZSBpbmhlcml0ZWQsIG9yIGEgcmVnZXhwIHRoYXQNCm1hdGNoZXMgdGFncyB0 aGF0IHNob3VsZCBiZSBpbmhlcml0ZWQuICBBZGRpdGlvbmFsIGNvbnRyb2wgaXMgcG9zc2libGUN CndpdGggdGhlIHZhcmlhYmxlICBgb3JnLXRhZ3MtZXhjbHVkZS1mcm9tLWluaGVyaXRhbmNlJyB3 aGljaCBnaXZlcyBhbg0KZXhwbGljaXQgbGlzdCBvZiB0YWdzIHRvIGJlIGV4Y2x1ZGVkIGZyb20g aW5oZXJpdGFuY2UsIGV2ZW4gaWYgdGhlIHZhbHVlIG9mDQpgb3JnLXVzZS10YWctaW5oZXJpdGFu Y2UnIHdvdWxkIHNlbGVjdCBpdCBmb3IgaW5oZXJpdGFuY2UuDQoNCklmIHRoaXMgb3B0aW9uIGlz IHQsIGEgbWF0Y2ggZWFybHktb24gaW4gYSB0cmVlIGNhbiBsZWFkIHRvIGEgbGFyZ2UNCm51bWJl ciBvZiBtYXRjaGVzIGluIHRoZSBzdWJ0cmVlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBhZ2VuZGEg b3IgY3JlYXRpbmcNCmEgc3BhcnNlIHRyZWUuICBJZiB5b3Ugb25seSB3YW50IHRvIHNlZSB0aGUg Zmlyc3QgbWF0Y2ggaW4gYSB0cmVlIGR1cmluZw0KYSBzZWFyY2gsIGNoZWNrIG91dCB0aGUgdmFy aWFibGUgYG9yZy10YWdzLW1hdGNoLWxpc3Qtc3VibGV2ZWxzJy4iDQogIDpncm91cCAnb3JnLXRh Z3MNCiAgOnR5cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6dGFnICJOb3QiIG5pbCkNCgkgIChjb25z dCA6dGFnICJBbHdheXMiIHQpDQoJICAocmVwZWF0IDp0YWcgIlNwZWNpZmljIHRhZ3MiIChzdHJp bmcgOnRhZyAiVGFnIikpDQoJICAocmVnZXhwIDp0YWcgIlRhZ3MgbWF0Y2hlZCBieSByZWdleHAi KSkpDQoNCihkZWZjdXN0b20gb3JnLXRhZ3MtZXhjbHVkZS1mcm9tLWluaGVyaXRhbmNlIG5pbA0K ICAiTGlzdCBvZiB0YWdzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIGluaGVyaXRlZC4NClRoaXMgaXMg YSB3YXkgdG8gZXhjbHVkZSBhIGZldyB0YWdzIGZyb20gaW5oZXJpdGFuY2UuICBGb3Igd2F5IHRv IGRvDQp0aGUgb3Bwb3NpdGUsIHRvIGFjdGl2ZWx5IGFsbG93IGluaGVyaXRhbmNlIGZvciBzZWxl Y3RlZCB0YWdzLA0Kc2VlIHRoZSB2YXJpYWJsZSBgb3JnLXVzZS10YWctaW5oZXJpdGFuY2UnLiIN CiAgOmdyb3VwICdvcmctdGFncw0KICA6dHlwZSAnKHJlcGVhdCAoc3RyaW5nIDp0YWcgIlRhZyIp KSkNCg0KKGRlZnVuIG9yZy10YWctaW5oZXJpdC1wICh0YWcpDQogICJDaGVjayBpZiBUQUcgaXMg b25lIHRoYXQgc2hvdWxkIGJlIGluaGVyaXRlZC4iDQogIChjb25kDQogICAoKG1lbWJlciB0YWcg b3JnLXRhZ3MtZXhjbHVkZS1mcm9tLWluaGVyaXRhbmNlKSBuaWwpDQogICAoKGVxIG9yZy11c2Ut dGFnLWluaGVyaXRhbmNlIHQpIHQpDQogICAoKG5vdCBvcmctdXNlLXRhZy1pbmhlcml0YW5jZSkg bmlsKQ0KICAgKChzdHJpbmdwIG9yZy11c2UtdGFnLWluaGVyaXRhbmNlKQ0KICAgIChzdHJpbmct bWF0Y2ggb3JnLXVzZS10YWctaW5oZXJpdGFuY2UgdGFnKSkNCiAgICgobGlzdHAgb3JnLXVzZS10 YWctaW5oZXJpdGFuY2UpDQogICAgKG1lbWJlciB0YWcgb3JnLXVzZS10YWctaW5oZXJpdGFuY2Up KQ0KICAgKHQgKGVycm9yICJJbnZhbGlkIHNldHRpbmcgb2YgYG9yZy11c2UtdGFnLWluaGVyaXRh bmNlJyIpKSkpDQoNCihkZWZjdXN0b20gb3JnLXRhZ3MtbWF0Y2gtbGlzdC1zdWJsZXZlbHMgdA0K ICAiTm9uLW5pbCBtZWFucyBsaXN0IGFsc28gc3VibGV2ZWxzIG9mIGhlYWRsaW5lcyBtYXRjaGlu ZyBhIHNlYXJjaC4NClRoaXMgdmFyaWFibGUgYXBwbGllcyB0byB0YWdzL3Byb3BlcnR5IHNlYXJj aGVzLCBhbmQgYWxzbyB0byBzdHVjaw0KcHJvamVjdHMgYmVjYXVzZSB0aGlzIHNlYXJjaCBpcyBi YXNlZCBvbiBhIHRhZ3MgbWF0Y2ggYXMgd2VsbC4NCg0KV2hlbiBzZXQgdG8gdGhlIHN5bWJvbCBg aW5kZW50ZWQnLCBzdWJsZXZlbHMgYXJlIGluZGVudGVkIHdpdGgNCmxlYWRpbmcgZG90cy4NCg0K QmVjYXVzZSBvZiB0YWcgaW5oZXJpdGFuY2UgKHNlZSB2YXJpYWJsZSBgb3JnLXVzZS10YWctaW5o ZXJpdGFuY2UnKSwNCnRoZSBzdWJsZXZlbHMgb2YgYSBoZWFkbGluZSBtYXRjaGluZyBhIHRhZyBz ZWFyY2ggb2Z0ZW4gYWxzbyBtYXRjaA0KdGhlIHNhbWUgc2VhcmNoLiAgTGlzdGluZyBhbGwgb2Yg dGhlbSBjYW4gY3JlYXRlIHZlcnkgbG9uZyBsaXN0cy4NClNldHRpbmcgdGhpcyB2YXJpYWJsZSB0 byBuaWwgY2F1c2VzIHN1YnRyZWVzIG9mIGEgbWF0Y2ggdG8gYmUgc2tpcHBlZC4NCg0KVGhpcyB2 YXJpYWJsZSBpcyBzZW1pLW9ic29sZXRlIGFuZCBwcm9iYWJseSBzaG91bGQgYWx3YXlzIGJlIHRy dWUuICBJdA0KaXMgYmV0dGVyIHRvIGxpbWl0IGluaGVyaXRhbmNlIHRvIGNlcnRhaW4gdGFncyB1 c2luZyB0aGUgdmFyaWFibGVzDQpgb3JnLXVzZS10YWctaW5oZXJpdGFuY2UnIGFuZCBgb3JnLXRh Z3MtZXhjbHVkZS1mcm9tLWluaGVyaXRhbmNlJy4iDQogIDpncm91cCAnb3JnLXRhZ3MNCiAgOnR5 cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6dGFnICJObywgZG9uJ3QgbGlzdCB0aGVtIiBuaWwpDQoJ ICAoY29uc3QgOnRhZyAiWWVzLCBkbyBsaXN0IHRoZW0iIHQpDQoJICAoY29uc3QgOnRhZyAiTGlz dCB0aGVtLCBpbmRlbnRlZCB3aXRoIGxlYWRpbmcgZG90cyIgaW5kZW50ZWQpKSkNCg0KKGRlZmN1 c3RvbSBvcmctdGFncy1zb3J0LWZ1bmN0aW9uIG5pbA0KICAiV2hlbiBzZXQsIHRhZ3MgYXJlIHNv cnRlZCB1c2luZyB0aGlzIGZ1bmN0aW9uIGFzIGEgY29tcGFyYXRvci4iDQogIDpncm91cCAnb3Jn LXRhZ3MNCiAgOnR5cGUgJyhjaG9pY2UNCgkgIChjb25zdCA6dGFnICJObyBzb3J0aW5nIiBuaWwp DQoJICAoY29uc3QgOnRhZyAiQWxwaGFiZXRpY2FsIiBzdHJpbmc8KQ0KCSAgKGNvbnN0IDp0YWcg IlJldmVyc2UgYWxwaGFiZXRpY2FsIiBzdHJpbmc+KQ0KCSAgKGZ1bmN0aW9uIDp0YWcgIkN1c3Rv bSBmdW5jdGlvbiIgbmlsKSkpDQoNCihkZWZ2YXIgb3JnLXRhZ3MtaGlzdG9yeSBuaWwNCiAgIkhp c3Rvcnkgb2YgbWluaWJ1ZmZlciByZWFkcyBmb3IgdGFncy4iKQ0KKGRlZnZhciBvcmctbGFzdC10 YWdzLWNvbXBsZXRpb24tdGFibGUgbmlsDQogICJUaGUgbGFzdCB1c2VkIGNvbXBsZXRpb24gdGFi bGUgZm9yIHRhZ3MuIikNCihkZWZ2YXIgb3JnLWFmdGVyLXRhZ3MtY2hhbmdlLWhvb2sgbmlsDQog ICJIb29rIHRoYXQgaXMgcnVuIGFmdGVyIHRoZSB0YWdzIGluIGEgbGluZSBoYXZlIGNoYW5nZWQu IikNCg0KKGRlZmdyb3VwIG9yZy1wcm9wZXJ0aWVzIG5pbA0KICAiT3B0aW9ucyBjb25jZXJuaW5n IHByb3BlcnRpZXMgaW4gT3JnLW1vZGUuIg0KICA6dGFnICJPcmcgUHJvcGVydGllcyINCiAgOmdy b3VwICdvcmcpDQoNCihkZWZjdXN0b20gb3JnLXByb3BlcnR5LWZvcm1hdCAiJS0xMHMgJXMiDQog ICJIb3cgcHJvcGVydHkga2V5L3ZhbHVlIHBhaXJzIHNob3VsZCBiZSBmb3JtYXR0ZWQgYnkgYGlu ZGVudC1saW5lJy4NCldoZW4gYGluZGVudC1saW5lJyBoaXRzIGEgcHJvcGVydHkgZGVmaW5pdGlv biwgaXQgd2lsbCBmb3JtYXQgdGhlIGxpbmUNCmFjY29yZGluZyB0byB0aGlzIGZvcm1hdCwgbWFp bmx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZXMgYXJlDQpsaW5lZC11cCB3aXRoIHJlc3Bl Y3QgdG8gZWFjaCBvdGhlci4iDQogIDpncm91cCAnb3JnLXByb3BlcnRpZXMNCiAgOnR5cGUgJ3N0 cmluZykNCg0KKGRlZmN1c3RvbSBvcmctcHJvcGVydGllcy1wb3N0cHJvY2Vzcy1hbGlzdCBuaWwN CiAgIkFsaXN0IG9mIHByb3BlcnRpZXMgYW5kIGZ1bmN0aW9ucyB0byBhZGp1c3QgaW5zZXJ0ZWQg dmFsdWVzLg0KRWxlbWVudHMgb2YgdGhpcyBhbGlzdCBtdXN0IGJlIG9mIHRoZSBmb3JtDQoNCiAg KFtzdHJpbmddIFtmdW5jdGlvbl0pDQoNCndoZXJlIFtzdHJpbmddIG11c3QgYmUgYSBwcm9wZXJ0 eSBuYW1lIGFuZCBbZnVuY3Rpb25dIG11c3QgYmUgYQ0KbGFtYmRhIGV4cHJlc3Npb246IHRoaXMg bGFtYmRhIGV4cHJlc3Npb24gbXVzdCB0YWtlIG9uZSBhcmd1bWVudCwNCnRoZSB2YWx1ZSB0byBh ZGp1c3QsIGFuZCByZXR1cm4gdGhlIG5ldyB2YWx1ZSBhcyBhIHN0cmluZy4NCg0KRm9yIGV4YW1w bGUsIHRoaXMgZWxlbWVudCB3aWxsIGFsbG93IHRoZSBwcm9wZXJ0eSBcIlJlbWFpbmluZ1wiDQp0 byBiZSB1cGRhdGVkIHdydCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgXCJFZmZvcnRcIiBwcm9w ZXJ0eQ0KYW5kIHRoZSBjbG9jayBzdW1tYXJ5Og0KDQogKChcIlJlbWFpbmluZ1wiIChsYW1iZGEo dmFsdWUpDQogICAgICAgICAgICAgICAgICAgKGxldCAoKGNsb2Nrc3VtIChvcmctY2xvY2stc3Vt LWN1cnJlbnQtaXRlbSkpDQogICAgICAgICAgICAgICAgICAgICAgICAgKGVmZm9ydCAob3JnLWR1 cmF0aW9uLXN0cmluZy10by1taW51dGVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChvcmctZW50cnktZ2V0IChwb2ludCkgXCJFZmZvcnRcIikpKSkNCiAgICAgICAgICAgICAg ICAgICAgIChvcmctbWludXRlcy10by1jbG9ja3N1bS1zdHJpbmcgKC0gZWZmb3J0IGNsb2Nrc3Vt KSkpKSkpIg0KICA6Z3JvdXAgJ29yZy1wcm9wZXJ0aWVzDQogIDp2ZXJzaW9uICIyNC4xIg0KICA6 dHlwZSAnKGFsaXN0IDprZXktdHlwZSAoc3RyaW5nICAgICA6dGFnICJQcm9wZXJ0eSIpDQoJCTp2 YWx1ZS10eXBlIChmdW5jdGlvbiA6dGFnICJGdW5jdGlvbiIpKSkNCg0KKGRlZmN1c3RvbSBvcmct dXNlLXByb3BlcnR5LWluaGVyaXRhbmNlIG5pbA0KICAiTm9uLW5pbCBtZWFucyBwcm9wZXJ0aWVz IGFwcGx5IGFsc28gZm9yIHN1YmxldmVscy4NCg0KVGhpcyBzZXR0aW5nIGlzIGNoaWVmbHkgdXNl ZCBkdXJpbmcgcHJvcGVydHkgc2VhcmNoZXMuICBUdXJuaW5nIGl0IG9uIGNhbg0KY2F1c2Ugc2ln bmlmaWNhbnQgb3ZlcmhlYWQgd2hlbiBkb2luZyBhIHNlYXJjaCwgd2hpY2ggaXMgd2h5IGl0IGlz IG5vdA0Kb24gYnkgZGVmYXVsdC4NCg0KV2hlbiBuaWwsIG9ubHkgdGhlIHByb3BlcnRpZXMgZGly ZWN0bHkgZ2l2ZW4gaW4gdGhlIGN1cnJlbnQgZW50cnkgY291bnQuDQpXaGVuIHQsIGV2ZXJ5IHBy b3BlcnR5IGlzIGluaGVyaXRlZC4gIFRoZSB2YWx1ZSBtYXkgYWxzbyBiZSBhIGxpc3Qgb2YNCnBy b3BlcnRpZXMgdGhhdCBzaG91bGQgaGF2ZSBpbmhlcml0YW5jZSwgb3IgYSByZWd1bGFyIGV4cHJl c3Npb24gbWF0Y2hpbmcNCnByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgaW5oZXJpdGVkLg0KDQpI b3dldmVyLCBub3RlIHRoYXQgc29tZSBzcGVjaWFsIHByb3BlcnRpZXMgdXNlIGluaGVyaXRhbmNl IHVuZGVyIHNwZWNpYWwNCmNpcmN1bXN0YW5jZXMgKG5vdCBpbiBzZWFyY2hlcykuICBFeGFtcGxl cyBhcmUgQ0FURUdPUlksIEFSQ0hJVkUsIENPTFVNTlMsDQphbmQgdGhlIHByb3BlcnRpZXMgZW5k aW5nIGluIFwiX0FMTFwiIHdoZW4gdGhleSBhcmUgdXNlZCBhcyBkZXNjcmlwdG9yDQpmb3IgdmFs aWQgdmFsdWVzIG9mIGEgcHJvcGVydHkuDQoNCk5vdGUgZm9yIHByb2dyYW1tZXJzOg0KV2hlbiBx dWVyeWluZyBhbiBlbnRyeSB3aXRoIGBvcmctZW50cnktZ2V0JywgIHlvdSBjYW4gY29udHJvbCBp ZiBpbmhlcml0YW5jZQ0Kc2hvdWxkIGJlIHVzZWQuICBCeSBkZWZhdWx0LCBgb3JnLWVudHJ5LWdl dCcgbG9va3Mgb25seSBhdCB0aGUgbG9jYWwNCnByb3BlcnRpZXMuICBZb3UgY2FuIHJlcXVlc3Qg aW5oZXJpdGFuY2UgYnkgc2V0dGluZyB0aGUgaW5oZXJpdCBhcmd1bWVudA0KdG8gdCAodG8gZm9y Y2UgaW5oZXJpdGFuY2UpIG9yIHRvIGBzZWxlY3RpdmUnICh0byByZXNwZWN0IHRoZSBzZXR0aW5n DQppbiB0aGlzIHZhcmlhYmxlKS4iDQogIDpncm91cCAnb3JnLXByb3BlcnRpZXMNCiAgOnR5cGUg JyhjaG9pY2UNCgkgIChjb25zdCA6dGFnICJOb3QiIG5pbCkNCgkgIChjb25zdCA6dGFnICJBbHdh eXMiIHQpDQoJICAocmVwZWF0IDp0YWcgIlNwZWNpZmljIHByb3BlcnRpZXMiIChzdHJpbmcgOnRh ZyAiUHJvcGVydHkiKSkNCgkgIChyZWdleHAgOnRhZyAiUHJvcGVydGllcyBtYXRjaGVkIGJ5IHJl Z2V4cCIpKSkNCg0KKGRlZnVuIG9yZy1wcm9wZXJ0eS1pbmhlcml0LXAgKHByb3BlcnR5KQ0KICAi Q2hlY2sgaWYgUFJPUEVSVFkgaXMgb25lIHRoYXQgc2hvdWxkIGJlIGluaGVyaXRlZC4iDQogIChj b25kDQogICAoKGVxIG9yZy11c2UtcHJvcGVydHktaW5oZXJpdGFuY2UgdCkgdCkNCiAgICgobm90 IG9yZy11c2UtcHJvcGVydHktaW5oZXJpdGFuY2UpIG5pbCkNCiAgICgoc3RyaW5ncCBvcmctdXNl LXByb3BlcnR5LWluaGVyaXRhbmNlKQ0KICAgIChzdHJpbmctbWF0Y2ggb3JnLXVzZS1wcm9wZXJ0 eS1pbmhlcml0YW5jZSBwcm9wZXJ0eSkpDQogICAoKGxpc3RwIG9yZy11c2UtcHJvcGVydHktaW5o ZXJpdGFuY2UpDQogICAgKG1lbWJlciBwcm9wZXJ0eSBvcmctdXNlLXByb3BlcnR5LWluaGVyaXRh bmNlKSkNCiAgICh0IChlcnJvciAiSW52YWxpZCBzZXR0aW5nIG9mIGBvcmctdXNlLXByb3BlcnR5 LWluaGVyaXRhbmNlJyIpKSkpDQoNCihkZWZjdXN0b20gb3JnLWNvbHVtbnMtZGVmYXVsdC1mb3Jt YXQgIiUyNUlURU0gJVRPRE8gJTNQUklPUklUWSAlVEFHUyINCiAgIlRoZSBkZWZhdWx0IGNvbHVt biBmb3JtYXQsIGlmIG5vIG90aGVyIGZvcm1hdCBoYXMgYmVlbiBkZWZpbmVkLg0KVGhpcyB2YXJp YWJsZSBjYW4gYmUgc2V0IG9uIHRoZSBwZXItZmlsZSBiYXNpcyBieSBpbnNlcnRpbmcgYSBsaW5l DQoNCiMrQ09MVU1OUzogJTI1SVRFTSAuLi4uLiINCiAgOmdyb3VwICdvcmctcHJvcGVydGllcw0K ICA6dHlwZSAnc3RyaW5nKQ0KDQooZGVmY3VzdG9tIG9yZy1jb2x1bW5zLWVsbGlwc2VzICIuLiIN CiAgIlRoZSBlbGxpcHNlcyB0byBiZSB1c2VkIHdoZW4gYSBmaWVsZCBpbiBjb2x1bW4gdmlldyBp cyB0cnVuY2F0ZWQuDQpXaGVuIHRoaXMgaXMgdGhlIGVtcHR5IHN0cmluZywgYXMgbWFueSBjaGFy YWN0ZXJzIGFzIHBvc3NpYmxlIGFyZSBzaG93biwNCmJ1dCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8g dmlzdWFsIGluZGljYXRpb24gdGhhdCB0aGUgZmllbGQgaGFzIGJlZW4gdHJ1bmNhdGVkLg0KV2hl biB0aGlzIGlzIGEgc3RyaW5nIG9mIGxlbmd0aCBOLCB0aGUgbGFzdCBOIGNoYXJhY3RlcnMgb2Yg YSB0cnVuY2F0ZWQNCmZpZWxkIGFyZSByZXBsYWNlZCBieSB0aGlzIHN0cmluZy4gIElmIHRoZSBj b2x1bW4gaXMgbmFycm93ZXIgdGhhbiB0aGUNCmVsbGlwc2VzIHN0cmluZywgb25seSBwYXJ0IG9m IHRoZSBlbGxpcHNlcyBzdHJpbmcgd2lsbCBiZSBzaG93bi4iDQogIDpncm91cCAnb3JnLXByb3Bl cnRpZXMNCiAgOnR5cGUgJ3N0cmluZykNCg0KKGRlZmN1c3RvbSBvcmctY29sdW1ucy1tb2RpZnkt dmFsdWUtZm9yLWRpc3BsYXktZnVuY3Rpb24gbmlsDQogICJGdW5jdGlvbiB0aGF0IG1vZGlmaWVz IHZhbHVlcyBmb3IgZGlzcGxheSBpbiBjb2x1bW4gdmlldy4NCkZvciBleGFtcGxlLCBpdCBjYW4g YmUgdXNlZCB0byBjdXQgb3V0IGEgY2VydGFpbiBwYXJ0IGZyb20gYSB0aW1lIHN0YW1wLg0KVGhl IGZ1bmN0aW9uIG11c3QgdGFrZSAyIGFyZ3VtZW50czoNCg0KY29sdW1uLXRpdGxlICAgIFRoZSB0 aXRsZSBvZiB0aGUgY29sdW1uICgqbm90KiB0aGUgcHJvcGVydHkgbmFtZSkNCnZhbHVlICAgICAg ICAgICBUaGUgdmFsdWUgdGhhdCBzaG91bGQgYmUgbW9kaWZpZWQuDQoNClRoZSBmdW5jdGlvbiBz aG91bGQgcmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQsDQpvciBuaWwg aWYgdGhlIG5vcm1hbCB2YWx1ZSBzaG91bGQgYmUgdXNlZC4iDQogIDpncm91cCAnb3JnLXByb3Bl cnRpZXMNCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IG5pbCkgKGZ1bmN0aW9uKSkpDQoNCihkZWZj dXN0b20gb3JnLWVmZm9ydC1wcm9wZXJ0eSAiRWZmb3J0Ig0KICAiVGhlIHByb3BlcnR5IHRoYXQg aXMgYmVpbmcgdXNlZCB0byBrZWVwIHRyYWNrIG9mIGVmZm9ydCBlc3RpbWF0ZXMuDQpFZmZvcnQg ZXN0aW1hdGVzIGdpdmVuIGluIHRoaXMgcHJvcGVydHkgbmVlZCB0byBoYXZlIHRoZSBmb3JtYXQg SDpNTS4iDQogIDpncm91cCAnb3JnLXByb3BlcnRpZXMNCiAgOmdyb3VwICdvcmctcHJvZ3Jlc3MN CiAgOnR5cGUgJyhzdHJpbmcgOnRhZyAiUHJvcGVydHkiKSkNCg0KKGRlZmNvbnN0IG9yZy1nbG9i YWwtcHJvcGVydGllcy1maXhlZA0KICAnKCgiVklTSUJJTElUWV9BTEwiIC4gImZvbGRlZCBjaGls ZHJlbiBjb250ZW50IGFsbCIpDQogICAgKCJDTE9DS19NT0RFTElORV9UT1RBTF9BTEwiIC4gImN1 cnJlbnQgdG9kYXkgcmVwZWF0IGFsbCBhdXRvIikpDQogICJMaXN0IG9mIHByb3BlcnR5L3ZhbHVl IHBhaXJzIHRoYXQgY2FuIGJlIGluaGVyaXRlZCBieSBhbnkgZW50cnkuDQoNClRoZXNlIGFyZSBm aXhlZCB2YWx1ZXMsIGZvciB0aGUgcHJlc2V0IHByb3BlcnRpZXMuICBUaGUgdXNlciB2YXJpYWJs ZQ0KdGhhdCBjYW4gYmUgdXNlZCB0byBhZGQgdG8gdGhpcyBsaXN0IGlzIGBvcmctZ2xvYmFsLXBy b3BlcnRpZXMnLg0KDQpUaGUgZW50cmllcyBpbiB0aGlzIGxpc3QgYXJlIGNvbnMgY2VsbHMgd2hl cmUgdGhlIGNhciBpcyBhIHByb3BlcnR5DQpuYW1lIGFuZCBjZHIgaXMgYSBzdHJpbmcgd2l0aCB0 aGUgdmFsdWUuICBJZiB0aGUgdmFsdWUgcmVwcmVzZW50cw0KbXVsdGlwbGUgaXRlbXMgbGlrZSBh biBcIl9BTExcIiBwcm9wZXJ0eSwgc2VwYXJhdGUgdGhlIGl0ZW1zIGJ5DQpzcGFjZXMuIikNCg0K KGRlZmN1c3RvbSBvcmctZ2xvYmFsLXByb3BlcnRpZXMgbmlsDQogICJMaXN0IG9mIHByb3BlcnR5 L3ZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGluaGVyaXRlZCBieSBhbnkgZW50cnkuDQoNClRoaXMg bGlzdCB3aWxsIGJlIGNvbWJpbmVkIHdpdGggdGhlIGNvbnN0YW50IGBvcmctZ2xvYmFsLXByb3Bl cnRpZXMtZml4ZWQnLg0KDQpUaGUgZW50cmllcyBpbiB0aGlzIGxpc3QgYXJlIGNvbnMgY2VsbHMg d2hlcmUgdGhlIGNhciBpcyBhIHByb3BlcnR5DQpuYW1lIGFuZCBjZHIgaXMgYSBzdHJpbmcgd2l0 aCB0aGUgdmFsdWUuDQoNCllvdSBjYW4gc2V0IGJ1ZmZlci1sb2NhbCB2YWx1ZXMgZm9yIHRoZSBz YW1lIHB1cnBvc2UgaW4gdGhlIHZhcmlhYmxlDQpgb3JnLWZpbGUtcHJvcGVydGllcycgdGhpcyBi eSBhZGRpbmcgbGluZXMgbGlrZQ0KDQojK1BST1BFUlRZOiBOQU1FIFZBTFVFIg0KICA6Z3JvdXAg J29yZy1wcm9wZXJ0aWVzDQogIDp0eXBlICcocmVwZWF0DQoJICAoY29ucyAoc3RyaW5nIDp0YWcg IlByb3BlcnR5IikNCgkJKHN0cmluZyA6dGFnICJWYWx1ZSIpKSkpDQoNCihkZWZ2YXIgb3JnLWZp bGUtcHJvcGVydGllcyBuaWwNCiAgIkxpc3Qgb2YgcHJvcGVydHkvdmFsdWUgcGFpcnMgdGhhdCBj YW4gYmUgaW5oZXJpdGVkIGJ5IGFueSBlbnRyeS4NClZhbGlkIGZvciB0aGUgY3VycmVudCBidWZm ZXIuDQpUaGlzIHZhcmlhYmxlIGlzIHBvcHVsYXRlZCBmcm9tICMrUFJPUEVSVFkgbGluZXMuIikN CihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnb3JnLWZpbGUtcHJvcGVydGllcykNCg0KKGRl Zmdyb3VwIG9yZy1hZ2VuZGEgbmlsDQogICJPcHRpb25zIGNvbmNlcm5pbmcgYWdlbmRhIHZpZXdz IGluIE9yZy1tb2RlLiINCiAgOnRhZyAiT3JnIEFnZW5kYSINCiAgOmdyb3VwICdvcmcpDQoNCihk ZWZ2YXIgb3JnLWNhdGVnb3J5IG5pbA0KICAiVmFyaWFibGUgdXNlZCBieSBvcmcgZmlsZXMgdG8g c2V0IGEgY2F0ZWdvcnkgZm9yIGFnZW5kYSBkaXNwbGF5Lg0KU3VjaCBmaWxlcyBzaG91bGQgdXNl IGEgZmlsZSB2YXJpYWJsZSB0byBzZXQgaXQsIGZvciBleGFtcGxlDQoNCiMgICAtKi0gbW9kZTog b3JnOyBvcmctY2F0ZWdvcnk6IFwiRUxpc3BcIg0KDQpvciBjb250YWluIGEgc3BlY2lhbCBsaW5l DQoNCiMrQ0FURUdPUlk6IEVMaXNwDQoNCklmIHRoZSBmaWxlIGRvZXMgbm90IHNwZWNpZnkgYSBj YXRlZ29yeSwgdGhlbiBmaWxlJ3MgYmFzZSBuYW1lDQppcyB1c2VkIGluc3RlYWQuIikNCihtYWtl LXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnb3JnLWNhdGVnb3J5KQ0KKHB1dCAnb3JnLWNhdGVnb3J5 ICdzYWZlLWxvY2FsLXZhcmlhYmxlICMnKGxhbWJkYSAoeCkgKG9yIChzeW1ib2xwIHgpIChzdHJp bmdwIHgpKSkpDQoNCihkZWZjdXN0b20gb3JnLWFnZW5kYS1maWxlcyBuaWwNCiAgIlRoZSBmaWxl cyB0byBiZSB1c2VkIGZvciBhZ2VuZGEgZGlzcGxheS4NCkVudHJpZXMgbWF5IGJlIGFkZGVkIHRv IHRoaXMgbGlzdCB3aXRoIFxcW29yZy1hZ2VuZGEtZmlsZS10by1mcm9udF0gYW5kIHJlbW92ZWQg d2l0aA0KXFxbb3JnLXJlbW92ZS1maWxlXS4gIFlvdSBjYW4gYWxzbyB1c2UgY3VzdG9taXplIHRv IGVkaXQgdGhlIGxpc3QuDQoNCklmIGFuIGVudHJ5IGlzIGEgZGlyZWN0b3J5LCBhbGwgZmlsZXMg aW4gdGhhdCBkaXJlY3RvcnkgdGhhdCBhcmUgbWF0Y2hlZCBieQ0KYG9yZy1hZ2VuZGEtZmlsZS1y ZWdleHAnIHdpbGwgYmUgcGFydCBvZiB0aGUgZmlsZSBsaXN0Lg0KDQpJZiB0aGUgdmFsdWUgb2Yg dGhlIHZhcmlhYmxlIGlzIG5vdCBhIGxpc3QgYnV0IGEgc2luZ2xlIGZpbGUgbmFtZSwgdGhlbg0K dGhlIGxpc3Qgb2YgYWdlbmRhIGZpbGVzIGlzIGFjdHVhbGx5IHN0b3JlZCBhbmQgbWFpbnRhaW5l ZCBpbiB0aGF0IGZpbGUsIG9uZQ0KYWdlbmRhIGZpbGUgcGVyIGxpbmUuICBJbiB0aGlzIGZpbGUg cGF0aHMgY2FuIGJlIGdpdmVuIHJlbGF0aXZlIHRvDQpgb3JnLWRpcmVjdG9yeScuICBUaWxkZSBl eHBhbnNpb24gYW5kIGVudmlyb25tZW50IHZhcmlhYmxlIHN1YnN0aXR1dGlvbg0KYXJlIGFsc28g bWFkZS4iDQogIDpncm91cCAnb3JnLWFnZW5kYQ0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKHJlcGVh dCA6dGFnICJMaXN0IG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyIgZmlsZSkNCgkgIChmaWxlIDp0 YWcgIlN0b3JlIGxpc3QgaW4gYSBmaWxlXG4iIDp2YWx1ZSAifi8uYWdlbmRhX2ZpbGVzIikpKQ0K DQooZGVmY3VzdG9tIG9yZy1hZ2VuZGEtZmlsZS1yZWdleHAgIlxcYFteLl0uKlxcLm9yZ1xcJyIN CiAgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBmaWxlcyBmb3IgYG9yZy1hZ2VuZGEtZmls ZXMnLg0KSWYgYW55IGVsZW1lbnQgaW4gdGhlIGxpc3QgaW4gdGhhdCB2YXJpYWJsZSBjb250YWlu cyBhIGRpcmVjdG9yeSBpbnN0ZWFkDQpvZiBhIG5vcm1hbCBmaWxlLCBhbGwgZmlsZXMgaW4gdGhh dCBkaXJlY3RvcnkgdGhhdCBhcmUgbWF0Y2hlZCBieSB0aGlzDQpyZWd1bGFyIGV4cHJlc3Npb24g d2lsbCBiZSBpbmNsdWRlZC4iDQogIDpncm91cCAnb3JnLWFnZW5kYQ0KICA6dHlwZSAncmVnZXhw KQ0KDQooZGVmY3VzdG9tIG9yZy1hZ2VuZGEtdGV4dC1zZWFyY2gtZXh0cmEtZmlsZXMgbmlsDQog ICJMaXN0IG9mIGV4dHJhIGZpbGVzIHRvIGJlIHNlYXJjaGVkIGJ5IHRleHQgc2VhcmNoIGNvbW1h bmRzLg0KVGhlc2UgZmlsZXMgd2lsbCBiZSBzZWFyY2hlZCBpbiBhZGRpdGlvbiB0byB0aGUgYWdl bmRhIGZpbGVzIGJ5IHRoZQ0KY29tbWFuZHMgYG9yZy1zZWFyY2gtdmlldycgKGBDLWMgYSBzJykg YW5kIGBvcmctb2NjdXItaW4tYWdlbmRhLWZpbGVzJy4NCk5vdGUgdGhhdCB0aGVzZSBmaWxlcyB3 aWxsIG9ubHkgYmUgc2VhcmNoZWQgZm9yIHRleHQgc2VhcmNoIGNvbW1hbmRzLA0Kbm90IGZvciB0 aGUgb3RoZXIgYWdlbmRhIHZpZXdzIGxpa2UgdG9kbyBsaXN0cywgdGFnIHNlYXJjaGVzIG9yIHRo ZSB3ZWVrbHkNCmFnZW5kYS4gIFRoaXMgdmFyaWFibGUgaXMgaW50ZW5kZWQgdG8gbGlzdCBub3Rl cyBhbmQgcG9zc2libHkgYXJjaGl2ZSBmaWxlcw0KdGhhdCBzaG91bGQgYWxzbyBiZSBzZWFyY2hl ZCBieSB0aGVzZSB0d28gY29tbWFuZHMuDQpJbiBmYWN0LCBpZiB0aGUgZmlyc3QgZWxlbWVudCBp biB0aGUgbGlzdCBpcyB0aGUgc3ltYm9sIGBhZ2VuZGEtYXJjaGl2ZXMnLA0KdGhlbiBhbGwgYXJj aGl2ZSBmaWxlcyBvZiBhbGwgYWdlbmRhIGZpbGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNlYXJj aA0Kc2NvcGUuIg0KICA6Z3JvdXAgJ29yZy1hZ2VuZGENCiAgOnR5cGUgJyhzZXQgOmdyZWVkeSB0 DQoJICAgICAgKGNvbnN0IDp0YWcgIkFnZW5kYSBBcmNoaXZlcyIgYWdlbmRhLWFyY2hpdmVzKQ0K CSAgICAgIChyZXBlYXQgOmlubGluZSB0IChmaWxlKSkpKQ0KDQoob3JnLWRlZnZhcmFsaWFzICdv cmctYWdlbmRhLW11bHRpLW9jY3VyLWV4dHJhLWZpbGVzDQogICdvcmctYWdlbmRhLXRleHQtc2Vh cmNoLWV4dHJhLWZpbGVzKQ0KDQooZGVmY3VzdG9tIG9yZy1hZ2VuZGEtc2tpcC11bmF2YWlsYWJs ZS1maWxlcyBuaWwNCiAgIk5vbi1uaWwgbWVhbnMgdG8ganVzdCBza2lwIG5vbi1yZWFjaGFibGUg ZmlsZXMgaW4gYG9yZy1hZ2VuZGEtZmlsZXMnLg0KQSBuaWwgdmFsdWUgbWVhbnMgdG8gcmVtb3Zl IHRoZW0sIGFmdGVyIGEgcXVlcnksIGZyb20gdGhlIGxpc3QuIg0KICA6Z3JvdXAgJ29yZy1hZ2Vu ZGENCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZjdXN0b20gb3JnLWNhbGVuZGFyLXRvLWFnZW5k YS1rZXkgWz9jXQ0KICAiVGhlIGtleSB0byBiZSBpbnN0YWxsZWQgaW4gYGNhbGVuZGFyLW1vZGUt bWFwJyBmb3Igc3dpdGNoaW5nIHRvIHRoZSBhZ2VuZGEuDQpUaGUgY29tbWFuZCBgb3JnLWNhbGVu ZGFyLWdvdG8tYWdlbmRhJyB3aWxsIGJlIGJvdW5kIHRvIHRoaXMga2V5LiAgVGhlDQpkZWZhdWx0 IGlzIHRoZSBjaGFyYWN0ZXIgYGMnIGJlY2F1c2UgdGhlbiBgYycgY2FuIGJlIHVzZWQgdG8gc3dp dGNoIGJhY2sgYW5kDQpmb3J0aCBiZXR3ZWVuIGFnZW5kYSBhbmQgY2FsZW5kYXIuIg0KICA6Z3Jv dXAgJ29yZy1hZ2VuZGENCiAgOnR5cGUgJ3NleHApDQoNCihkZWZjdXN0b20gb3JnLWNhbGVuZGFy LWluc2VydC1kaWFyeS1lbnRyeS1rZXkgWz9pXQ0KICAiVGhlIGtleSB0byBiZSBpbnN0YWxsZWQg aW4gYGNhbGVuZGFyLW1vZGUtbWFwJyBmb3IgYWRkaW5nIGRpYXJ5IGVudHJpZXMuDQpUaGlzIG9w dGlvbiBpcyBpcnJlbGV2YW50IHVudGlsIGBvcmctYWdlbmRhLWRpYXJ5LWZpbGUnIGhhcyBiZWVu IGNvbmZpZ3VyZWQNCnRvIHBvaW50IHRvIGFuIE9yZy1tb2RlIGZpbGUuICBXaGVuIHRoYXQgaXMg dGhlIGNhc2UsIHRoZSBjb21tYW5kDQpgb3JnLWFnZW5kYS1kaWFyeS1lbnRyeScgd2lsbCBiZSBi b3VuZCB0byB0aGUga2V5IGdpdmVuIGhlcmUsIGJ5IGRlZmF1bHQNCmBpJy4gIEluIHRoZSBjYWxl bmRhciwgYGknIG5vcm1hbGx5IGFkZHMgZW50cmllcyB0byBgZGlhcnktZmlsZScuICBTbw0KaWYg eW91IHdhbnQgdG8gY29udGludWUgZG9pbmcgdGhpcywgeW91IG5lZWQgdG8gY2hhbmdlIHRoaXMg dG8gYSBkaWZmZXJlbnQNCmtleS4iDQogIDpncm91cCAnb3JnLWFnZW5kYQ0KICA6dHlwZSAnc2V4 cCkNCg0KKGRlZmN1c3RvbSBvcmctYWdlbmRhLWRpYXJ5LWZpbGUgJ2RpYXJ5LWZpbGUNCiAgIkZp bGUgdG8gd2hpY2ggdG8gYWRkIG5ldyBlbnRyaWVzIHdpdGggdGhlIGBpJyBrZXkgaW4gYWdlbmRh IGFuZCBjYWxlbmRhci4NCldoZW4gdGhpcyBpcyB0aGUgc3ltYm9sIGBkaWFyeS1maWxlJywgdGhl IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIEVtYWNzDQpjYWxlbmRhciB3aWxsIGJlIHVzZWQgdG8gYWRk IGVudHJpZXMgdG8gdGhlIGBkaWFyeS1maWxlJy4gIEJ1dCB3aGVuIHRoaXMNCnBvaW50cyB0byBh IGZpbGUsIGBvcmctYWdlbmRhLWRpYXJ5LWVudHJ5JyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iDQog IDpncm91cCAnb3JnLWFnZW5kYQ0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIlRo ZSBzdGFuZGFyZCBFbWFjcyBkaWFyeSBmaWxlIiBkaWFyeS1maWxlKQ0KCSAgKGZpbGUgOnRhZyAi U3BlY2lhbCBPcmcgZmlsZSBkaWFyeSBlbnRyaWVzIikpKQ0KDQooZXZhbC1hZnRlci1sb2FkICJj YWxlbmRhciINCiAgJyhwcm9nbg0KICAgICAob3JnLWRlZmtleSBjYWxlbmRhci1tb2RlLW1hcCBv cmctY2FsZW5kYXItdG8tYWdlbmRhLWtleQ0KCQkgJ29yZy1jYWxlbmRhci1nb3RvLWFnZW5kYSkN CiAgICAgKGFkZC1ob29rICdjYWxlbmRhci1tb2RlLWhvb2sNCgkgICAgICAgKGxhbWJkYSAoKQ0K CQkgKHVubGVzcyAoZXEgb3JnLWFnZW5kYS1kaWFyeS1maWxlICdkaWFyeS1maWxlKQ0KCQkgICAo ZGVmaW5lLWtleSBjYWxlbmRhci1tb2RlLW1hcA0KCQkgICAgIG9yZy1jYWxlbmRhci1pbnNlcnQt ZGlhcnktZW50cnkta2V5DQoJCSAgICAgJ29yZy1hZ2VuZGEtZGlhcnktZW50cnkpKSkpKSkNCg0K KGRlZmdyb3VwIG9yZy1sYXRleCBuaWwNCiAgIk9wdGlvbnMgZm9yIGVtYmVkZGluZyBMYVRlWCBj b2RlIGludG8gT3JnLW1vZGUuIg0KICA6dGFnICJPcmcgTGFUZVgiDQogIDpncm91cCAnb3JnKQ0K DQooZGVmY3VzdG9tIG9yZy1mb3JtYXQtbGF0ZXgtb3B0aW9ucw0KICAnKDpmb3JlZ3JvdW5kIGRl ZmF1bHQgOmJhY2tncm91bmQgZGVmYXVsdCA6c2NhbGUgMS4wDQoJCTpodG1sLWZvcmVncm91bmQg IkJsYWNrIiA6aHRtbC1iYWNrZ3JvdW5kICJUcmFuc3BhcmVudCINCgkJOmh0bWwtc2NhbGUgMS4w IDptYXRjaGVycyAoImJlZ2luIiAiJDEiICIkIiAiJCQiICJcXCgiICJcXFsiKSkNCiAgIk9wdGlv bnMgZm9yIGNyZWF0aW5nIGltYWdlcyBmcm9tIExhVGVYIGZyYWdtZW50cy4NClRoaXMgaXMgYSBw cm9wZXJ0eSBsaXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOg0KOmZvcmVncm91bmQg IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGZvciBpbWFnZXMgZW1iZWRkZWQgaW4gRW1hY3MsIGUuZy4g XCJCbGFja1wiLg0KICAgICAgICAgICAgIGBkZWZhdWx0JyBtZWFucyB1c2UgdGhlIGZvcmVncm91 bmQgb2YgdGhlIGRlZmF1bHQgZmFjZS4NCiAgICAgICAgICAgICBgYXV0bycgbWVhbnMgdXNlIHRo ZSBmb3JlZ3JvdW5kIGZyb20gdGhlIHRleHQgZmFjZS4NCjpiYWNrZ3JvdW5kICB0aGUgYmFja2dy b3VuZCBjb2xvciwgb3IgXCJUcmFuc3BhcmVudFwiLg0KICAgICAgICAgICAgIGBkZWZhdWx0JyBt ZWFucyB1c2UgdGhlIGJhY2tncm91bmQgb2YgdGhlIGRlZmF1bHQgZmFjZS4NCiAgICAgICAgICAg ICBgYXV0bycgbWVhbnMgdXNlIHRoZSBiYWNrZ3JvdW5kIGZyb20gdGhlIHRleHQgZmFjZS4NCjpz Y2FsZSAgICAgICBhIHNjYWxpbmcgZmFjdG9yIGZvciB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2VzLCB0 byBnZXQgbW9yZSBwaXhlbHMNCjpodG1sLWZvcmVncm91bmQsIDpodG1sLWJhY2tncm91bmQsIDpo dG1sLXNjYWxlDQogICAgICAgICAgICAgdGhlIHNhbWUgbnVtYmVycyBmb3IgSFRNTCBleHBvcnQu DQo6bWF0Y2hlcnMgICAgYSBsaXN0IGluZGljYXRpbmcgd2hpY2ggbWF0Y2hlcnMgc2hvdWxkIGJl IHVzZWQgdG8NCiAgICAgICAgICAgICBmaW5kIExhVGVYIGZyYWdtZW50cy4gIFZhbGlkIG1lbWJl cnMgb2YgdGhpcyBsaXN0IGFyZToNCiAgICAgICAgICAgICBcImJlZ2luXCIgZmluZCBlbnZpcm9u bWVudHMNCiAgICAgICAgICAgICBcIiQxXCIgICAgZmluZCBzaW5nbGUgY2hhcmFjdGVycyBzdXJy b3VuZGVkIGJ5ICQuJA0KICAgICAgICAgICAgIFwiJFwiICAgICBmaW5kIG1hdGggZXhwcmVzc2lv bnMgc3Vycm91bmRlZCBieSAkLi4uJA0KICAgICAgICAgICAgIFwiJCRcIiAgICBmaW5kIG1hdGgg ZXhwcmVzc2lvbnMgc3Vycm91bmRlZCBieSAkJC4uLi4kJA0KICAgICAgICAgICAgIFwiXFwoXCIg ICAgZmluZCBtYXRoIGV4cHJlc3Npb25zIHN1cnJvdW5kZWQgYnkgXFwoLi4uXFwpDQogICAgICAg ICAgICAgXCJcXD1cXFtcIiAgICBmaW5kIG1hdGggZXhwcmVzc2lvbnMgc3Vycm91bmRlZCBieSBc XD1cXFsuLi5cXF0iDQogIDpncm91cCAnb3JnLWxhdGV4DQogIDp0eXBlICdwbGlzdCkNCg0KKGRl ZmN1c3RvbSBvcmctZm9ybWF0LWxhdGV4LXNpZ25hbC1lcnJvciB0DQogICJOb24tbmlsIG1lYW5z IHNpZ25hbCBhbiBlcnJvciB3aGVuIGltYWdlIGNyZWF0aW9uIG9mIExhVGVYIHNuaXBwZXRzIGZh aWxzLg0KV2hlbiBuaWwsIGp1c3QgcHVzaCBvdXQgYSBtZXNzYWdlLiINCiAgOmdyb3VwICdvcmct bGF0ZXgNCiAgOnZlcnNpb24gIjI0LjEiDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9t IG9yZy1sYXRleC10by1tYXRobWwtamFyLWZpbGUgbmlsDQogICJWYWx1ZSBvZlwiJWpcIiBpbiBg b3JnLWxhdGV4LXRvLW1hdGhtbC1jb252ZXJ0LWNvbW1hbmQnLg0KVXNlIHRoaXMgdG8gc3BlY2lm eSBhZGRpdGlvbmFsIGV4ZWN1dGFibGUgZmlsZSBzYXkgYSBqYXIgZmlsZS4NCg0KV2hlbiB1c2lu ZyBNYXRoVG9XZWIgYXMgdGhlIGNvbnZlcnRlciwgc3BlY2lmeSB0aGUgZnVsbC1wYXRoIHRvDQp5 b3VyIG1hdGh0b3dlYi5qYXIgZmlsZS4iDQogIDpncm91cCAnb3JnLWxhdGV4DQogIDp2ZXJzaW9u ICIyNC4xIg0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIk5vbmUiIG5pbCkNCgkg IChmaWxlIDp0YWcgIkpBUiBmaWxlIiA6bXVzdC1tYXRjaCB0KSkpDQoNCihkZWZjdXN0b20gb3Jn LWxhdGV4LXRvLW1hdGhtbC1jb252ZXJ0LWNvbW1hbmQgbmlsDQogICJDb21tYW5kIHRvIGNvbnZl cnQgTGFUZVggZnJhZ21lbnRzIHRvIE1hdGhNTC4NClJlcGxhY2UgZm9ybWF0LXNwZWNpZmllcnMg aW4gdGhlIGNvbW1hbmQgYXMgbm90ZWQgYmVsb3cgYW5kIHVzZQ0KYHNoZWxsLWNvbW1hbmQnIHRv IGNvbnZlcnQgTGFUZVggdG8gTWF0aE1MLg0KJWo6ICAgICBFeGVjdXRhYmxlIGZpbGUgaW4gZnVs bHkgZXhwYW5kZWQgZm9ybSBhcyBzcGVjaWZpZWQgYnkNCiAgICAgICAgYG9yZy1sYXRleC10by1t YXRobWwtamFyLWZpbGUnLg0KJUk6ICAgICBJbnB1dCBMYVRlWCBmaWxlIGluIGZ1bGx5IGV4cGFu ZGVkIGZvcm0NCiVvOiAgICAgT3V0cHV0IE1hdGhNTCBmaWxlDQpUaGlzIGNvbW1hbmQgaXMgdXNl ZCBieSBgb3JnLWNyZWF0ZS1tYXRoLWZvcm11bGEnLg0KDQpXaGVuIHVzaW5nIE1hdGhUb1dlYiBh cyB0aGUgY29udmVydGVyLCBzZXQgdGhpcyB0bw0KXCJqYXZhIC1qYXIgJWogLXVuaWNvZGUgLWZv cmNlIC1kZiAlbyAlSVwiLiINCiAgOmdyb3VwICdvcmctbGF0ZXgNCiAgOnZlcnNpb24gIjI0LjEi DQogIDp0eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRhZyAiTm9uZSIgbmlsKQ0KCSAgKHN0cmlu ZyA6dGFnICJcblNoZWxsIGNvbW1hbmQiKSkpDQoNCihkZWZjdXN0b20gb3JnLWxhdGV4LWNyZWF0 ZS1mb3JtdWxhLWltYWdlLXByb2dyYW0gJ2R2aXBuZw0KICAiUHJvZ3JhbSB0byBjb252ZXJ0IExh VGVYIGZyYWdtZW50cyB3aXRoLg0KDQpkdmlwbmcgICAgICAgICAgUHJvY2VzcyB0aGUgTGFUZVgg ZnJhZ21lbnRzIHRvIGR2aSBmaWxlLCB0aGVuIGNvbnZlcnQNCiAgICAgICAgICAgICAgICBkdmkg ZmlsZXMgdG8gcG5nIGZpbGVzIHVzaW5nIGR2aXBuZy4NCiAgICAgICAgICAgICAgICBUaGlzIHdp bGwgYWxzbyBpbmNsdWRlIHByb2Nlc3Npbmcgb2Ygbm9uLW1hdGggZW52aXJvbm1lbnRzLg0KaW1h Z2VtYWdpY2sgICAgIENvbnZlcnQgdGhlIExhVGVYIGZyYWdtZW50cyB0byBwZGYgZmlsZXMgYW5k IHVzZSBpbWFnZW1hZ2ljaw0KICAgICAgICAgICAgICAgIHRvIGNvbnZlcnQgcGRmIGZpbGVzIHRv IHBuZyBmaWxlcyINCiAgOmdyb3VwICdvcmctbGF0ZXgNCiAgOnZlcnNpb24gIjI0LjEiDQogIDp0 eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRhZyAiZHZpcG5nIiBkdmlwbmcpDQoJICAoY29uc3Qg OnRhZyAiaW1hZ2VtYWdpY2siIGltYWdlbWFnaWNrKSkpDQoNCihkZWZjdXN0b20gb3JnLWxhdGV4 LXByZXZpZXctbHR4cG5nLWRpcmVjdG9yeSAibHR4cG5nLyINCiAgIlBhdGggdG8gc3RvcmUgbGF0 ZXggcHJldmlldyBpbWFnZXMuDQpBIHJlbGF0aXZlIHBhdGggaGVyZSBjcmVhdGVzIG1hbnkgZGly ZWN0b3JpZXMgcmVsYXRpdmUgdG8gdGhlDQpwcm9jZXNzZWQgb3JnIGZpbGVzIHBhdGhzLiAgQW4g YWJzb2x1dGUgcGF0aCBwdXRzIGFsbCBwcmV2aWV3DQppbWFnZXMgYXQgdGhlIHNhbWUgcGxhY2Uu Ig0KICA6Z3JvdXAgJ29yZy1sYXRleA0KICA6dmVyc2lvbiAiMjQuMyINCiAgOnR5cGUgJ3N0cmlu ZykNCg0KKGRlZnVuIG9yZy1mb3JtYXQtbGF0ZXgtbWF0aG1sLWF2YWlsYWJsZS1wICgpDQogICJS ZXR1cm4gdCBpZiBgb3JnLWxhdGV4LXRvLW1hdGhtbC1jb252ZXJ0LWNvbW1hbmQnIGlzIHVzYWJs ZS4iDQogIChzYXZlLW1hdGNoLWRhdGENCiAgICAod2hlbiAoYW5kIChib3VuZHAgJ29yZy1sYXRl eC10by1tYXRobWwtY29udmVydC1jb21tYW5kKQ0KCSAgICAgICBvcmctbGF0ZXgtdG8tbWF0aG1s LWNvbnZlcnQtY29tbWFuZCkNCiAgICAgIChsZXQgKChleGVjdXRhYmxlIChjYXIgKHNwbGl0LXN0 cmluZw0KCQkJICAgICAgb3JnLWxhdGV4LXRvLW1hdGhtbC1jb252ZXJ0LWNvbW1hbmQpKSkpDQoJ KHdoZW4gKGV4ZWN1dGFibGUtZmluZCBleGVjdXRhYmxlKQ0KCSAgKGlmIChzdHJpbmctbWF0Y2gN CgkgICAgICAgIiVqIiBvcmctbGF0ZXgtdG8tbWF0aG1sLWNvbnZlcnQtY29tbWFuZCkNCgkgICAg ICAoZmlsZS1yZWFkYWJsZS1wIG9yZy1sYXRleC10by1tYXRobWwtamFyLWZpbGUpDQoJICAgIHQp KSkpKSkNCg0KKGRlZmN1c3RvbSBvcmctZm9ybWF0LWxhdGV4LWhlYWRlciAiXFxkb2N1bWVudGNs YXNze2FydGljbGV9DQpcXHVzZXBhY2thZ2VbdXNlbmFtZXNde2NvbG9yfQ0KXFtQQUNLQUdFU10N ClxbREVGQVVMVC1QQUNLQUdFU10NClxccGFnZXN0eWxle2VtcHR5fSAgICAgICAgICAgICAlIGRv IG5vdCByZW1vdmUNCiUgVGhlIHNldHRpbmdzIGJlbG93IGFyZSBjb3BpZWQgZnJvbSBmdWxscGFn ZS5zdHkNClxcc2V0bGVuZ3Roe1xcdGV4dHdpZHRofXtcXHBhcGVyd2lkdGh9DQpcXGFkZHRvbGVu Z3Roe1xcdGV4dHdpZHRofXstM2NtfQ0KXFxzZXRsZW5ndGh7XFxvZGRzaWRlbWFyZ2lufXsxLjVj bX0NClxcYWRkdG9sZW5ndGh7XFxvZGRzaWRlbWFyZ2lufXstMi41NGNtfQ0KXFxzZXRsZW5ndGh7 XFxldmVuc2lkZW1hcmdpbn17XFxvZGRzaWRlbWFyZ2lufQ0KXFxzZXRsZW5ndGh7XFx0ZXh0aGVp Z2h0fXtcXHBhcGVyaGVpZ2h0fQ0KXFxhZGR0b2xlbmd0aHtcXHRleHRoZWlnaHR9ey1cXGhlYWRo ZWlnaHR9DQpcXGFkZHRvbGVuZ3Roe1xcdGV4dGhlaWdodH17LVxcaGVhZHNlcH0NClxcYWRkdG9s ZW5ndGh7XFx0ZXh0aGVpZ2h0fXstXFxmb290c2tpcH0NClxcYWRkdG9sZW5ndGh7XFx0ZXh0aGVp Z2h0fXstM2NtfQ0KXFxzZXRsZW5ndGh7XFx0b3BtYXJnaW59ezEuNWNtfQ0KXFxhZGR0b2xlbmd0 aHtcXHRvcG1hcmdpbn17LTIuNTRjbX0iDQogICJUaGUgZG9jdW1lbnQgaGVhZGVyIHVzZWQgZm9y IHByb2Nlc3NpbmcgTGFUZVggZnJhZ21lbnRzLg0KSXQgaXMgaW1wZXJhdGl2ZSB0aGF0IHRoaXMg aGVhZGVyIG1ha2Ugc3VyZSB0aGF0IG5vIHBhZ2UgbnVtYmVyDQphcHBlYXJzIG9uIHRoZSBwYWdl LiAgVGhlIHBhY2thZ2UgZGVmaW5lZCBpbiB0aGUgdmFyaWFibGVzDQpgb3JnLWxhdGV4LWRlZmF1 bHQtcGFja2FnZXMtYWxpc3QnIGFuZCBgb3JnLWxhdGV4LXBhY2thZ2VzLWFsaXN0Jw0Kd2lsbCBl aXRoZXIgcmVwbGFjZSB0aGUgcGxhY2Vob2xkZXIgXCJbUEFDS0FHRVNdXCIgaW4gdGhpcw0KaGVh ZGVyLCBvciB0aGV5IHdpbGwgYmUgYXBwZW5kZWQuIg0KICA6Z3JvdXAgJ29yZy1sYXRleA0KICA6 dHlwZSAnc3RyaW5nKQ0KDQooZGVmdW4gb3JnLXNldC1wYWNrYWdlcy1hbGlzdCAodmFyIHZhbCkN CiAgIlNldCB0aGUgcGFja2FnZXMgYWxpc3QgYW5kIG1ha2Ugc3VyZSBpdCBoYXMgMyBlbGVtZW50 cyBwZXIgZW50cnkuIg0KICAoc2V0IHZhciAobWFwY2FyIChsYW1iZGEgKHgpDQoJCSAgICAgKGlm IChhbmQgKGNvbnNwIHgpICg9IChsZW5ndGggeCkgMikpDQoJCQkgKGxpc3QgKGNhciB4KSAobnRo IDEgeCkgdCkNCgkJICAgICAgIHgpKQ0KCQkgICB2YWwpKSkNCg0KKGRlZnVuIG9yZy1nZXQtcGFj a2FnZXMtYWxpc3QgKHZhcikNCiAgIkdldCB0aGUgcGFja2FnZXMgYWxpc3QgYW5kIG1ha2Ugc3Vy ZSBpdCBoYXMgMyBlbGVtZW50cyBwZXIgZW50cnkuIg0KICAobWFwY2FyIChsYW1iZGEgKHgpDQoJ ICAgIChpZiAoYW5kIChjb25zcCB4KSAoPSAobGVuZ3RoIHgpIDIpKQ0KCQkobGlzdCAoY2FyIHgp IChudGggMSB4KSB0KQ0KCSAgICAgIHgpKQ0KCSAgKGRlZmF1bHQtdmFsdWUgdmFyKSkpDQoNCihk ZWZjdXN0b20gb3JnLWxhdGV4LWRlZmF1bHQtcGFja2FnZXMtYWxpc3QNCiAgJygoIkFVVE8iICJp bnB1dGVuYyIgIHQpDQogICAgKCJUMSIgICAiZm9udGVuYyIgICB0KQ0KICAgICgiIiAgICAgImZp eGx0eDJlIiAgbmlsKQ0KICAgICgiIiAgICAgImdyYXBoaWN4IiAgdCkNCiAgICAoIiIgICAgICJs b25ndGFibGUiIG5pbCkNCiAgICAoIiIgICAgICJmbG9hdCIgICAgIG5pbCkNCiAgICAoIiIgICAg ICJ3cmFwZmlnIiAgIG5pbCkNCiAgICAoIiIgICAgICJyb3RhdGluZyIgIG5pbCkNCiAgICAoIm5v cm1hbGVtIiAidWxlbSIgIHQpDQogICAgKCIiICAgICAiYW1zbWF0aCIgICB0KQ0KICAgICgiIiAg ICAgInRleHRjb21wIiAgdCkNCiAgICAoIiIgICAgICJtYXJ2b3N5bSIgIHQpDQogICAgKCIiICAg ICAid2FzeXN5bSIgICB0KQ0KICAgICgiIiAgICAgImFtc3N5bWIiICAgdCkNCiAgICAoIiIgICAg ICJoeXBlcnJlZiIgIG5pbCkNCiAgICAiXFx0b2xlcmFuY2U9MTAwMCIpDQogICJBbGlzdCBvZiBk ZWZhdWx0IHBhY2thZ2VzIHRvIGJlIGluc2VydGVkIGluIHRoZSBoZWFkZXIuDQoNCkNoYW5nZSB0 aGlzIG9ubHkgaWYgb25lIG9mIHRoZSBwYWNrYWdlcyBoZXJlIGNhdXNlcyBhbg0KaW5jb21wYXRp YmlsaXR5IHdpdGggYW5vdGhlciBwYWNrYWdlIHlvdSBhcmUgdXNpbmcuDQoNClRoZSBwYWNrYWdl cyBpbiB0aGlzIGxpc3QgYXJlIG5lZWRlZCBieSBvbmUgcGFydCBvciBhbm90aGVyIG9mDQpPcmcg bW9kZSB0byBmdW5jdGlvbiBwcm9wZXJseToNCg0KLSBpbnB1dGVuYywgZm9udGVuYzogIGZvciBi YXNpYyBmb250IGFuZCBjaGFyYWN0ZXIgc2VsZWN0aW9uDQotIGZpeGx0eDJlOiBJbXBvcnRhbnQg cGF0Y2hlcyBvZiBMYVRlWCBpdHNlbGYNCi0gZ3JhcGhpY3g6IGZvciBpbmNsdWRpbmcgaW1hZ2Vz DQotIGxvbmd0YWJsZTogRm9yIG11bHRpcGFnZSB0YWJsZXMNCi0gZmxvYXQsIHdyYXBmaWc6IGZv ciBmaWd1cmUgcGxhY2VtZW50DQotIHJvdGF0aW5nOiBmb3Igc2lkZXdheXMgZmlndXJlcyBhbmQg dGFibGVzDQotIHVsZW06IGZvciB1bmRlcmxpbmUgYW5kIHN0cmlrZS10aHJvdWdoDQotIGFtc21h dGg6IGZvciBzdWJzY3JpcHQgYW5kIHN1cGVyc2NyaXB0IGFuZCBtYXRoIGVudmlyb25tZW50cw0K LSB0ZXh0Y29tcCwgbWFydm9zeW1iLCB3YXN5c3ltLCBhbXNzeW1iOiBmb3IgdmFyaW91cyBzeW1i b2xzIHVzZWQNCiAgZm9yIGludGVycHJldGluZyB0aGUgZW50aXRpZXMgaW4gYG9yZy1lbnRpdGll cycuICBZb3UgY2FuIHNraXANCiAgc29tZSBvZiB0aGVzZSBwYWNrYWdlcyBpZiB5b3UgZG9uJ3Qg dXNlIGFueSBvZiB0aGVpciBzeW1ib2xzLg0KLSBoeXBlcnJlZjogZm9yIGNyb3NzIHJlZmVyZW5j ZXMNCg0KVGhlcmVmb3JlIHlvdSBzaG91bGQgbm90IG1vZGlmeSB0aGlzIHZhcmlhYmxlIHVubGVz cyB5b3Uga25vdw0Kd2hhdCB5b3UgYXJlIGRvaW5nLiAgVGhlIG9uZSByZWFzb24gdG8gY2hhbmdl IGl0IGFueXdheSBpcyB0aGF0DQp5b3UgbWlnaHQgYmUgbG9hZGluZyBzb21lIG90aGVyIHBhY2th Z2UgdGhhdCBjb25mbGljdHMgd2l0aCBvbmUNCm9mIHRoZSBkZWZhdWx0IHBhY2thZ2VzLiAgRWFj aCBlbGVtZW50IGlzIGVpdGhlciBhIGNlbGwgb3INCmEgc3RyaW5nLg0KDQpBIGNlbGwgaXMgb2Yg dGhlIGZvcm1hdDoNCg0KICBcKCBcIm9wdGlvbnNcIiBcInBhY2thZ2VcIiBTTklQUEVULUZMQUcp Lg0KDQpJZiBTTklQUEVULUZMQUcgaXMgbm9uLW5pbCwgdGhlIHBhY2thZ2UgYWxzbyBuZWVkcyB0 byBiZSBpbmNsdWRlZA0Kd2hlbiBjb21waWxpbmcgTGFUZVggc25pcHBldHMgaW50byBpbWFnZXMg Zm9yIGluY2x1c2lvbiBpbnRvDQpub24tTGFUZVggb3V0cHV0Lg0KDQpBIHN0cmluZyB3aWxsIGJl IGluc2VydGVkIGFzLWlzIGluIHRoZSBoZWFkZXIgb2YgdGhlIGRvY3VtZW50LiINCiAgOmdyb3Vw ICdvcmctbGF0ZXgNCiAgOmdyb3VwICdvcmctZXhwb3J0LWxhdGV4DQogIDpzZXQgJ29yZy1zZXQt cGFja2FnZXMtYWxpc3QNCiAgOmdldCAnb3JnLWdldC1wYWNrYWdlcy1hbGlzdA0KICA6dmVyc2lv biAiMjQuMSINCiAgOnR5cGUgJyhyZXBlYXQNCgkgIChjaG9pY2UNCgkgICAobGlzdCA6dGFnICJv cHRpb25zL3BhY2thZ2UgcGFpciINCgkJIChzdHJpbmcgOnRhZyAib3B0aW9ucyIpDQoJCSAoc3Ry aW5nIDp0YWcgInBhY2thZ2UiKQ0KCQkgKGJvb2xlYW4gOnRhZyAiU25pcHBldCIpKQ0KCSAgIChz dHJpbmcgOnRhZyAiQSBsaW5lIG9mIExhVGVYIikpKSkNCg0KKGRlZmN1c3RvbSBvcmctbGF0ZXgt cGFja2FnZXMtYWxpc3QgbmlsDQogICJBbGlzdCBvZiBwYWNrYWdlcyB0byBiZSBpbnNlcnRlZCBp biBldmVyeSBMYVRlWCBoZWFkZXIuDQoNClRoZXNlIHdpbGwgYmUgaW5zZXJ0ZWQgYWZ0ZXIgYG9y Zy1sYXRleC1kZWZhdWx0LXBhY2thZ2VzLWFsaXN0Jy4NCkVhY2ggZWxlbWVudCBpcyBlaXRoZXIg YSBjZWxsIG9yIGEgc3RyaW5nLg0KDQpBIGNlbGwgaXMgb2YgdGhlIGZvcm1hdDoNCg0KICAgIFwo XCJvcHRpb25zXCIgXCJwYWNrYWdlXCIgU05JUFBFVC1GTEFHKQ0KDQpTTklQUEVULUZMQUcsIHdo ZW4gbm9uLW5pbCwgaW5kaWNhdGVzIHRoYXQgdGhpcyBwYWNrYWdlIGlzIGFsc28NCm5lZWRlZCB3 aGVuIHR1cm5pbmcgTGFUZVggc25pcHBldHMgaW50byBpbWFnZXMgZm9yIGluY2x1c2lvbiBpbnRv DQpub24tTGFUZVggb3V0cHV0Lg0KDQpBIHN0cmluZyB3aWxsIGJlIGluc2VydGVkIGFzLWlzIGlu IHRoZSBoZWFkZXIgb2YgdGhlIGRvY3VtZW50Lg0KDQpNYWtlIHN1cmUgdGhhdCB5b3Ugb25seSBs aXN0IHBhY2thZ2VzIGhlcmUgd2hpY2g6DQoNCiAgLSB5b3Ugd2FudCBpbiBldmVyeSBmaWxlOw0K ICAtIGRvIG5vdCBjb25mbGljdCB3aXRoIHRoZSBzZXR1cCBpbiBgb3JnLWZvcm1hdC1sYXRleC1o ZWFkZXInOw0KICAtIGRvIG5vdCBjb25mbGljdCB3aXRoIHRoZSBkZWZhdWx0IHBhY2thZ2VzIGlu DQogICAgYG9yZy1sYXRleC1kZWZhdWx0LXBhY2thZ2VzLWFsaXN0Jy4iDQogIDpncm91cCAnb3Jn LWxhdGV4DQogIDpncm91cCAnb3JnLWV4cG9ydC1sYXRleA0KICA6c2V0ICdvcmctc2V0LXBhY2th Z2VzLWFsaXN0DQogIDpnZXQgJ29yZy1nZXQtcGFja2FnZXMtYWxpc3QNCiAgOnR5cGUgJyhyZXBl YXQNCgkgIChjaG9pY2UNCgkgICAobGlzdCA6dGFnICJvcHRpb25zL3BhY2thZ2UgcGFpciINCgkJ IChzdHJpbmcgOnRhZyAib3B0aW9ucyIpDQoJCSAoc3RyaW5nIDp0YWcgInBhY2thZ2UiKQ0KCQkg KGJvb2xlYW4gOnRhZyAiU25pcHBldCIpKQ0KCSAgIChzdHJpbmcgOnRhZyAiQSBsaW5lIG9mIExh VGVYIikpKSkNCg0KKGRlZmdyb3VwIG9yZy1hcHBlYXJhbmNlIG5pbA0KICAiU2V0dGluZ3MgZm9y IE9yZy1tb2RlIGFwcGVhcmFuY2UuIg0KICA6dGFnICJPcmcgQXBwZWFyYW5jZSINCiAgOmdyb3Vw ICdvcmcpDQoNCihkZWZjdXN0b20gb3JnLWxldmVsLWNvbG9yLXN0YXJzLW9ubHkgbmlsDQogICJO b24tbmlsIG1lYW5zIGZvbnRpZnkgb25seSB0aGUgc3RhcnMgaW4gZWFjaCBoZWFkbGluZS4NCldo ZW4gbmlsLCB0aGUgZW50aXJlIGhlYWRsaW5lIGlzIGZvbnRpZmllZC4NCkNoYW5naW5nIGl0IHJl cXVpcmVzIHJlc3RhcnQgb2YgYGZvbnQtbG9jay1tb2RlJyB0byBiZWNvbWUgZWZmZWN0aXZlDQph bHNvIGluIHJlZ2lvbnMgYWxyZWFkeSBmb250aWZpZWQuIg0KICA6Z3JvdXAgJ29yZy1hcHBlYXJh bmNlDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1oaWRlLWxlYWRpbmctc3Rh cnMgbmlsDQogICJOb24tbmlsIG1lYW5zIGhpZGUgdGhlIGZpcnN0IE4tMSBzdGFycyBpbiBhIGhl YWRsaW5lLg0KVGhpcyB3b3JrcyBieSB1c2luZyB0aGUgZmFjZSBgb3JnLWhpZGUnIGZvciB0aGVz ZSBzdGFycy4gIFRoaXMNCmZhY2UgaXMgd2hpdGUgZm9yIGEgbGlnaHQgYmFja2dyb3VuZCwgYW5k IGJsYWNrIGZvciBhIGRhcmsNCmJhY2tncm91bmQuICBZb3UgbWF5IGhhdmUgdG8gY3VzdG9taXpl IHRoZSBmYWNlIGBvcmctaGlkZScgdG8NCm1ha2UgdGhpcyB3b3JrLg0KQ2hhbmdpbmcgaXQgcmVx dWlyZXMgcmVzdGFydCBvZiBgZm9udC1sb2NrLW1vZGUnIHRvIGJlY29tZSBlZmZlY3RpdmUNCmFs c28gaW4gcmVnaW9ucyBhbHJlYWR5IGZvbnRpZmllZC4NCllvdSBtYXkgYWxzbyBzZXQgdGhpcyBv biBhIHBlci1maWxlIGJhc2lzIGJ5IGFkZGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZw0KbGluZXMg dG8gdGhlIGJ1ZmZlcjoNCg0KICAgIytTVEFSVFVQOiBoaWRlc3RhcnMNCiAgICMrU1RBUlRVUDog c2hvd3N0YXJzIg0KICA6Z3JvdXAgJ29yZy1hcHBlYXJhbmNlDQogIDp0eXBlICdib29sZWFuKQ0K DQooZGVmY3VzdG9tIG9yZy1oaWRkZW4ta2V5d29yZHMgbmlsDQogICJMaXN0IG9mIHN5bWJvbHMg Y29ycmVzcG9uZGluZyB0byBrZXl3b3JkcyB0byBiZSBoaWRkZW4gdGhlIG9yZyBidWZmZXIuDQpG b3IgZXhhbXBsZSwgYSB2YWx1ZSAnKHRpdGxlKSBmb3IgdGhpcyBsaXN0IHdpbGwgbWFrZSB0aGUg ZG9jdW1lbnQncyB0aXRsZQ0KYXBwZWFyIGluIHRoZSBidWZmZXIgd2l0aG91dCB0aGUgaW5pdGlh bCAjK1RJVExFOiBrZXl3b3JkLiINCiAgOmdyb3VwICdvcmctYXBwZWFyYW5jZQ0KICA6dmVyc2lv biAiMjQuMSINCiAgOnR5cGUgJyhzZXQgKGNvbnN0IDp0YWcgIiMrQVVUSE9SIiBhdXRob3IpDQoJ ICAgICAgKGNvbnN0IDp0YWcgIiMrREFURSIgZGF0ZSkNCgkgICAgICAoY29uc3QgOnRhZyAiIytF TUFJTCIgZW1haWwpDQoJICAgICAgKGNvbnN0IDp0YWcgIiMrVElUTEUiIHRpdGxlKSkpDQoNCihk ZWZjdXN0b20gb3JnLWN1c3RvbS1wcm9wZXJ0aWVzIG5pbA0KICAiTGlzdCBvZiBwcm9wZXJ0aWVz IChhcyBzdHJpbmdzKSB3aXRoIGEgc3BlY2lhbCBtZWFuaW5nLg0KVGhlIGRlZmF1bHQgdXNlIG9m IHRoZXNlIGN1c3RvbSBwcm9wZXJ0aWVzIGlzIHRvIGxldCB0aGUgdXNlcg0KaGlkZSB0aGVtIHdp dGggYG9yZy10b2dnbGUtY3VzdG9tLXByb3BlcnRpZXMtdmlzaWJpbGl0eScuIg0KICA6Z3JvdXAg J29yZy1wcm9wZXJ0aWVzDQogIDpncm91cCAnb3JnLWFwcGVhcmFuY2UNCiAgOnZlcnNpb24gIjI0 LjMiDQogIDp0eXBlICcocmVwZWF0IChzdHJpbmcgOnRhZyAiUHJvcGVydHkgTmFtZSIpKSkNCg0K KGRlZmN1c3RvbSBvcmctZm9udGlmeS1kb25lLWhlYWRsaW5lIG5pbA0KICAiTm9uLW5pbCBtZWFu cyBjaGFuZ2UgdGhlIGZhY2Ugb2YgYSBoZWFkbGluZSBpZiBpdCBpcyBtYXJrZWQgRE9ORS4NCk5v cm1hbGx5LCBvbmx5IHRoZSBUT0RPL0RPTkUga2V5d29yZCBpbmRpY2F0ZXMgdGhlIHN0YXRlIG9m IGEgaGVhZGxpbmUuDQpXaGVuIHRoaXMgaXMgbm9uLW5pbCwgdGhlIGhlYWRsaW5lIGFmdGVyIHRo ZSBrZXl3b3JkIGlzIHNldCB0byB0aGUNCmBvcmctaGVhZGxpbmUtZG9uZScgYXMgYW4gYWRkaXRp b25hbCBpbmRpY2F0aW9uLiINCiAgOmdyb3VwICdvcmctYXBwZWFyYW5jZQ0KICA6dHlwZSAnYm9v bGVhbikNCg0KKGRlZmN1c3RvbSBvcmctZm9udGlmeS1lbXBoYXNpemVkLXRleHQgdA0KICAiTm9u LW5pbCBtZWFucyBmb250aWZ5ICpib2xkKiwgL2l0YWxpYy8gYW5kIF91bmRlcmxpbmVkXyB0ZXh0 Lg0KQ2hhbmdpbmcgdGhpcyB2YXJpYWJsZSByZXF1aXJlcyBhIHJlc3RhcnQgb2YgRW1hY3MgdG8g dGFrZSBlZmZlY3QuIg0KICA6Z3JvdXAgJ29yZy1hcHBlYXJhbmNlDQogIDp0eXBlICdib29sZWFu KQ0KDQooZGVmY3VzdG9tIG9yZy1mb250aWZ5LXdob2xlLWhlYWRpbmctbGluZSBuaWwNCiAgIk5v bi1uaWwgbWVhbnMgZm9udGlmeSB0aGUgd2hvbGUgbGluZSBmb3IgaGVhZGluZ3MuDQpUaGlzIGlz IHVzZWZ1bCB3aGVuIHNldHRpbmcgYSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUNCm9yZy1sZXZl bC0qIGZhY2VzLiINCiAgOmdyb3VwICdvcmctYXBwZWFyYW5jZQ0KICA6dHlwZSAnYm9vbGVhbikN Cg0KKGRlZmN1c3RvbSBvcmctaGlnaGxpZ2h0LWxhdGV4LWFuZC1yZWxhdGVkIG5pbA0KICAiTm9u LW5pbCBtZWFucyBoaWdobGlnaHQgTGFUZVggcmVsYXRlZCBzeW50YXggaW4gdGhlIGJ1ZmZlci4N CldoZW4gbm9uIG5pbCwgdGhlIHZhbHVlIHNob3VsZCBiZSBhIGxpc3QgY29udGFpbmluZyBhbnkg b2YgdGhlDQpmb2xsb3dpbmcgc3ltYm9sczoNCiAgYGxhdGV4JyAgICBIaWdobGlnaHQgTGFUZVgg c25pcHBldHMgYW5kIGVudmlyb25tZW50cy4NCiAgYHNjcmlwdCcgICBIaWdobGlnaHQgc3Vic2Ny aXB0IGFuZCBzdXBlcnNjcmlwdC4NCiAgYGVudGl0aWVzJyBIaWdobGlnaHQgZW50aXRpZXMuIg0K ICA6Z3JvdXAgJ29yZy1hcHBlYXJhbmNlDQogIDp2ZXJzaW9uICIyNC40Ig0KICA6cGFja2FnZS12 ZXJzaW9uICcoT3JnIC4gIjguMCIpDQogIDp0eXBlICcoY2hvaWNlDQoJICAoY29uc3QgOnRhZyAi Tm8gaGlnaGxpZ2h0aW5nIiBuaWwpDQoJICAoc2V0IDpncmVlZHkgdCA6dGFnICJIaWdobGlnaHQi DQoJICAgICAgIChjb25zdCA6dGFnICJMYVRlWCBzbmlwcGV0cyBhbmQgZW52aXJvbm1lbnRzIiBs YXRleCkNCgkgICAgICAgKGNvbnN0IDp0YWcgIlN1YnNjcmlwdCBhbmQgc3VwZXJzY3JpcHQiIHNj cmlwdCkNCgkgICAgICAgKGNvbnN0IDp0YWcgIkVudGl0aWVzIiBlbnRpdGllcykpKSkNCg0KKGRl ZmN1c3RvbSBvcmctaGlkZS1lbXBoYXNpcy1tYXJrZXJzIG5pbA0KICAiTm9uLW5pbCBtZWFuIGZv bnQtbG9jayBzaG91bGQgaGlkZSB0aGUgZW1waGFzaXMgbWFya2VyIGNoYXJhY3RlcnMuIg0KICA6 Z3JvdXAgJ29yZy1hcHBlYXJhbmNlDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9y Zy1wcmV0dHktZW50aXRpZXMgbmlsDQogICJOb24tbmlsIG1lYW5zIHNob3cgZW50aXRpZXMgYXMg VVRGOCBjaGFyYWN0ZXJzLg0KV2hlbiBuaWwsIHRoZSBcXG5hbWUgZm9ybSByZW1haW5zIGluIHRo ZSBidWZmZXIuIg0KICA6Z3JvdXAgJ29yZy1hcHBlYXJhbmNlDQogIDp2ZXJzaW9uICIyNC4xIg0K ICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmctcHJldHR5LWVudGl0aWVzLWluY2x1 ZGUtc3ViLXN1cGVyc2NyaXB0cyB0DQogICJOb24tbmlsIG1lYW5zLCBwcmV0dHkgZW50aXR5IGRp c3BsYXkgaW5jbHVkZXMgZm9ybWF0dGluZyBzdWIvc3VwZXJzY3JpcHRzLiINCiAgOmdyb3VwICdv cmctYXBwZWFyYW5jZQ0KICA6dmVyc2lvbiAiMjQuMSINCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihk ZWZ2YXIgb3JnLWVtcGgtcmUgbmlsDQogICJSZWd1bGFyIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5n IGVtcGhhc2lzLg0KQWZ0ZXIgYSBtYXRjaCwgdGhlIG1hdGNoIGdyb3VwcyBjb250YWluIHRoZXNl IGVsZW1lbnRzOg0KMCAgVGhlIG1hdGNoIG9mIHRoZSBmdWxsIHJlZ3VsYXIgZXhwcmVzc2lvbiwg aW5jbHVkaW5nIHRoZSBjaGFyYWN0ZXJzDQogICBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwcm9wZXIg bWF0Y2gNCjEgIFRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBwcm9wZXIgbWF0Y2gsIG9yIGVtcHR5 IGF0IGJlZ2lubmluZyBvZiBsaW5lDQoyICBUaGUgcHJvcGVyIG1hdGNoLCBpbmNsdWRpbmcgdGhl IGxlYWRpbmcgYW5kIHRyYWlsaW5nIG1hcmtlcnMNCjMgIFRoZSBsZWFkaW5nIG1hcmtlciBsaWtl ICogb3IgLywgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBoaWdobGlnaHRpbmcNCjQgIFRoZSB0ZXh0 IGJldHdlZW4gdGhlIGVtcGhhc2lzIG1hcmtlcnMsIG5vdCBpbmNsdWRpbmcgdGhlIG1hcmtlcnMN CjUgIFRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIG1hdGNoLCBlbXB0eSBhdCB0aGUgZW5kIG9mIGEg bGluZSIpDQooZGVmdmFyIG9yZy12ZXJiYXRpbS1yZSBuaWwNCiAgIlJlZ3VsYXIgZXhwcmVzc2lv biBmb3IgbWF0Y2hpbmcgdmVyYmF0aW0gdGV4dC4iKQ0KKGRlZnZhciBvcmctZW1waGFzaXMtcmVn ZXhwLWNvbXBvbmVudHMpIDsgZGVmaW5lZCBqdXN0IGJlbG93DQooZGVmdmFyIG9yZy1lbXBoYXNp cy1hbGlzdCkgOyBkZWZpbmVkIGp1c3QgYmVsb3cNCihkZWZ1biBvcmctc2V0LWVtcGgtcmUgKHZh ciB2YWwpDQogICJTZXQgdmFyaWFibGUgYW5kIGNvbXB1dGUgdGhlIGVtcGhhc2lzIHJlZ3VsYXIg ZXhwcmVzc2lvbi4iDQogIChzZXQgdmFyIHZhbCkNCiAgKHdoZW4gKGFuZCAoYm91bmRwICdvcmct ZW1waGFzaXMtYWxpc3QpDQoJICAgICAoYm91bmRwICdvcmctZW1waGFzaXMtcmVnZXhwLWNvbXBv bmVudHMpDQoJICAgICBvcmctZW1waGFzaXMtYWxpc3Qgb3JnLWVtcGhhc2lzLXJlZ2V4cC1jb21w b25lbnRzKQ0KICAgIChsZXQqICgoZSBvcmctZW1waGFzaXMtcmVnZXhwLWNvbXBvbmVudHMpDQoJ ICAgKHByZSAoY2FyIGUpKQ0KCSAgIChwb3N0IChudGggMSBlKSkNCgkgICAoYm9yZGVyIChudGgg MiBlKSkNCgkgICAoYm9keSAobnRoIDMgZSkpDQoJICAgKG5sIChudGggNCBlKSkNCgkgICAoYm9k eTEgKGNvbmNhdCBib2R5ICIqPyIpKQ0KCSAgIChtYXJrZXJzIChtYXBjb25jYXQgJ2NhciBvcmct ZW1waGFzaXMtYWxpc3QgIiIpKQ0KCSAgICh2bWFya2VycyAobWFwY29uY2F0DQoJCSAgICAgIChs YW1iZGEgKHgpIChpZiAoZXEgKG50aCAyIHgpICd2ZXJiYXRpbSkgKGNhciB4KSAiIikpDQoJCSAg ICAgIG9yZy1lbXBoYXNpcy1hbGlzdCAiIikpKQ0KICAgICAgOzsgbWFrZSBzdXJlIHNwZWNpYWwg Y2hhcmFjdGVycyBhcHBlYXIgYXQgdGhlIHJpZ2h0IHBvc2l0aW9uIGluIHRoZSBjbGFzcw0KICAg ICAgKGlmIChzdHJpbmctbWF0Y2ggIlxcXiIgbWFya2VycykNCgkgIChzZXRxIG1hcmtlcnMgKGNv bmNhdCAocmVwbGFjZS1tYXRjaCAiIiB0IHQgbWFya2VycykgIl4iKSkpDQogICAgICAoaWYgKHN0 cmluZy1tYXRjaCAiLSIgbWFya2VycykNCgkgIChzZXRxIG1hcmtlcnMgKGNvbmNhdCAocmVwbGFj ZS1tYXRjaCAiIiB0IHQgbWFya2VycykgIi0iKSkpDQogICAgICAoaWYgKHN0cmluZy1tYXRjaCAi XFxeIiB2bWFya2VycykNCgkgIChzZXRxIHZtYXJrZXJzIChjb25jYXQgKHJlcGxhY2UtbWF0Y2gg IiIgdCB0IHZtYXJrZXJzKSAiXiIpKSkNCiAgICAgIChpZiAoc3RyaW5nLW1hdGNoICItIiB2bWFy a2VycykNCgkgIChzZXRxIHZtYXJrZXJzIChjb25jYXQgKHJlcGxhY2UtbWF0Y2ggIiIgdCB0IHZt YXJrZXJzKSAiLSIpKSkNCiAgICAgIChpZiAoPiBubCAwKQ0KICAgICAgICAgIChzZXRxIGJvZHkx IChjb25jYXQgYm9keTEgIlxcKD86XG4iIGJvZHkgIio/XFwpXFx7MCwiDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaW50LXRvLXN0cmluZyBubCkgIlxcfSIpKSkNCiAgICAgIDs7IE1h a2UgdGhlIHJlZ2V4cA0KICAgICAgKHNldHEgb3JnLWVtcGgtcmUNCgkgICAgKGNvbmNhdCAiXFwo WyIgcHJlICJdXFx8XlxcKSINCgkJICAgICJcXCgiDQoJCSAgICAiXFwoWyIgbWFya2VycyAiXVxc KSINCgkJICAgICJcXCgiDQoJCSAgICAiW14iIGJvcmRlciAiXVxcfCINCgkJICAgICJbXiIgYm9y ZGVyICJdIg0KCQkgICAgYm9keTENCgkJICAgICJbXiIgYm9yZGVyICJdIg0KCQkgICAgIlxcKSIN CgkJICAgICJcXDNcXCkiDQoJCSAgICAiXFwoWyIgcG9zdCAiXVxcfCRcXCkiKSkNCiAgICAgIChz ZXRxIG9yZy12ZXJiYXRpbS1yZQ0KCSAgICAoY29uY2F0ICJcXChbIiBwcmUgIl1cXHxeXFwpIg0K CQkgICAgIlxcKCINCgkJICAgICJcXChbIiB2bWFya2VycyAiXVxcKSINCgkJICAgICJcXCgiDQoJ CSAgICAiW14iIGJvcmRlciAiXVxcfCINCgkJICAgICJbXiIgYm9yZGVyICJdIg0KCQkgICAgYm9k eTENCgkJICAgICJbXiIgYm9yZGVyICJdIg0KCQkgICAgIlxcKSINCgkJICAgICJcXDNcXCkiDQoJ CSAgICAiXFwoWyIgcG9zdCAgIl1cXHwkXFwpIikpKSkpDQoNCjs7IFRoaXMgdXNlZCB0byBiZSBh IGRlZmN1c3RvbSAoT3JnIDw4LjApIGJ1dCBhbGxvd2luZyB0aGUgdXNlcnMgdG8NCjs7IHNldCB0 aGlzIG9wdGlvbiBwcm92ZWQgY3VtYmVyc29tZS4gIFNlZSB0aGlzIG1lc3NhZ2UvdGhyZWFkOg0K OzsgaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmVtYWNzLm9yZ21vZGUvNjg2ODENCihk ZWZ2YXIgb3JnLWVtcGhhc2lzLXJlZ2V4cC1jb21wb25lbnRzDQogICcoIiBcdCgnXCJ7IiAiLSBc dC4sOiE/OydcIil9XFwiICIgXHRcclxuLFwiJyIgIi4iIDEpDQogICJDb21wb25lbnRzIHVzZWQg dG8gYnVpbGQgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgZW1waGFzaXMuDQpUaGlzIGlzIGEg bGlzdCB3aXRoIGZpdmUgZW50cmllcy4gIFRlcm1pbm9sb2d5OiAgSW4gYW4gZW1waGFzaXMgc3Ry aW5nDQpsaWtlIFwiICpzdHJvbmcgd29yZCogXCIsIHdlIGNhbGwgdGhlIGluaXRpYWwgc3BhY2Ug UFJFTUFUQ0gsIHRoZSBmaW5hbA0Kc3BhY2UgUE9TVE1BVENILCB0aGUgc3RhcnMgTUFSS0VSUywg XCJzXCIgYW5kIFwiZFwiIGFyZSBCT1JERVIgY2hhcmFjdGVycw0KYW5kIFwidHJvbmcgd29yXCIg aXMgdGhlIGJvZHkuICBUaGUgZGlmZmVyZW50IGNvbXBvbmVudHMgaW4gdGhpcyB2YXJpYWJsZQ0K c3BlY2lmeSB3aGF0IGlzIGFsbG93ZWQvZm9yYmlkZGVuIGluIGVhY2ggcGFydDoNCg0KcHJlICAg ICAgICAgIENoYXJzIGFsbG93ZWQgYXMgcHJlbWF0Y2guICBCZWdpbm5pbmcgb2YgbGluZSB3aWxs IGJlIGFsbG93ZWQgdG9vLg0KcG9zdCAgICAgICAgIENoYXJzIGFsbG93ZWQgYXMgcG9zdG1hdGNo LiAgRW5kIG9mIGxpbmUgd2lsbCBiZSBhbGxvd2VkIHRvby4NCmJvcmRlciAgICAgICBUaGUgY2hh cnMgKmZvcmJpZGRlbiogYXMgYm9yZGVyIGNoYXJhY3RlcnMuDQpib2R5LXJlZ2V4cCAgQSByZWdl eHAgbGlrZSBcIi5cIiB0byBtYXRjaCBhIGJvZHkgY2hhcmFjdGVyLiAgRG9uJ3QgdXNlDQogICAg ICAgICAgICAgbm9uLXNoeSBncm91cHMgaGVyZSwgYW5kIGRvbid0IGFsbG93IG5ld2xpbmUgaGVy ZS4NCm5ld2xpbmUgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgbmV3bGluZXMgYWxsb3dlZCBp biBhbiBlbXBoYXNpcyBleHAuDQoNCllvdSBuZWVkIHRvIHJlbG9hZCBPcmcgb3IgdG8gcmVzdGFy dCBFbWFjcyBhZnRlciBjdXN0b21pemluZyB0aGlzLiIpDQoNCihkZWZjdXN0b20gb3JnLWVtcGhh c2lzLWFsaXN0DQogIGAoKCIqIiBib2xkKQ0KICAgICgiLyIgaXRhbGljKQ0KICAgICgiXyIgdW5k ZXJsaW5lKQ0KICAgICgiPSIgb3JnLXZlcmJhdGltIHZlcmJhdGltKQ0KICAgICgifiIgb3JnLWNv ZGUgdmVyYmF0aW0pDQogICAgKCIrIiAsKGlmIChmZWF0dXJlcCAneGVtYWNzKSAnb3JnLXRhYmxl ICcoOnN0cmlrZS10aHJvdWdoIHQpKSkpDQogICJBbGlzdCBvZiBjaGFyYWN0ZXJzIGFuZCBmYWNl cyB0byBlbXBoYXNpemUgdGV4dC4NClRleHQgc3RhcnRpbmcgYW5kIGVuZGluZyB3aXRoIGEgc3Bl Y2lhbCBjaGFyYWN0ZXIgd2lsbCBiZSBlbXBoYXNpemVkLA0KZm9yIGV4YW1wbGUgKmJvbGQqLCBf dW5kZXJsaW5lZF8gYW5kIC9pdGFsaWMvLiAgVGhpcyB2YXJpYWJsZSBzZXRzIHRoZQ0KbWFya2Vy IGNoYXJhY3RlcnMgYW5kIHRoZSBmYWNlIHRvIGJlIHVzZWQgYnkgZm9udC1sb2NrIGZvciBoaWdo bGlnaHRpbmcNCmluIE9yZy1tb2RlIEVtYWNzIGJ1ZmZlcnMuDQoNCllvdSBuZWVkIHRvIHJlbG9h ZCBPcmcgb3IgdG8gcmVzdGFydCBFbWFjcyBhZnRlciBjdXN0b21pemluZyB0aGlzLiINCiAgOmdy b3VwICdvcmctYXBwZWFyYW5jZQ0KICA6c2V0ICdvcmctc2V0LWVtcGgtcmUNCiAgOnZlcnNpb24g IjI0LjQiDQogIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOC4wIikNCiAgOnR5cGUgJyhyZXBl YXQNCgkgIChsaXN0DQoJICAgKHN0cmluZyA6dGFnICJNYXJrZXIgY2hhcmFjdGVyIikNCgkgICAo Y2hvaWNlDQoJICAgIChmYWNlIDp0YWcgIkZvbnQtbG9jay1mYWNlIikNCgkgICAgKHBsaXN0IDp0 YWcgIkZhY2UgcHJvcGVydHkgbGlzdCIpKQ0KCSAgIChvcHRpb24gKGNvbnN0IHZlcmJhdGltKSkp KSkNCg0KKGRlZnZhciBvcmctcHJvdGVjdGluZy1ibG9ja3MNCiAgJygic3JjIiAiZXhhbXBsZSIg ImxhdGV4IiAiYXNjaWkiICJodG1sIiAiZGl0YWEiICJkb3QiICJyIiAiUiIpDQogICJCbG9ja3Mg dGhhdCBjb250YWluIHRleHQgdGhhdCBpcyBxdW90ZWQsIGkuZS4gbm90IHByb2Nlc3NlZCBhcyBP cmcgc3ludGF4Lg0KVGhpcyBpcyBuZWVkZWQgZm9yIGZvbnQtbG9jayBzZXR1cC4iKQ0KDQo7Ozsg TWlzY2VsbGFuZW91cyBvcHRpb25zDQoNCihkZWZncm91cCBvcmctY29tcGxldGlvbiBuaWwNCiAg IkNvbXBsZXRpb24gaW4gT3JnLW1vZGUuIg0KICA6dGFnICJPcmcgQ29tcGxldGlvbiINCiAgOmdy b3VwICdvcmcpDQoNCihkZWZjdXN0b20gb3JnLWNvbXBsZXRpb24tdXNlLWlkbyBuaWwNCiAgIk5v bi1uaWwgbWVhbnMgdXNlIGlkbyBjb21wbGV0aW9uIHdoZXJldmVyIHBvc3NpYmxlLg0KTm90ZSB0 aGF0IGBpZG8tbW9kZScgbXVzdCBiZSBhY3RpdmUgZm9yIHRoaXMgdmFyaWFibGUgdG8gYmUgcmVs ZXZhbnQuDQpJZiB5b3UgZGVjaWRlIHRvIHR1cm4gdGhpcyB2YXJpYWJsZSBvbiwgeW91IG1pZ2h0 IHdlbGwgd2FudCB0byB0dXJuIG9mZg0KYG9yZy1vdXRsaW5lLXBhdGgtY29tcGxldGUtaW4tc3Rl cHMnLg0KU2VlIGFsc28gYG9yZy1jb21wbGV0aW9uLXVzZS1pc3dpdGNoYicuIg0KICA6Z3JvdXAg J29yZy1jb21wbGV0aW9uDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1jb21w bGV0aW9uLXVzZS1pc3dpdGNoYiBuaWwNCiAgIk5vbi1uaWwgbWVhbnMgdXNlIGlzd2l0Y2hiIGNv bXBsZXRpb24gd2hlcmV2ZXIgcG9zc2libGUuDQpOb3RlIHRoYXQgYGlzd2l0Y2hiLW1vZGUnIG11 c3QgYmUgYWN0aXZlIGZvciB0aGlzIHZhcmlhYmxlIHRvIGJlIHJlbGV2YW50Lg0KSWYgeW91IGRl Y2lkZSB0byB0dXJuIHRoaXMgdmFyaWFibGUgb24sIHlvdSBtaWdodCB3ZWxsIHdhbnQgdG8gdHVy biBvZmYNCmBvcmctb3V0bGluZS1wYXRoLWNvbXBsZXRlLWluLXN0ZXBzJy4NCk5vdGUgdGhhdCB0 aGlzIHZhcmlhYmxlIGhhcyBvbmx5IGFuIGVmZmVjdCBpZiBgb3JnLWNvbXBsZXRpb24tdXNlLWlk bycgaXMgbmlsLiINCiAgOmdyb3VwICdvcmctY29tcGxldGlvbg0KICA6dHlwZSAnYm9vbGVhbikN Cg0KKGRlZmN1c3RvbSBvcmctY29tcGxldGlvbi1mYWxsYmFjay1jb21tYW5kICdoaXBwaWUtZXhw YW5kDQogICJUaGUgZXhwYW5zaW9uIGNvbW1hbmQgY2FsbGVkIGJ5IFxcW3Bjb21wbGV0ZV0gaW4g bm9ybWFsIGNvbnRleHQuDQpOb3JtYWwgbWVhbnMsIG5vIG9yZy1tb2RlLXNwZWNpZmljIGNvbnRl eHQuIg0KICA6Z3JvdXAgJ29yZy1jb21wbGV0aW9uDQogIDp0eXBlICdmdW5jdGlvbikNCg0KOzs7 IEZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGZyb20gdGhlaXIgcGFja2FnZXMNCjs7ICBEZWNsYXJl ZCBoZXJlIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzDQoNCjs7IFhFbWFjcyBvbmx5DQooZGVm dmFyIG91dGxpbmUtbW9kZS1tZW51LWhlYWRpbmcpDQooZGVmdmFyIG91dGxpbmUtbW9kZS1tZW51 LXNob3cpDQooZGVmdmFyIG91dGxpbmUtbW9kZS1tZW51LWhpZGUpDQooZGVmdmFyIHptYWNzLXJl Z2lvbnMpIDsgWEVtYWNzIHJlZ2lvbnMNCg0KOzsgRW1hY3Mgb25seQ0KKGRlZnZhciBtYXJrLWFj dGl2ZSkNCg0KOzsgVmFyaW91cyBwYWNrYWdlcw0KKGRlY2xhcmUtZnVuY3Rpb24gY2FsZW5kYXIt YWJzb2x1dGUtZnJvbS1pc28gICAgImNhbC1pc28iICAgIChkYXRlKSkNCihkZWNsYXJlLWZ1bmN0 aW9uIGNhbGVuZGFyLWZvcndhcmQtZGF5ICAgICAgICAgICJjYWwtbW92ZSIgICAoYXJnKSkNCihk ZWNsYXJlLWZ1bmN0aW9uIGNhbGVuZGFyLWdvdG8tZGF0ZSAgICAgICAgICAgICJjYWwtbW92ZSIg ICAoZGF0ZSkpDQooZGVjbGFyZS1mdW5jdGlvbiBjYWxlbmRhci1nb3RvLXRvZGF5ICAgICAgICAg ICAiY2FsLW1vdmUiICAgKCkpDQooZGVjbGFyZS1mdW5jdGlvbiBjYWxlbmRhci1pc28tZnJvbS1h YnNvbHV0ZSAgICAiY2FsLWlzbyIgICAgKGRhdGUpKQ0KKGRlZnZhciBjYWxjLWVtYmVkZGVkLWNs b3NlLWZvcm11bGEpDQooZGVmdmFyIGNhbGMtZW1iZWRkZWQtb3Blbi1mb3JtdWxhKQ0KKGRlY2xh cmUtZnVuY3Rpb24gY2RsYXRleC10YWIgImV4dDpjZGxhdGV4IiAoKSkNCihkZWNsYXJlLWZ1bmN0 aW9uIGNkbGF0ZXgtY29tcHV0ZS10YWJsZXMgImV4dDpjZGxhdGV4IiAoKSkNCihkZWNsYXJlLWZ1 bmN0aW9uIGRpcmVkLWdldC1maWxlbmFtZSAiZGlyZWQiICgmb3B0aW9uYWwgbG9jYWxwIG5vLWVy cm9yLWlmLW5vdC1maWxlcCkpDQooZGVmdmFyIGZvbnQtbG9jay11bmZvbnRpZnktcmVnaW9uLWZ1 bmN0aW9uKQ0KKGRlY2xhcmUtZnVuY3Rpb24gaXN3aXRjaGItcmVhZC1idWZmZXIgImlzd2l0Y2hi Ig0KICAgICAgICAgICAgICAgICAgKHByb21wdCAmb3B0aW9uYWwgZGVmYXVsdCByZXF1aXJlLW1h dGNoIHN0YXJ0IG1hdGNoZXMtc2V0KSkNCihkZWZ2YXIgaXN3aXRjaGItdGVtcC1idWZsaXN0KQ0K KGRlY2xhcmUtZnVuY3Rpb24gb3JnLWdudXMtZm9sbG93LWxpbmsgIm9yZy1nbnVzIiAoJm9wdGlv bmFsIGdyb3VwIGFydGljbGUpKQ0KKGRlZnZhciBvcmctYWdlbmRhLXRhZ3MtdG9kby1ob25vci1p Z25vcmUtb3B0aW9ucykNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1hZ2VuZGEtc2tpcCAib3JnLWFn ZW5kYSIgKCkpDQooZGVjbGFyZS1mdW5jdGlvbg0KIG9yZy1hZ2VuZGEtZm9ybWF0LWl0ZW0gIm9y Zy1hZ2VuZGEiDQogKGV4dHJhIHR4dCAmb3B0aW9uYWwgbGV2ZWwgY2F0ZWdvcnkgdGFncyBkb3Rp bWUgbm9wcmVmaXggcmVtb3ZlLXJlIGhhYml0cCkpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctYWdl bmRhLW5ldy1tYXJrZXIgIm9yZy1hZ2VuZGEiICgmb3B0aW9uYWwgcG9zKSkNCihkZWNsYXJlLWZ1 bmN0aW9uIG9yZy1hZ2VuZGEtY2hhbmdlLWFsbC1saW5lcyAib3JnLWFnZW5kYSINCgkJICAobmV3 aGVhZCBoZG1hcmtlciAmb3B0aW9uYWwgZml4ZmFjZSBqdXN0LXRoaXMpKQ0KKGRlY2xhcmUtZnVu Y3Rpb24gb3JnLWFnZW5kYS1zZXQtcmVzdHJpY3Rpb24tbG9jayAib3JnLWFnZW5kYSIgKCZvcHRp b25hbCB0eXBlKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1hZ2VuZGEtbWF5YmUtcmVkbyAib3Jn LWFnZW5kYSIgKCkpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctYWdlbmRhLXNhdmUtbWFya2Vycy1m b3ItY3V0LWFuZC1wYXN0ZSAib3JnLWFnZW5kYSINCgkJICAoYmVnIGVuZCkpDQooZGVjbGFyZS1m dW5jdGlvbiBvcmctYWdlbmRhLWNvcHktbG9jYWwtdmFyaWFibGUgIm9yZy1hZ2VuZGEiICh2YXIp KQ0KKGRlY2xhcmUtZnVuY3Rpb24gb3JnLWFnZW5kYS1jaGVjay1mb3ItdGltZXN0YW1wLWFzLXJl YXNvbi10by1pZ25vcmUtdG9kby1pdGVtDQoJCSAgIm9yZy1hZ2VuZGEiICgmb3B0aW9uYWwgZW5k KSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1pbmxpbmV0YXNrLXJlbW92ZS1FTkQtbWF5YmUgIm9y Zy1pbmxpbmV0YXNrIiAoKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1pbmxpbmV0YXNrLWluLXRh c2stcCAib3JnLWlubGluZXRhc2siICgpKQ0KKGRlY2xhcmUtZnVuY3Rpb24gb3JnLWlubGluZXRh c2stZ290by1iZWdpbm5pbmcgIm9yZy1pbmxpbmV0YXNrIiAoKSkNCihkZWNsYXJlLWZ1bmN0aW9u IG9yZy1pbmxpbmV0YXNrLWdvdG8tZW5kICJvcmctaW5saW5ldGFzayIgKCkpDQooZGVjbGFyZS1m dW5jdGlvbiBvcmctaW5kZW50LW1vZGUgIm9yZy1pbmRlbnQiICgmb3B0aW9uYWwgYXJnKSkNCihk ZWNsYXJlLWZ1bmN0aW9uIHBhcnNlLXRpbWUtc3RyaW5nICJwYXJzZS10aW1lIiAoc3RyaW5nKSkN CihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1hdHRhY2gtcmV2ZWFsICJvcmctYXR0YWNoIiAoJm9wdGlv bmFsIGlmLWV4aXN0cykpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmd0Ymwtc2VuZC10YWJsZSAib3Jn LXRhYmxlIiAoJm9wdGlvbmFsIG1heWJlKSkNCihkZWZ2YXIgcmVtZW1iZXItZGF0YS1maWxlKQ0K KGRlZnZhciB0ZXhtYXRocC13aHkpDQooZGVjbGFyZS1mdW5jdGlvbiBzcGVlZGJhci1saW5lLWRp cmVjdG9yeSAic3BlZWRiYXIiICgmb3B0aW9uYWwgZGVwdGgpKQ0KKGRlY2xhcmUtZnVuY3Rpb24g dGFibGUtLWF0LWNlbGwtcCAidGFibGUiIChwb3NpdGlvbiAmb3B0aW9uYWwgb2JqZWN0IGF0LWNv bHVtbikpDQoNCihkZWZ2YXIgb3JnLWxhdGV4LXJlZ2V4cHMpDQoNCjs7OyBBdXRvbG9hZCBhbmQg cHJlcGFyZSBzb21lIG9yZyBtb2R1bGVzDQoNCjs7IFNvbWUgdGFibGUgc3R1ZmYgdGhhdCBuZWVk cyB0byBiZSBkZWZpbmVkIGhlcmUsIGJlY2F1c2UgaXQgaXMgdXNlZA0KOzsgYnkgdGhlIGZ1bmN0 aW9ucyBzZXR0aW5nIHVwIG9yZy1tb2RlIG9yIGNoZWNraW5nIGZvciB0YWJsZSBjb250ZXh0Lg0K DQooZGVmY29uc3Qgb3JnLXRhYmxlLWFueS1saW5lLXJlZ2V4cCAiXlsgXHRdKlxcKHxcXHxcXCst Wy0rXVxcKSINCiAgIkRldGVjdCBhbiBvcmctdHlwZSBvciB0YWJsZS10eXBlIHRhYmxlLiIpDQoo ZGVmY29uc3Qgb3JnLXRhYmxlLWxpbmUtcmVnZXhwICJeWyBcdF0qfCINCiAgIkRldGVjdCBhbiBv cmctdHlwZSB0YWJsZSBsaW5lLiIpDQooZGVmY29uc3Qgb3JnLXRhYmxlLWRhdGFsaW5lLXJlZ2V4 cCAiXlsgXHRdKnxbXi1dIg0KICAiRGV0ZWN0IGFuIG9yZy10eXBlIHRhYmxlIGxpbmUuIikNCihk ZWZjb25zdCBvcmctdGFibGUtaGxpbmUtcmVnZXhwICJeWyBcdF0qfC0iDQogICJEZXRlY3QgYW4g b3JnLXR5cGUgdGFibGUgaGxpbmUuIikNCihkZWZjb25zdCBvcmctdGFibGUxLWhsaW5lLXJlZ2V4 cCAiXlsgXHRdKlxcKy1bLStdIg0KICAiRGV0ZWN0IGEgdGFibGUtdHlwZSB0YWJsZSBobGluZS4i KQ0KKGRlZmNvbnN0IG9yZy10YWJsZS1hbnktYm9yZGVyLXJlZ2V4cCAiXlsgXHRdKltefCsgXHRd Ig0KICAiRGV0ZWN0IHRoZSBmaXJzdCBsaW5lIG91dHNpZGUgYSB0YWJsZSB3aGVuIHNlYXJjaGlu ZyBmcm9tIHdpdGhpbiBpdC4NClRoaXMgd29ya3MgZm9yIGJvdGggdGFibGUgdHlwZXMuIikNCg0K KGRlZmNvbnN0IG9yZy1UQkxGTS1yZWdleHAgIl5bIFx0XSojXFwrVEJMRk06ICINCiAgIkRldGVj dCBhICMrVEJMRk0gbGluZS4iKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVuIHR1cm4tb24tb3Jn dGJsICgpDQogICJVbmNvbmRpdGlvbmFsbHkgdHVybiBvbiBgb3JndGJsLW1vZGUnLiINCiAgKHJl cXVpcmUgJ29yZy10YWJsZSkNCiAgKG9yZ3RibC1tb2RlIDEpKQ0KDQooZGVmdW4gb3JnLWF0LXRh YmxlLXAgKCZvcHRpb25hbCB0YWJsZS10eXBlKQ0KICAiUmV0dXJuIHQgaWYgdGhlIGN1cnNvciBp cyBpbnNpZGUgYW4gb3JnLXR5cGUgdGFibGUuDQpJZiBUQUJMRS1UWVBFIGlzIG5vbi1uaWwsIGFs c28gY2hlY2sgZm9yIHRhYmxlLmVsLXR5cGUgdGFibGVzLiINCiAgKGlmIG9yZy1lbmFibGUtdGFi bGUtZWRpdG9yDQogICAgICAoc2F2ZS1leGN1cnNpb24NCgkoYmVnaW5uaW5nLW9mLWxpbmUgMSkN CgkobG9va2luZy1hdCAoaWYgdGFibGUtdHlwZSBvcmctdGFibGUtYW55LWxpbmUtcmVnZXhwDQoJ CSAgICAgIG9yZy10YWJsZS1saW5lLXJlZ2V4cCkpKQ0KICAgIG5pbCkpDQooZGVmc3Vic3Qgb3Jn LXRhYmxlLXAgKCkgKG9yZy1hdC10YWJsZS1wKSkNCg0KKGRlZnVuIG9yZy1hdC10YWJsZS5lbC1w ICgpDQogICJSZXR1cm4gdCBpZiBhbmQgb25seSBpZiB3ZSBhcmUgYXQgYSB0YWJsZS5lbCB0YWJs ZS4iDQogIChhbmQgKG9yZy1hdC10YWJsZS1wICdhbnkpDQogICAgICAgKHNhdmUtZXhjdXJzaW9u DQoJIChnb3RvLWNoYXIgKG9yZy10YWJsZS1iZWdpbiAnYW55KSkNCgkgKGxvb2tpbmctYXQgb3Jn LXRhYmxlMS1obGluZS1yZWdleHApKSkpDQoNCihkZWZ1biBvcmctdGFibGUtcmVjb2duaXplLXRh YmxlLmVsICgpDQogICJJZiB0aGVyZSBpcyBhIHRhYmxlLmVsIHRhYmxlIG5lYXJieSwgcmVjb2du aXplIGl0IGFuZCBtb3ZlIGludG8gaXQuIg0KICAoaWYgb3JnLXRhYmxlLXRhYi1yZWNvZ25pemVz LXRhYmxlLmVsDQogICAgICAoaWYgKG9yZy1hdC10YWJsZS5lbC1wKQ0KCSAgKHByb2duDQoJICAg IChiZWdpbm5pbmctb2YtbGluZSAxKQ0KCSAgICAoaWYgKGxvb2tpbmctYXQgb3JnLXRhYmxlLWRh dGFsaW5lLXJlZ2V4cCkNCgkJbmlsDQoJICAgICAgKGlmIChsb29raW5nLWF0IG9yZy10YWJsZTEt aGxpbmUtcmVnZXhwKQ0KCQkgIChwcm9nbg0KCQkgICAgKGJlZ2lubmluZy1vZi1saW5lIDIpDQoJ CSAgICAoaWYgKGxvb2tpbmctYXQgb3JnLXRhYmxlLWFueS1ib3JkZXItcmVnZXhwKQ0KCQkJKGJl Z2lubmluZy1vZi1saW5lIC0xKSkpKSkNCgkgICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZCAifCIg KG9yZy10YWJsZS1lbmQgdCkgdCkNCgkJKHByb2duDQoJCSAgKHJlcXVpcmUgJ3RhYmxlKQ0KCQkg IChpZiAodGFibGUtLWF0LWNlbGwtcCAocG9pbnQpKQ0KCQkgICAgICB0DQoJCSAgICAobWVzc2Fn ZSAicmVjb2duaXppbmcgdGFibGUuZWwgdGFibGUuLi4iKQ0KCQkgICAgKHRhYmxlLXJlY29nbml6 ZS10YWJsZSkNCgkJICAgIChtZXNzYWdlICJyZWNvZ25pemluZyB0YWJsZS5lbCB0YWJsZS4uLmRv bmUiKSkpDQoJICAgICAgKGVycm9yICJUaGlzIHNob3VsZCBub3QgaGFwcGVuIikpDQoJICAgIHQp DQoJbmlsKQ0KICAgIG5pbCkpDQoNCihkZWZ1biBvcmctYXQtdGFibGUtaGxpbmUtcCAoKQ0KICAi UmV0dXJuIHQgaWYgdGhlIGN1cnNvciBpcyBpbnNpZGUgYSBobGluZSBpbiBhIHRhYmxlLiINCiAg KGlmIG9yZy1lbmFibGUtdGFibGUtZWRpdG9yDQogICAgICAoc2F2ZS1leGN1cnNpb24NCgkoYmVn aW5uaW5nLW9mLWxpbmUgMSkNCgkobG9va2luZy1hdCBvcmctdGFibGUtaGxpbmUtcmVnZXhwKSkN CiAgICBuaWwpKQ0KDQooZGVmdW4gb3JnLXRhYmxlLW1hcC10YWJsZXMgKGZ1bmN0aW9uICZvcHRp b25hbCBxdWlldGx5KQ0KICAiQXBwbHkgRlVOQ1RJT04gdG8gdGhlIHN0YXJ0IG9mIGFsbCB0YWJs ZXMgaW4gdGhlIGJ1ZmZlci4iDQogIChzYXZlLWV4Y3Vyc2lvbg0KICAgIChzYXZlLXJlc3RyaWN0 aW9uDQogICAgICAod2lkZW4pDQogICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KICAgICAg KHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctdGFibGUtYW55LWxpbmUtcmVnZXhwIG5pbCB0 KQ0KCSh1bmxlc3MgcXVpZXRseQ0KCSAgKG1lc3NhZ2UgIk1hcHBpbmcgdGFibGVzOiAlZCUlIiAo LyAoKiAxMDAuMCAocG9pbnQpKSAoYnVmZmVyLXNpemUpKSkpDQoJKGJlZ2lubmluZy1vZi1saW5l IDEpDQoJKHdoZW4gKGFuZCAobG9va2luZy1hdCBvcmctdGFibGUtbGluZS1yZWdleHApDQoJCSAg IDs7IEV4Y2x1ZGUgdGFibGVzIGluIHNyYy9leGFtcGxlL3ZlcmJhdGltL2Nsb2NrdGFibGUgYmxv Y2tzDQoJCSAgIChub3QgKG9yZy1pbi1ibG9jay1wICcoInNyYyIgImV4YW1wbGUiICJ2ZXJiYXRp bSIgImNsb2NrdGFibGUiKSkpKQ0KCSAgKHNhdmUtZXhjdXJzaW9uIChmdW5jYWxsIGZ1bmN0aW9u KSkNCgkgIChvciAobG9va2luZy1hdCBvcmctdGFibGUtbGluZS1yZWdleHApDQoJICAgICAgKGZv cndhcmQtY2hhciAxKSkpDQoJKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy10YWJsZS1hbnktYm9yZGVy LXJlZ2V4cCBuaWwgMSkpKSkNCiAgKHVubGVzcyBxdWlldGx5IChtZXNzYWdlICJNYXBwaW5nIHRh YmxlczogZG9uZSIpKSkNCg0KKGRlY2xhcmUtZnVuY3Rpb24gb3JnLWNsb2NrLXNhdmUtbWFya2Vy cy1mb3ItY3V0LWFuZC1wYXN0ZSAib3JnLWNsb2NrIiAoYmVnIGVuZCkpDQooZGVjbGFyZS1mdW5j dGlvbiBvcmctY2xvY2stdXBkYXRlLW1vZGUtbGluZSAib3JnLWNsb2NrIiAoKSkNCihkZWNsYXJl LWZ1bmN0aW9uIG9yZy1yZXNvbHZlLWNsb2NrcyAib3JnLWNsb2NrIg0KCQkgICgmb3B0aW9uYWwg YWxzby1ub24tZGFuZ2xpbmctcCBwcm9tcHQgbGFzdC12YWxpZCkpDQoNCihkZWZ1biBvcmctYXQt VEJMRk0tcCAoJm9wdGlvbmFsIHBvcykNCiAgIlJldHVybiB0IHdoZW4gcG9pbnQgKG9yIFBPUykg aXMgaW4gIytUQkxGTSBsaW5lLiINCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKGxldCAoKHBvcyBw b3MpKSkNCiAgICAoZ290by1jaGFyIChvciBwb3MgKHBvaW50KSkpDQogICAgKGJlZ2lubmluZy1v Zi1saW5lIDEpDQogICAgKGxvb2tpbmctYXQgb3JnLVRCTEZNLXJlZ2V4cCkpKQ0KDQooZGVmdmFy IG9yZy1jbG9jay1zdGFydC10aW1lKQ0KKGRlZnZhciBvcmctY2xvY2stbWFya2VyIChtYWtlLW1h cmtlcikNCiAgIk1hcmtlciByZWNvcmRpbmcgdGhlIGxhc3QgY2xvY2staW4uIikNCihkZWZ2YXIg b3JnLWNsb2NrLWhkLW1hcmtlciAobWFrZS1tYXJrZXIpDQogICJNYXJrZXIgcmVjb3JkaW5nIHRo ZSBsYXN0IGNsb2NrLWluLCBidXQgdGhlIGhlYWRsaW5lIHBvc2l0aW9uLiIpDQooZGVmdmFyIG9y Zy1jbG9jay1oZWFkaW5nICIiDQogICJUaGUgaGVhZGluZyBvZiB0aGUgY3VycmVudCBjbG9jayBl bnRyeS4iKQ0KKGRlZnVuIG9yZy1jbG9jay1pcy1hY3RpdmUgKCkNCiAgIlJldHVybiB0aGUgYnVm ZmVyIHdoZXJlIHRoZSBjbG9jayBpcyBjdXJyZW50bHkgcnVubmluZy4NClJldHVybiBuaWwgaWYg bm8gY2xvY2sgaXMgcnVubmluZy4iDQogIChtYXJrZXItYnVmZmVyIG9yZy1jbG9jay1tYXJrZXIp KQ0KDQooZGVmdW4gb3JnLWNoZWNrLXJ1bm5pbmctY2xvY2sgKCkNCiAgIkNoZWNrIGlmIHRoZSBj dXJyZW50IGJ1ZmZlciBjb250YWlucyB0aGUgcnVubmluZyBjbG9jay4NCklmIHllcywgb2ZmZXIg dG8gc3RvcCBpdCBhbmQgdG8gc2F2ZSB0aGUgYnVmZmVyIHdpdGggdGhlIGNoYW5nZXMuIg0KICAo d2hlbiAoYW5kIChlcXVhbCAobWFya2VyLWJ1ZmZlciBvcmctY2xvY2stbWFya2VyKSAoY3VycmVu dC1idWZmZXIpKQ0KCSAgICAgKHktb3Itbi1wIChmb3JtYXQgIkNsb2NrLW91dCBpbiBidWZmZXIg JXMgYmVmb3JlIGtpbGxpbmcgaXQ/ICINCgkJCSAgICAgICAoYnVmZmVyLW5hbWUpKSkpDQogICAg KG9yZy1jbG9jay1vdXQpDQogICAgKHdoZW4gKHktb3Itbi1wICJTYXZlIGNoYW5nZWQgYnVmZmVy PyIpDQogICAgICAoc2F2ZS1idWZmZXIpKSkpDQoNCihkZWZ1biBvcmctY2xvY2t0YWJsZS10cnkt c2hpZnQgKGRpciBuKQ0KICAiQ2hlY2sgaWYgdGhpcyBsaW5lIHN0YXJ0cyBhIGNsb2NrIHRhYmxl LCBpZiB5ZXMsIHNoaWZ0IHRoZSB0aW1lIGJsb2NrLiINCiAgKHdoZW4gKG9yZy1tYXRjaC1saW5l ICJeWyBcdF0qI1xcK0JFR0lOOlsgXHRdK2Nsb2NrdGFibGVcXD4iKQ0KICAgIChvcmctY2xvY2t0 YWJsZS1zaGlmdCBkaXIgbikpKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVuIG9yZy1jbG9jay1w ZXJzaXN0ZW5jZS1pbnNpbnVhdGUgKCkNCiAgIlNldCB1cCBob29rcyBmb3IgY2xvY2sgcGVyc2lz dGVuY2UuIg0KICAocmVxdWlyZSAnb3JnLWNsb2NrKQ0KICAoYWRkLWhvb2sgJ29yZy1tb2RlLWhv b2sgJ29yZy1jbG9jay1sb2FkKQ0KICAoYWRkLWhvb2sgJ2tpbGwtZW1hY3MtaG9vayAnb3JnLWNs b2NrLXNhdmUpKQ0KDQooZGVmZ3JvdXAgb3JnLWFyY2hpdmUgbmlsDQogICJPcHRpb25zIGNvbmNl cm5pbmcgYXJjaGl2aW5nIGluIE9yZy1tb2RlLiINCiAgOnRhZyAiT3JnIEFyY2hpdmUiDQogIDpn cm91cCAnb3JnLXN0cnVjdHVyZSkNCg0KKGRlZmN1c3RvbSBvcmctYXJjaGl2ZS1sb2NhdGlvbiAi JXNfYXJjaGl2ZTo6Ig0KICAiVGhlIGxvY2F0aW9uIHdoZXJlIHN1YnRyZWVzIHNob3VsZCBiZSBh cmNoaXZlZC4NCg0KVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgYSBzdHJpbmcsIGNvbnNp c3Rpbmcgb2YgdHdvIHBhcnRzLA0Kc2VwYXJhdGVkIGJ5IGEgZG91YmxlLWNvbG9uLiAgVGhlIGZp cnN0IHBhcnQgaXMgYSBmaWxlbmFtZSBhbmQNCnRoZSBzZWNvbmQgcGFydCBpcyBhIGhlYWRsaW5l Lg0KDQpXaGVuIHRoZSBmaWxlbmFtZSBpcyBvbWl0dGVkLCBhcmNoaXZpbmcgaGFwcGVucyBpbiB0 aGUgc2FtZSBmaWxlLg0KJXMgaW4gdGhlIGZpbGVuYW1lIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhl IGN1cnJlbnQgZmlsZQ0KbmFtZSAod2l0aG91dCB0aGUgZGlyZWN0b3J5IHBhcnQpLiAgQXJjaGl2 aW5nIHRvIGEgZGlmZmVyZW50IGZpbGUNCmlzIHVzZWZ1bCB0byBrZWVwIGFyY2hpdmVkIGVudHJp ZXMgZnJvbSBjb250cmlidXRpbmcgdG8gdGhlDQpPcmctbW9kZSBBZ2VuZGEuDQoNClRoZSBhcmNo aXZlZCBlbnRyaWVzIHdpbGwgYmUgZmlsZWQgYXMgc3VidHJlZXMgb2YgdGhlIHNwZWNpZmllZA0K aGVhZGxpbmUuICBXaGVuIHRoZSBoZWFkbGluZSBpcyBvbWl0dGVkLCB0aGUgc3VidHJlZXMgYXJl IHNpbXBseQ0KZmlsZWQgYXdheSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCBhcyB0b3AtbGV2ZWwg ZW50cmllcy4gIEFsc28gaW4NCnRoZSBoZWFkaW5nIHlvdSBjYW4gdXNlICVzIHRvIHJlcHJlc2Vu dCB0aGUgZmlsZSBuYW1lLCB0aGlzIGNhbiBiZQ0KdXNlZnVsIHdoZW4gdXNpbmcgdGhlIHNhbWUg YXJjaGl2ZSBmb3IgYSBudW1iZXIgb2YgZGlmZmVyZW50IGZpbGVzLg0KDQpIZXJlIGFyZSBhIGZl dyBleGFtcGxlczoNClwiJXNfYXJjaGl2ZTo6XCINCglJZiB0aGUgY3VycmVudCBmaWxlIGlzIFBy b2plY3RzLm9yZywgYXJjaGl2ZSBpbiBmaWxlDQoJUHJvamVjdHMub3JnX2FyY2hpdmUsIGFzIHRv cC1sZXZlbCB0cmVlcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuDQoNClwiOjoqIEFyY2hpdmVkIFRh c2tzXCINCglBcmNoaXZlIGluIHRoZSBjdXJyZW50IGZpbGUsIHVuZGVyIHRoZSB0b3AtbGV2ZWwg aGVhZGxpbmUNCglcIiogQXJjaGl2ZWQgVGFza3NcIi4NCg0KXCJ+L29yZy9hcmNoaXZlLm9yZzo6 XCINCglBcmNoaXZlIGluIGZpbGUgfi9vcmcvYXJjaGl2ZS5vcmcgKGFic29sdXRlIHBhdGgpLCBh cyB0b3AtbGV2ZWwgdHJlZXMuDQoNClwifi9vcmcvYXJjaGl2ZS5vcmc6OiogRnJvbSAlc1wiDQoJ QXJjaGl2ZSBpbiBmaWxlIH4vb3JnL2FyY2hpdmUub3JnIChhYnNvbHV0ZSBwYXRoKSwgdW5kZXIg aGVhZGxpbmVzDQogICAgICAgIFwiRnJvbSBGSUxFTkFNRVwiIHdoZXJlIGZpbGUgbmFtZSBpcyB0 aGUgY3VycmVudCBmaWxlIG5hbWUuDQoNClwifi9vcmcvZGF0ZXRyZWUub3JnOjpkYXRldHJlZS8q IEZpbmlzaGVkIFRhc2tzXCINCiAgICAgICAgVGhlIFwiZGF0ZXRyZWUvXCIgc3RyaW5nIGlzIHNw ZWNpYWwsIHNpZ25pZnlpbmcgdG8gYXJjaGl2ZQ0KICAgICAgICBpdGVtcyB0byB0aGUgZGF0ZXRy ZWUuICBJdGVtcyBhcmUgcGxhY2VkIGluIGVpdGhlciB0aGUgQ0xPU0VEDQogICAgICAgIGRhdGUg b2YgdGhlIGl0ZW0sIG9yIHRoZSBjdXJyZW50IGRhdGUgaWYgdGhlcmUgaXMgbm8gQ0xPU0VEIGRh dGUuDQogICAgICAgIFRoZSBoZWFkaW5nIHdpbGwgYmUgYSBzdWJlbnRyeSB0byB0aGUgY3VycmVu dCBkYXRlLiAgVGhlcmUgZG9lc24ndA0KICAgICAgICBuZWVkIHRvIGJlIGEgaGVhZGluZywgYnV0 IHRoZXJlIGFsd2F5cyBuZWVkcyB0byBiZSBhIHNsYXNoIGFmdGVyDQogICAgICAgIGRhdGV0cmVl LiAgRm9yIGV4YW1wbGUsIHRvIHN0b3JlIGFyY2hpdmVkIGl0ZW1zIGRpcmVjdGx5IGluIHRoZQ0K ICAgICAgICBkYXRldHJlZSwgdXNlIFwifi9vcmcvZGF0ZXRyZWUub3JnOjpkYXRldHJlZS9cIi4N Cg0KXCJiYXNlbWVudDo6KiogRmluaXNoZWQgVGFza3NcIg0KCUFyY2hpdmUgaW4gZmlsZSAuL2Jh c2VtZW50IChyZWxhdGl2ZSBwYXRoKSwgYXMgbGV2ZWwgMyB0cmVlcw0KCWJlbG93IHRoZSBsZXZl bCAyIGhlYWRpbmcgXCIqKiBGaW5pc2hlZCBUYXNrc1wiLg0KDQpZb3UgbWF5IHNldCB0aGlzIG9w dGlvbiBvbiBhIHBlci1maWxlIGJhc2lzIGJ5IGFkZGluZyB0byB0aGUgYnVmZmVyIGENCmxpbmUg bGlrZQ0KDQojK0FSQ0hJVkU6IGJhc2VtZW50OjoqKiBGaW5pc2hlZCBUYXNrcw0KDQpZb3UgbWF5 IGFsc28gZGVmaW5lIGl0IGxvY2FsbHkgZm9yIGEgc3VidHJlZSBieSBzZXR0aW5nIGFuIEFSQ0hJ VkUgcHJvcGVydHkNCmluIHRoZSBlbnRyeS4gIElmIHN1Y2ggYSBwcm9wZXJ0eSBpcyBmb3VuZCBp biBhbiBlbnRyeSwgb3IgYW55d2hlcmUgdXANCnRoZSBoaWVyYXJjaHksIGl0IHdpbGwgYmUgdXNl ZC4iDQogIDpncm91cCAnb3JnLWFyY2hpdmUNCiAgOnR5cGUgJ3N0cmluZykNCg0KKGRlZmN1c3Rv bSBvcmctYXJjaGl2ZS10YWcgIkFSQ0hJVkUiDQogICJUaGUgdGFnIHRoYXQgbWFya3MgYSBzdWJ0 cmVlIGFzIGFyY2hpdmVkLg0KQW4gYXJjaGl2ZWQgc3VidHJlZSBkb2VzIG5vdCBvcGVuIGR1cmlu ZyB2aXNpYmlsaXR5IGN5Y2xpbmcsIGFuZCBkb2VzDQpub3QgY29udHJpYnV0ZSB0byB0aGUgYWdl bmRhIGxpc3RpbmdzLg0KQWZ0ZXIgY2hhbmdpbmcgdGhpcywgZm9udC1sb2NrIG11c3QgYmUgcmVz dGFydGVkIGluIHRoZSByZWxldmFudCBidWZmZXJzIHRvDQpnZXQgdGhlIHByb3BlciBmb250aWZp Y2F0aW9uLiINCiAgOmdyb3VwICdvcmctYXJjaGl2ZQ0KICA6Z3JvdXAgJ29yZy1rZXl3b3Jkcw0K ICA6dHlwZSAnc3RyaW5nKQ0KDQooZGVmY3VzdG9tIG9yZy1hZ2VuZGEtc2tpcC1hcmNoaXZlZC10 cmVlcyB0DQogICJOb24tbmlsIG1lYW5zIHRoZSBhZ2VuZGEgd2lsbCBza2lwIGFueSBpdGVtcyBs b2NhdGVkIGluIGFyY2hpdmVkIHRyZWVzLg0KQW4gYXJjaGl2ZWQgdHJlZSBpcyBhIHRyZWUgbWFy a2VkIHdpdGggdGhlIHRhZyBBUkNISVZFLiAgVGhlIHVzZSBvZiB0aGlzDQp2YXJpYWJsZSBpcyBu byBsb25nZXIgcmVjb21tZW5kZWQsIHlvdSBzaG91bGQgbGVhdmUgaXQgYXQgdGhlIHZhbHVlIHQu DQpJbnN0ZWFkLCB1c2UgdGhlIGtleSBgdicgdG8gY3ljbGUgdGhlIGFyY2hpdmVzLW1vZGUgaW4g dGhlIGFnZW5kYS4iDQogIDpncm91cCAnb3JnLWFyY2hpdmUNCiAgOmdyb3VwICdvcmctYWdlbmRh LXNraXANCiAgOnR5cGUgJ2Jvb2xlYW4pDQoNCihkZWZjdXN0b20gb3JnLWNvbHVtbnMtc2tpcC1h cmNoaXZlZC10cmVlcyB0DQogICJOb24tbmlsIG1lYW5zIGlnbm9yZSBhcmNoaXZlZCB0cmVlcyB3 aGVuIGNyZWF0aW5nIGNvbHVtbiB2aWV3LiINCiAgOmdyb3VwICdvcmctYXJjaGl2ZQ0KICA6Z3Jv dXAgJ29yZy1wcm9wZXJ0aWVzDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1j eWNsZS1vcGVuLWFyY2hpdmVkLXRyZWVzIG5pbA0KICAiTm9uLW5pbCBtZWFucyBgb3JnLWN5Y2xl JyB3aWxsIG9wZW4gYXJjaGl2ZWQgdHJlZXMuDQpBbiBhcmNoaXZlZCB0cmVlIGlzIGEgdHJlZSBt YXJrZWQgd2l0aCB0aGUgdGFnIEFSQ0hJVkUuDQpXaGVuIG5pbCwgYXJjaGl2ZWQgdHJlZXMgd2ls bCBzdGF5IGZvbGRlZC4gIFlvdSBjYW4gc3RpbGwgb3BlbiB0aGVtIHdpdGgNCm5vcm1hbCBvdXRs aW5lIGNvbW1hbmRzIGxpa2UgYHNob3ctYWxsJywgYnV0IG5vdCB3aXRoIHRoZSBjeWNsaW5nIGNv bW1hbmRzLiINCiAgOmdyb3VwICdvcmctYXJjaGl2ZQ0KICA6Z3JvdXAgJ29yZy1jeWNsZQ0KICA6 dHlwZSAnYm9vbGVhbikNCg0KKGRlZmN1c3RvbSBvcmctc3BhcnNlLXRyZWUtb3Blbi1hcmNoaXZl ZC10cmVlcyBuaWwNCiAgIk5vbi1uaWwgbWVhbnMgc3BhcnNlIHRyZWUgY29uc3RydWN0aW9uIHNo b3dzIG1hdGNoZXMgaW4gYXJjaGl2ZWQgdHJlZXMuDQpXaGVuIG5pbCwgbWF0Y2hlcyBpbiB0aGVz ZSB0cmVlcyBhcmUgaGlnaGxpZ2h0ZWQsIGJ1dCB0aGUgdHJlZXMgYXJlIGtlcHQgaW4NCmNvbGxh cHNlZCBzdGF0ZS4iDQogIDpncm91cCAnb3JnLWFyY2hpdmUNCiAgOmdyb3VwICdvcmctc3BhcnNl LXRyZWVzDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3VzdG9tIG9yZy1zcGFyc2UtdHJlZS1k ZWZhdWx0LWRhdGUtdHlwZSAnc2NoZWR1bGVkLW9yLWRlYWRsaW5lDQogICJUaGUgZGVmYXVsdCBk YXRlIHR5cGUgd2hlbiBidWlsZGluZyBhIHNwYXJzZSB0cmVlLg0KV2hlbiB0aGlzIGlzIG5pbCwg YSBkYXRlIGlzIGEgc2NoZWR1bGVkIG9yIGEgZGVhZGxpbmUgdGltZXN0YW1wLg0KT3RoZXJ3aXNl LCB0aGVzZSB0eXBlcyBhcmUgYWxsb3dlZDoNCg0KICAgICAgICBhbGw6IGFsbCB0aW1lc3RhbXBz DQogICAgIGFjdGl2ZTogb25seSBhY3RpdmUgdGltZXN0YW1wcyAoPC4uLj4pDQogICBpbmFjdGl2 ZTogb25seSBpbmFjdGl2ZSB0aW1lc3RhbXBzICg8Li4uKQ0KICBzY2hlZHVsZWQ6IG9ubHkgc2No ZWR1bGVkIHRpbWVzdGFtcHMNCiAgIGRlYWRsaW5lOiBvbmx5IGRlYWRsaW5lIHRpbWVzdGFtcHMi DQogIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJTY2hlZHVsZWQgb3IgZGVhZGxpbmUiIHNj aGVkdWxlZC1vci1kZWFkbGluZSkNCgkJIChjb25zdCA6dGFnICJBbGwgdGltZXN0YW1wcyIgYWxs KQ0KCQkgKGNvbnN0IDp0YWcgIk9ubHkgYWN0aXZlIHRpbWVzdGFtcHMiIGFjdGl2ZSkNCgkJIChj b25zdCA6dGFnICJPbmx5IGluYWN0aXZlIHRpbWVzdGFtcHMiIGluYWN0aXZlKQ0KCQkgKGNvbnN0 IDp0YWcgIk9ubHkgc2NoZWR1bGVkIHRpbWVzdGFtcHMiIHNjaGVkdWxlZCkNCgkJIChjb25zdCA6 dGFnICJPbmx5IGRlYWRsaW5lIHRpbWVzdGFtcHMiIGRlYWRsaW5lKQ0KCQkgKGNvbnN0IDp0YWcg Ik9ubHkgY2xvc2VkIHRpbWVzdGFtcHMiIGNsb3NlZCkpDQogIDp2ZXJzaW9uICIyNC4zIg0KICA6 Z3JvdXAgJ29yZy1zcGFyc2UtdHJlZXMpDQoNCihkZWZ1biBvcmctY3ljbGUtaGlkZS1hcmNoaXZl ZC1zdWJ0cmVlcyAoc3RhdGUpDQogICJSZS1oaWRlIGFsbCBhcmNoaXZlZCBzdWJ0cmVlcyBhZnRl ciBhIHZpc2liaWxpdHkgc3RhdGUgY2hhbmdlLiINCiAgKHdoZW4gKGFuZCAobm90IG9yZy1jeWNs ZS1vcGVuLWFyY2hpdmVkLXRyZWVzKQ0KICAgICAgICAgICAgIChub3QgKG1lbXEgc3RhdGUgJyhv dmVydmlldyBmb2xkZWQpKSkpDQogICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAobGV0KiAoKGds b2JhbHAgKG1lbXEgc3RhdGUgJyhjb250ZW50cyBhbGwpKSkNCiAgICAgICAgICAgICAoYmVnIChp ZiBnbG9iYWxwIChwb2ludC1taW4pIChwb2ludCkpKQ0KICAgICAgICAgICAgIChlbmQgKGlmIGds b2JhbHAgKHBvaW50LW1heCkgKG9yZy1lbmQtb2Ytc3VidHJlZSB0KSkpKQ0KCShvcmctaGlkZS1h cmNoaXZlZC1zdWJ0cmVlcyBiZWcgZW5kKQ0KCShnb3RvLWNoYXIgYmVnKQ0KCShpZiAobG9va2lu Zy1hdCAoY29uY2F0ICIuKjoiIG9yZy1hcmNoaXZlLXRhZyAiOiIpKQ0KCSAgICAobWVzc2FnZSAi JXMiIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cw0KCQkJICAgIlN1YnRyZWUgaXMgYXJjaGl2ZWQg YW5kIHN0YXlzIGNsb3NlZC4gIFVzZSBcXFtvcmctZm9yY2UtY3ljbGUtYXJjaGl2ZWRdIHRvIGN5 Y2xlIGl0IGFueXdheS4iKSkpKSkpKQ0KDQooZGVmdW4gb3JnLWZvcmNlLWN5Y2xlLWFyY2hpdmVk ICgpDQogICJDeWNsZSBzdWJ0cmVlIGV2ZW4gaWYgaXQgaXMgYXJjaGl2ZWQuIg0KICAoaW50ZXJh Y3RpdmUpDQogIChzZXRxIHRoaXMtY29tbWFuZCAnb3JnLWN5Y2xlKQ0KICAobGV0ICgob3JnLWN5 Y2xlLW9wZW4tYXJjaGl2ZWQtdHJlZXMgdCkpDQogICAgKGNhbGwtaW50ZXJhY3RpdmVseSAnb3Jn LWN5Y2xlKSkpDQoNCihkZWZ1biBvcmctaGlkZS1hcmNoaXZlZC1zdWJ0cmVlcyAoYmVnIGVuZCkN CiAgIlJlLWhpZGUgYWxsIGFyY2hpdmVkIHN1YnRyZWVzIGFmdGVyIGEgdmlzaWJpbGl0eSBzdGF0 ZSBjaGFuZ2UuIg0KICAoc2F2ZS1leGN1cnNpb24NCiAgICAobGV0KiAoKHJlIChjb25jYXQgIjoi IG9yZy1hcmNoaXZlLXRhZyAiOiIpKSkNCiAgICAgIChnb3RvLWNoYXIgYmVnKQ0KICAgICAgKHdo aWxlIChyZS1zZWFyY2gtZm9yd2FyZCByZSBlbmQgdCkNCgkod2hlbiAob3JnLWF0LWhlYWRpbmct cCkNCgkgIChvcmctZmxhZy1zdWJ0cmVlIHQpDQoJICAob3JnLWVuZC1vZi1zdWJ0cmVlIHQpKSkp KSkNCg0KKGRlY2xhcmUtZnVuY3Rpb24gb3V0bGluZS1lbmQtb2YtaGVhZGluZyAib3V0bGluZSIg KCkpDQooZGVjbGFyZS1mdW5jdGlvbiBvdXRsaW5lLWZsYWctcmVnaW9uICJvdXRsaW5lIiAoZnJv bSB0byBmbGFnKSkNCihkZWZ1biBvcmctZmxhZy1zdWJ0cmVlIChmbGFnKQ0KICAoc2F2ZS1leGN1 cnNpb24NCiAgICAob3JnLWJhY2stdG8taGVhZGluZyB0KQ0KICAgIChvdXRsaW5lLWVuZC1vZi1o ZWFkaW5nKQ0KICAgIChvdXRsaW5lLWZsYWctcmVnaW9uIChwb2ludCkNCgkJCSAocHJvZ24gKG9y Zy1lbmQtb2Ytc3VidHJlZSB0KSAocG9pbnQpKQ0KCQkJIGZsYWcpKSkNCg0KKGRlZmFsaWFzICdv cmctYWR2ZXJ0aXplZC1hcmNoaXZlLXN1YnRyZWUgJ29yZy1hcmNoaXZlLXN1YnRyZWUpDQoNCjs7 IERlY2xhcmUgQ29sdW1uIFZpZXcgQ29kZQ0KDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctY29sdW1u cy1udW1iZXItdG8tc3RyaW5nICJvcmctY29sdmlldyIgKG4gZm10ICZvcHRpb25hbCBwcmludGYp KQ0KKGRlY2xhcmUtZnVuY3Rpb24gb3JnLWNvbHVtbnMtZ2V0LWZvcm1hdC1hbmQtdG9wLWxldmVs ICJvcmctY29sdmlldyIgKCkpDQooZGVjbGFyZS1mdW5jdGlvbiBvcmctY29sdW1ucy1jb21wdXRl ICJvcmctY29sdmlldyIgKHByb3BlcnR5KSkNCg0KOzsgRGVjbGFyZSBJRCBjb2RlDQoNCihkZWNs YXJlLWZ1bmN0aW9uIG9yZy1pZC1zdG9yZS1saW5rICJvcmctaWQiKQ0KKGRlY2xhcmUtZnVuY3Rp b24gb3JnLWlkLWxvY2F0aW9ucy1sb2FkICJvcmctaWQiKQ0KKGRlY2xhcmUtZnVuY3Rpb24gb3Jn LWlkLWxvY2F0aW9ucy1zYXZlICJvcmctaWQiKQ0KKGRlZnZhciBvcmctaWQtdHJhY2stZ2xvYmFs bHkpDQoNCjs7OyBWYXJpYWJsZXMgZm9yIHByZS1jb21wdXRlZCByZWd1bGFyIGV4cHJlc3Npb25z LCBhbGwgYnVmZmVyIGxvY2FsDQoNCihkZWZ2YXIgb3JnLWRyYXdlci1yZWdleHAgIl5bIFx0XSo6 UFJPUEVSVElFUzpbIFx0XSokIg0KICAiTWF0Y2hlcyBmaXJzdCBsaW5lIG9mIGEgaGlkZGVuIGJs b2NrLiIpDQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy1kcmF3ZXItcmVnZXhwKQ0K KGRlZnZhciBvcmctdG9kby1yZWdleHAgbmlsDQogICJNYXRjaGVzIGFueSBvZiB0aGUgVE9ETyBz dGF0ZSBrZXl3b3Jkcy4iKQ0KKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdvcmctdG9kby1y ZWdleHApDQooZGVmdmFyIG9yZy1ub3QtZG9uZS1yZWdleHAgbmlsDQogICJNYXRjaGVzIGFueSBv ZiB0aGUgVE9ETyBzdGF0ZSBrZXl3b3JkcyBleGNlcHQgdGhlIGxhc3Qgb25lLiIpDQoobWFrZS12 YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy1ub3QtZG9uZS1yZWdleHApDQooZGVmdmFyIG9yZy1u b3QtZG9uZS1oZWFkaW5nLXJlZ2V4cCBuaWwNCiAgIk1hdGNoZXMgYSBUT0RPIGhlYWRsaW5lIHRo YXQgaXMgbm90IGRvbmUuIikNCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnb3JnLW5vdC1k b25lLXJlZ2V4cCkNCihkZWZ2YXIgb3JnLXRvZG8tbGluZS1yZWdleHAgbmlsDQogICJNYXRjaGVz IGEgaGVhZGxpbmUgYW5kIHB1dHMgVE9ETyBzdGF0ZSBpbnRvIGdyb3VwIDIgaWYgcHJlc2VudC4i KQ0KKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdvcmctdG9kby1saW5lLXJlZ2V4cCkNCihk ZWZ2YXIgb3JnLWNvbXBsZXgtaGVhZGluZy1yZWdleHAgbmlsDQogICJNYXRjaGVzIGEgaGVhZGxp bmUgYW5kIHB1dHMgZXZlcnl0aGluZyBpbnRvIGdyb3VwczoNCmdyb3VwIDE6IHRoZSBzdGFycw0K Z3JvdXAgMjogVGhlIHRvZG8ga2V5d29yZCwgbWF5YmUNCmdyb3VwIDM6IFByaW9yaXR5IGNvb2tp ZQ0KZ3JvdXAgNDogVHJ1ZSBoZWFkbGluZQ0KZ3JvdXAgNTogVGFncyIpDQoobWFrZS12YXJpYWJs ZS1idWZmZXItbG9jYWwgJ29yZy1jb21wbGV4LWhlYWRpbmctcmVnZXhwKQ0KKGRlZnZhciBvcmct Y29tcGxleC1oZWFkaW5nLXJlZ2V4cC1mb3JtYXQgbmlsDQogICJQcmludGYgZm9ybWF0IHRvIG1h a2UgcmVnZXhwIHRvIG1hdGNoIGFuIGV4YWN0IGhlYWRsaW5lLg0KVGhpcyByZWdleHAgd2lsbCBt YXRjaCB0aGUgaGVhZGxpbmUgb2YgYW55IG5vZGUgd2hpY2ggaGFzIHRoZQ0KZXhhY3QgaGVhZGxp bmUgdGV4dCB0aGF0IGlzIHB1dCBpbnRvIHRoZSBmb3JtYXQsIGJ1dCBtYXkgaGF2ZSBhbnkNClRP RE8gc3RhdGUsIHByaW9yaXR5IGFuZCB0YWdzLiIpDQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9j YWwgJ29yZy1jb21wbGV4LWhlYWRpbmctcmVnZXhwLWZvcm1hdCkNCihkZWZ2YXIgb3JnLXRvZG8t bGluZS10YWdzLXJlZ2V4cCBuaWwNCiAgIk1hdGNoZXMgYSBoZWFkbGluZSBhbmQgcHV0cyBUT0RP IHN0YXRlIGludG8gZ3JvdXAgMiBpZiBwcmVzZW50Lg0KQWxzbyBwdXQgdGFncyBpbnRvIGdyb3Vw IDQgaWYgdGFncyBhcmUgcHJlc2VudC4iKQ0KKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdv cmctdG9kby1saW5lLXRhZ3MtcmVnZXhwKQ0KKGRlZnZhciBvcmctZHMta2V5d29yZC1sZW5ndGgg MTINCiAgIk1heGltdW0gbGVuZ3RoIG9mIHRoZSBERUFETElORSBhbmQgU0NIRURVTEVEIGtleXdv cmRzLiIpDQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy1kcy1rZXl3b3JkLWxlbmd0 aCkNCihkZWZ2YXIgb3JnLWRlYWRsaW5lLXJlZ2V4cCBuaWwNCiAgIk1hdGNoZXMgdGhlIERFQURM SU5FIGtleXdvcmQuIikNCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnb3JnLWRlYWRsaW5l LXJlZ2V4cCkNCihkZWZ2YXIgb3JnLWRlYWRsaW5lLXRpbWUtcmVnZXhwIG5pbA0KICAiTWF0Y2hl cyB0aGUgREVBRExJTkUga2V5d29yZCB0b2dldGhlciB3aXRoIGEgdGltZSBzdGFtcC4iKQ0KKG1h a2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdvcmctZGVhZGxpbmUtdGltZS1yZWdleHApDQooZGVm dmFyIG9yZy1kZWFkbGluZS10aW1lLWhvdXItcmVnZXhwIG5pbA0KICAiTWF0Y2hlcyB0aGUgREVB RExJTkUga2V5d29yZCB0b2dldGhlciB3aXRoIGEgdGltZS1hbmQtaG91ciBzdGFtcC4iKQ0KKG1h a2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdvcmctZGVhZGxpbmUtdGltZS1ob3VyLXJlZ2V4cCkN CihkZWZ2YXIgb3JnLWRlYWRsaW5lLWxpbmUtcmVnZXhwIG5pbA0KICAiTWF0Y2hlcyB0aGUgREVB RExJTkUga2V5d29yZCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuIikNCihtYWtlLXZhcmlhYmxl LWJ1ZmZlci1sb2NhbCAnb3JnLWRlYWRsaW5lLWxpbmUtcmVnZXhwKQ0KKGRlZnZhciBvcmctc2No ZWR1bGVkLXJlZ2V4cCBuaWwNCiAgIk1hdGNoZXMgdGhlIFNDSEVEVUxFRCBrZXl3b3JkLiIpDQoo bWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy1zY2hlZHVsZWQtcmVnZXhwKQ0KKGRlZnZh ciBvcmctc2NoZWR1bGVkLXRpbWUtcmVnZXhwIG5pbA0KICAiTWF0Y2hlcyB0aGUgU0NIRURVTEVE IGtleXdvcmQgdG9nZXRoZXIgd2l0aCBhIHRpbWUgc3RhbXAuIikNCihtYWtlLXZhcmlhYmxlLWJ1 ZmZlci1sb2NhbCAnb3JnLXNjaGVkdWxlZC10aW1lLXJlZ2V4cCkNCihkZWZ2YXIgb3JnLXNjaGVk dWxlZC10aW1lLWhvdXItcmVnZXhwIG5pbA0KICAiTWF0Y2hlcyB0aGUgU0NIRURVTEVEIGtleXdv cmQgdG9nZXRoZXIgd2l0aCBhIHRpbWUtYW5kLWhvdXIgc3RhbXAuIikNCihtYWtlLXZhcmlhYmxl LWJ1ZmZlci1sb2NhbCAnb3JnLXNjaGVkdWxlZC10aW1lLWhvdXItcmVnZXhwKQ0KKGRlZnZhciBv cmctY2xvc2VkLXRpbWUtcmVnZXhwIG5pbA0KICAiTWF0Y2hlcyB0aGUgQ0xPU0VEIGtleXdvcmQg dG9nZXRoZXIgd2l0aCBhIHRpbWUgc3RhbXAuIikNCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2Nh bCAnb3JnLWNsb3NlZC10aW1lLXJlZ2V4cCkNCg0KKGRlZnZhciBvcmcta2V5d29yZC10aW1lLXJl Z2V4cCBuaWwNCiAgIk1hdGNoZXMgYW55IG9mIHRoZSA0IGtleXdvcmRzLCB0b2dldGhlciB3aXRo IHRoZSB0aW1lIHN0YW1wLiIpDQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy1rZXl3 b3JkLXRpbWUtcmVnZXhwKQ0KKGRlZnZhciBvcmcta2V5d29yZC10aW1lLW5vdC1jbG9jay1yZWdl eHAgbmlsDQogICJNYXRjaGVzIGFueSBvZiB0aGUgMyBrZXl3b3JkcywgdG9nZXRoZXIgd2l0aCB0 aGUgdGltZSBzdGFtcC4iKQ0KKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdvcmcta2V5d29y ZC10aW1lLW5vdC1jbG9jay1yZWdleHApDQooZGVmdmFyIG9yZy1tYXliZS1rZXl3b3JkLXRpbWUt cmVnZXhwIG5pbA0KICAiTWF0Y2hlcyBhIHRpbWVzdGFtcCwgcG9zc2libHkgcHJlY2VkZWQgYnkg YSBrZXl3b3JkLiIpDQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ29yZy1tYXliZS1rZXl3 b3JkLXRpbWUtcmVnZXhwKQ0KKGRlZnZhciBvcmctYWxsLXRpbWUta2V5d29yZHMgbmlsDQogICJM aXN0IG9mIHRpbWUga2V5d29yZHMuIikNCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnb3Jn LWFsbC10aW1lLWtleXdvcmRzKQ0KDQooZGVmY29uc3Qgb3JnLXBsYWluLXRpbWUtb2YtZGF5LXJl Z2V4cA0KICAoY29uY2F0DQogICAiXFwoXFw8WzAxMl0/WzAtOV0iDQogICAiXFwoXFwoOlxcKFsw LTVdWzAtOV1cXChbQWFQcF1bTW1dXFwpP1xcKVxcKVxcfFxcKFtBYVBwXVtNbV1cXClcXClcXD5c XCkiDQogICAiXFwoLS0/Ig0KICAgIlxcKFxcPFswMTJdP1swLTldIg0KICAgIlxcKFxcKDpcXChb MC01XVswLTldXFwoW0FhUHBdW01tXVxcKT9cXClcXClcXHxcXChbQWFQcF1bTW1dXFwpXFwpXFw+ XFwpIg0KICAgIlxcKT8iKQ0KICAiUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGEgcGxhaW4g dGltZSBvciB0aW1lIHJhbmdlLg0KRXhhbXBsZXM6ICAxMTo0NSBvciA4YW0tMTM6MTUgb3IgMjo0 NS0yOjQ1cG0uICBBZnRlciBhIG1hdGNoLCB0aGUgZm9sbG93aW5nDQpncm91cHMgY2FycnkgaW1w b3J0YW50IGluZm9ybWF0aW9uOg0KMCAgdGhlIGZ1bGwgbWF0Y2gNCjEgIHRoZSBmaXJzdCB0aW1l LCByYW5nZSBvciBub3QNCjggIHRoZSBzZWNvbmQgdGltZSwgaWYgaXQgaXMgYSByYW5nZS4iKQ0K DQooZGVmY29uc3Qgb3JnLXBsYWluLXRpbWUtZXh0ZW5zaW9uLXJlZ2V4cA0KICAoY29uY2F0DQog ICAiXFwoXFw8WzAxMl0/WzAtOV0iDQogICAiXFwoXFwoOlxcKFswLTVdWzAtOV1cXChbQWFQcF1b TW1dXFwpP1xcKVxcKVxcfFxcKFtBYVBwXVtNbV1cXClcXClcXD5cXCkiDQogICAiXFwrXFwoWzAt OV0rXFwpXFwoOlxcKFswLTVdWzAtOV1cXClcXCk/IikNCiAgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0 byBtYXRjaCBhIHRpbWUgcmFuZ2UgbGlrZSAxMzozMCsyOjEwID0gMTM6MzAtMTU6NDAuDQpFeGFt cGxlczogIDExOjQ1IG9yIDhhbS0xMzoxNSBvciAyOjQ1LTI6NDVwbS4gIEFmdGVyIGEgbWF0Y2gs IHRoZSBmb2xsb3dpbmcNCmdyb3VwcyBjYXJyeSBpbXBvcnRhbnQgaW5mb3JtYXRpb246DQowICB0 aGUgZnVsbCBtYXRjaA0KNyAgaG91cnMgb2YgZHVyYXRpb24NCjkgIG1pbnV0ZXMgb2YgZHVyYXRp b24iKQ0KDQooZGVmY29uc3Qgb3JnLXN0YW1wLXRpbWUtb2YtZGF5LXJlZ2V4cA0KICAoY29uY2F0 DQogICAiPFxcKFswLTldXFx7NFxcfS1bMC05XVxcezJcXH0tWzAtOV1cXHsyXFx9ICtcXHN3KyAr XFwpIg0KICAgIlxcKFswMTJdWzAtOV06WzAtNV1bMC05XVxcKC1cXChbMDEyXVswLTldOlswLTVd WzAtOV1cXClcXCk/W15cblxyPl0qP1xcKT4iDQogICAiXFwoLS0/Ig0KICAgIjxcXDFcXChbMDEy XVswLTldOlswLTVdWzAtOV1cXCk+XFwpPyIpDQogICJSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0 Y2ggYSB0aW1lc3RhbXAgdGltZSBvciB0aW1lIHJhbmdlLg0KQWZ0ZXIgYSBtYXRjaCwgdGhlIGZv bGxvd2luZyBncm91cHMgY2FycnkgaW1wb3J0YW50IGluZm9ybWF0aW9uOg0KMCAgdGhlIGZ1bGwg bWF0Y2gNCjEgIGRhdGUgcGx1cyB3ZWVrZGF5LCBmb3IgYmFjayByZWZlcmVuY2luZyB0byBtYWtl IHN1cmUgYm90aCB0aW1lcyBhcmUgb24gdGhlIHNhbWUgZGF5DQoyICB0aGUgZmlyc3QgdGltZSwg cmFuZ2Ugb3Igbm90DQo0ICB0aGUgc2Vjb25kIHRpbWUsIGlmIGl0IGlzIGEgcmFuZ2UuIikNCg0K KGRlZmNvbnN0IG9yZy1zdGFydHVwLW9wdGlvbnMNCiAgJygoImZvbGQiIG9yZy1zdGFydHVwLWZv bGRlZCB0KQ0KICAgICgib3ZlcnZpZXciIG9yZy1zdGFydHVwLWZvbGRlZCB0KQ0KICAgICgibm9m b2xkIiBvcmctc3RhcnR1cC1mb2xkZWQgbmlsKQ0KICAgICgic2hvd2FsbCIgb3JnLXN0YXJ0dXAt Zm9sZGVkIG5pbCkNCiAgICAoInNob3dldmVyeXRoaW5nIiBvcmctc3RhcnR1cC1mb2xkZWQgc2hv d2V2ZXJ5dGhpbmcpDQogICAgKCJjb250ZW50IiBvcmctc3RhcnR1cC1mb2xkZWQgY29udGVudCkN CiAgICAoImluZGVudCIgb3JnLXN0YXJ0dXAtaW5kZW50ZWQgdCkNCiAgICAoIm5vaW5kZW50IiBv cmctc3RhcnR1cC1pbmRlbnRlZCBuaWwpDQogICAgKCJoaWRlc3RhcnMiIG9yZy1oaWRlLWxlYWRp bmctc3RhcnMgdCkNCiAgICAoInNob3dzdGFycyIgb3JnLWhpZGUtbGVhZGluZy1zdGFycyBuaWwp DQogICAgKCJvZGQiIG9yZy1vZGQtbGV2ZWxzLW9ubHkgdCkNCiAgICAoIm9kZGV2ZW4iIG9yZy1v ZGQtbGV2ZWxzLW9ubHkgbmlsKQ0KICAgICgiYWxpZ24iIG9yZy1zdGFydHVwLWFsaWduLWFsbC10 YWJsZXMgdCkNCiAgICAoIm5vYWxpZ24iIG9yZy1zdGFydHVwLWFsaWduLWFsbC10YWJsZXMgbmls KQ0KICAgICgiaW5saW5laW1hZ2VzIiBvcmctc3RhcnR1cC13aXRoLWlubGluZS1pbWFnZXMgdCkN CiAgICAoIm5vaW5saW5laW1hZ2VzIiBvcmctc3RhcnR1cC13aXRoLWlubGluZS1pbWFnZXMgbmls KQ0KICAgICgibGF0ZXhwcmV2aWV3IiBvcmctc3RhcnR1cC13aXRoLWxhdGV4LXByZXZpZXcgdCkN CiAgICAoIm5vbGF0ZXhwcmV2aWV3IiBvcmctc3RhcnR1cC13aXRoLWxhdGV4LXByZXZpZXcgbmls KQ0KICAgICgiY3VzdG9tdGltZSIgb3JnLWRpc3BsYXktY3VzdG9tLXRpbWVzIHQpDQogICAgKCJs b2dkb25lIiBvcmctbG9nLWRvbmUgdGltZSkNCiAgICAoImxvZ25vdGVkb25lIiBvcmctbG9nLWRv bmUgbm90ZSkNCiAgICAoIm5vbG9nZG9uZSIgb3JnLWxvZy1kb25lIG5pbCkNCiAgICAoImxvZ25v dGVjbG9jay1vdXQiIG9yZy1sb2ctbm90ZS1jbG9jay1vdXQgdCkNCiAgICAoIm5vbG9nbm90ZWNs b2NrLW91dCIgb3JnLWxvZy1ub3RlLWNsb2NrLW91dCBuaWwpDQogICAgKCJsb2dyZXBlYXQiIG9y Zy1sb2ctcmVwZWF0IHN0YXRlKQ0KICAgICgibG9nbm90ZXJlcGVhdCIgb3JnLWxvZy1yZXBlYXQg bm90ZSkNCiAgICAoImxvZ2RyYXdlciIgb3JnLWxvZy1pbnRvLWRyYXdlciB0KQ0KICAgICgibm9s b2dkcmF3ZXIiIG9yZy1sb2ctaW50by1kcmF3ZXIgbmlsKQ0KICAgICgibG9nc3RhdGVzcmV2ZXJz ZWQiIG9yZy1sb2ctc3RhdGVzLW9yZGVyLXJldmVyc2VkIHQpDQogICAgKCJub2xvZ3N0YXRlc3Jl dmVyc2VkIiBvcmctbG9nLXN0YXRlcy1vcmRlci1yZXZlcnNlZCBuaWwpDQogICAgKCJub2xvZ3Jl cGVhdCIgb3JnLWxvZy1yZXBlYXQgbmlsKQ0KICAgICgibG9ncmVzY2hlZHVsZSIgb3JnLWxvZy1y ZXNjaGVkdWxlIHRpbWUpDQogICAgKCJsb2dub3RlcmVzY2hlZHVsZSIgb3JnLWxvZy1yZXNjaGVk dWxlIG5vdGUpDQogICAgKCJub2xvZ3Jlc2NoZWR1bGUiIG9yZy1sb2ctcmVzY2hlZHVsZSBuaWwp DQogICAgKCJsb2dyZWRlYWRsaW5lIiBvcmctbG9nLXJlZGVhZGxpbmUgdGltZSkNCiAgICAoImxv Z25vdGVyZWRlYWRsaW5lIiBvcmctbG9nLXJlZGVhZGxpbmUgbm90ZSkNCiAgICAoIm5vbG9ncmVk ZWFkbGluZSIgb3JnLWxvZy1yZWRlYWRsaW5lIG5pbCkNCiAgICAoImxvZ3JlZmlsZSIgb3JnLWxv Zy1yZWZpbGUgdGltZSkNCiAgICAoImxvZ25vdGVyZWZpbGUiIG9yZy1sb2ctcmVmaWxlIG5vdGUp DQogICAgKCJub2xvZ3JlZmlsZSIgb3JnLWxvZy1yZWZpbGUgbmlsKQ0KICAgICgiZm5pbmxpbmUi IG9yZy1mb290bm90ZS1kZWZpbmUtaW5saW5lIHQpDQogICAgKCJub2ZuaW5saW5lIiBvcmctZm9v dG5vdGUtZGVmaW5lLWlubGluZSBuaWwpDQogICAgKCJmbmxvY2FsIiBvcmctZm9vdG5vdGUtc2Vj dGlvbiBuaWwpDQogICAgKCJmbmF1dG8iIG9yZy1mb290bm90ZS1hdXRvLWxhYmVsIHQpDQogICAg KCJmbnByb21wdCIgb3JnLWZvb3Rub3RlLWF1dG8tbGFiZWwgbmlsKQ0KICAgICgiZm5jb25maXJt IiBvcmctZm9vdG5vdGUtYXV0by1sYWJlbCBjb25maXJtKQ0KICAgICgiZm5wbGFpbiIgb3JnLWZv b3Rub3RlLWF1dG8tbGFiZWwgcGxhaW4pDQogICAgKCJmbmFkanVzdCIgb3JnLWZvb3Rub3RlLWF1 dG8tYWRqdXN0IHQpDQogICAgKCJub2ZuYWRqdXN0IiBvcmctZm9vdG5vdGUtYXV0by1hZGp1c3Qg bmlsKQ0KICAgICgiY29uc3RjZ3MiIGNvbnN0YW50cy11bml0LXN5c3RlbSBjZ3MpDQogICAgKCJj b25zdFNJIiBjb25zdGFudHMtdW5pdC1zeXN0ZW0gU0kpDQogICAgKCJub3B0YWciIG9yZy10YWct cGVyc2lzdGVudC1hbGlzdCBuaWwpDQogICAgKCJoaWRlYmxvY2tzIiBvcmctaGlkZS1ibG9jay1z dGFydHVwIHQpDQogICAgKCJub2hpZGVibG9ja3MiIG9yZy1oaWRlLWJsb2NrLXN0YXJ0dXAgbmls KQ0KICAgICgiYmVhbWVyIiBvcmctc3RhcnR1cC13aXRoLWJlYW1lci1tb2RlIHQpDQogICAgKCJl bnRpdGllc3ByZXR0eSIgb3JnLXByZXR0eS1lbnRpdGllcyB0KQ0KICAgICgiZW50aXRpZXNwbGFp biIgb3JnLXByZXR0eS1lbnRpdGllcyBuaWwpKQ0KICAiVmFyaWFibGUgYXNzb2NpYXRlZCB3aXRo IFNUQVJUVVAgb3B0aW9ucyBmb3Igb3JnLW1vZGUuDQpFYWNoIGVsZW1lbnQgaXMgYSBsaXN0IG9m IHRocmVlIGl0ZW1zOiB0aGUgc3RhcnR1cCBvcHRpb25zIChhcyB3cml0dGVuDQppbiB0aGUgIytT VEFSVFVQIGxpbmUpLCB0aGUgY29ycmVzcG9uZGluZyB2YXJpYWJsZSwgYW5kIHRoZSB2YWx1ZSB0 byBzZXQNCnRoaXMgdmFyaWFibGUgdG8gaWYgdGhlIG9wdGlvbiBpcyBmb3VuZC4gIEFuIG9wdGlv bmFsIGZvcnRoIGVsZW1lbnQgUFVTSA0KbWVhbnMgdG8gcHVzaCB0aGlzIHZhbHVlIG9udG8gdGhl IGxpc3QgaW4gdGhlIHZhcmlhYmxlLiIpDQoNCihkZWZ1biBvcmctdXBkYXRlLXByb3BlcnR5LXBs aXN0IChrZXkgdmFsIHByb3BzKQ0KICAiVXBkYXRlIFBST1BTIHdpdGggS0VZIGFuZCBWQUwuIg0K ICAobGV0KiAoKGFwcGVuZGluZyAoc3RyaW5nPSAiKyIgKHN1YnN0cmluZyBrZXkgKC0gKGxlbmd0 aCBrZXkpIDEpKSkpDQoJIChrZXkgKGlmIGFwcGVuZGluZyAoc3Vic3RyaW5nIGtleSAwICgtIChs ZW5ndGgga2V5KSAxKSkga2V5KSkNCgkgKHJlbWFpbmRlciAob3JnLXJlbW92ZS1pZiAobGFtYmRh IChwKSAoc3RyaW5nPSAoY2FyIHApIGtleSkpIHByb3BzKSkNCgkgKHByZXZpb3VzIChjZHIgKGFz c29jIGtleSBwcm9wcykpKSkNCiAgICAoaWYgYXBwZW5kaW5nDQoJKGNvbnMgKGNvbnMga2V5IChp ZiBwcmV2aW91cyAoY29uY2F0IHByZXZpb3VzICIgIiB2YWwpIHZhbCkpIHJlbWFpbmRlcikNCiAg ICAgIChjb25zIChjb25zIGtleSB2YWwpIHJlbWFpbmRlcikpKSkNCg0KKGRlZmNvbnN0IG9yZy1i bG9jay1yZWdleHANCiAgIl5bIFx0XSojXFwrYmVnaW5fP1xcKFteIFxuXStcXClcXChcXChbXlxu XStcXClcXCk/XG5cXChbXlwwMDBdKz9cXCkjXFwrZW5kXz9cXDFbIFx0XSokIg0KICAiUmVndWxh ciBleHByZXNzaW9uIGZvciBoaWRpbmcgYmxvY2tzLiIpDQooZGVmY29uc3Qgb3JnLWhlYWRpbmct a2V5d29yZC1yZWdleHAtZm9ybWF0DQogICJeXFwoXFwqK1xcKVxcKD86ICslc1xcKVxcKD86ICtc XCguKj9cXClcXCk/WyBcdF0qJCINCiAgIlByaW50ZiBmb3JtYXQgZm9yIGEgcmVnZXhwIG1hdGNo aW5nIGEgaGVhZGxpbmUgd2l0aCBzb21lIGtleXdvcmQuDQpUaGlzIHJlZ2V4cCB3aWxsIG1hdGNo IHRoZSBoZWFkbGluZSBvZiBhbnkgbm9kZSB3aGljaCBoYXMgdGhlDQpleGFjdCBrZXl3b3JkIHRo YXQgaXMgcHV0IGludG8gdGhlIGZvcm1hdC4gIFRoZSBrZXl3b3JkIGlzbid0IGluDQphbnkgZ3Jv dXAgYnkgZGVmYXVsdCwgYnV0IHRoZSBzdGFycyBhbmQgdGhlIGJvZHkgYXJlLiIpDQooZGVmY29u c3Qgb3JnLWhlYWRpbmcta2V5d29yZC1tYXliZS1yZWdleHAtZm9ybWF0DQogICJeXFwoXFwqK1xc KVxcKD86ICslc1xcKT9cXCg/OiArXFwoLio/XFwpXFwpP1sgXHRdKiQiDQogICJQcmludGYgZm9y bWF0IGZvciBhIHJlZ2V4cCBtYXRjaGluZyBhIGhlYWRsaW5lLCBwb3NzaWJseSB3aXRoIHNvbWUg a2V5d29yZC4NClRoaXMgcmVnZXhwIGNhbiBtYXRjaCBhbnkgaGVhZGxpbmUgd2l0aCB0aGUgc3Bl Y2lmaWVkIGtleXdvcmQsIG9yDQp3aXRob3V0IGEga2V5d29yZC4gIFRoZSBrZXl3b3JkIGlzbid0 IGluIGFueSBncm91cCBieSBkZWZhdWx0LA0KYnV0IHRoZSBzdGFycyBhbmQgdGhlIGJvZHkgYXJl LiIpDQoNCihkZWZjdXN0b20gb3JnLWdyb3VwLXRhZ3MgdA0KICAiV2hlbiBub24tbmlsICh0aGUg ZGVmYXVsdCksIHVzZSBncm91cCB0YWdzLg0KVGhpcyBjYW4gYmUgdHVybmVkIG9uL29mZiB0aHJv dWdoIGBvcmctdG9nZ2xlLXRhZ3MtZ3JvdXBzJy4iDQogIDpncm91cCAnb3JnLXRhZ3MNCiAgOmdy b3VwICdvcmctc3RhcnR1cA0KICA6dHlwZSAnYm9vbGVhbikNCg0KKGRlZnZhciBvcmctaW5oaWJp dC1zdGFydHVwIG5pbCkgICAgICAgIDsgRHluYW1pY2FsbHktc2NvcGVkIHBhcmFtLg0KDQooZGVm dW4gb3JnLXRvZ2dsZS10YWdzLWdyb3VwcyAoKQ0KICAiVG9nZ2xlIHN1cHBvcnQgZm9yIGdyb3Vw IHRhZ3MuDQpTdXBwb3J0IGZvciBncm91cCB0YWdzIGlzIGNvbnRyb2xsZWQgYnkgdGhlIG9wdGlv bg0KYG9yZy1ncm91cC10YWdzJywgd2hpY2ggaXMgbm9uLW5pbCBieSBkZWZhdWx0LiINCiAgKGlu dGVyYWN0aXZlKQ0KICAoc2V0cSBvcmctZ3JvdXAtdGFncyAobm90IG9yZy1ncm91cC10YWdzKSkN CiAgKGNvbmQgKChhbmQgKGRlcml2ZWQtbW9kZS1wICdvcmctYWdlbmRhLW1vZGUpDQoJICAgICAg b3JnLWdyb3VwLXRhZ3MpDQoJIChvcmctYWdlbmRhLXJlZG8pKQ0KCSgoZGVyaXZlZC1tb2RlLXAg J29yZy1tb2RlKQ0KCSAobGV0ICgob3JnLWluaGliaXQtc3RhcnR1cCB0KSkgKG9yZy1tb2RlKSkp KQ0KICAobWVzc2FnZSAiR3JvdXBzIHRhZ3Mgc3VwcG9ydCBoYXMgYmVlbiB0dXJuZWQgJXMiDQoJ ICAgKGlmIG9yZy1ncm91cC10YWdzICJvbiIgIm9mZiIpKSkNCg0KKGRlZnVuIG9yZy1zZXQtcmVn ZXhwcy1hbmQtb3B0aW9ucy1mb3ItdGFncyAoKQ0KICAiUHJlY29tcHV0ZSB2YXJpYWJsZXMgdXNl ZCBmb3IgdGFncy4iDQogICh3aGVuIChkZXJpdmVkLW1vZGUtcCAnb3JnLW1vZGUpDQogICAgKG9y Zy1zZXQtbG9jYWwgJ29yZy1maWxlLXRhZ3MgbmlsKQ0KICAgIChsZXQgKChyZSAob3JnLW1ha2Ut b3B0aW9ucy1yZWdleHAgJygiRklMRVRBR1MiICJUQUdTIikpKQ0KCSAgKHNwbGl0cmUgIlsgXHRd KyIpDQoJICAoc3RhcnQgMCkNCgkgIHRhZ3MgZnRhZ3Mga2V5IHZhbHVlKQ0KICAgICAgKHNhdmUt ZXhjdXJzaW9uDQoJKHNhdmUtcmVzdHJpY3Rpb24NCgkgICh3aWRlbikNCgkgIChnb3RvLWNoYXIg KHBvaW50LW1pbikpDQoJICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIHJlIG5pbCB0KQ0KCSAg ICAoc2V0cSBrZXkgKHVwY2FzZSAob3JnLW1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpKQ0K CQkgIHZhbHVlIChvcmctbWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMikpDQoJICAgIChpZiAo c3RyaW5ncCB2YWx1ZSkgKHNldHEgdmFsdWUgKG9yZy10cmltIHZhbHVlKSkpDQoJICAgIChjb25k DQoJICAgICAoKGVxdWFsIGtleSAiVEFHUyIpDQoJICAgICAgKHNldHEgdGFncyAoYXBwZW5kIHRh Z3MgKGlmIHRhZ3MgJygiXFxuIikgbmlsKQ0KCQkJCSAob3JnLXNwbGl0LXN0cmluZyB2YWx1ZSBz cGxpdHJlKSkpKQ0KCSAgICAgKChlcXVhbCBrZXkgIkZJTEVUQUdTIikNCgkgICAgICAod2hlbiAo c3RyaW5nLW1hdGNoICJcXFMtIiB2YWx1ZSkNCgkJKHNldHEgZnRhZ3MNCgkJICAgICAgKGFwcGVu ZA0KCQkgICAgICAgZnRhZ3MNCgkJICAgICAgIChhcHBseSAnYXBwZW5kDQoJCQkgICAgICAobWFw Y2FyIChsYW1iZGEgKHgpIChvcmctc3BsaXQtc3RyaW5nIHggIjoiKSkNCgkJCQkgICAgICAob3Jn LXNwbGl0LXN0cmluZyB2YWx1ZSkpKSkpKSkpKSkpDQogICAgICA7OyBQcm9jZXNzIHRoZSBmaWxl IHRhZ3MuDQogICAgICAoYW5kIGZ0YWdzIChvcmctc2V0LWxvY2FsICdvcmctZmlsZS10YWdzDQoJ CQkJKG1hcGNhciAnb3JnLWFkZC1wcm9wLWluaGVyaXRlZCBmdGFncykpKQ0KICAgICAgKG9yZy1z ZXQtbG9jYWwgJ29yZy10YWctZ3JvdXBzLWFsaXN0IG5pbCkNCiAgICAgIDs7IFByb2Nlc3MgdGhl IHRhZ3MuDQogICAgICAod2hlbiAoYW5kIChub3QgdGFncykgb3JnLXRhZy1hbGlzdCkNCgkoc2V0 cSB0YWdzDQoJICAgICAgKG1hcGNhcg0KCSAgICAgICAobGFtYmRhICh0ZykgKGNvbmQgKChlcSAo Y2FyIHRnKSA6c3RhcnRncm91cCkgInsiKQ0KCQkJCSAgKChlcSAoY2FyIHRnKSA6ZW5kZ3JvdXAp ICJ9IikNCgkJCQkgICgoZXEgKGNhciB0ZykgOmdyb3VwdGFncykgIjoiKQ0KCQkJCSAgKChlcSAo Y2FyIHRnKSA6bmV3bGluZSkgIlxuIikNCgkJCQkgICh0IChjb25jYXQgKGNhciB0ZykNCgkJCQkJ ICAgICAoaWYgKGNoYXJhY3RlcnAgKGNkciB0ZykpDQoJCQkJCQkgKGZvcm1hdCAiKCVzKSIgKGNo YXItdG8tc3RyaW5nIChjZHIgdGcpKSkgIiIpKSkpKQ0KCSAgICAgICBvcmctdGFnLWFsaXN0KSkp DQogICAgICAobGV0IChlIHRncyBnKQ0KCSh3aGlsZSAoc2V0cSBlIChwb3AgdGFncykpDQoJICAo Y29uZA0KCSAgICgoZXF1YWwgZSAieyIpDQoJICAgIChwcm9nbiAocHVzaCAnKDpzdGFydGdyb3Vw KSB0Z3MpDQoJCSAgICh3aGVuIChlcXVhbCAobnRoIDEgdGFncykgIjoiKQ0KCQkgICAgIChwdXNo IChsaXN0IChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcNCgkJCQkgICIoLispJCIgIiIgKG50aCAw IHRhZ3MpKSkNCgkJCSAgIG9yZy10YWctZ3JvdXBzLWFsaXN0KQ0KCQkgICAgIChzZXRxIGcgMCkp KSkNCgkgICAoKGVxdWFsIGUgIjoiKSAocHVzaCAnKDpncm91cHRhZ3MpIHRncykpDQoJICAgKChl cXVhbCBlICJ9IikgKHB1c2ggJyg6ZW5kZ3JvdXApIHRncykgKGlmIGcgKHNldHEgZyBuaWwpKSkN CgkgICAoKGVxdWFsIGUgIlxcbiIpIChwdXNoICcoOm5ld2xpbmUpIHRncykpDQoJICAgKChzdHJp bmctbWF0Y2ggKG9yZy1yZSAiXlxcKFtbOmFsbnVtOl1fQCMlXStcXCkoXFwoLlxcKSkkIikgZSkN CgkgICAgKHB1c2ggKGNvbnMgKG1hdGNoLXN0cmluZyAxIGUpDQoJCQkoc3RyaW5nLXRvLWNoYXIg KG1hdGNoLXN0cmluZyAyIGUpKSkgdGdzKQ0KCSAgICAoaWYgKGFuZCBnICg+IGcgMCkpDQoJCShz ZXRjYXIgb3JnLXRhZy1ncm91cHMtYWxpc3QNCgkJCShhcHBlbmQgKGNhciBvcmctdGFnLWdyb3Vw cy1hbGlzdCkNCgkJCQkobGlzdCAobWF0Y2gtc3RyaW5nIDEgZSkpKSkpDQoJICAgIChpZiBnIChz ZXRxIGcgKDErIGcpKSkpDQoJICAgKHQgKHB1c2ggKGxpc3QgZSkgdGdzKQ0KCSAgICAgIChpZiAo YW5kIGcgKD4gZyAwKSkNCgkJICAoc2V0Y2FyIG9yZy10YWctZ3JvdXBzLWFsaXN0DQoJCQkgIChh cHBlbmQgKGNhciBvcmctdGFnLWdyb3Vwcy1hbGlzdCkgKGxpc3QgZSkpKSkNCgkgICAgICAoaWYg ZyAoc2V0cSBnICgxKyBnKSkpKSkpDQoJKG9yZy1zZXQtbG9jYWwgJ29yZy10YWctYWxpc3Qgbmls KQ0KCSh3aGlsZSAoc2V0cSBlIChwb3AgdGdzKSkNCgkgIChvciAoYW5kIChzdHJpbmdwIChjYXIg ZSkpDQoJCSAgIChhc3NvYyAoY2FyIGUpIG9yZy10YWctYWxpc3QpKQ0KCSAgICAgIChwdXNoIGUg b3JnLXRhZy1hbGlzdCkpKQ0KCTs7IFJldHVybiBhIGxpc3Qgd2l0aCB0YWcgdmFyaWFibGVzDQoJ KGxpc3Qgb3JnLWZpbGUtdGFncyBvcmctdGFnLWFsaXN0IG9yZy10YWctZ3JvdXBzLWFsaXN0KSkp KSkNCg0KKGRlZnZhciBvcmctb3RhIG5pbCkNCihkZWZ1biBvcmctc2V0LXJlZ2V4cHMtYW5kLW9w dGlvbnMgKCkNCiAgIlByZWNvbXB1dGUgcmVndWxhciBleHByZXNzaW9ucyB1c2VkIGluIHRoZSBj dXJyZW50IGJ1ZmZlci4iDQogICh3aGVuIChkZXJpdmVkLW1vZGUtcCAnb3JnLW1vZGUpDQogICAg KG9yZy1zZXQtbG9jYWwgJ29yZy10b2RvLWt3ZC1hbGlzdCBuaWwpDQogICAgKG9yZy1zZXQtbG9j YWwgJ29yZy10b2RvLWtleS1hbGlzdCBuaWwpDQogICAgKG9yZy1zZXQtbG9jYWwgJ29yZy10b2Rv LWtleS10cmlnZ2VyIG5pbCkNCiAgICAob3JnLXNldC1sb2NhbCAnb3JnLXRvZG8ta2V5d29yZHMt MSBuaWwpDQogICAgKG9yZy1zZXQtbG9jYWwgJ29yZy1kb25lLWtleXdvcmRzIG5pbCkNCiAgICAo b3JnLXNldC1sb2NhbCAnb3JnLXRvZG8taGVhZHMgbmlsKQ0KICAgIChvcmctc2V0LWxvY2FsICdv cmctdG9kby1zZXRzIG5pbCkNCiAgICAob3JnLXNldC1sb2NhbCAnb3JnLXRvZG8tbG9nLXN0YXRl cyBuaWwpDQogICAgKG9yZy1zZXQtbG9jYWwgJ29yZy1maWxlLXByb3BlcnRpZXMgbmlsKQ0KICAg IChsZXQgKChyZSAob3JnLW1ha2Utb3B0aW9ucy1yZWdleHANCgkgICAgICAgJygiQ0FURUdPUlki ICJUT0RPIiAiQ09MVU1OUyIgIlNUQVJUVVAiICJBUkNISVZFIg0KCQkgIkxJTksiICJQUklPUklU SUVTIiAiQ09OU1RBTlRTIiAiUFJPUEVSVFkiICJEUkFXRVJTIg0KCQkgIlNFVFVQRklMRSIgIk9Q VElPTlMiKQ0KCSAgICAgICAiXFwoPzpbYS16QS1aXVswLTlhLXpBLVpfXSpfVE9ET1xcKSIpKQ0K CSAgKHNwbGl0cmUgIlsgXHRdKyIpDQoJICAoc2NyaXB0cyBvcmctdXNlLXN1Yi1zdXBlcnNjcmlw dHMpDQoJICBrd2RzIGt3czAga3dzYSBrZXkgbG9nIHZhbHVlIGNhdCBhcmNoIGNvbnN0IGxpbmtz IGh3IGR3cw0KCSAgdGFpbCBzZXAga3dzMSBwcmlvIHByb3BzIGRyYXdlcnMgZXh0LXNldHVwLW9y LW5pbCBzZXR1cC1jb250ZW50cw0KCSAgKHN0YXJ0IDApKQ0KICAgICAgKHNhdmUtZXhjdXJzaW9u DQoJKHNhdmUtcmVzdHJpY3Rpb24NCgkgICh3aWRlbikNCgkgIChnb3RvLWNoYXIgKHBvaW50LW1p bikpDQoJICAod2hpbGUNCgkgICAgICAob3IgKGFuZA0KCQkgICBleHQtc2V0dXAtb3ItbmlsDQoJ CSAgIChub3Qgb3JnLW90YSkNCgkJICAgKGxldCAocmV0KQ0KCQkgICAgICh3aXRoLXRlbXAtYnVm ZmVyDQoJCSAgICAgICAoaW5zZXJ0IGV4dC1zZXR1cC1vci1uaWwpDQoJCSAgICAgICAobGV0ICgo bWFqb3ItbW9kZSAnb3JnLW1vZGUpIG9yZy1vdGEpDQoJCQkgKHNldHEgcmV0IChzYXZlLW1hdGNo LWRhdGENCgkJCQkgICAgIChvcmctc2V0LXJlZ2V4cHMtYW5kLW9wdGlvbnMtZm9yLXRhZ3MpKSkp KQ0KCQkgICAgIDs7IEFwcGVuZCBzZXR1cGZpbGUgdGFncyB0byBleGlzdGluZyB0YWdzDQoJCSAg ICAgKHNldHEgb3JnLW90YSB0KQ0KCQkgICAgIChzZXRxIG9yZy1maWxlLXRhZ3MNCgkJCSAgIChk ZWxxIG5pbCAoYXBwZW5kIG9yZy1maWxlLXRhZ3MgKG50aCAwIHJldCkpKQ0KCQkJICAgb3JnLXRh Zy1hbGlzdA0KCQkJICAgKGRlbHEgbmlsIChhcHBlbmQgb3JnLXRhZy1hbGlzdCAobnRoIDEgcmV0 KSkpDQoJCQkgICBvcmctdGFnLWdyb3Vwcy1hbGlzdA0KCQkJICAgKGRlbHEgbmlsIChhcHBlbmQg b3JnLXRhZy1ncm91cHMtYWxpc3QgKG50aCAyIHJldCkpKSkpKQ0KCQkgIChhbmQgZXh0LXNldHVw LW9yLW5pbA0KCQkgICAgICAgKHN0cmluZy1tYXRjaCByZSBleHQtc2V0dXAtb3ItbmlsIHN0YXJ0 KQ0KCQkgICAgICAgKHNldHEgc3RhcnQgKG1hdGNoLWVuZCAwKSkpDQoJCSAgKGFuZCAoc2V0cSBl eHQtc2V0dXAtb3ItbmlsIG5pbCBzdGFydCAwKQ0KCQkgICAgICAgKHJlLXNlYXJjaC1mb3J3YXJk IHJlIG5pbCB0KSkpDQoJICAgIChzZXRxIGtleSAodXBjYXNlIChtYXRjaC1zdHJpbmcgMSBleHQt c2V0dXAtb3ItbmlsKSkNCgkJICB2YWx1ZSAob3JnLW1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVz IDIgZXh0LXNldHVwLW9yLW5pbCkpDQoJICAgIChpZiAoc3RyaW5ncCB2YWx1ZSkgKHNldHEgdmFs dWUgKG9yZy10cmltIHZhbHVlKSkpDQoJICAgIChjb25kDQoJICAgICAoKGVxdWFsIGtleSAiQ0FU RUdPUlkiKQ0KCSAgICAgIChzZXRxIGNhdCB2YWx1ZSkpDQoJICAgICAoKG1lbWJlciBrZXkgJygi U0VRX1RPRE8iICJUT0RPIikpDQoJICAgICAgKHB1c2ggKGNvbnMgJ3NlcXVlbmNlIChvcmctc3Bs aXQtc3RyaW5nIHZhbHVlIHNwbGl0cmUpKSBrd2RzKSkNCgkgICAgICgoZXF1YWwga2V5ICJUWVBf VE9ETyIpDQoJICAgICAgKHB1c2ggKGNvbnMgJ3R5cGUgKG9yZy1zcGxpdC1zdHJpbmcgdmFsdWUg c3BsaXRyZSkpIGt3ZHMpKQ0KIAkgICAgICgoc3RyaW5nLW1hdGNoICJcXGBcXChbYS16QS1aXVsw LTlhLXpBLVpfXSpcXClfVE9ET1xcJyIga2V5KQ0KCSAgICAgIDs7IGdlbmVyYWwgVE9ETy1saWtl IHNldHVwDQogCSAgICAgIChwdXNoIChjb25zIChpbnRlcm4gKGRvd25jYXNlIChtYXRjaC1zdHJp bmcgMSBrZXkpKSkNCgkJCSAgKG9yZy1zcGxpdC1zdHJpbmcgdmFsdWUgc3BsaXRyZSkpIGt3ZHMp KQ0KCSAgICAgKChlcXVhbCBrZXkgIkNPTFVNTlMiKQ0KCSAgICAgIChvcmctc2V0LWxvY2FsICdv cmctY29sdW1ucy1kZWZhdWx0LWZvcm1hdCB2YWx1ZSkpDQoJICAgICAoKGVxdWFsIGtleSAiTElO SyIpDQoJICAgICAgKHdoZW4gKHN0cmluZy1tYXRjaCAiXlxcKFxcUy0rXFwpWyBcdF0rXFwoLitc XCkiIHZhbHVlKQ0KCQkocHVzaCAoY29ucyAobWF0Y2gtc3RyaW5nIDEgdmFsdWUpDQoJCQkgICAg KG9yZy10cmltIChtYXRjaC1zdHJpbmcgMiB2YWx1ZSkpKQ0KCQkgICAgICBsaW5rcykpKQ0KCSAg ICAgKChlcXVhbCBrZXkgIlBSSU9SSVRJRVMiKQ0KCSAgICAgIChzZXRxIHByaW8gKG9yZy1zcGxp dC1zdHJpbmcgdmFsdWUgIiArIikpKQ0KCSAgICAgKChlcXVhbCBrZXkgIlBST1BFUlRZIikNCgkg ICAgICAod2hlbiAoc3RyaW5nLW1hdGNoICJcXChcXFMtK1xcKVxccy0rXFwoLipcXCkiIHZhbHVl KQ0KCQkoc2V0cSBwcm9wcyAob3JnLXVwZGF0ZS1wcm9wZXJ0eS1wbGlzdCAobWF0Y2gtc3RyaW5n IDEgdmFsdWUpDQoJCQkJCQkgICAgICAgKG1hdGNoLXN0cmluZyAyIHZhbHVlKQ0KCQkJCQkJICAg ICAgIHByb3BzKSkpKQ0KCSAgICAgKChlcXVhbCBrZXkgIkRSQVdFUlMiKQ0KCSAgICAgIChzZXRx IGRyYXdlcnMgKGRlbGV0ZS1kdXBzIChhcHBlbmQgb3JnLWRyYXdlcnMgKG9yZy1zcGxpdC1zdHJp bmcgdmFsdWUgc3BsaXRyZSkpKSkpDQoJICAgICAoKGVxdWFsIGtleSAiQ09OU1RBTlRTIikNCgkg ICAgICAob3JnLXRhYmxlLXNldC1jb25zdGFudHMpKQ0KCSAgICAgKChlcXVhbCBrZXkgIlNUQVJU VVAiKQ0KCSAgICAgIChsZXQgKChvcHRzIChvcmctc3BsaXQtc3RyaW5nIHZhbHVlIHNwbGl0cmUp KQ0KCQkgICAgbCB2YXIgdmFsKQ0KCQkod2hpbGUgKHNldHEgbCAocG9wIG9wdHMpKQ0KCQkgICh3 aGVuIChzZXRxIGwgKGFzc29jIGwgb3JnLXN0YXJ0dXAtb3B0aW9ucykpDQoJCSAgICAoc2V0cSB2 YXIgKG50aCAxIGwpIHZhbCAobnRoIDIgbCkpDQoJCSAgICAoaWYgKG5vdCAobnRoIDMgbCkpDQoJ CQkoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlIHZhcikgdmFsKQ0KCQkgICAgICAoaWYgKG5vdCAo bGlzdHAgKHN5bWJvbC12YWx1ZSB2YXIpKSkNCgkJCSAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJs ZSB2YXIpIG5pbCkpDQoJCSAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgdmFyKSAoc3lt Ym9sLXZhbHVlIHZhcikpDQoJCSAgICAgIChhZGQtdG8tbGlzdCB2YXIgdmFsKSkpKSkpDQoJICAg ICAoKGVxdWFsIGtleSAiQVJDSElWRSIpDQoJICAgICAgKHNldHEgYXJjaCB2YWx1ZSkNCgkgICAg ICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyAwIChsZW5ndGggYXJjaCkNCgkJCQkgICAgICAnKGZh Y2UgdCBmb250aWZpZWQgdCkgYXJjaCkpDQoJICAgICAoKGVxdWFsIGtleSAiT1BUSU9OUyIpDQoJ ICAgICAgKGlmIChzdHJpbmctbWF0Y2ggIlxcKFsgXHRdXFx8XFxgXFwpXFxeOlxcKHRcXHxuaWxc XHx7fVxcKSIgdmFsdWUpDQoJCSAgKHNldHEgc2NyaXB0cyAocmVhZCAobWF0Y2gtc3RyaW5nIDIg dmFsdWUpKSkpKQ0KCSAgICAgKChhbmQgKGVxdWFsIGtleSAiU0VUVVBGSUxFIikNCgkJICAgOzsg UHJldmVudCBjaGVja2luZyBpbiBHbnVzIG1lc3NhZ2VzDQoJCSAgIChub3QgYnVmZmVyLXJlYWQt b25seSkpDQoJICAgICAgKHNldHEgc2V0dXAtY29udGVudHMgKG9yZy1maWxlLWNvbnRlbnRzDQoJ CQkJICAgIChleHBhbmQtZmlsZS1uYW1lDQoJCQkJICAgICAob3JnLXJlbW92ZS1kb3VibGUtcXVv dGVzIHZhbHVlKSkNCgkJCQkgICAgJ25vZXJyb3IpKQ0KCSAgICAgIChpZiAobm90IGV4dC1zZXR1 cC1vci1uaWwpDQoJCSAgKHNldHEgZXh0LXNldHVwLW9yLW5pbCBzZXR1cC1jb250ZW50cyBzdGFy dCAwKQ0KCQkoc2V0cSBleHQtc2V0dXAtb3ItbmlsDQoJCSAgICAgIChjb25jYXQgKHN1YnN0cmlu ZyBleHQtc2V0dXAtb3ItbmlsIDAgc3RhcnQpDQoJCQkgICAgICAiXG4iIHNldHVwLWNvbnRlbnRz ICJcbiINCgkJCSAgICAgIChzdWJzdHJpbmcgZXh0LXNldHVwLW9yLW5pbCBzdGFydCkpKSkpKSkN CgkgIDs7IHNlYXJjaCBmb3IgcHJvcGVydHkgYmxvY2tzDQoJICAoZ290by1jaGFyIChwb2ludC1t aW4pKQ0KCSAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctYmxvY2stcmVnZXhwIG5pbCB0 KQ0KCSAgICAod2hlbiAoZXF1YWwgIlBST1BFUlRZIiAodXBjYXNlIChtYXRjaC1zdHJpbmcgMSkp KQ0KCSAgICAgIChzZXRxIHZhbHVlIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcNCgkJCSAgICJb XG5ccl0iICIgIiAobWF0Y2gtc3RyaW5nIDQpKSkNCgkgICAgICAod2hlbiAoc3RyaW5nLW1hdGNo ICJcXChcXFMtK1xcKVxccy0rXFwoLipcXCkiIHZhbHVlKQ0KCQkoc2V0cSBwcm9wcyAob3JnLXVw ZGF0ZS1wcm9wZXJ0eS1wbGlzdCAobWF0Y2gtc3RyaW5nIDEgdmFsdWUpDQoJCQkJCQkgICAgICAg KG1hdGNoLXN0cmluZyAyIHZhbHVlKQ0KCQkJCQkJICAgICAgIHByb3BzKSkpKSkpKQ0KICAgICAg KG9yZy1zZXQtbG9jYWwgJ29yZy11c2Utc3ViLXN1cGVyc2NyaXB0cyBzY3JpcHRzKQ0KICAgICAg KHdoZW4gY2F0DQoJKG9yZy1zZXQtbG9jYWwgJ29yZy1jYXRlZ29yeSAoaW50ZXJuIGNhdCkpDQoJ KHB1c2ggKGNvbnMgIkNBVEVHT1JZIiBjYXQpIHByb3BzKSkNCiAgICAgICh3aGVuIHByaW8NCgko aWYgKDwgKGxlbmd0aCBwcmlvKSAzKSAoc2V0cSBwcmlvICcoIkEiICJDIiAiQiIpKSkNCgkoc2V0 cSBwcmlvIChtYXBjYXIgJ3N0cmluZy10by1jaGFyIHByaW8pKQ0KCShvcmctc2V0LWxvY2FsICdv cmctaGlnaGVzdC1wcmlvcml0eSAobnRoIDAgcHJpbykpDQoJKG9yZy1zZXQtbG9jYWwgJ29yZy1s b3dlc3QtcHJpb3JpdHkgIChudGggMSBwcmlvKSkNCgkob3JnLXNldC1sb2NhbCAnb3JnLWRlZmF1 bHQtcHJpb3JpdHkgKG50aCAyIHByaW8pKSkNCiAgICAgIChhbmQgcHJvcHMgKG9yZy1zZXQtbG9j YWwgJ29yZy1maWxlLXByb3BlcnRpZXMgKG5yZXZlcnNlIHByb3BzKSkpDQogICAgICAoYW5kIGRy YXdlcnMgKG9yZy1zZXQtbG9jYWwgJ29yZy1kcmF3ZXJzIGRyYXdlcnMpKQ0KICAgICAgKGFuZCBh cmNoIChvcmctc2V0LWxvY2FsICdvcmctYXJjaGl2ZS1sb2NhdGlvbiBhcmNoKSkNCiAgICAgIChh bmQgbGlua3MgKHNldHEgb3JnLWxpbmstYWJicmV2LWFsaXN0LWxvY2FsIChucmV2ZXJzZSBsaW5r cykpKQ0KICAgICAgOzsgUHJvY2VzcyB0aGUgVE9ETyBrZXl3b3Jkcw0KICAgICAgKHVubGVzcyBr d2RzDQoJOzsgVXNlIHRoZSBnbG9iYWwgdmFsdWVzIGFzIGlmIHRoZXkgaGFkIGJlZW4gZ2l2ZW4g bG9jYWxseS4NCgkoc2V0cSBrd2RzIChkZWZhdWx0LXZhbHVlICdvcmctdG9kby1rZXl3b3Jkcykp DQoJKGlmIChzdHJpbmdwIChjYXIga3dkcykpDQoJICAgIChzZXRxIGt3ZHMgKGxpc3QgKGNvbnMg b3JnLXRvZG8taW50ZXJwcmV0YXRpb24NCgkJCQkgICAoZGVmYXVsdC12YWx1ZSAnb3JnLXRvZG8t a2V5d29yZHMpKSkpKQ0KCShzZXRxIGt3ZHMgKHJldmVyc2Uga3dkcykpKQ0KICAgICAgKHNldHEg a3dkcyAobnJldmVyc2Uga3dkcykpDQogICAgICAobGV0IChpbnRlciBrd3Mga3cpDQoJKHdoaWxl IChzZXRxIGt3cyAocG9wIGt3ZHMpKQ0KIAkgIChsZXQgKChrd3MgKG9yDQoJCSAgICAgIChydW4t aG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2Vzcw0KIAkJICAgICAgICdvcmctdG9kby1zZXR1cC1m aWx0ZXItaG9vayBrd3MpDQoJCSAgICAgIGt3cykpKQ0KCSAgICAoc2V0cSBpbnRlciAocG9wIGt3 cykgc2VwIChtZW1iZXIgInwiIGt3cykNCgkJICBrd3MwIChkZWxldGUgInwiIChjb3B5LXNlcXVl bmNlIGt3cykpDQoJCSAga3dzYSBuaWwNCgkJICBrd3MxIChtYXBjYXINCgkJCShsYW1iZGEgKHgp DQoJCQkgIDs7ICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgMg0KCQkJICAoaWYg KHN0cmluZy1tYXRjaCAiXlxcKC4qP1xcKVxcKD86KFxcKFteIUAvXVxcKT8uKj8pXFwpPyQiIHgp DQoJCQkgICAgICAocHJvZ24NCgkJCQkoc2V0cSBrdyAobWF0Y2gtc3RyaW5nIDEgeCkNCgkJCQkg ICAgICBrZXkgKGFuZCAobWF0Y2gtZW5kIDIpIChtYXRjaC1zdHJpbmcgMiB4KSkNCgkJCQkgICAg ICBsb2cgKG9yZy1leHRyYWN0LWxvZy1zdGF0ZS1zZXR0aW5ncyB4KSkNCgkJCQkocHVzaCAoY29u cyBrdyAoYW5kIGtleSAoc3RyaW5nLXRvLWNoYXIga2V5KSkpIGt3c2EpDQoJCQkJKGFuZCBsb2cg KHB1c2ggbG9nIG9yZy10b2RvLWxvZy1zdGF0ZXMpKQ0KCQkJCWt3KQ0KCQkJICAgIChlcnJvciAi SW52YWxpZCBUT0RPIGtleXdvcmQgJXMiIHgpKSkNCgkJCWt3czApDQoJCSAga3dzYSAoaWYga3dz YSAoYXBwZW5kICcoKDpzdGFydGdyb3VwKSkNCgkJCQkJKG5yZXZlcnNlIGt3c2EpDQoJCQkJCSco KDplbmRncm91cCkpKSkNCgkJICBodyAoY2FyIGt3czEpDQoJCSAgZHdzIChpZiBzZXAgKG9yZy1y ZW1vdmUta2V5d29yZC1rZXlzIChjZHIgc2VwKSkgKGxhc3Qga3dzMSkpDQoJCSAgdGFpbCAobGlz dCBpbnRlciBodyAoY2FyIGR3cykgKG9yZy1sYXN0IGR3cykpKSkNCgkgIChhZGQtdG8tbGlzdCAn b3JnLXRvZG8taGVhZHMgaHcgJ2FwcGVuZCkNCgkgIChwdXNoIGt3czEgb3JnLXRvZG8tc2V0cykN CgkgIChzZXRxIG9yZy1kb25lLWtleXdvcmRzIChhcHBlbmQgb3JnLWRvbmUta2V5d29yZHMgZHdz IG5pbCkpDQoJICAoc2V0cSBvcmctdG9kby1rZXktYWxpc3QgKGFwcGVuZCBvcmctdG9kby1rZXkt YWxpc3Qga3dzYSkpDQoJICAobWFwYyAobGFtYmRhICh4KSAocHVzaCAoY29ucyB4IHRhaWwpIG9y Zy10b2RvLWt3ZC1hbGlzdCkpIGt3czEpDQoJICAoc2V0cSBvcmctdG9kby1rZXl3b3Jkcy0xIChh cHBlbmQgb3JnLXRvZG8ta2V5d29yZHMtMSBrd3MxIG5pbCkpKQ0KCShzZXRxIG9yZy10b2RvLXNl dHMgKG5yZXZlcnNlIG9yZy10b2RvLXNldHMpDQoJICAgICAgb3JnLXRvZG8ta3dkLWFsaXN0IChu cmV2ZXJzZSBvcmctdG9kby1rd2QtYWxpc3QpDQoJICAgICAgb3JnLXRvZG8ta2V5LXRyaWdnZXIg KGRlbHEgbmlsIChtYXBjYXIgJ2NkciBvcmctdG9kby1rZXktYWxpc3QpKQ0KCSAgICAgIG9yZy10 b2RvLWtleS1hbGlzdCAob3JnLWFzc2lnbi1mYXN0LWtleXMgb3JnLXRvZG8ta2V5LWFsaXN0KSkp DQogICAgICA7OyBDb21wdXRlIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIGFuZCBvdGhlciBsb2Nh bCB2YXJpYWJsZXMuDQogICAgICA7OyBVc2luZyBgb3JnLW91dGxpbmUtcmVnZXhwLWJvbCcgd291 bGQgY29tcGxpY2F0ZSB0aGVtIG11Y2gsDQogICAgICA7OyBiZWNhdXNlIG9mIHRoZSBmaXhlZCB3 aGl0ZSBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoYXQgc3RyaW5nLg0KICAgICAgKGlmIChub3Qgb3Jn LWRvbmUta2V5d29yZHMpDQoJICAoc2V0cSBvcmctZG9uZS1rZXl3b3JkcyAoYW5kIG9yZy10b2Rv LWtleXdvcmRzLTENCgkJCQkgICAgICAgKGxpc3QgKG9yZy1sYXN0IG9yZy10b2RvLWtleXdvcmRz LTEpKSkpKQ0KICAgICAgKHNldHEgb3JnLWRzLWtleXdvcmQtbGVuZ3RoICgrIDIgKG1heCAobGVu Z3RoIG9yZy1kZWFkbGluZS1zdHJpbmcpDQoJCQkJCSAgICAobGVuZ3RoIG9yZy1zY2hlZHVsZWQt c3RyaW5nKQ0KCQkJCQkgICAgKGxlbmd0aCBvcmctY2xvY2stc3RyaW5nKQ0KCQkJCQkgICAgKGxl bmd0aCBvcmctY2xvc2VkLXN0cmluZykpKQ0KCSAgICBvcmctZHJhd2VyLXJlZ2V4cA0KCSAgICAo Y29uY2F0ICJeWyBcdF0qOlxcKCINCgkJICAgIChtYXBjb25jYXQgJ3JlZ2V4cC1xdW90ZSBvcmct ZHJhd2VycyAiXFx8IikNCgkJICAgICJcXCk6WyBcdF0qJCIpDQoJICAgIG9yZy1ub3QtZG9uZS1r ZXl3b3Jkcw0KCSAgICAob3JnLWRlbGV0ZS1hbGwgb3JnLWRvbmUta2V5d29yZHMgKGNvcHktc2Vx dWVuY2Ugb3JnLXRvZG8ta2V5d29yZHMtMSkpDQoJICAgIG9yZy10b2RvLXJlZ2V4cA0KCSAgICAo Y29uY2F0ICJcXCgiDQoJCSAgICAobWFwY29uY2F0ICdyZWdleHAtcXVvdGUgb3JnLXRvZG8ta2V5 d29yZHMtMSAiXFx8IikNCgkJICAgICJcXCkiKQ0KCSAgICBvcmctbm90LWRvbmUtcmVnZXhwDQoJ ICAgIChjb25jYXQgIlxcKCINCgkJICAgIChtYXBjb25jYXQgJ3JlZ2V4cC1xdW90ZSBvcmctbm90 LWRvbmUta2V5d29yZHMgIlxcfCIpDQoJCSAgICAiXFwpIikNCgkgICAgb3JnLW5vdC1kb25lLWhl YWRpbmctcmVnZXhwDQoJICAgIChmb3JtYXQgb3JnLWhlYWRpbmcta2V5d29yZC1yZWdleHAtZm9y bWF0IG9yZy1ub3QtZG9uZS1yZWdleHApDQoJICAgIG9yZy10b2RvLWxpbmUtcmVnZXhwDQoJICAg IChmb3JtYXQgb3JnLWhlYWRpbmcta2V5d29yZC1tYXliZS1yZWdleHAtZm9ybWF0IG9yZy10b2Rv LXJlZ2V4cCkNCgkgICAgb3JnLWNvbXBsZXgtaGVhZGluZy1yZWdleHANCgkgICAgKGNvbmNhdCAi XlxcKFxcKitcXCkiDQoJCSAgICAiXFwoPzogKyIgb3JnLXRvZG8tcmVnZXhwICJcXCk/Ig0KCQkg ICAgIlxcKD86ICtcXChcXFsjLlxcXVxcKVxcKT8iDQoJCSAgICAiXFwoPzogK1xcKC4qP1xcKVxc KT8/Ig0KCQkgICAgKG9yZy1yZSAiXFwoPzpbIFx0XStcXCg6W1s6YWxudW06XV9AIyU6XSs6XFwp XFwpPyIpDQoJCSAgICAiWyBcdF0qJCIpDQoJICAgIG9yZy1jb21wbGV4LWhlYWRpbmctcmVnZXhw LWZvcm1hdA0KCSAgICAoY29uY2F0ICJeXFwoXFwqK1xcKSINCgkJICAgICJcXCg/OiArIiBvcmct dG9kby1yZWdleHAgIlxcKT8iDQoJCSAgICAiXFwoPzogK1xcKFxcWyMuXFxdXFwpXFwpPyINCgkJ ICAgICJcXCg/OiArIg0KCQkgICAgOzsgU3RhdHMgY29va2llcyBjYW4gYmUgc3R1Y2sgdG8gYm9k eS4NCgkJICAgICJcXCg/OlxcW1swLTklJS9dK1xcXSAqXFwpKiINCgkJICAgICJcXCglc1xcKSIN CgkJICAgICJcXCg/OiAqXFxbWzAtOSUlL10rXFxdXFwpKiINCgkJICAgICJcXCkiDQoJCSAgICAo b3JnLXJlICJcXCg/OlsgXHRdK1xcKDpbWzphbG51bTpdX0AjJSU6XSs6XFwpXFwpPyIpDQoJCSAg ICAiWyBcdF0qJCIpDQoJICAgIG9yZy10b2RvLWxpbmUtdGFncy1yZWdleHANCgkgICAgKGNvbmNh dCAiXlxcKFxcKitcXCkiDQoJCSAgICAiXFwoPzogKyIgb3JnLXRvZG8tcmVnZXhwICJcXCk/Ig0K CQkgICAgIlxcKD86ICtcXCguKj9cXClcXCk/PyINCgkJICAgIChvcmctcmUgIlxcKD86WyBcdF0r XFwoOltbOmFsbnVtOl06X0AjJV0rOlxcKVxcKT8iKQ0KCQkgICAgIlsgXHRdKiQiKQ0KCSAgICBv cmctZGVhZGxpbmUtcmVnZXhwIChjb25jYXQgIlxcPCIgb3JnLWRlYWRsaW5lLXN0cmluZykNCgkg ICAgb3JnLWRlYWRsaW5lLXRpbWUtcmVnZXhwDQoJICAgIChjb25jYXQgIlxcPCIgb3JnLWRlYWRs aW5lLXN0cmluZyAiICo8XFwoW14+XStcXCk+IikNCgkgICAgb3JnLWRlYWRsaW5lLXRpbWUtaG91 ci1yZWdleHANCgkgICAgKGNvbmNhdCAiXFw8IiBvcmctZGVhZGxpbmUtc3RyaW5nDQoJCSAgICAi ICo8XFwoW14+XStbMC05XVxcezEsMlxcfTpbMC05XVxcezJcXH1bMC05LSs6aGR3bXkgXHQuXSpc XCk+IikNCgkgICAgb3JnLWRlYWRsaW5lLWxpbmUtcmVnZXhwDQoJICAgIChjb25jYXQgIlxcPFxc KCIgb3JnLWRlYWRsaW5lLXN0cmluZyAiXFwpLioiKQ0KCSAgICBvcmctc2NoZWR1bGVkLXJlZ2V4 cA0KCSAgICAoY29uY2F0ICJcXDwiIG9yZy1zY2hlZHVsZWQtc3RyaW5nKQ0KCSAgICBvcmctc2No ZWR1bGVkLXRpbWUtcmVnZXhwDQoJICAgIChjb25jYXQgIlxcPCIgb3JnLXNjaGVkdWxlZC1zdHJp bmcgIiAqPFxcKFtePl0rXFwpPiIpDQoJICAgIG9yZy1zY2hlZHVsZWQtdGltZS1ob3VyLXJlZ2V4 cA0KCSAgICAoY29uY2F0ICJcXDwiIG9yZy1zY2hlZHVsZWQtc3RyaW5nDQoJCSAgICAiICo8XFwo W14+XStbMC05XVxcezEsMlxcfTpbMC05XVxcezJcXH1bMC05LSs6aGR3bXkgXHQuXSpcXCk+IikN CgkgICAgb3JnLWNsb3NlZC10aW1lLXJlZ2V4cA0KCSAgICAoY29uY2F0ICJcXDwiIG9yZy1jbG9z ZWQtc3RyaW5nICIgKlxcW1xcKFteXV0rXFwpXFxdIikNCgkgICAgb3JnLWtleXdvcmQtdGltZS1y ZWdleHANCgkgICAgKGNvbmNhdCAiXFw8XFwoIiBvcmctc2NoZWR1bGVkLXN0cmluZw0KCQkgICAg IlxcfCIgb3JnLWRlYWRsaW5lLXN0cmluZw0KCQkgICAgIlxcfCIgb3JnLWNsb3NlZC1zdHJpbmcN CgkJICAgICJcXHwiIG9yZy1jbG9jay1zdHJpbmcgIlxcKSINCgkJICAgICIgKltbPF1cXChbXl0+ XStcXClbXT5dIikNCgkgICAgb3JnLWtleXdvcmQtdGltZS1ub3QtY2xvY2stcmVnZXhwDQoJICAg IChjb25jYXQgIlxcPFxcKCIgb3JnLXNjaGVkdWxlZC1zdHJpbmcNCgkJICAgICJcXHwiIG9yZy1k ZWFkbGluZS1zdHJpbmcNCgkJICAgICJcXHwiIG9yZy1jbG9zZWQtc3RyaW5nDQoJCSAgICAiXFwp Ig0KCQkgICAgIiAqW1s8XVxcKFteXT5dK1xcKVtdPl0iKQ0KCSAgICBvcmctbWF5YmUta2V5d29y ZC10aW1lLXJlZ2V4cA0KCSAgICAoY29uY2F0ICJcXChcXDxcXCgiIG9yZy1zY2hlZHVsZWQtc3Ry aW5nDQoJCSAgICAiXFx8IiBvcmctZGVhZGxpbmUtc3RyaW5nDQoJCSAgICAiXFx8IiBvcmctY2xv c2VkLXN0cmluZw0KCQkgICAgIlxcfCIgb3JnLWNsb2NrLXN0cmluZyAiXFwpXFwpPyINCgkJICAg ICIgKlxcKFtbPF1bMC05XVxcezRcXH0tWzAtOV1cXHsyXFx9LVswLTldXFx7MlxcfSA/W15dXHJc bj5dKj9bXT5dXFx8PCUlKFteXHJcbj5dKj5cXCkiKQ0KCSAgICBvcmctYWxsLXRpbWUta2V5d29y ZHMNCgkgICAgKG1hcGNhciAobGFtYmRhICh3KSAoc3Vic3RyaW5nIHcgMCAtMSkpDQoJCSAgICAo bGlzdCBvcmctc2NoZWR1bGVkLXN0cmluZyBvcmctZGVhZGxpbmUtc3RyaW5nDQoJCQkgIG9yZy1j bG9jay1zdHJpbmcgb3JnLWNsb3NlZC1zdHJpbmcpKSkNCiAgICAgIChzZXRxIG9yZy1vdGEgbmls KQ0KICAgICAgKG9yZy1jb21wdXRlLWxhdGV4LWFuZC1yZWxhdGVkLXJlZ2V4cCkpKSkNCg0KKGRl ZnVuIG9yZy1maWxlLWNvbnRlbnRzIChmaWxlICZvcHRpb25hbCBub2Vycm9yKQ0KICAiUmV0dXJu IHRoZSBjb250ZW50cyBvZiBGSUxFLCBhcyBhIHN0cmluZy4iDQogIChpZiAob3IgKG5vdCBmaWxl KSAobm90IChmaWxlLXJlYWRhYmxlLXAgZmlsZSkpKQ0KICAgICAgKGlmIChub3Qgbm9lcnJvcikN CgkgIChlcnJvciAiQ2Fubm90IHJlYWQgZmlsZSBcIiVzXCIiIGZpbGUpDQoJKG1lc3NhZ2UgIkNh bm5vdCByZWFkIGZpbGUgXCIlc1wiIiBmaWxlKQ0KCSIiKQ0KICAgICh3aXRoLXRlbXAtYnVmZmVy DQogICAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMgZmlsZSkNCiAgICAgIChidWZmZXItc3RyaW5n KSkpKQ0KDQooZGVmdW4gb3JnLWV4dHJhY3QtbG9nLXN0YXRlLXNldHRpbmdzICh4KQ0KICAiRXh0 cmFjdCB0aGUgbG9nIHN0YXRlIHNldHRpbmcgZnJvbSBhIFRPRE8ga2V5d29yZCBzdHJpbmcuDQpU aGlzIHdpbGwgZXh0cmFjdCBpbmZvIGZyb20gYSBzdHJpbmcgbGlrZSBcIldBSVQod0AvISlcIi4i DQogIChsZXQgKGt3IGtleSBsb2cxIGxvZzIpDQogICAgKHdoZW4gKHN0cmluZy1tYXRjaCAiXlxc KC4qP1xcKVxcKD86KFxcKFteIUAvXVxcKT9cXChbIUBdXFwpP1xcKD86L1xcKFshQF1cXClcXCk/ KVxcKT8kIiB4KQ0KICAgICAgKHNldHEga3cgKG1hdGNoLXN0cmluZyAxIHgpDQoJICAgIGtleSAo YW5kIChtYXRjaC1lbmQgMikgKG1hdGNoLXN0cmluZyAyIHgpKQ0KCSAgICBsb2cxIChhbmQgKG1h dGNoLWVuZCAzKSAobWF0Y2gtc3RyaW5nIDMgeCkpDQoJICAgIGxvZzIgKGFuZCAobWF0Y2gtZW5k IDQpIChtYXRjaC1zdHJpbmcgNCB4KSkpDQogICAgICAoYW5kIChvciBsb2cxIGxvZzIpDQoJICAg KGxpc3Qga3cNCgkJIChhbmQgbG9nMSAoaWYgKGVxdWFsIGxvZzEgIiEiKSAndGltZSAnbm90ZSkp DQoJCSAoYW5kIGxvZzIgKGlmIChlcXVhbCBsb2cyICIhIikgJ3RpbWUgJ25vdGUpKSkpKSkpDQoN CihkZWZ1biBvcmctcmVtb3ZlLWtleXdvcmQta2V5cyAobGlzdCkNCiAgIlJlbW92ZSBhIHBhaXIg b2YgcGFyZW50aGVzaXMgYXQgdGhlIGVuZCBvZiBlYWNoIHN0cmluZyBpbiBMSVNULiINCiAgKG1h cGNhciAobGFtYmRhICh4KQ0KCSAgICAoaWYgKHN0cmluZy1tYXRjaCAiKC4qKSQiIHgpDQoJCShz dWJzdHJpbmcgeCAwIChtYXRjaC1iZWdpbm5pbmcgMCkpDQoJICAgICAgeCkpDQoJICBsaXN0KSkN Cg0KKGRlZnVuIG9yZy1hc3NpZ24tZmFzdC1rZXlzIChhbGlzdCkNCiAgIkFzc2lnbiBmYXN0IGtl eXMgdG8gYSBrZXl3b3JkLWtleSBhbGlzdC4NClJlc3BlY3Qga2V5cyB0aGF0IGFyZSBhbHJlYWR5 IHRoZXJlLiINCiAgKGxldCAobmV3IGUgKGFsdCA/MCkpDQogICAgKHdoaWxlIChzZXRxIGUgKHBv cCBhbGlzdCkpDQogICAgICAoaWYgKG9yIChtZW1xIChjYXIgZSkgJyg6bmV3bGluZSA6Z3JvdXB0 YWdzIDplbmRncm91cCA6c3RhcnRncm91cCkpDQoJICAgICAgKGNkciBlKSkgOzsgS2V5IGFscmVh ZHkgYXNzaWduZWQuDQoJICAocHVzaCBlIG5ldykNCgkobGV0ICgoY2xpc3QgKHN0cmluZy10by1s aXN0IChkb3duY2FzZSAoY2FyIGUpKSkpDQoJICAgICAgKHVzZWQgKGFwcGVuZCBuZXcgYWxpc3Qp KSkNCgkgICh3aGVuICg9IChjYXIgY2xpc3QpID9AKQ0KCSAgICAocG9wIGNsaXN0KSkNCgkgICh3 aGlsZSAoYW5kIGNsaXN0IChyYXNzb2MgKGNhciBjbGlzdCkgdXNlZCkpDQoJICAgIChwb3AgY2xp c3QpKQ0KCSAgKHVubGVzcyBjbGlzdA0KCSAgICAod2hpbGUgKHJhc3NvYyBhbHQgdXNlZCkNCgkg ICAgICAoaW5jZiBhbHQpKSkNCgkgIChwdXNoIChjb25zIChjYXIgZSkgKG9yIChjYXIgY2xpc3Qp IGFsdCkpIG5ldykpKSkNCiAgICAobnJldmVyc2UgbmV3KSkpDQoNCjs7OyBTb21lIHZhcmlhYmxl cyB1c2VkIGluIHZhcmlvdXMgcGxhY2VzDQoNCihkZWZ2YXIgb3JnLXdpbmRvdy1jb25maWd1cmF0 aW9uIG5pbA0KICAiVXNlZCBpbiB2YXJpb3VzIHBsYWNlcyB0byBzdG9yZSBhIHdpbmRvdyBjb25m aWd1cmF0aW9uLiIpDQooZGVmdmFyIG9yZy1zZWxlY3RlZC13aW5kb3cgbmlsDQogICJVc2VkIGlu IHZhcmlvdXMgcGxhY2VzIHRvIHN0b3JlIGEgd2luZG93IGNvbmZpZ3VyYXRpb24uIikNCihkZWZ2 YXIgb3JnLWZpbmlzaC1mdW5jdGlvbiBuaWwNCiAgIkZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVu IGBDLWMgQy1jJyBpcyB1c2VkLg0KVGhpcyBpcyBmb3IgZ2V0dGluZyBvdXQgb2Ygc3BlY2lhbCBi dWZmZXJzIGxpa2UgY2FwdHVyZS4iKQ0KDQoNCjs7IEZJWE1FOiBPY2Nhc2lvbmFsbHkgY2hlY2sg YnkgY29tbWVudGluZyB0aGVzZSwgdG8gbWFrZSBzdXJlDQo7OyAgICAgICAgbm8gb3RoZXIgZnVu Y3Rpb25zIHVzZXMgdGhlc2UsIGZvcmdldHRpbmcgdG8gbGV0LWJpbmQgdGhlbS4NCihvcmctbm8t d2FybmluZ3MgKGRlZnZhciBlbnRyeSkpIDs7IHVucHJlZml4ZWQsIGZyb20gY2FsZW5kYXIuZWwN CihkZWZ2YXIgb3JnLWxhc3Qtc3RhdGUpDQoob3JnLW5vLXdhcm5pbmdzIChkZWZ2YXIgZGF0ZSkp IDs7IHVucHJlZml4ZWQsIGZyb20gY2FsZW5kYXIuZWwNCg0KOzsgRGVmaW5lZCBzb21ld2hlcmUg aW4gdGhpcyBmaWxlLCBidXQgdXNlZCBiZWZvcmUgZGVmaW5pdGlvbi4NCihkZWZ2YXIgb3JnLWVu dGl0aWVzKSAgICAgOzsgZGVmaW5lZCBpbiBvcmctZW50aXRpZXMuZWwNCihkZWZ2YXIgb3JnLXN0 cnVjdC1tZW51KQ0KKGRlZnZhciBvcmctb3JnLW1lbnUpDQooZGVmdmFyIG9yZy10YmwtbWVudSkN Cg0KOzs7OyBEZWZpbmUgdGhlIE9yZy1tb2RlDQoNCjs7IFdlIHVzZSBhIGJlZm9yZS1jaGFuZ2Ug ZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSB0YWJsZSBtaWdodCBuZWVkDQo7OyBhbiB1cGRhdGUuDQoo ZGVmdmFyIG9yZy10YWJsZS1tYXktbmVlZC11cGRhdGUgdA0KICAiSW5kaWNhdGVzIHRoYXQgYSB0 YWJsZSBtaWdodCBuZWVkIGFuIHVwZGF0ZS4NClRoaXMgdmFyaWFibGUgaXMgc2V0IGJ5IGBvcmct YmVmb3JlLWNoYW5nZS1mdW5jdGlvbicuDQpgb3JnLXRhYmxlLWFsaWduJyBzZXRzIGl0IGJhY2sg dG8gbmlsLiIpDQooZGVmdW4gb3JnLWJlZm9yZS1jaGFuZ2UtZnVuY3Rpb24gKGJlZyBlbmQpDQog ICJFdmVyeSBjaGFuZ2UgaW5kaWNhdGVzIHRoYXQgYSB0YWJsZSBtaWdodCBuZWVkIGFuIHVwZGF0 ZS4iDQogIChzZXRxIG9yZy10YWJsZS1tYXktbmVlZC11cGRhdGUgdCkpDQooZGVmdmFyIG9yZy1t b2RlLW1hcCkNCihkZWZ2YXIgb3JnLWluaGliaXQtc3RhcnR1cC12aXNpYmlsaXR5LXN0dWZmIG5p bCkgOyBEeW5hbWljYWxseS1zY29wZWQgcGFyYW0uDQooZGVmdmFyIG9yZy1hZ2VuZGEta2VlcC1t b2RlcyBuaWwpICAgICAgOyBEeW5hbWljYWxseS1zY29wZWQgcGFyYW0uDQooZGVmdmFyIG9yZy1p bmhpYml0LWxvZ2dpbmcgbmlsKSAgICAgICAgOyBEeW5hbWljYWxseS1zY29wZWQgcGFyYW0uDQoo ZGVmdmFyIG9yZy1pbmhpYml0LWJsb2NraW5nIG5pbCkgICAgICAgOyBEeW5hbWljYWxseS1zY29w ZWQgcGFyYW0uDQooZGVmdmFyIG9yZy10YWJsZS1idWZmZXItaXMtYW4gbmlsKQ0KDQooZGVmdmFy IGJpZGktcGFyYWdyYXBoLWRpcmVjdGlvbikNCihkZWZ2YXIgYnVmZmVyLWZhY2UtbW9kZS1mYWNl KQ0KDQoocmVxdWlyZSAnb3V0bGluZSkNCihpZiAoYW5kIChub3QgKGtleW1hcHAgb3V0bGluZS1t b2RlLW1hcCkpIChmZWF0dXJlcCAnYWxsb3V0KSkNCiAgICAoZXJyb3IgIkNvbmZsaWN0IHdpdGgg b3V0ZGF0ZWQgdmVyc2lvbiBvZiBhbGxvdXQuZWwuICBMb2FkIG9yZy5lbCBiZWZvcmUgYWxsb3V0 LmVsLCBvciB1cGdyYWRlIHRvIG5ld2VyIGFsbG91dCwgZm9yIGV4YW1wbGUgYnkgc3dpdGNoaW5n IHRvIEVtYWNzIDIyIikpDQoocmVxdWlyZSAnbm91dGxpbmUgIm5vdXRsaW5lIiAnbm9lcnJvcikg Ozsgc3RvY2sgWEVtYWNzIGRvZXMgbm90IGhhdmUgaXQNCg0KOzsgT3RoZXIgc3R1ZmYgd2UgbmVl ZC4NCihyZXF1aXJlICd0aW1lLWRhdGUpDQoodW5sZXNzIChmYm91bmRwICd0aW1lLXN1YnRyYWN0 KSAoZGVmYWxpYXMgJ3RpbWUtc3VidHJhY3QgJ3N1YnRyYWN0LXRpbWUpKQ0KKHJlcXVpcmUgJ2Vh c3ltZW51KQ0KKHJlcXVpcmUgJ292ZXJsYXkpDQoNCjs7IChyZXF1aXJlICdvcmctbWFjcykgbW92 ZWQgaGlnaGVyIHVwIGluIHRoZSBmaWxlIGJlZm9yZSBpdCBpcyBmaXJzdCB1c2VkDQoocmVxdWly ZSAnb3JnLWVudGl0aWVzKQ0KOzsgKHJlcXVpcmUgJ29yZy1jb21wYXQpIG1vdmVkIGhpZ2hlciB1 cCBpbiB0aGUgZmlsZSBiZWZvcmUgaXQgaXMgZmlyc3QgdXNlZA0KKHJlcXVpcmUgJ29yZy1mYWNl cykNCihyZXF1aXJlICdvcmctbGlzdCkNCihyZXF1aXJlICdvcmctcGNvbXBsZXRlKQ0KKHJlcXVp cmUgJ29yZy1zcmMpDQoocmVxdWlyZSAnb3JnLWZvb3Rub3RlKQ0KKHJlcXVpcmUgJ29yZy1tYWNy bykNCg0KOzsgYmFiZWwNCihyZXF1aXJlICdvYikNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZpbmUt ZGVyaXZlZC1tb2RlIG9yZy1tb2RlIG91dGxpbmUtbW9kZSAiT3JnIg0KICAiT3V0bGluZS1iYXNl ZCBub3RlcyBtYW5hZ2VtZW50IGFuZCBvcmdhbml6ZXIsIGFsaWFzDQpcIkNhcnN0ZW4ncyBvdXRs aW5lLW1vZGUgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZXZlcnl0aGluZy5cIg0KDQpPcmctbW9kZSBk ZXZlbG9wcyBvcmdhbml6YXRpb25hbCB0YXNrcyBhcm91bmQgYSBOT1RFUyBmaWxlIHdoaWNoDQpj b250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBwcm9qZWN0cyBhcyBwbGFpbiB0ZXh0LiAgT3JnLW1v ZGUgaXMNCmltcGxlbWVudGVkIG9uIHRvcCBvZiBvdXRsaW5lLW1vZGUsIHdoaWNoIGlzIGlkZWFs IHRvIGtlZXAgdGhlIGNvbnRlbnQNCm9mIGxhcmdlIGZpbGVzIHdlbGwgc3RydWN0dXJlZC4gIEl0 IHN1cHBvcnRzIFRvRG8gaXRlbXMsIGRlYWRsaW5lcyBhbmQNCnRpbWUgc3RhbXBzLCB3aGljaCBt YWdpY2FsbHkgYXBwZWFyIGluIHRoZSBkaWFyeSBsaXN0aW5nIG9mIHRoZSBFbWFjcw0KY2FsZW5k YXIuICBUYWJsZXMgYXJlIGVhc2lseSBjcmVhdGVkIHdpdGggYSBidWlsdC1pbiB0YWJsZSBlZGl0 b3IuDQpQbGFpbiB0ZXh0IFVSTC1saWtlIGxpbmtzIGNvbm5lY3QgdG8gd2Vic2l0ZXMsIGVtYWls cyAoVk0pLCBVc2VuZXQNCm1lc3NhZ2VzIChHbnVzKSwgQkJEQiBlbnRyaWVzLCBhbmQgYW55IGZp bGVzIHJlbGF0ZWQgdG8gdGhlIHByb2plY3QuDQpGb3IgcHJpbnRpbmcgYW5kIHNoYXJpbmcgb2Yg bm90ZXMsIGFuIE9yZy1tb2RlIGZpbGUgKG9yIGEgcGFydCBvZiBpdCkNCmNhbiBiZSBleHBvcnRl ZCBhcyBhIHN0cnVjdHVyZWQgQVNDSUkgb3IgSFRNTCBmaWxlLg0KDQpUaGUgZm9sbG93aW5nIGNv bW1hbmRzIGFyZSBhdmFpbGFibGU6DQoNClxce29yZy1tb2RlLW1hcH0iDQoNCiAgOzsgR2V0IHJp ZCBvZiBPdXRsaW5lIG1lbnVzLCB0aGV5IGFyZSBub3QgbmVlZGVkDQogIDs7IE5lZWQgdG8gZG8g dGhpcyBoZXJlIGJlY2F1c2UgZGVmaW5lLWRlcml2ZWQtbW9kZSBzZXRzIHVwDQogIDs7IHRoZSBr ZXltYXAgc28gbGF0ZS4gIFN0aWxsLCBpdCBpcyBhIHdhc3RlIHRvIGNhbGwgdGhpcyBlYWNoIHRp bWUNCiAgOzsgd2Ugc3dpdGNoIGFub3RoZXIgYnVmZmVyIGludG8gb3JnLW1vZGUuDQogIChpZiAo ZmVhdHVyZXAgJ3hlbWFjcykNCiAgICAgICh3aGVuIChib3VuZHAgJ291dGxpbmUtbW9kZS1tZW51 LWhlYWRpbmcpDQoJOzsgQXNzdW1lIHRoaXMgaXMgR3JlZydzIHBvcnQsIGl0IHVzZXMgZWFzeW1l bnUNCgkoZWFzeS1tZW51LXJlbW92ZSBvdXRsaW5lLW1vZGUtbWVudS1oZWFkaW5nKQ0KCShlYXN5 LW1lbnUtcmVtb3ZlIG91dGxpbmUtbW9kZS1tZW51LXNob3cpDQoJKGVhc3ktbWVudS1yZW1vdmUg b3V0bGluZS1tb2RlLW1lbnUtaGlkZSkpDQogICAgKGRlZmluZS1rZXkgb3JnLW1vZGUtbWFwIFtt ZW51LWJhciBoZWFkaW5nc10gJ3VuZGVmaW5lZCkNCiAgICAoZGVmaW5lLWtleSBvcmctbW9kZS1t YXAgW21lbnUtYmFyIGhpZGVdICd1bmRlZmluZWQpDQogICAgKGRlZmluZS1rZXkgb3JnLW1vZGUt bWFwIFttZW51LWJhciBzaG93XSAndW5kZWZpbmVkKSkNCg0KICAob3JnLWxvYWQtbW9kdWxlcy1t YXliZSkNCiAgKGVhc3ktbWVudS1hZGQgb3JnLW9yZy1tZW51KQ0KICAoZWFzeS1tZW51LWFkZCBv cmctdGJsLW1lbnUpDQogIChvcmctaW5zdGFsbC1hZ2VuZGEtZmlsZXMtbWVudSkNCiAgKGlmIG9y Zy1kZXNjcmlwdGl2ZS1saW5rcyAoYWRkLXRvLWludmlzaWJpbGl0eS1zcGVjICcob3JnLWxpbmsp KSkNCiAgKGFkZC10by1pbnZpc2liaWxpdHktc3BlYyAnKG9yZy1jd2lkdGgpKQ0KICAoYWRkLXRv LWludmlzaWJpbGl0eS1zcGVjICcob3JnLWhpZGUtYmxvY2sgLiB0KSkNCiAgKHdoZW4gKGZlYXR1 cmVwICd4ZW1hY3MpDQogICAgKG9yZy1zZXQtbG9jYWwgJ2xpbmUtbW92ZS1pZ25vcmUtaW52aXNp YmxlIHQpKQ0KICAob3JnLXNldC1sb2NhbCAnb3V0bGluZS1yZWdleHAgb3JnLW91dGxpbmUtcmVn ZXhwKQ0KICAob3JnLXNldC1sb2NhbCAnb3V0bGluZS1sZXZlbCAnb3JnLW91dGxpbmUtbGV2ZWwp DQogIChzZXRxIGJpZGktcGFyYWdyYXBoLWRpcmVjdGlvbiAnbGVmdC10by1yaWdodCkNCiAgKHdo ZW4gKGFuZCBvcmctZWxsaXBzaXMNCiAgICAgICAgICAgICAoZmJvdW5kcCAnc2V0LWRpc3BsYXkt dGFibGUtc2xvdCkgKGJvdW5kcCAnYnVmZmVyLWRpc3BsYXktdGFibGUpDQoJICAgICAoZmJvdW5k cCAnbWFrZS1nbHlwaC1jb2RlKSkNCiAgICAodW5sZXNzIG9yZy1kaXNwbGF5LXRhYmxlDQogICAg ICAoc2V0cSBvcmctZGlzcGxheS10YWJsZSAobWFrZS1kaXNwbGF5LXRhYmxlKSkpDQogICAgKHNl dC1kaXNwbGF5LXRhYmxlLXNsb3QNCiAgICAgb3JnLWRpc3BsYXktdGFibGUgNA0KICAgICAodmNv bmNhdCAobWFwY2FyDQoJICAgICAgIChsYW1iZGEgKGMpIChtYWtlLWdseXBoLWNvZGUgYyAoYW5k IChub3QgKHN0cmluZ3Agb3JnLWVsbGlwc2lzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy1lbGxpcHNpcykpKQ0KCSAgICAgICAoaWYgKHN0 cmluZ3Agb3JnLWVsbGlwc2lzKSBvcmctZWxsaXBzaXMgIi4uLiIpKSkpDQogICAgKHNldHEgYnVm ZmVyLWRpc3BsYXktdGFibGUgb3JnLWRpc3BsYXktdGFibGUpKQ0KICAob3JnLXNldC1yZWdleHBz LWFuZC1vcHRpb25zLWZvci10YWdzKQ0KICAob3JnLXNldC1yZWdleHBzLWFuZC1vcHRpb25zKQ0K ICAob3JnLXNldC1mb250LWxvY2stZGVmYXVsdHMpDQogICh3aGVuIChhbmQgb3JnLXRhZy1mYWNl cyAobm90IG9yZy10YWdzLXNwZWNpYWwtZmFjZXMtcmUpKQ0KICAgIDs7IHRhZyBmYWNlcyBzZXQg b3V0c2lkZSBjdXN0b21pemUuLi4uIGZvcmNlIGluaXRpYWxpemF0aW9uLg0KICAgIChvcmctc2V0 LXRhZy1mYWNlcyAnb3JnLXRhZy1mYWNlcyBvcmctdGFnLWZhY2VzKSkNCiAgOzsgQ2FsYyBlbWJl ZGRlZA0KICAob3JnLXNldC1sb2NhbCAnY2FsYy1lbWJlZGRlZC1vcGVuLW1vZGUgIiMgIikNCiAg OzsgTW9kaWZ5IGEgZmV3IHN5bnRheCBlbnRyaWVzDQogIChtb2RpZnktc3ludGF4LWVudHJ5ID9A ICJ3IikNCiAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1wiICJcIiIpDQogIChtb2RpZnktc3ludGF4 LWVudHJ5ID9cXCAiXyIpDQogIChtb2RpZnktc3ludGF4LWVudHJ5ID9+ICJfIikNCiAgKGlmIG9y Zy1zdGFydHVwLXRydW5jYXRlZCAoc2V0cSB0cnVuY2F0ZS1saW5lcyB0KSkNCiAgKHdoZW4gb3Jn LXN0YXJ0dXAtaW5kZW50ZWQgKHJlcXVpcmUgJ29yZy1pbmRlbnQpIChvcmctaW5kZW50LW1vZGUg MSkpDQogIChvcmctc2V0LWxvY2FsICdmb250LWxvY2stdW5mb250aWZ5LXJlZ2lvbi1mdW5jdGlv bg0KCQkgJ29yZy11bmZvbnRpZnktcmVnaW9uKQ0KICA7OyBBY3RpdmF0ZSBiZWZvcmUtY2hhbmdl LWZ1bmN0aW9uDQogIChvcmctc2V0LWxvY2FsICdvcmctdGFibGUtbWF5LW5lZWQtdXBkYXRlIHQp DQogIChvcmctYWRkLWhvb2sgJ2JlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zICdvcmctYmVmb3JlLWNo YW5nZS1mdW5jdGlvbiBuaWwNCgkJJ2xvY2FsKQ0KICA7OyBDaGVjayBmb3IgcnVubmluZyBjbG9j ayBiZWZvcmUga2lsbGluZyBhIGJ1ZmZlcg0KICAob3JnLWFkZC1ob29rICdraWxsLWJ1ZmZlci1o b29rICdvcmctY2hlY2stcnVubmluZy1jbG9jayBuaWwgJ2xvY2FsKQ0KICA7OyBJbml0aWFsaXpl IG1hY3JvcyB0ZW1wbGF0ZXMuDQogIChvcmctbWFjcm8taW5pdGlhbGl6ZS10ZW1wbGF0ZXMpDQog IDs7IEluaXRpYWxpemUgcmFkaW8gdGFyZ2V0cy4NCiAgKG9yZy11cGRhdGUtcmFkaW8tdGFyZ2V0 LXJlZ2V4cCkNCiAgOzsgSW5kZW50YXRpb24uDQogIChvcmctc2V0LWxvY2FsICdpbmRlbnQtbGlu ZS1mdW5jdGlvbiAnb3JnLWluZGVudC1saW5lKQ0KICAob3JnLXNldC1sb2NhbCAnaW5kZW50LXJl Z2lvbi1mdW5jdGlvbiAnb3JnLWluZGVudC1yZWdpb24pDQogIDs7IEZpbGxpbmcgYW5kIGF1dG8t ZmlsbGluZy4NCiAgKG9yZy1zZXR1cC1maWxsaW5nKQ0KICA7OyBDb21tZW50cy4NCiAgKG9yZy1z ZXR1cC1jb21tZW50cy1oYW5kbGluZykNCiAgOzsgQmVnaW5uaW5nL2VuZCBvZiBkZWZ1bg0KICAo b3JnLXNldC1sb2NhbCAnYmVnaW5uaW5nLW9mLWRlZnVuLWZ1bmN0aW9uICdvcmctYmFja3dhcmQt ZWxlbWVudCkNCiAgKG9yZy1zZXQtbG9jYWwgJ2VuZC1vZi1kZWZ1bi1mdW5jdGlvbg0KCQkgKGxh bWJkYSAoKQ0KCQkgICAoaWYgKG5vdCAob3JnLWF0LWhlYWRpbmctcCkpDQoJCSAgICAgICAob3Jn LWZvcndhcmQtZWxlbWVudCkNCgkJICAgICAob3JnLWZvcndhcmQtZWxlbWVudCkNCgkJICAgICAo Zm9yd2FyZC1jaGFyIC0xKSkpKQ0KICA7OyBOZXh0IGVycm9yIGZvciBzcGFyc2UgdHJlZXMNCiAg KG9yZy1zZXQtbG9jYWwgJ25leHQtZXJyb3ItZnVuY3Rpb24gJ29yZy1vY2N1ci1uZXh0LW1hdGNo KQ0KICA7OyBNYWtlIHN1cmUgZGVwZW5kZW5jZSBzdHVmZiB3b3JrcyByZWxpYWJseSwgZXZlbiBm b3IgdXNlcnMgd2hvIHNldCBpdA0KICA7OyB0b28gbGF0ZSA6LSgNCiAgKGlmIG9yZy1lbmZvcmNl LXRvZG8tZGVwZW5kZW5jaWVzDQogICAgICAoYWRkLWhvb2sgJ29yZy1ibG9ja2VyLWhvb2sNCgkJ J29yZy1ibG9jay10b2RvLWZyb20tY2hpbGRyZW4tb3Itc2libGluZ3Mtb3ItcGFyZW50KQ0KICAg IChyZW1vdmUtaG9vayAnb3JnLWJsb2NrZXItaG9vaw0KCQkgJ29yZy1ibG9jay10b2RvLWZyb20t Y2hpbGRyZW4tb3Itc2libGluZ3Mtb3ItcGFyZW50KSkNCiAgKGlmIG9yZy1lbmZvcmNlLXRvZG8t Y2hlY2tib3gtZGVwZW5kZW5jaWVzDQogICAgICAoYWRkLWhvb2sgJ29yZy1ibG9ja2VyLWhvb2sN CgkJJ29yZy1ibG9jay10b2RvLWZyb20tY2hlY2tib3hlcykNCiAgICAocmVtb3ZlLWhvb2sgJ29y Zy1ibG9ja2VyLWhvb2sNCgkJICdvcmctYmxvY2stdG9kby1mcm9tLWNoZWNrYm94ZXMpKQ0KDQog IDs7IEFsaWduIG9wdGlvbnMgbGluZXMNCiAgKG9yZy1zZXQtbG9jYWwNCiAgICdhbGlnbi1tb2Rl LXJ1bGVzLWxpc3QNCiAgICcoKG9yZy1pbi1idWZmZXItc2V0dGluZ3MNCiAgICAgIChyZWdleHAg LiAiXiNcXCtbQS1aX10rOlxcKFxccy0qXFwpXFxTLSsiKQ0KICAgICAgKG1vZGVzIC4gJyhvcmct bW9kZSkpKSkpDQoNCiAgOzsgSW1lbnUNCiAgKG9yZy1zZXQtbG9jYWwgJ2ltZW51LWNyZWF0ZS1p bmRleC1mdW5jdGlvbg0KCQkgJ29yZy1pbWVudS1nZXQtdHJlZSkNCg0KICA7OyBNYWtlIGlzZWFy Y2ggcmV2ZWFsIGNvbnRleHQNCiAgKGlmIChvciAoZmVhdHVyZXAgJ3hlbWFjcykNCgkgIChub3Qg KGJvdW5kcCAnb3V0bGluZS1pc2VhcmNoLW9wZW4taW52aXNpYmxlLWZ1bmN0aW9uKSkpDQogICAg ICA7OyBFbWFjcyAyMSBhbmQgWEVtYWNzIG1ha2UgdXNlIG9mIHRoZSBob29rDQogICAgICAob3Jn LWFkZC1ob29rICdpc2VhcmNoLW1vZGUtZW5kLWhvb2sgJ29yZy1pc2VhcmNoLWVuZCAnYXBwZW5k ICdsb2NhbCkNCiAgICA7OyBFbWFjcyAyMiBkZWFscyB3aXRoIHRoaXMgdGhyb3VnaCBhIHNwZWNp YWwgdmFyaWFibGUNCiAgICAob3JnLXNldC1sb2NhbCAnb3V0bGluZS1pc2VhcmNoLW9wZW4taW52 aXNpYmxlLWZ1bmN0aW9uDQoJCSAgIChsYW1iZGEgKCZyZXN0IGlnbm9yZSkgKG9yZy1zaG93LWNv bnRleHQgJ2lzZWFyY2gpKSkpDQoNCiAgOzsgU2V0dXAgdGhlIHBjb21wbGV0ZSBob29rcw0KICAo c2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdwY29tcGxldGUtY29tbWFuZC1jb21wbGV0aW9uLWZ1 bmN0aW9uKQ0KICAgICAgICdvcmctcGNvbXBsZXRlLWluaXRpYWwpDQogIChzZXQgKG1ha2UtbG9j YWwtdmFyaWFibGUgJ3Bjb21wbGV0ZS1jb21tYW5kLW5hbWUtZnVuY3Rpb24pDQogICAgICAgJ29y Zy1jb21tYW5kLWF0LXBvaW50KQ0KICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdwY29tcGxl dGUtZGVmYXVsdC1jb21wbGV0aW9uLWZ1bmN0aW9uKQ0KICAgICAgICdpZ25vcmUpDQogIChzZXQg KG1ha2UtbG9jYWwtdmFyaWFibGUgJ3Bjb21wbGV0ZS1wYXJzZS1hcmd1bWVudHMtZnVuY3Rpb24p DQogICAgICAgJ29yZy1wYXJzZS1hcmd1bWVudHMpDQogIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFi bGUgJ3Bjb21wbGV0ZS10ZXJtaW5hdGlvbi1zdHJpbmcpICIiKQ0KICAod2hlbiAoPj0gZW1hY3Mt bWFqb3ItdmVyc2lvbiAyMykNCiAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdidWZmZXIt ZmFjZS1tb2RlLWZhY2UpICdvcmctZGVmYXVsdCkpDQoNCiAgOzsgSWYgZW1wdHkgZmlsZSB0aGF0 IGRpZCBub3QgdHVybiBvbiBvcmctbW9kZSBhdXRvbWF0aWNhbGx5LCBtYWtlIGl0IHRvLg0KICAo aWYgKGFuZCBvcmctaW5zZXJ0LW1vZGUtbGluZS1pbi1lbXB0eS1maWxlDQoJICAgKG9yZy1jYWxs ZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpDQoJICAgKD0gKHBvaW50LW1pbikgKHBvaW50LW1heCkp KQ0KICAgICAgKGluc2VydCAiIyAgICAtKi0gbW9kZTogb3JnIC0qLVxuXG4iKSkNCiAgKHVubGVz cyBvcmctaW5oaWJpdC1zdGFydHVwDQogICAgKG9yZy11bm1vZGlmaWVkDQogICAgIChhbmQgb3Jn LXN0YXJ0dXAtd2l0aC1iZWFtZXItbW9kZSAob3JnLWJlYW1lci1tb2RlKSkNCiAgICAgKHdoZW4g b3JnLXN0YXJ0dXAtYWxpZ24tYWxsLXRhYmxlcw0KICAgICAgIChvcmctdGFibGUtbWFwLXRhYmxl cyAnb3JnLXRhYmxlLWFsaWduICdxdWlldGx5KSkNCiAgICAgKHdoZW4gb3JnLXN0YXJ0dXAtd2l0 aC1pbmxpbmUtaW1hZ2VzDQogICAgICAgKG9yZy1kaXNwbGF5LWlubGluZS1pbWFnZXMpKQ0KICAg ICAod2hlbiBvcmctc3RhcnR1cC13aXRoLWxhdGV4LXByZXZpZXcNCiAgICAgICAob3JnLXByZXZp ZXctbGF0ZXgtZnJhZ21lbnQpKQ0KICAgICAodW5sZXNzIG9yZy1pbmhpYml0LXN0YXJ0dXAtdmlz aWJpbGl0eS1zdHVmZg0KICAgICAgIChvcmctc2V0LXN0YXJ0dXAtdmlzaWJpbGl0eSkpKSkNCiAg OzsgVHJ5IHRvIHNldCBvcmctaGlkZSBjb3JyZWN0bHkNCiAgKGxldCAoKGZvcmVncm91bmQgKG9y Zy1maW5kLWludmlzaWJsZS1mb3JlZ3JvdW5kKSkpDQogICAgKGlmIGZvcmVncm91bmQNCiAgICAg ICAgKHNldC1mYWNlLWZvcmVncm91bmQgJ29yZy1oaWRlIGZvcmVncm91bmQpKSkpDQoNCjs7IFVw ZGF0ZSBgY3VzdG9taXplLXBhY2thZ2UtZW1hY3MtdmVyc2lvbi1hbGlzdCcNCihhZGQtdG8tbGlz dCAnY3VzdG9taXplLXBhY2thZ2UtZW1hY3MtdmVyc2lvbi1hbGlzdA0KCSAgICAgJyhPcmcgKCI2 LjIxYiIgLiAiMjMuMSIpICAoIjYuMzN4IiAuICIyMy4yIikNCgkJICAgKCI3LjguMTEiIC4gIjI0 LjEiKSAoIjcuOS40IiAuICIyNC4zIikNCgkJICAgKCI4LjIuNiIgLiAiMjQuNCIpKSkNCg0KKGRl ZnZhciBvcmctbW9kZS10cmFuc3Bvc2Utd29yZC1zeW50YXgtdGFibGUNCiAgKGxldCAoKHN0ICht YWtlLXN5bnRheC10YWJsZSkpKQ0KICAgIChtYXBjIChsYW1iZGEoYykgKG1vZGlmeS1zeW50YXgt ZW50cnkNCgkJICAgICAgKHN0cmluZy10by1jaGFyIChjYXIgYykpICJ3IHAiIHN0KSkNCgkgIG9y Zy1lbXBoYXNpcy1hbGlzdCkNCiAgICBzdCkpDQoNCih3aGVuIChmYm91bmRwICdhYmJyZXYtdGFi bGUtcHV0KQ0KICAoYWJicmV2LXRhYmxlLXB1dCBvcmctbW9kZS1hYmJyZXYtdGFibGUNCgkJICAg IDpwYXJlbnRzIChsaXN0IHRleHQtbW9kZS1hYmJyZXYtdGFibGUpKSkNCg0KKHB1dCAnb3JnLW1v ZGUgJ2ZseXNwZWxsLW1vZGUtcHJlZGljYXRlICdvcmctbW9kZS1mbHlzcGVsbC12ZXJpZnkpDQoN CihkZWZ1biBvcmctZmluZC1pbnZpc2libGUtZm9yZWdyb3VuZCAoKQ0KICAobGV0ICgoY2FuZGlk YXRlcyAocmVtb3ZlDQoJCSAgICAgInVuc3BlY2lmaWVkLWJnIg0KCQkgICAgIChuY29uYw0KCQkg ICAgICAobGlzdCAoZmFjZS1iYWNrZ3JvdW5kICdkZWZhdWx0KQ0KCQkJICAgIChmYWNlLWJhY2tn cm91bmQgJ29yZy1kZWZhdWx0KSkNCgkJICAgICAgKG1hcGNhcg0KCQkgICAgICAgKGxhbWJkYSAo YWxpc3QpDQoJCQkgKHdoZW4gKGJvdW5kcCBhbGlzdCkNCgkJCSAgIChjZHIgKGFzc29jICdiYWNr Z3JvdW5kLWNvbG9yIChzeW1ib2wtdmFsdWUgYWxpc3QpKSkpKQ0KCQkgICAgICAgJyhkZWZhdWx0 LWZyYW1lLWFsaXN0IGluaXRpYWwtZnJhbWUtYWxpc3Qgd2luZG93LXN5c3RlbS1kZWZhdWx0LWZy YW1lLWFsaXN0KSkNCgkJICAgICAgKGxpc3QgKGZhY2UtZm9yZWdyb3VuZCAnb3JnLWhpZGUpKSkp KSkNCiAgICAoY2FyIChyZW1vdmUgbmlsIGNhbmRpZGF0ZXMpKSkpDQoNCihkZWZ1biBvcmctY3Vy cmVudC10aW1lICgmb3B0aW9uYWwgcm91bmRpbmctbWludXRlcyBwYXN0KQ0KICAiQ3VycmVudCB0 aW1lLCBwb3NzaWJseSByb3VuZGVkIHRvIFJPVU5ESU5HLU1JTlVURVMuDQpXaGVuIFJPVU5ESU5H LU1JTlVURVMgaXMgbm90IGFuIGludGVnZXIsIGZhbGwgYmFjayBvbiB0aGUgY2FyIG9mDQpgb3Jn LXRpbWUtc3RhbXAtcm91bmRpbmctbWludXRlcycuICBXaGVuIFBBU1QgaXMgbm9uLW5pbCwgZW5z dXJlDQp0aGUgcm91bmRpbmcgcmV0dXJucyBhIHBhc3QgdGltZS4iDQogIChsZXQgKChyIChvciAo YW5kIChpbnRlZ2VycCByb3VuZGluZy1taW51dGVzKSByb3VuZGluZy1taW51dGVzKQ0KCSAgICAg ICAoY2FyIG9yZy10aW1lLXN0YW1wLXJvdW5kaW5nLW1pbnV0ZXMpKSkNCgkodGltZSAoZGVjb2Rl LXRpbWUpKSByZXMpDQogICAgKGlmICg8IHIgMSkNCgkoY3VycmVudC10aW1lKQ0KICAgICAgKHNl dHEgcmVzDQoJICAgIChhcHBseSAnZW5jb2RlLXRpbWUNCgkJICAgKGFwcGVuZCAobGlzdCAwICgq IHIgKGZsb29yICgrIC41ICgvIChmbG9hdCAobnRoIDEgdGltZSkpIHIpKSkpKQ0KCQkJICAgKG50 aGNkciAyIHRpbWUpKSkpDQogICAgICAoaWYgKGFuZCBwYXN0ICg8IChvcmctZmxvYXQtdGltZSAo dGltZS1zdWJ0cmFjdCAoY3VycmVudC10aW1lKSByZXMpKSAwKSkNCgkgIChzZWNvbmRzLXRvLXRp bWUgKC0gKG9yZy1mbG9hdC10aW1lIHJlcykgKCogciA2MCkpKQ0KCXJlcykpKSkNCg0KKGRlZnVu IG9yZy10b2RheSAoKQ0KICAiUmV0dXJuIHRvZGF5IGRhdGUsIGNvbnNpZGVyaW5nIGBvcmctZXh0 ZW5kLXRvZGF5LXVudGlsJy4iDQogICh0aW1lLXRvLWRheXMNCiAgICh0aW1lLXN1YnRyYWN0IChj dXJyZW50LXRpbWUpDQoJCSAgKGxpc3QgMCAoKiAzNjAwIG9yZy1leHRlbmQtdG9kYXktdW50aWwp IDApKSkpDQoNCjs7OzsgRm9udC1Mb2NrIHN0dWZmLCBpbmNsdWRpbmcgdGhlIGFjdGl2YXRvcnMN Cg0KKGRlZnZhciBvcmctbW91c2UtbWFwIChtYWtlLXNwYXJzZS1rZXltYXApKQ0KKG9yZy1kZWZr ZXkgb3JnLW1vdXNlLW1hcCBbbW91c2UtMl0gJ29yZy1vcGVuLWF0LW1vdXNlKQ0KKG9yZy1kZWZr ZXkgb3JnLW1vdXNlLW1hcCBbbW91c2UtM10gJ29yZy1maW5kLWZpbGUtYXQtbW91c2UpDQood2hl biBvcmctbW91c2UtMS1mb2xsb3dzLWxpbmsNCiAgKG9yZy1kZWZrZXkgb3JnLW1vdXNlLW1hcCBb Zm9sbG93LWxpbmtdICdtb3VzZS1mYWNlKSkNCih3aGVuIG9yZy10YWItZm9sbG93cy1saW5rDQog IChvcmctZGVma2V5IG9yZy1tb3VzZS1tYXAgWyh0YWIpXSAnb3JnLW9wZW4tYXQtcG9pbnQpDQog IChvcmctZGVma2V5IG9yZy1tb3VzZS1tYXAgIlxDLWkiICdvcmctb3Blbi1hdC1wb2ludCkpDQoN CihyZXF1aXJlICdmb250LWxvY2spDQoNCihkZWZjb25zdCBvcmctbm9uLWxpbmstY2hhcnMgIl1c dFxuXHI8PiIpDQooZGVmdmFyIG9yZy1saW5rLXR5cGVzICcoImh0dHAiICJodHRwcyIgImZ0cCIg Im1haWx0byIgImZpbGUiICJuZXdzIg0KCQkJICJzaGVsbCIgImVsaXNwIiAiZG9pIiAibWVzc2Fn ZSIpKQ0KKGRlZnZhciBvcmctbGluay10eXBlcy1yZSBuaWwNCiAgIk1hdGNoZXMgYSBsaW5rIHRo YXQgaGFzIGEgdXJsLWxpa2UgcHJlZml4IGxpa2UgXCJodHRwOlwiIikNCihkZWZ2YXIgb3JnLWxp bmstcmUtd2l0aC1zcGFjZSBuaWwNCiAgIk1hdGNoZXMgYSBsaW5rIHdpdGggc3BhY2VzLCBvcHRp b25hbCBhbmd1bGFyIGJyYWNrZXRzIGFyb3VuZCBpdC4iKQ0KKGRlZnZhciBvcmctbGluay1yZS13 aXRoLXNwYWNlMiBuaWwNCiAgIk1hdGNoZXMgYSBsaW5rIHdpdGggc3BhY2VzLCBvcHRpb25hbCBh bmd1bGFyIGJyYWNrZXRzIGFyb3VuZCBpdC4iKQ0KKGRlZnZhciBvcmctbGluay1yZS13aXRoLXNw YWNlMyBuaWwNCiAgIk1hdGNoZXMgYSBsaW5rIHdpdGggc3BhY2VzLCBvbmx5IGZvciBpbnRlcm5h bCBwYXJ0IGluIGJyYWNrZXQgbGlua3MuIikNCihkZWZ2YXIgb3JnLWFuZ2xlLWxpbmstcmUgbmls DQogICJNYXRjaGVzIGxpbmsgd2l0aCBhbmd1bGFyIGJyYWNrZXRzLCBzcGFjZXMgYXJlIGFsbG93 ZWQuIikNCihkZWZ2YXIgb3JnLXBsYWluLWxpbmstcmUgbmlsDQogICJNYXRjaGVzIHBsYWluIGxp bmssIHdpdGhvdXQgc3BhY2VzLiIpDQooZGVmdmFyIG9yZy1icmFja2V0LWxpbmstcmVnZXhwIG5p bA0KICAiTWF0Y2hlcyBhIGxpbmsgaW4gZG91YmxlIGJyYWNrZXRzLiIpDQooZGVmdmFyIG9yZy1i cmFja2V0LWxpbmstYW5hbHl0aWMtcmVnZXhwIG5pbA0KICAiUmVndWxhciBleHByZXNzaW9uIHVz ZWQgdG8gYW5hbHl6ZSBsaW5rcy4NCkhlcmUgaXMgd2hhdCB0aGUgbWF0Y2ggZ3JvdXBzIGNvbnRh aW4gYWZ0ZXIgYSBtYXRjaDoNCjE6IGh0dHA6DQoyOiBodHRwDQozOiBwYXRoDQo0OiBbZGVzY10N CjU6IGRlc2MiKQ0KKGRlZnZhciBvcmctYnJhY2tldC1saW5rLWFuYWx5dGljLXJlZ2V4cCsrIG5p bA0KICAiTGlrZSBgb3JnLWJyYWNrZXQtbGluay1hbmFseXRpYy1yZWdleHAnLCBidXQgaW5jbHVk ZSBjb2RlcmVmIGludGVybmFsIHR5cGUuIikNCihkZWZ2YXIgb3JnLWFueS1saW5rLXJlIG5pbA0K ICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFueSBsaW5rLiIpDQoNCihkZWZjb25zdCBv cmctbWF0Y2gtc2V4cC1kZXB0aCAzDQogICJOdW1iZXIgb2Ygc3RhY2tlZCBicmFjZXMgZm9yIHN1 Yi9zdXBlcnNjcmlwdCBtYXRjaGluZy4iKQ0KDQooZGVmdW4gb3JnLWNyZWF0ZS1tdWx0aWJyYWNl LXJlZ2V4cCAobGVmdCByaWdodCBuKQ0KICAiQ3JlYXRlIGEgcmVndWxhciBleHByZXNzaW9uIHdo aWNoIHdpbGwgbWF0Y2ggYSBiYWxhbmNlZCBzZXhwLg0KT3BlbmluZyBkZWxpbWl0ZXIgaXMgTEVG VCwgYW5kIGNsb3NpbmcgZGVsaW1pdGVyIGlzIFJJR0hULCBib3RoIGdpdmVuDQphcyBzaW5nbGUg Y2hhcmFjdGVyIHN0cmluZ3MuDQpUaGUgcmVnZXhwIHJldHVybmVkIHdpbGwgbWF0Y2ggdGhlIGVu dGlyZSBleHByZXNzaW9uIGluY2x1ZGluZyB0aGUNCmRlbGltaXRlcnMuICBJdCB3aWxsIGFsc28g ZGVmaW5lIGEgc2luZ2xlIGdyb3VwIHdoaWNoIGNvbnRhaW5zIHRoZQ0KbWF0Y2ggZXhjZXB0IGZv ciB0aGUgb3V0ZXJtb3N0IGRlbGltaXRlcnMuICBUaGUgbWF4aW11bSBkZXB0aCBvZg0Kc3RhY2tl ZCBkZWxpbWl0ZXJzIGlzIE4uICBFc2NhcGluZyBkZWxpbWl0ZXJzIGlzIG5vdCBwb3NzaWJsZS4i DQogIChsZXQqICgobm90aGluZyAoY29uY2F0ICJbXiIgbGVmdCByaWdodCAiXSo/IikpDQoJIChv ciAiXFx8IikNCgkgKHJlIG5vdGhpbmcpDQoJIChuZXh0IChjb25jYXQgIlxcKD86IiBub3RoaW5n IGxlZnQgbm90aGluZyByaWdodCAiXFwpKyIgbm90aGluZykpKQ0KICAgICh3aGlsZSAoPiBuIDEp DQogICAgICAoc2V0cSBuICgxLSBuKQ0KCSAgICByZSAoY29uY2F0IHJlIG9yIG5leHQpDQoJICAg IG5leHQgKGNvbmNhdCAiXFwoPzoiIG5vdGhpbmcgbGVmdCBuZXh0IHJpZ2h0ICJcXCkrIiBub3Ro aW5nKSkpDQogICAgKGNvbmNhdCBsZWZ0ICJcXCgiIHJlICJcXCkiIHJpZ2h0KSkpDQoNCihkZWZ2 YXIgb3JnLW1hdGNoLXN1YnN0cmluZy1yZWdleHANCiAgKGNvbmNhdA0KICAgIlxcKFxcUy1cXClc XChbX15dXFwpXFwoIg0KICAgIlxcKCIgKG9yZy1jcmVhdGUtbXVsdGlicmFjZS1yZWdleHAgInsi ICJ9IiBvcmctbWF0Y2gtc2V4cC1kZXB0aCkgIlxcKSINCiAgICJcXHwiDQogICAiXFwoIiAob3Jn LWNyZWF0ZS1tdWx0aWJyYWNlLXJlZ2V4cCAiKCIgIikiIG9yZy1tYXRjaC1zZXhwLWRlcHRoKSAi XFwpIg0KICAgIlxcfCINCiAgICJcXChcXCg/OlxcKlxcfFstK10/W14tKyohQCMkJV5fIFx0XHJc biw6XCI/PD5+Oy4ve309KCldK1xcKVxcKVxcKSIpDQogICJUaGUgcmVndWxhciBleHByZXNzaW9u IG1hdGNoaW5nIGEgc3ViLSBvciBzdXBlcnNjcmlwdC4iKQ0KDQooZGVmdmFyIG9yZy1tYXRjaC1z dWJzdHJpbmctd2l0aC1icmFjZXMtcmVnZXhwDQogIChjb25jYXQNCiAgICJcXChcXFMtXFwpXFwo W19eXVxcKVxcKCINCiAgICJcXCgiIChvcmctY3JlYXRlLW11bHRpYnJhY2UtcmVnZXhwICJ7IiAi fSIgb3JnLW1hdGNoLXNleHAtZGVwdGgpICJcXCkiDQogICAiXFwpIikNCiAgIlRoZSByZWd1bGFy IGV4cHJlc3Npb24gbWF0Y2hpbmcgYSBzdWItIG9yIHN1cGVyc2NyaXB0LCBmb3JjaW5nIGJyYWNl cy4iKQ0KDQooZGVmdW4gb3JnLW1ha2UtbGluay1yZWdleHBzICgpDQogICJVcGRhdGUgdGhlIGxp bmsgcmVndWxhciBleHByZXNzaW9ucy4NClRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUg dmFyaWFibGUgYG9yZy1saW5rLXR5cGVzJyBoYXMgY2hhbmdlZC4iDQogIChsZXQgKCh0eXBlcy1y ZSAocmVnZXhwLW9wdCBvcmctbGluay10eXBlcyB0KSkpDQogICAgKHNldHEgb3JnLWxpbmstdHlw ZXMtcmUNCgkgIChjb25jYXQgIlxcYCIgdHlwZXMtcmUgIjoiKQ0KCSAgb3JnLWxpbmstcmUtd2l0 aC1zcGFjZQ0KCSAgKGNvbmNhdCAiPD8iIHR5cGVzLXJlICI6Ig0KCQkgICJcXChbXiIgb3JnLW5v bi1saW5rLWNoYXJzICIgXSINCgkJICAiW14iIG9yZy1ub24tbGluay1jaGFycyAiXSoiDQoJCSAg IlteIiBvcmctbm9uLWxpbmstY2hhcnMgIiBdXFwpPj8iKQ0KCSAgb3JnLWxpbmstcmUtd2l0aC1z cGFjZTINCgkgIChjb25jYXQgIjw/IiB0eXBlcy1yZSAiOiINCgkJICAiXFwoW14iIG9yZy1ub24t bGluay1jaGFycyAiIF0iDQoJCSAgIlteXHRcblxyXSoiDQoJCSAgIlteIiBvcmctbm9uLWxpbmst Y2hhcnMgIiBdXFwpPj8iKQ0KCSAgb3JnLWxpbmstcmUtd2l0aC1zcGFjZTMNCgkgIChjb25jYXQg Ijw/IiB0eXBlcy1yZSAiOiINCgkJICAiXFwoW14iIG9yZy1ub24tbGluay1jaGFycyAiIF0iDQoJ CSAgIlteXHRcblxyXSpcXCkiKQ0KCSAgb3JnLWFuZ2xlLWxpbmstcmUNCgkgIChjb25jYXQgIjwi IHR5cGVzLXJlICI6Ig0KCQkgICJcXChbXiIgb3JnLW5vbi1saW5rLWNoYXJzICIgXSINCgkJICAi W14iIG9yZy1ub24tbGluay1jaGFycyAiXSoiDQoJCSAgIlxcKT4iKQ0KCSAgb3JnLXBsYWluLWxp bmstcmUNCgkgIChjb25jYXQNCgkgICAiXFw8IiB0eXBlcy1yZSAiOiINCgkgICAob3JnLXJlICJc XChbXiBcdFxuKCk8Pl0rXFwoPzooW1s6d29yZDpdMC05X10rKVxcfFxcKFteWzpwdW5jdDpdIFx0 XG5dXFx8L1xcKVxcKVxcKSIpKQ0KCSAgOzsJICJcXChbXl1cdFxuXHI8PigpIF0rW15dXHRcblxy PD4sLjsoKSBdXFwpIikNCgkgIG9yZy1icmFja2V0LWxpbmstcmVnZXhwDQoJICAiXFxbXFxbXFwo W15dW10rXFwpXFxdXFwoXFxbXFwoW15dW10rXFwpXFxdXFwpP1xcXSINCgkgIG9yZy1icmFja2V0 LWxpbmstYW5hbHl0aWMtcmVnZXhwDQoJICAoY29uY2F0DQoJICAgIlxcW1xcWyINCgkgICAiXFwo IiB0eXBlcy1yZSAiOlxcKT8iDQoJICAgIlxcKFteXV0rXFwpIg0KCSAgICJcXF0iDQoJICAgIlxc KFxcWyIgIlxcKFteXV0rXFwpIiAiXFxdXFwpPyINCgkgICAiXFxdIikNCgkgIG9yZy1icmFja2V0 LWxpbmstYW5hbHl0aWMtcmVnZXhwKysNCgkgIChjb25jYXQNCgkgICAiXFxbXFxbIg0KCSAgICJc XCgiIChyZWdleHAtb3B0IChjb25zICJjb2RlcmVmIiBvcmctbGluay10eXBlcykgdCkgIjpcXCk/ Ig0KCSAgICJcXChbXl1dK1xcKSINCgkgICAiXFxdIg0KCSAgICJcXChcXFsiICJcXChbXl1dK1xc KSIgIlxcXVxcKT8iDQoJICAgIlxcXSIpDQoJICBvcmctYW55LWxpbmstcmUNCgkgIChjb25jYXQg IlxcKCIgb3JnLWJyYWNrZXQtbGluay1yZWdleHAgIlxcKVxcfFxcKCINCgkJICBvcmctYW5nbGUt bGluay1yZSAiXFwpXFx8XFwoIg0KCQkgIG9yZy1wbGFpbi1saW5rLXJlICJcXCkiKSkpKQ0KDQoo b3JnLW1ha2UtbGluay1yZWdleHBzKQ0KDQooZGVmY29uc3Qgb3JnLXRzLXJlZ2V4cCAiPFxcKFsw LTldXFx7NFxcfS1bMC05XVxcezJcXH0tWzAtOV1cXHsyXFx9ID9bXlxyXG4+XSo/XFwpPiINCiAg IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgZmFzdCB0aW1lIHN0YW1wIG1hdGNoaW5nLiIpDQooZGVm Y29uc3Qgb3JnLXRzLXJlZ2V4cC1ib3RoICJbWzxdXFwoWzAtOV1cXHs0XFx9LVswLTldXFx7Mlxc fS1bMC05XVxcezJcXH0gP1teXVxyXG4+XSo/XFwpW10+XSINCiAgIlJlZ3VsYXIgZXhwcmVzc2lv biBmb3IgZmFzdCB0aW1lIHN0YW1wIG1hdGNoaW5nLiIpDQooZGVmY29uc3Qgb3JnLXRzLXJlZ2V4 cDANCiAgIlxcKFxcKFswLTldXFx7NFxcfVxcKS1cXChbMC05XVxcezJcXH1cXCktXFwoWzAtOV1c XHsyXFx9XFwpXFwoICtbXl0rMC05PlxyXG4gLV0rXFwpP1xcKCArXFwoWzAtOV1cXHsxLDJcXH1c XCk6XFwoWzAtOV1cXHsyXFx9XFwpXFwpP1xcKSINCiAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRj aGluZyB0aW1lIHN0cmluZ3MgZm9yIGFuYWx5c2lzLg0KVGhpcyBvbmUgZG9lcyBub3QgcmVxdWly ZSB0aGUgc3BhY2UgYWZ0ZXIgdGhlIGRhdGUsIHNvIGl0IGNhbiBiZSB1c2VkDQpvbiBhIHN0cmlu ZyB0aGF0IHRlcm1pbmF0ZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGRhdGUuIikNCihkZWZjb25z dCBvcmctdHMtcmVnZXhwMSAiXFwoXFwoWzAtOV1cXHs0XFx9XFwpLVxcKFswLTldXFx7MlxcfVxc KS1cXChbMC05XVxcezJcXH1cXCkgKlxcKFteXSswLTk+XHJcbiAtXSpcXClcXCggXFwoWzAtOV1c XHsxLDJcXH1cXCk6XFwoWzAtOV1cXHsyXFx9XFwpXFwpP1xcKSINCiAgIlJlZ3VsYXIgZXhwcmVz c2lvbiBtYXRjaGluZyB0aW1lIHN0cmluZ3MgZm9yIGFuYWx5c2lzLiIpDQooZGVmY29uc3Qgb3Jn LXRzLXJlZ2V4cDIgKGNvbmNhdCAiPCIgb3JnLXRzLXJlZ2V4cDEgIltePlxuXVxcezAsMTZcXH0+ IikNCiAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aW1lIHN0YW1wcywgd2l0aCBncm91 cHMuIikNCihkZWZjb25zdCBvcmctdHMtcmVnZXhwMyAoY29uY2F0ICJbWzxdIiBvcmctdHMtcmVn ZXhwMSAiW15dPlxuXVxcezAsMTZcXH1bXT5dIikNCiAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRj aGluZyB0aW1lIHN0YW1wcyAoYWxzbyBbLi5dKSwgd2l0aCBncm91cHMuIikNCihkZWZjb25zdCBv cmctdHItcmVnZXhwIChjb25jYXQgb3JnLXRzLXJlZ2V4cCAiLS0/LT8iIG9yZy10cy1yZWdleHAp DQogICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYSB0aW1lIHN0YW1wIHJhbmdlLiIpDQoo ZGVmY29uc3Qgb3JnLXRyLXJlZ2V4cC1ib3RoDQogIChjb25jYXQgb3JnLXRzLXJlZ2V4cC1ib3Ro ICItLT8tPyIgb3JnLXRzLXJlZ2V4cC1ib3RoKQ0KICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNo aW5nIGEgdGltZSBzdGFtcCByYW5nZS4iKQ0KKGRlZmNvbnN0IG9yZy10c3ItcmVnZXhwIChjb25j YXQgb3JnLXRzLXJlZ2V4cCAiXFwoLS0/LT8iDQoJCQkJIG9yZy10cy1yZWdleHAgIlxcKT8iKQ0K ICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGEgdGltZSBzdGFtcCBvciB0aW1lIHN0YW1w IHJhbmdlLiIpDQooZGVmY29uc3Qgb3JnLXRzci1yZWdleHAtYm90aA0KICAoY29uY2F0IG9yZy10 cy1yZWdleHAtYm90aCAiXFwoLS0/LT8iDQoJICBvcmctdHMtcmVnZXhwLWJvdGggIlxcKT8iKQ0K ICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGEgdGltZSBzdGFtcCBvciB0aW1lIHN0YW1w IHJhbmdlLg0KVGhlIHRpbWUgc3RhbXBzIG1heSBiZSBlaXRoZXIgYWN0aXZlIG9yIGluYWN0aXZl LiIpDQoNCihkZWZ2YXIgb3JnLWVtcGgtZmFjZSBuaWwpDQoNCihkZWZ1biBvcmctZG8tZW1waGFz aXMtZmFjZXMgKGxpbWl0KQ0KICAiUnVuIHRocm91Z2ggdGhlIGJ1ZmZlciBhbmQgYWRkIG92ZXJs YXlzIHRvIGVtcGhhc2l6ZWQgc3RyaW5ncy4iDQogIChsZXQgKHJ0biBhKQ0KICAgICh3aGlsZSAo YW5kIChub3QgcnRuKSAocmUtc2VhcmNoLWZvcndhcmQgb3JnLWVtcGgtcmUgbGltaXQgdCkpDQog ICAgICAobGV0KiAoKGJvcmRlciAoY2hhci1hZnRlciAobWF0Y2gtYmVnaW5uaW5nIDMpKSkNCgkg ICAgIChicmUgKHJlZ2V4cC1xdW90ZSAoY2hhci10by1zdHJpbmcgYm9yZGVyKSkpKQ0KCShpZiAo YW5kIChub3QgKD0gYm9yZGVyIChjaGFyLWFmdGVyIChtYXRjaC1iZWdpbm5pbmcgNCkpKSkNCgkJ IChub3QgKHNhdmUtbWF0Y2gtZGF0YQ0KCQkJKHN0cmluZy1tYXRjaCAoY29uY2F0IGJyZSAiLioi IGJyZSkNCgkJCQkgICAgICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nDQoJCQkJICAgICAgICJc biIgIiAiDQoJCQkJICAgICAgIChzdWJzdHJpbmcgKG1hdGNoLXN0cmluZyAyKSAxIC0xKSkpKSkp DQoJICAgIChwcm9nbg0KCSAgICAgIChzZXRxIHJ0biB0KQ0KCSAgICAgIChzZXRxIGEgKGFzc29j IChtYXRjaC1zdHJpbmcgMykgb3JnLWVtcGhhc2lzLWFsaXN0KSkNCgkgICAgICAoZm9udC1sb2Nr LXByZXBlbmQtdGV4dC1wcm9wZXJ0eSAobWF0Y2gtYmVnaW5uaW5nIDIpIChtYXRjaC1lbmQgMikN CgkJCQkJICAgICAgICdmYWNlDQoJCQkJCSAgICAgICAobnRoIDEgYSkpDQoJICAgICAgKGFuZCAo bnRoIDIgYSkNCgkJICAgKG9yZy1yZW1vdmUtZmx5c3BlbGwtb3ZlcmxheXMtaW4NCgkJICAgICht YXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkpDQoJICAgICAgKGFkZC10ZXh0LXByb3Bl cnRpZXMgKG1hdGNoLWJlZ2lubmluZyAyKSAobWF0Y2gtZW5kIDIpDQoJCQkJICAgJyhmb250LWxv Y2stbXVsdGlsaW5lIHQgb3JnLWVtcGhhc2lzIHQpKQ0KCSAgICAgICh3aGVuIG9yZy1oaWRlLWVt cGhhc2lzLW1hcmtlcnMNCgkJKGFkZC10ZXh0LXByb3BlcnRpZXMgKG1hdGNoLWVuZCA0KSAobWF0 Y2gtYmVnaW5uaW5nIDUpDQoJCQkJICAgICAnKGludmlzaWJsZSBvcmctbGluaykpDQoJCShhZGQt dGV4dC1wcm9wZXJ0aWVzIChtYXRjaC1iZWdpbm5pbmcgMykgKG1hdGNoLWVuZCAzKQ0KCQkJCSAg ICAgJyhpbnZpc2libGUgb3JnLWxpbmspKSkpKSkNCiAgICAgIChnb3RvLWNoYXIgKDErIChtYXRj aC1iZWdpbm5pbmcgMCkpKSkNCiAgICBydG4pKQ0KDQooZGVmdW4gb3JnLWVtcGhhc2l6ZSAoJm9w dGlvbmFsIGNoYXIpDQogICJJbnNlcnQgb3IgY2hhbmdlIGFuIGVtcGhhc2lzLCBpLmUuIGEgZm9u dCBsaWtlIGJvbGQgb3IgaXRhbGljLg0KSWYgdGhlcmUgaXMgYW4gYWN0aXZlIHJlZ2lvbiwgY2hh bmdlIHRoYXQgcmVnaW9uIHRvIGEgbmV3IGVtcGhhc2lzLg0KSWYgdGhlcmUgaXMgbm8gcmVnaW9u LCBqdXN0IGluc2VydCB0aGUgbWFya2VyIGNoYXJhY3RlcnMgYW5kIHBvc2l0aW9uDQp0aGUgY3Vy c29yIGJldHdlZW4gdGhlbS4NCkNIQVIgc2hvdWxkIGJlIHRoZSBtYXJrZXIgY2hhcmFjdGVyLiAg SWYgaXQgaXMgYSBzcGFjZSwgaXQgbWVhbnMgdG8NCnJlbW92ZSB0aGUgZW1waGFzaXMgb2YgdGhl IHNlbGVjdGVkIHJlZ2lvbi4NCklmIENIQVIgaXMgbm90IGdpdmVuIChmb3IgZXhhbXBsZSBpbiBh biBpbnRlcmFjdGl2ZSBjYWxsKSBpdCB3aWxsIGJlDQpwcm9tcHRlZCBmb3IuIg0KICAoaW50ZXJh Y3RpdmUpDQogIChsZXQgKChlcmMgb3JnLWVtcGhhc2lzLXJlZ2V4cC1jb21wb25lbnRzKQ0KCShw cm9tcHQgIiIpDQoJKHN0cmluZyAiIikgYmVnIGVuZCBtb3ZlIGMgcykNCiAgICAoaWYgKG9yZy1y ZWdpb24tYWN0aXZlLXApDQoJKHNldHEgYmVnIChyZWdpb24tYmVnaW5uaW5nKSBlbmQgKHJlZ2lv bi1lbmQpDQoJICAgICAgc3RyaW5nIChidWZmZXItc3Vic3RyaW5nIGJlZyBlbmQpKQ0KICAgICAg KHNldHEgbW92ZSB0KSkNCg0KICAgICh1bmxlc3MgY2hhcg0KICAgICAgKG1lc3NhZ2UgIkVtcGhh c2lzIG1hcmtlciBvciB0YWc6IFslc10iDQoJICAgICAgIChtYXBjb25jYXQgKGxhbWJkYShlKSAo Y2FyIGUpKSBvcmctZW1waGFzaXMtYWxpc3QgIiIpKQ0KICAgICAgKHNldHEgY2hhciAocmVhZC1j aGFyLWV4Y2x1c2l2ZSkpKQ0KICAgIChpZiAoZXF1YWwgY2hhciA/XCApDQoJKHNldHEgcyAiIiBt b3ZlIG5pbCkNCiAgICAgICh1bmxlc3MgKGFzc29jIChjaGFyLXRvLXN0cmluZyBjaGFyKSBvcmct ZW1waGFzaXMtYWxpc3QpDQoJKHVzZXItZXJyb3IgIk5vIHN1Y2ggZW1waGFzaXMgbWFya2VyOiBc IiVjXCIiIGNoYXIpKQ0KICAgICAgKHNldHEgcyAoY2hhci10by1zdHJpbmcgY2hhcikpKQ0KICAg ICh3aGlsZSAoYW5kICg+IChsZW5ndGggc3RyaW5nKSAxKQ0KCQkoZXF1YWwgKHN1YnN0cmluZyBz dHJpbmcgMCAxKSAoc3Vic3RyaW5nIHN0cmluZyAtMSkpDQoJCShhc3NvYyAoc3Vic3RyaW5nIHN0 cmluZyAwIDEpIG9yZy1lbXBoYXNpcy1hbGlzdCkpDQogICAgICAoc2V0cSBzdHJpbmcgKHN1YnN0 cmluZyBzdHJpbmcgMSAtMSkpKQ0KICAgIChzZXRxIHN0cmluZyAoY29uY2F0IHMgc3RyaW5nIHMp KQ0KICAgIChpZiBiZWcgKGRlbGV0ZS1yZWdpb24gYmVnIGVuZCkpDQogICAgKHVubGVzcyAob3Ig KGJvbHApDQoJCShzdHJpbmctbWF0Y2ggKGNvbmNhdCAiWyIgKG50aCAwIGVyYykgIlxuXSIpDQoJ CQkgICAgICAoY2hhci10by1zdHJpbmcgKGNoYXItYmVmb3JlIChwb2ludCkpKSkpDQogICAgICAo aW5zZXJ0ICIgIikpDQogICAgKHVubGVzcyAob3IgKGVvYnApDQoJCShzdHJpbmctbWF0Y2ggKGNv bmNhdCAiWyIgKG50aCAxIGVyYykgIlxuXSIpDQoJCQkgICAgICAoY2hhci10by1zdHJpbmcgKGNo YXItYWZ0ZXIgKHBvaW50KSkpKSkNCiAgICAgIChpbnNlcnQgIiAiKSAoYmFja3dhcmQtY2hhciAx KSkNCiAgICAoaW5zZXJ0IHN0cmluZykNCiAgICAoYW5kIG1vdmUgKGJhY2t3YXJkLWNoYXIgMSkp KSkNCg0KKGRlZmNvbnN0IG9yZy1ub25zdGlja3ktcHJvcHMNCiAgJyhtb3VzZS1mYWNlIGhpZ2hs aWdodCBrZXltYXAgaW52aXNpYmxlIGludGFuZ2libGUgaGVscC1lY2hvIG9yZy1saW5rZWQtdGV4 dCBodG1saXplLWxpbmspKQ0KDQooZGVmc3Vic3Qgb3JnLXJlYXItbm9uc3RpY2t5LWF0IChwb3Mp DQogIChhZGQtdGV4dC1wcm9wZXJ0aWVzICgxLSBwb3MpIHBvcyAobGlzdCAncmVhci1ub25zdGlj a3kgb3JnLW5vbnN0aWNreS1wcm9wcykpKQ0KDQooZGVmdW4gb3JnLWFjdGl2YXRlLXBsYWluLWxp bmtzIChsaW1pdCkNCiAgIlJ1biB0aHJvdWdoIHRoZSBidWZmZXIgYW5kIGFkZCBvdmVybGF5cyB0 byBsaW5rcy4iDQogIChsZXQgKGYgaGwpDQogICAgKHdoZW4gKGFuZCAocmUtc2VhcmNoLWZvcndh cmQgKGNvbmNhdCBvcmctcGxhaW4tbGluay1yZSkgbGltaXQgdCkNCgkgICAgICAgKG5vdCAob3Jn LWluLXNyYy1ibG9jay1wKSkpDQogICAgICAob3JnLXJlbW92ZS1mbHlzcGVsbC1vdmVybGF5cy1p biAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkpDQogICAgICAoc2V0cSBmIChnZXQt dGV4dC1wcm9wZXJ0eSAobWF0Y2gtYmVnaW5uaW5nIDApICdmYWNlKSkNCiAgICAgIChzZXRxIGhs IChvcmctbWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMCkpDQogICAgICAoaWYgKG9yIChlcSBm ICdvcmctdGFnKQ0KCSAgICAgIChhbmQgKGxpc3RwIGYpIChtZW1xICdvcmctdGFnIGYpKSkNCgkg IG5pbA0KCShhZGQtdGV4dC1wcm9wZXJ0aWVzIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVu ZCAwKQ0KCQkJICAgICAobGlzdCAnbW91c2UtZmFjZSAnaGlnaGxpZ2h0DQoJCQkJICAgJ2ZhY2Ug J29yZy1saW5rDQoJCQkJICAgJ2h0bWxpemUtbGluayBgKDp1cmkgLGhsKQ0KCQkJCSAgICdrZXlt YXAgb3JnLW1vdXNlLW1hcCkpDQoJKG9yZy1yZWFyLW5vbnN0aWNreS1hdCAobWF0Y2gtZW5kIDAp KSkNCiAgICAgIHQpKSkNCg0KKGRlZnVuIG9yZy1hY3RpdmF0ZS1jb2RlIChsaW1pdCkNCiAgKGlm IChyZS1zZWFyY2gtZm9yd2FyZCAiXlsgXHRdKlxcKDpcXCg/OiAuKlxcfCRcXClcbj9cXCkiIGxp bWl0IHQpDQogICAgICAocHJvZ24NCgkob3JnLXJlbW92ZS1mbHlzcGVsbC1vdmVybGF5cy1pbiAo bWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkpDQoJKHJlbW92ZS10ZXh0LXByb3BlcnRp ZXMgKG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApDQoJCQkJJyhkaXNwbGF5IHQgaW52 aXNpYmxlIHQgaW50YW5naWJsZSB0KSkNCgl0KSkpDQoNCihkZWZjdXN0b20gb3JnLXNyYy1mb250 aWZ5LW5hdGl2ZWx5IG5pbA0KICAiV2hlbiBub24tbmlsLCBmb250aWZ5IGNvZGUgaW4gY29kZSBi bG9ja3MuIg0KICA6dHlwZSAnYm9vbGVhbg0KICA6dmVyc2lvbiAiMjQuMSINCiAgOmdyb3VwICdv cmctYXBwZWFyYW5jZQ0KICA6Z3JvdXAgJ29yZy1iYWJlbCkNCg0KKGRlZmN1c3RvbSBvcmctYWxs b3ctcHJvbW90aW5nLXRvcC1sZXZlbC1zdWJ0cmVlIG5pbA0KICAiV2hlbiBub24tbmlsLCBhbGxv dyBwcm9tb3RpbmcgYSB0b3AgbGV2ZWwgc3VidHJlZS4NClRoZSBsZWFkaW5nIHN0YXIgb2YgdGhl IHRvcCBsZXZlbCBoZWFkbGluZSB3aWxsIGJlIHJlcGxhY2VkDQpieSBhICMuIg0KICA6dHlwZSAn Ym9vbGVhbg0KICA6dmVyc2lvbiAiMjQuMSINCiAgOmdyb3VwICdvcmctYXBwZWFyYW5jZSkNCg0K KGRlZnVuIG9yZy1mb250aWZ5LW1ldGEtbGluZXMtYW5kLWJsb2NrcyAobGltaXQpDQogIChjb25k aXRpb24tY2FzZSBuaWwNCiAgICAgIChvcmctZm9udGlmeS1tZXRhLWxpbmVzLWFuZC1ibG9ja3Mt MSBsaW1pdCkNCiAgICAoZXJyb3IgKG1lc3NhZ2UgIm9yZy1tb2RlIGZvbnRpZmljYXRpb24gZXJy b3IiKSkpKQ0KDQooZGVmdW4gb3JnLWZvbnRpZnktbWV0YS1saW5lcy1hbmQtYmxvY2tzLTEgKGxp bWl0KQ0KICAiRm9udGlmeSAjKyBsaW5lcyBhbmQgYmxvY2tzLiINCiAgKGxldCAoKGNhc2UtZm9s ZC1zZWFyY2ggdCkpDQogICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZA0KCSAiXlxcKFsgXHRdKiNc XChcXChcXCtbYS16QS1aXSs6P1xcfCBcXHwkXFwpXFwoX1xcKFthLXpBLVpdK1xcKVxcKT9cXClb IFx0XSpcXChcXChbXiBcdFxuXSpcXClbIFx0XSpcXCguKlxcKVxcKVxcKSINCgkgbGltaXQgdCkN CgkobGV0ICgoYmVnIChtYXRjaC1iZWdpbm5pbmcgMCkpDQoJICAgICAgKGJsb2NrLXN0YXJ0ICht YXRjaC1lbmQgMCkpDQoJICAgICAgKGJsb2NrLWVuZCBuaWwpDQoJICAgICAgKGxhbmcgKG1hdGNo LXN0cmluZyA3KSkNCgkgICAgICAoYmVnMSAobGluZS1iZWdpbm5pbmctcG9zaXRpb24gMikpDQoJ ICAgICAgKGRjMSAoZG93bmNhc2UgKG1hdGNoLXN0cmluZyAyKSkpDQoJICAgICAgKGRjMyAoZG93 bmNhc2UgKG1hdGNoLXN0cmluZyAzKSkpDQoJICAgICAgZW5kIGVuZDEgcXVvdGluZyBibG9jay10 eXBlIG92bCkNCgkgIChjb25kDQoJICAgKChtZW1iZXIgZGMxICcoIitodG1sOiIgIithc2NpaToi ICIrbGF0ZXg6IikpDQoJICAgIDs7IGEgc2luZ2xlIGxpbmUgb2YgYmFja2VuZC1zcGVjaWZpYyBj b250ZW50DQoJICAgIChvcmctcmVtb3ZlLWZseXNwZWxsLW92ZXJsYXlzLWluIChtYXRjaC1iZWdp bm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkNCgkgICAgKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgKG1h dGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApDQoJCQkJICAgICcoZGlzcGxheSB0IGludmlz aWJsZSB0IGludGFuZ2libGUgdCkpDQoJICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIChtYXRjaC1i ZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAzKQ0KCQkJCSAnKGZvbnQtbG9jay1mb250aWZpZWQgdCBm YWNlIG9yZy1tZXRhLWxpbmUpKQ0KCSAgICAoYWRkLXRleHQtcHJvcGVydGllcyAobWF0Y2gtYmVn aW5uaW5nIDYpICgrIChtYXRjaC1lbmQgNikgMSkNCgkJCQkgJyhmb250LWxvY2stZm9udGlmaWVk IHQgZmFjZSBvcmctYmxvY2spKQ0KCQkJCQk7IGZvciBiYWNrZW5kLXNwZWNpZmljIGNvZGUNCgkg ICAgdCkNCgkgICAoKGFuZCAobWF0Y2gtZW5kIDQpIChlcXVhbCBkYzMgIitiZWdpbiIpKQ0KCSAg ICA7OyBUcnVseSBhIGJsb2NrDQoJICAgIChzZXRxIGJsb2NrLXR5cGUgKGRvd25jYXNlIChtYXRj aC1zdHJpbmcgNSkpDQoJCSAgcXVvdGluZyAobWVtYmVyIGJsb2NrLXR5cGUgb3JnLXByb3RlY3Rp bmctYmxvY2tzKSkNCgkgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkDQoJCSAgIChjb25jYXQg Il5bIFx0XSojXFwrZW5kIiAobWF0Y2gtc3RyaW5nIDQpICJcXD4uKiIpDQoJCSAgIG5pbCB0KSAg Ozsgb24gcHVycG9zZSwgd2UgbG9vayBmdXJ0aGVyIHRoYW4gTElNSVQNCgkgICAgICAoc2V0cSBl bmQgKG1pbiAocG9pbnQtbWF4KSAobWF0Y2gtZW5kIDApKQ0KCQkgICAgZW5kMSAobWluIChwb2lu dC1tYXgpICgxLSAobWF0Y2gtYmVnaW5uaW5nIDApKSkpDQoJICAgICAgKHNldHEgYmxvY2stZW5k IChtYXRjaC1iZWdpbm5pbmcgMCkpDQoJICAgICAgKHdoZW4gcXVvdGluZw0KCQkocmVtb3ZlLXRl eHQtcHJvcGVydGllcyBiZWcgZW5kDQoJCQkJCScoZGlzcGxheSB0IGludmlzaWJsZSB0IGludGFu Z2libGUgdCkpKQ0KCSAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzDQoJICAgICAgIGJlZyBlbmQN CgkgICAgICAgJyhmb250LWxvY2stZm9udGlmaWVkIHQgZm9udC1sb2NrLW11bHRpbGluZSB0KSkN CgkgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBiZWcgYmVnMSAnKGZhY2Ugb3JnLW1ldGEtbGlu ZSkpDQoJICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgZW5kMSAobWluIChwb2ludC1tYXgpICgx KyBlbmQpKQ0KCQkJCSAgICcoZmFjZSBvcmctbWV0YS1saW5lKSkgOyBmb3IgZW5kX3NyYw0KCSAg ICAgIChjb25kDQoJICAgICAgICgoYW5kIGxhbmcgKG5vdCAoc3RyaW5nPSBsYW5nICIiKSkgb3Jn LXNyYy1mb250aWZ5LW5hdGl2ZWx5KQ0KCQkob3JnLXNyYy1mb250LWxvY2stZm9udGlmeS1ibG9j ayBsYW5nIGJsb2NrLXN0YXJ0IGJsb2NrLWVuZCkNCgkJOzsgcmVtb3ZlIG9sZCBiYWNrZ3JvdW5k IG92ZXJsYXlzDQoJCShtYXBjIChsYW1iZGEgKG92KQ0KCQkJKGlmIChlcSAob3ZlcmxheS1nZXQg b3YgJ2ZhY2UpICdvcmctYmxvY2stYmFja2dyb3VuZCkNCgkJCSAgICAoZGVsZXRlLW92ZXJsYXkg b3YpKSkNCgkJICAgICAgKG92ZXJsYXlzLWF0ICgvICgrIGJlZzEgYmxvY2stZW5kKSAyKSkpDQoJ CTs7IGFkZCBhIGJhY2tncm91bmQgb3ZlcmxheQ0KCQkoc2V0cSBvdmwgKG1ha2Utb3ZlcmxheSBi ZWcxIGJsb2NrLWVuZCkpDQogICAgICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92bCAnZmFjZSAn b3JnLWJsb2NrLWJhY2tncm91bmQpDQogICAgICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92bCAn ZXZhcG9yYXRlIHQpKSAgOzsgbWFrZSBpdCBnbyBhd2F5IHdoZW4gZW1wdHkNCgkgICAgICAgKHF1 b3RpbmcNCgkJKGFkZC10ZXh0LXByb3BlcnRpZXMgYmVnMSAobWluIChwb2ludC1tYXgpICgxKyBl bmQxKSkNCgkJCQkgICAgICcoZmFjZSBvcmctYmxvY2spKSkgOyBlbmQgb2Ygc291cmNlIGJsb2Nr DQoJICAgICAgICgobm90IG9yZy1mb250aWZ5LXF1b3RlLWFuZC12ZXJzZS1ibG9ja3MpKQ0KCSAg ICAgICAoKHN0cmluZz0gYmxvY2stdHlwZSAicXVvdGUiKQ0KCQkoYWRkLXRleHQtcHJvcGVydGll cyBiZWcxIChtaW4gKHBvaW50LW1heCkgKDErIGVuZDEpKSAnKGZhY2Ugb3JnLXF1b3RlKSkpDQoJ ICAgICAgICgoc3RyaW5nPSBibG9jay10eXBlICJ2ZXJzZSIpDQoJCShhZGQtdGV4dC1wcm9wZXJ0 aWVzIGJlZzEgKG1pbiAocG9pbnQtbWF4KSAoMSsgZW5kMSkpICcoZmFjZSBvcmctdmVyc2UpKSkp DQogICAgICAJICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgYmVnIGJlZzEgJyhmYWNlIG9yZy1i bG9jay1iZWdpbi1saW5lKSkNCiAgICAgIAkgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyAobWlu IChwb2ludC1tYXgpICgxKyBlbmQpKSAobWluIChwb2ludC1tYXgpICgxKyBlbmQxKSkNCgkJCQkg ICAnKGZhY2Ugb3JnLWJsb2NrLWVuZC1saW5lKSkNCgkgICAgICB0KSkNCgkgICAoKG1lbWJlciBk YzEgJygiK3RpdGxlOiIgIithdXRob3I6IiAiK2VtYWlsOiIgIitkYXRlOiIpKQ0KCSAgICAoYWRk LXRleHQtcHJvcGVydGllcw0KCSAgICAgYmVnIChtYXRjaC1lbmQgMykNCgkgICAgIChpZiAobWVt YmVyIChpbnRlcm4gKHN1YnN0cmluZyBkYzEgMSAtMSkpIG9yZy1oaWRkZW4ta2V5d29yZHMpDQoJ CSAnKGZvbnQtbG9jay1mb250aWZpZWQgdCBpbnZpc2libGUgdCkNCgkgICAgICAgJyhmb250LWxv Y2stZm9udGlmaWVkIHQgZmFjZSBvcmctZG9jdW1lbnQtaW5mby1rZXl3b3JkKSkpDQoJICAgIChh ZGQtdGV4dC1wcm9wZXJ0aWVzDQoJICAgICAobWF0Y2gtYmVnaW5uaW5nIDYpIChtaW4gKHBvaW50 LW1heCkgKDErIChtYXRjaC1lbmQgNikpKQ0KCSAgICAgKGlmIChzdHJpbmctZXF1YWwgZGMxICIr dGl0bGU6IikNCgkgICAgCSAnKGZvbnQtbG9jay1mb250aWZpZWQgdCBmYWNlIG9yZy1kb2N1bWVu dC10aXRsZSkNCgkgICAgICAgJyhmb250LWxvY2stZm9udGlmaWVkIHQgZmFjZSBvcmctZG9jdW1l bnQtaW5mbykpKSkNCgkgICAoKG9yIChlcXVhbCBkYzEgIityZXN1bHRzIikNCgkJKG1lbWJlciBk YzEgJygiK2JlZ2luOiIgIitlbmQ6IiAiK2NhcHRpb246IiAiK2xhYmVsOiINCgkJCSAgICAgICIr b3JndGJsOiIgIit0YmxmbToiICIrdGJsbmFtZToiICIrcmVzdWx0czoiDQoJCQkgICAgICAiK2Nh bGw6IiAiK2hlYWRlcjoiICIraGVhZGVyczoiICIrbmFtZToiKSkNCgkJKGFuZCAobWF0Y2gtZW5k IDQpIChlcXVhbCBkYzMgIithdHRyIikpKQ0KCSAgICAoYWRkLXRleHQtcHJvcGVydGllcw0KCSAg ICAgYmVnIChtYXRjaC1lbmQgMCkNCgkgICAgICcoZm9udC1sb2NrLWZvbnRpZmllZCB0IGZhY2Ug b3JnLW1ldGEtbGluZSkpDQoJICAgIHQpDQoJICAgKChtZW1iZXIgZGMzICcoIiAiICIiKSkNCgkg ICAgKGFkZC10ZXh0LXByb3BlcnRpZXMNCgkgICAgIGJlZyAobWF0Y2gtZW5kIDApDQoJICAgICAn KGZvbnQtbG9jay1mb250aWZpZWQgdCBmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpKSkNCgkg ICAoKG5vdCAobWVtYmVyIChjaGFyLWFmdGVyIGJlZykgJyg/XCAgP1x0KSkpDQoJICAgIDs7IGp1 c3QgYW55IG90aGVyIGluLWJ1ZmZlciBzZXR0aW5nLCBidXQgbm90IGluZGVudGVkDQoJICAgIChh ZGQtdGV4dC1wcm9wZXJ0aWVzDQoJICAgICBiZWcgKG1hdGNoLWVuZCAwKQ0KCSAgICAgJyhmb250 LWxvY2stZm9udGlmaWVkIHQgZmFjZSBvcmctbWV0YS1saW5lKSkNCgkgICAgdCkNCgkgICAodCBu aWwpKSkpKSkNCg0KKGRlZnVuIG9yZy1hY3RpdmF0ZS1hbmdsZS1saW5rcyAobGltaXQpDQogICJS dW4gdGhyb3VnaCB0aGUgYnVmZmVyIGFuZCBhZGQgb3ZlcmxheXMgdG8gbGlua3MuIg0KICAoaWYg KGFuZCAocmUtc2VhcmNoLWZvcndhcmQgb3JnLWFuZ2xlLWxpbmstcmUgbGltaXQgdCkNCgkgICAo bm90IChvcmctaW4tc3JjLWJsb2NrLXApKSkNCiAgICAgIChwcm9nbg0KCShvcmctcmVtb3ZlLWZs eXNwZWxsLW92ZXJsYXlzLWluIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkNCgko YWRkLXRleHQtcHJvcGVydGllcyAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkNCgkJ CSAgICAgKGxpc3QgJ21vdXNlLWZhY2UgJ2hpZ2hsaWdodA0KCQkJCSAgICdrZXltYXAgb3JnLW1v dXNlLW1hcCkpDQoJKG9yZy1yZWFyLW5vbnN0aWNreS1hdCAobWF0Y2gtZW5kIDApKQ0KCXQpKSkN Cg0KKGRlZnVuIG9yZy1hY3RpdmF0ZS1mb290bm90ZS1saW5rcyAobGltaXQpDQogICJSdW4gdGhy b3VnaCB0aGUgYnVmZmVyIGFuZCBhZGQgb3ZlcmxheXMgdG8gZm9vdG5vdGVzLiINCiAgKGxldCAo KGZuIChvcmctZm9vdG5vdGUtbmV4dC1yZWZlcmVuY2Utb3ItZGVmaW5pdGlvbiBsaW1pdCkpKQ0K ICAgICh3aGVuIGZuDQogICAgICAobGV0ICgoYmVnIChudGggMSBmbikpIChlbmQgKG50aCAyIGZu KSkpDQoJKG9yZy1yZW1vdmUtZmx5c3BlbGwtb3ZlcmxheXMtaW4gYmVnIGVuZCkNCgkoYWRkLXRl eHQtcHJvcGVydGllcyBiZWcgZW5kDQoJCQkgICAgIChsaXN0ICdtb3VzZS1mYWNlICdoaWdobGln aHQNCgkJCQkgICAna2V5bWFwIG9yZy1tb3VzZS1tYXANCgkJCQkgICAnaGVscC1lY2hvDQoJCQkJ ICAgKGlmICg9IChwb2ludC1hdC1ib2wpIGJlZykNCgkJCQkgICAgICAgIkZvb3Rub3RlIGRlZmlu aXRpb24iDQoJCQkJICAgICAiRm9vdG5vdGUgcmVmZXJlbmNlIikNCgkJCQkgICAnZm9udC1sb2Nr LWZvbnRpZmllZCB0DQoJCQkJICAgJ2ZvbnQtbG9jay1tdWx0aWxpbmUgdA0KCQkJCSAgICdmYWNl ICdvcmctZm9vdG5vdGUpKSkpKSkNCg0KKGRlZnVuIG9yZy1hY3RpdmF0ZS1icmFja2V0LWxpbmtz IChsaW1pdCkNCiAgIlJ1biB0aHJvdWdoIHRoZSBidWZmZXIgYW5kIGFkZCBvdmVybGF5cyB0byBi cmFja2V0ZWQgbGlua3MuIg0KICAoaWYgKGFuZCAocmUtc2VhcmNoLWZvcndhcmQgb3JnLWJyYWNr ZXQtbGluay1yZWdleHAgbGltaXQgdCkNCgkgICAobm90IChvcmctaW4tc3JjLWJsb2NrLXApKSkN CiAgICAgIChsZXQqICgoaGwgKG9yZy1tYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAxKSkNCgkg ICAgIChoZWxwIChjb25jYXQgIkxJTks6ICIgKHNhdmUtbWF0Y2gtZGF0YSAob3JnLWxpbmstdW5l c2NhcGUgaGwpKSkpDQoJICAgICAoaXAgKG9yZy1tYXliZS1pbnRhbmdpYmxlDQoJCSAgKGxpc3Qg J2ludmlzaWJsZSAnb3JnLWxpbmsNCgkJCSdrZXltYXAgb3JnLW1vdXNlLW1hcCAnbW91c2UtZmFj ZSAnaGlnaGxpZ2h0DQoJCQknZm9udC1sb2NrLW11bHRpbGluZSB0ICdoZWxwLWVjaG8gaGVscA0K CQkJJ2h0bWxpemUtbGluayBgKDp1cmkgLGhsKSkpKQ0KCSAgICAgKHZwIChsaXN0ICdrZXltYXAg b3JnLW1vdXNlLW1hcCAnbW91c2UtZmFjZSAnaGlnaGxpZ2h0DQoJCSAgICAgICAnZm9udC1sb2Nr LW11bHRpbGluZSB0ICdoZWxwLWVjaG8gaGVscA0KCQkgICAgICAgJ2h0bWxpemUtbGluayBgKDp1 cmkgLGhsKSkpKQ0KCTs7IFdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBpbnZpc2libGUgcHJvcGVydHkg aGVyZS4gIFRhYmxlIG5hcnJvd2luZw0KCTs7IG1heSBoYXZlIG1hZGUgc29tZSBvZiB0aGlzIGlu dmlzaWJsZS4NCgkob3JnLXJlbW92ZS1mbHlzcGVsbC1vdmVybGF5cy1pbiAobWF0Y2gtYmVnaW5u aW5nIDApIChtYXRjaC1lbmQgMCkpDQoJKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgKG1hdGNoLWJl Z2lubmluZyAwKSAobWF0Y2gtZW5kIDApDQoJCQkJJyhpbnZpc2libGUgbmlsKSkNCgkoaWYgKG1h dGNoLWVuZCAzKQ0KCSAgICAocHJvZ24NCgkgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyAobWF0 Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1iZWdpbm5pbmcgMykgaXApDQoJICAgICAgKG9yZy1yZWFy LW5vbnN0aWNreS1hdCAobWF0Y2gtYmVnaW5uaW5nIDMpKQ0KCSAgICAgIChhZGQtdGV4dC1wcm9w ZXJ0aWVzIChtYXRjaC1iZWdpbm5pbmcgMykgKG1hdGNoLWVuZCAzKSB2cCkNCgkgICAgICAob3Jn LXJlYXItbm9uc3RpY2t5LWF0IChtYXRjaC1lbmQgMykpDQoJICAgICAgKGFkZC10ZXh0LXByb3Bl cnRpZXMgKG1hdGNoLWVuZCAzKSAobWF0Y2gtZW5kIDApIGlwKQ0KCSAgICAgIChvcmctcmVhci1u b25zdGlja3ktYXQgKG1hdGNoLWVuZCAwKSkpDQoJICAoYWRkLXRleHQtcHJvcGVydGllcyAobWF0 Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1iZWdpbm5pbmcgMSkgaXApDQoJICAob3JnLXJlYXItbm9u c3RpY2t5LWF0IChtYXRjaC1iZWdpbm5pbmcgMSkpDQoJICAoYWRkLXRleHQtcHJvcGVydGllcyAo bWF0Y2gtYmVnaW5uaW5nIDEpIChtYXRjaC1lbmQgMSkgdnApDQoJICAob3JnLXJlYXItbm9uc3Rp Y2t5LWF0IChtYXRjaC1lbmQgMSkpDQoJICAoYWRkLXRleHQtcHJvcGVydGllcyAobWF0Y2gtZW5k IDEpIChtYXRjaC1lbmQgMCkgaXApDQoJICAob3JnLXJlYXItbm9uc3RpY2t5LWF0IChtYXRjaC1l bmQgMCkpKQ0KCXQpKSkNCg0KKGRlZnVuIG9yZy1hY3RpdmF0ZS1kYXRlcyAobGltaXQpDQogICJS dW4gdGhyb3VnaCB0aGUgYnVmZmVyIGFuZCBhZGQgb3ZlcmxheXMgdG8gZGF0ZXMuIg0KICAoaWYg KGFuZCAocmUtc2VhcmNoLWZvcndhcmQgb3JnLXRzci1yZWdleHAtYm90aCBsaW1pdCB0KQ0KCSAg IChub3QgKGVxdWFsIChjaGFyLWJlZm9yZSAobWF0Y2gtYmVnaW5uaW5nIDApKSA5MSkpKQ0KICAg ICAgKHByb2duDQoJKG9yZy1yZW1vdmUtZmx5c3BlbGwtb3ZlcmxheXMtaW4gKG1hdGNoLWJlZ2lu bmluZyAwKSAobWF0Y2gtZW5kIDApKQ0KCShhZGQtdGV4dC1wcm9wZXJ0aWVzIChtYXRjaC1iZWdp bm5pbmcgMCkgKG1hdGNoLWVuZCAwKQ0KCQkJICAgICAobGlzdCAnbW91c2UtZmFjZSAnaGlnaGxp Z2h0DQoJCQkJICAgJ2tleW1hcCBvcmctbW91c2UtbWFwKSkNCgkob3JnLXJlYXItbm9uc3RpY2t5 LWF0IChtYXRjaC1lbmQgMCkpDQoJKHdoZW4gb3JnLWRpc3BsYXktY3VzdG9tLXRpbWVzDQoJICAo aWYgKG1hdGNoLWVuZCAzKQ0KCSAgICAgIChvcmctZGlzcGxheS1jdXN0b20tdGltZSAobWF0Y2gt YmVnaW5uaW5nIDMpIChtYXRjaC1lbmQgMykpKQ0KCSAgKG9yZy1kaXNwbGF5LWN1c3RvbS10aW1l IChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpDQoJdCkpKQ0KDQooZGVmdmFyIG9y Zy10YXJnZXQtbGluay1yZWdleHAgbmlsDQogICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcg cmFkaW8gdGFyZ2V0cyBpbiBwbGFpbiB0ZXh0LiIpDQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9j YWwgJ29yZy10YXJnZXQtbGluay1yZWdleHApDQooZGVmdmFyIG9yZy10YXJnZXQtcmVnZXhwICI8 PFxcKFtePD5cblxyXStcXCk+PiINCiAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhIGxp bmsgdGFyZ2V0LiIpDQooZGVmdmFyIG9yZy1yYWRpby10YXJnZXQtcmVnZXhwICI8PDxcXChbXjw+ XG5ccl0rXFwpPj4+Ig0KICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGEgcmFkaW8gdGFy Z2V0LiIpDQooZGVmdmFyIG9yZy1hbnktdGFyZ2V0LXJlZ2V4cCAiPDw8P1xcKFtePD5cblxyXStc XCk+Pj4/IiA7IEZJWE1FLCBub3QgZXhhY3QsIHdvdWxkIG1hdGNoIDw8PGFhYT4+ICBhcyBhIHJh ZGlvIHRhcmdldC4NCiAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbnkgdGFyZ2V0LiIp DQoNCihkZWZ1biBvcmctYWN0aXZhdGUtdGFyZ2V0LWxpbmtzIChsaW1pdCkNCiAgIlJ1biB0aHJv dWdoIHRoZSBidWZmZXIgYW5kIGFkZCBvdmVybGF5cyB0byB0YXJnZXQgbWF0Y2hlcy4iDQogICh3 aGVuIG9yZy10YXJnZXQtbGluay1yZWdleHANCiAgICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0 KSkNCiAgICAgIChpZiAocmUtc2VhcmNoLWZvcndhcmQgb3JnLXRhcmdldC1saW5rLXJlZ2V4cCBs aW1pdCB0KQ0KCSAgKHByb2duDQoJICAgIChvcmctcmVtb3ZlLWZseXNwZWxsLW92ZXJsYXlzLWlu IChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkNCgkgICAgKGFkZC10ZXh0LXByb3Bl cnRpZXMgKG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApDQoJCQkJIChsaXN0ICdtb3Vz ZS1mYWNlICdoaWdobGlnaHQNCgkJCQkgICAgICAgJ2tleW1hcCBvcmctbW91c2UtbWFwDQoJCQkJ ICAgICAgICdoZWxwLWVjaG8gIlJhZGlvIHRhcmdldCBsaW5rIg0KCQkJCSAgICAgICAnb3JnLWxp bmtlZC10ZXh0IHQpKQ0KCSAgICAob3JnLXJlYXItbm9uc3RpY2t5LWF0IChtYXRjaC1lbmQgMCkp DQoJICAgIHQpKSkpKQ0KDQooZGVmdW4gb3JnLXVwZGF0ZS1yYWRpby10YXJnZXQtcmVnZXhwICgp DQogICJGaW5kIGFsbCByYWRpbyB0YXJnZXRzIGluIHRoaXMgZmlsZSBhbmQgdXBkYXRlIHRoZSBy ZWd1bGFyIGV4cHJlc3Npb24uIg0KICAoaW50ZXJhY3RpdmUpDQogICh3aGVuIChtZW1xICdyYWRp byBvcmctYWN0aXZhdGUtbGlua3MpDQogICAgKHNldHEgb3JnLXRhcmdldC1saW5rLXJlZ2V4cA0K CSAgKG9yZy1tYWtlLXRhcmdldC1saW5rLXJlZ2V4cCAob3JnLWFsbC10YXJnZXRzICdyYWRpbykp KQ0KICAgIChvcmctcmVzdGFydC1mb250LWxvY2spKSkNCg0KKGRlZnVuIG9yZy1oaWRlLXdpZGUt Y29sdW1ucyAobGltaXQpDQogIChsZXQgKHMgZSkNCiAgICAoc2V0cSBzICh0ZXh0LXByb3BlcnR5 LWFueSAocG9pbnQpIChvciBsaW1pdCAocG9pbnQtbWF4KSkNCgkJCSAgICAgICAnb3JnLWN3aWR0 aCB0KSkNCiAgICAod2hlbiBzDQogICAgICAoc2V0cSBlIChuZXh0LXNpbmdsZS1wcm9wZXJ0eS1j aGFuZ2UgcyAnb3JnLWN3aWR0aCkpDQogICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzIGUgKG9y Zy1tYXliZS1pbnRhbmdpYmxlICcoaW52aXNpYmxlIG9yZy1jd2lkdGgpKSkNCiAgICAgIChnb3Rv LWNoYXIgZSkNCiAgICAgIHQpKSkNCg0KKGRlZnZhciBvcmctbGF0ZXgtYW5kLXJlbGF0ZWQtcmVn ZXhwIG5pbA0KICAiUmVndWxhciBleHByZXNzaW9uIGZvciBoaWdobGlnaHRpbmcgTGFUZVgsIGVu dGl0aWVzIGFuZCBzdWIvc3VwZXJzY3JpcHQuIikNCihkZWZ2YXIgb3JnLW1hdGNoLXN1YnN0cmlu Zy1yZWdleHApDQooZGVmdmFyIG9yZy1tYXRjaC1zdWJzdHJpbmctd2l0aC1icmFjZXMtcmVnZXhw KQ0KDQooZGVmdW4gb3JnLWNvbXB1dGUtbGF0ZXgtYW5kLXJlbGF0ZWQtcmVnZXhwICgpDQogICJD b21wdXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgTGFUZVgsIGVudGl0aWVzIGFuZCBzdWIvc3Vw ZXJzY3JpcHQuDQpSZXN1bHQgZGVwZW5kcyBvbiB2YXJpYWJsZSBgb3JnLWhpZ2hsaWdodC1sYXRl eC1hbmQtcmVsYXRlZCcuIg0KICAob3JnLXNldC1sb2NhbA0KICAgJ29yZy1sYXRleC1hbmQtcmVs YXRlZC1yZWdleHANCiAgIChsZXQqICgocmUtc3ViDQoJICAgKGNvbmQgKChub3QgKG1lbXEgJ3Nj cmlwdCBvcmctaGlnaGxpZ2h0LWxhdGV4LWFuZC1yZWxhdGVkKSkgbmlsKQ0KCQkgKChlcSBvcmct dXNlLXN1Yi1zdXBlcnNjcmlwdHMgJ3t9KQ0KCQkgIChsaXN0IG9yZy1tYXRjaC1zdWJzdHJpbmct d2l0aC1icmFjZXMtcmVnZXhwKSkNCgkJIChvcmctdXNlLXN1Yi1zdXBlcnNjcmlwdHMgKGxpc3Qg b3JnLW1hdGNoLXN1YnN0cmluZy1yZWdleHApKSkpDQoJICAocmUtbGF0ZXgNCgkgICAod2hlbiAo bWVtcSAnbGF0ZXggb3JnLWhpZ2hsaWdodC1sYXRleC1hbmQtcmVsYXRlZCkNCgkgICAgIChsZXQg KChtYXRjaGVycyAocGxpc3QtZ2V0IG9yZy1mb3JtYXQtbGF0ZXgtb3B0aW9ucyA6bWF0Y2hlcnMp KSkNCgkgICAgICAgKGRlbHEgbmlsDQoJCSAgICAgKG1hcGNhciAobGFtYmRhICh4KQ0KCQkJICAg ICAgIChhbmQgKG1lbWJlciAoY2FyIHgpIG1hdGNoZXJzKSAobnRoIDEgeCkpKQ0KCQkJICAgICBv cmctbGF0ZXgtcmVnZXhwcykpKSkpDQoJICAocmUtZW50aXRpZXMNCgkgICAod2hlbiAobWVtcSAn ZW50aXRpZXMgb3JnLWhpZ2hsaWdodC1sYXRleC1hbmQtcmVsYXRlZCkNCgkgICAgIChsaXN0ICJc XFxcXFwodGhlcmU0XFx8c3VwWzEyM11cXHxmcmFjWzEzXVsyNF1cXHxbYS16QS1aXStcXClcXCgk XFx8e31cXHxbXls6YWxwaGE6XV1cXCkiKSkpKQ0KICAgICAobWFwY29uY2F0ICdpZGVudGl0eSAo YXBwZW5kIHJlLWxhdGV4IHJlLWVudGl0aWVzIHJlLXN1YikgIlxcfCIpKSkpDQoNCihkZWZ1biBv cmctZG8tbGF0ZXgtYW5kLXJlbGF0ZWQgKGxpbWl0KQ0KICAiSGlnaGxpZ2h0IExhVGVYIHNuaXBw ZXRzIGFuZCBlbnZpcm9ubWVudHMsIGVudGl0aWVzIGFuZCBzdWIvc3VwZXJzY3JpcHQuDQpMSU1J VCBib3VuZHMgdGhlIHNlYXJjaCBmb3Igc3ludGF4IHRvIGhpZ2hsaWdodC4gIFN0b3AgYXQgZmly c3QNCmhpZ2hsaWdodGVkIG9iamVjdCwgaWYgYW55LiAgUmV0dXJuIHQgaWYgc29tZSBoaWdobGln aHRpbmcgd2FzDQpkb25lLCBuaWwgb3RoZXJ3aXNlLiINCiAgKHdoZW4gKG9yZy1zdHJpbmctbnct cCBvcmctbGF0ZXgtYW5kLXJlbGF0ZWQtcmVnZXhwKQ0KICAgIChjYXRjaCAnZm91bmQNCiAgICAg ICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgb3JnLWxhdGV4LWFuZC1yZWxhdGVkLXJlZ2V4cCBs aW1pdCB0KQ0KCSh1bmxlc3MgKG1lbXEgKGNhci1zYWZlIChnZXQtdGV4dC1wcm9wZXJ0eSAoMSsg KG1hdGNoLWJlZ2lubmluZyAwKSkNCgkJCQkJCSAgICdmYWNlKSkNCgkJICAgICAgJyhvcmctY29k ZSBvcmctdmVyYmF0aW0gdW5kZXJsaW5lKSkNCgkgIChsZXQgKChvZmZzZXQgKGlmIChtZW1xIChj aGFyLWFmdGVyICgxKyAobWF0Y2gtYmVnaW5uaW5nIDApKSkNCgkJCQkgICcoP18gP14pKQ0KCQkJ ICAgIDENCgkJCSAgMCkpKQ0KCSAgICAoZm9udC1sb2NrLXByZXBlbmQtdGV4dC1wcm9wZXJ0eQ0K CSAgICAgKCsgb2Zmc2V0IChtYXRjaC1iZWdpbm5pbmcgMCkpIChtYXRjaC1lbmQgMCkNCgkgICAg ICdmYWNlICdvcmctbGF0ZXgtYW5kLXJlbGF0ZWQpDQoJICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVz ICgrIG9mZnNldCAobWF0Y2gtYmVnaW5uaW5nIDApKSAobWF0Y2gtZW5kIDApDQoJCQkJICcoZm9u dC1sb2NrLW11bHRpbGluZSB0KSkpDQoJICAodGhyb3cgJ2ZvdW5kIHQpKSkNCiAgICAgIG5pbCkp KQ0KDQooZGVmdW4gb3JnLXJlc3RhcnQtZm9udC1sb2NrICgpDQogICJSZXN0YXJ0IGBmb250LWxv Y2stbW9kZScsIHRvIGZvcmNlIHJlZm9udGlmaWNhdGlvbi4iDQogICh3aGVuIChhbmQgKGJvdW5k cCAnZm9udC1sb2NrLW1vZGUpIGZvbnQtbG9jay1tb2RlKQ0KICAgIChmb250LWxvY2stbW9kZSAt MSkNCiAgICAoZm9udC1sb2NrLW1vZGUgMSkpKQ0KDQooZGVmdW4gb3JnLWFsbC10YXJnZXRzICgm b3B0aW9uYWwgcmFkaW8pDQogICJSZXR1cm4gYSBsaXN0IG9mIGFsbCB0YXJnZXRzIGluIHRoaXMg ZmlsZS4NCldoZW4gb3B0aW9uYWwgYXJndW1lbnQgUkFESU8gaXMgbm9uLW5pbCwgb25seSBmaW5k IHJhZGlvDQp0YXJnZXRzLiINCiAgKGxldCAoKHJlIChpZiByYWRpbyBvcmctcmFkaW8tdGFyZ2V0 LXJlZ2V4cCBvcmctdGFyZ2V0LXJlZ2V4cCkpIHJ0bikNCiAgICAoc2F2ZS1leGN1cnNpb24NCiAg ICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQogICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3 YXJkIHJlIG5pbCB0KQ0KCTs7IE1ha2Ugc3VyZSBwb2ludCBpcyByZWFsbHkgd2l0aGluIHRoZSBv YmplY3QuDQoJKGJhY2t3YXJkLWNoYXIpDQoJKGxldCAoKG9iaiAob3JnLWVsZW1lbnQtY29udGV4 dCkpKQ0KCSAgKHdoZW4gKG1lbXEgKG9yZy1lbGVtZW50LXR5cGUgb2JqKSAnKHJhZGlvLXRhcmdl dCB0YXJnZXQpKQ0KCSAgICAoYWRkLXRvLWxpc3QgJ3J0biAoZG93bmNhc2UgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDp2YWx1ZSBvYmopKSkpKSkNCiAgICAgIHJ0bikpKQ0KDQooZGVmdW4gb3JnLW1h a2UtdGFyZ2V0LWxpbmstcmVnZXhwICh0YXJnZXRzKQ0KICAiTWFrZSByZWd1bGFyIGV4cHJlc3Np b24gbWF0Y2hpbmcgYWxsIHN0cmluZ3MgaW4gVEFSR0VUUy4NClRoZSByZWd1bGFyIGV4cHJlc3Np b24gZmluZHMgdGhlIHRhcmdldHMgYWxzbyBpZiB0aGVyZSBpcyBhIGxpbmUgYnJlYWsNCmJldHdl ZW4gd29yZHMuIg0KICAoYW5kIHRhcmdldHMNCiAgICAgICAoY29uY2F0DQoJIlxcXzxcXCgiDQoJ KG1hcGNvbmNhdA0KCSAobGFtYmRhICh4KQ0KCSAgIChzZXRxIHggKHJlZ2V4cC1xdW90ZSB4KSkN CgkgICAod2hpbGUgKHN0cmluZy1tYXRjaCAiICsiIHgpDQoJICAgICAoc2V0cSB4IChyZXBsYWNl LW1hdGNoICJcXHMtKyIgdCB0IHgpKSkNCgkgICB4KQ0KCSB0YXJnZXRzDQoJICJcXHwiKQ0KCSJc XClcXF8+IikpKQ0KDQooZGVmdW4gb3JnLWFjdGl2YXRlLXRhZ3MgKGxpbWl0KQ0KICAoaWYgKHJl LXNlYXJjaC1mb3J3YXJkIChvcmctcmUgIl5cXCorLipbIFx0XVxcKDpbWzphbG51bTpdX0AjJTpd KzpcXClbIFxyXG5dIikgbGltaXQgdCkNCiAgICAgIChwcm9nbg0KCShvcmctcmVtb3ZlLWZseXNw ZWxsLW92ZXJsYXlzLWluIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkNCgkoYWRk LXRleHQtcHJvcGVydGllcyAobWF0Y2gtYmVnaW5uaW5nIDEpIChtYXRjaC1lbmQgMSkNCgkJCSAg ICAgKGxpc3QgJ21vdXNlLWZhY2UgJ2hpZ2hsaWdodA0KCQkJCSAgICdrZXltYXAgb3JnLW1vdXNl LW1hcCkpDQoJKG9yZy1yZWFyLW5vbnN0aWNreS1hdCAobWF0Y2gtZW5kIDEpKQ0KCXQpKSkNCg0K KGRlZnVuIG9yZy1vdXRsaW5lLWxldmVsICgpDQogICJDb21wdXRlIHRoZSBvdXRsaW5lIGxldmVs IG9mIHRoZSBoZWFkaW5nIGF0IHBvaW50Lg0KSWYgdGhpcyBpcyBjYWxsZWQgYXQgYSBub3JtYWwg aGVhZGxpbmUsIHRoZSBsZXZlbCBpcyB0aGUgbnVtYmVyIG9mIHN0YXJzLg0KVXNlIGBvcmctcmVk dWNlZC1sZXZlbCcgdG8gcmVtb3ZlIHRoZSBlZmZlY3Qgb2YgYG9yZy1vZGQtbGV2ZWxzJy4iDQog IChzYXZlLWV4Y3Vyc2lvbg0KICAgIChpZiAobm90IChjb25kaXRpb24tY2FzZSBuaWwNCgkJIChv cmctYmFjay10by1oZWFkaW5nIHQpDQoJICAgICAgIChlcnJvciBuaWwpKSkNCgkwDQogICAgICAo bG9va2luZy1hdCBvcmctb3V0bGluZS1yZWdleHApDQogICAgICAoMS0gKC0gKG1hdGNoLWVuZCAw KSAobWF0Y2gtYmVnaW5uaW5nIDApKSkpKSkNCg0KKGRlZnZhciBvcmctZm9udC1sb2NrLWtleXdv cmRzIG5pbCkNCg0KKGRlZnN1YnN0IG9yZy1yZS1wcm9wZXJ0eSAocHJvcGVydHkgJm9wdGlvbmFs IGxpdGVyYWwgYWxsb3ctbnVsbCkNCiAgIlJldHVybiBhIHJlZ2V4cCBtYXRjaGluZyBhIFBST1BF UlRZIGxpbmUuDQoNCldoZW4gb3B0aW9uYWwgYXJndW1lbnQgTElURVJBTCBpcyBub24tbmlsLCBk byBub3QgcXVvdGUgUFJPUEVSVFkuDQpUaGlzIGlzIHVzZWZ1bCB3aGVuIFBST1BFUlRZIGlzIGEg cmVnZXhwLiAgV2hlbiBBTExPVy1OVUxMIGlzDQpub24tbmlsLCBtYXRjaCBwcm9wZXJ0aWVzIGV2 ZW4gd2l0aG91dCBhIHZhbHVlLg0KDQpNYXRjaCBncm91cCAzIGlzIHNldCB0byB0aGUgdmFsdWUg d2hlbiBpdCBleGlzdHMuICBJZiB0aGVyZSBpcyBubw0KdmFsdWUgYW5kIEFMTE9XLU5VTEwgaXMg bm9uLW5pbCwgaXQgaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcuIg0KICAoY29uY2F0DQogICAi XlxcKD80OlsgXHRdKlxcKSINCiAgIChmb3JtYXQgIlxcKD8xOjpcXCg/Mjolc1xcKTpcXCkiDQoJ ICAgKGlmIGxpdGVyYWwgcHJvcGVydHkgKHJlZ2V4cC1xdW90ZSBwcm9wZXJ0eSkpKQ0KICAgKGlm IGFsbG93LW51bGwNCiAgICAgICAiXFwoPzpcXCg/MzokXFwpXFx8WyBcdF0rXFwoPzM6Lio/XFwp XFwpXFwoPzU6WyBcdF0qXFwpJCINCiAgICAgIlsgXHRdK1xcKD8zOlteIFxyXHRcbl0rLio/XFwp XFwoPzU6WyBcdF0qXFwpJCIpKSkNCg0KKGRlZmNvbnN0IG9yZy1wcm9wZXJ0eS1yZQ0KICAob3Jn LXJlLXByb3BlcnR5ICIuKj8iICdsaXRlcmFsIHQpDQogICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0 Y2hpbmcgYSBwcm9wZXJ0eSBsaW5lLg0KVGhlcmUgYXJlIGZvdXIgbWF0Y2hpbmcgZ3JvdXBzOg0K MTogOlBST1BLRVk6IGluY2x1ZGluZyB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgY29sb24sDQoy OiBQUk9QS0VZIHdpdGhvdXQgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbG9uLA0KMzogUFJP UFZBTCB3aXRob3V0IGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2VzLA0KNDogdGhlIGluZGVudGF0 aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUsDQo1OiB0cmFpbGluZyB3aGl0ZXNwYWNlLiIpDQoNCihk ZWZ2YXIgb3JnLWZvbnQtbG9jay1ob29rIG5pbA0KICAiRnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBm b3Igc3BlY2lhbCBmb250IGxvY2sgc3R1ZmYuIikNCg0KKGRlZnZhciBvcmctZm9udC1sb2NrLXNl dC1rZXl3b3Jkcy1ob29rIG5pbA0KICAiRnVuY3Rpb25zIHRoYXQgY2FuIG1hbmlwdWxhdGUgYG9y Zy1mb250LWxvY2stZXh0cmEta2V5d29yZHMnLg0KVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgYG9yZy1m b250LWxvY2stZXh0cmEta2V5d29yZHMnIGlzIGRlZmluZWQsIGJ1dCBiZWZvcmUNCml0IGlzIGlu c3RhbGxlZCB0byBiZSB1c2VkIGJ5IGZvbnQgbG9jay4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiBz b21ldGhpbmcNCm5lZWRzIHRvIGJlIGluc2VydGVkIGF0IGEgc3BlY2lmaWMgcG9zaXRpb24gaW4g dGhlIGZvbnQtbG9jayBzZXF1ZW5jZS4iKQ0KDQooZGVmdW4gb3JnLWZvbnQtbG9jay1ob29rIChs aW1pdCkNCiAgIlJ1biBgb3JnLWZvbnQtbG9jay1ob29rJyB3aXRoaW4gTElNSVQuIg0KICAocnVu LWhvb2std2l0aC1hcmdzICdvcmctZm9udC1sb2NrLWhvb2sgbGltaXQpKQ0KDQooZGVmdW4gb3Jn LXNldC1mb250LWxvY2stZGVmYXVsdHMgKCkNCiAgIlNldCBmb250IGxvY2sgZGVmYXVsdHMgZm9y IHRoZSBjdXJyZW50IGJ1ZmZlci4iDQogIChsZXQqICgoZW0gb3JnLWZvbnRpZnktZW1waGFzaXpl ZC10ZXh0KQ0KCSAobGsgb3JnLWFjdGl2YXRlLWxpbmtzKQ0KCSAob3JnLWZvbnQtbG9jay1leHRy YS1rZXl3b3Jkcw0KCSAgKGxpc3QNCgkgICA7OyBDYWxsIHRoZSBob29rDQoJICAgJyhvcmctZm9u dC1sb2NrLWhvb2spDQoJICAgOzsgSGVhZGxpbmVzDQoJICAgYCgsKGlmIG9yZy1mb250aWZ5LXdo b2xlLWhlYWRpbmctbGluZQ0KCQkgICJeXFwoXFwqKlxcKVxcKFxcKiBcXClcXCguKlxuP1xcKSIN CgkJIl5cXChcXCoqXFwpXFwoXFwqIFxcKVxcKC4qXFwpIikNCgkgICAgICgxIChvcmctZ2V0LWxl dmVsLWZhY2UgMSkpDQoJICAgICAoMiAob3JnLWdldC1sZXZlbC1mYWNlIDIpKQ0KCSAgICAgKDMg KG9yZy1nZXQtbGV2ZWwtZmFjZSAzKSkpDQoJICAgOzsgVGFibGUgbGluZXMNCgkgICAnKCJeWyBc dF0qXFwoXFwofFxcfFxcKy1bLStdXFwpLipcXFMtXFwpIg0KCSAgICAgKDEgJ29yZy10YWJsZSB0 KSkNCgkgICA7OyBUYWJsZSBpbnRlcm5hbHMNCgkgICAnKCJeWyBcdF0qfFxcKD86Lio/fFxcKT8g KlxcKDo/PVtefFxuXSpcXCkiICgxICdvcmctZm9ybXVsYSB0KSkNCgkgICAnKCJeWyBcdF0qfCAq XFwoWyMqXVxcKSAqfCIgKDEgJ29yZy1mb3JtdWxhIHQpKQ0KCSAgICcoIl5bIFx0XSp8XFwoICpc XChbJCFfXi9dXFwpICp8LipcXCl8IiAoMSAnb3JnLWZvcm11bGEgdCkpDQoJICAgJygifCAqXFwo PFtscmNdP1swLTldKj5cXCkiICgxICdvcmctZm9ybXVsYSB0KSkNCgkgICA7OyBEcmF3ZXJzDQoJ ICAgKGxpc3Qgb3JnLWRyYXdlci1yZWdleHAgJygwICdvcmctc3BlY2lhbC1rZXl3b3JkIHQpKQ0K CSAgIChsaXN0ICJeWyBcdF0qOkVORDoiICcoMCAnb3JnLXNwZWNpYWwta2V5d29yZCB0KSkNCgkg ICA7OyBQcm9wZXJ0aWVzDQoJICAgKGxpc3Qgb3JnLXByb3BlcnR5LXJlDQoJCSAnKDEgJ29yZy1z cGVjaWFsLWtleXdvcmQgdCkNCgkJICcoMyAnb3JnLXByb3BlcnR5LXZhbHVlIHQpKQ0KCSAgIDs7 IExpbmtzDQoJICAgKGlmIChtZW1xICd0YWcgbGspICcob3JnLWFjdGl2YXRlLXRhZ3MgKDEgJ29y Zy10YWcgcHJlcGVuZCkpKQ0KCSAgIChpZiAobWVtcSAnYW5nbGUgbGspICcob3JnLWFjdGl2YXRl LWFuZ2xlLWxpbmtzICgwICdvcmctbGluayB0KSkpDQoJICAgKGlmIChtZW1xICdwbGFpbiBsaykg JyhvcmctYWN0aXZhdGUtcGxhaW4tbGlua3MgKDAgJ29yZy1saW5rIHQpKSkNCgkgICAoaWYgKG1l bXEgJ2JyYWNrZXQgbGspICcob3JnLWFjdGl2YXRlLWJyYWNrZXQtbGlua3MgKDAgJ29yZy1saW5r IHQpKSkNCgkgICAoaWYgKG1lbXEgJ3JhZGlvIGxrKSAnKG9yZy1hY3RpdmF0ZS10YXJnZXQtbGlu a3MgKDAgJ29yZy1saW5rIHQpKSkNCgkgICAoaWYgKG1lbXEgJ2RhdGUgbGspICcob3JnLWFjdGl2 YXRlLWRhdGVzICgwICdvcmctZGF0ZSB0KSkpDQoJICAgKGlmIChtZW1xICdmb290bm90ZSBsaykg JyhvcmctYWN0aXZhdGUtZm9vdG5vdGUtbGlua3MpKQ0KICAgICAgICAgICA7OyBUYXJnZXRzLg0K ICAgICAgICAgICAobGlzdCBvcmctYW55LXRhcmdldC1yZWdleHAgJygwICdvcmctdGFyZ2V0IHQp KQ0KCSAgIDs7IERpYXJ5IHNleHBzLg0KCSAgICcoIl4mPyUlKC4qXFx8PCUlKFtePlxuXSo/PiIg KDAgJ29yZy1zZXhwLWRhdGUgdCkpDQoJICAgOzsgTWFjcm8NCgkgICAnKCJ7e3suK319fSIgKDAg J29yZy1tYWNybyB0KSkNCgkgICAnKG9yZy1oaWRlLXdpZGUtY29sdW1ucyAoMCBuaWwgYXBwZW5k KSkNCgkgICA7OyBUT0RPIGtleXdvcmQNCgkgICAobGlzdCAoZm9ybWF0IG9yZy1oZWFkaW5nLWtl eXdvcmQtcmVnZXhwLWZvcm1hdA0KCQkJIG9yZy10b2RvLXJlZ2V4cCkNCgkJICcoMiAob3JnLWdl dC10b2RvLWZhY2UgMikgdCkpDQoJICAgOzsgRE9ORQ0KCSAgIChpZiBvcmctZm9udGlmeS1kb25l LWhlYWRsaW5lDQoJICAgICAgIChsaXN0IChmb3JtYXQgb3JnLWhlYWRpbmcta2V5d29yZC1yZWdl eHAtZm9ybWF0DQoJCQkgICAgIChjb25jYXQNCgkJCSAgICAgICJcXCg/OiINCgkJCSAgICAgICht YXBjb25jYXQgJ3JlZ2V4cC1xdW90ZSBvcmctZG9uZS1rZXl3b3JkcyAiXFx8IikNCgkJCSAgICAg ICJcXCkiKSkNCgkJICAgICAnKDIgJ29yZy1oZWFkbGluZS1kb25lIHQpKQ0KCSAgICAgbmlsKQ0K CSAgIDs7IFByaW9yaXRpZXMNCgkgICAnKG9yZy1mb250LWxvY2stYWRkLXByaW9yaXR5LWZhY2Vz KQ0KCSAgIDs7IFRhZ3MNCgkgICAnKG9yZy1mb250LWxvY2stYWRkLXRhZy1mYWNlcykNCgkgICA7 OyBUYWdzIGdyb3Vwcw0KCSAgIChpZiAoYW5kIG9yZy1ncm91cC10YWdzIG9yZy10YWctZ3JvdXBz LWFsaXN0KQ0KCSAgICAgICAobGlzdCAoY29uY2F0IG9yZy1vdXRsaW5lLXJlZ2V4cC1ib2wgIi4r XFwoOiINCgkJCSAgICAgKHJlZ2V4cC1vcHQgKG1hcGNhciAnY2FyIG9yZy10YWctZ3JvdXBzLWFs aXN0KSkNCgkJCSAgICAgIjpcXCkuKiQiKQ0KCQkgICAgICcoMSAnb3JnLXRhZy1ncm91cCBwcmVw ZW5kKSkpDQoJICAgOzsgU3BlY2lhbCBrZXl3b3Jkcw0KCSAgIChsaXN0IChjb25jYXQgIlxcPCIg b3JnLWRlYWRsaW5lLXN0cmluZykgJygwICdvcmctc3BlY2lhbC1rZXl3b3JkIHQpKQ0KCSAgIChs aXN0IChjb25jYXQgIlxcPCIgb3JnLXNjaGVkdWxlZC1zdHJpbmcpICcoMCAnb3JnLXNwZWNpYWwt a2V5d29yZCB0KSkNCgkgICAobGlzdCAoY29uY2F0ICJcXDwiIG9yZy1jbG9zZWQtc3RyaW5nKSAn KDAgJ29yZy1zcGVjaWFsLWtleXdvcmQgdCkpDQoJICAgKGxpc3QgKGNvbmNhdCAiXFw8IiBvcmct Y2xvY2stc3RyaW5nKSAnKDAgJ29yZy1zcGVjaWFsLWtleXdvcmQgdCkpDQoJICAgOzsgRW1waGFz aXMNCgkgICAoaWYgZW0NCiAgICAgICAgICAgICAgIChpZiAoZmVhdHVyZXAgJ3hlbWFjcykNCiAg ICAgICAgICAgICAgICAgICAnKG9yZy1kby1lbXBoYXNpcy1mYWNlcyAoMCBuaWwgYXBwZW5kKSkN CiAgICAgICAgICAgICAgICAgJyhvcmctZG8tZW1waGFzaXMtZmFjZXMpKSkNCgkgICA7OyBDaGVj a2JveGVzDQoJICAgJygiXlsgXHRdKlxcKD86Wy0rKl1cXHxbMC05XStbLildXFwpWyBcdF0rXFwo PzpcXFtAXFwoPzpzdGFydDpcXCk/WzAtOV0rXFxdWyBcdF0qXFwpP1xcKFxcW1stIFhdXFxdXFwp Ig0KCSAgICAgMSAnb3JnLWNoZWNrYm94IHByZXBlbmQpDQoJICAgKGlmIChjZHIgKGFzc3EgJ2No ZWNrYm94IG9yZy1saXN0LWF1dG9tYXRpYy1ydWxlcykpDQoJICAgICAgICcoIlxcW1xcKFswLTld KiVcXClcXF1cXHxcXFtcXChbMC05XSpcXCkvXFwoWzAtOV0qXFwpXFxdIg0KCQkgKDAgKG9yZy1n ZXQtY2hlY2tib3gtc3RhdGlzdGljcy1mYWNlKSB0KSkpDQoJICAgOzsgRGVzY3JpcHRpb24gbGlz dCBpdGVtcw0KCSAgICcoIl5bIFx0XSpbLSsqXVsgXHRdK1xcKC4qP1sgXHRdKzo6XFwpXFwoWyBc dF0rXFx8JFxcKSINCgkgICAgIDEgJ29yZy1saXN0LWR0IHByZXBlbmQpDQoJICAgOzsgQVJDSElW RWQgaGVhZGluZ3MNCgkgICAobGlzdCAoY29uY2F0DQoJCSAgb3JnLW91dGxpbmUtcmVnZXhwLWJv bA0KCQkgICJcXCguKjoiIG9yZy1hcmNoaXZlLXRhZyAiOi4qXFwpIikNCgkJICcoMSAnb3JnLWFy Y2hpdmVkIHByZXBlbmQpKQ0KCSAgIDs7IFNwZWNpYWxzDQoJICAgJyhvcmctZG8tbGF0ZXgtYW5k LXJlbGF0ZWQpDQoJICAgJyhvcmctZm9udGlmeS1lbnRpdGllcykNCgkgICAnKG9yZy1yYWlzZS1z Y3JpcHRzKQ0KCSAgIDs7IENvZGUNCgkgICAnKG9yZy1hY3RpdmF0ZS1jb2RlICgxICdvcmctY29k ZSB0KSkNCgkgICA7OyBDT01NRU5UDQoJICAgKGxpc3QgKGZvcm1hdCBvcmctaGVhZGluZy1rZXl3 b3JkLXJlZ2V4cC1mb3JtYXQNCgkJCSAoY29uY2F0ICJcXCgiDQoJCQkJIG9yZy1jb21tZW50LXN0 cmluZyAiXFx8IiBvcmctcXVvdGUtc3RyaW5nDQoJCQkJICJcXCkiKSkNCgkJICcoMiAnb3JnLXNw ZWNpYWwta2V5d29yZCB0KSkNCgkgICA7OyBCbG9ja3MgYW5kIG1ldGEgbGluZXMNCgkgICAnKG9y Zy1mb250aWZ5LW1ldGEtbGluZXMtYW5kLWJsb2NrcykpKSkNCiAgICAoc2V0cSBvcmctZm9udC1s b2NrLWV4dHJhLWtleXdvcmRzIChkZWxxIG5pbCBvcmctZm9udC1sb2NrLWV4dHJhLWtleXdvcmRz KSkNCiAgICAocnVuLWhvb2tzICdvcmctZm9udC1sb2NrLXNldC1rZXl3b3Jkcy1ob29rKQ0KICAg IDs7IE5vdyBzZXQgdGhlIGZ1bGwgZm9udC1sb2NrLWtleXdvcmRzDQogICAgKG9yZy1zZXQtbG9j YWwgJ29yZy1mb250LWxvY2sta2V5d29yZHMgb3JnLWZvbnQtbG9jay1leHRyYS1rZXl3b3JkcykN CiAgICAob3JnLXNldC1sb2NhbCAnZm9udC1sb2NrLWRlZmF1bHRzDQoJCSAgICcob3JnLWZvbnQt bG9jay1rZXl3b3JkcyB0IG5pbCBuaWwgYmFja3dhcmQtcGFyYWdyYXBoKSkNCiAgICAoa2lsbC1s b2NhbC12YXJpYWJsZSAnZm9udC1sb2NrLWtleXdvcmRzKSBuaWwpKQ0KDQooZGVmdW4gb3JnLXRv Z2dsZS1wcmV0dHktZW50aXRpZXMgKCkNCiAgIlRvZ2dsZSB0aGUgY29tcG9zaXRpb24gZGlzcGxh eSBvZiBlbnRpdGllcyBhcyBVVEY4IGNoYXJhY3RlcnMuIg0KICAoaW50ZXJhY3RpdmUpDQogIChv cmctc2V0LWxvY2FsICdvcmctcHJldHR5LWVudGl0aWVzIChub3Qgb3JnLXByZXR0eS1lbnRpdGll cykpDQogIChvcmctcmVzdGFydC1mb250LWxvY2spDQogIChpZiBvcmctcHJldHR5LWVudGl0aWVz DQogICAgICAobWVzc2FnZSAiRW50aXRpZXMgYXJlIG5vdyBkaXNwbGF5ZWQgYXMgVVRGOCBjaGFy YWN0ZXJzIikNCiAgICAoc2F2ZS1yZXN0cmljdGlvbg0KICAgICAgKHdpZGVuKQ0KICAgICAgKG9y Zy1kZWNvbXBvc2UtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQ0KICAgICAgKG1lc3Nh Z2UgIkVudGl0aWVzIGFyZSBub3cgZGlzcGxheWVkIGFzIHBsYWluIHRleHQiKSkpKQ0KDQooZGVm dmFyIG9yZy1jdXN0b20tcHJvcGVydGllcy1vdmVybGF5cyBuaWwNCiAgIkxpc3Qgb2Ygb3Zlcmxh eXMgdXNlZCBmb3IgY3VzdG9tIHByb3BlcnRpZXMuIikNCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1s b2NhbCAnb3JnLWN1c3RvbS1wcm9wZXJ0aWVzLW92ZXJsYXlzKQ0KDQooZGVmdW4gb3JnLXRvZ2ds ZS1jdXN0b20tcHJvcGVydGllcy12aXNpYmlsaXR5ICgpDQogICJEaXNwbGF5IG9yIGhpZGUgcHJv cGVydGllcyBpbiBgb3JnLWN1c3RvbS1wcm9wZXJ0aWVzJy4iDQogIChpbnRlcmFjdGl2ZSkNCiAg KGlmIG9yZy1jdXN0b20tcHJvcGVydGllcy1vdmVybGF5cw0KICAgICAgKHByb2duIChtYXBjICdk ZWxldGUtb3ZlcmxheSBvcmctY3VzdG9tLXByb3BlcnRpZXMtb3ZlcmxheXMpDQoJICAgICAoc2V0 cSBvcmctY3VzdG9tLXByb3BlcnRpZXMtb3ZlcmxheXMgbmlsKSkNCiAgICAodW5sZXNzIChub3Qg b3JnLWN1c3RvbS1wcm9wZXJ0aWVzKQ0KICAgICAgKHNhdmUtZXhjdXJzaW9uDQoJKHNhdmUtcmVz dHJpY3Rpb24NCgkgICh3aWRlbikNCgkgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQoJICAod2hp bGUgKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy1wcm9wZXJ0eS1yZSBuaWwgdCkNCgkgICAgKG1hcGMg KGxhbWJkYShwKQ0KCQkgICAgKHdoZW4gKGVxdWFsIHAgKHN1YnN0cmluZyAobWF0Y2gtc3RyaW5n IDEpIDEgLTEpKQ0KCQkgICAgICAobGV0ICgobyAobWFrZS1vdmVybGF5IChtYXRjaC1iZWdpbm5p bmcgMCkgKDErIChtYXRjaC1lbmQgMCkpKSkpDQoJCQkob3ZlcmxheS1wdXQgbyAnaW52aXNpYmxl IHQpDQoJCQkob3ZlcmxheS1wdXQgbyAnb3JnLWN1c3RvbS1wcm9wZXJ0eSB0KQ0KCQkJKHB1c2gg byBvcmctY3VzdG9tLXByb3BlcnRpZXMtb3ZlcmxheXMpKSkpDQoJCSAgb3JnLWN1c3RvbS1wcm9w ZXJ0aWVzKSkpKSkpKQ0KDQooZGVmdW4gb3JnLWZvbnRpZnktZW50aXRpZXMgKGxpbWl0KQ0KICAi RmluZCBhbiBlbnRpdHkgdG8gZm9udGlmeS4iDQogIChsZXQgKGVlKQ0KICAgICh3aGVuIG9yZy1w cmV0dHktZW50aXRpZXMNCiAgICAgIChjYXRjaCAnbWF0Y2gNCgkod2hpbGUgKHJlLXNlYXJjaC1m b3J3YXJkDQoJCSJcXFxcXFwodGhlcmU0XFx8c3VwWzEyM11cXHxmcmFjWzEzXVsyNF1cXHxbYS16 QS1aXStcXClcXCgkXFx8e31cXHxbXls6YWxwaGE6XVxuXVxcKSINCgkJbGltaXQgdCkNCgkgIChp ZiAoYW5kIChub3QgKG9yZy1pbi1pbmRlbnRlZC1jb21tZW50LWxpbmUpKQ0KCQkgICAoc2V0cSBl ZSAob3JnLWVudGl0eS1nZXQgKG1hdGNoLXN0cmluZyAxKSkpDQoJCSAgICg9IChsZW5ndGggKG50 aCA2IGVlKSkgMSkpDQoJICAgICAgKGxldCoNCgkJICAoKGVuZCAoaWYgKGVxdWFsIChtYXRjaC1z dHJpbmcgMikgInt9IikNCgkJCSAgICAobWF0Y2gtZW5kIDIpDQoJCQkgIChtYXRjaC1lbmQgMSkp KSkNCgkJKGFkZC10ZXh0LXByb3BlcnRpZXMNCgkJIChtYXRjaC1iZWdpbm5pbmcgMCkgZW5kDQoJ CSAobGlzdCAnZm9udC1sb2NrLWZvbnRpZmllZCB0KSkNCgkJKGNvbXBvc2UtcmVnaW9uIChtYXRj aC1iZWdpbm5pbmcgMCkgZW5kDQoJCQkJKG50aCA2IGVlKSBuaWwpDQoJCShiYWNrd2FyZC1jaGFy IDEpDQoJCSh0aHJvdyAnbWF0Y2ggdCkpKSkNCgluaWwpKSkpDQoNCihkZWZ1biBvcmctZm9udGlm eS1saWtlLWluLW9yZy1tb2RlIChzICZvcHRpb25hbCBvZGQtbGV2ZWxzKQ0KICAiRm9udGlmeSBz dHJpbmcgUyBsaWtlIGluIE9yZy1tb2RlLiINCiAgKHdpdGgtdGVtcC1idWZmZXINCiAgICAoaW5z ZXJ0IHMpDQogICAgKGxldCAoKG9yZy1vZGQtbGV2ZWxzLW9ubHkgb2RkLWxldmVscykpDQogICAg ICAob3JnLW1vZGUpDQogICAgICAoZm9udC1sb2NrLWZvbnRpZnktYnVmZmVyKQ0KICAgICAgKGJ1 ZmZlci1zdHJpbmcpKSkpDQoNCihkZWZ2YXIgb3JnLW0gbmlsKQ0KKGRlZnZhciBvcmctbCBuaWwp DQooZGVmdmFyIG9yZy1mIG5pbCkNCihkZWZ1biBvcmctZ2V0LWxldmVsLWZhY2UgKG4pDQogICJH ZXQgdGhlIHJpZ2h0IGZhY2UgZm9yIG1hdGNoIE4gaW4gZm9udC1sb2NrIG1hdGNoaW5nIG9mIGhl YWRsaW5lcy4iDQogIChzZXRxIG9yZy1sICgtIChtYXRjaC1lbmQgMikgKG1hdGNoLWJlZ2lubmlu ZyAxKSAxKSkNCiAgKGlmIG9yZy1vZGQtbGV2ZWxzLW9ubHkgKHNldHEgb3JnLWwgKDErICgvIG9y Zy1sIDIpKSkpDQogIChpZiBvcmctY3ljbGUtbGV2ZWwtZmFjZXMNCiAgICAgIChzZXRxIG9yZy1m IChudGggKCUgKDEtIG9yZy1sKSBvcmctbi1sZXZlbC1mYWNlcykgb3JnLWxldmVsLWZhY2VzKSkN CiAgICAoc2V0cSBvcmctZiAobnRoICgxLSAobWluIG9yZy1sIG9yZy1uLWxldmVsLWZhY2VzKSkg b3JnLWxldmVsLWZhY2VzKSkpDQogIChjb25kDQogICAoKGVxIG4gMSkgKGlmIG9yZy1oaWRlLWxl YWRpbmctc3RhcnMgJ29yZy1oaWRlIG9yZy1mKSkNCiAgICgoZXEgbiAyKSBvcmctZikNCiAgICh0 IChpZiBvcmctbGV2ZWwtY29sb3Itc3RhcnMtb25seSBuaWwgb3JnLWYpKSkpDQoNCg0KKGRlZnVu IG9yZy1nZXQtdG9kby1mYWNlIChrd2QpDQogICJHZXQgdGhlIHJpZ2h0IGZhY2UgZm9yIGEgVE9E TyBrZXl3b3JkIEtXRC4NCklmIEtXRCBpcyBhIG51bWJlciwgZ2V0IHRoZSBjb3JyZXNwb25kaW5n IG1hdGNoIGdyb3VwLiINCiAgKGlmIChudW1iZXJwIGt3ZCkgKHNldHEga3dkIChtYXRjaC1zdHJp bmcga3dkKSkpDQogIChvciAob3JnLWZhY2UtZnJvbS1mYWNlLW9yLWNvbG9yDQogICAgICAgJ3Rv ZG8gJ29yZy10b2RvIChjZHIgKGFzc29jIGt3ZCBvcmctdG9kby1rZXl3b3JkLWZhY2VzKSkpDQog ICAgICAoYW5kIChtZW1iZXIga3dkIG9yZy1kb25lLWtleXdvcmRzKSAnb3JnLWRvbmUpDQogICAg ICAnb3JnLXRvZG8pKQ0KDQooZGVmdW4gb3JnLWZhY2UtZnJvbS1mYWNlLW9yLWNvbG9yIChjb250 ZXh0IGluaGVyaXQgZmFjZS1vci1jb2xvcikNCiAgIkNyZWF0ZSBhIGZhY2UgbGlzdCB0aGF0IGlu aGVyaXRzIElOSEVSSVQsIGJ1dCBzZXRzIHRoZSBmb3JlZ3JvdW5kIGNvbG9yLg0KV2hlbiBGQUNF LU9SLUNPTE9SIGlzIG5vdCBhIHN0cmluZywganVzdCByZXR1cm4gaXQuIg0KICAoaWYgKHN0cmlu Z3AgZmFjZS1vci1jb2xvcikNCiAgICAgIChsaXN0IDppbmhlcml0IGluaGVyaXQNCgkgICAgKGNk ciAoYXNzb2MgY29udGV4dCBvcmctZmFjZXMtZWFzeS1wcm9wZXJ0aWVzKSkNCgkgICAgZmFjZS1v ci1jb2xvcikNCiAgICBmYWNlLW9yLWNvbG9yKSkNCg0KKGRlZnVuIG9yZy1mb250LWxvY2stYWRk LXRhZy1mYWNlcyAobGltaXQpDQogICJBZGQgdGhlIHNwZWNpYWwgdGFnIGZhY2VzLiINCiAgKHdo ZW4gKGFuZCBvcmctdGFnLWZhY2VzIG9yZy10YWdzLXNwZWNpYWwtZmFjZXMtcmUpDQogICAgKHdo aWxlIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctdGFncy1zcGVjaWFsLWZhY2VzLXJlIGxpbWl0IHQp DQogICAgICAoYWRkLXRleHQtcHJvcGVydGllcyAobWF0Y2gtYmVnaW5uaW5nIDEpIChtYXRjaC1l bmQgMSkNCgkJCSAgIChsaXN0ICdmYWNlIChvcmctZ2V0LXRhZy1mYWNlIDEpDQoJCQkJICdmb250 LWxvY2stZm9udGlmaWVkIHQpKQ0KICAgICAgKGJhY2t3YXJkLWNoYXIgMSkpKSkNCg0KKGRlZnVu IG9yZy1mb250LWxvY2stYWRkLXByaW9yaXR5LWZhY2VzIChsaW1pdCkNCiAgIkFkZCB0aGUgc3Bl Y2lhbCBwcmlvcml0eSBmYWNlcy4iDQogICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgIlxcWyNc XChbQS1aMC05XVxcKVxcXSIgbGltaXQgdCkNCiAgICAod2hlbiAoc2F2ZS1tYXRjaC1kYXRhIChv cmctYXQtaGVhZGluZy1wKSkNCiAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzDQogICAgICAgKG1h dGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApDQogICAgICAgKGxpc3QgJ2ZhY2UgKG9yIChv cmctZmFjZS1mcm9tLWZhY2Utb3ItY29sb3INCgkJCSdwcmlvcml0eSAnb3JnLXByaW9yaXR5DQoJ CQkoY2RyIChhc3NvYyAoY2hhci1hZnRlciAobWF0Y2gtYmVnaW5uaW5nIDEpKQ0KCQkJCSAgICBv cmctcHJpb3JpdHktZmFjZXMpKSkNCgkJICAgICAgICdvcmctcHJpb3JpdHkpDQoJICAgICAnZm9u dC1sb2NrLWZvbnRpZmllZCB0KSkpKSkNCg0KKGRlZnVuIG9yZy1nZXQtdGFnLWZhY2UgKGt3ZCkN CiAgIkdldCB0aGUgcmlnaHQgZmFjZSBmb3IgYSBUT0RPIGtleXdvcmQgS1dELg0KSWYgS1dEIGlz IGEgbnVtYmVyLCBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgbWF0Y2ggZ3JvdXAuIg0KICAoaWYgKG51 bWJlcnAga3dkKSAoc2V0cSBrd2QgKG1hdGNoLXN0cmluZyBrd2QpKSkNCiAgKG9yIChvcmctZmFj ZS1mcm9tLWZhY2Utb3ItY29sb3INCiAgICAgICAndGFnICdvcmctdGFnIChjZHIgKGFzc29jIGt3 ZCBvcmctdGFnLWZhY2VzKSkpDQogICAgICAnb3JnLXRhZykpDQoNCihkZWZ1biBvcmctdW5mb250 aWZ5LXJlZ2lvbiAoYmVnIGVuZCAmb3B0aW9uYWwgbWF5YmVfbG91ZGx5KQ0KICAiUmVtb3ZlIGZv bnRpZmljYXRpb24gYW5kIGFjdGl2YXRpb24gb3ZlcmxheXMgZnJvbSBsaW5rcy4iDQogIChmb250 LWxvY2stZGVmYXVsdC11bmZvbnRpZnktcmVnaW9uIGJlZyBlbmQpDQogIChsZXQqICgoYnVmZmVy LXVuZG8tbGlzdCB0KQ0KCSAoaW5oaWJpdC1yZWFkLW9ubHkgdCkgKGluaGliaXQtcG9pbnQtbW90 aW9uLWhvb2tzIHQpDQoJIChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KQ0KCSBkZWFjdGl2 YXRlLW1hcmsgYnVmZmVyLWZpbGUtbmFtZSBidWZmZXItZmlsZS10cnVlbmFtZSkNCiAgICAob3Jn LWRlY29tcG9zZS1yZWdpb24gYmVnIGVuZCkNCiAgICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyBi ZWcgZW5kDQoJCQkgICAgJyhtb3VzZS1mYWNlIHQga2V5bWFwIHQgb3JnLWxpbmtlZC10ZXh0IHQN CgkJCQkJIGludmlzaWJsZSB0IGludGFuZ2libGUgdA0KCQkJCQkgb3JnLW5vLWZseXNwZWxsIHQg b3JnLWVtcGhhc2lzIHQpKQ0KICAgIChvcmctcmVtb3ZlLWZvbnQtbG9jay1kaXNwbGF5LXByb3Bl cnRpZXMgYmVnIGVuZCkpKQ0KDQooZGVmY29uc3Qgb3JnLXNjcmlwdC1kaXNwbGF5ICAnKCgocmFp c2UgLTAuMykgKGhlaWdodCAwLjcpKQ0KCQkJCSgocmFpc2UgMC4zKSAgKGhlaWdodCAwLjcpKQ0K CQkJCSgocmFpc2UgLTAuNSkpDQoJCQkJKChyYWlzZSAwLjUpKSkNCiAgIkRpc3BsYXkgcHJvcGVy dGllcyBmb3Igc2hvd2luZyBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIikNCg0KKGRlZnVu IG9yZy1yZW1vdmUtZm9udC1sb2NrLWRpc3BsYXktcHJvcGVydGllcyAoYmVnIGVuZCkNCiAgIlJl bW92ZSBzcGVjaWZpYyBkaXNwbGF5IHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgYnkg Zm9udCBsb2NrLg0KVGhlIHdpbGwgcmVtb3ZlIHRoZSByYWlzZSBwcm9wZXJ0aWVzIHRoYXQgYXJl IHVzZWQgdG8gc2hvdyBzdXBlcnNjcmlwdHMNCmFuZCBzdWJzY3JpcHRzLiINCiAgKGxldCAobmV4 dCBwcm9wKQ0KICAgICh3aGlsZSAoPCBiZWcgZW5kKQ0KICAgICAgKHNldHEgbmV4dCAobmV4dC1z aW5nbGUtcHJvcGVydHktY2hhbmdlIGJlZyAnZGlzcGxheSBuaWwgZW5kKQ0KCSAgICBwcm9wIChn ZXQtdGV4dC1wcm9wZXJ0eSBiZWcgJ2Rpc3BsYXkpKQ0KICAgICAgKGlmIChtZW1iZXIgcHJvcCBv cmctc2NyaXB0LWRpc3BsYXkpDQoJICAocHV0LXRleHQtcHJvcGVydHkgYmVnIG5leHQgJ2Rpc3Bs YXkgbmlsKSkNCiAgICAgIChzZXRxIGJlZyBuZXh0KSkpKQ0KDQooZGVmdW4gb3JnLXJhaXNlLXNj cmlwdHMgKGxpbWl0KQ0KICAiQWRkIHJhaXNlIHByb3BlcnRpZXMgdG8gc3ViL3N1cGVyc2NyaXB0 cy4iDQogICh3aGVuIChhbmQgb3JnLXByZXR0eS1lbnRpdGllcyBvcmctcHJldHR5LWVudGl0aWVz LWluY2x1ZGUtc3ViLXN1cGVyc2NyaXB0cykNCiAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkDQoJ IChpZiAoZXEgb3JnLXVzZS1zdWItc3VwZXJzY3JpcHRzIHQpDQoJICAgICBvcmctbWF0Y2gtc3Vi c3RyaW5nLXJlZ2V4cA0KCSAgIG9yZy1tYXRjaC1zdWJzdHJpbmctd2l0aC1icmFjZXMtcmVnZXhw KQ0KCSBsaW1pdCB0KQ0KCShsZXQqICgocG9zIChwb2ludCkpIHRhYmxlLXAgY29tbWVudC1wDQoJ ICAgICAgIChtcG9zIChtYXRjaC1iZWdpbm5pbmcgMykpDQoJICAgICAgIChlbXBoLXAgKGdldC10 ZXh0LXByb3BlcnR5IG1wb3MgJ29yZy1lbXBoYXNpcykpDQoJICAgICAgIChsaW5rLXAgKGdldC10 ZXh0LXByb3BlcnR5IG1wb3MgJ21vdXNlLWZhY2UpKQ0KCSAgICAgICAoa2V5dy1wIChlcSAnb3Jn LXNwZWNpYWwta2V5d29yZCAoZ2V0LXRleHQtcHJvcGVydHkgbXBvcyAnZmFjZSkpKSkNCgkgIChn b3RvLWNoYXIgKHBvaW50LWF0LWJvbCkpDQoJICAoc2V0cSB0YWJsZS1wIChvcmctbG9va2luZy1h dC1wIG9yZy10YWJsZS1kYXRhbGluZS1yZWdleHApDQoJCWNvbW1lbnQtcCAob3JnLWxvb2tpbmct YXQtcCAiXlsgXHRdKiNbICtdIikpDQoJICAoZ290by1jaGFyIHBvcykNCgkgIDs7IEhhbmRsZSBh X2JeYw0KCSAgKGlmIChtZW1iZXIgKGNoYXItYWZ0ZXIpICcoP18gP14pKSAoZ290by1jaGFyICgx LSBwb3MpKSkNCgkgIChpZiAob3IgY29tbWVudC1wIGVtcGgtcCBsaW5rLXAga2V5dy1wKQ0KCSAg ICAgIHQNCgkgICAgKHB1dC10ZXh0LXByb3BlcnR5IChtYXRjaC1iZWdpbm5pbmcgMykgKG1hdGNo LWVuZCAwKQ0KCQkJICAgICAgICdkaXNwbGF5DQoJCQkgICAgICAgKGlmIChlcXVhbCAoY2hhci1h ZnRlciAobWF0Y2gtYmVnaW5uaW5nIDIpKSA/XikNCgkJCQkgICAobnRoIChpZiB0YWJsZS1wIDMg MSkgb3JnLXNjcmlwdC1kaXNwbGF5KQ0KCQkJCSAobnRoIChpZiB0YWJsZS1wIDIgMCkgb3JnLXNj cmlwdC1kaXNwbGF5KSkpDQoJICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIChtYXRjaC1iZWdpbm5p bmcgMikgKG1hdGNoLWVuZCAyKQ0KCQkJCSAobGlzdCAnaW52aXNpYmxlIHQNCgkJCQkgICAgICAg J29yZy1kd2lkdGggdCAnb3JnLWR3aWR0aC1uIDEpKQ0KCSAgICAoaWYgKGFuZCAoZXEgKGNoYXIt YWZ0ZXIgKG1hdGNoLWJlZ2lubmluZyAzKSkgP3spDQoJCSAgICAgKGVxIChjaGFyLWJlZm9yZSAo bWF0Y2gtZW5kIDMpKSA/fSkpDQoJCShwcm9nbg0KCQkgIChhZGQtdGV4dC1wcm9wZXJ0aWVzDQoJ CSAgIChtYXRjaC1iZWdpbm5pbmcgMykgKDErIChtYXRjaC1iZWdpbm5pbmcgMykpDQoJCSAgIChs aXN0ICdpbnZpc2libGUgdCAnb3JnLWR3aWR0aCB0ICdvcmctZHdpZHRoLW4gMSkpDQoJCSAgKGFk ZC10ZXh0LXByb3BlcnRpZXMNCgkJICAgKDEtIChtYXRjaC1lbmQgMykpIChtYXRjaC1lbmQgMykN CgkJICAgKGxpc3QgJ2ludmlzaWJsZSB0ICdvcmctZHdpZHRoIHQgJ29yZy1kd2lkdGgtbiAxKSkp KQ0KCSAgICB0KSkpKSkNCg0KOzs7OyBWaXNpYmlsaXR5IGN5Y2xpbmcsIGluY2x1ZGluZyBvcmct Z290byBhbmQgaW5kaXJlY3QgYnVmZmVyDQoNCjs7OyBDeWNsaW5nDQoNCihkZWZ2YXIgb3JnLWN5 Y2xlLWdsb2JhbC1zdGF0dXMgbmlsKQ0KKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdvcmct Y3ljbGUtZ2xvYmFsLXN0YXR1cykNCihwdXQgJ29yZy1jeWNsZS1nbG9iYWwtc3RhdHVzICdvcmct c3RhdGUgdCkNCihkZWZ2YXIgb3JnLWN5Y2xlLXN1YnRyZWUtc3RhdHVzIG5pbCkNCihtYWtlLXZh cmlhYmxlLWJ1ZmZlci1sb2NhbCAnb3JnLWN5Y2xlLXN1YnRyZWUtc3RhdHVzKQ0KKHB1dCAnb3Jn LWN5Y2xlLXN1YnRyZWUtc3RhdHVzICdvcmctc3RhdGUgdCkNCg0KKGRlZnZhciBvcmctaW5saW5l dGFzay1taW4tbGV2ZWwpDQoNCihkZWZ1biBvcmctdW5sb2dnZWQtbWVzc2FnZSAoJnJlc3QgYXJn cykNCiAgIkRpc3BsYXkgYSBtZXNzYWdlLCBidXQgYXZvaWQgbG9nZ2luZyBpdCBpbiB0aGUgKk1l c3NhZ2VzKiBidWZmZXIuIg0KICAobGV0ICgobWVzc2FnZS1sb2ctbWF4IG5pbCkpDQogICAgKGFw cGx5ICdtZXNzYWdlIGFyZ3MpKSkNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBvcmctY3ljbGUg KCZvcHRpb25hbCBhcmcpDQogICJUQUItYWN0aW9uIGFuZCB2aXNpYmlsaXR5IGN5Y2xpbmcgZm9y IE9yZy1tb2RlLg0KDQpUaGlzIGlzIHRoZSBjb21tYW5kIGludm9rZWQgaW4gT3JnLW1vZGUgYnkg dGhlIFRBQiBrZXkuICBJdHMgbWFpbiBwdXJwb3NlDQppcyBvdXRsaW5lIHZpc2liaWxpdHkgY3lj bGluZywgYnV0IGl0IGFsc28gaW52b2tlcyBvdGhlciBhY3Rpb25zDQppbiBzcGVjaWFsIGNvbnRl eHRzLg0KDQotIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHByZWZpeCBhcmd1 bWVudCwgcm90YXRlIHRoZSBlbnRpcmUNCiAgYnVmZmVyIHRocm91Z2ggMyBzdGF0ZXMgKGdsb2Jh bCBjeWNsaW5nKQ0KICAxLiBPVkVSVklFVzogU2hvdyBvbmx5IHRvcC1sZXZlbCBoZWFkbGluZXMu DQogIDIuIENPTlRFTlRTOiBTaG93IGFsbCBoZWFkbGluZXMgb2YgYWxsIGxldmVscywgYnV0IG5v IGJvZHkgdGV4dC4NCiAgMy4gU0hPVyBBTEw6IFNob3cgZXZlcnl0aGluZy4NCiAgV2hlbiBjYWxs ZWQgd2l0aCB0d28gYEMtdSBDLXUnIHByZWZpeGVzLCBzd2l0Y2ggdG8gdGhlIHN0YXJ0dXAgdmlz aWJpbGl0eSwNCiAgZGV0ZXJtaW5lZCBieSB0aGUgdmFyaWFibGUgYG9yZy1zdGFydHVwLWZvbGRl ZCcsIGFuZCBieSBhbnkgVklTSUJJTElUWQ0KICBwcm9wZXJ0aWVzIGluIHRoZSBidWZmZXIuDQog IFdoZW4gY2FsbGVkIHdpdGggdGhyZWUgYEMtdSBDLXUgQy11JyBwcmVmaXhlZCwgc2hvdyB0aGUg ZW50aXJlIGJ1ZmZlciwNCiAgaW5jbHVkaW5nIGFueSBkcmF3ZXJzLg0KDQotIFdoZW4gaW5zaWRl IGEgdGFibGUsIHJlLWFsaWduIHRoZSB0YWJsZSBhbmQgbW92ZSB0byB0aGUgbmV4dCBmaWVsZC4N Cg0KLSBXaGVuIHBvaW50IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBoZWFkbGluZSwgcm90YXRl IHRoZSBzdWJ0cmVlIHN0YXJ0ZWQNCiAgYnkgdGhpcyBsaW5lIHRocm91Z2ggMyBkaWZmZXJlbnQg c3RhdGVzIChsb2NhbCBjeWNsaW5nKQ0KICAxLiBGT0xERUQ6ICAgT25seSB0aGUgbWFpbiBoZWFk bGluZSBpcyBzaG93bi4NCiAgMi4gQ0hJTERSRU46IFRoZSBtYWluIGhlYWRsaW5lIGFuZCB0aGUg ZGlyZWN0IGNoaWxkcmVuIGFyZSBzaG93bi4NCiAgICAgICAgICAgICAgIEZyb20gdGhpcyBzdGF0 ZSwgeW91IGNhbiBtb3ZlIHRvIG9uZSBvZiB0aGUgY2hpbGRyZW4NCiAgICAgICAgICAgICAgIGFu ZCB6b29tIGluIGZ1cnRoZXIuDQogIDMuIFNVQlRSRUU6ICBTaG93IHRoZSBlbnRpcmUgc3VidHJl ZSwgaW5jbHVkaW5nIGJvZHkgdGV4dC4NCiAgSWYgdGhlcmUgaXMgbm8gc3VidHJlZSwgc3dpdGNo IGRpcmVjdGx5IGZyb20gQ0hJTERSRU4gdG8gRk9MREVELg0KDQotIFdoZW4gcG9pbnQgaXMgYXQg dGhlIGJlZ2lubmluZyBvZiBhbiBlbXB0eSBoZWFkbGluZSBhbmQgdGhlIHZhcmlhYmxlDQogIGBv cmctY3ljbGUtbGV2ZWwtYWZ0ZXItaXRlbS9lbnRyeS1jcmVhdGlvbicgaXMgc2V0LCBjeWNsZSB0 aGUgbGV2ZWwNCiAgb2YgdGhlIGhlYWRsaW5lIGJ5IGRlbW90aW5nIGFuZCBwcm9tb3RpbmcgaXQg dG8gbGlrZWx5IGxldmVscy4gIFRoaXMNCiAgc3BlZWRzIHVwIGNyZWF0aW9uIGRvY3VtZW50IHN0 cnVjdHVyZSBieSBwcmVzc2luZyBUQUIgb25jZSBvciBzZXZlcmFsDQogIHRpbWVzIHJpZ2h0IGFm dGVyIGNyZWF0aW5nIGEgbmV3IGhlYWRsaW5lLg0KDQotIFdoZW4gdGhlcmUgaXMgYSBudW1lcmlj IHByZWZpeCwgZ28gdXAgdG8gYSBoZWFkaW5nIHdpdGggbGV2ZWwgQVJHLCBkbw0KICBhIGBzaG93 LXN1YnRyZWUnIGFuZCByZXR1cm4gdG8gdGhlIHByZXZpb3VzIGN1cnNvciBwb3NpdGlvbi4gIElm IEFSRw0KICBpcyBuZWdhdGl2ZSwgZ28gdXAgdGhhdCBtYW55IGxldmVscy4NCg0KLSBXaGVuIHBv aW50IGlzIG5vdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgaGVhZGxpbmUsIGV4ZWN1dGUgdGhlIGds b2JhbA0KICBiaW5kaW5nIGZvciBUQUIsIHdoaWNoIGlzIHJlLWluZGVudGluZyB0aGUgbGluZS4g IFNlZSB0aGUgb3B0aW9uDQogIGBvcmctY3ljbGUtZW11bGF0ZS10YWInIGZvciBkZXRhaWxzLg0K DQotIFNwZWNpYWwgY2FzZTogaWYgcG9pbnQgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVm ZmVyIGFuZCB0aGVyZSBpcw0KICBubyBoZWFkbGluZSBpbiBsaW5lIDEsIHRoaXMgZnVuY3Rpb24g d2lsbCBhY3QgYXMgaWYgY2FsbGVkIHdpdGggcHJlZml4IGFyZw0KICAoQy11IFRBQiwgc2FtZSBh cyBTLVRBQikgYWxzbyB3aGVuIGNhbGxlZCB3aXRob3V0IHByZWZpeCBhcmcuDQogIEJ1dCBvbmx5 IGlmIGFsc28gdGhlIHZhcmlhYmxlIGBvcmctY3ljbGUtZ2xvYmFsLWF0LWJvYicgaXMgdC4iDQog IChpbnRlcmFjdGl2ZSAiUCIpDQogIChvcmctbG9hZC1tb2R1bGVzLW1heWJlKQ0KICAodW5sZXNz IChvciAocnVuLWhvb2std2l0aC1hcmdzLXVudGlsLXN1Y2Nlc3MgJ29yZy10YWItZmlyc3QtaG9v aykNCgkgICAgICAoYW5kIG9yZy1jeWNsZS1sZXZlbC1hZnRlci1pdGVtL2VudHJ5LWNyZWF0aW9u DQoJCSAgIChvciAob3JnLWN5Y2xlLWxldmVsKQ0KCQkgICAgICAgKG9yZy1jeWNsZS1pdGVtLWlu ZGVudGF0aW9uKSkpKQ0KICAgIChsZXQqICgobGltaXQtbGV2ZWwNCgkgICAgKG9yIG9yZy1jeWNs ZS1tYXgtbGV2ZWwNCgkJKGFuZCAoYm91bmRwICdvcmctaW5saW5ldGFzay1taW4tbGV2ZWwpDQoJ CSAgICAgb3JnLWlubGluZXRhc2stbWluLWxldmVsDQoJCSAgICAgKDEtIG9yZy1pbmxpbmV0YXNr LW1pbi1sZXZlbCkpKSkNCgkgICAobnN0YXJzIChhbmQgbGltaXQtbGV2ZWwNCgkJCShpZiBvcmct b2RkLWxldmVscy1vbmx5DQoJCQkgICAgKGFuZCBsaW1pdC1sZXZlbCAoMS0gKCogbGltaXQtbGV2 ZWwgMikpKQ0KCQkJICBsaW1pdC1sZXZlbCkpKQ0KCSAgIChvcmctb3V0bGluZS1yZWdleHANCgkg ICAgKGlmIChub3QgKGRlcml2ZWQtbW9kZS1wICdvcmctbW9kZSkpDQoJCW91dGxpbmUtcmVnZXhw DQoJICAgICAgKGNvbmNhdCAiXFwqIiAoaWYgbnN0YXJzIChmb3JtYXQgIlxcezEsJWRcXH0gIiBu c3RhcnMpICIrICIpKSkpDQoJICAgKGJvYi1zcGVjaWFsIChhbmQgb3JnLWN5Y2xlLWdsb2JhbC1h dC1ib2IgKG5vdCBhcmcpIChib2JwKQ0KCQkJICAgICAobm90IChsb29raW5nLWF0IG9yZy1vdXRs aW5lLXJlZ2V4cCkpKSkNCgkgICAob3JnLWN5Y2xlLWhvb2sNCgkgICAgKGlmIGJvYi1zcGVjaWFs DQoJCShkZWxxICdvcmctb3B0aW1pemUtd2luZG93LWFmdGVyLXZpc2liaWxpdHktY2hhbmdlDQoJ CSAgICAgIChjb3B5LXNlcXVlbmNlIG9yZy1jeWNsZS1ob29rKSkNCgkgICAgICBvcmctY3ljbGUt aG9vaykpDQoJICAgKHBvcyAocG9pbnQpKSkNCg0KICAgICAgKGlmIChvciBib2Itc3BlY2lhbCAo ZXF1YWwgYXJnICcoNCkpKQ0KCSAgOzsgc3BlY2lhbCBjYXNlOiAgdXNlIGdsb2JhbCBjeWNsaW5n DQoJICAoc2V0cSBhcmcgdCkpDQoNCiAgICAgIChjb25kDQoNCiAgICAgICAoKGVxdWFsIGFyZyAn KDE2KSkNCgkoc2V0cSBsYXN0LWNvbW1hbmQgJ2R1bW15KQ0KCShvcmctc2V0LXN0YXJ0dXAtdmlz aWJpbGl0eSkNCgkob3JnLXVubG9nZ2VkLW1lc3NhZ2UgIlN0YXJ0dXAgdmlzaWJpbGl0eSwgcGx1 cyBWSVNJQklMSVRZIHByb3BlcnRpZXMiKSkNCg0KICAgICAgICgoZXF1YWwgYXJnICcoNjQpKQ0K CShzaG93LWFsbCkNCgkob3JnLXVubG9nZ2VkLW1lc3NhZ2UgIkVudGlyZSBidWZmZXIgdmlzaWJs ZSwgaW5jbHVkaW5nIGRyYXdlcnMiKSkNCg0KICAgICAgIDs7IFRyeSBjZGxhdGV4IFRBQiBjb21w bGV0aW9uDQogICAgICAgKChvcmctdHJ5LWNkbGF0ZXgtdGFiKSkNCg0KICAgICAgIDs7IFRhYmxl OiBlbnRlciBpdCBvciBtb3ZlIHRvIHRoZSBuZXh0IGZpZWxkLg0KICAgICAgICgob3JnLWF0LXRh YmxlLXAgJ2FueSkNCgkoaWYgKG9yZy1hdC10YWJsZS5lbC1wKQ0KCSAgICAobWVzc2FnZSAiVXNl IEMtYyAnIHRvIGVkaXQgdGFibGUuZWwgdGFibGVzIikNCgkgIChpZiBhcmcgKG9yZy10YWJsZS1l ZGl0LWZpZWxkIHQpDQoJICAgIChvcmctdGFibGUtanVzdGlmeS1maWVsZC1tYXliZSkNCgkgICAg KGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLXRhYmxlLW5leHQtZmllbGQpKSkpDQoNCiAgICAgICAo KHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1zdWNjZXNzDQoJICdvcmctdGFiLWFmdGVyLWNoZWNr LWZvci10YWJsZS1ob29rKSkNCg0KICAgICAgIDs7IEdsb2JhbCBjeWNsaW5nOiBkZWxlZ2F0ZSB0 byBgb3JnLWN5Y2xlLWludGVybmFsLWdsb2JhbCcuDQogICAgICAgKChlcSBhcmcgdCkgKG9yZy1j eWNsZS1pbnRlcm5hbC1nbG9iYWwpKQ0KDQogICAgICAgOzsgRHJhd2VyczogZGVsZWdhdGUgdG8g YG9yZy1mbGFnLWRyYXdlcicuDQogICAgICAgKChhbmQgb3JnLWRyYXdlcnMgb3JnLWRyYXdlci1y ZWdleHANCgkgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCSAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUg MSkNCgkgICAgICAgKGxvb2tpbmctYXQgb3JnLWRyYXdlci1yZWdleHApKSkNCgkob3JnLWZsYWct ZHJhd2VyIDsgdG9nZ2xlIGJsb2NrIHZpc2liaWxpdHkNCgkgKG5vdCAoZ2V0LWNoYXItcHJvcGVy dHkgKG1hdGNoLWVuZCAwKSAnaW52aXNpYmxlKSkpKQ0KDQogICAgICAgOzsgU2hvdy1zdWJ0cmVl LCBBUkcgbGV2ZWxzIHVwIGZyb20gaGVyZS4NCiAgICAgICAoKGludGVnZXJwIGFyZykNCgkoc2F2 ZS1leGN1cnNpb24NCgkgIChvcmctYmFjay10by1oZWFkaW5nKQ0KCSAgKG91dGxpbmUtdXAtaGVh ZGluZyAoaWYgKDwgYXJnIDApICgtIGFyZykNCgkJCQkoLSAoZnVuY2FsbCBvdXRsaW5lLWxldmVs KSBhcmcpKSkNCgkgIChvcmctc2hvdy1zdWJ0cmVlKSkpDQoNCiAgICAgICA7OyBJbmxpbmUgdGFz azogZGVsZWdhdGUgdG8gYG9yZy1pbmxpbmV0YXNrLXRvZ2dsZS12aXNpYmlsaXR5Jy4NCiAgICAg ICAoKGFuZCAoZmVhdHVyZXAgJ29yZy1pbmxpbmV0YXNrKQ0KCSAgICAgKG9yZy1pbmxpbmV0YXNr LWF0LXRhc2stcCkNCgkgICAgIChvciAoYm9scCkgKG5vdCAoZXEgb3JnLWN5Y2xlLWVtdWxhdGUt dGFiICdleGMtaGwtYm9sKSkpKQ0KCShvcmctaW5saW5ldGFzay10b2dnbGUtdmlzaWJpbGl0eSkp DQoNCiAgICAgICA7OyBBdCBhbiBpdGVtL2hlYWRsaW5lOiBkZWxlZ2F0ZSB0byBgb3JnLWN5Y2xl LWludGVybmFsLWxvY2FsJy4NCiAgICAgICAoKGFuZCAob3IgKGFuZCBvcmctY3ljbGUtaW5jbHVk ZS1wbGFpbi1saXN0cyAob3JnLWF0LWl0ZW0tcCkpDQoJCSAoc2F2ZS1leGN1cnNpb24gKGJlZ2lu bmluZy1vZi1saW5lIDEpDQoJCQkJIChsb29raW5nLWF0IG9yZy1vdXRsaW5lLXJlZ2V4cCkpKQ0K CSAgICAgKG9yIChib2xwKSAobm90IChlcSBvcmctY3ljbGUtZW11bGF0ZS10YWIgJ2V4Yy1obC1i b2wpKSkpDQoJKG9yZy1jeWNsZS1pbnRlcm5hbC1sb2NhbCkpDQoNCiAgICAgICA7OyBGcm9tIHRo ZXJlOiBUQUIgZW11bGF0aW9uIGFuZCB0ZW1wbGF0ZSBjb21wbGV0aW9uLg0KICAgICAgIChidWZm ZXItcmVhZC1vbmx5IChvcmctYmFjay10by1oZWFkaW5nKSkNCg0KICAgICAgICgocnVuLWhvb2st d2l0aC1hcmdzLXVudGlsLXN1Y2Nlc3MNCgkgJ29yZy10YWItYWZ0ZXItY2hlY2stZm9yLWN5Y2xp bmctaG9vaykpDQoNCiAgICAgICAoKG9yZy10cnktc3RydWN0dXJlLWNvbXBsZXRpb24pKQ0KDQog ICAgICAgKChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2Vzcw0KCSAnb3JnLXRhYi1iZWZv cmUtdGFiLWVtdWxhdGlvbi1ob29rKSkNCg0KICAgICAgICgoYW5kIChlcSBvcmctY3ljbGUtZW11 bGF0ZS10YWIgJ2V4Yy1obC1ib2wpDQoJICAgICAob3IgKG5vdCAoYm9scCkpDQoJCSAobm90IChs b29raW5nLWF0IG9yZy1vdXRsaW5lLXJlZ2V4cCkpKSkNCgkoY2FsbC1pbnRlcmFjdGl2ZWx5IChn bG9iYWwta2V5LWJpbmRpbmcgIlx0IikpKQ0KDQogICAgICAgKChpZiAoYW5kIChtZW1xIG9yZy1j eWNsZS1lbXVsYXRlLXRhYiAnKHdoaXRlIHdoaXRlc3RhcnQpKQ0KCQkgKHNhdmUtZXhjdXJzaW9u IChiZWdpbm5pbmctb2YtbGluZSAxKSAobG9va2luZy1hdCAiWyBcdF0qIikpDQoJCSAob3IgKGFu ZCAoZXEgb3JnLWN5Y2xlLWVtdWxhdGUtdGFiICd3aGl0ZSkNCgkJCSAgKD0gKG1hdGNoLWVuZCAw KSAocG9pbnQtYXQtZW9sKSkpDQoJCSAgICAgKGFuZCAoZXEgb3JnLWN5Y2xlLWVtdWxhdGUtdGFi ICd3aGl0ZXN0YXJ0KQ0KCQkJICAoPj0gKG1hdGNoLWVuZCAwKSBwb3MpKSkpDQoJICAgIHQNCgkg IChlcSBvcmctY3ljbGUtZW11bGF0ZS10YWIgdCkpDQoJKGNhbGwtaW50ZXJhY3RpdmVseSAoZ2xv YmFsLWtleS1iaW5kaW5nICJcdCIpKSkNCg0KICAgICAgICh0IChzYXZlLWV4Y3Vyc2lvbg0KCSAg ICAob3JnLWJhY2stdG8taGVhZGluZykNCgkgICAgKG9yZy1jeWNsZSkpKSkpKSkNCg0KKGRlZnVu IG9yZy1jeWNsZS1pbnRlcm5hbC1nbG9iYWwgKCkNCiAgIkRvIHRoZSBnbG9iYWwgY3ljbGluZyBh Y3Rpb24uIg0KICA7OyBIYWNrIHRvIGF2b2lkIGRpc3BsYXkgb2YgbWVzc2FnZXMgZm9yIC5vcmcg IGF0dGFjaG1lbnRzIGluIEdudXMNCiAgKGxldCAoKGdhIChzdHJpbmctbWF0Y2ggIlxcKmZvbnRp ZmljYXRpb24iIChidWZmZXItbmFtZSkpKSkNCiAgICAoY29uZA0KICAgICAoKGFuZCAoZXEgbGFz dC1jb21tYW5kIHRoaXMtY29tbWFuZCkNCgkgICAoZXEgb3JnLWN5Y2xlLWdsb2JhbC1zdGF0dXMg J292ZXJ2aWV3KSkNCiAgICAgIDs7IFdlIGp1c3QgY3JlYXRlZCB0aGUgb3ZlcnZpZXcgLSBub3cg ZG8gdGFibGUgb2YgY29udGVudHMNCiAgICAgIDs7IFRoaXMgY2FuIGJlIHNsb3cgaW4gdmVyeSBs YXJnZSBidWZmZXJzLCBzbyBpbmRpY2F0ZSBhY3Rpb24NCiAgICAgIChydW4taG9vay13aXRoLWFy Z3MgJ29yZy1wcmUtY3ljbGUtaG9vayAnY29udGVudHMpDQogICAgICAodW5sZXNzIGdhIChvcmct dW5sb2dnZWQtbWVzc2FnZSAiQ09OVEVOVFMuLi4iKSkNCiAgICAgIChvcmctY29udGVudCkNCiAg ICAgICh1bmxlc3MgZ2EgKG9yZy11bmxvZ2dlZC1tZXNzYWdlICJDT05URU5UUy4uLmRvbmUiKSkN CiAgICAgIChzZXRxIG9yZy1jeWNsZS1nbG9iYWwtc3RhdHVzICdjb250ZW50cykNCiAgICAgIChy dW4taG9vay13aXRoLWFyZ3MgJ29yZy1jeWNsZS1ob29rICdjb250ZW50cykpDQoNCiAgICAgKChh bmQgKGVxIGxhc3QtY29tbWFuZCB0aGlzLWNvbW1hbmQpDQoJICAgKGVxIG9yZy1jeWNsZS1nbG9i YWwtc3RhdHVzICdjb250ZW50cykpDQogICAgICA7OyBXZSBqdXN0IHNob3dlZCB0aGUgdGFibGUg b2YgY29udGVudHMgLSBub3cgc2hvdyBldmVyeXRoaW5nDQogICAgICAocnVuLWhvb2std2l0aC1h cmdzICdvcmctcHJlLWN5Y2xlLWhvb2sgJ2FsbCkNCiAgICAgIChzaG93LWFsbCkNCiAgICAgICh1 bmxlc3MgZ2EgKG9yZy11bmxvZ2dlZC1tZXNzYWdlICJTSE9XIEFMTCIpKQ0KICAgICAgKHNldHEg b3JnLWN5Y2xlLWdsb2JhbC1zdGF0dXMgJ2FsbCkNCiAgICAgIChydW4taG9vay13aXRoLWFyZ3Mg J29yZy1jeWNsZS1ob29rICdhbGwpKQ0KDQogICAgICh0DQogICAgICA7OyBEZWZhdWx0IGFjdGlv bjogZ28gdG8gb3ZlcnZpZXcNCiAgICAgIChydW4taG9vay13aXRoLWFyZ3MgJ29yZy1wcmUtY3lj bGUtaG9vayAnb3ZlcnZpZXcpDQogICAgICAob3JnLW92ZXJ2aWV3KQ0KICAgICAgKHVubGVzcyBn YSAob3JnLXVubG9nZ2VkLW1lc3NhZ2UgIk9WRVJWSUVXIikpDQogICAgICAoc2V0cSBvcmctY3lj bGUtZ2xvYmFsLXN0YXR1cyAnb3ZlcnZpZXcpDQogICAgICAocnVuLWhvb2std2l0aC1hcmdzICdv cmctY3ljbGUtaG9vayAnb3ZlcnZpZXcpKSkpKQ0KDQooZGVmdmFyIG9yZy1jYWxsZWQtd2l0aC1s aW1pdGVkLWxldmVscyBuaWwNCiAgIk5vbi1uaWwgd2hlbiBgb3JnLXdpdGgtbGltaXRlZC1sZXZl bHMnIGlzIGN1cnJlbnRseSBhY3RpdmUuIikNCg0KKGRlZnVuIG9yZy1jeWNsZS1pbnRlcm5hbC1s b2NhbCAoKQ0KICAiRG8gdGhlIGxvY2FsIGN5Y2xpbmcgYWN0aW9uLiINCiAgKGxldCAoKGdvYWwt Y29sdW1uIDApIGVvaCBlb2wgZW9zIGhhcy1jaGlsZHJlbiBjaGlsZHJlbi1za2lwcGVkIHN0cnVj dCkNCiAgICA7OyBGaXJzdCwgZGV0ZXJtaW5lIGVuZCBvZiBoZWFkbGluZSAoRU9IKSwgZW5kIG9m IHN1YnRyZWUgb3IgaXRlbQ0KICAgIDs7IChFT1MpLCBhbmQgaWYgaXRlbSBvciBoZWFkaW5nIGhh cyBjaGlsZHJlbiAoSEFTLUNISUxEUkVOKS4NCiAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAgIChp ZiAob3JnLWF0LWl0ZW0tcCkNCgkgIChwcm9nbg0KCSAgICAoYmVnaW5uaW5nLW9mLWxpbmUpDQoJ ICAgIChzZXRxIHN0cnVjdCAob3JnLWxpc3Qtc3RydWN0KSkNCgkgICAgKHNldHEgZW9oIChwb2lu dC1hdC1lb2wpKQ0KCSAgICAoc2V0cSBlb3MgKG9yZy1saXN0LWdldC1pdGVtLWVuZC1iZWZvcmUt YmxhbmsgKHBvaW50KSBzdHJ1Y3QpKQ0KCSAgICAoc2V0cSBoYXMtY2hpbGRyZW4gKG9yZy1saXN0 LWhhcy1jaGlsZC1wIChwb2ludCkgc3RydWN0KSkpDQoJKG9yZy1iYWNrLXRvLWhlYWRpbmcpDQoJ KHNldHEgZW9oIChzYXZlLWV4Y3Vyc2lvbiAob3V0bGluZS1lbmQtb2YtaGVhZGluZykgKHBvaW50 KSkpDQoJKHNldHEgZW9zIChzYXZlLWV4Y3Vyc2lvbiAob3JnLWVuZC1vZi1zdWJ0cmVlIHQgdCkN CgkJCQkgICh3aGVuIChib2xwKSAoYmFja3dhcmQtY2hhcikpIChwb2ludCkpKQ0KCShzZXRxIGhh cy1jaGlsZHJlbg0KCSAgICAgIChvciAoc2F2ZS1leGN1cnNpb24NCgkJICAgIChsZXQgKChsZXZl bCAoZnVuY2FsbCBvdXRsaW5lLWxldmVsKSkpDQoJCSAgICAgIChvdXRsaW5lLW5leHQtaGVhZGlu ZykNCgkJICAgICAgKGFuZCAob3JnLWF0LWhlYWRpbmctcCB0KQ0KCQkJICAgKD4gKGZ1bmNhbGwg b3V0bGluZS1sZXZlbCkgbGV2ZWwpKSkpDQoJCSAgKHNhdmUtZXhjdXJzaW9uDQoJCSAgICAob3Jn LWxpc3Qtc2VhcmNoLWZvcndhcmQgKG9yZy1pdGVtLWJlZ2lubmluZy1yZSkgZW9zIHQpKSkpKQ0K ICAgICAgOzsgRGV0ZXJtaW5lIGVuZCBpbnZpc2libGUgcGFydCBvZiBidWZmZXIgKEVPTCkNCiAg ICAgIChiZWdpbm5pbmctb2YtbGluZSAyKQ0KICAgICAgOzsgWEVtYWNzIGRvZXNuJ3QgaGF2ZSBg bmV4dC1zaW5nbGUtY2hhci1wcm9wZXJ0eS1jaGFuZ2UnDQogICAgICAoaWYgKGZlYXR1cmVwICd4 ZW1hY3MpDQoJICAod2hpbGUgKGFuZCAobm90IChlb2JwKSkgOzsgdGhpcyBpcyBsaWtlIGBuZXh0 LWxpbmUnDQoJCSAgICAgIChnZXQtY2hhci1wcm9wZXJ0eSAoMS0gKHBvaW50KSkgJ2ludmlzaWJs ZSkpDQoJICAgIChiZWdpbm5pbmctb2YtbGluZSAyKSkNCgkod2hpbGUgKGFuZCAobm90IChlb2Jw KSkgOzsgdGhpcyBpcyBsaWtlIGBuZXh0LWxpbmUnDQoJCSAgICAoZ2V0LWNoYXItcHJvcGVydHkg KDEtIChwb2ludCkpICdpbnZpc2libGUpKQ0KCSAgKGdvdG8tY2hhciAobmV4dC1zaW5nbGUtY2hh ci1wcm9wZXJ0eS1jaGFuZ2UgKHBvaW50KSAnaW52aXNpYmxlKSkNCgkgIChhbmQgKGVvbHApIChi ZWdpbm5pbmctb2YtbGluZSAyKSkpKQ0KICAgICAgKHNldHEgZW9sIChwb2ludCkpKQ0KICAgIDs7 IEZpbmQgb3V0IHdoYXQgdG8gZG8gbmV4dCBhbmQgc2V0IGB0aGlzLWNvbW1hbmQnDQogICAgKGNv bmQNCiAgICAgKCg9IGVvcyBlb2gpDQogICAgICA7OyBOb3RoaW5nIGlzIGhpZGRlbiBiZWhpbmQg dGhpcyBoZWFkaW5nDQogICAgICAodW5sZXNzIChvcmctYmVmb3JlLWZpcnN0LWhlYWRpbmctcCkN CgkocnVuLWhvb2std2l0aC1hcmdzICdvcmctcHJlLWN5Y2xlLWhvb2sgJ2VtcHR5KSkNCiAgICAg IChvcmctdW5sb2dnZWQtbWVzc2FnZSAiRU1QVFkgRU5UUlkiKQ0KICAgICAgKHNldHEgb3JnLWN5 Y2xlLXN1YnRyZWUtc3RhdHVzIG5pbCkNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCShnb3RvLWNo YXIgZW9zKQ0KCShvdXRsaW5lLW5leHQtaGVhZGluZykNCgkoaWYgKG91dGxpbmUtaW52aXNpYmxl LXApIChvcmctZmxhZy1oZWFkaW5nIG5pbCkpKSkNCiAgICAgKChhbmQgKG9yICg+PSBlb2wgZW9z KQ0KCSAgICAgICAobm90IChzdHJpbmctbWF0Y2ggIlxcUy0iIChidWZmZXItc3Vic3RyaW5nIGVv bCBlb3MpKSkpDQoJICAgKG9yIGhhcy1jaGlsZHJlbg0KCSAgICAgICAobm90IChzZXRxIGNoaWxk cmVuLXNraXBwZWQNCgkJCSAgb3JnLWN5Y2xlLXNraXAtY2hpbGRyZW4tc3RhdGUtaWYtbm8tY2hp bGRyZW4pKSkpDQogICAgICA7OyBFbnRpcmUgc3VidHJlZSBpcyBoaWRkZW4gaW4gb25lIGxpbmU6 IGNoaWxkcmVuIHZpZXcNCiAgICAgICh1bmxlc3MgKG9yZy1iZWZvcmUtZmlyc3QtaGVhZGluZy1w KQ0KCShydW4taG9vay13aXRoLWFyZ3MgJ29yZy1wcmUtY3ljbGUtaG9vayAnY2hpbGRyZW4pKQ0K ICAgICAgKGlmIChvcmctYXQtaXRlbS1wKQ0KCSAgKG9yZy1saXN0LXNldC1pdGVtLXZpc2liaWxp dHkgKHBvaW50LWF0LWJvbCkgc3RydWN0ICdjaGlsZHJlbikNCgkob3JnLXNob3ctZW50cnkpDQoJ KG9yZy13aXRoLWxpbWl0ZWQtbGV2ZWxzIChzaG93LWNoaWxkcmVuKSkNCgk7OyBGSVhNRTogVGhp cyBzbG93cyBkb3duIHRoZSBmdW5jIHdheSB0b28gbXVjaC4NCgk7OyBIb3cga2VlcCBkcmF3ZXJz IGhpZGRlbiBpbiBzdWJ0cmVlIGFueXdheT8NCgk7OyAod2hlbiAobWVtcSAnb3JnLWN5Y2xlLWhp ZGUtZHJhd2VycyBvcmctY3ljbGUtaG9vaykNCgk7OyAgIChvcmctY3ljbGUtaGlkZS1kcmF3ZXJz ICdzdWJ0cmVlKSkNCg0KCTs7IEZvbGQgZXZlcnkgbGlzdCBpbiBzdWJ0cmVlIHRvIHRvcC1sZXZl bCBpdGVtcy4NCgkod2hlbiAoZXEgb3JnLWN5Y2xlLWluY2x1ZGUtcGxhaW4tbGlzdHMgJ2ludGVn cmF0ZSkNCgkgIChzYXZlLWV4Y3Vyc2lvbg0KCSAgICAob3JnLWJhY2stdG8taGVhZGluZykNCgkg ICAgKHdoaWxlIChvcmctbGlzdC1zZWFyY2gtZm9yd2FyZCAob3JnLWl0ZW0tYmVnaW5uaW5nLXJl KSBlb3MgdCkNCgkgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMSkNCgkgICAgICAobGV0KiAoKHN0 cnVjdCAob3JnLWxpc3Qtc3RydWN0KSkNCgkJICAgICAocHJldnMgKG9yZy1saXN0LXByZXZzLWFs aXN0IHN0cnVjdCkpDQoJCSAgICAgKGVuZCAob3JnLWxpc3QtZ2V0LWJvdHRvbS1wb2ludCBzdHJ1 Y3QpKSkNCgkJKG1hcGMgKGxhbWJkYSAoZSkgKG9yZy1saXN0LXNldC1pdGVtLXZpc2liaWxpdHkg ZSBzdHJ1Y3QgJ2ZvbGRlZCkpDQoJCSAgICAgIChvcmctbGlzdC1nZXQtYWxsLWl0ZW1zIChwb2lu dCkgc3RydWN0IHByZXZzKSkNCgkJKGdvdG8tY2hhciAoaWYgKDwgZW5kIGVvcykgZW5kIGVvcykp KSkpKSkNCiAgICAgIChvcmctdW5sb2dnZWQtbWVzc2FnZSAiQ0hJTERSRU4iKQ0KICAgICAgKHNh dmUtZXhjdXJzaW9uDQoJKGdvdG8tY2hhciBlb3MpDQoJKG91dGxpbmUtbmV4dC1oZWFkaW5nKQ0K CShpZiAob3V0bGluZS1pbnZpc2libGUtcCkgKG9yZy1mbGFnLWhlYWRpbmcgbmlsKSkpDQogICAg ICAoc2V0cSBvcmctY3ljbGUtc3VidHJlZS1zdGF0dXMgJ2NoaWxkcmVuKQ0KICAgICAgKHVubGVz cyAob3JnLWJlZm9yZS1maXJzdC1oZWFkaW5nLXApDQoJKHJ1bi1ob29rLXdpdGgtYXJncyAnb3Jn LWN5Y2xlLWhvb2sgJ2NoaWxkcmVuKSkpDQogICAgICgob3IgY2hpbGRyZW4tc2tpcHBlZA0KCSAg KGFuZCAoZXEgbGFzdC1jb21tYW5kIHRoaXMtY29tbWFuZCkNCgkgICAgICAgKGVxIG9yZy1jeWNs ZS1zdWJ0cmVlLXN0YXR1cyAnY2hpbGRyZW4pKSkNCiAgICAgIDs7IFdlIGp1c3Qgc2hvd2VkIHRo ZSBjaGlsZHJlbiwgb3Igbm8gY2hpbGRyZW4gYXJlIHRoZXJlLA0KICAgICAgOzsgbm93IHNob3cg ZXZlcnl0aGluZy4NCiAgICAgICh1bmxlc3MgKG9yZy1iZWZvcmUtZmlyc3QtaGVhZGluZy1wKQ0K CShydW4taG9vay13aXRoLWFyZ3MgJ29yZy1wcmUtY3ljbGUtaG9vayAnc3VidHJlZSkpDQogICAg ICAob3V0bGluZS1mbGFnLXJlZ2lvbiBlb2ggZW9zIG5pbCkNCiAgICAgIChvcmctdW5sb2dnZWQt bWVzc2FnZQ0KICAgICAgIChpZiBjaGlsZHJlbi1za2lwcGVkICJTVUJUUkVFIChOTyBDSElMRFJF TikiICJTVUJUUkVFIikpDQogICAgICAoc2V0cSBvcmctY3ljbGUtc3VidHJlZS1zdGF0dXMgJ3N1 YnRyZWUpDQogICAgICAodW5sZXNzIChvcmctYmVmb3JlLWZpcnN0LWhlYWRpbmctcCkNCgkocnVu LWhvb2std2l0aC1hcmdzICdvcmctY3ljbGUtaG9vayAnc3VidHJlZSkpKQ0KICAgICAodA0KICAg ICAgOzsgRGVmYXVsdCBhY3Rpb246IGhpZGUgdGhlIHN1YnRyZWUuDQogICAgICAocnVuLWhvb2st d2l0aC1hcmdzICdvcmctcHJlLWN5Y2xlLWhvb2sgJ2ZvbGRlZCkNCiAgICAgIChvdXRsaW5lLWZs YWctcmVnaW9uIGVvaCBlb3MgdCkNCiAgICAgIChvcmctdW5sb2dnZWQtbWVzc2FnZSAiRk9MREVE IikNCiAgICAgIChzZXRxIG9yZy1jeWNsZS1zdWJ0cmVlLXN0YXR1cyAnZm9sZGVkKQ0KICAgICAg KHVubGVzcyAob3JnLWJlZm9yZS1maXJzdC1oZWFkaW5nLXApDQoJKHJ1bi1ob29rLXdpdGgtYXJn cyAnb3JnLWN5Y2xlLWhvb2sgJ2ZvbGRlZCkpKSkpKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVu IG9yZy1nbG9iYWwtY3ljbGUgKCZvcHRpb25hbCBhcmcpDQogICJDeWNsZSB0aGUgZ2xvYmFsIHZp c2liaWxpdHkuICBGb3IgZGV0YWlscyBzZWUgYG9yZy1jeWNsZScuDQpXaXRoIFxcW3VuaXZlcnNh bC1hcmd1bWVudF0gcHJlZml4IGFyZywgc3dpdGNoIHRvIHN0YXJ0dXAgdmlzaWJpbGl0eS4NCldp dGggYSBudW1lcmljIHByZWZpeCwgc2hvdyBhbGwgaGVhZGxpbmVzIHVwIHRvIHRoYXQgbGV2ZWwu Ig0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAobGV0ICgob3JnLWN5Y2xlLWluY2x1ZGUtcGxhaW4t bGlzdHMNCgkgKGlmIChkZXJpdmVkLW1vZGUtcCAnb3JnLW1vZGUpIG9yZy1jeWNsZS1pbmNsdWRl LXBsYWluLWxpc3RzIG5pbCkpKQ0KICAgIChjb25kDQogICAgICgoaW50ZWdlcnAgYXJnKQ0KICAg ICAgKHNob3ctYWxsKQ0KICAgICAgKGhpZGUtc3VibGV2ZWxzIGFyZykNCiAgICAgIChzZXRxIG9y Zy1jeWNsZS1nbG9iYWwtc3RhdHVzICdjb250ZW50cykpDQogICAgICgoZXF1YWwgYXJnICcoNCkp DQogICAgICAob3JnLXNldC1zdGFydHVwLXZpc2liaWxpdHkpDQogICAgICAob3JnLXVubG9nZ2Vk LW1lc3NhZ2UgIlN0YXJ0dXAgdmlzaWJpbGl0eSwgcGx1cyBWSVNJQklMSVRZIHByb3BlcnRpZXMu IikpDQogICAgICh0DQogICAgICAob3JnLWN5Y2xlICcoNCkpKSkpKQ0KDQooZGVmdW4gb3JnLXNl dC1zdGFydHVwLXZpc2liaWxpdHkgKCkNCiAgIlNldCB0aGUgdmlzaWJpbGl0eSByZXF1aXJlZCBi eSBzdGFydHVwIG9wdGlvbnMgYW5kIHByb3BlcnRpZXMuIg0KICAoY29uZA0KICAgKChlcSBvcmct c3RhcnR1cC1mb2xkZWQgdCkNCiAgICAob3JnLW92ZXJ2aWV3KSkNCiAgICgoZXEgb3JnLXN0YXJ0 dXAtZm9sZGVkICdjb250ZW50KQ0KICAgIChvcmctY29udGVudCkpDQogICAoKG9yIChlcSBvcmct c3RhcnR1cC1mb2xkZWQgJ3Nob3dldmVyeXRoaW5nKQ0KCShlcSBvcmctc3RhcnR1cC1mb2xkZWQg bmlsKSkNCiAgICAoc2hvdy1hbGwpKSkNCiAgKHVubGVzcyAoZXEgb3JnLXN0YXJ0dXAtZm9sZGVk ICdzaG93ZXZlcnl0aGluZykNCiAgICAoaWYgb3JnLWhpZGUtYmxvY2stc3RhcnR1cCAob3JnLWhp ZGUtYmxvY2stYWxsKSkNCiAgICAob3JnLXNldC12aXNpYmlsaXR5LWFjY29yZGluZy10by1wcm9w ZXJ0eSAnbm8tY2xlYW51cCkNCiAgICAob3JnLWN5Y2xlLWhpZGUtYXJjaGl2ZWQtc3VidHJlZXMg J2FsbCkNCiAgICAob3JnLWN5Y2xlLWhpZGUtZHJhd2VycyAnYWxsKQ0KICAgIChvcmctY3ljbGUt c2hvdy1lbXB0eS1saW5lcyB0KSkpDQoNCihkZWZ1biBvcmctc2V0LXZpc2liaWxpdHktYWNjb3Jk aW5nLXRvLXByb3BlcnR5ICgmb3B0aW9uYWwgbm8tY2xlYW51cCkNCiAgIlN3aXRjaCBzdWJ0cmVl IHZpc2liaWxpdGllcyBhY2NvcmRpbmcgdG8gOlZJU0lCSUxJVFk6IHByb3BlcnR5LiINCiAgKGlu dGVyYWN0aXZlKQ0KICAobGV0IChvcmctc2hvdy1lbnRyeS1iZWxvdyBzdGF0ZSkNCiAgICAoc2F2 ZS1leGN1cnNpb24NCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQogICAgICAod2hpbGUg KHJlLXNlYXJjaC1mb3J3YXJkDQoJICAgICAgIl5bIFx0XSo6VklTSUJJTElUWTpbIFx0XStcXChb YS16XStcXCkiDQoJICAgICAgbmlsIHQpDQoJKHNldHEgc3RhdGUgKG1hdGNoLXN0cmluZyAxKSkN Cgkoc2F2ZS1leGN1cnNpb24NCgkgIChvcmctYmFjay10by1oZWFkaW5nIHQpDQoJICAoaGlkZS1z dWJ0cmVlKQ0KCSAgKG9yZy1yZXZlYWwpDQoJICAoY29uZA0KCSAgICgoZXF1YWwgc3RhdGUgJygi Zm9sZCIgImZvbGRlZCIpKQ0KCSAgICAoaGlkZS1zdWJ0cmVlKSkNCgkgICAoKGVxdWFsIHN0YXRl ICJjaGlsZHJlbiIpDQoJICAgIChvcmctc2hvdy1oaWRkZW4tZW50cnkpDQoJICAgIChzaG93LWNo aWxkcmVuKSkNCgkgICAoKGVxdWFsIHN0YXRlICJjb250ZW50IikNCgkgICAgKHNhdmUtZXhjdXJz aW9uDQoJICAgICAgKHNhdmUtcmVzdHJpY3Rpb24NCgkJKG9yZy1uYXJyb3ctdG8tc3VidHJlZSkN CgkJKG9yZy1jb250ZW50KSkpKQ0KCSAgICgobWVtYmVyIHN0YXRlICcoImFsbCIgInNob3dhbGwi KSkNCgkgICAgKHNob3ctc3VidHJlZSkpKSkpDQogICAgICAodW5sZXNzIG5vLWNsZWFudXANCgko b3JnLWN5Y2xlLWhpZGUtYXJjaGl2ZWQtc3VidHJlZXMgJ2FsbCkNCgkob3JnLWN5Y2xlLWhpZGUt ZHJhd2VycyAnYWxsKQ0KCShvcmctY3ljbGUtc2hvdy1lbXB0eS1saW5lcyAnYWxsKSkpKSkNCg0K OzsgVGhpcyBmdW5jdGlvbiB1c2VzIG91dGxpbmUtcmVnZXhwIGluc3RlYWQgb2YgdGhlIG1vcmUg ZnVuZGFtZW50YWwNCjs7IG9yZy1vdXRsaW5lLXJlZ2V4cCBzbyB0aGF0IG9yZy1jeWNsZS1nbG9i YWwgd29ya3Mgb3V0c2lkZSBvZiBPcmcNCjs7IGJ1ZmZlcnMsIHdoZXJlIG91dGxpbmUtcmVnZXhw IGlzIG5lZWRlZC4NCihkZWZ1biBvcmctb3ZlcnZpZXcgKCkNCiAgIlN3aXRjaCB0byBvdmVydmll dyBtb2RlLCBzaG93aW5nIG9ubHkgdG9wLWxldmVsIGhlYWRsaW5lcy4NClRoaXMgc2hvd3MgYWxs IGhlYWRsaW5lcyB3aXRoIGEgbGV2ZWwgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBsZXZlbA0K b2YgdGhlIGZpcnN0IGhlYWRsaW5lIGluIHRoZSBidWZmZXIuICBUaGlzIGlzIGltcG9ydGFudCwg YmVjYXVzZSBpZiB0aGUNCmZpcnN0IGhlYWRsaW5lIGlzIG5vdCBsZXZlbCBvbmUsIHRoZW4gKGhp ZGUtc3VibGV2ZWxzIDEpIGdpdmVzIGNvbmZ1c2luZw0KcmVzdWx0cy4iDQogIChpbnRlcmFjdGl2 ZSkNCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKGxldCAoKGxldmVsDQoJICAgKHNhdmUtZXhjdXJz aW9uDQoJICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KCSAgICAgKGlmIChyZS1zZWFyY2gt Zm9yd2FyZCAoY29uY2F0ICJeIiBvdXRsaW5lLXJlZ2V4cCkgbmlsIHQpDQoJCSAocHJvZ24NCgkJ ICAgKGdvdG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKQ0KCQkgICAoZnVuY2FsbCBvdXRsaW5l LWxldmVsKSkpKSkpDQogICAgICAoYW5kIGxldmVsIChoaWRlLXN1YmxldmVscyBsZXZlbCkpKSkp DQoNCihkZWZ1biBvcmctY29udGVudCAoJm9wdGlvbmFsIGFyZykNCiAgIlNob3cgYWxsIGhlYWRs aW5lcyBpbiB0aGUgYnVmZmVyLCBsaWtlIGEgdGFibGUgb2YgY29udGVudHMuDQpXaXRoIG51bWVy aWNhbCBhcmd1bWVudCBOLCBzaG93IGNvbnRlbnQgdXAgdG8gbGV2ZWwgTi4iDQogIChpbnRlcmFj dGl2ZSAiUCIpDQogIChvcmctb3ZlcnZpZXcpDQogIChzYXZlLWV4Y3Vyc2lvbg0KICAgIDs7IFZp c2l0IGFsbCBoZWFkaW5ncyBhbmQgc2hvdyB0aGVpciBvZmZzcHJpbmcNCiAgICAoYW5kIChpbnRl Z2VycCBhcmcpIChvcmctb3ZlcnZpZXcpKQ0KICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpDQog ICAgKGNhdGNoICdleGl0DQogICAgICAod2hpbGUgKGFuZCAocHJvZ24gKGNvbmRpdGlvbi1jYXNl IG5pbA0KCQkJICAgICAob3V0bGluZS1wcmV2aW91cy12aXNpYmxlLWhlYWRpbmcgMSkNCgkJCSAg IChlcnJvciAoZ290by1jaGFyIChwb2ludC1taW4pKSkpDQoJCQkgdCkNCgkJICAobG9va2luZy1h dCBvcmctb3V0bGluZS1yZWdleHApKQ0KCShpZiAoaW50ZWdlcnAgYXJnKQ0KCSAgICAoc2hvdy1j aGlsZHJlbiAoMS0gYXJnKSkNCgkgIChzaG93LWJyYW5jaGVzKSkNCgkoaWYgKGJvYnApICh0aHJv dyAnZXhpdCBuaWwpKSkpKSkNCg0KKGRlZnVuIG9yZy1vcHRpbWl6ZS13aW5kb3ctYWZ0ZXItdmlz aWJpbGl0eS1jaGFuZ2UgKHN0YXRlKQ0KICAiQWRqdXN0IHRoZSB3aW5kb3cgYWZ0ZXIgYSBjaGFu Z2UgaW4gb3V0bGluZSB2aXNpYmlsaXR5Lg0KVGhpcyBmdW5jdGlvbiBpcyB0aGUgZGVmYXVsdCB2 YWx1ZSBvZiB0aGUgaG9vayBgb3JnLWN5Y2xlLWhvb2snLiINCiAgKHdoZW4gKGdldC1idWZmZXIt d2luZG93IChjdXJyZW50LWJ1ZmZlcikpDQogICAgKGNvbmQNCiAgICAgKChlcSBzdGF0ZSAnY29u dGVudCkgIG5pbCkNCiAgICAgKChlcSBzdGF0ZSAnYWxsKSAgICAgIG5pbCkNCiAgICAgKChlcSBz dGF0ZSAnZm9sZGVkKSAgIG5pbCkNCiAgICAgKChlcSBzdGF0ZSAnY2hpbGRyZW4pIChvciAob3Jn LXN1YnRyZWUtZW5kLXZpc2libGUtcCkgKHJlY2VudGVyIDEpKSkNCiAgICAgKChlcSBzdGF0ZSAn c3VidHJlZSkgIChvciAob3JnLXN1YnRyZWUtZW5kLXZpc2libGUtcCkgKHJlY2VudGVyIDEpKSkp KSkNCg0KKGRlZnVuIG9yZy1yZW1vdmUtZW1wdHktb3ZlcmxheXMtYXQgKHBvcykNCiAgIlJlbW92 ZSBvdXRsaW5lIG92ZXJsYXlzIHRoYXQgZG8gbm90IGNvbnRhaW4gbm9uLXdoaXRlIHN0dWZmLiIN CiAgKG1hcGMNCiAgIChsYW1iZGEgKG8pDQogICAgIChhbmQgKGVxICdvdXRsaW5lIChvdmVybGF5 LWdldCBvICdpbnZpc2libGUpKQ0KCSAgKG5vdCAoc3RyaW5nLW1hdGNoICJcXFMtIiAoYnVmZmVy LXN1YnN0cmluZyAob3ZlcmxheS1zdGFydCBvKQ0KCQkJCQkJICAgICAgKG92ZXJsYXktZW5kIG8p KSkpDQoJICAoZGVsZXRlLW92ZXJsYXkgbykpKQ0KICAgKG92ZXJsYXlzLWF0IHBvcykpKQ0KDQoo ZGVmdW4gb3JnLWNsZWFuLXZpc2liaWxpdHktYWZ0ZXItc3VidHJlZS1tb3ZlICgpDQogICJGaXgg dmlzaWJpbGl0eSBpc3N1ZXMgYWZ0ZXIgbW92aW5nIGEgc3VidHJlZS4iDQogIDs7IEZpcnN0LCBm aW5kIGEgcmVhc29uYWJsZSByZWdpb24gdG8gbG9vayBhdDoNCiAgOzsgU3RhcnQgdHdvIHNpYmxp bmdzIGFib3ZlLCBlbmQgdGhyZWUgYmVsb3cNCiAgKGxldCogKChiZWcgKHNhdmUtZXhjdXJzaW9u DQoJCShhbmQgKG9yZy1nZXQtbGFzdC1zaWJsaW5nKQ0KCQkgICAgIChvcmctZ2V0LWxhc3Qtc2li bGluZykpDQoJCShwb2ludCkpKQ0KCSAoZW5kIChzYXZlLWV4Y3Vyc2lvbg0KCQkoYW5kIChvcmct Z2V0LW5leHQtc2libGluZykNCgkJICAgICAob3JnLWdldC1uZXh0LXNpYmxpbmcpDQoJCSAgICAg KG9yZy1nZXQtbmV4dC1zaWJsaW5nKSkNCgkJKGlmIChvcmctYXQtaGVhZGluZy1wKQ0KCQkgICAg KHBvaW50LWF0LWVvbCkNCgkJICAocG9pbnQpKSkpDQoJIChsZXZlbCAobG9va2luZy1hdCAiXFwq KyIpKQ0KCSAocmUgKGlmIGxldmVsIChjb25jYXQgIl4iIChyZWdleHAtcXVvdGUgKG1hdGNoLXN0 cmluZyAwKSkgIiAiKSkpKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgKHNhdmUtcmVzdHJp Y3Rpb24NCgkobmFycm93LXRvLXJlZ2lvbiBiZWcgZW5kKQ0KCSh3aGVuIHJlDQoJICA7OyBQcm9w ZXJseSBmb2xkIGFscmVhZHkgZm9sZGVkIHNpYmxpbmdzDQoJICAoZ290by1jaGFyIChwb2ludC1t aW4pKQ0KCSAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCByZSBuaWwgdCkNCgkgICAgKGlmIChh bmQgKG5vdCAob3V0bGluZS1pbnZpc2libGUtcCkpDQoJCSAgICAgKHNhdmUtZXhjdXJzaW9uDQoJ CSAgICAgICAoZ290by1jaGFyIChwb2ludC1hdC1lb2wpKSAob3V0bGluZS1pbnZpc2libGUtcCkp KQ0KCQkoaGlkZS1lbnRyeSkpKSkNCgkob3JnLWN5Y2xlLXNob3ctZW1wdHktbGluZXMgJ292ZXJ2 aWV3KQ0KCShvcmctY3ljbGUtaGlkZS1kcmF3ZXJzICdvdmVydmlldykpKSkpDQoNCihkZWZ1biBv cmctY3ljbGUtc2hvdy1lbXB0eS1saW5lcyAoc3RhdGUpDQogICJTaG93IGVtcHR5IGxpbmVzIGFi b3ZlIGFsbCB2aXNpYmxlIGhlYWRsaW5lcy4NClRoZSByZWdpb24gdG8gYmUgY292ZXJlZCBkZXBl bmRzIG9uIFNUQVRFIHdoZW4gY2FsbGVkIHRocm91Z2gNCmBvcmctY3ljbGUtaG9vaycuICBMaXNw IHByb2dyYW0gY2FuIHVzZSB0IGZvciBTVEFURSB0byBnZXQgdGhlDQplbnRpcmUgYnVmZmVyIGNv dmVyZWQuICBOb3RlIHRoYXQgYW4gZW1wdHkgbGluZSBpcyBvbmx5IHNob3duIGlmIHRoZXJlDQph cmUgYXQgbGVhc3QgYG9yZy1jeWNsZS1zZXBhcmF0b3ItbGluZXMnIGVtcHR5IGxpbmVzIGJlZm9y ZSB0aGUgaGVhZGxpbmUuIg0KICAod2hlbiAobm90ICg9IG9yZy1jeWNsZS1zZXBhcmF0b3ItbGlu ZXMgMCkpDQogICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAobGV0KiAoKG4gKGFicyBvcmctY3lj bGUtc2VwYXJhdG9yLWxpbmVzKSkNCgkgICAgIChyZSAoY29uZA0KCQkgICgoPSBuIDEpICJcXChc blsgXHRdKlxuXFwqK1xcKSAiKQ0KCQkgICgoPSBuIDIpICJeWyBcdF0qXFwoXG5bIFx0XSpcblxc KitcXCkgIikNCgkJICAodCAobGV0ICgobnMgKG51bWJlci10by1zdHJpbmcgKC0gbiAyKSkpKQ0K CQkgICAgICAgKGNvbmNhdCAiXlxcKD86WyBcdF0qXG5cXClcXHsiIG5zICIsIiBucyAiXFx9Ig0K CQkJICAgICAgICJbIFx0XSpcXChcblsgXHRdKlxuXFwqK1xcKSAiKSkpKSkNCgkgICAgIGJlZyBl bmQgYiBlKQ0KCShjb25kDQoJICgobWVtcSBzdGF0ZSAnKG92ZXJ2aWV3IGNvbnRlbnRzIHQpKQ0K CSAgKHNldHEgYmVnIChwb2ludC1taW4pIGVuZCAocG9pbnQtbWF4KSkpDQoJICgobWVtcSBzdGF0 ZSAnKGNoaWxkcmVuIGZvbGRlZCkpDQoJICAoc2V0cSBiZWcgKHBvaW50KSBlbmQgKHByb2duIChv cmctZW5kLW9mLXN1YnRyZWUgdCB0KQ0KCQkJCSAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMikN CgkJCQkgICAgICAgKHBvaW50KSkpKSkNCgkod2hlbiBiZWcNCgkgIChnb3RvLWNoYXIgYmVnKQ0K CSAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCByZSBlbmQgdCkNCgkgICAgKHVubGVzcyAoZ2V0 LWNoYXItcHJvcGVydHkgKG1hdGNoLWVuZCAxKSAnaW52aXNpYmxlKQ0KCSAgICAgIChzZXRxIGUg KG1hdGNoLWVuZCAxKSkNCgkgICAgICAoaWYgKDwgb3JnLWN5Y2xlLXNlcGFyYXRvci1saW5lcyAw KQ0KCQkgIChzZXRxIGIgKHNhdmUtZXhjdXJzaW9uDQoJCQkgICAgKGdvdG8tY2hhciAobWF0Y2gt YmVnaW5uaW5nIDApKQ0KCQkJICAgIChvcmctYmFjay1vdmVyLWVtcHR5LWxpbmVzKQ0KCQkJICAg IChpZiAoc2F2ZS1leGN1cnNpb24NCgkJCQkgIChnb3RvLWNoYXIgKG1heCAocG9pbnQtbWluKSAo MS0gKHBvaW50KSkpKQ0KCQkJCSAgKG9yZy1hdC1oZWFkaW5nLXApKQ0KCQkJCSgxLSAocG9pbnQp KQ0KCQkJICAgICAgKHBvaW50KSkpKQ0KCQkoc2V0cSBiIChtYXRjaC1iZWdpbm5pbmcgMSkpKQ0K CSAgICAgIChvdXRsaW5lLWZsYWctcmVnaW9uIGIgZSBuaWwpKSkpKSkpDQogIDs7IE5ldmVyIGhp ZGUgZW1wdHkgbGluZXMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4NCiAgKHNhdmUtZXhjdXJzaW9u DQogICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkNCiAgICAob3V0bGluZS1wcmV2aW91cy1oZWFk aW5nKQ0KICAgIChvdXRsaW5lLWVuZC1vZi1oZWFkaW5nKQ0KICAgIChpZiAoYW5kIChsb29raW5n LWF0ICJbIFx0XG5dKyIpDQoJICAgICAoPSAobWF0Y2gtZW5kIDApIChwb2ludC1tYXgpKSkNCgko b3V0bGluZS1mbGFnLXJlZ2lvbiAocG9pbnQpIChtYXRjaC1lbmQgMCkgbmlsKSkpKQ0KDQooZGVm dW4gb3JnLXNob3ctZW1wdHktbGluZXMtaW4tcGFyZW50ICgpDQogICJNb3ZlIHRvIHRoZSBwYXJl bnQgYW5kIHJlLXNob3cgZW1wdHkgbGluZXMgYmVmb3JlIHZpc2libGUgaGVhZGxpbmVzLiINCiAg KHNhdmUtZXhjdXJzaW9uDQogICAgKGxldCAoKGNvbnRleHQgKGlmIChvcmctdXAtaGVhZGluZy1z YWZlKSAnY2hpbGRyZW4gJ292ZXJ2aWV3KSkpDQogICAgICAob3JnLWN5Y2xlLXNob3ctZW1wdHkt bGluZXMgY29udGV4dCkpKSkNCg0KKGRlZnVuIG9yZy1maWxlcy1saXN0ICgpDQogICJSZXR1cm4g YG9yZy1hZ2VuZGEtZmlsZXMnIGxpc3QsIHBsdXMgYWxsIG9wZW4gb3JnLW1vZGUgZmlsZXMuDQpU aGlzIGlzIHVzZWZ1bCBmb3Igb3BlcmF0aW9ucyB0aGF0IG5lZWQgdG8gc2NhbiBhbGwgb2YgYSB1 c2VyJ3MNCm9wZW4gYW5kIGFnZW5kYS13aXNlIE9yZyBmaWxlcy4iDQogIChsZXQgKChmaWxlcyAo bWFwY2FyICdleHBhbmQtZmlsZS1uYW1lIChvcmctYWdlbmRhLWZpbGVzKSkpKQ0KICAgIChkb2xp c3QgKGJ1ZiAoYnVmZmVyLWxpc3QpKQ0KICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmDQoJ KGlmIChhbmQgKGRlcml2ZWQtbW9kZS1wICdvcmctbW9kZSkgKGJ1ZmZlci1maWxlLW5hbWUpKQ0K CSAgICAobGV0ICgoZmlsZSAoZXhwYW5kLWZpbGUtbmFtZSAoYnVmZmVyLWZpbGUtbmFtZSkpKSkN CgkgICAgICAodW5sZXNzIChtZW1iZXIgZmlsZSBmaWxlcykNCgkJKHB1c2ggZmlsZSBmaWxlcykp KSkpKQ0KICAgIGZpbGVzKSkNCg0KKGRlZnN1YnN0IG9yZy1lbnRyeS1iZWdpbm5pbmctcG9zaXRp b24gKCkNCiAgIlJldHVybiB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IGVu dHJ5LiINCiAgKHNhdmUtZXhjdXJzaW9uIChvdXRsaW5lLWJhY2stdG8taGVhZGluZyB0KSAocG9p bnQpKSkNCg0KKGRlZnN1YnN0IG9yZy1lbnRyeS1lbmQtcG9zaXRpb24gKCkNCiAgIlJldHVybiB0 aGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IGVudHJ5LiINCiAgKHNhdmUtZXhjdXJzaW9u IChvdXRsaW5lLW5leHQtaGVhZGluZykgKHBvaW50KSkpDQoNCihkZWZ1biBvcmctY3ljbGUtaGlk ZS1kcmF3ZXJzIChzdGF0ZSkNCiAgIlJlLWhpZGUgYWxsIGRyYXdlcnMgYWZ0ZXIgYSB2aXNpYmls aXR5IHN0YXRlIGNoYW5nZS4iDQogICh3aGVuIChhbmQgKGRlcml2ZWQtbW9kZS1wICdvcmctbW9k ZSkNCgkgICAgIChub3QgKG1lbXEgc3RhdGUgJyhvdmVydmlldyBmb2xkZWQgY29udGVudHMpKSkp DQogICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAobGV0KiAoKGdsb2JhbHAgKG1lbXEgc3RhdGUg Jyhjb250ZW50cyBhbGwpKSkNCiAgICAgICAgICAgICAoYmVnIChpZiBnbG9iYWxwIChwb2ludC1t aW4pIChwb2ludCkpKQ0KICAgICAgICAgICAgIChlbmQgKGlmIGdsb2JhbHAgKHBvaW50LW1heCkN CgkJICAgIChpZiAoZXEgc3RhdGUgJ2NoaWxkcmVuKQ0KCQkJKHNhdmUtZXhjdXJzaW9uIChvdXRs aW5lLW5leHQtaGVhZGluZykgKHBvaW50KSkNCgkJICAgICAgKG9yZy1lbmQtb2Ytc3VidHJlZSB0 KSkpKSkNCgkoZ290by1jaGFyIGJlZykNCgkod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy1k cmF3ZXItcmVnZXhwIGVuZCB0KQ0KCSAgKG9yZy1mbGFnLWRyYXdlciB0KSkpKSkpDQoNCihkZWZ1 biBvcmctY3ljbGUtaGlkZS1pbmxpbmUtdGFza3MgKHN0YXRlKQ0KICAiUmUtaGlkZSBpbmxpbmUg dGFza3Mgd2hlbiBzd2l0Y2hpbmcgdG8gJ2NvbnRlbnRzIG9yICdjaGlsZHJlbg0KdmlzaWJpbGl0 eSBzdGF0ZS4iDQogIChjYXNlIHN0YXRlDQogICAgKGNvbnRlbnRzDQogICAgICh3aGVuIChvcmct Ym91bmQtYW5kLXRydWUtcCBvcmctaW5saW5ldGFzay1taW4tbGV2ZWwpDQogICAgICAgKGhpZGUt c3VibGV2ZWxzICgxLSBvcmctaW5saW5ldGFzay1taW4tbGV2ZWwpKSkpDQogICAgKGNoaWxkcmVu DQogICAgICh3aGVuIChmZWF0dXJlcCAnb3JnLWlubGluZXRhc2spDQogICAgICAgKHNhdmUtZXhj dXJzaW9uDQoJICh3aGlsZSAoYW5kIChvdXRsaW5lLW5leHQtaGVhZGluZykNCgkJICAgICAob3Jn LWlubGluZXRhc2stYXQtdGFzay1wKSkNCgkgICAob3JnLWlubGluZXRhc2stdG9nZ2xlLXZpc2li aWxpdHkpDQoJICAgKG9yZy1pbmxpbmV0YXNrLWdvdG8tZW5kKSkpKSkpKQ0KDQooZGVmdW4gb3Jn LWZsYWctZHJhd2VyIChmbGFnKQ0KICAiV2hlbiBGTEFHIGlzIG5vbi1uaWwsIGhpZGUgdGhlIGRy YXdlciB3ZSBhcmUgd2l0aGluLg0KT3RoZXJ3aXNlIG1ha2UgaXQgdmlzaWJsZS4iDQogIChzYXZl LWV4Y3Vyc2lvbg0KICAgIChiZWdpbm5pbmctb2YtbGluZSAxKQ0KICAgICh3aGVuIChsb29raW5n LWF0ICJeWyBcdF0qOlthLXpBLVpdW2EtekEtWjAtOV0qOiIpDQogICAgICAobGV0ICgoYiAobWF0 Y2gtZW5kIDApKSkNCgkoaWYgKHJlLXNlYXJjaC1mb3J3YXJkDQoJICAgICAiXlsgXHRdKjpFTkQ6 Ig0KCSAgICAgKHNhdmUtZXhjdXJzaW9uIChvdXRsaW5lLW5leHQtaGVhZGluZykgKHBvaW50KSkg dCkNCgkgICAgKG91dGxpbmUtZmxhZy1yZWdpb24gYiAocG9pbnQtYXQtZW9sKSBmbGFnKQ0KCSAg KHVzZXItZXJyb3IgIjpFTkQ6IGxpbmUgbWlzc2luZyBhdCBwb3NpdGlvbiAlcyIgYikpKSkpKQ0K DQooZGVmdW4gb3JnLXN1YnRyZWUtZW5kLXZpc2libGUtcCAoKQ0KICAiSXMgdGhlIGVuZCBvZiB0 aGUgY3VycmVudCBzdWJ0cmVlIHZpc2libGU/Ig0KICAocG9zLXZpc2libGUtaW4td2luZG93LXAN CiAgIChzYXZlLWV4Y3Vyc2lvbiAob3JnLWVuZC1vZi1zdWJ0cmVlIHQpIChwb2ludCkpKSkNCg0K KGRlZnVuIG9yZy1maXJzdC1oZWFkbGluZS1yZWNlbnRlciAoKQ0KICAiTW92ZSBjdXJzb3IgdG8g dGhlIGZpcnN0IGhlYWRsaW5lIGFuZCByZWNlbnRlciB0aGUgaGVhZGxpbmUuIg0KICAoZ290by1j aGFyIChwb2ludC1taW4pKQ0KICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgKGNvbmNhdCAiXlxc KCIgb3JnLW91dGxpbmUtcmVnZXhwICJcXCkiKSBuaWwgdCkNCiAgICAoc2V0LXdpbmRvdy1zdGFy dCAoc2VsZWN0ZWQtd2luZG93KSAocG9pbnQtYXQtYm9sKSkpKQ0KDQo7OzsgU2F2aW5nIGFuZCBy ZXN0b3JpbmcgdmlzaWJpbGl0eQ0KDQooZGVmdW4gb3JnLW91dGxpbmUtb3ZlcmxheS1kYXRhICgm b3B0aW9uYWwgdXNlLW1hcmtlcnMpDQogICJSZXR1cm4gYSBsaXN0IG9mIHRoZSBsb2NhdGlvbnMg b2YgYWxsIG91dGxpbmUgb3ZlcmxheXMuDQpUaGVzZSBhcmUgb3ZlcmxheXMgd2l0aCB0aGUgYGlu dmlzaWJsZScgcHJvcGVydHkgdmFsdWUgYG91dGxpbmUnLg0KVGhlIHJldHVybiB2YWx1ZSBpcyBh IGxpc3Qgb2YgY29ucyBjZWxscywgd2l0aCBzdGFydCBhbmQgc3RvcA0KcG9zaXRpb25zIGZvciBl YWNoIG92ZXJsYXkuDQpJZiBVU0UtTUFSS0VSUyBpcyBzZXQsIHJldHVybiB0aGUgcG9zaXRpb25z IGFzIG1hcmtlcnMuIg0KICAobGV0IChiZWcgZW5kKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAg ICAgKHNhdmUtcmVzdHJpY3Rpb24NCgkod2lkZW4pDQoJKGRlbHEgbmlsDQoJICAgICAgKG1hcGNh ciAobGFtYmRhIChvKQ0KCQkJKHdoZW4gKGVxIChvdmVybGF5LWdldCBvICdpbnZpc2libGUpICdv dXRsaW5lKQ0KCQkJICAoc2V0cSBiZWcgKG92ZXJsYXktc3RhcnQgbykNCgkJCQllbmQgKG92ZXJs YXktZW5kIG8pKQ0KCQkJICAoYW5kIGJlZyBlbmQgKD4gZW5kIGJlZykNCgkJCSAgICAgICAoaWYg dXNlLW1hcmtlcnMNCgkJCQkgICAoY29ucyAobW92ZS1tYXJrZXIgKG1ha2UtbWFya2VyKSBiZWcp DQoJCQkJCSAobW92ZS1tYXJrZXIgKG1ha2UtbWFya2VyKSBlbmQpKQ0KCQkJCSAoY29ucyBiZWcg ZW5kKSkpKSkNCgkJICAgICAgKG92ZXJsYXlzLWluIChwb2ludC1taW4pIChwb2ludC1tYXgpKSkp KSkpKQ0KDQooZGVmdW4gb3JnLXNldC1vdXRsaW5lLW92ZXJsYXktZGF0YSAoZGF0YSkNCiAgIkNy ZWF0ZSB2aXNpYmlsaXR5IG92ZXJsYXlzIGZvciBhbGwgcG9zaXRpb25zIGluIERBVEEuDQpEQVRB IHNob3VsZCBoYXZlIGJlZW4gbWFkZSBieSBgb3JnLW91dGxpbmUtb3ZlcmxheS1kYXRhJy4iDQog IChsZXQgKG8pDQogICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAoc2F2ZS1yZXN0cmljdGlvbg0K CSh3aWRlbikNCgkoc2hvdy1hbGwpDQoJKG1hcGMgKGxhbWJkYSAoYykNCgkJKG91dGxpbmUtZmxh Zy1yZWdpb24gKGNhciBjKSAoY2RyIGMpIHQpKQ0KCSAgICAgIGRhdGEpKSkpKQ0KDQo7OzsgRm9s ZGluZyBvZiBibG9ja3MNCg0KKGRlZnZhciBvcmctaGlkZS1ibG9jay1vdmVybGF5cyBuaWwNCiAg Ik92ZXJsYXlzIGhpZGluZyBibG9ja3MuIikNCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAn b3JnLWhpZGUtYmxvY2stb3ZlcmxheXMpDQoNCihkZWZ1biBvcmctYmxvY2stbWFwIChmdW5jdGlv biAmb3B0aW9uYWwgc3RhcnQgZW5kKQ0KICAiQ2FsbCBGVU5DVElPTiBhdCB0aGUgaGVhZCBvZiBh bGwgc291cmNlIGJsb2NrcyBpbiB0aGUgY3VycmVudCBidWZmZXIuDQpPcHRpb25hbCBhcmd1bWVu dHMgU1RBUlQgYW5kIEVORCBjYW4gYmUgdXNlZCB0byBsaW1pdCB0aGUgcmFuZ2UuIg0KICAobGV0 ICgoc3RhcnQgKG9yIHN0YXJ0IChwb2ludC1taW4pKSkNCiAgICAgICAgKGVuZCAob3IgZW5kIChw b2ludC1tYXgpKSkpDQogICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAoZ290by1jaGFyIHN0YXJ0 KQ0KICAgICAgKHdoaWxlIChhbmQgKDwgKHBvaW50KSBlbmQpIChyZS1zZWFyY2gtZm9yd2FyZCBv cmctYmxvY2stcmVnZXhwIGVuZCB0KSkNCgkoc2F2ZS1leGN1cnNpb24NCgkgIChzYXZlLW1hdGNo LWRhdGENCiAgICAgICAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAwKSkNCiAgICAg ICAgICAgIChmdW5jYWxsIGZ1bmN0aW9uKSkpKSkpKQ0KDQooZGVmdW4gb3JnLWhpZGUtYmxvY2st dG9nZ2xlLWFsbCAoKQ0KICAiVG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGFsbCBibG9ja3MgaW4g dGhlIGN1cnJlbnQgYnVmZmVyLiINCiAgKG9yZy1ibG9jay1tYXAgIydvcmctaGlkZS1ibG9jay10 b2dnbGUpKQ0KDQooZGVmdW4gb3JnLWhpZGUtYmxvY2stYWxsICgpDQogICJGb2xkIGFsbCBibG9j a3MgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiINCiAgKGludGVyYWN0aXZlKQ0KICAob3JnLXNob3ct YmxvY2stYWxsKQ0KICAob3JnLWJsb2NrLW1hcCAjJ29yZy1oaWRlLWJsb2NrLXRvZ2dsZS1tYXli ZSkpDQoNCihkZWZ1biBvcmctc2hvdy1ibG9jay1hbGwgKCkNCiAgIlVuZm9sZCBhbGwgYmxvY2tz IGluIHRoZSBjdXJyZW50IGJ1ZmZlci4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKG1hcGMgJ2RlbGV0 ZS1vdmVybGF5IG9yZy1oaWRlLWJsb2NrLW92ZXJsYXlzKQ0KICAoc2V0cSBvcmctaGlkZS1ibG9j ay1vdmVybGF5cyBuaWwpKQ0KDQooZGVmdW4gb3JnLWhpZGUtYmxvY2stdG9nZ2xlLW1heWJlICgp DQogICJUb2dnbGUgdmlzaWJpbGl0eSBvZiBibG9jayBhdCBwb2ludC4iDQogIChpbnRlcmFjdGl2 ZSkNCiAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggdCkpDQogICAgKGlmIChzYXZlLWV4Y3Vyc2lv bg0KICAgICAgICAgIChiZWdpbm5pbmctb2YtbGluZSAxKQ0KICAgICAgICAgIChsb29raW5nLWF0 IG9yZy1ibG9jay1yZWdleHApKQ0KICAgICAgICAocHJvZ24gKG9yZy1oaWRlLWJsb2NrLXRvZ2ds ZSkNCiAgICAgICAgICAgICAgIHQpIDs7IHRvIHNpZ25hbCB0aGF0IHdlIHRvb2sgYWN0aW9uDQog ICAgICBuaWwpKSkgOzsgdG8gc2lnbmFsIHRoYXQgd2UgZGlkIG5vdA0KDQooZGVmdW4gb3JnLWhp ZGUtYmxvY2stdG9nZ2xlICgmb3B0aW9uYWwgZm9yY2UpDQogICJUb2dnbGUgdGhlIHZpc2liaWxp dHkgb2YgdGhlIGN1cnJlbnQgYmxvY2suIg0KICAoaW50ZXJhY3RpdmUpDQogIChzYXZlLWV4Y3Vy c2lvbg0KICAgIChiZWdpbm5pbmctb2YtbGluZSkNCiAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJk IG9yZy1ibG9jay1yZWdleHAgbmlsIHQpDQogICAgICAgIChsZXQgKChzdGFydCAoLSAobWF0Y2gt YmVnaW5uaW5nIDQpIDEpKSA7OyBiZWdpbm5pbmcgb2YgYm9keQ0KICAgICAgICAgICAgICAoZW5k IChtYXRjaC1lbmQgMCkpIDs7IGVuZCBvZiBlbnRpcmUgYm9keQ0KICAgICAgICAgICAgICBvdikN CiAgICAgICAgICAoaWYgKG1lbXEgdCAobWFwY2FyIChsYW1iZGEgKG92ZXJsYXkpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChlcSAob3ZlcmxheS1nZXQgb3ZlcmxheSAnaW52aXNp YmxlKQ0KCQkJCSAgICAnb3JnLWhpZGUtYmxvY2spKQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKG92ZXJsYXlzLWF0IHN0YXJ0KSkpDQogICAgICAgICAgICAgIChpZiAob3IgKG5vdCBm b3JjZSkgKGVxIGZvcmNlICdvZmYpKQ0KICAgICAgICAgICAgICAgICAgKG1hcGMgKGxhbWJkYSAo b3YpDQogICAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuIChtZW1iZXIgb3Ygb3JnLWhpZGUt YmxvY2stb3ZlcmxheXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgb3JnLWhp ZGUtYmxvY2stb3ZlcmxheXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVs cSBvdiBvcmctaGlkZS1ibG9jay1vdmVybGF5cykpKQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAod2hlbiAoZXEgKG92ZXJsYXktZ2V0IG92ICdpbnZpc2libGUpDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnb3JnLWhpZGUtYmxvY2spDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG92KSkpDQogICAgICAgICAgICAgICAgICAgICAgICAo b3ZlcmxheXMtYXQgc3RhcnQpKSkNCiAgICAgICAgICAgIChzZXRxIG92IChtYWtlLW92ZXJsYXkg c3RhcnQgZW5kKSkNCiAgICAgICAgICAgIChvdmVybGF5LXB1dCBvdiAnaW52aXNpYmxlICdvcmct aGlkZS1ibG9jaykNCiAgICAgICAgICAgIDs7IG1ha2UgdGhlIGJsb2NrIGFjY2Vzc2libGUgdG8g aXNlYXJjaA0KICAgICAgICAgICAgKG92ZXJsYXktcHV0DQogICAgICAgICAgICAgb3YgJ2lzZWFy Y2gtb3Blbi1pbnZpc2libGUNCiAgICAgICAgICAgICAobGFtYmRhIChvdikNCiAgICAgICAgICAg ICAgICh3aGVuIChtZW1iZXIgb3Ygb3JnLWhpZGUtYmxvY2stb3ZlcmxheXMpDQogICAgICAgICAg ICAgICAgIChzZXRxIG9yZy1oaWRlLWJsb2NrLW92ZXJsYXlzDQogICAgICAgICAgICAgICAgICAg ICAgIChkZWxxIG92IG9yZy1oaWRlLWJsb2NrLW92ZXJsYXlzKSkpDQogICAgICAgICAgICAgICAo d2hlbiAoZXEgKG92ZXJsYXktZ2V0IG92ICdpbnZpc2libGUpDQogICAgICAgICAgICAgICAgICAg ICAgICAgJ29yZy1oaWRlLWJsb2NrKQ0KICAgICAgICAgICAgICAgICAoZGVsZXRlLW92ZXJsYXkg b3YpKSkpDQogICAgICAgICAgICAocHVzaCBvdiBvcmctaGlkZS1ibG9jay1vdmVybGF5cykpKQ0K ICAgICAgKHVzZXItZXJyb3IgIk5vdCBsb29raW5nIGF0IGEgc291cmNlIGJsb2NrIikpKSkNCg0K Ozsgb3JnLXRhYi1hZnRlci1jaGVjay1mb3ItY3ljbGluZy1ob29rDQooYWRkLWhvb2sgJ29yZy10 YWItZmlyc3QtaG9vayAnb3JnLWhpZGUtYmxvY2stdG9nZ2xlLW1heWJlKQ0KOzsgUmVtb3ZlIG92 ZXJsYXlzIHdoZW4gY2hhbmdpbmcgbWFqb3IgbW9kZQ0KKGFkZC1ob29rICdvcmctbW9kZS1ob29r DQoJICAobGFtYmRhICgpIChvcmctYWRkLWhvb2sgJ2NoYW5nZS1tYWpvci1tb2RlLWhvb2sNCgkJ CQkgICAnb3JnLXNob3ctYmxvY2stYWxsICdhcHBlbmQgJ2xvY2FsKSkpDQoNCjs7OyBPcmctZ290 bw0KDQooZGVmdmFyIG9yZy1nb3RvLXdpbmRvdy1jb25maWd1cmF0aW9uIG5pbCkNCihkZWZ2YXIg b3JnLWdvdG8tbWFya2VyIG5pbCkNCihkZWZ2YXIgb3JnLWdvdG8tbWFwKQ0KKGRlZnVuIG9yZy1n b3RvLW1hcCAoKQ0KICAiU2V0IHRoZSBrZXltYXAgYG9yZy1nb3RvJy4iDQogIChzZXRxIG9yZy1n b3RvLW1hcA0KCShsZXQgKChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpKQ0KCSAgKGxldCAoKGNt ZHMgJyhpc2VhcmNoLWZvcndhcmQgaXNlYXJjaC1iYWNrd2FyZCBraWxsLXJpbmctc2F2ZSBzZXQt bWFyay1jb21tYW5kDQoJCQkJCW1vdXNlLWRyYWctcmVnaW9uIHVuaXZlcnNhbC1hcmd1bWVudCBv cmctb2NjdXIpKQ0KCQljbWQpDQoJICAgICh3aGlsZSAoc2V0cSBjbWQgKHBvcCBjbWRzKSkNCgkg ICAgICAoc3Vic3RpdHV0ZS1rZXktZGVmaW5pdGlvbiBjbWQgY21kIG1hcCBnbG9iYWwtbWFwKSkp DQoJICAoc3VwcHJlc3Mta2V5bWFwIG1hcCkNCgkgIChvcmctZGVma2V5IG1hcCAiXEMtbSIgICAg ICdvcmctZ290by1yZXQpDQoJICAob3JnLWRlZmtleSBtYXAgWyhyZXR1cm4pXSAnb3JnLWdvdG8t cmV0KQ0KCSAgKG9yZy1kZWZrZXkgbWFwIFsobGVmdCldICAgJ29yZy1nb3RvLWxlZnQpDQoJICAo b3JnLWRlZmtleSBtYXAgWyhyaWdodCldICAnb3JnLWdvdG8tcmlnaHQpDQoJICAob3JnLWRlZmtl eSBtYXAgWyhjb250cm9sID9nKV0gJ29yZy1nb3RvLXF1aXQpDQoJICAob3JnLWRlZmtleSBtYXAg IlxDLWkiICdvcmctY3ljbGUpDQoJICAob3JnLWRlZmtleSBtYXAgWyh0YWIpXSAnb3JnLWN5Y2xl KQ0KCSAgKG9yZy1kZWZrZXkgbWFwIFsoZG93bildICdvdXRsaW5lLW5leHQtdmlzaWJsZS1oZWFk aW5nKQ0KCSAgKG9yZy1kZWZrZXkgbWFwIFsodXApXSAnb3V0bGluZS1wcmV2aW91cy12aXNpYmxl LWhlYWRpbmcpDQoJICAoaWYgb3JnLWdvdG8tYXV0by1pc2VhcmNoDQoJICAgICAgKGlmIChmYm91 bmRwICdkZWZpbmUta2V5LWFmdGVyKQ0KCQkgIChkZWZpbmUta2V5LWFmdGVyIG1hcCBbdF0gJ29y Zy1nb3RvLWxvY2FsLWF1dG8taXNlYXJjaCkNCgkJbmlsKQ0KCSAgICAob3JnLWRlZmtleSBtYXAg InEiICdvcmctZ290by1xdWl0KQ0KCSAgICAob3JnLWRlZmtleSBtYXAgIm4iICdvdXRsaW5lLW5l eHQtdmlzaWJsZS1oZWFkaW5nKQ0KCSAgICAob3JnLWRlZmtleSBtYXAgInAiICdvdXRsaW5lLXBy ZXZpb3VzLXZpc2libGUtaGVhZGluZykNCgkgICAgKG9yZy1kZWZrZXkgbWFwICJmIiAnb3V0bGlu ZS1mb3J3YXJkLXNhbWUtbGV2ZWwpDQoJICAgIChvcmctZGVma2V5IG1hcCAiYiIgJ291dGxpbmUt YmFja3dhcmQtc2FtZS1sZXZlbCkNCgkgICAgKG9yZy1kZWZrZXkgbWFwICJ1IiAnb3V0bGluZS11 cC1oZWFkaW5nKSkNCgkgIChvcmctZGVma2V5IG1hcCAiLyIgJ29yZy1vY2N1cikNCgkgIChvcmct ZGVma2V5IG1hcCAiXEMtY1xDLW4iICdvdXRsaW5lLW5leHQtdmlzaWJsZS1oZWFkaW5nKQ0KCSAg KG9yZy1kZWZrZXkgbWFwICJcQy1jXEMtcCIgJ291dGxpbmUtcHJldmlvdXMtdmlzaWJsZS1oZWFk aW5nKQ0KCSAgKG9yZy1kZWZrZXkgbWFwICJcQy1jXEMtZiIgJ291dGxpbmUtZm9yd2FyZC1zYW1l LWxldmVsKQ0KCSAgKG9yZy1kZWZrZXkgbWFwICJcQy1jXEMtYiIgJ291dGxpbmUtYmFja3dhcmQt c2FtZS1sZXZlbCkNCgkgIChvcmctZGVma2V5IG1hcCAiXEMtY1xDLXUiICdvdXRsaW5lLXVwLWhl YWRpbmcpDQoJICBtYXApKSkNCg0KKGRlZmNvbnN0IG9yZy1nb3RvLWhlbHANCiAgIkJyb3dzZSBi dWZmZXIgY29weSwgdG8gZmluZCBsb2NhdGlvbiBvciBjb3B5IHRleHQuJXMNClJFVD1qdW1wIHRv IGxvY2F0aW9uICAgICAgICAgICAgIEMtZz1xdWl0IGFuZCByZXR1cm4gdG8gcHJldmlvdXMgbG9j YXRpb24NClxbVXBdL1tEb3duXT1uZXh0L3ByZXYgaGVhZGxpbmUgICBUQUI9Y3ljbGUgdmlzaWJp bGl0eSAgIFsvXSBvcmctb2NjdXIiKQ0KDQooZGVmdmFyIG9yZy1nb3RvLXN0YXJ0LXBvcykgOyBk eW5hbWljYWxseSBzY29wZWQgcGFyYW1ldGVyDQoNCihkZWZ1biBvcmctZ290byAoJm9wdGlvbmFs IGFsdGVybmF0aXZlLWludGVyZmFjZSkNCiAgIkxvb2sgdXAgYSBkaWZmZXJlbnQgbG9jYXRpb24g aW4gdGhlIGN1cnJlbnQgZmlsZSwga2VlcGluZyBjdXJyZW50IHZpc2liaWxpdHkuDQoNCldoZW4g eW91IHdhbnQgbG9vay11cCBvciBnbyB0byBhIGRpZmZlcmVudCBsb2NhdGlvbiBpbiBhDQpkb2N1 bWVudCwgdGhlIGZhc3Rlc3Qgd2F5IGlzIG9mdGVuIHRvIGZvbGQgdGhlIGVudGlyZSBidWZmZXIg YW5kDQp0aGVuIGRpdmUgaW50byB0aGUgdHJlZS4gIFRoaXMgbWV0aG9kIGhhcyB0aGUgZGlzYWR2 YW50YWdlLCB0aGF0DQp0aGUgcHJldmlvdXMgbG9jYXRpb24gd2lsbCBiZSBmb2xkZWQsIHdoaWNo IG1heSBub3QgYmUgd2hhdCB5b3UNCndhbnQuDQoNClRoaXMgY29tbWFuZCB3b3JrcyBhcm91bmQg dGhpcyBieSBzaG93aW5nIGEgY29weSBvZiB0aGUgY3VycmVudA0KYnVmZmVyIGluIGFuIGluZGly ZWN0IGJ1ZmZlciwgaW4gb3ZlcnZpZXcgbW9kZS4gIFlvdSBjYW4gZGl2ZQ0KaW50byB0aGUgdHJl ZSBpbiB0aGF0IGNvcHksIHVzZSBvcmctb2NjdXIgYW5kIGluY3JlbWVudGFsIHNlYXJjaA0KdG8g ZmluZCBhIGxvY2F0aW9uLiAgV2hlbiBwcmVzc2luZyBSRVQgb3IgYFEnLCB0aGUgY29tbWFuZA0K cmV0dXJucyB0byB0aGUgb3JpZ2luYWwgYnVmZmVyIGluIHdoaWNoIHRoZSB2aXNpYmlsaXR5IGlz IHN0aWxsDQp1bmNoYW5nZWQuICBBZnRlciBSRVQgaXQgd2lsbCBhbHNvIGp1bXAgdG8gdGhlIGxv Y2F0aW9uIHNlbGVjdGVkDQppbiB0aGUgaW5kaXJlY3QgYnVmZmVyIGFuZCBleHBvc2UgdGhlIGhl YWRsaW5lIGhpZXJhcmNoeSBhYm92ZS4NCg0KV2l0aCBhIHByZWZpeCBhcmd1bWVudCwgdXNlIHRo ZSBhbHRlcm5hdGl2ZSBpbnRlcmZhY2U6IGUuZy4gaWYNCmBvcmctZ290by1pbnRlcmZhY2UnIGlz ICdvdXRsaW5lIHVzZSAnb3V0bGluZS1wYXRoLWNvbXBsZXRpb24uIg0KICAoaW50ZXJhY3RpdmUg IlAiKQ0KICAob3JnLWdvdG8tbWFwKQ0KICAobGV0KiAoKG9yZy1yZWZpbGUtdGFyZ2V0cyBgKChu aWwgLiAoOm1heGxldmVsIC4gLG9yZy1nb3RvLW1heC1sZXZlbCkpKSkNCgkgKG9yZy1yZWZpbGUt dXNlLW91dGxpbmUtcGF0aCB0KQ0KCSAob3JnLXJlZmlsZS10YXJnZXQtdmVyaWZ5LWZ1bmN0aW9u IG5pbCkNCgkgKGludGVyZmFjZQ0KCSAgKGlmIChub3QgYWx0ZXJuYXRpdmUtaW50ZXJmYWNlKQ0K CSAgICAgIG9yZy1nb3RvLWludGVyZmFjZQ0KCSAgICAoaWYgKGVxIG9yZy1nb3RvLWludGVyZmFj ZSAnb3V0bGluZSkNCgkJJ291dGxpbmUtcGF0aC1jb21wbGV0aW9uDQoJICAgICAgJ291dGxpbmUp KSkNCgkgKG9yZy1nb3RvLXN0YXJ0LXBvcyAocG9pbnQpKQ0KCSAoc2VsZWN0ZWQtcG9pbnQNCgkg IChpZiAoZXEgaW50ZXJmYWNlICdvdXRsaW5lKQ0KCSAgICAgIChjYXIgKG9yZy1nZXQtbG9jYXRp b24gKGN1cnJlbnQtYnVmZmVyKSBvcmctZ290by1oZWxwKSkNCgkgICAgKGxldCAoKHBhIChvcmct cmVmaWxlLWdldC1sb2NhdGlvbiAiR290byIgbmlsIG5pbCB0KSkpDQoJICAgICAgKG9yZy1yZWZp bGUtY2hlY2stcG9zaXRpb24gcGEpDQoJICAgICAgKG50aCAzIHBhKSkpKSkNCiAgICAoaWYgc2Vs ZWN0ZWQtcG9pbnQNCgkocHJvZ24NCgkgIChvcmctbWFyay1yaW5nLXB1c2ggb3JnLWdvdG8tc3Rh cnQtcG9zKQ0KCSAgKGdvdG8tY2hhciBzZWxlY3RlZC1wb2ludCkNCgkgIChpZiAob3IgKG91dGxp bmUtaW52aXNpYmxlLXApIChvcmctaW52aXNpYmxlLXAyKSkNCgkgICAgICAob3JnLXNob3ctY29u dGV4dCAnb3JnLWdvdG8pKSkNCiAgICAgIChtZXNzYWdlICJRdWl0IikpKSkNCg0KKGRlZnZhciBv cmctZ290by1zZWxlY3RlZC1wb2ludCBuaWwpIDsgZHluYW1pY2FsbHkgc2NvcGVkIHBhcmFtZXRl cg0KKGRlZnZhciBvcmctZ290by1leGl0LWNvbW1hbmQgbmlsKSA7IGR5bmFtaWNhbGx5IHNjb3Bl ZCBwYXJhbWV0ZXINCihkZWZ2YXIgb3JnLWdvdG8tbG9jYWwtYXV0by1pc2VhcmNoLW1hcCkgOyBk ZWZpbmVkIGJlbG93DQoNCihkZWZ1biBvcmctZ2V0LWxvY2F0aW9uIChidWYgaGVscCkNCiAgIkxl dCB0aGUgdXNlciBzZWxlY3QgYSBsb2NhdGlvbiBpbiB0aGUgT3JnLW1vZGUgYnVmZmVyIEJVRi4N ClRoaXMgZnVuY3Rpb24gdXNlcyBhIHJlY3Vyc2l2ZSBlZGl0LiAgSXQgcmV0dXJucyB0aGUgc2Vs ZWN0ZWQgcG9zaXRpb24NCm9yIG5pbC4iDQogIChvcmctbm8tcG9wdXBzDQogICAobGV0ICgoaXNl YXJjaC1tb2RlLW1hcCBvcmctZ290by1sb2NhbC1hdXRvLWlzZWFyY2gtbWFwKQ0KCSAoaXNlYXJj aC1oaWRlLWltbWVkaWF0ZWx5IG5pbCkNCgkgKGlzZWFyY2gtc2VhcmNoLWZ1bi1mdW5jdGlvbg0K CSAgKGxhbWJkYSAoKSAnb3JnLWdvdG8tbG9jYWwtc2VhcmNoLWhlYWRpbmdzKSkNCgkgKG9yZy1n b3RvLXNlbGVjdGVkLXBvaW50IG9yZy1nb3RvLWV4aXQtY29tbWFuZCkpDQogICAgIChzYXZlLWV4 Y3Vyc2lvbg0KICAgICAgIChzYXZlLXdpbmRvdy1leGN1cnNpb24NCgkgKGRlbGV0ZS1vdGhlci13 aW5kb3dzKQ0KCSAoYW5kIChnZXQtYnVmZmVyICIqb3JnLWdvdG8qIikgKGtpbGwtYnVmZmVyICIq b3JnLWdvdG8qIikpDQoJIChvcmctcG9wLXRvLWJ1ZmZlci1zYW1lLXdpbmRvdw0KCSAgKGNvbmRp dGlvbi1jYXNlIG5pbA0KCSAgICAgIChtYWtlLWluZGlyZWN0LWJ1ZmZlciAoY3VycmVudC1idWZm ZXIpICIqb3JnLWdvdG8qIikNCgkgICAgKGVycm9yIChtYWtlLWluZGlyZWN0LWJ1ZmZlciAoY3Vy cmVudC1idWZmZXIpICIqb3JnLWdvdG8qIikpKSkNCgkgKHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVm ZmVyICIqT3JnIEhlbHAqIg0KCSAgIChwcmluYyAoZm9ybWF0IGhlbHAgKGlmIG9yZy1nb3RvLWF1 dG8taXNlYXJjaA0KCQkJCSAgICIgIEp1c3QgdHlwZSBmb3IgYXV0by1pc2VhcmNoLiINCgkJCQkg IiAgbi9wL2YvYi91IHRvIG5hdmlnYXRlLCBxIHRvIHF1aXQuIikpKSkNCgkgKG9yZy1maXQtd2lu ZG93LXRvLWJ1ZmZlciAoZ2V0LWJ1ZmZlci13aW5kb3cgIipPcmcgSGVscCoiKSkNCgkgKHNldHEg YnVmZmVyLXJlYWQtb25seSBuaWwpDQoJIChsZXQgKChvcmctc3RhcnR1cC10cnVuY2F0ZWQgdCkN CgkgICAgICAgKG9yZy1zdGFydHVwLWZvbGRlZCBuaWwpDQoJICAgICAgIChvcmctc3RhcnR1cC1h bGlnbi1hbGwtdGFibGVzIG5pbCkpDQoJICAgKG9yZy1tb2RlKQ0KCSAgIChvcmctb3ZlcnZpZXcp KQ0KCSAoc2V0cSBidWZmZXItcmVhZC1vbmx5IHQpDQoJIChpZiAoYW5kIChib3VuZHAgJ29yZy1n b3RvLXN0YXJ0LXBvcykNCgkJICAoaW50ZWdlci1vci1tYXJrZXItcCBvcmctZ290by1zdGFydC1w b3MpKQ0KCSAgICAgKGxldCAoKG9yZy1zaG93LWhpZXJhcmNoeS1hYm92ZSB0KQ0KCQkgICAob3Jn LXNob3ctc2libGluZ3MgdCkNCgkJICAgKG9yZy1zaG93LWZvbGxvd2luZy1oZWFkaW5nIHQpKQ0K CSAgICAgICAoZ290by1jaGFyIG9yZy1nb3RvLXN0YXJ0LXBvcykNCgkgICAgICAgKGFuZCAob3V0 bGluZS1pbnZpc2libGUtcCkgKG9yZy1zaG93LWNvbnRleHQpKSkNCgkgICAoZ290by1jaGFyIChw b2ludC1taW4pKSkNCgkgKGxldCAob3JnLXNwZWNpYWwtY3RybC1hL2UpIChvcmctYmVnaW5uaW5n LW9mLWxpbmUpKQ0KCSAobWVzc2FnZSAiU2VsZWN0IGxvY2F0aW9uIGFuZCBwcmVzcyBSRVQiKQ0K CSAodXNlLWxvY2FsLW1hcCBvcmctZ290by1tYXApDQoJIChyZWN1cnNpdmUtZWRpdCkpKQ0KICAg ICAoa2lsbC1idWZmZXIgIipvcmctZ290byoiKQ0KICAgICAoY29ucyBvcmctZ290by1zZWxlY3Rl ZC1wb2ludCBvcmctZ290by1leGl0LWNvbW1hbmQpKSkpDQoNCihkZWZ2YXIgb3JnLWdvdG8tbG9j YWwtYXV0by1pc2VhcmNoLW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkNCihzZXQta2V5bWFwLXBh cmVudCBvcmctZ290by1sb2NhbC1hdXRvLWlzZWFyY2gtbWFwIGlzZWFyY2gtbW9kZS1tYXApDQoo ZGVmaW5lLWtleSBvcmctZ290by1sb2NhbC1hdXRvLWlzZWFyY2gtbWFwICJcQy1pIiAnaXNlYXJj aC1vdGhlci1jb250cm9sLWNoYXIpDQooZGVmaW5lLWtleSBvcmctZ290by1sb2NhbC1hdXRvLWlz ZWFyY2gtbWFwICJcQy1tIiAnaXNlYXJjaC1vdGhlci1jb250cm9sLWNoYXIpDQoNCihkZWZ1biBv cmctZ290by1sb2NhbC1zZWFyY2gtaGVhZGluZ3MgKHN0cmluZyBib3VuZCBub2Vycm9yKQ0KICAi U2VhcmNoIGFuZCBtYWtlIHN1cmUgdGhhdCBhbnkgbWF0Y2hlcyBhcmUgaW4gaGVhZGxpbmVzLiIN CiAgKGNhdGNoICdyZXR1cm4NCiAgICAod2hpbGUgKGlmIGlzZWFyY2gtZm9yd2FyZA0KICAgICAg ICAgICAgICAgKHNlYXJjaC1mb3J3YXJkIHN0cmluZyBib3VuZCBub2Vycm9yKQ0KICAgICAgICAg ICAgIChzZWFyY2gtYmFja3dhcmQgc3RyaW5nIGJvdW5kIG5vZXJyb3IpKQ0KICAgICAgKHdoZW4g KGxldCAoKGNvbnRleHQgKG1hcGNhciAnY2FyIChzYXZlLW1hdGNoLWRhdGEgKG9yZy1jb250ZXh0 KSkpKSkNCgkgICAgICAoYW5kIChtZW1iZXIgOmhlYWRsaW5lIGNvbnRleHQpDQoJCSAgIChub3Qg KG1lbWJlciA6dGFncyBjb250ZXh0KSkpKQ0KCSh0aHJvdyAncmV0dXJuIChwb2ludCkpKSkpKQ0K DQooZGVmdW4gb3JnLWdvdG8tbG9jYWwtYXV0by1pc2VhcmNoICgpDQogICJTdGFydCBpc2VhcmNo LiINCiAgKGludGVyYWN0aXZlKQ0KICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KICAobGV0ICgo a2V5cyAodGhpcy1jb21tYW5kLWtleXMpKSkNCiAgICAod2hlbiAoZXEgKGxvb2t1cC1rZXkgaXNl YXJjaC1tb2RlLW1hcCBrZXlzKSAnaXNlYXJjaC1wcmludGluZy1jaGFyKQ0KICAgICAgKGlzZWFy Y2gtbW9kZSB0KQ0KICAgICAgKGlzZWFyY2gtcHJvY2Vzcy1zZWFyY2gtY2hhciAoc3RyaW5nLXRv LWNoYXIga2V5cykpKSkpDQoNCihkZWZ1biBvcmctZ290by1yZXQgKCZvcHRpb25hbCBhcmcpDQog ICJGaW5pc2ggYG9yZy1nb3RvJyBieSBnb2luZyB0byB0aGUgbmV3IGxvY2F0aW9uLiINCiAgKGlu dGVyYWN0aXZlICJQIikNCiAgKHNldHEgb3JnLWdvdG8tc2VsZWN0ZWQtcG9pbnQgKHBvaW50KQ0K CW9yZy1nb3RvLWV4aXQtY29tbWFuZCAncmV0dXJuKQ0KICAodGhyb3cgJ2V4aXQgbmlsKSkNCg0K KGRlZnVuIG9yZy1nb3RvLWxlZnQgKCkNCiAgIkZpbmlzaCBgb3JnLWdvdG8nIGJ5IGdvaW5nIHRv IHRoZSBuZXcgbG9jYXRpb24uIg0KICAoaW50ZXJhY3RpdmUpDQogIChpZiAob3JnLWF0LWhlYWRp bmctcCkNCiAgICAgIChwcm9nbg0KCShiZWdpbm5pbmctb2YtbGluZSAxKQ0KCShzZXRxIG9yZy1n b3RvLXNlbGVjdGVkLXBvaW50IChwb2ludCkNCgkgICAgICBvcmctZ290by1leGl0LWNvbW1hbmQg J2xlZnQpDQoJKHRocm93ICdleGl0IG5pbCkpDQogICAgKHVzZXItZXJyb3IgIk5vdCBvbiBhIGhl YWRpbmciKSkpDQoNCihkZWZ1biBvcmctZ290by1yaWdodCAoKQ0KICAiRmluaXNoIGBvcmctZ290 bycgYnkgZ29pbmcgdG8gdGhlIG5ldyBsb2NhdGlvbi4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKGlm IChvcmctYXQtaGVhZGluZy1wKQ0KICAgICAgKHByb2duDQoJKHNldHEgb3JnLWdvdG8tc2VsZWN0 ZWQtcG9pbnQgKHBvaW50KQ0KCSAgICAgIG9yZy1nb3RvLWV4aXQtY29tbWFuZCAncmlnaHQpDQoJ KHRocm93ICdleGl0IG5pbCkpDQogICAgKHVzZXItZXJyb3IgIk5vdCBvbiBhIGhlYWRpbmciKSkp DQoNCihkZWZ1biBvcmctZ290by1xdWl0ICgpDQogICJGaW5pc2ggYG9yZy1nb3RvJyB3aXRob3V0 IGN1cnNvciBtb3Rpb24uIg0KICAoaW50ZXJhY3RpdmUpDQogIChzZXRxIG9yZy1nb3RvLXNlbGVj dGVkLXBvaW50IG5pbCkNCiAgKHNldHEgb3JnLWdvdG8tZXhpdC1jb21tYW5kICdxdWl0KQ0KICAo dGhyb3cgJ2V4aXQgbmlsKSkNCg0KOzs7IEluZGlyZWN0IGJ1ZmZlciBkaXNwbGF5IG9mIHN1YnRy ZWVzDQoNCihkZWZ2YXIgb3JnLWluZGlyZWN0LWRlZGljYXRlZC1mcmFtZSBuaWwNCiAgIlRoaXMg aXMgdGhlIGZyYW1lIGJlaW5nIHVzZWQgZm9yIGluZGlyZWN0IHRyZWUgZGlzcGxheS4iKQ0KKGRl ZnZhciBvcmctbGFzdC1pbmRpcmVjdC1idWZmZXIgbmlsKQ0KDQooZGVmdW4gb3JnLXRyZWUtdG8t aW5kaXJlY3QtYnVmZmVyICgmb3B0aW9uYWwgYXJnKQ0KICAiQ3JlYXRlIGluZGlyZWN0IGJ1ZmZl ciBhbmQgbmFycm93IGl0IHRvIGN1cnJlbnQgc3VidHJlZS4NCldpdGggYSBudW1lcmljYWwgcHJl Zml4IEFSRywgZ28gdXAgdG8gdGhpcyBsZXZlbCBhbmQgdGhlbiB0YWtlIHRoYXQgdHJlZS4NCklm IEFSRyBpcyBuZWdhdGl2ZSwgZ28gdXAgdGhhdCBtYW55IGxldmVscy4NCg0KSWYgYG9yZy1pbmRp cmVjdC1idWZmZXItZGlzcGxheScgaXMgbm90IGBuZXctZnJhbWUnLCB0aGUgY29tbWFuZCByZW1v dmVzIHRoZQ0KaW5kaXJlY3QgYnVmZmVyIHByZXZpb3VzbHkgbWFkZSB3aXRoIHRoaXMgY29tbWFu ZCwgdG8gYXZvaWQgcHJvbGlmZXJhdGlvbiBvZg0KaW5kaXJlY3QgYnVmZmVycy4gIEhvd2V2ZXIs IHdoZW4geW91IGNhbGwgdGhlIGNvbW1hbmQgd2l0aCBhIFwNClxcW3VuaXZlcnNhbC1hcmd1bWVu dF0gcHJlZml4LCBvcg0Kd2hlbiBgb3JnLWluZGlyZWN0LWJ1ZmZlci1kaXNwbGF5JyBpcyBgbmV3 LWZyYW1lJywgdGhlIGxhc3QgYnVmZmVyDQppcyBrZXB0IHNvIHRoYXQgeW91IGNhbiB3b3JrIHdp dGggc2V2ZXJhbCBpbmRpcmVjdCBidWZmZXJzIGF0IHRoZSBzYW1lIHRpbWUuDQpJZiBgb3JnLWlu ZGlyZWN0LWJ1ZmZlci1kaXNwbGF5JyBpcyBgZGVkaWNhdGVkLWZyYW1lJywgdGhlIFwNClxcW3Vu aXZlcnNhbC1hcmd1bWVudF0gcHJlZml4IGFsc28NCnJlcXVlc3RzIHRoYXQgYSBuZXcgZnJhbWUg YmUgbWFkZSBmb3IgdGhlIG5ldyBidWZmZXIsIHNvIHRoYXQgdGhlIGRlZGljYXRlZA0KZnJhbWUg aXMgbm90IGNoYW5nZWQuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAobGV0ICgoY2J1ZiAoY3Vy cmVudC1idWZmZXIpKQ0KCShjd2luIChzZWxlY3RlZC13aW5kb3cpKQ0KCShwb3MgKHBvaW50KSkN CgliZWcgZW5kIGxldmVsIGhlYWRpbmcgaWJ1ZikNCiAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAg IChvcmctYmFjay10by1oZWFkaW5nIHQpDQogICAgICAod2hlbiAobnVtYmVycCBhcmcpDQoJKHNl dHEgbGV2ZWwgKG9yZy1vdXRsaW5lLWxldmVsKSkNCgkoaWYgKDwgYXJnIDApIChzZXRxIGFyZyAo KyBsZXZlbCBhcmcpKSkNCgkod2hpbGUgKD4gKHNldHEgbGV2ZWwgKG9yZy1vdXRsaW5lLWxldmVs KSkgYXJnKQ0KCSAgKG9yZy11cC1oZWFkaW5nLXNhZmUpKSkNCiAgICAgIChzZXRxIGJlZyAocG9p bnQpDQoJICAgIGhlYWRpbmcgKG9yZy1nZXQtaGVhZGluZykpDQogICAgICAob3JnLWVuZC1vZi1z dWJ0cmVlIHQgdCkNCiAgICAgIChpZiAob3JnLWF0LWhlYWRpbmctcCkgKGJhY2t3YXJkLWNoYXIg MSkpDQogICAgICAoc2V0cSBlbmQgKHBvaW50KSkpDQogICAgKGlmIChhbmQgKGJ1ZmZlci1saXZl LXAgb3JnLWxhc3QtaW5kaXJlY3QtYnVmZmVyKQ0KCSAgICAgKG5vdCAoZXEgb3JnLWluZGlyZWN0 LWJ1ZmZlci1kaXNwbGF5ICduZXctZnJhbWUpKQ0KCSAgICAgKG5vdCBhcmcpKQ0KCShraWxsLWJ1 ZmZlciBvcmctbGFzdC1pbmRpcmVjdC1idWZmZXIpKQ0KICAgIChzZXRxIGlidWYgKG9yZy1nZXQt aW5kaXJlY3QtYnVmZmVyIGNidWYpDQoJICBvcmctbGFzdC1pbmRpcmVjdC1idWZmZXIgaWJ1ZikN CiAgICAoY29uZA0KICAgICAoKG9yIChlcSBvcmctaW5kaXJlY3QtYnVmZmVyLWRpc3BsYXkgJ25l dy1mcmFtZSkNCgkgIChhbmQgYXJnIChlcSBvcmctaW5kaXJlY3QtYnVmZmVyLWRpc3BsYXkgJ2Rl ZGljYXRlZC1mcmFtZSkpKQ0KICAgICAgKHNlbGVjdC1mcmFtZSAobWFrZS1mcmFtZSkpDQogICAg ICAoZGVsZXRlLW90aGVyLXdpbmRvd3MpDQogICAgICAob3JnLXBvcC10by1idWZmZXItc2FtZS13 aW5kb3cgaWJ1ZikNCiAgICAgIChvcmctc2V0LWZyYW1lLXRpdGxlIGhlYWRpbmcpKQ0KICAgICAo KGVxIG9yZy1pbmRpcmVjdC1idWZmZXItZGlzcGxheSAnZGVkaWNhdGVkLWZyYW1lKQ0KICAgICAg KHJhaXNlLWZyYW1lDQogICAgICAgKHNlbGVjdC1mcmFtZSAob3IgKGFuZCBvcmctaW5kaXJlY3Qt ZGVkaWNhdGVkLWZyYW1lDQoJCQkgICAgICAoZnJhbWUtbGl2ZS1wIG9yZy1pbmRpcmVjdC1kZWRp Y2F0ZWQtZnJhbWUpDQoJCQkgICAgICBvcmctaW5kaXJlY3QtZGVkaWNhdGVkLWZyYW1lKQ0KCQkJ IChzZXRxIG9yZy1pbmRpcmVjdC1kZWRpY2F0ZWQtZnJhbWUgKG1ha2UtZnJhbWUpKSkpKQ0KICAg ICAgKGRlbGV0ZS1vdGhlci13aW5kb3dzKQ0KICAgICAgKG9yZy1wb3AtdG8tYnVmZmVyLXNhbWUt d2luZG93IGlidWYpDQogICAgICAob3JnLXNldC1mcmFtZS10aXRsZSAoY29uY2F0ICJJbmRpcmVj dDogIiBoZWFkaW5nKSkpDQogICAgICgoZXEgb3JnLWluZGlyZWN0LWJ1ZmZlci1kaXNwbGF5ICdj dXJyZW50LXdpbmRvdykNCiAgICAgIChvcmctcG9wLXRvLWJ1ZmZlci1zYW1lLXdpbmRvdyBpYnVm KSkNCiAgICAgKChlcSBvcmctaW5kaXJlY3QtYnVmZmVyLWRpc3BsYXkgJ290aGVyLXdpbmRvdykN CiAgICAgIChwb3AtdG8tYnVmZmVyIGlidWYpKQ0KICAgICAodCAoZXJyb3IgIkludmFsaWQgdmFs dWUiKSkpDQogICAgKGlmIChmZWF0dXJlcCAneGVtYWNzKQ0KICAgICAgICAoc2F2ZS1leGN1cnNp b24gKG9yZy1tb2RlKSAodHVybi1vbi1mb250LWxvY2spKSkNCiAgICAobmFycm93LXRvLXJlZ2lv biBiZWcgZW5kKQ0KICAgIChzaG93LWFsbCkNCiAgICAoZ290by1jaGFyIHBvcykNCiAgICAocnVu LWhvb2std2l0aC1hcmdzICdvcmctY3ljbGUtaG9vayAnYWxsKQ0KICAgIChhbmQgKHdpbmRvdy1s aXZlLXAgY3dpbikgKHNlbGVjdC13aW5kb3cgY3dpbikpKSkNCg0KKGRlZnVuIG9yZy1nZXQtaW5k aXJlY3QtYnVmZmVyICgmb3B0aW9uYWwgYnVmZmVyKQ0KICAoc2V0cSBidWZmZXIgKG9yIGJ1ZmZl ciAoY3VycmVudC1idWZmZXIpKSkNCiAgKGxldCAoKG4gMSkgKGJhc2UgKGJ1ZmZlci1uYW1lIGJ1 ZmZlcikpIGJuYW1lKQ0KICAgICh3aGlsZSAoYnVmZmVyLWxpdmUtcA0KCSAgICAoZ2V0LWJ1ZmZl ciAoc2V0cSBibmFtZSAoY29uY2F0IGJhc2UgIi0iIChudW1iZXItdG8tc3RyaW5nIG4pKSkpKQ0K ICAgICAgKHNldHEgbiAoMSsgbikpKQ0KICAgIChjb25kaXRpb24tY2FzZSBuaWwNCiAgICAgICAg KG1ha2UtaW5kaXJlY3QtYnVmZmVyIGJ1ZmZlciBibmFtZSAnY2xvbmUpDQogICAgICAoZXJyb3Ig KG1ha2UtaW5kaXJlY3QtYnVmZmVyIGJ1ZmZlciBibmFtZSkpKSkpDQoNCihkZWZ1biBvcmctc2V0 LWZyYW1lLXRpdGxlICh0aXRsZSkNCiAgIlNldCB0aGUgdGl0bGUgb2YgdGhlIGN1cnJlbnQgZnJh bWUgdG8gdGhlIHN0cmluZyBUSVRMRS4iDQogIDs7IEZJWE1FOiBob3cgdG8gbmFtZSBhIHNpbmds ZSBmcmFtZSBpbiBYRW1hY3M/Pz8NCiAgKHVubGVzcyAoZmVhdHVyZXAgJ3hlbWFjcykNCiAgICAo bW9kaWZ5LWZyYW1lLXBhcmFtZXRlcnMgKHNlbGVjdGVkLWZyYW1lKSAobGlzdCAoY29ucyAnbmFt ZSB0aXRsZSkpKSkpDQoNCjs7OzsgU3RydWN0dXJlIGVkaXRpbmcNCg0KOzs7IEluc2VydGluZyBo ZWFkbGluZXMNCg0KKGRlZnVuIG9yZy1wcmV2aW91cy1saW5lLWVtcHR5LXAgKCZvcHRpb25hbCBu ZXh0KQ0KICAiSXMgdGhlIHByZXZpb3VzIGxpbmUgYSBibGFuayBsaW5lPw0KV2hlbiBORVhUIGlz IG5vbi1uaWwsIGNoZWNrIHRoZSBuZXh0IGxpbmUgaW5zdGVhZC4iDQogIChzYXZlLWV4Y3Vyc2lv bg0KICAgIChhbmQgKG5vdCAoYm9icCkpDQoJIChvciAoYmVnaW5uaW5nLW9mLWxpbmUgKGlmIG5l eHQgMiAwKSkgdCkNCgkgKHNhdmUtbWF0Y2gtZGF0YQ0KCSAgIChsb29raW5nLWF0ICJbIFx0XSok IikpKSkpDQoNCihkZWZ1biBvcmctaW5zZXJ0LWhlYWRpbmcgKCZvcHRpb25hbCBhcmcgaW52aXNp YmxlLW9rKQ0KICAiSW5zZXJ0IGEgbmV3IGhlYWRpbmcgb3IgYW4gaXRlbSB3aXRoIHRoZSBzYW1l IGRlcHRoIGF0IHBvaW50Lg0KDQpJZiBwb2ludCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgaGVh ZGluZyBvciBhIGxpc3QgaXRlbSwgaW5zZXJ0DQphIG5ldyBoZWFkaW5nIG9yIGEgbmV3IGl0ZW0g YWJvdmUgdGhlIGN1cnJlbnQgb25lLiAgSWYgcG9pbnQgaXMNCmF0IHRoZSBiZWdpbm5pbmcgb2Yg YSBub3JtYWwgbGluZSwgdHVybiB0aGUgbGluZSBpbnRvIGEgaGVhZGluZy4NCg0KSWYgcG9pbnQg aXMgaW4gdGhlIG1pZGRsZSBvZiBhIGhlYWRsaW5lIG9yIGEgbGlzdCBpdGVtLCBzcGxpdCB0aGUN CmhlYWRsaW5lIG9yIHRoZSBpdGVtIGFuZCBjcmVhdGUgYSBuZXcgaGVhZGxpbmUvaXRlbSB3aXRo IHRoZSB0ZXh0DQppbiB0aGUgY3VycmVudCBsaW5lIGFmdGVyIHBvaW50IFwoc2VlIGBvcmctTS1S RVQtbWF5LXNwbGl0LWxpbmUnDQpvbiBob3cgdG8gbW9kaWZ5IHRoaXMgYmVoYXZpb3IpLg0KDQpX aXRoIG9uZSB1bml2ZXJzYWwgcHJlZmlyeCBhcmd1bWVudCwgc2V0IHRoZSB1c2VyIG9wdGlvbg0K YG9yZy1pbnNlcnQtaGVhZGluZy1yZXNwZWN0LWNvbnRlbnQnIHRvIHQgZm9yIHRoZSBkdXJhdGlv biBvZg0KdGhlIGNvbW1hbmQuICBUaGlzIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBkZXNjcmliZWQg YWJvdmUgaW4gdGhpcw0Kd2F5czogb24gbGlzdCBpdGVtcyBhbmQgYXQgdGhlIGJlZ2lubmluZyBv ZiBub3JtYWwgbGluZXMsIGZvcmNlDQp0aGUgaW5zZXJ0aW9uIG9mIGEgaGVhZGluZyBhZnRlciB0 aGUgY3VycmVudCBzdWJ0cmVlLg0KDQpXaXRoIHR3byB1bml2ZXJzYWwgcHJlZml4IGFyZ3VtZW50 cywgaW5zZXJ0IHRoZSBoZWFkaW5nIGF0IHRoZQ0KZW5kIG9mIHRoZSBncmFuZHBhcmVudCBzdWJ0 cmVlLiAgRm9yIGV4YW1wbGUsIGlmIHBvaW50IGlzIHdpdGhpbg0KYSAybmQtbGV2ZWwgaGVhZGlu ZywgdGhlbiBpdCB3aWxsIGluc2VydCBhIDJuZC1sZXZlbCBoZWFkaW5nIGF0DQp0aGUgZW5kIG9m IHRoZSAxc3QtbGV2ZWwgcGFyZW50IGhlYWRpbmcuDQoNCldoZW4gSU5WSVNJQkxFLU9LIGlzIHNl dCwgc3RvcCBhdCBpbnZpc2libGUgaGVhZGxpbmVzIHdoZW4gZ29pbmcNCmJhY2suICBUaGlzIGlz IGltcG9ydGFudCBmb3Igbm9uLWludGVyYWN0aXZlIHVzZXMgb2YgdGhlDQpjb21tYW5kLiINCiAg KGludGVyYWN0aXZlICJQIikNCiAgKGlmIChvcmctY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55 KSAob3JnLXJldmVhbCkpDQogIChsZXQgKChpdGVtcCAob3JnLWluLWl0ZW0tcCkpDQoJKG1heS1z cGxpdCAob3JnLWdldC1hbGlzdC1vcHRpb24gb3JnLU0tUkVULW1heS1zcGxpdC1saW5lICdoZWFk bGluZSkpDQoJKHJlc3BlY3QtY29udGVudCAob3Igb3JnLWluc2VydC1oZWFkaW5nLXJlc3BlY3Qt Y29udGVudA0KCQkJICAgICAoZXF1YWwgYXJnICcoNCkpKSkNCgkoaW5pdGlhbC1jb250ZW50ICIi KQ0KCShhZGp1c3QtZW1wdHktbGluZXMgdCkpDQoNCiAgICAoY29uZA0KDQogICAgICgob3IgKD0g KGJ1ZmZlci1zaXplKSAwKQ0KCSAgKGFuZCAobm90IChzYXZlLWV4Y3Vyc2lvbg0KCQkgICAgICAo YW5kIChpZ25vcmUtZXJyb3JzIChvcmctYmFjay10by1oZWFkaW5nIGludmlzaWJsZS1vaykpDQoJ CQkgICAob3JnLWF0LWhlYWRpbmctcCkpKSkNCgkgICAgICAgKG9yIGFyZyAobm90IGl0ZW1wKSkp KQ0KICAgICAgOzsgQXQgYmVnaW5uaW5nIG9mIGJ1ZmZlciBvciBzbyBoaWdoIHVwIHRoYXQgb25s eSBhIGhlYWRpbmcNCiAgICAgIDs7IG1ha2VzIHNlbnNlLg0KICAgICAgKGNvbmQgKChhbmQgKGJv bHApIChub3QgcmVzcGVjdC1jb250ZW50KSkgKGluc2VydCAiKiAiKSkNCgkgICAgKChub3QgcmVz cGVjdC1jb250ZW50KQ0KCSAgICAgKHVubGVzcyBtYXktc3BsaXQgKGVuZC1vZi1saW5lKSkNCgkg ICAgIChpbnNlcnQgIlxuKiAiKSkNCgkgICAgKChyZS1zZWFyY2gtZm9yd2FyZCBvcmctb3V0bGlu ZS1yZWdleHAtYm9sIG5pbCB0KQ0KCSAgICAgKGJlZ2lubmluZy1vZi1saW5lKQ0KCSAgICAgKGlu c2VydCAiKiBcbiIpDQoJICAgICAoYmFja3dhcmQtY2hhcikpDQoJICAgICh0IChnb3RvLWNoYXIg KHBvaW50LW1heCkpDQoJICAgICAgIChpbnNlcnQgIlxuKiAiKSkpDQogICAgICAocnVuLWhvb2tz ICdvcmctaW5zZXJ0LWhlYWRpbmctaG9vaykpDQoNCiAgICAgKChhbmQgaXRlbXAgKG5vdCAobWVt YmVyIGFyZyAnKCg0KSAoMTYpKSkpKQ0KICAgICAgOzsgSW5zZXJ0IGFuIGl0ZW0NCiAgICAgIChv cmctaW5zZXJ0LWl0ZW0pKQ0KDQogICAgICh0DQogICAgICA7OyBNYXliZSBtb3ZlIGF0IHRoZSBl bmQgb2YgdGhlIHN1YnRyZWUNCiAgICAgICh3aGVuIChlcXVhbCBhcmcgJygxNikpDQoJKG9yZy11 cC1oZWFkaW5nLXNhZmUpDQoJKG9yZy1lbmQtb2Ytc3VidHJlZSB0KSkNCiAgICAgIDs7IEluc2Vy dCBhIGhlYWRpbmcNCiAgICAgIChzYXZlLXJlc3RyaWN0aW9uDQoJKHdpZGVuKQ0KCShsZXQqICgo bGV2ZWwgbmlsKQ0KCSAgICAgICAob24taGVhZGluZyAob3JnLWF0LWhlYWRpbmctcCkpDQoJICAg ICAgIChlbXB0eS1saW5lLXAgKGlmIG9uLWhlYWRpbmcNCgkJCQkgKG9yZy1wcmV2aW91cy1saW5l LWVtcHR5LXApDQoJCQkgICAgICAgOzsgV2Ugd2lsbCBkZWNpZGUgbGF0ZXINCgkJCSAgICAgICBu aWwpKQ0KCSAgICAgICA7OyBHZXQgYSBsZXZlbCBzdHJpbmcgdG8gZmFsbCBiYWNrIG9uDQoJICAg ICAgIChmaXgtbGV2ZWwNCgkJKGlmIChvcmctYmVmb3JlLWZpcnN0LWhlYWRpbmctcCkgIioiDQoJ CSAgKHNhdmUtZXhjdXJzaW9uDQoJCSAgICAob3JnLWJhY2stdG8taGVhZGluZyB0KQ0KCQkgICAg KGlmIChvcmctcHJldmlvdXMtbGluZS1lbXB0eS1wKSAoc2V0cSBlbXB0eS1saW5lLXAgdCkpDQoJ CSAgICAobG9va2luZy1hdCBvcmctb3V0bGluZS1yZWdleHApDQoJCSAgICAobWFrZS1zdHJpbmcg KDEtIChsZW5ndGggKG1hdGNoLXN0cmluZyAwKSkpID8qKSkpKQ0KCSAgICAgICAoc3RhcnMNCgkJ KHNhdmUtZXhjdXJzaW9uDQoJCSAgKGNvbmRpdGlvbi1jYXNlIG5pbA0KCQkgICAgICAocHJvZ24N CgkJCShvcmctYmFjay10by1oZWFkaW5nIGludmlzaWJsZS1vaykNCgkJCSh3aGVuIChhbmQgKG5v dCBvbi1oZWFkaW5nKQ0KCQkJCSAgIChmZWF0dXJlcCAnb3JnLWlubGluZXRhc2spDQoJCQkJICAg KGludGVnZXJwIG9yZy1pbmxpbmV0YXNrLW1pbi1sZXZlbCkNCgkJCQkgICAoPj0gKGxlbmd0aCAo bWF0Y2gtc3RyaW5nIDApKQ0KCQkJCSAgICAgICBvcmctaW5saW5ldGFzay1taW4tbGV2ZWwpKQ0K CQkJICA7OyBGaW5kIGEgaGVhZGluZyBsZXZlbCBiZWZvcmUgdGhlIGlubGluZSB0YXNrDQoJCQkg ICh3aGlsZSAoYW5kIChzZXRxIGxldmVsIChvcmctdXAtaGVhZGluZy1zYWZlKSkNCgkJCQkgICAg ICAoPj0gbGV2ZWwgb3JnLWlubGluZXRhc2stbWluLWxldmVsKSkpDQoJCQkgIChpZiAob3JnLWF0 LWhlYWRpbmctcCkNCgkJCSAgICAgIChvcmctYmFjay10by1oZWFkaW5nIGludmlzaWJsZS1vaykN CgkJCSAgICAoZXJyb3IgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iKSkpDQoJCQkodW5sZXNzIChh bmQgKHNhdmUtZXhjdXJzaW9uDQoJCQkJICAgICAgIChzYXZlLW1hdGNoLWRhdGENCgkJCQkJIChv cmctYmFja3dhcmQtaGVhZGluZy1zYW1lLWxldmVsDQoJCQkJCSAgMSBpbnZpc2libGUtb2spKQ0K CQkJCSAgICAgICAoPSAocG9pbnQpIChtYXRjaC1iZWdpbm5pbmcgMCkpKQ0KCQkJCSAgICAgKG5v dCAob3JnLXByZXZpb3VzLWxpbmUtZW1wdHktcCB0KSkpDQoJCQkgIChzZXRxIGVtcHR5LWxpbmUt cCAob3IgZW1wdHktbGluZS1wDQoJCQkJCQkgKG9yZy1wcmV2aW91cy1saW5lLWVtcHR5LXApKSkp DQoJCQkobWF0Y2gtc3RyaW5nIDApKQ0KCQkgICAgKGVycm9yIChvciBmaXgtbGV2ZWwgIiogIikp KSkpDQoJICAgICAgIChibGFuay1hIChjZHIgKGFzc3EgJ2hlYWRpbmcgb3JnLWJsYW5rLWJlZm9y ZS1uZXctZW50cnkpKSkNCgkgICAgICAgKGJsYW5rIChpZiAoZXEgYmxhbmstYSAnYXV0bykgZW1w dHktbGluZS1wIGJsYW5rLWEpKQ0KCSAgICAgICBwb3MgaGlkZS1wcmV2aW91cyBwcmV2aW91cy1w b3MpDQoNCgkgIDs7IElmIHdlIGluc2VydCBhZnRlciBjb250ZW50LCBtb3ZlIHRoZXJlIGFuZCBj bGVhbiB1cCB3aGl0ZXNwYWNlDQoJICAod2hlbiAoYW5kIHJlc3BlY3QtY29udGVudA0KCQkgICAg IChub3QgKG9yZy1sb29raW5nLWF0LXAgb3JnLW91dGxpbmUtcmVnZXhwLWJvbCkpKQ0KCSAgICAo aWYgKG5vdCAob3JnLWJlZm9yZS1maXJzdC1oZWFkaW5nLXApKQ0KCQkob3JnLWVuZC1vZi1zdWJ0 cmVlIG5pbCB0KQ0KCSAgICAgIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctb3V0bGluZS1yZWdleHAt Ym9sKQ0KCSAgICAgIChiZWdpbm5pbmctb2YtbGluZSAwKSkNCgkgICAgKHNraXAtY2hhcnMtYmFj a3dhcmQgIiBcclxuIikNCgkgICAgKGFuZCAobm90IChsb29raW5nLWJhY2sgIl5cKisiKSkNCgkJ IChsb29raW5nLWF0ICJbIFx0XSsiKSAocmVwbGFjZS1tYXRjaCAiIikpDQoJICAgICh1bmxlc3Mg KGVvYnApIChmb3J3YXJkLWNoYXIgMSkpDQoJICAgICh3aGVuIChsb29raW5nLWF0ICJeXFwqIikN CgkgICAgICAodW5sZXNzIChib2JwKSAoYmFja3dhcmQtY2hhciAxKSkNCgkgICAgICAoaW5zZXJ0 ICJcbiIpKSkNCg0KCSAgOzsgSWYgd2UgYXJlIHNwbGl0dGluZywgZ3JhYiB0aGUgdGV4dCB0aGF0 IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgbmV3IGhlYWRsaW5lDQoJICAod2hlbiBtYXktc3BsaXQN CgkgICAgKGlmIChvcmctb24taGVhZGluZy1wKQ0KCQk7OyBUaGlzIGlzIGEgaGVhZGluZywgd2Ug c3BsaXQgaW50ZWxsaWdlbnRseSAoa2VlcGluZyB0YWdzKQ0KCQkobGV0ICgocG9zIChwb2ludCkp KQ0KCQkgIChnb3RvLWNoYXIgKHBvaW50LWF0LWJvbCkpDQoJCSAgKHVubGVzcyAobG9va2luZy1h dCBvcmctY29tcGxleC1oZWFkaW5nLXJlZ2V4cCkNCgkJICAgIChlcnJvciAiVGhpcyBzaG91bGQg bm90IGhhcHBlbiIpKQ0KCQkgICh3aGVuIChhbmQgKG1hdGNoLWJlZ2lubmluZyA0KQ0KCQkJICAg ICAoPiBwb3MgKG1hdGNoLWJlZ2lubmluZyA0KSkNCgkJCSAgICAgKDwgcG9zIChtYXRjaC1lbmQg NCkpKQ0KCQkgICAgKHNldHEgaW5pdGlhbC1jb250ZW50IChidWZmZXItc3Vic3RyaW5nIHBvcyAo bWF0Y2gtZW5kIDQpKSkNCgkJICAgIChnb3RvLWNoYXIgcG9zKQ0KCQkgICAgKGRlbGV0ZS1yZWdp b24gKHBvaW50KSAobWF0Y2gtZW5kIDQpKQ0KCQkgICAgKGlmIChsb29raW5nLWF0ICJbIFx0XSok IikNCgkJCShyZXBsYWNlLW1hdGNoICIiKQ0KCQkgICAgICAoaW5zZXJ0IChtYWtlLXN0cmluZyAo bGVuZ3RoIGluaXRpYWwtY29udGVudCkgP1wgKSkpDQoJCSAgICAoc2V0cSBpbml0aWFsLWNvbnRl bnQgKG9yZy10cmltIGluaXRpYWwtY29udGVudCkpKQ0KCQkgIChnb3RvLWNoYXIgcG9zKSkNCgkg ICAgICA7OyBhIG5vcm1hbCBsaW5lDQoJICAgICAgKHNldHEgaW5pdGlhbC1jb250ZW50DQoJCSAg ICAob3JnLXRyaW0gKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50KSAocG9pbnQtYXQtZW9sKSkpKQ0K CSAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKHBvaW50LWF0LWVvbCkpKSkNCg0KCSAgOzsg SWYgd2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUsIGluc2VydCBiZWZvcmUgaXQu ICBFbHNlIGFmdGVyDQoJICAoY29uZA0KCSAgICgoYW5kIChib2xwKSAobG9va2luZy1hdCAiWyBc dF0qJCIpKSkNCgkgICAoKGFuZCAoYm9scCkgKG5vdCAobG9va2luZy1hdCAiWyBcdF0qJCIpKSkN CgkgICAgKG9wZW4tbGluZSAxKSkNCgkgICAodA0KCSAgICAoZ290by1jaGFyIChwb2ludC1hdC1l b2wpKQ0KCSAgICAoaW5zZXJ0ICJcbiIpKSkNCg0KCSAgOzsgSW5zZXJ0IHRoZSBuZXcgaGVhZGlu Zw0KCSAgKGluc2VydCBzdGFycykNCgkgIChqdXN0LW9uZS1zcGFjZSkNCgkgIChpbnNlcnQgaW5p dGlhbC1jb250ZW50KQ0KCSAgKHdoZW4gYWRqdXN0LWVtcHR5LWxpbmVzDQoJICAgIChpZiAob3Ig KG5vdCBibGFuaykNCgkJICAgIChhbmQgYmxhbmsgKG5vdCAob3JnLXByZXZpb3VzLWxpbmUtZW1w dHktcCkpKSkNCgkJKG9yZy1OLWVtcHR5LWxpbmVzLWJlZm9yZS1jdXJyZW50IChpZiBibGFuayAx IDApKSkpDQoJICAocnVuLWhvb2tzICdvcmctaW5zZXJ0LWhlYWRpbmctaG9vaykpKSkpKSkNCg0K KGRlZnVuIG9yZy1OLWVtcHR5LWxpbmVzLWJlZm9yZS1jdXJyZW50IChOKQ0KICAiTWFrZSB0aGUg bnVtYmVyIG9mIGVtcHR5IGxpbmVzIGJlZm9yZSBjdXJyZW50IGV4YWN0bHkgTi4NClNvIHRoaXMg d2lsbCBkZWxldGUgb3IgYWRkIGVtcHR5IGxpbmVzLiINCiAgKHNhdmUtZXhjdXJzaW9uDQogICAg KGJlZ2lubmluZy1vZi1saW5lKQ0KICAgIChsZXQgKChwIChwb2ludCkpKQ0KICAgICAgKHNraXAt Y2hhcnMtYmFja3dhcmQgIiBcclx0XG4iKQ0KICAgICAgKHVubGVzcyAoYm9scCkgKGZvcndhcmQt bGluZSkpDQogICAgICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQpIHApKQ0KICAgICh3aGVuICg+IE4g MCkgKGluc2VydCAobWFrZS1zdHJpbmcgTiA/XG4pKSkpKQ0KDQooZGVmdW4gb3JnLWdldC1oZWFk aW5nICgmb3B0aW9uYWwgbm8tdGFncyBuby10b2RvKQ0KICAiUmV0dXJuIHRoZSBoZWFkaW5nIG9m IHRoZSBjdXJyZW50IGVudHJ5LCB3aXRob3V0IHRoZSBzdGFycy4NCldoZW4gTk8tVEFHUyBpcyBu b24tbmlsLCBkb24ndCBpbmNsdWRlIHRhZ3MuDQpXaGVuIE5PLVRPRE8gaXMgbm9uLW5pbCwgZG9u J3QgaW5jbHVkZSBUT0RPIGtleXdvcmRzLiINCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKG9yZy1i YWNrLXRvLWhlYWRpbmcgdCkNCiAgICAoY29uZA0KICAgICAoKGFuZCBuby10YWdzIG5vLXRvZG8p DQogICAgICAobG9va2luZy1hdCBvcmctY29tcGxleC1oZWFkaW5nLXJlZ2V4cCkNCiAgICAgICht YXRjaC1zdHJpbmcgNCkpDQogICAgIChuby10YWdzDQogICAgICAobG9va2luZy1hdCAoY29uY2F0 IG9yZy1vdXRsaW5lLXJlZ2V4cA0KCQkJICAiXFwoLio/XFwpIg0KCQkJICAiXFwoPzpbIFx0XSs6 W1s6YWxudW06XTpfQCMlXSs6XFwpP1sgXHRdKiQiKSkNCiAgICAgIChtYXRjaC1zdHJpbmcgMSkp DQogICAgIChuby10b2RvDQogICAgICAobG9va2luZy1hdCBvcmctdG9kby1saW5lLXJlZ2V4cCkN CiAgICAgIChtYXRjaC1zdHJpbmcgMykpDQogICAgICh0IChsb29raW5nLWF0IG9yZy1oZWFkaW5n LXJlZ2V4cCkNCgkobWF0Y2gtc3RyaW5nIDIpKSkpKQ0KDQooZGVmdmFyIG9yZ3N0cnVjdC1tb2Rl KSAgIDsgZGVmaW5lZCBiZWxvdw0KDQooZGVmdW4gb3JnLWhlYWRpbmctY29tcG9uZW50cyAoKQ0K ICAiUmV0dXJuIHRoZSBjb21wb25lbnRzIG9mIHRoZSBjdXJyZW50IGhlYWRpbmcuDQpUaGlzIGlz IGEgbGlzdCB3aXRoIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6DQotIHRoZSBsZXZlbCBhcyBhbiBp bnRlZ2VyDQotIHRoZSByZWR1Y2VkIGxldmVsLCBkaWZmZXJlbnQgaWYgYG9yZy1vZGQtbGV2ZWxz LW9ubHknIGlzIHNldC4NCi0gdGhlIFRPRE8ga2V5d29yZCwgb3IgbmlsDQotIHRoZSBwcmlvcml0 eSBjaGFyYWN0ZXIsIGxpa2UgP0EsIG9yIG5pbCBpZiBubyBwcmlvcml0eSBpcyBnaXZlbg0KLSB0 aGUgaGVhZGxpbmUgdGV4dCBpdHNlbGYsIG9yIHRoZSB0YWdzIHN0cmluZyBpZiBubyBoZWFkbGlu ZSB0ZXh0DQotIHRoZSB0YWdzIHN0cmluZywgb3IgbmlsLiINCiAgKHNhdmUtZXhjdXJzaW9uDQog ICAgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkNCiAgICAoaWYgKGxldCAoY2FzZS1mb2xkLXNlYXJj aCkNCiAgICAgICAgICAobG9va2luZy1hdA0KICAgICAgICAgICAoaWYgb3Jnc3RydWN0LW1vZGUN CiAgICAgICAgICAgICAgIG9yZy1oZWFkaW5nLXJlZ2V4cA0KICAgICAgICAgICAgIG9yZy1jb21w bGV4LWhlYWRpbmctcmVnZXhwKSkpDQogICAgICAgIChpZiBvcmdzdHJ1Y3QtbW9kZQ0KICAgICAg ICAgICAgKGxpc3QgKGxlbmd0aCAobWF0Y2gtc3RyaW5nIDEpKQ0KICAgICAgICAgICAgICAgICAg KG9yZy1yZWR1Y2VkLWxldmVsIChsZW5ndGggKG1hdGNoLXN0cmluZyAxKSkpDQogICAgICAgICAg ICAgICAgICBuaWwNCiAgICAgICAgICAgICAgICAgIG5pbA0KICAgICAgICAgICAgICAgICAgKG1h dGNoLXN0cmluZyAyKQ0KICAgICAgICAgICAgICAgICAgbmlsKQ0KICAgICAgICAgIChsaXN0IChs ZW5ndGggKG1hdGNoLXN0cmluZyAxKSkNCiAgICAgICAgICAgICAgICAob3JnLXJlZHVjZWQtbGV2 ZWwgKGxlbmd0aCAobWF0Y2gtc3RyaW5nIDEpKSkNCiAgICAgICAgICAgICAgICAob3JnLW1hdGNo LXN0cmluZy1uby1wcm9wZXJ0aWVzIDIpDQogICAgICAgICAgICAgICAgKGFuZCAobWF0Y2gtZW5k IDMpIChhcmVmIChtYXRjaC1zdHJpbmcgMykgMikpDQogICAgICAgICAgICAgICAgKG9yZy1tYXRj aC1zdHJpbmctbm8tcHJvcGVydGllcyA0KQ0KICAgICAgICAgICAgICAgIChvcmctbWF0Y2gtc3Ry aW5nLW5vLXByb3BlcnRpZXMgNSkpKSkpKQ0KDQooZGVmdW4gb3JnLWdldC1lbnRyeSAoKQ0KICAi R2V0IHRoZSBlbnRyeSB0ZXh0LCBhZnRlciBoZWFkaW5nLCBlbnRpcmUgc3VidHJlZS4iDQogIChz YXZlLWV4Y3Vyc2lvbg0KICAgIChvcmctYmFjay10by1oZWFkaW5nIHQpDQogICAgKGJ1ZmZlci1z dWJzdHJpbmcgKHBvaW50LWF0LWJvbCAyKSAob3JnLWVuZC1vZi1zdWJ0cmVlIHQpKSkpDQoNCihk ZWZ1biBvcmctaW5zZXJ0LWhlYWRpbmctYWZ0ZXItY3VycmVudCAoKQ0KICAiSW5zZXJ0IGEgbmV3 IGhlYWRpbmcgd2l0aCBzYW1lIGxldmVsIGFzIGN1cnJlbnQsIGFmdGVyIGN1cnJlbnQgc3VidHJl ZS4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKG9yZy1iYWNrLXRvLWhlYWRpbmcpDQogIChvcmctaW5z ZXJ0LWhlYWRpbmcpDQogIChvcmctbW92ZS1zdWJ0cmVlLWRvd24pDQogIChlbmQtb2YtbGluZSAx KSkNCg0KKGRlZnVuIG9yZy1pbnNlcnQtaGVhZGluZy1yZXNwZWN0LWNvbnRlbnQgKCZvcHRpb25h bCBpbnZpc2libGUtb2spDQogICJJbnNlcnQgaGVhZGluZyB3aXRoIGBvcmctaW5zZXJ0LWhlYWRp bmctcmVzcGVjdC1jb250ZW50JyBzZXQgdG8gdC4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKG9yZy1p bnNlcnQtaGVhZGluZyAnKDQpIGludmlzaWJsZS1vaykpDQoNCihkZWZ1biBvcmctaW5zZXJ0LXRv ZG8taGVhZGluZy1yZXNwZWN0LWNvbnRlbnQgKCZvcHRpb25hbCBmb3JjZS1zdGF0ZSkNCiAgIklu c2VydCBUT0RPIGhlYWRpbmcgd2l0aCBgb3JnLWluc2VydC1oZWFkaW5nLXJlc3BlY3QtY29udGVu dCcgc2V0IHRvIHQuIg0KICAoaW50ZXJhY3RpdmUpDQogIChvcmctaW5zZXJ0LXRvZG8taGVhZGlu ZyBmb3JjZS1zdGF0ZSAnKDQpKSkNCg0KKGRlZnVuIG9yZy1pbnNlcnQtdG9kby1oZWFkaW5nIChh cmcgJm9wdGlvbmFsIGZvcmNlLWhlYWRpbmcpDQogICJJbnNlcnQgYSBuZXcgaGVhZGluZyB3aXRo IHRoZSBzYW1lIGxldmVsIGFuZCBUT0RPIHN0YXRlIGFzIGN1cnJlbnQgaGVhZGluZy4NCklmIHRo ZSBoZWFkaW5nIGhhcyBubyBUT0RPIHN0YXRlLCBvciBpZiB0aGUgc3RhdGUgaXMgRE9ORSwgdXNl IHRoZSBmaXJzdA0Kc3RhdGUgKFRPRE8gYnkgZGVmYXVsdCkuICBBbHNvIHdpdGggb25lIHByZWZp eCBhcmcsIGZvcmNlIGZpcnN0IHN0YXRlLiAgV2l0aA0KdHdvIHByZWZpeCBhcmdzLCBmb3JjZSBp bnNlcnRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IHN1YnRyZWUuIg0KICAoaW50ZXJhY3Rp dmUgIlAiKQ0KICAod2hlbiAob3IgZm9yY2UtaGVhZGluZyAobm90IChvcmctaW5zZXJ0LWl0ZW0g J2NoZWNrYm94KSkpDQogICAgKG9yZy1pbnNlcnQtaGVhZGluZyAob3IgKGFuZCAoZXF1YWwgYXJn ICcoMTYpKSAnKDE2KSkNCgkJCSAgICBmb3JjZS1oZWFkaW5nKSkNCiAgICAoc2F2ZS1leGN1cnNp b24NCiAgICAgIChvcmctYmFjay10by1oZWFkaW5nKQ0KICAgICAgKG91dGxpbmUtcHJldmlvdXMt aGVhZGluZykNCiAgICAgIChsb29raW5nLWF0IG9yZy10b2RvLWxpbmUtcmVnZXhwKSkNCiAgICAo bGV0Kg0KICAgICAgICAoKG5ldy1tYXJrLXgNCgkgIChpZiAob3IgKGVxdWFsIGFyZyAnKDQpKQ0K CQkgIChub3QgKG1hdGNoLWJlZ2lubmluZyAyKSkNCgkJICAobWVtYmVyIChtYXRjaC1zdHJpbmcg Mikgb3JnLWRvbmUta2V5d29yZHMpKQ0KIAkgICAgICAoY2FyIG9yZy10b2RvLWtleXdvcmRzLTEp DQoJICAgIChtYXRjaC1zdHJpbmcgMikpKQ0KCSAobmV3LW1hcmsNCgkgIChvcg0KCSAgIChydW4t aG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2Vzcw0KCSAgICAnb3JnLXRvZG8tZ2V0LWRlZmF1bHQt aG9vayBuZXctbWFyay14IG5pbCkNCgkgICBuZXctbWFyay14KSkpDQogICAgICAoYmVnaW5uaW5n LW9mLWxpbmUgMSkNCiAgICAgIChhbmQgKGxvb2tpbmctYXQgb3JnLW91dGxpbmUtcmVnZXhwKSAo Z290by1jaGFyIChtYXRjaC1lbmQgMCkpDQoJICAgKGlmIG9yZy10cmVhdC1pbnNlcnQtdG9kby1o ZWFkaW5nLWFzLXN0YXRlLWNoYW5nZQ0KCSAgICAgICAob3JnLXRvZG8gbmV3LW1hcmspDQoJICAg ICAoaW5zZXJ0IG5ldy1tYXJrICIgIikpKSkNCiAgICAod2hlbiBvcmctcHJvdmlkZS10b2RvLXN0 YXRpc3RpY3MNCiAgICAgIChvcmctdXBkYXRlLXBhcmVudC10b2RvLXN0YXRpc3RpY3MpKSkpDQoN CihkZWZ1biBvcmctaW5zZXJ0LXN1YmhlYWRpbmcgKGFyZykNCiAgIkluc2VydCBhIG5ldyBzdWJo ZWFkaW5nIGFuZCBkZW1vdGUgaXQuDQpXb3JrcyBmb3Igb3V0bGluZSBoZWFkaW5ncyBhbmQgZm9y IHBsYWluIGxpc3RzIGFsaWtlLiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgKG9yZy1pbnNlcnQt aGVhZGluZyBhcmcpDQogIChjb25kDQogICAoKG9yZy1hdC1oZWFkaW5nLXApIChvcmctZG8tZGVt b3RlKSkNCiAgICgob3JnLWF0LWl0ZW0tcCkgKG9yZy1pbmRlbnQtaXRlbSkpKSkNCg0KKGRlZnVu IG9yZy1pbnNlcnQtdG9kby1zdWJoZWFkaW5nIChhcmcpDQogICJJbnNlcnQgYSBuZXcgc3ViaGVh ZGluZyB3aXRoIFRPRE8ga2V5d29yZCBvciBjaGVja2JveCBhbmQgZGVtb3RlIGl0Lg0KV29ya3Mg Zm9yIG91dGxpbmUgaGVhZGluZ3MgYW5kIGZvciBwbGFpbiBsaXN0cyBhbGlrZS4iDQogIChpbnRl cmFjdGl2ZSAiUCIpDQogIChvcmctaW5zZXJ0LXRvZG8taGVhZGluZyBhcmcpDQogIChjb25kDQog ICAoKG9yZy1hdC1oZWFkaW5nLXApIChvcmctZG8tZGVtb3RlKSkNCiAgICgob3JnLWF0LWl0ZW0t cCkgKG9yZy1pbmRlbnQtaXRlbSkpKSkNCg0KOzs7IFByb21vdGlvbiBhbmQgRGVtb3Rpb24NCg0K KGRlZnZhciBvcmctYWZ0ZXItZGVtb3RlLWVudHJ5LWhvb2sgbmlsDQogICJIb29rIHJ1biBhZnRl ciBhbiBlbnRyeSBoYXMgYmVlbiBkZW1vdGVkLg0KVGhlIGN1cnNvciB3aWxsIGJlIGF0IHRoZSBi ZWdpbm5pbmcgb2YgdGhlIGVudHJ5Lg0KV2hlbiBhIHN1YnRyZWUgaXMgYmVpbmcgZGVtb3RlZCwg dGhlIGhvb2sgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggbm9kZS4iKQ0KDQooZGVmdmFyIG9yZy1h ZnRlci1wcm9tb3RlLWVudHJ5LWhvb2sgbmlsDQogICJIb29rIHJ1biBhZnRlciBhbiBlbnRyeSBo YXMgYmVlbiBwcm9tb3RlZC4NClRoZSBjdXJzb3Igd2lsbCBiZSBhdCB0aGUgYmVnaW5uaW5nIG9m IHRoZSBlbnRyeS4NCldoZW4gYSBzdWJ0cmVlIGlzIGJlaW5nIHByb21vdGVkLCB0aGUgaG9vayB3 aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBub2RlLiIpDQoNCihkZWZ1biBvcmctcHJvbW90ZS1zdWJ0 cmVlICgpDQogICJQcm9tb3RlIHRoZSBlbnRpcmUgc3VidHJlZS4NClNlZSBhbHNvIGBvcmctcHJv bW90ZScuIg0KICAoaW50ZXJhY3RpdmUpDQogIChzYXZlLWV4Y3Vyc2lvbg0KICAgIChvcmctd2l0 aC1saW1pdGVkLWxldmVscyAob3JnLW1hcC10cmVlICdvcmctcHJvbW90ZSkpKQ0KICAob3JnLWZp eC1wb3NpdGlvbi1hZnRlci1wcm9tb3RlKSkNCg0KKGRlZnVuIG9yZy1kZW1vdGUtc3VidHJlZSAo KQ0KICAiRGVtb3RlIHRoZSBlbnRpcmUgc3VidHJlZS4gIFNlZSBgb3JnLWRlbW90ZScuDQpTZWUg YWxzbyBgb3JnLXByb21vdGUnLiINCiAgKGludGVyYWN0aXZlKQ0KICAoc2F2ZS1leGN1cnNpb24N CiAgICAob3JnLXdpdGgtbGltaXRlZC1sZXZlbHMgKG9yZy1tYXAtdHJlZSAnb3JnLWRlbW90ZSkp KQ0KICAob3JnLWZpeC1wb3NpdGlvbi1hZnRlci1wcm9tb3RlKSkNCg0KDQooZGVmdW4gb3JnLWRv LXByb21vdGUgKCkNCiAgIlByb21vdGUgdGhlIGN1cnJlbnQgaGVhZGluZyBoaWdoZXIgdXAgdGhl IHRyZWUuDQpJZiB0aGUgcmVnaW9uIGlzIGFjdGl2ZSBpbiBgdHJhbnNpZW50LW1hcmstbW9kZScs IHByb21vdGUgYWxsIGhlYWRpbmdzDQppbiB0aGUgcmVnaW9uLiINCiAgKGludGVyYWN0aXZlKQ0K ICAoc2F2ZS1leGN1cnNpb24NCiAgICAoaWYgKG9yZy1yZWdpb24tYWN0aXZlLXApDQoJKG9yZy1t YXAtcmVnaW9uICdvcmctcHJvbW90ZSAocmVnaW9uLWJlZ2lubmluZykgKHJlZ2lvbi1lbmQpKQ0K ICAgICAgKG9yZy1wcm9tb3RlKSkpDQogIChvcmctZml4LXBvc2l0aW9uLWFmdGVyLXByb21vdGUp KQ0KDQooZGVmdW4gb3JnLWRvLWRlbW90ZSAoKQ0KICAiRGVtb3RlIHRoZSBjdXJyZW50IGhlYWRp bmcgbG93ZXIgZG93biB0aGUgdHJlZS4NCklmIHRoZSByZWdpb24gaXMgYWN0aXZlIGluIGB0cmFu c2llbnQtbWFyay1tb2RlJywgZGVtb3RlIGFsbCBoZWFkaW5ncw0KaW4gdGhlIHJlZ2lvbi4iDQog IChpbnRlcmFjdGl2ZSkNCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKGlmIChvcmctcmVnaW9uLWFj dGl2ZS1wKQ0KCShvcmctbWFwLXJlZ2lvbiAnb3JnLWRlbW90ZSAocmVnaW9uLWJlZ2lubmluZykg KHJlZ2lvbi1lbmQpKQ0KICAgICAgKG9yZy1kZW1vdGUpKSkNCiAgKG9yZy1maXgtcG9zaXRpb24t YWZ0ZXItcHJvbW90ZSkpDQoNCihkZWZ1biBvcmctZml4LXBvc2l0aW9uLWFmdGVyLXByb21vdGUg KCkNCiAgIk1ha2Ugc3VyZSB0aGF0IGFmdGVyIHByby9kZW1vdGlvbiBjdXJzb3IgcG9zaXRpb24g aXMgcmlnaHQuIg0KICAobGV0ICgocG9zIChwb2ludCkpKQ0KICAgICh3aGVuIChzYXZlLWV4Y3Vy c2lvbg0KCSAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMSkNCgkgICAgKGxvb2tpbmctYXQgb3JnLXRv ZG8tbGluZS1yZWdleHApDQoJICAgIChvciAoZXF1YWwgcG9zIChtYXRjaC1lbmQgMSkpIChlcXVh bCBwb3MgKG1hdGNoLWVuZCAyKSkpKQ0KICAgICAgKGNvbmQgKChlb2JwKSAoaW5zZXJ0ICIgIikp DQoJICAgICgoZW9scCkgKGluc2VydCAiICIpKQ0KCSAgICAoKGVxdWFsIChjaGFyLWFmdGVyKSA/ XCApIChmb3J3YXJkLWNoYXIgMSkpKSkpKQ0KDQooZGVmdW4gb3JnLWN1cnJlbnQtbGV2ZWwgKCkN CiAgIlJldHVybiB0aGUgbGV2ZWwgb2YgdGhlIGN1cnJlbnQgZW50cnksIG9yIG5pbCBpZiBiZWZv cmUgdGhlIGZpcnN0IGhlYWRsaW5lLg0KVGhlIGxldmVsIGlzIHRoZSBudW1iZXIgb2Ygc3RhcnMg YXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgaGVhZGxpbmUuIg0KICAoc2F2ZS1leGN1cnNpb24NCiAg ICAob3JnLXdpdGgtbGltaXRlZC1sZXZlbHMNCiAgICAgKGlmIChpZ25vcmUtZXJyb3JzIChvcmct YmFjay10by1oZWFkaW5nIHQpKQ0KCSAoZnVuY2FsbCBvdXRsaW5lLWxldmVsKSkpKSkNCg0KKGRl ZnVuIG9yZy1nZXQtcHJldmlvdXMtbGluZS1sZXZlbCAoKQ0KICAiUmV0dXJuIHRoZSBvdXRsaW5l IGRlcHRoIG9mIHRoZSBsYXN0IGhlYWRsaW5lIGJlZm9yZSB0aGUgY3VycmVudCBsaW5lLg0KUmV0 dXJucyAwIGZvciB0aGUgZmlyc3QgaGVhZGxpbmUgaW4gdGhlIGJ1ZmZlciwgYW5kIG5pbCBpZiBi ZWZvcmUgdGhlDQpmaXJzdCBoZWFkbGluZS4iDQogIChhbmQgKG9yZy1jdXJyZW50LWxldmVsKQ0K ICAgICAgIChvciAoYW5kICgvPSAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pIChwb2ludC1taW4p KQ0KCQkoc2F2ZS1leGN1cnNpb24gKGJlZ2lubmluZy1vZi1saW5lIDApIChvcmctY3VycmVudC1s ZXZlbCkpKQ0KCSAgIDApKSkNCg0KKGRlZnVuIG9yZy1yZWR1Y2VkLWxldmVsIChsKQ0KICAiQ29t cHV0ZSB0aGUgZWZmZWN0aXZlIGxldmVsIG9mIGEgaGVhZGluZy4NClRoaXMgdGFrZXMgaW50byBh Y2NvdW50IHRoZSBzZXR0aW5nIG9mIGBvcmctb2RkLWxldmVscy1vbmx5Jy4iDQogIChjb25kDQog ICAoKHplcm9wIGwpIDApDQogICAob3JnLW9kZC1sZXZlbHMtb25seSAoMSsgKGZsb29yICgvIGwg MikpKSkNCiAgICh0IGwpKSkNCg0KKGRlZnVuIG9yZy1sZXZlbC1pbmNyZW1lbnQgKCkNCiAgIlJl dHVybiB0aGUgbnVtYmVyIG9mIHN0YXJzIHRoYXQgd2lsbCBiZSBhZGRlZCBvciByZW1vdmVkIGF0 IGENCnRpbWUgdG8gaGVhZGxpbmVzIHdoZW4gc3RydWN0dXJlIGVkaXRpbmcsIGJhc2VkIG9uIHRo ZSB2YWx1ZSBvZg0KYG9yZy1vZGQtbGV2ZWxzLW9ubHknLiINCiAgKGlmIG9yZy1vZGQtbGV2ZWxz LW9ubHkgMiAxKSkNCg0KKGRlZnVuIG9yZy1nZXQtdmFsaWQtbGV2ZWwgKGxldmVsICZvcHRpb25h bCBjaGFuZ2UpDQogICJSZWN0aWZ5IGEgbGV2ZWwgY2hhbmdlIHVuZGVyIHRoZSBpbmZsdWVuY2Ug b2YgYG9yZy1vZGQtbGV2ZWxzLW9ubHknDQpMRVZFTCBpcyBhIGN1cnJlbnQgbGV2ZWwsIENIQU5H RSBpcyBieSBob3cgbXVjaCB0aGUgbGV2ZWwgc2hvdWxkIGJlDQptb2RpZmllZC4gIEV2ZW4gaWYg Q0hBTkdFIGlzIG5pbCwgTEVWRUwgbWF5IGJlIHJldHVybmVkIG1vZGlmaWVkIGJlY2F1c2UNCmV2 ZW4gbGV2ZWwgbnVtYmVycyB3aWxsIGJlY29tZSB0aGUgbmV4dCBoaWdoZXIgb2RkIG51bWJlci4i DQogIChpZiBvcmctb2RkLWxldmVscy1vbmx5DQogICAgICAoY29uZCAoKG9yIChub3QgY2hhbmdl KSAoPSAwIGNoYW5nZSkpICgxKyAoKiAyICgvIGxldmVsIDIpKSkpDQoJICAgICgoPiBjaGFuZ2Ug MCkgKDErICgqIDIgKC8gKCsgbGV2ZWwgKCogMiBjaGFuZ2UpKSAyKSkpKQ0KCSAgICAoKDwgY2hh bmdlIDApIChtYXggMSAoMSsgKCogMiAoLyAoKyBsZXZlbCAoKiAyIGNoYW5nZSkpIDIpKSkpKSkN CiAgICAobWF4IDEgKCsgbGV2ZWwgKG9yIGNoYW5nZSAwKSkpKSkNCg0KKGlmIChib3VuZHAgJ2Rl ZmluZS1vYnNvbGV0ZS1mdW5jdGlvbi1hbGlhcykNCiAgICAoaWYgKG9yIChmZWF0dXJlcCAneGVt YWNzKSAoPCBlbWFjcy1tYWpvci12ZXJzaW9uIDIzKSkNCgkoZGVmaW5lLW9ic29sZXRlLWZ1bmN0 aW9uLWFsaWFzICdvcmctZ2V0LWxlZ2FsLWxldmVsDQoJICAnb3JnLWdldC12YWxpZC1sZXZlbCkN CiAgICAgIChkZWZpbmUtb2Jzb2xldGUtZnVuY3Rpb24tYWxpYXMgJ29yZy1nZXQtbGVnYWwtbGV2 ZWwNCgknb3JnLWdldC12YWxpZC1sZXZlbCAiMjMuMSIpKSkNCg0KKGRlZnVuIG9yZy1wcm9tb3Rl ICgpDQogICJQcm9tb3RlIHRoZSBjdXJyZW50IGhlYWRpbmcgaGlnaGVyIHVwIHRoZSB0cmVlLg0K SWYgdGhlIHJlZ2lvbiBpcyBhY3RpdmUgaW4gYHRyYW5zaWVudC1tYXJrLW1vZGUnLCBwcm9tb3Rl IGFsbCBoZWFkaW5ncw0KaW4gdGhlIHJlZ2lvbi4iDQogIChvcmctYmFjay10by1oZWFkaW5nIHQp DQogIChsZXQqICgobGV2ZWwgKHNhdmUtbWF0Y2gtZGF0YSAoZnVuY2FsbCBvdXRsaW5lLWxldmVs KSkpDQoJIChhZnRlci1jaGFuZ2UtZnVuY3Rpb25zIChyZW1vdmUgJ2ZseXNwZWxsLWFmdGVyLWNo YW5nZS1mdW5jdGlvbg0KCQkJCQkgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucykpDQoJICh1cC1oZWFk IChjb25jYXQgKG1ha2Utc3RyaW5nIChvcmctZ2V0LXZhbGlkLWxldmVsIGxldmVsIC0xKSA/Kikg IiAiKSkNCgkgKGRpZmYgKGFicyAoLSBsZXZlbCAobGVuZ3RoIHVwLWhlYWQpIC0xKSkpKQ0KICAg IChjb25kICgoYW5kICg9IGxldmVsIDEpIG9yZy1jYWxsZWQtd2l0aC1saW1pdGVkLWxldmVscw0K CQlvcmctYWxsb3ctcHJvbW90aW5nLXRvcC1sZXZlbC1zdWJ0cmVlKQ0KCSAgIChyZXBsYWNlLW1h dGNoICIjICIgbmlsIHQpKQ0KCSAgKCg9IGxldmVsIDEpDQoJICAgKHVzZXItZXJyb3IgIkNhbm5v dCBwcm9tb3RlIHRvIGxldmVsIDAuICBVTkRPIHRvIHJlY292ZXIgaWYgbmVjZXNzYXJ5IikpDQoJ ICAodCAocmVwbGFjZS1tYXRjaCB1cC1oZWFkIG5pbCB0KSkpDQogICAgOzsgRml4dXAgdGFnIHBv c2l0aW9uaW5nDQogICAgKHVubGVzcyAoPSBsZXZlbCAxKQ0KICAgICAgKGFuZCBvcmctYXV0by1h bGlnbi10YWdzIChvcmctc2V0LXRhZ3MgbmlsICdpZ25vcmUtY29sdW1uKSkNCiAgICAgIChpZiBv cmctYWRhcHQtaW5kZW50YXRpb24gKG9yZy1maXh1cC1pbmRlbnRhdGlvbiAoLSBkaWZmKSkpKQ0K ICAgIChydW4taG9va3MgJ29yZy1hZnRlci1wcm9tb3RlLWVudHJ5LWhvb2spKSkNCg0KKGRlZnVu IG9yZy1kZW1vdGUgKCkNCiAgIkRlbW90ZSB0aGUgY3VycmVudCBoZWFkaW5nIGxvd2VyIGRvd24g dGhlIHRyZWUuDQpJZiB0aGUgcmVnaW9uIGlzIGFjdGl2ZSBpbiBgdHJhbnNpZW50LW1hcmstbW9k ZScsIGRlbW90ZSBhbGwgaGVhZGluZ3MNCmluIHRoZSByZWdpb24uIg0KICAob3JnLWJhY2stdG8t aGVhZGluZyB0KQ0KICAobGV0KiAoKGxldmVsIChzYXZlLW1hdGNoLWRhdGEgKGZ1bmNhbGwgb3V0 bGluZS1sZXZlbCkpKQ0KCSAoYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyAocmVtb3ZlICdmbHlzcGVs bC1hZnRlci1jaGFuZ2UtZnVuY3Rpb24NCgkJCQkJIGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMpKQ0K CSAoZG93bi1oZWFkIChjb25jYXQgKG1ha2Utc3RyaW5nIChvcmctZ2V0LXZhbGlkLWxldmVsIGxl dmVsIDEpID8qKSAiICIpKQ0KCSAoZGlmZiAoYWJzICgtIGxldmVsIChsZW5ndGggZG93bi1oZWFk KSAtMSkpKSkNCiAgICAocmVwbGFjZS1tYXRjaCBkb3duLWhlYWQgbmlsIHQpDQogICAgOzsgRml4 dXAgdGFnIHBvc2l0aW9uaW5nDQogICAgKGFuZCBvcmctYXV0by1hbGlnbi10YWdzIChvcmctc2V0 LXRhZ3MgbmlsICdpZ25vcmUtY29sdW1uKSkNCiAgICAoaWYgb3JnLWFkYXB0LWluZGVudGF0aW9u IChvcmctZml4dXAtaW5kZW50YXRpb24gZGlmZikpDQogICAgKHJ1bi1ob29rcyAnb3JnLWFmdGVy LWRlbW90ZS1lbnRyeS1ob29rKSkpDQoNCihkZWZ1biBvcmctY3ljbGUtbGV2ZWwgKCkNCiAgIkN5 Y2xlIHRoZSBsZXZlbCBvZiBhbiBlbXB0eSBoZWFkbGluZSB0aHJvdWdoIHBvc3NpYmxlIHN0YXRl cy4NClRoaXMgZ29lcyBmaXJzdCB0byBjaGlsZCwgdGhlbiB0byBwYXJlbnQsIGxldmVsLCB0aGVu IHVwIHRoZSBoaWVyYXJjaHkuDQpBZnRlciB0b3AgbGV2ZWwsIGl0IHN3aXRjaGVzIGJhY2sgdG8g c2libGluZyBsZXZlbC4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKGxldCAoKG9yZy1hZGFwdC1pbmRl bnRhdGlvbiBuaWwpKQ0KICAgICh3aGVuIChvcmctcG9pbnQtYXQtZW5kLW9mLWVtcHR5LWhlYWRs aW5lKQ0KICAgICAgKHNldHEgdGhpcy1jb21tYW5kICdvcmctY3ljbGUtbGV2ZWwpIDsgT25seSBu ZWVkZWQgZm9yIGNhY2hpbmcNCiAgICAgIChsZXQgKChjdXItbGV2ZWwgKG9yZy1jdXJyZW50LWxl dmVsKSkNCiAgICAgICAgICAgIChwcmV2LWxldmVsIChvcmctZ2V0LXByZXZpb3VzLWxpbmUtbGV2 ZWwpKSkNCiAgICAgICAgKGNvbmQNCiAgICAgICAgIDs7IElmIGZpcnN0IGhlYWRsaW5lIGluIGZp bGUsIHByb21vdGUgdG8gdG9wLWxldmVsLg0KICAgICAgICAgKCg9IHByZXYtbGV2ZWwgMCkNCiAg ICAgICAgICAobG9vcCByZXBlYXQgKC8gKC0gY3VyLWxldmVsIDEpIChvcmctbGV2ZWwtaW5jcmVt ZW50KSkNCiAgICAgICAgICAgICAgICBkbyAob3JnLWRvLXByb21vdGUpKSkNCiAgICAgICAgIDs7 IElmIHNhbWUgbGV2ZWwgYXMgcHJldiwgZGVtb3RlIG9uZS4NCiAgICAgICAgICgoPSBwcmV2LWxl dmVsIGN1ci1sZXZlbCkNCiAgICAgICAgICAob3JnLWRvLWRlbW90ZSkpDQogICAgICAgICA7OyBJ ZiBwYXJlbnQgaXMgdG9wLWxldmVsLCBwcm9tb3RlIHRvIHRvcCBsZXZlbCBpZiBub3QgYWxyZWFk eS4NCiAgICAgICAgICgoPSBwcmV2LWxldmVsIDEpDQogICAgICAgICAgKGxvb3AgcmVwZWF0ICgv ICgtIGN1ci1sZXZlbCAxKSAob3JnLWxldmVsLWluY3JlbWVudCkpDQogICAgICAgICAgICAgICAg ZG8gKG9yZy1kby1wcm9tb3RlKSkpDQogICAgICAgICA7OyBJZiB0b3AtbGV2ZWwsIHJldHVybiB0 byBwcmV2LWxldmVsLg0KICAgICAgICAgKCg9IGN1ci1sZXZlbCAxKQ0KICAgICAgICAgIChsb29w IHJlcGVhdCAoLyAoLSBwcmV2LWxldmVsIDEpIChvcmctbGV2ZWwtaW5jcmVtZW50KSkNCiAgICAg ICAgICAgICAgICBkbyAob3JnLWRvLWRlbW90ZSkpKQ0KICAgICAgICAgOzsgSWYgbGVzcyB0aGFu IHByZXYtbGV2ZWwsIHByb21vdGUgb25lLg0KICAgICAgICAgKCg8IGN1ci1sZXZlbCBwcmV2LWxl dmVsKQ0KICAgICAgICAgIChvcmctZG8tcHJvbW90ZSkpDQogICAgICAgICA7OyBJZiBkZWVwZXIg dGhhbiBwcmV2LWxldmVsLCBwcm9tb3RlIHVudGlsIGhpZ2hlciB0aGFuDQogICAgICAgICA7OyBw cmV2LWxldmVsLg0KICAgICAgICAgKCg+IGN1ci1sZXZlbCBwcmV2LWxldmVsKQ0KICAgICAgICAg IChsb29wIHJlcGVhdCAoKyAxICgvICgtIGN1ci1sZXZlbCBwcmV2LWxldmVsKSAob3JnLWxldmVs LWluY3JlbWVudCkpKQ0KICAgICAgICAgICAgICAgIGRvIChvcmctZG8tcHJvbW90ZSkpKSkNCiAg ICAgICAgdCkpKSkNCg0KKGRlZnVuIG9yZy1tYXAtdHJlZSAoZnVuKQ0KICAiQ2FsbCBGVU4gZm9y IGV2ZXJ5IGhlYWRpbmcgdW5kZXJuZWF0aCB0aGUgY3VycmVudCBvbmUuIg0KICAob3JnLWJhY2st dG8taGVhZGluZykNCiAgKGxldCAoKGxldmVsIChmdW5jYWxsIG91dGxpbmUtbGV2ZWwpKSkNCiAg ICAoc2F2ZS1leGN1cnNpb24NCiAgICAgIChmdW5jYWxsIGZ1bikNCiAgICAgICh3aGlsZSAoYW5k IChwcm9nbg0KCQkgICAgKG91dGxpbmUtbmV4dC1oZWFkaW5nKQ0KCQkgICAgKD4gKGZ1bmNhbGwg b3V0bGluZS1sZXZlbCkgbGV2ZWwpKQ0KCQkgIChub3QgKGVvYnApKSkNCgkoZnVuY2FsbCBmdW4p KSkpKQ0KDQooZGVmdW4gb3JnLW1hcC1yZWdpb24gKGZ1biBiZWcgZW5kKQ0KICAiQ2FsbCBGVU4g Zm9yIGV2ZXJ5IGhlYWRpbmcgYmV0d2VlbiBCRUcgYW5kIEVORC4iDQogIChsZXQgKChvcmctaWdu b3JlLXJlZ2lvbiB0KSkNCiAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAgIChzZXRxIGVuZCAoY29w eS1tYXJrZXIgZW5kKSkNCiAgICAgIChnb3RvLWNoYXIgYmVnKQ0KICAgICAgKGlmIChhbmQgKHJl LXNlYXJjaC1mb3J3YXJkIG9yZy1vdXRsaW5lLXJlZ2V4cC1ib2wgbmlsIHQpDQoJICAgICAgICg8 IChwb2ludCkgZW5kKSkNCgkgIChmdW5jYWxsIGZ1bikpDQogICAgICAod2hpbGUgKGFuZCAocHJv Z24NCgkJICAgIChvdXRsaW5lLW5leHQtaGVhZGluZykNCgkJICAgICg8IChwb2ludCkgZW5kKSkN CgkJICAobm90IChlb2JwKSkpDQoJKGZ1bmNhbGwgZnVuKSkpKSkNCg0KKGRlZnZhciBvcmctcHJv cGVydHktZW5kLXJlKSA7IHNpbGVuY2UgYnl0ZS1jb21waWxlcg0KKGRlZnVuIG9yZy1maXh1cC1p bmRlbnRhdGlvbiAoZGlmZikNCiAgIkNoYW5nZSB0aGUgaW5kZW50YXRpb24gaW4gdGhlIGN1cnJl bnQgZW50cnkgYnkgRElGRi4NCkhvd2V2ZXIsIGlmIGFueSBsaW5lIGluIHRoZSBjdXJyZW50IGVu dHJ5IGhhcyBubyBpbmRlbnRhdGlvbiwgb3IgaWYgaXQNCndvdWxkIGVuZCB1cCB3aXRoIG5vIGlu ZGVudGF0aW9uIGFmdGVyIHRoZSBjaGFuZ2UsIG5vdGhpbmcgYXQgYWxsIGlzIGRvbmUuIg0KICAo c2F2ZS1leGN1cnNpb24NCiAgICAobGV0ICgoZW5kIChzYXZlLWV4Y3Vyc2lvbiAob3V0bGluZS1u ZXh0LWhlYWRpbmcpDQoJCQkgICAgICAgKHBvaW50LW1hcmtlcikpKQ0KCSAgKHByb2hpYml0IChp ZiAoPiBkaWZmIDApDQoJCQkiXlxcUy0iDQoJCSAgICAgIChjb25jYXQgIl4gXFx7MCwiIChpbnQt dG8tc3RyaW5nICgtIGRpZmYpKSAiXFx9XFxTLSIpKSkNCgkgIGNvbCkNCiAgICAgICh1bmxlc3Mg KHNhdmUtZXhjdXJzaW9uIChlbmQtb2YtbGluZSAxKQ0KCQkJICAgICAgKHJlLXNlYXJjaC1mb3J3 YXJkIHByb2hpYml0IGVuZCB0KSkNCgkod2hpbGUgKGFuZCAoPCAocG9pbnQpIGVuZCkNCgkJICAg IChyZS1zZWFyY2gtZm9yd2FyZCAiXlsgXHRdKyIgZW5kIHQpKQ0KCSAgKGdvdG8tY2hhciAobWF0 Y2gtZW5kIDApKQ0KCSAgKHNldHEgY29sIChjdXJyZW50LWNvbHVtbikpDQoJICAoaWYgKDwgZGlm ZiAwKSAocmVwbGFjZS1tYXRjaCAiIikpDQoJICAob3JnLWluZGVudC10by1jb2x1bW4gKCsgZGlm ZiBjb2wpKSkpDQogICAgICAobW92ZS1tYXJrZXIgZW5kIG5pbCkpKSkNCg0KKGRlZnVuIG9yZy1j b252ZXJ0LXRvLW9kZC1sZXZlbHMgKCkNCiAgIkNvbnZlcnQgYW4gb3JnLW1vZGUgZmlsZSB3aXRo IGFsbCBsZXZlbHMgYWxsb3dlZCB0byBvbmUgd2l0aCBvZGQgbGV2ZWxzLg0KVGhpcyB3aWxsIGxl YXZlIGxldmVsIDEgYWxvbmUsIGNvbnZlcnQgbGV2ZWwgMiB0byBsZXZlbCAzLCBsZXZlbCAzIHRv DQpsZXZlbCA1IGV0Yy4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKHdoZW4gKHllcy1vci1uby1wICJB cmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZ2xvYmFsbHkgY2hhbmdlIGxldmVscyB0byBvZGQ/ICIp DQogICAgKGxldCAoKG91dGxpbmUtbGV2ZWwgJ29yZy1vdXRsaW5lLWxldmVsKQ0KCSAgKG9yZy1v ZGQtbGV2ZWxzLW9ubHkgbmlsKSBuKQ0KICAgICAgKHNhdmUtZXhjdXJzaW9uDQoJKGdvdG8tY2hh ciAocG9pbnQtbWluKSkNCgkod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJeXFwqXFwqKyAiIG5p bCB0KQ0KCSAgKHNldHEgbiAoLSAobGVuZ3RoIChtYXRjaC1zdHJpbmcgMCkpIDIpKQ0KCSAgKHdo aWxlICg+PSAoc2V0cSBuICgxLSBuKSkgMCkNCgkgICAgKG9yZy1kZW1vdGUpKQ0KCSAgKGVuZC1v Zi1saW5lIDEpKSkpKSkNCg0KKGRlZnVuIG9yZy1jb252ZXJ0LXRvLW9kZGV2ZW4tbGV2ZWxzICgp DQogICJDb252ZXJ0IGFuIG9yZy1tb2RlIGZpbGUgd2l0aCBvbmx5IG9kZCBsZXZlbHMgdG8gb25l IHdpdGggb2RkL2V2ZW4gbGV2ZWxzLg0KVGhpcyBwcm9tb3RlcyBsZXZlbCAzIHRvIGxldmVsIDIs IGxldmVsIDUgdG8gbGV2ZWwgMyBldGMuICBJZiB0aGUNCmZpbGUgY29udGFpbnMgYSBzZWN0aW9u IHdpdGggYW4gZXZlbiBsZXZlbCwgY29udmVyc2lvbiB3b3VsZA0KZGVzdHJveSB0aGUgc3RydWN0 dXJlIG9mIHRoZSBmaWxlLiAgQW4gZXJyb3IgaXMgc2lnbmFsZWQgaW4gdGhpcw0KY2FzZS4iDQog IChpbnRlcmFjdGl2ZSkNCiAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCiAgOzsgRmlyc3QgY2hl Y2sgaWYgdGhlcmUgYXJlIG5vIGV2ZW4gbGV2ZWxzDQogICh3aGVuIChyZS1zZWFyY2gtZm9yd2Fy ZCAiXlxcKFxcKlxcKlxcKSsgIiBuaWwgdCkNCiAgICAob3JnLXNob3ctY29udGV4dCB0KQ0KICAg IChlcnJvciAiTm90IGFsbCBsZXZlbHMgYXJlIG9kZCBpbiB0aGlzIGZpbGUuICBDb252ZXJzaW9u IG5vdCBwb3NzaWJsZSIpKQ0KICAod2hlbiAoeWVzLW9yLW5vLXAgIkFyZSB5b3Ugc3VyZSB5b3Ug d2FudCB0byBnbG9iYWxseSBjaGFuZ2UgbGV2ZWxzIHRvIG9kZC1ldmVuPyAiKQ0KICAgIChsZXQg KChvdXRsaW5lLXJlZ2V4cCBvcmctb3V0bGluZS1yZWdleHApDQoJICAob3V0bGluZS1sZXZlbCAn b3JnLW91dGxpbmUtbGV2ZWwpDQoJICAob3JnLW9kZC1sZXZlbHMtb25seSBuaWwpIG4pDQogICAg ICAoc2F2ZS1leGN1cnNpb24NCgkoZ290by1jaGFyIChwb2ludC1taW4pKQ0KCSh3aGlsZSAocmUt c2VhcmNoLWZvcndhcmQgIl5cXCpcXCorICIgbmlsIHQpDQoJICAoc2V0cSBuICgvICgxLSAobGVu Z3RoIChtYXRjaC1zdHJpbmcgMCkpKSAyKSkNCgkgICh3aGlsZSAoPj0gKHNldHEgbiAoMS0gbikp IDApDQoJICAgIChvcmctcHJvbW90ZSkpDQoJICAoZW5kLW9mLWxpbmUgMSkpKSkpKQ0KDQooZGVm dW4gb3JnLXRyLWxldmVsIChuKQ0KICAiTWFrZSBOIG9kZCBpZiByZXF1aXJlZC4iDQogIChpZiBv cmctb2RkLWxldmVscy1vbmx5ICgxKyAoLyBuIDIpKSBuKSkNCg0KOzs7IFZlcnRpY2FsIHRyZWUg bW90aW9uLCBjdXR0aW5nIGFuZCBwYXN0aW5nIG9mIHN1YnRyZWVzDQoNCihkZWZ1biBvcmctbW92 ZS1zdWJ0cmVlLXVwICgmb3B0aW9uYWwgYXJnKQ0KICAiTW92ZSB0aGUgY3VycmVudCBzdWJ0cmVl IHVwIHBhc3QgQVJHIGhlYWRsaW5lcyBvZiB0aGUgc2FtZSBsZXZlbC4iDQogIChpbnRlcmFjdGl2 ZSAicCIpDQogIChvcmctbW92ZS1zdWJ0cmVlLWRvd24gKC0gKHByZWZpeC1udW1lcmljLXZhbHVl IGFyZykpKSkNCg0KKGRlZnVuIG9yZy1tb3ZlLXN1YnRyZWUtZG93biAoJm9wdGlvbmFsIGFyZykN CiAgIk1vdmUgdGhlIGN1cnJlbnQgc3VidHJlZSBkb3duIHBhc3QgQVJHIGhlYWRsaW5lcyBvZiB0 aGUgc2FtZSBsZXZlbC4iDQogIChpbnRlcmFjdGl2ZSAicCIpDQogIChzZXRxIGFyZyAocHJlZml4 LW51bWVyaWMtdmFsdWUgYXJnKSkNCiAgKGxldCAoKG1vdmZ1bmMgKGlmICg+IGFyZyAwKSAnb3Jn LWdldC1uZXh0LXNpYmxpbmcNCgkJICAgJ29yZy1nZXQtbGFzdC1zaWJsaW5nKSkNCgkoaW5zLXBv aW50IChtYWtlLW1hcmtlcikpDQoJKGNudCAoYWJzIGFyZykpDQoJKGNvbCAoY3VycmVudC1jb2x1 bW4pKQ0KCWJlZyBiZWcwIGVuZCB0eHQgZm9sZGVkIG5lLWJlZyBuZS1lbmQgbmUtaW5zIGlucy1l bmQpDQogICAgOzsgU2VsZWN0IHRoZSB0cmVlDQogICAgKG9yZy1iYWNrLXRvLWhlYWRpbmcpDQog ICAgKHNldHEgYmVnMCAocG9pbnQpKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgKHNldHEg bmUtYmVnIChvcmctYmFjay1vdmVyLWVtcHR5LWxpbmVzKSkNCiAgICAgIChzZXRxIGJlZyAocG9p bnQpKSkNCiAgICAoc2F2ZS1tYXRjaC1kYXRhDQogICAgICAoc2F2ZS1leGN1cnNpb24gKG91dGxp bmUtZW5kLW9mLWhlYWRpbmcpDQoJCSAgICAgIChzZXRxIGZvbGRlZCAob3V0bGluZS1pbnZpc2li bGUtcCkpKQ0KICAgICAgKHByb2duIChvcmctZW5kLW9mLXN1YnRyZWUgbmlsIHQpDQoJICAgICAo dW5sZXNzIChlb2JwKSAoYmFja3dhcmQtY2hhcikpKSkNCiAgICAob3V0bGluZS1uZXh0LWhlYWRp bmcpDQogICAgKHNldHEgbmUtZW5kIChvcmctYmFjay1vdmVyLWVtcHR5LWxpbmVzKSkNCiAgICAo c2V0cSBlbmQgKHBvaW50KSkNCiAgICAoZ290by1jaGFyIGJlZzApDQogICAgKHdoZW4gKGFuZCAo PiBhcmcgMCkgKG9yZy1maXJzdC1zaWJsaW5nLXApICg8IG5lLWVuZCBuZS1iZWcpKQ0KICAgICAg OzsgaW5jbHVkZSBsZXNzIHdoaXRlc3BhY2UNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCShnb3Rv LWNoYXIgYmVnKQ0KCShmb3J3YXJkLWxpbmUgKC0gbmUtYmVnIG5lLWVuZCkpDQoJKHNldHEgYmVn IChwb2ludCkpKSkNCiAgICA7OyBGaW5kIGluc2VydGlvbiBwb2ludCwgd2l0aCBlcnJvciBoYW5k bGluZw0KICAgICh3aGlsZSAoPiBjbnQgMCkNCiAgICAgIChvciAoYW5kIChmdW5jYWxsIG1vdmZ1 bmMpIChsb29raW5nLWF0IG9yZy1vdXRsaW5lLXJlZ2V4cCkpDQoJICAocHJvZ24gKGdvdG8tY2hh ciBiZWcwKQ0KCQkgKHVzZXItZXJyb3IgIkNhbm5vdCBtb3ZlIHBhc3Qgc3VwZXJpb3IgbGV2ZWwg b3IgYnVmZmVyIGxpbWl0IikpKQ0KICAgICAgKHNldHEgY250ICgxLSBjbnQpKSkNCiAgICAoaWYg KD4gYXJnIDApDQoJOzsgTW92aW5nIGZvcndhcmQgLSBzdGlsbCBuZWVkIHRvIG1vdmUgb3ZlciBz dWJ0cmVlDQoJKHByb2duIChvcmctZW5kLW9mLXN1YnRyZWUgdCB0KQ0KCSAgICAgICAoc2F2ZS1l eGN1cnNpb24NCgkJIChvcmctYmFjay1vdmVyLWVtcHR5LWxpbmVzKQ0KCQkgKG9yIChib2xwKSAo bmV3bGluZSkpKSkpDQogICAgKHNldHEgbmUtaW5zIChvcmctYmFjay1vdmVyLWVtcHR5LWxpbmVz KSkNCiAgICAobW92ZS1tYXJrZXIgaW5zLXBvaW50IChwb2ludCkpDQogICAgKHNldHEgdHh0IChi dWZmZXItc3Vic3RyaW5nIGJlZyBlbmQpKQ0KICAgIChvcmctc2F2ZS1tYXJrZXJzLWluLXJlZ2lv biBiZWcgZW5kKQ0KICAgIChkZWxldGUtcmVnaW9uIGJlZyBlbmQpDQogICAgKG9yZy1yZW1vdmUt ZW1wdHktb3ZlcmxheXMtYXQgYmVnKQ0KICAgIChvciAoPSBiZWcgKHBvaW50LW1pbikpIChvdXRs aW5lLWZsYWctcmVnaW9uICgxLSBiZWcpIGJlZyBuaWwpKQ0KICAgIChvciAoYm9icCkgKG91dGxp bmUtZmxhZy1yZWdpb24gKDEtIChwb2ludCkpIChwb2ludCkgbmlsKSkNCiAgICAoYW5kIChub3Qg KGJvbHApKSAobG9va2luZy1hdCAiXG4iKSAoZm9yd2FyZC1jaGFyIDEpKQ0KICAgIChsZXQgKChi YmIgKHBvaW50KSkpDQogICAgICAoaW5zZXJ0LWJlZm9yZS1tYXJrZXJzIHR4dCkNCiAgICAgIChv cmctcmVpbnN0YWxsLW1hcmtlcnMtaW4tcmVnaW9uIGJiYikNCiAgICAgIChtb3ZlLW1hcmtlciBp bnMtcG9pbnQgYmJiKSkNCiAgICAob3IgKGJvbHApIChpbnNlcnQgIlxuIikpDQogICAgKHNldHEg aW5zLWVuZCAocG9pbnQpKQ0KICAgIChnb3RvLWNoYXIgaW5zLXBvaW50KQ0KICAgIChvcmctc2tp cC13aGl0ZXNwYWNlKQ0KICAgICh3aGVuIChhbmQgKDwgYXJnIDApDQoJICAgICAgIChvcmctZmly c3Qtc2libGluZy1wKQ0KCSAgICAgICAoPiBuZS1pbnMgbmUtYmVnKSkNCiAgICAgIDs7IE1vdmUg d2hpdGVzcGFjZSBiYWNrIHRvIGJlZ2lubmluZw0KICAgICAgKHNhdmUtZXhjdXJzaW9uDQoJKGdv dG8tY2hhciBpbnMtZW5kKQ0KCShsZXQgKChraWxsLXdob2xlLWxpbmUgdCkpDQoJICAoa2lsbC1s aW5lICgtIG5lLWlucyBuZS1iZWcpKSAocG9pbnQpKSkNCiAgICAgIChpbnNlcnQgKG1ha2Utc3Ry aW5nICgtIG5lLWlucyBuZS1iZWcpID9cbikpKQ0KICAgIChtb3ZlLW1hcmtlciBpbnMtcG9pbnQg bmlsKQ0KICAgIChpZiBmb2xkZWQNCgkoaGlkZS1zdWJ0cmVlKQ0KICAgICAgKG9yZy1zaG93LWVu dHJ5KQ0KICAgICAgKHNob3ctY2hpbGRyZW4pDQogICAgICAob3JnLWN5Y2xlLWhpZGUtZHJhd2Vy cyAnY2hpbGRyZW4pKQ0KICAgIChvcmctY2xlYW4tdmlzaWJpbGl0eS1hZnRlci1zdWJ0cmVlLW1v dmUpDQogICAgOzsgbW92ZSBiYWNrIHRvIHRoZSBpbml0aWFsIGNvbHVtbiB3ZSB3ZXJlIGF0DQog ICAgKG1vdmUtdG8tY29sdW1uIGNvbCkpKQ0KDQooZGVmdmFyIG9yZy1zdWJ0cmVlLWNsaXAgIiIN CiAgIkNsaXBib2FyZCBmb3IgY3V0IGFuZCBwYXN0ZSBvZiBzdWJ0cmVlcy4NClRoaXMgaXMgYWN0 dWFsbHkgb25seSBhIGNvcHkgb2YgdGhlIGtpbGwsIGJlY2F1c2Ugd2UgdXNlIHRoZSBub3JtYWwg a2lsbA0KcmluZy4gIFdlIG5lZWQgaXQgdG8gY2hlY2sgaWYgdGhlIGtpbGwgd2FzIGNyZWF0ZWQg YnkgYG9yZy1jb3B5LXN1YnRyZWUnLiIpDQoNCihkZWZ2YXIgb3JnLXN1YnRyZWUtY2xpcC1mb2xk ZWQgbmlsDQogICJXYXMgdGhlIGxhc3QgY29waWVkIHN1YnRyZWUgZm9sZGVkPw0KVGhpcyBpcyB1 c2VkIHRvIGZvbGQgdGhlIHRyZWUgYmFjayBhZnRlciBwYXN0aW5nLiIpDQoNCihkZWZ1biBvcmct Y3V0LXN1YnRyZWUgKCZvcHRpb25hbCBuKQ0KICAiQ3V0IHRoZSBjdXJyZW50IHN1YnRyZWUgaW50 byB0aGUgY2xpcGJvYXJkLg0KV2l0aCBwcmVmaXggYXJnIE4sIGN1dCB0aGlzIG1hbnkgc2VxdWVu dGlhbCBzdWJ0cmVlcy4NClRoaXMgaXMgYSBzaG9ydC1oYW5kIGZvciBtYXJraW5nIHRoZSBzdWJ0 cmVlIGFuZCB0aGVuIGN1dHRpbmcgaXQuIg0KICAoaW50ZXJhY3RpdmUgInAiKQ0KICAob3JnLWNv cHktc3VidHJlZSBuICdjdXQpKQ0KDQooZGVmdW4gb3JnLWNvcHktc3VidHJlZSAoJm9wdGlvbmFs IG4gY3V0IGZvcmNlLXN0b3JlLW1hcmtlcnMgbm9zdWJ0cmVlcykNCiAgIkNvcHkgdGhlIGN1cnJl bnQgc3VidHJlZSBpdCBpbiB0aGUgY2xpcGJvYXJkLg0KV2l0aCBwcmVmaXggYXJnIE4sIGNvcHkg dGhpcyBtYW55IHNlcXVlbnRpYWwgc3VidHJlZXMuDQpUaGlzIGlzIGEgc2hvcnQtaGFuZCBmb3Ig bWFya2luZyB0aGUgc3VidHJlZSBhbmQgdGhlbiBjb3B5aW5nIGl0Lg0KSWYgQ1VUIGlzIG5vbi1u aWwsIGFjdHVhbGx5IGN1dCB0aGUgc3VidHJlZS4NCklmIEZPUkNFLVNUT1JFLU1BUktFUlMgaXMg bm9uLW5pbCwgc3RvcmUgdGhlIHJlbGF0aXZlIGxvY2F0aW9ucw0Kb2Ygc29tZSBtYXJrZXJzIGlu IHRoZSByZWdpb24sIGV2ZW4gaWYgQ1VUIGlzIG5vbi1uaWwuICBUaGlzIGlzDQp1c2VmdWwgaWYg dGhlIGNhbGxlciBpbXBsZW1lbnRzIGN1dC1hbmQtcGFzdGUgYXMgY29weS10aGVuLXBhc3RlLXRo ZW4tY3V0LiINCiAgKGludGVyYWN0aXZlICJwIikNCiAgKGxldCAoYmVnIGVuZCBmb2xkZWQgKGJl ZzAgKHBvaW50KSkpDQogICAgKGlmIChvcmctY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQ0K CShvcmctYmFjay10by1oZWFkaW5nIG5pbCkgOyB0YWtlIHdoYXQgbG9va3MgbGlrZSBhIHN1YnRy ZWUNCiAgICAgIChvcmctYmFjay10by1oZWFkaW5nIHQpKSA7IHRha2Ugd2hhdCBpcyByZWFsbHkg dGhlcmUNCiAgICAoc2V0cSBiZWcgKHBvaW50KSkNCiAgICAoc2tpcC1jaGFycy1mb3J3YXJkICIg XHRcclxuIikNCiAgICAoc2F2ZS1tYXRjaC1kYXRhDQogICAgICAoaWYgbm9zdWJ0cmVlcw0KCSAg KG91dGxpbmUtbmV4dC1oZWFkaW5nKQ0KCShzYXZlLWV4Y3Vyc2lvbiAob3V0bGluZS1lbmQtb2Yt aGVhZGluZykNCgkJCShzZXRxIGZvbGRlZCAob3V0bGluZS1pbnZpc2libGUtcCkpKQ0KCShjb25k aXRpb24tY2FzZSBuaWwNCgkgICAgKG9yZy1mb3J3YXJkLWhlYWRpbmctc2FtZS1sZXZlbCAoMS0g bikgdCkNCgkgIChlcnJvciBuaWwpKQ0KCShvcmctZW5kLW9mLXN1YnRyZWUgdCB0KSkpDQogICAg KHNldHEgZW5kIChwb2ludCkpDQogICAgKGdvdG8tY2hhciBiZWcwKQ0KICAgICh3aGVuICg+IGVu ZCBiZWcpDQogICAgICAoc2V0cSBvcmctc3VidHJlZS1jbGlwLWZvbGRlZCBmb2xkZWQpDQogICAg ICAod2hlbiAob3IgY3V0IGZvcmNlLXN0b3JlLW1hcmtlcnMpDQoJKG9yZy1zYXZlLW1hcmtlcnMt aW4tcmVnaW9uIGJlZyBlbmQpKQ0KICAgICAgKGlmIGN1dCAoa2lsbC1yZWdpb24gYmVnIGVuZCkg KGNvcHktcmVnaW9uLWFzLWtpbGwgYmVnIGVuZCkpDQogICAgICAoc2V0cSBvcmctc3VidHJlZS1j bGlwIChjdXJyZW50LWtpbGwgMCkpDQogICAgICAobWVzc2FnZSAiJXM6IFN1YnRyZWUocykgd2l0 aCAlZCBjaGFyYWN0ZXJzIg0KCSAgICAgICAoaWYgY3V0ICJDdXQiICJDb3BpZWQiKQ0KCSAgICAg ICAobGVuZ3RoIG9yZy1zdWJ0cmVlLWNsaXApKSkpKQ0KDQooZGVmdW4gb3JnLXBhc3RlLXN1YnRy ZWUgKCZvcHRpb25hbCBsZXZlbCB0cmVlIGZvci15YW5rKQ0KICAiUGFzdGUgdGhlIGNsaXBib2Fy ZCBhcyBhIHN1YnRyZWUsIHdpdGggbW9kaWZpY2F0aW9uIG9mIGhlYWRsaW5lIGxldmVsLg0KVGhl IGVudGlyZSBzdWJ0cmVlIGlzIHByb21vdGVkIG9yIGRlbW90ZWQgaW4gb3JkZXIgdG8gbWF0Y2gg YSBuZXcgaGVhZGxpbmUNCmxldmVsLg0KDQpJZiB0aGUgY3Vyc29yIGlzIGF0IHRoZSBiZWdpbm5p bmcgb2YgYSBoZWFkbGluZSwgdGhlIHNhbWUgbGV2ZWwgYXMNCnRoYXQgaGVhZGxpbmUgaXMgdXNl ZCB0byBwYXN0ZSB0aGUgdHJlZS4NCg0KSWYgbm90LCB0aGUgbmV3IGxldmVsIGlzIGRlcml2ZWQg ZnJvbSB0aGUgKnZpc2libGUqIGhlYWRpbmdzDQpiZWZvcmUgYW5kIGFmdGVyIHRoZSBpbnNlcnRp b24gcG9pbnQsIGFuZCB0YWtlbiB0byBiZSB0aGUgaW5mZXJpb3IgaGVhZGxpbmUNCmxldmVsIG9m IHRoZSB0d28uICBTbyBpZiB0aGUgcHJldmlvdXMgdmlzaWJsZSBoZWFkaW5nIGlzIGxldmVsIDMg YW5kIHRoZQ0KbmV4dCBpcyBsZXZlbCA0IChvciB2aWNlIHZlcnNhKSwgbGV2ZWwgNCB3aWxsIGJl IHVzZWQgZm9yIGluc2VydGlvbi4NClRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBzdWJ0cmVlIHJl bWFpbnMgYW4gaW5kZXBlbmRlbnQgc3VidHJlZSBhbmQgZG9lcw0Kbm90IHN3YWxsb3cgbG93IGxl dmVsIGVudHJpZXMuDQoNCllvdSBjYW4gYWxzbyBmb3JjZSBhIGRpZmZlcmVudCBsZXZlbCwgZWl0 aGVyIGJ5IHVzaW5nIGEgbnVtZXJpYyBwcmVmaXgNCmFyZ3VtZW50LCBvciBieSBpbnNlcnRpbmcg dGhlIGhlYWRpbmcgbWFya2VyIGJ5IGhhbmQuICBGb3IgZXhhbXBsZSwgaWYgdGhlDQpjdXJzb3Ig aXMgYWZ0ZXIgXCIqKioqKlwiLCB0aGVuIHRoZSB0cmVlIHdpbGwgYmUgc2hpZnRlZCB0byBsZXZl bCA1Lg0KDQpJZiBvcHRpb25hbCBUUkVFIGlzIGdpdmVuLCB1c2UgdGhpcyB0ZXh0IGluc3RlYWQg b2YgdGhlIGtpbGwgcmluZy4NCg0KV2hlbiBGT1ItWUFOSyBpcyBzZXQsIHRoaXMgaXMgY2FsbGVk IGJ5IGBvcmcteWFuaycuICBJbiB0aGlzIGNhc2UsIGRvIG5vdA0KbW92ZSBiYWNrIG92ZXIgd2hp dGVzcGFjZSBiZWZvcmUgaW5zZXJ0aW5nLCBhbmQgbW92ZSBwb2ludCB0byB0aGUgZW5kIG9mDQp0 aGUgaW5zZXJ0ZWQgdGV4dCB3aGVuIGRvbmUuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoc2V0 cSB0cmVlIChvciB0cmVlIChhbmQga2lsbC1yaW5nIChjdXJyZW50LWtpbGwgMCkpKSkNCiAgKHVu bGVzcyAob3JnLWtpbGwtaXMtc3VidHJlZS1wIHRyZWUpDQogICAgKHVzZXItZXJyb3IgIiVzIg0K ICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cw0KICAgICAgICAgICAgICAg ICAiVGhlIGtpbGwgaXMgbm90IGEgKHNldCBvZikgdHJlZShzKSAtIHBsZWFzZSB1c2UgXFxbeWFu a10gdG8geWFuayBhbnl3YXkiKSkpDQogIChvcmctd2l0aC1saW1pdGVkLWxldmVscw0KICAgKGxl dCogKCh2aXNwIChub3QgKG91dGxpbmUtaW52aXNpYmxlLXApKSkNCgkgICh0eHQgdHJlZSkNCgkg IChecmVfICJcXChcXCorXFwpWyAgXHRdKiIpDQoJICAob2xkLWxldmVsIChpZiAoc3RyaW5nLW1h dGNoIG9yZy1vdXRsaW5lLXJlZ2V4cC1ib2wgdHh0KQ0KCQkJICgtIChtYXRjaC1lbmQgMCkgKG1h dGNoLWJlZ2lubmluZyAwKSAxKQ0KCQkgICAgICAgLTEpKQ0KCSAgKGZvcmNlLWxldmVsIChjb25k IChsZXZlbCAocHJlZml4LW51bWVyaWMtdmFsdWUgbGV2ZWwpKQ0KCQkJICAgICAoKGFuZCAobG9v a2luZy1hdCAiWyBcdF0qJCIpDQoJCQkJICAgKHN0cmluZy1tYXRjaA0KCQkJCSAgICAiXlxcKisk IiAoYnVmZmVyLXN1YnN0cmluZw0KCQkJCQkgICAgICAocG9pbnQtYXQtYm9sKSAocG9pbnQpKSkp DQoJCQkgICAgICAoLSAobWF0Y2gtZW5kIDApIChtYXRjaC1iZWdpbm5pbmcgMCkpKQ0KCQkJICAg ICAoKGFuZCAoYm9scCkNCgkJCQkgICAobG9va2luZy1hdCBvcmctb3V0bGluZS1yZWdleHApKQ0K CQkJICAgICAgKC0gKG1hdGNoLWVuZCAwKSAocG9pbnQpIDEpKSkpDQoJICAocHJldmlvdXMtbGV2 ZWwgKHNhdmUtZXhjdXJzaW9uDQoJCQkgICAgKGNvbmRpdGlvbi1jYXNlIG5pbA0KCQkJCShwcm9n bg0KCQkJCSAgKG91dGxpbmUtcHJldmlvdXMtdmlzaWJsZS1oZWFkaW5nIDEpDQoJCQkJICAoaWYg KGxvb2tpbmctYXQgXnJlXykNCgkJCQkgICAgICAoLSAobWF0Y2gtZW5kIDApIChtYXRjaC1iZWdp bm5pbmcgMCkgMSkNCgkJCQkgICAgMSkpDQoJCQkgICAgICAoZXJyb3IgMSkpKSkNCgkgIChuZXh0 LWxldmVsIChzYXZlLWV4Y3Vyc2lvbg0KCQkJKGNvbmRpdGlvbi1jYXNlIG5pbA0KCQkJICAgIChw cm9nbg0KCQkJICAgICAgKG9yIChsb29raW5nLWF0IG9yZy1vdXRsaW5lLXJlZ2V4cCkNCgkJCQkg IChvdXRsaW5lLW5leHQtdmlzaWJsZS1oZWFkaW5nIDEpKQ0KCQkJICAgICAgKGlmIChsb29raW5n LWF0IF5yZV8pDQoJCQkJICAoLSAobWF0Y2gtZW5kIDApIChtYXRjaC1iZWdpbm5pbmcgMCkgMSkN CgkJCQkxKSkNCgkJCSAgKGVycm9yIDEpKSkpDQoJICAobmV3LWxldmVsIChvciBmb3JjZS1sZXZl bCAobWF4IHByZXZpb3VzLWxldmVsIG5leHQtbGV2ZWwpKSkNCgkgIChzaGlmdCAoaWYgKG9yICg9 IG9sZC1sZXZlbCAtMSkNCgkJCSAoPSBuZXctbGV2ZWwgLTEpDQoJCQkgKD0gb2xkLWxldmVsIG5l dy1sZXZlbCkpDQoJCSAgICAgMA0KCQkgICAoLSBuZXctbGV2ZWwgb2xkLWxldmVsKSkpDQoJICAo ZGVsdGEgKGlmICg+IHNoaWZ0IDApIC0xIDEpKQ0KCSAgKGZ1bmMgKGlmICg+IHNoaWZ0IDApICdv cmctZGVtb3RlICdvcmctcHJvbW90ZSkpDQoJICAob3JnLW9kZC1sZXZlbHMtb25seSBuaWwpDQoJ ICBiZWcgZW5kIG5ld2VuZCkNCiAgICAgOzsgUmVtb3ZlIHRoZSBmb3JjZWQgbGV2ZWwgaW5kaWNh dG9yDQogICAgIChpZiBmb3JjZS1sZXZlbA0KCSAoZGVsZXRlLXJlZ2lvbiAocG9pbnQtYXQtYm9s KSAocG9pbnQpKSkNCiAgICAgOzsgUGFzdGUNCiAgICAgKGJlZ2lubmluZy1vZi1saW5lIChpZiAo Ym9scCkgMSAyKSkNCiAgICAgKHNldHEgYmVnIChwb2ludCkpDQogICAgIChhbmQgKGZib3VuZHAg J29yZy1pZC1wYXN0ZS10cmFja2VyKSAob3JnLWlkLXBhc3RlLXRyYWNrZXIgdHh0KSkNCiAgICAg KGluc2VydC1iZWZvcmUtbWFya2VycyB0eHQpDQogICAgICh1bmxlc3MgKHN0cmluZy1tYXRjaCAi XG5cXCciIHR4dCkgKGluc2VydCAiXG4iKSkNCiAgICAgKHNldHEgbmV3ZW5kIChwb2ludCkpDQog ICAgIChvcmctcmVpbnN0YWxsLW1hcmtlcnMtaW4tcmVnaW9uIGJlZykNCiAgICAgKHNldHEgZW5k IChwb2ludCkpDQogICAgIChnb3RvLWNoYXIgYmVnKQ0KICAgICAoc2tpcC1jaGFycy1mb3J3YXJk ICIgXHRcblxyIikNCiAgICAgKHNldHEgYmVnIChwb2ludCkpDQogICAgIChpZiAoYW5kIChvdXRs aW5lLWludmlzaWJsZS1wKSB2aXNwKQ0KCSAoc2F2ZS1leGN1cnNpb24gKG91dGxpbmUtc2hvdy1o ZWFkaW5nKSkpDQogICAgIDs7IFNoaWZ0IGlmIG5lY2Vzc2FyeQ0KICAgICAodW5sZXNzICg9IHNo aWZ0IDApDQogICAgICAgKHNhdmUtcmVzdHJpY3Rpb24NCgkgKG5hcnJvdy10by1yZWdpb24gYmVn IGVuZCkNCgkgKHdoaWxlIChub3QgKD0gc2hpZnQgMCkpDQoJICAgKG9yZy1tYXAtcmVnaW9uIGZ1 bmMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpDQoJICAgKHNldHEgc2hpZnQgKCsgZGVsdGEgc2hp ZnQpKSkNCgkgKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCgkgKHNldHEgbmV3ZW5kIChwb2ludC1t YXgpKSkpDQogICAgICh3aGVuIChvciAob3JnLWNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2ludGVy YWN0aXZlKSBmb3IteWFuaykNCiAgICAgICAobWVzc2FnZSAiQ2xpcGJvYXJkIHBhc3RlZCBhcyBs ZXZlbCAlZCBzdWJ0cmVlIiBuZXctbGV2ZWwpKQ0KICAgICAoaWYgKGFuZCAobm90IGZvci15YW5r KSA7IGluIHRoaXMgY2FzZSwgb3JnLXlhbmsgd2lsbCBkZWNpZGUgYWJvdXQgZm9sZGluZw0KCSAg ICAgIGtpbGwtcmluZw0KCSAgICAgIChlcSBvcmctc3VidHJlZS1jbGlwIChjdXJyZW50LWtpbGwg MCkpDQoJICAgICAgb3JnLXN1YnRyZWUtY2xpcC1mb2xkZWQpDQoJIDs7IFRoZSB0cmVlIHdhcyBm b2xkZWQgYmVmb3JlIGl0IHdhcyBraWxsZWQvY29waWVkDQoJIChoaWRlLXN1YnRyZWUpKQ0KICAg ICAoYW5kIGZvci15YW5rIChnb3RvLWNoYXIgbmV3ZW5kKSkpKSkNCg0KKGRlZnVuIG9yZy1raWxs LWlzLXN1YnRyZWUtcCAoJm9wdGlvbmFsIHR4dCkNCiAgIkNoZWNrIGlmIHRoZSBjdXJyZW50IGtp bGwgaXMgYW4gb3V0bGluZSBzdWJ0cmVlLCBvciBhIHNldCBvZiB0cmVlcy4NClJldHVybnMgbmls IGlmIGtpbGwgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIGhlYWRsaW5lLCBvciBpZiB0aGUgZmlyc3QN CmhlYWRsaW5lIGxldmVsIGlzIG5vdCB0aGUgbGFyZ2VzdCBoZWFkbGluZSBsZXZlbCBpbiB0aGUg dHJlZS4NClNvIHRoaXMgd2lsbCBhY3R1YWxseSBhY2NlcHQgc2V2ZXJhbCBlbnRyaWVzIG9mIGVx dWFsIGxldmVscyBhcyB3ZWxsLA0Kd2hpY2ggaXMgT0sgZm9yIGBvcmctcGFzdGUtc3VidHJlZScu DQpJZiBvcHRpb25hbCBUWFQgaXMgZ2l2ZW4sIGNoZWNrIHRoaXMgc3RyaW5nIGluc3RlYWQgb2Yg dGhlIGN1cnJlbnQga2lsbC4iDQogIChsZXQqICgoa2lsbCAob3IgdHh0IChhbmQga2lsbC1yaW5n IChjdXJyZW50LWtpbGwgMCkpICIiKSkNCgkgKHJlIChvcmctZ2V0LWxpbWl0ZWQtb3V0bGluZS1y ZWdleHApKQ0KCSAoXnJlIChjb25jYXQgIl4iIHJlKSkNCgkgKHN0YXJ0LWxldmVsIChhbmQga2ls bA0KCQkJICAgKHN0cmluZy1tYXRjaA0KCQkJICAgIChjb25jYXQgIlxcYFxcKFsgXHRcblxyXSo/ XG5cXCk/XFwoIiByZSAiXFwpIikNCgkJCSAgICBraWxsKQ0KCQkJICAgKC0gKG1hdGNoLWVuZCAy KSAobWF0Y2gtYmVnaW5uaW5nIDIpIDEpKSkNCgkgKHN0YXJ0ICgxKyAob3IgKG1hdGNoLWJlZ2lu bmluZyAyKSAtMSkpKSkNCiAgICAoaWYgKG5vdCBzdGFydC1sZXZlbCkNCgkocHJvZ24NCgkgIG5p bCkgIDs7IGRvZXMgbm90IGV2ZW4gc3RhcnQgd2l0aCBhIGhlYWRpbmcNCiAgICAgIChjYXRjaCAn ZXhpdA0KCSh3aGlsZSAoc2V0cSBzdGFydCAoc3RyaW5nLW1hdGNoIF5yZSBraWxsICgxKyBzdGFy dCkpKQ0KCSAgKHdoZW4gKDwgKC0gKG1hdGNoLWVuZCAwKSAobWF0Y2gtYmVnaW5uaW5nIDApIDEp IHN0YXJ0LWxldmVsKQ0KCSAgICAodGhyb3cgJ2V4aXQgbmlsKSkpDQoJdCkpKSkNCg0KKGRlZnZh ciBvcmctbWFya2Vycy10by1tb3ZlIG5pbA0KICAiTWFya2VycyB0aGF0IHNob3VsZCBiZSBtb3Zl ZCB3aXRoIGEgY3V0LWFuZC1wYXN0ZSBvcGVyYXRpb24uDQpUaG9zZSBtYXJrZXJzIGFyZSBzdG9y ZWQgdG9nZXRoZXIgd2l0aCB0aGVpciBwb3NpdGlvbnMgcmVsYXRpdmUgdG8NCnRoZSBzdGFydCBv ZiB0aGUgcmVnaW9uLiIpDQoNCihkZWZ1biBvcmctc2F2ZS1tYXJrZXJzLWluLXJlZ2lvbiAoYmVn IGVuZCkNCiAgIkNoZWNrIG1hcmtlcnMgaW4gcmVnaW9uLg0KSWYgdGhlc2UgbWFya2VycyBhcmUg YmV0d2VlbiBCRUcgYW5kIEVORCwgcmVjb3JkIHRoZWlyIHBvc2l0aW9uIHJlbGF0aXZlDQp0byBC RUcsIHNvIHRoYXQgYWZ0ZXIgbW92aW5nIHRoZSBibG9jayBvZiB0ZXh0LCB3ZSBjYW4gcHV0IHRo ZSBtYXJrZXJzIGJhY2sNCmludG8gcGxhY2UuDQpUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGp1 c3QgYmVmb3JlIGFuIGVudHJ5IG9yIHRyZWUgZ2V0cyBjdXQgZnJvbSB0aGUNCmJ1ZmZlci4gIEFm dGVyIHJlLWluc2VydGlvbiwgYG9yZy1yZWluc3RhbGwtbWFya2Vycy1pbi1yZWdpb24nIG11c3Qg YmUNCmNhbGxlZCBpbW1lZGlhdGVseSwgdG8gbW92ZSB0aGUgbWFya2VycyB3aXRoIHRoZSBlbnRy aWVzLiINCiAgKHNldHEgb3JnLW1hcmtlcnMtdG8tbW92ZSBuaWwpDQogICh3aGVuIChmZWF0dXJl cCAnb3JnLWNsb2NrKQ0KICAgIChvcmctY2xvY2stc2F2ZS1tYXJrZXJzLWZvci1jdXQtYW5kLXBh c3RlIGJlZyBlbmQpKQ0KICAod2hlbiAoZmVhdHVyZXAgJ29yZy1hZ2VuZGEpDQogICAgKG9yZy1h Z2VuZGEtc2F2ZS1tYXJrZXJzLWZvci1jdXQtYW5kLXBhc3RlIGJlZyBlbmQpKSkNCg0KKGRlZnVu IG9yZy1jaGVjay1hbmQtc2F2ZS1tYXJrZXIgKG1hcmtlciBiZWcgZW5kKQ0KICAiQ2hlY2sgaWYg TUFSS0VSIGlzIGJldHdlZW4gQkVHIGFuZCBFTkQuDQpJZiB5ZXMsIHJlbWVtYmVyIHRoZSBtYXJr ZXIgYW5kIHRoZSBkaXN0YW5jZSB0byBCRUcuIg0KICAod2hlbiAoYW5kIChtYXJrZXItYnVmZmVy IG1hcmtlcikNCgkgICAgIChlcXVhbCAobWFya2VyLWJ1ZmZlciBtYXJrZXIpIChjdXJyZW50LWJ1 ZmZlcikpKQ0KICAgIChpZiAoYW5kICg+PSBtYXJrZXIgYmVnKSAoPCBtYXJrZXIgZW5kKSkNCgko cHVzaCAoY29ucyBtYXJrZXIgKC0gbWFya2VyIGJlZykpIG9yZy1tYXJrZXJzLXRvLW1vdmUpKSkp DQoNCihkZWZ1biBvcmctcmVpbnN0YWxsLW1hcmtlcnMtaW4tcmVnaW9uIChiZWcpDQogICJNb3Zl IGFsbCByZW1lbWJlcmVkIG1hcmtlcnMgdG8gdGhlaXIgcG9zaXRpb24gcmVsYXRpdmUgdG8gQkVH LiINCiAgKG1hcGMgKGxhbWJkYSAoeCkNCgkgIChtb3ZlLW1hcmtlciAoY2FyIHgpICgrIGJlZyAo Y2RyIHgpKSkpDQoJb3JnLW1hcmtlcnMtdG8tbW92ZSkNCiAgKHNldHEgb3JnLW1hcmtlcnMtdG8t bW92ZSBuaWwpKQ0KDQooZGVmdW4gb3JnLW5hcnJvdy10by1zdWJ0cmVlICgpDQogICJOYXJyb3cg YnVmZmVyIHRvIHRoZSBjdXJyZW50IHN1YnRyZWUuIg0KICAoaW50ZXJhY3RpdmUpDQogIChzYXZl LWV4Y3Vyc2lvbg0KICAgIChzYXZlLW1hdGNoLWRhdGENCiAgICAgIChvcmctd2l0aC1saW1pdGVk LWxldmVscw0KICAgICAgIChuYXJyb3ctdG8tcmVnaW9uDQoJKHByb2duIChvcmctYmFjay10by1o ZWFkaW5nIHQpIChwb2ludCkpDQoJKHByb2duIChvcmctZW5kLW9mLXN1YnRyZWUgdCB0KQ0KCSAg ICAgICAoaWYgKGFuZCAob3JnLWF0LWhlYWRpbmctcCkgKG5vdCAoZW9icCkpKSAoYmFja3dhcmQt Y2hhciAxKSkNCgkgICAgICAgKHBvaW50KSkpKSkpKQ0KDQooZGVmdW4gb3JnLW5hcnJvdy10by1i bG9jayAoKQ0KICAiTmFycm93IGJ1ZmZlciB0byB0aGUgY3VycmVudCBibG9jay4iDQogIChpbnRl cmFjdGl2ZSkNCiAgKGxldCogKChjYXNlLWZvbGQtc2VhcmNoIHQpDQoJIChibG9ja3AgKG9yZy1i ZXR3ZWVuLXJlZ2V4cHMtcCAiXlsgXHRdKiNcXCtiZWdpbl8uKiINCgkJCQkJIl5bIFx0XSojXFwr ZW5kXy4qIikpKQ0KICAgIChpZiBibG9ja3ANCgkobmFycm93LXRvLXJlZ2lvbiAoY2FyIGJsb2Nr cCkgKGNkciBibG9ja3ApKQ0KICAgICAgKHVzZXItZXJyb3IgIk5vdCBpbiBhIGJsb2NrIikpKSkN Cg0KKGV2YWwtd2hlbi1jb21waWxlDQogIChkZWZ2YXIgb3JnLXByb3BlcnR5LWRyYXdlci1yZSkp DQoNCihkZWZ2YXIgb3JnLXByb3BlcnR5LXN0YXJ0LXJlKSAgOzsgZGVmaW5lZCBiZWxvdw0KKGRl ZnVuIG9yZy1jbG9uZS1zdWJ0cmVlLXdpdGgtdGltZS1zaGlmdCAobiAmb3B0aW9uYWwgc2hpZnQp DQogICJDbG9uZSB0aGUgdGFzayAoc3VidHJlZSkgYXQgcG9pbnQgTiB0aW1lcy4NClRoZSBjbG9u ZXMgd2lsbCBiZSBpbnNlcnRlZCBhcyBzaWJsaW5ncy4NCg0KSW4gaW50ZXJhY3RpdmUgdXNlLCB0 aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIGZvciB0aGUgbnVtYmVyIG9mDQpjbG9uZXMgdG8gYmUg cHJvZHVjZWQuICBJZiB0aGUgZW50cnkgaGFzIGEgdGltZXN0YW1wLCB0aGUgdXNlcg0Kd2lsbCBh bHNvIGJlIHByb21wdGVkIGZvciBhIHRpbWUgc2hpZnQsIHdoaWNoIG1heSBiZSBhIHJlcGVhdGVy DQphcyB1c2VkIGluIHRpbWUgc3RhbXBzLCBmb3IgZXhhbXBsZSBgKzNkJy4gIFRvIGRpc2FibGUg dGhpcywNCnlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCBhIHVuaXZlcnNhbCBwcmVmaXgg YXJndW1lbnQuDQoNCldoZW4gYSB2YWxpZCByZXBlYXRlciBpcyBnaXZlbiBhbmQgdGhlIGVudHJ5 IGNvbnRhaW5zIGFueSB0aW1lDQpzdGFtcHMsIHRoZSBjbG9uZXMgd2lsbCBiZWNvbWUgYSBzZXF1 ZW5jZSBpbiB0aW1lLCB3aXRoIHRpbWUNCnN0YW1wcyBpbiB0aGUgc3VidHJlZSBzaGlmdGVkIGZv ciBlYWNoIGNsb25lIHByb2R1Y2VkLiAgSWYgU0hJRlQNCmlzIG5pbCBvciB0aGUgZW1wdHkgc3Ry aW5nLCB0aW1lIHN0YW1wcyB3aWxsIGJlIGxlZnQgYWxvbmUuICBUaGUNCklEIHByb3BlcnR5IG9m IHRoZSBvcmlnaW5hbCBzdWJ0cmVlIGlzIHJlbW92ZWQuDQoNCklmIHRoZSBvcmlnaW5hbCBzdWJ0 cmVlIGRpZCBjb250YWluIHRpbWUgc3RhbXBzIHdpdGggYSByZXBlYXRlciwNCnRoZSBmb2xsb3dp bmcgd2lsbCBoYXBwZW46DQotIHRoZSByZXBlYXRlciB3aWxsIGJlIHJlbW92ZWQgaW4gZWFjaCBj bG9uZQ0KLSBhbiBhZGRpdGlvbmFsIGNsb25lIHdpbGwgYmUgcHJvZHVjZWQsIHdpdGggdGhlIGN1 cnJlbnQsIHVuc2hpZnRlZA0KICBkYXRlKHMpIGluIHRoZSBlbnRyeS4NCi0gdGhlIG9yaWdpbmFs IGVudHJ5IHdpbGwgYmUgcGxhY2VkICphZnRlciogYWxsIHRoZSBjbG9uZXMsIHdpdGgNCiAgcmVw ZWF0ZXIgaW50YWN0Lg0KLSB0aGUgc3RhcnQgZGF5cyBpbiB0aGUgcmVwZWF0ZXIgaW4gdGhlIG9y aWdpbmFsIGVudHJ5IHdpbGwgYmUgc2hpZnRlZA0KICB0byBwYXN0IHRoZSBsYXN0IGNsb25lLg0K SW4gdGhpcyB3YXkgeW91IGNhbiBzcGVsbCBvdXQgYSBudW1iZXIgb2YgaW5zdGFuY2VzIG9mIGEg cmVwZWF0aW5nIHRhc2ssDQphbmQgc3RpbGwgcmV0YWluIHRoZSByZXBlYXRlciB0byBjb3ZlciBm dXR1cmUgaW5zdGFuY2VzIG9mIHRoZSB0YXNrLiINCiAgKGludGVyYWN0aXZlICJuTnVtYmVyIG9m IGNsb25lcyB0byBwcm9kdWNlOiAiKQ0KICAobGV0ICgoc2hpZnQNCgkgKG9yIHNoaWZ0DQoJICAg ICAoaWYgKGFuZCAobm90IChlcXVhbCBjdXJyZW50LXByZWZpeC1hcmcgJyg0KSkpDQoJCSAgICAg IChzYXZlLWV4Y3Vyc2lvbg0KCQkJKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy10cy1yZWdleHAtYm90 aA0KCQkJCQkgICAoc2F2ZS1leGN1cnNpb24NCgkJCQkJICAgICAob3JnLWVuZC1vZi1zdWJ0cmVl IHQpDQoJCQkJCSAgICAgKHBvaW50KSkgdCkpKQ0KCQkgKHJlYWQtZnJvbS1taW5pYnVmZmVyDQoJ CSAgIkRhdGUgc2hpZnQgcGVyIGNsb25lIChlLmcuICsxdywgZW1wdHkgdG8gY29weSB1bmNoYW5n ZWQpOiAiKQ0KCSAgICAgICAiIikpKSA7OyBObyB0aW1lIHNoaWZ0DQoJKG4tbm8tcmVtb3ZlIC0x KQ0KCShkcmF3ZXItcmUgb3JnLWRyYXdlci1yZWdleHApDQoJYmVnIGVuZCB0ZW1wbGF0ZSB0YXNr IGlkcHJvcA0KCXNoaWZ0LW4gc2hpZnQtd2hhdCBkb3NoaWZ0IG5taW4gbm1heCkNCiAgICAoaWYg KG5vdCAoYW5kIChpbnRlZ2VycCBuKSAoPiBuIDApKSkNCgkoZXJyb3IgIkludmFsaWQgbnVtYmVy IG9mIHJlcGxpY2F0aW9ucyAlcyIgbikpDQogICAgKGlmIChhbmQgKHNldHEgZG9zaGlmdCAoYW5k IChzdHJpbmdwIHNoaWZ0KSAoc3RyaW5nLW1hdGNoICJcXFMtIiBzaGlmdCkpKQ0KCSAgICAgKG5v dCAoc3RyaW5nLW1hdGNoICJcXGBbIFx0XSpcXCs/XFwoWzAtOV0rXFwpXFwoW2hkd215XVxcKVsg XHRdKlxcJyINCgkJCQlzaGlmdCkpKQ0KCShlcnJvciAiSW52YWxpZCBzaGlmdCBzcGVjaWZpY2F0 aW9uICVzIiBzaGlmdCkpDQogICAgKHdoZW4gZG9zaGlmdA0KICAgICAgKHNldHEgc2hpZnQtbiAo c3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDEgc2hpZnQpKQ0KCSAgICBzaGlmdC13aGF0 IChjZHIgKGFzc29jIChtYXRjaC1zdHJpbmcgMiBzaGlmdCkNCgkJCQkgICAnKCgiZCIgLiBkYXkp ICgidyIgLiB3ZWVrKQ0KCQkJCSAgICAgKCJtIiAuIG1vbnRoKSAoInkiIC4geWVhcikpKSkpKQ0K ICAgIChpZiAoZXEgc2hpZnQtd2hhdCAnd2VlaykgKHNldHEgc2hpZnQtbiAoKiA3IHNoaWZ0LW4p IHNoaWZ0LXdoYXQgJ2RheSkpDQogICAgKHNldHEgbm1pbiAxIG5tYXggbikNCiAgICAob3JnLWJh Y2stdG8taGVhZGluZyB0KQ0KICAgIChzZXRxIGJlZyAocG9pbnQpKQ0KICAgIChzZXRxIGlkcHJv cCAob3JnLWVudHJ5LWdldCBuaWwgIklEIikpDQogICAgKG9yZy1lbmQtb2Ytc3VidHJlZSB0IHQp DQogICAgKG9yIChib2xwKSAoaW5zZXJ0ICJcbiIpKQ0KICAgIChzZXRxIGVuZCAocG9pbnQpKQ0K ICAgIChzZXRxIHRlbXBsYXRlIChidWZmZXItc3Vic3RyaW5nIGJlZyBlbmQpKQ0KICAgICh3aGVu IChhbmQgZG9zaGlmdA0KCSAgICAgICAoc3RyaW5nLW1hdGNoICI8W148PlxuXSsgWy4rXT9cXCtb MC05XStbaGR3bXldW148PlxuXSo+IiB0ZW1wbGF0ZSkpDQogICAgICAoZGVsZXRlLXJlZ2lvbiBi ZWcgZW5kKQ0KICAgICAgKHNldHEgZW5kIGJlZykNCiAgICAgIChzZXRxIG5taW4gMCBubWF4ICgx KyBubWF4KSBuLW5vLXJlbW92ZSBubWF4KSkNCiAgICAoZ290by1jaGFyIGVuZCkNCiAgICAobG9v cCBmb3IgbiBmcm9tIG5taW4gdG8gbm1heCBkbw0KCSAgOzsgcHJlcGFyZSBjbG9uZQ0KCSAgKHdp dGgtdGVtcC1idWZmZXINCgkgICAgKGluc2VydCB0ZW1wbGF0ZSkNCgkgICAgKG9yZy1tb2RlKQ0K CSAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KCSAgICAob3JnLXNob3ctc3VidHJlZSkNCgkg ICAgKGFuZCBpZHByb3AgKGlmIG9yZy1jbG9uZS1kZWxldGUtaWQNCgkJCSAgICAob3JnLWVudHJ5 LWRlbGV0ZSBuaWwgIklEIikNCgkJCSAgKG9yZy1pZC1nZXQtY3JlYXRlIHQpKSkNCgkgICAgKHVu bGVzcyAoPSBuIDApDQoJICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiXlsgXHRdKkNM T0NLOi4qJCIgbmlsIHQpDQoJCShraWxsLXdob2xlLWxpbmUpKQ0KCSAgICAgIChnb3RvLWNoYXIg KHBvaW50LW1pbikpDQoJICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCBkcmF3ZXItcmUg bmlsIHQpDQoJCShtYXBjIChsYW1iZGEgKGQpDQoJCQkob3JnLXJlbW92ZS1lbXB0eS1kcmF3ZXIt YXQgZCAocG9pbnQpKSkgb3JnLWRyYXdlcnMpKSkNCgkgICAgKGdvdG8tY2hhciAocG9pbnQtbWlu KSkNCgkgICAgKHdoZW4gZG9zaGlmdA0KCSAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQg b3JnLXRzLXJlZ2V4cC1ib3RoIG5pbCB0KQ0KCQkob3JnLXRpbWVzdGFtcC1jaGFuZ2UgKCogbiBz aGlmdC1uKSBzaGlmdC13aGF0KSkNCgkgICAgICAodW5sZXNzICg9IG4gbi1uby1yZW1vdmUpDQoJ CShnb3RvLWNoYXIgKHBvaW50LW1pbikpDQoJCSh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgb3Jn LXRzLXJlZ2V4cCBuaWwgdCkNCgkJICAoc2F2ZS1leGN1cnNpb24NCgkJICAgIChnb3RvLWNoYXIg KG1hdGNoLWJlZ2lubmluZyAwKSkNCgkJICAgIChpZiAobG9va2luZy1hdCAiPFtePD5cbl0rXFwo ICtbLitdP1xcK1swLTldK1toZHdteV1cXCkiKQ0KCQkJKGRlbGV0ZS1yZWdpb24gKG1hdGNoLWJl Z2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKSkpKSkpDQoJICAgIChzZXRxIHRhc2sgKGJ1ZmZlci1z dHJpbmcpKSkNCgkgIChpbnNlcnQgdGFzaykpDQogICAgKGdvdG8tY2hhciBiZWcpKSkNCg0KOzs7 IE91dGxpbmUgU29ydGluZw0KDQooZGVmdW4gb3JnLXNvcnQgKHdpdGgtY2FzZSkNCiAgIkNhbGwg YG9yZy1zb3J0LWVudHJpZXMnLCBgb3JnLXRhYmxlLXNvcnQtbGluZXMnIG9yIGBvcmctc29ydC1s aXN0Jy4NCk9wdGlvbmFsIGFyZ3VtZW50IFdJVEgtQ0FTRSBtZWFucyBzb3J0IGNhc2Utc2Vuc2l0 aXZlbHkuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoY29uZA0KICAgKChvcmctYXQtdGFibGUt cCkgKG9yZy1jYWxsLXdpdGgtYXJnICdvcmctdGFibGUtc29ydC1saW5lcyB3aXRoLWNhc2UpKQ0K ICAgKChvcmctYXQtaXRlbS1wKSAob3JnLWNhbGwtd2l0aC1hcmcgJ29yZy1zb3J0LWxpc3Qgd2l0 aC1jYXNlKSkNCiAgICh0DQogICAgKG9yZy1jYWxsLXdpdGgtYXJnICdvcmctc29ydC1lbnRyaWVz IHdpdGgtY2FzZSkpKSkNCg0KKGRlZnVuIG9yZy1zb3J0LXJlbW92ZS1pbnZpc2libGUgKHMpDQog ICJSZW1vdmUgaW52aXNpYmxlIGxpbmtzIGZyb20gc3RyaW5nIFMuIg0KICAocmVtb3ZlLXRleHQt cHJvcGVydGllcyAwIChsZW5ndGggcykgb3JnLXJtLXByb3BzIHMpDQogICh3aGlsZSAoc3RyaW5n LW1hdGNoIG9yZy1icmFja2V0LWxpbmstcmVnZXhwIHMpDQogICAgKHNldHEgcyAocmVwbGFjZS1t YXRjaCAoaWYgKG1hdGNoLWVuZCAyKQ0KCQkJICAgICAgIChtYXRjaC1zdHJpbmcgMyBzKQ0KCQkJ ICAgICAobWF0Y2gtc3RyaW5nIDEgcykpIHQgdCBzKSkpDQogIChsZXQgKChzdCAoZm9ybWF0ICIg JXMgIiBzKSkpDQogICAgKHdoaWxlIChzdHJpbmctbWF0Y2ggb3JnLWVtcGgtcmUgc3QpDQogICAg ICAoc2V0cSBzdCAocmVwbGFjZS1tYXRjaCAoZm9ybWF0ICIgJXMgIiAobWF0Y2gtc3RyaW5nIDQg c3QpKSB0IHQgc3QpKSkNCiAgICAoc2V0cSBzIChzdWJzdHJpbmcgc3QgMSAtMSkpKQ0KICBzKQ0K DQooZGVmdmFyIG9yZy1wcmlvcml0eS1yZWdleHApIDsgZGVmaW5lZCBsYXRlciBpbiB0aGUgZmls ZQ0KDQooZGVmdmFyIG9yZy1hZnRlci1zb3J0aW5nLWVudHJpZXMtb3ItaXRlbXMtaG9vayBuaWwN CiAgIkhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgYSBidW5jaCBvZiBlbnRyaWVzIG9yIGl0ZW1zIGhh dmUgYmVlbiBzb3J0ZWQuDQpXaGVuIGNoaWxkcmVuIGFyZSBzb3J0ZWQsIHRoZSBjdXJzb3IgaXMg aW4gdGhlIHBhcmVudCBsaW5lIHdoZW4gdGhpcw0KaG9vayBnZXRzIGNhbGxlZC4gIFdoZW4gYSBy ZWdpb24gb3IgYSBwbGFpbiBsaXN0IGlzIHNvcnRlZCwgdGhlIGN1cnNvcg0Kd2lsbCBiZSBpbiB0 aGUgZmlyc3QgZW50cnkgb2YgdGhlIHNvcnRlZCByZWdpb24vbGlzdC4iKQ0KDQooZGVmdW4gb3Jn LXNvcnQtZW50cmllcw0KICAgICgmb3B0aW9uYWwgd2l0aC1jYXNlIHNvcnRpbmctdHlwZSBnZXRr ZXktZnVuYyBjb21wYXJlLWZ1bmMgcHJvcGVydHkpDQogICJTb3J0IGVudHJpZXMgb24gYSBjZXJ0 YWluIGxldmVsIG9mIGFuIG91dGxpbmUgdHJlZS4NCklmIHRoZXJlIGlzIGFuIGFjdGl2ZSByZWdp b24sIHRoZSBlbnRyaWVzIGluIHRoZSByZWdpb24gYXJlIHNvcnRlZC4NCkVsc2UsIGlmIHRoZSBj dXJzb3IgaXMgYmVmb3JlIHRoZSBmaXJzdCBlbnRyeSwgc29ydCB0aGUgdG9wLWxldmVsIGl0ZW1z Lg0KRWxzZSwgdGhlIGNoaWxkcmVuIG9mIHRoZSBlbnRyeSBhdCBwb2ludCBhcmUgc29ydGVkLg0K DQpTb3J0aW5nIGNhbiBiZSBhbHBoYWJldGljYWxseSwgbnVtZXJpY2FsbHksIGJ5IGRhdGUvdGlt ZSBhcyBnaXZlbiBieQ0KYSB0aW1lIHN0YW1wLCBieSBhIHByb3BlcnR5LCBieSBwcmlvcml0eSBv cmRlciwgb3IgYnkgYSBjdXN0b20gZnVuY3Rpb24uDQoNClRoZSBjb21tYW5kIHByb21wdHMgZm9y IHRoZSBzb3J0aW5nIHR5cGUgdW5sZXNzIGl0IGhhcyBiZWVuIGdpdmVuIHRvIHRoZQ0KZnVuY3Rp b24gdGhyb3VnaCB0aGUgU09SVElORy1UWVBFIGFyZ3VtZW50LCB3aGljaCBuZWVkcyB0byBiZSBh IGNoYXJhY3RlciwNClwoP24gP04gP2EgP0EgP3QgP1QgP3MgP1MgP2QgP0QgP3AgP1AgP28gP08g P3IgP1IgP2YgP0YpLiAgSGVyZSBpcyB0aGUNCnByZWNpc2UgbWVhbmluZyBvZiBlYWNoIGNoYXJh Y3RlcjoNCg0KbiAgIE51bWVyaWNhbGx5LCBieSBjb252ZXJ0aW5nIHRoZSBiZWdpbm5pbmcgb2Yg dGhlIGVudHJ5L2l0ZW0gdG8gYSBudW1iZXIuDQphICAgQWxwaGFiZXRpY2FsbHksIGlnbm9yaW5n IHRoZSBUT0RPIGtleXdvcmQgYW5kIHRoZSBwcmlvcml0eSwgaWYgYW55Lg0KbyAgIEJ5IG9yZGVy IG9mIFRPRE8ga2V5d29yZHMuDQp0ICAgQnkgZGF0ZS90aW1lLCBlaXRoZXIgdGhlIGZpcnN0IGFj dGl2ZSB0aW1lIHN0YW1wIGluIHRoZSBlbnRyeSwgb3IsIGlmDQogICAgbm9uZSBleGlzdCwgYnkg dGhlIGZpcnN0IGluYWN0aXZlIG9uZS4NCnMgICBCeSB0aGUgc2NoZWR1bGVkIGRhdGUvdGltZS4N CmQgICBCeSBkZWFkbGluZSBkYXRlL3RpbWUuDQpjICAgQnkgY3JlYXRpb24gdGltZSwgd2hpY2gg aXMgYXNzdW1lZCB0byBiZSB0aGUgZmlyc3QgaW5hY3RpdmUgdGltZSBzdGFtcA0KICAgIGF0IHRo ZSBiZWdpbm5pbmcgb2YgYSBsaW5lLg0KcCAgIEJ5IHByaW9yaXR5IGFjY29yZGluZyB0byB0aGUg Y29va2llLg0KciAgIEJ5IHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5Lg0KDQpDYXBpdGFsIGxldHRl cnMgd2lsbCByZXZlcnNlIHRoZSBzb3J0IG9yZGVyLg0KDQpJZiB0aGUgU09SVElORy1UWVBFIGlz ID9mIG9yID9GLCB0aGVuIEdFVEtFWS1GVU5DIHNwZWNpZmllcyBhIGZ1bmN0aW9uIHRvIGJlDQpj YWxsZWQgd2l0aCBwb2ludCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWNvcmQuICBJdCBtdXN0 IHJldHVybiBlaXRoZXINCmEgc3RyaW5nIG9yIGEgbnVtYmVyIHRoYXQgc2hvdWxkIHNlcnZlIGFz IHRoZSBzb3J0aW5nIGtleSBmb3IgdGhhdCByZWNvcmQuDQoNCkNvbXBhcmluZyBlbnRyaWVzIGln bm9yZXMgY2FzZSBieSBkZWZhdWx0LiAgSG93ZXZlciwgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVu dA0KV0lUSC1DQVNFLCB0aGUgc29ydGluZyBjb25zaWRlcnMgY2FzZSBhcyB3ZWxsLg0KDQpTb3J0 aW5nIGlzIGRvbmUgYWdhaW5zdCB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBoZWFkbGluZXMsIGl0 IGlnbm9yZXMgaGlkZGVuDQpsaW5rcy4iDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChsZXQgKChj YXNlLWZ1bmMgKGlmIHdpdGgtY2FzZSAnaWRlbnRpdHkgJ2Rvd25jYXNlKSkNCgkoY21zdHINCgkg OzsgVGhlIGNsb2NrIG1hcmtlciBpcyBsb3N0IHdoZW4gdXNpbmcgYHNvcnQtc3VicicsIGxldCdz DQoJIDs7IHN0b3JlIHRoZSBjbG9ja2luZyBzdHJpbmcuDQoJICh3aGVuIChlcXVhbCAobWFya2Vy LWJ1ZmZlciBvcmctY2xvY2stbWFya2VyKSAoY3VycmVudC1idWZmZXIpKQ0KCSAgIChzYXZlLWV4 Y3Vyc2lvbg0KCSAgICAgKGdvdG8tY2hhciBvcmctY2xvY2stbWFya2VyKQ0KCSAgICAgKGxvb2tp bmctYmFjayAiXi4qIikgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDApKSkpDQogICAgICAg IHN0YXJ0IGJlZyBlbmQgc3RhcnMgcmUgcmUyDQogICAgICAgIHR4dCB3aGF0IHRtcCkNCiAgICA7 OyBGaW5kIGJlZ2lubmluZyBhbmQgZW5kIG9mIHJlZ2lvbiB0byBzb3J0DQogICAgKGNvbmQNCiAg ICAgKChvcmctcmVnaW9uLWFjdGl2ZS1wKQ0KICAgICAgOzsgd2Ugd2lsbCBzb3J0IHRoZSByZWdp b24NCiAgICAgIChzZXRxIGVuZCAocmVnaW9uLWVuZCkNCiAgICAgICAgICAgIHdoYXQgInJlZ2lv biIpDQogICAgICAoZ290by1jaGFyIChyZWdpb24tYmVnaW5uaW5nKSkNCiAgICAgIChpZiAobm90 IChvcmctYXQtaGVhZGluZy1wKSkgKG91dGxpbmUtbmV4dC1oZWFkaW5nKSkNCiAgICAgIChzZXRx IHN0YXJ0IChwb2ludCkpKQ0KICAgICAoKG9yIChvcmctYXQtaGVhZGluZy1wKQ0KICAgICAgICAg IChjb25kaXRpb24tY2FzZSBuaWwgKHByb2duIChvcmctYmFjay10by1oZWFkaW5nKSB0KSAoZXJy b3IgbmlsKSkpDQogICAgICA7OyB3ZSB3aWxsIHNvcnQgdGhlIGNoaWxkcmVuIG9mIHRoZSBjdXJy ZW50IGhlYWRsaW5lDQogICAgICAob3JnLWJhY2stdG8taGVhZGluZykNCiAgICAgIChzZXRxIHN0 YXJ0IChwb2ludCkNCgkgICAgZW5kIChwcm9nbiAob3JnLWVuZC1vZi1zdWJ0cmVlIHQgdCkNCgkJ ICAgICAgIChvciAoYm9scCkgKGluc2VydCAiXG4iKSkNCgkJICAgICAgICh3aGVuICg+PSAob3Jn LWJhY2stb3Zlci1lbXB0eS1saW5lcykgMSkNCgkJCSAoZm9yd2FyZC1saW5lIDEpKQ0KCQkgICAg ICAgKHBvaW50KSkNCgkgICAgd2hhdCAiY2hpbGRyZW4iKQ0KICAgICAgKGdvdG8tY2hhciBzdGFy dCkNCiAgICAgIChzaG93LXN1YnRyZWUpDQogICAgICAob3V0bGluZS1uZXh0LWhlYWRpbmcpKQ0K ICAgICAodA0KICAgICAgOzsgd2Ugd2lsbCBzb3J0IHRoZSB0b3AtbGV2ZWwgZW50cmllcyBpbiB0 aGlzIGZpbGUNCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQogICAgICAob3IgKG9yZy1h dC1oZWFkaW5nLXApIChvdXRsaW5lLW5leHQtaGVhZGluZykpDQogICAgICAoc2V0cSBzdGFydCAo cG9pbnQpKQ0KICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkNCiAgICAgIChiZWdpbm5pbmct b2YtbGluZSAxKQ0KICAgICAgKHdoZW4gKGxvb2tpbmctYXQgIi4qP1xcUy0iKQ0KCTs7IEZpbGUg ZW5kcyBpbiBhIG5vbi13aGl0ZSBsaW5lDQoJKGVuZC1vZi1saW5lIDEpDQoJKGluc2VydCAiXG4i KSkNCiAgICAgIChzZXRxIGVuZCAocG9pbnQtbWF4KSkNCiAgICAgIChzZXRxIHdoYXQgInRvcC1s ZXZlbCIpDQogICAgICAoZ290by1jaGFyIHN0YXJ0KQ0KICAgICAgKHNob3ctYWxsKSkpDQoNCiAg ICAoc2V0cSBiZWcgKHBvaW50KSkNCiAgICAod2hlbiAoPj0gYmVnIGVuZCkgKGdvdG8tY2hhciBz dGFydCkgKHVzZXItZXJyb3IgIk5vdGhpbmcgdG8gc29ydCIpKQ0KDQogICAgKGxvb2tpbmctYXQg IlxcKFxcKitcXCkiKQ0KICAgIChzZXRxIHN0YXJzIChtYXRjaC1zdHJpbmcgMSkNCgkgIHJlIChj b25jYXQgIl4iIChyZWdleHAtcXVvdGUgc3RhcnMpICIgKyIpDQoJICByZTIgKGNvbmNhdCAiXiIg KHJlZ2V4cC1xdW90ZSAoc3Vic3RyaW5nIHN0YXJzIDAgLTEpKSAiWyBcdFxuXSIpDQoJICB0eHQg KGJ1ZmZlci1zdWJzdHJpbmcgYmVnIGVuZCkpDQogICAgKGlmIChub3QgKGVxdWFsIChzdWJzdHJp bmcgdHh0IC0xKSAiXG4iKSkgKHNldHEgdHh0IChjb25jYXQgdHh0ICJcbiIpKSkNCiAgICAoaWYg KGFuZCAobm90IChlcXVhbCBzdGFycyAiKiIpKSAoc3RyaW5nLW1hdGNoIHJlMiB0eHQpKQ0KCSh1 c2VyLWVycm9yICJSZWdpb24gdG8gc29ydCBjb250YWlucyBhIGxldmVsIGFib3ZlIHRoZSBmaXJz dCBlbnRyeSIpKQ0KDQogICAgKHVubGVzcyBzb3J0aW5nLXR5cGUNCiAgICAgIChtZXNzYWdlDQog ICAgICAgIlNvcnQgJXM6IFthXWxwaGEgIFtuXXVtZXJpYyAgW3Bdcmlvcml0eSAgcFtyXW9wZXJ0 eSAgdG9kb1tvXXJkZXIgIFtmXXVuYw0KICAgICAgICAgICAgICAgW3RdaW1lIFtzXWNoZWR1bGVk ICBbZF1lYWRsaW5lICBbY11yZWF0ZWQNCiAgICAgICAgICAgICAgIEEvTi9QL1IvTy9GL1QvUy9E L0MgbWVhbnMgcmV2ZXJzZWQ6Ig0KICAgICAgIHdoYXQpDQogICAgICAoc2V0cSBzb3J0aW5nLXR5 cGUgKHJlYWQtY2hhci1leGNsdXNpdmUpKQ0KDQogICAgICAodW5sZXNzIGdldGtleS1mdW5jDQoJ KGFuZCAoPSAoZG93bmNhc2Ugc29ydGluZy10eXBlKSA/ZikNCgkgICAgIChzZXRxIGdldGtleS1m dW5jDQoJCSAgIChvcmctaWNvbXBsZXRpbmctcmVhZCAiU29ydCB1c2luZyBmdW5jdGlvbjogIg0K CQkJCQkgb2JhcnJheSAnZmJvdW5kcCB0IG5pbCBuaWwpKQ0KCSAgICAgKHNldHEgZ2V0a2V5LWZ1 bmMgKGludGVybiBnZXRrZXktZnVuYykpKSkNCg0KICAgICAgKGFuZCAoPSAoZG93bmNhc2Ugc29y dGluZy10eXBlKSA/cikNCgkgICAobm90IHByb3BlcnR5KQ0KICAgICAgICAgICAoc2V0cSBwcm9w ZXJ0eQ0KICAgICAgICAgICAgICAgICAob3JnLWljb21wbGV0aW5nLXJlYWQgIlByb3BlcnR5OiAi DQoJCQkJICAgICAgIChtYXBjYXIgJ2xpc3QgKG9yZy1idWZmZXItcHJvcGVydHkta2V5cyB0KSkN CgkJCQkgICAgICAgbmlsIHQpKSkpDQoNCiAgICAobWVzc2FnZSAiU29ydGluZyBlbnRyaWVzLi4u IikNCg0KICAgIChzYXZlLXJlc3RyaWN0aW9uDQogICAgICAobmFycm93LXRvLXJlZ2lvbiBzdGFy dCBlbmQpDQogICAgICAobGV0ICgoZGNzdCAoZG93bmNhc2Ugc29ydGluZy10eXBlKSkNCgkgICAg KGNhc2UtZm9sZC1zZWFyY2ggbmlsKQ0KICAgICAgICAgICAgKG5vdyAoY3VycmVudC10aW1lKSkp DQogICAgICAgIChzb3J0LXN1YnINCiAgICAgICAgICgvPSBkY3N0IHNvcnRpbmctdHlwZSkNCiAg ICAgICAgIDs7IFRoaXMgZnVuY3Rpb24gbW92ZXMgdG8gdGhlIGJlZ2lubmluZyBjaGFyYWN0ZXIg b2YgdGhlICJyZWNvcmQiIHRvDQogICAgICAgICA7OyBiZSBzb3J0ZWQuDQoJIChsYW1iZGEgbmls DQoJICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZCByZSBuaWwgdCkNCgkgICAgICAgKGdvdG8tY2hh ciAobWF0Y2gtYmVnaW5uaW5nIDApKQ0KCSAgICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkpKQ0K ICAgICAgICAgOzsgVGhpcyBmdW5jdGlvbiBtb3ZlcyB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgb2Yg dGhlICJyZWNvcmQiIGJlaW5nDQogICAgICAgICA7OyBzb3J0ZWQuDQoJIChsYW1iZGEgbmlsDQoJ ICAgKHNhdmUtbWF0Y2gtZGF0YQ0KCSAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbA0KCQkgKG91dGxp bmUtZm9yd2FyZC1zYW1lLWxldmVsIDEpDQoJICAgICAgIChlcnJvcg0KCQkoZ290by1jaGFyIChw b2ludC1tYXgpKSkpKSkNCiAgICAgICAgIDs7IFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFs dWUgdGhhdCBnZXRzIHNvcnRlZCBhZ2FpbnN0Lg0KCSAobGFtYmRhIG5pbA0KCSAgIChjb25kDQoJ ICAgICgoPSBkY3N0ID9uKQ0KCSAgICAgKGlmIChsb29raW5nLWF0IG9yZy1jb21wbGV4LWhlYWRp bmctcmVnZXhwKQ0KCQkgKHN0cmluZy10by1udW1iZXIgKG9yZy1zb3J0LXJlbW92ZS1pbnZpc2li bGUgKG1hdGNoLXN0cmluZyA0KSkpDQoJICAgICAgIG5pbCkpDQoJICAgICgoPSBkY3N0ID9hKQ0K CSAgICAgKGlmIChsb29raW5nLWF0IG9yZy1jb21wbGV4LWhlYWRpbmctcmVnZXhwKQ0KCQkgKGZ1 bmNhbGwgY2FzZS1mdW5jIChvcmctc29ydC1yZW1vdmUtaW52aXNpYmxlIChtYXRjaC1zdHJpbmcg NCkpKQ0KCSAgICAgICBuaWwpKQ0KCSAgICAoKD0gZGNzdCA/dCkNCgkgICAgIChsZXQgKChlbmQg KHNhdmUtZXhjdXJzaW9uIChvdXRsaW5lLW5leHQtaGVhZGluZykgKHBvaW50KSkpKQ0KCSAgICAg ICAoaWYgKG9yIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctdHMtcmVnZXhwIGVuZCB0KQ0KCQkgICAg ICAgKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy10cy1yZWdleHAtYm90aCBlbmQgdCkpDQoJCSAgIChv cmctdGltZS1zdHJpbmctdG8tc2Vjb25kcyAobWF0Y2gtc3RyaW5nIDApKQ0KCQkgKG9yZy1mbG9h dC10aW1lIG5vdykpKSkNCgkgICAgKCg9IGRjc3QgP2MpDQoJICAgICAobGV0ICgoZW5kIChzYXZl LWV4Y3Vyc2lvbiAob3V0bGluZS1uZXh0LWhlYWRpbmcpIChwb2ludCkpKSkNCgkgICAgICAgKGlm IChyZS1zZWFyY2gtZm9yd2FyZA0KCQkgICAgKGNvbmNhdCAiXlsgXHRdKlxcWyIgb3JnLXRzLXJl Z2V4cDEgIlxcXSIpDQoJCSAgICBlbmQgdCkNCgkJICAgKG9yZy10aW1lLXN0cmluZy10by1zZWNv bmRzIChtYXRjaC1zdHJpbmcgMCkpDQoJCSAob3JnLWZsb2F0LXRpbWUgbm93KSkpKQ0KCSAgICAo KD0gZGNzdCA/cykNCgkgICAgIChsZXQgKChlbmQgKHNhdmUtZXhjdXJzaW9uIChvdXRsaW5lLW5l eHQtaGVhZGluZykgKHBvaW50KSkpKQ0KCSAgICAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkIG9y Zy1zY2hlZHVsZWQtdGltZS1yZWdleHAgZW5kIHQpDQoJCSAgIChvcmctdGltZS1zdHJpbmctdG8t c2Vjb25kcyAobWF0Y2gtc3RyaW5nIDEpKQ0KCQkgKG9yZy1mbG9hdC10aW1lIG5vdykpKSkNCgkg ICAgKCg9IGRjc3QgP2QpDQoJICAgICAobGV0ICgoZW5kIChzYXZlLWV4Y3Vyc2lvbiAob3V0bGlu ZS1uZXh0LWhlYWRpbmcpIChwb2ludCkpKSkNCgkgICAgICAgKGlmIChyZS1zZWFyY2gtZm9yd2Fy ZCBvcmctZGVhZGxpbmUtdGltZS1yZWdleHAgZW5kIHQpDQoJCSAgIChvcmctdGltZS1zdHJpbmct dG8tc2Vjb25kcyAobWF0Y2gtc3RyaW5nIDEpKQ0KCQkgKG9yZy1mbG9hdC10aW1lIG5vdykpKSkN CgkgICAgKCg9IGRjc3QgP3ApDQoJICAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy1wcmlv cml0eS1yZWdleHAgKHBvaW50LWF0LWVvbCkgdCkNCgkJIChzdHJpbmctdG8tY2hhciAobWF0Y2gt c3RyaW5nIDIpKQ0KCSAgICAgICBvcmctZGVmYXVsdC1wcmlvcml0eSkpDQoJICAgICgoPSBkY3N0 ID9yKQ0KCSAgICAgKG9yIChvcmctZW50cnktZ2V0IG5pbCBwcm9wZXJ0eSkgIiIpKQ0KCSAgICAo KD0gZGNzdCA/bykNCgkgICAgIChpZiAobG9va2luZy1hdCBvcmctY29tcGxleC1oZWFkaW5nLXJl Z2V4cCkNCgkJICgtIDk5OTkgKGxlbmd0aCAobWVtYmVyIChtYXRjaC1zdHJpbmcgMikNCgkJCQkJ IG9yZy10b2RvLWtleXdvcmRzLTEpKSkpKQ0KCSAgICAoKD0gZGNzdCA/ZikNCgkgICAgIChpZiBn ZXRrZXktZnVuYw0KCQkgKHByb2duDQoJCSAgIChzZXRxIHRtcCAoZnVuY2FsbCBnZXRrZXktZnVu YykpDQoJCSAgIChpZiAoc3RyaW5ncCB0bXApIChzZXRxIHRtcCAoZnVuY2FsbCBjYXNlLWZ1bmMg dG1wKSkpDQoJCSAgIHRtcCkNCgkgICAgICAgKGVycm9yICJJbnZhbGlkIGtleSBmdW5jdGlvbiBg JXMnIiBnZXRrZXktZnVuYykpKQ0KCSAgICAodCAoZXJyb3IgIkludmFsaWQgc29ydGluZyB0eXBl IGAlYyciIHNvcnRpbmctdHlwZSkpKSkNCiAgICAgICAgIG5pbA0KICAgICAgICAgKGNvbmQNCiAg ICAgICAgICAoKD0gZGNzdCA/YSkgJ3N0cmluZzwpDQogICAgICAgICAgKCg9IGRjc3QgP2YpIGNv bXBhcmUtZnVuYykNCiAgICAgICAgICAoKG1lbWJlciBkY3N0ICcoP3AgP3QgP3MgP2QgP2MpKSAn PCkpKSkpDQogICAgKHJ1bi1ob29rcyAnb3JnLWFmdGVyLXNvcnRpbmctZW50cmllcy1vci1pdGVt cy1ob29rKQ0KICAgIDs7IFJlc2V0IHRoZSBjbG9jayBtYXJrZXIgaWYgbmVlZGVkDQogICAgKHdo ZW4gY21zdHINCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCShnb3RvLWNoYXIgc3RhcnQpDQoJKHNl YXJjaC1mb3J3YXJkIGNtc3RyIG5pbCB0KQ0KCShtb3ZlLW1hcmtlciBvcmctY2xvY2stbWFya2Vy IChwb2ludCkpKSkNCiAgICAobWVzc2FnZSAiU29ydGluZyBlbnRyaWVzLi4uZG9uZSIpKSkNCg0K KGRlZnVuIG9yZy1kby1zb3J0ICh0YWJsZSB3aGF0ICZvcHRpb25hbCB3aXRoLWNhc2Ugc29ydGlu Zy10eXBlKQ0KICAiU29ydCBUQUJMRSBvZiBXSEFUIGFjY29yZGluZyB0byBTT1JUSU5HLVRZUEUu DQpUaGUgdXNlciB3aWxsIGJlIHByb21wdGVkIGZvciB0aGUgU09SVElORy1UWVBFIGlmIHRoZSBj YWxsIHRvIHRoaXMNCmZ1bmN0aW9uIGRvZXMgbm90IHNwZWNpZnkgaXQuICBXSEFUIGlzIG9ubHkg Zm9yIHRoZSBwcm9tcHQsIHRvIGluZGljYXRlDQp3aGF0IGlzIGJlaW5nIHNvcnRlZC4gIFRoZSBz b3J0aW5nIGtleSB3aWxsIGJlIGV4dHJhY3RlZCBmcm9tDQp0aGUgY2FyIG9mIHRoZSBlbGVtZW50 cyBvZiB0aGUgdGFibGUuDQpJZiBXSVRILUNBU0UgaXMgbm9uLW5pbCwgdGhlIHNvcnRpbmcgd2ls bCBiZSBjYXNlLXNlbnNpdGl2ZS4iDQogICh1bmxlc3Mgc29ydGluZy10eXBlDQogICAgKG1lc3Nh Z2UNCiAgICAgIlNvcnQgJXM6IFthXWxwaGFiZXRpYywgW25ddW1lcmljLCBbdF1pbWUuICBBL04v VCBtZWFucyByZXZlcnNlZDoiDQogICAgIHdoYXQpDQogICAgKHNldHEgc29ydGluZy10eXBlIChy ZWFkLWNoYXItZXhjbHVzaXZlKSkpDQogIChsZXQgKChkY3N0IChkb3duY2FzZSBzb3J0aW5nLXR5 cGUpKQ0KCWV4dHJhY3RmdW4gY29tcGFyZWZ1bikNCiAgICA7OyBEZWZpbmUgdGhlIGFwcHJvcHJp YXRlIGZ1bmN0aW9ucw0KICAgIChjb25kDQogICAgICgoPSBkY3N0ID9uKQ0KICAgICAgKHNldHEg ZXh0cmFjdGZ1biAnc3RyaW5nLXRvLW51bWJlcg0KCSAgICBjb21wYXJlZnVuIChpZiAoPSBkY3N0 IHNvcnRpbmctdHlwZSkgJzwgJz4pKSkNCiAgICAgKCg9IGRjc3QgP2EpDQogICAgICAoc2V0cSBl eHRyYWN0ZnVuIChpZiB3aXRoLWNhc2UgKGxhbWJkYSh4KSAob3JnLXNvcnQtcmVtb3ZlLWludmlz aWJsZSB4KSkNCgkJCSAobGFtYmRhKHgpIChkb3duY2FzZSAob3JnLXNvcnQtcmVtb3ZlLWludmlz aWJsZSB4KSkpKQ0KCSAgICBjb21wYXJlZnVuIChpZiAoPSBkY3N0IHNvcnRpbmctdHlwZSkNCgkJ CSAgICdzdHJpbmc8DQoJCQkgKGxhbWJkYSAoYSBiKSAoYW5kIChub3QgKHN0cmluZzwgYSBiKSkN CgkJCQkJICAgIChub3QgKHN0cmluZz0gYSBiKSkpKSkpKQ0KICAgICAoKD0gZGNzdCA/dCkNCiAg ICAgIChzZXRxIGV4dHJhY3RmdW4NCgkgICAgKGxhbWJkYSAoeCkNCgkgICAgICAoaWYgKG9yIChz dHJpbmctbWF0Y2ggb3JnLXRzLXJlZ2V4cCB4KQ0KCQkgICAgICAoc3RyaW5nLW1hdGNoIG9yZy10 cy1yZWdleHAtYm90aCB4KSkNCgkJICAob3JnLWZsb2F0LXRpbWUNCgkJICAgKG9yZy10aW1lLXN0 cmluZy10by10aW1lIChtYXRjaC1zdHJpbmcgMCB4KSkpDQoJCTApKQ0KCSAgICBjb21wYXJlZnVu IChpZiAoPSBkY3N0IHNvcnRpbmctdHlwZSkgJzwgJz4pKSkNCiAgICAgKHQgKGVycm9yICJJbnZh bGlkIHNvcnRpbmcgdHlwZSBgJWMnIiBzb3J0aW5nLXR5cGUpKSkNCg0KICAgIChzb3J0IChtYXBj YXIgKGxhbWJkYSAoeCkgKGNvbnMgKGZ1bmNhbGwgZXh0cmFjdGZ1biAoY2FyIHgpKSAoY2RyIHgp KSkNCgkJICB0YWJsZSkNCgkgIChsYW1iZGEgKGEgYikgKGZ1bmNhbGwgY29tcGFyZWZ1biAoY2Fy IGEpIChjYXIgYikpKSkpKQ0KDQoNCjs7OyBUaGUgb3Jnc3RydWN0IG1pbm9yIG1vZGUNCg0KOzsg RGVmaW5lIGEgbWlub3IgbW9kZSB3aGljaCBjYW4gYmUgdXNlZCBpbiBvdGhlciBtb2RlcyBpbiBv cmRlciB0bw0KOzsgaW50ZWdyYXRlIHRoZSBvcmctbW9kZSBzdHJ1Y3R1cmUgZWRpdGluZyBjb21t YW5kcy4NCg0KOzsgVGhpcyBpcyByZWFsbHkgYSBoYWNrLCBiZWNhdXNlIHRoZSBvcmctbW9kZSBz dHJ1Y3R1cmUgY29tbWFuZHMgdXNlDQo7OyBrZXlzIHdoaWNoIG5vcm1hbGx5IGJlbG9uZyB0byB0 aGUgbWFqb3IgbW9kZS4gIEhlcmUgaXMgaG93IGl0DQo7OyB3b3JrczogVGhlIG1pbm9yIG1vZGUg ZGVmaW5lcyBhbGwgdGhlIGtleXMgbmVjZXNzYXJ5IHRvIG9wZXJhdGUgdGhlDQo7OyBzdHJ1Y3R1 cmUgY29tbWFuZHMsIGJ1dCB3cmFwcyB0aGUgY29tbWFuZHMgaW50byBhIGZ1bmN0aW9uIHdoaWNo DQo7OyB0ZXN0cyBpZiB0aGUgY3Vyc29yIGlzIGN1cnJlbnRseSBhdCBhIGhlYWRsaW5lIG9yIGEg cGxhaW4gbGlzdA0KOzsgaXRlbS4gIElmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZSBzdHJ1Y3R1cmUg Y29tbWFuZCBpcyB1c2VkLA0KOzsgdGVtcG9yYXJpbHkgc2V0dGluZyBtYW55IE9yZy1tb2RlIHZh cmlhYmxlcyBsaWtlIHJlZ3VsYXINCjs7IGV4cHJlc3Npb25zIGZvciBmaWxsaW5nIGV0Yy4gIEhv d2V2ZXIsIHdoZW4gYW55IG9mIHRob3NlIGtleXMgaXMNCjs7IHVzZWQgYXQgYSBkaWZmZXJlbnQg bG9jYXRpb24sIGZ1bmN0aW9uIHVzZXMgYGtleS1iaW5kaW5nJyB0byBsb29rDQo7OyB1cCBpZiB0 aGUga2V5IGhhcyBhbiBhc3NvY2lhdGVkIGNvbW1hbmQgaW4gYW5vdGhlciBjdXJyZW50bHkgYWN0 aXZlDQo7OyBrZXltYXAgKG1pbm9yIG1vZGVzLCBtYWpvciBtb2RlLCBnbG9iYWwpLCBhbmQgZXhl Y3V0ZXMgdGhhdA0KOzsgY29tbWFuZC4gIFRoZXJlIG1pZ2h0IGJlIHByb2JsZW1zIGlmIGFueSBv ZiB0aGUga2V5cyBpcyBvdGhlcndpc2UNCjs7IHVzZWQgYXMgYSBwcmVmaXgga2V5Lg0KDQooZGVm Y3VzdG9tIG9yZ3N0cnVjdC1oZWFkaW5nLXByZWZpeC1yZWdleHAgIiINCiAgIlJlZ2V4cCB0aGF0 IG1hdGNoZXMgdGhlIGN1c3RvbSBwcmVmaXggb2YgT3JnIGhlYWRsaW5lcyBpbg0Kb3Jnc3RydWN0 KCsrKS1tb2RlLiINCiAgOmdyb3VwICdvcmcNCiAgOnZlcnNpb24gIjI0LjQiDQogIDpwYWNrYWdl LXZlcnNpb24gJyhPcmcgLiAiOC4zIikNCiAgOnR5cGUgJ3JlZ2V4cCkNCjs7OyMjI2F1dG9sb2Fk KHB1dCAnb3Jnc3RydWN0LWhlYWRpbmctcHJlZml4LXJlZ2V4cCAnc2FmZS1sb2NhbC12YXJpYWJs ZSAnc3RyaW5ncCkNCg0KKGRlZmN1c3RvbSBvcmdzdHJ1Y3Qtc2V0dXAtaG9vayBuaWwNCiAgIkhv b2sgcnVuIGFmdGVyIG9yZ3N0cnVjdC1tb2RlLW1hcCBpcyBmaWxsZWQuIg0KICA6Z3JvdXAgJ29y Zw0KICA6dmVyc2lvbiAiMjQuNCINCiAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAuICI4LjAiKQ0K ICA6dHlwZSAnaG9vaykNCg0KKGRlZnZhciBvcmdzdHJ1Y3QtaW5pdGlhbGl6ZWQgbmlsKQ0KDQoo ZGVmdmFyIG9yZy1sb2NhbC12YXJzIG5pbA0KICAiTGlzdCBvZiBsb2NhbCB2YXJpYWJsZXMsIGZv ciB1c2UgYnkgYG9yZ3N0cnVjdC1tb2RlJy4iKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZmluZS1t aW5vci1tb2RlIG9yZ3N0cnVjdC1tb2RlDQogICJUb2dnbGUgdGhlIG1pbm9yIG1vZGUgYG9yZ3N0 cnVjdC1tb2RlJy4NClRoaXMgbW9kZSBpcyBmb3IgdXNpbmcgT3JnLW1vZGUgc3RydWN0dXJlIGNv bW1hbmRzIGluIG90aGVyDQptb2Rlcy4gIFRoZSBmb2xsb3dpbmcga2V5cyBiZWhhdmUgYXMgaWYg T3JnLW1vZGUgd2VyZSBhY3RpdmUsIGlmDQp0aGUgY3Vyc29yIGlzIG9uIGEgaGVhZGxpbmUsIG9y IG9uIGEgcGxhaW4gbGlzdCBpdGVtIChib3RoIGFzDQpkZWZpbmVkIGJ5IE9yZy1tb2RlKS4iDQog IG5pbCAiIE9yZ1N0cnVjdCIgKG1ha2Utc3BhcnNlLWtleW1hcCkNCiAgKGZ1bmNhbGwgKGlmIG9y Z3N0cnVjdC1tb2RlDQoJICAgICAgICdhZGQtdG8taW52aXNpYmlsaXR5LXNwZWMNCgkgICAgICdy ZW1vdmUtZnJvbS1pbnZpc2liaWxpdHktc3BlYykNCgkgICAnKG91dGxpbmUgLiB0KSkNCiAgKHdo ZW4gb3Jnc3RydWN0LW1vZGUNCiAgICAob3JnLWxvYWQtbW9kdWxlcy1tYXliZSkNCiAgICAodW5s ZXNzIG9yZ3N0cnVjdC1pbml0aWFsaXplZA0KICAgICAgKG9yZ3N0cnVjdC1zZXR1cCkNCiAgICAg IChzZXRxIG9yZ3N0cnVjdC1pbml0aWFsaXplZCB0KSkpKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRl ZnVuIHR1cm4tb24tb3Jnc3RydWN0ICgpDQogICJVbmNvbmRpdGlvbmFsbHkgdHVybiBvbiBgb3Jn c3RydWN0LW1vZGUnLiINCiAgKG9yZ3N0cnVjdC1tb2RlIDEpKQ0KDQooZGVmdmFyIG9yZy1mYi12 YXJzIG5pbCkNCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnb3JnLWZiLXZhcnMpDQooZGVm dW4gb3Jnc3RydWN0KystbW9kZSAoJm9wdGlvbmFsIGFyZykNCiAgIlRvZ2dsZSBgb3Jnc3RydWN0 LW1vZGUnLCB0aGUgZW5oYW5jZWQgdmVyc2lvbiBvZiBpdC4NCkluIGFkZGl0aW9uIHRvIHNldHRp bmcgb3Jnc3RydWN0LW1vZGUsIHRoaXMgYWxzbyBleHBvcnRzIGFsbA0KaW5kZW50YXRpb24gYW5k IGF1dG9maWxsaW5nIHZhcmlhYmxlcyBmcm9tIG9yZy1tb2RlIGludG8gdGhlDQpidWZmZXIuICBJ dCB3aWxsIGFsc28gcmVjb2duaXplIGl0ZW0gY29udGV4dCBpbiBtdWx0aWxpbmUgaXRlbXMuIg0K ICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoc2V0cSBhcmcgKHByZWZpeC1udW1lcmljLXZhbHVlIChv ciBhcmcgKGlmIG9yZ3N0cnVjdC1tb2RlIC0xIDEpKSkpDQogIChpZiAoPCBhcmcgMSkNCiAgICAg IChwcm9nbiAob3Jnc3RydWN0LW1vZGUgLTEpDQoJICAgICAobWFwYyAobGFtYmRhKHYpDQoJCSAg ICAgKG9yZy1zZXQtbG9jYWwgKGNhciB2KQ0KCQkJCSAgICAoaWYgKGVxIChjYXItc2FmZSAoY2Fk ciB2KSkgJ3F1b3RlKSAoY2FkYWRyIHYpIChjYWRyIHYpKSkpDQoJCSAgIG9yZy1mYi12YXJzKSkN CiAgICAob3Jnc3RydWN0LW1vZGUgMSkNCiAgICAoc2V0cSBvcmctZmItdmFycyBuaWwpDQogICAg KHVubGVzcyBvcmctbG9jYWwtdmFycw0KICAgICAgKHNldHEgb3JnLWxvY2FsLXZhcnMgKG9yZy1n ZXQtbG9jYWwtdmFyaWFibGVzKSkpDQogICAgKGxldCAodmFyIHZhbCkNCiAgICAgIChtYXBjDQog ICAgICAgKGxhbWJkYSAoeCkNCgkgKHdoZW4gKHN0cmluZy1tYXRjaA0KCQkiXlxcKHBhcmFncmFw aC1cXHxhdXRvLWZpbGxcXHxub3JtYWwtYXV0by1maWxsXFx8ZmlsbC1wYXJhZ3JhcGhcXHxmaWxs LXByZWZpeFxcfGluZGVudC1cXCkiDQoJCShzeW1ib2wtbmFtZSAoY2FyIHgpKSkNCgkgICAoc2V0 cSB2YXIgKGNhciB4KSB2YWwgKG50aCAxIHgpKQ0KCSAgIChwdXNoIChsaXN0IHZhciBgKHF1b3Rl ICwoZXZhbCB2YXIpKSkgb3JnLWZiLXZhcnMpDQoJICAgKG9yZy1zZXQtbG9jYWwgdmFyIChpZiAo ZXEgKGNhci1zYWZlIHZhbCkgJ3F1b3RlKSAobnRoIDEgdmFsKSB2YWwpKSkpDQogICAgICAgb3Jn LWxvY2FsLXZhcnMpDQogICAgICAob3JnLXNldC1sb2NhbCAnb3Jnc3RydWN0LWlzLSsrIHQpKSkp DQoNCihkZWZ2YXIgb3Jnc3RydWN0LWlzLSsrIG5pbA0KICAiSXMgYG9yZ3N0cnVjdC1tb2RlJyBp biArKyB2ZXJzaW9uIGluIHRoZSBjdXJyZW50LWJ1ZmZlcj8iKQ0KKG1ha2UtdmFyaWFibGUtYnVm ZmVyLWxvY2FsICdvcmdzdHJ1Y3QtaXMtKyspDQoNCjs7OyMjI2F1dG9sb2FkDQooZGVmdW4gdHVy bi1vbi1vcmdzdHJ1Y3QrKyAoKQ0KICAiVW5jb25kaXRpb25hbGx5IHR1cm4gb24gYG9yZ3N0cnVj dCsrLW1vZGUnLiINCiAgKG9yZ3N0cnVjdCsrLW1vZGUgMSkpDQoNCihkZWZ1biBvcmdzdHJ1Y3Qt ZXJyb3IgKCkNCiAgIkVycm9yIHdoZW4gdGhlcmUgaXMgbm8gZGVmYXVsdCBiaW5kaW5nIGZvciBh IHN0cnVjdHVyZSBrZXkuIg0KICAoaW50ZXJhY3RpdmUpDQogIChmdW5jYWxsIChpZiAoZmJvdW5k cCAndXNlci1lcnJvcikNCgkgICAgICAgJ3VzZXItZXJyb3INCgkgICAgICdlcnJvcikNCgkgICAi VGhpcyBrZXkgaGFzIG5vIGZ1bmN0aW9uIG91dHNpZGUgc3RydWN0dXJlIGVsZW1lbnRzIikpDQoN CihkZWZ1biBvcmdzdHJ1Y3Qtc2V0dXAgKCkNCiAgIlNldHVwIG9yZ3N0cnVjdCBrZXltYXAuIg0K ICAoZG9saXN0IChjZWxsICcoKG9yZy1kZW1vdGUgLiB0KQ0KCQkgIChvcmctbWV0YWxlZnQgLiB0 KQ0KCQkgIChvcmctbWV0YXJpZ2h0IC4gdCkNCgkJICAob3JnLXByb21vdGUgLiB0KQ0KCQkgIChv cmctc2hpZnRtZXRhbGVmdCAuIHQpDQoJCSAgKG9yZy1zaGlmdG1ldGFyaWdodCAuIHQpDQoJCSAg b3JnLWJhY2t3YXJkLWVsZW1lbnQNCgkJICBvcmctYmFja3dhcmQtaGVhZGluZy1zYW1lLWxldmVs DQoJCSAgb3JnLWN0cmwtYy1yZXQNCgkJICBvcmctY3RybC1jLW1pbnVzDQoJCSAgb3JnLWN0cmwt Yy1zdGFyDQoJCSAgb3JnLWN5Y2xlDQoJCSAgb3JnLWZvcndhcmQtaGVhZGluZy1zYW1lLWxldmVs DQoJCSAgb3JnLWluc2VydC1oZWFkaW5nDQoJCSAgb3JnLWluc2VydC1oZWFkaW5nLXJlc3BlY3Qt Y29udGVudA0KCQkgIG9yZy1raWxsLW5vdGUtb3Itc2hvdy1icmFuY2hlcw0KCQkgIG9yZy1tYXJr LXN1YnRyZWUNCgkJICBvcmctbWV0YS1yZXR1cm4NCgkJICBvcmctbWV0YWRvd24NCgkJICBvcmct bWV0YXVwDQoJCSAgb3JnLW5hcnJvdy10by1zdWJ0cmVlDQoJCSAgb3JnLXByb21vdGUtc3VidHJl ZQ0KCQkgIG9yZy1yZXZlYWwNCgkJICBvcmctc2hpZnRkb3duDQoJCSAgb3JnLXNoaWZ0bGVmdA0K CQkgIG9yZy1zaGlmdG1ldGFkb3duDQoJCSAgb3JnLXNoaWZ0bWV0YXVwDQoJCSAgb3JnLXNoaWZ0 cmlnaHQNCgkJICBvcmctc2hpZnR0YWINCgkJICBvcmctc2hpZnR0YWINCgkJICBvcmctc2hpZnR1 cA0KCQkgIG9yZy1zaG93LXN1YnRyZWUNCgkJICBvcmctc29ydA0KCQkgIG9yZy11cC1lbGVtZW50 DQoJCSAgb3V0bGluZS1kZW1vdGUNCgkJICBvdXRsaW5lLW5leHQtdmlzaWJsZS1oZWFkaW5nDQoJ CSAgb3V0bGluZS1wcmV2aW91cy12aXNpYmxlLWhlYWRpbmcNCgkJICBvdXRsaW5lLXByb21vdGUN CgkJICBvdXRsaW5lLXVwLWhlYWRpbmcNCgkJICBzaG93LWNoaWxkcmVuKSkNCiAgICAobGV0ICgo ZiAob3IgKGNhci1zYWZlIGNlbGwpIGNlbGwpKQ0KCSAgKGRpc2FibGUtd2hlbi1oZWFkaW5nLXBy ZWZpeCAoY2RyLXNhZmUgY2VsbCkpKQ0KICAgICAgKHdoZW4gKGZib3VuZHAgZikNCgkobGV0ICgo bmV3LWJpbmRpbmdzKSkNCgkgIChkb2xpc3QgKGJpbmRpbmcgKG5jb25jICh3aGVyZS1pcy1pbnRl cm5hbCBmIG9yZy1tb2RlLW1hcCkNCgkJCQkgICh3aGVyZS1pcy1pbnRlcm5hbCBmIG91dGxpbmUt bW9kZS1tYXApKSkNCgkgICAgKHB1c2ggYmluZGluZyBuZXctYmluZGluZ3MpDQoJICAgIDs7IFRP RE8gdXNlIGxvY2FsLWZ1bmN0aW9uLWtleS1tYXANCgkgICAgKGRvbGlzdCAocmVwICcoKCI8dGFi PiIgLiAiVEFCIikNCgkJCSAgICgiPHJldHVybj4iIC4gIlJFVCIpDQoJCQkgICAoIjxlc2NhcGU+ IiAuICJFU0MiKQ0KCQkJICAgKCI8ZGVsZXRlPiIgLiAiREVMIikpKQ0KCSAgICAgIChzZXRxIGJp bmRpbmcgKHJlYWQta2JkLW1hY3JvDQoJCQkgICAgIChsZXQgKChjYXNlLWZvbGQtc2VhcmNoKSkN CgkJCSAgICAgICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nDQoJCQkJKHJlZ2V4cC1xdW90ZSAo Y2RyIHJlcCkpDQoJCQkJKGNhciByZXApDQoJCQkJKGtleS1kZXNjcmlwdGlvbiBiaW5kaW5nKSkp KSkNCgkgICAgICAocHVzaG5ldyBiaW5kaW5nIG5ldy1iaW5kaW5ncyA6dGVzdCAnZXF1YWwpKSkN CgkgIChkb2xpc3QgKGJpbmRpbmcgbmV3LWJpbmRpbmdzKQ0KCSAgICAobGV0ICgoa2V5IChsb29r dXAta2V5IG9yZ3N0cnVjdC1tb2RlLW1hcCBiaW5kaW5nKSkpDQoJICAgICAgKHdoZW4gKG9yIChu b3Qga2V5KSAobnVtYmVycCBrZXkpKQ0KCQkoY29uZGl0aW9uLWNhc2UgbmlsDQoJCSAgICAob3Jn LWRlZmtleSBvcmdzdHJ1Y3QtbW9kZS1tYXANCgkJCQliaW5kaW5nDQoJCQkJKG9yZ3N0cnVjdC1t YWtlLWJpbmRpbmcgZiBiaW5kaW5nIGRpc2FibGUtd2hlbi1oZWFkaW5nLXByZWZpeCkpDQoJCSAg KGVycm9yIG5pbCkpKSkpKSkpKQ0KICAocnVuLWhvb2tzICdvcmdzdHJ1Y3Qtc2V0dXAtaG9vaykp DQoNCihkZWZ1biBvcmdzdHJ1Y3QtbWFrZS1iaW5kaW5nIChmdW4ga2V5IGRpc2FibGUtd2hlbi1o ZWFkaW5nLXByZWZpeCkNCiAgIkNyZWF0ZSBhIGZ1bmN0aW9uIGZvciBiaW5kaW5nIGluIHRoZSBz dHJ1Y3R1cmUgbWlub3IgbW9kZS4NCkZVTiBpcyB0aGUgY29tbWFuZCB0byBjYWxsIGluc2lkZSBh IHRhYmxlLiAgS0VZIGlzIHRoZSBrZXkgdGhhdA0Kc2hvdWxkIGJlIGNoZWNrZWQgaW4gZm9yIGEg Y29tbWFuZCB0byBleGVjdXRlIG91dHNpZGUgb2YgdGFibGVzLg0KTm9uLW5pbCBgZGlzYWJsZS13 aGVuLWhlYWRpbmctcHJlZml4JyBtZWFucyB0byBkaXNhYmxlIHRoZSBjb21tYW5kDQppZiBgb3Jn c3RydWN0LWhlYWRpbmctcHJlZml4LXJlZ2V4cCcgaXMgbm90IGVtcHR5LiINCiAgKGxldCAoKG5h bWUgKGNvbmNhdCAib3Jnc3RydWN0LWhpamFja2VyLSIgKHN5bWJvbC1uYW1lIGZ1bikpKSkNCiAg ICAobGV0ICgobm5hbWUgbmFtZSkNCgkgIChpIDApKQ0KICAgICAgKHdoaWxlIChmYm91bmRwIChp bnRlcm4gbm5hbWUpKQ0KCShzZXRxIG5uYW1lIChmb3JtYXQgIiVzLSVkIiBuYW1lIChzZXRxIGkg KDErIGkpKSkpKQ0KICAgICAgKHNldHEgbmFtZSAoaW50ZXJuIG5uYW1lKSkpDQogICAgKGV2YWwN CiAgICAgKGxldCAoKGJpbmRpbmdzICcoKG9yZy1oZWFkaW5nLXJlZ2V4cA0KCQkJKGNvbmNhdCAi XiINCgkJCQlvcmdzdHJ1Y3QtaGVhZGluZy1wcmVmaXgtcmVnZXhwDQoJCQkJIlxcKFxcKitcXClc XCg/OiArXFwoLio/XFwpXFwpP1sJCV0qJCIpKQ0KCQkgICAgICAgKG9yZy1vdXRsaW5lLXJlZ2V4 cA0KCQkJKGNvbmNhdCBvcmdzdHJ1Y3QtaGVhZGluZy1wcmVmaXgtcmVnZXhwICJcXCorICIpKQ0K CQkgICAgICAgKG9yZy1vdXRsaW5lLXJlZ2V4cC1ib2wNCgkJCShjb25jYXQgIl4iIG9yZy1vdXRs aW5lLXJlZ2V4cCkpDQoJCSAgICAgICAob3V0bGluZS1yZWdleHAgb3JnLW91dGxpbmUtcmVnZXhw KQ0KCQkgICAgICAgKG91dGxpbmUtaGVhZGluZy1lbmQtcmVnZXhwICJcbiIpDQoJCSAgICAgICAo b3V0bGluZS1sZXZlbCAnb3JnLW91dGxpbmUtbGV2ZWwpDQoJCSAgICAgICAob3V0bGluZS1oZWFk aW5nLWFsaXN0KSkpKQ0KICAgICAgIGAoZGVmdW4gLG5hbWUgKGFyZykNCgkgICwoY29uY2F0ICJJ biBTdHJ1Y3R1cmUsIHJ1biBgIiAoc3ltYm9sLW5hbWUgZnVuKSAiJy5cbiINCgkJICAgIk91dHNp ZGUgb2Ygc3RydWN0dXJlLCBydW4gdGhlIGJpbmRpbmcgb2YgYCINCgkJICAgKGtleS1kZXNjcmlw dGlvbiBrZXkpICInLiINCgkJICAgKHdoZW4gZGlzYWJsZS13aGVuLWhlYWRpbmctcHJlZml4DQoJ CSAgICAgKGNvbmNhdA0KCQkgICAgICAiXG5JZiBgb3Jnc3RydWN0LWhlYWRpbmctcHJlZml4LXJl Z2V4cCcgaXMgbm90IGVtcHR5LCB0aGlzIGNvbW1hbmQgd2lsbCBhbHdheXMgZmFsbFxuIg0KCQkg ICAgICAiYmFjayB0byB0aGUgZGVmYXVsdCBiaW5kaW5nIGR1ZSB0byBsaW1pdGF0aW9ucyBvZiBP cmcncyBpbXBsZW1lbnRhdGlvbiBvZlxuIg0KCQkgICAgICAiYCIgKHN5bWJvbC1uYW1lIGZ1bikg IicuIikpKQ0KCSAgKGludGVyYWN0aXZlICJwIikNCgkgIChsZXQqICgoZGlzYWJsZQ0KCQkgICwo YW5kIGRpc2FibGUtd2hlbi1oZWFkaW5nLXByZWZpeA0KCQkJJyhub3QgKHN0cmluZz0gb3Jnc3Ry dWN0LWhlYWRpbmctcHJlZml4LXJlZ2V4cCAiIikpKSkNCgkJIChmYWxsYmFjaw0KCQkgIChvciBk aXNhYmxlDQoJCSAgICAgIChub3QNCgkJICAgICAgIChsZXQqICxiaW5kaW5ncw0KCQkJIChvcmct Y29udGV4dC1wICdoZWFkbGluZSAnaXRlbQ0KCQkJCQksKHdoZW4gKG1lbXEgZnVuDQoJCQkJCQkg ICAgICcob3JnLWluc2VydC1oZWFkaW5nDQoJCQkJCQkgICAgICAgb3JnLWluc2VydC1oZWFkaW5n LXJlc3BlY3QtY29udGVudA0KCQkJCQkJICAgICAgIG9yZy1tZXRhLXJldHVybikpDQoJCQkJCSAg ICcod2hlbiBvcmdzdHJ1Y3QtaXMtKysNCgkJCQkJICAgICAgJ2l0ZW0tYm9keSkpKSkpKSkpDQoJ ICAgIChpZiBmYWxsYmFjaw0KCQkobGV0KiAoKG9yZ3N0cnVjdC1tb2RlKQ0KCQkgICAgICAgKGJp bmRpbmcNCgkJCShsZXQgKChrZXkgLGtleSkpDQoJCQkgIChjYXRjaCAnZXhpdA0KCQkJICAgIChk b2xpc3QNCgkJCQkocmVwDQoJCQkJICcobmlsDQoJCQkJICAgKCI8XFwoW14+XSpcXCl0YWI+IiAu ICJcXDFUQUIiKQ0KCQkJCSAgICgiPFxcKFtePl0qXFwpcmV0dXJuPiIgLiAiXFwxUkVUIikNCgkJ CQkgICAoIjxcXChbXj5dKlxcKWVzY2FwZT4iIC4gIlxcMUVTQyIpDQoJCQkJICAgKCI8XFwoW14+ XSpcXClkZWxldGU+IiAuICJcXDFERUwiKSkNCgkJCQkgbmlsKQ0KCQkJICAgICAgKHdoZW4gcmVw DQoJCQkJKHNldHEga2V5IChyZWFkLWtiZC1tYWNybw0KCQkJCQkgICAobGV0ICgoY2FzZS1mb2xk LXNlYXJjaCkpDQoJCQkJCSAgICAgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZw0KCQkJCQkgICAg ICAoY2FyIHJlcCkNCgkJCQkJICAgICAgKGNkciByZXApDQoJCQkJCSAgICAgIChrZXktZGVzY3Jp cHRpb24ga2V5KSkpKSkpDQoJCQkgICAgICAod2hlbiAoa2V5LWJpbmRpbmcga2V5KQ0KCQkJCSh0 aHJvdyAnZXhpdCAoa2V5LWJpbmRpbmcga2V5KSkpKSkpKSkNCgkJICAoaWYgKGtleW1hcHAgYmlu ZGluZykNCgkJICAgICAgKG9yZy1zZXQtdHJhbnNpZW50LW1hcCBiaW5kaW5nKQ0KCQkgICAgKGxl dCAoKGZ1bmMgKG9yIGJpbmRpbmcNCgkJCQkgICAgKHVubGVzcyBkaXNhYmxlDQoJCQkJICAgICAg J29yZ3N0cnVjdC1lcnJvcikpKSkNCgkJICAgICAgKHdoZW4gZnVuYw0KCQkJKGNhbGwtaW50ZXJh Y3RpdmVseSBmdW5jKSkpKSkNCgkgICAgICAob3JnLXJ1bi1saWtlLWluLW9yZy1tb2RlDQoJICAg ICAgIChsYW1iZGEgKCkNCgkJIChpbnRlcmFjdGl2ZSkNCgkJIChsZXQqICxiaW5kaW5ncw0KCQkg ICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICcsZnVuKSkpKSkpKSkpDQogICAgbmFtZSkpDQoNCihkZWZ1 biBvcmctY29udGV4dHVhbGl6ZS1rZXlzIChhbGlzdCBjb250ZXh0cykNCiAgIlJldHVybiB2YWxp ZCBlbGVtZW50cyBpbiBBTElTVCBkZXBlbmRpbmcgb24gQ09OVEVYVFMuDQoNCmBvcmctYWdlbmRh LWN1c3RvbS1jb21tYW5kcycgb3IgYG9yZy1jYXB0dXJlLXRlbXBsYXRlcycgYXJlIHRoZQ0KdmFs dWVzIHVzZWQgZm9yIEFMSVNULCBhbmQgYG9yZy1hZ2VuZGEtY3VzdG9tLWNvbW1hbmRzLWNvbnRl eHRzJw0Kb3IgYG9yZy1jYXB0dXJlLXRlbXBsYXRlcy1jb250ZXh0cycgYXJlIHRoZSBhc3NvY2lh dGVkIGNvbnRleHRzDQpkZWZpbml0aW9ucy4iDQogIChsZXQgKChjb250ZXh0cw0KCSA7OyBub3Jt YWxpemUgY29udGV4dHMNCgkgKG1hcGNhcg0KCSAgKGxhbWJkYShjKSAoY29uZCAoKGxpc3RwIChj YWRyIGMpKQ0KCQkJICAgIChsaXN0IChjYXIgYykgKGNhciBjKSAoY2FkciBjKSkpDQoJCQkgICAo KHN0cmluZz0gIiIgKGNhZHIgYykpDQoJCQkgICAgKGxpc3QgKGNhciBjKSAoY2FyIGMpIChjYWRk ciBjKSkpDQoJCQkgICAodCBjKSkpIGNvbnRleHRzKSkNCgkoYSBhbGlzdCkgYyByIHMpDQogICAg OzsgbG9vcCBvdmVyIGFsbCBjb21tYW5kcyBvciB0ZW1wbGF0ZXMNCiAgICAod2hpbGUgKHNldHEg YyAocG9wIGEpKQ0KICAgICAgKGxldCAodnJ1bGVzIHJlcGwpDQoJKGNvbmQNCgkgKChub3QgKGFz c29jIChjYXIgYykgY29udGV4dHMpKQ0KCSAgKHB1c2ggYyByKSkNCgkgKChhbmQgKGFzc29jIChj YXIgYykgY29udGV4dHMpDQoJICAgICAgIChzZXRxIHZydWxlcyAob3JnLWNvbnRleHR1YWxpemUt dmFsaWRhdGUta2V5DQoJCQkgICAgIChjYXIgYykgY29udGV4dHMpKSkNCgkgIChtYXBjIChsYW1i ZGEgKHZyKQ0KCQkgICh3aGVuIChub3QgKGVxdWFsIChjYXIgdnIpIChjYWRyIHZyKSkpDQoJCSAg ICAoc2V0cSByZXBsIHZyKSkpIHZydWxlcykNCgkgIChpZiAobm90IHJlcGwpIChwdXNoIGMgcikN CgkgICAgKHB1c2ggKGNhZHIgcmVwbCkgcykNCgkgICAgKHB1c2gNCgkgICAgIChjb25zIChjYXIg YykNCgkJICAgKGNkciAob3IgKGFzc29jIChjYWRyIHJlcGwpIGFsaXN0KQ0KCQkJICAgIChlcnJv ciAiVW5kZWZpbmVkIGtleSBgJXMnIGFzIGNvbnRleHR1YWwgcmVwbGFjZW1lbnQgZm9yIGAlcyci DQoJCQkJICAgKGNhZHIgcmVwbCkgKGNhciBjKSkpKSkNCgkgICAgIHIpKSkpKSkNCiAgICA7OyBS ZXR1cm4gbGltaXRlZCBBTElTVCwgcG9zc2libHkgd2l0aCBrZXlzIG1vZGlmaWVkLCBhbmQgZGVk dXBsaWNhdGVkDQogICAgKGRlbHENCiAgICAgbmlsDQogICAgIChkZWxldGUtZHVwcw0KICAgICAg KG1hcGNhciAobGFtYmRhICh4KQ0KCQkobGV0ICgodHBsIChjYXIgeCkpKQ0KCQkgICh3aGVuIChu b3QgKGRlbHENCgkJCSAgICAgIG5pbA0KCQkJICAgICAgKG1hcGNhciAobGFtYmRhKHkpDQoJCQkJ CShlcXVhbCB5IHRwbCkpIHMpKSkgeCkpKQ0KCSAgICAgIChyZXZlcnNlIHIpKSkpKSkNCg0KKGRl ZnVuIG9yZy1jb250ZXh0dWFsaXplLXZhbGlkYXRlLWtleSAoa2V5IGNvbnRleHRzKQ0KICAiQ2hl Y2sgQ09OVEVYVFMgZm9yIGFnZW5kYSBvciBjYXB0dXJlIEtFWS4iDQogIChsZXQgKHIgcnIgcmVz KQ0KICAgICh3aGlsZSAoc2V0cSByIChwb3AgY29udGV4dHMpKQ0KICAgICAgKG1hcGMNCiAgICAg ICAobGFtYmRhIChycikNCgkgKHdoZW4NCiAgICAgICAgICAgICAoYW5kIChlcXVhbCBrZXkgKGNh ciByKSkNCiAgICAgICAgICAgICAgICAgIChpZiAoZnVuY3Rpb25wIHJyKSAoZnVuY2FsbCBycikN CiAgICAgICAgICAgICAgICAgICAgKG9yIChhbmQgKGVxIChjYXIgcnIpICdpbi1maWxlKQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLWZpbGUtbmFtZSkNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHN0cmluZy1tYXRjaCAoY2RyIHJyKSAoYnVmZmVyLWZpbGUtbmFt ZSkpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoZXEgKGNhciBycikgJ2luLW1vZGUp DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2ggKGNkciBycikgKHN5 bWJvbC1uYW1lIG1ham9yLW1vZGUpKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGVx IChjYXIgcnIpICdpbi1idWZmZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJp bmctbWF0Y2ggKGNkciBycikgKGJ1ZmZlci1uYW1lKSkpDQogICAgICAgICAgICAgICAgICAgICAg ICAod2hlbiAoYW5kIChlcSAoY2FyIHJyKSAnbm90LWluLWZpbGUpDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChidWZmZXItZmlsZS1uYW1lKSkNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgKG5vdCAoc3RyaW5nLW1hdGNoIChjZHIgcnIpIChidWZmZXItZmlsZS1uYW1lKSkp KQ0KICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4gKGVxIChjYXIgcnIpICdub3QtaW4tbW9k ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAoc3RyaW5nLW1hdGNoIChjZHIgcnIp IChzeW1ib2wtbmFtZSBtYWpvci1tb2RlKSkpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgKHdo ZW4gKGVxIChjYXIgcnIpICdub3QtaW4tYnVmZmVyKQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAobm90IChzdHJpbmctbWF0Y2ggKGNkciBycikgKGJ1ZmZlci1uYW1lKSkpKSkpKQ0KICAgICAg ICAgICAocHVzaCByIHJlcykpKQ0KICAgICAgIChjYXIgKGxhc3QgcikpKSkNCiAgICAoZGVsZXRl LWR1cHMgKGRlbHEgbmlsIHJlcykpKSkNCg0KKGRlZnVuIG9yZy1jb250ZXh0LXAgKCZyZXN0IGNv bnRleHRzKQ0KICAiQ2hlY2sgaWYgbG9jYWwgY29udGV4dCBpcyBhbnkgb2YgQ09OVEVYVFMuDQpQ b3NzaWJsZSB2YWx1ZXMgaW4gdGhlIGxpc3Qgb2YgY29udGV4dHMgYXJlIGB0YWJsZScsIGBoZWFk bGluZScsIGFuZCBgaXRlbScuIg0KICAobGV0ICgocG9zIChwb2ludCkpKQ0KICAgIChnb3RvLWNo YXIgKHBvaW50LWF0LWJvbCkpDQogICAgKHByb2cxIChvciAoYW5kIChtZW1xICd0YWJsZSBjb250 ZXh0cykNCgkJICAgIChsb29raW5nLWF0ICJbIFx0XSp8IikpDQoJICAgICAgIChhbmQgKG1lbXEg J2hlYWRsaW5lIGNvbnRleHRzKQ0KCQkgICAgKGxvb2tpbmctYXQgb3JnLW91dGxpbmUtcmVnZXhw KSkNCgkgICAgICAgKGFuZCAobWVtcSAnaXRlbSBjb250ZXh0cykNCgkJICAgIChsb29raW5nLWF0 ICJbIFx0XSpcXChbLSsqXSBcXHxbMC05XStbLildIFxcKSIpKQ0KCSAgICAgICAoYW5kIChtZW1x ICdpdGVtLWJvZHkgY29udGV4dHMpDQoJCSAgICAob3JnLWluLWl0ZW0tcCkpKQ0KICAgICAgKGdv dG8tY2hhciBwb3MpKSkpDQoNCihkZWZ1biBvcmctZ2V0LWxvY2FsLXZhcmlhYmxlcyAoKQ0KICAi UmV0dXJuIGEgbGlzdCBvZiBhbGwgbG9jYWwgdmFyaWFibGVzIGluIGFuIE9yZyBtb2RlIGJ1ZmZl ci4iDQogIChsZXQgKHZhcmxpc3QpDQogICAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZm ZXItY3JlYXRlICIqT3JnIHRtcCoiKQ0KICAgICAgKGVyYXNlLWJ1ZmZlcikNCiAgICAgIChvcmct bW9kZSkNCiAgICAgIChzZXRxIHZhcmxpc3QgKGJ1ZmZlci1sb2NhbC12YXJpYWJsZXMpKSkNCiAg ICAoa2lsbC1idWZmZXIgIipPcmcgdG1wKiIpDQogICAgKGRlbHEgbmlsDQogICAgICAgICAgKG1h cGNhcg0KICAgICAgICAgICAobGFtYmRhICh4KQ0KICAgICAgICAgICAgIChzZXRxIHgNCiAgICAg ICAgICAgICAgICAgICAoaWYgKHN5bWJvbHAgeCkNCiAgICAgICAgICAgICAgICAgICAgICAgKGxp c3QgeCkNCiAgICAgICAgICAgICAgICAgICAgIChsaXN0IChjYXIgeCkgKGNkciB4KSkpKQ0KICAg ICAgICAgICAgIChpZiAoYW5kIChub3QgKGdldCAoY2FyIHgpICdvcmctc3RhdGUpKQ0KICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2gNCiAgICAgICAgICAgICAgICAgICAgICAgIl5c XChvcmctXFx8b3JndGJsLVxcfG91dGxpbmUtXFx8Y29tbWVudC1cXHxwYXJhZ3JhcGgtXFx8YXV0 by1maWxsXFx8bm9ybWFsLWF1dG8tZmlsbFxcfGZpbGwtcGFyYWdyYXBoXFx8aW5kZW50LVxcKSIN CiAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC1uYW1lIChjYXIgeCkpKSkNCiAgICAgICAg ICAgICAgICAgeCBuaWwpKQ0KICAgICAgICAgICB2YXJsaXN0KSkpKQ0KDQooZGVmdW4gb3JnLWNs b25lLWxvY2FsLXZhcmlhYmxlcyAoZnJvbS1idWZmZXIgJm9wdGlvbmFsIHJlZ2V4cCkNCiAgIkNs b25lIGxvY2FsIHZhcmlhYmxlcyBmcm9tIEZST00tQlVGRkVSLg0KT3B0aW9uYWwgYXJndW1lbnQg UkVHRVhQIHNlbGVjdHMgdmFyaWFibGVzIHRvIGNsb25lLiINCiAgKG1hcGMNCiAgIChsYW1iZGEg KHBhaXIpDQogICAgIChhbmQgKHN5bWJvbHAgKGNhciBwYWlyKSkNCgkgIChvciAobnVsbCByZWdl eHApDQoJICAgICAgKHN0cmluZy1tYXRjaCByZWdleHAgKHN5bWJvbC1uYW1lIChjYXIgcGFpcikp KSkNCgkgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgKGNhciBwYWlyKSkNCgkgICAgICAgKGNk ciBwYWlyKSkpKQ0KICAgKGJ1ZmZlci1sb2NhbC12YXJpYWJsZXMgZnJvbS1idWZmZXIpKSkNCg0K Ozs7IyMjYXV0b2xvYWQNCihkZWZ1biBvcmctcnVuLWxpa2UtaW4tb3JnLW1vZGUgKGNtZCkNCiAg IlJ1biBhIGNvbW1hbmQsIHByZXRlbmRpbmcgdGhhdCB0aGUgY3VycmVudCBidWZmZXIgaXMgaW4g T3JnLW1vZGUuDQpUaGlzIHdpbGwgdGVtcG9yYXJpbHkgYmluZCBsb2NhbCB2YXJpYWJsZXMgdGhh dCBhcmUgdHlwaWNhbGx5IGJvdW5kIGluDQpPcmctbW9kZSB0byB0aGUgdmFsdWVzIHRoZXkgaGF2 ZSBpbiBPcmctbW9kZSwgYW5kIHRoZW4gaW50ZXJhY3RpdmVseQ0KY2FsbCBDTUQuIg0KICAob3Jn LWxvYWQtbW9kdWxlcy1tYXliZSkNCiAgKHVubGVzcyBvcmctbG9jYWwtdmFycw0KICAgIChzZXRx IG9yZy1sb2NhbC12YXJzIChvcmctZ2V0LWxvY2FsLXZhcmlhYmxlcykpKQ0KICAobGV0IChiaW5k cykNCiAgICAoZG9saXN0ICh2YXIgb3JnLWxvY2FsLXZhcnMpDQogICAgICAod2hlbiAob3IgKG5v dCAoYm91bmRwIChjYXIgdmFyKSkpDQoJCShlcSAoc3ltYm9sLXZhbHVlIChjYXIgdmFyKSkNCgkJ ICAgIChkZWZhdWx0LXZhbHVlIChjYXIgdmFyKSkpKQ0KCShwdXNoIChsaXN0IChjYXIgdmFyKSBg KHF1b3RlICwoY2FkciB2YXIpKSkgYmluZHMpKSkNCiAgICAoZXZhbCBgKGxldCAsYmluZHMNCgkg ICAgIChjYWxsLWludGVyYWN0aXZlbHkgKHF1b3RlICxjbWQpKSkpKSkNCg0KOzs7OyBBcmNoaXZp bmcNCg0KKGRlZnVuIG9yZy1nZXQtY2F0ZWdvcnkgKCZvcHRpb25hbCBwb3MgZm9yY2UtcmVmcmVz aCkNCiAgIkdldCB0aGUgY2F0ZWdvcnkgYXBwbHlpbmcgdG8gcG9zaXRpb24gUE9TLiINCiAgKHNh dmUtbWF0Y2gtZGF0YQ0KICAgIChpZiBmb3JjZS1yZWZyZXNoIChvcmctcmVmcmVzaC1jYXRlZ29y eS1wcm9wZXJ0aWVzKSkNCiAgICAobGV0ICgocG9zIChvciBwb3MgKHBvaW50KSkpKQ0KICAgICAg KG9yIChnZXQtdGV4dC1wcm9wZXJ0eSBwb3MgJ29yZy1jYXRlZ29yeSkNCgkgIChwcm9nbiAob3Jn LXJlZnJlc2gtY2F0ZWdvcnktcHJvcGVydGllcykNCgkJIChnZXQtdGV4dC1wcm9wZXJ0eSBwb3Mg J29yZy1jYXRlZ29yeSkpKSkpKQ0KDQooZGVmdW4gb3JnLXJlZnJlc2gtY2F0ZWdvcnktcHJvcGVy dGllcyAoKQ0KICAiUmVmcmVzaCBjYXRlZ29yeSB0ZXh0IHByb3BlcnRpZXMgaW4gdGhlIGJ1ZmZl ci4iDQogIChsZXQgKChjYXNlLWZvbGQtc2VhcmNoIHQpDQoJKGluaGliaXQtcmVhZC1vbmx5IHQp DQoJKGRlZi1jYXQgKGNvbmQNCgkJICAoKG51bGwgb3JnLWNhdGVnb3J5KQ0KCQkgICAoaWYgYnVm ZmVyLWZpbGUtbmFtZQ0KCQkgICAgICAgKGZpbGUtbmFtZS1zYW5zLWV4dGVuc2lvbg0KCQkJKGZp bGUtbmFtZS1ub25kaXJlY3RvcnkgYnVmZmVyLWZpbGUtbmFtZSkpDQoJCSAgICAgIj8/PyIpKQ0K CQkgICgoc3ltYm9scCBvcmctY2F0ZWdvcnkpIChzeW1ib2wtbmFtZSBvcmctY2F0ZWdvcnkpKQ0K CQkgICh0IG9yZy1jYXRlZ29yeSkpKQ0KCWJlZyBlbmQgY2F0IHBvcyBvcHRpb25wKQ0KICAgIChv cmctd2l0aC1zaWxlbnQtbW9kaWZpY2F0aW9ucw0KICAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAg ICAoc2F2ZS1yZXN0cmljdGlvbg0KCSAod2lkZW4pDQoJIChnb3RvLWNoYXIgKHBvaW50LW1pbikp DQoJIChwdXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpIChwb2ludC1tYXgpICdvcmctY2F0ZWdvcnkg ZGVmLWNhdCkNCgkgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZA0KCQkgIl5cXCgjXFwrQ0FURUdP Ulk6XFx8WyBcdF0qOkNBVEVHT1JZOlxcKVxcKC4qXFwpIiBuaWwgdCkNCgkgICAoc2V0cSBwb3Mg KG1hdGNoLWVuZCAwKQ0KCQkgb3B0aW9ucCAoZXF1YWwgKGNoYXItYWZ0ZXIgKG1hdGNoLWJlZ2lu bmluZyAwKSkgPyMpDQoJCSBjYXQgKG9yZy10cmltIChtYXRjaC1zdHJpbmcgMikpKQ0KCSAgIChp ZiBvcHRpb25wDQoJICAgICAgIChzZXRxIGJlZyAocG9pbnQtYXQtYm9sKSBlbmQgKHBvaW50LW1h eCkpDQoJICAgICAob3JnLWJhY2stdG8taGVhZGluZyB0KQ0KCSAgICAgKHNldHEgYmVnIChwb2lu dCkgZW5kIChvcmctZW5kLW9mLXN1YnRyZWUgdCB0KSkpDQoJICAgKHB1dC10ZXh0LXByb3BlcnR5 IGJlZyBlbmQgJ29yZy1jYXRlZ29yeSBjYXQpDQoJICAgKHB1dC10ZXh0LXByb3BlcnR5IGJlZyBl bmQgJ29yZy1jYXRlZ29yeS1wb3NpdGlvbiBiZWcpDQoJICAgKGdvdG8tY2hhciBwb3MpKSkpKSkp DQoNCihkZWZ1biBvcmctcmVmcmVzaC1wcm9wZXJ0aWVzIChkcHJvcCB0cHJvcCkNCiAgIlJlZnJl c2ggYnVmZmVyIHRleHQgcHJvcGVydGllcy4NCkRQUk9QIGlzIHRoZSBkcmF3ZXIgcHJvcGVydHkg YW5kIFRQUk9QIGlzIHRoZSBjb3JyZXNwb25kaW5nIHRleHQNCnByb3BlcnR5IHRvIHNldC4iDQog IChsZXQgKChjYXNlLWZvbGQtc2VhcmNoIHQpDQoJKGluaGliaXQtcmVhZC1vbmx5IHQpIHApDQog ICAgKG9yZy13aXRoLXNpbGVudC1tb2RpZmljYXRpb25zDQogICAgIChzYXZlLWV4Y3Vyc2lvbg0K ICAgICAgIChzYXZlLXJlc3RyaWN0aW9uDQoJICh3aWRlbikNCgkgKGdvdG8tY2hhciAocG9pbnQt bWluKSkNCgkgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAoY29uY2F0ICJeWyBcdF0qOiIgZHBy b3AgIjogK1xcKC4qXFwpWyBcdF0qJCIpIG5pbCB0KQ0KCSAgIChzZXRxIHAgKG9yZy1tYXRjaC1z dHJpbmctbm8tcHJvcGVydGllcyAxKSkNCgkgICAoc2F2ZS1leGN1cnNpb24NCgkgICAgIChvcmct YmFjay10by1oZWFkaW5nIHQpDQoJICAgICAocHV0LXRleHQtcHJvcGVydHkNCgkgICAgICAocG9p bnQtYXQtYm9sKSAob3IgKG91dGxpbmUtbmV4dC1oZWFkaW5nKSAocG9pbnQtbWF4KSkgdHByb3Ag cCkpKSkpKSkpDQoNCg0KOzs7OyBMaW5rIFN0dWZmDQoNCjs7OyBMaW5rIGFiYnJldmlhdGlvbnMN Cg0KKGRlZnVuIG9yZy1saW5rLWV4cGFuZC1hYmJyZXYgKGxpbmspDQogICJBcHBseSByZXBsYWNl bWVudHMgYXMgZGVmaW5lZCBpbiBgb3JnLWxpbmstYWJicmV2LWFsaXN0Jy4iDQogIChpZiAoc3Ry aW5nLW1hdGNoICJeXFwoW146XSpcXClcXCg6Oj9cXCguKlxcKVxcKT8kIiBsaW5rKQ0KICAgICAg KGxldCogKChrZXkgKG1hdGNoLXN0cmluZyAxIGxpbmspKQ0KCSAgICAgKGFzIChvciAoYXNzb2Mg a2V5IG9yZy1saW5rLWFiYnJldi1hbGlzdC1sb2NhbCkNCgkJICAgICAoYXNzb2Mga2V5IG9yZy1s aW5rLWFiYnJldi1hbGlzdCkpKQ0KCSAgICAgKHRhZyAoYW5kIChtYXRjaC1lbmQgMikgKG1hdGNo LXN0cmluZyAzIGxpbmspKSkNCgkgICAgIHJwbCkNCgkoaWYgKG5vdCBhcykNCgkgICAgbGluaw0K CSAgKHNldHEgcnBsIChjZHIgYXMpKQ0KCSAgKGNvbmQNCgkgICAoKHN5bWJvbHAgcnBsKSAoZnVu Y2FsbCBycGwgdGFnKSkNCgkgICAoKHN0cmluZy1tYXRjaCAiJShcXChbXildK1xcKSkiIHJwbCkN CgkgICAgKHJlcGxhY2UtbWF0Y2gNCgkgICAgIChzYXZlLW1hdGNoLWRhdGENCgkgICAgICAgKGZ1 bmNhbGwgKGludGVybi1zb2Z0IChtYXRjaC1zdHJpbmcgMSBycGwpKSB0YWcpKSB0IHQgcnBsKSkN CgkgICAoKHN0cmluZy1tYXRjaCAiJXMiIHJwbCkgKHJlcGxhY2UtbWF0Y2ggKG9yIHRhZyAiIikg dCB0IHJwbCkpDQoJICAgKChzdHJpbmctbWF0Y2ggIiVoIiBycGwpDQoJICAgIChyZXBsYWNlLW1h dGNoICh1cmwtaGV4aWZ5LXN0cmluZyAob3IgdGFnICIiKSkgdCB0IHJwbCkpDQoJICAgKHQgKGNv bmNhdCBycGwgdGFnKSkpKSkNCiAgICBsaW5rKSkNCg0KOzs7IFN0b3JpbmcgYW5kIGluc2VydGlu ZyBsaW5rcw0KDQooZGVmdmFyIG9yZy1pbnNlcnQtbGluay1oaXN0b3J5IG5pbA0KICAiTWluaWJ1 ZmZlciBoaXN0b3J5IGZvciBsaW5rcyBpbnNlcnRlZCB3aXRoIGBvcmctaW5zZXJ0LWxpbmsnLiIp DQoNCihkZWZ2YXIgb3JnLXN0b3JlZC1saW5rcyBuaWwNCiAgIkNvbnRhaW5zIHRoZSBsaW5rcyBz dG9yZWQgd2l0aCBgb3JnLXN0b3JlLWxpbmsnLiIpDQoNCihkZWZ2YXIgb3JnLXN0b3JlLWxpbmst cGxpc3QgbmlsDQogICJQbGlzdCB3aXRoIGluZm8gYWJvdXQgdGhlIG1vc3QgcmVjZW50bHkgbGlu ayBjcmVhdGVkIHdpdGggYG9yZy1zdG9yZS1saW5rJy4iKQ0KDQooZGVmdmFyIG9yZy1saW5rLXBy b3RvY29scyBuaWwNCiAgIkxpbmsgcHJvdG9jb2xzIGFkZGVkIHRvIE9yZy1tb2RlIHVzaW5nIGBv cmctYWRkLWxpbmstdHlwZScuIikNCg0KKGRlZnZhciBvcmctc3RvcmUtbGluay1mdW5jdGlvbnMg bmlsDQogICJMaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgdG8gY3JlYXRlIGFuZCBz dG9yZSBhIGxpbmsuDQpFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4gdW50aWwg b25lIHJldHVybnMgYSBub24tbmlsDQp2YWx1ZS4gIEVhY2ggZnVuY3Rpb24gc2hvdWxkIGNoZWNr IGlmIGl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZw0KdGhpcyBsaW5rIChmb3IgZXhhbXBs ZSBieSBsb29raW5nIGF0IHRoZSBtYWpvciBtb2RlKS4NCklmIG5vdCwgaXQgbXVzdCBleGl0IGFu ZCByZXR1cm4gbmlsLg0KSWYgeWVzLCBpdCBzaG91bGQgcmV0dXJuIGEgbm9uLW5pbCB2YWx1ZSBh ZnRlciBhIGNhbGxpbmcNCmBvcmctc3RvcmUtbGluay1wcm9wcycgd2l0aCBhIGxpc3Qgb2YgcHJv cGVydGllcyBhbmQgdmFsdWVzLg0KU3BlY2lhbCBwcm9wZXJ0aWVzIGFyZToNCg0KOnR5cGUgICAg ICAgICBUaGUgbGluayBwcmVmaXgsIGxpa2UgXCJodHRwXCIuICBUaGlzIG11c3QgYmUgZ2l2ZW4u DQo6bGluayAgICAgICAgIFRoZSBsaW5rLCBsaWtlIFwiaHR0cDovL3d3dy5hc3Ryby51dmEubmwv fmRvbWluaWtcIi4NCiAgICAgICAgICAgICAgVGhpcyBpcyBvYmxpZ2F0b3J5IGFzIHdlbGwuDQo6 ZGVzY3JpcHRpb24gIE9wdGlvbmFsIGRlZmF1bHQgZGVzY3JpcHRpb24gZm9yIHRoZSBzZWNvbmQg cGFpcg0KICAgICAgICAgICAgICBvZiBicmFja2V0cyBpbiBhbiBPcmctbW9kZSBsaW5rLiAgVGhl IHVzZXIgY2FuIHN0aWxsIGNoYW5nZQ0KICAgICAgICAgICAgICB0aGlzIHdoZW4gaW5zZXJ0aW5n IHRoaXMgbGluayBpbnRvIGFuIE9yZy1tb2RlIGJ1ZmZlci4NCg0KSW4gYWRkaXRpb24gdG8gdGhl c2UsIGFueSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgY2FuIGJlIHNwZWNpZmllZA0KYW5kIHRoZW4g dXNlZCBpbiBjYXB0dXJlIHRlbXBsYXRlcy4iKQ0KDQooZGVmdW4gb3JnLWFkZC1saW5rLXR5cGUg KHR5cGUgJm9wdGlvbmFsIGZvbGxvdyBleHBvcnQpDQogICJBZGQgVFlQRSB0byB0aGUgbGlzdCBv ZiBgb3JnLWxpbmstdHlwZXMnLg0KUmUtY29tcHV0ZSBhbGwgcmVndWxhciBleHByZXNzaW9ucyBk ZXBlbmRpbmcgb24gYG9yZy1saW5rLXR5cGVzJw0KDQpGT0xMT1cgYW5kIEVYUE9SVCBhcmUgdHdv IGZ1bmN0aW9ucy4NCg0KRk9MTE9XIHNob3VsZCB0YWtlIHRoZSBsaW5rIHBhdGggYXMgdGhlIHNp bmdsZSBhcmd1bWVudCBhbmQgZG8gd2hhdGV2ZXINCmlzIG5lY2Vzc2FyeSB0byBmb2xsb3cgdGhl IGxpbmssIGZvciBleGFtcGxlIGZpbmQgYSBmaWxlIG9yIGRpc3BsYXkNCmEgbWFpbCBtZXNzYWdl Lg0KDQpFWFBPUlQgc2hvdWxkIGZvcm1hdCB0aGUgbGluayBwYXRoIGZvciBleHBvcnQgdG8gb25l IG9mIHRoZSBleHBvcnQgZm9ybWF0cy4NCkl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uIGFjY2VwdGlu ZyB0aHJlZSBhcmd1bWVudHM6DQoNCiAgcGF0aCAgICB0aGUgcGF0aCBvZiB0aGUgbGluaywgdGhl IHRleHQgYWZ0ZXIgdGhlIHByZWZpeCAobGlrZSBcImh0dHA6XCIpDQogIGRlc2MgICAgdGhlIGRl c2NyaXB0aW9uIG9mIHRoZSBsaW5rLCBpZiBhbnksIG9yIGEgZGVzY3JpcHRpb24gYWRkZWQgYnkN CiAgICAgICAgICBvcmctZXhwb3J0LW5vcm1hbGl6ZS1saW5rcyBpZiB0aGVyZSBpcyBub25lDQog IGZvcm1hdCAgdGhlIGV4cG9ydCBmb3JtYXQsIGEgc3ltYm9sIGxpa2UgYGh0bWwnIG9yIGBsYXRl eCcgb3IgYGFzY2lpJy4uDQoNClRoZSBmdW5jdGlvbiBtYXkgdXNlIHRoZSBGT1JNQVQgaW5mb3Jt YXRpb24gdG8gcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMNCmRlcGVuZGluZyBvbiB0aGUgZm9ybWF0 LiAgVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHB1dCBsaXRlcmFsbHkgaW50bw0KdGhlIGV4cG9y dGVkIGZpbGUuICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5pbCwgdGhpcyBtZWFucyBPcmcgc2hv dWxkDQpkbyB3aGF0IGl0IG5vcm1hbGx5IGRvZXMgd2l0aCBsaW5rcyB3aGljaCBkbyBub3QgaGF2 ZSBFWFBPUlQgZGVmaW5lZC4NCg0KT3JnLW1vZGUgaGFzIGEgYnVpbHQtaW4gZGVmYXVsdCBmb3Ig ZXhwb3J0aW5nIGxpbmtzLiAgSWYgeW91IGFyZSBoYXBweSB3aXRoDQp0aGlzIGRlZmF1bHQsIHRo ZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIGFuIGV4cG9ydCBmdW5jdGlvbiBmb3IgdGhlIGxpbmsN CnR5cGUuICBGb3IgYSBzaW1wbGUgZXhhbXBsZSBvZiBhbiBleHBvcnQgZnVuY3Rpb24sIHNlZSBg b3JnLWJiZGIuZWwnLiINCiAgKGFkZC10by1saXN0ICdvcmctbGluay10eXBlcyB0eXBlIHQpDQog IChvcmctbWFrZS1saW5rLXJlZ2V4cHMpDQogIChpZiAoYXNzb2MgdHlwZSBvcmctbGluay1wcm90 b2NvbHMpDQogICAgICAoc2V0Y2RyIChhc3NvYyB0eXBlIG9yZy1saW5rLXByb3RvY29scykgKGxp c3QgZm9sbG93IGV4cG9ydCkpDQogICAgKHB1c2ggKGxpc3QgdHlwZSBmb2xsb3cgZXhwb3J0KSBv cmctbGluay1wcm90b2NvbHMpKSkNCg0KKGRlZnZhciBvcmctYWdlbmRhLWJ1ZmZlci1uYW1lKSA7 IERlZmluZWQgaW4gb3JnLWFnZW5kYS5lbA0KKGRlZnZhciBvcmctaWQtbGluay10by1vcmctdXNl LWlkKSA7IERlZmluZWQgaW4gb3JnLWlkLmVsDQoNCjs7OyMjI2F1dG9sb2FkDQooZGVmdW4gb3Jn LXN0b3JlLWxpbmsgKGFyZykNCiAgIlxcPG9yZy1tb2RlLW1hcD5TdG9yZSBhbiBvcmctbGluayB0 byB0aGUgY3VycmVudCBsb2NhdGlvbi4NClRoaXMgbGluayBpcyBhZGRlZCB0byBgb3JnLXN0b3Jl ZC1saW5rcycgYW5kIGNhbiBsYXRlciBiZSBpbnNlcnRlZA0KaW50byBhbiBvcmctYnVmZmVyIHdp dGggXFxbb3JnLWluc2VydC1saW5rXS4NCg0KRm9yIHNvbWUgbGluayB0eXBlcywgYSBwcmVmaXgg YXJnIGlzIGludGVycHJldGVkLg0KRm9yIGxpbmtzIHRvIFVzZW5ldCBhcnRpY2xlcywgYXJnIG5l Z2F0ZXMgYG9yZy1nbnVzLXByZWZlci13ZWItbGlua3MnLg0KRm9yIGZpbGUgbGlua3MsIGFyZyBu ZWdhdGVzIGBvcmctY29udGV4dC1pbi1maWxlLWxpbmtzJy4NCg0KQSBkb3VibGUgcHJlZml4IGFy ZyBmb3JjZSBza2lwcGluZyBzdG9yaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QNCnBhcnQgb2Yg T3JnJ3MgY29yZS4NCg0KQSB0cmlwbGUgcHJlZml4IGFyZyBmb3JjZSBzdG9yaW5nIGEgbGluayBm b3IgZWFjaCBsaW5lIGluIHRoZQ0KYWN0aXZlIHJlZ2lvbi4iDQogIChpbnRlcmFjdGl2ZSAiUCIp DQogIChvcmctbG9hZC1tb2R1bGVzLW1heWJlKQ0KICAoaWYgKGFuZCAoZXF1YWwgYXJnICcoNjQp KSAob3JnLXJlZ2lvbi1hY3RpdmUtcCkpDQogICAgICAoc2F2ZS1leGN1cnNpb24NCgkobGV0ICgo ZW5kIChyZWdpb24tZW5kKSkpDQoJICAoZ290by1jaGFyIChyZWdpb24tYmVnaW5uaW5nKSkNCgkg IChzZXQtbWFyayAocG9pbnQpKQ0KCSAgKHdoaWxlICg8IChwb2ludC1hdC1lb2wpIGVuZCkNCgkg ICAgKG1vdmUtZW5kLW9mLWxpbmUgMSkgKGFjdGl2YXRlLW1hcmspDQoJICAgIChsZXQgKGN1cnJl bnQtcHJlZml4LWFyZykNCgkgICAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctc3RvcmUtbGlu aykpDQoJICAgIChtb3ZlLWJlZ2lubmluZy1vZi1saW5lIDIpDQoJICAgIChzZXQtbWFyayAocG9p bnQpKSkpKQ0KICAgIChvcmctd2l0aC1saW1pdGVkLWxldmVscw0KICAgICAoc2V0cSBvcmctc3Rv cmUtbGluay1wbGlzdCBuaWwpDQogICAgIChsZXQgKGxpbmsgY3BsdHh0IGRlc2MgZGVzY3JpcHRp b24gc2VhcmNoDQoJCXR4dCBjdXN0b20taWQgYWdlbmRhLWxpbmsgc2Z1bnMgc2Z1bnNuKQ0KICAg ICAgIChjb25kDQoNCgk7OyBTdG9yZSBhIGxpbmsgdXNpbmcgYW4gZXh0ZXJuYWwgbGluayB0eXBl DQoJKChhbmQgKG5vdCAoZXF1YWwgYXJnICcoMTYpKSkNCgkgICAgICAoc2V0cSBzZnVucw0KCQkg ICAgKGRlbHENCgkJICAgICBuaWwgKG1hcGNhciAobGFtYmRhIChmKQ0KCQkJCSAgIChsZXQgKGZz KSAoaWYgKGZ1bmNhbGwgZikgKHB1c2ggZiBmcykpKSkNCgkJCQkgb3JnLXN0b3JlLWxpbmstZnVu Y3Rpb25zKSkNCgkJICAgIHNmdW5zbiAobWFwY2FyIChsYW1iZGEgKGZ1KSAoc3ltYm9sLW5hbWUg KGNhciBmdSkpKSBzZnVucykpDQoJICAgICAgKG9yIChhbmQgKGNkciBzZnVucykNCgkJICAgICAg IChmdW5jYWxsIChpbnRlcm4NCgkJCQkgKGNvbXBsZXRpbmctcmVhZA0KCQkJCSAgIldoaWNoIGZ1 bmN0aW9uIGZvciBjcmVhdGluZyB0aGUgbGluaz8gIg0KCQkJCSAgc2Z1bnNuIG5pbCB0IChjYXIg c2Z1bnNuKSkpKSkNCgkJICAoZnVuY2FsbCAoY2FhciBzZnVucykpKQ0KCSAgICAgIChzZXRxIGxp bmsgKHBsaXN0LWdldCBvcmctc3RvcmUtbGluay1wbGlzdCA6bGluaykNCgkJICAgIGRlc2MgKG9y IChwbGlzdC1nZXQgb3JnLXN0b3JlLWxpbmstcGxpc3QNCgkJCQkJOmRlc2NyaXB0aW9uKSBsaW5r KSkpKQ0KDQoJOzsgU3RvcmUgYSBsaW5rIGZyb20gYSBzb3VyY2UgY29kZSBidWZmZXINCgkoKG9y Zy1zcmMtZWRpdC1idWZmZXItcCkNCgkgKGxldCAobGFiZWwgZ2MpDQoJICAgKHdoaWxlIChvciAo bm90IGxhYmVsKQ0KCQkgICAgICAoc2F2ZS1leGN1cnNpb24NCgkJCShzYXZlLXJlc3RyaWN0aW9u DQoJCQkgICh3aWRlbikNCgkJCSAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCgkJCSAgKHJlLXNl YXJjaC1mb3J3YXJkDQoJCQkgICAocmVnZXhwLXF1b3RlIChmb3JtYXQgb3JnLWNvZGVyZWYtbGFi ZWwtZm9ybWF0IGxhYmVsKSkNCgkJCSAgIG5pbCB0KSkpKQ0KCSAgICAgKHdoZW4gbGFiZWwgKG1l c3NhZ2UgIkxhYmVsIGV4aXN0cyBhbHJlYWR5IikgKHNpdC1mb3IgMikpDQoJICAgICAoc2V0cSBs YWJlbCAocmVhZC1zdHJpbmcgIkNvZGUgbGluZSBsYWJlbDogIiBsYWJlbCkpKQ0KCSAgIChlbmQt b2YtbGluZSAxKQ0KCSAgIChzZXRxIGxpbmsgKGZvcm1hdCBvcmctY29kZXJlZi1sYWJlbC1mb3Jt YXQgbGFiZWwpKQ0KCSAgIChzZXRxIGdjICgtIDc5IChsZW5ndGggbGluaykpKQ0KCSAgIChpZiAo PCAoY3VycmVudC1jb2x1bW4pIGdjKSAob3JnLW1vdmUtdG8tY29sdW1uIGdjIHQpIChpbnNlcnQg IiAiKSkNCgkgICAoaW5zZXJ0IGxpbmspDQoJICAgKHNldHEgbGluayAoY29uY2F0ICIoIiBsYWJl bCAiKSIpIGRlc2MgbmlsKSkpDQoNCgk7OyBXZSBhcmUgaW4gdGhlIGFnZW5kYSwgbGluayB0byBy ZWZlcmVuY2VkIGxvY2F0aW9uDQoJKChlcXVhbCAob3JnLWJvdW5kLWFuZC10cnVlLXAgb3JnLWFn ZW5kYS1idWZmZXItbmFtZSkgKGJ1ZmZlci1uYW1lKSkNCgkgKGxldCAoKG0gKG9yIChnZXQtdGV4 dC1wcm9wZXJ0eSAocG9pbnQpICdvcmctaGQtbWFya2VyKQ0KCQkgICAgICAoZ2V0LXRleHQtcHJv cGVydHkgKHBvaW50KSAnb3JnLW1hcmtlcikpKSkNCgkgICAod2hlbiBtDQoJICAgICAob3JnLXdp dGgtcG9pbnQtYXQgbQ0KCSAgICAgICAoc2V0cSBhZ2VuZGEtbGluaw0KCQkgICAgIChpZiAob3Jn LWNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkNCgkJCSAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdv cmctc3RvcmUtbGluaykNCgkJICAgICAgIChvcmctc3RvcmUtbGluayBuaWwpKSkpKSkpDQoNCgko KGVxIG1ham9yLW1vZGUgJ2NhbGVuZGFyLW1vZGUpDQoJIChsZXQgKChjZCAoY2FsZW5kYXItY3Vy c29yLXRvLWRhdGUpKSkNCgkgICAoc2V0cSBsaW5rDQoJCSAoZm9ybWF0LXRpbWUtc3RyaW5nDQoJ CSAgKGNhciBvcmctdGltZS1zdGFtcC1mb3JtYXRzKQ0KCQkgIChhcHBseSAnZW5jb2RlLXRpbWUN CgkJCSAobGlzdCAwIDAgMCAobnRoIDEgY2QpIChudGggMCBjZCkgKG50aCAyIGNkKQ0KCQkJICAg ICAgIG5pbCBuaWwgbmlsKSkpKQ0KCSAgIChvcmctc3RvcmUtbGluay1wcm9wcyA6dHlwZSAiY2Fs ZW5kYXIiIDpkYXRlIGNkKSkpDQoNCgkoKGVxIG1ham9yLW1vZGUgJ2hlbHAtbW9kZSkNCgkgKHNl dHEgbGluayAoY29uY2F0ICJoZWxwOiIgKHNhdmUtZXhjdXJzaW9uDQoJCQkJICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWluKSkNCgkJCQkgICAgICAobG9va2luZy1hdCAiXlteIF0rIikNCgkJCQkg ICAgICAobWF0Y2gtc3RyaW5nIDApKSkpDQoJIChvcmctc3RvcmUtbGluay1wcm9wcyA6dHlwZSAi aGVscCIpKQ0KDQoJKChlcSBtYWpvci1tb2RlICd3My1tb2RlKQ0KCSAoc2V0cSBjcGx0eHQgKGlm IChhbmQgKGJ1ZmZlci1uYW1lKQ0KCQkJICAgICAgIChub3QgKHN0cmluZy1tYXRjaCAiVW50aXRs ZWQiIChidWZmZXItbmFtZSkpKSkNCgkJCSAgKGJ1ZmZlci1uYW1lKQ0KCQkJKHVybC12aWV3LXVy bCB0KSkNCgkgICAgICAgbGluayAodXJsLXZpZXctdXJsIHQpKQ0KCSAob3JnLXN0b3JlLWxpbmst cHJvcHMgOnR5cGUgInczIiA6dXJsICh1cmwtdmlldy11cmwgdCkpKQ0KDQoJKChlcSBtYWpvci1t b2RlICdpbWFnZS1tb2RlKQ0KCSAoc2V0cSBjcGx0eHQgKGNvbmNhdCAiZmlsZToiDQoJCQkgICAg ICAoYWJicmV2aWF0ZS1maWxlLW5hbWUgYnVmZmVyLWZpbGUtbmFtZSkpDQoJICAgICAgIGxpbmsg Y3BsdHh0KQ0KCSAob3JnLXN0b3JlLWxpbmstcHJvcHMgOnR5cGUgImltYWdlIiA6ZmlsZSBidWZm ZXItZmlsZS1uYW1lKSkNCg0KCTs7IEluIGRpcmVkLCBzdG9yZSBhIGxpbmsgdG8gdGhlIGZpbGUg b2YgdGhlIGN1cnJlbnQgbGluZQ0KCSgoZXEgbWFqb3ItbW9kZSAnZGlyZWQtbW9kZSkNCgkgKGxl dCAoKGZpbGUgKGRpcmVkLWdldC1maWxlbmFtZSBuaWwgdCkpKQ0KCSAgIChzZXRxIGZpbGUgKGlm IGZpbGUNCgkJCSAgKGFiYnJldmlhdGUtZmlsZS1uYW1lDQoJCQkgICAoZXhwYW5kLWZpbGUtbmFt ZSAoZGlyZWQtZ2V0LWZpbGVuYW1lIG5pbCB0KSkpDQoJCQk7OyBvdGhlcndpc2UsIG5vIGZpbGUg c28gdXNlIGN1cnJlbnQgZGlyZWN0b3J5Lg0KCQkJZGVmYXVsdC1kaXJlY3RvcnkpKQ0KCSAgIChz ZXRxIGNwbHR4dCAoY29uY2F0ICJmaWxlOiIgZmlsZSkNCgkJIGxpbmsgY3BsdHh0KSkpDQoNCgko KHNldHEgc2VhcmNoIChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2Vzcw0KCQkgICAgICAg J29yZy1jcmVhdGUtZmlsZS1zZWFyY2gtZnVuY3Rpb25zKSkNCgkgKHNldHEgbGluayAoY29uY2F0 ICJmaWxlOiIgKGFiYnJldmlhdGUtZmlsZS1uYW1lIGJ1ZmZlci1maWxlLW5hbWUpDQoJCQkgICAg Ijo6IiBzZWFyY2gpKQ0KCSAoc2V0cSBjcGx0eHQgKG9yIGRlc2NyaXB0aW9uIGxpbmspKSkNCg0K CSgoYW5kIChidWZmZXItZmlsZS1uYW1lIChidWZmZXItYmFzZS1idWZmZXIpKSAoZGVyaXZlZC1t b2RlLXAgJ29yZy1tb2RlKSkNCgkgKHNldHEgY3VzdG9tLWlkIChvcmctZW50cnktZ2V0IG5pbCAi Q1VTVE9NX0lEIikpDQoJIChjb25kDQoJICA7OyBTdG9yZSBhIGxpbmsgdXNpbmcgdGhlIHRhcmdl dCBhdCBwb2ludA0KCSAgKChvcmctaW4tcmVnZXhwICJbXjxdPDxcXChbXjw+XStcXCk+PltePl0i IDEpDQoJICAgKHNldHEgY3BsdHh0DQoJCSAoY29uY2F0ICJmaWxlOiINCgkJCSAoYWJicmV2aWF0 ZS1maWxlLW5hbWUNCgkJCSAgKGJ1ZmZlci1maWxlLW5hbWUgKGJ1ZmZlci1iYXNlLWJ1ZmZlcikp KQ0KCQkJICI6OiIgKG1hdGNoLXN0cmluZyAxKSkNCgkJIGxpbmsgY3BsdHh0KSkNCgkgICgoYW5k IChmZWF0dXJlcCAnb3JnLWlkKQ0KCQkob3IgKGVxIG9yZy1pZC1saW5rLXRvLW9yZy11c2UtaWQg dCkNCgkJICAgIChhbmQgKG9yZy1jYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpDQoJCQkgKG9y IChlcSBvcmctaWQtbGluay10by1vcmctdXNlLWlkICdjcmVhdGUtaWYtaW50ZXJhY3RpdmUpDQoJ CQkgICAgIChhbmQgKGVxIG9yZy1pZC1saW5rLXRvLW9yZy11c2UtaWQNCgkJCQkgICAgICAnY3Jl YXRlLWlmLWludGVyYWN0aXZlLWFuZC1uby1jdXN0b20taWQpDQoJCQkJICAobm90IGN1c3RvbS1p ZCkpKSkNCgkJICAgIChhbmQgb3JnLWlkLWxpbmstdG8tb3JnLXVzZS1pZCAob3JnLWVudHJ5LWdl dCBuaWwgIklEIikpKSkNCgkgICA7OyBTdG9yZSBhIGxpbmsgdXNpbmcgdGhlIElEIGF0IHBvaW50 DQoJICAgKHNldHEgbGluayAoY29uZGl0aW9uLWNhc2UgbmlsDQoJCQkgIChwcm9nMSAob3JnLWlk LXN0b3JlLWxpbmspDQoJCQkgICAgKHNldHEgZGVzYyAob3IgKHBsaXN0LWdldCBvcmctc3RvcmUt bGluay1wbGlzdA0KCQkJCQkJICAgICAgOmRlc2NyaXB0aW9uKQ0KCQkJCQkgICAiIikpKQ0KCQkJ KGVycm9yDQoJCQkgOzsgUHJvYmFibHkgYmVmb3JlIGZpcnN0IGhlYWRsaW5lLCBsaW5rIG9ubHkg dG8gZmlsZQ0KCQkJIChjb25jYXQgImZpbGU6Ig0KCQkJCSAoYWJicmV2aWF0ZS1maWxlLW5hbWUN CgkJCQkgIChidWZmZXItZmlsZS1uYW1lIChidWZmZXItYmFzZS1idWZmZXIpKSkpKSkpKQ0KCSAg KHQNCgkgICA7OyBKdXN0IGxpbmsgdG8gY3VycmVudCBoZWFkbGluZQ0KCSAgIChzZXRxIGNwbHR4 dCAoY29uY2F0ICJmaWxlOiINCgkJCQkoYWJicmV2aWF0ZS1maWxlLW5hbWUNCgkJCQkgKGJ1ZmZl ci1maWxlLW5hbWUgKGJ1ZmZlci1iYXNlLWJ1ZmZlcikpKSkpDQoJICAgOzsgQWRkIGEgY29udGV4 dCBzZWFyY2ggc3RyaW5nDQoJICAgKHdoZW4gKG9yZy14b3Igb3JnLWNvbnRleHQtaW4tZmlsZS1s aW5rcyBhcmcpDQoJICAgICAobGV0KiAoKGVlIChvcmctZWxlbWVudC1hdC1wb2ludCkpDQoJCSAg ICAoZXQgKG9yZy1lbGVtZW50LXR5cGUgZWUpKQ0KCQkgICAgKGV2IChwbGlzdC1nZXQgKGNhZHIg ZWUpIDp2YWx1ZSkpDQoJCSAgICAoZWsgKHBsaXN0LWdldCAoY2FkciBlZSkgOmtleSkpDQoJCSAg ICAoZW9rIChhbmQgKHN0cmluZ3AgZWspIChzdHJpbmctbWF0Y2ggIm5hbWUiIGVrKSkpKQ0KCSAg ICAgICAoc2V0cSB0eHQgKGNvbmQNCgkJCSAgKChvcmctYXQtaGVhZGluZy1wKSBuaWwpDQoJCQkg ICgoYW5kIChlcSBldCAna2V5d29yZCkgZW9rKSBldikNCgkJCSAgKChvcmctcmVnaW9uLWFjdGl2 ZS1wKQ0KCQkJICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHJlZ2lvbi1iZWdpbm5pbmcpIChyZWdpb24t ZW5kKSkpKSkNCgkgICAgICAgKHdoZW4gKG9yIChudWxsIHR4dCkgKHN0cmluZy1tYXRjaCAiXFxT LSIgdHh0KSkNCgkJIChzZXRxIGNwbHR4dA0KCQkgICAgICAgKGNvbmNhdCBjcGx0eHQgIjo6Ig0K CQkJICAgICAgIChjb25kaXRpb24tY2FzZSBuaWwNCgkJCQkgICAob3JnLW1ha2Utb3JnLWhlYWRp bmctc2VhcmNoLXN0cmluZyB0eHQpDQoJCQkJIChlcnJvciAiIikpKQ0KCQkgICAgICAgZGVzYyAo b3IgKGFuZCAoZXEgZXQgJ2tleXdvcmQpIGVvayBldikNCgkJCQkobnRoIDQgKGlnbm9yZS1lcnJv cnMgKG9yZy1oZWFkaW5nLWNvbXBvbmVudHMpKSkNCgkJCQkiTk9ORSIpKSkpKQ0KCSAgIChpZiAo c3RyaW5nLW1hdGNoICI6OlxcJyIgY3BsdHh0KQ0KCSAgICAgICAoc2V0cSBjcGx0eHQgKHN1YnN0 cmluZyBjcGx0eHQgMCAtMikpKQ0KCSAgIChzZXRxIGxpbmsgY3BsdHh0KSkpKQ0KDQoJKChidWZm ZXItZmlsZS1uYW1lIChidWZmZXItYmFzZS1idWZmZXIpKQ0KCSA7OyBKdXN0IGxpbmsgdG8gdGhp cyBmaWxlIGhlcmUuDQoJIChzZXRxIGNwbHR4dCAoY29uY2F0ICJmaWxlOiINCgkJCSAgICAgIChh YmJyZXZpYXRlLWZpbGUtbmFtZQ0KCQkJICAgICAgIChidWZmZXItZmlsZS1uYW1lIChidWZmZXIt YmFzZS1idWZmZXIpKSkpKQ0KCSA7OyBBZGQgYSBjb250ZXh0IHN0cmluZy4NCgkgKHdoZW4gKG9y Zy14b3Igb3JnLWNvbnRleHQtaW4tZmlsZS1saW5rcyBhcmcpDQoJICAgKHNldHEgdHh0IChpZiAo b3JnLXJlZ2lvbi1hY3RpdmUtcCkNCgkJCSAoYnVmZmVyLXN1YnN0cmluZyAocmVnaW9uLWJlZ2lu bmluZykgKHJlZ2lvbi1lbmQpKQ0KCQkgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LWF0 LWJvbCkgKHBvaW50LWF0LWVvbCkpKSkNCgkgICA7OyBPbmx5IHVzZSBzZWFyY2ggb3B0aW9uIGlm IHRoZXJlIGlzIHNvbWUgdGV4dC4NCgkgICAod2hlbiAoc3RyaW5nLW1hdGNoICJcXFMtIiB0eHQp DQoJICAgICAoc2V0cSBjcGx0eHQNCgkJICAgKGNvbmNhdCBjcGx0eHQgIjo6IiAob3JnLW1ha2Ut b3JnLWhlYWRpbmctc2VhcmNoLXN0cmluZyB0eHQpKQ0KCQkgICBkZXNjICJOT05FIikpKQ0KCSAo c2V0cSBsaW5rIGNwbHR4dCkpDQoNCgkoKG9yZy1jYWxsZWQtaW50ZXJhY3RpdmVseS1wICdpbnRl cmFjdGl2ZSkNCgkgKHVzZXItZXJyb3IgIk5vIG1ldGhvZCBmb3Igc3RvcmluZyBhIGxpbmsgZnJv bSB0aGlzIGJ1ZmZlciIpKQ0KDQoJKHQgKHNldHEgbGluayBuaWwpKSkNCg0KICAgICAgIDs7IFdl J3JlIGRvbmUgc2V0dGluZyBsaW5rIGFuZCBkZXNjLCBjbGVhbiB1cA0KICAgICAgIChpZiAoY29u c3AgbGluaykgKHNldHEgY3BsdHh0IChjYXIgbGluaykgbGluayAoY2RyIGxpbmspKSkNCiAgICAg ICAoc2V0cSBsaW5rIChvciBsaW5rIGNwbHR4dCkNCgkgICAgIGRlc2MgKG9yIGRlc2MgY3BsdHh0 KSkNCiAgICAgICAoY29uZCAoKGVxdWFsIGRlc2MgIk5PTkUiKSAoc2V0cSBkZXNjIG5pbCkpDQoJ ICAgICAoKGFuZCBkZXNjIChzdHJpbmctbWF0Y2ggb3JnLWJyYWNrZXQtbGluay1hbmFseXRpYy1y ZWdleHAgZGVzYykpDQoJICAgICAgKGxldCAoKGQwIChtYXRjaC1zdHJpbmcgMyBkZXNjKSkNCgkJ ICAgIChwMCAobWF0Y2gtc3RyaW5nIDUgZGVzYykpKQ0KCQkoc2V0cSBkZXNjDQoJCSAgICAgIChy ZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcNCgkJICAgICAgIG9yZy1icmFja2V0LWxpbmstcmVnZXhw DQoJCSAgICAgICAoY29uY2F0IChvciBwMCBkMCkNCgkJCSAgICAgICAoaWYgKGVxdWFsIChsZW5n dGggKG1hdGNoLXN0cmluZyAwIGRlc2MpKQ0KCQkJCQkgIChsZW5ndGggZGVzYykpICIqIiAiIikp IGRlc2MpKSkpKQ0KDQogICAgICAgOzsgUmV0dXJuIHRoZSBsaW5rDQogICAgICAgKGlmIChub3Qg KGFuZCAob3IgKG9yZy1jYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpDQoJCQkgZXhlY3V0aW5n LWtiZC1tYWNybykgbGluaykpDQoJICAgKG9yIGFnZW5kYS1saW5rIChhbmQgbGluayAob3JnLW1h a2UtbGluay1zdHJpbmcgbGluayBkZXNjKSkpDQoJIChwdXNoIChsaXN0IGxpbmsgZGVzYykgb3Jn LXN0b3JlZC1saW5rcykNCgkgKG1lc3NhZ2UgIlN0b3JlZDogJXMiIChvciBkZXNjIGxpbmspKQ0K CSAod2hlbiBjdXN0b20taWQNCgkgICAoc2V0cSBsaW5rIChjb25jYXQgImZpbGU6IiAoYWJicmV2 aWF0ZS1maWxlLW5hbWUNCgkJCQkgICAgICAgKGJ1ZmZlci1maWxlLW5hbWUpKSAiOjojIiBjdXN0 b20taWQpKQ0KCSAgIChwdXNoIChsaXN0IGxpbmsgZGVzYykgb3JnLXN0b3JlZC1saW5rcykpDQoJ IChjYXIgb3JnLXN0b3JlZC1saW5rcykpKSkpKQ0KDQooZGVmdW4gb3JnLXN0b3JlLWxpbmstcHJv cHMgKCZyZXN0IHBsaXN0KQ0KICAiU3RvcmUgbGluayBwcm9wZXJ0aWVzLCBleHRyYWN0IG5hbWVz IGFuZCBhZGRyZXNzZXMuIg0KICAobGV0ICh4IGFkcikNCiAgICAod2hlbiAoc2V0cSB4IChwbGlz dC1nZXQgcGxpc3QgOmZyb20pKQ0KICAgICAgKHNldHEgYWRyIChtYWlsLWV4dHJhY3QtYWRkcmVz cy1jb21wb25lbnRzIHgpKQ0KICAgICAgKHNldHEgcGxpc3QgKHBsaXN0LXB1dCBwbGlzdCA6ZnJv bW5hbWUgKGNhciBhZHIpKSkNCiAgICAgIChzZXRxIHBsaXN0IChwbGlzdC1wdXQgcGxpc3QgOmZy b21hZGRyZXNzIChudGggMSBhZHIpKSkpDQogICAgKHdoZW4gKHNldHEgeCAocGxpc3QtZ2V0IHBs aXN0IDp0bykpDQogICAgICAoc2V0cSBhZHIgKG1haWwtZXh0cmFjdC1hZGRyZXNzLWNvbXBvbmVu dHMgeCkpDQogICAgICAoc2V0cSBwbGlzdCAocGxpc3QtcHV0IHBsaXN0IDp0b25hbWUgKGNhciBh ZHIpKSkNCiAgICAgIChzZXRxIHBsaXN0IChwbGlzdC1wdXQgcGxpc3QgOnRvYWRkcmVzcyAobnRo IDEgYWRyKSkpKSkNCiAgKGxldCAoKGZyb20gKHBsaXN0LWdldCBwbGlzdCA6ZnJvbSkpDQoJKHRv IChwbGlzdC1nZXQgcGxpc3QgOnRvKSkpDQogICAgKHdoZW4gKGFuZCBmcm9tIHRvIG9yZy1mcm9t LWlzLXVzZXItcmVnZXhwKQ0KICAgICAgKHNldHEgcGxpc3QNCgkgICAgKHBsaXN0LXB1dCBwbGlz dCA6ZnJvbXRvDQoJCSAgICAgICAoaWYgKHN0cmluZy1tYXRjaCBvcmctZnJvbS1pcy11c2VyLXJl Z2V4cCBmcm9tKQ0KCQkJICAgKGNvbmNhdCAidG8gJXQiKQ0KCQkJIChjb25jYXQgImZyb20gJWYi KSkpKSkpDQogIChzZXRxIG9yZy1zdG9yZS1saW5rLXBsaXN0IHBsaXN0KSkNCg0KKGRlZnVuIG9y Zy1hZGQtbGluay1wcm9wcyAoJnJlc3QgcGxpc3QpDQogICJBZGQgdGhlc2UgcHJvcGVydGllcyB0 byB0aGUgbGluayBwcm9wZXJ0eSBsaXN0LiINCiAgKGxldCAoa2V5IHZhbHVlKQ0KICAgICh3aGls ZSBwbGlzdA0KICAgICAgKHNldHEga2V5IChwb3AgcGxpc3QpIHZhbHVlIChwb3AgcGxpc3QpKQ0K ICAgICAgKHNldHEgb3JnLXN0b3JlLWxpbmstcGxpc3QNCgkgICAgKHBsaXN0LXB1dCBvcmctc3Rv cmUtbGluay1wbGlzdCBrZXkgdmFsdWUpKSkpKQ0KDQooZGVmdW4gb3JnLWVtYWlsLWxpbmstZGVz Y3JpcHRpb24gKCZvcHRpb25hbCBmbXQpDQogICJSZXR1cm4gdGhlIGRlc2NyaXB0aW9uIHBhcnQg b2YgYW4gZW1haWwgbGluay4NClRoaXMgdGFrZXMgaW5mb3JtYXRpb24gZnJvbSBgb3JnLXN0b3Jl LWxpbmstcGxpc3QnIGFuZCBmb3JtYXRzIGl0DQphY2NvcmRpbmcgdG8gRk1UIChkZWZhdWx0IGZy b20gYG9yZy1lbWFpbC1saW5rLWRlc2NyaXB0aW9uLWZvcm1hdCcpLiINCiAgKHNldHEgZm10IChv ciBmbXQgb3JnLWVtYWlsLWxpbmstZGVzY3JpcHRpb24tZm9ybWF0KSkNCiAgKGxldCogKChwIG9y Zy1zdG9yZS1saW5rLXBsaXN0KQ0KCSAodG8gKHBsaXN0LWdldCBwIDp0b2FkZHJlc3MpKQ0KCSAo ZnJvbSAocGxpc3QtZ2V0IHAgOmZyb21hZGRyZXNzKSkNCgkgKHRhYmxlDQoJICAobGlzdA0KCSAg IChjb25zICIlYyIgKHBsaXN0LWdldCBwIDpmcm9tdG8pKQ0KCSAgIChjb25zICIlRiIgKHBsaXN0 LWdldCBwIDpmcm9tKSkNCgkgICAoY29ucyAiJWYiIChvciAocGxpc3QtZ2V0IHAgOmZyb21uYW1l KSAocGxpc3QtZ2V0IHAgOmZyb21hZGRyZXNzKSAiPyIpKQ0KCSAgIChjb25zICIlVCIgKHBsaXN0 LWdldCBwIDp0bykpDQoJICAgKGNvbnMgIiV0IiAob3IgKHBsaXN0LWdldCBwIDp0b25hbWUpIChw bGlzdC1nZXQgcCA6dG9hZGRyZXNzKSAiPyIpKQ0KCSAgIChjb25zICIlcyIgKHBsaXN0LWdldCBw IDpzdWJqZWN0KSkNCgkgICAoY29ucyAiJWQiIChwbGlzdC1nZXQgcCA6ZGF0ZSkpDQoJICAgKGNv bnMgIiVtIiAocGxpc3QtZ2V0IHAgOm1lc3NhZ2UtaWQpKSkpKQ0KICAgICh3aGVuIChzdHJpbmct bWF0Y2ggIiVjIiBmbXQpDQogICAgICA7OyBDaGVjayBpZiB0aGUgdXNlciB3cm90ZSB0aGlzIG1l c3NhZ2UNCiAgICAgIChpZiAoYW5kIG9yZy1mcm9tLWlzLXVzZXItcmVnZXhwIGZyb20gdG8NCgkg ICAgICAgKHNhdmUtbWF0Y2gtZGF0YSAoc3RyaW5nLW1hdGNoIG9yZy1mcm9tLWlzLXVzZXItcmVn ZXhwIGZyb20pKSkNCgkgIChzZXRxIGZtdCAocmVwbGFjZS1tYXRjaCAidG8gJXQiIHQgdCBmbXQp KQ0KCShzZXRxIGZtdCAocmVwbGFjZS1tYXRjaCAiZnJvbSAlZiIgdCB0IGZtdCkpKSkNCiAgICAo b3JnLXJlcGxhY2UtZXNjYXBlcyBmbXQgdGFibGUpKSkNCg0KKGRlZnVuIG9yZy1tYWtlLW9yZy1o ZWFkaW5nLXNlYXJjaC1zdHJpbmcgKCZvcHRpb25hbCBzdHJpbmcpDQogICJNYWtlIHNlYXJjaCBz dHJpbmcgZm9yIHRoZSBjdXJyZW50IGhlYWRsaW5lIG9yIFNUUklORy4iDQogIChsZXQgKChzIChv ciBzdHJpbmcNCgkgICAgICAgKGFuZCAoZGVyaXZlZC1tb2RlLXAgJ29yZy1tb2RlKQ0KCQkgICAg KHNhdmUtZXhjdXJzaW9uDQoJCSAgICAgIChvcmctYmFjay10by1oZWFkaW5nIHQpDQoJCSAgICAg IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cmF3LXZhbHVlIChvcmctZWxlbWVudC1hdC1wb2ludCkp KSkpKQ0KCShsaW5lcyBvcmctY29udGV4dC1pbi1maWxlLWxpbmtzKSkNCiAgICAob3Igc3RyaW5n IChzZXRxIHMgKGNvbmNhdCAiKiIgcykpKSAgOyBBZGQgKiBmb3IgaGVhZGxpbmVzDQogICAgKHNl dHEgcyAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nICJcXFtbMC05XSslXFxdXFx8XFxbWzAtOV0r L1swLTldK1xcXSIgIiIgcykpDQogICAgKHdoZW4gKGFuZCBzdHJpbmcgKGludGVnZXJwIGxpbmVz KSAoPiBsaW5lcyAwKSkNCiAgICAgIChsZXQgKChzbGluZXMgKG9yZy1zcGxpdC1zdHJpbmcgcyAi XG4iKSkpDQoJKHdoZW4gKDwgbGluZXMgKGxlbmd0aCBzbGluZXMpKQ0KCSAgKHNldHEgcyAobWFw Y29uY2F0DQoJCSAgICdpZGVudGl0eQ0KCQkgICAocmV2ZXJzZSAobnRoY2RyICgtIChsZW5ndGgg c2xpbmVzKSBsaW5lcykNCgkJCQkgICAgKHJldmVyc2Ugc2xpbmVzKSkpICJcbiIpKSkpKQ0KICAg IChtYXBjb25jYXQgJ2lkZW50aXR5IChvcmctc3BsaXQtc3RyaW5nIHMgIlsgXHRdKyIpICIgIikp KQ0KDQooZGVmdW4gb3JnLW1ha2UtbGluay1zdHJpbmcgKGxpbmsgJm9wdGlvbmFsIGRlc2NyaXB0 aW9uKQ0KICAiTWFrZSBhIGxpbmsgd2l0aCBicmFja2V0cywgY29uc2lzdGluZyBvZiBMSU5LIGFu ZCBERVNDUklQVElPTi4iDQogICh1bmxlc3MgKHN0cmluZy1tYXRjaCAiXFxTLSIgbGluaykNCiAg ICAoZXJyb3IgIkVtcHR5IGxpbmsiKSkNCiAgKHdoZW4gKGFuZCBkZXNjcmlwdGlvbg0KCSAgICAg KHN0cmluZ3AgZGVzY3JpcHRpb24pDQoJICAgICAobm90IChzdHJpbmctbWF0Y2ggIlxcUy0iIGRl c2NyaXB0aW9uKSkpDQogICAgKHNldHEgZGVzY3JpcHRpb24gbmlsKSkNCiAgKHdoZW4gKHN0cmlu Z3AgZGVzY3JpcHRpb24pDQogICAgOzsgUmVtb3ZlIGJyYWNrZXRzIGZyb20gdGhlIGRlc2NyaXB0 aW9uLCB0aGV5IGFyZSBmYXRhbC4NCiAgICAod2hpbGUgKHN0cmluZy1tYXRjaCAiXFxbIiBkZXNj cmlwdGlvbikNCiAgICAgIChzZXRxIGRlc2NyaXB0aW9uIChyZXBsYWNlLW1hdGNoICJ7IiB0IHQg ZGVzY3JpcHRpb24pKSkNCiAgICAod2hpbGUgKHN0cmluZy1tYXRjaCAiXFxdIiBkZXNjcmlwdGlv bikNCiAgICAgIChzZXRxIGRlc2NyaXB0aW9uIChyZXBsYWNlLW1hdGNoICJ9IiB0IHQgZGVzY3Jp cHRpb24pKSkpDQogICh3aGVuIChlcXVhbCBsaW5rIGRlc2NyaXB0aW9uKQ0KICAgIDs7IE5vIGRl c2NyaXB0aW9uIG5lZWRlZCwgaXQgaXMgaWRlbnRpY2FsDQogICAgKHNldHEgZGVzY3JpcHRpb24g bmlsKSkNCiAgKHdoZW4gKGFuZCAobm90IGRlc2NyaXB0aW9uKQ0KCSAgICAgKG5vdCAoc3RyaW5n LW1hdGNoIChvcmctaW1hZ2UtZmlsZS1uYW1lLXJlZ2V4cCkgbGluaykpDQoJICAgICAobm90IChl cXVhbCBsaW5rIChvcmctbGluay1lc2NhcGUgbGluaykpKSkNCiAgICAoc2V0cSBkZXNjcmlwdGlv biAob3JnLWV4dHJhY3QtYXR0cmlidXRlcyBsaW5rKSkpDQogIChzZXRxIGxpbmsNCgkoY29uZCAo KHN0cmluZy1tYXRjaCAob3JnLWltYWdlLWZpbGUtbmFtZS1yZWdleHApIGxpbmspIGxpbmspDQoJ ICAgICAgKChzdHJpbmctbWF0Y2ggb3JnLWxpbmstdHlwZXMtcmUgbGluaykNCgkgICAgICAgKGNv bmNhdCAobWF0Y2gtc3RyaW5nIDEgbGluaykNCgkJICAgICAgIChvcmctbGluay1lc2NhcGUgKHN1 YnN0cmluZyBsaW5rIChtYXRjaC1lbmQgMSkpKSkpDQoJICAgICAgKHQgKG9yZy1saW5rLWVzY2Fw ZSBsaW5rKSkpKQ0KICAoY29uY2F0ICJbWyIgbGluayAiXSINCgkgIChpZiBkZXNjcmlwdGlvbiAo Y29uY2F0ICJbIiBkZXNjcmlwdGlvbiAiXSIpICIiKQ0KCSAgIl0iKSkNCg0KKGRlZmNvbnN0IG9y Zy1saW5rLWVzY2FwZS1jaGFycw0KICAnKD9cID9cWyA/XF0gP1w7ID9cPSA/XCspDQogICJMaXN0 IG9mIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgYmUgZXNjYXBlZCBpbiBsaW5rLg0KVGhpcyBpcyB0 aGUgbGlzdCB0aGF0IGlzIHVzZWQgZm9yIGludGVybmFsIHB1cnBvc2VzLiIpDQoNCihkZWZjb25z dCBvcmctbGluay1lc2NhcGUtY2hhcnMtYnJvd3Nlcg0KICAnKD9cICA/XCIpDQogICJMaXN0IG9m IGVzY2FwZXMgZm9yIGNoYXJhY3RlcnMgdGhhdCBhcmUgcHJvYmxlbWF0aWMgaW4gbGlua3MuDQpU aGlzIGlzIHRoZSBsaXN0IHRoYXQgaXMgdXNlZCBiZWZvcmUgaGFuZGluZyBvdmVyIHRvIHRoZSBi cm93c2VyLiIpDQoNCihkZWZ1biBvcmctbGluay1lc2NhcGUgKHRleHQgJm9wdGlvbmFsIHRhYmxl IG1lcmdlKQ0KICAiUmV0dXJuIHBlcmNlbnQgZXNjYXBlZCByZXByZXNlbnRhdGlvbiBvZiBURVhU Lg0KVEVYVCBpcyBhIHN0cmluZyB3aXRoIHRoZSB0ZXh0IHRvIGVzY2FwZS4NCk9wdGlvbmFsIGFy Z3VtZW50IFRBQkxFIGlzIGEgbGlzdCB3aXRoIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgYmUNCmVz Y2FwZWQuICBXaGVuIG5pbCwgYG9yZy1saW5rLWVzY2FwZS1jaGFycycgaXMgdXNlZC4NCklmIG9w dGlvbmFsIGFyZ3VtZW50IE1FUkdFIGlzIHNldCwgbWVyZ2UgVEFCTEUgaW50bw0KYG9yZy1saW5r LWVzY2FwZS1jaGFycycuIg0KICAoY29uZA0KICAgKChhbmQgdGFibGUgbWVyZ2UpDQogICAgKG1h cGMgKGxhbWJkYSAoZGVmY2hyKQ0KCSAgICAodW5sZXNzIChtZW1iZXIgZGVmY2hyIHRhYmxlKQ0K CSAgICAgIChzZXRxIHRhYmxlIChjb25zIGRlZmNociB0YWJsZSkpKSkgb3JnLWxpbmstZXNjYXBl LWNoYXJzKSkNCiAgICgobnVsbCB0YWJsZSkNCiAgICAoc2V0cSB0YWJsZSBvcmctbGluay1lc2Nh cGUtY2hhcnMpKSkNCiAgKG1hcGNvbmNhdA0KICAgKGxhbWJkYSAoY2hhcikNCiAgICAgKGlmIChv ciAobWVtYmVyIGNoYXIgdGFibGUpDQoJICAgICAoYW5kIChvciAoPCBjaGFyIDMyKSAoPSBjaGFy IDM3KSAoPiBjaGFyIDEyNikpDQoJCSAgb3JnLXVybC1oZXhpZnktcCkpDQoJIChtYXBjb25jYXQg KGxhbWJkYSAoc2VxdWVuY2UtZWxlbWVudCkNCgkJICAgICAgKGZvcm1hdCAiJSUlLjJYIiBzZXF1 ZW5jZS1lbGVtZW50KSkNCgkJICAgIChvciAoZW5jb2RlLWNvZGluZy1jaGFyIGNoYXIgJ3V0Zi04 KQ0KCQkJKGVycm9yICJVbmFibGUgdG8gcGVyY2VudCBlc2NhcGUgY2hhcmFjdGVyOiAlcyINCgkJ CSAgICAgICAoY2hhci10by1zdHJpbmcgY2hhcikpKSAiIikNCiAgICAgICAoY2hhci10by1zdHJp bmcgY2hhcikpKSB0ZXh0ICIiKSkNCg0KKGRlZnVuIG9yZy1saW5rLXVuZXNjYXBlIChzdHIpDQog ICJVbmhleCBoZXhpZmllZCBVbmljb2RlIHN0cmluZ3MgYXMgcmV0dXJuZWQgZnJvbSB0aGUgSmF2 YVNjcmlwdCBmdW5jdGlvbg0KZW5jb2RlVVJJQ29tcG9uZW50LiAgRS5nLiBgJUMzJUI2JyBpcyB0 aGUgZ2VybWFuIG8tVW1sYXV0LiINCiAgKHVubGVzcyAoYW5kIChudWxsIHN0cikgKHN0cmluZz0g IiIgc3RyKSkNCiAgICAobGV0ICgocG9zIDApIChjYXNlLWZvbGQtc2VhcmNoIHQpIHVuaGV4ZWQp DQogICAgICAod2hpbGUgKHNldHEgcG9zIChzdHJpbmctbWF0Y2ggIlxcKCVbMC05YS1mXVswLTlh LWZdXFwpKyIgc3RyIHBvcykpDQoJKHNldHEgdW5oZXhlZCAob3JnLWxpbmstdW5lc2NhcGUtY29t cG91bmQgKG1hdGNoLXN0cmluZyAwIHN0cikpKQ0KCShzZXRxIHN0ciAocmVwbGFjZS1tYXRjaCB1 bmhleGVkIHQgdCBzdHIpKQ0KCShzZXRxIHBvcyAoKyBwb3MgKGxlbmd0aCB1bmhleGVkKSkpKSkp DQogIHN0cikNCg0KKGRlZnVuIG9yZy1saW5rLXVuZXNjYXBlLWNvbXBvdW5kIChoZXgpDQogICJV bmhleGlmeSBVbmljb2RlIGhleC1jaGFycy4gIEUuZy4gYCVDMyVCNicgaXMgdGhlIEdlcm1hbiBv LVVtbGF1dC4NCk5vdGU6IHRoaXMgZnVuY3Rpb24gYWxzbyBkZWNvZGVzIHNpbmdsZSBieXRlIGVu Y29kaW5ncyBsaWtlDQpgJUUxJyAoYS1hY3V0ZSkgaWYgbm90IGZvbGxvd2VkIGJ5IGFub3RoZXIg YCVbQS1GMC05XXsyfScgZ3JvdXAuIg0KICAoc2F2ZS1tYXRjaC1kYXRhDQogICAgKGxldCogKChi eXRlcyAoY2RyIChzcGxpdC1zdHJpbmcgaGV4ICIlIikpKQ0KCSAgIChyZXQgIiIpDQoJICAgKGVh dCAwKQ0KCSAgIChzdW0gMCkpDQogICAgICAod2hpbGUgYnl0ZXMNCgkobGV0KiAoKHZhbCAoc3Ry aW5nLXRvLW51bWJlciAocG9wIGJ5dGVzKSAxNikpDQoJICAgICAgIChzaGlmdC14b3INCgkJKGlm ICg9IDAgZWF0KQ0KCQkgICAgKGNvbmQNCgkJICAgICAoKD49IHZhbCAyNTIpIChjb25zIDYgMjUy KSkNCgkJICAgICAoKD49IHZhbCAyNDgpIChjb25zIDUgMjQ4KSkNCgkJICAgICAoKD49IHZhbCAy NDApIChjb25zIDQgMjQwKSkNCgkJICAgICAoKD49IHZhbCAyMjQpIChjb25zIDMgMjI0KSkNCgkJ ICAgICAoKD49IHZhbCAxOTIpIChjb25zIDIgMTkyKSkNCgkJICAgICAodCAoY29ucyAwIDApKSkN CgkJICAoY29ucyA2IDEyOCkpKSkNCgkgIChpZiAoPj0gdmFsIDE5MikgKHNldHEgZWF0IChjYXIg c2hpZnQteG9yKSkpDQoJICAoc2V0cSB2YWwgKGxvZ3hvciB2YWwgKGNkciBzaGlmdC14b3IpKSkN CgkgIChzZXRxIHN1bSAoKyAobHNoIHN1bSAoY2FyIHNoaWZ0LXhvcikpIHZhbCkpDQoJICAoaWYg KD4gZWF0IDApIChzZXRxIGVhdCAoLSBlYXQgMSkpKQ0KCSAgKGNvbmQNCgkgICAoKD0gMCBlYXQp CQkJO211bHRpIGJ5dGUNCgkgICAgKHNldHEgcmV0IChjb25jYXQgcmV0IChvcmctY2hhci10by1z dHJpbmcgc3VtKSkpDQoJICAgIChzZXRxIHN1bSAwKSkNCgkgICAoKG5vdCBieXRlcykJCQk7IHNp bmdsZSBieXRlKHMpDQoJICAgIChzZXRxIHJldCAob3JnLWxpbmstdW5lc2NhcGUtc2luZ2xlLWJ5 dGUtc2VxdWVuY2UgaGV4KSkpKQ0KCSAgKSkgOzsgZW5kICh3aGlsZSBieXRlcw0KICAgICAgcmV0 ICkpKQ0KDQooZGVmdW4gb3JnLWxpbmstdW5lc2NhcGUtc2luZ2xlLWJ5dGUtc2VxdWVuY2UgKGhl eCkNCiAgIlVuaGV4aWZ5IGhleC1lbmNvZGVkIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzZXF1ZW5j ZXMuIg0KICAobWFwY29uY2F0IChsYW1iZGEgKGJ5dGUpDQoJICAgICAgIChjaGFyLXRvLXN0cmlu ZyAoc3RyaW5nLXRvLW51bWJlciBieXRlIDE2KSkpDQoJICAgICAoY2RyIChzcGxpdC1zdHJpbmcg aGV4ICIlIikpICIiKSkNCg0KKGRlZnVuIG9yZy14b3IgKGEgYikNCiAgIkV4Y2x1c2l2ZSBvci4i DQogIChpZiBhIChub3QgYikgYikpDQoNCihkZWZ1biBvcmctZml4dXAtbWVzc2FnZS1pZC1mb3It aHR0cCAocykNCiAgIlJlcGxhY2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgbWVzc2FnZSBpZCwg c28gaXQgY2FuIGJlIHVzZWQgaW4gYW4gaHR0cCBxdWVyeS4iDQogICh3aGVuIChzdHJpbmctbWF0 Y2ggIiUiIHMpDQogICAgKHNldHEgcyAobWFwY29uY2F0IChsYW1iZGEgKGMpDQoJCQkgKGlmIChl cSBjID8lKQ0KCQkJICAgICAiJTI1Ig0KCQkJICAgKGNoYXItdG8tc3RyaW5nIGMpKSkNCgkJICAg ICAgIHMgIiIpKSkNCiAgKHdoaWxlIChzdHJpbmctbWF0Y2ggIjwiIHMpDQogICAgKHNldHEgcyAo cmVwbGFjZS1tYXRjaCAiJTNDIiB0IHQgcykpKQ0KICAod2hpbGUgKHN0cmluZy1tYXRjaCAiPiIg cykNCiAgICAoc2V0cSBzIChyZXBsYWNlLW1hdGNoICIlM0UiIHQgdCBzKSkpDQogICh3aGlsZSAo c3RyaW5nLW1hdGNoICJAIiBzKQ0KICAgIChzZXRxIHMgKHJlcGxhY2UtbWF0Y2ggIiU0MCIgdCB0 IHMpKSkNCiAgcykNCg0KKGRlZnVuIG9yZy1saW5rLXByZXR0aWZ5IChsaW5rKQ0KICAiUmV0dXJu IGEgaHVtYW4tcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgTElOSy4NClRoZSBjYXIgb2YgTElO SyBtdXN0IGJlIGEgcmF3IGxpbmsgdGhlIGNkciBvZiBMSU5LIG11c3QgYmUgZWl0aGVyDQphIGxp bmsgZGVzY3JpcHRpb24gb3IgbmlsLiINCiAgKGxldCAoKGRlc2MgKG9yIChjYWRyIGxpbmspICI8 bm8gZGVzY3JpcHRpb24+IikpKQ0KICAgIChjb25jYXQgKGZvcm1hdCAiJS00NXMiIChzdWJzdHJp bmcgZGVzYyAwIChtaW4gKGxlbmd0aCBkZXNjKSA0MCkpKQ0KCSAgICAiPCIgKGNhciBsaW5rKSAi PiIpKSkNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBvcmctaW5zZXJ0LWxpbmstZ2xvYmFsICgp DQogICJJbnNlcnQgYSBsaW5rIGxpa2UgT3JnLW1vZGUgZG9lcy4NClRoaXMgY29tbWFuZCBjYW4g YmUgY2FsbGVkIGluIGFueSBtb2RlIHRvIGluc2VydCBhIGxpbmsgaW4gT3JnLW1vZGUgc3ludGF4 LiINCiAgKGludGVyYWN0aXZlKQ0KICAob3JnLWxvYWQtbW9kdWxlcy1tYXliZSkNCiAgKG9yZy1y dW4tbGlrZS1pbi1vcmctbW9kZSAnb3JnLWluc2VydC1saW5rKSkNCg0KKGRlZnVuIG9yZy1pbnNl cnQtYWxsLWxpbmtzICgmb3B0aW9uYWwga2VlcCkNCiAgIkluc2VydCBhbGwgbGlua3MgaW4gYG9y Zy1zdG9yZWQtbGlua3MnLiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgKGxldCAoKGxpbmtzIChj b3B5LXNlcXVlbmNlIG9yZy1zdG9yZWQtbGlua3MpKSBsKQ0KICAgICh3aGlsZSAoc2V0cSBsIChp ZiBrZWVwIChwb3AgbGlua3MpIChwb3Agb3JnLXN0b3JlZC1saW5rcykpKQ0KICAgICAgKGluc2Vy dCAiLSAiKQ0KICAgICAgKG9yZy1pbnNlcnQtbGluayBuaWwgKGNhciBsKSAob3IgKGNhZHIgbCkg IjxubyBkZXNjcmlwdGlvbj4iKSkNCiAgICAgIChpbnNlcnQgIlxuIikpKSkNCg0KKGRlZnVuIG9y Zy1saW5rLWZvbnRpZnktbGlua3MtdG8tdGhpcy1maWxlICgpDQogICJGb250aWZ5IGxpbmtzIHRv IHRoZSBjdXJyZW50IGZpbGUgaW4gYG9yZy1zdG9yZWQtbGlua3MnLiINCiAgKGxldCAoKGYgKGJ1 ZmZlci1maWxlLW5hbWUpKSBhIGIpDQogICAgKHNldHEgYSAobWFwY2FyIChsYW1iZGEobCkNCgkJ ICAgICAgKGxldCAoKGxsIChjYXIgbCkpKQ0KCQkJKHdoZW4gKGFuZCAoc3RyaW5nLW1hdGNoICJe ZmlsZTpcXCguK1xcKTo6IiBsbCkNCgkJCQkgICAoZXF1YWwgZiAoZXhwYW5kLWZpbGUtbmFtZSAo bWF0Y2gtc3RyaW5nIDEgbGwpKSkpDQoJCQkgIGxsKSkpDQoJCSAgICBvcmctc3RvcmVkLWxpbmtz KSkNCiAgICAod2hlbiAoZmVhdHVyZXAgJ29yZy1pZCkNCiAgICAgIChzZXRxIGIgKG1hcGNhciAo bGFtYmRhKGwpDQoJCQkobGV0ICgobGwgKGNhciBsKSkpDQoJCQkgICh3aGVuIChhbmQgKHN0cmlu Zy1tYXRjaCAiXmlkOlxcKC4rXFwpJCIgbGwpDQoJCQkJICAgICAoZXF1YWwgZiAoZXhwYW5kLWZp bGUtbmFtZQ0KCQkJCQkgICAgICAgKG9yIChvcmctaWQtZmluZC1pZC1maWxlDQoJCQkJCQkgICAg KG1hdGNoLXN0cmluZyAxIGxsKSkgIiIpKSkpDQoJCQkgICAgbGwpKSkNCgkJICAgICAgb3JnLXN0 b3JlZC1saW5rcykpKQ0KICAgIChtYXBjYXIgKGxhbWJkYShsKQ0KCSAgICAgIChwdXQtdGV4dC1w cm9wZXJ0eSAwIChsZW5ndGggbCkgJ2ZhY2UgJ2ZvbnQtbG9jay1jb21tZW50LWZhY2UgbCkpDQoJ ICAgIChkZWxxIG5pbCAoYXBwZW5kIGEgYikpKSkpDQoNCihkZWZ2YXIgb3JnLWxpbmstbGlua3Mt aW4tdGhpcy1maWxlIG5pbCkNCihkZWZ1biBvcmctaW5zZXJ0LWxpbmsgKCZvcHRpb25hbCBjb21w bGV0ZS1maWxlIGxpbmstbG9jYXRpb24gZGVmYXVsdC1kZXNjcmlwdGlvbikNCiAgIkluc2VydCBh IGxpbmsuICBBdCB0aGUgcHJvbXB0LCBlbnRlciB0aGUgbGluay4NCg0KQ29tcGxldGlvbiBjYW4g YmUgdXNlZCB0byBpbnNlcnQgYW55IG9mIHRoZSBsaW5rIHByb3RvY29sIHByZWZpeGVzIGxpa2UN Cmh0dHAgb3IgZnRwIGluIHVzZS4NCg0KVGhlIGhpc3RvcnkgY2FuIGJlIHVzZWQgdG8gc2VsZWN0 IGEgbGluayBwcmV2aW91c2x5IHN0b3JlZCB3aXRoDQpgb3JnLXN0b3JlLWxpbmsnLiAgV2hlbiB0 aGUgZW1wdHkgc3RyaW5nIGlzIGVudGVyZWQgKGkuZS4gaWYgeW91IGp1c3QNCnByZXNzIFJFVCBh dCB0aGUgcHJvbXB0KSwgdGhlIGxpbmsgZGVmYXVsdHMgdG8gdGhlIG1vc3QgcmVjZW50bHkNCnN0 b3JlZCBsaW5rLiAgQXMgU1BDIHRyaWdnZXJzIGNvbXBsZXRpb24gaW4gdGhlIG1pbmlidWZmZXIs IHlvdSBuZWVkIHRvDQp1c2UgTS1TUEMgb3IgQy1xIFNQQyB0byBmb3JjZSB0aGUgaW5zZXJ0aW9u IG9mIGEgc3BhY2UgY2hhcmFjdGVyLg0KDQpZb3Ugd2lsbCBhbHNvIGJlIHByb21wdGVkIGZvciBh IGRlc2NyaXB0aW9uLCBhbmQgaWYgb25lIGlzIGdpdmVuLCBpdCB3aWxsDQpiZSBkaXNwbGF5ZWQg aW4gdGhlIGJ1ZmZlciBpbnN0ZWFkIG9mIHRoZSBsaW5rLg0KDQpJZiB0aGVyZSBpcyBhbHJlYWR5 IGEgbGluayBhdCBwb2ludCwgdGhpcyBjb21tYW5kIHdpbGwgYWxsb3cgeW91IHRvIGVkaXQgbGlu aw0KYW5kIGRlc2NyaXB0aW9uIHBhcnRzLg0KDQpXaXRoIGEgXFxbdW5pdmVyc2FsLWFyZ3VtZW50 XSBwcmVmaXgsIHByb21wdHMgZm9yIGEgZmlsZSB0byBsaW5rIHRvLiAgVGhlIGZpbGUgbmFtZSBj YW4NCmJlIHNlbGVjdGVkIHVzaW5nIGNvbXBsZXRpb24uICBUaGUgcGF0aCB0byB0aGUgZmlsZSB3 aWxsIGJlIHJlbGF0aXZlIHRvIHRoZQ0KY3VycmVudCBkaXJlY3RvcnkgaWYgdGhlIGZpbGUgaXMg aW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yIGEgc3ViZGlyZWN0b3J5Lg0KT3RoZXJ3aXNlLCB0 aGUgbGluayB3aWxsIGJlIHRoZSBhYnNvbHV0ZSBwYXRoIGFzIGNvbXBsZXRlZCBpbiB0aGUgbWlu aWJ1ZmZlcg0KXChpLmUuIG5vcm1hbGx5IH4vcGF0aC90by9maWxlKS4gIFlvdSBjYW4gY29uZmln dXJlIHRoaXMgYmVoYXZpb3IgdXNpbmcgdGhlDQpvcHRpb24gYG9yZy1saW5rLWZpbGUtcGF0aC10 eXBlJy4NCg0KV2l0aCB0d28gXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBwcmVmaXhlcywgZW5mb3Jj ZSBhbiBhYnNvbHV0ZSBwYXRoIGV2ZW4gaWYgdGhlIGZpbGUgaXMgaW4NCnRoZSBjdXJyZW50IGRp cmVjdG9yeSBvciBiZWxvdy4NCg0KV2l0aCB0aHJlZSBcXFt1bml2ZXJzYWwtYXJndW1lbnRdIHBy ZWZpeGVzLCBuZWdhdGUgdGhlIG1lYW5pbmcgb2YNCmBvcmcta2VlcC1zdG9yZWQtbGluay1hZnRl ci1pbnNlcnRpb24nLg0KDQpJZiBgb3JnLW1ha2UtbGluay1kZXNjcmlwdGlvbi1mdW5jdGlvbicg aXMgbm9uLW5pbCwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlDQpjYWxsZWQgd2l0aCB0aGUgbGluayB0 YXJnZXQsIGFuZCB0aGUgcmVzdWx0IHdpbGwgYmUgdGhlIGRlZmF1bHQNCmxpbmsgZGVzY3JpcHRp b24uDQoNCklmIHRoZSBMSU5LLUxPQ0FUSU9OIHBhcmFtZXRlciBpcyBub24tbmlsLCB0aGlzIHZh bHVlIHdpbGwgYmUNCnVzZWQgYXMgdGhlIGxpbmsgbG9jYXRpb24gaW5zdGVhZCBvZiByZWFkaW5n IG9uZSBpbnRlcmFjdGl2ZWx5Lg0KDQpJZiB0aGUgREVGQVVMVC1ERVNDUklQVElPTiBwYXJhbWV0 ZXIgaXMgbm9uLW5pbCwgdGhpcyB2YWx1ZSB3aWxsDQpiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGRl c2NyaXB0aW9uLiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgKGxldCogKCh3Y2YgKGN1cnJlbnQt d2luZG93LWNvbmZpZ3VyYXRpb24pKQ0KCSAob3JpZ2J1ZiAoY3VycmVudC1idWZmZXIpKQ0KCSAo cmVnaW9uIChpZiAob3JnLXJlZ2lvbi1hY3RpdmUtcCkNCgkJICAgICAoYnVmZmVyLXN1YnN0cmlu ZyAocmVnaW9uLWJlZ2lubmluZykgKHJlZ2lvbi1lbmQpKSkpDQoJIChyZW1vdmUgKGFuZCByZWdp b24gKGxpc3QgKHJlZ2lvbi1iZWdpbm5pbmcpIChyZWdpb24tZW5kKSkpKQ0KCSAoZGVzYyByZWdp b24pDQoJIHRtcGhpc3QgOyBieXRlLWNvbXBpbGUgaW5jb3JyZWN0bHkgY29tcGxhaW5zIGFib3V0 IHRoaXMNCgkgKGxpbmsgbGluay1sb2NhdGlvbikNCgkgKGFiYnJldnMgb3JnLWxpbmstYWJicmV2 LWFsaXN0LWxvY2FsKQ0KCSBlbnRyeSBmaWxlIGFsbC1wcmVmaXhlcyBhdXRvLWRlc2MpDQogICAg KGNvbmQNCiAgICAgKGxpbmstbG9jYXRpb24pIDsgc3BlY2lmaWVkIGJ5IGFyZywganVzdCB1c2Ug aXQuDQogICAgICgob3JnLWluLXJlZ2V4cCBvcmctYnJhY2tldC1saW5rLXJlZ2V4cCAxKQ0KICAg ICAgOzsgV2UgZG8gaGF2ZSBhIGxpbmsgYXQgcG9pbnQsIGFuZCB3ZSBhcmUgZ29pbmcgdG8gZWRp dCBpdC4NCiAgICAgIChzZXRxIHJlbW92ZSAobGlzdCAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRj aC1lbmQgMCkpKQ0KICAgICAgKHNldHEgZGVzYyAoaWYgKG1hdGNoLWVuZCAzKSAob3JnLW1hdGNo LXN0cmluZy1uby1wcm9wZXJ0aWVzIDMpKSkNCiAgICAgIChzZXRxIGxpbmsgKHJlYWQtc3RyaW5n ICJMaW5rOiAiDQoJCQkgICAgICAob3JnLWxpbmstdW5lc2NhcGUNCgkJCSAgICAgICAob3JnLW1h dGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpKSkpKQ0KICAgICAoKG9yIChvcmctaW4tcmVnZXhw IG9yZy1hbmdsZS1saW5rLXJlKQ0KCSAgKG9yZy1pbi1yZWdleHAgb3JnLXBsYWluLWxpbmstcmUp KQ0KICAgICAgOzsgQ29udmVydCB0byBicmFja2V0IGxpbmsNCiAgICAgIChzZXRxIHJlbW92ZSAo bGlzdCAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkpDQoJICAgIGxpbmsgKHJlYWQt c3RyaW5nICJMaW5rOiAiDQoJCQkgICAgICAob3JnLXJlbW92ZS1hbmdsZS1icmFja2V0cyAobWF0 Y2gtc3RyaW5nIDApKSkpKQ0KICAgICAoKG1lbWJlciBjb21wbGV0ZS1maWxlICcoKDQpICgxNikp KQ0KICAgICAgOzsgQ29tcGxldGluZyByZWFkIGZvciBmaWxlIG5hbWVzLg0KICAgICAgKHNldHEg bGluayAob3JnLWZpbGUtY29tcGxldGUtbGluayBjb21wbGV0ZS1maWxlKSkpDQogICAgICh0DQog ICAgICA7OyBSZWFkIGxpbmssIHdpdGggY29tcGxldGlvbiBmb3Igc3RvcmVkIGxpbmtzLg0KICAg ICAgKG9yZy1saW5rLWZvbnRpZnktbGlua3MtdG8tdGhpcy1maWxlKQ0KICAgICAgKG9yZy1zd2l0 Y2gtdG8tYnVmZmVyLW90aGVyLXdpbmRvdyAiKk9yZyBMaW5rcyoiKQ0KICAgICAgKHdpdGgtY3Vy cmVudC1idWZmZXIgIipPcmcgTGlua3MqIg0KCShlcmFzZS1idWZmZXIpDQoJKGluc2VydCAiSW5z ZXJ0IGEgbGluay4NClVzZSBUQUIgdG8gY29tcGxldGUgbGluayBwcmVmaXhlcywgdGhlbiBSRVQg Zm9yIHR5cGUtc3BlY2lmaWMgY29tcGxldGlvbiBzdXBwb3J0XG4iKQ0KCSh3aGVuIG9yZy1zdG9y ZWQtbGlua3MNCgkgIChpbnNlcnQgIlxuU3RvcmVkIGxpbmtzIGFyZSBhdmFpbGFibGUgd2l0aCA8 dXA+Lzxkb3duPiBvciBNLXAvbiAobW9zdCByZWNlbnQgd2l0aCBSRVQpOlxuXG4iKQ0KCSAgKGlu c2VydCAobWFwY29uY2F0ICdvcmctbGluay1wcmV0dGlmeQ0KCQkJICAgICAocmV2ZXJzZSBvcmct c3RvcmVkLWxpbmtzKSAiXG4iKSkpDQoJKGdvdG8tY2hhciAocG9pbnQtbWluKSkpDQogICAgICAo bGV0ICgoY3cgKHNlbGVjdGVkLXdpbmRvdykpKQ0KCShzZWxlY3Qtd2luZG93IChnZXQtYnVmZmVy LXdpbmRvdyAiKk9yZyBMaW5rcyoiICd2aXNpYmxlKSkNCgkod2l0aC1jdXJyZW50LWJ1ZmZlciAi Kk9yZyBMaW5rcyoiIChzZXRxIHRydW5jYXRlLWxpbmVzIHQpKQ0KCSh1bmxlc3MgKHBvcy12aXNp YmxlLWluLXdpbmRvdy1wIChwb2ludC1tYXgpKQ0KCSAgKG9yZy1maXQtd2luZG93LXRvLWJ1ZmZl cikpDQoJKGFuZCAod2luZG93LWxpdmUtcCBjdykgKHNlbGVjdC13aW5kb3cgY3cpKSkNCiAgICAg IDs7IEZha2UgYSBsaW5rIGhpc3RvcnksIGNvbnRhaW5pbmcgdGhlIHN0b3JlZCBsaW5rcy4NCiAg ICAgIChzZXRxIHRtcGhpc3QgKGFwcGVuZCAobWFwY2FyICdjYXIgb3JnLXN0b3JlZC1saW5rcykN CgkJCSAgICBvcmctaW5zZXJ0LWxpbmstaGlzdG9yeSkpDQogICAgICAoc2V0cSBhbGwtcHJlZml4 ZXMgKGFwcGVuZCAobWFwY2FyICdjYXIgYWJicmV2cykNCgkJCQkgKG1hcGNhciAnY2FyIG9yZy1s aW5rLWFiYnJldi1hbGlzdCkNCgkJCQkgb3JnLWxpbmstdHlwZXMpKQ0KICAgICAgKHVud2luZC1w cm90ZWN0DQoJICAocHJvZ24NCgkgICAgKHNldHEgbGluaw0KCQkgIChvcmctY29tcGxldGluZy1y ZWFkDQoJCSAgICJMaW5rOiAiDQoJCSAgIChhcHBlbmQNCgkJICAgIChtYXBjYXIgKGxhbWJkYSAo eCkgKGNvbmNhdCB4ICI6IikpDQoJCQkgICAgYWxsLXByZWZpeGVzKQ0KCQkgICAgKG1hcGNhciAn Y2FyIG9yZy1zdG9yZWQtbGlua3MpKQ0KCQkgICBuaWwgbmlsIG5pbA0KCQkgICAndG1waGlzdA0K CQkgICAoY2FhciBvcmctc3RvcmVkLWxpbmtzKSkpDQoJICAgIChpZiAobm90IChzdHJpbmctbWF0 Y2ggIlxcUy0iIGxpbmspKQ0KCQkodXNlci1lcnJvciAiTm8gbGluayBzZWxlY3RlZCIpKQ0KCSAg ICAobWFwYyAobGFtYmRhKGwpDQoJCSAgICAod2hlbiAoZXF1YWwgbGluayAoY2FkciBsKSkgKHNl dHEgbGluayAoY2FyIGwpIGF1dG8tZGVzYyB0KSkpDQoJCSAgb3JnLXN0b3JlZC1saW5rcykNCgkg ICAgKGlmIChvciAobWVtYmVyIGxpbmsgYWxsLXByZWZpeGVzKQ0KCQkgICAgKGFuZCAoZXF1YWwg IjoiIChzdWJzdHJpbmcgbGluayAtMSkpDQoJCQkgKG1lbWJlciAoc3Vic3RyaW5nIGxpbmsgMCAt MSkgYWxsLXByZWZpeGVzKQ0KCQkJIChzZXRxIGxpbmsgKHN1YnN0cmluZyBsaW5rIDAgLTEpKSkp DQoJCShzZXRxIGxpbmsgKHdpdGgtY3VycmVudC1idWZmZXIgb3JpZ2J1Zg0KCQkJICAgICAob3Jn LWxpbmstdHJ5LXNwZWNpYWwtY29tcGxldGlvbiBsaW5rKSkpKSkNCgkoc2V0LXdpbmRvdy1jb25m aWd1cmF0aW9uIHdjZikNCgkoa2lsbC1idWZmZXIgIipPcmcgTGlua3MqIikpDQogICAgICAoc2V0 cSBlbnRyeSAoYXNzb2MgbGluayBvcmctc3RvcmVkLWxpbmtzKSkNCiAgICAgIChvciBlbnRyeSAo cHVzaCBsaW5rIG9yZy1pbnNlcnQtbGluay1oaXN0b3J5KSkNCiAgICAgIChzZXRxIGRlc2MgKG9y IGRlc2MgKG50aCAxIGVudHJ5KSkpKSkNCg0KICAgIChpZiAoZnVuY2FsbCAoaWYgKGVxdWFsIGNv bXBsZXRlLWZpbGUgJyg2NCkpICdub3QgJ2lkZW50aXR5KQ0KCQkgKG5vdCBvcmcta2VlcC1zdG9y ZWQtbGluay1hZnRlci1pbnNlcnRpb24pKQ0KCShzZXRxIG9yZy1zdG9yZWQtbGlua3MgKGRlbHEg KGFzc29jIGxpbmsgb3JnLXN0b3JlZC1saW5rcykNCgkJCQkgICAgIG9yZy1zdG9yZWQtbGlua3Mp KSkNCg0KICAgIChpZiAoYW5kIChzdHJpbmctbWF0Y2ggb3JnLXBsYWluLWxpbmstcmUgbGluaykN CgkgICAgIChub3QgKHN0cmluZy1tYXRjaCBvcmctdHMtcmVnZXhwIGxpbmspKSkNCgk7OyBVUkwt bGlrZSBsaW5rLCBub3JtYWxpemUgdGhlIHVzZSBvZiBhbmd1bGFyIGJyYWNrZXRzLg0KCShzZXRx IGxpbmsgKG9yZy1yZW1vdmUtYW5nbGUtYnJhY2tldHMgbGluaykpKQ0KDQogICAgOzsgQ2hlY2sg aWYgd2UgYXJlIGxpbmtpbmcgdG8gdGhlIGN1cnJlbnQgZmlsZSB3aXRoIGEgc2VhcmNoDQogICAg Ozsgb3B0aW9uIElmIHllcywgc2ltcGxpZnkgdGhlIGxpbmsgYnkgdXNpbmcgb25seSB0aGUgc2Vh cmNoDQogICAgOzsgb3B0aW9uLg0KICAgICh3aGVuIChhbmQgYnVmZmVyLWZpbGUtbmFtZQ0KCSAg ICAgICAoc3RyaW5nLW1hdGNoICJeZmlsZTpcXCguKz9cXCk6OlxcKC4rXFwpIiBsaW5rKSkNCiAg ICAgIChsZXQqICgocGF0aCAobWF0Y2gtc3RyaW5nIDEgbGluaykpDQoJICAgICAoY2FzZS1mb2xk LXNlYXJjaCBuaWwpDQoJICAgICAoc2VhcmNoIChtYXRjaC1zdHJpbmcgMiBsaW5rKSkpDQoJKHNh dmUtbWF0Y2gtZGF0YQ0KCSAgKGlmIChlcXVhbCAoZmlsZS10cnVlbmFtZSBidWZmZXItZmlsZS1u YW1lKSAoZmlsZS10cnVlbmFtZSBwYXRoKSkNCgkgICAgICA7OyBXZSBhcmUgbGlua2luZyB0byB0 aGlzIHNhbWUgZmlsZSwgd2l0aCBhIHNlYXJjaCBvcHRpb24NCgkgICAgICAoc2V0cSBsaW5rIHNl YXJjaCkpKSkpDQoNCiAgICA7OyBDaGVjayBpZiB3ZSBjYW4vc2hvdWxkIHVzZSBhIHJlbGF0aXZl IHBhdGguICBJZiB5ZXMsIHNpbXBsaWZ5IHRoZSBsaW5rDQogICAgKHdoZW4gKHN0cmluZy1tYXRj aCAiXlxcKGZpbGU6XFx8ZG9jdmlldzpcXClcXCguKlxcKSIgbGluaykNCiAgICAgIChsZXQqICgo dHlwZSAobWF0Y2gtc3RyaW5nIDEgbGluaykpDQoJICAgICAocGF0aCAobWF0Y2gtc3RyaW5nIDIg bGluaykpDQoJICAgICAob3JpZ3BhdGggcGF0aCkNCgkgICAgIChjYXNlLWZvbGQtc2VhcmNoIG5p bCkpDQoJKGNvbmQNCgkgKChvciAoZXEgb3JnLWxpbmstZmlsZS1wYXRoLXR5cGUgJ2Fic29sdXRl KQ0KCSAgICAgIChlcXVhbCBjb21wbGV0ZS1maWxlICcoMTYpKSkNCgkgIChzZXRxIHBhdGggKGFi YnJldmlhdGUtZmlsZS1uYW1lIChleHBhbmQtZmlsZS1uYW1lIHBhdGgpKSkpDQoJICgoZXEgb3Jn LWxpbmstZmlsZS1wYXRoLXR5cGUgJ25vYWJicmV2KQ0KCSAgKHNldHEgcGF0aCAoZXhwYW5kLWZp bGUtbmFtZSBwYXRoKSkpDQoJICgoZXEgb3JnLWxpbmstZmlsZS1wYXRoLXR5cGUgJ3JlbGF0aXZl KQ0KCSAgKHNldHEgcGF0aCAoZmlsZS1yZWxhdGl2ZS1uYW1lIHBhdGgpKSkNCgkgKHQNCgkgIChz YXZlLW1hdGNoLWRhdGENCgkgICAgKGlmIChzdHJpbmctbWF0Y2ggKGNvbmNhdCAiXiIgKHJlZ2V4 cC1xdW90ZQ0KCQkJCQkgICAoZXhwYW5kLWZpbGUtbmFtZQ0KCQkJCQkgICAgKGZpbGUtbmFtZS1h cy1kaXJlY3RvcnkNCgkJCQkJICAgICBkZWZhdWx0LWRpcmVjdG9yeSkpKSkNCgkJCSAgICAgIChl eHBhbmQtZmlsZS1uYW1lIHBhdGgpKQ0KCQk7OyBXZSBhcmUgbGlua2luZyBhIGZpbGUgd2l0aCBy ZWxhdGl2ZSBwYXRoIG5hbWUuDQoJCShzZXRxIHBhdGggKHN1YnN0cmluZyAoZXhwYW5kLWZpbGUt bmFtZSBwYXRoKQ0KCQkJCSAgICAgIChtYXRjaC1lbmQgMCkpKQ0KCSAgICAgIChzZXRxIHBhdGgg KGFiYnJldmlhdGUtZmlsZS1uYW1lIChleHBhbmQtZmlsZS1uYW1lIHBhdGgpKSkpKSkpDQoJKHNl dHEgbGluayAoY29uY2F0IHR5cGUgcGF0aCkpDQoJKGlmIChlcXVhbCBkZXNjIG9yaWdwYXRoKQ0K CSAgICAoc2V0cSBkZXNjIHBhdGgpKSkpDQoNCiAgICAoaWYgb3JnLW1ha2UtbGluay1kZXNjcmlw dGlvbi1mdW5jdGlvbg0KCShzZXRxIGRlc2MNCgkgICAgICAob3IgKGNvbmRpdGlvbi1jYXNlIG5p bA0KCQkgICAgICAoZnVuY2FsbCBvcmctbWFrZS1saW5rLWRlc2NyaXB0aW9uLWZ1bmN0aW9uIGxp bmsgZGVzYykNCgkJICAgIChlcnJvciAocHJvZ24gKG1lc3NhZ2UgIkNhbid0IGdldCBsaW5rIGRl c2NyaXB0aW9uIGZyb20gYCVzJyINCgkJCQkJICAgKHN5bWJvbC1uYW1lIG9yZy1tYWtlLWxpbmst ZGVzY3JpcHRpb24tZnVuY3Rpb24pKQ0KCQkJCSAgKHNpdC1mb3IgMikgbmlsKSkpDQoJCSAgKHJl YWQtc3RyaW5nICJEZXNjcmlwdGlvbjogIiBkZWZhdWx0LWRlc2NyaXB0aW9uKSkpDQogICAgICAo aWYgZGVmYXVsdC1kZXNjcmlwdGlvbiAoc2V0cSBkZXNjIGRlZmF1bHQtZGVzY3JpcHRpb24pDQoJ KHNldHEgZGVzYyAob3IgKGFuZCBhdXRvLWRlc2MgZGVzYykNCgkJICAgICAgIChyZWFkLXN0cmlu ZyAiRGVzY3JpcHRpb246ICIgZGVzYykpKSkpDQoNCiAgICAodW5sZXNzIChzdHJpbmctbWF0Y2gg IlxcUy0iIGRlc2MpIChzZXRxIGRlc2MgbmlsKSkNCiAgICAoaWYgcmVtb3ZlIChhcHBseSAnZGVs ZXRlLXJlZ2lvbiByZW1vdmUpKQ0KICAgIChpbnNlcnQgKG9yZy1tYWtlLWxpbmstc3RyaW5nIGxp bmsgZGVzYykpKSkNCg0KKGRlZnVuIG9yZy1saW5rLXRyeS1zcGVjaWFsLWNvbXBsZXRpb24gKHR5 cGUpDQogICJJZiB0aGVyZSBpcyBjb21wbGV0aW9uIHN1cHBvcnQgZm9yIGxpbmsgdHlwZSBUWVBF LCBvZmZlciBpdC4iDQogIChsZXQgKChmdW4gKGludGVybiAoY29uY2F0ICJvcmctIiB0eXBlICIt Y29tcGxldGUtbGluayIpKSkpDQogICAgKGlmIChmdW5jdGlvbnAgZnVuKQ0KCShmdW5jYWxsIGZ1 bikNCiAgICAgIChyZWFkLXN0cmluZyAiTGluayAobm8gY29tcGxldGlvbiBzdXBwb3J0KTogIiAo Y29uY2F0IHR5cGUgIjoiKSkpKSkNCg0KKGRlZnVuIG9yZy1maWxlLWNvbXBsZXRlLWxpbmsgKCZv cHRpb25hbCBhcmcpDQogICJDcmVhdGUgYSBmaWxlIGxpbmsgdXNpbmcgY29tcGxldGlvbi4iDQog IChsZXQgKGZpbGUgbGluaykNCiAgICAoc2V0cSBmaWxlIChvcmctaXJlYWQtZmlsZS1uYW1lICJG aWxlOiAiKSkNCiAgICAobGV0ICgocHdkIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IChleHBhbmQt ZmlsZS1uYW1lICIuIikpKQ0KCSAgKHB3ZDEgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkgKGFiYnJl dmlhdGUtZmlsZS1uYW1lDQoJCQkJCSAoZXhwYW5kLWZpbGUtbmFtZSAiLiIpKSkpKQ0KICAgICAg KGNvbmQNCiAgICAgICAoKGVxdWFsIGFyZyAnKDE2KSkNCgkoc2V0cSBsaW5rIChjb25jYXQNCgkJ ICAgICJmaWxlOiINCgkJICAgIChhYmJyZXZpYXRlLWZpbGUtbmFtZSAoZXhwYW5kLWZpbGUtbmFt ZSBmaWxlKSkpKSkNCiAgICAgICAoKHN0cmluZy1tYXRjaCAoY29uY2F0ICJeIiAocmVnZXhwLXF1 b3RlIHB3ZDEpICJcXCguK1xcKSIpIGZpbGUpDQoJKHNldHEgbGluayAgKGNvbmNhdCAiZmlsZToi IChtYXRjaC1zdHJpbmcgMSBmaWxlKSkpKQ0KICAgICAgICgoc3RyaW5nLW1hdGNoIChjb25jYXQg Il4iIChyZWdleHAtcXVvdGUgcHdkKSAiXFwoLitcXCkiKQ0KCQkgICAgICAoZXhwYW5kLWZpbGUt bmFtZSBmaWxlKSkNCgkoc2V0cSBsaW5rICAoY29uY2F0DQoJCSAgICAgImZpbGU6IiAobWF0Y2gt c3RyaW5nIDEgKGV4cGFuZC1maWxlLW5hbWUgZmlsZSkpKSkpDQogICAgICAgKHQgKHNldHEgbGlu ayAoY29uY2F0ICJmaWxlOiIgZmlsZSkpKSkpDQogICAgbGluaykpDQoNCihkZWZ1biBvcmctaXJl YWQtZmlsZS1uYW1lICgmcmVzdCBhcmdzKQ0KICAiUmVhZC1maWxlLW5hbWUgdXNpbmcgYGlkby1t b2RlJyBzcGVlZHVwIGlmIGF2YWlsYWJsZS4NCkFSR1MgYXJlIGFyZ3VtZW50cyB0aGF0IG1heSBi ZSBwYXNzZWQgdG8gYGlkby1yZWFkLWZpbGUtbmFtZScgb3IgYHJlYWQtZmlsZS1uYW1lJy4NClNl ZSBgcmVhZC1maWxlLW5hbWUnIGZvciBhIGRlc2NyaXB0aW9uIG9mIHBhcmFtZXRlcnMuIg0KICAo b3JnLXdpdGhvdXQtcGFydGlhbC1jb21wbGV0aW9uDQogICAoaWYgKGFuZCBvcmctY29tcGxldGlv bi11c2UtaWRvDQogICAgICAgICAgICAoZmJvdW5kcCAnaWRvLXJlYWQtZmlsZS1uYW1lKQ0KICAg ICAgICAgICAgKGJvdW5kcCAnaWRvLW1vZGUpIGlkby1tb2RlDQogICAgICAgICAgICAobGlzdHAg KHNlY29uZCBhcmdzKSkpDQogICAgICAgKGxldCAoKGlkby1lbnRlci1tYXRjaGluZy1kaXJlY3Rv cnkgbmlsKSkNCiAgICAgICAgIChhcHBseSAnaWRvLXJlYWQtZmlsZS1uYW1lIGFyZ3MpKQ0KICAg ICAoYXBwbHkgJ3JlYWQtZmlsZS1uYW1lIGFyZ3MpKSkpDQoNCihkZWZ1biBvcmctY29tcGxldGlu Zy1yZWFkICgmcmVzdCBhcmdzKQ0KICAiQ29tcGxldGluZy1yZWFkIHdpdGggU1BBQ0UgYmVpbmcg YSBub3JtYWwgY2hhcmFjdGVyLiINCiAgKGxldCAoKGVuYWJsZS1yZWN1cnNpdmUtbWluaWJ1ZmZl cnMgdCkNCgkobWluaWJ1ZmZlci1sb2NhbC1jb21wbGV0aW9uLW1hcA0KCSAoY29weS1rZXltYXAg bWluaWJ1ZmZlci1sb2NhbC1jb21wbGV0aW9uLW1hcCkpKQ0KICAgIChvcmctZGVma2V5IG1pbmli dWZmZXItbG9jYWwtY29tcGxldGlvbi1tYXAgIiAiICdzZWxmLWluc2VydC1jb21tYW5kKQ0KICAg IChvcmctZGVma2V5IG1pbmlidWZmZXItbG9jYWwtY29tcGxldGlvbi1tYXAgIj8iICdzZWxmLWlu c2VydC1jb21tYW5kKQ0KICAgIChvcmctZGVma2V5IG1pbmlidWZmZXItbG9jYWwtY29tcGxldGlv bi1tYXAgKGtiZCAiQy1jICEiKSAnb3JnLXRpbWUtc3RhbXAtaW5hY3RpdmUpDQogICAgKGFwcGx5 ICdvcmctaWNvbXBsZXRpbmctcmVhZCBhcmdzKSkpDQoNCihkZWZ1biBvcmctY29tcGxldGluZy1y ZWFkLW5vLWkgKCZyZXN0IGFyZ3MpDQogIChsZXQgKG9yZy1jb21wbGV0aW9uLXVzZS1pZG8gb3Jn LWNvbXBsZXRpb24tdXNlLWlzd2l0Y2hiKQ0KICAgIChhcHBseSAnb3JnLWNvbXBsZXRpbmctcmVh ZCBhcmdzKSkpDQoNCihkZWZ1biBvcmctaXN3aXRjaGItY29tcGxldGluZy1yZWFkIChwcm9tcHQg Y2hvaWNlcyAmcmVzdCBhcmdzKQ0KICAiVXNlIGlzd2l0Y2ggYXMgYSBjb21wbGV0aW5nLXJlYWQg cmVwbGFjZW1lbnQgdG8gY2hvb3NlIGZyb20gY2hvaWNlcy4NClBST01QVCBpcyBhIHN0cmluZyB0 byBwcm9tcHQgd2l0aC4gIENIT0lDRVMgaXMgYSBsaXN0IG9mIHN0cmluZ3MgdG8gY2hvb3NlDQpm cm9tLiINCiAgKGxldCogKChpc3dpdGNoYi11c2UtdmlydHVhbC1idWZmZXJzIG5pbCkNCgkgKGlz d2l0Y2hiLW1ha2UtYnVmbGlzdC1ob29rDQoJICAobGFtYmRhICgpDQoJICAgIChzZXRxIGlzd2l0 Y2hiLXRlbXAtYnVmbGlzdCBjaG9pY2VzKSkpKQ0KICAgIChpc3dpdGNoYi1yZWFkLWJ1ZmZlciBw cm9tcHQpKSkNCg0KKGRlZnVuIG9yZy1pY29tcGxldGluZy1yZWFkICgmcmVzdCBhcmdzKQ0KICAi Q29tcGxldGluZy1yZWFkIHVzaW5nIGBpZG8tbW9kZScgb3IgYGlzd2l0Y2hiJyBzcGVlZHVwcyBp ZiBhdmFpbGFibGUuIg0KICAob3JnLXdpdGhvdXQtcGFydGlhbC1jb21wbGV0aW9uDQogICAoaWYg KGFuZCBvcmctY29tcGxldGlvbi11c2UtaWRvDQoJICAgIChmYm91bmRwICdpZG8tY29tcGxldGlu Zy1yZWFkKQ0KCSAgICAoYm91bmRwICdpZG8tbW9kZSkgaWRvLW1vZGUNCgkgICAgKGxpc3RwIChz ZWNvbmQgYXJncykpKQ0KICAgICAgIChsZXQgKChpZG8tZW50ZXItbWF0Y2hpbmctZGlyZWN0b3J5 IG5pbCkpDQoJIChhcHBseSAnaWRvLWNvbXBsZXRpbmctcmVhZCAoY29uY2F0IChjYXIgYXJncykp DQoJCShpZiAoY29uc3AgKGNhciAobnRoIDEgYXJncykpKQ0KCQkgICAgKG1hcGNhciAnY2FyIChu dGggMSBhcmdzKSkNCgkJICAobnRoIDEgYXJncykpDQoJCShjZGRyIGFyZ3MpKSkNCiAgICAgKGlm IChhbmQgb3JnLWNvbXBsZXRpb24tdXNlLWlzd2l0Y2hiDQoJICAgICAgKGJvdW5kcCAnaXN3aXRj aGItbW9kZSkgaXN3aXRjaGItbW9kZQ0KCSAgICAgIChsaXN0cCAoc2Vjb25kIGFyZ3MpKSkNCgkg KGFwcGx5ICdvcmctaXN3aXRjaGItY29tcGxldGluZy1yZWFkIChjb25jYXQgKGNhciBhcmdzKSkN CgkJKGlmIChjb25zcCAoY2FyIChudGggMSBhcmdzKSkpDQoJCSAgICAobWFwY2FyICdjYXIgKG50 aCAxIGFyZ3MpKQ0KCQkgIChudGggMSBhcmdzKSkNCgkJKGNkZHIgYXJncykpDQogICAgICAgKGFw cGx5ICdjb21wbGV0aW5nLXJlYWQgYXJncykpKSkpDQoNCihkZWZ1biBvcmctZXh0cmFjdC1hdHRy aWJ1dGVzIChzKQ0KICAiRXh0cmFjdCB0aGUgYXR0cmlidXRlcyBjb29raWUgZnJvbSBhIHN0cmlu ZyBhbmQgc2V0IGFzIHRleHQgcHJvcGVydHkuIg0KICAobGV0IChhIGF0dHIgKHN0YXJ0IDApIGtl eSB2YWx1ZSkNCiAgICAoc2F2ZS1tYXRjaC1kYXRhDQogICAgICAod2hlbiAoc3RyaW5nLW1hdGNo ICJ7e1xcKFtefV0rXFwpfX0kIiBzKQ0KCShzZXRxIGEgKG1hdGNoLXN0cmluZyAxIHMpIHMgKHN1 YnN0cmluZyBzIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkpDQoJKHdoaWxlIChzdHJpbmctbWF0Y2gg IlxcKFthLXpBLVpdK1xcKT1cIlxcKFteXCJdKlxcKVwiIiBhIHN0YXJ0KQ0KCSAgKHNldHEga2V5 IChtYXRjaC1zdHJpbmcgMSBhKSB2YWx1ZSAobWF0Y2gtc3RyaW5nIDIgYSkNCgkJc3RhcnQgKG1h dGNoLWVuZCAwKQ0KCQlhdHRyIChwbGlzdC1wdXQgYXR0ciAoaW50ZXJuIGtleSkgdmFsdWUpKSkp DQogICAgICAob3JnLWFkZC1wcm9wcyBzIG5pbCAnb3JnLWF0dHIgYXR0cikpDQogICAgcykpDQoN Cjs7OyBPcGVuaW5nL2ZvbGxvd2luZyBhIGxpbmsNCg0KKGRlZnZhciBvcmctbGluay1zZWFyY2gt ZmFpbGVkIG5pbCkNCg0KKGRlZnZhciBvcmctb3Blbi1saW5rLWZ1bmN0aW9ucyBuaWwNCiAgIkhv b2sgZm9yIGZ1bmN0aW9ucyBmaW5kaW5nIGEgcGxhaW4gdGV4dCBsaW5rLg0KVGhlc2UgZnVuY3Rp b25zIG11c3QgdGFrZSBhIHNpbmdsZSBhcmd1bWVudCwgdGhlIGxpbmsgY29udGVudC4NClRoZXkg d2lsbCBiZSBjYWxsZWQgZm9yIGxpbmtzIHRoYXQgbG9vayBsaWtlIFtbbGluayB0ZXh0XVtkZXNj cmlwdGlvbl1dDQp3aGVuIExJTksgVEVYVCBkb2VzIG5vdCBoYXZlIGEgcHJvdG9jb2wgbGlrZSBc Imh0dHA6XCIgYW5kIGRvZXMgbm90IGxvb2sNCmxpa2UgYSBmaWxlbmFtZSAoZS5nLiBcIi4vYmx1 ZS5wbmdcIikuDQoNClRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCAqYmVmb3JlKiBPcmcg YXR0ZW1wdHMgdG8gcmVzb2x2ZSB0aGUNCmxpbmsgYnkgZG9pbmcgdGV4dCBzZWFyY2hlcyBpbiB0 aGUgY3VycmVudCBidWZmZXIgLSBzbyBpZiB5b3Ugd2FudCBhDQpsaW5rIFwiW1t0YXJnZXRdXVwi IHRvIHN0aWxsIGZpbmQgXCI8PHRhcmdldD4+XCIsIHlvdXIgZnVuY3Rpb24gc2hvdWxkDQpoYW5k bGUgdGhpcyBhcyBhIHNwZWNpYWwgY2FzZS4NCg0KV2hlbiB0aGUgZnVuY3Rpb24gZG9lcyBoYW5k bGUgdGhlIGxpbmssIGl0IG11c3QgcmV0dXJuIGEgbm9uLW5pbCB2YWx1ZS4NCklmIGl0IGRlY2lk ZXMgdGhhdCBpdCBpcyBub3QgcmVzcG9uc2libGUgZm9yIHRoaXMgbGluaywgaXQgbXVzdCByZXR1 cm4NCm5pbCB0byBpbmRpY2F0ZSB0aGF0IHRoYXQgT3JnLW1vZGUgY2FuIGNvbnRpbnVlIHdpdGgg b3RoZXIgb3B0aW9ucw0KbGlrZSBleGFjdCBhbmQgZnV6enkgdGV4dCBzZWFyY2guIikNCg0KKGRl ZnVuIG9yZy1uZXh0LWxpbmsgKCZvcHRpb25hbCBzZWFyY2gtYmFja3dhcmQpDQogICJNb3ZlIGZv cndhcmQgdG8gdGhlIG5leHQgbGluay4NCklmIHRoZSBsaW5rIGlzIGluIGhpZGRlbiB0ZXh0LCBl eHBvc2UgaXQuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAod2hlbiAoYW5kIG9yZy1saW5rLXNl YXJjaC1mYWlsZWQgKGVxIHRoaXMtY29tbWFuZCBsYXN0LWNvbW1hbmQpKQ0KICAgIChnb3RvLWNo YXIgKHBvaW50LW1pbikpDQogICAgKG1lc3NhZ2UgIkxpbmsgc2VhcmNoIHdyYXBwZWQgYmFjayB0 byBiZWdpbm5pbmcgb2YgYnVmZmVyIikpDQogIChzZXRxIG9yZy1saW5rLXNlYXJjaC1mYWlsZWQg bmlsKQ0KICAobGV0KiAoKHBvcyAocG9pbnQpKQ0KCSAoY3QgKG9yZy1jb250ZXh0KSkNCgkgKGEg KGFzc29jIDpsaW5rIGN0KSkNCgkgKHNyY2gtZnVuIChpZiBzZWFyY2gtYmFja3dhcmQgJ3JlLXNl YXJjaC1iYWNrd2FyZCAncmUtc2VhcmNoLWZvcndhcmQpKSkNCiAgICAoY29uZCAoYSAoZ290by1j aGFyIChudGggKGlmIHNlYXJjaC1iYWNrd2FyZCAxIDIpIGEpKSkNCgkgICgobG9va2luZy1hdCBv cmctYW55LWxpbmstcmUpDQoJICAgOzsgRG9uJ3Qgc3RheSBzdHVjayBhdCBsaW5rIHdpdGhvdXQg YW4gb3JnLWxpbmsgZmFjZQ0KCSAgIChmb3J3YXJkLWNoYXIgKGlmIHNlYXJjaC1iYWNrd2FyZCAt MSAxKSkpKQ0KICAgIChpZiAoZnVuY2FsbCBzcmNoLWZ1biBvcmctYW55LWxpbmstcmUgbmlsIHQp DQoJKHByb2duDQoJICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMCkpDQoJICAoaWYgKG91 dGxpbmUtaW52aXNpYmxlLXApIChvcmctc2hvdy1jb250ZXh0KSkpDQogICAgICAoZ290by1jaGFy IHBvcykNCiAgICAgIChzZXRxIG9yZy1saW5rLXNlYXJjaC1mYWlsZWQgdCkNCiAgICAgIChtZXNz YWdlICJObyBmdXJ0aGVyIGxpbmsgZm91bmQiKSkpKQ0KDQooZGVmdW4gb3JnLXByZXZpb3VzLWxp bmsgKCkNCiAgIk1vdmUgYmFja3dhcmQgdG8gdGhlIHByZXZpb3VzIGxpbmsuDQpJZiB0aGUgbGlu ayBpcyBpbiBoaWRkZW4gdGV4dCwgZXhwb3NlIGl0LiINCiAgKGludGVyYWN0aXZlKQ0KICAoZnVu Y2FsbCAnb3JnLW5leHQtbGluayB0KSkNCg0KKGRlZnVuIG9yZy10cmFuc2xhdGUtbGluayAocykN CiAgIlRyYW5zbGF0ZSBhIGxpbmsgc3RyaW5nIGlmIGEgdHJhbnNsYXRpb24gZnVuY3Rpb24gaGFz IGJlZW4gZGVmaW5lZC4iDQogIChpZiAoYW5kIG9yZy1saW5rLXRyYW5zbGF0aW9uLWZ1bmN0aW9u DQoJICAgKGZib3VuZHAgb3JnLWxpbmstdHJhbnNsYXRpb24tZnVuY3Rpb24pDQoJICAgKHN0cmlu Zy1tYXRjaCAiXFwoW2EtekEtWjAtOV0rXFwpOlxcKC4qXFwpIiBzKSkNCiAgICAgIChwcm9nbg0K CShzZXRxIHMgKGZ1bmNhbGwgb3JnLWxpbmstdHJhbnNsYXRpb24tZnVuY3Rpb24NCgkJCSAobWF0 Y2gtc3RyaW5nIDEgcykgKG1hdGNoLXN0cmluZyAyIHMpKSkNCgkoY29uY2F0IChjYXIgcykgIjoi IChjZHIgcykpKQ0KICAgIHMpKQ0KDQooZGVmdW4gb3JnLXRyYW5zbGF0ZS1saW5rLWZyb20tcGxh bm5lciAodHlwZSBwYXRoKQ0KICAiVHJhbnNsYXRlIGEgbGluayBmcm9tIEVtYWNzIFBsYW5uZXIg c3ludGF4IHNvIHRoYXQgT3JnIGNhbiBmb2xsb3cgaXQuDQpUaGlzIGlzIHN0aWxsIGFuIGV4cGVy aW1lbnRhbCBmdW5jdGlvbiwgeW91ciBtaWxlYWdlIG1heSB2YXJ5LiINCiAgKGNvbmQNCiAgICgo bWVtYmVyIHR5cGUgJygiaHR0cCIgImh0dHBzIiAibmV3cyIgImZ0cCIpKQ0KICAgIDs7IHN0YW5k YXJkIEludGVybmV0IGxpbmtzIGFyZSB0aGUgc2FtZS4NCiAgICBuaWwpDQogICAoKGFuZCAoZXF1 YWwgdHlwZSAiaXJjIikgKHN0cmluZy1tYXRjaCAiXi8vIiBwYXRoKSkNCiAgICA7OyBQbGFubmVy IGhhcyB0d28gLyBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGlyYyBsaW5rLCB3ZSBoYXZlIDEuDQog ICAgOzsgV2Ugc2hvdWxkIGhhdmUgemVybywgYWN0dWFsbHkuLi4uDQogICAgKHNldHEgcGF0aCAo c3Vic3RyaW5nIHBhdGggMSkpKQ0KICAgKChhbmQgKGVxdWFsIHR5cGUgImxpc3AiKSAoc3RyaW5n LW1hdGNoICJeLyIgcGF0aCkpDQogICAgOzsgUGxhbm5lciBoYXMgYSBzbGFzaCwgd2UgZG8gbm90 Lg0KICAgIChzZXRxIHR5cGUgImVsaXNwIiBwYXRoIChzdWJzdHJpbmcgcGF0aCAxKSkpDQogICAo KHN0cmluZy1tYXRjaCAiXi8vXFwoLj8qXFwpL1xcKDwuKj5cXCkkIiBwYXRoKQ0KICAgIDs7IEEg dHlwaWNhbCBtZXNzYWdlIGxpbmsuICBQbGFubmVyIGhhcyB0aGUgaWQgYWZ0ZXIgdGhlIGZpbmFs IHNsYXNoLA0KICAgIDs7IHdlIHNlcGFyYXRlIGl0IHdpdGggYSBoYXNoIG1hcmsNCiAgICAoc2V0 cSBwYXRoIChjb25jYXQgKG1hdGNoLXN0cmluZyAxIHBhdGgpICIjIg0KCQkgICAgICAgKG9yZy1y ZW1vdmUtYW5nbGUtYnJhY2tldHMgKG1hdGNoLXN0cmluZyAyIHBhdGgpKSkpKSkNCiAgKGNvbnMg dHlwZSBwYXRoKSkNCg0KKGRlZnVuIG9yZy1maW5kLWZpbGUtYXQtbW91c2UgKGV2KQ0KICAiT3Bl biBmaWxlIGxpbmsgb3IgVVJMIGF0IG1vdXNlLiINCiAgKGludGVyYWN0aXZlICJlIikNCiAgKG1v dXNlLXNldC1wb2ludCBldikNCiAgKG9yZy1vcGVuLWF0LXBvaW50ICdpbi1lbWFjcykpDQoNCihk ZWZ1biBvcmctb3Blbi1hdC1tb3VzZSAoZXYpDQogICJPcGVuIGZpbGUgbGluayBvciBVUkwgYXQg bW91c2UuDQpTZWUgdGhlIGRvY3N0cmluZyBvZiBgb3JnLW9wZW4tZmlsZScgZm9yIGRldGFpbHMu Ig0KICAoaW50ZXJhY3RpdmUgImUiKQ0KICAobW91c2Utc2V0LXBvaW50IGV2KQ0KICAoaWYgKGVx IG1ham9yLW1vZGUgJ29yZy1hZ2VuZGEtbW9kZSkNCiAgICAgIChvcmctYWdlbmRhLWNvcHktbG9j YWwtdmFyaWFibGUgJ29yZy1saW5rLWFiYnJldi1hbGlzdC1sb2NhbCkpDQogIChvcmctb3Blbi1h dC1wb2ludCkpDQoNCihkZWZ2YXIgb3JnLXdpbmRvdy1jb25maWctYmVmb3JlLWZvbGxvdy1saW5r IG5pbA0KICAiVGhlIHdpbmRvdyBjb25maWd1cmF0aW9uIGJlZm9yZSBmb2xsb3dpbmcgYSBsaW5r Lg0KVGhpcyBpcyBzYXZlZCBpbiBjYXNlIHRoZSBuZWVkIGFyaXNlcyB0byByZXN0b3JlIGl0LiIp DQoNCihkZWZ2YXIgb3JnLW9wZW4tbGluay1tYXJrZXIgKG1ha2UtbWFya2VyKQ0KICAiTWFya2Vy IHBvaW50aW5nIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSBgb3JnLW9wZW4tYXQtcG9pbnQnIHdhcyBj YWxsZWQuIikNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBvcmctb3Blbi1hdC1wb2ludC1nbG9i YWwgKCkNCiAgIkZvbGxvdyBhIGxpbmsgbGlrZSBPcmctbW9kZSBkb2VzLg0KVGhpcyBjb21tYW5k IGNhbiBiZSBjYWxsZWQgaW4gYW55IG1vZGUgdG8gZm9sbG93IGEgbGluayB0aGF0IGhhcw0KT3Jn LW1vZGUgc3ludGF4LiINCiAgKGludGVyYWN0aXZlKQ0KICAob3JnLXJ1bi1saWtlLWluLW9yZy1t b2RlICdvcmctb3Blbi1hdC1wb2ludCkpDQoNCjs7OyMjI2F1dG9sb2FkDQooZGVmdW4gb3JnLW9w ZW4tbGluay1mcm9tLXN0cmluZyAocyAmb3B0aW9uYWwgYXJnIHJlZmVyZW5jZS1idWZmZXIpDQog ICJPcGVuIGEgbGluayBpbiB0aGUgc3RyaW5nIFMsIGFzIGlmIGl0IHdhcyBpbiBPcmctbW9kZS4i DQogIChpbnRlcmFjdGl2ZSAic0xpbms6IFxuUCIpDQogIChsZXQgKChyZWZlcmVuY2UtYnVmZmVy IChvciByZWZlcmVuY2UtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpKSkNCiAgICAod2l0aC10ZW1w LWJ1ZmZlcg0KICAgICAgKGxldCAoKG9yZy1pbmhpYml0LXN0YXJ0dXAgKG5vdCByZWZlcmVuY2Ut YnVmZmVyKSkpDQoJKG9yZy1tb2RlKQ0KCShpbnNlcnQgcykNCgkoZ290by1jaGFyIChwb2ludC1t aW4pKQ0KCSh3aGVuIHJlZmVyZW5jZS1idWZmZXINCgkgIChzZXRxIG9yZy1saW5rLWFiYnJldi1h bGlzdC1sb2NhbA0KCQkod2l0aC1jdXJyZW50LWJ1ZmZlciByZWZlcmVuY2UtYnVmZmVyDQoJCSAg b3JnLWxpbmstYWJicmV2LWFsaXN0LWxvY2FsKSkpDQoJKG9yZy1vcGVuLWF0LXBvaW50IGFyZyBy ZWZlcmVuY2UtYnVmZmVyKSkpKSkNCg0KKGRlZnZhciBvcmctb3Blbi1hdC1wb2ludC1mdW5jdGlv bnMgbmlsDQogICJIb29rIHRoYXQgaXMgcnVuIHdoZW4gZm9sbG93aW5nIGEgbGluayBhdCBwb2lu dC4NCg0KRnVuY3Rpb25zIGluIHRoaXMgaG9vayBtdXN0IHJldHVybiB0IGlmIHRoZXkgaWRlbnRp ZnkgYW5kIGZvbGxvdw0KYSBsaW5rIGF0IHBvaW50LiAgSWYgdGhleSBkb24ndCBmaW5kIGFueXRo aW5nIGludGVyZXN0aW5nIGF0IHBvaW50LA0KdGhleSBtdXN0IHJldHVybiBuaWwuIikNCg0KKGRl ZnZhciBvcmctbGluay1zZWFyY2gtaW5oaWJpdC1xdWVyeSBuaWwpIDs7IGR5bmFtaWNhbGx5IHNj b3BlZA0KKGRlZnZhciBjbGVhbi1idWZmZXItbGlzdC1raWxsLWJ1ZmZlci1uYW1lcykgOyBEZWZp bmVkIGluIG1pZG5pZ2h0LmVsDQooZGVmdW4gb3JnLW9wZW4tYXQtcG9pbnQgKCZvcHRpb25hbCBh cmcgcmVmZXJlbmNlLWJ1ZmZlcikNCiAgIk9wZW4gbGluayBhdCBvciBhZnRlciBwb2ludC4NCklm IHRoZXJlIGlzIG5vIGxpbmsgYXQgcG9pbnQsIHRoaXMgZnVuY3Rpb24gd2lsbCBzZWFyY2ggZm9y d2FyZCB1cCB0bw0KdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLg0KTm9ybWFsbHksIGZpbGVz IHdpbGwgYmUgb3BlbmVkIGJ5IGFuIGFwcHJvcHJpYXRlIGFwcGxpY2F0aW9uLiAgSWYgdGhlDQpv cHRpb25hbCBwcmVmaXggYXJndW1lbnQgQVJHIGlzIG5vbi1uaWwsIEVtYWNzIHdpbGwgdmlzaXQg dGhlIGZpbGUuDQpXaXRoIGEgZG91YmxlIHByZWZpeCBhcmd1bWVudCwgdHJ5IHRvIG9wZW4gb3V0 c2lkZSBvZiBFbWFjcywgaW4gdGhlDQphcHBsaWNhdGlvbiB0aGUgc3lzdGVtIHVzZXMgZm9yIHRo aXMgZmlsZSB0eXBlLiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgOzsgaWYgaW4gYSBjb2RlIGJs b2NrLCB0aGVuIG9wZW4gdGhlIGJsb2NrJ3MgcmVzdWx0cw0KICAodW5sZXNzIChjYWxsLWludGVy YWN0aXZlbHkgIydvcmctYmFiZWwtb3Blbi1zcmMtYmxvY2stcmVzdWx0KQ0KICAgIChvcmctbG9h ZC1tb2R1bGVzLW1heWJlKQ0KICAgIChtb3ZlLW1hcmtlciBvcmctb3Blbi1saW5rLW1hcmtlciAo cG9pbnQpKQ0KICAgIChzZXRxIG9yZy13aW5kb3ctY29uZmlnLWJlZm9yZS1mb2xsb3ctbGluayAo Y3VycmVudC13aW5kb3ctY29uZmlndXJhdGlvbikpDQogICAgKG9yZy1yZW1vdmUtb2NjdXItaGln aGxpZ2h0cyBuaWwgbmlsIHQpDQogICAgKGNvbmQNCiAgICAgKChhbmQgKG9yZy1hdC1oZWFkaW5n LXApDQoJICAgKG5vdCAob3JnLWF0LXRpbWVzdGFtcC1wIHQpKQ0KCSAgIChub3QgKG9yZy1pbi1y ZWdleHANCgkJIChjb25jYXQgb3JnLXBsYWluLWxpbmstcmUgIlxcfCINCgkJCSBvcmctYnJhY2tl dC1saW5rLXJlZ2V4cCAiXFx8Ig0KCQkJIG9yZy1hbmdsZS1saW5rLXJlICJcXHwiDQoJCQkgIlsg XHRdOlteIFx0XG5dKzpbIFx0XSokIikpKQ0KCSAgIChub3QgKGdldC10ZXh0LXByb3BlcnR5IChw b2ludCkgJ29yZy1saW5rZWQtdGV4dCkpKQ0KICAgICAgKG9yIChsZXQqICgobGthbGwgKG9yZy1v ZmZlci1saW5rcy1pbi1lbnRyeSAoY3VycmVudC1idWZmZXIpIChwb2ludCkgYXJnKSkNCgkJIChs azAgKGNhciBsa2FsbCkpDQoJCSAobGsgKGlmIChzdHJpbmdwIGxrMCkgKGxpc3QgbGswKSBsazAp KQ0KCQkgKGxrZW5kIChjZHIgbGthbGwpKSkNCgkgICAgKG1hcGNhciAobGFtYmRhKGwpDQoJCSAg ICAgIChzZWFyY2gtZm9yd2FyZCBsIG5pbCBsa2VuZCkNCgkJICAgICAgKGdvdG8tY2hhciAobWF0 Y2gtYmVnaW5uaW5nIDApKQ0KCQkgICAgICAob3JnLW9wZW4tYXQtcG9pbnQpKQ0KCQkgICAgbGsp KQ0KCSAgKHByb2duIChyZXF1aXJlICdvcmctYXR0YWNoKSAob3JnLWF0dGFjaC1yZXZlYWwgJ2lm LWV4aXN0cykpKSkNCiAgICAgKChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2VzcyAnb3Jn LW9wZW4tYXQtcG9pbnQtZnVuY3Rpb25zKSkNCiAgICAgKChhbmQgKG9yZy1hdC10aW1lc3RhbXAt cCB0KQ0KCSAgIChub3QgKG9yZy1pbi1yZWdleHAgb3JnLWJyYWNrZXQtbGluay1yZWdleHApKSkN CiAgICAgIChvcmctZm9sbG93LXRpbWVzdGFtcC1saW5rKSkNCiAgICAgKChhbmQgKG9yIChvcmct Zm9vdG5vdGUtYXQtcmVmZXJlbmNlLXApIChvcmctZm9vdG5vdGUtYXQtZGVmaW5pdGlvbi1wKSkN CgkgICAobm90IChvcmctaW4tcmVnZXhwIG9yZy1hbnktbGluay1yZSkpKQ0KICAgICAgKG9yZy1m b290bm90ZS1hY3Rpb24pKQ0KICAgICAodA0KICAgICAgKGxldCAodHlwZSBwYXRoIGxpbmsgbGlu ZSBzZWFyY2ggKHBvcyAocG9pbnQpKSkNCgkoY2F0Y2ggJ21hdGNoDQoJICAoc2F2ZS1leGN1cnNp b24NCgkgICAgKG9yIChvcmctaW4tcmVnZXhwIG9yZy1wbGFpbi1saW5rLXJlKQ0KCQkoc2tpcC1j aGFycy1mb3J3YXJkICJeXVxuXHIiKSkNCgkgICAgKHdoZW4gKG9yZy1pbi1yZWdleHAgb3JnLWJy YWNrZXQtbGluay1yZWdleHAgMSkNCgkgICAgICAoc2V0cSBsaW5rIChvcmctZXh0cmFjdC1hdHRy aWJ1dGVzDQoJCQkgIChvcmctbGluay11bmVzY2FwZSAob3JnLW1hdGNoLXN0cmluZy1uby1wcm9w ZXJ0aWVzIDEpKSkpDQoJICAgICAgKHdoaWxlIChzdHJpbmctbWF0Y2ggIiAqXG4gKiIgbGluaykN CgkJKHNldHEgbGluayAocmVwbGFjZS1tYXRjaCAiICIgdCB0IGxpbmspKSkNCgkgICAgICAoc2V0 cSBsaW5rIChvcmctbGluay1leHBhbmQtYWJicmV2IGxpbmspKQ0KCSAgICAgIChjb25kDQoJICAg ICAgICgob3IgKGZpbGUtbmFtZS1hYnNvbHV0ZS1wIGxpbmspDQoJCSAgICAoc3RyaW5nLW1hdGNo ICJeXFwuXFwuPy8iIGxpbmspKQ0KCQkoc2V0cSB0eXBlICJmaWxlIiBwYXRoIGxpbmspKQ0KCSAg ICAgICAoKHN0cmluZy1tYXRjaCBvcmctbGluay1yZS13aXRoLXNwYWNlMyBsaW5rKQ0KCQkoc2V0 cSB0eXBlIChtYXRjaC1zdHJpbmcgMSBsaW5rKSBwYXRoIChtYXRjaC1zdHJpbmcgMiBsaW5rKSkp DQoJICAgICAgICgoc3RyaW5nLW1hdGNoICJeaGVscDorXFwoLitcXCkiIGxpbmspDQoJCShzZXRx IHR5cGUgImhlbHAiIHBhdGggKG1hdGNoLXN0cmluZyAxIGxpbmspKSkNCgkgICAgICAgKHQgKHNl dHEgdHlwZSAidGhpc2ZpbGUiIHBhdGggbGluaykpKQ0KCSAgICAgICh0aHJvdyAnbWF0Y2ggdCkp KQ0KDQoJICAod2hlbiAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnb3JnLWxpbmtlZC10ZXh0 KQ0KCSAgICAoc2V0cSB0eXBlICJ0aGlzZmlsZSINCgkJICBwb3MgKGlmIChnZXQtdGV4dC1wcm9w ZXJ0eSAoMSsgKHBvaW50KSkgJ29yZy1saW5rZWQtdGV4dCkNCgkJCSAgKDErIChwb2ludCkpIChw b2ludCkpDQoJCSAgcGF0aCAoYnVmZmVyLXN1YnN0cmluZw0KCQkJKG9yIChwcmV2aW91cy1zaW5n bGUtcHJvcGVydHktY2hhbmdlIHBvcyAnb3JnLWxpbmtlZC10ZXh0KQ0KCQkJICAgIChwb2ludC1t aW4pKQ0KCQkJKG9yIChuZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2UgcG9zICdvcmctbGlua2Vk LXRleHQpDQoJCQkgICAgKHBvaW50LW1heCkpKQ0KCQkgIDs7IEVuc3VyZSB3ZSB3aWxsIHNlYXJj aCBmb3IgYSA8PDxyYWRpbz4+PiBsaW5rLCBub3QNCgkJICA7OyBhIHNpbXBsZSByZWZlcmVuY2Ug bGlrZSA8PHJlZj4+DQoJCSAgcGF0aCAoY29uY2F0ICI8IiBwYXRoKSkNCgkgICAgKHRocm93ICdt YXRjaCB0KSkNCg0KCSAgKHNhdmUtZXhjdXJzaW9uDQoJICAgICh3aGVuIChvciAob3JnLWluLXJl Z2V4cCBvcmctYW5nbGUtbGluay1yZSkNCgkJICAgICAgKGxldCAoKG1hdGNoIChvcmctaW4tcmVn ZXhwIG9yZy1wbGFpbi1saW5rLXJlKSkpDQoJCQk7OyBDaGVjayBhIHBsYWluIGxpbmsgaXMgbm90 IHdpdGhpbiBhIGJyYWNrZXQgbGluaw0KCQkJKGFuZCBtYXRjaA0KCQkJICAgICAoc2F2ZS1leGN1 cnNpb24NCgkJCSAgICAgICAoc2F2ZS1tYXRjaC1kYXRhDQoJCQkJIChwcm9nbg0KCQkJCSAgIChn b3RvLWNoYXIgKGNhciBtYXRjaCkpDQoJCQkJICAgKG5vdCAob3JnLWluLXJlZ2V4cCBvcmctYnJh Y2tldC1saW5rLXJlZ2V4cCkpKSkpKSkNCgkJICAgICAgKGxldCAoKGxpbmVfZW5kaW5nIChzYXZl LWV4Y3Vyc2lvbiAoZW5kLW9mLWxpbmUpIChwb2ludCkpKSkNCgkJCTs7IFdlIGFyZSBpbiBhIGxp bmUgYmVmb3JlIGEgcGxhaW4gb3IgYnJhY2tldCBsaW5rDQoJCQkob3IgKHJlLXNlYXJjaC1mb3J3 YXJkIG9yZy1wbGFpbi1saW5rLXJlIGxpbmVfZW5kaW5nIHQpDQoJCQkgICAgKHJlLXNlYXJjaC1m b3J3YXJkIG9yZy1icmFja2V0LWxpbmstcmVnZXhwIGxpbmVfZW5kaW5nIHQpKSkpDQoJICAgICAg KHNldHEgdHlwZSAobWF0Y2gtc3RyaW5nIDEpDQoJCSAgICBwYXRoIChvcmctbGluay11bmVzY2Fw ZSAobWF0Y2gtc3RyaW5nIDIpKSkNCiAgICAgICAgICAgICAgKHRocm93ICdtYXRjaCB0KSkpDQoJ ICAoc2F2ZS1leGN1cnNpb24NCgkgICAgKHdoZW4gKG9yZy1pbi1yZWdleHAgKG9yZy1yZSAiXFwo OltbOmFsbnVtOl1fQCMlOl0rXFwpOlsgXHRdKiQiKSkNCgkgICAgICAoc2V0cSB0eXBlICJ0YWdz Ig0KCQkgICAgcGF0aCAobWF0Y2gtc3RyaW5nIDEpKQ0KCSAgICAgICh3aGlsZSAoc3RyaW5nLW1h dGNoICI6IiBwYXRoKQ0KCQkoc2V0cSBwYXRoIChyZXBsYWNlLW1hdGNoICIrIiB0IHQgcGF0aCkp KQ0KCSAgICAgICh0aHJvdyAnbWF0Y2ggdCkpKQ0KCSAgKHdoZW4gKG9yZy1pbi1yZWdleHAgIjxc XChbXj48XG5dK1xcKT4iKQ0KCSAgICAoc2V0cSB0eXBlICJ0cmVlLW1hdGNoIg0KCQkgIHBhdGgg KG1hdGNoLXN0cmluZyAxKSkNCgkgICAgKHRocm93ICdtYXRjaCB0KSkpDQoJKHVubGVzcyBwYXRo DQoJICAodXNlci1lcnJvciAiTm8gbGluayBmb3VuZCIpKQ0KDQoJOzsgc3dpdGNoIGJhY2sgdG8g cmVmZXJlbmNlIGJ1ZmZlcg0KCTs7IG5lZWRlZCB3aGVuIGlmIGNhbGxlZCBpbiBhIHRlbXBvcmFy eSBidWZmZXIgdGhyb3VnaA0KCTs7IG9yZy1vcGVuLWxpbmstZnJvbS1zdHJpbmcNCgkod2l0aC1j dXJyZW50LWJ1ZmZlciAob3IgcmVmZXJlbmNlLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQ0KDQoJ ICA7OyBSZW1vdmUgYW55IHRyYWlsaW5nIHNwYWNlcyBpbiBwYXRoDQoJICAoaWYgKHN0cmluZy1t YXRjaCAiICtcXCciIHBhdGgpDQoJICAgICAgKHNldHEgcGF0aCAocmVwbGFjZS1tYXRjaCAiIiB0 IHQgcGF0aCkpKQ0KCSAgKGlmIChhbmQgb3JnLWxpbmstdHJhbnNsYXRpb24tZnVuY3Rpb24NCgkJ ICAgKGZib3VuZHAgb3JnLWxpbmstdHJhbnNsYXRpb24tZnVuY3Rpb24pKQ0KCSAgICAgIDs7IENo ZWNrIGlmIHdlIG5lZWQgdG8gdHJhbnNsYXRlIHRoZSBsaW5rDQoJICAgICAgKGxldCAoKHRtcCAo ZnVuY2FsbCBvcmctbGluay10cmFuc2xhdGlvbi1mdW5jdGlvbiB0eXBlIHBhdGgpKSkNCgkJKHNl dHEgdHlwZSAoY2FyIHRtcCkgcGF0aCAoY2RyIHRtcCkpKSkNCg0KCSAgKGNvbmQNCg0KCSAgICgo YXNzb2MgdHlwZSBvcmctbGluay1wcm90b2NvbHMpDQoJICAgIChmdW5jYWxsIChudGggMSAoYXNz b2MgdHlwZSBvcmctbGluay1wcm90b2NvbHMpKSBwYXRoKSkNCg0KCSAgICgoZXF1YWwgdHlwZSAi aGVscCIpDQoJICAgIChsZXQgKChmLW9yLXYgKGludGVybiBwYXRoKSkpDQoJICAgICAgKGNvbmQg KChmYm91bmRwIGYtb3ItdikNCgkJICAgICAoZGVzY3JpYmUtZnVuY3Rpb24gZi1vci12KSkNCgkJ ICAgICgoYm91bmRwIGYtb3ItdikNCgkJICAgICAoZGVzY3JpYmUtdmFyaWFibGUgZi1vci12KSkN CgkJICAgICh0IChlcnJvciAiTm90IGEga25vd24gZnVuY3Rpb24gb3IgdmFyaWFibGUiKSkpKSkN Cg0KCSAgICgoZXF1YWwgdHlwZSAibWFpbHRvIikNCgkgICAgKGxldCAoKGNtZCAoY2FyIG9yZy1s aW5rLW1haWx0by1wcm9ncmFtKSkNCgkJICAoYXJncyAoY2RyIG9yZy1saW5rLW1haWx0by1wcm9n cmFtKSkgYXJnczENCgkJICAoYWRkcmVzcyBwYXRoKSAoc3ViamVjdCAiIikgYSkNCgkgICAgICAo aWYgKHN0cmluZy1tYXRjaCAiXFwoLipcXCk6OlxcKC4qXFwpIiBwYXRoKQ0KCQkgIChzZXRxIGFk ZHJlc3MgKG1hdGNoLXN0cmluZyAxIHBhdGgpDQoJCQlzdWJqZWN0IChvcmctbGluay1lc2NhcGUg KG1hdGNoLXN0cmluZyAyIHBhdGgpKSkpDQoJICAgICAgKHdoaWxlIGFyZ3MNCgkJKGNvbmQNCgkJ ICgobm90IChzdHJpbmdwIChjYXIgYXJncykpKSAocHVzaCAocG9wIGFyZ3MpIGFyZ3MxKSkNCgkJ ICh0IChzZXRxIGEgKHBvcCBhcmdzKSkNCgkJICAgIChpZiAoc3RyaW5nLW1hdGNoICIlYSIgYSkN CgkJCShzZXRxIGEgKHJlcGxhY2UtbWF0Y2ggYWRkcmVzcyB0IHQgYSkpKQ0KCQkgICAgKGlmIChz dHJpbmctbWF0Y2ggIiVzIiBhKQ0KCQkJKHNldHEgYSAocmVwbGFjZS1tYXRjaCBzdWJqZWN0IHQg dCBhKSkpDQoJCSAgICAocHVzaCBhIGFyZ3MxKSkpKQ0KCSAgICAgIChhcHBseSBjbWQgKG5yZXZl cnNlIGFyZ3MxKSkpKQ0KDQoJICAgKChtZW1iZXIgdHlwZSAnKCJodHRwIiAiaHR0cHMiICJmdHAi ICJuZXdzIikpDQoJICAgIChicm93c2UtdXJsDQoJICAgICAoY29uY2F0IHR5cGUgIjoiDQoJCSAg ICAgKGlmIChvcmctc3RyaW5nLW1hdGNoLXANCgkJCSAgKGNvbmNhdCAiW1s6bm9uYXNjaWk6XSIN CgkJCQkgIG9yZy1saW5rLWVzY2FwZS1jaGFycy1icm93c2VyICJdIikNCgkJCSAgcGF0aCkNCgkJ CSAob3JnLWxpbmstZXNjYXBlIHBhdGggb3JnLWxpbmstZXNjYXBlLWNoYXJzLWJyb3dzZXIpDQoJ CSAgICAgICBwYXRoKSkpKQ0KDQoJICAgKChzdHJpbmc9IHR5cGUgImRvaSIpDQoJICAgIChicm93 c2UtdXJsDQoJICAgICAoY29uY2F0IG9yZy1kb2ktc2VydmVyLXVybA0KCQkgICAgIChpZiAob3Jn LXN0cmluZy1tYXRjaC1wDQoJCQkgIChjb25jYXQgIltbOm5vbmFzY2lpOl0iDQoJCQkJICBvcmct bGluay1lc2NhcGUtY2hhcnMtYnJvd3NlciAiXSIpDQoJCQkgIHBhdGgpDQoJCQkgKG9yZy1saW5r LWVzY2FwZSBwYXRoIG9yZy1saW5rLWVzY2FwZS1jaGFycy1icm93c2VyKQ0KCQkgICAgICAgcGF0 aCkpKSkNCg0KCSAgICgobWVtYmVyIHR5cGUgJygibWVzc2FnZSIpKQ0KCSAgICAoYnJvd3NlLXVy bCAoY29uY2F0IHR5cGUgIjoiIHBhdGgpKSkNCg0KCSAgICgoc3RyaW5nPSB0eXBlICJ0YWdzIikN CgkgICAgKG9yZy10YWdzLXZpZXcgYXJnIHBhdGgpKQ0KDQoJICAgKChzdHJpbmc9IHR5cGUgInRy ZWUtbWF0Y2giKQ0KCSAgICAob3JnLW9jY3VyIChjb25jYXQgIlxcWyIgKHJlZ2V4cC1xdW90ZSBw YXRoKSAiXFxdIikpKQ0KDQoJICAgKChzdHJpbmc9IHR5cGUgImZpbGUiKQ0KCSAgICAoaWYgKHN0 cmluZy1tYXRjaCAiOjpcXChbMC05XStcXClcXCciIHBhdGgpDQoJCShzZXRxIGxpbmUgKHN0cmlu Zy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAxIHBhdGgpKQ0KCQkgICAgICBwYXRoIChzdWJzdHJp bmcgcGF0aCAwIChtYXRjaC1iZWdpbm5pbmcgMCkpKQ0KCSAgICAgIChpZiAoc3RyaW5nLW1hdGNo ICI6OlxcKC4rXFwpXFwnIiBwYXRoKQ0KCQkgIChzZXRxIHNlYXJjaCAobWF0Y2gtc3RyaW5nIDEg cGF0aCkNCgkJCXBhdGggKHN1YnN0cmluZyBwYXRoIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkpKSkN CgkgICAgKGlmIChzdHJpbmctbWF0Y2ggIlsqP3tdIiAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBw YXRoKSkNCgkJKGRpcmVkIHBhdGgpDQoJICAgICAgKG9yZy1vcGVuLWZpbGUgcGF0aCBhcmcgbGlu ZSBzZWFyY2gpKSkNCg0KCSAgICgoc3RyaW5nPSB0eXBlICJzaGVsbCIpDQoJICAgIChsZXQgKChi dWYgKGdlbmVyYXRlLW5ldy1idWZmZXIgIipPcmcgU2hlbGwgT3V0cHV0IikpDQoJCSAgKGNtZCBw YXRoKSkNCgkgICAgICAoaWYgKG9yIChhbmQgKG5vdCAoc3RyaW5nPSBvcmctY29uZmlybS1zaGVs bC1saW5rLW5vdC1yZWdleHAgIiIpKQ0KCQkJICAgKHN0cmluZy1tYXRjaCBvcmctY29uZmlybS1z aGVsbC1saW5rLW5vdC1yZWdleHAgY21kKSkNCgkJICAgICAgKG5vdCBvcmctY29uZmlybS1zaGVs bC1saW5rLWZ1bmN0aW9uKQ0KCQkgICAgICAoZnVuY2FsbCBvcmctY29uZmlybS1zaGVsbC1saW5r LWZ1bmN0aW9uDQoJCQkgICAgICAgKGZvcm1hdCAiRXhlY3V0ZSBcIiVzXCIgaW4gc2hlbGw/ICIN CgkJCQkgICAgICAgKG9yZy1hZGQtcHJvcHMgY21kIG5pbA0KCQkJCQkgJ2ZhY2UgJ29yZy13YXJu aW5nKSkpKQ0KCQkgIChwcm9nbg0KCQkgICAgKG1lc3NhZ2UgIkV4ZWN1dGluZyAlcyIgY21kKQ0K CQkgICAgKHNoZWxsLWNvbW1hbmQgY21kIGJ1ZikNCgkJICAgIChpZiAoZmVhdHVyZXAgJ21pZG5p Z2h0KQ0KCQkJKHNldHEgY2xlYW4tYnVmZmVyLWxpc3Qta2lsbC1idWZmZXItbmFtZXMNCgkJCSAg ICAgIChjb25zIGJ1ZiBjbGVhbi1idWZmZXItbGlzdC1raWxsLWJ1ZmZlci1uYW1lcykpKSkNCgkJ KGVycm9yICJBYm9ydCIpKSkpDQoNCgkgICAoKHN0cmluZz0gdHlwZSAiZWxpc3AiKQ0KCSAgICAo bGV0ICgoY21kIHBhdGgpKQ0KCSAgICAgIChpZiAob3IgKGFuZCAobm90IChzdHJpbmc9IG9yZy1j b25maXJtLWVsaXNwLWxpbmstbm90LXJlZ2V4cCAiIikpDQoJCQkgICAoc3RyaW5nLW1hdGNoIG9y Zy1jb25maXJtLWVsaXNwLWxpbmstbm90LXJlZ2V4cCBjbWQpKQ0KCQkgICAgICAobm90IG9yZy1j b25maXJtLWVsaXNwLWxpbmstZnVuY3Rpb24pDQoJCSAgICAgIChmdW5jYWxsIG9yZy1jb25maXJt LWVsaXNwLWxpbmstZnVuY3Rpb24NCgkJCSAgICAgICAoZm9ybWF0ICJFeGVjdXRlIFwiJXNcIiBh cyBlbGlzcD8gIg0KCQkJCSAgICAgICAob3JnLWFkZC1wcm9wcyBjbWQgbmlsDQoJCQkJCSAnZmFj ZSAnb3JnLXdhcm5pbmcpKSkpDQoJCSAgKG1lc3NhZ2UgIiVzID0+ICVzIiBjbWQNCgkJCSAgIChp ZiAoZXF1YWwgKHN0cmluZy10by1jaGFyIGNtZCkgP1woKQ0KCQkJICAgICAgIChldmFsIChyZWFk IGNtZCkpDQoJCQkgICAgIChjYWxsLWludGVyYWN0aXZlbHkgKHJlYWQgY21kKSkpKQ0KCQkoZXJy b3IgIkFib3J0IikpKSkNCg0KCSAgICgoYW5kIChzdHJpbmc9IHR5cGUgInRoaXNmaWxlIikNCgkJ IChvciAocnVuLWhvb2std2l0aC1hcmdzLXVudGlsLXN1Y2Nlc3MNCgkJICAgICAgJ29yZy1vcGVu LWxpbmstZnVuY3Rpb25zIHBhdGgpDQoJCSAgICAgKGFuZCBsaW5rDQoJCQkgIChzdHJpbmctbWF0 Y2ggIl5pZDoiIGxpbmspDQoJCQkgIChvciAoZmVhdHVyZXAgJ29yZy1pZCkgKHJlcXVpcmUgJ29y Zy1pZCkpDQoJCQkgIChwcm9nbg0KCQkJICAgIChmdW5jYWxsIChudGggMSAoYXNzb2MgImlkIiBv cmctbGluay1wcm90b2NvbHMpKQ0KCQkJCSAgICAgKHN1YnN0cmluZyBwYXRoIDMpKQ0KCQkJICAg IHQpKSkpKQ0KDQoJICAgKChzdHJpbmc9IHR5cGUgInRoaXNmaWxlIikNCgkgICAgKGlmIGFyZw0K CQkoc3dpdGNoLXRvLWJ1ZmZlci1vdGhlci13aW5kb3cNCgkJIChvcmctZ2V0LWJ1ZmZlci1mb3It aW50ZXJuYWwtbGluayAoY3VycmVudC1idWZmZXIpKSkNCgkgICAgICAob3JnLW1hcmstcmluZy1w dXNoKSkNCgkgICAgKGxldCAoKGNtZCBgKG9yZy1saW5rLXNlYXJjaA0KCQkJICxwYXRoDQoJCQkg LChjb25kICgoZXF1YWwgYXJnICcoNCkpICcnb2NjdXIpDQoJCQkJKChlcXVhbCBhcmcgJygxNikp ICcnb3JnLW9jY3VyKSkNCgkJCSAscG9zKSkpDQoJICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbCAo bGV0ICgob3JnLWxpbmstc2VhcmNoLWluaGliaXQtcXVlcnkgdCkpDQoJCQkJICAgIChldmFsIGNt ZCkpDQoJCShlcnJvciAocHJvZ24gKHdpZGVuKSAoZXZhbCBjbWQpKSkpKSkNCg0KCSAgICh0IChi cm93c2UtdXJsLWF0LXBvaW50KSkpKSkpKQ0KICAgIChtb3ZlLW1hcmtlciBvcmctb3Blbi1saW5r LW1hcmtlciBuaWwpDQogICAgKHJ1bi1ob29rLXdpdGgtYXJncyAnb3JnLWZvbGxvdy1saW5rLWhv b2spKSkNCg0KKGRlZnN1YnN0IG9yZy11bmlxdWlmeSAobGlzdCkNCiAgIk5vbi1kZXN0cnVjdGl2 ZWx5IHJlbW92ZSBkdXBsaWNhdGUgZWxlbWVudHMgZnJvbSBMSVNULiINCiAgKGxldCAoKHJlcyAo Y29weS1zZXF1ZW5jZSBsaXN0KSkpIChkZWxldGUtZHVwcyByZXMpKSkNCg0KKGRlZnVuIG9yZy1v ZmZlci1saW5rcy1pbi1lbnRyeSAoYnVmZmVyIG1hcmtlciAmb3B0aW9uYWwgbnRoIHplcm8pDQog ICJPZmZlciBsaW5rcyBpbiB0aGUgY3VycmVudCBlbnRyeSBhbmQgcmV0dXJuIHRoZSBzZWxlY3Rl ZCBsaW5rLg0KSWYgdGhlcmUgaXMgb25seSBvbmUgbGluaywgcmV0dXJuIGl0Lg0KSWYgTlRIIGlz IGFuIGludGVnZXIsIHJldHVybiB0aGUgTlRIIGxpbmsgZm91bmQuDQpJZiBaRVJPIGlzIGEgc3Ry aW5nLCBjaGVjayBhbHNvIHRoaXMgc3RyaW5nIGZvciBhIGxpbmssIGFuZCBpZg0KdGhlcmUgaXMg b25lLCByZXR1cm4gaXQuIg0KICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXINCiAgICAoc2F2 ZS1leGN1cnNpb24NCiAgICAgIChzYXZlLXJlc3RyaWN0aW9uDQoJKHdpZGVuKQ0KCShnb3RvLWNo YXIgbWFya2VyKQ0KCShsZXQgKChyZSAoY29uY2F0ICJcXCgiIG9yZy1icmFja2V0LWxpbmstcmVn ZXhwICJcXClcXHwiDQoJCQkgICJcXCgiIG9yZy1hbmdsZS1saW5rLXJlICJcXClcXHwiDQoJCQkg ICJcXCgiIG9yZy1wbGFpbi1saW5rLXJlICJcXCkiKSkNCgkgICAgICAoY250ID8wKQ0KCSAgICAg IChpbi1lbWFjcyAoaWYgKGludGVnZXJwIG50aCkgbmlsIG50aCkpDQoJICAgICAgaGF2ZS16ZXJv IGVuZCBsaW5rcyBsaW5rIGMpDQoJICAod2hlbiAoYW5kIChzdHJpbmdwIHplcm8pIChzdHJpbmct bWF0Y2ggb3JnLWJyYWNrZXQtbGluay1yZWdleHAgemVybykpDQoJICAgIChwdXNoIChtYXRjaC1z dHJpbmcgMCB6ZXJvKSBsaW5rcykNCgkgICAgKHNldHEgY250ICgxLSBjbnQpIGhhdmUtemVybyB0 KSkNCgkgIChzYXZlLWV4Y3Vyc2lvbg0KCSAgICAob3JnLWJhY2stdG8taGVhZGluZyB0KQ0KCSAg ICAoc2V0cSBlbmQgKHNhdmUtZXhjdXJzaW9uIChvdXRsaW5lLW5leHQtaGVhZGluZykgKHBvaW50 KSkpDQoJICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgcmUgZW5kIHQpDQoJICAgICAgKHB1 c2ggKG1hdGNoLXN0cmluZyAwKSBsaW5rcykpDQoJICAgIChzZXRxIGxpbmtzIChvcmctdW5pcXVp ZnkgKHJldmVyc2UgbGlua3MpKSkpDQoJICAoY29uZA0KCSAgICgobnVsbCBsaW5rcykNCgkgICAg KG1lc3NhZ2UgIk5vIGxpbmtzIikpDQoJICAgKChlcXVhbCAobGVuZ3RoIGxpbmtzKSAxKQ0KCSAg ICAoc2V0cSBsaW5rIChjYXIgbGlua3MpKSkNCgkgICAoKGFuZCAoaW50ZWdlcnAgbnRoKSAoPj0g KGxlbmd0aCBsaW5rcykgKGlmIGhhdmUtemVybyAoMSsgbnRoKSBudGgpKSkNCgkgICAgKHNldHEg bGluayAobnRoIChpZiBoYXZlLXplcm8gbnRoICgxLSBudGgpKSBsaW5rcykpKQ0KCSAgICh0IDsg d2UgaGF2ZSB0byBzZWxlY3QgYSBsaW5rDQoJICAgIChzYXZlLWV4Y3Vyc2lvbg0KCSAgICAgIChz YXZlLXdpbmRvdy1leGN1cnNpb24NCgkJKGRlbGV0ZS1vdGhlci13aW5kb3dzKQ0KCQkod2l0aC1v dXRwdXQtdG8tdGVtcC1idWZmZXIgIipTZWxlY3QgTGluayoiDQoJCSAgKG1hcGMgKGxhbWJkYSAo bCkNCgkJCSAgKGlmIChub3QgKHN0cmluZy1tYXRjaCBvcmctYnJhY2tldC1saW5rLXJlZ2V4cCBs KSkNCgkJCSAgICAgIChwcmluYyAoZm9ybWF0ICJbJWNdICAlc1xuIiAoaW5jZiBjbnQpDQoJCQkJ CSAgICAgKG9yZy1yZW1vdmUtYW5nbGUtYnJhY2tldHMgbCkpKQ0KCQkJICAgIChpZiAobWF0Y2gt ZW5kIDMpDQoJCQkJKHByaW5jIChmb3JtYXQgIlslY10gICVzICglcylcbiIgKGluY2YgY250KQ0K CQkJCQkgICAgICAgKG1hdGNoLXN0cmluZyAzIGwpIChtYXRjaC1zdHJpbmcgMSBsKSkpDQoJCQkg ICAgICAocHJpbmMgKGZvcm1hdCAiWyVjXSAgJXNcbiIgKGluY2YgY250KQ0KCQkJCQkgICAgICht YXRjaC1zdHJpbmcgMSBsKSkpKSkpDQoJCQlsaW5rcykpDQoJCShvcmctZml0LXdpbmRvdy10by1i dWZmZXIgKGdldC1idWZmZXItd2luZG93ICIqU2VsZWN0IExpbmsqIikpDQoJCShtZXNzYWdlICJT ZWxlY3QgbGluayB0byBvcGVuLCBSRVQgdG8gb3BlbiBhbGw6IikNCgkJKHNldHEgYyAocmVhZC1j aGFyLWV4Y2x1c2l2ZSkpDQoJCShhbmQgKGdldC1idWZmZXIgIipTZWxlY3QgTGluayoiKSAoa2ls bC1idWZmZXIgIipTZWxlY3QgTGluayoiKSkpKQ0KCSAgICAod2hlbiAoZXF1YWwgYyA/cSkgKGVy cm9yICJBYm9ydCIpKQ0KCSAgICAoaWYgKGVxdWFsIGMgP1xDLW0pDQoJCShzZXRxIGxpbmsgbGlu a3MpDQoJICAgICAgKHNldHEgbnRoICgtIGMgPzApKQ0KCSAgICAgIChpZiBoYXZlLXplcm8gKHNl dHEgbnRoICgxKyBudGgpKSkNCgkgICAgICAodW5sZXNzIChhbmQgKGludGVnZXJwIG50aCkgKD49 IChsZW5ndGggbGlua3MpIG50aCkpDQoJCSh1c2VyLWVycm9yICJJbnZhbGlkIGxpbmsgc2VsZWN0 aW9uIikpDQoJICAgICAgKHNldHEgbGluayAobnRoICgxLSBudGgpIGxpbmtzKSkpKSkNCgkgIChj b25zIGxpbmsgZW5kKSkpKSkpDQoNCjs7IEFkZCBzcGVjaWFsIGZpbGUgbGlua3MgdGhhdCBzcGVj aWZ5IHRoZSB3YXkgb2Ygb3BlbmluZw0KDQoob3JnLWFkZC1saW5rLXR5cGUgImZpbGUrc3lzIiAn b3JnLW9wZW4tZmlsZS13aXRoLXN5c3RlbSkNCihvcmctYWRkLWxpbmstdHlwZSAiZmlsZStlbWFj cyIgJ29yZy1vcGVuLWZpbGUtd2l0aC1lbWFjcykNCihkZWZ1biBvcmctb3Blbi1maWxlLXdpdGgt c3lzdGVtIChwYXRoKQ0KICAiT3BlbiBmaWxlIGF0IFBBVEggdXNpbmcgdGhlIHN5c3RlbSB3YXkg b2Ygb3BlbmluZyBpdC4iDQogIChvcmctb3Blbi1maWxlIHBhdGggJ3N5c3RlbSkpDQooZGVmdW4g b3JnLW9wZW4tZmlsZS13aXRoLWVtYWNzIChwYXRoKQ0KICAiT3BlbiBmaWxlIGF0IFBBVEggaW4g RW1hY3MuIg0KICAob3JnLW9wZW4tZmlsZSBwYXRoICdlbWFjcykpDQoNCg0KOzs7IEZpbGUgc2Vh cmNoDQoNCihkZWZ2YXIgb3JnLWNyZWF0ZS1maWxlLXNlYXJjaC1mdW5jdGlvbnMgbmlsDQogICJM aXN0IG9mIGZ1bmN0aW9ucyB0byBjb25zdHJ1Y3QgdGhlIHJpZ2h0IHNlYXJjaCBzdHJpbmcgZm9y IGEgZmlsZSBsaW5rLg0KVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gdHVybiB3aXRoIHBv aW50IGF0IHRoZSBsb2NhdGlvbiB0bw0Kd2hpY2ggdGhlIGxpbmsgc2hvdWxkIHBvaW50Lg0KDQpB IGZ1bmN0aW9uIGluIHRoZSBob29rIHNob3VsZCBmaXJzdCB0ZXN0IGlmIGl0IHdvdWxkIGxpa2Ug dG8NCmhhbmRsZSB0aGlzIGZpbGUgdHlwZSwgZm9yIGV4YW1wbGUgYnkgY2hlY2tpbmcgdGhlIGBt YWpvci1tb2RlJw0Kb3IgdGhlIGZpbGUgZXh0ZW5zaW9uLiAgSWYgaXQgZGVjaWRlcyBub3QgdG8g aGFuZGxlIHRoaXMgZmlsZSwgaXQNCnNob3VsZCBqdXN0IHJldHVybiBuaWwgdG8gZ2l2ZSBvdGhl ciBmdW5jdGlvbnMgYSBjaGFuY2UuICBJZiBpdA0KZG9lcyBoYW5kbGUgdGhlIGZpbGUsIGl0IG11 c3QgcmV0dXJuIHRoZSBzZWFyY2ggc3RyaW5nIHRvIGJlIHVzZWQNCndoZW4gZm9sbG93aW5nIHRo ZSBsaW5rLiAgVGhlIHNlYXJjaCBzdHJpbmcgd2lsbCBiZSBwYXJ0IG9mIHRoZQ0KZmlsZSBsaW5r LCBnaXZlbiBhZnRlciBhIGRvdWJsZSBjb2xvbiwgYW5kIGBvcmctb3Blbi1hdC1wb2ludCcNCndp bGwgYXV0b21hdGljYWxseSBzZWFyY2ggZm9yIGl0LiAgSWYgc3BlY2lhbCBtZWFzdXJlcyBtdXN0 IGJlDQp0YWtlbiB0byBtYWtlIHRoZSBzZWFyY2ggc3VjY2Vzc2Z1bCwgYW5vdGhlciBmdW5jdGlv biBzaG91bGQgYmUNCmFkZGVkIHRvIHRoZSBjb21wYW5pb24gaG9vayBgb3JnLWV4ZWN1dGUtZmls ZS1zZWFyY2gtZnVuY3Rpb25zJywNCndoaWNoIHNlZS4NCg0KQSBmdW5jdGlvbiBpbiB0aGlzIGhv b2sgbWF5IGFsc28gdXNlIGBzZXRxJyB0byBzZXQgdGhlIHZhcmlhYmxlDQpgZGVzY3JpcHRpb24n IHRvIHByb3ZpZGUgYSBzdWdnZXN0aW9uIGZvciB0aGUgZGVzY3JpcHRpdmUgdGV4dCB0bw0KYmUg dXNlZCBmb3IgdGhpcyBsaW5rIHdoZW4gaXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGFuIE9yZy1tb2Rl DQpidWZmZXIgd2l0aCBcXFtvcmctaW5zZXJ0LWxpbmtdLiIpDQoNCihkZWZ2YXIgb3JnLWV4ZWN1 dGUtZmlsZS1zZWFyY2gtZnVuY3Rpb25zIG5pbA0KICAiTGlzdCBvZiBmdW5jdGlvbnMgdG8gZXhl Y3V0ZSBhIGZpbGUgc2VhcmNoIHRyaWdnZXJlZCBieSBhIGxpbmsuDQoNCkZ1bmN0aW9ucyBhZGRl ZCB0byB0aGlzIGhvb2sgbXVzdCBhY2NlcHQgYSBzaW5nbGUgYXJndW1lbnQsIHRoZQ0Kc2VhcmNo IHN0cmluZyB0aGF0IHdhcyBwYXJ0IG9mIHRoZSBmaWxlIGxpbmssIHRoZSBwYXJ0IGFmdGVyIHRo ZQ0KZG91YmxlIGNvbG9uLiAgVGhlIGZ1bmN0aW9uIG11c3QgZmlyc3QgY2hlY2sgaWYgaXQgd291 bGQgbGlrZSB0bw0KaGFuZGxlIHRoaXMgc2VhcmNoLCBmb3IgZXhhbXBsZSBieSBjaGVja2luZyB0 aGUgYG1ham9yLW1vZGUnIG9yDQp0aGUgZmlsZSBleHRlbnNpb24uICBJZiBpdCBkZWNpZGVzIG5v dCB0byBoYW5kbGUgdGhpcyBzZWFyY2gsIGl0DQpzaG91bGQganVzdCByZXR1cm4gbmlsIHRvIGdp dmUgb3RoZXIgZnVuY3Rpb25zIGEgY2hhbmNlLiAgSWYgaXQNCmRvZXMgaGFuZGxlIHRoZSBzZWFy Y2gsIGl0IG11c3QgcmV0dXJuIGEgbm9uLW5pbCB2YWx1ZSB0byBrZWVwDQpvdGhlciBmdW5jdGlv bnMgZnJvbSB0cnlpbmcuDQoNCkVhY2ggZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgY3VycmVudCBw cmVmaXggYXJndW1lbnQgdGhyb3VnaCB0aGUNCnZhcmlhYmxlIGBjdXJyZW50LXByZWZpeC1hcmcn LiAgTm90ZSB0aGF0IGEgc2luZ2xlIHByZWZpeCBpcyB1c2VkDQp0byBmb3JjZSBvcGVuaW5nIGEg bGluayBpbiBFbWFjcywgc28gaXQgbWF5IGJlIGdvb2QgdG8gb25seSB1c2UgYQ0KbnVtZXJpYyBv ciBkb3VibGUgcHJlZml4IHRvIGd1aWRlIHRoZSBzZWFyY2ggZnVuY3Rpb24uDQoNCkluIGNhc2Ug dGhpcyBpcyBuZWVkZWQsIGEgZnVuY3Rpb24gaW4gdGhpcyBob29rIGNhbiBhbHNvIHJlc3RvcmUN CnRoZSB3aW5kb3cgY29uZmlndXJhdGlvbiBiZWZvcmUgYG9yZy1vcGVuLWF0LXBvaW50JyB3YXMg Y2FsbGVkIHVzaW5nOg0KDQogICAgKHNldC13aW5kb3ctY29uZmlndXJhdGlvbiBvcmctd2luZG93 LWNvbmZpZy1iZWZvcmUtZm9sbG93LWxpbmspIikNCg0KKGRlZnVuIG9yZy1saW5rLXNlYXJjaCAo cyAmb3B0aW9uYWwgdHlwZSBhdm9pZC1wb3Mgc3RlYWx0aCkNCiAgIlNlYXJjaCBmb3IgYSBsaW5r IHNlYXJjaCBvcHRpb24uDQpJZiBTIGlzIHN1cnJvdW5kZWQgYnkgZm9yd2FyZCBzbGFzaGVzLCBp dCBpcyBpbnRlcnByZXRlZCBhcyBhDQpyZWd1bGFyIGV4cHJlc3Npb24uICBJbiBvcmctbW9kZSBm aWxlcywgdGhpcyB3aWxsIGNyZWF0ZSBhbiBgb3JnLW9jY3VyJw0Kc3BhcnNlIHRyZWUuICBJbiBv cmRpbmFyeSBmaWxlcywgYG9jY3VyJyB3aWxsIGJlIHVzZWQgdG8gbGlzdCBtYXRjaGVzLg0KSWYg dGhlIGN1cnJlbnQgYnVmZmVyIGlzIGluIGBkaXJlZC1tb2RlJywgZ3JlcCB3aWxsIGJlIHVzZWQg dG8gc2VhcmNoDQppbiBhbGwgZmlsZXMuICBJZiBBVk9JRC1QT1MgaXMgZ2l2ZW4sIGlnbm9yZSBt YXRjaGVzIG5lYXIgdGhhdCBwb3NpdGlvbi4NCg0KV2hlbiBvcHRpb25hbCBhcmd1bWVudCBTVEVB TFRIIGlzIG5vbi1uaWwsIGRvIG5vdCBtb2RpZnkNCnZpc2liaWxpdHkgYXJvdW5kIHBvaW50LCB0 aHVzIGlnbm9yaW5nDQpgb3JnLXNob3ctaGllcmFyY2h5LWFib3ZlJywgYG9yZy1zaG93LWZvbGxv d2luZy1oZWFkaW5nJyBhbmQNCmBvcmctc2hvdy1zaWJsaW5ncycgdmFyaWFibGVzLiINCiAgKGxl dCAoKGNhc2UtZm9sZC1zZWFyY2ggdCkNCgkoczAgKG1hcGNvbmNhdCAnaWRlbnRpdHkgKG9yZy1z cGxpdC1zdHJpbmcgcyAiWyBcdFxyXG5dKyIpICIgIikpDQoJKG1hcmtlcnMgKGNvbmNhdCAiXFwo PzoiIChtYXBjb25jYXQgKGxhbWJkYSAoeCkgKHJlZ2V4cC1xdW90ZSAoY2FyIHgpKSkNCgkJCQkJ ICAgIChhcHBlbmQgJygoIiIpICgiICIpICgiXHQiKSAoIlxuIikpDQoJCQkJCQkgICAgb3JnLWVt cGhhc2lzLWFsaXN0KQ0KCQkJCQkgICAgIlxcfCIpICJcXCkiKSkNCgkocG9zIChwb2ludCkpDQoJ KHByZSBuaWwpIChwb3N0IG5pbCkNCgl3b3JkcyByZTAgcmUxIHJlMiByZTMgcmU0XyByZTQgcmU1 IHJlMmEgcmUyYV8gcmVhbGwpDQogICAgKGNvbmQNCiAgICAgOzsgRmlyc3QgY2hlY2sgaWYgdGhl cmUgYXJlIGFueSBzcGVjaWFsIHNlYXJjaCBmdW5jdGlvbnMNCiAgICAgKChydW4taG9vay13aXRo LWFyZ3MtdW50aWwtc3VjY2VzcyAnb3JnLWV4ZWN1dGUtZmlsZS1zZWFyY2gtZnVuY3Rpb25zIHMp KQ0KICAgICA7OyBOb3cgdHJ5IHRoZSBidWlsdGluIHN0dWZmDQogICAgICgoYW5kIChlcXVhbCAo c3RyaW5nLXRvLWNoYXIgczApID8jKQ0KCSAgICg+IChsZW5ndGggczApIDEpDQoJICAgKHNhdmUt ZXhjdXJzaW9uDQoJICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KCSAgICAgKGFuZA0KCSAg ICAgIChyZS1zZWFyY2gtZm9yd2FyZA0KCSAgICAgICAoY29uY2F0ICJeWyBcdF0qOkNVU1RPTV9J RDpbIFx0XSsiDQoJCSAgICAgICAocmVnZXhwLXF1b3RlIChzdWJzdHJpbmcgczAgMSkpICJbIFx0 XSokIikgbmlsIHQpDQoJICAgICAgKHNldHEgdHlwZSAnZGVkaWNhdGVkDQoJCSAgICBwb3MgKG1h dGNoLWJlZ2lubmluZyAwKSkpKQ0KCSAgIDs7IFRoZXJlIGlzIGFuIGV4YWN0IHRhcmdldCBmb3Ig dGhpcw0KCSAgIChnb3RvLWNoYXIgcG9zKQ0KCSAgIChvcmctYmFjay10by1oZWFkaW5nIHQpKSkN CiAgICAgKChzYXZlLWV4Y3Vyc2lvbg0KCShnb3RvLWNoYXIgKHBvaW50LW1pbikpDQoJKGFuZA0K CSAocmUtc2VhcmNoLWZvcndhcmQNCgkgIChjb25jYXQgIjw8IiAocmVnZXhwLXF1b3RlIHMwKSAi Pj4iKSBuaWwgdCkNCgkgKHNldHEgdHlwZSAnZGVkaWNhdGVkDQoJICAgICAgIHBvcyAobWF0Y2gt YmVnaW5uaW5nIDApKSkpDQogICAgICA7OyBUaGVyZSBpcyBhbiBleGFjdCB0YXJnZXQgZm9yIHRo aXMNCiAgICAgIChnb3RvLWNoYXIgcG9zKSkNCiAgICAgKChzYXZlLWV4Y3Vyc2lvbg0KCShnb3Rv LWNoYXIgKHBvaW50LW1pbikpDQoJKGFuZA0KCSAocmUtc2VhcmNoLWZvcndhcmQNCgkgIChmb3Jt YXQgIl5bIFx0XSojXFwrTkFNRTogJXMiIChyZWdleHAtcXVvdGUgczApKSBuaWwgdCkNCgkgKHNl dHEgdHlwZSAnZGVkaWNhdGVkIHBvcyAobWF0Y2gtYmVnaW5uaW5nIDApKSkpDQogICAgICA7OyBG b3VuZCBhbiBlbGVtZW50IHdpdGggYSBtYXRjaGluZyAjK25hbWUgYWZmaWxpYXRlZCBrZXl3b3Jk Lg0KICAgICAgKGdvdG8tY2hhciBwb3MpKQ0KICAgICAoKGFuZCAoc3RyaW5nLW1hdGNoICJeKFxc KC4qXFwpKSQiIHMwKQ0KCSAgIChzYXZlLWV4Y3Vyc2lvbg0KCSAgICAgKGdvdG8tY2hhciAocG9p bnQtbWluKSkNCgkgICAgIChhbmQNCgkgICAgICAocmUtc2VhcmNoLWZvcndhcmQNCgkgICAgICAg KGNvbmNhdCAiW15bXSIgKHJlZ2V4cC1xdW90ZQ0KCQkJICAgICAgIChmb3JtYXQgb3JnLWNvZGVy ZWYtbGFiZWwtZm9ybWF0DQoJCQkJICAgICAgIChtYXRjaC1zdHJpbmcgMSBzMCkpKSkNCgkgICAg ICAgbmlsIHQpDQoJICAgICAgKHNldHEgdHlwZSAnZGVkaWNhdGVkDQoJCSAgICBwb3MgKDErICht YXRjaC1iZWdpbm5pbmcgMCkpKSkpKQ0KICAgICAgOzsgVGhlcmUgaXMgYSBjb2RlcmVmIHRhcmdl dCBmb3IgdGhpcw0KICAgICAgKGdvdG8tY2hhciBwb3MpKQ0KICAgICAoKHN0cmluZy1tYXRjaCAi Xi9cXCguKlxcKS8kIiBzKQ0KICAgICAgOzsgQSByZWd1bGFyIGV4cHJlc3Npb24NCiAgICAgIChj b25kDQogICAgICAgKChkZXJpdmVkLW1vZGUtcCAnb3JnLW1vZGUpDQoJKG9yZy1vY2N1ciAobWF0 Y2gtc3RyaW5nIDEgcykpKQ0KICAgICAgICh0IChvcmctZG8tb2NjdXIgKG1hdGNoLXN0cmluZyAx IHMpKSkpKQ0KICAgICAoKGFuZCAoZGVyaXZlZC1tb2RlLXAgJ29yZy1tb2RlKSBvcmctbGluay1z ZWFyY2gtbXVzdC1tYXRjaC1leGFjdC1oZWFkbGluZSkNCiAgICAgIChhbmQgKGVxdWFsIChzdHJp bmctdG8tY2hhciBzKSA/KikgKHNldHEgcyAoc3Vic3RyaW5nIHMgMSkpKQ0KICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWluKSkNCiAgICAgIChjb25kDQogICAgICAgKChsZXQgKGNhc2UtZm9sZC1z ZWFyY2gpDQoJICAocmUtc2VhcmNoLWZvcndhcmQgKGZvcm1hdCBvcmctY29tcGxleC1oZWFkaW5n LXJlZ2V4cC1mb3JtYXQNCgkJCQkgICAgIChyZWdleHAtcXVvdGUgcykpDQoJCQkgICAgIG5pbCB0 KSkNCgk7OyBPSywgZm91bmQgYSBtYXRjaA0KCShzZXRxIHR5cGUgJ2RlZGljYXRlZCkNCgkoZ290 by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMCkpKQ0KICAgICAgICgoYW5kIChub3Qgb3JnLWxpbmst c2VhcmNoLWluaGliaXQtcXVlcnkpDQoJICAgICAoZXEgb3JnLWxpbmstc2VhcmNoLW11c3QtbWF0 Y2gtZXhhY3QtaGVhZGxpbmUgJ3F1ZXJ5LXRvLWNyZWF0ZSkNCgkgICAgICh5LW9yLW4tcCAiTm8g bWF0Y2ggLSBjcmVhdGUgdGhpcyBhcyBhIG5ldyBoZWFkaW5nPyAiKSkNCgkoZ290by1jaGFyIChw b2ludC1tYXgpKQ0KCShvciAoYm9scCkgKG5ld2xpbmUpKQ0KCShpbnNlcnQgIiogIiBzICJcbiIp DQoJKGJlZ2lubmluZy1vZi1saW5lIDApKQ0KICAgICAgICh0DQoJKGdvdG8tY2hhciBwb3MpDQoJ KGVycm9yICJObyBtYXRjaCIpKSkpDQogICAgICh0DQogICAgICA7OyBBIG5vcm1hbCBzZWFyY2gg c3RyaW5nDQogICAgICAod2hlbiAoZXF1YWwgKHN0cmluZy10by1jaGFyIHMpID8qKQ0KCTs7IEFu Y2hvciBvbiBoZWFkbGluZXMsIHBvc3QgbWF5IGluY2x1ZGUgdGFncy4NCgkoc2V0cSBwcmUgIl5c XCorWyBcdF0rXFwoPzpcXHN3K1xcKT9bIFx0XSoiDQoJICAgICAgcG9zdCAob3JnLXJlICJbIFx0 XSpcXCg/OlsgXHRdKzpbWzphbG51bTpdX0AjJTorXTpbIFx0XSpcXCk/JCIpDQoJICAgICAgcyAo c3Vic3RyaW5nIHMgMSkpKQ0KICAgICAgKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMNCiAgICAgICAw IChsZW5ndGggcykNCiAgICAgICAnKGZhY2UgbmlsIG1vdXNlLWZhY2UgbmlsIGtleW1hcCBuaWwg Zm9udGlmaWVkIG5pbCkgcykNCiAgICAgIDs7IE1ha2UgYSBzZXJpZXMgb2YgcmVndWxhciBleHBy ZXNzaW9ucyB0byBmaW5kIGEgbWF0Y2gNCiAgICAgIChzZXRxIHdvcmRzIChvcmctc3BsaXQtc3Ry aW5nIHMgIlsgXG5cclx0XSsiKQ0KDQoJICAgIHJlMCAoY29uY2F0ICJcXCg8PCIgKHJlZ2V4cC1x dW90ZSBzMCkgIj4+XFwpIikNCgkgICAgcmUyIChjb25jYXQgbWFya2VycyAiXFwoIiAobWFwY29u Y2F0ICdkb3duY2FzZSB3b3JkcyAiWyBcdF0rIikNCgkJCSJcXCkiIG1hcmtlcnMpDQoJICAgIHJl MmFfIChjb25jYXQgIlxcKCIgKG1hcGNvbmNhdCAnZG93bmNhc2Ugd29yZHMNCgkJCQkJICAgIlsg XHRcclxuXSsiKSAiXFwpWyBcdFxyXG5dIikNCgkgICAgcmUyYSAoY29uY2F0ICJbIFx0XHJcbl0i IHJlMmFfKQ0KCSAgICByZTRfIChjb25jYXQgIlxcKCIgKG1hcGNvbmNhdCAnZG93bmNhc2Ugd29y ZHMNCgkJCQkJICAiW15hLXpBLVpfXHJcbl0rIikgIlxcKVteYS16QS1aX10iKQ0KCSAgICByZTQg KGNvbmNhdCAiW15hLXpBLVpfXSIgcmU0XykNCg0KCSAgICByZTEgKGNvbmNhdCBwcmUgcmUyIHBv c3QpDQoJICAgIHJlMyAoY29uY2F0IHByZSAoaWYgcHJlIHJlNF8gcmU0KSBwb3N0KQ0KCSAgICBy ZTUgKGNvbmNhdCBwcmUgIi4qIiByZTQpDQoJICAgIHJlMiAoY29uY2F0IHByZSByZTIpDQoJICAg IHJlMmEgKGNvbmNhdCBwcmUgKGlmIHByZSByZTJhXyByZTJhKSkNCgkgICAgcmU0IChjb25jYXQg cHJlIChpZiBwcmUgcmU0XyByZTQpKQ0KCSAgICByZWFsbCAoY29uY2F0ICJcXCgiIHJlMCAiXFwp XFx8XFwoIiByZTEgIlxcKVxcfFxcKCIgcmUyDQoJCQkgICJcXClcXHxcXCgiIHJlMyAiXFwpXFx8 XFwoIiByZTQgIlxcKVxcfFxcKCINCgkJCSAgcmU1ICJcXCkiKSkNCiAgICAgIChjb25kDQogICAg ICAgKChlcSB0eXBlICdvcmctb2NjdXIpIChvcmctb2NjdXIgcmVhbGwpKQ0KICAgICAgICgoZXEg dHlwZSAnb2NjdXIpIChvcmctZG8tb2NjdXIgKGRvd25jYXNlIHJlYWxsKSAnY2xlYW51cCkpDQog ICAgICAgKHQgKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCgkgIChzZXRxIHR5cGUgJ2Z1enp5KQ0K CSAgKGlmIChvciAoYW5kIChvcmctc2VhcmNoLW5vdC1zZWxmIDEgcmUwIG5pbCB0KQ0KCQkgICAg ICAgKHNldHEgdHlwZSAnZGVkaWNhdGVkKSkNCgkJICAob3JnLXNlYXJjaC1ub3Qtc2VsZiAxIHJl MSBuaWwgdCkNCgkJICAob3JnLXNlYXJjaC1ub3Qtc2VsZiAxIHJlMiBuaWwgdCkNCgkJICAob3Jn LXNlYXJjaC1ub3Qtc2VsZiAxIHJlMmEgbmlsIHQpDQoJCSAgKG9yZy1zZWFyY2gtbm90LXNlbGYg MSByZTMgbmlsIHQpDQoJCSAgKG9yZy1zZWFyY2gtbm90LXNlbGYgMSByZTQgbmlsIHQpDQoJCSAg KG9yZy1zZWFyY2gtbm90LXNlbGYgMSByZTUgbmlsIHQpKQ0KCSAgICAgIChnb3RvLWNoYXIgKG1h dGNoLWJlZ2lubmluZyAxKSkNCgkgICAgKGdvdG8tY2hhciBwb3MpDQoJICAgIChlcnJvciAiTm8g bWF0Y2giKSkpKSkpDQogICAgKGFuZCAoZGVyaXZlZC1tb2RlLXAgJ29yZy1tb2RlKQ0KCSAobm90 IHN0ZWFsdGgpDQoJIChvcmctc2hvdy1jb250ZXh0ICdsaW5rLXNlYXJjaCkpDQogICAgdHlwZSkp DQoNCihkZWZ1biBvcmctc2VhcmNoLW5vdC1zZWxmIChncm91cCAmcmVzdCBhcmdzKQ0KICAiRXhl Y3V0ZSBgcmUtc2VhcmNoLWZvcndhcmQnLCBidXQgb25seSBhY2NlcHQgbWF0Y2hlcyB0aGF0IGRv IG5vdA0KZW5jbG9zZSB0aGUgcG9zaXRpb24gb2YgYG9yZy1vcGVuLWxpbmstbWFya2VyJy4iDQog IChsZXQgKChtIG9yZy1vcGVuLWxpbmstbWFya2VyKSkNCiAgICAoY2F0Y2ggJ2V4aXQNCiAgICAg ICh3aGlsZSAoYXBwbHkgJ3JlLXNlYXJjaC1mb3J3YXJkIGFyZ3MpDQoJKHVubGVzcyAoZ2V0LXRl eHQtcHJvcGVydHkgKG1hdGNoLWVuZCBncm91cCkgJ2ludGFuZ2libGUpIDsgRW1hY3MgMjENCgkg IChnb3RvLWNoYXIgKG1hdGNoLWVuZCBncm91cCkpDQoJICAoaWYgKGFuZCAob3IgKG5vdCAoZXEg KG1hcmtlci1idWZmZXIgbSkgKGN1cnJlbnQtYnVmZmVyKSkpDQoJCSAgICAgICAoPiAobWF0Y2gt YmVnaW5uaW5nIDApIChtYXJrZXItcG9zaXRpb24gbSkpDQoJCSAgICAgICAoPCAobWF0Y2gtZW5k IDApIChtYXJrZXItcG9zaXRpb24gbSkpKQ0KCQkgICAoc2F2ZS1tYXRjaC1kYXRhDQoJCSAgICAg KG9yIChub3QgKG9yZy1pbi1yZWdleHANCgkJCSAgICAgICBvcmctYnJhY2tldC1saW5rLWFuYWx5 dGljLXJlZ2V4cCAxKSkNCgkJCSAobm90IChtYXRjaC1lbmQgNCkpICA7IG5vIGRlc2NyaXB0aW9u DQoJCQkgKGFuZCAoPD0gKG1hdGNoLWJlZ2lubmluZyA0KSAocG9pbnQpKQ0KCQkJICAgICAgKD49 IChtYXRjaC1lbmQgNCkgKHBvaW50KSkpKSkpDQoJICAgICAgKHRocm93ICdleGl0IChwb2ludCkp KSkpKSkpDQoNCihkZWZ1biBvcmctZ2V0LWJ1ZmZlci1mb3ItaW50ZXJuYWwtbGluayAoYnVmZmVy KQ0KICAiUmV0dXJuIGEgYnVmZmVyIHRvIGJlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIGxpbmsg dGFyZ2V0IG9mIGludGVybmFsIGxpbmtzLiINCiAgKGNvbmQNCiAgICgobm90IG9yZy1kaXNwbGF5 LWludGVybmFsLWxpbmstd2l0aC1pbmRpcmVjdC1idWZmZXIpDQogICAgYnVmZmVyKQ0KICAgKChz dHJpbmctbWF0Y2ggIihDbG9uZSkkIiAoYnVmZmVyLW5hbWUgYnVmZmVyKSkNCiAgICAobWVzc2Fn ZSAiQnVmZmVyIGlzIGFscmVhZHkgYSBjbG9uZSwgbm90IG1ha2luZyBhbm90aGVyIG9uZSIpDQog ICAgOzsgd2UgYWxzbyBkbyBub3QgbW9kaWZ5IHZpc2liaWxpdHkgaW4gdGhpcyBjYXNlDQogICAg YnVmZmVyKQ0KICAgKHQgOyBtYWtlIGEgbmV3IGluZGlyZWN0IGJ1ZmZlciBmb3IgZGlzcGxheWlu ZyB0aGUgbGluaw0KICAgIChsZXQqICgoYm4gKGJ1ZmZlci1uYW1lIGJ1ZmZlcikpDQoJICAgKGli biAoY29uY2F0IGJuICIoQ2xvbmUpIikpDQoJICAgKGliIChvciAoZ2V0LWJ1ZmZlciBpYm4pICht YWtlLWluZGlyZWN0LWJ1ZmZlciBidWZmZXIgaWJuICdjbG9uZSkpKSkNCiAgICAgICh3aXRoLWN1 cnJlbnQtYnVmZmVyIGliIChvcmctb3ZlcnZpZXcpKQ0KICAgICAgaWIpKSkpDQoNCihkZWZ1biBv cmctZG8tb2NjdXIgKHJlZ2V4cCAmb3B0aW9uYWwgY2xlYW51cCkNCiAgIkNhbGwgdGhlIEVtYWNz IGNvbW1hbmQgYG9jY3VyJy4NCklmIENMRUFOVVAgaXMgbm9uLW5pbCwgcmVtb3ZlIHRoZSBwcmlu dG91dCBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uDQppbiB0aGUgKk9jY3VyKiBidWZmZXIuICBU aGlzIGlzIHVzZWZ1bCBpZiB0aGUgcmVnZXggaXMgbG9uZyBhbmQgbm90IHVzZWZ1bA0KdG8gcmVh ZC4iDQogIChvY2N1ciByZWdleHApDQogICh3aGVuIGNsZWFudXANCiAgICAobGV0ICgoY3dpbiAo c2VsZWN0ZWQtd2luZG93KSkgd2luIGJlZyBlbmQpDQogICAgICAod2hlbiAoc2V0cSB3aW4gKGdl dC1idWZmZXItd2luZG93ICIqT2NjdXIqIikpDQoJKHNlbGVjdC13aW5kb3cgd2luKSkNCiAgICAg IChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQogICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQg Im1hdGNoW2Etel0rIiBuaWwgdCkNCgkoc2V0cSBiZWcgKG1hdGNoLWVuZCAwKSkNCgkoaWYgKHJl LXNlYXJjaC1mb3J3YXJkICJeWyBcdF0qWzAtOV0rIiBuaWwgdCkNCgkgICAgKHNldHEgZW5kICgx LSAobWF0Y2gtYmVnaW5uaW5nIDApKSkpKQ0KICAgICAgKGFuZCBiZWcgZW5kIChsZXQgKChpbmhp Yml0LXJlYWQtb25seSB0KSkgKGRlbGV0ZS1yZWdpb24gYmVnIGVuZCkpKQ0KICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWluKSkNCiAgICAgIChzZWxlY3Qtd2luZG93IGN3aW4pKSkpDQoNCjs7OyBU aGUgbWFyayByaW5nIGZvciBsaW5rcyBqdW1wcw0KDQooZGVmdmFyIG9yZy1tYXJrLXJpbmcgbmls DQogICJNYXJrIHJpbmcgZm9yIHBvc2l0aW9ucyBiZWZvcmUganVtcHMgaW4gT3JnLW1vZGUuIikN CihkZWZ2YXIgb3JnLW1hcmstcmluZy1sYXN0LWdvdG8gbmlsDQogICJMYXN0IHBvc2l0aW9uIGlu IHRoZSBtYXJrIHJpbmcgdXNlZCB0byBnbyBiYWNrLiIpDQo7OyBGaWxsIGFuZCBjbG9zZSB0aGUg cmluZw0KKHNldHEgb3JnLW1hcmstcmluZyBuaWwgb3JnLW1hcmstcmluZy1sYXN0LWdvdG8gbmls KSA7OyBpbiBjYXNlIGZpbGUgaXMgcmVsb2FkZWQNCihsb29wIGZvciBpIGZyb20gMSB0byBvcmct bWFyay1yaW5nLWxlbmd0aCBkbw0KICAgICAgKHB1c2ggKG1ha2UtbWFya2VyKSBvcmctbWFyay1y aW5nKSkNCihzZXRjZHIgKG50aGNkciAoMS0gb3JnLW1hcmstcmluZy1sZW5ndGgpIG9yZy1tYXJr LXJpbmcpDQoJb3JnLW1hcmstcmluZykNCg0KKGRlZnVuIG9yZy1tYXJrLXJpbmctcHVzaCAoJm9w dGlvbmFsIHBvcyBidWZmZXIpDQogICJQdXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gb3IgUE9TIGlu dG8gdGhlIG1hcmsgcmluZyBhbmQgcm90YXRlIGl0LiINCiAgKGludGVyYWN0aXZlKQ0KICAoc2V0 cSBwb3MgKG9yIHBvcyAocG9pbnQpKSkNCiAgKHNldHEgb3JnLW1hcmstcmluZyAobnRoY2RyICgx LSBvcmctbWFyay1yaW5nLWxlbmd0aCkgb3JnLW1hcmstcmluZykpDQogIChtb3ZlLW1hcmtlciAo Y2FyIG9yZy1tYXJrLXJpbmcpDQoJICAgICAgIChvciBwb3MgKHBvaW50KSkNCgkgICAgICAgKG9y IGJ1ZmZlciAoY3VycmVudC1idWZmZXIpKSkNCiAgKG1lc3NhZ2UgIiVzIg0KCSAgIChzdWJzdGl0 dXRlLWNvbW1hbmQta2V5cw0KCSAgICAiUG9zaXRpb24gc2F2ZWQgdG8gbWFyayByaW5nLCBnbyBi YWNrIHdpdGggXFxbb3JnLW1hcmstcmluZy1nb3RvXS4iKSkpDQoNCihkZWZ1biBvcmctbWFyay1y aW5nLWdvdG8gKCZvcHRpb25hbCBuKQ0KICAiSnVtcCB0byB0aGUgcHJldmlvdXMgcG9zaXRpb24g aW4gdGhlIG1hcmsgcmluZy4NCldpdGggcHJlZml4IGFyZyBOLCBqdW1wIGJhY2sgdGhhdCBtYW55 IHN0b3JlZCBwb3NpdGlvbnMuICBXaGVuDQpjYWxsZWQgc2V2ZXJhbCB0aW1lcyBpbiBzdWNjZXNz aW9uLCB3YWxrIHRocm91Z2ggdGhlIGVudGlyZSByaW5nLg0KT3JnLW1vZGUgY29tbWFuZHMganVt cGluZyB0byBhIGRpZmZlcmVudCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBmaWxlLA0Kb3IgdG8g YW5vdGhlciBPcmctbW9kZSBmaWxlLCBhdXRvbWF0aWNhbGx5IHB1c2ggdGhlIG9sZCBwb3NpdGlv bg0Kb250byB0aGUgcmluZy4iDQogIChpbnRlcmFjdGl2ZSAicCIpDQogIChsZXQgKHAgbSkNCiAg ICAoaWYgKGVxIGxhc3QtY29tbWFuZCB0aGlzLWNvbW1hbmQpDQoJKHNldHEgcCAobnRoY2RyIG4g KG9yIG9yZy1tYXJrLXJpbmctbGFzdC1nb3RvIG9yZy1tYXJrLXJpbmcpKSkNCiAgICAgIChzZXRx IHAgb3JnLW1hcmstcmluZykpDQogICAgKHNldHEgb3JnLW1hcmstcmluZy1sYXN0LWdvdG8gcCkN CiAgICAoc2V0cSBtIChjYXIgcCkpDQogICAgKG9yZy1wb3AtdG8tYnVmZmVyLXNhbWUtd2luZG93 IChtYXJrZXItYnVmZmVyIG0pKQ0KICAgIChnb3RvLWNoYXIgbSkNCiAgICAoaWYgKG9yIChvdXRs aW5lLWludmlzaWJsZS1wKSAob3JnLWludmlzaWJsZS1wMikpIChvcmctc2hvdy1jb250ZXh0ICdt YXJrLWdvdG8pKSkpDQoNCihkZWZ1biBvcmctcmVtb3ZlLWFuZ2xlLWJyYWNrZXRzIChzKQ0KICAo aWYgKGVxdWFsIChzdWJzdHJpbmcgcyAwIDEpICI8IikgKHNldHEgcyAoc3Vic3RyaW5nIHMgMSkp KQ0KICAoaWYgKGVxdWFsIChzdWJzdHJpbmcgcyAtMSkgIj4iKSAoc2V0cSBzIChzdWJzdHJpbmcg cyAwIC0xKSkpDQogIHMpDQooZGVmdW4gb3JnLWFkZC1hbmdsZS1icmFja2V0cyAocykNCiAgKGlm IChlcXVhbCAoc3Vic3RyaW5nIHMgMCAxKSAiPCIpIG5pbCAoc2V0cSBzIChjb25jYXQgIjwiIHMp KSkNCiAgKGlmIChlcXVhbCAoc3Vic3RyaW5nIHMgLTEpICI+IikgbmlsIChzZXRxIHMgKGNvbmNh dCBzICI+IikpKQ0KICBzKQ0KKGRlZnVuIG9yZy1yZW1vdmUtZG91YmxlLXF1b3RlcyAocykNCiAg KGlmIChlcXVhbCAoc3Vic3RyaW5nIHMgMCAxKSAiXCIiKSAoc2V0cSBzIChzdWJzdHJpbmcgcyAx KSkpDQogIChpZiAoZXF1YWwgKHN1YnN0cmluZyBzIC0xKSAiXCIiKSAoc2V0cSBzIChzdWJzdHJp bmcgcyAwIC0xKSkpDQogIHMpDQoNCjs7OyBGb2xsb3dpbmcgc3BlY2lmaWMgbGlua3MNCg0KKGRl ZnVuIG9yZy1mb2xsb3ctdGltZXN0YW1wLWxpbmsgKCkNCiAgIk9wZW4gYW4gYWdlbmRhIHZpZXcg Zm9yIHRoZSB0aW1lLXN0YW1wIGRhdGUvcmFuZ2UgYXQgcG9pbnQuIg0KICAoY29uZA0KICAgKChv cmctYXQtZGF0ZS1yYW5nZS1wIHQpDQogICAgKGxldCAoKG9yZy1hZ2VuZGEtc3RhcnQtb24td2Vl a2RheSkNCgkgICh0MSAobWF0Y2gtc3RyaW5nIDEpKQ0KCSAgKHQyIChtYXRjaC1zdHJpbmcgMikp IHR0MSB0dDIpDQogICAgICAoc2V0cSB0dDEgKHRpbWUtdG8tZGF5cyAob3JnLXRpbWUtc3RyaW5n LXRvLXRpbWUgdDEpKQ0KCSAgICB0dDIgKHRpbWUtdG8tZGF5cyAob3JnLXRpbWUtc3RyaW5nLXRv LXRpbWUgdDIpKSkNCiAgICAgIChsZXQgKChvcmctYWdlbmRhLWJ1ZmZlci10bXAtbmFtZQ0KCSAg ICAgKGZvcm1hdCAiKk9yZyBBZ2VuZGEoYTolcykiDQoJCSAgICAgKGNvbmNhdCAoc3Vic3RyaW5n IHQxIDAgMTApICItLSIgKHN1YnN0cmluZyB0MiAwIDEwKSkpKSkNCgkob3JnLWFnZW5kYS1saXN0 IG5pbCB0dDEgKDErICgtIHR0MiB0dDEpKSkpKSkNCiAgICgob3JnLWF0LXRpbWVzdGFtcC1wIHQp DQogICAgKGxldCAoKG9yZy1hZ2VuZGEtYnVmZmVyLXRtcC1uYW1lDQoJICAgKGZvcm1hdCAiKk9y ZyBBZ2VuZGEoYTolcykiIChzdWJzdHJpbmcgKG1hdGNoLXN0cmluZyAxKSAwIDEwKSkpKQ0KICAg ICAgKG9yZy1hZ2VuZGEtbGlzdCBuaWwgKHRpbWUtdG8tZGF5cyAob3JnLXRpbWUtc3RyaW5nLXRv LXRpbWUNCgkJCQkJICAoc3Vic3RyaW5nIChtYXRjaC1zdHJpbmcgMSkgMCAxMCkpKQ0KCQkgICAg ICAgMSkpKQ0KICAgKHQgKGVycm9yICJUaGlzIHNob3VsZCBub3QgaGFwcGVuIikpKSkNCg0KDQo7 OzsgRm9sbG93aW5nIGZpbGUgbGlua3MNCihkZWNsYXJlLWZ1bmN0aW9uIG1haWxjYXAtcGFyc2Ut bWFpbGNhcHMgIm1haWxjYXAiICgmb3B0aW9uYWwgcGF0aCBmb3JjZSkpDQooZGVjbGFyZS1mdW5j dGlvbiBtYWlsY2FwLWV4dGVuc2lvbi10by1taW1lICJtYWlsY2FwIiAoZXh0bikpDQooZGVjbGFy ZS1mdW5jdGlvbiBtYWlsY2FwLW1pbWUtaW5mbw0KCQkgICJtYWlsY2FwIiAoc3RyaW5nICZvcHRp b25hbCByZXF1ZXN0IG5vLWRlY29kZSkpDQooZGVmdmFyIG9yZy13YWl0IG5pbCkNCihkZWZ1biBv cmctb3Blbi1maWxlIChwYXRoICZvcHRpb25hbCBpbi1lbWFjcyBsaW5lIHNlYXJjaCkNCiAgIk9w ZW4gdGhlIGZpbGUgYXQgUEFUSC4NCkZpcnN0LCB0aGlzIGV4cGFuZHMgYW55IHNwZWNpYWwgZmls ZSBuYW1lIGFiYnJldmlhdGlvbnMuICBUaGVuIHRoZQ0KY29uZmlndXJhdGlvbiB2YXJpYWJsZSBg b3JnLWZpbGUtYXBwcycgaXMgY2hlY2tlZCBpZiBpdCBjb250YWlucyBhbg0KZW50cnkgZm9yIHRo aXMgZmlsZSB0eXBlLCBhbmQgaWYgeWVzLCB0aGUgY29ycmVzcG9uZGluZyBjb21tYW5kIGlzIGxh dW5jaGVkLg0KDQpJZiBubyBhcHBsaWNhdGlvbiBpcyBmb3VuZCwgRW1hY3Mgc2ltcGx5IHZpc2l0 cyB0aGUgZmlsZS4NCg0KV2l0aCBvcHRpb25hbCBwcmVmaXggYXJndW1lbnQgSU4tRU1BQ1MsIEVt YWNzIHdpbGwgdmlzaXQgdGhlIGZpbGUuDQpXaXRoIGEgZG91YmxlIFxcW3VuaXZlcnNhbC1hcmd1 bWVudF0gXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBcDQpwcmVmaXggYXJnLCBPcmcgdHJpZXMgdG8g YXZvaWQgb3BlbmluZyBpbiBFbWFjcw0KYW5kIHRvIHVzZSBhbiBleHRlcm5hbCBhcHBsaWNhdGlv biB0byB2aXNpdCB0aGUgZmlsZS4NCg0KT3B0aW9uYWwgTElORSBzcGVjaWZpZXMgYSBsaW5lIHRv IGdvIHRvLCBvcHRpb25hbCBTRUFSQ0ggYSBzdHJpbmcNCnRvIHNlYXJjaCBmb3IuICBJZiBMSU5F IG9yIFNFQVJDSCBpcyBnaXZlbiwgdGhlIGZpbGUgd2lsbCBiZQ0Kb3BlbmVkIGluIEVtYWNzLCB1 bmxlc3MgYW4gZW50cnkgZnJvbSBvcmctZmlsZS1hcHBzIHRoYXQgbWFrZXMNCnVzZSBvZiBncm91 cHMgaW4gYSByZWdleHAgbWF0Y2hlcy4NCg0KSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSB3YXkg ZnJhbWVzIGFyZSB1c2VkIHdoZW4gZm9sbG93aW5nIGENCmxpbmssIHBsZWFzZSBjdXN0b21pemUg YG9yZy1saW5rLWZyYW1lLXNldHVwJy4NCg0KSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIGFu IGVycm9yIGlzIHRocm93bi4iDQogIChsZXQqICgoZmlsZSAoaWYgKGVxdWFsIHBhdGggIiIpDQoJ CSAgIGJ1ZmZlci1maWxlLW5hbWUNCgkJIChzdWJzdGl0dXRlLWluLWZpbGUtbmFtZSAoZXhwYW5k LWZpbGUtbmFtZSBwYXRoKSkpKQ0KCSAoZmlsZS1hcHBzIChhcHBlbmQgb3JnLWZpbGUtYXBwcyAo b3JnLWRlZmF1bHQtYXBwcykpKQ0KCSAoYXBwcyAob3JnLXJlbW92ZS1pZg0KCQknb3JnLWZpbGUt YXBwcy1lbnRyeS1tYXRjaC1hZ2FpbnN0LWRsaW5rLXAgZmlsZS1hcHBzKSkNCgkgKGFwcHMtZGxp bmsgKG9yZy1yZW1vdmUtaWYtbm90DQoJCSAgICAgICdvcmctZmlsZS1hcHBzLWVudHJ5LW1hdGNo LWFnYWluc3QtZGxpbmstcCBmaWxlLWFwcHMpKQ0KCSAocmVtcCAoYW5kIChhc3NxICdyZW1vdGUg YXBwcykgKG9yZy1maWxlLXJlbW90ZS1wIGZpbGUpKSkNCgkgKGRpcnAgKGlmIHJlbXAgbmlsIChm aWxlLWRpcmVjdG9yeS1wIGZpbGUpKSkNCgkgKGZpbGUgKGlmIChhbmQgZGlycCBvcmctb3Blbi1k aXJlY3RvcnktbWVhbnMtaW5kZXgtZG90LW9yZykNCgkJICAgKGNvbmNhdCAoZmlsZS1uYW1lLWFz LWRpcmVjdG9yeSBmaWxlKSAiaW5kZXgub3JnIikNCgkJIGZpbGUpKQ0KCSAoYS1tLWEtcCAoYXNz cSAnYXV0by1tb2RlIGFwcHMpKQ0KCSAoZGZpbGUgKGRvd25jYXNlIGZpbGUpKQ0KCSA7OyByZWNv bnN0cnVjdCB0aGUgb3JpZ2luYWwgZmlsZTogbGluayBmcm9tIHRoZSBQQVRILCBMSU5FIGFuZCBT RUFSQ0ggYXJncw0KCSAobGluayAoY29uZCAoKGFuZCAoZXEgbGluZSBuaWwpDQoJCQkgICAoZXEg c2VhcmNoIG5pbCkpDQoJCSAgICAgIGZpbGUpDQoJCSAgICAgKGxpbmUNCgkJICAgICAgKGNvbmNh dCBmaWxlICI6OiIgKG51bWJlci10by1zdHJpbmcgbGluZSkpKQ0KCQkgICAgIChzZWFyY2gNCgkJ ICAgICAgKGNvbmNhdCBmaWxlICI6OiIgc2VhcmNoKSkpKQ0KCSAoZGxpbmsgKGRvd25jYXNlIGxp bmspKQ0KCSAob2xkLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQ0KCSAob2xkLXBvcyAocG9pbnQp KQ0KCSAob2xkLW1vZGUgbWFqb3ItbW9kZSkNCgkgZXh0IGNtZCBsaW5rLW1hdGNoLWRhdGEpDQog ICAgKGlmIChzdHJpbmctbWF0Y2ggIl4uKlxcLlxcKFthLXpBLVowLTldK1xcLmd6XFwpJCIgZGZp bGUpDQoJKHNldHEgZXh0IChtYXRjaC1zdHJpbmcgMSBkZmlsZSkpDQogICAgICAoaWYgKHN0cmlu Zy1tYXRjaCAiXi4qXFwuXFwoW2EtekEtWjAtOV0rXFwpJCIgZGZpbGUpDQoJICAoc2V0cSBleHQg KG1hdGNoLXN0cmluZyAxIGRmaWxlKSkpKQ0KICAgIChjb25kDQogICAgICgobWVtYmVyIGluLWVt YWNzICcoKDE2KSBzeXN0ZW0pKQ0KICAgICAgKHNldHEgY21kIChjZHIgKGFzc29jICdzeXN0ZW0g YXBwcykpKSkNCiAgICAgKGluLWVtYWNzIChzZXRxIGNtZCAnZW1hY3MpKQ0KICAgICAodA0KICAg ICAgKHNldHEgY21kIChvciAoYW5kIHJlbXAgKGNkciAoYXNzb2MgJ3JlbW90ZSBhcHBzKSkpDQoJ CSAgICAoYW5kIGRpcnAgKGNkciAoYXNzb2MgJ2RpcmVjdG9yeSBhcHBzKSkpDQoJCQkJCTsgZmly c3QsIHRyeSBtYXRjaGluZyBhZ2FpbnN0IGFwcHMtZGxpbmsNCgkJCQkJOyBpZiB3ZSBnZXQgYSBt YXRjaCBoZXJlLCBzdG9yZSB0aGUgbWF0Y2ggZGF0YSBmb3IgbGF0ZXINCgkJICAgIChsZXQgKCht YXRjaCAoYXNzb2MtZGVmYXVsdCBkbGluayBhcHBzLWRsaW5rDQoJCQkJCQknc3RyaW5nLW1hdGNo KSkpDQoJCSAgICAgIChpZiBtYXRjaA0KCQkJICAocHJvZ24gKHNldHEgbGluay1tYXRjaC1kYXRh IChtYXRjaC1kYXRhKSkNCgkJCQkgbWF0Y2gpDQoJCQkocHJvZ24gKHNldHEgaW4tZW1hY3MgKG9y IGluLWVtYWNzIGxpbmUgc2VhcmNoKSkNCgkJCSAgICAgICBuaWwpKSkgOyBpZiB3ZSBoYXZlIG5v IG1hdGNoIGluIGFwcHMtZGxpbmssDQoJCQkJCTsgYWx3YXlzIG9wZW4gdGhlIGZpbGUgaW4gZW1h Y3MgaWYgbGluZSBvciBzZWFyY2gNCgkJCQkJOyBpcyBnaXZlbiAoZm9yIGJhY2t3YXJkcyBjb21w YXRpYmlsaXR5KQ0KCQkgICAgKGFzc29jLWRlZmF1bHQgZGZpbGUgKG9yZy1hcHBzLXJlZ2V4cC1h bGlzdCBhcHBzIGEtbS1hLXApDQoJCQkJICAgJ3N0cmluZy1tYXRjaCkNCgkJICAgIChjZHIgKGFz c29jIGV4dCBhcHBzKSkNCgkJICAgIChjZHIgKGFzc29jIHQgYXBwcykpKSkpKQ0KICAgICh3aGVu IChlcSBjbWQgJ3N5c3RlbSkNCiAgICAgIChzZXRxIGNtZCAoY2RyIChhc3NvYyAnc3lzdGVtIGFw cHMpKSkpDQogICAgKHdoZW4gKGVxIGNtZCAnZGVmYXVsdCkNCiAgICAgIChzZXRxIGNtZCAoY2Ry IChhc3NvYyB0IGFwcHMpKSkpDQogICAgKHdoZW4gKGVxIGNtZCAnbWFpbGNhcCkNCiAgICAgIChy ZXF1aXJlICdtYWlsY2FwKQ0KICAgICAgKG1haWxjYXAtcGFyc2UtbWFpbGNhcHMpDQogICAgICAo bGV0KiAoKG1pbWUtdHlwZSAobWFpbGNhcC1leHRlbnNpb24tdG8tbWltZSAob3IgZXh0ICIiKSkp DQoJICAgICAoY29tbWFuZCAobWFpbGNhcC1taW1lLWluZm8gbWltZS10eXBlKSkpDQoJKGlmIChz dHJpbmdwIGNvbW1hbmQpDQoJICAgIChzZXRxIGNtZCBjb21tYW5kKQ0KCSAgKHNldHEgY21kICdl bWFjcykpKSkNCiAgICAoaWYgKGFuZCAobm90IChlcSBjbWQgJ2VtYWNzKSkgOyBFbWFjcyBoYXMg bm8gcHJvYmxlbXMgd2l0aCBub24tZXggZmlsZXMNCgkgICAgIChub3QgKGZpbGUtZXhpc3RzLXAg ZmlsZSkpDQoJICAgICAobm90IG9yZy1vcGVuLW5vbi1leGlzdGluZy1maWxlcykpDQoJKHVzZXIt ZXJyb3IgIk5vIHN1Y2ggZmlsZTogJXMiIGZpbGUpKQ0KICAgIChjb25kDQogICAgICgoYW5kIChz dHJpbmdwIGNtZCkgKG5vdCAoc3RyaW5nLW1hdGNoICJeXFxzLSokIiBjbWQpKSkNCiAgICAgIDs7 IFJlbW92ZSBxdW90ZXMgYXJvdW5kIHRoZSBmaWxlIG5hbWUgLSB3ZSdsbCB1c2Ugc2hlbGwtcXVv dGUtYXJndW1lbnQuDQogICAgICAod2hpbGUgKHN0cmluZy1tYXRjaCAiWydcIl0lc1snXCJdIiBj bWQpDQoJKHNldHEgY21kIChyZXBsYWNlLW1hdGNoICIlcyIgdCB0IGNtZCkpKQ0KICAgICAgKHdo aWxlIChzdHJpbmctbWF0Y2ggIiVzIiBjbWQpDQoJKHNldHEgY21kIChyZXBsYWNlLW1hdGNoDQoJ CSAgIChzYXZlLW1hdGNoLWRhdGENCgkJICAgICAoc2hlbGwtcXVvdGUtYXJndW1lbnQNCgkJICAg ICAgKGNvbnZlcnQtc3RhbmRhcmQtZmlsZW5hbWUgZmlsZSkpKQ0KCQkgICB0IHQgY21kKSkpDQoN CiAgICAgIDs7IFJlcGxhY2UgIiUxIiwgIiUyIiBldGMuIGluIGNvbW1hbmQgd2l0aCBncm91cCBt YXRjaGVzIGZyb20gcmVnZXgNCiAgICAgIChzYXZlLW1hdGNoLWRhdGENCgkobGV0ICgobWF0Y2gt aW5kZXggMSkNCgkgICAgICAobnVtYmVyLW9mLWdyb3VwcyAoLSAoLyAobGVuZ3RoIGxpbmstbWF0 Y2gtZGF0YSkgMikgMSkpKQ0KCSAgKHNldC1tYXRjaC1kYXRhIGxpbmstbWF0Y2gtZGF0YSkNCgkg ICh3aGlsZSAoPD0gbWF0Y2gtaW5kZXggbnVtYmVyLW9mLWdyb3VwcykNCgkgICAgKGxldCAoKHJl Z2V4IChjb25jYXQgIiUiIChudW1iZXItdG8tc3RyaW5nIG1hdGNoLWluZGV4KSkpDQoJCSAgKHJl cGxhY2Utd2l0aCAobWF0Y2gtc3RyaW5nIG1hdGNoLWluZGV4IGRsaW5rKSkpDQoJICAgICAgKHdo aWxlIChzdHJpbmctbWF0Y2ggcmVnZXggY21kKQ0KCQkoc2V0cSBjbWQgKHJlcGxhY2UtbWF0Y2gg cmVwbGFjZS13aXRoIHQgdCBjbWQpKSkpDQoJICAgIChzZXRxIG1hdGNoLWluZGV4ICgrIG1hdGNo LWluZGV4IDEpKSkpKQ0KDQogICAgICAoc2F2ZS13aW5kb3ctZXhjdXJzaW9uDQoJKG1lc3NhZ2Ug IlJ1bm5pbmcgJXMuLi5kb25lIiBjbWQpDQoJKHN0YXJ0LXByb2Nlc3Mtc2hlbGwtY29tbWFuZCBj bWQgbmlsIGNtZCkNCgkoYW5kIChib3VuZHAgJ29yZy13YWl0KSAobnVtYmVycCBvcmctd2FpdCkg KHNpdC1mb3Igb3JnLXdhaXQpKSkpDQogICAgICgob3IgKHN0cmluZ3AgY21kKQ0KCSAgKGVxIGNt ZCAnZW1hY3MpKQ0KICAgICAgKGZ1bmNhbGwgKGNkciAoYXNzcSAnZmlsZSBvcmctbGluay1mcmFt ZS1zZXR1cCkpIGZpbGUpDQogICAgICAod2lkZW4pDQogICAgICAoaWYgbGluZSAob3JnLWdvdG8t bGluZSBsaW5lKQ0KCShpZiBzZWFyY2ggKG9yZy1saW5rLXNlYXJjaCBzZWFyY2gpKSkpDQogICAg ICgoY29uc3AgY21kKQ0KICAgICAgKGxldCAoKGZpbGUgKGNvbnZlcnQtc3RhbmRhcmQtZmlsZW5h bWUgZmlsZSkpKQ0KCShzYXZlLW1hdGNoLWRhdGENCgkgIChzZXQtbWF0Y2gtZGF0YSBsaW5rLW1h dGNoLWRhdGEpDQoJICAoZXZhbCBjbWQpKSkpDQogICAgICh0IChmdW5jYWxsIChjZHIgKGFzc3Eg J2ZpbGUgb3JnLWxpbmstZnJhbWUtc2V0dXApKSBmaWxlKSkpDQogICAgKGFuZCAoZGVyaXZlZC1t b2RlLXAgJ29yZy1tb2RlKSAoZXEgb2xkLW1vZGUgJ29yZy1tb2RlKQ0KCSAob3IgKG5vdCAoZXF1 YWwgb2xkLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKSkNCgkgICAgIChub3QgKGVxdWFsIG9sZC1w b3MgKHBvaW50KSkpKQ0KCSAob3JnLW1hcmstcmluZy1wdXNoIG9sZC1wb3Mgb2xkLWJ1ZmZlcikp KSkNCg0KKGRlZnVuIG9yZy1maWxlLWFwcHMtZW50cnktbWF0Y2gtYWdhaW5zdC1kbGluay1wIChl bnRyeSkNCiAgIlRoaXMgZnVuY3Rpb24gcmV0dXJucyBub24tbmlsIGlmIGBlbnRyeScgdXNlcyBh IHJlZ3VsYXINCmV4cHJlc3Npb24gd2hpY2ggc2hvdWxkIGJlIG1hdGNoZWQgYWdhaW5zdCB0aGUg d2hvbGUgbGluayBieQ0Kb3JnLW9wZW4tZmlsZS4NCg0KSXQgYXNzdW1lcyB0aGF0IGlzIHRoZSBj YXNlIHdoZW4gdGhlIGVudHJ5IHVzZXMgYSByZWd1bGFyDQpleHByZXNzaW9uIHdoaWNoIGhhcyBh dCBsZWFzdCBvbmUgZ3JvdXBpbmcgY29uc3RydWN0IGFuZCB0aGUNCmFjdGlvbiBpcyBlaXRoZXIg YSBsaXNwIGZvcm0gb3IgYSBjb21tYW5kIHN0cmluZyBjb250YWluaW5nDQonJTEnLCBpLmUuIHVz aW5nIGF0IGxlYXN0IG9uZSBzdWJleHByZXNzaW9uIG1hdGNoIGFzIGENCnBhcmFtZXRlci4iDQog IChsZXQgKChzZWxlY3RvciAoY2FyIGVudHJ5KSkNCgkoYWN0aW9uIChjZHIgZW50cnkpKSkNCiAg ICAoaWYgKHN0cmluZ3Agc2VsZWN0b3IpDQoJKGFuZCAoPiAocmVnZXhwLW9wdC1kZXB0aCBzZWxl Y3RvcikgMCkNCgkgICAgIChvciAoYW5kIChzdHJpbmdwIGFjdGlvbikNCgkJICAgICAgKHN0cmlu Zy1tYXRjaCAiJVswLTldIiBhY3Rpb24pKQ0KCQkgKGNvbnNwIGFjdGlvbikpKQ0KICAgICAgbmls KSkpDQoNCihkZWZ1biBvcmctZGVmYXVsdC1hcHBzICgpDQogICJSZXR1cm4gdGhlIGRlZmF1bHQg YXBwbGljYXRpb25zIGZvciB0aGlzIG9wZXJhdGluZyBzeXN0ZW0uIg0KICAoY29uZA0KICAgKChl cSBzeXN0ZW0tdHlwZSAnZGFyd2luKQ0KICAgIG9yZy1maWxlLWFwcHMtZGVmYXVsdHMtbWFjb3N4 KQ0KICAgKChlcSBzeXN0ZW0tdHlwZSAnd2luZG93cy1udCkNCiAgICBvcmctZmlsZS1hcHBzLWRl ZmF1bHRzLXdpbmRvd3NudCkNCiAgICh0IG9yZy1maWxlLWFwcHMtZGVmYXVsdHMtZ251KSkpDQoN CihkZWZ1biBvcmctYXBwcy1yZWdleHAtYWxpc3QgKGxpc3QgJm9wdGlvbmFsIGFkZC1hdXRvLW1v ZGUpDQogICJDb252ZXJ0IGV4dGVuc2lvbnMgdG8gcmVndWxhciBleHByZXNzaW9ucyBpbiB0aGUg Y2FycyBvZiBMSVNULg0KQWxzbywgd2VlZCBvdXQgYW55IG5vbi1zdHJpbmcgZW50cmllcywgYmVj YXVzZSB0aGUgcmV0dXJuIHZhbHVlIGlzIHVzZWQNCm9ubHkgZm9yIHJlZ2V4cCBtYXRjaGluZy4N CldoZW4gQURELUFVVE8tTU9ERSBpcyBzZXQsIG1ha2UgYWxsIG1hdGNoZXMgaW4gYGF1dG8tbW9k ZS1hbGlzdCcNCnBvaW50IHRvIHRoZSBzeW1ib2wgYGVtYWNzJywgaW5kaWNhdGluZyB0aGF0IHRo ZSBmaWxlIHNob3VsZA0KYmUgb3BlbmVkIGluIEVtYWNzLiINCiAgKGFwcGVuZA0KICAgKGRlbHEg bmlsDQoJIChtYXBjYXIgKGxhbWJkYSAoeCkNCgkJICAgKGlmIChub3QgKHN0cmluZ3AgKGNhciB4 KSkpDQoJCSAgICAgICBuaWwNCgkJICAgICAoaWYgKHN0cmluZy1tYXRjaCAiXFxXIiAoY2FyIHgp KQ0KCQkJIHgNCgkJICAgICAgIChjb25zIChjb25jYXQgIlxcLiIgKGNhciB4KSAiXFwnIikgKGNk ciB4KSkpKSkNCgkJIGxpc3QpKQ0KICAgKGlmIGFkZC1hdXRvLW1vZGUNCiAgICAgICAobWFwY2Fy IChsYW1iZGEgKHgpIChjb25zIChjYXIgeCkgJ2VtYWNzKSkgYXV0by1tb2RlLWFsaXN0KSkpKQ0K DQooZGVmdmFyIGFuZ2UtZnRwLW5hbWUtZm9ybWF0KSA7IHRvIHNpbGVuY2UgdGhlIFhFbWFjcyBj b21waWxlci4NCihkZWZ1biBvcmctZmlsZS1yZW1vdGUtcCAoZmlsZSkNCiAgIlRlc3Qgd2hldGhl ciBGSUxFIHNwZWNpZmllcyBhIGxvY2F0aW9uIG9uIGEgcmVtb3RlIHN5c3RlbS4NClJldHVybiBu b24tbmlsIGlmIHRoZSBsb2NhdGlvbiBpcyBpbmRlZWQgcmVtb3RlLg0KDQpGb3IgZXhhbXBsZSwg dGhlIGZpbGVuYW1lIFwiL3VzZXJAaG9zdDovZm9vXCIgc3BlY2lmaWVzIGEgbG9jYXRpb24NCm9u IHRoZSBzeXN0ZW0gXCIvdXNlckBob3N0OlwiLiINCiAgKGNvbmQgKChmYm91bmRwICdmaWxlLXJl bW90ZS1wKQ0KICAgICAgICAgKGZpbGUtcmVtb3RlLXAgZmlsZSkpDQogICAgICAgICgoZmJvdW5k cCAndHJhbXAtaGFuZGxlLWZpbGUtcmVtb3RlLXApDQogICAgICAgICAodHJhbXAtaGFuZGxlLWZp bGUtcmVtb3RlLXAgZmlsZSkpDQogICAgICAgICgoYW5kIChib3VuZHAgJ2FuZ2UtZnRwLW5hbWUt Zm9ybWF0KQ0KICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoIChjYXIgYW5nZS1mdHAtbmFtZS1m b3JtYXQpIGZpbGUpKQ0KICAgICAgICAgdCkpKQ0KDQoNCjs7OzsgUmVmaWxpbmcNCg0KKGRlZnVu IG9yZy1nZXQtb3JnLWZpbGUgKCkNCiAgIlJlYWQgYSBmaWxlbmFtZSwgd2l0aCBkZWZhdWx0IGRp cmVjdG9yeSBgb3JnLWRpcmVjdG9yeScuIg0KICAobGV0ICgoZGVmYXVsdCAob3Igb3JnLWRlZmF1 bHQtbm90ZXMtZmlsZSByZW1lbWJlci1kYXRhLWZpbGUpKSkNCiAgICAocmVhZC1maWxlLW5hbWUg KGZvcm1hdCAiRmlsZSBuYW1lIFslc106ICIgZGVmYXVsdCkNCgkJICAgIChmaWxlLW5hbWUtYXMt ZGlyZWN0b3J5IG9yZy1kaXJlY3RvcnkpDQoJCSAgICBkZWZhdWx0KSkpDQoNCihkZWZ1biBvcmct bm90ZXMtb3JkZXItcmV2ZXJzZWQtcCAoKQ0KICAiQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZmlsZSBz aG91bGQgcmVjZWl2ZSBub3RlcyBpbiByZXZlcnNlZCBvcmRlci4iDQogIChjb25kDQogICAoKG5v dCBvcmctcmV2ZXJzZS1ub3RlLW9yZGVyKSBuaWwpDQogICAoKGVxIHQgb3JnLXJldmVyc2Utbm90 ZS1vcmRlcikgdCkNCiAgICgobm90IChsaXN0cCBvcmctcmV2ZXJzZS1ub3RlLW9yZGVyKSkgbmls KQ0KICAgKHQgKGNhdGNoICdleGl0DQoJKGxldCAgKChhbGwgb3JnLXJldmVyc2Utbm90ZS1vcmRl cikNCgkgICAgICAgZW50cnkpDQoJICAod2hpbGUgKHNldHEgZW50cnkgKHBvcCBhbGwpKQ0KCSAg ICAoaWYgKHN0cmluZy1tYXRjaCAoY2FyIGVudHJ5KSBidWZmZXItZmlsZS1uYW1lKQ0KCQkodGhy b3cgJ2V4aXQgKGNkciBlbnRyeSkpKSkNCgkgIG5pbCkpKSkpDQoNCihkZWZ2YXIgb3JnLXJlZmls ZS10YXJnZXQtdGFibGUgbmlsDQogICJUaGUgbGlzdCBvZiByZWZpbGUgdGFyZ2V0cywgY3JlYXRl ZCBieSBgb3JnLXJlZmlsZScuIikNCg0KKGRlZnZhciBvcmctYWdlbmRhLW5ldy1idWZmZXJzIG5p bA0KICAiQnVmZmVycyBjcmVhdGVkIHRvIHZpc2l0IGFnZW5kYSBmaWxlcy4iKQ0KDQooZGVmdmFy IG9yZy1yZWZpbGUtY2FjaGUgbmlsDQogICJDYWNoZSBmb3IgcmVmaWxlIHRhcmdldHMuIikNCg0K KGRlZnZhciBvcmctcmVmaWxlLW1hcmtlcnMgbmlsDQogICJBbGwgdGhlIG1hcmtlcnMgdXNlZCBm b3IgY2FjaGluZyByZWZpbGUgbG9jYXRpb25zLiIpDQoNCihkZWZ1biBvcmctcmVmaWxlLW1hcmtl ciAocG9zKQ0KICAiR2V0IGEgbmV3IHJlZmlsZSBtYXJrZXIsIGJ1dCBvbmx5IGlmIGNhY2hpbmcg aXMgaW4gdXNlLiINCiAgKGlmIChub3Qgb3JnLXJlZmlsZS11c2UtY2FjaGUpDQogICAgICBwb3MN CiAgICAobGV0ICgobSAobWFrZS1tYXJrZXIpKSkNCiAgICAgIChtb3ZlLW1hcmtlciBtIHBvcykN CiAgICAgIChwdXNoIG0gb3JnLXJlZmlsZS1tYXJrZXJzKQ0KICAgICAgbSkpKQ0KDQooZGVmdW4g b3JnLXJlZmlsZS1jYWNoZS1jbGVhciAoKQ0KICAiQ2xlYXIgdGhlIHJlZmlsZSBjYWNoZSBhbmQg ZGlzYWJsZSBhbGwgdGhlIG1hcmtlcnMuIg0KICAobWFwYyAobGFtYmRhIChtKSAobW92ZS1tYXJr ZXIgbSBuaWwpKSBvcmctcmVmaWxlLW1hcmtlcnMpDQogIChzZXRxIG9yZy1yZWZpbGUtbWFya2Vy cyBuaWwpDQogIChzZXRxIG9yZy1yZWZpbGUtY2FjaGUgbmlsKQ0KICAobWVzc2FnZSAiUmVmaWxl IGNhY2hlIGhhcyBiZWVuIGNsZWFyZWQiKSkNCg0KKGRlZnVuIG9yZy1yZWZpbGUtY2FjaGUtY2hl Y2stc2V0IChzZXQpDQogICJDaGVjayBpZiBhbGwgdGhlIG1hcmtlcnMgaW4gdGhlIGNhY2hlIHN0 aWxsIGhhdmUgbGl2ZSBidWZmZXJzLiINCiAgKGxldCAobWFya2VyKQ0KICAgIChjYXRjaCAnZXhp dA0KICAgICAgKHdoaWxlIChhbmQgc2V0IChzZXRxIG1hcmtlciAobnRoIDMgKHBvcCBzZXQpKSkp DQoJOzsgSWYgYG9yZy1yZWZpbGUtdXNlLW91dGxpbmUtcGF0aCcgaXMgJ2ZpbGUsIG1hcmtlciBt YXkgYmUgbmlsDQoJKHdoZW4gKGFuZCBtYXJrZXIgKG51bGwgKG1hcmtlci1idWZmZXIgbWFya2Vy KSkpDQoJICAobWVzc2FnZSAiUGxlYXNlIHJlZ2VuZXJhdGUgdGhlIHJlZmlsZSBjYWNoZSB3aXRo IGBDLTAgQy1jIEMtdyciKQ0KCSAgKHNpdC1mb3IgMykNCgkgICh0aHJvdyAnZXhpdCBuaWwpKSkN CiAgICAgIHQpKSkNCg0KKGRlZnVuIG9yZy1yZWZpbGUtY2FjaGUtcHV0IChzZXQgJnJlc3QgaWRl bnRpZmllcnMpDQogICJQdXNoIHRoZSByZWZpbGUgdGFyZ2V0cyBTRVQgaW50byB0aGUgY2FjaGUs IHVuZGVyIElERU5USUZJRVJTLiINCiAgKGxldCogKChrZXkgKHNoYTEgKHByaW4xLXRvLXN0cmlu ZyBpZGVudGlmaWVycykpKQ0KCSAoZW50cnkgKGFzc29jIGtleSBvcmctcmVmaWxlLWNhY2hlKSkp DQogICAgKGlmIGVudHJ5DQoJKHNldGNkciBlbnRyeSBzZXQpDQogICAgICAocHVzaCAoY29ucyBr ZXkgc2V0KSBvcmctcmVmaWxlLWNhY2hlKSkpKQ0KDQooZGVmdW4gb3JnLXJlZmlsZS1jYWNoZS1n ZXQgKCZyZXN0IGlkZW50aWZpZXJzKQ0KICAiUmV0cmlldmUgdGhlIGNhY2hlZCB2YWx1ZSBmb3Ig cmVmaWxlIHRhcmdldHMgZ2l2ZW4gYnkgSURFTlRJRklFUlMuIg0KICAoY29uZA0KICAgKChub3Qg b3JnLXJlZmlsZS1jYWNoZSkgbmlsKQ0KICAgKChub3Qgb3JnLXJlZmlsZS11c2UtY2FjaGUpIChv cmctcmVmaWxlLWNhY2hlLWNsZWFyKSBuaWwpDQogICAodA0KICAgIChsZXQgKChzZXQgKGNkciAo YXNzb2MgKHNoYTEgKHByaW4xLXRvLXN0cmluZyBpZGVudGlmaWVycykpDQoJCQkgICBvcmctcmVm aWxlLWNhY2hlKSkpKQ0KICAgICAgKGFuZCBzZXQgKG9yZy1yZWZpbGUtY2FjaGUtY2hlY2stc2V0 IHNldCkgc2V0KSkpKSkNCg0KKGRlZnVuIG9yZy1yZWZpbGUtZ2V0LXRhcmdldHMgKCZvcHRpb25h bCBkZWZhdWx0LWJ1ZmZlciBleGNsdWRlZC1lbnRyaWVzKQ0KICAiUHJvZHVjZSBhIHRhYmxlIHdp dGggcmVmaWxlIHRhcmdldHMuIg0KICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCBuaWwpDQoJOzsg b3RoZXJ3aXNlIG9yZyBjb25mdXNlcyAiVE9ETyIgYXMgYSBrdyBhbmQgIlRvZG8iIGFzIGEgd29y ZA0KCShlbnRyaWVzIChvciBvcmctcmVmaWxlLXRhcmdldHMgJygobmlsIC4gKDpsZXZlbCAuIDEp KSkpKQ0KCXRhcmdldHMgdGdzIHR4dCByZSBmaWxlcyBmIGRlc2MgZGVzY3JlIGZhc3QtcGF0aC1w IGxldmVsIHBvczApDQogICAgKG1lc3NhZ2UgIkdldHRpbmcgdGFyZ2V0cy4uLiIpDQogICAgKHdp dGgtY3VycmVudC1idWZmZXIgKG9yIGRlZmF1bHQtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpDQog ICAgICAod2hpbGUgKHNldHEgZW50cnkgKHBvcCBlbnRyaWVzKSkNCgkoc2V0cSBmaWxlcyAoY2Fy IGVudHJ5KSBkZXNjIChjZHIgZW50cnkpKQ0KCShzZXRxIGZhc3QtcGF0aC1wIG5pbCkNCgkoY29u ZA0KCSAoKG51bGwgZmlsZXMpIChzZXRxIGZpbGVzIChsaXN0IChjdXJyZW50LWJ1ZmZlcikpKSkN CgkgKChlcSBmaWxlcyAnb3JnLWFnZW5kYS1maWxlcykNCgkgIChzZXRxIGZpbGVzIChvcmctYWdl bmRhLWZpbGVzICd1bnJlc3RyaWN0ZWQpKSkNCgkgKChhbmQgKHN5bWJvbHAgZmlsZXMpIChmYm91 bmRwIGZpbGVzKSkNCgkgIChzZXRxIGZpbGVzIChmdW5jYWxsIGZpbGVzKSkpDQoJICgoYW5kIChz eW1ib2xwIGZpbGVzKSAoYm91bmRwIGZpbGVzKSkNCgkgIChzZXRxIGZpbGVzIChzeW1ib2wtdmFs dWUgZmlsZXMpKSkpDQoJKGlmIChzdHJpbmdwIGZpbGVzKSAoc2V0cSBmaWxlcyAobGlzdCBmaWxl cykpKQ0KCShjb25kDQoJICgoZXEgKGNhciBkZXNjKSA6dGFnKQ0KCSAgKHNldHEgZGVzY3JlIChj b25jYXQgIl5cXCorWyBcdF0rLio/OiIgKHJlZ2V4cC1xdW90ZSAoY2RyIGRlc2MpKSAiOiIpKSkN CgkgKChlcSAoY2FyIGRlc2MpIDp0b2RvKQ0KCSAgKHNldHEgZGVzY3JlIChjb25jYXQgIl5cXCor WyBcdF0rIiAocmVnZXhwLXF1b3RlIChjZHIgZGVzYykpICJbIFx0XSIpKSkNCgkgKChlcSAoY2Fy IGRlc2MpIDpyZWdleHApDQoJICAoc2V0cSBkZXNjcmUgKGNkciBkZXNjKSkpDQoJICgoZXEgKGNh ciBkZXNjKSA6bGV2ZWwpDQoJICAoc2V0cSBkZXNjcmUgKGNvbmNhdCAiXlxcKlxceyIgKG51bWJl ci10by1zdHJpbmcNCgkJCQkJICAoaWYgb3JnLW9kZC1sZXZlbHMtb25seQ0KCQkJCQkgICAgICAo MS0gKCogMiAoY2RyIGRlc2MpKSkNCgkJCQkJICAgIChjZHIgZGVzYykpKQ0KCQkJICAgICAgICJc XH1bIFx0XSIpKSkNCgkgKChlcSAoY2FyIGRlc2MpIDptYXhsZXZlbCkNCgkgIChzZXRxIGZhc3Qt cGF0aC1wIHQpDQoJICAoc2V0cSBkZXNjcmUgKGNvbmNhdCAiXlxcKlxcezEsIiAobnVtYmVyLXRv LXN0cmluZw0KCQkJCQkgICAgKGlmIG9yZy1vZGQtbGV2ZWxzLW9ubHkNCgkJCQkJCSgxLSAoKiAy IChjZHIgZGVzYykpKQ0KCQkJCQkgICAgICAoY2RyIGRlc2MpKSkNCgkJCSAgICAgICAiXFx9WyBc dF0iKSkpDQoJICh0IChlcnJvciAiQmFkIHJlZmlsaW5nIHRhcmdldCBkZXNjcmlwdGlvbiAlcyIg ZGVzYykpKQ0KCSh3aGlsZSAoc2V0cSBmIChwb3AgZmlsZXMpKQ0KCSAgKHdpdGgtY3VycmVudC1i dWZmZXINCgkgICAgICAoaWYgKGJ1ZmZlcnAgZikgZiAob3JnLWdldC1hZ2VuZGEtZmlsZS1idWZm ZXIgZikpDQoJICAgIChvcg0KCSAgICAgKHNldHEgdGdzIChvcmctcmVmaWxlLWNhY2hlLWdldCAo YnVmZmVyLWZpbGUtbmFtZSkgZGVzY3JlKSkNCgkgICAgIChwcm9nbg0KCSAgICAgICAoaWYgKGJ1 ZmZlcnAgZikgKHNldHEgZiAoYnVmZmVyLWZpbGUtbmFtZQ0KCQkJCQkoYnVmZmVyLWJhc2UtYnVm ZmVyIGYpKSkpDQoJICAgICAgIChzZXRxIGYgKGFuZCBmIChleHBhbmQtZmlsZS1uYW1lIGYpKSkN CgkgICAgICAgKGlmIChlcSBvcmctcmVmaWxlLXVzZS1vdXRsaW5lLXBhdGggJ2ZpbGUpDQoJCSAg IChwdXNoIChsaXN0IChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGYpIGYgbmlsIG5pbCkgdGdzKSkN CgkgICAgICAgKHNhdmUtZXhjdXJzaW9uDQoJCSAoc2F2ZS1yZXN0cmljdGlvbg0KCQkgICAod2lk ZW4pDQoJCSAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQoJCSAgICh3aGlsZSAocmUtc2VhcmNo LWZvcndhcmQgZGVzY3JlIG5pbCB0KQ0KCQkgICAgIChnb3RvLWNoYXIgKHNldHEgcG9zMCAocG9p bnQtYXQtYm9sKSkpDQoJCSAgICAgKGNhdGNoICduZXh0DQoJCSAgICAgICAod2hlbiBvcmctcmVm aWxlLXRhcmdldC12ZXJpZnktZnVuY3Rpb24NCgkJCSAoc2F2ZS1tYXRjaC1kYXRhDQoJCQkgICAo b3IgKGZ1bmNhbGwgb3JnLXJlZmlsZS10YXJnZXQtdmVyaWZ5LWZ1bmN0aW9uKQ0KCQkJICAgICAg ICh0aHJvdyAnbmV4dCB0KSkpKQ0KCQkgICAgICAgKHdoZW4gKGFuZCAobG9va2luZy1hdCBvcmct Y29tcGxleC1oZWFkaW5nLXJlZ2V4cCkNCgkJCQkgIChub3QgKG1lbWJlciAobWF0Y2gtc3RyaW5n IDQpIGV4Y2x1ZGVkLWVudHJpZXMpKQ0KCQkJCSAgKG1hdGNoLXN0cmluZyA0KSkNCgkJCSAoc2V0 cSBsZXZlbCAob3JnLXJlZHVjZWQtbGV2ZWwNCgkJCQkgICAgICAoLSAobWF0Y2gtZW5kIDEpICht YXRjaC1iZWdpbm5pbmcgMSkpKQ0KCQkJICAgICAgIHR4dCAob3JnLWxpbmstZGlzcGxheS1mb3Jt YXQgKG1hdGNoLXN0cmluZyA0KSkNCgkJCSAgICAgICB0eHQgKHJlcGxhY2UtcmVnZXhwLWluLXN0 cmluZyAiXFwoICpcW1swLTldKy8/WzAtOV0qJT9cXVxcKSskIiAiIiB0eHQpDQoJCQkgICAgICAg cmUgKGZvcm1hdCBvcmctY29tcGxleC1oZWFkaW5nLXJlZ2V4cC1mb3JtYXQNCgkJCQkJICAocmVn ZXhwLXF1b3RlIChtYXRjaC1zdHJpbmcgNCkpKSkNCgkJCSAod2hlbiBvcmctcmVmaWxlLXVzZS1v dXRsaW5lLXBhdGgNCgkJCSAgIChzZXRxIHR4dCAobWFwY29uY2F0DQoJCQkJICAgICAgJ29yZy1w cm90ZWN0LXNsYXNoDQoJCQkJICAgICAgKGFwcGVuZA0KCQkJCSAgICAgICAoaWYgKGVxIG9yZy1y ZWZpbGUtdXNlLW91dGxpbmUtcGF0aA0KCQkJCQkgICAgICAgJ2ZpbGUpDQoJCQkJCSAgIChsaXN0 IChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5DQoJCQkJCQkgIChidWZmZXItZmlsZS1uYW1lDQoJCQkJ CQkgICAoYnVmZmVyLWJhc2UtYnVmZmVyKSkpKQ0KCQkJCQkgKGlmIChlcSBvcmctcmVmaWxlLXVz ZS1vdXRsaW5lLXBhdGgNCgkJCQkJCSAnZnVsbC1maWxlLXBhdGgpDQoJCQkJCSAgICAgKGxpc3Qg KGJ1ZmZlci1maWxlLW5hbWUNCgkJCQkJCSAgICAoYnVmZmVyLWJhc2UtYnVmZmVyKSkpKSkNCgkJ CQkgICAgICAgKG9yZy1nZXQtb3V0bGluZS1wYXRoIGZhc3QtcGF0aC1wDQoJCQkJCQkJICAgICBs ZXZlbCB0eHQpDQoJCQkJICAgICAgIChsaXN0IHR4dCkpDQoJCQkJICAgICAgIi8iKSkpDQoJCQkg KHB1c2ggKGxpc3QgdHh0IGYgcmUgKG9yZy1yZWZpbGUtbWFya2VyIChwb2ludCkpKQ0KCQkJICAg ICAgIHRncykpKQ0KCQkgICAgICh3aGVuICg9IChwb2ludCkgcG9zMCkNCgkJICAgICAgIDs7IHZl cmlmaWNhdGlvbiBmdW5jdGlvbiBoYXMgbm90IG1vdmVkIHBvaW50DQoJCSAgICAgICAoZ290by1j aGFyIChwb2ludC1hdC1lb2wpKSkpKSkpKQ0KCSAgICAod2hlbiBvcmctcmVmaWxlLXVzZS1jYWNo ZQ0KCSAgICAgIChvcmctcmVmaWxlLWNhY2hlLXB1dCB0Z3MgKGJ1ZmZlci1maWxlLW5hbWUpIGRl c2NyZSkpDQoJICAgIChzZXRxIHRhcmdldHMgKGFwcGVuZCB0Z3MgdGFyZ2V0cykpKSkpKQ0KICAg IChtZXNzYWdlICJHZXR0aW5nIHRhcmdldHMuLi5kb25lIikNCiAgICAobnJldmVyc2UgdGFyZ2V0 cykpKQ0KDQooZGVmdW4gb3JnLXByb3RlY3Qtc2xhc2ggKHMpDQogICh3aGlsZSAoc3RyaW5nLW1h dGNoICIvIiBzKQ0KICAgIChzZXRxIHMgKHJlcGxhY2UtbWF0Y2ggIlxcIiB0IHQgcykpKQ0KICBz KQ0KDQooZGVmdmFyIG9yZy1vbHBhIChtYWtlLXZlY3RvciAyMCBuaWwpKQ0KDQooZGVmdW4gb3Jn LWdldC1vdXRsaW5lLXBhdGggKCZvcHRpb25hbCBmYXN0cCBsZXZlbCBoZWFkaW5nKQ0KICAiUmV0 dXJuIHRoZSBvdXRsaW5lIHBhdGggdG8gdGhlIGN1cnJlbnQgZW50cnksIGFzIGEgbGlzdC4NCg0K VGhlIHBhcmFtZXRlcnMgRkFTVFAsIExFVkVMLCBhbmQgSEVBRElORyBhcmUgZm9yIHVzZSBieSBh IHNjYW5uZXINCnJvdXRpbmUgd2hpY2ggbWFrZXMgb3V0bGluZSBwYXRoIGRlcml2YXRpb25zIGZv ciBhbiBlbnRpcmUgZmlsZSwNCmF2b2lkaW5nIGJhY2t0cmFjaW5nLiAgUmVmaWxlIHRhcmdldCBj b2xsZWN0aW9uIG1ha2VzIHVzZSBvZiB0aGF0LiINCiAgKGlmIGZhc3RwDQogICAgICAocHJvZ24N CgkoaWYgKD4gbGV2ZWwgMTkpDQoJICAgIChlcnJvciAiT3V0bGluZSBwYXRoIGZhaWx1cmUsIG1v cmUgdGhhbiAxOSBsZXZlbHMiKSkNCgkobG9vcCBmb3IgaSBmcm9tIGxldmVsIHVwdG8gMTkgZG8N CgkgICAgICAoYXNldCBvcmctb2xwYSBpIG5pbCkpDQoJKHByb2cxDQoJICAgIChkZWxxIG5pbCAo YXBwZW5kIG9yZy1vbHBhIG5pbCkpDQoJICAoYXNldCBvcmctb2xwYSBsZXZlbCBoZWFkaW5nKSkp DQogICAgKGxldCAocnRuIGNhc2UtZm9sZC1zZWFyY2gpDQogICAgICAoc2F2ZS1leGN1cnNpb24N Cgkoc2F2ZS1yZXN0cmljdGlvbg0KCSAgKHdpZGVuKQ0KCSAgKHdoaWxlIChvcmctdXAtaGVhZGlu Zy1zYWZlKQ0KCSAgICAod2hlbiAobG9va2luZy1hdCBvcmctY29tcGxleC1oZWFkaW5nLXJlZ2V4 cCkNCgkgICAgICAocHVzaCAob3JnLXRyaW0NCgkJICAgICAocmVwbGFjZS1yZWdleHAtaW4tc3Ry aW5nDQoJCSAgICAgIDs7IFJlbW92ZSBzdGF0aXN0aWNhbC9jaGVja2JveGVzIGNvb2tpZXMNCgkJ ICAgICAgIlxcW1swLTldKyVcXF1cXHxcXFtbMC05XSsvWzAtOV0rXFxdIiAiIg0KCQkgICAgICAo b3JnLW1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDQpKSkNCgkJICAgIHJ0bikpKQ0KCSAgcnRu KSkpKSkNCg0KKGRlZnVuIG9yZy1mb3JtYXQtb3V0bGluZS1wYXRoIChwYXRoICZvcHRpb25hbCB3 aWR0aCBwcmVmaXggc2VwYXJhdG9yKQ0KICAiRm9ybWF0IHRoZSBvdXRsaW5lIHBhdGggUEFUSCBm b3IgZGlzcGxheS4NCldJRFRIIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRo YXQgaXMgYXZhaWxhYmxlLg0KUFJFRklYIGlzIGEgcHJlZml4IHRvIGJlIGluY2x1ZGVkIGluIHRo ZSByZXR1cm5lZCBzdHJpbmcsDQpzdWNoIGFzIHRoZSBmaWxlIG5hbWUuDQpTRVBBUkFUT1IgaXMg aW5zZXJ0ZWQgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBwYXRoLA0KdGhlIGRl ZmF1bHQgaXMgXCIvXCIuIg0KICAoc2V0cSB3aWR0aCAob3Igd2lkdGggNzkpKQ0KICAoaWYgcHJl Zml4IChzZXRxIHdpZHRoICgtIHdpZHRoIChsZW5ndGggcHJlZml4KSkpKQ0KICAoaWYgKG5vdCBw YXRoKQ0KICAgICAgKG9yIHByZWZpeCAiIikNCiAgICAobGV0KiAoKG5zdGVwcyAobGVuZ3RoIHBh dGgpKQ0KCSAgICh0b3RhbC13aWR0aCAoKyBuc3RlcHMgKGFwcGx5ICcrIChtYXBjYXIgJ2xlbmd0 aCBwYXRoKSkpKQ0KCSAgIChtYXh3aWR0aCAoaWYgKDw9IHRvdGFsLXdpZHRoIHdpZHRoKQ0KCQkJ IDEwMDAwICA7OyBldmVyeXRoaW5nIGZpdHMNCgkJICAgICAgIDs7IHdlIG5lZWQgdG8gc2hvcnRl biB0aGUgbGV2ZWwgaGVhZGluZ3MNCgkJICAgICAgICgvICgtIHdpZHRoIG5zdGVwcykgbnN0ZXBz KSkpDQoJICAgKG9yZy1vZGQtbGV2ZWxzLW9ubHkgbmlsKQ0KCSAgIChuIDApDQoJICAgKHRvdGFs ICgxKyAobGVuZ3RoIHByZWZpeCkpKSkNCiAgICAgIChzZXRxIG1heHdpZHRoIChtYXggbWF4d2lk dGggMTApKQ0KICAgICAgKGNvbmNhdCBwcmVmaXgNCgkgICAgICAoaWYgcHJlZml4IChvciBzZXBh cmF0b3IgIi8iKSkNCgkgICAgICAobWFwY29uY2F0DQoJICAgICAgIChsYW1iZGEgKGgpDQoJCSAo c2V0cSBuICgxKyBuKSkNCgkJIChpZiAoYW5kICg9IG4gbnN0ZXBzKSAoPCBtYXh3aWR0aCAxMDAw MCkpDQoJCSAgICAgKHNldHEgbWF4d2lkdGggKC0gdG90YWwtd2lkdGggdG90YWwpKSkNCgkJIChp ZiAoPCAobGVuZ3RoIGgpIG1heHdpZHRoKQ0KCQkgICAgIChwcm9nbiAoc2V0cSB0b3RhbCAoKyB0 b3RhbCAobGVuZ3RoIGgpIDEpKSBoKQ0KCQkgICAoc2V0cSBoIChzdWJzdHJpbmcgaCAwICgtIG1h eHdpZHRoIDIpKQ0KCQkJIHRvdGFsICgrIHRvdGFsIG1heHdpZHRoIDEpKQ0KCQkgICAoaWYgKHN0 cmluZy1tYXRjaCAiWyBcdF0rXFwnIiBoKQ0KCQkgICAgICAgKHNldHEgaCAoc3Vic3RyaW5nIGgg MCAobWF0Y2gtYmVnaW5uaW5nIDApKSkpDQoJCSAgIChzZXRxIGggKGNvbmNhdCAgaCAiLi4iKSkp DQoJCSAob3JnLWFkZC1wcm9wcyBoIG5pbCAnZmFjZQ0KCQkJCShudGggKCUgKDEtIG4pIG9yZy1u LWxldmVsLWZhY2VzKQ0KCQkJCSAgICAgb3JnLWxldmVsLWZhY2VzKSkNCgkJIGgpDQoJICAgICAg IHBhdGggKG9yIHNlcGFyYXRvciAiLyIpKSkpKSkNCg0KKGRlZnVuIG9yZy1kaXNwbGF5LW91dGxp bmUtcGF0aCAoJm9wdGlvbmFsIGZpbGUgY3VycmVudCBzZXBhcmF0b3IganVzdC1yZXR1cm4tc3Ry aW5nKQ0KICAiRGlzcGxheSB0aGUgY3VycmVudCBvdXRsaW5lIHBhdGggaW4gdGhlIGVjaG8gYXJl YS4NCg0KSWYgRklMRSBpcyBub24tbmlsLCBwcmVwZW5kIHRoZSBvdXRwdXQgd2l0aCB0aGUgZmls ZSBuYW1lLg0KSWYgQ1VSUkVOVCBpcyBub24tbmlsLCBhcHBlbmQgdGhlIGN1cnJlbnQgaGVhZGlu ZyB0byB0aGUgb3V0cHV0Lg0KU0VQQVJBVE9SIGlzIHBhc3NlZCB0aHJvdWdoIHRvIGBvcmctZm9y bWF0LW91dGxpbmUtcGF0aCcuICBJdCBzZXBhcmF0ZXMNCnRoZSBkaWZmZXJlbnQgcGFydHMgb2Yg dGhlIHBhdGggYW5kIGRlZmF1bHRzIHRvIFwiL1wiLg0KSWYgSlVTVC1SRVRVUk4tU1RSSU5HIGlz IG5vbi1uaWwsIHJldHVybiBhIHN0cmluZywgZG9uJ3QgZGlzcGxheSBhIG1lc3NhZ2UuIg0KICAo aW50ZXJhY3RpdmUgIlAiKQ0KICAobGV0KiAoY2FzZS1mb2xkLXNlYXJjaA0KCSAoYmZuIChidWZm ZXItZmlsZS1uYW1lIChidWZmZXItYmFzZS1idWZmZXIpKSkNCgkgKHBhdGggKGFuZCAoZGVyaXZl ZC1tb2RlLXAgJ29yZy1tb2RlKSAob3JnLWdldC1vdXRsaW5lLXBhdGgpKSkNCgkgcmVzKQ0KICAg IChpZiBjdXJyZW50IChzZXRxIHBhdGggKGFwcGVuZCBwYXRoDQoJCQkJICAgKHNhdmUtZXhjdXJz aW9uDQoJCQkJICAgICAob3JnLWJhY2stdG8taGVhZGluZyB0KQ0KCQkJCSAgICAgKGlmIChsb29r aW5nLWF0IG9yZy1jb21wbGV4LWhlYWRpbmctcmVnZXhwKQ0KCQkJCQkgKGxpc3QgKG1hdGNoLXN0 cmluZyA0KSkpKSkpKQ0KICAgIChzZXRxIHJlcw0KCSAgKG9yZy1mb3JtYXQtb3V0bGluZS1wYXRo DQoJICAgcGF0aA0KCSAgICgxLSAoZnJhbWUtd2lkdGgpKQ0KCSAgIChhbmQgZmlsZSBiZm4gKGNv bmNhdCAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBiZm4pIHNlcGFyYXRvcikpDQoJICAgc2VwYXJh dG9yKSkNCiAgICAoaWYganVzdC1yZXR1cm4tc3RyaW5nDQoJKG9yZy1uby1wcm9wZXJ0aWVzIHJl cykNCiAgICAgIChvcmctdW5sb2dnZWQtbWVzc2FnZSAiJXMiIHJlcykpKSkNCg0KKGRlZnZhciBv cmctcmVmaWxlLWhpc3RvcnkgbmlsDQogICJIaXN0b3J5IGZvciByZWZpbGluZyBvcGVyYXRpb25z LiIpDQoNCihkZWZ2YXIgb3JnLWFmdGVyLXJlZmlsZS1pbnNlcnQtaG9vayBuaWwNCiAgIkhvb2sg cnVuIGFmdGVyIGBvcmctcmVmaWxlJyBoYXMgaW5zZXJ0ZWQgaXRzIHN0dWZmIGF0IHRoZSBuZXcg bG9jYXRpb24uDQpOb3RlIHRoYXQgdGhpcyBpcyBzdGlsbCAqYmVmb3JlKiB0aGUgc3R1ZmYgd2ls bCBiZSByZW1vdmVkIGZyb20NCnRoZSAqb2xkKiBsb2NhdGlvbi4iKQ0KDQooZGVmdmFyIG9yZy1j YXB0dXJlLWxhc3Qtc3RvcmVkLW1hcmtlcikNCihkZWZ2YXIgb3JnLXJlZmlsZS1rZWVwIG5pbA0K ICAiTm9uLW5pbCBtZWFucyBgb3JnLXJlZmlsZScgd2lsbCBjb3B5IGluc3RlYWQgb2YgcmVmaWxl LiIpDQoNCihkZWZ1biBvcmctY29weSAoKQ0KICAiTGlrZSBgb3JnLXJlZmlsZScsIGJ1dCBjb3B5 LiINCiAgKGludGVyYWN0aXZlKQ0KICAobGV0ICgob3JnLXJlZmlsZS1rZWVwIHQpKQ0KICAgIChm dW5jYWxsICdvcmctcmVmaWxlIG5pbCBuaWwgbmlsICJDb3B5IikpKQ0KDQooZGVmdW4gb3JnLXJl ZmlsZSAoJm9wdGlvbmFsIGdvdG8gZGVmYXVsdC1idWZmZXIgcmZsb2MgbXNnKQ0KICAiTW92ZSB0 aGUgZW50cnkgb3IgZW50cmllcyBhdCBwb2ludCB0byBhbm90aGVyIGhlYWRpbmcuDQpUaGUgbGlz dCBvZiB0YXJnZXQgaGVhZGluZ3MgaXMgY29tcGlsZWQgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGlu DQpgb3JnLXJlZmlsZS10YXJnZXRzJywgd2hpY2ggc2VlLg0KDQpBdCB0aGUgdGFyZ2V0IGxvY2F0 aW9uLCB0aGUgZW50cnkgaXMgZmlsZWQgYXMgYSBzdWJpdGVtIG9mIHRoZSB0YXJnZXQNCmhlYWRp bmcuICBEZXBlbmRpbmcgb24gYG9yZy1yZXZlcnNlLW5vdGUtb3JkZXInLCB0aGUgbmV3IHN1Yml0 ZW0gd2lsbA0KZWl0aGVyIGJlIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBzdWJpdGVtLg0KDQpJZiB0 aGVyZSBpcyBhbiBhY3RpdmUgcmVnaW9uLCBhbGwgZW50cmllcyBpbiB0aGF0IHJlZ2lvbiB3aWxs IGJlIG1vdmVkLg0KSG93ZXZlciwgdGhlIHJlZ2lvbiBtdXN0IGZ1bGZpbGwgdGhlIHJlcXVpcmVt ZW50IHRoYXQgdGhlIGZpcnN0IGhlYWRpbmcNCmlzIHRoZSBmaXJzdCBvbmUgc2V0cyB0aGUgdG9w LWxldmVsIG9mIHRoZSBtb3ZlZCB0ZXh0IC0gYXQgbW9zdCBzaWJsaW5ncw0KYmVsb3cgaXQgYXJl IGFsbG93ZWQuDQoNCldpdGggcHJlZml4IGFyZyBHT1RPLCB0aGUgY29tbWFuZCB3aWxsIG9ubHkg dmlzaXQgdGhlIHRhcmdldCBsb2NhdGlvbg0KYW5kIG5vdCBhY3R1YWxseSBtb3ZlIGFueXRoaW5n Lg0KDQpXaXRoIGEgZG91YmxlIHByZWZpeCBhcmcgXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBcXFt1 bml2ZXJzYWwtYXJndW1lbnRdLCBcDQpnbyB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGxhc3Qg cmVmaWxpbmcgb3BlcmF0aW9uIGhhcyBwdXQgdGhlIHN1YnRyZWUuDQoNCldpdGggYSBudW1lcmlj IHByZWZpeCBhcmd1bWVudCBvZiBgMicsIHJlZmlsZSB0byB0aGUgcnVubmluZyBjbG9jay4NCg0K V2l0aCBhIG51bWVyaWMgcHJlZml4IGFyZ3VtZW50IG9mIGAzJywgZW11bGF0ZSBgb3JnLXJlZmls ZS1rZWVwJw0KYmVpbmcgc2V0IHRvIGB0JyBhbmQgY29weSB0byB0aGUgdGFyZ2V0IGxvY2F0aW9u LCBkb24ndCBtb3ZlIGl0Lg0KQmV3YXJlIHRoYXQga2VlcGluZyByZWZpbGVkIGVudHJpZXMgbWF5 IHJlc3VsdCBpbiBkdXBsaWNhdGVkIElEDQpwcm9wZXJ0aWVzLg0KDQpSRkxPQyBjYW4gYmUgYSBy ZWZpbGUgbG9jYXRpb24gb2J0YWluZWQgaW4gYSBkaWZmZXJlbnQgd2F5Lg0KDQpNU0cgaXMgYSBz dHJpbmcgdG8gcmVwbGFjZSBcIlJlZmlsZVwiIGluIHRoZSBkZWZhdWx0IHByb21wdCB3aXRoDQph bm90aGVyIHZlcmIuICBFLmcuIGBvcmctY29weScgc2V0cyB0aGlzIHBhcmFtZXRlciB0byBcIkNv cHlcIi4NCg0KU2VlIGFsc28gYG9yZy1yZWZpbGUtdXNlLW91dGxpbmUtcGF0aCcgYW5kIGBvcmct Y29tcGxldGlvbi11c2UtaWRvJy4NCg0KSWYgeW91IGFyZSB1c2luZyB0YXJnZXQgY2FjaGluZyAo c2VlIGBvcmctcmVmaWxlLXVzZS1jYWNoZScpLA0KeW91IGhhdmUgdG8gY2xlYXIgdGhlIHRhcmdl dCBjYWNoZSBpbiBvcmRlciB0byBmaW5kIG5ldyB0YXJnZXRzLg0KVGhpcyBjYW4gYmUgZG9uZSB3 aXRoIGEgMCBwcmVmaXggKGBDLTAgQy1jIEMtdycpIG9yIGEgdHJpcGxlDQpwcmVmaXggYXJndW1l bnQgKGBDLXUgQy11IEMtdSBDLWMgQy13JykuIg0KDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChp ZiAobWVtYmVyIGdvdG8gJygwICg2NCkpKQ0KICAgICAgKG9yZy1yZWZpbGUtY2FjaGUtY2xlYXIp DQogICAgKGxldCogKChhY3Rpb25tc2cgKGNvbmQgKG1zZyBtc2cpDQoJCQkgICAgKChlcXVhbCBn b3RvIDMpICJSZWZpbGUgKGFuZCBrZWVwKSIpDQoJCQkgICAgKHQgIlJlZmlsZSIpKSkNCgkgICAo Y2J1ZiAoY3VycmVudC1idWZmZXIpKQ0KCSAgIChyZWdpb25wIChvcmctcmVnaW9uLWFjdGl2ZS1w KSkNCgkgICAocmVnaW9uLXN0YXJ0IChhbmQgcmVnaW9ucCAocmVnaW9uLWJlZ2lubmluZykpKQ0K CSAgIChyZWdpb24tZW5kIChhbmQgcmVnaW9ucCAocmVnaW9uLWVuZCkpKQ0KCSAgIChmaWxlbmFt ZSAoYnVmZmVyLWZpbGUtbmFtZSAoYnVmZmVyLWJhc2UtYnVmZmVyIGNidWYpKSkNCgkgICAob3Jn LXJlZmlsZS1rZWVwIChpZiAoZXF1YWwgZ290byAzKSB0IG9yZy1yZWZpbGUta2VlcCkpDQoJICAg cG9zIGl0IG5idWYgZmlsZSByZSBsZXZlbCByZXZlcnNlZCkNCiAgICAgIChzZXRxIGxhc3QtY29t bWFuZCBuaWwpDQogICAgICAod2hlbiByZWdpb25wDQoJKGdvdG8tY2hhciByZWdpb24tc3RhcnQp DQoJKG9yIChib2xwKSAoZ290by1jaGFyIChwb2ludC1hdC1ib2wpKSkNCgkoc2V0cSByZWdpb24t c3RhcnQgKHBvaW50KSkNCgkodW5sZXNzIChvciAob3JnLWtpbGwtaXMtc3VidHJlZS1wDQoJCSAg ICAgKGJ1ZmZlci1zdWJzdHJpbmcgcmVnaW9uLXN0YXJ0IHJlZ2lvbi1lbmQpKQ0KCQkgICAgKHBy b2cxIG9yZy1yZWZpbGUtYWN0aXZlLXJlZ2lvbi13aXRoaW4tc3VidHJlZQ0KCQkgICAgICAobGV0 ICgocyAocG9pbnQtYXQtZW9sKSkpDQoJCQkob3JnLXRvZ2dsZS1oZWFkaW5nKQ0KCQkJKHNldHEg cmVnaW9uLWVuZCAoKyAoLSAocG9pbnQtYXQtZW9sKSBzKSByZWdpb24tZW5kKSkpKSkNCgkgICh1 c2VyLWVycm9yICJUaGUgcmVnaW9uIGlzIG5vdCBhIChzZXF1ZW5jZSBvZikgc3VidHJlZShzKSIp KSkNCiAgICAgIChpZiAoZXF1YWwgZ290byAnKDE2KSkNCgkgIChvcmctcmVmaWxlLWdvdG8tbGFz dC1zdG9yZWQpDQoJKHdoZW4gKG9yDQoJICAgICAgIChhbmQgKGVxdWFsIGdvdG8gMikNCgkJICAg IG9yZy1jbG9jay1oZC1tYXJrZXIgKG1hcmtlci1idWZmZXIgb3JnLWNsb2NrLWhkLW1hcmtlcikN CgkJICAgIChwcm9nMQ0KCQkJKHNldHEgaXQgKGxpc3QgKG9yIG9yZy1jbG9jay1oZWFkaW5nICJy dW5uaW5nIGNsb2NrIikNCgkJCQkgICAgICAgKGJ1ZmZlci1maWxlLW5hbWUNCgkJCQkJKG1hcmtl ci1idWZmZXIgb3JnLWNsb2NrLWhkLW1hcmtlcikpDQoJCQkJICAgICAgICIiDQoJCQkJICAgICAg IChtYXJrZXItcG9zaXRpb24gb3JnLWNsb2NrLWhkLW1hcmtlcikpKQ0KCQkgICAgICAoc2V0cSBn b3RvIG5pbCkpKQ0KCSAgICAgICAoc2V0cSBpdCAob3IgcmZsb2MNCgkJCSAgICAobGV0IChoZWFk aW5nLXRleHQpDQoJCQkgICAgICAoc2F2ZS1leGN1cnNpb24NCgkJCQkodW5sZXNzIChhbmQgZ290 byAobGlzdHAgZ290bykpDQoJCQkJICAob3JnLWJhY2stdG8taGVhZGluZyB0KQ0KCQkJCSAgKHNl dHEgaGVhZGluZy10ZXh0DQoJCQkJCShudGggNCAob3JnLWhlYWRpbmctY29tcG9uZW50cykpKSkN Cg0KCQkJCShvcmctcmVmaWxlLWdldC1sb2NhdGlvbg0KCQkJCSAoY29uZCAoKGFuZCBnb3RvIChs aXN0cCBnb3RvKSkgIkdvdG8iKQ0KCQkJCSAgICAgICAocmVnaW9ucCAoY29uY2F0IGFjdGlvbm1z ZyAiIHJlZ2lvbiB0byIpKQ0KCQkJCSAgICAgICAodCAoY29uY2F0IGFjdGlvbm1zZyAiIHN1YnRy ZWUgXCIiDQoJCQkJCQkgIGhlYWRpbmctdGV4dCAiXCIgdG8iKSkpDQoJCQkJIGRlZmF1bHQtYnVm ZmVyDQoJCQkJIChhbmQgKG5vdCAoZXF1YWwgJyg0KSBnb3RvKSkNCgkJCQkgICAgICBvcmctcmVm aWxlLWFsbG93LWNyZWF0aW5nLXBhcmVudC1ub2RlcykNCgkJCQkgZ290bykpKSkpKQ0KCSAgKHNl dHEgZmlsZSAobnRoIDEgaXQpDQoJCXJlIChudGggMiBpdCkNCgkJcG9zIChudGggMyBpdCkpDQoJ ICAoaWYgKGFuZCAobm90IGdvdG8pDQoJCSAgIHBvcw0KCQkgICAoZXF1YWwgKGJ1ZmZlci1maWxl LW5hbWUpIGZpbGUpDQoJCSAgIChpZiByZWdpb25wDQoJCSAgICAgICAoYW5kICg+PSBwb3MgcmVn aW9uLXN0YXJ0KQ0KCQkJICAgICg8PSBwb3MgcmVnaW9uLWVuZCkpDQoJCSAgICAgKGFuZCAoPj0g cG9zIChwb2ludCkpDQoJCQkgICg8IHBvcyAoc2F2ZS1leGN1cnNpb24NCgkJCQkgICAob3JnLWVu ZC1vZi1zdWJ0cmVlIHQgdCkpKSkpKQ0KCSAgICAgIChlcnJvciAiQ2Fubm90IHJlZmlsZSB0byBw b3NpdGlvbiBpbnNpZGUgdGhlIHRyZWUgb3IgcmVnaW9uIikpDQoNCgkgIChzZXRxIG5idWYgKG9y IChmaW5kLWJ1ZmZlci12aXNpdGluZyBmaWxlKQ0KCQkJIChmaW5kLWZpbGUtbm9zZWxlY3QgZmls ZSkpKQ0KCSAgKGlmIChhbmQgZ290byAobm90IChlcXVhbCBnb3RvIDMpKSkNCgkgICAgICAocHJv Z24NCgkJKG9yZy1wb3AtdG8tYnVmZmVyLXNhbWUtd2luZG93IG5idWYpDQoJCShnb3RvLWNoYXIg cG9zKQ0KCQkob3JnLXNob3ctY29udGV4dCAnb3JnLWdvdG8pKQ0KCSAgICAoaWYgcmVnaW9ucA0K CQkocHJvZ24NCgkJICAob3JnLWtpbGwtbmV3IChidWZmZXItc3Vic3RyaW5nIHJlZ2lvbi1zdGFy dCByZWdpb24tZW5kKSkNCgkJICAob3JnLXNhdmUtbWFya2Vycy1pbi1yZWdpb24gcmVnaW9uLXN0 YXJ0IHJlZ2lvbi1lbmQpKQ0KCSAgICAgIChvcmctY29weS1zdWJ0cmVlIDEgbmlsIHQpKQ0KCSAg ICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoc2V0cSBuYnVmIChvciAoZmluZC1idWZmZXItdmlzaXRp bmcgZmlsZSkNCgkJCQkJCShmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZSkpKQ0KCSAgICAgIChzZXRx IHJldmVyc2VkIChvcmctbm90ZXMtb3JkZXItcmV2ZXJzZWQtcCkpDQoJICAgICAgKHNhdmUtZXhj dXJzaW9uDQoJCShzYXZlLXJlc3RyaWN0aW9uDQoJCSAgKHdpZGVuKQ0KCQkgIChpZiBwb3MNCgkJ ICAgICAgKHByb2duDQoJCQkoZ290by1jaGFyIHBvcykNCgkJCShsb29raW5nLWF0IG9yZy1vdXRs aW5lLXJlZ2V4cCkNCgkJCShzZXRxIGxldmVsIChvcmctZ2V0LXZhbGlkLWxldmVsIChmdW5jYWxs IG91dGxpbmUtbGV2ZWwpIDEpKQ0KCQkJKGdvdG8tY2hhcg0KCQkJIChpZiByZXZlcnNlZA0KCQkJ ICAgICAob3IgKG91dGxpbmUtbmV4dC1oZWFkaW5nKSAocG9pbnQtbWF4KSkNCgkJCSAgIChvciAo c2F2ZS1leGN1cnNpb24gKG9yZy1nZXQtbmV4dC1zaWJsaW5nKSkNCgkJCSAgICAgICAob3JnLWVu ZC1vZi1zdWJ0cmVlIHQgdCkNCgkJCSAgICAgICAocG9pbnQtbWF4KSkpKSkNCgkJICAgIChzZXRx IGxldmVsIDEpDQoJCSAgICAoaWYgKG5vdCByZXZlcnNlZCkNCgkJCShnb3RvLWNoYXIgKHBvaW50 LW1heCkpDQoJCSAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQoJCSAgICAgIChvciAob3V0 bGluZS1uZXh0LWhlYWRpbmcpIChnb3RvLWNoYXIgKHBvaW50LW1heCkpKSkpDQoJCSAgKGlmIChu b3QgKGJvbHApKSAobmV3bGluZSkpDQoJCSAgKG9yZy1wYXN0ZS1zdWJ0cmVlIGxldmVsKQ0KCQkg ICh3aGVuIG9yZy1sb2ctcmVmaWxlDQoJCSAgICAob3JnLWFkZC1sb2ctc2V0dXAgJ3JlZmlsZSBu aWwgbmlsICdmaW5kcG9zIG9yZy1sb2ctcmVmaWxlKQ0KCQkgICAgKHVubGVzcyAoZXEgb3JnLWxv Zy1yZWZpbGUgJ25vdGUpDQoJCSAgICAgIChzYXZlLWV4Y3Vyc2lvbiAob3JnLWFkZC1sb2ctbm90 ZSkpKSkNCgkJICAoYW5kIG9yZy1hdXRvLWFsaWduLXRhZ3MNCgkJICAgICAgIChsZXQgKChvcmct bG9vcC1vdmVyLWhlYWRsaW5lcy1pbi1hY3RpdmUtcmVnaW9uIG5pbCkpDQoJCQkgKG9yZy1zZXQt dGFncyBuaWwgdCkpKQ0KCQkgIChsZXQgKChib29rbWFyay1uYW1lIChwbGlzdC1nZXQgb3JnLWJv b2ttYXJrLW5hbWVzLXBsaXN0DQoJCQkJCQkgIDpsYXN0LXJlZmlsZSkpKQ0KCQkgICAgKHdoZW4g Ym9va21hcmstbmFtZQ0KCQkgICAgICAod2l0aC1kZW1vdGVkLWVycm9ycw0KICAgICAgICAgICAg ICAgICAgICAgICAgICAoYm9va21hcmstc2V0IGJvb2ttYXJrLW5hbWUpKSkpDQoJCSAgOzsgSWYg d2UgYXJlIHJlZmlsaW5nIGZvciBjYXB0dXJlLCBtYWtlIHN1cmUgdGhhdCB0aGUNCgkJICA7OyBs YXN0LWNhcHR1cmUgcG9pbnRlcnMgcG9pbnQgaGVyZQ0KCQkgICh3aGVuIChvcmctYm91bmQtYW5k LXRydWUtcCBvcmctcmVmaWxlLWZvci1jYXB0dXJlKQ0KCQkgICAgKGxldCAoKGJvb2ttYXJrLW5h bWUgKHBsaXN0LWdldCBvcmctYm9va21hcmstbmFtZXMtcGxpc3QNCgkJCQkJCSAgICA6bGFzdC1j YXB0dXJlLW1hcmtlcikpKQ0KCQkgICAgICAod2hlbiBib29rbWFyay1uYW1lDQoJCQkod2l0aC1k ZW1vdGVkLWVycm9ycw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChib29rbWFyay1zZXQg Ym9va21hcmstbmFtZSkpKSkNCgkJICAgIChtb3ZlLW1hcmtlciBvcmctY2FwdHVyZS1sYXN0LXN0 b3JlZC1tYXJrZXIgKHBvaW50KSkpDQoJCSAgKGlmIChmYm91bmRwICdkZWFjdGl2YXRlLW1hcmsp IChkZWFjdGl2YXRlLW1hcmspKQ0KCQkgIChydW4taG9va3MgJ29yZy1hZnRlci1yZWZpbGUtaW5z ZXJ0LWhvb2spKSkpDQoJICAgICh1bmxlc3Mgb3JnLXJlZmlsZS1rZWVwDQoJICAgICAgKGlmIHJl Z2lvbnANCgkJICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQpICgrIChwb2ludCkgKC0gcmVnaW9uLWVu ZCByZWdpb24tc3RhcnQpKSkNCgkJKGRlbGV0ZS1yZWdpb24NCgkJIChhbmQgKG9yZy1iYWNrLXRv LWhlYWRpbmcgdCkgKHBvaW50KSkNCgkJIChtaW4gKDErIChidWZmZXItc2l6ZSkpIChvcmctZW5k LW9mLXN1YnRyZWUgdCB0KSAocG9pbnQpKSkpKQ0KCSAgICAod2hlbiAoZmVhdHVyZXAgJ29yZy1p bmxpbmV0YXNrKQ0KCSAgICAgIChvcmctaW5saW5ldGFzay1yZW1vdmUtRU5ELW1heWJlKSkNCgkg ICAgKHNldHEgb3JnLW1hcmtlcnMtdG8tbW92ZSBuaWwpDQoJICAgIChtZXNzYWdlIChjb25jYXQg YWN0aW9ubXNnICIgdG8gXCIlc1wiIGluIGZpbGUgJXM6IGRvbmUiKSAoY2FyIGl0KSBmaWxlKSkp KSkpKQ0KDQooZGVmdW4gb3JnLXJlZmlsZS1nb3RvLWxhc3Qtc3RvcmVkICgpDQogICJHbyB0byB0 aGUgbG9jYXRpb24gd2hlcmUgdGhlIGxhc3QgcmVmaWxlIHdhcyBzdG9yZWQuIg0KICAoaW50ZXJh Y3RpdmUpDQogIChib29rbWFyay1qdW1wICJvcmctcmVmaWxlLWxhc3Qtc3RvcmVkIikNCiAgKG1l c3NhZ2UgIlRoaXMgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0IHJlZmlsZSIpKQ0KDQooZGVm dW4gb3JnLXJlZmlsZS0tZ2V0LWxvY2F0aW9uIChyZWZsb2MgdGJsKQ0KICAiV2hlbiB1c2VyIHJl ZmlsZSB0byBSRUZMT0MsIGZpbmQgdGhlIGFzc29jaWF0ZWQgdGFyZ2V0IGluIFRCTC4NCkFsc28g Y2hlY2sgYG9yZy1yZWZpbGUtdGFyZ2V0LXRhYmxlJy4iDQogIChjYXIgKGRlbHENCgluaWwNCgko bWFwY2FyDQoJIChsYW1iZGEgKHIpIChvciAoYXNzb2MgciB0YmwpDQoJCQkgKGFzc29jIHIgb3Jn LXJlZmlsZS10YXJnZXQtdGFibGUpKSkNCgkgKGxpc3QgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmlu ZyAiLyQiICIiIHJlZmxvYykNCgkgICAgICAgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiXFwo W14vXVxcKSQiICJcXDEvIiByZWZsb2MpKSkpKSkNCg0KKGRlZnVuIG9yZy1yZWZpbGUtZ2V0LWxv Y2F0aW9uICgmb3B0aW9uYWwgcHJvbXB0IGRlZmF1bHQtYnVmZmVyIG5ldy1ub2Rlcw0KCQkJCQkg IG5vLWV4Y2x1ZGUpDQogICJQcm9tcHQgdGhlIHVzZXIgZm9yIGEgcmVmaWxlIGxvY2F0aW9uLCB1 c2luZyBQUk9NUFQuDQpQUk9NUFQgc2hvdWxkIG5vdCBiZSBzdWZmaXhlZCB3aXRoIGEgY29sb24g YW5kIGEgc3BhY2UsIGJlY2F1c2UNCnRoaXMgZnVuY3Rpb24gYXBwZW5kcyB0aGUgZGVmYXVsdCB2 YWx1ZSBmcm9tDQpgb3JnLXJlZmlsZS1oaXN0b3J5JyBhdXRvbWF0aWNhbGx5LCBpZiB0aGF0IGlz IG5vdCBlbXB0eS4NCldoZW4gTk8tRVhDTFVERSBpcyBzZXQsIGRvIG5vdCBleGNsdWRlIGhlYWRs aW5lcyBpbiB0aGUgY3VycmVudCBzdWJ0cmVlLA0KdGhpcyBpcyB1c2VkIGZvciB0aGUgR09UTyBp bnRlcmZhY2UuIg0KICAobGV0ICgob3JnLXJlZmlsZS10YXJnZXRzIG9yZy1yZWZpbGUtdGFyZ2V0 cykNCgkob3JnLXJlZmlsZS11c2Utb3V0bGluZS1wYXRoIG9yZy1yZWZpbGUtdXNlLW91dGxpbmUt cGF0aCkNCglleGNsdWRlZC1lbnRyaWVzKQ0KICAgICh3aGVuIChhbmQgKGRlcml2ZWQtbW9kZS1w ICdvcmctbW9kZSkNCgkgICAgICAgKG5vdCBvcmctcmVmaWxlLXVzZS1jYWNoZSkNCgkgICAgICAg KG5vdCBuby1leGNsdWRlKSkNCiAgICAgIChvcmctbWFwLXRyZWUNCiAgICAgICAobGFtYmRhKCkN CgkgKHNldHEgZXhjbHVkZWQtZW50cmllcw0KCSAgICAgICAoYXBwZW5kIGV4Y2x1ZGVkLWVudHJp ZXMgKGxpc3QgKG9yZy1nZXQtaGVhZGluZyB0IHQpKSkpKSkpDQogICAgKHNldHEgb3JnLXJlZmls ZS10YXJnZXQtdGFibGUNCgkgIChvcmctcmVmaWxlLWdldC10YXJnZXRzIGRlZmF1bHQtYnVmZmVy IGV4Y2x1ZGVkLWVudHJpZXMpKSkNCiAgKHVubGVzcyBvcmctcmVmaWxlLXRhcmdldC10YWJsZQ0K ICAgICh1c2VyLWVycm9yICJObyByZWZpbGUgdGFyZ2V0cyIpKQ0KICAobGV0KiAoKGNidWYgKGN1 cnJlbnQtYnVmZmVyKSkNCgkgKHBhcnRpYWwtY29tcGxldGlvbi1tb2RlIG5pbCkNCgkgKGNmbiAo YnVmZmVyLWZpbGUtbmFtZSAoYnVmZmVyLWJhc2UtYnVmZmVyIGNidWYpKSkNCgkgKGNmdW5jIChp ZiAoYW5kIG9yZy1yZWZpbGUtdXNlLW91dGxpbmUtcGF0aA0KCQkJIG9yZy1vdXRsaW5lLXBhdGgt Y29tcGxldGUtaW4tc3RlcHMpDQoJCSAgICAnb3JnLW9scGF0aC1jb21wbGV0aW5nLXJlYWQNCgkJ ICAnb3JnLWljb21wbGV0aW5nLXJlYWQpKQ0KCSAoZXh0cmEgKGlmIG9yZy1yZWZpbGUtdXNlLW91 dGxpbmUtcGF0aCAiLyIgIiIpKQ0KCSAoY2JuZXggKGNvbmNhdCAoYnVmZmVyLW5hbWUpIGV4dHJh KSkNCgkgKGZpbGVuYW1lIChhbmQgY2ZuIChleHBhbmQtZmlsZS1uYW1lIGNmbikpKQ0KCSAodGJs IChtYXBjYXINCgkgICAgICAgKGxhbWJkYSAoeCkNCgkJIChpZiAoYW5kIChub3QgKG1lbWJlciBv cmctcmVmaWxlLXVzZS1vdXRsaW5lLXBhdGgNCgkJCQkgICAgICAgJyhmaWxlIGZ1bGwtZmlsZS1w YXRoKSkpDQoJCQkgIChub3QgKGVxdWFsIGZpbGVuYW1lIChudGggMSB4KSkpKQ0KCQkgICAgIChj b25zIChjb25jYXQgKGNhciB4KSBleHRyYSAiICgiDQoJCQkJICAgKGZpbGUtbmFtZS1ub25kaXJl Y3RvcnkgKG50aCAxIHgpKSAiKSIpDQoJCQkgICAoY2RyIHgpKQ0KCQkgICAoY29ucyAoY29uY2F0 IChjYXIgeCkgZXh0cmEpIChjZHIgeCkpKSkNCgkgICAgICAgb3JnLXJlZmlsZS10YXJnZXQtdGFi bGUpKQ0KCSAoY29tcGxldGlvbi1pZ25vcmUtY2FzZSB0KQ0KCSBjZGVmDQoJIChwcm9tcHQgKGNv bmNhdCBwcm9tcHQNCgkJCSAob3IgKGFuZCAoY2FyIG9yZy1yZWZpbGUtaGlzdG9yeSkNCgkJCQkg IChjb25jYXQgIiAoZGVmYXVsdCAiIChjYXIgb3JnLXJlZmlsZS1oaXN0b3J5KSAiKSIpKQ0KCQkJ ICAgICAoYW5kIChhc3NvYyBjYm5leCB0YmwpIChzZXRxIGNkZWYgY2JuZXgpDQoJCQkJICAoY29u Y2F0ICIgKGRlZmF1bHQgIiBjYm5leCAiKSIpKSkgIjogIikpDQoJIHBhIGFuc3cgcGFyZW50LXRh cmdldCBjaGlsZCBwYXJlbnQgb2xkLWhpc3QpDQogICAgKHNldHEgb2xkLWhpc3Qgb3JnLXJlZmls ZS1oaXN0b3J5KQ0KICAgIChzZXRxIGFuc3cgKGZ1bmNhbGwgY2Z1bmMgcHJvbXB0IHRibCBuaWwg KG5vdCBuZXctbm9kZXMpDQoJCQluaWwgJ29yZy1yZWZpbGUtaGlzdG9yeSAob3IgY2RlZiAoY2Fy IG9yZy1yZWZpbGUtaGlzdG9yeSkpKSkNCiAgICAoaWYgKHNldHEgcGEgKG9yZy1yZWZpbGUtLWdl dC1sb2NhdGlvbiBhbnN3IHRibCkpDQoJKHByb2duDQoJICAob3JnLXJlZmlsZS1jaGVjay1wb3Np dGlvbiBwYSkNCgkgICh3aGVuIChvciAobm90IG9yZy1yZWZpbGUtaGlzdG9yeSkNCgkJICAgIChu b3QgKGVxIG9sZC1oaXN0IG9yZy1yZWZpbGUtaGlzdG9yeSkpDQoJCSAgICAobm90IChlcXVhbCAo Y2FyIHBhKSAoY2FyIG9yZy1yZWZpbGUtaGlzdG9yeSkpKSkNCgkgICAgKHNldHEgb3JnLXJlZmls ZS1oaXN0b3J5DQoJCSAgKGNvbnMgKGNhciBwYSkgKGlmIChhc3NvYyAoY2FyIG9yZy1yZWZpbGUt aGlzdG9yeSkgdGJsKQ0KCQkJCSAgICAgb3JnLXJlZmlsZS1oaXN0b3J5DQoJCQkJICAgKGNkciBv cmctcmVmaWxlLWhpc3RvcnkpKSkpDQoJICAgIChpZiAoZXF1YWwgKGNhciBvcmctcmVmaWxlLWhp c3RvcnkpIChudGggMSBvcmctcmVmaWxlLWhpc3RvcnkpKQ0KCQkocG9wIG9yZy1yZWZpbGUtaGlz dG9yeSkpKQ0KCSAgcGEpDQogICAgICAoaWYgKHN0cmluZy1tYXRjaCAiXFxgXFwoLipcXCkvXFwo W14vXStcXClcXCciIGFuc3cpDQoJICAocHJvZ24NCgkgICAgKHNldHEgcGFyZW50IChtYXRjaC1z dHJpbmcgMSBhbnN3KQ0KCQkgIGNoaWxkIChtYXRjaC1zdHJpbmcgMiBhbnN3KSkNCgkgICAgKHNl dHEgcGFyZW50LXRhcmdldCAob3JnLXJlZmlsZS0tZ2V0LWxvY2F0aW9uIHBhcmVudCB0YmwpKQ0K CSAgICAod2hlbiAoYW5kIHBhcmVudC10YXJnZXQNCgkJICAgICAgIChvciAoZXEgbmV3LW5vZGVz IHQpDQoJCQkgICAoYW5kIChlcSBuZXctbm9kZXMgJ2NvbmZpcm0pDQoJCQkJKHktb3Itbi1wIChm b3JtYXQgIkNyZWF0ZSBuZXcgbm9kZSBcIiVzXCI/ICINCgkJCQkJCSAgY2hpbGQpKSkpKQ0KCSAg ICAgIChvcmctcmVmaWxlLW5ldy1jaGlsZCBwYXJlbnQtdGFyZ2V0IGNoaWxkKSkpDQoJKHVzZXIt ZXJyb3IgIkludmFsaWQgdGFyZ2V0IGxvY2F0aW9uIikpKSkpDQoNCihkZWNsYXJlLWZ1bmN0aW9u IG9yZy1zdHJpbmctbnctcCAib3JnLW1hY3MiIChzKSkNCihkZWZ1biBvcmctcmVmaWxlLWNoZWNr LXBvc2l0aW9uIChyZWZpbGUtcG9pbnRlcikNCiAgIkNoZWNrIGlmIHRoZSByZWZpbGUgcG9pbnRl ciBtYXRjaGVzIHRoZSBoZWFkbGluZSB0byB3aGljaCBpdCBwb2ludHMuIg0KICAobGV0KiAoKGZp bGUgKG50aCAxIHJlZmlsZS1wb2ludGVyKSkNCgkgKHJlIChudGggMiByZWZpbGUtcG9pbnRlcikp DQoJIChwb3MgKG50aCAzIHJlZmlsZS1wb2ludGVyKSkNCgkgYnVmZmVyKQ0KICAgIChpZiAoYW5k IChub3QgKG1hcmtlcnAgcG9zKSkgKG5vdCBmaWxlKSkNCgkodXNlci1lcnJvciAiUGxlYXNlIHNh dmUgdGhlIGJ1ZmZlciB0byBhIGZpbGUgYmVmb3JlIHJlZmlsaW5nIikNCiAgICAgICh3aGVuIChv cmctc3RyaW5nLW53LXAgcmUpDQoJKHNldHEgYnVmZmVyIChpZiAobWFya2VycCBwb3MpDQoJCQkg KG1hcmtlci1idWZmZXIgcG9zKQ0KCQkgICAgICAgKG9yIChmaW5kLWJ1ZmZlci12aXNpdGluZyBm aWxlKQ0KCQkJICAgKGZpbmQtZmlsZS1ub3NlbGVjdCBmaWxlKSkpKQ0KCSh3aXRoLWN1cnJlbnQt YnVmZmVyIGJ1ZmZlcg0KCSAgKHNhdmUtZXhjdXJzaW9uDQoJICAgIChzYXZlLXJlc3RyaWN0aW9u DQoJICAgICAgKHdpZGVuKQ0KCSAgICAgIChnb3RvLWNoYXIgcG9zKQ0KCSAgICAgIChiZWdpbm5p bmctb2YtbGluZSAxKQ0KCSAgICAgICh1bmxlc3MgKG9yZy1sb29raW5nLWF0LXAgcmUpDQoJCSh1 c2VyLWVycm9yICJJbnZhbGlkIHJlZmlsZSBwb3NpdGlvbiwgcGxlYXNlIGNsZWFyIHRoZSBjYWNo ZSB3aXRoIGBDLTAgQy1jIEMtdycgYmVmb3JlIHJlZmlsaW5nIikpKSkpKSkpKQ0KDQooZGVmdW4g b3JnLXJlZmlsZS1uZXctY2hpbGQgKHBhcmVudC10YXJnZXQgY2hpbGQpDQogICJVc2UgcmVmaWxl IHRhcmdldCBQQVJFTlQtVEFSR0VUIHRvIGFkZCBuZXcgQ0hJTEQgYmVsb3cgaXQuIg0KICAodW5s ZXNzIHBhcmVudC10YXJnZXQNCiAgICAoZXJyb3IgIkNhbm5vdCBmaW5kIHBhcmVudCBmb3IgbmV3 IG5vZGUiKSkNCiAgKGxldCAoKGZpbGUgKG50aCAxIHBhcmVudC10YXJnZXQpKQ0KCShwb3MgKG50 aCAzIHBhcmVudC10YXJnZXQpKQ0KCWxldmVsKQ0KICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChv ciAoZmluZC1idWZmZXItdmlzaXRpbmcgZmlsZSkNCgkJCSAgICAgKGZpbmQtZmlsZS1ub3NlbGVj dCBmaWxlKSkNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCShzYXZlLXJlc3RyaWN0aW9uDQoJICAo d2lkZW4pDQoJICAoaWYgcG9zDQoJICAgICAgKGdvdG8tY2hhciBwb3MpDQoJICAgIChnb3RvLWNo YXIgKHBvaW50LW1heCkpDQoJICAgIChpZiAobm90IChib2xwKSkgKG5ld2xpbmUpKSkNCgkgICh3 aGVuIChsb29raW5nLWF0IG9yZy1vdXRsaW5lLXJlZ2V4cCkNCgkgICAgKHNldHEgbGV2ZWwgKGZ1 bmNhbGwgb3V0bGluZS1sZXZlbCkpDQoJICAgIChvcmctZW5kLW9mLXN1YnRyZWUgdCB0KSkNCgkg IChvcmctYmFjay1vdmVyLWVtcHR5LWxpbmVzKQ0KCSAgKGluc2VydCAiXG4iIChtYWtlLXN0cmlu Zw0KCQkJKGlmIHBvcyAob3JnLWdldC12YWxpZC1sZXZlbCBsZXZlbCAxKSAxKSA/KikNCgkJICAi ICIgY2hpbGQgIlxuIikNCgkgIChiZWdpbm5pbmctb2YtbGluZSAwKQ0KCSAgKGxpc3QgKGNvbmNh dCAoY2FyIHBhcmVudC10YXJnZXQpICIvIiBjaGlsZCkgZmlsZSAiIiAocG9pbnQpKSkpKSkpDQoN CihkZWZ1biBvcmctb2xwYXRoLWNvbXBsZXRpbmctcmVhZCAocHJvbXB0IGNvbGxlY3Rpb24gJnJl c3QgYXJncykNCiAgIlJlYWQgYW4gb3V0bGluZSBwYXRoIGxpa2UgYSBmaWxlIG5hbWUuIg0KICAo bGV0ICgodGhldGFibGUgY29sbGVjdGlvbikNCgkob3JnLWNvbXBsZXRpb24tdXNlLWlkbyBuaWwp CSAgIDsgZG9lcyBub3Qgd29yayB3aXRoIGlkby4NCgkob3JnLWNvbXBsZXRpb24tdXNlLWlzd2l0 Y2hiIG5pbCkpIDsgb3IgaXN3aXRjaGINCiAgICAoYXBwbHkNCiAgICAgJ29yZy1pY29tcGxldGlu Zy1yZWFkIHByb21wdA0KICAgICAobGFtYmRhIChzdHJpbmcgcHJlZGljYXRlICZvcHRpb25hbCBm bGFnKQ0KICAgICAgIChsZXQgKHJ0biByIGYgKGwgKGxlbmd0aCBzdHJpbmcpKSkNCgkgKGNvbmQN CgkgICgoZXEgZmxhZyBuaWwpDQoJICAgOzsgdHJ5IGNvbXBsZXRpb24NCgkgICAodHJ5LWNvbXBs ZXRpb24gc3RyaW5nIHRoZXRhYmxlKSkNCgkgICgoZXEgZmxhZyB0KQ0KCSAgIDs7IGFsbC1jb21w bGV0aW9ucw0KCSAgIChzZXRxIHJ0biAoYWxsLWNvbXBsZXRpb25zIHN0cmluZyB0aGV0YWJsZSBw cmVkaWNhdGUpKQ0KCSAgIChtYXBjYXINCgkgICAgKGxhbWJkYSAoeCkNCgkgICAgICAoc2V0cSBy IChzdWJzdHJpbmcgeCBsKSkNCgkgICAgICAoaWYgKHN0cmluZy1tYXRjaCAiIChbXildKikkIiB4 KQ0KCQkgIChzZXRxIGYgKG1hdGNoLXN0cmluZyAwIHgpKQ0KCQkoc2V0cSBmICIiKSkNCgkgICAg ICAoaWYgKHN0cmluZy1tYXRjaCAiLyIgcikNCgkJICAoY29uY2F0IHN0cmluZyAoc3Vic3RyaW5n IHIgMCAobWF0Y2gtZW5kIDApKSBmKQ0KCQl4KSkNCgkgICAgcnRuKSkNCgkgICgoZXEgZmxhZyAn bGFtYmRhKQ0KCSAgIDs7IGV4YWN0IG1hdGNoPw0KCSAgIChhc3NvYyBzdHJpbmcgdGhldGFibGUp KSkpKQ0KICAgICBhcmdzKSkpDQoNCjs7OzsgRHluYW1pYyBibG9ja3MNCg0KKGRlZnVuIG9yZy1m aW5kLWRibG9jayAobmFtZSkNCiAgIkZpbmQgdGhlIGZpcnN0IGR5bmFtaWMgYmxvY2sgd2l0aCBu YW1lIE5BTUUgaW4gdGhlIGJ1ZmZlci4NCklmIG5vdCBmb3VuZCwgc3RheSBhdCBjdXJyZW50IHBv c2l0aW9uIGFuZCByZXR1cm4gbmlsLiINCiAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggdCkgcG9z KQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCiAg ICAgIChzZXRxIHBvcyAoYW5kIChyZS1zZWFyY2gtZm9yd2FyZA0KCQkgICAgICAoY29uY2F0ICJe WyBcdF0qI1xcK1xcKD86QkVHSU5cXHxiZWdpblxcKTpbIFx0XSsiIG5hbWUgIlxcPiIpIG5pbCB0 KQ0KCQkgICAgIChtYXRjaC1iZWdpbm5pbmcgMCkpKSkNCiAgICAoaWYgcG9zIChnb3RvLWNoYXIg cG9zKSkNCiAgICBwb3MpKQ0KDQooZGVmY29uc3Qgb3JnLWRibG9jay1zdGFydC1yZQ0KICAiXlsg XHRdKiNcXCtcXCg/OkJFR0lOXFx8YmVnaW5cXCk6WyBcdF0rXFwoXFxTLStcXClcXChbIFx0XStc XCguKlxcKVxcKT8iDQogICJNYXRjaGVzIHRoZSBzdGFydCBsaW5lIG9mIGEgZHluYW1pYyBibG9j aywgd2l0aCBwYXJhbWV0ZXJzLiIpDQoNCihkZWZjb25zdCBvcmctZGJsb2NrLWVuZC1yZSAiXlsg XHRdKiNcXCtcXCg/OkVORFxcfGVuZFxcKVxcKFs6IFx0XHJcbl1cXHwkXFwpIg0KICAiTWF0Y2hl cyB0aGUgZW5kIG9mIGEgZHluYW1pYyBibG9jay4iKQ0KDQooZGVmdW4gb3JnLWNyZWF0ZS1kYmxv Y2sgKHBsaXN0KQ0KICAiQ3JlYXRlIGEgZHluYW1pYyBibG9jayBzZWN0aW9uLCB3aXRoIHBhcmFt ZXRlcnMgdGFrZW4gZnJvbSBQTElTVC4NClBMSVNUIG11c3QgY29udGFpbiBhIDpuYW1lIGVudHJ5 IHdoaWNoIGlzIHVzZWQgYXMgbmFtZSBvZiB0aGUgYmxvY2suIg0KICAod2hlbiAoc3RyaW5nLW1h dGNoICJcXFMtIiAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQtYXQtYm9sKSAocG9pbnQtYXQtZW9s KSkpDQogICAgKGVuZC1vZi1saW5lIDEpDQogICAgKG5ld2xpbmUpKQ0KICAobGV0ICgoY29sIChj dXJyZW50LWNvbHVtbikpDQoJKG5hbWUgKHBsaXN0LWdldCBwbGlzdCA6bmFtZSkpKQ0KICAgIChp bnNlcnQgIiMrQkVHSU46ICIgbmFtZSkNCiAgICAod2hpbGUgcGxpc3QNCiAgICAgIChpZiAoZXEg KGNhciBwbGlzdCkgOm5hbWUpDQoJICAoc2V0cSBwbGlzdCAoY2RkciBwbGlzdCkpDQoJKGluc2Vy dCAiICIgKHByaW4xLXRvLXN0cmluZyAocG9wIHBsaXN0KSkpKSkNCiAgICAoaW5zZXJ0ICJcblxu IiAobWFrZS1zdHJpbmcgY29sID9cICkgIiMrRU5EOlxuIikNCiAgICAoYmVnaW5uaW5nLW9mLWxp bmUgLTIpKSkNCg0KKGRlZnVuIG9yZy1wcmVwYXJlLWRibG9jayAoKQ0KICAiUHJlcGFyZSBkeW5h bWljIGJsb2NrIGZvciByZWZyZXNoLg0KVGhpcyBlbXB0aWVzIHRoZSBibG9jaywgcHV0cyB0aGUg Y3Vyc29yIGF0IHRoZSBpbnNlcnQgcG9zaXRpb24gYW5kIHJldHVybnMNCnRoZSBwcm9wZXJ0eSBs aXN0IGluY2x1ZGluZyBhbiBleHRyYSBwcm9wZXJ0eSA6bmFtZSB3aXRoIHRoZSBibG9jayBuYW1l LiINCiAgKHVubGVzcyAobG9va2luZy1hdCBvcmctZGJsb2NrLXN0YXJ0LXJlKQ0KICAgICh1c2Vy LWVycm9yICJOb3QgYXQgYSBkeW5hbWljIGJsb2NrIikpDQogIChsZXQqICgoYmVnZGVsICgxKyAo bWF0Y2gtZW5kIDApKSkNCgkgKG5hbWUgKG9yZy1uby1wcm9wZXJ0aWVzIChtYXRjaC1zdHJpbmcg MSkpKQ0KCSAocGFyYW1zIChhcHBlbmQgKGxpc3QgOm5hbWUgbmFtZSkNCgkJCSAocmVhZCAoY29u Y2F0ICIoIiAobWF0Y2gtc3RyaW5nIDMpICIpIikpKSkpDQogICAgKHNhdmUtZXhjdXJzaW9uDQog ICAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMSkNCiAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBc dCIpDQogICAgICAoc2V0cSBwYXJhbXMgKHBsaXN0LXB1dCBwYXJhbXMgOmluZGVudGF0aW9uLWNv bHVtbiAoY3VycmVudC1jb2x1bW4pKSkpDQogICAgKHVubGVzcyAocmUtc2VhcmNoLWZvcndhcmQg b3JnLWRibG9jay1lbmQtcmUgbmlsIHQpDQogICAgICAoZXJyb3IgIkR5bmFtaWMgYmxvY2sgbm90 IHRlcm1pbmF0ZWQiKSkNCiAgICAoc2V0cSBwYXJhbXMNCgkgIChhcHBlbmQgcGFyYW1zDQoJCSAg KGxpc3QgOmNvbnRlbnQgKGJ1ZmZlci1zdWJzdHJpbmcNCgkJCQkgIGJlZ2RlbCAobWF0Y2gtYmVn aW5uaW5nIDApKSkpKQ0KICAgIChkZWxldGUtcmVnaW9uIGJlZ2RlbCAobWF0Y2gtYmVnaW5uaW5n IDApKQ0KICAgIChnb3RvLWNoYXIgYmVnZGVsKQ0KICAgIChvcGVuLWxpbmUgMSkNCiAgICBwYXJh bXMpKQ0KDQooZGVmdW4gb3JnLW1hcC1kYmxvY2tzICgmb3B0aW9uYWwgY29tbWFuZCkNCiAgIkFw cGx5IENPTU1BTkQgdG8gYWxsIGR5bmFtaWMgYmxvY2tzIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4N CklmIENPTU1BTkQgaXMgbm90IGdpdmVuLCB1c2UgYG9yZy11cGRhdGUtZGJsb2NrJy4iDQogIChs ZXQgKChjbWQgKG9yIGNvbW1hbmQgJ29yZy11cGRhdGUtZGJsb2NrKSkpDQogICAgKHNhdmUtZXhj dXJzaW9uDQogICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KICAgICAgKHdoaWxlIChyZS1z ZWFyY2gtZm9yd2FyZCBvcmctZGJsb2NrLXN0YXJ0LXJlIG5pbCB0KQ0KCShnb3RvLWNoYXIgKG1h dGNoLWJlZ2lubmluZyAwKSkNCiAgICAgICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAgICAgKGNv bmRpdGlvbi1jYXNlIG5pbA0KICAgICAgICAgICAgICAoZnVuY2FsbCBjbWQpDQogICAgICAgICAg ICAoZXJyb3IgKG1lc3NhZ2UgIkVycm9yIGR1cmluZyB1cGRhdGUgb2YgZHluYW1pYyBibG9jayIp KSkpDQoJKHVubGVzcyAocmUtc2VhcmNoLWZvcndhcmQgb3JnLWRibG9jay1lbmQtcmUgbmlsIHQp DQoJICAoZXJyb3IgIkR5bmFtaWMgYmxvY2sgbm90IHRlcm1pbmF0ZWQiKSkpKSkpDQoNCihkZWZ1 biBvcmctZGJsb2NrLXVwZGF0ZSAoJm9wdGlvbmFsIGFyZykNCiAgIlVzZXIgY29tbWFuZCBmb3Ig dXBkYXRpbmcgZHluYW1pYyBibG9ja3MuDQpVcGRhdGUgdGhlIGR5bmFtaWMgYmxvY2sgYXQgcG9p bnQuICBXaXRoIHByZWZpeCBBUkcsIHVwZGF0ZSBhbGwgZHluYW1pYw0KYmxvY2tzIGluIHRoZSBi dWZmZXIuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoaWYgYXJnDQogICAgICAob3JnLXVwZGF0 ZS1hbGwtZGJsb2NrcykNCiAgICAob3IgKGxvb2tpbmctYXQgb3JnLWRibG9jay1zdGFydC1yZSkN Cgkob3JnLWJlZ2lubmluZy1vZi1kYmxvY2spKQ0KICAgIChvcmctdXBkYXRlLWRibG9jaykpKQ0K DQooZGVmdW4gb3JnLXVwZGF0ZS1kYmxvY2sgKCkNCiAgIlVwZGF0ZSB0aGUgZHluYW1pYyBibG9j ayBhdCBwb2ludC4NClRoaXMgbWVhbnMgdG8gZW1wdHkgdGhlIGJsb2NrLCBwYXJzZSBmb3IgcGFy YW1ldGVycyBhbmQgdGhlbiBjYWxsDQp0aGUgY29ycmVjdCB3cml0aW5nIGZ1bmN0aW9uLiINCiAg KGludGVyYWN0aXZlKQ0KICAoc2F2ZS1leGN1cnNpb24NCiAgICAobGV0KiAoKHdpbiAoc2VsZWN0 ZWQtd2luZG93KSkNCgkgICAocG9zIChwb2ludCkpDQoJICAgKGxpbmUgKG9yZy1jdXJyZW50LWxp bmUpKQ0KCSAgIChwYXJhbXMgKG9yZy1wcmVwYXJlLWRibG9jaykpDQoJICAgKG5hbWUgKHBsaXN0 LWdldCBwYXJhbXMgOm5hbWUpKQ0KCSAgIChpbmRlbnQgKHBsaXN0LWdldCBwYXJhbXMgOmluZGVu dGF0aW9uLWNvbHVtbikpDQoJICAgKGNtZCAoaW50ZXJuIChjb25jYXQgIm9yZy1kYmxvY2std3Jp dGU6IiBuYW1lKSkpKQ0KICAgICAgKG1lc3NhZ2UgIlVwZGF0aW5nIGR5bmFtaWMgYmxvY2sgYCVz JyBhdCBsaW5lICVkLi4uIiBuYW1lIGxpbmUpDQogICAgICAoZnVuY2FsbCBjbWQgcGFyYW1zKQ0K ICAgICAgKG1lc3NhZ2UgIlVwZGF0aW5nIGR5bmFtaWMgYmxvY2sgYCVzJyBhdCBsaW5lICVkLi4u ZG9uZSIgbmFtZSBsaW5lKQ0KICAgICAgKGdvdG8tY2hhciBwb3MpDQogICAgICAod2hlbiAoYW5k IGluZGVudCAoPiBpbmRlbnQgMCkpDQoJKHNldHEgaW5kZW50IChtYWtlLXN0cmluZyBpbmRlbnQg P1wgKSkNCgkoc2F2ZS1leGN1cnNpb24NCgkgIChzZWxlY3Qtd2luZG93IHdpbikNCgkgIChvcmct YmVnaW5uaW5nLW9mLWRibG9jaykNCgkgIChmb3J3YXJkLWxpbmUgMSkNCgkgICh3aGlsZSAobm90 IChsb29raW5nLWF0IG9yZy1kYmxvY2stZW5kLXJlKSkNCgkgICAgKGluc2VydCBpbmRlbnQpDQoJ ICAgIChiZWdpbm5pbmctb2YtbGluZSAyKSkNCgkgICh3aGVuIChsb29raW5nLWF0IG9yZy1kYmxv Y2stZW5kLXJlKQ0KCSAgICAoYW5kIChsb29raW5nLWF0ICJbIFx0XSsiKQ0KCQkgKHJlcGxhY2Ut bWF0Y2ggIiIpKQ0KCSAgICAoaW5zZXJ0IGluZGVudCkpKSkpKSkNCg0KKGRlZnVuIG9yZy1iZWdp bm5pbmctb2YtZGJsb2NrICgpDQogICJGaW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGR5bmFtaWMg YmxvY2sgYXQgcG9pbnQuDQpFcnJvciBpZiB0aGVyZSBpcyBubyBzdWNoIGJsb2NrIGF0IHBvaW50 LiINCiAgKGxldCAoKHBvcyAocG9pbnQpKQ0KCWJlZykNCiAgICAoZW5kLW9mLWxpbmUgMSkNCiAg ICAoaWYgKGFuZCAocmUtc2VhcmNoLWJhY2t3YXJkIG9yZy1kYmxvY2stc3RhcnQtcmUgbmlsIHQp DQoJICAgICAoc2V0cSBiZWcgKG1hdGNoLWJlZ2lubmluZyAwKSkNCgkgICAgIChyZS1zZWFyY2gt Zm9yd2FyZCBvcmctZGJsb2NrLWVuZC1yZSBuaWwgdCkNCgkgICAgICg+IChtYXRjaC1lbmQgMCkg cG9zKSkNCgkoZ290by1jaGFyIGJlZykNCiAgICAgIChnb3RvLWNoYXIgcG9zKQ0KICAgICAgKGVy cm9yICJOb3QgaW4gYSBkeW5hbWljIGJsb2NrIikpKSkNCg0KKGRlZnVuIG9yZy11cGRhdGUtYWxs LWRibG9ja3MgKCkNCiAgIlVwZGF0ZSBhbGwgZHluYW1pYyBibG9ja3MgaW4gdGhlIGJ1ZmZlci4N ClRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaW4gYSBob29rLiINCiAgKGludGVyYWN0aXZlKQ0K ICAod2hlbiAoZGVyaXZlZC1tb2RlLXAgJ29yZy1tb2RlKQ0KICAgIChvcmctbWFwLWRibG9ja3Mg J29yZy11cGRhdGUtZGJsb2NrKSkpDQoNCg0KOzs7OyBDb21wbGV0aW9uDQoNCihkZWNsYXJlLWZ1 bmN0aW9uIG9yZy1leHBvcnQtYmFja2VuZC1uYW1lICJvcmctZXhwb3J0IiAoY2wteCkpDQooZGVj bGFyZS1mdW5jdGlvbiBvcmctZXhwb3J0LWJhY2tlbmQtb3B0aW9ucyAib3JnLWV4cG9ydCIgKGNs LXgpKQ0KKGRlZnVuIG9yZy1nZXQtZXhwb3J0LWtleXdvcmRzICgpDQogICJSZXR1cm4gYSBsaXN0 IG9mIGFsbCBjdXJyZW50bHkgdW5kZXJzdG9vZCBleHBvcnQga2V5d29yZHMuDQpFeHBvcnQga2V5 d29yZHMgaW5jbHVkZSBvcHRpb25zLCBibG9jayBuYW1lcywgYXR0cmlidXRlcyBhbmQNCmtleXdv cmRzIHJlbGF0aXZlIHRvIGVhY2ggcmVnaXN0ZXJlZCBleHBvcnQgYmFjay1lbmQuIg0KICAobGV0 IChrZXl3b3JkcykNCiAgICAoZG9saXN0IChiYWNrZW5kDQoJICAgICAob3JnLWJvdW5kLWFuZC10 cnVlLXAgb3JnLWV4cG9ydC0tcmVnaXN0ZXJlZC1iYWNrZW5kcykNCgkgICAgIChkZWxxIG5pbCBr ZXl3b3JkcykpDQogICAgICA7OyBCYWNrLWVuZCBuYW1lIChmb3Iga2V5d29yZHMsIGxpa2UgIytM QVRFWDopDQogICAgICAocHVzaCAodXBjYXNlIChzeW1ib2wtbmFtZSAob3JnLWV4cG9ydC1iYWNr ZW5kLW5hbWUgYmFja2VuZCkpKSBrZXl3b3JkcykNCiAgICAgIChkb2xpc3QgKG9wdGlvbi1lbnRy eSAob3JnLWV4cG9ydC1iYWNrZW5kLW9wdGlvbnMgYmFja2VuZCkpDQoJOzsgQmFjay1lbmQgb3B0 aW9ucy4NCgkocHVzaCAobnRoIDEgb3B0aW9uLWVudHJ5KSBrZXl3b3JkcykpKSkpDQoNCihkZWZj b25zdCBvcmctb3B0aW9ucy1rZXl3b3Jkcw0KICAnKCJBUkNISVZFOiIgIkFVVEhPUjoiICJCSU5E OiIgIkNBVEVHT1JZOiIgIkNPTFVNTlM6IiAiQ1JFQVRPUjoiICJEQVRFOiINCiAgICAiREVTQ1JJ UFRJT046IiAiRFJBV0VSUzoiICJFTUFJTDoiICJFWENMVURFX1RBR1M6IiAiRklMRVRBR1M6IiAi SU5DTFVERToiDQogICAgIklOREVYOiIgIktFWVdPUkRTOiIgIkxBTkdVQUdFOiIgIk1BQ1JPOiIg Ik9QVElPTlM6IiAiUFJPUEVSVFk6Ig0KICAgICJQUklPUklUSUVTOiIgIlNFTEVDVF9UQUdTOiIg IlNFUV9UT0RPOiIgIlNFVFVQRklMRToiICJTVEFSVFVQOiIgIlRBR1M6Ig0KICAgICJUSVRMRToi ICJUT0RPOiIgIlRZUF9UT0RPOiIgIlNFTEVDVF9UQUdTOiIgIkVYQ0xVREVfVEFHUzoiKSkNCg0K KGRlZmN1c3RvbSBvcmctc3RydWN0dXJlLXRlbXBsYXRlLWFsaXN0DQogICcoKCJzIiAiIytCRUdJ Tl9TUkMgP1xuXG4jK0VORF9TUkMiICI8c3JjIGxhbmc9XCI/XCI+XG5cbjwvc3JjPiIpDQogICAg KCJlIiAiIytCRUdJTl9FWEFNUExFXG4/XG4jK0VORF9FWEFNUExFIiAiPGV4YW1wbGU+XG4/XG48 L2V4YW1wbGU+IikNCiAgICAoInEiICIjK0JFR0lOX1FVT1RFXG4/XG4jK0VORF9RVU9URSIgIjxx dW90ZT5cbj9cbjwvcXVvdGU+IikNCiAgICAoInYiICIjK0JFR0lOX1ZFUlNFXG4/XG4jK0VORF9W RVJTRSIgIjx2ZXJzZT5cbj9cbjwvdmVyc2U+IikNCiAgICAoIlYiICIjK0JFR0lOX1ZFUkJBVElN XG4/XG4jK0VORF9WRVJCQVRJTSIgIjx2ZXJiYXRpbT5cbj9cbjwvdmVyYmF0aW0+IikNCiAgICAo ImMiICIjK0JFR0lOX0NFTlRFUlxuP1xuIytFTkRfQ0VOVEVSIiAiPGNlbnRlcj5cbj9cbjwvY2Vu dGVyPiIpDQogICAgKCJsIiAiIytCRUdJTl9MYVRlWFxuP1xuIytFTkRfTGFUZVgiDQogICAgICI8 bGl0ZXJhbCBzdHlsZT1cImxhdGV4XCI+XG4/XG48L2xpdGVyYWw+IikNCiAgICAoIkwiICIjK0xh VGVYOiAiICI8bGl0ZXJhbCBzdHlsZT1cImxhdGV4XCI+PzwvbGl0ZXJhbD4iKQ0KICAgICgiaCIg IiMrQkVHSU5fSFRNTFxuP1xuIytFTkRfSFRNTCINCiAgICAgIjxsaXRlcmFsIHN0eWxlPVwiaHRt bFwiPlxuP1xuPC9saXRlcmFsPiIpDQogICAgKCJIIiAiIytIVE1MOiAiICI8bGl0ZXJhbCBzdHls ZT1cImh0bWxcIj4/PC9saXRlcmFsPiIpDQogICAgKCJhIiAiIytCRUdJTl9BU0NJSVxuP1xuIytF TkRfQVNDSUkiICIiKQ0KICAgICgiQSIgIiMrQVNDSUk6ICIgIiIpDQogICAgKCJpIiAiIytJTkRF WDogPyIgIiMrSU5ERVg6ID8iKQ0KICAgICgiSSIgIiMrSU5DTFVERTogJWZpbGUgPyINCiAgICAg IjxpbmNsdWRlIGZpbGU9JWZpbGUgbWFya3VwPVwiP1wiPiIpKQ0KICAiU3RydWN0dXJlIGNvbXBs ZXRpb24gZWxlbWVudHMuDQpUaGlzIGlzIGEgbGlzdCBvZiBhYmJyZXZpYXRpb24ga2V5cyBhbmQg dmFsdWVzLiAgVGhlIHZhbHVlIGdldHMgaW5zZXJ0ZWQNCmlmIHlvdSB0eXBlIGA8JyBmb2xsb3dl ZCBieSB0aGUga2V5IGFuZCB0aGVuIHByZXNzIHRoZSBjb21wbGV0aW9uIGtleSwNCnVzdWFsbHkg YE0tVEFCJy4gICVmaWxlIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBmaWxlIG5hbWUgYWZ0ZXIgcHJv bXB0aW5nDQpmb3IgdGhlIGZpbGUgdXNpbmcgY29tcGxldGlvbi4gIFRoZSBjdXJzb3Igd2lsbCBi ZSBwbGFjZWQgYXQgdGhlIHBvc2l0aW9uDQpvZiB0aGUgYD9gIGluIHRoZSB0ZW1wbGF0ZS4NClRo ZXJlIGFyZSB0d28gdGVtcGxhdGVzIGZvciBlYWNoIGtleSwgdGhlIGZpcnN0IHVzZXMgdGhlIG9y aWdpbmFsIE9yZyBzeW50YXgsDQp0aGUgc2Vjb25kIHVzZXMgRW1hY3MgTXVzZS1saWtlIHN5bnRh eCB0YWdzLiAgVGhlc2UgTXVzZS1saWtlIHRhZ3MgYmVjb21lDQp0aGUgZGVmYXVsdCB3aGVuIHRo ZSAvb3JnLW10YWdzLmVsLyBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkLiAgU2VlIGFsc28gdGhlDQp2 YXJpYWJsZSBgb3JnLW10YWdzLXByZWZlci1tdXNlLXRlbXBsYXRlcycuIg0KICA6Z3JvdXAgJ29y Zy1jb21wbGV0aW9uDQogIDp0eXBlICcocmVwZWF0DQoJICAobGlzdA0KCSAgIChzdHJpbmcgOnRh ZyAiS2V5IikNCgkgICAoc3RyaW5nIDp0YWcgIlRlbXBsYXRlIikNCgkgICAoc3RyaW5nIDp0YWcg Ik11c2UgVGVtcGxhdGUiKSkpKQ0KDQooZGVmdW4gb3JnLXRyeS1zdHJ1Y3R1cmUtY29tcGxldGlv biAoKQ0KICAiVHJ5IHRvIGNvbXBsZXRlIGEgc3RydWN0dXJlIHRlbXBsYXRlIGJlZm9yZSBwb2lu dC4NClRoaXMgbG9va3MgZm9yIHN0cmluZ3MgbGlrZSBcIjxlXCIgb24gYW4gb3RoZXJ3aXNlIGVt cHR5IGxpbmUgYW5kDQpleHBhbmRzIHRoZW0uIg0KICAobGV0ICgobCAoYnVmZmVyLXN1YnN0cmlu ZyAocG9pbnQtYXQtYm9sKSAocG9pbnQpKSkNCglhKQ0KICAgICh3aGVuIChhbmQgKGxvb2tpbmct YXQgIlsgXHRdKiQiKQ0KCSAgICAgICAoc3RyaW5nLW1hdGNoICJeWyBcdF0qPFxcKFthLXpBLVpd K1xcKSQiIGwpDQoJICAgICAgIChzZXRxIGEgKGFzc29jIChtYXRjaC1zdHJpbmcgMSBsKSBvcmct c3RydWN0dXJlLXRlbXBsYXRlLWFsaXN0KSkpDQogICAgICAob3JnLWNvbXBsZXRlLWV4cGFuZC1z dHJ1Y3R1cmUtdGVtcGxhdGUgKCsgLTEgKHBvaW50LWF0LWJvbCkNCgkJCQkJCSAobWF0Y2gtYmVn aW5uaW5nIDEpKSBhKQ0KICAgICAgdCkpKQ0KDQooZGVmdW4gb3JnLWNvbXBsZXRlLWV4cGFuZC1z dHJ1Y3R1cmUtdGVtcGxhdGUgKHN0YXJ0IGNlbGwpDQogICJFeHBhbmQgYSBzdHJ1Y3R1cmUgdGVt cGxhdGUuIg0KICAobGV0KiAoKG11c2VwIChvcmctYm91bmQtYW5kLXRydWUtcCBvcmctbXRhZ3Mt cHJlZmVyLW11c2UtdGVtcGxhdGVzKSkNCgkgKHJwbCAobnRoIChpZiBtdXNlcCAyIDEpIGNlbGwp KQ0KCSAoaW5kICIiKSkNCiAgICAoZGVsZXRlLXJlZ2lvbiBzdGFydCAocG9pbnQpKQ0KICAgICh3 aGVuIChzdHJpbmctbWF0Y2ggIlxcYCNcXCsiIHJwbCkNCiAgICAgIChjb25kDQogICAgICAgKChi b2xwKSkNCiAgICAgICAoKG5vdCAoc3RyaW5nLW1hdGNoICJcXFMtIiAoYnVmZmVyLXN1YnN0cmlu ZyAocG9pbnQtYXQtYm9sKSAocG9pbnQpKSkpDQoJKHNldHEgaW5kIChidWZmZXItc3Vic3RyaW5n IChwb2ludC1hdC1ib2wpIChwb2ludCkpKSkNCiAgICAgICAodCAobmV3bGluZSkpKSkNCiAgICAo c2V0cSBzdGFydCAocG9pbnQpKQ0KICAgIChpZiAoc3RyaW5nLW1hdGNoICIlZmlsZSIgcnBsKQ0K CShzZXRxIHJwbCAocmVwbGFjZS1tYXRjaA0KCQkgICAoY29uY2F0DQoJCSAgICAiXCIiDQoJCSAg ICAoc2F2ZS1tYXRjaC1kYXRhDQoJCSAgICAgIChhYmJyZXZpYXRlLWZpbGUtbmFtZSAocmVhZC1m aWxlLW5hbWUgIkluY2x1ZGUgZmlsZTogIikpKQ0KCQkgICAgIlwiIikNCgkJICAgdCB0IHJwbCkp KQ0KICAgIChzZXRxIHJwbCAobWFwY29uY2F0ICdpZGVudGl0eSAoc3BsaXQtc3RyaW5nIHJwbCAi XG4iKQ0KCQkJIChjb25jYXQgIlxuIiBpbmQpKSkNCiAgICAoaW5zZXJ0IHJwbCkNCiAgICAoaWYg KHJlLXNlYXJjaC1iYWNrd2FyZCAiXFw/IiBzdGFydCB0KSAoZGVsZXRlLWNoYXIgMSkpKSkNCg0K Ozs7OyBUT0RPLCBERUFETElORSwgQ29tbWVudHMNCg0KKGRlZnVuIG9yZy10b2dnbGUtY29tbWVu dCAoKQ0KICAiQ2hhbmdlIHRoZSBDT01NRU5UIHN0YXRlIG9mIGFuIGVudHJ5LiINCiAgKGludGVy YWN0aXZlKQ0KICAoc2F2ZS1leGN1cnNpb24NCiAgICAob3JnLWJhY2stdG8taGVhZGluZykNCiAg ICAobGV0IChjYXNlLWZvbGQtc2VhcmNoKQ0KICAgICAgKGNvbmQNCiAgICAgICAoKGxvb2tpbmct YXQgKGZvcm1hdCBvcmctaGVhZGluZy1rZXl3b3JkLXJlZ2V4cC1mb3JtYXQNCgkJCSAgICBvcmct Y29tbWVudC1zdHJpbmcpKQ0KCShnb3RvLWNoYXIgKG1hdGNoLWVuZCAxKSkNCgkobG9va2luZy1h dCAoY29uY2F0ICIgKyIgb3JnLWNvbW1lbnQtc3RyaW5nKSkNCgkocmVwbGFjZS1tYXRjaCAiIiB0 IHQpDQoJKHdoZW4gKGVvbHApIChpbnNlcnQgIiAiKSkpDQogICAgICAgKChsb29raW5nLWF0IG9y Zy1vdXRsaW5lLXJlZ2V4cCkNCgkoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpDQoJKGluc2VydCBv cmctY29tbWVudC1zdHJpbmcgIiAiKSkpKSkpDQoNCihkZWZ2YXIgb3JnLWxhc3QtdG9kby1zdGF0 ZS1pcy10b2RvIG5pbA0KICAiVGhpcyBpcyBub24tbmlsIHdoZW4gdGhlIGxhc3QgVE9ETyBzdGF0 ZSBjaGFuZ2UgbGVkIHRvIGEgVE9ETyBzdGF0ZS4NCklmIHRoZSBsYXN0IGNoYW5nZSByZW1vdmVk IHRoZSBUT0RPIHRhZyBvciBzd2l0Y2hlZCB0byBET05FLCB0aGVuDQp0aGlzIGlzIG5pbC4iKQ0K DQooZGVmdmFyIG9yZy1zZXR0aW5nLXRhZ3MgbmlsKSA7IGR5bmFtaWNhbGx5IHNraXBwZWQNCg0K KGRlZnZhciBvcmctdG9kby1zZXR1cC1maWx0ZXItaG9vayBuaWwNCiAgIkhvb2sgZm9yIGZ1bmN0 aW9ucyB0aGF0IHByZS1maWx0ZXIgdG9kbyBzcGVjcy4NCkVhY2ggZnVuY3Rpb24gdGFrZXMgYSB0 b2RvIHNwZWMgYW5kIHJldHVybnMgZWl0aGVyIG5pbCBvciB0aGUgc3BlYw0KdHJhbnNmb3JtZWQg aW50byBjYW5vbmljYWwgZm9ybS4iICkNCg0KKGRlZnZhciBvcmctdG9kby1nZXQtZGVmYXVsdC1o b29rIG5pbA0KICAiSG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgZ2V0IGEgZGVmYXVsdCBpdGVtIGZv ciB0b2RvLg0KRWFjaCBmdW5jdGlvbiB0YWtlcyBhcmd1bWVudHMgKE5FVy1NQVJLIE9MRC1NQVJL KSBhbmQgcmV0dXJucyBlaXRoZXINCm5pbCBvciBhIHN0cmluZyB0byBiZSB1c2VkIGZvciB0aGUg dG9kbyBtYXJrLiIgKQ0KDQooZGVmdmFyIG9yZy1hZ2VuZGEtaGVhZGxpbmUtc25hcHNob3QtYmVm b3JlLXJlcGVhdCkNCg0KKGRlZnVuIG9yZy1jdXJyZW50LWVmZmVjdGl2ZS10aW1lICgpDQogICJS ZXR1cm4gY3VycmVudCB0aW1lIGFkanVzdGVkIGZvciBgb3JnLWV4dGVuZC10b2RheS11bnRpbCcg dmFyaWFibGUuIg0KICAobGV0KiAoKGN0IChvcmctY3VycmVudC10aW1lKSkNCgkgKGRjdCAoZGVj b2RlLXRpbWUgY3QpKQ0KCSAoY3QxDQoJICAoY29uZA0KCSAgIChvcmctdXNlLWxhc3QtY2xvY2st b3V0LXRpbWUtYXMtZWZmZWN0aXZlLXRpbWUNCgkgICAgKG9yIChvcmctY2xvY2stZ2V0LWxhc3Qt Y2xvY2stb3V0LXRpbWUpIGN0KSkNCgkgICAoKGFuZCBvcmctdXNlLWVmZmVjdGl2ZS10aW1lICg8 IChudGggMiBkY3QpIG9yZy1leHRlbmQtdG9kYXktdW50aWwpKQ0KCSAgICAoZW5jb2RlLXRpbWUg MCA1OSAyMyAoMS0gKG50aCAzIGRjdCkpIChudGggNCBkY3QpIChudGggNSBkY3QpKSkNCgkgICAo dCBjdCkpKSkNCiAgICBjdDEpKQ0KDQooZGVmdW4gb3JnLXRvZG8teWVzdGVyZGF5ICgmb3B0aW9u YWwgYXJnKQ0KICAiTGlrZSBgb3JnLXRvZG8nIGJ1dCB0aGUgdGltZSBvZiBjaGFuZ2Ugd2lsbCBi ZSAyMzo1OSBvZiB5ZXN0ZXJkYXkuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoaWYgKGVxIG1h am9yLW1vZGUgJ29yZy1hZ2VuZGEtbW9kZSkNCiAgICAgIChhcHBseSAnb3JnLWFnZW5kYS10b2Rv LXllc3RlcmRheSBhcmcpDQogICAgKGxldCogKChob3VyICh0aGlyZCAoZGVjb2RlLXRpbWUNCgkJ CSAob3JnLWN1cnJlbnQtdGltZSkpKSkNCgkgICAob3JnLWV4dGVuZC10b2RheS11bnRpbCAoMSsg aG91cikpKQ0KICAgICAgKG9yZy10b2RvIGFyZykpKSkNCg0KKGRlZnZhciBvcmctYmxvY2stZW50 cnktYmxvY2tpbmcgIiINCiAgIkZpcnN0IGVudHJ5IHByZXZlbnRpbmcgdGhlIFRPRE8gc3RhdGUg Y2hhbmdlLiIpDQoNCihkZWZ1biBvcmctdG9kbyAoJm9wdGlvbmFsIGFyZykNCiAgIkNoYW5nZSB0 aGUgVE9ETyBzdGF0ZSBvZiBhbiBpdGVtLg0KVGhlIHN0YXRlIG9mIGFuIGl0ZW0gaXMgZ2l2ZW4g YnkgYSBrZXl3b3JkIGF0IHRoZSBzdGFydCBvZiB0aGUgaGVhZGluZywNCmxpa2UNCiAgICAgKioq IFRPRE8gV3JpdGUgcGFwZXINCiAgICAgKioqIERPTkUgQ2FsbCBtb20NCg0KVGhlIGRpZmZlcmVu dCBrZXl3b3JkcyBhcmUgc3BlY2lmaWVkIGluIHRoZSB2YXJpYWJsZSBgb3JnLXRvZG8ta2V5d29y ZHMnLg0KQnkgZGVmYXVsdCB0aGUgYXZhaWxhYmxlIHN0YXRlcyBhcmUgXCJUT0RPXCIgYW5kIFwi RE9ORVwiLg0KU28gZm9yIHRoaXMgZXhhbXBsZTogd2hlbiB0aGUgaXRlbSBzdGFydHMgd2l0aCBU T0RPLCBpdCBpcyBjaGFuZ2VkIHRvIERPTkUuDQpXaGVuIGl0IHN0YXJ0cyB3aXRoIERPTkUsIHRo ZSBET05FIGlzIHJlbW92ZWQuICBBbmQgd2hlbiBuZWl0aGVyIFRPRE8gbm9yDQpET05FIGFyZSBw cmVzZW50LCBhZGQgVE9ETyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWFkaW5nLg0KDQpXaXRo IFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gcHJlZml4IGFyZywgdXNlIGNvbXBsZXRpb24gdG8gZGV0 ZXJtaW5lIHRoZSBuZXcgXA0Kc3RhdGUuDQpXaXRoIG51bWVyaWMgcHJlZml4IGFyZywgc3dpdGNo IHRvIHRoYXQgc3RhdGUuDQpXaXRoIGEgZG91YmxlIFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gcHJl Zml4LCBzd2l0Y2ggdG8gdGhlIG5leHQgc2V0IG9mIFRPRE8gXA0Ka2V5d29yZHMgKG5leHRzZXQp Lg0KV2l0aCBhIHRyaXBsZSBcXFt1bml2ZXJzYWwtYXJndW1lbnRdIHByZWZpeCwgY2lyY3VtdmVu dCBhbnkgc3RhdGUgYmxvY2tpbmcuDQpXaXRoIGEgbnVtZXJpYyBwcmVmaXggYXJnIG9mIDAsIGlu aGliaXQgbm90ZSB0YWtpbmcgZm9yIHRoZSBjaGFuZ2UuDQoNCkZvciBjYWxsaW5nIHRocm91Z2gg bGlzcCwgYXJnIGlzIGFsc28gaW50ZXJwcmV0ZWQgaW4gdGhlIGZvbGxvd2luZyB3YXk6DQonbm9u ZSAgICAgICAgICAgICAtPiBlbXB0eSBzdGF0ZQ0KXCJcIihlbXB0eSBzdHJpbmcpICAtPiBzd2l0 Y2ggdG8gZW1wdHkgc3RhdGUNCidkb25lICAgICAgICAgICAgIC0+IHN3aXRjaCB0byBET05FDQon bmV4dHNldCAgICAgICAgICAtPiBzd2l0Y2ggdG8gdGhlIG5leHQgc2V0IG9mIGtleXdvcmRzDQon cHJldmlvdXNzZXQgICAgICAtPiBzd2l0Y2ggdG8gdGhlIHByZXZpb3VzIHNldCBvZiBrZXl3b3Jk cw0KXCJXQUlUSU5HXCIgICAgICAgICAtPiBzd2l0Y2ggdG8gdGhlIHNwZWNpZmllZCBrZXl3b3Jk LCBidXQgb25seSBpZiBpdA0KICAgICAgICAgICAgICAgICAgICAgcmVhbGx5IGlzIGEgbWVtYmVy IG9mIGBvcmctdG9kby1rZXl3b3JkcycuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoaWYgKGFu ZCAob3JnLXJlZ2lvbi1hY3RpdmUtcCkgb3JnLWxvb3Atb3Zlci1oZWFkbGluZXMtaW4tYWN0aXZl LXJlZ2lvbikNCiAgICAgIChsZXQgKChjbCAoaWYgKGVxIG9yZy1sb29wLW92ZXItaGVhZGxpbmVz LWluLWFjdGl2ZS1yZWdpb24gJ3N0YXJ0LWxldmVsKQ0KCQkgICAgJ3JlZ2lvbi1zdGFydC1sZXZl bCAncmVnaW9uKSkNCgkgICAgb3JnLWxvb3Atb3Zlci1oZWFkbGluZXMtaW4tYWN0aXZlLXJlZ2lv bikNCgkob3JnLW1hcC1lbnRyaWVzDQoJIGAob3JnLXRvZG8gLGFyZykNCgkgb3JnLWxvb3Atb3Zl ci1oZWFkbGluZXMtaW4tYWN0aXZlLXJlZ2lvbg0KCSBjbCAoaWYgKG91dGxpbmUtaW52aXNpYmxl LXApIChvcmctZW5kLW9mLXN1YnRyZWUgbmlsIHQpKSkpDQogICAgKGlmIChlcXVhbCBhcmcgJygx NikpIChzZXRxIGFyZyAnbmV4dHNldCkpDQogICAgKGxldCAoKG9yZy1ibG9ja2VyLWhvb2sgb3Jn LWJsb2NrZXItaG9vaykNCgkgIGNvbW1lbnRwDQoJICBjYXNlLWZvbGQtc2VhcmNoKQ0KICAgICAg KHdoZW4gKGVxdWFsIGFyZyAnKDY0KSkNCgkoc2V0cSBhcmcgbmlsIG9yZy1ibG9ja2VyLWhvb2sg bmlsKSkNCiAgICAgICh3aGVuIChhbmQgb3JnLWJsb2NrZXItaG9vaw0KCQkgKG9yIG9yZy1pbmhp Yml0LWJsb2NraW5nDQoJCSAgICAgKG9yZy1lbnRyeS1nZXQgbmlsICJOT0JMT0NLSU5HIikpKQ0K CShzZXRxIG9yZy1ibG9ja2VyLWhvb2sgbmlsKSkNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCShj YXRjaCAnZXhpdA0KCSAgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkNCgkgICh3aGVuIChsb29raW5n LWF0IChjb25jYXQgIl5cXCorICIgb3JnLWNvbW1lbnQtc3RyaW5nKSkNCgkgICAgKG9yZy10b2dn bGUtY29tbWVudCkNCgkgICAgKHNldHEgY29tbWVudHAgdCkpDQoJICAoaWYgKGxvb2tpbmctYXQg b3JnLW91dGxpbmUtcmVnZXhwKSAoZ290by1jaGFyICgxLSAobWF0Y2gtZW5kIDApKSkpDQoJICAo b3IgKGxvb2tpbmctYXQgKGNvbmNhdCAiICsiIG9yZy10b2RvLXJlZ2V4cCAiXFwoICtcXHxbIFx0 XSokXFwpIikpDQoJICAgICAgKGxvb2tpbmctYXQgIlxcKD86ICpcXHxbIFx0XSokXFwpIikpDQoJ ICAobGV0KiAoKG1hdGNoLWRhdGEgKG1hdGNoLWRhdGEpKQ0KCQkgKHN0YXJ0cG9zIChwb2ludC1h dC1ib2wpKQ0KCQkgKGxvZ2dpbmcgKHNhdmUtbWF0Y2gtZGF0YSAob3JnLWVudHJ5LWdldCBuaWwg IkxPR0dJTkciIHQgdCkpKQ0KCQkgKG9yZy1sb2ctZG9uZSBvcmctbG9nLWRvbmUpDQoJCSAob3Jn LWxvZy1yZXBlYXQgb3JnLWxvZy1yZXBlYXQpDQoJCSAob3JnLXRvZG8tbG9nLXN0YXRlcyBvcmct dG9kby1sb2ctc3RhdGVzKQ0KCQkgKG9yZy1pbmhpYml0LWxvZ2dpbmcNCgkJICAoaWYgKGVxdWFs IGFyZyAwKQ0KCQkgICAgICAocHJvZ24gKHNldHEgYXJnIG5pbCkgJ25vdGUpIG9yZy1pbmhpYml0 LWxvZ2dpbmcpKQ0KCQkgKHRoaXMgKG1hdGNoLXN0cmluZyAxKSkNCgkJIChobC1wb3MgKG1hdGNo LWJlZ2lubmluZyAwKSkNCgkJIChoZWFkIChvcmctZ2V0LXRvZG8tc2VxdWVuY2UtaGVhZCB0aGlz KSkNCgkJIChhc3MgKGFzc29jIGhlYWQgb3JnLXRvZG8ta3dkLWFsaXN0KSkNCgkJIChpbnRlcnBy ZXQgKG50aCAxIGFzcykpDQoJCSAoZG9uZS13b3JkIChudGggMyBhc3MpKQ0KCQkgKGZpbmFsLWRv bmUtd29yZCAobnRoIDQgYXNzKSkNCgkJIChvcmctbGFzdC1zdGF0ZSAob3IgdGhpcyAiIikpDQoJ CSAoY29tcGxldGlvbi1pZ25vcmUtY2FzZSB0KQ0KCQkgKG1lbWJlciAobWVtYmVyIHRoaXMgb3Jn LXRvZG8ta2V5d29yZHMtMSkpDQoJCSAodGFpbCAoY2RyIG1lbWJlcikpDQoJCSAob3JnLXN0YXRl IChjb25kDQoJCQkgICAgICgoYW5kIG9yZy10b2RvLWtleS10cmlnZ2VyDQoJCQkJICAgKG9yIChh bmQgKGVxdWFsIGFyZyAnKDQpKQ0KCQkJCQkgICAgKGVxIG9yZy11c2UtZmFzdC10b2RvLXNlbGVj dGlvbiAncHJlZml4KSkNCgkJCQkgICAgICAgKGFuZCAobm90IGFyZykgb3JnLXVzZS1mYXN0LXRv ZG8tc2VsZWN0aW9uDQoJCQkJCSAgICAobm90IChlcSBvcmctdXNlLWZhc3QtdG9kby1zZWxlY3Rp b24NCgkJCQkJCSAgICAgJ3ByZWZpeCkpKSkpDQoJCQkgICAgICA7OyBVc2UgZmFzdCBzZWxlY3Rp b24NCgkJCSAgICAgIChvcmctZmFzdC10b2RvLXNlbGVjdGlvbikpDQoJCQkgICAgICgoYW5kIChl cXVhbCBhcmcgJyg0KSkNCgkJCQkgICAob3IgKG5vdCBvcmctdXNlLWZhc3QtdG9kby1zZWxlY3Rp b24pDQoJCQkJICAgICAgIChub3Qgb3JnLXRvZG8ta2V5LXRyaWdnZXIpKSkNCgkJCSAgICAgIDs7 IFJlYWQgYSBzdGF0ZSB3aXRoIGNvbXBsZXRpb24NCgkJCSAgICAgIChvcmctaWNvbXBsZXRpbmct cmVhZA0KCQkJICAgICAgICJTdGF0ZTogIiAobWFwY2FyICdsaXN0IG9yZy10b2RvLWtleXdvcmRz LTEpDQoJCQkgICAgICAgbmlsIHQpKQ0KCQkJICAgICAoKGVxIGFyZyAncmlnaHQpDQoJCQkgICAg ICAoaWYgdGhpcw0KCQkJCSAgKGlmIHRhaWwgKGNhciB0YWlsKSBuaWwpDQoJCQkJKGNhciBvcmct dG9kby1rZXl3b3Jkcy0xKSkpDQoJCQkgICAgICgoZXEgYXJnICdsZWZ0KQ0KCQkJICAgICAgKGlm IChlcXVhbCBtZW1iZXIgb3JnLXRvZG8ta2V5d29yZHMtMSkNCgkJCQkgIG5pbA0KCQkJCShpZiB0 aGlzDQoJCQkJICAgIChudGggKC0gKGxlbmd0aCBvcmctdG9kby1rZXl3b3Jkcy0xKQ0KCQkJCQkg ICAgKGxlbmd0aCB0YWlsKSAyKQ0KCQkJCQkgb3JnLXRvZG8ta2V5d29yZHMtMSkNCgkJCQkgIChv cmctbGFzdCBvcmctdG9kby1rZXl3b3Jkcy0xKSkpKQ0KCQkJICAgICAoKGFuZCAoZXEgb3JnLXVz ZS1mYXN0LXRvZG8tc2VsZWN0aW9uIHQpIChlcXVhbCBhcmcgJyg0KSkNCgkJCQkgICAoc2V0cSBh cmcgbmlsKSkpIDsgaGFjayB0byBmYWxsIGJhY2sgdG8gY3ljbGluZw0KCQkJICAgICAoYXJnDQoJ CQkgICAgICA7OyB1c2VyIG9yIGNhbGxlciByZXF1ZXN0cyBhIHNwZWNpZmljIHN0YXRlDQoJCQkg ICAgICAoY29uZA0KCQkJICAgICAgICgoZXF1YWwgYXJnICIiKSBuaWwpDQoJCQkgICAgICAgKChl cSBhcmcgJ25vbmUpIG5pbCkNCgkJCSAgICAgICAoKGVxIGFyZyAnZG9uZSkgKG9yIGRvbmUtd29y ZCAoY2FyIG9yZy1kb25lLWtleXdvcmRzKSkpDQoJCQkgICAgICAgKChlcSBhcmcgJ25leHRzZXQp DQoJCQkJKG9yIChjYXIgKGNkciAobWVtYmVyIGhlYWQgb3JnLXRvZG8taGVhZHMpKSkNCgkJCQkg ICAgKGNhciBvcmctdG9kby1oZWFkcykpKQ0KCQkJICAgICAgICgoZXEgYXJnICdwcmV2aW91c3Nl dCkNCgkJCQkobGV0ICgob3JnLXRvZG8taGVhZHMgKHJldmVyc2Ugb3JnLXRvZG8taGVhZHMpKSkN CgkJCQkgIChvciAoY2FyIChjZHIgKG1lbWJlciBoZWFkIG9yZy10b2RvLWhlYWRzKSkpDQoJCQkJ ICAgICAgKGNhciBvcmctdG9kby1oZWFkcykpKSkNCgkJCSAgICAgICAoKGNhciAobWVtYmVyIGFy ZyBvcmctdG9kby1rZXl3b3Jkcy0xKSkpDQoJCQkgICAgICAgKChzdHJpbmdwIGFyZykNCgkJCQko dXNlci1lcnJvciAiU3RhdGUgYCVzJyBub3QgdmFsaWQgaW4gdGhpcyBmaWxlIiBhcmcpKQ0KCQkJ ICAgICAgICgobnRoICgxLSAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSkNCgkJCQkgICAgIG9y Zy10b2RvLWtleXdvcmRzLTEpKSkpDQoJCQkgICAgICgobnVsbCBtZW1iZXIpIChvciBoZWFkIChj YXIgb3JnLXRvZG8ta2V5d29yZHMtMSkpKQ0KCQkJICAgICAoKGVxdWFsIHRoaXMgZmluYWwtZG9u ZS13b3JkKSBuaWwpIDs7IC0+IG1ha2UgZW1wdHkNCgkJCSAgICAgKChudWxsIHRhaWwpIG5pbCkg OzsgLT4gZmlyc3QgZW50cnkNCgkJCSAgICAgKChtZW1xIGludGVycHJldCAnKHR5cGUgcHJpb3Jp dHkpKQ0KCQkJICAgICAgKGlmIChlcSB0aGlzLWNvbW1hbmQgbGFzdC1jb21tYW5kKQ0KCQkJCSAg KGNhciB0YWlsKQ0KCQkJCShpZiAoPiAobGVuZ3RoIHRhaWwpIDApDQoJCQkJICAgIChvciBkb25l LXdvcmQgKGNhciBvcmctZG9uZS1rZXl3b3JkcykpDQoJCQkJICBuaWwpKSkNCgkJCSAgICAgKHQN CgkJCSAgICAgIChjYXIgdGFpbCkpKSkNCgkJIChvcmctc3RhdGUgKG9yDQoJCQkgICAgIChydW4t aG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2Vzcw0KCQkJICAgICAgJ29yZy10b2RvLWdldC1kZWZh dWx0LWhvb2sgb3JnLXN0YXRlIG9yZy1sYXN0LXN0YXRlKQ0KCQkJICAgICBvcmctc3RhdGUpKQ0K CQkgKG5leHQgKGlmIG9yZy1zdGF0ZSAoY29uY2F0ICIgIiBvcmctc3RhdGUgIiAiKSAiICIpKQ0K CQkgKGNoYW5nZS1wbGlzdCAobGlzdCA6dHlwZSAndG9kby1zdGF0ZS1jaGFuZ2UgOmZyb20gdGhp cyA6dG8gb3JnLXN0YXRlDQoJCQkJICAgICA6cG9zaXRpb24gc3RhcnRwb3MpKQ0KCQkgZG9sb2cg bm93LWRvbmUtcCkNCgkgICAgKHdoZW4gb3JnLWJsb2NrZXItaG9vaw0KCSAgICAgIChzZXRxIG9y Zy1sYXN0LXRvZG8tc3RhdGUtaXMtdG9kbw0KCQkgICAgKG5vdCAobWVtYmVyIHRoaXMgb3JnLWRv bmUta2V5d29yZHMpKSkNCgkgICAgICAodW5sZXNzIChzYXZlLWV4Y3Vyc2lvbg0KCQkJKHNhdmUt bWF0Y2gtZGF0YQ0KCQkJICAob3JnLXdpdGgtd2lkZS1idWZmZXINCgkJCSAgIChydW4taG9vay13 aXRoLWFyZ3MtdW50aWwtZmFpbHVyZQ0KCQkJICAgICdvcmctYmxvY2tlci1ob29rIGNoYW5nZS1w bGlzdCkpKSkNCgkJKGlmIChvcmctY2FsbGVkLWludGVyYWN0aXZlbHktcCAnaW50ZXJhY3RpdmUp DQoJCSAgICAodXNlci1lcnJvciAiVE9ETyBzdGF0ZSBjaGFuZ2UgZnJvbSAlcyB0byAlcyBibG9j a2VkIChieSBcIiVzXCIpIg0KCQkJCXRoaXMgb3JnLXN0YXRlIG9yZy1ibG9jay1lbnRyeS1ibG9j a2luZykNCgkJICA7OyBmYWlsIHNpbGVudGx5DQoJCSAgKG1lc3NhZ2UgIlRPRE8gc3RhdGUgY2hh bmdlIGZyb20gJXMgdG8gJXMgYmxvY2tlZCAoYnkgXCIlc1wiKSINCgkJCSAgIHRoaXMgb3JnLXN0 YXRlIG9yZy1ibG9jay1lbnRyeS1ibG9ja2luZykNCgkJICAodGhyb3cgJ2V4aXQgbmlsKSkpKQ0K CSAgICAoc3RvcmUtbWF0Y2gtZGF0YSBtYXRjaC1kYXRhKQ0KCSAgICAocmVwbGFjZS1tYXRjaCBu ZXh0IHQgdCkNCgkgICAgKHVubGVzcyAocG9zLXZpc2libGUtaW4td2luZG93LXAgaGwtcG9zKQ0K CSAgICAgIChtZXNzYWdlICJUT0RPIHN0YXRlIGNoYW5nZWQgdG8gJXMiIChvcmctdHJpbSBuZXh0 KSkpDQoJICAgICh1bmxlc3MgaGVhZA0KCSAgICAgIChzZXRxIGhlYWQgKG9yZy1nZXQtdG9kby1z ZXF1ZW5jZS1oZWFkIG9yZy1zdGF0ZSkNCgkJICAgIGFzcyAoYXNzb2MgaGVhZCBvcmctdG9kby1r d2QtYWxpc3QpDQoJCSAgICBpbnRlcnByZXQgKG50aCAxIGFzcykNCgkJICAgIGRvbmUtd29yZCAo bnRoIDMgYXNzKQ0KCQkgICAgZmluYWwtZG9uZS13b3JkIChudGggNCBhc3MpKSkNCgkgICAgKHdo ZW4gKG1lbXEgYXJnICcobmV4dHNldCBwcmV2aW91c3NldCkpDQoJICAgICAgKG1lc3NhZ2UgIktl eXdvcmQtU2V0ICVkLyVkOiAlcyINCgkJICAgICAgICgtIChsZW5ndGggb3JnLXRvZG8tc2V0cykg LTENCgkJCSAgKGxlbmd0aCAobWVtcSAoYXNzb2Mgb3JnLXN0YXRlIG9yZy10b2RvLXNldHMpIG9y Zy10b2RvLXNldHMpKSkNCgkJICAgICAgIChsZW5ndGggb3JnLXRvZG8tc2V0cykNCgkJICAgICAg IChtYXBjb25jYXQgJ2lkZW50aXR5IChhc3NvYyBvcmctc3RhdGUgb3JnLXRvZG8tc2V0cykgIiAi KSkpDQoJICAgIChzZXRxIG9yZy1sYXN0LXRvZG8tc3RhdGUtaXMtdG9kbw0KCQkgIChub3QgKG1l bWJlciBvcmctc3RhdGUgb3JnLWRvbmUta2V5d29yZHMpKSkNCgkgICAgKHNldHEgbm93LWRvbmUt cCAoYW5kIChtZW1iZXIgb3JnLXN0YXRlIG9yZy1kb25lLWtleXdvcmRzKQ0KCQkJCSAgKG5vdCAo bWVtYmVyIHRoaXMgb3JnLWRvbmUta2V5d29yZHMpKSkpDQoJICAgIChhbmQgbG9nZ2luZyAob3Jn LWxvY2FsLWxvZ2dpbmcgbG9nZ2luZykpDQoJICAgICh3aGVuIChhbmQgKG9yIG9yZy10b2RvLWxv Zy1zdGF0ZXMgb3JnLWxvZy1kb25lKQ0KCQkgICAgICAgKG5vdCAoZXEgb3JnLWluaGliaXQtbG9n Z2luZyB0KSkNCgkJICAgICAgIChub3QgKG1lbXEgYXJnICcobmV4dHNldCBwcmV2aW91c3NldCkp KSkNCgkgICAgICA7OyB3ZSBuZWVkIHRvIGxvb2sgYXQgcmVjb3JkaW5nIGEgdGltZSBhbmQgbm90 ZQ0KCSAgICAgIChzZXRxIGRvbG9nIChvciAobnRoIDEgKGFzc29jIG9yZy1zdGF0ZSBvcmctdG9k by1sb2ctc3RhdGVzKSkNCgkJCSAgICAgIChudGggMiAoYXNzb2MgdGhpcyBvcmctdG9kby1sb2ct c3RhdGVzKSkpKQ0KCSAgICAgIChpZiAoYW5kIChlcSBkb2xvZyAnbm90ZSkgKGVxIG9yZy1pbmhp Yml0LWxvZ2dpbmcgJ25vdGUpKQ0KCQkgIChzZXRxIGRvbG9nICd0aW1lKSkNCgkgICAgICAod2hl biAob3IgKGFuZCAobm90IG9yZy1zdGF0ZSkgKG5vdCBvcmctY2xvc2VkLWtlZXAtd2hlbi1uby10 b2RvKSkNCgkJCShhbmQgb3JnLXN0YXRlDQoJCQkgICAgIChtZW1iZXIgb3JnLXN0YXRlIG9yZy1u b3QtZG9uZS1rZXl3b3JkcykNCgkJCSAgICAgKG5vdCAobWVtYmVyIHRoaXMgb3JnLW5vdC1kb25l LWtleXdvcmRzKSkpKQ0KCQk7OyBUaGlzIGlzIG5vdyBhIHRvZG8gc3RhdGUgYW5kIHdhcyBub3Qg b25lIGJlZm9yZQ0KCQk7OyBJZiB0aGVyZSB3YXMgYSBDTE9TRUQgdGltZSBzdGFtcCwgZ2V0IHJp ZCBvZiBpdC4NCgkJKG9yZy1hZGQtcGxhbm5pbmctaW5mbyBuaWwgbmlsICdjbG9zZWQpKQ0KCSAg ICAgICh3aGVuIChhbmQgbm93LWRvbmUtcCBvcmctbG9nLWRvbmUpDQoJCTs7IEl0IGlzIG5vdyBk b25lLCBhbmQgaXQgd2FzIG5vdCBkb25lIGJlZm9yZQ0KCQkob3JnLWFkZC1wbGFubmluZy1pbmZv ICdjbG9zZWQgKG9yZy1jdXJyZW50LWVmZmVjdGl2ZS10aW1lKSkNCgkJKGlmIChhbmQgKG5vdCBk b2xvZykgKGVxICdub3RlIG9yZy1sb2ctZG9uZSkpDQoJCSAgICAob3JnLWFkZC1sb2ctc2V0dXAg J2RvbmUgb3JnLXN0YXRlIHRoaXMgJ2ZpbmRwb3MgJ25vdGUpKSkNCgkgICAgICAod2hlbiAoYW5k IG9yZy1zdGF0ZSBkb2xvZykNCgkJOzsgVGhpcyBpcyBhIG5vbi1uaWwgc3RhdGUsIGFuZCB3ZSBu ZWVkIHRvIGxvZyBpdA0KCQkob3JnLWFkZC1sb2ctc2V0dXAgJ3N0YXRlIG9yZy1zdGF0ZSB0aGlz ICdmaW5kcG9zIGRvbG9nKSkpDQoJICAgIDs7IEZpeHVwIHRhZyBwb3NpdGlvbmluZw0KCSAgICAo b3JnLXRvZG8tdHJpZ2dlci10YWctY2hhbmdlcyBvcmctc3RhdGUpDQoJICAgIChhbmQgb3JnLWF1 dG8tYWxpZ24tdGFncyAobm90IG9yZy1zZXR0aW5nLXRhZ3MpIChvcmctc2V0LXRhZ3MgbmlsIHQp KQ0KCSAgICAod2hlbiBvcmctcHJvdmlkZS10b2RvLXN0YXRpc3RpY3MNCgkgICAgICAob3JnLXVw ZGF0ZS1wYXJlbnQtdG9kby1zdGF0aXN0aWNzKSkNCgkgICAgKHJ1bi1ob29rcyAnb3JnLWFmdGVy LXRvZG8tc3RhdGUtY2hhbmdlLWhvb2spDQoJICAgIChpZiAoYW5kIGFyZyAobm90IChtZW1iZXIg b3JnLXN0YXRlIG9yZy1kb25lLWtleXdvcmRzKSkpDQoJCShzZXRxIGhlYWQgKG9yZy1nZXQtdG9k by1zZXF1ZW5jZS1oZWFkIG9yZy1zdGF0ZSkpKQ0KCSAgICAocHV0LXRleHQtcHJvcGVydHkgKHBv aW50LWF0LWJvbCkgKHBvaW50LWF0LWVvbCkgJ29yZy10b2RvLWhlYWQgaGVhZCkNCgkgICAgOzsg RG8gd2UgbmVlZCB0byB0cmlnZ2VyIGEgcmVwZWF0Pw0KCSAgICAod2hlbiBub3ctZG9uZS1wDQoJ ICAgICAgKHdoZW4gKGJvdW5kcCAnb3JnLWFnZW5kYS1oZWFkbGluZS1zbmFwc2hvdC1iZWZvcmUt cmVwZWF0KQ0KCQk7OyBUaGlzIGlzIGZvciB0aGUgYWdlbmRhLCB0YWtlIGEgc25hcHNob3Qgb2Yg dGhlIGhlYWRsaW5lLg0KCQkoc2F2ZS1tYXRjaC1kYXRhDQoJCSAgKHNldHEgb3JnLWFnZW5kYS1o ZWFkbGluZS1zbmFwc2hvdC1iZWZvcmUtcmVwZWF0DQoJCQkob3JnLWdldC1oZWFkaW5nKSkpKQ0K CSAgICAgIChvcmctYXV0by1yZXBlYXQtbWF5YmUgb3JnLXN0YXRlKSkNCgkgICAgOzsgRml4dXAg Y3Vyc29yIGxvY2F0aW9uIGlmIGNsb3NlIHRvIHRoZSBrZXl3b3JkDQoJICAgIChpZiAoYW5kIChv dXRsaW5lLW9uLWhlYWRpbmctcCkNCgkJICAgICAobm90IChib2xwKSkNCgkJICAgICAoc2F2ZS1l eGN1cnNpb24gKGJlZ2lubmluZy1vZi1saW5lIDEpDQoJCQkJICAgICAobG9va2luZy1hdCBvcmct dG9kby1saW5lLXJlZ2V4cCkpDQoJCSAgICAgKDwgKHBvaW50KSAoKyAyIChvciAobWF0Y2gtZW5k IDIpIChtYXRjaC1lbmQgMSkpKSkpDQoJCShwcm9nbg0KCQkgIChnb3RvLWNoYXIgKG9yIChtYXRj aC1lbmQgMikgKG1hdGNoLWVuZCAxKSkpDQoJCSAgKGFuZCAobG9va2luZy1hdCAiICIpIChqdXN0 LW9uZS1zcGFjZSkpKSkNCgkgICAgKHdoZW4gb3JnLXRyaWdnZXItaG9vaw0KCSAgICAgIChzYXZl LWV4Y3Vyc2lvbg0KCQkocnVuLWhvb2std2l0aC1hcmdzICdvcmctdHJpZ2dlci1ob29rIGNoYW5n ZS1wbGlzdCkpKQ0KCSAgICAod2hlbiBjb21tZW50cCAob3JnLXRvZ2dsZS1jb21tZW50KSkpKSkp KSkNCg0KKGRlZnVuIG9yZy1ibG9jay10b2RvLWZyb20tY2hpbGRyZW4tb3Itc2libGluZ3Mtb3It cGFyZW50IChjaGFuZ2UtcGxpc3QpDQogICJCbG9jayB0dXJuaW5nIGFuIGVudHJ5IGludG8gYSBU T0RPLCB1c2luZyB0aGUgaGllcmFyY2h5Lg0KVGhpcyBjaGVja3Mgd2hldGhlciB0aGUgY3VycmVu dCB0YXNrIHNob3VsZCBiZSBibG9ja2VkIGZyb20gc3RhdGUNCmNoYW5nZXMuICBTdWNoIGJsb2Nr aW5nIG9jY3VycyB3aGVuOg0KDQogIDEuIFRoZSB0YXNrIGhhcyBjaGlsZHJlbiB3aGljaCBhcmUg bm90IGFsbCBpbiBhIGNvbXBsZXRlZCBzdGF0ZS4NCg0KICAyLiBBIHRhc2sgaGFzIGEgcGFyZW50 IHdpdGggdGhlIHByb3BlcnR5IDpPUkRFUkVEOiwgYW5kIHRoZXJlDQogICAgIGFyZSBzaWJsaW5n cyBwcmlvciB0byB0aGUgY3VycmVudCB0YXNrIHdpdGggaW5jb21wbGV0ZQ0KICAgICBzdGF0dXMu DQoNCiAgMy4gVGhlIHBhcmVudCBvZiB0aGUgdGFzayBpcyBibG9ja2VkIGJlY2F1c2UgaXQgaGFz IHNpYmxpbmdzIHRoYXQgc2hvdWxkDQogICAgIGJlIGRvbmUgZmlyc3QsIG9yIGlzIGNoaWxkIG9m IGEgYmxvY2sgZ3JhbmRwYXJlbnQgVE9ETyBlbnRyeS4iDQoNCiAgKGlmIChub3Qgb3JnLWVuZm9y Y2UtdG9kby1kZXBlbmRlbmNpZXMpDQogICAgICB0IDsgaWYgbG9jYWxseSB0dXJuZWQgb2ZmIGRv bid0IGJsb2NrDQogICAgKGNhdGNoICdkb250LWJsb2NrDQogICAgICA7OyBJZiB0aGlzIGlzIG5v dCBhIHRvZG8gc3RhdGUgY2hhbmdlLCBvciBpZiB0aGlzIGVudHJ5IGlzIGFscmVhZHkgRE9ORSwN CiAgICAgIDs7IGRvIG5vdCBibG9jaw0KICAgICAgKHdoZW4gKG9yIChub3QgKGVxIChwbGlzdC1n ZXQgY2hhbmdlLXBsaXN0IDp0eXBlKSAndG9kby1zdGF0ZS1jaGFuZ2UpKQ0KCQkobWVtYmVyIChw bGlzdC1nZXQgY2hhbmdlLXBsaXN0IDpmcm9tKQ0KCQkJKGNvbnMgJ2RvbmUgb3JnLWRvbmUta2V5 d29yZHMpKQ0KCQkobWVtYmVyIChwbGlzdC1nZXQgY2hhbmdlLXBsaXN0IDp0bykNCgkJCShjb25z ICd0b2RvIG9yZy1ub3QtZG9uZS1rZXl3b3JkcykpDQoJCShub3QgKHBsaXN0LWdldCBjaGFuZ2Ut cGxpc3QgOnRvKSkpDQoJKHRocm93ICdkb250LWJsb2NrIHQpKQ0KICAgICAgOzsgSWYgdGhpcyB0 YXNrIGhhcyBjaGlsZHJlbiwgYW5kIGFueSBhcmUgdW5kb25lLCBpdCdzIGJsb2NrZWQNCiAgICAg IChzYXZlLWV4Y3Vyc2lvbg0KCShvcmctYmFjay10by1oZWFkaW5nIHQpDQoJKGxldCAoKHRoaXMt bGV2ZWwgKGZ1bmNhbGwgb3V0bGluZS1sZXZlbCkpKQ0KCSAgKG91dGxpbmUtbmV4dC1oZWFkaW5n KQ0KCSAgKGxldCAoKGNoaWxkLWxldmVsIChmdW5jYWxsIG91dGxpbmUtbGV2ZWwpKSkNCgkgICAg KHdoaWxlIChhbmQgKG5vdCAoZW9icCkpDQoJCQkoPiBjaGlsZC1sZXZlbCB0aGlzLWxldmVsKSkN CgkgICAgICA7OyB0aGlzIHRvZG8gaGFzIGNoaWxkcmVuLCBjaGVjayB3aGV0aGVyIHRoZXkgYXJl IGFsbA0KCSAgICAgIDs7IGNvbXBsZXRlZA0KCSAgICAgIChpZiAoYW5kIChub3QgKG9yZy1lbnRy eS1pcy1kb25lLXApKQ0KCQkgICAgICAgKG9yZy1lbnRyeS1pcy10b2RvLXApKQ0KCQkgIChwcm9n biAoc2V0cSBvcmctYmxvY2stZW50cnktYmxvY2tpbmcgKG9yZy1nZXQtaGVhZGluZykpDQoJCQkg KHRocm93ICdkb250LWJsb2NrIG5pbCkpKQ0KCSAgICAgIChvdXRsaW5lLW5leHQtaGVhZGluZykN CgkgICAgICAoc2V0cSBjaGlsZC1sZXZlbCAoZnVuY2FsbCBvdXRsaW5lLWxldmVsKSkpKSkpDQog ICAgICA7OyBPdGhlcndpc2UsIGlmIHRoZSB0YXNrJ3MgcGFyZW50IGhhcyB0aGUgOk9SREVSRUQ6 IHByb3BlcnR5LCBhbmQNCiAgICAgIDs7IGFueSBwcmV2aW91cyBzaWJsaW5ncyBhcmUgdW5kb25l LCBpdCdzIGJsb2NrZWQNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCShvcmctYmFjay10by1oZWFk aW5nIHQpDQoJKGxldCogKChwb3MgKHBvaW50KSkNCgkgICAgICAgKHBhcmVudC1wb3MgKGFuZCAo b3JnLXVwLWhlYWRpbmctc2FmZSkgKHBvaW50KSkpKQ0KCSAgKGlmIChub3QgcGFyZW50LXBvcykg KHRocm93ICdkb250LWJsb2NrIHQpKSA7IG5vIHBhcmVudA0KCSAgKHdoZW4gKGFuZCAob3JnLW5v dC1uaWwgKG9yZy1lbnRyeS1nZXQgKHBvaW50KSAiT1JERVJFRCIpKQ0KCQkgICAgIChmb3J3YXJk LWxpbmUgMSkNCgkJICAgICAocmUtc2VhcmNoLWZvcndhcmQgb3JnLW5vdC1kb25lLWhlYWRpbmct cmVnZXhwIHBvcyB0KSkNCgkgICAgKHNldHEgb3JnLWJsb2NrLWVudHJ5LWJsb2NraW5nIChtYXRj aC1zdHJpbmcgMCkpDQoJICAgICh0aHJvdyAnZG9udC1ibG9jayBuaWwpKSAgOyBibG9jaywgdGhl cmUgaXMgYW4gb2xkZXIgc2libGluZyBub3QgZG9uZS4NCgkgIDs7IFNlYXJjaCBmdXJ0aGVyIHVw IHRoZSBoaWVyYXJjaHksIHRvIHNlZSBpZiBhbiBhbmNlc3RvciBpcyBibG9ja2VkDQoJICAod2hp bGUgdA0KCSAgICAoZ290by1jaGFyIHBhcmVudC1wb3MpDQoJICAgIChpZiAobm90IChsb29raW5n LWF0IG9yZy1ub3QtZG9uZS1oZWFkaW5nLXJlZ2V4cCkpDQoJCSh0aHJvdyAnZG9udC1ibG9jayB0 KSkJOyBkbyBub3QgYmxvY2ssIHBhcmVudCBpcyBub3QgYSBUT0RPDQoJICAgIChzZXRxIHBvcyAo cG9pbnQpKQ0KCSAgICAoc2V0cSBwYXJlbnQtcG9zIChhbmQgKG9yZy11cC1oZWFkaW5nLXNhZmUp IChwb2ludCkpKQ0KCSAgICAoaWYgKG5vdCBwYXJlbnQtcG9zKSAodGhyb3cgJ2RvbnQtYmxvY2sg dCkpIDsgbm8gcGFyZW50DQoJICAgICh3aGVuIChhbmQgKG9yZy1ub3QtbmlsIChvcmctZW50cnkt Z2V0IChwb2ludCkgIk9SREVSRUQiKSkNCgkJICAgICAgIChmb3J3YXJkLWxpbmUgMSkNCgkJICAg ICAgIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctbm90LWRvbmUtaGVhZGluZy1yZWdleHAgcG9zIHQp DQoJCSAgICAgICAoc2V0cSBvcmctYmxvY2stZW50cnktYmxvY2tpbmcgKG9yZy1nZXQtaGVhZGlu ZykpKQ0KCSAgICAgICh0aHJvdyAnZG9udC1ibG9jayBuaWwpKSkpKSkpKSA7IGJsb2NrLCBvbGRl ciBzaWJsaW5nIG5vdCBkb25lLg0KDQooZGVmY3VzdG9tIG9yZy10cmFjay1vcmRlcmVkLXByb3Bl cnR5LXdpdGgtdGFnIG5pbA0KICAiU2hvdWxkIHRoZSBPUkRFUkVEIHByb3BlcnR5IGFsc28gYmUg c2hvd24gYXMgYSB0YWc/DQpUaGUgT1JERVJFRCBwcm9wZXJ0eSBkZWNpZGVzIGlmIGFuIGVudHJ5 IHNob3VsZCByZXF1aXJlIHN1YnRhc2tzIHRvIGJlDQpjb21wbGV0ZWQgaW4gc2VxdWVuY2UuICBT aW5jZSBhIHByb3BlcnR5IGlzIG5vdCB2ZXJ5IHZpc2libGUsIHNldHRpbmcNCnRoaXMgb3B0aW9u IG1lYW5zIHRoYXQgdG9nZ2xpbmcgdGhlIE9SREVSRUQgcHJvcGVydHkgd2l0aCB0aGUgY29tbWFu ZA0KYG9yZy10b2dnbGUtb3JkZXJlZC1wcm9wZXJ0eScgd2lsbCBhbHNvIHRvZ2dsZSBhIHRhZyBP UkRFUkVELiAgVGhhdCB0YWcgaXMNCm5vdCByZWxldmFudCBmb3IgdGhlIGJlaGF2aW9yLCBidXQg aXQgbWFrZXMgdGhpbmdzIG1vcmUgdmlzaWJsZS4NCg0KTm90ZSB0aGF0IHRvZ2dsaW5nIHRoZSB0 YWcgd2l0aCB0YWdzIGNvbW1hbmRzIHdpbGwgbm90IGNoYW5nZSB0aGUgcHJvcGVydHkNCmFuZCB0 aGVyZWZvcmUgbm90IGluZmx1ZW5jZSBiZWhhdmlvciENCg0KVGhpcyBjYW4gYmUgdCwgbWVhbmlu ZyB0aGUgdGFnIE9SREVSRUQgc2hvdWxkIGJlIHVzZWQsICBJdCBjYW4gYWxzbyBiZSBhDQpzdHJp bmcgdG8gc2VsZWN0IGEgZGlmZmVyZW50IHRhZyBmb3IgdGhpcyB0YXNrLiINCiAgOmdyb3VwICdv cmctdG9kbw0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIk5vIHRyYWNraW5nIiBu aWwpDQoJICAoY29uc3QgOnRhZyAiVHJhY2sgd2l0aCBPUkRFUkVEIHRhZyIgdCkNCgkgIChzdHJp bmcgOnRhZyAiVXNlIG90aGVyIHRhZyIpKSkNCg0KKGRlZnVuIG9yZy10b2dnbGUtb3JkZXJlZC1w cm9wZXJ0eSAoKQ0KICAiVG9nZ2xlIHRoZSBPUkRFUkVEIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50 IGVudHJ5Lg0KRm9yIGJldHRlciB2aXNpYmlsaXR5LCB5b3UgY2FuIHRyYWNrIHRoZSB2YWx1ZSBv ZiB0aGlzIHByb3BlcnR5IHdpdGggYSB0YWcuDQpTZWUgdmFyaWFibGUgYG9yZy10cmFjay1vcmRl cmVkLXByb3BlcnR5LXdpdGgtdGFnJy4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKGxldCogKCh0MSBv cmctdHJhY2stb3JkZXJlZC1wcm9wZXJ0eS13aXRoLXRhZykNCgkgKHRhZyAoYW5kIHQxIChpZiAo c3RyaW5ncCB0MSkgdDEgIk9SREVSRUQiKSkpKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAg KG9yZy1iYWNrLXRvLWhlYWRpbmcpDQogICAgICAoaWYgKG9yZy1lbnRyeS1nZXQgbmlsICJPUkRF UkVEIikNCgkgIChwcm9nbg0KCSAgICAob3JnLWRlbGV0ZS1wcm9wZXJ0eSAiT1JERVJFRCIgIlBS T1BFUlRJRVMiKQ0KCSAgICAoYW5kIHRhZyAob3JnLXRvZ2dsZS10YWcgdGFnICdvZmYpKQ0KCSAg ICAobWVzc2FnZSAiU3VidGFza3MgY2FuIGJlIGNvbXBsZXRlZCBpbiBhcmJpdHJhcnkgb3JkZXIi KSkNCgkob3JnLWVudHJ5LXB1dCBuaWwgIk9SREVSRUQiICJ0IikNCgkoYW5kIHRhZyAob3JnLXRv Z2dsZS10YWcgdGFnICdvbikpDQoJKG1lc3NhZ2UgIlN1YnRhc2tzIG11c3QgYmUgY29tcGxldGVk IGluIHNlcXVlbmNlIikpKSkpDQoNCihkZWZ2YXIgb3JnLWJsb2NrZWQtYnktY2hlY2tib3hlcykg OyBkeW5hbWljYWxseSBzY29wZWQNCihkZWZ1biBvcmctYmxvY2stdG9kby1mcm9tLWNoZWNrYm94 ZXMgKGNoYW5nZS1wbGlzdCkNCiAgIkJsb2NrIHR1cm5pbmcgYW4gZW50cnkgaW50byBhIFRPRE8s IHVzaW5nIGNoZWNrYm94ZXMuDQpUaGlzIGNoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHRhc2sg c2hvdWxkIGJlIGJsb2NrZWQgZnJvbSBzdGF0ZQ0KY2hhbmdlcyBiZWNhdXNlIHRoZXJlIGFyZSB1 bmNoZWNrZWQgYm94ZXMgaW4gdGhpcyBlbnRyeS4iDQogIChpZiAobm90IG9yZy1lbmZvcmNlLXRv ZG8tY2hlY2tib3gtZGVwZW5kZW5jaWVzKQ0KICAgICAgdCA7IGlmIGxvY2FsbHkgdHVybmVkIG9m ZiBkb24ndCBibG9jaw0KICAgIChjYXRjaCAnZG9udC1ibG9jaw0KICAgICAgOzsgSWYgdGhpcyBp cyBub3QgYSB0b2RvIHN0YXRlIGNoYW5nZSwgb3IgaWYgdGhpcyBlbnRyeSBpcyBhbHJlYWR5IERP TkUsDQogICAgICA7OyBkbyBub3QgYmxvY2sNCiAgICAgICh3aGVuIChvciAobm90IChlcSAocGxp c3QtZ2V0IGNoYW5nZS1wbGlzdCA6dHlwZSkgJ3RvZG8tc3RhdGUtY2hhbmdlKSkNCgkJKG1lbWJl ciAocGxpc3QtZ2V0IGNoYW5nZS1wbGlzdCA6ZnJvbSkNCgkJCShjb25zICdkb25lIG9yZy1kb25l LWtleXdvcmRzKSkNCgkJKG1lbWJlciAocGxpc3QtZ2V0IGNoYW5nZS1wbGlzdCA6dG8pDQoJCQko Y29ucyAndG9kbyBvcmctbm90LWRvbmUta2V5d29yZHMpKQ0KCQkobm90IChwbGlzdC1nZXQgY2hh bmdlLXBsaXN0IDp0bykpKQ0KCSh0aHJvdyAnZG9udC1ibG9jayB0KSkNCiAgICAgIDs7IElmIHRo aXMgdGFzayBoYXMgY2hlY2tib3hlcyB0aGF0IGFyZSBub3QgY2hlY2tlZCwgaXQncyBibG9ja2Vk DQogICAgICAoc2F2ZS1leGN1cnNpb24NCgkob3JnLWJhY2stdG8taGVhZGluZyB0KQ0KCShsZXQg KChiZWcgKHBvaW50KSkgZW5kKQ0KCSAgKG91dGxpbmUtbmV4dC1oZWFkaW5nKQ0KCSAgKHNldHEg ZW5kIChwb2ludCkpDQoJICAoZ290by1jaGFyIGJlZykNCgkgIChpZiAob3JnLWxpc3Qtc2VhcmNo LWZvcndhcmQNCgkgICAgICAgKGNvbmNhdCAob3JnLWl0ZW0tYmVnaW5uaW5nLXJlKQ0KCQkgICAg ICAgIlxcKD86XFxbQFxcKD86c3RhcnQ6XFwpP1xcKFswLTldK1xcfFtBLVphLXpdXFwpXFxdWyBc dF0qXFwpPyINCgkJICAgICAgICJcXFtbLSBdXFxdIikNCgkgICAgICAgZW5kIHQpDQoJICAgICAg KHByb2duDQoJCShpZiAoYm91bmRwICdvcmctYmxvY2tlZC1ieS1jaGVja2JveGVzKQ0KCQkgICAg KHNldHEgb3JnLWJsb2NrZWQtYnktY2hlY2tib3hlcyB0KSkNCgkJKHRocm93ICdkb250LWJsb2Nr IG5pbCkpKSkpDQogICAgICB0KSkpIDsgZG8gbm90IGJsb2NrDQoNCihkZWZ1biBvcmctZW50cnkt YmxvY2tlZC1wICgpDQogICJJcyB0aGUgY3VycmVudCBlbnRyeSBibG9ja2VkPyINCiAgKG9yZy13 aXRoLXNpbGVudC1tb2RpZmljYXRpb25zDQogICAoaWYgKG9yZy1lbnRyeS1nZXQgbmlsICJOT0JM T0NLSU5HIikNCiAgICAgICBuaWwgOzsgTmV2ZXIgYmxvY2sgdGhpcyBlbnRyeQ0KICAgICAobm90 IChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtZmFpbHVyZQ0KCSAgICdvcmctYmxvY2tlci1ob29r DQoJICAgKGxpc3QgOnR5cGUgJ3RvZG8tc3RhdGUtY2hhbmdlDQoJCSA6cG9zaXRpb24gKHBvaW50 KQ0KCQkgOmZyb20gJ3RvZG8NCgkJIDp0byAnZG9uZSkpKSkpKQ0KDQooZGVmdW4gb3JnLXVwZGF0 ZS1zdGF0aXN0aWNzLWNvb2tpZXMgKGFsbCkNCiAgIlVwZGF0ZSB0aGUgc3RhdGlzdGljcyBjb29r aWUsIGVpdGhlciBmcm9tIFRPRE8gb3IgZnJvbSBjaGVja2JveGVzLg0KVGhpcyBzaG91bGQgYmUg Y2FsbGVkIHdpdGggdGhlIGN1cnNvciBpbiBhIGxpbmUgd2l0aCBhIHN0YXRpc3RpY3MgY29va2ll LiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgKGlmIGFsbA0KICAgICAgKHByb2duDQoJKG9yZy11 cGRhdGUtY2hlY2tib3gtY291bnQgJ2FsbCkNCgkob3JnLW1hcC1lbnRyaWVzICdvcmctdXBkYXRl LXBhcmVudC10b2RvLXN0YXRpc3RpY3MpKQ0KICAgIChpZiAobm90IChvcmctYXQtaGVhZGluZy1w KSkNCgkob3JnLXVwZGF0ZS1jaGVja2JveC1jb3VudCkNCiAgICAgIChsZXQgKChwb3MgKHBvaW50 LW1hcmtlcikpDQoJICAgIGVuZCBsMSBsMikNCgkoaWdub3JlLWVycm9ycyAob3JnLWJhY2stdG8t aGVhZGluZyB0KSkNCgkoaWYgKG5vdCAob3JnLWF0LWhlYWRpbmctcCkpDQoJICAgIChvcmctdXBk YXRlLWNoZWNrYm94LWNvdW50KQ0KCSAgKHNldHEgbDEgKG9yZy1vdXRsaW5lLWxldmVsKSkNCgkg IChzZXRxIGVuZCAoc2F2ZS1leGN1cnNpb24NCgkJICAgICAgKG91dGxpbmUtbmV4dC1oZWFkaW5n KQ0KCQkgICAgICAoaWYgKG9yZy1hdC1oZWFkaW5nLXApIChzZXRxIGwyIChvcmctb3V0bGluZS1s ZXZlbCkpKQ0KCQkgICAgICAocG9pbnQpKSkNCgkgIChpZiAoYW5kIChzYXZlLWV4Y3Vyc2lvbg0K CQkgICAgIChyZS1zZWFyY2gtZm9yd2FyZA0KCQkgICAgICAiXlsgXHRdKlxcKFstKypdXFx8WzAt OV0rWy4pXVxcKSBcXFtbLSBYXVxcXSIgZW5kIHQpKQ0KCQkgICAobm90IChzYXZlLWV4Y3Vyc2lv biAocmUtc2VhcmNoLWZvcndhcmQNCgkJCQkJICI6Q09PS0lFX0RBVEE6LipcXDx0b2RvXFw+IiBl bmQgdCkpKSkNCgkgICAgICAob3JnLXVwZGF0ZS1jaGVja2JveC1jb3VudCkNCgkgICAgKGlmIChh bmQgbDIgKD4gbDIgbDEpKQ0KCQkocHJvZ24NCgkJICAoZ290by1jaGFyIGVuZCkNCgkJICAob3Jn LXVwZGF0ZS1wYXJlbnQtdG9kby1zdGF0aXN0aWNzKSkNCgkgICAgICAoZ290by1jaGFyIHBvcykN CgkgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMSkNCgkgICAgICAod2hpbGUgKHJlLXNlYXJjaC1m b3J3YXJkDQoJCSAgICAgICJcXChcXChcXFtbMC05XSolXFxdXFwpXFx8XFwoXFxbWzAtOV0qL1sw LTldKlxcXVxcKVxcKSINCgkJICAgICAgKHBvaW50LWF0LWVvbCkgdCkNCgkJKHJlcGxhY2UtbWF0 Y2ggKGlmIChtYXRjaC1lbmQgMikgIlsxMDAlXSIgIlswLzBdIikgdCB0KSkpKSkNCgkoZ290by1j aGFyIHBvcykNCgkobW92ZS1tYXJrZXIgcG9zIG5pbCkpKSkpDQoNCihkZWZ2YXIgb3JnLWVudHJ5 LXByb3BlcnR5LWluaGVyaXRlZC1mcm9tKSA7OyBkZWZpbmVkIGJlbG93DQooZGVmdW4gb3JnLXVw ZGF0ZS1wYXJlbnQtdG9kby1zdGF0aXN0aWNzICgpDQogICJVcGRhdGUgYW55IHN0YXRpc3RpY3Mg Y29va2llIGluIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgaGVhZGxpbmUuDQpXaGVuIGBvcmct aGllcmFyY2hpY2FsLXRvZG8tc3RhdGlzdGljcycgaXMgbmlsLCBzdGF0aXN0aWNzIHdpbGwgY292 ZXINCnRoZSBlbnRpcmUgc3VidHJlZSBhbmQgdGhpcyB3aWxsIHRyYXZlbCB1cCB0aGUgaGllcmFy Y2h5IGFuZCB1cGRhdGUNCnN0YXRpc3RpY3MgZXZlcnl3aGVyZS4iDQogIChsZXQqICgocHJvcCAo c2F2ZS1leGN1cnNpb24gKG9yZy11cC1oZWFkaW5nLXNhZmUpDQoJCQkgICAgICAgKG9yZy1lbnRy eS1nZXQgbmlsICJDT09LSUVfREFUQSIgJ2luaGVyaXQpKSkNCgkgKHJlY3Vyc2l2ZSAob3IgKG5v dCBvcmctaGllcmFyY2hpY2FsLXRvZG8tc3RhdGlzdGljcykNCgkJCShhbmQgcHJvcCAoc3RyaW5n LW1hdGNoICJcXDxyZWN1cnNpdmVcXD4iIHByb3ApKSkpDQoJIChsaW0gKG9yIChhbmQgcHJvcCAo bWFya2VyLXBvc2l0aW9uIG9yZy1lbnRyeS1wcm9wZXJ0eS1pbmhlcml0ZWQtZnJvbSkpDQoJCSAg MCkpDQoJIChmaXJzdCB0KQ0KCSAoYm94LXJlICJcXChcXChcXFtbMC05XSolXFxdXFwpXFx8XFwo XFxbWzAtOV0qL1swLTldKlxcXVxcKVxcKSIpDQoJIGxldmVsIGx0b2dnbGUgbDEgbmV3IG5kZWwN CgkgKGNudC1hbGwgMCkgKGNudC1kb25lIDApIGlzLXBlcmNlbnQga3dkDQoJIGNoZWNrYm94LWJl ZyBvdiBvdnMgb3ZlIGNvb2tpZS1wcmVzZW50KQ0KICAgIChjYXRjaCAnZXhpdA0KICAgICAgKHNh dmUtZXhjdXJzaW9uDQoJKGJlZ2lubmluZy1vZi1saW5lIDEpDQoJKHNldHEgbHRvZ2dsZSAoZnVu Y2FsbCBvdXRsaW5lLWxldmVsKSkNCgk7OyBUaHJlZSBzaXR1YXRpb25zIGFyZSB0byBjb25zaWRl cjoNCg0KCTs7IDEuIGlmIGBvcmctaGllcmFyY2hpY2FsLXRvZG8tc3RhdGlzdGljcycgaXMgbmls LCByZXBlYXQgdXANCgk7OyAgICB0byB0aGUgdG9wLWxldmVsIGFuY2VzdG9yIG9uIHRoZSBoZWFk bGluZTsNCg0KCTs7IDIuIElmIHBhcmVudCBoYXMgInJlY3Vyc2l2ZSIgcHJvcGVydHksIHJlcGVh dCB1cCB0byB0aGUNCgk7OyAgICBoZWFkbGluZSBzZXR0aW5nIHRoYXQgcHJvcGVydHksIHRha2lu ZyBpbmhlcml0YW5jZSBpbnRvDQoJOzsgICAgYWNjb3VudDsNCg0KCTs7IDMuIEVsc2UsIG1vdmUg dXAgdG8gZGlyZWN0IHBhcmVudCBhbmQgcHJvY2VlZCBvbmx5IG9uY2UuDQoJKHdoaWxlIChhbmQg KHNldHEgbGV2ZWwgKG9yZy11cC1oZWFkaW5nLXNhZmUpKQ0KCQkgICAgKG9yIHJlY3Vyc2l2ZSBm aXJzdCkNCgkJICAgICg+PSAocG9pbnQpIGxpbSkpDQoJICAoc2V0cSBmaXJzdCBuaWwgY29va2ll LXByZXNlbnQgbmlsKQ0KCSAgKHVubGVzcyAoYW5kIGxldmVsDQoJCSAgICAgICAobm90IChzdHJp bmctbWF0Y2gNCgkJCSAgICAgIlxcPGNoZWNrYm94XFw+Ig0KCQkJICAgICAoZG93bmNhc2UgKG9y IChvcmctZW50cnktZ2V0IG5pbCAiQ09PS0lFX0RBVEEiKQ0KCQkJCQkgICAiIikpKSkpDQoJICAg ICh0aHJvdyAnZXhpdCBuaWwpKQ0KCSAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCBib3gtcmUg KHBvaW50LWF0LWVvbCkgdCkNCgkgICAgKHNldHEgY250LWFsbCAwIGNudC1kb25lIDAgY29va2ll LXByZXNlbnQgdCkNCgkgICAgKHNldHEgaXMtcGVyY2VudCAobWF0Y2gtZW5kIDIpIGNoZWNrYm94 LWJlZyAobWF0Y2gtYmVnaW5uaW5nIDApKQ0KCSAgICAoc2F2ZS1tYXRjaC1kYXRhDQoJICAgICAg KHVubGVzcyAob3V0bGluZS1uZXh0LWhlYWRpbmcpICh0aHJvdyAnZXhpdCBuaWwpKQ0KCSAgICAg ICh3aGlsZSAoYW5kIChsb29raW5nLWF0IG9yZy1jb21wbGV4LWhlYWRpbmctcmVnZXhwKQ0KCSAg ICAJCSAgKD4gKHNldHEgbDEgKGxlbmd0aCAobWF0Y2gtc3RyaW5nIDEpKSkgbGV2ZWwpKQ0KCSAg ICAJKHNldHEga3dkIChhbmQgKG9yIHJlY3Vyc2l2ZSAoPSBsMSBsdG9nZ2xlKSkNCgkgICAgCQkg ICAgICAgKG1hdGNoLXN0cmluZyAyKSkpDQoJICAgIAkoaWYgKG9yIChlcSBvcmctcHJvdmlkZS10 b2RvLXN0YXRpc3RpY3MgJ2FsbC1oZWFkbGluZXMpDQoJICAgIAkJKGFuZCAobGlzdHAgb3JnLXBy b3ZpZGUtdG9kby1zdGF0aXN0aWNzKQ0KCSAgICAJCSAgICAgKG9yIChtZW1iZXIga3dkIG9yZy1w cm92aWRlLXRvZG8tc3RhdGlzdGljcykNCgkgICAgCQkJIChtZW1iZXIga3dkIG9yZy1kb25lLWtl eXdvcmRzKSkpKQ0KCSAgICAJICAgIChzZXRxIGNudC1hbGwgKDErIGNudC1hbGwpKQ0KCSAgICAJ ICAoaWYgKGVxIG9yZy1wcm92aWRlLXRvZG8tc3RhdGlzdGljcyB0KQ0KCSAgICAJICAgICAgKGFu ZCBrd2QgKHNldHEgY250LWFsbCAoMSsgY250LWFsbCkpKSkpDQoJICAgIAkoYW5kIChtZW1iZXIg a3dkIG9yZy1kb25lLWtleXdvcmRzKQ0KCSAgICAJICAgICAoc2V0cSBjbnQtZG9uZSAoMSsgY250 LWRvbmUpKSkNCgkgICAgCShvdXRsaW5lLW5leHQtaGVhZGluZykpKQ0KCSAgICAoc2V0cSBuZXcN CgkgICAgCSAgKGlmIGlzLXBlcmNlbnQNCgkgICAgCSAgICAgIChmb3JtYXQgIlslZCUlXSIgKC8g KCogMTAwIGNudC1kb25lKSAobWF4IDEgY250LWFsbCkpKQ0KCSAgICAJICAgIChmb3JtYXQgIlsl ZC8lZF0iIGNudC1kb25lIGNudC1hbGwpKQ0KCSAgICAJICBuZGVsICgtIChtYXRjaC1lbmQgMCkg Y2hlY2tib3gtYmVnKSkNCgkgICAgOzsgaGFuZGxlIG92ZXJsYXlzIHdoZW4gdXBkYXRpbmcgY29v a2llIGZyb20gY29sdW1uIHZpZXcNCgkgICAgKHdoZW4gKHNldHEgb3YgKGNhciAob3ZlcmxheXMt YXQgY2hlY2tib3gtYmVnKSkpDQoJICAgICAgKHNldHEgb3ZzIChvdmVybGF5LXN0YXJ0IG92KSBv dmUgKG92ZXJsYXktZW5kIG92KSkNCgkgICAgICAoZGVsZXRlLW92ZXJsYXkgb3YpKQ0KCSAgICAo Z290by1jaGFyIGNoZWNrYm94LWJlZykNCgkgICAgKGluc2VydCBuZXcpDQoJICAgIChkZWxldGUt cmVnaW9uIChwb2ludCkgKCsgKHBvaW50KSBuZGVsKSkNCgkgICAgKHdoZW4gb3JnLWF1dG8tYWxp Z24tdGFncyAob3JnLWZpeC10YWdzLW9uLXRoZS1mbHkpKQ0KCSAgICAod2hlbiBvdiAobW92ZS1v dmVybGF5IG92IG92cyBvdmUpKSkNCgkgICh3aGVuIGNvb2tpZS1wcmVzZW50DQoJICAgIChydW4t aG9vay13aXRoLWFyZ3MgJ29yZy1hZnRlci10b2RvLXN0YXRpc3RpY3MtaG9vaw0KCQkJCWNudC1k b25lICgtIGNudC1hbGwgY250LWRvbmUpKSkpKSkNCiAgICAocnVuLWhvb2tzICdvcmctdG9kby1z dGF0aXN0aWNzLWhvb2spKSkNCg0KKGRlZnZhciBvcmctYWZ0ZXItdG9kby1zdGF0aXN0aWNzLWhv b2sgbmlsDQogICJIb29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGEgVE9ETyBzdGF0aXN0aWNzIGNv b2tpZSBoYXMgYmVlbiB1cGRhdGVkLg0KRWFjaCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0d28g YXJndW1lbnRzOiB0aGUgbnVtYmVyIG9mIG5vdC1kb25lIGVudHJpZXMNCmFuZCB0aGUgbnVtYmVy IG9mIGRvbmUgZW50cmllcy4NCg0KRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24s IHdoZW4gYWRkZWQgdG8gdGhpcyBob29rLCB3aWxsIHN3aXRjaA0KYW4gZW50cnkgdG8gRE9ORSB3 aGVuIGFsbCBjaGlsZHJlbiBhcmUgZG9uZSwgYW5kIGJhY2sgdG8gVE9ETyB3aGVuIG5ldw0KZW50 cmllcyBhcmUgc2V0IHRvIGEgVE9ETyBzdGF0dXMuICBOb3RlIHRoYXQgdGhpcyBob29rIGlzIG9u bHkgY2FsbGVkDQp3aGVuIHRoZXJlIGlzIGEgc3RhdGlzdGljcyBjb29raWUgaW4gdGhlIGhlYWRs aW5lIQ0KDQogKGRlZnVuIG9yZy1zdW1tYXJ5LXRvZG8gKG4tZG9uZSBuLW5vdC1kb25lKQ0KICAg XCJTd2l0Y2ggZW50cnkgdG8gRE9ORSB3aGVuIGFsbCBzdWJlbnRyaWVzIGFyZSBkb25lLCB0byBU T0RPIG90aGVyd2lzZS5cIg0KICAgKGxldCAob3JnLWxvZy1kb25lIG9yZy1sb2ctc3RhdGVzKSAg IDsgdHVybiBvZmYgbG9nZ2luZw0KICAgICAob3JnLXRvZG8gKGlmICg9IG4tbm90LWRvbmUgMCkg XCJET05FXCIgXCJUT0RPXCIpKSkpDQoiKQ0KDQooZGVmdmFyIG9yZy10b2RvLXN0YXRpc3RpY3Mt aG9vayBuaWwNCiAgIkhvb2sgdGhhdCBpcyBydW4gd2hlbmV2ZXIgT3JnIHRoaW5rcyBUT0RPIHN0 YXRpc3RpY3Mgc2hvdWxkIGJlIHVwZGF0ZWQuDQpUaGlzIGhvb2sgcnVucyBldmVuIGlmIHRoZXJl IGlzIG5vIHN0YXRpc3RpY3MgY29va2llIHByZXNlbnQsIGluIHdoaWNoIGNhc2UNCmBvcmctYWZ0 ZXItdG9kby1zdGF0aXN0aWNzLWhvb2snIHdvdWxkIG5vdCBydW4uIikNCg0KKGRlZnVuIG9yZy10 b2RvLXRyaWdnZXItdGFnLWNoYW5nZXMgKHN0YXRlKQ0KICAiQXBwbHkgdGhlIGNoYW5nZXMgZGVm aW5lZCBpbiBgb3JnLXRvZG8tc3RhdGUtdGFncy10cmlnZ2VycycuIg0KICAobGV0ICgobCBvcmct dG9kby1zdGF0ZS10YWdzLXRyaWdnZXJzKQ0KCWNoYW5nZXMpDQogICAgKHdoZW4gKG9yIChub3Qg c3RhdGUpIChlcXVhbCBzdGF0ZSAiIikpDQogICAgICAoc2V0cSBjaGFuZ2VzIChhcHBlbmQgY2hh bmdlcyAoY2RyIChhc3NvYyAiIiBsKSkpKSkNCiAgICAod2hlbiAoYW5kIChzdHJpbmdwIHN0YXRl KSAoPiAobGVuZ3RoIHN0YXRlKSAwKSkNCiAgICAgIChzZXRxIGNoYW5nZXMgKGFwcGVuZCBjaGFu Z2VzIChjZHIgKGFzc29jIHN0YXRlIGwpKSkpKQ0KICAgICh3aGVuIChtZW1iZXIgc3RhdGUgb3Jn LW5vdC1kb25lLWtleXdvcmRzKQ0KICAgICAgKHNldHEgY2hhbmdlcyAoYXBwZW5kIGNoYW5nZXMg KGNkciAoYXNzb2MgJ3RvZG8gbCkpKSkpDQogICAgKHdoZW4gKG1lbWJlciBzdGF0ZSBvcmctZG9u ZS1rZXl3b3JkcykNCiAgICAgIChzZXRxIGNoYW5nZXMgKGFwcGVuZCBjaGFuZ2VzIChjZHIgKGFz c29jICdkb25lIGwpKSkpKQ0KICAgIChkb2xpc3QgKGMgY2hhbmdlcykNCiAgICAgIChvcmctdG9n Z2xlLXRhZyAoY2FyIGMpIChpZiAoY2RyIGMpICdvbiAnb2ZmKSkpKSkNCg0KKGRlZnVuIG9yZy1s b2NhbC1sb2dnaW5nICh2YWx1ZSkNCiAgIkdldCBsb2dnaW5nIHNldHRpbmdzIGZyb20gYSBwcm9w ZXJ0eSBWQUxVRS4iDQogIChsZXQqICh3b3JkcyB3IGEpDQogICAgOzsgZGlyZWN0bHkgc2V0IHRo ZSB2YXJpYWJsZXMsIHRoZXkgYXJlIGFscmVhZHkgbG9jYWwuDQogICAgKHNldHEgb3JnLWxvZy1k b25lIG5pbA0KCSAgb3JnLWxvZy1yZXBlYXQgbmlsDQoJICBvcmctdG9kby1sb2ctc3RhdGVzIG5p bCkNCiAgICAoc2V0cSB3b3JkcyAob3JnLXNwbGl0LXN0cmluZyB2YWx1ZSkpDQogICAgKHdoaWxl IChzZXRxIHcgKHBvcCB3b3JkcykpDQogICAgICAoY29uZA0KICAgICAgICgoc2V0cSBhIChhc3Nv YyB3IG9yZy1zdGFydHVwLW9wdGlvbnMpKQ0KCShhbmQgKG1lbWJlciAobnRoIDEgYSkgJyhvcmct bG9nLWRvbmUgb3JnLWxvZy1yZXBlYXQpKQ0KCSAgICAgKHNldCAobnRoIDEgYSkgKG50aCAyIGEp KSkpDQogICAgICAgKChzZXRxIGEgKG9yZy1leHRyYWN0LWxvZy1zdGF0ZS1zZXR0aW5ncyB3KSkN CgkoYW5kIChtZW1iZXIgKGNhciBhKSBvcmctdG9kby1rZXl3b3Jkcy0xKQ0KCSAgICAgKHB1c2gg YSBvcmctdG9kby1sb2ctc3RhdGVzKSkpKSkpKQ0KDQooZGVmdW4gb3JnLWdldC10b2RvLXNlcXVl bmNlLWhlYWQgKGt3ZCkNCiAgIlJldHVybiB0aGUgaGVhZCBvZiB0aGUgVE9ETyBzZXF1ZW5jZSB0 byB3aGljaCBLV0QgYmVsb25ncy4NCklmIEtXRCBpcyBub3Qgc2V0LCBjaGVjayBpZiB0aGVyZSBp cyBhIHRleHQgcHJvcGVydHkgcmVtZW1iZXJpbmcgdGhlDQpyaWdodCBzZXF1ZW5jZS4iDQogIChs ZXQgKHApDQogICAgKGNvbmQNCiAgICAgKChub3Qga3dkKQ0KICAgICAgKG9yIChnZXQtdGV4dC1w cm9wZXJ0eSAocG9pbnQtYXQtYm9sKSAnb3JnLXRvZG8taGVhZCkNCgkgIChwcm9nbg0KCSAgICAo c2V0cSBwIChuZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2UgKHBvaW50LWF0LWJvbCkgJ29yZy10 b2RvLWhlYWQNCgkJCQkJCSBuaWwgKHBvaW50LWF0LWVvbCkpKQ0KCSAgICAoZ2V0LXRleHQtcHJv cGVydHkgcCAnb3JnLXRvZG8taGVhZCkpKSkNCiAgICAgKChub3QgKG1lbWJlciBrd2Qgb3JnLXRv ZG8ta2V5d29yZHMtMSkpDQogICAgICAoY2FyIG9yZy10b2RvLWtleXdvcmRzLTEpKQ0KICAgICAo dCAobnRoIDIgKGFzc29jIGt3ZCBvcmctdG9kby1rd2QtYWxpc3QpKSkpKSkNCg0KKGRlZnVuIG9y Zy1mYXN0LXRvZG8tc2VsZWN0aW9uICgpDQogICJGYXN0IFRPRE8ga2V5d29yZCBzZWxlY3Rpb24g d2l0aCBzaW5nbGUga2V5cy4NClJldHVybnMgdGhlIG5ldyBUT0RPIGtleXdvcmQsIG9yIG5pbCBp ZiBubyBzdGF0ZSBjaGFuZ2Ugc2hvdWxkIG9jY3VyLiINCiAgKGxldCogKChmdWxsdGFibGUgb3Jn LXRvZG8ta2V5LWFsaXN0KQ0KCSAoZG9uZS1rZXl3b3JkcyBvcmctZG9uZS1rZXl3b3JkcykgOzsg bmVlZGVkIGZvciB0aGUgZmFjZXMuDQoJIChtYXhsZW4gKGFwcGx5ICdtYXggKG1hcGNhcg0KCQkJ ICAgICAgKGxhbWJkYSAoeCkNCgkJCQkoaWYgKHN0cmluZ3AgKGNhciB4KSkgKHN0cmluZy13aWR0 aCAoY2FyIHgpKSAwKSkNCgkJCSAgICAgIGZ1bGx0YWJsZSkpKQ0KCSAoZXhwZXJ0IG5pbCkNCgkg KGZ3aWR0aCAoKyBtYXhsZW4gMyAxIDMpKQ0KCSAobmNvbCAoLyAoLSAod2luZG93LXdpZHRoKSA0 KSBmd2lkdGgpKQ0KCSB0ZyBjbnQgZSBjIHRibA0KCSBncm91cHMgaW5ncm91cCkNCiAgICAoc2F2 ZS1leGN1cnNpb24NCiAgICAgIChzYXZlLXdpbmRvdy1leGN1cnNpb24NCgkoaWYgZXhwZXJ0DQoJ ICAgIChzZXQtYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiICpPcmcgdG9kbyoiKSkNCgkgIChv cmctc3dpdGNoLXRvLWJ1ZmZlci1vdGhlci13aW5kb3cgKGdldC1idWZmZXItY3JlYXRlICIgKk9y ZyB0b2RvKiIpKSkNCgkoZXJhc2UtYnVmZmVyKQ0KCShvcmctc2V0LWxvY2FsICdvcmctZG9uZS1r ZXl3b3JkcyBkb25lLWtleXdvcmRzKQ0KCShzZXRxIHRibCBmdWxsdGFibGUgY250IDApDQoJKHdo aWxlIChzZXRxIGUgKHBvcCB0YmwpKQ0KCSAgKGNvbmQNCgkgICAoKGVxdWFsIGUgJyg6c3RhcnRn cm91cCkpDQoJICAgIChwdXNoICcoKSBncm91cHMpIChzZXRxIGluZ3JvdXAgdCkNCgkgICAgKHdo ZW4gKG5vdCAoPSBjbnQgMCkpDQoJICAgICAgKHNldHEgY250IDApDQoJICAgICAgKGluc2VydCAi XG4iKSkNCgkgICAgKGluc2VydCAieyAiKSkNCgkgICAoKGVxdWFsIGUgJyg6ZW5kZ3JvdXApKQ0K CSAgICAoc2V0cSBpbmdyb3VwIG5pbCBjbnQgMCkNCgkgICAgKGluc2VydCAifVxuIikpDQoJICAg KChlcXVhbCBlICcoOm5ld2xpbmUpKQ0KCSAgICAod2hlbiAobm90ICg9IGNudCAwKSkNCgkgICAg ICAoc2V0cSBjbnQgMCkNCgkgICAgICAoaW5zZXJ0ICJcbiIpDQoJICAgICAgKHNldHEgZSAoY2Fy IHRibCkpDQoJICAgICAgKHdoaWxlIChlcXVhbCAoY2FyIHRibCkgJyg6bmV3bGluZSkpDQoJCShp bnNlcnQgIlxuIikNCgkJKHNldHEgdGJsIChjZHIgdGJsKSkpKSkNCgkgICAodA0KCSAgICAoc2V0 cSB0ZyAoY2FyIGUpIGMgKGNkciBlKSkNCgkgICAgKGlmIGluZ3JvdXAgKHB1c2ggdGcgKGNhciBn cm91cHMpKSkNCgkgICAgKHNldHEgdGcgKG9yZy1hZGQtcHJvcHMgdGcgbmlsICdmYWNlDQoJCQkJ ICAgIChvcmctZ2V0LXRvZG8tZmFjZSB0ZykpKQ0KCSAgICAoaWYgKGFuZCAoPSBjbnQgMCkgKG5v dCBpbmdyb3VwKSkgKGluc2VydCAiICAiKSkNCgkgICAgKGluc2VydCAiWyIgYyAiXSAiIHRnICht YWtlLXN0cmluZw0KCQkJCSAgICgtIGZ3aWR0aCA0IChsZW5ndGggdGcpKSA/XCApKQ0KCSAgICAo d2hlbiAoPSAoc2V0cSBjbnQgKDErIGNudCkpIG5jb2wpDQoJICAgICAgKGluc2VydCAiXG4iKQ0K CSAgICAgIChpZiBpbmdyb3VwIChpbnNlcnQgIiAgIikpDQoJICAgICAgKHNldHEgY250IDApKSkp KQ0KCShpbnNlcnQgIlxuIikNCgkoZ290by1jaGFyIChwb2ludC1taW4pKQ0KCShpZiAobm90IGV4 cGVydCkgKG9yZy1maXQtd2luZG93LXRvLWJ1ZmZlcikpDQoJKG1lc3NhZ2UgIlthLXouLl06U2V0 IFtTUENdOmNsZWFyIikNCgkoc2V0cSBjIChsZXQgKChpbmhpYml0LXF1aXQgdCkpIChyZWFkLWNo YXItZXhjbHVzaXZlKSkpDQoJKGNvbmQNCgkgKChvciAoPSBjID9cQy1nKQ0KCSAgICAgIChhbmQg KD0gYyA/cSkgKG5vdCAocmFzc29jIGMgZnVsbHRhYmxlKSkpKQ0KCSAgKHNldHEgcXVpdC1mbGFn IHQpKQ0KCSAoKD0gYyA/XCApIG5pbCkNCgkgKChzZXRxIGUgKHJhc3NvYyBjIGZ1bGx0YWJsZSkg dGcgKGNhciBlKSkNCgkgIHRnKQ0KCSAodCAoc2V0cSBxdWl0LWZsYWcgdCkpKSkpKSkNCg0KKGRl ZnVuIG9yZy1lbnRyeS1pcy10b2RvLXAgKCkNCiAgKG1lbWJlciAob3JnLWdldC10b2RvLXN0YXRl KSBvcmctbm90LWRvbmUta2V5d29yZHMpKQ0KDQooZGVmdW4gb3JnLWVudHJ5LWlzLWRvbmUtcCAo KQ0KICAobWVtYmVyIChvcmctZ2V0LXRvZG8tc3RhdGUpIG9yZy1kb25lLWtleXdvcmRzKSkNCg0K KGRlZnVuIG9yZy1nZXQtdG9kby1zdGF0ZSAoKQ0KICAiUmV0dXJuIHRoZSBUT0RPIGtleXdvcmQg b2YgdGhlIGN1cnJlbnQgc3VidHJlZS4iDQogIChzYXZlLWV4Y3Vyc2lvbg0KICAgIChvcmctYmFj ay10by1oZWFkaW5nIHQpDQogICAgKGFuZCAobG9va2luZy1hdCBvcmctdG9kby1saW5lLXJlZ2V4 cCkNCgkgKG1hdGNoLWVuZCAyKQ0KCSAobWF0Y2gtc3RyaW5nIDIpKSkpDQoNCihkZWZ1biBvcmct YXQtZGF0ZS1yYW5nZS1wICgmb3B0aW9uYWwgaW5hY3RpdmUtb2spDQogICJJcyB0aGUgY3Vyc29y IGluc2lkZSBhIGRhdGUgcmFuZ2U/Ig0KICAoaW50ZXJhY3RpdmUpDQogIChzYXZlLWV4Y3Vyc2lv bg0KICAgIChjYXRjaCAnZXhpdA0KICAgICAgKGxldCAoKHBvcyAocG9pbnQpKSkNCgkoc2tpcC1j aGFycy1iYWNrd2FyZCAiXls8XHJcbiIpDQoJKHNraXAtY2hhcnMtYmFja3dhcmQgIjxbIikNCgko YW5kIChsb29raW5nLWF0IChpZiBpbmFjdGl2ZS1vayBvcmctdHItcmVnZXhwLWJvdGggb3JnLXRy LXJlZ2V4cCkpDQoJICAgICAoPj0gKG1hdGNoLWVuZCAwKSBwb3MpDQoJICAgICAodGhyb3cgJ2V4 aXQgdCkpDQoJKHNraXAtY2hhcnMtYmFja3dhcmQgIl48W1xyXG4iKQ0KCShza2lwLWNoYXJzLWJh Y2t3YXJkICI8WyIpDQoJKGFuZCAobG9va2luZy1hdCAoaWYgaW5hY3RpdmUtb2sgb3JnLXRyLXJl Z2V4cC1ib3RoIG9yZy10ci1yZWdleHApKQ0KCSAgICAgKD49IChtYXRjaC1lbmQgMCkgcG9zKQ0K CSAgICAgKHRocm93ICdleGl0IHQpKSkNCiAgICAgIG5pbCkpKQ0KDQooZGVmdW4gb3JnLWdldC1y ZXBlYXQgKCZvcHRpb25hbCB0YWdsaW5lKQ0KICAiQ2hlY2sgaWYgdGhlcmUgaXMgYSBkZWFkbGlu ZS9zY2hlZHVsZSB3aXRoIHJlcGVhdGVyIGluIHRoaXMgZW50cnkuIg0KICAoc2F2ZS1tYXRjaC1k YXRhDQogICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAob3JnLWJhY2stdG8taGVhZGluZyB0KQ0K ICAgICAgKGFuZCAocmUtc2VhcmNoLWZvcndhcmQgKGlmIHRhZ2xpbmUNCgkJCQkgIChjb25jYXQg dGFnbGluZSAiXFxzLSoiIG9yZy1yZXBlYXQtcmUpDQoJCQkJb3JnLXJlcGVhdC1yZSkNCgkJCSAg ICAgIChvcmctZW50cnktZW5kLXBvc2l0aW9uKSB0KQ0KCSAgIChtYXRjaC1zdHJpbmctbm8tcHJv cGVydGllcyAxKSkpKSkNCg0KKGRlZnZhciBvcmctbGFzdC1jaGFuZ2VkLXRpbWVzdGFtcCkNCihk ZWZ2YXIgb3JnLWxhc3QtaW5zZXJ0ZWQtdGltZXN0YW1wKQ0KKGRlZnZhciBvcmctbG9nLXBvc3Qt bWVzc2FnZSkNCihkZWZ2YXIgb3JnLWxvZy1ub3RlLXB1cnBvc2UpDQooZGVmdmFyIG9yZy1sb2ct bm90ZS1ob3cpDQooZGVmdmFyIG9yZy1sb2ctbm90ZS1leHRyYSkNCihkZWZ1biBvcmctYXV0by1y ZXBlYXQtbWF5YmUgKGRvbmUtd29yZCkNCiAgIkNoZWNrIGlmIHRoZSBjdXJyZW50IGhlYWRsaW5l IGNvbnRhaW5zIGEgcmVwZWF0ZWQgZGVhZGxpbmUvc2NoZWR1bGUuDQpJZiB5ZXMsIHNldCBUT0RP IHN0YXRlIGJhY2sgdG8gd2hhdCBpdCB3YXMgYW5kIGNoYW5nZSB0aGUgYmFzZSBkYXRlDQpvZiBy ZXBlYXRpbmcgZGVhZGxpbmUvc2NoZWR1bGVkIHRpbWUgc3RhbXBzIHRvIG5ldyBkYXRlLg0KVGhp cyBmdW5jdGlvbiBpcyBydW4gYXV0b21hdGljYWxseSBhZnRlciBlYWNoIHN0YXRlIGNoYW5nZSB0 byBhIERPTkUgc3RhdGUuIg0KICA7OyBsYXN0LXN0YXRlIGlzIGR5bmFtaWNhbGx5IHNjb3BlZCBp bnRvIHRoaXMgZnVuY3Rpb24NCiAgKGxldCogKChyZXBlYXQgKG9yZy1nZXQtcmVwZWF0KSkNCgkg KGFhIChhc3NvYyBvcmctbGFzdC1zdGF0ZSBvcmctdG9kby1rd2QtYWxpc3QpKQ0KCSAoaW50ZXJw cmV0IChudGggMSBhYSkpDQoJIChoZWFkIChudGggMiBhYSkpDQoJICh3aGF0YSAnKCgiaCIgLiBo b3VyKSAoImQiIC4gZGF5KSAoIm0iIC4gbW9udGgpICgieSIgLiB5ZWFyKSkpDQoJIChtc2cgIkVu dHJ5IHJlcGVhdHM6ICIpDQoJIChvcmctbG9nLWRvbmUgbmlsKQ0KCSAob3JnLXRvZG8tbG9nLXN0 YXRlcyBuaWwpDQoJIHJlIHR5cGUgbiB3aGF0IHRzIHRpbWUgdG8tc3RhdGUpDQogICAgKHdoZW4g cmVwZWF0DQogICAgICAoaWYgKGVxIG9yZy1sb2ctcmVwZWF0IHQpIChzZXRxIG9yZy1sb2ctcmVw ZWF0ICdzdGF0ZSkpDQogICAgICAoc2V0cSB0by1zdGF0ZSAob3IgKG9yZy1lbnRyeS1nZXQgbmls ICJSRVBFQVRfVE9fU1RBVEUiKQ0KCQkJIG9yZy10b2RvLXJlcGVhdC10by1zdGF0ZSkpDQogICAg ICAodW5sZXNzIChhbmQgdG8tc3RhdGUgKG1lbWJlciB0by1zdGF0ZSBvcmctdG9kby1rZXl3b3Jk cy0xKSkNCgkoc2V0cSB0by1zdGF0ZSAoaWYgKGVxIGludGVycHJldCAndHlwZSkgb3JnLWxhc3Qt c3RhdGUgaGVhZCkpKQ0KICAgICAgKG9yZy10b2RvIHRvLXN0YXRlKQ0KICAgICAgKHdoZW4gKG9y IG9yZy1sb2ctcmVwZWF0IChvcmctZW50cnktZ2V0IG5pbCAiQ0xPQ0siKSkNCgkob3JnLWVudHJ5 LXB1dCBuaWwgIkxBU1RfUkVQRUFUIiAoZm9ybWF0LXRpbWUtc3RyaW5nDQoJCQkJCSAgKG9yZy10 aW1lLXN0YW1wLWZvcm1hdCB0IHQpKSkpDQogICAgICAod2hlbiBvcmctbG9nLXJlcGVhdA0KCShp ZiAob3IgKG1lbXEgJ29yZy1hZGQtbG9nLW5vdGUgKGRlZmF1bHQtdmFsdWUgJ3Bvc3QtY29tbWFu ZC1ob29rKSkNCgkJKG1lbXEgJ29yZy1hZGQtbG9nLW5vdGUgcG9zdC1jb21tYW5kLWhvb2spKQ0K CSAgICA7OyBPSywgd2UgYXJlIGFscmVhZHkgc2V0dXAgZm9yIHNvbWUgcmVjb3JkDQoJICAgIChp ZiAoZXEgb3JnLWxvZy1yZXBlYXQgJ25vdGUpDQoJCTs7IG1ha2Ugc3VyZSB3ZSB0YWtlIGEgbm90 ZSwgbm90IG9ubHkgYSB0aW1lIHN0YW1wDQoJCShzZXRxIG9yZy1sb2ctbm90ZS1ob3cgJ25vdGUp KQ0KCSAgOzsgU2V0IHVwIGZvciB0YWtpbmcgYSByZWNvcmQNCgkgIChvcmctYWRkLWxvZy1zZXR1 cCAnc3RhdGUgKG9yIGRvbmUtd29yZCAoY2FyIG9yZy1kb25lLWtleXdvcmRzKSkNCgkJCSAgICAg b3JnLWxhc3Qtc3RhdGUNCgkJCSAgICAgJ2ZpbmRwb3Mgb3JnLWxvZy1yZXBlYXQpKSkNCiAgICAg IChvcmctYmFjay10by1oZWFkaW5nIHQpDQogICAgICAob3JnLWFkZC1wbGFubmluZy1pbmZvIG5p bCBuaWwgJ2Nsb3NlZCkNCiAgICAgIChzZXRxIHJlIChjb25jYXQgIlxcKCIgb3JnLXNjaGVkdWxl ZC10aW1lLXJlZ2V4cCAiXFwpXFx8XFwoIg0KCQkgICAgICAgb3JnLWRlYWRsaW5lLXRpbWUtcmVn ZXhwICJcXClcXHxcXCgiDQoJCSAgICAgICBvcmctdHMtcmVnZXhwICJcXCkiKSkNCiAgICAgICh3 aGlsZSAocmUtc2VhcmNoLWZvcndhcmQNCgkgICAgICByZSAoc2F2ZS1leGN1cnNpb24gKG91dGxp bmUtbmV4dC1oZWFkaW5nKSAocG9pbnQpKSB0KQ0KCShzZXRxIHR5cGUgKGlmIChtYXRjaC1lbmQg MSkgb3JnLXNjaGVkdWxlZC1zdHJpbmcNCgkJICAgICAoaWYgKG1hdGNoLWVuZCAzKSBvcmctZGVh ZGxpbmUtc3RyaW5nICJQbGFpbjoiKSkNCgkgICAgICB0cyAobWF0Y2gtc3RyaW5nIChpZiAobWF0 Y2gtZW5kIDIpIDIgKGlmIChtYXRjaC1lbmQgNCkgNCAwKSkpKQ0KCSh3aGVuIChzdHJpbmctbWF0 Y2ggIlxcKFsuK11cXCk/XFwoXFwrWzAtOV0rXFwpXFwoW2hkd215XVxcKSIgdHMpDQoJICAoc2V0 cQluIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMiB0cykpDQoJCXdoYXQgKG1hdGNo LXN0cmluZyAzIHRzKSkNCgkgIChpZiAoZXF1YWwgd2hhdCAidyIpIChzZXRxIG4gKCogbiA3KSB3 aGF0ICJkIikpDQoJICAoaWYgKGFuZCAoZXF1YWwgd2hhdCAiaCIpIChub3QgKHN0cmluZy1tYXRj aCAiWzAtOV1cXHsxLDJcXH06WzAtOV1cXHsyXFx9IiB0cykpKQ0KCSAgICAgICh1c2VyLWVycm9y ICJDYW5ub3QgcmVwZWF0IGluIFJlcGVhdCBpbiAlZCBob3VyKHMpIGJlY2F1c2Ugbm8gaG91ciBo YXMgYmVlbiBzZXQiIG4pKQ0KCSAgOzsgUHJlcGFyYXRpb24sIHNlZSBpZiB3ZSBuZWVkIHRvIG1v ZGlmeSB0aGUgc3RhcnQgZGF0ZSBmb3IgdGhlIGNoYW5nZQ0KCSAgKHdoZW4gKG1hdGNoLWVuZCAx KQ0KCSAgICAoc2V0cSB0aW1lIChzYXZlLW1hdGNoLWRhdGEgKG9yZy10aW1lLXN0cmluZy10by10 aW1lIHRzKSkpDQoJICAgIChjb25kDQoJICAgICAoKGVxdWFsIChtYXRjaC1zdHJpbmcgMSB0cykg Ii4iKQ0KCSAgICAgIDs7IFNoaWZ0IHN0YXJ0aW5nIGRhdGUgdG8gdG9kYXkNCgkgICAgICAob3Jn LXRpbWVzdGFtcC1jaGFuZ2UNCgkgICAgICAgKC0gKG9yZy10b2RheSkgKHRpbWUtdG8tZGF5cyB0 aW1lKSkNCgkgICAgICAgJ2RheSkpDQoJICAgICAoKGVxdWFsIChtYXRjaC1zdHJpbmcgMSB0cykg IisiKQ0KCSAgICAgIChsZXQgKChuc2hpZnRtYXggMTApIChuc2hpZnQgMCkpDQoJCSh3aGlsZSAo b3IgKD0gbnNoaWZ0IDApDQoJCQkgICAoPD0gKHRpbWUtdG8tZGF5cyB0aW1lKQ0KCQkJICAgICAg ICh0aW1lLXRvLWRheXMgKGN1cnJlbnQtdGltZSkpKSkNCgkJICAod2hlbiAoPSAoaW5jZiBuc2hp ZnQpIG5zaGlmdG1heCkNCgkJICAgIChvciAoeS1vci1uLXAgKG1lc3NhZ2UgIiVkIHJlcGVhdGVy IGludGVydmFscyB3ZXJlIG5vdCBlbm91Z2ggdG8gc2hpZnQgZGF0ZSBwYXN0IHRvZGF5LiAgQ29u dGludWU/ICIgbnNoaWZ0KSkNCgkJCShlcnJvciAiQWJvcnQiKSkpDQoJCSAgKG9yZy10aW1lc3Rh bXAtY2hhbmdlIG4gKGNkciAoYXNzb2Mgd2hhdCB3aGF0YSkpKQ0KCQkgIChvcmctYXQtdGltZXN0 YW1wLXAgdCkNCgkJICAoc2V0cSB0cyAobWF0Y2gtc3RyaW5nIDEpKQ0KCQkgIChzZXRxIHRpbWUg KHNhdmUtbWF0Y2gtZGF0YSAob3JnLXRpbWUtc3RyaW5nLXRvLXRpbWUgdHMpKSkpKQ0KCSAgICAg IChvcmctdGltZXN0YW1wLWNoYW5nZSAoLSBuKSAoY2RyIChhc3NvYyB3aGF0IHdoYXRhKSkpDQoJ ICAgICAgOzsgcmVtYXRjaCwgc28gdGhhdCB3ZSBoYXZlIGV2ZXJ5dGhpbmcgaW4gcGxhY2UgZm9y IHRoZSByZWFsIHNoaWZ0DQoJICAgICAgKG9yZy1hdC10aW1lc3RhbXAtcCB0KQ0KCSAgICAgIChz ZXRxIHRzIChtYXRjaC1zdHJpbmcgMSkpDQoJICAgICAgKHN0cmluZy1tYXRjaCAiXFwoWy4rXVxc KT9cXChcXCtbMC05XStcXClcXChbaGR3bXldXFwpIiB0cykpKSkNCgkgIChzYXZlLWV4Y3Vyc2lv biAob3JnLXRpbWVzdGFtcC1jaGFuZ2UgbiAoY2RyIChhc3NvYyB3aGF0IHdoYXRhKSkgbmlsIHQp KQ0KCSAgKHNldHEgbXNnIChjb25jYXQgbXNnIHR5cGUgIiAiIG9yZy1sYXN0LWNoYW5nZWQtdGlt ZXN0YW1wICIgIikpKSkNCiAgICAgIChzZXRxIG9yZy1sb2ctcG9zdC1tZXNzYWdlIG1zZykNCiAg ICAgIChtZXNzYWdlICIlcyIgbXNnKSkpKQ0KDQooZGVmdW4gb3JnLXNob3ctdG9kby10cmVlIChh cmcpDQogICJNYWtlIGEgY29tcGFjdCB0cmVlIHdoaWNoIHNob3dzIGFsbCBoZWFkbGluZXMgbWFy a2VkIHdpdGggVE9ETy4NClRoZSB0cmVlIHdpbGwgc2hvdyB0aGUgbGluZXMgd2hlcmUgdGhlIHJl Z2V4cCBtYXRjaGVzLCBhbmQgYWxsIGhpZ2hlcg0KaGVhZGxpbmVzIGFib3ZlIHRoZSBtYXRjaC4N CldpdGggYSBcXFt1bml2ZXJzYWwtYXJndW1lbnRdIHByZWZpeCwgcHJvbXB0IGZvciBhIHJlZ2V4 cCB0byBtYXRjaC4NCldpdGggYSBudW1lcmljIHByZWZpeCBOLCBjb25zdHJ1Y3QgYSBzcGFyc2Ug dHJlZSBmb3IgdGhlIE50aCBlbGVtZW50DQpvZiBgb3JnLXRvZG8ta2V5d29yZHMtMScuIg0KICAo aW50ZXJhY3RpdmUgIlAiKQ0KICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCBuaWwpDQoJKGt3ZC1y ZQ0KCSAoY29uZCAoKG51bGwgYXJnKSBvcmctbm90LWRvbmUtcmVnZXhwKQ0KCSAgICAgICAoKGVx dWFsIGFyZyAnKDQpKQ0KCQkobGV0ICgoa3dkIChvcmctaWNvbXBsZXRpbmctcmVhZCAiS2V5d29y ZCAob3IgS1dEMXxLV0QyfC4uLik6ICINCgkJCQkJCSAobWFwY2FyICdsaXN0IG9yZy10b2RvLWtl eXdvcmRzLTEpKSkpDQoJCSAgKGNvbmNhdCAiXFwoIg0KCQkJICAobWFwY29uY2F0ICdpZGVudGl0 eSAob3JnLXNwbGl0LXN0cmluZyBrd2QgInwiKSAiXFx8IikNCgkJCSAgIlxcKVxcPiIpKSkNCgkg ICAgICAgKCg8PSAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSAobGVuZ3RoIG9yZy10b2RvLWtl eXdvcmRzLTEpKQ0KCQkocmVnZXhwLXF1b3RlIChudGggKDEtIChwcmVmaXgtbnVtZXJpYy12YWx1 ZSBhcmcpKQ0KCQkJCSAgIG9yZy10b2RvLWtleXdvcmRzLTEpKSkNCgkgICAgICAgKHQgKHVzZXIt ZXJyb3IgIkludmFsaWQgcHJlZml4IGFyZ3VtZW50OiAlcyIgYXJnKSkpKSkNCiAgICAobWVzc2Fn ZSAiJWQgVE9ETyBlbnRyaWVzIGZvdW5kIg0KCSAgICAgKG9yZy1vY2N1ciAoY29uY2F0ICJeIiBv cmctb3V0bGluZS1yZWdleHAgIiAqIiBrd2QtcmUgKSkpKSkNCg0KKGRlZnVuIG9yZy1kZWFkbGlu ZSAoYXJnICZvcHRpb25hbCB0aW1lKQ0KICAiSW5zZXJ0IHRoZSBcIkRFQURMSU5FOlwiIHN0cmlu ZyB3aXRoIGEgdGltZXN0YW1wIHRvIG1ha2UgYSBkZWFkbGluZS4NCldpdGggb25lIHVuaXZlcnNh bCBwcmVmaXggYXJndW1lbnQsIHJlbW92ZSBhbnkgZGVhZGxpbmUgZnJvbSB0aGUgaXRlbS4NCldp dGggdHdvIHVuaXZlcnNhbCBwcmVmaXggYXJndW1lbnRzLCBwcm9tcHQgZm9yIGEgd2FybmluZyBk ZWxheS4NCldpdGggYXJndW1lbnQgVElNRSwgc2V0IHRoZSBkZWFkbGluZSBhdCB0aGUgY29ycmVz cG9uZGluZyBkYXRlLiAgVElNRQ0KY2FuIGVpdGhlciBiZSBhbiBPcmcgZGF0ZSBsaWtlIFwiMjAx MS0wNy0yNFwiIG9yIGEgZGVsdGEgbGlrZSBcIisyZFwiLiINCiAgKGludGVyYWN0aXZlICJQIikN CiAgKGlmIChhbmQgKG9yZy1yZWdpb24tYWN0aXZlLXApIG9yZy1sb29wLW92ZXItaGVhZGxpbmVz LWluLWFjdGl2ZS1yZWdpb24pDQogICAgICAobGV0ICgoY2wgKGlmIChlcSBvcmctbG9vcC1vdmVy LWhlYWRsaW5lcy1pbi1hY3RpdmUtcmVnaW9uICdzdGFydC1sZXZlbCkNCgkJICAgICdyZWdpb24t c3RhcnQtbGV2ZWwgJ3JlZ2lvbikpDQoJICAgIG9yZy1sb29wLW92ZXItaGVhZGxpbmVzLWluLWFj dGl2ZS1yZWdpb24pDQoJKG9yZy1tYXAtZW50cmllcw0KCSBgKG9yZy1kZWFkbGluZSAnLGFyZyAs dGltZSkNCgkgb3JnLWxvb3Atb3Zlci1oZWFkbGluZXMtaW4tYWN0aXZlLXJlZ2lvbg0KCSBjbCAo aWYgKG91dGxpbmUtaW52aXNpYmxlLXApIChvcmctZW5kLW9mLXN1YnRyZWUgbmlsIHQpKSkpDQog ICAgKGxldCogKChvbGQtZGF0ZSAob3JnLWVudHJ5LWdldCBuaWwgIkRFQURMSU5FIikpDQoJICAg KG9sZC1kYXRlLXRpbWUgKGlmIG9sZC1kYXRlIChvcmctdGltZS1zdHJpbmctdG8tdGltZSBvbGQt ZGF0ZSkpKQ0KCSAgIChyZXBlYXRlciAoYW5kIG9sZC1kYXRlDQoJCQkgIChzdHJpbmctbWF0Y2gN CgkJCSAgICJcXChbListXStbMC05XStbaGR3bXldXFwoPzpbLyBdWy0rXT9bMC05XStbaGR3bXld XFwpP1xcKSA/Ig0KCQkJICAgb2xkLWRhdGUpDQoJCQkgIChtYXRjaC1zdHJpbmcgMSBvbGQtZGF0 ZSkpKSkNCiAgICAgIChjb25kDQogICAgICAgKChlcXVhbCBhcmcgJyg0KSkNCgkod2hlbiAoYW5k IG9sZC1kYXRlIG9yZy1sb2ctcmVkZWFkbGluZSkNCgkgIChvcmctYWRkLWxvZy1zZXR1cCAnZGVs ZGVhZGxpbmUgbmlsIG9sZC1kYXRlICdmaW5kcG9zDQoJCQkgICAgIG9yZy1sb2ctcmVkZWFkbGlu ZSkpDQoJKG9yZy1yZW1vdmUtdGltZXN0YW1wLXdpdGgta2V5d29yZCBvcmctZGVhZGxpbmUtc3Ry aW5nKQ0KCShtZXNzYWdlICJJdGVtIG5vIGxvbmdlciBoYXMgYSBkZWFkbGluZS4iKSkNCiAgICAg ICAoKGVxdWFsIGFyZyAnKDE2KSkNCgkoc2F2ZS1leGN1cnNpb24NCgkgIChvcmctYmFjay10by1o ZWFkaW5nIHQpDQoJICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkDQoJICAgICAgIG9yZy1kZWFkbGlu ZS10aW1lLXJlZ2V4cA0KCSAgICAgICAoc2F2ZS1leGN1cnNpb24gKG91dGxpbmUtbmV4dC1oZWFk aW5nKSAocG9pbnQpKSB0KQ0KCSAgICAgIChsZXQqICgocnBsMCAobWF0Y2gtc3RyaW5nIDEpKQ0K CQkgICAgIChycGwgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiIC1bMC05XStbaGR3bXldIiAi IiBycGwwKSkpDQoJCShyZXBsYWNlLW1hdGNoDQoJCSAoY29uY2F0IG9yZy1kZWFkbGluZS1zdHJp bmcNCgkJCSAiIDwiIHJwbA0KCQkJIChmb3JtYXQgIiAtJWRkIg0KCQkJCSAoYWJzDQoJCQkJICAo LSAodGltZS10by1kYXlzDQoJCQkJICAgICAgKHNhdmUtbWF0Y2gtZGF0YQ0KCQkJCQkob3JnLXJl YWQtZGF0ZSBuaWwgdCBuaWwgIldhcm4gc3RhcnRpbmcgZnJvbSIgb2xkLWRhdGUtdGltZSkpKQ0K CQkJCSAgICAgKHRpbWUtdG8tZGF5cyBvbGQtZGF0ZS10aW1lKSkpKQ0KCQkJICI+IikgdCB0KSkN CgkgICAgKHVzZXItZXJyb3IgIk5vIGRlYWRsaW5lIGluZm9ybWF0aW9uIHRvIHVwZGF0ZSIpKSkp DQogICAgICAgKHQNCgkob3JnLWFkZC1wbGFubmluZy1pbmZvICdkZWFkbGluZSB0aW1lICdjbG9z ZWQpDQoJKHdoZW4gKGFuZCBvbGQtZGF0ZSBvcmctbG9nLXJlZGVhZGxpbmUNCgkJICAgKG5vdCAo ZXF1YWwgb2xkLWRhdGUNCgkJCSAgICAgICAoc3Vic3RyaW5nIG9yZy1sYXN0LWluc2VydGVkLXRp bWVzdGFtcCAxIC0xKSkpKQ0KCSAgKG9yZy1hZGQtbG9nLXNldHVwICdyZWRlYWRsaW5lIG5pbCBv bGQtZGF0ZSAnZmluZHBvcw0KCQkJICAgICBvcmctbG9nLXJlZGVhZGxpbmUpKQ0KCSh3aGVuIHJl cGVhdGVyDQoJICAoc2F2ZS1leGN1cnNpb24NCgkgICAgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkN CgkgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkIChjb25jYXQgb3JnLWRlYWRsaW5lLXN0cmlu ZyAiICINCgkJCQkJICAgICBvcmctbGFzdC1pbnNlcnRlZC10aW1lc3RhbXApDQoJCQkJICAgICAo c2F2ZS1leGN1cnNpb24NCgkJCQkgICAgICAgKG91dGxpbmUtbmV4dC1oZWFkaW5nKSAocG9pbnQp KSB0KQ0KCSAgICAgIChnb3RvLWNoYXIgKDEtIChtYXRjaC1lbmQgMCkpKQ0KCSAgICAgIChpbnNl cnQgIiAiIHJlcGVhdGVyKQ0KCSAgICAgIChzZXRxIG9yZy1sYXN0LWluc2VydGVkLXRpbWVzdGFt cA0KCQkgICAgKGNvbmNhdCAoc3Vic3RyaW5nIG9yZy1sYXN0LWluc2VydGVkLXRpbWVzdGFtcCAw IC0xKQ0KCQkJICAgICIgIiByZXBlYXRlcg0KCQkJICAgIChzdWJzdHJpbmcgb3JnLWxhc3QtaW5z ZXJ0ZWQtdGltZXN0YW1wIC0xKSkpKSkpDQoJKG1lc3NhZ2UgIkRlYWRsaW5lIG9uICVzIiBvcmct bGFzdC1pbnNlcnRlZC10aW1lc3RhbXApKSkpKSkNCg0KKGRlZnVuIG9yZy1zY2hlZHVsZSAoYXJn ICZvcHRpb25hbCB0aW1lKQ0KICAiSW5zZXJ0IHRoZSBTQ0hFRFVMRUQ6IHN0cmluZyB3aXRoIGEg dGltZXN0YW1wIHRvIHNjaGVkdWxlIGEgVE9ETyBpdGVtLg0KV2l0aCBvbmUgdW5pdmVyc2FsIHBy ZWZpeCBhcmd1bWVudCwgcmVtb3ZlIGFueSBzY2hlZHVsaW5nIGRhdGUgZnJvbSB0aGUgaXRlbS4N CldpdGggdHdvIHVuaXZlcnNhbCBwcmVmaXggYXJndW1lbnRzLCBwcm9tcHQgZm9yIGEgZGVsYXkg Y29va2llLg0KV2l0aCBhcmd1bWVudCBUSU1FLCBzY2hlZHVsZWQgYXQgdGhlIGNvcnJlc3BvbmRp bmcgZGF0ZS4gIFRJTUUgY2FuDQplaXRoZXIgYmUgYW4gT3JnIGRhdGUgbGlrZSBcIjIwMTEtMDct MjRcIiBvciBhIGRlbHRhIGxpa2UgXCIrMmRcIi4iDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChp ZiAoYW5kIChvcmctcmVnaW9uLWFjdGl2ZS1wKSBvcmctbG9vcC1vdmVyLWhlYWRsaW5lcy1pbi1h Y3RpdmUtcmVnaW9uKQ0KICAgICAgKGxldCAoKGNsIChpZiAoZXEgb3JnLWxvb3Atb3Zlci1oZWFk bGluZXMtaW4tYWN0aXZlLXJlZ2lvbiAnc3RhcnQtbGV2ZWwpDQoJCSAgICAncmVnaW9uLXN0YXJ0 LWxldmVsICdyZWdpb24pKQ0KCSAgICBvcmctbG9vcC1vdmVyLWhlYWRsaW5lcy1pbi1hY3RpdmUt cmVnaW9uKQ0KCShvcmctbWFwLWVudHJpZXMNCgkgYChvcmctc2NoZWR1bGUgJyxhcmcgLHRpbWUp DQoJIG9yZy1sb29wLW92ZXItaGVhZGxpbmVzLWluLWFjdGl2ZS1yZWdpb24NCgkgY2wgKGlmIChv dXRsaW5lLWludmlzaWJsZS1wKSAob3JnLWVuZC1vZi1zdWJ0cmVlIG5pbCB0KSkpKQ0KICAgIChs ZXQqICgob2xkLWRhdGUgKG9yZy1lbnRyeS1nZXQgbmlsICJTQ0hFRFVMRUQiKSkNCgkgICAob2xk LWRhdGUtdGltZSAoaWYgb2xkLWRhdGUgKG9yZy10aW1lLXN0cmluZy10by10aW1lIG9sZC1kYXRl KSkpDQoJICAgKHJlcGVhdGVyIChhbmQgb2xkLWRhdGUNCgkJCSAgKHN0cmluZy1tYXRjaA0KCQkJ ICAgIlxcKFsuKy1dK1swLTldK1toZHdteV1cXCg/OlsvIF1bLStdP1swLTldK1toZHdteV1cXCk/ XFwpID8iDQoJCQkgICBvbGQtZGF0ZSkNCgkJCSAgKG1hdGNoLXN0cmluZyAxIG9sZC1kYXRlKSkp KQ0KICAgICAgKGNvbmQNCiAgICAgICAoKGVxdWFsIGFyZyAnKDQpKQ0KCShwcm9nbg0KCSAgKHdo ZW4gKGFuZCBvbGQtZGF0ZSBvcmctbG9nLXJlc2NoZWR1bGUpDQoJICAgIChvcmctYWRkLWxvZy1z ZXR1cCAnZGVsc2NoZWR1bGUgbmlsIG9sZC1kYXRlICdmaW5kcG9zDQoJCQkgICAgICAgb3JnLWxv Zy1yZXNjaGVkdWxlKSkNCgkgIChvcmctcmVtb3ZlLXRpbWVzdGFtcC13aXRoLWtleXdvcmQgb3Jn LXNjaGVkdWxlZC1zdHJpbmcpDQoJICAobWVzc2FnZSAiSXRlbSBpcyBubyBsb25nZXIgc2NoZWR1 bGVkLiIpKSkNCiAgICAgICAoKGVxdWFsIGFyZyAnKDE2KSkNCgkoc2F2ZS1leGN1cnNpb24NCgkg IChvcmctYmFjay10by1oZWFkaW5nIHQpDQoJICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkDQoJICAg ICAgIG9yZy1zY2hlZHVsZWQtdGltZS1yZWdleHANCgkgICAgICAgKHNhdmUtZXhjdXJzaW9uIChv dXRsaW5lLW5leHQtaGVhZGluZykgKHBvaW50KSkgdCkNCgkgICAgICAobGV0KiAoKHJwbDAgKG1h dGNoLXN0cmluZyAxKSkNCgkJICAgICAocnBsIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcgIiAt WzAtOV0rW2hkd215XSIgIiIgcnBsMCkpKQ0KCQkocmVwbGFjZS1tYXRjaA0KCQkgKGNvbmNhdCBv cmctc2NoZWR1bGVkLXN0cmluZw0KCQkJICIgPCIgcnBsDQoJCQkgKGZvcm1hdCAiIC0lZGQiDQoJ CQkJIChhYnMNCgkJCQkgICgtICh0aW1lLXRvLWRheXMNCgkJCQkgICAgICAoc2F2ZS1tYXRjaC1k YXRhDQoJCQkJCShvcmctcmVhZC1kYXRlIG5pbCB0IG5pbCAiRGVsYXkgdW50aWwiIG9sZC1kYXRl LXRpbWUpKSkNCgkJCQkgICAgICh0aW1lLXRvLWRheXMgb2xkLWRhdGUtdGltZSkpKSkNCgkJCSAi PiIpIHQgdCkpDQoJICAgICh1c2VyLWVycm9yICJObyBzY2hlZHVsZWQgaW5mb3JtYXRpb24gdG8g dXBkYXRlIikpKSkNCiAgICAgICAodA0KCShvcmctYWRkLXBsYW5uaW5nLWluZm8gJ3NjaGVkdWxl ZCB0aW1lICdjbG9zZWQpDQoJKHdoZW4gKGFuZCBvbGQtZGF0ZSBvcmctbG9nLXJlc2NoZWR1bGUN CgkJICAgKG5vdCAoZXF1YWwgb2xkLWRhdGUNCgkJCSAgICAgICAoc3Vic3RyaW5nIG9yZy1sYXN0 LWluc2VydGVkLXRpbWVzdGFtcCAxIC0xKSkpKQ0KCSAgKG9yZy1hZGQtbG9nLXNldHVwICdyZXNj aGVkdWxlIG5pbCBvbGQtZGF0ZSAnZmluZHBvcw0KCQkJICAgICBvcmctbG9nLXJlc2NoZWR1bGUp KQ0KCSh3aGVuIHJlcGVhdGVyDQoJICAoc2F2ZS1leGN1cnNpb24NCgkgICAgKG9yZy1iYWNrLXRv LWhlYWRpbmcgdCkNCgkgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkIChjb25jYXQgb3JnLXNj aGVkdWxlZC1zdHJpbmcgIiAiDQoJCQkJCSAgICAgb3JnLWxhc3QtaW5zZXJ0ZWQtdGltZXN0YW1w KQ0KCQkJCSAgICAgKHNhdmUtZXhjdXJzaW9uDQoJCQkJICAgICAgIChvdXRsaW5lLW5leHQtaGVh ZGluZykgKHBvaW50KSkgdCkNCgkgICAgICAoZ290by1jaGFyICgxLSAobWF0Y2gtZW5kIDApKSkN CgkgICAgICAoaW5zZXJ0ICIgIiByZXBlYXRlcikNCgkgICAgICAoc2V0cSBvcmctbGFzdC1pbnNl cnRlZC10aW1lc3RhbXANCgkJICAgIChjb25jYXQgKHN1YnN0cmluZyBvcmctbGFzdC1pbnNlcnRl ZC10aW1lc3RhbXAgMCAtMSkNCgkJCSAgICAiICIgcmVwZWF0ZXINCgkJCSAgICAoc3Vic3RyaW5n IG9yZy1sYXN0LWluc2VydGVkLXRpbWVzdGFtcCAtMSkpKSkpKQ0KCShtZXNzYWdlICJTY2hlZHVs ZWQgdG8gJXMiIG9yZy1sYXN0LWluc2VydGVkLXRpbWVzdGFtcCkpKSkpKQ0KDQooZGVmdW4gb3Jn LWdldC1zY2hlZHVsZWQtdGltZSAocG9tICZvcHRpb25hbCBpbmhlcml0KQ0KICAiR2V0IHRoZSBz Y2hlZHVsZWQgdGltZSBhcyBhIHRpbWUgdHVwbGUsIG9mIGEgZm9ybWF0IHN1aXRhYmxlDQpmb3Ig Y2FsbGluZyBvcmctc2NoZWR1bGUgd2l0aCwgb3IgaWYgdGhlcmUgaXMgbm8gc2NoZWR1bGluZywN CnJldHVybnMgbmlsLiINCiAgKGxldCAoKHRpbWUgKG9yZy1lbnRyeS1nZXQgcG9tICJTQ0hFRFVM RUQiIGluaGVyaXQpKSkNCiAgICAod2hlbiB0aW1lDQogICAgICAoYXBwbHkgJ2VuY29kZS10aW1l IChvcmctcGFyc2UtdGltZS1zdHJpbmcgdGltZSkpKSkpDQoNCihkZWZ1biBvcmctZ2V0LWRlYWRs aW5lLXRpbWUgKHBvbSAmb3B0aW9uYWwgaW5oZXJpdCkNCiAgIkdldCB0aGUgZGVhZGxpbmUgYXMg YSB0aW1lIHR1cGxlLCBvZiBhIGZvcm1hdCBzdWl0YWJsZSBmb3INCmNhbGxpbmcgb3JnLWRlYWRs aW5lIHdpdGgsIG9yIGlmIHRoZXJlIGlzIG5vIHNjaGVkdWxpbmcsIHJldHVybnMNCm5pbC4iDQog IChsZXQgKCh0aW1lIChvcmctZW50cnktZ2V0IHBvbSAiREVBRExJTkUiIGluaGVyaXQpKSkNCiAg ICAod2hlbiB0aW1lDQogICAgICAoYXBwbHkgJ2VuY29kZS10aW1lIChvcmctcGFyc2UtdGltZS1z dHJpbmcgdGltZSkpKSkpDQoNCihkZWZ1biBvcmctcmVtb3ZlLXRpbWVzdGFtcC13aXRoLWtleXdv cmQgKGtleXdvcmQpDQogICJSZW1vdmUgYWxsIHRpbWUgc3RhbXBzIHdpdGggS0VZV09SRCBpbiB0 aGUgY3VycmVudCBlbnRyeS4iDQogIChsZXQgKChyZSAoY29uY2F0ICJcXDwiIChyZWdleHAtcXVv dGUga2V5d29yZCkgIiArPFtePlxuXSs+WyBcdF0qIikpDQoJYmVnKQ0KICAgIChzYXZlLWV4Y3Vy c2lvbg0KICAgICAgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkNCiAgICAgIChzZXRxIGJlZyAocG9p bnQpKQ0KICAgICAgKG91dGxpbmUtbmV4dC1oZWFkaW5nKQ0KICAgICAgKHdoaWxlIChyZS1zZWFy Y2gtYmFja3dhcmQgcmUgYmVnIHQpDQoJKHJlcGxhY2UtbWF0Y2ggIiIpDQoJKGlmIChhbmQgKHN0 cmluZy1tYXRjaCAiXFxTLSIgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LWF0LWJvbCkgKHBvaW50 KSkpDQoJCSAoZXF1YWwgKGNoYXItYmVmb3JlKSA/XCApKQ0KCSAgICAoYmFja3dhcmQtZGVsZXRl LWNoYXIgMSkNCgkgIChpZiAoc3RyaW5nLW1hdGNoICJeWyBcdF0qJCIgKGJ1ZmZlci1zdWJzdHJp bmcNCgkJCQkJKHBvaW50LWF0LWJvbCkgKHBvaW50LWF0LWVvbCkpKQ0KCSAgICAgIChkZWxldGUt cmVnaW9uIChwb2ludC1hdC1ib2wpDQoJCQkgICAgIChtaW4gKHBvaW50LW1heCkgKDErIChwb2lu dC1hdC1lb2wpKSkpKSkpKSkpDQoNCihkZWZ2YXIgb3JnLXRpbWUtd2FzLWdpdmVuKSA7IGR5bmFt aWNhbGx5IHNjb3BlZCBwYXJhbWV0ZXINCihkZWZ2YXIgb3JnLWVuZC10aW1lLXdhcy1naXZlbikg OyBkeW5hbWljYWxseSBzY29wZWQgcGFyYW1ldGVyDQoNCihkZWZ1biBvcmctYWRkLXBsYW5uaW5n LWluZm8gKHdoYXQgJm9wdGlvbmFsIHRpbWUgJnJlc3QgcmVtb3ZlKQ0KICAiSW5zZXJ0IG5ldyB0 aW1lc3RhbXAgd2l0aCBrZXl3b3JkIGluIHRoZSBsaW5lIGRpcmVjdGx5IGFmdGVyIHRoZSBoZWFk bGluZS4NCldIQVQgaW5kaWNhdGVzIHdoYXQga2luZCBvZiB0aW1lIHN0YW1wIHRvIGFkZC4gIFRJ TUUgaW5kaWNhdGVzIHRoZSB0aW1lIHRvIHVzZS4NCklmIG5vbiBpcyBnaXZlbiwgdGhlIHVzZXIg aXMgcHJvbXB0ZWQgZm9yIGEgZGF0ZS4NClJFTU9WRSBpbmRpY2F0ZXMgd2hhdCBraW5kIG9mIGVu dHJpZXMgdG8gcmVtb3ZlLiAgQW4gb2xkIFdIQVQgZW50cnkgd2lsbCBhbHNvDQpiZSByZW1vdmVk LiINCiAgKGludGVyYWN0aXZlKQ0KICAobGV0IChvcmctdGltZS13YXMtZ2l2ZW4gb3JnLWVuZC10 aW1lLXdhcy1naXZlbiB0cw0KCQkJICAgZW5kIGRlZmF1bHQtdGltZSBkZWZhdWx0LWlucHV0KQ0K DQogICAgKGNhdGNoICdleGl0DQogICAgICAod2hlbiAoYW5kIChtZW1xIHdoYXQgJyhzY2hlZHVs ZWQgZGVhZGxpbmUpKQ0KCQkgKG9yIChub3QgdGltZSkNCgkJICAgICAoYW5kIChzdHJpbmdwIHRp bWUpDQoJCQkgIChzdHJpbmctbWF0Y2ggIl5bLStdK1swLTldIiB0aW1lKSkpKQ0KCTs7IFRyeSB0 byBnZXQgYSBkZWZhdWx0IGRhdGUvdGltZSBmcm9tIGV4aXN0aW5nIHRpbWVzdGFtcA0KCShzYXZl LWV4Y3Vyc2lvbg0KCSAgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkNCgkgIChzZXRxIGVuZCAoc2F2 ZS1leGN1cnNpb24gKG91dGxpbmUtbmV4dC1oZWFkaW5nKSAocG9pbnQpKSkNCgkgICh3aGVuIChy ZS1zZWFyY2gtZm9yd2FyZCAoaWYgKGVxIHdoYXQgJ3NjaGVkdWxlZCkNCgkJCQkgICAgICAgb3Jn LXNjaGVkdWxlZC10aW1lLXJlZ2V4cA0KCQkJCSAgICAgb3JnLWRlYWRsaW5lLXRpbWUtcmVnZXhw KQ0KCQkJCSAgIGVuZCB0KQ0KCSAgICAoc2V0cSB0cyAobWF0Y2gtc3RyaW5nIDEpDQoJCSAgZGVm YXVsdC10aW1lDQoJCSAgKGFwcGx5ICdlbmNvZGUtdGltZSAob3JnLXBhcnNlLXRpbWUtc3RyaW5n IHRzKSkNCgkJICBkZWZhdWx0LWlucHV0IChhbmQgdHMgKG9yZy1nZXQtY29tcGFjdC10b2QgdHMp KSkpKSkNCiAgICAgICh3aGVuIHdoYXQNCgkoc2V0cSB0aW1lDQoJICAgICAgKGlmIChzdHJpbmdw IHRpbWUpDQoJCSAgOzsgVGhpcyBpcyBhIHN0cmluZyAocmVsYXRpdmUgb3IgYWJzb2x1dGUpLCBz ZXQgcHJvcGVyIGRhdGUNCgkJICAoYXBwbHkgJ2VuY29kZS10aW1lDQoJCQkgKG9yZy1yZWFkLWRh dGUtYW5hbHl6ZQ0KCQkJICB0aW1lIGRlZmF1bHQtdGltZSAoZGVjb2RlLXRpbWUgZGVmYXVsdC10 aW1lKSkpDQoJCTs7IElmIG5lY2Vzc2FyeSwgZ2V0IHRoZSB0aW1lIGZyb20gdGhlIHVzZXINCgkJ KG9yIHRpbWUgKG9yZy1yZWFkLWRhdGUgbmlsICd0by10aW1lIG5pbCBuaWwNCgkJCQkJZGVmYXVs dC10aW1lIGRlZmF1bHQtaW5wdXQpKSkpKQ0KDQogICAgICAod2hlbiAoYW5kIG9yZy1pbnNlcnQt bGFiZWxlZC10aW1lc3RhbXBzLWF0LXBvaW50DQoJCSAobWVtYmVyIHdoYXQgJyhzY2hlZHVsZWQg ZGVhZGxpbmUpKSkNCgkoaW5zZXJ0DQoJIChpZiAoZXEgd2hhdCAnc2NoZWR1bGVkKSBvcmctc2No ZWR1bGVkLXN0cmluZyBvcmctZGVhZGxpbmUtc3RyaW5nKSAiICIpDQoJKG9yZy1pbnNlcnQtdGlt ZS1zdGFtcCB0aW1lIG9yZy10aW1lLXdhcy1naXZlbg0KCQkJICAgICAgIG5pbCBuaWwgbmlsIChs aXN0IG9yZy1lbmQtdGltZS13YXMtZ2l2ZW4pKQ0KCShzZXRxIHdoYXQgbmlsKSkNCiAgICAgIChz YXZlLWV4Y3Vyc2lvbg0KCShzYXZlLXJlc3RyaWN0aW9uDQoJICAobGV0IChjb2wgbGlzdCBlbHQg dHMgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjKQ0KCSAgICAob3JnLWJhY2stdG8taGVhZGluZyB0 KQ0KCSAgICAobG9va2luZy1hdCAoY29uY2F0IG9yZy1vdXRsaW5lLXJlZ2V4cCAiXFwoICpcXClb XlxyXG5dKiIpKQ0KCSAgICAoZ290by1jaGFyIChtYXRjaC1lbmQgMSkpDQoJICAgIChzZXRxIGNv bCAoY3VycmVudC1jb2x1bW4pKQ0KCSAgICAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpDQoJICAg IChpZiAoZW9icCkgKGluc2VydCAiXG4iKSAoZm9yd2FyZC1jaGFyIDEpKQ0KCSAgICAod2hlbiAo YW5kIChub3Qgd2hhdCkNCgkJICAgICAgIChub3QgKGxvb2tpbmctYXQNCgkJCSAgICAgKGNvbmNh dCAiWyBcdF0qIg0KCQkJCSAgICAgb3JnLWtleXdvcmQtdGltZS1ub3QtY2xvY2stcmVnZXhwKSkp KQ0KCSAgICAgIDs7IE5vdGhpbmcgdG8gYWRkLCBub3RoaW5nIHRvIHJlbW92ZS4uLi4uLiA6LSkN CgkgICAgICAodGhyb3cgJ2V4aXQgbmlsKSkNCgkgICAgKGlmIChhbmQgKG5vdCAobG9va2luZy1h dCBvcmctb3V0bGluZS1yZWdleHApKQ0KCQkgICAgIChsb29raW5nLWF0IChjb25jYXQgIlteXHJc bl0qPyIgb3JnLWtleXdvcmQtdGltZS1yZWdleHANCgkJCQkJICJbXlxyXG5dKiIpKQ0KCQkgICAg IChub3QgKGVxdWFsIChtYXRjaC1zdHJpbmcgMSkgb3JnLWNsb2NrLXN0cmluZykpKQ0KCQkobmFy cm93LXRvLXJlZ2lvbiAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkpDQoJICAgICAg KGluc2VydC1iZWZvcmUtbWFya2VycyAiXG4iKQ0KCSAgICAgIChiYWNrd2FyZC1jaGFyIDEpDQoJ ICAgICAgKG5hcnJvdy10by1yZWdpb24gKHBvaW50KSAocG9pbnQpKQ0KCSAgICAgIChhbmQgb3Jn LWFkYXB0LWluZGVudGF0aW9uIChvcmctaW5kZW50LXRvLWNvbHVtbiBjb2wpKSkNCgkgICAgOzsg Q2hlY2sgaWYgd2UgaGF2ZSB0byByZW1vdmUgc29tZXRoaW5nLg0KCSAgICAoc2V0cSBsaXN0IChj b25zIHdoYXQgcmVtb3ZlKSkNCgkgICAgKHdoaWxlIGxpc3QNCgkgICAgICAoc2V0cSBlbHQgKHBv cCBsaXN0KSkNCgkgICAgICAod2hlbiAob3IgKGFuZCAoZXEgZWx0ICdzY2hlZHVsZWQpDQoJCQkg ICAgIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctc2NoZWR1bGVkLXRpbWUtcmVnZXhwIG5pbCB0KSkN CgkJCShhbmQgKGVxIGVsdCAnZGVhZGxpbmUpDQoJCQkgICAgIChyZS1zZWFyY2gtZm9yd2FyZCBv cmctZGVhZGxpbmUtdGltZS1yZWdleHAgbmlsIHQpKQ0KCQkJKGFuZCAoZXEgZWx0ICdjbG9zZWQp DQoJCQkgICAgIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctY2xvc2VkLXRpbWUtcmVnZXhwIG5pbCB0 KSkpDQoJCShyZXBsYWNlLW1hdGNoICIiKQ0KCQkoaWYgKGxvb2tpbmctYXQgIi0tKzxbXj5dKz4i KSAocmVwbGFjZS1tYXRjaCAiIikpKSkNCgkgICAgKGFuZCAobG9va2luZy1hdCAiWyBcdF0rIikg KHJlcGxhY2UtbWF0Y2ggIiIpKQ0KCSAgICAoYW5kIG9yZy1hZGFwdC1pbmRlbnRhdGlvbiAoYm9s cCkgKG9yZy1pbmRlbnQtdG8tY29sdW1uIGNvbCkpDQoJICAgICh3aGVuIHdoYXQNCgkgICAgICAo aW5zZXJ0DQoJICAgICAgIChpZiAobm90IChvciAoYm9scCkgKGVxIChjaGFyLWJlZm9yZSkgP1wg KSkpICIgIiAiIikNCgkgICAgICAgKGNvbmQgKChlcSB3aGF0ICdzY2hlZHVsZWQpIG9yZy1zY2hl ZHVsZWQtc3RyaW5nKQ0KCQkgICAgICgoZXEgd2hhdCAnZGVhZGxpbmUpIG9yZy1kZWFkbGluZS1z dHJpbmcpDQoJCSAgICAgKChlcSB3aGF0ICdjbG9zZWQpIG9yZy1jbG9zZWQtc3RyaW5nKSkNCgkg ICAgICAgIiAiKQ0KCSAgICAgIChzZXRxIHRzIChvcmctaW5zZXJ0LXRpbWUtc3RhbXANCgkJCXRp bWUNCgkJCShvciBvcmctdGltZS13YXMtZ2l2ZW4NCgkJCSAgICAoYW5kIChlcSB3aGF0ICdjbG9z ZWQpIG9yZy1sb2ctZG9uZS13aXRoLXRpbWUpKQ0KCQkJKGVxIHdoYXQgJ2Nsb3NlZCkNCgkJCW5p bCBuaWwgKGxpc3Qgb3JnLWVuZC10aW1lLXdhcy1naXZlbikpKQ0KCSAgICAgIChpbnNlcnQNCgkg ICAgICAgKGlmIChub3QgKG9yIChib2xwKSAoZXEgKGNoYXItYmVmb3JlKSA/XCApDQoJCQkgICAg KG1lbXEgKGNoYXItYWZ0ZXIpICcoMzIgMTApKQ0KCQkJICAgIChlb2JwKSkpICIgIiAiIikpDQoJ ICAgICAgKGVuZC1vZi1saW5lIDEpKQ0KCSAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KCSAg ICAod2lkZW4pDQoJICAgIChpZiAoYW5kIChsb29raW5nLWF0ICJbIFx0XSpcbiIpDQoJCSAgICAg KGVxdWFsIChjaGFyLWJlZm9yZSkgP1xuKSkNCgkJKGRlbGV0ZS1yZWdpb24gKDEtIChwb2ludCkp IChwb2ludC1hdC1lb2wpKSkNCgkgICAgdHMpKSkpKSkNCg0KKGRlZnZhciBvcmctbG9nLW5vdGUt bWFya2VyIChtYWtlLW1hcmtlcikpDQooZGVmdmFyIG9yZy1sb2ctbm90ZS1wdXJwb3NlIG5pbCkN CihkZWZ2YXIgb3JnLWxvZy1ub3RlLXN0YXRlIG5pbCkNCihkZWZ2YXIgb3JnLWxvZy1ub3RlLXBy ZXZpb3VzLXN0YXRlIG5pbCkNCihkZWZ2YXIgb3JnLWxvZy1ub3RlLWhvdyBuaWwpDQooZGVmdmFy IG9yZy1sb2ctbm90ZS1leHRyYSBuaWwpDQooZGVmdmFyIG9yZy1sb2ctbm90ZS13aW5kb3ctY29u ZmlndXJhdGlvbiBuaWwpDQooZGVmdmFyIG9yZy1sb2ctbm90ZS1yZXR1cm4tdG8gKG1ha2UtbWFy a2VyKSkNCihkZWZ2YXIgb3JnLWxvZy1ub3RlLWVmZmVjdGl2ZS10aW1lIG5pbA0KICAiUmVtZW1i ZXJlZCBjdXJyZW50IHRpbWUgc28gdGhhdCBkeW5hbWljYWxseSBzY29wZWQNCmBvcmctZXh0ZW5k LXRvZGF5LXVudGlsJyBhZmZlY3RzIHRoYSB0aW1lc3RhbXBzIGluIHN0YXRlIGNoYW5nZQ0KbG9n IikNCg0KKGRlZnZhciBvcmctbG9nLXBvc3QtbWVzc2FnZSBuaWwNCiAgIk1lc3NhZ2UgdG8gYmUg ZGlzcGxheWVkIGFmdGVyIGEgbG9nIG5vdGUgaGFzIGJlZW4gc3RvcmVkLg0KVGhlIGF1dG8tcmVw ZWF0ZXIgdXNlcyB0aGlzLiIpDQoNCihkZWZ1biBvcmctYWRkLW5vdGUgKCkNCiAgIkFkZCBhIG5v dGUgdG8gdGhlIGN1cnJlbnQgZW50cnkuDQpUaGlzIGlzIGRvbmUgaW4gdGhlIHNhbWUgd2F5IGFz IGFkZGluZyBhIHN0YXRlIGNoYW5nZSBub3RlLiINCiAgKGludGVyYWN0aXZlKQ0KICAob3JnLWFk ZC1sb2ctc2V0dXAgJ25vdGUgbmlsIG5pbCAnZmluZHBvcyBuaWwpKQ0KDQooZGVmdmFyIG9yZy1w cm9wZXJ0eS1lbmQtcmUpDQooZGVmdW4gb3JnLWFkZC1sb2ctc2V0dXAgKCZvcHRpb25hbCBwdXJw b3NlIHN0YXRlIHByZXYtc3RhdGUNCgkJCQkgICAgZmluZHBvcyBob3cgZXh0cmEpDQogICJTZXQg dXAgdGhlIHBvc3QgY29tbWFuZCBob29rIHRvIHRha2UgYSBub3RlLg0KSWYgdGhpcyBpcyBhYm91 dCB0byBUT0RPIHN0YXRlIGNoYW5nZSwgdGhlIG5ldyBzdGF0ZSBpcyBleHBlY3RlZCBpbiBTVEFU RS4NCldoZW4gRklORFBPUyBpcyBub24tbmlsLCBmaW5kIHRoZSBjb3JyZWN0IHBvc2l0aW9uIGZv ciB0aGUgbm90ZSBpbg0KdGhlIGN1cnJlbnQgZW50cnkuICBJZiBub3QsIGFzc3VtZSB0aGF0IGl0 IGNhbiBiZSBpbnNlcnRlZCBhdCBwb2ludC4NCkhPVyBpcyBhbiBpbmRpY2F0b3Igd2hhdCBraW5k IG9mIG5vdGUgc2hvdWxkIGJlIGNyZWF0ZWQuDQpFWFRSQSBpcyBhZGRpdGlvbmFsIHRleHQgdGhh dCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIG5vdGVzIGJ1ZmZlci4iDQogIChsZXQqICgob3Jn LWxvZy1pbnRvLWRyYXdlciAob3JnLWxvZy1pbnRvLWRyYXdlcikpDQoJIChkcmF3ZXIgKGNvbmQg KChzdHJpbmdwIG9yZy1sb2ctaW50by1kcmF3ZXIpDQoJCQlvcmctbG9nLWludG8tZHJhd2VyKQ0K CQkgICAgICAgKG9yZy1sb2ctaW50by1kcmF3ZXIgIkxPR0JPT0siKSkpKQ0KICAgIChzYXZlLXJl c3RyaWN0aW9uDQogICAgICAoc2F2ZS1leGN1cnNpb24NCgkod2hlbiBmaW5kcG9zDQoJICAob3Jn LWJhY2stdG8taGVhZGluZyB0KQ0KCSAgKG5hcnJvdy10by1yZWdpb24gKHBvaW50KSAoc2F2ZS1l eGN1cnNpb24NCgkJCQkgICAgICAob3V0bGluZS1uZXh0LWhlYWRpbmcpIChwb2ludCkpKQ0KCSAg KGxvb2tpbmctYXQgKGNvbmNhdCBvcmctb3V0bGluZS1yZWdleHAgIlxcKCAqXFwpW15cclxuXSoi DQoJCQkgICAgICAiXFwoXG5bXlxyXG5dKj8iIG9yZy1rZXl3b3JkLXRpbWUtbm90LWNsb2NrLXJl Z2V4cA0KCQkJICAgICAgIlteXHJcbl0qXFwpPyIpKQ0KCSAgKGdvdG8tY2hhciAobWF0Y2gtZW5k IDApKQ0KCSAgKGNvbmQNCgkgICAoZHJhd2VyDQoJICAgIChpZiAocmUtc2VhcmNoLWZvcndhcmQg KGNvbmNhdCAiXlsgXHRdKjoiIGRyYXdlciAiOlsgXHRdKiQiKQ0KCQkJCSAgIG5pbCB0KQ0KCQko cHJvZ24NCgkJICAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpDQoJCSAgKG9yIG9yZy1sb2ctc3Rh dGVzLW9yZGVyLXJldmVyc2VkDQoJCSAgICAgIChhbmQgKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy1w cm9wZXJ0eS1lbmQtcmUgbmlsIHQpDQoJCQkgICAoZ290by1jaGFyICgxLSAobWF0Y2gtYmVnaW5u aW5nIDApKSkpKSkNCgkgICAgICAoaW5zZXJ0ICJcbjoiIGRyYXdlciAiOlxuOkVORDoiKQ0KCSAg ICAgIChiZWdpbm5pbmctb2YtbGluZSAwKQ0KCSAgICAgIChvcmctaW5kZW50LWxpbmUpDQoJICAg ICAgKGJlZ2lubmluZy1vZi1saW5lIDIpDQoJICAgICAgKG9yZy1pbmRlbnQtbGluZSkNCgkgICAg ICAoZW5kLW9mLWxpbmUgMCkpKQ0KCSAgICgoYW5kIG9yZy1sb2ctc3RhdGUtbm90ZXMtaW5zZXJ0 LWFmdGVyLWRyYXdlcnMNCgkJIChzYXZlLWV4Y3Vyc2lvbg0KCQkgICAoZm9yd2FyZC1saW5lKSAo bG9va2luZy1hdCBvcmctZHJhd2VyLXJlZ2V4cCkpKQ0KCSAgICAoZm9yd2FyZC1saW5lKQ0KCSAg ICAod2hpbGUgKGxvb2tpbmctYXQgb3JnLWRyYXdlci1yZWdleHApDQoJICAgICAgKGdvdG8tY2hh ciAobWF0Y2gtZW5kIDApKQ0KCSAgICAgIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctcHJvcGVydHkt ZW5kLXJlIChwb2ludC1tYXgpIHQpDQoJICAgICAgKGZvcndhcmQtbGluZSkpDQoJICAgIChmb3J3 YXJkLWxpbmUgLTEpKSkNCgkgICh1bmxlc3Mgb3JnLWxvZy1zdGF0ZXMtb3JkZXItcmV2ZXJzZWQN CgkgICAgKGFuZCAoPSAoY2hhci1hZnRlcikgP1xuKSAoZm9yd2FyZC1jaGFyIDEpKQ0KCSAgICAo b3JnLXNraXAtb3Zlci1zdGF0ZS1ub3RlcykNCgkgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBc dFxuXHIiKSkpDQoJKG1vdmUtbWFya2VyIG9yZy1sb2ctbm90ZS1tYXJrZXIgKHBvaW50KSkNCgko c2V0cSBvcmctbG9nLW5vdGUtcHVycG9zZSBwdXJwb3NlDQoJICAgICAgb3JnLWxvZy1ub3RlLXN0 YXRlIHN0YXRlDQoJICAgICAgb3JnLWxvZy1ub3RlLXByZXZpb3VzLXN0YXRlIHByZXYtc3RhdGUN CgkgICAgICBvcmctbG9nLW5vdGUtaG93IGhvdw0KCSAgICAgIG9yZy1sb2ctbm90ZS1leHRyYSBl eHRyYQ0KCSAgICAgIG9yZy1sb2ctbm90ZS1lZmZlY3RpdmUtdGltZSAob3JnLWN1cnJlbnQtZWZm ZWN0aXZlLXRpbWUpKQ0KCShhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgJ29yZy1hZGQtbG9n LW5vdGUgJ2FwcGVuZCkpKSkpDQoNCihkZWZ1biBvcmctc2tpcC1vdmVyLXN0YXRlLW5vdGVzICgp DQogICJTa2lwIHBhc3QgdGhlIGxpc3Qgb2YgU3RhdGUgbm90ZXMgaW4gYW4gZW50cnkuIg0KICAo aWYgKGxvb2tpbmctYXQgIlxuWyBcdF0qLSBTdGF0ZSIpIChmb3J3YXJkLWNoYXIgMSkpDQogICh3 aGVuIChpZ25vcmUtZXJyb3JzIChnb3RvLWNoYXIgKG9yZy1pbi1pdGVtLXApKSkNCiAgICAobGV0 KiAoKHN0cnVjdCAob3JnLWxpc3Qtc3RydWN0KSkNCgkgICAocHJldnMgKG9yZy1saXN0LXByZXZz LWFsaXN0IHN0cnVjdCkpKQ0KICAgICAgKHdoaWxlIChsb29raW5nLWF0ICJbIFx0XSotIFN0YXRl IikNCgkoZ290by1jaGFyIChvciAob3JnLWxpc3QtZ2V0LW5leHQtaXRlbSAocG9pbnQpIHN0cnVj dCBwcmV2cykNCgkJICAgICAgIChvcmctbGlzdC1nZXQtaXRlbS1lbmQgKHBvaW50KSBzdHJ1Y3Qp KSkpKSkpDQoNCihkZWZ1biBvcmctYWRkLWxvZy1ub3RlICgmb3B0aW9uYWwgcHVycG9zZSkNCiAg IlBvcCB1cCBhIHdpbmRvdyBmb3IgdGFraW5nIGEgbm90ZSwgYW5kIGFkZCB0aGlzIG5vdGUgbGF0 ZXIgYXQgcG9pbnQuIg0KICAocmVtb3ZlLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICdvcmctYWRk LWxvZy1ub3RlKQ0KICAoc2V0cSBvcmctbG9nLW5vdGUtd2luZG93LWNvbmZpZ3VyYXRpb24gKGN1 cnJlbnQtd2luZG93LWNvbmZpZ3VyYXRpb24pKQ0KICAoZGVsZXRlLW90aGVyLXdpbmRvd3MpDQog IChtb3ZlLW1hcmtlciBvcmctbG9nLW5vdGUtcmV0dXJuLXRvIChwb2ludCkpDQogIChvcmctcG9w LXRvLWJ1ZmZlci1zYW1lLXdpbmRvdyAobWFya2VyLWJ1ZmZlciBvcmctbG9nLW5vdGUtbWFya2Vy KSkNCiAgKGdvdG8tY2hhciBvcmctbG9nLW5vdGUtbWFya2VyKQ0KICAob3JnLXN3aXRjaC10by1i dWZmZXItb3RoZXItd2luZG93ICIqT3JnIE5vdGUqIikNCiAgKGVyYXNlLWJ1ZmZlcikNCiAgKGlm IChtZW1xIG9yZy1sb2ctbm90ZS1ob3cgJyh0aW1lIHN0YXRlKSkNCiAgICAgIChsZXQgKGN1cnJl bnQtcHJlZml4LWFyZykgKG9yZy1zdG9yZS1sb2ctbm90ZSkpDQogICAgKGxldCAoKG9yZy1pbmhp Yml0LXN0YXJ0dXAgdCkpIChvcmctbW9kZSkpDQogICAgKGluc2VydCAoZm9ybWF0ICIjIEluc2Vy dCBub3RlIGZvciAlcy4NCiMgRmluaXNoIHdpdGggQy1jIEMtYywgb3IgY2FuY2VsIHdpdGggQy1j IEMtay5cblxuIg0KCQkgICAgKGNvbmQNCgkJICAgICAoKGVxIG9yZy1sb2ctbm90ZS1wdXJwb3Nl ICdjbG9jay1vdXQpICJzdG9wcGVkIGNsb2NrIikNCgkJICAgICAoKGVxIG9yZy1sb2ctbm90ZS1w dXJwb3NlICdkb25lKSAgImNsb3NlZCB0b2RvIGl0ZW0iKQ0KCQkgICAgICgoZXEgb3JnLWxvZy1u b3RlLXB1cnBvc2UgJ3N0YXRlKQ0KCQkgICAgICAoZm9ybWF0ICJzdGF0ZSBjaGFuZ2UgZnJvbSBc IiVzXCIgdG8gXCIlc1wiIg0KCQkJICAgICAgKG9yIG9yZy1sb2ctbm90ZS1wcmV2aW91cy1zdGF0 ZSAiIikNCgkJCSAgICAgIChvciBvcmctbG9nLW5vdGUtc3RhdGUgIiIpKSkNCgkJICAgICAoKGVx IG9yZy1sb2ctbm90ZS1wdXJwb3NlICdyZXNjaGVkdWxlKQ0KCQkgICAgICAicmVzY2hlZHVsaW5n IikNCgkJICAgICAoKGVxIG9yZy1sb2ctbm90ZS1wdXJwb3NlICdkZWxzY2hlZHVsZSkNCgkJICAg ICAgIm5vIGxvbmdlciBzY2hlZHVsZWQiKQ0KCQkgICAgICgoZXEgb3JnLWxvZy1ub3RlLXB1cnBv c2UgJ3JlZGVhZGxpbmUpDQoJCSAgICAgICJjaGFuZ2luZyBkZWFkbGluZSIpDQoJCSAgICAgKChl cSBvcmctbG9nLW5vdGUtcHVycG9zZSAnZGVsZGVhZGxpbmUpDQoJCSAgICAgICJyZW1vdmluZyBk ZWFkbGluZSIpDQoJCSAgICAgKChlcSBvcmctbG9nLW5vdGUtcHVycG9zZSAncmVmaWxlKQ0KCQkg ICAgICAicmVmaWxpbmciKQ0KCQkgICAgICgoZXEgb3JnLWxvZy1ub3RlLXB1cnBvc2UgJ25vdGUp DQoJCSAgICAgICJ0aGlzIGVudHJ5IikNCgkJICAgICAodCAoZXJyb3IgIlRoaXMgc2hvdWxkIG5v dCBoYXBwZW4iKSkpKSkNCiAgICAoaWYgb3JnLWxvZy1ub3RlLWV4dHJhIChpbnNlcnQgb3JnLWxv Zy1ub3RlLWV4dHJhKSkNCiAgICAob3JnLXNldC1sb2NhbCAnb3JnLWZpbmlzaC1mdW5jdGlvbiAn b3JnLXN0b3JlLWxvZy1ub3RlKQ0KICAgIChydW4taG9va3MgJ29yZy1sb2ctYnVmZmVyLXNldHVw LWhvb2spKSkNCg0KKGRlZnZhciBvcmctbm90ZS1hYm9ydCBuaWwpIDsgZHluYW1pY2FsbHkgc2Nv cGVkDQooZGVmdW4gb3JnLXN0b3JlLWxvZy1ub3RlICgpDQogICJGaW5pc2ggdGFraW5nIGEgbG9n IG5vdGUsIGFuZCBpbnNlcnQgaXQgdG8gd2hlcmUgaXQgYmVsb25ncy4iDQogIChsZXQgKCh0eHQg KGJ1ZmZlci1zdHJpbmcpKSkNCiAgICAoa2lsbC1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkNCiAg ICAobGV0ICgobm90ZSAoY2RyIChhc3NxIG9yZy1sb2ctbm90ZS1wdXJwb3NlIG9yZy1sb2ctbm90 ZS1oZWFkaW5ncykpKQ0KCSAgbGluZXMgaW5kIGJ1bCkNCiAgICAgICh3aGlsZSAoc3RyaW5nLW1h dGNoICJcXGAjIC4qXG5bIFx0XG5dKiIgdHh0KQ0KICAgICAgICAoc2V0cSB0eHQgKHJlcGxhY2Ut bWF0Y2ggIiIgdCB0IHR4dCkpKQ0KICAgICAgKGlmIChzdHJpbmctbWF0Y2ggIlxccy0rXFwnIiB0 eHQpDQogICAgICAgICAgKHNldHEgdHh0IChyZXBsYWNlLW1hdGNoICIiIHQgdCB0eHQpKSkNCiAg ICAgIChzZXRxIGxpbmVzIChvcmctc3BsaXQtc3RyaW5nIHR4dCAiXG4iKSkNCiAgICAgICh3aGVu IChhbmQgbm90ZSAoc3RyaW5nLW1hdGNoICJcXFMtIiBub3RlKSkNCiAgICAgICAgKHNldHEgbm90 ZQ0KICAgICAgICAgICAgICAob3JnLXJlcGxhY2UtZXNjYXBlcw0KICAgICAgICAgICAgICAgbm90 ZQ0KICAgICAgICAgICAgICAgKGxpc3QgKGNvbnMgIiV1IiAodXNlci1sb2dpbi1uYW1lKSkNCiAg ICAgICAgICAgICAgICAgICAgIChjb25zICIlVSIgdXNlci1mdWxsLW5hbWUpDQogICAgICAgICAg ICAgICAgICAgICAoY29ucyAiJXQiIChmb3JtYXQtdGltZS1zdHJpbmcNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChvcmctdGltZS1zdGFtcC1mb3JtYXQgJ2xvbmcgJ2luYWN0aXZl KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLWxvZy1ub3RlLWVmZmVjdGl2 ZS10aW1lKSkNCiAgICAgICAgICAgICAgICAgICAgIChjb25zICIlVCIgKGZvcm1hdC10aW1lLXN0 cmluZw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yZy10aW1lLXN0YW1wLWZv cm1hdCAnbG9uZyBuaWwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmctbG9n LW5vdGUtZWZmZWN0aXZlLXRpbWUpKQ0KICAgICAgICAgICAgICAgICAgICAgKGNvbnMgIiVkIiAo Zm9ybWF0LXRpbWUtc3RyaW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Jn LXRpbWUtc3RhbXAtZm9ybWF0IG5pbCAnaW5hY3RpdmUpDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvcmctbG9nLW5vdGUtZWZmZWN0aXZlLXRpbWUpKQ0KICAgICAgICAgICAgICAg ICAgICAgKGNvbnMgIiVEIiAoZm9ybWF0LXRpbWUtc3RyaW5nDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAob3JnLXRpbWUtc3RhbXAtZm9ybWF0IG5pbCBuaWwpDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvcmctbG9nLW5vdGUtZWZmZWN0aXZlLXRpbWUpKQ0KICAg ICAgICAgICAgICAgICAgICAgKGNvbnMgIiVzIiAoaWYgb3JnLWxvZy1ub3RlLXN0YXRlDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0ICJcIiIgb3JnLWxvZy1ub3Rl LXN0YXRlICJcIiIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpKQ0KICAg ICAgICAgICAgICAgICAgICAgKGNvbnMgIiVTIiAoaWYgb3JnLWxvZy1ub3RlLXByZXZpb3VzLXN0 YXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0ICJcIiIgb3Jn LWxvZy1ub3RlLXByZXZpb3VzLXN0YXRlICJcIiIpDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlwiXCIiKSkpKSkNCiAgICAgICAgKGlmIGxpbmVzIChzZXRxIG5vdGUgKGNvbmNh dCBub3RlICIgXFxcXCIpKSkNCiAgICAgICAgKHB1c2ggbm90ZSBsaW5lcykpDQogICAgICAod2hl biAob3IgY3VycmVudC1wcmVmaXgtYXJnIG9yZy1ub3RlLWFib3J0KQ0KICAgICAgICAod2hlbiBv cmctbG9nLWludG8tZHJhd2VyDQogICAgICAgICAgKG9yZy1yZW1vdmUtZW1wdHktZHJhd2VyLWF0 DQogICAgICAgICAgIChpZiAoc3RyaW5ncCBvcmctbG9nLWludG8tZHJhd2VyKSBvcmctbG9nLWlu dG8tZHJhd2VyICJMT0dCT09LIikNCiAgICAgICAgICAgb3JnLWxvZy1ub3RlLW1hcmtlcikpDQog ICAgICAgIChzZXRxIGxpbmVzIG5pbCkpDQogICAgICAod2hlbiBsaW5lcw0KICAgICAgICAod2l0 aC1jdXJyZW50LWJ1ZmZlciAobWFya2VyLWJ1ZmZlciBvcmctbG9nLW5vdGUtbWFya2VyKQ0KICAg ICAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgICAgICAgKGdvdG8tY2hhciBvcmctbG9nLW5v dGUtbWFya2VyKQ0KICAgICAgICAgICAgKG1vdmUtbWFya2VyIG9yZy1sb2ctbm90ZS1tYXJrZXIg bmlsKQ0KICAgICAgICAgICAgKGVuZC1vZi1saW5lIDEpDQogICAgICAgICAgICAoaWYgKG5vdCAo Ym9scCkpIChsZXQgKChpbmhpYml0LXJlYWQtb25seSB0KSkgKGluc2VydCAiXG4iKSkpDQogICAg ICAgICAgICAoc2V0cSBpbmQgKHNhdmUtZXhjdXJzaW9uDQogICAgICAgICAgICAgICAgICAgICAg ICAoaWYgKGlnbm9yZS1lcnJvcnMgKGdvdG8tY2hhciAob3JnLWluLWl0ZW0tcCkpKQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChzdHJ1Y3QgKG9yZy1saXN0LXN0cnVjdCkpKQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yZy1saXN0LWdldC1pbmQNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAob3JnLWxpc3QtZ2V0LXRvcC1wb2ludCBzdHJ1Y3QpIHN0 cnVjdCkpDQogICAgICAgICAgICAgICAgICAgICAgICAgIChza2lwLWNoYXJzLWJhY2t3YXJkICIg XHJcdFxuIikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmQNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICgoYW5kIChvcmctYXQtaGVhZGluZy1wKQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3JnLWFkYXB0LWluZGVudGF0aW9uKQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgxKyAob3JnLWN1cnJlbnQtbGV2ZWwpKSkNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICgob3JnLWF0LWhlYWRpbmctcCkgMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICh0IChvcmctZ2V0LWluZGVudGF0aW9uKSkpKSkpDQogICAgICAgICAgICAoc2V0cSBidWwgKG9y Zy1saXN0LWJ1bGxldC1zdHJpbmcgIi0iKSkNCiAgICAgICAgICAgIChvcmctaW5kZW50LWxpbmUt dG8gaW5kKQ0KICAgICAgICAgICAgKGluc2VydCBidWwgKHBvcCBsaW5lcykpDQogICAgICAgICAg ICAobGV0ICgoaW5kLWJvZHkgKCsgKGxlbmd0aCBidWwpIGluZCkpKQ0KICAgICAgICAgICAgICAo d2hpbGUgbGluZXMNCiAgICAgICAgICAgICAgICAoaW5zZXJ0ICJcbiIpDQogICAgICAgICAgICAg ICAgKG9yZy1pbmRlbnQtbGluZS10byBpbmQtYm9keSkNCiAgICAgICAgICAgICAgICAoaW5zZXJ0 IChwb3AgbGluZXMpKSkpDQogICAgICAgICAgICAobWVzc2FnZSAiTm90ZSBzdG9yZWQiKQ0KICAg ICAgICAgICAgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkNCiAgICAgICAgICAgIChvcmctY3ljbGUt aGlkZS1kcmF3ZXJzICdjaGlsZHJlbikpDQogICAgICAgICAgOzsgRml4IGBidWZmZXItdW5kby1s aXN0JyB3aGVuIGBvcmctc3RvcmUtbG9nLW5vdGUnIGlzIGNhbGxlZA0KICAgICAgICAgIDs7IGZy b20gd2l0aGluIGBvcmctYWRkLWxvZy1ub3RlJyBiZWNhdXNlIGBidWZmZXItdW5kby1saXN0Jw0K ICAgICAgICAgIDs7IGlzIHRoZW4gbW9kaWZpZWQgb3V0c2lkZSBvZiBgb3JnLXdpdGgtcmVtb3Rl LXVuZG8nLg0KICAgICAgICAgICh3aGVuIChlcSB0aGlzLWNvbW1hbmQgJ29yZy1hZ2VuZGEtdG9k bykNCiAgICAgICAgICAgIChzZXRjZHIgYnVmZmVyLXVuZG8tbGlzdCAoY2RkciBidWZmZXItdW5k by1saXN0KSkpKSkpKQ0KICA7OyBEb24ndCBhZGQgdW5kbyBpbmZvcm1hdGlvbiB3aGVuIGNhbGxl ZCBmcm9tIGBvcmctYWdlbmRhLXRvZG8nDQogIChsZXQgKChidWZmZXItdW5kby1saXN0IChlcSB0 aGlzLWNvbW1hbmQgJ29yZy1hZ2VuZGEtdG9kbykpKQ0KICAgIChzZXQtd2luZG93LWNvbmZpZ3Vy YXRpb24gb3JnLWxvZy1ub3RlLXdpbmRvdy1jb25maWd1cmF0aW9uKQ0KICAgICh3aXRoLWN1cnJl bnQtYnVmZmVyIChtYXJrZXItYnVmZmVyIG9yZy1sb2ctbm90ZS1yZXR1cm4tdG8pDQogICAgICAo Z290by1jaGFyIG9yZy1sb2ctbm90ZS1yZXR1cm4tdG8pKQ0KICAgIChtb3ZlLW1hcmtlciBvcmct bG9nLW5vdGUtcmV0dXJuLXRvIG5pbCkNCiAgICAoYW5kIG9yZy1sb2ctcG9zdC1tZXNzYWdlICht ZXNzYWdlICIlcyIgb3JnLWxvZy1wb3N0LW1lc3NhZ2UpKSkpDQoNCihkZWZ1biBvcmctcmVtb3Zl LWVtcHR5LWRyYXdlci1hdCAoZHJhd2VyIHBvcykNCiAgIlJlbW92ZSBhbiBlbXB0eSBkcmF3ZXIg RFJBV0VSIGF0IHBvc2l0aW9uIFBPUy4NClBPUyBtYXkgYWxzbyBiZSBhIG1hcmtlci4iDQogICh3 aXRoLWN1cnJlbnQtYnVmZmVyIChpZiAobWFya2VycCBwb3MpIChtYXJrZXItYnVmZmVyIHBvcykg KGN1cnJlbnQtYnVmZmVyKSkNCiAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAgIChzYXZlLXJlc3Ry aWN0aW9uDQoJKHdpZGVuKQ0KCShnb3RvLWNoYXIgcG9zKQ0KCShpZiAob3JnLWluLXJlZ2V4cA0K CSAgICAgKGNvbmNhdCAiXlsgXHRdKjoiIGRyYXdlciAiOlsgXHRdKlxuWyBcdF0qOkVORDpbIFx0 XSpcbj8iKSAyKQ0KCSAgICAocmVwbGFjZS1tYXRjaCAiIikpKSkpKQ0KDQooZGVmdmFyIG9yZy10 cy10eXBlIG5pbCkNCihkZWZ1biBvcmctc3BhcnNlLXRyZWUgKCZvcHRpb25hbCBhcmcgdHlwZSkN CiAgIkNyZWF0ZSBhIHNwYXJzZSB0cmVlLCBwcm9tcHQgZm9yIHRoZSBkZXRhaWxzLg0KVGhpcyBj b21tYW5kIGNhbiBjcmVhdGUgc3BhcnNlIHRyZWVzLiAgWW91IGZpcnN0IG5lZWQgdG8gc2VsZWN0 IHRoZSB0eXBlDQpvZiBtYXRjaCB1c2VkIHRvIGNyZWF0ZSB0aGUgdHJlZToNCg0KdCAgICAgIFNo b3cgYWxsIFRPRE8gZW50cmllcy4NClQgICAgICBTaG93IGVudHJpZXMgd2l0aCBhIHNwZWNpZmlj IFRPRE8ga2V5d29yZC4NCm0gICAgICBTaG93IGVudHJpZXMgc2VsZWN0ZWQgYnkgYSB0YWdzL3By b3BlcnR5IG1hdGNoLg0KcCAgICAgIEVudGVyIGEgcHJvcGVydHkgbmFtZSBhbmQgaXRzIHZhbHVl IChib3RoIHdpdGggY29tcGxldGlvbiBvbiBleGlzdGluZw0KICAgICAgIG5hbWVzL3ZhbHVlcykg YW5kIHNob3cgZW50cmllcyB3aXRoIHRoYXQgcHJvcGVydHkuDQpyICAgICAgU2hvdyBlbnRyaWVz IG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uIChgLycgY2FuIGJlIHVzZWQgYXMgd2VsbCku DQpiICAgICAgU2hvdyBkZWFkbGluZXMgYW5kIHNjaGVkdWxlZCBpdGVtcyBiZWZvcmUgYSBkYXRl Lg0KYSAgICAgIFNob3cgZGVhZGxpbmVzIGFuZCBzY2hlZHVsZWQgaXRlbXMgYWZ0ZXIgYSBkYXRl Lg0KZCAgICAgIFNob3cgZGVhZGxpbmVzIGR1ZSB3aXRoaW4gYG9yZy1kZWFkbGluZS13YXJuaW5n LWRheXMnLg0KRCAgICAgIFNob3cgZGVhZGxpbmVzIGFuZCBzY2hlZHVsZWQgaXRlbXMgYmV0d2Vl biBhIGRhdGUgcmFuZ2UuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoc2V0cSB0eXBlIChvciB0 eXBlIG9yZy1zcGFyc2UtdHJlZS1kZWZhdWx0LWRhdGUtdHlwZSkpDQogIChzZXRxIG9yZy10cy10 eXBlIHR5cGUpDQogIChtZXNzYWdlICJTcGFyc2UgdHJlZTogWy9dcmVnZXhwIFt0XW9kbyBbVF1v ZG8ta3dkIFttXWF0Y2ggW3Bdcm9wZXJ0eQ0KICAgICAgICAgICAgIFtkXWVhZGxpbmVzIFtiXWVm b3JlLWRhdGUgW2FdZnRlci1kYXRlIFtEXWF0ZXMgcmFuZ2UNCiAgICAgICAgICAgICBbY115Y2xl IHRocm91Z2ggZGF0ZSB0eXBlczogJXMiDQoJICAgKGNhc2UgdHlwZQ0KCSAgICAgKGFsbCAiYWxs IHRpbWVzdGFtcHMiKQ0KCSAgICAgKHNjaGVkdWxlZCAib25seSBzY2hlZHVsZWQiKQ0KCSAgICAg KGRlYWRsaW5lICJvbmx5IGRlYWRsaW5lIikNCgkgICAgIChhY3RpdmUgIm9ubHkgYWN0aXZlIHRp bWVzdGFtcHMiKQ0KCSAgICAgKGluYWN0aXZlICJvbmx5IGluYWN0aXZlIHRpbWVzdGFtcHMiKQ0K CSAgICAgKHNjaGVkdWxlZC1vci1kZWFkbGluZSAic2NoZWR1bGVkL2RlYWRsaW5lIikNCgkgICAg IChjbG9zZWQgIndpdGggYSBjbG9zZWQgdGltZS1zdGFtcCIpDQoJICAgICAob3RoZXJ3aXNlICJz Y2hlZHVsZWQvZGVhZGxpbmUiKSkpDQogIChsZXQgKChhbnN3ZXIgKHJlYWQtY2hhci1leGNsdXNp dmUpKSkNCiAgICAoY2FzZSBhbnN3ZXINCiAgICAgICg/Yw0KICAgICAgIChvcmctc3BhcnNlLXRy ZWUNCglhcmcNCgkoY2FkciAobWVtcSB0eXBlICcoc2NoZWR1bGVkLW9yLWRlYWRsaW5lIGFsbCBz Y2hlZHVsZWQgZGVhZGxpbmUgYWN0aXZlDQoJCQkJCQkgaW5hY3RpdmUgY2xvc2VkKSkpKSkNCiAg ICAgICg/ZCAoY2FsbC1pbnRlcmFjdGl2ZWx5ICMnb3JnLWNoZWNrLWRlYWRsaW5lcykpDQogICAg ICAoP2IgKGNhbGwtaW50ZXJhY3RpdmVseSAjJ29yZy1jaGVjay1iZWZvcmUtZGF0ZSkpDQogICAg ICAoP2EgKGNhbGwtaW50ZXJhY3RpdmVseSAjJ29yZy1jaGVjay1hZnRlci1kYXRlKSkNCiAgICAg ICg/RCAoY2FsbC1pbnRlcmFjdGl2ZWx5ICMnb3JnLWNoZWNrLWRhdGVzLXJhbmdlKSkNCiAgICAg ICg/dCAoY2FsbC1pbnRlcmFjdGl2ZWx5ICMnb3JnLXNob3ctdG9kby10cmVlKSkNCiAgICAgICg/ VCAob3JnLXNob3ctdG9kby10cmVlICcoNCkpKQ0KICAgICAgKD9tIChjYWxsLWludGVyYWN0aXZl bHkgIydvcmctbWF0Y2gtc3BhcnNlLXRyZWUpKQ0KICAgICAgKCg/cCA/UCkNCiAgICAgICAobGV0 KiAoKGt3ZCAob3JnLWljb21wbGV0aW5nLXJlYWQNCgkJICAgICJQcm9wZXJ0eTogIiAobWFwY2Fy ICMnbGlzdCAob3JnLWJ1ZmZlci1wcm9wZXJ0eS1rZXlzKSkpKQ0KCSAgICAgICh2YWx1ZSAob3Jn LWljb21wbGV0aW5nLXJlYWQNCgkJICAgICAgIlZhbHVlOiAiIChtYXBjYXIgIydsaXN0IChvcmct cHJvcGVydHktdmFsdWVzIGt3ZCkpKSkpDQoJICh1bmxlc3MgKHN0cmluZy1tYXRjaCAiXFxgey4q fVxcJyIgdmFsdWUpDQoJICAgKHNldHEgdmFsdWUgKGNvbmNhdCAiXCIiIHZhbHVlICJcIiIpKSkN CgkgKG9yZy1tYXRjaC1zcGFyc2UtdHJlZSBhcmcgKGNvbmNhdCBrd2QgIj0iIHZhbHVlKSkpKQ0K ICAgICAgKCg/ciA/UiA/LykgKGNhbGwtaW50ZXJhY3RpdmVseSAjJ29yZy1vY2N1cikpDQogICAg ICAob3RoZXJ3aXNlICh1c2VyLWVycm9yICJObyBzdWNoIHNwYXJzZSB0cmVlIGNvbW1hbmQgXCIl Y1wiIiBhbnN3ZXIpKSkpKQ0KDQooZGVmdmFyIG9yZy1vY2N1ci1oaWdobGlnaHRzIG5pbA0KICAi TGlzdCBvZiBvdmVybGF5cyB1c2VkIGZvciBvY2N1ciBtYXRjaGVzLiIpDQoobWFrZS12YXJpYWJs ZS1idWZmZXItbG9jYWwgJ29yZy1vY2N1ci1oaWdobGlnaHRzKQ0KKGRlZnZhciBvcmctb2NjdXIt cGFyYW1ldGVycyBuaWwNCiAgIlBhcmFtZXRlcnMgb2YgdGhlIGFjdGl2ZSBvcmctb2NjdXIgY2Fs bHMuDQpUaGlzIGlzIGEgbGlzdCwgZWFjaCBjYWxsIHRvIG9yZy1vY2N1ciBwdXNoZXMgYXMgY29u cyBjZWxsLA0KY29udGFpbmluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIGFuZCB0aGUgY2FsbGJh Y2ssIG9udG8gdGhlIGxpc3QuDQpUaGUgbGlzdCBjYW4gY29udGFpbiBzZXZlcmFsIGVudHJpZXMg aWYgYG9yZy1vY2N1cicgaGFzIGJlZW4gY2FsbGVkDQpzZXZlcmFsIHRpbWUgd2l0aCB0aGUgS0VF UC1QUkVWSU9VUyBhcmd1bWVudC4gIE90aGVyd2lzZSwgdGhpcyBsaXN0DQp3aWxsIG9ubHkgY29u dGFpbiBvbmUgc2V0IG9mIHBhcmFtZXRlcnMuICBXaGVuIHRoZSBoaWdobGlnaHRzIGFyZQ0KcmVt b3ZlZCAoZm9yIGV4YW1wbGUgd2l0aCBgQy1jIEMtYycsIG9yIHdpdGggdGhlIG5leHQgZWRpdCAo ZGVwZW5kaW5nDQpvbiBgb3JnLXJlbW92ZS1oaWdobGlnaHRzLXdpdGgtY2hhbmdlJyksIHRoaXMg dmFyaWFibGUgaXMgZW1wdGllZA0KYXMgd2VsbC4iKQ0KKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxv Y2FsICdvcmctb2NjdXItcGFyYW1ldGVycykNCg0KKGRlZnVuIG9yZy1vY2N1ciAocmVnZXhwICZv cHRpb25hbCBrZWVwLXByZXZpb3VzIGNhbGxiYWNrKQ0KICAiTWFrZSBhIGNvbXBhY3QgdHJlZSB3 aGljaCBzaG93cyBhbGwgbWF0Y2hlcyBvZiBSRUdFWFAuDQpUaGUgdHJlZSB3aWxsIHNob3cgdGhl IGxpbmVzIHdoZXJlIHRoZSByZWdleHAgbWF0Y2hlcywgYW5kIGFsbCBoaWdoZXINCmhlYWRsaW5l cyBhYm92ZSB0aGUgbWF0Y2guICBJdCB3aWxsIGFsc28gc2hvdyB0aGUgaGVhZGluZyBhZnRlciB0 aGUgbWF0Y2gsDQp0byBtYWtlIHN1cmUgZWRpdGluZyB0aGUgbWF0Y2hpbmcgZW50cnkgaXMgZWFz eS4NCklmIEtFRVAtUFJFVklPVVMgaXMgbm9uLW5pbCwgaGlnaGxpZ2h0aW5nIGFuZCBleHBvc2lu ZyBkb25lIGJ5IGEgcHJldmlvdXMNCmNhbGwgdG8gYG9yZy1vY2N1cicgd2lsbCBiZSBrZXB0LCB0 byBhbGxvdyBzdGFja2luZyBvZiBjYWxscyB0byB0aGlzDQpjb21tYW5kLg0KSWYgQ0FMTEJBQ0sg aXMgbm9uLW5pbCwgaXQgaXMgYSBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgdG8gY29uZmlybQ0K dGhhdCB0aGUgbWF0Y2ggc2hvdWxkIGluZGVlZCBiZSBzaG93bi4iDQogIChpbnRlcmFjdGl2ZSAi c1JlZ2V4cDogXG5QIikNCiAgKHdoZW4gKGVxdWFsIHJlZ2V4cCAiIikNCiAgICAodXNlci1lcnJv ciAiUmVnZXhwIGNhbm5vdCBiZSBlbXB0eSIpKQ0KICAodW5sZXNzIGtlZXAtcHJldmlvdXMNCiAg ICAob3JnLXJlbW92ZS1vY2N1ci1oaWdobGlnaHRzIG5pbCBuaWwgdCkpDQogIChwdXNoIChjb25z IHJlZ2V4cCBjYWxsYmFjaykgb3JnLW9jY3VyLXBhcmFtZXRlcnMpDQogIChsZXQgKChjbnQgMCkp DQogICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KICAg ICAgKGlmIChvciAobm90IGtlZXAtcHJldmlvdXMpICAgICAgICAgIDsgZG8gbm90IHdhbnQgdG8g a2VlcA0KCSAgICAgIChub3Qgb3JnLW9jY3VyLWhpZ2hsaWdodHMpKSAgOyBubyBwcmV2aW91cyBt YXRjaGVzDQoJICA7OyBoaWRlIGV2ZXJ5dGhpbmcNCgkgIChvcmctb3ZlcnZpZXcpKQ0KICAgICAg KHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCByZWdleHAgbmlsIHQpDQoJKHdoZW4gKG9yIChub3Qg Y2FsbGJhY2spDQoJCSAgKHNhdmUtbWF0Y2gtZGF0YSAoZnVuY2FsbCBjYWxsYmFjaykpKQ0KCSAg KHNldHEgY250ICgxKyBjbnQpKQ0KCSAgKHdoZW4gb3JnLWhpZ2hsaWdodC1zcGFyc2UtdHJlZS1t YXRjaGVzDQoJICAgIChvcmctaGlnaGxpZ2h0LW5ldy1tYXRjaCAobWF0Y2gtYmVnaW5uaW5nIDAp IChtYXRjaC1lbmQgMCkpKQ0KCSAgKG9yZy1zaG93LWNvbnRleHQgJ29jY3VyLXRyZWUpKSkpDQog ICAgKHdoZW4gb3JnLXJlbW92ZS1oaWdobGlnaHRzLXdpdGgtY2hhbmdlDQogICAgICAob3JnLWFk ZC1ob29rICdiZWZvcmUtY2hhbmdlLWZ1bmN0aW9ucyAnb3JnLXJlbW92ZS1vY2N1ci1oaWdobGln aHRzDQoJCSAgICBuaWwgJ2xvY2FsKSkNCiAgICAodW5sZXNzIG9yZy1zcGFyc2UtdHJlZS1vcGVu LWFyY2hpdmVkLXRyZWVzDQogICAgICAob3JnLWhpZGUtYXJjaGl2ZWQtc3VidHJlZXMgKHBvaW50 LW1pbikgKHBvaW50LW1heCkpKQ0KICAgIChydW4taG9va3MgJ29yZy1vY2N1ci1ob29rKQ0KICAg IChpZiAob3JnLWNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2ludGVyYWN0aXZlKQ0KCShtZXNzYWdl ICIlZCBtYXRjaChlcykgZm9yIHJlZ2V4cCAlcyIgY250IHJlZ2V4cCkpDQogICAgY250KSkNCg0K KGRlZnVuIG9yZy1vY2N1ci1uZXh0LW1hdGNoICgmb3B0aW9uYWwgbiByZXNldCkNCiAgIkZ1bmN0 aW9uIGZvciBgbmV4dC1lcnJvci1mdW5jdGlvbicgdG8gZmluZCBzcGFyc2UgdHJlZSBtYXRjaGVz Lg0KTiBpcyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgdG8gbW92ZSwgd2hlbiBuZWdhdGl2ZSBtb3Zl IGJhY2t3YXJkcy4NClJFU0VUIGlzIGVudGlyZWx5IGlnbm9yZWQgLSB0aGlzIGZ1bmN0aW9uIGFs d2F5cyBnb2VzIGJhY2sgdG8gdGhlDQpzdGFydGluZyBwb2ludCB3aGVuIG5vIG1hdGNoIGlzIGZv dW5kLiINCiAgKGxldCogKChsaW1pdCAoaWYgKDwgbiAwKSAocG9pbnQtbWluKSAocG9pbnQtbWF4 KSkpDQoJIChzZWFyY2gtZnVuYyAoaWYgKDwgbiAwKQ0KCQkJICAncHJldmlvdXMtc2luZ2xlLWNo YXItcHJvcGVydHktY2hhbmdlDQoJCQknbmV4dC1zaW5nbGUtY2hhci1wcm9wZXJ0eS1jaGFuZ2Up KQ0KCSAobiAoYWJzIG4pKQ0KCSAocG9zIChwb2ludCkpDQoJIHAxKQ0KICAgIChjYXRjaCAnZXhp dA0KICAgICAgKHdoaWxlIChzZXRxIHAxIChmdW5jYWxsIHNlYXJjaC1mdW5jIChwb2ludCkgJ29y Zy10eXBlKSkNCgkod2hlbiAoZXF1YWwgcDEgbGltaXQpDQoJICAoZ290by1jaGFyIHBvcykNCgkg IChlcnJvciAiTm8gbW9yZSBtYXRjaGVzIikpDQoJKHdoZW4gKGVxdWFsIChnZXQtY2hhci1wcm9w ZXJ0eSBwMSAnb3JnLXR5cGUpICdvcmctb2NjdXIpDQoJICAoc2V0cSBuICgxLSBuKSkNCgkgICh3 aGVuICg9IG4gMCkNCgkgICAgKGdvdG8tY2hhciBwMSkNCgkgICAgKHRocm93ICdleGl0IChwb2lu dCkpKSkNCgkoZ290by1jaGFyIHAxKSkNCiAgICAgIChnb3RvLWNoYXIgcDEpDQogICAgICAoZXJy b3IgIk5vIG1vcmUgbWF0Y2hlcyIpKSkpDQoNCihkZWZ1biBvcmctc2hvdy1jb250ZXh0ICgmb3B0 aW9uYWwga2V5KQ0KICAiTWFrZSBzdXJlIHBvaW50IGFuZCBjb250ZXh0IGFyZSB2aXNpYmxlLg0K SG93IG11Y2ggY29udGV4dCBpcyBzaG93biBkZXBlbmRzIHVwb24gdGhlIHZhcmlhYmxlcw0KYG9y Zy1zaG93LWhpZXJhcmNoeS1hYm92ZScsIGBvcmctc2hvdy1mb2xsb3dpbmctaGVhZGluZycsDQpg b3JnLXNob3ctZW50cnktYmVsb3cnIGFuZCBgb3JnLXNob3ctc2libGluZ3MnLiINCiAgKGxldCAo KGhlYWRpbmctcCAgIChvcmctYXQtaGVhZGluZy1wIHQpKQ0KCShoaWVyYXJjaHktcCAob3JnLWdl dC1hbGlzdC1vcHRpb24gb3JnLXNob3ctaGllcmFyY2h5LWFib3ZlIGtleSkpDQoJKGZvbGxvd2lu Zy1wIChvcmctZ2V0LWFsaXN0LW9wdGlvbiBvcmctc2hvdy1mb2xsb3dpbmctaGVhZGluZyBrZXkp KQ0KCShlbnRyeS1wICAgICAob3JnLWdldC1hbGlzdC1vcHRpb24gb3JnLXNob3ctZW50cnktYmVs b3cga2V5KSkNCgkoc2libGluZ3MtcCAgKG9yZy1nZXQtYWxpc3Qtb3B0aW9uIG9yZy1zaG93LXNp YmxpbmdzIGtleSkpKQ0KICAgIDs7IFNob3cgaGVhZGluZyBvciBlbnRyeSB0ZXh0DQogICAgKGlm IChhbmQgaGVhZGluZy1wIChub3QgZW50cnktcCkpDQoJKG9yZy1mbGFnLWhlYWRpbmcgbmlsKSAg ICA7IG9ubHkgc2hvdyB0aGUgaGVhZGluZw0KICAgICAgKGFuZCAob3IgZW50cnktcCAob3V0bGlu ZS1pbnZpc2libGUtcCkgKG9yZy1pbnZpc2libGUtcDIpKQ0KCSAgIChvcmctc2hvdy1oaWRkZW4t ZW50cnkpKSkgICAgOyBzaG93IGVudGlyZSBlbnRyeQ0KICAgICh3aGVuIGZvbGxvd2luZy1wDQog ICAgICA7OyBTaG93IG5leHQgc2libGluZywgb3IgaGVhZGluZyBiZWxvdyB0ZXh0DQogICAgICAo c2F2ZS1leGN1cnNpb24NCgkoYW5kIChpZiBoZWFkaW5nLXAgKG9yZy1nb3RvLXNpYmxpbmcpIChv dXRsaW5lLW5leHQtaGVhZGluZykpDQoJICAgICAob3JnLWZsYWctaGVhZGluZyBuaWwpKSkpDQog ICAgKHdoZW4gc2libGluZ3MtcCAob3JnLXNob3ctc2libGluZ3MpKQ0KICAgICh3aGVuIGhpZXJh cmNoeS1wDQogICAgICA7OyBzaG93IGFsbCBoaWdoZXIgaGVhZGluZ3MsIHBvc3NpYmx5IHdpdGgg c2libGluZ3MNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCSh3aGlsZSAoYW5kIChjb25kaXRpb24t Y2FzZSBuaWwNCgkJCShwcm9nbiAob3JnLXVwLWhlYWRpbmctYWxsIDEpIHQpDQoJCSAgICAgIChl cnJvciBuaWwpKQ0KCQkgICAgKG5vdCAoYm9icCkpKQ0KCSAgKG9yZy1mbGFnLWhlYWRpbmcgbmls KQ0KCSAgKHdoZW4gc2libGluZ3MtcCAob3JnLXNob3ctc2libGluZ3MpKSkpKSkpDQoNCihkZWZ2 YXIgb3JnLXJldmVhbC1zdGFydC1ob29rIG5pbA0KICAiSG9vayBydW4gYmVmb3JlIHJldmVhbGlu ZyBhIGxvY2F0aW9uLiIpDQoNCihkZWZ1biBvcmctcmV2ZWFsICgmb3B0aW9uYWwgc2libGluZ3Mp DQogICJTaG93IGN1cnJlbnQgZW50cnksIGhpZXJhcmNoeSBhYm92ZSBpdCwgYW5kIHRoZSBmb2xs b3dpbmcgaGVhZGxpbmUuDQpUaGlzIGNhbiBiZSB1c2VkIHRvIHNob3cgYSBjb25zaXN0ZW50IHNl dCBvZiBjb250ZXh0IGFyb3VuZCBsb2NhdGlvbnMNCmV4cG9zZWQgd2l0aCBgb3JnLXNob3ctaGll cmFyY2h5LWFib3ZlJyBvciBgb3JnLXNob3ctZm9sbG93aW5nLWhlYWRpbmcnDQpub3QgdCBmb3Ig dGhlIHNlYXJjaCBjb250ZXh0Lg0KDQpXaXRoIG9wdGlvbmFsIGFyZ3VtZW50IFNJQkxJTkdTLCBv biBlYWNoIGxldmVsIG9mIHRoZSBoaWVyYXJjaHkgYWxsDQpzaWJsaW5ncyBhcmUgc2hvd24uICBU aGlzIHJlcGFpcnMgdGhlIHRyZWUgc3RydWN0dXJlIHRvIHdoYXQgaXQgd291bGQNCmxvb2sgbGlr ZSB3aGVuIG9wZW5lZCB3aXRoIGhpZXJhcmNoaWNhbCBjYWxscyB0byBgb3JnLWN5Y2xlJy4NCldp dGggZG91YmxlIG9wdGlvbmFsIGFyZ3VtZW50IFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gXFxbdW5p dmVyc2FsLWFyZ3VtZW50XSwgXA0KZ28gdG8gdGhlIHBhcmVudCBhbmQgc2hvdyB0aGUNCmVudGly ZSB0cmVlLiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgKHJ1bi1ob29rcyAnb3JnLXJldmVhbC1z dGFydC1ob29rKQ0KICAobGV0ICgob3JnLXNob3ctaGllcmFyY2h5LWFib3ZlIHQpDQoJKG9yZy1z aG93LWZvbGxvd2luZy1oZWFkaW5nIHQpDQoJKG9yZy1zaG93LXNpYmxpbmdzIChpZiBzaWJsaW5n cyB0IG9yZy1zaG93LXNpYmxpbmdzKSkpDQogICAgKG9yZy1zaG93LWNvbnRleHQgbmlsKSkNCiAg KHdoZW4gKGVxdWFsIHNpYmxpbmdzICcoMTYpKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAg KHdoZW4gKG9yZy11cC1oZWFkaW5nLXNhZmUpDQoJKG9yZy1zaG93LXN1YnRyZWUpDQoJKHJ1bi1o b29rLXdpdGgtYXJncyAnb3JnLWN5Y2xlLWhvb2sgJ3N1YnRyZWUpKSkpKQ0KDQooZGVmdW4gb3Jn LWhpZ2hsaWdodC1uZXctbWF0Y2ggKGJlZyBlbmQpDQogICJIaWdobGlnaHQgZnJvbSBCRUcgdG8g RU5EIGFuZCBtYXJrIHRoZSBoaWdobGlnaHQgaXMgYW4gb2NjdXIgaGVhZGxpbmUuIg0KICAobGV0 ICgob3YgKG1ha2Utb3ZlcmxheSBiZWcgZW5kKSkpDQogICAgKG92ZXJsYXktcHV0IG92ICdmYWNl ICdzZWNvbmRhcnktc2VsZWN0aW9uKQ0KICAgIChvdmVybGF5LXB1dCBvdiAnb3JnLXR5cGUgJ29y Zy1vY2N1cikNCiAgICAocHVzaCBvdiBvcmctb2NjdXItaGlnaGxpZ2h0cykpKQ0KDQooZGVmdW4g b3JnLXJlbW92ZS1vY2N1ci1oaWdobGlnaHRzICgmb3B0aW9uYWwgYmVnIGVuZCBub3JlbW92ZSkN CiAgIlJlbW92ZSB0aGUgb2NjdXIgaGlnaGxpZ2h0cyBmcm9tIHRoZSBidWZmZXIuDQpCRUcgYW5k IEVORCBhcmUgaWdub3JlZC4gIElmIE5PUkVNT1ZFIGlzIG5pbCwgcmVtb3ZlIHRoaXMgZnVuY3Rp b24NCmZyb20gdGhlIGBiZWZvcmUtY2hhbmdlLWZ1bmN0aW9ucycgaW4gdGhlIGN1cnJlbnQgYnVm ZmVyLiINCiAgKGludGVyYWN0aXZlKQ0KICAodW5sZXNzIG9yZy1pbmhpYml0LWhpZ2hsaWdodC1y ZW1vdmFsDQogICAgKG1hcGMgJ2RlbGV0ZS1vdmVybGF5IG9yZy1vY2N1ci1oaWdobGlnaHRzKQ0K ICAgIChzZXRxIG9yZy1vY2N1ci1oaWdobGlnaHRzIG5pbCkNCiAgICAoc2V0cSBvcmctb2NjdXIt cGFyYW1ldGVycyBuaWwpDQogICAgKHVubGVzcyBub3JlbW92ZQ0KICAgICAgKHJlbW92ZS1ob29r ICdiZWZvcmUtY2hhbmdlLWZ1bmN0aW9ucw0KCQkgICAnb3JnLXJlbW92ZS1vY2N1ci1oaWdobGln aHRzICdsb2NhbCkpKSkNCg0KOzs7OyBQcmlvcml0aWVzDQoNCihkZWZ2YXIgb3JnLXByaW9yaXR5 LXJlZ2V4cCAiLio/XFwoXFxbI1xcKFtBLVowLTldXFwpXFxdID9cXCkiDQogICJSZWd1bGFyIGV4 cHJlc3Npb24gbWF0Y2hpbmcgdGhlIHByaW9yaXR5IGluZGljYXRvci4iKQ0KDQooZGVmdmFyIG9y Zy1yZW1vdmUtcHJpb3JpdHktbmV4dC10aW1lIG5pbCkNCg0KKGRlZnVuIG9yZy1wcmlvcml0eS11 cCAoKQ0KICAiSW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoZSBjdXJyZW50IGl0ZW0uIg0KICAo aW50ZXJhY3RpdmUpDQogIChvcmctcHJpb3JpdHkgJ3VwKSkNCg0KKGRlZnVuIG9yZy1wcmlvcml0 eS1kb3duICgpDQogICJEZWNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgaXRlbS4i DQogIChpbnRlcmFjdGl2ZSkNCiAgKG9yZy1wcmlvcml0eSAnZG93bikpDQoNCihkZWZ1biBvcmct cHJpb3JpdHkgKCZvcHRpb25hbCBhY3Rpb24gc2hvdykNCiAgIkNoYW5nZSB0aGUgcHJpb3JpdHkg b2YgYW4gaXRlbS4NCkFDVElPTiBjYW4gYmUgYHNldCcsIGB1cCcsIGBkb3duJywgb3IgYSBjaGFy YWN0ZXIuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoaWYgKGVxdWFsIGFjdGlvbiAnKDQpKQ0K ICAgICAgKG9yZy1zaG93LXByaW9yaXR5KQ0KICAgICh1bmxlc3Mgb3JnLWVuYWJsZS1wcmlvcml0 eS1jb21tYW5kcw0KICAgICAgKHVzZXItZXJyb3IgIlByaW9yaXR5IGNvbW1hbmRzIGFyZSBkaXNh YmxlZCIpKQ0KICAgIChzZXRxIGFjdGlvbiAob3IgYWN0aW9uICdzZXQpKQ0KICAgIChsZXQgKGN1 cnJlbnQgbmV3IG5ld3MgaGF2ZSByZW1vdmUpDQogICAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAg ICAgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkNCiAgICAgICAgKGlmIChsb29raW5nLWF0IG9yZy1w cmlvcml0eS1yZWdleHApDQogICAgICAgICAgICAoc2V0cSBjdXJyZW50IChzdHJpbmctdG8tY2hh ciAobWF0Y2gtc3RyaW5nIDIpKQ0KICAgICAgICAgICAgICAgICAgaGF2ZSB0KSkNCiAgICAgICAg KGNvbmQNCiAgICAgICAgICgoZXEgYWN0aW9uICdyZW1vdmUpDQogICAgICAgICAgKHNldHEgcmVt b3ZlIHQgbmV3ID9cICkpDQogICAgICAgICAoKG9yIChlcSBhY3Rpb24gJ3NldCkNCiAgICAgICAg ICAgICAgKGlmIChmZWF0dXJlcCAneGVtYWNzKSAoY2hhcmFjdGVycCBhY3Rpb24pIChpbnRlZ2Vy cCBhY3Rpb24pKSkNCiAgICAgICAgICAoaWYgKG5vdCAoZXEgYWN0aW9uICdzZXQpKQ0KICAgICAg ICAgICAgICAoc2V0cSBuZXcgYWN0aW9uKQ0KICAgICAgICAgICAgKG1lc3NhZ2UgIlByaW9yaXR5 ICVjLSVjLCBTUEMgdG8gcmVtb3ZlOiAiDQogICAgICAgICAgICAgICAgICAgICBvcmctaGlnaGVz dC1wcmlvcml0eSBvcmctbG93ZXN0LXByaW9yaXR5KQ0KICAgICAgICAgICAgKHNhdmUtbWF0Y2gt ZGF0YQ0KICAgICAgICAgICAgICAoc2V0cSBuZXcgKHJlYWQtY2hhci1leGNsdXNpdmUpKSkpDQog ICAgICAgICAgKGlmIChhbmQgKD0gKHVwY2FzZSBvcmctaGlnaGVzdC1wcmlvcml0eSkgb3JnLWhp Z2hlc3QtcHJpb3JpdHkpDQogICAgICAgICAgICAgICAgICAgKD0gKHVwY2FzZSBvcmctbG93ZXN0 LXByaW9yaXR5KSBvcmctbG93ZXN0LXByaW9yaXR5KSkNCiAgICAgICAgICAgICAgKHNldHEgbmV3 ICh1cGNhc2UgbmV3KSkpDQogICAgICAgICAgKGNvbmQgKChlcXVhbCBuZXcgP1wgKSAoc2V0cSBy ZW1vdmUgdCkpDQogICAgICAgICAgICAgICAgKChvciAoPCAodXBjYXNlIG5ldykgb3JnLWhpZ2hl c3QtcHJpb3JpdHkpICg+ICh1cGNhc2UgbmV3KSBvcmctbG93ZXN0LXByaW9yaXR5KSkNCiAgICAg ICAgICAgICAgICAgKHVzZXItZXJyb3IgIlByaW9yaXR5IG11c3QgYmUgYmV0d2VlbiBgJWMnIGFu ZCBgJWMnIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmctaGlnaGVzdC1wcmlvcml0 eSBvcmctbG93ZXN0LXByaW9yaXR5KSkpKQ0KICAgICAgICAgKChlcSBhY3Rpb24gJ3VwKQ0KICAg ICAgICAgIChzZXRxIG5ldyAoaWYgaGF2ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgKDEtIGN1 cnJlbnQpICA7IG5vcm1hbCBjeWNsaW5nDQogICAgICAgICAgICAgICAgICAgICAgOzsgbGFzdCBw cmlvcml0eSB3YXMgZW1wdHkNCiAgICAgICAgICAgICAgICAgICAgICAoaWYgKGVxIGxhc3QtY29t bWFuZCB0aGlzLWNvbW1hbmQpDQogICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy1sb3dlc3Qt cHJpb3JpdHkgIDsgd3JhcCBhcm91bmQgZW1wdHkgdG8gbG93ZXN0DQogICAgICAgICAgICAgICAg ICAgICAgICA7OyBkZWZhdWx0DQogICAgICAgICAgICAgICAgICAgICAgICAoaWYgb3JnLXByaW9y aXR5LXN0YXJ0LWN5Y2xlLXdpdGgtZGVmYXVsdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg IG9yZy1kZWZhdWx0LXByaW9yaXR5DQogICAgICAgICAgICAgICAgICAgICAgICAgICgxLSBvcmct ZGVmYXVsdC1wcmlvcml0eSkpKSkpKQ0KICAgICAgICAgKChlcSBhY3Rpb24gJ2Rvd24pDQogICAg ICAgICAgKHNldHEgbmV3IChpZiBoYXZlDQogICAgICAgICAgICAgICAgICAgICAgICAoMSsgY3Vy cmVudCkgIDsgbm9ybWFsIGN5Y2xpbmcNCiAgICAgICAgICAgICAgICAgICAgICA7OyBsYXN0IHBy aW9yaXR5IHdhcyBlbXB0eQ0KICAgICAgICAgICAgICAgICAgICAgIChpZiAoZXEgbGFzdC1jb21t YW5kIHRoaXMtY29tbWFuZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLWhpZ2hlc3Qt cHJpb3JpdHkgIDsgd3JhcCBhcm91bmQgZW1wdHkgdG8gaGlnaGVzdA0KICAgICAgICAgICAgICAg ICAgICAgICAgOzsgZGVmYXVsdA0KICAgICAgICAgICAgICAgICAgICAgICAgKGlmIG9yZy1wcmlv cml0eS1zdGFydC1jeWNsZS13aXRoLWRlZmF1bHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvcmctZGVmYXVsdC1wcmlvcml0eQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAoMSsgb3Jn LWRlZmF1bHQtcHJpb3JpdHkpKSkpKSkNCiAgICAgICAgICh0ICh1c2VyLWVycm9yICJJbnZhbGlk IGFjdGlvbiIpKSkNCiAgICAgICAgKGlmIChvciAoPCAodXBjYXNlIG5ldykgb3JnLWhpZ2hlc3Qt cHJpb3JpdHkpDQogICAgICAgICAgICAgICAgKD4gKHVwY2FzZSBuZXcpIG9yZy1sb3dlc3QtcHJp b3JpdHkpKQ0KICAgICAgICAgICAgKGlmIChhbmQgKG1lbXEgYWN0aW9uICcodXAgZG93bikpDQog ICAgICAgICAgICAgICAgICAgICAobm90IGhhdmUpIChub3QgKGVxIGxhc3QtY29tbWFuZCB0aGlz LWNvbW1hbmQpKSkNCiAgICAgICAgICAgICAgICA7OyBgbmV3JyBpcyBmcm9tIGRlZmF1bHQgcHJp b3JpdHkNCiAgICAgICAgICAgICAgICAoZXJyb3INCiAgICAgICAgICAgICAgICAgIlRoZSBkZWZh dWx0IGNhbiBub3QgYmUgc2V0LCBzZWUgYG9yZy1kZWZhdWx0LXByaW9yaXR5JyB3aHkiKQ0KICAg ICAgICAgICAgICA7OyBub3JtYWwgY3ljbGluZzogYG5ldycgaXMgYmV5b25kIGhpZ2hlc3QvbG93 ZXN0IHByaW9yaXR5DQogICAgICAgICAgICAgIDs7IGFuZCBpcyB3cmFwcGVkIGFyb3VuZCB0byB0 aGUgZW1wdHkgcHJpb3JpdHkNCiAgICAgICAgICAgICAgKHNldHEgcmVtb3ZlIHQpKSkNCiAgICAg ICAgKHNldHEgbmV3cyAoZm9ybWF0ICIlYyIgbmV3KSkNCiAgICAgICAgKGlmIGhhdmUNCiAgICAg ICAgICAgIChpZiByZW1vdmUNCiAgICAgICAgICAgICAgICAocmVwbGFjZS1tYXRjaCAiIiB0IHQg bmlsIDEpDQogICAgICAgICAgICAgIChyZXBsYWNlLW1hdGNoIG5ld3MgdCB0IG5pbCAyKSkNCiAg ICAgICAgICAoaWYgcmVtb3ZlDQogICAgICAgICAgICAgICh1c2VyLWVycm9yICJObyBwcmlvcml0 eSBjb29raWUgZm91bmQgaW4gbGluZSIpDQogICAgICAgICAgICAobGV0ICgoY2FzZS1mb2xkLXNl YXJjaCBuaWwpKQ0KICAgICAgICAgICAgICAobG9va2luZy1hdCBvcmctdG9kby1saW5lLXJlZ2V4 cCkpDQogICAgICAgICAgICAoaWYgKG1hdGNoLWVuZCAyKQ0KICAgICAgICAgICAgICAgIChwcm9n bg0KICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDIpKQ0KICAgICAgICAg ICAgICAgICAgKGluc2VydCAiIFsjIiBuZXdzICJdIikpDQogICAgICAgICAgICAgIChnb3RvLWNo YXIgKG1hdGNoLWJlZ2lubmluZyAzKSkNCiAgICAgICAgICAgICAgKGluc2VydCAiWyMiIG5ld3Mg Il0gIikpKSkNCiAgICAgICAgKG9yZy1wcmVzZXJ2ZS1sYyAob3JnLXNldC10YWdzIG5pbCAnYWxp Z24pKSkNCiAgICAgIChpZiByZW1vdmUNCiAgICAgICAgICAobWVzc2FnZSAiUHJpb3JpdHkgcmVt b3ZlZCIpDQogICAgICAgIChtZXNzYWdlICJQcmlvcml0eSBvZiBjdXJyZW50IGl0ZW0gc2V0IHRv ICVzIiBuZXdzKSkpKSkNCg0KKGRlZnVuIG9yZy1zaG93LXByaW9yaXR5ICgpDQogICJTaG93IHRo ZSBwcmlvcml0eSBvZiB0aGUgY3VycmVudCBpdGVtLg0KVGhpcyBwcmlvcml0eSBpcyBjb21wb3Nl ZCBvZiB0aGUgbWFpbiBwcmlvcml0eSBnaXZlbiB3aXRoIHRoZSBbI0FdIGNvb2tpZXMsDQphbmQg YnkgYWRkaXRpb25hbCBpbnB1dCBmcm9tIHRoZSBhZ2Ugb2YgYSBzY2hlZHVsZXMgb3IgZGVhZGxp bmUgZW50cnkuIg0KICAoaW50ZXJhY3RpdmUpDQogIChsZXQgKChwcmkgKGlmIChlcSBtYWpvci1t b2RlICdvcmctYWdlbmRhLW1vZGUpDQoJCSAob3JnLWdldC1hdC1ib2wgJ3ByaW9yaXR5KQ0KCSAg ICAgICAoc2F2ZS1leGN1cnNpb24NCgkJIChzYXZlLW1hdGNoLWRhdGENCgkJICAgKGJlZ2lubmlu Zy1vZi1saW5lKQ0KCQkgICAoYW5kIChsb29raW5nLWF0IG9yZy1oZWFkaW5nLXJlZ2V4cCkNCgkJ CShvcmctZ2V0LXByaW9yaXR5IChtYXRjaC1zdHJpbmcgMCkpKSkpKSkpDQogICAgKG1lc3NhZ2Ug IlByaW9yaXR5IGlzICVkIiAoaWYgcHJpIHByaSAtMTAwMCkpKSkNCg0KKGRlZnVuIG9yZy1nZXQt cHJpb3JpdHkgKHMpDQogICJGaW5kIHByaW9yaXR5IGNvb2tpZSBhbmQgcmV0dXJuIHByaW9yaXR5 LiINCiAgKHNhdmUtbWF0Y2gtZGF0YQ0KICAgIChpZiAoZnVuY3Rpb25wIG9yZy1nZXQtcHJpb3Jp dHktZnVuY3Rpb24pDQoJKGZ1bmNhbGwgb3JnLWdldC1wcmlvcml0eS1mdW5jdGlvbikNCiAgICAg IChpZiAobm90IChzdHJpbmctbWF0Y2ggb3JnLXByaW9yaXR5LXJlZ2V4cCBzKSkNCgkgICgqIDEw MDAgKC0gb3JnLWxvd2VzdC1wcmlvcml0eSBvcmctZGVmYXVsdC1wcmlvcml0eSkpDQoJKCogMTAw MCAoLSBvcmctbG93ZXN0LXByaW9yaXR5DQoJCSAgIChzdHJpbmctdG8tY2hhciAobWF0Y2gtc3Ry aW5nIDIgcykpKSkpKSkpDQoNCjs7OzsgVGFncw0KDQooZGVmdmFyIG9yZy1hZ2VuZGEtYXJjaGl2 ZXMtbW9kZSkNCihkZWZ2YXIgb3JnLW1hcC1jb250aW51ZS1mcm9tIG5pbA0KICAiUG9zaXRpb24g ZnJvbSB3aGVyZSBtYXBwaW5nIHNob3VsZCBjb250aW51ZS4NCkNhbiBiZSBzZXQgYnkgdGhlIGFj dGlvbiBhcmd1bWVudCB0byBgb3JnLXNjYW4tdGFncycgYW5kIGBvcmctbWFwLWVudHJpZXMnLiIp DQoNCihkZWZ2YXIgb3JnLXNjYW5uZXItdGFncyBuaWwNCiAgIlRoZSBjdXJyZW50IHRhZyBsaXN0 IHdoaWxlIHRoZSB0YWdzIHNjYW5uZXIgaXMgcnVubmluZy4iKQ0KKGRlZnZhciBvcmctdHJ1c3Qt c2Nhbm5lci10YWdzIG5pbA0KICAiU2hvdWxkIGBvcmctZ2V0LXRhZ3MtYXQnIHVzZSB0aGUgdGFn cyBmb3IgdGhlIHNjYW5uZXIuDQpUaGlzIGlzIGZvciBpbnRlcm5hbCBkeW5hbWljYWwgc2NvcGlu ZyBvbmx5Lg0KV2hlbiB0aGlzIGlzIG5vbi1uaWwsIHRoZSBmdW5jdGlvbiBgb3JnLWdldC10YWdz LWF0JyB3aWxsIHJldHVybiB0aGUgdmFsdWUNCm9mIGBvcmctc2Nhbm5lci10YWdzJyBpbnN0ZWFk IG9mIGJ1aWxkaW5nIHRoZSBsaXN0IGJ5IGl0c2VsZi4gIFRoaXMNCmNhbiBsZWFkIHRvIGxhcmdl IHNwZWVkLXVwcyB3aGVuIHRoZSB0YWdzIHNjYW5uZXIgaXMgdXNlZCBpbiBhIGZpbGUgd2l0aA0K bWFueSBlbnRyaWVzLCBhbmQgd2hlbiB0aGUgbGlzdCBvZiB0YWdzIGlzIHJldHJpZXZlZCwgZm9y IGV4YW1wbGUgdG8NCm9idGFpbiBhIGxpc3Qgb2YgcHJvcGVydGllcy4gIEJ1aWxkaW5nIHRoZSB0 YWdzIGxpc3QgZm9yIGVhY2ggZW50cnkgaW4gc3VjaA0KYSBmaWxlIGJlY29tZXMgYW4gTl4yIG9w ZXJhdGlvbiAtIGJ1dCB3aXRoIHRoaXMgdmFyaWFibGUgc2V0LCBpdCBzY2FsZXMNCmFzIE4uIikN Cg0KKGRlZnVuIG9yZy1zY2FuLXRhZ3MgKGFjdGlvbiBtYXRjaGVyIHRvZG8tb25seSAmb3B0aW9u YWwgc3RhcnQtbGV2ZWwpDQogICJTY2FuIGhlYWRsaW5lIHRhZ3Mgd2l0aCBpbmhlcml0YW5jZSBh bmQgcHJvZHVjZSBvdXRwdXQgQUNUSU9OLg0KDQpBQ1RJT04gY2FuIGJlIGBzcGFyc2UtdHJlZScg dG8gcHJvZHVjZSBhIHNwYXJzZSB0cmVlIGluIHRoZSBjdXJyZW50IGJ1ZmZlciwNCm9yIGBhZ2Vu ZGEnIHRvIHByb2R1Y2UgYW4gZW50cnkgbGlzdCBmb3IgYW4gYWdlbmRhIHZpZXcuICBJdCBjYW4g YWxzbyBiZQ0KYSBMaXNwIGZvcm0gb3IgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQg YXQgZWFjaCBtYXRjaGVkIGhlYWRsaW5lLCBpbg0KdGhpcyBjYXNlIHRoZSByZXR1cm4gdmFsdWUg aXMgYSBsaXN0IG9mIGFsbCByZXR1cm4gdmFsdWVzIGZyb20gdGhlc2UgY2FsbHMuDQoNCk1BVENI RVIgaXMgYSBMaXNwIGZvcm0gdG8gYmUgZXZhbHVhdGVkLCB0ZXN0aW5nIGlmIGEgZ2l2ZW4gc2V0 IG9mIHRhZ3MNCnF1YWxpZmllcyBhIGhlYWRsaW5lIGZvciBpbmNsdXNpb24uICBXaGVuIFRPRE8t T05MWSBpcyBub24tbmlsLA0Kb25seSBsaW5lcyB3aXRoIGEgbm90LWRvbmUgVE9ETyBrZXl3b3Jk IGFyZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0Lg0KVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgdmFy aWFibGUgdGhhdCB3YXMgc2NvcGVkIGludG8NCmFuZCBzZXQgYnkgYG9yZy1tYWtlLXRhZ3MtbWF0 Y2hlcicgd2hlbiBpdCBjb25zdHJ1Y3RlZCBNQVRDSEVSLg0KDQpTVEFSVC1MRVZFTCBjYW4gYmUg YSBzdHJpbmcgd2l0aCBhc3Rlcmlza3MsIHJlZHVjaW5nIHRoZSBzY29wZSB0bw0KaGVhZGxpbmVz IG1hdGNoaW5nIHRoaXMgc3RyaW5nLiINCiAgKHJlcXVpcmUgJ29yZy1hZ2VuZGEpDQogIChsZXQq ICgocmUgKGNvbmNhdCAiXiINCgkJICAgICAoaWYgc3RhcnQtbGV2ZWwNCgkJCSA7OyBHZXQgdGhl IGNvcnJlY3QgbGV2ZWwgdG8gbWF0Y2gNCgkJCSAoY29uY2F0ICJcXCpcXHsiIChudW1iZXItdG8t c3RyaW5nIHN0YXJ0LWxldmVsKSAiXFx9ICIpDQoJCSAgICAgICBvcmctb3V0bGluZS1yZWdleHAp DQoJCSAgICAgIiAqXFwoXFw8XFwoIg0KCQkgICAgIChtYXBjb25jYXQgJ3JlZ2V4cC1xdW90ZSBv cmctdG9kby1rZXl3b3Jkcy0xICJcXHwiKQ0KCQkgICAgIChvcmctcmUgIlxcKVxcPlxcKT8gKlxc KC4qP1xcKVxcKDpbWzphbG51bTpdX0AjJTpdKzpcXCk/WyBcdF0qJCIpKSkNCgkgKHByb3BzIChs aXN0ICdmYWNlICdkZWZhdWx0DQoJCSAgICAgICdkb25lLWZhY2UgJ29yZy1hZ2VuZGEtZG9uZQ0K CQkgICAgICAndW5kb25lLWZhY2UgJ2RlZmF1bHQNCgkJICAgICAgJ21vdXNlLWZhY2UgJ2hpZ2hs aWdodA0KCQkgICAgICAnb3JnLW5vdC1kb25lLXJlZ2V4cCBvcmctbm90LWRvbmUtcmVnZXhwDQoJ CSAgICAgICdvcmctdG9kby1yZWdleHAgb3JnLXRvZG8tcmVnZXhwDQoJCSAgICAgICdvcmctY29t cGxleC1oZWFkaW5nLXJlZ2V4cCBvcmctY29tcGxleC1oZWFkaW5nLXJlZ2V4cA0KCQkgICAgICAn aGVscC1lY2hvDQoJCSAgICAgIChmb3JtYXQgIm1vdXNlLTIgb3IgUkVUIGp1bXAgdG8gb3JnIGZp bGUgJXMiDQoJCQkgICAgICAoYWJicmV2aWF0ZS1maWxlLW5hbWUNCgkJCSAgICAgICAob3IgKGJ1 ZmZlci1maWxlLW5hbWUgKGJ1ZmZlci1iYXNlLWJ1ZmZlcikpDQoJCQkJICAgKGJ1ZmZlci1uYW1l IChidWZmZXItYmFzZS1idWZmZXIpKSkpKSkpDQoJIChvcmctbWFwLWNvbnRpbnVlLWZyb20gbmls KQ0KICAgICAgICAgbHNwb3MgdGFncyB0YWdzLWxpc3QNCgkgKHRhZ3MtYWxpc3QgKGxpc3QgKGNv bnMgMCBvcmctZmlsZS10YWdzKSkpDQoJIChsbGFzdCAwKSBydG4gcnRuMSBsZXZlbCBjYXRlZ29y eSBpIHR4dA0KCSB0b2RvIG1hcmtlciBlbnRyeSBwcmlvcml0eSkNCiAgICAod2hlbiAobm90IChv ciAobWVtYmVyIGFjdGlvbiAnKGFnZW5kYSBzcGFyc2UtdHJlZSkpIChmdW5jdGlvbnAgYWN0aW9u KSkpDQogICAgICAoc2V0cSBhY3Rpb24gKGxpc3QgJ2xhbWJkYSBuaWwgYWN0aW9uKSkpDQogICAg KHNhdmUtZXhjdXJzaW9uDQogICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KICAgICAgKHdo ZW4gKGVxIGFjdGlvbiAnc3BhcnNlLXRyZWUpDQoJKG9yZy1vdmVydmlldykNCgkob3JnLXJlbW92 ZS1vY2N1ci1oaWdobGlnaHRzKSkNCiAgICAgICh3aGlsZSAobGV0IChjYXNlLWZvbGQtc2VhcmNo KQ0KCSAgICAgICAocmUtc2VhcmNoLWZvcndhcmQgcmUgbmlsIHQpKQ0KCShzZXRxIG9yZy1tYXAt Y29udGludWUtZnJvbSBuaWwpDQoJKGNhdGNoIDpza2lwDQoJICAoc2V0cSB0b2RvIChpZiAobWF0 Y2gtZW5kIDEpIChvcmctbWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMikpDQoJCXRhZ3MgKGlm IChtYXRjaC1lbmQgNCkgKG9yZy1tYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyA0KSkpDQoJICAo Z290by1jaGFyIChzZXRxIGxzcG9zIChtYXRjaC1iZWdpbm5pbmcgMCkpKQ0KCSAgKHNldHEgbGV2 ZWwgKG9yZy1yZWR1Y2VkLWxldmVsIChvcmctb3V0bGluZS1sZXZlbCkpDQoJCWNhdGVnb3J5IChv cmctZ2V0LWNhdGVnb3J5KSkNCgkgIChzZXRxIGkgbGxhc3QgbGxhc3QgbGV2ZWwpDQoJICA7OyBy ZW1vdmUgdGFnIGxpc3RzIGZyb20gc2FtZSBhbmQgc3VibGV2ZWxzDQoJICAod2hpbGUgKD49IGkg bGV2ZWwpDQoJICAgICh3aGVuIChzZXRxIGVudHJ5IChhc3NvYyBpIHRhZ3MtYWxpc3QpKQ0KCSAg ICAgIChzZXRxIHRhZ3MtYWxpc3QgKGRlbGV0ZSBlbnRyeSB0YWdzLWFsaXN0KSkpDQoJICAgIChz ZXRxIGkgKDEtIGkpKSkNCgkgIDs7IGFkZCB0aGUgbmV4dCB0YWdzDQoJICAod2hlbiB0YWdzDQoJ ICAgIChzZXRxIHRhZ3MgKG9yZy1zcGxpdC1zdHJpbmcgdGFncyAiOiIpDQoJCSAgdGFncy1hbGlz dA0KCQkgIChjb25zIChjb25zIGxldmVsIHRhZ3MpIHRhZ3MtYWxpc3QpKSkNCgkgIDs7IGNvbXBp bGUgdGFncyBmb3IgY3VycmVudCBoZWFkbGluZQ0KCSAgKHNldHEgdGFncy1saXN0DQoJCShpZiBv cmctdXNlLXRhZy1pbmhlcml0YW5jZQ0KCQkgICAgKGFwcGx5ICdhcHBlbmQgKG1hcGNhciAnY2Ry IChyZXZlcnNlIHRhZ3MtYWxpc3QpKSkNCgkJICB0YWdzKQ0KCQlvcmctc2Nhbm5lci10YWdzIHRh Z3MtbGlzdCkNCgkgICh3aGVuIG9yZy11c2UtdGFnLWluaGVyaXRhbmNlDQoJICAgIChzZXRjZHIg KGNhciB0YWdzLWFsaXN0KQ0KCQkgICAgKG1hcGNhciAobGFtYmRhICh4KQ0KCQkJICAgICAgKHNl dHEgeCAoY29weS1zZXF1ZW5jZSB4KSkNCgkJCSAgICAgIChvcmctYWRkLXByb3AtaW5oZXJpdGVk IHgpKQ0KCQkJICAgIChjZGFyIHRhZ3MtYWxpc3QpKSkpDQoJICAod2hlbiAoYW5kIHRhZ3Mgb3Jn LXVzZS10YWctaW5oZXJpdGFuY2UNCgkJICAgICAob3IgKG5vdCAoZXEgdCBvcmctdXNlLXRhZy1p bmhlcml0YW5jZSkpDQoJCQkgb3JnLXRhZ3MtZXhjbHVkZS1mcm9tLWluaGVyaXRhbmNlKSkNCgkg ICAgOzsgc2VsZWN0aXZlIGluaGVyaXRhbmNlLCByZW1vdmUgdW5pbmhlcml0ZWQgb25lcw0KCSAg ICAoc2V0Y2RyIChjYXIgdGFncy1hbGlzdCkNCgkJICAgIChvcmctcmVtb3ZlLXVuaW5oZXJpdGVk LXRhZ3MgKGNkYXIgdGFncy1hbGlzdCkpKSkNCgkgICh3aGVuIChhbmQNCg0KCQkgOzsgZXZhbCBt YXRjaGVyIG9ubHkgd2hlbiB0aGUgdG9kbyBjb25kaXRpb24gaXMgT0sNCgkJIChhbmQgKG9yIChu b3QgdG9kby1vbmx5KSAobWVtYmVyIHRvZG8gb3JnLW5vdC1kb25lLWtleXdvcmRzKSkNCgkJICAg ICAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggdCkgKG9yZy10cnVzdC1zY2FubmVyLXRhZ3MgdCkp DQoJCQkoZXZhbCBtYXRjaGVyKSkpDQoNCgkJIDs7IENhbGwgdGhlIHNraXBwZXIsIGJ1dCByZXR1 cm4gdCBpZiBpdCBkb2VzIG5vdCBza2lwLA0KCQkgOzsgc28gdGhhdCB0aGUgYGFuZCcgZm9ybSBj b250aW51ZXMgZXZhbHVhdGluZw0KCQkgKHByb2duDQoJCSAgICh1bmxlc3MgKGVxIGFjdGlvbiAn c3BhcnNlLXRyZWUpIChvcmctYWdlbmRhLXNraXApKQ0KCQkgICB0KQ0KDQoJCSA7OyBDaGVjayBp ZiB0aW1lc3RhbXBzIGFyZSBkZXNlbGVjdGluZyB0aGlzIGVudHJ5DQoJCSAob3IgKG5vdCB0b2Rv LW9ubHkpDQoJCSAgICAgKGFuZCAobWVtYmVyIHRvZG8gb3JnLW5vdC1kb25lLWtleXdvcmRzKQ0K CQkJICAob3IgKG5vdCBvcmctYWdlbmRhLXRhZ3MtdG9kby1ob25vci1pZ25vcmUtb3B0aW9ucykN CgkJCSAgICAgIChub3QgKG9yZy1hZ2VuZGEtY2hlY2stZm9yLXRpbWVzdGFtcC1hcy1yZWFzb24t dG8taWdub3JlLXRvZG8taXRlbSkpKSkpKQ0KDQoJICAgIDs7IHNlbGVjdCB0aGlzIGhlYWRsaW5l DQoJICAgIChjb25kDQoJICAgICAoKGVxIGFjdGlvbiAnc3BhcnNlLXRyZWUpDQoJICAgICAgKGFu ZCBvcmctaGlnaGxpZ2h0LXNwYXJzZS10cmVlLW1hdGNoZXMNCgkJICAgKG9yZy1nZXQtaGVhZGlu ZykgKG1hdGNoLWVuZCAwKQ0KCQkgICAob3JnLWhpZ2hsaWdodC1uZXctbWF0Y2gNCgkJICAgICht YXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpDQoJICAgICAgKG9yZy1zaG93LWNvbnRl eHQgJ3RhZ3MtdHJlZSkpDQoJICAgICAoKGVxIGFjdGlvbiAnYWdlbmRhKQ0KCSAgICAgIChzZXRx IHR4dCAob3JnLWFnZW5kYS1mb3JtYXQtaXRlbQ0KCQkJICIiDQoJCQkgKGNvbmNhdA0KCQkJICAo aWYgKGVxIG9yZy10YWdzLW1hdGNoLWxpc3Qtc3VibGV2ZWxzICdpbmRlbnRlZCkNCgkJCSAgICAg IChtYWtlLXN0cmluZyAoMS0gbGV2ZWwpID8uKSAiIikNCgkJCSAgKG9yZy1nZXQtaGVhZGluZykp DQoJCQkgbGV2ZWwgY2F0ZWdvcnkNCgkJCSB0YWdzLWxpc3QpDQoJCSAgICBwcmlvcml0eSAob3Jn LWdldC1wcmlvcml0eSB0eHQpKQ0KCSAgICAgIChnb3RvLWNoYXIgbHNwb3MpDQoJICAgICAgKHNl dHEgbWFya2VyIChvcmctYWdlbmRhLW5ldy1tYXJrZXIpKQ0KCSAgICAgIChvcmctYWRkLXByb3Bz IHR4dCBwcm9wcw0KCQknb3JnLW1hcmtlciBtYXJrZXIgJ29yZy1oZC1tYXJrZXIgbWFya2VyICdv cmctY2F0ZWdvcnkgY2F0ZWdvcnkNCgkJJ3RvZG8tc3RhdGUgdG9kbw0KCQkncHJpb3JpdHkgcHJp b3JpdHkgJ3R5cGUgInRhZ3NtYXRjaCIpDQoJICAgICAgKHB1c2ggdHh0IHJ0bikpDQoJICAgICAo KGZ1bmN0aW9ucCBhY3Rpb24pDQoJICAgICAgKHNldHEgb3JnLW1hcC1jb250aW51ZS1mcm9tIG5p bCkNCgkgICAgICAoc2F2ZS1leGN1cnNpb24NCgkJKHNldHEgcnRuMSAoZnVuY2FsbCBhY3Rpb24p KQ0KCQkocHVzaCBydG4xIHJ0bikpKQ0KCSAgICAgKHQgKHVzZXItZXJyb3IgIkludmFsaWQgYWN0 aW9uIikpKQ0KDQoJICAgIDs7IGlmIHdlIGFyZSB0byBza2lwIHN1YmxldmVscywganVtcCB0byBl bmQgb2Ygc3VidHJlZQ0KCSAgICAodW5sZXNzIG9yZy10YWdzLW1hdGNoLWxpc3Qtc3VibGV2ZWxz DQoJICAgICAgKG9yZy1lbmQtb2Ytc3VidHJlZSB0KQ0KCSAgICAgIChiYWNrd2FyZC1jaGFyIDEp KSkpDQoJOzsgR2V0IHRoZSBjb3JyZWN0IHBvc2l0aW9uIGZyb20gd2hlcmUgdG8gY29udGludWUN CgkoaWYgb3JnLW1hcC1jb250aW51ZS1mcm9tDQoJICAgIChnb3RvLWNoYXIgb3JnLW1hcC1jb250 aW51ZS1mcm9tKQ0KCSAgKGFuZCAoPSAocG9pbnQpIGxzcG9zKSAoZW5kLW9mLWxpbmUgMSkpKSkp DQogICAgKHdoZW4gKGFuZCAoZXEgYWN0aW9uICdzcGFyc2UtdHJlZSkNCgkgICAgICAgKG5vdCBv cmctc3BhcnNlLXRyZWUtb3Blbi1hcmNoaXZlZC10cmVlcykpDQogICAgICAob3JnLWhpZGUtYXJj aGl2ZWQtc3VidHJlZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpKQ0KICAgIChucmV2ZXJzZSBy dG4pKSkNCg0KKGRlZnVuIG9yZy1yZW1vdmUtdW5pbmhlcml0ZWQtdGFncyAodGFncykNCiAgIlJl bW92ZSBhbGwgdGFncyB0aGF0IGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGhlIGxpc3QgVEFHUy4i DQogIChjb25kDQogICAoKGVxIG9yZy11c2UtdGFnLWluaGVyaXRhbmNlIHQpDQogICAgKGlmIG9y Zy10YWdzLWV4Y2x1ZGUtZnJvbS1pbmhlcml0YW5jZQ0KCShvcmctZGVsZXRlLWFsbCBvcmctdGFn cy1leGNsdWRlLWZyb20taW5oZXJpdGFuY2UgdGFncykNCiAgICAgIHRhZ3MpKQ0KICAgKChub3Qg b3JnLXVzZS10YWctaW5oZXJpdGFuY2UpIG5pbCkNCiAgICgoc3RyaW5ncCBvcmctdXNlLXRhZy1p bmhlcml0YW5jZSkNCiAgICAoZGVscSBuaWwgKG1hcGNhcg0KCSAgICAgICAobGFtYmRhICh4KQ0K CQkgKGlmIChhbmQgKHN0cmluZy1tYXRjaCBvcmctdXNlLXRhZy1pbmhlcml0YW5jZSB4KQ0KCQkJ ICAobm90IChtZW1iZXIgeCBvcmctdGFncy1leGNsdWRlLWZyb20taW5oZXJpdGFuY2UpKSkNCgkJ ICAgICB4IG5pbCkpDQoJICAgICAgIHRhZ3MpKSkNCiAgICgobGlzdHAgb3JnLXVzZS10YWctaW5o ZXJpdGFuY2UpDQogICAgKGRlbHEgbmlsIChtYXBjYXINCgkgICAgICAgKGxhbWJkYSAoeCkNCgkJ IChpZiAobWVtYmVyIHggb3JnLXVzZS10YWctaW5oZXJpdGFuY2UpIHggbmlsKSkNCgkgICAgICAg dGFncykpKSkpDQoNCihkZWZ1biBvcmctbWF0Y2gtc3BhcnNlLXRyZWUgKCZvcHRpb25hbCB0b2Rv LW9ubHkgbWF0Y2gpDQogICJDcmVhdGUgYSBzcGFyc2UgdHJlZSBhY2NvcmRpbmcgdG8gdGFncyBz dHJpbmcgTUFUQ0guDQpNQVRDSCBjYW4gY29udGFpbiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgc2Vs ZWN0aW9uIG9mIHRhZ3MsIGxpa2UNClwiK1dPUksrVVJHRU5ULVdJVEhCT1NTXCIuDQpJZiBvcHRp b25hbCBhcmd1bWVudCBUT0RPLU9OTFkgaXMgbm9uLW5pbCwgb25seSBzZWxlY3QgbGluZXMgdGhh dCBhcmUNCmFsc28gVE9ETyBsaW5lcy4iDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChvcmctYWdl bmRhLXByZXBhcmUtYnVmZmVycyAobGlzdCAoY3VycmVudC1idWZmZXIpKSkNCiAgKG9yZy1zY2Fu LXRhZ3MgJ3NwYXJzZS10cmVlIChjZHIgKG9yZy1tYWtlLXRhZ3MtbWF0Y2hlciBtYXRjaCkpIHRv ZG8tb25seSkpDQoNCihkZWZhbGlhcyAnb3JnLXRhZ3Mtc3BhcnNlLXRyZWUgJ29yZy1tYXRjaC1z cGFyc2UtdHJlZSkNCg0KKGRlZnZhciBvcmctY2FjaGVkLXByb3BzIG5pbCkNCihkZWZ1biBvcmct Y2FjaGVkLWVudHJ5LWdldCAocG9tIHByb3BlcnR5KQ0KICAoaWYgKG9yIChlcSB0IG9yZy11c2Ut cHJvcGVydHktaW5oZXJpdGFuY2UpDQoJICAoYW5kIChzdHJpbmdwIG9yZy11c2UtcHJvcGVydHkt aW5oZXJpdGFuY2UpDQoJICAgICAgIChzdHJpbmctbWF0Y2ggb3JnLXVzZS1wcm9wZXJ0eS1pbmhl cml0YW5jZSBwcm9wZXJ0eSkpDQoJICAoYW5kIChsaXN0cCBvcmctdXNlLXByb3BlcnR5LWluaGVy aXRhbmNlKQ0KCSAgICAgICAobWVtYmVyIHByb3BlcnR5IG9yZy11c2UtcHJvcGVydHktaW5oZXJp dGFuY2UpKSkNCiAgICAgIDs7IENhY2hpbmcgaXMgbm90IHBvc3NpYmxlLCBjaGVjayBpdCBkaXJl Y3RseQ0KICAgICAgKG9yZy1lbnRyeS1nZXQgcG9tIHByb3BlcnR5ICdpbmhlcml0KQ0KICAgIDs7 IEdldCBhbGwgcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gZG8gY29tcGxpY2F0ZWQgY2hlY2tz IGVhc2lseQ0KICAgIChjZHIgKGFzc29jIHByb3BlcnR5IChvciBvcmctY2FjaGVkLXByb3BzDQoJ CQkgICAgIChzZXRxIG9yZy1jYWNoZWQtcHJvcHMNCgkJCQkgICAob3JnLWVudHJ5LXByb3BlcnRp ZXMgcG9tKSkpKSkpKQ0KDQooZGVmdW4gb3JnLWdsb2JhbC10YWdzLWNvbXBsZXRpb24tdGFibGUg KCZvcHRpb25hbCBmaWxlcykNCiAgIlJldHVybiB0aGUgbGlzdCBvZiBhbGwgdGFncyBpbiBhbGwg YWdlbmRhIGJ1ZmZlci9maWxlcy4NCk9wdGlvbmFsIEZJTEVTIGFyZ3VtZW50IGlzIGEgbGlzdCBv ZiBmaWxlcyB3aGljaCBjYW4gYmUgdXNlZA0KaW5zdGVhZCBvZiB0aGUgYWdlbmRhIGZpbGVzLiIN CiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKG9yZy11bmlxdWlmeQ0KICAgICAoZGVscSBuaWwNCgkg ICAoYXBwbHkgJ2FwcGVuZA0KCQkgIChtYXBjYXINCgkJICAgKGxhbWJkYSAoZmlsZSkNCgkJICAg ICAoc2V0LWJ1ZmZlciAoZmluZC1maWxlLW5vc2VsZWN0IGZpbGUpKQ0KCQkgICAgIChhcHBlbmQg KG9yZy1nZXQtYnVmZmVyLXRhZ3MpDQoJCQkgICAgIChtYXBjYXIgKGxhbWJkYSAoeCkgKGlmIChz dHJpbmdwIChjYXItc2FmZSB4KSkNCgkJCQkJCSAgICAgKGxpc3QgKGNhci1zYWZlIHgpKSBuaWwp KQ0KCQkJCSAgICAgb3JnLXRhZy1hbGlzdCkpKQ0KCQkgICAoaWYgKGFuZCBmaWxlcyAoY2FyIGZp bGVzKSkNCgkJICAgICAgIGZpbGVzDQoJCSAgICAgKG9yZy1hZ2VuZGEtZmlsZXMpKSkpKSkpKQ0K DQooZGVmdW4gb3JnLW1ha2UtdGFncy1tYXRjaGVyIChtYXRjaCkNCiAgIkNyZWF0ZSB0aGUgVEFH Uy9UT0RPIG1hdGNoZXIgZm9ybSBmb3IgdGhlIHNlbGVjdGlvbiBzdHJpbmcgTUFUQ0guDQoNClRo ZSB2YXJpYWJsZSBgdG9kby1vbmx5JyBpcyBzY29wZWQgZHluYW1pY2FsbHkgaW50byB0aGlzIGZ1 bmN0aW9uLg0KSXQgd2lsbCBiZSBzZXQgdG8gdCBpZiB0aGUgbWF0Y2hlciByZXN0cmljdHMgbWF0 Y2hpbmcgdG8gVE9ETyBlbnRyaWVzLA0Kb3RoZXJ3aXNlIHdpbGwgbm90IGJlIHRvdWNoZWQuDQoN ClJldHVybnMgYSBjb25zIG9mIHRoZSBzZWxlY3Rpb24gc3RyaW5nIE1BVENIIGFuZCB0aGUgY29u c3RydWN0ZWQNCmxpc3AgZm9ybSBpbXBsZW1lbnRpbmcgdGhlIG1hdGNoZXIuICBUaGUgbWF0Y2hl ciBpcyB0byBiZSBldmFsdWF0ZWQNCmF0IGFuIE9yZyBlbnRyeSwgd2l0aCBwb2ludCBvbiB0aGUg aGVhZGxpbmUsIGFuZCByZXR1cm5zIHQgaWYgdGhlDQplbnRyeSBtYXRjaGVzIHRoZSBzZWxlY3Rp b24gc3RyaW5nIE1BVENILiAgVGhlIHJldHVybmVkIGxpc3AgZm9ybQ0KcmVmZXJlbmNlcyB0d28g dmFyaWFibGVzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudHJ5LCB3aGljaA0KbXVzdCBi ZSBib3VuZCBhcm91bmQgdGhlIGZvcm0ncyBldmFsdWF0aW9uOiB0b2RvLCB0aGUgVE9ETyBrZXl3 b3JkDQphdCB0aGUgZW50cnkgKG9yIG5pbCBvZiBub25lKTsgYW5kIHRhZ3MtbGlzdCwgdGhlIGxp c3Qgb2YgYWxsIHRhZ3MNCmF0IHRoZSBlbnRyeSBpbmNsdWRpbmcgaW5oZXJpdGVkIG9uZXMuICBB ZGRpdGlvbmFsbHksIHRoZSBjYXRlZ29yeQ0Kb2YgdGhlIGVudHJ5IChpZiBhbnkpIG11c3QgYmUg c3BlY2lmaWVkIGFzIHRoZSB0ZXh0IHByb3BlcnR5DQonb3JnLWNhdGVnb3J5IG9uIHRoZSBoZWFk bGluZS4NCg0KU2VlIGFsc28gYG9yZy1zY2FuLXRhZ3MnLg0KIg0KICAoZGVjbGFyZSAoc3BlY2lh bCB0b2RvLW9ubHkpKQ0KICAodW5sZXNzIChib3VuZHAgJ3RvZG8tb25seSkNCiAgICAoZXJyb3Ig ImBvcmctbWFrZS10YWdzLW1hdGNoZXInIGV4cGVjdHMgdG9kby1vbmx5IHRvIGJlIHNjb3BlZCBp biIpKQ0KICAodW5sZXNzIG1hdGNoDQogICAgOzsgR2V0IGEgbmV3IG1hdGNoIHJlcXVlc3QsIHdp dGggY29tcGxldGlvbiBhZ2FpbnN0IHRoZSBnbG9iYWwNCiAgICA7OyB0YWdzIHRhYmxlIGFuZCB0 aGUgbG9jYWwgdGFncyBpbiBjdXJyZW50IGJ1ZmZlcg0KICAgIChsZXQgKChvcmctbGFzdC10YWdz LWNvbXBsZXRpb24tdGFibGUNCgkgICAob3JnLXVuaXF1aWZ5DQoJICAgIChkZWxxIG5pbCAoYXBw ZW5kIChvcmctZ2V0LWJ1ZmZlci10YWdzKQ0KCQkJICAgICAgKG9yZy1nbG9iYWwtdGFncy1jb21w bGV0aW9uLXRhYmxlKSkpKSkpDQogICAgICAoc2V0cSBtYXRjaCAob3JnLWNvbXBsZXRpbmctcmVh ZC1uby1pDQoJCSAgICJNYXRjaDogIiAnb3JnLXRhZ3MtY29tcGxldGlvbi1mdW5jdGlvbiBuaWwg bmlsIG5pbA0KCQkgICAnb3JnLXRhZ3MtaGlzdG9yeSkpKSkNCg0KICA7OyBQYXJzZSB0aGUgc3Ry aW5nIGFuZCBjcmVhdGUgYSBsaXNwIGZvcm0NCiAgKGxldCAoKG1hdGNoMCBtYXRjaCkNCgkocmUg KG9yZy1yZSAiXiY/XFwoWy0rOl1cXCk/XFwoe1tefV0rfVxcfExFVkVMXFwoWzw9Pl1cXHsxLDJc XH1cXClcXChbMC05XStcXClcXHxcXChcXCg/OltbOmFsbnVtOl1fXStcXCg/OlxcXFwtXFwpKlxc KStcXClcXChbPD49XVxcezEsMlxcfVxcKVxcKHtbXn1dK31cXHxcIlteXCJdKlwiXFx8LT9bLjAt OV0rXFwoPzpbZUVdWy0rXT9bMC05XStcXCk/XFwpXFx8W1s6YWxudW06XV9AIyVdK1xcKSIpKQ0K CW1pbnVzIHRhZyBtbQ0KCXRhZ3NtYXRjaCB0b2RvbWF0Y2ggdGFnc21hdGNoZXIgdG9kb21hdGNo ZXIga3dkIG1hdGNoZXINCglvcnRlcm1zIHRlcm0gb3JsaXN0IHJlLXAgc3RyLXAgbGV2ZWwtcCBs ZXZlbC1vcCB0aW1lLXANCglwcm9wLXAgcG4gcHYgcG8gZ3YgcmVzdCAoc3RhcnQgMCkgKHNzIDAp KQ0KICAgIDs7IEV4cGFuZCBncm91cCB0YWdzDQogICAgKHNldHEgbWF0Y2ggKG9yZy10YWdzLWV4 cGFuZCBtYXRjaCkpDQoNCiAgICA7OyBDaGVjayBpZiB0aGVyZSBpcyBhIFRPRE8gcGFydCBvZiB0 aGlzIG1hdGNoLCB3aGljaCB3b3VsZCBiZSB0aGUNCiAgICA7OyBwYXJ0IGFmdGVyIGEgIi8iLiAg VE8gbWFrZSBzdXJlIHRoYXQgdGhpcyBzbGFzaCBpcyBub3QgcGFydCBvZg0KICAgIDs7IGEgcHJv cGVydHkgdmFsdWUgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0LCB3ZSBhbHNvIGNoZWNrIHRoYXQgdGhl cmUNCiAgICA7OyBpcyBubyAiIGFmdGVyIHRoYXQgc2xhc2guDQogICAgOzsgRmlyc3QsIGZpbmQg dGhlIGxhc3Qgc2xhc2gNCiAgICAod2hpbGUgKHN0cmluZy1tYXRjaCAiLysiIG1hdGNoIHNzKQ0K ICAgICAgKHNldHEgc3RhcnQgKG1hdGNoLWJlZ2lubmluZyAwKSBzcyAobWF0Y2gtZW5kIDApKSkN CiAgICAoaWYgKGFuZCAoc3RyaW5nLW1hdGNoICIvKyIgbWF0Y2ggc3RhcnQpDQoJICAgICAobm90 IChzYXZlLW1hdGNoLWRhdGEgKHN0cmluZy1tYXRjaCAiXCIiIG1hdGNoIHN0YXJ0KSkpKQ0KCTs7 IG1hdGNoIGNvbnRhaW5zIGFsc28gYSB0b2RvLW1hdGNoaW5nIHJlcXVlc3QNCgkocHJvZ24NCgkg IChzZXRxIHRhZ3NtYXRjaCAoc3Vic3RyaW5nIG1hdGNoIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkN CgkJdG9kb21hdGNoIChzdWJzdHJpbmcgbWF0Y2ggKG1hdGNoLWVuZCAwKSkpDQoJICAoaWYgKHN0 cmluZy1tYXRjaCAiXiEiIHRvZG9tYXRjaCkNCgkgICAgICAoc2V0cSB0b2RvLW9ubHkgdCB0b2Rv bWF0Y2ggKHN1YnN0cmluZyB0b2RvbWF0Y2ggMSkpKQ0KCSAgKGlmIChzdHJpbmctbWF0Y2ggIl5c XHMtKiQiIHRvZG9tYXRjaCkNCgkgICAgICAoc2V0cSB0b2RvbWF0Y2ggbmlsKSkpDQogICAgICA7 OyBvbmx5IG1hdGNoaW5nIHRhZ3MNCiAgICAgIChzZXRxIHRhZ3NtYXRjaCBtYXRjaCB0b2RvbWF0 Y2ggbmlsKSkNCg0KICAgIDs7IE1ha2UgdGhlIHRhZ3MgbWF0Y2hlcg0KICAgIChpZiAob3IgKG5v dCB0YWdzbWF0Y2gpIChub3QgKHN0cmluZy1tYXRjaCAiXFxTLSIgdGFnc21hdGNoKSkpDQoJKHNl dHEgdGFnc21hdGNoZXIgdCkNCiAgICAgIChzZXRxIG9ydGVybXMgKG9yZy1zcGxpdC1zdHJpbmcg dGFnc21hdGNoICJ8Iikgb3JsaXN0IG5pbCkNCiAgICAgICh3aGlsZSAoc2V0cSB0ZXJtIChwb3Ag b3J0ZXJtcykpDQoJKHdoaWxlIChhbmQgKGVxdWFsIChzdWJzdHJpbmcgdGVybSAtMSkgIlxcIikg b3J0ZXJtcykNCgkgIChzZXRxIHRlcm0gKGNvbmNhdCB0ZXJtICJ8IiAocG9wIG9ydGVybXMpKSkp IDsgcmVwYWlyIGJhZCBzcGxpdA0KCSh3aGlsZSAoc3RyaW5nLW1hdGNoIHJlIHRlcm0pDQoJICAo c2V0cSByZXN0IChzdWJzdHJpbmcgdGVybSAobWF0Y2gtZW5kIDApKQ0KCQltaW51cyAoYW5kICht YXRjaC1lbmQgMSkNCgkJCSAgIChlcXVhbCAobWF0Y2gtc3RyaW5nIDEgdGVybSkgIi0iKSkNCgkJ dGFnIChzYXZlLW1hdGNoLWRhdGEgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZw0KCQkJCSAgICAg ICJcXFxcLSIgIi0iDQoJCQkJICAgICAgKG1hdGNoLXN0cmluZyAyIHRlcm0pKSkNCgkJcmUtcCAo ZXF1YWwgKHN0cmluZy10by1jaGFyIHRhZykgP3spDQoJCWxldmVsLXAgKG1hdGNoLWVuZCA0KQ0K CQlwcm9wLXAgKG1hdGNoLWVuZCA1KQ0KCQltbSAoY29uZA0KCQkgICAgKHJlLXAgYChvcmctbWF0 Y2gtYW55LXAgLChzdWJzdHJpbmcgdGFnIDEgLTEpIHRhZ3MtbGlzdCkpDQoJCSAgICAobGV2ZWwt cA0KCQkgICAgIChzZXRxIGxldmVsLW9wIChvcmctb3AtdG8tZnVuY3Rpb24gKG1hdGNoLXN0cmlu ZyAzIHRlcm0pKSkNCgkJICAgICBgKCxsZXZlbC1vcCBsZXZlbCAsKHN0cmluZy10by1udW1iZXIN CgkJCQkJIChtYXRjaC1zdHJpbmcgNCB0ZXJtKSkpKQ0KCQkgICAgKHByb3AtcA0KCQkgICAgIChz ZXRxIHBuIChtYXRjaC1zdHJpbmcgNSB0ZXJtKQ0KCQkJICAgcG8gKG1hdGNoLXN0cmluZyA2IHRl cm0pDQoJCQkgICBwdiAobWF0Y2gtc3RyaW5nIDcgdGVybSkNCgkJCSAgIHJlLXAgKGVxdWFsIChz dHJpbmctdG8tY2hhciBwdikgP3spDQoJCQkgICBzdHItcCAoZXF1YWwgKHN0cmluZy10by1jaGFy IHB2KSA/XCIpDQoJCQkgICB0aW1lLXAgKHNhdmUtbWF0Y2gtZGF0YQ0KCQkJCSAgICAoc3RyaW5n LW1hdGNoICJeXCJbWzxdLipbXT5dXCIkIiBwdikpDQoJCQkgICBwdiAoaWYgKG9yIHJlLXAgc3Ry LXApIChzdWJzdHJpbmcgcHYgMSAtMSkgcHYpKQ0KCQkgICAgIChpZiB0aW1lLXAgKHNldHEgcHYg KG9yZy1tYXRjaGVyLXRpbWUgcHYpKSkNCgkJICAgICAoc2V0cSBwbyAob3JnLW9wLXRvLWZ1bmN0 aW9uIHBvIChpZiB0aW1lLXAgJ3RpbWUgc3RyLXApKSkNCgkJICAgICAoY29uZA0KCQkgICAgICAo KGVxdWFsIHBuICJDQVRFR09SWSIpDQoJCSAgICAgICAoc2V0cSBndiAnKGdldC10ZXh0LXByb3Bl cnR5IChwb2ludCkgJ29yZy1jYXRlZ29yeSkpKQ0KCQkgICAgICAoKGVxdWFsIHBuICJUT0RPIikN CgkJICAgICAgIChzZXRxIGd2ICd0b2RvKSkNCgkJICAgICAgKHQNCgkJICAgICAgIChzZXRxIGd2 IGAob3JnLWNhY2hlZC1lbnRyeS1nZXQgbmlsICxwbikpKSkNCgkJICAgICAoaWYgcmUtcA0KCQkJ IChpZiAoZXEgcG8gJ29yZzw+KQ0KCQkJICAgICBgKG5vdCAoc3RyaW5nLW1hdGNoICxwdiAob3Ig LGd2ICIiKSkpDQoJCQkgICBgKHN0cmluZy1tYXRjaCAscHYgKG9yICxndiAiIikpKQ0KCQkgICAg ICAgKGlmIHN0ci1wDQoJCQkgICBgKCxwbyAob3IgLGd2ICIiKSAscHYpDQoJCQkgYCgscG8gKHN0 cmluZy10by1udW1iZXIgKG9yICxndiAiIikpDQoJCQkgICAgICAgLChzdHJpbmctdG8tbnVtYmVy IHB2KSApKSkpDQoJCSAgICAodCBgKG1lbWJlciAsdGFnIHRhZ3MtbGlzdCkpKQ0KCQltbSAoaWYg bWludXMgKGxpc3QgJ25vdCBtbSkgbW0pDQoJCXRlcm0gcmVzdCkNCgkgIChwdXNoIG1tIHRhZ3Nt YXRjaGVyKSkNCgkocHVzaCAoaWYgKD4gKGxlbmd0aCB0YWdzbWF0Y2hlcikgMSkNCgkJICAoY29u cyAnYW5kIHRhZ3NtYXRjaGVyKQ0KCQkoY2FyIHRhZ3NtYXRjaGVyKSkNCgkgICAgICBvcmxpc3Qp DQoJKHNldHEgdGFnc21hdGNoZXIgbmlsKSkNCiAgICAgIChzZXRxIHRhZ3NtYXRjaGVyIChpZiAo PiAobGVuZ3RoIG9ybGlzdCkgMSkgKGNvbnMgJ29yIG9ybGlzdCkgKGNhciBvcmxpc3QpKSkNCiAg ICAgIChzZXRxIHRhZ3NtYXRjaGVyDQoJICAgIChsaXN0ICdwcm9nbiAnKHNldHEgb3JnLWNhY2hl ZC1wcm9wcyBuaWwpIHRhZ3NtYXRjaGVyKSkpDQogICAgOzsgTWFrZSB0aGUgdG9kbyBtYXRjaGVy DQogICAgKGlmIChvciAobm90IHRvZG9tYXRjaCkgKG5vdCAoc3RyaW5nLW1hdGNoICJcXFMtIiB0 b2RvbWF0Y2gpKSkNCgkoc2V0cSB0b2RvbWF0Y2hlciB0KQ0KICAgICAgKHNldHEgb3J0ZXJtcyAo b3JnLXNwbGl0LXN0cmluZyB0b2RvbWF0Y2ggInwiKSBvcmxpc3QgbmlsKQ0KICAgICAgKHdoaWxl IChzZXRxIHRlcm0gKHBvcCBvcnRlcm1zKSkNCgkod2hpbGUgKHN0cmluZy1tYXRjaCByZSB0ZXJt KQ0KCSAgKHNldHEgbWludXMgKGFuZCAobWF0Y2gtZW5kIDEpDQoJCQkgICAoZXF1YWwgKG1hdGNo LXN0cmluZyAxIHRlcm0pICItIikpDQoJCWt3ZCAobWF0Y2gtc3RyaW5nIDIgdGVybSkNCgkJcmUt cCAoZXF1YWwgKHN0cmluZy10by1jaGFyIGt3ZCkgP3spDQoJCXRlcm0gKHN1YnN0cmluZyB0ZXJt IChtYXRjaC1lbmQgMCkpDQoJCW1tIChpZiByZS1wDQoJCSAgICAgICBgKHN0cmluZy1tYXRjaCAg LChzdWJzdHJpbmcga3dkIDEgLTEpIHRvZG8pDQoJCSAgICAgKGxpc3QgJ2VxdWFsICd0b2RvIGt3 ZCkpDQoJCW1tIChpZiBtaW51cyAobGlzdCAnbm90IG1tKSBtbSkpDQoJICAocHVzaCBtbSB0b2Rv bWF0Y2hlcikpDQoJKHB1c2ggKGlmICg+IChsZW5ndGggdG9kb21hdGNoZXIpIDEpDQoJCSAgKGNv bnMgJ2FuZCB0b2RvbWF0Y2hlcikNCgkJKGNhciB0b2RvbWF0Y2hlcikpDQoJICAgICAgb3JsaXN0 KQ0KCShzZXRxIHRvZG9tYXRjaGVyIG5pbCkpDQogICAgICAoc2V0cSB0b2RvbWF0Y2hlciAoaWYg KD4gKGxlbmd0aCBvcmxpc3QpIDEpDQoJCQkgICAgKGNvbnMgJ29yIG9ybGlzdCkgKGNhciBvcmxp c3QpKSkpDQoNCiAgICA7OyBSZXR1cm4gdGhlIHN0cmluZyBhbmQgbGlzcCBmb3JtcyBvZiB0aGUg bWF0Y2hlcg0KICAgIChzZXRxIG1hdGNoZXIgKGlmIHRvZG9tYXRjaGVyDQoJCSAgICAgIChsaXN0 ICdhbmQgdGFnc21hdGNoZXIgdG9kb21hdGNoZXIpDQoJCSAgICB0YWdzbWF0Y2hlcikpDQogICAg KHdoZW4gdG9kby1vbmx5DQogICAgICAoc2V0cSBtYXRjaGVyIChsaXN0ICdhbmQgJyhtZW1iZXIg dG9kbyBvcmctbm90LWRvbmUta2V5d29yZHMpDQoJCQkgIG1hdGNoZXIpKSkNCiAgICAoY29ucyBt YXRjaDAgbWF0Y2hlcikpKQ0KDQooZGVmdW4gb3JnLXRhZ3MtZXhwYW5kIChtYXRjaCAmb3B0aW9u YWwgc2luZ2xlLWFzLWxpc3QgZG93bmNhc2VkKQ0KICAiRXhwYW5kIGdyb3VwIHRhZ3MgaW4gTUFU Q0guDQoNClRoaXMgcmVwbGFjZXMgZXZlcnkgZ3JvdXAgdGFnIGluIE1BVENIIHdpdGggYSByZWdl eHAgdGFnIHNlYXJjaC4NCkZvciBleGFtcGxlLCBhIGdyb3VwIHRhZyBcIldvcmtcIiBkZWZpbmVk IGFzIHsgV29yayA6IExhYiBDb25mIH0NCndpbGwgYmUgcmVwbGFjZWQgbGlrZSB0aGlzOg0KDQog ICBXb3JrID0+ICB7XFwoPzpXb3JrXFx8TGFiXFx8Q29uZlxcKX0NCiAgK1dvcmsgPT4gK3tcXCg/ OldvcmtcXHxMYWJcXHxDb25mXFwpfQ0KICAtV29yayA9PiAte1xcKD86V29ya1xcfExhYlxcfENv bmZcXCl9DQoNClJlcGxhY2luZyBieSBhIHJlZ2V4cCBwcmVzZXJ2ZXMgdGhlIHN0cnVjdHVyZSBv ZiB0aGUgbWF0Y2guDQpFLmcuLCB0aGlzIGV4cGFuc2lvbg0KDQogIFdvcmt8SG9tZSA9PiB7XFwo PzpXb3JrXFx8TGFiXFx8Q29uZlxcfXxIb21lDQoNCndpbGwgbWF0Y2ggYW55dGhpbmcgdGFnZ2Vk IHdpdGggXCJMYWJcIiBhbmQgXCJIb21lXCIsIG9yIHRhZ2dlZA0Kd2l0aCBcIkNvbmZcIiBhbmQg XCJIb21lXCIgb3IgdGFnZ2VkIHdpdGggXCJXb3JrXCIgYW5kIFwiaG9tZVwiLg0KDQpXaGVuIHRo ZSBvcHRpb25hbCBhcmd1bWVudCBTSU5HTEUtQVMtTElTVCBpcyBub24tbmlsLCBNQVRDSCBpcw0K YXNzdW1lZCB0byBiZSBhIHNpbmdsZSBncm91cCB0YWcsIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBy ZXR1cm4NCnRoZSBsaXN0IG9mIHRhZ3MgaW4gdGhpcyBncm91cC4NCg0KV2hlbiBET1dOQ0FTRSBp cyBub24tbmlsLCBleHBhbmQgZG93bmNhc2VkIFRBR1MuIg0KICAoaWYgb3JnLWdyb3VwLXRhZ3MN CiAgICAgIChsZXQqICgoY2FzZS1mb2xkLXNlYXJjaCB0KQ0KCSAgICAgKHN0YWJsZSBvcmctbW9k ZS1zeW50YXgtdGFibGUpDQoJICAgICAodGFsIChvciBvcmctdGFnLWdyb3Vwcy1hbGlzdC1mb3It YWdlbmRhDQoJCSAgICAgIG9yZy10YWctZ3JvdXBzLWFsaXN0KSkNCgkgICAgICh0YWwgKGlmIGRv d25jYXNlZA0KCQkgICAgICAobWFwY2FyIChsYW1iZGEodGcpIChtYXBjYXIgJ2Rvd25jYXNlIHRn KSkgdGFsKSB0YWwpKQ0KCSAgICAgKHRtbCAobWFwY2FyICdjYXIgdGFsKSkNCgkgICAgIChydG5t YXRjaCBtYXRjaCkgcnBsKQ0KCTs7IEAgYW5kIF8gYXJlIGFsbG93ZWQgYXMgd29yZC1jb21wb25l bnRzIGluIHRhZ3MNCgkobW9kaWZ5LXN5bnRheC1lbnRyeSA/QCAidyIgc3RhYmxlKQ0KCShtb2Rp Znktc3ludGF4LWVudHJ5ID9fICJ3IiBzdGFibGUpDQoJKHdoaWxlIChhbmQgdG1sDQoJCSAgICAo d2l0aC1zeW50YXgtdGFibGUgc3RhYmxlDQoJCSAgICAgIChzdHJpbmctbWF0Y2gNCgkJICAgICAg IChjb25jYXQgIlxcKD8xOlsrLV0/XFwpXFwoPzI6XFw8Ig0KCQkJICAgICAgIChyZWdleHAtb3B0 IHRtbCkgIlxcPlxcKSIpIHJ0bm1hdGNoKSkpDQoJICAobGV0KiAoKGRpciAobWF0Y2gtc3RyaW5n IDEgcnRubWF0Y2gpKQ0KCQkgKHRhZyAobWF0Y2gtc3RyaW5nIDIgcnRubWF0Y2gpKQ0KCQkgKHRh ZyAoaWYgZG93bmNhc2VkIChkb3duY2FzZSB0YWcpIHRhZykpKQ0KCSAgICAoc2V0cSB0bWwgKGRl bGV0ZSB0YWcgdG1sKSkNCgkgICAgKHdoZW4gKG5vdCAoZ2V0LXRleHQtcHJvcGVydHkgMCAnZ3Jv dXB0YWcgKG1hdGNoLXN0cmluZyAyIHJ0bm1hdGNoKSkpDQoJICAgICAgKHNldHEgcnBsIChhcHBl bmQgKG9yZy11bmlxdWlmeSBycGwpIChhc3NvYyB0YWcgdGFsKSkpDQoJICAgICAgKHNldHEgcnBs IChjb25jYXQgZGlyICJ7XFw8IiAocmVnZXhwLW9wdCBycGwpICJcXD59IikpDQoJICAgICAgKGlm IChzdHJpbmdwIHJwbCkgKG9yZy1hZGQtcHJvcHMgcnBsICcoZ3JvdXB0YWcgdCkpKQ0KCSAgICAg IChzZXRxIHJ0bm1hdGNoIChyZXBsYWNlLW1hdGNoIHJwbCB0IHQgcnRubWF0Y2gpKSkpKQ0KCShp ZiBzaW5nbGUtYXMtbGlzdA0KCSAgICAob3IgKHJldmVyc2UgcnBsKSAobGlzdCBydG5tYXRjaCkp DQoJICBydG5tYXRjaCkpDQogICAgKGlmIHNpbmdsZS1hcy1saXN0IChsaXN0IChpZiBkb3duY2Fz ZWQgKGRvd25jYXNlIG1hdGNoKSBtYXRjaCkpDQogICAgICBtYXRjaCkpKQ0KDQooZGVmdW4gb3Jn LW9wLXRvLWZ1bmN0aW9uIChvcCAmb3B0aW9uYWwgc3RyaW5ncCkNCiAgIlR1cm4gYW4gb3BlcmF0 b3IgaW50byB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24uIg0KICAoc2V0cSBvcA0KCShjb25kDQoJ ICgoZXF1YWwgIG9wICAgIjwiICAgICAgICkgJyg8ICAgICBzdHJpbmc8ICAgICAgb3JnLXRpbWU8 KSkNCgkgKChlcXVhbCAgb3AgICAiPiIgICAgICAgKSAnKD4gICAgIG9yZy1zdHJpbmc+ICBvcmct dGltZT4pKQ0KCSAoKG1lbWJlciBvcCAnKCI8PSIgIj08IikpICcoPD0gICAgb3JnLXN0cmluZzw9 IG9yZy10aW1lPD0pKQ0KCSAoKG1lbWJlciBvcCAnKCI+PSIgIj0+IikpICcoPj0gICAgb3JnLXN0 cmluZz49IG9yZy10aW1lPj0pKQ0KCSAoKG1lbWJlciBvcCAnKCI9IiAgIj09IikpICcoPSAgICAg c3RyaW5nPSAgICAgIG9yZy10aW1lPSkpDQoJICgobWVtYmVyIG9wICcoIjw+IiAiIT0iKSkgJyhv cmc8PiBvcmctc3RyaW5nPD4gb3JnLXRpbWU8PikpKSkNCiAgKG50aCAoaWYgKGVxIHN0cmluZ3Ag J3RpbWUpIDIgKGlmIHN0cmluZ3AgMSAwKSkgb3ApKQ0KDQooZGVmdW4gb3JnPD4gKGEgYikgKG5v dCAoPSBhIGIpKSkNCihkZWZ1biBvcmctc3RyaW5nPD0gKGEgYikgKG9yIChzdHJpbmc9IGEgYikg KHN0cmluZzwgYSBiKSkpDQooZGVmdW4gb3JnLXN0cmluZz49IChhIGIpIChub3QgKHN0cmluZzwg YSBiKSkpDQooZGVmdW4gb3JnLXN0cmluZz4gIChhIGIpIChhbmQgKG5vdCAoc3RyaW5nPSBhIGIp KSAobm90IChzdHJpbmc8IGEgYikpKSkNCihkZWZ1biBvcmctc3RyaW5nPD4gKGEgYikgKG5vdCAo c3RyaW5nPSBhIGIpKSkNCihkZWZ1biBvcmctdGltZT0gIChhIGIpIChzZXRxIGEgKG9yZy0yZnQg YSkgYiAob3JnLTJmdCBiKSkgKGFuZCAoPiBhIDApICg+IGIgMCkgKD0gICAgIGEgYikpKQ0KKGRl ZnVuIG9yZy10aW1lPCAgKGEgYikgKHNldHEgYSAob3JnLTJmdCBhKSBiIChvcmctMmZ0IGIpKSAo YW5kICg+IGEgMCkgKD4gYiAwKSAoPCAgICAgYSBiKSkpDQooZGVmdW4gb3JnLXRpbWU8PSAoYSBi KSAoc2V0cSBhIChvcmctMmZ0IGEpIGIgKG9yZy0yZnQgYikpIChhbmQgKD4gYSAwKSAoPiBiIDAp ICg8PSAgICBhIGIpKSkNCihkZWZ1biBvcmctdGltZT4gIChhIGIpIChzZXRxIGEgKG9yZy0yZnQg YSkgYiAob3JnLTJmdCBiKSkgKGFuZCAoPiBhIDApICg+IGIgMCkgKD4gICAgIGEgYikpKQ0KKGRl ZnVuIG9yZy10aW1lPj0gKGEgYikgKHNldHEgYSAob3JnLTJmdCBhKSBiIChvcmctMmZ0IGIpKSAo YW5kICg+IGEgMCkgKD4gYiAwKSAoPj0gICAgYSBiKSkpDQooZGVmdW4gb3JnLXRpbWU8PiAoYSBi KSAoc2V0cSBhIChvcmctMmZ0IGEpIGIgKG9yZy0yZnQgYikpIChhbmQgKD4gYSAwKSAoPiBiIDAp IChvcmc8PiBhIGIpKSkNCihkZWZ1biBvcmctMmZ0IChzKQ0KICAiQ29udmVydCBTIHRvIGEgZmxv YXRpbmcgcG9pbnQgdGltZS4NCklmIFMgaXMgYWxyZWFkeSBhIG51bWJlciwganVzdCByZXR1cm4g aXQuICBJZiBpdCBpcyBhIHN0cmluZywgcGFyc2UNCml0IGFzIGEgdGltZSBzdHJpbmcgYW5kIGFw cGx5IGBmbG9hdC10aW1lJyB0byBpdC4gIElmIFMgaXMgbmlsLCBqdXN0IHJldHVybiAwLiINCiAg KGNvbmQNCiAgICgobnVtYmVycCBzKSBzKQ0KICAgKChzdHJpbmdwIHMpDQogICAgKGNvbmRpdGlv bi1jYXNlIG5pbA0KCShmbG9hdC10aW1lIChhcHBseSAnZW5jb2RlLXRpbWUgKG9yZy1wYXJzZS10 aW1lLXN0cmluZyBzKSkpDQogICAgICAoZXJyb3IgMC4pKSkNCiAgICh0IDAuKSkpDQoNCihkZWZ1 biBvcmctdGltZS10b2RheSAoKQ0KICAiVGltZSBpbiBzZWNvbmRzIHRvZGF5IGF0IDA6MDAuDQpS ZXR1cm5zIHRoZSBmbG9hdCBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgYmVnaW5uaW5nIG9m IHRoZQ0KZXBvY2ggdG8gdGhlIGJlZ2lubmluZyBvZiB0b2RheSAoMDA6MDApLiINCiAgKGZsb2F0 LXRpbWUgKGFwcGx5ICdlbmNvZGUtdGltZQ0KCQkgICAgIChhcHBlbmQgJygwIDAgMCkgKG50aGNk ciAzIChkZWNvZGUtdGltZSkpKSkpKQ0KDQooZGVmdW4gb3JnLW1hdGNoZXItdGltZSAocykNCiAg IkludGVycHJldCBhIHRpbWUgY29tcGFyaXNvbiB2YWx1ZS4iDQogIChzYXZlLW1hdGNoLWRhdGEN CiAgICAoY29uZA0KICAgICAoKHN0cmluZz0gcyAiPG5vdz4iKSAoZmxvYXQtdGltZSkpDQogICAg ICgoc3RyaW5nPSBzICI8dG9kYXk+IikgKG9yZy10aW1lLXRvZGF5KSkNCiAgICAgKChzdHJpbmc9 IHMgIjx0b21vcnJvdz4iKSAgICgrIDg2NDAwLjAgKG9yZy10aW1lLXRvZGF5KSkpDQogICAgICgo c3RyaW5nPSBzICI8eWVzdGVyZGF5PiIpICAoLSAob3JnLXRpbWUtdG9kYXkpIDg2NDAwLjApKQ0K ICAgICAoKHN0cmluZy1tYXRjaCAiXjxcXChbLStdWzAtOV0rXFwpXFwoW2hkd215XVxcKT4kIiBz KQ0KICAgICAgKCsgKG9yZy10aW1lLXRvZGF5KQ0KCSAoKiAoc3RyaW5nLXRvLW51bWJlciAobWF0 Y2gtc3RyaW5nIDEgcykpDQoJICAgIChjZHIgKGFzc29jIChtYXRjaC1zdHJpbmcgMiBzKQ0KCQkJ JygoImQiIC4gODY0MDAuMCkgICAoInciIC4gNjA0ODAwLjApDQoJCQkgICgibSIgLiAyNjc4NDAw LjApICgieSIgLiAzMTU1NzYwMC4wKSkpKSkpKQ0KICAgICAodCAob3JnLTJmdCBzKSkpKSkNCg0K KGRlZnVuIG9yZy1tYXRjaC1hbnktcCAocmUgbGlzdCkNCiAgIkRvZXMgcmUgbWF0Y2ggYW55IGVs ZW1lbnQgb2YgbGlzdD8iDQogIChzZXRxIGxpc3QgKG1hcGNhciAobGFtYmRhICh4KSAoc3RyaW5n LW1hdGNoIHJlIHgpKSBsaXN0KSkNCiAgKGRlbHEgbmlsIGxpc3QpKQ0KDQooZGVmdmFyIG9yZy1h ZGQtY29sb24tYWZ0ZXItdGFnLWNvbXBsZXRpb24gbmlsKSAgOzsgZHluYW1pY2FsbHkgc2NvcGVk IHBhcmFtDQooZGVmdmFyIG9yZy10YWdzLW92ZXJsYXkgKG1ha2Utb3ZlcmxheSAxIDEpKQ0KKG9y Zy1kZXRhY2gtb3ZlcmxheSBvcmctdGFncy1vdmVybGF5KQ0KDQooZGVmdW4gb3JnLWdldC1sb2Nh bC10YWdzLWF0ICgmb3B0aW9uYWwgcG9zKQ0KICAiR2V0IGEgbGlzdCBvZiB0YWdzIGRlZmluZWQg aW4gdGhlIGN1cnJlbnQgaGVhZGxpbmUuIg0KICAob3JnLWdldC10YWdzLWF0IHBvcyAnbG9jYWwp KQ0KDQooZGVmdW4gb3JnLWdldC1sb2NhbC10YWdzICgpDQogICJHZXQgYSBsaXN0IG9mIHRhZ3Mg ZGVmaW5lZCBpbiB0aGUgY3VycmVudCBoZWFkbGluZS4iDQogIChvcmctZ2V0LXRhZ3MtYXQgbmls ICdsb2NhbCkpDQoNCihkZWZ1biBvcmctZ2V0LXRhZ3MtYXQgKCZvcHRpb25hbCBwb3MgbG9jYWwp DQogICJHZXQgYSBsaXN0IG9mIGFsbCBoZWFkbGluZSB0YWdzIGFwcGxpY2FibGUgYXQgUE9TLg0K UE9TIGRlZmF1bHRzIHRvIHBvaW50LiAgSWYgdGFncyBhcmUgaW5oZXJpdGVkLCB0aGUgbGlzdCBj b250YWlucw0KdGhlIHRhcmdldHMgaW4gdGhlIHNhbWUgc2VxdWVuY2UgYXMgdGhlIGhlYWRsaW5l cyBhcHBlYXIsIGkuZS4NCnRoZSB0YWdzIG9mIHRoZSBjdXJyZW50IGhlYWRsaW5lIGNvbWUgbGFz dC4NCldoZW4gTE9DQUwgaXMgbm9uLW5pbCwgb25seSByZXR1cm4gdGFncyBmcm9tIHRoZSBjdXJy ZW50IGhlYWRsaW5lLA0KaWdub3JlIGluaGVyaXRlZCBvbmVzLiINCiAgKGludGVyYWN0aXZlKQ0K ICAoaWYgKGFuZCBvcmctdHJ1c3Qtc2Nhbm5lci10YWdzDQoJICAgKG9yIChub3QgcG9zKSAoZXF1 YWwgcG9zIChwb2ludCkpKQ0KCSAgIChub3QgbG9jYWwpKQ0KICAgICAgb3JnLXNjYW5uZXItdGFn cw0KICAgIChsZXQgKHRhZ3MgbHRhZ3MgbGFzdHBvcyBwYXJlbnQpDQogICAgICAoc2F2ZS1leGN1 cnNpb24NCgkoc2F2ZS1yZXN0cmljdGlvbg0KCSAgKHdpZGVuKQ0KCSAgKGdvdG8tY2hhciAob3Ig cG9zIChwb2ludCkpKQ0KCSAgKHNhdmUtbWF0Y2gtZGF0YQ0KCSAgICAoY2F0Y2ggJ2RvbmUNCgkg ICAgICAoY29uZGl0aW9uLWNhc2UgbmlsDQoJCSAgKHByb2duDQoJCSAgICAob3JnLWJhY2stdG8t aGVhZGluZyB0KQ0KCQkgICAgKHdoaWxlIChub3QgKGVxdWFsIGxhc3Rwb3MgKHBvaW50KSkpDQoJ CSAgICAgIChzZXRxIGxhc3Rwb3MgKHBvaW50KSkNCgkJICAgICAgKHdoZW4gKGxvb2tpbmctYXQN CgkJCSAgICAgKG9yZy1yZSAiW15cclxuXSs/OlxcKFtbOmFsbnVtOl1fQCMlOl0rXFwpOlsgXHRd KiQiKSkNCgkJCShzZXRxIGx0YWdzIChvcmctc3BsaXQtc3RyaW5nDQoJCQkJICAgICAob3JnLW1h dGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpICI6IikpDQoJCQkod2hlbiBwYXJlbnQNCgkJCSAg KHNldHEgbHRhZ3MgKG1hcGNhciAnb3JnLWFkZC1wcm9wLWluaGVyaXRlZCBsdGFncykpKQ0KCQkJ KHNldHEgdGFncyAoYXBwZW5kDQoJCQkJICAgIChpZiBwYXJlbnQNCgkJCQkJKG9yZy1yZW1vdmUt dW5pbmhlcml0ZWQtdGFncyBsdGFncykNCgkJCQkgICAgICBsdGFncykNCgkJCQkgICAgdGFncykp KQ0KCQkgICAgICAob3Igb3JnLXVzZS10YWctaW5oZXJpdGFuY2UgKHRocm93ICdkb25lIHQpKQ0K CQkgICAgICAoaWYgbG9jYWwgKHRocm93ICdkb25lIHQpKQ0KCQkgICAgICAob3IgKG9yZy11cC1o ZWFkaW5nLXNhZmUpIChlcnJvciBuaWwpKQ0KCQkgICAgICAoc2V0cSBwYXJlbnQgdCkpKQ0KCQko ZXJyb3IgbmlsKSkpKSkNCgkoaWYgbG9jYWwNCgkgICAgdGFncw0KCSAgKHJldmVyc2UgKGRlbGV0 ZS1kdXBzDQoJCSAgICAocmV2ZXJzZSAoYXBwZW5kDQoJCQkgICAgICAob3JnLXJlbW92ZS11bmlu aGVyaXRlZC10YWdzDQoJCQkgICAgICAgb3JnLWZpbGUtdGFncykgdGFncykpKSkpKSkpKQ0KDQoo ZGVmdW4gb3JnLWFkZC1wcm9wLWluaGVyaXRlZCAocykNCiAgKGFkZC10ZXh0LXByb3BlcnRpZXMg MCAobGVuZ3RoIHMpICcoaW5oZXJpdGVkIHQpIHMpDQogIHMpDQoNCihkZWZ1biBvcmctdG9nZ2xl LXRhZyAodGFnICZvcHRpb25hbCBvbm9mZikNCiAgIlRvZ2dsZSB0aGUgdGFnIFRBRyBmb3IgdGhl IGN1cnJlbnQgbGluZS4NCklmIE9OT0ZGIGlzIGBvbicgb3IgYG9mZicsIGRvbid0IHRvZ2dsZSBi dXQgc2V0IHRvIHRoaXMgc3RhdGUuIg0KICAobGV0IChyZXMgY3VycmVudCkNCiAgICAoc2F2ZS1l eGN1cnNpb24NCiAgICAgIChvcmctYmFjay10by1oZWFkaW5nIHQpDQogICAgICAoaWYgKHJlLXNl YXJjaC1mb3J3YXJkIChvcmctcmUgIlsgXHRdOlxcKFtbOmFsbnVtOl1fQCMlOl0rXFwpOlsgXHRd KiQiKQ0KCQkJICAgICAocG9pbnQtYXQtZW9sKSB0KQ0KCSAgKHByb2duDQoJICAgIChzZXRxIGN1 cnJlbnQgKG1hdGNoLXN0cmluZyAxKSkNCgkgICAgKHJlcGxhY2UtbWF0Y2ggIiIpKQ0KCShzZXRx IGN1cnJlbnQgIiIpKQ0KICAgICAgKHNldHEgY3VycmVudCAobnJldmVyc2UgKG9yZy1zcGxpdC1z dHJpbmcgY3VycmVudCAiOiIpKSkNCiAgICAgIChjb25kDQogICAgICAgKChlcSBvbm9mZiAnb24p DQoJKHNldHEgcmVzIHQpDQoJKG9yIChtZW1iZXIgdGFnIGN1cnJlbnQpIChwdXNoIHRhZyBjdXJy ZW50KSkpDQogICAgICAgKChlcSBvbm9mZiAnb2ZmKQ0KCShvciAobm90IChtZW1iZXIgdGFnIGN1 cnJlbnQpKSAoc2V0cSBjdXJyZW50IChkZWxldGUgdGFnIGN1cnJlbnQpKSkpDQogICAgICAgKHQg KGlmIChtZW1iZXIgdGFnIGN1cnJlbnQpDQoJICAgICAgKHNldHEgY3VycmVudCAoZGVsZXRlIHRh ZyBjdXJyZW50KSkNCgkgICAgKHNldHEgcmVzIHQpDQoJICAgIChwdXNoIHRhZyBjdXJyZW50KSkp KQ0KICAgICAgKGVuZC1vZi1saW5lIDEpDQogICAgICAoaWYgY3VycmVudA0KCSAgKHByb2duDQoJ ICAgIChpbnNlcnQgIiA6IiAobWFwY29uY2F0ICdpZGVudGl0eSAobnJldmVyc2UgY3VycmVudCkg IjoiKSAiOiIpDQoJICAgIChvcmctc2V0LXRhZ3MgbmlsIHQpKQ0KCShkZWxldGUtaG9yaXpvbnRh bC1zcGFjZSkpDQogICAgICAocnVuLWhvb2tzICdvcmctYWZ0ZXItdGFncy1jaGFuZ2UtaG9vaykp DQogICAgcmVzKSkNCg0KKGRlZnVuIG9yZy1hbGlnbi10YWdzLWhlcmUgKHRvLWNvbCkNCiAgOzsg QXNzdW1lcyB0aGF0IHRoaXMgaXMgYSBoZWFkbGluZQ0KICAiQWxpZ24gdGFncyBvbiB0aGUgY3Vy cmVudCBoZWFkbGluZSB0byBUTy1DT0wuIg0KICAobGV0ICgocG9zIChwb2ludCkpIChjb2wgKGN1 cnJlbnQtY29sdW1uKSkgbmNvbCB0YWdzLWwgcCkNCiAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMSkN CiAgICAoaWYJKGFuZCAobG9va2luZy1hdCAob3JnLXJlICIuKj9cXChbIFx0XStcXClcXCg6W1s6 YWxudW06XV9AIyU6XSs6XFwpWyBcdF0qJCIpKQ0KCSAgICAgKDwgcG9zIChtYXRjaC1iZWdpbm5p bmcgMikpKQ0KCShwcm9nbg0KCSAgKHNldHEgdGFncy1sICgtIChtYXRjaC1lbmQgMikgKG1hdGNo LWJlZ2lubmluZyAyKSkpDQoJICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpDQoJICAo aW5zZXJ0ICIgIikNCgkgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKDErIChtYXRjaC1iZWdpbm5p bmcgMikpKQ0KCSAgKHNldHEgbmNvbCAobWF4IChjdXJyZW50LWNvbHVtbikNCgkJCSAgKDErIGNv bCkNCgkJCSAgKGlmICg+IHRvLWNvbCAwKQ0KCQkJICAgICAgdG8tY29sDQoJCQkgICAgKC0gKGFi cyB0by1jb2wpIHRhZ3MtbCkpKSkNCgkgIChzZXRxIHAgKHBvaW50KSkNCgkgIChpbnNlcnQgKG1h a2Utc3RyaW5nICgtIG5jb2wgKGN1cnJlbnQtY29sdW1uKSkgP1wgKSkNCgkgIChzZXRxIG5jb2wg KGN1cnJlbnQtY29sdW1uKSkNCgkgICh3aGVuIGluZGVudC10YWJzLW1vZGUgKHRhYmlmeSBwIChw b2ludC1hdC1lb2wpKSkNCgkgIChvcmctbW92ZS10by1jb2x1bW4gKG1pbiBuY29sIGNvbCkpKQ0K ICAgICAgKGdvdG8tY2hhciBwb3MpKSkpDQoNCihkZWZ1biBvcmctc2V0LXRhZ3MtY29tbWFuZCAo Jm9wdGlvbmFsIGFyZyBqdXN0LWFsaWduKQ0KICAiQ2FsbCB0aGUgc2V0LXRhZ3MgY29tbWFuZCBm b3IgdGhlIGN1cnJlbnQgZW50cnkuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoaWYgKG9yIChv cmctYXQtaGVhZGluZy1wKSAoYW5kIGFyZyAob3JnLWJlZm9yZS1maXJzdC1oZWFkaW5nLXApKSkN CiAgICAgIChvcmctc2V0LXRhZ3MgYXJnIGp1c3QtYWxpZ24pDQogICAgKHNhdmUtZXhjdXJzaW9u DQogICAgICAodW5sZXNzIChhbmQgKG9yZy1yZWdpb24tYWN0aXZlLXApDQoJCSAgIG9yZy1sb29w LW92ZXItaGVhZGxpbmVzLWluLWFjdGl2ZS1yZWdpb24pDQoJKG9yZy1iYWNrLXRvLWhlYWRpbmcg dCkpDQogICAgICAob3JnLXNldC10YWdzIGFyZyBqdXN0LWFsaWduKSkpKQ0KDQooZGVmdW4gb3Jn LXNldC10YWdzLXRvIChkYXRhKQ0KICAiU2V0IHRoZSB0YWdzIG9mIHRoZSBjdXJyZW50IGVudHJ5 IHRvIERBVEEsIHJlcGxhY2luZyB0aGUgY3VycmVudCB0YWdzLg0KREFUQSBtYXkgYmUgYSB0YWdz IHN0cmluZyBsaWtlIDphYTpiYjpjYzosIG9yIGEgbGlzdCBvZiB0YWdzLg0KSWYgREFUQSBpcyBu aWwgb3IgdGhlIGVtcHR5IHN0cmluZywgYW55IHRhZ3Mgd2lsbCBiZSByZW1vdmVkLiINCiAgKGlu dGVyYWN0aXZlICJzVGFnczogIikNCiAgKHNldHEgZGF0YQ0KCShjb25kDQoJICgoZXEgZGF0YSBu aWwpICIiKQ0KCSAoKGVxdWFsIGRhdGEgIiIpICIiKQ0KCSAoKHN0cmluZ3AgZGF0YSkNCgkgIChj b25jYXQgIjoiIChtYXBjb25jYXQgJ2lkZW50aXR5IChvcmctc3BsaXQtc3RyaW5nIGRhdGEgIjor IikgIjoiKQ0KCQkgICI6IikpDQoJICgobGlzdHAgZGF0YSkNCgkgIChjb25jYXQgIjoiIChtYXBj b25jYXQgJ2lkZW50aXR5IGRhdGEgIjoiKSAiOiIpKSkpDQogICh3aGVuIGRhdGENCiAgICAoc2F2 ZS1leGN1cnNpb24NCiAgICAgIChvcmctYmFjay10by1oZWFkaW5nIHQpDQogICAgICAod2hlbiAo bG9va2luZy1hdCBvcmctY29tcGxleC1oZWFkaW5nLXJlZ2V4cCkNCgkoaWYgKG1hdGNoLWVuZCA1 KQ0KCSAgICAocHJvZ24NCgkgICAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgNSkpDQoJ ICAgICAgKGluc2VydCBkYXRhKQ0KCSAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKHBvaW50 LWF0LWVvbCkpDQoJICAgICAgKG9yZy1zZXQtdGFncyBuaWwgJ2FsaWduKSkNCgkgIChnb3RvLWNo YXIgKHBvaW50LWF0LWVvbCkpDQoJICAoaW5zZXJ0ICIgIiBkYXRhKQ0KCSAgKG9yZy1zZXQtdGFn cyBuaWwgJ2FsaWduKSkpDQogICAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMSkNCiAgICAgIChpZiAo bG9va2luZy1hdCAiLio/XFwoWyBcdF0rXFwpJCIpDQoJICAoZGVsZXRlLXJlZ2lvbiAobWF0Y2gt YmVnaW5uaW5nIDEpIChtYXRjaC1lbmQgMSkpKSkpKQ0KDQooZGVmdW4gb3JnLWFsaWduLWFsbC10 YWdzICgpDQogICJBbGlnbiB0aGUgdGFncyBpIGFsbCBoZWFkaW5ncy4iDQogIChpbnRlcmFjdGl2 ZSkNCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKG9yIChpZ25vcmUtZXJyb3JzIChvcmctYmFjay10 by1oZWFkaW5nIHQpKQ0KCShvdXRsaW5lLW5leHQtaGVhZGluZykpDQogICAgKGlmIChvcmctYXQt aGVhZGluZy1wKQ0KCShvcmctc2V0LXRhZ3MgdCkNCiAgICAgIChtZXNzYWdlICJObyBoZWFkaW5n cyIpKSkpDQoNCihkZWZ2YXIgb3JnLWluZGVudC1pbmRlbnRhdGlvbi1wZXItbGV2ZWwpDQooZGVm dW4gb3JnLXNldC10YWdzICgmb3B0aW9uYWwgYXJnIGp1c3QtYWxpZ24pDQogICJTZXQgdGhlIHRh Z3MgZm9yIHRoZSBjdXJyZW50IGhlYWRsaW5lLg0KV2l0aCBwcmVmaXggQVJHLCByZWFsaWduIGFs bCB0YWdzIGluIGhlYWRpbmdzIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4NCldoZW4gSlVTVC1BTElH TiBpcyBub24tbmlsLCBvbmx5IGFsaWduIHRhZ3MuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAo aWYgKGFuZCAob3JnLXJlZ2lvbi1hY3RpdmUtcCkgb3JnLWxvb3Atb3Zlci1oZWFkbGluZXMtaW4t YWN0aXZlLXJlZ2lvbikNCiAgICAgIChsZXQgKChjbCAoaWYgKGVxIG9yZy1sb29wLW92ZXItaGVh ZGxpbmVzLWluLWFjdGl2ZS1yZWdpb24gJ3N0YXJ0LWxldmVsKQ0KCQkgICAgJ3JlZ2lvbi1zdGFy dC1sZXZlbCAncmVnaW9uKSkNCgkgICAgb3JnLWxvb3Atb3Zlci1oZWFkbGluZXMtaW4tYWN0aXZl LXJlZ2lvbikNCgkob3JnLW1hcC1lbnRyaWVzDQoJIDs7IFdlIGRvbid0IHVzZSBBUkcgYW5kIEpV U1QtQUxJR04gaGVyZSBiZWNhdXNlIHRoZXNlIGFyZ3MNCgkgOzsgYXJlIG5vdCB1c2VmdWwgd2hl biBsb29waW5nIG92ZXIgaGVhZGxpbmVzLg0KCSBgKG9yZy1zZXQtdGFncykNCgkgb3JnLWxvb3At b3Zlci1oZWFkbGluZXMtaW4tYWN0aXZlLXJlZ2lvbg0KCSBjbCAoaWYgKG91dGxpbmUtaW52aXNp YmxlLXApIChvcmctZW5kLW9mLXN1YnRyZWUgbmlsIHQpKSkpDQogICAgKGxldCogKChyZSBvcmct b3V0bGluZS1yZWdleHAtYm9sKQ0KCSAgIChjdXJyZW50ICh1bmxlc3MgYXJnIChvcmctZ2V0LXRh Z3Mtc3RyaW5nKSkpDQoJICAgKGNvbCAoY3VycmVudC1jb2x1bW4pKQ0KCSAgIChvcmctc2V0dGlu Zy10YWdzIHQpDQoJICAgdGFibGUgY3VycmVudC10YWdzIGluaGVyaXRlZC10YWdzIDsgY29tcHV0 ZWQgYmVsb3cgd2hlbiBuZWVkZWQNCgkgICB0YWdzIHAwIGMwIGMxIHJwbCBkaSB0YyBsZXZlbCkN CiAgICAgIChpZiBhcmcNCgkgIChzYXZlLWV4Y3Vyc2lvbg0KCSAgICAoZ290by1jaGFyIChwb2lu dC1taW4pKQ0KCSAgICAobGV0ICgoYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjIChvcmctaW5oaWJp dC1pbnZpc2liaWxpdHkpKSkNCgkgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIHJlIG5p bCB0KQ0KCQkob3JnLXNldC10YWdzIG5pbCB0KQ0KCQkoZW5kLW9mLWxpbmUgMSkpKQ0KCSAgICAo bWVzc2FnZSAiQWxsIHRhZ3MgcmVhbGlnbmVkIHRvIGNvbHVtbiAlZCIgb3JnLXRhZ3MtY29sdW1u KSkNCgkoaWYganVzdC1hbGlnbg0KCSAgICAoc2V0cSB0YWdzIGN1cnJlbnQpDQoJICA7OyBHZXQg YSBuZXcgc2V0IG9mIHRhZ3MgZnJvbSB0aGUgdXNlcg0KCSAgKHNhdmUtZXhjdXJzaW9uDQoJICAg IChzZXRxIHRhYmxlIChhcHBlbmQgb3JnLXRhZy1wZXJzaXN0ZW50LWFsaXN0DQoJCQkJKG9yIG9y Zy10YWctYWxpc3QgKG9yZy1nZXQtYnVmZmVyLXRhZ3MpKQ0KCQkJCShhbmQNCgkJCQkgb3JnLWNv bXBsZXRlLXRhZ3MtYWx3YXlzLW9mZmVyLWFsbC1hZ2VuZGEtdGFncw0KCQkJCSAob3JnLWdsb2Jh bC10YWdzLWNvbXBsZXRpb24tdGFibGUNCgkJCQkgIChvcmctYWdlbmRhLWZpbGVzKSkpKQ0KCQkg IG9yZy1sYXN0LXRhZ3MtY29tcGxldGlvbi10YWJsZSB0YWJsZQ0KCQkgIGN1cnJlbnQtdGFncyAo b3JnLXNwbGl0LXN0cmluZyBjdXJyZW50ICI6IikNCgkJICBpbmhlcml0ZWQtdGFncyAobnJldmVy c2UNCgkJCQkgIChudGhjZHIgKGxlbmd0aCBjdXJyZW50LXRhZ3MpDQoJCQkJCSAgKG5yZXZlcnNl IChvcmctZ2V0LXRhZ3MtYXQpKSkpDQoJCSAgdGFncw0KCQkgIChpZiAob3IgKGVxIHQgb3JnLXVz ZS1mYXN0LXRhZy1zZWxlY3Rpb24pDQoJCQkgIChhbmQgb3JnLXVzZS1mYXN0LXRhZy1zZWxlY3Rp b24NCgkJCSAgICAgICAoZGVscSBuaWwgKG1hcGNhciAnY2RyIHRhYmxlKSkpKQ0KCQkgICAgICAo b3JnLWZhc3QtdGFnLXNlbGVjdGlvbg0KCQkgICAgICAgY3VycmVudC10YWdzIGluaGVyaXRlZC10 YWdzIHRhYmxlDQoJCSAgICAgICAoaWYgb3JnLWZhc3QtdGFnLXNlbGVjdGlvbi1pbmNsdWRlLXRv ZG8NCgkJCSAgIG9yZy10b2RvLWtleS1hbGlzdCkpDQoJCSAgICAobGV0ICgob3JnLWFkZC1jb2xv bi1hZnRlci10YWctY29tcGxldGlvbiAoPCAxIChsZW5ndGggdGFibGUpKSkpDQoJCSAgICAgIChv cmctdHJpbQ0KCQkgICAgICAgKG9yZy1pY29tcGxldGluZy1yZWFkICJUYWdzOiAiDQoJCQkJCSAg ICAgJ29yZy10YWdzLWNvbXBsZXRpb24tZnVuY3Rpb24NCgkJCQkJICAgICBuaWwgbmlsIGN1cnJl bnQgJ29yZy10YWdzLWhpc3RvcnkpKSkpKSkNCgkgICh3aGlsZSAoc3RyaW5nLW1hdGNoICJbLSsm XSsiIHRhZ3MpDQoJICAgIDs7IE5vIGJvb2xlYW4gbG9naWMsIGp1c3QgYSBsaXN0DQoJICAgIChz ZXRxIHRhZ3MgKHJlcGxhY2UtbWF0Y2ggIjoiIHQgdCB0YWdzKSkpKQ0KDQoJKHNldHEgdGFncyAo cmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nICJbLF0iICI6IiB0YWdzKSkNCg0KCShpZiBvcmctdGFn cy1zb3J0LWZ1bmN0aW9uDQoJICAgIChzZXRxIHRhZ3MgKG1hcGNvbmNhdCAnaWRlbnRpdHkNCgkJ CQkgIChzb3J0IChvcmctc3BsaXQtc3RyaW5nDQoJCQkJCSB0YWdzIChvcmctcmUgIlteWzphbG51 bTpdX0AjJV0rIikpDQoJCQkJCW9yZy10YWdzLXNvcnQtZnVuY3Rpb24pICI6IikpKQ0KDQoJKGlm IChzdHJpbmctbWF0Y2ggIlxcYFtcdCBdKlxcJyIgdGFncykNCgkgICAgKHNldHEgdGFncyAiIikN CgkgICh1bmxlc3MgKHN0cmluZy1tYXRjaCAiOiQiIHRhZ3MpIChzZXRxIHRhZ3MgKGNvbmNhdCB0 YWdzICI6IikpKQ0KCSAgKHVubGVzcyAoc3RyaW5nLW1hdGNoICJeOiIgdGFncykgKHNldHEgdGFn cyAoY29uY2F0ICI6IiB0YWdzKSkpKQ0KDQoJOzsgSW5zZXJ0IG5ldyB0YWdzIGF0IHRoZSBjb3Jy ZWN0IGNvbHVtbg0KCShiZWdpbm5pbmctb2YtbGluZSAxKQ0KCShzZXRxIGxldmVsIChvciAoYW5k IChsb29raW5nLWF0IG9yZy1vdXRsaW5lLXJlZ2V4cCkNCgkJCSAgICAgKC0gKG1hdGNoLWVuZCAw KSAocG9pbnQpIDEpKQ0KCQkJMSkpDQoJKGNvbmQNCgkgKChhbmQgKGVxdWFsIGN1cnJlbnQgIiIp IChlcXVhbCB0YWdzICIiKSkpDQoJICgocmUtc2VhcmNoLWZvcndhcmQNCgkgICAoY29uY2F0ICJc XChbIFx0XSoiIChyZWdleHAtcXVvdGUgY3VycmVudCkgIlxcKVsgXHRdKiQiKQ0KCSAgIChwb2lu dC1hdC1lb2wpIHQpDQoJICAoaWYgKGVxdWFsIHRhZ3MgIiIpDQoJICAgICAgKHNldHEgcnBsICIi KQ0KCSAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMCkpDQoJICAgIChzZXRxIGMwIChj dXJyZW50LWNvbHVtbikNCgkJICA7OyBjb21wdXRlIG9mZnNldCBmb3IgdGhlIGNhc2Ugb2Ygb3Jn LWluZGVudC1tb2RlIGFjdGl2ZQ0KCQkgIGRpIChpZiAob3JnLWJvdW5kLWFuZC10cnVlLXAgb3Jn LWluZGVudC1tb2RlKQ0KCQkJICgqICgxLSBvcmctaW5kZW50LWluZGVudGF0aW9uLXBlci1sZXZl bCkgKDEtIGxldmVsKSkNCgkJICAgICAgIDApDQoJCSAgcDAgKGlmIChlcXVhbCAoY2hhci1iZWZv cmUpID8qKSAoMSsgKHBvaW50KSkgKHBvaW50KSkNCgkJICB0YyAoKyBvcmctdGFncy1jb2x1bW4g KGlmICg+IG9yZy10YWdzLWNvbHVtbiAwKSAoLSBkaSkgZGkpKQ0KCQkgIGMxIChtYXggKDErIGMw KSAoaWYgKD4gdGMgMCkgdGMgKC0gKC0gdGMpIChsZW5ndGggdGFncykpKSkNCgkJICBycGwgKGNv bmNhdCAobWFrZS1zdHJpbmcgKG1heCAwICgtIGMxIGMwKSkgP1wgKSB0YWdzKSkpDQoJICAocmVw bGFjZS1tYXRjaCBycGwgdCB0KQ0KCSAgKGFuZCAobm90IChmZWF0dXJlcCAneGVtYWNzKSkgYzAg aW5kZW50LXRhYnMtbW9kZSAodGFiaWZ5IHAwIChwb2ludCkpKQ0KCSAgdGFncykNCgkgKHQgKGVy cm9yICJUYWdzIGFsaWdubWVudCBmYWlsZWQiKSkpDQoJKG9yZy1tb3ZlLXRvLWNvbHVtbiBjb2wp DQoJKHVubGVzcyBqdXN0LWFsaWduDQoJICAocnVuLWhvb2tzICdvcmctYWZ0ZXItdGFncy1jaGFu Z2UtaG9vaykpKSkpKQ0KDQooZGVmdW4gb3JnLWNoYW5nZS10YWctaW4tcmVnaW9uIChiZWcgZW5k IHRhZyBvZmYpDQogICJBZGQgb3IgcmVtb3ZlIFRBRyBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgcmVn aW9uLg0KVGhpcyB3b3JrcyBpbiB0aGUgYWdlbmRhLCBhbmQgYWxzbyBpbiBhbiBvcmctbW9kZSBi dWZmZXIuIg0KICAoaW50ZXJhY3RpdmUNCiAgIChsaXN0IChyZWdpb24tYmVnaW5uaW5nKSAocmVn aW9uLWVuZCkNCgkgKGxldCAoKG9yZy1sYXN0LXRhZ3MtY29tcGxldGlvbi10YWJsZQ0KCQkoaWYg KGRlcml2ZWQtbW9kZS1wICdvcmctbW9kZSkNCgkJICAgIChvcmctdW5pcXVpZnkNCgkJICAgICAo ZGVscSBuaWwgKGFwcGVuZCAob3JnLWdldC1idWZmZXItdGFncykNCgkJCQkgICAgICAgKG9yZy1n bG9iYWwtdGFncy1jb21wbGV0aW9uLXRhYmxlKSkpKQ0KCQkgIChvcmctZ2xvYmFsLXRhZ3MtY29t cGxldGlvbi10YWJsZSkpKSkNCgkgICAob3JnLWljb21wbGV0aW5nLXJlYWQNCgkgICAgIlRhZzog IiAnb3JnLXRhZ3MtY29tcGxldGlvbi1mdW5jdGlvbiBuaWwgbmlsIG5pbA0KCSAgICAnb3JnLXRh Z3MtaGlzdG9yeSkpDQoJIChwcm9nbg0KCSAgIChtZXNzYWdlICJbc11ldCBvciBbcl1lbW92ZT8g IikNCgkgICAoZXF1YWwgKHJlYWQtY2hhci1leGNsdXNpdmUpID9yKSkpKQ0KICAoaWYgKGZib3Vu ZHAgJ2RlYWN0aXZhdGUtbWFyaykgKGRlYWN0aXZhdGUtbWFyaykpDQogIChsZXQgKChhZ2VuZGFw IChlcXVhbCBtYWpvci1tb2RlICdvcmctYWdlbmRhLW1vZGUpKQ0KCWwxIGwyIG0gYnVmIHBvcyBu ZXdoZWFkIChjbnQgMCkpDQogICAgKGdvdG8tY2hhciBlbmQpDQogICAgKHNldHEgbDIgKDEtIChv cmctY3VycmVudC1saW5lKSkpDQogICAgKGdvdG8tY2hhciBiZWcpDQogICAgKHNldHEgbDEgKG9y Zy1jdXJyZW50LWxpbmUpKQ0KICAgIChsb29wIGZvciBsIGZyb20gbDEgdG8gbDIgZG8NCgkgIChv cmctZ290by1saW5lIGwpDQoJICAoc2V0cSBtIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdv cmctaGQtbWFya2VyKSkNCgkgICh3aGVuIChvciAoYW5kIChkZXJpdmVkLW1vZGUtcCAnb3JnLW1v ZGUpIChvcmctYXQtaGVhZGluZy1wKSkNCgkJICAgIChhbmQgYWdlbmRhcCBtKSkNCgkgICAgKHNl dHEgYnVmIChpZiBhZ2VuZGFwIChtYXJrZXItYnVmZmVyIG0pIChjdXJyZW50LWJ1ZmZlcikpDQoJ CSAgcG9zIChpZiBhZ2VuZGFwIG0gKHBvaW50KSkpDQoJICAgICh3aXRoLWN1cnJlbnQtYnVmZmVy IGJ1Zg0KCSAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCQkoc2F2ZS1yZXN0cmljdGlvbg0KCQkgIChn b3RvLWNoYXIgcG9zKQ0KCQkgIChzZXRxIGNudCAoMSsgY250KSkNCgkJICAob3JnLXRvZ2dsZS10 YWcgdGFnIChpZiBvZmYgJ29mZiAnb24pKQ0KCQkgIChzZXRxIG5ld2hlYWQgKG9yZy1nZXQtaGVh ZGluZykpKSkpDQoJICAgIChhbmQgYWdlbmRhcCAob3JnLWFnZW5kYS1jaGFuZ2UtYWxsLWxpbmVz IG5ld2hlYWQgbSkpKSkNCiAgICAobWVzc2FnZSAiVGFnIDolczogJXMgaW4gJWQgaGVhZGluZ3Mi IHRhZyAoaWYgb2ZmICJyZW1vdmVkIiAic2V0IikgY250KSkpDQoNCihkZWZ1biBvcmctdGFncy1j b21wbGV0aW9uLWZ1bmN0aW9uIChzdHJpbmcgcHJlZGljYXRlICZvcHRpb25hbCBmbGFnKQ0KICAo bGV0IChzMSBzMiBydG4gKGN0YWJsZSBvcmctbGFzdC10YWdzLWNvbXBsZXRpb24tdGFibGUpDQoJ ICAgKGNvbmZpcm0gKGxhbWJkYSAoeCkgKHN0cmluZ3AgKGNhciB4KSkpKSkNCiAgICAoaWYgKHN0 cmluZy1tYXRjaCAiXlxcKC4qWy0rOiYsfF1cXClcXChbXi0rOiYsfF0qXFwpJCIgc3RyaW5nKQ0K ICAgICAgICAoc2V0cSBzMSAobWF0Y2gtc3RyaW5nIDEgc3RyaW5nKQ0KICAgICAgICAgICAgICBz MiAobWF0Y2gtc3RyaW5nIDIgc3RyaW5nKSkNCiAgICAgIChzZXRxIHMxICIiIHMyIHN0cmluZykp DQogICAgKGNvbmQNCiAgICAgKChlcSBmbGFnIG5pbCkNCiAgICAgIDs7IHRyeSBjb21wbGV0aW9u DQogICAgICAoc2V0cSBydG4gKHRyeS1jb21wbGV0aW9uIHMyIGN0YWJsZSBjb25maXJtKSkNCiAg ICAgIChpZiAoc3RyaW5ncCBydG4pDQoJICAoc2V0cSBydG4NCgkJKGNvbmNhdCBzMSBzMiAoc3Vi c3RyaW5nIHJ0biAobGVuZ3RoIHMyKSkNCgkJCShpZiAoYW5kIG9yZy1hZGQtY29sb24tYWZ0ZXIt dGFnLWNvbXBsZXRpb24NCgkJCQkgKGFzc29jIHJ0biBjdGFibGUpKQ0KCQkJICAgICI6IiAiIikp KSkNCiAgICAgIHJ0bikNCiAgICAgKChlcSBmbGFnIHQpDQogICAgICA7OyBhbGwtY29tcGxldGlv bnMNCiAgICAgIChhbGwtY29tcGxldGlvbnMgczIgY3RhYmxlIGNvbmZpcm0pKQ0KICAgICAoKGVx IGZsYWcgJ2xhbWJkYSkNCiAgICAgIDs7IGV4YWN0IG1hdGNoPw0KICAgICAgKGFzc29jIHMyIGN0 YWJsZSkpKSkpDQoNCihkZWZ1biBvcmctZmFzdC10YWctaW5zZXJ0IChrd2QgdGFncyBmYWNlICZv cHRpb25hbCBlbmQpDQogICJJbnNlcnQgS0RXLCBhbmQgdGhlIFRBR1MsIHRoZSBsYXR0ZXIgd2l0 aCBmYWNlIEZBQ0UuDQpBbHNvIGluc2VydCBFTkQuIg0KICAoaW5zZXJ0IChmb3JtYXQgIiUtMTJz IiAoY29uY2F0IGt3ZCAiOiIpKQ0KCSAgKG9yZy1hZGQtcHJvcHMgKG1hcGNvbmNhdCAnaWRlbnRp dHkgdGFncyAiICIpIG5pbCAnZmFjZSBmYWNlKQ0KCSAgKG9yIGVuZCAiIikpKQ0KDQooZGVmdW4g b3JnLWZhc3QtdGFnLXNob3ctZXhpdCAoZmxhZykNCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKG9y Zy1nb3RvLWxpbmUgMykNCiAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkICJbIFx0XStOZXh0IGNo YW5nZSBleGl0cyIgKHBvaW50LWF0LWVvbCkgdCkNCgkocmVwbGFjZS1tYXRjaCAiIikpDQogICAg KHdoZW4gZmxhZw0KICAgICAgKGVuZC1vZi1saW5lIDEpDQogICAgICAob3JnLW1vdmUtdG8tY29s dW1uICgtICh3aW5kb3ctd2lkdGgpIDE5KSB0KQ0KICAgICAgKGluc2VydCAob3JnLWFkZC1wcm9w cyAiIE5leHQgY2hhbmdlIGV4aXRzIiBuaWwgJ2ZhY2UgJ29yZy13YXJuaW5nKSkpKSkNCg0KKGRl ZnVuIG9yZy1zZXQtY3VycmVudC10YWdzLW92ZXJsYXkgKGN1cnJlbnQgcHJlZml4KQ0KICAiQWRk IGFuIG92ZXJsYXkgdG8gQ1VSUkVOVCB0YWcgd2l0aCBQUkVGSVguIg0KICAobGV0ICgocyAoY29u Y2F0ICI6IiAobWFwY29uY2F0ICdpZGVudGl0eSBjdXJyZW50ICI6IikgIjoiKSkpDQogICAgKGlm IChmZWF0dXJlcCAneGVtYWNzKQ0KCShvcmctb3ZlcmxheS1kaXNwbGF5IG9yZy10YWdzLW92ZXJs YXkgKGNvbmNhdCBwcmVmaXggcykNCgkJCSAgICAgJ3NlY29uZGFyeS1zZWxlY3Rpb24pDQogICAg ICAocHV0LXRleHQtcHJvcGVydHkgMCAobGVuZ3RoIHMpICdmYWNlICcoc2Vjb25kYXJ5LXNlbGVj dGlvbiBvcmctdGFnKSBzKQ0KICAgICAgKG9yZy1vdmVybGF5LWRpc3BsYXkgb3JnLXRhZ3Mtb3Zl cmxheSAoY29uY2F0IHByZWZpeCBzKSkpKSkNCg0KKGRlZnZhciBvcmctbGFzdC10YWctc2VsZWN0 aW9uLWtleSBuaWwpDQooZGVmdW4gb3JnLWZhc3QtdGFnLXNlbGVjdGlvbiAoY3VycmVudCBpbmhl cml0ZWQgdGFibGUgJm9wdGlvbmFsIHRvZG8tdGFibGUpDQogICJGYXN0IHRhZyBzZWxlY3Rpb24g d2l0aCBzaW5nbGUga2V5cy4NCkNVUlJFTlQgaXMgdGhlIGN1cnJlbnQgbGlzdCBvZiB0YWdzIGlu IHRoZSBoZWFkbGluZSwgSU5IRVJJVEVEIGlzIHRoZQ0KbGlzdCBvZiBpbmhlcml0ZWQgdGFncywg YW5kIFRBQkxFIGlzIGFuIGFsaXN0IG9mIHRhZ3MgYW5kIGNvcnJlc3BvbmRpbmcga2V5cywNCnBv c3NpYmx5IHdpdGggZ3JvdXBpbmcgaW5mb3JtYXRpb24uICBUT0RPLVRBQkxFIGlzIGEgc2ltaWxh ciB0YWJsZSB3aXRoDQpUT0RPIGtleXdvcmRzLCBzaG91bGQgdGhlc2UgaGF2ZSBrZXlzIGFzc2ln bmVkIHRvIHRoZW0uDQpJZiB0aGUga2V5cyBhcmUgbmlsLCBhLXogYXJlIGF1dG9tYXRpY2FsbHkg YXNzaWduZWQuDQpSZXR1cm5zIHRoZSBuZXcgdGFncyBzdHJpbmcsIG9yIG5pbCB0byBub3QgY2hh bmdlIHRoZSBjdXJyZW50IHNldHRpbmdzLiINCiAgKGxldCogKChmdWxsdGFibGUgKGFwcGVuZCB0 YWJsZSB0b2RvLXRhYmxlKSkNCgkgKG1heGxlbiAoYXBwbHkgJ21heCAobWFwY2FyDQoJCQkgICAg ICAobGFtYmRhICh4KQ0KCQkJCShpZiAoc3RyaW5ncCAoY2FyIHgpKSAoc3RyaW5nLXdpZHRoIChj YXIgeCkpIDApKQ0KCQkJICAgICAgZnVsbHRhYmxlKSkpDQoJIChidWYgKGN1cnJlbnQtYnVmZmVy KSkNCgkgKGV4cGVydCAoZXEgb3JnLWZhc3QtdGFnLXNlbGVjdGlvbi1zaW5nbGUta2V5ICdleHBl cnQpKQ0KCSAoYnVmZmVyLXRhZ3MgbmlsKQ0KCSAoZndpZHRoICgrIG1heGxlbiAzIDEgMykpDQoJ IChuY29sICgvICgtICh3aW5kb3ctd2lkdGgpIDQpIGZ3aWR0aCkpDQoJIChpLWZhY2UgJ29yZy1k b25lKQ0KCSAoYy1mYWNlICdvcmctdG9kbykNCgkgdGcgY250IGUgYyBjaGFyIGMxIGMyIG50YWJs ZSB0YmwgcnRuDQoJIG92LXN0YXJ0IG92LWVuZCBvdi1wcmVmaXgNCgkgKGV4aXQtYWZ0ZXItbmV4 dCBvcmctZmFzdC10YWctc2VsZWN0aW9uLXNpbmdsZS1rZXkpDQoJIChkb25lLWtleXdvcmRzIG9y Zy1kb25lLWtleXdvcmRzKQ0KCSBncm91cHMgaW5ncm91cCkNCiAgICAoc2F2ZS1leGN1cnNpb24N CiAgICAgIChiZWdpbm5pbmctb2YtbGluZSAxKQ0KICAgICAgKGlmIChsb29raW5nLWF0DQoJICAg KG9yZy1yZSAiLipbIFx0XVxcKDpbWzphbG51bTpdX0AjJTpdKzpcXClbIFx0XSokIikpDQoJICAo c2V0cSBvdi1zdGFydCAobWF0Y2gtYmVnaW5uaW5nIDEpDQoJCW92LWVuZCAobWF0Y2gtZW5kIDEp DQoJCW92LXByZWZpeCAiIikNCgkoc2V0cSBvdi1zdGFydCAoMS0gKHBvaW50LWF0LWVvbCkpDQoJ ICAgICAgb3YtZW5kICgxKyBvdi1zdGFydCkpDQoJKHNraXAtY2hhcnMtZm9yd2FyZCAiXlxuXHIi KQ0KCShzZXRxIG92LXByZWZpeA0KCSAgICAgIChjb25jYXQNCgkgICAgICAgKGJ1ZmZlci1zdWJz dHJpbmcgKDEtIChwb2ludCkpIChwb2ludCkpDQoJICAgICAgIChpZiAoPiAoY3VycmVudC1jb2x1 bW4pIG9yZy10YWdzLWNvbHVtbikNCgkJICAgIiAiDQoJCSAobWFrZS1zdHJpbmcgKC0gb3JnLXRh Z3MtY29sdW1uIChjdXJyZW50LWNvbHVtbikpID9cICkpKSkpKQ0KICAgIChtb3ZlLW92ZXJsYXkg b3JnLXRhZ3Mtb3ZlcmxheSBvdi1zdGFydCBvdi1lbmQpDQogICAgKHNhdmUtd2luZG93LWV4Y3Vy c2lvbg0KICAgICAgKGlmIGV4cGVydA0KCSAgKHNldC1idWZmZXIgKGdldC1idWZmZXItY3JlYXRl ICIgKk9yZyB0YWdzKiIpKQ0KCShkZWxldGUtb3RoZXItd2luZG93cykNCgkoc2V0LXdpbmRvdy1i dWZmZXIgKHNwbGl0LXdpbmRvdy12ZXJ0aWNhbGx5KSAoZ2V0LWJ1ZmZlci1jcmVhdGUgIiAqT3Jn IHRhZ3MqIikpDQoJKG9yZy1zd2l0Y2gtdG8tYnVmZmVyLW90aGVyLXdpbmRvdyAiICpPcmcgdGFn cyoiKSkNCiAgICAgIChlcmFzZS1idWZmZXIpDQogICAgICAob3JnLXNldC1sb2NhbCAnb3JnLWRv bmUta2V5d29yZHMgZG9uZS1rZXl3b3JkcykNCiAgICAgIChvcmctZmFzdC10YWctaW5zZXJ0ICJJ bmhlcml0ZWQiIGluaGVyaXRlZCBpLWZhY2UgIlxuIikNCiAgICAgIChvcmctZmFzdC10YWctaW5z ZXJ0ICJDdXJyZW50IiBjdXJyZW50IGMtZmFjZSAiXG5cbiIpDQogICAgICAob3JnLWZhc3QtdGFn LXNob3ctZXhpdCBleGl0LWFmdGVyLW5leHQpDQogICAgICAob3JnLXNldC1jdXJyZW50LXRhZ3Mt b3ZlcmxheSBjdXJyZW50IG92LXByZWZpeCkNCiAgICAgIChzZXRxIHRibCBmdWxsdGFibGUgY2hh ciA/YSBjbnQgMCkNCiAgICAgICh3aGlsZSAoc2V0cSBlIChwb3AgdGJsKSkNCgkoY29uZA0KCSAo KGVxdWFsIChjYXIgZSkgOnN0YXJ0Z3JvdXApDQoJICAocHVzaCAnKCkgZ3JvdXBzKSAoc2V0cSBp bmdyb3VwIHQpDQoJICAod2hlbiAobm90ICg9IGNudCAwKSkNCgkgICAgKHNldHEgY250IDApDQoJ ICAgIChpbnNlcnQgIlxuIikpDQoJICAoaW5zZXJ0IChpZiAoY2RyIGUpIChmb3JtYXQgIiVzOiAi IChjZHIgZSkpICIiKSAieyAiKSkNCgkgKChlcXVhbCAoY2FyIGUpIDplbmRncm91cCkNCgkgIChz ZXRxIGluZ3JvdXAgbmlsIGNudCAwKQ0KCSAgKGluc2VydCAifSIgKGlmIChjZHIgZSkgKGZvcm1h dCAiICglcykgIiAoY2RyIGUpKSAiIikgIlxuIikpDQoJICgoZXF1YWwgZSAnKDpuZXdsaW5lKSkN CgkgICh3aGVuIChub3QgKD0gY250IDApKQ0KCSAgICAoc2V0cSBjbnQgMCkNCgkgICAgKGluc2Vy dCAiXG4iKQ0KCSAgICAoc2V0cSBlIChjYXIgdGJsKSkNCgkgICAgKHdoaWxlIChlcXVhbCAoY2Fy IHRibCkgJyg6bmV3bGluZSkpDQoJICAgICAgKGluc2VydCAiXG4iKQ0KCSAgICAgIChzZXRxIHRi bCAoY2RyIHRibCkpKSkpDQoJICgoZXF1YWwgZSAnKDpncm91cHRhZ3MpKSBuaWwpDQoJICh0DQoJ ICAoc2V0cSB0ZyAoY29weS1zZXF1ZW5jZSAoY2FyIGUpKSBjMiBuaWwpDQoJICAoaWYgKGNkciBl KQ0KCSAgICAgIChzZXRxIGMgKGNkciBlKSkNCgkgICAgOzsgYXV0b21hdGljYWxseSBhc3NpZ24g YSBjaGFyYWN0ZXIuDQoJICAgIChzZXRxIGMxIChzdHJpbmctdG8tY2hhcg0KCQkgICAgICAoZG93 bmNhc2UgKHN1YnN0cmluZw0KCQkJCSB0ZyAoaWYgKD0gKHN0cmluZy10by1jaGFyIHRnKSA/QCkg MSAwKSkpKSkNCgkgICAgKGlmIChvciAocmFzc29jIGMxIG50YWJsZSkgKHJhc3NvYyBjMSB0YWJs ZSkpDQoJCSh3aGlsZSAob3IgKHJhc3NvYyBjaGFyIG50YWJsZSkgKHJhc3NvYyBjaGFyIHRhYmxl KSkNCgkJICAoc2V0cSBjaGFyICgxKyBjaGFyKSkpDQoJICAgICAgKHNldHEgYzIgYzEpKQ0KCSAg ICAoc2V0cSBjIChvciBjMiBjaGFyKSkpDQoJICAoaWYgaW5ncm91cCAocHVzaCB0ZyAoY2FyIGdy b3VwcykpKQ0KCSAgKHNldHEgdGcgKG9yZy1hZGQtcHJvcHMgdGcgbmlsICdmYWNlDQoJICAJCQkg IChjb25kDQoJICAJCQkgICAoKG5vdCAoYXNzb2MgdGcgdGFibGUpKQ0KCSAgCQkJICAgIChvcmct Z2V0LXRvZG8tZmFjZSB0ZykpDQoJICAJCQkgICAoKG1lbWJlciB0ZyBjdXJyZW50KSBjLWZhY2Up DQoJICAJCQkgICAoKG1lbWJlciB0ZyBpbmhlcml0ZWQpIGktZmFjZSkpKSkNCgkgIChpZiAoZXF1 YWwgKGNhYXIgdGJsKSA6Z3JvdXB0YWdzKQ0KCSAgICAgIChvcmctYWRkLXByb3BzIHRnIG5pbCAn ZmFjZSAnb3JnLXRhZy1ncm91cCkpDQoJICAoaWYgKGFuZCAoPSBjbnQgMCkgKG5vdCBpbmdyb3Vw KSkgKGluc2VydCAiICAiKSkNCgkgIChpbnNlcnQgIlsiIGMgIl0gIiB0ZyAobWFrZS1zdHJpbmcN CgkJCQkgKC0gZndpZHRoIDQgKGxlbmd0aCB0ZykpID9cICkpDQoJICAocHVzaCAoY29ucyB0ZyBj KSBudGFibGUpDQoJICAod2hlbiAoPSAoc2V0cSBjbnQgKDErIGNudCkpIG5jb2wpDQoJICAgIChp bnNlcnQgIlxuIikNCgkgICAgKGlmIGluZ3JvdXAgKGluc2VydCAiICAiKSkNCgkgICAgKHNldHEg Y250IDApKSkpKQ0KICAgICAgKHNldHEgbnRhYmxlIChucmV2ZXJzZSBudGFibGUpKQ0KICAgICAg KGluc2VydCAiXG4iKQ0KICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCiAgICAgIChpZiAo bm90IGV4cGVydCkgKG9yZy1maXQtd2luZG93LXRvLWJ1ZmZlcikpDQogICAgICAoc2V0cSBydG4N CgkgICAgKGNhdGNoICdleGl0DQoJICAgICAgKHdoaWxlIHQNCgkJKG1lc3NhZ2UgIlthLXouLl06 VG9nZ2xlIFtTUENdOmNsZWFyIFtSRVRdOmFjY2VwdCBbVEFCXTpmcmVlIFshXSAlc2dyb3VwcyVz Ig0KCQkJIChpZiAobm90IGdyb3VwcykgIm5vICIgIiIpDQoJCQkgKGlmIGV4cGVydCAiIFtDLWNd OndpbmRvdyIgKGlmIGV4aXQtYWZ0ZXItbmV4dCAiIFtDLWNdOnNpbmdsZSIgIiBbQy1jXTptdWx0 aSIpKSkNCgkJKHNldHEgYyAobGV0ICgoaW5oaWJpdC1xdWl0IHQpKSAocmVhZC1jaGFyLWV4Y2x1 c2l2ZSkpKQ0KCQkoc2V0cSBvcmctbGFzdC10YWctc2VsZWN0aW9uLWtleSBjKQ0KCQkoY29uZA0K CQkgKCg9IGMgP1xyKSAodGhyb3cgJ2V4aXQgdCkpDQoJCSAoKD0gYyA/ISkNCgkJICAoc2V0cSBn cm91cHMgKG5vdCBncm91cHMpKQ0KCQkgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQoJCSAgKHdo aWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiW3t9XSIgbmlsIHQpIChyZXBsYWNlLW1hdGNoICIgIikp KQ0KCQkgKCg9IGMgP1xDLWMpDQoJCSAgKGlmIChub3QgZXhwZXJ0KQ0KCQkgICAgICAob3JnLWZh c3QtdGFnLXNob3ctZXhpdA0KCQkgICAgICAgKHNldHEgZXhpdC1hZnRlci1uZXh0IChub3QgZXhp dC1hZnRlci1uZXh0KSkpDQoJCSAgICAoc2V0cSBleHBlcnQgbmlsKQ0KCQkgICAgKGRlbGV0ZS1v dGhlci13aW5kb3dzKQ0KCQkgICAgKHNldC13aW5kb3ctYnVmZmVyIChzcGxpdC13aW5kb3ctdmVy dGljYWxseSkgIiAqT3JnIHRhZ3MqIikNCgkJICAgIChvcmctc3dpdGNoLXRvLWJ1ZmZlci1vdGhl ci13aW5kb3cgIiAqT3JnIHRhZ3MqIikNCgkJICAgIChvcmctZml0LXdpbmRvdy10by1idWZmZXIp KSkNCgkJICgob3IgKD0gYyA/XEMtZykNCgkJICAgICAgKGFuZCAoPSBjID9xKSAobm90IChyYXNz b2MgYyBudGFibGUpKSkpDQoJCSAgKG9yZy1kZXRhY2gtb3ZlcmxheSBvcmctdGFncy1vdmVybGF5 KQ0KCQkgIChzZXRxIHF1aXQtZmxhZyB0KSkNCgkJICgoPSBjID9cICkNCgkJICAoc2V0cSBjdXJy ZW50IG5pbCkNCgkJICAoaWYgZXhpdC1hZnRlci1uZXh0IChzZXRxIGV4aXQtYWZ0ZXItbmV4dCAn bm93KSkpDQoJCSAoKD0gYyA/XHQpDQoJCSAgKGNvbmRpdGlvbi1jYXNlIG5pbA0KCQkgICAgICAo c2V0cSB0ZyAob3JnLWljb21wbGV0aW5nLXJlYWQNCgkJCQkiVGFnOiAiDQoJCQkJKG9yIGJ1ZmZl ci10YWdzDQoJCQkJICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1Zg0KCQkJCSAgICAgIChvcmct Z2V0LWJ1ZmZlci10YWdzKSkpKSkNCgkJICAgIChxdWl0IChzZXRxIHRnICIiKSkpDQoJCSAgKHdo ZW4gKHN0cmluZy1tYXRjaCAiXFxTLSIgdGcpDQoJCSAgICAoYWRkLXRvLWxpc3QgJ2J1ZmZlci10 YWdzIChsaXN0IHRnKSkNCgkJICAgIChpZiAobWVtYmVyIHRnIGN1cnJlbnQpDQoJCQkoc2V0cSBj dXJyZW50IChkZWxldGUgdGcgY3VycmVudCkpDQoJCSAgICAgIChwdXNoIHRnIGN1cnJlbnQpKSkN CgkJICAoaWYgZXhpdC1hZnRlci1uZXh0IChzZXRxIGV4aXQtYWZ0ZXItbmV4dCAnbm93KSkpDQoJ CSAoKHNldHEgZSAocmFzc29jIGMgdG9kby10YWJsZSkgdGcgKGNhciBlKSkNCgkJICAod2l0aC1j dXJyZW50LWJ1ZmZlciBidWYNCgkJICAgIChzYXZlLWV4Y3Vyc2lvbiAob3JnLXRvZG8gdGcpKSkN CgkJICAoaWYgZXhpdC1hZnRlci1uZXh0IChzZXRxIGV4aXQtYWZ0ZXItbmV4dCAnbm93KSkpDQoJ CSAoKHNldHEgZSAocmFzc29jIGMgbnRhYmxlKSB0ZyAoY2FyIGUpKQ0KCQkgIChpZiAobWVtYmVy IHRnIGN1cnJlbnQpDQoJCSAgICAgIChzZXRxIGN1cnJlbnQgKGRlbGV0ZSB0ZyBjdXJyZW50KSkN CgkJICAgIChsb29wIGZvciBnIGluIGdyb3VwcyBkbw0KCQkJICAoaWYgKG1lbWJlciB0ZyBnKQ0K CQkJICAgICAgKG1hcGMgKGxhbWJkYSAoeCkNCgkJCQkgICAgICAoc2V0cSBjdXJyZW50IChkZWxl dGUgeCBjdXJyZW50KSkpDQoJCQkJICAgIGcpKSkNCgkJICAgIChwdXNoIHRnIGN1cnJlbnQpKQ0K CQkgIChpZiBleGl0LWFmdGVyLW5leHQgKHNldHEgZXhpdC1hZnRlci1uZXh0ICdub3cpKSkpDQoN CgkJOzsgQ3JlYXRlIGEgc29ydGVkIGxpc3QNCgkJKHNldHEgY3VycmVudA0KCQkgICAgICAoc29y dCBjdXJyZW50DQoJCQkgICAgKGxhbWJkYSAoYSBiKQ0KCQkJICAgICAgKGFzc29jIGIgKGNkciAo bWVtcSAoYXNzb2MgYSBudGFibGUpIG50YWJsZSkpKSkpKQ0KCQkoaWYgKGVxIGV4aXQtYWZ0ZXIt bmV4dCAnbm93KSAodGhyb3cgJ2V4aXQgdCkpDQoJCShnb3RvLWNoYXIgKHBvaW50LW1pbikpDQoJ CShiZWdpbm5pbmctb2YtbGluZSAyKQ0KCQkoZGVsZXRlLXJlZ2lvbiAocG9pbnQpIChwb2ludC1h dC1lb2wpKQ0KCQkob3JnLWZhc3QtdGFnLWluc2VydCAiQ3VycmVudCIgY3VycmVudCBjLWZhY2Up DQoJCShvcmctc2V0LWN1cnJlbnQtdGFncy1vdmVybGF5IGN1cnJlbnQgb3YtcHJlZml4KQ0KCQko d2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkDQoJCQkob3JnLXJlICJcXFsuXFxdIFxcKFtbOmFsbnVt Ol1fQCMlXStcXCkiKSBuaWwgdCkNCgkJICAoc2V0cSB0ZyAobWF0Y2gtc3RyaW5nIDEpKQ0KCQkg IChhZGQtdGV4dC1wcm9wZXJ0aWVzDQoJCSAgIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVu ZCAxKQ0KCQkgICAobGlzdCAnZmFjZQ0KCQkJIChjb25kDQoJCQkgICgobWVtYmVyIHRnIGN1cnJl bnQpIGMtZmFjZSkNCgkJCSAgKChtZW1iZXIgdGcgaW5oZXJpdGVkKSBpLWZhY2UpDQoJCQkgICh0 IChnZXQtdGV4dC1wcm9wZXJ0eSAobWF0Y2gtYmVnaW5uaW5nIDEpICdmYWNlKSkpKSkpDQoJCShn b3RvLWNoYXIgKHBvaW50LW1pbikpKSkpDQogICAgICAob3JnLWRldGFjaC1vdmVybGF5IG9yZy10 YWdzLW92ZXJsYXkpDQogICAgICAoaWYgcnRuDQoJICAobWFwY29uY2F0ICdpZGVudGl0eSBjdXJy ZW50ICI6IikNCgluaWwpKSkpDQoNCihkZWZ1biBvcmctZ2V0LXRhZ3Mtc3RyaW5nICgpDQogICJH ZXQgdGhlIFRBR1Mgc3RyaW5nIGluIHRoZSBjdXJyZW50IGhlYWRsaW5lLiINCiAgKHVubGVzcyAo b3JnLWF0LWhlYWRpbmctcCB0KQ0KICAgICh1c2VyLWVycm9yICJOb3Qgb24gYSBoZWFkaW5nIikp DQogIChzYXZlLWV4Y3Vyc2lvbg0KICAgIChiZWdpbm5pbmctb2YtbGluZSAxKQ0KICAgIChpZiAo bG9va2luZy1hdCAob3JnLXJlICIuKlsgXHRdXFwoOltbOmFsbnVtOl1fQCMlOl0rOlxcKVsgXHRd KiQiKSkNCgkob3JnLW1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpDQogICAgICAiIikpKQ0K DQooZGVmdW4gb3JnLWdldC10YWdzICgpDQogICJHZXQgdGhlIGxpc3Qgb2YgdGFncyBzcGVjaWZp ZWQgaW4gdGhlIGN1cnJlbnQgaGVhZGxpbmUuIg0KICAob3JnLXNwbGl0LXN0cmluZyAob3JnLWdl dC10YWdzLXN0cmluZykgIjoiKSkNCg0KKGRlZnVuIG9yZy1nZXQtYnVmZmVyLXRhZ3MgKCkNCiAg IkdldCBhIHRhYmxlIG9mIGFsbCB0YWdzIHVzZWQgaW4gdGhlIGJ1ZmZlciwgZm9yIGNvbXBsZXRp b24uIg0KICAobGV0ICh0YWdzKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkNCiAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQNCgkgICAgICAo b3JnLXJlICJbIFx0XTpcXChbWzphbG51bTpdX0AjJTpdK1xcKTpbIFx0XHJcbl0iKSBuaWwgdCkN Cgkod2hlbiAoZXF1YWwgKGNoYXItYWZ0ZXIgKHBvaW50LWF0LWJvbCAwKSkgPyopDQoJICAobWFw YyAobGFtYmRhICh4KSAoYWRkLXRvLWxpc3QgJ3RhZ3MgeCkpDQoJCShvcmctc3BsaXQtc3RyaW5n IChvcmctbWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMSkgIjoiKSkpKSkNCiAgICAobWFwYyAo bGFtYmRhIChzKSAoYWRkLXRvLWxpc3QgJ3RhZ3MgcykpIG9yZy1maWxlLXRhZ3MpDQogICAgKG1h cGNhciAnbGlzdCB0YWdzKSkpDQoNCjs7OzsgVGhlIG1hcHBpbmcgQVBJDQoNCihkZWZ1biBvcmct bWFwLWVudHJpZXMgKGZ1bmMgJm9wdGlvbmFsIG1hdGNoIHNjb3BlICZyZXN0IHNraXApDQogICJD YWxsIEZVTkMgYXQgZWFjaCBoZWFkbGluZSBzZWxlY3RlZCBieSBNQVRDSCBpbiBTQ09QRS4NCg0K RlVOQyBpcyBhIGZ1bmN0aW9uIG9yIGEgbGlzcCBmb3JtLiAgVGhlIGZ1bmN0aW9uIHdpbGwgYmUg Y2FsbGVkIHdpdGhvdXQNCmFyZ3VtZW50cywgd2l0aCB0aGUgY3Vyc29yIHBvc2l0aW9uZWQgYXQg dGhlIGJlZ2lubmluZyBvZiB0aGUgaGVhZGxpbmUuDQpUaGUgcmV0dXJuIHZhbHVlcyBvZiBhbGwg Y2FsbHMgdG8gdGhlIGZ1bmN0aW9uIHdpbGwgYmUgY29sbGVjdGVkIGFuZA0KcmV0dXJuZWQgYXMg YSBsaXN0Lg0KDQpUaGUgY2FsbCB0byBGVU5DIHdpbGwgYmUgd3JhcHBlZCBpbnRvIGEgc2F2ZS1l eGN1cnNpb24gZm9ybSwgc28gRlVOQw0KZG9lcyBub3QgbmVlZCB0byBwcmVzZXJ2ZSBwb2ludC4g IEFmdGVyIGV2YWx1YXRpb24sIHRoZSBjdXJzb3Igd2lsbCBiZQ0KbW92ZWQgdG8gdGhlIGVuZCBv ZiB0aGUgbGluZSAocHJlc3VtYWJseSBvZiB0aGUgaGVhZGxpbmUgb2YgdGhlDQpwcm9jZXNzZWQg ZW50cnkpIGFuZCBzZWFyY2ggY29udGludWVzIGZyb20gdGhlcmUuICBVbmRlciBzb21lDQpjaXJj dW1zdGFuY2VzLCB0aGlzIG1heSBub3QgcHJvZHVjZSB0aGUgd2FudGVkIHJlc3VsdHMuICBGb3Ig ZXhhbXBsZSwNCmlmIHlvdSBoYXZlIHJlbW92ZWQgKGUuZy4gYXJjaGl2ZWQpIHRoZSBjdXJyZW50 IChzdWIpdHJlZSBpdCBjb3VsZA0KbWVhbiB0aGF0IHRoZSBuZXh0IGVudHJ5IHdpbGwgYmUgc2tp cHBlZCBlbnRpcmVseS4gIEluIHN1Y2ggY2FzZXMsIHlvdQ0KY2FuIHNwZWNpZnkgdGhlIHBvc2l0 aW9uIGZyb20gd2hlcmUgc2VhcmNoIHNob3VsZCBjb250aW51ZSBieSBtYWtpbmcNCkZVTkMgc2V0 IHRoZSB2YXJpYWJsZSBgb3JnLW1hcC1jb250aW51ZS1mcm9tJyB0byB0aGUgZGVzaXJlZCBidWZm ZXINCnBvc2l0aW9uLg0KDQpNQVRDSCBpcyBhIHRhZ3MvcHJvcGVydHkvdG9kbyBtYXRjaCBhcyBp dCBpcyB1c2VkIGluIHRoZSBhZ2VuZGEgdGFncyB2aWV3Lg0KT25seSBoZWFkbGluZXMgdGhhdCBh cmUgbWF0Y2hlZCBieSB0aGlzIHF1ZXJ5IHdpbGwgYmUgY29uc2lkZXJlZCBkdXJpbmcNCnRoZSBp dGVyYXRpb24uICBXaGVuIE1BVENIIGlzIG5pbCBvciB0LCBhbGwgaGVhZGxpbmVzIHdpbGwgYmUN CnZpc2l0ZWQgYnkgdGhlIGl0ZXJhdGlvbi4NCg0KU0NPUEUgZGV0ZXJtaW5lcyB0aGUgc2NvcGUg b2YgdGhpcyBjb21tYW5kLiAgSXQgY2FuIGJlIGFueSBvZjoNCg0KbmlsICAgICBUaGUgY3VycmVu dCBidWZmZXIsIHJlc3BlY3RpbmcgdGhlIHJlc3RyaWN0aW9uIGlmIGFueQ0KdHJlZSAgICBUaGUg c3VidHJlZSBzdGFydGVkIHdpdGggdGhlIGVudHJ5IGF0IHBvaW50DQpyZWdpb24gIFRoZSBlbnRy aWVzIHdpdGhpbiB0aGUgYWN0aXZlIHJlZ2lvbiwgaWYgYW55DQpyZWdpb24tc3RhcnQtbGV2ZWwN CiAgICAgICAgVGhlIGVudHJpZXMgd2l0aGluIHRoZSBhY3RpdmUgcmVnaW9uLCBidXQgb25seSB0 aG9zZSBhdA0KICAgICAgICB0aGUgc2FtZSBsZXZlbCB0aGFuIHRoZSBmaXJzdCBvbmUuDQpmaWxl ICAgIFRoZSBjdXJyZW50IGJ1ZmZlciwgd2l0aG91dCByZXN0cmljdGlvbg0KZmlsZS13aXRoLWFy Y2hpdmVzDQogICAgICAgIFRoZSBjdXJyZW50IGJ1ZmZlciwgYW5kIGFueSBhcmNoaXZlcyBhc3Nv Y2lhdGVkIHdpdGggaXQNCmFnZW5kYSAgQWxsIGFnZW5kYSBmaWxlcw0KYWdlbmRhLXdpdGgtYXJj aGl2ZXMNCiAgICAgICAgQWxsIGFnZW5kYSBmaWxlcyB3aXRoIGFueSBhcmNoaXZlIGZpbGVzIGFz c29jaWF0ZWQgd2l0aCB0aGVtDQpcKGZpbGUxIGZpbGUyIC4uLikNCiAgICAgICAgSWYgdGhpcyBp cyBhIGxpc3QsIGFsbCBmaWxlcyBpbiB0aGUgbGlzdCB3aWxsIGJlIHNjYW5uZWQNCg0KVGhlIHJl bWFpbmluZyBhcmdzIGFyZSB0cmVhdGVkIGFzIHNldHRpbmdzIGZvciB0aGUgc2tpcHBpbmcgZmFj aWxpdGllcyBvZg0KdGhlIHNjYW5uZXIuICBUaGUgZm9sbG93aW5nIGl0ZW1zIGNhbiBiZSBnaXZl biBoZXJlOg0KDQogIGFyY2hpdmUgICAgc2tpcCB0cmVlcyB3aXRoIHRoZSBhcmNoaXZlIHRhZw0K ICBjb21tZW50ICAgIHNraXAgdHJlZXMgd2l0aCB0aGUgQ09NTUVOVCBrZXl3b3JkDQogIGZ1bmN0 aW9uIG9yIEVtYWNzIExpc3AgZm9ybToNCiAgICAgICAgICAgICB3aWxsIGJlIHVzZWQgYXMgdmFs dWUgZm9yIGBvcmctYWdlbmRhLXNraXAtZnVuY3Rpb24nLCBzbw0KICAgICAgICAgICAgIHdoZW5l dmVyIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9zaXRpb24sIEZVTkMgd2lsbCBub3QgYmUNCiAg ICAgICAgICAgICBjYWxsZWQgZm9yIHRoYXQgZW50cnkgYW5kIHNlYXJjaCB3aWxsIGNvbnRpbnVl IGZyb20gdGhlDQogICAgICAgICAgICAgcG9zaXRpb24gcmV0dXJuZWQNCg0KSWYgeW91ciBmdW5j dGlvbiBuZWVkcyB0byByZXRyaWV2ZSB0aGUgdGFncyBpbmNsdWRpbmcgaW5oZXJpdGVkIHRhZ3MN CmF0IHRoZSAqY3VycmVudCogZW50cnksIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgdmFy aWFibGUNCmBvcmctc2Nhbm5lci10YWdzJyB3aGljaCB3aWxsIGJlIG11Y2ggZmFzdGVyIHRoYW4g Z2V0dGluZyB0aGUgdmFsdWUNCndpdGggYG9yZy1nZXQtdGFncy1hdCcuICBJZiB5b3VyIGZ1bmN0 aW9uIGdldHMgcHJvcGVydGllcyB3aXRoDQpgb3JnLWVudHJ5LXByb3BlcnRpZXMnIGF0IHRoZSAq Y3VycmVudCogZW50cnksIGJpbmQgYG9yZy10cnVzdC1zY2FubmVyLXRhZ3MnDQp0byB0IGFyb3Vu ZCB0aGUgY2FsbCB0byBgb3JnLWVudHJ5LXByb3BlcnRpZXMnIHRvIGdldCB0aGUgc2FtZSBzcGVl ZHVwLg0KTm90ZSB0aGF0IGlmIHlvdXIgZnVuY3Rpb24gbW92ZXMgYXJvdW5kIHRvIHJldHJpZXZl IHRhZ3MgYW5kIHByb3BlcnRpZXMgYXQNCmEgKmRpZmZlcmVudCogZW50cnksIHlvdSBjYW5ub3Qg dXNlIHRoZXNlIHRlY2huaXF1ZXMuIg0KICAodW5sZXNzIChhbmQgKG9yIChlcSBzY29wZSAncmVn aW9uKSAoZXEgc2NvcGUgJ3JlZ2lvbi1zdGFydC1sZXZlbCkpDQoJICAgICAgIChub3QgKG9yZy1y ZWdpb24tYWN0aXZlLXApKSkNCiAgICAobGV0KiAoKG9yZy1hZ2VuZGEtYXJjaGl2ZXMtbW9kZSBu aWwpIDsganVzdCB0byBtYWtlIHN1cmUNCgkgICAob3JnLWFnZW5kYS1za2lwLWFyY2hpdmVkLXRy ZWVzIChtZW1xICdhcmNoaXZlIHNraXApKQ0KCSAgIChvcmctYWdlbmRhLXNraXAtY29tbWVudC10 cmVlcyAobWVtcSAnY29tbWVudCBza2lwKSkNCgkgICAob3JnLWFnZW5kYS1za2lwLWZ1bmN0aW9u DQoJICAgIChjYXIgKG9yZy1kZWxldGUtYWxsICcoY29tbWVudCBhcmNoaXZlKSBza2lwKSkpDQoJ ICAgKG9yZy10YWdzLW1hdGNoLWxpc3Qtc3VibGV2ZWxzIHQpDQoJICAgKHN0YXJ0LWxldmVsIChl cSBzY29wZSAncmVnaW9uLXN0YXJ0LWxldmVsKSkNCgkgICBtYXRjaGVyIGZpbGUgcmVzDQoJICAg b3JnLXRvZG8ta2V5d29yZHMtZm9yLWFnZW5kYQ0KCSAgIG9yZy1kb25lLWtleXdvcmRzLWZvci1h Z2VuZGENCgkgICBvcmctdG9kby1rZXl3b3JkLWFsaXN0LWZvci1hZ2VuZGENCgkgICBvcmctZHJh d2Vycy1mb3ItYWdlbmRhDQoJICAgb3JnLXRhZy1hbGlzdC1mb3ItYWdlbmRhDQoJICAgdG9kby1v bmx5KQ0KDQogICAgICAoY29uZA0KICAgICAgICgoZXEgbWF0Y2ggdCkgICAoc2V0cSBtYXRjaGVy IHQpKQ0KICAgICAgICgoZXEgbWF0Y2ggbmlsKSAoc2V0cSBtYXRjaGVyIHQpKQ0KICAgICAgICh0 IChzZXRxIG1hdGNoZXIgKGlmIG1hdGNoIChjZHIgKG9yZy1tYWtlLXRhZ3MtbWF0Y2hlciBtYXRj aCkpIHQpKSkpDQoNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCShzYXZlLXJlc3RyaWN0aW9uDQoJ ICAoY29uZCAoKGVxIHNjb3BlICd0cmVlKQ0KCQkgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkNCgkJ IChvcmctbmFycm93LXRvLXN1YnRyZWUpDQoJCSAoc2V0cSBzY29wZSBuaWwpKQ0KCQkoKGFuZCAo b3IgKGVxIHNjb3BlICdyZWdpb24pIChlcSBzY29wZSAncmVnaW9uLXN0YXJ0LWxldmVsKSkNCgkJ ICAgICAgKG9yZy1yZWdpb24tYWN0aXZlLXApKQ0KCQkgOzsgSWYgbmVlZGVkLCBzZXQgc3RhcnQt bGV2ZWwgdG8gYSBzdHJpbmcgbGlrZSAiMiINCgkJICh3aGVuIHN0YXJ0LWxldmVsDQoJCSAgIChz YXZlLWV4Y3Vyc2lvbg0KCQkgICAgIChnb3RvLWNoYXIgKHJlZ2lvbi1iZWdpbm5pbmcpKQ0KCQkg ICAgICh1bmxlc3MgKG9yZy1hdC1oZWFkaW5nLXApIChvdXRsaW5lLW5leHQtaGVhZGluZykpDQoJ CSAgICAgKHNldHEgc3RhcnQtbGV2ZWwgKG9yZy1jdXJyZW50LWxldmVsKSkpKQ0KCQkgKG5hcnJv dy10by1yZWdpb24gKHJlZ2lvbi1iZWdpbm5pbmcpDQoJCQkJICAgKHNhdmUtZXhjdXJzaW9uDQoJ CQkJICAgICAoZ290by1jaGFyIChyZWdpb24tZW5kKSkNCgkJCQkgICAgICh1bmxlc3MgKGFuZCAo Ym9scCkgKG9yZy1hdC1oZWFkaW5nLXApKQ0KCQkJCSAgICAgICAob3V0bGluZS1uZXh0LWhlYWRp bmcpKQ0KCQkJCSAgICAgKHBvaW50KSkpDQoJCSAoc2V0cSBzY29wZSBuaWwpKSkNCg0KCSAgKGlm IChub3Qgc2NvcGUpDQoJICAgICAgKHByb2duDQoJCShvcmctYWdlbmRhLXByZXBhcmUtYnVmZmVy cw0KCQkgKGxpc3QgKGJ1ZmZlci1maWxlLW5hbWUgKGN1cnJlbnQtYnVmZmVyKSkpKQ0KCQkoc2V0 cSByZXMgKG9yZy1zY2FuLXRhZ3MgZnVuYyBtYXRjaGVyIHRvZG8tb25seSBzdGFydC1sZXZlbCkp KQ0KCSAgICA7OyBHZXQgdGhlIHJpZ2h0IHNjb3BlDQoJICAgIChjb25kDQoJICAgICAoKGFuZCBz Y29wZSAobGlzdHAgc2NvcGUpIChzeW1ib2xwIChjYXIgc2NvcGUpKSkNCgkgICAgICAoc2V0cSBz Y29wZSAoZXZhbCBzY29wZSkpKQ0KCSAgICAgKChlcSBzY29wZSAnYWdlbmRhKQ0KCSAgICAgIChz ZXRxIHNjb3BlIChvcmctYWdlbmRhLWZpbGVzIHQpKSkNCgkgICAgICgoZXEgc2NvcGUgJ2FnZW5k YS13aXRoLWFyY2hpdmVzKQ0KCSAgICAgIChzZXRxIHNjb3BlIChvcmctYWdlbmRhLWZpbGVzIHQp KQ0KCSAgICAgIChzZXRxIHNjb3BlIChvcmctYWRkLWFyY2hpdmUtZmlsZXMgc2NvcGUpKSkNCgkg ICAgICgoZXEgc2NvcGUgJ2ZpbGUpDQoJICAgICAgKHNldHEgc2NvcGUgKGxpc3QgKGJ1ZmZlci1m aWxlLW5hbWUpKSkpDQoJICAgICAoKGVxIHNjb3BlICdmaWxlLXdpdGgtYXJjaGl2ZXMpDQoJICAg ICAgKHNldHEgc2NvcGUgKG9yZy1hZGQtYXJjaGl2ZS1maWxlcyAobGlzdCAoYnVmZmVyLWZpbGUt bmFtZSkpKSkpKQ0KCSAgICAob3JnLWFnZW5kYS1wcmVwYXJlLWJ1ZmZlcnMgc2NvcGUpDQoJICAg ICh3aGlsZSAoc2V0cSBmaWxlIChwb3Agc2NvcGUpKQ0KCSAgICAgICh3aXRoLWN1cnJlbnQtYnVm ZmVyIChvcmctZmluZC1iYXNlLWJ1ZmZlci12aXNpdGluZyBmaWxlKQ0KCQkoc2F2ZS1leGN1cnNp b24NCgkJICAoc2F2ZS1yZXN0cmljdGlvbg0KCQkgICAgKHdpZGVuKQ0KCQkgICAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkNCgkJICAgIChzZXRxIHJlcyAoYXBwZW5kIHJlcyAob3JnLXNjYW4tdGFn cyBmdW5jIG1hdGNoZXIgdG9kby1vbmx5KSkpKSkpKSkpKQ0KICAgICAgcmVzKSkpDQoNCjs7Ozsg UHJvcGVydGllcw0KDQo7OzsgU2V0dGluZyBhbmQgcmV0cmlldmluZyBwcm9wZXJ0aWVzDQoNCihk ZWZjb25zdCBvcmctc3BlY2lhbC1wcm9wZXJ0aWVzDQogICcoIlRPRE8iICJUQUdTIiAiQUxMVEFH UyIgIkRFQURMSU5FIiAiU0NIRURVTEVEIiAiQ0xPQ0siICJDTE9TRUQiICJQUklPUklUWSINCiAg ICAiVElNRVNUQU1QIiAiVElNRVNUQU1QX0lBIiAiQkxPQ0tFRCIgIkZJTEUiICJDTE9DS1NVTSIg IkNMT0NLU1VNX1QiKQ0KICAiVGhlIHNwZWNpYWwgcHJvcGVydGllcyB2YWxpZCBpbiBPcmctbW9k ZS4NCg0KVGhlc2UgYXJlIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4gdGhlIHBy b3BlcnR5IGRyYXdlciwNCmJ1dCBpbiBzb21lIG90aGVyIHdheS4iKQ0KDQooZGVmY29uc3Qgb3Jn LWRlZmF1bHQtcHJvcGVydGllcw0KICAnKCJBUkNISVZFIiAiQ0FURUdPUlkiICJTVU1NQVJZIiAi REVTQ1JJUFRJT04iICJDVVNUT01fSUQiDQogICAgIkxPQ0FUSU9OIiAiTE9HR0lORyIgIkNPTFVN TlMiICJWSVNJQklMSVRZIg0KICAgICJUQUJMRV9FWFBPUlRfRk9STUFUIiAiVEFCTEVfRVhQT1JU X0ZJTEUiDQogICAgIkVYUE9SVF9PUFRJT05TIiAiRVhQT1JUX1RFWFQiICJFWFBPUlRfRklMRV9O QU1FIg0KICAgICJFWFBPUlRfVElUTEUiICJFWFBPUlRfQVVUSE9SIiAiRVhQT1JUX0RBVEUiDQog ICAgIk9SREVSRUQiICJOT0JMT0NLSU5HIiAiQ09PS0lFX0RBVEEiICJMT0dfSU5UT19EUkFXRVIi ICJSRVBFQVRfVE9fU1RBVEUiDQogICAgIkNMT0NLX01PREVMSU5FX1RPVEFMIiAiU1RZTEUiICJI VE1MX0NPTlRBSU5FUl9DTEFTUyIpDQogICJTb21lIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCBi eSBPcmctbW9kZSBmb3IgdmFyaW91cyBwdXJwb3Nlcy4NCkJlaW5nIGluIHRoaXMgbGlzdCBtYWtl cyBzdXJlIHRoYXQgdGhleSBhcmUgb2ZmZXJlZCBmb3IgY29tcGxldGlvbi4iKQ0KDQooZGVmY29u c3Qgb3JnLXByb3BlcnR5LXN0YXJ0LXJlICJeWyBcdF0qOlBST1BFUlRJRVM6WyBcdF0qJCINCiAg IlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgZmlyc3QgbGluZSBvZiBhIHByb3BlcnR5 IGRyYXdlci4iKQ0KDQooZGVmY29uc3Qgb3JnLXByb3BlcnR5LWVuZC1yZSAiXlsgXHRdKjpFTkQ6 WyBcdF0qJCINCiAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgbGFzdCBsaW5lIG9m IGEgcHJvcGVydHkgZHJhd2VyLiIpDQoNCihkZWZjb25zdCBvcmctY2xvY2stZHJhd2VyLXN0YXJ0 LXJlICJeWyBcdF0qOkNMT0NLOlsgXHRdKiQiDQogICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hp bmcgdGhlIGZpcnN0IGxpbmUgb2YgYSBwcm9wZXJ0eSBkcmF3ZXIuIikNCg0KKGRlZmNvbnN0IG9y Zy1jbG9jay1kcmF3ZXItZW5kLXJlICJeWyBcdF0qOkVORDpbIFx0XSokIg0KICAiUmVndWxhciBl eHByZXNzaW9uIG1hdGNoaW5nIHRoZSBmaXJzdCBsaW5lIG9mIGEgcHJvcGVydHkgZHJhd2VyLiIp DQoNCihkZWZjb25zdCBvcmctcHJvcGVydHktZHJhd2VyLXJlDQogIChjb25jYXQgIlxcKCIgb3Jn LXByb3BlcnR5LXN0YXJ0LXJlICJcXClbXlwwMDBdKlxcKCINCgkgIG9yZy1wcm9wZXJ0eS1lbmQt cmUgIlxcKVxuPyIpDQogICJNYXRjaGVzIGFuIGVudGlyZSBwcm9wZXJ0eSBkcmF3ZXIuIikNCg0K KGRlZmNvbnN0IG9yZy1jbG9jay1kcmF3ZXItcmUNCiAgKGNvbmNhdCAiXFwoIiBvcmctY2xvY2st ZHJhd2VyLXN0YXJ0LXJlICJcXClbXlwwMDBdKlxcKCINCgkgIG9yZy1wcm9wZXJ0eS1lbmQtcmUg IlxcKVxuPyIpDQogICJNYXRjaGVzIGFuIGVudGlyZSBjbG9jayBkcmF3ZXIuIikNCg0KKGRlZnVu IG9yZy1wcm9wZXJ0eS1hY3Rpb24gKCkNCiAgIkRvIGFuIGFjdGlvbiBvbiBwcm9wZXJ0aWVzLiIN CiAgKGludGVyYWN0aXZlKQ0KICAobGV0IChjKQ0KICAgIChvcmctYXQtcHJvcGVydHktcCkNCiAg ICAobWVzc2FnZSAiUHJvcGVydHkgQWN0aW9uOiAgW3NdZXQgIFtkXWVsZXRlICBbRF1lbGV0ZSBn bG9iYWxseSAgW2Ndb21wdXRlIikNCiAgICAoc2V0cSBjIChyZWFkLWNoYXItZXhjbHVzaXZlKSkN CiAgICAoY29uZA0KICAgICAoKGVxdWFsIGMgP3MpDQogICAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5 ICdvcmctc2V0LXByb3BlcnR5KSkNCiAgICAgKChlcXVhbCBjID9kKQ0KICAgICAgKGNhbGwtaW50 ZXJhY3RpdmVseSAnb3JnLWRlbGV0ZS1wcm9wZXJ0eSkpDQogICAgICgoZXF1YWwgYyA/RCkNCiAg ICAgIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1kZWxldGUtcHJvcGVydHktZ2xvYmFsbHkpKQ0K ICAgICAoKGVxdWFsIGMgP2MpDQogICAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctY29tcHV0 ZS1wcm9wZXJ0eS1hdC1wb2ludCkpDQogICAgICh0ICh1c2VyLWVycm9yICJObyBzdWNoIHByb3Bl cnR5IGFjdGlvbiAlYyIgYykpKSkpDQoNCihkZWZ1biBvcmctaW5jLWVmZm9ydCAoKQ0KICAiSW5j cmVtZW50IHRoZSB2YWx1ZSBvZiB0aGUgZWZmb3J0IHByb3BlcnR5IGluIHRoZSBjdXJyZW50IGVu dHJ5LiINCiAgKGludGVyYWN0aXZlKQ0KICAob3JnLXNldC1lZmZvcnQgbmlsIHQpKQ0KDQooZGVm dmFyIG9yZy1jbG9jay1lZmZvcnQpICAgICAgIDs7IERlZmluZWQgaW4gb3JnLWNsb2NrLmVsDQoo ZGVmdmFyIG9yZy1jbG9jay1jdXJyZW50LXRhc2spIDs7IERlZmluZWQgaW4gb3JnLWNsb2NrLmVs DQooZGVmdW4gb3JnLXNldC1lZmZvcnQgKCZvcHRpb25hbCB2YWx1ZSBpbmNyZW1lbnQpDQogICJT ZXQgdGhlIGVmZm9ydCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudCBlbnRyeS4NCldpdGggbnVtZXJp Y2FsIHByZWZpeCBhcmcsIHVzZSB0aGUgbnRoIGFsbG93ZWQgdmFsdWUsIDAgc3RhbmRzIGZvciB0 aGUNCjEwdGggYWxsb3dlZCB2YWx1ZS4NCg0KV2hlbiBJTkNSRU1FTlQgaXMgbm9uLW5pbCwgc2V0 IHRoZSBwcm9wZXJ0eSB0byB0aGUgbmV4dCBhbGxvd2VkIHZhbHVlLiINCiAgKGludGVyYWN0aXZl ICJQIikNCiAgKGlmIChlcXVhbCB2YWx1ZSAwKSAoc2V0cSB2YWx1ZSAxMCkpDQogIChsZXQqICgo Y29tcGxldGlvbi1pZ25vcmUtY2FzZSB0KQ0KCSAocHJvcCBvcmctZWZmb3J0LXByb3BlcnR5KQ0K CSAoY3VyIChvcmctZW50cnktZ2V0IG5pbCBwcm9wKSkNCgkgKGFsbG93ZWQgKG9yZy1wcm9wZXJ0 eS1nZXQtYWxsb3dlZC12YWx1ZXMgbmlsIHByb3AgJ3RhYmxlKSkNCgkgKGV4aXN0aW5nIChtYXBj YXIgJ2xpc3QgKG9yZy1wcm9wZXJ0eS12YWx1ZXMgcHJvcCkpKQ0KCSAoaGVhZGluZyAobnRoIDQg KG9yZy1oZWFkaW5nLWNvbXBvbmVudHMpKSkNCgkgcnBsDQoJICh2YWwgKGNvbmQNCgkgICAgICAg KChzdHJpbmdwIHZhbHVlKSB2YWx1ZSkNCgkgICAgICAgKChhbmQgYWxsb3dlZCAoaW50ZWdlcnAg dmFsdWUpKQ0KCQkob3IgKGNhciAobnRoICgxLSB2YWx1ZSkgYWxsb3dlZCkpDQoJCSAgICAoY2Fy IChvcmctbGFzdCBhbGxvd2VkKSkpKQ0KCSAgICAgICAoKGFuZCBhbGxvd2VkIGluY3JlbWVudCkN CgkJKG9yIChjYWFkciAobWVtYmVyIChsaXN0IGN1cikgYWxsb3dlZCkpDQoJCSAgICAodXNlci1l cnJvciAiQWxsb3dlZCBlZmZvcnQgdmFsdWVzIGFyZSBub3Qgc2V0IikpKQ0KCSAgICAgICAoYWxs b3dlZA0KCQkobWVzc2FnZSAiU2VsZWN0IDEtOSwwLCBbUkVUJXNdOiAlcyINCgkJCSAoaWYgY3Vy IChjb25jYXQgIj0iIGN1cikgIiIpDQoJCQkgKG1hcGNvbmNhdCAnY2FyIGFsbG93ZWQgIiAiKSkN CgkJKHNldHEgcnBsIChyZWFkLWNoYXItZXhjbHVzaXZlKSkNCgkJKGlmIChlcXVhbCBycGwgP1xy KQ0KCQkgICAgY3VyDQoJCSAgKHNldHEgcnBsICgtIHJwbCA/MCkpDQoJCSAgKGlmIChlcXVhbCBy cGwgMCkgKHNldHEgcnBsIDEwKSkNCgkJICAoaWYgKGFuZCAoPiBycGwgMCkgKDw9IHJwbCAobGVu Z3RoIGFsbG93ZWQpKSkNCgkJICAgICAgKGNhciAobnRoICgxLSBycGwpIGFsbG93ZWQpKQ0KCQkg ICAgKG9yZy1jb21wbGV0aW5nLXJlYWQgIkVmZm9ydDogIiBhbGxvd2VkIG5pbCkpKSkNCgkgICAg ICAgKHQNCgkJKGxldCAob3JnLWNvbXBsZXRpb24tdXNlLWlkbyBvcmctY29tcGxldGlvbi11c2Ut aXN3aXRjaGIpDQoJCSAgKG9yZy1jb21wbGV0aW5nLXJlYWQNCgkJICAgKGNvbmNhdCAiRWZmb3J0 ICIgKGlmIChhbmQgY3VyIChzdHJpbmctbWF0Y2ggIlxcUy0iIGN1cikpDQoJCQkJCSAoY29uY2F0 ICJbIiBjdXIgIl0iKSAiIikNCgkJCSAgICI6ICIpDQoJCSAgIGV4aXN0aW5nIG5pbCBuaWwgIiIg bmlsIGN1cikpKSkpKQ0KICAgICh1bmxlc3MgKGVxdWFsIChvcmctZW50cnktZ2V0IG5pbCBwcm9w KSB2YWwpDQogICAgICAob3JnLWVudHJ5LXB1dCBuaWwgcHJvcCB2YWwpKQ0KICAgIChzYXZlLWV4 Y3Vyc2lvbg0KICAgICAgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkNCiAgICAgIChwdXQtdGV4dC1w cm9wZXJ0eSAocG9pbnQtYXQtYm9sKSAocG9pbnQtYXQtZW9sKSAnb3JnLWVmZm9ydCB2YWwpKQ0K ICAgICh3aGVuIChzdHJpbmc9IGhlYWRpbmcgb3JnLWNsb2NrLWN1cnJlbnQtdGFzaykNCiAgICAg IChzZXRxIG9yZy1jbG9jay1lZmZvcnQgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludC1hdC1ib2wp ICdvcmctZWZmb3J0KSkNCiAgICAgIChvcmctY2xvY2stdXBkYXRlLW1vZGUtbGluZSkpDQogICAg KG1lc3NhZ2UgIiVzIGlzIG5vdyAlcyIgcHJvcCB2YWwpKSkNCg0KKGRlZnVuIG9yZy1hdC1wcm9w ZXJ0eS1wICgpDQogICJJcyBjdXJzb3IgaW5zaWRlIGEgcHJvcGVydHkgZHJhd2VyPyINCiAgKHNh dmUtZXhjdXJzaW9uDQogICAgKHdoZW4gKGVxdWFsICdub2RlLXByb3BlcnR5IChjYXIgKG9yZy1l bGVtZW50LWF0LXBvaW50KSkpDQogICAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMSkNCiAgICAgIChs b29raW5nLWF0IG9yZy1wcm9wZXJ0eS1yZSkpKSkNCg0KKGRlZnVuIG9yZy1nZXQtcHJvcGVydHkt YmxvY2sgKCZvcHRpb25hbCBiZWcgZW5kIGZvcmNlKQ0KICAiUmV0dXJuIHRoZSAoYmVnIC4gZW5k KSByYW5nZSBvZiB0aGUgYm9keSBvZiB0aGUgcHJvcGVydHkgZHJhd2VyLg0KQkVHIGFuZCBFTkQg YXJlIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgY3VycmVudCBzdWJ0cmVlLCBvciBvZg0K dGhlIHBhcnQgYmVmb3JlIHRoZSBmaXJzdCBoZWFkbGluZS4gIElmIHRoZXkgYXJlIG5vdCBnaXZl biwgdGhleSB3aWxsDQpiZSBmb3VuZC4gIElmIHRoZSBkcmF3ZXIgZG9lcyBub3QgZXhpc3QgYW5k IEZPUkNFIGlzIG5vbi1uaWwsIGNyZWF0ZQ0KdGhlIGRyYXdlci4iDQogIChjYXRjaCAnZXhpdA0K ICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgKGxldCogKChiZWcgKG9yIGJlZyAoYW5kIChvcmct YmVmb3JlLWZpcnN0LWhlYWRpbmctcCkgKHBvaW50LW1pbikpDQoJCSAgICAgIChwcm9nbiAob3Jn LWJhY2stdG8taGVhZGluZyB0KSAocG9pbnQpKSkpDQoJICAgICAoZW5kIChvciBlbmQgKGFuZCAo bm90IChvdXRsaW5lLW5leHQtaGVhZGluZykpIChwb2ludC1tYXgpKQ0KCQkgICAgICAocG9pbnQp KSkpDQoJKGdvdG8tY2hhciBiZWcpDQoJKGlmIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctcHJvcGVy dHktc3RhcnQtcmUgZW5kIHQpDQoJICAgIChzZXRxIGJlZyAoMSsgKG1hdGNoLWVuZCAwKSkpDQoJ ICAoaWYgZm9yY2UNCgkgICAgICAoc2F2ZS1leGN1cnNpb24NCgkJKG9yZy1pbnNlcnQtcHJvcGVy dHktZHJhd2VyKQ0KCQkoc2V0cSBlbmQgKHByb2duIChvdXRsaW5lLW5leHQtaGVhZGluZykgKHBv aW50KSkpKQ0KCSAgICAodGhyb3cgJ2V4aXQgbmlsKSkNCgkgIChnb3RvLWNoYXIgYmVnKQ0KCSAg KGlmIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctcHJvcGVydHktc3RhcnQtcmUgZW5kIHQpDQoJICAg ICAgKHNldHEgYmVnICgxKyAobWF0Y2gtZW5kIDApKSkpKQ0KCShpZiAocmUtc2VhcmNoLWZvcndh cmQgb3JnLXByb3BlcnR5LWVuZC1yZSBlbmQgdCkNCgkgICAgKHNldHEgZW5kIChtYXRjaC1iZWdp bm5pbmcgMCkpDQoJICAob3IgZm9yY2UgKHRocm93ICdleGl0IG5pbCkpDQoJICAoZ290by1jaGFy IGJlZykNCgkgIChzZXRxIGVuZCBiZWcpDQoJICAob3JnLWluZGVudC1saW5lKQ0KCSAgKGluc2Vy dCAiOkVORDpcbiIpKQ0KCShjb25zIGJlZyBlbmQpKSkpKQ0KDQooZGVmdW4gb3JnLWVudHJ5LXBy b3BlcnRpZXMgKCZvcHRpb25hbCBwb20gd2hpY2ggc3BlY2lmaWMpDQogICJHZXQgYWxsIHByb3Bl cnRpZXMgb2YgdGhlIGVudHJ5IGF0IHBvaW50LW9yLW1hcmtlciBQT00uDQpUaGlzIGluY2x1ZGVz IHRoZSBUT0RPIGtleXdvcmQsIHRoZSB0YWdzLCB0aW1lIHN0cmluZ3MgZm9yIGRlYWRsaW5lLA0K c2NoZWR1bGVkLCBhbmQgY2xvY2tpbmcsIGFuZCBhbnkgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGRl ZmluZWQgaW4gdGhlDQplbnRyeS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYWxpc3QsIGtleXMg bWF5IG9jY3VyIG11bHRpcGxlIHRpbWVzDQppZiB0aGUgcHJvcGVydHkga2V5IHdhcyB1c2VkIHNl dmVyYWwgdGltZXMuDQpQT00gbWF5IGFsc28gYmUgbmlsLCBpbiB3aGljaCBjYXNlIHRoZSBjdXJy ZW50IGVudHJ5IGlzIHVzZWQuDQpJZiBXSElDSCBpcyBuaWwgb3IgYGFsbCcsIGdldCBhbGwgcHJv cGVydGllcy4gIElmIFdISUNIIGlzDQpgc3BlY2lhbCcgb3IgYHN0YW5kYXJkJywgb25seSBnZXQg dGhhdCBzdWJjbGFzcy4gIElmIFdISUNIDQppcyBhIHN0cmluZyBvbmx5IGdldCBleGFjdGx5IHRo aXMgcHJvcGVydHkuICBTUEVDSUZJQyBjYW4gYmUgYSBzdHJpbmcsIHRoZQ0Kc3BlY2lmaWMgcHJv cGVydHkgd2UgYXJlIGludGVyZXN0ZWQgaW4uICBTcGVjaWZ5aW5nIGl0IGNhbiBzcGVlZA0KdGhp bmdzIHVwIGJlY2F1c2UgdGhlbiB1bm5lY2Vzc2FyeSBwYXJzaW5nIGlzIGF2b2lkZWQuIg0KICAo c2V0cSB3aGljaCAob3Igd2hpY2ggJ2FsbCkpDQogIChvcmctd2l0aC13aWRlLWJ1ZmZlcg0KICAg KG9yZy13aXRoLXBvaW50LWF0IHBvbQ0KICAgICAobGV0ICgoY2xvY2tzdHIgKHN1YnN0cmluZyBv cmctY2xvY2stc3RyaW5nIDAgLTEpKQ0KCSAgIChleGNsdWRlZCAnKCJUT0RPIiAiVEFHUyIgIkFM TFRBR1MiICJQUklPUklUWSIgIkJMT0NLRUQiKSkNCgkgICAoY2FzZS1mb2xkLXNlYXJjaCBuaWwp DQoJICAgYmVnIGVuZCByYW5nZSBwcm9wcyBzdW0tcHJvcHMga2V5IGtleTEgdmFsdWUgc3RyaW5n IGNsb2Nrc3VtIGNsb2Nrc3VtdCkNCiAgICAgICAod2hlbiAoYW5kIChkZXJpdmVkLW1vZGUtcCAn b3JnLW1vZGUpDQoJCSAgKGlnbm9yZS1lcnJvcnMgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkpKQ0K CSAoc2V0cSBiZWcgKHBvaW50KSkNCgkgKHNldHEgc3VtLXByb3BzIChnZXQtdGV4dC1wcm9wZXJ0 eSAocG9pbnQpICdvcmctc3VtbWFyaWVzKSkNCgkgKHNldHEgY2xvY2tzdW0gKGdldC10ZXh0LXBy b3BlcnR5IChwb2ludCkgOm9yZy1jbG9jay1taW51dGVzKQ0KCSAgICAgICBjbG9ja3N1bXQgKGdl dC10ZXh0LXByb3BlcnR5IChwb2ludCkgOm9yZy1jbG9jay1taW51dGVzLXRvZGF5KSkNCgkgKG91 dGxpbmUtbmV4dC1oZWFkaW5nKQ0KCSAoc2V0cSBlbmQgKHBvaW50KSkNCgkgKHdoZW4gKG1lbXEg d2hpY2ggJyhhbGwgc3BlY2lhbCkpDQoJICAgOzsgR2V0IHRoZSBzcGVjaWFsIHByb3BlcnRpZXMs IGxpa2UgVE9ETyBhbmQgdGFncw0KCSAgIChnb3RvLWNoYXIgYmVnKQ0KCSAgICh3aGVuIChhbmQg KG9yIChub3Qgc3BlY2lmaWMpIChzdHJpbmc9IHNwZWNpZmljICJUT0RPIikpDQoJCSAgICAgIChs b29raW5nLWF0IG9yZy10b2RvLWxpbmUtcmVnZXhwKSAobWF0Y2gtZW5kIDIpKQ0KCSAgICAgKHB1 c2ggKGNvbnMgIlRPRE8iIChvcmctbWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMikpIHByb3Bz KSkNCgkgICAod2hlbiAoYW5kIChvciAobm90IHNwZWNpZmljKSAoc3RyaW5nPSBzcGVjaWZpYyAi UFJJT1JJVFkiKSkNCgkJICAgICAgKGxvb2tpbmctYXQgb3JnLXByaW9yaXR5LXJlZ2V4cCkpDQoJ ICAgICAocHVzaCAoY29ucyAiUFJJT1JJVFkiIChvcmctbWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRp ZXMgMikpIHByb3BzKSkNCgkgICAod2hlbiAob3IgKG5vdCBzcGVjaWZpYykgKHN0cmluZz0gc3Bl Y2lmaWMgIkZJTEUiKSkNCgkgICAgIChwdXNoIChjb25zICJGSUxFIiBidWZmZXItZmlsZS1uYW1l KSBwcm9wcykpDQoJICAgKHdoZW4gKGFuZCAob3IgKG5vdCBzcGVjaWZpYykgKHN0cmluZz0gc3Bl Y2lmaWMgIlRBR1MiKSkNCgkJICAgICAgKHNldHEgdmFsdWUgKG9yZy1nZXQtdGFncy1zdHJpbmcp KQ0KCQkgICAgICAoc3RyaW5nLW1hdGNoICJcXFMtIiB2YWx1ZSkpDQoJICAgICAocHVzaCAoY29u cyAiVEFHUyIgdmFsdWUpIHByb3BzKSkNCgkgICAod2hlbiAoYW5kIChvciAobm90IHNwZWNpZmlj KSAoc3RyaW5nPSBzcGVjaWZpYyAiQUxMVEFHUyIpKQ0KCQkgICAgICAoc2V0cSB2YWx1ZSAob3Jn LWdldC10YWdzLWF0KSkpDQoJICAgICAocHVzaCAoY29ucyAiQUxMVEFHUyIgKGNvbmNhdCAiOiIg KG1hcGNvbmNhdCAnaWRlbnRpdHkgdmFsdWUgIjoiKQ0KCQkJCQkgICAiOiIpKQ0KCQkgICBwcm9w cykpDQoJICAgKHdoZW4gKG9yIChub3Qgc3BlY2lmaWMpIChzdHJpbmc9IHNwZWNpZmljICJCTE9D S0VEIikpDQoJICAgICAocHVzaCAoY29ucyAiQkxPQ0tFRCIgKGlmIChvcmctZW50cnktYmxvY2tl ZC1wKSAidCIgIiIpKSBwcm9wcykpDQoJICAgKHdoZW4gKG9yIChub3Qgc3BlY2lmaWMpDQoJCSAg ICAgKG1lbWJlciBzcGVjaWZpYw0KCQkJICAgICAnKCJTQ0hFRFVMRUQiICJERUFETElORSIgIkNM T0NLIiAiQ0xPU0VEIg0KCQkJICAgICAgICJUSU1FU1RBTVAiICJUSU1FU1RBTVBfSUEiKSkpDQoJ ICAgICAoY2F0Y2ggJ21hdGNoDQoJICAgICAgICh3aGlsZSAoYW5kIChyZS1zZWFyY2gtZm9yd2Fy ZCBvcmctbWF5YmUta2V5d29yZC10aW1lLXJlZ2V4cCBlbmQgdCkNCgkJCSAgIChub3QgKHRleHQt cHJvcGVydHktYW55IDAgKGxlbmd0aCAobWF0Y2gtc3RyaW5nIDApKQ0KCQkJCQkJICAgJ2ZhY2Ug J2ZvbnQtbG9jay1jb21tZW50LWZhY2UNCgkJCQkJCSAgIChtYXRjaC1zdHJpbmcgMCkpKSkNCgkJ IChzZXRxIGtleSAoaWYgKG1hdGNoLWVuZCAxKQ0KCQkJICAgICAgIChzdWJzdHJpbmcgKG9yZy1t YXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAxKQ0KCQkJCQkgIDAgLTEpKQ0KCQkgICAgICAgc3Ry aW5nIChpZiAoZXF1YWwga2V5IGNsb2Nrc3RyKQ0KCQkJCSAgKG9yZy10cmltDQoJCQkJICAgKGJ1 ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcw0KCQkJCSAgICAobWF0Y2gtYmVnaW5uaW5nIDMp IChnb3RvLWNoYXINCgkJCQkJCQkgKHBvaW50LWF0LWVvbCkpKSkNCgkJCQkoc3Vic3RyaW5nIChv cmctbWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMykNCgkJCQkJICAgMSAtMSkpKQ0KCQkgOzsg R2V0IHRoZSBjb3JyZWN0IHByb3BlcnR5IG5hbWUgZnJvbSB0aGUga2V5LiAgVGhpcyBpcw0KCQkg OzsgbmVjZXNzYXJ5IGlmIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIHRpbWUga2V5d29yZHMuDQoJ CSAoc2V0cSBrZXkxIChjb25jYXQga2V5ICI6IikpDQoJCSAoY29uZA0KCQkgICgobm90IGtleSkN CgkJICAgKHNldHEga2V5DQoJCQkgKGlmICg9IChjaGFyLWFmdGVyIChtYXRjaC1iZWdpbm5pbmcg MykpID9cWykNCgkJCSAgICAgIlRJTUVTVEFNUF9JQSIgIlRJTUVTVEFNUCIpKSkNCgkJICAoKGVx dWFsIGtleTEgb3JnLXNjaGVkdWxlZC1zdHJpbmcpIChzZXRxIGtleSAiU0NIRURVTEVEIikpDQoJ CSAgKChlcXVhbCBrZXkxIG9yZy1kZWFkbGluZS1zdHJpbmcpICAoc2V0cSBrZXkgIkRFQURMSU5F IikpDQoJCSAgKChlcXVhbCBrZXkxIG9yZy1jbG9zZWQtc3RyaW5nKSAgICAoc2V0cSBrZXkgIkNM T1NFRCIpKQ0KCQkgICgoZXF1YWwga2V5MSBvcmctY2xvY2stc3RyaW5nKSAgICAgKHNldHEga2V5 ICJDTE9DSyIpKSkNCgkJIChpZiAoYW5kIHNwZWNpZmljIChlcXVhbCBrZXkgc3BlY2lmaWMpIChu b3QgKGVxdWFsIGtleSAiQ0xPQ0siKSkpDQoJCSAgICAgKHByb2duDQoJCSAgICAgICAocHVzaCAo Y29ucyBrZXkgc3RyaW5nKSBwcm9wcykNCgkJICAgICAgIDs7IG5vIG5lZWQgdG8gc2VhcmNoIGZ1 cnRoZXIgaWYgbWF0Y2ggaXMgZm91bmQNCgkJICAgICAgICh0aHJvdyAnbWF0Y2ggdCkpDQoJCSAg ICh3aGVuIChvciAoZXF1YWwga2V5ICJDTE9DSyIpIChub3QgKGFzc29jIGtleSBwcm9wcykpKQ0K CQkgICAgIChwdXNoIChjb25zIGtleSBzdHJpbmcpIHByb3BzKSkpKSkpKQ0KDQoJICh3aGVuICht ZW1xIHdoaWNoICcoYWxsIHN0YW5kYXJkKSkNCgkgICA7OyBHZXQgdGhlIHN0YW5kYXJkIHByb3Bl cnRpZXMsIGxpa2UgOlBST1A6IC4uLg0KCSAgIChzZXRxIHJhbmdlIChvcmctZ2V0LXByb3BlcnR5 LWJsb2NrIGJlZyBlbmQpKQ0KCSAgICh3aGVuIHJhbmdlDQoJICAgICAoZ290by1jaGFyIChjYXIg cmFuZ2UpKQ0KCSAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctcHJvcGVydHktcmUN CgkJCQkgICAgICAgKGNkciByYW5nZSkgdCkNCgkgICAgICAgKHNldHEga2V5IChvcmctbWF0Y2gt c3RyaW5nLW5vLXByb3BlcnRpZXMgMikNCgkJICAgICB2YWx1ZSAob3JnLXRyaW0gKG9yIChvcmct bWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMykgIiIpKSkNCgkgICAgICAgKHVubGVzcyAobWVt YmVyIGtleSBleGNsdWRlZCkNCgkJIChwdXNoIChjb25zIGtleSAob3IgdmFsdWUgIiIpKSBwcm9w cykpKSkpDQoJIChpZiBjbG9ja3N1bQ0KCSAgICAgKHB1c2ggKGNvbnMgIkNMT0NLU1VNIg0KCQkJ IChvcmctY29sdW1ucy1udW1iZXItdG8tc3RyaW5nICgvIChmbG9hdCBjbG9ja3N1bSkgNjAuKQ0K CQkJCQkJICAgICAgICdhZGRfdGltZXMpKQ0KCQkgICBwcm9wcykpDQoJIChpZiBjbG9ja3N1bXQN CgkgICAgIChwdXNoIChjb25zICJDTE9DS1NVTV9UIg0KCQkJIChvcmctY29sdW1ucy1udW1iZXIt dG8tc3RyaW5nICgvIChmbG9hdCBjbG9ja3N1bXQpIDYwLikNCgkJCQkJCSAgICAgICAnYWRkX3Rp bWVzKSkNCgkJICAgcHJvcHMpKQ0KCSAodW5sZXNzIChhc3NvYyAiQ0FURUdPUlkiIHByb3BzKQ0K CSAgIChwdXNoIChjb25zICJDQVRFR09SWSIgKG9yZy1nZXQtY2F0ZWdvcnkpKSBwcm9wcykpDQoJ IChhcHBlbmQgc3VtLXByb3BzIChucmV2ZXJzZSBwcm9wcykpKSkpKSkNCg0KKGRlZnVuIG9yZy1l bnRyeS1nZXQgKHBvbSBwcm9wZXJ0eSAmb3B0aW9uYWwgaW5oZXJpdCBsaXRlcmFsLW5pbCkNCiAg IkdldCB2YWx1ZSBvZiBQUk9QRVJUWSBmb3IgZW50cnkgb3IgY29udGVudCBhdCBwb2ludC1vci1t YXJrZXIgUE9NLg0KSWYgSU5IRVJJVCBpcyBub24tbmlsIGFuZCB0aGUgZW50cnkgZG9lcyBub3Qg aGF2ZSB0aGUgcHJvcGVydHksDQp0aGVuIGFsc28gY2hlY2sgaGlnaGVyIGxldmVscyBvZiB0aGUg aGllcmFyY2h5Lg0KSWYgSU5IRVJJVCBpcyB0aGUgc3ltYm9sIGBzZWxlY3RpdmUnLCB1c2UgaW5o ZXJpdGFuY2Ugb25seSBpZiB0aGUgc2V0dGluZw0KaW4gYG9yZy11c2UtcHJvcGVydHktaW5oZXJp dGFuY2UnIHNlbGVjdHMgUFJPUEVSVFkgZm9yIGluaGVyaXRhbmNlLg0KSWYgdGhlIHByb3BlcnR5 IGlzIHByZXNlbnQgYnV0IGVtcHR5LCB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBlbXB0eSBzdHJp bmcuDQpJZiB0aGUgcHJvcGVydHkgaXMgbm90IHByZXNlbnQgYXQgYWxsLCBuaWwgaXMgcmV0dXJu ZWQuDQoNClJldHVybiB0aGUgdmFsdWUgYXMgYSBzdHJpbmcuDQoNCklmIExJVEVSQUwtTklMIGlz IHNldCwgcmV0dXJuIHRoZSBzdHJpbmcgdmFsdWUgXCJuaWxcIiBhcyBhIHN0cmluZywNCmRvIG5v dCBpbnRlcnByZXQgaXQgYXMgdGhlIGxpc3QgYXRvbSBuaWwuICBUaGlzIGlzIHVzZWQgZm9yIGlu aGVyaXRhbmNlDQp3aGVuIGEgXCJuaWxcIiB2YWx1ZSBjYW4gc3VwZXJzZWRlIGEgbm9uLW5pbCB2 YWx1ZSBoaWdoZXIgdXAgdGhlIGhpZXJhcmNoeS4iDQogIChvcmctd2l0aC1wb2ludC1hdCBwb20N CiAgICAoaWYgKGFuZCBpbmhlcml0IChpZiAoZXEgaW5oZXJpdCAnc2VsZWN0aXZlKQ0KCQkJIChv cmctcHJvcGVydHktaW5oZXJpdC1wIHByb3BlcnR5KQ0KCQkgICAgICAgdCkpDQoJKG9yZy1lbnRy eS1nZXQtd2l0aC1pbmhlcml0YW5jZSBwcm9wZXJ0eSBsaXRlcmFsLW5pbCkNCiAgICAgIChpZiAo bWVtYmVyIHByb3BlcnR5IG9yZy1zcGVjaWFsLXByb3BlcnRpZXMpDQoJICA7OyBXZSBuZWVkIGEg c3BlY2lhbCBwcm9wZXJ0eS4gIFVzZSBgb3JnLWVudHJ5LXByb3BlcnRpZXMnDQoJICA7OyB0byBy ZXRyaWV2ZSBpdCwgYnV0IHNwZWNpZnkgdGhlIHdhbnRlZCBwcm9wZXJ0eQ0KCSAgKGNkciAoYXNz b2MgcHJvcGVydHkgKG9yZy1lbnRyeS1wcm9wZXJ0aWVzIG5pbCAnc3BlY2lhbCBwcm9wZXJ0eSkp KQ0KCShvcmctd2l0aC13aWRlLWJ1ZmZlcg0KCSAobGV0ICgocmFuZ2UgKG9yZy1nZXQtcHJvcGVy dHktYmxvY2spKSkNCgkgICAod2hlbiAoYW5kIHJhbmdlIChub3QgKGVxIChjYXIgcmFuZ2UpIChj ZHIgcmFuZ2UpKSkNCgkJICAgICAgKHNhdmUtZXhjdXJzaW9uDQoJCSAgICAgIAkoZ290by1jaGFy IChjYXIgcmFuZ2UpKQ0KCQkgICAgICAJKHJlLXNlYXJjaC1mb3J3YXJkDQoJCSAgICAgIAkgKGNv bmNhdCAob3JnLXJlLXByb3BlcnR5IHByb3BlcnR5KSAiXFx8Ig0KCQkJCSAob3JnLXJlLXByb3Bl cnR5IChjb25jYXQgcHJvcGVydHkgIisiKSkpDQoJCQkgKGNkciByYW5nZSkgdCkpKQ0KCSAgICAg KGxldCogKChwcm9wcw0KCQkgICAgIChsaXN0IChvciAoYXNzb2MgcHJvcGVydHkgb3JnLWZpbGUt cHJvcGVydGllcykNCgkJCSAgICAgICAoYXNzb2MgcHJvcGVydHkgb3JnLWdsb2JhbC1wcm9wZXJ0 aWVzKQ0KCQkJICAgICAgIChhc3NvYyBwcm9wZXJ0eSBvcmctZ2xvYmFsLXByb3BlcnRpZXMtZml4 ZWQpKSkpDQoJCSAgICAoYXAgKGxhbWJkYSAoa2V5KQ0KCQkJICAod2hlbiAocmUtc2VhcmNoLWZv cndhcmQNCgkJCQkgKG9yZy1yZS1wcm9wZXJ0eSBrZXkpIChjZHIgcmFuZ2UpIHQpDQoJCQkgICAg KHNldHEgcHJvcHMNCgkJCQkgIChvcmctdXBkYXRlLXByb3BlcnR5LXBsaXN0DQoJCQkJICAga2V5 DQoJCQkJICAgKGlmIChtYXRjaC1lbmQgMykNCgkJCQkgICAgICAgKG9yZy1tYXRjaC1zdHJpbmct bm8tcHJvcGVydGllcyAzKSAiIikNCgkJCQkgICBwcm9wcykpKSkpDQoJCSAgICB2YWwpDQoJICAg ICAgIChnb3RvLWNoYXIgKGNhciByYW5nZSkpDQoJICAgICAgIChmdW5jYWxsIGFwIHByb3BlcnR5 KQ0KCSAgICAgICAoZ290by1jaGFyIChjYXIgcmFuZ2UpKQ0KCSAgICAgICAod2hpbGUgKGZ1bmNh bGwgYXAgKGNvbmNhdCBwcm9wZXJ0eSAiKyIpKSkNCgkgICAgICAgKHNldHEgdmFsIChjZHIgKGFz c29jIHByb3BlcnR5IHByb3BzKSkpDQoJICAgICAgICh3aGVuIHZhbCAoaWYgbGl0ZXJhbC1uaWwg dmFsIChvcmctbm90LW5pbCB2YWwpKSkpKSkpKSkpKQ0KDQooZGVmdW4gb3JnLXByb3BlcnR5LW9y LXZhcmlhYmxlLXZhbHVlICh2YXIgJm9wdGlvbmFsIGluaGVyaXQpDQogICJDaGVjayBpZiB0aGVy ZSBpcyBhIHByb3BlcnR5IGZpeGluZyB0aGUgdmFsdWUgb2YgVkFSLg0KSWYgeWVzLCByZXR1cm4g dGhpcyB2YWx1ZS4gIElmIG5vdCwgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB2YXJp YWJsZS4iDQogIChsZXQgKChwcm9wIChvcmctZW50cnktZ2V0IG5pbCAoc3ltYm9sLW5hbWUgdmFy KSBpbmhlcml0KSkpDQogICAgKGlmIChhbmQgcHJvcCAoc3RyaW5ncCBwcm9wKSAoc3RyaW5nLW1h dGNoICJcXFMtIiBwcm9wKSkNCgkocmVhZCBwcm9wKQ0KICAgICAgKHN5bWJvbC12YWx1ZSB2YXIp KSkpDQoNCihkZWZ1biBvcmctZW50cnktZGVsZXRlIChwb20gcHJvcGVydHkgJm9wdGlvbmFsIGRl bGV0ZS1lbXB0eS1kcmF3ZXIpDQogICJEZWxldGUgdGhlIHByb3BlcnR5IFBST1BFUlRZIGZyb20g ZW50cnkgYXQgcG9pbnQtb3ItbWFya2VyIFBPTS4NCldoZW4gb3B0aW9uYWwgYXJndW1lbnQgREVM RVRFLUVNUFRZLURSQVdFUiBpcyBhIHN0cmluZywgaXQgZGVmaW5lcw0KYW4gZW1wdHkgZHJhd2Vy IHRvIGRlbGV0ZS4iDQogIChvcmctd2l0aC1wb2ludC1hdCBwb20NCiAgICAoaWYgKG1lbWJlciBw cm9wZXJ0eSBvcmctc3BlY2lhbC1wcm9wZXJ0aWVzKQ0KCW5pbCA7IGNhbm5vdCBkZWxldGUgdGhl c2UgcHJvcGVydGllcy4NCiAgICAgIChsZXQgKChyYW5nZSAob3JnLWdldC1wcm9wZXJ0eS1ibG9j aykpKQ0KCShpZiAoYW5kIHJhbmdlDQoJCSAoZ290by1jaGFyIChjYXIgcmFuZ2UpKQ0KCQkgKHJl LXNlYXJjaC1mb3J3YXJkDQoJCSAgKG9yZy1yZS1wcm9wZXJ0eSBwcm9wZXJ0eSBuaWwgdCkNCgkJ ICAoY2RyIHJhbmdlKSB0KSkNCgkgICAgKHByb2duDQoJICAgICAgKGRlbGV0ZS1yZWdpb24gKG1h dGNoLWJlZ2lubmluZyAwKSAoMSsgKHBvaW50LWF0LWVvbCkpKQ0KCSAgICAgIChhbmQgZGVsZXRl LWVtcHR5LWRyYXdlcg0KCQkgICAob3JnLXJlbW92ZS1lbXB0eS1kcmF3ZXItYXQNCgkJICAgIGRl bGV0ZS1lbXB0eS1kcmF3ZXIgKGNhciByYW5nZSkpKQ0KCSAgICAgIHQpDQoJICBuaWwpKSkpKQ0K DQo7OyBNdWx0aS12YWx1ZXMgcHJvcGVydGllcyBhcmUgcHJvcGVydGllcyB0aGF0IGNvbnRhaW4g bXVsdGlwbGUgdmFsdWVzDQo7OyBUaGVzZSB2YWx1ZXMgYXJlIGFzc3VtZWQgdG8gYmUgc2luZ2xl IHdvcmRzLCBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4NCihkZWZ1biBvcmctZW50cnktYWRkLXRv LW11bHRpdmFsdWVkLXByb3BlcnR5IChwb20gcHJvcGVydHkgdmFsdWUpDQogICJBZGQgVkFMVUUg dG8gdGhlIHdvcmRzIGluIHRoZSBQUk9QRVJUWSBpbiBlbnRyeSBhdCBwb2ludC1vci1tYXJrZXIg UE9NLiINCiAgKGxldCogKChvbGQgKG9yZy1lbnRyeS1nZXQgcG9tIHByb3BlcnR5KSkNCgkgKHZh bHVlcyAoYW5kIG9sZCAob3JnLXNwbGl0LXN0cmluZyBvbGQgIlsgXHRdIikpKSkNCiAgICAoc2V0 cSB2YWx1ZSAob3JnLWVudHJ5LXByb3RlY3Qtc3BhY2UgdmFsdWUpKQ0KICAgICh1bmxlc3MgKG1l bWJlciB2YWx1ZSB2YWx1ZXMpDQogICAgICAoc2V0cSB2YWx1ZXMgKGFwcGVuZCB2YWx1ZXMgKGxp c3QgdmFsdWUpKSkNCiAgICAgIChvcmctZW50cnktcHV0IHBvbSBwcm9wZXJ0eQ0KCQkgICAgICht YXBjb25jYXQgJ2lkZW50aXR5IHZhbHVlcyAiICIpKSkpKQ0KDQooZGVmdW4gb3JnLWVudHJ5LXJl bW92ZS1mcm9tLW11bHRpdmFsdWVkLXByb3BlcnR5IChwb20gcHJvcGVydHkgdmFsdWUpDQogICJS ZW1vdmUgVkFMVUUgZnJvbSB3b3JkcyBpbiB0aGUgUFJPUEVSVFkgaW4gZW50cnkgYXQgcG9pbnQt b3ItbWFya2VyIFBPTS4iDQogIChsZXQqICgob2xkIChvcmctZW50cnktZ2V0IHBvbSBwcm9wZXJ0 eSkpDQoJICh2YWx1ZXMgKGFuZCBvbGQgKG9yZy1zcGxpdC1zdHJpbmcgb2xkICJbIFx0XSIpKSkp DQogICAgKHNldHEgdmFsdWUgKG9yZy1lbnRyeS1wcm90ZWN0LXNwYWNlIHZhbHVlKSkNCiAgICAo d2hlbiAobWVtYmVyIHZhbHVlIHZhbHVlcykNCiAgICAgIChzZXRxIHZhbHVlcyAoZGVsZXRlIHZh bHVlIHZhbHVlcykpDQogICAgICAob3JnLWVudHJ5LXB1dCBwb20gcHJvcGVydHkNCgkJICAgICAo bWFwY29uY2F0ICdpZGVudGl0eSB2YWx1ZXMgIiAiKSkpKSkNCg0KKGRlZnVuIG9yZy1lbnRyeS1t ZW1iZXItaW4tbXVsdGl2YWx1ZWQtcHJvcGVydHkgKHBvbSBwcm9wZXJ0eSB2YWx1ZSkNCiAgIklz IFZBTFVFIG9uZSBvZiB0aGUgd29yZHMgaW4gdGhlIFBST1BFUlRZIGluIGVudHJ5IGF0IHBvaW50 LW9yLW1hcmtlciBQT00/Ig0KICAobGV0KiAoKG9sZCAob3JnLWVudHJ5LWdldCBwb20gcHJvcGVy dHkpKQ0KCSAodmFsdWVzIChhbmQgb2xkIChvcmctc3BsaXQtc3RyaW5nIG9sZCAiWyBcdF0iKSkp KQ0KICAgIChzZXRxIHZhbHVlIChvcmctZW50cnktcHJvdGVjdC1zcGFjZSB2YWx1ZSkpDQogICAg KG1lbWJlciB2YWx1ZSB2YWx1ZXMpKSkNCg0KKGRlZnVuIG9yZy1lbnRyeS1nZXQtbXVsdGl2YWx1 ZWQtcHJvcGVydHkgKHBvbSBwcm9wZXJ0eSkNCiAgIlJldHVybiBhIGxpc3Qgb2YgdmFsdWVzIGlu IGEgbXVsdGl2YWx1ZWQgcHJvcGVydHkuIg0KICAobGV0KiAoKHZhbHVlIChvcmctZW50cnktZ2V0 IHBvbSBwcm9wZXJ0eSkpDQoJICh2YWx1ZXMgKGFuZCB2YWx1ZSAob3JnLXNwbGl0LXN0cmluZyB2 YWx1ZSAiWyBcdF0iKSkpKQ0KICAgIChtYXBjYXIgJ29yZy1lbnRyeS1yZXN0b3JlLXNwYWNlIHZh bHVlcykpKQ0KDQooZGVmdW4gb3JnLWVudHJ5LXB1dC1tdWx0aXZhbHVlZC1wcm9wZXJ0eSAocG9t IHByb3BlcnR5ICZyZXN0IHZhbHVlcykNCiAgIlNldCBtdWx0aXZhbHVlZCBQUk9QRVJUWSBhdCBw b2ludC1vci1tYXJrZXIgUE9NIHRvIFZBTFVFUy4NClZBTFVFUyBzaG91bGQgYmUgYSBsaXN0IG9m IHN0cmluZ3MuICBTcGFjZXMgd2lsbCBiZSBwcm90ZWN0ZWQuIg0KICAob3JnLWVudHJ5LXB1dCBw b20gcHJvcGVydHkNCgkJIChtYXBjb25jYXQgJ29yZy1lbnRyeS1wcm90ZWN0LXNwYWNlIHZhbHVl cyAiICIpKQ0KICAobGV0KiAoKHZhbHVlIChvcmctZW50cnktZ2V0IHBvbSBwcm9wZXJ0eSkpDQoJ ICh2YWx1ZXMgKGFuZCB2YWx1ZSAob3JnLXNwbGl0LXN0cmluZyB2YWx1ZSAiWyBcdF0iKSkpKQ0K ICAgIChtYXBjYXIgJ29yZy1lbnRyeS1yZXN0b3JlLXNwYWNlIHZhbHVlcykpKQ0KDQooZGVmdW4g b3JnLWVudHJ5LXByb3RlY3Qtc3BhY2UgKHMpDQogICJQcm90ZWN0IHNwYWNlcyBhbmQgbmV3bGlu ZSBpbiBzdHJpbmcgUy4iDQogICh3aGlsZSAoc3RyaW5nLW1hdGNoICIgIiBzKQ0KICAgIChzZXRx IHMgKHJlcGxhY2UtbWF0Y2ggIiUyMCIgdCB0IHMpKSkNCiAgKHdoaWxlIChzdHJpbmctbWF0Y2gg IlxuIiBzKQ0KICAgIChzZXRxIHMgKHJlcGxhY2UtbWF0Y2ggIiUwQSIgdCB0IHMpKSkNCiAgcykN Cg0KKGRlZnVuIG9yZy1lbnRyeS1yZXN0b3JlLXNwYWNlIChzKQ0KICAiUmVzdG9yZSBzcGFjZXMg YW5kIG5ld2xpbmUgaW4gc3RyaW5nIFMuIg0KICAod2hpbGUgKHN0cmluZy1tYXRjaCAiJTIwIiBz KQ0KICAgIChzZXRxIHMgKHJlcGxhY2UtbWF0Y2ggIiAiIHQgdCBzKSkpDQogICh3aGlsZSAoc3Ry aW5nLW1hdGNoICIlMEEiIHMpDQogICAgKHNldHEgcyAocmVwbGFjZS1tYXRjaCAiXG4iIHQgdCBz KSkpDQogIHMpDQoNCihkZWZ2YXIgb3JnLWVudHJ5LXByb3BlcnR5LWluaGVyaXRlZC1mcm9tICht YWtlLW1hcmtlcikNCiAgIk1hcmtlciBwb2ludGluZyB0byB0aGUgZW50cnkgZnJvbSB3aGVyZSBh IHByb3BlcnR5IHdhcyBpbmhlcml0ZWQuDQpFYWNoIGNhbGwgdG8gYG9yZy1lbnRyeS1nZXQtd2l0 aC1pbmhlcml0YW5jZScgd2lsbCBzZXQgdGhpcyBtYXJrZXIgdG8gdGhlDQpsb2NhdGlvbiBvZiB0 aGUgZW50cnkgd2hlcmUgdGhlIGluaGVyaXRhbmNlIHNlYXJjaCBtYXRjaGVkLiAgSWYgdGhlcmUg d2FzDQpubyBtYXRjaCwgdGhlIG1hcmtlciB3aWxsIHBvaW50IG5vd2hlcmUuDQpOb3RlIHRoYXQg YWxzbyBgb3JnLWVudHJ5LWdldCcgY2FsbHMgdGhpcyBmdW5jdGlvbiwgaWYgdGhlIElOSEVSSVQg ZmxhZw0KaXMgc2V0LiIpDQoNCihkZWZ1biBvcmctZW50cnktZ2V0LXdpdGgtaW5oZXJpdGFuY2Ug KHByb3BlcnR5ICZvcHRpb25hbCBsaXRlcmFsLW5pbCkNCiAgIkdldCBQUk9QRVJUWSBvZiBlbnRy eSBvciBjb250ZW50IGF0IHBvaW50LCBzZWFyY2ggaGlnaGVyIGxldmVscyBpZiBuZWVkZWQuDQpU aGUgc2VhcmNoIHdpbGwgc3RvcCBhdCB0aGUgZmlyc3QgYW5jZXN0b3Igd2hpY2ggaGFzIHRoZSBw cm9wZXJ0eSBkZWZpbmVkLg0KSWYgdGhlIHZhbHVlIGZvdW5kIGlzIFwibmlsXCIsIHJldHVybiBu aWwgdG8gc2hvdyB0aGF0IHRoZSBwcm9wZXJ0eQ0Kc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXMgdW5k ZWZpbmVkICh0aGlzIGlzIHRoZSBtZWFuaW5nIG9mIG5pbCBoZXJlKS4NCkhvd2V2ZXIsIGlmIExJ VEVSQUwtTklMIGlzIHNldCwgcmV0dXJuIHRoZSBzdHJpbmcgdmFsdWUgXCJuaWxcIiBpbnN0ZWFk LiINCiAgKG1vdmUtbWFya2VyIG9yZy1lbnRyeS1wcm9wZXJ0eS1pbmhlcml0ZWQtZnJvbSBuaWwp DQogIChsZXQgKHRtcCkNCiAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAgIChzYXZlLXJlc3RyaWN0 aW9uDQoJKHdpZGVuKQ0KCShjYXRjaCAnZXgNCgkgICh3aGlsZSB0DQoJICAgICh3aGVuIChzZXRx IHRtcCAob3JnLWVudHJ5LWdldCBuaWwgcHJvcGVydHkgbmlsIGxpdGVyYWwtbmlsKSkNCgkgICAg ICAob3IgKGlnbm9yZS1lcnJvcnMgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkpDQoJCSAgKGdvdG8t Y2hhciAocG9pbnQtbWluKSkpDQoJICAgICAgKG1vdmUtbWFya2VyIG9yZy1lbnRyeS1wcm9wZXJ0 eS1pbmhlcml0ZWQtZnJvbSAocG9pbnQpKQ0KCSAgICAgICh0aHJvdyAnZXggdG1wKSkNCgkgICAg KG9yIChpZ25vcmUtZXJyb3JzIChvcmctdXAtaGVhZGluZy1zYWZlKSkNCgkJKHRocm93ICdleCBu aWwpKSkpKSkNCiAgICAoc2V0cSB0bXAgKG9yIHRtcA0KCQkgIChjZHIgKGFzc29jIHByb3BlcnR5 IG9yZy1maWxlLXByb3BlcnRpZXMpKQ0KCQkgIChjZHIgKGFzc29jIHByb3BlcnR5IG9yZy1nbG9i YWwtcHJvcGVydGllcykpDQoJCSAgKGNkciAoYXNzb2MgcHJvcGVydHkgb3JnLWdsb2JhbC1wcm9w ZXJ0aWVzLWZpeGVkKSkpKQ0KICAgIChpZiBsaXRlcmFsLW5pbCB0bXAgKG9yZy1ub3QtbmlsIHRt cCkpKSkNCg0KKGRlZnZhciBvcmctcHJvcGVydHktY2hhbmdlZC1mdW5jdGlvbnMgbmlsDQogICJI b29rIGNhbGxlZCB3aGVuIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGhhcyBjaGFuZ2VkLg0KRWFj aCBob29rIGZ1bmN0aW9uIHNob3VsZCBhY2NlcHQgdHdvIGFyZ3VtZW50cywgdGhlIG5hbWUgb2Yg dGhlIHByb3BlcnR5DQphbmQgdGhlIG5ldyB2YWx1ZS4iKQ0KDQooZGVmdW4gb3JnLWVudHJ5LXB1 dCAocG9tIHByb3BlcnR5IHZhbHVlKQ0KICAiU2V0IFBST1BFUlRZIHRvIFZBTFVFIGZvciBlbnRy eSBhdCBwb2ludC1vci1tYXJrZXIgUE9NLg0KSWYgdGhlIHZhbHVlIGlzIGBuaWwnLCBpdCBpcyBj b252ZXJ0ZWQgdG8gdGhlIGVtcHR5IHN0cmluZy4NCklmIGl0IGlzIG5vdCBhIHN0cmluZywgYW4g ZXJyb3IgaXMgcmFpc2VkLiINCiAgKGNvbmQgKChudWxsIHZhbHVlKSAoc2V0cSB2YWx1ZSAiIikp DQoJKChub3QgKHN0cmluZ3AgdmFsdWUpKQ0KCSAoZXJyb3IgIlByb3BlcnRpZXMgdmFsdWVzIHNo b3VsZCBiZSBzdHJpbmdzLiIpKSkNCiAgKG9yZy13aXRoLXBvaW50LWF0IHBvbQ0KICAgIChvcmct YmFjay10by1oZWFkaW5nIHQpDQogICAgKGxldCAoKGJlZyAocG9pbnQpKSAoZW5kIChzYXZlLWV4 Y3Vyc2lvbiAob3V0bGluZS1uZXh0LWhlYWRpbmcpIChwb2ludCkpKQ0KCSAgcmFuZ2UpDQogICAg ICAoY29uZA0KICAgICAgICgoZXF1YWwgcHJvcGVydHkgIlRPRE8iKQ0KCSh3aGVuIChhbmQgKHN0 cmluZy1tYXRjaCAiXFxTLSIgdmFsdWUpDQoJCSAgIChub3QgKG1lbWJlciB2YWx1ZSBvcmctdG9k by1rZXl3b3Jkcy0xKSkpDQoJICAodXNlci1lcnJvciAiXCIlc1wiIGlzIG5vdCBhIHZhbGlkIFRP RE8gc3RhdGUiIHZhbHVlKSkNCgkoaWYgKG9yIChub3QgdmFsdWUpDQoJCShub3QgKHN0cmluZy1t YXRjaCAiXFxTLSIgdmFsdWUpKSkNCgkgICAgKHNldHEgdmFsdWUgJ25vbmUpKQ0KCShvcmctdG9k byB2YWx1ZSkNCgkob3JnLXNldC10YWdzIG5pbCAnYWxpZ24pKQ0KICAgICAgICgoZXF1YWwgcHJv cGVydHkgIlBSSU9SSVRZIikNCgkob3JnLXByaW9yaXR5IChpZiAoYW5kIHZhbHVlIChzdHJpbmct bWF0Y2ggIlxcUy0iIHZhbHVlKSkNCgkJCSAgKHN0cmluZy10by1jaGFyIHZhbHVlKSA/XCApKQ0K CShvcmctc2V0LXRhZ3MgbmlsICdhbGlnbikpDQogICAgICAgKChlcXVhbCBwcm9wZXJ0eSAiQ0xP Q0tTVU0iKQ0KCShpZiAobm90IChyZS1zZWFyY2gtZm9yd2FyZA0KCQkgIChjb25jYXQgb3JnLWNs b2NrLXN0cmluZyAiLipcXF0tLVxcKFxcW1teXV0rXFxdXFwpIikgbmlsIHQpKQ0KCSAgICAoZXJy b3IgIkNhbm5vdCBmaW5kIGEgY2xvY2sgbG9nIikNCgkgIChnb3RvLWNoYXIgKC0gKG1hdGNoLWVu ZCAxKSAyKSkNCgkgIChjb25kDQoJICAgKChlcSB2YWx1ZSAnZWFybGllcikgKG9yZy10aW1lc3Rh bXAtZG93bikpDQoJICAgKChlcSB2YWx1ZSAnbGF0ZXIpIChvcmctdGltZXN0YW1wLXVwKSkpDQoJ ICAob3JnLWNsb2NrLXN1bS1jdXJyZW50LWl0ZW0pKSkNCiAgICAgICAoKGVxdWFsIHByb3BlcnR5 ICJTQ0hFRFVMRUQiKQ0KCShpZiAocmUtc2VhcmNoLWZvcndhcmQgb3JnLXNjaGVkdWxlZC10aW1l LXJlZ2V4cCBlbmQgdCkNCgkgICAgKGNvbmQNCgkgICAgICgoZXEgdmFsdWUgJ2VhcmxpZXIpIChv cmctdGltZXN0YW1wLWNoYW5nZSAtMSAnZGF5KSkNCgkgICAgICgoZXEgdmFsdWUgJ2xhdGVyKSAo b3JnLXRpbWVzdGFtcC1jaGFuZ2UgMSAnZGF5KSkNCgkgICAgICh0IChjYWxsLWludGVyYWN0aXZl bHkgJ29yZy1zY2hlZHVsZSkpKQ0KCSAgKGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLXNjaGVkdWxl KSkpDQogICAgICAgKChlcXVhbCBwcm9wZXJ0eSAiREVBRExJTkUiKQ0KCShpZiAocmUtc2VhcmNo LWZvcndhcmQgb3JnLWRlYWRsaW5lLXRpbWUtcmVnZXhwIGVuZCB0KQ0KCSAgICAoY29uZA0KCSAg ICAgKChlcSB2YWx1ZSAnZWFybGllcikgKG9yZy10aW1lc3RhbXAtY2hhbmdlIC0xICdkYXkpKQ0K CSAgICAgKChlcSB2YWx1ZSAnbGF0ZXIpIChvcmctdGltZXN0YW1wLWNoYW5nZSAxICdkYXkpKQ0K CSAgICAgKHQgKGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLWRlYWRsaW5lKSkpDQoJICAoY2FsbC1p bnRlcmFjdGl2ZWx5ICdvcmctZGVhZGxpbmUpKSkNCiAgICAgICAoKG1lbWJlciBwcm9wZXJ0eSBv cmctc3BlY2lhbC1wcm9wZXJ0aWVzKQ0KCShlcnJvciAiVGhlICVzIHByb3BlcnR5IGNhbiBub3Qg eWV0IGJlIHNldCB3aXRoIGBvcmctZW50cnktcHV0JyINCgkgICAgICAgcHJvcGVydHkpKQ0KICAg ICAgICh0IDsgYSBub24tc3BlY2lhbCBwcm9wZXJ0eQ0KCShsZXQgKChidWZmZXItaW52aXNpYmls aXR5LXNwZWMgKG9yZy1pbmhpYml0LWludmlzaWJpbGl0eSkpKSA7IEVtYWNzIDIxDQoJICAoc2V0 cSByYW5nZSAob3JnLWdldC1wcm9wZXJ0eS1ibG9jayBiZWcgZW5kICdmb3JjZSkpDQoJICAoZ290 by1jaGFyIChjYXIgcmFuZ2UpKQ0KCSAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZA0KCSAgICAgICAo b3JnLXJlLXByb3BlcnR5IHByb3BlcnR5IG5pbCB0KSAoY2RyIHJhbmdlKSB0KQ0KCSAgICAgIChw cm9nbg0KCQkoZGVsZXRlLXJlZ2lvbiAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkp DQoJCShnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAwKSkpDQoJICAgIChnb3RvLWNoYXIgKGNk ciByYW5nZSkpDQoJICAgIChpbnNlcnQgIlxuIikNCgkgICAgKGJhY2t3YXJkLWNoYXIgMSkNCgkg ICAgKG9yZy1pbmRlbnQtbGluZSkpDQoJICAoaW5zZXJ0ICI6IiBwcm9wZXJ0eSAiOiIpDQoJICAo YW5kIHZhbHVlIChpbnNlcnQgIiAiIHZhbHVlKSkNCgkgIChvcmctaW5kZW50LWxpbmUpKSkpKQ0K ICAgIChydW4taG9vay13aXRoLWFyZ3MgJ29yZy1wcm9wZXJ0eS1jaGFuZ2VkLWZ1bmN0aW9ucyBw cm9wZXJ0eSB2YWx1ZSkpKQ0KDQooZGVmdW4gb3JnLWJ1ZmZlci1wcm9wZXJ0eS1rZXlzICgmb3B0 aW9uYWwgaW5jbHVkZS1zcGVjaWFscyBpbmNsdWRlLWRlZmF1bHRzIGluY2x1ZGUtY29sdW1ucykN CiAgIkdldCBhbGwgcHJvcGVydHkga2V5cyBpbiB0aGUgY3VycmVudCBidWZmZXIuDQpXaXRoIElO Q0xVREUtU1BFQ0lBTFMsIGFsc28gbGlzdCB0aGUgc3BlY2lhbCBwcm9wZXJ0aWVzIHRoYXQgcmVm bGVjdCB0aGluZ3MNCmxpa2UgdGFncyBhbmQgVE9ETyBzdGF0ZS4NCldpdGggSU5DTFVERS1ERUZB VUxUUywgYWxzbyBpbmNsdWRlIHByb3BlcnRpZXMgdGhhdCBoYXMgc3BlY2lhbCBtZWFuaW5nDQpp bnRlcm5hbGx5OiBBUkNISVZFLCBDQVRFR09SWSwgU1VNTUFSWSwgREVTQ1JJUFRJT04sIExPQ0FU SU9OLCBhbmQgTE9HR0lORw0KYW5kIG90aGVycy4NCldpdGggSU5DTFVERS1DT0xVTU5TLCBhbHNv IGluY2x1ZGUgcHJvcGVydHkgbmFtZXMgZ2l2ZW4gaW4gQ09MVU1ODQpmb3JtYXRzIGluIHRoZSBj dXJyZW50IGJ1ZmZlci4iDQogIChsZXQgKHJ0biByYW5nZSBjZm10IHMgcCkNCiAgICAoc2F2ZS1l eGN1cnNpb24NCiAgICAgIChzYXZlLXJlc3RyaWN0aW9uDQoJKHdpZGVuKQ0KCShnb3RvLWNoYXIg KHBvaW50LW1pbikpDQoJKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctcHJvcGVydHktc3Rh cnQtcmUgbmlsIHQpDQoJICAoc2V0cSByYW5nZSAob3JnLWdldC1wcm9wZXJ0eS1ibG9jaykpDQoJ ICAoZ290by1jaGFyIChjYXIgcmFuZ2UpKQ0KCSAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCBv cmctcHJvcGVydHktcmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIg cmFuZ2UpIHQpDQoJICAgIChhZGQtdG8tbGlzdCAncnRuIChvcmctbWF0Y2gtc3RyaW5nLW5vLXBy b3BlcnRpZXMgMikpKQ0KCSAgKG91dGxpbmUtbmV4dC1oZWFkaW5nKSkpKQ0KDQogICAgKHdoZW4g aW5jbHVkZS1zcGVjaWFscw0KICAgICAgKHNldHEgcnRuIChhcHBlbmQgb3JnLXNwZWNpYWwtcHJv cGVydGllcyBydG4pKSkNCg0KICAgICh3aGVuIGluY2x1ZGUtZGVmYXVsdHMNCiAgICAgIChtYXBj IChsYW1iZGEgKHgpIChhZGQtdG8tbGlzdCAncnRuIHgpKSBvcmctZGVmYXVsdC1wcm9wZXJ0aWVz KQ0KICAgICAgKGFkZC10by1saXN0ICdydG4gb3JnLWVmZm9ydC1wcm9wZXJ0eSkpDQoNCiAgICAo d2hlbiBpbmNsdWRlLWNvbHVtbnMNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCShzYXZlLXJlc3Ry aWN0aW9uDQoJICAod2lkZW4pDQoJICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KCSAgKHdoaWxl IChyZS1zZWFyY2gtZm9yd2FyZA0KCQkgICJeXFwoI1xcK0NPTFVNTlM6XFx8WyBcdF0qOkNPTFVN TlM6XFwpWyBcdF0qXFwoLipcXCkiDQoJCSAgbmlsIHQpDQoJICAgIChzZXRxIGNmbXQgKG1hdGNo LXN0cmluZyAyKSBzIDApDQoJICAgICh3aGlsZSAoc3RyaW5nLW1hdGNoIChvcmctcmUgIiVbMC05 XSpcXChbLVs6YWxudW06XV9dK1xcKSIpDQoJCQkJIGNmbXQgcykNCgkgICAgICAoc2V0cSBzICht YXRjaC1lbmQgMCkNCgkJICAgIHAgKG1hdGNoLXN0cmluZyAxIGNmbXQpKQ0KCSAgICAgICh1bmxl c3MgKG9yIChlcXVhbCBwICJJVEVNIikNCgkJCSAgKG1lbWJlciBwIG9yZy1zcGVjaWFsLXByb3Bl cnRpZXMpKQ0KCQkoYWRkLXRvLWxpc3QgJ3J0biAobWF0Y2gtc3RyaW5nIDEgY2ZtdCkpKSkpKSkp DQoNCiAgICAoc29ydCBydG4gKGxhbWJkYSAoYSBiKSAoc3RyaW5nPCAodXBjYXNlIGEpICh1cGNh c2UgYikpKSkpKQ0KDQooZGVmdW4gb3JnLXByb3BlcnR5LXZhbHVlcyAoa2V5KQ0KICAiUmV0dXJu IGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIHByb3BlcnR5IEtFWSBpbiB0aGUgY3VycmVudCBidWZm ZXIuIg0KICAoc2F2ZS1leGN1cnNpb24NCiAgICAoc2F2ZS1yZXN0cmljdGlvbg0KICAgICAgKHdp ZGVuKQ0KICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCiAgICAgIChsZXQgKChyZSAob3Jn LXJlLXByb3BlcnR5IGtleSkpDQoJICAgIHZhbHVlcykNCgkod2hpbGUgKHJlLXNlYXJjaC1mb3J3 YXJkIHJlIG5pbCB0KQ0KCSAgKGFkZC10by1saXN0ICd2YWx1ZXMgKG9yZy10cmltIChtYXRjaC1z dHJpbmcgMykpKSkNCgkoZGVsZXRlICIiIHZhbHVlcykpKSkpDQoNCihkZWZ1biBvcmctaW5zZXJ0 LXByb3BlcnR5LWRyYXdlciAoKQ0KICAiSW5zZXJ0IGEgcHJvcGVydHkgZHJhd2VyIGludG8gdGhl IGN1cnJlbnQgZW50cnkuIg0KICAob3JnLWJhY2stdG8taGVhZGluZyB0KQ0KICAobG9va2luZy1h dCBvcmctb3V0bGluZS1yZWdleHApDQogIChsZXQgKChpbmRlbnQgKGlmIG9yZy1hZGFwdC1pbmRl bnRhdGlvbg0KCQkgICAgKC0gKG1hdGNoLWVuZCAwKSAobWF0Y2gtYmVnaW5uaW5nIDApKQ0KCQkg IDApKQ0KCShiZWcgKHBvaW50KSkNCgkocmUgKGNvbmNhdCAiXlsgXHRdKiIgb3JnLWtleXdvcmQt dGltZS1yZWdleHApKQ0KCWVuZCBoaWRkZW5wKQ0KICAgIChvdXRsaW5lLW5leHQtaGVhZGluZykN CiAgICAoc2V0cSBlbmQgKHBvaW50KSkNCiAgICAoZ290by1jaGFyIGJlZykNCiAgICAod2hpbGUg KHJlLXNlYXJjaC1mb3J3YXJkIHJlIGVuZCB0KSkNCiAgICAoc2V0cSBoaWRkZW5wIChvdXRsaW5l LWludmlzaWJsZS1wKSkNCiAgICAoZW5kLW9mLWxpbmUgMSkNCiAgICAoYW5kIChlcXVhbCAoY2hh ci1hZnRlcikgP1xuKSAoZm9yd2FyZC1jaGFyIDEpKQ0KICAgICh3aGlsZSAobG9va2luZy1hdCAi XlsgXHRdKlxcKDpDTE9DSzpcXHw6TE9HQk9PSzpcXHxDTE9DSzpcXHw6RU5EOlxcKSIpDQogICAg ICAoaWYgKG1lbWJlciAobWF0Y2gtc3RyaW5nIDEpICcoIkNMT0NLOiIgIjpFTkQ6IikpDQoJICA7 OyBqdXN0IHNraXAgdGhpcyBsaW5lDQoJICAoYmVnaW5uaW5nLW9mLWxpbmUgMikNCgk7OyBEcmF3 ZXIgc3RhcnQsIGZpbmQgdGhlIGVuZA0KCShyZS1zZWFyY2gtZm9yd2FyZCAiXlxcKisgXFx8Xlsg XHRdKjpFTkQ6IiBuaWwgdCkNCgkoYmVnaW5uaW5nLW9mLWxpbmUgMSkpKQ0KICAgIChvcmctc2tp cC1vdmVyLXN0YXRlLW5vdGVzKQ0KICAgIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHRcblxyIikN CiAgICAoaWYgKGFuZCAoZXEgKGNoYXItYmVmb3JlKSA/KikgKG5vdCAoZXEgKGNoYXItYWZ0ZXIp ID9cbikpKQ0KCShmb3J3YXJkLWNoYXIgMSkpDQogICAgKGdvdG8tY2hhciAocG9pbnQtYXQtZW9s KSkNCiAgICAobGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkpIChpbnNlcnQgIlxuOlBST1BFUlRJ RVM6XG46RU5EOiIpKQ0KICAgIChiZWdpbm5pbmctb2YtbGluZSAwKQ0KICAgIChvcmctaW5kZW50 LXRvLWNvbHVtbiBpbmRlbnQpDQogICAgKGJlZ2lubmluZy1vZi1saW5lIDIpDQogICAgKG9yZy1p bmRlbnQtdG8tY29sdW1uIGluZGVudCkNCiAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMCkNCiAgICAo aWYgaGlkZGVucA0KCShzYXZlLWV4Y3Vyc2lvbg0KCSAgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkN CgkgIChoaWRlLWVudHJ5KSkNCiAgICAgIChvcmctZmxhZy1kcmF3ZXIgdCkpKSkNCg0KKGRlZnVu IG9yZy1pbnNlcnQtZHJhd2VyICgmb3B0aW9uYWwgYXJnIGRyYXdlcikNCiAgIkluc2VydCBhIGRy YXdlciBhdCBwb2ludC4NCg0KT3B0aW9uYWwgYXJndW1lbnQgRFJBV0VSLCB3aGVuIG5vbi1uaWws IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZw0KZHJhd2VyJ3MgbmFtZS4gIE90aGVyd2lzZSwgdGhl IHVzZXIgaXMgcHJvbXB0ZWQgZm9yIGEgbmFtZS4NCg0KSWYgYSByZWdpb24gaXMgYWN0aXZlLCBp bnNlcnQgdGhlIGRyYXdlciBhcm91bmQgdGhhdCByZWdpb24NCmluc3RlYWQuDQoNClBvaW50IGlz IGxlZnQgYmV0d2VlbiBkcmF3ZXIncyBib3VuZGFyaWVzLiINCiAgKGludGVyYWN0aXZlICJQIikN CiAgKGxldCogKChsb2dib29rIChpZiAoc3RyaW5ncCBvcmctbG9nLWludG8tZHJhd2VyKSBvcmct bG9nLWludG8tZHJhd2VyDQoJCSAgICAiTE9HQk9PSyIpKQ0KCSA7OyBTWVNURU0tRFJBV0VSUyBp cyBhIGxpc3Qgb2YgZHJhd2VyIG5hbWVzIHRoYXQgYXJlIHVzZWQNCgkgOzsgaW50ZXJuYWxseSBi eSBPcmcuICBUaGV5IGFyZSBtZWFudCB0byBiZSBpbnNlcnRlZA0KCSA7OyBhdXRvbWF0aWNhbGx5 Lg0KCSAoc3lzdGVtLWRyYXdlcnMgYCgiQ0xPQ0siICxsb2dib29rICJQUk9QRVJUSUVTIikpDQoJ IDs7IFJlbW92ZSBzeXN0ZW0gZHJhd2VycyBmcm9tIGxpc3QuICBOb3RlOiBGb3Igc29tZSByZWFz b24sDQoJIDs7IGBvcmctY29tcGxldGluZy1yZWFkJyBpZ25vcmVzIHRoZSBwcmVkaWNhdGUgd2hp bGUNCgkgOzsgYGNvbXBsZXRpbmctcmVhZCcgaGFuZGxlcyBpdCBmaW5lLg0KCSAoZHJhd2VyIChp ZiBhcmcgIlBST1BFUlRJRVMiDQoJCSAgIChvciBkcmF3ZXINCgkJICAgICAgIChjb21wbGV0aW5n LXJlYWQNCgkJCSJEcmF3ZXI6ICIgb3JnLWRyYXdlcnMNCgkJCShsYW1iZGEgKGQpIChub3QgKG1l bWJlciBkIHN5c3RlbS1kcmF3ZXJzKSkpKSkpKSkNCiAgICAoY29uZA0KICAgICA7OyBXaXRoIEMt dSwgZmFsbCBiYWNrIG9uIGBvcmctaW5zZXJ0LXByb3BlcnR5LWRyYXdlcicNCiAgICAgKGFyZyAo b3JnLWluc2VydC1wcm9wZXJ0eS1kcmF3ZXIpKQ0KICAgICA7OyBXaXRoIGFuIGFjdGl2ZSByZWdp b24sIGluc2VydCBhIGRyYXdlciBhdCBwb2ludC4NCiAgICAgKChub3QgKG9yZy1yZWdpb24tYWN0 aXZlLXApKQ0KICAgICAgKHByb2duDQoJKHVubGVzcyAoYm9scCkgKGluc2VydCAiXG4iKSkNCgko aW5zZXJ0IChmb3JtYXQgIjolczpcblxuOkVORDpcbiIgZHJhd2VyKSkNCgkoZm9yd2FyZC1saW5l IC0yKSkpDQogICAgIDs7IE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBkcmF3ZXIgYXQgcG9pbnQNCiAg ICAgKHQNCiAgICAgIChsZXQgKChyYmVnIChyZWdpb24tYmVnaW5uaW5nKSkNCgkgICAgKHJlbmQg KGNvcHktbWFya2VyIChyZWdpb24tZW5kKSkpKQ0KCSh1bndpbmQtcHJvdGVjdA0KCSAgICAocHJv Z24NCgkgICAgICAoZ290by1jaGFyIHJiZWcpDQoJICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQ0K CSAgICAgICh3aGVuIChzYXZlLWV4Y3Vyc2lvbg0KCQkgICAgICAocmUtc2VhcmNoLWZvcndhcmQg b3JnLW91dGxpbmUtcmVnZXhwLWJvbCByZW5kIHQpKQ0KCQkodXNlci1lcnJvciAiRHJhd2VycyBj YW5ub3QgY29udGFpbiBoZWFkbGluZXMiKSkNCgkgICAgICA7OyBQb3NpdGlvbiBwb2ludCBhdCB0 aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdA0KCSAgICAgIDs7IG5vbi1ibGFuayBsaW5lIGluIHJl Z2lvbi4gIEluc2VydCBkcmF3ZXIncyBvcGVuaW5nDQoJICAgICAgOzsgdGhlcmUsIHRoZW4gaW5k ZW50IGl0Lg0KCSAgICAgIChvcmctc2tpcC13aGl0ZXNwYWNlKQ0KCSAgICAgIChiZWdpbm5pbmct b2YtbGluZSkNCgkgICAgICAoaW5zZXJ0ICI6IiBkcmF3ZXIgIjpcbiIpDQoJICAgICAgKGZvcndh cmQtbGluZSAtMSkNCgkgICAgICAoaW5kZW50LWZvci10YWItY29tbWFuZCkNCgkgICAgICA7OyBN b3ZlIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IGJsYW5rIGxpbmUNCgkgICAg ICA7OyBhZnRlciB0aGUgbGFzdCBub24tYmxhbmsgbGluZSBpbiByZWdpb24uICBJbnNlcnQNCgkg ICAgICA7OyBkcmF3ZXIncyBjbG9zaW5nLCB0aGVuIGluZGVudCBpdC4NCgkgICAgICAoZ290by1j aGFyIHJlbmQpDQoJICAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcclx0XG4iKQ0KCSAgICAg IChpbnNlcnQgIlxuOkVORDoiKQ0KCSAgICAgIChkZWFjdGl2YXRlLW1hcmsgdCkNCgkgICAgICAo aW5kZW50LWZvci10YWItY29tbWFuZCkNCgkgICAgICAodW5sZXNzIChlb2xwKSAoaW5zZXJ0ICJc biIpKSkNCgkgIDs7IENsZWFyIG1hcmtlciwgd2hhdGV2ZXIgdGhlIG91dGNvbWUgb2YgaW5zZXJ0 aW9uIGlzLg0KCSAgKHNldC1tYXJrZXIgcmVuZCBuaWwpKSkpKSkpDQoNCihkZWZ2YXIgb3JnLXBy b3BlcnR5LXNldC1mdW5jdGlvbnMtYWxpc3QgbmlsDQogICJQcm9wZXJ0eSBzZXQgZnVuY3Rpb24g YWxpc3QuDQpFYWNoIGVudHJ5IHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0Og0KDQog KFBST1BFUlRZIC4gUkVBRC1GVU5DVElPTikNCg0KVGhlIHJlYWQgZnVuY3Rpb24gd2lsbCBiZSBj YWxsZWQgd2l0aCB0aGUgc2FtZSBhcmd1bWVudCBhcw0KYG9yZy1jb21wbGV0aW5nLXJlYWQnLiIp DQoNCihkZWZ1biBvcmctc2V0LXByb3BlcnR5LWZ1bmN0aW9uIChwcm9wZXJ0eSkNCiAgIkdldCB0 aGUgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgdXNlZCB0byBzZXQgUFJPUEVSVFkuDQpUaGlzIGlz IGNvbXB1dGVkIGFjY29yZGluZyB0byBgb3JnLXByb3BlcnR5LXNldC1mdW5jdGlvbnMtYWxpc3Qn LiINCiAgKG9yIChjZHIgKGFzc29jIHByb3BlcnR5IG9yZy1wcm9wZXJ0eS1zZXQtZnVuY3Rpb25z LWFsaXN0KSkNCiAgICAgICdvcmctY29tcGxldGluZy1yZWFkKSkNCg0KKGRlZnVuIG9yZy1yZWFk LXByb3BlcnR5LXZhbHVlIChwcm9wZXJ0eSkNCiAgIlJlYWQgUFJPUEVSVFkgdmFsdWUgZnJvbSB1 c2VyLiINCiAgKGxldCogKChjb21wbGV0aW9uLWlnbm9yZS1jYXNlIHQpDQoJIChhbGxvd2VkIChv cmctcHJvcGVydHktZ2V0LWFsbG93ZWQtdmFsdWVzIG5pbCBwcm9wZXJ0eSAndGFibGUpKQ0KCSAo Y3VyIChvcmctZW50cnktZ2V0IG5pbCBwcm9wZXJ0eSkpDQoJIChwcm9tcHQgKGNvbmNhdCBwcm9w ZXJ0eSAiIHZhbHVlIg0KCQkJIChpZiAoYW5kIGN1ciAoc3RyaW5nLW1hdGNoICJcXFMtIiBjdXIp KQ0KCQkJICAgICAoY29uY2F0ICIgWyIgY3VyICJdIikgIiIpICI6ICIpKQ0KCSAoc2V0LWZ1bmN0 aW9uIChvcmctc2V0LXByb3BlcnR5LWZ1bmN0aW9uIHByb3BlcnR5KSkNCgkgKHZhbCAoaWYgYWxs b3dlZA0KCQkgIChmdW5jYWxsIHNldC1mdW5jdGlvbiBwcm9tcHQgYWxsb3dlZCBuaWwNCgkJCSAg IChub3QgKGdldC10ZXh0LXByb3BlcnR5IDAgJ29yZy11bnJlc3RyaWN0ZWQNCgkJCQkJCSAgIChj YWFyIGFsbG93ZWQpKSkpDQoJCShsZXQgKG9yZy1jb21wbGV0aW9uLXVzZS1pZG8gb3JnLWNvbXBs ZXRpb24tdXNlLWlzd2l0Y2hiKQ0KCQkgIChmdW5jYWxsIHNldC1mdW5jdGlvbiBwcm9tcHQNCgkJ CSAgIChtYXBjYXIgJ2xpc3QgKG9yZy1wcm9wZXJ0eS12YWx1ZXMgcHJvcGVydHkpKQ0KCQkJICAg bmlsIG5pbCAiIiBuaWwgY3VyKSkpKSkNCiAgICAob3JnLXRyaW0gdmFsKSkpDQoNCihkZWZ2YXIg b3JnLWxhc3Qtc2V0LXByb3BlcnR5IG5pbCkNCihkZWZ2YXIgb3JnLWxhc3Qtc2V0LXByb3BlcnR5 LXZhbHVlIG5pbCkNCihkZWZ1biBvcmctcmVhZC1wcm9wZXJ0eS1uYW1lICgpDQogICJSZWFkIGEg cHJvcGVydHkgbmFtZS4iDQogIChsZXQqICgoY29tcGxldGlvbi1pZ25vcmUtY2FzZSB0KQ0KCSAo a2V5cyAob3JnLWJ1ZmZlci1wcm9wZXJ0eS1rZXlzIG5pbCB0IHQpKQ0KCSAoZGVmYXVsdC1wcm9w IChvciAoc2F2ZS1leGN1cnNpb24NCgkJCSAgICAgKHNhdmUtbWF0Y2gtZGF0YQ0KCQkJICAgICAg IChiZWdpbm5pbmctb2YtbGluZSkNCgkJCSAgICAgICAoYW5kIChsb29raW5nLWF0ICJeXFxzLSo6 XFwoW146XG5dK1xcKToiKQ0KCQkJCSAgICAobnVsbCAoc3RyaW5nPSAobWF0Y2gtc3RyaW5nIDEp ICJFTkQiKSkNCgkJCQkgICAgKG1hdGNoLXN0cmluZyAxKSkpKQ0KCQkJICAgb3JnLWxhc3Qtc2V0 LXByb3BlcnR5KSkNCgkgKHByb3BlcnR5IChvcmctaWNvbXBsZXRpbmctcmVhZA0KCQkgICAgKGNv bmNhdCAiUHJvcGVydHkiDQoJCQkgICAgKGlmIGRlZmF1bHQtcHJvcCAoY29uY2F0ICIgWyIgZGVm YXVsdC1wcm9wICJdIikgIiIpDQoJCQkgICAgIjogIikNCgkJICAgIChtYXBjYXIgJ2xpc3Qga2V5 cykNCgkJICAgIG5pbCBuaWwgbmlsIG5pbA0KCQkgICAgZGVmYXVsdC1wcm9wKSkpDQogICAgKGlm IChtZW1iZXIgcHJvcGVydHkga2V5cykNCglwcm9wZXJ0eQ0KICAgICAgKG9yIChjZHIgKGFzc29j IChkb3duY2FzZSBwcm9wZXJ0eSkNCgkJICAgICAgKG1hcGNhciAobGFtYmRhICh4KSAoY29ucyAo ZG93bmNhc2UgeCkgeCkpDQoJCQkgICAgICBrZXlzKSkpDQoJICBwcm9wZXJ0eSkpKSkNCg0KKGRl ZnVuIG9yZy1zZXQtcHJvcGVydHktYW5kLXZhbHVlICh1c2UtbGFzdCkNCiAgIkFsbG93IHRvIHNl dCBbUFJPUEVSVFldOiBbdmFsdWVdIGRpcmVjdGlvbiBmcm9tIHByb21wdC4NCldoZW4gdXNlLWRl ZmF1bHQsIGRvbid0IGV2ZW4gYXNrLCBqdXN0IHVzZSB0aGUgbGFzdA0KXCJbUFJPUEVSVFldOiBb dmFsdWVdXCIgc3RyaW5nIGZyb20gdGhlIGhpc3RvcnkuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0K ICAobGV0KiAoKGNvbXBsZXRpb24taWdub3JlLWNhc2UgdCkNCgkgKHB2IChvciAoYW5kIHVzZS1s YXN0IG9yZy1sYXN0LXNldC1wcm9wZXJ0eS12YWx1ZSkNCgkJIChvcmctY29tcGxldGluZy1yZWFk DQoJCSAgIkVudGVyIGEgXCJbUHJvcGVydHldOiBbdmFsdWVdXCIgcGFpcjogIg0KCQkgIG5pbCBu aWwgbmlsIG5pbCBuaWwNCgkJICBvcmctbGFzdC1zZXQtcHJvcGVydHktdmFsdWUpKSkNCgkgcHJv cCB2YWwpDQogICAgKHdoZW4gKHN0cmluZy1tYXRjaCAiXlsgXHRdKlxcKFteOl0rXFwpOlsgXHRd KlxcKC4qXFwpWyBcdF0qJCIgcHYpDQogICAgICAoc2V0cSBwcm9wIChtYXRjaC1zdHJpbmcgMSBw dikNCgkgICAgdmFsIChtYXRjaC1zdHJpbmcgMiBwdikpDQogICAgICAob3JnLXNldC1wcm9wZXJ0 eSBwcm9wIHZhbCkpKSkNCg0KKGRlZnVuIG9yZy1zZXQtcHJvcGVydHkgKHByb3BlcnR5IHZhbHVl KQ0KICAiSW4gdGhlIGN1cnJlbnQgZW50cnksIHNldCBQUk9QRVJUWSB0byBWQUxVRS4NCldoZW4g Y2FsbGVkIGludGVyYWN0aXZlbHksIHRoaXMgd2lsbCBwcm9tcHQgZm9yIGEgcHJvcGVydHkgbmFt ZSwgb2ZmZXJpbmcNCmNvbXBsZXRpb24gb24gZXhpc3RpbmcgYW5kIGRlZmF1bHQgcHJvcGVydGll cy4gIEFuZCB0aGVuIGl0IHdpbGwgcHJvbXB0DQpmb3IgYSB2YWx1ZSwgb2ZmZXJpbmcgY29tcGxl dGlvbiBlaXRoZXIgb24gYWxsb3dlZCB2YWx1ZXMgKHZpYSBhbiBpbmhlcml0ZWQNCnh4eF9BTEwg cHJvcGVydHkpIG9yIG9uIGV4aXN0aW5nIHZhbHVlcyBpbiBvdGhlciBpbnN0YW5jZXMgb2YgdGhp cyBwcm9wZXJ0eQ0KaW4gdGhlIGN1cnJlbnQgZmlsZS4iDQogIChpbnRlcmFjdGl2ZSAobGlzdCBu aWwgbmlsKSkNCiAgKGxldCogKChwcm9wZXJ0eSAob3IgcHJvcGVydHkgKG9yZy1yZWFkLXByb3Bl cnR5LW5hbWUpKSkNCgkgKHZhbHVlIChvciB2YWx1ZSAob3JnLXJlYWQtcHJvcGVydHktdmFsdWUg cHJvcGVydHkpKSkNCgkgKGZuIChjZHIgKGFzc29jIHByb3BlcnR5IG9yZy1wcm9wZXJ0aWVzLXBv c3Rwcm9jZXNzLWFsaXN0KSkpKQ0KICAgIChzZXRxIG9yZy1sYXN0LXNldC1wcm9wZXJ0eSBwcm9w ZXJ0eSkNCiAgICAoc2V0cSBvcmctbGFzdC1zZXQtcHJvcGVydHktdmFsdWUgKGNvbmNhdCBwcm9w ZXJ0eSAiOiAiIHZhbHVlKSkNCiAgICA7OyBQb3NzaWJseSBwb3N0cHJvY2VzcyB0aGUgaW5zZXJ0 ZWQgdmFsdWU6DQogICAgKHdoZW4gZm4gKHNldHEgdmFsdWUgKGZ1bmNhbGwgZm4gdmFsdWUpKSkN CiAgICAodW5sZXNzIChlcXVhbCAob3JnLWVudHJ5LWdldCBuaWwgcHJvcGVydHkpIHZhbHVlKQ0K ICAgICAgKG9yZy1lbnRyeS1wdXQgbmlsIHByb3BlcnR5IHZhbHVlKSkpKQ0KDQooZGVmdW4gb3Jn LWRlbGV0ZS1wcm9wZXJ0eSAocHJvcGVydHkgJm9wdGlvbmFsIGRlbGV0ZS1lbXB0eS1kcmF3ZXIp DQogICJJbiB0aGUgY3VycmVudCBlbnRyeSwgZGVsZXRlIFBST1BFUlRZLg0KV2hlbiBvcHRpb25h bCBhcmd1bWVudCBERUxFVEUtRU1QVFktRFJBV0VSIGlzIGEgc3RyaW5nLCBpdCBkZWZpbmVzDQph biBlbXB0eSBkcmF3ZXIgdG8gZGVsZXRlLiINCiAgKGludGVyYWN0aXZlDQogICAobGV0KiAoKGNv bXBsZXRpb24taWdub3JlLWNhc2UgdCkNCgkgIChjYXQgKG9yZy1lbnRyeS1nZXQgKHBvaW50KSAi Q0FURUdPUlkiKSkNCgkgIChwcm9wczAgKG9yZy1lbnRyeS1wcm9wZXJ0aWVzIG5pbCAnc3RhbmRh cmQpKQ0KCSAgKHByb3BzIChpZiBjYXQgcHJvcHMwDQoJCSAgIChkZWxldGUgYCgiQ0FURUdPUlki IC4gLChvcmctZ2V0LWNhdGVnb3J5KSkgcHJvcHMwKSkpDQoJICAocHJvcCAoaWYgKDwgMSAobGVu Z3RoIHByb3BzKSkNCgkJICAgIChvcmctaWNvbXBsZXRpbmctcmVhZCAiUHJvcGVydHk6ICIgcHJv cHMgbmlsIHQpDQoJCSAgKGNhYXIgcHJvcHMpKSkpDQogICAgIChsaXN0IHByb3ApKSkNCiAgKGlm IChub3QgcHJvcGVydHkpDQogICAgICAobWVzc2FnZSAiTm8gcHJvcGVydHkgdG8gZGVsZXRlIGlu IHRoaXMgZW50cnkiKQ0KICAgIChvcmctZW50cnktZGVsZXRlIG5pbCBwcm9wZXJ0eSBkZWxldGUt ZW1wdHktZHJhd2VyKQ0KICAgIChtZXNzYWdlICJQcm9wZXJ0eSBcIiVzXCIgZGVsZXRlZCIgcHJv cGVydHkpKSkNCg0KKGRlZnVuIG9yZy1kZWxldGUtcHJvcGVydHktZ2xvYmFsbHkgKHByb3BlcnR5 KQ0KICAiUmVtb3ZlIFBST1BFUlRZIGdsb2JhbGx5LCBmcm9tIGFsbCBlbnRyaWVzLiINCiAgKGlu dGVyYWN0aXZlDQogICAobGV0KiAoKGNvbXBsZXRpb24taWdub3JlLWNhc2UgdCkNCgkgIChwcm9w IChvcmctaWNvbXBsZXRpbmctcmVhZA0KCQkgIkdsb2JhbGx5IHJlbW92ZSBwcm9wZXJ0eTogIg0K CQkgKG1hcGNhciAnbGlzdCAob3JnLWJ1ZmZlci1wcm9wZXJ0eS1rZXlzKSkpKSkNCiAgICAgKGxp c3QgcHJvcCkpKQ0KICAoc2F2ZS1leGN1cnNpb24NCiAgICAoc2F2ZS1yZXN0cmljdGlvbg0KICAg ICAgKHdpZGVuKQ0KICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCiAgICAgIChsZXQgKChj bnQgMCkpDQoJKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZA0KCQkob3JnLXJlLXByb3BlcnR5IHBy b3BlcnR5KQ0KCQluaWwgdCkNCgkgIChzZXRxIGNudCAoMSsgY250KSkNCgkgIChkZWxldGUtcmVn aW9uIChtYXRjaC1iZWdpbm5pbmcgMCkgKDErIChwb2ludC1hdC1lb2wpKSkpDQoJKG1lc3NhZ2Ug IlByb3BlcnR5IFwiJXNcIiByZW1vdmVkIGZyb20gJWQgZW50cmllcyIgcHJvcGVydHkgY250KSkp KSkNCg0KKGRlZnZhciBvcmctY29sdW1ucy1jdXJyZW50LWZtdC1jb21waWxlZCkgOyBkZWZpbmVk IGluIG9yZy1jb2x2aWV3LmVsDQoNCihkZWZ1biBvcmctY29tcHV0ZS1wcm9wZXJ0eS1hdC1wb2lu dCAoKQ0KICAiQ29tcHV0ZSB0aGUgcHJvcGVydHkgYXQgcG9pbnQuDQpUaGlzIGxvb2tzIGZvciBh biBlbmNsb3NpbmcgY29sdW1uIGZvcm1hdCwgZXh0cmFjdHMgdGhlIG9wZXJhdG9yIGFuZA0KdGhl biBhcHBsaWVzIGl0IHRvIHRoZSBwcm9wZXJ0eSBpbiB0aGUgY29sdW1uIGZvcm1hdCdzIHNjb3Bl LiINCiAgKGludGVyYWN0aXZlKQ0KICAodW5sZXNzIChvcmctYXQtcHJvcGVydHktcCkNCiAgICAo dXNlci1lcnJvciAiTm90IGF0IGEgcHJvcGVydHkiKSkNCiAgKGxldCAoKHByb3AgKG9yZy1tYXRj aC1zdHJpbmctbm8tcHJvcGVydGllcyAyKSkpDQogICAgKG9yZy1jb2x1bW5zLWdldC1mb3JtYXQt YW5kLXRvcC1sZXZlbCkNCiAgICAodW5sZXNzIChudGggMyAoYXNzb2MgcHJvcCBvcmctY29sdW1u cy1jdXJyZW50LWZtdC1jb21waWxlZCkpDQogICAgICAodXNlci1lcnJvciAiTm8gb3BlcmF0b3Ig ZGVmaW5lZCBmb3IgcHJvcGVydHkgJXMiIHByb3ApKQ0KICAgIChvcmctY29sdW1ucy1jb21wdXRl IHByb3ApKSkNCg0KKGRlZnZhciBvcmctcHJvcGVydHktYWxsb3dlZC12YWx1ZS1mdW5jdGlvbnMg bmlsDQogICJIb29rIGZvciBmdW5jdGlvbnMgc3VwcGx5aW5nIGFsbG93ZWQgdmFsdWVzIGZvciBh IHNwZWNpZmljIHByb3BlcnR5Lg0KVGhlIGZ1bmN0aW9ucyBtdXN0IHRha2UgYSBzaW5nbGUgYXJn dW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSwgYW5kDQpyZXR1cm4gYSBmbGF0IGxpc3Qg b2YgYWxsb3dlZCB2YWx1ZXMuICBJZiBcIjpFVENcIiBpcyBvbmUgb2YNCnRoZSB2YWx1ZXMsIHRo aXMgbWVhbnMgdGhhdCB0aGVzZSB2YWx1ZXMgYXJlIGludGVuZGVkIGFzIGRlZmF1bHRzIGZvcg0K Y29tcGxldGlvbiwgYnV0IHRoYXQgb3RoZXIgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIHRvby4N ClRoZSBmdW5jdGlvbnMgbXVzdCByZXR1cm4gbmlsIGlmIHRoZXkgYXJlIG5vdCByZXNwb25zaWJs ZSBmb3IgdGhpcw0KcHJvcGVydHkuIikNCg0KKGRlZnVuIG9yZy1wcm9wZXJ0eS1nZXQtYWxsb3dl ZC12YWx1ZXMgKHBvbSBwcm9wZXJ0eSAmb3B0aW9uYWwgdGFibGUpDQogICJHZXQgYWxsb3dlZCB2 YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSBQUk9QRVJUWS4NCldoZW4gVEFCTEUgaXMgbm9uLW5pbCwg cmV0dXJuIGFuIGFsaXN0IHRoYXQgY2FuIGRpcmVjdGx5IGJlIHVzZWQgZm9yDQpjb21wbGV0aW9u LiINCiAgKGxldCAodmFscykNCiAgICAoY29uZA0KICAgICAoKGVxdWFsIHByb3BlcnR5ICJUT0RP IikNCiAgICAgIChzZXRxIHZhbHMgKG9yZy13aXRoLXBvaW50LWF0IHBvbQ0KCQkgICAoYXBwZW5k IG9yZy10b2RvLWtleXdvcmRzLTEgJygiIikpKSkpDQogICAgICgoZXF1YWwgcHJvcGVydHkgIlBS SU9SSVRZIikNCiAgICAgIChsZXQgKChuIG9yZy1sb3dlc3QtcHJpb3JpdHkpKQ0KCSh3aGlsZSAo Pj0gbiBvcmctaGlnaGVzdC1wcmlvcml0eSkNCgkgIChwdXNoIChjaGFyLXRvLXN0cmluZyBuKSB2 YWxzKQ0KCSAgKHNldHEgbiAoMS0gbikpKSkpDQogICAgICgobWVtYmVyIHByb3BlcnR5IG9yZy1z cGVjaWFsLXByb3BlcnRpZXMpKQ0KICAgICAoKHNldHEgdmFscyAocnVuLWhvb2std2l0aC1hcmdz LXVudGlsLXN1Y2Nlc3MNCgkJICAnb3JnLXByb3BlcnR5LWFsbG93ZWQtdmFsdWUtZnVuY3Rpb25z IHByb3BlcnR5KSkpDQogICAgICh0DQogICAgICAoc2V0cSB2YWxzIChvcmctZW50cnktZ2V0IHBv bSAoY29uY2F0IHByb3BlcnR5ICJfQUxMIikgJ2luaGVyaXQpKQ0KICAgICAgKHdoZW4gKGFuZCB2 YWxzIChzdHJpbmctbWF0Y2ggIlxcUy0iIHZhbHMpKQ0KCShzZXRxIHZhbHMgKGNhciAocmVhZC1m cm9tLXN0cmluZyAoY29uY2F0ICIoIiB2YWxzICIpIikpKSkNCgkoc2V0cSB2YWxzIChtYXBjYXIg KGxhbWJkYSAoeCkNCgkJCSAgICAgKGNvbmQgKChzdHJpbmdwIHgpIHgpDQoJCQkJICAgKChudW1i ZXJwIHgpIChudW1iZXItdG8tc3RyaW5nIHgpKQ0KCQkJCSAgICgoc3ltYm9scCB4KSAoc3ltYm9s LW5hbWUgeCkpDQoJCQkJICAgKHQgIj8/PyIpKSkNCgkJCSAgIHZhbHMpKSkpKQ0KICAgICh3aGVu IChtZW1iZXIgIjpFVEMiIHZhbHMpDQogICAgICAoc2V0cSB2YWxzIChyZW1vdmUgIjpFVEMiIHZh bHMpKQ0KICAgICAgKG9yZy1hZGQtcHJvcHMgKGNhciB2YWxzKSAnKG9yZy11bnJlc3RyaWN0ZWQg dCkpKQ0KICAgIChpZiB0YWJsZSAobWFwY2FyICdsaXN0IHZhbHMpIHZhbHMpKSkNCg0KKGRlZnVu IG9yZy1wcm9wZXJ0eS1wcmV2aW91cy1hbGxvd2VkLXZhbHVlICgmb3B0aW9uYWwgcHJldmlvdXMp DQogICJTd2l0Y2ggdG8gdGhlIG5leHQgYWxsb3dlZCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eS4i DQogIChpbnRlcmFjdGl2ZSkNCiAgKG9yZy1wcm9wZXJ0eS1uZXh0LWFsbG93ZWQtdmFsdWUgdCkp DQoNCihkZWZ1biBvcmctcHJvcGVydHktbmV4dC1hbGxvd2VkLXZhbHVlICgmb3B0aW9uYWwgcHJl dmlvdXMpDQogICJTd2l0Y2ggdG8gdGhlIG5leHQgYWxsb3dlZCB2YWx1ZSBmb3IgdGhpcyBwcm9w ZXJ0eS4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKHVubGVzcyAob3JnLWF0LXByb3BlcnR5LXApDQog ICAgKHVzZXItZXJyb3IgIk5vdCBhdCBhIHByb3BlcnR5IikpDQogIChsZXQqICgocHJvcCAoY2Fy IChzYXZlLW1hdGNoLWRhdGEgKG9yZy1zcGxpdC1zdHJpbmcgKG1hdGNoLXN0cmluZyAxKSAiOiIp KSkpDQoJIChrZXkgKG1hdGNoLXN0cmluZyAyKSkNCgkgKHZhbHVlIChtYXRjaC1zdHJpbmcgMykp DQoJIChhbGxvd2VkIChvciAob3JnLXByb3BlcnR5LWdldC1hbGxvd2VkLXZhbHVlcyAocG9pbnQp IGtleSkNCgkJICAgICAgKGFuZCAobWVtYmVyIHZhbHVlICAnKCJbIF0iICJbLV0iICJbWF0iKSkN CgkJCSAgICcoIlsgXSIgIltYXSIpKSkpDQoJIChoZWFkaW5nIChzYXZlLW1hdGNoLWRhdGEgKG50 aCA0IChvcmctaGVhZGluZy1jb21wb25lbnRzKSkpKQ0KCSBudmFsKQ0KICAgICh1bmxlc3MgYWxs b3dlZA0KICAgICAgKHVzZXItZXJyb3IgIkFsbG93ZWQgdmFsdWVzIGZvciB0aGlzIHByb3BlcnR5 IGhhdmUgbm90IGJlZW4gZGVmaW5lZCIpKQ0KICAgIChpZiBwcmV2aW91cyAoc2V0cSBhbGxvd2Vk IChyZXZlcnNlIGFsbG93ZWQpKSkNCiAgICAoaWYgKG1lbWJlciB2YWx1ZSBhbGxvd2VkKQ0KCShz ZXRxIG52YWwgKGNhciAoY2RyIChtZW1iZXIgdmFsdWUgYWxsb3dlZCkpKSkpDQogICAgKHNldHEg bnZhbCAob3IgbnZhbCAoY2FyIGFsbG93ZWQpKSkNCiAgICAoaWYgKGVxdWFsIG52YWwgdmFsdWUp DQoJKHVzZXItZXJyb3IgIk9ubHkgb25lIGFsbG93ZWQgdmFsdWUgZm9yIHRoaXMgcHJvcGVydHki KSkNCiAgICAob3JnLWF0LXByb3BlcnR5LXApDQogICAgKHJlcGxhY2UtbWF0Y2ggKGNvbmNhdCAi IDoiIGtleSAiOiAiIG52YWwpIHQgdCkNCiAgICAob3JnLWluZGVudC1saW5lKQ0KICAgIChiZWdp bm5pbmctb2YtbGluZSAxKQ0KICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdCIpDQogICAgKHdo ZW4gKGVxdWFsIHByb3Agb3JnLWVmZm9ydC1wcm9wZXJ0eSkNCiAgICAgIChzYXZlLWV4Y3Vyc2lv bg0KCShvcmctYmFjay10by1oZWFkaW5nIHQpDQoJKHB1dC10ZXh0LXByb3BlcnR5IChwb2ludC1h dC1ib2wpIChwb2ludC1hdC1lb2wpICdvcmctZWZmb3J0IG52YWwpKQ0KICAgICAgKHdoZW4gKHN0 cmluZz0gb3JnLWNsb2NrLWN1cnJlbnQtdGFzayBoZWFkaW5nKQ0KCShzZXRxIG9yZy1jbG9jay1l ZmZvcnQgbnZhbCkNCgkob3JnLWNsb2NrLXVwZGF0ZS1tb2RlLWxpbmUpKSkNCiAgICAocnVuLWhv b2std2l0aC1hcmdzICdvcmctcHJvcGVydHktY2hhbmdlZC1mdW5jdGlvbnMga2V5IG52YWwpKSkN Cg0KKGRlZnVuIG9yZy1maW5kLW9scCAocGF0aCAmb3B0aW9uYWwgdGhpcy1idWZmZXIpDQogICJS ZXR1cm4gYSBtYXJrZXIgcG9pbnRpbmcgdG8gdGhlIGVudHJ5IGF0IG91dGxpbmUgcGF0aCBPTFAu DQpJZiBhbnl0aGluZyBnb2VzIHdyb25nLCB0aHJvdyBhbiBlcnJvci4NCllvdSBjYW4gd3JhcCB0 aGlzIGNhbGwgdG8gY2F0Y2ggdGhlIGVycm9yIGxpa2UgdGhpczoNCg0KICAoY29uZGl0aW9uLWNh c2UgbXNnDQogICAgICAob3JnLW1vYmlsZS1sb2NhdGUtZW50cnkgKG1hdGNoLXN0cmluZyA0KSkN CiAgICAoZXJyb3IgKG50aCAxIG1zZykpKQ0KDQpUaGUgcmV0dXJuIHZhbHVlIHdpbGwgdGhlbiBi ZSBlaXRoZXIgYSBzdHJpbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSwNCm9yIGEgbWFya2VyIGlm IGV2ZXJ5dGhpbmcgaXMgT0suDQoNCklmIFRISVMtQlVGRkVSIGlzIHNldCwgdGhlIG91dGxpbmUg cGF0aCBkb2VzIG5vdCBjb250YWluIGEgZmlsZSwNCm9ubHkgaGVhZGluZ3MuIg0KICAobGV0KiAo KGZpbGUgKGlmIHRoaXMtYnVmZmVyIGJ1ZmZlci1maWxlLW5hbWUgKHBvcCBwYXRoKSkpDQoJIChi dWZmZXIgKGlmIHRoaXMtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikgKGZpbmQtZmlsZS1ub3NlbGVj dCBmaWxlKSkpDQoJIChsZXZlbCAxKQ0KCSAobG1pbiAxKQ0KCSAobG1heCAxKQ0KCSBsaW1pdCBy ZSBlbmQgZm91bmQgcG9zIGhlYWRpbmcgY250IGZsZXZlbCkNCiAgICAodW5sZXNzIGJ1ZmZlciAo ZXJyb3IgIkZpbGUgbm90IGZvdW5kIDolcyIgZmlsZSkpDQogICAgKHdpdGgtY3VycmVudC1idWZm ZXIgYnVmZmVyDQogICAgICAoc2F2ZS1leGN1cnNpb24NCgkoc2F2ZS1yZXN0cmljdGlvbg0KCSAg KHdpZGVuKQ0KCSAgKHNldHEgbGltaXQgKHBvaW50LW1heCkpDQoJICAoZ290by1jaGFyIChwb2lu dC1taW4pKQ0KCSAgKHdoaWxlIChzZXRxIGhlYWRpbmcgKHBvcCBwYXRoKSkNCgkgICAgKHNldHEg cmUgKGZvcm1hdCBvcmctY29tcGxleC1oZWFkaW5nLXJlZ2V4cC1mb3JtYXQNCgkJCSAgICAgKHJl Z2V4cC1xdW90ZSBoZWFkaW5nKSkpDQoJICAgIChzZXRxIGNudCAwIHBvcyAocG9pbnQpKQ0KCSAg ICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIHJlIGVuZCB0KQ0KCSAgICAgIChzZXRxIGxldmVs ICgtIChtYXRjaC1lbmQgMSkgKG1hdGNoLWJlZ2lubmluZyAxKSkpDQoJICAgICAgKGlmIChhbmQg KD49IGxldmVsIGxtaW4pICg8PSBsZXZlbCBsbWF4KSkNCgkJICAoc2V0cSBmb3VuZCAobWF0Y2gt YmVnaW5uaW5nIDApIGZsZXZlbCBsZXZlbCBjbnQgKDErIGNudCkpKSkNCgkgICAgKHdoZW4gKD0g Y250IDApIChlcnJvciAiSGVhZGluZyBub3QgZm91bmQgb24gbGV2ZWwgJWQ6ICVzIg0KCQkJCSAg IGxtYXggaGVhZGluZykpDQoJICAgICh3aGVuICg+IGNudCAxKSAoZXJyb3IgIkhlYWRpbmcgbm90 IHVuaXF1ZSBvbiBsZXZlbCAlZDogJXMiDQoJCQkJICAgbG1heCBoZWFkaW5nKSkNCgkgICAgKGdv dG8tY2hhciBmb3VuZCkNCgkgICAgKHNldHEgbG1pbiAoMSsgZmxldmVsKSBsbWF4ICgrIGxtaW4g KGlmIG9yZy1vZGQtbGV2ZWxzLW9ubHkgMSAwKSkpDQoJICAgIChzZXRxIGVuZCAoc2F2ZS1leGN1 cnNpb24gKG9yZy1lbmQtb2Ytc3VidHJlZSB0IHQpKSkpDQoJICAod2hlbiAob3JnLWF0LWhlYWRp bmctcCkNCgkgICAgKHBvaW50LW1hcmtlcikpKSkpKSkNCg0KKGRlZnVuIG9yZy1maW5kLWV4YWN0 LWhlYWRsaW5lLWluLWJ1ZmZlciAoaGVhZGluZyAmb3B0aW9uYWwgYnVmZmVyIHBvcy1vbmx5KQ0K ICAiRmluZCBub2RlIEhFQURJTkcgaW4gQlVGRkVSLg0KUmV0dXJuIGEgbWFya2VyIHRvIHRoZSBo ZWFkaW5nIGlmIGl0IHdhcyBmb3VuZCwgb3IgbmlsIGlmIG5vdC4NCklmIFBPUy1PTkxZIGlzIHNl dCwgcmV0dXJuIGp1c3QgdGhlIHBvc2l0aW9uIGluc3RlYWQgb2YgYSBtYXJrZXIuDQoNClRoZSBo ZWFkaW5nIHRleHQgbXVzdCBtYXRjaCBleGFjdCwgYnV0IGl0IG1heSBoYXZlIGEgVE9ETyBrZXl3 b3JkLA0KYSBwcmlvcml0eSBjb29raWUgYW5kIHRhZ3MgaW4gdGhlIHN0YW5kYXJkIGxvY2F0aW9u cy4iDQogICh3aXRoLWN1cnJlbnQtYnVmZmVyIChvciBidWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkN CiAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAgIChzYXZlLXJlc3RyaWN0aW9uDQoJKHdpZGVuKQ0K CShnb3RvLWNoYXIgKHBvaW50LW1pbikpDQoJKGxldCAoY2FzZS1mb2xkLXNlYXJjaCkNCgkgIChp ZiAocmUtc2VhcmNoLWZvcndhcmQNCgkgICAgICAgKGZvcm1hdCBvcmctY29tcGxleC1oZWFkaW5n LXJlZ2V4cC1mb3JtYXQNCgkJICAgICAgIChyZWdleHAtcXVvdGUgaGVhZGluZykpIG5pbCB0KQ0K CSAgICAgIChpZiBwb3Mtb25seQ0KCQkgIChtYXRjaC1iZWdpbm5pbmcgMCkNCgkJKG1vdmUtbWFy a2VyIChtYWtlLW1hcmtlcikgKG1hdGNoLWJlZ2lubmluZyAwKSkpKSkpKSkpDQoNCihkZWZ1biBv cmctZmluZC1leGFjdC1oZWFkaW5nLWluLWRpcmVjdG9yeSAoaGVhZGluZyAmb3B0aW9uYWwgZGly KQ0KICAiRmluZCBPcmcgbm9kZSBoZWFkbGluZSBIRUFESU5HIGluIGFsbCAub3JnIGZpbGVzIGlu IGRpcmVjdG9yeSBESVIuDQpXaGVuIHRoZSB0YXJnZXQgaGVhZGxpbmUgaXMgZm91bmQsIHJldHVy biBhIG1hcmtlciB0byB0aGlzIGxvY2F0aW9uLiINCiAgKGxldCAoKGZpbGVzIChkaXJlY3Rvcnkt ZmlsZXMgKG9yIGRpciBkZWZhdWx0LWRpcmVjdG9yeSkNCgkJCQluaWwgIlxcYFteLiNdLipcXC5v cmdcXCciKSkNCiAgICAgICAgZmlsZSB2aXNpdGluZyBtIGJ1ZmZlcikNCiAgICAoY2F0Y2ggJ2Zv dW5kDQogICAgICAod2hpbGUgKHNldHEgZmlsZSAocG9wIGZpbGVzKSkNCiAgICAgICAgKG1lc3Nh Z2UgInRyeWluZyAlcyIgZmlsZSkNCiAgICAgICAgKHNldHEgdmlzaXRpbmcgKG9yZy1maW5kLWJh c2UtYnVmZmVyLXZpc2l0aW5nIGZpbGUpKQ0KICAgICAgICAoc2V0cSBidWZmZXIgKG9yIHZpc2l0 aW5nIChmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZSkpKQ0KICAgICAgICAoc2V0cSBtIChvcmctZmlu ZC1leGFjdC1oZWFkbGluZS1pbi1idWZmZXINCiAgICAgICAgICAgICAgICAgaGVhZGluZyBidWZm ZXIpKQ0KICAgICAgICAod2hlbiAoYW5kIChub3QgbSkgKG5vdCB2aXNpdGluZykpIChraWxsLWJ1 ZmZlciBidWZmZXIpKQ0KICAgICAgICAoYW5kIG0gKHRocm93ICdmb3VuZCBtKSkpKSkpDQoNCihk ZWZ1biBvcmctZmluZC1lbnRyeS13aXRoLWlkIChpZGVudCkNCiAgIkxvY2F0ZSB0aGUgZW50cnkg dGhhdCBjb250YWlucyB0aGUgSUQgcHJvcGVydHkgd2l0aCBleGFjdCB2YWx1ZSBJREVOVC4NCklE RU5UIGNhbiBiZSBhIHN0cmluZywgYSBzeW1ib2wgb3IgYSBudW1iZXIsIHRoaXMgZnVuY3Rpb24g d2lsbCBzZWFyY2ggZm9yDQp0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGl0Lg0KUmV0dXJu IHRoZSBwb3NpdGlvbiB3aGVyZSB0aGlzIGVudHJ5IHN0YXJ0cywgb3IgbmlsIGlmIHRoZXJlIGlz IG5vIHN1Y2ggZW50cnkuIg0KICAoaW50ZXJhY3RpdmUgInNJRDogIikNCiAgKGxldCAoKGlkIChj b25kDQoJICAgICAoKHN0cmluZ3AgaWRlbnQpIGlkZW50KQ0KCSAgICAgKChzeW1ib2wtbmFtZSBp ZGVudCkgKHN5bWJvbC1uYW1lIGlkZW50KSkNCgkgICAgICgobnVtYmVycCBpZGVudCkgKG51bWJl ci10by1zdHJpbmcgaWRlbnQpKQ0KCSAgICAgKHQgKGVycm9yICJJREVOVCAlcyBtdXN0IGJlIGEg c3RyaW5nLCBzeW1ib2wgb3IgbnVtYmVyIiBpZGVudCkpKSkNCgkoY2FzZS1mb2xkLXNlYXJjaCBu aWwpKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgKHNhdmUtcmVzdHJpY3Rpb24NCgkod2lk ZW4pDQoJKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCgkod2hlbiAocmUtc2VhcmNoLWZvcndhcmQN CgkgICAgICAgKGNvbmNhdCAiXlsgXHRdKjpJRDpbIFx0XSsiIChyZWdleHAtcXVvdGUgaWQpICJb IFx0XSokIikNCgkgICAgICAgbmlsIHQpDQoJICAob3JnLWJhY2stdG8taGVhZGluZyB0KQ0KCSAg KHBvaW50KSkpKSkpDQoNCjs7OzsgVGltZXN0YW1wcw0KDQooZGVmdmFyIG9yZy1sYXN0LWNoYW5n ZWQtdGltZXN0YW1wIG5pbCkNCihkZWZ2YXIgb3JnLWxhc3QtaW5zZXJ0ZWQtdGltZXN0YW1wIG5p bA0KICAiVGhlIGxhc3QgdGltZSBzdGFtcCBpbnNlcnRlZCB3aXRoIGBvcmctaW5zZXJ0LXRpbWUt c3RhbXAnLiIpDQooZGVmdmFyIG9yZy10cy13aGF0KSA7IGR5bmFtaWNhbGx5IHNjb3BlZCBwYXJh bWV0ZXINCg0KKGRlZnVuIG9yZy10aW1lLXN0YW1wIChhcmcgJm9wdGlvbmFsIGluYWN0aXZlKQ0K ICAiUHJvbXB0IGZvciBhIGRhdGUvdGltZSBhbmQgaW5zZXJ0IGEgdGltZSBzdGFtcC4NCklmIHRo ZSB1c2VyIHNwZWNpZmllcyBhIHRpbWUgbGlrZSBISDpNTSBvciBpZiB0aGlzIGNvbW1hbmQgaXMN CmNhbGxlZCB3aXRoIGF0IGxlYXN0IG9uZSBwcmVmaXggYXJndW1lbnQsIHRoZSB0aW1lIHN0YW1w IGNvbnRhaW5zDQp0aGUgZGF0ZSBhbmQgdGhlIHRpbWUuICBPdGhlcndpc2UsIG9ubHkgdGhlIGRh dGUgaXMgYmUgaW5jbHVkZWQuDQoNCkFsbCBwYXJ0cyBvZiBhIGRhdGUgbm90IHNwZWNpZmllZCBi eSB0aGUgdXNlciBpcyBmaWxsZWQgaW4gZnJvbQ0KdGhlIGN1cnJlbnQgZGF0ZS90aW1lLiAgU28g aWYgeW91IGp1c3QgcHJlc3MgcmV0dXJuIHdpdGhvdXQNCnR5cGluZyBhbnl0aGluZywgdGhlIHRp bWUgc3RhbXAgd2lsbCByZXByZXNlbnQgdGhlIGN1cnJlbnQNCmRhdGUvdGltZS4NCg0KSWYgdGhl cmUgaXMgYWxyZWFkeSBhIHRpbWVzdGFtcCBhdCB0aGUgY3Vyc29yLCBpdCB3aWxsIGJlDQptb2Rp ZmllZC4NCg0KV2l0aCB0d28gdW5pdmVyc2FsIHByZWZpeCBhcmd1bWVudHMsIGluc2VydCBhbiBh Y3RpdmUgdGltZXN0YW1wDQp3aXRoIHRoZSBjdXJyZW50IHRpbWUgd2l0aG91dCBwcm9tcHRpbmcg dGhlIHVzZXIuDQoNCldoZW4gY2FsbGVkIGZyb20gbGlzcCwgdGhlIHRpbWVzdGFtcCBpcyBpbmFj dGl2ZSBpZiBJTkFDVElWRSBpcw0Kbm9uLW5pbC4iDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChs ZXQqICgodHMgbmlsKQ0KCSAoZGVmYXVsdC10aW1lDQoJICAgOzsgRGVmYXVsdCB0aW1lIGlzIGVp dGhlciB0b2RheSwgb3IsIHdoZW4gZW50ZXJpbmcgYSByYW5nZSwNCgkgICA7OyB0aGUgcmFuZ2Ug c3RhcnQuDQoJICAgKGlmIChvciAoYW5kIChvcmctYXQtdGltZXN0YW1wLXAgdCkgKHNldHEgdHMg KG1hdGNoLXN0cmluZyAwKSkpDQoJCSAgIChzYXZlLWV4Y3Vyc2lvbg0KCQkgICAgIChyZS1zZWFy Y2gtYmFja3dhcmQNCgkJICAgICAgKGNvbmNhdCBvcmctdHMtcmVnZXhwICItLT8tP1xcPSIpIDsg MS0zIG1pbnVzZXMNCgkJICAgICAgKC0gKHBvaW50KSAyMCkgdCkpKQ0KCSAgICAgICAoYXBwbHkg J2VuY29kZS10aW1lIChvcmctcGFyc2UtdGltZS1zdHJpbmcgKG1hdGNoLXN0cmluZyAxKSkpDQoJ ICAgICAoY3VycmVudC10aW1lKSkpDQoJIChkZWZhdWx0LWlucHV0IChhbmQgdHMgKG9yZy1nZXQt Y29tcGFjdC10b2QgdHMpKSkNCgkgKHJlcGVhdGVyIChzYXZlLWV4Y3Vyc2lvbg0KCSAJICAgICAo c2F2ZS1tYXRjaC1kYXRhDQoJIAkgICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQ0KCSAJICAgICAg ICh3aGVuIChyZS1zZWFyY2gtZm9yd2FyZA0KCQkJICAgICAgIlxcKFsuKy1dK1swLTldK1toZHdt eV0gP1xcKSsiIDs7XFwoPzpbLyBdWy0rXT9bMC05XStbaGR3bXldXFwpP1xcKSA/Ig0KCQkJICAg ICAgKHNhdmUtZXhjdXJzaW9uIChwcm9nbiAoZW5kLW9mLWxpbmUpIChwb2ludCkpKSB0KQ0KCQkJ IChtYXRjaC1zdHJpbmcgMCkpKSkpDQoJIG9yZy10aW1lLXdhcy1naXZlbiBvcmctZW5kLXRpbWUt d2FzLWdpdmVuIHRpbWUpDQogICAgKGNvbmQNCiAgICAgKChhbmQgKG9yZy1hdC10aW1lc3RhbXAt cCB0KQ0KCSAgIChtZW1xIGxhc3QtY29tbWFuZCAnKG9yZy10aW1lLXN0YW1wIG9yZy10aW1lLXN0 YW1wLWluYWN0aXZlKSkNCgkgICAobWVtcSB0aGlzLWNvbW1hbmQgJyhvcmctdGltZS1zdGFtcCBv cmctdGltZS1zdGFtcC1pbmFjdGl2ZSkpKQ0KICAgICAgKGluc2VydCAiLS0iKQ0KICAgICAgKHNl dHEgdGltZSAobGV0ICgodGhpcy1jb21tYW5kIHRoaXMtY29tbWFuZCkpDQoJCSAgIChvcmctcmVh ZC1kYXRlIGFyZyAndG90aW1lIG5pbCBuaWwNCgkJCQkgIGRlZmF1bHQtdGltZSBkZWZhdWx0LWlu cHV0IGluYWN0aXZlKSkpDQogICAgICAob3JnLWluc2VydC10aW1lLXN0YW1wIHRpbWUgKG9yIG9y Zy10aW1lLXdhcy1naXZlbiBhcmcpIGluYWN0aXZlKSkNCiAgICAgKChvcmctYXQtdGltZXN0YW1w LXAgdCkNCiAgICAgIChzZXRxIHRpbWUgKGxldCAoKHRoaXMtY29tbWFuZCB0aGlzLWNvbW1hbmQp KQ0KCQkgICAob3JnLXJlYWQtZGF0ZSBhcmcgJ3RvdGltZSBuaWwgbmlsIGRlZmF1bHQtdGltZSBk ZWZhdWx0LWlucHV0IGluYWN0aXZlKSkpDQogICAgICAod2hlbiAob3JnLWF0LXRpbWVzdGFtcC1w IHQpIDsganVzdCB0byBnZXQgdGhlIG1hdGNoIGRhdGENCgkJCQkJOwkoc2V0cSBpbmFjdGl2ZSAo ZXEgKGNoYXItYWZ0ZXIgKG1hdGNoLWJlZ2lubmluZyAwKSkgP1xbKSkNCgkocmVwbGFjZS1tYXRj aCAiIikNCgkoc2V0cSBvcmctbGFzdC1jaGFuZ2VkLXRpbWVzdGFtcA0KCSAgICAgIChvcmctaW5z ZXJ0LXRpbWUtc3RhbXANCgkgICAgICAgdGltZSAob3Igb3JnLXRpbWUtd2FzLWdpdmVuIGFyZykN CgkgICAgICAgaW5hY3RpdmUgbmlsIG5pbCAobGlzdCBvcmctZW5kLXRpbWUtd2FzLWdpdmVuKSkp DQoJKHdoZW4gcmVwZWF0ZXIgKGdvdG8tY2hhciAoMS0gKHBvaW50KSkpIChpbnNlcnQgIiAiIHJl cGVhdGVyKQ0KCSAgICAgIChzZXRxIG9yZy1sYXN0LWNoYW5nZWQtdGltZXN0YW1wDQoJCSAgICAo Y29uY2F0IChzdWJzdHJpbmcgb3JnLWxhc3QtaW5zZXJ0ZWQtdGltZXN0YW1wIDAgLTEpDQoJCQkg ICAgIiAiIHJlcGVhdGVyICI+IikpKSkNCiAgICAgIChtZXNzYWdlICJUaW1lc3RhbXAgdXBkYXRl ZCIpKQ0KICAgICAoKGVxdWFsIGFyZyAnKDE2KSkNCiAgICAgIChvcmctaW5zZXJ0LXRpbWUtc3Rh bXAgKGN1cnJlbnQtdGltZSkgdCBpbmFjdGl2ZSkpDQogICAgICh0DQogICAgICAoc2V0cSB0aW1l IChsZXQgKCh0aGlzLWNvbW1hbmQgdGhpcy1jb21tYW5kKSkNCgkJICAgKG9yZy1yZWFkLWRhdGUg YXJnICd0b3RpbWUgbmlsIG5pbCBkZWZhdWx0LXRpbWUgZGVmYXVsdC1pbnB1dCBpbmFjdGl2ZSkp KQ0KICAgICAgKG9yZy1pbnNlcnQtdGltZS1zdGFtcCB0aW1lIChvciBvcmctdGltZS13YXMtZ2l2 ZW4gYXJnKSBpbmFjdGl2ZQ0KCQkJICAgICBuaWwgbmlsIChsaXN0IG9yZy1lbmQtdGltZS13YXMt Z2l2ZW4pKSkpKSkNCg0KOzsgRklYTUU6IGNhbiB3ZSB1c2UgdGhpcyBmb3Igc29tZXRoaW5nIGVs c2UsIGxpa2UgY29tcHV0aW5nIHRpbWUgZGlmZmVyZW5jZXM/DQooZGVmdW4gb3JnLWdldC1jb21w YWN0LXRvZCAocykNCiAgKHdoZW4gKHN0cmluZy1tYXRjaCAiXFwoXFwoWzAxMl0/WzAtOV1cXCk6 XFwoWzAtNV1bMC05XVxcKVxcKVxcKC1cXChcXChbMDEyXT9bMC05XVxcKTpcXChbMC01XVswLTld XFwpXFwpXFwpPyIgcykNCiAgICAobGV0KiAoKHQxIChtYXRjaC1zdHJpbmcgMSBzKSkNCgkgICAo aDEgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAyIHMpKSkNCgkgICAobTEgKHN0cmlu Zy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAzIHMpKSkNCgkgICAodDIgKGFuZCAobWF0Y2gtZW5k IDQpIChtYXRjaC1zdHJpbmcgNSBzKSkpDQoJICAgKGgyIChhbmQgdDIgKHN0cmluZy10by1udW1i ZXIgKG1hdGNoLXN0cmluZyA2IHMpKSkpDQoJICAgKG0yIChhbmQgdDIgKHN0cmluZy10by1udW1i ZXIgKG1hdGNoLXN0cmluZyA3IHMpKSkpDQoJICAgZGggZG0pDQogICAgICAoaWYgKG5vdCB0MikN CgkgIHQxDQoJKHNldHEgZGggKC0gaDIgaDEpIGRtICgtIG0yIG0xKSkNCgkoaWYgKDwgZG0gMCkg KHNldHEgZG0gKCsgZG0gNjApIGRoICgxLSBkaCkpKQ0KCShjb25jYXQgdDEgIisiIChudW1iZXIt dG8tc3RyaW5nIGRoKQ0KCQkoYW5kICgvPSAwIGRtKSAoZm9ybWF0ICI6JTAyZCIgZG0pKSkpKSkp DQoNCihkZWZ1biBvcmctdGltZS1zdGFtcC1pbmFjdGl2ZSAoJm9wdGlvbmFsIGFyZykNCiAgIklu c2VydCBhbiBpbmFjdGl2ZSB0aW1lIHN0YW1wLg0KQW4gaW5hY3RpdmUgdGltZSBzdGFtcCBpcyBl bmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgaW5zdGVhZCBvZiBhbmdsZQ0KYnJhY2tldHMuICBJ dCBpcyBpbmFjdGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2VzIG5vdCB0cmlnZ2VyIGFnZW5k YSBlbnRyaWVzLA0KZG9lcyBub3QgbGluayB0byB0aGUgY2FsZW5kYXIgYW5kIGNhbm5vdCBiZSBj aGFuZ2VkIHdpdGggdGhlIFMtY3Vyc29yIGtleXMuDQpTbyB0aGVzZSBhcmUgbW9yZSBmb3IgcmVj b3JkaW5nIGEgY2VydGFpbiB0aW1lL2RhdGUuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAob3Jn LXRpbWUtc3RhbXAgYXJnICdpbmFjdGl2ZSkpDQoNCihkZWZ2YXIgb3JnLWRhdGUtb3ZsIChtYWtl LW92ZXJsYXkgMSAxKSkNCihvdmVybGF5LXB1dCBvcmctZGF0ZS1vdmwgJ2ZhY2UgJ29yZy1kYXRl LXNlbGVjdGVkKQ0KKG9yZy1kZXRhY2gtb3ZlcmxheSBvcmctZGF0ZS1vdmwpDQoNCihkZWZ2YXIg b3JnLWFuczEpIDsgZHluYW1pY2FsbHkgc2NvcGVkIHBhcmFtZXRlcg0KKGRlZnZhciBvcmctYW5z MikgOyBkeW5hbWljYWxseSBzY29wZWQgcGFyYW1ldGVyDQoNCihkZWZ2YXIgb3JnLXBsYWluLXRp bWUtb2YtZGF5LXJlZ2V4cCkgOyBkZWZpbmVkIGJlbG93DQoNCihkZWZ2YXIgb3JnLW92ZXJyaWRp bmctZGVmYXVsdC10aW1lIG5pbCkgOyBkeW5hbWljYWxseSBzY29wZWQNCihkZWZ2YXIgb3JnLXJl YWQtZGF0ZS1vdmVybGF5IG5pbCkNCihkZWZ2YXIgb3JnLWRjc3QgbmlsKSA7IGR5bmFtaWNhbGx5 IHNjb3BlZA0KKGRlZnZhciBvcmctcmVhZC1kYXRlLWhpc3RvcnkgbmlsKQ0KKGRlZnZhciBvcmct cmVhZC1kYXRlLWZpbmFsLWFuc3dlciBuaWwpDQooZGVmdmFyIG9yZy1yZWFkLWRhdGUtYW5hbHl6 ZS1mdXR1cmVwIG5pbCkNCihkZWZ2YXIgb3JnLXJlYWQtZGF0ZS1hbmFseXplLWZvcmNlZC15ZWFy IG5pbCkNCihkZWZ2YXIgb3JnLXJlYWQtZGF0ZS1pbmFjdGl2ZSkNCg0KKGRlZnZhciBvcmctcmVh ZC1kYXRlLW1pbmlidWZmZXItbG9jYWwtbWFwDQogIChsZXQqICgob3JnLXJlcGxhY2UtZGlzcHV0 ZWQta2V5cyBuaWwpDQoJIChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpKQ0KICAgIChzZXQta2V5 bWFwLXBhcmVudCBtYXAgbWluaWJ1ZmZlci1sb2NhbC1tYXApDQogICAgKG9yZy1kZWZrZXkgbWFw IChrYmQgIi4iKQ0KICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGludGVyYWN0aXZlKQ0KCQkg IDs7IEFyZSB3ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcm9tcHQ/DQoJCSAgKGlmIChsb29r aW5nLWJhY2sgIl5bXjpdKzogIikNCgkJICAgICAgKG9yZy1ldmFsLWluLWNhbGVuZGFyICcoY2Fs ZW5kYXItZ290by10b2RheSkpDQoJCSAgICAoaW5zZXJ0ICIuIikpKSkNCiAgICAob3JnLWRlZmtl eSBtYXAgKGtiZCAiQy0uIikNCiAgICAgICAgICAgICAgICAobGFtYmRhICgpIChpbnRlcmFjdGl2 ZSkNCgkJICAob3JnLWV2YWwtaW4tY2FsZW5kYXIgJyhjYWxlbmRhci1nb3RvLXRvZGF5KSkpKQ0K ICAgIChvcmctZGVma2V5IG1hcCBbKG1ldGEgc2hpZnQgbGVmdCldDQogICAgICAgICAgICAgICAg KGxhbWJkYSAoKSAoaW50ZXJhY3RpdmUpDQogICAgICAgICAgICAgICAgICAob3JnLWV2YWwtaW4t Y2FsZW5kYXIgJyhjYWxlbmRhci1iYWNrd2FyZC1tb250aCAxKSkpKQ0KICAgIChvcmctZGVma2V5 IG1hcCBbKG1ldGEgc2hpZnQgcmlnaHQpXQ0KICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGlu dGVyYWN0aXZlKQ0KICAgICAgICAgICAgICAgICAgKG9yZy1ldmFsLWluLWNhbGVuZGFyICcoY2Fs ZW5kYXItZm9yd2FyZC1tb250aCAxKSkpKQ0KICAgIChvcmctZGVma2V5IG1hcCBbKG1ldGEgc2hp ZnQgdXApXQ0KICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGludGVyYWN0aXZlKQ0KICAgICAg ICAgICAgICAgICAgKG9yZy1ldmFsLWluLWNhbGVuZGFyICcoY2FsZW5kYXItYmFja3dhcmQteWVh ciAxKSkpKQ0KICAgIChvcmctZGVma2V5IG1hcCBbKG1ldGEgc2hpZnQgZG93bildDQogICAgICAg ICAgICAgICAgKGxhbWJkYSAoKSAoaW50ZXJhY3RpdmUpDQogICAgICAgICAgICAgICAgICAob3Jn LWV2YWwtaW4tY2FsZW5kYXIgJyhjYWxlbmRhci1mb3J3YXJkLXllYXIgMSkpKSkNCiAgICAob3Jn LWRlZmtleSBtYXAgWz9cZSAoc2hpZnQgbGVmdCldDQogICAgICAgICAgICAgICAgKGxhbWJkYSAo KSAoaW50ZXJhY3RpdmUpDQogICAgICAgICAgICAgICAgICAob3JnLWV2YWwtaW4tY2FsZW5kYXIg JyhjYWxlbmRhci1iYWNrd2FyZC1tb250aCAxKSkpKQ0KICAgIChvcmctZGVma2V5IG1hcCBbP1xl IChzaGlmdCByaWdodCldDQogICAgICAgICAgICAgICAgKGxhbWJkYSAoKSAoaW50ZXJhY3RpdmUp DQogICAgICAgICAgICAgICAgICAob3JnLWV2YWwtaW4tY2FsZW5kYXIgJyhjYWxlbmRhci1mb3J3 YXJkLW1vbnRoIDEpKSkpDQogICAgKG9yZy1kZWZrZXkgbWFwIFs/XGUgKHNoaWZ0IHVwKV0NCiAg ICAgICAgICAgICAgICAobGFtYmRhICgpIChpbnRlcmFjdGl2ZSkNCiAgICAgICAgICAgICAgICAg IChvcmctZXZhbC1pbi1jYWxlbmRhciAnKGNhbGVuZGFyLWJhY2t3YXJkLXllYXIgMSkpKSkNCiAg ICAob3JnLWRlZmtleSBtYXAgWz9cZSAoc2hpZnQgZG93bildDQogICAgICAgICAgICAgICAgKGxh bWJkYSAoKSAoaW50ZXJhY3RpdmUpDQogICAgICAgICAgICAgICAgICAob3JnLWV2YWwtaW4tY2Fs ZW5kYXIgJyhjYWxlbmRhci1mb3J3YXJkLXllYXIgMSkpKSkNCiAgICAob3JnLWRlZmtleSBtYXAg WyhzaGlmdCB1cCldDQogICAgICAgICAgICAgICAgKGxhbWJkYSAoKSAoaW50ZXJhY3RpdmUpDQog ICAgICAgICAgICAgICAgICAob3JnLWV2YWwtaW4tY2FsZW5kYXIgJyhjYWxlbmRhci1iYWNrd2Fy ZC13ZWVrIDEpKSkpDQogICAgKG9yZy1kZWZrZXkgbWFwIFsoc2hpZnQgZG93bildDQogICAgICAg ICAgICAgICAgKGxhbWJkYSAoKSAoaW50ZXJhY3RpdmUpDQogICAgICAgICAgICAgICAgICAob3Jn LWV2YWwtaW4tY2FsZW5kYXIgJyhjYWxlbmRhci1mb3J3YXJkLXdlZWsgMSkpKSkNCiAgICAob3Jn LWRlZmtleSBtYXAgWyhzaGlmdCBsZWZ0KV0NCiAgICAgICAgICAgICAgICAobGFtYmRhICgpIChp bnRlcmFjdGl2ZSkNCiAgICAgICAgICAgICAgICAgIChvcmctZXZhbC1pbi1jYWxlbmRhciAnKGNh bGVuZGFyLWJhY2t3YXJkLWRheSAxKSkpKQ0KICAgIChvcmctZGVma2V5IG1hcCBbKHNoaWZ0IHJp Z2h0KV0NCiAgICAgICAgICAgICAgICAobGFtYmRhICgpIChpbnRlcmFjdGl2ZSkNCiAgICAgICAg ICAgICAgICAgIChvcmctZXZhbC1pbi1jYWxlbmRhciAnKGNhbGVuZGFyLWZvcndhcmQtZGF5IDEp KSkpDQogICAgKG9yZy1kZWZrZXkgbWFwICIhIg0KICAgICAgICAgICAgICAgIChsYW1iZGEgKCkg KGludGVyYWN0aXZlKQ0KICAgICAgICAgICAgICAgICAgKG9yZy1ldmFsLWluLWNhbGVuZGFyICco ZGlhcnktdmlldy1lbnRyaWVzKSkNCiAgICAgICAgICAgICAgICAgIChtZXNzYWdlICIiKSkpDQog ICAgKG9yZy1kZWZrZXkgbWFwICI+Ig0KICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGludGVy YWN0aXZlKQ0KICAgICAgICAgICAgICAgICAgKG9yZy1ldmFsLWluLWNhbGVuZGFyICcoc2Nyb2xs LWNhbGVuZGFyLWxlZnQgMSkpKSkNCiAgICAob3JnLWRlZmtleSBtYXAgIjwiDQogICAgICAgICAg ICAgICAgKGxhbWJkYSAoKSAoaW50ZXJhY3RpdmUpDQogICAgICAgICAgICAgICAgICAob3JnLWV2 YWwtaW4tY2FsZW5kYXIgJyhzY3JvbGwtY2FsZW5kYXItcmlnaHQgMSkpKSkNCiAgICAob3JnLWRl ZmtleSBtYXAgIlxDLXYiDQogICAgICAgICAgICAgICAgKGxhbWJkYSAoKSAoaW50ZXJhY3RpdmUp DQogICAgICAgICAgICAgICAgICAob3JnLWV2YWwtaW4tY2FsZW5kYXINCiAgICAgICAgICAgICAg ICAgICAnKGNhbGVuZGFyLXNjcm9sbC1sZWZ0LXRocmVlLW1vbnRocyAxKSkpKQ0KICAgIChvcmct ZGVma2V5IG1hcCAiXE0tdiINCiAgICAgICAgICAgICAgICAobGFtYmRhICgpIChpbnRlcmFjdGl2 ZSkNCiAgICAgICAgICAgICAgICAgIChvcmctZXZhbC1pbi1jYWxlbmRhcg0KICAgICAgICAgICAg ICAgICAgICcoY2FsZW5kYXItc2Nyb2xsLXJpZ2h0LXRocmVlLW1vbnRocyAxKSkpKQ0KICAgIG1h cCkNCiAgIktleW1hcCBmb3IgbWluaWJ1ZmZlciBjb21tYW5kcyB3aGVuIHVzaW5nIGBvcmctcmVh ZC1kYXRlJy4iKQ0KDQooZGVmdmFyIG9yZy1kZWYpDQooZGVmdmFyIG9yZy1kZWZkZWNvZGUpDQoo ZGVmdmFyIG9yZy13aXRoLXRpbWUpDQoNCihkZWZ1biBvcmctcmVhZC1kYXRlICgmb3B0aW9uYWwg b3JnLXdpdGgtdGltZSB0by10aW1lIGZyb20tc3RyaW5nIHByb21wdA0KCQkJCWRlZmF1bHQtdGlt ZSBkZWZhdWx0LWlucHV0IGluYWN0aXZlKQ0KICAiUmVhZCBhIGRhdGUsIHBvc3NpYmx5IGEgdGlt ZSwgYW5kIG1ha2UgdGhpbmdzIHNtb290aCBmb3IgdGhlIHVzZXIuDQpUaGUgcHJvbXB0IHdpbGwg c3VnZ2VzdCB0byBlbnRlciBhbiBJU08gZGF0ZSwgYnV0IHlvdSBjYW4gYWxzbyBlbnRlciBhbnl0 aGluZw0Kd2hpY2ggd2lsbCBhdCBsZWFzdCBwYXJ0aWFsbHkgYmUgdW5kZXJzdG9vZCBieSBgcGFy c2UtdGltZS1zdHJpbmcnLg0KVW5yZWNvZ25pemVkIHBhcnRzIG9mIHRoZSBkYXRlIHdpbGwgZGVm YXVsdCB0byB0aGUgY3VycmVudCBkYXksIG1vbnRoLCB5ZWFyLA0KaG91ciBhbmQgbWludXRlLiAg SWYgdGhpcyBjb21tYW5kIGlzIGNhbGxlZCB0byByZXBsYWNlIGEgdGltZXN0YW1wIGF0IHBvaW50 LA0Kb3IgdG8gZW50ZXIgdGhlIHNlY29uZCB0aW1lc3RhbXAgb2YgYSByYW5nZSwgdGhlIGRlZmF1 bHQgdGltZSBpcyB0YWtlbg0KZnJvbSB0aGUgZXhpc3Rpbmcgc3RhbXAuICBGdXJ0aGVybW9yZSwg dGhlIGNvbW1hbmQgcHJlZmVycyB0aGUgZnV0dXJlLA0Kc28gaWYgeW91IGFyZSBnaXZpbmcgYSBk YXRlIHdoZXJlIHRoZSB5ZWFyIGlzIG5vdCBnaXZlbiwgYW5kIHRoZSBkYXktbW9udGgNCmNvbWJp bmF0aW9uIGlzIGFscmVhZHkgcGFzdCBpbiB0aGUgY3VycmVudCB5ZWFyLCBpdCB3aWxsIGFzc3Vt ZSB5b3UNCm1lYW4gbmV4dCB5ZWFyLiAgRm9yIGRldGFpbHMsIHNlZSB0aGUgbWFudWFsLiAgQSBm ZXcgZXhhbXBsZXM6DQoNCiAgMy0yLTUgICAgICAgICAtLT4gMjAwMy0wMi0wNQ0KICBmZWIgMTUg ICAgICAgIC0tPiBjdXJyZW50eWVhci0wMi0xNQ0KICAyLzE1ICAgICAgICAgIC0tPiBjdXJyZW50 eWVhci0wMi0xNQ0KICBzZXAgMTIgOSAgICAgIC0tPiAyMDA5LTA5LTEyDQogIDEyOjQ1ICAgICAg ICAgLS0+IHRvZGF5IDEyOjQ1DQogIDIyIHNlcHQgMDozNCAgLS0+IGN1cnJlbnR5ZWFyLTA5LTIy IDA6MzQNCiAgMTIgICAgICAgICAgICAtLT4gY3VycmVudHllYXItY3VycmVudG1vbnRoLTEyDQog IEZyaSAgICAgICAgICAgLS0+IG5lYXJlc3QgRnJpZGF5IGFmdGVyIHRvZGF5DQogIC1UdWUgICAg ICAgICAgLS0+IGxhc3QgVHVlc2RheQ0KICBldGMuDQoNCkZ1cnRoZXJtb3JlIHlvdSBjYW4gc3Bl Y2lmeSBhIHJlbGF0aXZlIGRhdGUgYnkgZ2l2aW5nLCBhcyB0aGUgKmZpcnN0KiB0aGluZw0KaW4g dGhlIGlucHV0OiAgYSBwbHVzL21pbnVzIHNpZ24sIGEgbnVtYmVyIGFuZCBhIGxldHRlciBbaGR3 bXldIHRvIGluZGljYXRlDQpjaGFuZ2UgaW4gZGF5cyB3ZWVrcywgbW9udGhzLCB5ZWFycy4NCldp dGggYSBzaW5nbGUgcGx1cyBvciBtaW51cywgdGhlIGRhdGUgaXMgcmVsYXRpdmUgdG8gdG9kYXku ICBXaXRoIGEgZG91YmxlDQpwbHVzIG9yIG1pbnVzLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgZGF0 ZSBpbiBERUZBVUxULVRJTUUuICBFLmcuDQogICs0ZCAgICAgICAgICAgLS0+IGZvdXIgZGF5cyBm cm9tIHRvZGF5DQogICs0ICAgICAgICAgICAgLS0+IHNhbWUgYXMgYWJvdmUNCiAgKzJ3ICAgICAg ICAgICAtLT4gdHdvIHdlZWtzIGZyb20gdG9kYXkNCiAgKys1ICAgICAgICAgICAtLT4gZml2ZSBk YXlzIGZyb20gZGVmYXVsdCBkYXRlDQoNClRoZSBmdW5jdGlvbiB1bmRlcnN0YW5kcyBvbmx5IEVu Z2xpc2ggbW9udGggYW5kIHdlZWtkYXkgYWJicmV2aWF0aW9ucy4NCg0KV2hpbGUgcHJvbXB0aW5n LCBhIGNhbGVuZGFyIGlzIHBvcHBlZCB1cCAtIHlvdSBjYW4gYWxzbyBzZWxlY3QgdGhlDQpkYXRl IHdpdGggdGhlIG1vdXNlIChidXR0b24gMSkuICBUaGUgY2FsZW5kYXIgc2hvd3MgYSBwZXJpb2Qg b2YgdGhyZWUNCm1vbnRocy4gIFRvIHNjcm9sbCBpdCB0byBvdGhlciBtb250aHMsIHVzZSB0aGUg a2V5cyBgPicgYW5kIGA8Jy4NCklmIHlvdSBkb24ndCBsaWtlIHRoZSBjYWxlbmRhciwgdHVybiBp dCBvZmYgd2l0aA0KICAgICAgIFwoc2V0cSBvcmctcmVhZC1kYXRlLXBvcHVwLWNhbGVuZGFyIG5p bCkNCg0KV2l0aCBvcHRpb25hbCBhcmd1bWVudCBUTy1USU1FLCB0aGUgZGF0ZSB3aWxsIGltbWVk aWF0ZWx5IGJlIGNvbnZlcnRlZA0KdG8gYW4gaW50ZXJuYWwgdGltZS4NCldpdGggYW4gb3B0aW9u YWwgYXJndW1lbnQgT1JHLVdJVEgtVElNRSwgdGhlIHByb21wdCB3aWxsIHN1Z2dlc3QgdG8NCmFs c28gaW5zZXJ0IGEgdGltZS4gIE5vdGUgdGhhdCB3aGVuIE9SRy1XSVRILVRJTUUgaXMgbm90IHNl dCwgeW91IGNhbg0Kc3RpbGwgZW50ZXIgYSB0aW1lLCBhbmQgdGhpcyBmdW5jdGlvbiB3aWxsIGlu Zm9ybSB0aGUgY2FsbGluZyByb3V0aW5lDQphYm91dCB0aGlzIGNoYW5nZS4gIFRoZSBjYWxsaW5n IHJvdXRpbmUgbWF5IHRoZW4gY2hvb3NlIHRvIGNoYW5nZSB0aGUNCmZvcm1hdCB1c2VkIHRvIGlu c2VydCB0aGUgdGltZSBzdGFtcCBpbnRvIHRoZSBidWZmZXIgdG8gaW5jbHVkZSB0aGUgdGltZS4N CldpdGggb3B0aW9uYWwgYXJndW1lbnQgRlJPTS1TVFJJTkcsIHJlYWQgZnJvbSB0aGlzIHN0cmlu ZyBpbnN0ZWFkIGZyb20NCnRoZSB1c2VyLiAgUFJPTVBUIGNhbiBvdmVyd3JpdGUgdGhlIGRlZmF1 bHQgcHJvbXB0LiAgREVGQVVMVC1USU1FIGlzDQp0aGUgdGltZS9kYXRlIHRoYXQgaXMgdXNlZCBm b3IgZXZlcnl0aGluZyB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlDQp1c2VyLiINCiAgKHJl cXVpcmUgJ3BhcnNlLXRpbWUpDQogIChsZXQqICgob3JnLXRpbWUtc3RhbXAtcm91bmRpbmctbWlu dXRlcw0KCSAgKGlmIChlcXVhbCBvcmctd2l0aC10aW1lICcoMTYpKSAnKDAgMCkgb3JnLXRpbWUt c3RhbXAtcm91bmRpbmctbWludXRlcykpDQoJIChvcmctZGNzdCBvcmctZGlzcGxheS1jdXN0b20t dGltZXMpDQoJIChjdCAob3JnLWN1cnJlbnQtdGltZSkpDQoJIChvcmctZGVmIChvciBvcmctb3Zl cnJpZGluZy1kZWZhdWx0LXRpbWUgZGVmYXVsdC10aW1lIGN0KSkNCgkgKG9yZy1kZWZkZWNvZGUg KGRlY29kZS10aW1lIG9yZy1kZWYpKQ0KCSAoZHVtbXkgKHByb2duDQoJCSAgKHdoZW4gKDwgKG50 aCAyIG9yZy1kZWZkZWNvZGUpIG9yZy1leHRlbmQtdG9kYXktdW50aWwpDQoJCSAgICAoc2V0Y2Fy IChudGhjZHIgMiBvcmctZGVmZGVjb2RlKSAtMSkNCgkJICAgIChzZXRjYXIgKG50aGNkciAxIG9y Zy1kZWZkZWNvZGUpIDU5KQ0KCQkgICAgKHNldHEgb3JnLWRlZiAoYXBwbHkgJ2VuY29kZS10aW1l IG9yZy1kZWZkZWNvZGUpDQoJCQkgIG9yZy1kZWZkZWNvZGUgKGRlY29kZS10aW1lIG9yZy1kZWYp KSkpKQ0KCSAobW91c2UtYXV0b3NlbGVjdC13aW5kb3cgbmlsKSA7IERvbid0IGxldCB0aGUgbW91 c2UganVtcA0KCSAoY2FsZW5kYXItZnJhbWUtc2V0dXAgbmlsKQ0KCSAoY2FsZW5kYXItc2V0dXAg bmlsKQ0KCSAoY2FsZW5kYXItbW92ZS1ob29rIG5pbCkNCgkgKGNhbGVuZGFyLXZpZXctZGlhcnkt aW5pdGlhbGx5LWZsYWcgbmlsKQ0KCSAoY2FsZW5kYXItdmlldy1ob2xpZGF5cy1pbml0aWFsbHkt ZmxhZyBuaWwpDQoJICh0aW1lc3RyIChmb3JtYXQtdGltZS1zdHJpbmcNCgkJICAgKGlmIG9yZy13 aXRoLXRpbWUgIiVZLSVtLSVkICVIOiVNIiAiJVktJW0tJWQiKSBvcmctZGVmKSkNCgkgKHByb21w dCAoY29uY2F0IChpZiBwcm9tcHQgKGNvbmNhdCBwcm9tcHQgIiAiKSAiIikNCgkJCSAoZm9ybWF0 ICJEYXRlK3RpbWUgWyVzXTogIiB0aW1lc3RyKSkpDQoJIGFucyAob3JnLWFuczAgIiIpIG9yZy1h bnMxIG9yZy1hbnMyIGZpbmFsKQ0KDQogICAgKGNvbmQNCiAgICAgKGZyb20tc3RyaW5nIChzZXRx IGFucyBmcm9tLXN0cmluZykpDQogICAgIChvcmctcmVhZC1kYXRlLXBvcHVwLWNhbGVuZGFyDQog ICAgICAoc2F2ZS1leGN1cnNpb24NCgkoc2F2ZS13aW5kb3ctZXhjdXJzaW9uDQoJICAoY2FsZW5k YXIpDQoJICAob3JnLWV2YWwtaW4tY2FsZW5kYXIgJyhzZXRxIGN1cnNvci10eXBlIG5pbCkgdCkN CiAgICAgICAgICAodW53aW5kLXByb3RlY3QNCiAgICAgICAgICAgICAgKHByb2duDQoJCShjYWxl bmRhci1mb3J3YXJkLWRheSAoLSAodGltZS10by1kYXlzIG9yZy1kZWYpDQoJCQkJCSAoY2FsZW5k YXItYWJzb2x1dGUtZnJvbS1ncmVnb3JpYW4NCgkJCQkJICAoY2FsZW5kYXItY3VycmVudC1kYXRl KSkpKQ0KCQkob3JnLWV2YWwtaW4tY2FsZW5kYXIgbmlsIHQpDQoJCShsZXQqICgob2xkLW1hcCAo Y3VycmVudC1sb2NhbC1tYXApKQ0KCQkgICAgICAgKG1hcCAoY29weS1rZXltYXAgY2FsZW5kYXIt bW9kZS1tYXApKQ0KCQkgICAgICAgKG1pbmlidWZmZXItbG9jYWwtbWFwDQoJCQkoY29weS1rZXlt YXAgb3JnLXJlYWQtZGF0ZS1taW5pYnVmZmVyLWxvY2FsLW1hcCkpKQ0KCQkgIChvcmctZGVma2V5 IG1hcCAoa2JkICJSRVQiKSAnb3JnLWNhbGVuZGFyLXNlbGVjdCkNCgkJICAob3JnLWRlZmtleSBt YXAgW21vdXNlLTFdICdvcmctY2FsZW5kYXItc2VsZWN0LW1vdXNlKQ0KCQkgIChvcmctZGVma2V5 IG1hcCBbbW91c2UtMl0gJ29yZy1jYWxlbmRhci1zZWxlY3QtbW91c2UpDQoJCSAgKHVud2luZC1w cm90ZWN0DQoJCSAgICAgIChwcm9nbg0KCQkJKHVzZS1sb2NhbC1tYXAgbWFwKQ0KCQkJKHNldHEg b3JnLXJlYWQtZGF0ZS1pbmFjdGl2ZSBpbmFjdGl2ZSkNCgkJCShhZGQtaG9vayAncG9zdC1jb21t YW5kLWhvb2sgJ29yZy1yZWFkLWRhdGUtZGlzcGxheSkNCgkJCShzZXRxIG9yZy1hbnMwIChyZWFk LXN0cmluZyBwcm9tcHQgZGVmYXVsdC1pbnB1dA0KCQkJCQkJICAgICdvcmctcmVhZC1kYXRlLWhp c3RvcnkgbmlsKSkNCgkJCTs7IG9yZy1hbnMwOiBmcm9tIHByb21wdA0KCQkJOzsgb3JnLWFuczE6 IGZyb20gbW91c2UgY2xpY2sNCgkJCTs7IG9yZy1hbnMyOiBmcm9tIGNhbGVuZGFyIG1vdGlvbg0K CQkJKHNldHEgYW5zIChjb25jYXQgb3JnLWFuczAgIiAiIChvciBvcmctYW5zMSBvcmctYW5zMikp KSkNCgkJICAgIChyZW1vdmUtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgJ29yZy1yZWFkLWRhdGUt ZGlzcGxheSkNCgkJICAgICh1c2UtbG9jYWwtbWFwIG9sZC1tYXApDQoJCSAgICAod2hlbiBvcmct cmVhZC1kYXRlLW92ZXJsYXkNCgkJICAgICAgKGRlbGV0ZS1vdmVybGF5IG9yZy1yZWFkLWRhdGUt b3ZlcmxheSkNCiAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBvcmctcmVhZC1kYXRlLW92ZXJs YXkgbmlsKSkpKSkNCgkgICAgKGJ1cnktYnVmZmVyICIqQ2FsZW5kYXIqIikpKSkpDQoNCiAgICAg KHQgOyBOYWtlZCBwcm9tcHQgb25seQ0KICAgICAgKHVud2luZC1wcm90ZWN0DQoJICAoc2V0cSBh bnMgKHJlYWQtc3RyaW5nIHByb21wdCBkZWZhdWx0LWlucHV0DQoJCQkJICdvcmctcmVhZC1kYXRl LWhpc3RvcnkgdGltZXN0cikpDQoJKHdoZW4gb3JnLXJlYWQtZGF0ZS1vdmVybGF5DQoJICAoZGVs ZXRlLW92ZXJsYXkgb3JnLXJlYWQtZGF0ZS1vdmVybGF5KQ0KCSAgKHNldHEgb3JnLXJlYWQtZGF0 ZS1vdmVybGF5IG5pbCkpKSkpDQoNCiAgICAoc2V0cSBmaW5hbCAob3JnLXJlYWQtZGF0ZS1hbmFs eXplIGFucyBvcmctZGVmIG9yZy1kZWZkZWNvZGUpKQ0KDQogICAgKHdoZW4gb3JnLXJlYWQtZGF0 ZS1hbmFseXplLWZvcmNlZC15ZWFyDQogICAgICAobWVzc2FnZSAiWWVhciB3YXMgZm9yY2VkIGlu dG8gJXMiDQoJICAgICAgIChpZiBvcmctcmVhZC1kYXRlLWZvcmNlLWNvbXBhdGlibGUtZGF0ZXMN CgkJICAgImNvbXBhdGlibGUgcmFuZ2UgKDE5NzAtMjAzNykiDQoJCSAicmFuZ2UgcmVwcmVzZW50 YWJsZSBvbiB0aGlzIG1hY2hpbmUiKSkNCiAgICAgIChkaW5nKSkNCg0KICAgIDs7IE9uZSByb3Vu ZCB0cmlwIHRvIGdldCByaWQgb2YgMzR0aCBvZiBBdWd1c3QgYW5kIHN0dWZmIGxpa2UgdGhhdC4u Li4NCiAgICAoc2V0cSBmaW5hbCAoZGVjb2RlLXRpbWUgKGFwcGx5ICdlbmNvZGUtdGltZSBmaW5h bCkpKQ0KDQogICAgKHNldHEgb3JnLXJlYWQtZGF0ZS1maW5hbC1hbnN3ZXIgYW5zKQ0KDQogICAg KGlmIHRvLXRpbWUNCgkoYXBwbHkgJ2VuY29kZS10aW1lIGZpbmFsKQ0KICAgICAgKGlmIChhbmQg KGJvdW5kcCAnb3JnLXRpbWUtd2FzLWdpdmVuKSBvcmctdGltZS13YXMtZ2l2ZW4pDQoJICAoZm9y bWF0ICIlMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQiDQoJCSAgKG50aCA1IGZpbmFsKSAobnRoIDQg ZmluYWwpIChudGggMyBmaW5hbCkNCgkJICAobnRoIDIgZmluYWwpIChudGggMSBmaW5hbCkpDQoJ KGZvcm1hdCAiJTA0ZC0lMDJkLSUwMmQiIChudGggNSBmaW5hbCkgKG50aCA0IGZpbmFsKSAobnRo IDMgZmluYWwpKSkpKSkNCg0KKGRlZnVuIG9yZy1yZWFkLWRhdGUtZGlzcGxheSAoKQ0KICAiRGlz cGxheSB0aGUgY3VycmVudCBkYXRlIHByb21wdCBpbnRlcnByZXRhdGlvbiBpbiB0aGUgbWluaWJ1 ZmZlci4iDQogICh3aGVuIG9yZy1yZWFkLWRhdGUtZGlzcGxheS1saXZlDQogICAgKHdoZW4gb3Jn LXJlYWQtZGF0ZS1vdmVybGF5DQogICAgICAoZGVsZXRlLW92ZXJsYXkgb3JnLXJlYWQtZGF0ZS1v dmVybGF5KSkNCiAgICAod2hlbiAobWluaWJ1ZmZlcnAgKGN1cnJlbnQtYnVmZmVyKSkNCiAgICAg IChzYXZlLWV4Y3Vyc2lvbg0KCShlbmQtb2YtbGluZSAxKQ0KCSh3aGlsZSAobm90IChlcXVhbCAo YnVmZmVyLXN1YnN0cmluZw0KCQkJICAgIChtYXggKHBvaW50LW1pbikgKC0gKHBvaW50KSA0KSkg KHBvaW50KSkNCgkJCSAgICIgICAgIikpDQoJICAoaW5zZXJ0ICIgIikpKQ0KICAgICAgKGxldCog KChhbnMgKGNvbmNhdCAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQtYXQtYm9sKSAocG9pbnQtbWF4 KSkNCgkJCSAgIiAiIChvciBvcmctYW5zMSBvcmctYW5zMikpKQ0KCSAgICAgKG9yZy1lbmQtdGlt ZS13YXMtZ2l2ZW4gbmlsKQ0KCSAgICAgKGYgKG9yZy1yZWFkLWRhdGUtYW5hbHl6ZSBhbnMgb3Jn LWRlZiBvcmctZGVmZGVjb2RlKSkNCgkgICAgIChmbXRzIChpZiBvcmctZGNzdA0KCQkgICAgICAg b3JnLXRpbWUtc3RhbXAtY3VzdG9tLWZvcm1hdHMNCgkJICAgICBvcmctdGltZS1zdGFtcC1mb3Jt YXRzKSkNCgkgICAgIChmbXQgKGlmIChvciBvcmctd2l0aC10aW1lDQoJCQkgIChhbmQgKGJvdW5k cCAnb3JnLXRpbWUtd2FzLWdpdmVuKSBvcmctdGltZS13YXMtZ2l2ZW4pKQ0KCQkgICAgICAoY2Ry IGZtdHMpDQoJCSAgICAoY2FyIGZtdHMpKSkNCgkgICAgICh0eHQgKGZvcm1hdC10aW1lLXN0cmlu ZyBmbXQgKGFwcGx5ICdlbmNvZGUtdGltZSBmKSkpDQoJICAgICAodHh0IChpZiBvcmctcmVhZC1k YXRlLWluYWN0aXZlIChjb25jYXQgIlsiIChzdWJzdHJpbmcgdHh0IDEgLTEpICJdIikgdHh0KSkN CgkgICAgICh0eHQgKGNvbmNhdCAiPT4gIiB0eHQpKSkNCgkod2hlbiAoYW5kIG9yZy1lbmQtdGlt ZS13YXMtZ2l2ZW4NCgkJICAgKHN0cmluZy1tYXRjaCBvcmctcGxhaW4tdGltZS1vZi1kYXktcmVn ZXhwIHR4dCkpDQoJICAoc2V0cSB0eHQgKGNvbmNhdCAoc3Vic3RyaW5nIHR4dCAwIChtYXRjaC1l bmQgMCkpICItIg0KCQkJICAgIG9yZy1lbmQtdGltZS13YXMtZ2l2ZW4NCgkJCSAgICAoc3Vic3Ry aW5nIHR4dCAobWF0Y2gtZW5kIDApKSkpKQ0KCSh3aGVuIG9yZy1yZWFkLWRhdGUtYW5hbHl6ZS1m dXR1cmVwDQoJICAoc2V0cSB0eHQgKGNvbmNhdCB0eHQgIiAoPT5GKSIpKSkNCgkoc2V0cSBvcmct cmVhZC1kYXRlLW92ZXJsYXkNCgkgICAgICAobWFrZS1vdmVybGF5ICgxLSAocG9pbnQtYXQtZW9s KSkgKHBvaW50LWF0LWVvbCkpKQ0KCShvcmctb3ZlcmxheS1kaXNwbGF5IG9yZy1yZWFkLWRhdGUt b3ZlcmxheSB0eHQgJ3NlY29uZGFyeS1zZWxlY3Rpb24pKSkpKQ0KDQooZGVmdW4gb3JnLXJlYWQt ZGF0ZS1hbmFseXplIChhbnMgb3JnLWRlZiBvcmctZGVmZGVjb2RlKQ0KICAiQW5hbHl6ZSB0aGUg Y29tYmluZWQgYW5zd2VyIG9mIHRoZSBkYXRlIHByb21wdC4iDQogIDs7IEZJWE1FOiBjbGVhbnVw IGFuZCBjb21tZW50DQogIChsZXQgKChub3dkZWNvZGUgKGRlY29kZS10aW1lIChjdXJyZW50LXRp bWUpKSkNCglkZWx0YSBkZWx0YW4gZGVsdGF3IGRlbHRhZGVmIHllYXIgbW9udGggZGF5DQoJaG91 ciBtaW51dGUgc2Vjb25kIHdkYXkgcG0gaDIgbTIgdGwgd2RheTENCglpc28teWVhciBpc28td2Vl a2RheSBpc28td2VlayBpc28teWVhciBpc28tZGF0ZSBmdXR1cmVwIGtpbGwteWVhcikNCiAgICAo c2V0cSBvcmctcmVhZC1kYXRlLWFuYWx5emUtZnV0dXJlcCBuaWwNCgkgIG9yZy1yZWFkLWRhdGUt YW5hbHl6ZS1mb3JjZWQteWVhciBuaWwpDQogICAgKHdoZW4gKHN0cmluZy1tYXRjaCAiXFxgWyBc dF0qXFwuWyBcdF0qXFwnIiBhbnMpDQogICAgICAoc2V0cSBhbnMgIiswIikpDQoNCiAgICAod2hl biAoc2V0cSBkZWx0YSAob3JnLXJlYWQtZGF0ZS1nZXQtcmVsYXRpdmUgYW5zIChjdXJyZW50LXRp bWUpIG9yZy1kZWYpKQ0KICAgICAgKHNldHEgYW5zIChyZXBsYWNlLW1hdGNoICIiIHQgdCBhbnMp DQoJICAgIGRlbHRhbiAoY2FyIGRlbHRhKQ0KCSAgICBkZWx0YXcgKG50aCAxIGRlbHRhKQ0KCSAg ICBkZWx0YWRlZiAobnRoIDIgZGVsdGEpKSkNCg0KICAgIDs7IENoZWNrIGlmIHRoZXJlIGlzIGFu IGlzbyB3ZWVrIGRhdGUgaW4gdGhlcmUuICBJZiB5ZXMsIHN0b3JlIHRoZQ0KICAgIDs7IGluZm8g YW5kIHBvc3Rwb25lIGludGVycHJldGluZyBpdCB1bnRpbCB0aGUgcmVzdCBvZiB0aGUgcGFyc2lu Zw0KICAgIDs7IGlzIGRvbmUuDQogICAgKHdoZW4gKHN0cmluZy1tYXRjaCAiXFw8XFwoPzpcXChb MC05XStcXCktXFwpP1t3V11cXChbMC05XVxcezEsMlxcfVxcKVxcKD86LVxcKFswLTZdXFwpXFwp P1xcKFsgXHRdXFx8JFxcKSIgYW5zKQ0KICAgICAgKHNldHEgaXNvLXllYXIgKGlmIChtYXRjaC1l bmQgMSkNCgkJCSAob3JnLXNtYWxsLXllYXItdG8teWVhcg0KCQkJICAoc3RyaW5nLXRvLW51bWJl ciAobWF0Y2gtc3RyaW5nIDEgYW5zKSkpKQ0KCSAgICBpc28td2Vla2RheSAoaWYgKG1hdGNoLWVu ZCAzKQ0KCQkJICAgIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMyBhbnMpKSkNCgkg ICAgaXNvLXdlZWsgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAyIGFucykpKQ0KICAg ICAgKHNldHEgYW5zIChyZXBsYWNlLW1hdGNoICIiIHQgdCBhbnMpKSkNCg0KICAgIDs7IEhlbHAg bWF0Y2hpbmcgSVNPIGRhdGVzIHdpdGggc2luZ2xlIGRpZ2l0IG1vbnRoIG9yIGRheSwgbGlrZSAy MDA2LTgtMTEuDQogICAgKHdoZW4gKHN0cmluZy1tYXRjaA0KCSAgICJeICpcXChcXChbMC05XStc XCktXFwpP1xcKFswLTFdP1swLTldXFwpLVxcKFswLTNdP1swLTldXFwpXFwoW14tMC05XVxcfCRc XCkiIGFucykNCiAgICAgIChzZXRxIHllYXIgKGlmIChtYXRjaC1lbmQgMikNCgkJICAgICAoc3Ry aW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDIgYW5zKSkNCgkJICAgKHByb2duIChzZXRxIGtp bGwteWVhciB0KQ0KCQkJICAoc3RyaW5nLXRvLW51bWJlciAoZm9ybWF0LXRpbWUtc3RyaW5nICIl WSIpKSkpDQoJICAgIG1vbnRoIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMyBhbnMp KQ0KCSAgICBkYXkgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyA0IGFucykpKQ0KICAg ICAgKGlmICg8IHllYXIgMTAwKSAoc2V0cSB5ZWFyICgrIDIwMDAgeWVhcikpKQ0KICAgICAgKHNl dHEgYW5zIChyZXBsYWNlLW1hdGNoIChmb3JtYXQgIiUwNGQtJTAyZC0lMDJkXFw1IiB5ZWFyIG1v bnRoIGRheSkNCgkJCSAgICAgICB0IG5pbCBhbnMpKSkNCg0KICAgIDs7IEhlbHAgbWF0Y2hpbmcg ZG90dGVkIGV1cm9wZWFuIGRhdGVzDQogICAgKHdoZW4gKHN0cmluZy1tYXRjaA0KCSAgICJeICpc XCgzWzAxXVxcfDA/WzEtOV1cXHxbMTJdWzAtOV1cXClcXC4gP1xcKDA/WzEtOV1cXHwxWzAxMl1c XClcXC5cXCggP1sxLTldWzAtOV1cXHszXFx9XFwpPyIgYW5zKQ0KICAgICAgKHNldHEgeWVhciAo aWYgKG1hdGNoLWVuZCAzKSAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDMgYW5zKSkN CgkJICAgKHNldHEga2lsbC15ZWFyIHQpDQoJCSAgIChzdHJpbmctdG8tbnVtYmVyIChmb3JtYXQt dGltZS1zdHJpbmcgIiVZIikpKQ0KCSAgICBkYXkgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0 cmluZyAxIGFucykpDQoJICAgIG1vbnRoIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcg MiBhbnMpKQ0KCSAgICBhbnMgKHJlcGxhY2UtbWF0Y2ggKGZvcm1hdCAiJTA0ZC0lMDJkLSUwMmQi IHllYXIgbW9udGggZGF5KQ0KCQkJICAgICAgIHQgbmlsIGFucykpKQ0KDQogICAgOzsgSGVscCBt YXRjaGluZyBhbWVyaWNhbiBkYXRlcywgbGlrZSA1LzMwIG9yIDUvMzAvNw0KICAgICh3aGVuIChz dHJpbmctbWF0Y2gNCgkgICAiXiAqXFwoMD9bMS05XVxcfDFbMDEyXVxcKS9cXCgwP1sxLTldXFx8 WzEyXVswLTldXFx8M1swMV1cXClcXCgvXFwoWzAtOV0rXFwpXFwpP1xcKFteLzAtOV1cXHwkXFwp IiBhbnMpDQogICAgICAoc2V0cSB5ZWFyIChpZiAobWF0Y2gtZW5kIDQpDQoJCSAgICAgKHN0cmlu Zy10by1udW1iZXIgKG1hdGNoLXN0cmluZyA0IGFucykpDQoJCSAgIChwcm9nbiAoc2V0cSBraWxs LXllYXIgdCkNCgkJCSAgKHN0cmluZy10by1udW1iZXIgKGZvcm1hdC10aW1lLXN0cmluZyAiJVki KSkpKQ0KCSAgICBtb250aCAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDEgYW5zKSkN CgkgICAgZGF5IChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMiBhbnMpKSkNCiAgICAg IChpZiAoPCB5ZWFyIDEwMCkgKHNldHEgeWVhciAoKyAyMDAwIHllYXIpKSkNCiAgICAgIChzZXRx IGFucyAocmVwbGFjZS1tYXRjaCAoZm9ybWF0ICIlMDRkLSUwMmQtJTAyZFxcNSIgeWVhciBtb250 aCBkYXkpDQoJCQkgICAgICAgdCBuaWwgYW5zKSkpDQogICAgOzsgSGVscCBtYXRjaGluZyBhbS9w bSB0aW1lcywgYmVjYXVzZSBgcGFyc2UtdGltZS1zdHJpbmcnIGRvZXMgbm90IGRvIHRoYXQuDQog ICAgOzsgSWYgdGhlcmUgaXMgYSB0aW1lIHdpdGggYW0vcG0sIGFuZCAqbm8qIHRpbWUgd2l0aG91 dCBpdCwgd2UgY29udmVydA0KICAgIDs7IHNvIHRoYXQgbWF0Y2hpbmcgd2lsbCBiZSBzdWNjZXNz ZnVsLg0KICAgIChsb29wIGZvciBpIGZyb20gMSB0byAyIGRvIDsgdHdpY2UsIGZvciBlbmQgdGlt ZSBhcyB3ZWxsDQoJICAod2hlbiAoYW5kIChub3QgKHN0cmluZy1tYXRjaCAiXFwoXFxgXFx8W14r XVxcKVswMTJdP1swLTldOlswLTldWzAtOV1cXChbIFx0XG5dXFx8JFxcKSIgYW5zKSkNCgkJICAg ICAoc3RyaW5nLW1hdGNoICJcXChbMDEyXT9bMC05XVxcKVxcKDpcXChbMC01XVswLTldXFwpXFwp P1xcKGFtXFx8QU1cXHxwbVxcfFBNXFwpXFw+IiBhbnMpKQ0KCSAgICAoc2V0cSBob3VyIChzdHJp bmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMSBhbnMpKQ0KCQkgIG1pbnV0ZSAoaWYgKG1hdGNo LWVuZCAzKQ0KCQkJICAgICAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDMgYW5zKSkN CgkJCSAgIDApDQoJCSAgcG0gKGVxdWFsID9wDQoJCQkgICAgKHN0cmluZy10by1jaGFyIChkb3du Y2FzZSAobWF0Y2gtc3RyaW5nIDQgYW5zKSkpKSkNCgkgICAgKGlmIChhbmQgKD0gaG91ciAxMikg KG5vdCBwbSkpDQoJCShzZXRxIGhvdXIgMCkNCgkgICAgICAoaWYgKGFuZCBwbSAoPCBob3VyIDEy KSkgKHNldHEgaG91ciAoKyAxMiBob3VyKSkpKQ0KCSAgICAoc2V0cSBhbnMgKHJlcGxhY2UtbWF0 Y2ggKGZvcm1hdCAiJTAyZDolMDJkIiBob3VyIG1pbnV0ZSkNCgkJCQkgICAgIHQgdCBhbnMpKSkp DQoNCiAgICA7OyBDaGVjayBpZiBhIHRpbWUgcmFuZ2UgaXMgZ2l2ZW4gYXMgYSBkdXJhdGlvbg0K ICAgICh3aGVuIChzdHJpbmctbWF0Y2ggIlxcKFswMTJdP1swLTldXFwpOlxcKFswLTZdWzAtOV1c XClcXCtcXChbMDEyXT9bMC05XVxcKVxcKDpcXChbMC01XVswLTldXFwpXFwpPyIgYW5zKQ0KICAg ICAgKHNldHEgaG91ciAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDEgYW5zKSkNCgkg ICAgaDIgKCsgaG91ciAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDMgYW5zKSkpDQoJ ICAgIG1pbnV0ZSAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDIgYW5zKSkNCgkgICAg bTIgKCsgbWludXRlIChpZiAobWF0Y2gtZW5kIDUpIChzdHJpbmctdG8tbnVtYmVyDQoJCQkJCSAg ICAobWF0Y2gtc3RyaW5nIDUgYW5zKSkwKSkpDQogICAgICAoaWYgKD49IG0yIDYwKSAoc2V0cSBo MiAoMSsgaDIpIG0yICgtIG0yIDYwKSkpDQogICAgICAoc2V0cSBhbnMgKHJlcGxhY2UtbWF0Y2gg KGZvcm1hdCAiJTAyZDolMDJkLSUwMmQ6JTAyZCIgaG91ciBtaW51dGUgaDIgbTIpDQoJCQkgICAg ICAgdCB0IGFucykpKQ0KDQogICAgOzsgQ2hlY2sgaWYgdGhlcmUgaXMgYSB0aW1lIHJhbmdlDQog ICAgKHdoZW4gKGJvdW5kcCAnb3JnLWVuZC10aW1lLXdhcy1naXZlbikNCiAgICAgIChzZXRxIG9y Zy10aW1lLXdhcy1naXZlbiBuaWwpDQogICAgICAod2hlbiAoYW5kIChzdHJpbmctbWF0Y2ggb3Jn LXBsYWluLXRpbWUtb2YtZGF5LXJlZ2V4cCBhbnMpDQoJCSAobWF0Y2gtZW5kIDgpKQ0KCShzZXRx IG9yZy1lbmQtdGltZS13YXMtZ2l2ZW4gKG1hdGNoLXN0cmluZyA4IGFucykpDQoJKHNldHEgYW5z IChjb25jYXQgKHN1YnN0cmluZyBhbnMgMCAobWF0Y2gtYmVnaW5uaW5nIDcpKQ0KCQkJICAoc3Vi c3RyaW5nIGFucyAobWF0Y2gtZW5kIDcpKSkpKSkNCg0KICAgIChzZXRxIHRsIChwYXJzZS10aW1l LXN0cmluZyBhbnMpDQoJICBkYXkgKG9yIChudGggMyB0bCkgKG50aCAzIG9yZy1kZWZkZWNvZGUp KQ0KCSAgbW9udGggKG9yIChudGggNCB0bCkNCgkJICAgIChpZiAoYW5kIG9yZy1yZWFkLWRhdGUt cHJlZmVyLWZ1dHVyZQ0KCQkJICAgICAobnRoIDMgdGwpICg8IChudGggMyB0bCkgKG50aCAzIG5v d2RlY29kZSkpKQ0KCQkJKHByb2cxICgxKyAobnRoIDQgbm93ZGVjb2RlKSkgKHNldHEgZnV0dXJl cCB0KSkNCgkJICAgICAgKG50aCA0IG9yZy1kZWZkZWNvZGUpKSkNCgkgIHllYXIgKG9yIChhbmQg KG5vdCBraWxsLXllYXIpIChudGggNSB0bCkpDQoJCSAgIChpZiAoYW5kIG9yZy1yZWFkLWRhdGUt cHJlZmVyLWZ1dHVyZQ0KCQkJICAgIChudGggNCB0bCkgKDwgKG50aCA0IHRsKSAobnRoIDQgbm93 ZGVjb2RlKSkpDQoJCSAgICAgICAocHJvZzEgKDErIChudGggNSBub3dkZWNvZGUpKSAoc2V0cSBm dXR1cmVwIHQpKQ0KCQkgICAgIChudGggNSBvcmctZGVmZGVjb2RlKSkpDQoJICBob3VyIChvciAo bnRoIDIgdGwpIChudGggMiBvcmctZGVmZGVjb2RlKSkNCgkgIG1pbnV0ZSAob3IgKG50aCAxIHRs KSAobnRoIDEgb3JnLWRlZmRlY29kZSkpDQoJICBzZWNvbmQgKG9yIChudGggMCB0bCkgMCkNCgkg IHdkYXkgKG50aCA2IHRsKSkNCg0KICAgICh3aGVuIChhbmQgKGVxIG9yZy1yZWFkLWRhdGUtcHJl ZmVyLWZ1dHVyZSAndGltZSkNCgkgICAgICAgKG5vdCAobnRoIDMgdGwpKSAobm90IChudGggNCB0 bCkpIChub3QgKG50aCA1IHRsKSkNCgkgICAgICAgKGVxdWFsIGRheSAobnRoIDMgbm93ZGVjb2Rl KSkNCgkgICAgICAgKGVxdWFsIG1vbnRoIChudGggNCBub3dkZWNvZGUpKQ0KCSAgICAgICAoZXF1 YWwgeWVhciAobnRoIDUgbm93ZGVjb2RlKSkNCgkgICAgICAgKG50aCAyIHRsKQ0KCSAgICAgICAo b3IgKDwgKG50aCAyIHRsKSAobnRoIDIgbm93ZGVjb2RlKSkNCgkJICAgKGFuZCAoPSAobnRoIDIg dGwpIChudGggMiBub3dkZWNvZGUpKQ0KCQkJKG50aCAxIHRsKQ0KCQkJKDwgKG50aCAxIHRsKSAo bnRoIDEgbm93ZGVjb2RlKSkpKSkNCiAgICAgIChzZXRxIGRheSAoMSsgZGF5KQ0KCSAgICBmdXR1 cmVwIHQpKQ0KDQogICAgOzsgU3BlY2lhbCBkYXRlIGRlZmluaXRpb25zIGJlbG93DQogICAgKGNv bmQNCiAgICAgKGlzby13ZWVrDQogICAgICA7OyBUaGVyZSB3YXMgYW4gaXNvIHdlZWsNCiAgICAg IChyZXF1aXJlICdjYWwtaXNvKQ0KICAgICAgKHNldHEgZnV0dXJlcCBuaWwpDQogICAgICAoc2V0 cSB5ZWFyIChvciBpc28teWVhciB5ZWFyKQ0KCSAgICBkYXkgKG9yIGlzby13ZWVrZGF5IHdkYXkg MSkNCgkgICAgd2RheSBuaWwgOyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdHJpZ2dlciBiZWxvdyBk b2VzIG5vdCBtYXRjaA0KCSAgICBpc28tZGF0ZSAoY2FsZW5kYXItZ3JlZ29yaWFuLWZyb20tYWJz b2x1dGUNCgkJICAgICAgKGNhbGVuZGFyLWFic29sdXRlLWZyb20taXNvDQoJCSAgICAgICAobGlz dCBpc28td2VlayBkYXkgeWVhcikpKSkNCgkJCQkJOyBGSVhNRTogIFNob3VsZCB3ZSBhbHNvIHB1 c2ggSVNPIHdlZWtzIGludG8gdGhlIGZ1dHVyZT8NCgkJCQkJOyAgICAgICh3aGVuIChhbmQgb3Jn LXJlYWQtZGF0ZS1wcmVmZXItZnV0dXJlDQoJCQkJCTsJCSAobm90IGlzby15ZWFyKQ0KCQkJCQk7 CQkgKDwgKGNhbGVuZGFyLWFic29sdXRlLWZyb20tZ3JlZ29yaWFuIGlzby1kYXRlKQ0KCQkJCQk7 CQkgICAgKHRpbWUtdG8tZGF5cyAoY3VycmVudC10aW1lKSkpKQ0KCQkJCQk7CShzZXRxIHllYXIg KDErIHllYXIpDQoJCQkJCTsJICAgICAgaXNvLWRhdGUgKGNhbGVuZGFyLWdyZWdvcmlhbi1mcm9t LWFic29sdXRlDQoJCQkJCTsJCQkoY2FsZW5kYXItYWJzb2x1dGUtZnJvbS1pc28NCgkJCQkJOwkJ CSAobGlzdCBpc28td2VlayBkYXkgeWVhcikpKSkpDQogICAgICAoc2V0cSBtb250aCAoY2FyIGlz by1kYXRlKQ0KCSAgICB5ZWFyIChudGggMiBpc28tZGF0ZSkNCgkgICAgZGF5IChudGggMSBpc28t ZGF0ZSkpKQ0KICAgICAoZGVsdGFuDQogICAgICAoc2V0cSBmdXR1cmVwIG5pbCkNCiAgICAgICh1 bmxlc3MgZGVsdGFkZWYNCgkobGV0ICgobm93IChkZWNvZGUtdGltZSAoY3VycmVudC10aW1lKSkp KQ0KCSAgKHNldHEgZGF5IChudGggMyBub3cpIG1vbnRoIChudGggNCBub3cpIHllYXIgKG50aCA1 IG5vdykpKSkNCiAgICAgIChjb25kICgobWVtYmVyIGRlbHRhdyAnKCJkIiAiIikpIChzZXRxIGRh eSAoKyBkYXkgZGVsdGFuKSkpDQoJICAgICgoZXF1YWwgZGVsdGF3ICJ3IikgKHNldHEgZGF5ICgr IGRheSAoKiA3IGRlbHRhbikpKSkNCgkgICAgKChlcXVhbCBkZWx0YXcgIm0iKSAoc2V0cSBtb250 aCAoKyBtb250aCBkZWx0YW4pKSkNCgkgICAgKChlcXVhbCBkZWx0YXcgInkiKSAoc2V0cSB5ZWFy ICgrIHllYXIgZGVsdGFuKSkpKSkNCiAgICAgKChhbmQgd2RheSAobm90IChudGggMyB0bCkpKQ0K ICAgICAgOzsgV2Vla2RheSB3YXMgZ2l2ZW4sIGJ1dCBubyBkYXksIHNvIHBpY2sgdGhhdCBkYXkg aW4gdGhlIHdlZWsNCiAgICAgIDs7IG9uIG9yIGFmdGVyIHRoZSBkZXJpdmVkIGRhdGUuDQogICAg ICAoc2V0cSB3ZGF5MSAobnRoIDYgKGRlY29kZS10aW1lIChlbmNvZGUtdGltZSAwIDAgMCBkYXkg bW9udGggeWVhcikpKSkNCiAgICAgICh1bmxlc3MgKGVxdWFsIHdkYXkgd2RheTEpDQoJKHNldHEg ZGF5ICgrIGRheSAoJSAoLSB3ZGF5IHdkYXkxIC03KSA3KSkpKSkpDQogICAgKGlmIChhbmQgKGJv dW5kcCAnb3JnLXRpbWUtd2FzLWdpdmVuKQ0KCSAgICAgKG50aCAyIHRsKSkNCgkoc2V0cSBvcmct dGltZS13YXMtZ2l2ZW4gdCkpDQogICAgKGlmICg8IHllYXIgMTAwKSAoc2V0cSB5ZWFyICgrIDIw MDAgeWVhcikpKQ0KICAgIDs7IENoZWNrIG9mIHRoZSBkYXRlIGlzIHJlcHJlc2VudGFibGUNCiAg ICAoaWYgb3JnLXJlYWQtZGF0ZS1mb3JjZS1jb21wYXRpYmxlLWRhdGVzDQoJKHByb2duDQoJICAo aWYgKDwgeWVhciAxOTcwKQ0KCSAgICAgIChzZXRxIHllYXIgMTk3MCBvcmctcmVhZC1kYXRlLWFu YWx5emUtZm9yY2VkLXllYXIgdCkpDQoJICAoaWYgKD4geWVhciAyMDM3KQ0KCSAgICAgIChzZXRx IHllYXIgMjAzNyAgb3JnLXJlYWQtZGF0ZS1hbmFseXplLWZvcmNlZC15ZWFyIHQpKSkNCiAgICAg IChjb25kaXRpb24tY2FzZSBuaWwNCgkgIChpZ25vcmUgKGVuY29kZS10aW1lIHNlY29uZCBtaW51 dGUgaG91ciBkYXkgbW9udGggeWVhcikpDQoJKGVycm9yDQoJIChzZXRxIHllYXIgKG50aCA1IG9y Zy1kZWZkZWNvZGUpKQ0KCSAoc2V0cSBvcmctcmVhZC1kYXRlLWFuYWx5emUtZm9yY2VkLXllYXIg dCkpKSkNCiAgICAoc2V0cSBvcmctcmVhZC1kYXRlLWFuYWx5emUtZnV0dXJlcCBmdXR1cmVwKQ0K ICAgIChsaXN0IHNlY29uZCBtaW51dGUgaG91ciBkYXkgbW9udGggeWVhcikpKQ0KDQooZGVmdmFy IHBhcnNlLXRpbWUtd2Vla2RheXMpDQooZGVmdW4gb3JnLXJlYWQtZGF0ZS1nZXQtcmVsYXRpdmUg KHMgdG9kYXkgZGVmYXVsdCkNCiAgIkNoZWNrIHN0cmluZyBTIGZvciBzcGVjaWFsIHJlbGF0aXZl IGRhdGUgc3RyaW5nLg0KVE9EQVkgYW5kIERFRkFVTFQgYXJlIGludGVybmFsIHRpbWVzLCBmb3Ig dG9kYXkgYW5kIGZvciBhIGRlZmF1bHQuDQpSZXR1cm4gc2hpZnQgbGlzdCAoTiB3aGF0IGRlZi1m bGFnKQ0KV0hBVCAgICAgICBpcyBcImRcIiwgXCJ3XCIsIFwibVwiLCBvciBcInlcIiBmb3IgZGF5 LCB3ZWVrLCBtb250aCwgeWVhci4NCk4gICAgICAgICAgaXMgdGhlIG51bWJlciBvZiBXSEFUcyB0 byBzaGlmdC4NCkRFRi1GTEFHICAgaXMgdCB3aGVuIGEgZG91YmxlICsrIG9yIC0tIGluZGljYXRl cyBzaGlmdCByZWxhdGl2ZSB0bw0KICAgICAgICAgICB0aGUgREVGQVVMVCBkYXRlIHJhdGhlciB0 aGFuIFRPREFZLiINCiAgKHJlcXVpcmUgJ3BhcnNlLXRpbWUpDQogICh3aGVuIChhbmQNCgkgKHN0 cmluZy1tYXRjaA0KCSAgKGNvbmNhdA0KCSAgICJcXGBbIFx0XSpcXChbLStdXFx7MCwyXFx9XFwp Ig0KCSAgICJcXChbMC05XStcXCk/Ig0KCSAgICJcXChbaGR3bXldXFx8XFwoIiAobWFwY29uY2F0 ICdjYXIgcGFyc2UtdGltZS13ZWVrZGF5cyAiXFx8IikgIlxcKVxcKT8iDQoJICAgIlxcKFsgXHRd XFx8JFxcKSIpIHMpDQoJIChvciAoPiAobWF0Y2gtZW5kIDEpIChtYXRjaC1iZWdpbm5pbmcgMSkp IChtYXRjaC1lbmQgNCkpKQ0KICAgIChsZXQqICgoZGlyIChpZiAoPiAobWF0Y2gtZW5kIDEpICht YXRjaC1iZWdpbm5pbmcgMSkpDQoJCSAgICAoc3RyaW5nLXRvLWNoYXIgKHN1YnN0cmluZyAobWF0 Y2gtc3RyaW5nIDEgcykgLTEpKQ0KCQkgID8rKSkNCgkgICAocmVsIChhbmQgKG1hdGNoLWVuZCAx KSAoPSAyICgtIChtYXRjaC1lbmQgMSkgKG1hdGNoLWJlZ2lubmluZyAxKSkpKSkNCgkgICAobiAo aWYgKG1hdGNoLWVuZCAyKSAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDIgcykpIDEp KQ0KCSAgICh3aGF0IChpZiAobWF0Y2gtZW5kIDMpIChtYXRjaC1zdHJpbmcgMyBzKSAiZCIpKQ0K CSAgICh3ZGF5MSAoY2RyIChhc3NvYyAoZG93bmNhc2Ugd2hhdCkgcGFyc2UtdGltZS13ZWVrZGF5 cykpKQ0KCSAgIChkYXRlIChpZiByZWwgZGVmYXVsdCB0b2RheSkpDQoJICAgKHdkYXkgKG50aCA2 IChkZWNvZGUtdGltZSBkYXRlKSkpDQoJICAgZGVsdGEpDQogICAgICAoaWYgd2RheTENCgkgIChw cm9nbg0KCSAgICAoc2V0cSBkZWx0YSAobW9kICgrIDcgKC0gd2RheTEgd2RheSkpIDcpKQ0KCSAg ICAoaWYgKD0gZGVsdGEgMCkgKHNldHEgZGVsdGEgNykpDQoJICAgIChpZiAoPSBkaXIgPy0pDQoJ CShwcm9nbg0KCQkgIChzZXRxIGRlbHRhICgtIGRlbHRhIDcpKQ0KCQkgIChpZiAoPSBkZWx0YSAw KSAoc2V0cSBkZWx0YSAtNykpKSkNCgkgICAgKGlmICg+IG4gMSkgKHNldHEgZGVsdGEgKCsgZGVs dGEgKCogKDEtIG4pIChpZiAoPSBkaXIgPy0pIC03IDcpKSkpKQ0KCSAgICAobGlzdCBkZWx0YSAi ZCIgcmVsKSkNCgkobGlzdCAoKiBuIChpZiAoPSBkaXIgPy0pIC0xIDEpKSB3aGF0IHJlbCkpKSkp DQoNCihkZWZ1biBvcmctb3JkZXItY2FsZW5kYXItZGF0ZS1hcmdzIChhcmcxIGFyZzIgYXJnMykN CiAgIlR1cm4gYSB1c2VyLXNwZWNpZmllZCBkYXRlIGludG8gdGhlIGludGVybmFsIHJlcHJlc2Vu dGF0aW9uLg0KVGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG5lZWRlZCBieSB0aGUgY2FsZW5k YXIgaXMgKG1vbnRoIGRheSB5ZWFyKS4NClRoaXMgaXMgYSB3cmFwcGVyIHRvIGhhbmRsZSB0aGUg YnJhaW4tZGVhZCBjb252ZW50aW9uIGluIGNhbGVuZGFyIHRoYXQNCnVzZXIgZnVuY3Rpb24gYXJn dW1lbnQgb3JkZXIgY2hhbmdlIGRlcGVuZGVudCBvbiBhcmd1bWVudCBvcmRlci4iDQogIChpZiAo Ym91bmRwICdjYWxlbmRhci1kYXRlLXN0eWxlKQ0KICAgICAgKGNvbmQNCiAgICAgICAoKGVxIGNh bGVuZGFyLWRhdGUtc3R5bGUgJ2FtZXJpY2FuKQ0KCShsaXN0IGFyZzEgYXJnMiBhcmczKSkNCiAg ICAgICAoKGVxIGNhbGVuZGFyLWRhdGUtc3R5bGUgJ2V1cm9wZWFuKQ0KCShsaXN0IGFyZzIgYXJn MSBhcmczKSkNCiAgICAgICAoKGVxIGNhbGVuZGFyLWRhdGUtc3R5bGUgJ2lzbykNCgkobGlzdCBh cmcyIGFyZzMgYXJnMSkpKQ0KICAgIChvcmctbm8td2FybmluZ3MgOzsgZXVyb3BlYW4tY2FsZW5k YXItc3R5bGUgaXMgb2Jzb2xldGUgYXMgb2YgdmVyc2lvbiAyMy4xDQogICAgIChpZiAob3JnLWJv dW5kLWFuZC10cnVlLXAgZXVyb3BlYW4tY2FsZW5kYXItc3R5bGUpDQoJIChsaXN0IGFyZzIgYXJn MSBhcmczKQ0KICAgICAgIChsaXN0IGFyZzEgYXJnMiBhcmczKSkpKSkNCg0KKGRlZnVuIG9yZy1l dmFsLWluLWNhbGVuZGFyIChmb3JtICZvcHRpb25hbCBrZWVwZGF0ZSkNCiAgIkV2YWwgRk9STSBp biB0aGUgY2FsZW5kYXIgd2luZG93IGFuZCByZXR1cm4gdG8gY3VycmVudCB3aW5kb3cuDQpXaGVu IEtFRVBEQVRFIGlzIG5vbi1uaWwsIHVwZGF0ZSBgb3JnLWFuczInIGZyb20gdGhlIGN1cnNvciBk YXRlLA0Kb3RoZXJ3aXNlIHN0aWNrIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIGBvcmctYW5zMicu Ig0KICAobGV0ICgoc2YgKHNlbGVjdGVkLWZyYW1lKSkNCgkoc3cgKHNlbGVjdGVkLXdpbmRvdykp KQ0KICAgIChzZWxlY3Qtd2luZG93IChnZXQtYnVmZmVyLXdpbmRvdyAiKkNhbGVuZGFyKiIgdCkp DQogICAgKGV2YWwgZm9ybSkNCiAgICAod2hlbiAoYW5kIChub3Qga2VlcGRhdGUpIChjYWxlbmRh ci1jdXJzb3ItdG8tZGF0ZSkpDQogICAgICAobGV0KiAoKGRhdGUgKGNhbGVuZGFyLWN1cnNvci10 by1kYXRlKSkNCgkgICAgICh0aW1lIChlbmNvZGUtdGltZSAwIDAgMCAobnRoIDEgZGF0ZSkgKG50 aCAwIGRhdGUpIChudGggMiBkYXRlKSkpKQ0KCShzZXRxIG9yZy1hbnMyIChmb3JtYXQtdGltZS1z dHJpbmcgIiVZLSVtLSVkIiB0aW1lKSkpKQ0KICAgIChtb3ZlLW92ZXJsYXkgb3JnLWRhdGUtb3Zs ICgxLSAocG9pbnQpKSAoMSsgKHBvaW50KSkgKGN1cnJlbnQtYnVmZmVyKSkNCiAgICAoc2VsZWN0 LXdpbmRvdyBzdykNCiAgICAob3JnLXNlbGVjdC1mcmFtZS1zZXQtaW5wdXQtZm9jdXMgc2YpKSkN Cg0KKGRlZnVuIG9yZy1jYWxlbmRhci1zZWxlY3QgKCkNCiAgIlJldHVybiB0byBgb3JnLXJlYWQt ZGF0ZScgd2l0aCB0aGUgZGF0ZSBjdXJyZW50bHkgc2VsZWN0ZWQuDQpUaGlzIGlzIHVzZWQgYnkg YG9yZy1yZWFkLWRhdGUnIGluIGEgdGVtcG9yYXJ5IGtleW1hcCBmb3IgdGhlIGNhbGVuZGFyIGJ1 ZmZlci4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKHdoZW4gKGNhbGVuZGFyLWN1cnNvci10by1kYXRl KQ0KICAgIChsZXQqICgoZGF0ZSAoY2FsZW5kYXItY3Vyc29yLXRvLWRhdGUpKQ0KCSAgICh0aW1l IChlbmNvZGUtdGltZSAwIDAgMCAobnRoIDEgZGF0ZSkgKG50aCAwIGRhdGUpIChudGggMiBkYXRl KSkpKQ0KICAgICAgKHNldHEgb3JnLWFuczEgKGZvcm1hdC10aW1lLXN0cmluZyAiJVktJW0tJWQi IHRpbWUpKSkNCiAgICAoaWYgKGFjdGl2ZS1taW5pYnVmZmVyLXdpbmRvdykgKGV4aXQtbWluaWJ1 ZmZlcikpKSkNCg0KKGRlZnVuIG9yZy1pbnNlcnQtdGltZS1zdGFtcCAodGltZSAmb3B0aW9uYWwg d2l0aC1obSBpbmFjdGl2ZSBwcmUgcG9zdCBleHRyYSkNCiAgIkluc2VydCBhIGRhdGUgc3RhbXAg Zm9yIHRoZSBkYXRlIGdpdmVuIGJ5IHRoZSBpbnRlcm5hbCBUSU1FLg0KV0lUSC1ITSBtZWFucyB1 c2UgdGhlIHN0YW1wIGZvcm1hdCB0aGF0IGluY2x1ZGVzIHRoZSB0aW1lIG9mIHRoZSBkYXkuDQpJ TkFDVElWRSBtZWFucyB1c2Ugc3F1YXJlIGJyYWNrZXRzIGluc3RlYWQgb2YgYW5ndWxhciBvbmVz LCBzbyB0aGF0IHRoZQ0Kc3RhbXAgd2lsbCBub3QgY29udHJpYnV0ZSB0byB0aGUgYWdlbmRhLg0K UFJFIGFuZCBQT1NUIGFyZSBvcHRpb25hbCBzdHJpbmdzIHRvIGJlIGluc2VydGVkIGJlZm9yZSBh bmQgYWZ0ZXIgdGhlDQpzdGFtcC4NClRoZSBjb21tYW5kIHJldHVybnMgdGhlIGluc2VydGVkIHRp bWUgc3RhbXAuIg0KICAobGV0ICgoZm10IChmdW5jYWxsIChpZiB3aXRoLWhtICdjZHIgJ2Nhcikg b3JnLXRpbWUtc3RhbXAtZm9ybWF0cykpDQoJc3RhbXApDQogICAgKGlmIGluYWN0aXZlIChzZXRx IGZtdCAoY29uY2F0ICJbIiAoc3Vic3RyaW5nIGZtdCAxIC0xKSAiXSIpKSkNCiAgICAoaW5zZXJ0 LWJlZm9yZS1tYXJrZXJzIChvciBwcmUgIiIpKQ0KICAgICh3aGVuIChsaXN0cCBleHRyYSkNCiAg ICAgIChzZXRxIGV4dHJhIChjYXIgZXh0cmEpKQ0KICAgICAgKGlmIChhbmQgKHN0cmluZ3AgZXh0 cmEpDQoJICAgICAgIChzdHJpbmctbWF0Y2ggIlxcKFswLTldK1xcKTpcXChbMC05XStcXCkiIGV4 dHJhKSkNCgkgIChzZXRxIGV4dHJhIChmb3JtYXQgIi0lMDJkOiUwMmQiDQoJCQkgICAgICAoc3Ry aW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDEgZXh0cmEpKQ0KCQkJICAgICAgKHN0cmluZy10 by1udW1iZXIgKG1hdGNoLXN0cmluZyAyIGV4dHJhKSkpKQ0KCShzZXRxIGV4dHJhIG5pbCkpKQ0K ICAgICh3aGVuIGV4dHJhDQogICAgICAoc2V0cSBmbXQgKGNvbmNhdCAoc3Vic3RyaW5nIGZtdCAw IC0xKSBleHRyYSAoc3Vic3RyaW5nIGZtdCAtMSkpKSkNCiAgICAoaW5zZXJ0LWJlZm9yZS1tYXJr ZXJzIChzZXRxIHN0YW1wIChmb3JtYXQtdGltZS1zdHJpbmcgZm10IHRpbWUpKSkNCiAgICAoaW5z ZXJ0LWJlZm9yZS1tYXJrZXJzIChvciBwb3N0ICIiKSkNCiAgICAoc2V0cSBvcmctbGFzdC1pbnNl cnRlZC10aW1lc3RhbXAgc3RhbXApKSkNCg0KKGRlZnVuIG9yZy10b2dnbGUtdGltZS1zdGFtcC1v dmVybGF5cyAoKQ0KICAiVG9nZ2xlIHRoZSB1c2Ugb2YgY3VzdG9tIHRpbWUgc3RhbXAgZm9ybWF0 cy4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKHNldHEgb3JnLWRpc3BsYXktY3VzdG9tLXRpbWVzIChu b3Qgb3JnLWRpc3BsYXktY3VzdG9tLXRpbWVzKSkNCiAgKHVubGVzcyBvcmctZGlzcGxheS1jdXN0 b20tdGltZXMNCiAgICAobGV0ICgocCAocG9pbnQtbWluKSkgKGJtcCAoYnVmZmVyLW1vZGlmaWVk LXApKSkNCiAgICAgICh3aGlsZSAoc2V0cSBwIChuZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2Ug cCAnZGlzcGxheSkpDQoJKGlmIChhbmQgKGdldC10ZXh0LXByb3BlcnR5IHAgJ2Rpc3BsYXkpDQoJ CSAoZXEgKGdldC10ZXh0LXByb3BlcnR5IHAgJ2ZhY2UpICdvcmctZGF0ZSkpDQoJICAgIChyZW1v dmUtdGV4dC1wcm9wZXJ0aWVzDQoJICAgICBwIChzZXRxIHAgKG5leHQtc2luZ2xlLXByb3BlcnR5 LWNoYW5nZSBwICdkaXNwbGF5KSkNCgkgICAgICcoZGlzcGxheSB0KSkpKQ0KICAgICAgKHNldC1i dWZmZXItbW9kaWZpZWQtcCBibXApKSkNCiAgKGlmIChmZWF0dXJlcCAneGVtYWNzKQ0KICAgICAg KHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkgJyhlbmQtZ2x5 cGggdCkpKQ0KICAob3JnLXJlc3RhcnQtZm9udC1sb2NrKQ0KICAoc2V0cSBvcmctdGFibGUtbWF5 LW5lZWQtdXBkYXRlIHQpDQogIChpZiBvcmctZGlzcGxheS1jdXN0b20tdGltZXMNCiAgICAgICht ZXNzYWdlICJUaW1lIHN0YW1wcyBhcmUgb3ZlcmxhaWQgd2l0aCBjdXN0b20gZm9ybWF0IikNCiAg ICAobWVzc2FnZSAiVGltZSBzdGFtcCBvdmVybGF5cyByZW1vdmVkIikpKQ0KDQooZGVmdW4gb3Jn LWRpc3BsYXktY3VzdG9tLXRpbWUgKGJlZyBlbmQpDQogICJPdmVybGF5IG1vZGlmaWVkIHRpbWUg c3RhbXAgZm9ybWF0IG92ZXIgdGltZXN0YW1wIGJldHdlZW4gQkVHIGFuZCBFTkQuIg0KICAobGV0 KiAoKHRzIChidWZmZXItc3Vic3RyaW5nIGJlZyBlbmQpKQ0KCSB0MSB3MSB3aXRoLWhtIHRmIHRp bWUgc3RyIHcyIChvZmYgMCkpDQogICAgKHNhdmUtbWF0Y2gtZGF0YQ0KICAgICAgKHNldHEgdDEg KG9yZy1wYXJzZS10aW1lLXN0cmluZyB0cyB0KSkNCiAgICAgIChpZiAoc3RyaW5nLW1hdGNoICJc XCgtWzAtOV0rOlswLTldK1xcKT9cXCggWy4rXT9cXCtbMC05XStbaGR3bXldXFwoL1swLTldK1to ZHdteV1cXCk/XFwpP1xcJyIgdHMpDQoJICAoc2V0cSBvZmYgKC0gKG1hdGNoLWVuZCAwKSAobWF0 Y2gtYmVnaW5uaW5nIDApKSkpKQ0KICAgIChzZXRxIGVuZCAoLSBlbmQgb2ZmKSkNCiAgICAoc2V0 cSB3MSAoLSBlbmQgYmVnKQ0KCSAgd2l0aC1obSAoYW5kIChudGggMSB0MSkgKG50aCAyIHQxKSkN CgkgIHRmIChmdW5jYWxsIChpZiB3aXRoLWhtICdjZHIgJ2Nhcikgb3JnLXRpbWUtc3RhbXAtY3Vz dG9tLWZvcm1hdHMpDQoJICB0aW1lIChvcmctZml4LWRlY29kZWQtdGltZSB0MSkNCgkgIHN0ciAo b3JnLWFkZC1wcm9wcw0KCQkgIChmb3JtYXQtdGltZS1zdHJpbmcNCgkJICAgKHN1YnN0cmluZyB0 ZiAxIC0xKSAoYXBwbHkgJ2VuY29kZS10aW1lIHRpbWUpKQ0KCQkgIG5pbCAnbW91c2UtZmFjZSAn aGlnaGxpZ2h0KQ0KCSAgdzIgKGxlbmd0aCBzdHIpKQ0KICAgIChpZiAobm90ICg9IHcyIHcxKSkN CgkoYWRkLXRleHQtcHJvcGVydGllcyAoMSsgYmVnKSAoKyAyIGJlZykNCgkJCSAgICAgKGxpc3Qg J29yZy1kd2lkdGggdCAnb3JnLWR3aWR0aC1uICgtIHcxIHcyKSkpKQ0KICAgIChpZiAoZmVhdHVy ZXAgJ3hlbWFjcykNCgkocHJvZ24NCgkgIChwdXQtdGV4dC1wcm9wZXJ0eSBiZWcgZW5kICdpbnZp c2libGUgdCkNCgkgIChwdXQtdGV4dC1wcm9wZXJ0eSBiZWcgZW5kICdlbmQtZ2x5cGggKG1ha2Ut Z2x5cGggc3RyKSkpDQogICAgICAocHV0LXRleHQtcHJvcGVydHkgYmVnIGVuZCAnZGlzcGxheSBz dHIpKSkpDQoNCihkZWZ1biBvcmctdHJhbnNsYXRlLXRpbWUgKHN0cmluZykNCiAgIlRyYW5zbGF0 ZSBhbGwgdGltZXN0YW1wcyBpbiBTVFJJTkcgdG8gY3VzdG9tIGZvcm1hdC4NCkJ1dCBkbyB0aGlz IG9ubHkgaWYgdGhlIHZhcmlhYmxlIGBvcmctZGlzcGxheS1jdXN0b20tdGltZXMnIGlzIHNldC4i DQogICh3aGVuIG9yZy1kaXNwbGF5LWN1c3RvbS10aW1lcw0KICAgIChzYXZlLW1hdGNoLWRhdGEN CiAgICAgIChsZXQqICgoc3RhcnQgMCkNCgkgICAgIChyZSBvcmctdHMtcmVnZXhwLWJvdGgpDQoJ ICAgICB0MSB3aXRoLWhtIGluYWN0aXZlIHRmIHRpbWUgc3RyIGJlZyBlbmQpDQoJKHdoaWxlIChz ZXRxIHN0YXJ0IChzdHJpbmctbWF0Y2ggcmUgc3RyaW5nIHN0YXJ0KSkNCgkgIChzZXRxIGJlZyAo bWF0Y2gtYmVnaW5uaW5nIDApDQoJCWVuZCAobWF0Y2gtZW5kIDApDQoJCXQxIChzYXZlLW1hdGNo LWRhdGENCgkJICAgICAob3JnLXBhcnNlLXRpbWUtc3RyaW5nIChzdWJzdHJpbmcgc3RyaW5nIGJl ZyBlbmQpIHQpKQ0KCQl3aXRoLWhtIChhbmQgKG50aCAxIHQxKSAobnRoIDIgdDEpKQ0KCQlpbmFj dGl2ZSAoZXF1YWwgKHN1YnN0cmluZyBzdHJpbmcgYmVnICgxKyBiZWcpKSAiWyIpDQoJCXRmIChm dW5jYWxsIChpZiB3aXRoLWhtICdjZHIgJ2NhcikNCgkJCSAgICBvcmctdGltZS1zdGFtcC1jdXN0 b20tZm9ybWF0cykNCgkJdGltZSAob3JnLWZpeC1kZWNvZGVkLXRpbWUgdDEpDQoJCXN0ciAoZm9y bWF0LXRpbWUtc3RyaW5nDQoJCSAgICAgKGNvbmNhdA0KCQkgICAgICAoaWYgaW5hY3RpdmUgIlsi ICI8IikgKHN1YnN0cmluZyB0ZiAxIC0xKQ0KCQkgICAgICAoaWYgaW5hY3RpdmUgIl0iICI+Iikp DQoJCSAgICAgKGFwcGx5ICdlbmNvZGUtdGltZSB0aW1lKSkNCgkJc3RyaW5nIChyZXBsYWNlLW1h dGNoIHN0ciB0IHQgc3RyaW5nKQ0KCQlzdGFydCAoKyBzdGFydCAobGVuZ3RoIHN0cikpKSkpKSkN CiAgc3RyaW5nKQ0KDQooZGVmdW4gb3JnLWZpeC1kZWNvZGVkLXRpbWUgKHRpbWUpDQogICJTZXQg MCBpbnN0ZWFkIG9mIG5pbCBmb3IgdGhlIGZpcnN0IDYgZWxlbWVudHMgb2YgdGltZS4NCkRvbid0 IHRvdWNoIHRoZSByZXN0LiINCiAgKGxldCAoKG4gMCkpDQogICAgKG1hcGNhciAobGFtYmRhICh4 KSAoaWYgKDwgKHNldHEgbiAoMSsgbikpIDcpIChvciB4IDApIHgpKSB0aW1lKSkpDQoNCihkZWZp bmUtb2Jzb2xldGUtZnVuY3Rpb24tYWxpYXMgJ29yZy1kYXlzLXRvLXRpbWUgJ29yZy10aW1lLXN0 YW1wLXRvLW5vdyAiMjQuNCIpDQoNCihkZWZ1biBvcmctdGltZS1zdGFtcC10by1ub3cgKHRpbWVz dGFtcC1zdHJpbmcgJm9wdGlvbmFsIHNlY29uZHMpDQogICJEaWZmZXJlbmNlIGJldHdlZW4gVElN RVNUQU1QLVNUUklORyBhbmQgbm93IGluIGRheXMuDQpJZiBTRUNPTkRTIGlzIG5vbi1uaWwsIHJl dHVybiB0aGUgZGlmZmVyZW5jZSBpbiBzZWNvbmRzLiINCiAgKGxldCAoKGZkaWZmIChpZiBzZWNv bmRzICdvcmctZmxvYXQtdGltZSAndGltZS10by1kYXlzKSkpDQogICAgKC0gKGZ1bmNhbGwgZmRp ZmYgKG9yZy10aW1lLXN0cmluZy10by10aW1lIHRpbWVzdGFtcC1zdHJpbmcpKQ0KICAgICAgIChm dW5jYWxsIGZkaWZmIChjdXJyZW50LXRpbWUpKSkpKQ0KDQooZGVmdW4gb3JnLWRlYWRsaW5lLWNs b3NlICh0aW1lc3RhbXAtc3RyaW5nICZvcHRpb25hbCBuZGF5cykNCiAgIklzIHRoZSB0aW1lIGlu IFRJTUVTVEFNUC1TVFJJTkcgY2xvc2UgdG8gdGhlIGN1cnJlbnQgZGF0ZT8iDQogIChzZXRxIG5k YXlzIChvciBuZGF5cyAob3JnLWdldC13ZGF5cyB0aW1lc3RhbXAtc3RyaW5nKSkpDQogIChhbmQg KDwgKG9yZy10aW1lLXN0YW1wLXRvLW5vdyB0aW1lc3RhbXAtc3RyaW5nKSBuZGF5cykNCiAgICAg ICAobm90IChvcmctZW50cnktaXMtZG9uZS1wKSkpKQ0KDQooZGVmdW4gb3JnLWdldC13ZGF5cyAo dHMgJm9wdGlvbmFsIGRlbGF5IHplcm8tZGVsYXkpDQogICJHZXQgdGhlIGRlYWRsaW5lIGxlYWQg dGltZSBhcHByb3ByaWF0ZSBmb3IgdGltZXN0cmluZyBUUy4NCldoZW4gREVMQVkgaXMgbm9uLW5p bCwgZ2V0IHRoZSBkZWxheSB0aW1lIGZvciBzY2hlZHVsZWQgaXRlbXMNCmluc3RlYWQgb2YgdGhl IGRlYWRsaW5lIGxlYWQgdGltZS4gIFdoZW4gWkVSTy1ERUxBWSBpcyBub24tbmlsDQphbmQgYG9y Zy1zY2hlZHVsZWQtZGVsYXktZGF5cycgaXMgMCwgZW5mb3JjZSAwIGFzIHRoZSBkZWxheSwNCmRv bid0IHRyeSB0byBmaW5kIHRoZSBkZWxheSBjb29raWUgaW4gdGhlIHNjaGVkdWxlZCB0aW1lc3Rh bXAuIg0KICAobGV0ICgodHYgKGlmIGRlbGF5IG9yZy1zY2hlZHVsZWQtZGVsYXktZGF5cw0KCSAg ICAgIG9yZy1kZWFkbGluZS13YXJuaW5nLWRheXMpKSkNCiAgICAoY29uZA0KICAgICAoKG9yIChh bmQgZGVsYXkgKDwgdHYgMCkpDQoJICAoYW5kIGRlbGF5IHplcm8tZGVsYXkgKDw9IHR2IDApKQ0K CSAgKGFuZCAobm90IGRlbGF5KSAoPD0gdHYgMCkpKQ0KICAgICAgOzsgRW5mb3JjZSB0aGlzIHZh bHVlIG5vIG1hdHRlciB3aGF0DQogICAgICAoLSB0dikpDQogICAgICgoc3RyaW5nLW1hdGNoICIt XFwoWzAtOV0rXFwpXFwoW2hkd215XVxcKVxcKFxcJ1xcfD5cXHwgXFwpIiB0cykNCiAgICAgIDs7 IGxlYWQgdGltZSBpcyBzcGVjaWZpZWQuDQogICAgICAoZmxvb3IgKCogKHN0cmluZy10by1udW1i ZXIgKG1hdGNoLXN0cmluZyAxIHRzKSkNCgkJKGNkciAoYXNzb2MgKG1hdGNoLXN0cmluZyAyIHRz KQ0KCQkJICAgICcoKCJkIiAuIDEpICAgICgidyIgLiA3KQ0KCQkJICAgICAgKCJtIiAuIDMwLjQp ICgieSIgLiAzNjUuMjUpDQoJCQkgICAgICAoImgiIC4gMC4wNDE2NjcpKSkpKSkpDQogICAgIDs7 IGdvIGZvciB0aGUgZGVmYXVsdC4NCiAgICAgKHQgdHYpKSkpDQoNCihkZWZ1biBvcmctY2FsZW5k YXItc2VsZWN0LW1vdXNlIChldikNCiAgIlJldHVybiB0byBgb3JnLXJlYWQtZGF0ZScgd2l0aCB0 aGUgZGF0ZSBjdXJyZW50bHkgc2VsZWN0ZWQuDQpUaGlzIGlzIHVzZWQgYnkgYG9yZy1yZWFkLWRh dGUnIGluIGEgdGVtcG9yYXJ5IGtleW1hcCBmb3IgdGhlIGNhbGVuZGFyIGJ1ZmZlci4iDQogIChp bnRlcmFjdGl2ZSAiZSIpDQogIChtb3VzZS1zZXQtcG9pbnQgZXYpDQogICh3aGVuIChjYWxlbmRh ci1jdXJzb3ItdG8tZGF0ZSkNCiAgICAobGV0KiAoKGRhdGUgKGNhbGVuZGFyLWN1cnNvci10by1k YXRlKSkNCgkgICAodGltZSAoZW5jb2RlLXRpbWUgMCAwIDAgKG50aCAxIGRhdGUpIChudGggMCBk YXRlKSAobnRoIDIgZGF0ZSkpKSkNCiAgICAgIChzZXRxIG9yZy1hbnMxIChmb3JtYXQtdGltZS1z dHJpbmcgIiVZLSVtLSVkIiB0aW1lKSkpDQogICAgKGlmIChhY3RpdmUtbWluaWJ1ZmZlci13aW5k b3cpIChleGl0LW1pbmlidWZmZXIpKSkpDQoNCihkZWZ1biBvcmctY2hlY2stZGVhZGxpbmVzIChu ZGF5cykNCiAgIkNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVhZGxpbmVzIGR1ZSBvciBwYXN0IGR1 ZS4NCkEgZGVhZGxpbmUgaXMgY29uc2lkZXJlZCBkdWUgaWYgaXQgaGFwcGVucyB3aXRoaW4gYG9y Zy1kZWFkbGluZS13YXJuaW5nLWRheXMnDQpkYXlzIGZyb20gdG9kYXkncyBkYXRlLiAgSWYgdGhl IGRlYWRsaW5lIGFwcGVhcnMgaW4gYW4gZW50cnkgbWFya2VkIERPTkUsDQppdCBpcyBub3Qgc2hv d24uICBUaGUgcHJlZml4IGFyZyBOREFZUyBjYW4gYmUgdXNlZCB0byB0ZXN0IHRoYXQgbWFueQ0K ZGF5cy4gIElmIHRoZSBwcmVmaXggaXMgYSByYXcgXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBwcmVm aXgsIGFsbCBkZWFkbGluZXMgYXJlIHNob3duLiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgKGxl dCogKChvcmctd2Fybi1kYXlzDQoJICAoY29uZA0KCSAgICgoZXF1YWwgbmRheXMgJyg0KSkgMTAw MDAwKQ0KCSAgIChuZGF5cyAocHJlZml4LW51bWVyaWMtdmFsdWUgbmRheXMpKQ0KCSAgICh0IChh YnMgb3JnLWRlYWRsaW5lLXdhcm5pbmctZGF5cykpKSkNCgkgKGNhc2UtZm9sZC1zZWFyY2ggbmls KQ0KCSAocmVnZXhwIChjb25jYXQgIlxcPCIgb3JnLWRlYWRsaW5lLXN0cmluZyAiICo8XFwoW14+ XStcXCk+IikpDQoJIChjYWxsYmFjaw0KCSAgKGxhbWJkYSAoKSAob3JnLWRlYWRsaW5lLWNsb3Nl IChtYXRjaC1zdHJpbmcgMSkgb3JnLXdhcm4tZGF5cykpKSkNCg0KICAgIChtZXNzYWdlICIlZCBk ZWFkbGluZXMgcGFzdC1kdWUgb3IgZHVlIHdpdGhpbiAlZCBkYXlzIg0KCSAgICAgKG9yZy1vY2N1 ciByZWdleHAgbmlsIGNhbGxiYWNrKQ0KCSAgICAgb3JnLXdhcm4tZGF5cykpKQ0KDQooZGVmc3Vi c3Qgb3JnLXJlLXRpbWVzdGFtcCAodHlwZSkNCiAgIlJldHVybiBhIHJlZ2V4cCBmb3IgdGltZXN0 YW1wIFRZUEUuDQpBbGxvd2VkIHZhbHVlcyBmb3IgVFlQRSBhcmU6DQoNCiAgICAgICAgYWxsOiBh bGwgdGltZXN0YW1wcw0KICAgICBhY3RpdmU6IG9ubHkgYWN0aXZlIHRpbWVzdGFtcHMgKDwuLi4+ KQ0KICAgaW5hY3RpdmU6IG9ubHkgaW5hY3RpdmUgdGltZXN0YW1wcyAoWy4uLl0pDQogIHNjaGVk dWxlZDogb25seSBzY2hlZHVsZWQgdGltZXN0YW1wcw0KICAgZGVhZGxpbmU6IG9ubHkgZGVhZGxp bmUgdGltZXN0YW1wcw0KICAgICBjbG9zZWQ6IG9ubHkgY2xvc2VkIHRpbWUtc3RhbXBzDQoNCldo ZW4gVFlQRSBpcyBuaWwsIGZhbGwgYmFjayBvbiByZXR1cm5pbmcgYSByZWdleHAgdGhhdCBtYXRj aGVzDQpib3RoIHNjaGVkdWxlZCBhbmQgZGVhZGxpbmUgdGltZXN0YW1wcy4iDQogIChjb25kICgo ZXEgdHlwZSAnYWxsKSAiXFwoWzAtOV1cXHs0XFx9LVswLTldXFx7MlxcfS1bMC05XVxcezJcXH1c XCg/OiArW15dKzAtOT4NXG4gLV0rXFwpP1xcKD86ICtbMC05XVxcezEsMlxcfTpbMC05XVxcezJc XH1cXCk/XFwpIikNCgkoKGVxIHR5cGUgJ2FjdGl2ZSkgb3JnLXRzLXJlZ2V4cCkNCgkoKGVxIHR5 cGUgJ2luYWN0aXZlKSAiXFxbXFwoWzAtOV1cXHs0XFx9LVswLTldXFx7MlxcfS1bMC05XVxcezJc XH0gP1teDVxuPl0qP1xcKVxcXSIpDQoJKChlcSB0eXBlICdzY2hlZHVsZWQpIChjb25jYXQgIlxc PCIgb3JnLXNjaGVkdWxlZC1zdHJpbmcgIiAqPFxcKFtePl0rXFwpPiIpKQ0KCSgoZXEgdHlwZSAn ZGVhZGxpbmUpIChjb25jYXQgIlxcPCIgb3JnLWRlYWRsaW5lLXN0cmluZyAiICo8XFwoW14+XStc XCk+IikpDQoJKChlcSB0eXBlICdjbG9zZWQpIChjb25jYXQgb3JnLWNsb3NlZC1zdHJpbmcgIiBc XFtcXChbMC05XVxcezRcXH0tWzAtOV1cXHsyXFx9LVswLTldXFx7MlxcfSA/W14NXG4+XSo/XFwp XFxdIikpDQoJKChlcSB0eXBlICdzY2hlZHVsZWQtb3ItZGVhZGxpbmUpDQoJIChjb25jYXQgIlxc PFxcKD86IiBvcmctZGVhZGxpbmUtc3RyaW5nICJcXHwiIG9yZy1zY2hlZHVsZWQtc3RyaW5nICJc XCkgKjxcXChbXj5dK1xcKT4iKSkpKQ0KDQooZGVmdW4gb3JnLWNoZWNrLWJlZm9yZS1kYXRlIChk YXRlKQ0KICAiQ2hlY2sgaWYgdGhlcmUgYXJlIGRlYWRsaW5lcyBvciBzY2hlZHVsZWQgZW50cmll cyBiZWZvcmUgREFURS4iDQogIChpbnRlcmFjdGl2ZSAobGlzdCAob3JnLXJlYWQtZGF0ZSkpKQ0K ICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCBuaWwpDQoJKHJlZ2V4cCAob3JnLXJlLXRpbWVzdGFt cCBvcmctdHMtdHlwZSkpDQoJKGNhbGxiYWNrDQoJIChsYW1iZGEgKCkgKHRpbWUtbGVzcy1wDQoJ CSAgICAgKG9yZy10aW1lLXN0cmluZy10by10aW1lIChtYXRjaC1zdHJpbmcgMSkpDQoJCSAgICAg KG9yZy10aW1lLXN0cmluZy10by10aW1lIGRhdGUpKSkpKQ0KICAgIChtZXNzYWdlICIlZCBlbnRy aWVzIGJlZm9yZSAlcyINCgkgICAgIChvcmctb2NjdXIgcmVnZXhwIG5pbCBjYWxsYmFjaykgZGF0 ZSkpKQ0KDQooZGVmdW4gb3JnLWNoZWNrLWFmdGVyLWRhdGUgKGRhdGUpDQogICJDaGVjayBpZiB0 aGVyZSBhcmUgZGVhZGxpbmVzIG9yIHNjaGVkdWxlZCBlbnRyaWVzIGFmdGVyIERBVEUuIg0KICAo aW50ZXJhY3RpdmUgKGxpc3QgKG9yZy1yZWFkLWRhdGUpKSkNCiAgKGxldCAoKGNhc2UtZm9sZC1z ZWFyY2ggbmlsKQ0KCShyZWdleHAgKG9yZy1yZS10aW1lc3RhbXAgb3JnLXRzLXR5cGUpKQ0KCShj YWxsYmFjaw0KCSAobGFtYmRhICgpIChub3QNCgkJICAgICAodGltZS1sZXNzLXANCgkJICAgICAg KG9yZy10aW1lLXN0cmluZy10by10aW1lIChtYXRjaC1zdHJpbmcgMSkpDQoJCSAgICAgIChvcmct dGltZS1zdHJpbmctdG8tdGltZSBkYXRlKSkpKSkpDQogICAgKG1lc3NhZ2UgIiVkIGVudHJpZXMg YWZ0ZXIgJXMiDQoJICAgICAob3JnLW9jY3VyIHJlZ2V4cCBuaWwgY2FsbGJhY2spIGRhdGUpKSkN Cg0KKGRlZnVuIG9yZy1jaGVjay1kYXRlcy1yYW5nZSAoc3RhcnQtZGF0ZSBlbmQtZGF0ZSkNCiAg IkNoZWNrIGZvciBkZWFkbGluZXMvc2NoZWR1bGVkIGVudHJpZXMgYmV0d2VlbiBTVEFSVC1EQVRF IGFuZCBFTkQtREFURS4iDQogIChpbnRlcmFjdGl2ZSAobGlzdCAob3JnLXJlYWQtZGF0ZSBuaWwg bmlsIG5pbCAiUmFuZ2Ugc3RhcnRzIikNCgkJICAgICAob3JnLXJlYWQtZGF0ZSBuaWwgbmlsIG5p bCAiUmFuZ2UgZW5kIikpKQ0KICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCBuaWwpDQoJKHJlZ2V4 cCAob3JnLXJlLXRpbWVzdGFtcCBvcmctdHMtdHlwZSkpDQoJKGNhbGxiYWNrDQoJIChsYW1iZGEg KCkNCgkgICAobGV0ICgobWF0Y2ggKG1hdGNoLXN0cmluZyAxKSkpDQoJICAgICAoYW5kDQoJICAg ICAgKG5vdCAodGltZS1sZXNzLXANCgkJICAgIChvcmctdGltZS1zdHJpbmctdG8tdGltZSBtYXRj aCkNCgkJICAgIChvcmctdGltZS1zdHJpbmctdG8tdGltZSBzdGFydC1kYXRlKSkpDQoJICAgICAg KHRpbWUtbGVzcy1wDQoJICAgICAgIChvcmctdGltZS1zdHJpbmctdG8tdGltZSBtYXRjaCkNCgkg ICAgICAgKG9yZy10aW1lLXN0cmluZy10by10aW1lIGVuZC1kYXRlKSkpKSkpKQ0KICAgIChtZXNz YWdlICIlZCBlbnRyaWVzIGJldHdlZW4gJXMgYW5kICVzIg0KCSAgICAgKG9yZy1vY2N1ciByZWdl eHAgbmlsIGNhbGxiYWNrKSBzdGFydC1kYXRlIGVuZC1kYXRlKSkpDQoNCihkZWZ1biBvcmctZXZh bHVhdGUtdGltZS1yYW5nZSAoJm9wdGlvbmFsIHRvLWJ1ZmZlcikNCiAgIkV2YWx1YXRlIGEgdGlt ZSByYW5nZSBieSBjb21wdXRpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFydCBhbmQgZW5k Lg0KTm9ybWFsbHkgdGhlIHJlc3VsdCBpcyBqdXN0IHByaW50ZWQgaW4gdGhlIGVjaG8gYXJlYSwg YnV0IHdpdGggcHJlZml4IGFyZw0KVE8tQlVGRkVSLCB0aGUgcmVzdWx0IGlzIGluc2VydGVkIGp1 c3QgYWZ0ZXIgdGhlIGRhdGUgc3RhbXAgaW50byB0aGUgYnVmZmVyLg0KSWYgdGhlIHRpbWUgcmFu Z2UgaXMgYWN0dWFsbHkgaW4gYSB0YWJsZSwgdGhlIHJlc3VsdCBpcyBpbnNlcnRlZCBpbnRvIHRo ZQ0KbmV4dCBjb2x1bW4uDQpGb3IgdGltZSBkaWZmZXJlbmNlIGNvbXB1dGF0aW9uLCBhIHllYXIg aXMgYXNzdW1lZCB0byBiZSBleGFjdGx5IDM2NQ0KZGF5cyBpbiBvcmRlciB0byBhdm9pZCByb3Vu ZGluZyBwcm9ibGVtcy4iDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChvcg0KICAgKG9yZy1jbG9j ay11cGRhdGUtdGltZS1tYXliZSkNCiAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAodW5sZXNzIChv cmctYXQtZGF0ZS1yYW5nZS1wIHQpDQogICAgICAgKGdvdG8tY2hhciAocG9pbnQtYXQtYm9sKSkN CiAgICAgICAocmUtc2VhcmNoLWZvcndhcmQgb3JnLXRyLXJlZ2V4cC1ib3RoIChwb2ludC1hdC1l b2wpIHQpKQ0KICAgICAoaWYgKG5vdCAob3JnLWF0LWRhdGUtcmFuZ2UtcCB0KSkNCgkgKHVzZXIt ZXJyb3IgIk5vdCBhdCBhIHRpbWUtc3RhbXAgcmFuZ2UsIGFuZCBub25lIGZvdW5kIGluIGN1cnJl bnQgbGluZSIpKSkNCiAgIChsZXQqICgodHMxIChtYXRjaC1zdHJpbmcgMSkpDQoJICAodHMyICht YXRjaC1zdHJpbmcgMikpDQoJICAoaGF2ZXRpbWUgKG9yICg+IChsZW5ndGggdHMxKSAxNSkgKD4g KGxlbmd0aCB0czIpIDE1KSkpDQoJICAobWF0Y2gtZW5kIChtYXRjaC1lbmQgMCkpDQoJICAodGlt ZTEgKG9yZy10aW1lLXN0cmluZy10by10aW1lIHRzMSkpDQoJICAodGltZTIgKG9yZy10aW1lLXN0 cmluZy10by10aW1lIHRzMikpDQoJICAodDEgKG9yZy1mbG9hdC10aW1lIHRpbWUxKSkNCgkgICh0 MiAob3JnLWZsb2F0LXRpbWUgdGltZTIpKQ0KCSAgKGRpZmYgKGFicyAoLSB0MiB0MSkpKQ0KCSAg KG5lZ2F0aXZlICg8ICgtIHQyIHQxKSAwKSkNCgkgIDs7ICh5cyAoZmxvb3IgKCogMzY1IDI0IDYw IDYwKSkpDQoJICAoZHMgKCogMjQgNjAgNjApKQ0KCSAgKGhzICgqIDYwIDYwKSkNCgkgIChmeSAi JWR5ICVkZCAlMDJkOiUwMmQiKQ0KCSAgKGZ5MSAiJWR5ICVkZCIpDQoJICAoZmQgIiVkZCAlMDJk OiUwMmQiKQ0KCSAgKGZkMSAiJWRkIikNCgkgIChmaCAiJTAyZDolMDJkIikNCgkgIHkgZCBoIG0g YWxpZ24pDQogICAgIChpZiBoYXZldGltZQ0KCSAoc2V0cSA7IHkgKGZsb29yICgvIGRpZmYgeXMp KSAgZGlmZiAobW9kIGRpZmYgeXMpDQoJICB5IDANCgkgIGQgKGZsb29yICgvIGRpZmYgZHMpKSAg ZGlmZiAobW9kIGRpZmYgZHMpDQoJICBoIChmbG9vciAoLyBkaWZmIGhzKSkgIGRpZmYgKG1vZCBk aWZmIGhzKQ0KCSAgbSAoZmxvb3IgKC8gZGlmZiA2MCkpKQ0KICAgICAgIChzZXRxIDsgeSAoZmxv b3IgKC8gZGlmZiB5cykpICBkaWZmIChtb2QgZGlmZiB5cykNCgl5IDANCglkIChmbG9vciAoKyAo LyBkaWZmIGRzKSAwLjUpKQ0KCWggMCBtIDApKQ0KICAgICAoaWYgKG5vdCB0by1idWZmZXIpDQoJ IChtZXNzYWdlICIlcyIgKG9yZy1tYWtlLXRkaWZmLXN0cmluZyB5IGQgaCBtKSkNCiAgICAgICAo aWYgKG9yZy1hdC10YWJsZS1wKQ0KCSAgIChwcm9nbg0KCSAgICAgKGdvdG8tY2hhciBtYXRjaC1l bmQpDQoJICAgICAoc2V0cSBhbGlnbiB0KQ0KCSAgICAgKGFuZCAobG9va2luZy1hdCAiICp8Iikg KGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKSkpDQoJIChnb3RvLWNoYXIgbWF0Y2gtZW5kKSkNCiAg ICAgICAoaWYgKGxvb2tpbmctYXQNCgkgICAgIlxcKCAqLT8gKlswLTldK3lcXCk/XFwoICpbMC05 XStkXFwpPyAqWzAtOV1bMC05XTpbMC05XVswLTldIikNCgkgICAocmVwbGFjZS1tYXRjaCAiIikp DQogICAgICAgKGlmIG5lZ2F0aXZlIChpbnNlcnQgIiAtIikpDQogICAgICAgKGlmICg+IHkgMCkg KGluc2VydCAiICIgKGZvcm1hdCAoaWYgaGF2ZXRpbWUgZnkgZnkxKSB5IGQgaCBtKSkNCgkgKGlm ICg+IGQgMCkgKGluc2VydCAiICIgKGZvcm1hdCAoaWYgaGF2ZXRpbWUgZmQgZmQxKSBkIGggbSkp DQoJICAgKGluc2VydCAiICIgKGZvcm1hdCBmaCBoIG0pKSkpDQogICAgICAgKGlmIGFsaWduIChv cmctdGFibGUtYWxpZ24pKQ0KICAgICAgIChtZXNzYWdlICJUaW1lIGRpZmZlcmVuY2UgaW5zZXJ0 ZWQiKSkpKSkNCg0KKGRlZnVuIG9yZy1tYWtlLXRkaWZmLXN0cmluZyAoeSBkIGggbSkNCiAgKGxl dCAoKGZtdCAiIikNCgkobCBuaWwpKQ0KICAgIChpZiAoPiB5IDApIChzZXRxIGZtdCAoY29uY2F0 IGZtdCAiJWQgeWVhciIgKGlmICg+IHkgMSkgInMiICIiKSAiICIpDQoJCSAgICAgIGwgKHB1c2gg eSBsKSkpDQogICAgKGlmICg+IGQgMCkgKHNldHEgZm10IChjb25jYXQgZm10ICIlZCBkYXkiICAo aWYgKD4gZCAxKSAicyIgIiIpICIgIikNCgkJICAgICAgbCAocHVzaCBkIGwpKSkNCiAgICAoaWYg KD4gaCAwKSAoc2V0cSBmbXQgKGNvbmNhdCBmbXQgIiVkIGhvdXIiIChpZiAoPiBoIDEpICJzIiAi IikgIiAiKQ0KCQkgICAgICBsIChwdXNoIGggbCkpKQ0KICAgIChpZiAoPiBtIDApIChzZXRxIGZt dCAoY29uY2F0IGZtdCAiJWQgbWludXRlIiAoaWYgKD4gbSAxKSAicyIgIiIpICIgIikNCgkJICAg ICAgbCAocHVzaCBtIGwpKSkNCiAgICAoYXBwbHkgJ2Zvcm1hdCBmbXQgKG5yZXZlcnNlIGwpKSkp DQoNCihkZWZ1biBvcmctdGltZS1zdHJpbmctdG8tdGltZSAocyAmb3B0aW9uYWwgYnVmZmVyIHBv cykNCiAgIkNvbnZlcnQgYSB0aW1lc3RhbXAgc3RyaW5nIGludG8gaW50ZXJuYWwgdGltZS4iDQog IChjb25kaXRpb24tY2FzZSBlcnJkYXRhDQogICAgICAoYXBwbHkgJ2VuY29kZS10aW1lIChvcmct cGFyc2UtdGltZS1zdHJpbmcgcykpDQogICAgKGVycm9yIChlcnJvciAiQmFkIHRpbWVzdGFtcCBg JXMnJXNcbkVycm9yIHdhczogJXMiDQoJCSAgcyAoaWYgKG5vdCAoYW5kIGJ1ZmZlciBwb3MpKQ0K CQkJIiINCgkJICAgICAgKGZvcm1hdCAiIGF0ICVkIGluIGJ1ZmZlciBgJXMnIiBwb3MgYnVmZmVy KSkNCgkJICAoY2RyIGVycmRhdGEpKSkpKQ0KDQooZGVmdW4gb3JnLXRpbWUtc3RyaW5nLXRvLXNl Y29uZHMgKHMpDQogICJDb252ZXJ0IGEgdGltZXN0YW1wIHN0cmluZyB0byBhIG51bWJlciBvZiBz ZWNvbmRzLiINCiAgKG9yZy1mbG9hdC10aW1lIChvcmctdGltZS1zdHJpbmctdG8tdGltZSBzKSkp DQoNCihkZWZ1biBvcmctdGltZS1zdHJpbmctdG8tYWJzb2x1dGUgKHMgJm9wdGlvbmFsIGRheW5y IHByZWZlciBzaG93LWFsbCBidWZmZXIgcG9zKQ0KICAiQ29udmVydCBhIHRpbWUgc3RhbXAgdG8g YW4gYWJzb2x1dGUgZGF5IG51bWJlci4NCklmIHRoZXJlIGlzIGEgc3BlY2lmaWVyIGZvciBhIGN5 Y2xpYyB0aW1lIHN0YW1wLCBnZXQgdGhlIGNsb3Nlc3QNCmRhdGUgdG8gREFZTlIuDQpQUkVGRVIg YW5kIFNIT1ctQUxMIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBgb3JnLWNsb3Nlc3QtZGF0ZScuDQpU aGUgdmFyaWFibGUgYGRhdGUnIGlzIGJvdW5kIGJ5IHRoZSBjYWxlbmRhciB3aGVuIHRoaXMgaXMg Y2FsbGVkLiINCiAgKGNvbmQNCiAgICgoYW5kIGRheW5yIChzdHJpbmctbWF0Y2ggIlxcYCUlXFwo KC4qKVxcKSIgcykpDQogICAgKGlmIChvcmctZGlhcnktc2V4cC1lbnRyeSAobWF0Y2gtc3RyaW5n IDEgcykgIiIgZGF0ZSkNCglkYXlucg0KICAgICAgKCsgZGF5bnIgMTAwMCkpKQ0KICAgKChhbmQg ZGF5bnIgKHN0cmluZy1tYXRjaCAiXFwrWzAtOV0rW2hkd215XSIgcykpDQogICAgKG9yZy1jbG9z ZXN0LWRhdGUgcyAoaWYgKGFuZCAoYm91bmRwICdkYXlucikgKGludGVnZXJwIGRheW5yKSkgZGF5 bnINCgkJCSAgKHRpbWUtdG8tZGF5cyAoY3VycmVudC10aW1lKSkpIChtYXRjaC1zdHJpbmcgMCBz KQ0KCQkJICBwcmVmZXIgc2hvdy1hbGwpKQ0KICAgKHQgKHRpbWUtdG8tZGF5cw0KICAgICAgIChj b25kaXRpb24tY2FzZSBlcnJkYXRhDQoJICAgKGFwcGx5ICdlbmNvZGUtdGltZSAob3JnLXBhcnNl LXRpbWUtc3RyaW5nIHMpKQ0KCSAoZXJyb3IgKGVycm9yICJCYWQgdGltZXN0YW1wIGAlcyclc1xu RXJyb3Igd2FzOiAlcyINCgkJICAgICAgIHMgKGlmIChub3QgKGFuZCBidWZmZXIgcG9zKSkNCgkJ CSAgICAgIiINCgkJCSAgIChmb3JtYXQgIiBhdCAlZCBpbiBidWZmZXIgYCVzJyIgcG9zIGJ1ZmZl cikpDQoJCSAgICAgICAoY2RyIGVycmRhdGEpKSkpKSkpKQ0KDQooZGVmdW4gb3JnLWRheXMtdG8t aXNvLXdlZWsgKGRheXMpDQogICJSZXR1cm4gdGhlIGlzbyB3ZWVrIG51bWJlci4iDQogIChyZXF1 aXJlICdjYWwtaXNvKQ0KICAoY2FyIChjYWxlbmRhci1pc28tZnJvbS1hYnNvbHV0ZSBkYXlzKSkp DQoNCihkZWZ1biBvcmctc21hbGwteWVhci10by15ZWFyICh5ZWFyKQ0KICAiQ29udmVydCAyLWRp Z2l0IHllYXJzIGludG8gNC1kaWdpdCB5ZWFycy4NCjM4LTk5IGFyZSBtYXBwZWQgaW50byAxOTM4 LTE5OTkuICAxLTM3IGFyZSBtYXBwZWQgaW50byAyMDAxLTIwMzcuDQpUaGUgeWVhciAyMDAwIGNh bm5vdCBiZSBhYmJyZXZpYXRlZC4gIEFueSB5ZWFyIGxhcmdlciB0aGFuIDk5DQppcyByZXR1cm5l ZCB1bmNoYW5nZWQuIg0KICAoaWYgKDwgeWVhciAzOCkNCiAgICAgIChzZXRxIHllYXIgKCsgMjAw MCB5ZWFyKSkNCiAgICAoaWYgKDwgeWVhciAxMDApDQoJKHNldHEgeWVhciAoKyAxOTAwIHllYXIp KSkpDQogIHllYXIpDQoNCihkZWZ1biBvcmctdGltZS1mcm9tLWFic29sdXRlIChkKQ0KICAiUmV0 dXJuIHRoZSB0aW1lIGNvcnJlc3BvbmRpbmcgdG8gZGF0ZSBELg0KRCBtYXkgYmUgYW4gYWJzb2x1 dGUgZGF5IG51bWJlciwgb3IgYSBjYWxlbmRhci10eXBlIGxpc3QgKG1vbnRoIGRheSB5ZWFyKS4i DQogIChpZiAobnVtYmVycCBkKSAoc2V0cSBkIChjYWxlbmRhci1ncmVnb3JpYW4tZnJvbS1hYnNv bHV0ZSBkKSkpDQogIChlbmNvZGUtdGltZSAwIDAgMCAobnRoIDEgZCkgKGNhciBkKSAobnRoIDIg ZCkpKQ0KDQooZGVmdW4gb3JnLWNhbGVuZGFyLWhvbGlkYXkgKCkNCiAgIkxpc3Qgb2YgaG9saWRh eXMsIGZvciBEaWFyeSBkaXNwbGF5IGluIE9yZy1tb2RlLiINCiAgKHJlcXVpcmUgJ2hvbGlkYXlz KQ0KICAobGV0ICgoaGwgKGZ1bmNhbGwNCgkgICAgIChpZiAoZmJvdW5kcCAnY2FsZW5kYXItY2hl Y2staG9saWRheXMpDQoJCSAnY2FsZW5kYXItY2hlY2staG9saWRheXMgJ2NoZWNrLWNhbGVuZGFy LWhvbGlkYXlzKSBkYXRlKSkpDQogICAgKGlmIGhsIChtYXBjb25jYXQgJ2lkZW50aXR5IGhsICI7 ICIpKSkpDQoNCihkZWZ1biBvcmctZGlhcnktc2V4cC1lbnRyeSAoc2V4cCBlbnRyeSBkYXRlKQ0K ICAiUHJvY2VzcyBhIFNFWFAgZGlhcnkgRU5UUlkgZm9yIERBVEUuIg0KICAocmVxdWlyZSAnZGlh cnktbGliKQ0KICAobGV0ICgocmVzdWx0IChpZiBjYWxlbmRhci1kZWJ1Zy1zZXhwDQogICAgICAg ICAgICAgICAgICAgIChsZXQgKChzdGFjay10cmFjZS1vbi1lcnJvciB0KSkNCiAgICAgICAgICAg ICAgICAgICAgICAoZXZhbCAoY2FyIChyZWFkLWZyb20tc3RyaW5nIHNleHApKSkpDQogICAgICAg ICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsDQogICAgICAgICAgICAgICAgICAgICAgKGV2 YWwgKGNhciAocmVhZC1mcm9tLXN0cmluZyBzZXhwKSkpDQogICAgICAgICAgICAgICAgICAgIChl cnJvcg0KICAgICAgICAgICAgICAgICAgICAgKGJlZXApDQogICAgICAgICAgICAgICAgICAgICAo bWVzc2FnZSAiQmFkIHNleHAgYXQgbGluZSAlZCBpbiAlczogJXMiDQoJCQkgICAgICAob3JnLWN1 cnJlbnQtbGluZSkNCgkJCSAgICAgIChidWZmZXItZmlsZS1uYW1lKSBzZXhwKQ0KICAgICAgICAg ICAgICAgICAgICAgKHNsZWVwLWZvciAyKSkpKSkpDQogICAgKGNvbmQgKChzdHJpbmdwIHJlc3Vs dCkgKHNwbGl0LXN0cmluZyByZXN1bHQgIjsgIikpDQoJICAoKGFuZCAoY29uc3AgcmVzdWx0KQ0K CQkobm90IChjb25zcCAoY2RyIHJlc3VsdCkpKQ0KCQkoc3RyaW5ncCAoY2RyIHJlc3VsdCkpKSAo Y2RyIHJlc3VsdCkpDQoJICAoKGFuZCAoY29uc3AgcmVzdWx0KQ0KCQkoc3RyaW5ncCAoY2FyIHJl c3VsdCkpKSByZXN1bHQpDQoJICAocmVzdWx0IGVudHJ5KSkpKQ0KDQooZGVmdW4gb3JnLWRpYXJ5 LXRvLWljYWwtc3RyaW5nIChmcm9tYnVmKQ0KICAiR2V0IGlDYWxlbmRhciBlbnRyaWVzIGZyb20g ZGlhcnkgZW50cmllcyBpbiBidWZmZXIgRlJPTUJVRi4NClRoaXMgdXNlcyB0aGUgaWNhbGVuZGFy LmVsIGxpYnJhcnkuIg0KICAobGV0KiAoKHRtcGRpciAoaWYgKGZlYXR1cmVwICd4ZW1hY3MpDQoJ CSAgICAgKHRlbXAtZGlyZWN0b3J5KQ0KCQkgICB0ZW1wb3JhcnktZmlsZS1kaXJlY3RvcnkpKQ0K CSAodG1wZmlsZSAobWFrZS10ZW1wLW5hbWUNCgkJICAgKGV4cGFuZC1maWxlLW5hbWUgIm9yZ2lj cyIgdG1wZGlyKSkpDQoJIGJ1ZiBydG4gYiBlKQ0KICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGZy b21idWYNCiAgICAgIChpY2FsZW5kYXItZXhwb3J0LXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQt bWF4KSB0bXBmaWxlKQ0KICAgICAgKHNldHEgYnVmIChmaW5kLWJ1ZmZlci12aXNpdGluZyB0bXBm aWxlKSkNCiAgICAgIChzZXQtYnVmZmVyIGJ1ZikNCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1p bikpDQogICAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkICJeQkVHSU46VkVWRU5UIiBuaWwgdCkN CgkgIChzZXRxIGIgKG1hdGNoLWJlZ2lubmluZyAwKSkpDQogICAgICAoZ290by1jaGFyIChwb2lu dC1tYXgpKQ0KICAgICAgKGlmIChyZS1zZWFyY2gtYmFja3dhcmQgIl5FTkQ6VkVWRU5UIiBuaWwg dCkNCgkgIChzZXRxIGUgKG1hdGNoLWVuZCAwKSkpDQogICAgICAoc2V0cSBydG4gKGlmIChhbmQg YiBlKSAoY29uY2F0IChidWZmZXItc3Vic3RyaW5nIGIgZSkgIlxuIikgIiIpKSkNCiAgICAoa2ls bC1idWZmZXIgYnVmKQ0KICAgIChkZWxldGUtZmlsZSB0bXBmaWxlKQ0KICAgIHJ0bikpDQoNCihk ZWZ1biBvcmctY2xvc2VzdC1kYXRlIChzdGFydCBjdXJyZW50IGNoYW5nZSBwcmVmZXIgc2hvdy1h bGwpDQogICJGaW5kIHRoZSBkYXRlIGNsb3Nlc3QgdG8gQ1VSUkVOVCB0aGF0IGlzIGNvbnNpc3Rl bnQgd2l0aCBTVEFSVCBhbmQgQ0hBTkdFLg0KV2hlbiBQUkVGRVIgaXMgYHBhc3QnLCByZXR1cm4g YSBkYXRlIHRoYXQgaXMgZWl0aGVyIENVUlJFTlQgb3IgcGFzdC4NCldoZW4gUFJFRkVSIGlzIGBm dXR1cmUnLCByZXR1cm4gYSBkYXRlIHRoYXQgaXMgZWl0aGVyIENVUlJFTlQgb3IgZnV0dXJlLg0K V2hlbiBTSE9XLUFMTCBpcyBuaWwsIG9ubHkgcmV0dXJuIHRoZSBjdXJyZW50IG9jY3VycmVuY2Ug b2YgYSB0aW1lIHN0YW1wLiINCiAgOzsgTWFrZSB0aGUgcHJvcGVyIGxpc3RzIGZyb20gdGhlIGRh dGVzDQogIChjYXRjaCAnZXhpdA0KICAgIChsZXQgKChhMSAnKCgiaCIgLiBob3VyKQ0KCQkoImQi IC4gZGF5KQ0KCQkoInciIC4gd2VlaykNCgkJKCJtIiAuIG1vbnRoKQ0KCQkoInkiIC4geWVhcikp KQ0KCSAgKHNob3VyIChudGggMiAob3JnLXBhcnNlLXRpbWUtc3RyaW5nIHN0YXJ0KSkpDQoJICBk biBkdyBzZGF5IGNkYXkgbjEgbjIgbjANCgkgIGQgbSB5IHkxIHkyIGRhdGUxIGRhdGUyIG5tb250 aHMgbm0gbnkgbTIpDQoNCiAgICAgIChzZXRxIHN0YXJ0IChvcmctZGF0ZS10by1ncmVnb3JpYW4g c3RhcnQpDQoJICAgIGN1cnJlbnQgKG9yZy1kYXRlLXRvLWdyZWdvcmlhbg0KCQkgICAgIChpZiBz aG93LWFsbA0KCQkJIGN1cnJlbnQNCgkJICAgICAgICh0aW1lLXRvLWRheXMgKGN1cnJlbnQtdGlt ZSkpKSkNCgkgICAgc2RheSAoY2FsZW5kYXItYWJzb2x1dGUtZnJvbS1ncmVnb3JpYW4gc3RhcnQp DQoJICAgIGNkYXkgIChjYWxlbmRhci1hYnNvbHV0ZS1mcm9tLWdyZWdvcmlhbiBjdXJyZW50KSkN Cg0KICAgICAgKGlmICg8PSBjZGF5IHNkYXkpICh0aHJvdyAnZXhpdCBzZGF5KSkNCg0KICAgICAg KGlmIChzdHJpbmctbWF0Y2ggIlxcKFxcK1swLTldK1xcKVxcKFtoZHdteV1cXCkiIGNoYW5nZSkN CgkgIChzZXRxIGRuIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMSBjaGFuZ2UpKQ0K CQlkdyAoY2RyIChhc3NvYyAobWF0Y2gtc3RyaW5nIDIgY2hhbmdlKSBhMSkpKQ0KCSh1c2VyLWVy cm9yICJJbnZhbGlkIGNoYW5nZSBzcGVjaWZpZXI6ICVzIiBjaGFuZ2UpKQ0KICAgICAgKGlmIChl cSBkdyAnd2VlaykgKHNldHEgZHcgJ2RheSBkbiAoKiA3IGRuKSkpDQogICAgICAoY29uZA0KICAg ICAgICgoZXEgZHcgJ2hvdXIpDQoJKGxldCAoKG1pc3NpbmctaG91cnMNCgkgICAgICAgKG1vZCAo KyAoLSAoKiAyNCAoLSBjZGF5IHNkYXkpKSBzaG91cikgb3JnLWV4dGVuZC10b2RheS11bnRpbCkN CgkJICAgIGRuKSkpDQoJICAoc2V0cSBuMSAoaWYgKHplcm9wIG1pc3NpbmctaG91cnMpIGNkYXkN CgkJICAgICAoLSBjZGF5ICgxKyAoZmxvb3IgKC8gbWlzc2luZy1ob3VycyAyNCkpKSkpDQoJCW4y ICgrIGNkYXkgKGZsb29yICgvICgtIGRuIG1pc3NpbmctaG91cnMpIDI0KSkpKSkpDQogICAgICAg KChlcSBkdyAnZGF5KQ0KCShzZXRxIG4xICgrIHNkYXkgKCogZG4gKGZsb29yICgvICgtIGNkYXkg c2RheSkgZG4pKSkpDQoJICAgICAgbjIgKCsgbjEgZG4pKSkNCiAgICAgICAoKGVxIGR3ICd5ZWFy KQ0KCShzZXRxIGQgKG50aCAxIHN0YXJ0KSBtIChjYXIgc3RhcnQpIHkxIChudGggMiBzdGFydCkg eTIgKG50aCAyIGN1cnJlbnQpKQ0KCShzZXRxIHkxICgrICgqIChmbG9vciAoLyAoLSB5MiB5MSkg ZG4pKSBkbikgeTEpKQ0KCShzZXRxIGRhdGUxIChsaXN0IG0gZCB5MSkNCgkgICAgICBuMSAoY2Fs ZW5kYXItYWJzb2x1dGUtZnJvbS1ncmVnb3JpYW4gZGF0ZTEpDQoJICAgICAgZGF0ZTIgKGxpc3Qg bSBkICgrIHkxICgqIChpZiAoPCBuMSBjZGF5KSAxIC0xKSBkbikpKQ0KCSAgICAgIG4yIChjYWxl bmRhci1hYnNvbHV0ZS1mcm9tLWdyZWdvcmlhbiBkYXRlMikpKQ0KICAgICAgICgoZXEgZHcgJ21v bnRoKQ0KCTs7IGFwcHJveCBudW1iZXIgb2YgbW9udGggYmV0d2VlbiB0aGUgdHdvIGRhdGVzDQoJ KHNldHEgbm1vbnRocyAoZmxvb3IgKC8gKC0gY2RheSBzZGF5KSAzMC40MzY4NzUpKSkNCgk7OyBI b3cgb2Z0ZW4gZG9lcyBkbiBmaXQgaW4gdGhlcmU/DQoJKHNldHEgZCAobnRoIDEgc3RhcnQpIG0g KGNhciBzdGFydCkgeSAobnRoIDIgc3RhcnQpDQoJICAgICAgbm0gKCogZG4gKG1heCAwICgxLSAo Zmxvb3IgKC8gbm1vbnRocyBkbikpKSkpDQoJICAgICAgbSAoKyBtIG5tKQ0KCSAgICAgIG55IChm bG9vciAoLyBtIDEyKSkNCgkgICAgICB5ICgrIHkgbnkpDQoJICAgICAgbSAoLSBtICgqIG55IDEy KSkpDQoJKHdoaWxlICg+IG0gMTIpIChzZXRxIG0gKC0gbSAxMikgeSAoMSsgeSkpKQ0KCShzZXRx IG4xIChjYWxlbmRhci1hYnNvbHV0ZS1mcm9tLWdyZWdvcmlhbiAobGlzdCBtIGQgeSkpKQ0KCShz ZXRxIG0yICgrIG0gZG4pIHkyIHkpDQoJKGlmICg+IG0yIDEyKSAoc2V0cSB5MiAoMSsgeTIpIG0y ICgtIG0yIDEyKSkpDQoJKHNldHEgbjIgKGNhbGVuZGFyLWFic29sdXRlLWZyb20tZ3JlZ29yaWFu IChsaXN0IG0yIGQgeTIpKSkNCgkod2hpbGUgKDw9IG4yIGNkYXkpDQoJICAoc2V0cSBuMSBuMiBt IG0yIHkgeTIpDQoJICAoc2V0cSBtMiAoKyBtIGRuKSB5MiB5KQ0KCSAgKGlmICg+IG0yIDEyKSAo c2V0cSB5MiAoMSsgeTIpIG0yICgtIG0yIDEyKSkpDQoJICAoc2V0cSBuMiAoY2FsZW5kYXItYWJz b2x1dGUtZnJvbS1ncmVnb3JpYW4gKGxpc3QgbTIgZCB5MikpKSkpKQ0KICAgICAgOzsgTWFrZSBz dXJlIG4xIGlzIHRoZSBlYXJsaWVyIGRhdGUNCiAgICAgIChzZXRxIG4wIG4xICBuMSAobWluIG4x IG4yKSAgbjIgKG1heCBuMCBuMikpDQogICAgICAoaWYgc2hvdy1hbGwNCgkgIChjb25kDQoJICAg KChlcSBwcmVmZXIgJ3Bhc3QpICAgKGlmICg9IGNkYXkgbjIpIG4yIG4xKSkNCgkgICAoKGVxIHBy ZWZlciAnZnV0dXJlKSAoaWYgKD0gY2RheSBuMSkgbjEgbjIpKQ0KCSAgICh0IChpZiAoPiAoYWJz ICgtIGNkYXkgbjEpKSAoYWJzICgtIGNkYXkgbjIpKSkgbjIgbjEpKSkNCgkoY29uZA0KCSAoKGVx IHByZWZlciAncGFzdCkgICAoaWYgKD0gY2RheSBuMikgbjIgbjEpKQ0KCSAoKGVxIHByZWZlciAn ZnV0dXJlKSAoaWYgKD0gY2RheSBuMSkgbjEgbjIpKQ0KCSAodCAoaWYgKD0gY2RheSBuMSkgbjEg bjIpKSkpKSkpDQoNCihkZWZ1biBvcmctZGF0ZS10by1ncmVnb3JpYW4gKGRhdGUpDQogICJUdXJu IGFueSBzcGVjaWZpY2F0aW9uIG9mIERBVEUgaW50byBhIEdyZWdvcmlhbiBkYXRlIGZvciB0aGUg Y2FsZW5kYXIuIg0KICAoY29uZCAoKGludGVnZXJwIGRhdGUpIChjYWxlbmRhci1ncmVnb3JpYW4t ZnJvbS1hYnNvbHV0ZSBkYXRlKSkNCgkoKGFuZCAobGlzdHAgZGF0ZSkgKD0gKGxlbmd0aCBkYXRl KSAzKSkgZGF0ZSkNCgkoKHN0cmluZ3AgZGF0ZSkNCgkgKHNldHEgZGF0ZSAob3JnLXBhcnNlLXRp bWUtc3RyaW5nIGRhdGUpKQ0KCSAobGlzdCAobnRoIDQgZGF0ZSkgKG50aCAzIGRhdGUpIChudGgg NSBkYXRlKSkpDQoJKChsaXN0cCBkYXRlKQ0KCSAobGlzdCAobnRoIDQgZGF0ZSkgKG50aCAzIGRh dGUpIChudGggNSBkYXRlKSkpKSkNCg0KKGRlZnVuIG9yZy1wYXJzZS10aW1lLXN0cmluZyAocyAm b3B0aW9uYWwgbm9kZWZhdWx0KQ0KICAiUGFyc2UgdGhlIHN0YW5kYXJkIE9yZy1tb2RlIHRpbWUg c3RyaW5nLg0KVGhpcyBzaG91bGQgYmUgYSBsb3QgZmFzdGVyIHRoYW4gdGhlIG5vcm1hbCBgcGFy c2UtdGltZS1zdHJpbmcnLg0KSWYgdGltZSBpcyBub3QgZ2l2ZW4sIGRlZmF1bHRzIHRvIDA6MDAu ICBIb3dldmVyLCB3aXRoIG9wdGlvbmFsIE5PREVGQVVMVCwNCmhvdXIgYW5kIG1pbnV0ZSBmaWVs ZHMgd2lsbCBiZSBuaWwgaWYgbm90IGdpdmVuLiINCiAgKGNvbmQgKChzdHJpbmctbWF0Y2ggb3Jn LXRzLXJlZ2V4cDAgcykNCgkgKGxpc3QgMA0KCSAgICAgICAoaWYgKG9yIChtYXRjaC1iZWdpbm5p bmcgOCkgKG5vdCBub2RlZmF1bHQpKQ0KCQkgICAoc3RyaW5nLXRvLW51bWJlciAob3IgKG1hdGNo LXN0cmluZyA4IHMpICIwIikpKQ0KCSAgICAgICAoaWYgKG9yIChtYXRjaC1iZWdpbm5pbmcgNykg KG5vdCBub2RlZmF1bHQpKQ0KCQkgICAoc3RyaW5nLXRvLW51bWJlciAob3IgKG1hdGNoLXN0cmlu ZyA3IHMpICIwIikpKQ0KCSAgICAgICAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDQg cykpDQoJICAgICAgIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMyBzKSkNCgkgICAg ICAgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAyIHMpKQ0KCSAgICAgICBuaWwgbmls IG5pbCkpDQoJKChzdHJpbmctbWF0Y2ggIl48W14+XSs+JCIgcykNCgkgKGRlY29kZS10aW1lIChz ZWNvbmRzLXRvLXRpbWUgKG9yZy1tYXRjaGVyLXRpbWUgcykpKSkNCgkodCAoZXJyb3IgIk5vdCBh IHN0YW5kYXJkIE9yZy1tb2RlIHRpbWUgc3RyaW5nOiAlcyIgcykpKSkNCg0KKGRlZnVuIG9yZy10 aW1lc3RhbXAtdXAgKCZvcHRpb25hbCBhcmcpDQogICJJbmNyZWFzZSB0aGUgZGF0ZSBpdGVtIGF0 IHRoZSBjdXJzb3IgYnkgb25lLg0KSWYgdGhlIGN1cnNvciBpcyBvbiB0aGUgeWVhciwgY2hhbmdl IHRoZSB5ZWFyLiAgSWYgaXQgaXMgb24gdGhlIG1vbnRoLA0KdGhlIGRheSBvciB0aGUgdGltZSwg Y2hhbmdlIHRoYXQuDQpXaXRoIHByZWZpeCBBUkcsIGNoYW5nZSBieSB0aGF0IG1hbnkgdW5pdHMu Ig0KICAoaW50ZXJhY3RpdmUgInAiKQ0KICAob3JnLXRpbWVzdGFtcC1jaGFuZ2UgKHByZWZpeC1u dW1lcmljLXZhbHVlIGFyZykgbmlsICd1cGRvd24pKQ0KDQooZGVmdW4gb3JnLXRpbWVzdGFtcC1k b3duICgmb3B0aW9uYWwgYXJnKQ0KICAiRGVjcmVhc2UgdGhlIGRhdGUgaXRlbSBhdCB0aGUgY3Vy c29yIGJ5IG9uZS4NCklmIHRoZSBjdXJzb3IgaXMgb24gdGhlIHllYXIsIGNoYW5nZSB0aGUgeWVh ci4gIElmIGl0IGlzIG9uIHRoZSBtb250aCwNCnRoZSBkYXkgb3IgdGhlIHRpbWUsIGNoYW5nZSB0 aGF0Lg0KV2l0aCBwcmVmaXggQVJHLCBjaGFuZ2UgYnkgdGhhdCBtYW55IHVuaXRzLiINCiAgKGlu dGVyYWN0aXZlICJwIikNCiAgKG9yZy10aW1lc3RhbXAtY2hhbmdlICgtIChwcmVmaXgtbnVtZXJp Yy12YWx1ZSBhcmcpKSBuaWwgJ3VwZG93bikpDQoNCihkZWZ1biBvcmctdGltZXN0YW1wLXVwLWRh eSAoJm9wdGlvbmFsIGFyZykNCiAgIkluY3JlYXNlIHRoZSBkYXRlIGluIHRoZSB0aW1lIHN0YW1w IGJ5IG9uZSBkYXkuDQpXaXRoIHByZWZpeCBBUkcsIGNoYW5nZSB0aGF0IG1hbnkgZGF5cy4iDQog IChpbnRlcmFjdGl2ZSAicCIpDQogIChpZiAoYW5kIChub3QgKG9yZy1hdC10aW1lc3RhbXAtcCB0 KSkNCgkgICAob3JnLWF0LWhlYWRpbmctcCkpDQogICAgICAob3JnLXRvZG8gJ3VwKQ0KICAgIChv cmctdGltZXN0YW1wLWNoYW5nZSAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSAnZGF5ICd1cGRv d24pKSkNCg0KKGRlZnVuIG9yZy10aW1lc3RhbXAtZG93bi1kYXkgKCZvcHRpb25hbCBhcmcpDQog ICJEZWNyZWFzZSB0aGUgZGF0ZSBpbiB0aGUgdGltZSBzdGFtcCBieSBvbmUgZGF5Lg0KV2l0aCBw cmVmaXggQVJHLCBjaGFuZ2UgdGhhdCBtYW55IGRheXMuIg0KICAoaW50ZXJhY3RpdmUgInAiKQ0K ICAoaWYgKGFuZCAobm90IChvcmctYXQtdGltZXN0YW1wLXAgdCkpDQoJICAgKG9yZy1hdC1oZWFk aW5nLXApKQ0KICAgICAgKG9yZy10b2RvICdkb3duKQ0KICAgIChvcmctdGltZXN0YW1wLWNoYW5n ZSAoLSAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSkgJ2RheSkgJ3VwZG93bikpDQoNCihkZWZ1 biBvcmctYXQtdGltZXN0YW1wLXAgKCZvcHRpb25hbCBpbmFjdGl2ZS1vaykNCiAgIkRldGVybWlu ZSBpZiB0aGUgY3Vyc29yIGlzIGluIG9yIGF0IGEgdGltZXN0YW1wLiINCiAgKGludGVyYWN0aXZl KQ0KICAobGV0KiAoKHRzciAoaWYgaW5hY3RpdmUtb2sgb3JnLXRzLXJlZ2V4cDMgb3JnLXRzLXJl Z2V4cDIpKQ0KCSAocG9zIChwb2ludCkpDQoJIChhbnMgKG9yIChsb29raW5nLWF0IHRzcikNCgkJ ICAoc2F2ZS1leGN1cnNpb24NCgkJICAgIChza2lwLWNoYXJzLWJhY2t3YXJkICJeWzxcblxyXHQi KQ0KCQkgICAgKGlmICg+IChwb2ludCkgKHBvaW50LW1pbikpIChiYWNrd2FyZC1jaGFyIDEpKQ0K CQkgICAgKGFuZCAobG9va2luZy1hdCB0c3IpDQoJCQkgKD4gKC0gKG1hdGNoLWVuZCAwKSBwb3Mp IC0xKSkpKSkpDQogICAgKGFuZCBhbnMNCgkgKGJvdW5kcCAnb3JnLXRzLXdoYXQpDQoJIChzZXRx IG9yZy10cy13aGF0DQoJICAgICAgIChjb25kDQoJCSgoPSBwb3MgKG1hdGNoLWJlZ2lubmluZyAw KSkgICAgICAgICAnYnJhY2tldCkNCgkJOzsgUG9pbnQgaXMgY29uc2lkZXJlZCB0byBiZSAib24g dGhlIGJyYWNrZXQiIHdoZXRoZXINCgkJOzsgaXQncyByZWFsbHkgb24gaXQgb3IgcmlnaHQgYWZ0 ZXIgaXQuDQoJCSgoPSBwb3MgKDEtIChtYXRjaC1lbmQgMCkpKSAgICAgICAgICAnYnJhY2tldCkN CgkJKCg9IHBvcyAobWF0Y2gtZW5kIDApKSAgICAgICAgICAgICAgICdhZnRlcikNCgkJKChvcmct cG9zLWluLW1hdGNoLXJhbmdlIHBvcyAyKSAgICAgICd5ZWFyKQ0KCQkoKG9yZy1wb3MtaW4tbWF0 Y2gtcmFuZ2UgcG9zIDMpICAgICAgJ21vbnRoKQ0KCQkoKG9yZy1wb3MtaW4tbWF0Y2gtcmFuZ2Ug cG9zIDcpICAgICAgJ2hvdXIpDQoJCSgob3JnLXBvcy1pbi1tYXRjaC1yYW5nZSBwb3MgOCkgICAg ICAnbWludXRlKQ0KCQkoKG9yIChvcmctcG9zLWluLW1hdGNoLXJhbmdlIHBvcyA0KQ0KCQkgICAg IChvcmctcG9zLWluLW1hdGNoLXJhbmdlIHBvcyA1KSkgJ2RheSkNCgkJKChhbmQgKD4gcG9zIChv ciAobWF0Y2gtZW5kIDgpIChtYXRjaC1lbmQgNSkpKQ0KCQkgICAgICAoPCBwb3MgKG1hdGNoLWVu ZCAwKSkpDQoJCSAoLSBwb3MgKG9yIChtYXRjaC1lbmQgOCkgKG1hdGNoLWVuZCA1KSkpKQ0KCQko dCAnZGF5KSkpKQ0KICAgIGFucykpDQoNCihkZWZ1biBvcmctdG9nZ2xlLXRpbWVzdGFtcC10eXBl ICgpDQogICJUb2dnbGUgdGhlIHR5cGUgKDxhY3RpdmU+IG9yIFtpbmFjdGl2ZV0pIG9mIGEgdGlt ZSBzdGFtcC4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKHdoZW4gKG9yZy1hdC10aW1lc3RhbXAtcCB0 KQ0KICAgIChsZXQgKChiZWcgKG1hdGNoLWJlZ2lubmluZyAwKSkgKGVuZCAobWF0Y2gtZW5kIDAp KQ0KCSAgKG1hcCAnKCg/XFsgLiAiPCIpICg/XF0gLiAiPiIpICg/PCAuICJbIikgKD8+IC4gIl0i KSkpKQ0KICAgICAgKHNhdmUtZXhjdXJzaW9uDQoJKGdvdG8tY2hhciBiZWcpDQoJKHdoaWxlIChy ZS1zZWFyY2gtZm9yd2FyZCAiW11bPD5dIiBlbmQgdCkNCgkgIChyZXBsYWNlLW1hdGNoIChjZHIg KGFzc29jIChjaGFyLWFmdGVyIChtYXRjaC1iZWdpbm5pbmcgMCkpIG1hcCkpDQoJCQkgdCB0KSkp DQogICAgICAobWVzc2FnZSAiVGltZXN0YW1wIGlzIG5vdyAlc2FjdGl2ZSINCgkgICAgICAgKGlm IChlcXVhbCAoY2hhci1hZnRlciBiZWcpID88KSAiIiAiaW4iKSkpKSkNCg0KKGRlZnVuIG9yZy1h dC1jbG9jay1sb2ctcCBuaWwNCiAgIklzIHRoZSBjdXJzb3Igb24gdGhlIGNsb2NrIGxvZyBsaW5l PyINCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKG1vdmUtYmVnaW5uaW5nLW9mLWxpbmUgMSkNCiAg ICAobG9va2luZy1hdCAiXlsgXHRdKkNMT0NLOiIpKSkNCg0KKGRlZnZhciBvcmctY2xvY2staGlz dG9yeSkgICAgICAgICAgICAgICAgICAgICA7IGRlZmluZWQgaW4gb3JnLWNsb2NrLmVsDQooZGVm dmFyIG9yZy1jbG9jay1hZGp1c3QtY2xvc2VzdCBuaWwpICAgICAgICAgIDsgZGVmaW5lZCBpbiBv cmctY2xvY2suZWwNCihkZWZ1biBvcmctdGltZXN0YW1wLWNoYW5nZSAobiAmb3B0aW9uYWwgd2hh dCB1cGRvd24gc3VwcHJlc3MtdG1wLWRlbGF5KQ0KICAiQ2hhbmdlIHRoZSBkYXRlIGluIHRoZSB0 aW1lIHN0YW1wIGF0IHBvaW50Lg0KVGhlIGRhdGUgd2lsbCBiZSBjaGFuZ2VkIGJ5IE4gdGltZXMg V0hBVC4gIFdIQVQgY2FuIGJlIGBkYXknLCBgbW9udGgnLA0KYHllYXInLCBgbWludXRlJywgYHNl Y29uZCcuICBJZiBXSEFUIGlzIG5vdCBnaXZlbiwgdGhlIGN1cnNvciBwb3NpdGlvbg0KaW4gdGhl IHRpbWVzdGFtcCBkZXRlcm1pbmVzIHdoYXQgd2lsbCBiZSBjaGFuZ2VkLg0KV2hlbiBTVVBQUkVT Uy1UTVAtREVMQVkgaXMgbm9uLW5pbCwgc3VwcHJlc3MgZGVsYXlzIGxpa2UgXCItLTJkXCIuIg0K ICAobGV0ICgob3JpZ2luIChwb2ludCkpIG9yaWdpbi1jYXQNCgl3aXRoLWhtIGluYWN0aXZlDQoJ KGRtIChtYXggKG50aCAxIG9yZy10aW1lLXN0YW1wLXJvdW5kaW5nLW1pbnV0ZXMpIDEpKQ0KCW9y Zy10cy13aGF0DQoJZXh0cmEgcmVtDQoJdHMgdGltZSB0aW1lMCBmaXhuZXh0IGNscmd4KQ0KICAg IChpZiAobm90IChvcmctYXQtdGltZXN0YW1wLXAgdCkpDQoJKHVzZXItZXJyb3IgIk5vdCBhdCBh IHRpbWVzdGFtcCIpKQ0KICAgIChpZiAoYW5kIChub3Qgd2hhdCkgKGVxIG9yZy10cy13aGF0ICdi cmFja2V0KSkNCgkob3JnLXRvZ2dsZS10aW1lc3RhbXAtdHlwZSkNCiAgICAgIDs7IFBvaW50IGlz bid0IG9uIGJyYWNrZXRzLiAgUmVtZW1iZXIgdGhlIHBhcnQgb2YgdGhlIHRpbWUtc3RhbXANCiAg ICAgIDs7IHRoZSBwb2ludCB3YXMgaW4uICBJbmRlZWQsIHNpemUgb2YgdGltZS1zdGFtcHMgbWF5 IGNoYW5nZSwNCiAgICAgIDs7IGJ1dCBwb2ludCBtdXN0IGJlIGtlcHQgaW4gdGhlIHNhbWUgY2F0 ZWdvcnkgbm9uZXRoZWxlc3MuDQogICAgICAoc2V0cSBvcmlnaW4tY2F0IG9yZy10cy13aGF0KQ0K ICAgICAgKGlmIChhbmQgKG5vdCB3aGF0KSAobm90IChlcSBvcmctdHMtd2hhdCAnZGF5KSkNCgkg ICAgICAgb3JnLWRpc3BsYXktY3VzdG9tLXRpbWVzDQoJICAgICAgIChnZXQtdGV4dC1wcm9wZXJ0 eSAocG9pbnQpICdkaXNwbGF5KQ0KCSAgICAgICAobm90IChnZXQtdGV4dC1wcm9wZXJ0eSAoMS0g KHBvaW50KSkgJ2Rpc3BsYXkpKSkNCgkgIChzZXRxIG9yZy10cy13aGF0ICdkYXkpKQ0KICAgICAg KHNldHEgb3JnLXRzLXdoYXQgKG9yIHdoYXQgb3JnLXRzLXdoYXQpDQoJICAgIGluYWN0aXZlICg9 IChjaGFyLWFmdGVyIChtYXRjaC1iZWdpbm5pbmcgMCkpID9cWykNCgkgICAgdHMgKG1hdGNoLXN0 cmluZyAwKSkNCiAgICAgIChyZXBsYWNlLW1hdGNoICIiKQ0KICAgICAgKHdoZW4gKHN0cmluZy1t YXRjaA0KCSAgICAgIlxcKFxcKC1bMDEyXVswLTldOlswLTVdWzAtOV1cXCk/XFwoICtbLitdPy0/ Wy0rXVswLTldK1toZHdteV1cXCgvWzAtOV0rW2hkd215XVxcKT9cXCkqXFwpW10+XSINCgkgICAg IHRzKQ0KCShzZXRxIGV4dHJhIChtYXRjaC1zdHJpbmcgMSB0cykpDQoJKGlmIHN1cHByZXNzLXRt cC1kZWxheQ0KCSAgICAoc2V0cSBleHRyYSAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nICIgLS1b MC05XStbaGR3bXldIiAiIiBleHRyYSkpKSkNCiAgICAgIChpZiAoc3RyaW5nLW1hdGNoICJeLlxc ezEwXFx9Lio/WzAtOV0rOlswLTldWzAtOV0iIHRzKQ0KCSAgKHNldHEgd2l0aC1obSB0KSkNCiAg ICAgIChzZXRxIHRpbWUwIChvcmctcGFyc2UtdGltZS1zdHJpbmcgdHMpKQ0KICAgICAgKHdoZW4g KGFuZCB1cGRvd24NCgkJIChlcSBvcmctdHMtd2hhdCAnbWludXRlKQ0KCQkgKG5vdCBjdXJyZW50 LXByZWZpeC1hcmcpKQ0KCTs7IFRoaXMgbG9va3MgbGlrZSBzLXVwIGFuZCBzLWRvd24uICBDaGFu Z2UgYnkgb25lIHJvdW5kaW5nIHN0ZXAuDQoJKHNldHEgbiAoKiBkbSAoY29uZCAoKD4gbiAwKSAx KSAoKDwgbiAwKSAtMSkgKHQgMCkpKSkNCgkod2hlbiAobm90ICg9IDAgKHNldHEgcmVtICglIChu dGggMSB0aW1lMCkgZG0pKSkpDQoJICAoc2V0Y2FyIChjZHIgdGltZTApICgrIChudGggMSB0aW1l MCkNCgkJCQkgKGlmICg+IG4gMCkgKC0gcmVtKSAoLSBkbSByZW0pKSkpKSkNCiAgICAgIChzZXRx IHRpbWUNCgkgICAgKGVuY29kZS10aW1lIChvciAoY2FyIHRpbWUwKSAwKQ0KCQkJICgrIChpZiAo ZXEgb3JnLXRzLXdoYXQgJ21pbnV0ZSkgbiAwKSAobnRoIDEgdGltZTApKQ0KCQkJICgrIChpZiAo ZXEgb3JnLXRzLXdoYXQgJ2hvdXIpIG4gMCkgICAobnRoIDIgdGltZTApKQ0KCQkJICgrIChpZiAo ZXEgb3JnLXRzLXdoYXQgJ2RheSkgbiAwKSAgICAobnRoIDMgdGltZTApKQ0KCQkJICgrIChpZiAo ZXEgb3JnLXRzLXdoYXQgJ21vbnRoKSBuIDApICAobnRoIDQgdGltZTApKQ0KCQkJICgrIChpZiAo ZXEgb3JnLXRzLXdoYXQgJ3llYXIpIG4gMCkgICAobnRoIDUgdGltZTApKQ0KCQkJIChudGhjZHIg NiB0aW1lMCkpKQ0KICAgICAgKHdoZW4gKGFuZCAobWVtYmVyIG9yZy10cy13aGF0ICcoaG91ciBt aW51dGUpKQ0KCQkgZXh0cmENCgkJIChzdHJpbmctbWF0Y2ggIi1cXChbMDEyXVswLTldXFwpOlxc KFswLTVdWzAtOV1cXCkiIGV4dHJhKSkNCgkoc2V0cSBleHRyYSAob3JnLW1vZGlmeS10cy1leHRy YQ0KCQkgICAgIGV4dHJhDQoJCSAgICAgKGlmIChlcSBvcmctdHMtd2hhdCAnaG91cikgMiA1KQ0K CQkgICAgIG4gZG0pKSkNCiAgICAgICh3aGVuIChpbnRlZ2VycCBvcmctdHMtd2hhdCkNCgkoc2V0 cSBleHRyYSAob3JnLW1vZGlmeS10cy1leHRyYSBleHRyYSBvcmctdHMtd2hhdCBuIGRtKSkpDQog ICAgICAoaWYgKGVxIHdoYXQgJ2NhbGVuZGFyKQ0KCSAgKGxldCAoKGNhbC1kYXRlIChvcmctZ2V0 LWRhdGUtZnJvbS1jYWxlbmRhcikpKQ0KCSAgICAoc2V0Y2FyIChudGhjZHIgNCB0aW1lMCkgKG50 aCAwIGNhbC1kYXRlKSkgOyBtb250aA0KCSAgICAoc2V0Y2FyIChudGhjZHIgMyB0aW1lMCkgKG50 aCAxIGNhbC1kYXRlKSkgOyBkYXkNCgkgICAgKHNldGNhciAobnRoY2RyIDUgdGltZTApIChudGgg MiBjYWwtZGF0ZSkpIDsgeWVhcg0KCSAgICAoc2V0Y2FyIHRpbWUwIChvciAoY2FyIHRpbWUwKSAw KSkNCgkgICAgKHNldGNhciAobnRoY2RyIDEgdGltZTApIChvciAobnRoIDEgdGltZTApIDApKQ0K CSAgICAoc2V0Y2FyIChudGhjZHIgMiB0aW1lMCkgKG9yIChudGggMiB0aW1lMCkgMCkpDQoJICAg IChzZXRxIHRpbWUgKGFwcGx5ICdlbmNvZGUtdGltZSB0aW1lMCkpKSkNCiAgICAgIDs7IEluc2Vy dCB0aGUgbmV3IHRpbWUtc3RhbXAsIGFuZCBlbnN1cmUgcG9pbnQgc3RheXMgaW4gdGhlIHNhbWUN CiAgICAgIDs7IGNhdGVnb3J5IGFzIGJlZm9yZSAoaS5lLiBub3QgYWZ0ZXIgdGhlIGxhc3QgcG9z aXRpb24gaW4gdGhhdA0KICAgICAgOzsgY2F0ZWdvcnkpLg0KICAgICAgKGxldCAoKHBvcyAocG9p bnQpKSkNCgk7OyBTdGF5IGJlZm9yZSBpbnNlcnRlZCBzdHJpbmcuIGBzYXZlLWV4Y3Vyc2lvbicg aXMgb2Ygbm8gdXNlLg0KCShzZXRxIG9yZy1sYXN0LWNoYW5nZWQtdGltZXN0YW1wDQoJICAgICAg KG9yZy1pbnNlcnQtdGltZS1zdGFtcCB0aW1lIHdpdGgtaG0gaW5hY3RpdmUgbmlsIG5pbCBleHRy YSkpDQoJKGdvdG8tY2hhciBwb3MpKQ0KICAgICAgKHNhdmUtbWF0Y2gtZGF0YQ0KCShsb29raW5n LWF0IG9yZy10cy1yZWdleHAzKQ0KCShnb3RvLWNoYXIgKGNvbmQNCgkJICAgIDs7IGBkYXknIGNh dGVnb3J5IGVuZHMgYmVmb3JlIGBob3VyJyBpZiBhbnksIG9yIGF0DQoJCSAgICA7OyB0aGUgZW5k IG9mIHRoZSBkYXkgbmFtZS4NCgkJICAgICgoZXEgb3JpZ2luLWNhdCAnZGF5KQ0KCQkgICAgICht aW4gKG9yIChtYXRjaC1iZWdpbm5pbmcgNykgKDEtIChtYXRjaC1lbmQgNSkpKSBvcmlnaW4pKQ0K CQkgICAgKChlcSBvcmlnaW4tY2F0ICdob3VyKSAobWluIChtYXRjaC1lbmQgNykgb3JpZ2luKSkN CgkJICAgICgoZXEgb3JpZ2luLWNhdCAnbWludXRlKSAobWluICgxLSAobWF0Y2gtZW5kIDgpKSBv cmlnaW4pKQ0KCQkgICAgKChpbnRlZ2VycCBvcmlnaW4tY2F0KSAobWluICgxLSAobWF0Y2gtZW5k IDApKSBvcmlnaW4pKQ0KCQkgICAgOzsgYHllYXInIGFuZCBgbW9udGgnIGhhdmUgYm90aCBmaXhl ZCBzaXplOiBwb2ludA0KCQkgICAgOzsgY291bGRuJ3QgaGF2ZSBtb3ZlZCBpbnRvIGFub3RoZXIg cGFydC4NCgkJICAgICh0IG9yaWdpbikpKSkNCiAgICAgIDs7IFVwZGF0ZSBjbG9jayBpZiBvbiBh IENMT0NLIGxpbmUuDQogICAgICAob3JnLWNsb2NrLXVwZGF0ZS10aW1lLW1heWJlKQ0KICAgICAg OzsgTWF5YmUgYWRqdXN0IHRoZSBjbG9zZXN0IGNsb2NrIGluIGBvcmctY2xvY2staGlzdG9yeScN CiAgICAgICh3aGVuIG9yZy1jbG9jay1hZGp1c3QtY2xvc2VzdA0KCShpZiAobm90IChhbmQgKG9y Zy1hdC1jbG9jay1sb2ctcCkNCgkJICAgICAgKDwgMSAobGVuZ3RoIChkZWxxIG5pbCAobWFwY2Fy ICdtYXJrZXItcG9zaXRpb24NCgkJCQkJCSAgICAgb3JnLWNsb2NrLWhpc3RvcnkpKSkpKSkNCgkg ICAgKG1lc3NhZ2UgIk5vIGNsb2NrIHRvIGFkanVzdCIpDQoJICAoY29uZCAoKHNhdmUtZXhjdXJz aW9uIDsgZml4IHByZXZpb3VzIGNsb2NrPw0KCQkgICAocmUtc2VhcmNoLWJhY2t3YXJkIG9yZy10 cy1yZWdleHAwIG5pbCB0KQ0KCQkgICAob3JnLWxvb2tpbmctYmFjayAoY29uY2F0IG9yZy1jbG9j ay1zdHJpbmcgIiBcXFsiKSkpDQoJCSAoc2V0cSBmaXhuZXh0IDEgY2xyZ3ggKGNvbmNhdCBvcmct dHMtcmVnZXhwMCAiXFxdID0+LiokIikpKQ0KCQkoKHNhdmUtZXhjdXJzaW9uIDsgZml4IG5leHQg Y2xvY2s/DQoJCSAgIChyZS1zZWFyY2gtYmFja3dhcmQgb3JnLXRzLXJlZ2V4cDAgbmlsIHQpDQoJ CSAgIChsb29raW5nLWF0IChjb25jYXQgb3JnLXRzLXJlZ2V4cDAgIlxcXSA9PiIpKSkNCgkJIChz ZXRxIGZpeG5leHQgLTEgY2xyZ3ggKGNvbmNhdCBvcmctY2xvY2stc3RyaW5nICIgXFxbIiBvcmct dHMtcmVnZXhwMCkpKSkNCgkgIChzYXZlLXdpbmRvdy1leGN1cnNpb24NCgkgICAgOzsgRmluZCBj bG9zZXN0IGNsb2NrIHRvIHBvaW50LCBhZGp1c3QgdGhlIHByZXZpb3VzL25leHQgb25lIGluIGhp c3RvcnkNCgkgICAgKGxldCogKChwIChzYXZlLWV4Y3Vyc2lvbiAob3JnLWJhY2stdG8taGVhZGlu ZyB0KSkpDQoJCSAgIChjbCAobWFwY2FyIChsYW1iZGEoYykgKGFicyAoLSAobWFya2VyLXBvc2l0 aW9uIGMpIHApKSkgb3JnLWNsb2NrLWhpc3RvcnkpKQ0KCQkgICAoY2xmaXhudGgNCgkJICAgICgr IGZpeG5leHQgKC0gKGxlbmd0aCBjbCkgKG9yIChsZW5ndGggKG1lbWJlciAoYXBwbHkgIydtaW4g Y2wpIGNsKSkgMTAwKSkpKQ0KCQkgICAoY2xmaXhwb3MgKGlmICg+IDAgY2xmaXhudGgpIG5pbCAo bnRoIGNsZml4bnRoIG9yZy1jbG9jay1oaXN0b3J5KSkpKQ0KCSAgICAgIChpZiAobm90IGNsZml4 cG9zKQ0KCQkgIChtZXNzYWdlICJObyBjbG9jayB0byBhZGp1c3QiKQ0KCQkoc2F2ZS1leGN1cnNp b24NCgkJICAob3JnLWdvdG8tbWFya2VyLW9yLWJtayBjbGZpeHBvcykNCgkJICAob3JnLXNob3ct c3VidHJlZSkNCgkJICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgY2xyZ3ggbmlsIHQpDQoJCSAg ICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpDQoJCSAgICAobGV0IChvcmctY2xvY2st YWRqdXN0LWNsb3Nlc3QpDQoJCSAgICAgIChvcmctdGltZXN0YW1wLWNoYW5nZSBuIG9yZy10cy13 aGF0IHVwZG93bikpDQoJCSAgICAobWVzc2FnZSAiQ2xvY2sgYWRqdXN0ZWQgaW4gJXMgZm9yIGhl YWRpbmc6ICVzIg0KCQkJICAgICAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSAoYnVmZmVyLWZpbGUt bmFtZSkpDQoJCQkgICAgIChvcmctZ2V0LWhlYWRpbmcgdCB0KSkpKSkpKSkpDQogICAgICA7OyBU cnkgdG8gcmVjZW50ZXIgdGhlIGNhbGVuZGFyIHdpbmRvdywgaWYgYW55Lg0KICAgICAgKGlmIChh bmQgb3JnLWNhbGVuZGFyLWZvbGxvdy10aW1lc3RhbXAtY2hhbmdlDQoJICAgICAgIChnZXQtYnVm ZmVyLXdpbmRvdyAiKkNhbGVuZGFyKiIgdCkNCgkgICAgICAgKG1lbXEgb3JnLXRzLXdoYXQgJyhk YXkgbW9udGggeWVhcikpKQ0KCSAgKG9yZy1yZWNlbnRlci1jYWxlbmRhciAodGltZS10by1kYXlz IHRpbWUpKSkpKSkNCg0KKGRlZnVuIG9yZy1tb2RpZnktdHMtZXh0cmEgKHMgcG9zIG4gZG0pDQog ICJDaGFuZ2UgdGhlIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgbGVhZC10aW1lIGFuZCByZXBlYXQg ZmllbGRzIGluIHRpbWVzdGFtcC4iDQogIChsZXQgKChpZHggJygoImQiIC4gMCkgKCJ3IiAuIDEp ICgibSIgLiAyKSAoInkiIC4gMykgKCJkIiAuIC0xKSAoInkiIC4gNCkpKQ0KCW5nIGggbSBuZXcg cmVtKQ0KICAgICh3aGVuIChzdHJpbmctbWF0Y2ggIlxcKC1cXChbMDEyXVswLTldXFwpOlxcKFsw LTVdWzAtOV1cXClcXCk/XFwoICtcXCtcXChbMC05XStcXClcXChbZG13eV1cXClcXCk/XFwoICst XFwoWzAtOV0rXFwpXFwoW2Rtd3ldXFwpXFwpPyIgcykNCiAgICAgIChjb25kDQogICAgICAgKChv ciAob3JnLXBvcy1pbi1tYXRjaC1yYW5nZSBwb3MgMikNCgkgICAgKG9yZy1wb3MtaW4tbWF0Y2gt cmFuZ2UgcG9zIDMpKQ0KCShzZXRxIG0gKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAz IHMpKQ0KCSAgICAgIGggKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAyIHMpKSkNCgko aWYgKG9yZy1wb3MtaW4tbWF0Y2gtcmFuZ2UgcG9zIDIpDQoJICAgIChzZXRxIGggKCsgaCBuKSkN CgkgIChzZXRxIG4gKCogZG0gKG9yZy1uby13YXJuaW5ncyAoc2lnbnVtIG4pKSkpDQoJICAod2hl biAobm90ICg9IDAgKHNldHEgcmVtICglIG0gZG0pKSkpDQoJICAgIChzZXRxIG0gKCsgbSAoaWYg KD4gbiAwKSAoLSByZW0pICgtIGRtIHJlbSkpKSkpDQoJICAoc2V0cSBtICgrIG0gbikpKQ0KCShp ZiAoPCBtIDApIChzZXRxIG0gKCsgbSA2MCkgaCAoMS0gaCkpKQ0KCShpZiAoPiBtIDU5KSAoc2V0 cSBtICgtIG0gNjApIGggKDErIGgpKSkNCgkoc2V0cSBoIChtaW4gMjQgKG1heCAwIGgpKSkNCgko c2V0cSBuZyAxIG5ldyAoZm9ybWF0ICItJTAyZDolMDJkIiBoIG0pKSkNCiAgICAgICAoKG9yZy1w b3MtaW4tbWF0Y2gtcmFuZ2UgcG9zIDYpDQoJKHNldHEgbmcgNiBuZXcgKGNhciAocmFzc29jICgr IG4gKGNkciAoYXNzb2MgKG1hdGNoLXN0cmluZyA2IHMpIGlkeCkpKSBpZHgpKSkpDQogICAgICAg KChvcmctcG9zLWluLW1hdGNoLXJhbmdlIHBvcyA1KQ0KCShzZXRxIG5nIDUgbmV3IChmb3JtYXQg IiVkIiAobWF4IDEgKCsgbiAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDUgcykpKSkp KSkNCg0KICAgICAgICgob3JnLXBvcy1pbi1tYXRjaC1yYW5nZSBwb3MgOSkNCgkoc2V0cSBuZyA5 IG5ldyAoY2FyIChyYXNzb2MgKCsgbiAoY2RyIChhc3NvYyAobWF0Y2gtc3RyaW5nIDkgcykgaWR4 KSkpIGlkeCkpKSkNCiAgICAgICAoKG9yZy1wb3MtaW4tbWF0Y2gtcmFuZ2UgcG9zIDgpDQoJKHNl dHEgbmcgOCBuZXcgKGZvcm1hdCAiJWQiIChtYXggMCAoKyBuIChzdHJpbmctdG8tbnVtYmVyICht YXRjaC1zdHJpbmcgOCBzKSkpKSkpKSkNCg0KICAgICAgKHdoZW4gbmcNCgkoc2V0cSBzIChjb25j YXQNCgkJIChzdWJzdHJpbmcgcyAwIChtYXRjaC1iZWdpbm5pbmcgbmcpKQ0KCQkgbmV3DQoJCSAo c3Vic3RyaW5nIHMgKG1hdGNoLWVuZCBuZykpKSkpKQ0KICAgIHMpKQ0KDQooZGVmdW4gb3JnLXJl Y2VudGVyLWNhbGVuZGFyIChkYXRlKQ0KICAiSWYgdGhlIGNhbGVuZGFyIGlzIHZpc2libGUsIHJl Y2VudGVyIGl0IHRvIERBVEUuIg0KICAobGV0ICgoY3dpbiAoZ2V0LWJ1ZmZlci13aW5kb3cgIipD YWxlbmRhcioiIHQpKSkNCiAgICAod2hlbiBjd2luDQogICAgICAobGV0ICgoY2FsZW5kYXItbW92 ZS1ob29rIG5pbCkpDQoJKHdpdGgtc2VsZWN0ZWQtd2luZG93IGN3aW4NCgkgIChjYWxlbmRhci1n b3RvLWRhdGUgKGlmIChsaXN0cCBkYXRlKSBkYXRlDQoJCQkJKGNhbGVuZGFyLWdyZWdvcmlhbi1m cm9tLWFic29sdXRlIGRhdGUpKSkpKSkpKQ0KDQooZGVmdW4gb3JnLWdvdG8tY2FsZW5kYXIgKCZv cHRpb25hbCBhcmcpDQogICJHbyB0byB0aGUgRW1hY3MgY2FsZW5kYXIgYXQgdGhlIGN1cnJlbnQg ZGF0ZS4NCklmIHRoZXJlIGlzIGEgdGltZSBzdGFtcCBpbiB0aGUgY3VycmVudCBsaW5lLCBnbyB0 byB0aGF0IGRhdGUuDQpBIHByZWZpeCBBUkcgY2FuIGJlIHVzZWQgdG8gZm9yY2UgdGhlIGN1cnJl bnQgZGF0ZS4iDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChsZXQgKCh0c3Igb3JnLXRzLXJlZ2V4 cCkgZGlmZg0KCShjYWxlbmRhci1tb3ZlLWhvb2sgbmlsKQ0KCShjYWxlbmRhci12aWV3LWhvbGlk YXlzLWluaXRpYWxseS1mbGFnIG5pbCkNCgkoY2FsZW5kYXItdmlldy1kaWFyeS1pbml0aWFsbHkt ZmxhZyBuaWwpKQ0KICAgIChpZiAob3IgKG9yZy1hdC10aW1lc3RhbXAtcCkNCgkgICAgKHNhdmUt ZXhjdXJzaW9uDQoJICAgICAgKGJlZ2lubmluZy1vZi1saW5lIDEpDQoJICAgICAgKGxvb2tpbmct YXQgKGNvbmNhdCAiLioiIHRzcikpKSkNCgkobGV0ICgoZDEgKHRpbWUtdG8tZGF5cyAoY3VycmVu dC10aW1lKSkpDQoJICAgICAgKGQyICh0aW1lLXRvLWRheXMNCgkJICAgKG9yZy10aW1lLXN0cmlu Zy10by10aW1lIChtYXRjaC1zdHJpbmcgMSkpKSkpDQoJICAoc2V0cSBkaWZmICgtIGQyIGQxKSkp KQ0KICAgIChjYWxlbmRhcikNCiAgICAoY2FsZW5kYXItZ290by10b2RheSkNCiAgICAoaWYgKGFu ZCBkaWZmIChub3QgYXJnKSkgKGNhbGVuZGFyLWZvcndhcmQtZGF5IGRpZmYpKSkpDQoNCihkZWZ1 biBvcmctZ2V0LWRhdGUtZnJvbS1jYWxlbmRhciAoKQ0KICAiUmV0dXJuIGEgbGlzdCAobW9udGgg ZGF5IHllYXIpIG9mIGRhdGUgYXQgcG9pbnQgaW4gY2FsZW5kYXIuIg0KICAod2l0aC1jdXJyZW50 LWJ1ZmZlciAiKkNhbGVuZGFyKiINCiAgICAoc2F2ZS1tYXRjaC1kYXRhDQogICAgICAoY2FsZW5k YXItY3Vyc29yLXRvLWRhdGUpKSkpDQoNCihkZWZ1biBvcmctZGF0ZS1mcm9tLWNhbGVuZGFyICgp DQogICJJbnNlcnQgdGltZSBzdGFtcCBjb3JyZXNwb25kaW5nIHRvIGN1cnNvciBkYXRlIGluICpD YWxlbmRhciogYnVmZmVyLg0KSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHRpbWUgc3RhbXAgYXQgdGhl IGN1cnNvciBwb3NpdGlvbiwgdXBkYXRlIGl0LiINCiAgKGludGVyYWN0aXZlKQ0KICAoaWYgKG9y Zy1hdC10aW1lc3RhbXAtcCB0KQ0KICAgICAgKG9yZy10aW1lc3RhbXAtY2hhbmdlIDAgJ2NhbGVu ZGFyKQ0KICAgIChsZXQgKChjYWwtZGF0ZSAob3JnLWdldC1kYXRlLWZyb20tY2FsZW5kYXIpKSkN CiAgICAgIChvcmctaW5zZXJ0LXRpbWUtc3RhbXANCiAgICAgICAoZW5jb2RlLXRpbWUgMCAwIDAg KG50aCAxIGNhbC1kYXRlKSAoY2FyIGNhbC1kYXRlKSAobnRoIDIgY2FsLWRhdGUpKSkpKSkNCg0K KGRlZmN1c3RvbSBvcmctZWZmb3J0LWR1cmF0aW9ucw0KICBgKCgiaCIgLiA2MCkNCiAgICAoImQi IC4gLCgqIDYwIDgpKQ0KICAgICgidyIgLiAsKCogNjAgOCA1KSkNCiAgICAoIm0iIC4gLCgqIDYw IDggNSA0KSkNCiAgICAoInkiIC4gLCgqIDYwIDggNSA0MCkpKQ0KICAiQ29udmVyc2lvbiBmYWN0 b3IgdG8gbWludXRlcyBmb3IgYW4gZWZmb3J0IG1vZGlmaWVyLg0KDQpFYWNoIGVudHJ5IGhhcyB0 aGUgZm9ybSAoTU9ESUZJRVIgLiBNSU5VVEVTKS4NCg0KSW4gYW4gZWZmb3J0IHN0cmluZywgYSBu dW1iZXIgZm9sbG93ZWQgYnkgTU9ESUZJRVIgaXMgbXVsdGlwbGllZA0KYnkgdGhlIHNwZWNpZmll ZCBudW1iZXIgb2YgTUlOVVRFUyB0byBvYnRhaW4gYW4gZWZmb3J0IGluDQptaW51dGVzLg0KDQpG b3IgZXhhbXBsZSwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgKChcImhvdXJzXCIg LiA2MCkpLCB0aGVuIGFuDQplZmZvcnQgc3RyaW5nIFwiMmhvdXJzXCIgaXMgZXF1aXZhbGVudCB0 byAxMjAgbWludXRlcy4iDQogIDpncm91cCAnb3JnLWFnZW5kYQ0KICA6dmVyc2lvbiAiMjQuMSIN CiAgOnR5cGUgJyhhbGlzdCA6a2V5LXR5cGUgKHN0cmluZyA6dGFnICJNb2RpZmllciIpDQoJCTp2 YWx1ZS10eXBlIChudW1iZXIgOnRhZyAiTWludXRlcyIpKSkNCg0KKGRlZnVuIG9yZy1taW51dGVz LXRvLWNsb2Nrc3VtLXN0cmluZyAobSkNCiAgIkZvcm1hdCBudW1iZXIgb2YgbWludXRlcyBhcyBh IGNsb2Nrc3VtIHN0cmluZy4NClRoZSBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSBgb3JnLXRpbWUt Y2xvY2tzdW0tZm9ybWF0JywNCmBvcmctdGltZS1jbG9ja3N1bS11c2UtZnJhY3Rpb25hbCcgYW5k DQpgb3JnLXRpbWUtY2xvY2tzdW0tZnJhY3Rpb25hbC1mb3JtYXQnIGFuZA0KYG9yZy10aW1lLWNs b2Nrc3VtLXVzZS1lZmZvcnQtZHVyYXRpb25zJy4iDQogIChsZXQgKChjbG9ja3N1bSAiIikNCgko bSAocm91bmQgbSkpIDsgRG9uJ3QgYWxsb3cgZnJhY3Rpb25zIG9mIG1pbnV0ZXMNCgloIGQgdyBt byB5IGZtdCBuKQ0KICAgIChzZXRxIGggKGlmIG9yZy10aW1lLWNsb2Nrc3VtLXVzZS1lZmZvcnQt ZHVyYXRpb25zDQoJCShjZHIgKGFzc29jICJoIiBvcmctZWZmb3J0LWR1cmF0aW9ucykpIDYwKQ0K CSAgZCAoaWYgb3JnLXRpbWUtY2xvY2tzdW0tdXNlLWVmZm9ydC1kdXJhdGlvbnMNCgkJKC8gKGNk ciAoYXNzb2MgImQiIG9yZy1lZmZvcnQtZHVyYXRpb25zKSkgaCkgMjQpDQoJICB3IChpZiBvcmct dGltZS1jbG9ja3N1bS11c2UtZWZmb3J0LWR1cmF0aW9ucw0KCQkoLyAoY2RyIChhc3NvYyAidyIg b3JnLWVmZm9ydC1kdXJhdGlvbnMpKSAoKiBkIGgpKSA3KQ0KCSAgbW8gKGlmIG9yZy10aW1lLWNs b2Nrc3VtLXVzZS1lZmZvcnQtZHVyYXRpb25zDQoJCSAoLyAoY2RyIChhc3NvYyAibSIgb3JnLWVm Zm9ydC1kdXJhdGlvbnMpKSAoKiBkIGgpKSAzMCkNCgkgIHkgKGlmIG9yZy10aW1lLWNsb2Nrc3Vt LXVzZS1lZmZvcnQtZHVyYXRpb25zDQoJCSgvIChjZHIgKGFzc29jICJ5IiBvcmctZWZmb3J0LWR1 cmF0aW9ucykpICgqIGQgaCkpIDM2NSkpDQogICAgOzsgZnJhY3Rpb25hbCBmb3JtYXQNCiAgICAo aWYgb3JnLXRpbWUtY2xvY2tzdW0tdXNlLWZyYWN0aW9uYWwNCgkoY29uZA0KCSA7OyBzaW5nbGUg Zm9ybWF0IHN0cmluZw0KCSAoKHN0cmluZ3Agb3JnLXRpbWUtY2xvY2tzdW0tZnJhY3Rpb25hbC1m b3JtYXQpDQoJICAoZm9ybWF0IG9yZy10aW1lLWNsb2Nrc3VtLWZyYWN0aW9uYWwtZm9ybWF0ICgv IG0gKGZsb2F0IGgpKSkpDQoJIDs7IGNob2ljZSBvZiBmcmFjdGlvbmFsIGZvcm1hdHMgZm9yIGRp ZmZlcmVudCB0aW1lIHVuaXRzDQoJICgoYW5kIChzZXRxIGZtdCAocGxpc3QtZ2V0IG9yZy10aW1l LWNsb2Nrc3VtLWZyYWN0aW9uYWwtZm9ybWF0IDp5ZWFycykpDQoJICAgICAgICg+ICgvICh0cnVu Y2F0ZSBtKSAoKiB5IGQgaCkpIDApKQ0KCSAgKGZvcm1hdCBmbXQgKC8gbSAoKiB5IGQgKGZsb2F0 IGgpKSkpKQ0KCSAoKGFuZCAoc2V0cSBmbXQgKHBsaXN0LWdldCBvcmctdGltZS1jbG9ja3N1bS1m cmFjdGlvbmFsLWZvcm1hdCA6bW9udGhzKSkNCgkgICAgICAgKD4gKC8gKHRydW5jYXRlIG0pICgq IG1vIGQgaCkpIDApKQ0KCSAgKGZvcm1hdCBmbXQgKC8gbSAoKiBtbyBkIChmbG9hdCBoKSkpKSkN CgkgKChhbmQgKHNldHEgZm10IChwbGlzdC1nZXQgb3JnLXRpbWUtY2xvY2tzdW0tZnJhY3Rpb25h bC1mb3JtYXQgOndlZWtzKSkNCgkgICAgICAgKD4gKC8gKHRydW5jYXRlIG0pICgqIHcgZCBoKSkg MCkpDQoJICAoZm9ybWF0IGZtdCAoLyBtICgqIHcgZCAoZmxvYXQgaCkpKSkpDQoJICgoYW5kIChz ZXRxIGZtdCAocGxpc3QtZ2V0IG9yZy10aW1lLWNsb2Nrc3VtLWZyYWN0aW9uYWwtZm9ybWF0IDpk YXlzKSkNCgkgICAgICAgKD4gKC8gKHRydW5jYXRlIG0pICgqIGQgaCkpIDApKQ0KCSAgKGZvcm1h dCBmbXQgKC8gbSAoKiBkIChmbG9hdCBoKSkpKSkNCgkgKChhbmQgKHNldHEgZm10IChwbGlzdC1n ZXQgb3JnLXRpbWUtY2xvY2tzdW0tZnJhY3Rpb25hbC1mb3JtYXQgOmhvdXJzKSkNCgkgICAgICAg KD4gKC8gKHRydW5jYXRlIG0pIGgpIDApKQ0KCSAgKGZvcm1hdCBmbXQgKC8gbSAoZmxvYXQgaCkp KSkNCgkgKChzZXRxIGZtdCAocGxpc3QtZ2V0IG9yZy10aW1lLWNsb2Nrc3VtLWZyYWN0aW9uYWwt Zm9ybWF0IDptaW51dGVzKSkNCgkgIChmb3JtYXQgZm10IG0pKQ0KCSA7OyBmYWxsIGJhY2sgdG8g c21hbGxlc3QgdGltZSB1bml0IHdpdGggYSBmb3JtYXQNCgkgKChzZXRxIGZtdCAocGxpc3QtZ2V0 IG9yZy10aW1lLWNsb2Nrc3VtLWZyYWN0aW9uYWwtZm9ybWF0IDpob3VycykpDQoJICAoZm9ybWF0 IGZtdCAoLyBtIChmbG9hdCBoKSkpKQ0KCSAoKHNldHEgZm10IChwbGlzdC1nZXQgb3JnLXRpbWUt Y2xvY2tzdW0tZnJhY3Rpb25hbC1mb3JtYXQgOmRheXMpKQ0KCSAgKGZvcm1hdCBmbXQgKC8gbSAo KiBkIChmbG9hdCBoKSkpKSkNCgkgKChzZXRxIGZtdCAocGxpc3QtZ2V0IG9yZy10aW1lLWNsb2Nr c3VtLWZyYWN0aW9uYWwtZm9ybWF0IDp3ZWVrcykpDQoJICAoZm9ybWF0IGZtdCAoLyBtICgqIHcg ZCAoZmxvYXQgaCkpKSkpDQoJICgoc2V0cSBmbXQgKHBsaXN0LWdldCBvcmctdGltZS1jbG9ja3N1 bS1mcmFjdGlvbmFsLWZvcm1hdCA6bW9udGhzKSkNCgkgIChmb3JtYXQgZm10ICgvIG0gKCogbW8g ZCAoZmxvYXQgaCkpKSkpDQoJICgoc2V0cSBmbXQgKHBsaXN0LWdldCBvcmctdGltZS1jbG9ja3N1 bS1mcmFjdGlvbmFsLWZvcm1hdCA6eWVhcnMpKQ0KCSAgKGZvcm1hdCBmbXQgKC8gbSAoKiB5IGQg KGZsb2F0IGgpKSkpKSkNCiAgICAgIDs7IHN0YW5kYXJkIChub24tZnJhY3Rpb25hbCkgZm9ybWF0 LCB3aXRoIHNpbmdsZSBmb3JtYXQgc3RyaW5nDQogICAgICAoaWYgKHN0cmluZ3Agb3JnLXRpbWUt Y2xvY2tzdW0tZm9ybWF0KQ0KCSAgKGZvcm1hdCBvcmctdGltZS1jbG9ja3N1bS1mb3JtYXQgKHNl dHEgbiAoLyBtIGgpKSAoLSBtICgqIGggbikpKQ0KCTs7IHNlcGFyYXRlIGZvcm1hdHMgY29tcG9u ZW50cw0KCShhbmQgKHNldHEgZm10IChwbGlzdC1nZXQgb3JnLXRpbWUtY2xvY2tzdW0tZm9ybWF0 IDp5ZWFycykpDQoJICAgICAob3IgKD4gKHNldHEgbiAoLyAodHJ1bmNhdGUgbSkgKCogeSBkIGgp KSkgMCkNCgkJIChwbGlzdC1nZXQgb3JnLXRpbWUtY2xvY2tzdW0tZm9ybWF0IDpyZXF1aXJlLXll YXJzKSkNCgkgICAgIChzZXRxIGNsb2Nrc3VtIChjb25jYXQgY2xvY2tzdW0gKGZvcm1hdCBmbXQg bikpDQoJCSAgIG0gKC0gbSAoKiBuIHkgZCBoKSkpKQ0KCShhbmQgKHNldHEgZm10IChwbGlzdC1n ZXQgb3JnLXRpbWUtY2xvY2tzdW0tZm9ybWF0IDptb250aHMpKQ0KCSAgICAgKG9yICg+IChzZXRx IG4gKC8gKHRydW5jYXRlIG0pICgqIG1vIGQgaCkpKSAwKQ0KCQkgKHBsaXN0LWdldCBvcmctdGlt ZS1jbG9ja3N1bS1mb3JtYXQgOnJlcXVpcmUtbW9udGhzKSkNCgkgICAgIChzZXRxIGNsb2Nrc3Vt IChjb25jYXQgY2xvY2tzdW0gKGZvcm1hdCBmbXQgbikpDQoJCSAgIG0gKC0gbSAoKiBuIG1vIGQg aCkpKSkNCgkoYW5kIChzZXRxIGZtdCAocGxpc3QtZ2V0IG9yZy10aW1lLWNsb2Nrc3VtLWZvcm1h dCA6d2Vla3MpKQ0KCSAgICAgKG9yICg+IChzZXRxIG4gKC8gKHRydW5jYXRlIG0pICgqIHcgZCBo KSkpIDApDQoJCSAocGxpc3QtZ2V0IG9yZy10aW1lLWNsb2Nrc3VtLWZvcm1hdCA6cmVxdWlyZS13 ZWVrcykpDQoJICAgICAoc2V0cSBjbG9ja3N1bSAoY29uY2F0IGNsb2Nrc3VtIChmb3JtYXQgZm10 IG4pKQ0KCQkgICBtICgtIG0gKCogbiB3IGQgaCkpKSkNCgkoYW5kIChzZXRxIGZtdCAocGxpc3Qt Z2V0IG9yZy10aW1lLWNsb2Nrc3VtLWZvcm1hdCA6ZGF5cykpDQoJICAgICAob3IgKD4gKHNldHEg biAoLyAodHJ1bmNhdGUgbSkgKCogZCBoKSkpIDApDQoJCSAocGxpc3QtZ2V0IG9yZy10aW1lLWNs b2Nrc3VtLWZvcm1hdCA6cmVxdWlyZS1kYXlzKSkNCgkgICAgIChzZXRxIGNsb2Nrc3VtIChjb25j YXQgY2xvY2tzdW0gKGZvcm1hdCBmbXQgbikpDQoJCSAgIG0gKC0gbSAoKiBuIGQgaCkpKSkNCgko YW5kIChzZXRxIGZtdCAocGxpc3QtZ2V0IG9yZy10aW1lLWNsb2Nrc3VtLWZvcm1hdCA6aG91cnMp KQ0KCSAgICAgKG9yICg+IChzZXRxIG4gKC8gKHRydW5jYXRlIG0pIGgpKSAwKQ0KCQkgKHBsaXN0 LWdldCBvcmctdGltZS1jbG9ja3N1bS1mb3JtYXQgOnJlcXVpcmUtaG91cnMpKQ0KCSAgICAgKHNl dHEgY2xvY2tzdW0gKGNvbmNhdCBjbG9ja3N1bSAoZm9ybWF0IGZtdCBuKSkNCgkJICAgbSAoLSBt ICgqIG4gaCkpKSkNCgkoYW5kIChzZXRxIGZtdCAocGxpc3QtZ2V0IG9yZy10aW1lLWNsb2Nrc3Vt LWZvcm1hdCA6bWludXRlcykpDQoJICAgICAob3IgKD4gbSAwKSAocGxpc3QtZ2V0IG9yZy10aW1l LWNsb2Nrc3VtLWZvcm1hdCA6cmVxdWlyZS1taW51dGVzKSkNCgkgICAgIChzZXRxIGNsb2Nrc3Vt IChjb25jYXQgY2xvY2tzdW0gKGZvcm1hdCBmbXQgbSkpKSkNCgk7OyByZXR1cm4gZm9ybWF0dGVk IHRpbWUgZHVyYXRpb24NCgljbG9ja3N1bSkpKSkNCg0KKGRlZmFsaWFzICdvcmctbWludXRlcy10 by1oaDptbS1zdHJpbmcgJ29yZy1taW51dGVzLXRvLWNsb2Nrc3VtLXN0cmluZykNCihtYWtlLW9i c29sZXRlICdvcmctbWludXRlcy10by1oaDptbS1zdHJpbmcgJ29yZy1taW51dGVzLXRvLWNsb2Nr c3VtLXN0cmluZw0KCSAgICAgICAiT3JnIG1vZGUgdmVyc2lvbiA4LjAiKQ0KDQooZGVmdW4gb3Jn LWhvdXJzLXRvLWNsb2Nrc3VtLXN0cmluZyAobikNCiAgKG9yZy1taW51dGVzLXRvLWNsb2Nrc3Vt LXN0cmluZyAoKiBuIDYwKSkpDQoNCihkZWZ1biBvcmctaGg6bW0tc3RyaW5nLXRvLW1pbnV0ZXMg KHMpDQogICJDb252ZXJ0IGEgc3RyaW5nIEg6TU0gdG8gYSBudW1iZXIgb2YgbWludXRlcy4NCklm IHRoZSBzdHJpbmcgaXMganVzdCBhIG51bWJlciwgaW50ZXJwcmV0IGl0IGFzIG1pbnV0ZXMuDQpJ biBmYWN0LCB0aGUgZmlyc3QgaGg6bW0gb3IgbnVtYmVyIGluIHRoZSBzdHJpbmcgd2lsbCBiZSB0 YWtlbiwNCnRoZXJlIGNhbiBiZSBleHRyYSBzdHVmZiBpbiB0aGUgc3RyaW5nLg0KSWYgbm8gbnVt YmVyIGlzIGZvdW5kLCB0aGUgcmV0dXJuIHZhbHVlIGlzIDAuIg0KICAoY29uZA0KICAgKChpbnRl Z2VycCBzKSBzKQ0KICAgKChzdHJpbmctbWF0Y2ggIlxcKFswLTldK1xcKTpcXChbMC05XStcXCki IHMpDQogICAgKCsgKCogKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAxIHMpKSA2MCkN CiAgICAgICAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDIgcykpKSkNCiAgICgoc3Ry aW5nLW1hdGNoICJcXChbMC05XStcXCkiIHMpDQogICAgKHN0cmluZy10by1udW1iZXIgKG1hdGNo LXN0cmluZyAxIHMpKSkNCiAgICh0IDApKSkNCg0KKGRlZmN1c3RvbSBvcmctaW1hZ2UtYWN0dWFs LXdpZHRoIHQNCiAgIlNob3VsZCB3ZSB1c2UgdGhlIGFjdHVhbCB3aWR0aCBvZiBpbWFnZXMgd2hl biBpbmxpbmluZyB0aGVtPw0KDQpXaGVuIHNldCB0byBgdCcsIGFsd2F5cyB1c2UgdGhlIGltYWdl IHdpZHRoLg0KDQpXaGVuIHNldCB0byBhIG51bWJlciwgdXNlIGltYWdlbWFnaWNrICh3aGVuIGF2 YWlsYWJsZSkgdG8gc2V0DQp0aGUgaW1hZ2UncyB3aWR0aCB0byB0aGlzIHZhbHVlLg0KDQpXaGVu IHNldCB0byBhIG51bWJlciBpbiBhIGxpc3QsIHRyeSB0byBnZXQgdGhlIHdpZHRoIGZyb20gYW55 DQojK0FUVFIuKiBrZXl3b3JkIGlmIGl0IG1hdGNoZXMgYSB3aWR0aCBzcGVjaWZpY2F0aW9uIGxp a2UNCg0KICAjK0FUVFJfSFRNTDogOndpZHRoIDMwMHB4DQoNCmFuZCBmYWxsIGJhY2sgb24gdGhh dCBudW1iZXIgaWYgbm9uZSBpcyBmb3VuZC4NCg0KV2hlbiBzZXQgdG8gbmlsLCB0cnkgdG8gZ2V0 IHRoZSB3aWR0aCBmcm9tIGFuICMrQVRUUi4qIGtleXdvcmQNCmFuZCBmYWxsIGJhY2sgb24gdGhl IG9yaWdpbmFsIHdpZHRoIGlmIG5vbmUgaXMgZm91bmQuDQoNClRoaXMgcmVxdWlyZXMgRW1hY3Mg Pj0gMjQuMSwgYnVpbGQgd2l0aCBpbWFnZW1hZ2ljayBzdXBwb3J0LiINCiAgOmdyb3VwICdvcmct YXBwZWFyYW5jZQ0KICA6dmVyc2lvbiAiMjQuNCINCiAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAu ICI4LjAiKQ0KICA6dHlwZSAnKGNob2ljZQ0KCSAgKGNvbnN0IDp0YWcgIlVzZSB0aGUgaW1hZ2Ug d2lkdGgiIHQpDQoJICAoaW50ZWdlciA6dGFnICJVc2UgYSBudW1iZXIgb2YgcGl4ZWxzIikNCgkg IChsaXN0IDp0YWcgIlVzZSAjK0FUVFIqIG9yIGEgbnVtYmVyIG9mIHBpeGVscyIgKGludGVnZXIp KQ0KCSAgKGNvbnN0IDp0YWcgIlVzZSAjK0FUVFIqIG9yIGRvbid0IHJlc2l6ZSIgbmlsKSkpDQoN CihkZWZjdXN0b20gb3JnLWFnZW5kYS1pbmhpYml0LXN0YXJ0dXAgbmlsDQogICJJbmhpYml0IHN0 YXJ0dXAgd2hlbiBwcmVwYXJpbmcgYWdlbmRhIGJ1ZmZlcnMuDQpXaGVuIHRoaXMgdmFyaWFibGUg aXMgYHQnLCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIE9yZyBhZ2VuZGENCmJ1ZmZlcnMgaXMg aW5oaWJpdGVkOiBlLmcuIHRoZSB2aXNpYmlsaXR5IHN0YXRlIGlzIG5vdCBzZXQsIHRoZQ0KdGFi bGVzIGFyZSBub3QgcmUtYWxpZ25lZCwgZXRjLiINCiAgOnR5cGUgJ2Jvb2xlYW4NCiAgOnZlcnNp b24gIjI0LjMiDQogIDpncm91cCAnb3JnLWFnZW5kYSkNCg0KKGRlZmN1c3RvbSBvcmctYWdlbmRh LWlnbm9yZS1kcmF3ZXItcHJvcGVydGllcyBuaWwNCiAgIkF2b2lkIHVwZGF0aW5nIHRleHQgcHJv cGVydGllcyB3aGVuIGJ1aWxkaW5nIHRoZSBhZ2VuZGEuDQpQcm9wZXJ0aWVzIGFyZSB1c2VkIHRv IHByZXBhcmUgYnVmZmVycyBmb3IgZWZmb3J0IGVzdGltYXRlcywgYXBwb2ludG1lbnRzLA0KYW5k IHN1YnRyZWUtbG9jYWwgY2F0ZWdvcmllcy4NCklmIHlvdSBkb24ndCB1c2UgdGhlc2UgaW4gdGhl IGFnZW5kYSwgeW91IGNhbiBhZGQgdGhlbSB0byB0aGlzIGxpc3QgYW5kDQphZ2VuZGEgYnVpbGRp bmcgd2lsbCBiZSBhIGJpdCBmYXN0ZXIuDQpUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aXRoIHplcm8g b3IgbW9yZSBvZiB0aGUgc3ltYm9scyBgZWZmb3J0JywgYGFwcHQnLA0Kb3IgYGNhdGVnb3J5Jy4i DQogIDp0eXBlICcoc2V0IDpncmVlZHkgdA0KCSAgICAgIChjb25zdCBlZmZvcnQpDQoJICAgICAg KGNvbnN0IGFwcHQpDQoJICAgICAgKGNvbnN0IGNhdGVnb3J5KSkNCiAgOnZlcnNpb24gIjI0LjMi DQogIDpncm91cCAnb3JnLWFnZW5kYSkNCg0KKGRlZnVuIG9yZy1kdXJhdGlvbi1zdHJpbmctdG8t bWludXRlcyAocyAmb3B0aW9uYWwgb3V0cHV0LXRvLXN0cmluZykNCiAgIkNvbnZlcnQgYSBkdXJh dGlvbiBzdHJpbmcgUyB0byBtaW51dGVzLg0KDQpBIGJhcmUgbnVtYmVyIGlzIGludGVycHJldGVk IGFzIG1pbnV0ZXMsIG1vZGlmaWVycyBjYW4gYmUgc2V0IGJ5DQpjdXN0b21pemluZyBgb3JnLWVm Zm9ydC1kdXJhdGlvbnMnICh3aGljaCBzZWUpLg0KDQpFbnRyaWVzIGNvbnRhaW5pbmcgYSBjb2xv biBhcmUgaW50ZXJwcmV0ZWQgYXMgSDpNTSBieQ0KYG9yZy1oaDptbS1zdHJpbmctdG8tbWludXRl cycuIg0KICAobGV0ICgocmVzdWx0IDApDQoJKHJlIChjb25jYXQgIlxcKFswLTkuXStcXCkgKlxc KCINCgkJICAgIChyZWdleHAtb3B0IChtYXBjYXIgJ2NhciBvcmctZWZmb3J0LWR1cmF0aW9ucykp DQoJCSAgICAiXFwpIikpKQ0KICAgICh3aGlsZSAoc3RyaW5nLW1hdGNoIHJlIHMpDQogICAgICAo aW5jZiByZXN1bHQgKCogKGNkciAoYXNzb2MgKG1hdGNoLXN0cmluZyAyIHMpIG9yZy1lZmZvcnQt ZHVyYXRpb25zKSkNCgkJICAgICAgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAxIHMp KSkpDQogICAgICAoc2V0cSBzIChyZXBsYWNlLW1hdGNoICIiIG5pbCB0IHMpKSkNCiAgICAoc2V0 cSByZXN1bHQgKGZsb29yIHJlc3VsdCkpDQogICAgKGluY2YgcmVzdWx0IChvcmctaGg6bW0tc3Ry aW5nLXRvLW1pbnV0ZXMgcykpDQogICAgKGlmIG91dHB1dC10by1zdHJpbmcgKG51bWJlci10by1z dHJpbmcgcmVzdWx0KSByZXN1bHQpKSkNCg0KOzs7OyBGaWxlcw0KDQooZGVmdW4gb3JnLXNhdmUt YWxsLW9yZy1idWZmZXJzICgpDQogICJTYXZlIGFsbCBPcmctbW9kZSBidWZmZXJzIHdpdGhvdXQg dXNlciBjb25maXJtYXRpb24uIg0KICAoaW50ZXJhY3RpdmUpDQogIChtZXNzYWdlICJTYXZpbmcg YWxsIE9yZy1tb2RlIGJ1ZmZlcnMuLi4iKQ0KICAoc2F2ZS1zb21lLWJ1ZmZlcnMgdCAobGFtYmRh ICgpIChkZXJpdmVkLW1vZGUtcCAnb3JnLW1vZGUpKSkNCiAgKHdoZW4gKGZlYXR1cmVwICdvcmct aWQpIChvcmctaWQtbG9jYXRpb25zLXNhdmUpKQ0KICAobWVzc2FnZSAiU2F2aW5nIGFsbCBPcmct bW9kZSBidWZmZXJzLi4uIGRvbmUiKSkNCg0KKGRlZnVuIG9yZy1yZXZlcnQtYWxsLW9yZy1idWZm ZXJzICgpDQogICJSZXZlcnQgYWxsIE9yZy1tb2RlIGJ1ZmZlcnMuDQpQcm9tcHQgZm9yIGNvbmZp cm1hdGlvbiB3aGVuIHRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuDQpCZSBzdXJlIHlvdSBrbm93 IHdoYXQgeW91IGFyZSBkb2luZyBiZWZvcmUgbGV0dGluZyB0aGlzIGZ1bmN0aW9uDQpvdmVyd3Jp dGUgeW91ciBjaGFuZ2VzLg0KDQpUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBpbiBhIHNldHVwIHdo ZXJlIG9uZSB0cmFja3Mgb3JnIGZpbGVzDQp3aXRoIGEgdmVyc2lvbiBjb250cm9sIHN5c3RlbSwg dG8gcmV2ZXJ0IG9uIG9uZSBtYWNoaW5lIGFmdGVyIHB1bGxpbmcNCmNoYW5nZXMgZnJvbSBhbm90 aGVyLiAgSSBiZWxpZXZlIHRoZSBwcm9jZWR1cmUgbXVzdCBiZSBsaWtlIHRoaXM6DQoNCjEuIE0t eCBvcmctc2F2ZS1hbGwtb3JnLWJ1ZmZlcnMNCjIuIFB1bGwgY2hhbmdlcyBmcm9tIHRoZSBvdGhl ciBtYWNoaW5lLCByZXNvbHZlIGNvbmZsaWN0cw0KMy4gTS14IG9yZy1yZXZlcnQtYWxsLW9yZy1i dWZmZXJzIg0KICAoaW50ZXJhY3RpdmUpDQogICh1bmxlc3MgKHllcy1vci1uby1wICJSZXZlcnQg YWxsIE9yZyBidWZmZXJzIGZyb20gdGhlaXIgZmlsZXM/ICIpDQogICAgKHVzZXItZXJyb3IgIkFi b3J0IikpDQogIChzYXZlLWV4Y3Vyc2lvbg0KICAgIChzYXZlLXdpbmRvdy1leGN1cnNpb24NCiAg ICAgIChtYXBjDQogICAgICAgKGxhbWJkYSAoYikNCgkgKHdoZW4gKGFuZCAod2l0aC1jdXJyZW50 LWJ1ZmZlciBiIChkZXJpdmVkLW1vZGUtcCAnb3JnLW1vZGUpKQ0KCQkgICAgKHdpdGgtY3VycmVu dC1idWZmZXIgYiBidWZmZXItZmlsZS1uYW1lKSkNCgkgICAob3JnLXBvcC10by1idWZmZXItc2Ft ZS13aW5kb3cgYikNCgkgICAocmV2ZXJ0LWJ1ZmZlciB0ICduby1jb25maXJtKSkpDQogICAgICAg KGJ1ZmZlci1saXN0KSkNCiAgICAgICh3aGVuIChhbmQgKGZlYXR1cmVwICdvcmctaWQpIG9yZy1p ZC10cmFjay1nbG9iYWxseSkNCgkob3JnLWlkLWxvY2F0aW9ucy1sb2FkKSkpKSkNCg0KOzs7OyBB Z2VuZGEgZmlsZXMNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBvcmctc3dpdGNoYiAoJm9wdGlv bmFsIGFyZykNCiAgIlN3aXRjaCBiZXR3ZWVuIE9yZyBidWZmZXJzLg0KV2l0aCBvbmUgcHJlZml4 IGFyZ3VtZW50LCByZXN0cmljdCBhdmFpbGFibGUgYnVmZmVycyB0byBmaWxlcy4NCldpdGggdHdv IHByZWZpeCBhcmd1bWVudHMsIHJlc3RyaWN0IGF2YWlsYWJsZSBidWZmZXJzIHRvIGFnZW5kYSBm aWxlcy4NCg0KRGVmYXVsdHMgdG8gYGlzd2l0Y2hiJyBmb3IgYnVmZmVyIG5hbWUgY29tcGxldGlv bi4NClNldCBgb3JnLWNvbXBsZXRpb24tdXNlLWlkbycgdG8gbWFrZSBpdCB1c2UgaWRvIGluc3Rl YWQuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAobGV0ICgoYmxpc3QgKGNvbmQgKChlcXVhbCBh cmcgJyg0KSkgIChvcmctYnVmZmVyLWxpc3QgJ2ZpbGVzKSkNCiAgICAgICAgICAgICAgICAgICAg ICgoZXF1YWwgYXJnICcoMTYpKSAob3JnLWJ1ZmZlci1saXN0ICdhZ2VuZGEpKQ0KICAgICAgICAg ICAgICAgICAgICAgKHQgICAgICAgICAgICAgICAgIChvcmctYnVmZmVyLWxpc3QpKSkpDQoJKG9y Zy1jb21wbGV0aW9uLXVzZS1pc3dpdGNoYiBvcmctY29tcGxldGlvbi11c2UtaXN3aXRjaGIpDQoJ KG9yZy1jb21wbGV0aW9uLXVzZS1pZG8gb3JnLWNvbXBsZXRpb24tdXNlLWlkbykpDQogICAgKHVu bGVzcyAob3Igb3JnLWNvbXBsZXRpb24tdXNlLWlkbyBvcmctY29tcGxldGlvbi11c2UtaXN3aXRj aGIpDQogICAgICAoc2V0cSBvcmctY29tcGxldGlvbi11c2UtaXN3aXRjaGIgdCkpDQogICAgKG9y Zy1wb3AtdG8tYnVmZmVyLXNhbWUtd2luZG93DQogICAgIChvcmctaWNvbXBsZXRpbmctcmVhZCAi T3JnIGJ1ZmZlcjogIg0KCQkJICAgKG1hcGNhciAnbGlzdCAobWFwY2FyICdidWZmZXItbmFtZSBi bGlzdCkpDQoJCQkgICBuaWwgdCkpKSkNCg0KOzs7IERlZmluZSBzb21lIG9sZGVyIG5hbWVzIHBy ZXZpb3VzbHkgdXNlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5DQo7OzsjIyNhdXRvbG9hZA0KKGRl ZmFsaWFzICdvcmctaWRvLXN3aXRjaGIgJ29yZy1zd2l0Y2hiKQ0KOzs7IyMjYXV0b2xvYWQNCihk ZWZhbGlhcyAnb3JnLWlzd2l0Y2hiICdvcmctc3dpdGNoYikNCg0KKGRlZnVuIG9yZy1idWZmZXIt bGlzdCAoJm9wdGlvbmFsIHByZWRpY2F0ZSBleGNsdWRlLXRtcCkNCiAgIlJldHVybiBhIGxpc3Qg b2YgT3JnIGJ1ZmZlcnMuDQpQUkVESUNBVEUgY2FuIGJlIGBleHBvcnQnLCBgZmlsZXMnIG9yIGBh Z2VuZGEnLg0KDQpleHBvcnQgICByZXN0cmljdCB0aGUgbGlzdCB0byBFeHBvcnQgYnVmZmVycy4N CmZpbGVzICAgIHJlc3RyaWN0IHRoZSBsaXN0IHRvIGJ1ZmZlcnMgdmlzaXRpbmcgT3JnIGZpbGVz Lg0KYWdlbmRhICAgcmVzdHJpY3QgdGhlIGxpc3QgdG8gYnVmZmVycyB2aXNpdGluZyBhZ2VuZGEg ZmlsZXMuDQoNCklmIEVYQ0xVREUtVE1QIGlzIG5vbi1uaWwsIGlnbm9yZSB0ZW1wb3JhcnkgYnVm ZmVycy4iDQogIChsZXQqICgoYmZuIG5pbCkNCgkgKGFnZW5kYS1maWxlcyAoYW5kIChlcSBwcmVk aWNhdGUgJ2FnZW5kYSkNCgkJCSAgICAobWFwY2FyICdmaWxlLXRydWVuYW1lIChvcmctYWdlbmRh LWZpbGVzIHQpKSkpDQoJIChmaWx0ZXINCgkgIChjb25kDQoJICAgKChlcSBwcmVkaWNhdGUgJ2Zp bGVzKQ0KCSAgICAobGFtYmRhIChiKSAod2l0aC1jdXJyZW50LWJ1ZmZlciBiIChkZXJpdmVkLW1v ZGUtcCAnb3JnLW1vZGUpKSkpDQoJICAgKChlcSBwcmVkaWNhdGUgJ2V4cG9ydCkNCgkgICAgKGxh bWJkYSAoYikgKHN0cmluZy1tYXRjaCAiXCpPcmcgLipFeHBvcnQiIChidWZmZXItbmFtZSBiKSkp KQ0KCSAgICgoZXEgcHJlZGljYXRlICdhZ2VuZGEpDQoJICAgIChsYW1iZGEgKGIpDQoJICAgICAg KHdpdGgtY3VycmVudC1idWZmZXIgYg0KCQkoYW5kIChkZXJpdmVkLW1vZGUtcCAnb3JnLW1vZGUp DQoJCSAgICAgKHNldHEgYmZuIChidWZmZXItZmlsZS1uYW1lIGIpKQ0KCQkgICAgIChtZW1iZXIg KGZpbGUtdHJ1ZW5hbWUgYmZuKSBhZ2VuZGEtZmlsZXMpKSkpKQ0KCSAgICh0IChsYW1iZGEgKGIp ICh3aXRoLWN1cnJlbnQtYnVmZmVyIGINCgkJCSAgICAob3IgKGRlcml2ZWQtbW9kZS1wICdvcmct bW9kZSkNCgkJCQkoc3RyaW5nLW1hdGNoICJcKk9yZyAuKkV4cG9ydCINCgkJCQkJICAgICAgKGJ1 ZmZlci1uYW1lIGIpKSkpKSkpKSkNCiAgICAoZGVscSBuaWwNCgkgIChtYXBjYXINCgkgICAobGFt YmRhKGIpDQoJICAgICAoaWYgKGFuZCAoZnVuY2FsbCBmaWx0ZXIgYikNCgkJICAgICAgKG9yIChu b3QgZXhjbHVkZS10bXApDQoJCQkgIChub3QgKHN0cmluZy1tYXRjaCAidG1wIiAoYnVmZmVyLW5h bWUgYikpKSkpDQoJCSBiDQoJICAgICAgIG5pbCkpDQoJICAgKGJ1ZmZlci1saXN0KSkpKSkNCg0K KGRlZnVuIG9yZy1hZ2VuZGEtZmlsZXMgKCZvcHRpb25hbCB1bnJlc3RyaWN0ZWQgYXJjaGl2ZXMp DQogICJHZXQgdGhlIGxpc3Qgb2YgYWdlbmRhIGZpbGVzLg0KT3B0aW9uYWwgVU5SRVNUUklDVEVE IG1lYW5zIHJldHVybiB0aGUgZnVsbCBsaXN0IGV2ZW4gaWYgYSByZXN0cmljdGlvbg0KaXMgY3Vy cmVudGx5IGluIHBsYWNlLg0KV2hlbiBBUkNISVZFUyBpcyB0LCBpbmNsdWRlIGFsbCBhcmNoaXZl IGZpbGVzIHRoYXQgYXJlIHJlYWxseSBiZWluZw0KdXNlZCBieSB0aGUgYWdlbmRhIGZpbGVzLiAg SWYgQVJDSElWRSBpcyBgaWZtb2RlJywgZG8gdGhpcyBvbmx5IGlmDQpgb3JnLWFnZW5kYS1hcmNo aXZlcy1tb2RlJyBpcyB0LiINCiAgKGxldCAoKGZpbGVzDQoJIChjb25kDQoJICAoKGFuZCAobm90 IHVucmVzdHJpY3RlZCkgKGdldCAnb3JnLWFnZW5kYS1maWxlcyAnb3JnLXJlc3RyaWN0KSkpDQoJ ICAoKHN0cmluZ3Agb3JnLWFnZW5kYS1maWxlcykgKG9yZy1yZWFkLWFnZW5kYS1maWxlLWxpc3Qp KQ0KCSAgKChsaXN0cCBvcmctYWdlbmRhLWZpbGVzKSBvcmctYWdlbmRhLWZpbGVzKQ0KCSAgKHQg KGVycm9yICJJbnZhbGlkIHZhbHVlIG9mIGBvcmctYWdlbmRhLWZpbGVzJyIpKSkpKQ0KICAgIChz ZXRxIGZpbGVzIChhcHBseSAnYXBwZW5kDQoJCSAgICAgICAobWFwY2FyIChsYW1iZGEgKGYpDQoJ CQkJIChpZiAoZmlsZS1kaXJlY3RvcnktcCBmKQ0KCQkJCSAgICAgKGRpcmVjdG9yeS1maWxlcw0K CQkJCSAgICAgIGYgdCBvcmctYWdlbmRhLWZpbGUtcmVnZXhwKQ0KCQkJCSAgIChsaXN0IGYpKSkN CgkJCSAgICAgICBmaWxlcykpKQ0KICAgICh3aGVuIG9yZy1hZ2VuZGEtc2tpcC11bmF2YWlsYWJs ZS1maWxlcw0KICAgICAgKHNldHEgZmlsZXMgKGRlbHEgbmlsDQoJCQkobWFwY2FyIChmdW5jdGlv bg0KCQkJCSAobGFtYmRhIChmaWxlKQ0KCQkJCSAgIChhbmQgKGZpbGUtcmVhZGFibGUtcCBmaWxl KSBmaWxlKSkpDQoJCQkJZmlsZXMpKSkpDQogICAgKHdoZW4gKG9yIChlcSBhcmNoaXZlcyB0KQ0K CSAgICAgIChhbmQgKGVxIGFyY2hpdmVzICdpZm1vZGUpIChlcSBvcmctYWdlbmRhLWFyY2hpdmVz LW1vZGUgdCkpKQ0KICAgICAgKHNldHEgZmlsZXMgKG9yZy1hZGQtYXJjaGl2ZS1maWxlcyBmaWxl cykpKQ0KICAgIGZpbGVzKSkNCg0KKGRlZnVuIG9yZy1hZ2VuZGEtZmlsZS1wICgmb3B0aW9uYWwg ZmlsZSkNCiAgIlJldHVybiBub24tbmlsLCBpZiBGSUxFIGlzIGFuIGFnZW5kYSBmaWxlLg0KSWYg RklMRSBpcyBvbWl0dGVkLCB1c2UgdGhlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50 DQpidWZmZXIuIg0KICAobWVtYmVyIChvciBmaWxlIChidWZmZXItZmlsZS1uYW1lKSkNCiAgICAg ICAgICAob3JnLWFnZW5kYS1maWxlcyB0KSkpDQoNCihkZWZ1biBvcmctZWRpdC1hZ2VuZGEtZmls ZS1saXN0ICgpDQogICJFZGl0IHRoZSBsaXN0IG9mIGFnZW5kYSBmaWxlcy4NCkRlcGVuZGluZyBv biBzZXR1cCwgdGhpcyBlaXRoZXIgdXNlcyBjdXN0b21pemUgdG8gZWRpdCB0aGUgdmFyaWFibGUN CmBvcmctYWdlbmRhLWZpbGVzJywgb3IgaXQgdmlzaXRzIHRoZSBmaWxlIHRoYXQgaXMgaG9sZGlu ZyB0aGUgbGlzdC4gIEluIHRoZQ0KbGF0dGVyIGNhc2UsIHRoZSBidWZmZXIgaXMgc2V0IHVwIGlu IGEgd2F5IHRoYXQgc2F2aW5nIGl0IGF1dG9tYXRpY2FsbHkga2lsbHMNCnRoZSBidWZmZXIgYW5k IHJlc3RvcmVzIHRoZSBwcmV2aW91cyB3aW5kb3cgY29uZmlndXJhdGlvbi4iDQogIChpbnRlcmFj dGl2ZSkNCiAgKGlmIChzdHJpbmdwIG9yZy1hZ2VuZGEtZmlsZXMpDQogICAgICAobGV0ICgoY3cg KGN1cnJlbnQtd2luZG93LWNvbmZpZ3VyYXRpb24pKSkNCgkoZmluZC1maWxlIG9yZy1hZ2VuZGEt ZmlsZXMpDQoJKG9yZy1zZXQtbG9jYWwgJ29yZy13aW5kb3ctY29uZmlndXJhdGlvbiBjdykNCgko b3JnLWFkZC1ob29rICdhZnRlci1zYXZlLWhvb2sNCgkJICAgICAgKGxhbWJkYSAoKQ0KCQkJKHNl dC13aW5kb3ctY29uZmlndXJhdGlvbg0KCQkJIChwcm9nMSBvcmctd2luZG93LWNvbmZpZ3VyYXRp b24NCgkJCSAgIChraWxsLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKSkpDQoJCQkob3JnLWluc3Rh bGwtYWdlbmRhLWZpbGVzLW1lbnUpDQoJCQkobWVzc2FnZSAiTmV3IGFnZW5kYSBmaWxlIGxpc3Qg aW5zdGFsbGVkIikpDQoJCSAgICAgIG5pbCAnbG9jYWwpDQoJKG1lc3NhZ2UgIiVzIiAoc3Vic3Rp dHV0ZS1jb21tYW5kLWtleXMNCgkJICAgICAgICJFZGl0IGxpc3QgYW5kIGZpbmlzaCB3aXRoIFxc W3NhdmUtYnVmZmVyXSIpKSkNCiAgICAoY3VzdG9taXplLXZhcmlhYmxlICdvcmctYWdlbmRhLWZp bGVzKSkpDQoNCihkZWZ1biBvcmctc3RvcmUtbmV3LWFnZW5kYS1maWxlLWxpc3QgKGxpc3QpDQog ICJTZXQgbmV3IHZhbHVlIGZvciB0aGUgYWdlbmRhIGZpbGUgbGlzdCBhbmQgc2F2ZSBpdCBjb3Jy ZWN0bHkuIg0KICAoaWYgKHN0cmluZ3Agb3JnLWFnZW5kYS1maWxlcykNCiAgICAgIChsZXQgKChm ZSAob3JnLXJlYWQtYWdlbmRhLWZpbGUtbGlzdCB0KSkgYiB1KQ0KCSh3aGlsZSAoc2V0cSBiIChm aW5kLWJ1ZmZlci12aXNpdGluZyBvcmctYWdlbmRhLWZpbGVzKSkNCgkgIChraWxsLWJ1ZmZlciBi KSkNCgkod2l0aC10ZW1wLWZpbGUgb3JnLWFnZW5kYS1maWxlcw0KCSAgKGluc2VydA0KCSAgICht YXBjb25jYXQNCgkgICAgKGxhbWJkYSAoZikgOzsgS2VlcCB1bi1leHBhbmRlZCBlbnRyaWVzLg0K CSAgICAgIChpZiAoc2V0cSB1IChhc3NvYyBmIGZlKSkNCgkJICAoY2RyIHUpDQoJCWYpKQ0KCSAg ICBsaXN0ICJcbiIpDQoJICAgIlxuIikpKQ0KICAgIChsZXQgKChvcmctbW9kZS1ob29rIG5pbCkg KG9yZy1pbmhpYml0LXN0YXJ0dXAgdCkNCgkgIChvcmctaW5zZXJ0LW1vZGUtbGluZS1pbi1lbXB0 eS1maWxlIG5pbCkpDQogICAgICAoc2V0cSBvcmctYWdlbmRhLWZpbGVzIGxpc3QpDQogICAgICAo Y3VzdG9taXplLXNhdmUtdmFyaWFibGUgJ29yZy1hZ2VuZGEtZmlsZXMgb3JnLWFnZW5kYS1maWxl cykpKSkNCg0KKGRlZnVuIG9yZy1yZWFkLWFnZW5kYS1maWxlLWxpc3QgKCZvcHRpb25hbCBwYWly LXdpdGgtZXhwYW5zaW9uKQ0KICAiUmVhZCB0aGUgbGlzdCBvZiBhZ2VuZGEgZmlsZXMgZnJvbSBh IGZpbGUuDQpJZiBQQUlSLVdJVEgtRVhQQU5TSU9OIGlzIHQgcmV0dXJuIHBhaXJzIHdpdGggdW4t ZXhwYW5kZWQNCmZpbGVuYW1lcywgdXNlZCBieSBgb3JnLXN0b3JlLW5ldy1hZ2VuZGEtZmlsZS1s aXN0JyB0byB3cml0ZSBiYWNrDQp1bi1leHBhbmRlZCBmaWxlIG5hbWVzLiINCiAgKHdoZW4gKGZp bGUtZGlyZWN0b3J5LXAgb3JnLWFnZW5kYS1maWxlcykNCiAgICAoZXJyb3IgImBvcmctYWdlbmRh LWZpbGVzJyBjYW5ub3QgYmUgYSBzaW5nbGUgZGlyZWN0b3J5IikpDQogICh3aGVuIChzdHJpbmdw IG9yZy1hZ2VuZGEtZmlsZXMpDQogICAgKHdpdGgtdGVtcC1idWZmZXINCiAgICAgIChpbnNlcnQt ZmlsZS1jb250ZW50cyBvcmctYWdlbmRhLWZpbGVzKQ0KICAgICAgKG1hcGNhcg0KICAgICAgIChs YW1iZGEgKGYpDQoJIChsZXQgKChlIChleHBhbmQtZmlsZS1uYW1lIChzdWJzdGl0dXRlLWluLWZp bGUtbmFtZSBmKQ0KCQkJCSAgICBvcmctZGlyZWN0b3J5KSkpDQoJICAgKGlmIHBhaXItd2l0aC1l eHBhbnNpb24NCgkgICAgICAgKGNvbnMgZSBmKQ0KCSAgICAgZSkpKQ0KICAgICAgIChvcmctc3Bs aXQtc3RyaW5nIChidWZmZXItc3RyaW5nKSAiWyBcdFxyXG5dKj9bXHJcbl1bIFx0XHJcbl0qIikp KSkpDQoNCjs7OyMjI2F1dG9sb2FkDQooZGVmdW4gb3JnLWN5Y2xlLWFnZW5kYS1maWxlcyAoKQ0K ICAiQ3ljbGUgdGhyb3VnaCB0aGUgZmlsZXMgaW4gYG9yZy1hZ2VuZGEtZmlsZXMnLg0KSWYgdGhl IGN1cnJlbnQgYnVmZmVyIHZpc2l0cyBhbiBhZ2VuZGEgZmlsZSwgZmluZCB0aGUgbmV4dCBvbmUg aW4gdGhlIGxpc3QuDQpJZiB0aGUgY3VycmVudCBidWZmZXIgZG9lcyBub3QsIGZpbmQgdGhlIGZp cnN0IGFnZW5kYSBmaWxlLiINCiAgKGludGVyYWN0aXZlKQ0KICAobGV0KiAoKGZzIChvcmctYWdl bmRhLWZpbGVzIHQpKQ0KCSAoZmlsZXMgKGFwcGVuZCBmcyAobGlzdCAoY2FyIGZzKSkpKQ0KCSAo dGNmIChpZiBidWZmZXItZmlsZS1uYW1lIChmaWxlLXRydWVuYW1lIGJ1ZmZlci1maWxlLW5hbWUp KSkNCgkgZmlsZSkNCiAgICAodW5sZXNzIGZpbGVzICh1c2VyLWVycm9yICJObyBhZ2VuZGEgZmls ZXMiKSkNCiAgICAoY2F0Y2ggJ2V4aXQNCiAgICAgICh3aGlsZSAoc2V0cSBmaWxlIChwb3AgZmls ZXMpKQ0KCShpZiAoZXF1YWwgKGZpbGUtdHJ1ZW5hbWUgZmlsZSkgdGNmKQ0KCSAgICAod2hlbiAo Y2FyIGZpbGVzKQ0KCSAgICAgIChmaW5kLWZpbGUgKGNhciBmaWxlcykpDQoJICAgICAgKHRocm93 ICdleGl0IHQpKSkpDQogICAgICAoZmluZC1maWxlIChjYXIgZnMpKSkNCiAgICAoaWYgKGJ1ZmZl ci1iYXNlLWJ1ZmZlcikgKG9yZy1wb3AtdG8tYnVmZmVyLXNhbWUtd2luZG93IChidWZmZXItYmFz ZS1idWZmZXIpKSkpKQ0KDQooZGVmdW4gb3JnLWFnZW5kYS1maWxlLXRvLWZyb250ICgmb3B0aW9u YWwgdG8tZW5kKQ0KICAiTW92ZS9hZGQgdGhlIGN1cnJlbnQgZmlsZSB0byB0aGUgdG9wIG9mIHRo ZSBhZ2VuZGEgZmlsZSBsaXN0Lg0KSWYgdGhlIGZpbGUgaXMgbm90IHByZXNlbnQgaW4gdGhlIGxp c3QsIGl0IGlzIGFkZGVkIHRvIHRoZSBmcm9udC4gIElmIGl0IGlzDQpwcmVzZW50LCBpdCBpcyBt b3ZlZCB0aGVyZS4gIFdpdGggb3B0aW9uYWwgYXJndW1lbnQgVE8tRU5ELCBhZGQvbW92ZSB0byB0 aGUNCmVuZCBvZiB0aGUgbGlzdC4iDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChsZXQgKChvcmct YWdlbmRhLXNraXAtdW5hdmFpbGFibGUtZmlsZXMgbmlsKQ0KCShmaWxlLWFsaXN0IChtYXBjYXIg KGxhbWJkYSAoeCkNCgkJCSAgICAgIChjb25zIChmaWxlLXRydWVuYW1lIHgpIHgpKQ0KCQkJICAg IChvcmctYWdlbmRhLWZpbGVzIHQpKSkNCgkoY3RmIChmaWxlLXRydWVuYW1lDQoJICAgICAgKG9y IGJ1ZmZlci1maWxlLW5hbWUNCgkJICAodXNlci1lcnJvciAiUGxlYXNlIHNhdmUgdGhlIGN1cnJl bnQgYnVmZmVyIHRvIGEgZmlsZSIpKSkpDQoJeCBoYWQpDQogICAgKHNldHEgeCAoYXNzb2MgY3Rm IGZpbGUtYWxpc3QpIGhhZCB4KQ0KDQogICAgKGlmIChub3QgeCkgKHNldHEgeCAoY29ucyBjdGYg KGFiYnJldmlhdGUtZmlsZS1uYW1lIGJ1ZmZlci1maWxlLW5hbWUpKSkpDQogICAgKGlmIHRvLWVu ZA0KCShzZXRxIGZpbGUtYWxpc3QgKGFwcGVuZCAoZGVscSB4IGZpbGUtYWxpc3QpIChsaXN0IHgp KSkNCiAgICAgIChzZXRxIGZpbGUtYWxpc3QgKGNvbnMgeCAoZGVscSB4IGZpbGUtYWxpc3QpKSkp DQogICAgKG9yZy1zdG9yZS1uZXctYWdlbmRhLWZpbGUtbGlzdCAobWFwY2FyICdjZHIgZmlsZS1h bGlzdCkpDQogICAgKG9yZy1pbnN0YWxsLWFnZW5kYS1maWxlcy1tZW51KQ0KICAgIChtZXNzYWdl ICJGaWxlICVzIHRvICVzIG9mIGFnZW5kYSBmaWxlIGxpc3QiDQoJICAgICAoaWYgaGFkICJtb3Zl ZCIgImFkZGVkIikgKGlmIHRvLWVuZCAiZW5kIiAiZnJvbnQiKSkpKQ0KDQooZGVmdW4gb3JnLXJl bW92ZS1maWxlICgmb3B0aW9uYWwgZmlsZSkNCiAgIlJlbW92ZSBjdXJyZW50IGZpbGUgZnJvbSB0 aGUgbGlzdCBvZiBmaWxlcyBpbiB2YXJpYWJsZSBgb3JnLWFnZW5kYS1maWxlcycuDQpUaGVzZSBh cmUgdGhlIGZpbGVzIHdoaWNoIGFyZSBiZWluZyBjaGVja2VkIGZvciBhZ2VuZGEgZW50cmllcy4N Ck9wdGlvbmFsIGFyZ3VtZW50IEZJTEUgbWVhbnMgdXNlIHRoaXMgZmlsZSBpbnN0ZWFkIG9mIHRo ZSBjdXJyZW50LiINCiAgKGludGVyYWN0aXZlKQ0KICAobGV0KiAoKG9yZy1hZ2VuZGEtc2tpcC11 bmF2YWlsYWJsZS1maWxlcyBuaWwpDQoJIChmaWxlIChvciBmaWxlIGJ1ZmZlci1maWxlLW5hbWUN CgkJICAgKHVzZXItZXJyb3IgIkN1cnJlbnQgYnVmZmVyIGRvZXMgbm90IHZpc2l0IGEgZmlsZSIp KSkNCgkgKHRydWUtZmlsZSAoZmlsZS10cnVlbmFtZSBmaWxlKSkNCgkgKGFmaWxlIChhYmJyZXZp YXRlLWZpbGUtbmFtZSBmaWxlKSkNCgkgKGZpbGVzIChkZWxxIG5pbCAobWFwY2FyDQoJCQkgICAo bGFtYmRhICh4KQ0KCQkJICAgICAoaWYgKGVxdWFsIHRydWUtZmlsZQ0KCQkJCQkoZmlsZS10cnVl bmFtZSB4KSkNCgkJCQkgbmlsIHgpKQ0KCQkJICAgKG9yZy1hZ2VuZGEtZmlsZXMgdCkpKSkpDQog ICAgKGlmIChub3QgKD0gKGxlbmd0aCBmaWxlcykgKGxlbmd0aCAob3JnLWFnZW5kYS1maWxlcyB0 KSkpKQ0KCShwcm9nbg0KCSAgKG9yZy1zdG9yZS1uZXctYWdlbmRhLWZpbGUtbGlzdCBmaWxlcykN CgkgIChvcmctaW5zdGFsbC1hZ2VuZGEtZmlsZXMtbWVudSkNCgkgIChtZXNzYWdlICJSZW1vdmVk IGZpbGU6ICVzIiBhZmlsZSkpDQogICAgICAobWVzc2FnZSAiRmlsZSB3YXMgbm90IGluIGxpc3Q6 ICVzIChub3QgcmVtb3ZlZCkiIGFmaWxlKSkpKQ0KDQooZGVmdW4gb3JnLWZpbGUtbWVudS1lbnRy eSAoZmlsZSkNCiAgKHZlY3RvciBmaWxlIChsaXN0ICdmaW5kLWZpbGUgZmlsZSkgdCkpDQoNCihk ZWZ1biBvcmctY2hlY2stYWdlbmRhLWZpbGUgKGZpbGUpDQogICJNYWtlIHN1cmUgRklMRSBleGlz dHMuICBJZiBub3QsIGFzayB1c2VyIHdoYXQgdG8gZG8uIg0KICAod2hlbiAobm90IChmaWxlLWV4 aXN0cy1wIGZpbGUpKQ0KICAgIChtZXNzYWdlICJOb24tZXhpc3RlbnQgYWdlbmRhIGZpbGUgJXMu ICBbUl1lbW92ZSBmcm9tIGxpc3Qgb3IgW0FdYm9ydD8iDQoJICAgICAoYWJicmV2aWF0ZS1maWxl LW5hbWUgZmlsZSkpDQogICAgKGxldCAoKHIgKGRvd25jYXNlIChyZWFkLWNoYXItZXhjbHVzaXZl KSkpKQ0KICAgICAgKGNvbmQNCiAgICAgICAoKGVxdWFsIHIgP3IpDQoJKG9yZy1yZW1vdmUtZmls ZSBmaWxlKQ0KCSh0aHJvdyAnbmV4dGZpbGUgdCkpDQogICAgICAgKHQgKGVycm9yICJBYm9ydCIp KSkpKSkNCg0KKGRlZnVuIG9yZy1nZXQtYWdlbmRhLWZpbGUtYnVmZmVyIChmaWxlKQ0KICAiR2V0 IGEgYnVmZmVyIHZpc2l0aW5nIEZJTEUuICBJZiB0aGUgYnVmZmVyIG5lZWRzIHRvIGJlIGNyZWF0 ZWQsIGFkZA0KaXQgdG8gdGhlIGxpc3Qgb2YgYnVmZmVycyB3aGljaCBtaWdodCBiZSByZWxlYXNl ZCBsYXRlci4iDQogIChsZXQgKChidWYgKG9yZy1maW5kLWJhc2UtYnVmZmVyLXZpc2l0aW5nIGZp bGUpKSkNCiAgICAoaWYgYnVmDQoJYnVmIDsganVzdCByZXR1cm4gaXQNCiAgICAgIDs7IE1ha2Ug YSBuZXcgYnVmZmVyIGFuZCByZW1lbWJlciBpdA0KICAgICAgKHNldHEgYnVmIChmaW5kLWZpbGUt bm9zZWxlY3QgZmlsZSkpDQogICAgICAoaWYgYnVmIChwdXNoIGJ1ZiBvcmctYWdlbmRhLW5ldy1i dWZmZXJzKSkNCiAgICAgIGJ1ZikpKQ0KDQooZGVmdW4gb3JnLXJlbGVhc2UtYnVmZmVycyAoYmxp c3QpDQogICJSZWxlYXNlIGFsbCBidWZmZXJzIGluIGxpc3QsIGFza2luZyB0aGUgdXNlciBmb3Ig Y29uZmlybWF0aW9uIHdoZW4gbmVlZGVkLg0KV2hlbiBhIGJ1ZmZlciBpcyB1bm1vZGlmaWVkLCBp dCBpcyBqdXN0IGtpbGxlZC4gIFdoZW4gbW9kaWZpZWQsIGl0IGlzIHNhdmVkDQpcKGlmIHRoZSB1 c2VyIGFncmVlcykgYW5kIHRoZW4ga2lsbGVkLiINCiAgKGxldCAoYnVmIGZpbGUpDQogICAgKHdo aWxlIChzZXRxIGJ1ZiAocG9wIGJsaXN0KSkNCiAgICAgIChzZXRxIGZpbGUgKGJ1ZmZlci1maWxl LW5hbWUgYnVmKSkNCiAgICAgICh3aGVuIChhbmQgKGJ1ZmZlci1tb2RpZmllZC1wIGJ1ZikNCgkJ IGZpbGUNCgkJICh5LW9yLW4tcCAoZm9ybWF0ICJTYXZlIGZpbGUgJXM/ICIgZmlsZSkpKQ0KCSh3 aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZiAoc2F2ZS1idWZmZXIpKSkNCiAgICAgIChraWxsLWJ1ZmZl ciBidWYpKSkpDQoNCihkZWZ1biBvcmctYWdlbmRhLXByZXBhcmUtYnVmZmVycyAoZmlsZXMpDQog ICJDcmVhdGUgYnVmZmVycyBmb3IgYWxsIGFnZW5kYSBmaWxlcywgcHJvdGVjdCBhcmNoaXZlZCB0 cmVlcyBhbmQgY29tbWVudHMuIg0KICAoaW50ZXJhY3RpdmUpDQogIChsZXQgKChwYSAnKDpvcmct YXJjaGl2ZWQgdCkpDQoJKHBjICcoOm9yZy1jb21tZW50IHQpKQ0KCShwYWxsICcoOm9yZy1hcmNo aXZlZCB0IDpvcmctY29tbWVudCB0KSkNCgkoaW5oaWJpdC1yZWFkLW9ubHkgdCkNCgkob3JnLWlu aGliaXQtc3RhcnR1cCBvcmctYWdlbmRhLWluaGliaXQtc3RhcnR1cCkNCgkocmVhIChjb25jYXQg IjoiIG9yZy1hcmNoaXZlLXRhZyAiOiIpKQ0KCWZpbGUgcmUgcG9zKQ0KICAgIChzZXRxIG9yZy10 YWctYWxpc3QtZm9yLWFnZW5kYSBuaWwNCgkgIG9yZy10YWctZ3JvdXBzLWFsaXN0LWZvci1hZ2Vu ZGEgbmlsKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgKHNhdmUtcmVzdHJpY3Rpb24NCgko d2hpbGUgKHNldHEgZmlsZSAocG9wIGZpbGVzKSkNCgkgIChjYXRjaCAnbmV4dGZpbGUNCgkgICAg KGlmIChidWZmZXJwIGZpbGUpDQoJCShzZXQtYnVmZmVyIGZpbGUpDQoJICAgICAgKG9yZy1jaGVj ay1hZ2VuZGEtZmlsZSBmaWxlKQ0KCSAgICAgIChzZXQtYnVmZmVyIChvcmctZ2V0LWFnZW5kYS1m aWxlLWJ1ZmZlciBmaWxlKSkpDQoJICAgICh3aWRlbikNCgkgICAgKG9yZy1zZXQtcmVnZXhwcy1h bmQtb3B0aW9ucy1mb3ItdGFncykNCgkgICAgKHNldHEgcG9zIChwb2ludCkpDQoJICAgIChnb3Rv LWNoYXIgKHBvaW50LW1pbikpDQoJICAgIChsZXQgKChjYXNlLWZvbGQtc2VhcmNoIHQpKQ0KCSAg ICAgICh3aGVuIChzZWFyY2gtZm9yd2FyZCAiIytzZXR1cGZpbGUiIG5pbCB0KQ0KCQk7OyBEb24n dCBzZXQgYWxsIHJlZ2V4cHMgYW5kIG9wdGlvbnMgc3lzdGVtYXRpY2FsbHkgYXMNCgkJOzsgdGhp cyBpcyBvbmx5IHJ1biBmb3Igc2V0dGluZyBhZ2VuZGEgdGFncyBmcm9tIHNldHVwDQoJCTs7IGZp bGUNCgkJKG9yZy1zZXQtcmVnZXhwcy1hbmQtb3B0aW9ucykpKQ0KCSAgICAob3IgKG1lbXEgJ2Nh dGVnb3J5IG9yZy1hZ2VuZGEtaWdub3JlLWRyYXdlci1wcm9wZXJ0aWVzKQ0KCQkob3JnLXJlZnJl c2gtY2F0ZWdvcnktcHJvcGVydGllcykpDQoJICAgIChvciAobWVtcSAnZWZmb3J0IG9yZy1hZ2Vu ZGEtaWdub3JlLWRyYXdlci1wcm9wZXJ0aWVzKQ0KCQkob3JnLXJlZnJlc2gtcHJvcGVydGllcyBv cmctZWZmb3J0LXByb3BlcnR5ICdvcmctZWZmb3J0KSkNCgkgICAgKG9yIChtZW1xICdhcHB0IG9y Zy1hZ2VuZGEtaWdub3JlLWRyYXdlci1wcm9wZXJ0aWVzKQ0KCQkob3JnLXJlZnJlc2gtcHJvcGVy dGllcyAiQVBQVF9XQVJOVElNRSIgJ29yZy1hcHB0LXdhcm50aW1lKSkNCgkgICAgKHNldHEgb3Jn LXRvZG8ta2V5d29yZHMtZm9yLWFnZW5kYQ0KCQkgIChhcHBlbmQgb3JnLXRvZG8ta2V5d29yZHMt Zm9yLWFnZW5kYSBvcmctdG9kby1rZXl3b3Jkcy0xKSkNCgkgICAgKHNldHEgb3JnLWRvbmUta2V5 d29yZHMtZm9yLWFnZW5kYQ0KCQkgIChhcHBlbmQgb3JnLWRvbmUta2V5d29yZHMtZm9yLWFnZW5k YSBvcmctZG9uZS1rZXl3b3JkcykpDQoJICAgIChzZXRxIG9yZy10b2RvLWtleXdvcmQtYWxpc3Qt Zm9yLWFnZW5kYQ0KCQkgIChhcHBlbmQgb3JnLXRvZG8ta2V5d29yZC1hbGlzdC1mb3ItYWdlbmRh IG9yZy10b2RvLWtleS1hbGlzdCkpDQoJICAgIChzZXRxIG9yZy1kcmF3ZXJzLWZvci1hZ2VuZGEN CgkJICAoYXBwZW5kIG9yZy1kcmF3ZXJzLWZvci1hZ2VuZGEgb3JnLWRyYXdlcnMpKQ0KCSAgICAo c2V0cSBvcmctdGFnLWFsaXN0LWZvci1hZ2VuZGENCgkJICAob3JnLXVuaXF1aWZ5DQoJCSAgIChh cHBlbmQgb3JnLXRhZy1hbGlzdC1mb3ItYWdlbmRhDQoJCQkgICBvcmctdGFnLWFsaXN0DQoJCQkg ICBvcmctdGFnLXBlcnNpc3RlbnQtYWxpc3QpKSkNCgkgICAgKGlmIG9yZy1ncm91cC10YWdzDQoJ CShzZXRxIG9yZy10YWctZ3JvdXBzLWFsaXN0LWZvci1hZ2VuZGENCgkJICAgICAgKG9yZy11bmlx dWlmeS1hbGlzdA0KCQkgICAgICAgKGFwcGVuZCBvcmctdGFnLWdyb3Vwcy1hbGlzdC1mb3ItYWdl bmRhIG9yZy10YWctZ3JvdXBzLWFsaXN0KSkpKQ0KCSAgICAob3JnLXdpdGgtc2lsZW50LW1vZGlm aWNhdGlvbnMNCgkgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCSAgICAgICAocmVtb3ZlLXRleHQtcHJv cGVydGllcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSBwYWxsKQ0KCSAgICAgICAod2hlbiBvcmct YWdlbmRhLXNraXAtYXJjaGl2ZWQtdHJlZXMNCgkJIChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQoJ CSAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIHJlYSBuaWwgdCkNCgkJICAgKGlmIChvcmctYXQt aGVhZGluZy1wIHQpDQoJCSAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyAocG9pbnQtYXQtYm9s KSAob3JnLWVuZC1vZi1zdWJ0cmVlIHQpIHBhKSkpKQ0KCSAgICAgICAoZ290by1jaGFyIChwb2lu dC1taW4pKQ0KCSAgICAgICAoc2V0cSByZSAoZm9ybWF0IG9yZy1oZWFkaW5nLWtleXdvcmQtcmVn ZXhwLWZvcm1hdA0KCQkJCW9yZy1jb21tZW50LXN0cmluZykpDQoJICAgICAgICh3aGlsZSAocmUt c2VhcmNoLWZvcndhcmQgcmUgbmlsIHQpDQoJCSAoYWRkLXRleHQtcHJvcGVydGllcw0KCQkgICht YXRjaC1iZWdpbm5pbmcgMCkgKG9yZy1lbmQtb2Ytc3VidHJlZSB0KSBwYykpKSkNCgkgICAgKGdv dG8tY2hhciBwb3MpKSkpKQ0KICAgIChzZXRxIG9yZy10b2RvLWtleXdvcmRzLWZvci1hZ2VuZGEN CiAgICAgICAgICAob3JnLXVuaXF1aWZ5IG9yZy10b2RvLWtleXdvcmRzLWZvci1hZ2VuZGEpKQ0K ICAgIChzZXRxIG9yZy10b2RvLWtleXdvcmQtYWxpc3QtZm9yLWFnZW5kYQ0KCSAgKG9yZy11bmlx dWlmeSBvcmctdG9kby1rZXl3b3JkLWFsaXN0LWZvci1hZ2VuZGEpKSkpDQoNCgwNCjs7OzsgQ0RM YVRlWCBtaW5vciBtb2RlDQoNCihkZWZ2YXIgb3JnLWNkbGF0ZXgtbW9kZS1tYXAgKG1ha2Utc3Bh cnNlLWtleW1hcCkNCiAgIktleW1hcCBmb3IgdGhlIG1pbm9yIGBvcmctY2RsYXRleC1tb2RlJy4i KQ0KDQoob3JnLWRlZmtleSBvcmctY2RsYXRleC1tb2RlLW1hcCAiXyIgJ29yZy1jZGxhdGV4LXVu ZGVyc2NvcmUtY2FyZXQpDQoob3JnLWRlZmtleSBvcmctY2RsYXRleC1tb2RlLW1hcCAiXiIgJ29y Zy1jZGxhdGV4LXVuZGVyc2NvcmUtY2FyZXQpDQoob3JnLWRlZmtleSBvcmctY2RsYXRleC1tb2Rl LW1hcCAiYCIgJ2NkbGF0ZXgtbWF0aC1zeW1ib2wpDQoob3JnLWRlZmtleSBvcmctY2RsYXRleC1t b2RlLW1hcCAiJyIgJ29yZy1jZGxhdGV4LW1hdGgtbW9kaWZ5KQ0KKG9yZy1kZWZrZXkgb3JnLWNk bGF0ZXgtbW9kZS1tYXAgIlxDLWN7IiAnY2RsYXRleC1lbnZpcm9ubWVudCkNCg0KKGRlZnZhciBv cmctY2RsYXRleC10ZXhtYXRocC1hZHZpY2UtaXMtZG9uZSBuaWwNCiAgIkZsYWcgcmVtZW1iZXJp bmcgaWYgd2UgaGF2ZSBhcHBsaWVkIHRoZSBhZHZpY2UgdG8gdGV4bWF0aHAgYWxyZWFkeS4iKQ0K DQooZGVmaW5lLW1pbm9yLW1vZGUgb3JnLWNkbGF0ZXgtbW9kZQ0KICAiVG9nZ2xlIHRoZSBtaW5v ciBgb3JnLWNkbGF0ZXgtbW9kZScuDQpUaGlzIG1vZGUgc3VwcG9ydHMgZW50ZXJpbmcgTGFUZVgg ZW52aXJvbm1lbnQgYW5kIG1hdGggaW4gTGFUZVggZnJhZ21lbnRzDQppbiBPcmctbW9kZS4NClxc e29yZy1jZGxhdGV4LW1vZGUtbWFwfSINCiAgbmlsICIgT0NETCIgbmlsDQogICh3aGVuIG9yZy1j ZGxhdGV4LW1vZGUNCiAgICAocmVxdWlyZSAnY2RsYXRleCkNCiAgICAocnVuLWhvb2tzICdjZGxh dGV4LW1vZGUtaG9vaykNCiAgICAoY2RsYXRleC1jb21wdXRlLXRhYmxlcykpDQogICh1bmxlc3Mg b3JnLWNkbGF0ZXgtdGV4bWF0aHAtYWR2aWNlLWlzLWRvbmUNCiAgICAoc2V0cSBvcmctY2RsYXRl eC10ZXhtYXRocC1hZHZpY2UtaXMtZG9uZSB0KQ0KICAgIChkZWZhZHZpY2UgdGV4bWF0aHAgKGFy b3VuZCBvcmctbWF0aC1hbHdheXMtb24gYWN0aXZhdGUpDQogICAgICAiQWx3YXlzIHJldHVybiB0 IGluIG9yZy1tb2RlIGJ1ZmZlcnMuDQpUaGlzIGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBpbnNlcnQg bWF0aCBzeW1ib2xzIHdpdGhvdXQgZG9sbGFycyBldmVuIG91dHNpZGUNCnRoZSBMYVRlWCBtYXRo IHNlZ21lbnRzLiAgSWYgT3JnbW9kZSB0aGlua3MgdGhhdCBwb2ludCBpcyBhY3R1YWxseSBpbnNp ZGUNCmFuIGVtYmVkZGVkIExhVGVYIGZyYWdtZW50LCBsZXQgdGV4bWF0aHAgZG8gaXRzIGpvYi4N ClxcW29yZy1jZGxhdGV4LW1vZGUtbWFwXSINCiAgICAgIChpbnRlcmFjdGl2ZSkNCiAgICAgIChs ZXQgKHApDQoJKGNvbmQNCgkgKChub3QgKGRlcml2ZWQtbW9kZS1wICdvcmctbW9kZSkpIGFkLWRv LWl0KQ0KCSAoKGVxIHRoaXMtY29tbWFuZCAnY2RsYXRleC1tYXRoLXN5bWJvbCkNCgkgIChzZXRx IGFkLXJldHVybi12YWx1ZSB0DQoJCXRleG1hdGhwLXdoeSAnKCJjZGxhdGV4LW1hdGgtc3ltYm9s IGluIG9yZy1tb2RlIiAuIDApKSkNCgkgKHQNCgkgIChsZXQgKChwIChvcmctaW5zaWRlLUxhVGVY LWZyYWdtZW50LXApKSkNCgkgICAgKGlmIChhbmQgcCAobWVtYmVyIChjYXIgcCkgKHBsaXN0LWdl dCBvcmctZm9ybWF0LWxhdGV4LW9wdGlvbnMgOm1hdGNoZXJzKSkpDQoJCShzZXRxIGFkLXJldHVy bi12YWx1ZSB0DQoJCSAgICAgIHRleG1hdGhwLXdoeSAnKCJPcmctbW9kZSBlbWJlZGRlZCBtYXRo IiAuIDApKQ0KCSAgICAgIChpZiBwIGFkLWRvLWl0KSkpKSkpKSkpDQoNCihkZWZ1biB0dXJuLW9u LW9yZy1jZGxhdGV4ICgpDQogICJVbmNvbmRpdGlvbmFsbHkgdHVybiBvbiBgb3JnLWNkbGF0ZXgt bW9kZScuIg0KICAob3JnLWNkbGF0ZXgtbW9kZSAxKSkNCg0KKGRlZnVuIG9yZy10cnktY2RsYXRl eC10YWIgKCkNCiAgIkNoZWNrIGlmIGl0IG1ha2VzIHNlbnNlIHRvIGV4ZWN1dGUgYGNkbGF0ZXgt dGFiJywgYW5kIGRvIGl0IGlmIHllcy4NCkl0IG1ha2VzIHNlbnNlIHRvIGRvIHNvIGlmIGBvcmct Y2RsYXRleC1tb2RlJyBpcyBhY3RpdmUgYW5kIGlmIHRoZSBjdXJzb3IgaXMNCiAgLSBpbnNpZGUg YSBMYVRlWCBmcmFnbWVudCwgb3INCiAgLSBhZnRlciB0aGUgZmlyc3Qgd29yZCBpbiBhIGxpbmUs IHdoZXJlIGFuIGFiYnJldmlhdGlvbiBleHBhbnNpb24gY291bGQNCiAgICBpbnNlcnQgYSBMYVRl WCBlbnZpcm9ubWVudC4iDQogICh3aGVuIG9yZy1jZGxhdGV4LW1vZGUNCiAgICAoY29uZA0KICAg ICA7OyBCZWZvcmUgYW55IHdvcmQgb24gdGhlIGxpbmU6IE5vIGV4cGFuc2lvbiBwb3NzaWJsZS4N CiAgICAgKChzYXZlLWV4Y3Vyc2lvbiAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFx0IikgKGJvbHAp KSBuaWwpDQogICAgIDs7IEp1c3QgYWZ0ZXIgZmlyc3Qgd29yZCBvbiB0aGUgbGluZTogRXhwYW5k IGl0LiAgTWFrZSBzdXJlIGl0DQogICAgIDs7IGNhbm5vdCBoYXBwZW4gb24gaGVhZGxpbmVzLCB0 aG91Z2guDQogICAgICgoc2F2ZS1leGN1cnNpb24NCgkoc2tpcC1jaGFycy1iYWNrd2FyZCAiYS16 QS1aMC05KiIpDQoJKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcdCIpDQoJKGFuZCAoYm9scCkgKG5v dCAob3JnLWF0LWhlYWRpbmctcCkpKSkNCiAgICAgIChjZGxhdGV4LXRhYikgdCkNCiAgICAgKChv cmctaW5zaWRlLUxhVGVYLWZyYWdtZW50LXApIChjZGxhdGV4LXRhYikgdCkpKSkNCg0KKGRlZnVu IG9yZy1jZGxhdGV4LXVuZGVyc2NvcmUtY2FyZXQgKCZvcHRpb25hbCBhcmcpDQogICJFeGVjdXRl IGBjZGxhdGV4LXN1Yi1zdXBlcnNjcmlwdCcgaW4gTGFUZVggZnJhZ21lbnRzLg0KUmV2ZXJ0IHRv IHRoZSBub3JtYWwgZGVmaW5pdGlvbiBvdXRzaWRlIG9mIHRoZXNlIGZyYWdtZW50cy4iDQogIChp bnRlcmFjdGl2ZSAiUCIpDQogIChpZiAob3JnLWluc2lkZS1MYVRlWC1mcmFnbWVudC1wKQ0KICAg ICAgKGNhbGwtaW50ZXJhY3RpdmVseSAnY2RsYXRleC1zdWItc3VwZXJzY3JpcHQpDQogICAgKGxl dCAob3JnLWNkbGF0ZXgtbW9kZSkNCiAgICAgIChjYWxsLWludGVyYWN0aXZlbHkgKGtleS1iaW5k aW5nICh2ZWN0b3IgbGFzdC1pbnB1dC1ldmVudCkpKSkpKQ0KDQooZGVmdW4gb3JnLWNkbGF0ZXgt bWF0aC1tb2RpZnkgKCZvcHRpb25hbCBhcmcpDQogICJFeGVjdXRlIGBjZGxhdGV4LW1hdGgtbW9k aWZ5JyBpbiBMYVRlWCBmcmFnbWVudHMuDQpSZXZlcnQgdG8gdGhlIG5vcm1hbCBkZWZpbml0aW9u IG91dHNpZGUgb2YgdGhlc2UgZnJhZ21lbnRzLiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgKGlm IChvcmctaW5zaWRlLUxhVGVYLWZyYWdtZW50LXApDQogICAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5 ICdjZGxhdGV4LW1hdGgtbW9kaWZ5KQ0KICAgIChsZXQgKG9yZy1jZGxhdGV4LW1vZGUpDQogICAg ICAoY2FsbC1pbnRlcmFjdGl2ZWx5IChrZXktYmluZGluZyAodmVjdG9yIGxhc3QtaW5wdXQtZXZl bnQpKSkpKSkNCg0KDQoMDQo7Ozs7IExhVGVYIGZyYWdtZW50cw0KDQooZGVmdmFyIG9yZy1sYXRl eC1yZWdleHBzDQogICcoKCJiZWdpbiIgIl5bIFx0XSpcXChcXFxcYmVnaW57XFwoW2EtekEtWjAt OVxcKl0rXFwpW15cMDAwXSs/XFxcXGVuZHtcXDJ9XFwpIiAxIHQpDQogICAgOzsgKCIkIiAiXFwo WyAJKF1cXHxeXFwpXFwoXFwoXFwoWyRdXFwpXFwoW14gCVxyXG4sLiRdLio/XFwoXG4uKj9cXClc XHswLDVcXH1bXiAJXHJcbiwuJF1cXClcXDRcXClcXClcXChbIAkuLD87OidcIildXFx8JFxcKSIg MiBuaWwpDQogICAgOzsgXDAwMCBpbiB0aGUgZm9sbG93aW5nIHJlZ2V4IGlzIG5lZWRlZCBmb3Ig b3JnLWluc2lkZS1MYVRlWC1mcmFnbWVudC1wDQogICAgKCIkMSIgIlxcKFteJF1cXHxeXFwpXFwo XFwkW14gCVxyXG4sOy4kXVxcJFxcKVxcKFstIAkuLD87OidcIilcMDAwXVxcfCRcXCkiIDIgbmls KQ0KICAgICgiJCIgIlxcKFteJF1cXHxeXFwpXFwoXFwoXFwkXFwoW14gCVxyXG4sOy4kXVteJFxu XHJdKj9cXChcblteJFxuXHJdKj9cXClcXHswLDJcXH1bXiAJXHJcbiwuJF1cXClcXCRcXClcXClc XChbLSAJLiw/OzonXCIpXDAwMF1cXHwkXFwpIiAyIG5pbCkNCiAgICAoIlxcKCIgIlxcXFwoW15c MDAwXSo/XFxcXCkiIDAgbmlsKQ0KICAgICgiXFxbIiAiXFxcXFxcW1teXDAwMF0qP1xcXFxcXF0i IDAgbmlsKQ0KICAgICgiJCQiICJcXCRcXCRbXlwwMDBdKj9cXCRcXCQiIDAgbmlsKSkNCiAgIlJl Z3VsYXIgZXhwcmVzc2lvbnMgZm9yIG1hdGNoaW5nIGVtYmVkZGVkIExhVGVYLiIpDQoNCihkZWZ1 biBvcmctaW5zaWRlLUxhVGVYLWZyYWdtZW50LXAgKCkNCiAgIlRlc3QgaWYgcG9pbnQgaXMgaW5z aWRlIGEgTGFUZVggZnJhZ21lbnQuDQpJLmUuIGFmdGVyIGEgXFxiZWdpbiwgXFwoLCBcXFssICQs IG9yICQkLCB3aXRob3V0IHRoZSBjb3JyZXNwb25kaW5nIGNsb3NpbmcNCnNlcXVlbmNlIGFwcGVh cmluZyBhbHNvIGJlZm9yZSBwb2ludC4NCkV2ZW4gdGhvdWdoIHRoZSBtYXRjaGVycyBmb3IgbWF0 aCBhcmUgY29uZmlndXJhYmxlLCB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMNCnRoYXQgXFxiZWdpbiwg XFwoLCBcXFssIGFuZCAkJCBhcmUgYWx3YXlzIHVzZWQuICBPbmx5IHRoZSBzaW5nbGUgZG9sbGFy DQpkZWxpbWl0ZXJzIGFyZSBza2lwcGVkIHdoZW4gdGhleSBoYXZlIGJlZW4gcmVtb3ZlZCBieSBj dXN0b21pemF0aW9uLg0KVGhlIHJldHVybiB2YWx1ZSBpcyBuaWwsIG9yIGEgY29ucyBjZWxsIHdp dGggdGhlIGRlbGltaXRlciBhbmQgdGhlDQpwb3NpdGlvbiBvZiB0aGlzIGRlbGltaXRlci4NCg0K VGhpcyBmdW5jdGlvbiBkb2VzIGEgcmVhc29uYWJseSBnb29kIGpvYiwgYnV0IGNhbiBsb2NhbGx5 IGJlIGZvb2xlZCBieQ0KZm9yIGV4YW1wbGUgY3VycmVuY3kgc3BlY2lmaWNhdGlvbnMuICBGb3Ig ZXhhbXBsZSBpdCB3aWxsIGFzc3VtZSBiZWluZyBpbg0KaW5saW5lIG1hdGggYWZ0ZXIgXCIkMjIu MzRcIi4gIFRoZSBMYVRlWCBmcmFnbWVudCBmb3JtYXR0ZXIgd2lsbCBvbmx5IGZvcm1hdA0KZnJh Z21lbnRzIHRoYXQgYXJlIHByb3Blcmx5IGNsb3NlZCwgYnV0IGR1cmluZyBlZGl0aW5nLCB3ZSBo YXZlIHRvIGxpdmUNCndpdGggdGhlIHVuY2VydGFpbnR5IGNhdXNlZCBieSBtaXNzaW5nIGNsb3Np bmcgZGVsaW1pdGVycy4gIFRoaXMgZnVuY3Rpb24NCmxvb2tzIG9ubHkgYmVmb3JlIHBvaW50LCBu b3QgYWZ0ZXIuIg0KICAoY2F0Y2ggJ2V4aXQNCiAgICAobGV0ICgocG9zIChwb2ludCkpDQoJICAo ZG9kb2xsYXIgKG1lbWJlciAiJCIgKHBsaXN0LWdldCBvcmctZm9ybWF0LWxhdGV4LW9wdGlvbnMg Om1hdGNoZXJzKSkpDQoJICAobGltIChwcm9nbg0KCQkgKHJlLXNlYXJjaC1iYWNrd2FyZCAoY29u Y2F0ICJeXFwoIiBwYXJhZ3JhcGgtc3RhcnQgIlxcKSIpIG5pbCB0KQ0KCQkgKHBvaW50KSkpDQoJ ICBkZC1vbiBzdHIgKHN0YXJ0IDApIG0gcmUpDQogICAgICAoZ290by1jaGFyIHBvcykNCiAgICAg ICh3aGVuIGRvZG9sbGFyDQoJKHNldHEgc3RyIChjb25jYXQgKGJ1ZmZlci1zdWJzdHJpbmcgbGlt IChwb2ludCkpICJcMDAwIFgkLiIpDQoJICAgICAgcmUgKG50aCAxIChhc3NvYyAiJCIgb3JnLWxh dGV4LXJlZ2V4cHMpKSkNCgkod2hpbGUgKHN0cmluZy1tYXRjaCByZSBzdHIgc3RhcnQpDQoJICAo Y29uZA0KCSAgICgoPSAobWF0Y2gtZW5kIDApIChsZW5ndGggc3RyKSkNCgkgICAgKHRocm93ICdl eGl0IChjb25zICIkIiAoKyBsaW0gKG1hdGNoLWJlZ2lubmluZyAwKSAxKSkpKQ0KCSAgICgoPSAo bWF0Y2gtZW5kIDApICgtIChsZW5ndGggc3RyKSA1KSkNCgkgICAgKHRocm93ICdleGl0IG5pbCkp DQoJICAgKHQgKHNldHEgc3RhcnQgKG1hdGNoLWVuZCAwKSkpKSkpDQogICAgICAod2hlbiAoc2V0 cSBtIChyZS1zZWFyY2gtYmFja3dhcmQgIlxcKFxcXFxiZWdpbntbXn1dKn1cXHxcXFxcKFxcfFxc XFxcXFtcXClcXHxcXChcXFxcZW5ke1tefV0qfVxcfFxcXFwpXFx8XFxcXFxcXVxcKVxcfFxcKFxc JFxcJFxcKSIgbGltIHQpKQ0KCShnb3RvLWNoYXIgcG9zKQ0KCShhbmQgKG1hdGNoLWJlZ2lubmlu ZyAxKSAodGhyb3cgJ2V4aXQgKGNvbnMgKG1hdGNoLXN0cmluZyAxKSBtKSkpDQoJKGFuZCAobWF0 Y2gtYmVnaW5uaW5nIDIpICh0aHJvdyAnZXhpdCBuaWwpKQ0KCTs7IGNvdW50ICQkDQoJKHdoaWxl IChyZS1zZWFyY2gtYmFja3dhcmQgIlxcJFxcJCIgbGltIHQpDQoJICAoc2V0cSBkZC1vbiAobm90 IGRkLW9uKSkpDQoJKGdvdG8tY2hhciBwb3MpDQoJKGlmIGRkLW9uIChjb25zICIkJCIgbSkpKSkp KQ0KDQooZGVmdW4gb3JnLWluc2lkZS1sYXRleC1tYWNyby1wICgpDQogICJJcyBwb2ludCBpbnNp ZGUgYSBMYVRlWCBtYWNybyBvciBpdHMgYXJndW1lbnRzPyINCiAgKHNhdmUtbWF0Y2gtZGF0YQ0K ICAgIChvcmctaW4tcmVnZXhwDQogICAgICJcXFxcW2EtekEtWl0rXFwqP1xcKFxcKFxcW1teXVtc bnt9XSpcXF1cXClcXHxcXCh7W157fVxuXSp9XFwpXFwpKiIpKSkNCg0KKGRlZnZhciBvcmctbGF0 ZXgtZnJhZ21lbnQtaW1hZ2Utb3ZlcmxheXMgbmlsDQogICJMaXN0IG9mIG92ZXJsYXlzIGNhcnJ5 aW5nIHRoZSBpbWFnZXMgb2YgbGF0ZXggZnJhZ21lbnRzLiIpDQoobWFrZS12YXJpYWJsZS1idWZm ZXItbG9jYWwgJ29yZy1sYXRleC1mcmFnbWVudC1pbWFnZS1vdmVybGF5cykNCg0KKGRlZnVuIG9y Zy1yZW1vdmUtbGF0ZXgtZnJhZ21lbnQtaW1hZ2Utb3ZlcmxheXMgKCkNCiAgIlJlbW92ZSBhbGwg b3ZlcmxheXMgd2l0aCBMYVRlWCBmcmFnbWVudCBpbWFnZXMgaW4gY3VycmVudCBidWZmZXIuIg0K ICAobWFwYyAnZGVsZXRlLW92ZXJsYXkgb3JnLWxhdGV4LWZyYWdtZW50LWltYWdlLW92ZXJsYXlz KQ0KICAoc2V0cSBvcmctbGF0ZXgtZnJhZ21lbnQtaW1hZ2Utb3ZlcmxheXMgbmlsKSkNCg0KKGRl ZnVuIG9yZy1wcmV2aWV3LWxhdGV4LWZyYWdtZW50ICgmb3B0aW9uYWwgc3VidHJlZSkNCiAgIlBy ZXZpZXcgdGhlIExhVGVYIGZyYWdtZW50IGF0IHBvaW50LCBvciBhbGwgbG9jYWxseSBvciBnbG9i YWxseS4NCklmIHRoZSBjdXJzb3IgaXMgaW4gYSBMYVRlWCBmcmFnbWVudCwgY3JlYXRlIHRoZSBp bWFnZSBhbmQgb3ZlcmxheQ0KaXQgb3ZlciB0aGUgc291cmNlIGNvZGUuICBJZiB0aGVyZSBpcyBu byBmcmFnbWVudCBhdCBwb2ludCwgZGlzcGxheQ0KYWxsIGZyYWdtZW50cyBpbiB0aGUgY3VycmVu dCB0ZXh0LCBmcm9tIG9uZSBoZWFkbGluZSB0byB0aGUgbmV4dC4gIFdpdGgNCnByZWZpeCBTVUJU UkVFLCBkaXNwbGF5IGFsbCBmcmFnbWVudHMgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS4gIFdpdGgg YQ0KZG91YmxlIHByZWZpeCBhcmcgXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBcXFt1bml2ZXJzYWwt YXJndW1lbnRdLCBvciB3aGVuIFwNCnRoZSBjdXJzb3IgaXMgYmVmb3JlIHRoZSBmaXJzdCBoZWFk bGluZSwNCmRpc3BsYXkgYWxsIGZyYWdtZW50cyBpbiB0aGUgYnVmZmVyLg0KVGhlIGltYWdlcyBj YW4gYmUgcmVtb3ZlZCBhZ2FpbiB3aXRoIFxcW29yZy1jdHJsLWMtY3RybC1jXS4iDQogIChpbnRl cmFjdGl2ZSAiUCIpDQogICh1bmxlc3MgYnVmZmVyLWZpbGUtbmFtZQ0KICAgICh1c2VyLWVycm9y ICJDYW4ndCBwcmV2aWV3IExhVGVYIGZyYWdtZW50IGluIGEgbm9uLWZpbGUgYnVmZmVyIikpDQog ICh3aGVuIChkaXNwbGF5LWdyYXBoaWMtcCkNCiAgICAob3JnLXJlbW92ZS1sYXRleC1mcmFnbWVu dC1pbWFnZS1vdmVybGF5cykNCiAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAgIChzYXZlLXJlc3Ry aWN0aW9uDQoJKGxldCAoYmVnIGVuZCBhdCBtc2cpDQoJICAoY29uZA0KCSAgICgob3IgKGVxdWFs IHN1YnRyZWUgJygxNikpDQoJCShub3QgKHNhdmUtZXhjdXJzaW9uDQoJCSAgICAgICAocmUtc2Vh cmNoLWJhY2t3YXJkIG9yZy1vdXRsaW5lLXJlZ2V4cC1ib2wgbmlsIHQpKSkpDQoJICAgIChzZXRx IGJlZyAocG9pbnQtbWluKSBlbmQgKHBvaW50LW1heCkNCgkJICBtc2cgIkNyZWF0aW5nIGltYWdl cyBmb3IgYnVmZmVyLi4uJXMiKSkNCgkgICAoKGVxdWFsIHN1YnRyZWUgJyg0KSkNCgkgICAgKG9y Zy1iYWNrLXRvLWhlYWRpbmcpDQoJICAgIChzZXRxIGJlZyAocG9pbnQpIGVuZCAob3JnLWVuZC1v Zi1zdWJ0cmVlIHQpDQoJCSAgbXNnICJDcmVhdGluZyBpbWFnZXMgZm9yIHN1YnRyZWUuLi4lcyIp KQ0KCSAgICh0DQoJICAgIChpZiAoc2V0cSBhdCAob3JnLWluc2lkZS1MYVRlWC1mcmFnbWVudC1w KSkNCgkJKGdvdG8tY2hhciAobWF4IChwb2ludC1taW4pICgtIChjZHIgYXQpIDIpKSkNCgkgICAg ICAob3JnLWJhY2stdG8taGVhZGluZykpDQoJICAgIChzZXRxIGJlZyAocG9pbnQpIGVuZCAocHJv Z24gKG91dGxpbmUtbmV4dC1oZWFkaW5nKSAocG9pbnQpKQ0KCQkgIG1zZyAoaWYgYXQgIkNyZWF0 aW5nIGltYWdlLi4uJXMiDQoJCQkiQ3JlYXRpbmcgaW1hZ2VzIGZvciBlbnRyeS4uLiVzIikpKSkN CgkgIChtZXNzYWdlIG1zZyAiIikNCgkgIChuYXJyb3ctdG8tcmVnaW9uIGJlZyBlbmQpDQoJICAo Z290by1jaGFyIGJlZykNCgkgIChvcmctZm9ybWF0LWxhdGV4DQoJICAgKGNvbmNhdCBvcmctbGF0 ZXgtcHJldmlldy1sdHhwbmctZGlyZWN0b3J5IChmaWxlLW5hbWUtc2Fucy1leHRlbnNpb24NCgkJ CQkJCSAgICAgICAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeQ0KCQkJCQkJCWJ1ZmZlci1maWxlLW5h bWUpKSkNCgkgICBkZWZhdWx0LWRpcmVjdG9yeSAnb3ZlcmxheXMgbXNnIGF0ICdmb3JidWZmZXIN CgkgICBvcmctbGF0ZXgtY3JlYXRlLWZvcm11bGEtaW1hZ2UtcHJvZ3JhbSkNCgkgIChtZXNzYWdl IG1zZyAiZG9uZS4gIFVzZSBgQy1jIEMtYycgdG8gcmVtb3ZlIGltYWdlcy4iKSkpKSkpDQoNCihk ZWZ1biBvcmctZm9ybWF0LWxhdGV4IChwcmVmaXggJm9wdGlvbmFsIGRpciBvdmVybGF5cyBtc2cg YXQNCgkJCQlmb3JidWZmZXIgcHJvY2Vzc2luZy10eXBlKQ0KICAiUmVwbGFjZSBMYVRlWCBmcmFn bWVudHMgd2l0aCBsaW5rcyB0byBhbiBpbWFnZSwgYW5kIHByb2R1Y2UgaW1hZ2VzLg0KU29tZSBv ZiB0aGUgb3B0aW9ucyBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgdmFyaWFibGUNCmBvcmctZm9y bWF0LWxhdGV4LW9wdGlvbnMnLiINCiAgKGlmIChhbmQgb3ZlcmxheXMgKGZib3VuZHAgJ2NsZWFy LWltYWdlLWNhY2hlKSkgKGNsZWFyLWltYWdlLWNhY2hlKSkNCiAgKGxldCogKChwcmVmaXhub2Rp ciAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBwcmVmaXgpKQ0KCSAoYWJzcHJlZml4IChleHBhbmQt ZmlsZS1uYW1lIHByZWZpeCBkaXIpKQ0KCSAodG9kaXIgKGZpbGUtbmFtZS1kaXJlY3RvcnkgYWJz cHJlZml4KSkNCgkgKG9wdCBvcmctZm9ybWF0LWxhdGV4LW9wdGlvbnMpDQoJIChvcHRuZXcgb3Jn LWZvcm1hdC1sYXRleC1vcHRpb25zKQ0KCSAobWF0Y2hlcnMgKHBsaXN0LWdldCBvcHQgOm1hdGNo ZXJzKSkNCgkgKHJlLWxpc3Qgb3JnLWxhdGV4LXJlZ2V4cHMpDQoJIChjbnQgMCkgdHh0IGhhc2gg bGluayBiZWcgZW5kIHJlIGUgY2hlY2tkaXINCgkgc3RyaW5nDQoJIG0gbiBibG9jay10eXBlIGJs b2NrIGxpbmtmaWxlIG1vdmVmaWxlIG92KQ0KICAgIDs7IENoZWNrIHRoZSBkaWZmZXJlbnQgcmVn dWxhciBleHByZXNzaW9ucw0KICAgICh3aGlsZSAoc2V0cSBlIChwb3AgcmUtbGlzdCkpDQogICAg ICAoc2V0cSBtIChjYXIgZSkgcmUgKG50aCAxIGUpIG4gKG50aCAyIGUpIGJsb2NrLXR5cGUgKG50 aCAzIGUpDQoJICAgIGJsb2NrIChpZiBibG9jay10eXBlICJcblxuIiAiIikpDQogICAgICAod2hl biAobWVtYmVyIG0gbWF0Y2hlcnMpDQoJKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCgkod2hpbGUg KHJlLXNlYXJjaC1mb3J3YXJkIHJlIG5pbCB0KQ0KCSAgKHdoZW4gKGFuZCAob3IgKG5vdCBhdCkg KGVxdWFsIChjZHIgYXQpIChtYXRjaC1iZWdpbm5pbmcgbikpKQ0KCQkgICAgIChvciAobm90IG92 ZXJsYXlzKQ0KCQkJIChub3QgKGVxIChnZXQtY2hhci1wcm9wZXJ0eSAobWF0Y2gtYmVnaW5uaW5n IG4pDQoJCQkJCQkgICAgICdvcmctb3ZlcmxheS10eXBlKQ0KCQkJCSAgJ29yZy1sYXRleC1vdmVy bGF5KSkpKQ0KCSAgICAoY29uZA0KCSAgICAgKChlcSBwcm9jZXNzaW5nLXR5cGUgJ3ZlcmJhdGlt KSkNCgkgICAgICgoZXEgcHJvY2Vzc2luZy10eXBlICdtYXRoamF4KQ0KCSAgICAgIDs7IFByZXBh cmUgZm9yIE1hdGhKYXggcHJvY2Vzc2luZy4NCgkgICAgICAoc2V0cSBzdHJpbmcgKG1hdGNoLXN0 cmluZyBuKSkNCgkgICAgICAod2hlbiAobWVtYmVyIG0gJygiJCIgIiQxIikpDQoJCShzYXZlLWV4 Y3Vyc2lvbg0KCQkgIChkZWxldGUtcmVnaW9uIChtYXRjaC1iZWdpbm5pbmcgbikgKG1hdGNoLWVu ZCBuKSkNCgkJICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgbikpDQoJCSAgKGluc2VydCAo Y29uY2F0ICJcXCgiIChzdWJzdHJpbmcgc3RyaW5nIDEgLTEpICJcXCkiKSkpKSkNCgkgICAgICgo b3IgKGVxIHByb2Nlc3NpbmctdHlwZSAnZHZpcG5nKQ0KCQkgIChlcSBwcm9jZXNzaW5nLXR5cGUg J2ltYWdlbWFnaWNrKSkNCgkgICAgICA7OyBQcm9jZXNzIHRvIGFuIGltYWdlLg0KCSAgICAgIChz ZXRxIHR4dCAobWF0Y2gtc3RyaW5nIG4pDQoJCSAgICBiZWcgKG1hdGNoLWJlZ2lubmluZyBuKSBl bmQgKG1hdGNoLWVuZCBuKQ0KCQkgICAgY250ICgxKyBjbnQpKQ0KCSAgICAgIChsZXQgKChmYWNl IChmYWNlLWF0LXBvaW50KSkNCgkJICAgIChmZyAocGxpc3QtZ2V0IG9wdCA6Zm9yZWdyb3VuZCkp DQoJCSAgICAoYmcgKHBsaXN0LWdldCBvcHQgOmJhY2tncm91bmQpKQ0KCQkgICAgOzsgRW5zdXJl IGZ1bGwgbGlzdCBpcyBwcmludGVkLg0KCQkgICAgcHJpbnQtbGVuZ3RoIHByaW50LWxldmVsKQ0K CQkod2hlbiBmb3JidWZmZXINCgkJICA7OyBHZXQgdGhlIGNvbG9ycyBmcm9tIHRoZSBmYWNlIGF0 IHBvaW50Lg0KCQkgIChnb3RvLWNoYXIgYmVnKQ0KCQkgICh3aGVuIChlcSBmZyAnYXV0bykNCgkJ ICAgIChzZXRxIGZnIChmYWNlLWF0dHJpYnV0ZSBmYWNlIDpmb3JlZ3JvdW5kIG5pbCAnZGVmYXVs dCkpKQ0KCQkgICh3aGVuIChlcSBiZyAnYXV0bykNCgkJICAgIChzZXRxIGJnIChmYWNlLWF0dHJp YnV0ZSBmYWNlIDpiYWNrZ3JvdW5kIG5pbCAnZGVmYXVsdCkpKQ0KCQkgIChzZXRxIG9wdG5ldyAo Y29weS1zZXF1ZW5jZSBvcHQpKQ0KCQkgIChwbGlzdC1wdXQgb3B0bmV3IDpmb3JlZ3JvdW5kIGZn KQ0KCQkgIChwbGlzdC1wdXQgb3B0bmV3IDpiYWNrZ3JvdW5kIGJnKSkNCgkJKHNldHEgaGFzaCAo c2hhMSAocHJpbjEtdG8tc3RyaW5nDQoJCQkJICAobGlzdCBvcmctZm9ybWF0LWxhdGV4LWhlYWRl cg0KCQkJCQlvcmctbGF0ZXgtZGVmYXVsdC1wYWNrYWdlcy1hbGlzdA0KCQkJCQlvcmctbGF0ZXgt cGFja2FnZXMtYWxpc3QNCgkJCQkJb3JnLWZvcm1hdC1sYXRleC1vcHRpb25zDQoJCQkJCWZvcmJ1 ZmZlciB0eHQgZmcgYmcpKSkNCgkJICAgICAgbGlua2ZpbGUgKGZvcm1hdCAiJXNfJXMucG5nIiBw cmVmaXggaGFzaCkNCgkJICAgICAgbW92ZWZpbGUgKGZvcm1hdCAiJXNfJXMucG5nIiBhYnNwcmVm aXggaGFzaCkpKQ0KCSAgICAgIChzZXRxIGxpbmsgKGNvbmNhdCBibG9jayAiW1tmaWxlOiIgbGlu a2ZpbGUgIl1dIiBibG9jaykpDQoJICAgICAgKGlmIG1zZyAobWVzc2FnZSBtc2cgY250KSkNCgkg ICAgICAoZ290by1jaGFyIGJlZykNCgkgICAgICAodW5sZXNzIGNoZWNrZGlyCSAgICAgIDsgRW5z dXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLg0KCQkoc2V0cSBjaGVja2RpciB0KQ0KCQkob3IgKGZp bGUtZGlyZWN0b3J5LXAgdG9kaXIpIChtYWtlLWRpcmVjdG9yeSB0b2RpciB0KSkpDQoJICAgICAg KHVubGVzcyAoZmlsZS1leGlzdHMtcCBtb3ZlZmlsZSkNCgkJKG9yZy1jcmVhdGUtZm9ybXVsYS1p bWFnZQ0KCQkgdHh0IG1vdmVmaWxlIG9wdG5ldyBmb3JidWZmZXIgcHJvY2Vzc2luZy10eXBlKSkN CgkgICAgICAoaWYgb3ZlcmxheXMNCgkJICAocHJvZ24NCgkJICAgIChtYXBjIChsYW1iZGEgKG8p DQoJCQkgICAgKGlmIChlcSAob3ZlcmxheS1nZXQgbyAnb3JnLW92ZXJsYXktdHlwZSkNCgkJCQkg ICAgJ29yZy1sYXRleC1vdmVybGF5KQ0KCQkJCShkZWxldGUtb3ZlcmxheSBvKSkpDQoJCQkgIChv dmVybGF5cy1pbiBiZWcgZW5kKSkNCgkJICAgIChzZXRxIG92IChtYWtlLW92ZXJsYXkgYmVnIGVu ZCkpDQoJCSAgICAob3ZlcmxheS1wdXQgb3YgJ29yZy1vdmVybGF5LXR5cGUgJ29yZy1sYXRleC1v dmVybGF5KQ0KCQkgICAgKGlmIChmZWF0dXJlcCAneGVtYWNzKQ0KCQkJKHByb2duDQoJCQkgIChv dmVybGF5LXB1dCBvdiAnaW52aXNpYmxlIHQpDQoJCQkgIChvdmVybGF5LXB1dA0KCQkJICAgb3Yg J2VuZC1nbHlwaA0KCQkJICAgKG1ha2UtZ2x5cGggKHZlY3RvciAncG5nIDpmaWxlIG1vdmVmaWxl KSkpKQ0KCQkgICAgICAob3ZlcmxheS1wdXQNCgkJICAgICAgIG92ICdkaXNwbGF5DQoJCSAgICAg ICAobGlzdCAnaW1hZ2UgOnR5cGUgJ3BuZyA6ZmlsZSBtb3ZlZmlsZSA6YXNjZW50ICdjZW50ZXIp KSkNCgkJICAgIChwdXNoIG92IG9yZy1sYXRleC1mcmFnbWVudC1pbWFnZS1vdmVybGF5cykNCgkJ ICAgIChnb3RvLWNoYXIgZW5kKSkNCgkJKGRlbGV0ZS1yZWdpb24gYmVnIGVuZCkNCgkJKGluc2Vy dCAob3JnLWFkZC1wcm9wcyBsaW5rDQoJCQkgICAgKGxpc3QgJ29yZy1sYXRleC1zcmMNCgkJCQkg IChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcNCgkJCQkgICAiXCIiICIiIHR4dCkNCgkJCQkgICdv cmctbGF0ZXgtc3JjLWVtYmVkLXR5cGUNCgkJCQkgIChpZiBibG9jay10eXBlICdwYXJhZ3JhcGgg J2NoYXJhY3RlcikpKSkpKQ0KCSAgICAgKChlcSBwcm9jZXNzaW5nLXR5cGUgJ21hdGhtbCkNCgkg ICAgICA7OyBQcm9jZXNzIHRvIE1hdGhNTA0KCSAgICAgICh1bmxlc3MgKHNhdmUtbWF0Y2gtZGF0 YSAob3JnLWZvcm1hdC1sYXRleC1tYXRobWwtYXZhaWxhYmxlLXApKQ0KCQkodXNlci1lcnJvciAi TGFUZVggdG8gTWF0aE1MIGNvbnZlcnRlciBub3QgY29uZmlndXJlZCIpKQ0KCSAgICAgIChzZXRx IHR4dCAobWF0Y2gtc3RyaW5nIG4pDQoJCSAgICBiZWcgKG1hdGNoLWJlZ2lubmluZyBuKSBlbmQg KG1hdGNoLWVuZCBuKQ0KCQkgICAgY250ICgxKyBjbnQpKQ0KCSAgICAgIChpZiBtc2cgKG1lc3Nh Z2UgbXNnIGNudCkpDQoJICAgICAgKGdvdG8tY2hhciBiZWcpDQoJICAgICAgKGRlbGV0ZS1yZWdp b24gYmVnIGVuZCkNCgkgICAgICAoaW5zZXJ0IChvcmctZm9ybWF0LWxhdGV4LWFzLW1hdGhtbA0K CQkgICAgICAgdHh0IGJsb2NrLXR5cGUgcHJlZml4IGRpcikpKQ0KCSAgICAgKHQNCgkgICAgICAo ZXJyb3IgIlVua25vd24gY29udmVyc2lvbiB0eXBlICVzIGZvciBMYVRlWCBmcmFnbWVudHMiDQoJ CSAgICAgcHJvY2Vzc2luZy10eXBlKSkpKSkpKSkpDQoNCihkZWZ1biBvcmctY3JlYXRlLW1hdGgt Zm9ybXVsYSAobGF0ZXgtZnJhZyAmb3B0aW9uYWwgbWF0aG1sLWZpbGUpDQogICJDb252ZXJ0IExB VEVYLUZSQUcgdG8gTWF0aE1MIGFuZCBzdG9yZSBpdCBpbiBNQVRITUwtRklMRS4NClVzZSBgb3Jn LWxhdGV4LXRvLW1hdGhtbC1jb252ZXJ0LWNvbW1hbmQnLiAgSWYgdGhlIGNvbnZlcnNpb24gaXMN CnN1Y2Vzc2Z1bCwgcmV0dXJuIHRoZSBwb3J0aW9uIGJldHdlZW4gXCI8bWF0aC4uLj4gPC9tYXRo PlwiDQplbGVtZW50cyBvdGhlcndpc2UgcmV0dXJuIG5pbC4gIFdoZW4gTUFUSE1MLUZJTEUgaXMg c3BlY2lmaWVkLA0Kd3JpdGUgdGhlIHJlc3VsdHMgaW4gdG8gdGhhdCBmaWxlLiAgV2hlbiBpbnZv a2VkIGFzIGFuDQppbnRlcmFjdGl2ZSBjb21tYW5kLCBwcm9tcHQgZm9yIExBVEVYLUZSQUcsIHdp dGggaW5pdGlhbCB2YWx1ZQ0Kc2V0IHRvIHRoZSBjdXJyZW50IGFjdGl2ZSByZWdpb24gYW5kIGVj aG8gdGhlIHJlc3VsdHMgZm9yIHVzZXINCmluc3BlY3Rpb24uIg0KICAoaW50ZXJhY3RpdmUgKGxp c3QgKGxldCAoKGZyYWcgKHdoZW4gKG9yZy1yZWdpb24tYWN0aXZlLXApDQoJCQkJICAgKGJ1ZmZl ci1zdWJzdHJpbmctbm8tcHJvcGVydGllcw0KCQkJCSAgICAocmVnaW9uLWJlZ2lubmluZykgKHJl Z2lvbi1lbmQpKSkpKQ0KCQkgICAgICAgKHJlYWQtc3RyaW5nICJMYVRlWCBGcmFnbWVudDogIiBm cmFnIG5pbCBmcmFnKSkpKQ0KICAodW5sZXNzIGxhdGV4LWZyYWcgKGVycm9yICJJbnZhbGlkIExh VGVYIGZyYWdtZW50IikpDQogIChsZXQqICgodG1wLWluLWZpbGUgKGZpbGUtcmVsYXRpdmUtbmFt ZQ0KCQkgICAgICAgKG1ha2UtdGVtcC1uYW1lIChleHBhbmQtZmlsZS1uYW1lICJsdHhtYXRobWwt aW4iKSkpKQ0KCSAoaWdub3JlICh3cml0ZS1yZWdpb24gbGF0ZXgtZnJhZyBuaWwgdG1wLWluLWZp bGUpKQ0KCSAodG1wLW91dC1maWxlIChmaWxlLXJlbGF0aXZlLW5hbWUNCgkJCShtYWtlLXRlbXAt bmFtZSAoZXhwYW5kLWZpbGUtbmFtZSAgImx0eG1hdGhtbC1vdXQiKSkpKQ0KCSAoY21kIChmb3Jt YXQtc3BlYw0KCSAgICAgICBvcmctbGF0ZXgtdG8tbWF0aG1sLWNvbnZlcnQtY29tbWFuZA0KCSAg ICAgICBgKCg/aiAuICwoc2hlbGwtcXVvdGUtYXJndW1lbnQNCgkJCSAoZXhwYW5kLWZpbGUtbmFt ZSBvcmctbGF0ZXgtdG8tbWF0aG1sLWphci1maWxlKSkpDQoJCSAoP0kgLiAsKHNoZWxsLXF1b3Rl LWFyZ3VtZW50IHRtcC1pbi1maWxlKSkNCgkJICg/byAuICwoc2hlbGwtcXVvdGUtYXJndW1lbnQg dG1wLW91dC1maWxlKSkpKSkNCgkgbWF0aG1sIHNoZWxsLWNvbW1hbmQtb3V0cHV0KQ0KICAgICh3 aGVuIChvcmctY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQ0KICAgICAgKHVubGVzcyAob3Jn LWZvcm1hdC1sYXRleC1tYXRobWwtYXZhaWxhYmxlLXApDQoJKHVzZXItZXJyb3IgIkxhVGVYIHRv IE1hdGhNTCBjb252ZXJ0ZXIgbm90IGNvbmZpZ3VyZWQiKSkpDQogICAgKG1lc3NhZ2UgIlJ1bm5p bmcgJXMiIGNtZCkNCiAgICAoc2V0cSBzaGVsbC1jb21tYW5kLW91dHB1dCAoc2hlbGwtY29tbWFu ZC10by1zdHJpbmcgY21kKSkNCiAgICAoc2V0cSBtYXRobWwNCgkgICh3aGVuIChmaWxlLXJlYWRh YmxlLXAgdG1wLW91dC1maWxlKQ0KCSAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoZmluZC1maWxl LW5vc2VsZWN0IHRtcC1vdXQtZmlsZSB0KQ0KCSAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikp DQoJICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkDQoJCSAgICAgKGNvbmNhdA0KCQkgICAg ICAocmVnZXhwLXF1b3RlDQoJCSAgICAgICAiPG1hdGggeG1sbnM9XCJodHRwOi8vd3d3LnczLm9y Zy8xOTk4L01hdGgvTWF0aE1MXCI+IikNCgkJICAgICAgIlxcKC5cXHxcblxcKSoiDQoJCSAgICAg IChyZWdleHAtcXVvdGUgIjwvbWF0aD4iKSkgbmlsIHQpDQoJCShwcm9nMSAobWF0Y2gtc3RyaW5n IDApIChraWxsLWJ1ZmZlcikpKSkpKQ0KICAgIChjb25kDQogICAgIChtYXRobWwNCiAgICAgIChz ZXRxIG1hdGhtbA0KCSAgICAoY29uY2F0ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9 XCJVVEYtOFwiPz5cbiIgbWF0aG1sKSkNCiAgICAgICh3aGVuIG1hdGhtbC1maWxlDQoJKHdyaXRl LXJlZ2lvbiBtYXRobWwgbmlsIG1hdGhtbC1maWxlKSkNCiAgICAgICh3aGVuIChvcmctY2FsbGVk LWludGVyYWN0aXZlbHktcCAnYW55KQ0KCShtZXNzYWdlIG1hdGhtbCkpKQ0KICAgICAoKG1lc3Nh Z2UgIkxhVGVYIHRvIE1hdGhNTCBjb252ZXJzaW9uIGZhaWxlZCIpDQogICAgICAobWVzc2FnZSBz aGVsbC1jb21tYW5kLW91dHB1dCkpKQ0KICAgIChkZWxldGUtZmlsZSB0bXAtaW4tZmlsZSkNCiAg ICAod2hlbiAoZmlsZS1leGlzdHMtcCB0bXAtb3V0LWZpbGUpDQogICAgICAoZGVsZXRlLWZpbGUg dG1wLW91dC1maWxlKSkNCiAgICBtYXRobWwpKQ0KDQooZGVmdW4gb3JnLWZvcm1hdC1sYXRleC1h cy1tYXRobWwgKGxhdGV4LWZyYWcgbGF0ZXgtZnJhZy10eXBlDQoJCQkJCSAgICAgIHByZWZpeCAm b3B0aW9uYWwgZGlyKQ0KICAiVXNlIGBvcmctY3JlYXRlLW1hdGgtZm9ybXVsYScgYnV0IGNoZWNr IGxvY2FsIGNhY2hlIGZpcnN0LiINCiAgKGxldCogKChhYnNwcmVmaXggKGV4cGFuZC1maWxlLW5h bWUgcHJlZml4IGRpcikpDQoJIChwcmludC1sZW5ndGggbmlsKSAocHJpbnQtbGV2ZWwgbmlsKQ0K CSAoZm9ybXVsYS1pZCAoY29uY2F0DQoJCSAgICAgICJmb3JtdWxhLSINCgkJICAgICAgKHNoYTEN CgkJICAgICAgIChwcmluMS10by1zdHJpbmcNCgkJCShsaXN0IGxhdGV4LWZyYWcNCgkJCSAgICAg IG9yZy1sYXRleC10by1tYXRobWwtY29udmVydC1jb21tYW5kKSkpKSkNCgkgKGZvcm11bGEtY2Fj aGUgKGZvcm1hdCAiJXMtJXMubWF0aG1sIiBhYnNwcmVmaXggZm9ybXVsYS1pZCkpDQoJIChmb3Jt dWxhLWNhY2hlLWRpciAoZmlsZS1uYW1lLWRpcmVjdG9yeSBmb3JtdWxhLWNhY2hlKSkpDQoNCiAg ICAodW5sZXNzIChmaWxlLWRpcmVjdG9yeS1wIGZvcm11bGEtY2FjaGUtZGlyKQ0KICAgICAgKG1h a2UtZGlyZWN0b3J5IGZvcm11bGEtY2FjaGUtZGlyIHQpKQ0KDQogICAgKHVubGVzcyAoZmlsZS1l eGlzdHMtcCBmb3JtdWxhLWNhY2hlKQ0KICAgICAgKG9yZy1jcmVhdGUtbWF0aC1mb3JtdWxhIGxh dGV4LWZyYWcgZm9ybXVsYS1jYWNoZSkpDQoNCiAgICAoaWYgKGZpbGUtZXhpc3RzLXAgZm9ybXVs YS1jYWNoZSkNCgk7OyBTdWNjZXNzZnVsIGNvbnZlcnNpb24uICBSZXR1cm4gdGhlIGxpbmsgdG8g TWF0aE1MIGZpbGUuDQoJKG9yZy1hZGQtcHJvcHMNCgkgICAgKGZvcm1hdCAgIltbZmlsZTolc11d IiAoZmlsZS1yZWxhdGl2ZS1uYW1lIGZvcm11bGEtY2FjaGUgZGlyKSkNCgkgICAgKGxpc3QgJ29y Zy1sYXRleC1zcmMgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiXCIiICIiIGxhdGV4LWZyYWcp DQoJCSAgJ29yZy1sYXRleC1zcmMtZW1iZWQtdHlwZSAoaWYgbGF0ZXgtZnJhZy10eXBlDQoJCQkJ CQkncGFyYWdyYXBoICdjaGFyYWN0ZXIpKSkNCiAgICAgIDs7IEZhaWxlZCBjb252ZXJzaW9uLiAg UmV0dXJuIHRoZSBMYVRlWCBmcmFnbWVudCB2ZXJiYXRpbQ0KICAgICAgbGF0ZXgtZnJhZykpKQ0K DQooZGVmdW4gb3JnLWNyZWF0ZS1mb3JtdWxhLWltYWdlIChzdHJpbmcgdG9maWxlIG9wdGlvbnMg YnVmZmVyICZvcHRpb25hbCB0eXBlKQ0KICAiQ3JlYXRlIGFuIGltYWdlIGZyb20gTGFUZVggc291 cmNlIHVzaW5nIGR2aXBuZyBvciBjb252ZXJ0Lg0KVGhpcyBmdW5jdGlvbiBjYWxscyBlaXRoZXIg YG9yZy1jcmVhdGUtZm9ybXVsYS1pbWFnZS13aXRoLWR2aXBuZycNCm9yIGBvcmctY3JlYXRlLWZv cm11bGEtaW1hZ2Utd2l0aC1pbWFnZW1hZ2ljaycgZGVwZW5kaW5nIG9uIHRoZQ0KdmFsdWUgb2Yg YG9yZy1sYXRleC1jcmVhdGUtZm9ybXVsYS1pbWFnZS1wcm9ncmFtJyBvciBvbiB0aGUgdmFsdWUN Cm9mIHRoZSBvcHRpb25hbCBUWVBFIHZhcmlhYmxlLg0KDQpOb3RlOiB1bHRpbWF0ZWx5IHRoZXNl IHR3byBmdW5jdGlvbiBzaG91bGQgYmUgY29tYmluZWQgYXMgdGhleQ0Kc2hhcmUgYSBnb29kIGRl YWwgb2YgbG9naWMuIg0KICAob3JnLWNoZWNrLWV4dGVybmFsLWNvbW1hbmQNCiAgICJsYXRleCIg Im5lZWRlZCB0byBjb252ZXJ0IExhVGVYIGZyYWdtZW50cyB0byBpbWFnZXMiKQ0KICAoZnVuY2Fs bA0KICAgKGNhc2UgKG9yIHR5cGUgb3JnLWxhdGV4LWNyZWF0ZS1mb3JtdWxhLWltYWdlLXByb2dy YW0pDQogICAgICgnZHZpcG5nDQogICAgICAob3JnLWNoZWNrLWV4dGVybmFsLWNvbW1hbmQNCiAg ICAgICAiZHZpcG5nIiAibmVlZGVkIHRvIGNvbnZlcnQgTGFUZVggZnJhZ21lbnRzIHRvIGltYWdl cyIpDQogICAgICAjJ29yZy1jcmVhdGUtZm9ybXVsYS1pbWFnZS13aXRoLWR2aXBuZykNCiAgICAg KCdpbWFnZW1hZ2ljaw0KICAgICAgKG9yZy1jaGVjay1leHRlcm5hbC1jb21tYW5kDQogICAgICAg ImNvbnZlcnQiICJ5b3UgbmVlZCB0byBpbnN0YWxsIGltYWdlbWFnaWNrIikNCiAgICAgICMnb3Jn LWNyZWF0ZS1mb3JtdWxhLWltYWdlLXdpdGgtaW1hZ2VtYWdpY2spDQogICAgICh0IChlcnJvcg0K ICAgICAgICAgIkludmFsaWQgdmFsdWUgb2YgYG9yZy1sYXRleC1jcmVhdGUtZm9ybXVsYS1pbWFn ZS1wcm9ncmFtJyIpKSkNCiAgIHN0cmluZyB0b2ZpbGUgb3B0aW9ucyBidWZmZXIpKQ0KDQooZGVj bGFyZS1mdW5jdGlvbiBvcmctZXhwb3J0LWdldC1iYWNrZW5kICJveCIgKG5hbWUpKQ0KKGRlY2xh cmUtZnVuY3Rpb24gb3JnLWV4cG9ydC0tZ2V0LWdsb2JhbC1vcHRpb25zICJveCIgKCZvcHRpb25h bCBiYWNrZW5kKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1leHBvcnQtLWdldC1pbmJ1ZmZlci1v cHRpb25zICJveCIgKCZvcHRpb25hbCBiYWNrZW5kKSkNCihkZWNsYXJlLWZ1bmN0aW9uIG9yZy1s YXRleC1ndWVzcy1pbnB1dGVuYyAib3gtbGF0ZXgiIChoZWFkZXIpKQ0KKGRlY2xhcmUtZnVuY3Rp b24gb3JnLWxhdGV4LWd1ZXNzLWJhYmVsLWxhbmd1YWdlICJveC1sYXRleCIgKGhlYWRlciBpbmZv KSkNCihkZWZ1biBvcmctY3JlYXRlLWZvcm11bGEtLWxhdGV4LWhlYWRlciAoKQ0KICAiUmV0dXJu IExhVGVYIGhlYWRlciBhcHByb3ByaWF0ZSBmb3IgcHJldmlld2luZyBhIExhVGVYIHNuaXBwZXQu Ig0KICAobGV0ICgoaW5mbyAob3JnLWNvbWJpbmUtcGxpc3RzIChvcmctZXhwb3J0LS1nZXQtZ2xv YmFsLW9wdGlvbnMNCgkJCQkgICAob3JnLWV4cG9ydC1nZXQtYmFja2VuZCAnbGF0ZXgpKQ0KCQkJ CSAgKG9yZy1leHBvcnQtLWdldC1pbmJ1ZmZlci1vcHRpb25zDQoJCQkJICAgKG9yZy1leHBvcnQt Z2V0LWJhY2tlbmQgJ2xhdGV4KSkpKSkNCiAgICAob3JnLWxhdGV4LWd1ZXNzLWJhYmVsLWxhbmd1 YWdlDQogICAgIChvcmctbGF0ZXgtZ3Vlc3MtaW5wdXRlbmMNCiAgICAgIChvcmctc3BsaWNlLWxh dGV4LWhlYWRlcg0KICAgICAgIG9yZy1mb3JtYXQtbGF0ZXgtaGVhZGVyDQogICAgICAgb3JnLWxh dGV4LWRlZmF1bHQtcGFja2FnZXMtYWxpc3QNCiAgICAgICBvcmctbGF0ZXgtcGFja2FnZXMtYWxp c3QgdA0KICAgICAgIChwbGlzdC1nZXQgaW5mbyA6bGF0ZXgtaGVhZGVyKSkpDQogICAgIGluZm8p KSkNCg0KOzsgVGhpcyBmdW5jdGlvbiBib3Jyb3dzIGZyb20gR2FuZXNoIFN3YW1pJ3MgbGF0ZXgy cG5nLmVsDQooZGVmdW4gb3JnLWNyZWF0ZS1mb3JtdWxhLWltYWdlLXdpdGgtZHZpcG5nIChzdHJp bmcgdG9maWxlIG9wdGlvbnMgYnVmZmVyKQ0KICAiVGhpcyBjYWxscyBkdmlwbmcuIg0KICAocmVx dWlyZSAnb3gtbGF0ZXgpDQogIChsZXQqICgodG1wZGlyIChpZiAoZmVhdHVyZXAgJ3hlbWFjcykN CgkJICAgICAodGVtcC1kaXJlY3RvcnkpDQoJCSAgIHRlbXBvcmFyeS1maWxlLWRpcmVjdG9yeSkp DQoJICh0ZXhmaWxlYmFzZSAobWFrZS10ZW1wLW5hbWUNCgkJICAgICAgIChleHBhbmQtZmlsZS1u YW1lICJvcmd0ZXgiIHRtcGRpcikpKQ0KCSAodGV4ZmlsZSAoY29uY2F0IHRleGZpbGViYXNlICIu dGV4IikpDQoJIChkdmlmaWxlIChjb25jYXQgdGV4ZmlsZWJhc2UgIi5kdmkiKSkNCgkgKHBuZ2Zp bGUgKGNvbmNhdCB0ZXhmaWxlYmFzZSAiLnBuZyIpKQ0KCSAoZm5oIChpZiAoZmVhdHVyZXAgJ3hl bWFjcykNCiAgICAgICAgICAgICAgICAgIChmb250LWhlaWdodCAoZmFjZS1mb250ICdkZWZhdWx0 KSkNCiAgICAgICAgICAgICAgICAoZmFjZS1hdHRyaWJ1dGUgJ2RlZmF1bHQgOmhlaWdodCBuaWwp KSkNCgkgKHNjYWxlIChvciAocGxpc3QtZ2V0IG9wdGlvbnMgKGlmIGJ1ZmZlciA6c2NhbGUgOmh0 bWwtc2NhbGUpKSAxLjApKQ0KCSAoZHBpIChudW1iZXItdG8tc3RyaW5nICgqIHNjYWxlIChmbG9v ciAoKiAwLjkgKGlmIGJ1ZmZlciBmbmggMTQwLikpKSkpKQ0KCSAoZmcgKG9yIChwbGlzdC1nZXQg b3B0aW9ucyAoaWYgYnVmZmVyIDpmb3JlZ3JvdW5kIDpodG1sLWZvcmVncm91bmQpKQ0KCQkgIkJs YWNrIikpDQoJIChiZyAob3IgKHBsaXN0LWdldCBvcHRpb25zIChpZiBidWZmZXIgOmJhY2tncm91 bmQgOmh0bWwtYmFja2dyb3VuZCkpDQoJCSAiVHJhbnNwYXJlbnQiKSkpDQogICAgKGlmIChlcSBm ZyAnZGVmYXVsdCkgKHNldHEgZmcgKG9yZy1kdmlwbmctY29sb3IgOmZvcmVncm91bmQpKQ0KICAg ICAgKHVubGVzcyAoc3RyaW5nPSBmZyAiVHJhbnNwYXJlbnQiKSAoc2V0cSBmZyAob3JnLWR2aXBu Zy1jb2xvci1mb3JtYXQgZmcpKSkpDQogICAgKGlmIChlcSBiZyAnZGVmYXVsdCkgKHNldHEgYmcg KG9yZy1kdmlwbmctY29sb3IgOmJhY2tncm91bmQpKQ0KICAgICAgKHVubGVzcyAoc3RyaW5nPSBi ZyAiVHJhbnNwYXJlbnQiKSAoc2V0cSBiZyAob3JnLWR2aXBuZy1jb2xvci1mb3JtYXQgYmcpKSkp DQogICAgKGxldCAoKGxhdGV4LWhlYWRlciAob3JnLWNyZWF0ZS1mb3JtdWxhLS1sYXRleC1oZWFk ZXIpKSkNCiAgICAgICh3aXRoLXRlbXAtZmlsZSB0ZXhmaWxlDQoJKGluc2VydCBsYXRleC1oZWFk ZXIpDQoJKGluc2VydCAiXG5cXGJlZ2lue2RvY3VtZW50fVxuIiBzdHJpbmcgIlxuXFxlbmR7ZG9j dW1lbnR9XG4iKSkpDQogICAgKGxldCAoKGRpciBkZWZhdWx0LWRpcmVjdG9yeSkpDQogICAgICAo Y29uZGl0aW9uLWNhc2UgbmlsDQoJICAocHJvZ24NCgkgICAgKGNkIHRtcGRpcikNCgkgICAgKGNh bGwtcHJvY2VzcyAibGF0ZXgiIG5pbCBuaWwgbmlsIHRleGZpbGUpKQ0KCShlcnJvciBuaWwpKQ0K ICAgICAgKGNkIGRpcikpDQogICAgKGlmIChub3QgKGZpbGUtZXhpc3RzLXAgZHZpZmlsZSkpDQoJ KHByb2duIChtZXNzYWdlICJGYWlsZWQgdG8gY3JlYXRlIGR2aSBmaWxlIGZyb20gJXMiIHRleGZp bGUpIG5pbCkNCiAgICAgIChjb25kaXRpb24tY2FzZSBuaWwNCgkgIChpZiAoZmVhdHVyZXAgJ3hl bWFjcykNCgkgICAgICAoY2FsbC1wcm9jZXNzICJkdmlwbmciIG5pbCBuaWwgbmlsDQoJCQkgICAg Ii1mZyIgZmcgIi1iZyIgYmcNCgkJCSAgICAiLVQiICJ0aWdodCINCgkJCSAgICAiLW8iIHBuZ2Zp bGUNCgkJCSAgICBkdmlmaWxlKQ0KCSAgICAoY2FsbC1wcm9jZXNzICJkdmlwbmciIG5pbCBuaWwg bmlsDQoJCQkgICItZmciIGZnICItYmciIGJnDQoJCQkgICItRCIgZHBpDQoJCQkgIDs7Ii14IiBz Y2FsZSAiLXkiIHNjYWxlDQoJCQkgICItVCIgInRpZ2h0Ig0KCQkJICAiLW8iIHBuZ2ZpbGUNCgkJ CSAgZHZpZmlsZSkpDQoJKGVycm9yIG5pbCkpDQogICAgICAoaWYgKG5vdCAoZmlsZS1leGlzdHMt cCBwbmdmaWxlKSkNCgkgIChpZiBvcmctZm9ybWF0LWxhdGV4LXNpZ25hbC1lcnJvcg0KCSAgICAg IChlcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBwbmcgZmlsZSBmcm9tICVzIiB0ZXhmaWxlKQ0KCSAg ICAobWVzc2FnZSAiRmFpbGVkIHRvIGNyZWF0ZSBwbmcgZmlsZSBmcm9tICVzIiB0ZXhmaWxlKQ0K CSAgICBuaWwpDQoJOzsgVXNlIHRoZSByZXF1ZXN0ZWQgZmlsZSBuYW1lIGFuZCBjbGVhbiB1cA0K CShjb3B5LWZpbGUgcG5nZmlsZSB0b2ZpbGUgJ3JlcGxhY2UpDQoJKGxvb3AgZm9yIGUgaW4gJygi LmR2aSIgIi50ZXgiICIuYXV4IiAiLmxvZyIgIi5wbmciICIub3V0IikgZG8NCgkgICAgICAoaWYg KGZpbGUtZXhpc3RzLXAgKGNvbmNhdCB0ZXhmaWxlYmFzZSBlKSkNCgkJICAoZGVsZXRlLWZpbGUg KGNvbmNhdCB0ZXhmaWxlYmFzZSBlKSkpKQ0KCXBuZ2ZpbGUpKSkpDQoNCihkZWNsYXJlLWZ1bmN0 aW9uIG9yZy1sYXRleC1jb21waWxlICJveC1sYXRleCIgKHRleGZpbGUgJm9wdGlvbmFsIHNuaXBw ZXQpKQ0KKGRlZnVuIG9yZy1jcmVhdGUtZm9ybXVsYS1pbWFnZS13aXRoLWltYWdlbWFnaWNrIChz dHJpbmcgdG9maWxlIG9wdGlvbnMgYnVmZmVyKQ0KICAiVGhpcyBjYWxscyBjb252ZXJ0LCB3aGlj aCBpcyBpbmNsdWRlZCBpbnRvIGltYWdlbWFnaWNrLiINCiAgKHJlcXVpcmUgJ294LWxhdGV4KQ0K ICAobGV0KiAoKHRtcGRpciAoaWYgKGZlYXR1cmVwICd4ZW1hY3MpDQoJCSAgICAgKHRlbXAtZGly ZWN0b3J5KQ0KCQkgICB0ZW1wb3JhcnktZmlsZS1kaXJlY3RvcnkpKQ0KCSAodGV4ZmlsZWJhc2Ug KG1ha2UtdGVtcC1uYW1lDQoJCSAgICAgICAoZXhwYW5kLWZpbGUtbmFtZSAib3JndGV4IiB0bXBk aXIpKSkNCgkgKHRleGZpbGUgKGNvbmNhdCB0ZXhmaWxlYmFzZSAiLnRleCIpKQ0KCSAocGRmZmls ZSAoY29uY2F0IHRleGZpbGViYXNlICIucGRmIikpDQoJIChwbmdmaWxlIChjb25jYXQgdGV4Zmls ZWJhc2UgIi5wbmciKSkNCgkgKGZuaCAoaWYgKGZlYXR1cmVwICd4ZW1hY3MpDQogICAgICAgICAg ICAgICAgICAoZm9udC1oZWlnaHQgKGZhY2UtZm9udCAnZGVmYXVsdCkpDQogICAgICAgICAgICAg ICAgKGZhY2UtYXR0cmlidXRlICdkZWZhdWx0IDpoZWlnaHQgbmlsKSkpDQoJIChzY2FsZSAob3Ig KHBsaXN0LWdldCBvcHRpb25zIChpZiBidWZmZXIgOnNjYWxlIDpodG1sLXNjYWxlKSkgMS4wKSkN CgkgKGRwaSAobnVtYmVyLXRvLXN0cmluZyAoKiBzY2FsZSAoZmxvb3IgKGlmIGJ1ZmZlciBmbmgg MTIwLikpKSkpDQoJIChmZyAob3IgKHBsaXN0LWdldCBvcHRpb25zIChpZiBidWZmZXIgOmZvcmVn cm91bmQgOmh0bWwtZm9yZWdyb3VuZCkpDQoJCSAiYmxhY2siKSkNCgkgKGJnIChvciAocGxpc3Qt Z2V0IG9wdGlvbnMgKGlmIGJ1ZmZlciA6YmFja2dyb3VuZCA6aHRtbC1iYWNrZ3JvdW5kKSkNCgkJ ICJ3aGl0ZSIpKSkNCiAgICAoaWYgKGVxIGZnICdkZWZhdWx0KSAoc2V0cSBmZyAob3JnLWxhdGV4 LWNvbG9yIDpmb3JlZ3JvdW5kKSkNCiAgICAgIChzZXRxIGZnIChvcmctbGF0ZXgtY29sb3ItZm9y bWF0IGZnKSkpDQogICAgKGlmIChlcSBiZyAnZGVmYXVsdCkgKHNldHEgYmcgKG9yZy1sYXRleC1j b2xvciA6YmFja2dyb3VuZCkpDQogICAgICAoc2V0cSBiZyAob3JnLWxhdGV4LWNvbG9yLWZvcm1h dA0KCQkoaWYgKHN0cmluZz0gYmcgIlRyYW5zcGFyZW50IikgIndoaXRlIiBiZykpKSkNCiAgICAo bGV0ICgobGF0ZXgtaGVhZGVyIChvcmctY3JlYXRlLWZvcm11bGEtLWxhdGV4LWhlYWRlcikpKQ0K ICAgICAgKHdpdGgtdGVtcC1maWxlIHRleGZpbGUNCgkoaW5zZXJ0IGxhdGV4LWhlYWRlcikNCgko aW5zZXJ0ICJcblxcYmVnaW57ZG9jdW1lbnR9XG4iDQoJCSJcXGRlZmluZWNvbG9ye2ZnfXtyZ2J9 eyIgZmcgIn1cbiINCgkJIlxcZGVmaW5lY29sb3J7Ymd9e3JnYn17IiBiZyAifVxuIg0KCQkiXG5c XHBhZ2Vjb2xvcntiZ31cbiINCgkJIlxue1xcY29sb3J7Zmd9XG4iDQoJCXN0cmluZw0KCQkiXG59 XG4iDQoJCSJcblxcZW5ke2RvY3VtZW50fVxuIikpKQ0KICAgIChvcmctbGF0ZXgtY29tcGlsZSB0 ZXhmaWxlIHQpDQogICAgKGlmIChub3QgKGZpbGUtZXhpc3RzLXAgcGRmZmlsZSkpDQoJKHByb2du IChtZXNzYWdlICJGYWlsZWQgdG8gY3JlYXRlIHBkZiBmaWxlIGZyb20gJXMiIHRleGZpbGUpIG5p bCkNCiAgICAgIChjb25kaXRpb24tY2FzZSBuaWwNCgkgIChpZiAoZmVhdHVyZXAgJ3hlbWFjcykN CgkgICAgICAoY2FsbC1wcm9jZXNzICJjb252ZXJ0IiBuaWwgbmlsIG5pbA0KCQkJICAgICItZGVu c2l0eSIgIjk2Ig0KCQkJICAgICItdHJpbSINCgkJCSAgICAiLWFudGlhbGlhcyINCgkJCSAgICBw ZGZmaWxlDQoJCQkgICAgIi1xdWFsaXR5IiAiMTAwIg0KCQkJICAgIDs7ICItc2hhcnBlbiIgIjB4 MS4wIg0KCQkJICAgIHBuZ2ZpbGUpDQoJICAgIChjYWxsLXByb2Nlc3MgImNvbnZlcnQiIG5pbCBu aWwgbmlsDQoJCQkgICItZGVuc2l0eSIgZHBpDQoJCQkgICItdHJpbSINCgkJCSAgIi1hbnRpYWxp YXMiDQoJCQkgIHBkZmZpbGUNCgkJCSAgIi1xdWFsaXR5IiAiMTAwIg0KCQkJICA7OyAiLXNoYXJw ZW4iICIweDEuMCINCgkJCSAgcG5nZmlsZSkpDQoJKGVycm9yIG5pbCkpDQogICAgICAoaWYgKG5v dCAoZmlsZS1leGlzdHMtcCBwbmdmaWxlKSkNCgkgIChpZiBvcmctZm9ybWF0LWxhdGV4LXNpZ25h bC1lcnJvcg0KCSAgICAgIChlcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBwbmcgZmlsZSBmcm9tICVz IiB0ZXhmaWxlKQ0KCSAgICAobWVzc2FnZSAiRmFpbGVkIHRvIGNyZWF0ZSBwbmcgZmlsZSBmcm9t ICVzIiB0ZXhmaWxlKQ0KCSAgICBuaWwpDQoJOzsgVXNlIHRoZSByZXF1ZXN0ZWQgZmlsZSBuYW1l IGFuZCBjbGVhbiB1cA0KCShjb3B5LWZpbGUgcG5nZmlsZSB0b2ZpbGUgJ3JlcGxhY2UpDQoJKGxv b3AgZm9yIGUgaW4gJygiLnBkZiIgIi50ZXgiICIuYXV4IiAiLmxvZyIgIi5wbmciKSBkbw0KCSAg ICAgIChpZiAoZmlsZS1leGlzdHMtcCAoY29uY2F0IHRleGZpbGViYXNlIGUpKQ0KCQkgIChkZWxl dGUtZmlsZSAoY29uY2F0IHRleGZpbGViYXNlIGUpKSkpDQoJcG5nZmlsZSkpKSkNCg0KKGRlZnVu IG9yZy1zcGxpY2UtbGF0ZXgtaGVhZGVyICh0cGwgZGVmLXBrZyBwa2cgc25pcHBldHMtcCAmb3B0 aW9uYWwgZXh0cmEpDQogICJGaWxsIGEgTGFUZVggaGVhZGVyIHRlbXBsYXRlIFRQTC4NCkluIHRo ZSB0ZW1wbGF0ZSwgdGhlIGZvbGxvd2luZyBwbGFjZSBob2xkZXJzIHdpbGwgYmUgcmVjb2duaXpl ZDoNCg0KIFtERUZBVUxULVBBQ0tBR0VTXSAgICAgIFxcdXNlcGFja2FnZSBzdGF0ZW1lbnRzIGZv ciBERUYtUEtHDQogW05PLURFRkFVTFQtUEFDS0FHRVNdICAgZG8gbm90IGluY2x1ZGUgREVGLVBL Rw0KIFtQQUNLQUdFU10gICAgICAgICAgICAgIFxcdXNlcGFja2FnZSBzdGF0ZW1lbnRzIGZvciBQ S0cNCiBbTk8tUEFDS0FHRVNdICAgICAgICAgICBkbyBub3QgaW5jbHVkZSBQS0cNCiBbRVhUUkFd ICAgICAgICAgICAgICAgICB0aGUgc3RyaW5nIEVYVFJBDQogW05PLUVYVFJBXSAgICAgICAgICAg ICAgZG8gbm90IGluY2x1ZGUgRVhUUkENCg0KRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlm IGJvdGggdGhlIHBvc2l0aXZlIGFuZCB0aGUgbmVnYXRpdmUgcGxhY2UNCmhvbGRlciBpcyBtaXNz aW5nLCB0aGUgcG9zaXRpdmUgb25lICh3aXRob3V0IHRoZSBcIk5PLVwiKSB3aWxsIGJlDQphc3N1 bWVkIHRvIGJlIHByZXNlbnQgYXQgdGhlIGVuZCBvZiB0aGUgdGVtcGxhdGUuDQpERUYtUEtHIGFu ZCBQS0cgYXJlIGFzc3VtZWQgdG8gYmUgYWxpc3RzIG9mIG9wdGlvbnMvcGFja2FnZW5hbWUgbGlz dHMuDQpFWFRSQSBpcyBhIHN0cmluZy4NClNOSVBQRVRTLVAgaW5kaWNhdGVzIGlmIHRoaXMgaXMg cnVuIHRvIGNyZWF0ZSBzbmlwcGV0IGltYWdlcyBmb3IgSFRNTC4iDQogIChsZXQgKHJwbCAoZW5k ICIiKSkNCiAgICAoaWYgKHN0cmluZy1tYXRjaCAiXlsgXHRdKlxcW1xcKE5PLVxcKT9ERUZBVUxU LVBBQ0tBR0VTXFxdWyBcdF0qXG4/IiB0cGwpDQoJKHNldHEgcnBsIChpZiAob3IgKG1hdGNoLWVu ZCAxKSAobm90IGRlZi1wa2cpKQ0KCQkgICAgICAiIiAob3JnLWxhdGV4LXBhY2thZ2VzLXRvLXN0 cmluZyBkZWYtcGtnIHNuaXBwZXRzLXAgdCkpDQoJICAgICAgdHBsIChyZXBsYWNlLW1hdGNoIHJw bCB0IHQgdHBsKSkNCiAgICAgIChpZiBkZWYtcGtnIChzZXRxIGVuZCAob3JnLWxhdGV4LXBhY2th Z2VzLXRvLXN0cmluZyBkZWYtcGtnIHNuaXBwZXRzLXApKSkpDQoNCiAgICAoaWYgKHN0cmluZy1t YXRjaCAiXFxbXFwoTk8tXFwpP1BBQ0tBR0VTXFxdWyBcdF0qXG4/IiB0cGwpDQoJKHNldHEgcnBs IChpZiAob3IgKG1hdGNoLWVuZCAxKSAobm90IHBrZykpDQoJCSAgICAgICIiIChvcmctbGF0ZXgt cGFja2FnZXMtdG8tc3RyaW5nIHBrZyBzbmlwcGV0cy1wIHQpKQ0KCSAgICAgIHRwbCAocmVwbGFj ZS1tYXRjaCBycGwgdCB0IHRwbCkpDQogICAgICAoaWYgcGtnIChzZXRxIGVuZA0KCQkgICAgKGNv bmNhdCBlbmQgIlxuIg0KCQkJICAgIChvcmctbGF0ZXgtcGFja2FnZXMtdG8tc3RyaW5nIHBrZyBz bmlwcGV0cy1wKSkpKSkNCg0KICAgIChpZiAoc3RyaW5nLW1hdGNoICJcXFtcXChOTy1cXCk/RVhU UkFcXF1bIFx0XSpcbj8iIHRwbCkNCgkoc2V0cSBycGwgKGlmIChvciAobWF0Y2gtZW5kIDEpIChu b3QgZXh0cmEpKQ0KCQkgICAgICAiIiAoY29uY2F0IGV4dHJhICJcbiIpKQ0KCSAgICAgIHRwbCAo cmVwbGFjZS1tYXRjaCBycGwgdCB0IHRwbCkpDQogICAgICAoaWYgKGFuZCBleHRyYSAoc3RyaW5n LW1hdGNoICJcXFMtIiBleHRyYSkpDQoJICAoc2V0cSBlbmQgKGNvbmNhdCBlbmQgIlxuIiBleHRy YSkpKSkNCg0KICAgIChpZiAoc3RyaW5nLW1hdGNoICJcXFMtIiBlbmQpDQoJKGNvbmNhdCB0cGwg IlxuIiBlbmQpDQogICAgICB0cGwpKSkNCg0KKGRlZnVuIG9yZy1sYXRleC1wYWNrYWdlcy10by1z dHJpbmcgKHBrZyAmb3B0aW9uYWwgc25pcHBldHMtcCBuZXdsaW5lKQ0KICAiVHVybiBhbiBhbGlz dCBvZiBwYWNrYWdlcyBpbnRvIGEgc3RyaW5nIHdpdGggdGhlIFxcdXNlcGFja2FnZSBtYWNyb3Mu Ig0KICAoc2V0cSBwa2cgKG1hcGNvbmNhdCAobGFtYmRhKHApDQoJCQkgKGNvbmQNCgkJCSAgKChz dHJpbmdwIHApIHApDQoJCQkgICgoYW5kIHNuaXBwZXRzLXAgKD49IChsZW5ndGggcCkgMykgKG5v dCAobnRoIDIgcCkpKQ0KCQkJICAgKGZvcm1hdCAiJSUgUGFja2FnZSAlcyBvbWl0dGVkIiAoY2Fk ciBwKSkpDQoJCQkgICgoZXF1YWwgIiIgKGNhciBwKSkNCgkJCSAgIChmb3JtYXQgIlxcdXNlcGFj a2FnZXslc30iIChjYWRyIHApKSkNCgkJCSAgKHQNCgkJCSAgIChmb3JtYXQgIlxcdXNlcGFja2Fn ZVslc117JXN9Ig0KCQkJCSAgIChjYXIgcCkgKGNhZHIgcCkpKSkpDQoJCSAgICAgICBwa2cNCgkJ ICAgICAgICJcbiIpKQ0KICAoaWYgbmV3bGluZSAoY29uY2F0IHBrZyAiXG4iKSBwa2cpKQ0KDQoo ZGVmdW4gb3JnLWR2aXBuZy1jb2xvciAoYXR0cikNCiAgIlJldHVybiBhIFJHQiBjb2xvciBzcGVj aWZpY2F0aW9uIGZvciBkdmlwbmcuIg0KICAoYXBwbHkgJ2Zvcm1hdCAicmdiICVzICVzICVzIg0K CSAobWFwY2FyICdvcmctbm9ybWFsaXplLWNvbG9yDQoJCSAoaWYgKGZlYXR1cmVwICd4ZW1hY3Mp DQoJCSAgICAgKGNvbG9yLXJnYi1jb21wb25lbnRzDQoJCSAgICAgIChmYWNlLXByb3BlcnR5ICdk ZWZhdWx0DQoJCQkJICAgICAoY29uZCAoKGVxIGF0dHIgOmZvcmVncm91bmQpICdmb3JlZ3JvdW5k KQ0KCQkJCQkgICAoKGVxIGF0dHIgOmJhY2tncm91bmQpICdiYWNrZ3JvdW5kKSkpKQ0KCQkgICAo Y29sb3ItdmFsdWVzIChmYWNlLWF0dHJpYnV0ZSAnZGVmYXVsdCBhdHRyIG5pbCkpKSkpKQ0KDQoo ZGVmdW4gb3JnLWR2aXBuZy1jb2xvci1mb3JtYXQgKGNvbG9yLW5hbWUpDQogICJDb252ZXJ0IENP TE9SLU5BTUUgdG8gYSBSR0IgY29sb3IgdmFsdWUgZm9yIGR2aXBuZy4iDQogIChhcHBseSAnZm9y bWF0ICJyZ2IgJXMgJXMgJXMiDQoJIChtYXBjYXIgJ29yZy1ub3JtYWxpemUtY29sb3INCiAgICAg ICAgICAgICAgICAgKGNvbG9yLXZhbHVlcyBjb2xvci1uYW1lKSkpKQ0KDQooZGVmdW4gb3JnLWxh dGV4LWNvbG9yIChhdHRyKQ0KICAiUmV0dXJuIGEgUkdCIGNvbG9yIGZvciB0aGUgTGFUZVggY29s b3IgcGFja2FnZS4iDQogIChhcHBseSAnZm9ybWF0ICIlcywlcywlcyINCgkgKG1hcGNhciAnb3Jn LW5vcm1hbGl6ZS1jb2xvcg0KCQkgKGlmIChmZWF0dXJlcCAneGVtYWNzKQ0KCQkgICAgIChjb2xv ci1yZ2ItY29tcG9uZW50cw0KCQkgICAgICAoZmFjZS1wcm9wZXJ0eSAnZGVmYXVsdA0KCQkJCSAg ICAgKGNvbmQgKChlcSBhdHRyIDpmb3JlZ3JvdW5kKSAnZm9yZWdyb3VuZCkNCgkJCQkJICAgKChl cSBhdHRyIDpiYWNrZ3JvdW5kKSAnYmFja2dyb3VuZCkpKSkNCgkJICAgKGNvbG9yLXZhbHVlcyAo ZmFjZS1hdHRyaWJ1dGUgJ2RlZmF1bHQgYXR0ciBuaWwpKSkpKSkNCg0KKGRlZnVuIG9yZy1sYXRl eC1jb2xvci1mb3JtYXQgKGNvbG9yLW5hbWUpDQogICJDb252ZXJ0IENPTE9SLU5BTUUgdG8gYSBS R0IgY29sb3IgdmFsdWUuIg0KICAoYXBwbHkgJ2Zvcm1hdCAiJXMsJXMsJXMiDQoJIChtYXBjYXIg J29yZy1ub3JtYWxpemUtY29sb3INCgkJIChjb2xvci12YWx1ZXMgY29sb3ItbmFtZSkpKSkNCg0K KGRlZnVuIG9yZy1ub3JtYWxpemUtY29sb3IgKHZhbHVlKQ0KICAiUmV0dXJuIHN0cmluZyB0byBi ZSB1c2VkIGFzIGNvbG9yIHZhbHVlIGZvciBhbiBSR0IgY29tcG9uZW50LiINCiAgKGZvcm1hdCAi JWciICgvIHZhbHVlIDY1NTM1LjApKSkNCg0KDQoMDQo7OyBJbWFnZSBkaXNwbGF5DQoNCihkZWZ2 YXIgb3JnLWlubGluZS1pbWFnZS1vdmVybGF5cyBuaWwpDQoobWFrZS12YXJpYWJsZS1idWZmZXIt bG9jYWwgJ29yZy1pbmxpbmUtaW1hZ2Utb3ZlcmxheXMpDQoNCihkZWZ1biBvcmctdG9nZ2xlLWlu bGluZS1pbWFnZXMgKCZvcHRpb25hbCBpbmNsdWRlLWxpbmtlZCkNCiAgIlRvZ2dsZSB0aGUgZGlz cGxheSBvZiBpbmxpbmUgaW1hZ2VzLg0KSU5DTFVERS1MSU5LRUQgaXMgcGFzc2VkIHRvIGBvcmct ZGlzcGxheS1pbmxpbmUtaW1hZ2VzJy4iDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChpZiBvcmct aW5saW5lLWltYWdlLW92ZXJsYXlzDQogICAgICAocHJvZ24NCgkob3JnLXJlbW92ZS1pbmxpbmUt aW1hZ2VzKQ0KCShtZXNzYWdlICJJbmxpbmUgaW1hZ2UgZGlzcGxheSB0dXJuZWQgb2ZmIikpDQog ICAgKG9yZy1kaXNwbGF5LWlubGluZS1pbWFnZXMgaW5jbHVkZS1saW5rZWQpDQogICAgKGlmIChh bmQgKG9yZy1jYWxsZWQtaW50ZXJhY3RpdmVseS1wKQ0KCSAgICAgb3JnLWlubGluZS1pbWFnZS1v dmVybGF5cykNCgkobWVzc2FnZSAiJWQgaW1hZ2VzIGRpc3BsYXllZCBpbmxpbmUiDQoJCSAobGVu Z3RoIG9yZy1pbmxpbmUtaW1hZ2Utb3ZlcmxheXMpKQ0KICAgICAgKG1lc3NhZ2UgIk5vIGltYWdl cyB0byBkaXNwbGF5IGlubGluZSIpKSkpDQoNCihkZWZ1biBvcmctcmVkaXNwbGF5LWlubGluZS1p bWFnZXMgKCkNCiAgIlJlZnJlc2ggdGhlIGRpc3BsYXkgb2YgaW5saW5lIGltYWdlcy4iDQogIChp bnRlcmFjdGl2ZSkNCiAgKGlmIChub3Qgb3JnLWlubGluZS1pbWFnZS1vdmVybGF5cykNCiAgICAg IChvcmctdG9nZ2xlLWlubGluZS1pbWFnZXMpDQogICAgKG9yZy10b2dnbGUtaW5saW5lLWltYWdl cykNCiAgICAob3JnLXRvZ2dsZS1pbmxpbmUtaW1hZ2VzKSkpDQoNCihkZWZ1biBvcmctZGlzcGxh eS1pbmxpbmUtaW1hZ2VzICgmb3B0aW9uYWwgaW5jbHVkZS1saW5rZWQgcmVmcmVzaCBiZWcgZW5k KQ0KICAiRGlzcGxheSBpbmxpbmUgaW1hZ2VzLg0KTm9ybWFsbHkgb25seSBsaW5rcyB3aXRob3V0 IGEgZGVzY3JpcHRpb24gcGFydCBhcmUgaW5saW5lZCwgYmVjYXVzZSB0aGlzDQppcyBob3cgaXQg d2lsbCB3b3JrIGZvciBleHBvcnQuICBXaGVuIElOQ0xVREUtTElOS0VEIGlzIHNldCwgYWxzbyBs aW5rcw0Kd2l0aCBhIGRlc2NyaXB0aW9uIHBhcnQgd2lsbCBiZSBpbmxpbmVkLiAgVGhpcyBjYW4g YmUgbmljZSBmb3IgYSBxdWljaw0KbG9vayBhdCB0aG9zZSBpbWFnZXMsIGJ1dCBpdCBkb2VzIG5v dCByZWZsZWN0IHdoYXQgZXhwb3J0ZWQgZmlsZXMgd2lsbCBsb29rDQpsaWtlLg0KV2hlbiBSRUZS RVNIIGlzIHNldCwgcmVmcmVzaCBleGlzdGluZyBpbWFnZXMgYmV0d2VlbiBCRUcgYW5kIEVORC4N ClRoaXMgd2lsbCBjcmVhdGUgbmV3IGltYWdlIGRpc3BsYXlzIG9ubHkgaWYgbmVjZXNzYXJ5Lg0K QkVHIGFuZCBFTkQgZGVmYXVsdCB0byB0aGUgYnVmZmVyIGJvdW5kYXJpZXMuIg0KICAoaW50ZXJh Y3RpdmUgIlAiKQ0KICAod2hlbiAoZGlzcGxheS1ncmFwaGljLXApDQogICAgKHVubGVzcyByZWZy ZXNoDQogICAgICAob3JnLXJlbW92ZS1pbmxpbmUtaW1hZ2VzKQ0KICAgICAgKGlmIChmYm91bmRw ICdjbGVhci1pbWFnZS1jYWNoZSkgKGNsZWFyLWltYWdlLWNhY2hlKSkpDQogICAgKHNhdmUtZXhj dXJzaW9uDQogICAgICAoc2F2ZS1yZXN0cmljdGlvbg0KCSh3aWRlbikNCgkoc2V0cSBiZWcgKG9y IGJlZyAocG9pbnQtbWluKSkgZW5kIChvciBlbmQgKHBvaW50LW1heCkpKQ0KCShnb3RvLWNoYXIg YmVnKQ0KCShsZXQgKChyZSAoY29uY2F0ICJcXFtcXFtcXChcXChmaWxlOlxcKVxcfFxcKFsuL35d XFwpXFwpXFwoW15dXG5dKz8iDQoJCQkgIChzdWJzdHJpbmcgKG9yZy1pbWFnZS1maWxlLW5hbWUt cmVnZXhwKSAwIC0yKQ0KCQkJICAiXFwpXFxdIiAoaWYgaW5jbHVkZS1saW5rZWQgIiIgIlxcXSIp KSkNCgkgICAgICAoY2FzZS1mb2xkLXNlYXJjaCB0KQ0KCSAgICAgIG9sZCBmaWxlIG92IGltZyB0 eXBlIGF0dHJ3aWR0aCB3aWR0aCkNCgkgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgcmUgZW5k IHQpDQoJICAgIChzZXRxIG9sZCAoZ2V0LWNoYXItcHJvcGVydHktYW5kLW92ZXJsYXkgKG1hdGNo LWJlZ2lubmluZyAxKQ0KCQkJCQkJICAgICAnb3JnLWltYWdlLW92ZXJsYXkpDQoJCSAgZmlsZSAo ZXhwYW5kLWZpbGUtbmFtZQ0KCQkJKGNvbmNhdCAob3IgKG1hdGNoLXN0cmluZyAzKSAiIikgKG1h dGNoLXN0cmluZyA0KSkpKQ0KCSAgICAod2hlbiAoaW1hZ2UtdHlwZS1hdmFpbGFibGUtcCAnaW1h Z2VtYWdpY2spDQoJICAgICAgKHNldHEgYXR0cndpZHRoIChpZiAob3IgKGxpc3RwIG9yZy1pbWFn ZS1hY3R1YWwtd2lkdGgpDQoJCQkJICAgICAgKG51bGwgb3JnLWltYWdlLWFjdHVhbC13aWR0aCkp DQoJCQkJICAoc2F2ZS1leGN1cnNpb24NCgkJCQkgICAgKHNhdmUtbWF0Y2gtZGF0YQ0KCQkJCSAg ICAgICh3aGVuIChyZS1zZWFyY2gtYmFja3dhcmQNCgkJCQkJICAgICAiI1xcK2F0dHIuKjp3aWR0 aFsgXHRdK1xcKFteIF0rXFwpIg0KCQkJCQkgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCQkJCQkgICAg ICAgKHJlLXNlYXJjaC1iYWNrd2FyZCAiXlsgXHRdKiRcXHxcXGAiIG5pbCB0KSkgdCkNCgkJCQkJ KHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAxKSkpKSkpDQoJCSAgICB3aWR0aCAoY29u ZCAoKGVxIG9yZy1pbWFnZS1hY3R1YWwtd2lkdGggdCkgbmlsKQ0KCQkJCSgobnVsbCBvcmctaW1h Z2UtYWN0dWFsLXdpZHRoKSBhdHRyd2lkdGgpDQoJCQkJKChudW1iZXJwIG9yZy1pbWFnZS1hY3R1 YWwtd2lkdGgpDQoJCQkJIG9yZy1pbWFnZS1hY3R1YWwtd2lkdGgpDQoJCQkJKChsaXN0cCBvcmct aW1hZ2UtYWN0dWFsLXdpZHRoKQ0KCQkJCSAob3IgYXR0cndpZHRoIChjYXIgb3JnLWltYWdlLWFj dHVhbC13aWR0aCkpKSkNCgkJICAgIHR5cGUgKGlmIHdpZHRoICdpbWFnZW1hZ2ljaykpKQ0KCSAg ICAod2hlbiAoZmlsZS1leGlzdHMtcCBmaWxlKQ0KCSAgICAgIChpZiAoYW5kIChjYXItc2FmZSBv bGQpIHJlZnJlc2gpDQoJCSAgKGltYWdlLXJlZnJlc2ggKG92ZXJsYXktZ2V0IChjZHIgb2xkKSAn ZGlzcGxheSkpDQoJCShzZXRxIGltZyAoc2F2ZS1tYXRjaC1kYXRhIChjcmVhdGUtaW1hZ2UgZmls ZSB0eXBlIG5pbCA6d2lkdGggd2lkdGgpKSkNCgkJKHdoZW4gaW1nDQoJCSAgKHNldHEgb3YgKG1h a2Utb3ZlcmxheSAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMCkpKQ0KCQkgIChvdmVy bGF5LXB1dCBvdiAnZGlzcGxheSBpbWcpDQoJCSAgKG92ZXJsYXktcHV0IG92ICdmYWNlICdkZWZh dWx0KQ0KCQkgIChvdmVybGF5LXB1dCBvdiAnb3JnLWltYWdlLW92ZXJsYXkgdCkNCgkJICAob3Zl cmxheS1wdXQgb3YgJ21vZGlmaWNhdGlvbi1ob29rcw0KCQkJICAgICAgIChsaXN0ICdvcmctZGlz cGxheS1pbmxpbmUtcmVtb3ZlLW92ZXJsYXkpKQ0KCQkgIChwdXNoIG92IG9yZy1pbmxpbmUtaW1h Z2Utb3ZlcmxheXMpKSkpKSkpKSkpDQoNCihkZWZpbmUtb2Jzb2xldGUtZnVuY3Rpb24tYWxpYXMN CiAgJ29yZy1kaXNwbGF5LWlubGluZS1tb2RpZmljYXRpb24taG9vayAnb3JnLWRpc3BsYXktaW5s aW5lLXJlbW92ZS1vdmVybGF5ICIyNC4zIikNCg0KKGRlZnVuIG9yZy1kaXNwbGF5LWlubGluZS1y ZW1vdmUtb3ZlcmxheSAob3YgYWZ0ZXIgYmVnIGVuZCAmb3B0aW9uYWwgbGVuKQ0KICAiUmVtb3Zl IGlubGluZS1kaXNwbGF5IG92ZXJsYXkgaWYgYSBjb3JyZXNwb25kaW5nIHJlZ2lvbiBpcyBtb2Rp ZmllZC4iDQogIChsZXQgKChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KSkNCiAgICAod2hl biAoYW5kIG92IGFmdGVyKQ0KICAgICAgKGRlbGV0ZSBvdiBvcmctaW5saW5lLWltYWdlLW92ZXJs YXlzKQ0KICAgICAgKGRlbGV0ZS1vdmVybGF5IG92KSkpKQ0KDQooZGVmdW4gb3JnLXJlbW92ZS1p bmxpbmUtaW1hZ2VzICgpDQogICJSZW1vdmUgaW5saW5lIGRpc3BsYXkgb2YgaW1hZ2VzLiINCiAg KGludGVyYWN0aXZlKQ0KICAobWFwYyAnZGVsZXRlLW92ZXJsYXkgb3JnLWlubGluZS1pbWFnZS1v dmVybGF5cykNCiAgKHNldHEgb3JnLWlubGluZS1pbWFnZS1vdmVybGF5cyBuaWwpKQ0KDQo7Ozs7 IEtleSBiaW5kaW5ncw0KDQo7OyBPdXRsaW5lIGZ1bmN0aW9ucyBmcm9tIGBvdXRsaW5lLW1vZGUt cHJlZml4LW1hcCcNCjs7IHRoYXQgY2FuIGJlIHJlbWFwcGVkIGluIE9yZzoNCihkZWZpbmUta2V5 IG9yZy1tb2RlLW1hcCBbcmVtYXAgb3V0bGluZS1tYXJrLXN1YnRyZWVdICdvcmctbWFyay1zdWJ0 cmVlKQ0KKGRlZmluZS1rZXkgb3JnLW1vZGUtbWFwIFtyZW1hcCBzaG93LXN1YnRyZWVdICdvcmct c2hvdy1zdWJ0cmVlKQ0KKGRlZmluZS1rZXkgb3JnLW1vZGUtbWFwIFtyZW1hcCBvdXRsaW5lLWZv cndhcmQtc2FtZS1sZXZlbF0NCiAgJ29yZy1mb3J3YXJkLWhlYWRpbmctc2FtZS1sZXZlbCkNCihk ZWZpbmUta2V5IG9yZy1tb2RlLW1hcCBbcmVtYXAgb3V0bGluZS1iYWNrd2FyZC1zYW1lLWxldmVs XQ0KICAnb3JnLWJhY2t3YXJkLWhlYWRpbmctc2FtZS1sZXZlbCkNCihkZWZpbmUta2V5IG9yZy1t b2RlLW1hcCBbcmVtYXAgc2hvdy1icmFuY2hlc10NCiAgJ29yZy1raWxsLW5vdGUtb3Itc2hvdy1i cmFuY2hlcykNCihkZWZpbmUta2V5IG9yZy1tb2RlLW1hcCBbcmVtYXAgb3V0bGluZS1wcm9tb3Rl XSAnb3JnLXByb21vdGUtc3VidHJlZSkNCihkZWZpbmUta2V5IG9yZy1tb2RlLW1hcCBbcmVtYXAg b3V0bGluZS1kZW1vdGVdICdvcmctZGVtb3RlLXN1YnRyZWUpDQooZGVmaW5lLWtleSBvcmctbW9k ZS1tYXAgW3JlbWFwIG91dGxpbmUtaW5zZXJ0LWhlYWRpbmddICdvcmctY3RybC1jLXJldCkNCg0K OzsgT3V0bGluZSBmdW5jdGlvbnMgZnJvbSBgb3V0bGluZS1tb2RlLXByZWZpeC1tYXAnIHRoYXQg Y2FuIG5vdA0KOzsgYmUgcmVtYXBwZWQgaW4gT3JnOg0KOzsNCjs7IC0gdGhlIGNvbHVtbiAia2V5 IGJpbmRpbmciIHNob3dzIHdoZXRoZXIgdGhlIE91dGxpbmUgZnVuY3Rpb24gaXMgc3RpbGwNCjs7 ICAgYXZhaWxhYmxlIGluIE9yZyBtb2RlIG9uIHRoZSBzYW1lIGtleSB0aGF0IGl0IGhhcyBiZWVu IGJvdW5kIHRvIGluDQo7OyAgIE91dGxpbmUgbW9kZToNCjs7ICAgLSAib3ZlcnJpZGRlbiI6IGtl eSB1c2VkIGZvciBhIGRpZmZlcmVudCBmdW5jdGlvbmFsaXR5IGluIE9yZyBtb2RlDQo7OyAgIC0g ZWxzZToga2V5IHN0aWxsIGJvdW5kIHRvIHRoZSBzYW1lIE91dGxpbmUgZnVuY3Rpb24gaW4gT3Jn IG1vZGUNCjs7DQo7OyB8IE91dGxpbmUgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgfCBrZXkg YmluZGluZyB8IE9yZyByZXBsYWNlbWVudCAgICAgICB8DQo7OyB8LS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18 DQo7OyB8IGBvdXRsaW5lLW5leHQtdmlzaWJsZS1oZWFkaW5nJyAgICAgfCBgQy1jIEMtbicgICB8 IHN0aWxsIHNhbWUgZnVuY3Rpb24gICB8DQo7OyB8IGBvdXRsaW5lLXByZXZpb3VzLXZpc2libGUt aGVhZGluZycgfCBgQy1jIEMtcCcgICB8IHN0aWxsIHNhbWUgZnVuY3Rpb24gICB8DQo7OyB8IGBv dXRsaW5lLXVwLWhlYWRpbmcnICAgICAgICAgICAgICAgfCBgQy1jIEMtdScgICB8IHN0aWxsIHNh bWUgZnVuY3Rpb24gICB8DQo7OyB8IGBvdXRsaW5lLW1vdmUtc3VidHJlZS11cCcgICAgICAgICAg fCBvdmVycmlkZGVuICB8IGJldHRlcjogb3JnLXNoaWZ0dXAgICB8DQo7OyB8IGBvdXRsaW5lLW1v dmUtc3VidHJlZS1kb3duJyAgICAgICAgfCBvdmVycmlkZGVuICB8IGJldHRlcjogb3JnLXNoaWZ0 ZG93biB8DQo7OyB8IGBzaG93LWVudHJ5JyAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVycmlk ZGVuICB8IG5vIHJlcGxhY2VtZW50ICAgICAgICB8DQo7OyB8IGBzaG93LWNoaWxkcmVuJyAgICAg ICAgICAgICAgICAgICAgfCBgQy1jIEMtaScgICB8IHZpc2liaWxpdHkgY3ljbGluZyAgICB8DQo7 OyB8IGBzaG93LWJyYW5jaGVzJyAgICAgICAgICAgICAgICAgICAgfCBgQy1jIEMtaycgICB8IHN0 aWxsIHNhbWUgZnVuY3Rpb24gICB8DQo7OyB8IGBzaG93LXN1YnRyZWUnICAgICAgICAgICAgICAg ICAgICAgfCBvdmVycmlkZGVuICB8IHZpc2liaWxpdHkgY3ljbGluZyAgICB8DQo7OyB8IGBzaG93 LWFsbCcgICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVycmlkZGVuICB8IG5vIHJlcGxhY2Vt ZW50ICAgICAgICB8DQo7OyB8IGBoaWRlLXN1YnRyZWUnICAgICAgICAgICAgICAgICAgICAgfCBv dmVycmlkZGVuICB8IHZpc2liaWxpdHkgY3ljbGluZyAgICB8DQo7OyB8IGBoaWRlLWJvZHknICAg ICAgICAgICAgICAgICAgICAgICAgfCBvdmVycmlkZGVuICB8IG5vIHJlcGxhY2VtZW50ICAgICAg ICB8DQo7OyB8IGBoaWRlLWVudHJ5JyAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVycmlkZGVu ICB8IHZpc2liaWxpdHkgY3ljbGluZyAgICB8DQo7OyB8IGBoaWRlLWxlYXZlcycgICAgICAgICAg ICAgICAgICAgICAgfCBvdmVycmlkZGVuICB8IG5vIHJlcGxhY2VtZW50ICAgICAgICB8DQo7OyB8 IGBoaWRlLXN1YmxldmVscycgICAgICAgICAgICAgICAgICAgfCBvdmVycmlkZGVuICB8IG5vIHJl cGxhY2VtZW50ICAgICAgICB8DQo7OyB8IGBoaWRlLW90aGVyJyAgICAgICAgICAgICAgICAgICAg ICAgfCBvdmVycmlkZGVuICB8IG5vIHJlcGxhY2VtZW50ICAgICAgICB8DQoNCjs7IE1ha2UgYEMt YyBDLXgnIGEgcHJlZml4IGtleQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteCIg KG1ha2Utc3BhcnNlLWtleW1hcCkpDQoNCjs7IFRBQiBrZXkgd2l0aCBtb2RpZmllcnMNCihvcmct ZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtaSIgICAgICAgJ29yZy1jeWNsZSkNCihvcmctZGVma2V5 IG9yZy1tb2RlLW1hcCBbKHRhYildICAgICAgJ29yZy1jeWNsZSkNCihvcmctZGVma2V5IG9yZy1t b2RlLW1hcCBbKGNvbnRyb2wgdGFiKV0gJ29yZy1mb3JjZS1jeWNsZS1hcmNoaXZlZCkNCihvcmct ZGVma2V5IG9yZy1tb2RlLW1hcCAiXE0tXHQiICdwY29tcGxldGUpDQo7OyBUaGUgZm9sbG93aW5n IGxpbmUgaXMgbmVjZXNzYXJ5IHVuZGVyIFN1c2UgR05VL0xpbnV4DQoodW5sZXNzIChmZWF0dXJl cCAneGVtYWNzKQ0KICAob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgW1MtaXNvLWxlZnR0YWJdICAn b3JnLXNoaWZ0dGFiKSkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbKHNoaWZ0IHRhYildICAg ICdvcmctc2hpZnR0YWIpDQooZGVmaW5lLWtleSBvcmctbW9kZS1tYXAgW2JhY2t0YWJdICdvcmct c2hpZnR0YWIpDQoNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbKHNoaWZ0IHJldHVybildICAg J29yZy10YWJsZS1jb3B5LWRvd24pDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgWyhtZXRhIHNo aWZ0IHJldHVybildICdvcmctaW5zZXJ0LXRvZG8taGVhZGluZykNCihvcmctZGVma2V5IG9yZy1t b2RlLW1hcCBbKG1ldGEgcmV0dXJuKV0gICAgICAgJ29yZy1tZXRhLXJldHVybikNCg0KOzsgQ3Vy c29yIGtleXMgd2l0aCBtb2RpZmllcnMNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbKG1ldGEg bGVmdCldICAnb3JnLW1ldGFsZWZ0KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFsobWV0YSBy aWdodCldICdvcmctbWV0YXJpZ2h0KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFsobWV0YSB1 cCldICAgICdvcmctbWV0YXVwKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFsobWV0YSBkb3du KV0gICdvcmctbWV0YWRvd24pDQoNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbKG1ldGEgc2hp ZnQgbGVmdCldICAgJ29yZy1zaGlmdG1ldGFsZWZ0KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFw IFsobWV0YSBzaGlmdCByaWdodCldICAnb3JnLXNoaWZ0bWV0YXJpZ2h0KQ0KKG9yZy1kZWZrZXkg b3JnLW1vZGUtbWFwIFsobWV0YSBzaGlmdCB1cCldICAgICAnb3JnLXNoaWZ0bWV0YXVwKQ0KKG9y Zy1kZWZrZXkgb3JnLW1vZGUtbWFwIFsobWV0YSBzaGlmdCBkb3duKV0gICAnb3JnLXNoaWZ0bWV0 YWRvd24pDQoNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbKHNoaWZ0IHVwKV0gICAgICAgICAg J29yZy1zaGlmdHVwKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFsoc2hpZnQgZG93bildICAg ICAgICAnb3JnLXNoaWZ0ZG93bikNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbKHNoaWZ0IGxl ZnQpXSAgICAgICAgJ29yZy1zaGlmdGxlZnQpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgWyhz aGlmdCByaWdodCldICAgICAgICdvcmctc2hpZnRyaWdodCkNCg0KKG9yZy1kZWZrZXkgb3JnLW1v ZGUtbWFwIFsoY29udHJvbCBzaGlmdCByaWdodCldICdvcmctc2hpZnRjb250cm9scmlnaHQpDQoo b3JnLWRlZmtleSBvcmctbW9kZS1tYXAgWyhjb250cm9sIHNoaWZ0IGxlZnQpXSAgJ29yZy1zaGlm dGNvbnRyb2xsZWZ0KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFsoY29udHJvbCBzaGlmdCB1 cCldICdvcmctc2hpZnRjb250cm9sdXApDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgWyhjb250 cm9sIHNoaWZ0IGRvd24pXSAgJ29yZy1zaGlmdGNvbnRyb2xkb3duKQ0KDQo7OyBCYWJlbCBrZXlz DQooZGVmaW5lLWtleSBvcmctbW9kZS1tYXAgb3JnLWJhYmVsLWtleS1wcmVmaXggb3JnLWJhYmVs LW1hcCkNCihtYXBjIChsYW1iZGEgKHBhaXIpDQogICAgICAgIChkZWZpbmUta2V5IG9yZy1iYWJl bC1tYXAgKGNhciBwYWlyKSAoY2RyIHBhaXIpKSkNCiAgICAgIG9yZy1iYWJlbC1rZXktYmluZGlu Z3MpDQoNCjs7OyBFeHRyYSBrZXlzIGZvciB0dHkgYWNjZXNzLg0KOzsgIFdlIG9ubHkgc2V0IHRo ZW0gd2hlbiByZWFsbHkgbmVlZGVkIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZQ0KOzsgIG1lbnVzIGRv bid0IHNob3cgdGhlIHNpbXBsZSBrZXlzDQoNCih3aGVuIChvciBvcmctdXNlLWV4dHJhLWtleXMN CgkgIChmZWF0dXJlcCAneGVtYWNzKSAgIDs7IGJlY2F1c2UgWEVtYWNzIHN1cHBvcnRzIG11bHRp LWRldmljZSBzdHVmZg0KCSAgKG5vdCB3aW5kb3ctc3lzdGVtKSkNCiAgKG9yZy1kZWZrZXkgb3Jn LW1vZGUtbWFwICJcQy1jXEMteGMiICAgICdvcmctdGFibGUtY29weS1kb3duKQ0KICAob3JnLWRl ZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14TSIgICAgJ29yZy1pbnNlcnQtdG9kby1oZWFkaW5n KQ0KICAob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14bSIgICAgJ29yZy1tZXRhLXJl dHVybikNCiAgKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFs/XGUgKHJldHVybildICdvcmctbWV0 YS1yZXR1cm4pDQogIChvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbP1xlIChsZWZ0KV0gICAnb3Jn LW1ldGFsZWZ0KQ0KICAob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14bCIgICAgJ29y Zy1tZXRhbGVmdCkNCiAgKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFs/XGUgKHJpZ2h0KV0gICdv cmctbWV0YXJpZ2h0KQ0KICAob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14ciIgICAg J29yZy1tZXRhcmlnaHQpDQogIChvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbP1xlICh1cCldICAg ICAnb3JnLW1ldGF1cCkNCiAgKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteHUiICAg ICdvcmctbWV0YXVwKQ0KICAob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgWz9cZSAoZG93bildICAg J29yZy1tZXRhZG93bikNCiAgKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteGQiICAg ICdvcmctbWV0YWRvd24pDQogIChvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhMIiAg ICAnb3JnLXNoaWZ0bWV0YWxlZnQpDQogIChvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xD LXhSIiAgICAnb3JnLXNoaWZ0bWV0YXJpZ2h0KQ0KICAob3JnLWRlZmtleSBvcmctbW9kZS1tYXAg IlxDLWNcQy14VSIgICAgJ29yZy1zaGlmdG1ldGF1cCkNCiAgKG9yZy1kZWZrZXkgb3JnLW1vZGUt bWFwICJcQy1jXEMteEQiICAgICdvcmctc2hpZnRtZXRhZG93bikNCiAgKG9yZy1kZWZrZXkgb3Jn LW1vZGUtbWFwIFs/XEMtYyAodXApXSAgICAnb3JnLXNoaWZ0dXApDQogIChvcmctZGVma2V5IG9y Zy1tb2RlLW1hcCBbP1xDLWMgKGRvd24pXSAgJ29yZy1zaGlmdGRvd24pDQogIChvcmctZGVma2V5 IG9yZy1tb2RlLW1hcCBbP1xDLWMgKGxlZnQpXSAgJ29yZy1zaGlmdGxlZnQpDQogIChvcmctZGVm a2V5IG9yZy1tb2RlLW1hcCBbP1xDLWMgKHJpZ2h0KV0gJ29yZy1zaGlmdHJpZ2h0KQ0KICAob3Jn LWRlZmtleSBvcmctbW9kZS1tYXAgWz9cQy1jID9cQy14IChyaWdodCldICdvcmctc2hpZnRjb250 cm9scmlnaHQpDQogIChvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbP1xDLWMgP1xDLXggKGxlZnQp XSAnb3JnLXNoaWZ0Y29udHJvbGxlZnQpDQogIChvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbP1xl ICh0YWIpXSAncGNvbXBsZXRlKQ0KICAob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgWz9cZSAoc2hp ZnQgcmV0dXJuKV0gJ29yZy1pbnNlcnQtdG9kby1oZWFkaW5nKQ0KICAob3JnLWRlZmtleSBvcmct bW9kZS1tYXAgWz9cZSAoc2hpZnQgbGVmdCldICAgJ29yZy1zaGlmdG1ldGFsZWZ0KQ0KICAob3Jn LWRlZmtleSBvcmctbW9kZS1tYXAgWz9cZSAoc2hpZnQgcmlnaHQpXSAgJ29yZy1zaGlmdG1ldGFy aWdodCkNCiAgKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFs/XGUgKHNoaWZ0IHVwKV0gICAgICdv cmctc2hpZnRtZXRhdXApDQogIChvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbP1xlIChzaGlmdCBk b3duKV0gICAnb3JnLXNoaWZ0bWV0YWRvd24pKQ0KDQo7OyBBbGwgdGhlIG90aGVyIGtleXMNCg0K KG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMtYSIgJ3Nob3ctYWxsKSAgOyBpbiBjYXNl IGFsbG91dCBtZXNzZWQgdXAuDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy1yIiAn b3JnLXJldmVhbCkNCihpZiAoYm91bmRwICduYXJyb3ctbWFwKQ0KICAgIChvcmctZGVma2V5IG5h cnJvdy1tYXAgInMiICdvcmctbmFycm93LXRvLXN1YnRyZWUpDQogIChvcmctZGVma2V5IG9yZy1t b2RlLW1hcCAiXEMteG5zIiAnb3JnLW5hcnJvdy10by1zdWJ0cmVlKSkNCihpZiAoYm91bmRwICdu YXJyb3ctbWFwKQ0KICAgIChvcmctZGVma2V5IG5hcnJvdy1tYXAgImIiICdvcmctbmFycm93LXRv LWJsb2NrKQ0KICAob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLXhuYiIgJ29yZy1uYXJyb3ct dG8tYmxvY2spKQ0KKGlmIChib3VuZHAgJ25hcnJvdy1tYXApDQogICAgKG9yZy1kZWZrZXkgbmFy cm93LW1hcCAiZSIgJ29yZy1uYXJyb3ctdG8tZWxlbWVudCkNCiAgKG9yZy1kZWZrZXkgb3JnLW1v ZGUtbWFwICJcQy14bmUiICdvcmctbmFycm93LXRvLWVsZW1lbnQpKQ0KKG9yZy1kZWZrZXkgb3Jn LW1vZGUtbWFwICJcQy1cTS10IiAgJ29yZy10cmFuc3Bvc2UtZWxlbWVudCkNCihvcmctZGVma2V5 IG9yZy1tb2RlLW1hcCAiXE0tfSIgICAgICdvcmctZm9yd2FyZC1lbGVtZW50KQ0KKG9yZy1kZWZr ZXkgb3JnLW1vZGUtbWFwICJcTS17IiAgICAgJ29yZy1iYWNrd2FyZC1lbGVtZW50KQ0KKG9yZy1k ZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMtXiIgJ29yZy11cC1lbGVtZW50KQ0KKG9yZy1kZWZr ZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMtXyIgJ29yZy1kb3duLWVsZW1lbnQpDQoob3JnLWRlZmtl eSBvcmctbW9kZS1tYXAgIlxDLWNcQy1mIiAnb3JnLWZvcndhcmQtaGVhZGluZy1zYW1lLWxldmVs KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMtYiIgJ29yZy1iYWNrd2FyZC1oZWFk aW5nLXNhbWUtbGV2ZWwpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcTS1mIiAnb3Jn LW5leHQtYmxvY2spDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcTS1iIiAnb3JnLXBy ZXZpb3VzLWJsb2NrKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jJCIgICAgJ29yZy1h cmNoaXZlLXN1YnRyZWUpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14XEMtcyIg J29yZy1hZHZlcnRpemVkLWFyY2hpdmUtc3VidHJlZSkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1h cCAiXEMtY1xDLXhcQy1hIiAnb3JnLWFyY2hpdmUtc3VidHJlZS1kZWZhdWx0KQ0KKG9yZy1kZWZr ZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteGQiICdvcmctaW5zZXJ0LWRyYXdlcikNCihvcmctZGVm a2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhhIiAnb3JnLXRvZ2dsZS1hcmNoaXZlLXRhZykNCihv cmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhBIiAnb3JnLWFyY2hpdmUtdG8tYXJjaGl2 ZS1zaWJsaW5nKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteGIiICdvcmctdHJl ZS10by1pbmRpcmVjdC1idWZmZXIpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14 cSIgJ29yZy10b2dnbGUtdGFncy1ncm91cHMpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxD LWNcQy1qIiAnb3JnLWdvdG8pDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy10IiAn b3JnLXRvZG8pDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy1xIiAnb3JnLXNldC10 YWdzLWNvbW1hbmQpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy1zIiAnb3JnLXNj aGVkdWxlKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMtZCIgJ29yZy1kZWFkbGlu ZSkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtYzsiICAgICdvcmctdG9nZ2xlLWNvbW1l bnQpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy13IiAnb3JnLXJlZmlsZSkNCihv cmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xNLXciICdvcmctY29weSkNCihvcmctZGVma2V5 IG9yZy1tb2RlLW1hcCAiXEMtYy8iICAgICdvcmctc3BhcnNlLXRyZWUpICAgOyBNaW5vci1tb2Rl IHJlc2VydmVkDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcXCIgICAnb3JnLW1hdGNo LXNwYXJzZS10cmVlKSA7IE1pbm9yLW1vZGUgcmVzLg0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFw ICJcQy1jXEMtbSIgJ29yZy1jdHJsLWMtcmV0KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJc TS1cQy1tIiAgJ29yZy1pbnNlcnQtaGVhZGluZykNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAi XEMtY1xDLXhjIiAnb3JnLWNsb25lLXN1YnRyZWUtd2l0aC10aW1lLXNoaWZ0KQ0KKG9yZy1kZWZr ZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteHYiICdvcmctY29weS12aXNpYmxlKQ0KKG9yZy1kZWZr ZXkgb3JnLW1vZGUtbWFwIFsoY29udHJvbCByZXR1cm4pXSAnb3JnLWluc2VydC1oZWFkaW5nLXJl c3BlY3QtY29udGVudCkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbKHNoaWZ0IGNvbnRyb2wg cmV0dXJuKV0gJ29yZy1pbnNlcnQtdG9kby1oZWFkaW5nLXJlc3BlY3QtY29udGVudCkNCihvcmct ZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhcQy1uIiAnb3JnLW5leHQtbGluaykNCihvcmct ZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhcQy1wIiAnb3JnLXByZXZpb3VzLWxpbmspDQoo b3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy1sIiAnb3JnLWluc2VydC1saW5rKQ0KKG9y Zy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMtXE0tbCIgJ29yZy1pbnNlcnQtYWxsLWxpbmtz KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMtbyIgJ29yZy1vcGVuLWF0LXBvaW50 KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jJSIgICAgJ29yZy1tYXJrLXJpbmctcHVz aCkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtYyYiICAgICdvcmctbWFyay1yaW5nLWdv dG8pDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy16IiAnb3JnLWFkZC1ub3RlKSAg OyBBbHRlcm5hdGl2ZSBiaW5kaW5nDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWMuIiAg ICAnb3JnLXRpbWUtc3RhbXApICA7IE1pbm9yLW1vZGUgcmVzZXJ2ZWQNCihvcmctZGVma2V5IG9y Zy1tb2RlLW1hcCAiXEMtYyEiICAgICdvcmctdGltZS1zdGFtcC1pbmFjdGl2ZSkgOyBNaW5vci1t b2RlIHIuDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWMsIiAgICAnb3JnLXByaW9yaXR5 KSAgICA7IE1pbm9yLW1vZGUgcmVzZXJ2ZWQNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMt Y1xDLXkiICdvcmctZXZhbHVhdGUtdGltZS1yYW5nZSkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1h cCAiXEMtYz4iICAgICdvcmctZ290by1jYWxlbmRhcikNCihvcmctZGVma2V5IG9yZy1tb2RlLW1h cCAiXEMtYzwiICAgICdvcmctZGF0ZS1mcm9tLWNhbGVuZGFyKQ0KKG9yZy1kZWZrZXkgb3JnLW1v ZGUtbWFwIFsoY29udHJvbCA/LCldICAgICAnb3JnLWN5Y2xlLWFnZW5kYS1maWxlcykNCihvcmct ZGVma2V5IG9yZy1tb2RlLW1hcCBbKGNvbnRyb2wgP1wnKV0gICAgICdvcmctY3ljbGUtYWdlbmRh LWZpbGVzKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jWyIgICAgJ29yZy1hZ2VuZGEt ZmlsZS10by1mcm9udCkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY10iICAgICdvcmct cmVtb3ZlLWZpbGUpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14PCIgJ29yZy1h Z2VuZGEtc2V0LXJlc3RyaWN0aW9uLWxvY2spDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxD LWNcQy14PiIgJ29yZy1hZ2VuZGEtcmVtb3ZlLXJlc3RyaWN0aW9uLWxvY2spDQoob3JnLWRlZmtl eSBvcmctbW9kZS1tYXAgIlxDLWMtIiAgICAnb3JnLWN0cmwtYy1taW51cykNCihvcmctZGVma2V5 IG9yZy1tb2RlLW1hcCAiXEMtYyoiICAgICdvcmctY3RybC1jLXN0YXIpDQoob3JnLWRlZmtleSBv cmctbW9kZS1tYXAgIlxDLWNeIiAgICAnb3JnLXNvcnQpDQoob3JnLWRlZmtleSBvcmctbW9kZS1t YXAgIlxDLWNcQy1jIiAnb3JnLWN0cmwtYy1jdHJsLWMpDQoob3JnLWRlZmtleSBvcmctbW9kZS1t YXAgIlxDLWNcQy1rIiAnb3JnLWtpbGwtbm90ZS1vci1zaG93LWJyYW5jaGVzKQ0KKG9yZy1kZWZr ZXkgb3JnLW1vZGUtbWFwICJcQy1jIyIgICAgJ29yZy11cGRhdGUtc3RhdGlzdGljcy1jb29raWVz KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFtyZW1hcCBvcGVuLWxpbmVdICdvcmctb3Blbi1s aW5lKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFtyZW1hcCBmb3J3YXJkLXBhcmFncmFwaF0g J29yZy1mb3J3YXJkLXBhcmFncmFwaCkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbcmVtYXAg YmFja3dhcmQtcGFyYWdyYXBoXSAnb3JnLWJhY2t3YXJkLXBhcmFncmFwaCkNCihvcmctZGVma2V5 IG9yZy1tb2RlLW1hcCAiXEMtbSIgICAgICdvcmctcmV0dXJuKQ0KKG9yZy1kZWZrZXkgb3JnLW1v ZGUtbWFwICJcQy1qIiAgICAgJ29yZy1yZXR1cm4taW5kZW50KQ0KKG9yZy1kZWZrZXkgb3JnLW1v ZGUtbWFwICJcQy1jPyIgICAgJ29yZy10YWJsZS1maWVsZC1pbmZvKQ0KKG9yZy1kZWZrZXkgb3Jn LW1vZGUtbWFwICJcQy1jICIgICAgJ29yZy10YWJsZS1ibGFuay1maWVsZCkNCihvcmctZGVma2V5 IG9yZy1tb2RlLW1hcCAiXEMtYysiICAgICdvcmctdGFibGUtc3VtKQ0KKG9yZy1kZWZrZXkgb3Jn LW1vZGUtbWFwICJcQy1jPSIgICAgJ29yZy10YWJsZS1ldmFsLWZvcm11bGEpDQoob3JnLWRlZmtl eSBvcmctbW9kZS1tYXAgIlxDLWMnIiAgICAnb3JnLWVkaXQtc3BlY2lhbCkNCihvcmctZGVma2V5 IG9yZy1tb2RlLW1hcCAiXEMtY2AiICAgICdvcmctdGFibGUtZWRpdC1maWVsZCkNCihvcmctZGVm a2V5IG9yZy1tb2RlLW1hcCAiXEMtY3wiICAgICdvcmctdGFibGUtY3JlYXRlLW9yLWNvbnZlcnQt ZnJvbS1yZWdpb24pDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgWyhjb250cm9sID8jKV0gJ29y Zy10YWJsZS1yb3RhdGUtcmVjYWxjLW1hcmtzKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJc Qy1jfiIgICAgJ29yZy10YWJsZS1jcmVhdGUtd2l0aC10YWJsZS5lbCkNCihvcmctZGVma2V5IG9y Zy1tb2RlLW1hcCAiXEMtY1xDLWEiICdvcmctYXR0YWNoKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUt bWFwICJcQy1jfSIgICAgJ29yZy10YWJsZS10b2dnbGUtY29vcmRpbmF0ZS1vdmVybGF5cykNCihv cmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY3siICAgICdvcmctdGFibGUtdG9nZ2xlLWZvcm11 bGEtZGVidWdnZXIpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy1lIiAnb3JnLWV4 cG9ydC1kaXNwYXRjaCkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtYzoiICAgICdvcmct dG9nZ2xlLWZpeGVkLXdpZHRoLXNlY3Rpb24pDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxD LWNcQy14XEMtZiIgJ29yZy1lbXBoYXNpemUpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxD LWNcQy14ZiIgICAgJ29yZy1mb290bm90ZS1hY3Rpb24pDQoob3JnLWRlZmtleSBvcmctbW9kZS1t YXAgIlxDLWNcQy14XEMtbWciICAgICdvcmctbW9iaWxlLXB1bGwpDQoob3JnLWRlZmtleSBvcmct bW9kZS1tYXAgIlxDLWNcQy14XEMtbXAiICAgICdvcmctbW9iaWxlLXB1c2gpDQoob3JnLWRlZmtl eSBvcmctbW9kZS1tYXAgIlxDLWNAIiAnb3JnLW1hcmstc3VidHJlZSkNCihvcmctZGVma2V5IG9y Zy1tb2RlLW1hcCAiXE0taCIgJ29yZy1tYXJrLWVsZW1lbnQpDQoob3JnLWRlZmtleSBvcmctbW9k ZS1tYXAgWz9cQy1jIChjb250cm9sID8qKV0gJ29yZy1saXN0LW1ha2Utc3VidHJlZSkNCjs7KG9y Zy1kZWZrZXkgb3JnLW1vZGUtbWFwIFs/XEMtYyAoY29udHJvbCA/LSldICdvcmctbGlzdC1tYWtl LWxpc3QtZnJvbS1zdWJ0cmVlKQ0KDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14 XEMtdyIgJ29yZy1jdXQtc3BlY2lhbCkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xD LXhcTS13IiAnb3JnLWNvcHktc3BlY2lhbCkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMt Y1xDLXhcQy15IiAnb3JnLXBhc3RlLXNwZWNpYWwpDQoNCihvcmctZGVma2V5IG9yZy1tb2RlLW1h cCAiXEMtY1xDLXhcQy10IiAnb3JnLXRvZ2dsZS10aW1lLXN0YW1wLW92ZXJsYXlzKQ0KKG9yZy1k ZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteFxDLWkiICdvcmctY2xvY2staW4pDQoob3JnLWRl ZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14XEMteCIgJ29yZy1jbG9jay1pbi1sYXN0KQ0KKG9y Zy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteFxDLXoiICdvcmctcmVzb2x2ZS1jbG9ja3Mp DQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14XEMtbyIgJ29yZy1jbG9jay1vdXQp DQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14XEMtaiIgJ29yZy1jbG9jay1nb3Rv KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteFxDLXEiICdvcmctY2xvY2stY2Fu Y2VsKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteFxDLWQiICdvcmctY2xvY2st ZGlzcGxheSkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhcQy1yIiAnb3JnLWNs b2NrLXJlcG9ydCkNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhcQy11IiAnb3Jn LWRibG9jay11cGRhdGUpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14XEMtbCIg J29yZy1wcmV2aWV3LWxhdGV4LWZyYWdtZW50KQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJc Qy1jXEMteFxDLXYiICdvcmctdG9nZ2xlLWlubGluZS1pbWFnZXMpDQoob3JnLWRlZmtleSBvcmct bW9kZS1tYXAgIlxDLWNcQy14XEMtXE0tdiIgJ29yZy1yZWRpc3BsYXktaW5saW5lLWltYWdlcykN CihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhcXCIgICAnb3JnLXRvZ2dsZS1wcmV0 dHktZW50aXRpZXMpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14XEMtYiIgJ29y Zy10b2dnbGUtY2hlY2tib3gpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14cCIg ICAgJ29yZy1zZXQtcHJvcGVydHkpDQoob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14 UCIgICAgJ29yZy1zZXQtcHJvcGVydHktYW5kLXZhbHVlKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUt bWFwICJcQy1jXEMteGUiICAgICdvcmctc2V0LWVmZm9ydCkNCihvcmctZGVma2V5IG9yZy1tb2Rl LW1hcCAiXEMtY1xDLXhFIiAgICAnb3JnLWluYy1lZmZvcnQpDQoob3JnLWRlZmtleSBvcmctbW9k ZS1tYXAgIlxDLWNcQy14byIgICAgJ29yZy10b2dnbGUtb3JkZXJlZC1wcm9wZXJ0eSkNCihvcmct ZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhpIiAgICAnb3JnLWluc2VydC1jb2x1bW5zLWRi bG9jaykNCihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCBbKGNvbnRyb2wgP2MpIChjb250cm9sID94 KSA/XDtdICdvcmctdGltZXItc2V0LXRpbWVyKQ0KKG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwIFso Y29udHJvbCA/YykgKGNvbnRyb2wgP3gpID9cOl0gJ29yZy10aW1lci1jYW5jZWwtdGltZXIpDQoN CihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXguIiAgICAnb3JnLXRpbWVyKQ0KKG9y Zy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteC0iICAgICdvcmctdGltZXItaXRlbSkNCihv cmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXgwIiAgICAnb3JnLXRpbWVyLXN0YXJ0KQ0K KG9yZy1kZWZrZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteF8iICAgICdvcmctdGltZXItc3RvcCkN CihvcmctZGVma2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXgsIiAgICAnb3JnLXRpbWVyLXBhdXNl LW9yLWNvbnRpbnVlKQ0KDQooZGVmaW5lLWtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14XEMtYyIg J29yZy1jb2x1bW5zKQ0KDQooZGVmaW5lLWtleSBvcmctbW9kZS1tYXAgIlxDLWNcQy14ISIgJ29y Zy1yZWxvYWQpDQoNCihkZWZpbmUta2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhnIiAnb3JnLWZl ZWQtdXBkYXRlLWFsbCkNCihkZWZpbmUta2V5IG9yZy1tb2RlLW1hcCAiXEMtY1xDLXhHIiAnb3Jn LWZlZWQtZ290by1pbmJveCkNCg0KKGRlZmluZS1rZXkgb3JnLW1vZGUtbWFwICJcQy1jXEMteFsi ICdvcmctcmVmdGV4LWNpdGF0aW9uKQ0KDQoNCih3aGVuIChmZWF0dXJlcCAneGVtYWNzKQ0KICAo b3JnLWRlZmtleSBvcmctbW9kZS1tYXAgJ2J1dHRvbjMgICAncG9wdXAtbW9kZS1tZW51KSkNCg0K DQooZGVmY29uc3Qgb3JnLXNwZWVkLWNvbW1hbmRzLWRlZmF1bHQNCiAgJygNCiAgICAoIk91dGxp bmUgTmF2aWdhdGlvbiIpDQogICAgKCJuIiAuIChvcmctc3BlZWQtbW92ZS1zYWZlICdvdXRsaW5l LW5leHQtdmlzaWJsZS1oZWFkaW5nKSkNCiAgICAoInAiIC4gKG9yZy1zcGVlZC1tb3ZlLXNhZmUg J291dGxpbmUtcHJldmlvdXMtdmlzaWJsZS1oZWFkaW5nKSkNCiAgICAoImYiIC4gKG9yZy1zcGVl ZC1tb3ZlLXNhZmUgJ29yZy1mb3J3YXJkLWhlYWRpbmctc2FtZS1sZXZlbCkpDQogICAgKCJiIiAu IChvcmctc3BlZWQtbW92ZS1zYWZlICdvcmctYmFja3dhcmQtaGVhZGluZy1zYW1lLWxldmVsKSkN CiAgICAoIkYiIC4gb3JnLW5leHQtYmxvY2spDQogICAgKCJCIiAuIG9yZy1wcmV2aW91cy1ibG9j aykNCiAgICAoInUiIC4gKG9yZy1zcGVlZC1tb3ZlLXNhZmUgJ291dGxpbmUtdXAtaGVhZGluZykp DQogICAgKCJqIiAuIG9yZy1nb3RvKQ0KICAgICgiZyIgLiAob3JnLXJlZmlsZSB0KSkNCiAgICAo Ik91dGxpbmUgVmlzaWJpbGl0eSIpDQogICAgKCJjIiAuIG9yZy1jeWNsZSkNCiAgICAoIkMiIC4g b3JnLXNoaWZ0dGFiKQ0KICAgICgiICIgLiBvcmctZGlzcGxheS1vdXRsaW5lLXBhdGgpDQogICAg KCJzIiAuIG9yZy1uYXJyb3ctdG8tc3VidHJlZSkNCiAgICAoIj0iIC4gb3JnLWNvbHVtbnMpDQog ICAgKCJPdXRsaW5lIFN0cnVjdHVyZSBFZGl0aW5nIikNCiAgICAoIlUiIC4gb3JnLXNoaWZ0bWV0 YXVwKQ0KICAgICgiRCIgLiBvcmctc2hpZnRtZXRhZG93bikNCiAgICAoInIiIC4gb3JnLW1ldGFy aWdodCkNCiAgICAoImwiIC4gb3JnLW1ldGFsZWZ0KQ0KICAgICgiUiIgLiBvcmctc2hpZnRtZXRh cmlnaHQpDQogICAgKCJMIiAuIG9yZy1zaGlmdG1ldGFsZWZ0KQ0KICAgICgiaSIgLiAocHJvZ24g KGZvcndhcmQtY2hhciAxKSAoY2FsbC1pbnRlcmFjdGl2ZWx5DQoJCQkJICAgICdvcmctaW5zZXJ0 LWhlYWRpbmctcmVzcGVjdC1jb250ZW50KSkpDQogICAgKCJeIiAuIG9yZy1zb3J0KQ0KICAgICgi dyIgLiBvcmctcmVmaWxlKQ0KICAgICgiYSIgLiBvcmctYXJjaGl2ZS1zdWJ0cmVlLWRlZmF1bHQt d2l0aC1jb25maXJtYXRpb24pDQogICAgKCJAIiAuIG9yZy1tYXJrLXN1YnRyZWUpDQogICAgKCIj IiAuIG9yZy10b2dnbGUtY29tbWVudCkNCiAgICAoIkNsb2NrIENvbW1hbmRzIikNCiAgICAoIkki IC4gb3JnLWNsb2NrLWluKQ0KICAgICgiTyIgLiBvcmctY2xvY2stb3V0KQ0KICAgICgiTWV0YSBE YXRhIEVkaXRpbmciKQ0KICAgICgidCIgLiBvcmctdG9kbykNCiAgICAoIiwiIC4gKG9yZy1wcmlv cml0eSkpDQogICAgKCIwIiAuIChvcmctcHJpb3JpdHkgP1wgKSkNCiAgICAoIjEiIC4gKG9yZy1w cmlvcml0eSA/QSkpDQogICAgKCIyIiAuIChvcmctcHJpb3JpdHkgP0IpKQ0KICAgICgiMyIgLiAo b3JnLXByaW9yaXR5ID9DKSkNCiAgICAoIjoiIC4gb3JnLXNldC10YWdzLWNvbW1hbmQpDQogICAg KCJlIiAuIG9yZy1zZXQtZWZmb3J0KQ0KICAgICgiRSIgLiBvcmctaW5jLWVmZm9ydCkNCiAgICAo IlciIC4gKGxhbWJkYShtKSAoaW50ZXJhY3RpdmUgInNNaW51dGVzIGJlZm9yZSB3YXJuaW5nOiAi KQ0KCSAgICAgKG9yZy1lbnRyeS1wdXQgKHBvaW50KSAiQVBQVF9XQVJOVElNRSIgbSkpKQ0KICAg ICgiQWdlbmRhIFZpZXdzIGV0YyIpDQogICAgKCJ2IiAuIG9yZy1hZ2VuZGEpDQogICAgKCIvIiAu IG9yZy1zcGFyc2UtdHJlZSkNCiAgICAoIk1pc2MiKQ0KICAgICgibyIgLiBvcmctb3Blbi1hdC1w b2ludCkNCiAgICAoIj8iIC4gb3JnLXNwZWVkLWNvbW1hbmQtaGVscCkNCiAgICAoIjwiIC4gKG9y Zy1hZ2VuZGEtc2V0LXJlc3RyaWN0aW9uLWxvY2sgJ3N1YnRyZWUpKQ0KICAgICgiPiIgLiAob3Jn LWFnZW5kYS1yZW1vdmUtcmVzdHJpY3Rpb24tbG9jaykpDQogICAgKQ0KICAiVGhlIGRlZmF1bHQg c3BlZWQgY29tbWFuZHMuIikNCg0KKGRlZnVuIG9yZy1wcmludC1zcGVlZC1jb21tYW5kIChlKQ0K ICAoaWYgKD4gKGxlbmd0aCAoY2FyIGUpKSAxKQ0KICAgICAgKHByb2duDQoJKHByaW5jICJcbiIp DQoJKHByaW5jIChjYXIgZSkpDQoJKHByaW5jICJcbiIpDQoJKHByaW5jIChtYWtlLXN0cmluZyAo bGVuZ3RoIChjYXIgZSkpID8tKSkNCgkocHJpbmMgIlxuIikpDQogICAgKHByaW5jIChjYXIgZSkp DQogICAgKHByaW5jICIgICAiKQ0KICAgIChpZiAoc3ltYm9scCAoY2RyIGUpKQ0KCShwcmluYyAo c3ltYm9sLW5hbWUgKGNkciBlKSkpDQogICAgICAocHJpbjEgKGNkciBlKSkpDQogICAgKHByaW5j ICJcbiIpKSkNCg0KKGRlZnVuIG9yZy1zcGVlZC1jb21tYW5kLWhlbHAgKCkNCiAgIlNob3cgdGhl IGF2YWlsYWJsZSBzcGVlZCBjb21tYW5kcy4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKGlmIChub3Qg b3JnLXVzZS1zcGVlZC1jb21tYW5kcykNCiAgICAgICh1c2VyLWVycm9yICJTcGVlZCBjb21tYW5k cyBhcmUgbm90IGFjdGl2YXRlZCwgY3VzdG9taXplIGBvcmctdXNlLXNwZWVkLWNvbW1hbmRzJyIp DQogICAgKHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyICIqSGVscCoiDQogICAgICAocHJpbmMg IlVzZXItZGVmaW5lZCBTcGVlZCBjb21tYW5kc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09 XG4iKQ0KICAgICAgKG1hcGMgJ29yZy1wcmludC1zcGVlZC1jb21tYW5kIG9yZy1zcGVlZC1jb21t YW5kcy11c2VyKQ0KICAgICAgKHByaW5jICJcbiIpDQogICAgICAocHJpbmMgIkJ1aWx0LWluIFNw ZWVkIGNvbW1hbmRzXG49PT09PT09PT09PT09PT09PT09PT09PVxuIikNCiAgICAgIChtYXBjICdv cmctcHJpbnQtc3BlZWQtY29tbWFuZCBvcmctc3BlZWQtY29tbWFuZHMtZGVmYXVsdCkpDQogICAg KHdpdGgtY3VycmVudC1idWZmZXIgIipIZWxwKiINCiAgICAgIChzZXRxIHRydW5jYXRlLWxpbmVz IHQpKSkpDQoNCihkZWZ1biBvcmctc3BlZWQtbW92ZS1zYWZlIChjbWQpDQogICJFeGVjdXRlIENN RCwgYnV0IG1ha2Ugc3VyZSB0aGF0IHRoZSBjdXJzb3IgYWx3YXlzIGVuZHMgdXAgaW4gYSBoZWFk bGluZS4NCklmIG5vdCwgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBhbmQgdGhyb3cg YW4gZXJyb3IuIg0KICAoaW50ZXJhY3RpdmUpDQogIChsZXQgKChwb3MgKHBvaW50KSkpDQogICAg KGNhbGwtaW50ZXJhY3RpdmVseSBjbWQpDQogICAgKHVubGVzcyAoYW5kIChib2xwKSAob3JnLWF0 LWhlYWRpbmctcCkpDQogICAgICAoZ290by1jaGFyIHBvcykNCiAgICAgIChlcnJvciAiQm91bmRh cnkgcmVhY2hlZCB3aGlsZSBleGVjdXRpbmcgJXMiIGNtZCkpKSkNCg0KKGRlZnZhciBvcmctc2Vs Zi1pbnNlcnQtY29tbWFuZC11bmRvLWNvdW50ZXIgMCkNCg0KKGRlZnZhciBvcmctdGFibGUtYXV0 by1ibGFuay1maWVsZCkgOyBkZWZpbmVkIGluIG9yZy10YWJsZS5lbA0KKGRlZnZhciBvcmctc3Bl ZWQtY29tbWFuZCBuaWwpDQoNCihkZWZpbmUtb2Jzb2xldGUtZnVuY3Rpb24tYWxpYXMNCiAgJ29y Zy1zcGVlZC1jb21tYW5kLWRlZmF1bHQtaG9vayAnb3JnLXNwZWVkLWNvbW1hbmQtYWN0aXZhdGUg IjI0LjMiKQ0KDQooZGVmdW4gb3JnLXNwZWVkLWNvbW1hbmQtYWN0aXZhdGUgKGtleXMpDQogICJI b29rIGZvciBhY3RpdmF0aW5nIHNpbmdsZS1sZXR0ZXIgc3BlZWQgY29tbWFuZHMuDQpgb3JnLXNw ZWVkLWNvbW1hbmRzLWRlZmF1bHQnIHNwZWNpZmllcyBhIG1pbmltYWwgY29tbWFuZCBzZXQuDQpV c2UgYG9yZy1zcGVlZC1jb21tYW5kcy11c2VyJyBmb3IgZnVydGhlciBjdXN0b21pemF0aW9uLiIN CiAgKHdoZW4gKG9yIChhbmQgKGJvbHApIChsb29raW5nLWF0IG9yZy1vdXRsaW5lLXJlZ2V4cCkp DQoJICAgIChhbmQgKGZ1bmN0aW9ucCBvcmctdXNlLXNwZWVkLWNvbW1hbmRzKQ0KCQkgKGZ1bmNh bGwgb3JnLXVzZS1zcGVlZC1jb21tYW5kcykpKQ0KICAgIChjZHIgKGFzc29jIGtleXMgKGFwcGVu ZCBvcmctc3BlZWQtY29tbWFuZHMtdXNlcg0KCQkJICAgICBvcmctc3BlZWQtY29tbWFuZHMtZGVm YXVsdCkpKSkpDQoNCihkZWZpbmUtb2Jzb2xldGUtZnVuY3Rpb24tYWxpYXMNCiAgJ29yZy1iYWJl bC1zcGVlZC1jb21tYW5kLWhvb2sgJ29yZy1iYWJlbC1zcGVlZC1jb21tYW5kLWFjdGl2YXRlICIy NC4zIikNCg0KKGRlZnVuIG9yZy1iYWJlbC1zcGVlZC1jb21tYW5kLWFjdGl2YXRlIChrZXlzKQ0K ICAiSG9vayBmb3IgYWN0aXZhdGluZyBzaW5nbGUtbGV0dGVyIGNvZGUgYmxvY2sgY29tbWFuZHMu Ig0KICAod2hlbiAoYW5kIChib2xwKSAobG9va2luZy1hdCBvcmctYmFiZWwtc3JjLWJsb2NrLXJl Z2V4cCkpDQogICAgKGNkciAoYXNzb2Mga2V5cyBvcmctYmFiZWwta2V5LWJpbmRpbmdzKSkpKQ0K DQooZGVmY3VzdG9tIG9yZy1zcGVlZC1jb21tYW5kLWhvb2sNCiAgJyhvcmctc3BlZWQtY29tbWFu ZC1kZWZhdWx0LWhvb2sgb3JnLWJhYmVsLXNwZWVkLWNvbW1hbmQtaG9vaykNCiAgIkhvb2sgZm9y IGFjdGl2YXRpbmcgc3BlZWQgY29tbWFuZHMgYXQgc3RyYXRlZ2ljIGxvY2F0aW9ucy4NCkhvb2sg ZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gc2VxdWVuY2UgdW50aWwgYSB2YWxpZCBoYW5kbGVyIGlz DQpmb3VuZC4NCg0KRWFjaCBob29rIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LCBhIHVzZXItcHJl c3NlZCBjb21tYW5kIGtleQ0Kd2hpY2ggaXMgYWxzbyBhIGBzZWxmLWluc2VydC1jb21tYW5kJyBm cm9tIHRoZSBnbG9iYWwgbWFwLg0KDQpXaXRoaW4gdGhlIGhvb2ssIGV4YW1pbmUgdGhlIGN1cnNv ciBwb3NpdGlvbiBhbmQgdGhlIGNvbW1hbmQga2V5DQphbmQgcmV0dXJuIG5pbCBvciBhIHZhbGlk IGhhbmRsZXIgYXMgYXBwcm9wcmlhdGUuICBIYW5kbGVyIGNvdWxkDQpiZSBvbmUgb2YgYW4gaW50 ZXJhY3RpdmUgY29tbWFuZCwgYSBmdW5jdGlvbiwgb3IgYSBmb3JtLg0KDQpTZXQgYG9yZy11c2Ut c3BlZWQtY29tbWFuZHMnIHRvIG5vbi1uaWwgdmFsdWUgdG8gZW5hYmxlIHRoaXMNCmhvb2suICBU aGUgZGVmYXVsdCBzZXR0aW5nIGlzIGBvcmctc3BlZWQtY29tbWFuZC1hY3RpdmF0ZScuIg0KICA6 Z3JvdXAgJ29yZy1zdHJ1Y3R1cmUNCiAgOnZlcnNpb24gIjI0LjEiDQogIDp0eXBlICdob29rKQ0K DQooZGVmdW4gb3JnLXNlbGYtaW5zZXJ0LWNvbW1hbmQgKE4pDQogICJMaWtlIGBzZWxmLWluc2Vy dC1jb21tYW5kJywgdXNlIG92ZXJ3cml0ZS1tb2RlIGZvciB3aGl0ZXNwYWNlIGluIHRhYmxlcy4N CklmIHRoZSBjdXJzb3IgaXMgaW4gYSB0YWJsZSBsb29raW5nIGF0IHdoaXRlc3BhY2UsIHRoZSB3 aGl0ZXNwYWNlIGlzDQpvdmVyd3JpdHRlbiwgYW5kIHRoZSB0YWJsZSBpcyBub3QgbWFya2VkIGFz IHJlcXVpcmluZyByZWFsaWdubWVudC4iDQogIChpbnRlcmFjdGl2ZSAicCIpDQogIChvcmctY2hl Y2stYmVmb3JlLWludmlzaWJsZS1lZGl0ICdpbnNlcnQpDQogIChjb25kDQogICAoKGFuZCBvcmct dXNlLXNwZWVkLWNvbW1hbmRzDQoJIChzZXRxIG9yZy1zcGVlZC1jb21tYW5kDQoJICAgICAgIChy dW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2Vzcw0KCQknb3JnLXNwZWVkLWNvbW1hbmQtaG9v ayAodGhpcy1jb21tYW5kLWtleXMpKSkpDQogICAgKGNvbmQNCiAgICAgKChjb21tYW5kcCBvcmct c3BlZWQtY29tbWFuZCkNCiAgICAgIChzZXRxIHRoaXMtY29tbWFuZCBvcmctc3BlZWQtY29tbWFu ZCkNCiAgICAgIChjYWxsLWludGVyYWN0aXZlbHkgb3JnLXNwZWVkLWNvbW1hbmQpKQ0KICAgICAo KGZ1bmN0aW9ucCBvcmctc3BlZWQtY29tbWFuZCkNCiAgICAgIChmdW5jYWxsIG9yZy1zcGVlZC1j b21tYW5kKSkNCiAgICAgKChhbmQgb3JnLXNwZWVkLWNvbW1hbmQgKGxpc3RwIG9yZy1zcGVlZC1j b21tYW5kKSkNCiAgICAgIChldmFsIG9yZy1zcGVlZC1jb21tYW5kKSkNCiAgICAgKHQgKGxldCAo b3JnLXVzZS1zcGVlZC1jb21tYW5kcykNCgkgIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1zZWxm LWluc2VydC1jb21tYW5kKSkpKSkNCiAgICgoYW5kDQogICAgIChvcmctdGFibGUtcCkNCiAgICAg KHByb2duDQogICAgICAgOzsgY2hlY2sgaWYgd2UgYmxhbmsgdGhlIGZpZWxkLCBhbmQgaWYgdGhh dCB0cmlnZ2VycyBhbGlnbg0KICAgICAgIChhbmQgKGZlYXR1cmVwICdvcmctdGFibGUpIG9yZy10 YWJsZS1hdXRvLWJsYW5rLWZpZWxkDQoJICAgIChtZW1iZXIgbGFzdC1jb21tYW5kDQoJCSAgICAn KG9yZy1jeWNsZSBvcmctcmV0dXJuIG9yZy1zaGlmdHRhYiBvcmctY3RybC1jLWN0cmwtYyB5YXMv ZXhwYW5kKSkNCgkgICAgKGlmIChvciAoZXF1YWwgKGNoYXItYWZ0ZXIpID9cICkgKGxvb2tpbmct YXQgIltefFxuXSogIHwiKSkNCgkJOzsgZ290IGV4dHJhIHNwYWNlLCB0aGlzIGZpZWxkIGRvZXMg bm90IGRldGVybWluZSBjb2x1bW4gd2lkdGgNCgkJKGxldCAob3JnLXRhYmxlLW1heS1uZWVkLXVw ZGF0ZSkgKG9yZy10YWJsZS1ibGFuay1maWVsZCkpDQoJICAgICAgOzsgbm8gZXh0cmEgc3BhY2Us IHRoaXMgZmllbGQgbWF5IGRldGVybWluZSBjb2x1bW4gd2lkdGgNCgkgICAgICAob3JnLXRhYmxl LWJsYW5rLWZpZWxkKSkpDQogICAgICAgdCkNCiAgICAgKGVxIE4gMSkNCiAgICAgKGxvb2tpbmct YXQgIltefFxuXSogIHwiKSkNCiAgICAobGV0IChvcmctdGFibGUtbWF5LW5lZWQtdXBkYXRlKQ0K ICAgICAgKGdvdG8tY2hhciAoMS0gKG1hdGNoLWVuZCAwKSkpDQogICAgICAoYmFja3dhcmQtZGVs ZXRlLWNoYXIgMSkNCiAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAwKSkNCiAgICAg IChzZWxmLWluc2VydC1jb21tYW5kIE4pKSkNCiAgICh0DQogICAgKHNldHEgb3JnLXRhYmxlLW1h eS1uZWVkLXVwZGF0ZSB0KQ0KICAgIChzZWxmLWluc2VydC1jb21tYW5kIE4pDQogICAgKG9yZy1m aXgtdGFncy1vbi10aGUtZmx5KQ0KICAgIChpZiBvcmctc2VsZi1pbnNlcnQtY2x1c3Rlci1mb3It dW5kbw0KCShpZiAobm90IChlcSBsYXN0LWNvbW1hbmQgJ29yZy1zZWxmLWluc2VydC1jb21tYW5k KSkNCgkgICAgKHNldHEgb3JnLXNlbGYtaW5zZXJ0LWNvbW1hbmQtdW5kby1jb3VudGVyIDEpDQoJ ICAoaWYgKD49IG9yZy1zZWxmLWluc2VydC1jb21tYW5kLXVuZG8tY291bnRlciAyMCkNCgkgICAg ICAoc2V0cSBvcmctc2VsZi1pbnNlcnQtY29tbWFuZC11bmRvLWNvdW50ZXIgMSkNCgkgICAgKGFu ZCAoPiBvcmctc2VsZi1pbnNlcnQtY29tbWFuZC11bmRvLWNvdW50ZXIgMCkNCgkJIGJ1ZmZlci11 bmRvLWxpc3QgKGxpc3RwIGJ1ZmZlci11bmRvLWxpc3QpDQoJCSAobm90IChjYWRyIGJ1ZmZlci11 bmRvLWxpc3QpKSA7IHJlbW92ZSBuaWwgZW50cnkNCgkJIChzZXRjZHIgYnVmZmVyLXVuZG8tbGlz dCAoY2RkciBidWZmZXItdW5kby1saXN0KSkpDQoJICAgIChzZXRxIG9yZy1zZWxmLWluc2VydC1j b21tYW5kLXVuZG8tY291bnRlcg0KCQkgICgxKyBvcmctc2VsZi1pbnNlcnQtY29tbWFuZC11bmRv LWNvdW50ZXIpKSkpKSkpKQ0KDQooZGVmdW4gb3JnLWNoZWNrLWJlZm9yZS1pbnZpc2libGUtZWRp dCAoa2luZCkNCiAgIkNoZWNrIGlzIGVkaXRpbmcgaWYga2luZCBLSU5EIHdvdWxkIGJlIGRhbmdl cm91cyB3aXRoIGludmlzaWJsZSB0ZXh0IGFyb3VuZC4NClRoZSBkZXRhaWxlZCByZWFjdGlvbiBk ZXBlbmRzIG9uIHRoZSB1c2VyIG9wdGlvbiBgb3JnLWNhdGNoLWludmlzaWJsZS1lZGl0cycuIg0K ICA7OyBGaXJzdCwgdHJ5IHRvIGdldCBvdXQgb2YgaGVyZSBhcyBxdWlja2x5IGFzIHBvc3NpYmxl LCB0byByZWR1Y2Ugb3ZlcmhlYWQNCiAgKGlmIChhbmQgb3JnLWNhdGNoLWludmlzaWJsZS1lZGl0 cw0KCSAgIChvciAobm90IChib3VuZHAgJ3Zpc2libGUtbW9kZSkpIChub3QgdmlzaWJsZS1tb2Rl KSkNCgkgICAob3IgKGdldC1jaGFyLXByb3BlcnR5IChwb2ludCkgJ2ludmlzaWJsZSkNCgkgICAg ICAgKGdldC1jaGFyLXByb3BlcnR5IChtYXggKHBvaW50LW1pbikgKDEtIChwb2ludCkpKSAnaW52 aXNpYmxlKSkpDQogICAgICA7OyBPSywgd2UgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sNCiAg ICAgIChsZXQqICgoaW52aXNpYmxlLWF0LXBvaW50IChnZXQtY2hhci1wcm9wZXJ0eSAocG9pbnQp ICdpbnZpc2libGUpKQ0KCSAgICAgKGludmlzaWJsZS1iZWZvcmUtcG9pbnQgKGlmIChib2JwKSBu aWwgIChnZXQtY2hhci1wcm9wZXJ0eQ0KCQkJCQkJICAgICAgKDEtIChwb2ludCkpICdpbnZpc2li bGUpKSkNCgkgICAgIChib3JkZXItYW5kLW9rLWRpcmVjdGlvbg0KCSAgICAgIChvcg0KCSAgICAg ICA7OyBDaGVjayBpZiB3ZSBhcmUgYWN0aW5nIHByZWRpY3RhYmx5IGJlZm9yZSBpbnZpc2libGUg dGV4dA0KCSAgICAgICAoYW5kIGludmlzaWJsZS1hdC1wb2ludCAobm90IGludmlzaWJsZS1iZWZv cmUtcG9pbnQpDQoJCSAgICAobWVtcSBraW5kICcoaW5zZXJ0IGRlbGV0ZS1iYWNrd2FyZCkpKQ0K CSAgICAgICA7OyBDaGVjayBpZiB3ZSBhcmUgYWN0aW5nIHByZWRpY3RhYmx5IGFmdGVyIGludmlz aWJsZSB0ZXh0DQoJICAgICAgIDs7IFRoaXMgd29ya3Mgbm90IHdlbGwsIGFuZCBJIGhhdmUgdHVy bmVkIGl0IG9mZi4gIEl0IHNlZW1zDQoJICAgICAgIDs7IGJldHRlciB0byBhbHdheXMgc2hvdyBh bmQgc3RvcCBhZnRlciBpbnZpc2libGUgdGV4dC4NCgkgICAgICAgOzsgKGFuZCAobm90IGludmlz aWJsZS1hdC1wb2ludCkgaW52aXNpYmxlLWJlZm9yZS1wb2ludA0KCSAgICAgICA7OyAgKG1lbXEg a2luZCAnKGluc2VydCBkZWxldGUpKSkNCgkgICAgICAgKSkpDQoJKHdoZW4gKG9yIChtZW1xIGlu dmlzaWJsZS1hdC1wb2ludCAnKG91dGxpbmUgb3JnLWhpZGUtYmxvY2sgdCkpDQoJCSAgKG1lbXEg aW52aXNpYmxlLWJlZm9yZS1wb2ludCAnKG91dGxpbmUgb3JnLWhpZGUtYmxvY2sgdCkpKQ0KCSAg KGlmIChlcSBvcmctY2F0Y2gtaW52aXNpYmxlLWVkaXRzICdlcnJvcikNCgkgICAgICAodXNlci1l cnJvciAiRWRpdGluZyBpbiBpbnZpc2libGUgYXJlYXMgaXMgcHJvaGliaXRlZCwgbWFrZSB0aGVt IHZpc2libGUgZmlyc3QiKSkNCgkgIChpZiAoYW5kIG9yZy1jdXN0b20tcHJvcGVydGllcy1vdmVy bGF5cw0KCQkgICAoeS1vci1uLXAgIkRpc3BsYXkgaW52aXNpYmxlIHByb3BlcnRpZXMgaW4gdGhp cyBidWZmZXI/ICIpKQ0KCSAgICAgIChvcmctdG9nZ2xlLWN1c3RvbS1wcm9wZXJ0aWVzLXZpc2li aWxpdHkpDQoJICAgIDs7IE1ha2UgdGhlIGFyZWEgdmlzaWJsZQ0KCSAgICAoc2F2ZS1leGN1cnNp b24NCgkgICAgICAoaWYgaW52aXNpYmxlLWJlZm9yZS1wb2ludA0KCQkgIChnb3RvLWNoYXIgKHBy ZXZpb3VzLXNpbmdsZS1jaGFyLXByb3BlcnR5LWNoYW5nZQ0KCQkJICAgICAgKHBvaW50KSAnaW52 aXNpYmxlKSkpDQoJICAgICAgKHNob3ctc3VidHJlZSkpDQoJICAgIChjb25kDQoJICAgICAoKGVx IG9yZy1jYXRjaC1pbnZpc2libGUtZWRpdHMgJ3Nob3cpDQoJICAgICAgOzsgVGhhdCdzIGl0LCB3 ZSBkbyB0aGUgZWRpdCBhZnRlciBzaG93aW5nDQoJICAgICAgKG1lc3NhZ2UNCgkgICAgICAgIlVu Zm9sZGluZyBpbnZpc2libGUgcmVnaW9uIGFyb3VuZCBwb2ludCBiZWZvcmUgZWRpdGluZyIpDQoJ ICAgICAgKHNpdC1mb3IgMSkpDQoJICAgICAoKGFuZCAoZXEgb3JnLWNhdGNoLWludmlzaWJsZS1l ZGl0cyAnc21hcnQpDQoJCSAgIGJvcmRlci1hbmQtb2stZGlyZWN0aW9uKQ0KCSAgICAgIChtZXNz YWdlICJVbmZvbGRpbmcgaW52aXNpYmxlIHJlZ2lvbiBhcm91bmQgcG9pbnQgYmVmb3JlIGVkaXRp bmciKSkNCgkgICAgICh0DQoJICAgICAgOzsgRG9uJ3QgZG8gdGhlIGVkaXQsIG1ha2UgdGhlIHVz ZXIgcmVwZWF0IGl0IGluIGZ1bGwgdmlzaWJpbGl0eQ0KCSAgICAgICh1c2VyLWVycm9yICJFZGl0 IGluIGludmlzaWJsZSByZWdpb24gYWJvcnRlZCwgcmVwZWF0IHRvIGNvbmZpcm0gd2l0aCB0ZXh0 IHZpc2libGUiKSkpKSkpKSkNCg0KKGRlZnVuIG9yZy1maXgtdGFncy1vbi10aGUtZmx5ICgpDQog ICh3aGVuIChhbmQgKGVxdWFsIChjaGFyLWFmdGVyIChwb2ludC1hdC1ib2wpKSA/KikNCgkgICAg IChvcmctYXQtaGVhZGluZy1wKSkNCiAgICAob3JnLWFsaWduLXRhZ3MtaGVyZSBvcmctdGFncy1j b2x1bW4pKSkNCg0KKGRlZnVuIG9yZy1kZWxldGUtYmFja3dhcmQtY2hhciAoTikNCiAgIkxpa2Ug YGRlbGV0ZS1iYWNrd2FyZC1jaGFyJywgaW5zZXJ0IHdoaXRlc3BhY2UgYXQgZmllbGQgZW5kIGlu IHRhYmxlcy4NCldoZW4gZGVsZXRpbmcgYmFja3dhcmRzLCBpbiB0YWJsZXMgdGhpcyBmdW5jdGlv biB3aWxsIGluc2VydCB3aGl0ZXNwYWNlIGluDQpmcm9udCBvZiB0aGUgbmV4dCBcInxcIiBzZXBh cmF0b3IsIHRvIGtlZXAgdGhlIHRhYmxlIGFsaWduZWQuICBUaGUgdGFibGUgd2lsbA0Kc3RpbGwg YmUgbWFya2VkIGZvciByZS1hbGlnbm1lbnQgaWYgdGhlIGZpZWxkIGRpZCBmaWxsIHRoZSBlbnRp cmUgY29sdW1uLA0KYmVjYXVzZSwgaW4gdGhpcyBjYXNlIHRoZSBkZWxldGlvbiBtaWdodCBuYXJy b3cgdGhlIGNvbHVtbi4iDQogIChpbnRlcmFjdGl2ZSAicCIpDQogIChzYXZlLW1hdGNoLWRhdGEN CiAgICAob3JnLWNoZWNrLWJlZm9yZS1pbnZpc2libGUtZWRpdCAnZGVsZXRlLWJhY2t3YXJkKQ0K ICAgIChpZiAoYW5kIChvcmctdGFibGUtcCkNCgkgICAgIChlcSBOIDEpDQoJICAgICAoc3RyaW5n LW1hdGNoICJ8IiAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQtYXQtYm9sKSAocG9pbnQpKSkNCgkg ICAgIChsb29raW5nLWF0ICIuKj98IikpDQoJKGxldCAoKHBvcyAocG9pbnQpKQ0KCSAgICAgIChu b2FsaWduIChsb29raW5nLWF0ICJbXnxcblxyXSogIHwiKSkNCgkgICAgICAoYyBvcmctdGFibGUt bWF5LW5lZWQtdXBkYXRlKSkNCgkgIChiYWNrd2FyZC1kZWxldGUtY2hhciBOKQ0KCSAgKGlmIChu b3Qgb3ZlcndyaXRlLW1vZGUpDQoJICAgICAgKHByb2duDQoJCShza2lwLWNoYXJzLWZvcndhcmQg Il58IikNCgkJKGluc2VydCAiICIpDQoJCShnb3RvLWNoYXIgKDEtIHBvcykpKSkNCgkgIDs7IG5v YWxpZ246IGlmIHRoZXJlIHdlcmUgdHdvIHNwYWNlcyBhdCB0aGUgZW5kLCB0aGlzIGZpZWxkDQoJ ICA7OyBkb2VzIG5vdCBkZXRlcm1pbmUgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4uDQoJICAoaWYg bm9hbGlnbiAoc2V0cSBvcmctdGFibGUtbWF5LW5lZWQtdXBkYXRlIGMpKSkNCiAgICAgIChiYWNr d2FyZC1kZWxldGUtY2hhciBOKQ0KICAgICAgKG9yZy1maXgtdGFncy1vbi10aGUtZmx5KSkpKQ0K DQooZGVmdW4gb3JnLWRlbGV0ZS1jaGFyIChOKQ0KICAiTGlrZSBgZGVsZXRlLWNoYXInLCBidXQg aW5zZXJ0IHdoaXRlc3BhY2UgYXQgZmllbGQgZW5kIGluIHRhYmxlcy4NCldoZW4gZGVsZXRpbmcg Y2hhcmFjdGVycywgaW4gdGFibGVzIHRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgd2hpdGVzcGFj ZSBpbg0KZnJvbnQgb2YgdGhlIG5leHQgXCJ8XCIgc2VwYXJhdG9yLCB0byBrZWVwIHRoZSB0YWJs ZSBhbGlnbmVkLiAgVGhlIHRhYmxlIHdpbGwNCnN0aWxsIGJlIG1hcmtlZCBmb3IgcmUtYWxpZ25t ZW50IGlmIHRoZSBmaWVsZCBkaWQgZmlsbCB0aGUgZW50aXJlIGNvbHVtbiwNCmJlY2F1c2UsIGlu IHRoaXMgY2FzZSB0aGUgZGVsZXRpb24gbWlnaHQgbmFycm93IHRoZSBjb2x1bW4uIg0KICAoaW50 ZXJhY3RpdmUgInAiKQ0KICAoc2F2ZS1tYXRjaC1kYXRhDQogICAgKG9yZy1jaGVjay1iZWZvcmUt aW52aXNpYmxlLWVkaXQgJ2RlbGV0ZSkNCiAgICAoaWYgKGFuZCAob3JnLXRhYmxlLXApDQoJICAg ICAobm90IChib2xwKSkNCgkgICAgIChub3QgKD0gKGNoYXItYWZ0ZXIpID98KSkNCgkgICAgIChl cSBOIDEpKQ0KCShpZiAobG9va2luZy1hdCAiLio/fCIpDQoJICAgIChsZXQgKChwb3MgKHBvaW50 KSkNCgkJICAobm9hbGlnbiAobG9va2luZy1hdCAiW158XG5ccl0qICB8IikpDQoJCSAgKGMgb3Jn LXRhYmxlLW1heS1uZWVkLXVwZGF0ZSkpDQoJICAgICAgKHJlcGxhY2UtbWF0Y2gNCgkgICAgICAg KGNvbmNhdCAoc3Vic3RyaW5nIChtYXRjaC1zdHJpbmcgMCkgMSAtMSkgIiB8IikgbmlsIHQpDQoJ ICAgICAgKGdvdG8tY2hhciBwb3MpDQoJICAgICAgOzsgbm9hbGlnbjogaWYgdGhlcmUgd2VyZSB0 d28gc3BhY2VzIGF0IHRoZSBlbmQsIHRoaXMgZmllbGQNCgkgICAgICA7OyBkb2VzIG5vdCBkZXRl cm1pbmUgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4uDQoJICAgICAgKGlmIG5vYWxpZ24gKHNldHEg b3JnLXRhYmxlLW1heS1uZWVkLXVwZGF0ZSBjKSkpDQoJICAoZGVsZXRlLWNoYXIgTikpDQogICAg ICAoZGVsZXRlLWNoYXIgTikNCiAgICAgIChvcmctZml4LXRhZ3Mtb24tdGhlLWZseSkpKSkNCg0K OzsgTWFrZSBgZGVsZXRlLXNlbGVjdGlvbi1tb2RlJyB3b3JrIHdpdGggb3JnLW1vZGUgYW5kIG9y Z3RibC1tb2RlDQoocHV0ICdvcmctc2VsZi1pbnNlcnQtY29tbWFuZCAnZGVsZXRlLXNlbGVjdGlv bg0KICAgICAobGFtYmRhICgpDQogICAgICAgKG5vdCAocnVuLWhvb2std2l0aC1hcmdzLXVudGls LXN1Y2Nlc3MNCiAgICAgICAgICAgICAnc2VsZi1pbnNlcnQtdXNlcy1yZWdpb24tZnVuY3Rpb25z KSkpKQ0KKHB1dCAnb3JndGJsLXNlbGYtaW5zZXJ0LWNvbW1hbmQgJ2RlbGV0ZS1zZWxlY3Rpb24N CiAgICAgKGxhbWJkYSAoKQ0KICAgICAgIChub3QgKHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1z dWNjZXNzDQogICAgICAgICAgICAgJ3NlbGYtaW5zZXJ0LXVzZXMtcmVnaW9uLWZ1bmN0aW9ucykp KSkNCihwdXQgJ29yZy1kZWxldGUtY2hhciAnZGVsZXRlLXNlbGVjdGlvbiAnc3VwZXJzZWRlKQ0K KHB1dCAnb3JnLWRlbGV0ZS1iYWNrd2FyZC1jaGFyICdkZWxldGUtc2VsZWN0aW9uICdzdXBlcnNl ZGUpDQoocHV0ICdvcmcteWFuayAnZGVsZXRlLXNlbGVjdGlvbiAneWFuaykNCg0KOzsgTWFrZSBg Zmx5c3BlbGwtbW9kZScgZGVsYXkgYWZ0ZXIgc29tZSBjb21tYW5kcw0KKHB1dCAnb3JnLXNlbGYt aW5zZXJ0LWNvbW1hbmQgJ2ZseXNwZWxsLWRlbGF5ZWQgdCkNCihwdXQgJ29yZ3RibC1zZWxmLWlu c2VydC1jb21tYW5kICdmbHlzcGVsbC1kZWxheWVkIHQpDQoocHV0ICdvcmctZGVsZXRlLWNoYXIg J2ZseXNwZWxsLWRlbGF5ZWQgdCkNCihwdXQgJ29yZy1kZWxldGUtYmFja3dhcmQtY2hhciAnZmx5 c3BlbGwtZGVsYXllZCB0KQ0KDQo7OyBNYWtlIHBhYmJyZXYtbW9kZSBleHBhbmQgYWZ0ZXIgb3Jn LW1vZGUgY29tbWFuZHMNCihwdXQgJ29yZy1zZWxmLWluc2VydC1jb21tYW5kICdwYWJicmV2LWV4 cGFuZC1hZnRlci1jb21tYW5kIHQpDQoocHV0ICdvcmd0Ymwtc2VsZi1pbnNlcnQtY29tbWFuZCAn cGFiYnJldi1leHBhbmQtYWZ0ZXItY29tbWFuZCB0KQ0KDQooZGVmdW4gb3JnLXJlbWFwIChtYXAg JnJlc3QgY29tbWFuZHMpDQogICJJbiBNQVAsIHJlbWFwIHRoZSBmdW5jdGlvbnMgZ2l2ZW4gaW4g Q09NTUFORFMuDQpDT01NQU5EUyBpcyBhIGxpc3Qgb2YgYWx0ZXJuYXRpbmcgT0xEREVGIE5FV0RF RiBjb21tYW5kIG5hbWVzLiINCiAgKGxldCAobmV3IG9sZCkNCiAgICAod2hpbGUgY29tbWFuZHMN CiAgICAgIChzZXRxIG9sZCAocG9wIGNvbW1hbmRzKSBuZXcgKHBvcCBjb21tYW5kcykpDQogICAg ICAoaWYgKGZib3VuZHAgJ2NvbW1hbmQtcmVtYXBwaW5nKQ0KCSAgKG9yZy1kZWZrZXkgbWFwICh2 ZWN0b3IgJ3JlbWFwIG9sZCkgbmV3KQ0KCShzdWJzdGl0dXRlLWtleS1kZWZpbml0aW9uIG9sZCBu ZXcgbWFwIGdsb2JhbC1tYXApKSkpKQ0KDQooZGVmdW4gb3JnLXRyYW5zcG9zZS13b3JkcyAoKQ0K ICAiVHJhbnNwb3NlIHdvcmRzIGZvciBPcmcuDQpUaGlzIHVzZXMgdGhlIGBvcmctbW9kZS10cmFu c3Bvc2Utd29yZC1zeW50YXgtdGFibGUnIHN5bnRheA0KdGFibGUsIHdoaWNoIGludGVycHJldHMg Y2hhcmFjdGVycyBpbiBgb3JnLWVtcGhhc2lzLWFsaXN0JyBhcw0Kd29yZCBjb25zdGl0dWVudHMu Ig0KICAoaW50ZXJhY3RpdmUpDQogICh3aXRoLXN5bnRheC10YWJsZSBvcmctbW9kZS10cmFuc3Bv c2Utd29yZC1zeW50YXgtdGFibGUNCiAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICd0cmFuc3Bvc2Ut d29yZHMpKSkNCihvcmctcmVtYXAgb3JnLW1vZGUtbWFwICd0cmFuc3Bvc2Utd29yZHMgJ29yZy10 cmFuc3Bvc2Utd29yZHMpDQoNCih3aGVuIChlcSBvcmctZW5hYmxlLXRhYmxlLWVkaXRvciAnb3B0 aW1pemVkKQ0KICA7OyBJZiB0aGUgdXNlciB3YW50cyBtYXhpbXVtIHRhYmxlIHN1cHBvcnQsIHdl IG5lZWQgdG8gaGlqYWNrDQogIDs7IHNvbWUgc3RhbmRhcmQgZWRpdGluZyBmdW5jdGlvbnMNCiAg KG9yZy1yZW1hcCBvcmctbW9kZS1tYXANCgkgICAgICdzZWxmLWluc2VydC1jb21tYW5kICdvcmct c2VsZi1pbnNlcnQtY29tbWFuZA0KCSAgICAgJ2RlbGV0ZS1jaGFyICdvcmctZGVsZXRlLWNoYXIN CgkgICAgICdkZWxldGUtYmFja3dhcmQtY2hhciAnb3JnLWRlbGV0ZS1iYWNrd2FyZC1jaGFyKQ0K ICAob3JnLWRlZmtleSBvcmctbW9kZS1tYXAgInwiICdvcmctZm9yY2Utc2VsZi1pbnNlcnQpKQ0K DQooZGVmdmFyIG9yZy1jdHJsLWMtY3RybC1jLWhvb2sgbmlsDQogICJIb29rIGZvciBmdW5jdGlv bnMgYXR0YWNoaW5nIHRoZW1zZWx2ZXMgdG8gYEMtYyBDLWMnLg0KDQpUaGlzIGNhbiBiZSB1c2Vk IHRvIGFkZCBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIEMtYyBDLWMNCmtleSB3aGlj aCBleGVjdXRlcyBjb250ZXh0LWRlcGVuZGVudCBjb21tYW5kcy4gIFRoaXMgaG9vayBpcyBydW4N CmJlZm9yZSBhbnkgb3RoZXIgdGVzdCwgd2hpbGUgYG9yZy1jdHJsLWMtY3RybC1jLWZpbmFsLWhv b2snIGlzDQpydW4gYWZ0ZXIgdGhlIGxhc3QgdGVzdC4NCg0KRWFjaCBmdW5jdGlvbiB3aWxsIGJl IGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4gIFRoZSBmdW5jdGlvbg0KbXVzdCBjaGVjayBpZiB0 aGUgY29udGV4dCBpcyBhcHByb3ByaWF0ZSBmb3IgaXQgdG8gYWN0LiAgSWYgeWVzLA0KaXQgc2hv dWxkIGRvIGl0cyB0aGluZyBhbmQgdGhlbiByZXR1cm4gYSBub24tbmlsIHZhbHVlLiAgSWYgdGhl DQpjb250ZXh0IGlzIHdyb25nLCBqdXN0IGRvIG5vdGhpbmcgYW5kIHJldHVybiBuaWwuIikNCg0K KGRlZnZhciBvcmctY3RybC1jLWN0cmwtYy1maW5hbC1ob29rIG5pbA0KICAiSG9vayBmb3IgZnVu Y3Rpb25zIGF0dGFjaGluZyB0aGVtc2VsdmVzIHRvIGBDLWMgQy1jJy4NCg0KVGhpcyBjYW4gYmUg dXNlZCB0byBhZGQgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHRvIHRoZSBDLWMgQy1jDQprZXkg d2hpY2ggZXhlY3V0ZXMgY29udGV4dC1kZXBlbmRlbnQgY29tbWFuZHMuICBUaGlzIGhvb2sgaXMg cnVuDQphZnRlciBhbnkgb3RoZXIgdGVzdCwgd2hpbGUgYG9yZy1jdHJsLWMtY3RybC1jLWhvb2sn IGlzIHJ1bg0KYmVmb3JlIHRoZSBmaXJzdCB0ZXN0Lg0KDQpFYWNoIGZ1bmN0aW9uIHdpbGwgYmUg Y2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLiAgVGhlIGZ1bmN0aW9uDQptdXN0IGNoZWNrIGlmIHRo ZSBjb250ZXh0IGlzIGFwcHJvcHJpYXRlIGZvciBpdCB0byBhY3QuICBJZiB5ZXMsDQppdCBzaG91 bGQgZG8gaXRzIHRoaW5nIGFuZCB0aGVuIHJldHVybiBhIG5vbi1uaWwgdmFsdWUuICBJZiB0aGUN CmNvbnRleHQgaXMgd3JvbmcsIGp1c3QgZG8gbm90aGluZyBhbmQgcmV0dXJuIG5pbC4iKQ0KDQoo ZGVmdmFyIG9yZy10YWItZmlyc3QtaG9vayBuaWwNCiAgIkhvb2sgZm9yIGZ1bmN0aW9ucyB0byBh dHRhY2ggdGhlbXNlbHZlcyB0byBUQUIuDQpTZWUgYG9yZy1jdHJsLWMtY3RybC1jLWhvb2snIGZv ciBtb3JlIGluZm9ybWF0aW9uLg0KVGhpcyBob29rIHJ1bnMgYXMgdGhlIGZpcnN0IGFjdGlvbiB3 aGVuIFRBQiBpcyBwcmVzc2VkLCBldmVuIGJlZm9yZQ0KYG9yZy1jeWNsZScgbWVzc2VzIGFyb3Vu ZCB3aXRoIHRoZSBgb3V0bGluZS1yZWdleHAnIHRvIGNhdGVyIGZvcg0KaW5saW5lIHRhc2tzIGFu ZCBwbGFpbiBsaXN0IGl0ZW0gZm9sZGluZy4NCklmIGFueSBmdW5jdGlvbiBpbiB0aGlzIGhvb2sg cmV0dXJucyB0LCBhbnkgb3RoZXIgYWN0aW9ucyB0aGF0DQp3b3VsZCBoYXZlIGJlZW4gY2F1c2Vk IGJ5IFRBQiAoc3VjaCBhcyB0YWJsZSBmaWVsZCBtb3Rpb24gb3IgdmlzaWJpbGl0eQ0KY3ljbGlu Zykgd2lsbCBub3Qgb2NjdXIuIikNCg0KKGRlZnZhciBvcmctdGFiLWFmdGVyLWNoZWNrLWZvci10 YWJsZS1ob29rIG5pbA0KICAiSG9vayBmb3IgZnVuY3Rpb25zIHRvIGF0dGFjaCB0aGVtc2VsdmVz IHRvIFRBQi4NClNlZSBgb3JnLWN0cmwtYy1jdHJsLWMtaG9vaycgZm9yIG1vcmUgaW5mb3JtYXRp b24uDQpUaGlzIGhvb2sgcnVucyBhZnRlciBpdCBoYXMgYmVlbiBlc3RhYmxpc2hlZCB0aGF0IHRo ZSBjdXJzb3IgaXMgbm90IGluIGENCnRhYmxlLCBidXQgYmVmb3JlIGNoZWNraW5nIGlmIHRoZSBj dXJzb3IgaXMgaW4gYSBoZWFkbGluZSBvciBpZiBnbG9iYWwgY3ljbGluZw0Kc2hvdWxkIGJlIGRv bmUuDQpJZiBhbnkgZnVuY3Rpb24gaW4gdGhpcyBob29rIHJldHVybnMgdCwgbm90IG90aGVyIGFj dGlvbnMgbGlrZSB2aXNpYmlsaXR5DQpjeWNsaW5nIHdpbGwgYmUgZG9uZS4iKQ0KDQooZGVmdmFy IG9yZy10YWItYWZ0ZXItY2hlY2stZm9yLWN5Y2xpbmctaG9vayBuaWwNCiAgIkhvb2sgZm9yIGZ1 bmN0aW9ucyB0byBhdHRhY2ggdGhlbXNlbHZlcyB0byBUQUIuDQpTZWUgYG9yZy1jdHJsLWMtY3Ry bC1jLWhvb2snIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KVGhpcyBob29rIHJ1bnMgYWZ0ZXIgaXQg aGFzIGJlZW4gZXN0YWJsaXNoZWQgdGhhdCBub3QgdGFibGUgZmllbGQgbW90aW9uIGFuZA0Kbm90 IHZpc2liaWxpdHkgc2hvdWxkIGJlIGRvbmUgYmVjYXVzZSBvZiBjdXJyZW50IGNvbnRleHQuICBU aGlzIGlzIHByb2JhYmx5DQp0aGUgcGxhY2Ugd2hlcmUgYSBwYWNrYWdlIGxpa2UgeWFzbmlwcGV0 cyBjYW4gaG9vayBpbi4iKQ0KDQooZGVmdmFyIG9yZy10YWItYmVmb3JlLXRhYi1lbXVsYXRpb24t aG9vayBuaWwNCiAgIkhvb2sgZm9yIGZ1bmN0aW9ucyB0byBhdHRhY2ggdGhlbXNlbHZlcyB0byBU QUIuDQpTZWUgYG9yZy1jdHJsLWMtY3RybC1jLWhvb2snIGZvciBtb3JlIGluZm9ybWF0aW9uLg0K VGhpcyBob29rIHJ1bnMgYWZ0ZXIgZXZlcnkgb3RoZXIgb3B0aW9ucyBmb3IgVEFCIGhhdmUgYmVl biBleGhhdXN0ZWQsIGJ1dA0KYmVmb3JlIGluZGVudGF0aW9uIGFuZCBcdCBpbnNlcnRpb24gdGFr ZXMgcGxhY2UuIikNCg0KKGRlZnZhciBvcmctbWV0YWxlZnQtaG9vayBuaWwNCiAgIkhvb2sgZm9y IGZ1bmN0aW9ucyBhdHRhY2hpbmcgdGhlbXNlbHZlcyB0byBgTS1sZWZ0Jy4NClNlZSBgb3JnLWN0 cmwtYy1jdHJsLWMtaG9vaycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIikNCihkZWZ2YXIgb3JnLW1l dGFyaWdodC1ob29rIG5pbA0KICAiSG9vayBmb3IgZnVuY3Rpb25zIGF0dGFjaGluZyB0aGVtc2Vs dmVzIHRvIGBNLXJpZ2h0Jy4NClNlZSBgb3JnLWN0cmwtYy1jdHJsLWMtaG9vaycgZm9yIG1vcmUg aW5mb3JtYXRpb24uIikNCihkZWZ2YXIgb3JnLW1ldGF1cC1ob29rIG5pbA0KICAiSG9vayBmb3Ig ZnVuY3Rpb25zIGF0dGFjaGluZyB0aGVtc2VsdmVzIHRvIGBNLXVwJy4NClNlZSBgb3JnLWN0cmwt Yy1jdHJsLWMtaG9vaycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIikNCihkZWZ2YXIgb3JnLW1ldGFk b3duLWhvb2sgbmlsDQogICJIb29rIGZvciBmdW5jdGlvbnMgYXR0YWNoaW5nIHRoZW1zZWx2ZXMg dG8gYE0tZG93bicuDQpTZWUgYG9yZy1jdHJsLWMtY3RybC1jLWhvb2snIGZvciBtb3JlIGluZm9y bWF0aW9uLiIpDQooZGVmdmFyIG9yZy1zaGlmdG1ldGFsZWZ0LWhvb2sgbmlsDQogICJIb29rIGZv ciBmdW5jdGlvbnMgYXR0YWNoaW5nIHRoZW1zZWx2ZXMgdG8gYE0tUy1sZWZ0Jy4NClNlZSBgb3Jn LWN0cmwtYy1jdHJsLWMtaG9vaycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIikNCihkZWZ2YXIgb3Jn LXNoaWZ0bWV0YXJpZ2h0LWhvb2sgbmlsDQogICJIb29rIGZvciBmdW5jdGlvbnMgYXR0YWNoaW5n IHRoZW1zZWx2ZXMgdG8gYE0tUy1yaWdodCcuDQpTZWUgYG9yZy1jdHJsLWMtY3RybC1jLWhvb2sn IGZvciBtb3JlIGluZm9ybWF0aW9uLiIpDQooZGVmdmFyIG9yZy1zaGlmdG1ldGF1cC1ob29rIG5p bA0KICAiSG9vayBmb3IgZnVuY3Rpb25zIGF0dGFjaGluZyB0aGVtc2VsdmVzIHRvIGBNLVMtdXAn Lg0KU2VlIGBvcmctY3RybC1jLWN0cmwtYy1ob29rJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKQ0K KGRlZnZhciBvcmctc2hpZnRtZXRhZG93bi1ob29rIG5pbA0KICAiSG9vayBmb3IgZnVuY3Rpb25z IGF0dGFjaGluZyB0aGVtc2VsdmVzIHRvIGBNLVMtZG93bicuDQpTZWUgYG9yZy1jdHJsLWMtY3Ry bC1jLWhvb2snIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpDQooZGVmdmFyIG9yZy1tZXRhcmV0dXJu LWhvb2sgbmlsDQogICJIb29rIGZvciBmdW5jdGlvbnMgYXR0YWNoaW5nIHRoZW1zZWx2ZXMgdG8g YE0tUkVUJy4NClNlZSBgb3JnLWN0cmwtYy1jdHJsLWMtaG9vaycgZm9yIG1vcmUgaW5mb3JtYXRp b24uIikNCihkZWZ2YXIgb3JnLXNoaWZ0dXAtaG9vayBuaWwNCiAgIkhvb2sgZm9yIGZ1bmN0aW9u cyBhdHRhY2hpbmcgdGhlbXNlbHZlcyB0byBgUy11cCcuDQpTZWUgYG9yZy1jdHJsLWMtY3RybC1j LWhvb2snIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpDQooZGVmdmFyIG9yZy1zaGlmdHVwLWZpbmFs LWhvb2sgbmlsDQogICJIb29rIGZvciBmdW5jdGlvbnMgYXR0YWNoaW5nIHRoZW1zZWx2ZXMgdG8g YFMtdXAnLg0KVGhpcyBvbmUgcnVucyBhZnRlciBhbGwgb3RoZXIgb3B0aW9ucyBleGNlcHQgc2hp ZnQtc2VsZWN0IGhhdmUgYmVlbiBleGNsdWRlZC4NClNlZSBgb3JnLWN0cmwtYy1jdHJsLWMtaG9v aycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIikNCihkZWZ2YXIgb3JnLXNoaWZ0ZG93bi1ob29rIG5p bA0KICAiSG9vayBmb3IgZnVuY3Rpb25zIGF0dGFjaGluZyB0aGVtc2VsdmVzIHRvIGBTLWRvd24n Lg0KU2VlIGBvcmctY3RybC1jLWN0cmwtYy1ob29rJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKQ0K KGRlZnZhciBvcmctc2hpZnRkb3duLWZpbmFsLWhvb2sgbmlsDQogICJIb29rIGZvciBmdW5jdGlv bnMgYXR0YWNoaW5nIHRoZW1zZWx2ZXMgdG8gYFMtZG93bicuDQpUaGlzIG9uZSBydW5zIGFmdGVy IGFsbCBvdGhlciBvcHRpb25zIGV4Y2VwdCBzaGlmdC1zZWxlY3QgaGF2ZSBiZWVuIGV4Y2x1ZGVk Lg0KU2VlIGBvcmctY3RybC1jLWN0cmwtYy1ob29rJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKQ0K KGRlZnZhciBvcmctc2hpZnRsZWZ0LWhvb2sgbmlsDQogICJIb29rIGZvciBmdW5jdGlvbnMgYXR0 YWNoaW5nIHRoZW1zZWx2ZXMgdG8gYFMtbGVmdCcuDQpTZWUgYG9yZy1jdHJsLWMtY3RybC1jLWhv b2snIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpDQooZGVmdmFyIG9yZy1zaGlmdGxlZnQtZmluYWwt aG9vayBuaWwNCiAgIkhvb2sgZm9yIGZ1bmN0aW9ucyBhdHRhY2hpbmcgdGhlbXNlbHZlcyB0byBg Uy1sZWZ0Jy4NClRoaXMgb25lIHJ1bnMgYWZ0ZXIgYWxsIG90aGVyIG9wdGlvbnMgZXhjZXB0IHNo aWZ0LXNlbGVjdCBoYXZlIGJlZW4gZXhjbHVkZWQuDQpTZWUgYG9yZy1jdHJsLWMtY3RybC1jLWhv b2snIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpDQooZGVmdmFyIG9yZy1zaGlmdHJpZ2h0LWhvb2sg bmlsDQogICJIb29rIGZvciBmdW5jdGlvbnMgYXR0YWNoaW5nIHRoZW1zZWx2ZXMgdG8gYFMtcmln aHQnLg0KU2VlIGBvcmctY3RybC1jLWN0cmwtYy1ob29rJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4i KQ0KKGRlZnZhciBvcmctc2hpZnRyaWdodC1maW5hbC1ob29rIG5pbA0KICAiSG9vayBmb3IgZnVu Y3Rpb25zIGF0dGFjaGluZyB0aGVtc2VsdmVzIHRvIGBTLXJpZ2h0Jy4NClRoaXMgb25lIHJ1bnMg YWZ0ZXIgYWxsIG90aGVyIG9wdGlvbnMgZXhjZXB0IHNoaWZ0LXNlbGVjdCBoYXZlIGJlZW4gZXhj bHVkZWQuDQpTZWUgYG9yZy1jdHJsLWMtY3RybC1jLWhvb2snIGZvciBtb3JlIGluZm9ybWF0aW9u LiIpDQoNCihkZWZ1biBvcmctbW9kaWZpZXItY3Vyc29yLWVycm9yICgpDQogICJUaHJvdyBhbiBl cnJvciwgYSBtb2RpZmllZCBjdXJzb3IgY29tbWFuZCB3YXMgYXBwbGllZCBpbiB3cm9uZyBjb250 ZXh0LiINCiAgKHVzZXItZXJyb3IgIlRoaXMgY29tbWFuZCBpcyBhY3RpdmUgaW4gc3BlY2lhbCBj b250ZXh0IGxpa2UgdGFibGVzLCBoZWFkbGluZXMgb3IgaXRlbXMiKSkNCg0KKGRlZnVuIG9yZy1z aGlmdHNlbGVjdC1lcnJvciAoKQ0KICAiVGhyb3cgYW4gZXJyb3IgYmVjYXVzZSBTaGlmdC1DdXJz b3IgY29tbWFuZCB3YXMgYXBwbGllZCBpbiB3cm9uZyBjb250ZXh0LiINCiAgKGlmIChhbmQgKGJv dW5kcCAnc2hpZnQtc2VsZWN0LW1vZGUpIHNoaWZ0LXNlbGVjdC1tb2RlKQ0KICAgICAgKHVzZXIt ZXJyb3IgIlRvIHVzZSBzaGlmdC1zZWxlY3Rpb24gd2l0aCBPcmctbW9kZSwgY3VzdG9taXplIGBv cmctc3VwcG9ydC1zaGlmdC1zZWxlY3QnIikNCiAgICAodXNlci1lcnJvciAiVGhpcyBjb21tYW5k IHdvcmtzIG9ubHkgaW4gc3BlY2lhbCBjb250ZXh0IGxpa2UgaGVhZGxpbmVzIG9yIHRpbWVzdGFt cHMiKSkpDQoNCihkZWZ1biBvcmctY2FsbC1mb3Itc2hpZnQtc2VsZWN0IChjbWQpDQogIChsZXQg KCh0aGlzLWNvbW1hbmQta2V5cy1zaGlmdC10cmFuc2xhdGVkIHQpKQ0KICAgIChjYWxsLWludGVy YWN0aXZlbHkgY21kKSkpDQoNCihkZWZ1biBvcmctc2hpZnR0YWIgKCZvcHRpb25hbCBhcmcpDQog ICJHbG9iYWwgdmlzaWJpbGl0eSBjeWNsaW5nIG9yIG1vdmUgdG8gcHJldmlvdXMgdGFibGUgZmll bGQuDQpDYWxsIGBvcmctdGFibGUtcHJldmlvdXMtZmllbGQnIHdpdGhpbiBhIHRhYmxlLg0KV2hl biBBUkcgaXMgbmlsLCBjeWNsZSBnbG9iYWxseSB0aHJvdWdoIHZpc2liaWxpdHkgc3RhdGVzLg0K V2hlbiBBUkcgaXMgYSBudW1lcmljIHByZWZpeCwgc2hvdyBjb250ZW50cyBvZiB0aGlzIGxldmVs LiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgKGNvbmQNCiAgICgob3JnLWF0LXRhYmxlLXApIChj YWxsLWludGVyYWN0aXZlbHkgJ29yZy10YWJsZS1wcmV2aW91cy1maWVsZCkpDQogICAoKGludGVn ZXJwIGFyZykNCiAgICAobGV0ICgoYXJnMiAoaWYgb3JnLW9kZC1sZXZlbHMtb25seSAoMS0gKCog MiBhcmcpKSBhcmcpKSkNCiAgICAgIChtZXNzYWdlICJDb250ZW50IHZpZXcgdG8gbGV2ZWw6ICVk IiBhcmcpDQogICAgICAob3JnLWNvbnRlbnQgKHByZWZpeC1udW1lcmljLXZhbHVlIGFyZzIpKQ0K ICAgICAgKG9yZy1jeWNsZS1zaG93LWVtcHR5LWxpbmVzIHQpDQogICAgICAoc2V0cSBvcmctY3lj bGUtZ2xvYmFsLXN0YXR1cyAnb3ZlcnZpZXcpKSkNCiAgICh0IChjYWxsLWludGVyYWN0aXZlbHkg J29yZy1nbG9iYWwtY3ljbGUpKSkpDQoNCihkZWZ1biBvcmctc2hpZnRtZXRhbGVmdCAoKQ0KICAi UHJvbW90ZSBzdWJ0cmVlIG9yIGRlbGV0ZSB0YWJsZSBjb2x1bW4uDQpDYWxscyBgb3JnLXByb21v dGUtc3VidHJlZScsIGBvcmctb3V0ZGVudC1pdGVtLXRyZWUnLCBvcg0KYG9yZy10YWJsZS1kZWxl dGUtY29sdW1uJywgZGVwZW5kaW5nIG9uIGNvbnRleHQuICBTZWUgdGhlDQppbmRpdmlkdWFsIGNv bW1hbmRzIGZvciBtb3JlIGluZm9ybWF0aW9uLiINCiAgKGludGVyYWN0aXZlKQ0KICAoY29uZA0K ICAgKChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2VzcyAnb3JnLXNoaWZ0bWV0YWxlZnQt aG9vaykpDQogICAoKG9yZy1hdC10YWJsZS1wKSAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctdGFi bGUtZGVsZXRlLWNvbHVtbikpDQogICAoKG9yZy1hdC1oZWFkaW5nLXApIChjYWxsLWludGVyYWN0 aXZlbHkgJ29yZy1wcm9tb3RlLXN1YnRyZWUpKQ0KICAgKChpZiAobm90IChvcmctcmVnaW9uLWFj dGl2ZS1wKSkgKG9yZy1hdC1pdGVtLXApDQogICAgICAoc2F2ZS1leGN1cnNpb24gKGdvdG8tY2hh ciAocmVnaW9uLWJlZ2lubmluZykpDQoJCSAgICAgIChvcmctYXQtaXRlbS1wKSkpDQogICAgKGNh bGwtaW50ZXJhY3RpdmVseSAnb3JnLW91dGRlbnQtaXRlbS10cmVlKSkNCiAgICh0IChvcmctbW9k aWZpZXItY3Vyc29yLWVycm9yKSkpKQ0KDQooZGVmdW4gb3JnLXNoaWZ0bWV0YXJpZ2h0ICgpDQog ICJEZW1vdGUgc3VidHJlZSBvciBpbnNlcnQgdGFibGUgY29sdW1uLg0KQ2FsbHMgYG9yZy1kZW1v dGUtc3VidHJlZScsIGBvcmctaW5kZW50LWl0ZW0tdHJlZScsIG9yDQpgb3JnLXRhYmxlLWluc2Vy dC1jb2x1bW4nLCBkZXBlbmRpbmcgb24gY29udGV4dC4gIFNlZSB0aGUNCmluZGl2aWR1YWwgY29t bWFuZHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uIg0KICAoaW50ZXJhY3RpdmUpDQogIChjb25kDQog ICAoKHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1zdWNjZXNzICdvcmctc2hpZnRtZXRhcmlnaHQt aG9vaykpDQogICAoKG9yZy1hdC10YWJsZS1wKSAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctdGFi bGUtaW5zZXJ0LWNvbHVtbikpDQogICAoKG9yZy1hdC1oZWFkaW5nLXApIChjYWxsLWludGVyYWN0 aXZlbHkgJ29yZy1kZW1vdGUtc3VidHJlZSkpDQogICAoKGlmIChub3QgKG9yZy1yZWdpb24tYWN0 aXZlLXApKSAob3JnLWF0LWl0ZW0tcCkNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbiAoZ290by1jaGFy IChyZWdpb24tYmVnaW5uaW5nKSkNCgkJICAgICAgKG9yZy1hdC1pdGVtLXApKSkNCiAgICAoY2Fs bC1pbnRlcmFjdGl2ZWx5ICdvcmctaW5kZW50LWl0ZW0tdHJlZSkpDQogICAodCAob3JnLW1vZGlm aWVyLWN1cnNvci1lcnJvcikpKSkNCg0KKGRlZnVuIG9yZy1zaGlmdG1ldGF1cCAoJm9wdGlvbmFs IGFyZykNCiAgIk1vdmUgc3VidHJlZSB1cCBvciBraWxsIHRhYmxlIHJvdy4NCkNhbGxzIGBvcmct bW92ZS1zdWJ0cmVlLXVwJyBvciBgb3JnLXRhYmxlLWtpbGwtcm93JyBvcg0KYG9yZy1tb3ZlLWl0 ZW0tdXAnIG9yIGBvcmctdGltZXN0YW1wLXVwJywgZGVwZW5kaW5nIG9uIGNvbnRleHQuDQpTZWUg dGhlIGluZGl2aWR1YWwgY29tbWFuZHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uIg0KICAoaW50ZXJh Y3RpdmUgIlAiKQ0KICAoY29uZA0KICAgKChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2Vz cyAnb3JnLXNoaWZ0bWV0YXVwLWhvb2spKQ0KICAgKChvcmctYXQtdGFibGUtcCkgKGNhbGwtaW50 ZXJhY3RpdmVseSAnb3JnLXRhYmxlLWtpbGwtcm93KSkNCiAgICgob3JnLWF0LWhlYWRpbmctcCkg KGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLW1vdmUtc3VidHJlZS11cCkpDQogICAoKG9yZy1hdC1p dGVtLXApIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1tb3ZlLWl0ZW0tdXApKQ0KICAgKChvcmct YXQtY2xvY2stbG9nLXApIChsZXQgKChvcmctY2xvY2stYWRqdXN0LWNsb3Nlc3QgdCkpDQoJCQkg ICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctdGltZXN0YW1wLXVwKSkpDQogICAodCAoY2FsbC1p bnRlcmFjdGl2ZWx5ICdvcmctZHJhZy1saW5lLWJhY2t3YXJkKSkpKQ0KDQooZGVmdW4gb3JnLXNo aWZ0bWV0YWRvd24gKCZvcHRpb25hbCBhcmcpDQogICJNb3ZlIHN1YnRyZWUgZG93biBvciBpbnNl cnQgdGFibGUgcm93Lg0KQ2FsbHMgYG9yZy1tb3ZlLXN1YnRyZWUtZG93bicgb3IgYG9yZy10YWJs ZS1pbnNlcnQtcm93JyBvcg0KYG9yZy1tb3ZlLWl0ZW0tZG93bicgb3IgYG9yZy10aW1lc3RhbXAt dXAnLCBkZXBlbmRpbmcgb24gY29udGV4dC4NClNlZSB0aGUgaW5kaXZpZHVhbCBjb21tYW5kcyBm b3IgbW9yZSBpbmZvcm1hdGlvbi4iDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChjb25kDQogICAo KHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1zdWNjZXNzICdvcmctc2hpZnRtZXRhZG93bi1ob29r KSkNCiAgICgob3JnLWF0LXRhYmxlLXApIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy10YWJsZS1p bnNlcnQtcm93KSkNCiAgICgob3JnLWF0LWhlYWRpbmctcCkgKGNhbGwtaW50ZXJhY3RpdmVseSAn b3JnLW1vdmUtc3VidHJlZS1kb3duKSkNCiAgICgob3JnLWF0LWl0ZW0tcCkgKGNhbGwtaW50ZXJh Y3RpdmVseSAnb3JnLW1vdmUtaXRlbS1kb3duKSkNCiAgICgob3JnLWF0LWNsb2NrLWxvZy1wKSAo bGV0ICgob3JnLWNsb2NrLWFkanVzdC1jbG9zZXN0IHQpKQ0KCQkJICAgKGNhbGwtaW50ZXJhY3Rp dmVseSAnb3JnLXRpbWVzdGFtcC1kb3duKSkpDQogICAodCAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdv cmctZHJhZy1saW5lLWZvcndhcmQpKSkpDQoNCihkZWZzdWJzdCBvcmctaGlkZGVuLXRyZWUtZXJy b3IgKCkNCiAgKHVzZXItZXJyb3INCiAgICJIaWRkZW4gc3VidHJlZSwgb3BlbiB3aXRoIFRBQiBv ciB1c2Ugc3VidHJlZSBjb21tYW5kIE0tUy08bGVmdD4vPHJpZ2h0PiIpKQ0KDQooZGVmdW4gb3Jn LW1ldGFsZWZ0ICgmb3B0aW9uYWwgYXJnKQ0KICAiUHJvbW90ZSBoZWFkaW5nIG9yIG1vdmUgdGFi bGUgY29sdW1uIHRvIGxlZnQuDQpDYWxscyBgb3JnLWRvLXByb21vdGUnIG9yIGBvcmctdGFibGUt bW92ZS1jb2x1bW4nLCBkZXBlbmRpbmcgb24gY29udGV4dC4NCldpdGggbm8gc3BlY2lmaWMgY29u dGV4dCwgY2FsbHMgdGhlIEVtYWNzIGRlZmF1bHQgYGJhY2t3YXJkLXdvcmQnLg0KU2VlIHRoZSBp bmRpdmlkdWFsIGNvbW1hbmRzIGZvciBtb3JlIGluZm9ybWF0aW9uLiINCiAgKGludGVyYWN0aXZl ICJQIikNCiAgKGNvbmQNCiAgICgocnVuLWhvb2std2l0aC1hcmdzLXVudGlsLXN1Y2Nlc3MgJ29y Zy1tZXRhbGVmdC1ob29rKSkNCiAgICgob3JnLWF0LXRhYmxlLXApIChvcmctY2FsbC13aXRoLWFy ZyAnb3JnLXRhYmxlLW1vdmUtY29sdW1uICdsZWZ0KSkNCiAgICgob3JnLXdpdGgtbGltaXRlZC1s ZXZlbHMNCiAgICAgKG9yIChvcmctYXQtaGVhZGluZy1wKQ0KCSAoYW5kIChvcmctcmVnaW9uLWFj dGl2ZS1wKQ0KCSAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCQkoZ290by1jaGFyIChyZWdpb24tYmVn aW5uaW5nKSkNCgkJKG9yZy1hdC1oZWFkaW5nLXApKSkpKQ0KICAgICh3aGVuIChvcmctY2hlY2st Zm9yLWhpZGRlbiAnaGVhZGxpbmVzKSAob3JnLWhpZGRlbi10cmVlLWVycm9yKSkNCiAgICAoY2Fs bC1pbnRlcmFjdGl2ZWx5ICdvcmctZG8tcHJvbW90ZSkpDQogICA7OyBBdCBhbiBpbmxpbmUgdGFz ay4NCiAgICgob3JnLWF0LWhlYWRpbmctcCkNCiAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmct aW5saW5ldGFzay1wcm9tb3RlKSkNCiAgICgob3IgKG9yZy1hdC1pdGVtLXApDQoJKGFuZCAob3Jn LXJlZ2lvbi1hY3RpdmUtcCkNCgkgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCSAgICAgICAoZ290by1j aGFyIChyZWdpb24tYmVnaW5uaW5nKSkNCgkgICAgICAgKG9yZy1hdC1pdGVtLXApKSkpDQogICAg KHdoZW4gKG9yZy1jaGVjay1mb3ItaGlkZGVuICdpdGVtcykgKG9yZy1oaWRkZW4tdHJlZS1lcnJv cikpDQogICAgKGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLW91dGRlbnQtaXRlbSkpDQogICAodCAo Y2FsbC1pbnRlcmFjdGl2ZWx5ICdiYWNrd2FyZC13b3JkKSkpKQ0KDQooZGVmdW4gb3JnLW1ldGFy aWdodCAoJm9wdGlvbmFsIGFyZykNCiAgIkRlbW90ZSBhIHN1YnRyZWUsIGEgbGlzdCBpdGVtIG9y IG1vdmUgdGFibGUgY29sdW1uIHRvIHJpZ2h0Lg0KSW4gZnJvbnQgb2YgYSBkcmF3ZXIgb3IgYSBi bG9jayBrZXl3b3JkLCBpbmRlbnQgaXQgY29ycmVjdGx5Lg0KV2l0aCBubyBzcGVjaWZpYyBjb250 ZXh0LCBjYWxscyB0aGUgRW1hY3MgZGVmYXVsdCBgZm9yd2FyZC13b3JkJy4NClNlZSB0aGUgaW5k aXZpZHVhbCBjb21tYW5kcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iDQogIChpbnRlcmFjdGl2ZSAi UCIpDQogIChjb25kDQogICAoKHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1zdWNjZXNzICdvcmct bWV0YXJpZ2h0LWhvb2spKQ0KICAgKChvcmctYXQtdGFibGUtcCkgKGNhbGwtaW50ZXJhY3RpdmVs eSAnb3JnLXRhYmxlLW1vdmUtY29sdW1uKSkNCiAgICgob3JnLWF0LWRyYXdlci1wKSAoY2FsbC1p bnRlcmFjdGl2ZWx5ICdvcmctaW5kZW50LWRyYXdlcikpDQogICAoKG9yZy1hdC1ibG9jay1wKSAo Y2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctaW5kZW50LWJsb2NrKSkNCiAgICgob3JnLXdpdGgtbGlt aXRlZC1sZXZlbHMNCiAgICAgKG9yIChvcmctYXQtaGVhZGluZy1wKQ0KCSAoYW5kIChvcmctcmVn aW9uLWFjdGl2ZS1wKQ0KCSAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCQkoZ290by1jaGFyIChyZWdp b24tYmVnaW5uaW5nKSkNCgkJKG9yZy1hdC1oZWFkaW5nLXApKSkpKQ0KICAgICh3aGVuIChvcmct Y2hlY2stZm9yLWhpZGRlbiAnaGVhZGxpbmVzKSAob3JnLWhpZGRlbi10cmVlLWVycm9yKSkNCiAg ICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctZG8tZGVtb3RlKSkNCiAgIDs7IEF0IGFuIGlubGlu ZSB0YXNrLg0KICAgKChvcmctYXQtaGVhZGluZy1wKQ0KICAgIChjYWxsLWludGVyYWN0aXZlbHkg J29yZy1pbmxpbmV0YXNrLWRlbW90ZSkpDQogICAoKG9yIChvcmctYXQtaXRlbS1wKQ0KCShhbmQg KG9yZy1yZWdpb24tYWN0aXZlLXApDQoJICAgICAoc2F2ZS1leGN1cnNpb24NCgkgICAgICAgKGdv dG8tY2hhciAocmVnaW9uLWJlZ2lubmluZykpDQoJICAgICAgIChvcmctYXQtaXRlbS1wKSkpKQ0K ICAgICh3aGVuIChvcmctY2hlY2stZm9yLWhpZGRlbiAnaXRlbXMpIChvcmctaGlkZGVuLXRyZWUt ZXJyb3IpKQ0KICAgIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1pbmRlbnQtaXRlbSkpDQogICAo dCAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdmb3J3YXJkLXdvcmQpKSkpDQoNCihkZWZ1biBvcmctY2hl Y2stZm9yLWhpZGRlbiAod2hhdCkNCiAgIkNoZWNrIGlmIHRoZXJlIGFyZSBoaWRkZW4gaGVhZGxp bmVzL2l0ZW1zIGluIHRoZSBjdXJyZW50IHZpc3VhbCBsaW5lLg0KV0hBVCBjYW4gYmUgZWl0aGVy IGBoZWFkbGluZXMnIG9yIGBpdGVtcycuICBJZiB0aGUgY3VycmVudCBsaW5lIGlzDQphbiBvdXRs aW5lIG9yIGl0ZW0gaGVhZGluZyBhbmQgaXQgaGFzIGEgZm9sZGVkIHN1YnRyZWUgYmVsb3cgaXQs DQp0aGlzIGZ1bmN0aW9uIHJldHVybnMgdCwgbmlsIG90aGVyd2lzZS4iDQogIChsZXQgKChyZSAo Y29uZA0KCSAgICAgKChlcSB3aGF0ICdoZWFkbGluZXMpIG9yZy1vdXRsaW5lLXJlZ2V4cC1ib2wp DQoJICAgICAoKGVxIHdoYXQgJ2l0ZW1zKSAob3JnLWl0ZW0tYmVnaW5uaW5nLXJlKSkNCgkgICAg ICh0IChlcnJvciAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiIpKSkpDQoJYmVnIGVuZCkNCiAgICAo c2F2ZS1leGN1cnNpb24NCiAgICAgIChjYXRjaCAnZXhpdA0KCSh1bmxlc3MgKG9yZy1yZWdpb24t YWN0aXZlLXApDQoJICAoc2V0cSBiZWcgKHBvaW50LWF0LWJvbCkpDQoJICAoYmVnaW5uaW5nLW9m LWxpbmUgMikNCgkgICh3aGlsZSAoYW5kIChub3QgKGVvYnApKSA7OyB0aGlzIGlzIGxpa2UgYG5l eHQtbGluZScNCgkJICAgICAgKGdldC1jaGFyLXByb3BlcnR5ICgxLSAocG9pbnQpKSAnaW52aXNp YmxlKSkNCgkgICAgKGJlZ2lubmluZy1vZi1saW5lIDIpKQ0KCSAgKHNldHEgZW5kIChwb2ludCkp DQoJICAoZ290by1jaGFyIGJlZykNCgkgIChnb3RvLWNoYXIgKHBvaW50LWF0LWVvbCkpDQoJICAo c2V0cSBlbmQgKG1heCBlbmQgKHBvaW50KSkpDQoJICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJk IHJlIGVuZCB0KQ0KCSAgICAoaWYgKGdldC1jaGFyLXByb3BlcnR5IChtYXRjaC1iZWdpbm5pbmcg MCkgJ2ludmlzaWJsZSkNCgkJKHRocm93ICdleGl0IHQpKSkpDQoJbmlsKSkpKQ0KDQooZGVmdW4g b3JnLW1ldGF1cCAoJm9wdGlvbmFsIGFyZykNCiAgIk1vdmUgc3VidHJlZSB1cCBvciBtb3ZlIHRh YmxlIHJvdyB1cC4NCkNhbGxzIGBvcmctbW92ZS1zdWJ0cmVlLXVwJyBvciBgb3JnLXRhYmxlLW1v dmUtcm93JyBvcg0KYG9yZy1tb3ZlLWl0ZW0tdXAnLCBkZXBlbmRpbmcgb24gY29udGV4dC4gIFNl ZSB0aGUgaW5kaXZpZHVhbCBjb21tYW5kcw0KZm9yIG1vcmUgaW5mb3JtYXRpb24uIg0KICAoaW50 ZXJhY3RpdmUgIlAiKQ0KICAoY29uZA0KICAgKChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3Vj Y2VzcyAnb3JnLW1ldGF1cC1ob29rKSkNCiAgICgob3JnLXJlZ2lvbi1hY3RpdmUtcCkNCiAgICAo bGV0KiAoKGEgKG1pbiAocmVnaW9uLWJlZ2lubmluZykgKHJlZ2lvbi1lbmQpKSkNCgkgICAoYiAo MS0gKG1heCAocmVnaW9uLWJlZ2lubmluZykgKHJlZ2lvbi1lbmQpKSkpDQoJICAgKGMgKHNhdmUt ZXhjdXJzaW9uIChnb3RvLWNoYXIgYSkNCgkJCSAgICAgIChtb3ZlLWJlZ2lubmluZy1vZi1saW5l IDApKSkNCgkgICAoZCAoc2F2ZS1leGN1cnNpb24gKGdvdG8tY2hhciBhKQ0KCQkJICAgICAgKG1v dmUtZW5kLW9mLWxpbmUgMCkgKHBvaW50KSkpKQ0KICAgICAgKHRyYW5zcG9zZS1yZWdpb25zIGEg YiBjIGQpDQogICAgICAoZ290by1jaGFyIGMpKSkNCiAgICgob3JnLWF0LXRhYmxlLXApIChvcmct Y2FsbC13aXRoLWFyZyAnb3JnLXRhYmxlLW1vdmUtcm93ICd1cCkpDQogICAoKG9yZy1hdC1oZWFk aW5nLXApIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1tb3ZlLXN1YnRyZWUtdXApKQ0KICAgKChv cmctYXQtaXRlbS1wKSAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctbW92ZS1pdGVtLXVwKSkNCiAg ICh0IChvcmctZHJhZy1lbGVtZW50LWJhY2t3YXJkKSkpKQ0KDQooZGVmdW4gb3JnLW1ldGFkb3du ICgmb3B0aW9uYWwgYXJnKQ0KICAiTW92ZSBzdWJ0cmVlIGRvd24gb3IgbW92ZSB0YWJsZSByb3cg ZG93bi4NCkNhbGxzIGBvcmctbW92ZS1zdWJ0cmVlLWRvd24nIG9yIGBvcmctdGFibGUtbW92ZS1y b3cnIG9yDQpgb3JnLW1vdmUtaXRlbS1kb3duJywgZGVwZW5kaW5nIG9uIGNvbnRleHQuICBTZWUg dGhlIGluZGl2aWR1YWwNCmNvbW1hbmRzIGZvciBtb3JlIGluZm9ybWF0aW9uLiINCiAgKGludGVy YWN0aXZlICJQIikNCiAgKGNvbmQNCiAgICgocnVuLWhvb2std2l0aC1hcmdzLXVudGlsLXN1Y2Nl c3MgJ29yZy1tZXRhZG93bi1ob29rKSkNCiAgICgob3JnLXJlZ2lvbi1hY3RpdmUtcCkNCiAgICAo bGV0KiAoKGEgKG1pbiAocmVnaW9uLWJlZ2lubmluZykgKHJlZ2lvbi1lbmQpKSkNCgkgICAoYiAo bWF4IChyZWdpb24tYmVnaW5uaW5nKSAocmVnaW9uLWVuZCkpKQ0KCSAgIChjIChzYXZlLWV4Y3Vy c2lvbiAoZ290by1jaGFyIGIpDQoJCQkgICAgICAobW92ZS1iZWdpbm5pbmctb2YtbGluZSAxKSkp DQoJICAgKGQgKHNhdmUtZXhjdXJzaW9uIChnb3RvLWNoYXIgYikNCgkJCSAgICAgIChtb3ZlLWVu ZC1vZi1saW5lIDEpICgxKyAocG9pbnQpKSkpKQ0KICAgICAgKHRyYW5zcG9zZS1yZWdpb25zIGEg YiBjIGQpDQogICAgICAoZ290by1jaGFyIGQpKSkNCiAgICgob3JnLWF0LXRhYmxlLXApIChjYWxs LWludGVyYWN0aXZlbHkgJ29yZy10YWJsZS1tb3ZlLXJvdykpDQogICAoKG9yZy1hdC1oZWFkaW5n LXApIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1tb3ZlLXN1YnRyZWUtZG93bikpDQogICAoKG9y Zy1hdC1pdGVtLXApIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1tb3ZlLWl0ZW0tZG93bikpDQog ICAodCAob3JnLWRyYWctZWxlbWVudC1mb3J3YXJkKSkpKQ0KDQooZGVmdW4gb3JnLXNoaWZ0dXAg KCZvcHRpb25hbCBhcmcpDQogICJJbmNyZWFzZSBpdGVtIGluIHRpbWVzdGFtcCBvciBpbmNyZWFz ZSBwcmlvcml0eSBvZiBjdXJyZW50IGhlYWRsaW5lLg0KQ2FsbHMgYG9yZy10aW1lc3RhbXAtdXAn IG9yIGBvcmctcHJpb3JpdHktdXAnLCBvciBgb3JnLXByZXZpb3VzLWl0ZW0nLA0KZGVwZW5kaW5n IG9uIGNvbnRleHQuICBTZWUgdGhlIGluZGl2aWR1YWwgY29tbWFuZHMgZm9yIG1vcmUgaW5mb3Jt YXRpb24uIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoY29uZA0KICAgKChydW4taG9vay13aXRo LWFyZ3MtdW50aWwtc3VjY2VzcyAnb3JnLXNoaWZ0dXAtaG9vaykpDQogICAoKGFuZCBvcmctc3Vw cG9ydC1zaGlmdC1zZWxlY3QgKG9yZy1yZWdpb24tYWN0aXZlLXApKQ0KICAgIChvcmctY2FsbC1m b3Itc2hpZnQtc2VsZWN0ICdwcmV2aW91cy1saW5lKSkNCiAgICgob3JnLWF0LXRpbWVzdGFtcC1w IHQpDQogICAgKGNhbGwtaW50ZXJhY3RpdmVseSAoaWYgb3JnLWVkaXQtdGltZXN0YW1wLWRvd24t bWVhbnMtbGF0ZXINCgkJCSAgICAnb3JnLXRpbWVzdGFtcC1kb3duICdvcmctdGltZXN0YW1wLXVw KSkpDQogICAoKGFuZCAobm90IChlcSBvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QgJ2Fsd2F5cykp DQoJIG9yZy1lbmFibGUtcHJpb3JpdHktY29tbWFuZHMNCgkgKG9yZy1hdC1oZWFkaW5nLXApKQ0K ICAgIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1wcmlvcml0eS11cCkpDQogICAoKGFuZCAobm90 IG9yZy1zdXBwb3J0LXNoaWZ0LXNlbGVjdCkgKG9yZy1hdC1pdGVtLXApKQ0KICAgIChjYWxsLWlu dGVyYWN0aXZlbHkgJ29yZy1wcmV2aW91cy1pdGVtKSkNCiAgICgob3JnLWNsb2NrdGFibGUtdHJ5 LXNoaWZ0ICd1cCBhcmcpKQ0KICAgKChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2VzcyAn b3JnLXNoaWZ0dXAtZmluYWwtaG9vaykpDQogICAob3JnLXN1cHBvcnQtc2hpZnQtc2VsZWN0DQog ICAgKG9yZy1jYWxsLWZvci1zaGlmdC1zZWxlY3QgJ3ByZXZpb3VzLWxpbmUpKQ0KICAgKHQgKG9y Zy1zaGlmdHNlbGVjdC1lcnJvcikpKSkNCg0KKGRlZnVuIG9yZy1zaGlmdGRvd24gKCZvcHRpb25h bCBhcmcpDQogICJEZWNyZWFzZSBpdGVtIGluIHRpbWVzdGFtcCBvciBkZWNyZWFzZSBwcmlvcml0 eSBvZiBjdXJyZW50IGhlYWRsaW5lLg0KQ2FsbHMgYG9yZy10aW1lc3RhbXAtZG93bicgb3IgYG9y Zy1wcmlvcml0eS1kb3duJywgb3IgYG9yZy1uZXh0LWl0ZW0nDQpkZXBlbmRpbmcgb24gY29udGV4 dC4gIFNlZSB0aGUgaW5kaXZpZHVhbCBjb21tYW5kcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iDQog IChpbnRlcmFjdGl2ZSAiUCIpDQogIChjb25kDQogICAoKHJ1bi1ob29rLXdpdGgtYXJncy11bnRp bC1zdWNjZXNzICdvcmctc2hpZnRkb3duLWhvb2spKQ0KICAgKChhbmQgb3JnLXN1cHBvcnQtc2hp ZnQtc2VsZWN0IChvcmctcmVnaW9uLWFjdGl2ZS1wKSkNCiAgICAob3JnLWNhbGwtZm9yLXNoaWZ0 LXNlbGVjdCAnbmV4dC1saW5lKSkNCiAgICgob3JnLWF0LXRpbWVzdGFtcC1wIHQpDQogICAgKGNh bGwtaW50ZXJhY3RpdmVseSAoaWYgb3JnLWVkaXQtdGltZXN0YW1wLWRvd24tbWVhbnMtbGF0ZXIN CgkJCSAgICAnb3JnLXRpbWVzdGFtcC11cCAnb3JnLXRpbWVzdGFtcC1kb3duKSkpDQogICAoKGFu ZCAobm90IChlcSBvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QgJ2Fsd2F5cykpDQoJIG9yZy1lbmFi bGUtcHJpb3JpdHktY29tbWFuZHMNCgkgKG9yZy1hdC1oZWFkaW5nLXApKQ0KICAgIChjYWxsLWlu dGVyYWN0aXZlbHkgJ29yZy1wcmlvcml0eS1kb3duKSkNCiAgICgoYW5kIChub3Qgb3JnLXN1cHBv cnQtc2hpZnQtc2VsZWN0KSAob3JnLWF0LWl0ZW0tcCkpDQogICAgKGNhbGwtaW50ZXJhY3RpdmVs eSAnb3JnLW5leHQtaXRlbSkpDQogICAoKG9yZy1jbG9ja3RhYmxlLXRyeS1zaGlmdCAnZG93biBh cmcpKQ0KICAgKChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2VzcyAnb3JnLXNoaWZ0ZG93 bi1maW5hbC1ob29rKSkNCiAgIChvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QNCiAgICAob3JnLWNh bGwtZm9yLXNoaWZ0LXNlbGVjdCAnbmV4dC1saW5lKSkNCiAgICh0IChvcmctc2hpZnRzZWxlY3Qt ZXJyb3IpKSkpDQoNCihkZWZ1biBvcmctc2hpZnRyaWdodCAoJm9wdGlvbmFsIGFyZykNCiAgIkN5 Y2xlIHRoZSB0aGluZyBhdCBwb2ludCBvciBpbiB0aGUgY3VycmVudCBsaW5lLCBkZXBlbmRpbmcg b24gY29udGV4dC4NCkRlcGVuZGluZyBvbiBjb250ZXh0LCB0aGlzIGRvZXMgb25lIG9mIHRoZSBm b2xsb3dpbmc6DQoNCi0gc3dpdGNoIGEgdGltZXN0YW1wIGF0IHBvaW50IG9uZSBkYXkgaW50byB0 aGUgZnV0dXJlDQotIG9uIGEgaGVhZGxpbmUsIHN3aXRjaCB0byB0aGUgbmV4dCBUT0RPIGtleXdv cmQuDQotIG9uIGFuIGl0ZW0sIHN3aXRjaCBlbnRpcmUgbGlzdCB0byB0aGUgbmV4dCBidWxsZXQg dHlwZQ0KLSBvbiBhIHByb3BlcnR5IGxpbmUsIHN3aXRjaCB0byB0aGUgbmV4dCBhbGxvd2VkIHZh bHVlDQotIG9uIGEgY2xvY2t0YWJsZSBkZWZpbml0aW9uIGxpbmUsIG1vdmUgdGltZSBibG9jayBp bnRvIHRoZSBmdXR1cmUiDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChjb25kDQogICAoKHJ1bi1o b29rLXdpdGgtYXJncy11bnRpbC1zdWNjZXNzICdvcmctc2hpZnRyaWdodC1ob29rKSkNCiAgICgo YW5kIG9yZy1zdXBwb3J0LXNoaWZ0LXNlbGVjdCAob3JnLXJlZ2lvbi1hY3RpdmUtcCkpDQogICAg KG9yZy1jYWxsLWZvci1zaGlmdC1zZWxlY3QgJ2ZvcndhcmQtY2hhcikpDQogICAoKG9yZy1hdC10 aW1lc3RhbXAtcCB0KSAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctdGltZXN0YW1wLXVwLWRheSkp DQogICAoKGFuZCAobm90IChlcSBvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QgJ2Fsd2F5cykpDQoJ IChvcmctYXQtaGVhZGluZy1wKSkNCiAgICAobGV0ICgob3JnLWluaGliaXQtbG9nZ2luZw0KCSAg IChub3Qgb3JnLXRyZWF0LVMtY3Vyc29yLXRvZG8tc2VsZWN0aW9uLWFzLXN0YXRlLWNoYW5nZSkp DQoJICAob3JnLWluaGliaXQtYmxvY2tpbmcNCgkgICAobm90IG9yZy10cmVhdC1TLWN1cnNvci10 b2RvLXNlbGVjdGlvbi1hcy1zdGF0ZS1jaGFuZ2UpKSkNCiAgICAgIChvcmctY2FsbC13aXRoLWFy ZyAnb3JnLXRvZG8gJ3JpZ2h0KSkpDQogICAoKG9yIChhbmQgb3JnLXN1cHBvcnQtc2hpZnQtc2Vs ZWN0DQoJICAgICAobm90IChlcSBvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QgJ2Fsd2F5cykpDQoJ ICAgICAob3JnLWF0LWl0ZW0tYnVsbGV0LXApKQ0KCShhbmQgKG5vdCBvcmctc3VwcG9ydC1zaGlm dC1zZWxlY3QpIChvcmctYXQtaXRlbS1wKSkpDQogICAgKG9yZy1jYWxsLXdpdGgtYXJnICdvcmct Y3ljbGUtbGlzdC1idWxsZXQgbmlsKSkNCiAgICgoYW5kIChub3QgKGVxIG9yZy1zdXBwb3J0LXNo aWZ0LXNlbGVjdCAnYWx3YXlzKSkNCgkgKG9yZy1hdC1wcm9wZXJ0eS1wKSkNCiAgICAoY2FsbC1p bnRlcmFjdGl2ZWx5ICdvcmctcHJvcGVydHktbmV4dC1hbGxvd2VkLXZhbHVlKSkNCiAgICgob3Jn LWNsb2NrdGFibGUtdHJ5LXNoaWZ0ICdyaWdodCBhcmcpKQ0KICAgKChydW4taG9vay13aXRoLWFy Z3MtdW50aWwtc3VjY2VzcyAnb3JnLXNoaWZ0cmlnaHQtZmluYWwtaG9vaykpDQogICAob3JnLXN1 cHBvcnQtc2hpZnQtc2VsZWN0DQogICAgKG9yZy1jYWxsLWZvci1zaGlmdC1zZWxlY3QgJ2Zvcndh cmQtY2hhcikpDQogICAodCAob3JnLXNoaWZ0c2VsZWN0LWVycm9yKSkpKQ0KDQooZGVmdW4gb3Jn LXNoaWZ0bGVmdCAoJm9wdGlvbmFsIGFyZykNCiAgIkN5Y2xlIHRoZSB0aGluZyBhdCBwb2ludCBv ciBpbiB0aGUgY3VycmVudCBsaW5lLCBkZXBlbmRpbmcgb24gY29udGV4dC4NCkRlcGVuZGluZyBv biBjb250ZXh0LCB0aGlzIGRvZXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6DQoNCi0gc3dpdGNoIGEg dGltZXN0YW1wIGF0IHBvaW50IG9uZSBkYXkgaW50byB0aGUgcGFzdA0KLSBvbiBhIGhlYWRsaW5l LCBzd2l0Y2ggdG8gdGhlIHByZXZpb3VzIFRPRE8ga2V5d29yZC4NCi0gb24gYW4gaXRlbSwgc3dp dGNoIGVudGlyZSBsaXN0IHRvIHRoZSBwcmV2aW91cyBidWxsZXQgdHlwZQ0KLSBvbiBhIHByb3Bl cnR5IGxpbmUsIHN3aXRjaCB0byB0aGUgcHJldmlvdXMgYWxsb3dlZCB2YWx1ZQ0KLSBvbiBhIGNs b2NrdGFibGUgZGVmaW5pdGlvbiBsaW5lLCBtb3ZlIHRpbWUgYmxvY2sgaW50byB0aGUgcGFzdCIN CiAgKGludGVyYWN0aXZlICJQIikNCiAgKGNvbmQNCiAgICgocnVuLWhvb2std2l0aC1hcmdzLXVu dGlsLXN1Y2Nlc3MgJ29yZy1zaGlmdGxlZnQtaG9vaykpDQogICAoKGFuZCBvcmctc3VwcG9ydC1z aGlmdC1zZWxlY3QgKG9yZy1yZWdpb24tYWN0aXZlLXApKQ0KICAgIChvcmctY2FsbC1mb3Itc2hp ZnQtc2VsZWN0ICdiYWNrd2FyZC1jaGFyKSkNCiAgICgob3JnLWF0LXRpbWVzdGFtcC1wIHQpIChj YWxsLWludGVyYWN0aXZlbHkgJ29yZy10aW1lc3RhbXAtZG93bi1kYXkpKQ0KICAgKChhbmQgKG5v dCAoZXEgb3JnLXN1cHBvcnQtc2hpZnQtc2VsZWN0ICdhbHdheXMpKQ0KCSAob3JnLWF0LWhlYWRp bmctcCkpDQogICAgKGxldCAoKG9yZy1pbmhpYml0LWxvZ2dpbmcNCgkgICAobm90IG9yZy10cmVh dC1TLWN1cnNvci10b2RvLXNlbGVjdGlvbi1hcy1zdGF0ZS1jaGFuZ2UpKQ0KCSAgKG9yZy1pbmhp Yml0LWJsb2NraW5nDQoJICAgKG5vdCBvcmctdHJlYXQtUy1jdXJzb3ItdG9kby1zZWxlY3Rpb24t YXMtc3RhdGUtY2hhbmdlKSkpDQogICAgICAob3JnLWNhbGwtd2l0aC1hcmcgJ29yZy10b2RvICds ZWZ0KSkpDQogICAoKG9yIChhbmQgb3JnLXN1cHBvcnQtc2hpZnQtc2VsZWN0DQoJICAgICAobm90 IChlcSBvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QgJ2Fsd2F5cykpDQoJICAgICAob3JnLWF0LWl0 ZW0tYnVsbGV0LXApKQ0KCShhbmQgKG5vdCBvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QpIChvcmct YXQtaXRlbS1wKSkpDQogICAgKG9yZy1jYWxsLXdpdGgtYXJnICdvcmctY3ljbGUtbGlzdC1idWxs ZXQgJ3ByZXZpb3VzKSkNCiAgICgoYW5kIChub3QgKGVxIG9yZy1zdXBwb3J0LXNoaWZ0LXNlbGVj dCAnYWx3YXlzKSkNCgkgKG9yZy1hdC1wcm9wZXJ0eS1wKSkNCiAgICAoY2FsbC1pbnRlcmFjdGl2 ZWx5ICdvcmctcHJvcGVydHktcHJldmlvdXMtYWxsb3dlZC12YWx1ZSkpDQogICAoKG9yZy1jbG9j a3RhYmxlLXRyeS1zaGlmdCAnbGVmdCBhcmcpKQ0KICAgKChydW4taG9vay13aXRoLWFyZ3MtdW50 aWwtc3VjY2VzcyAnb3JnLXNoaWZ0bGVmdC1maW5hbC1ob29rKSkNCiAgIChvcmctc3VwcG9ydC1z aGlmdC1zZWxlY3QNCiAgICAob3JnLWNhbGwtZm9yLXNoaWZ0LXNlbGVjdCAnYmFja3dhcmQtY2hh cikpDQogICAodCAob3JnLXNoaWZ0c2VsZWN0LWVycm9yKSkpKQ0KDQooZGVmdW4gb3JnLXNoaWZ0 Y29udHJvbHJpZ2h0ICgpDQogICJTd2l0Y2ggdG8gbmV4dCBUT0RPIHNldC4iDQogIChpbnRlcmFj dGl2ZSkNCiAgKGNvbmQNCiAgICgoYW5kIG9yZy1zdXBwb3J0LXNoaWZ0LXNlbGVjdCAob3JnLXJl Z2lvbi1hY3RpdmUtcCkpDQogICAgKG9yZy1jYWxsLWZvci1zaGlmdC1zZWxlY3QgJ2ZvcndhcmQt d29yZCkpDQogICAoKGFuZCAobm90IChlcSBvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QgJ2Fsd2F5 cykpDQoJIChvcmctYXQtaGVhZGluZy1wKSkNCiAgICAob3JnLWNhbGwtd2l0aC1hcmcgJ29yZy10 b2RvICduZXh0c2V0KSkNCiAgIChvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QNCiAgICAob3JnLWNh bGwtZm9yLXNoaWZ0LXNlbGVjdCAnZm9yd2FyZC13b3JkKSkNCiAgICh0IChvcmctc2hpZnRzZWxl Y3QtZXJyb3IpKSkpDQoNCihkZWZ1biBvcmctc2hpZnRjb250cm9sbGVmdCAoKQ0KICAiU3dpdGNo IHRvIHByZXZpb3VzIFRPRE8gc2V0LiINCiAgKGludGVyYWN0aXZlKQ0KICAoY29uZA0KICAgKChh bmQgb3JnLXN1cHBvcnQtc2hpZnQtc2VsZWN0IChvcmctcmVnaW9uLWFjdGl2ZS1wKSkNCiAgICAo b3JnLWNhbGwtZm9yLXNoaWZ0LXNlbGVjdCAnYmFja3dhcmQtd29yZCkpDQogICAoKGFuZCAobm90 IChlcSBvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QgJ2Fsd2F5cykpDQoJIChvcmctYXQtaGVhZGlu Zy1wKSkNCiAgICAob3JnLWNhbGwtd2l0aC1hcmcgJ29yZy10b2RvICdwcmV2aW91c3NldCkpDQog ICAob3JnLXN1cHBvcnQtc2hpZnQtc2VsZWN0DQogICAgKG9yZy1jYWxsLWZvci1zaGlmdC1zZWxl Y3QgJ2JhY2t3YXJkLXdvcmQpKQ0KICAgKHQgKG9yZy1zaGlmdHNlbGVjdC1lcnJvcikpKSkNCg0K KGRlZnVuIG9yZy1zaGlmdGNvbnRyb2x1cCAoJm9wdGlvbmFsIG4pDQogICJDaGFuZ2UgdGltZXN0 YW1wcyBzeW5jaHJvbm91c2x5IHVwIGluIENMT0NLIGxvZyBsaW5lcy4NCk9wdGlvbmFsIGFyZ3Vt ZW50IE4gdGVsbHMgdG8gY2hhbmdlIGJ5IHRoYXQgbWFueSB1bml0cy4iDQogIChpbnRlcmFjdGl2 ZSAiUCIpDQogIChpZiAoYW5kIChvcmctYXQtY2xvY2stbG9nLXApIChvcmctYXQtdGltZXN0YW1w LXAgdCkpDQogICAgICAobGV0IChvcmctc3VwcG9ydC1zaGlmdC1zZWxlY3QpDQoJKG9yZy1jbG9j ay10aW1lc3RhbXBzLXVwIG4pKQ0KICAgICh1c2VyLWVycm9yICJOb3QgYXQgYSBjbG9jayBsb2ci KSkpDQoNCihkZWZ1biBvcmctc2hpZnRjb250cm9sZG93biAoJm9wdGlvbmFsIG4pDQogICJDaGFu Z2UgdGltZXN0YW1wcyBzeW5jaHJvbm91c2x5IGRvd24gaW4gQ0xPQ0sgbG9nIGxpbmVzLg0KT3B0 aW9uYWwgYXJndW1lbnQgTiB0ZWxscyB0byBjaGFuZ2UgYnkgdGhhdCBtYW55IHVuaXRzLiINCiAg KGludGVyYWN0aXZlICJQIikNCiAgKGlmIChhbmQgKG9yZy1hdC1jbG9jay1sb2ctcCkgKG9yZy1h dC10aW1lc3RhbXAtcCB0KSkNCiAgICAgIChsZXQgKG9yZy1zdXBwb3J0LXNoaWZ0LXNlbGVjdCkN Cgkob3JnLWNsb2NrLXRpbWVzdGFtcHMtZG93biBuKSkNCiAgICAodXNlci1lcnJvciAiTm90IGF0 IGEgY2xvY2sgbG9nIikpKQ0KDQooZGVmdW4gb3JnLWN0cmwtYy1yZXQgKCkNCiAgIkNhbGwgYG9y Zy10YWJsZS1obGluZS1hbmQtbW92ZScgb3IgYG9yZy1pbnNlcnQtaGVhZGluZycgZGVwLiBvbiBj b250ZXh0LiINCiAgKGludGVyYWN0aXZlKQ0KICAoY29uZA0KICAgKChvcmctYXQtdGFibGUtcCkg KGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLXRhYmxlLWhsaW5lLWFuZC1tb3ZlKSkNCiAgICh0IChj YWxsLWludGVyYWN0aXZlbHkgJ29yZy1pbnNlcnQtaGVhZGluZykpKSkNCg0KKGRlZnVuIG9yZy1m aW5kLXZpc2libGUgKCkNCiAgKGxldCAoKHMgKHBvaW50KSkpDQogICAgKHdoaWxlIChhbmQgKG5v dCAoPSAocG9pbnQtbWF4KSAoc2V0cSBzIChuZXh0LW92ZXJsYXktY2hhbmdlIHMpKSkpDQoJCShn ZXQtY2hhci1wcm9wZXJ0eSBzICdpbnZpc2libGUpKSkNCiAgICBzKSkNCihkZWZ1biBvcmctZmlu ZC1pbnZpc2libGUgKCkNCiAgKGxldCAoKHMgKHBvaW50KSkpDQogICAgKHdoaWxlIChhbmQgKG5v dCAoPSAocG9pbnQtbWF4KSAoc2V0cSBzIChuZXh0LW92ZXJsYXktY2hhbmdlIHMpKSkpDQoJCShu b3QgKGdldC1jaGFyLXByb3BlcnR5IHMgJ2ludmlzaWJsZSkpKSkNCiAgICBzKSkNCg0KKGRlZnVu IG9yZy1jb3B5LXZpc2libGUgKGJlZyBlbmQpDQogICJDb3B5IHRoZSB2aXNpYmxlIHBhcnRzIG9m IHRoZSByZWdpb24uIg0KICAoaW50ZXJhY3RpdmUgInIiKQ0KICAobGV0IChzbmlwcGV0cyBzKQ0K ICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgKHNhdmUtcmVzdHJpY3Rpb24NCgkobmFycm93LXRv LXJlZ2lvbiBiZWcgZW5kKQ0KCShzZXRxIHMgKGdvdG8tY2hhciAocG9pbnQtbWluKSkpDQoJKHdo aWxlIChub3QgKD0gKHBvaW50KSAocG9pbnQtbWF4KSkpDQoJICAoZ290by1jaGFyIChvcmctZmlu ZC1pbnZpc2libGUpKQ0KCSAgKHB1c2ggKGJ1ZmZlci1zdWJzdHJpbmcgcyAocG9pbnQpKSBzbmlw cGV0cykNCgkgIChzZXRxIHMgKGdvdG8tY2hhciAob3JnLWZpbmQtdmlzaWJsZSkpKSkpKQ0KICAg IChraWxsLW5ldyAoYXBwbHkgJ2NvbmNhdCAobnJldmVyc2Ugc25pcHBldHMpKSkpKQ0KDQooZGVm dW4gb3JnLWNvcHktc3BlY2lhbCAoKQ0KICAiQ29weSByZWdpb24gaW4gdGFibGUgb3IgY29weSBj dXJyZW50IHN1YnRyZWUuDQpDYWxscyBgb3JnLXRhYmxlLWNvcHknIG9yIGBvcmctY29weS1zdWJ0 cmVlJywgZGVwZW5kaW5nIG9uIGNvbnRleHQuDQpTZWUgdGhlIGluZGl2aWR1YWwgY29tbWFuZHMg Zm9yIG1vcmUgaW5mb3JtYXRpb24uIg0KICAoaW50ZXJhY3RpdmUpDQogIChjYWxsLWludGVyYWN0 aXZlbHkNCiAgIChpZiAob3JnLWF0LXRhYmxlLXApICdvcmctdGFibGUtY29weS1yZWdpb24gJ29y Zy1jb3B5LXN1YnRyZWUpKSkNCg0KKGRlZnVuIG9yZy1jdXQtc3BlY2lhbCAoKQ0KICAiQ3V0IHJl Z2lvbiBpbiB0YWJsZSBvciBjdXQgY3VycmVudCBzdWJ0cmVlLg0KQ2FsbHMgYG9yZy10YWJsZS1j b3B5JyBvciBgb3JnLWN1dC1zdWJ0cmVlJywgZGVwZW5kaW5nIG9uIGNvbnRleHQuDQpTZWUgdGhl IGluZGl2aWR1YWwgY29tbWFuZHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uIg0KICAoaW50ZXJhY3Rp dmUpDQogIChjYWxsLWludGVyYWN0aXZlbHkNCiAgIChpZiAob3JnLWF0LXRhYmxlLXApICdvcmct dGFibGUtY3V0LXJlZ2lvbiAnb3JnLWN1dC1zdWJ0cmVlKSkpDQoNCihkZWZ1biBvcmctcGFzdGUt c3BlY2lhbCAoYXJnKQ0KICAiUGFzdGUgcmVjdGFuZ3VsYXIgcmVnaW9uIGludG8gdGFibGUsIG9y IHBhc3Qgc3VidHJlZSByZWxhdGl2ZSB0byBsZXZlbC4NCkNhbGxzIGBvcmctdGFibGUtcGFzdGUt cmVjdGFuZ2xlJyBvciBgb3JnLXBhc3RlLXN1YnRyZWUnLCBkZXBlbmRpbmcgb24gY29udGV4dC4N ClNlZSB0aGUgaW5kaXZpZHVhbCBjb21tYW5kcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iDQogIChp bnRlcmFjdGl2ZSAiUCIpDQogIChpZiAob3JnLWF0LXRhYmxlLXApDQogICAgICAob3JnLXRhYmxl LXBhc3RlLXJlY3RhbmdsZSkNCiAgICAob3JnLXBhc3RlLXN1YnRyZWUgYXJnKSkpDQoNCihkZWZz dWJzdCBvcmctaW4tZml4ZWQtd2lkdGgtcmVnaW9uLXAgKCkNCiAgIklzIHBvaW50IGluIGEgZml4 ZWQtd2lkdGggcmVnaW9uPyINCiAgKHNhdmUtbWF0Y2gtZGF0YQ0KICAgIChlcSAnZml4ZWQtd2lk dGggKG9yZy1lbGVtZW50LXR5cGUgKG9yZy1lbGVtZW50LWF0LXBvaW50KSkpKSkNCg0KKGRlZnVu IG9yZy1lZGl0LXNwZWNpYWwgKCZvcHRpb25hbCBhcmcpDQogICJDYWxsIGEgc3BlY2lhbCBlZGl0 b3IgZm9yIHRoZSBlbGVtZW50IGF0IHBvaW50Lg0KV2hlbiBhdCBhIHRhYmxlLCBjYWxsIHRoZSBm b3JtdWxhIGVkaXRvciB3aXRoIGBvcmctdGFibGUtZWRpdC1mb3JtdWxhcycuDQpXaGVuIGluIGEg c291cmNlIGNvZGUgYmxvY2ssIGNhbGwgYG9yZy1lZGl0LXNyYy1jb2RlJy4NCldoZW4gaW4gYSBm aXhlZC13aWR0aCByZWdpb24sIGNhbGwgYG9yZy1lZGl0LWZpeGVkLXdpZHRoLXJlZ2lvbicuDQpX aGVuIGF0IGFuICMrSU5DTFVERSBrZXl3b3JkLCB2aXNpdCB0aGUgaW5jbHVkZWQgZmlsZS4NCk9u IGEgbGluaywgY2FsbCBgZmZhcCcgdG8gdmlzaXQgdGhlIGxpbmsgYXQgcG9pbnQuDQpPdGhlcndp c2UsIHJldHVybiBhIHVzZXIgZXJyb3IuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAobGV0ICgo ZWxlbWVudCAob3JnLWVsZW1lbnQtYXQtcG9pbnQpKSkNCiAgICAoYXNzZXJ0IChub3QgYnVmZmVy LXJlYWQtb25seSkgbmlsDQoJICAgICJCdWZmZXIgaXMgcmVhZC1vbmx5OiAlcyIgKGJ1ZmZlci1u YW1lKSkNCiAgICAoY2FzZSAob3JnLWVsZW1lbnQtdHlwZSBlbGVtZW50KQ0KICAgICAgKHNyYy1i bG9jaw0KICAgICAgIChpZiAobm90IGFyZykgKG9yZy1lZGl0LXNyYy1jb2RlKQ0KICAgICAgICAg KGxldCogKChpbmZvIChvcmctYmFiZWwtZ2V0LXNyYy1ibG9jay1pbmZvKSkNCiAgICAgICAgICAg ICAgICAobGFuZyAobnRoIDAgaW5mbykpDQogICAgICAgICAgICAgICAgKHBhcmFtcyAobnRoIDIg aW5mbykpDQogICAgICAgICAgICAgICAgKHNlc3Npb24gKGNkciAoYXNzcSA6c2Vzc2lvbiBwYXJh bXMpKSkpDQogICAgICAgICAgIChpZiAobm90IHNlc3Npb24pIChvcmctZWRpdC1zcmMtY29kZSkN CiAgICAgICAgICAgICA7OyBBdCBhIHNyYy1ibG9jayB3aXRoIGEgc2Vzc2lvbiBhbmQgZnVuY3Rp b24gY2FsbGVkIHdpdGgNCiAgICAgICAgICAgICA7OyBhbiBBUkc6IHN3aXRjaCB0byB0aGUgYnVm ZmVyIHJlbGF0ZWQgdG8gdGhlIGluZmVyaW9yDQogICAgICAgICAgICAgOzsgcHJvY2Vzcy4NCiAg ICAgICAgICAgICAoc3dpdGNoLXRvLWJ1ZmZlcg0KCSAgICAgIChmdW5jYWxsIChpbnRlcm4gKGNv bmNhdCAib3JnLWJhYmVsLXByZXAtc2Vzc2lvbjoiIGxhbmcpKQ0KCQkgICAgICAgc2Vzc2lvbiBw YXJhbXMpKSkpKSkNCiAgICAgIChrZXl3b3JkDQogICAgICAgKGlmIChtZW1iZXIgKG9yZy1lbGVt ZW50LXByb3BlcnR5IDprZXkgZWxlbWVudCkgJygiSU5DTFVERSIgIlNFVFVQRklMRSIpKQ0KICAg ICAgICAgICAoZmluZC1maWxlDQogICAgICAgICAgICAob3JnLXJlbW92ZS1kb3VibGUtcXVvdGVz DQogICAgICAgICAgICAgKGNhciAob3JnLXNwbGl0LXN0cmluZyAob3JnLWVsZW1lbnQtcHJvcGVy dHkgOnZhbHVlIGVsZW1lbnQpKSkpKQ0KICAgICAgICAgKHVzZXItZXJyb3IgIk5vIHNwZWNpYWwg ZW52aXJvbm1lbnQgdG8gZWRpdCBoZXJlIikpKQ0KICAgICAgKHRhYmxlDQogICAgICAgKGlmIChl cSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnR5cGUgZWxlbWVudCkgJ3RhYmxlLmVsKQ0KICAgICAg ICAgICAob3JnLWVkaXQtc3JjLWNvZGUpDQogICAgICAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdv cmctdGFibGUtZWRpdC1mb3JtdWxhcykpKQ0KICAgICAgOzsgT25seSBPcmcgdGFibGVzIGNvbnRh aW4gYHRhYmxlLXJvdycgdHlwZSBlbGVtZW50cy4NCiAgICAgICh0YWJsZS1yb3cgKGNhbGwtaW50 ZXJhY3RpdmVseSAnb3JnLXRhYmxlLWVkaXQtZm9ybXVsYXMpKQ0KICAgICAgKChleGFtcGxlLWJs b2NrIGV4cG9ydC1ibG9jaykgKG9yZy1lZGl0LXNyYy1jb2RlKSkNCiAgICAgIChmaXhlZC13aWR0 aCAob3JnLWVkaXQtZml4ZWQtd2lkdGgtcmVnaW9uKSkNCiAgICAgIChvdGhlcndpc2UNCiAgICAg ICA7OyBObyBub3RhYmxlIGVsZW1lbnQgYXQgcG9pbnQuICBUaG91Z2gsIHdlIG1heSBiZSBhdCBh IGxpbmssDQogICAgICAgOzsgd2hpY2ggaXMgYW4gb2JqZWN0LiAgVGh1cywgc2NhbiBkZWVwZXIu DQogICAgICAgKGlmIChlcSAob3JnLWVsZW1lbnQtdHlwZSAob3JnLWVsZW1lbnQtY29udGV4dCBl bGVtZW50KSkgJ2xpbmspDQoJICAgKGNhbGwtaW50ZXJhY3RpdmVseSAnZmZhcCkNCgkgKHVzZXIt ZXJyb3IgIk5vIHNwZWNpYWwgZW52aXJvbm1lbnQgdG8gZWRpdCBoZXJlIikpKSkpKQ0KDQooZGVm dmFyIG9yZy10YWJsZS1jb29yZGluYXRlLW92ZXJsYXlzKSA7IGRlZmluZWQgaW4gb3JnLXRhYmxl LmVsDQooZGVmdW4gb3JnLWN0cmwtYy1jdHJsLWMgKCZvcHRpb25hbCBhcmcpDQogICJTZXQgdGFn cyBpbiBoZWFkbGluZSwgb3IgdXBkYXRlIGFjY29yZGluZyB0byBjaGFuZ2VkIGluZm9ybWF0aW9u IGF0IHBvaW50Lg0KDQpUaGlzIGNvbW1hbmQgZG9lcyBtYW55IGRpZmZlcmVudCB0aGluZ3MsIGRl cGVuZGluZyBvbiBjb250ZXh0Og0KDQotIElmIGEgZnVuY3Rpb24gaW4gYG9yZy1jdHJsLWMtY3Ry bC1jLWhvb2snIHJlY29nbml6ZXMgdGhpcyBsb2NhdGlvbiwNCiAgdGhpcyBpcyB3aGF0IHdlIGRv Lg0KDQotIElmIHRoZSBjdXJzb3IgaXMgb24gYSBzdGF0aXN0aWNzIGNvb2tpZSwgdXBkYXRlIGl0 Lg0KDQotIElmIHRoZSBjdXJzb3IgaXMgaW4gYSBoZWFkbGluZSwgcHJvbXB0IGZvciB0YWdzIGFu ZCBpbnNlcnQgdGhlbQ0KICBpbnRvIHRoZSBjdXJyZW50IGxpbmUsIGFsaWduZWQgdG8gYG9yZy10 YWdzLWNvbHVtbicuICBXaGVuIGNhbGxlZA0KICB3aXRoIHByZWZpeCBhcmcsIHJlYWxpZ24gYWxs IHRhZ3MgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLg0KDQotIElmIHRoZSBjdXJzb3IgaXMgaW4gb25l IG9mIHRoZSBzcGVjaWFsICMrS0VZV09SRCBsaW5lcywgdGhpcw0KICB0cmlnZ2VycyBzY2Fubmlu ZyB0aGUgYnVmZmVyIGZvciB0aGVzZSBsaW5lcyBhbmQgdXBkYXRpbmcgdGhlDQogIGluZm9ybWF0 aW9uLg0KDQotIElmIHRoZSBjdXJzb3IgaXMgaW5zaWRlIGEgdGFibGUsIHJlYWxpZ24gdGhlIHRh YmxlLiAgVGhpcyBjb21tYW5kDQogIHdvcmtzIGV2ZW4gaWYgdGhlIGF1dG9tYXRpYyB0YWJsZSBl ZGl0b3IgaGFzIGJlZW4gdHVybmVkIG9mZi4NCg0KLSBJZiB0aGUgY3Vyc29yIGlzIG9uIGEgIytU QkxGTSBsaW5lLCByZS1hcHBseSB0aGUgZm9ybXVsYXMgdG8NCiAgdGhlIGVudGlyZSB0YWJsZS4N Cg0KLSBJZiB0aGUgY3Vyc29yIGlzIGF0IGEgZm9vdG5vdGUgcmVmZXJlbmNlIG9yIGRlZmluaXRp b24sIGp1bXAgdG8NCiAgdGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbiBvciByZWZlcmVuY2Vz LCByZXNwZWN0aXZlbHkuDQoNCi0gSWYgdGhlIGN1cnNvciBpcyBhIHRoZSBiZWdpbm5pbmcgb2Yg YSBkeW5hbWljIGJsb2NrLCB1cGRhdGUgaXQuDQoNCi0gSWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlz IGEgY2FwdHVyZSBidWZmZXIsIGNsb3NlIG5vdGUgYW5kIGZpbGUgaXQuDQoNCi0gSWYgdGhlIGN1 cnNvciBpcyBvbiBhIDw8PHRhcmdldD4+PiwgdXBkYXRlIHJhZGlvIHRhcmdldHMgYW5kDQogIGNv cnJlc3BvbmRpbmcgbGlua3MgaW4gdGhpcyBidWZmZXIuDQoNCi0gSWYgdGhlIGN1cnNvciBpcyBv biBhIG51bWJlcmVkIGl0ZW0gaW4gYSBwbGFpbiBsaXN0LCByZW51bWJlciB0aGUNCiAgb3JkZXJl ZCBsaXN0Lg0KDQotIElmIHRoZSBjdXJzb3IgaXMgb24gYSBjaGVja2JveCwgdG9nZ2xlIGl0Lg0K DQotIElmIHRoZSBjdXJzb3IgaXMgb24gYSBjb2RlIGJsb2NrLCBldmFsdWF0ZSBpdC4gIFRoZSB2 YXJpYWJsZQ0KICBgb3JnLWNvbmZpcm0tYmFiZWwtZXZhbHVhdGUnIGNhbiBiZSB1c2VkIHRvIGNv bnRyb2wgcHJvbXB0aW5nDQogIGJlZm9yZSBjb2RlIGJsb2NrIGV2YWx1YXRpb24sIGJ5IGRlZmF1 bHQgZXZlcnkgY29kZSBibG9jaw0KICBldmFsdWF0aW9uIHJlcXVpcmVzIGNvbmZpcm1hdGlvbi4g IENvZGUgYmxvY2sgZXZhbHVhdGlvbiBjYW4gYmUNCiAgaW5oaWJpdGVkIGJ5IHNldHRpbmcgYG9y Zy1iYWJlbC1uby1ldmFsLW9uLWN0cmwtYy1jdHJsLWMnLiINCiAgKGludGVyYWN0aXZlICJQIikN CiAgKGNvbmQNCiAgICgob3ZlcmxheXAgKGNhciAob3ZlcmxheXMtYXQgKHBvaW50KSkpKSAobGV0 ICgob3ZlcmxheSAoY2FyIChvdmVybGF5cy1hdCAocG9pbnQpKSkpKQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChvdmVybGF5cCBvdmVybGF5KQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGUtb3Zl cmxheSBvdmVybGF5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApKSkNCiAgICgob3IgKGFuZCAoYm91bmRwICdvcmctY2xvY2stb3ZlcmxheXMpIG9yZy1j bG9jay1vdmVybGF5cykNCglvcmctb2NjdXItaGlnaGxpZ2h0cw0KCW9yZy1sYXRleC1mcmFnbWVu dC1pbWFnZS1vdmVybGF5cykNCiAgICAoYW5kIChib3VuZHAgJ29yZy1jbG9jay1vdmVybGF5cykg KG9yZy1jbG9jay1yZW1vdmUtb3ZlcmxheXMpKQ0KICAgIChvcmctcmVtb3ZlLW9jY3VyLWhpZ2hs aWdodHMpDQogICAgKG9yZy1yZW1vdmUtbGF0ZXgtZnJhZ21lbnQtaW1hZ2Utb3ZlcmxheXMpDQog ICAgKG1lc3NhZ2UgIlRlbXBvcmFyeSBoaWdobGlnaHRzL292ZXJsYXlzIHJlbW92ZWQgZnJvbSBj dXJyZW50IGJ1ZmZlciIpKQ0KICAgKChhbmQgKGxvY2FsLXZhcmlhYmxlLXAgJ29yZy1maW5pc2gt ZnVuY3Rpb24gKGN1cnJlbnQtYnVmZmVyKSkNCgkgKGZib3VuZHAgb3JnLWZpbmlzaC1mdW5jdGlv bikpDQogICAgKGZ1bmNhbGwgb3JnLWZpbmlzaC1mdW5jdGlvbikpDQogICAoKHJ1bi1ob29rLXdp dGgtYXJncy11bnRpbC1zdWNjZXNzICdvcmctY3RybC1jLWN0cmwtYy1ob29rKSkNCiAgICh0DQog ICAgKGxldCogKChjb250ZXh0IChvcmctZWxlbWVudC1jb250ZXh0KSkgKHR5cGUgKG9yZy1lbGVt ZW50LXR5cGUgY29udGV4dCkpKQ0KICAgICAgOzsgVGVzdCBpZiBwb2ludCBpcyB3aXRoaW4gYSBi bGFuayBsaW5lLg0KICAgICAgKGlmIChzYXZlLWV4Y3Vyc2lvbiAoYmVnaW5uaW5nLW9mLWxpbmUp IChsb29raW5nLWF0ICJbIFx0XSokIikpDQoJICAob3IgKHJ1bi1ob29rLXdpdGgtYXJncy11bnRp bC1zdWNjZXNzICdvcmctY3RybC1jLWN0cmwtYy1maW5hbC1ob29rKQ0KCSAgICAgICh1c2VyLWVy cm9yICJDLWMgQy1jIGNhbiBkbyBub3RoaW5nIHVzZWZ1bCBhdCB0aGlzIGxvY2F0aW9uIikpDQoJ KGNhc2UgdHlwZQ0KCSAgOzsgV2hlbiBhdCBhIGxpbmssIGFjdCBhY2NvcmRpbmcgdG8gdGhlIHBh cmVudCBpbnN0ZWFkLg0KCSAgKGxpbmsgKHNldHEgY29udGV4dCAob3JnLWVsZW1lbnQtcHJvcGVy dHkgOnBhcmVudCBjb250ZXh0KSkNCgkJKHNldHEgdHlwZSAob3JnLWVsZW1lbnQtdHlwZSBjb250 ZXh0KSkpDQoJICA7OyBVbnN1cHBvcnRlZCBvYmplY3QgdHlwZXM6IHJlZmVyIHRvIHRoZSBmaXJz dCBzdXBwb3J0ZWQNCgkgIDs7IGVsZW1lbnQgb3Igb2JqZWN0IGNvbnRhaW5pbmcgaXQuDQoJICAo KGJvbGQgY29kZSBlbnRpdHkgZXhwb3J0LXNuaXBwZXQgaW5saW5lLWJhYmVsLWNhbGwgaW5saW5l LXNyYy1ibG9jaw0KCQkgaXRhbGljIGxhdGV4LWZyYWdtZW50IGxpbmUtYnJlYWsgbWFjcm8gc3Ry aWtlLXRocm91Z2ggc3Vic2NyaXB0DQoJCSBzdXBlcnNjcmlwdCB1bmRlcmxpbmUgdmVyYmF0aW0p DQoJICAgKHdoaWxlIChhbmQgKHNldHEgY29udGV4dCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnBh cmVudCBjb250ZXh0KSkNCgkJICAgICAgIChub3QgKG1lbXEgKHNldHEgdHlwZSAob3JnLWVsZW1l bnQtdHlwZSBjb250ZXh0KSkNCgkJCQkgICcocmFkaW8tdGFyZ2V0IHBhcmFncmFwaCB2ZXJzZS1i bG9jaw0KCQkJCQkJIHRhYmxlLWNlbGwpKSkpKSkpDQoJOzsgRm9yIGNvbnZlbmllbmNlOiBhdCB0 aGUgZmlyc3QgbGluZSBvZiBhIHBhcmFncmFwaCBvbiB0aGUNCgk7OyBzYW1lIGxpbmUgYXMgYW4g aXRlbSwgYXBwbHkgZnVuY3Rpb24gb24gdGhhdCBpdGVtIGluc3RlYWQuDQoJKHdoZW4gKGVxIHR5 cGUgJ3BhcmFncmFwaCkNCgkgIChsZXQgKChwYXJlbnQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpw YXJlbnQgY29udGV4dCkpKQ0KCSAgICAod2hlbiAoYW5kIChlcSAob3JnLWVsZW1lbnQtdHlwZSBw YXJlbnQpICdpdGVtKQ0KCQkgICAgICAgKD0gKHBvaW50LWF0LWJvbCkgKG9yZy1lbGVtZW50LXBy b3BlcnR5IDpiZWdpbiBwYXJlbnQpKSkNCgkgICAgICAoc2V0cSBjb250ZXh0IHBhcmVudCB0eXBl ICdpdGVtKSkpKQ0KCTs7IEFjdCBhY2NvcmRpbmcgdG8gdHlwZSBvZiBlbGVtZW50IG9yIG9iamVj dCBhdCBwb2ludC4NCgkoY2FzZSB0eXBlDQoJICAoY2xvY2sgKG9yZy1jbG9jay11cGRhdGUtdGlt ZS1tYXliZSkpDQoJICAoZHluYW1pYy1ibG9jaw0KCSAgIChzYXZlLWV4Y3Vyc2lvbg0KCSAgICAg KGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnBvc3QtYWZmaWxpYXRlZCBjb250ZXh0 KSkNCgkgICAgIChvcmctdXBkYXRlLWRibG9jaykpKQ0KCSAgKGZvb3Rub3RlLWRlZmluaXRpb24N CgkgICAoZ290by1jaGFyIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cG9zdC1hZmZpbGlhdGVkIGNv bnRleHQpKQ0KCSAgIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1mb290bm90ZS1hY3Rpb24pKQ0K CSAgKGZvb3Rub3RlLXJlZmVyZW5jZSAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctZm9vdG5vdGUt YWN0aW9uKSkNCgkgICgoaGVhZGxpbmUgaW5saW5ldGFzaykNCgkgICAoc2F2ZS1leGN1cnNpb24g KGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGNvbnRleHQpKQ0KCQkJICAg KGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLXNldC10YWdzKSkpDQoJICAoaXRlbQ0KCSAgIDs7IEF0 IGFuIGl0ZW06IGEgZG91YmxlIEMtdSBzZXQgY2hlY2tib3ggdG8gIlstXSINCgkgICA7OyB1bmNv bmRpdGlvbmFsbHksIHdoZXJlYXMgYSBzaW5nbGUgb25lIHdpbGwgdG9nZ2xlIGl0cw0KCSAgIDs7 IHByZXNlbmNlLiAgV2l0aG91dCBhbiB1bml2ZXJzYWwgYXJndW1lbnQsIGlmIHRoZSBpdGVtDQoJ ICAgOzsgaGFzIGEgY2hlY2tib3gsIHRvZ2dsZSBpdC4gIE90aGVyd2lzZSByZXBhaXIgdGhlIGxp c3QuDQoJICAgKGxldCogKChib3ggKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjaGVja2JveCBjb250 ZXh0KSkNCgkJICAoc3RydWN0IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6c3RydWN0dXJlIGNvbnRl eHQpKQ0KCQkgIChvbGQtc3RydWN0IChjb3B5LXRyZWUgc3RydWN0KSkNCgkJICAocGFyZW50cyAo b3JnLWxpc3QtcGFyZW50cy1hbGlzdCBzdHJ1Y3QpKQ0KCQkgIChwcmV2cyAob3JnLWxpc3QtcHJl dnMtYWxpc3Qgc3RydWN0KSkNCgkJICAob3JkZXJlZHAgKG9yZy1ub3QtbmlsIChvcmctZW50cnkt Z2V0IG5pbCAiT1JERVJFRCIpKSkpDQoJICAgICAob3JnLWxpc3Qtc2V0LWNoZWNrYm94DQoJICAg ICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBjb250ZXh0KSBzdHJ1Y3QNCgkgICAgICAo Y29uZCAoKGVxdWFsIGFyZyAnKDE2KSkgIlstXSIpDQoJCSAgICAoKGFuZCAobm90IGJveCkgKGVx dWFsIGFyZyAnKDQpKSkgIlsgXSIpDQoJCSAgICAoKG9yIChub3QgYm94KSAoZXF1YWwgYXJnICco NCkpKSBuaWwpDQoJCSAgICAoKGVxIGJveCAnb24pICJbIF0iKQ0KCQkgICAgKHQgIltYXSIpKSkN CgkgICAgIDs7IE1pbWljIGBvcmctbGlzdC13cml0ZS1zdHJ1Y3QnIGJ1dCB3aXRoIGdyYWJiaW5n DQoJICAgICA7OyBhIHJldHVybiB2YWx1ZSBmcm9tIGBvcmctbGlzdC1zdHJ1Y3QtZml4LWJveCcu DQoJICAgICAob3JnLWxpc3Qtc3RydWN0LWZpeC1pbmQgc3RydWN0IHBhcmVudHMgMikNCgkgICAg IChvcmctbGlzdC1zdHJ1Y3QtZml4LWl0ZW0tZW5kIHN0cnVjdCkNCgkgICAgIChvcmctbGlzdC1z dHJ1Y3QtZml4LWJ1bCBzdHJ1Y3QgcHJldnMpDQoJICAgICAob3JnLWxpc3Qtc3RydWN0LWZpeC1p bmQgc3RydWN0IHBhcmVudHMpDQoJICAgICAobGV0ICgoYmxvY2staXRlbQ0KCQkgICAgKG9yZy1s aXN0LXN0cnVjdC1maXgtYm94IHN0cnVjdCBwYXJlbnRzIHByZXZzIG9yZGVyZWRwKSkpDQoJICAg ICAgIChpZiAoYW5kIGJveCAoZXF1YWwgc3RydWN0IG9sZC1zdHJ1Y3QpKQ0KCQkgICAoaWYgKGVx dWFsIGFyZyAnKDE2KSkNCgkJICAgICAgIChtZXNzYWdlICJDaGVja2JveGVzIGFscmVhZHkgcmVz ZXQiKQ0KCQkgICAgICh1c2VyLWVycm9yICJDYW5ub3QgdG9nZ2xlIHRoaXMgY2hlY2tib3g6ICVz Ig0KCQkJCSAoaWYgKGVxIGJveCAnb24pDQoJCQkJICAgICAiYWxsIHN1Yml0ZW1zIGNoZWNrZWQi DQoJCQkJICAgInVuY2hlY2tlZCBzdWJpdGVtcyIpKSkNCgkJIChvcmctbGlzdC1zdHJ1Y3QtYXBw bHktc3RydWN0IHN0cnVjdCBvbGQtc3RydWN0KQ0KCQkgKG9yZy11cGRhdGUtY2hlY2tib3gtY291 bnQtbWF5YmUpKQ0KCSAgICAgICAod2hlbiBibG9jay1pdGVtDQoJCSAobWVzc2FnZSAiQ2hlY2ti b3hlcyB3ZXJlIHJlbW92ZWQgZHVlIHRvIGVtcHR5IGJveCBhdCBsaW5lICVkIg0KCQkJICAob3Jn LWN1cnJlbnQtbGluZSBibG9jay1pdGVtKSkpKSkpDQoJICAoa2V5d29yZA0KCSAgIChsZXQgKChv cmctaW5oaWJpdC1zdGFydHVwLXZpc2liaWxpdHktc3R1ZmYgdCkNCgkJIChvcmctc3RhcnR1cC1h bGlnbi1hbGwtdGFibGVzIG5pbCkpDQoJICAgICAod2hlbiAoYm91bmRwICdvcmctdGFibGUtY29v cmRpbmF0ZS1vdmVybGF5cykNCgkgICAgICAgKG1hcGMgJ2RlbGV0ZS1vdmVybGF5IG9yZy10YWJs ZS1jb29yZGluYXRlLW92ZXJsYXlzKQ0KCSAgICAgICAoc2V0cSBvcmctdGFibGUtY29vcmRpbmF0 ZS1vdmVybGF5cyBuaWwpKQ0KCSAgICAgKG9yZy1zYXZlLW91dGxpbmUtdmlzaWJpbGl0eSAndXNl LW1hcmtlcnMgKG9yZy1tb2RlLXJlc3RhcnQpKSkNCgkgICAobWVzc2FnZSAiTG9jYWwgc2V0dXAg aGFzIGJlZW4gcmVmcmVzaGVkIikpDQoJICAocGxhaW4tbGlzdA0KCSAgIDs7IEF0IGEgcGxhaW4g bGlzdCwgd2l0aCBhIGRvdWJsZSBDLXUgYXJndW1lbnQsIHNldA0KCSAgIDs7IGNoZWNrYm94ZXMg b2YgZWFjaCBpdGVtIHRvICJbLV0iLCB3aGVyZWFzIGEgc2luZ2xlIG9uZQ0KCSAgIDs7IHdpbGwg dG9nZ2xlIHRoZWlyIHByZXNlbmNlIGFjY29yZGluZyB0byB0aGUgc3RhdGUgb2YgdGhlDQoJICAg OzsgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4gIFdpdGhvdXQgYW4gYXJndW1lbnQsIHJlcGFpciB0 aGUNCgkgICA7OyBsaXN0Lg0KCSAgIChsZXQqICgoYmVnaW4gKG9yZy1lbGVtZW50LXByb3BlcnR5 IDpjb250ZW50cy1iZWdpbiBjb250ZXh0KSkNCgkJICAoYmVnaW5tIChtb3ZlLW1hcmtlciAobWFr ZS1tYXJrZXIpIGJlZ2luKSkNCgkJICAoc3RydWN0IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6c3Ry dWN0dXJlIGNvbnRleHQpKQ0KCQkgIChvbGQtc3RydWN0IChjb3B5LXRyZWUgc3RydWN0KSkNCgkJ ICAoZmlyc3QtYm94IChzYXZlLWV4Y3Vyc2lvbg0KCQkJICAgICAgIChnb3RvLWNoYXIgYmVnaW4p DQoJCQkgICAgICAgKGxvb2tpbmctYXQgb3JnLWxpc3QtZnVsbC1pdGVtLXJlKQ0KCQkJICAgICAg IChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAzKSkpDQoJCSAgKG5ldy1ib3ggKGNvbmQgKChl cXVhbCBhcmcgJygxNikpICJbLV0iKQ0KCQkJCSAoKGVxdWFsIGFyZyAnKDQpKSAodW5sZXNzIGZp cnN0LWJveCAiWyBdIikpDQoJCQkJICgoZXF1YWwgZmlyc3QtYm94ICJbWF0iKSAiWyBdIikNCgkJ CQkgKHQgIltYXSIpKSkpDQoJICAgICAoY29uZA0KCSAgICAgIChhcmcNCgkgICAgICAgKG1hcGMg KGxhbWJkYSAocG9zKSAob3JnLWxpc3Qtc2V0LWNoZWNrYm94IHBvcyBzdHJ1Y3QgbmV3LWJveCkp DQoJCSAgICAgKG9yZy1saXN0LWdldC1hbGwtaXRlbXMNCgkJICAgICAgYmVnaW4gc3RydWN0IChv cmctbGlzdC1wcmV2cy1hbGlzdCBzdHJ1Y3QpKSkpDQoJICAgICAgKChhbmQgZmlyc3QtYm94IChl cSAocG9pbnQpIGJlZ2luKSkNCgkgICAgICAgOzsgRm9yIGNvbnZlbmllbmNlLCB3aGVuIHBvaW50 IGlzIGF0IGJvbCBvbiB0aGUgZmlyc3QNCgkgICAgICAgOzsgaXRlbSBvZiB0aGUgbGlzdCBhbmQg bm8gYXJndW1lbnQgaXMgcHJvdmlkZWQsIHNpbXBseQ0KCSAgICAgICA7OyB0b2dnbGUgY2hlY2ti b3ggb2YgdGhhdCBpdGVtLCBpZiBhbnkuDQoJICAgICAgIChvcmctbGlzdC1zZXQtY2hlY2tib3gg YmVnaW4gc3RydWN0IG5ldy1ib3gpKSkNCgkgICAgIChvcmctbGlzdC13cml0ZS1zdHJ1Y3QNCgkg ICAgICBzdHJ1Y3QgKG9yZy1saXN0LXBhcmVudHMtYWxpc3Qgc3RydWN0KSBvbGQtc3RydWN0KQ0K CSAgICAgKG9yZy11cGRhdGUtY2hlY2tib3gtY291bnQtbWF5YmUpDQoJICAgICAoc2F2ZS1leGN1 cnNpb24gKGdvdG8tY2hhciBiZWdpbm0pIChvcmctbGlzdC1zZW5kLWxpc3QgJ21heWJlKSkpKQ0K CSAgKChwcm9wZXJ0eS1kcmF3ZXIgbm9kZS1wcm9wZXJ0eSkNCgkgICAoY2FsbC1pbnRlcmFjdGl2 ZWx5ICdvcmctcHJvcGVydHktYWN0aW9uKSkNCgkgICgocmFkaW8tdGFyZ2V0IHRhcmdldCkNCgkg ICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctdXBkYXRlLXJhZGlvLXRhcmdldC1yZWdleHApKQ0K CSAgKHN0YXRpc3RpY3MtY29va2llDQoJICAgKGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLXVwZGF0 ZS1zdGF0aXN0aWNzLWNvb2tpZXMpKQ0KCSAgKCh0YWJsZSB0YWJsZS1jZWxsIHRhYmxlLXJvdykN CgkgICA7OyBBdCBhIHRhYmxlLCByZWNhbGN1bGF0ZSBldmVyeSBmaWVsZCBhbmQgYWxpZ24gaXQu ICBBbHNvDQoJICAgOzsgc2VuZCB0aGUgdGFibGUgaWYgbmVjZXNzYXJ5LiAgSWYgdGhlIHRhYmxl IGhhcw0KCSAgIDs7IGEgYHRhYmxlLmVsJyB0eXBlLCBqdXN0IGdpdmUgdXAuICBBdCBhIHRhYmxl IHJvdyBvcg0KCSAgIDs7IGNlbGwsIG1heWJlIHJlY2FsY3VsYXRlIGxpbmUgYnV0IGFsd2F5cyBh bGlnbiB0YWJsZS4NCgkgICAoaWYgKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSBjb250 ZXh0KSAndGFibGUuZWwpDQoJICAgICAgIChtZXNzYWdlICJVc2UgQy1jICcgdG8gZWRpdCB0YWJs ZS5lbCB0YWJsZXMiKQ0KCSAgICAgKGxldCAoKG9yZy1lbmFibGUtdGFibGUtZWRpdG9yIHQpKQ0K CSAgICAgICAoaWYgKG9yIChlcSB0eXBlICd0YWJsZSkNCgkJICAgICAgIDs7IENoZWNrIGlmIHBv aW50IGlzIGF0IGEgVEJMRk0gbGluZS4NCgkJICAgICAgIChhbmQgKGVxIHR5cGUgJ3RhYmxlLXJv dykNCgkJCSAgICAoPSAocG9pbnQpIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIGNvbnRleHQp KSkpDQoJCSAgIChzYXZlLWV4Y3Vyc2lvbg0KCQkgICAgIChpZiAob3JnLWF0LVRCTEZNLXApDQoJ CQkgKHByb2duIChyZXF1aXJlICdvcmctdGFibGUpDQoJCQkJKG9yZy10YWJsZS1jYWxjLWN1cnJl bnQtVEJMRk0pKQ0KCQkgICAgICAgKGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNv bnRlbnRzLWJlZ2luIGNvbnRleHQpKQ0KCQkgICAgICAgKG9yZy1jYWxsLXdpdGgtYXJnICdvcmct dGFibGUtcmVjYWxjdWxhdGUgKG9yIGFyZyB0KSkNCgkJICAgICAgIChvcmd0Ymwtc2VuZC10YWJs ZSAnbWF5YmUpKSkNCgkJIChvcmctdGFibGUtbWF5YmUtZXZhbC1mb3JtdWxhKQ0KCQkgKGNvbmQg KGFyZyAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctdGFibGUtcmVjYWxjdWxhdGUpKQ0KCQkgICAg ICAgKChvcmctdGFibGUtbWF5YmUtcmVjYWxjdWxhdGUtbGluZSkpDQoJCSAgICAgICAodCAob3Jn LXRhYmxlLWFsaWduKSkpKSkpKQ0KCSAgKHRpbWVzdGFtcCAob3JnLXRpbWVzdGFtcC1jaGFuZ2Ug MCAnZGF5KSkNCgkgIChvdGhlcndpc2UNCgkgICAob3IgKHJ1bi1ob29rLXdpdGgtYXJncy11bnRp bC1zdWNjZXNzICdvcmctY3RybC1jLWN0cmwtYy1maW5hbC1ob29rKQ0KCSAgICAgICAodXNlci1l cnJvcg0KCQkiQy1jIEMtYyBjYW4gZG8gbm90aGluZyB1c2VmdWwgYXQgdGhpcyBsb2NhdGlvbiIp KSkpKSkpKSkNCg0KKGRlZnVuIG9yZy1tb2RlLXJlc3RhcnQgKCkNCiAgKGludGVyYWN0aXZlKQ0K ICAobGV0ICgoaW5kZW50LXN0YXR1cyAob3JnLWJvdW5kLWFuZC10cnVlLXAgb3JnLWluZGVudC1t b2RlKSkpDQogICAgKGZ1bmNhbGwgbWFqb3ItbW9kZSkNCiAgICAoaGFjay1sb2NhbC12YXJpYWJs ZXMpDQogICAgKHdoZW4gKGFuZCBpbmRlbnQtc3RhdHVzIChub3QgKG9yZy1ib3VuZC1hbmQtdHJ1 ZS1wIG9yZy1pbmRlbnQtbW9kZSkpKQ0KICAgICAgKG9yZy1pbmRlbnQtbW9kZSAtMSkpKQ0KICAo bWVzc2FnZSAiJXMgcmVzdGFydGVkIiBtYWpvci1tb2RlKSkNCg0KKGRlZnVuIG9yZy1raWxsLW5v dGUtb3Itc2hvdy1icmFuY2hlcyAoKQ0KICAiSWYgdGhpcyBpcyBhIE5vdGUgYnVmZmVyLCBhYm9y dCBzdG9yaW5nIHRoZSBub3RlLiAgRWxzZSBjYWxsIGBzaG93LWJyYW5jaGVzJy4iDQogIChpbnRl cmFjdGl2ZSkNCiAgKGlmIChub3Qgb3JnLWZpbmlzaC1mdW5jdGlvbikNCiAgICAgIChwcm9nbg0K CShoaWRlLXN1YnRyZWUpDQoJKGNhbGwtaW50ZXJhY3RpdmVseSAnc2hvdy1icmFuY2hlcykpDQog ICAgKGxldCAoKG9yZy1ub3RlLWFib3J0IHQpKQ0KICAgICAgKGZ1bmNhbGwgb3JnLWZpbmlzaC1m dW5jdGlvbikpKSkNCg0KKGRlZnVuIG9yZy1vcGVuLWxpbmUgKG4pDQogICJJbnNlcnQgYSBuZXcg cm93IGluIHRhYmxlcywgY2FsbCBgb3Blbi1saW5lJyBlbHNld2hlcmUuDQpJZiBgb3JnLXNwZWNp YWwtY3RybC1vJyBpcyBuaWwsIGp1c3QgY2FsbCBgb3Blbi1saW5lJyBldmVyeXdoZXJlLiINCiAg KGludGVyYWN0aXZlICIqcCIpDQogIChjb25kDQogICAoKG5vdCBvcmctc3BlY2lhbC1jdHJsLW8p DQogICAgKG9wZW4tbGluZSBuKSkNCiAgICgob3JnLWF0LXRhYmxlLXApDQogICAgKG9yZy10YWJs ZS1pbnNlcnQtcm93KSkNCiAgICh0DQogICAgKG9wZW4tbGluZSBuKSkpKQ0KDQooZGVmdW4gb3Jn LXJldHVybiAoJm9wdGlvbmFsIGluZGVudCkNCiAgIkdvdG8gbmV4dCB0YWJsZSByb3cgb3IgaW5z ZXJ0IGEgbmV3bGluZS4NCkNhbGxzIGBvcmctdGFibGUtbmV4dC1yb3cnIG9yIGBuZXdsaW5lJywg ZGVwZW5kaW5nIG9uIGNvbnRleHQuDQpTZWUgdGhlIGluZGl2aWR1YWwgY29tbWFuZHMgZm9yIG1v cmUgaW5mb3JtYXRpb24uIg0KICAoaW50ZXJhY3RpdmUpDQogIChsZXQgKG9yZy10cy13aGF0KQ0K ICAgIChjb25kDQogICAgICgob3IgKGJvYnApIChvcmctaW4tc3JjLWJsb2NrLXApKQ0KICAgICAg KGlmIGluZGVudCAobmV3bGluZS1hbmQtaW5kZW50KSAobmV3bGluZSkpKQ0KICAgICAoKG9yZy1h dC10YWJsZS1wKQ0KICAgICAgKG9yZy10YWJsZS1qdXN0aWZ5LWZpZWxkLW1heWJlKQ0KICAgICAg KGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLXRhYmxlLW5leHQtcm93KSkNCiAgICAgOzsgd2hlbiBg bmV3bGluZS1hbmQtaW5kZW50JyBpcyBjYWxsZWQgd2l0aGluIGEgbGlzdCwgbWFrZSBzdXJlDQog ICAgIDs7IHRleHQgbW92ZWQgc3RheXMgaW5zaWRlIHRoZSBpdGVtLg0KICAgICAoKGFuZCAob3Jn LWluLWl0ZW0tcCkgaW5kZW50KQ0KICAgICAgKGlmIChhbmQgKG9yZy1hdC1pdGVtLXApICg+PSAo cG9pbnQpIChtYXRjaC1lbmQgMCkpKQ0KCSAgKHByb2duDQoJICAgIChzYXZlLW1hdGNoLWRhdGEg KG5ld2xpbmUpKQ0KCSAgICAob3JnLWluZGVudC1saW5lLXRvIChsZW5ndGggKG1hdGNoLXN0cmlu ZyAwKSkpKQ0KCShsZXQgKChpbmQgKG9yZy1nZXQtaW5kZW50YXRpb24pKSkNCgkgIChuZXdsaW5l KQ0KCSAgKGlmIChvcmctbG9va2luZy1iYWNrIG9yZy1saXN0LWVuZC1yZSkNCgkgICAgICAob3Jn LWluZGVudC1saW5lKQ0KCSAgICAob3JnLWluZGVudC1saW5lLXRvIGluZCkpKSkpDQogICAgICgo YW5kIG9yZy1yZXR1cm4tZm9sbG93cy1saW5rDQoJICAgKG9yZy1hdC10aW1lc3RhbXAtcCB0KQ0K CSAgIChub3QgKGVxIG9yZy10cy13aGF0ICdhZnRlcikpKQ0KICAgICAgKG9yZy1mb2xsb3ctdGlt ZXN0YW1wLWxpbmspKQ0KICAgICAoKGFuZCBvcmctcmV0dXJuLWZvbGxvd3MtbGluaw0KCSAgIChs ZXQgKCh0cHJvcCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnZmFjZSkpKQ0KCSAgICAgKG9y IChlcSB0cHJvcCAnb3JnLWxpbmspDQoJCSAoYW5kIChsaXN0cCB0cHJvcCkgKG1lbXEgJ29yZy1s aW5rIHRwcm9wKSkpKSkNCiAgICAgIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1vcGVuLWF0LXBv aW50KSkNCiAgICAgKChhbmQgKG9yZy1hdC1oZWFkaW5nLXApDQoJICAgKGxvb2tpbmctYXQNCgkg ICAgKG9yZy1yZSAiXFwoWyBcdF0rXFwoOltbOmFsbnVtOl1fQCMlOl0rOlxcKVxcKVsgXHRdKiQi KSkpDQogICAgICAob3JnLXNob3ctZW50cnkpDQogICAgICAoZW5kLW9mLWxpbmUgMSkNCiAgICAg IChuZXdsaW5lKSkNCiAgICAgKHQgKGlmIGluZGVudCAobmV3bGluZS1hbmQtaW5kZW50KSAobmV3 bGluZSkpKSkpKQ0KDQooZGVmdW4gb3JnLXJldHVybi1pbmRlbnQgKCkNCiAgIkdvdG8gbmV4dCB0 YWJsZSByb3cgb3IgaW5zZXJ0IGEgbmV3bGluZSBhbmQgaW5kZW50Lg0KQ2FsbHMgYG9yZy10YWJs ZS1uZXh0LXJvdycgb3IgYG5ld2xpbmUtYW5kLWluZGVudCcsIGRlcGVuZGluZyBvbg0KY29udGV4 dC4gIFNlZSB0aGUgaW5kaXZpZHVhbCBjb21tYW5kcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iDQog IChpbnRlcmFjdGl2ZSkNCiAgKG9yZy1yZXR1cm4gdCkpDQoNCihkZWZ1biBvcmctY3RybC1jLXN0 YXIgKCkNCiAgIkNvbXB1dGUgdGFibGUsIG9yIGNoYW5nZSBoZWFkaW5nIHN0YXR1cyBvZiBsaW5l cy4NCkNhbGxzIGBvcmctdGFibGUtcmVjYWxjdWxhdGUnIG9yIGBvcmctdG9nZ2xlLWhlYWRpbmcn LA0KZGVwZW5kaW5nIG9uIGNvbnRleHQuIg0KICAoaW50ZXJhY3RpdmUpDQogIChjb25kDQogICAo KG9yZy1hdC10YWJsZS1wKQ0KICAgIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy10YWJsZS1yZWNh bGN1bGF0ZSkpDQogICAodA0KICAgIDs7IENvbnZlcnQgYWxsIGxpbmVzIGluIHJlZ2lvbiB0byBs aXN0IGl0ZW1zDQogICAgKGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLXRvZ2dsZS1oZWFkaW5nKSkp KQ0KDQooZGVmdW4gb3JnLWN0cmwtYy1taW51cyAoKQ0KICAiSW5zZXJ0IHNlcGFyYXRvciBsaW5l IGluIHRhYmxlIG9yIG1vZGlmeSBidWxsZXQgc3RhdHVzIG9mIGxpbmUuDQpBbHNvIHR1cm5zIGEg cGxhaW4gbGluZSBvciBhIHJlZ2lvbiBvZiBsaW5lcyBpbnRvIGxpc3QgaXRlbXMuDQpDYWxscyBg b3JnLXRhYmxlLWluc2VydC1obGluZScsIGBvcmctdG9nZ2xlLWl0ZW0nLCBvcg0KYG9yZy1jeWNs ZS1saXN0LWJ1bGxldCcsIGRlcGVuZGluZyBvbiBjb250ZXh0LiINCiAgKGludGVyYWN0aXZlKQ0K ICAoY29uZA0KICAgKChvcmctYXQtdGFibGUtcCkNCiAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdv cmctdGFibGUtaW5zZXJ0LWhsaW5lKSkNCiAgICgob3JnLXJlZ2lvbi1hY3RpdmUtcCkNCiAgICAo Y2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctdG9nZ2xlLWl0ZW0pKQ0KICAgKChvcmctaW4taXRlbS1w KQ0KICAgIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy1jeWNsZS1saXN0LWJ1bGxldCkpDQogICAo dA0KICAgIChjYWxsLWludGVyYWN0aXZlbHkgJ29yZy10b2dnbGUtaXRlbSkpKSkNCg0KKGRlZnVu IG9yZy10b2dnbGUtaXRlbSAoYXJnKQ0KICAiQ29udmVydCBoZWFkaW5ncyBvciBub3JtYWwgbGlu ZXMgdG8gaXRlbXMsIGl0ZW1zIHRvIG5vcm1hbCBsaW5lcy4NCklmIHRoZXJlIGlzIG5vIGFjdGl2 ZSByZWdpb24sIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBpcyBjb25zaWRlcmVkLg0KDQpJZiB0aGUg Zmlyc3Qgbm9uIGJsYW5rIGxpbmUgaW4gdGhlIHJlZ2lvbiBpcyBhIGhlYWRsaW5lLCBjb252ZXJ0 DQphbGwgaGVhZGxpbmVzIHRvIGl0ZW1zLCBzaGlmdGluZyB0ZXh0IGFjY29yZGluZ2x5Lg0KDQpJ ZiBpdCBpcyBhbiBpdGVtLCBjb252ZXJ0IGFsbCBpdGVtcyB0byBub3JtYWwgbGluZXMuDQoNCklm IGl0IGlzIG5vcm1hbCB0ZXh0LCBjaGFuZ2UgcmVnaW9uIGludG8gYSBsaXN0IG9mIGl0ZW1zLg0K V2l0aCBhIHByZWZpeCBhcmd1bWVudCBBUkcsIGNoYW5nZSB0aGUgcmVnaW9uIGluIGEgc2luZ2xl IGl0ZW0uIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAobGV0ICgoc2hpZnQtdGV4dA0KCSAoZnVu Y3Rpb24NCgkgIDs7IFNoaWZ0IHRleHQgaW4gY3VycmVudCBzZWN0aW9uIHRvIElORCwgZnJvbSBw b2ludCB0byBFTkQuDQoJICA7OyBUaGUgZnVuY3Rpb24gbGVhdmVzIHBvaW50IHRvIEVORCBsaW5l Lg0KCSAgKGxhbWJkYSAoaW5kIGVuZCkNCgkgICAgKGxldCAoKG1pbi1pIDEwMDApIChlbmQgKGNv cHktbWFya2VyIGVuZCkpKQ0KCSAgICAgIDs7IEZpcnN0IGRldGVybWluZSB0aGUgbWluaW11bSBp bmRlbnRhdGlvbiAoTUlOLUkpIG9mDQoJICAgICAgOzsgdGhlIHRleHQuDQoJICAgICAgKHNhdmUt ZXhjdXJzaW9uDQoJCShjYXRjaCAnZXhpdA0KCQkgICh3aGlsZSAoPCAocG9pbnQpIGVuZCkNCgkJ ICAgIChsZXQgKChpIChvcmctZ2V0LWluZGVudGF0aW9uKSkpDQoJCSAgICAgIChjb25kDQoJCSAg ICAgICA7OyBTa2lwIGJsYW5rIGxpbmVzIGFuZCBpbmxpbmUgdGFza3MuDQoJCSAgICAgICAoKGxv b2tpbmctYXQgIl5bIFx0XSokIikpDQoJCSAgICAgICAoKGxvb2tpbmctYXQgb3JnLW91dGxpbmUt cmVnZXhwLWJvbCkpDQoJCSAgICAgICA7OyBXZSBjYW4ndCBmaW5kIGxlc3MgdGhhbiAwIGluZGVu dGF0aW9uLg0KCQkgICAgICAgKCh6ZXJvcCBpKSAodGhyb3cgJ2V4aXQgKHNldHEgbWluLWkgMCkp KQ0KCQkgICAgICAgKCg8IGkgbWluLWkpIChzZXRxIG1pbi1pIGkpKSkpDQoJCSAgICAoZm9yd2Fy ZC1saW5lKSkpKQ0KCSAgICAgIDs7IFRoZW4gaW5kZW50IGVhY2ggbGluZSBzbyB0aGF0IGEgbGlu ZSBpbmRlbnRlZCB0bw0KCSAgICAgIDs7IE1JTi1JIGJlY29tZXMgaW5kZW50ZWQgdG8gSU5ELiAg SWdub3JlIGJsYW5rIGxpbmVzDQoJICAgICAgOzsgYW5kIGlubGluZSB0YXNrcyBpbiB0aGUgcHJv Y2Vzcy4NCgkgICAgICAobGV0ICgoZGVsdGEgKC0gaW5kIG1pbi1pKSkpDQoJCSh3aGlsZSAoPCAo cG9pbnQpIGVuZCkNCgkJICAodW5sZXNzIChvciAobG9va2luZy1hdCAiXlsgXHRdKiQiKQ0KCQkJ ICAgICAgKGxvb2tpbmctYXQgb3JnLW91dGxpbmUtcmVnZXhwLWJvbCkpDQoJCSAgICAob3JnLWlu ZGVudC1saW5lLXRvICgrIChvcmctZ2V0LWluZGVudGF0aW9uKSBkZWx0YSkpKQ0KCQkgIChmb3J3 YXJkLWxpbmUpKSkpKSkpDQoJKHNraXAtYmxhbmtzDQoJIChmdW5jdGlvbg0KCSAgOzsgUmV0dXJu IGJlZ2lubmluZyBvZiBmaXJzdCBub24tYmxhbmsgbGluZSwgc3RhcnRpbmcgZnJvbQ0KCSAgOzsg bGluZSBhdCBQT1MuDQoJICAobGFtYmRhIChwb3MpDQoJICAgIChzYXZlLWV4Y3Vyc2lvbg0KCSAg ICAgIChnb3RvLWNoYXIgcG9zKQ0KCSAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcclx0XG4i KQ0KCSAgICAgIChwb2ludC1hdC1ib2wpKSkpKQ0KCWJlZyBlbmQpDQogICAgOzsgRGV0ZXJtaW5l IGJvdW5kYXJpZXMgb2YgY2hhbmdlcy4NCiAgICAoaWYgKG9yZy1yZWdpb24tYWN0aXZlLXApDQoJ KHNldHEgYmVnIChmdW5jYWxsIHNraXAtYmxhbmtzIChyZWdpb24tYmVnaW5uaW5nKSkNCgkgICAg ICBlbmQgKGNvcHktbWFya2VyIChyZWdpb24tZW5kKSkpDQogICAgICAoc2V0cSBiZWcgKGZ1bmNh bGwgc2tpcC1ibGFua3MgKHBvaW50LWF0LWJvbCkpDQoJICAgIGVuZCAoY29weS1tYXJrZXIgKHBv aW50LWF0LWVvbCkpKSkNCiAgICA7OyBEZXBlbmRpbmcgb24gdGhlIHN0YXJ0aW5nIGxpbmUsIGNo b29zZSBhbiBhY3Rpb24gb24gdGhlIHRleHQNCiAgICA7OyBiZXR3ZWVuIEJFRyBhbmQgRU5ELg0K ICAgIChvcmctd2l0aC1saW1pdGVkLWxldmVscw0KICAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAg ICAoZ290by1jaGFyIGJlZykNCiAgICAgICAoY29uZA0KCTs7IENhc2UgMS4gU3RhcnQgYXQgYW4g aXRlbTogZGUtaXRlbWl6ZS4gIE5vdGUgdGhhdCBpdCBvbmx5DQoJOzsgICAgICAgICBoYXBwZW5z IHdoZW4gYSByZWdpb24gaXMgYWN0aXZlOiBgb3JnLWN0cmwtYy1taW51cycNCgk7OyAgICAgICAg IHdvdWxkIGNhbGwgYG9yZy1jeWNsZS1saXN0LWJ1bGxldCcgb3RoZXJ3aXNlLg0KCSgob3JnLWF0 LWl0ZW0tcCkNCgkgKHdoaWxlICg8IChwb2ludCkgZW5kKQ0KCSAgICh3aGVuIChvcmctYXQtaXRl bS1wKQ0KCSAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0IikNCgkgICAgIChkZWxldGUtcmVn aW9uIChwb2ludCkgKG1hdGNoLWVuZCAwKSkpDQoJICAgKGZvcndhcmQtbGluZSkpKQ0KCTs7IENh c2UgMi4gU3RhcnQgYXQgYW4gaGVhZGluZzogY29udmVydCB0byBpdGVtcy4NCgkoKG9yZy1hdC1o ZWFkaW5nLXApDQoJIChsZXQqICgoYnVsIChvcmctbGlzdC1idWxsZXQtc3RyaW5nICItIikpDQoJ CShidWwtbGVuIChsZW5ndGggYnVsKSkNCgkJOzsgSW5kZW50YXRpb24gb2YgdGhlIGZpcnN0IGhl YWRpbmcuICBJdCBzaG91bGQgYmUNCgkJOzsgcmVsYXRpdmUgdG8gdGhlIGluZGVudGF0aW9uIG9m IGl0cyBwYXJlbnQsIGlmIGFueS4NCgkJKHN0YXJ0LWluZCAoc2F2ZS1leGN1cnNpb24NCgkJCSAg ICAgKGNvbmQNCgkJCSAgICAgICgobm90IG9yZy1hZGFwdC1pbmRlbnRhdGlvbikgMCkNCgkJCSAg ICAgICgobm90IChvdXRsaW5lLXByZXZpb3VzLWhlYWRpbmcpKSAwKQ0KCQkJICAgICAgKHQgKGxl bmd0aCAobWF0Y2gtc3RyaW5nIDApKSkpKSkNCgkJOzsgTGV2ZWwgb2YgZmlyc3QgaGVhZGluZy4g IEZ1cnRoZXIgaGVhZGluZ3Mgd2lsbCBiZQ0KCQk7OyBjb21wYXJlZCB0byBpdCB0byBkZXRlcm1p bmUgaGllcmFyY2h5IGluIHRoZSBsaXN0Lg0KCQkocmVmLWxldmVsIChvcmctcmVkdWNlZC1sZXZl bCAob3JnLW91dGxpbmUtbGV2ZWwpKSkpDQoJICAgKHdoaWxlICg8IChwb2ludCkgZW5kKQ0KCSAg ICAgKGxldCogKChsZXZlbCAob3JnLXJlZHVjZWQtbGV2ZWwgKG9yZy1vdXRsaW5lLWxldmVsKSkp DQoJCSAgICAoZGVsdGEgKG1heCAwICgtIGxldmVsIHJlZi1sZXZlbCkpKSkNCgkgICAgICAgOzsg SWYgY3VycmVudCBoZWFkbGluZSBpcyBsZXNzIGluZGVudGVkIHRoYW4gdGhlIGZpcnN0DQoJICAg ICAgIDs7IG9uZSwgc2V0IGl0IGFzIHJlZmVyZW5jZSwgaW4gb3JkZXIgdG8gcHJlc2VydmUNCgkg ICAgICAgOzsgc3VidHJlZXMuDQoJICAgICAgICh3aGVuICg8IGxldmVsIHJlZi1sZXZlbCkgKHNl dHEgcmVmLWxldmVsIGxldmVsKSkNCgkgICAgICAgKHJlcGxhY2UtbWF0Y2ggYnVsIHQgdCkNCgkg ICAgICAgKG9yZy1pbmRlbnQtbGluZS10byAoKyBzdGFydC1pbmQgKCogZGVsdGEgYnVsLWxlbikp KQ0KCSAgICAgICA7OyBFbnN1cmUgYWxsIHRleHQgZG93biB0byBFTkQgKG9yIFNFQ1RJT04tRU5E KSBiZWxvbmdzDQoJICAgICAgIDs7IHRvIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW0uDQoJICAgICAg IChsZXQgKChzZWN0aW9uLWVuZCAoc2F2ZS1leGN1cnNpb24NCgkJCQkgICAgKG9yIChvdXRsaW5l LW5leHQtaGVhZGluZykgKHBvaW50KSkpKSkNCgkJIChmb3J3YXJkLWxpbmUpDQoJCSAoZnVuY2Fs bCBzaGlmdC10ZXh0DQoJCQkgICgrIHN0YXJ0LWluZCAoKiAoMSsgZGVsdGEpIGJ1bC1sZW4pKQ0K CQkJICAobWluIGVuZCBzZWN0aW9uLWVuZCkpKSkpKSkNCgk7OyBDYXNlIDMuIE5vcm1hbCBsaW5l IHdpdGggQVJHOiBtYWtlIHRoZSBmaXJzdCBsaW5lIG9mIHJlZ2lvbg0KCTs7ICAgICAgICAgYW4g aXRlbSwgYW5kIHNoaWZ0IGluZGVudGF0aW9uIG9mIG90aGVycyBsaW5lcyB0bw0KCTs7ICAgICAg ICAgc2V0IHRoZW0gYXMgaXRlbSdzIGJvZHkuDQoJKGFyZyAobGV0KiAoKGJ1bCAob3JnLWxpc3Qt YnVsbGV0LXN0cmluZyAiLSIpKQ0KICAgICAgICAgICAgICAgICAgICAoYnVsLWxlbiAobGVuZ3Ro IGJ1bCkpDQogICAgICAgICAgICAgICAgICAgIChyZWYtaW5kIChvcmctZ2V0LWluZGVudGF0aW9u KSkpDQogICAgICAgICAgICAgICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHQiKQ0KICAgICAgICAg ICAgICAgKGluc2VydCBidWwpDQogICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lKQ0KICAgICAg ICAgICAgICAgKHdoaWxlICg8IChwb2ludCkgZW5kKQ0KICAgICAgICAgICAgICAgICA7OyBFbnN1 cmUgdGhhdCBsaW5lcyBsZXNzIGluZGVudGVkIHRoYW4gZmlyc3Qgb25lDQogICAgICAgICAgICAg ICAgIDs7IHN0aWxsIGdldCBpbmNsdWRlZCBpbiBpdGVtIGJvZHkuDQogICAgICAgICAgICAgICAg IChmdW5jYWxsIHNoaWZ0LXRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCsgcmVmLWlu ZCBidWwtbGVuKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAobWluIGVuZCAoc2F2ZS1leGN1 cnNpb24gKG9yIChvdXRsaW5lLW5leHQtaGVhZGluZykNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQpKSkpKQ0KICAgICAgICAgICAg ICAgICAoZm9yd2FyZC1saW5lKSkpKQ0KCTs7IENhc2UgNC4gTm9ybWFsIGxpbmUgd2l0aG91dCBB Ukc6IHR1cm4gZWFjaCBub24taXRlbSBsaW5lDQoJOzsgICAgICAgICBpbnRvIGFuIGl0ZW0uDQoJ KHQNCgkgKHdoaWxlICg8IChwb2ludCkgZW5kKQ0KCSAgICh1bmxlc3MgKG9yIChvcmctYXQtaGVh ZGluZy1wKSAob3JnLWF0LWl0ZW0tcCkpDQoJICAgICAoaWYgKGxvb2tpbmctYXQgIlxcKFsgXHRd KlxcKVxcKFxcUy1cXCkiKQ0KCQkgKHJlcGxhY2UtbWF0Y2gNCgkJICAoY29uY2F0ICJcXDEiIChv cmctbGlzdC1idWxsZXQtc3RyaW5nICItIikgIlxcMiIpKSkpDQoJICAgKGZvcndhcmQtbGluZSkp KSkpKSkpDQoNCihkZWZ1biBvcmctdG9nZ2xlLWhlYWRpbmcgKCZvcHRpb25hbCBuc3RhcnMpDQog ICJDb252ZXJ0IGhlYWRpbmdzIHRvIG5vcm1hbCB0ZXh0LCBvciBpdGVtcyBvciB0ZXh0IHRvIGhl YWRpbmdzLg0KSWYgdGhlcmUgaXMgbm8gYWN0aXZlIHJlZ2lvbiwgb25seSBjb252ZXJ0IHRoZSBj dXJyZW50IGxpbmUuDQoNCldpdGggYSBcXFt1bml2ZXJzYWwtYXJndW1lbnRdIHByZWZpeCwgY29u dmVydCB0aGUgd2hvbGUgbGlzdCBhdA0KcG9pbnQgaW50byBoZWFkaW5nLg0KDQpJbiBhIHJlZ2lv bjoNCg0KLSBJZiB0aGUgZmlyc3Qgbm9uIGJsYW5rIGxpbmUgaXMgYSBoZWFkbGluZSwgcmVtb3Zl IHRoZSBzdGFycw0KICBmcm9tIGFsbCBoZWFkbGluZXMgaW4gdGhlIHJlZ2lvbi4NCg0KLSBJZiBp dCBpcyBhIG5vcm1hbCBsaW5lLCB0dXJuIGVhY2ggYW5kIGV2ZXJ5IG5vcm1hbCBsaW5lIChpLmUu LA0KICBub3QgYW4gaGVhZGluZyBvciBhbiBpdGVtKSBpbiB0aGUgcmVnaW9uIGludG8gaGVhZGlu Z3MuICBJZiB5b3UNCiAgd2FudCB0byBjb252ZXJ0IG9ubHkgdGhlIGZpcnN0IGxpbmUgb2YgdGhp cyByZWdpb24sIHVzZSBvbmUNCiAgdW5pdmVyc2FsIHByZWZpeCBhcmd1bWVudC4NCg0KLSBJZiBp dCBpcyBhIHBsYWluIGxpc3QgaXRlbSwgdHVybiBhbGwgcGxhaW4gbGlzdCBpdGVtcyBpbnRvIGhl YWRpbmdzLg0KDQpXaGVuIGNvbnZlcnRpbmcgYSBsaW5lIGludG8gYSBoZWFkaW5nLCB0aGUgbnVt YmVyIG9mIHN0YXJzIGlzIGNob3Nlbg0Kc3VjaCB0aGF0IHRoZSBsaW5lcyBiZWNvbWUgY2hpbGRy ZW4gb2YgdGhlIGN1cnJlbnQgZW50cnkuICBIb3dldmVyLA0Kd2hlbiBhIG51bWVyaWMgcHJlZml4 IGFyZ3VtZW50IGlzIGdpdmVuLCBpdHMgdmFsdWUgZGV0ZXJtaW5lcyB0aGUNCm51bWJlciBvZiBz dGFycyB0byBhZGQuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAobGV0ICgoc2tpcC1ibGFua3MN CgkgKGZ1bmN0aW9uDQoJICA7OyBSZXR1cm4gYmVnaW5uaW5nIG9mIGZpcnN0IG5vbi1ibGFuayBs aW5lLCBzdGFydGluZyBmcm9tDQoJICA7OyBsaW5lIGF0IFBPUy4NCgkgIChsYW1iZGEgKHBvcykN CgkgICAgKHNhdmUtZXhjdXJzaW9uDQoJICAgICAgKGdvdG8tY2hhciBwb3MpDQoJICAgICAgKHdo aWxlIChvcmctYXQtY29tbWVudC1wKSAoZm9yd2FyZC1saW5lKSkNCgkgICAgICAoc2tpcC1jaGFy cy1mb3J3YXJkICIgXHJcdFxuIikNCgkgICAgICAocG9pbnQtYXQtYm9sKSkpKSkNCgliZWcgZW5k IHRvZ2dsZWQpDQogICAgOzsgRGV0ZXJtaW5lIGJvdW5kYXJpZXMgb2YgY2hhbmdlcy4gIElmIGEg dW5pdmVyc2FsIHByZWZpeCBoYXMNCiAgICA7OyBiZWVuIGdpdmVuLCBwdXQgdGhlIGxpc3QgaW4g YSByZWdpb24uICBJZiByZWdpb24gZW5kcyBhdCBhIGJvbCwNCiAgICA7OyBkbyBub3QgY29uc2lk ZXIgdGhlIGxhc3QgbGluZSB0byBiZSBpbiB0aGUgcmVnaW9uLg0KDQogICAgKHdoZW4gKGFuZCBj dXJyZW50LXByZWZpeC1hcmcgKG9yZy1hdC1pdGVtLXApKQ0KICAgICAgKGlmIChsaXN0cCBjdXJy ZW50LXByZWZpeC1hcmcpIChzZXRxIGN1cnJlbnQtcHJlZml4LWFyZyAxKSkNCiAgICAgIChvcmct bWFyay1lbGVtZW50KSkNCg0KICAgIChpZiAob3JnLXJlZ2lvbi1hY3RpdmUtcCkNCgkoc2V0cSBi ZWcgKGZ1bmNhbGwgc2tpcC1ibGFua3MgKHJlZ2lvbi1iZWdpbm5pbmcpKQ0KCSAgICAgIGVuZCAo Y29weS1tYXJrZXIgKHNhdmUtZXhjdXJzaW9uDQoJCQkJIChnb3RvLWNoYXIgKHJlZ2lvbi1lbmQp KQ0KCQkJCSAoaWYgKGJvbHApIChwb2ludCkgKHBvaW50LWF0LWVvbCkpKSkpDQogICAgICAoc2V0 cSBiZWcgKGZ1bmNhbGwgc2tpcC1ibGFua3MgKHBvaW50LWF0LWJvbCkpDQoJICAgIGVuZCAoY29w eS1tYXJrZXIgKHBvaW50LWF0LWVvbCkpKSkNCiAgICA7OyBFbnN1cmUgaW5saW5lIHRhc2tzIGRv bid0IGNvdW50IGFzIGhlYWRpbmdzLg0KICAgIChvcmctd2l0aC1saW1pdGVkLWxldmVscw0KICAg ICAoc2F2ZS1leGN1cnNpb24NCiAgICAgICAoZ290by1jaGFyIGJlZykNCiAgICAgICAoY29uZA0K CTs7IENhc2UgMS4gU3RhcnRlZCBhdCBhbiBoZWFkaW5nOiBkZS1zdGFyIGhlYWRpbmdzLg0KCSgo b3JnLWF0LWhlYWRpbmctcCkNCgkgKHdoaWxlICg8IChwb2ludCkgZW5kKQ0KCSAgICh3aGVuIChv cmctYXQtaGVhZGluZy1wIHQpDQoJICAgICAobG9va2luZy1hdCBvcmctb3V0bGluZS1yZWdleHAp IChyZXBsYWNlLW1hdGNoICIiKQ0KCSAgICAgKHNldHEgdG9nZ2xlZCB0KSkNCgkgICAoZm9yd2Fy ZC1saW5lKSkpDQoJOzsgQ2FzZSAyLiBTdGFydGVkIGF0IGFuIGl0ZW06IGNoYW5nZSBpdGVtcyBp bnRvIGhlYWRsaW5lcy4NCgk7OyAgICAgICAgIE9uZSBzdGFyIHdpbGwgYmUgYWRkZWQgYnkgYG9y Zy1saXN0LXRvLXN1YnRyZWUnLg0KCSgob3JnLWF0LWl0ZW0tcCkNCgkgKGxldCogKChzdGFycyAo bWFrZS1zdHJpbmcNCgkJCTs7IHN1YnRyYWN0IHRoZSBzdGFyIHRoYXQgd2lsbCBiZSBhZGRlZCBh Z2FpbiBieQ0KCQkJOzsgYG9yZy1saXN0LXRvLXN1YnRyZWUnDQoJCQkoaWYgKG51bWJlcnAgbnN0 YXJzKSAoMS0gbnN0YXJzKQ0KCQkJICAob3IgKG9yZy1jdXJyZW50LWxldmVsKSAwKSkNCgkJCT8q KSkNCgkJKGFkZC1zdGFycw0KCQkgKGNvbmQgKG5zdGFycyAiIikgICAgICAgICAgICAgICA7IHN0 YXJzIGZyb20gcHJlZml4IG9ubHkNCgkJICAgICAgICgoZXF1YWwgc3RhcnMgIiIpICIiKSAgICAg OyBiZWZvcmUgZmlyc3QgaGVhZGluZw0KCQkgICAgICAgKG9yZy1vZGQtbGV2ZWxzLW9ubHkgIioi KSA7IGluc2lkZSBoZWFkaW5nLCBvZGQNCgkJICAgICAgICh0ICIiKSkpKSAgICAgICAgICAgICAg ICAgOyBpbnNpZGUgaGVhZGluZywgb2RkZXZlbg0KCSAgICh3aGlsZSAoPCAocG9pbnQpIGVuZCkN CgkgICAgICh3aGVuIChvcmctYXQtaXRlbS1wKQ0KCSAgICAgICA7OyBQYXkgYXR0ZW50aW9uIHRv IGNhc2VzIHdoZW4gcmVnaW9uIGVuZHMgYmVmb3JlIGxpc3QuDQoJICAgICAgIChsZXQqICgoc3Ry dWN0IChvcmctbGlzdC1zdHJ1Y3QpKQ0KCQkgICAgICAobGlzdC1lbmQgKG1pbiAob3JnLWxpc3Qt Z2V0LWJvdHRvbS1wb2ludCBzdHJ1Y3QpICgxKyBlbmQpKSkpDQoJCSAoc2F2ZS1yZXN0cmljdGlv bg0KCQkgICAobmFycm93LXRvLXJlZ2lvbiAocG9pbnQpIGxpc3QtZW5kKQ0KCQkgICAoaW5zZXJ0 DQoJCSAgICAob3JnLWxpc3QtdG8tc3VidHJlZQ0KCQkgICAgIChvcmctbGlzdC1wYXJzZS1saXN0 IHQpDQoJCSAgICAgJyg6aXN0YXJ0IChjb25jYXQgc3RhcnMgYWRkLXN0YXJzIChmdW5jYWxsIGdl dC1zdGFycyBkZXB0aCkpDQoJCQkgICAgICAgOmljb3VudCAoY29uY2F0IHN0YXJzIGFkZC1zdGFy cyAoZnVuY2FsbCBnZXQtc3RhcnMgZGVwdGgpKSkpKSkpDQoJICAgICAgIChzZXRxIHRvZ2dsZWQg dCkpDQoJICAgICAoZm9yd2FyZC1saW5lKSkpKQ0KCTs7IENhc2UgMy4gU3RhcnRlZCBhdCBub3Jt YWwgdGV4dDogbWFrZSBldmVyeSBsaW5lIGFuIGhlYWRpbmcsDQoJOzsgICAgICAgICBza2lwcGlu ZyBoZWFkbGluZXMgYW5kIGl0ZW1zLg0KCSh0IChsZXQqICgoc3RhcnMNCgkJICAgKG1ha2Utc3Ry aW5nDQoJCSAgICAoaWYgKG51bWJlcnAgbnN0YXJzKSBuc3RhcnMgKG9yIChvcmctY3VycmVudC1s ZXZlbCkgMCkpID8qKSkNCgkJICAoYWRkLXN0YXJzDQoJCSAgIChjb25kIChuc3RhcnMgIiIpICAg ICAgICAgICAgICAgIDsgc3RhcnMgZnJvbSBwcmVmaXggb25seQ0KCQkJICgoZXF1YWwgc3RhcnMg IiIpICIqIikgICAgIDsgYmVmb3JlIGZpcnN0IGhlYWRpbmcNCgkJCSAob3JnLW9kZC1sZXZlbHMt b25seSAiKioiKSA7IGluc2lkZSBoZWFkaW5nLCBvZGQNCgkJCSAodCAiKiIpKSkgICAgICAgICAg ICAgICAgICA7IGluc2lkZSBoZWFkaW5nLCBvZGRldmVuDQoJCSAgKHJwbCAoY29uY2F0IHN0YXJz IGFkZC1zdGFycyAiICIpKQ0KCQkgIChsZW5kIChpZiAobGlzdHAgbnN0YXJzKSAoc2F2ZS1leGN1 cnNpb24gKGVuZC1vZi1saW5lKSAocG9pbnQpKSkpKQ0KCSAgICAgKHdoaWxlICg8IChwb2ludCkg KGlmIChlcXVhbCBuc3RhcnMgJyg0KSkgbGVuZCBlbmQpKQ0KCSAgICAgICAod2hlbiAoYW5kIChu b3QgKG9yIChvcmctYXQtaGVhZGluZy1wKSAob3JnLWF0LWl0ZW0tcCkgKG9yZy1hdC1jb21tZW50 LXApKSkNCgkJCSAgKGxvb2tpbmctYXQgIlxcKFsgXHRdKlxcKVxcKFxcUy1cXCkiKSkNCgkJIChy ZXBsYWNlLW1hdGNoIChjb25jYXQgcnBsIChtYXRjaC1zdHJpbmcgMikpKSAoc2V0cSB0b2dnbGVk IHQpKQ0KCSAgICAgICAoZm9yd2FyZC1saW5lKSkpKSkpKQ0KICAgICh1bmxlc3MgdG9nZ2xlZCAo bWVzc2FnZSAiQ2Fubm90IHRvZ2dsZSBoZWFkaW5nIGZyb20gaGVyZSIpKSkpDQoNCihkZWZ1biBv cmctbWV0YS1yZXR1cm4gKCZvcHRpb25hbCBhcmcpDQogICJJbnNlcnQgYSBuZXcgaGVhZGluZyBv ciB3cmFwIGEgcmVnaW9uIGluIGEgdGFibGUuDQpDYWxscyBgb3JnLWluc2VydC1oZWFkaW5nJyBv ciBgb3JnLXRhYmxlLXdyYXAtcmVnaW9uJywgZGVwZW5kaW5nDQpvbiBjb250ZXh0LiAgU2VlIHRo ZSBpbmRpdmlkdWFsIGNvbW1hbmRzIGZvciBtb3JlIGluZm9ybWF0aW9uLiINCiAgKGludGVyYWN0 aXZlICJQIikNCiAgKG9yZy1jaGVjay1iZWZvcmUtaW52aXNpYmxlLWVkaXQgJ2luc2VydCkNCiAg KG9yIChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2VzcyAnb3JnLW1ldGFyZXR1cm4taG9v aykNCiAgICAgIChsZXQqICgoZWxlbWVudCAob3JnLWVsZW1lbnQtYXQtcG9pbnQpKQ0KICAgICAg ICAgICAgICh0eXBlIChvcmctZWxlbWVudC10eXBlIGVsZW1lbnQpKSkNCiAgICAgICAgKHdoZW4g KGVxIHR5cGUgJ3RhYmxlLXJvdykNCiAgICAgICAgICAoc2V0cSBlbGVtZW50IChvcmctZWxlbWVu dC1wcm9wZXJ0eSA6cGFyZW50IGVsZW1lbnQpKQ0KICAgICAgICAgIChzZXRxIHR5cGUgJ3RhYmxl KSkNCiAgICAgICAgKGlmIChhbmQgKGVxIHR5cGUgJ3RhYmxlKQ0KICAgICAgICAgICAgICAgICAo ZXEgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0eXBlIGVsZW1lbnQpICdvcmcpDQogICAgICAgICAg ICAgICAgICg+PSAocG9pbnQpIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29udGVudHMtYmVnaW4g ZWxlbWVudCkpDQogICAgICAgICAgICAgICAgICg8IChwb2ludCkgKG9yZy1lbGVtZW50LXByb3Bl cnR5IDpjb250ZW50cy1lbmQgZWxlbWVudCkpKQ0KICAgICAgICAgICAgKGNhbGwtaW50ZXJhY3Rp dmVseSAnb3JnLXRhYmxlLXdyYXAtcmVnaW9uKQ0KICAgICAgICAgIChjYWxsLWludGVyYWN0aXZl bHkgJ29yZy1pbnNlcnQtaGVhZGluZykpKSkpDQoNCjs7OyBNZW51IGVudHJpZXMNCg0KKGRlZnN1 YnN0IG9yZy1pbi1zdWJ0cmVlLW5vdC10YWJsZS1wICgpDQogICJBcmUgd2UgaW4gYSBzdWJ0cmVl IGFuZCBub3QgaW4gYSB0YWJsZT8iDQogIChhbmQgKG5vdCAob3JnLWJlZm9yZS1maXJzdC1oZWFk aW5nLXApKQ0KICAgICAgIChub3QgKG9yZy1hdC10YWJsZS1wKSkpKQ0KDQo7OyBEZWZpbmUgdGhl IE9yZy1tb2RlIG1lbnVzDQooZWFzeS1tZW51LWRlZmluZSBvcmctdGJsLW1lbnUgb3JnLW1vZGUt bWFwICJUYmwgbWVudSINCiAgJygiVGJsIg0KICAgIFsiQWxpZ24iIG9yZy1jdHJsLWMtY3RybC1j IDphY3RpdmUgKG9yZy1hdC10YWJsZS1wKV0NCiAgICBbIk5leHQgRmllbGQiIG9yZy1jeWNsZSAo b3JnLWF0LXRhYmxlLXApXQ0KICAgIFsiUHJldmlvdXMgRmllbGQiIG9yZy1zaGlmdHRhYiAob3Jn LWF0LXRhYmxlLXApXQ0KICAgIFsiTmV4dCBSb3ciIG9yZy1yZXR1cm4gKG9yZy1hdC10YWJsZS1w KV0NCiAgICAiLS0iDQogICAgWyJCbGFuayBGaWVsZCIgb3JnLXRhYmxlLWJsYW5rLWZpZWxkIChv cmctYXQtdGFibGUtcCldDQogICAgWyJFZGl0IEZpZWxkIiBvcmctdGFibGUtZWRpdC1maWVsZCAo b3JnLWF0LXRhYmxlLXApXQ0KICAgIFsiQ29weSBGaWVsZCBmcm9tIEFib3ZlIiBvcmctdGFibGUt Y29weS1kb3duIChvcmctYXQtdGFibGUtcCldDQogICAgIi0tIg0KICAgICgiQ29sdW1uIg0KICAg ICBbIk1vdmUgQ29sdW1uIExlZnQiIG9yZy1tZXRhbGVmdCAob3JnLWF0LXRhYmxlLXApXQ0KICAg ICBbIk1vdmUgQ29sdW1uIFJpZ2h0IiBvcmctbWV0YXJpZ2h0IChvcmctYXQtdGFibGUtcCldDQog ICAgIFsiRGVsZXRlIENvbHVtbiIgb3JnLXNoaWZ0bWV0YWxlZnQgKG9yZy1hdC10YWJsZS1wKV0N CiAgICAgWyJJbnNlcnQgQ29sdW1uIiBvcmctc2hpZnRtZXRhcmlnaHQgKG9yZy1hdC10YWJsZS1w KV0pDQogICAgKCJSb3ciDQogICAgIFsiTW92ZSBSb3cgVXAiIG9yZy1tZXRhdXAgKG9yZy1hdC10 YWJsZS1wKV0NCiAgICAgWyJNb3ZlIFJvdyBEb3duIiBvcmctbWV0YWRvd24gKG9yZy1hdC10YWJs ZS1wKV0NCiAgICAgWyJEZWxldGUgUm93IiBvcmctc2hpZnRtZXRhdXAgKG9yZy1hdC10YWJsZS1w KV0NCiAgICAgWyJJbnNlcnQgUm93IiBvcmctc2hpZnRtZXRhZG93biAob3JnLWF0LXRhYmxlLXAp XQ0KICAgICBbIlNvcnQgbGluZXMgaW4gcmVnaW9uIiBvcmctdGFibGUtc29ydC1saW5lcyAob3Jn LWF0LXRhYmxlLXApXQ0KICAgICAiLS0iDQogICAgIFsiSW5zZXJ0IEhsaW5lIiBvcmctY3RybC1j LW1pbnVzIChvcmctYXQtdGFibGUtcCldKQ0KICAgICgiUmVjdGFuZ2xlIg0KICAgICBbIkNvcHkg UmVjdGFuZ2xlIiBvcmctY29weS1zcGVjaWFsIChvcmctYXQtdGFibGUtcCldDQogICAgIFsiQ3V0 IFJlY3RhbmdsZSIgb3JnLWN1dC1zcGVjaWFsIChvcmctYXQtdGFibGUtcCldDQogICAgIFsiUGFz dGUgUmVjdGFuZ2xlIiBvcmctcGFzdGUtc3BlY2lhbCAob3JnLWF0LXRhYmxlLXApXQ0KICAgICBb IkZpbGwgUmVjdGFuZ2xlIiBvcmctdGFibGUtd3JhcC1yZWdpb24gKG9yZy1hdC10YWJsZS1wKV0p DQogICAgIi0tIg0KICAgICgiQ2FsY3VsYXRlIg0KICAgICBbIlNldCBDb2x1bW4gRm9ybXVsYSIg b3JnLXRhYmxlLWV2YWwtZm9ybXVsYSAob3JnLWF0LXRhYmxlLXApXQ0KICAgICBbIlNldCBGaWVs ZCBGb3JtdWxhIiAob3JnLXRhYmxlLWV2YWwtZm9ybXVsYSAnKDQpKSA6YWN0aXZlIChvcmctYXQt dGFibGUtcCkgOmtleXMgIkMtdSBDLWMgPSJdDQogICAgIFsiRWRpdCBGb3JtdWxhcyIgb3JnLWVk aXQtc3BlY2lhbCAob3JnLWF0LXRhYmxlLXApXQ0KICAgICAiLS0iDQogICAgIFsiUmVjYWxjdWxh dGUgbGluZSIgb3JnLXRhYmxlLXJlY2FsY3VsYXRlIChvcmctYXQtdGFibGUtcCldDQogICAgIFsi UmVjYWxjdWxhdGUgYWxsIiAobGFtYmRhICgpIChpbnRlcmFjdGl2ZSkgKG9yZy10YWJsZS1yZWNh bGN1bGF0ZSAnKDQpKSkgOmFjdGl2ZSAob3JnLWF0LXRhYmxlLXApIDprZXlzICJDLXUgQy1jICoi XQ0KICAgICBbIkl0ZXJhdGUgYWxsIiAobGFtYmRhICgpIChpbnRlcmFjdGl2ZSkgKG9yZy10YWJs ZS1yZWNhbGN1bGF0ZSAnKDE2KSkpIDphY3RpdmUgKG9yZy1hdC10YWJsZS1wKSA6a2V5cyAiQy11 IEMtdSBDLWMgKiJdDQogICAgICItLSINCiAgICAgWyJUb2dnbGUgUmVjYWxjdWxhdGUgTWFyayIg b3JnLXRhYmxlLXJvdGF0ZS1yZWNhbGMtbWFya3MgKG9yZy1hdC10YWJsZS1wKV0NCiAgICAgIi0t Ig0KICAgICBbIlN1bSBDb2x1bW4vUmVjdGFuZ2xlIiBvcmctdGFibGUtc3VtDQogICAgICAob3Ig KG9yZy1hdC10YWJsZS1wKSAob3JnLXJlZ2lvbi1hY3RpdmUtcCkpXQ0KICAgICBbIldoaWNoIENv bHVtbj8iIG9yZy10YWJsZS1jdXJyZW50LWNvbHVtbiAob3JnLWF0LXRhYmxlLXApXSkNCiAgICBb IkRlYnVnIEZvcm11bGFzIg0KICAgICBvcmctdGFibGUtdG9nZ2xlLWZvcm11bGEtZGVidWdnZXIN CiAgICAgOnN0eWxlIHRvZ2dsZSA6c2VsZWN0ZWQgKG9yZy1ib3VuZC1hbmQtdHJ1ZS1wIG9yZy10 YWJsZS1mb3JtdWxhLWRlYnVnKV0NCiAgICBbIlNob3cgQ29sL1JvdyBOdW1iZXJzIg0KICAgICBv cmctdGFibGUtdG9nZ2xlLWNvb3JkaW5hdGUtb3ZlcmxheXMNCiAgICAgOnN0eWxlIHRvZ2dsZQ0K ICAgICA6c2VsZWN0ZWQgKG9yZy1ib3VuZC1hbmQtdHJ1ZS1wIG9yZy10YWJsZS1vdmVybGF5LWNv b3JkaW5hdGVzKV0NCiAgICAiLS0iDQogICAgWyJDcmVhdGUiIG9yZy10YWJsZS1jcmVhdGUgKGFu ZCAobm90IChvcmctYXQtdGFibGUtcCkpDQoJCQkJICAgIG9yZy1lbmFibGUtdGFibGUtZWRpdG9y KV0NCiAgICBbIkNvbnZlcnQgUmVnaW9uIiBvcmctdGFibGUtY29udmVydC1yZWdpb24gKG5vdCAo b3JnLWF0LXRhYmxlLXAgJ2FueSkpXQ0KICAgIFsiSW1wb3J0IGZyb20gRmlsZSIgb3JnLXRhYmxl LWltcG9ydCAobm90IChvcmctYXQtdGFibGUtcCkpXQ0KICAgIFsiRXhwb3J0IHRvIEZpbGUiIG9y Zy10YWJsZS1leHBvcnQgKG9yZy1hdC10YWJsZS1wKV0NCiAgICAiLS0iDQogICAgWyJDcmVhdGUv Q29udmVydCBmcm9tL3RvIHRhYmxlLmVsIiBvcmctdGFibGUtY3JlYXRlLXdpdGgtdGFibGUuZWwg dF0pKQ0KDQooZWFzeS1tZW51LWRlZmluZSBvcmctb3JnLW1lbnUgb3JnLW1vZGUtbWFwICJPcmcg bWVudSINCiAgJygiT3JnIg0KICAgICgiU2hvdy9IaWRlIg0KICAgICBbIkN5Y2xlIFZpc2liaWxp dHkiIG9yZy1jeWNsZSA6YWN0aXZlIChvciAoYm9icCkgKG91dGxpbmUtb24taGVhZGluZy1wKSld DQogICAgIFsiQ3ljbGUgR2xvYmFsIFZpc2liaWxpdHkiIG9yZy1zaGlmdHRhYiA6YWN0aXZlIChu b3QgKG9yZy1hdC10YWJsZS1wKSldDQogICAgIFsiU3BhcnNlIFRyZWUuLi4iIG9yZy1zcGFyc2Ut dHJlZSB0XQ0KICAgICBbIlJldmVhbCBDb250ZXh0IiBvcmctcmV2ZWFsIHRdDQogICAgIFsiU2hv dyBBbGwiIHNob3ctYWxsIHRdDQogICAgICItLSINCiAgICAgWyJTdWJ0cmVlIHRvIGluZGlyZWN0 IGJ1ZmZlciIgb3JnLXRyZWUtdG8taW5kaXJlY3QtYnVmZmVyIHRdKQ0KICAgICItLSINCiAgICBb Ik5ldyBIZWFkaW5nIiBvcmctaW5zZXJ0LWhlYWRpbmcgdF0NCiAgICAoIk5hdmlnYXRlIEhlYWRp bmdzIg0KICAgICBbIlVwIiBvdXRsaW5lLXVwLWhlYWRpbmcgdF0NCiAgICAgWyJOZXh0IiBvdXRs aW5lLW5leHQtdmlzaWJsZS1oZWFkaW5nIHRdDQogICAgIFsiUHJldmlvdXMiIG91dGxpbmUtcHJl dmlvdXMtdmlzaWJsZS1oZWFkaW5nIHRdDQogICAgIFsiTmV4dCBTYW1lIExldmVsIiBvdXRsaW5l LWZvcndhcmQtc2FtZS1sZXZlbCB0XQ0KICAgICBbIlByZXZpb3VzIFNhbWUgTGV2ZWwiIG91dGxp bmUtYmFja3dhcmQtc2FtZS1sZXZlbCB0XQ0KICAgICAiLS0iDQogICAgIFsiSnVtcCIgb3JnLWdv dG8gdF0pDQogICAgKCJFZGl0IFN0cnVjdHVyZSINCiAgICAgWyJSZWZpbGUgU3VidHJlZSIgb3Jn LXJlZmlsZSAob3JnLWluLXN1YnRyZWUtbm90LXRhYmxlLXApXQ0KICAgICAiLS0iDQogICAgIFsi TW92ZSBTdWJ0cmVlIFVwIiBvcmctc2hpZnRtZXRhdXAgKG9yZy1pbi1zdWJ0cmVlLW5vdC10YWJs ZS1wKV0NCiAgICAgWyJNb3ZlIFN1YnRyZWUgRG93biIgb3JnLXNoaWZ0bWV0YWRvd24gKG9yZy1p bi1zdWJ0cmVlLW5vdC10YWJsZS1wKV0NCiAgICAgIi0tIg0KICAgICBbIkNvcHkgU3VidHJlZSIg IG9yZy1jb3B5LXNwZWNpYWwgKG9yZy1pbi1zdWJ0cmVlLW5vdC10YWJsZS1wKV0NCiAgICAgWyJD dXQgU3VidHJlZSIgIG9yZy1jdXQtc3BlY2lhbCAob3JnLWluLXN1YnRyZWUtbm90LXRhYmxlLXAp XQ0KICAgICBbIlBhc3RlIFN1YnRyZWUiICBvcmctcGFzdGUtc3BlY2lhbCAobm90IChvcmctYXQt dGFibGUtcCkpXQ0KICAgICAiLS0iDQogICAgIFsiQ2xvbmUgc3VidHJlZSwgc2hpZnQgdGltZSIg b3JnLWNsb25lLXN1YnRyZWUtd2l0aC10aW1lLXNoaWZ0IHRdDQogICAgICItLSINCiAgICAgWyJD b3B5IHZpc2libGUgdGV4dCIgIG9yZy1jb3B5LXZpc2libGUgdF0NCiAgICAgIi0tIg0KICAgICBb IlByb21vdGUgSGVhZGluZyIgb3JnLW1ldGFsZWZ0IChvcmctaW4tc3VidHJlZS1ub3QtdGFibGUt cCldDQogICAgIFsiUHJvbW90ZSBTdWJ0cmVlIiBvcmctc2hpZnRtZXRhbGVmdCAob3JnLWluLXN1 YnRyZWUtbm90LXRhYmxlLXApXQ0KICAgICBbIkRlbW90ZSBIZWFkaW5nIiAgb3JnLW1ldGFyaWdo dCAob3JnLWluLXN1YnRyZWUtbm90LXRhYmxlLXApXQ0KICAgICBbIkRlbW90ZSBTdWJ0cmVlIiAg b3JnLXNoaWZ0bWV0YXJpZ2h0IChvcmctaW4tc3VidHJlZS1ub3QtdGFibGUtcCldDQogICAgICIt LSINCiAgICAgWyJTb3J0IFJlZ2lvbi9DaGlsZHJlbiIgb3JnLXNvcnQgdF0NCiAgICAgIi0tIg0K ICAgICBbIkNvbnZlcnQgdG8gb2RkIGxldmVscyIgb3JnLWNvbnZlcnQtdG8tb2RkLWxldmVscyB0 XQ0KICAgICBbIkNvbnZlcnQgdG8gb2RkL2V2ZW4gbGV2ZWxzIiBvcmctY29udmVydC10by1vZGRl dmVuLWxldmVscyB0XSkNCiAgICAoIkVkaXRpbmciDQogICAgIFsiRW1waGFzaXMuLi4iIG9yZy1l bXBoYXNpemUgdF0NCiAgICAgWyJFZGl0IFNvdXJjZSBFeGFtcGxlIiBvcmctZWRpdC1zcGVjaWFs IHRdDQogICAgICItLSINCiAgICAgWyJGb290bm90ZSBuZXcvanVtcCIgb3JnLWZvb3Rub3RlLWFj dGlvbiB0XQ0KICAgICBbIkZvb3Rub3RlIGV4dHJhIiAob3JnLWZvb3Rub3RlLWFjdGlvbiB0KSA6 YWN0aXZlIHQgOmtleXMgIkMtdSBDLWMgQy14IGYiXSkNCiAgICAoIkFyY2hpdmUiDQogICAgIFsi QXJjaGl2ZSAoZGVmYXVsdCBtZXRob2QpIiBvcmctYXJjaGl2ZS1zdWJ0cmVlLWRlZmF1bHQgKG9y Zy1pbi1zdWJ0cmVlLW5vdC10YWJsZS1wKV0NCiAgICAgIi0tIg0KICAgICBbIk1vdmUgU3VidHJl ZSB0byBBcmNoaXZlIGZpbGUiIG9yZy1hZHZlcnRpemVkLWFyY2hpdmUtc3VidHJlZSAob3JnLWlu LXN1YnRyZWUtbm90LXRhYmxlLXApXQ0KICAgICBbIlRvZ2dsZSBBUkNISVZFIHRhZyIgb3JnLXRv Z2dsZS1hcmNoaXZlLXRhZyAob3JnLWluLXN1YnRyZWUtbm90LXRhYmxlLXApXQ0KICAgICBbIk1v dmUgc3VidHJlZSB0byBBcmNoaXZlIHNpYmxpbmciIG9yZy1hcmNoaXZlLXRvLWFyY2hpdmUtc2li bGluZyAob3JnLWluLXN1YnRyZWUtbm90LXRhYmxlLXApXQ0KICAgICApDQogICAgIi0tIg0KICAg ICgiSHlwZXJsaW5rcyINCiAgICAgWyJTdG9yZSBMaW5rIChHbG9iYWwpIiBvcmctc3RvcmUtbGlu ayB0XQ0KICAgICBbIkZpbmQgZXhpc3RpbmcgbGluayB0byBoZXJlIiBvcmctb2NjdXItbGluay1p bi1hZ2VuZGEtZmlsZXMgdF0NCiAgICAgWyJJbnNlcnQgTGluayIgb3JnLWluc2VydC1saW5rIHRd DQogICAgIFsiRm9sbG93IExpbmsiIG9yZy1vcGVuLWF0LXBvaW50IHRdDQogICAgICItLSINCiAg ICAgWyJOZXh0IGxpbmsiIG9yZy1uZXh0LWxpbmsgdF0NCiAgICAgWyJQcmV2aW91cyBsaW5rIiBv cmctcHJldmlvdXMtbGluayB0XQ0KICAgICAiLS0iDQogICAgIFsiRGVzY3JpcHRpdmUgTGlua3Mi DQogICAgICBvcmctdG9nZ2xlLWxpbmstZGlzcGxheQ0KICAgICAgOnN0eWxlIHJhZGlvDQogICAg ICA6c2VsZWN0ZWQgb3JnLWRlc2NyaXB0aXZlLWxpbmtzDQogICAgICBdDQogICAgIFsiTGl0ZXJh bCBMaW5rcyINCiAgICAgIG9yZy10b2dnbGUtbGluay1kaXNwbGF5DQogICAgICA6c3R5bGUgcmFk aW8NCiAgICAgIDpzZWxlY3RlZCAobm90IG9yZy1kZXNjcmlwdGl2ZS1saW5rcyldKQ0KICAgICIt LSINCiAgICAoIlRPRE8gTGlzdHMiDQogICAgIFsiVE9ETy9ET05FLy0iIG9yZy10b2RvIHRdDQog ICAgICgiU2VsZWN0IGtleXdvcmQiDQogICAgICBbIk5leHQga2V5d29yZCIgb3JnLXNoaWZ0cmln aHQgKG9yZy1hdC1oZWFkaW5nLXApXQ0KICAgICAgWyJQcmV2aW91cyBrZXl3b3JkIiBvcmctc2hp ZnRsZWZ0IChvcmctYXQtaGVhZGluZy1wKV0NCiAgICAgIFsiQ29tcGxldGUgS2V5d29yZCIgcGNv bXBsZXRlIChhc3NxIDp0b2RvLWtleXdvcmQgKG9yZy1jb250ZXh0KSldDQogICAgICBbIk5leHQg a2V5d29yZCBzZXQiIG9yZy1zaGlmdGNvbnRyb2xyaWdodCAoYW5kICg+IChsZW5ndGggb3JnLXRv ZG8tc2V0cykgMSkgKG9yZy1hdC1oZWFkaW5nLXApKV0NCiAgICAgIFsiUHJldmlvdXMga2V5d29y ZCBzZXQiIG9yZy1zaGlmdGNvbnRyb2xyaWdodCAoYW5kICg+IChsZW5ndGggb3JnLXRvZG8tc2V0 cykgMSkgKG9yZy1hdC1oZWFkaW5nLXApKV0pDQogICAgIFsiU2hvdyBUT0RPIFRyZWUiIG9yZy1z aG93LXRvZG8tdHJlZSA6YWN0aXZlIHQgOmtleXMgIkMtYyAvIHQiXQ0KICAgICBbIkdsb2JhbCBU T0RPIGxpc3QiIG9yZy10b2RvLWxpc3QgOmFjdGl2ZSB0IDprZXlzICJDLWMgYSB0Il0NCiAgICAg Ii0tIg0KICAgICBbIkVuZm9yY2UgZGVwZW5kZW5jaWVzIiAoY3VzdG9taXplLXZhcmlhYmxlICdv cmctZW5mb3JjZS10b2RvLWRlcGVuZGVuY2llcykNCiAgICAgIDpzZWxlY3RlZCBvcmctZW5mb3Jj ZS10b2RvLWRlcGVuZGVuY2llcyA6c3R5bGUgdG9nZ2xlIDphY3RpdmUgdF0NCiAgICAgIlNldHRp bmdzIGZvciB0cmVlIGF0IHBvaW50Ig0KICAgICBbIkRvIENoaWxkcmVuIHNlcXVlbnRpYWxseSIg b3JnLXRvZ2dsZS1vcmRlcmVkLXByb3BlcnR5IDpzdHlsZSByYWRpbw0KICAgICAgOnNlbGVjdGVk IChvcmctZW50cnktZ2V0IG5pbCAiT1JERVJFRCIpDQogICAgICA6YWN0aXZlIG9yZy1lbmZvcmNl LXRvZG8tZGVwZW5kZW5jaWVzIDprZXlzICJDLWMgQy14IG8iXQ0KICAgICBbIkRvIENoaWxkcmVu IHBhcmFsbGVsIiBvcmctdG9nZ2xlLW9yZGVyZWQtcHJvcGVydHkgOnN0eWxlIHJhZGlvDQogICAg ICA6c2VsZWN0ZWQgKG5vdCAob3JnLWVudHJ5LWdldCBuaWwgIk9SREVSRUQiKSkNCiAgICAgIDph Y3RpdmUgb3JnLWVuZm9yY2UtdG9kby1kZXBlbmRlbmNpZXMgOmtleXMgIkMtYyBDLXggbyJdDQog ICAgICItLSINCiAgICAgWyJTZXQgUHJpb3JpdHkiIG9yZy1wcmlvcml0eSB0XQ0KICAgICBbIlBy aW9yaXR5IFVwIiBvcmctc2hpZnR1cCB0XQ0KICAgICBbIlByaW9yaXR5IERvd24iIG9yZy1zaGlm dGRvd24gdF0NCiAgICAgIi0tIg0KICAgICBbIkdldCBuZXdzIGZyb20gYWxsIGZlZWRzIiBvcmct ZmVlZC11cGRhdGUtYWxsIHRdDQogICAgIFsiR28gdG8gdGhlIGluYm94IG9mIGEgZmVlZC4uLiIg b3JnLWZlZWQtZ290by1pbmJveCB0XQ0KICAgICBbIkN1c3RvbWl6ZSBmZWVkcyIgKGN1c3RvbWl6 ZS12YXJpYWJsZSAnb3JnLWZlZWQtYWxpc3QpIHRdKQ0KICAgICgiVEFHUyBhbmQgUHJvcGVydGll cyINCiAgICAgWyJTZXQgVGFncyIgb3JnLXNldC10YWdzLWNvbW1hbmQgKG5vdCAob3JnLWJlZm9y ZS1maXJzdC1oZWFkaW5nLXApKV0NCiAgICAgWyJDaGFuZ2UgdGFnIGluIHJlZ2lvbiIgb3JnLWNo YW5nZS10YWctaW4tcmVnaW9uIChvcmctcmVnaW9uLWFjdGl2ZS1wKV0NCiAgICAgIi0tIg0KICAg ICBbIlNldCBwcm9wZXJ0eSIgb3JnLXNldC1wcm9wZXJ0eSAobm90IChvcmctYmVmb3JlLWZpcnN0 LWhlYWRpbmctcCkpXQ0KICAgICBbIkNvbHVtbiB2aWV3IG9mIHByb3BlcnRpZXMiIG9yZy1jb2x1 bW5zIHRdDQogICAgIFsiSW5zZXJ0IENvbHVtbiBWaWV3IERCbG9jayIgb3JnLWluc2VydC1jb2x1 bW5zLWRibG9jayB0XSkNCiAgICAoIkRhdGVzIGFuZCBTY2hlZHVsaW5nIg0KICAgICBbIlRpbWVz dGFtcCIgb3JnLXRpbWUtc3RhbXAgKG5vdCAob3JnLWJlZm9yZS1maXJzdC1oZWFkaW5nLXApKV0N CiAgICAgWyJUaW1lc3RhbXAgKGluYWN0aXZlKSIgb3JnLXRpbWUtc3RhbXAtaW5hY3RpdmUgKG5v dCAob3JnLWJlZm9yZS1maXJzdC1oZWFkaW5nLXApKV0NCiAgICAgKCJDaGFuZ2UgRGF0ZSINCiAg ICAgIFsiMSBEYXkgTGF0ZXIiIG9yZy1zaGlmdHJpZ2h0IChvcmctYXQtdGltZXN0YW1wLXApXQ0K ICAgICAgWyIxIERheSBFYXJsaWVyIiBvcmctc2hpZnRsZWZ0IChvcmctYXQtdGltZXN0YW1wLXAp XQ0KICAgICAgWyIxIC4uLiBMYXRlciIgb3JnLXNoaWZ0dXAgKG9yZy1hdC10aW1lc3RhbXAtcCld DQogICAgICBbIjEgLi4uIEVhcmxpZXIiIG9yZy1zaGlmdGRvd24gKG9yZy1hdC10aW1lc3RhbXAt cCldKQ0KICAgICBbIkNvbXB1dGUgVGltZSBSYW5nZSIgb3JnLWV2YWx1YXRlLXRpbWUtcmFuZ2Ug dF0NCiAgICAgWyJTY2hlZHVsZSBJdGVtIiBvcmctc2NoZWR1bGUgKG5vdCAob3JnLWJlZm9yZS1m aXJzdC1oZWFkaW5nLXApKV0NCiAgICAgWyJEZWFkbGluZSIgb3JnLWRlYWRsaW5lIChub3QgKG9y Zy1iZWZvcmUtZmlyc3QtaGVhZGluZy1wKSldDQogICAgICItLSINCiAgICAgWyJDdXN0b20gdGlt ZSBmb3JtYXQiIG9yZy10b2dnbGUtdGltZS1zdGFtcC1vdmVybGF5cw0KICAgICAgOnN0eWxlIHJh ZGlvIDpzZWxlY3RlZCBvcmctZGlzcGxheS1jdXN0b20tdGltZXNdDQogICAgICItLSINCiAgICAg WyJHb3RvIENhbGVuZGFyIiBvcmctZ290by1jYWxlbmRhciB0XQ0KICAgICBbIkRhdGUgZnJvbSBD YWxlbmRhciIgb3JnLWRhdGUtZnJvbS1jYWxlbmRhciB0XQ0KICAgICAiLS0iDQogICAgIFsiU3Rh cnQvUmVzdGFydCBUaW1lciIgb3JnLXRpbWVyLXN0YXJ0IHRdDQogICAgIFsiUGF1c2UvQ29udGlu dWUgVGltZXIiIG9yZy10aW1lci1wYXVzZS1vci1jb250aW51ZSB0XQ0KICAgICBbIlN0b3AgVGlt ZXIiIG9yZy10aW1lci1wYXVzZS1vci1jb250aW51ZSA6YWN0aXZlIHQgOmtleXMgIkMtdSBDLWMg Qy14ICwiXQ0KICAgICBbIkluc2VydCBUaW1lciBTdHJpbmciIG9yZy10aW1lciB0XQ0KICAgICBb Ikluc2VydCBUaW1lciBJdGVtIiBvcmctdGltZXItaXRlbSB0XSkNCiAgICAoIkxvZ2dpbmcgd29y ayINCiAgICAgWyJDbG9jayBpbiIgb3JnLWNsb2NrLWluIDphY3RpdmUgdCA6a2V5cyAiQy1jIEMt eCBDLWkiXQ0KICAgICBbIlN3aXRjaCB0YXNrIiAobGFtYmRhICgpIChpbnRlcmFjdGl2ZSkgKG9y Zy1jbG9jay1pbiAnKDQpKSkgOmFjdGl2ZSB0IDprZXlzICJDLXUgQy1jIEMteCBDLWkiXQ0KICAg ICBbIkNsb2NrIG91dCIgb3JnLWNsb2NrLW91dCB0XQ0KICAgICBbIkNsb2NrIGNhbmNlbCIgb3Jn LWNsb2NrLWNhbmNlbCB0XQ0KICAgICAiLS0iDQogICAgIFsiTWFyayBhcyBkZWZhdWx0IHRhc2si IG9yZy1jbG9jay1tYXJrLWRlZmF1bHQtdGFzayB0XQ0KICAgICBbIkNsb2NrIGluLCBtYXJrIGFz IGRlZmF1bHQiIChsYW1iZGEgKCkgKGludGVyYWN0aXZlKSAob3JnLWNsb2NrLWluICcoMTYpKSkg OmFjdGl2ZSB0IDprZXlzICJDLXUgQy11IEMtYyBDLXggQy1pIl0NCiAgICAgWyJHb3RvIHJ1bm5p bmcgY2xvY2siIG9yZy1jbG9jay1nb3RvIHRdDQogICAgICItLSINCiAgICAgWyJEaXNwbGF5IHRp bWVzIiBvcmctY2xvY2stZGlzcGxheSB0XQ0KICAgICBbIkNyZWF0ZSBjbG9jayB0YWJsZSIgb3Jn LWNsb2NrLXJlcG9ydCB0XQ0KICAgICAiLS0iDQogICAgIFsiUmVjb3JkIERPTkUgdGltZSINCiAg ICAgIChwcm9nbiAoc2V0cSBvcmctbG9nLWRvbmUgKG5vdCBvcmctbG9nLWRvbmUpKQ0KCSAgICAg KG1lc3NhZ2UgIlN3aXRjaGluZyB0byAlcyB3aWxsICVzIHJlY29yZCBhIHRpbWVzdGFtcCINCgkJ ICAgICAgKGNhciBvcmctZG9uZS1rZXl3b3JkcykNCgkJICAgICAgKGlmIG9yZy1sb2ctZG9uZSAi YXV0b21hdGljYWxseSIgIm5vdCIpKSkNCiAgICAgIDpzdHlsZSB0b2dnbGUgOnNlbGVjdGVkIG9y Zy1sb2ctZG9uZV0pDQogICAgIi0tIg0KICAgIFsiQWdlbmRhIENvbW1hbmQuLi4iIG9yZy1hZ2Vu ZGEgdF0NCiAgICBbIlNldCBSZXN0cmljdGlvbiBMb2NrIiBvcmctYWdlbmRhLXNldC1yZXN0cmlj dGlvbi1sb2NrIHRdDQogICAgKCJGaWxlIExpc3QgZm9yIEFnZW5kYSIpDQogICAgKCJTcGVjaWFs IHZpZXdzIGN1cnJlbnQgZmlsZSINCiAgICAgWyJUT0RPIFRyZWUiICBvcmctc2hvdy10b2RvLXRy ZWUgdF0NCiAgICAgWyJDaGVjayBEZWFkbGluZXMiIG9yZy1jaGVjay1kZWFkbGluZXMgdF0NCiAg ICAgWyJUaW1lbGluZSIgb3JnLXRpbWVsaW5lIHRdDQogICAgIFsiVGFncy9Qcm9wZXJ0eSB0cmVl IiBvcmctbWF0Y2gtc3BhcnNlLXRyZWUgdF0pDQogICAgIi0tIg0KICAgIFsiRXhwb3J0L1B1Ymxp c2guLi4iIG9yZy1leHBvcnQtZGlzcGF0Y2ggdF0NCiAgICAoIkxhVGVYIg0KICAgICBbIk9yZyBD RExhVGVYIG1vZGUiIG9yZy1jZGxhdGV4LW1vZGUgOnN0eWxlIHRvZ2dsZQ0KICAgICAgOnNlbGVj dGVkIG9yZy1jZGxhdGV4LW1vZGVdDQogICAgIFsiSW5zZXJ0IEVudmlyb25tZW50IiBjZGxhdGV4 LWVudmlyb25tZW50IChmYm91bmRwICdjZGxhdGV4LWVudmlyb25tZW50KV0NCiAgICAgWyJJbnNl cnQgbWF0aCBzeW1ib2wiIGNkbGF0ZXgtbWF0aC1zeW1ib2wgKGZib3VuZHAgJ2NkbGF0ZXgtbWF0 aC1zeW1ib2wpXQ0KICAgICBbIk1vZGlmeSBtYXRoIHN5bWJvbCIgb3JnLWNkbGF0ZXgtbWF0aC1t b2RpZnkNCiAgICAgIChvcmctaW5zaWRlLUxhVGVYLWZyYWdtZW50LXApXQ0KICAgICBbIkluc2Vy dCBjaXRhdGlvbiIgb3JnLXJlZnRleC1jaXRhdGlvbiB0XQ0KICAgICAiLS0iDQogICAgIFsiVGVt cGxhdGUgZm9yIEJFQU1FUiIgKG9yZy1iZWFtZXItaW5zZXJ0LW9wdGlvbnMtdGVtcGxhdGUpIHRd KQ0KICAgICItLSINCiAgICAoIk1vYmlsZU9yZyINCiAgICAgWyJQdXNoIEZpbGVzIGFuZCBWaWV3 cyIgb3JnLW1vYmlsZS1wdXNoIHRdDQogICAgIFsiR2V0IENhcHR1cmVkIGFuZCBGbGFnZ2VkIiBv cmctbW9iaWxlLXB1bGwgdF0NCiAgICAgWyJGaW5kIEZMQUdHRUQgVGFza3MiIChvcmctYWdlbmRh IG5pbCAiPyIpIDphY3RpdmUgdCA6a2V5cyAiQy1jIGEgPyJdDQogICAgICItLSINCiAgICAgWyJT ZXR1cCIgKHByb2duIChyZXF1aXJlICdvcmctbW9iaWxlKSAoY3VzdG9taXplLWdyb3VwICdvcmct bW9iaWxlKSkgdF0pDQogICAgIi0tIg0KICAgICgiRG9jdW1lbnRhdGlvbiINCiAgICAgWyJTaG93 IFZlcnNpb24iIG9yZy12ZXJzaW9uIHRdDQogICAgIFsiSW5mbyBEb2N1bWVudGF0aW9uIiBvcmct aW5mbyB0XSkNCiAgICAoIkN1c3RvbWl6ZSINCiAgICAgWyJCcm93c2UgT3JnIEdyb3VwIiBvcmct Y3VzdG9taXplIHRdDQogICAgICItLSINCiAgICAgWyJFeHBhbmQgVGhpcyBNZW51IiBvcmctY3Jl YXRlLWN1c3RvbWl6ZS1tZW51DQogICAgICAoZmJvdW5kcCAnY3VzdG9taXplLW1lbnUtY3JlYXRl KV0pDQogICAgWyJTZW5kIGJ1ZyByZXBvcnQiIG9yZy1zdWJtaXQtYnVnLXJlcG9ydCB0XQ0KICAg ICItLSINCiAgICAoIlJlZnJlc2gvUmVsb2FkIg0KICAgICBbIlJlZnJlc2ggc2V0dXAgY3VycmVu dCBidWZmZXIiIG9yZy1tb2RlLXJlc3RhcnQgdF0NCiAgICAgWyJSZWxvYWQgT3JnIChhZnRlciB1 cGRhdGUpIiBvcmctcmVsb2FkIHRdDQogICAgIFsiUmVsb2FkIE9yZyB1bmNvbXBpbGVkIiAob3Jn LXJlbG9hZCB0KSA6YWN0aXZlIHQgOmtleXMgIkMtdSBDLWMgQy14ICEiXSkNCiAgICApKQ0KDQoo ZGVmdW4gb3JnLWluZm8gKCZvcHRpb25hbCBub2RlKQ0KICAiUmVhZCBkb2N1bWVudGF0aW9uIGZv ciBPcmctbW9kZSBpbiB0aGUgaW5mbyBzeXN0ZW0uDQpXaXRoIG9wdGlvbmFsIE5PREUsIGdvIGRp cmVjdGx5IHRvIHRoYXQgbm9kZS4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKGluZm8gKGZvcm1hdCAi KG9yZyklcyIgKG9yIG5vZGUgIiIpKSkpDQoNCjs7OyMjI2F1dG9sb2FkDQooZGVmdW4gb3JnLXN1 Ym1pdC1idWctcmVwb3J0ICgpDQogICJTdWJtaXQgYSBidWcgcmVwb3J0IG9uIE9yZy1tb2RlIHZp YSBtYWlsLg0KDQpEb24ndCBoZXNpdGF0ZSB0byByZXBvcnQgYW55IHByb2JsZW1zIG9yIGluYWNj dXJhdGUgZG9jdW1lbnRhdGlvbi4NCg0KSWYgeW91IGRvbid0IGhhdmUgc2V0dXAgc2VuZGluZyBt YWlsIGZyb20gKFgpRW1hY3MsIHBsZWFzZSBjb3B5IHRoZQ0Kb3V0cHV0IGJ1ZmZlciBpbnRvIHlv dXIgbWFpbCBwcm9ncmFtLCBhcyBpdCBnaXZlcyB1cyBpbXBvcnRhbnQNCmluZm9ybWF0aW9uIGFi b3V0IHlvdXIgT3JnLW1vZGUgdmVyc2lvbiBhbmQgY29uZmlndXJhdGlvbi4iDQogIChpbnRlcmFj dGl2ZSkNCiAgKHJlcXVpcmUgJ3JlcG9ydGVyKQ0KICAob3JnLWxvYWQtbW9kdWxlcy1tYXliZSkN CiAgKG9yZy1yZXF1aXJlLWF1dG9sb2FkZWQtbW9kdWxlcykNCiAgKGxldCAoKHJlcG9ydGVyLXBy b21wdC1mb3Itc3VtbWFyeS1wICJCdWcgcmVwb3J0IHN1YmplY3Q6ICIpKQ0KICAgIChyZXBvcnRl ci1zdWJtaXQtYnVnLXJlcG9ydA0KICAgICAiZW1hY3Mtb3JnbW9kZUBnbnUub3JnIg0KICAgICAo b3JnLXZlcnNpb24gbmlsICdmdWxsKQ0KICAgICAobGV0IChsaXN0KQ0KICAgICAgIChzYXZlLXdp bmRvdy1leGN1cnNpb24NCgkgKG9yZy1wb3AtdG8tYnVmZmVyLXNhbWUtd2luZG93IChnZXQtYnVm ZmVyLWNyZWF0ZSAiKldhcm4gYWJvdXQgcHJpdmFjeSoiKSkNCgkgKGRlbGV0ZS1vdGhlci13aW5k b3dzKQ0KCSAoZXJhc2UtYnVmZmVyKQ0KCSAoaW5zZXJ0ICJZb3UgYXJlIGFib3V0IHRvIHN1Ym1p dCBhIGJ1ZyByZXBvcnQgdG8gdGhlIE9yZy1tb2RlIG1haWxpbmcgbGlzdC4NCg0KV2Ugd291bGQg bGlrZSB0byBhZGQgeW91ciBmdWxsIE9yZy1tb2RlIGFuZCBPdXRsaW5lIGNvbmZpZ3VyYXRpb24g dG8gdGhlDQpidWcgcmVwb3J0LiAgVGhpcyBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIHdvcmsgb2Yg dGhlIG1haW50YWluZXIgYW5kDQpvdGhlciBleHBlcnRzIG9uIHRoZSBtYWlsaW5nIGxpc3QuDQoN CkhPV0VWRVIsIHNvbWUgdmFyaWFibGVzIHlvdSBoYXZlIGN1c3RvbWl6ZWQgbWF5IGNvbnRhaW4g cHJpdmF0ZQ0KaW5mb3JtYXRpb24uICBUaGUgbmFtZXMgb2YgY3VzdG9tZXJzLCBjb2xsZWFndWVz LCBvciBmcmllbmRzLCBtaWdodA0KYXBwZWFyIGluIHRoZSBmb3JtIG9mIGZpbGUgbmFtZXMsIHRh Z3MsIHRvZG8gc3RhdGVzLCBvciBzZWFyY2ggc3RyaW5ncy4NCklmIHlvdSBhbnN3ZXIgeWVzIHRv IHRoZSBwcm9tcHQsIHlvdSBtaWdodCB3YW50IHRvIGNoZWNrIGFuZCByZW1vdmUNCnN1Y2ggcHJp dmF0ZSBpbmZvcm1hdGlvbiBiZWZvcmUgc2VuZGluZyB0aGUgZW1haWwuIikNCgkgKGFkZC10ZXh0 LXByb3BlcnRpZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkgJyhmYWNlIG9yZy13YXJuaW5nKSkN CgkgKHdoZW4gKHllcy1vci1uby1wICJJbmNsdWRlIHlvdXIgT3JnLW1vZGUgY29uZmlndXJhdGlv biAiKQ0KCSAgIChtYXBhdG9tcw0KCSAgICAobGFtYmRhICh2KQ0KCSAgICAgIChhbmQgKGJvdW5k cCB2KQ0KCQkgICAoc3RyaW5nLW1hdGNoICJcXGBcXChvcmctXFx8b3V0bGluZS1cXCkiIChzeW1i b2wtbmFtZSB2KSkNCgkJICAgKG9yIChhbmQgKHN5bWJvbC12YWx1ZSB2KQ0KCQkJICAgIChzdHJp bmctbWF0Y2ggIlxcKC1ob29rXFx8LWZ1bmN0aW9uXFwpXFwnIiAoc3ltYm9sLW5hbWUgdikpKQ0K CQkgICAgICAgKGFuZA0KCQkJKGdldCB2ICdjdXN0b20tdHlwZSkgKGdldCB2ICdzdGFuZGFyZC12 YWx1ZSkNCgkJCShub3QgKGVxdWFsIChzeW1ib2wtdmFsdWUgdikgKGV2YWwgKGNhciAoZ2V0IHYg J3N0YW5kYXJkLXZhbHVlKSkpKSkpKQ0KCQkgICAocHVzaCB2IGxpc3QpKSkpKQ0KCSAoa2lsbC1i dWZmZXIgKGdldC1idWZmZXIgIipXYXJuIGFib3V0IHByaXZhY3kqIikpDQoJIGxpc3QpKQ0KICAg ICBuaWwgbmlsDQogICAgICJSZW1lbWJlciB0byBjb3ZlciB0aGUgYmFzaWNzLCB0aGF0IGlzLCB3 aGF0IHlvdSBleHBlY3RlZCB0byBoYXBwZW4gYW5kDQp3aGF0IGluIGZhY3QgZGlkIGhhcHBlbi4g IFlvdSBkb24ndCBrbm93IGhvdyB0byBtYWtlIGEgZ29vZCByZXBvcnQ/ICBTZWUNCg0KICAgICBo dHRwOi8vb3JnbW9kZS5vcmcvbWFudWFsL0ZlZWRiYWNrLmh0bWwjRmVlZGJhY2sNCg0KWW91ciBi dWcgcmVwb3J0IHdpbGwgYmUgcG9zdGVkIHRvIHRoZSBPcmctbW9kZSBtYWlsaW5nIGxpc3QuDQot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0iKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgKGlmIChyZS1zZWFy Y2gtYmFja3dhcmQgIl5cXChTdWJqZWN0OiBcXClPcmctbW9kZSB2ZXJzaW9uIFxcKC4qP1xcKTtb IFx0XSpcXCguKlxcKSIgbmlsIHQpDQoJICAocmVwbGFjZS1tYXRjaCAiXFwxQnVnOiBcXDMgW1xc Ml0iKSkpKSkNCg0KDQooZGVmdW4gb3JnLWluc3RhbGwtYWdlbmRhLWZpbGVzLW1lbnUgKCkNCiAg KGxldCAoKGJsIChidWZmZXItbGlzdCkpKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgKHdo aWxlIGJsDQoJKHNldC1idWZmZXIgKHBvcCBibCkpDQoJKGlmIChkZXJpdmVkLW1vZGUtcCAnb3Jn LW1vZGUpIChzZXRxIGJsIG5pbCkpKQ0KICAgICAgKHdoZW4gKGRlcml2ZWQtbW9kZS1wICdvcmct bW9kZSkNCgkoZWFzeS1tZW51LWNoYW5nZQ0KCSAnKCJPcmciKSAiRmlsZSBMaXN0IGZvciBBZ2Vu ZGEiDQoJIChhcHBlbmQNCgkgIChsaXN0DQoJICAgWyJFZGl0IEZpbGUgTGlzdCIgKG9yZy1lZGl0 LWFnZW5kYS1maWxlLWxpc3QpIHRdDQoJICAgWyJBZGQvTW92ZSBDdXJyZW50IEZpbGUgdG8gRnJv bnQgb2YgTGlzdCIgb3JnLWFnZW5kYS1maWxlLXRvLWZyb250IHRdDQoJICAgWyJSZW1vdmUgQ3Vy cmVudCBGaWxlIGZyb20gTGlzdCIgb3JnLXJlbW92ZS1maWxlIHRdDQoJICAgWyJDeWNsZSB0aHJv dWdoIGFnZW5kYSBmaWxlcyIgb3JnLWN5Y2xlLWFnZW5kYS1maWxlcyB0XQ0KCSAgIFsiT2NjdXIg aW4gYWxsIGFnZW5kYSBmaWxlcyIgb3JnLW9jY3VyLWluLWFnZW5kYS1maWxlcyB0XQ0KCSAgICIt LSIpDQoJICAobWFwY2FyICdvcmctZmlsZS1tZW51LWVudHJ5IChvcmctYWdlbmRhLWZpbGVzIHQp KSkpKSkpKQ0KDQo7Ozs7IERvY3VtZW50YXRpb24NCg0KKGRlZnVuIG9yZy1yZXF1aXJlLWF1dG9s b2FkZWQtbW9kdWxlcyAoKQ0KICAoaW50ZXJhY3RpdmUpDQogIChtYXBjICdyZXF1aXJlDQoJJyhv cmctYWdlbmRhIG9yZy1hcmNoaXZlIG9yZy1hdHRhY2ggb3JnLWNsb2NrIG9yZy1jb2x2aWV3IG9y Zy1pZA0KCQkgICAgIG9yZy10YWJsZSBvcmctdGltZXIpKSkNCg0KOzs7IyMjYXV0b2xvYWQNCihk ZWZ1biBvcmctcmVsb2FkICgmb3B0aW9uYWwgdW5jb21waWxlZCkNCiAgIlJlbG9hZCBhbGwgb3Jn IGxpc3AgZmlsZXMuDQpXaXRoIHByZWZpeCBhcmcgVU5DT01QSUxFRCwgbG9hZCB0aGUgdW5jb21w aWxlZCB2ZXJzaW9ucy4iDQogIChpbnRlcmFjdGl2ZSAiUCIpDQogIChyZXF1aXJlICdsb2FkaGlz dCkNCiAgKGxldCogKChvcmctZGlyICAgICAob3JnLWZpbmQtbGlicmFyeS1kaXIgIm9yZyIpKQ0K CSAoY29udHJpYi1kaXIgKG9yIChvcmctZmluZC1saWJyYXJ5LWRpciAib3JnLWNvbnRyaWJkaXIi KSBvcmctZGlyKSkNCgkgKGZlYXR1cmUtcmUgIl5cXChvcmdcXHxvYlxcfG94XFwpXFwoLS4qXFwp PyIpDQoJIChyZW1vdmUtcmUgKG1hcGNvbmNhdCAnaWRlbnRpdHkNCgkJCSAgICAgICAobWFwY2Fy IChsYW1iZGEgKGYpIChjb25jYXQgIl4iIGYgIiQiKSkNCgkJCQkgICAgICAgKGxpc3QgKGlmIChm ZWF0dXJlcCAneGVtYWNzKQ0KCQkJCQkJICJvcmctY29sdmlldyINCgkJCQkJICAgICAgICJvcmct Y29sdmlldy14ZW1hY3MiKQ0KCQkJCQkgICAgICJvcmciICJvcmctbG9hZGRlZnMiICJvcmctdmVy c2lvbiIpKQ0KCQkJICAgICAgICJcXHwiKSkNCgkgKGZlYXRzIChkZWxldGUtZHVwcw0KCQkgKG1h cGNhciAnZmlsZS1uYW1lLXNhbnMtZXh0ZW5zaW9uDQoJCQkgKG1hcGNhciAnZmlsZS1uYW1lLW5v bmRpcmVjdG9yeQ0KCQkJCSAoZGVscSBuaWwNCgkJCQkgICAgICAgKG1hcGNhciAnZmVhdHVyZS1m aWxlDQoJCQkJCSAgICAgICBmZWF0dXJlcykpKSkpKQ0KCSAobGZlYXQgKGFwcGVuZA0KCQkgKHNv cnQNCgkJICAoc2V0cSBmZWF0cw0KCQkJKGRlbHEgbmlsIChtYXBjYXINCgkJCQkgICAobGFtYmRh IChmKQ0KCQkJCSAgICAgKGlmIChhbmQgKHN0cmluZy1tYXRjaCBmZWF0dXJlLXJlIGYpDQoJCQkJ CSAgICAgIChub3QgKHN0cmluZy1tYXRjaCByZW1vdmUtcmUgZikpKQ0KCQkJCQkgZiBuaWwpKQ0K CQkJCSAgIGZlYXRzKSkpDQoJCSAgJ3N0cmluZy1sZXNzcCkNCgkJIChsaXN0ICJvcmctdmVyc2lv biIgIm9yZyIpKSkNCgkgKGxvYWQtc3VmZml4ZXMgKHdoZW4gKGJvdW5kcCAnbG9hZC1zdWZmaXhl cykgbG9hZC1zdWZmaXhlcykpDQoJIChsb2FkLXN1ZmZpeGVzIChpZiB1bmNvbXBpbGVkIChyZXZl cnNlIGxvYWQtc3VmZml4ZXMpIGxvYWQtc3VmZml4ZXMpKQ0KCSBsb2FkLXVuY29yZSBsb2FkLW1p c3NlcykNCiAgICAoc2V0cSBsb2FkLW1pc3Nlcw0KCSAgKGRlbHEgJ3QNCgkJKG1hcGNhciAobGFt YmRhIChmKQ0KCQkJICAob3IgKG9yZy1sb2FkLW5vZXJyb3ItbXVzdHN1ZmZpeCAoY29uY2F0IG9y Zy1kaXIgZikpDQoJCQkgICAgICAoYW5kIChzdHJpbmc9IG9yZy1kaXIgY29udHJpYi1kaXIpDQoJ CQkJICAgKG9yZy1sb2FkLW5vZXJyb3ItbXVzdHN1ZmZpeCAoY29uY2F0IGNvbnRyaWItZGlyIGYp KSkNCgkJCSAgICAgIChhbmQgKG9yZy1sb2FkLW5vZXJyb3ItbXVzdHN1ZmZpeCAoY29uY2F0IChv cmctZmluZC1saWJyYXJ5LWRpciBmKSBmKSkNCgkJCQkgICAoYWRkLXRvLWxpc3QgJ2xvYWQtdW5j b3JlIGYgJ2FwcGVuZCkNCgkJCQkgICAndCkNCgkJCSAgICAgIGYpKQ0KCQkJbGZlYXQpKSkNCiAg ICAoaWYgbG9hZC11bmNvcmUNCgkobWVzc2FnZSAiVGhlIGZvbGxvd2luZyBmZWF0dXJlJXMgZm91 bmQgaW4gbG9hZC1wYXRoLCBwbGVhc2UgY2hlY2sgaWYgdGhhdCdzIGNvcnJlY3Q6XG4lcyINCgkJ IChpZiAoPiAobGVuZ3RoIGxvYWQtdW5jb3JlKSAxKSAicyB3ZXJlIiAiIHdhcyIpIGxvYWQtdW5j b3JlKSkNCiAgICAoaWYgbG9hZC1taXNzZXMNCgkobWVzc2FnZSAiU29tZSBlcnJvciBvY2N1cnJl ZCB3aGlsZSByZWxvYWRpbmcgT3JnIGZlYXR1cmUlc1xuJXNcblBsZWFzZSBjaGVjayAqTWVzc2Fn ZXMqIVxuJXMiDQoJCSAoaWYgKD4gKGxlbmd0aCBsb2FkLW1pc3NlcykgMSkgInMiICIiKSBsb2Fk LW1pc3NlcyAob3JnLXZlcnNpb24gbmlsICdmdWxsKSkNCiAgICAgIChtZXNzYWdlICJTdWNjZXNz ZnVsbHkgcmVsb2FkZWQgT3JnXG4lcyIgKG9yZy12ZXJzaW9uIG5pbCAnZnVsbCkpKSkpDQoNCjs7 OyMjI2F1dG9sb2FkDQooZGVmdW4gb3JnLWN1c3RvbWl6ZSAoKQ0KICAiQ2FsbCB0aGUgY3VzdG9t aXplIGZ1bmN0aW9uIHdpdGggb3JnIGFzIGFyZ3VtZW50LiINCiAgKGludGVyYWN0aXZlKQ0KICAo b3JnLWxvYWQtbW9kdWxlcy1tYXliZSkNCiAgKG9yZy1yZXF1aXJlLWF1dG9sb2FkZWQtbW9kdWxl cykNCiAgKGN1c3RvbWl6ZS1icm93c2UgJ29yZykpDQoNCihkZWZ1biBvcmctY3JlYXRlLWN1c3Rv bWl6ZS1tZW51ICgpDQogICJDcmVhdGUgYSBmdWxsIGN1c3RvbWl6YXRpb24gbWVudSBmb3IgT3Jn LW1vZGUsIGluc2VydCBpdCBpbnRvIHRoZSBtZW51LiINCiAgKGludGVyYWN0aXZlKQ0KICAob3Jn LWxvYWQtbW9kdWxlcy1tYXliZSkNCiAgKG9yZy1yZXF1aXJlLWF1dG9sb2FkZWQtbW9kdWxlcykN CiAgKGlmIChmYm91bmRwICdjdXN0b21pemUtbWVudS1jcmVhdGUpDQogICAgICAocHJvZ24NCgko ZWFzeS1tZW51LWNoYW5nZQ0KCSAnKCJPcmciKSAiQ3VzdG9taXplIg0KCSBgKFsiQnJvd3NlIE9y ZyBncm91cCIgb3JnLWN1c3RvbWl6ZSB0XQ0KCSAgICItLSINCgkgICAsKGN1c3RvbWl6ZS1tZW51 LWNyZWF0ZSAnb3JnKQ0KCSAgIFsiU2V0IiBDdXN0b20tc2V0IHRdDQoJICAgWyJTYXZlIiBDdXN0 b20tc2F2ZSB0XQ0KCSAgIFsiUmVzZXQgdG8gQ3VycmVudCIgQ3VzdG9tLXJlc2V0LWN1cnJlbnQg dF0NCgkgICBbIlJlc2V0IHRvIFNhdmVkIiBDdXN0b20tcmVzZXQtc2F2ZWQgdF0NCgkgICBbIlJl c2V0IHRvIFN0YW5kYXJkIFNldHRpbmdzIiBDdXN0b20tcmVzZXQtc3RhbmRhcmQgdF0pKQ0KCSht ZXNzYWdlICJcIk9yZ1wiLW1lbnUgbm93IGNvbnRhaW5zIGZ1bGwgY3VzdG9taXphdGlvbiBtZW51 IikpDQogICAgKGVycm9yICJDYW5ub3QgZXhwYW5kIG1lbnUgKG91dGRhdGVkIHZlcnNpb24gb2Yg Y3VzLWVkaXQuZWwpIikpKQ0KDQo7Ozs7IE1pc2NlbGxhbmVvdXMgc3R1ZmYNCg0KOzs7IEdlbmVy YWxseSB1c2VmdWwgZnVuY3Rpb25zDQoNCihkZWZ1biBvcmctZ2V0LWF0LWJvbCAocHJvcGVydHkp DQogICJHZXQgdGV4dCBwcm9wZXJ0eSBQUk9QRVJUWSBhdCBiZWdpbm5pbmcgb2YgbGluZS4iDQog IChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQtYXQtYm9sKSBwcm9wZXJ0eSkpDQoNCihkZWZ1biBv cmctZmluZC10ZXh0LXByb3BlcnR5LWluLXN0cmluZyAocHJvcCBzKQ0KICAiUmV0dXJuIHRoZSBm aXJzdCBub24tbmlsIHZhbHVlIG9mIHByb3BlcnR5IFBST1AgaW4gc3RyaW5nIFMuIg0KICAob3Ig KGdldC10ZXh0LXByb3BlcnR5IDAgcHJvcCBzKQ0KICAgICAgKGdldC10ZXh0LXByb3BlcnR5IChv ciAobmV4dC1zaW5nbGUtcHJvcGVydHktY2hhbmdlIDAgcHJvcCBzKSAwKQ0KCQkJIHByb3Agcykp KQ0KDQooZGVmdW4gb3JnLWRpc3BsYXktd2FybmluZyAobWVzc2FnZSkgOzsgQ29waWVkIGZyb20g RW1hY3MtTXVzZQ0KICAiRGlzcGxheSB0aGUgZ2l2ZW4gTUVTU0FHRSBhcyBhIHdhcm5pbmcuIg0K ICAoaWYgKGZib3VuZHAgJ2Rpc3BsYXktd2FybmluZykNCiAgICAgIChkaXNwbGF5LXdhcm5pbmcg J29yZyBtZXNzYWdlDQogICAgICAgICAgICAgICAgICAgICAgIChpZiAoZmVhdHVyZXAgJ3hlbWFj cykgJ3dhcm5pbmcgOndhcm5pbmcpKQ0KICAgIChsZXQgKChidWYgKGdldC1idWZmZXItY3JlYXRl ICIqT3JnIHdhcm5pbmdzKiIpKSkNCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1Zg0KICAg ICAgICAoZ290by1jaGFyIChwb2ludC1tYXgpKQ0KICAgICAgICAoaW5zZXJ0ICJXYXJuaW5nIChP cmcpOiAiIG1lc3NhZ2UpDQogICAgICAgICh1bmxlc3MgKGJvbHApDQogICAgICAgICAgKG5ld2xp bmUpKSkNCiAgICAgIChkaXNwbGF5LWJ1ZmZlciBidWYpDQogICAgICAoc2l0LWZvciAwKSkpKQ0K DQooZGVmdW4gb3JnLWV2YWwgKGZvcm0pDQogICJFdmFsIEZPUk0gYW5kIHJldHVybiByZXN1bHQu Ig0KICAoY29uZGl0aW9uLWNhc2UgZXJyb3INCiAgICAgIChldmFsIGZvcm0pDQogICAgKGVycm9y IChmb3JtYXQgIiUlIVtFcnJvcjogJXNdIiBlcnJvcikpKSkNCg0KKGRlZnVuIG9yZy1pbi1jbG9j a3RhYmxlLXAgKCkNCiAgIkNoZWNrIGlmIHRoZSBjdXJzb3IgaXMgaW4gYSBjbG9ja3RhYmxlLiIN CiAgKGxldCAoKHBvcyAocG9pbnQpKSBzdGFydCkNCiAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAg IChlbmQtb2YtbGluZSAxKQ0KICAgICAgKGFuZCAocmUtc2VhcmNoLWJhY2t3YXJkICJeWyBcdF0q I1xcK0JFR0lOOlsgXHRdK2Nsb2NrdGFibGUiIG5pbCB0KQ0KCSAgIChzZXRxIHN0YXJ0IChtYXRj aC1iZWdpbm5pbmcgMCkpDQoJICAgKHJlLXNlYXJjaC1mb3J3YXJkICJeWyBcdF0qI1xcK0VORDou KiIgbmlsIHQpDQoJICAgKD49IChtYXRjaC1lbmQgMCkgcG9zKQ0KCSAgIHN0YXJ0KSkpKQ0KDQoo ZGVmdW4gb3JnLWluLWNvbW1lbnRlZC1saW5lICgpDQogICJJcyBwb2ludCBpbiBhIGxpbmUgc3Rh cnRpbmcgd2l0aCBgIyc/Ig0KICAoZXF1YWwgKGNoYXItYWZ0ZXIgKHBvaW50LWF0LWJvbCkpID8j KSkNCg0KKGRlZnVuIG9yZy1pbi1pbmRlbnRlZC1jb21tZW50LWxpbmUgKCkNCiAgIklzIHBvaW50 IGluIGEgbGluZSBzdGFydGluZyB3aXRoIGAjJyBhZnRlciBzb21lIHdoaXRlIHNwYWNlPyINCiAg KHNhdmUtZXhjdXJzaW9uDQogICAgKHNhdmUtbWF0Y2gtZGF0YQ0KICAgICAgKGdvdG8tY2hhciAo cG9pbnQtYXQtYm9sKSkNCiAgICAgIChsb29raW5nLWF0ICJbIFx0XSojIikpKSkNCg0KKGRlZnVu IG9yZy1pbi12ZXJiYXRpbS1lbXBoYXNpcyAoKQ0KICAoc2F2ZS1tYXRjaC1kYXRhDQogICAgKGFu ZCAob3JnLWluLXJlZ2V4cCBvcmctZW1waC1yZSAyKQ0KCSAoPj0gKHBvaW50KSAobWF0Y2gtYmVn aW5uaW5nIDMpKQ0KCSAoPD0gKHBvaW50KSAobWF0Y2gtZW5kIDQpKQ0KCSAobWVtYmVyIChtYXRj aC1zdHJpbmcgMykgJygiPSIgIn4iKSkpKSkNCg0KKGRlZnVuIG9yZy1nb3RvLW1hcmtlci1vci1i bWsgKG1hcmtlciAmb3B0aW9uYWwgYm9va21hcmspDQogICJHbyB0byBNQVJLRVIsIHdpZGVuIGlm IG5lY2Vzc2FyeS4gIFdoZW4gbWFya2VyIGlzIG5vdCBsaXZlLCB0cnkgQk9PS01BUksuIg0KICAo aWYgKGFuZCBtYXJrZXIgKG1hcmtlci1idWZmZXIgbWFya2VyKQ0KCSAgIChidWZmZXItbGl2ZS1w IChtYXJrZXItYnVmZmVyIG1hcmtlcikpKQ0KICAgICAgKHByb2duDQoJKG9yZy1wb3AtdG8tYnVm ZmVyLXNhbWUtd2luZG93IChtYXJrZXItYnVmZmVyIG1hcmtlcikpDQoJKGlmIChvciAoPiBtYXJr ZXIgKHBvaW50LW1heCkpICg8IG1hcmtlciAocG9pbnQtbWluKSkpDQoJICAgICh3aWRlbikpDQoJ KGdvdG8tY2hhciBtYXJrZXIpDQoJKG9yZy1zaG93LWNvbnRleHQgJ29yZy1nb3RvKSkNCiAgICAo aWYgYm9va21hcmsNCgkoYm9va21hcmstanVtcCBib29rbWFyaykNCiAgICAgIChlcnJvciAiQ2Fu bm90IGZpbmQgbG9jYXRpb24iKSkpKQ0KDQooZGVmdW4gb3JnLXF1b3RlLWNzdi1maWVsZCAocykN CiAgIlF1b3RlIGZpZWxkIGZvciBpbmNsdXNpb24gaW4gQ1NWIG1hdGVyaWFsLiINCiAgKGlmIChz dHJpbmctbWF0Y2ggIltcIixdIiBzKQ0KICAgICAgKGNvbmNhdCAiXCIiIChtYXBjb25jYXQgJ2lk ZW50aXR5IChzcGxpdC1zdHJpbmcgcyAiXCIiKSAiXCJcIiIpICJcIiIpDQogICAgcykpDQoNCihk ZWZ1biBvcmctZm9yY2Utc2VsZi1pbnNlcnQgKE4pDQogICJOZWVkZWQgdG8gZW5mb3JjZSBzZWxm LWluc2VydCB1bmRlciByZW1hcHBpbmcuIg0KICAoaW50ZXJhY3RpdmUgInAiKQ0KICAoc2VsZi1p bnNlcnQtY29tbWFuZCBOKSkNCg0KKGRlZnVuIG9yZy1zdHJpbmctd2lkdGggKHMpDQogICJDb21w dXRlIHdpZHRoIG9mIHN0cmluZywgaWdub3JpbmcgaW52aXNpYmxlIGNoYXJhY3RlcnMuDQpUaGlz IGlnbm9yZXMgY2hhcmFjdGVyIHdpdGggaW52aXNpYmlsaXR5IHByb3BlcnR5IGBvcmctbGluaycs IGFuZCBhbHNvDQpjaGFyYWN0ZXJzIHdpdGggcHJvcGVydHkgYG9yZy1jd2lkdGgnLCBiZWNhdXNl IHRoZXNlIHdpbGwgYmVjb21lIGludmlzaWJsZQ0KdXBvbiB0aGUgbmV4dCBmb250aWZpY2F0aW9u IHJvdW5kLiINCiAgKGxldCAoYiBsKQ0KICAgICh3aGVuIChvciAoZXEgdCBidWZmZXItaW52aXNp YmlsaXR5LXNwZWMpDQoJICAgICAgKGFzc3EgJ29yZy1saW5rIGJ1ZmZlci1pbnZpc2liaWxpdHkt c3BlYykpDQogICAgICAod2hpbGUgKHNldHEgYiAodGV4dC1wcm9wZXJ0eS1hbnkgMCAobGVuZ3Ro IHMpDQoJCQkJCSdpbnZpc2libGUgJ29yZy1saW5rIHMpKQ0KCShzZXRxIHMgKGNvbmNhdCAoc3Vi c3RyaW5nIHMgMCBiKQ0KCQkJKHN1YnN0cmluZyBzIChvciAobmV4dC1zaW5nbGUtcHJvcGVydHkt Y2hhbmdlDQoJCQkJCSAgYiAnaW52aXNpYmxlIHMpIChsZW5ndGggcykpKSkpKSkNCiAgICAod2hp bGUgKHNldHEgYiAodGV4dC1wcm9wZXJ0eS1hbnkgMCAobGVuZ3RoIHMpICdvcmctY3dpZHRoIHQg cykpDQogICAgICAoc2V0cSBzIChjb25jYXQgKHN1YnN0cmluZyBzIDAgYikNCgkJICAgICAgKHN1 YnN0cmluZyBzIChvciAobmV4dC1zaW5nbGUtcHJvcGVydHktY2hhbmdlDQoJCQkJCWIgJ29yZy1j d2lkdGggcykgKGxlbmd0aCBzKSkpKSkpDQogICAgKHNldHEgbCAoc3RyaW5nLXdpZHRoIHMpIGIg LTEpDQogICAgKHdoaWxlIChzZXRxIGIgKHRleHQtcHJvcGVydHktYW55ICgxKyBiKSAobGVuZ3Ro IHMpICdvcmctZHdpZHRoIHQgcykpDQogICAgICAoc2V0cSBsICgtIGwgKGdldC10ZXh0LXByb3Bl cnR5IGIgJ29yZy1kd2lkdGgtbiBzKSkpKQ0KICAgIGwpKQ0KDQooZGVmdW4gb3JnLXNob3J0ZW4t c3RyaW5nIChzIG1heGxlbmd0aCkNCiAgIlNob3J0ZW4gc3RyaW5nIFMgc28gdGh0IGl0IGlzIG5v IGxvbmdlciB0aGFuIE1BWExFTkdUSCBjaGFyYWN0ZXJzLg0KSWYgdGhlIHN0cmluZyBpcyBzaG9y dGVyIG9yIGhhcyBsZW5ndGggTUFYTEVOR1RILCBqdXN0IHJldHVybiB0aGUNCm9yaWdpbmFsIHN0 cmluZy4gIElmIGl0IGlzIGxvbmdlciwgdGhlIGZ1bmN0aW9ucyBmaW5kcyBhIHNwYWNlIGluIHRo ZQ0Kc3RyaW5nLCBicmVha3MgdGhpcyBzdHJpbmcgb2ZmIGF0IHRoYXQgbG9jYXRpb25zIGFuZCBh ZGRzIHRocmVlIGRvdHMNCmFzIGVsbGlwc2lzLiAgSW5jbHVkaW5nIHRoZSBlbGxpcHNpcywgdGhl IHN0cmluZyB3aWxsIG5vdCBiZSBsb25nZXINCnRoYW4gTUFYTEVOR1RILiAgSWYgZmluZGluZyBh IGdvb2QgYnJlYWtpbmcgcG9pbnQgaW4gdGhlIHN0cmluZyBkb2VzDQpub3Qgd29yaywgdGhlIHN0 cmluZyBpcyBqdXN0IGNob3BwZWQgb2ZmIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkDQppZiBuZWNl c3NhcnkuIg0KICAoaWYgKDw9IChsZW5ndGggcykgbWF4bGVuZ3RoKQ0KICAgICAgcw0KICAgIChs ZXQqICgobiAobWF4ICgtIG1heGxlbmd0aCA0KSAxKSkNCgkgICAocmUgKGNvbmNhdCAiXFxgXFwo LlxcezEsIiAoaW50LXRvLXN0cmluZyBuKSAiXFx9W14gXVxcKVxcKFsgXVxcfFxcJ1xcKSIpKSkN CiAgICAgIChpZiAoc3RyaW5nLW1hdGNoIHJlIHMpDQoJICAoY29uY2F0IChtYXRjaC1zdHJpbmcg MSBzKSAiLi4uIikNCgkoY29uY2F0IChzdWJzdHJpbmcgcyAwIChtYXggKC0gbWF4bGVuZ3RoIDMp IDApKSAiLi4uIikpKSkpDQoNCihkZWZ1biBvcmctZ2V0LWluZGVudGF0aW9uICgmb3B0aW9uYWwg bGluZSkNCiAgIkdldCB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbGluZSwgaW50ZXJw cmV0aW5nIHRhYnMuDQpXaGVuIExJTkUgaXMgZ2l2ZW4sIGFzc3VtZSBpdCByZXByZXNlbnRzIGEg bGluZSBhbmQgY29tcHV0ZSBpdHMgaW5kZW50YXRpb24uIg0KICAoaWYgbGluZQ0KICAgICAgKGlm IChzdHJpbmctbWF0Y2ggIl4gKiIgKG9yZy1yZW1vdmUtdGFicyBsaW5lKSkNCgkgIChtYXRjaC1l bmQgMCkpDQogICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMSkN CiAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdCIpDQogICAgICAoY3VycmVudC1jb2x1bW4p KSkpDQoNCihkZWZ1biBvcmctZ2V0LXN0cmluZy1pbmRlbnRhdGlvbiAocykNCiAgIldoYXQgaW5k ZW50YXRpb24gaGFzIFMgZHVlIHRvIFNQQUNFIGFuZCBUQUIgYXQgdGhlIGJlZ2lubmluZyBvZiB0 aGUgc3RyaW5nPyINCiAgKGxldCAoKG4gLTEpIChpIDApICh3IHRhYi13aWR0aCkgYykNCiAgICAo Y2F0Y2ggJ2V4aXQNCiAgICAgICh3aGlsZSAoPCAoc2V0cSBuICgxKyBuKSkgKGxlbmd0aCBzKSkN Cgkoc2V0cSBjIChhcmVmIHMgbikpDQoJKGNvbmQgKCg9IGMgP1wgKSAoc2V0cSBpICgxKyBpKSkp DQoJICAgICAgKCg9IGMgP1x0KSAoc2V0cSBpICgqICgvICgrIHcgaSkgdykgdykpKQ0KCSAgICAg ICh0ICh0aHJvdyAnZXhpdCB0KSkpKSkNCiAgICBpKSkNCg0KKGRlZnVuIG9yZy1yZW1vdmUtdGFi cyAocyAmb3B0aW9uYWwgd2lkdGgpDQogICJSZXBsYWNlIHRhYnVsYXRvcnMgaW4gUyB3aXRoIHNw YWNlcy4NCkFzc3VtZXMgdGhhdCBzIGlzIGEgc2luZ2xlIGxpbmUsIHN0YXJ0aW5nIGluIGNvbHVt biAwLiINCiAgKHNldHEgd2lkdGggKG9yIHdpZHRoIHRhYi13aWR0aCkpDQogICh3aGlsZSAoc3Ry aW5nLW1hdGNoICJcdCIgcykNCiAgICAoc2V0cSBzIChyZXBsYWNlLW1hdGNoDQoJICAgICAobWFr ZS1zdHJpbmcNCgkgICAgICAoLSAoKiB3aWR0aCAoLyAoKyAobWF0Y2gtYmVnaW5uaW5nIDApIHdp ZHRoKSB3aWR0aCkpDQoJCSAobWF0Y2gtYmVnaW5uaW5nIDApKSA/XCApDQoJICAgICB0IHQgcykp KQ0KICBzKQ0KDQooZGVmdW4gb3JnLWZpeC1pbmRlbnRhdGlvbiAobGluZSBpbmQpDQogICJGaXgg aW5kZW50YXRpb24gaW4gTElORS4NCklORCBpcyBhIGNvbnMgY2VsbCB3aXRoIHRhcmdldCBhbmQg bWluaW11bSBpbmRlbnRhdGlvbi4NCklmIHRoZSBjdXJyZW50IGluZGVudGF0aW9uIGluIExJTkUg aXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtLA0KbGVhdmUgaXQgYWxvbmUuICBJZiBpdCBpcyBs YXJnZXIgdGhhbiBpbmQsIHNldCBpdCB0byB0aGUgdGFyZ2V0LiINCiAgKGxldCogKChsIChvcmct cmVtb3ZlLXRhYnMgbGluZSkpDQoJIChpIChvcmctZ2V0LWluZGVudGF0aW9uIGwpKQ0KCSAoaTEg KGNhciBpbmQpKSAoaTIgKGNkciBpbmQpKSkNCiAgICAoaWYgKD49IGkgaTIpIChzZXRxIGwgKHN1 YnN0cmluZyBsaW5lIGkyKSkpDQogICAgKGlmICg+IGkxIDApDQoJKGNvbmNhdCAobWFrZS1zdHJp bmcgaTEgP1wgKSBsKQ0KICAgICAgbCkpKQ0KDQooZGVmdW4gb3JnLXJlbW92ZS1pbmRlbnRhdGlv biAoY29kZSAmb3B0aW9uYWwgbikNCiAgIlJlbW92ZSB0aGUgbWF4aW11bSBjb21tb24gaW5kZW50 YXRpb24gZnJvbSB0aGUgbGluZXMgaW4gQ09ERS4NCk4gbWF5IG9wdGlvbmFsbHkgYmUgdGhlIG51 bWJlciBvZiBzcGFjZXMgdG8gcmVtb3ZlLiINCiAgKHdpdGgtdGVtcC1idWZmZXINCiAgICAoaW5z ZXJ0IGNvZGUpDQogICAgKG9yZy1kby1yZW1vdmUtaW5kZW50YXRpb24gbikNCiAgICAoYnVmZmVy LXN0cmluZykpKQ0KDQooZGVmdW4gb3JnLWRvLXJlbW92ZS1pbmRlbnRhdGlvbiAoJm9wdGlvbmFs IG4pDQogICJSZW1vdmUgdGhlIG1heGltdW0gY29tbW9uIGluZGVudGF0aW9uIGZyb20gdGhlIGJ1 ZmZlci4iDQogICh1bnRhYmlmeSAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkNCiAgKGxldCAoKG1p biAxMDAwMCkgcmUpDQogICAgKGlmIG4NCgkoc2V0cSBtaW4gbikNCiAgICAgIChnb3RvLWNoYXIg KHBvaW50LW1pbikpDQogICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJeICpbXiBcbl0i IG5pbCB0KQ0KCShzZXRxIG1pbiAobWluIG1pbiAoMS0gKC0gKG1hdGNoLWVuZCAwKSAobWF0Y2gt YmVnaW5uaW5nIDApKSkpKSkpDQogICAgKHVubGVzcyAob3IgKD0gbWluIDApICg9IG1pbiAxMDAw MCkpDQogICAgICAoc2V0cSByZSAoZm9ybWF0ICJeIFxceyVkXFx9IiBtaW4pKQ0KICAgICAgKGdv dG8tY2hhciAocG9pbnQtbWluKSkNCiAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgcmUg bmlsIHQpDQoJKHJlcGxhY2UtbWF0Y2ggIiIpDQoJKGVuZC1vZi1saW5lIDEpKQ0KICAgICAgbWlu KSkpDQoNCihkZWZ1biBvcmctZmlsbC10ZW1wbGF0ZSAodGVtcGxhdGUgYWxpc3QpDQogICJGaW5k IGVhY2ggJWtleSBvZiBBTElTVCBpbiBURU1QTEFURSBhbmQgcmVwbGFjZSBpdC4iDQogIChsZXQg KChjYXNlLWZvbGQtc2VhcmNoIG5pbCkNCgllbnRyeSBrZXkgdmFsdWUpDQogICAgKHNldHEgYWxp c3QgKHNvcnQgKGNvcHktc2VxdWVuY2UgYWxpc3QpDQoJCSAgICAgIChsYW1iZGEgKGEgYikgKDwg KGxlbmd0aCAoY2FyIGEpKSAobGVuZ3RoIChjYXIgYikpKSkpKQ0KICAgICh3aGlsZSAoc2V0cSBl bnRyeSAocG9wIGFsaXN0KSkNCiAgICAgIChzZXRxIHRlbXBsYXRlDQoJICAgIChyZXBsYWNlLXJl Z2V4cC1pbi1zdHJpbmcNCgkgICAgIChjb25jYXQgIiUiIChyZWdleHAtcXVvdGUgKGNhciBlbnRy eSkpKQ0KCSAgICAgKG9yIChjZHIgZW50cnkpICIiKSB0ZW1wbGF0ZSB0IHQpKSkNCiAgICB0ZW1w bGF0ZSkpDQoNCihkZWZ1biBvcmctYmFzZS1idWZmZXIgKGJ1ZmZlcikNCiAgIlJldHVybiB0aGUg YmFzZSBidWZmZXIgb2YgQlVGRkVSLCBpZiBpdCBoYXMgb25lLiAgRWxzZSByZXR1cm4gdGhlIGJ1 ZmZlci4iDQogIChpZiAobm90IGJ1ZmZlcikNCiAgICAgIGJ1ZmZlcg0KICAgIChvciAoYnVmZmVy LWJhc2UtYnVmZmVyIGJ1ZmZlcikNCglidWZmZXIpKSkNCg0KKGRlZnVuIG9yZy10cmltIChzKQ0K ICAiUmVtb3ZlIHdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nIGFuZCBlbmQgb2Ygc3RyaW5nLiINCiAg KGlmIChzdHJpbmctbWF0Y2ggIlxcYFsgXHRcblxyXSsiIHMpIChzZXRxIHMgKHJlcGxhY2UtbWF0 Y2ggIiIgdCB0IHMpKSkNCiAgKGlmIChzdHJpbmctbWF0Y2ggIlsgXHRcblxyXStcXCciIHMpIChz ZXRxIHMgKHJlcGxhY2UtbWF0Y2ggIiIgdCB0IHMpKSkNCiAgcykNCg0KKGRlZnVuIG9yZy13cmFw IChzdHJpbmcgJm9wdGlvbmFsIHdpZHRoIGxpbmVzKQ0KICAiV3JhcCBzdHJpbmcgdG8gZWl0aGVy IGEgbnVtYmVyIG9mIGxpbmVzLCBvciBhIHdpZHRoIGluIGNoYXJhY3RlcnMuDQpJZiBXSURUSCBp cyBub24tbmlsLCB0aGUgc3RyaW5nIGlzIHdyYXBwZWQgdG8gdGhhdCB3aWR0aCwgaG93ZXZlciBt YW55IGxpbmVzDQp0aGF0IGNvc3RzLiAgSWYgdGhlcmUgaXMgYSB3b3JkIGxvbmdlciB0aGFuIFdJ RFRILCB0aGUgdGV4dCBpcyBhY3R1YWxseQ0Kd3JhcHBlZCB0byB0aGUgbGVuZ3RoIG9mIHRoYXQg d29yZC4NCklGIFdJRFRIIGlzIG5pbCBhbmQgTElORVMgaXMgbm9uLW5pbCwgdGhlIHN0cmluZyBp cyBmb3JjZWQgaW50byBhdCBtb3N0IHRoYXQNCm1hbnkgbGluZXMsIHdoYXRldmVyIHdpZHRoIHRo YXQgdGFrZXMuDQpUaGUgcmV0dXJuIHZhbHVlIGlzIGEgbGlzdCBvZiBsaW5lcywgd2l0aG91dCBu ZXdsaW5lcyBhdCB0aGUgZW5kLiINCiAgKGxldCogKCh3b3JkcyAob3JnLXNwbGl0LXN0cmluZyBz dHJpbmcgIlsgXHRcbl0rIikpDQoJIChtYXh3b3JkIChhcHBseSAnbWF4IChtYXBjYXIgJ29yZy1z dHJpbmctd2lkdGggd29yZHMpKSkNCgkgdyBsbCkNCiAgICAoY29uZCAod2lkdGgNCgkgICAob3Jn LWRvLXdyYXAgd29yZHMgKG1heCBtYXh3b3JkIHdpZHRoKSkpDQoJICAobGluZXMNCgkgICAoc2V0 cSB3IG1heHdvcmQpDQoJICAgKHNldHEgbGwgKG9yZy1kby13cmFwIHdvcmRzIG1heHdvcmQpKQ0K CSAgIChpZiAoPD0gKGxlbmd0aCBsbCkgbGluZXMpDQoJICAgICAgIGxsDQoJICAgICAoc2V0cSBs bCB3b3JkcykNCgkgICAgICh3aGlsZSAoPiAobGVuZ3RoIGxsKSBsaW5lcykNCgkgICAgICAgKHNl dHEgdyAoMSsgdykpDQoJICAgICAgIChzZXRxIGxsIChvcmctZG8td3JhcCB3b3JkcyB3KSkpDQoJ ICAgICBsbCkpDQoJICAodCAoZXJyb3IgIkNhbm5vdCB3cmFwIHRoaXMiKSkpKSkNCg0KKGRlZnVu IG9yZy1kby13cmFwICh3b3JkcyB3aWR0aCkNCiAgIkNyZWF0ZSBsaW5lcyBvZiBtYXhpbXVtIHdp ZHRoIFdJRFRIIChpbiBjaGFyYWN0ZXJzKSBmcm9tIHdvcmQgbGlzdCBXT1JEUy4iDQogIChsZXQg KGxpbmVzIGxpbmUpDQogICAgKHdoaWxlIHdvcmRzDQogICAgICAoc2V0cSBsaW5lIChwb3Agd29y ZHMpKQ0KICAgICAgKHdoaWxlIChhbmQgd29yZHMgKDwgKCsgKGxlbmd0aCBsaW5lKSAobGVuZ3Ro IChjYXIgd29yZHMpKSkgd2lkdGgpKQ0KCShzZXRxIGxpbmUgKGNvbmNhdCBsaW5lICIgIiAocG9w IHdvcmRzKSkpKQ0KICAgICAgKHNldHEgbGluZXMgKHB1c2ggbGluZSBsaW5lcykpKQ0KICAgIChu cmV2ZXJzZSBsaW5lcykpKQ0KDQooZGVmdW4gb3JnLXNwbGl0LXN0cmluZyAoc3RyaW5nICZvcHRp b25hbCBzZXBhcmF0b3JzKQ0KICAiU3BsaXRzIFNUUklORyBpbnRvIHN1YnN0cmluZ3MgYXQgU0VQ QVJBVE9SUy4NCk5vIGVtcHR5IHN0cmluZ3MgYXJlIHJldHVybmVkIGlmIHRoZXJlIGFyZSBtYXRj aGVzIGF0IHRoZSBiZWdpbm5pbmcNCmFuZCBlbmQgb2Ygc3RyaW5nLiINCiAgKGxldCAoKHJleHAg KG9yIHNlcGFyYXRvcnMgIlsgXGZcdFxuXHJcdl0rIikpDQoJKHN0YXJ0IDApDQoJbm90Zmlyc3QN CgkobGlzdCBuaWwpKQ0KICAgICh3aGlsZSAoYW5kIChzdHJpbmctbWF0Y2ggcmV4cCBzdHJpbmcN CgkJCSAgICAgIChpZiAoYW5kIG5vdGZpcnN0DQoJCQkJICAgICAgICg9IHN0YXJ0IChtYXRjaC1i ZWdpbm5pbmcgMCkpDQoJCQkJICAgICAgICg8IHN0YXJ0IChsZW5ndGggc3RyaW5nKSkpDQoJCQkJ ICAoMSsgc3RhcnQpIHN0YXJ0KSkNCgkJKDwgKG1hdGNoLWJlZ2lubmluZyAwKSAobGVuZ3RoIHN0 cmluZykpKQ0KICAgICAgKHNldHEgbm90Zmlyc3QgdCkNCiAgICAgIChvciAoZXEgKG1hdGNoLWJl Z2lubmluZyAwKSAwKQ0KCSAgKGFuZCAoZXEgKG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5k IDApKQ0KCSAgICAgICAoZXEgKG1hdGNoLWJlZ2lubmluZyAwKSBzdGFydCkpDQoJICAoc2V0cSBs aXN0DQoJCShjb25zIChzdWJzdHJpbmcgc3RyaW5nIHN0YXJ0IChtYXRjaC1iZWdpbm5pbmcgMCkp DQoJCSAgICAgIGxpc3QpKSkNCiAgICAgIChzZXRxIHN0YXJ0IChtYXRjaC1lbmQgMCkpKQ0KICAg IChvciAoZXEgc3RhcnQgKGxlbmd0aCBzdHJpbmcpKQ0KCShzZXRxIGxpc3QNCgkgICAgICAoY29u cyAoc3Vic3RyaW5nIHN0cmluZyBzdGFydCkNCgkJICAgIGxpc3QpKSkNCiAgICAobnJldmVyc2Ug bGlzdCkpKQ0KDQooZGVmdW4gb3JnLXF1b3RlLXZlcnQgKHMpDQogICJSZXBsYWNlIFwifFwiIHdp dGggXCJcXHZlcnRcIi4iDQogICh3aGlsZSAoc3RyaW5nLW1hdGNoICJ8IiBzKQ0KICAgIChzZXRx IHMgKHJlcGxhY2UtbWF0Y2ggIlxcdmVydCIgdCB0IHMpKSkNCiAgcykNCg0KKGRlZnVuIG9yZy11 dWlkZ2VuLXAgKHMpDQogICJJcyBTIGFuIElEIGNyZWF0ZWQgYnkgVVVJREdFTj8iDQogIChzdHJp bmctbWF0Y2ggIlxcYFswLTlhLWZdXFx7OFxcfS1bMC05YS1mXVxcezRcXH0tWzAtOWEtZl1cXHs0 XFx9LVswLTlhLWZdXFx7NFxcfS1bMC05YS1mXVxcezEyXFx9XFwnIiAoZG93bmNhc2UgcykpKQ0K DQooZGVmdW4gb3JnLWluLXNyYy1ibG9jay1wICgmb3B0aW9uYWwgaW5zaWRlKQ0KICAiV2hldGhl ciBwb2ludCBpcyBpbiBhIGNvZGUgc291cmNlIGJsb2NrLg0KV2hlbiBJTlNJREUgaXMgbm9uLW5p bCwgZG9uJ3QgY29uc2lkZXIgd2UgYXJlIHdpdGhpbiBhIHNyYyBibG9jaw0Kd2hlbiBwb2ludCBp cyBhdCAjK0JFR0lOX1NSQyBvciAjK0VORF9TUkMuIg0KICAobGV0ICgoY2FzZS1mb2xkLXNlYXJj aCB0KSBvdikNCiAgICAob3IgKGFuZCAoc2V0cSBvdiAob3ZlcmxheXMtYXQgKHBvaW50KSkpDQoJ ICAgICAobWVtcSAnb3JnLWJsb2NrLWJhY2tncm91bmQNCgkJICAgKG92ZXJsYXktcHJvcGVydGll cyAoY2FyIG92KSkpKQ0KCShhbmQgKG5vdCBpbnNpZGUpDQoJICAgICAoc2F2ZS1tYXRjaC1kYXRh DQoJICAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCQkgKGJlZ2lubmluZy1vZi1saW5lKQ0KCQkgKGxv b2tpbmctYXQgIi4qI1xcK1xcKGJlZ2luXFx8ZW5kXFwpX3NyYyIpKSkpKSkpDQoNCihkZWZ1biBv cmctY29udGV4dCAoKQ0KICAiUmV0dXJuIGEgbGlzdCBvZiBjb250ZXh0cyBvZiB0aGUgY3VycmVu dCBjdXJzb3IgcG9zaXRpb24uDQpJZiBzZXZlcmFsIGNvbnRleHRzIGFwcGx5LCBhbGwgYXJlIHJl dHVybmVkLg0KRWFjaCBjb250ZXh0IGVudHJ5IGlzIGEgbGlzdCB3aXRoIGEgc3ltYm9sIG5hbWlu ZyB0aGUgY29udGV4dCwgYW5kDQp0d28gcG9zaXRpb25zIGluZGljYXRpbmcgc3RhcnQgYW5kIGVu ZCBvZiB0aGUgY29udGV4dC4gIFBvc3NpYmxlDQpjb250ZXh0cyBhcmU6DQoNCjpoZWFkbGluZSAg ICAgICAgIGFueXdoZXJlIGluIGEgaGVhZGxpbmUNCjpoZWFkbGluZS1zdGFycyAgIG9uIHRoZSBs ZWFkaW5nIHN0YXJzIGluIGEgaGVhZGxpbmUNCjp0b2RvLWtleXdvcmQgICAgIG9uIGEgVE9ETyBr ZXl3b3JkIChpbmNsdWRpbmcgRE9ORSkgaW4gYSBoZWFkbGluZQ0KOnRhZ3MgICAgICAgICAgICAg b24gdGhlIFRBR1MgaW4gYSBoZWFkbGluZQ0KOnByaW9yaXR5ICAgICAgICAgb24gdGhlIHByaW9y aXR5IGNvb2tpZSBpbiBhIGhlYWRsaW5lDQo6aXRlbSAgICAgICAgICAgICBvbiB0aGUgZmlyc3Qg bGluZSBvZiBhIHBsYWluIGxpc3QgaXRlbQ0KOml0ZW0tYnVsbGV0ICAgICAgb24gdGhlIGJ1bGxl dC9udW1iZXIgb2YgYSBwbGFpbiBsaXN0IGl0ZW0NCjpjaGVja2JveCAgICAgICAgIG9uIHRoZSBj aGVja2JveCBpbiBhIHBsYWluIGxpc3QgaXRlbQ0KOnRhYmxlICAgICAgICAgICAgaW4gYW4gb3Jn LW1vZGUgdGFibGUNCjp0YWJsZS1zcGVjaWFsICAgIG9uIGEgc3BlY2lhbCBmaWxlZCBpbiBhIHRh YmxlDQo6dGFibGUtdGFibGUgICAgICBpbiBhIHRhYmxlLmVsIHRhYmxlDQo6Y2xvY2t0YWJsZSAg ICAgICBpbiBhIGNsb2NrdGFibGUNCjpzcmMtYmxvY2sgICAgICAgIGluIGEgc291cmNlIGJsb2Nr DQo6bGluayAgICAgICAgICAgICBvbiBhIGh5cGVybGluaw0KOmtleXdvcmQgICAgICAgICAgb24g YSBrZXl3b3JkOiBTQ0hFRFVMRUQsIERFQURMSU5FLCBDTE9TRSwgQ09NTUVOVCwgUVVPVEUuDQo6 dGFyZ2V0ICAgICAgICAgICBvbiBhIDw8dGFyZ2V0Pj4NCjpyYWRpby10YXJnZXQgICAgIG9uIGEg PDw8cmFkaW8tdGFyZ2V0Pj4+DQo6bGF0ZXgtZnJhZ21lbnQgICBvbiBhIExhVGVYIGZyYWdtZW50 DQo6bGF0ZXgtcHJldmlldyAgICBvbiBhIExhVGVYIGZyYWdtZW50IHdpdGggb3ZlcmxhaWQgcHJl dmlldyBpbWFnZQ0KDQpUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIHBvc2l0aW9uIHRvIGJlIHZp c2libGUgYmVjYXVzZSBpdCB1c2VzIGZvbnQtbG9jaw0KZmFjZXMgYXMgYSBoZWxwIHRvIHJlY29n bml6ZSB0aGUgZm9sbG93aW5nIGNvbnRleHRzOiA6dGFibGUtc3BlY2lhbCwgOmxpbmssDQphbmQg OmtleXdvcmQuIg0KICAobGV0KiAoKGYgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2ZhY2Up KQ0KCSAoZmFjZXMgKGlmIChsaXN0cCBmKSBmIChsaXN0IGYpKSkNCgkgKGNhc2UtZm9sZC1zZWFy Y2ggdCkNCgkgKHAgKHBvaW50KSkgY2xpc3QgbykNCiAgICA7OyBGaXJzdCB0aGUgbGFyZ2UgY29u dGV4dA0KICAgIChjb25kDQogICAgICgob3JnLWF0LWhlYWRpbmctcCB0KQ0KICAgICAgKHB1c2gg KGxpc3QgOmhlYWRsaW5lIChwb2ludC1hdC1ib2wpIChwb2ludC1hdC1lb2wpKSBjbGlzdCkNCiAg ICAgICh3aGVuIChwcm9nbg0KCSAgICAgIChiZWdpbm5pbmctb2YtbGluZSAxKQ0KCSAgICAgIChs b29raW5nLWF0IG9yZy10b2RvLWxpbmUtdGFncy1yZWdleHApKQ0KCShwdXNoIChvcmctcG9pbnQt aW4tZ3JvdXAgcCAxIDpoZWFkbGluZS1zdGFycykgY2xpc3QpDQoJKHB1c2ggKG9yZy1wb2ludC1p bi1ncm91cCBwIDIgOnRvZG8ta2V5d29yZCkgY2xpc3QpDQoJKHB1c2ggKG9yZy1wb2ludC1pbi1n cm91cCBwIDQgOnRhZ3MpIGNsaXN0KSkNCiAgICAgIChnb3RvLWNoYXIgcCkNCiAgICAgIChza2lw LWNoYXJzLWJhY2t3YXJkICJeW1xuXHIgXHQiKSAob3IgKGJvYnApIChiYWNrd2FyZC1jaGFyIDEp KQ0KICAgICAgKGlmIChsb29raW5nLWF0ICJcXFsjW0EtWjAtOV1cXF0iKQ0KCSAgKHB1c2ggKG9y Zy1wb2ludC1pbi1ncm91cCBwIDAgOnByaW9yaXR5KSBjbGlzdCkpKQ0KDQogICAgICgob3JnLWF0 LWl0ZW0tcCkNCiAgICAgIChwdXNoIChvcmctcG9pbnQtaW4tZ3JvdXAgcCAyIDppdGVtLWJ1bGxl dCkgY2xpc3QpDQogICAgICAocHVzaCAobGlzdCA6aXRlbSAocG9pbnQtYXQtYm9sKQ0KCQkgIChz YXZlLWV4Y3Vyc2lvbiAob3JnLWVuZC1vZi1pdGVtKSAocG9pbnQpKSkNCgkgICAgY2xpc3QpDQog ICAgICAoYW5kIChvcmctYXQtaXRlbS1jaGVja2JveC1wKQ0KCSAgIChwdXNoIChvcmctcG9pbnQt aW4tZ3JvdXAgcCAwIDpjaGVja2JveCkgY2xpc3QpKSkNCg0KICAgICAoKG9yZy1hdC10YWJsZS1w KQ0KICAgICAgKHB1c2ggKGxpc3QgOnRhYmxlIChvcmctdGFibGUtYmVnaW4pIChvcmctdGFibGUt ZW5kKSkgY2xpc3QpDQogICAgICAoaWYgKG1lbXEgJ29yZy1mb3JtdWxhIGZhY2VzKQ0KCSAgKHB1 c2ggKGxpc3QgOnRhYmxlLXNwZWNpYWwNCgkJICAgICAgKHByZXZpb3VzLXNpbmdsZS1wcm9wZXJ0 eS1jaGFuZ2UgcCAnZmFjZSkNCgkJICAgICAgKG5leHQtc2luZ2xlLXByb3BlcnR5LWNoYW5nZSBw ICdmYWNlKSkgY2xpc3QpKSkNCiAgICAgKChvcmctYXQtdGFibGUtcCAnYW55KQ0KICAgICAgKHB1 c2ggKGxpc3QgOnRhYmxlLXRhYmxlKSBjbGlzdCkpKQ0KICAgIChnb3RvLWNoYXIgcCkNCg0KICAg IChsZXQgKChjYXNlLWZvbGQtc2VhcmNoIHQpKQ0KICAgICAgOzsgTmV3IHRoZSAibWVkaXVtIiBj b250ZXh0czogY2xvY2t0YWJsZXMsIHNvdXJjZSBibG9ja3MNCiAgICAgIChjb25kICgob3JnLWlu LWNsb2NrdGFibGUtcCkNCgkgICAgIChwdXNoIChsaXN0IDpjbG9ja3RhYmxlDQoJCQkgKGFuZCAo b3IgKGxvb2tpbmctYXQgIiNcXCtCRUdJTjogY2xvY2t0YWJsZSIpDQoJCQkJICAoc2VhcmNoLWJh Y2t3YXJkICIjK0JFR0lOOiBjbG9ja3RhYmxlIiBuaWwgdCkpDQoJCQkgICAgICAobWF0Y2gtYmVn aW5uaW5nIDApKQ0KCQkJIChhbmQgKHJlLXNlYXJjaC1mb3J3YXJkICIjXFwrRU5EOj8iIG5pbCB0 KQ0KCQkJICAgICAgKG1hdGNoLWVuZCAwKSkpIGNsaXN0KSkNCgkgICAgKChvcmctaW4tc3JjLWJs b2NrLXApDQoJICAgICAocHVzaCAobGlzdCA6c3JjLWJsb2NrDQoJCQkgKGFuZCAob3IgKGxvb2tp bmctYXQgIiNcXCtCRUdJTl9TUkMiKQ0KCQkJCSAgKHNlYXJjaC1iYWNrd2FyZCAiIytCRUdJTl9T UkMiIG5pbCB0KSkNCgkJCSAgICAgIChtYXRjaC1iZWdpbm5pbmcgMCkpDQoJCQkgKGFuZCAoc2Vh cmNoLWZvcndhcmQgIiMrRU5EX1NSQyIgbmlsIHQpDQoJCQkgICAgICAobWF0Y2gtYmVnaW5uaW5n IDApKSkgY2xpc3QpKSkpDQogICAgKGdvdG8tY2hhciBwKQ0KDQogICAgOzsgTm93IHRoZSBzbWFs bCBjb250ZXh0DQogICAgKGNvbmQNCiAgICAgKChvcmctYXQtdGltZXN0YW1wLXApDQogICAgICAo cHVzaCAob3JnLXBvaW50LWluLWdyb3VwIHAgMCA6dGltZXN0YW1wKSBjbGlzdCkpDQogICAgICgo bWVtcSAnb3JnLWxpbmsgZmFjZXMpDQogICAgICAocHVzaCAobGlzdCA6bGluaw0KCQkgIChwcmV2 aW91cy1zaW5nbGUtcHJvcGVydHktY2hhbmdlIHAgJ2ZhY2UpDQoJCSAgKG5leHQtc2luZ2xlLXBy b3BlcnR5LWNoYW5nZSBwICdmYWNlKSkgY2xpc3QpKQ0KICAgICAoKG1lbXEgJ29yZy1zcGVjaWFs LWtleXdvcmQgZmFjZXMpDQogICAgICAocHVzaCAobGlzdCA6a2V5d29yZA0KCQkgIChwcmV2aW91 cy1zaW5nbGUtcHJvcGVydHktY2hhbmdlIHAgJ2ZhY2UpDQoJCSAgKG5leHQtc2luZ2xlLXByb3Bl cnR5LWNoYW5nZSBwICdmYWNlKSkgY2xpc3QpKQ0KICAgICAoKG9yZy1hdC10YXJnZXQtcCkNCiAg ICAgIChwdXNoIChvcmctcG9pbnQtaW4tZ3JvdXAgcCAwIDp0YXJnZXQpIGNsaXN0KQ0KICAgICAg KGdvdG8tY2hhciAoMS0gKG1hdGNoLWJlZ2lubmluZyAwKSkpDQogICAgICAoaWYgKGxvb2tpbmct YXQgb3JnLXJhZGlvLXRhcmdldC1yZWdleHApDQoJICAocHVzaCAob3JnLXBvaW50LWluLWdyb3Vw IHAgMCA6cmFkaW8tdGFyZ2V0KSBjbGlzdCkpDQogICAgICAoZ290by1jaGFyIHApKQ0KICAgICAo KHNldHEgbyAoY2FyIChkZWxxIG5pbA0KCQkJIChtYXBjYXINCgkJCSAgKGxhbWJkYSAoeCkNCgkJ CSAgICAoaWYgKG1lbXEgeCBvcmctbGF0ZXgtZnJhZ21lbnQtaW1hZ2Utb3ZlcmxheXMpIHgpKQ0K CQkJICAob3ZlcmxheXMtYXQgKHBvaW50KSkpKSkpDQogICAgICAocHVzaCAobGlzdCA6bGF0ZXgt ZnJhZ21lbnQNCgkJICAob3ZlcmxheS1zdGFydCBvKSAob3ZlcmxheS1lbmQgbykpIGNsaXN0KQ0K ICAgICAgKHB1c2ggKGxpc3QgOmxhdGV4LXByZXZpZXcNCgkJICAob3ZlcmxheS1zdGFydCBvKSAo b3ZlcmxheS1lbmQgbykpIGNsaXN0KSkNCiAgICAgKChvcmctaW5zaWRlLUxhVGVYLWZyYWdtZW50 LXApDQogICAgICA7OyBGSVhNRTogcG9zaXRpb25zIHdyb25nLg0KICAgICAgKHB1c2ggKGxpc3Qg OmxhdGV4LWZyYWdtZW50IChwb2ludCkgKHBvaW50KSkgY2xpc3QpKSkNCg0KICAgIChzZXRxIGNs aXN0IChucmV2ZXJzZSAoZGVscSBuaWwgY2xpc3QpKSkNCiAgICBjbGlzdCkpDQoNCjs7IEZJWE1F OiBDb21wYXJlIHdpdGggYXQtcmVnZXhwLXAgRG8gd2UgbmVlZCBib3RoPw0KKGRlZnVuIG9yZy1p bi1yZWdleHAgKHJlICZvcHRpb25hbCBubGluZXMgdmlzdWFsbHkpDQogICJDaGVjayBpZiBwb2lu dCBpcyBpbnNpZGUgYSBtYXRjaCBvZiByZWdleHAuDQpOb3JtYWxseSBvbmx5IHRoZSBjdXJyZW50 IGxpbmUgaXMgY2hlY2tlZCwgYnV0IHlvdSBjYW4gaW5jbHVkZSBOTElORVMgZXh0cmENCmxpbmVz IGJvdGggYmVmb3JlIGFuZCBhZnRlciBwb2ludCBpbnRvIHRoZSBzZWFyY2guDQpJZiBWSVNVQUxM WSBpcyBzZXQsIHJlcXVpcmUgdGhhdCB0aGUgY3Vyc29yIGlzIG5vdCBhZnRlciB0aGUgbWF0Y2gg YnV0DQpyZWFsbHkgb24sIHNvIHRoYXQgdGhlIGJsb2NrIHZpc3VhbGx5IGlzIG9uIHRoZSBtYXRj aC4iDQogIChjYXRjaCAnZXhpdA0KICAgIChsZXQgKChwb3MgKHBvaW50KSkNCiAgICAgICAgICAo ZW9sIChwb2ludC1hdC1lb2wgKCsgMSAob3IgbmxpbmVzIDApKSkpDQoJICAoaW5jIChpZiB2aXN1 YWxseSAxIDApKSkNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCShiZWdpbm5pbmctb2YtbGluZSAo LSAxIChvciBubGluZXMgMCkpKQ0KCSh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgcmUgZW9sIHQp DQoJICAoaWYgKGFuZCAoPD0gKG1hdGNoLWJlZ2lubmluZyAwKSBwb3MpDQoJCSAgICg+PSAoKyBp bmMgKG1hdGNoLWVuZCAwKSkgcG9zKSkNCgkgICAgICAodGhyb3cgJ2V4aXQgKGNvbnMgKG1hdGNo LWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApKSkpKSkpKSkNCg0KKGRlZnVuIG9yZy1hdC1yZWdl eHAtcCAocmVnZXhwKQ0KICAiSXMgcG9pbnQgaW5zaWRlIGEgbWF0Y2ggb2YgUkVHRVhQIGluIHRo ZSBjdXJyZW50IGxpbmU/Ig0KICAoY2F0Y2ggJ2V4aXQNCiAgICAoc2F2ZS1leGN1cnNpb24NCiAg ICAgIChsZXQgKChwb3MgKHBvaW50KSkgKGVuZCAocG9pbnQtYXQtZW9sKSkpDQoJKGJlZ2lubmlu Zy1vZi1saW5lIDEpDQoJKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCByZWdleHAgZW5kIHQpDQoJ ICAoaWYgKGFuZCAoPD0gKG1hdGNoLWJlZ2lubmluZyAwKSBwb3MpDQoJCSAgICg+PSAobWF0Y2gt ZW5kIDApIHBvcykpDQoJICAgICAgKHRocm93ICdleGl0IHQpKSkNCgluaWwpKSkpDQoNCihkZWZ1 biBvcmctYmV0d2Vlbi1yZWdleHBzLXAgKHN0YXJ0LXJlIGVuZC1yZSAmb3B0aW9uYWwgbGltLXVw IGxpbS1kb3duKQ0KICAiTm9uLW5pbCB3aGVuIHBvaW50IGlzIGJldHdlZW4gbWF0Y2hlcyBvZiBT VEFSVC1SRSBhbmQgRU5ELVJFLg0KDQpBbHNvIHJldHVybiBhIG5vbi1uaWwgdmFsdWUgd2hlbiBw b2ludCBpcyBvbiBvbmUgb2YgdGhlIG1hdGNoZXMuDQoNCk9wdGlvbmFsIGFyZ3VtZW50cyBMSU0t VVAgYW5kIExJTS1ET1dOIGJvdW5kIHRoZSBzZWFyY2g7IHRoZXkgYXJlDQpidWZmZXIgcG9zaXRp b25zLiAgRGVmYXVsdCB2YWx1ZXMgYXJlIHRoZSBwb3NpdGlvbnMgb2YgaGVhZGxpbmVzDQpzdXJy b3VuZGluZyB0aGUgcG9pbnQuDQoNClRoZSBmdW5jdGlvbnMgcmV0dXJucyBhIGNvbnMgY2VsbCB3 aG9zZSBjYXIgKHJlc3AuIGNkcikgaXMgdGhlDQpwb3NpdGlvbiBiZWZvcmUgU1RBUlQtUkUgKHJl c3AuIGFmdGVyIEVORC1SRSkuIg0KICAoc2F2ZS1tYXRjaC1kYXRhDQogICAgKGxldCAoKHBvcyAo cG9pbnQpKQ0KCSAgKGxpbWl0LXVwIChvciBsaW0tdXAgKHNhdmUtZXhjdXJzaW9uIChvdXRsaW5l LXByZXZpb3VzLWhlYWRpbmcpKSkpDQoJICAobGltaXQtZG93biAob3IgbGltLWRvd24gKHNhdmUt ZXhjdXJzaW9uIChvdXRsaW5lLW5leHQtaGVhZGluZykpKSkNCgkgIGJlZyBlbmQpDQogICAgICAo c2F2ZS1leGN1cnNpb24NCgk7OyBQb2ludCBpcyBvbiBhIGJsb2NrIHdoZW4gb24gU1RBUlQtUkUg b3IgaWYgU1RBUlQtUkUgY2FuIGJlDQoJOzsgZm91bmQgYmVmb3JlIGl0Li4uDQoJKGFuZCAob3Ig KG9yZy1hdC1yZWdleHAtcCBzdGFydC1yZSkNCgkJIChyZS1zZWFyY2gtYmFja3dhcmQgc3RhcnQt cmUgbGltaXQtdXAgdCkpDQoJICAgICAoc2V0cSBiZWcgKG1hdGNoLWJlZ2lubmluZyAwKSkNCgkg ICAgIDs7IC4uLiBhbmQgRU5ELVJFIGFmdGVyIGl0Li4uDQoJICAgICAoZ290by1jaGFyIChtYXRj aC1lbmQgMCkpDQoJICAgICAocmUtc2VhcmNoLWZvcndhcmQgZW5kLXJlIGxpbWl0LWRvd24gdCkN CgkgICAgICg+IChzZXRxIGVuZCAobWF0Y2gtZW5kIDApKSBwb3MpDQoJICAgICA7OyAuLi4gd2l0 aG91dCBhbm90aGVyIFNUQVJULVJFIGluLWJldHdlZW4uDQoJICAgICAoZ290by1jaGFyIChtYXRj aC1iZWdpbm5pbmcgMCkpDQoJICAgICAobm90IChyZS1zZWFyY2gtYmFja3dhcmQgc3RhcnQtcmUg KDErIGJlZykgdCkpDQoJICAgICA7OyBSZXR1cm4gdmFsdWUuDQoJICAgICAoY29ucyBiZWcgZW5k KSkpKSkpDQoNCihkZWZ1biBvcmctaW4tYmxvY2stcCAobmFtZXMpDQogICJOb24tbmlsIHdoZW4g cG9pbnQgYmVsb25ncyB0byBhIGJsb2NrIHdob3NlIG5hbWUgYmVsb25ncyB0byBOQU1FUy4NCg0K TkFNRVMgaXMgYSBsaXN0IG9mIHN0cmluZ3MgY29udGFpbmluZyBuYW1lcyBvZiBibG9ja3MuDQoN ClJldHVybiBmaXJzdCBibG9jayBuYW1lIG1hdGNoZWQsIG9yIG5pbC4gIEJld2FyZSB0aGF0IGlu IGNhc2Ugb2YNCm5lc3RlZCBibG9ja3MsIHRoZSByZXR1cm5lZCBuYW1lIG1heSBub3QgYmVsb25n IHRvIHRoZSBjbG9zZXN0DQpibG9jayBmcm9tIHBvaW50LiINCiAgKHNhdmUtbWF0Y2gtZGF0YQ0K ICAgIChjYXRjaCAnZXhpdA0KICAgICAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggdCkNCgkgICAg KGxpbS11cCAoc2F2ZS1leGN1cnNpb24gKG91dGxpbmUtcHJldmlvdXMtaGVhZGluZykpKQ0KCSAg ICAobGltLWRvd24gKHNhdmUtZXhjdXJzaW9uIChvdXRsaW5lLW5leHQtaGVhZGluZykpKSkNCgko bWFwYyAobGFtYmRhIChuYW1lKQ0KCQkobGV0ICgobiAocmVnZXhwLXF1b3RlIG5hbWUpKSkNCgkJ ICAod2hlbiAob3JnLWJldHdlZW4tcmVnZXhwcy1wDQoJCQkgKGNvbmNhdCAiXlsgXHRdKiNcXCti ZWdpbl8iIG4pDQoJCQkgKGNvbmNhdCAiXlsgXHRdKiNcXCtlbmRfIiBuKQ0KCQkJIGxpbS11cCBs aW0tZG93bikNCgkJICAgICh0aHJvdyAnZXhpdCBuKSkpKQ0KCSAgICAgIG5hbWVzKSkNCiAgICAg IG5pbCkpKQ0KDQooZGVmdW4gb3JnLWluLWRyYXdlci1wICgpDQogICJJcyBwb2ludCB3aXRoaW4g YSBkcmF3ZXI/Ig0KICAoc2F2ZS1tYXRjaC1kYXRhDQogICAgKGxldCAoKGNhc2UtZm9sZC1zZWFy Y2ggdCkNCgkgIChsaW0tdXAgKHNhdmUtZXhjdXJzaW9uIChvdXRsaW5lLXByZXZpb3VzLWhlYWRp bmcpKSkNCgkgIChsaW0tZG93biAoc2F2ZS1leGN1cnNpb24gKG91dGxpbmUtbmV4dC1oZWFkaW5n KSkpKQ0KICAgICAgKG9yZy1iZXR3ZWVuLXJlZ2V4cHMtcA0KICAgICAgIChjb25jYXQgIl5bIFx0 XSo6IiAocmVnZXhwLW9wdCBvcmctZHJhd2VycykgIjoiKQ0KICAgICAgICJeWyBcdF0qOmVuZDou KiQiDQogICAgICAgbGltLXVwIGxpbS1kb3duKSkpKQ0KDQooZGVmdW4gb3JnLW9jY3VyLWluLWFn ZW5kYS1maWxlcyAocmVnZXhwICZvcHRpb25hbCBubGluZXMpDQogICJDYWxsIGBtdWx0aS1vY2N1 cicgd2l0aCBidWZmZXJzIGZvciBhbGwgYWdlbmRhIGZpbGVzLiINCiAgKGludGVyYWN0aXZlICJz T3JnLWZpbGVzIG1hdGNoaW5nOiBcbnAiKQ0KICAobGV0KiAoKGZpbGVzIChvcmctYWdlbmRhLWZp bGVzKSkNCgkgKHRuYW1lcyAobWFwY2FyICdmaWxlLXRydWVuYW1lIGZpbGVzKSkNCgkgKGV4dHJh IG9yZy1hZ2VuZGEtdGV4dC1zZWFyY2gtZXh0cmEtZmlsZXMpDQoJIGYpDQogICAgKHdoZW4gKGVx IChjYXIgZXh0cmEpICdhZ2VuZGEtYXJjaGl2ZXMpDQogICAgICAoc2V0cSBleHRyYSAoY2RyIGV4 dHJhKSkNCiAgICAgIChzZXRxIGZpbGVzIChvcmctYWRkLWFyY2hpdmUtZmlsZXMgZmlsZXMpKSkN CiAgICAod2hpbGUgKHNldHEgZiAocG9wIGV4dHJhKSkNCiAgICAgICh1bmxlc3MgKG1lbWJlciAo ZmlsZS10cnVlbmFtZSBmKSB0bmFtZXMpDQoJKGFkZC10by1saXN0ICdmaWxlcyBmICdhcHBlbmQp DQoJKGFkZC10by1saXN0ICd0bmFtZXMgKGZpbGUtdHJ1ZW5hbWUgZikgJ2FwcGVuZCkpKQ0KICAg IChtdWx0aS1vY2N1cg0KICAgICAobWFwY2FyIChsYW1iZGEgKHgpDQoJICAgICAgICh3aXRoLWN1 cnJlbnQtYnVmZmVyDQoJCSAgIChvciAoZ2V0LWZpbGUtYnVmZmVyIHgpIChmaW5kLWZpbGUtbm9z ZWxlY3QgeCkpDQoJCSAod2lkZW4pDQoJCSAoY3VycmVudC1idWZmZXIpKSkNCgkgICAgIGZpbGVz KQ0KICAgICByZWdleHApKSkNCg0KKGlmIChib3VuZHAgJ29jY3VyLW1vZGUtZmluZC1vY2N1cnJl bmNlLWhvb2spDQogICAgOzsgRW1hY3MgMjMNCiAgICAoYWRkLWhvb2sgJ29jY3VyLW1vZGUtZmlu ZC1vY2N1cnJlbmNlLWhvb2sNCgkgICAgICAobGFtYmRhICgpDQoJCSh3aGVuIChkZXJpdmVkLW1v ZGUtcCAnb3JnLW1vZGUpDQoJCSAgKG9yZy1yZXZlYWwpKSkpDQogIDs7IEVtYWNzIDIyDQogIChk ZWZhZHZpY2Ugb2NjdXItbW9kZS1nb3RvLW9jY3VycmVuY2UNCiAgICAgIChhZnRlciBvcmctb2Nj dXItcmV2ZWFsIGFjdGl2YXRlKQ0KICAgIChhbmQgKGRlcml2ZWQtbW9kZS1wICdvcmctbW9kZSkg KG9yZy1yZXZlYWwpKSkNCiAgKGRlZmFkdmljZSBvY2N1ci1tb2RlLWdvdG8tb2NjdXJyZW5jZS1v dGhlci13aW5kb3cNCiAgICAgIChhZnRlciBvcmctb2NjdXItcmV2ZWFsIGFjdGl2YXRlKQ0KICAg IChhbmQgKGRlcml2ZWQtbW9kZS1wICdvcmctbW9kZSkgKG9yZy1yZXZlYWwpKSkNCiAgKGRlZmFk dmljZSBvY2N1ci1tb2RlLWRpc3BsYXktb2NjdXJyZW5jZQ0KICAgICAgKGFmdGVyIG9yZy1vY2N1 ci1yZXZlYWwgYWN0aXZhdGUpDQogICAgKHdoZW4gKGRlcml2ZWQtbW9kZS1wICdvcmctbW9kZSkN CiAgICAgIChsZXQgKChwb3MgKG9jY3VyLW1vZGUtZmluZC1vY2N1cnJlbmNlKSkpDQoJKHdpdGgt Y3VycmVudC1idWZmZXIgKG1hcmtlci1idWZmZXIgcG9zKQ0KCSAgKHNhdmUtZXhjdXJzaW9uDQoJ ICAgIChnb3RvLWNoYXIgcG9zKQ0KCSAgICAob3JnLXJldmVhbCkpKSkpKSkNCg0KKGRlZnVuIG9y Zy1vY2N1ci1saW5rLWluLWFnZW5kYS1maWxlcyAoKQ0KICAiQ3JlYXRlIGEgbGluayBhbmQgc2Vh cmNoIGZvciBpdCBpbiB0aGUgYWdlbmRhcy4NClRoZSBsaW5rIGlzIG5vdCBzdG9yZWQgaW4gYG9y Zy1zdG9yZWQtbGlua3MnLCBpdCBpcyBqdXN0IGNyZWF0ZWQNCmZvciB0aGUgc2VhcmNoIHB1cnBv c2UuIg0KICAoaW50ZXJhY3RpdmUpDQogIChsZXQgKChsaW5rIChjb25kaXRpb24tY2FzZSBuaWwN CgkJICAob3JnLXN0b3JlLWxpbmsgbmlsKQ0KCQkoZXJyb3IgIlVuYWJsZSB0byBjcmVhdGUgYSBs aW5rIHRvIGhlcmUiKSkpKQ0KICAgIChvcmctb2NjdXItaW4tYWdlbmRhLWZpbGVzIChyZWdleHAt cXVvdGUgbGluaykpKSkNCg0KKGRlZnVuIG9yZy1yZXZlcnNlLXN0cmluZyAoc3RyaW5nKQ0KICAi UmV0dXJuIHRoZSByZXZlcnNlIG9mIFNUUklORy4iDQogIChhcHBseSAnc3RyaW5nIChyZXZlcnNl IChzdHJpbmctdG8tbGlzdCBzdHJpbmcpKSkpDQoNCjs7IGRlZnN1YnN0IG9yZy11bmlxdWlmeSBt dXN0IGJlIGRlZmluZWQgYmVmb3JlIGZpcnN0IHVzZQ0KDQooZGVmdW4gb3JnLXVuaXF1aWZ5LWFs aXN0IChhbGlzdCkNCiAgIk1lcmdlIGVsZW1lbnRzIG9mIEFMSVNUIHdpdGggdGhlIHNhbWUga2V5 Lg0KDQpGb3IgZXhhbXBsZSwgaW4gdGhpcyBhbGlzdDoNCg0KXChvcmctdW5pcXVpZnktYWxpc3Qg JygoYSAxKSAoYiAyKSAoYSAzKSkpDQogID0+ICcoKGEgMSAzKSAoYiAyKSkNCg0KbWVyZ2UgKGEg MSkgYW5kIChhIDMpIGludG8gKGEgMSAzKS4NCg0KVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5l dyBBTElTVC4iDQogIChsZXQgKHJ0bikNCiAgICAobWFwYw0KICAgICAobGFtYmRhIChlKQ0KICAg ICAgIChsZXQgKG4pDQoJIChpZiAobm90IChhc3NvYyAoY2FyIGUpIHJ0bikpDQoJICAgICAocHVz aCBlIHJ0bikNCgkgICAoc2V0cSBuIChjb25zIChjYXIgZSkgKGFwcGVuZCAoY2RyIChhc3NvYyAo Y2FyIGUpIHJ0bikpIChjZHIgZSkpKSkNCgkgICAoc2V0cSBydG4gKGFzc3EtZGVsZXRlLWFsbCAo Y2FyIGUpIHJ0bikpDQoJICAgKHB1c2ggbiBydG4pKSkpDQogICAgIGFsaXN0KQ0KICAgIHJ0bikp DQoNCihkZWZ1biBvcmctZGVsZXRlLWFsbCAoZWx0cyBsaXN0KQ0KICAiUmVtb3ZlIGFsbCBlbGVt ZW50cyBpbiBFTFRTIGZyb20gTElTVC4iDQogICh3aGlsZSBlbHRzDQogICAgKHNldHEgbGlzdCAo ZGVsZXRlIChwb3AgZWx0cykgbGlzdCkpKQ0KICBsaXN0KQ0KDQooZGVmdW4gb3JnLWNvdW50IChj bC1pdGVtIGNsLXNlcSkNCiAgIkNvdW50IHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgSVRF TSBpbiBTRVEuDQpUYWtlbiBmcm9tIGBjb3VudCcgaW4gY2wtc2VxLmVsIHdpdGggYWxsIGtleXdv cmQgYXJndW1lbnRzIHJlbW92ZWQuIg0KICAobGV0ICgoY2wtZW5kIChsZW5ndGggY2wtc2VxKSkg KGNsLXN0YXJ0IDApIChjbC1jb3VudCAwKSAgY2wteCkNCiAgICAod2hlbiAoY29uc3AgY2wtc2Vx KSAoc2V0cSBjbC1zZXEgKG50aGNkciBjbC1zdGFydCBjbC1zZXEpKSkNCiAgICAod2hpbGUgKDwg Y2wtc3RhcnQgY2wtZW5kKQ0KICAgICAgKHNldHEgY2wteCAoaWYgKGNvbnNwIGNsLXNlcSkgKHBv cCBjbC1zZXEpIChhcmVmIGNsLXNlcSBjbC1zdGFydCkpKQ0KICAgICAgKGlmIChlcXVhbCBjbC1p dGVtIGNsLXgpIChzZXRxIGNsLWNvdW50ICgxKyBjbC1jb3VudCkpKQ0KICAgICAgKHNldHEgY2wt c3RhcnQgKDErIGNsLXN0YXJ0KSkpDQogICAgY2wtY291bnQpKQ0KDQooZGVmdW4gb3JnLXJlbW92 ZS1pZiAocHJlZGljYXRlIHNlcSkNCiAgIlJlbW92ZSBldmVyeXRoaW5nIGZyb20gU0VRIHRoYXQg ZnVsZmlsbHMgUFJFRElDQVRFLiINCiAgKGxldCAocmVzIGUpDQogICAgKHdoaWxlIHNlcQ0KICAg ICAgKHNldHEgZSAocG9wIHNlcSkpDQogICAgICAoaWYgKG5vdCAoZnVuY2FsbCBwcmVkaWNhdGUg ZSkpIChwdXNoIGUgcmVzKSkpDQogICAgKG5yZXZlcnNlIHJlcykpKQ0KDQooZGVmdW4gb3JnLXJl bW92ZS1pZi1ub3QgKHByZWRpY2F0ZSBzZXEpDQogICJSZW1vdmUgZXZlcnl0aGluZyBmcm9tIFNF USB0aGF0IGRvZXMgbm90IGZ1bGZpbGwgUFJFRElDQVRFLiINCiAgKGxldCAocmVzIGUpDQogICAg KHdoaWxlIHNlcQ0KICAgICAgKHNldHEgZSAocG9wIHNlcSkpDQogICAgICAoaWYgKGZ1bmNhbGwg cHJlZGljYXRlIGUpIChwdXNoIGUgcmVzKSkpDQogICAgKG5yZXZlcnNlIHJlcykpKQ0KDQooZGVm dW4gb3JnLXJlZHVjZSAoY2wtZnVuYyBjbC1zZXEgJnJlc3QgY2wta2V5cykNCiAgIlJlZHVjZSB0 d28tYXJndW1lbnQgRlVOQ1RJT04gYWNyb3NzIFNFUS4NClRha2VuIGZyb20gYHJlZHVjZScgaW4g Y2wtc2VxLmVsIHdpdGggYWxsIGtleXdvcmQgYXJndW1lbnRzIGJ1dA0KXCI6aW5pdGlhbC12YWx1 ZVwiIHJlbW92ZWQuIg0KICAobGV0ICgoY2wtYWNjdW0gKGNvbmQgKChtZW1xIDppbml0aWFsLXZh bHVlIGNsLWtleXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgKGNhZHIgKG1lbXEgOmluaXRp YWwtdmFsdWUgY2wta2V5cykpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgKGNsLXNlcSAocG9w IGNsLXNlcSkpDQogICAgICAgICAgICAgICAgICAgICAgICAodCAoZnVuY2FsbCBjbC1mdW5jKSkp KSkNCiAgICAod2hpbGUgY2wtc2VxDQogICAgICAoc2V0cSBjbC1hY2N1bSAoZnVuY2FsbCBjbC1m dW5jIGNsLWFjY3VtIChwb3AgY2wtc2VxKSkpKQ0KICAgIGNsLWFjY3VtKSkNCg0KKGRlZnVuIG9y Zy1ldmVyeSAocHJlZCBzZXEpDQogICJSZXR1cm4gdHJ1ZSBpZiBQUkVESUNBVEUgaXMgdHJ1ZSBv ZiBldmVyeSBlbGVtZW50IG9mIFNFUS4NCkFkYXB0ZWQgZnJvbSBgZXZlcnknIGluIGNsLmVsLiIN CiAgKGNhdGNoICdvcmctZXZlcnkNCiAgICAobWFwYyAobGFtYmRhIChlKSAodW5sZXNzIChmdW5j YWxsIHByZWQgZSkgKHRocm93ICdvcmctZXZlcnkgbmlsKSkpIHNlcSkNCiAgICB0KSkNCg0KKGRl ZnVuIG9yZy1zb21lIChwcmVkIHNlcSkNCiAgIlJldHVybiB0cnVlIGlmIFBSRURJQ0FURSBpcyB0 cnVlIG9mIGFueSBlbGVtZW50IG9mIFNFUS4NCkFkYXB0ZWQgZnJvbSBgc29tZScgaW4gY2wuZWwu Ig0KICAoY2F0Y2ggJ29yZy1zb21lDQogICAgKG1hcGMgKGxhbWJkYSAoZSkgKHdoZW4gKGZ1bmNh bGwgcHJlZCBlKSAodGhyb3cgJ29yZy1zb21lIHQpKSkgc2VxKQ0KICAgIG5pbCkpDQoNCihkZWZ1 biBvcmctYmFjay1vdmVyLWVtcHR5LWxpbmVzICgpDQogICJNb3ZlIGJhY2t3YXJkcyBvdmVyIHdo aXRlc3BhY2UsIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IGVtcHR5IGxpbmUuDQpSZXR1 cm5zIHRoZSBudW1iZXIgb2YgZW1wdHkgbGluZXMgcGFzc2VkLiINCiAgKGxldCAoKHBvcyAocG9p bnQpKSkNCiAgICAoaWYgKGNkciAoYXNzb2MgJ2hlYWRpbmcgb3JnLWJsYW5rLWJlZm9yZS1uZXct ZW50cnkpKQ0KCShza2lwLWNoYXJzLWJhY2t3YXJkICIgXHRcblxyIikNCiAgICAgICh1bmxlc3Mg KGVvYnApDQoJKGZvcndhcmQtbGluZSAtMSkpKQ0KICAgIChiZWdpbm5pbmctb2YtbGluZSAyKQ0K ICAgIChnb3RvLWNoYXIgKG1pbiAocG9pbnQpIHBvcykpDQogICAgKGNvdW50LWxpbmVzIChwb2lu dCkgcG9zKSkpDQoNCihkZWZ1biBvcmctc2tpcC13aGl0ZXNwYWNlICgpDQogIChza2lwLWNoYXJz LWZvcndhcmQgIiBcdFxuXHIiKSkNCg0KKGRlZnVuIG9yZy1wb2ludC1pbi1ncm91cCAocG9pbnQg Z3JvdXAgJm9wdGlvbmFsIGNvbnRleHQpDQogICJDaGVjayBpZiBQT0lOVCBpcyBpbiBtYXRjaC1n cm91cCBHUk9VUC4NCklmIENPTlRFWFQgaXMgbm9uLW5pbCwgcmV0dXJuIGEgbGlzdCB3aXRoIENP TlRFWFQgYW5kIHRoZSBib3VuZGFyaWVzIG9mIHRoZQ0KbWF0Y2guICBJZiB0aGUgbWF0Y2ggZ3Jv dXAgZG9lcyBub3QgZXhpc3Qgb3IgcG9pbnQgaXMgbm90IGluc2lkZSBpdCwNCnJldHVybiBuaWwu Ig0KICAoYW5kIChtYXRjaC1iZWdpbm5pbmcgZ3JvdXApDQogICAgICAgKD49IHBvaW50IChtYXRj aC1iZWdpbm5pbmcgZ3JvdXApKQ0KICAgICAgICg8PSBwb2ludCAobWF0Y2gtZW5kIGdyb3VwKSkN CiAgICAgICAoaWYgY29udGV4dA0KCSAgIChsaXN0IGNvbnRleHQgKG1hdGNoLWJlZ2lubmluZyBn cm91cCkgKG1hdGNoLWVuZCBncm91cCkpDQoJIHQpKSkNCg0KKGRlZnVuIG9yZy1zd2l0Y2gtdG8t YnVmZmVyLW90aGVyLXdpbmRvdyAoJnJlc3QgYXJncykNCiAgIlN3aXRjaCB0byBidWZmZXIgaW4g YSBzZWNvbmQgd2luZG93IG9uIHRoZSBjdXJyZW50IGZyYW1lLg0KSW4gcGFydGljdWxhciwgZG8g bm90IGFsbG93IHBvcC11cCBmcmFtZXMuDQpSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIGJ1ZmZl ci4iDQogIChvcmctbm8tcG9wdXBzDQogICAoYXBwbHkgJ3N3aXRjaC10by1idWZmZXItb3RoZXIt d2luZG93IGFyZ3MpKSkNCg0KKGRlZnVuIG9yZy1jb21iaW5lLXBsaXN0cyAoJnJlc3QgcGxpc3Rz KQ0KICAiQ3JlYXRlIGEgc2luZ2xlIHByb3BlcnR5IGxpc3QgZnJvbSBhbGwgcGxpc3RzIGluIFBM SVNUUy4NClRoZSBwcm9jZXNzIHN0YXJ0cyBieSBjb3B5aW5nIHRoZSBmaXJzdCBsaXN0LCBhbmQg dGhlbiBzZXR0aW5nIHByb3BlcnRpZXMNCmZyb20gdGhlIG90aGVyIGxpc3RzLiAgU2V0dGluZ3Mg aW4gdGhlIGxhc3QgbGlzdCBhcmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQNCm9uZXMgYW5kIG92ZXJy dWxlIHNldHRpbmdzIGluIHRoZSBvdGhlciBsaXN0cy4iDQogIChsZXQgKChydG4gKGNvcHktc2Vx dWVuY2UgKHBvcCBwbGlzdHMpKSkNCglwIHYgbHMpDQogICAgKHdoaWxlIHBsaXN0cw0KICAgICAg KHNldHEgbHMgKHBvcCBwbGlzdHMpKQ0KICAgICAgKHdoaWxlIGxzDQoJKHNldHEgcCAocG9wIGxz KSB2IChwb3AgbHMpKQ0KCShzZXRxIHJ0biAocGxpc3QtcHV0IHJ0biBwIHYpKSkpDQogICAgcnRu KSkNCg0KKGRlZnVuIG9yZy1yZXBsYWNlLWVzY2FwZXMgKHN0cmluZyB0YWJsZSkNCiAgIlJlcGxh Y2UgJS1lc2NhcGVzIGluIFNUUklORyB3aXRoIHZhbHVlcyBpbiBUQUJMRS4NClRBQkxFIGlzIGFu IGFzc29jaWF0aW9uIGxpc3Qgd2l0aCBrZXlzIGxpa2UgXCIlYVwiIGFuZCBzdHJpbmcgdmFsdWVz Lg0KVGhlIHNlcXVlbmNlcyBpbiBTVFJJTkcgbWF5IGNvbnRhaW4gbm9ybWFsIGZpZWxkIHdpZHRo IGFuZCBwYWRkaW5nIGluZm9ybWF0aW9uLA0KZm9yIGV4YW1wbGUgXCIlLTVzXCIuICBSZXBsYWNl bWVudHMgaGFwcGVuIGluIHRoZSBzZXF1ZW5jZSBnaXZlbiBieSBUQUJMRSwNCnNvIHZhbHVlcyBj YW4gY29udGFpbiBmdXJ0aGVyICUtZXNjYXBlcyBpZiB0aGV5IGFyZSBkZWZpbmUgbGF0ZXIgaW4g VEFCTEUuIg0KICAobGV0ICgodGJsIChjb3B5LWFsaXN0IHRhYmxlKSkNCgkoY2FzZS1mb2xkLXNl YXJjaCBuaWwpDQogICAgICAgIChwY2hnIDApDQogICAgICAgIGUgcmUgcnBsKQ0KICAgICh3aGls ZSAoc2V0cSBlIChwb3AgdGJsKSkNCiAgICAgIChzZXRxIHJlIChjb25jYXQgIiUtP1swLTkuXSoi IChzdWJzdHJpbmcgKGNhciBlKSAxKSkpDQogICAgICAod2hlbiAoYW5kIChjZHIgZSkgKHN0cmlu Zy1tYXRjaCByZSAoY2RyIGUpKSkNCiAgICAgICAgKGxldCAoKHNyZWYgKHN1YnN0cmluZyAoY2Ry IGUpIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkpDQogICAgICAgICAgICAgIChz YWZlICJTUkVGIikpDQogICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgMCAzIChsaXN0ICdz cmVmIHNyZWYpIHNhZmUpDQogICAgICAgICAgKHNldGNkciBlIChyZXBsYWNlLW1hdGNoIHNhZmUg dCB0IChjZHIgZSkpKSkpDQogICAgICAod2hpbGUgKHN0cmluZy1tYXRjaCByZSBzdHJpbmcpDQog ICAgICAgIChzZXRxIHJwbCAoZm9ybWF0IChjb25jYXQgKHN1YnN0cmluZyAobWF0Y2gtc3RyaW5n IDAgc3RyaW5nKSAwIC0xKSAicyIpDQogICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIgZSkp KQ0KICAgICAgICAoc2V0cSBzdHJpbmcgKHJlcGxhY2UtbWF0Y2ggcnBsIHQgdCBzdHJpbmcpKSkp DQogICAgKHdoaWxlIChzZXRxIHBjaGcgKG5leHQtcHJvcGVydHktY2hhbmdlIHBjaGcgc3RyaW5n KSkNCiAgICAgIChsZXQgKChzcmVmIChnZXQtdGV4dC1wcm9wZXJ0eSBwY2hnICdzcmVmIHN0cmlu ZykpKQ0KCSh3aGVuIChhbmQgc3JlZiAoc3RyaW5nLW1hdGNoICJTUkVGIiBzdHJpbmcgcGNoZykp DQoJICAoc2V0cSBzdHJpbmcgKHJlcGxhY2UtbWF0Y2ggc3JlZiB0IHQgc3RyaW5nKSkpKSkNCiAg ICBzdHJpbmcpKQ0KDQooZGVmdW4gb3JnLXN1Ymxpc3QgKGxpc3Qgc3RhcnQgZW5kKQ0KICAiUmV0 dXJuIGEgc2VjdGlvbiBvZiBMSVNULCBmcm9tIFNUQVJUIHRvIEVORC4NCkNvdW50aW5nIHN0YXJ0 cyBhdCAxLiINCiAgKGxldCAocnRuIChjIHN0YXJ0KSkNCiAgICAoc2V0cSBsaXN0IChudGhjZHIg KDEtIHN0YXJ0KSBsaXN0KSkNCiAgICAod2hpbGUgKGFuZCBsaXN0ICg8PSBjIGVuZCkpDQogICAg ICAocHVzaCAocG9wIGxpc3QpIHJ0bikNCiAgICAgIChzZXRxIGMgKDErIGMpKSkNCiAgICAobnJl dmVyc2UgcnRuKSkpDQoNCihkZWZ1biBvcmctZmluZC1iYXNlLWJ1ZmZlci12aXNpdGluZyAoZmls ZSkNCiAgIkxpa2UgYGZpbmQtYnVmZmVyLXZpc2l0aW5nJyBidXQgYWx3YXlzIHJldHVybiB0aGUg YmFzZSBidWZmZXIgYW5kDQpub3QgYW4gaW5kaXJlY3QgYnVmZmVyLiINCiAgKGxldCAoKGJ1ZiAo b3IgKGdldC1maWxlLWJ1ZmZlciBmaWxlKQ0KCQkgKGZpbmQtYnVmZmVyLXZpc2l0aW5nIGZpbGUp KSkpDQogICAgKGlmIGJ1Zg0KCShvciAoYnVmZmVyLWJhc2UtYnVmZmVyIGJ1ZikgYnVmKQ0KICAg ICAgbmlsKSkpDQoNCihkZWZ1biBvcmctaW1hZ2UtZmlsZS1uYW1lLXJlZ2V4cCAoJm9wdGlvbmFs IGV4dGVuc2lvbnMpDQogICJSZXR1cm4gcmVnZXhwIG1hdGNoaW5nIHRoZSBmaWxlIG5hbWVzIG9m IGltYWdlcy4NCklmIEVYVEVOU0lPTlMgaXMgZ2l2ZW4sIG9ubHkgbWF0Y2ggdGhlc2UuIg0KICAo aWYgKGFuZCAobm90IGV4dGVuc2lvbnMpIChmYm91bmRwICdpbWFnZS1maWxlLW5hbWUtcmVnZXhw KSkNCiAgICAgIChpbWFnZS1maWxlLW5hbWUtcmVnZXhwKQ0KICAgIChsZXQgKChpbWFnZS1maWxl LW5hbWUtZXh0ZW5zaW9ucw0KCSAgIChvciBleHRlbnNpb25zDQoJICAgICAgICcoInBuZyIgImpw ZWciICJqcGciICJnaWYiICJ0aWZmIiAidGlmIg0KCQkgInhibSIgInhwbSIgInBibSIgInBnbSIg InBwbSIpKSkpDQogICAgICAoY29uY2F0ICJcXC4iDQoJICAgICAgKHJlZ2V4cC1vcHQgKG5jb25j IChtYXBjYXIgJ3VwY2FzZQ0KCQkJCQkgaW1hZ2UtZmlsZS1uYW1lLWV4dGVuc2lvbnMpDQoJCQkJ IGltYWdlLWZpbGUtbmFtZS1leHRlbnNpb25zKQ0KCQkJICB0KQ0KCSAgICAgICJcXCciKSkpKQ0K DQooZGVmdW4gb3JnLWZpbGUtaW1hZ2UtcCAoZmlsZSAmb3B0aW9uYWwgZXh0ZW5zaW9ucykNCiAg IlJldHVybiBub24tbmlsIGlmIEZJTEUgaXMgYW4gaW1hZ2UuIg0KICAoc2F2ZS1tYXRjaC1kYXRh DQogICAgKHN0cmluZy1tYXRjaCAob3JnLWltYWdlLWZpbGUtbmFtZS1yZWdleHAgZXh0ZW5zaW9u cykgZmlsZSkpKQ0KDQooZGVmdW4gb3JnLWdldC1jdXJzb3ItZGF0ZSAoJm9wdGlvbmFsIHdpdGgt dGltZSkNCiAgIlJldHVybiB0aGUgZGF0ZSBhdCBjdXJzb3IgaW4gYXMgYSB0aW1lLg0KVGhpcyB3 b3JrcyBpbiB0aGUgY2FsZW5kYXIgYW5kIGluIHRoZSBhZ2VuZGEsIGFueXdoZXJlIGVsc2UgaXQg anVzdA0KcmV0dXJucyB0aGUgY3VycmVudCB0aW1lLg0KSWYgV0lUSC1USU1FIGlzIG5vbi1uaWws IHJldHVybnMgdGhlIHRpbWUgb2YgdGhlIGV2ZW50IGF0IHBvaW50IChpbg0KdGhlIGFnZW5kYSkg b3IgdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgZGF5LiINCiAgKGxldCAoZGF0ZSBkYXkgZGVmZCB0 cCB0bSBob2QgbW9kKQ0KICAgICh3aGVuIHdpdGgtdGltZQ0KICAgICAgKHNldHEgdHAgKGdldC10 ZXh0LXByb3BlcnR5IChwb2ludCkgJ3RpbWUpKQ0KICAgICAgKHdoZW4gKGFuZCB0cCAoc3RyaW5n LW1hdGNoICJcXChbMC05XVswLTldXFwpOlxcKFswLTldWzAtOV1cXCkiIHRwKSkNCgkoc2V0cSBo b2QgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAxIHRwKSkNCgkgICAgICBtb2QgKHN0 cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAyIHRwKSkpKQ0KICAgICAgKG9yIHRwIChzZXRx IGhvZCAobnRoIDIgKGRlY29kZS10aW1lIChjdXJyZW50LXRpbWUpKSkNCgkJICAgbW9kIChudGgg MSAoZGVjb2RlLXRpbWUgKGN1cnJlbnQtdGltZSkpKSkpKQ0KICAgIChjb25kDQogICAgICgoZXEg bWFqb3ItbW9kZSAnY2FsZW5kYXItbW9kZSkNCiAgICAgIChzZXRxIGRhdGUgKGNhbGVuZGFyLWN1 cnNvci10by1kYXRlKQ0KCSAgICBkZWZkIChlbmNvZGUtdGltZSAwIChvciBtb2QgMCkgKG9yIGhv ZCAwKQ0KCQkJICAgICAgKG50aCAxIGRhdGUpIChudGggMCBkYXRlKSAobnRoIDIgZGF0ZSkpKSkN CiAgICAgKChlcSBtYWpvci1tb2RlICdvcmctYWdlbmRhLW1vZGUpDQogICAgICAoc2V0cSBkYXkg KGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2RheSkpDQogICAgICAoaWYgZGF5DQoJICAoc2V0 cSBkYXRlIChjYWxlbmRhci1ncmVnb3JpYW4tZnJvbS1hYnNvbHV0ZSBkYXkpDQoJCWRlZmQgKGVu Y29kZS10aW1lIDAgKG9yIG1vZCAwKSAob3IgaG9kIDApDQoJCQkJICAobnRoIDEgZGF0ZSkgKG50 aCAwIGRhdGUpIChudGggMiBkYXRlKSkpKSkpDQogICAgKG9yIGRlZmQgKGN1cnJlbnQtdGltZSkp KSkNCg0KKGRlZnVuIG9yZy1tYXJrLXN1YnRyZWUgKCZvcHRpb25hbCB1cCkNCiAgIk1hcmsgdGhl IGN1cnJlbnQgc3VidHJlZS4NClRoaXMgcHV0cyBwb2ludCBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1 cnJlbnQgc3VidHJlZSwgYW5kIG1hcmsgYXQNCnRoZSBlbmQuICBJZiBhIG51bWVyaWMgcHJlZml4 IFVQIGlzIGdpdmVuLCBtb3ZlIHVwIGludG8gdGhlDQpoaWVyYXJjaHkgb2YgaGVhZGxpbmVzIGJ5 IFVQIGxldmVscyBiZWZvcmUgbWFya2luZyB0aGUgc3VidHJlZS4iDQogIChpbnRlcmFjdGl2ZSAi UCIpDQogIChvcmctd2l0aC1saW1pdGVkLWxldmVscw0KICAgKGNvbmQgKChvcmctYXQtaGVhZGlu Zy1wKSAoYmVnaW5uaW5nLW9mLWxpbmUpKQ0KCSAoKG9yZy1iZWZvcmUtZmlyc3QtaGVhZGluZy1w KSAodXNlci1lcnJvciAiTm90IGluIGEgc3VidHJlZSIpKQ0KCSAodCAob3V0bGluZS1wcmV2aW91 cy12aXNpYmxlLWhlYWRpbmcgMSkpKSkNCiAgKHdoZW4gdXAgKHdoaWxlIChhbmQgKD4gdXAgMCkg KG9yZy11cC1oZWFkaW5nLXNhZmUpKSAoZGVjZiB1cCkpKQ0KICAoaWYgKG9yZy1jYWxsZWQtaW50 ZXJhY3RpdmVseS1wICdhbnkpDQogICAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdvcmctbWFyay1l bGVtZW50KQ0KICAgIChvcmctbWFyay1lbGVtZW50KSkpDQoNCg0KOzs7IEluZGVudGF0aW9uDQoN CihkZWZ1biBvcmctaW5kZW50LWxpbmUgKCkNCiAgIkluZGVudCBsaW5lIGRlcGVuZGluZyBvbiBj b250ZXh0LiINCiAgKGludGVyYWN0aXZlKQ0KICAobGV0KiAoKHBvcyAocG9pbnQpKQ0KCSAoaXRl bXAgKG9yZy1hdC1pdGVtLXApKQ0KCSAoY2FzZS1mb2xkLXNlYXJjaCB0KQ0KCSAob3JnLWRyYXdl ci1yZWdleHAgKG9yIG9yZy1kcmF3ZXItcmVnZXhwICJcMDAwIikpDQoJIChpbmxpbmUtdGFzay1w IChhbmQgKGZlYXR1cmVwICdvcmctaW5saW5ldGFzaykNCgkJCSAgICAgKG9yZy1pbmxpbmV0YXNr LWluLXRhc2stcCkpKQ0KCSAoaW5saW5lLXJlIChhbmQgaW5saW5lLXRhc2stcA0KCQkJIChvcmct aW5saW5ldGFzay1vdXRsaW5lLXJlZ2V4cCkpKQ0KCSBjb2x1bW4pDQogICAgKGlmIChhbmQgb3Jn c3RydWN0LWlzLSsrIChlcSBwb3MgKHBvaW50KSkpDQoJKGxldCAoKGluZGVudC1saW5lLWZ1bmN0 aW9uIChjYWRhZHIgKGFzc29jICdpbmRlbnQtbGluZS1mdW5jdGlvbiBvcmctZmItdmFycykpKSkN CgkgIChpbmRlbnQtYWNjb3JkaW5nLXRvLW1vZGUpKQ0KICAgICAgKGJlZ2lubmluZy1vZi1saW5l IDEpDQogICAgICAoY29uZA0KICAgICAgIDs7IEhlYWRpbmdzDQogICAgICAgKChsb29raW5nLWF0 IG9yZy1vdXRsaW5lLXJlZ2V4cCkgKHNldHEgY29sdW1uIDApKQ0KICAgICAgIDs7IEZvb3Rub3Rl IGRlZmluaXRpb24NCiAgICAgICAoKGxvb2tpbmctYXQgb3JnLWZvb3Rub3RlLWRlZmluaXRpb24t cmUpIChzZXRxIGNvbHVtbiAwKSkNCiAgICAgICA7OyBMaXRlcmFsIGV4YW1wbGVzDQogICAgICAg KChsb29raW5nLWF0ICJbIFx0XSo6XFwoIFxcfCRcXCkiKQ0KCShzZXRxIGNvbHVtbiAob3JnLWdl dC1pbmRlbnRhdGlvbikpKSA7IGRvIG5vdGhpbmcNCiAgICAgICA7OyBMaXN0cw0KICAgICAgICgo aWdub3JlLWVycm9ycyAoZ290by1jaGFyIChvcmctaW4taXRlbS1wKSkpDQoJKHNldHEgY29sdW1u IChpZiBpdGVtcA0KCQkJIChvcmctZ2V0LWluZGVudGF0aW9uKQ0KCQkgICAgICAgKG9yZy1saXN0 LWl0ZW0tYm9keS1jb2x1bW4gKHBvaW50KSkpKQ0KCShnb3RvLWNoYXIgcG9zKSkNCiAgICAgICA7 OyBEcmF3ZXJzDQogICAgICAgKChhbmQgKGxvb2tpbmctYXQgIlsgXHRdKjpFTkQ6IikNCgkgICAg IChzYXZlLWV4Y3Vyc2lvbiAocmUtc2VhcmNoLWJhY2t3YXJkIG9yZy1kcmF3ZXItcmVnZXhwIG5p bCB0KSkpDQoJKHNhdmUtZXhjdXJzaW9uDQoJICAoZ290by1jaGFyICgxLSAobWF0Y2gtYmVnaW5u aW5nIDEpKSkNCgkgIChzZXRxIGNvbHVtbiAoY3VycmVudC1jb2x1bW4pKSkpDQogICAgICAgOzsg U3BlY2lhbCBibG9ja3MNCiAgICAgICAoKGFuZCAobG9va2luZy1hdCAiWyBcdF0qI1xcK2VuZF9c XChbYS16XStcXCkiKQ0KCSAgICAgKHNhdmUtZXhjdXJzaW9uDQoJICAgICAgIChyZS1zZWFyY2gt YmFja3dhcmQNCgkJKGNvbmNhdCAiXlsgXHRdKiNcXCtiZWdpbl8iIChkb3duY2FzZSAobWF0Y2gt c3RyaW5nIDEpKSkgbmlsIHQpKSkNCgkoc2V0cSBjb2x1bW4gKG9yZy1nZXQtaW5kZW50YXRpb24g KG1hdGNoLXN0cmluZyAwKSkpKQ0KICAgICAgICgoYW5kIChub3QgKGxvb2tpbmctYXQgIlsgXHRd KiNcXCtiZWdpbl8iKSkNCgkgICAgIChvcmctYmV0d2Vlbi1yZWdleHBzLXAgIl5bIFx0XSojXFwr YmVnaW5fIiAiWyBcdF0qI1xcK2VuZF8iKSkNCgkoc2F2ZS1leGN1cnNpb24NCgkgIChyZS1zZWFy Y2gtYmFja3dhcmQgIl5bIFx0XSojXFwrYmVnaW5fXFwoW2Etel0rXFwpIiBuaWwgdCkpDQoJKHNl dHEgY29sdW1uDQoJICAgICAgKGNvbmQgKChlcXVhbCAoZG93bmNhc2UgKG1hdGNoLXN0cmluZyAx KSkgInNyYyIpDQoJCSAgICAgOzsgc3JjIGJsb2NrczogbGV0IGBvcmctZWRpdC1zcmMtZXhpdCcg aGFuZGxlIHRoZW0NCgkJICAgICAob3JnLWdldC1pbmRlbnRhdGlvbikpDQoJCSAgICAoKGVxdWFs IChkb3duY2FzZSAobWF0Y2gtc3RyaW5nIDEpKSAiZXhhbXBsZSIpDQoJCSAgICAgKG1heCAob3Jn LWdldC1pbmRlbnRhdGlvbikNCgkJCSAgKG9yZy1nZXQtaW5kZW50YXRpb24gKG1hdGNoLXN0cmlu ZyAwKSkpKQ0KCQkgICAgKHQNCgkJICAgICAob3JnLWdldC1pbmRlbnRhdGlvbiAobWF0Y2gtc3Ry aW5nIDApKSkpKSkNCiAgICAgICA7OyBUaGlzIGxpbmUgaGFzIG5vdGhpbmcgc3BlY2lhbCwgbG9v ayBhdCB0aGUgcHJldmlvdXMgcmVsZXZhbnQNCiAgICAgICA7OyBsaW5lIHRvIGNvbXB1dGUgaW5k ZW50YXRpb24NCiAgICAgICAodA0KCShiZWdpbm5pbmctb2YtbGluZSAwKQ0KCSh3aGlsZSAoYW5k IChub3QgKGJvYnApKQ0KCQkgICAgKG5vdCAobG9va2luZy1hdCBvcmctdGFibGUtbGluZS1yZWdl eHApKQ0KCQkgICAgKG5vdCAobG9va2luZy1hdCBvcmctZHJhd2VyLXJlZ2V4cCkpDQoJCSAgICA7 OyBXaGVuIHBvaW50IHN0YXJ0ZWQgaW4gYW4gaW5saW5lIHRhc2ssIGRvIG5vdCBtb3ZlDQoJCSAg ICA7OyBhYm92ZSB0YXNrIHN0YXJ0aW5nIGxpbmUuDQoJCSAgICAobm90IChhbmQgaW5saW5lLXRh c2stcCAobG9va2luZy1hdCBpbmxpbmUtcmUpKSkNCgkJICAgIDs7IFNraXAgZHJhd2VycywgYmxv Y2tzLCBlbXB0eSBsaW5lcywgdmVyYmF0aW0sDQoJCSAgICA7OyBjb21tZW50cywgdGFibGVzLCBm b290bm90ZXMgZGVmaW5pdGlvbnMsIGxpc3RzLA0KCQkgICAgOzsgaW5saW5lIHRhc2tzLg0KCQkg ICAgKG9yIChhbmQgKGxvb2tpbmctYXQgIlsgXHRdKjpFTkQ6IikNCgkJCSAgICAgKHJlLXNlYXJj aC1iYWNrd2FyZCBvcmctZHJhd2VyLXJlZ2V4cCBuaWwgdCkpDQoJCQkoYW5kIChsb29raW5nLWF0 ICJbIFx0XSojXFwrZW5kXyIpDQoJCQkgICAgIChyZS1zZWFyY2gtYmFja3dhcmQgIlsgXHRdKiNc XCtiZWdpbl8ibmlsIHQpKQ0KCQkJKGxvb2tpbmctYXQgIlsgXHRdKltcbjojfF0iKQ0KCQkJKGxv b2tpbmctYXQgb3JnLWZvb3Rub3RlLWRlZmluaXRpb24tcmUpDQoJCQkoYW5kIChub3QgaW5saW5l LXRhc2stcCkNCgkJCSAgICAgKGZlYXR1cmVwICdvcmctaW5saW5ldGFzaykNCgkJCSAgICAgKG9y Zy1pbmxpbmV0YXNrLWluLXRhc2stcCkNCgkJCSAgICAgKG9yIChvcmctaW5saW5ldGFzay1nb3Rv LWJlZ2lubmluZykgdCkpKSkNCgkgIChiZWdpbm5pbmctb2YtbGluZSAwKSkNCgkoY29uZA0KCSA7 OyBUaGVyZSB3YXMgYSBsaXN0IGl0ZW0gYWJvdmUuDQoJICgoaWdub3JlLWVycm9ycyAoZ290by1j aGFyIChvcmctaW4taXRlbS1wKSkpDQoJICAoZ290by1jaGFyIChvcmctbGlzdC1nZXQtdG9wLXBv aW50IChvcmctbGlzdC1zdHJ1Y3QpKSkNCgkgIChzZXRxIGNvbHVtbiAob3JnLWdldC1pbmRlbnRh dGlvbikpKQ0KCSA7OyBUaGVyZSB3YXMgYW4gaGVhZGluZyBhYm92ZS4NCgkgKChsb29raW5nLWF0 ICJcXCorWyBcdF0rIikNCgkgIChpZiAobm90IG9yZy1hZGFwdC1pbmRlbnRhdGlvbikNCgkgICAg ICAoc2V0cSBjb2x1bW4gMCkNCgkgICAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKQ0KCSAgICAo c2V0cSBjb2x1bW4gKGN1cnJlbnQtY29sdW1uKSkpKQ0KCSA7OyBBIGRyYXdlciBoYWQgc3RhcnRl ZCBhbmQgaXMgdW5maW5pc2hlZA0KCSAoKGxvb2tpbmctYXQgb3JnLWRyYXdlci1yZWdleHApDQoJ ICAoZ290by1jaGFyICgxLSAobWF0Y2gtYmVnaW5uaW5nIDEpKSkNCgkgIChzZXRxIGNvbHVtbiAo Y3VycmVudC1jb2x1bW4pKSkNCgkgOzsgRWxzZSwgbm90aGluZyBub3RpY2VhYmxlIGZvdW5kOiBn ZXQgaW5kZW50YXRpb24gYW5kIGdvIG9uLg0KCSAodCAoc2V0cSBjb2x1bW4gKG9yZy1nZXQtaW5k ZW50YXRpb24pKSkpKSkNCiAgICAgIDs7IE5vdyBhcHBseSBpbmRlbnRhdGlvbiBhbmQgbW92ZSBj dXJzb3IgYWNjb3JkaW5nbHkNCiAgICAgIChnb3RvLWNoYXIgcG9zKQ0KICAgICAgKGlmICg8PSAo Y3VycmVudC1jb2x1bW4pIChjdXJyZW50LWluZGVudGF0aW9uKSkNCgkgIChvcmctaW5kZW50LWxp bmUtdG8gY29sdW1uKQ0KCShzYXZlLWV4Y3Vyc2lvbiAob3JnLWluZGVudC1saW5lLXRvIGNvbHVt bikpKQ0KICAgICAgOzsgU3BlY2lhbCBwb2xpc2hpbmcgZm9yIHByb3BlcnRpZXMsIHNlZSBgb3Jn LXByb3BlcnR5LWZvcm1hdCcNCiAgICAgIChzZXRxIGNvbHVtbiAoY3VycmVudC1jb2x1bW4pKQ0K ICAgICAgKGJlZ2lubmluZy1vZi1saW5lIDEpDQogICAgICAoaWYgKGxvb2tpbmctYXQgb3JnLXBy b3BlcnR5LXJlKQ0KCSAgKHJlcGxhY2UtbWF0Y2ggKGNvbmNhdCAobWF0Y2gtc3RyaW5nIDQpDQoJ CQkJIChmb3JtYXQgb3JnLXByb3BlcnR5LWZvcm1hdA0KCQkJCQkgKG1hdGNoLXN0cmluZyAxKSAo bWF0Y2gtc3RyaW5nIDMpKSkNCgkJCSB0IHQpKQ0KICAgICAgKG9yZy1tb3ZlLXRvLWNvbHVtbiBj b2x1bW4pKSkpDQoNCihkZWZ1biBvcmctaW5kZW50LWRyYXdlciAoKQ0KICAiSW5kZW50IHRoZSBk cmF3ZXIgYXQgcG9pbnQuIg0KICAoaW50ZXJhY3RpdmUpDQogIChsZXQgKChwIChwb2ludCkpDQoJ KGUgKGFuZCAoc2F2ZS1leGN1cnNpb24gKHJlLXNlYXJjaC1mb3J3YXJkICI6RU5EOiIgbmlsIHQp KQ0KCQkobWF0Y2gtZW5kIDApKSkNCgkoZm9sZGVkDQoJIChzYXZlLWV4Y3Vyc2lvbg0KCSAgIChl bmQtb2YtbGluZSkNCgkgICAod2hlbiAob3ZlcmxheXMtYXQgKHBvaW50KSkNCgkgICAgIChtZW1i ZXIgJ2ludmlzaWJsZSAob3ZlcmxheS1wcm9wZXJ0aWVzDQoJCQkJIChjYXIgKG92ZXJsYXlzLWF0 IChwb2ludCkpKSkpKSkpKQ0KICAgICh3aGVuIGZvbGRlZCAob3JnLWN5Y2xlKSkNCiAgICAoaW5k ZW50LWZvci10YWItY29tbWFuZCkNCiAgICAod2hpbGUgKGFuZCAobW92ZS1iZWdpbm5pbmctb2Yt bGluZSAyKSAoPCAocG9pbnQpIGUpKQ0KICAgICAgKGluZGVudC1mb3ItdGFiLWNvbW1hbmQpKQ0K ICAgIChnb3RvLWNoYXIgcCkNCiAgICAod2hlbiBmb2xkZWQgKG9yZy1jeWNsZSkpKQ0KICAobWVz c2FnZSAiRHJhd2VyIGF0IHBvaW50IGluZGVudGVkIikpDQoNCihkZWZ1biBvcmctaW5kZW50LWJs b2NrICgpDQogICJJbmRlbnQgdGhlIGJsb2NrIGF0IHBvaW50LiINCiAgKGludGVyYWN0aXZlKQ0K ICAobGV0ICgocCAocG9pbnQpKQ0KCShjYXNlLWZvbGQtc2VhcmNoIHQpDQoJKGUgKGFuZCAoc2F2 ZS1leGN1cnNpb24gKHJlLXNlYXJjaC1mb3J3YXJkICIjXFwrZW5kXz9cXCg/OlthLXpdK1xcKT8i IG5pbCB0KSkNCgkJKG1hdGNoLWVuZCAwKSkpDQoJKGZvbGRlZA0KCSAoc2F2ZS1leGN1cnNpb24N CgkgICAoZW5kLW9mLWxpbmUpDQoJICAgKHdoZW4gKG92ZXJsYXlzLWF0IChwb2ludCkpDQoJICAg ICAobWVtYmVyICdpbnZpc2libGUgKG92ZXJsYXktcHJvcGVydGllcw0KCQkJCSAoY2FyIChvdmVy bGF5cy1hdCAocG9pbnQpKSkpKSkpKSkNCiAgICAod2hlbiBmb2xkZWQgKG9yZy1jeWNsZSkpDQog ICAgKGluZGVudC1mb3ItdGFiLWNvbW1hbmQpDQogICAgKHdoaWxlIChhbmQgKG1vdmUtYmVnaW5u aW5nLW9mLWxpbmUgMikgKDwgKHBvaW50KSBlKSkNCiAgICAgIChpbmRlbnQtZm9yLXRhYi1jb21t YW5kKSkNCiAgICAoZ290by1jaGFyIHApDQogICAgKHdoZW4gZm9sZGVkIChvcmctY3ljbGUpKSkN CiAgKG1lc3NhZ2UgIkJsb2NrIGF0IHBvaW50IGluZGVudGVkIikpDQoNCihkZWZ1biBvcmctaW5k ZW50LXJlZ2lvbiAoc3RhcnQgZW5kKQ0KICAiSW5kZW50IHJlZ2lvbi4iDQogIChpbnRlcmFjdGl2 ZSAiciIpDQogIChzYXZlLWV4Y3Vyc2lvbg0KICAgIChsZXQgKChsaW5lLWVuZCAob3JnLWN1cnJl bnQtbGluZSBlbmQpKSkNCiAgICAgIChnb3RvLWNoYXIgc3RhcnQpDQogICAgICAod2hpbGUgKDwg KG9yZy1jdXJyZW50LWxpbmUpIGxpbmUtZW5kKQ0KCShjb25kICgob3JnLWluLXNyYy1ibG9jay1w IHQpIChvcmctc3JjLW5hdGl2ZS10YWItY29tbWFuZC1tYXliZSkpDQoJICAgICAgKHQgKGNhbGwt aW50ZXJhY3RpdmVseSAnb3JnLWluZGVudC1saW5lKSkpDQoJKG1vdmUtYmVnaW5uaW5nLW9mLWxp bmUgMikpKSkpDQoNCg0KOzs7IEZpbGxpbmcNCg0KOzsgV2UgdXNlIG91ciBvd24gZmlsbC1wYXJh Z3JhcGggYW5kIGF1dG8tZmlsbCBmdW5jdGlvbnMuDQoNCjs7IGBvcmctZmlsbC1wYXJhZ3JhcGgn IHJlbGllcyBvbiBhZGFwdGl2ZSBmaWxsaW5nIGFuZCBjb250ZXh0DQo7OyBjaGVja2luZy4gIEFw cHJvcHJpYXRlIGBmaWxsLXByZWZpeCcgaXMgY29tcHV0ZWQgd2l0aA0KOzsgYG9yZy1hZGFwdGl2 ZS1maWxsLWZ1bmN0aW9uJy4NCg0KOzsgYG9yZy1hdXRvLWZpbGwtZnVuY3Rpb24nIHRha2VzIGNh cmUgb2YgYXV0by1maWxsaW5nLiAgSXQgY2FsbHMNCjs7IGBkby1hdXRvLWZpbGwnIG9ubHkgb24g dmFsaWQgYXJlYXMgd2l0aCBgZmlsbC1wcmVmaXgnIHNoYWRvd2VkIHdpdGgNCjs7IGBvcmctYWRh cHRpdmUtZmlsbC1mdW5jdGlvbicgdmFsdWUuICBJbnRlcm5hbGx5LA0KOzsgYG9yZy1jb21tZW50 LWxpbmUtYnJlYWstZnVuY3Rpb24nIGJyZWFrcyB0aGUgbGluZS4NCg0KOzsgYG9yZy1zZXR1cC1m aWxsaW5nJyBpbnN0YWxscyBmaWxsaW5nIGFuZCBhdXRvLWZpbGxpbmcgcmVsYXRlZA0KOzsgdmFy aWFibGVzIGR1cmluZyBgb3JnLW1vZGUnIGluaXRpYWxpemF0aW9uLg0KDQooZGVmdmFyIG9yZy1l bGVtZW50LXBhcmFncmFwaC1zZXBhcmF0ZSkgOyBvcmctZWxlbWVudC5lbA0KKGRlZnVuIG9yZy1z ZXR1cC1maWxsaW5nICgpDQogIChyZXF1aXJlICdvcmctZWxlbWVudCkNCiAgOzsgUHJldmVudCBh dXRvLWZpbGwgZnJvbSBpbnNlcnRpbmcgdW53YW50ZWQgbmV3IGl0ZW1zLg0KICAod2hlbiAoYm91 bmRwICdmaWxsLW5vYnJlYWstcHJlZGljYXRlKQ0KICAgIChvcmctc2V0LWxvY2FsDQogICAgICdm aWxsLW5vYnJlYWstcHJlZGljYXRlDQogICAgIChvcmctdW5pcXVpZnkNCiAgICAgIChhcHBlbmQg ZmlsbC1ub2JyZWFrLXByZWRpY2F0ZQ0KCSAgICAgICcob3JnLWZpbGwtbGluZS1icmVhay1ub2Jy ZWFrLXANCgkJb3JnLWZpbGwtcGFyYWdyYXBoLXdpdGgtdGltZXN0YW1wLW5vYnJlYWstcCkpKSkp DQogIChsZXQgKChwYXJhZ3JhcGgtZW5kaW5nIChzdWJzdHJpbmcgb3JnLWVsZW1lbnQtcGFyYWdy YXBoLXNlcGFyYXRlIDEpKSkNCiAgICAob3JnLXNldC1sb2NhbCAncGFyYWdyYXBoLXN0YXJ0IHBh cmFncmFwaC1lbmRpbmcpDQogICAgKG9yZy1zZXQtbG9jYWwgJ3BhcmFncmFwaC1zZXBhcmF0ZSBw YXJhZ3JhcGgtZW5kaW5nKSkNCiAgKG9yZy1zZXQtbG9jYWwgJ2ZpbGwtcGFyYWdyYXBoLWZ1bmN0 aW9uICdvcmctZmlsbC1wYXJhZ3JhcGgpDQogIChvcmctc2V0LWxvY2FsICdhdXRvLWZpbGwtaW5o aWJpdC1yZWdleHAgbmlsKQ0KICAob3JnLXNldC1sb2NhbCAnYWRhcHRpdmUtZmlsbC1mdW5jdGlv biAnb3JnLWFkYXB0aXZlLWZpbGwtZnVuY3Rpb24pDQogIChvcmctc2V0LWxvY2FsICdub3JtYWwt YXV0by1maWxsLWZ1bmN0aW9uICdvcmctYXV0by1maWxsLWZ1bmN0aW9uKQ0KICAob3JnLXNldC1s b2NhbCAnY29tbWVudC1saW5lLWJyZWFrLWZ1bmN0aW9uICdvcmctY29tbWVudC1saW5lLWJyZWFr LWZ1bmN0aW9uKSkNCg0KKGRlZnVuIG9yZy1maWxsLWxpbmUtYnJlYWstbm9icmVhay1wICgpDQog ICJOb24tbmlsIHdoZW4gYSBuZXcgbGluZSBhdCBwb2ludCB3b3VsZCBjcmVhdGUgYW4gT3JnIGxp bmUgYnJlYWsuIg0KICAoc2F2ZS1leGN1cnNpb24NCiAgICAoc2tpcC1jaGFycy1iYWNrd2FyZCAi WyBcdF0iKQ0KICAgIChza2lwLWNoYXJzLWJhY2t3YXJkICJcXFxcIikNCiAgICAobG9va2luZy1h dCAiXFxcXFxcXFxcXCgkXFx8W15cXFxcXVxcKSIpKSkNCg0KKGRlZnVuIG9yZy1maWxsLXBhcmFn cmFwaC13aXRoLXRpbWVzdGFtcC1ub2JyZWFrLXAgKCkNCiAgIk5vbi1uaWwgd2hlbiBhIG5ldyBs aW5lIGF0IHBvaW50IHdvdWxkIHNwbGl0IGEgdGltZXN0YW1wLiINCiAgKGFuZCAob3JnLWF0LXRp bWVzdGFtcC1wIHQpDQogICAgICAgKG5vdCAobG9va2luZy1hdCBvcmctdHMtcmVnZXhwLWJvdGgp KSkpDQoNCihkZWNsYXJlLWZ1bmN0aW9uIG1lc3NhZ2UtaW4tYm9keS1wICJtZXNzYWdlIiAoKSkN CihkZWZ2YXIgb3JndGJsLWxpbmUtc3RhcnQtcmVnZXhwKSA7IEZyb20gb3JnLXRhYmxlLmVsDQoo ZGVmdW4gb3JnLWFkYXB0aXZlLWZpbGwtZnVuY3Rpb24gKCkNCiAgIkNvbXB1dGUgYSBmaWxsIHBy ZWZpeCBmb3IgdGhlIGN1cnJlbnQgbGluZS4NClJldHVybiBmaWxsIHByZWZpeCwgYXMgYSBzdHJp bmcsIG9yIG5pbCBpZiBjdXJyZW50IGxpbmUgaXNuJ3QNCm1lYW50IHRvIGJlIGZpbGxlZC4gIEZv ciBjb252ZW5pZW5jZSwgaWYgYGFkYXB0aXZlLWZpbGwtcmVnZXhwJw0KbWF0Y2hlcyBpbiBwYXJh Z3JhcGhzIG9yIGNvbW1lbnRzLCB1c2UgaXQuIg0KICAoY2F0Y2ggJ2V4aXQNCiAgICAod2hlbiAo ZGVyaXZlZC1tb2RlLXAgJ21lc3NhZ2UtbW9kZSkNCiAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCShi ZWdpbm5pbmctb2YtbGluZSkNCgkoY29uZCAoKG9yIChub3QgKG1lc3NhZ2UtaW4tYm9keS1wKSkN CgkJICAgKGxvb2tpbmctYXQgb3JndGJsLWxpbmUtc3RhcnQtcmVnZXhwKSkNCgkgICAgICAgKHRo cm93ICdleGl0IG5pbCkpDQoJICAgICAgKChsb29raW5nLWF0IG1lc3NhZ2UtY2l0ZS1wcmVmaXgt cmVnZXhwKQ0KCSAgICAgICAodGhyb3cgJ2V4aXQgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVz IDApKSkNCgkgICAgICAoKGxvb2tpbmctYXQgb3JnLW91dGxpbmUtcmVnZXhwKQ0KCSAgICAgICAo dGhyb3cgJ2V4aXQgKG1ha2Utc3RyaW5nIChsZW5ndGggKG1hdGNoLXN0cmluZyAwKSkgPyApKSkp KSkNCiAgICAob3JnLXdpdGgtd2lkZS1idWZmZXINCiAgICAgKGxldCogKChwIChsaW5lLWJlZ2lu bmluZy1wb3NpdGlvbikpDQoJICAgIChlbGVtZW50IChzYXZlLWV4Y3Vyc2lvbg0KCQkgICAgICAg KGJlZ2lubmluZy1vZi1saW5lKQ0KCQkgICAgICAgKG9yIChpZ25vcmUtZXJyb3JzIChvcmctZWxl bWVudC1hdC1wb2ludCkpDQoJCQkgICAodXNlci1lcnJvciAiQW4gZWxlbWVudCBjYW5ub3QgYmUg cGFyc2VkIGxpbmUgJWQiDQoJCQkJICAgICAgIChsaW5lLW51bWJlci1hdC1wb3MgKHBvaW50KSkp KSkpDQoJICAgICh0eXBlIChvcmctZWxlbWVudC10eXBlIGVsZW1lbnQpKQ0KCSAgICAocG9zdC1h ZmZpbGlhdGVkIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cG9zdC1hZmZpbGlhdGVkIGVsZW1lbnQp KSkNCiAgICAgICAodW5sZXNzIChhbmQgcG9zdC1hZmZpbGlhdGVkICg8IHAgcG9zdC1hZmZpbGlh dGVkKSkNCgkgKGNhc2UgdHlwZQ0KCSAgIChjb21tZW50DQoJICAgIChzYXZlLWV4Y3Vyc2lvbg0K CSAgICAgIChiZWdpbm5pbmctb2YtbGluZSkNCgkgICAgICAobG9va2luZy1hdCAiWyBcdF0qIikN CgkgICAgICAoY29uY2F0IChtYXRjaC1zdHJpbmcgMCkgIiMgIikpKQ0KCSAgIChmb290bm90ZS1k ZWZpbml0aW9uICIiKQ0KCSAgICgoaXRlbSBwbGFpbi1saXN0KQ0KCSAgICAobWFrZS1zdHJpbmcg KG9yZy1saXN0LWl0ZW0tYm9keS1jb2x1bW4NCgkJCSAgKG9yIHBvc3QtYWZmaWxpYXRlZA0KCQkJ ICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBlbGVtZW50KSkpDQoJCQkgPyApKQ0K CSAgIChwYXJhZ3JhcGgNCgkgICAgOzsgRmlsbCBwcmVmaXggaXMgdXN1YWxseSB0aGUgc2FtZSBh cyB0aGUgY3VycmVudCBsaW5lLA0KCSAgICA7OyB1bmxlc3MgdGhlIHBhcmFncmFwaCBpcyBhdCB0 aGUgYmVnaW5uaW5nIG9mIGFuIGl0ZW0uDQoJICAgIChsZXQgKChwYXJlbnQgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDpwYXJlbnQgZWxlbWVudCkpKQ0KCSAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCQko YmVnaW5uaW5nLW9mLWxpbmUpDQoJCShjb25kICgoZXEgKG9yZy1lbGVtZW50LXR5cGUgcGFyZW50 KSAnaXRlbSkNCgkJICAgICAgIChtYWtlLXN0cmluZyAob3JnLWxpc3QtaXRlbS1ib2R5LWNvbHVt bg0KCQkJCSAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBwYXJlbnQpKQ0KCQkJCSAg ICA/ICkpDQoJCSAgICAgICgoYW5kIGFkYXB0aXZlLWZpbGwtcmVnZXhwDQoJCQkgICAgOzsgTG9j YWxseSBkaXNhYmxlDQoJCQkgICAgOzsgYGFkYXB0aXZlLWZpbGwtZnVuY3Rpb24nIHRvIGxldA0K CQkJICAgIDs7IGBmaWxsLWNvbnRleHQtcHJlZml4JyBoYW5kbGUNCgkJCSAgICA7OyBgYWRhcHRp dmUtZmlsbC1yZWdleHAnIHZhcmlhYmxlLg0KCQkJICAgIChsZXQgKGFkYXB0aXZlLWZpbGwtZnVu Y3Rpb24pDQoJCQkgICAgICAoZmlsbC1jb250ZXh0LXByZWZpeA0KCQkJICAgICAgIHBvc3QtYWZm aWxpYXRlZA0KCQkJICAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIGVsZW1lbnQpKSkp KQ0KCQkgICAgICAoKGxvb2tpbmctYXQgIlsgXHRdKyIpIChtYXRjaC1zdHJpbmcgMCkpDQoJCSAg ICAgICh0ICAiIikpKSkpDQoJICAgKGNvbW1lbnQtYmxvY2sNCgkgICAgOzsgT25seSBmaWxsIGNv bnRlbnRzIGlmIFAgaXMgd2l0aGluIGJsb2NrIGJvdW5kYXJpZXMuDQoJICAgIChsZXQqICgoY2Jl ZyAoc2F2ZS1leGN1cnNpb24gKGdvdG8tY2hhciBwb3N0LWFmZmlsaWF0ZWQpDQoJCQkJCSAoZm9y d2FyZC1saW5lKQ0KCQkJCQkgKHBvaW50KSkpDQoJCSAgIChjZW5kIChzYXZlLWV4Y3Vyc2lvbg0K CQkJICAgKGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBlbGVtZW50KSkNCgkJ CSAgIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHJcdFxuIikNCgkJCSAgIChsaW5lLWJlZ2lubmlu Zy1wb3NpdGlvbikpKSkNCgkgICAgICAod2hlbiAoYW5kICg+PSBwIGNiZWcpICg8IHAgY2VuZCkp DQoJCShpZiAoc2F2ZS1leGN1cnNpb24gKGJlZ2lubmluZy1vZi1saW5lKSAobG9va2luZy1hdCAi WyBcdF0rIikpDQoJCSAgICAobWF0Y2gtc3RyaW5nIDApDQoJCSAgIiIpKSkpKSkpKSkpDQoNCihk ZWNsYXJlLWZ1bmN0aW9uIG1lc3NhZ2UtZ290by1ib2R5ICJtZXNzYWdlIiAoKSkNCihkZWZ2YXIg bWVzc2FnZS1jaXRlLXByZWZpeC1yZWdleHApCTsgRnJvbSBtZXNzYWdlLmVsDQooZGVmdW4gb3Jn LWZpbGwtcGFyYWdyYXBoICgmb3B0aW9uYWwganVzdGlmeSkNCiAgIkZpbGwgZWxlbWVudCBhdCBw b2ludCwgd2hlbiBhcHBsaWNhYmxlLg0KDQpUaGlzIGZ1bmN0aW9uIG9ubHkgYXBwbGllcyB0byBj b21tZW50IGJsb2NrcywgY29tbWVudHMsIGV4YW1wbGUNCmJsb2NrcyBhbmQgcGFyYWdyYXBocy4g IEFsc28sIGFzIGEgc3BlY2lhbCBjYXNlLCByZS1hbGlnbiB0YWJsZQ0Kd2hlbiBwb2ludCBpcyBh dCBvbmUuDQoNCklmIEpVU1RJRlkgaXMgbm9uLW5pbCAoaW50ZXJhY3RpdmVseSwgd2l0aCBwcmVm aXggYXJndW1lbnQpLA0KanVzdGlmeSBhcyB3ZWxsLiAgSWYgYHNlbnRlbmNlLWVuZC1kb3VibGUt c3BhY2UnIGlzIG5vbi1uaWwsIHRoZW4NCnBlcmlvZCBmb2xsb3dlZCBieSBvbmUgc3BhY2UgZG9l cyBub3QgZW5kIGEgc2VudGVuY2UsIHNvIGRvbid0DQpicmVhayBhIGxpbmUgdGhlcmUuICBUaGUg dmFyaWFibGUgYGZpbGwtY29sdW1uJyBjb250cm9scyB0aGUNCndpZHRoIGZvciBmaWxsaW5nLg0K DQpGb3IgY29udmVuaWVuY2UsIHdoZW4gcG9pbnQgaXMgYXQgYSBwbGFpbiBsaXN0LCBhbiBpdGVt IG9yDQphIGZvb3Rub3RlIGRlZmluaXRpb24sIHRyeSB0byBmaWxsIHRoZSBmaXJzdCBwYXJhZ3Jh cGggd2l0aGluLiINCiAgKGludGVyYWN0aXZlKQ0KICAoaWYgKGFuZCAoZGVyaXZlZC1tb2RlLXAg J21lc3NhZ2UtbW9kZSkNCgkgICAob3IgKG5vdCAobWVzc2FnZS1pbi1ib2R5LXApKQ0KCSAgICAg ICAoc2F2ZS1leGN1cnNpb24gKG1vdmUtYmVnaW5uaW5nLW9mLWxpbmUgMSkNCgkJCSAgICAgICAo bG9va2luZy1hdCBtZXNzYWdlLWNpdGUtcHJlZml4LXJlZ2V4cCkpKSkNCiAgICAgIDs7IEZpcnN0 IGVuc3VyZSBmaWxsaW5nIGlzIGNvcnJlY3QgaW4gbWVzc2FnZS1tb2RlLg0KICAgICAgKGxldCAo KGZpbGwtcGFyYWdyYXBoLWZ1bmN0aW9uDQoJICAgICAoY2FkYWRyIChhc3NvYyAnZmlsbC1wYXJh Z3JhcGgtZnVuY3Rpb24gb3JnLWZiLXZhcnMpKSkNCgkgICAgKGZpbGwtcHJlZml4IChjYWRhZHIg KGFzc29jICdmaWxsLXByZWZpeCBvcmctZmItdmFycykpKQ0KCSAgICAocGFyYWdyYXBoLXN0YXJ0 IChjYWRhZHIgKGFzc29jICdwYXJhZ3JhcGgtc3RhcnQgb3JnLWZiLXZhcnMpKSkNCgkgICAgKHBh cmFncmFwaC1zZXBhcmF0ZQ0KCSAgICAgKGNhZGFkciAoYXNzb2MgJ3BhcmFncmFwaC1zZXBhcmF0 ZSBvcmctZmItdmFycykpKSkNCgkoZmlsbC1wYXJhZ3JhcGggbmlsKSkNCiAgICAod2l0aC1zeW50 YXgtdGFibGUgb3JnLW1vZGUtdHJhbnNwb3NlLXdvcmQtc3ludGF4LXRhYmxlDQogICAgICA7OyBN b3ZlIHRvIGVuZCBvZiBsaW5lIGluIG9yZGVyIHRvIGdldCB0aGUgZmlyc3QgcGFyYWdyYXBoDQog ICAgICA7OyB3aXRoaW4gYSBwbGFpbiBsaXN0IG9yIGEgZm9vdG5vdGUgZGVmaW5pdGlvbi4NCiAg ICAgIChsZXQgKChlbGVtZW50IChzYXZlLWV4Y3Vyc2lvbg0KCQkgICAgICAgKGVuZC1vZi1saW5l KQ0KCQkgICAgICAgKG9yIChpZ25vcmUtZXJyb3JzIChvcmctZWxlbWVudC1hdC1wb2ludCkpDQoJ CQkgICAodXNlci1lcnJvciAiQW4gZWxlbWVudCBjYW5ub3QgYmUgcGFyc2VkIGxpbmUgJWQiDQoJ CQkJICAgICAgIChsaW5lLW51bWJlci1hdC1wb3MgKHBvaW50KSkpKSkpKQ0KCTs7IEZpcnN0IGNo ZWNrIGlmIHBvaW50IGlzIGluIGEgYmxhbmsgbGluZSBhdCB0aGUgYmVnaW5uaW5nIG9mDQoJOzsg dGhlIGJ1ZmZlci4gIEluIHRoYXQgY2FzZSwgaWdub3JlIGZpbGxpbmcuDQoJKGNhc2UgKG9yZy1l bGVtZW50LXR5cGUgZWxlbWVudCkNCgkgIDs7IFVzZSBtYWpvciBtb2RlIGZpbGxpbmcgZnVuY3Rp b24gaXMgc3JjIGJsb2Nrcy4NCgkgIChzcmMtYmxvY2sgKG9yZy1iYWJlbC1kby1rZXktc2VxdWVu Y2UtaW4tZWRpdC1idWZmZXIgKGtiZCAiTS1xIikpKQ0KCSAgOzsgQWxpZ24gT3JnIHRhYmxlcywg bGVhdmUgdGFibGUuZWwgdGFibGVzIGFzLWlzLg0KCSAgKHRhYmxlLXJvdyAob3JnLXRhYmxlLWFs aWduKSB0KQ0KCSAgKHRhYmxlDQoJICAgKHdoZW4gKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 dHlwZSBlbGVtZW50KSAnb3JnKQ0KCSAgICAgKHNhdmUtZXhjdXJzaW9uDQoJICAgICAgIChnb3Rv LWNoYXIgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwb3N0LWFmZmlsaWF0ZWQgZWxlbWVudCkpDQoJ ICAgICAgIChvcmctdGFibGUtYWxpZ24pKSkNCgkgICB0KQ0KCSAgKHBhcmFncmFwaA0KCSAgIDs7 IFBhcmFncmFwaHMgbWF5IGNvbnRhaW4gYGxpbmUtYnJlYWsnIHR5cGUgb2JqZWN0cy4NCgkgICAo bGV0ICgoYmVnIChtYXggKHBvaW50LW1pbikNCgkJCSAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 Y29udGVudHMtYmVnaW4gZWxlbWVudCkpKQ0KCQkgKGVuZCAobWluIChwb2ludC1tYXgpDQoJCQkg ICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNvbnRlbnRzLWVuZCBlbGVtZW50KSkpKQ0KCSAgICAg OzsgRG8gbm90aGluZyBpZiBwb2ludCBpcyBhdCBhbiBhZmZpbGlhdGVkIGtleXdvcmQuDQoJICAg ICAoaWYgKDwgKGxpbmUtZW5kLXBvc2l0aW9uKSBiZWcpIHQNCgkgICAgICAgKHdoZW4gKGRlcml2 ZWQtbW9kZS1wICdtZXNzYWdlLW1vZGUpDQoJCSA7OyBJbiBgbWVzc2FnZS1tb2RlJywgZG8gbm90 IGZpbGwgZm9sbG93aW5nIGNpdGF0aW9uDQoJCSA7OyBpbiBjdXJyZW50IHBhcmFncmFwaCBub3Ig dGV4dCBiZWZvcmUgbWVzc2FnZSBib2R5Lg0KCQkgKGxldCAoKGJvZHktc3RhcnQgKHNhdmUtZXhj dXJzaW9uIChtZXNzYWdlLWdvdG8tYm9keSkpKSkNCgkJICAgKHdoZW4gYm9keS1zdGFydCAoc2V0 cSBiZWcgKG1heCBib2R5LXN0YXJ0IGJlZykpKSkNCgkJICh3aGVuIChzYXZlLWV4Y3Vyc2lvbg0K CQkJIChyZS1zZWFyY2gtZm9yd2FyZA0KCQkJICAoY29uY2F0ICJeIiBtZXNzYWdlLWNpdGUtcHJl Zml4LXJlZ2V4cCkgZW5kIHQpKQ0KCQkgICAoc2V0cSBlbmQgKG1hdGNoLWJlZ2lubmluZyAwKSkp KQ0KCSAgICAgICA7OyBGaWxsIHBhcmFncmFwaCwgdGFraW5nIGxpbmUgYnJlYWtzIGludG8gYWNj b3VudC4NCgkgICAgICAgOzsgRm9yIHRoYXQsIHNsaWNlIHRoZSBwYXJhZ3JhcGggdXNpbmcgbGlu ZSBicmVha3MgYXMNCgkgICAgICAgOzsgc2VwYXJhdG9ycywgYW5kIGZpbGwgdGhlIHBhcnRzIGlu IHJldmVyc2Ugb3JkZXIgdG8NCgkgICAgICAgOzsgYXZvaWQgbWVzc2luZyB3aXRoIG1hcmtlcnMu DQoJICAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCQkgKGdvdG8tY2hhciBlbmQpDQoJCSAobWFwYw0K CQkgIChsYW1iZGEgKHBvcykNCgkJICAgIChmaWxsLXJlZ2lvbi1hcy1wYXJhZ3JhcGggcG9zIChw b2ludCkganVzdGlmeSkNCgkJICAgIChnb3RvLWNoYXIgcG9zKSkNCgkJICA7OyBGaW5kIHRoZSBs aXN0IG9mIGVuZGluZyBwb3NpdGlvbnMgZm9yIGxpbmUgYnJlYWtzDQoJCSAgOzsgaW4gdGhlIGN1 cnJlbnQgcGFyYWdyYXBoLiAgQWRkIHBhcmFncmFwaA0KCQkgIDs7IGJlZ2lubmluZyB0byBpbmNs dWRlIGZpcnN0IHNsaWNlLg0KCQkgIChucmV2ZXJzZQ0KCQkgICAoY29ucyBiZWcNCgkJCSAob3Jn LWVsZW1lbnQtbWFwDQoJCQkgICAgIChvcmctZWxlbWVudC0tcGFyc2Utb2JqZWN0cw0KCQkJICAg ICAgYmVnIGVuZCBuaWwgKG9yZy1lbGVtZW50LXJlc3RyaWN0aW9uICdwYXJhZ3JhcGgpKQ0KCQkJ ICAgICAnbGluZS1icmVhaw0KCQkJICAgKGxhbWJkYSAobGIpIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6ZW5kIGxiKSkpKSkpKQ0KCSAgICAgICB0KSkpDQoJICA7OyBDb250ZW50cyBvZiBgY29tbWVu dC1ibG9jaycgdHlwZSBlbGVtZW50cyBzaG91bGQgYmUNCgkgIDs7IGZpbGxlZCBhcyBwbGFpbiB0 ZXh0LCBidXQgb25seSBpZiBwb2ludCBpcyB3aXRoaW4gYmxvY2sNCgkgIDs7IG1hcmtlcnMuDQoJ ICAoY29tbWVudC1ibG9jaw0KCSAgIChsZXQqICgoY2FzZS1mb2xkLXNlYXJjaCB0KQ0KCQkgIChi ZWcgKHNhdmUtZXhjdXJzaW9uDQoJCQkgKGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVydHkg OmJlZ2luIGVsZW1lbnQpKQ0KCQkJIChyZS1zZWFyY2gtZm9yd2FyZCAiXlsgXHRdKiNcXCtiZWdp bl9jb21tZW50IiBuaWwgdCkNCgkJCSAoZm9yd2FyZC1saW5lKQ0KCQkJIChwb2ludCkpKQ0KCQkg IChlbmQgKHNhdmUtZXhjdXJzaW9uDQoJCQkgKGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVy dHkgOmVuZCBlbGVtZW50KSkNCgkJCSAocmUtc2VhcmNoLWJhY2t3YXJkICJeWyBcdF0qI1xcK2Vu ZF9jb21tZW50IiBuaWwgdCkNCgkJCSAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pKSkpDQoJICAg ICAoaWYgKG9yICg8IChwb2ludCkgYmVnKSAoPiAocG9pbnQpIGVuZCkpIHQNCgkgICAgICAgKGZp bGwtcmVnaW9uLWFzLXBhcmFncmFwaA0KCQkoc2F2ZS1leGN1cnNpb24gKGVuZC1vZi1saW5lKQ0K CQkJCShyZS1zZWFyY2gtYmFja3dhcmQgIl5bIFx0XSokIiBiZWcgJ21vdmUpDQoJCQkJKGxpbmUt YmVnaW5uaW5nLXBvc2l0aW9uKSkNCgkJKHNhdmUtZXhjdXJzaW9uIChiZWdpbm5pbmctb2YtbGlu ZSkNCgkJCQkocmUtc2VhcmNoLWZvcndhcmQgIl5bIFx0XSokIiBlbmQgJ21vdmUpDQoJCQkJKGxp bmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkNCgkJanVzdGlmeSkpKSkNCgkgIDs7IEZpbGwgY29tbWVu dHMuDQoJICAoY29tbWVudA0KCSAgIChsZXQgKChiZWdpbiAob3JnLWVsZW1lbnQtcHJvcGVydHkg OnBvc3QtYWZmaWxpYXRlZCBlbGVtZW50KSkNCgkJIChlbmQgKG9yZy1lbGVtZW50LXByb3BlcnR5 IDplbmQgZWxlbWVudCkpKQ0KCSAgICAgKHdoZW4gKGFuZCAoPj0gKHBvaW50KSBiZWdpbikgKDw9 IChwb2ludCkgZW5kKSkNCgkgICAgICAgKGxldCAoKGJlZ2luIChzYXZlLWV4Y3Vyc2lvbg0KCQkJ ICAgICAgKGVuZC1vZi1saW5lKQ0KCQkJICAgICAgKGlmIChyZS1zZWFyY2gtYmFja3dhcmQgIl5b IFx0XSojWyBcdF0qJCIgYmVnaW4gdCkNCgkJCQkgIChwcm9nbiAoZm9yd2FyZC1saW5lKSAocG9p bnQpKQ0KCQkJCWJlZ2luKSkpDQoJCSAgICAgKGVuZCAoc2F2ZS1leGN1cnNpb24NCgkJCSAgICAo ZW5kLW9mLWxpbmUpDQoJCQkgICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZCAiXlsgXHRdKiNbIFx0 XSokIiBlbmQgJ21vdmUpDQoJCQkJKDEtIChsaW5lLWJlZ2lubmluZy1wb3NpdGlvbikpDQoJCQkg ICAgICAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFxyXHRcbiIpDQoJCQkgICAgICAobGluZS1lbmQt cG9zaXRpb24pKSkpKQ0KCQkgOzsgRG8gbm90IGZpbGwgY29tbWVudHMgd2hlbiBhdCBhIGJsYW5r IGxpbmUuDQoJCSAod2hlbiAoPiBlbmQgYmVnaW4pDQoJCSAgIChsZXQgKChmaWxsLXByZWZpeA0K CQkJICAoc2F2ZS1leGN1cnNpb24NCgkJCSAgICAoYmVnaW5uaW5nLW9mLWxpbmUpDQoJCQkgICAg KGxvb2tpbmctYXQgIlsgXHRdKiMiKQ0KCQkJICAgIChsZXQgKChjb21tZW50LXByZWZpeCAobWF0 Y2gtc3RyaW5nIDApKSkNCgkJCSAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAwKSkNCgkJCSAg ICAgIChpZiAobG9va2luZy1hdCBhZGFwdGl2ZS1maWxsLXJlZ2V4cCkNCgkJCQkgIChjb25jYXQg Y29tbWVudC1wcmVmaXggKG1hdGNoLXN0cmluZyAwKSkNCgkJCQkoY29uY2F0IGNvbW1lbnQtcHJl Zml4ICIgIikpKSkpKQ0KCQkgICAgIChzYXZlLWV4Y3Vyc2lvbg0KCQkgICAgICAgKGZpbGwtcmVn aW9uLWFzLXBhcmFncmFwaCBiZWdpbiBlbmQganVzdGlmeSkpKSkpKQ0KCSAgICAgdCkpDQoJICA7 OyBJZ25vcmUgZXZlcnkgb3RoZXIgZWxlbWVudC4NCgkgIChvdGhlcndpc2UgdCkpKSkpKQ0KDQoo ZGVmdW4gb3JnLWF1dG8tZmlsbC1mdW5jdGlvbiAoKQ0KICAiQXV0by1maWxsIGZ1bmN0aW9uLiIN CiAgOzsgQ2hlY2sgaWYgYXV0by1maWxsaW5nIGlzIG1lYW5pbmdmdWwuDQogIChsZXQgKChmYyAo Y3VycmVudC1maWxsLWNvbHVtbikpKQ0KICAgICh3aGVuIChhbmQgZmMgKD4gKGN1cnJlbnQtY29s dW1uKSBmYykpDQogICAgICAobGV0KiAoKGZpbGwtcHJlZml4IChvcmctYWRhcHRpdmUtZmlsbC1m dW5jdGlvbikpDQoJICAgICA7OyBFbmZvcmNlIGVtcHR5IGZpbGwgcHJlZml4LCBpZiByZXF1aXJl ZC4gIE90aGVyd2lzZSwgaXQNCgkgICAgIDs7IHdpbGwgYmUgY29tcHV0ZWQgYWdhaW4uDQoJICAg ICAoYWRhcHRpdmUtZmlsbC1tb2RlIChub3QgKGVxdWFsIGZpbGwtcHJlZml4ICIiKSkpKQ0KCSh3 aGVuIGZpbGwtcHJlZml4IChkby1hdXRvLWZpbGwpKSkpKSkNCg0KKGRlZnVuIG9yZy1jb21tZW50 LWxpbmUtYnJlYWstZnVuY3Rpb24gKCZvcHRpb25hbCBzb2Z0KQ0KICAiQnJlYWsgbGluZSBhdCBw b2ludCBhbmQgaW5kZW50LCBjb250aW51aW5nIGNvbW1lbnQgaWYgd2l0aGluIG9uZS4NClRoZSBp bnNlcnRlZCBuZXdsaW5lIGlzIG1hcmtlZCBoYXJkIGlmIHZhcmlhYmxlDQpgdXNlLWhhcmQtbmV3 bGluZXMnIGlzIHRydWUsIHVubGVzcyBvcHRpb25hbCBhcmd1bWVudCBTT0ZUIGlzDQpub24tbmls LiINCiAgKGlmIHNvZnQgKGluc2VydC1hbmQtaW5oZXJpdCA/XG4pIChuZXdsaW5lIDEpKQ0KICAo c2F2ZS1leGN1cnNpb24gKGZvcndhcmQtY2hhciAtMSkgKGRlbGV0ZS1ob3Jpem9udGFsLXNwYWNl KSkNCiAgKGRlbGV0ZS1ob3Jpem9udGFsLXNwYWNlKQ0KICAoaW5kZW50LXRvLWxlZnQtbWFyZ2lu KQ0KICAoaW5zZXJ0LWJlZm9yZS1tYXJrZXJzLWFuZC1pbmhlcml0IGZpbGwtcHJlZml4KSkNCg0K DQo7OzsgQ29tbWVudHMNCg0KOzsgT3JnIGNvbW1lbnRzIHN5bnRheCBpcyBxdWl0ZSBjb21wbGV4 LiAgSXQgcmVxdWlyZXMgdGhlIGVudGlyZSBsaW5lDQo7OyB0byBiZSBqdXN0IGEgY29tbWVudC4g IEFsc28sIGV2ZW4gd2l0aCB0aGUgcmlnaHQgc3ludGF4IGF0IHRoZQ0KOzsgYmVnaW5uaW5nIG9m IGxpbmUsIHNvbWUgc29tZSBlbGVtZW50cyAoaS5lLiB2ZXJzZS1ibG9jayBvcg0KOzsgZXhhbXBs ZS1ibG9jaykgZG9uJ3QgYWNjZXB0IGNvbW1lbnRzLiAgVXN1YWwgRW1hY3MgY29tbWVudCBjb21t YW5kcw0KOzsgY2Fubm90IGNvcGUgd2l0aCB0aG9zZSByZXF1aXJlbWVudHMuICBUaGVyZWZvcmUs IE9yZyByZXBsYWNlcyB0aGVtLg0KDQo7OyBPcmcgc3RpbGwgcmVsaWVzIG9uIGBjb21tZW50LWR3 aW0nLCBidXQgY2Fubm90IHRydXN0DQo7OyBgY29tbWVudC1vbmx5LXAnLiAgU28sIGBjb21tZW50 LXJlZ2lvbi1mdW5jdGlvbicgYW5kDQo7OyBgdW5jb21tZW50LXJlZ2lvbi1mdW5jdGlvbicgYm90 aCBwb2ludA0KOzsgdG9gb3JnLWNvbW1lbnQtb3ItdW5jb21tZW50LXJlZ2lvbicuICBFdmVudHVh bGx5LA0KOzsgYG9yZy1pbnNlcnQtY29tbWVudCcgdGFrZXMgY2FyZSBvZiBpbnNlcnRpb24gb2Yg Y29tbWVudHMgYXQgdGhlDQo7OyBiZWdpbm5pbmcgb2YgbGluZS4NCg0KOzsgYG9yZy1zZXR1cC1j b21tZW50cy1oYW5kbGluZycgaW5zdGFsbCBjb21tZW50cyByZWxhdGVkIHZhcmlhYmxlcw0KOzsg ZHVyaW5nIGBvcmctbW9kZScgaW5pdGlhbGl6YXRpb24uDQoNCihkZWZ1biBvcmctc2V0dXAtY29t bWVudHMtaGFuZGxpbmcgKCkNCiAgKGludGVyYWN0aXZlKQ0KICAob3JnLXNldC1sb2NhbCAnY29t bWVudC11c2Utc3ludGF4IG5pbCkNCiAgKG9yZy1zZXQtbG9jYWwgJ2NvbW1lbnQtc3RhcnQgIiMg IikNCiAgKG9yZy1zZXQtbG9jYWwgJ2NvbW1lbnQtc3RhcnQtc2tpcCAiXlxccy0qI1xcKD86IFxc fCRcXCkiKQ0KICAob3JnLXNldC1sb2NhbCAnY29tbWVudC1pbnNlcnQtY29tbWVudC1mdW5jdGlv biAnb3JnLWluc2VydC1jb21tZW50KQ0KICAob3JnLXNldC1sb2NhbCAnY29tbWVudC1yZWdpb24t ZnVuY3Rpb24gJ29yZy1jb21tZW50LW9yLXVuY29tbWVudC1yZWdpb24pDQogIChvcmctc2V0LWxv Y2FsICd1bmNvbW1lbnQtcmVnaW9uLWZ1bmN0aW9uICdvcmctY29tbWVudC1vci11bmNvbW1lbnQt cmVnaW9uKSkNCg0KKGRlZnVuIG9yZy1pbnNlcnQtY29tbWVudCAoKQ0KICAiSW5zZXJ0IGFuIGVt cHR5IGNvbW1lbnQgYWJvdmUgY3VycmVudCBsaW5lLg0KSWYgdGhlIGxpbmUgaXMgZW1wdHksIGlu c2VydCBjb21tZW50IGF0IGl0cyBiZWdpbm5pbmcuIg0KICAoYmVnaW5uaW5nLW9mLWxpbmUpDQog IChpZiAobG9va2luZy1hdCAiXFxzLSokIikgKHJlcGxhY2UtbWF0Y2ggIiIpIChvcGVuLWxpbmUg MSkpDQogIChvcmctaW5kZW50LWxpbmUpDQogIChpbnNlcnQgIiMgIikpDQoNCihkZWZ2YXIgY29t bWVudC1lbXB0eS1saW5lcykJCTsgRnJvbSBuZXdjb21tZW50LmVsLg0KKGRlZnVuIG9yZy1jb21t ZW50LW9yLXVuY29tbWVudC1yZWdpb24gKGJlZyBlbmQgJnJlc3QgaWdub3JlKQ0KICAiQ29tbWVu dCBvciB1bmNvbW1lbnQgZWFjaCBub24tYmxhbmsgbGluZSBpbiB0aGUgcmVnaW9uLg0KVW5jb21t ZW50IGVhY2ggbm9uLWJsYW5rIGxpbmUgYmV0d2VlbiBCRUcgYW5kIEVORCBpZiBpdCBvbmx5DQpj b250YWlucyBjb21tZW50ZWQgbGluZXMuICBPdGhlcndpc2UsIGNvbW1lbnQgdGhlbS4iDQogIChz YXZlLXJlc3RyaWN0aW9uDQogICAgOzsgUmVzdHJpY3QgcmVnaW9uDQogICAgKG5hcnJvdy10by1y ZWdpb24gKHNhdmUtZXhjdXJzaW9uIChnb3RvLWNoYXIgYmVnKQ0KCQkJCSAgICAgIChza2lwLWNo YXJzLWZvcndhcmQgIiBcclx0XG4iIGVuZCkNCgkJCQkgICAgICAobGluZS1iZWdpbm5pbmctcG9z aXRpb24pKQ0KCQkgICAgICAoc2F2ZS1leGN1cnNpb24gKGdvdG8tY2hhciBlbmQpDQoJCQkJICAg ICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcclx0XG4iIGJlZykNCgkJCQkgICAgICAobGluZS1l bmQtcG9zaXRpb24pKSkNCiAgICAobGV0ICgodW5jb21tZW50cA0KCSAgIDs7IFVOQ09NTUVOVFAg aXMgbm9uLW5pbCB3aGVuIGV2ZXJ5IG5vbiBibGFuayBsaW5lIGJldHdlZW4NCgkgICA7OyBCRUcg YW5kIEVORCBpcyBhIGNvbW1lbnQuDQoJICAgKHNhdmUtZXhjdXJzaW9uDQoJICAgICAoZ290by1j aGFyIChwb2ludC1taW4pKQ0KCSAgICAgKHdoaWxlIChhbmQgKG5vdCAoZW9icCkpDQoJCQkgKGxl dCAoKGVsZW1lbnQgKG9yZy1lbGVtZW50LWF0LXBvaW50KSkpDQoJCQkgICAoYW5kIChlcSAob3Jn LWVsZW1lbnQtdHlwZSBlbGVtZW50KSAnY29tbWVudCkNCgkJCQkoZ290by1jaGFyIChtaW4gKHBv aW50LW1heCkNCgkJCQkJCShvcmctZWxlbWVudC1wcm9wZXJ0eQ0KCQkJCQkJIDplbmQgZWxlbWVu dCkpKSkpKSkNCgkgICAgIChlb2JwKSkpKQ0KICAgICAgKGlmIHVuY29tbWVudHANCgkgIDs7IE9u bHkgYmxhbmsgbGluZXMgYW5kIGNvbW1lbnRzIGluIHJlZ2lvbjogdW5jb21tZW50IGl0Lg0KCSAg KHNhdmUtZXhjdXJzaW9uDQoJICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQoJICAgICh3aGls ZSAobm90IChlb2JwKSkNCgkgICAgICAod2hlbiAobG9va2luZy1hdCAiWyBcdF0qXFwoI1xcKD86 IFxcfCRcXClcXCkiKQ0KCQkocmVwbGFjZS1tYXRjaCAiIiBuaWwgbmlsIG5pbCAxKSkNCgkgICAg ICAoZm9yd2FyZC1saW5lKSkpDQoJOzsgQ29tbWVudCBlYWNoIGxpbmUgaW4gcmVnaW9uLg0KCShs ZXQgKChtaW4taW5kZW50IChwb2ludC1tYXgpKSkNCgkgIDs7IEZpcnN0IGZpbmQgdGhlIG1pbmlt dW0gaW5kZW50YXRpb24gYWNyb3NzIGFsbCBsaW5lcy4NCgkgIChzYXZlLWV4Y3Vyc2lvbg0KCSAg ICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KCSAgICAod2hpbGUgKGFuZCAobm90IChlb2JwKSkg KG5vdCAoemVyb3AgbWluLWluZGVudCkpKQ0KCSAgICAgICh1bmxlc3MgKGxvb2tpbmctYXQgIlsg XHRdKiQiKQ0KCQkoc2V0cSBtaW4taW5kZW50IChtaW4gbWluLWluZGVudCAoY3VycmVudC1pbmRl bnRhdGlvbikpKSkNCgkgICAgICAoZm9yd2FyZC1saW5lKSkpDQoJICA7OyBUaGVuIGxvb3Agb3Zl ciBhbGwgbGluZXMuDQoJICAoc2F2ZS1leGN1cnNpb24NCgkgICAgKGdvdG8tY2hhciAocG9pbnQt bWluKSkNCgkgICAgKHdoaWxlIChub3QgKGVvYnApKQ0KCSAgICAgICh1bmxlc3MgKGFuZCAobm90 IGNvbW1lbnQtZW1wdHktbGluZXMpIChsb29raW5nLWF0ICJbIFx0XSokIikpDQoJCTs7IERvbid0 IGdldCBmb29sZWQgYnkgaW52aXNpYmxlIHRleHQgKGUuZy4gbGluayBwYXRoKQ0KCQk7OyB3aGVu IG1vdmluZyB0byBjb2x1bW4gTUlOLUlOREVOVC4NCgkJKGxldCAoKGJ1ZmZlci1pbnZpc2liaWxp dHktc3BlYyBuaWwpKQ0KCQkgIChvcmctbW92ZS10by1jb2x1bW4gbWluLWluZGVudCB0KSkNCgkJ KGluc2VydCBjb21tZW50LXN0YXJ0KSkNCgkgICAgICAoZm9yd2FyZC1saW5lKSkpKSkpKSkNCg0K DQo7OzsgUGxhbm5pbmcNCg0KOzsgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRvb2xzIHRvIG9wZXJh dGUgb24gdGltZXN0YW1wIG9iamVjdHMsIGFzDQo7OyByZXR1cm5lZCBieSwgZS5nLiBgb3JnLWVs ZW1lbnQtY29udGV4dCcuDQoNCihkZWZ1biBvcmctdGltZXN0YW1wLWhhcy10aW1lLXAgKHRpbWVz dGFtcCkNCiAgIk5vbi1uaWwgd2hlbiBUSU1FU1RBTVAgaGFzIGEgdGltZSBzcGVjaWZpZWQuIg0K ICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmhvdXItc3RhcnQgdGltZXN0YW1wKSkNCg0KKGRlZnVu IG9yZy10aW1lc3RhbXAtZm9ybWF0ICh0aW1lc3RhbXAgZm9ybWF0ICZvcHRpb25hbCBlbmQgdXRj KQ0KICAiRm9ybWF0IGEgVElNRVNUQU1QIGVsZW1lbnQgaW50byBhIHN0cmluZy4NCg0KRk9STUFU IGlzIGEgZm9ybWF0IHNwZWNpZmllciB0byBiZSBwYXNzZWQgdG8NCmBmb3JtYXQtdGltZS1zdHJp bmcnLg0KDQpXaGVuIG9wdGlvbmFsIGFyZ3VtZW50IEVORCBpcyBub24tbmlsLCB1c2UgZW5kIG9m IGRhdGUtcmFuZ2Ugb3INCnRpbWUtcmFuZ2UsIGlmIHBvc3NpYmxlLg0KDQpXaGVuIG9wdGlvbmFs IGFyZ3VtZW50IFVUQyBpcyBub24tbmlsLCB0aW1lIHdpbGwgYmUgZXhwcmVzc2VkIGFzDQpVbml2 ZXJzYWwgVGltZS4iDQogIChmb3JtYXQtdGltZS1zdHJpbmcNCiAgIGZvcm1hdA0KICAgKGFwcGx5 ICdlbmNvZGUtdGltZQ0KICAgICAgICAgIChjb25zIDANCiAgICAgICAgICAgICAgICAobWFwY2Fy DQogICAgICAgICAgICAgICAgIChsYW1iZGEgKHByb3ApIChvciAob3JnLWVsZW1lbnQtcHJvcGVy dHkgcHJvcCB0aW1lc3RhbXApIDApKQ0KICAgICAgICAgICAgICAgICAoaWYgZW5kICcoOm1pbnV0 ZS1lbmQgOmhvdXItZW5kIDpkYXktZW5kIDptb250aC1lbmQgOnllYXItZW5kKQ0KICAgICAgICAg ICAgICAgICAgICcoOm1pbnV0ZS1zdGFydCA6aG91ci1zdGFydCA6ZGF5LXN0YXJ0IDptb250aC1z dGFydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6eWVhci1zdGFydCkpKSkp DQogICB1dGMpKQ0KDQooZGVmdW4gb3JnLXRpbWVzdGFtcC1zcGxpdC1yYW5nZSAodGltZXN0YW1w ICZvcHRpb25hbCBlbmQpDQogICJFeHRyYWN0IGEgdGltZXN0YW1wIG9iamVjdCBmcm9tIGEgZGF0 ZSBvciB0aW1lIHJhbmdlLg0KDQpUSU1FU1RBTVAgaXMgYSB0aW1lc3RhbXAgb2JqZWN0LiBFTkQs IHdoZW4gbm9uLW5pbCwgbWVhbnMgZXh0cmFjdA0KdGhlIGVuZCBvZiB0aGUgcmFuZ2UuICBPdGhl cndpc2UsIGV4dHJhY3QgaXRzIHN0YXJ0Lg0KDQpSZXR1cm4gYSBuZXcgdGltZXN0YW1wIG9iamVj dCBzaGFyaW5nIHRoZSBzYW1lIHBhcmVudCBhcw0KVElNRVNUQU1QLiINCiAgKGxldCAoKHR5cGUg KG9yZy1lbGVtZW50LXByb3BlcnR5IDp0eXBlIHRpbWVzdGFtcCkpKQ0KICAgIChpZiAobWVtcSB0 eXBlICcoYWN0aXZlIGluYWN0aXZlIGRpYXJ5KSkgdGltZXN0YW1wDQogICAgICAobGV0ICgoc3Bs aXQtdHMgKGxpc3QgJ3RpbWVzdGFtcCAoY29weS1zZXF1ZW5jZSAobnRoIDEgdGltZXN0YW1wKSkp KSkNCgk7OyBTZXQgbmV3IHR5cGUuDQoJKG9yZy1lbGVtZW50LXB1dC1wcm9wZXJ0eQ0KCSBzcGxp dC10cyA6dHlwZSAoaWYgKGVxIHR5cGUgJ2FjdGl2ZS1yYW5nZSkgJ2FjdGl2ZSAnaW5hY3RpdmUp KQ0KCTs7IENvcHkgc3RhcnQgcHJvcGVydGllcyBvdmVyIGVuZCBwcm9wZXJ0aWVzIGlmIEVORCBp cw0KCTs7IG5vbi1uaWwuICBPdGhlcndpc2UsIGNvcHkgZW5kIHByb3BlcnRpZXMgb3ZlciBgc3Rh cnQnIG9uZXMuDQoJKGxldCAoKHAtYWxpc3QgJygoOm1pbnV0ZS1zdGFydCAuIDptaW51dGUtZW5k KQ0KCQkJICg6aG91ci1zdGFydCAuIDpob3VyLWVuZCkNCgkJCSAoOmRheS1zdGFydCAuIDpkYXkt ZW5kKQ0KCQkJICg6bW9udGgtc3RhcnQgLiA6bW9udGgtZW5kKQ0KCQkJICg6eWVhci1zdGFydCAu IDp5ZWFyLWVuZCkpKSkNCgkgIChkb2xpc3QgKHAtY2VsbCBwLWFsaXN0KQ0KCSAgICAob3JnLWVs ZW1lbnQtcHV0LXByb3BlcnR5DQoJICAgICBzcGxpdC10cw0KCSAgICAgKGZ1bmNhbGwgKGlmIGVu ZCAnY2FyICdjZHIpIHAtY2VsbCkNCgkgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eQ0KCSAgICAg IChmdW5jYWxsIChpZiBlbmQgJ2NkciAnY2FyKSBwLWNlbGwpIHNwbGl0LXRzKSkpDQoJICA7OyBF dmVudHVhbGx5IHJlZnJlc2ggYDpyYXctdmFsdWUnLg0KCSAgKG9yZy1lbGVtZW50LXB1dC1wcm9w ZXJ0eSBzcGxpdC10cyA6cmF3LXZhbHVlIG5pbCkNCgkgIChvcmctZWxlbWVudC1wdXQtcHJvcGVy dHkNCgkgICBzcGxpdC10cyA6cmF3LXZhbHVlIChvcmctZWxlbWVudC1pbnRlcnByZXQtZGF0YSBz cGxpdC10cykpKSkpKSkNCg0KKGRlZnVuIG9yZy10aW1lc3RhbXAtdHJhbnNsYXRlICh0aW1lc3Rh bXAgJm9wdGlvbmFsIGJvdW5kYXJ5KQ0KICAiQXBwbHkgYG9yZy10cmFuc2xhdGUtdGltZScgb24g YSBUSU1FU1RBTVAgb2JqZWN0Lg0KV2hlbiBvcHRpb25hbCBhcmd1bWVudCBCT1VOREFSWSBpcyBu b24tbmlsLCBpdCBpcyBlaXRoZXIgdGhlDQpzeW1ib2wgYHN0YXJ0JyBvciBgZW5kJy4gIEluIHRo aXMgY2FzZSwgb25seSB0cmFuc2xhdGUgdGhlDQpzdGFydGluZyBvciBlbmRpbmcgcGFydCBvZiBU SU1FU1RBTVAgaWYgaXQgaXMgYSBkYXRlIG9yIHRpbWUNCnJhbmdlLiAgT3RoZXJ3aXNlLCB0cmFu c2xhdGUgYm90aCBwYXJ0cy4iDQogIChpZiAoYW5kIChub3QgYm91bmRhcnkpDQoJICAgKG1lbXEg KG9yZy1lbGVtZW50LXByb3BlcnR5IDp0eXBlIHRpbWVzdGFtcCkNCgkJICcoYWN0aXZlLXJhbmdl IGluYWN0aXZlLXJhbmdlKSkpDQogICAgICAoY29uY2F0DQogICAgICAgKG9yZy10cmFuc2xhdGUt dGltZQ0KCShvcmctZWxlbWVudC1wcm9wZXJ0eSA6cmF3LXZhbHVlDQoJCQkgICAgICAob3JnLXRp bWVzdGFtcC1zcGxpdC1yYW5nZSB0aW1lc3RhbXApKSkNCiAgICAgICAiLS0iDQogICAgICAgKG9y Zy10cmFuc2xhdGUtdGltZQ0KCShvcmctZWxlbWVudC1wcm9wZXJ0eSA6cmF3LXZhbHVlDQoJCQkg ICAgICAob3JnLXRpbWVzdGFtcC1zcGxpdC1yYW5nZSB0aW1lc3RhbXAgdCkpKSkNCiAgICAob3Jn LXRyYW5zbGF0ZS10aW1lDQogICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eQ0KICAgICAgOnJhdy12 YWx1ZQ0KICAgICAgKGlmIChub3QgYm91bmRhcnkpIHRpbWVzdGFtcA0KCShvcmctdGltZXN0YW1w LXNwbGl0LXJhbmdlIHRpbWVzdGFtcCAoZXEgYm91bmRhcnkgJ2VuZCkpKSkpKSkNCg0KDQoNCjs7 OyBPdGhlciBzdHVmZi4NCg0KKGRlZnVuIG9yZy10b2dnbGUtZml4ZWQtd2lkdGgtc2VjdGlvbiAo YXJnKQ0KICAiVG9nZ2xlIHRoZSBmaXhlZC13aWR0aCBleHBvcnQuDQpJZiB0aGVyZSBpcyBubyBh Y3RpdmUgcmVnaW9uLCB0aGUgUVVPVEUga2V5d29yZCBhdCB0aGUgY3VycmVudCBoZWFkbGluZSBp cw0KaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4gIFdoZW4gcHJlc2VudCwgaXQgY2F1c2VzIHRoZSB0ZXh0 IGJldHdlZW4gdGhpcyBoZWFkbGluZQ0KYW5kIHRoZSBuZXh0IHRvIGJlIGV4cG9ydGVkIGFzIGZp eGVkLXdpZHRoIHRleHQsIGFuZCB1bm1vZGlmaWVkLg0KSWYgdGhlcmUgaXMgYW4gYWN0aXZlIHJl Z2lvbiwgdGhpcyBjb21tYW5kIGFkZHMgb3IgcmVtb3ZlcyBhIGNvbG9uIGFzIHRoZQ0KZmlyc3Qg Y2hhcmFjdGVyIG9mIHRoaXMgbGluZS4gIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5l IGlzIGEgY29sb24sDQp0aGlzIGxpbmUgaXMgYWxzbyBleHBvcnRlZCBpbiBmaXhlZC13aWR0aCBm b250LiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgKGxldCogKChjYyAwKQ0KCSAocmVnaW9ucCAo b3JnLXJlZ2lvbi1hY3RpdmUtcCkpDQoJIChiZWcgKGlmIHJlZ2lvbnAgKHJlZ2lvbi1iZWdpbm5p bmcpIChwb2ludCkpKQ0KCSAoZW5kIChpZiByZWdpb25wIChyZWdpb24tZW5kKSkpDQoJIChubGlu ZXMgKG9yIGFyZyAoaWYgKGFuZCBiZWcgZW5kKSAoY291bnQtbGluZXMgYmVnIGVuZCkgMSkpKQ0K CSAoY2FzZS1mb2xkLXNlYXJjaCBuaWwpDQoJIChyZSAiWyBcdF0qXFwoOlxcKD86IFxcfCRcXClc XCkiKQ0KCSBvZmYpDQogICAgKGlmIHJlZ2lvbnANCgkoc2F2ZS1leGN1cnNpb24NCgkgIChnb3Rv LWNoYXIgYmVnKQ0KCSAgKHNldHEgY2MgKGN1cnJlbnQtY29sdW1uKSkNCgkgIChiZWdpbm5pbmct b2YtbGluZSAxKQ0KCSAgKHNldHEgb2ZmIChsb29raW5nLWF0IHJlKSkNCgkgICh3aGlsZSAoPiBu bGluZXMgMCkNCgkgICAgKHNldHEgbmxpbmVzICgxLSBubGluZXMpKQ0KCSAgICAoYmVnaW5uaW5n LW9mLWxpbmUgMSkNCgkgICAgKGNvbmQNCgkgICAgIChhcmcNCgkgICAgICAob3JnLW1vdmUtdG8t Y29sdW1uIGNjIHQpDQoJICAgICAgKGluc2VydCAiOiBcbiIpDQoJICAgICAgKGZvcndhcmQtbGlu ZSAtMSkpDQoJICAgICAoKGFuZCBvZmYgKGxvb2tpbmctYXQgcmUpKQ0KCSAgICAgIChyZXBsYWNl LW1hdGNoICIiIHQgdCBuaWwgMSkpDQoJICAgICAoKG5vdCBvZmYpIChvcmctbW92ZS10by1jb2x1 bW4gY2MgdCkgKGluc2VydCAiOiAiKSkpDQoJICAgIChmb3J3YXJkLWxpbmUgMSkpKQ0KICAgICAg KHNhdmUtZXhjdXJzaW9uDQoJKG9yZy1iYWNrLXRvLWhlYWRpbmcpDQoJKGNvbmQNCgkgKChsb29r aW5nLWF0IChmb3JtYXQgb3JnLWhlYWRpbmcta2V5d29yZC1yZWdleHAtZm9ybWF0DQoJCQkgICAg ICBvcmctcXVvdGUtc3RyaW5nKSkNCgkgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAxKSkNCgkgIChs b29raW5nLWF0IChjb25jYXQgIiArIiBvcmctcXVvdGUtc3RyaW5nKSkNCgkgIChyZXBsYWNlLW1h dGNoICIiIHQgdCkNCgkgICh3aGVuIChlb2xwKSAoaW5zZXJ0ICIgIikpKQ0KCSAoKGxvb2tpbmct YXQgb3JnLW91dGxpbmUtcmVnZXhwKQ0KCSAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKQ0KCSAg KGluc2VydCBvcmctcXVvdGUtc3RyaW5nICIgIikpKSkpKSkNCg0KKGRlZnVuIG9yZy1yZWZ0ZXgt Y2l0YXRpb24gKCkNCiAgIlVzZSByZWZ0ZXgtY2l0YXRpb24gdG8gaW5zZXJ0IGEgY2l0YXRpb24g aW50byB0aGUgYnVmZmVyLg0KVGhpcyBsb29rcyBmb3IgYSBsaW5lIGxpa2UNCg0KIytCSUJMSU9H UkFQSFk6IGZvbyBwbGFpbiBvcHRpb246LWQNCg0KYW5kIGRlcml2ZXMgZnJvbSBpdCB0aGF0IGZv by5iaWIgaXMgdGhlIGJpYmxpb2dyYXBoeSBmaWxlIHJlbGV2YW50DQpmb3IgdGhpcyBkb2N1bWVu dC4gIEl0IHRoZW4gaW5zdGFsbHMgdGhlIG5lY2Vzc2FyeSBlbnZpcm9ubWVudCBmb3IgUmVmVGVY DQp0byB3b3JrIGluIHRoaXMgYnVmZmVyIGFuZCBjYWxscyBgcmVmdGV4LWNpdGF0aW9uJyAgdG8g aW5zZXJ0IGEgY2l0YXRpb24NCmludG8gdGhlIGJ1ZmZlci4NCg0KRXhwb3J0IG9mIHN1Y2ggY2l0 YXRpb25zIHRvIGJvdGggTGFUZVggYW5kIEhUTUwgaXMgaGFuZGxlZCBieSB0aGUgY29udHJpYnV0 ZWQNCnBhY2thZ2Ugb3gtYmlidGV4IGJ5IFRhcnUgS2FydHR1bmVuLiINCiAgKGludGVyYWN0aXZl KQ0KICAobGV0ICgocmVmdGV4LWRvY3N0cnVjdC1zeW1ib2wgJ3JkcykNCgkocmVmdGV4LWNpdGUt Zm9ybWF0ICJcXGNpdGV7JWx9IikNCglyZHMgYmliKQ0KICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAg ICAgKHNhdmUtcmVzdHJpY3Rpb24NCgkod2lkZW4pDQoJKGxldCAoKGNhc2UtZm9sZC1zZWFyY2gg dCkNCgkgICAgICAocmUgIl4jXFwrYmlibGlvZ3JhcGh5OlsgXHRdK1xcKFteIFx0XG5dK1xcKSIp KQ0KCSAgKGlmIChub3QgKHNhdmUtZXhjdXJzaW9uDQoJCSAgICAgKG9yIChyZS1zZWFyY2gtZm9y d2FyZCByZSBuaWwgdCkNCgkJCSAocmUtc2VhcmNoLWJhY2t3YXJkIHJlIG5pbCB0KSkpKQ0KCSAg ICAgIChlcnJvciAiTm8gYmlibGlvZ3JhcGh5IGRlZmluZWQgaW4gZmlsZSIpDQoJICAgIChzZXRx IGJpYiAoY29uY2F0IChtYXRjaC1zdHJpbmcgMSkgIi5iaWIiKQ0KCQkgIHJkcyAobGlzdCAobGlz dCAnYmliIGJpYikpKSkpKSkNCiAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdyZWZ0ZXgtY2l0YXRp b24pKSkNCg0KOzs7OyBGdW5jdGlvbnMgZXh0ZW5kaW5nIG91dGxpbmUgZnVuY3Rpb25hbGl0eQ0K DQooZGVmdW4gb3JnLWJlZ2lubmluZy1vZi1saW5lICgmb3B0aW9uYWwgYXJnKQ0KICAiR28gdG8g dGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5lLiAgSWYgdGhhdCBpcyBpbnZpc2libGUs IGNvbnRpbnVlDQp0byBhIHZpc2libGUgbGluZSBiZWdpbm5pbmcuICBUaGlzIG1ha2VzIHRoZSBm dW5jdGlvbiBvZiBDLWEgbW9yZSBpbnR1aXRpdmUuDQpJZiB0aGlzIGlzIGEgaGVhZGxpbmUsIGFu ZCBgb3JnLXNwZWNpYWwtY3RybC1hL2UnIGlzIHNldCwgaWdub3JlIHRhZ3Mgb24gdGhlDQpmaXJz dCBhdHRlbXB0LCBhbmQgb25seSBtb3ZlIHRvIGFmdGVyIHRoZSB0YWdzIHdoZW4gdGhlIGN1cnNv ciBpcyBhbHJlYWR5DQpiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaGVhZGxpbmUuIg0KICAoaW50ZXJh Y3RpdmUgIlAiKQ0KICAobGV0ICgocG9zIChwb2ludCkpDQoJKHNwZWNpYWwgKGlmIChjb25zcCBv cmctc3BlY2lhbC1jdHJsLWEvZSkNCgkJICAgICAoY2FyIG9yZy1zcGVjaWFsLWN0cmwtYS9lKQ0K CQkgICBvcmctc3BlY2lhbC1jdHJsLWEvZSkpDQoJZGVhY3RpdmF0ZS1tYXJrCXJlZnBvcykNCiAg ICAoaWYgKG9yZy1ib3VuZC1hbmQtdHJ1ZS1wIHZpc3VhbC1saW5lLW1vZGUpDQoJKGJlZ2lubmlu Zy1vZi12aXN1YWwtbGluZSAxKQ0KICAgICAgKGJlZ2lubmluZy1vZi1saW5lIDEpKQ0KICAgIChp ZiAoYW5kIGFyZyAoZmJvdW5kcCAnbW92ZS1iZWdpbm5pbmctb2YtbGluZSkpDQoJKGNhbGwtaW50 ZXJhY3RpdmVseSAnbW92ZS1iZWdpbm5pbmctb2YtbGluZSkNCiAgICAgIChpZiAoYm9icCkNCgkg IG5pbA0KCShiYWNrd2FyZC1jaGFyIDEpDQoJKGlmIChvcmctdHJ1ZWx5LWludmlzaWJsZS1wKQ0K CSAgICAod2hpbGUgKGFuZCAobm90IChib2JwKSkgKG9yZy10cnVlbHktaW52aXNpYmxlLXApKQ0K CSAgICAgIChiYWNrd2FyZC1jaGFyIDEpDQoJICAgICAgKGJlZ2lubmluZy1vZi1saW5lIDEpKQ0K CSAgKGZvcndhcmQtY2hhciAxKSkpKQ0KICAgICh3aGVuIHNwZWNpYWwNCiAgICAgIChjb25kDQog ICAgICAgKChhbmQgKGxvb2tpbmctYXQgb3JnLWNvbXBsZXgtaGVhZGluZy1yZWdleHApDQoJICAg ICAoPSAoY2hhci1hZnRlciAobWF0Y2gtZW5kIDEpKSA/XCApKQ0KCShzZXRxIHJlZnBvcyAobWlu ICgxKyAob3IgKG1hdGNoLWVuZCAzKSAobWF0Y2gtZW5kIDIpIChtYXRjaC1lbmQgMSkpKQ0KCQkJ ICAocG9pbnQtYXQtZW9sKSkpDQoJKGdvdG8tY2hhcg0KCSAoaWYgKGVxIHNwZWNpYWwgdCkNCgkg ICAgIChjb25kICgoPiBwb3MgcmVmcG9zKSByZWZwb3MpDQoJCSAgICgoPSBwb3MgKHBvaW50KSkg cmVmcG9zKQ0KCQkgICAodCAocG9pbnQpKSkNCgkgICAoY29uZCAoKD4gcG9zIChwb2ludCkpIChw b2ludCkpDQoJCSAoKG5vdCAoZXEgbGFzdC1jb21tYW5kIHRoaXMtY29tbWFuZCkpIChwb2ludCkp DQoJCSAodCByZWZwb3MpKSkpKQ0KICAgICAgICgob3JnLWF0LWl0ZW0tcCkNCgk7OyBCZWluZyBh dCBhbiBpdGVtIGFuZCBub3QgbG9va2luZyBhdCBhbiB0aGUgaXRlbSBtZWFucyBwb2ludA0KCTs7 IHdhcyBwcmV2aW91c2x5IG1vdmVkIHRvIGJlZ2lubmluZyBvZiBhIHZpc3VhbCBsaW5lLCB3aGlj aA0KCTs7IGRvZXNuJ3QgY29udGFpbiB0aGUgaXRlbS4gIFRoZXJlZm9yZSwgZG8gbm90aGluZyBz cGVjaWFsLA0KCTs7IGp1c3Qgc3RheSBoZXJlLg0KCSh3aGVuIChsb29raW5nLWF0IG9yZy1saXN0 LWZ1bGwtaXRlbS1yZSkNCgkgIDs7IFNldCBzcGVjaWFsIHBvc2l0aW9uIGF0IGZpcnN0IHdoaXRl IHNwYWNlIGNoYXJhY3RlciBhZnRlcg0KCSAgOzsgYnVsbGV0LCBhbmQgY2hlY2stYm94LCBpZiBh bnkuDQoJICAobGV0ICgoYWZ0ZXItYnVsbGV0DQoJCSAobGV0ICgoYm94IChtYXRjaC1lbmQgMykp KQ0KCQkgICAoaWYgKG5vdCBib3gpIChtYXRjaC1lbmQgMSkNCgkJICAgICAobGV0ICgoYWZ0ZXIg KGNoYXItYWZ0ZXIgYm94KSkpDQoJCSAgICAgICAoaWYgKGFuZCBhZnRlciAoPSBhZnRlciA/ICkp ICgxKyBib3gpIGJveCkpKSkpKQ0KCSAgICA7OyBTcGVjaWFsIGNhc2U6IE1vdmUgcG9pbnQgdG8g c3BlY2lhbCBwb3NpdGlvbiB3aGVuDQoJICAgIDs7IGN1cnJlbnRseSBhZnRlciBpdCBvciBhdCBi ZWdpbm5pbmcgb2YgbGluZS4NCgkgICAgKGlmIChlcSBzcGVjaWFsIHQpDQoJCSh3aGVuIChvciAo PiBwb3MgYWZ0ZXItYnVsbGV0KSAoPSAocG9pbnQpIHBvcykpDQoJCSAgKGdvdG8tY2hhciBhZnRl ci1idWxsZXQpKQ0KCSAgICAgIDs7IFJldmVyc2VkIGNhc2U6IE1vdmUgcG9pbnQgdG8gc3BlY2lh bCBwb3NpdGlvbiB3aGVuDQoJICAgICAgOzsgcG9pbnQgd2FzIGFscmVhZHkgYXQgYmVnaW5uaW5n IG9mIGxpbmUgYW5kIGNvbW1hbmQgaXMNCgkgICAgICA7OyByZXBlYXRlZC4NCgkgICAgICAod2hl biAoYW5kICg9IChwb2ludCkgcG9zKSAoZXEgbGFzdC1jb21tYW5kIHRoaXMtY29tbWFuZCkpDQoJ CShnb3RvLWNoYXIgYWZ0ZXItYnVsbGV0KSkpKSkpKSkNCiAgICAob3JnLW5vLXdhcm5pbmdzDQog ICAgIChhbmQgKGZlYXR1cmVwICd4ZW1hY3MpIChzZXRxIHptYWNzLXJlZ2lvbi1zdGF5cyB0KSkp KQ0KICAoc2V0cSBkaXNhYmxlLXBvaW50LWFkanVzdG1lbnQNCiAgICAgICAgKG9yIChub3QgKGlu dmlzaWJsZS1wIChwb2ludCkpKQ0KICAgICAgICAgICAgKG5vdCAoaW52aXNpYmxlLXAgKG1heCAo cG9pbnQtbWluKSAoMS0gKHBvaW50KSkpKSkpKSkNCg0KKGRlZnVuIG9yZy1lbmQtb2YtbGluZSAo Jm9wdGlvbmFsIGFyZykNCiAgIkdvIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuDQpJZiB0aGlzIGlz IGEgaGVhZGxpbmUsIGFuZCBgb3JnLXNwZWNpYWwtY3RybC1hL2UnIGlzIHNldCwgaWdub3JlDQp0 YWdzIG9uIHRoZSBmaXJzdCBhdHRlbXB0LCBhbmQgb25seSBtb3ZlIHRvIGFmdGVyIHRoZSB0YWdz IHdoZW4NCnRoZSBjdXJzb3IgaXMgYWxyZWFkeSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaGVhZGxp bmUuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAobGV0ICgoc3BlY2lhbCAoaWYgKGNvbnNwIG9y Zy1zcGVjaWFsLWN0cmwtYS9lKSAoY2RyIG9yZy1zcGVjaWFsLWN0cmwtYS9lKQ0KCQkgICBvcmct c3BlY2lhbC1jdHJsLWEvZSkpDQoJKG1vdmUtZnVuIChjb25kICgob3JnLWJvdW5kLWFuZC10cnVl LXAgdmlzdWFsLWxpbmUtbW9kZSkNCgkJCSAnZW5kLW9mLXZpc3VhbC1saW5lKQ0KCQkJKChmYm91 bmRwICdtb3ZlLWVuZC1vZi1saW5lKSAnbW92ZS1lbmQtb2YtbGluZSkNCgkJCSh0ICdlbmQtb2Yt bGluZSkpKQ0KCWRlYWN0aXZhdGUtbWFyaykNCiAgICAoaWYgKG9yIChub3Qgc3BlY2lhbCkgYXJn KSAoY2FsbC1pbnRlcmFjdGl2ZWx5IG1vdmUtZnVuKQ0KICAgICAgKGxldCogKChlbGVtZW50IChz YXZlLWV4Y3Vyc2lvbiAoYmVnaW5uaW5nLW9mLWxpbmUpDQoJCQkJICAgICAgKG9yZy1lbGVtZW50 LWF0LXBvaW50KSkpDQoJICAgICAodHlwZSAob3JnLWVsZW1lbnQtdHlwZSBlbGVtZW50KSkpDQoJ KGNvbmQNCgkgKChtZW1xIHR5cGUgJyhoZWFkbGluZSBpbmxpbmV0YXNrKSkNCgkgIChsZXQgKChw b3MgKHBvaW50KSkpDQoJICAgIChiZWdpbm5pbmctb2YtbGluZSAxKQ0KCSAgICAoaWYgKGxvb2tp bmctYXQgKG9yZy1yZSAiLio/XFwoPzpcXChbIFx0XSpcXClcXCg6W1s6YWxudW06XV9AIyU6XSs6 XFwpP1sgXHRdKlxcKT8kIikpDQoJCShpZiAoZXEgc3BlY2lhbCB0KQ0KCQkgICAgKGlmIChvciAo PCBwb3MgKG1hdGNoLWJlZ2lubmluZyAxKSkgKD0gcG9zIChtYXRjaC1lbmQgMCkpKQ0KCQkJKGdv dG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDEpKQ0KCQkgICAgICAoZ290by1jaGFyIChtYXRjaC1l bmQgMCkpKQ0KCQkgIChpZiAob3IgKDwgcG9zIChtYXRjaC1lbmQgMCkpDQoJCQkgIChub3QgKGVx IHRoaXMtY29tbWFuZCBsYXN0LWNvbW1hbmQpKSkNCgkJICAgICAgKGdvdG8tY2hhciAobWF0Y2gt ZW5kIDApKQ0KCQkgICAgKGdvdG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDEpKSkpDQoJICAgICAg KGNhbGwtaW50ZXJhY3RpdmVseSBtb3ZlLWZ1bikpKSkNCgkgKChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6aGlkZGVucCBlbGVtZW50KQ0KCSAgOzsgSWYgZWxlbWVudCBpcyBoaWRkZW4sIGBtb3ZlLWVu ZC1vZi1saW5lJyB3b3VsZCBwdXQgcG9pbnQNCgkgIDs7IGFmdGVyIGl0LiAgVXNlIGBlbmQtb2Yt bGluZScgdG8gc3RheSBvbiBjdXJyZW50IGxpbmUuDQoJICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdl bmQtb2YtbGluZSkpDQoJICh0IChjYWxsLWludGVyYWN0aXZlbHkgbW92ZS1mdW4pKSkpKQ0KICAg IChvcmctbm8td2FybmluZ3MgKGFuZCAoZmVhdHVyZXAgJ3hlbWFjcykgKHNldHEgem1hY3MtcmVn aW9uLXN0YXlzIHQpKSkpDQogIChzZXRxIGRpc2FibGUtcG9pbnQtYWRqdXN0bWVudA0KICAgICAg ICAob3IgKG5vdCAoaW52aXNpYmxlLXAgKHBvaW50KSkpDQogICAgICAgICAgICAobm90IChpbnZp c2libGUtcCAobWF4IChwb2ludC1taW4pICgxLSAocG9pbnQpKSkpKSkpKQ0KDQooZGVmaW5lLWtl eSBvcmctbW9kZS1tYXAgIlxDLWEiICdvcmctYmVnaW5uaW5nLW9mLWxpbmUpDQooZGVmaW5lLWtl eSBvcmctbW9kZS1tYXAgIlxDLWUiICdvcmctZW5kLW9mLWxpbmUpDQoNCihkZWZ1biBvcmctYmFj a3dhcmQtc2VudGVuY2UgKCZvcHRpb25hbCBhcmcpDQogICJHbyB0byBiZWdpbm5pbmcgb2Ygc2Vu dGVuY2UsIG9yIGJlZ2lubmluZyBvZiB0YWJsZSBmaWVsZC4NClRoaXMgd2lsbCBjYWxsIGBiYWNr d2FyZC1zZW50ZW5jZScgb3IgYG9yZy10YWJsZS1iZWdpbm5pbmctb2YtZmllbGQnLA0KZGVwZW5k aW5nIG9uIGNvbnRleHQuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoY29uZA0KICAgKChvcmct YXQtdGFibGUtcCkgKGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLXRhYmxlLWJlZ2lubmluZy1vZi1m aWVsZCkpDQogICAodCAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdiYWNrd2FyZC1zZW50ZW5jZSkpKSkN Cg0KKGRlZnVuIG9yZy1mb3J3YXJkLXNlbnRlbmNlICgmb3B0aW9uYWwgYXJnKQ0KICAiR28gdG8g ZW5kIG9mIHNlbnRlbmNlLCBvciBlbmQgb2YgdGFibGUgZmllbGQuDQpUaGlzIHdpbGwgY2FsbCBg Zm9yd2FyZC1zZW50ZW5jZScgb3IgYG9yZy10YWJsZS1lbmQtb2YtZmllbGQnLA0KZGVwZW5kaW5n IG9uIGNvbnRleHQuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoY29uZA0KICAgKChvcmctYXQt dGFibGUtcCkgKGNhbGwtaW50ZXJhY3RpdmVseSAnb3JnLXRhYmxlLWVuZC1vZi1maWVsZCkpDQog ICAodCAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdmb3J3YXJkLXNlbnRlbmNlKSkpKQ0KDQooZGVmaW5l LWtleSBvcmctbW9kZS1tYXAgIlxNLWEiICdvcmctYmFja3dhcmQtc2VudGVuY2UpDQooZGVmaW5l LWtleSBvcmctbW9kZS1tYXAgIlxNLWUiICdvcmctZm9yd2FyZC1zZW50ZW5jZSkNCg0KKGRlZnVu IG9yZy1raWxsLWxpbmUgKCZvcHRpb25hbCBhcmcpDQogICJLaWxsIGxpbmUsIHRvIHRhZ3Mgb3Ig ZW5kIG9mIGxpbmUuIg0KICAoaW50ZXJhY3RpdmUgIlAiKQ0KICAoY29uZA0KICAgKChvciAobm90 IG9yZy1zcGVjaWFsLWN0cmwtaykNCgkoYm9scCkNCgkobm90IChvcmctYXQtaGVhZGluZy1wKSkp DQogICAgKGlmIChhbmQgKGdldC1jaGFyLXByb3BlcnR5IChtaW4gKHBvaW50LW1heCkgKHBvaW50 LWF0LWVvbCkpICdpbnZpc2libGUpDQoJICAgICBvcmctY3RybC1rLXByb3RlY3Qtc3VidHJlZSkN CgkoaWYgKG9yIChlcSBvcmctY3RybC1rLXByb3RlY3Qtc3VidHJlZSAnZXJyb3IpDQoJCShub3Qg KHktb3Itbi1wICJLaWxsIGhpZGRlbiBzdWJ0cmVlIGFsb25nIHdpdGggaGVhZGxpbmU/ICIpKSkN CgkgICAgKHVzZXItZXJyb3IgIkMtayBhYm9ydGVkIGFzIGl0IHdvdWxkIGtpbGwgYSBoaWRkZW4g c3VidHJlZSIpKSkNCiAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5DQogICAgIChpZiAob3JnLWJvdW5k LWFuZC10cnVlLXAgdmlzdWFsLWxpbmUtbW9kZSkgJ2tpbGwtdmlzdWFsLWxpbmUgJ2tpbGwtbGlu ZSkpKQ0KICAgKChsb29raW5nLWF0IChvcmctcmUgIi4qP1xcUy1cXChbIFx0XStcXCg6W1s6YWxu dW06XV9AIyU6XSs6XFwpXFwpWyBcdF0qJCIpKQ0KICAgIChraWxsLXJlZ2lvbiAocG9pbnQpICht YXRjaC1iZWdpbm5pbmcgMSkpDQogICAgKG9yZy1zZXQtdGFncyBuaWwgdCkpDQogICAodCAoa2ls bC1yZWdpb24gKHBvaW50KSAocG9pbnQtYXQtZW9sKSkpKSkNCg0KKGRlZmluZS1rZXkgb3JnLW1v ZGUtbWFwICJcQy1rIiAnb3JnLWtpbGwtbGluZSkNCg0KKGRlZnVuIG9yZy15YW5rICgmb3B0aW9u YWwgYXJnKQ0KICAiWWFuay4gIElmIHRoZSBraWxsIGlzIGEgc3VidHJlZSwgdHJlYXQgaXQgc3Bl Y2lhbGx5Lg0KVGhpcyBjb21tYW5kIHdpbGwgbG9vayBhdCB0aGUgY3VycmVudCBraWxsIGFuZCBj aGVjayBpZiBpcyBhIHNpbmdsZQ0Kc3VidHJlZSwgb3IgYSBzZXJpZXMgb2Ygc3VidHJlZXNbMV0u ICBJZiBpdCBwYXNzZXMgdGhlIHRlc3QsIGFuZCBpZiB0aGUNCmN1cnNvciBpcyBhdCB0aGUgYmVn aW5uaW5nIG9mIGEgbGluZSBvciBhZnRlciB0aGUgc3RhcnMgb2YgYSBjdXJyZW50bHkNCmVtcHR5 IGhlYWRsaW5lLCB0aGVuIHRoZSB5YW5rIGlzIGhhbmRsZWQgc3BlY2lhbGx5LiAgSG93IGV4YWN0 bHkgZGVwZW5kcw0Kb24gdGhlIHZhbHVlIG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzLCBib3Ro IHNldCBieSBkZWZhdWx0Lg0KDQpvcmcteWFuay1mb2xkZWQtc3VidHJlZXMNCiAgICBXaGVuIHNl dCwgdGhlIHN1YnRyZWUocykgd2lsbCBiZSBmb2xkZWQgYWZ0ZXIgaW5zZXJ0aW9uLCBidXQgb25s eQ0KICAgIGlmIGRvaW5nIHNvIHdvdWxkIG5vdyBzd2FsbG93IHRleHQgYWZ0ZXIgdGhlIHlhbmtl ZCB0ZXh0Lg0KDQpvcmcteWFuay1hZGp1c3RlZC1zdWJ0cmVlcw0KICAgIFdoZW4gc2V0LCB0aGUg c3VidHJlZSB3aWxsIGJlIHByb21vdGVkIG9yIGRlbW90ZWQgaW4gb3JkZXIgdG8NCiAgICBmaXQg aW50byB0aGUgbG9jYWwgb3V0bGluZSB0cmVlIHN0cnVjdHVyZSwgd2hpY2ggbWVhbnMgdGhhdCB0 aGUgbGV2ZWwNCiAgICB3aWxsIGJlIGFkanVzdGVkIHNvIHRoYXQgaXQgYmVjb21lcyB0aGUgc21h bGxlciBvbmUgb2YgdGhlIHR3bw0KICAgICp2aXNpYmxlKiBzdXJyb3VuZGluZyBoZWFkaW5ncy4N Cg0KQW55IHByZWZpeCB0byB0aGlzIGNvbW1hbmQgd2lsbCBjYXVzZSBgeWFuaycgdG8gYmUgY2Fs bGVkIGRpcmVjdGx5IHdpdGgNCm5vIHNwZWNpYWwgdHJlYXRtZW50LiAgSW4gcGFydGljdWxhciwg YSBzaW1wbGUgXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBwcmVmaXggXA0Kd2lsbCBqdXN0DQpwbGFp bmx5IHlhbmsgdGhlIHRleHQgYXMgaXQgaXMuDQoNClxbMV0gVGhlIHRlc3QgY2hlY2tzIGlmIHRo ZSBmaXJzdCBub24td2hpdGUgbGluZSBpcyBhIGhlYWRpbmcNCiAgICBhbmQgaWYgdGhlcmUgYXJl IG5vIG90aGVyIGhlYWRpbmdzIHdpdGggZmV3ZXIgc3RhcnMuIg0KICAoaW50ZXJhY3RpdmUgIlAi KQ0KICAob3JnLXlhbmstZ2VuZXJpYyAneWFuayBhcmcpKQ0KDQooZGVmdW4gb3JnLXlhbmstZ2Vu ZXJpYyAoY29tbWFuZCBhcmcpDQogICJQZXJmb3JtIHNvbWUgeWFuay1saWtlIGNvbW1hbmQuDQoN ClRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgYmVoYXZpb3IgZGVzY3JpYmVkIGluIHRoZSBg b3JnLXlhbmsnDQpkb2N1bWVudGF0aW9uLiAgSG93ZXZlciwgaXQgaGFzIGJlZW4gZ2VuZXJhbGl6 ZWQgdG8gd29yayBmb3IgYW55DQppbnRlcmFjdGl2ZSBjb21tYW5kIHdpdGggc2ltaWxhciBiZWhh dmlvci4iDQoNCiAgOzsgcHJldGVuZCB0byBiZSBjb21tYW5kIENPTU1BTkQNCiAgKHNldHEgdGhp cy1jb21tYW5kIGNvbW1hbmQpDQoNCiAgKGlmIGFyZw0KICAgICAgKGNhbGwtaW50ZXJhY3RpdmVs eSBjb21tYW5kKQ0KDQogICAgKGxldCAoKHN1YnRyZWVwIDsgaXMga2lsbCBhIHN1YnRyZWUsIGFu ZCB0aGUgeWFuayBwb3NpdGlvbiBhcHByb3ByaWF0ZT8NCgkgICAoYW5kIChvcmcta2lsbC1pcy1z dWJ0cmVlLXApDQoJCShvciAoYm9scCkNCgkJICAgIChhbmQgKGxvb2tpbmctYXQgIlsgXHRdKiQi KQ0KCQkJIChzdHJpbmctbWF0Y2gNCgkJCSAgIlxcYFxcKitcXCciDQoJCQkgIChidWZmZXItc3Vi c3RyaW5nIChwb2ludC1hdC1ib2wpIChwb2ludCkpKSkpKSkNCgkgIHN3YWxsb3dwKQ0KICAgICAg KGNvbmQNCiAgICAgICAoKGFuZCBzdWJ0cmVlcCBvcmcteWFuay1mb2xkZWQtc3VidHJlZXMpDQoJ KGxldCAoKGJlZyAocG9pbnQpKQ0KCSAgICAgIGVuZCkNCgkgIChpZiAoYW5kIHN1YnRyZWVwIG9y Zy15YW5rLWFkanVzdGVkLXN1YnRyZWVzKQ0KCSAgICAgIChvcmctcGFzdGUtc3VidHJlZSBuaWwg bmlsICdmb3IteWFuaykNCgkgICAgKGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kKSkNCg0KCSAg KHNldHEgZW5kIChwb2ludCkpDQoJICAoZ290by1jaGFyIGJlZykNCgkgICh3aGVuIChhbmQgKGJv bHApIHN1YnRyZWVwDQoJCSAgICAgKG5vdCAoc2V0cSBzd2FsbG93cA0KCQkJCShvcmcteWFuay1m b2xkaW5nLXdvdWxkLXN3YWxsb3ctdGV4dCBiZWcgZW5kKSkpKQ0KCSAgICAob3JnLXdpdGgtbGlt aXRlZC1sZXZlbHMNCgkgICAgIChvciAobG9va2luZy1hdCBvcmctb3V0bGluZS1yZWdleHApDQoJ CSAocmUtc2VhcmNoLWZvcndhcmQgb3JnLW91dGxpbmUtcmVnZXhwLWJvbCBlbmQgdCkpDQoJICAg ICAod2hpbGUgKGFuZCAoPCAocG9pbnQpIGVuZCkgKGxvb2tpbmctYXQgb3JnLW91dGxpbmUtcmVn ZXhwKSkNCgkgICAgICAgKGhpZGUtc3VidHJlZSkNCgkgICAgICAgKG9yZy1jeWNsZS1zaG93LWVt cHR5LWxpbmVzICdmb2xkZWQpDQoJICAgICAgIChjb25kaXRpb24tY2FzZSBuaWwNCgkJICAgKG91 dGxpbmUtZm9yd2FyZC1zYW1lLWxldmVsIDEpDQoJCSAoZXJyb3IgKGdvdG8tY2hhciBlbmQpKSkp KSkNCgkgICh3aGVuIHN3YWxsb3dwDQoJICAgIChtZXNzYWdlDQoJICAgICAiSW5zZXJ0ZWQgdGV4 dCBub3QgZm9sZGVkIGJlY2F1c2UgdGhhdCB3b3VsZCBzd2FsbG93IHRleHQiKSkNCg0KCSAgKGdv dG8tY2hhciBlbmQpDQoJICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHRcblxyIikNCgkgIChiZWdp bm5pbmctb2YtbGluZSAxKQ0KCSAgKHB1c2gtbWFyayBiZWcgJ25vbXNnKSkpDQogICAgICAgKChh bmQgc3VidHJlZXAgb3JnLXlhbmstYWRqdXN0ZWQtc3VidHJlZXMpDQoJKGxldCAoKGJlZyAocG9p bnQtYXQtYm9sKSkpDQoJICAob3JnLXBhc3RlLXN1YnRyZWUgbmlsIG5pbCAnZm9yLXlhbmspDQoJ ICAocHVzaC1tYXJrIGJlZyAnbm9tc2cpKSkNCiAgICAgICAodA0KCShjYWxsLWludGVyYWN0aXZl bHkgY29tbWFuZCkpKSkpKQ0KDQooZGVmdW4gb3JnLXlhbmstZm9sZGluZy13b3VsZC1zd2FsbG93 LXRleHQgKGJlZyBlbmQpDQogICJXb3VsZCBoaWRlLXN1YnRyZWUgYXQgQkVHIHN3YWxsb3cgYW55 IHRleHQgYWZ0ZXIgRU5EPyINCiAgKGxldCAobGV2ZWwpDQogICAgKG9yZy13aXRoLWxpbWl0ZWQt bGV2ZWxzDQogICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgIChnb3RvLWNoYXIgYmVnKQ0KICAg ICAgICh3aGVuIChvciAobG9va2luZy1hdCBvcmctb3V0bGluZS1yZWdleHApDQoJCSAocmUtc2Vh cmNoLWZvcndhcmQgb3JnLW91dGxpbmUtcmVnZXhwLWJvbCBlbmQgdCkpDQoJIChzZXRxIGxldmVs IChvcmctb3V0bGluZS1sZXZlbCkpKQ0KICAgICAgIChnb3RvLWNoYXIgZW5kKQ0KICAgICAgIChz a2lwLWNoYXJzLWZvcndhcmQgIiBcdFxyXG5cdlxmIikNCiAgICAgICAoaWYgKG9yIChlb2JwKQ0K CSAgICAgICAoYW5kIChib2xwKSAobG9va2luZy1hdCBvcmctb3V0bGluZS1yZWdleHApDQoJCSAg ICAoPD0gKG9yZy1vdXRsaW5lLWxldmVsKSBsZXZlbCkpKQ0KCSAgIG5pbAkJCQk7IE5vdGhpbmcg d291bGQgYmUgc3dhbGxvd2VkDQoJIHQpKSkpKQkJCQk7IHNvbWV0aGluZyB3b3VsZCBzd2FsbG93 DQoNCihkZWZpbmUta2V5IG9yZy1tb2RlLW1hcCAiXEMteSIgJ29yZy15YW5rKQ0KDQooZGVmdW4g b3JnLXRydWVseS1pbnZpc2libGUtcCAoKQ0KICAiQ2hlY2sgaWYgcG9pbnQgaXMgYXQgYSBjaGFy YWN0ZXIgY3VycmVudGx5IG5vdCB2aXNpYmxlLg0KVGhpcyB2ZXJzaW9uIGRvZXMgbm90IG9ubHkg Y2hlY2sgdGhlIGNoYXJhY3RlciBwcm9wZXJ0eSwgYnV0IGFsc28NCmB2aXNpYmxlLW1vZGUnLiIN CiAgOzsgRWFybHkgdmVyc2lvbnMgb2Ygbm91dGxpbmUgZG9uJ3QgaGF2ZSBgb3V0bGluZS1pbnZp c2libGUtcCcuDQogIChpZiAob3JnLWJvdW5kLWFuZC10cnVlLXAgdmlzaWJsZS1tb2RlKQ0KICAg ICAgbmlsDQogICAgKG91dGxpbmUtaW52aXNpYmxlLXApKSkNCg0KKGRlZnVuIG9yZy1pbnZpc2li bGUtcDIgKCkNCiAgIkNoZWNrIGlmIHBvaW50IGlzIGF0IGEgY2hhcmFjdGVyIGN1cnJlbnRseSBu b3QgdmlzaWJsZS4iDQogIChzYXZlLWV4Y3Vyc2lvbg0KICAgIChpZiAoYW5kIChlb2xwKSAobm90 IChib2JwKSkpIChiYWNrd2FyZC1jaGFyIDEpKQ0KICAgIDs7IEVhcmx5IHZlcnNpb25zIG9mIG5v dXRsaW5lIGRvbid0IGhhdmUgYG91dGxpbmUtaW52aXNpYmxlLXAnLg0KICAgIChvdXRsaW5lLWlu dmlzaWJsZS1wKSkpDQoNCihkZWZ1biBvcmctYmFjay10by1oZWFkaW5nICgmb3B0aW9uYWwgaW52 aXNpYmxlLW9rKQ0KICAiQ2FsbCBgb3V0bGluZS1iYWNrLXRvLWhlYWRpbmcnLCBidXQgcHJvdmlk ZSBhIGJldHRlciBlcnJvciBtZXNzYWdlLiINCiAgKGNvbmRpdGlvbi1jYXNlIG5pbA0KICAgICAg KG91dGxpbmUtYmFjay10by1oZWFkaW5nIGludmlzaWJsZS1vaykNCiAgICAoZXJyb3IgKGVycm9y ICJCZWZvcmUgZmlyc3QgaGVhZGxpbmUgYXQgcG9zaXRpb24gJWQgaW4gYnVmZmVyICVzIg0KCQkg IChwb2ludCkgKGN1cnJlbnQtYnVmZmVyKSkpKSkNCg0KKGRlZnVuIG9yZy1iZWZvcmUtZmlyc3Qt aGVhZGluZy1wICgpDQogICJCZWZvcmUgZmlyc3QgaGVhZGluZz8iDQogIChzYXZlLWV4Y3Vyc2lv bg0KICAgIChlbmQtb2YtbGluZSkNCiAgICAobnVsbCAocmUtc2VhcmNoLWJhY2t3YXJkIG9yZy1v dXRsaW5lLXJlZ2V4cC1ib2wgbmlsIHQpKSkpDQoNCihkZWZ1biBvcmctYXQtaGVhZGluZy1wICgm b3B0aW9uYWwgaWdub3JlZCkNCiAgKG91dGxpbmUtb24taGVhZGluZy1wIHQpKQ0KOzsgQ29tcGF0 aWJpbGl0eSBhbGlhcyB3aXRoIE9yZyB2ZXJzaW9ucyA8IDcuOC4wMw0KKGRlZmFsaWFzICdvcmct b24taGVhZGluZy1wICdvcmctYXQtaGVhZGluZy1wKQ0KDQooZGVmdW4gb3JnLWF0LWNvbW1lbnQt cCBuaWwNCiAgIklzIGN1cnNvciBpbiBhIGxpbmUgc3RhcnRpbmcgd2l0aCBhICMgY2hhcmFjdGVy PyINCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKGJlZ2lubmluZy1vZi1saW5lKQ0KICAgIChsb29r aW5nLWF0ICJeIyIpKSkNCg0KKGRlZnVuIG9yZy1hdC1kcmF3ZXItcCBuaWwNCiAgIklzIGN1cnNv ciBhdCBhIGRyYXdlciBrZXl3b3JkPyINCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKG1vdmUtYmVn aW5uaW5nLW9mLWxpbmUgMSkNCiAgICAobG9va2luZy1hdCBvcmctZHJhd2VyLXJlZ2V4cCkpKQ0K DQooZGVmdW4gb3JnLWF0LWJsb2NrLXAgbmlsDQogICJJcyBjdXJzb3IgYXQgYSBibG9jayBrZXl3 b3JkPyINCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKG1vdmUtYmVnaW5uaW5nLW9mLWxpbmUgMSkN CiAgICAobG9va2luZy1hdCBvcmctYmxvY2stcmVnZXhwKSkpDQoNCihkZWZ1biBvcmctcG9pbnQt YXQtZW5kLW9mLWVtcHR5LWhlYWRsaW5lICgpDQogICJJZiBwb2ludCBpcyBhdCB0aGUgZW5kIG9m IGFuIGVtcHR5IGhlYWRsaW5lLCByZXR1cm4gdCwgZWxzZSBuaWwuDQpJZiB0aGUgaGVhZGluZyBv bmx5IGNvbnRhaW5zIGEgVE9ETyBrZXl3b3JkLCBpdCBpcyBzdGlsbCBzdGlsbCBjb25zaWRlcmVk DQplbXB0eS4iDQogIChhbmQgKGxvb2tpbmctYXQgIlsgXHRdKiQiKQ0KICAgICAgICh3aGVuIG9y Zy10b2RvLWxpbmUtcmVnZXhwDQoJIChzYXZlLWV4Y3Vyc2lvbg0KCSAgIChiZWdpbm5pbmctb2Yt bGluZSAxKQ0KCSAgIChsZXQgKChjYXNlLWZvbGQtc2VhcmNoIG5pbCkpDQoJICAgICAobG9va2lu Zy1hdCBvcmctdG9kby1saW5lLXJlZ2V4cCkNCgkgICAgIChzdHJpbmc9IChtYXRjaC1zdHJpbmcg MykgIiIpKSkpKSkNCg0KKGRlZnVuIG9yZy1hdC1oZWFkaW5nLW9yLWl0ZW0tcCAoKQ0KICAob3Ig KG9yZy1hdC1oZWFkaW5nLXApIChvcmctYXQtaXRlbS1wKSkpDQoNCihkZWZ1biBvcmctYXQtdGFy Z2V0LXAgKCkNCiAgKG9yIChvcmctaW4tcmVnZXhwIG9yZy1yYWRpby10YXJnZXQtcmVnZXhwKQ0K ICAgICAgKG9yZy1pbi1yZWdleHAgb3JnLXRhcmdldC1yZWdleHApKSkNCjs7IENvbXBhdGliaWxp dHkgYWxpYXMgd2l0aCBPcmcgdmVyc2lvbnMgPCA3LjguMDMNCihkZWZhbGlhcyAnb3JnLW9uLXRh cmdldC1wICdvcmctYXQtdGFyZ2V0LXApDQoNCihkZWZ1biBvcmctdXAtaGVhZGluZy1hbGwgKGFy ZykNCiAgIk1vdmUgdG8gdGhlIGhlYWRpbmcgbGluZSBvZiB3aGljaCB0aGUgcHJlc2VudCBsaW5l IGlzIGEgc3ViaGVhZGluZy4NClRoaXMgZnVuY3Rpb24gY29uc2lkZXJzIGJvdGggdmlzaWJsZSBh bmQgaW52aXNpYmxlIGhlYWRpbmcgbGluZXMuDQpXaXRoIGFyZ3VtZW50LCBtb3ZlIHVwIEFSRyBs ZXZlbHMuIg0KICAoaWYgKGZib3VuZHAgJ291dGxpbmUtdXAtaGVhZGluZy1hbGwpDQogICAgICAo b3V0bGluZS11cC1oZWFkaW5nLWFsbCBhcmcpICAgOyBlbWFjcyAyMSB2ZXJzaW9uIG9mIG91dGxp bmUuZWwNCiAgICAob3V0bGluZS11cC1oZWFkaW5nIGFyZyB0KSkpICAgICA7IGVtYWNzIDIyIHZl cnNpb24gb2Ygb3V0bGluZS5lbA0KDQooZGVmdW4gb3JnLXVwLWhlYWRpbmctc2FmZSAoKQ0KICAi TW92ZSB0byB0aGUgaGVhZGluZyBsaW5lIG9mIHdoaWNoIHRoZSBwcmVzZW50IGxpbmUgaXMgYSBz dWJoZWFkaW5nLg0KVGhpcyB2ZXJzaW9uIHdpbGwgbm90IHRocm93IGFuIGVycm9yLiAgSXQgd2ls bCByZXR1cm4gdGhlIGxldmVsIG9mIHRoZQ0KaGVhZGxpbmUgZm91bmQsIG9yIG5pbCBpZiBubyBo aWdoZXIgbGV2ZWwgaXMgZm91bmQuDQoNCkFsc28sIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBhIGxv dCBmYXN0ZXIgdGhhbiBgb3V0bGluZS11cC1oZWFkaW5nJywNCmJlY2F1c2UgaXQgcmVsaWVzIG9u IHN0YXJzIGJlaW5nIHRoZSBvdXRsaW5lIHN0YXJ0ZXJzLiAgVGhpcyBjYW4gcmVhbGx5DQptYWtl IGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBvdXRsaW5lcyB3aXRoIHZlcnkgbWFueSBzaWJs aW5ncy4iDQogIChsZXQgKHN0YXJ0LWxldmVsIHJlKQ0KICAgIChvcmctYmFjay10by1oZWFkaW5n IHQpDQogICAgKHNldHEgc3RhcnQtbGV2ZWwgKGZ1bmNhbGwgb3V0bGluZS1sZXZlbCkpDQogICAg KGlmIChlcXVhbCBzdGFydC1sZXZlbCAxKQ0KCW5pbA0KICAgICAgKHNldHEgcmUgKGNvbmNhdCAi XlxcKlxcezEsIiAobnVtYmVyLXRvLXN0cmluZyAoMS0gc3RhcnQtbGV2ZWwpKSAiXFx9ICIpKQ0K ICAgICAgKGlmIChyZS1zZWFyY2gtYmFja3dhcmQgcmUgbmlsIHQpDQoJICAoZnVuY2FsbCBvdXRs aW5lLWxldmVsKSkpKSkNCg0KKGRlZnVuIG9yZy1maXJzdC1zaWJsaW5nLXAgKCkNCiAgIklzIHRo aXMgaGVhZGluZyB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudHM/Ig0KICAoaW50ZXJhY3Rp dmUpDQogIChsZXQgKChyZSBvcmctb3V0bGluZS1yZWdleHAtYm9sKQ0KCWxldmVsIGwpDQogICAg KHVubGVzcyAob3JnLWF0LWhlYWRpbmctcCB0KQ0KICAgICAgKHVzZXItZXJyb3IgIk5vdCBhdCBh IGhlYWRpbmciKSkNCiAgICAoc2V0cSBsZXZlbCAoZnVuY2FsbCBvdXRsaW5lLWxldmVsKSkNCiAg ICAoc2F2ZS1leGN1cnNpb24NCiAgICAgIChpZiAobm90IChyZS1zZWFyY2gtYmFja3dhcmQgcmUg bmlsIHQpKQ0KCSAgdA0KCShzZXRxIGwgKGZ1bmNhbGwgb3V0bGluZS1sZXZlbCkpDQoJKDwgbCBs ZXZlbCkpKSkpDQoNCihkZWZ1biBvcmctZ290by1zaWJsaW5nICgmb3B0aW9uYWwgcHJldmlvdXMp DQogICJHb3RvIHRoZSBuZXh0IHNpYmxpbmcsIGV2ZW4gaWYgaXQgaXMgaW52aXNpYmxlLg0KV2hl biBQUkVWSU9VUyBpcyBzZXQsIGdvIHRvIHRoZSBwcmV2aW91cyBzaWJsaW5nIGluc3RlYWQuICBS ZXR1cm5zIHQNCndoZW4gYSBzaWJsaW5nIHdhcyBmb3VuZC4gIFdoZW4gbm9uZSBpcyBmb3VuZCwg cmV0dXJuIG5pbCBhbmQgZG9uJ3QNCm1vdmUgcG9pbnQuIg0KICAobGV0ICgoZnVuIChpZiBwcmV2 aW91cyAncmUtc2VhcmNoLWJhY2t3YXJkICdyZS1zZWFyY2gtZm9yd2FyZCkpDQoJKHBvcyAocG9p bnQpKQ0KCShyZSBvcmctb3V0bGluZS1yZWdleHAtYm9sKQ0KCWxldmVsIGwpDQogICAgKHdoZW4g KGNvbmRpdGlvbi1jYXNlIG5pbCAob3JnLWJhY2stdG8taGVhZGluZyB0KSAoZXJyb3IgbmlsKSkN CiAgICAgIChzZXRxIGxldmVsIChmdW5jYWxsIG91dGxpbmUtbGV2ZWwpKQ0KICAgICAgKGNhdGNo ICdleGl0DQoJKG9yIHByZXZpb3VzIChmb3J3YXJkLWNoYXIgMSkpDQoJKHdoaWxlIChmdW5jYWxs IGZ1biByZSBuaWwgdCkNCgkgIChzZXRxIGwgKGZ1bmNhbGwgb3V0bGluZS1sZXZlbCkpDQoJICAo d2hlbiAoPCBsIGxldmVsKSAoZ290by1jaGFyIHBvcykgKHRocm93ICdleGl0IG5pbCkpDQoJICAo d2hlbiAoPSBsIGxldmVsKSAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMCkpICh0aHJvdyAn ZXhpdCB0KSkpDQoJKGdvdG8tY2hhciBwb3MpDQoJbmlsKSkpKQ0KDQooZGVmdW4gb3JnLXNob3ct c2libGluZ3MgKCkNCiAgIlNob3cgYWxsIHNpYmxpbmdzIG9mIHRoZSBjdXJyZW50IGhlYWRsaW5l LiINCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKHdoaWxlIChvcmctZ290by1zaWJsaW5nKSAob3Jn LWZsYWctaGVhZGluZyBuaWwpKSkNCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKHdoaWxlIChvcmct Z290by1zaWJsaW5nICdwcmV2aW91cykNCiAgICAgIChvcmctZmxhZy1oZWFkaW5nIG5pbCkpKSkN Cg0KKGRlZnVuIG9yZy1nb3RvLWZpcnN0LWNoaWxkICgpDQogICJHb3RvIHRoZSBmaXJzdCBjaGls ZCwgZXZlbiBpZiBpdCBpcyBpbnZpc2libGUuDQpSZXR1cm4gdCB3aGVuIGEgY2hpbGQgd2FzIGZv dW5kLiAgT3RoZXJ3aXNlIGRvbid0IG1vdmUgcG9pbnQgYW5kDQpyZXR1cm4gbmlsLiINCiAgKGxl dCAobGV2ZWwgKHBvcyAocG9pbnQpKSAocmUgb3JnLW91dGxpbmUtcmVnZXhwLWJvbCkpDQogICAg KHdoZW4gKGNvbmRpdGlvbi1jYXNlIG5pbCAob3JnLWJhY2stdG8taGVhZGluZyB0KSAoZXJyb3Ig bmlsKSkNCiAgICAgIChzZXRxIGxldmVsIChvdXRsaW5lLWxldmVsKSkNCiAgICAgIChmb3J3YXJk LWNoYXIgMSkNCiAgICAgIChpZiAoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCByZSBuaWwgdCkgKD4g KG91dGxpbmUtbGV2ZWwpIGxldmVsKSkNCgkgIChwcm9nbiAoZ290by1jaGFyIChtYXRjaC1iZWdp bm5pbmcgMCkpIHQpDQoJKGdvdG8tY2hhciBwb3MpIG5pbCkpKSkNCg0KKGRlZnVuIG9yZy1zaG93 LWhpZGRlbi1lbnRyeSAoKQ0KICAiU2hvdyBhbiBlbnRyeSB3aGVyZSBldmVuIHRoZSBoZWFkaW5n IGlzIGhpZGRlbi4iDQogIChzYXZlLWV4Y3Vyc2lvbg0KICAgIChvcmctc2hvdy1lbnRyeSkpKQ0K DQooZGVmdW4gb3JnLWZsYWctaGVhZGluZyAoZmxhZyAmb3B0aW9uYWwgZW50cnkpDQogICJGbGFn IHRoZSBjdXJyZW50IGhlYWRpbmcuICBGTEFHIG5vbi1uaWwgbWVhbnMgbWFrZSBpbnZpc2libGUu DQpXaGVuIEVOVFJZIGlzIG5vbi1uaWwsIHNob3cgdGhlIGVudGlyZSBlbnRyeS4iDQogIChzYXZl LWV4Y3Vyc2lvbg0KICAgIChvcmctYmFjay10by1oZWFkaW5nIHQpDQogICAgOzsgQ2hlY2sgaWYg d2Ugc2hvdWxkIHNob3cgdGhlIGVudGlyZSBlbnRyeQ0KICAgIChpZiBlbnRyeQ0KCShwcm9nbg0K CSAgKG9yZy1zaG93LWVudHJ5KQ0KCSAgKHNhdmUtZXhjdXJzaW9uDQoJICAgIChhbmQgKG91dGxp bmUtbmV4dC1oZWFkaW5nKQ0KCQkgKG9yZy1mbGFnLWhlYWRpbmcgbmlsKSkpKQ0KICAgICAgKG91 dGxpbmUtZmxhZy1yZWdpb24gKG1heCAocG9pbnQtbWluKSAoMS0gKHBvaW50KSkpDQoJCQkgICAo c2F2ZS1leGN1cnNpb24gKG91dGxpbmUtZW5kLW9mLWhlYWRpbmcpIChwb2ludCkpDQoJCQkgICBm bGFnKSkpKQ0KDQooZGVmdW4gb3JnLWdldC1uZXh0LXNpYmxpbmcgKCkNCiAgIk1vdmUgdG8gbmV4 dCBoZWFkaW5nIG9mIHRoZSBzYW1lIGxldmVsLCBhbmQgcmV0dXJuIHBvaW50Lg0KSWYgdGhlcmUg aXMgbm8gc3VjaCBoZWFkaW5nLCByZXR1cm4gbmlsLg0KVGhpcyBpcyBsaWtlIG91dGxpbmUtbmV4 dC1zaWJsaW5nLCBidXQgaW52aXNpYmxlIGhlYWRpbmdzIGFyZSBvay4iDQogIChsZXQgKChsZXZl bCAoZnVuY2FsbCBvdXRsaW5lLWxldmVsKSkpDQogICAgKG91dGxpbmUtbmV4dC1oZWFkaW5nKQ0K ICAgICh3aGlsZSAoYW5kIChub3QgKGVvYnApKSAoPiAoZnVuY2FsbCBvdXRsaW5lLWxldmVsKSBs ZXZlbCkpDQogICAgICAob3V0bGluZS1uZXh0LWhlYWRpbmcpKQ0KICAgIChpZiAob3IgKGVvYnAp ICg8IChmdW5jYWxsIG91dGxpbmUtbGV2ZWwpIGxldmVsKSkNCgluaWwNCiAgICAgIChwb2ludCkp KSkNCg0KKGRlZnVuIG9yZy1nZXQtbGFzdC1zaWJsaW5nICgpDQogICJNb3ZlIHRvIHByZXZpb3Vz IGhlYWRpbmcgb2YgdGhlIHNhbWUgbGV2ZWwsIGFuZCByZXR1cm4gcG9pbnQuDQpJZiB0aGVyZSBp cyBubyBzdWNoIGhlYWRpbmcsIHJldHVybiBuaWwuIg0KICAobGV0ICgob3BvaW50IChwb2ludCkp DQoJKGxldmVsIChmdW5jYWxsIG91dGxpbmUtbGV2ZWwpKSkNCiAgICAob3V0bGluZS1wcmV2aW91 cy1oZWFkaW5nKQ0KICAgICh3aGVuIChhbmQgKC89IChwb2ludCkgb3BvaW50KSAob3V0bGluZS1v bi1oZWFkaW5nLXAgdCkpDQogICAgICAod2hpbGUgKGFuZCAoPiAoZnVuY2FsbCBvdXRsaW5lLWxl dmVsKSBsZXZlbCkNCgkJICAobm90IChib2JwKSkpDQoJKG91dGxpbmUtcHJldmlvdXMtaGVhZGlu ZykpDQogICAgICAoaWYgKDwgKGZ1bmNhbGwgb3V0bGluZS1sZXZlbCkgbGV2ZWwpDQoJICBuaWwN CiAgICAgICAgKHBvaW50KSkpKSkNCg0KKGRlZnVuIG9yZy1lbmQtb2Ytc3VidHJlZSAoJm9wdGlv bmFsIGludmlzaWJsZS1vayB0by1oZWFkaW5nKQ0KICAiR290byB0byB0aGUgZW5kIG9mIGEgc3Vi dHJlZS4iDQogIDs7IFRoaXMgY29udGFpbnMgYW4gZXhhY3QgY29weSBvZiB0aGUgb3JpZ2luYWwg ZnVuY3Rpb24sIGJ1dCBpdCB1c2VzDQogIDs7IGBvcmctYmFjay10by1oZWFkaW5nJywgdG8gbWFr ZSBpdCB3b3JrIGFsc28gaW4gaW52aXNpYmxlDQogIDs7IHRyZWVzLiAgQW5kIGlzIHVzZXMgYW4g aW52aXNpYmxlLW9rIGFyZ3VtZW50Lg0KICA7OyBVbmRlciBFbWFjcyB0aGlzIGlzIG5vdCBuZWVk ZWQsIGJ1dCB0aGUgb2xkIG91dGxpbmUuZWwgbmVlZHMgdGhpcyBmaXguDQogIDs7IEZ1cnRoZXJt b3JlLCB3aGVuIHVzZWQgaW5zaWRlIE9yZywgZmluZGluZyB0aGUgZW5kIG9mIGEgbGFyZ2Ugc3Vi dHJlZQ0KICA7OyB3aXRoIG1hbnkgY2hpbGRyZW4gYW5kIGdyYW5kY2hpbGRyZW4gZXRjLCB0aGlz IGNhbiBiZSBtdWNoIGZhc3Rlcg0KICA7OyB0aGFuIHRoZSBvdXRsaW5lIHZlcnNpb24uDQogIChv cmctYmFjay10by1oZWFkaW5nIGludmlzaWJsZS1vaykNCiAgKGxldCAoKGZpcnN0IHQpDQoJKGxl dmVsIChmdW5jYWxsIG91dGxpbmUtbGV2ZWwpKSkNCiAgICAoaWYgKGFuZCAoZGVyaXZlZC1tb2Rl LXAgJ29yZy1tb2RlKSAoPCBsZXZlbCAxMDAwKSkNCgk7OyBBIHRydWUgaGVhZGluZyAobm90IGEg cGxhaW4gbGlzdCBpdGVtKSwgaW4gT3JnLW1vZGUNCgk7OyBUaGlzIG1lYW5zIHdlIGNhbiBlYXNp bHkgZmluZCB0aGUgZW5kIGJ5IGxvb2tpbmcNCgk7OyBvbmx5IGZvciB0aGUgcmlnaHQgbnVtYmVy IG9mIHN0YXJzLiAgVXNpbmcgYSByZWdleHAgdG8gZG8NCgk7OyB0aGlzIGlzIHNvIG11Y2ggZmFz dGVyIHRoYW4gdXNpbmcgYSBMaXNwIGxvb3AuDQoJKGxldCAoKHJlIChjb25jYXQgIl5cXCpcXHsx LCIgKGludC10by1zdHJpbmcgbGV2ZWwpICJcXH0gIikpKQ0KCSAgKGZvcndhcmQtY2hhciAxKQ0K CSAgKGFuZCAocmUtc2VhcmNoLWZvcndhcmQgcmUgbmlsICdtb3ZlKSAoYmVnaW5uaW5nLW9mLWxp bmUgMSkpKQ0KICAgICAgOzsgc29tZXRoaW5nIGVsc2UsIGRvIGl0IHRoZSBzbG93IHdheQ0KICAg ICAgKHdoaWxlIChhbmQgKG5vdCAoZW9icCkpDQoJCSAgKG9yIGZpcnN0ICg+IChmdW5jYWxsIG91 dGxpbmUtbGV2ZWwpIGxldmVsKSkpDQoJKHNldHEgZmlyc3QgbmlsKQ0KCShvdXRsaW5lLW5leHQt aGVhZGluZykpKQ0KICAgICh1bmxlc3MgdG8taGVhZGluZw0KICAgICAgKGlmIChtZW1xIChwcmVj ZWRpbmctY2hhcikgJyg/XG4gP1xeTSkpDQogICAgCSAgKHByb2duDQogICAgCSAgICA7OyBHbyB0 byBlbmQgb2YgbGluZSBiZWZvcmUgaGVhZGluZw0KICAgIAkgICAgKGZvcndhcmQtY2hhciAtMSkN CiAgICAJICAgIChpZiAobWVtcSAocHJlY2VkaW5nLWNoYXIpICcoP1xuID9cXk0pKQ0KICAgIAkJ OzsgbGVhdmUgYmxhbmsgbGluZSBiZWZvcmUgaGVhZGluZw0KICAgIAkJKGZvcndhcmQtY2hhciAt MSkpKSkpKQ0KICAocG9pbnQpKQ0KDQooZGVmdW4gb3JnLWVuZC1vZi1tZXRhLWRhdGEtYW5kLWRy YXdlcnMgKCkNCiAgIkp1bXAgdG8gdGhlIGZpcnN0IHRleHQgYWZ0ZXIgbWV0YSBkYXRhIGFuZCBk cmF3ZXJzIGluIHRoZSBjdXJyZW50IGVudHJ5Lg0KVGhpcyB3aWxsIG1vdmUgb3ZlciBlbXB0eSBs aW5lcywgbGluZXMgd2l0aCBwbGFubmluZyB0aW1lIHN0YW1wcywNCmNsb2NraW5nIGxpbmVzLCBh bmQgZHJhd2Vycy4iDQogIChvcmctYmFjay10by1oZWFkaW5nIHQpDQogIChsZXQgKChlbmQgKHNh dmUtZXhjdXJzaW9uIChvdXRsaW5lLW5leHQtaGVhZGluZykgKHBvaW50KSkpDQoJKHJlIChjb25j YXQgIlxcKCIgb3JnLWRyYXdlci1yZWdleHAgIlxcKSINCgkJICAgICJcXHwiICJbIFx0XSoiIG9y Zy1rZXl3b3JkLXRpbWUtcmVnZXhwKSkpDQogICAgKGZvcndhcmQtbGluZSAxKQ0KICAgICh3aGls ZSAocmUtc2VhcmNoLWZvcndhcmQgcmUgZW5kIHQpDQogICAgICAoaWYgKG5vdCAobWF0Y2gtZW5k IDEpKQ0KCSAgOzsgZW1wdHkgb3IgcGxhbm5pbmcgbGluZQ0KCSAgKGZvcndhcmQtbGluZSAxKQ0K CTs7IGEgZHJhd2VyLCBmaW5kIHRoZSBlbmQNCgkocmUtc2VhcmNoLWZvcndhcmQgIl5bIFx0XSo6 RU5EOiIgZW5kICdtb3ZlKQ0KCShmb3J3YXJkLWxpbmUgMSkpKQ0KICAgIChhbmQgKHJlLXNlYXJj aC1mb3J3YXJkICJbXlxuXSIgbmlsIHQpIChiYWNrd2FyZC1jaGFyIDEpKQ0KICAgIChwb2ludCkp KQ0KDQooZGVmdW4gb3JnLWZvcndhcmQtaGVhZGluZy1zYW1lLWxldmVsIChhcmcgJm9wdGlvbmFs IGludmlzaWJsZS1vaykNCiAgIk1vdmUgZm9yd2FyZCB0byB0aGUgQVJHJ3RoIHN1YmhlYWRpbmcg YXQgc2FtZSBsZXZlbCBhcyB0aGlzIG9uZS4NClN0b3AgYXQgdGhlIGZpcnN0IGFuZCBsYXN0IHN1 YmhlYWRpbmdzIG9mIGEgc3VwZXJpb3IgaGVhZGluZy4NCk5vcm1hbGx5IHRoaXMgb25seSBsb29r cyBhdCB2aXNpYmxlIGhlYWRpbmdzLCBidXQgd2hlbiBJTlZJU0lCTEUtT0sgaXMNCm5vbi1uaWwg aXQgd2lsbCBhbHNvIGxvb2sgYXQgaW52aXNpYmxlIG9uZXMuIg0KICAoaW50ZXJhY3RpdmUgInAi KQ0KICAoaWYgKG5vdCAoaWdub3JlLWVycm9ycyAob3JnLWJhY2stdG8taGVhZGluZyBpbnZpc2li bGUtb2spKSkNCiAgICAgIChpZiAoYW5kIGFyZyAoPCBhcmcgMCkpDQogICAgICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWluKSkNCiAgICAgICAgKG91dGxpbmUtbmV4dC1oZWFkaW5nKSkNCiAgICAo b3JnLWF0LWhlYWRpbmctcCkNCiAgICAobGV0ICgobGV2ZWwgKC0gKG1hdGNoLWVuZCAwKSAobWF0 Y2gtYmVnaW5uaW5nIDApIDEpKQ0KICAgICAgICAgIChmIChpZiAoYW5kIGFyZyAoPCBhcmcgMCkp DQogICAgICAgICAgICAgICAgICdyZS1zZWFyY2gtYmFja3dhcmQNCiAgICAgICAgICAgICAgICdy ZS1zZWFyY2gtZm9yd2FyZCkpDQogICAgICAgICAgKGNvdW50IChpZiBhcmcgKGFicyBhcmcpIDEp KQ0KICAgICAgICAgIChyZXN1bHQgKHBvaW50KSkpDQogICAgICAod2hpbGUgKGFuZCAocHJvZzEg KD4gY291bnQgMCkNCgkJICAgIChmb3J3YXJkLWNoYXIgKGlmIChhbmQgYXJnICg8IGFyZyAwKSkg LTEgMSkpKQ0KICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgZiBvcmctb3V0bGluZS1yZWdleHAt Ym9sIG5pbCAnbW92ZSkpDQogICAgICAgIChsZXQgKChsICgtIChtYXRjaC1lbmQgMCkgKG1hdGNo LWJlZ2lubmluZyAwKSAxKSkpDQogICAgICAgICAgKGNvbmQgKCg8IGwgbGV2ZWwpIChzZXRxIGNv dW50IDApKQ0KICAgICAgICAgICAgICAgICgoYW5kICg9IGwgbGV2ZWwpDQogICAgICAgICAgICAg ICAgICAgICAgKG9yIGludmlzaWJsZS1vaw0KICAgICAgICAgICAgICAgICAgICAgICAgICAocHJv Z24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyIChsaW5lLWJlZ2lubmlu Zy1wb3NpdGlvbikpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAob3V0bGluZS1p bnZpc2libGUtcCkpKSkpDQogICAgICAgICAgICAgICAgIChzZXRxIGNvdW50ICgxLSBjb3VudCkp DQogICAgICAgICAgICAgICAgICh3aGVuIChlcSBsIGxldmVsKQ0KICAgICAgICAgICAgICAgICAg IChzZXRxIHJlc3VsdCAocG9pbnQpKSkpKSkpDQogICAgICAoZ290by1jaGFyIHJlc3VsdCkpDQog ICAgKGJlZ2lubmluZy1vZi1saW5lIDEpKSkNCg0KKGRlZnVuIG9yZy1iYWNrd2FyZC1oZWFkaW5n LXNhbWUtbGV2ZWwgKGFyZyAmb3B0aW9uYWwgaW52aXNpYmxlLW9rKQ0KICAiTW92ZSBiYWNrd2Fy ZCB0byB0aGUgQVJHJ3RoIHN1YmhlYWRpbmcgYXQgc2FtZSBsZXZlbCBhcyB0aGlzIG9uZS4NClN0 b3AgYXQgdGhlIGZpcnN0IGFuZCBsYXN0IHN1YmhlYWRpbmdzIG9mIGEgc3VwZXJpb3IgaGVhZGlu Zy4iDQogIChpbnRlcmFjdGl2ZSAicCIpDQogIChvcmctZm9yd2FyZC1oZWFkaW5nLXNhbWUtbGV2 ZWwgKGlmIGFyZyAoLSBhcmcpIC0xKSBpbnZpc2libGUtb2spKQ0KDQooZGVmdW4gb3JnLW5leHQt YmxvY2sgKGFyZyAmb3B0aW9uYWwgYmFja3dhcmQgYmxvY2stcmVnZXhwKQ0KICAiSnVtcCB0byB0 aGUgbmV4dCBibG9jay4NCldpdGggYSBwcmVmaXggYXJndW1lbnQgQVJHLCBqdW1wIGZvcndhcmQg QVJHIG1hbnkgc291cmNlIGJsb2Nrcy4NCldoZW4gQkFDS1dBUkQgaXMgbm9uLW5pbCwganVtcCB0 byB0aGUgcHJldmlvdXMgYmxvY2suDQpXaGVuIEJMT0NLLVJFR0VYUCBpcyBub24tbmlsLCB1c2Ug dGhpcyByZWdleHAgdG8gZmluZCBibG9ja3MuIg0KICAoaW50ZXJhY3RpdmUgInAiKQ0KICAobGV0 ICgocmUgKG9yIGJsb2NrLXJlZ2V4cCBvcmctYmxvY2stcmVnZXhwKSkNCgkocmUtc2VhcmNoLWZu IChvciAoYW5kIGJhY2t3YXJkICdyZS1zZWFyY2gtYmFja3dhcmQpDQogICAgICAgICAgICAgICAg ICAgICAgICAgICdyZS1zZWFyY2gtZm9yd2FyZCkpKQ0KICAgIChpZiAobG9va2luZy1hdCByZSkg KGZvcndhcmQtY2hhciAxKSkNCiAgICAoY29uZGl0aW9uLWNhc2UgbmlsDQoJKGZ1bmNhbGwgcmUt c2VhcmNoLWZuIHJlIG5pbCBuaWwgYXJnKQ0KICAgICAgKGVycm9yIChlcnJvciAiTm8gJXMgY29k ZSBibG9ja3MiIChpZiBiYWNrd2FyZCAicHJldmlvdXMiICJmdXJ0aGVyIiApKSkpDQogICAgKGdv dG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKSAob3JnLXNob3ctY29udGV4dCkpKQ0KDQooZGVm dW4gb3JnLXByZXZpb3VzLWJsb2NrIChhcmcgJm9wdGlvbmFsIGJsb2NrLXJlZ2V4cCkNCiAgIkp1 bXAgdG8gdGhlIHByZXZpb3VzIGJsb2NrLg0KV2l0aCBhIHByZWZpeCBhcmd1bWVudCBBUkcsIGp1 bXAgYmFja3dhcmQgQVJHIG1hbnkgc291cmNlIGJsb2Nrcy4NCldoZW4gQkxPQ0stUkVHRVhQIGlz IG5vbi1uaWwsIHVzZSB0aGlzIHJlZ2V4cCB0byBmaW5kIGJsb2Nrcy4iDQogIChpbnRlcmFjdGl2 ZSAicCIpDQogIChvcmctbmV4dC1ibG9jayBhcmcgdCBibG9jay1yZWdleHApKQ0KDQooZGVmdW4g b3JnLWZvcndhcmQtcGFyYWdyYXBoICgpDQogICJNb3ZlIGZvcndhcmQgdG8gYmVnaW5uaW5nIG9m IG5leHQgcGFyYWdyYXBoIG9yIGVxdWl2YWxlbnQuDQoNClRoZSBmdW5jdGlvbiBtb3ZlcyBwb2lu dCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IHZpc2libGUNCnN0cnVjdHVyYWwgZWxlbWVu dCwgd2hpY2ggY2FuIGJlIGEgcGFyYWdyYXBoLCBhIHRhYmxlLCBhIGxpc3QNCml0ZW0sIGV0Yy4g IEl0IGFsc28gcHJvdmlkZXMgc29tZSBzcGVjaWFsIG1vdmVzIGZvciBjb252ZW5pZW5jZToNCg0K ICAtIE9uIGFuIGFmZmlsaWF0ZWQga2V5d29yZCwganVtcCB0byB0aGUgYmVnaW5uaW5nIG9mIHRo ZQ0KICAgIHJlbGF0aXZlIGVsZW1lbnQuDQogIC0gT24gYW4gaXRlbSBvciBhIGZvb3Rub3RlIGRl ZmluaXRpb24sIG1vdmUgdG8gdGhlIHNlY29uZA0KICAgIGVsZW1lbnQgaW5zaWRlLCBpZiBhbnku DQogIC0gT24gYSB0YWJsZSBvciBhIHByb3BlcnR5IGRyYXdlciwganVtcCBhZnRlciBpdC4NCiAg LSBPbiBhIHZlcnNlIG9yIHNvdXJjZSBibG9jaywgc3RvcCBhZnRlciBibGFuayBsaW5lcy4iDQog IChpbnRlcmFjdGl2ZSkNCiAgKHdoZW4gKGVvYnApICh1c2VyLWVycm9yICJDYW5ub3QgbW92ZSBm dXJ0aGVyIGRvd24iKSkNCiAgKGxldCogKChkZWFjdGl2YXRlLW1hcmsgbmlsKQ0KCSAoZWxlbWVu dCAob3JnLWVsZW1lbnQtYXQtcG9pbnQpKQ0KICAgICAgICAgKHR5cGUgKG9yZy1lbGVtZW50LXR5 cGUgZWxlbWVudCkpDQogICAgICAgICAocG9zdC1hZmZpbGlhdGVkIChvcmctZWxlbWVudC1wcm9w ZXJ0eSA6cG9zdC1hZmZpbGlhdGVkIGVsZW1lbnQpKQ0KICAgICAgICAgKGNvbnRlbnRzLWJlZ2lu IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29udGVudHMtYmVnaW4gZWxlbWVudCkpDQogICAgICAg ICAoY29udGVudHMtZW5kIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29udGVudHMtZW5kIGVsZW1l bnQpKQ0KICAgICAgICAgKGVuZCAobGV0ICgoZW5kIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5k IGVsZW1lbnQpKSAocGFyZW50IGVsZW1lbnQpKQ0KICAgICAgICAgICAgICAgICh3aGlsZSAoYW5k IChzZXRxIHBhcmVudCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnBhcmVudCBwYXJlbnQpKQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICg9IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29udGVu dHMtZW5kIHBhcmVudCkgZW5kKSkNCiAgICAgICAgICAgICAgICAgIChzZXRxIGVuZCAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOmVuZCBwYXJlbnQpKSkNCiAgICAgICAgICAgICAgICBlbmQpKSkNCiAg ICAoY29uZCAoKG5vdCBlbGVtZW50KQ0KICAgICAgICAgICAoc2tpcC1jaGFycy1mb3J3YXJkICIg XHJcdFxuIikNCiAgICAgICAgICAgKG9yIChlb2JwKSAoYmVnaW5uaW5nLW9mLWxpbmUpKSkNCiAg ICAgICAgICA7OyBPbiBhZmZpbGlhdGVkIGtleXdvcmRzLCBtb3ZlIHRvIGVsZW1lbnQncyBiZWdp bm5pbmcuDQogICAgICAgICAgKChhbmQgcG9zdC1hZmZpbGlhdGVkICg8IChwb2ludCkgcG9zdC1h ZmZpbGlhdGVkKSkNCiAgICAgICAgICAgKGdvdG8tY2hhciBwb3N0LWFmZmlsaWF0ZWQpKQ0KICAg ICAgICAgIDs7IEF0IGEgdGFibGUgcm93LCBtb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIHRhYmxlLiAg U2ltaWxhcmx5LA0KICAgICAgICAgIDs7IGF0IGEgbm9kZSBwcm9wZXJ0eSwgbW92ZSB0byB0aGUg ZW5kIG9mIHRoZSBwcm9wZXJ0eQ0KICAgICAgICAgIDs7IGRyYXdlci4NCiAgICAgICAgICAoKG1l bXEgdHlwZSAnKG5vZGUtcHJvcGVydHkgdGFibGUtcm93KSkNCiAgICAgICAgICAgKGdvdG8tY2hh ciAob3JnLWVsZW1lbnQtcHJvcGVydHkNCiAgICAgICAgICAgICAgICAgICAgICAgOmVuZCAob3Jn LWVsZW1lbnQtcHJvcGVydHkgOnBhcmVudCBlbGVtZW50KSkpKQ0KICAgICAgICAgICgobWVtcSB0 eXBlICcocHJvcGVydHktZHJhd2VyIHRhYmxlKSkgKGdvdG8tY2hhciBlbmQpKQ0KICAgICAgICAg IDs7IENvbnNpZGVyIGJsYW5rIGxpbmVzIGFzIHNlcGFyYXRvcnMgaW4gdmVyc2UgYW5kIHNvdXJj ZQ0KICAgICAgICAgIDs7IGJsb2NrcyB0byBlYXNlIGVkaXRpbmcuDQogICAgICAgICAgKChtZW1x IHR5cGUgJyhzcmMtYmxvY2sgdmVyc2UtYmxvY2spKQ0KICAgICAgICAgICAod2hlbiAoZXEgdHlw ZSAnc3JjLWJsb2NrKQ0KICAgICAgICAgICAgIChzZXRxIGNvbnRlbnRzLWVuZA0KICAgICAgICAg ICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbiAoZ290by1jaGFyIGVuZCkNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcclx0XG4iKQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZS1iZWdpbm5pbmctcG9zaXRpb24p KSkpDQogICAgICAgICAgIChiZWdpbm5pbmctb2YtbGluZSkNCiAgICAgICAgICAgKHdoZW4gKGxv b2tpbmctYXQgIlsgXHRdKiQiKSAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHJcdFxuIikpDQogICAg ICAgICAgIChpZiAobm90IChyZS1zZWFyY2gtZm9yd2FyZCAiXlsgXHRdKiQiIGNvbnRlbnRzLWVu ZCB0KSkNCiAgICAgICAgICAgICAgIChnb3RvLWNoYXIgZW5kKQ0KICAgICAgICAgICAgIChza2lw LWNoYXJzLWZvcndhcmQgIiBcclx0XG4iKQ0KICAgICAgICAgICAgIChpZiAoPSAocG9pbnQpIGNv bnRlbnRzLWVuZCkgKGdvdG8tY2hhciBlbmQpDQogICAgICAgICAgICAgICAoYmVnaW5uaW5nLW9m LWxpbmUpKSkpDQogICAgICAgICAgOzsgV2l0aCBubyBjb250ZW50cywganVzdCBza2lwIGVsZW1l bnQuDQogICAgICAgICAgKChub3QgY29udGVudHMtYmVnaW4pIChnb3RvLWNoYXIgZW5kKSkNCiAg ICAgICAgICA7OyBJZiBjb250ZW50cyBhcmUgaW52aXNpYmxlLCBza2lwIHRoZSBlbGVtZW50IGFs dG9nZXRoZXIuDQogICAgICAgICAgKChvdXRsaW5lLWludmlzaWJsZS1wIChsaW5lLWVuZC1wb3Np dGlvbikpDQogICAgICAgICAgIChjYXNlIHR5cGUNCiAgICAgICAgICAgICAoaGVhZGxpbmUNCiAg ICAgICAgICAgICAgKG9yZy13aXRoLWxpbWl0ZWQtbGV2ZWxzIChvdXRsaW5lLW5leHQtdmlzaWJs ZS1oZWFkaW5nIDEpKSkNCiAgICAgICAgICAgICA7OyBBdCBhIHBsYWluIGxpc3QsIG1ha2Ugc3Vy ZSB3ZSBtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0NCiAgICAgICAgICAgICA7OyBpbnN0ZWFkIG9mIHNr aXBwaW5nIHRoZSB3aG9sZSBsaXN0Lg0KICAgICAgICAgICAgIChwbGFpbi1saXN0IChmb3J3YXJk LWNoYXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgKG9yZy1mb3J3YXJkLXBhcmFncmFwaCkp DQogICAgICAgICAgICAgKG90aGVyd2lzZSAoZ290by1jaGFyIGVuZCkpKSkNCiAgICAgICAgICAo KD49IChwb2ludCkgY29udGVudHMtZW5kKSAoZ290by1jaGFyIGVuZCkpDQogICAgICAgICAgKCg+ PSAocG9pbnQpIGNvbnRlbnRzLWJlZ2luKQ0KICAgICAgICAgICA7OyBUaGlzIGNhbiBvbmx5IGhh cHBlbiBvbiBwYXJhZ3JhcGhzIGFuZCBwbGFpbiBsaXN0cy4NCiAgICAgICAgICAgKGNhc2UgdHlw ZQ0KICAgICAgICAgICAgIChwYXJhZ3JhcGggKGdvdG8tY2hhciBlbmQpKQ0KICAgICAgICAgICAg IDs7IEF0IGEgcGxhaW4gbGlzdCwgdHJ5IHRvIG1vdmUgdG8gc2Vjb25kIGVsZW1lbnQgaW4NCiAg ICAgICAgICAgICA7OyBmaXJzdCBpdGVtLCBpZiBwb3NzaWJsZS4NCiAgICAgICAgICAgICAocGxh aW4tbGlzdCAoZW5kLW9mLWxpbmUpDQogICAgICAgICAgICAgICAgICAgICAgICAgKG9yZy1mb3J3 YXJkLXBhcmFncmFwaCkpKSkNCiAgICAgICAgICA7OyBXaGVuIGNvbnRlbnRzIHN0YXJ0IG9uIHRo ZSBtaWRkbGUgb2YgYSBsaW5lIChlLmcuIGluDQogICAgICAgICAgOzsgaXRlbXMgYW5kIGZvb3Ru b3RlIGRlZmluaXRpb25zKSwgdHJ5IHRvIHJlYWNoIGZpcnN0DQogICAgICAgICAgOzsgZWxlbWVu dCBzdGFydGluZyBhZnRlciBjdXJyZW50IGxpbmUuDQogICAgICAgICAgKCg+IChsaW5lLWVuZC1w b3NpdGlvbikgY29udGVudHMtYmVnaW4pDQogICAgICAgICAgIChlbmQtb2YtbGluZSkNCiAgICAg ICAgICAgKG9yZy1mb3J3YXJkLXBhcmFncmFwaCkpDQogICAgICAgICAgKHQgKGdvdG8tY2hhciBj b250ZW50cy1iZWdpbikpKSkpDQoNCihkZWZ1biBvcmctYmFja3dhcmQtcGFyYWdyYXBoICgpDQog ICJNb3ZlIGJhY2t3YXJkIHRvIHN0YXJ0IG9mIHByZXZpb3VzIHBhcmFncmFwaCBvciBlcXVpdmFs ZW50Lg0KDQpUaGUgZnVuY3Rpb24gbW92ZXMgcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUg Y3VycmVudA0Kc3RydWN0dXJhbCBlbGVtZW50LCB3aGljaCBjYW4gYmUgYSBwYXJhZ3JhcGgsIGEg dGFibGUsIGEgbGlzdA0KaXRlbSwgZXRjLiwgb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJl dmlvdXMgdmlzaWJsZSBvbmUgaWYNCnBvaW50IGlzIGFscmVhZHkgdGhlcmUuICBJdCBhbHNvIHBy b3ZpZGVzIHNvbWUgc3BlY2lhbCBtb3ZlcyBmb3INCmNvbnZlbmllbmNlOg0KDQogIC0gT24gYW4g YWZmaWxpYXRlZCBrZXl3b3JkLCBqdW1wIHRvIHRoZSBmaXJzdCBvbmUuDQogIC0gT24gYSB0YWJs ZSBvciBhIHByb3BlcnR5IGRyYXdlciwgbW92ZSB0byBpdHMgYmVnaW5uaW5nLg0KICAtIE9uIGEg dmVyc2Ugb3Igc291cmNlIGJsb2NrLCBzdG9wIGJlZm9yZSBibGFuayBsaW5lcy4iDQogIChpbnRl cmFjdGl2ZSkNCiAgKHdoZW4gKGJvYnApICh1c2VyLWVycm9yICJDYW5ub3QgbW92ZSBmdXJ0aGVy IHVwIikpDQogIChsZXQqICgoZGVhY3RpdmF0ZS1tYXJrIG5pbCkNCgkgKGVsZW1lbnQgKG9yZy1l bGVtZW50LWF0LXBvaW50KSkNCiAgICAgICAgICh0eXBlIChvcmctZWxlbWVudC10eXBlIGVsZW1l bnQpKQ0KICAgICAgICAgKGNvbnRlbnRzLWJlZ2luIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29u dGVudHMtYmVnaW4gZWxlbWVudCkpDQogICAgICAgICAoY29udGVudHMtZW5kIChvcmctZWxlbWVu dC1wcm9wZXJ0eSA6Y29udGVudHMtZW5kIGVsZW1lbnQpKQ0KICAgICAgICAgKHBvc3QtYWZmaWxp YXRlZCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnBvc3QtYWZmaWxpYXRlZCBlbGVtZW50KSkNCiAg ICAgICAgIChiZWdpbiAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGVsZW1lbnQpKSkNCiAg ICAoY29uZA0KICAgICAoKG5vdCBlbGVtZW50KSAoZ290by1jaGFyIChwb2ludC1taW4pKSkNCiAg ICAgKCg9IChwb2ludCkgYmVnaW4pDQogICAgICAoYmFja3dhcmQtY2hhcikNCiAgICAgIChvcmct YmFja3dhcmQtcGFyYWdyYXBoKSkNCiAgICAgKChhbmQgcG9zdC1hZmZpbGlhdGVkICg8PSAocG9p bnQpIHBvc3QtYWZmaWxpYXRlZCkpIChnb3RvLWNoYXIgYmVnaW4pKQ0KICAgICAoKG1lbXEgdHlw ZSAnKG5vZGUtcHJvcGVydHkgdGFibGUtcm93KSkNCiAgICAgIChnb3RvLWNoYXIgKG9yZy1lbGVt ZW50LXByb3BlcnR5DQogICAgICAgICAgICAgICAgICA6cG9zdC1hZmZpbGlhdGVkIChvcmctZWxl bWVudC1wcm9wZXJ0eSA6cGFyZW50IGVsZW1lbnQpKSkpDQogICAgICgobWVtcSB0eXBlICcocHJv cGVydHktZHJhd2VyIHRhYmxlKSkgKGdvdG8tY2hhciBiZWdpbikpDQogICAgICgobWVtcSB0eXBl ICcoc3JjLWJsb2NrIHZlcnNlLWJsb2NrKSkNCiAgICAgICh3aGVuIChlcSB0eXBlICdzcmMtYmxv Y2spDQogICAgICAgIChzZXRxIGNvbnRlbnRzLWJlZ2luDQogICAgICAgICAgICAgIChzYXZlLWV4 Y3Vyc2lvbiAoZ290by1jaGFyIGJlZ2luKSAoZm9yd2FyZC1saW5lKSAocG9pbnQpKSkpDQogICAg ICAoaWYgKD0gKHBvaW50KSBjb250ZW50cy1iZWdpbikgKGdvdG8tY2hhciBwb3N0LWFmZmlsaWF0 ZWQpDQogICAgICAgIDs7IEluc2lkZSBhIHZlcnNlIGJsb2NrLCBzZWUgYmxhbmsgbGluZXMgYXMg cGFyYWdyYXBoDQogICAgICAgIDs7IHNlcGFyYXRvcnMuDQogICAgICAgIChsZXQgKChvcmlnaW4g KHBvaW50KSkpDQogICAgICAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcclx0XG4iIGNvbnRl bnRzLWJlZ2luKQ0KICAgICAgICAgICh3aGVuIChyZS1zZWFyY2gtYmFja3dhcmQgIl5bIFx0XSok IiBjb250ZW50cy1iZWdpbiAnbW92ZSkNCiAgICAgICAgICAgIChza2lwLWNoYXJzLWZvcndhcmQg IiBcclx0XG4iIG9yaWdpbikNCiAgICAgICAgICAgIChpZiAoPSAocG9pbnQpIG9yaWdpbikgKGdv dG8tY2hhciBjb250ZW50cy1iZWdpbikNCiAgICAgICAgICAgICAgKGJlZ2lubmluZy1vZi1saW5l KSkpKSkpDQogICAgICgobm90IGNvbnRlbnRzLWJlZ2luKSAoZ290by1jaGFyIChvciBwb3N0LWFm ZmlsaWF0ZWQgYmVnaW4pKSkNCiAgICAgKChlcSB0eXBlICdwYXJhZ3JhcGgpDQogICAgICAoZ290 by1jaGFyIGNvbnRlbnRzLWJlZ2luKQ0KICAgICAgOzsgV2hlbiBhdCBmaXJzdCBwYXJhZ3JhcGgg aW4gYW4gaXRlbSBvciBhIGZvb3Rub3RlIGRlZmluaXRpb24sDQogICAgICA7OyBtb3ZlIGRpcmVj dGx5IHRvIGJlZ2lubmluZyBvZiBsaW5lLg0KICAgICAgKGxldCAoKHBhcmVudC1jb250ZW50cw0K ICAgICAgICAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eQ0KICAgICAgICAgICAgICA6Y29udGVu dHMtYmVnaW4gKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwYXJlbnQgZWxlbWVudCkpKSkNCiAgICAg ICAgKHdoZW4gKGFuZCBwYXJlbnQtY29udGVudHMgKD0gcGFyZW50LWNvbnRlbnRzIGNvbnRlbnRz LWJlZ2luKSkNCiAgICAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpKSkpDQogICAgIDs7IEF0IHRo ZSBlbmQgb2YgYSBncmVhdGVyIGVsZW1lbnQsIG1vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUN CiAgICAgOzsgbGFzdCBlbGVtZW50IHdpdGhpbi4NCiAgICAgKCg+PSAocG9pbnQpIGNvbnRlbnRz LWVuZCkNCiAgICAgIChnb3RvLWNoYXIgKDEtIGNvbnRlbnRzLWVuZCkpDQogICAgICAob3JnLWJh Y2t3YXJkLXBhcmFncmFwaCkpDQogICAgICh0IChnb3RvLWNoYXIgKG9yIHBvc3QtYWZmaWxpYXRl ZCBiZWdpbikpKSkNCiAgICA7OyBFbnN1cmUgd2UgbmV2ZXIgbGVhdmUgcG9pbnQgaW52aXNpYmxl Lg0KICAgICh3aGVuIChvdXRsaW5lLWludmlzaWJsZS1wIChwb2ludCkpIChiZWdpbm5pbmctb2Yt dmlzdWFsLWxpbmUpKSkpDQoNCihkZWZ1biBvcmctZm9yd2FyZC1lbGVtZW50ICgpDQogICJNb3Zl IGZvcndhcmQgYnkgb25lIGVsZW1lbnQuDQpNb3ZlIHRvIHRoZSBuZXh0IGVsZW1lbnQgYXQgdGhl IHNhbWUgbGV2ZWwsIHdoZW4gcG9zc2libGUuIg0KICAoaW50ZXJhY3RpdmUpDQogIChjb25kICgo ZW9icCkgKHVzZXItZXJyb3IgIkNhbm5vdCBtb3ZlIGZ1cnRoZXIgZG93biIpKQ0KCSgob3JnLXdp dGgtbGltaXRlZC1sZXZlbHMgKG9yZy1hdC1oZWFkaW5nLXApKQ0KCSAobGV0ICgob3JpZ2luIChw b2ludCkpKQ0KCSAgIChnb3RvLWNoYXIgKG9yZy1lbmQtb2Ytc3VidHJlZSBuaWwgdCkpDQoJICAg KHVubGVzcyAob3JnLXdpdGgtbGltaXRlZC1sZXZlbHMgKG9yZy1hdC1oZWFkaW5nLXApKQ0KCSAg ICAgKGdvdG8tY2hhciBvcmlnaW4pDQoJICAgICAodXNlci1lcnJvciAiQ2Fubm90IG1vdmUgZnVy dGhlciBkb3duIikpKSkNCgkodA0KCSAobGV0KiAoKGVsZW0gKG9yZy1lbGVtZW50LWF0LXBvaW50 KSkNCgkJKGVuZCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBlbGVtKSkNCgkJKHBhcmVudCAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOnBhcmVudCBlbGVtKSkpDQoJICAgKGNvbmQgKChhbmQgcGFy ZW50ICg9IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29udGVudHMtZW5kIHBhcmVudCkgZW5kKSkN CgkJICAoZ290by1jaGFyIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIHBhcmVudCkpKQ0KCQkg KChpbnRlZ2VyLW9yLW1hcmtlci1wIGVuZCkgKGdvdG8tY2hhciBlbmQpKQ0KCQkgKHQgKG1lc3Nh Z2UgIk5vIGVsZW1lbnQgYXQgcG9pbnQiKSkpKSkpKQ0KDQooZGVmdW4gb3JnLWJhY2t3YXJkLWVs ZW1lbnQgKCkNCiAgIk1vdmUgYmFja3dhcmQgYnkgb25lIGVsZW1lbnQuDQpNb3ZlIHRvIHRoZSBw cmV2aW91cyBlbGVtZW50IGF0IHRoZSBzYW1lIGxldmVsLCB3aGVuIHBvc3NpYmxlLiINCiAgKGlu dGVyYWN0aXZlKQ0KICAoY29uZCAoKGJvYnApICh1c2VyLWVycm9yICJDYW5ub3QgbW92ZSBmdXJ0 aGVyIHVwIikpDQoJKChvcmctd2l0aC1saW1pdGVkLWxldmVscyAob3JnLWF0LWhlYWRpbmctcCkp DQoJIDs7IEF0IGEgaGVhZGxpbmUsIG1vdmUgdG8gdGhlIHByZXZpb3VzIG9uZSwgaWYgYW55LCBv ciBzdGF5DQoJIDs7IGhlcmUuDQoJIChsZXQgKChvcmlnaW4gKHBvaW50KSkpDQoJICAgKG9yZy13 aXRoLWxpbWl0ZWQtbGV2ZWxzIChvcmctYmFja3dhcmQtaGVhZGluZy1zYW1lLWxldmVsIDEpKQ0K CSAgIDs7IFdoZW4gY3VycmVudCBoZWFkbGluZSBoYXMgbm8gc2libGluZyBhYm92ZSwgbW92ZSB0 byBpdHMNCgkgICA7OyBwYXJlbnQuDQoJICAgKHdoZW4gKD0gKHBvaW50KSBvcmlnaW4pDQoJICAg ICAob3IgKG9yZy13aXRoLWxpbWl0ZWQtbGV2ZWxzIChvcmctdXAtaGVhZGluZy1zYWZlKSkNCgkJ IChwcm9nbiAoZ290by1jaGFyIG9yaWdpbikNCgkJCSh1c2VyLWVycm9yICJDYW5ub3QgbW92ZSBm dXJ0aGVyIHVwIikpKSkpKQ0KCSh0DQoJIChsZXQqICgodHJhaWwgKG9yZy1lbGVtZW50LWF0LXBv aW50ICdrZWVwLXRyYWlsKSkNCgkJKGVsZW0gKGNhciB0cmFpbCkpDQoJCShwcmV2LWVsZW0gKG50 aCAxIHRyYWlsKSkNCgkJKGJlZyAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGVsZW0pKSkN CgkgICAoY29uZA0KCSAgICA7OyBNb3ZlIHRvIGJlZ2lubmluZyBvZiBjdXJyZW50IGVsZW1lbnQg aWYgcG9pbnQgaXNuJ3QNCgkgICAgOzsgdGhlcmUgYWxyZWFkeS4NCgkgICAgKChudWxsIGJlZykg KG1lc3NhZ2UgIk5vIGVsZW1lbnQgYXQgcG9pbnQiKSkNCgkgICAgKCgvPSAocG9pbnQpIGJlZykg KGdvdG8tY2hhciBiZWcpKQ0KCSAgICAocHJldi1lbGVtIChnb3RvLWNoYXIgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDpiZWdpbiBwcmV2LWVsZW0pKSkNCgkgICAgKChvcmctYmVmb3JlLWZpcnN0LWhl YWRpbmctcCkgKGdvdG8tY2hhciAocG9pbnQtbWluKSkpDQoJICAgICh0IChvcmctYmFjay10by1o ZWFkaW5nKSkpKSkpKQ0KDQooZGVmdW4gb3JnLXVwLWVsZW1lbnQgKCkNCiAgIk1vdmUgdG8gdXBw ZXIgZWxlbWVudC4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKGlmIChvcmctd2l0aC1saW1pdGVkLWxl dmVscyAob3JnLWF0LWhlYWRpbmctcCkpDQogICAgICAodW5sZXNzIChvcmctdXAtaGVhZGluZy1z YWZlKSAodXNlci1lcnJvciAiTm8gc3Vycm91bmRpbmcgZWxlbWVudCIpKQ0KICAgIChsZXQqICgo ZWxlbSAob3JnLWVsZW1lbnQtYXQtcG9pbnQpKQ0KCSAgIChwYXJlbnQgKG9yZy1lbGVtZW50LXBy b3BlcnR5IDpwYXJlbnQgZWxlbSkpKQ0KICAgICAgKGlmIHBhcmVudCAoZ290by1jaGFyIChvcmct ZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gcGFyZW50KSkNCgkoaWYgKG9yZy13aXRoLWxpbWl0ZWQt bGV2ZWxzIChvcmctYmVmb3JlLWZpcnN0LWhlYWRpbmctcCkpDQoJICAgICh1c2VyLWVycm9yICJO byBzdXJyb3VuZGluZyBlbGVtZW50IikNCgkgIChvcmctd2l0aC1saW1pdGVkLWxldmVscyAob3Jn LWJhY2stdG8taGVhZGluZykpKSkpKSkNCg0KKGRlZnZhciBvcmctZWxlbWVudC1ncmVhdGVyLWVs ZW1lbnRzKQ0KKGRlZnVuIG9yZy1kb3duLWVsZW1lbnQgKCkNCiAgIk1vdmUgdG8gaW5uZXIgZWxl bWVudC4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKGxldCAoKGVsZW1lbnQgKG9yZy1lbGVtZW50LWF0 LXBvaW50KSkpDQogICAgKGNvbmQNCiAgICAgKChtZW1xIChvcmctZWxlbWVudC10eXBlIGVsZW1l bnQpICcocGxhaW4tbGlzdCB0YWJsZSkpDQogICAgICAoZ290by1jaGFyIChvcmctZWxlbWVudC1w cm9wZXJ0eSA6Y29udGVudHMtYmVnaW4gZWxlbWVudCkpDQogICAgICAoZm9yd2FyZC1jaGFyKSkN CiAgICAgKChtZW1xIChvcmctZWxlbWVudC10eXBlIGVsZW1lbnQpIG9yZy1lbGVtZW50LWdyZWF0 ZXItZWxlbWVudHMpDQogICAgICA7OyBJZiBjb250ZW50cyBhcmUgaGlkZGVuLCBmaXJzdCBkaXNj bG9zZSB0aGVtLg0KICAgICAgKHdoZW4gKG9yZy1lbGVtZW50LXByb3BlcnR5IDpoaWRkZW5wIGVs ZW1lbnQpIChvcmctY3ljbGUpKQ0KICAgICAgKGdvdG8tY2hhciAob3IgKG9yZy1lbGVtZW50LXBy b3BlcnR5IDpjb250ZW50cy1iZWdpbiBlbGVtZW50KQ0KCQkgICAgICh1c2VyLWVycm9yICJObyBj b250ZW50IGZvciB0aGlzIGVsZW1lbnQiKSkpKQ0KICAgICAodCAodXNlci1lcnJvciAiTm8gaW5u ZXIgZWxlbWVudCIpKSkpKQ0KDQooZGVmdW4gb3JnLWRyYWctZWxlbWVudC1iYWNrd2FyZCAoKQ0K ICAiTW92ZSBiYWNrd2FyZCBlbGVtZW50IGF0IHBvaW50LiINCiAgKGludGVyYWN0aXZlKQ0KICAo aWYgKG9yZy13aXRoLWxpbWl0ZWQtbGV2ZWxzIChvcmctYXQtaGVhZGluZy1wKSkgKG9yZy1tb3Zl LXN1YnRyZWUtdXApDQogICAgKGxldCogKCh0cmFpbCAob3JnLWVsZW1lbnQtYXQtcG9pbnQgJ2tl ZXAtdHJhaWwpKQ0KCSAgIChlbGVtIChjYXIgdHJhaWwpKQ0KCSAgIChwcmV2LWVsZW0gKG50aCAx IHRyYWlsKSkpDQogICAgICA7OyBFcnJvciBvdXQgaWYgbm8gcHJldmlvdXMgZWxlbWVudCBvciBw cmV2aW91cyBlbGVtZW50IGlzDQogICAgICA7OyBhIHBhcmVudCBvZiB0aGUgY3VycmVudCBvbmUu DQogICAgICAoaWYgKG9yIChub3QgcHJldi1lbGVtKSAob3JnLWVsZW1lbnQtbmVzdGVkLXAgZWxl bSBwcmV2LWVsZW0pKQ0KCSAgKHVzZXItZXJyb3IgIkNhbm5vdCBkcmFnIGVsZW1lbnQgYmFja3dh cmQiKQ0KCShsZXQgKChwb3MgKHBvaW50KSkpDQoJICAob3JnLWVsZW1lbnQtc3dhcC1BLUIgcHJl di1lbGVtIGVsZW0pDQoJICAoZ290by1jaGFyICgrIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVn aW4gcHJldi1lbGVtKQ0KCQkJKC0gcG9zIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWxl bSkpKSkpKSkpKQ0KDQooZGVmdW4gb3JnLWRyYWctZWxlbWVudC1mb3J3YXJkICgpDQogICJNb3Zl IGZvcndhcmQgZWxlbWVudCBhdCBwb2ludC4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKGxldCogKChw b3MgKHBvaW50KSkNCgkgKGVsZW0gKG9yZy1lbGVtZW50LWF0LXBvaW50KSkpDQogICAgKHdoZW4g KD0gKHBvaW50LW1heCkgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZWxlbSkpDQogICAgICAo dXNlci1lcnJvciAiQ2Fubm90IGRyYWcgZWxlbWVudCBmb3J3YXJkIikpDQogICAgKGdvdG8tY2hh ciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBlbGVtKSkNCiAgICAobGV0ICgobmV4dC1lbGVt IChvcmctZWxlbWVudC1hdC1wb2ludCkpKQ0KICAgICAgKHdoZW4gKG9yIChvcmctZWxlbWVudC1u ZXN0ZWQtcCBlbGVtIG5leHQtZWxlbSkNCgkJKGFuZCAoZXEgKG9yZy1lbGVtZW50LXR5cGUgbmV4 dC1lbGVtKSAnaGVhZGxpbmUpDQoJCSAgICAgKG5vdCAoZXEgKG9yZy1lbGVtZW50LXR5cGUgZWxl bSkgJ2hlYWRsaW5lKSkpKQ0KCShnb3RvLWNoYXIgcG9zKQ0KCSh1c2VyLWVycm9yICJDYW5ub3Qg ZHJhZyBlbGVtZW50IGZvcndhcmQiKSkNCiAgICAgIDs7IENvbXB1dGUgbmV3IHBvc2l0aW9uIG9m IHBvaW50OiBpdCdzIHNoaWZ0ZWQgYnkgTkVYVC1FTEVNDQogICAgICA7OyBib2R5J3MgbGVuZ3Ro ICh3aXRob3V0IGZpbmFsIGJsYW5rcykgYW5kIGJ5IHRoZSBsZW5ndGggb2YNCiAgICAgIDs7IGJs YW5rcyBiZXR3ZWVuIEVMRU0gYW5kIE5FWFQtRUxFTS4NCiAgICAgIChsZXQgKChzaXplLW5leHQg KC0gKHNhdmUtZXhjdXJzaW9uDQoJCQkgICAgKGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVy dHkgOmVuZCBuZXh0LWVsZW0pKQ0KCQkJICAgIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHJcdFxu IikNCgkJCSAgICAoZm9yd2FyZC1saW5lKQ0KCQkJICAgIDs7IFNtYWxsIGNvcnJlY3Rpb24gaWYg YnVmZmVyIGRvZXNuJ3QgZW5kDQoJCQkgICAgOzsgd2l0aCBhIG5ld2xpbmUgY2hhcmFjdGVyLg0K CQkJICAgIChpZiAoYW5kIChlb2xwKSAobm90IChib2xwKSkpICgxKyAocG9pbnQpKSAocG9pbnQp KSkNCgkJCSAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBuZXh0LWVsZW0pKSkNCgkgICAg KHNpemUtYmxhbmsgKC0gKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZWxlbSkNCgkJCSAgIChz YXZlLWV4Y3Vyc2lvbg0KCQkJICAgICAoZ290by1jaGFyIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 ZW5kIGVsZW0pKQ0KCQkJICAgICAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFxyXHRcbiIpDQoJCQkg ICAgIChmb3J3YXJkLWxpbmUpDQoJCQkgICAgIChwb2ludCkpKSkpDQoJKG9yZy1lbGVtZW50LXN3 YXAtQS1CIGVsZW0gbmV4dC1lbGVtKQ0KCShnb3RvLWNoYXIgKCsgcG9zIHNpemUtbmV4dCBzaXpl LWJsYW5rKSkpKSkpDQoNCihkZWZ1biBvcmctZHJhZy1saW5lLWZvcndhcmQgKGFyZykNCiAgIkRy YWcgdGhlIGxpbmUgYXQgcG9pbnQgQVJHIGxpbmVzIGZvcndhcmQuIg0KICAoaW50ZXJhY3RpdmUg InAiKQ0KICAoZG90aW1lcyAobiAoYWJzIGFyZykpDQogICAgKGxldCAoKGMgKGN1cnJlbnQtY29s dW1uKSkpDQogICAgICAoaWYgKDwgMCBhcmcpDQoJICAocHJvZ24NCgkgICAgKGJlZ2lubmluZy1v Zi1saW5lIDIpDQoJICAgICh0cmFuc3Bvc2UtbGluZXMgMSkNCgkgICAgKGJlZ2lubmluZy1vZi1s aW5lIDApKQ0KCSh0cmFuc3Bvc2UtbGluZXMgMSkNCgkoYmVnaW5uaW5nLW9mLWxpbmUgLTEpKQ0K ICAgICAgKG9yZy1tb3ZlLXRvLWNvbHVtbiBjKSkpKQ0KDQooZGVmdW4gb3JnLWRyYWctbGluZS1i YWNrd2FyZCAoYXJnKQ0KICAiRHJhZyB0aGUgbGluZSBhdCBwb2ludCBBUkcgbGluZXMgYmFja3dh cmQuIg0KICAoaW50ZXJhY3RpdmUgInAiKQ0KICAob3JnLWRyYWctbGluZS1mb3J3YXJkICgtIGFy ZykpKQ0KDQooZGVmdW4gb3JnLW1hcmstZWxlbWVudCAoKQ0KICAiUHV0IHBvaW50IGF0IGJlZ2lu bmluZyBvZiB0aGlzIGVsZW1lbnQsIG1hcmsgYXQgZW5kLg0KDQpJbnRlcmFjdGl2ZWx5LCBpZiB0 aGlzIGNvbW1hbmQgaXMgcmVwZWF0ZWQgb3IgKGluIFRyYW5zaWVudCBNYXJrDQptb2RlKSBpZiB0 aGUgbWFyayBpcyBhY3RpdmUsIGl0IG1hcmtzIHRoZSBuZXh0IGVsZW1lbnQgYWZ0ZXIgdGhlDQpv bmVzIGFscmVhZHkgbWFya2VkLiINCiAgKGludGVyYWN0aXZlKQ0KICAobGV0IChkZWFjdGl2YXRl LW1hcmspDQogICAgKGlmIChhbmQgKG9yZy1jYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpDQoJ ICAgICAob3IgKGFuZCAoZXEgbGFzdC1jb21tYW5kIHRoaXMtY29tbWFuZCkgKG1hcmsgdCkpDQoJ CSAoYW5kIHRyYW5zaWVudC1tYXJrLW1vZGUgbWFyay1hY3RpdmUpKSkNCgkoc2V0LW1hcmsNCgkg KHNhdmUtZXhjdXJzaW9uDQoJICAgKGdvdG8tY2hhciAobWFyaykpDQoJICAgKGdvdG8tY2hhciAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCAob3JnLWVsZW1lbnQtYXQtcG9pbnQpKSkpKQ0KICAg ICAgKGxldCAoKGVsZW1lbnQgKG9yZy1lbGVtZW50LWF0LXBvaW50KSkpDQoJKGVuZC1vZi1saW5l KQ0KCShwdXNoLW1hcmsgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZWxlbWVudCkgdCB0KQ0K CShnb3RvLWNoYXIgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBlbGVtZW50KSkpKSkpDQoN CihkZWZ1biBvcmctbmFycm93LXRvLWVsZW1lbnQgKCkNCiAgIk5hcnJvdyBidWZmZXIgdG8gY3Vy cmVudCBlbGVtZW50LiINCiAgKGludGVyYWN0aXZlKQ0KICAobGV0ICgoZWxlbSAob3JnLWVsZW1l bnQtYXQtcG9pbnQpKSkNCiAgICAoY29uZA0KICAgICAoKGVxIChjYXIgZWxlbSkgJ2hlYWRsaW5l KQ0KICAgICAgKG5hcnJvdy10by1yZWdpb24NCiAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkg OmJlZ2luIGVsZW0pDQogICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZWxlbSkpKQ0K ICAgICAoKG1lbXEgKGNhciBlbGVtKSBvcmctZWxlbWVudC1ncmVhdGVyLWVsZW1lbnRzKQ0KICAg ICAgKG5hcnJvdy10by1yZWdpb24NCiAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNvbnRl bnRzLWJlZ2luIGVsZW0pDQogICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjb250ZW50cy1l bmQgZWxlbSkpKQ0KICAgICAodA0KICAgICAgKG5hcnJvdy10by1yZWdpb24NCiAgICAgICAob3Jn LWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGVsZW0pDQogICAgICAgKG9yZy1lbGVtZW50LXByb3Bl cnR5IDplbmQgZWxlbSkpKSkpKQ0KDQooZGVmdW4gb3JnLXRyYW5zcG9zZS1lbGVtZW50ICgpDQog ICJUcmFuc3Bvc2UgY3VycmVudCBhbmQgcHJldmlvdXMgZWxlbWVudHMsIGtlZXBpbmcgYmxhbmsg bGluZXMgYmV0d2Vlbi4NClBvaW50IGlzIG1vdmVkIGFmdGVyIGJvdGggZWxlbWVudHMuIg0KICAo aW50ZXJhY3RpdmUpDQogIChvcmctc2tpcC13aGl0ZXNwYWNlKQ0KICAobGV0ICgoZW5kIChvcmct ZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIChvcmctZWxlbWVudC1hdC1wb2ludCkpKSkNCiAgICAob3Jn LWRyYWctZWxlbWVudC1iYWNrd2FyZCkNCiAgICAoZ290by1jaGFyIGVuZCkpKQ0KDQooZGVmdW4g b3JnLXVuaW5kZW50LWJ1ZmZlciAoKQ0KICAiVW4taW5kZW50IHRoZSB2aXNpYmxlIHBhcnQgb2Yg dGhlIGJ1ZmZlci4NClJlbGF0aXZlIGluZGVudGF0aW9uIChiZXR3ZWVuIGl0ZW1zLCBpbnNpZGUg YmxvY2tzLCBldGMuKSBpc24ndA0KbW9kaWZpZWQuIg0KICAoaW50ZXJhY3RpdmUpDQogICh1bmxl c3MgKGVxIG1ham9yLW1vZGUgJ29yZy1tb2RlKQ0KICAgICh1c2VyLWVycm9yICJDYW5ub3QgdW4t aW5kZW50IGEgYnVmZmVyIG5vdCBpbiBPcmcgbW9kZSIpKQ0KICAobGV0KiAoKHBhcnNlLXRyZWUg KG9yZy1lbGVtZW50LXBhcnNlLWJ1ZmZlciAnZ3JlYXRlci1lbGVtZW50KSkNCgkgdW5pbmRlbnQt dHJlZQkJCTsgRm9yIGJ5dGUtY29tcGlsZXIuDQoJICh1bmluZGVudC10cmVlDQoJICAoZnVuY3Rp b24NCgkgICAobGFtYmRhIChjb250ZW50cykNCgkgICAgIChtYXBjDQoJICAgICAgKGxhbWJkYSAo ZWxlbWVudCkNCgkJKGlmIChtZW1xIChvcmctZWxlbWVudC10eXBlIGVsZW1lbnQpICcoaGVhZGxp bmUgc2VjdGlvbikpDQoJCSAgICAoZnVuY2FsbCB1bmluZGVudC10cmVlIChvcmctZWxlbWVudC1j b250ZW50cyBlbGVtZW50KSkNCgkJICAoc2F2ZS1leGN1cnNpb24NCgkJICAgIChzYXZlLXJlc3Ry aWN0aW9uDQoJCSAgICAgIChuYXJyb3ctdG8tcmVnaW9uDQoJCSAgICAgICAob3JnLWVsZW1lbnQt cHJvcGVydHkgOmJlZ2luIGVsZW1lbnQpDQoJCSAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkg OmVuZCBlbGVtZW50KSkNCgkJICAgICAgKG9yZy1kby1yZW1vdmUtaW5kZW50YXRpb24pKSkpKQ0K CSAgICAgIChyZXZlcnNlIGNvbnRlbnRzKSkpKSkpDQogICAgKGZ1bmNhbGwgdW5pbmRlbnQtdHJl ZSAob3JnLWVsZW1lbnQtY29udGVudHMgcGFyc2UtdHJlZSkpKSkNCg0KKGRlZnVuIG9yZy1zaG93 LXN1YnRyZWUgKCkNCiAgIlNob3cgZXZlcnl0aGluZyBhZnRlciB0aGlzIGhlYWRpbmcgYXQgZGVl cGVyIGxldmVscy4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKG91dGxpbmUtZmxhZy1yZWdpb24NCiAg IChwb2ludCkNCiAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAob3JnLWVuZC1vZi1zdWJ0cmVlIHQg dCkpDQogICBuaWwpKQ0KDQooZGVmdW4gb3JnLXNob3ctZW50cnkgKCkNCiAgIlNob3cgdGhlIGJv ZHkgZGlyZWN0bHkgZm9sbG93aW5nIHRoaXMgaGVhZGluZy4NClNob3cgdGhlIGhlYWRpbmcgdG9v LCBpZiBpdCBpcyBjdXJyZW50bHkgaW52aXNpYmxlLiINCiAgKGludGVyYWN0aXZlKQ0KICAoc2F2 ZS1leGN1cnNpb24NCiAgICAoY29uZGl0aW9uLWNhc2UgbmlsDQoJKHByb2duDQoJICAob3JnLWJh Y2stdG8taGVhZGluZyB0KQ0KCSAgKG91dGxpbmUtZmxhZy1yZWdpb24NCgkgICAobWF4IChwb2lu dC1taW4pICgxLSAocG9pbnQpKSkNCgkgICAoc2F2ZS1leGN1cnNpb24NCgkgICAgIChpZiAocmUt c2VhcmNoLWZvcndhcmQNCgkJICAoY29uY2F0ICJbXHJcbl1cXCgiIG9yZy1vdXRsaW5lLXJlZ2V4 cCAiXFwpIikgbmlsIHQpDQoJCSAobWF0Y2gtYmVnaW5uaW5nIDEpDQoJICAgICAgIChwb2ludC1t YXgpKSkNCgkgICBuaWwpDQoJICAob3JnLWN5Y2xlLWhpZGUtZHJhd2VycyAnY2hpbGRyZW4pKQ0K ICAgICAgKGVycm9yIG5pbCkpKSkNCg0KKGRlZnVuIG9yZy1tYWtlLW9wdGlvbnMtcmVnZXhwIChr d2RzICZvcHRpb25hbCBleHRyYSkNCiAgIk1ha2UgYSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGtl eXdvcmQgbGluZXMuIg0KICAoY29uY2F0DQogICAiXiNcXCtcXCgiDQogICAobWFwY29uY2F0ICdy ZWdleHAtcXVvdGUga3dkcyAiXFx8IikNCiAgIChpZiBleHRyYSAoY29uY2F0ICJcXHwiIGV4dHJh KSkNCiAgICJcXCk6WyBcdF0qXFwoLipcXCkiKSkNCg0KOzsgTWFrZSBpc2VhcmNoIHJldmVhbCB0 aGUgbmVjZXNzYXJ5IGNvbnRleHQNCihkZWZ1biBvcmctaXNlYXJjaC1lbmQgKCkNCiAgIlJldmVh bCBjb250ZXh0IGFmdGVyIGlzZWFyY2ggZXhpdHMuIg0KICAod2hlbiBpc2VhcmNoLXN1Y2Nlc3Mg OyBvbmx5IGlmIHNlYXJjaCB3YXMgc3VjY2Vzc2Z1bA0KICAgIChpZiAoZmVhdHVyZXAgJ3hlbWFj cykNCgk7OyBVbmRlciBYRW1hY3MsIHRoZSBob29rIGlzIHJ1biBpbiB0aGUgY29ycmVjdCBwbGFj ZSwNCgk7OyB3ZSBkaXJlY3RseSBzaG93IHRoZSBjb250ZXh0Lg0KCShvcmctc2hvdy1jb250ZXh0 ICdpc2VhcmNoKQ0KICAgICAgOzsgSW4gRW1hY3MgdGhlIGhvb2sgcnVucyAqYmVmb3JlKiByZXN0 b3JpbmcgdGhlIG92ZXJsYXlzLg0KICAgICAgOzsgU28gd2UgaGF2ZSB0byB1c2UgYSBvbmUtdGlt ZSBwb3N0LWNvbW1hbmQtaG9vayB0byBkbyB0aGlzLg0KICAgICAgOzsgKEVtYWNzIDIyIGhhcyBh IHNwZWNpYWwgdmFyaWFibGUsIHNlZSBmdW5jdGlvbiBgb3JnLW1vZGUnKQ0KICAgICAgKHVubGVz cyAoYW5kIChib3VuZHAgJ2lzZWFyY2gtbW9kZS1lbmQtaG9vay1xdWl0KQ0KCQkgICBpc2VhcmNo LW1vZGUtZW5kLWhvb2stcXVpdCkNCgk7OyBPbmx5IHdoZW4gdGhlIGlzZWFyY2ggd2FzIG5vdCBx dWl0dGVkLg0KCShvcmctYWRkLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICdvcmctaXNlYXJjaC1w b3N0LWNvbW1hbmQNCgkJICAgICAgJ2FwcGVuZCAnbG9jYWwpKSkpKQ0KDQooZGVmdW4gb3JnLWlz ZWFyY2gtcG9zdC1jb21tYW5kICgpDQogICJSZW1vdmUgc2VsZiBmcm9tIGhvb2ssIGFuZCBzaG93 IGNvbnRleHQuIg0KICAocmVtb3ZlLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICdvcmctaXNlYXJj aC1wb3N0LWNvbW1hbmQgJ2xvY2FsKQ0KICAob3JnLXNob3ctY29udGV4dCAnaXNlYXJjaCkpDQoN Cg0KOzs7OyBJbnRlZ3JhdGlvbiB3aXRoIGFuZCBmaXhlcyBmb3Igb3RoZXIgcGFja2FnZXMNCg0K Ozs7IEltZW51IHN1cHBvcnQNCg0KKGRlZnZhciBvcmctaW1lbnUtbWFya2VycyBuaWwNCiAgIkFs bCBtYXJrZXJzIGN1cnJlbnRseSB1c2VkIGJ5IEltZW51LiIpDQoobWFrZS12YXJpYWJsZS1idWZm ZXItbG9jYWwgJ29yZy1pbWVudS1tYXJrZXJzKQ0KDQooZGVmdW4gb3JnLWltZW51LW5ldy1tYXJr ZXIgKCZvcHRpb25hbCBwb3MpDQogICJSZXR1cm4gYSBuZXcgbWFya2VyIGZvciB1c2UgYnkgSW1l bnUsIGFuZCByZW1lbWJlciB0aGUgbWFya2VyLiINCiAgKGxldCAoKG0gKG1ha2UtbWFya2VyKSkp DQogICAgKG1vdmUtbWFya2VyIG0gKG9yIHBvcyAocG9pbnQpKSkNCiAgICAocHVzaCBtIG9yZy1p bWVudS1tYXJrZXJzKQ0KICAgIG0pKQ0KDQooZGVmdW4gb3JnLWltZW51LWdldC10cmVlICgpDQog ICJQcm9kdWNlIHRoZSBpbmRleCBmb3IgSW1lbnUuIg0KICAobWFwYyAobGFtYmRhICh4KSAobW92 ZS1tYXJrZXIgeCBuaWwpKSBvcmctaW1lbnUtbWFya2VycykNCiAgKHNldHEgb3JnLWltZW51LW1h cmtlcnMgbmlsKQ0KICAobGV0KiAoKG4gb3JnLWltZW51LWRlcHRoKQ0KCSAocmUgKGNvbmNhdCAi XiIgKG9yZy1nZXQtbGltaXRlZC1vdXRsaW5lLXJlZ2V4cCkpKQ0KCSAoc3VicyAobWFrZS12ZWN0 b3IgKDErIG4pIG5pbCkpDQoJIChsYXN0LWxldmVsIDApDQoJIG0gbGV2ZWwgaGVhZDAgaGVhZCkN CiAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAgIChzYXZlLXJlc3RyaWN0aW9uDQoJKHdpZGVuKQ0K CShnb3RvLWNoYXIgKHBvaW50LW1heCkpDQoJKHdoaWxlIChyZS1zZWFyY2gtYmFja3dhcmQgcmUg bmlsIHQpDQoJICAoc2V0cSBsZXZlbCAob3JnLXJlZHVjZWQtbGV2ZWwgKGZ1bmNhbGwgb3V0bGlu ZS1sZXZlbCkpKQ0KCSAgKHdoZW4gKGFuZCAoPD0gbGV2ZWwgbikNCgkJICAgICAobG9va2luZy1h dCBvcmctY29tcGxleC1oZWFkaW5nLXJlZ2V4cCkNCgkJICAgICAoc2V0cSBoZWFkMCAob3JnLW1h dGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDQpKSkNCgkgICAgKHNldHEgaGVhZCAob3JnLWxpbmst ZGlzcGxheS1mb3JtYXQgaGVhZDApDQoJCSAgbSAob3JnLWltZW51LW5ldy1tYXJrZXIpKQ0KCSAg ICAob3JnLWFkZC1wcm9wcyBoZWFkIG5pbCAnb3JnLWltZW51LW1hcmtlciBtICdvcmctaW1lbnUg dCkNCgkgICAgKGlmICg+PSBsZXZlbCBsYXN0LWxldmVsKQ0KCQkocHVzaCAoY29ucyBoZWFkIG0p IChhcmVmIHN1YnMgbGV2ZWwpKQ0KCSAgICAgIChwdXNoIChjb25zIGhlYWQgKGFyZWYgc3VicyAo MSsgbGV2ZWwpKSkgKGFyZWYgc3VicyBsZXZlbCkpDQoJICAgICAgKGxvb3AgZm9yIGkgZnJvbSAo MSsgbGV2ZWwpIHRvIG4gZG8gKGFzZXQgc3VicyBpIG5pbCkpKQ0KCSAgICAoc2V0cSBsYXN0LWxl dmVsIGxldmVsKSkpKSkNCiAgICAoYXJlZiBzdWJzIDEpKSkNCg0KKGV2YWwtYWZ0ZXItbG9hZCAi aW1lbnUiDQogICcocHJvZ24NCiAgICAgKGFkZC1ob29rICdpbWVudS1hZnRlci1qdW1wLWhvb2sN CgkgICAgICAgKGxhbWJkYSAoKQ0KCQkgKGlmIChkZXJpdmVkLW1vZGUtcCAnb3JnLW1vZGUpDQoJ CSAgICAgKG9yZy1zaG93LWNvbnRleHQgJ29yZy1nb3RvKSkpKSkpDQoNCihkZWZ1biBvcmctbGlu ay1kaXNwbGF5LWZvcm1hdCAobGluaykNCiAgIlJlcGxhY2UgYSBsaW5rIHdpdGggaXRzIHRoZSBk ZXNjcmlwdGlvbi4NCklmIHRoZXJlIGlzIG5vIGRlc2NyaXB0aW9uLCB1c2UgdGhlIGxpbmsgdGFy Z2V0LiINCiAgKHNhdmUtbWF0Y2gtZGF0YQ0KICAgIChpZiAoc3RyaW5nLW1hdGNoIG9yZy1icmFj a2V0LWxpbmstYW5hbHl0aWMtcmVnZXhwIGxpbmspDQoJKHJlcGxhY2UtbWF0Y2ggKGlmIChtYXRj aC1lbmQgNSkNCgkJCSAgIChtYXRjaC1zdHJpbmcgNSBsaW5rKQ0KCQkJIChjb25jYXQgKG1hdGNo LXN0cmluZyAxIGxpbmspDQoJCQkJIChtYXRjaC1zdHJpbmcgMyBsaW5rKSkpDQoJCSAgICAgICBu aWwgdCBsaW5rKQ0KICAgICAgbGluaykpKQ0KDQooZGVmdW4gb3JnLXRvZ2dsZS1saW5rLWRpc3Bs YXkgKCkNCiAgIlRvZ2dsZSB0aGUgbGl0ZXJhbCBvciBkZXNjcmlwdGl2ZSBkaXNwbGF5IG9mIGxp bmtzLiINCiAgKGludGVyYWN0aXZlKQ0KICAoaWYgb3JnLWRlc2NyaXB0aXZlLWxpbmtzDQogICAg ICAocHJvZ24gKG9yZy1yZW1vdmUtZnJvbS1pbnZpc2liaWxpdHktc3BlYyAnKG9yZy1saW5rKSkN CgkgICAgIChvcmctcmVzdGFydC1mb250LWxvY2spDQoJICAgICAoc2V0cSBvcmctZGVzY3JpcHRp dmUtbGlua3MgbmlsKSkNCiAgICAocHJvZ24gKGFkZC10by1pbnZpc2liaWxpdHktc3BlYyAnKG9y Zy1saW5rKSkNCgkgICAob3JnLXJlc3RhcnQtZm9udC1sb2NrKQ0KCSAgIChzZXRxIG9yZy1kZXNj cmlwdGl2ZS1saW5rcyB0KSkpKQ0KDQo7OyBTcGVlZGJhciBzdXBwb3J0DQoNCihkZWZ2YXIgb3Jn LXNwZWVkYmFyLXJlc3RyaWN0aW9uLWxvY2stb3ZlcmxheSAobWFrZS1vdmVybGF5IDEgMSkNCiAg Ik92ZXJsYXkgbWFya2luZyB0aGUgYWdlbmRhIHJlc3RyaWN0aW9uIGxpbmUgaW4gc3BlZWRiYXIu IikNCihvdmVybGF5LXB1dCBvcmctc3BlZWRiYXItcmVzdHJpY3Rpb24tbG9jay1vdmVybGF5DQoJ ICAgICAnZmFjZSAnb3JnLWFnZW5kYS1yZXN0cmljdGlvbi1sb2NrKQ0KKG92ZXJsYXktcHV0IG9y Zy1zcGVlZGJhci1yZXN0cmljdGlvbi1sb2NrLW92ZXJsYXkNCgkgICAgICdoZWxwLWVjaG8gIkFn ZW5kYXMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRoaXMgaXRlbS4iKQ0KKG9yZy1kZXRhY2gt b3ZlcmxheSBvcmctc3BlZWRiYXItcmVzdHJpY3Rpb24tbG9jay1vdmVybGF5KQ0KDQooZGVmdW4g b3JnLXNwZWVkYmFyLXNldC1hZ2VuZGEtcmVzdHJpY3Rpb24gKCkNCiAgIlJlc3RyaWN0IGZ1dHVy ZSBhZ2VuZGEgY29tbWFuZHMgdG8gdGhlIGxvY2F0aW9uIGF0IHBvaW50IGluIHNwZWVkYmFyLg0K VG8gZ2V0IHJpZCBvZiB0aGUgcmVzdHJpY3Rpb24sIHVzZSBcXFtvcmctYWdlbmRhLXJlbW92ZS1y ZXN0cmljdGlvbi1sb2NrXS4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKHJlcXVpcmUgJ29yZy1hZ2Vu ZGEpDQogIChsZXQgKHAgbSB0cCBucCBkaXIgdHh0KQ0KICAgIChjb25kDQogICAgICgoc2V0cSBw ICh0ZXh0LXByb3BlcnR5LWFueSAocG9pbnQtYXQtYm9sKSAocG9pbnQtYXQtZW9sKQ0KCQkJCSAn b3JnLWltZW51IHQpKQ0KICAgICAgKHNldHEgbSAoZ2V0LXRleHQtcHJvcGVydHkgcCAnb3JnLWlt ZW51LW1hcmtlcikpDQogICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAobWFya2VyLWJ1ZmZlciBt KQ0KCShnb3RvLWNoYXIgbSkNCgkob3JnLWFnZW5kYS1zZXQtcmVzdHJpY3Rpb24tbG9jayAnc3Vi dHJlZSkpKQ0KICAgICAoKHNldHEgcCAodGV4dC1wcm9wZXJ0eS1hbnkgKHBvaW50LWF0LWJvbCkg KHBvaW50LWF0LWVvbCkNCgkJCQkgJ3NwZWVkYmFyLWZ1bmN0aW9uICdzcGVlZGJhci1maW5kLWZp bGUpKQ0KICAgICAgKHNldHEgdHAgKHByZXZpb3VzLXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2UNCgkJ KDErIHApICdzcGVlZGJhci1mdW5jdGlvbikNCgkgICAgbnAgKG5leHQtc2luZ2xlLXByb3BlcnR5 LWNoYW5nZQ0KCQl0cCAnc3BlZWRiYXItZnVuY3Rpb24pDQoJICAgIGRpciAoc3BlZWRiYXItbGlu ZS1kaXJlY3RvcnkpDQoJICAgIHR4dCAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIChv ciB0cCAocG9pbnQtbWluKSkNCgkJCQkJCShvciBucCAocG9pbnQtbWF4KSkpKQ0KICAgICAgKHdp dGgtY3VycmVudC1idWZmZXIgKGZpbmQtZmlsZS1ub3NlbGVjdA0KCQkJICAgIChsZXQgKChkZWZh dWx0LWRpcmVjdG9yeSBkaXIpKQ0KCQkJICAgICAgKGV4cGFuZC1maWxlLW5hbWUgdHh0KSkpDQoJ KHVubGVzcyAoZGVyaXZlZC1tb2RlLXAgJ29yZy1tb2RlKQ0KCSAgKHVzZXItZXJyb3IgIkNhbm5v dCByZXN0cmljdCB0byBub24tT3JnLW1vZGUgZmlsZSIpKQ0KCShvcmctYWdlbmRhLXNldC1yZXN0 cmljdGlvbi1sb2NrICdmaWxlKSkpDQogICAgICh0ICh1c2VyLWVycm9yICJEb24ndCBrbm93IGhv dyB0byByZXN0cmljdCBPcmctbW9kZSdzIGFnZW5kYSIpKSkNCiAgICAobW92ZS1vdmVybGF5IG9y Zy1zcGVlZGJhci1yZXN0cmljdGlvbi1sb2NrLW92ZXJsYXkNCgkJICAocG9pbnQtYXQtYm9sKSAo cG9pbnQtYXQtZW9sKSkNCiAgICAoc2V0cSBjdXJyZW50LXByZWZpeC1hcmcgbmlsKQ0KICAgIChv cmctYWdlbmRhLW1heWJlLXJlZG8pKSkNCg0KKGRlZnZhciBzcGVlZGJhci1maWxlLWtleS1tYXAp DQooZGVjbGFyZS1mdW5jdGlvbiBzcGVlZGJhci1hZGQtc3VwcG9ydGVkLWV4dGVuc2lvbiAic3Bl ZWRiYXIiIChleHRlbnNpb24pKQ0KKGV2YWwtYWZ0ZXItbG9hZCAic3BlZWRiYXIiDQogICcocHJv Z24NCiAgICAgKHNwZWVkYmFyLWFkZC1zdXBwb3J0ZWQtZXh0ZW5zaW9uICIub3JnIikNCiAgICAg KGRlZmluZS1rZXkgc3BlZWRiYXItZmlsZS1rZXktbWFwICI8IiAnb3JnLXNwZWVkYmFyLXNldC1h Z2VuZGEtcmVzdHJpY3Rpb24pDQogICAgIChkZWZpbmUta2V5IHNwZWVkYmFyLWZpbGUta2V5LW1h cCAiXEMtY1xDLXg8IiAnb3JnLXNwZWVkYmFyLXNldC1hZ2VuZGEtcmVzdHJpY3Rpb24pDQogICAg IChkZWZpbmUta2V5IHNwZWVkYmFyLWZpbGUta2V5LW1hcCAiPiIgJ29yZy1hZ2VuZGEtcmVtb3Zl LXJlc3RyaWN0aW9uLWxvY2spDQogICAgIChkZWZpbmUta2V5IHNwZWVkYmFyLWZpbGUta2V5LW1h cCAiXEMtY1xDLXg+IiAnb3JnLWFnZW5kYS1yZW1vdmUtcmVzdHJpY3Rpb24tbG9jaykNCiAgICAg KGFkZC1ob29rICdzcGVlZGJhci12aXNpdGluZy10YWctaG9vaw0KCSAgICAgICAobGFtYmRhICgp IChhbmQgKGRlcml2ZWQtbW9kZS1wICdvcmctbW9kZSkgKG9yZy1zaG93LWNvbnRleHQgJ29yZy1n b3RvKSkpKSkpDQoNCjs7OyBGaXhlcyBhbmQgSGFja3MgZm9yIHByb2JsZW1zIHdpdGggb3RoZXIg cGFja2FnZXMNCg0KOzsgTWFrZSBmbHlzcGVsbCBub3QgY2hlY2sgd29yZHMgaW4gbGlua3MsIHRv IG5vdCBtZXNzIHVwIG91ciBrZXltYXANCihkZWZ2YXIgb3JnLWVsZW1lbnQtYWZmaWxpYXRlZC1r ZXl3b3JkcykgOyBGcm9tIG9yZy1lbGVtZW50LmVsDQooZGVmdmFyIG9yZy1lbGVtZW50LWJsb2Nr LW5hbWUtYWxpc3QpCSA7IEZyb20gb3JnLWVsZW1lbnQuZWwNCihkZWZ1biBvcmctbW9kZS1mbHlz cGVsbC12ZXJpZnkgKCkNCiAgIkRvbid0IGxldCBmbHlzcGVsbCBwdXQgb3ZlcmxheXMgYXQgYWN0 aXZlIGJ1dHRvbnMsIG9yIG9uDQogICB7dG9kbyxhbGwtdGltZSxhZGRpdGlvbmFsLW9wdGlvbi1s aWtlfS1rZXl3b3Jkcy4iDQogIChyZXF1aXJlICdvcmctZWxlbWVudCkgOyBGb3IgYG9yZy1lbGVt ZW50LWFmZmlsaWF0ZWQta2V5d29yZHMnDQogIChsZXQgKChwb3MgKG1heCAoMS0gKHBvaW50KSkg KHBvaW50LW1pbikpKQ0KCSh3b3JkICh0aGluZy1hdC1wb2ludCAnd29yZCkpKQ0KICAgIChhbmQg KG5vdCAoZ2V0LXRleHQtcHJvcGVydHkgcG9zICdrZXltYXApKQ0KCSAobm90IChnZXQtdGV4dC1w cm9wZXJ0eSBwb3MgJ29yZy1uby1mbHlzcGVsbCkpDQoJIChub3QgKG1lbWJlciB3b3JkIG9yZy10 b2RvLWtleXdvcmRzLTEpKQ0KCSAobm90IChtZW1iZXIgd29yZCBvcmctYWxsLXRpbWUta2V5d29y ZHMpKQ0KCSAobm90IChtZW1iZXIgd29yZCBvcmctb3B0aW9ucy1rZXl3b3JkcykpDQoJIChub3Qg KG1lbWJlciB3b3JkIChtYXBjYXIgJ2NhciBvcmctc3RhcnR1cC1vcHRpb25zKSkpDQoJIChub3Qg KG1lbWJlci1pZ25vcmUtY2FzZSB3b3JkIG9yZy1lbGVtZW50LWFmZmlsaWF0ZWQta2V5d29yZHMp KQ0KCSAobm90IChtZW1iZXItaWdub3JlLWNhc2Ugd29yZCAob3JnLWdldC1leHBvcnQta2V5d29y ZHMpKSkNCgkgKG5vdCAobWVtYmVyLWlnbm9yZS1jYXNlDQoJICAgICAgIHdvcmQgKG1hcGNhciAn Y2FyIG9yZy1lbGVtZW50LWJsb2NrLW5hbWUtYWxpc3QpKSkNCgkgKG5vdCAobWVtYmVyLWlnbm9y ZS1jYXNlIHdvcmQgJygiQkVHSU4iICJFTkQiICJBVFRSIikpKQ0KCSAobm90IChvcmctaW4tc3Jj LWJsb2NrLXApKSkpKQ0KDQooZGVmdW4gb3JnLXJlbW92ZS1mbHlzcGVsbC1vdmVybGF5cy1pbiAo YmVnIGVuZCkNCiAgIlJlbW92ZSBmbHlzcGVsbCBvdmVybGF5cyBpbiByZWdpb24uIg0KICAoYW5k IChvcmctYm91bmQtYW5kLXRydWUtcCBmbHlzcGVsbC1tb2RlKQ0KICAgICAgIChmYm91bmRwICdm bHlzcGVsbC1kZWxldGUtcmVnaW9uLW92ZXJsYXlzKQ0KICAgICAgIChmbHlzcGVsbC1kZWxldGUt cmVnaW9uLW92ZXJsYXlzIGJlZyBlbmQpKQ0KICAoYWRkLXRleHQtcHJvcGVydGllcyBiZWcgZW5k ICcob3JnLW5vLWZseXNwZWxsIHQpKSkNCg0KOzsgTWFrZSBgYm9va21hcmstanVtcCcgc2hvd3Mg dGhlIGp1bXAgbG9jYXRpb24gaWYgaXQgd2FzIGhpZGRlbi4NCihldmFsLWFmdGVyLWxvYWQgImJv b2ttYXJrIg0KICAnKGlmIChib3VuZHAgJ2Jvb2ttYXJrLWFmdGVyLWp1bXAtaG9vaykNCiAgICAg ICA7OyBXZSBjYW4gdXNlIHRoZSBob29rDQogICAgICAgKGFkZC1ob29rICdib29rbWFyay1hZnRl ci1qdW1wLWhvb2sgJ29yZy1ib29rbWFyay1qdW1wLXVuaGlkZSkNCiAgICAgOzsgSG9vayBub3Qg YXZhaWxhYmxlLCB1c2UgYWR2aWNlDQogICAgIChkZWZhZHZpY2UgYm9va21hcmstanVtcCAoYWZ0 ZXIgb3JnLW1ha2UtdmlzaWJsZSBhY3RpdmF0ZSkNCiAgICAgICAiTWFrZSB0aGUgcG9zaXRpb24g dmlzaWJsZS4iDQogICAgICAgKG9yZy1ib29rbWFyay1qdW1wLXVuaGlkZSkpKSkNCg0KOzsgTWFr ZSBzdXJlIHNhdmVwbGFjZSBzaG93cyB0aGUgbG9jYXRpb24gaWYgaXQgd2FzIGhpZGRlbg0KKGV2 YWwtYWZ0ZXItbG9hZCAic2F2ZXBsYWNlIg0KICAnKGRlZmFkdmljZSBzYXZlLXBsYWNlLWZpbmQt ZmlsZS1ob29rIChhZnRlciBvcmctbWFrZS12aXNpYmxlIGFjdGl2YXRlKQ0KICAgICAiTWFrZSB0 aGUgcG9zaXRpb24gdmlzaWJsZS4iDQogICAgIChvcmctYm9va21hcmstanVtcC11bmhpZGUpKSkN Cg0KOzsgTWFrZSBzdXJlIGVjYiBzaG93cyB0aGUgbG9jYXRpb24gaWYgaXQgd2FzIGhpZGRlbg0K KGV2YWwtYWZ0ZXItbG9hZCAiZWNiIg0KICAnKGRlZmFkdmljZSBlY2ItbWV0aG9kLWNsaWNrZWQg KGFmdGVyIGVzZi9vcmctc2hvdy1jb250ZXh0IGFjdGl2YXRlKQ0KICAgICAiTWFrZSBoaWVyYXJj aHkgdmlzaWJsZSB3aGVuIGp1bXBpbmcgaW50byBsb2NhdGlvbiBmcm9tIEVDQiB0cmVlIGJ1ZmZl ci4iDQogICAgIChpZiAoZGVyaXZlZC1tb2RlLXAgJ29yZy1tb2RlKQ0KCSAob3JnLXNob3ctY29u dGV4dCkpKSkNCg0KKGRlZnVuIG9yZy1ib29rbWFyay1qdW1wLXVuaGlkZSAoKQ0KICAiVW5oaWRl IHRoZSBjdXJyZW50IHBvc2l0aW9uLCB0byBzaG93IHRoZSBib29rbWFyayBsb2NhdGlvbi4iDQog IChhbmQgKGRlcml2ZWQtbW9kZS1wICdvcmctbW9kZSkNCiAgICAgICAob3IgKG91dGxpbmUtaW52 aXNpYmxlLXApDQoJICAgKHNhdmUtZXhjdXJzaW9uIChnb3RvLWNoYXIgKG1heCAocG9pbnQtbWlu KSAoMS0gKHBvaW50KSkpKQ0KCQkJICAgKG91dGxpbmUtaW52aXNpYmxlLXApKSkNCiAgICAgICAo b3JnLXNob3ctY29udGV4dCAnYm9va21hcmstanVtcCkpKQ0KDQo7OyBNYWtlIHNlc3Npb24uZWwg aWdub3JlIG91ciBjaXJjdWxhciB2YXJpYWJsZQ0KKGRlZnZhciBzZXNzaW9uLWdsb2JhbHMtZXhj bHVkZSkNCihldmFsLWFmdGVyLWxvYWQgInNlc3Npb24iDQogICcoYWRkLXRvLWxpc3QgJ3Nlc3Np b24tZ2xvYmFscy1leGNsdWRlICdvcmctbWFyay1yaW5nKSkNCg0KOzs7OyBGaW5pc2ggdXANCg0K KHByb3ZpZGUgJ29yZykNCg0KKHJ1bi1ob29rcyAnb3JnLWxvYWQtaG9vaykNCg0KOzs7IG9yZy5l bCBlbmRzIGhlcmUNCg== --_B27A0DEB-789B-42AE-8732-E4CB0E369E58_--