From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id NAA17538; Mon, 20 Sep 2004 13:59:01 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id NAA19897 for ; Mon, 20 Sep 2004 13:58:59 +0200 (MET DST) Received: from ext.lri.fr (ext.lri.fr [129.175.15.4]) by concorde.inria.fr (8.13.0/8.13.0) with ESMTP id i8KBwxf5020085 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Mon, 20 Sep 2004 13:58:59 +0200 Received: from localhost (localhost [127.0.0.1]) by ext.lri.fr (Postfix) with ESMTP id 5C95619E7F1; Mon, 20 Sep 2004 13:58:59 +0200 (CEST) Received: from ext.lri.fr ([127.0.0.1]) by localhost (ext.lri.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 24542-01; Mon, 20 Sep 2004 13:58:59 +0200 (CEST) Received: from smtp.lri.fr (serveur3-5 [129.175.3.5]) by ext.lri.fr (Postfix) with ESMTP id 3782919E7EF; Mon, 20 Sep 2004 13:58:59 +0200 (CEST) Received: from pc8-142 (pc8-142 [129.175.8.142]) by smtp.lri.fr (Postfix) with ESMTP id 5C874CEE10; Mon, 20 Sep 2004 13:58:58 +0200 (CEST) Received: from filliatr by pc8-142 with local (Exim 3.36 #1 (Debian)) id 1C9Mos-0005x3-00; Mon, 20 Sep 2004 13:58:58 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="g4gmEed5nV" Content-Transfer-Encoding: 7bit Message-ID: <16718.50690.954027.644373@gargle.gargle.HOWL> Date: Mon, 20 Sep 2004 13:58:58 +0200 To: skaller@users.sourceforge.net Cc: caml-list Subject: Re: [Caml-list] type var in functor instance? In-Reply-To: <1095516867.2580.211.camel@pelican.wigram> References: <1095516867.2580.211.camel@pelican.wigram> X-Mailer: VM 7.18 under Emacs 21.3.1 From: Jean-Christophe Filliatre X-Virus-Scanned: by amavisd-new at lri.fr X-Miltered: at concorde with ID 414EC603.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 functor:01 filliatre:01 filliatre:01 lri:01 instantiate:01 functor:01 pervasives:01 lri:01 filliatr:01 int:01 int:01 writes:01 polymorphic:01 module:03 X-Attachments: type="application/octet-stream" name="pset.mli" type="application/octet-stream" name="pset.ml" Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk --g4gmEed5nV Content-Type: text/plain; charset=iso-8859-1 Content-Description: message body and .signature Content-Transfer-Encoding: 8bit skaller writes: > Is it possible instantiate a functor with a module > containing a type variable? I have a Set with t = int, > and I now need 'a * int.. No it is not possible. This is a recurrent question on this list. Various unsatisfying solutions have been proposed, among which - to make a copy of Set with an additional type parameter eveywhere (I attach such a module below. Beware: this is an old version of Set) - to make an unfunctorized version of Set that uses Pervasives.compare, thus polymorphic regards, -- Jean-Christophe Filliātre (http://www.lri.fr/~filliatr) --g4gmEed5nV Content-Type: application/octet-stream Content-Disposition: attachment; filename="pset.mli" Content-Transfer-Encoding: base64 KCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKQooKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopCigqICAgICAgICAgICAgICAgICAgICAg ICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKikKKCogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqKQooKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElO UklBIFJvY3F1ZW5jb3VydCAgICAgICAgICopCigqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKikKKCogIENvcHlyaWdo dCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQg ICAqKQooKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxl IGlzIGRpc3RyaWJ1dGVkICAgICopCigqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICAgICAgICAgKikKKCogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKQoo KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiopCgooKiAkSWQ6IHBzZXQubWxpLHYgMS4yIDIwMDIvMDIvMjIgMTU6NTQ6 NDMgZmlsbGlhdHIgRXhwICQgKikKCigqIE1vZHVsZSBbU2V0XTogc2V0cyBvdmVyIG9yZGVyZWQg dHlwZXMgKikKCigqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIHNldCBkYXRhIHN0cnVjdHVy ZSwgZ2l2ZW4gYSB0b3RhbCBvcmRlcmluZwogICBmdW5jdGlvbiBvdmVyIHRoZSBzZXQgZWxlbWVu dHMuIEFsbCBvcGVyYXRpb25zIG92ZXIgc2V0cwogICBhcmUgcHVyZWx5IGFwcGxpY2F0aXZlIChu byBzaWRlLWVmZmVjdHMpLgogICBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBiYWxhbmNlZCBiaW5h cnkgdHJlZXMsIGFuZCBpcyB0aGVyZWZvcmUKICAgcmVhc29uYWJseSBlZmZpY2llbnQ6IGluc2Vy dGlvbiBhbmQgbWVtYmVyc2hpcCB0YWtlIHRpbWUKICAgbG9nYXJpdGhtaWMgaW4gdGhlIHNpemUg b2YgdGhlIHNldCwgZm9yIGluc3RhbmNlLiAqKQoKbW9kdWxlIHR5cGUgUE9yZGVyZWRUeXBlID0K ICBzaWcKICAgIHR5cGUgJ2EgdAogICAgdmFsIGNvbXBhcmU6ICdhIHQgLT4gJ2EgdCAtPiBpbnQK ICBlbmQKICAgICAgICAgICgqIFRoZSBpbnB1dCBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0b3IgW1Nl dC5NYWtlXS4KICAgICAgICAgICAgIFt0XSBpcyB0aGUgdHlwZSBvZiB0aGUgc2V0IGVsZW1lbnRz LgogICAgICAgICAgICAgW2NvbXBhcmVdIGlzIGEgdG90YWwgb3JkZXJpbmcgZnVuY3Rpb24gb3Zl ciB0aGUgc2V0IGVsZW1lbnRzLgogICAgICAgICAgICAgVGhpcyBpcyBhIHR3by1hcmd1bWVudCBm dW5jdGlvbiBbZl0gc3VjaCB0aGF0CiAgICAgICAgICAgICBbZiBlMSBlMl0gaXMgemVybyBpZiB0 aGUgZWxlbWVudHMgW2UxXSBhbmQgW2UyXSBhcmUgZXF1YWwsCiAgICAgICAgICAgICBbZiBlMSBl Ml0gaXMgc3RyaWN0bHkgbmVnYXRpdmUgaWYgW2UxXSBpcyBzbWFsbGVyIHRoYW4gW2UyXSwKICAg ICAgICAgICAgIGFuZCBbZiBlMSBlMl0gaXMgc3RyaWN0bHkgcG9zaXRpdmUgaWYgW2UxXSBpcyBn cmVhdGVyIHRoYW4gW2UyXS4KICAgICAgICAgICAgIEV4YW1wbGU6IGEgc3VpdGFibGUgb3JkZXJp bmcgZnVuY3Rpb24gaXMKICAgICAgICAgICAgIHRoZSBnZW5lcmljIHN0cnVjdHVyYWwgY29tcGFy aXNvbiBmdW5jdGlvbiBbY29tcGFyZV0uICopCgptb2R1bGUgdHlwZSBTID0KICBzaWcKICAgIHR5 cGUgJ2EgZWx0CiAgICAgICAgICAoKiBUaGUgdHlwZSBvZiB0aGUgc2V0IGVsZW1lbnRzLiAqKQog ICAgdHlwZSAnYSB0CiAgICAgICAgICAoKiBUaGUgdHlwZSBvZiBzZXRzLiAqKQogICAgdmFsIGVt cHR5OiAnYSB0CiAgICAgICAgICAoKiBUaGUgZW1wdHkgc2V0LiAqKQogICAgdmFsIGlzX2VtcHR5 OiAnYSB0IC0+IGJvb2wKICAgICAgICAoKiBUZXN0IHdoZXRoZXIgYSBzZXQgaXMgZW1wdHkgb3Ig bm90LiAqKQogICAgdmFsIG1lbTogJ2EgZWx0IC0+ICdhIHQgLT4gYm9vbAogICAgICAgICgqIFtt ZW0geCBzXSB0ZXN0cyB3aGV0aGVyIFt4XSBiZWxvbmdzIHRvIHRoZSBzZXQgW3NdLiAqKQogICAg dmFsIGFkZDogJ2EgZWx0IC0+ICdhIHQgLT4gJ2EgdAogICAgICAgICgqIFthZGQgeCBzXSByZXR1 cm5zIGEgc2V0IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIG9mIFtzXSwKICAgICAgICAgICBwbHVz IFt4XS4gSWYgW3hdIHdhcyBhbHJlYWR5IGluIFtzXSwgW3NdIGlzIHJldHVybmVkIHVuY2hhbmdl ZC4gKikKICAgIHZhbCBzaW5nbGV0b246ICdhIGVsdCAtPiAnYSB0CiAgICAgICAgKCogW3Npbmds ZXRvbiB4XSByZXR1cm5zIHRoZSBvbmUtZWxlbWVudCBzZXQgY29udGFpbmluZyBvbmx5IFt4XS4g KikKICAgIHZhbCByZW1vdmU6ICdhIGVsdCAtPiAnYSB0IC0+ICdhIHQKICAgICAgICAoKiBbcmVt b3ZlIHggc10gcmV0dXJucyBhIHNldCBjb250YWluaW5nIGFsbCBlbGVtZW50cyBvZiBbc10sCiAg ICAgICAgICAgZXhjZXB0IFt4XS4gSWYgW3hdIHdhcyBub3QgaW4gW3NdLCBbc10gaXMgcmV0dXJu ZWQgdW5jaGFuZ2VkLiAqKQogICAgdmFsIHVuaW9uOiAnYSB0IC0+ICdhIHQgLT4gJ2EgdAogICAg dmFsIGludGVyOiAnYSB0IC0+ICdhIHQgLT4gJ2EgdAogICAgdmFsIGRpZmY6ICdhIHQgLT4gJ2Eg dCAtPiAnYSB0CiAgICAgICAgKCogVW5pb24sIGludGVyc2VjdGlvbiBhbmQgc2V0IGRpZmZlcmVu Y2UuICopCiAgICB2YWwgY29tcGFyZTogJ2EgdCAtPiAnYSB0IC0+IGludAogICAgICAgICgqIFRv dGFsIG9yZGVyaW5nIGJldHdlZW4gc2V0cy4gQ2FuIGJlIHVzZWQgYXMgdGhlIG9yZGVyaW5nIGZ1 bmN0aW9uCiAgICAgICAgICAgZm9yIGRvaW5nIHNldHMgb2Ygc2V0cy4gKikKICAgIHZhbCBlcXVh bDogJ2EgdCAtPiAnYSB0IC0+IGJvb2wKICAgICAgICAoKiBbZXF1YWwgczEgczJdIHRlc3RzIHdo ZXRoZXIgdGhlIHNldHMgW3MxXSBhbmQgW3MyXSBhcmUKICAgICAgICAgICBlcXVhbCwgdGhhdCBp cywgY29udGFpbiBlcXVhbCBlbGVtZW50cy4gKikKICAgIHZhbCBzdWJzZXQ6ICdhIHQgLT4gJ2Eg dCAtPiBib29sCiAgICAgICAgKCogW3N1YnNldCBzMSBzMl0gdGVzdHMgd2hldGhlciB0aGUgc2V0 IFtzMV0gaXMgYSBzdWJzZXQgb2YKICAgICAgICAgICB0aGUgc2V0IFtzMl0uICopCiAgICB2YWwg aXRlcjogKCdhIGVsdCAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXQKICAgICAgICAoKiBbaXRlciBm IHNdIGFwcGxpZXMgW2ZdIGluIHR1cm4gdG8gYWxsIGVsZW1lbnRzIG9mIFtzXS4KICAgICAgICAg ICBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIGVsZW1lbnRzIG9mIFtzXSBhcmUgcHJlc2VudGVkIHRv IFtmXQogICAgICAgICAgIGlzIHVuc3BlY2lmaWVkLiAqKQogICAgdmFsIGZvbGQ6ICgnYSBlbHQg LT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2IKICAgICAgICAoKiBbZm9sZCBmIHMgYV0g Y29tcHV0ZXMgWyhmIHhOIC4uLiAoZiB4MiAoZiB4MSBhKSkuLi4pXSwKICAgICAgICAgICB3aGVy ZSBbeDEgLi4uIHhOXSBhcmUgdGhlIGVsZW1lbnRzIG9mIFtzXS4KICAgICAgICAgICBUaGUgb3Jk ZXIgaW4gd2hpY2ggZWxlbWVudHMgb2YgW3NdIGFyZSBwcmVzZW50ZWQgdG8gW2ZdIGlzCiAgICAg ICAgICAgdW5zcGVjaWZpZWQuICopCiAgICB2YWwgZm9yX2FsbDogKCdhIGVsdCAtPiBib29sKSAt PiAnYSB0IC0+IGJvb2wKICAgICAgICAoKiBbZm9yX2FsbCBwIHNdIGNoZWNrcyBpZiBhbGwgZWxl bWVudHMgb2YgdGhlIHNldAogICAgICAgICAgIHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBbcF0uICop CiAgICB2YWwgZXhpc3RzOiAoJ2EgZWx0IC0+IGJvb2wpIC0+ICdhIHQgLT4gYm9vbAogICAgICAg ICgqIFtleGlzdHMgcCBzXSBjaGVja3MgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgb2YKICAgICAg ICAgICB0aGUgc2V0IHNhdGlzZmllcyB0aGUgcHJlZGljYXRlIFtwXS4gKikKICAgIHZhbCBmaWx0 ZXI6ICgnYSBlbHQgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0CiAgICAgICAgKCogW2ZpbHRlciBw IHNdIHJldHVybnMgdGhlIHNldCBvZiBhbGwgZWxlbWVudHMgaW4gW3NdCiAgICAgICAgICAgdGhh dCBzYXRpc2Z5IHByZWRpY2F0ZSBbcF0uICopCiAgICB2YWwgcGFydGl0aW9uOiAoJ2EgZWx0IC0+ IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdCAqICdhIHQKICAgICAgICAoKiBbcGFydGl0aW9uIHAgc10g cmV0dXJucyBhIHBhaXIgb2Ygc2V0cyBbKHMxLCBzMildLCB3aGVyZQogICAgICAgICAgIFtzMV0g aXMgdGhlIHNldCBvZiBhbGwgdGhlIGVsZW1lbnRzIG9mIFtzXSB0aGF0IHNhdGlzZnkgdGhlCiAg ICAgICAgICAgcHJlZGljYXRlIFtwXSwgYW5kIFtzMl0gaXMgdGhlIHNldCBvZiBhbGwgdGhlIGVs ZW1lbnRzIG9mCiAgICAgICAgICAgW3NdIHRoYXQgZG8gbm90IHNhdGlzZnkgW3BdLiAqKQogICAg dmFsIGNhcmRpbmFsOiAnYSB0IC0+IGludAogICAgICAgICgqIFJldHVybiB0aGUgbnVtYmVyIG9m IGVsZW1lbnRzIG9mIGEgc2V0LiAqKQogICAgdmFsIGVsZW1lbnRzOiAnYSB0IC0+ICdhIGVsdCBs aXN0CiAgICAgICAgKCogUmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBlbGVtZW50cyBvZiB0aGUgZ2l2 ZW4gc2V0LgogICAgICAgICAgIFRoZSByZXR1cm5lZCBsaXN0IGlzIHNvcnRlZCBpbiBpbmNyZWFz aW5nIG9yZGVyIHdpdGggcmVzcGVjdAogICAgICAgICAgIHRvIHRoZSBvcmRlcmluZyBbT3JkLmNv bXBhcmVdLCB3aGVyZSBbT3JkXSBpcyB0aGUgYXJndW1lbnQKICAgICAgICAgICBnaXZlbiB0byBb U2V0Lk1ha2VdLiAqKQogICAgdmFsIG1pbl9lbHQ6ICdhIHQgLT4gJ2EgZWx0CiAgICAgICAgKCog UmV0dXJuIHRoZSBzbWFsbGVzdCBlbGVtZW50IG9mIHRoZSBnaXZlbiBzZXQKICAgICAgICAgICAo d2l0aCByZXNwZWN0IHRvIHRoZSBbT3JkLmNvbXBhcmVdIG9yZGVyaW5nKSwgb3IgcmFpc2UKICAg ICAgICAgICBbTm90X2ZvdW5kXSBpZiB0aGUgc2V0IGlzIGVtcHR5LiAqKQogICAgdmFsIG1heF9l bHQ6ICdhIHQgLT4gJ2EgZWx0CiAgICAgICAgKCogU2FtZSBhcyBbbWluX2VsdF0sIGJ1dCByZXR1 cm5zIHRoZSBsYXJnZXN0IGVsZW1lbnQgb2YgdGhlCiAgICAgICAgICAgZ2l2ZW4gc2V0LiAqKQog ICAgdmFsIGNob29zZTogJ2EgdCAtPiAnYSBlbHQKICAgICAgICAoKiBSZXR1cm4gb25lIGVsZW1l bnQgb2YgdGhlIGdpdmVuIHNldCwgb3IgcmFpc2UgW05vdF9mb3VuZF0gaWYKICAgICAgICAgICB0 aGUgc2V0IGlzIGVtcHR5LiBXaGljaCBlbGVtZW50IGlzIGNob3NlbiBpcyB1bnNwZWNpZmllZCwK ICAgICAgICAgICBidXQgZXF1YWwgZWxlbWVudHMgd2lsbCBiZSBjaG9zZW4gZm9yIGVxdWFsIHNl dHMuICopCiAgZW5kCgptb2R1bGUgTWFrZShPcmQ6IFBPcmRlcmVkVHlwZSk6IChTIHdpdGggdHlw ZSAnYSBlbHQgPSAnYSBPcmQudCkKICAgICAgICAoKiBGdW5jdG9yIGJ1aWxkaW5nIGFuIGltcGxl bWVudGF0aW9uIG9mIHRoZSBzZXQgc3RydWN0dXJlCiAgICAgICAgICAgZ2l2ZW4gYSB0b3RhbGx5 IG9yZGVyZWQgdHlwZS4gKikK --g4gmEed5nV Content-Type: application/octet-stream Content-Disposition: attachment; filename="pset.ml" Content-Transfer-Encoding: base64 KCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKQooKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopCigqICAgICAgICAgICAgICAgICAgICAg ICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKikKKCogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqKQooKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElO UklBIFJvY3F1ZW5jb3VydCAgICAgICAgICopCigqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKikKKCogIENvcHlyaWdo dCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQg ICAqKQooKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxl IGlzIGRpc3RyaWJ1dGVkICAgICopCigqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICAgICAgICAgKikKKCogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKQoo KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiopCgooKiAkSWQ6IHBzZXQubWwsdiAxLjEgMjAwMC8wNy8wNyAxNjoxMzox NyBmaWxsaWF0ciBFeHAgJCAqKQoKKCogU2V0cyBvdmVyIG9yZGVyZWQgdHlwZXMgKikKCm1vZHVs ZSB0eXBlIFBPcmRlcmVkVHlwZSA9CiAgc2lnCiAgICB0eXBlICdhIHQKICAgIHZhbCBjb21wYXJl OiAnYSB0IC0+ICdhIHQgLT4gaW50CiAgZW5kCgptb2R1bGUgdHlwZSBTID0KICBzaWcKICAgIHR5 cGUgJ2EgZWx0CiAgICB0eXBlICdhIHQKICAgIHZhbCBlbXB0eTogJ2EgdAogICAgdmFsIGlzX2Vt cHR5OiAnYSB0IC0+IGJvb2wKICAgIHZhbCBtZW06ICdhIGVsdCAtPiAnYSB0IC0+IGJvb2wKICAg IHZhbCBhZGQ6ICdhIGVsdCAtPiAnYSB0IC0+ICdhIHQKICAgIHZhbCBzaW5nbGV0b246ICdhIGVs dCAtPiAnYSB0CiAgICB2YWwgcmVtb3ZlOiAnYSBlbHQgLT4gJ2EgdCAtPiAnYSB0CiAgICB2YWwg dW5pb246ICdhIHQgLT4gJ2EgdCAtPiAnYSB0CiAgICB2YWwgaW50ZXI6ICdhIHQgLT4gJ2EgdCAt PiAnYSB0CiAgICB2YWwgZGlmZjogJ2EgdCAtPiAnYSB0IC0+ICdhIHQKICAgIHZhbCBjb21wYXJl OiAnYSB0IC0+ICdhIHQgLT4gaW50CiAgICB2YWwgZXF1YWw6ICdhIHQgLT4gJ2EgdCAtPiBib29s CiAgICB2YWwgc3Vic2V0OiAnYSB0IC0+ICdhIHQgLT4gYm9vbAogICAgdmFsIGl0ZXI6ICgnYSBl bHQgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0CiAgICB2YWwgZm9sZDogKCdhIGVsdCAtPiAnYiAt PiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYgogICAgdmFsIGZvcl9hbGw6ICgnYSBlbHQgLT4gYm9v bCkgLT4gJ2EgdCAtPiBib29sCiAgICB2YWwgZXhpc3RzOiAoJ2EgZWx0IC0+IGJvb2wpIC0+ICdh IHQgLT4gYm9vbAogICAgdmFsIGZpbHRlcjogKCdhIGVsdCAtPiBib29sKSAtPiAnYSB0IC0+ICdh IHQKICAgIHZhbCBwYXJ0aXRpb246ICgnYSBlbHQgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0ICog J2EgdAogICAgdmFsIGNhcmRpbmFsOiAnYSB0IC0+IGludAogICAgdmFsIGVsZW1lbnRzOiAnYSB0 IC0+ICdhIGVsdCBsaXN0CiAgICB2YWwgbWluX2VsdDogJ2EgdCAtPiAnYSBlbHQKICAgIHZhbCBt YXhfZWx0OiAnYSB0IC0+ICdhIGVsdAogICAgdmFsIGNob29zZTogJ2EgdCAtPiAnYSBlbHQKICBl bmQKCm1vZHVsZSBNYWtlKE9yZDogUE9yZGVyZWRUeXBlKSA9CiAgc3RydWN0CiAgICB0eXBlICdh IGVsdCA9ICdhIE9yZC50CiAgICB0eXBlICdhIHQgPSBFbXB0eSB8IE5vZGUgb2YgJ2EgdCAqICdh IGVsdCAqICdhIHQgKiBpbnQKCiAgICAoKiBTZXRzIGFyZSByZXByZXNlbnRlZCBieSBiYWxhbmNl ZCBiaW5hcnkgdHJlZXMgKHRoZSBoZWlnaHRzIG9mIHRoZQogICAgICAgY2hpbGRyZW4gZGlmZmVy IGJ5IGF0IG1vc3QgMiAqKQoKICAgIGxldCBoZWlnaHQgPSBmdW5jdGlvbgogICAgICAgIEVtcHR5 IC0+IDAKICAgICAgfCBOb2RlKF8sIF8sIF8sIGgpIC0+IGgKCiAgICAoKiBDcmVhdGVzIGEgbmV3 IG5vZGUgd2l0aCBsZWZ0IHNvbiBsLCB2YWx1ZSB4IGFuZCByaWdodCBzb24gci4KICAgICAgIGwg YW5kIHIgbXVzdCBiZSBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi4K ICAgICAgIElubGluZSBleHBhbnNpb24gb2YgaGVpZ2h0IGZvciBiZXR0ZXIgc3BlZWQuICopCgog ICAgbGV0IGNyZWF0ZSBsIHggciA9CiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAt PiAwIHwgTm9kZShfLF8sXyxoKSAtPiBoIGluCiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBF bXB0eSAtPiAwIHwgTm9kZShfLF8sXyxoKSAtPiBoIGluCiAgICAgIE5vZGUobCwgeCwgciwgKGlm IGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKSkKCiAgICAoKiBTYW1lIGFzIGNyZWF0 ZSwgYnV0IHBlcmZvcm1zIG9uZSBzdGVwIG9mIHJlYmFsYW5jaW5nIGlmIG5lY2Vzc2FyeS4KICAg ICAgIEFzc3VtZXMgbCBhbmQgciBiYWxhbmNlZC4KICAgICAgIElubGluZSBleHBhbnNpb24gb2Yg Y3JlYXRlIGZvciBiZXR0ZXIgc3BlZWQgaW4gdGhlIG1vc3QgZnJlcXVlbnQgY2FzZQogICAgICAg d2hlcmUgbm8gcmViYWxhbmNpbmcgaXMgcmVxdWlyZWQuICopCgogICAgbGV0IGJhbCBsIHggciA9 CiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZShfLF8sXyxoKSAt PiBoIGluCiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZShfLF8s XyxoKSAtPiBoIGluCiAgICAgIGlmIGhsID4gaHIgKyAyIHRoZW4gYmVnaW4KICAgICAgICBtYXRj aCBsIHdpdGgKICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnICJTZXQuYmFsIgogICAgICAg IHwgTm9kZShsbCwgbHYsIGxyLCBfKSAtPgogICAgICAgICAgICBpZiBoZWlnaHQgbGwgPj0gaGVp Z2h0IGxyIHRoZW4KICAgICAgICAgICAgICBjcmVhdGUgbGwgbHYgKGNyZWF0ZSBsciB4IHIpCiAg ICAgICAgICAgIGVsc2UgYmVnaW4KICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoCiAgICAgICAg ICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyAiU2V0LmJhbCIKICAgICAgICAgICAgICB8IE5v ZGUobHJsLCBscnYsIGxyciwgXyktPgogICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBs bCBsdiBscmwpIGxydiAoY3JlYXRlIGxyciB4IHIpCiAgICAgICAgICAgIGVuZAogICAgICBlbmQg ZWxzZSBpZiBociA+IGhsICsgMiB0aGVuIGJlZ2luCiAgICAgICAgbWF0Y2ggciB3aXRoCiAgICAg ICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyAiU2V0LmJhbCIKICAgICAgICB8IE5vZGUocmwsIHJ2 LCByciwgXykgLT4KICAgICAgICAgICAgaWYgaGVpZ2h0IHJyID49IGhlaWdodCBybCB0aGVuCiAg ICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB4IHJsKSBydiBycgogICAgICAgICAgICBlbHNl IGJlZ2luCiAgICAgICAgICAgICAgbWF0Y2ggcmwgd2l0aAogICAgICAgICAgICAgICAgRW1wdHkg LT4gaW52YWxpZF9hcmcgIlNldC5iYWwiCiAgICAgICAgICAgICAgfCBOb2RlKHJsbCwgcmx2LCBy bHIsIF8pIC0+CiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgeCBybGwpIHJsdiAo Y3JlYXRlIHJsciBydiBycikKICAgICAgICAgICAgZW5kCiAgICAgIGVuZCBlbHNlCiAgICAgICAg Tm9kZShsLCB4LCByLCAoaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpKQoKICAg ICgqIFNhbWUgYXMgYmFsLCBidXQgcmVwZWF0IHJlYmFsYW5jaW5nIHVudGlsIHRoZSBmaW5hbCBy ZXN1bHQKICAgICAgIGlzIGJhbGFuY2VkLiAqKQoKICAgIGxldCByZWMgam9pbiBsIHggciA9CiAg ICAgIG1hdGNoIGJhbCBsIHggciB3aXRoCiAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgIlNl dC5qb2luIgogICAgICB8IE5vZGUobCcsIHgnLCByJywgXykgYXMgdCcgLT4KICAgICAgICAgIGxl dCBkID0gaGVpZ2h0IGwnIC0gaGVpZ2h0IHInIGluCiAgICAgICAgICBpZiBkIDwgLTIgb3IgZCA+ IDIgdGhlbiBqb2luIGwnIHgnIHInIGVsc2UgdCcKCiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBh bmQgciBpbnRvIG9uZS4KICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUg ZWxlbWVudHMgb2Ygci4KICAgICAgIEFzc3VtZXMgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0g Mi4gKikKCiAgICBsZXQgcmVjIG1lcmdlIHQxIHQyID0KICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0 aAogICAgICAgIChFbXB0eSwgdCkgLT4gdAogICAgICB8ICh0LCBFbXB0eSkgLT4gdAogICAgICB8 IChOb2RlKGwxLCB2MSwgcjEsIGgxKSwgTm9kZShsMiwgdjIsIHIyLCBoMikpIC0+CiAgICAgICAg ICBiYWwgbDEgdjEgKGJhbCAobWVyZ2UgcjEgbDIpIHYyIHIyKQoKICAgICgqIFNhbWUgYXMgbWVy Z2UsIGJ1dCBkb2VzIG5vdCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgbCBhbmQgci4gKikKCiAgICBs ZXQgcmVjIGNvbmNhdCB0MSB0MiA9CiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGgKICAgICAgICAo RW1wdHksIHQpIC0+IHQKICAgICAgfCAodCwgRW1wdHkpIC0+IHQKICAgICAgfCAoTm9kZShsMSwg djEsIHIxLCBoMSksIE5vZGUobDIsIHYyLCByMiwgaDIpKSAtPgogICAgICAgICAgam9pbiBsMSB2 MSAoam9pbiAoY29uY2F0IHIxIGwyKSB2MiByMikKCiAgICAoKiBTcGxpdHRpbmcgKikKCiAgICBs ZXQgcmVjIHNwbGl0IHggPSBmdW5jdGlvbgogICAgICAgIEVtcHR5IC0+CiAgICAgICAgICAoRW1w dHksIE5vbmUsIEVtcHR5KQogICAgICB8IE5vZGUobCwgdiwgciwgXykgLT4KICAgICAgICAgIGxl dCBjID0gT3JkLmNvbXBhcmUgeCB2IGluCiAgICAgICAgICBpZiBjID0gMCB0aGVuIChsLCBTb21l IHYsIHIpCiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4KICAgICAgICAgICAgbGV0IChsbCwg dmwsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHZsLCBqb2luIHJsIHYgcikKICAgICAgICAgIGVs c2UKICAgICAgICAgICAgbGV0IChsciwgdnIsIHJyKSA9IHNwbGl0IHggciBpbiAoam9pbiBsIHYg bHIsIHZyLCBycikKCiAgICAoKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2V0IG9wZXJhdGlvbnMg KikKCiAgICBsZXQgZW1wdHkgPSBFbXB0eQoKICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVt cHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlCgogICAgbGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uCiAg ICAgICAgRW1wdHkgLT4gZmFsc2UKICAgICAgfCBOb2RlKGwsIHYsIHIsIF8pIC0+CiAgICAgICAg ICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpbgogICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlm IGMgPCAwIHRoZW4gbCBlbHNlIHIpCgogICAgbGV0IHJlYyBhZGQgeCA9IGZ1bmN0aW9uCiAgICAg ICAgRW1wdHkgLT4gTm9kZShFbXB0eSwgeCwgRW1wdHksIDEpCiAgICAgIHwgTm9kZShsLCB2LCBy LCBfKSBhcyB0IC0+CiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpbgogICAgICAg ICAgaWYgYyA9IDAgdGhlbiB0IGVsc2UKICAgICAgICAgIGlmIGMgPCAwIHRoZW4gYmFsIChhZGQg eCBsKSB2IHIgZWxzZSBiYWwgbCB2IChhZGQgeCByKQoKICAgIGxldCBzaW5nbGV0b24geCA9IE5v ZGUoRW1wdHksIHgsIEVtcHR5LCAxKQoKICAgIGxldCByZWMgcmVtb3ZlIHggPSBmdW5jdGlvbgog ICAgICAgIEVtcHR5IC0+IEVtcHR5CiAgICAgIHwgTm9kZShsLCB2LCByLCBfKSAtPgogICAgICAg ICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW4KICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVy Z2UgbCByIGVsc2UKICAgICAgICAgIGlmIGMgPCAwIHRoZW4gYmFsIChyZW1vdmUgeCBsKSB2IHIg ZWxzZSBiYWwgbCB2IChyZW1vdmUgeCByKQoKICAgIGxldCByZWMgdW5pb24gczEgczIgPQogICAg ICBtYXRjaCAoczEsIHMyKSB3aXRoCiAgICAgICAgKEVtcHR5LCB0MikgLT4gdDIKICAgICAgfCAo dDEsIEVtcHR5KSAtPiB0MQogICAgICB8IChOb2RlKGwxLCB2MSwgcjEsIGgxKSwgTm9kZShsMiwg djIsIHIyLCBoMikpIC0+CiAgICAgICAgICBpZiBoMSA+PSBoMiB0aGVuCiAgICAgICAgICAgIGlm IGgyID0gMSB0aGVuIGFkZCB2MiBzMSBlbHNlIGJlZ2luCiAgICAgICAgICAgICAgbGV0IChsMiwg XywgcjIpID0gc3BsaXQgdjEgczIgaW4KICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikg djEgKHVuaW9uIHIxIHIyKQogICAgICAgICAgICBlbmQKICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgaWYgaDEgPSAxIHRoZW4gYWRkIHYxIHMyIGVsc2UgYmVnaW4KICAgICAgICAgICAgICBsZXQg KGwxLCBfLCByMSkgPSBzcGxpdCB2MiBzMSBpbgogICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwx IGwyKSB2MiAodW5pb24gcjEgcjIpCiAgICAgICAgICAgIGVuZAoKICAgIGxldCByZWMgaW50ZXIg czEgczIgPQogICAgICBtYXRjaCAoczEsIHMyKSB3aXRoCiAgICAgICAgKEVtcHR5LCB0MikgLT4g RW1wdHkKICAgICAgfCAodDEsIEVtcHR5KSAtPiBFbXB0eQogICAgICB8IChOb2RlKGwxLCB2MSwg cjEsIF8pLCB0MikgLT4KICAgICAgICAgIG1hdGNoIHNwbGl0IHYxIHQyIHdpdGgKICAgICAgICAg ICAgKGwyLCBOb25lLCByMikgLT4KICAgICAgICAgICAgICBjb25jYXQgKGludGVyIGwxIGwyKSAo aW50ZXIgcjEgcjIpCiAgICAgICAgICB8IChsMiwgU29tZSBfLCByMikgLT4KICAgICAgICAgICAg ICBqb2luIChpbnRlciBsMSBsMikgdjEgKGludGVyIHIxIHIyKQoKICAgIGxldCByZWMgZGlmZiBz MSBzMiA9CiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGgKICAgICAgICAoRW1wdHksIHQyKSAtPiBF bXB0eQogICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxCiAgICAgIHwgKE5vZGUobDEsIHYxLCByMSwg XyksIHQyKSAtPgogICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aAogICAgICAgICAgICAo bDIsIE5vbmUsIHIyKSAtPgogICAgICAgICAgICAgIGpvaW4gKGRpZmYgbDEgbDIpIHYxIChkaWZm IHIxIHIyKQogICAgICAgICAgfCAobDIsIFNvbWUgXywgcjIpIC0+CiAgICAgICAgICAgICAgY29u Y2F0IChkaWZmIGwxIGwyKSAoZGlmZiByMSByMikKCiAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGwx IGwyID0KICAgICAgICBtYXRjaCAobDEsIGwyKSB3aXRoCiAgICAgICAgKFtdLCBbXSkgLT4gMAog ICAgICB8IChbXSwgXykgIC0+IC0xCiAgICAgIHwgKF8sIFtdKSAtPiAxCiAgICAgIHwgKEVtcHR5 IDo6IHQxLCBFbXB0eSA6OiB0MikgLT4KICAgICAgICAgIGNvbXBhcmVfYXV4IHQxIHQyCiAgICAg IHwgKE5vZGUoRW1wdHksIHYxLCByMSwgXykgOjogdDEsIE5vZGUoRW1wdHksIHYyLCByMiwgXykg OjogdDIpIC0+CiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluCiAgICAgICAg ICBpZiBjIDw+IDAgdGhlbiBjIGVsc2UgY29tcGFyZV9hdXggKHIxOjp0MSkgKHIyOjp0MikKICAg ICAgfCAoTm9kZShsMSwgdjEsIHIxLCBfKSA6OiB0MSwgdDIpIC0+CiAgICAgICAgICBjb21wYXJl X2F1eCAobDEgOjogTm9kZShFbXB0eSwgdjEsIHIxLCAwKSA6OiB0MSkgdDIKICAgICAgfCAodDEs IE5vZGUobDIsIHYyLCByMiwgXykgOjogdDIpIC0+CiAgICAgICAgICBjb21wYXJlX2F1eCB0MSAo bDIgOjogTm9kZShFbXB0eSwgdjIsIHIyLCAwKSA6OiB0MikKCiAgICBsZXQgY29tcGFyZSBzMSBz MiA9CiAgICAgIGNvbXBhcmVfYXV4IFtzMV0gW3MyXQoKICAgIGxldCBlcXVhbCBzMSBzMiA9CiAg ICAgIGNvbXBhcmUgczEgczIgPSAwCgogICAgbGV0IHJlYyBzdWJzZXQgczEgczIgPQogICAgICBt YXRjaCAoczEsIHMyKSB3aXRoCiAgICAgICAgRW1wdHksIF8gLT4KICAgICAgICAgIHRydWUKICAg ICAgfCBfLCBFbXB0eSAtPgogICAgICAgICAgZmFsc2UKICAgICAgfCBOb2RlIChsMSwgdjEsIHIx LCBfKSwgKE5vZGUgKGwyLCB2MiwgcjIsIF8pIGFzIHQyKSAtPgogICAgICAgICAgbGV0IGMgPSBP cmQuY29tcGFyZSB2MSB2MiBpbgogICAgICAgICAgaWYgYyA9IDAgdGhlbgogICAgICAgICAgICBz dWJzZXQgbDEgbDIgJiYgc3Vic2V0IHIxIHIyCiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4K ICAgICAgICAgICAgc3Vic2V0IChOb2RlIChsMSwgdjEsIEVtcHR5LCAwKSkgbDIgJiYgc3Vic2V0 IHIxIHQyCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHN1YnNldCAoTm9kZSAoRW1wdHksIHYx LCByMSwgMCkpIHIyICYmIHN1YnNldCBsMSB0MgoKICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rp b24KICAgICAgICBFbXB0eSAtPiAoKQogICAgICB8IE5vZGUobCwgdiwgciwgXykgLT4gaXRlciBm IGw7IGYgdjsgaXRlciBmIHIKCiAgICBsZXQgcmVjIGZvbGQgZiBzIGFjY3UgPQogICAgICBtYXRj aCBzIHdpdGgKICAgICAgICBFbXB0eSAtPiBhY2N1CiAgICAgIHwgTm9kZShsLCB2LCByLCBfKSAt PiBmb2xkIGYgbCAoZiB2IChmb2xkIGYgciBhY2N1KSkKCiAgICBsZXQgcmVjIGZvcl9hbGwgcCA9 IGZ1bmN0aW9uCiAgICAgICAgRW1wdHkgLT4gdHJ1ZQogICAgICB8IE5vZGUobCwgdiwgciwgXykg LT4gcCB2ICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByCgogICAgbGV0IHJlYyBleGlzdHMg cCA9IGZ1bmN0aW9uCiAgICAgICAgRW1wdHkgLT4gZmFsc2UKICAgICAgfCBOb2RlKGwsIHYsIHIs IF8pIC0+IHAgdiB8fCBleGlzdHMgcCBsIHx8IGV4aXN0cyBwIHIKCiAgICBsZXQgZmlsdGVyIHAg cyA9CiAgICAgIGxldCByZWMgZmlsdCBhY2N1ID0gZnVuY3Rpb24KICAgICAgICB8IEVtcHR5IC0+ IGFjY3UKICAgICAgICB8IE5vZGUobCwgdiwgciwgXykgLT4KICAgICAgICAgICAgZmlsdCAoZmls dCAoaWYgcCB2IHRoZW4gYWRkIHYgYWNjdSBlbHNlIGFjY3UpIGwpIHIgaW4KICAgICAgZmlsdCBF bXB0eSBzCgogICAgbGV0IHBhcnRpdGlvbiBwIHMgPQogICAgICBsZXQgcmVjIHBhcnQgKHQsIGYg YXMgYWNjdSkgPSBmdW5jdGlvbgogICAgICAgIHwgRW1wdHkgLT4gYWNjdQogICAgICAgIHwgTm9k ZShsLCB2LCByLCBfKSAtPgogICAgICAgICAgICBwYXJ0IChwYXJ0IChpZiBwIHYgdGhlbiAoYWRk IHYgdCwgZikgZWxzZSAodCwgYWRkIHYgZikpIGwpIHIgaW4KICAgICAgcGFydCAoRW1wdHksIEVt cHR5KSBzCgogICAgbGV0IHJlYyBjYXJkaW5hbCA9IGZ1bmN0aW9uCiAgICAgICAgRW1wdHkgLT4g MAogICAgICB8IE5vZGUobCwgdiwgciwgXykgLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCBy CgogICAgbGV0IHJlYyBlbGVtZW50c19hdXggYWNjdSA9IGZ1bmN0aW9uCiAgICAgICAgRW1wdHkg LT4gYWNjdQogICAgICB8IE5vZGUobCwgdiwgciwgXykgLT4gZWxlbWVudHNfYXV4ICh2IDo6IGVs ZW1lbnRzX2F1eCBhY2N1IHIpIGwKCiAgICBsZXQgZWxlbWVudHMgcyA9CiAgICAgIGVsZW1lbnRz X2F1eCBbXSBzCgogICAgbGV0IHJlYyBtaW5fZWx0ID0gZnVuY3Rpb24KICAgICAgICBFbXB0eSAt PiByYWlzZSBOb3RfZm91bmQKICAgICAgfCBOb2RlKEVtcHR5LCB2LCByLCBfKSAtPiB2CiAgICAg IHwgTm9kZShsLCB2LCByLCBfKSAtPiBtaW5fZWx0IGwKCiAgICBsZXQgcmVjIG1heF9lbHQgPSBm dW5jdGlvbgogICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZAogICAgICB8IE5vZGUobCwg diwgRW1wdHksIF8pIC0+IHYKICAgICAgfCBOb2RlKGwsIHYsIHIsIF8pIC0+IG1heF9lbHQgcgoK ICAgIGxldCBjaG9vc2UgPSBtaW5fZWx0CgogIGVuZAo= --g4gmEed5nV-- ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners