Return-Path: Mailing-List: contact cocoon-dev-help@xml.apache.org; run by ezmlm Delivered-To: mailing list cocoon-dev@xml.apache.org Received: (qmail 6451 invoked from network); 6 Feb 2000 05:15:58 -0000 Received: from lotus2.lotus.com (192.233.136.8) by locus.apache.org with SMTP; 6 Feb 2000 05:15:58 -0000 Received: from internet2.lotus.com (internet2 [9.95.4.236]) by lotus2.lotus.com (8.9.3/8.9.3) with ESMTP id AAA11657; Sun, 6 Feb 2000 00:29:48 -0500 (EST) Received: from a3mail.lotus.com (A3MAIL.lotus.com [9.95.5.66]) by internet2.lotus.com (8.9.3/8.9.3) with ESMTP id AAA29642; Sun, 6 Feb 2000 00:14:13 -0500 (EST) Subject: Re: XSLT API Proposal (Draft 2) To: Kay Michael , cocoon-dev@xml.apache.org, xalan-dev@xml.apache.org, James Clark , Steve Muench , Adam Winer , Assaf Arkin , Eduardo.Pelegrillopart@eng.sun.com X-Mailer: Lotus Notes Release 5.0 March 30, 1999 From: "Scott Boag/CAM/Lotus" Date: Sun, 6 Feb 2000 00:13:11 -0500 Message-ID: X-MIMETrack: Serialize by Router on A3MAIL/CAM/H/Lotus() at 02/06/2000 12:15:11 AM MIME-Version: 1.0 Content-type: multipart/mixed; Boundary="0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1" Content-Disposition: inline --0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1 Content-type: text/plain; charset=us-ascii OK, I revised the interfaces according to people's comments, especially Mike's. The sticky issue is still probably the specification of the DocumentHandler interfaces on the XSLTExecContext and the Transform objects... I'll see if people want to push on this. Also, seeing how javax.xml.parsers and the SAX2 stuff is getting factory support, I guess I do need to add a factory for the XSLTExecContext object after all. If anyone thinks that these notes should be taken off the cocoon list, or anyone wants to be removed from the list, please let me know. (See attached file: XSLTResultTarget.java)(See attached file: SourceTree.java)(See attached file: Transform.java)(See attached file: URIResolver.java)(See attached file: XSLTException.java)(See attached file: XSLTExecContext.java)(See attached file: XSLTInputSource.java)(See attached file: OutputProperties.java) -scott --0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1 Content-type: application/octet-stream; name="XSLTResultTarget.java" Content-Disposition: attachment; filename="XSLTResultTarget.java" Content-transfer-encoding: base64 cGFja2FnZSBvcmcueG1sLnhzbHQ7DQoNCmltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsNCmlt cG9ydCBqYXZhLmlvLldyaXRlcjsNCmltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOw0KaW1wb3J0IG9y Zy54bWwuc2F4LkRvY3VtZW50SGFuZGxlcjsNCg0KLyoqDQogKiBDb250YWlucyB0aGUgcmVzdWx0 IG9mIGEgdHJhbnNmb3JtYXRpb24gdGhhdCB5b3UgcGVyZm9ybSB3aXRoIHRoZQ0KICogWFNMVFBy b2Nlc3NvciBwcm9jZXNzKCkgbWV0aG9kLg0KICogPHA+IENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0 aGlzIGNsYXNzIHRvIHByb3ZpZGUgcHJvY2VzcygpIGEgY29udGFpbmVyIGZvciB0aGUgWFNMVA0K ICogcmVzdWx0IHRyZWUuIFRoaXMgY2xhc3MgaXMgbW9kZWxlZCBhZnRlciB0aGUgU0FYIElucHV0 U291cmNlIGNsYXNzLCBleGNlcHQgdGhhdCBpdA0KICogaXMgZm9yIHRoZSBYU0xUIFJlc3VsdCB0 cmVlLCBhbmQgaW4gYWRkaXRpb24gdG8gc3RyZWFtcywgd3JpdGVycywgYW5kDQogKiBmaWxlbmFt ZXMsIGl0IGFsc28gY2FuIHNwZWNpZnkgYSBET00gbm9kZSwgb3IgYSBEb2N1bWVudEhhbmRsZXIN CiAqIG9yIEZvcm1hdHRlckxpc3RlbmVyLg0KICogDQogKiA8cGF0dGVybj4NCiAqIDxwYXR0ZXJu LW5hbWU+WFNMVFJlc3VsdFRhcmdldDwvcGF0dGVybi1uYW1lPg0KICogPHBvdGVudGlhbC1hbHRl cm5hdGUtbmFtZT5SZXN1bHRUYXJnZXQ8L3BvdGVudGlhbC1hbHRlcm5hdGUtbmFtZT4NCiAqIDxp bnRlbnQ+U2VydmUgYXMgYSBzaW5nbGUgb2JqZWN0IGZvciBtdWx0aXBsZSB0eXBlcyBvZiBvdXRw dXQsIHNvIHRoZXJlIGNhbg0KICogYmUgc2ltcGxlIHByb2Nlc3MgbWV0aG9kIHNpZ25hdHVyZXMu PC9pbnRlbnQ+DQogKiA8cmVzcG9uc2liaWxpdGllcz5BY3QgYXMgc2ltcGxlIGRhdGEgaG9sZGVy IGZvciBvdXRwdXQgc3RyZWFtLCBET00gbm9kZSwNCiAqIERvY3VtZW50SGFuZGxlciwgZXRjLjwv cmVzcG9uc2liaWxpdGllcz4NCiAqIDx0aHJlYWQtc2FmZXR5PlRocmVhZHNhZmUgY29uY3VycmVu dGx5IG92ZXIgbXVsdGlwbGUgdGhyZWFkcyBmb3IgcmVhZC1vbmx5LA0KICogbXVzdCBiZSBzeW5j aHJvbml6ZWQgZm9yIGVkaXQuPC90aHJlYWQtc2FmZXR5Pg0KICogPC9wYXR0ZXJuPg0KICogDQog KiBAc2VlIFhTTFRQcm9jZXNzb3IjcHJvY2VzcyhYU0xUSW5wdXRTb3VyY2UsIFhTTFRJbnB1dFNv dXJjZSwgWFNMVFJlc3VsdFRhcmdldCkNCiAqLw0KcHVibGljIGNsYXNzIFhTTFRSZXN1bHRUYXJn ZXQNCnsNCiAgLyoqDQogICAqIFplcm8tYXJndW1lbnQgZGVmYXVsdCBjb25zdHJ1Y3Rvci4NCiAg ICovDQogIHB1YmxpYyBYU0xUUmVzdWx0VGFyZ2V0ICgpDQogIHsNCiAgfQ0KDQogIC8qKg0KICAg KiBDcmVhdGUgYSBuZXcgb3V0cHV0IHRhcmdldCB3aXRoIGEgYnl0ZSBzdHJlYW0uDQogICAqDQog ICAqIEBwYXJhbSBieXRlU3RyZWFtIFRoZSByYXcgYnl0ZSBzdHJlYW0gdGhhdCB3aWxsIGNvbnRh aW4gdGhlIGRvY3VtZW50Lg0KICAgKi8NCiAgcHVibGljIFhTTFRSZXN1bHRUYXJnZXQgKE91dHB1 dFN0cmVhbSBieXRlU3RyZWFtKQ0KICB7DQogICAgc2V0Qnl0ZVN0cmVhbShieXRlU3RyZWFtKTsN CiAgfQ0KDQoNCiAgLyoqDQogICAqIENyZWF0ZSBhIG5ldyBvdXRwdXQgdGFyZ2V0IHdpdGggYSBj aGFyYWN0ZXIgc3RyZWFtLg0KICAgKg0KICAgKiBAcGFyYW0gY2hhcmFjdGVyU3RyZWFtIFRoZSBj aGFyYWN0ZXIgc3RyZWFtIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgYmUgd3JpdHRlbi4NCiAgICov IA0KICBwdWJsaWMgWFNMVFJlc3VsdFRhcmdldCAoV3JpdGVyIGNoYXJhY3RlclN0cmVhbSkNCiAg ew0KICAgIHNldENoYXJhY3RlclN0cmVhbShjaGFyYWN0ZXJTdHJlYW0pOw0KICB9DQoNCiAgLyoq DQogICAqIENyZWF0ZSBhIG5ldyBvdXRwdXQgdGFyZ2V0IHdpdGggYSBjaGFyYWN0ZXIgc3RyZWFt Lg0KICAgKg0KICAgKiBAcGFyYW0gY2hhcmFjdGVyU3RyZWFtIFRoZSBjaGFyYWN0ZXIgc3RyZWFt IHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgYmUgd3JpdHRlbi4NCiAgICovDQogIHB1YmxpYyBYU0xU UmVzdWx0VGFyZ2V0IChOb2RlIG4pDQogIHsNCiAgICBzZXROb2RlKG4pOw0KICB9DQogIA0KICAv KioNCiAgICogQ3JlYXRlIGEgbmV3IG91dHB1dCB0YXJnZXQgd2l0aCBhIFNBWCBEb2N1bWVudCBo YW5kbGVyLCB3aGljaCANCiAgICogd2lsbCBoYW5kbGUgcmVzdWx0IGV2ZW50cy4NCiAgICoNCiAg ICogQHBhcmFtIGhhbmRsZXIgVGhlIFNBWCBEb2N1bWVudCBoYW5kbGVyIHRvIHdoaWNoIHRoZSBy ZXN1bHRzIHdpbGwgYmUgd3JpdHRlbi4NCiAgICovDQogIHB1YmxpYyBYU0xUUmVzdWx0VGFyZ2V0 KERvY3VtZW50SGFuZGxlciBoYW5kbGVyKQ0KICB7DQogICAgZm9ybWF0dGVyTGlzdGVuZXIgPSBo YW5kbGVyOw0KICB9DQoNCiAgLyoqDQogICAqIFNldCB0aGUgYnl0ZSBzdHJlYW0gZm9yIHRoaXMg b3V0cHV0IHRhcmdldC4NCiAgICoNCiAgICogQHBhcmFtIGJ5dGVTdHJlYW0gQSBieXRlIHN0cmVh bSB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVzdWx0IGRvY3VtZW50Lg0KICAgKi8NCiAgcHVibGlj IHZvaWQgc2V0Qnl0ZVN0cmVhbSAoT3V0cHV0U3RyZWFtIGJ5dGVTdHJlYW0pDQogIHsNCiAgICB0 aGlzLmJ5dGVTdHJlYW0gPSBieXRlU3RyZWFtOw0KICB9DQoNCg0KICAvKioNCiAgICogR2V0IHRo ZSBieXRlIHN0cmVhbSBmb3IgdGhpcyBvdXRwdXQgdGFyZ2V0Lg0KICAgKg0KICAgKiBAcmV0dXJu IFRoZSBieXRlIHN0cmVhbSwgb3IgbnVsbCBpZiBub25lIHdhcyBzdXBwbGllZC4NCiAgICovDQog IHB1YmxpYyBPdXRwdXRTdHJlYW0gZ2V0Qnl0ZVN0cmVhbSAoKQ0KICB7DQogICAgcmV0dXJuIGJ5 dGVTdHJlYW07DQogIH0NCg0KDQogIC8qKg0KICAgKiBTZXQgdGhlIGNoYXJhY3RlciBlbmNvZGlu ZywgaWYga25vd24uDQogICAqLw0KICB2b2lkIHNldEVuY29kaW5nIChTdHJpbmcgZW5jb2Rpbmcp DQogIHsNCiAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7DQogIH0NCg0KDQogIC8qKg0KICAg KiBHZXQgdGhlIGNoYXJhY3RlciBlbmNvZGluZyB0aGF0IHdhcyB1c2VkLg0KICAgKg0KICAgKiBA cmV0dXJuIFRoZSBlbmNvZGluZywgb3IgbnVsbCBpZiBub25lIHdhcyBzdXBwbGllZC4NCiAgICov DQogIHB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcgKCkNCiAgew0KICAgIHJldHVybiBlbmNvZGlu ZzsNCiAgfQ0KDQoNCiAgLyoqDQogICAqIFNldCB0aGUgY2hhcmFjdGVyIHN0cmVhbSBmb3IgdGhp cyBvdXRwdXQgdGFyZ2V0Lg0KICAgKg0KICAgKiBAcGFyYW0gY2hhcmFjdGVyU3RyZWFtIFRoZSBj aGFyYWN0ZXIgc3RyZWFtIHRoYXQgd2lsbCBjb250YWluIA0KICAgKiAgICAgICAgICAgICAgICAg ICAgIHRoZSByZXN1bHQgZG9jdW1lbnQuDQogICAqLw0KICBwdWJsaWMgdm9pZCBzZXRDaGFyYWN0 ZXJTdHJlYW0gKFdyaXRlciBjaGFyYWN0ZXJTdHJlYW0pDQogIHsNCiAgICB0aGlzLmNoYXJhY3Rl clN0cmVhbSA9IGNoYXJhY3RlclN0cmVhbTsNCiAgfQ0KDQoNCiAgLyoqDQogICAqIEdldCB0aGUg Y2hhcmFjdGVyIHN0cmVhbSBmb3IgdGhpcyBvdXRwdXQgdGFyZ2V0Lg0KICAgKg0KICAgKiBAcmV0 dXJuIFRoZSBjaGFyYWN0ZXIgc3RyZWFtLCBvciBudWxsIGlmIG5vbmUgd2FzIHN1cHBsaWVkLg0K ICAgKi8NCiAgcHVibGljIFdyaXRlciBnZXRDaGFyYWN0ZXJTdHJlYW0gKCkNCiAgew0KICAgIHJl dHVybiBjaGFyYWN0ZXJTdHJlYW07DQogIH0NCg0KICAvKioNCiAgICogU2V0IHRoZSBub2RlIHRo YXQgd2lsbCBjb250YWluIHRoZSByZXN1bHQgbm9kZXMuDQogICAqLw0KICBwdWJsaWMgdm9pZCBz ZXROb2RlIChOb2RlIG5vZGUpDQogIHsNCiAgICB0aGlzLm5vZGUgPSBub2RlOw0KICB9DQoNCiAg LyoqDQogICAqIEdldCB0aGUgbm9kZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVzdWx0IG5vZGVz Lg0KICAgKi8NCiAgcHVibGljIE5vZGUgZ2V0Tm9kZSAoKQ0KICB7DQogICAgcmV0dXJuIG5vZGU7 DQogIH0NCiAgDQogIC8qKg0KICAgKiBTZXQgYSBTQVggRG9jdW1lbnRIYW5kbGVyIHRvIHByb2Nl c3MgdGhlIHJlc3VsdCB0cmVlIGV2ZW50cy4NCiAgICovDQogIHB1YmxpYyB2b2lkIHNldERvY3Vt ZW50SGFuZGxlciAoRG9jdW1lbnRIYW5kbGVyIGhhbmRsZXIpDQogIHsNCiAgICB0aGlzLmZvcm1h dHRlckxpc3RlbmVyID0gaGFuZGxlcjsNCiAgfQ0KDQogIC8qKg0KICAgKiBHZXQgdGhlIFNBWCBE b2N1bWVudEhhbmRsZXIgdGhhdCB3aWxsIHByb2Nlc3MgdGhlIHJlc3VsdCB0cmVlIGV2ZW50cy4N CiAgICovDQogIHB1YmxpYyBEb2N1bWVudEhhbmRsZXIgZ2V0RG9jdW1lbnRIYW5kbGVyICgpDQog IHsNCiAgICByZXR1cm4gZm9ybWF0dGVyTGlzdGVuZXI7DQogIH0NCiAgDQogIC8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8NCiAgLy8gSW50ZXJuYWwgc3RhdGUuDQogIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KICBwcml2YXRlIFN0 cmluZyBmaWxlTmFtZTsNCiAgcHJpdmF0ZSBPdXRwdXRTdHJlYW0gYnl0ZVN0cmVhbTsNCiAgcHJp dmF0ZSBTdHJpbmcgZW5jb2Rpbmc7DQogIHByaXZhdGUgV3JpdGVyIGNoYXJhY3RlclN0cmVhbTsN CiAgcHJpdmF0ZSBOb2RlIG5vZGU7DQogIHByaXZhdGUgRG9jdW1lbnRIYW5kbGVyIGZvcm1hdHRl ckxpc3RlbmVyOw0KfQ0K --0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1 Content-type: application/octet-stream; name="SourceTree.java" Content-Disposition: attachment; filename="SourceTree.java" Content-transfer-encoding: base64 cGFja2FnZSBvcmcueG1sLnhzbHQ7DQoNCi8qKg0KICogVGhpcyBpcyBhIHdyYXBwZXIgZm9yIGFu IFhTTFQgU291cmNlIFRyZWUsIHRoYXQgY2FuIGRlbGl2ZXIgWFNMVCBzcGVjaWZpYw0KICogaW5m b3JtYXRpb24gYWJvdXQgYSBnaXZlbiBkb2N1bWVudC4NCiAqIA0KICogPHBhdHRlcm4+DQogKiA8 cGF0dGVybi1uYW1lPlNvdXJjZVRyZWU8L3BhdHRlcm4tbmFtZT4NCiAqIDxwb3RlbnRpYWwtYWx0 ZXJuYXRlLW5hbWU+WFNMVERvY3VtZW50PC9wb3RlbnRpYWwtYWx0ZXJuYXRlLW5hbWU+DQogKiA8 cG90ZW50aWFsLWFsdGVybmF0ZS1uYW1lPlhTTFRTb3VyY2VUcmVlPC9wb3RlbnRpYWwtYWx0ZXJu YXRlLW5hbWU+DQogKiA8aW50ZW50PlNlcnZlIGFzIGEgcmVwcmVzZW50YXRpdmUgb2YgYSBYU0xU IFNvdXJjZSBUcmVlLCBhYnN0cmFjdGx5IGFscmVhZHkNCiAqIHBhcnNlZC48L2ludGVudD4NCiAq IDxyZXNwb25zaWJpbGl0aWVzPkRlbGl2ZXIgaW5mb3JtYXRpb24gYWJvdXQgYSBTb3VyY2UgVHJl ZSB0aGF0IGFuIFhTTFQNCiAqIHByb2Nlc3NvciB3b3VsZCBiZSBpbnRlcmVzdGVkIGluLjwvcmVz cG9uc2liaWxpdGllcz4NCiAqIDx0aHJlYWQtc2FmZXR5PlRocmVhZHNhZmUgY29uY3VycmVudGx5 IG92ZXIgbXVsdGlwbGUNCiAqIHRocmVhZHMuPC90aHJlYWQtc2FmZXR5Pg0KICogPC9wYXR0ZXJu Pg0KICovDQpwdWJsaWMgaW50ZXJmYWNlIFNvdXJjZVRyZWUNCnsNCiAgLyoqDQogICAqIEdldCBh biBYU0xUSW5wdXRTb3VyY2Ugc3BlY2lmaWNhdGlvbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBh IA0KICAgKiBnaXZlbiBkb2N1bWVudCB2aWEgdGhlIHhtbC1zdHlsZXNoZWV0IHByb2Nlc3Npbmcg aW5zdHJ1Y3Rpb24gDQogICAqIChzZWUgaHR0cDovL3d3dy53My5vcmcvVFIveG1sLXN0eWxlc2hl ZXQvKSwgYW5kIHRoYXQgbWF0Y2hlcyANCiAgICogdGhlIGdpdmVuIGNyaXRlcmlhLg0KICAgKiBA cGFyYW0gbWVkaWEgVGhlIG1lZGlhIGF0dHJpYnV0ZSB0byBiZSBtYXRjaGVkLiAgTWF5IGJlIG51 bGwsIGluIHdoaWNoIA0KICAgKiAgICAgICAgICAgICAgY2FzZSB0aGUgcHJlZmVyZWQgc3R5bGVz aGVldCB3aWxsIGJlIHVzZWQgKGkuZS4gYWx0ZXJuYXRlID0gbm8pLg0KICAgKiBAcGFyYW0gdGl0 bGUgVGhlIHZhbHVlIG9mIHRoZSB0aXRsZSBhdHRyaWJ1dGUgdG8gbWF0Y2guICBNYXkgYmUgbnVs bC4NCiAgICogQHBhcmFtIGNoYXJzZXQgVGhlIHZhbHVlIG9mIHRoZSBjaGFyc2V0IGF0dHJpYnV0 ZSB0byBtYXRjaC4gIE1heSBiZSBudWxsLg0KICAgKiBAcmV0dXJucyBBbiBYU0xUSW5wdXRTb3Vy Y2UgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFhTTFRFeGVjQ29udGV4dCdzIA0KICAgKiBjcmVhdGVU cmFuc2Zvcm0gbWV0aG9kLg0KICAgKi8NCiAgWFNMVElucHV0U291cmNlIGdldEFzc29jaWF0ZWRT dHlsZXNoZWV0KFN0cmluZyBtZWRpYSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTdHJpbmcgdGl0bGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTdHJpbmcgY2hhcnNldCkNCiAgICB0aHJvd3MgWFNMVEV4Y2VwdGlvbjsNCn0N Cg== --0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1 Content-type: application/octet-stream; name="Transform.java" Content-Disposition: attachment; filename="Transform.java" Content-transfer-encoding: base64 cGFja2FnZSBvcmcueG1sLnhzbHQ7DQoNCi8qKg0KICogVGhlIFRyYW5zZm9ybSBpcyB0aGUgcnVu dGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGlsZWQgDQogKiBzdHlsZXNoZWV0LiAgVHJh bnNmb3JtcyBtdXN0IGJlIHRocmVhZHNhZmUgZm9yIGEgZ2l2ZW4gaW5zdGFuY2UgDQogKiBvdmVy IG11bHRpcGxlIHRocmVhZHMgY29uY3VycmVudGx5LCBhbmQgYXJlIGdlbmVyYWxseSBtZWFudCB0 byANCiAqIGJlIHVzZWQgbWFueSBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiBzZXNzaW9uLg0K ICogDQogKiBBbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIG11c3QgYWxz byBiZSBhYmxlIA0KICogdG8gYWN0IGFzIGEgU0FYIERvY3VtZW50SGFuZGxlciwgbWVhbmluZyBp dCB3aWxsIGhhbmRsZSBldmVudHMgDQogKiBmcm9tIGEgU0FYIHBhcnNlIG9yIHNpbWlsYXIgZXZl bnQgcHJvZHVjZXIgYXMgdGhlICpzb3VyY2UgaW5wdXQqIHRyZWUgDQogKiAobWVhbmluZywgaW4g WFNMVCB0ZXJtcywgdGhlIHNvdXJjZSB0cmVlIHRvIGJlIHRyYW5zZm9ybWVkLCAqbm90KiB0aGUg DQogKiBzdHlsZXNoZWV0IHRyZWUpLiAgSW4gDQogKiB0aGlzIGNhc2UsIGEgVHJhbnNmb3JtIG9i amVjdCBpcyBjcmVhdGVkLCBzZXRSZXN1bHRUYXJnZXQgaXMgY2FsbGVkLCANCiAqIGFuZCB0aGUg VHJhbnNmb3JtIG9iamVjdCBpcyB0aGVuIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byBhbnkgZnVu Y3Rpb24NCiAqIHRoYXQgdGFrZXMgYSBEb2N1bWVudEhhbmRsZXIgaW50ZXJmYWNlIGFzIGFuIGFy Z3VtZW50IChmb3IgaW5zdGFuY2UsIHRoZSANCiAqIFNBWCBQYXJzZXIucGFyc2UoRG9jdW1lbnRI YW5kbGVyIGhhbmRsZXIpKS4gIFRoZSBUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24NCiAqIG1heSBo YW5kbGUgU0FYMiBldmVudHMgaW4gYWRkaXRpb24sIGJ1dCBpcyBub3QgcmVxdWlyZWQgdG8gZG8g c28uDQogKiANCiAqIDxwYXR0ZXJuPg0KICogPHBhdHRlcm4tbmFtZT5UcmFuc2Zvcm1lcjwvcGF0 dGVybi1uYW1lPg0KICogPHBvdGVudGlhbC1hbHRlcm5hdGUtbmFtZT5TdHlsZXNoZWV0PC9wb3Rl bnRpYWwtYWx0ZXJuYXRlLW5hbWU+DQogKiA8cG90ZW50aWFsLWFsdGVybmF0ZS1uYW1lPlN0eWxl c2hlZXRSb290PC9wb3RlbnRpYWwtYWx0ZXJuYXRlLW5hbWU+DQogKiA8aW50ZW50PkFuIG9iamVj dCB0aGF0IHJlcHJlc2VudHMgdGhlIFhTTFQgc291cmNlIHRoYXQgaXMgdGhyZWFkLXNhZmUNCiAq IHBlci1pbnN0YW5jZSBydW5uaW5nIGNvbmN1cmVudGx5IG92ZXIgbXVsdGlwbGUgdGhyZWFkcy48 L2ludGVudD4NCiAqIDxyZXNwb25zaWJpbGl0aWVzPlByb2Nlc3NlcyBhIHNvdXJjZSB0cmVlIHRv IGEgcmVzdWx0DQogKiB0cmVlLjwvcmVzcG9uc2liaWxpdGllcz4NCiAqIDx0aHJlYWQtc2FmZXR5 PlRocmVhZHNhZmUgY29uY3VycmVudGx5IG92ZXIgbXVsdGlwbGUgdGhyZWFkcyBvbmNlDQogKiBj b25zdHJ1Y3Rpb24gaXMgY29tcGxldGUuPC90aHJlYWQtc2FmZXR5Pg0KICogPC9wYXR0ZXJuPg0K ICogDQogKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQNCiAqIEBzZWUgaHR0cDovL3d3 dy53My5vcmcvVFIveHBhdGgNCiAqLw0KcHVibGljIGludGVyZmFjZSBUcmFuc2Zvcm0gZXh0ZW5k cyBvcmcueG1sLnNheC5Eb2N1bWVudEhhbmRsZXINCnsNCiAgLyoqDQogICAqIFRyYW5zZm9ybSB0 aGUgc291cmNlIHRyZWUgdG8gdGhlIG91dHB1dCBpbiB0aGUgZ2l2ZW4gDQogICAqIHJlc3VsdCB0 cmVlIHRhcmdldC4NCiAgICogQHBhcmFtIGlucHV0U291cmNlICBUaGUgaW5wdXQgc291cmNlIHRy ZWUuDQogICAqIEBwYXJhbSBvdXRwdXRUYXJnZXQgVGhlIG91dHB1dCBzb3VyY2UgdHJlZS4NCiAg ICogQHBhcmFtIHByb2Nlc3NvciBUaGUgcHJvY2Vzc29yIHRvIGJlIHVzZWQsIHdoaWNoIG1heSBh bHNvIA0KICAgKiAgIGhvbGQgcGFyYW1ldGVyIGluZm9ybWF0aW9uLiAgTWF5IGJlIG51bGwsIGlu IHdoaWNoIGNhc2UgDQogICAqICAgdGhlIHRyYW5zZm9ybSBtZXRob2Qgd2lsbCBjcmVhdGUgaXQn cyBvd24gZXhlYyBjb250ZXh0Lg0KICAgKiBAcGFyYW0gb3V0cHV0UHJvcGVydGllcyBBbiBvdXRw dXQgcHJvcGVydGllcyBvYmplY3QgdGhhdCANCiAgICogICB3aWxsIG92ZXJyaWRlIHRoZSBzdHls ZXNoZWV0IHByb3BlcnRpZXMuDQogICAqIEBleGNlcHRpb24gWFNMUHJvY2Vzc29yRXhjZXB0aW9u IHRocm93biBpZiBwcm9jZXNzb3IgZGVjaWRlcyANCiAgICogdGhlIGVycm9yIGNvbmRpdGlvbiBp cyBzZXZlcmUgZW5vdWdoIHRvIGhhbHQgcHJvY2Vzc2luZy4NCiAgICovDQogIHB1YmxpYyB2b2lk IHByb2Nlc3MoIFhTTFRJbnB1dFNvdXJjZSB4bWxTb3VyY2UsIA0KICAgICAgICAgICAgICAgICAg ICAgICBYU0xUUmVzdWx0VGFyZ2V0IG91dHB1dFRhcmdldCwNCiAgICAgICAgICAgICAgICAgICAg ICAgWFNMVEV4ZWNDb250ZXh0IHByb2Nlc3NvciwNCiAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0UHJvcGVydGllcyBvdXRwdXRQcm9wZXJ0aWVzKQ0KICAgIHRocm93cyBYU0xURXhjZXB0aW9u Ow0KICANCiAgLyoqDQogICAqIElmIHRoaXMgb2JqZWN0IGlzIHVzZWQgYXMgYSBEb2N1bWVudEhh bmRsZXIsIHRoZSBjYWxsZXIgc2hvdWxkIA0KICAgKiBmaXJzdCBjYWxsIHRoaXMgbWV0aG9kIGlu IG9yZGVyIHRvIGRpcmVjdCB0aGUgcmVzdWx0IHRyZWUgDQogICAqIGhhbmRsZXIuDQogICAqIEBw YXJhbSBvdXRwdXRUYXJnZXQgVGhlIHNwZWNpZmljYXRpb25zIGZvciB0aGUgdGFyZ2V0IG9mIHRo ZSByZXN1bHQgdHJlZS4NCiAgICovDQogIHB1YmxpYyB2b2lkIHNldFJlc3VsdFRhcmdldChYU0xU UmVzdWx0VGFyZ2V0IG91dHB1dFRhcmdldCk7DQoNCiAgLyoqDQogICAqIEdldCB0aGUgcHJvcGVy dGllcyBmb3IgeHNsOm91dHB1dC4gIFRoZSBvYmplY3QgcmV0dXJuZWQgd2lsbCANCiAgICogYmUg YSBjbG9uZSBvZiB0aGUgaW50ZXJuYWwgdmFsdWVzLCBhbmQgdGh1cyBpdCBjYW4gYmUgbXV0YXRl ZCANCiAgICogd2l0aG91dCBtdXRhdGluZyB0aGUgc3R5bGVzaGVldCBpdHNlbGYsIGFuZCB0aGVu IGhhbmRlZCBpbiB0byANCiAgICogdGhlIHByb2Nlc3MgbWV0aG9kLg0KICAgKiBAcmV0dXJuIEEg T3V0cHV0UHJvcGVydGllcyBvYmplY3QgdGhhdCBtYXkgYmUgbXV0YXRlZC4NCiAgICovDQogIHB1 YmxpYyBPdXRwdXRQcm9wZXJ0aWVzIGdldE91dHB1dFByb3BlcnRpZXMoKTsNCiAgDQp9DQo= --0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1 Content-type: application/octet-stream; name="URIResolver.java" Content-Disposition: attachment; filename="URIResolver.java" Content-transfer-encoding: base64 cGFja2FnZSBvcmcueG1sLnhzbHQ7DQoNCmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KDQov KioNCiAqIEFuIGludGVyZmFjZSB0aGF0IGNhbiBiZSBjYWxsZWQgYnkgdGhlIHByb2Nlc3NvciB0 byBmb3IgdHVybmluZyB0aGUNCiAqIFVSSXMgdXNlZCBpbiBkb2N1bWVudCgpIGFuZCB4c2w6aW1w b3J0IGV0YyBpbnRvIGFuIFhTTFRJbnB1dFNvdXJjZS4NCiAqIA0KICogPHBhdHRlcm4+DQogKiA8 cGF0dGVybi1uYW1lPlVSSVJlc29sdmVyPC9wYXR0ZXJuLW5hbWU+DQogKiA8aW50ZW50PkFuIGlu dGVyZmFjZSB0aGF0IGNhbiBiZSBjYWxsZWQgYnkgdGhlIHByb2Nlc3NvciB0byBmb3IgdHVybmlu ZyB0aGUNCiAqIFVSSXMgdXNlZCBpbiBkb2N1bWVudCgpLCB4c2w6aW1wb3J0LCBldGMuIGludG8g YW4gWFNMVElucHV0U291cmNlLjwvaW50ZW50Pg0KICogPHJlc3BvbnNpYmlsaXRpZXM+UmV0dXJu cyBhbiBYU0xUSW5wdXRTb3VyY2UsIGdpdmVuIGENCiAqIFVSSS48L3Jlc3BvbnNpYmlsaXRpZXM+ DQogKiA8dGhyZWFkLXNhZmV0eT5OZWVkcyB0byBiZSB0aHJlYWRzYWZlIGNvbmN1cnJlbnRseSAg b3ZlciBtdWx0aXBsZQ0KICogdGhyZWFkcy48L3RocmVhZC1zYWZldHk+DQogKiA8L3BhdHRlcm4+ DQogKi8NCnB1YmxpYyBpbnRlcmZhY2UgVVJJUmVzb2x2ZXINCnsNCiAgLyoqDQogICAqIFRoaXMg d2lsbCBiZSBjYWxsZWQgYnkgdGhlIFhTTFQgcHJvY2Vzc29yIHdoZW4gaXQgZW5jb3VudGVycyAN CiAgICogYW4geHNsOmluY2x1ZGUsIHhzbDppbXBvcnQsIG9yIGRvY3VtZW50KCkgZnVuY3Rpb24u DQogICAqIA0KICAgKiBAcGFyYW0gdXJpIFZhbHVlIGZyb20gYW4geHNsOmltcG9ydCBvciB4c2w6 aW5jbHVkZSdzIGhyZWYgYXR0cmlidXRlLCANCiAgICogb3IgYSBVUkkgc3BlY2lmaWVkIGluIHRo ZSBkb2N1bWVudCgpIGZ1bmN0aW9uLg0KICAgKiBAcmV0dXJucyBhIFhTTFRJbnB1dFNvdXJjZSB0 aGF0IGNhbiBiZSB1c2VkIHRvIHByb2Nlc3MgdGhlIHJlc291cmNlLg0KICAgKi8NCiAgcHVibGlj IGFic3RyYWN0IFhTTFRJbnB1dFNvdXJjZSByZXNvbHZlVVJJIChTdHJpbmcgdXJpKQ0KICAgIHRo cm93cyBYU0xURXhjZXB0aW9uLCBJT0V4Y2VwdGlvbjsNCn0NCg== --0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1 Content-type: application/octet-stream; name="XSLTException.java" Content-Disposition: attachment; filename="XSLTException.java" Content-transfer-encoding: base64 cGFja2FnZSBvcmcueG1sLnhzbHQ7DQoNCmltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247 DQoNCi8qKg0KICogVGhpcyBzaW1wbHkgc3ViY2xhc3NlcyB0aGUgU0FYRXhjZXB0aW9uIGZvciB0 aGUgcHVycG9zZXMgDQogKiBvZiBiZWluZyBhYmxlIHRvIGJlIGNhdWdodCBpbiBhIGNhdGNoIGNs YXVzZS4NCiAqIA0KICogPHBhdHRlcm4+DQogKiA8cGF0dGVybi1uYW1lPlhTTFRFeGNlcHRpb248 L3BhdHRlcm4tbmFtZT4NCiAqIDxpbnRlbnQ+TmVlZCBYU0xUIHNwZWNpZmljIGV4Y2VwdGlvbiB0 aGF0IGNhbiBiZSBjYXVnaHQgYnkgYSBjYXRjaA0KICogY2xhdXNlLjwvaW50ZW50Pg0KICogPHJl c3BvbnNpYmlsaXRpZXM+U2FtZSBhcyBmb3IgU0FYRXhjZXB0aW9uLjwvcmVzcG9uc2liaWxpdGll cz4NCiAqIDx0aHJlYWQtc2FmZXR5Pkluc3RhbmNlIHBlciB0aHJlYWQuPC90aHJlYWQtc2FmZXR5 Pg0KICogPC9wYXR0ZXJuPg0KICovDQpwdWJsaWMgY2xhc3MgWFNMVEV4Y2VwdGlvbiBleHRlbmRz IFNBWEV4Y2VwdGlvbg0Kew0KICAvKioNCiAgICogQ3JlYXRlIGEgbmV3IFhTTFRFeGNlcHRpb24u DQogICAqDQogICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBlcnJvciBvciB3YXJuaW5nIG1lc3NhZ2Uu DQogICAqIEBzZWUgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgWFNM VEV4Y2VwdGlvbiAoU3RyaW5nIG1lc3NhZ2UpIA0KICB7DQogICAgc3VwZXIobWVzc2FnZSk7DQog IH0NCg0KICAvKioNCiAgICogQ3JlYXRlIGEgbmV3IFhTTFRFeGNlcHRpb24gd3JhcHBpbmcgYW4g ZXhpc3RpbmcgZXhjZXB0aW9uLg0KICAgKg0KICAgKiBAcGFyYW0gZSBUaGUgZXhjZXB0aW9uIHRv IGJlIHdyYXBwZWQgaW4gYSBTQVhFeGNlcHRpb24uDQogICAqIEBzZWUgb3JnLnhtbC5zYXguU0FY RXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgWFNMVEV4Y2VwdGlvbiAoRXhjZXB0aW9uIGUpDQog IHsNCiAgICBzdXBlcihlKTsNCiAgfQ0KDQogIC8qKg0KICAgKiBDcmVhdGUgYSBuZXcgWFNMVEV4 Y2VwdGlvbiBmcm9tIGFuIGV4aXN0aW5nIGV4Y2VwdGlvbi4NCiAgICoNCiAgICogQHBhcmFtIG1l c3NhZ2UgVGhlIGRldGFpbCBtZXNzYWdlLg0KICAgKiBAcGFyYW0gZSBUaGUgZXhjZXB0aW9uIHRv IGJlIHdyYXBwZWQgaW4gYSBTQVhFeGNlcHRpb24uDQogICAqIEBzZWUgb3JnLnhtbC5zYXguU0FY RXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgWFNMVEV4Y2VwdGlvbiAoU3RyaW5nIG1lc3NhZ2Us IEV4Y2VwdGlvbiBlKQ0KICB7DQogICAgc3VwZXIobWVzc2FnZSwgZSk7DQogIH0NCn0NCg== --0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1 Content-type: application/octet-stream; name="XSLTExecContext.java" Content-Disposition: attachment; filename="XSLTExecContext.java" Content-transfer-encoding: base64 cGFja2FnZSBvcmcueG1sLnhzbHQ7DQoNCmltcG9ydCBvcmcueG1sLnNheC5QYXJzZXI7DQoNCi8q Kg0KICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBvYmplY3QgaXMgaW4gY2hhcmdlIG9mIGNy ZWF0aW5nIA0KICogYSBUcmFuc2Zvcm0gb2JqZWN0LCBvZiBzZXR0aW5nIHVwIHBhcmFtZXRlcnMg Zm9yIHRoZSB0cmFuc2Zvcm0sIA0KICogY29vcmRpbmF0aW5nIHdpdGggdGhlIFhNTCBwYXJzZXIs IGFuZCBob2xkaW5nIGFueSBydW50aW1lIHN0YXRlIA0KICogaW5mb3JtYXRpb24uICBUaGUgWFNM VEV4ZWNDb250ZXh0IGlzIG9ubHkgdGhyZWFkc2FmZSBvbmUgaW5zdGFuY2UgDQogKiBwZXIgdGhy ZWFkLCBpLmUuIHRoZSBpbnN0YW5jZSBjYW4gbm90IGJlIHNoYXJlZCBjb25jdXJlbnRseSB3aXRo DQogKiBtdWx0aXBsZSB0aHJlYWRzLiAgRm9yIHRoaXMgcmVhc29uLCBhbiBYU0xURXhlY0NvbnRl eHQgb2JqZWN0IHNob3VsZA0KICogYmUgZmFpcmx5IGNoZWFwIHRvIGNyZWF0ZS4NCiAqIA0KICog QW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBtdXN0IGFsc28gYmUgYWJs ZSANCiAqIHRvIGFjdCBhcyBhIFNBWCBEb2N1bWVudEhhbmRsZXIsIG1lYW5pbmcgaXQgd2lsbCBo YW5kbGUgZXZlbnRzIA0KICogZnJvbSBhIFNBWCBwYXJzZSBvciBzaW1pbGFyIGV2ZW50IHByb2R1 Y2VyIGFzIHRoZSAqc3R5bGVzaGVldCogdHJlZQ0KICogKG1lYW5pbmcsIGluIFhTTFQgdGVybXMs IHRoZSB0cmVlIHRoYXQgcmVwcmVzZW50cyB0aGUgaW5wdXQgWFNMVCkuICBJbiANCiAqIHRoaXMg Y2FzZSwgYSBYU0xURXhlY0NvbnRleHQgb2JqZWN0IGlzIGNyZWF0ZWQsIA0KICogdGhlIFhTTFRF eGVjQ29udGV4dCBvYmplY3QgaXMgdGhlbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gYW55IGZ1 bmN0aW9uDQogKiB0aGF0IHRha2VzIGEgRG9jdW1lbnRIYW5kbGVyIGludGVyZmFjZSBhcyBhbiBh cmd1bWVudCAoZm9yIGluc3RhbmNlLCB0aGUgDQogKiBTQVggUGFyc2VyLnBhcnNlKERvY3VtZW50 SGFuZGxlciBoYW5kbGVyKSksIGFuZCB0aGVuIGdldFRyYW5zZm9ybSBpcw0KICogY2FsbGVkIHRv IGdldCB0aGUgcmVzdWx0cyBvZiB0aGUgdHJhbnNmb3JtLiAgVGhlIFhTTFRFeGVjQ29udGV4dCBp bXBsZW1lbnRhdGlvbg0KICogbWF5IGhhbmRsZSBTQVgyIGV2ZW50cyBpbiBhZGRpdGlvbiwgYnV0 IGlzIG5vdCByZXF1aXJlZCB0byBkbyBzby4NCiAqIA0KICogSXQgc2hvdWxkIGJlIG5vdGVkIHRo YXQgd2hpbGUgdGhlIGludGVyZmFjZXMgdXNlIFNBWCB2ZXJzaW9uIDEsIA0KICogYW5kIERPTSB2 ZXJzaW9uIDEsIHRoaXMgc2hvdWxkIG5vdCBwcmV2ZW50IHRoZSBpbXBsZW1lbnRpbmcgcHJvY2Vz c29yIA0KICogZnJvbSB0YWtpbmcgYWR2YW50YWdlIG9mIFNBWDIgYW5kIERPTTIgYnkgcXVlcnlp bmcgZm9yIHRoZXNlIGludGVyZmFjZXMgZnJvbSANCiAqIHRoZSBwYXNzZWQgdmVyc2lvbiAxIGFy Z3VtZW50cy4NCiAqIA0KICogPHBhdHRlcm4+DQogKiA8cGF0dGVybi1uYW1lPlhTTFRFeGVjQ29u dGV4dDwvcGF0dGVybi1uYW1lPg0KICogPHBvdGVudGlhbC1hbHRlcm5hdGUtbmFtZT5YU0xUUHJv Y2Vzc29yPC9wb3RlbnRpYWwtYWx0ZXJuYXRlLW5hbWU+DQogKiA8cG90ZW50aWFsLWFsdGVybmF0 ZS1uYW1lPkV4ZWNDb250ZXh0PC9wb3RlbnRpYWwtYWx0ZXJuYXRlLW5hbWU+DQogKiA8aW50ZW50 PlNlcnZlIGFzIHNlc3Npb24gc3BlY2lmaWMgY29vcmRpbmF0aW9uIGZvciBYU0xUDQogKiBwcm9j ZXNzaW5nLjwvaW50ZW50Pg0KICogPHJlc3BvbnNpYmlsaXRpZXM+UHJvY2VzcyBYU0xUIGlucHV0 IGludG8gYSBUcmFuc2Zvcm0gT2JqZWN0LCBoYW5kbGUNCiAqIHNlc3Npb24tc3BlY2lmaWMgZmVh dHVyZXMsIHN1Y2ggYXMgc2V0UGFyYW0uPC9yZXNwb25zaWJpbGl0aWVzPg0KICogPHRocmVhZC1z YWZldHk+T25lIGluc3RhbmNlIHBlciB0aHJlYWQuPC90aHJlYWQtc2FmZXR5Pg0KICogPG5vdGU+ VGhlcmUgaXMgYSBwcm9ibGVtIG9mIHRoaXMgcGF0dGVybiByZWFsbHkgZG9pbmcgdGhyZWUgdGhp bmdzOiAxKQ0KICogY3JlYXRpbmcgYSBUcmFuc2Zvcm0gb2JqZWN0IHZpYSBhbiBpbnB1dCBzcGVj aWZpY2F0aW9uLCAyKSBjcmVhdGluZyBhDQogKiBUcmFuc2Zvcm0gb2JqZWN0IHZpYSBTQVggZXZl bnRzLCBhbmQgMykgaGFuZGxpbmcgc2Vzc2lvbi1zcGVjaWZpYw0KICogcHJvcGVydGllcy4gIEl0 IGNvdWxkIGJlIGJyb2tlbiB1cCBpbnRvIHR3byBvciB0aHJlZSBvYmplY3RzLCBhbHRob3VnaCBt eQ0KICogY3VycmVudCB0aGlua2luZyBpcyB0aGF0IHRoaXMgd291bGQgY29tcGxpY2F0ZSB0aGlu Z3MuPC9ub3RlPg0KICogPC9wYXR0ZXJuPg0KICogDQogKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn L1RSL3hzbHQNCiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgNCiAqLw0KcHVibGlj IGludGVyZmFjZSBYU0xURXhlY0NvbnRleHQgZXh0ZW5kcyBvcmcueG1sLnNheC5Eb2N1bWVudEhh bmRsZXINCnsgICAgDQogIC8vPT09PT09PSBTVFlMRVNIRUVUIENSRUFUSU9OIE1FVEhPRFMgPT09 PT09PQ0KDQogIC8qKg0KICAgKiBDcmVhdGUgYSBzdHlsZXNoZWV0IG9iamVjdCBmcm9tIHRoZSBz b3VyY2UuDQogICAqIA0KICAgKiBAcGFyYW0gc291cmNlIEFuIG9iamVjdCB0aGF0IGhvbGRzIGEg VVJMLCBpbnB1dCBzdHJlYW0sIGV0Yy4NCiAgICogQHNlZSBvcmcuYXBhY2hlLnhzbHQuWFNMVElu cHV0U291cmNlDQogICAqLw0KICBUcmFuc2Zvcm0gY3JlYXRlVHJhbnNmb3JtKFhTTFRJbnB1dFNv dXJjZSBzb3VyY2UpIA0KICAgIHRocm93cyBYU0xURXhjZXB0aW9uOw0KICANCiAgLyoqDQogICAq IFdoZW4gdGhpcyBvYmplY3QgaXMgdXNlZCBhcyBhIGRvY3VtZW50IGhhbmRsZXIsIGl0IHdpbGwg DQogICAqIGNyZWF0ZSBhIFRyYW5zZm9ybSBvYmplY3QsIHdoaWNoIHRoZSBjYWxsZXIgY2FuIGdl dCBvbmNlIA0KICAgKiB0aGUgU0FYIGV2ZW50cyBoYXZlIGJlZW4gY29tcGxldGVkLg0KICAgKi8N CiAgVHJhbnNmb3JtIGdldFRyYW5zZm9ybSgpIA0KICAgIHRocm93cyBYU0xURXhjZXB0aW9uOw0K ICANCiAgLy89PT09PT09IFNPVVJDRVRSRUUgQ1JFQVRJT04gTUVUSE9EUyA9PT09PT09DQogIA0K ICAvKioNCiAgICogQ3JlYXRlIGEgU291cmNlVHJlZSBvYmplY3QgZnJvbSB0aGUgc291cmNlLg0K ICAgKiANCiAgICogTm90ZTogVGhpcyBvYmplY3QgZG9lcyBub3QgcHJvdmlkZSBhIGdldFNvdXJj ZVRyZWUgbWV0aG9kIA0KICAgKiBsaWtlIGl0IGRvZXMgZm9yIHRoZSBUcmFuc2Zvcm0gb2JqZWN0 LCBmb3IgdGhlIG9idmlvdXMgDQogICAqIHJlYXNvbiB0aGF0IHRoZSBEb2N1bWVudEhhbmRsZXIg aW50ZXJmYWNlIGlzIGFscmVhZHkgDQogICAqIGJlaW5nIHVzZWQgZm9yIHRoZSBUcmFuZm9ybSBv YmplY3QuICBJJ20gZ29pbmcgdG8gYWNjZXB0IHRoaXMgDQogICAqIGFzIGEgbGltaXRhdGlvbiBm b3Igbm93Lg0KICAgKiANCiAgICogQHBhcmFtIHNvdXJjZSBBbiBvYmplY3QgdGhhdCBob2xkcyBh IFVSTCwgaW5wdXQgc3RyZWFtLCBldGMuDQogICAqIEBzZWUgb3JnLmFwYWNoZS54c2x0LlhTTFRJ bnB1dFNvdXJjZQ0KICAgKi8NCiAgU291cmNlVHJlZSBjcmVhdGVTb3VyY2VUcmVlKFhTTFRJbnB1 dFNvdXJjZSBzb3VyY2UpIA0KICAgIHRocm93cyBYU0xURXhjZXB0aW9uOw0KICANCiAgLy89PT09 PT09IFNFU1NJT04gUFJPUEVSVFkgTUVUSE9EUyA9PT09PT09DQogIA0KICAvKioNCiAgICogU2V0 IGEgcGFyYW1ldGVyIGZvciB0aGUgc3R5bGVzaGVldC4NCiAgICogQHBhcmFtIG5hbWUgVGhlIG5h bWUgb2YgdGhlIHBhcmFtZXRlci4NCiAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNl IG9mIHRoZSBwYXJhbWV0ZXIuDQogICAqIEB2YWx1ZSBUaGUgdmFsdWUgb2JqZWN0LiAgVGhpcyBj YW4gYmUgYW55IHZhbGlkIEphdmEgb2JqZWN0IA0KICAgKiAtLSBpdCdzIHVwIHRvIHRoZSBwcm9j ZXNzb3IgdG8gcHJvdmlkZSB0aGUgcHJvcGVyIA0KICAgKiBjb2Vyc2lvbiB0byB0aGUgb2JqZWN0 LCBvciBzaW1wbHkgcGFzcyBpdCBvbiBmb3IgdXNlIA0KICAgKiBpbiBleHRlbnNpb25zLg0KICAg Ki8NCiAgdm9pZCBzZXRQYXJhbWV0ZXIoU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIE9i amVjdCB2YWx1ZSk7DQoNCiAgLyoqDQogICAqIFNldCBhbiBleHByZXNzaW9uIGZvciB0aGUgc3R5 bGVzaGVldCB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIA0KICAgKiBhbmQgYm91bmQgdG8gdGhlIGdp dmVuIHBhcmFtZXRlci4NCiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRl ci4NCiAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYXJhbWV0ZXIu DQogICAqIEBleHByZXNzaW9uIEEgdmFsaWQgWFNMVC9YUGF0aCBleHByZXNzaW9uIHRoYXQgd2ls bCBiZSBldmFsdWF0ZWQgaW4gDQogICAqIHRoZSBjb250ZXh0IG9mIHRoZSByb290IG9mIHRoZSBz b3VyY2UgdHJlZS4NCiAgICovDQogIHZvaWQgc2V0UGFyYW1ldGVyRXhwcmVzc2lvbihTdHJpbmcg bmFtZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGV4cHJlc3Npb24pOw0KICANCiAgLyoqDQog ICAqIFJlc2V0IHRoZSBwYXJhbWV0ZXJzIHRvIGEgbnVsbCBsaXN0LiAgDQogICAqLw0KICB2b2lk IHJlc2V0UGFyYW1ldGVycygpOw0KICANCiAgLyoqDQogICAqIFNldCBhbiBvYmplY3QgdGhhdCB3 aWxsIGJlIHVzZWQgdG8gcmVzb2x2ZSBVUklzIHVzZWQgaW4gDQogICAqIGRvY3VtZW50KCksIHhz bDppbXBvcnQsIGV0Yy4NCiAgICogQHBhcmFtIHJlc29sdmVyIEFuIG9iamVjdCB0aGF0IGltcGxl bWVudHMgdGhlIFVSSVJlc29sdmVyIGludGVyZmFjZSwgDQogICAqIG9yIG51bGwuDQogICAqLw0K ICB2b2lkIHNldFVSSVJlc29sdmVyKFVSSVJlc29sdmVyIHJlc29sdmVyKTsNCiAgDQogIC8vPT09 PT09PSBDT05GSUdVUkFUSU9OIE1FVEhPRFMgPT09PT09PQ0KDQogIC8qKg0KICAgKiBTZXQgdGhl IHN0YXRlIG9mIGEgZmVhdHVyZS4NCiAgICovDQogIHB1YmxpYyB2b2lkIHNldEZlYXR1cmUgKFN0 cmluZyBmZWF0dXJlSWQsIGJvb2xlYW4gc3RhdGUpDQogICAgdGhyb3dzIFhTTFRFeGNlcHRpb247 DQoNCiAgLyoqDQogICAqIEdldCB0aGUgc3RhdGUgb2YgYSBmZWF0dXJlLg0KICAgKi8NCiAgcHVi bGljIGJvb2xlYW4gZ2V0RmVhdHVyZSAoU3RyaW5nIGZlYXR1cmVJZCkNCiAgICB0aHJvd3MgWFNM VEV4Y2VwdGlvbjsNCiAgDQogIC8qKg0KICAgKiBTZXQgdGhlIHN0YXRlIG9mIGEgcHJvcGVydHku DQogICAqLw0KICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eSAoU3RyaW5nIHByb3BlcnR5SWQsIE9i amVjdCB2YWx1ZSkNCiAgICB0aHJvd3MgWFNMVEV4Y2VwdGlvbjsNCg0KDQogIC8qKg0KICAgKiBH ZXQgdGhlIHN0YXRlIG9mIGEgcHJvcGVydHkuDQogICAqLw0KICBwdWJsaWMgT2JqZWN0IGdldFBy b3BlcnR5IChTdHJpbmcgcHJvcGVydHlJZCkNCiAgICB0aHJvd3MgWFNMVEV4Y2VwdGlvbjsNCg0K fQ0K --0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1 Content-type: application/octet-stream; name="XSLTInputSource.java" Content-Disposition: attachment; filename="XSLTInputSource.java" Content-transfer-encoding: base64 cGFja2FnZSBvcmcueG1sLnhzbHQ7DQoNCmltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsN CmltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KaW1wb3J0IGphdmEuaW8uUmVhZGVyOw0KaW1w b3J0IG9yZy53M2MuZG9tLk5vZGU7DQoNCi8qKg0KICogUmVwcmVzZW50cyBhbiBYTUwgc291cmNl IGRvY3VtZW50IG9yIFhTTCBzdHlsZXNoZWV0Lg0KICogPHA+VXNlIFhTTFRJbnB1dFNvdXJjZSBv YmplY3RzIHRvIHByb3ZpZGUgaW5wdXQgdG8gdGhlIFhTTFRQcm9jZXNzb3IgcHJvY2VzcygpIG1l dGhvZA0KICogIGZvciBhIHRyYW5zZm9ybWF0aW9uLiBUaGlzIGNsYXNzIGV4dGVuZHMgdGhlIFNB WCBpbnB1dCBzb3VyY2UgdG8gaGFuZGxlDQogKiBET00gbm9kZXMgYXMgaW5wdXQgaW4gYWRkaXRp b24gdG8gdGhlIG90aGVyIGlucHV0IGZvcm1zLg0KICogQHNlZSBYU0xUUHJvY2Vzc29yI3Byb2Nl c3MoWFNMVElucHV0U291cmNlLCBYU0xUSW5wdXRTb3VyY2UsIFhTTFRSZXN1bHRUYXJnZXQpDQog KiANCiAqIDxwYXR0ZXJuPg0KICogPHBhdHRlcm4tbmFtZT5YU0xUSW5wdXRTb3VyY2U8L3BhdHRl cm4tbmFtZT4NCiAqIDxpbnRlbnQ+U2VydmUgYXMgYSBzaW5nbGUgdmVuZG9yLW5ldXRyYWwgb2Jq ZWN0IGZvciBtdWx0aXBsZSB0eXBlcyBvZg0KICogaW5wdXQsIHNvIHRoZXJlIGNhbiBiZSBzaW1w bGUgcHJvY2VzcyBtZXRob2Qgc2lnbmF0dXJlcy48L2ludGVudD4NCiAqIDxyZXNwb25zaWJpbGl0 aWVzPkFjdCBhcyBzaW1wbGUgZGF0YSBob2xkZXIgZm9yIFN5c3RlbSBJRHMsIERPTSBub2RlcywN CiAqIHN0cmVhbXMsIGV0Yy48L3Jlc3BvbnNpYmlsaXRpZXM+DQogKiA8dGhyZWFkLXNhZmV0eT5U aHJlYWRzYWZlIGNvbmN1cnJlbnRseSBvdmVyIG11bHRpcGxlIHRocmVhZHMgZm9yIHJlYWQtb25s eSwNCiAqIG11c3QgYmUgc3luY2hyb25pemVkIGZvciBlZGl0LjwvdGhyZWFkLXNhZmV0eT4NCiAq IDwvcGF0dGVybj4NCiAqLw0KcHVibGljIGNsYXNzIFhTTFRJbnB1dFNvdXJjZSBleHRlbmRzIElu cHV0U291cmNlDQp7DQogIC8qKg0KICAgICogWmVyby1hcmd1bWVudCBkZWZhdWx0IGNvbnN0cnVj dG9yLg0KICAgICovDQogIHB1YmxpYyBYU0xUSW5wdXRTb3VyY2UgKCkNCiAgew0KICB9DQoNCiAg LyoqDQogICAgKiBDcmVhdGUgYSBuZXcgaW5wdXQgc291cmNlIHdpdGggYSBzeXN0ZW0gaWRlbnRp Zmllci4NCiAgICAqDQogICAgKiA8cD5BcHBsaWNhdGlvbnMgbWF5IHVzZSBzZXRQdWJsaWNJZCB0 byBpbmNsdWRlIGEgDQogICAgKiBwdWJsaWMgaWRlbnRpZmllciBhcyB3ZWxsLCBvciBzZXRFbmNv ZGluZyB0byBzcGVjaWZ5DQogICAgKiB0aGUgY2hhcmFjdGVyIGVuY29kaW5nLCBpZiBrbm93bi48 L3A+DQogICAgKg0KICAgICogPHA+SWYgdGhlIHN5c3RlbSBpZGVudGlmaWVyIGlzIGEgVVJMLCBp dCBtdXN0IGJlIGZ1bGwgcmVzb2x2ZWQuPC9wPg0KICAgICoNCiAgICAqIEBwYXJhbSBzeXN0ZW1J ZCBUaGUgc3lzdGVtIGlkZW50aWZpZXIgKFVSSSkuDQogICAgKi8NCiAgcHVibGljIFhTTFRJbnB1 dFNvdXJjZSAoU3RyaW5nIHN5c3RlbUlkKQ0KICB7DQogICAgc2V0U3lzdGVtSWQoc3lzdGVtSWQp Ow0KICB9DQoNCg0KICAvKioNCiAgICAqIENyZWF0ZSBhIG5ldyBpbnB1dCBzb3VyY2Ugd2l0aCBh IGJ5dGUgc3RyZWFtLg0KICAgICoNCiAgICAqIDxwPkFwcGxpY2F0aW9uIHdyaXRlcnMgbWF5IHVz ZSBzZXRTeXN0ZW1JZCB0byBwcm92aWRlIGEgYmFzZSANCiAgICAqIGZvciByZXNvbHZpbmcgcmVs YXRpdmUgVVJJcywgc2V0UHVibGljSWQgdG8gaW5jbHVkZSBhIA0KICAgICogcHVibGljIGlkZW50 aWZpZXIsIGFuZC9vciBzZXRFbmNvZGluZyB0byBzcGVjaWZ5IHRoZSBvYmplY3Qncw0KICAgICog Y2hhcmFjdGVyIGVuY29kaW5nLjwvcD4NCiAgICAqDQogICAgKiBAcGFyYW0gYnl0ZVN0cmVhbSBU aGUgcmF3IGJ5dGUgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIGRvY3VtZW50Lg0KICAgICovDQogIHB1 YmxpYyBYU0xUSW5wdXRTb3VyY2UgKElucHV0U3RyZWFtIGJ5dGVTdHJlYW0pDQogIHsNCiAgICBz ZXRCeXRlU3RyZWFtKGJ5dGVTdHJlYW0pOw0KICB9DQoNCiAgLyoqDQogICAgKiBDcmVhdGUgYSBu ZXcgaW5wdXQgc291cmNlIHdpdGggYSBjaGFyYWN0ZXIgc3RyZWFtLg0KICAgICoNCiAgICAqIDxw PkFwcGxpY2F0aW9uIHdyaXRlcnMgbWF5IHVzZSBzZXRTeXN0ZW1JZCgpIHRvIHByb3ZpZGUgYSBi YXNlIA0KICAgICogZm9yIHJlc29sdmluZyByZWxhdGl2ZSBVUklzLCBhbmQgc2V0UHVibGljSWQg dG8gaW5jbHVkZSBhIA0KICAgICogcHVibGljIGlkZW50aWZpZXIuPC9wPg0KICAgICovDQogIHB1 YmxpYyBYU0xUSW5wdXRTb3VyY2UgKFJlYWRlciBjaGFyYWN0ZXJTdHJlYW0pDQogIHsNCiAgICBz ZXRDaGFyYWN0ZXJTdHJlYW0oY2hhcmFjdGVyU3RyZWFtKTsNCiAgfQ0KICANCiAgLyoqDQogICAg KiBDcmVhdGUgYSBuZXcgaW5wdXQgc291cmNlIHdpdGggYSBET00gbm9kZS4NCiAgICAqDQogICAg KiA8cD5BcHBsaWNhdGlvbiB3cml0ZXJzIG1heSB1c2Ugc2V0U3lzdGVtSWQoKSB0byBwcm92aWRl IGEgYmFzZSANCiAgICAqIGZvciByZXNvbHZpbmcgcmVsYXRpdmUgVVJJcywgYW5kIHNldFB1Ymxp Y0lkIHRvIGluY2x1ZGUgYSANCiAgICAqIHB1YmxpYyBpZGVudGlmaWVyLjwvcD4NCiAgICAqDQog ICAgKiBAcGFyYW0gQW55IERPTSBub2RlLg0KICAgICovDQogIHB1YmxpYyBYU0xUSW5wdXRTb3Vy Y2UgKE5vZGUgbm9kZSkNCiAgew0KICAgIHNldE5vZGUobm9kZSk7DQogIH0NCg0KICAvKioNCiAg ICAqIENyZWF0ZSBhIG5ldyBYU0xUSW5wdXRTb3VyY2Ugc291cmNlIGZyb20gYSBTQVggaW5wdXQg c291cmNlLg0KICAgICovDQogIHB1YmxpYyBYU0xUSW5wdXRTb3VyY2UgKElucHV0U291cmNlIGlz b3VyY2UpDQogIHsNCiAgICB0aGlzLnNldEJ5dGVTdHJlYW0oaXNvdXJjZS5nZXRCeXRlU3RyZWFt KCkpOw0KICAgIHRoaXMuc2V0Q2hhcmFjdGVyU3RyZWFtKGlzb3VyY2UuZ2V0Q2hhcmFjdGVyU3Ry ZWFtKCkpOw0KICAgIHRoaXMuc2V0RW5jb2RpbmcoaXNvdXJjZS5nZXRFbmNvZGluZygpKTsNCiAg ICB0aGlzLnNldFB1YmxpY0lkKGlzb3VyY2UuZ2V0UHVibGljSWQoKSk7DQogICAgdGhpcy5zZXRT eXN0ZW1JZChpc291cmNlLmdldFN5c3RlbUlkKCkpOw0KICB9DQogIA0KICAvKioNCiAgICogU2V0 IHRoZSBwYXJzZXIgdGhhdCB3aWxsIGJlIHVzZWQuICBUaGUgcGFyc2VyIHNob3VsZCBiZSBjYXBh YmxlIA0KICAgKiBvZiBiZWluZyBjbG9uZWQsIG9yLCBpZiBpdCBjYW4gbm90IGJlLCBpdCBzaG91 bGQgdGhyb3cgYSANCiAgICogQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24sIHRoZSBpZGVhIGJl aW5nIHRoYXQgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIA0KICAgKiBmb3IgdGhlIHByb2Nlc3NvciB0 byBjYWxsIGFuIGluc3RhbmNlIG9mIHRoZSBwYXJzZXIgd2hpbGUgaW4gdGhlIA0KICAgKiBtaWRk bGUgb2YgYW5vdGhlciBwYXJzZSAoZm9yIGluc3RhbmNlLCB3aGlsZSBwYXJzaW5nIHRoZSBkb2N1 bWVudCBhbmQNCiAgICogdHJhbnNmb3JtaW5nLCBhIGRvY3VtZW50KCkgZnVuY3Rpb24gaXMgZW5j b3VudGVyZWQpLg0KICAgKiANCiAgICogSWYgdGhpcyBpcyBub3QgY2FsbGVkLCB0aGUgcHJvY2Vz c29yIGlzIGZyZWUgdG8gdXNlIGl0J3Mgb3duLCBkZWZhdWx0LCANCiAgICogcGFyc2VyLiAgQWxs IHByb2Nlc3NvcnMgc2hvdWxkIGhhdmUgaGF2ZSBhIGRlZmF1bHQgcGFyc2VyIHdoaWNoIGl0IA0K ICAgKiB3aWxsIHRyeSBhbmQgdXNlLg0KICAgKiANCiAgICogQHBhcmFtIHNvdXJjZVBhcnNlciBU aGUgcGFyc2VyIHRvIGJlIHVzZWQgZm9yIHRoZSBzb3VyY2UgdHJlZS4NCiAgICovDQogIHZvaWQg c2V0UGFyc2VyKFBhcnNlciBwYXJzZXIpDQogIHsNCiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjsN CiAgfQ0KICANCiAgLyoqDQogICAqIEdldCB0aGUgcGFyc2VyIHRoYXQgd2lsbCBiZSB1c2VkLg0K ICAgKi8NCiAgUGFyc2VyIGdldFBhcnNlcigpDQogIHsNCiAgICByZXR1cm4gdGhpcy5wYXJzZXI7 DQogIH0NCg0KICAvKioNCiAgICAqIFNldCB0aGUgRE9NIG5vZGUgZm9yIHRoaXMgaW5wdXQgc291 cmNlLiAgVGhlIGlucHV0IERPTSBpcyANCiAgICAqIGltbXV0YWJsZS4uLiB0aGUgcHJvY2Vzc29y IG1heSBub3QgbW9kaWZ5IGl0Lg0KICAgICoNCiAgICAqIDxwPkFwcGxpY2F0aW9uIHdyaXRlcnMg bWF5IHVzZSBzZXRTeXN0ZW1JZCgpIHRvIHByb3ZpZGUgYSBiYXNlIA0KICAgICogZm9yIHJlc29s dmluZyByZWxhdGl2ZSBVUklzLCBhbmQgc2V0UHVibGljSWQgdG8gaW5jbHVkZSBhIA0KICAgICog cHVibGljIGlkZW50aWZpZXIuPC9wPg0KICAgICoNCiAgICAqIEBwYXJhbSBBbnkgRE9NIG5vZGUu DQogICAgKi8NCiAgcHVibGljIHZvaWQgc2V0Tm9kZSAoTm9kZSBub2RlKQ0KICB7DQogICAgdGhp cy5ub2RlID0gbm9kZTsNCiAgfQ0KDQogIC8qKg0KICAgICogR2V0IHRoZSBET00gbm9kZSBmb3Ig dGhpcyBpbnB1dCBzb3VyY2UuDQogICAgKg0KICAgICogQHJldHVybiBUaGUgbm9kZSB0aGF0IHRo aXMgaW5wdXQgc291cmNlIGFjdHMgb24uICBNYXkgYmUgbnVsbC4NCiAgICAqLw0KICBwdWJsaWMg Tm9kZSBnZXROb2RlICgpDQogIHsNCiAgICByZXR1cm4gbm9kZTsNCiAgfQ0KDQogIHByaXZhdGUg Tm9kZSBub2RlID0gbnVsbDsNCiAgcHJpdmF0ZSBQYXJzZXIgcGFyc2VyID0gbnVsbDsNCn0NCg== --0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1 Content-type: application/octet-stream; name="OutputProperties.java" Content-Disposition: attachment; filename="OutputProperties.java" Content-transfer-encoding: base64 cGFja2FnZSBvcmcueG1sLnhzbHQ7DQoNCmltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsNCmlt cG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudFR5cGU7DQppbXBvcnQgb3JnLnczYy5kb20uTm9kZTsN Cg0KLy8gWFhYICBEZWxheWVkIHVudGlsIHRoZSBIVE1MIERPTSBpcyBpbnRyb2R1Y2VkIGludG8g dGhlIGNvZGUgYmFzZQ0KLy8gaW1wb3J0IG9yZy53M2MuZG9tLmh0bWwuSFRNTERvY3VtZW50Ow0K DQovKioNCiAqIFNwZWNpZmllcyBhbiBvdXRwdXQgZm9ybWF0IHRvIGNvbnRyb2wgdGhlIHNlcmlh bGl6ZXIuIEJhc2VkIG9uIHRoZQ0KICogWFNMVCBzcGVjaWZpY2F0aW9uIGZvciBvdXRwdXQgZm9y bWF0LCBwbHVzIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4NCiAqIFVzZWQgdG8gc2VsZWN0IHRoZSBz dWl0YWJsZSBzZXJpYWxpemVyIGFuZCBkZXRlcm1pbmUgaG93IHRoZQ0KICogZG9jdW1lbnQgc2hv dWxkIGJlIGZvcm1hdHRlZCBvbiBvdXRwdXQuDQogKiA8cD4NCiAqIFRoZSB0d28gaW50ZXJlc3Rp bmcgY29uc3RydWN0b3JzIGFyZToNCiAqIDx1bD4NCiAqIDxsaT57QGxpbmsgI091dHB1dFByb3Bl cnRpZXMoU3RyaW5nLFN0cmluZyxib29sZWFuKX0gY3JlYXRlcyBhIGZvcm1hdA0KICogIGZvciB0 aGUgc3BlY2lmaWVkIG1ldGhvZCAoWE1MLCBIVE1MLCBldGMpLCBlbmNvZGluZyBhbmQgaW5kZW50 YXRpb24NCiAqIDxsaT57QGxpbmsgI091dHB1dFByb3BlcnRpZXMoRG9jdW1lbnQsU3RyaW5nLGJv b2xlYW4pfSBjcmVhdGVzIGEgZm9ybWF0DQogKiAgY29tcGF0aWJsZSB3aXRoIHRoZSBkb2N1bWVu dCB0eXBlIChYTUwsIEhUTUwpLCBlbmNvZGluZyBhbmQgaW5kZW50YXRpb24NCiAqIDwvdWw+DQog KiANCiAqIE5vdGU6IHRoaXMgY2xhc3Mgd2FzIHBhcnQgb2YgdGhlIFhlcmNlcyBTZXJpYWxpemVy IGNsYXNzZXMuICBJbiB0aGUgaW50ZXJlc3QgDQogKiBvZiBub3QgaGF2aW5nIG5hbWUgY29uZmxp Y3RzLCBJJ3ZlIHJlbmFtZWQgaXQgZnJvbSBPdXRwdXRGb3JtYXQgdG8gDQogKiBPdXRwdXRQcm9w ZXJ0aWVzLiAgSW4gdGhlIGVuZCwgcHJvYmFibHkgYm90aCBwcm9qZWN0cyBzaG91bGQgdXNlIHRo ZSBzYW1lIA0KICogY2xhc3MuDQogKiANCiAqIDxwYXR0ZXJuPg0KICogPHBhdHRlcm4tbmFtZT5P dXRwdXRQcm9wZXJ0aWVzPC9wYXR0ZXJuLW5hbWU+DQogKiA8cG90ZW50aWFsLWFsdGVybmF0ZS1u YW1lPk91dHB1dEZvcm1hdDwvcG90ZW50aWFsLWFsdGVybmF0ZS1uYW1lPg0KICogPGludGVudD5O ZWVkIHRvIGRlbGl2ZXIgeHNsOm91dHB1dCBpbmZvcm1hdGlvbiB0byB0aGUgQVBJLCBzbyB0aGF0 DQogKiBwcm9jZXNzb3ItbmV1dHJhbCByZXN1bHQgdHJlZSBoYW5kbGVycyBjYW4gdXNlIGl0LiAg QWxzbyBuZWVkIHRvIGFsbG93DQogKiBvdXRwdXQgcHJvcGVydGllcyB0byBiZSBnaXZlbiBkZWZh dWx0cyBieSB0aGUgY2FsbGVyIChpcyB0aGlzIHJlYWxseQ0KICogbmVlZGVkPyksIGFuZCB0aGUg Y2FsbGVyIG11c3QgYmUgYWJsZSB0byBvdmVycmlkZSBzdHlsZXNoZWV0DQogKiBzcGVjaWZpY2F0 aW9ucy48L2ludGVudD4NCiAqIDxyZXNwb25zaWJpbGl0aWVzPlNlcnZlIGFzIGEgZGF0YSBvYmpl Y3QgZm9yIGhvbGRpbmcgaW5mb3JtYXRpb24gYWJvdXQNCiAqIHJlc3VsdC10cmVlIHNlcmlhbGl6 YXRpb24uPC9yZXNwb25zaWJpbGl0aWVzPg0KICogPHRocmVhZC1zYWZldHk+VGhyZWFkc2FmZSBj b25jdXJyZW50bHkgb3ZlciBtdWx0aXBsZSB0aHJlYWRzIGZvciByZWFkLW9ubHksDQogKiBtdXN0 IGJlIHN5bmNocm9uaXplZCBmb3IgZWRpdC48L3RocmVhZC1zYWZldHk+DQogKiA8L3BhdHRlcm4+ DQogKiANCiAqIEB2ZXJzaW9uDQogKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzphcmtpbkBleG9m ZmljZS5jb20iPkFzc2FmIEFya2luPC9hPg0KICogICAgICAgICA8YSBocmVmPSJtYWlsdG86dmlz Y29AZXhvZmZpY2UuY29tIj5LZWl0aCBWaXNjbzwvYT4NCiAqIEBzZWUgU2VyaWFsaXplcg0KICov DQpwdWJsaWMgY2xhc3MgT3V0cHV0UHJvcGVydGllcw0Kew0KICAvKioNCiAgICogSG9sZHMgdGhl IG91dHB1dCBtZXRob2Qgc3BlY2lmaWVkIGZvciB0aGlzIGRvY3VtZW50LA0KICAgKiBvciBudWxs IGlmIG5vIG1ldGhvZCB3YXMgc3BlY2lmaWVkLg0KICAgKi8NCiAgcHJpdmF0ZSBTdHJpbmcgX21l dGhvZDsNCg0KDQogIC8qKg0KICAgKiBTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgdGhlIG91dHB1 dCBtZXRob2QuDQogICAqLw0KICBwcml2YXRlIFN0cmluZyBfdmVyc2lvbjsNCg0KDQogIC8qKg0K ICAgKiBUaGUgaW5kZW50YXRpb24gbGV2ZWwsIG9yIHplcm8gaWYgbm8gaW5kZW50YXRpb24NCiAg ICogd2FzIHJlcXVlc3RlZC4NCiAgICovDQogIHByaXZhdGUgaW50IF9pbmRlbnQgPSAwOw0KDQoN CiAgLyoqDQogICAqIFRoZSBlbmNvZGluZyB0byB1c2UsIGlmIGFuIGlucHV0IHN0cmVhbSBpcyB1 c2VkLg0KICAgKiBUaGUgZGVmYXVsdCBpcyBhbHdheXMgVVRGLTguDQogICAqLw0KICBwcml2YXRl IFN0cmluZyBfZW5jb2RpbmcgPSBERUZBVUxUX0VOQ09ESU5HOw0KDQoNCiAgLyoqDQogICAqIFRo ZSBzcGVjaWZpZWQgbWVkaWEgdHlwZSBvciBudWxsLg0KICAgKi8NCiAgcHJpdmF0ZSBTdHJpbmcg X21lZGlhVHlwZTsNCg0KDQogIC8qKg0KICAgKiBUaGUgc3BlY2lmaWVkIGRvY3VtZW50IHR5cGUg c3lzdGVtIGlkZW50aWZpZXIsIG9yIG51bGwuDQogICAqLw0KICBwcml2YXRlIFN0cmluZyBfZG9j dHlwZVN5c3RlbTsNCg0KDQogIC8qKg0KICAgKiBUaGUgc3BlY2lmaWVkIGRvY3VtZW50IHR5cGUg cHVibGljIGlkZW50aWZpZXIsIG9yIG51bGwuDQogICAqLw0KICBwcml2YXRlIFN0cmluZyBfZG9j dHlwZVB1YmxpYzsNCg0KDQogIC8qKg0KICAgKiBUdXJlIGlmIHRoZSBYTUwgZGVjbGFyYXRpb24g c2hvdWxkIGJlIG9tbWl0ZWQ7DQogICAqLw0KICBwcml2YXRlIGJvb2xlYW4gX29taXRYbWxEZWNs YXJhdGlvbiA9IGZhbHNlOw0KDQoNCiAgLyoqDQogICAqIFRydWUgaWYgdGhlIGRvY3VtZW50IHR5 cGUgc2hvdWxkIGJlIG1hcmtlZCBhcyBzdGFuZGFsb25lLg0KICAgKi8NCiAgcHJpdmF0ZSBib29s ZWFuIF9zdGFuZGFsb25lID0gZmFsc2U7DQoNCg0KICAvKioNCiAgICogTGlzdCBvZiBlbGVtZW50 IHRhZyBuYW1lcyB3aG9zZSB0ZXh0IG5vZGUgY2hpbGRyZW4gbXVzdA0KICAgKiBiZSBvdXRwdXQg YXMgQ0RBVEEuDQogICAqLw0KICBwcml2YXRlIFN0cmluZ1tdIF9jZGF0YUVsZW1lbnRzOw0KDQoN CiAgLyoqDQogICAqIExpc3Qgb2YgZWxlbWVudCB0YWcgbmFtZXMgd2hvc2UgdGV4dCBub2RlIGNo aWxkcmVuIG11c3QNCiAgICogYmUgb3V0cHV0IHVuZXNjYXBlZC4NCiAgICovDQogIHByaXZhdGUg U3RyaW5nW10gX25vbkVzY2FwaW5nRWxlbWVudHM7DQoNCg0KICAvKioNCiAgICogVGhlIHNlbGVj dGVkIGxpbmUgc2VwYXJhdG9yLg0KICAgKi8NCiAgcHJpdmF0ZSBTdHJpbmcgX2xpbmVTZXBhcmF0 b3IgPSBMSU5FX1NFUEFSQVRPUl9XRUI7DQoNCg0KICAvKioNCiAgICogVGhlIGxpbmUgd2lkdGgg YXQgd2hpY2ggdG8gd3JhcCBsb25nIGxpbmVzIHdoZW4gaW5kZW50aW5nLg0KICAgKi8NCiAgcHJp dmF0ZSBpbnQgX2xpbmVXaWR0aCA9IERFRkFVTFRfTElORV9XSURUSDsNCg0KDQogIC8qKg0KICAg KiBUcnVlIGlmIHNwYWNlcyBzaG91bGQgYmUgcHJlc2VydmVkIGluIGVsZW1lbnRzIHRoYXQgZG8g bm90DQogICAqIHNwZWNpZnkgb3RoZXJ3aXNlLCBvciBzcGVjaWZ5IHRoZSBkZWZhdWx0IGJlaGF2 aW9yLg0KICAgKi8NCiAgcHJpdmF0ZSBib29sZWFuIF9wcmVzZXJ2ZSA9IGZhbHNlOw0KDQoNCiAg LyoqDQogICAqIElmIGluZGVudGF0aW9uIGlzIHR1cm5lZCBvbiwgdGhlIGRlZmF1bHQgaWRlbnRh dGlvbg0KICAgKiBsZXZlbCBpcyA0Lg0KICAgKg0KICAgKiBAc2VlICNzZXRJbmRlbnRpbmcoYm9v bGVhbikNCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfSU5ERU5UID0g NDsNCg0KDQogIC8qKg0KICAgKiBUaGUgZGVmYXVsdCBlbmNvZGluZyBmb3IgV2ViIGRvY3VtZW50 cyBpdCBVVEYtOC4NCiAgICoNCiAgICogQHNlZSAjZ2V0RW5jb2RpbmcoKQ0KICAgKi8NCiAgcHVi bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9FTkNPRElORyA9ICJVVEYtOCI7DQoNCg0K ICAvKioNCiAgICogVGhlIGRlZmF1bHQgbGluZSB3aWR0aCBhdCB3aGljaCB0byBicmVhayBsb25n IGxpbmVzDQogICAqIHdoZW4gaWRlbnRpbmcuIFRoaXMgaXMgc2V0IHRvIDcyLg0KICAgKi8NCiAg cHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9MSU5FX1dJRFRIID0gNzI7DQoNCg0KICAv KioNCiAgICogVGhlIG91dHB1dCBtZXRob2QgZm9yIFhNTCBkb2N1bWVudHMuDQogICAqLw0KICBw dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRIT0RfWE1MID0gInhtbCI7DQoNCg0KICAvKioN CiAgICogVGhlIG91dHB1dCBtZXRob2QgZm9yIEhUTUwgZG9jdW1lbnRzLg0KICAgKi8NCiAgcHVi bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUSE9EX0hUTUwgPSAiaHRtbCI7DQoNCg0KICAvKioN CiAgICogVGhlIG91dHB1dCBtZXRob2QgZm9yIEhUTUwgZG9jdW1lbnRzIGFzIFhIVE1MLg0KICAg Ki8NCiAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUSE9EX1hIVE1MID0gInhodG1sIjsN Cg0KDQogIC8qKg0KICAgKiBUaGUgb3V0cHV0IG1ldGhvZCBmb3IgdGV4dCBkb2N1bWVudHMuDQog ICAqLw0KICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRIT0RfVEVYVCA9ICJ0ZXh0IjsN Cg0KDQogIC8qKg0KICAgKiBUaGUgb3V0cHV0IG1ldGhvZCBmb3IgRk8gZG9jdW1lbnRzIGFzIFBE Ri4NCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEhPRF9GT1AgPSAiZm9w IjsNCg0KDQogIC8qKg0KICAgKiBMaW5lIHNlcGFyYXRvciBmb3IgVW5peCBzeXN0ZW1zICg8dHQ+ XG48L3R0PikuDQogICAqLw0KICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5FX1NFUEFS QVRPUl9VTklYID0gIlxuIjsNCg0KDQogIC8qKg0KICAgKiBMaW5lIHNlcGFyYXRvciBmb3IgV2lu ZG93cyBzeXN0ZW1zICg8dHQ+XHJcbjwvdHQ+KS4NCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZmlu YWwgU3RyaW5nIExJTkVfU0VQQVJBVE9SX1dJTiA9ICJcclxuIjsNCg0KDQogIC8qKg0KICAgKiBM aW5lIHNlcGFyYXRvciBmb3IgTWFjaW50b3NoIHN5c3RlbXMgKDx0dD5ccjwvdHQ+KS4NCiAgICov DQogIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExJTkVfU0VQQVJBVE9SX01BQyA9ICJcciI7 DQoNCg0KICAvKioNCiAgICogTGluZSBzZXBhcmF0b3IgZm9yIHRoZSBXZWIgKDx0dD5cbjwvdHQ+ KS4NCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExJTkVfU0VQQVJBVE9SX1dF QiA9ICJcbiI7DQoNCg0KICAvKioNCiAgICogUHVibGljIGlkZW50aWZpZXIgZm9yIEhUTUwgZG9j dW1lbnQgdHlwZS4NCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPQ1RZUEVf SFRNTF9QVUJMSUMgPSAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIjsNCg0KDQogIC8qKg0KICAg KiBTeXN0ZW0gaWRlbnRpZmllciBmb3IgSFRNTCBkb2N1bWVudCB0eXBlLg0KICAgKi8NCiAgcHVi bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9DVFlQRV9IVE1MX1NZU1RFTSA9DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9y Zy9UUi9XRC1odG1sLWluLXhtbC9EVEQveGh0bWwxLXN0cmljdC5kdGQiOw0KDQoNCiAgLyoqDQog ICAqIFB1YmxpYyBpZGVudGlmaWVyIGZvciBYSFRNTCBkb2N1bWVudCB0eXBlLg0KICAgKi8NCiAg cHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9DVFlQRV9YSFRNTF9QVUJMSUMgPSAiLS8vVzND Ly9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iOw0KDQoNCiAgLyoqDQogICAqIFN5c3RlbSBpZGVu dGlmaWVyIGZvciBYSFRNTCBkb2N1bWVudCB0eXBlLg0KICAgKi8NCiAgcHVibGljIHN0YXRpYyBm aW5hbCBTdHJpbmcgRE9DVFlQRV9YSFRNTF9TWVNURU0gPQ0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL1dELWh0 bWwtaW4teG1sL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI7DQoNCiAgLyoqDQogICAqIENvbnN0cnVj dHMgYSBuZXcgb3V0cHV0IGZvcm1hdCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcy4NCiAgICovDQog IHB1YmxpYyBPdXRwdXRQcm9wZXJ0aWVzKCkNCiAgew0KICB9DQoNCiAgLyoqDQogICAqIENvbnN0 cnVjdHMgYSBuZXcgb3V0cHV0IGZvcm1hdCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3INCiAg ICogdGhlIHNwZWNpZmllZCBtZXRob2QgYW5kIGVuY29kaW5nLiBJZiA8dHQ+aW5kZW50PC90dD4N CiAgICogaXMgdHJ1ZSwgdGhlIGRvY3VtZW50IHdpbGwgYmUgcHJldHR5IHByaW50ZWQgd2l0aCB0 aGUgZGVmYXVsdA0KICAgKiBpbmRlbnRhdGlvbiBsZXZlbCBhbmQgZGVmYXVsdCBsaW5lIHdyYXBw aW5nLg0KICAgKg0KICAgKiBAcGFyYW0gbWV0aG9kIFRoZSBzcGVjaWZpZWQgb3V0cHV0IG1ldGhv ZA0KICAgKiBAcGFyYW0gZW5jb2RpbmcgVGhlIHNwZWNpZmllZCBlbmNvZGluZw0KICAgKiBAcGFy YW0gaW5kZW50aW5nIFRydWUgZm9yIHByZXR0eSBwcmludGluZw0KICAgKiBAc2VlICNzZXRFbmNv ZGluZw0KICAgKiBAc2VlICNzZXRJbmRlbnRpbmcNCiAgICogQHNlZSAjc2V0TWV0aG9kDQogICAq Lw0KICBwdWJsaWMgT3V0cHV0UHJvcGVydGllcyggU3RyaW5nIG1ldGhvZCwgU3RyaW5nIGVuY29k aW5nLCBib29sZWFuIGluZGVudGluZyApDQogIHsNCiAgICBzZXRNZXRob2QoIG1ldGhvZCApOw0K ICAgIHNldEVuY29kaW5nKCBlbmNvZGluZyApOw0KICAgIHNldEluZGVudGluZyggaW5kZW50aW5n ICk7DQogIH0NCg0KDQogIC8qKg0KICAgKiBDb25zdHJ1Y3RzIGEgbmV3IG91dHB1dCBmb3JtYXQg d2l0aCB0aGUgcHJvcGVyIG1ldGhvZCwNCiAgICogZG9jdW1lbnQgdHlwZSBpZGVudGlmaWVycyBh bmQgbWVkaWEgdHlwZSBmb3IgdGhlIHNwZWNpZmllZA0KICAgKiBkb2N1bWVudC4NCiAgICoNCiAg ICogQHBhcmFtIGRvYyBUaGUgZG9jdW1lbnQgdG8gb3V0cHV0DQogICAqIEBzZWUgI3doaWNoTWV0 aG9kDQogICAqLw0KICBwdWJsaWMgT3V0cHV0UHJvcGVydGllcyggRG9jdW1lbnQgZG9jICkNCiAg ew0KICAgIHNldE1ldGhvZCggd2hpY2hNZXRob2QoIGRvYyApICk7DQogICAgc2V0RG9jdHlwZSgg d2hpY2hEb2N0eXBlUHVibGljKCBkb2MgKSwgd2hpY2hEb2N0eXBlU3lzdGVtKCBkb2MgKSApOw0K ICAgIHNldE1lZGlhVHlwZSggd2hpY2hNZWRpYVR5cGUoIGdldE1ldGhvZCgpICkgKTsNCiAgfQ0K ICANCg0KICAvKioNCiAgICogQ29uc3RydWN0cyBhIG5ldyBvdXRwdXQgZm9ybWF0IHdpdGggdGhl IHByb3BlciBtZXRob2QsDQogICAqIGRvY3VtZW50IHR5cGUgaWRlbnRpZmllcnMgYW5kIG1lZGlh IHR5cGUgZm9yIHRoZSBzcGVjaWZpZWQNCiAgICogZG9jdW1lbnQsIGFuZCB3aXRoIHRoZSBzcGVj aWZpZWQgZW5jb2RpbmcuIElmIDx0dD5pbmRlbnQ8L3R0Pg0KICAgKiBpcyB0cnVlLCB0aGUgZG9j dW1lbnQgd2lsbCBiZSBwcmV0dHkgcHJpbnRlZCB3aXRoIHRoZSBkZWZhdWx0DQogICAqIGluZGVu dGF0aW9uIGxldmVsIGFuZCBkZWZhdWx0IGxpbmUgd3JhcHBpbmcuDQogICAqDQogICAqIEBwYXJh bSBkb2MgVGhlIGRvY3VtZW50IHRvIG91dHB1dA0KICAgKiBAcGFyYW0gZW5jb2RpbmcgVGhlIHNw ZWNpZmllZCBlbmNvZGluZw0KICAgKiBAcGFyYW0gaW5kZW50aW5nIFRydWUgZm9yIHByZXR0eSBw cmludGluZw0KICAgKiBAc2VlICNzZXRFbmNvZGluZw0KICAgKiBAc2VlICNzZXRJbmRlbnRpbmcN CiAgICogQHNlZSAjd2hpY2hNZXRob2QNCiAgICovDQogIHB1YmxpYyBPdXRwdXRQcm9wZXJ0aWVz KCBEb2N1bWVudCBkb2MsIFN0cmluZyBlbmNvZGluZywgYm9vbGVhbiBpbmRlbnRpbmcgKQ0KICB7 DQogICAgdGhpcyggZG9jICk7DQogICAgc2V0RW5jb2RpbmcoIGVuY29kaW5nICk7DQogICAgc2V0 SW5kZW50aW5nKCBpbmRlbnRpbmcgKTsNCiAgfQ0KDQoNCiAgLyoqDQogICAqIFJldHVybnMgdGhl IG1ldGhvZCBzcGVjaWZpZWQgZm9yIHRoaXMgb3V0cHV0IGZvcm1hdC4NCiAgICogVHlwaWNhbGx5 IHRoZSBtZXRob2Qgd2lsbCBiZSA8dHQ+eG1sPC90dD4sIDx0dD5odG1sPC90dD4NCiAgICogb3Ig PHR0PnRleHQ8L3R0PiwgYnV0IGl0IG1pZ2h0IGJlIG90aGVyIHZhbHVlcy4NCiAgICogSWYgbm8g bWV0aG9kIHdhcyBzcGVjaWZpZWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZA0KICAgKiBhbmQgdGhl IG1vc3Qgc3VpdGFibGUgbWV0aG9kIHdpbGwgYmUgZGV0ZXJtaW5lZCBmb3INCiAgICogdGhlIGRv Y3VtZW50IGJ5IGNhbGxpbmcge0BsaW5rICN3aGljaE1ldGhvZH0uDQogICAqDQogICAqIEByZXR1 cm4gVGhlIHNwZWNpZmllZCBvdXRwdXQgbWV0aG9kLCBvciBudWxsDQogICAqLw0KICBwdWJsaWMg U3RyaW5nIGdldE1ldGhvZCgpDQogIHsNCiAgICByZXR1cm4gX21ldGhvZDsNCiAgfQ0KDQoNCiAg LyoqDQogICAqIFNldHMgdGhlIG1ldGhvZCBmb3IgdGhpcyBvdXRwdXQgZm9ybWF0Lg0KICAgKg0K ICAgKiBAc2VlICNnZXRNZXRob2QNCiAgICogQHBhcmFtIG1ldGhvZCBUaGUgb3V0cHV0IG1ldGhv ZCwgb3IgbnVsbA0KICAgKi8NCiAgcHVibGljIHZvaWQgc2V0TWV0aG9kKCBTdHJpbmcgbWV0aG9k ICkNCiAgew0KICAgIF9tZXRob2QgPSBtZXRob2Q7DQogIH0NCg0KDQogIC8qKg0KICAgKiBSZXR1 cm5zIHRoZSB2ZXJzaW9uIGZvciB0aGlzIG91dHB1dCBtZXRob2QuDQogICAqIElmIG5vIHZlcnNp b24gd2FzIHNwZWNpZmllZCwgd2lsbCByZXR1cm4gbnVsbA0KICAgKiBhbmQgdGhlIGRlZmF1bHQg dmVyc2lvbiBudW1iZXIgd2lsbCBiZSB1c2VkLg0KICAgKiBJZiB0aGUgc2VyaWFsaXplcnIgZG9l cyBub3Qgc3VwcG9ydCB0aGF0IHBhcnRpY3VsYXINCiAgICogdmVyc2lvbiwgaXQgc2hvdWxkIGRl ZmF1bHQgdG8gYSBzdXBwb3J0ZWQgdmVyc2lvbi4NCiAgICoNCiAgICogQHJldHVybiBUaGUgc3Bl Y2lmaWVkIG1ldGhvZCB2ZXJzaW9uLCBvciBudWxsDQogICAqLw0KICBwdWJsaWMgU3RyaW5nIGdl dFZlcnNpb24oKQ0KICB7DQogICAgcmV0dXJuIF92ZXJzaW9uOw0KICB9DQoNCg0KICAvKioNCiAg ICogU2V0cyB0aGUgdmVyc2lvbiBmb3IgdGhpcyBvdXRwdXQgbWV0aG9kLg0KICAgKiBGb3IgWE1M IHRoZSB2YWx1ZSB3b3VsZCBiZSAiMS4wIiwgZm9yIEhUTUwNCiAgICogaXQgd291bGQgYmUgIjQu MCIuDQogICAqDQogICAqIEBzZWUgI2dldFZlcnNpb24NCiAgICogQHBhcmFtIHZlcnNpb24gVGhl IG91dHB1dCBtZXRob2QgdmVyc2lvbiwgb3IgbnVsbA0KICAgKi8NCiAgcHVibGljIHZvaWQgc2V0 VmVyc2lvbiggU3RyaW5nIHZlcnNpb24gKQ0KICB7DQogICAgX3ZlcnNpb24gPSB2ZXJzaW9uOw0K ICB9DQoNCg0KICAvKioNCiAgICogUmV0dXJucyB0aGUgaW5kZW50YXRpb24gc3BlY2lmaWVkLiBJ ZiBubyBpbmRlbnRhdGlvbg0KICAgKiB3YXMgc3BlY2lmaWVkLCB6ZXJvIGlzIHJldHVybmVkIGFu ZCB0aGUgZG9jdW1lbnQNCiAgICogc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4NCiAgICoNCiAgICog QHJldHVybiBUaGUgaW5kZW50YXRpb24gb3IgemVybw0KICAgKiBAc2VlICNzZXRJbmRlbnRpbmcN CiAgICovDQogIHB1YmxpYyBpbnQgZ2V0SW5kZW50KCkNCiAgew0KICAgIHJldHVybiBfaW5kZW50 Ow0KICB9DQoNCg0KICAvKioNCiAgICogUmV0dXJucyB0cnVlIGlmIGluZGVudGF0aW9uIHdhcyBz cGVjaWZpZWQuDQogICAqLw0KICBwdWJsaWMgYm9vbGVhbiBnZXRJbmRlbnRpbmcoKQ0KICB7DQog ICAgcmV0dXJuICggX2luZGVudCA+IDAgKTsNCiAgfQ0KDQoNCiAgLyoqDQogICAqIFNldHMgdGhl IGluZGVudGF0aW9uLiBUaGUgZG9jdW1lbnQgd2lsbCBub3QgYmUNCiAgICogaW5kZW50ZWQgaWYg dGhlIGluZGVudGF0aW9uIGlzIHNldCB0byB6ZXJvLg0KICAgKiBDYWxsaW5nIHtAbGluayAjc2V0 SW5kZW50aW5nfSB3aWxsIHJlc2V0IHRoaXMNCiAgICogdmFsdWUgdG8gemVybyAob2ZmKSBvciB0 aGUgZGVmYXVsdCAob24pLg0KICAgKg0KICAgKiBAcGFyYW0gaW5kZW50IFRoZSBpbmRlbnRhdGlv biwgb3IgemVybw0KICAgKi8NCiAgcHVibGljIHZvaWQgc2V0SW5kZW50KCBpbnQgaW5kZW50ICkN CiAgew0KICAgIGlmICggaW5kZW50IDwgMCApDQogICAgICBfaW5kZW50ID0gMDsNCiAgICBlbHNl DQogICAgICBfaW5kZW50ID0gaW5kZW50Ow0KICB9DQoNCg0KICAvKioNCiAgICogU2V0cyB0aGUg aW5kZW50YXRpb24gb24gYW5kIG9mZi4gV2hlbiBzZXQgb24sIHRoZSBkZWZhdWx0DQogICAqIGlu ZGVudGF0aW9uIGxldmVsIGFuZCBkZWZhdWx0IGxpbmUgd3JhcHBpbmcgaXMgdXNlZA0KICAgKiAo c2VlIHtAbGluayAjREVGQVVMVF9JTkRFTlR9IGFuZCB7QGxpbmsgI0RFRkFVTFRfTElORV9XSURU SH0pLg0KICAgKiBUbyBzcGVjaWZ5IGEgZGlmZmVyZW50IGluZGVudGF0aW9uIGxldmVsIG9yIGxp bmUgd3JhcHBpbmcsDQogICAqIHVzZSB7QGxpbmsgI3NldEluZGVudH0gYW5kIHtAbGluayAjc2V0 TGluZVdpZHRofS4NCiAgICoNCiAgICogQHBhcmFtIG9uIFRydWUgaWYgaW5kZW50YXRpb24gc2hv dWxkIGJlIG9uDQogICAqLw0KICBwdWJsaWMgdm9pZCBzZXRJbmRlbnRpbmcoIGJvb2xlYW4gb24g KQ0KICB7DQogICAgaWYgKCBvbiApIA0KICAgIHsNCiAgICAgIF9pbmRlbnQgPSBERUZBVUxUX0lO REVOVDsNCiAgICAgIF9saW5lV2lkdGggPSBERUZBVUxUX0xJTkVfV0lEVEg7DQogICAgfQ0KICAg IGVsc2UgDQogICAgew0KICAgICAgX2luZGVudCA9IDA7DQogICAgICBfbGluZVdpZHRoID0gMDsN CiAgICB9DQogIH0NCg0KDQogIC8qKg0KICAgKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgZW5jb2Rp bmcuIElmIG5vIGVuY29kaW5nIHdhcw0KICAgKiBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIGFs d2F5cyAiVVRGLTgiLg0KICAgKg0KICAgKiBAcmV0dXJuIFRoZSBlbmNvZGluZw0KICAgKi8NCiAg cHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpDQogIHsNCiAgICByZXR1cm4gX2VuY29kaW5nOw0K ICB9DQoNCg0KICAvKioNCiAgICogU2V0cyB0aGUgZW5jb2RpbmcgZm9yIHRoaXMgb3V0cHV0IG1l dGhvZC4gSWYgbm8NCiAgICogZW5jb2Rpbmcgd2FzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMg YWx3YXlzICJVVEYtOCIuDQogICAqIE1ha2Ugc3VyZSB0aGUgZW5jb2RpbmcgaXMgY29tcGF0aWJs ZSB3aXRoIHRoZSBvbmUNCiAgICogdXNlZCBieSB0aGUge0BsaW5rIGphdmEuaW8uV3JpdGVyfS4N CiAgICoNCiAgICogQHNlZSAjZ2V0RW5jb2RpbmcNCiAgICogQHBhcmFtIGVuY29kaW5nIFRoZSBl bmNvZGluZywgb3IgbnVsbA0KICAgKi8NCiAgcHVibGljIHZvaWQgc2V0RW5jb2RpbmcoIFN0cmlu ZyBlbmNvZGluZyApDQogIHsNCiAgICBfZW5jb2RpbmcgPSBlbmNvZGluZzsNCiAgfQ0KDQoNCiAg LyoqDQogICAqIFJldHVybnMgdGhlIHNwZWNpZmllZCBtZWRpYSB0eXBlLCBvciBudWxsLg0KICAg KiBUbyBkZXRlcm1pbmUgdGhlIG1lZGlhIHR5cGUgYmFzZWQgb24gdGhlDQogICAqIGRvY3VtZW50 IHR5cGUsIHVzZSB7QGxpbmsgI3doaWNoTWVkaWFUeXBlfS4NCiAgICoNCiAgICogQHJldHVybiBU aGUgc3BlY2lmaWVkIG1lZGlhIHR5cGUsIG9yIG51bGwNCiAgICovDQogIHB1YmxpYyBTdHJpbmcg Z2V0TWVkaWFUeXBlKCkNCiAgew0KICAgIHJldHVybiBfbWVkaWFUeXBlOw0KICB9DQoNCg0KICAv KioNCiAgICogU2V0cyB0aGUgbWVkaWEgdHlwZS4NCiAgICoNCiAgICogQHNlZSAjZ2V0TWVkaWFU eXBlDQogICAqIEBwYXJhbSBtZWRpYVR5cGUgVGhlIHNwZWNpZmllZCBtZWRpYSB0eXBlDQogICAq Lw0KICBwdWJsaWMgdm9pZCBzZXRNZWRpYVR5cGUoIFN0cmluZyBtZWRpYVR5cGUgKQ0KICB7DQog ICAgX21lZGlhVHlwZSA9IG1lZGlhVHlwZTsNCiAgfQ0KDQoNCiAgLyoqDQogICAqIFNldHMgdGhl IGRvY3VtZW50IHR5cGUgcHVibGljIGFuZCBzeXN0ZW0gaWRlbnRpZmllcnMuDQogICAqIE5vIDx0 dD5ET0NUWVBFPC90dD4gd2lsbCBiZSBzZXJpYWxpemVkIGlmIGJvdGggaWRlbnRpZmllcnMNCiAg ICogYXJlIG51bGwuIEEgc3lzdGVtIGlkZW50aWZpZXIgaXMgcmVxdWlyZWQgaWYgYSBwdWJsaWMN CiAgICogaWRlbnRpZmllZCBpcyBzcGVjaWZpZWQuDQogICAqDQogICAqIEBwYXJhbSBwdWJsaWNJ ZCBUaGUgcHVibGljIGlkZW50aWZpZXIsIG9yIG51bGwNCiAgICogQHBhcmFtIHN5c3RlbUlkIFRo ZSBzeXN0ZW0gaWRlbnRpZmllciwgb3IgbnVsbA0KICAgKi8NCiAgcHVibGljIHZvaWQgc2V0RG9j dHlwZSggU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQgKQ0KICB7DQogICAgX2RvY3R5 cGVQdWJsaWMgPSBwdWJsaWNJZDsNCiAgICBfZG9jdHlwZVN5c3RlbSA9IHN5c3RlbUlkOw0KICB9 DQoNCg0KICAvKioNCiAgICogUmV0dXJucyB0aGUgc3BlY2lmaWVkIGRvY3VtZW50IHR5cGUgcHVi bGljIGlkZW50aWZpZXIsDQogICAqIG9yIG51bGwuDQogICAqLw0KICBwdWJsaWMgU3RyaW5nIGdl dERvY3R5cGVQdWJsaWMoKQ0KICB7DQogICAgcmV0dXJuIF9kb2N0eXBlUHVibGljOw0KICB9DQoN Cg0KICAvKioNCiAgICogUmV0dXJucyB0aGUgc3BlY2lmaWVkIGRvY3VtZW50IHR5cGUgc3lzdGVt IGlkZW50aWZpZXIsDQogICAqIG9yIG51bGwuDQogICAqLw0KICBwdWJsaWMgU3RyaW5nIGdldERv Y3R5cGVTeXN0ZW0oKQ0KICB7DQogICAgcmV0dXJuIF9kb2N0eXBlU3lzdGVtOw0KICB9DQoNCg0K ICAvKioNCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBYTUwgZG9jdW1lbnQgZGVjbGFyYXRpb24g c2hvdWxkDQogICAqIGJlIG9tbWl0ZWQuIFRoZSBkZWZhdWx0IGlzIGZhbHNlLg0KICAgKi8NCiAg cHVibGljIGJvb2xlYW4gZ2V0T21pdFhNTERlY2xhcmF0aW9uKCkNCiAgew0KICAgIHJldHVybiBf b21pdFhtbERlY2xhcmF0aW9uOw0KICB9DQoNCg0KICAvKioNCiAgICogU2V0cyBYTUwgZGVjbGFy YXRpb24gb21pdHRpbmcgb24gYW5kIG9mZi4NCiAgICoNCiAgICogQHBhcmFtIG9taXQgVHJ1ZSBp ZiBYTUwgZGVjbGFyYXRpb24gc2hvdWxkIGJlIG9tbWl0ZWQNCiAgICovDQogIHB1YmxpYyB2b2lk IHNldE9taXRYTUxEZWNsYXJhdGlvbiggYm9vbGVhbiBvbWl0ICkNCiAgew0KICAgIF9vbWl0WG1s RGVjbGFyYXRpb24gPSBvbWl0Ow0KICB9DQoNCg0KICAvKioNCiAgICogUmV0dXJucyB0cnVlIGlm IHRoZSBkb2N1bWVudCB0eXBlIGlzIHN0YW5kYWxvbmUuDQogICAqIFRoZSBkZWZhdWx0IGlzIGZh bHNlLg0KICAgKi8NCiAgcHVibGljIGJvb2xlYW4gZ2V0U3RhbmRhbG9uZSgpDQogIHsNCiAgICBy ZXR1cm4gX3N0YW5kYWxvbmU7DQogIH0NCg0KDQogIC8qKg0KICAgKiBTZXRzIGRvY3VtZW50IERU RCBzdGFuZGFsb25lLiBUaGUgcHVibGljIGFuZCBzeXN0ZW0NCiAgICogaWRlbnRpZmllcnMgbXVz dCBiZSBudWxsIGZvciB0aGUgZG9jdW1lbnQgdG8gYmUNCiAgICogc2VyaWFsaXplZCBhcyBzdGFu ZGFsb25lLg0KICAgKg0KICAgKiBAcGFyYW0gc3RhbmRhbG9uZSBUcnVlIGlmIGRvY3VtZW50IERU RCBpcyBzdGFuZGFsb25lDQogICAqLw0KICBwdWJsaWMgdm9pZCBzZXRTdGFuZGFsb25lKCBib29s ZWFuIHN0YW5kYWxvbmUgKQ0KICB7DQogICAgX3N0YW5kYWxvbmUgPSBzdGFuZGFsb25lOw0KICB9 DQoNCg0KICAvKioNCiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRoZSBlbGVtZW50cyB3aG9z ZSB0ZXh0IG5vZGUgY2hpbGRyZW4NCiAgICogc2hvdWxkIGJlIG91dHB1dCBhcyBDREFUQSwgb3Ig bnVsbCBpZiBubyBzdWNoIGVsZW1lbnRzIHdlcmUNCiAgICogc3BlY2lmaWVkLg0KICAgKi8NCiAg cHVibGljIFN0cmluZ1tdIGdldENEYXRhRWxlbWVudHMoKQ0KICB7DQogICAgcmV0dXJuIF9jZGF0 YUVsZW1lbnRzOw0KICB9DQoNCg0KICAvKioNCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0ZXh0 IG5vZGUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIGVsZW1lbnRzDQogICAqIHNob3VsZCBiZSBvdXRw dXQgYXMgQ0RBVEEuDQogICAqDQogICAqIEBwYXJhbSB0YWdOYW1lIFRoZSBlbGVtZW50J3MgdGFn IG5hbWUNCiAgICogQHJldHVybiBUcnVlIGlmIHNob3VsZCBzZXJpYWxpemUgYXMgQ0RBVEENCiAg ICovDQogIHB1YmxpYyBib29sZWFuIGlzQ0RhdGFFbGVtZW50KCBTdHJpbmcgdGFnTmFtZSApDQog IHsNCiAgICBpbnQgaTsNCg0KICAgIGlmICggX2NkYXRhRWxlbWVudHMgPT0gbnVsbCApDQogICAg ICByZXR1cm4gZmFsc2U7DQogICAgZm9yICggaSA9IDAgOyBpIDwgX2NkYXRhRWxlbWVudHMubGVu Z3RoIDsgKytpICkNCiAgICAgIGlmICggX2NkYXRhRWxlbWVudHNbIGkgXS5lcXVhbHMoIHRhZ05h bWUgKSApDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KDQoN CiAgLyoqDQogICAqIFNldHMgdGhlIGxpc3Qgb2YgZWxlbWVudHMgZm9yIHdoaWNoIHRleHQgbm9k ZSBjaGlsZHJlbg0KICAgKiBzaG91bGQgYmUgb3V0cHV0IGFzIENEQVRBLg0KICAgKg0KICAgKiBA cGFyYW0gY2RhdGFFbGVtZW50cyBMaXN0IG9mIENEQVRBIGVsZW1lbnQgdGFnIG5hbWVzDQogICAq Lw0KICBwdWJsaWMgdm9pZCBzZXRDRGF0YUVsZW1lbnRzKCBTdHJpbmdbXSBjZGF0YUVsZW1lbnRz ICkNCiAgew0KICAgIF9jZGF0YUVsZW1lbnRzID0gY2RhdGFFbGVtZW50czsNCiAgfQ0KDQoNCiAg LyoqDQogICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCB0aGUgZWxlbWVudHMgd2hvc2UgdGV4dCBu b2RlIGNoaWxkcmVuDQogICAqIHNob3VsZCBiZSBvdXRwdXQgdW5lc2NhcGVkIChubyBjaGFyYWN0 ZXIgcmVmZXJlbmNlcyksIG9yIG51bGwNCiAgICogaWYgbm8gc3VjaCBlbGVtZW50cyB3ZXJlIHNw ZWNpZmllZC4NCiAgICovDQogIHB1YmxpYyBTdHJpbmdbXSBnZXROb25Fc2NhcGluZ0VsZW1lbnRz KCkNCiAgew0KICAgIHJldHVybiBfbm9uRXNjYXBpbmdFbGVtZW50czsNCiAgfQ0KDQoNCiAgLyoq DQogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGV4dCBub2RlIGNoaWxkcmVuIG9mIHRoZSBnaXZl biBlbGVtZW50cw0KICAgKiBzaG91bGQgYmUgb3V0cHV0IHVuZXNjYXBlZC4NCiAgICoNCiAgICog QHBhcmFtIHRhZ05hbWUgVGhlIGVsZW1lbnQncyB0YWcgbmFtZQ0KICAgKiBAcmV0dXJuIFRydWUg aWYgc2hvdWxkIHNlcmlhbGl6ZSB1bmVzY2FwZWQNCiAgICovDQogIHB1YmxpYyBib29sZWFuIGlz Tm9uRXNjYXBpbmdFbGVtZW50KCBTdHJpbmcgdGFnTmFtZSApDQogIHsNCiAgICBpbnQgaTsNCg0K ICAgIGlmICggX25vbkVzY2FwaW5nRWxlbWVudHMgPT0gbnVsbCApDQogICAgICByZXR1cm4gZmFs c2U7DQogICAgZm9yICggaSA9IDAgOyBpIDwgX25vbkVzY2FwaW5nRWxlbWVudHMubGVuZ3RoIDsg KytpICkNCiAgICAgIGlmICggX25vbkVzY2FwaW5nRWxlbWVudHNbIGkgXS5lcXVhbHMoIHRhZ05h bWUgKSApDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KDQoN CiAgLyoqDQogICAqIFNldHMgdGhlIGxpc3Qgb2YgZWxlbWVudHMgZm9yIHdoaWNoIHRleHQgbm9k ZSBjaGlsZHJlbg0KICAgKiBzaG91bGQgYmUgb3V0cHV0IHVuZXNjYXBlZCAobm8gY2hhcmFjdGVy IHJlZmVyZW5jZXMpLg0KICAgKg0KICAgKiBAcGFyYW0gbm9uRXNjYXBpbmdFbGVtZW50cyBMaXN0 IG9mIHVuZXNjYXBlZCBlbGVtZW50IHRhZyBuYW1lcw0KICAgKi8NCiAgcHVibGljIHZvaWQgc2V0 Tm9uRXNjYXBpbmdFbGVtZW50cyggU3RyaW5nW10gbm9uRXNjYXBpbmdFbGVtZW50cyApDQogIHsN CiAgICBfbm9uRXNjYXBpbmdFbGVtZW50cyA9IG5vbkVzY2FwaW5nRWxlbWVudHM7DQogIH0NCg0K DQoNCiAgLyoqDQogICAqIFJldHVybnMgYSBzcGVjaWZpYyBsaW5lIHNlcGFyYXRvciB0byB1c2Uu IFRoZSBkZWZhdWx0IGlzIHRoZQ0KICAgKiBXZWIgbGluZSBzZXBhcmF0b3IgKDx0dD5cbjwvdHQ+ KS4gQSBzdHJpbmcgaXMgcmV0dXJuZWQgdG8NCiAgICogc3VwcG9ydCBkb3VibGUgY29kZXMgKENS ICsgTEYpLg0KICAgKg0KICAgKiBAcmV0dXJuIFRoZSBzcGVjaWZpZWQgbGluZSBzZXBhcmF0b3IN CiAgICovDQogIHB1YmxpYyBTdHJpbmcgZ2V0TGluZVNlcGFyYXRvcigpDQogIHsNCiAgICByZXR1 cm4gX2xpbmVTZXBhcmF0b3I7DQogIH0NCg0KDQogIC8qKg0KICAgKiBTZXRzIHRoZSBsaW5lIHNl cGFyYXRvci4gVGhlIGRlZmF1bHQgaXMgdGhlIFdlYiBsaW5lIHNlcGFyYXRvcg0KICAgKiAoPHR0 PlxuPC90dD4pLiBUaGUgbWFjaGluZSdzIGxpbmUgc2VwYXJhdG9yIGNhbiBiZSBvYnRhaW5lZA0K ICAgKiBmcm9tIHRoZSBzeXN0ZW0gcHJvcGVydHkgPHR0PmxpbmUuc2VwYXJhdG9yPC90dD4sIGJ1 dCBpcyBvbmx5DQogICAqIHVzZWZ1bCBpZiB0aGUgZG9jdW1lbnQgaXMgZWRpdGVkIG9uIG1hY2hp bmVzIG9mIHRoZSBzYW1lIHR5cGUuDQogICAqIEZvciBnZW5lcmFsIGRvY3VtZW50cywgdXNlIHRo ZSBXZWIgbGluZSBzZXBhcmF0b3IuDQogICAqDQogICAqIEBwYXJhbSBsaW5lU2VwYXJhdG9yIFRo ZSBzcGVjaWZpZWQgbGluZSBzZXBhcmF0b3INCiAgICovDQogIHB1YmxpYyB2b2lkIHNldExpbmVT ZXBhcmF0b3IoIFN0cmluZyBsaW5lU2VwYXJhdG9yICkNCiAgew0KICAgIGlmICggbGluZVNlcGFy YXRvciA9PSBudWxsICkNCiAgICAgIF9saW5lU2VwYXJhdG9yID0gIExJTkVfU0VQQVJBVE9SX1dF QjsNCiAgICBlbHNlDQogICAgICBfbGluZVNlcGFyYXRvciA9IGxpbmVTZXBhcmF0b3I7DQogIH0N Cg0KDQogIC8qKg0KICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9y IHRoaXMgZm9ybWF0IGlzIHRvDQogICAqIHByZXNlcnZlIHNwYWNlcy4gQWxsIGVsZW1lbnRzIHRo YXQgZG8gbm90IHNwZWNpZnkgb3RoZXJ3aXNlDQogICAqIG9yIHNwZWNpZnkgdGhlIGRlZmF1bHQg YmVoYXZpb3Igd2lsbCBiZSBmb3JtYXR0ZWQgYmFzZWQgb24NCiAgICogdGhpcyBydWxlLiBBbGwg ZWxlbWVudHMgdGhhdCBzcGVjaWZ5IHNwYWNlIHByZXNlcnZpbmcgd2lsbA0KICAgKiBhbHdheXMg cHJlc2VydmUgc3BhY2UuDQogICAqLw0KICBwdWJsaWMgYm9vbGVhbiBnZXRQcmVzZXJ2ZVNwYWNl KCkNCiAgew0KICAgIHJldHVybiBfcHJlc2VydmU7DQogIH0NCg0KICAvKioNCiAgICogU2V0cyBz cGFjZSBwcmVzZXJ2aW5nIGFzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUaGUgZGVmYXVsdCBpcw0K ICAgKiBzcGFjZSBzdHJpcHBpbmcgYW5kIGFsbCBlbGVtZW50cyB0aGF0IGRvIG5vdCBzcGVjaWZ5 IG90aGVyd2lzZQ0KICAgKiBvciB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgd2lsbCBub3QgcHJlc2Vy dmUgc3BhY2VzLg0KICAgKg0KICAgKiBAcGFyYW0gcHJlc2VydmUgVHJ1ZSBpZiBzcGFjZXMgc2hv dWxkIGJlIHByZXNlcnZlZA0KICAgKi8NCiAgcHVibGljIHZvaWQgc2V0UHJlc2VydmVTcGFjZSgg Ym9vbGVhbiBwcmVzZXJ2ZSApDQogIHsNCiAgICBfcHJlc2VydmUgPSBwcmVzZXJ2ZTsNCiAgfQ0K DQogIC8qKg0KICAgKiBSZXR1cm4gdGhlIHNlbGVjdGVkIGxpbmUgd2lkdGggZm9yIGJyZWFraW5n IHVwIGxvbmcgbGluZXMuDQogICAqIFdoZW4gaW5kZW50aW5nLCBhbmQgb25seSB3aGVuIGluZGVu dGluZywgbG9uZyBsaW5lcyB3aWxsIGJlDQogICAqIGJyb2tlbiBhdCBzcGFjZSBib3VuZGFyaWVz IGJhc2VkIG9uIHRoaXMgbGluZSB3aWR0aC4NCiAgICogTm8gbGluZSB3cmFwcGluZyBvY2N1cnMg aWYgdGhpcyB2YWx1ZSBpcyB6ZXJvLg0KICAgKi8NCiAgcHVibGljIGludCBnZXRMaW5lV2lkdGgo KQ0KICB7DQogICAgcmV0dXJuIF9saW5lV2lkdGg7DQogIH0NCg0KICAvKioNCiAgICogU2V0cyB0 aGUgbGluZSB3aWR0aC4gSWYgemVybyB0aGVuIG5vIGxpbmUgd3JhcHBpbmcgd2lsbA0KICAgKiBv Y2N1ci4gQ2FsbGluZyB7QGxpbmsgI3NldEluZGVudGluZ30gd2lsbCByZXNldCB0aGlzDQogICAq IHZhbHVlIHRvIHplcm8gKG9mZikgb3IgdGhlIGRlZmF1bHQgKG9uKS4NCiAgICoNCiAgICogQHBh cmFtIGxpbmVXaWR0aCBUaGUgbGluZSB3aWR0aCB0byB1c2UsIHplcm8gZm9yIGRlZmF1bHQNCiAg ICogQHNlZSAjZ2V0TGluZVdpZHRoDQogICAqIEBzZWUgI3NldEluZGVudGluZw0KICAgKi8NCiAg cHVibGljIHZvaWQgc2V0TGluZVdpZHRoKCBpbnQgbGluZVdpZHRoICkNCiAgew0KICAgIGlmICgg bGluZVdpZHRoIDw9IDAgKQ0KICAgICAgX2xpbmVXaWR0aCA9IDA7DQogICAgZWxzZQ0KICAgICAg X2xpbmVXaWR0aCA9IGxpbmVXaWR0aDsNCiAgfQ0KDQogIC8qKg0KICAgKiBSZXR1cm5zIHRoZSBs YXN0IHByaW50YWJsZSBjaGFyYWN0ZXIgYmFzZWQgb24gdGhlIHNlbGVjdGVkDQogICAqIGVuY29k aW5nLiBDb250cm9sIGNoYXJhY3RlcnMgYW5kIG5vbi1wcmludGFibGUgY2hhcmFjdGVycw0KICAg KiBhcmUgYWx3YXlzIHByaW50ZWQgYXMgY2hhcmFjdGVyIHJlZmVyZW5jZXMuDQogICAqLw0KICBw dWJsaWMgY2hhciBnZXRMYXN0UHJpbnRhYmxlKCkNCiAgew0KICAgIGlmICggZ2V0RW5jb2Rpbmco KSAhPSBudWxsICYmDQogICAgICAgICAoIGdldEVuY29kaW5nKCkuZXF1YWxzSWdub3JlQ2FzZSgg IkFTQ0lJIiApICkgKQ0KICAgICAgcmV0dXJuIDB4RkY7DQogICAgZWxzZQ0KICAgICAgcmV0dXJu IDB4RkZGRjsNCiAgfQ0KDQogIC8qKg0KICAgKiBEZXRlcm1pbmUgdGhlIG91dHB1dCBtZXRob2Qg Zm9yIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnQuDQogICAqIElmIHRoZSBkb2N1bWVudCBpcyBhbiBp bnN0YW5jZSBvZiB7QGxpbmsgb3JnLnczYy5kb20uaHRtbC5IVE1MRG9jdW1lbnR9DQogICAqIHRo ZW4gdGhlIG1ldGhvZCBpcyBzYWlkIHRvIGJlIDx0dD5odG1sPC90dD4uIElmIHRoZSByb290DQog ICAqIGVsZW1lbnQgaXMgJ2h0bWwnIGFuZCBhbGwgdGV4dCBub2RlcyBwcmVjZWRpbmcgdGhlIHJv b3QNCiAgICogZWxlbWVudCBhcmUgYWxsIHdoaXRlc3BhY2UsIHRoZW4gdGhlIG1ldGhvZCBpcyBz YWlkIHRvIGJlDQogICAqIDx0dD5odG1sPC90dD4uIE90aGVyd2lzZSB0aGUgbWV0aG9kIGlzIDx0 dD54bWw8L3R0Pi4NCiAgICoNCiAgICogQHBhcmFtIGRvYyBUaGUgZG9jdW1lbnQgdG8gY2hlY2sN CiAgICogQHJldHVybiBUaGUgc3VpdGFibGUgbWV0aG9kDQogICAqLw0KICBwdWJsaWMgc3RhdGlj IFN0cmluZyB3aGljaE1ldGhvZCggRG9jdW1lbnQgZG9jICkNCiAgew0KICAgIE5vZGUgICAgbm9k ZTsNCiAgICBTdHJpbmcgIHZhbHVlOw0KICAgIGludCAgICAgaTsNCg0KICAgIC8vIElmIGRvY3Vt ZW50IGlzIGRlcml2ZWQgZnJvbSBIVE1MRG9jdW1lbnQgdGhlbiB0aGUgZGVmYXVsdA0KICAgIC8v IG1ldGhvZCBpcyBodG1sLg0KICAgIC8qIFhYWCAgRGVsYXllZCB1bnRpbCB0aGUgSFRNTCBET00g aXMgaW50cm9kdWNlZCBpbnRvIHRoZSBjb2RlIGJhc2UNCiAgICBpZiAoIGRvYyBpbnN0YW5jZW9m IEhUTUxEb2N1bWVudCApDQogICAgcmV0dXJuIE1FVEhPRF9IVE1MOw0KICAgICovDQogICAgDQog ICAgLy8gTG9va3VwIHRoZSByb290IGVsZW1lbnQgYW5kIHRoZSB0ZXh0IG5vZGVzIHByZWNlZGlu ZyBpdC4NCiAgICAvLyBJZiByb290IGVsZW1lbnQgaXMgaHRtbCBhbmQgYWxsIHRleHQgbm9kZXMg Y29udGFpbiB3aGl0ZXNwYWNlDQogICAgLy8gb25seSwgdGhlIG1ldGhvZCBpcyBodG1sLg0KICAg IA0KICAgIC8vIEZJWE1FIChTTSkgc2hvdWxkIHdlIGNhcmUgYWJvdXQgbmFtZXNwYWNlcyBoZXJl Pw0KICAgIA0KICAgIG5vZGUgPSBkb2MuZ2V0Rmlyc3RDaGlsZCgpOw0KICAgIHdoaWxlIChub2Rl ICE9IG51bGwpIA0KICAgIHsNCiAgICAgIC8vIElmIHRoZSByb290IGVsZW1lbnQgaXMgaHRtbCwg dGhlIG1ldGhvZCBpcyBodG1sLg0KICAgICAgaWYgKCBub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9k ZS5FTEVNRU5UX05PREUgKSANCiAgICAgIHsNCiAgICAgICAgaWYgKCBub2RlLmdldE5vZGVOYW1l KCkuZXF1YWxzSWdub3JlQ2FzZSggImh0bWwiICkgKSANCiAgICAgICAgew0KICAgICAgICAgIHJl dHVybiBNRVRIT0RfSFRNTDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmICggbm9kZS5nZXRO b2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoICJyb290IiApICkgDQogICAgICAgIHsNCiAgICAg ICAgICByZXR1cm4gTUVUSE9EX0ZPUDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIA0KICAgICAg ICB7DQogICAgICAgICAgcmV0dXJuIE1FVEhPRF9YTUw7DQogICAgICAgIH0NCiAgICAgIH0NCiAg ICAgIGVsc2UgaWYgKCBub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUgKSANCiAg ICAgIHsNCiAgICAgICAgLy8gSWYgYSB0ZXh0IG5vZGUgcHJlY2VkaW5nIHRoZSByb290IGVsZW1l bnQgY29udGFpbnMNCiAgICAgICAgLy8gb25seSB3aGl0ZXNwYWNlLCB0aGlzIG1pZ2h0IGJlIGh0 bWwsIG90aGVyd2lzZSBpdCdzDQogICAgICAgIC8vIGRlZmluaXRlbHkgeG1sLg0KICAgICAgICB2 YWx1ZSA9IG5vZGUuZ2V0Tm9kZVZhbHVlKCk7DQogICAgICAgIGZvciAoIGkgPSAwIDsgaSA8IHZh bHVlLmxlbmd0aCgpIDsgKytpICkNCiAgICAgICAgICBpZiAoIHZhbHVlLmNoYXJBdCggaSApICE9 IDB4MjAgJiYgdmFsdWUuY2hhckF0KCBpICkgIT0gMHgwQSAmJg0KICAgICAgICAgICAgICAgdmFs dWUuY2hhckF0KCBpICkgIT0gMHgwOSAmJiB2YWx1ZS5jaGFyQXQoIGkgKSAhPSAweDBEICkNCiAg ICAgICAgICAgIHJldHVybiBNRVRIT0RfWE1MOw0KICAgICAgfQ0KICAgICAgbm9kZSA9IG5vZGUu Z2V0TmV4dFNpYmxpbmcoKTsNCiAgICB9DQogICAgLy8gQW55dGhpbmcgZWxzZSwgdGhlIG1ldGhv ZCBpcyB4bWwuDQogICAgcmV0dXJuIE1FVEhPRF9YTUw7DQogIH0NCg0KICAvKioNCiAgICogUmV0 dXJucyB0aGUgZG9jdW1lbnQgdHlwZSBwdWJsaWMgaWRlbnRpZmllcg0KICAgKiBzcGVjaWZpZWQg Zm9yIHRoaXMgZG9jdW1lbnQsIG9yIG51bGwuDQogICAqLw0KICBwdWJsaWMgc3RhdGljIFN0cmlu ZyB3aGljaERvY3R5cGVQdWJsaWMoIERvY3VtZW50IGRvYyApDQogIHsNCiAgICBEb2N1bWVudFR5 cGUgZG9jdHlwZTsNCg0KICAgIC8qIFhYWCAgRGVsYXllZCB1bnRpbCBET00gTGV2ZWwgMiBpcyBp bnRyb2R1Y2VkIGludG8gdGhlIGNvZGUgYmFzZQ0KICAgIGRvY3R5cGUgPSBkb2MuZ2V0RG9jdHlw ZSgpOw0KICAgIGlmICggZG9jdHlwZSAhPSBudWxsICkgew0KICAgIC8vIE5vdGUgb24gY2F0Y2g6 IERPTSBMZXZlbCAxIGRvZXMgbm90IHNwZWNpZnkgdGhpcyBtZXRob2QNCiAgICAvLyBhbmQgdGhl IGNvZGUgd2lsbCB0aHJvdyBhIE5vU3VjaE1ldGhvZEVycm9yDQogICAgdHJ5IHsNCiAgICByZXR1 cm4gZG9jdHlwZS5nZXRQdWJsaWNJRCgpOw0KICAgIH0gY2F0Y2ggKCBFcnJvciBleGNlcHQgKSB7 ICB9DQogICAgfQ0KICAgICovDQogICAgLyogWFhYICBEZWxheWVkIHVudGlsIHRoZSBIVE1MIERP TSBpcyBpbnRyb2R1Y2VkIGludG8gdGhlIGNvZGUgYmFzZQ0KICAgIGlmICggZG9jIGluc3RhbmNl b2YgSFRNTERvY3VtZW50ICkNCiAgICByZXR1cm4gRE9DVFlQRV9YSFRNTF9QVUJMSUM7DQogICAg Ki8NCiAgICByZXR1cm4gbnVsbDsNCiAgfQ0KDQoNCiAgLyoqDQogICAqIFJldHVybnMgdGhlIGRv Y3VtZW50IHR5cGUgc3lzdGVtIGlkZW50aWZpZXINCiAgICogc3BlY2lmaWVkIGZvciB0aGlzIGRv Y3VtZW50LCBvciBudWxsLg0KICAgKi8NCiAgcHVibGljIHN0YXRpYyBTdHJpbmcgd2hpY2hEb2N0 eXBlU3lzdGVtKCBEb2N1bWVudCBkb2MgKQ0KICB7DQogICAgRG9jdW1lbnRUeXBlIGRvY3R5cGU7 DQoNCiAgICAvKiBYWFggIERlbGF5ZWQgdW50aWwgRE9NIExldmVsIDIgaXMgaW50cm9kdWNlZCBp bnRvIHRoZSBjb2RlIGJhc2UNCiAgICBkb2N0eXBlID0gZG9jLmdldERvY3R5cGUoKTsNCiAgICBp ZiAoIGRvY3R5cGUgIT0gbnVsbCApIHsNCiAgICAvLyBOb3RlIG9uIGNhdGNoOiBET00gTGV2ZWwg MSBkb2VzIG5vdCBzcGVjaWZ5IHRoaXMgbWV0aG9kDQogICAgLy8gYW5kIHRoZSBjb2RlIHdpbGwg dGhyb3cgYSBOb1N1Y2hNZXRob2RFcnJvcg0KICAgIHRyeSB7DQogICAgcmV0dXJuIGRvY3R5cGUu Z2V0U3lzdGVtSUQoKTsNCiAgICB9IGNhdGNoICggRXJyb3IgZXhjZXB0ICkgeyB9DQogICAgfQ0K ICAgICovDQogICAgLyogWFhYICBEZWxheWVkIHVudGlsIHRoZSBIVE1MIERPTSBpcyBpbnRyb2R1 Y2VkIGludG8gdGhlIGNvZGUgYmFzZQ0KICAgIGlmICggZG9jIGluc3RhbmNlb2YgSFRNTERvY3Vt ZW50ICkNCiAgICByZXR1cm4gRE9DVFlQRV9YSFRNTF9TWVNURU07DQogICAgKi8NCiAgICByZXR1 cm4gbnVsbDsNCiAgfQ0KDQogIC8qKg0KICAgKiBSZXR1cm5zIHRoZSBzdWl0YWJsZSBtZWRpYSBm b3JtYXQgZm9yIGEgZG9jdW1lbnQNCiAgICogb3V0cHV0IHdpdGggdGhlIHNwZWNpZmllZCBtZXRo b2QuDQogICAqLw0KICBwdWJsaWMgc3RhdGljIFN0cmluZyB3aGljaE1lZGlhVHlwZSggU3RyaW5n IG1ldGhvZCApDQogIHsNCiAgICBpZiAoIG1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKCBNRVRIT0Rf WE1MICkgKQ0KICAgICAgcmV0dXJuICJ0ZXh0L3htbCI7DQogICAgaWYgKCBtZXRob2QuZXF1YWxz SWdub3JlQ2FzZSggTUVUSE9EX0hUTUwgKSApDQogICAgICByZXR1cm4gInRleHQvaHRtbCI7DQog ICAgaWYgKCBtZXRob2QuZXF1YWxzSWdub3JlQ2FzZSggTUVUSE9EX1RFWFQgKSApDQogICAgICBy ZXR1cm4gInRleHQvcGxhaW4iOw0KICAgIHJldHVybiBudWxsOw0KICB9DQp9DQo= --0__=8525687D00163FF18f9e8a93df938690918c8525687D00163FF1--