From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Tom Breton (Tehom)" Newsgroups: gmane.emacs.devel Subject: ewoc patch Date: Tue, 8 Dec 2009 23:03:12 -0500 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed;boundary="----=_20091208230312_55982" X-Trace: ger.gmane.org 1260331422 6738 80.91.229.12 (9 Dec 2009 04:03:42 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 9 Dec 2009 04:03:42 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Dec 09 05:03:36 2009 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1NIDm1-00089e-7P for ged-emacs-devel@m.gmane.org; Wed, 09 Dec 2009 05:03:35 +0100 Original-Received: from localhost ([127.0.0.1]:54754 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NIDm0-0004EH-Rr for ged-emacs-devel@m.gmane.org; Tue, 08 Dec 2009 23:03:32 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NIDlo-0004E4-Kd for emacs-devel@gnu.org; Tue, 08 Dec 2009 23:03:20 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NIDlj-0004DY-Qc for emacs-devel@gnu.org; Tue, 08 Dec 2009 23:03:19 -0500 Original-Received: from [199.232.76.173] (port=54856 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NIDlj-0004DV-N4 for emacs-devel@gnu.org; Tue, 08 Dec 2009 23:03:15 -0500 Original-Received: from mail1.panix.com ([166.84.1.72]:58001) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NIDlj-0003wP-BH for emacs-devel@gnu.org; Tue, 08 Dec 2009 23:03:15 -0500 Original-Received: from mailbackend.panix.com (mailbackend.panix.com [166.84.1.89]) by mail1.panix.com (Postfix) with ESMTP id C06AE1F08A for ; Tue, 8 Dec 2009 23:03:12 -0500 (EST) Original-Received: from mail.panix.com (localhost [127.0.0.1]) by mailbackend.panix.com (Postfix) with ESMTP id AFC8B2D856 for ; Tue, 8 Dec 2009 23:03:12 -0500 (EST) X-Panix-Received: from 96.252.49.112 (SquirrelMail authenticated user tehom@panix.com) by mail.panix.com with HTTP; Tue, 8 Dec 2009 23:03:12 -0500 User-Agent: SquirrelMail/1.4.19 X-Priority: 3 (Normal) Importance: Normal X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:118428 Archived-At: ------=_20091208230312_55982 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I like the ewoc package, but I found it somewhat inflexible. I am submitting this diff (attached) in the hope of improving it. In particular: * ewoc always wants every entry to be separated from the other entries by a newline. * It does not work properly with blank entries. These become a real problem when a blank separator is allowed. Nodes often get printed out of order. * ewoc-map is slightly misnamed; it doesn't map, it's more like for-each. Summary of changes: * Added a version number. I didn't have much to go on, so I just said it was "2.0". I will gladly change it to correspond to an official version number. * ewoc-create takes an optional fourth argument, "separator" * Added a new field to the ewoc, "separator". That's the string that separates entries. It defaults to "\n". * Added functions * ewoc--raw-location * ewoc--next-printed-node * ewoc--next-start-marker * ewoc-location-safe * ewoc--print-node * ewoc--print-anew * ewoc--delete-node-text * ewoc--mark-node-empty * Added alias: ewoc-foreach for ewoc-map * Removed ewoc--create-node. * Rearranged some functionality: * All printing goes thru new function ewoc--print-node * All unprinting uses new function ewoc--mark-node-empty. * Design: Nodes that have no text have no start marker. * Design: ewoc now handles the different printing of header/footer vs other nodes by passing a printer function to `ewoc--print-node'. Testing: * Created a test suite. The suite relies on rtest, which unfortunately is still between releasable versions. * Thru application "colorcomp" (written by TTN, thank you) Tom Breton (Tehom) ------=_20091208230312_55982 Content-Type: application/octet-stream; name="ewoc.el.3.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ewoc.el.3.diff" Y2QgL2hvbWUvdGVob20vcHJvamVjdHMvZW10ZXN0L2xpc3Avdmlld2Vycy8KZGlmZiAtYyAtYiAv aG9tZS90ZWhvbS9lbWFjcy0yMS40L2xpc3AvZW1hY3MtbGlzcC9ld29jLmVsIC9ob21lL3RlaG9t L3Byb2plY3RzL2VtdGVzdC9saXNwL3ZpZXdlcnMvZXdvYy5lbAoqKiogL2hvbWUvdGVob20vZW1h Y3MtMjEuNC9saXNwL2VtYWNzLWxpc3AvZXdvYy5lbAkyMDAxLTA3LTE2IDA4OjIyOjU5LjAwMDAw MDAwMCAtMDQwMAotLS0gL2hvbWUvdGVob20vcHJvamVjdHMvZW10ZXN0L2xpc3Avdmlld2Vycy9l d29jLmVsCTIwMDktMTItMDggMjI6NTc6NDYuMDAwMDAwMDAwIC0wNTAwCioqKioqKioqKioqKioq KgoqKiogMTI5LDEzNCAqKioqCi0tLSAxMjksMTM2IC0tLS0KICAKICAoZXZhbC13aGVuLWNvbXBp bGUgKHJlcXVpcmUgJ2NsKSkJO2JlY2F1c2Ugb2YgQ0wgY29tcGlsZXIgbWFjcm9zCiAgCisgKGRl ZmNvbnN0IGV3b2MtdmVyc2lvbiAiMi4wIikKKyAKICA7OyBUaGUgZG91Ymx5IGxpbmtlZCBsaXN0 IGlzIGltcGxlbWVudGVkIGFzIGEgY2lyY3VsYXIgbGlzdAogIDs7IHdpdGggYSBkdW1teSBub2Rl IGZpcnN0IGFuZCBsYXN0LiBUaGUgZHVtbXkgbm9kZSBpcyB1c2VkIGFzCiAgOzsgInRoZSBkbGwi IChvciByYXRoZXIgaXMgdGhlIGRsbCBoYW5kbGUgcGFzc2VkIGFyb3VuZCkuCioqKioqKioqKioq KioqKgoqKiogMTk3LDIxNSAqKioqCiAgICAgICAgKHNldHEgbiAoMS0gbikpKQogICAgICAodW5s ZXNzIChlcSBkbGwgbm9kZSkgbm9kZSkpKQogIAotIChkZWZ1biBld29jLWxvY2F0aW9uIChub2Rl KQotICAgIlJldHVybiB0aGUgc3RhcnQgbG9jYXRpb24gb2YgTk9ERS4iCi0gICAoZXdvYy0tbm9k ZS1zdGFydC1tYXJrZXIgbm9kZSkpCi0gCiAgDAogIDs7OyBUaGUgZXdvYyBkYXRhIHR5cGUKICAK ICAoZGVmc3RydWN0IChld29jCiAgCSAgICAoOmNvbnN0cnVjdG9yIG5pbCkKICAJICAgICg6Y29u c3RydWN0b3IgZXdvYy0tY3JlYXRlCiEgCQkJICAoYnVmZmVyIHByZXR0eS1wcmludGVyIGhlYWRl ciBmb290ZXIgZGxsKSkKICAJICAgICg6Y29uYy1uYW1lIGV3b2MtLSkpCiEgICBidWZmZXIgcHJl dHR5LXByaW50ZXIgaGVhZGVyIGZvb3RlciBkbGwgbGFzdC1ub2RlKQogIAogIChkZWZtYWNybyBl d29jLS1zZXQtYnVmZmVyLWJpbmQtZGxsLWxldCogKGV3b2MgdmFybGlzdCAmcmVzdCBmb3JtcykK ICAgICJFeGVjdXRlIEZPUk1TIHdpdGggZXdvYy0tYnVmZmVyIHNlbGVjdGVkIGFzIGN1cnJlbnQg YnVmZmVyLAotLS0gMTk5LDIxNiAtLS0tCiAgICAgICAgKHNldHEgbiAoMS0gbikpKQogICAgICAo dW5sZXNzIChlcSBkbGwgbm9kZSkgbm9kZSkpKQogIAogIAwKICA7OzsgVGhlIGV3b2MgZGF0YSB0 eXBlCiAgCiAgKGRlZnN0cnVjdCAoZXdvYwogIAkgICAgKDpjb25zdHJ1Y3RvciBuaWwpCiAgCSAg ICAoOmNvbnN0cnVjdG9yIGV3b2MtLWNyZWF0ZQohIAkJCSAgKGJ1ZmZlciBwcmV0dHktcHJpbnRl ciBoZWFkZXIgZm9vdGVyIGRsbAohIAkJCSAgICAgc2VwYXJhdG9yKSkKICAJICAgICg6Y29uYy1u YW1lIGV3b2MtLSkpCiEgICBidWZmZXIgcHJldHR5LXByaW50ZXIgaGVhZGVyIGZvb3RlciBkbGwg bGFzdC1ub2RlIHNlcGFyYXRvcikKISAKISAKICAKICAoZGVmbWFjcm8gZXdvYy0tc2V0LWJ1ZmZl ci1iaW5kLWRsbC1sZXQqIChld29jIHZhcmxpc3QgJnJlc3QgZm9ybXMpCiAgICAiRXhlY3V0ZSBG T1JNUyB3aXRoIGV3b2MtLWJ1ZmZlciBzZWxlY3RlZCBhcyBjdXJyZW50IGJ1ZmZlciwKKioqKioq KioqKioqKioqCioqKiAyMzgsMzI5ICoqKioKICAJICAgICAgKGVxIG5vZGUgKGV3b2MtLWZvb3Rl ciBld29jKSkpCiAgICAgIG5vZGUpKQogIAotIAotIChkZWZ1biBld29jLS1jcmVhdGUtbm9kZSAo ZGF0YSBwcmV0dHktcHJpbnRlciBwb3MpCi0gICAiQ2FsbCBQUkVUVFktUFJJTlRFUiB3aXRoIHBv aW50IHNldCBhdCBQT1MgaW4gY3VycmVudCBidWZmZXIuCi0gUmVtZW1iZXIgdGhlIHN0YXJ0IHBv c2l0aW9uLiBDcmVhdGUgYSB3cmFwcGVyIGNvbnRhaW5pbmcgdGhhdAotIHN0YXJ0IHBvc2l0aW9u IGFuZCB0aGUgZWxlbWVudCBEQVRBLiIKLSAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICA7OyBSZW1l bWJlciB0aGUgcG9zaXRpb24gYXMgYSBudW1iZXIgc28gdGhhdCBpdCBkb2Vzbid0IG1vdmUKLSAg ICAgOzsgd2hlbiB3ZSBpbnNlcnQgdGhlIHN0cmluZy4KLSAgICAgKHdoZW4gKG1hcmtlcnAgcG9z KSAoc2V0cSBwb3MgKG1hcmtlci1wb3NpdGlvbiBwb3MpKSkKLSAgICAgKGdvdG8tY2hhciBwb3Mp Ci0gICAgIChsZXQgKChpbmhpYml0LXJlYWQtb25seSB0KSkKLSAgICAgICA7OyBJbnNlcnQgdGhl IHRyYWlsaW5nIG5ld2xpbmUgdXNpbmcgaW5zZXJ0LWJlZm9yZS1tYXJrZXJzCi0gICAgICAgOzsg c28gdGhhdCB0aGUgc3RhcnQgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGVsZW1lbnQgaXMgdXBkYXRl ZC4KLSAgICAgICAoaW5zZXJ0LWJlZm9yZS1tYXJrZXJzID9cbikKLSAgICAgICA7OyBNb3ZlIGJh Y2ssIGFuZCBjYWxsIHRoZSBwcmV0dHktcHJpbnRlci4KLSAgICAgICAoYmFja3dhcmQtY2hhciAx KQotICAgICAgIChmdW5jYWxsIHByZXR0eS1wcmludGVyIGRhdGEpCi0gICAgICAgKGV3b2MtLW5v ZGUtY3JlYXRlIChjb3B5LW1hcmtlciBwb3MpIGRhdGEpKSkpCi0gCi0gCiAgKGRlZnVuIGV3b2Mt LWRlbGV0ZS1ub2RlLWludGVybmFsIChld29jIG5vZGUpCiAgICAiRGVsZXRlIGEgZGF0YSBzdHJp bmcgZnJvbSBFV09DLgogIENhbiBub3QgYmUgdXNlZCBvbiB0aGUgZm9vdGVyLiBSZXR1cm5zIHRo ZSB3cmFwcGVyIHRoYXQgaXMgZGVsZXRlZC4KICBUaGUgc3RhcnQtbWFya2VyIGluIHRoZSB3cmFw cGVyIGlzIHNldCB0byBuaWwsIHNvIHRoYXQgaXQgZG9lc24ndAogIGNvbnN1bWUgYW55IG1vcmUg cmVzb3VyY2VzLiIKICAgIChsZXQgKChkbGwgKGV3b2MtLWRsbCBld29jKSkKICAJKGluaGliaXQt cmVhZC1vbmx5IHQpKQohICAgICA7OyBJZiB3ZSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBub2Rl IHBvaW50ZWQgYXQgYnkgbGFzdC1ub2RlLAohICAgICA7OyBzZXQgbGFzdC1ub2RlIHRvIG5pbC4K ICAgICAgKGlmIChlcSAoZXdvYy0tbGFzdC1ub2RlIGV3b2MpIG5vZGUpCiAgCShzZXRmIChld29j LS1sYXN0LW5vZGUgZXdvYykgbmlsKSkKISAKISAgICAgKGRlbGV0ZS1yZWdpb24gKGV3b2MtLW5v ZGUtc3RhcnQtbWFya2VyIG5vZGUpCiEgCQkgICAoZXdvYy0tbm9kZS1zdGFydC1tYXJrZXIgKGV3 b2MtLW5vZGUtbmV4dCBkbGwgbm9kZSkpKQohICAgICAoc2V0LW1hcmtlciAoZXdvYy0tbm9kZS1z dGFydC1tYXJrZXIgbm9kZSkgbmlsKQohICAgICA7OyBEZWxldGUgdGhlIG5vZGUsIGFuZCByZXR1 cm4gdGhlIHdyYXBwZXIuCiEgICAgIChld29jLS1ub2RlLWRlbGV0ZSBub2RlKSkpCiEgCiAgCiAg KGRlZnVuIGV3b2MtLXJlZnJlc2gtbm9kZSAocHAgbm9kZSkKICAgICJSZWRpc3BsYXkgdGhlIGVs ZW1lbnQgcmVwcmVzZW50ZWQgYnkgTk9ERSB1c2luZyB0aGUgcHJldHR5LXByaW50ZXIgUFAuIgog ICAgKGxldCAoKGluaGliaXQtcmVhZC1vbmx5IHQpKQogICAgICAoc2F2ZS1leGN1cnNpb24KISAg ICAgICA7OyBGaXJzdCwgcmVtb3ZlIHRoZSBzdHJpbmcgZnJvbSB0aGUgYnVmZmVyOgohICAgICAg IChkZWxldGUtcmVnaW9uIChld29jLS1ub2RlLXN0YXJ0LW1hcmtlciBub2RlKQohIAkJICAgICAo MS0gKG1hcmtlci1wb3NpdGlvbgohIAkJCSAgKGV3b2MtLW5vZGUtc3RhcnQtbWFya2VyIChld29j LS1ub2RlLXJpZ2h0IG5vZGUpKSkpKQohICAgICAgIDs7IENhbGN1bGF0ZSBhbmQgaW5zZXJ0IHRo ZSBzdHJpbmcuCiEgICAgICAgKGdvdG8tY2hhciAoZXdvYy0tbm9kZS1zdGFydC1tYXJrZXIgbm9k ZSkpCiEgICAgICAgKGZ1bmNhbGwgcHAgKGV3b2MtLW5vZGUtZGF0YSBub2RlKSkpKSkKICAMCiAg Ozs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQogIDs7OyAgICAgICAgICAgICAgICAgIFB1YmxpYyBtZW1i ZXJzIG9mIHRoZSBFd29jIHBhY2thZ2UKICAKICAKISAoZGVmdW4gZXdvYy1jcmVhdGUgKHByZXR0 eS1wcmludGVyICZvcHRpb25hbCBoZWFkZXIgZm9vdGVyKQogICAgIkNyZWF0ZSBhbiBlbXB0eSBl d29jLgogIAogIFRoZSBld29jIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIGN1cnJlbnQgYnVmZmVy IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgogIAogIFBSRVRUWS1QUklOVEVSIHNob3VsZCBiZSBh IGZ1bmN0aW9uIHRoYXQgdGFrZXMgb25lIGFyZ3VtZW50LCBhbgogIGVsZW1lbnQsIGFuZCBpbnNl cnRzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBpdCBpbiB0aGUgYnVmZmVyIChhdAohIHBvaW50KS4g VGhlIHN0cmluZyBQUkVUVFktUFJJTlRFUiBpbnNlcnRzIG1heSBiZSBlbXB0eSBvciBzcGFuCiEg c2V2ZXJhbCBsaW5zZS4gQSB0cmFpbGluZyBuZXdsaW5lIHdpbGwgYWx3YXlzIGJlIGluc2VydGVk CiEgYXV0b21hdGljYWxseS4gVGhlIFBSRVRUWS1QUklOVEVSIHNob3VsZCB1c2UgaW5zZXJ0LCBh bmQgbm90CiEgaW5zZXJ0LWJlZm9yZS1tYXJrZXJzLgogIAohIE9wdGlvbmFsIHRoaXJkIGFyZ3Vt ZW50IEhFQURFUiBpcyBhIHN0cmluZyB0aGF0IHdpbGwgYWx3YXlzIGJlCiAgcHJlc2VudCBhdCB0 aGUgdG9wIG9mIHRoZSBld29jLiBIRUFERVIgc2hvdWxkIGVuZCB3aXRoIGEKISBuZXdsaW5lLiAg T3B0aW9uYWx5IGZvdXJ0aCBhcmd1bWVudCBGT09URVIgaXMgc2ltaWxhciwgYW5kIHdpbGwKISBi ZSBpbnNlcnRlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBld29jLiIKISAgIChsZXQgKChuZXctZXdv YwohIAkgKGV3b2MtLWNyZWF0ZSAoY3VycmVudC1idWZmZXIpCiEgCQkgICAgICAgcHJldHR5LXBy aW50ZXIgbmlsIG5pbCAoZXdvYy0tZGxsLWNyZWF0ZSkpKQogIAkocG9zIChwb2ludCkpKQogICAg ICAoZXdvYy0tc2V0LWJ1ZmZlci1iaW5kLWRsbCBuZXctZXdvYwogICAgICAgIDs7IFNldCBkZWZh dWx0IHZhbHVlcwogICAgICAgICh1bmxlc3MgaGVhZGVyIChzZXRxIGhlYWRlciAiIikpCiAgICAg ICAgKHVubGVzcyBmb290ZXIgKHNldHEgZm9vdGVyICIiKSkKICAgICAgICAoc2V0ZiAoZXdvYy0t bm9kZS1zdGFydC1tYXJrZXIgZGxsKSAoY29weS1tYXJrZXIgcG9zKSkKISAgICAgICAobGV0ICgo Zm9vdCAoZXdvYy0tY3JlYXRlLW5vZGUgZm9vdGVyIChsYW1iZGEgKHgpIChpbnNlcnQgZm9vdGVy KSkgcG9zKSkKISAJICAgIChoZWFkIChld29jLS1jcmVhdGUtbm9kZSBoZWFkZXIgKGxhbWJkYSAo eCkgKGluc2VydCBoZWFkZXIpKSBwb3MpKSkKISAJKGV3b2MtLW5vZGUtZW50ZXItZmlyc3QgZGxs IGhlYWQpCiEgCShld29jLS1ub2RlLWVudGVyLWxhc3QgIGRsbCBmb290KQogIAkoc2V0ZiAoZXdv Yy0taGVhZGVyIG5ldy1ld29jKSBoZWFkKQogIAkoc2V0ZiAoZXdvYy0tZm9vdGVyIG5ldy1ld29j KSBmb290KSkpCiAgICAgIDs7IFJldHVybiB0aGUgZXdvYwogICAgICBuZXctZXdvYykpCiAgCi0t LSAyMzksNDMwIC0tLS0KICAJICAgICAgKGVxIG5vZGUgKGV3b2MtLWZvb3RlciBld29jKSkpCiAg ICAgIG5vZGUpKQogIAogIChkZWZ1biBld29jLS1kZWxldGUtbm9kZS1pbnRlcm5hbCAoZXdvYyBu b2RlKQogICAgICJEZWxldGUgYSBkYXRhIHN0cmluZyBmcm9tIEVXT0MuCiAgQ2FuIG5vdCBiZSB1 c2VkIG9uIHRoZSBmb290ZXIuIFJldHVybnMgdGhlIHdyYXBwZXIgdGhhdCBpcyBkZWxldGVkLgog IFRoZSBzdGFydC1tYXJrZXIgaW4gdGhlIHdyYXBwZXIgaXMgc2V0IHRvIG5pbCwgc28gdGhhdCBp dCBkb2Vzbid0CiAgY29uc3VtZSBhbnkgbW9yZSByZXNvdXJjZXMuIgorICAgICh3aGVuIChld29j LS1ub2RlLXN0YXJ0LW1hcmtlciBub2RlKQogICAgICAgIChsZXQgKChkbGwgKGV3b2MtLWRsbCBl d29jKSkKICAJICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpKQohIAkgOzsgSWYgd2UgYXJlIGFi b3V0IHRvIGRlbGV0ZSB0aGUgbm9kZSBwb2ludGVkIGF0IGJ5CiEgCSA7OyBsYXN0LW5vZGUsIHNl dCBsYXN0LW5vZGUgdG8gbmlsLgogIAkgKGlmIChlcSAoZXdvYy0tbGFzdC1ub2RlIGV3b2MpIG5v ZGUpCiAgCSAgICAoc2V0ZiAoZXdvYy0tbGFzdC1ub2RlIGV3b2MpIG5pbCkpCiEgCSAoZXdvYy0t ZGVsZXRlLW5vZGUtdGV4dCBub2RlKQohIAkgOzsgRGVsZXRlIHRoZSBub2RlIGZyb20gdGhlIGRs bCBhbmQgcmV0dXJuIHRoZSB3cmFwcGVyLgohIAkgKGV3b2MtLW5vZGUtZGVsZXRlIG5vZGUpKSkp CiAgCiAgKGRlZnVuIGV3b2MtLXJlZnJlc2gtbm9kZSAocHAgbm9kZSkKICAgICAgICAiUmVkaXNw bGF5IHRoZSBlbGVtZW50IHJlcHJlc2VudGVkIGJ5IE5PREUgdXNpbmcgdGhlIHByZXR0eS1wcmlu dGVyIFBQLiIKKyAgICAgICAoYXNzZXJ0IG5vZGUpCiAgICAgICAgKGxldCAoKGluaGliaXQtcmVh ZC1vbmx5IHQpKQogIAkgKHNhdmUtZXhjdXJzaW9uCiEgCSAgICAoZ290by1jaGFyIChld29jLWxv Y2F0aW9uLXNhZmUgbm9kZSkpCiEgCSAgICAoZXdvYy0tZGVsZXRlLW5vZGUtdGV4dCBub2RlKQoh IAkgICAgKGV3b2MtLXByaW50LWFuZXcgbm9kZSBwcCkpKSkKISAKISAMCiEgOzs7ID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQohIDs7OyAgICAgICAgICAgICAgICAgIE5vZGUgbG9jYXRpb24KISAKISAoZGVm dW4gZXdvYy0tcmF3LWxvY2F0aW9uIChub2RlKQohICAgICAgICJSZXR1cm4gdGhlIHN0YXJ0IGxv Y2F0aW9uIG9mIE5PREUuCiEgSWYgTk9ERSBpcyBlbXB0eSwgcmV0dXJuIG5pbC4iCiEgICAgICAg KGV3b2MtLW5vZGUtc3RhcnQtbWFya2VyIG5vZGUpKQohIAohIChkZWZ1biBld29jLS1uZXh0LXBy aW50ZWQtbm9kZSAobm9kZSkKISAgICAiUmV0dXJuIHRoZSBuZXh0IG5vbi1lbXB0eSBub2RlIGFm dGVyIE5PREUuIgohICAgIDs7VGhpcyBsb29wIHdpbGwgdGVybWluYXRlIGJlY2F1c2Ugd2Ugc2V0 IGF0IGxlYXN0IG9uZQohICAgIDs7c3RhcnQtbWFya2VyIGluIHRoZSBld29jIHdoZW4gY3JlYXRp bmcgaXQuCiEgICAgKGRvCiEgICAgICAgKChub2RlLWFmdGVyIAohIAkgIChld29jLS1ub2RlLXJp Z2h0IG5vZGUpIAohIAkgIChld29jLS1ub2RlLXJpZ2h0IG5vZGUtYWZ0ZXIpKSkKISAgICAgICAo CiEgCSAoZXdvYy0tbm9kZS1zdGFydC1tYXJrZXIgbm9kZS1hZnRlcikKISAJIG5vZGUtYWZ0ZXIp KSkKISAgICAKISAoZGVmdW4gZXdvYy0tbmV4dC1zdGFydC1tYXJrZXIgKG5vZGUpCiEgICAgIlJl dHVybiB0aGUgZmlyc3Qgc3RhcnQgbWFya2VyIGFmdGVyIE5PREUuIgohICAgIChld29jLS1ub2Rl LXN0YXJ0LW1hcmtlcgohICAgICAgIChld29jLS1uZXh0LXByaW50ZWQtbm9kZSBub2RlKSkpCiEg CiEgKGRlZnVuIGV3b2MtbG9jYXRpb24gKG5vZGUpCiEgICAgIlJldHVybiB0aGUgc3RhcnQgbG9j YXRpb24gb2YgTk9ERS4KISBJZiBOT0RFIGlzIGVtcHR5LCByZXR1cm4gdGhlIHN0YXJ0IG1hcmtl ciBvZiB0aGUgbmV4dCBub24tZW1wdHkgbm9kZS4iCiEgICAgKG9yCiEgICAgICAgKGV3b2MtLXJh dy1sb2NhdGlvbiBub2RlKQohICAgICAgIChld29jLS1uZXh0LXN0YXJ0LW1hcmtlciBub2RlKSkp CiEgCiEgOztBIHN0YXJ0LW1hcmtlcidzIGluc2VydGlvbi10eXBlIHNob3VsZCBhbHJlYWR5IGJl IGB0JywgYnV0IHNvbWUKISA7O2NhbGxlcnMgd2FudCB0byBiZSAxMDAlIHN1cmUgaXQgaXMsIHNv IHRoaXMgZnVuY3Rpb24gZXhpc3RzLgohIChkZWZ1biBld29jLWxvY2F0aW9uLXNhZmUgKG5vZGUp CiEgICAgIkdldCBOT0RFJ3Mgc3RhcnQgbG9jYXRpb24uICAKISBBbHNvIHNldCB0aGUgc3RhcnQt bWFya2VyJ3MgaW5zZXJ0aW9uIHR5cGUgdG8gYHQnIHNvIHRoYXQgaXQgd2lsbCBzdGF5CiEgYWZ0 ZXIgYW55IHRleHQgaW5zZXJ0ZWQgYXQgdGhhdCBwb2ludC4iCiEgCiEgICAgKGxldAohICAgICAg ICgobmV4dC1zdGFydC1tYXJrZXIgKGV3b2MtbG9jYXRpb24gbm9kZSkpKQohICAgICAgIChzZXQt bWFya2VyLWluc2VydGlvbi10eXBlIG5leHQtc3RhcnQtbWFya2VyIHQpCiEgICAgICAgbmV4dC1z dGFydC1tYXJrZXIpKQohIAohIAwKISA7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiEgOzs7ICAgICAg ICAgICAgICAgICAgUHJpbnRpbmcgYW5kIHVucHJpbnRpbmcKISAKISAoZGVmdW4gZXdvYy0tbWFy ay1ub2RlLWVtcHR5IChub2RlKQohICAgICJNYXJrIE5PREUgZW1wdHkgKGJ1dCBkb24ndCBlbXB0 eSBpdCwgYXNzdW1lIGl0IHdhcyBlbXB0aWVkKQohIElOVEVSTkFMIFVTRSBPTkxZLiIKISAgICAo bGV0CiEgICAgICAgKChzdGFydC1tYXJrZXIgKGV3b2MtLW5vZGUtc3RhcnQtbWFya2VyIG5vZGUp KSkKISAgICAgICAod2hlbiBzdGFydC1tYXJrZXIKISAJIChzZXQtbWFya2VyIHN0YXJ0LW1hcmtl ciBuaWwpCiEgCSAoc2V0ZgohIAkgICAgKGV3b2MtLW5vZGUtc3RhcnQtbWFya2VyIG5vZGUpCiEg CSAgICBuaWwpKSkpCiEgCiEgKGRlZnVuIGV3b2MtLWRlbGV0ZS1ub2RlLXRleHQgKG5vZGUpCiEg ICAgIkRlbGV0ZSBhIG5vZGUncyB0ZXh0LiIKISAgICAod2hlbgohICAgICAgIChld29jLS1ub2Rl LXN0YXJ0LW1hcmtlciBub2RlKQohICAgICAgIChkZWxldGUtcmVnaW9uCiEgCSAoZXdvYy0tbm9k ZS1zdGFydC1tYXJrZXIgbm9kZSkKISAJIChld29jLS1uZXh0LXN0YXJ0LW1hcmtlciBub2RlKSkK ISAgICAgICAoZXdvYy0tbWFyay1ub2RlLWVtcHR5IG5vZGUpKSkKISAKISAoZGVmdW4gZXdvYy0t cHJpbnQtYW5ldyAobm9kZSBwcCkKISAgICAiUHJpbnQgYSBub2RlIHRoYXQgd2FzIGVyYXNlZC4i CiEgICAgKGV3b2MtLW1hcmstbm9kZS1lbXB0eSBub2RlKQohICAgIChld29jLS1wcmludC1ub2Rl IG5vZGUgcHApKQohIAohICAgIAohIChkZWZ1biBld29jLS1wcmludC1ub2RlIChub2RlIHByaW50 ZXIpCiEgICAgIlByaW50IE5PREUgYXQgcG9pbnQgdXNpbmcgUFJJTlRFUi4KISBTZXQgTk9ERSdz IHN0YXJ0LW1hcmtlciBhY2NvcmRpbmdseS4iCiEgICAgOztPbmx5IHByaW50IGlmIG5vZGUgaXMg Y3VycmVudGx5IGVtcHR5CiEgICAgKHdoZW4gKGV3b2MtLW5vZGUtc3RhcnQtbWFya2VyIG5vZGUp CiEgICAgICAgKGVycm9yICJld29jLS1wcmludC1ub2RlIGNhbGxlZCB3aXRoIGEgbm9kZSB0aGF0 J3MgYWxyZWFkeSBwcmludGVkIikpCiEgCiEgICAgKGxldAohICAgICAgICgKISAJIChzdGFydC1w b3MgKHBvaW50KSkKISAJIChpbmhpYml0LXJlYWQtb25seSB0KSkKISAKISAgICAgICAoZnVuY2Fs bCBwcmludGVyIChld29jLWRhdGEgbm9kZSkpCiEgICAgICAgKGxldAohIAkgKChzZXBhcmF0b3Ig KGV3b2MtLXNlcGFyYXRvciBld29jKSkpCiEgCSAod2hlbiBzZXBhcmF0b3IgKGluc2VydCBzZXBh cmF0b3IpKSkKISAKISAgICAgICA7O09ubHkgc2V0IHVwIHRoaXMgbm9kZSBhcyBub24tZW1wdHkg aWYgaXQgYWN0dWFsbHkgaXMKISAgICAgICA7O25vbi1lbXB0eS4KISAgICAgICAodW5sZXNzCiEg CSAoPSBzdGFydC1wb3MgKHBvaW50KSkKISAJIDs7U2V0IGl0cyBzdGFydC1tYXJrZXIgdG8gdGhl IHBvc2l0aW9uIHdlIHN0YXJ0ZWQKISAJIDs7cHJpbnRpbmcgZnJvbS4KISAJIChzZXRmIAohIAkg ICAgKGV3b2MtLW5vZGUtc3RhcnQtbWFya2VyIG5vZGUpCiEgCSAgICAoY29weS1tYXJrZXIgc3Rh cnQtcG9zIHQpKSkpKQohIAogIAwKICA7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgOzs7ICAgICAg ICAgICAgICAgICAgUHVibGljIG1lbWJlcnMgb2YgdGhlIEV3b2MgcGFja2FnZQogIAogIAohIChk ZWZ1biBld29jLWNyZWF0ZSAocHJldHR5LXByaW50ZXIgJm9wdGlvbmFsIGhlYWRlciBmb290ZXIg c2VwYXJhdG9yKQohICAgIAogICAgIkNyZWF0ZSBhbiBlbXB0eSBld29jLgogIAogIFRoZSBld29j IHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIGN1cnJlbnQgYnVmZmVyIGF0IHRoZSBjdXJyZW50IHBv c2l0aW9uLgogIAogIFBSRVRUWS1QUklOVEVSIHNob3VsZCBiZSBhIGZ1bmN0aW9uIHRoYXQgdGFr ZXMgb25lIGFyZ3VtZW50LCBhbgogIGVsZW1lbnQsIGFuZCBpbnNlcnRzIGEgc3RyaW5nIHJlcHJl c2VudGluZyBpdCBpbiB0aGUgYnVmZmVyIChhdAohIHBvaW50KS4gVGhlIHN0cmluZyBQUkVUVFkt UFJJTlRFUiBpbnNlcnRzIG1heSBiZSBlbXB0eSBvciBzcGFuIHNldmVyYWwKISBsaW5zZS4gU0VQ QVJBVE9SIHdpbGwgYmUgaW5zZXJ0ZWQgYXV0b21hdGljYWxseS4gVGhlIFBSRVRUWS1QUklOVEVS CiEgc2hvdWxkIHVzZSBpbnNlcnQsIGFuZCBub3QgaW5zZXJ0LWJlZm9yZS1tYXJrZXJzLgogIAoh IE9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBIRUFERVIgaXMgYSBzdHJpbmcgdGhhdCB3aWxsIGFs d2F5cyBiZQogIHByZXNlbnQgYXQgdGhlIHRvcCBvZiB0aGUgZXdvYy4gSEVBREVSIHNob3VsZCBl bmQgd2l0aCBhCiEgbmV3bGluZS4gIE9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IEZPT1RFUiBpcyBz aW1pbGFyLCBhbmQgd2lsbAohIGJlIGluc2VydGVkIGF0IHRoZSBib3R0b20gb2YgdGhlIGV3b2Mu CiEgCiEgT3B0aW9uYWwgZm91cnRoIGFyZ3VtZW50IFNFUEFSQVRPUiBpcyBhIHN0cmluZy4gIEl0 IHdpbGwgYmUgaW5zZXJ0ZWQKISBhZnRlciBlYWNoIGVudHJ5IGFuZCBhZnRlciBoZWFkZXIgYW5k IGZvb3Rlci4gIEl0IGRlZmF1bHRzIHRvIG9uZQohIG5ld2xpbmUuIgohIAohICAgKGxldCogKAoh IAkgICAoc2VwYXJhdG9yCiEgCSAgICAgIChjb25kCiEgCQkgKChudWxsIHNlcGFyYXRvcikgIlxu IikKISAJCSAoKHN0cmluZ3Agc2VwYXJhdG9yKQohIAkJICAgIChpZiAoc3RyaW5nPSBzZXBhcmF0 b3IgIiIpIG5pbCBzZXBhcmF0b3IpKQohIAkJICh0IChlcnJvciAiZXdvYy1jcmVhdGU6IHNlcGFy YXRvciAlcyBpcyBub3QgYSBzdHJpbmciCiEgCQkgICAgICAgc2VwYXJhdG9yKSkpKQohIAkgICAo bmV3LWV3b2MKISAJICAgICAgKGV3b2MtLWNyZWF0ZSAKISAJCSAoY3VycmVudC1idWZmZXIpCiEg CQkgcHJldHR5LXByaW50ZXIKISAJCSBuaWwgbmlsIChld29jLS1kbGwtY3JlYXRlKQohIAkJIHNl cGFyYXRvcikpCiAgCSAgIChwb3MgKHBvaW50KSkpCiAgICAgICAoZXdvYy0tc2V0LWJ1ZmZlci1i aW5kLWRsbCBuZXctZXdvYwogIAk7OyBTZXQgZGVmYXVsdCB2YWx1ZXMKICAJKHVubGVzcyBoZWFk ZXIgKHNldHEgaGVhZGVyICIiKSkKICAJKHVubGVzcyBmb290ZXIgKHNldHEgZm9vdGVyICIiKSkK ICAJKHNldGYgKGV3b2MtLW5vZGUtc3RhcnQtbWFya2VyIGRsbCkgKGNvcHktbWFya2VyIHBvcykp CiEgCiEgCShsZXQqCiEgCSAgICgoZm9vdCAKISAJICAgICAgIChld29jLWVudGVyLWJlZm9yZQoh IAkJICBuZXctZXdvYyBkbGwgZm9vdGVyICMnaW5zZXJ0KSkKISAJICAgICAgCiEgCSAgICAgICho ZWFkIAohIAkJIChld29jLWVudGVyLWJlZm9yZQohIAkJICAgIG5ldy1ld29jIGZvb3QgaGVhZGVy ICMnaW5zZXJ0KSkpCiEgCSAgIAogIAkgICAoc2V0ZiAoZXdvYy0taGVhZGVyIG5ldy1ld29jKSBo ZWFkKQogIAkgICAoc2V0ZiAoZXdvYy0tZm9vdGVyIG5ldy1ld29jKSBmb290KSkpCisgICAgICAK ICAgICAgIDs7IFJldHVybiB0aGUgZXdvYwogICAgICAgbmV3LWV3b2MpKQogIAoqKioqKioqKioq KioqKioKKioqIDM0NiwzNjEgKioqKgogICAgKGV3b2MtLXNldC1idWZmZXItYmluZC1kbGwgZXdv YwogICAgICAoZXdvYy1lbnRlci1iZWZvcmUgZXdvYyAoZXdvYy0tbm9kZS1uZXh0IGRsbCBub2Rl KSBkYXRhKSkpCiAgCiEgKGRlZnVuIGV3b2MtZW50ZXItYmVmb3JlIChld29jIG5vZGUgZGF0YSkK ISAgICJFbnRlciBhIG5ldyBlbGVtZW50IERBVEEgYmVmb3JlIE5PREUgaW4gRVdPQy4KICBSZXR1 cm5zIHRoZSBuZXcgTk9ERS4iCiAgICAoZXdvYy0tc2V0LWJ1ZmZlci1iaW5kLWRsbCBld29jCiEg ICAgIChld29jLS1ub2RlLWVudGVyLWJlZm9yZQohICAgICAgbm9kZQohICAgICAgKGV3b2MtLWNy ZWF0ZS1ub2RlCiEgICAgICAgZGF0YQohICAgICAgIChld29jLS1wcmV0dHktcHJpbnRlciBld29j KQohICAgICAgIChld29jLS1ub2RlLXN0YXJ0LW1hcmtlciBub2RlKSkpKSkKICAKICAoZGVmdW4g ZXdvYy1uZXh0IChld29jIG5vZGUpCiAgICAiR2V0IHRoZSBuZXh0IG5vZGUuCi0tLSA0NDcsNDY5 IC0tLS0KICAgIChld29jLS1zZXQtYnVmZmVyLWJpbmQtZGxsIGV3b2MKICAgICAgKGV3b2MtZW50 ZXItYmVmb3JlIGV3b2MgKGV3b2MtLW5vZGUtbmV4dCBkbGwgbm9kZSkgZGF0YSkpKQogIAohIChk ZWZ1biBld29jLWVudGVyLWJlZm9yZSAoZXdvYyBub2RlIGRhdGEgJm9wdGlvbmFsIHByaW50ZXIp CiEgICAgIkNyZWF0ZSBhIG5ldyBlbGVtZW50IERBVEEgYmVmb3JlIE5PREUgaW4gRVdPQy4KICBS ZXR1cm5zIHRoZSBuZXcgTk9ERS4iCiAgICAgKGV3b2MtLXNldC1idWZmZXItYmluZC1kbGwgZXdv YwohICAgICAgIChsZXQKISAJICgobmV3LW5vZGUKISAJICAgICAoZXdvYy0tbm9kZS1jcmVhdGUg CiEgCQluaWwKISAJCWRhdGEpKSkKISAJIChld29jLS1ub2RlLWVudGVyLWJlZm9yZSBub2RlIG5l dy1ub2RlKQohIAkgOztQcmludCB0aGUgbm9kZSBvbmx5IGFmdGVyIGl0IGhhcyBiZWVuIGluc2Vy dGVkLgohIAkgKHNhdmUtZXhjdXJzaW9uCiEgCSAgICAoZ290by1jaGFyIChld29jLWxvY2F0aW9u LXNhZmUgbm9kZSkpCiEgCSAgICAoZXdvYy0tcHJpbnQtbm9kZSAKISAJICAgICAgIG5ldy1ub2Rl IAohIAkgICAgICAgKG9yIHByaW50ZXIgKGV3b2MtLXByZXR0eS1wcmludGVyIGV3b2MpKSkpCiEg CSBuZXctbm9kZSkpKQogIAogIChkZWZ1biBld29jLW5leHQgKGV3b2Mgbm9kZSkKICAgICJHZXQg dGhlIG5leHQgbm9kZS4KKioqKioqKioqKioqKioqCioqKiA0MDQsNDA5ICoqKioKLS0tIDUxMiw1 MTggLS0tLQogICAgICAgIChpZiAoYXBwbHkgbWFwLWZ1bmN0aW9uIChld29jLS1ub2RlLWRhdGEg bm9kZSkgYXJncykKICAJICAoZXdvYy0tcmVmcmVzaC1ub2RlIChld29jLS1wcmV0dHktcHJpbnRl ciBld29jKSBub2RlKSkKICAgICAgICAoc2V0cSBub2RlIChld29jLS1ub2RlLW5leHQgZGxsIG5v ZGUpKSkpKQorIChkZWZhbGlhcyAnZXdvYy1mb3JlYWNoIGV3b2MtbWFwKQogIAogIChkZWZ1biBl d29jLWZpbHRlciAoZXdvYyBwcmVkaWNhdGUgJnJlc3QgYXJncykKICAgICJSZW1vdmUgYWxsIGVs ZW1lbnRzIGluIEVXT0MgZm9yIHdoaWNoIFBSRURJQ0FURSByZXR1cm5zIG5pbC4KKioqKioqKioq KioqKioqCioqKiA0NDAsNDUwICoqKioKICAgICAgICBuaWwpCiAgCiAgICAgICA7OyBCZWZvcmUg c2Vjb25kIGVsZW0/CiEgICAgICAoKDwgcG9zIChld29jLS1ub2RlLXN0YXJ0LW1hcmtlciAoZXdv Yy0tbm9kZS1udGggZGxsIDIpKSkKICAgICAgICAoZXdvYy0tbm9kZS1udGggZGxsIDEpKQogIAog ICAgICAgOzsgQWZ0ZXIgb25lLWJlZm9yZS1sYXN0IGVsZW0/CiEgICAgICAoKD49IHBvcyAoZXdv Yy0tbm9kZS1zdGFydC1tYXJrZXIgKGV3b2MtLW5vZGUtbnRoIGRsbCAtMikpKQogICAgICAgIChl d29jLS1ub2RlLW50aCBkbGwgLTIpKQogIAogICAgICAgOzsgV2Ugbm93IGtub3cgdGhhdCBwb3Mg aXMgd2l0aGluIGEgZWxlbS4KLS0tIDU0OSw1NTkgLS0tLQogIAkgICAgbmlsKQogIAogIAkgOzsg QmVmb3JlIHNlY29uZCBlbGVtPwohIAkgKCg8IHBvcyAoZXdvYy1sb2NhdGlvbiAoZXdvYy0tbm9k ZS1udGggZGxsIDIpKSkKICAJICAgIChld29jLS1ub2RlLW50aCBkbGwgMSkpCiAgCiAgCSA7OyBB ZnRlciBvbmUtYmVmb3JlLWxhc3QgZWxlbT8KISAJICgoPj0gcG9zIChld29jLWxvY2F0aW9uIChl d29jLS1ub2RlLW50aCBkbGwgLTIpKSkKICAJICAgIChld29jLS1ub2RlLW50aCBkbGwgLTIpKQog IAogIAkgOzsgV2Ugbm93IGtub3cgdGhhdCBwb3MgaXMgd2l0aGluIGEgZWxlbS4KKioqKioqKioq KioqKioqCioqKiA0NTIsNDczICoqKioKICAgICAgICA7OyBNYWtlIGFuIGVkdWNhdGVkIGd1ZXNz IGFib3V0IHdoaWNoIG9mIHRoZSB0aHJlZSBrbm93bgogICAgICAgIDs7IG5vZGUnZXMgKHRoZSBm aXJzdCwgdGhlIGxhc3QsIG9yIEdVRVNTKSBpcyBuZWFyZXN0LgogICAgICAgIChsZXQqICgoYmVz dC1ndWVzcyAoZXdvYy0tbm9kZS1udGggZGxsIDEpKQohIAkgICAgIChkaXN0YW5jZSAoYWJzICgt IHBvcyAoZXdvYy0tbm9kZS1zdGFydC1tYXJrZXIgYmVzdC1ndWVzcykpKSkpCiAgCSh3aGVuIGd1 ZXNzCiEgCSAgKGxldCAoKGQgKGFicyAoLSBwb3MgKGV3b2MtLW5vZGUtc3RhcnQtbWFya2VyIGd1 ZXNzKSkpKSkKICAJICAgICh3aGVuICg8IGQgZGlzdGFuY2UpCiAgCSAgICAgIChzZXRxIGRpc3Rh bmNlIGQpCiAgCSAgICAgIChzZXRxIGJlc3QtZ3Vlc3MgZ3Vlc3MpKSkpCiAgCiAgCShsZXQqICgo ZyAoZXdvYy0tbm9kZS1udGggZGxsIC0xKSkJO0NoZWNrIHRoZSBsYXN0IGVsZW0KISAJICAgICAg IChkIChhYnMgKC0gcG9zIChld29jLS1ub2RlLXN0YXJ0LW1hcmtlciBnKSkpKSkKICAJICAod2hl biAoPCBkIGRpc3RhbmNlKQogIAkgICAgKHNldHEgZGlzdGFuY2UgZCkKICAJICAgIChzZXRxIGJl c3QtZ3Vlc3MgZykpKQogIAogIAkod2hlbiAoZXdvYy0tbGFzdC1ub2RlIGV3b2MpIDtDaGVjayAi cHJldmlvdXMiLgogIAkgIChsZXQqICgoZyAoZXdvYy0tbGFzdC1ub2RlIGV3b2MpKQohIAkJIChk IChhYnMgKC0gcG9zIChld29jLS1ub2RlLXN0YXJ0LW1hcmtlciBnKSkpKSkKICAJICAgICh3aGVu ICg8IGQgZGlzdGFuY2UpCiAgCSAgICAgIChzZXRxIGRpc3RhbmNlIGQpCiAgCSAgICAgIChzZXRx IGJlc3QtZ3Vlc3MgZykpKSkKLS0tIDU2MSw1ODIgLS0tLQogIAkgICAgOzsgTWFrZSBhbiBlZHVj YXRlZCBndWVzcyBhYm91dCB3aGljaCBvZiB0aGUgdGhyZWUga25vd24KICAJICAgIDs7IG5vZGUn ZXMgKHRoZSBmaXJzdCwgdGhlIGxhc3QsIG9yIEdVRVNTKSBpcyBuZWFyZXN0LgogIAkgICAgKGxl dCogKChiZXN0LWd1ZXNzIChld29jLS1ub2RlLW50aCBkbGwgMSkpCiEgCQkgICAgIChkaXN0YW5j ZSAoYWJzICgtIHBvcyAoZXdvYy1sb2NhdGlvbiBiZXN0LWd1ZXNzKSkpKSkKICAJICAgICAgICh3 aGVuIGd1ZXNzCiEgCQkgIChsZXQgKChkIChhYnMgKC0gcG9zIChld29jLWxvY2F0aW9uIGd1ZXNz KSkpKSkKICAJCSAgICAgKHdoZW4gKDwgZCBkaXN0YW5jZSkKICAJCQkoc2V0cSBkaXN0YW5jZSBk KQogIAkJCShzZXRxIGJlc3QtZ3Vlc3MgZ3Vlc3MpKSkpCiAgCiAgCSAgICAgICAobGV0KiAoKGcg KGV3b2MtLW5vZGUtbnRoIGRsbCAtMSkpIDtDaGVjayB0aGUgbGFzdCBlbGVtCiEgCQkJKGQgKGFi cyAoLSBwb3MgKGV3b2MtbG9jYXRpb24gZykpKSkpCiAgCQkgICh3aGVuICg8IGQgZGlzdGFuY2Up CiAgCQkgICAgIChzZXRxIGRpc3RhbmNlIGQpCiAgCQkgICAgIChzZXRxIGJlc3QtZ3Vlc3MgZykp KQogIAogIAkgICAgICAgKHdoZW4gKGV3b2MtLWxhc3Qtbm9kZSBld29jKSA7Q2hlY2sgInByZXZp b3VzIi4KICAJCSAgKGxldCogKChnIChld29jLS1sYXN0LW5vZGUgZXdvYykpCiEgCQkJICAgKGQg KGFicyAoLSBwb3MgKGV3b2MtbG9jYXRpb24gZykpKSkpCiAgCQkgICAgICh3aGVuICg8IGQgZGlz dGFuY2UpCiAgCQkJKHNldHEgZGlzdGFuY2UgZCkKICAJCQkoc2V0cSBiZXN0LWd1ZXNzIGcpKSkp CioqKioqKioqKioqKioqKgoqKiogNDc5LDQ5NCAqKioqCiAgCShjb25kCiAgCSA7OyBJcyBwb3Mg YWZ0ZXIgdGhlIGd1ZXNzPwogIAkgKCg+PSBwb3MKISAJICAgICAgKGV3b2MtLW5vZGUtc3RhcnQt bWFya2VyIGJlc3QtZ3Vlc3MpKQogIAkgIDs7IExvb3AgdW50aWwgd2UgYXJlIGV4YWN0bHkgb25l IG5vZGUgdG9vIGZhciBkb3duLi4uCiEgCSAgKHdoaWxlICg+PSBwb3MgKGV3b2MtLW5vZGUtc3Rh cnQtbWFya2VyIGJlc3QtZ3Vlc3MpKQogIAkgICAgKHNldHEgYmVzdC1ndWVzcyAoZXdvYy0tbm9k ZS1uZXh0IGRsbCBiZXN0LWd1ZXNzKSkpCiAgCSAgOzsgLi4uYW5kIHJldHVybiB0aGUgcHJldmlv dXMgbm9kZS4KICAJICAoZXdvYy0tbm9kZS1wcmV2IGRsbCBiZXN0LWd1ZXNzKSkKICAKICAJIDs7 IFBvcyBpcyBiZWZvcmUgYmVzdC1ndWVzcwogIAkgKHQKISAJICAod2hpbGUgKDwgcG9zIChld29j LS1ub2RlLXN0YXJ0LW1hcmtlciBiZXN0LWd1ZXNzKSkKICAJICAgIChzZXRxIGJlc3QtZ3Vlc3Mg KGV3b2MtLW5vZGUtcHJldiBkbGwgYmVzdC1ndWVzcykpKQogIAkgIGJlc3QtZ3Vlc3MpKSkpKSkp CiAgCi0tLSA1ODgsNjAzIC0tLS0KICAJICAgICAgIChjb25kCiAgCQkgIDs7IElzIHBvcyBhZnRl ciB0aGUgZ3Vlc3M/CiAgCQkgICgoPj0gcG9zCiEgCQkgICAgICAoZXdvYy1sb2NhdGlvbiBiZXN0 LWd1ZXNzKSkKICAJCSAgICAgOzsgTG9vcCB1bnRpbCB3ZSBhcmUgZXhhY3RseSBvbmUgbm9kZSB0 b28gZmFyIGRvd24uLi4KISAJCSAgICAgKHdoaWxlICg+PSBwb3MgKGV3b2MtbG9jYXRpb24gYmVz dC1ndWVzcykpCiAgCQkJKHNldHEgYmVzdC1ndWVzcyAoZXdvYy0tbm9kZS1uZXh0IGRsbCBiZXN0 LWd1ZXNzKSkpCiAgCQkgICAgIDs7IC4uLmFuZCByZXR1cm4gdGhlIHByZXZpb3VzIG5vZGUuCiAg CQkgICAgIChld29jLS1ub2RlLXByZXYgZGxsIGJlc3QtZ3Vlc3MpKQogIAogIAkJICA7OyBQb3Mg aXMgYmVmb3JlIGJlc3QtZ3Vlc3MKICAJCSAgKHQKISAJCSAgICAgKHdoaWxlICg8IHBvcyAoZXdv Yy1sb2NhdGlvbiBiZXN0LWd1ZXNzKSkKICAJCQkoc2V0cSBiZXN0LWd1ZXNzIChld29jLS1ub2Rl LXByZXYgZGxsIGJlc3QtZ3Vlc3MpKSkKICAJCSAgICAgYmVzdC1ndWVzcykpKSkpKSkKICAKKioq KioqKioqKioqKioqCioqKiA1MDcsNTEzICoqKioKICAgICAgICAoKG5vZGUgKGV3b2MtbG9jYXRl IGV3b2MgKHBvaW50KSkpKQogICAgICAod2hlbiBub2RlCiAgICAgICAgOzsgSWYgd2Ugd2VyZSBw YXN0IHRoZSBsYXN0IGVsZW1lbnQsIGZpcnN0IGp1bXAgdG8gaXQuCiEgICAgICAgKHdoZW4gKD49 IChwb2ludCkgKGV3b2MtLW5vZGUtc3RhcnQtbWFya2VyIChld29jLS1ub2RlLXJpZ2h0IG5vZGUp KSkKICAJKHNldHEgYXJnICgxLSBhcmcpKSkKICAgICAgICAod2hpbGUgKGFuZCBub2RlICg+IGFy ZyAwKSkKICAJKHNldHEgYXJnICgxLSBhcmcpKQotLS0gNjE2LDYyMiAtLS0tCiAgICAgICAgKChu b2RlIChld29jLWxvY2F0ZSBld29jIChwb2ludCkpKSkKICAgICAgICAod2hlbiBub2RlCiAgCSA7 OyBJZiB3ZSB3ZXJlIHBhc3QgdGhlIGxhc3QgZWxlbWVudCwgZmlyc3QganVtcCB0byBpdC4KISAJ ICh3aGVuICg+PSAocG9pbnQpIChld29jLWxvY2F0aW9uIChld29jLS1ub2RlLXJpZ2h0IG5vZGUp KSkKICAJICAgIChzZXRxIGFyZyAoMS0gYXJnKSkpCiAgCSAod2hpbGUgKGFuZCBub2RlICg+IGFy ZyAwKSkKICAJICAgIChzZXRxIGFyZyAoMS0gYXJnKSkKKioqKioqKioqKioqKioqCioqKiA1MzMs NTM5ICoqKioKICAoZGVmdW4gZXdvYy1nb3RvLW5vZGUgKGV3b2Mgbm9kZSkKICAgICJNb3ZlIHBv aW50IHRvIE5PREUuIgogICAgKGV3b2MtLXNldC1idWZmZXItYmluZC1kbGwgZXdvYwohICAgICAo Z290by1jaGFyIChld29jLS1ub2RlLXN0YXJ0LW1hcmtlciBub2RlKSkKICAgICAgKGlmIGdvYWwt Y29sdW1uIChtb3ZlLXRvLWNvbHVtbiBnb2FsLWNvbHVtbikpCiAgICAgIChzZXRmIChld29jLS1s YXN0LW5vZGUgZXdvYykgbm9kZSkpKQogIAotLS0gNjQyLDY0OCAtLS0tCiAgKGRlZnVuIGV3b2Mt Z290by1ub2RlIChld29jIG5vZGUpCiAgICAgIk1vdmUgcG9pbnQgdG8gTk9ERS4iCiAgICAgKGV3 b2MtLXNldC1idWZmZXItYmluZC1kbGwgZXdvYwohICAgICAgIChnb3RvLWNoYXIgKGV3b2MtbG9j YXRpb24gbm9kZSkpCiAgICAgICAgKGlmIGdvYWwtY29sdW1uIChtb3ZlLXRvLWNvbHVtbiBnb2Fs LWNvbHVtbikpCiAgICAgICAgKHNldGYgKGV3b2MtLWxhc3Qtbm9kZSBld29jKSBub2RlKSkpCiAg CioqKioqKioqKioqKioqKgoqKiogNTQ1LDU2MiAqKioqCiAgbnVtYmVyIG9mIGVsZW1lbnRzIG5l ZWRzIHRvIGJlIHJlZnJlc2hlZC4iCiAgICAoZXdvYy0tc2V0LWJ1ZmZlci1iaW5kLWRsbC1sZXQq IGV3b2MKICAgICAgICAoKGZvb3RlciAoZXdvYy0tZm9vdGVyIGV3b2MpKSkKISAgICAgKGxldCAo KGluaGliaXQtcmVhZC1vbmx5IHQpKQohICAgICAgIChkZWxldGUtcmVnaW9uIChld29jLS1ub2Rl LXN0YXJ0LW1hcmtlciAoZXdvYy0tbm9kZS1udGggZGxsIDEpKQohIAkJICAgICAoZXdvYy0tbm9k ZS1zdGFydC1tYXJrZXIgZm9vdGVyKSkKISAgICAgICAoZ290by1jaGFyIChld29jLS1ub2RlLXN0 YXJ0LW1hcmtlciBmb290ZXIpKQohICAgICAgIChsZXQgKChub2RlIChld29jLS1ub2RlLW50aCBk bGwgMSkpKQogIAkod2hpbGUgKG5vdCAoZXEgbm9kZSBmb290ZXIpKQohIAkgIChzZXQtbWFya2Vy IChld29jLS1ub2RlLXN0YXJ0LW1hcmtlciBub2RlKSAocG9pbnQpKQohIAkgIChmdW5jYWxsIChl d29jLS1wcmV0dHktcHJpbnRlciBld29jKQohIAkJICAgKGV3b2MtLW5vZGUtZGF0YSBub2RlKSkK ISAJICAoaW5zZXJ0ICJcbiIpCiAgCSAgKHNldHEgbm9kZSAoZXdvYy0tbm9kZS1uZXh0IGRsbCBu b2RlKSkpKSkKISAgICAgKHNldC1tYXJrZXIgKGV3b2MtLW5vZGUtc3RhcnQtbWFya2VyIGZvb3Rl cikgKHBvaW50KSkpKQogIAogIChkZWZ1biBld29jLWNvbGxlY3QgKGV3b2MgcHJlZGljYXRlICZy ZXN0IGFyZ3MpCiAgICAiU2VsZWN0IGVsZW1lbnRzIGZyb20gRVdPQyB1c2luZyBQUkVESUNBVEUu Ci0tLSA2NTQsNjc0IC0tLS0KICBudW1iZXIgb2YgZWxlbWVudHMgbmVlZHMgdG8gYmUgcmVmcmVz aGVkLiIKICAgICAoZXdvYy0tc2V0LWJ1ZmZlci1iaW5kLWRsbC1sZXQqIGV3b2MKICAgICAgICAo KGZvb3RlciAoZXdvYy0tZm9vdGVyIGV3b2MpKSkKISAgICAgICAobGV0ICgoaW5oaWJpdC1yZWFk LW9ubHkgdCkKISAJICAgICAgKGZpcnN0LW5vZGUgKGV3b2MtLW5vZGUtbnRoIGRsbCAxKSkpCiEg CSAoZGVsZXRlLXJlZ2lvbiAKISAJICAgIChld29jLWxvY2F0aW9uIGZpcnN0LW5vZGUpCiEgCSAg ICAoZXdvYy1sb2NhdGlvbiBmb290ZXIpKQohIAkgKGdvdG8tY2hhciAoZXdvYy1sb2NhdGlvbiBm b290ZXIpKQohIAkgKGxldCAoKG5vZGUgZmlyc3Qtbm9kZSkKISAJCSAocHAgKGV3b2MtLXByZXR0 eS1wcmludGVyIGV3b2MpKSkKICAJICAgICh3aGlsZSAobm90IChlcSBub2RlIGZvb3RlcikpCiEg CSAgICAgICAoZXdvYy0tcHJpbnQtYW5ldyBub2RlIHBwKQogIAkgICAgICAgKHNldHEgbm9kZSAo ZXdvYy0tbm9kZS1uZXh0IGRsbCBub2RlKSkpKSkKISAKISAgICAgICA7O0ZpbmFsbHksIHNldCB0 aGUgbGFzdCBtYXJrZXIuICBJdCBpcyBub3QgbmVjY2Vzc2FyaWx5CiEgICAgICAgOztmb290ZXIn cyBvd24gbWFya2VyIGJlY2F1c2UgZm9vdGVyIG1heSBiZSBibGFuay4KISAgICAgICAoc2V0LW1h cmtlciAoZXdvYy1sb2NhdGlvbiBmb290ZXIpIChwb2ludCkpKSkKICAKICAoZGVmdW4gZXdvYy1j b2xsZWN0IChld29jIHByZWRpY2F0ZSAmcmVzdCBhcmdzKQogICAgIlNlbGVjdCBlbGVtZW50cyBm cm9tIEVXT0MgdXNpbmcgUFJFRElDQVRFLgoqKioqKioqKioqKioqKioKKioqIDU5NSw2MDIgKioq KgogICAgIlNldCB0aGUgSEVBREVSIGFuZCBGT09URVIgb2YgRVdPQy4iCiAgICAoc2V0ZiAoZXdv Yy0tbm9kZS1kYXRhIChld29jLS1oZWFkZXIgZXdvYykpIGhlYWRlcikKICAgIChzZXRmIChld29j LS1ub2RlLWRhdGEgKGV3b2MtLWZvb3RlciBld29jKSkgZm9vdGVyKQohICAgKGV3b2MtLXJlZnJl c2gtbm9kZSAobGFtYmRhICh4KSAoaW5zZXJ0IGhlYWRlcikpIChld29jLS1oZWFkZXIgZXdvYykp CiEgICAoZXdvYy0tcmVmcmVzaC1ub2RlIChsYW1iZGEgKHgpIChpbnNlcnQgZm9vdGVyKSkgKGV3 b2MtLWZvb3RlciBld29jKSkpCiAgCiAgDAogIChwcm92aWRlICdld29jKQotLS0gNzA3LDcxNCAt LS0tCiAgICAiU2V0IHRoZSBIRUFERVIgYW5kIEZPT1RFUiBvZiBFV09DLiIKICAgIChzZXRmIChl d29jLS1ub2RlLWRhdGEgKGV3b2MtLWhlYWRlciBld29jKSkgaGVhZGVyKQogICAgKHNldGYgKGV3 b2MtLW5vZGUtZGF0YSAoZXdvYy0tZm9vdGVyIGV3b2MpKSBmb290ZXIpCiEgICAoZXdvYy0tcmVm cmVzaC1ub2RlICMnaW5zZXJ0IChld29jLS1oZWFkZXIgZXdvYykpCiEgICAoZXdvYy0tcmVmcmVz aC1ub2RlICMnaW5zZXJ0IChld29jLS1mb290ZXIgZXdvYykpKQogIAogIAwKICAocHJvdmlkZSAn ZXdvYykKCkRpZmYgZmluaXNoZWQgYXQgVHVlIERlYyAgOCAyMjo1ODo1Nwo= ------=_20091208230312_55982--