Patch to Village (Oracle Clobs)
Scott Miller <[email protected]> Tue, 8 Apr 2003 22:03:54 -0400
| Newsgroups | gmane.comp.db.village.devel |
|---|---|
| Message-ID | <[email protected]> |
This message is in MIME format. ---MOQ104985383480af299144db9aa6c652b7f003a56238 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Hi, I have been trying to use Torque as a database abstraction layer for an Oracle database containing CLOBs. However, Village does not properly retrieve or set CLOB values with Oracle. This is because Village uses the ResultSet.getString method to read the CLOB value from the database and the PreparedStatement.setString method to set the CLOB value. This approach will work for many JDBC drivers because they support the handling of CLOBs as Strings. However, the Oracle JDBC driver does not support this conversition. I have modified Value.java to properly handle Oracle clobs. This file is attached to this email. I am not sure of the proper avenue to submit a patch for Village, so I am hoping that someone can advise me on the best course of action. The rest of this email is devoted to a brief explanation of the code change. Because Oracle's JDBC driver does not support the CLOB to String conversion, you need to actually use the java.sql.Clob interface, which is implemented by oracle.sql.CLOB. You can refer to the Clob object by the java.sql.Clob interface during data retrieval, because there is no need to instantiate an instance of the Class. The constructor of the Value class was modified to handle retrieval by simply adding a Types.CLOB case to the switch statement. Unfortunately, you need to create an instance of the clob object when you want to set the CLOB data, so you must refer to the oracle.sql.CLOB class. However, in order to not rely on the Oracle JDBC driver at compile time, I have writted the code to use reflection to create an instance of oracle.sql.CLOB and set the value. This code is located in the setPreparedStatementValue method of the Value class. Any advice on how to submit this update would be appreciated. Thanks, Scott ---MOQ104985383480af299144db9aa6c652b7f003a56238 Content-Type: application/octet-stream; name="Value.java" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Value.java" LyoKICogVGhlIFdvcmtpbmctRG9ncy5jb20gTGljZW5zZSwgVmVyc2lvbiAxLjEKICoKICogQ29w eXJpZ2h0IChjKSAxOTk5IFdvcmtpbmctRG9ncy5jb20uICBBbGwgcmlnaHRzIHJlc2VydmVkLgog KgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqCiAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCiAqCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgIGRp c3RyaWJ1dGlvbi4KICoKICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQg d2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmCiAqICAgIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBm b2xsb3dpbmcgYWNrbm93bGVnZW1lbnQ6ICAKICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIAogKiAgICAgICAgV29ya2luZy1Eb2dzLmNvbSA8 aHR0cDovL3d3dy5Xb3JraW5nLURvZ3MuY29tLz4uIgogKiAgICBBbHRlcm5hdGVseSwgdGhpcyBh Y2tub3dsZWdlbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCiAqICAgIGlm IGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZ2VtZW50cyBub3JtYWxseSBh cHBlYXIuCiAqCiAqIDQuIFRoZSBuYW1lcyAiV29ya2luZy1Eb2dzLmNvbSIgYW5kICJWaWxsYWdl IiBtdXN0IG5vdCBiZSB1c2VkIHRvIAogKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCAKICogICAg am9uQGxhdGNoa2V5LmNvbS4KICoKICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgCiAqICAgICJXb3JraW5nLURvZ3MuY29tIiBub3IgbWF5 ICJWaWxsYWdlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgCiAqICAgIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uIG9mIFdvcmtpbmctRG9ncy5jb20uCiAqCiAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKICogV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB TlRJRVMKICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBUkUKICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUg U09GVFdBUkUgRk9VTkRBVElPTiBPUgogKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgog KiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF UiBDQVVTRUQgQU5ECiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAogKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKICogT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAqIFNV Q0ggREFNQUdFLgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQogKgogKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9m IHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQogKiBpbmRpdmlkdWFscyBvbiBi ZWhhbGYgb2YgdGhlIFdvcmtpbmctRG9ncy5jb20uICBGb3IgbW9yZQogKiBpbmZvcm1hdGlvbiBv biB0aGUgV29ya2luZy1Eb2dzLmNvbSwgcGxlYXNlIHNlZQogKiA8aHR0cDovL3d3dy5Xb3JraW5n LURvZ3MuY29tLz4uCiAqLwoKcGFja2FnZSBjb20ud29ya2luZ2RvZ3MudmlsbGFnZTsKCmltcG9y dCBqYXZhLmxhbmcuQ2xhc3M7CmltcG9ydCBqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlv bjsKaW1wb3J0IGphdmEubGFuZy5JbGxlZ2FsQWNjZXNzRXJyb3I7CmltcG9ydCBqYXZhLmxhbmcu Tm9TdWNoRmllbGRFeGNlcHRpb247CmltcG9ydCBqYXZhLmxhbmcuTm9TdWNoTWV0aG9kRXhjZXB0 aW9uOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7CmltcG9ydCBqYXZhLmxhbmcucmVm bGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3Qu TWV0aG9kOwppbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CmltcG9ydCBqYXZhLmlvLklPRXhj ZXB0aW9uOwppbXBvcnQgamF2YS5pby5Xcml0ZXI7CmltcG9ydCBqYXZhLnNxbC5DbG9iOwppbXBv cnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CmltcG9ydCBqYXZhLnNxbC5SZXN1bHRTZXQ7 CmltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CmltcG9ydCBqYXZhLnNxbC5UaW1lOwppbXBv cnQgamF2YS5zcWwuVGltZXN0YW1wOwppbXBvcnQgamF2YS5zcWwuVHlwZXM7CmltcG9ydCBqYXZh LnV0aWwuQ2FsZW5kYXI7CgovKioKQSBWYWx1ZSByZXByZXNlbnRzIGEgc2luZ2xlIGNlbGwgaW4g YSBkYXRhYmFzZSB0YWJsZS4gSW4gb3RoZXIgd29yZHMsIGl0IGlzIHRoZSAKY3Jvc3MgYmV0d2Vl biBhIHJvdyBhbmQgY29sdW1uIGFuZCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gaGVsZCB0aGVy ZS4KCkBhdXRob3IgSm9uIFMuIFN0ZXZlbnMgPEEgSFJFRj0ibWFpbHRvOmpvbkBsYXRjaGtleS5j b20iPmpvbkBsYXRjaGtleS5jb208L0E+CkB2ZXJzaW9uICRSZXZpc2lvbjogMS4xOCAkCiovCnB1 YmxpYyBjbGFzcyBWYWx1ZQp7CiAgICAvKiogdGhlIG9iamVjdCB0aGF0IGlzIHN0b3JlZCBpbiB0 aGlzIG9iamVjdCAqLwogICAgcHJpdmF0ZSBPYmplY3QgdmFsdWVPYmplY3Q7CiAgICAvKiogdGhl IGNvbHVtbiBudW1iZXIgdGhhdCB0aGlzIG9iamVjdCBjYW1lIGZyb20gKi8KICAgIHByaXZhdGUg aW50IGNvbHVtbk51bWJlcjsKICAgIC8qKiB3aGF0IHNxbCB0eXBlIG9mIG9iamVjdCBpcyB0aGlz PyAqLwogICAgcHJpdmF0ZSBpbnQgdHlwZTsKICAgIC8qKiBOYW1lIG9mIHRoZSBvcmFjbGUgZHJp dmVyIC0tIHVzZWQgdG8gc3VwcG9ydCBPcmFjbGUgY2xvYnMgYXMgYSBzcGVjaWFsIGNhc2UgKi8K ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPUkFDTEVfRFJJVkVSX05BTUUgPSAiT3Jh Y2xlIEpEQkMgZHJpdmVyIjsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgVmFsdWUgb2Jq ZWN0IGJhc2VkIG9uIHRoZSBSZXN1bHRTZXQsIGNvbHVtbk51bWJlciBhbmQgdHlwZQogICAgICoK ICAgICAqIEBwYXJhbSAgIHJzCiAgICAgKiBAcGFyYW0gICBjb2x1bW5OdW1iZXIKICAgICAqIEBw YXJhbSAgIHR5cGUKICAgICAqIEBleGNlcHRpb24gICBTUUxFeGNlcHRpb24KICAgICAqLwogICAg cHVibGljIFZhbHVlIChSZXN1bHRTZXQgcnMsIGludCBjb2x1bW5OdW1iZXIsIGludCB0eXBlKSAK ICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uCiAgICB7CiAgICAgICAgdGhpcy5jb2x1bW5OdW1i ZXIgPSBjb2x1bW5OdW1iZXI7CiAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICAgICB0aGlz LnZhbHVlT2JqZWN0ID0gbnVsbDsKCiAgICAgICAgaWYgKHJzID09IG51bGwpCiAgICAgICAgICAg IHJldHVybjsKCiAgICAgICAgc3dpdGNoICh0eXBlKCkpCiAgICAgICAgewogICAgICAgICAgICBj YXNlIFR5cGVzLkJJVDoKICAgICAgICAgICAgICAgIFN0cmluZyB0bXAgPSBycy5nZXRTdHJpbmcg KGNvbHVtbk51bWJlcik7CiAgICAgICAgICAgICAgICBpZiAodG1wID09IG51bGwpCiAgICAgICAg ICAgICAgICAgICAgdmFsdWVPYmplY3QgPSBuZXcgQm9vbGVhbiAoZmFsc2UpOwogICAgICAgICAg ICAgICAgZWxzZSBpZiAoaXNUcnVlKHRtcCkpCiAgICAgICAgICAgICAgICAgICAgdmFsdWVPYmpl Y3QgPSBuZXcgQm9vbGVhbiAodHJ1ZSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgdmFsdWVPYmplY3QgPSBuZXcgQm9vbGVhbiAoZmFsc2UpOwogICAgICAgICAgICAg ICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGVzLlRJTllJTlQ6CiAgICAgICAgICAgICAg ICB2YWx1ZU9iamVjdCA9IG5ldyBCeXRlIChycy5nZXRCeXRlIChjb2x1bW5OdW1iZXIpKTsKICAg ICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBUeXBlcy5CSUdJTlQ6CiAgICAg ICAgICAgICAgICB2YWx1ZU9iamVjdCA9IG5ldyBMb25nIChycy5nZXRMb25nIChjb2x1bW5OdW1i ZXIpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBUeXBlcy5TTUFM TElOVDoKICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0ID0gbmV3IFNob3J0IChycy5nZXRTaG9y dCAoY29sdW1uTnVtYmVyKSk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNh c2UgVHlwZXMuSU5URUdFUjoKICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0ID0gbmV3IEludGVn ZXIgKHJzLmdldEludCAoY29sdW1uTnVtYmVyKSk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAg ICAgICAgICAgIGNhc2UgVHlwZXMuUkVBTDoKICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0ID0g bmV3IEZsb2F0IChycy5nZXRGbG9hdCAoY29sdW1uTnVtYmVyKSk7CiAgICAgICAgICAgICAgICBi cmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZXMuRkxPQVQ6CiAgICAgICAgICAgIGNhc2UgVHlw ZXMuRE9VQkxFOgogICAgICAgICAgICAgICAgdmFsdWVPYmplY3QgPSBuZXcgRG91YmxlIChycy5n ZXREb3VibGUgKGNvbHVtbk51bWJlcikpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAg ICAgICBjYXNlIFR5cGVzLk5VTUVSSUM6CiAgICAgICAgICAgIGNhc2UgVHlwZXMuREVDSU1BTDoK ICAgICAgICAgICAgICAgIFN0cmluZyBudW1iZXIgPSBycy5nZXRTdHJpbmcgKGNvbHVtbk51bWJl cik7CiAgICAgICAgICAgICAgICBpZiAoIG51bWJlciA9PSBudWxsICkgCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVPYmplY3QgPSBudWxsOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICB2YWx1ZU9iamVjdCA9IG5ldyBCaWdEZWNpbWFsIChudW1iZXIpOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGVzLkxP TkdWQVJCSU5BUlk6CiAgICAgICAgICAgIGNhc2UgVHlwZXMuVkFSQklOQVJZOgogICAgICAgICAg ICBjYXNlIFR5cGVzLkJJTkFSWToKICAgICAgICAgICAgY2FzZSBUeXBlcy5CTE9COgogICAgICAg ICAgICAgICAgdmFsdWVPYmplY3QgPSBycy5nZXRCeXRlcyAoY29sdW1uTnVtYmVyKTsKICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGNhc2UgVHlwZXMu Q0xPQjoKICAgICAgICAgICAgCS8vIHJlYWQgYW55IENMT0JzIGFzIHN0cmluZ3MKICAgICAgICAg ICAgCUNsb2IgY2xvYiA9IHJzLmdldENsb2IoY29sdW1uTnVtYmVyKTsKICAgICAgICAgICAgCWlm KCBjbG9iID09IG51bGwgKQogICAgICAgICAgICAJewogICAgICAgICAgICAJCXZhbHVlT2JqZWN0 ID0gbnVsbDsKICAgICAgICAgICAgCX0KICAgICAgICAgICAgCWVsc2UKICAgICAgICAgICAgCXsK ICAgICAgICAgICAgCQlsb25nIHJlbWFpbmluZ0xlbmd0aCA9IGNsb2IubGVuZ3RoKCk7CiAgICAg ICAgICAgIAkJbG9uZyBjdXJyZW50UG9zaXRpb24gPSAxOwogICAgICAgICAgICAJCQogICAgICAg ICAgICAJCVN0cmluZyB2YWx1ZVN0cmluZyA9ICIiOwogICAgICAgICAgICAJCXdoaWxlKCByZW1h aW5pbmdMZW5ndGggPiAwICkKICAgICAgICAgICAgCQl7CiAgICAgICAgICAgIAkJCWludCByZWFk TGVuZ3RoID0gMDsKICAgICAgICAgICAgCQkJaWYoIHJlbWFpbmluZ0xlbmd0aCA+IEludGVnZXIu TUFYX1ZBTFVFICkKICAgICAgICAgICAgCQkJewogICAgICAgICAgICAJCQkJLy8gdGhlcmUgd2ls bCBiZSBtb3JlIGl0ZXJhdGlvbnMKICAgICAgICAgICAgCQkJCXJlYWRMZW5ndGggPSBJbnRlZ2Vy Lk1BWF9WQUxVRTsKICAgICAgICAgICAgCQkJfQogICAgICAgICAgICAJCQllbHNlCiAgICAgICAg ICAgIAkJCXsKICAgICAgICAgICAgCQkJCS8vIHRoaXMgaXMgdGhlIGxhc3QgaXRlcmF0aW9uCiAg ICAgICAgICAgIAkJCQlyZWFkTGVuZ3RoID0gKGludClyZW1haW5pbmdMZW5ndGg7CiAgICAgICAg ICAgIAkJCX0KICAgICAgICAgICAgCQkJCiAgICAgICAgICAgIAkJCXZhbHVlU3RyaW5nICs9IGNs b2IuZ2V0U3ViU3RyaW5nKCBjdXJyZW50UG9zaXRpb24sIHJlYWRMZW5ndGggKTsKICAgICAgICAg ICAgCQkJY3VycmVudFBvc2l0aW9uICs9IHJlYWRMZW5ndGg7CiAgICAgICAgICAgIAkJCXJlbWFp bmluZ0xlbmd0aCAtPSByZWFkTGVuZ3RoOyAgICAgICAgICAgIAkJCQogICAgICAgICAgICAJCX0K ICAgICAgICAgICAgCQl2YWx1ZU9iamVjdCA9IHZhbHVlU3RyaW5nOwogICAgICAgICAgICAJfQog ICAgICAgICAgICAJYnJlYWs7CiAgICAgICAgICAgIAkKICAgICAgICAgICAgY2FzZSBUeXBlcy5M T05HVkFSQ0hBUjoKICAgICAgICAgICAgY2FzZSBUeXBlcy5DSEFSOgogICAgICAgICAgICBjYXNl IFR5cGVzLlZBUkNIQVI6CiAgICAgICAgICAgIGNhc2UgVHlwZXMuT1RIRVI6CiAgICAgICAgICAg ICAgICB2YWx1ZU9iamVjdCA9IHJzLmdldFN0cmluZyAoY29sdW1uTnVtYmVyKTsKICAgICAgICAg ICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBUeXBlcy5EQVRFOgogICAgICAgICAgICAg ICAgdmFsdWVPYmplY3QgPSBycy5nZXREYXRlIChjb2x1bW5OdW1iZXIpOwogICAgICAgICAgICAg ICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGVzLlRJTUU6CiAgICAgICAgICAgICAgICB2 YWx1ZU9iamVjdCA9IHJzLmdldFRpbWUgKGNvbHVtbk51bWJlcik7CiAgICAgICAgICAgICAgICBi cmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZXMuVElNRVNUQU1QOgogICAgICAgICAgICAgICAg dmFsdWVPYmplY3QgPSBycy5nZXRUaW1lc3RhbXAgKGNvbHVtbk51bWJlcik7CiAgICAgICAgICAg ICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZXMuTlVMTDoKICAgICAgICAgICAgICAg IHZhbHVlT2JqZWN0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAg ZGVmYXVsdDoKICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0ID0gcnMuZ2V0U3RyaW5nIChjb2x1 bW5OdW1iZXIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBpZiAo IHJzLndhc051bGwoKSApCiAgICAgICAgICAgIHZhbHVlT2JqZWN0ID0gbnVsbDsKICAgICAgICAg ICAgCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbHVl IG9mIHRoaXMgb2JqZWN0CiAgICAgICoKICAgICAgKiBAcGFyYW0gICB2YWx1ZQogICAgICAqLwog ICAgdm9pZCBzZXRWYWx1ZSAoT2JqZWN0IHZhbHVlKQogICAgewogICAgICAgIHRoaXMudmFsdWVP YmplY3QgPSB2YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAgKiBHZXRzIHRoZSBvYmplY3QgZnJv bSB0aGlzIFZhbHVlCiAgICAgICoKICAgICAgKiBAcmV0dXJuICAgICB0aGUgb2JqZWN0IGZyb20g dGhpcyBWYWx1ZQogICAgICAqLwogICAgT2JqZWN0IGdldFZhbHVlICgpCiAgICB7CiAgICAgICAg cmV0dXJuIHRoaXMudmFsdWVPYmplY3Q7CiAgICB9CgogICAgLyoqCiAgICAgICogVGhpcyBpcyB1 c2VkIGluIFJlY29yZCBpbiBvcmRlciB0byBkbyBhIHNhdmVXaXRoSW5zZXJ0L1VwZGF0ZS9EZWxl dGUKICAgICAgKgogICAgICAqIEBwYXJhbSAgIHN0bXQKICAgICAgKiBAcGFyYW0gICBzdG10TnVt YmVyCiAgICAgICogQGV4Y2VwdGlvbiAgIERhdGFTZXRFeGNlcHRpb24KICAgICAgKiBAZXhjZXB0 aW9uICAgU1FMRXhjZXB0aW9uCiAgICAgICovCiAgICB2b2lkIHNldFByZXBhcmVkU3RhdGVtZW50 VmFsdWUgKFByZXBhcmVkU3RhdGVtZW50IHN0bXQsCiAgICAgICAgICAgIGludCBzdG10TnVtYmVy KSB0aHJvd3MgRGF0YVNldEV4Y2VwdGlvbiwgU1FMRXhjZXB0aW9uCiAgICB7CiAgICAgICAgaWYg KGlzTnVsbCAoKSkKICAgICAgICB7CiAgICAgICAgICAgIHN0bXQuc2V0TnVsbCAoc3RtdE51bWJl ciwgdHlwZSAoKSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHN3aXRj aCAodHlwZSgpKQogICAgICAgIHsKICAgICAgICAgICAgY2FzZSBUeXBlcy5CSVQ6CiAgICAgICAg ICAgICAgICBzdG10LnNldEJvb2xlYW4gKHN0bXROdW1iZXIsIHRoaXMuYXNCb29sZWFuKCkpOwog ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGVzLlRJTllJTlQ6CiAg ICAgICAgICAgICAgICBzdG10LnNldEJ5dGUgKHN0bXROdW1iZXIsIHRoaXMuYXNCeXRlKCkpOwog ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGVzLkJJR0lOVDoKICAg ICAgICAgICAgICAgIHN0bXQuc2V0TG9uZyAoc3RtdE51bWJlciwgdGhpcy5hc0xvbmcoKSk7CiAg ICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZXMuU01BTExJTlQ6CiAg ICAgICAgICAgICAgICBzdG10LnNldFNob3J0IChzdG10TnVtYmVyLCB0aGlzLmFzU2hvcnQoKSk7 CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZXMuSU5URUdFUjoK ICAgICAgICAgICAgICAgIHN0bXQuc2V0SW50IChzdG10TnVtYmVyLCB0aGlzLmFzSW50KCkpOwog ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGVzLlJFQUw6CiAgICAg ICAgICAgICAgICBzdG10LnNldEZsb2F0IChzdG10TnVtYmVyLCB0aGlzLmFzRmxvYXQoKSk7CiAg ICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVHlwZXMuRkxPQVQ6CiAgICAg ICAgICAgIGNhc2UgVHlwZXMuRE9VQkxFOgogICAgICAgICAgICAgICAgc3RtdC5zZXREb3VibGUg KHN0bXROdW1iZXIsIHRoaXMuYXNEb3VibGUoKSk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAg ICAgICAgICAgIGNhc2UgVHlwZXMuTlVNRVJJQzoKICAgICAgICAgICAgY2FzZSBUeXBlcy5ERUNJ TUFMOgogICAgICAgICAgICAgICAgc3RtdC5zZXRCaWdEZWNpbWFsIChzdG10TnVtYmVyLCB0aGlz LmFzQmlnRGVjaW1hbCgpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2Fz ZSBUeXBlcy5MT05HVkFSQklOQVJZOgogICAgICAgICAgICBjYXNlIFR5cGVzLlZBUkJJTkFSWToK ICAgICAgICAgICAgY2FzZSBUeXBlcy5CSU5BUlk6CiAgICAgICAgICAgIGNhc2UgVHlwZXMuQkxP QjoKICAgICAgICAgICAgICAgIHN0bXQuc2V0Qnl0ZXMgKHN0bXROdW1iZXIsIHRoaXMuYXNCeXRl cygpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKCQkJY2FzZSBUeXBlcy5DTE9COgoJCQkJaWYo IE9SQUNMRV9EUklWRVJfTkFNRS5lcXVhbHMoIHN0bXQuZ2V0Q29ubmVjdGlvbigpLmdldE1ldGFE YXRhKCkuZ2V0RHJpdmVyTmFtZSgpICkgKQoJCQkJewoJCQkJCXRyeQoJCQkJCXsKCQkJCQkJLy8g c3VwcG9ydCBvcmFjbGUgY2xvYnMgd2l0aG91dCByZXF1aXJpbmcgb3JhY2xlIGxpYnJhcmllcwoJ CQkJCQkvLyBhdCBjb21waWxlIHRpbWUKCQkJCQkJLy8gTm90ZSB0aGlzIGFzc3VtZXMgdGhhdCBp ZiB5b3UgYXJlIHVzaW5nIHRoZSBPcmFjbGUgRHJpdmVyLgoJCQkJCQkvLyB0aGVuIHlvdSBoYXZl IGFjY2VzcyB0byB0aGUgb3JhY2xlLnNxbC5DTE9CIGNsYXNzCgkJCQkJCQoJCQkJCQkvLyBGaXJz dCBnZXQgdGhlIG9yYWNsZSBjbG9iIGNsYXNzCgkJCQkJCUNsYXNzIG9yYWNsZUNsb2JDbGFzcyA9 IENsYXNzLmZvck5hbWUoIm9yYWNsZS5zcWwuQ0xPQiIpOwoJCQkJCQkKCQkJCQkJLy8gbm93IGdl dCB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kCgkJCQkJCUNsYXNzIHBhcnR5cGVzW10gPSBuZXcg Q2xhc3NbM107CgkJCQkJCXBhcnR5cGVzWzBdID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5zcWwuQ29u bmVjdGlvbiIpOwoJCQkJCQlwYXJ0eXBlc1sxXSA9IEJvb2xlYW4uVFlQRTsKCQkJCQkJcGFydHlw ZXNbMl0gPSBJbnRlZ2VyLlRZUEU7CQkJCQoJCQkJCQlNZXRob2QgY3JlYXRlVGVtcG9yYXJ5TWV0 aG9kID0gb3JhY2xlQ2xvYkNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCAiY3JlYXRlVGVtcG9yYXJ5 IiwgcGFydHlwZXMgKTsKCQkJCQkJCgkJCQkJCS8vIG5vdyBnZXQgcmVhZHkgdG8gY2FsbCB0aGUg ZmFjdG9yeSBtZXRob2QKCQkJCQkJRmllbGQgZHVyYXRpb25TZXNzaW9uRmllbGQgPSBvcmFjbGVD bG9iQ2xhc3MuZ2V0RmllbGQoICJEVVJBVElPTl9TRVNTSU9OIiApOwoJCQkJCQlPYmplY3QgYXJn bGlzdFtdID0gbmV3IE9iamVjdFszXTsKCQkJCQkJYXJnbGlzdFswXSA9IHN0bXQuZ2V0Q29ubmVj dGlvbigpOwoJCQkJCQlhcmdsaXN0WzFdID0gQm9vbGVhbi5UUlVFOwoJCQkJCQlhcmdsaXN0WzJd ID0gZHVyYXRpb25TZXNzaW9uRmllbGQuZ2V0KG51bGwpOyAvL251bGwgaXMgdmFsaWQgYmVjYXVz ZSBvZiBzdGF0aWMgZmllbGQKCQkJCQkJCgkJCQkJCS8vIENyZWF0ZSBvdXIgQ0xPQgoJCQkJCQlP YmplY3QgdGVtcENsb2IgPSBjcmVhdGVUZW1wb3JhcnlNZXRob2QuaW52b2tlKCBudWxsLCBhcmds aXN0ICk7IC8vbnVsbCBpcyB2YWxpZCBiZWNhdXNlIG9mIHN0YXRpYyBtZXRob2QKCQkJCQkJCgkJ CQkJCS8vIGdldCB0aGUgb3BlbiBtZXRob2QKCQkJCQkJcGFydHlwZXMgPSBuZXcgQ2xhc3NbMV07 CgkJCQkJCXBhcnR5cGVzWzBdID0gSW50ZWdlci5UWVBFOwoJCQkJCQlNZXRob2Qgb3Blbk1ldGhv ZCA9IG9yYWNsZUNsb2JDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCggIm9wZW4iLCBwYXJ0eXBlcyAp OwoJCQkJCQkJCQkJCQkKCQkJCQkJLy8gcHJlcGFyZSB0byBjYWxsIHRoZSBtZXRob2QKCQkJCQkJ RmllbGQgbW9kZVJlYWRXcml0ZUZpZWxkID0gb3JhY2xlQ2xvYkNsYXNzLmdldEZpZWxkKCAiTU9E RV9SRUFEV1JJVEUiICk7CgkJCQkJCWFyZ2xpc3QgPSBuZXcgT2JqZWN0WzFdOwoJCQkJCQlhcmds aXN0WzBdID0gbW9kZVJlYWRXcml0ZUZpZWxkLmdldChudWxsKTsgLy9udWxsIGlzIHZhbGlkIGJl Y2F1c2Ugb2Ygc3RhdGljIGZpZWxkCgkJCQkJCQoJCQkJCQkvLyBjYWxsIG9wZW4oQ0xPQi5NT0RF X1JFQURXUklURSk7CgkJCQkJCW9wZW5NZXRob2QuaW52b2tlKCB0ZW1wQ2xvYiwgYXJnbGlzdCAp OwoJCQkJCQkKCQkJCQkJLy8gZ2V0IHRoZSBnZXRDaGFyYWN0ZXJPdXRwdXRTdHJlYW0gbWV0aG9k CgkJCQkJCU1ldGhvZCBnZXRDaGFyYWN0ZXJPdXRwdXRTdHJlYW1NZXRob2QgPSBvcmFjbGVDbG9i Q2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoICJnZXRDaGFyYWN0ZXJPdXRwdXRTdHJlYW0iLCBudWxs ICk7CgkJCQkJCQoJCQkJCQkvLyBjYWxsIHRoZSBnZXRDaGFyYWN0ZXJPdXRwaXRTdHJlYW0gbWV0 aG9kCgkJCQkJCVdyaXRlciB0ZW1wQ2xvYldyaXRlciA9IChXcml0ZXIpIGdldENoYXJhY3Rlck91 dHB1dFN0cmVhbU1ldGhvZC5pbnZva2UoIHRlbXBDbG9iLCBudWxsICk7CgkJCQkJCQoJCQkJCQkv LyB3cml0ZSB0aGUgc3RyaW5nIHRvIHRoZSBjbG9iCgkJCQkJCXRlbXBDbG9iV3JpdGVyLndyaXRl KHRoaXMuYXNTdHJpbmcoKSk7IAoJCQkJCQl0ZW1wQ2xvYldyaXRlci5mbHVzaCgpOwoJCQkJCQl0 ZW1wQ2xvYldyaXRlci5jbG9zZSgpOyAKCQkJCQkJCgkJCQkJCS8vIGdldCB0aGUgY2xvc2UgbWV0 aG9kCgkJCQkJCU1ldGhvZCBjbG9zZU1ldGhvZCA9IG9yYWNsZUNsb2JDbGFzcy5nZXREZWNsYXJl ZE1ldGhvZCggImNsb3NlIiwgbnVsbCApOwoJCQkJCQkKCQkJCQkJLy8gY2FsbCB0aGUgY2xvc2Ug bWV0aG9kCgkJCQkJCWNsb3NlTWV0aG9kLmludm9rZSggdGVtcENsb2IsIG51bGwgKTsKCQkJCQkJ CgkJCQkJCS8vIGFkZCB0aGUgY2xvYiB0byB0aGUgc3RhdGVtZW50CgkJCQkJCXN0bXQuc2V0Q2xv Yiggc3RtdE51bWJlciwgKENsb2IpdGVtcENsb2IgKTsKCQkJCQl9CgkJCQkJY2F0Y2goIENsYXNz Tm90Rm91bmRFeGNlcHRpb24gZSApCgkJCQkJewoJCQkJCQkvLyBjb3VsZCBub3QgZmluZCB0aGUg Y2xhc3Mgd2l0aCByZWZsZWN0aW9uCgkJCQkJCXRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9uKCJV bmFibGUgdG8gZmluZCBhIHJlcXVpcmVkIGNsYXNzLlxuIiArIGUuZ2V0TWVzc2FnZSgpKTsKCQkJ CQl9CgkJCQkJY2F0Y2goIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlICkKCQkJCQl7CgkJCQkJCS8v IGNvdWxkIG5vdCBmaW5kIHRoZSBtZXRobyB3aXRoIHJlZmxlY3Rpb24KCQkJCQkJdGhyb3cgbmV3 IERhdGFTZXRFeGNlcHRpb24oIlVuYWJsZSB0byBmaW5kIGEgcmVxdWlyZWQgbWV0aG9kLlxuIiAr IGUuZ2V0TWVzc2FnZSgpKTsKCQkJCQl9CgkJCQkJY2F0Y2goIE5vU3VjaEZpZWxkRXhjZXB0aW9u IGUgKQoJCQkJCXsKCQkJCQkJLy8gY291bGQgbm90IGZpbmQgdGhlIGZpZWxkIHdpdGggcmVmbGVj dGlvbgoJCQkJCQl0aHJvdyBuZXcgRGF0YVNldEV4Y2VwdGlvbigiVW5hYmxlIHRvIGZpbmQgYSBy ZXF1aXJlZCBmaWVsZC5cbiIgKyBlLmdldE1lc3NhZ2UoKSk7CgkJCQkJfQoJCQkJCWNhdGNoKCBJ bGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUgKQoJCQkJCXsKCQkJCQkJdGhyb3cgbmV3IERhdGFTZXRF eGNlcHRpb24oIlVuYWJsZSB0byBhY2Nlc3MgYSByZXF1aXJlZCBtZXRob2Qgb3IgZmllbGQuXG4i ICsgZS5nZXRNZXNzYWdlKCkpOwoJCQkJCX0KCQkJCQljYXRjaCggSW52b2NhdGlvblRhcmdldEV4 Y2VwdGlvbiBlICkKCQkJCQl7CgkJCQkJCXRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9uKGUuZ2V0 TWVzc2FnZSgpKTsKCQkJCQl9CgkJCQkJY2F0Y2goIElPRXhjZXB0aW9uIGUgKQoJCQkJCXsKCQkJ CQkJdGhyb3cgbmV3IERhdGFTZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOyAKCQkJCQl9CgkJ CQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJc3RtdC5zZXRTdHJpbmcoIHN0bXROdW1iZXIsIHRoaXMu YXNTdHJpbmcoKSApOwoJCQkJfQoJCQkJCgkJCQlicmVhazsKCQkJCQogICAgICAgICAgICBjYXNl IFR5cGVzLkxPTkdWQVJDSEFSOgogICAgICAgICAgICBjYXNlIFR5cGVzLkNIQVI6CiAgICAgICAg ICAgIGNhc2UgVHlwZXMuVkFSQ0hBUjoKICAgICAgICAgICAgY2FzZSBUeXBlcy5PVEhFUjoKICAg ICAgICAgICAgICAgIHN0bXQuc2V0U3RyaW5nIChzdG10TnVtYmVyLCB0aGlzLmFzU3RyaW5nKCkp OwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGVzLkRBVEU6CiAg ICAgICAgICAgICAgICBzdG10LnNldERhdGUgKHN0bXROdW1iZXIsIHRoaXMuYXNEYXRlKCkpOwog ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGVzLlRJTUU6CiAgICAg ICAgICAgICAgICBzdG10LnNldFRpbWUgKHN0bXROdW1iZXIsIHRoaXMuYXNUaW1lKCkpOwogICAg ICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGVzLlRJTUVTVEFNUDoKICAg ICAgICAgICAgICAgIHN0bXQuc2V0VGltZXN0YW1wIChzdG10TnVtYmVyLCB0aGlzLmFzVGltZXN0 YW1wKCkpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFR5cGVzLk5V TEw6CiAgICAgICAgICAgICAgICBzdG10LnNldE51bGwgKHN0bXROdW1iZXIsIDApOwogICAgICAg ICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgc3Rt dC5zZXRTdHJpbmcgKHN0bXROdW1iZXIsIHRoaXMuYXNTdHJpbmcoKSk7CiAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgc3Ry aW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0CiAgICAgICoKICAgICAgKiBAcmV0dXJu ICAgICBhIHN0cmluZwogICAgICAqLwogICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgICB7 CiAgICAgICAgcmV0dXJuIHRoaXMuYXNTdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAgKiBS ZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QKICAgICAgKgog ICAgICAqIEByZXR1cm4gICAgIGEgc3RyaW5nCiAgICAgICovCiAgICBwdWJsaWMgU3RyaW5nIGFz U3RyaW5nKCkKICAgIHsKICAgICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgICAgIHJldHVybiBu dWxsOwogICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKCkpCiAgICAgICAgICAgIHJldHVybiAoU3Ry aW5nKSB2YWx1ZU9iamVjdDsKICAgICAgICBlbHNlIGlmIChpc0J5dGVzKCkpCiAgICAgICAgICAg IHJldHVybiBuZXcgU3RyaW5nICgoYnl0ZVtdKSB2YWx1ZU9iamVjdCk7CiAgICAgICAgZWxzZQog ICAgICAgICAgICByZXR1cm4gdmFsdWVPYmplY3QudG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioK ICAgICAgKiBHZXQgdGhlIHZhbHVlIGFzIGEgQmlnRGVjaW1hbAogICAgICAqCiAgICAgICogQHJl dHVybiAgICAgYSBCaWdEZWNpbWFsCiAgICAgICogQGV4Y2VwdGlvbiAgIERhdGFTZXRFeGNlcHRp b24KICAgICAgKi8KICAgIHB1YmxpYyBCaWdEZWNpbWFsIGFzQmlnRGVjaW1hbCgpIHRocm93cyBE YXRhU2V0RXhjZXB0aW9uCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBp ZiAoaXNOdWxsKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgZWxz ZSBpZiAoaXNCaWdEZWNpbWFsKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKEJpZ0RlY2ltYWwp IHZhbHVlT2JqZWN0OwogICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZygpIHx8IGlzRG91Ymxl KCkgfHwgaXNGbG9hdCgpIHx8IGlzSW50KCkgfHwKICAgICAgICAgICAgICAgICAgICBpc0xvbmco KSB8fCBpc1Nob3J0KCkgfHwgaXNCeXRlKCkgKQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBC aWdEZWNpbWFsIChhc1N0cmluZygpKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg cmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKICAgICAg ICB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9uKCJJbGxlZ2FsIGNvbnZl cnNpb246ICIgKwogICAgICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgfQog ICAgfQoKICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgYXMgYSBCaWdEZWNpbWFsCiAgICAg ICoKICAgICAgKiBAcmV0dXJuICAgICBhIEJpZ0RlY2ltYWwKICAgICAgKiBAZXhjZXB0aW9uICAg RGF0YVNldEV4Y2VwdGlvbgogICAgICAqLwogICAgcHVibGljIEJpZ0RlY2ltYWwgYXNCaWdEZWNp bWFsKGludCBzY2FsZSkgdGhyb3dzIERhdGFTZXRFeGNlcHRpb24KICAgIHsKICAgICAgICB0cnkK ICAgICAgICB7CiAgICAgICAgICAgIGlmIChpc051bGwoKSkKICAgICAgICAgICAgICAgIHJldHVy biBudWxsOwogICAgICAgICAgICBlbHNlIGlmIChpc0JpZ0RlY2ltYWwoKSkKICAgICAgICAgICAg ICAgIHJldHVybiAoKEJpZ0RlY2ltYWwpIHZhbHVlT2JqZWN0KS5zZXRTY2FsZSAoc2NhbGUpOwog ICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZygpIHx8IGlzRG91YmxlKCkgfHwgaXNGbG9hdCgp IHx8IGlzSW50KCkgfHwKICAgICAgICAgICAgICAgICAgICBpc0xvbmcoKSB8fCBpc1Nob3J0KCkg fHwgaXNCeXRlKCkgKQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsIChhc1N0 cmluZygpKS5zZXRTY2FsZSAoc2NhbGUpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQogICAg ICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERhdGFTZXRFeGNlcHRpb24oIkJhZCBjb252ZXJz aW9uOiAiICsgZS50b1N0cmluZygpKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgICog R2V0IHRoZSB2YWx1ZSBhcyBhIGFzQm9vbGVhbgogICAgICAqCiAgICAgICogQHJldHVybiAgICAg YSBib29sZWFuCiAgICAgICogQGV4Y2VwdGlvbiAgIERhdGFTZXRFeGNlcHRpb24KICAgICAgKi8K ICAgIHB1YmxpYyBib29sZWFuIGFzQm9vbGVhbigpIHRocm93cyBEYXRhU2V0RXhjZXB0aW9uCiAg ICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNOdWxsKCkpCiAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhbigp KQogICAgICAgICAgICAgICAgcmV0dXJuICgoQm9vbGVhbikgdmFsdWVPYmplY3QpLmJvb2xlYW5W YWx1ZSgpOwoKICAgICAgICAgICAgU3RyaW5nIGNoZWNrID0gYXNTdHJpbmcoKTsKICAgICAgICAg ICAgaWYgKGNoZWNrID09IG51bGwpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg ICAgICAgIGVsc2UgaWYgKGlzVHJ1ZShjaGVjaykpCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1 ZTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg IH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCiAgICAgICAgewogICAgICAgICAgICB0aHJv dyBuZXcgRGF0YVNldEV4Y2VwdGlvbigiQmFkIGNvbnZlcnNpb246ICIgKyBlLnRvU3RyaW5nKCkp OwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIGFzIGEgQm9v bGVhbiBvYmplY3QKICAgICAgKgogICAgICAqIEByZXR1cm4gICAgIGEgQm9vbGVhbgogICAgICAq IEBleGNlcHRpb24gICBEYXRhU2V0RXhjZXB0aW9uCiAgICAgICovCiAgICBwdWJsaWMgQm9vbGVh biBhc0Jvb2xlYW5PYmooKSB0aHJvd3MgRGF0YVNldEV4Y2VwdGlvbgogICAgewogICAgICAgIHRy eQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICAgICAgICAgcmV0 dXJuIG51bGw7CiAgICAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhbigpKQogICAgICAgICAgICAg ICAgcmV0dXJuIChCb29sZWFuKXZhbHVlT2JqZWN0OwoKICAgICAgICAgICAgU3RyaW5nIGNoZWNr ID0gYXNTdHJpbmcoKTsKICAgICAgICAgICAgaWYgKGNoZWNrID09IG51bGwpCiAgICAgICAgICAg ICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgZWxzZSBpZiAoaXNUcnVlKGNoZWNrKSkKICAg ICAgICAgICAgICAgIHJldHVybiBCb29sZWFuLlRSVUU7CiAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIHJldHVybiBCb29sZWFuLkZBTFNFOwogICAgICAgIH0KICAgICAgICBjYXRjaCAo RXhjZXB0aW9uIGUpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBuZXcgRGF0YVNldEV4Y2Vw dGlvbigiQmFkIGNvbnZlcnNpb246ICIgKyBlLnRvU3RyaW5nKCkpOwogICAgICAgIH0KICAgIH0K CgogICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBhcyBhIGFzSW50CiAgICAgICoKICAgICAg KiBAcmV0dXJuICAgICBhbiBpbnQKICAgICAgKiBAZXhjZXB0aW9uICAgRGF0YVNldEV4Y2VwdGlv bgogICAgICAqLwogICAgcHVibGljIGludCBhc0ludCgpIHRocm93cyBEYXRhU2V0RXhjZXB0aW9u CiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNOdWxsKCkpCiAg ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQoKSkKICAg ICAgICAgICAgICAgIHJldHVybiAoKEludGVnZXIpIHZhbHVlT2JqZWN0KS5pbnRWYWx1ZSgpOwog ICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZygpKQogICAgICAgICAgICAgICAgcmV0dXJuIElu dGVnZXIudmFsdWVPZigoU3RyaW5nKSB2YWx1ZU9iamVjdCkuaW50VmFsdWUoKTsKICAgICAgICAg ICAgZWxzZSBpZiAoaXNMb25nKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChMb25nKSB2YWx1 ZU9iamVjdCkuaW50VmFsdWUoKTsKICAgICAgICAgICAgZWxzZSBpZiAoaXNEb3VibGUoKSkKICAg ICAgICAgICAgICAgIHJldHVybiAoKERvdWJsZSkgdmFsdWVPYmplY3QpLmludFZhbHVlKCk7CiAg ICAgICAgICAgIGVsc2UgaWYgKGlzRmxvYXQoKSkKICAgICAgICAgICAgICAgIHJldHVybiAoKEZs b2F0KSB2YWx1ZU9iamVjdCkuaW50VmFsdWUoKTsKICAgICAgICAgICAgZWxzZSBpZiAoaXNCaWdE ZWNpbWFsKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChCaWdEZWNpbWFsKSB2YWx1ZU9iamVj dCkuaW50VmFsdWUoKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIElu dGVnZXIudmFsdWVPZihhc1N0cmluZygpKS5pbnRWYWx1ZSgpOwogICAgICAgIH0KICAgICAgICBj YXRjaCAoRXhjZXB0aW9uIGUpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBuZXcgRGF0YVNl dEV4Y2VwdGlvbigiQmFkIGNvbnZlcnNpb246ICIgKyBlLnRvU3RyaW5nKCkpOwogICAgICAgIH0K ICAgIH0KCiAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIGFzIGEgSW50ZWdlciBPamJlY3QK ICAgICAgKgogICAgICAqIEByZXR1cm4gICAgIGFuIEludGVnZXIKICAgICAgKiBAZXhjZXB0aW9u ICAgRGF0YVNldEV4Y2VwdGlvbgogICAgICAqLwogICAgcHVibGljIEludGVnZXIgYXNJbnRlZ2Vy T2JqKCkgdGhyb3dzIERhdGFTZXRFeGNlcHRpb24KICAgIHsKICAgICAgICB0cnkKICAgICAgICB7 CiAgICAgICAgICAgIGlmIChpc051bGwoKSkKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwog ICAgICAgICAgICBlbHNlIGlmIChpc0ludCgpKQogICAgICAgICAgICAgICAgcmV0dXJuICgoSW50 ZWdlcikgdmFsdWVPYmplY3QpOwogICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZygpIHx8IGlz RG91YmxlKCkgfHwgaXNGbG9hdCgpIHx8IGlzQmlnRGVjaW1hbCgpIHx8CiAgICAgICAgICAgICAg ICAgICAgaXNMb25nKCkgfHwgaXNTaG9ydCgpIHx8IGlzQnl0ZSgpICkKICAgICAgICAgICAgICAg IHJldHVybiBuZXcgSW50ZWdlciAoYXNTdHJpbmcoKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIHRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9uKCJJbnZhbGlkIHR5cGUgZm9yIElu dGVnZXIiKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQogICAgICAgIHsK ICAgICAgICAgICAgdGhyb3cgbmV3IERhdGFTZXRFeGNlcHRpb24oIklsbGVnYWwgY29udmVyc2lv bjogIiArCiAgICAgICAgICAgICAgICAgICAgZS50b1N0cmluZygpKTsKICAgICAgICB9CiAgICB9 CgogICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBhcyBhIGFzQnl0ZQogICAgICAqCiAgICAg ICogQHJldHVybiAgICAgYSBieXRlCiAgICAgICogQGV4Y2VwdGlvbiAgIERhdGFTZXRFeGNlcHRp b24KICAgICAgKi8KICAgIHB1YmxpYyBieXRlIGFzQnl0ZSgpIHRocm93cyBEYXRhU2V0RXhjZXB0 aW9uCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNOdWxsKCkp CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgZWxzZSBpZiAoaXNCeXRlKCkp CiAgICAgICAgICAgICAgICByZXR1cm4gKChCeXRlKSB2YWx1ZU9iamVjdCkuYnl0ZVZhbHVlKCk7 CiAgICAgICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKCkpCiAgICAgICAgICAgICAgICByZXR1cm4g SW50ZWdlci52YWx1ZU9mKChTdHJpbmcpIHZhbHVlT2JqZWN0KS5ieXRlVmFsdWUoKTsKICAgICAg ICAgICAgZWxzZSBpZiAoaXNTaG9ydCgpKQogICAgICAgICAgICAgICAgcmV0dXJuICgoU2hvcnQp IHZhbHVlT2JqZWN0KS5ieXRlVmFsdWUoKTsKICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQoKSkK ICAgICAgICAgICAgICAgIHJldHVybiAoKEludGVnZXIpIHZhbHVlT2JqZWN0KS5ieXRlVmFsdWUo KTsKICAgICAgICAgICAgZWxzZSBpZiAoaXNMb25nKCkpCiAgICAgICAgICAgICAgICByZXR1cm4g KChMb25nKSB2YWx1ZU9iamVjdCkuYnl0ZVZhbHVlKCk7CiAgICAgICAgICAgIGVsc2UgaWYgKGlz RG91YmxlKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChEb3VibGUpIHZhbHVlT2JqZWN0KS5i eXRlVmFsdWUoKTsKICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdCgpKQogICAgICAgICAgICAg ICAgcmV0dXJuICgoRmxvYXQpIHZhbHVlT2JqZWN0KS5ieXRlVmFsdWUoKTsKICAgICAgICAgICAg ZWxzZSBpZiAoaXNCaWdEZWNpbWFsKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChCaWdEZWNp bWFsKSB2YWx1ZU9iamVjdCkuYnl0ZVZhbHVlKCk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIHJldHVybiBJbnRlZ2VyLnZhbHVlT2YoYXNTdHJpbmcoKSkuYnl0ZVZhbHVlKCk7CiAg ICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKICAgICAgICB7CiAgICAgICAgICAg IHRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9uKCJCYWQgY29udmVyc2lvbjogIiArIGUudG9TdHJp bmcoKSk7CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIGFz IGEgQnl0ZSBPYmplY3QKICAgICAgKgogICAgICAqIEByZXR1cm4gICAgIGEgQnl0ZQogICAgICAq IEBleGNlcHRpb24gICBEYXRhU2V0RXhjZXB0aW9uCiAgICAgICovCiAgICBwdWJsaWMgQnl0ZSBh c0J5dGVPYmooKSB0aHJvd3MgRGF0YVNldEV4Y2VwdGlvbgogICAgewogICAgICAgIHRyeQogICAg ICAgIHsKICAgICAgICAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICAgICAgICAgcmV0dXJuIG51 bGw7CiAgICAgICAgICAgIGVsc2UgaWYgKGlzQnl0ZSgpKQogICAgICAgICAgICAgICAgcmV0dXJu ICgoQnl0ZSkgdmFsdWVPYmplY3QpOwogICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZygpIHx8 IGlzRG91YmxlKCkgfHwgaXNGbG9hdCgpIHx8IGlzSW50KCkgfHwKICAgICAgICAgICAgICAgICAg ICBpc0xvbmcoKSB8fCBpc1Nob3J0KCkgfHwgaXNCaWdEZWNpbWFsKCkgKQogICAgICAgICAgICAg ICAgcmV0dXJuIG5ldyBCeXRlKGFzU3RyaW5nKCkpOwogICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICB0aHJvdyBuZXcgRGF0YVNldEV4Y2VwdGlvbigiSW52YWxpZCB0eXBlIGZvciBCeXRl Iik7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKICAgICAgICB7CiAgICAg ICAgICAgIHRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9uKCJJbGxlZ2FsIGNvbnZlcnNpb246ICIg KwogICAgICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgfQogICAgfQoKCiAg ICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIGFzIGEgYXNCeXRlcwogICAgICAqCiAgICAgICog QHJldHVybiAgICAgYSBieXRlIGFycmF5CiAgICAgICogQGV4Y2VwdGlvbiAgIERhdGFTZXRFeGNl cHRpb24KICAgICAgKi8KICAgIHB1YmxpYyBieXRlW10gYXNCeXRlcygpIHRocm93cyBEYXRhU2V0 RXhjZXB0aW9uCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNO dWxsKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgZWxzZSBpZiAo aXNCeXRlcygpKQogICAgICAgICAgICAgICAgcmV0dXJuIChieXRlW10pIHZhbHVlT2JqZWN0Owog ICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZygpKQogICAgICAgICAgICAgICAgcmV0dXJuICgo U3RyaW5nKSB2YWx1ZU9iamVjdCkuZ2V0Qnl0ZXMoKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2gg KEV4Y2VwdGlvbiBlKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERhdGFTZXRFeGNl cHRpb24oIkJhZCBjb252ZXJzaW9uOiAiICsgZS50b1N0cmluZygpKTsKICAgICAgICB9CiAgICAg ICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBhcyBh IGFzU2hvcnQKICAgICAgKgogICAgICAqIEByZXR1cm4gICAgIGEgc2hvcnQKICAgICAgKiBAZXhj ZXB0aW9uICAgRGF0YVNldEV4Y2VwdGlvbgogICAgICAqLwogICAgcHVibGljIHNob3J0IGFzU2hv cnQoKSB0aHJvd3MgRGF0YVNldEV4Y2VwdGlvbgogICAgewogICAgICAgIHRyeQogICAgICAgIHsK ICAgICAgICAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg ICAgICAgIGVsc2UgaWYgKGlzU2hvcnQoKSkKICAgICAgICAgICAgICAgIHJldHVybiAoKFNob3J0 KSB2YWx1ZU9iamVjdCkuc2hvcnRWYWx1ZSgpOwogICAgICAgICAgICBlbHNlIGlmIChpc1N0cmlu ZygpKQogICAgICAgICAgICAgICAgcmV0dXJuIEludGVnZXIudmFsdWVPZigoU3RyaW5nKSB2YWx1 ZU9iamVjdCkuc2hvcnRWYWx1ZSgpOwogICAgICAgICAgICBlbHNlIGlmIChpc0ludCgpKQogICAg ICAgICAgICAgICAgcmV0dXJuICgoSW50ZWdlcikgdmFsdWVPYmplY3QpLnNob3J0VmFsdWUoKTsK ICAgICAgICAgICAgZWxzZSBpZiAoaXNMb25nKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChM b25nKSB2YWx1ZU9iamVjdCkuc2hvcnRWYWx1ZSgpOwogICAgICAgICAgICBlbHNlIGlmIChpc0Rv dWJsZSgpKQogICAgICAgICAgICAgICAgcmV0dXJuICgoRG91YmxlKSB2YWx1ZU9iamVjdCkuc2hv cnRWYWx1ZSgpOwogICAgICAgICAgICBlbHNlIGlmIChpc0Zsb2F0KCkpCiAgICAgICAgICAgICAg ICByZXR1cm4gKChGbG9hdCkgdmFsdWVPYmplY3QpLnNob3J0VmFsdWUoKTsKICAgICAgICAgICAg ZWxzZSBpZiAoaXNCaWdEZWNpbWFsKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChCaWdEZWNp bWFsKSB2YWx1ZU9iamVjdCkuc2hvcnRWYWx1ZSgpOwogICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICByZXR1cm4gSW50ZWdlci52YWx1ZU9mKGFzU3RyaW5nKCkpLnNob3J0VmFsdWUoKTsK ICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQogICAgICAgIHsKICAgICAgICAg ICAgdGhyb3cgbmV3IERhdGFTZXRFeGNlcHRpb24oIkJhZCBjb252ZXJzaW9uOiAiICsgZS50b1N0 cmluZygpKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBh cyBhIFNob3J0IE9iamVjdAogICAgICAqCiAgICAgICogQHJldHVybiAgICAgYSBTaG9ydAogICAg ICAqIEBleGNlcHRpb24gICBEYXRhU2V0RXhjZXB0aW9uCiAgICAgICovCiAgICBwdWJsaWMgU2hv cnQgYXNTaG9ydE9iaigpIHRocm93cyBEYXRhU2V0RXhjZXB0aW9uCiAgICB7CiAgICAgICAgdHJ5 CiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgICAgICAgICByZXR1 cm4gbnVsbDsKICAgICAgICAgICAgZWxzZSBpZiAoaXNTaG9ydCgpKQogICAgICAgICAgICAgICAg cmV0dXJuICgoU2hvcnQpIHZhbHVlT2JqZWN0KTsKICAgICAgICAgICAgZWxzZSBpZiAoaXNTdHJp bmcoKSB8fCBpc0RvdWJsZSgpIHx8IGlzRmxvYXQoKSB8fCBpc0ludCgpIHx8CiAgICAgICAgICAg ICAgICAgICAgaXNMb25nKCkgfHwgaXNCaWdEZWNpbWFsKCkgfHwgaXNCeXRlKCkgKQogICAgICAg ICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydCAoYXNTdHJpbmcoKSk7CiAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIHRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9uKCJJbnZhbGlkIHR5cGUg Zm9yIFNob3J0Iik7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKICAgICAg ICB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9uKCJJbGxlZ2FsIGNvbnZl cnNpb246ICIgKwogICAgICAgICAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CiAgICAgICAgfQog ICAgfQoKICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgYXMgYSBhc0xvbmcKICAgICAgKgog ICAgICAqIEByZXR1cm4gICAgIGEgbG9uZwogICAgICAqIEBleGNlcHRpb24gICBEYXRhU2V0RXhj ZXB0aW9uCiAgICAgICovCiAgICBwdWJsaWMgbG9uZyBhc0xvbmcoKSB0aHJvd3MgRGF0YVNldEV4 Y2VwdGlvbgogICAgewogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGlzTnVs bCgpKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIGVsc2UgaWYgKGlzTG9u ZygpKQogICAgICAgICAgICAgICAgcmV0dXJuICgoTG9uZykgdmFsdWVPYmplY3QpLmxvbmdWYWx1 ZSgpOwogICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZygpKQogICAgICAgICAgICAgICAgcmV0 dXJuIEludGVnZXIudmFsdWVPZigoU3RyaW5nKSB2YWx1ZU9iamVjdCkubG9uZ1ZhbHVlKCk7CiAg ICAgICAgICAgIGVsc2UgaWYgKGlzU2hvcnQoKSkKICAgICAgICAgICAgICAgIHJldHVybiAoKFNo b3J0KSB2YWx1ZU9iamVjdCkubG9uZ1ZhbHVlKCk7CiAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50 KCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChJbnRlZ2VyKSB2YWx1ZU9iamVjdCkubG9uZ1Zh bHVlKCk7CiAgICAgICAgICAgIGVsc2UgaWYgKGlzRG91YmxlKCkpCiAgICAgICAgICAgICAgICBy ZXR1cm4gKChEb3VibGUpIHZhbHVlT2JqZWN0KS5sb25nVmFsdWUoKTsKICAgICAgICAgICAgZWxz ZSBpZiAoaXNGbG9hdCgpKQogICAgICAgICAgICAgICAgcmV0dXJuICgoRmxvYXQpIHZhbHVlT2Jq ZWN0KS5sb25nVmFsdWUoKTsKICAgICAgICAgICAgZWxzZSBpZiAoaXNCaWdEZWNpbWFsKCkpCiAg ICAgICAgICAgICAgICByZXR1cm4gKChCaWdEZWNpbWFsKSB2YWx1ZU9iamVjdCkubG9uZ1ZhbHVl KCk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLnZhbHVl T2YoYXNTdHJpbmcoKSkubG9uZ1ZhbHVlKCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNl cHRpb24gZSkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9u KCJCYWQgY29udmVyc2lvbjogIiArIGUudG9TdHJpbmcoKSk7CiAgICAgICAgfQogICAgfQoKICAg IC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgYXMgYSBMb25nIE9iamVjdAogICAgICAqCiAgICAg ICogQHJldHVybiAgICAgYSBMb25nCiAgICAgICogQGV4Y2VwdGlvbiAgIERhdGFTZXRFeGNlcHRp b24KICAgICAgKi8KICAgIHB1YmxpYyBMb25nIGFzTG9uZ09iaigpIHRocm93cyBEYXRhU2V0RXhj ZXB0aW9uCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNOdWxs KCkpCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgZWxzZSBpZiAoaXNM b25nKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChMb25nKSB2YWx1ZU9iamVjdCk7CiAgICAg ICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKCkgfHwgaXNEb3VibGUoKSB8fCBpc0Zsb2F0KCkgfHwg aXNJbnQoKSB8fAogICAgICAgICAgICAgICAgICAgIGlzQmlnRGVjaW1hbCgpIHx8IGlzU2hvcnQo KSB8fCBpc0J5dGUoKSApCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcgKGFzU3RyaW5n KCkpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRGF0YVNldEV4 Y2VwdGlvbigiSW52YWxpZCB0eXBlIGZvciBMb25nIik7CiAgICAgICAgfQogICAgICAgIGNhdGNo IChFeGNlcHRpb24gZSkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhU2V0RXhj ZXB0aW9uKCJJbGxlZ2FsIGNvbnZlcnNpb246ICIgKwogICAgICAgICAgICAgICAgICAgIGUudG9T dHJpbmcoKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUg YXMgYSBhc0RvdWJsZQogICAgICAqCiAgICAgICogQHJldHVybiAgICAgYSBkb3VibGUKICAgICAg KiBAZXhjZXB0aW9uICAgRGF0YVNldEV4Y2VwdGlvbgogICAgICAqLwogICAgcHVibGljIGRvdWJs ZSBhc0RvdWJsZSgpIHRocm93cyBEYXRhU2V0RXhjZXB0aW9uCiAgICB7CiAgICAgICAgdHJ5CiAg ICAgICAgewogICAgICAgICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgICAgICAgICByZXR1cm4g MC4wRDsKICAgICAgICAgICAgZWxzZSBpZiAoaXNEb3VibGUoKSkKICAgICAgICAgICAgICAgIHJl dHVybiAoKERvdWJsZSkgdmFsdWVPYmplY3QpLmRvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgIGVs c2UgaWYgKGlzU3RyaW5nKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdlci52YWx1ZU9m KChTdHJpbmcpIHZhbHVlT2JqZWN0KS5kb3VibGVWYWx1ZSgpOwogICAgICAgICAgICBlbHNlIGlm IChpc1Nob3J0KCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChTaG9ydCkgdmFsdWVPYmplY3Qp LmRvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50KCkpCiAgICAgICAgICAg ICAgICByZXR1cm4gKChJbnRlZ2VyKSB2YWx1ZU9iamVjdCkuZG91YmxlVmFsdWUoKTsKICAgICAg ICAgICAgZWxzZSBpZiAoaXNMb25nKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChMb25nKSB2 YWx1ZU9iamVjdCkuZG91YmxlVmFsdWUoKTsKICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdCgp KQogICAgICAgICAgICAgICAgcmV0dXJuICgoRmxvYXQpIHZhbHVlT2JqZWN0KS5kb3VibGVWYWx1 ZSgpOwogICAgICAgICAgICBlbHNlIGlmIChpc0JpZ0RlY2ltYWwoKSkKICAgICAgICAgICAgICAg IHJldHVybiAoKEJpZ0RlY2ltYWwpIHZhbHVlT2JqZWN0KS5kb3VibGVWYWx1ZSgpOwogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdlci52YWx1ZU9mKGFzU3RyaW5n KCkpLmRvdWJsZVZhbHVlKCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkK ICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9uKCJCYWQgY29u dmVyc2lvbjogIiArIGUudG9TdHJpbmcoKSk7CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAg ICAgKiBHZXQgdGhlIHZhbHVlIGFzIGEgRG91YmxlIE9iamVjdAogICAgICAqCiAgICAgICogQHJl dHVybiAgICAgYSBEb3VibGUKICAgICAgKiBAZXhjZXB0aW9uICAgRGF0YVNldEV4Y2VwdGlvbgog ICAgICAqLwogICAgcHVibGljIERvdWJsZSBhc0RvdWJsZU9iaigpIHRocm93cyBEYXRhU2V0RXhj ZXB0aW9uCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNOdWxs KCkpCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgZWxzZSBpZiAoaXNE b3VibGUoKSkKICAgICAgICAgICAgICAgIHJldHVybiAoKERvdWJsZSkgdmFsdWVPYmplY3QpOwog ICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZygpIHx8IGlzQmlnRGVjaW1hbCgpIHx8IGlzRmxv YXQoKSB8fCBpc0ludCgpIHx8CiAgICAgICAgICAgICAgICAgICAgaXNMb25nKCkgfHwgaXNTaG9y dCgpIHx8IGlzQnl0ZSgpICkKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlIChhc1N0 cmluZygpKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IERhdGFT ZXRFeGNlcHRpb24oIkludmFsaWQgdHlwZSBmb3IgRG91YmxlIik7CiAgICAgICAgfQogICAgICAg IGNhdGNoIChFeGNlcHRpb24gZSkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRh U2V0RXhjZXB0aW9uKCJJbGxlZ2FsIGNvbnZlcnNpb246ICIgKwogICAgICAgICAgICAgICAgICAg IGUudG9TdHJpbmcoKSk7CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAgICAgKiBHZXQgdGhl IHZhbHVlIGFzIGEgYXNGbG9hdAogICAgICAqCiAgICAgICogQHJldHVybiAgICAgYSBmbG9hdAog ICAgICAqIEBleGNlcHRpb24gICBEYXRhU2V0RXhjZXB0aW9uCiAgICAgICovCiAgICBwdWJsaWMg ZmxvYXQgYXNGbG9hdCgpIHRocm93cyBEYXRhU2V0RXhjZXB0aW9uCiAgICB7CiAgICAgICAgdHJ5 CiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgICAgICAgICByZXR1 cm4gMC4wRjsKICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdCgpKQogICAgICAgICAgICAgICAg cmV0dXJuICgoRmxvYXQpIHZhbHVlT2JqZWN0KS5mbG9hdFZhbHVlKCk7CiAgICAgICAgICAgIGVs c2UgaWYgKGlzU3RyaW5nKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdlci52YWx1ZU9m KChTdHJpbmcpIHZhbHVlT2JqZWN0KS5mbG9hdFZhbHVlKCk7CiAgICAgICAgICAgIGVsc2UgaWYg KGlzU2hvcnQoKSkKICAgICAgICAgICAgICAgIHJldHVybiAoKFNob3J0KSB2YWx1ZU9iamVjdCku ZmxvYXRWYWx1ZSgpOwogICAgICAgICAgICBlbHNlIGlmIChpc0ludCgpKQogICAgICAgICAgICAg ICAgcmV0dXJuICgoSW50ZWdlcikgdmFsdWVPYmplY3QpLmZsb2F0VmFsdWUoKTsKICAgICAgICAg ICAgZWxzZSBpZiAoaXNMb25nKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKChMb25nKSB2YWx1 ZU9iamVjdCkuZmxvYXRWYWx1ZSgpOwogICAgICAgICAgICBlbHNlIGlmIChpc0RvdWJsZSgpKQog ICAgICAgICAgICAgICAgcmV0dXJuICgoRG91YmxlKSB2YWx1ZU9iamVjdCkuZmxvYXRWYWx1ZSgp OwogICAgICAgICAgICBlbHNlIGlmIChpc0JpZ0RlY2ltYWwoKSkKICAgICAgICAgICAgICAgIHJl dHVybiAoKEJpZ0RlY2ltYWwpIHZhbHVlT2JqZWN0KS5mbG9hdFZhbHVlKCk7CiAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLnZhbHVlT2YoYXNTdHJpbmcoKSku ZmxvYXRWYWx1ZSgpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCiAgICAg ICAgewogICAgICAgICAgICB0aHJvdyBuZXcgRGF0YVNldEV4Y2VwdGlvbigiQmFkIGNvbnZlcnNp b246ICIgKyBlLnRvU3RyaW5nKCkpOwogICAgICAgIH0KICAgIH0KCgogICAgLyoqCiAgICAgICog R2V0IHRoZSB2YWx1ZSBhcyBhIEZsb2F0IE9iagogICAgICAqCiAgICAgICogQHJldHVybiAgICAg YSBGbG9hdAogICAgICAqIEBleGNlcHRpb24gICBEYXRhU2V0RXhjZXB0aW9uCiAgICAgICovCiAg ICBwdWJsaWMgRmxvYXQgYXNGbG9hdE9iaigpIHRocm93cyBEYXRhU2V0RXhjZXB0aW9uCiAgICB7 CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAg ICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdCgpKQogICAg ICAgICAgICAgICAgcmV0dXJuICgoRmxvYXQpIHZhbHVlT2JqZWN0KTsKICAgICAgICAgICAgZWxz ZSBpZiAoaXNTdHJpbmcoKSB8fCBpc0RvdWJsZSgpIHx8IGlzQmlnRGVjaW1hbCgpIHx8IGlzSW50 KCkgfHwKICAgICAgICAgICAgICAgICAgICBpc0xvbmcoKSB8fCBpc1Nob3J0KCkgfHwgaXNCeXRl KCkgKQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdChhc1N0cmluZygpKTsKICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IERhdGFTZXRFeGNlcHRpb24oIklu dmFsaWQgdHlwZSBmb3IgRmxvYXQiKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlv biBlKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERhdGFTZXRFeGNlcHRpb24oIkls bGVnYWwgY29udmVyc2lvbjogIiArCiAgICAgICAgICAgICAgICAgICAgZS50b1N0cmluZygpKTsK ICAgICAgICB9CiAgICB9CgoKCiAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIGFzIGEgYXNU aW1lCiAgICAgICoKICAgICAgKiBAcmV0dXJuICAgICBhIFRpbWUKICAgICAgKiBAZXhjZXB0aW9u ICAgRGF0YVNldEV4Y2VwdGlvbgogICAgICAqLwogICAgcHVibGljIFRpbWUgYXNUaW1lKCkgdGhy b3dzIERhdGFTZXRFeGNlcHRpb24KICAgIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAg ICAgIGlmIChpc051bGwoKSkKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAg ICBlbHNlIGlmIChpc1RpbWUoKSkKICAgICAgICAgICAgICAgIHJldHVybiAoVGltZSkgdmFsdWVP YmplY3Q7CgogICAgICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgp OwogICAgICAgICAgICBpZiAoaXNUaW1lc3RhbXAoKSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgY2FsLnNldFRpbWUgKChUaW1lc3RhbXApIHZhbHVlT2JqZWN0KTsKICAgICAgICAgICAg ICAgIHJldHVybiBuZXcgVGltZShjYWwuZ2V0VGltZSgpLmdldFRpbWUoKSk7CiAgICAgICAgICAg IH0KICAgICAgICAgICAgZWxzZSBpZiAoaXNVdGlsRGF0ZSgpKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICBjYWwuc2V0VGltZSAoKGphdmEudXRpbC5EYXRlKSB2YWx1ZU9iamVjdCk7CiAg ICAgICAgICAgICAgICByZXR1cm4gbmV3IFRpbWUoY2FsLmdldFRpbWUoKS5nZXRUaW1lKCkpOwog ICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKCkpCiAgICAgICAgICAg ICAgICByZXR1cm4gVGltZS52YWx1ZU9mKChTdHJpbmcpIHZhbHVlT2JqZWN0KTsKICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIFRpbWUudmFsdWVPZihhc1N0cmluZygpKTsK ICAgICAgICB9CiAgICAgICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBhKQogICAg ICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERhdGFTZXRFeGNlcHRpb24oIkJhZCBkYXRlIHZh bHVlIC0gSmF2YSBUaW1lIE9iamVjdHMgY2Fubm90IGJlIGVhcmxpZXIgdGhhbiAxLzEvNzAiKTsK ICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBiKQogICAgICAgIHsKICAgICAgICAg ICAgdGhyb3cgbmV3IERhdGFTZXRFeGNlcHRpb24oIkJhZCBjb252ZXJzaW9uOiAiICsgYi50b1N0 cmluZygpKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBh cyBhIGFzVGltZXN0YW1wCiAgICAgICoKICAgICAgKiBAcmV0dXJuICAgICBhIFRpbWVzdGFtcAog ICAgICAqIEBleGNlcHRpb24gICBEYXRhU2V0RXhjZXB0aW9uCiAgICAgICovCiAgICBwdWJsaWMg VGltZXN0YW1wIGFzVGltZXN0YW1wKCkgdGhyb3dzIERhdGFTZXRFeGNlcHRpb24KICAgIHsKICAg ICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChpc051bGwoKSkKICAgICAgICAgICAg ICAgIHJldHVybiBudWxsOwogICAgICAgICAgICBlbHNlIGlmIChpc1RpbWVzdGFtcCgpKQogICAg ICAgICAgICAgICAgcmV0dXJuIChUaW1lc3RhbXApIHZhbHVlT2JqZWN0OwoKICAgICAgICAgICAg aWYgKGlzVGltZSgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDYWxlbmRhciBjYWwg PSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwogICAgICAgICAgICAgICAgY2FsLnNldFRpbWUgKChU aW1lKSB2YWx1ZU9iamVjdCk7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRpbWVzdGFtcChj YWwuZ2V0VGltZSgpLmdldFRpbWUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBp ZiAoaXNVdGlsRGF0ZSgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3 IFRpbWVzdGFtcCgoKGphdmEudXRpbC5EYXRlKSB2YWx1ZU9iamVjdCkuZ2V0VGltZSgpKTsKICAg ICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZygpKQogICAgICAgICAgICAg ICAgcmV0dXJuIFRpbWVzdGFtcC52YWx1ZU9mKChTdHJpbmcpIHZhbHVlT2JqZWN0KTsKICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIFRpbWVzdGFtcC52YWx1ZU9mKGFzU3Ry aW5nKCkpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u IGEpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBuZXcgRGF0YVNldEV4Y2VwdGlvbigiQmFk IGRhdGUgdmFsdWUgLSBKYXZhIFRpbWVzdGFtcCBPYmplY3RzIGNhbm5vdCBiZSBlYXJsaWVyIHRo YW4gMS8xLzcwIik7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gYikKICAgICAg ICB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhU2V0RXhjZXB0aW9uKCJCYWQgY29udmVyc2lv bjogIiArIGIudG9TdHJpbmcoKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICAqIEdl dCB0aGUgdmFsdWUgYXMgYSBhc0RhdGUKICAgICAgKgogICAgICAqIEByZXR1cm4gICAgIGEgamF2 YS5zcWwuRGF0ZQogICAgICAqIEBleGNlcHRpb24gICBEYXRhU2V0RXhjZXB0aW9uCiAgICAgICov CiAgICBwdWJsaWMgamF2YS5zcWwuRGF0ZSBhc0RhdGUoKSB0aHJvd3MgRGF0YVNldEV4Y2VwdGlv bgogICAgewogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGlzTnVsbCgpKQog ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIGVsc2UgaWYgKGlzRGF0ZSgp KQogICAgICAgICAgICAgICAgcmV0dXJuIChqYXZhLnNxbC5EYXRlKSB2YWx1ZU9iamVjdDsKCiAg ICAgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CiAgICAgICAg ICAgIGlmIChpc1RpbWVzdGFtcCgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUaW1l c3RhbXAgdHMgPSAoVGltZXN0YW1wKSB2YWx1ZU9iamVjdDsKICAgICAgICAgICAgICAgIGxvbmcg ZGF0ZSA9IHRzLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgIGludCBuYW5vcyA9IHRzLmdldE5h bm9zKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEuc3FsLkRhdGUoZGF0ZSArIChu YW5vcy8xMDAwMDAwKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoaXNUaW1l KCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhbC5zZXRUaW1lICgoVGltZSkgdmFs dWVPYmplY3QpOwogICAgICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkRhdGUudmFsdWVPZiAo Y2FsLmdldChDYWxlbmRhci5ZRUFSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICItIiArIChj YWwuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDEpICsgIi0iICsKICAgICAgICAgICAgICAgICAgICAg ICAgY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKICAgICAgICAgICAgfQogICAgICAg ICAgICBlbHNlIGlmIChpc1V0aWxEYXRlKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IGNhbC5zZXRUaW1lICgoamF2YS51dGlsLkRhdGUpIHZhbHVlT2JqZWN0KTsKICAgICAgICAgICAg ICAgIHJldHVybiBqYXZhLnNxbC5EYXRlLnZhbHVlT2YgKGNhbC5nZXQoQ2FsZW5kYXIuWUVBUikg KwogICAgICAgICAgICAgICAgICAgICAgICAiLSIgKyAoY2FsLmdldChDYWxlbmRhci5NT05USCkg KyAxKSArICItIiArCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5kYXIuREFZ X09GX01PTlRIKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmco KSkKICAgICAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5EYXRlLnZhbHVlT2YoKFN0cmluZykg dmFsdWVPYmplY3QpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gamF2 YS5zcWwuRGF0ZS52YWx1ZU9mKGFzU3RyaW5nKCkpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAo SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGEpCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBu ZXcgRGF0YVNldEV4Y2VwdGlvbigiQmFkIGRhdGUgdmFsdWUgLSBKYXZhIFRpbWVzdGFtcCBPYmpl Y3RzIGNhbm5vdCBiZSBlYXJsaWVyIHRoYW4gMS8xLzcwIik7CiAgICAgICAgfQogICAgICAgIGNh dGNoIChFeGNlcHRpb24gYikKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhU2V0 RXhjZXB0aW9uKCJCYWQgY29udmVyc2lvbjogIiArIGIudG9TdHJpbmcoKSk7CiAgICAgICAgfQog ICAgfQoKICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgYXMgYSBhc1V0aWxEYXRlCiAgICAg ICoKICAgICAgKiBAcmV0dXJuICAgICBhIGphdmEudXRpbC5EYXRlCiAgICAgICogQGV4Y2VwdGlv biAgIERhdGFTZXRFeGNlcHRpb24KICAgICAgKi8KICAgIHB1YmxpYyBqYXZhLnV0aWwuRGF0ZSBh c1V0aWxEYXRlKCkgdGhyb3dzIERhdGFTZXRFeGNlcHRpb24KICAgIHsKICAgICAgICB0cnkKICAg ICAgICB7CiAgICAgICAgICAgIGlmIChpc051bGwoKSkKICAgICAgICAgICAgICAgIHJldHVybiBu dWxsOwogICAgICAgICAgICBlbHNlIGlmIChpc1V0aWxEYXRlKCkpCiAgICAgICAgICAgICAgICBy ZXR1cm4gKGphdmEudXRpbC5EYXRlKSB2YWx1ZU9iamVjdDsKCiAgICAgICAgICAgIENhbGVuZGFy IGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CiAgICAgICAgICAgIGlmIChpc1RpbWVzdGFt cCgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUaW1lc3RhbXAgdHMgPSAoVGltZXN0 YW1wKSB2YWx1ZU9iamVjdDsKICAgICAgICAgICAgICAgIGxvbmcgZGF0ZSA9IHRzLmdldFRpbWUo KTsKICAgICAgICAgICAgICAgIGludCBuYW5vcyA9IHRzLmdldE5hbm9zKCk7CiAgICAgICAgICAg ICAgICByZXR1cm4gbmV3IGphdmEudXRpbC5EYXRlKGRhdGUgKyAobmFub3MvMTAwMDAwMCkpOwog ICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGlzVGltZSgpKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICBjYWwuc2V0VGltZSAoKFRpbWUpIHZhbHVlT2JqZWN0KTsKICAgICAg ICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5EYXRlLnZhbHVlT2YgKGNhbC5nZXQoQ2FsZW5kYXIu WUVBUikgKwogICAgICAgICAgICAgICAgICAgICAgICAiLSIgKyAoY2FsLmdldChDYWxlbmRhci5N T05USCkgKyAxKSArICItIiArCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5nZXQoQ2FsZW5k YXIuREFZX09GX01PTlRIKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoaXNV dGlsRGF0ZSgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjYWwuc2V0VGltZSAoKGph dmEudXRpbC5EYXRlKSB2YWx1ZU9iamVjdCk7CiAgICAgICAgICAgICAgICByZXR1cm4gamF2YS5z cWwuRGF0ZS52YWx1ZU9mIChjYWwuZ2V0KENhbGVuZGFyLllFQVIpICsKICAgICAgICAgICAgICAg ICAgICAgICAgIi0iICsgKGNhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpICsgMSkgKyAiLSIgKwogICAg ICAgICAgICAgICAgICAgICAgICBjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkpOwogICAg ICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg cmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggKElsbGVn YWxBcmd1bWVudEV4Y2VwdGlvbiBhKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERh dGFTZXRFeGNlcHRpb24oIkJhZCBkYXRlIHZhbHVlIC0gSmF2YSBqYXZhLnV0aWwuRGF0ZSBPYmpl Y3RzIGNhbm5vdCBiZSBlYXJsaWVyIHRoYW4gMS8xLzcwIik7CiAgICAgICAgfQogICAgICAgIGNh dGNoIChFeGNlcHRpb24gYikKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhU2V0 RXhjZXB0aW9uKCJCYWQgY29udmVyc2lvbjogIiArIGIudG9TdHJpbmcoKSk7CiAgICAgICAgfQog ICAgfQoKICAgIC8qKgogICAgICAqIElzIHRoZSB2YWx1ZSBhIGlzQmlnRGVjaW1hbAogICAgICAq CiAgICAgICogQHJldHVybiAgICAgdHJ1ZSBpZiBCaWdEZWNpbWFsCiAgICAgICovCiAgICBwdWJs aWMgYm9vbGVhbiBpc0JpZ0RlY2ltYWwoKQogICAgewogICAgICAgIHJldHVybiB2YWx1ZU9iamVj dCBpbnN0YW5jZW9mIEJpZ0RlY2ltYWw7CiAgICB9CgogICAgLyoqCiAgICAgICogSXMgdGhlIHZh bHVlIGEgaXNCeXRlCiAgICAgICoKICAgICAgKiBAcmV0dXJuICAgICB0cnVlIGlmIGlzIEJ5dGUK ICAgICAgKi8KICAgIHB1YmxpYyBib29sZWFuIGlzQnl0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu IHZhbHVlT2JqZWN0IGluc3RhbmNlb2YgQnl0ZTsKICAgIH0KCiAgICAvKioKICAgICAgKiBJcyB0 aGUgdmFsdWUgYSBpc0J5dGVzCiAgICAgICoKICAgICAgKiBAcmV0dXJuICAgICB0cnVlIGlmIGlz IGJ5dGVbXQogICAgICAqLwogICAgcHVibGljIGJvb2xlYW4gaXNCeXRlcygpCiAgICB7CiAgICAg ICAgcmV0dXJuIHZhbHVlT2JqZWN0IGluc3RhbmNlb2YgYnl0ZVtdOwogICAgfQoKICAgIC8qKgog ICAgICAqIElzIHRoZSB2YWx1ZSBhIGlzRGF0ZQogICAgICAqCiAgICAgICogQHJldHVybiAgICAg dHJ1ZSBpZiBpcyBqYXZhLnNxbC5EYXRlCiAgICAgICovCiAgICBwdWJsaWMgYm9vbGVhbiBpc0Rh dGUoKQogICAgewogICAgICAgIHJldHVybiB2YWx1ZU9iamVjdCBpbnN0YW5jZW9mIGphdmEuc3Fs LkRhdGU7CiAgICB9CgogICAgLyoqCiAgICAgICogSXMgdGhlIHZhbHVlIGEgaXNTaG9ydAogICAg ICAqCiAgICAgICogQHJldHVybiAgICAgdHJ1ZSBpZiBpcyBTaG9ydAogICAgICAqLwogICAgcHVi bGljIGJvb2xlYW4gaXNTaG9ydCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHZhbHVlT2JqZWN0IGlu c3RhbmNlb2YgU2hvcnQ7CiAgICB9CgogICAgLyoqCiAgICAgICogSXMgdGhlIHZhbHVlIGEgaXNJ bnQKICAgICAgKgogICAgICAqIEByZXR1cm4gICAgIHRydWUgaWYgaXMgSW50ZWdlcgogICAgICAq LwogICAgcHVibGljIGJvb2xlYW4gaXNJbnQoKQogICAgewogICAgICAgIHJldHVybiB2YWx1ZU9i amVjdCBpbnN0YW5jZW9mIEludGVnZXI7CiAgICB9CgogICAgLyoqCiAgICAgICogSXMgdGhlIHZh bHVlIGEgaXNMb25nCiAgICAgICoKICAgICAgKiBAcmV0dXJuICAgICB0cnVlIGlmIGlzIExvbmcK ICAgICAgKi8KICAgIHB1YmxpYyBib29sZWFuIGlzTG9uZygpCiAgICB7CiAgICAgICAgcmV0dXJu IHZhbHVlT2JqZWN0IGluc3RhbmNlb2YgTG9uZzsKICAgIH0KCiAgICAvKioKICAgICAgKiBJcyB0 aGUgdmFsdWUgYSBpc0RvdWJsZQogICAgICAqCiAgICAgICogQHJldHVybiAgICAgdHJ1ZSBpZiBp cyBEb3VibGUKICAgICAgKi8KICAgIHB1YmxpYyBib29sZWFuIGlzRG91YmxlKCkKICAgIHsKICAg ICAgICByZXR1cm4gdmFsdWVPYmplY3QgaW5zdGFuY2VvZiBEb3VibGU7CiAgICB9CgogICAgLyoq CiAgICAgICogSXMgdGhlIHZhbHVlIGEgaXNGbG9hdAogICAgICAqCiAgICAgICogQHJldHVybiAg ICAgdHJ1ZSBpZiBpcyBGbG9hdAogICAgICAqLwogICAgcHVibGljIGJvb2xlYW4gaXNGbG9hdCgp CiAgICB7CiAgICAgICAgcmV0dXJuIHZhbHVlT2JqZWN0IGluc3RhbmNlb2YgRmxvYXQ7CiAgICB9 CgogICAgLyoqCiAgICAgICogSXMgdGhlIHZhbHVlIGEgaXNCb29sZWFuCiAgICAgICoKICAgICAg KiBAcmV0dXJuICAgICB0cnVlIGlmIGlzIEJvb2xlYW4KICAgICAgKi8KICAgIHB1YmxpYyBib29s ZWFuIGlzQm9vbGVhbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHZhbHVlT2JqZWN0IGluc3RhbmNl b2YgQm9vbGVhbjsKICAgIH0KCiAgICAvKioKICAgICAgKiBJcyB0aGUgdmFsdWUgYSBpc051bGwK ICAgICAgKgogICAgICAqIEByZXR1cm4gICAgIHRydWUgaWYgaXMgbnVsbAogICAgICAqLwogICAg cHVibGljIGJvb2xlYW4gaXNOdWxsKCkKICAgIHsKICAgICAgICByZXR1cm4gdmFsdWVPYmplY3Qg PT0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAgKiBJcyB0aGUgdmFsdWUgYSBpc1N0cmluZwog ICAgICAqCiAgICAgICogQHJldHVybiAgICAgdHJ1ZSBpZiBpcyBTdHJpbmcKICAgICAgKi8KICAg IHB1YmxpYyBib29sZWFuIGlzU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gdmFsdWVPYmpl Y3QgaW5zdGFuY2VvZiBTdHJpbmc7CiAgICB9CgogICAgLyoqCiAgICAgICogSXMgdGhlIHZhbHVl IGEgaXNUaW1lCiAgICAgICoKICAgICAgKiBAcmV0dXJuICAgICB0cnVlIGlmIGlzIGphdmEuc3Fs LlRpbWUKICAgICAgKi8KICAgIHB1YmxpYyBib29sZWFuIGlzVGltZSgpCiAgICB7CiAgICAgICAg cmV0dXJuIHZhbHVlT2JqZWN0IGluc3RhbmNlb2YgamF2YS5zcWwuVGltZTsKICAgIH0KCiAgICAv KioKICAgICAgKiBJcyB0aGUgdmFsdWUgYSBpc1RpbWVzdGFtcAogICAgICAqCiAgICAgICogQHJl dHVybiAgICAgdHJ1ZSBpZiBpcyBqYXZhLnNxbC5UaW1lc3RhbXAKICAgICAgKi8KICAgIHB1Ymxp YyBib29sZWFuIGlzVGltZXN0YW1wKCkKICAgIHsKICAgICAgICByZXR1cm4gdmFsdWVPYmplY3Qg aW5zdGFuY2VvZiBqYXZhLnNxbC5UaW1lc3RhbXA7CiAgICB9CgogICAgLyoqCiAgICAgICogSXMg dGhlIHZhbHVlIGEgaXNVdGlsRGF0ZQogICAgICAqCiAgICAgICogQHJldHVybiAgICAgdHJ1ZSBp ZiBpcyBqYXZhLnV0aWwuRGF0ZQogICAgICAqLwogICAgcHVibGljIGJvb2xlYW4gaXNVdGlsRGF0 ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHZhbHVlT2JqZWN0IGluc3RhbmNlb2YgamF2YS51dGls LkRhdGU7CiAgICB9CgogICAgLyoqCiAgICAgICogUmV0dXJuIHRoZSB0eXBlIG9mIHRoaXMgdmFs dWUKICAgICAgKgogICAgICAqIEByZXR1cm4gICAgIHRoZSB0eXBlIG9mIHRoaXMgdmFsdWUKICAg ICAgKi8KICAgIHB1YmxpYyBpbnQgdHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMudHlw ZTsKICAgIH0KCiAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjb2x1bW5OdW1iZXIgd2hpY2ggdGhp cyB2YWx1ZSByZXByZXNlbnRzLgogICAgICAqCiAgICAgICogQHJldHVybiAgICAgYW4gaW50CiAg ICAgICovCiAgICBpbnQgY29sdW1uTnVtYmVyKCkKICAgIHsKICAgICAgICByZXR1cm4gdGhpcy5j b2x1bW5OdW1iZXI7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQHJldHVybiB0cnVlIGlmICh0 cnVlIHx8IHQgfCB5ZXMgfCAxKQogICAgICovCiAgICBwcml2YXRlIGJvb2xlYW4gaXNUcnVlKFN0 cmluZyB2YWx1ZSkKICAgIHsKICAgICAgICByZXR1cm4gKHZhbHVlLmVxdWFsc0lnbm9yZUNhc2Ug KCJ0cnVlIikgfHwKICAgICAgICAgICAgICAgIHZhbHVlLmVxdWFsc0lnbm9yZUNhc2UgKCJ0Iikg fHwKICAgICAgICAgICAgICAgIHZhbHVlLmVxdWFsc0lnbm9yZUNhc2UgKCJ5ZXMiKSB8fCAKICAg ICAgICAgICAgICAgIHZhbHVlLmVxdWFscyAoIjEiKSk7CiAgICB9Cn0K ---MOQ104985383480af299144db9aa6c652b7f003a56238 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Village-dev mailing list [email protected] http://share.whichever.com/mailman/listinfo/village-dev ---MOQ104985383480af299144db9aa6c652b7f003a56238--