--3511000-5972-913754049=:-4033521 Content-ID: <[EMAIL PROTECTED]> Content-Type: TEXT/PLAIN; CHARSET="US-ASCII" This code is part of a larger internal project... Here is the bit that I can extract quickly. If you have a suggestions for better structure, please tell me. For ref., here is what the code does: > I built a codebase w/ Derive (or whatever is is called now) that takes a > haskell data types and generates haskell functions > 1. create tables to store the data types > 2. take instances of the data type and output corresponding SQL insert > statments > 3. generates summaries of these tables based on using special purpose > sumarization types in the datastrucure > (for a data warehousing application) -Alex- On Tue, 15 Dec 1998, Keith Wansbrough wrote: > > I built a codebase w/ Derive (or whatever is is called now) that takes a > > haskell data types and generates haskell functions > [..] > > Is this available somewhere? (your home page is a bit terse... :-) ) > > Thanks.. > > --KW 8-) > -- > : Keith Wansbrough, MSc, BSc(Hons) (Auckland) ------------------------: > : PhD Student, Computer Laboratory, University of Cambridge, England. : > : (and recently of the University of Glasgow, Scotland. [><] ) : > : Native of Antipodean Auckland, New Zealand: 174d47' E, 36d55' S. : > : http://www.cl.cam.ac.uk/users/kw217/ mailto:[EMAIL PROTECTED] : > :---------------------------------------------------------------------: > > ___________________________________________________________________ S. Alexander Jacobson i2x Media 1-212-697-0184 voice 1-212-697-1427 fax --3511000-5972-913754049=:-4033521 Content-ID: <[EMAIL PROTECTED]> Content-Description: Content-Disposition: ATTACHMENT; FILENAME="SQL.lhs" Content-Type: TEXT/PLAIN; CHARSET="US-ASCII"; NAME="SQL.lhs" Content-Transfer-Encoding: base64 SGFza2VsbCBTUUwgRGVyaXZlIFJ1bGVzDQooQykgMTk5OCBBbGV4IEphY29i c29uLCBBbGwgUmlnaHRzIFJlc2VydmVkDQoNCj4gbW9kdWxlIFNRTCB3aGVy ZQ0KPiBpbXBvcnQgSTJ4X0NvbW1vbg0KPiBpbXBvcnQgUHJldHR5DQoNClRo aXMgbW9kdWxlIHJlcHJlc2VudHMgc3FsIGFzIGFuIGFic3RyYWN0IGRhdGF0 eXBlIHNvIHRoYXQgcGVvcGxlDQpjYW4gY29uc3RydWN0IGRhdGFiYXNlIHNw ZWNpZmljIGRyaXZlcnMgdG8gdHJhbnNsYXRlIHRoZSBzcWwgYWR0IGludG8N CnNxbCB1c2FibGUgYnkgdGhlIGRyaXZlciBzeXN0ZW0NCg0KLS0tU1FMIEFi c3RyYWN0IERhdGEgdHlwZSAtLS0gcmVuZGVyZWQgZGVwZW5kaW5nIG9uIGRi IGRyaXZlcg0KDQogZGF0YSBOdWxsID0gTnVsbCB8IE5vdCBOdWxsIC0tIGJl IGNhcmVmdWxlIGhlcmUNCg0KPiBkYXRhIEZpZWxkUmVxdWlyZWQ9IE9wdGlv bmFsIHwgUmVxdWlyZWQgZGVyaXZpbmcgKEVxLFJlYWQsU2hvdykNCj4gcmVx dWlyZWQ9UmVxdWlyZWQNCj4gb3B0aW9uYWw9T3B0aW9uYWwNCg0KPiBjbGFz cyBEQk1TIGRibXMgd2hlcmUNCj4gIC0tY3JlYXRlREJNUzo6U3RyaW5nIC0+ ZGJtcw0KPiAgY3JlYXRlVGFibGU6OmRibXMtPlRhYmxlLT5TdHJpbmcgIC0t ZGJtcy0+VGFibGUgLT4gSU8oKSANCj4gIGluc2VydFJlY29yZDo6ZGJtcy0+ SW5zZXJ0IC0+U3RyaW5nDQo+ICBzZWxlY3RSZWNvcmRzOjpkYm1zLT5TZWxl Y3QtPlN0cmluZw0KPiAgZHNuOjpkYm1zLT5TdHJpbmcNCg0KPiBkYXRhIE1T QWNjZXNzPU1TQWNjZXNzIFN0cmluZyBkZXJpdmluZyBTaG93DQo+IGluc3Rh bmNlIERCTVMgTVNBY2Nlc3Mgd2hlcmUNCj4gIC0tY3JlYXRlREJNUyB1cmwg PSBNU0FjY2VzcyB1cmwNCj4gIGNyZWF0ZVRhYmxlIGRibXMgdGFibGUgPSBi YXNpY0NyZWF0ZVRhYmxlIHRhYmxlDQo+ICBpbnNlcnRSZWNvcmQgZGJtcyBp bnMgPSBiYXNpY0luc2VydCBpbnMNCj4gIGRzbiAoTVNBY2Nlc3MgdXJsKSA9 IHVybA0KDQo+IGJhc2ljQ3JlYXRlVGFibGUgdGFibGUgPSAiQ3JlYXRlIFRh YmxlICIrKyhuYW1lIHRhYmxlKSsrDQo+CQkJICAgIihcbiIrK2NzdHJpbmdz KysiXG4pXG4iDQo+ICB3aGVyZQ0KPiAgICBjc3RyaW5ncyA9Y3MNCj4gICAg Y3MgPSBmb2xkbDEgKFx4IHktPngrKyIsXG4iKyt5KSAkIG1hcCBiYXNpY0Nv bHVtblN0cmluZyAoY29sdW1ucyB0YWJsZSkNCg0KPiBiYXNpY0NvbHVtblN0 cmluZyBmID0gKG5hbWUgZikrKyIgIisrKHR5cGVTdHJpbmckZHR5cGUgZikg KysiICIrKw0KPgkJCShjYXNlIGZpZWxkU3RhdHVzIGYgb2YNCj4JCQkgICAg ICBPcHRpb25hbCAtPiAiTnVsbCINCj4JCQkgICAgICBSZXF1aXJlZCAtPiAi Tm90IE51bGwiKQ0KPiAgd2hlcmUgDQo+ICAgdHlwZVN0cmluZyBzPQ0KPiAg ICAgY2FzZSBzIG9mIA0KPgkgICBDaGFyYWN0ZXIgbiAtPiAiY2hhcigiKyso c2hvdyBuKSsrIikiDQo+CSAgIFZhckNoYXIgbiAtPiAidmFyY2hhcigiKyso c2hvdyBuKSsrIikiDQo+CSAgIFdob2xlIC0+ICJpbnRlZ2VyIg0KPgkgICBE ZWMgLT4gImZsb2F0Ig0KPgkgICBDdXJyZW5jeSAtPiAiZmxvYXQiDQo+CSAg IERhdGVUaW1lIC0+ICJpbnRlZ2VyIg0KDQoNCj4gZGF0YSBEYXRhVHlwZSA9 IENoYXJhY3RlciBJbnQgDQo+CQl8IFZhckNoYXIgSW50DQo+CQl8IFdob2xl IA0KPgkJfCBEZWMgDQo+CQl8IEN1cnJlbmN5IA0KPgkJfCBEYXRlVGltZSAg ZGVyaXZpbmcgKEVxLFJlYWQsU2hvdykNCg0KDQoNCj4gZGF0YSBSZWZlcmVu Y2VzID0gUmVmZXJlbmNlcyBUYWJsZSAgLS0gbWF0Y2hlcyBjb2x1bW4gb2Yg c2FtZSBuYW1lIGluIHRhYmxlDQo+CQkgIHwgRGF0YSAtLW5vcm1hbCBzdHVm Zg0KPgkJICB8IEtleSAtLSB0ZWxscyBkYm1zIHRoYXQgdGhpcyBpcyBwYXJ0 IG9mIHByaW1hcnkga2V5ICh1bmlxdWUpDQo+ICAgICAgICAgICAgICAgICBk ZXJpdmluZyAoRXEsUmVhZCxTaG93KQ0KDQo+IGRhdGEgQ29sdW1uID0gQyB7 DQo+CQkgICBjbmFtZTo6U3RyaW5nLA0KPgkJICAgZHR5cGU6OkRhdGFUeXBl LA0KPgkJICAgZmllbGRTdGF0dXM6OkZpZWxkUmVxdWlyZWQsDQo+CQkgICBy ZWZzOjpSZWZlcmVuY2VzDQo+CQkgfSBkZXJpdmluZyAoRXEsUmVhZCxTaG93 KQ0KDQo+IGluc3RhbmNlIEhhc05hbWUgQ29sdW1uIHdoZXJlDQo+ICBuYW1l IHggPSBjbmFtZSB4DQoNCj4gZmllbGQgPSBDDQoNCg0KPiBkYXRhIFRhYmxl ID0gVGFibGUgeyB0YWJsZU5hbWU6OlN0cmluZywNCj4JCSAgICAgICBjb2x1 bW5zOjpbQ29sdW1uXQ0KPgkJICAgICAgIH0gZGVyaXZpbmcgKEVxLFJlYWQs U2hvdykNCj4gaW5zdGFuY2UgSGFzTmFtZSBUYWJsZSB3aGVyZQ0KPiAgbmFt ZSB4ID0gdGFibGVOYW1lIHgNCg0KPiByZWZlcmVuY2VzOjpTdHJpbmcgLT4g VGFibGUgLT4gQ29sdW1uDQo+IHJlZmVyZW5jZXMgbmFtZSB0YWJsZSA9IEMg bmFtZSBmdHlwZSAocmVxdWlyZWQpIChSZWZlcmVuY2VzIHRhYmxlKQ0KPiAg d2hlcmUgZnR5cGUgPSBkdHlwZSAkIGhlYWQgJCBkcm9wV2hpbGUgKG5vdEtl eSkgKGNvbHVtbnMgdGFibGUpDQo+CSBub3RLZXkgKEMgbiBkIGEgS2V5KSA9 IEZhbHNlDQo+CSBub3RLZXkgXyA9IFRydWUNCg0KDQo+IG1ha2VLZXkgPSBD ICJrZXkiIChDaGFyYWN0ZXIgKDE2KSkgKHJlcXVpcmVkKSBLZXkNCg0KDQoN Cj4gdHlwZSBBdG9tPVN0cmluZw0KDQo+IGRhdGEgSW5zZXJ0ID0gSW5zZXJ0 IHsNCj4gICAgICAgICAgICAgICAgICAgdGFibGU6OlRhYmxlLA0KPiAgICAg ICAgICAgICAgICAgICBmaWVsZFZhbHVlczo6WyhDb2x1bW4sQXRvbSldIH0N Cj4gICAgICAgICAgICAgfCBJbnNlcnRTZWxlY3Qgew0KPiAgICAgICAgICAg ICAgICAgICB0YWJsZTo6VGFibGUsDQo+ICAgICAgICAgICAgICAgICAgIGlu c2VydENvbHVtbnM6OltDb2x1bW5dLA0KPiAgICAgICAgICAgICAgICAgICBp bnNlcnRTZWxlY3Q6OlNlbGVjdH0NCj4gICAgICAgICAgICAgfCBJbnNlcnRM b29zZSB7DQo+ICAgICAgICAgICAgICAgICAgIGluc2VydFRhYmxlTmFtZTo6 VGFibGVOYW1lLA0KPiAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lczo6 W1N0cmluZ10sDQo+ICAgICAgICAgICAgICAgICAgIHZhbHVlczo6W0F0b21d fSBkZXJpdmluZyAoUmVhZCxTaG93LEVxKQ0KDQoNCj4gYmFzaWNJbnNlcnQg SW5zZXJ0TG9vc2V7aW5zZXJ0VGFibGVOYW1lLGNvbHVtbk5hbWVzLHZhbHVl c309DQo+ICAiSU5TRVJUIGludG8gIisraW5zZXJ0VGFibGVOYW1lKysiIFZB TFVFUyAoIisrDQo+ICAoZm9sZGwxIChceCB5LT54KysiLCIrK3kpIHZhbHVl cykrKyIpXG4iDQoNCj4gaW5zZXJ0TG9vc2U9SW5zZXJ0TG9vc2UNCj4gdHlw ZSBUYWJsZU5hbWUgID0gU3RyaW5nDQo+IHR5cGUgQ29uc3RyYWludCA9IFN0 cmluZw0KPiB0eXBlIFNjYWxhcgkgID0gU3RyaW5nDQoNCk9yIENvbnRyYWlu dCBDb25zdHJhaW50IA0KCQkgIHwgQW5kIENvbnRyYWludCBDb25zdHJhaW50 DQoJCSAgfCBOb3QgQ29uc3RyYWludA0KCQkgIHwgUHJlZCBQcmVkaWNhdGUN Cg0KIGRhdGEgUHJlZGljYXRlID0gDQoNCj4gZGF0YSBTZWxlY3QgPSBTZWxl Y3Qgew0KPgkJIGZpZWxkTmFtZXM6OltTY2FsYXJdLA0KPgkJIGZyb21UYWJs ZXM6OltUYWJsZU5hbWVdLC0tY2FuIHJldHJpZXZlIGZyb20gbXVsdGlwbGUg dGFibGVzDQo+CQkgd2hlcmVDbGF1c2U6OkNvbnN0cmFpbnQsIC0tIFtdIGlt cGxpZXMgbm8gd2hlcmUNCj4JCSBncm91cEJ5Q2xhdXNlOjpbU2NhbGFyXSwg LS0gbGlzdCBlbXB0eSBpbXBsaWVzIG5vIGdyb3VwIGJ5DQo+CQkgb3JkZXJC eUNsYXVzZTo6W1NjYWxhcl0sDQo+CQkgaGF2aW5nQ2xhdXNlOjpbU2NhbGFy XX0NCj4JCSBkZXJpdmluZyAoUmVhZCxTaG93LEVxKQ0KDQo+IGJhc2ljU2Vs ZWN0IFNlbGVjdHtmaWVsZE5hbWVzLGZyb21UYWJsZXMsd2hlcmVDbGF1c2Us Z3JvdXBCeUNsYXVzZSxvcmRlckJ5Q2xhdXNlLGhhdmluZ0NsYXVzZX0gPSBy ZW5kZXIgJCB2Y2F0ICQgWw0KPiAgdGV4dCAiU2VsZWN0ICIgPCs+IChjb21t YVNlcCAiIiAiKiIgZmllbGROYW1lcyksDQo+ICBjb21tYVNlcCAiRlJPTSAi ICIiIGZyb21UYWJsZXMsDQo+ICBpZiB3aGVyZUNsYXVzZS89IiIgdGhlbiB0 ZXh0ICJXaGVyZSAiPCs+IHRleHQgd2hlcmVDbGF1c2UgZWxzZSAgdGV4dCAi IiwNCj4gIGNvbW1hU2VwICJHUk9VUCBCWSAiICIiIGdyb3VwQnlDbGF1c2Us DQo+ICBjb21tYVNlcCAiT1JERVIgQlkgIiAiIiBvcmRlckJ5Q2xhdXNlLA0K PiAgY29tbWFTZXAgIkhBVklORyAiICIiIGhhdmluZ0NsYXVzZV0NCj4gIHdo ZXJlIHJlbmRlciBkb2MgPSBmdWxsUmVuZGVyIFBhZ2VNb2RlIDgwIDEgZG9j ICIiDQoNCiB0ZXh0IHggPSB4DQogYSA8Kz4gYiA9IGErK2IgDQoNCg0KPiBj b21tYVNlcCBwcmUgZW1wdHkgW10gPSB0ZXh0IGVtcHR5DQo+IGNvbW1hU2Vw IHByZSBlbXB0eSB2YWxzID0gdGV4dCBwcmUgPCs+IA0KPiAgICAgIChmb2xk bCAoXHggeS0+IHggPCs+IHRleHQgIiwgIiA8Kz4gdGV4dCB5KSANCj4JCQkg ICAgICAodGV4dCAkIGhlYWQgdmFscykgKHRhaWwgdmFscykpDQoNCg0KTm93 IHRoYXQgd2UgaGF2ZSBzZWxlY3Qgd2UgbmVlZCB0byBkZWZpbmUgc2VsZWN0 IDIgc3RyaW5n --3511000-5972-913754049=:-4033521 Content-ID: <[EMAIL PROTECTED]> Content-Description: Content-Disposition: ATTACHMENT; FILENAME="i2x_common.lhs" Content-Type: TEXT/PLAIN; CHARSET="US-ASCII"; NAME="i2x_common.lhs" Content-Transfer-Encoding: base64 PiBtb2R1bGUgSTJ4X0NvbW1vbiB3aGVyZQ0KDQpBbGwgb2YgdGhlc2UgdGhp bmdzIGhhdmUgbmFtZXMNCg0KPiBjbGFzcyBIYXNOYW1lIGEgd2hlcmUNCj4g IG5hbWU6OmEtPlN0cmluZw0KDQpHZXQgdW5pcXVlIGZyb20gYW55IGNsYXNz IHRoYXQgaW1wbGVtZW50cyBgZWxlbWANCklmIGNvbGxlY3Rpb24gaXMgaGFz aHRhYmxlIHRoZW4gdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBPKG4pDQoNCj4g dW5pcXVlIGxpc3QgPSBmb2xkciAoXHggeXMtPmlmIHggYGVsZW1gIHlzIHRo ZW4geXMgZWxzZSB4OnlzKSBbXSBsaXN0 --3511000-5972-913754049=:-4033521 Content-ID: <[EMAIL PROTECTED]> Content-Description: Content-Disposition: ATTACHMENT; FILENAME="SqlRule.lhs" Content-Type: TEXT/PLAIN; CHARSET="US-ASCII"; NAME="SqlRule.lhs" Content-Transfer-Encoding: base64 SGFza2VsbCBTUUwgRGVyaXZlIFJ1bGVzDQooQykgMTk5OCBBbGV4IEphY29i c29uLCBBbGwgUmlnaHRzIFJlc2VydmVkDQoNCj4gbW9kdWxlIFNxbFJ1bGUg d2hlcmUNCj4gaW1wb3J0IFJ1bGVVdGlscw0KPiBpbXBvcnQgTWF5YmUNCj4g aW1wb3J0IENoYXINCj4gaW1wb3J0IFNRTA0KPiBpbXBvcnQgTGlzdA0KDQpU aGlzIG1vZHVsZSBpcyBmb2N1c2VkIG9uIGludGVybWVkaWF0aW5nIGJldHdl ZW4gaGFza2VsbCB0eXBlcyBhbmQgYW4NCnNxbCBhZHQgZnJvbSB3aGljaCB3 ZSBjYW4gdGhlbiBnZW5lcmF0ZSBzcWwgZm9yIHVzZSB3LyBzcWwgZGF0YWJh c2VzLg0KDQpUaGVyZSBhcmUgZm91ciBhc3BlY3RzOg0KMS4gY3JlYXRlIHNx bCB0YWJsZXMNCjIuIGluc2VydCBpbnN0YW5jZXMgaW50byB0YWJsZXMNCjMu IGdlbmVyYXRlIHNxbCBzdW1tYXJpZXMNCjQuIHNlbGVjdCBpbmRpdmlkdWFs IG9iamVjdHMNCg0KPiBzcWxBbGxGbiBkID0gdmNhdCAobWFwIChcZi0+ZiBk KSANCj4gICBbc3FsQ3JlYXRlRm4sIC0tIHNxbENyZWF0ZVR5cGVOYW1lIHJl dHVybnMgc3FsIGNyZWF0ZSBzdGF0ZW1lbnRzDQo+ICAgIHNxbEluc2VydEZu LCAtLSBzcWxJbnNlcnQgb2JqIHJldHVybnMgc3FsIGluc2VydCBzdGF0ZW1l bnRzIGZvciBvYmoNCj4gICAgcm93Rm4sCSAgLS0gdGFibGVUeXBlTmFtZSBm aWVsZG5hbWUgcmVwcmVzZW50cyB0eXBlIGluIGNyZWF0ZSBzdG1udHMNCj4g ICAgbWV0YUZuCSAgLS0gcHJvdmlkZXMgbWV0YSBpbmZvcm1hdGlvbiBhYm91 dCB0eXBlDQo+ICAgICxzcWxTdW1GbgkgIC0tIGdlbmVyYXRlcyBzdW1tYXJp ZXMgb2YgdGhlIHR5cGUNCj4gICAgXSkNCg0KVG9kbzoNCjx1bD4NCjxsaT4g U3VwcG9ydCB0eXBlIHJlbmFtZXMuIG5vdyB0aGUgdXNlciBtdXN0IGFkZCB0 YWJsZUJsYWggJiBzcWxDcmVhdGVCbGFoIG1hbnVhbGx5Lg0KPGxpPiBTUUwg U3VtbWFyaWVzDQo8bGk+IEdlbmVyaWMgU2VsZWN0IA0KPC91bA0KLS0tLQ0K DQoNCkNSRUFURQ0KDQpEZXJpdmUgUnVsZSB0byBnZW5lcmF0ZSBzcWwgY3Jl YXRlIHN0YXRlbWVudHMgZm9yIGFueSBkYXRhdHlwZS4NClRoZSBpZGVhIGlz IHRoYXQgZm9yIGFueSB0eXBlIHNxbFR5cGVOYW1lIHdpbGwgcmV0dXJuIGEg bGlzdCBvZiANCnNxbCBjcmVhdGUgc3RhdGVtZW50cyBmb3IgdGhlIHR5cGUu DQpIZXJlIGFyZSB0aGUgcnVsZXM6DQoNCiogQWxsIHR5cGVzIGFyZSBzdG9y ZWQgc3VjaCB0aGF0IHRoZSBjb25zdHJ1Y3RvciBuYW1lIGlzIHRoZSB0YWJs ZSBuYW1lLg0KKiBFYWNoIGFsZ2VicmFpYyB0eXBlIGdldHMgaXRzIG93biB0 YWJsZQ0KKiBUaGUgcHJpbWFyeSBrZXkgb2YgZWFjaCB0YWJsZSBpcyB0aGUg aGFzaCB2YWx1ZSBvZiB0aGUgdHlwZQ0KKiBzdG9yZSB0aGUgdHlwZSBpbiB0 aGUgdGFibGUgYmFzZWQgb24gZGV0YWlscyBvZiBpdHMgdHlwZS4NCiogKGEg ZnV0dXJlIHZlcnNpb24gd2lsbCBzdXBwb3J0IHBhcmFtZXRyaXplZCB0eXBl cyB3LyBjb25zdHJ1Y3Rvcl90eXBlbmFtZSkNCg0KPiBwcmltYXJ5S2V5IGNu YW1lID0gW2ZpZWxkIChjbmFtZSsrIklkIikgaGFzaFR5cGUgcmVxdWlyZWQg S2V5XQ0KPiBoYXNoVHlwZSA9IFdob2xlIC0tQ2hhcmFjdGVyICgxNikNCg0K PiB0eXBlRnVuY3Rpb24gZm5OYW1lIGRARHtib2R5LG5hbWV9IGYgPSANCj4g ICB2Y2F0IFt0ZXh0IChmbk5hbWUrK25hbWUpIDwrPiB0ZXh0ICI9IiA8Kz4g ZiBkDQo+LS0JICAsKGhzZXAgJCBtYXAgdGV4dCBbZm5OYW1lLCIgXCIiKytu YW1lKysiXCIgPSAiXSkgPCs+IGYgZA0KPgkgIF0NCg0KDQoNCkZ1bmN0aW9u cyBvbiB0eXBlcyBhcmUgYWx3YXlzIG9mIHRoZSBmb3JtDQpmbk5hbWVUeXBl ID0gZm4gb2YgdmFsdWUNCg0KIHNxbENyZWF0ZUZuJyBkQER7Ym9keSxuYW1l fSA9IHRleHQgKGZuTmFtZSsrbmFtZSkgPCs+IHRleHQgIj0iIDwrPg0KCQkJ ICAgICAgIChpZiBpc0VudW0gZCB0aGVuIHRleHQgIltdIiAtLSBubyB0YWJs ZXMNCgkJCQllbHNlIHZjYXQgKG1hcCBzcWx0YWJsZSBib2R5KSA8Kz4odGV4 dCAiW10iKSkNCg0KDQoNCj4gc3FsQ3JlYXRlRm4gZCA9IHR5cGVGdW5jdGlv biBmbk5hbWUgZCBpbXBsDQo+ICB3aGVyZQ0KPiAgaW1wbCBkQER7Ym9keSxu YW1lfSA9IGlmIGlzRW51bSBkIHRoZW4gdGV4dCAiW10iIC0tIG5vIHRhYmxl cw0KPgkJCSBlbHNlIHZjYXQgKG1hcCBzcWx0YWJsZSBib2R5KSA8Kz4odGV4 dCAiW10iKQ0KPiAgc3FsdGFibGUgYkBCb2R5e2NvbnN0cnVjdG9yLGxhYmVs cyx0eXBlc30gPSANCj4gICAgICB2Y2F0ICRbdGV4dCAkICJbVGFibGUgXCIi Kytjb25zdHJ1Y3RvcisrIlwiJCAoIiwNCj4JICAgICAgdGV4dCAkICJwcmlt YXJ5S2V5IFwiIisrY29uc3RydWN0b3IgKysiXCIpIl0NCj4JICAgICAgKysg KG1hcCByb3dSZXAgKHppcCBsYWJlbHMgdHlwZXMpKSANCj4JICAgICAgKysg W3RleHQgIl0rKyJdIC0tIGNsb3NlIHRhYmxlIGRhdGEgc3RydWN0dXJlDQo+ CSAgICAgICsrIChtYXAgY3JlYXRlIHR5cGVzKSAtLSB0YWJsZSBzdHJ1Y3R1 cmUgZm9yIHN1YnNpZGlhcnkgdHlwZXMNCj4gIHJvd1JlcCAobGFiZWwsQ29u IHR5cGVOYW1lKSA9IA0KPiAgICAgdGV4dCAkICIrKyhyb3ciKyt0eXBlTmFt ZSsrIiAiKysiXCIiKysobGFiZWwyQ29sTmFtZSBsYWJlbCkrKyJcIikiDQo+ ICBjcmVhdGUgKENvbiB0eXBlTmFtZSkgPXRleHQgJCBmbk5hbWUrK3R5cGVO YW1lKysiKysiDQo+ICBmbk5hbWU9InNxbCIgIA0KDQoNCldlIHdhbnQgdG8g c3RvcmUgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggdHlwZSB3aGVuIHJl ZmVyZW5jZWQgaW4gYSBTUUwgDQpDUkVBVEUgc3RhdGVtZW50LiAgIFRoZSBy dWxlcyBvZiByZXByZXNlbnRhdGlvbiBhcmU6DQoNCiogaWYgdGhlIHR5cGUg aXMgYSBwcmltaXRpdmUgdHlwZSBvciBlbnVtZXJhdGVzIGUuZy4gSW50cyBv ciBjb2xvcnMsIHRoZW4NCiAgc3RvcmUgdGhlIGZpZWxkIGJ5IHRoZSBuYW1l IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgcmVmZXJlbmNlIHR5cGUgYW5kDQog IGp1c3QgdXNlIFNob3cgdG8gcmVuZGVyIHRoZSBvYmplY3QgaW4gcmVjb3Jk cw0KKiBpZiB0aGUgdHlwZSBoYXMgb25seSBvbmUgY29uc3RydWN0b3IsIGJ1 dCBpdCBpcyBhIGNvbXBsZXggdHlwZSwgdXNlIA0KICBzbG90bmFtZSArICJJ ZCIgZm9yIHRoZSBmaWVsZG5hbWUgYW5kIHN0b3JlIHRoZSBoYXNoIG9mIHRo ZSBvYmplY3QgaW4gDQogIHRoZSB0YWJsZSBpdHNlbGYuDQoqIG90aGVyd2lz ZSBzdG9yZSB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3IgaW4gYSBmaWVs ZCBjYWxsZWQgc2xvdE5hbWUrIlRhYmxlIiBhbmQgc3RvcmUgdGhlIGhhc2gg b2YgdGhlIG9iamVjdCBpbiBzbG90TmFtZSsiSWQuDQoNCj4gcm93Rm4gZEBE e2JvZHksbmFtZX0gPSB0ZXh0ICgicm93IisrbmFtZSkgPCs+IA0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgdGV4dCAiY29sTmFtZSIgPCs+IHRleHQg Ij0iIDwrPiBib2QNCj4gIHdoZXJlIA0KPiAgIGJvZCANCj4gICAgfCBpc0Vu dW0gZCA9IHRleHQkICJbQyBjb2xOYW1lIGNOYW1lVHlwZSByZXF1aXJlZCBE YXRhXSINCj4gICAgfCBudW1Db25zdHJ1Y3RvcnMgZCA9PSAxID0gYmFzaWMN Cj4gICAgfCBvdGhlcndpc2UgPSB2Y2F0IFt0ZXh0ICIoQyAoY29sTmFtZSsr XCJUYWJsZVwiKSBjTmFtZVR5cGUgcmVxdWlyZWQgRGF0YSk6IiwNCj4JCQkg YmFzaWNdDQo+ICAgYmFzaWM9dGV4dCQgIltDIChjb2xOYW1lKytcIklkXCIp IGhhc2hUeXBlIHJlcXVpcmVkIERhdGFdIg0KDQo+IGxhYmVsMkNvbE5hbWUg eCA9IHgNCg0KISEhY2FuIHVzZSBhIHJlZmVyZW5jZXMgbGlrZSBmdW5jdGlv biBidXQgb25lIHRoYXQgd29ya3Mgd2l0aCBtdWx0aXBsZSB0YWJsZXMNCmUg YSByZWZlcmVuY2VzIGxpa2UgZnVuY3Rpb24gYnV0IG9uZSB0aGF0IHdvcmtz IHdpdGggbXVsdGlwbGUgdGFibGVzDQoNCg0KPiBub3ROdWxsPSJub3QgbnVs bCINCj4gYWRkRmllbGQgeCA9ICIsXG4iKyt4DQo+IGNOYW1lVHlwZSA9IFZh ckNoYXIgMjANCg0KSU5TRVJUDQoNCldlIG5lZWQgdG8gZGVmaW5lIHRoZSBj b21tb24gZmVhdHVyZXMgb2YgYW55IHR5cGVzIHdlIHdhbnQgdG8gDQppbnNl cnQgaW50byBhIGRhdGFiYXNlLiAgU3BlY2lmaWNhbGx5LCB3ZSBuZWVkIHRv IGdlbmVyYXRlIHNxbEluc2VydCANCnN0YXRlbWVudHMgYW5kIHdlIG5lZWQg dG8ga25vdyBob3cgdHlwZXMgYXJlIHJlcHJlc2VudGVkIHdoZW4gdGhleSAN CmFyZSBpbnNlcnRlZCBhcyBmaWVsZHMgb2Ygb3RoZXIgdHlwZXMgKHVzaW5n IHRoZSBydWxlcyBhYm92ZSkNCg0KPiBjbGFzcyBTUUxJbnNlcnRhYmxlIGEg d2hlcmUNCj4gIHNxbEluc2VydDo6YS0+W0luc2VydF0gLS0gU1FMIEluc2Vy dCBpbnRvIGRiIC4uLi4NCj4gIHNxbFZhbHVlOjphLT5bU3RyaW5nXSAtLUhv dyB0aGUgdHlwZSBhcHBlYXJzIHdoZW4gaW5zZXJ0ZWQNCgkgICAgICAgDQo+ IHNxbEluc2VydEZuIGRARHtib2R5LG5hbWV9ID0gaW5zdGFuY2VTa2VsZXRv biAiU1FMSW5zZXJ0YWJsZSIgDQo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBbKHNxbEluc2VydEZuLGVtcHR5KSwNCj4JCQkJICAgKHRhYmxl UmVwRm4sZW1wdHkpXSBkDQo+ICB3aGVyZQ0KPiAgIHNxbEluc2VydHMgPSBt YXAgc3FsSW5zZXJ0Rm4gYm9keQ0KPiAgIHNxbEluc2VydEZuIGJAQm9keXtj b25zdHJ1Y3RvcixsYWJlbHMsdHlwZXN9ID0gDQo+CWxldCBmTmFtZT0ic3Fs SW5zZXJ0Ig0KPgkgICAgZm5OYW1lID0gdGV4dCAoZk5hbWUpDQo+CSAgICBm biA9IGZuTmFtZTwrPiAgDQo+ICAgICAgICAgICAgICAgICAgICAgaHNlcCBb dGV4dCAib2JqQCIscGF0dGVybiBjb25zdHJ1Y3RvciB0eXBlcywNCj4JCQkg ICAgdGV4dCAiPSIsDQo+CQkJICAgIGlmIGlzRW51bSBkIHRoZW4gdGV4dCAi W10iIGVsc2Ugc3FsXQ0KPgkgICAgc3FsPXZjYXQgJCAodGV4dCAkICJbaW5z ZXJ0TG9vc2UgXCIiKysgY29uc3RydWN0b3IrKyJcIiBbXSAkIik6DQo+ICAg ICAgICAgICAgICAgICAgICAgICh0ZXh0ICQgIlsoaGFzaCBvYmopXSIpOg0K PgkJICAgICAgIChtYXAgKFx4LT5oc2VwIA0KPgkJCSAgICAgIFt0ZXh0JCAi KysgKCIrK3RhYmxlUmVwTmFtZSsrIiAiLHgsdGV4dCAiKSAiXSkNCj4JCSAg ICAgICAgICAgICh2YXJOYW1lcyB0eXBlcykpICsrDQo+CQkgICAgICAgW3Rl eHQgIl0iXQ0KPgkgICAgb3RoZXJJbnNlcnRzID0gdmNhdCAkIA0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFwIA0KPiAgICAgICAgICAgICAgICAg ICAgICAgICAgKFx4LT5oc2VwIFt0ZXh0ICIrKyAoIixmbk5hbWUsdGV4dCAi ICIseCx0ZXh0ICIpIl0pIA0KPgkJCSAgICh2YXJOYW1lcyB0eXBlcykNCj4J CWluIGZuPCs+b3RoZXJJbnNlcnRzDQo+ICAgdGFibGVSZXBOYW1lPSJzcWxW YWx1ZSINCj4gICB0YWJsZVJlcHMgPSBtYXAgdGFibGVSZXBGbiBib2R5DQo+ ICAgdGFibGVSZXBGbiBiQEJvZHl7Y29uc3RydWN0b3IsbGFiZWxzLHR5cGVz fSANCj4gICAgfCBpc0VudW0gZCA9IGZuTGVmdCA8Kz4gc2hvd1RleHQNCj4g ICAgfCBudW1Db25zdHJ1Y3RvcnMgZCA9PSAxICYmDQo+ICAgICAgKGxlbmd0 aCB0eXBlcyk9PTEgPSBmbkxlZnQgPCs+IGZuTmFtZSA8Kz4gdGV4dCAiYWEi DQo+ICAgIHwgbnVtQ29uc3RydWN0b3JzIGQgPT0gMSAgPSBmbkxlZnQgPCs+ ICh0ZXh0ICJbaGFzaCBvYmpdIikNCj4gICAgfCBvdGhlcndpc2UgPSBmbkxl ZnQgPCs+ICh0ZXh0ICJbc3F1b3RlICQgY29uc3RydWN0b3JOYW1lIG9iaixo YXNoIG9ial0iKQ0KPiAgICB3aGVyZSBmbk5hbWU9dGV4dCB0YWJsZVJlcE5h bWUNCj4gICAgICAgICAgZm5MZWZ0ID1oc2VwIFtmbk5hbWUsdGV4dCAib2Jq QCIscGF0dGVybiBjb25zdHJ1Y3RvciB0eXBlcyx0ZXh0ICI9Il0NCj4JICAg c2hvd1RleHQgPSB2Y2F0IFt0ZXh0ICJbc3F1b3RlIG9ial0iXQ0KPgkJICAg ICAgIA0KDQo+IHNxdW90ZSBvYmogPSBpZiBpc1N0cmluZyBvYmogdGhlbiAi JyIrK2Rpc3F1b3RlIG9iaisrIiciDQo+CQkJICAgICAgIGVsc2UgIiciKyso c2hvd29iaikrKyInIg0KPiAgd2hlcmUgDQo+ICAgaXNTdHJpbmcgb2JqID0g aGVhZCBzaG93b2JqID09ICciJyANCj4gICBkaXNxdW90ZSBvYmogPSBkcm9w IDEgKHRha2UgKGxlbmd0aCBzaG93b2JqIC0gMSkgc2hvd29iaikNCj4gICBz aG93b2JqID0gc2hvdyBvYmoNCg0KTW9yZSBvciBsZXNzIHRoaXMgbG9va3Mg c29tZXRoaW5nIGxpa2U6DQoNCiBzcWxJbnNlcnQgb2JqID0gIkluc2VydCBp bnRvICIrKyhjb25zdHJ1Y3Rvck5hbWUgb2JqKSsrIiBWQUxVRVMgKCINCiAg ICsrIChoYXNoIG9iaikgLS0gdW5pcXVlIGlkDQotICArKyAoc3RyaW5nQXJn cyAiLCAiICh0YWJsZVJlcCAiLCAiKSBvYmopDQogICArKyAiKSIgKysgKHN0 cmluZ0FyZ3MgIlxuIiBzcWxJbnNlcnQgb2JqKQ0KDQogdGFibGVSZXAgc2Vw IG9iaiANCiAgfCBpc0VudW0gKGRhdGF0eXBlIG9iaikgPSBzaG93IG9iag0K ICB8IFRydWUNCiAgJiYgbnVtQ29uc3RydWN0b3JzIChkYXRhdHlwZSBvYmop PT0xIA0KICAmJiAgbnVtQ29uc3RydWN0b3JBcmdzIG9iaiA9PSAxIA0KLSYm ICAoaXNFbnVtICQgZGF0YXR5cGUgJCBmcm9tSnVzdCAkIGdldEFyZzEgb2Jq KSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAiIi0tc2hv dyRmcm9tSnVzdCRnZXRBcmcxIG9iag0KICB8IG90aGVyd2lzZSA9IGNvbnN0 cnVjdG9yTmFtZSBvYmogKysgc2VwICsrIChoYXNoIG9iaikNCg0KDQo+IGhh c2ggb2JqPXNxdW90ZSAkIG1vZCAoZm9sZHIgKFx4IHktPjI1Nip5Kyhmcm9t RW51bSB4KSkgMSAoc2hvdyBvYmopKSANCj4JICAgICAgICgyNTYqMjU2KjI1 Nio2NCkNCg0KRnVuY3Rpb25zIEkgbmVlZDoNCg0KPiBpc0VudW0geEAoRCBf IF8gXyBfIF8gXykgPSAoc3VtICQgbWFwIChsZW5ndGgudHlwZXMpIChib2R5 IHgpKT09MA0KPiBpc0VudW0gXyA9IFRydWUNCj4gbnVtQ29uc3RydWN0b3Jz IHggPSBsZW5ndGggJCBib2R5ICB4DQoNCk1FVEEtRnVuY3Rpb25zDQoNCklm IHdlIGhhZCBleGlzdGVudGlhbCB0eXBlcyB0aGVuIGdldEFyZ3Mgd291bGQg cmV0dXJuIGEgbGlzdCANCiAgZ2V0QXJnOjphLT5JbnQtPk1heWJlIGIgLS1n ZXRBcmcgMCA9PWNvbnN0cnVjdG9yTmFtZQ0KICBjb25zdHJ1Y3Rvck5hbWU9 Z2V0QXJnIGEgMCANCg0KPiBjbGFzcyBNZXRhRGF0YSBhIHdoZXJlDQo+ICBj b25zdHJ1Y3Rvck5hbWU6OmEtPlN0cmluZw0KPiAgZGF0YXR5cGUgOjphLT5E YXRhDQoNCj4gbWV0YUZuIGRARHtib2R5LG5hbWV9ID0gaW5zdGFuY2VTa2Vs ZXRvbiAiTWV0YURhdGEiIA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFsoY29uc3RydWN0b3JOYW1lRm4sZW1wdHkpLA0K PgkJCQkJICAgIChkYXRhdHlwZUZuLGVtcHR5KV0gZA0KPiAgd2hlcmUNCj4g ICBjb25zdHJ1Y3Rvck5hbWVzID0gbWFwIGNvbnN0cnVjdG9yTmFtZUZuIGJv ZHkNCj4gICBjb25zdHJ1Y3Rvck5hbWVGbiBCb2R5IHtjb25zdHJ1Y3Rvcix0 eXBlc30gPSANCj4gICAgdGV4dCAiY29uc3RydWN0b3JOYW1lIiA8Kz4gDQo+ ICAgIGhzZXAgW3BhdHRlcm4gY29uc3RydWN0b3IgdHlwZXMsdGV4dCAiPSIs IHRleHQgJCciJzpjb25zdHJ1Y3RvcisrIlwiIl0NCj4gICBkYXRhdHlwZXMg PSBtYXAgZGF0YXR5cGVGbiBib2R5DQo+ICAgZGF0YXR5cGVGbiBCb2R5IHtj b25zdHJ1Y3Rvcix0eXBlc30gPSANCj4gICAgdGV4dCAiZGF0YXR5cGUiIDwr Pg0KPiAgICBoc2VwIFtwYXR0ZXJuIGNvbnN0cnVjdG9yIHR5cGVzLHRleHQg Ij0iLCB0ZXh0ICRzaG93IGRdDQoNCj4gbWV0YVR5cGVGbiBkQER7Ym9keSxu YW1lfSA9aHNlcCAkIG1hcCB0ZXh0ICBbZm5OYW1lKytuYW1lLCAiPSIgLCBz aG93IGRdIA0KPiAgd2hlcmUgZm5OYW1lPSJtZXRhIg0KDQoNCg0KDQoNCj4t LSAgc3RyaW5nQXJnczo6U3RyaW5nIC0+IChiLT5TdHJpbmcpIC0+IGEtPiBT dHJpbmcNCj4tLSAgbnVtQ29uc3RydWN0b3JBcmdzOjphLT5JbnQNCg0KPiBp bnN0YW5jZSBNZXRhRGF0YSBJbnQgd2hlcmUNCj4gICAgIGNvbnN0cnVjdG9y TmFtZSB4PSIiDQo+ICAgICBkYXRhdHlwZSB4ID0gbWV0YUludC0tVHlwZU5h bWUgIkludCINCg0KPiBtZXRhSW50PVR5cGVOYW1lICJJbnQiDQoNCj4gaW5z dGFuY2UgU1FMSW5zZXJ0YWJsZSBJbnQgd2hlcmUNCj4gICAgIHNxbEluc2Vy dCB4ID0gW10NCj4gICAgIHNxbFZhbHVlIHggPSBbc3F1b3RlIHhdDQoNCj4g c3FsSW50ID0gW10NCg0KPiByb3dJbnQgY29sID0gW0MgY29sIFdob2xlIHJl cXVpcmVkIERhdGFdDQoNCiAgICB8IGlzRW51bSBkID0gdGV4dCQgIltDIGNv bE5hbWUgY05hbWVUeXBlIHJlcXVpcmVkIERhdGFdIg0KYWRkRmllbGQgJCBj b2wgKysiIEludGVnZXIgIisrbm90TnVsbA0KDQoNCg0KPiBpbnN0YW5jZSBN ZXRhRGF0YSBJbnRlZ2VyIHdoZXJlDQo+ICAgICBjb25zdHJ1Y3Rvck5hbWUg eD0iIg0KPiAgICAgZGF0YXR5cGUgeCA9IFR5cGVOYW1lICJJbnRlZ2VyIg0K DQo+IGluc3RhbmNlIFNRTEluc2VydGFibGUgSW50ZWdlciB3aGVyZQ0KPiAg ICAgc3FsSW5zZXJ0IHggPSBbXQ0KPiAgICAgc3FsVmFsdWUgeCA9IFtzcXVv dGUgeF0NCg0KDQo+IHNxbEludGVnZXI9W10NCj4gcm93SW50ZWdlcj1yb3dJ bnQNCg0KPiBpbnN0YW5jZSBNZXRhRGF0YSBDaGFyIHdoZXJlDQo+ICAgICBj b25zdHJ1Y3Rvck5hbWUgeD0iIg0KPiAgICAgZGF0YXR5cGUgeCA9IFR5cGVO YW1lICJDaGFyIg0KDQo+IGluc3RhbmNlIFNRTEluc2VydGFibGUgQ2hhciB3 aGVyZQ0KPiAgICAgc3FsSW5zZXJ0IHggPSBbXQ0KPiAgICAgc3FsVmFsdWUg eCA9IFtzcXVvdGUgeF0NCg0KPiBzcWxDaGFyPVtdDQo+IHJvd0NoYXIgY29s PVtDIGNvbCAoQ2hhcmFjdGVyIDEpIHJlcXVpcmVkIERhdGFdDQoNCj4gaW5z dGFuY2UgKE1ldGFEYXRhIGEpID0+IE1ldGFEYXRhIFthXSB3aGVyZQ0KPiAg ICAgY29uc3RydWN0b3JOYW1lIHg9IiINCj4gICAgIGRhdGF0eXBlIHggPSBU eXBlTmFtZSAiU3RyaW5nIg0KDQo+IGluc3RhbmNlIChTUUxJbnNlcnRhYmxl IGEsU2hvdyBhKSA9PiBTUUxJbnNlcnRhYmxlIFthXSB3aGVyZQ0KPiAgICAg c3FsSW5zZXJ0IHggPSBbXQ0KPiAgICAgc3FsVmFsdWUgeCA9IFtzcXVvdGUg eF0NCg0KPiBzcWxTdHJpbmc9W10NCj4gcm93U3RyaW5nIGNvbCA9IFtDIGNv bCAoVmFyQ2hhciAxMDApIHJlcXVpcmVkIERhdGFdDQoNCj4gaW5zdGFuY2Ug TWV0YURhdGEgRmxvYXQgd2hlcmUNCj4gICAgIGNvbnN0cnVjdG9yTmFtZSB4 PSIiDQo+ICAgICBkYXRhdHlwZSB4ID0gVHlwZU5hbWUgIkZsb2F0Ig0KDQo+ IGluc3RhbmNlIFNRTEluc2VydGFibGUgRmxvYXQgd2hlcmUNCj4gICAgIHNx bEluc2VydCB4ID0gW10NCj4gICAgIHNxbFZhbHVlIHggPSBbc3F1b3RlIHhd DQoNCj4gc3FsRmxvYXQ9W10NCg0KIHRhYmxlRmxvYXQgY29sID0gYWRkRmll bGQgJCBjb2wgKysiIGZsb2F0ICIrKyBub3ROdWxsDQoNCg0KDQo+IGluc3Rh bmNlIE1ldGFEYXRhIERvdWJsZSB3aGVyZQ0KPiAgICAgY29uc3RydWN0b3JO YW1lIHg9IiINCj4gICAgIGRhdGF0eXBlIHggPSBUeXBlTmFtZSAiRG91Ymxl Ig0KDQo+IGluc3RhbmNlIFNRTEluc2VydGFibGUgRG91YmxlIHdoZXJlDQo+ ICAgICBzcWxJbnNlcnQgeCA9IFtdDQo+ICAgICBzcWxWYWx1ZSB4ID0gW3Nx dW90ZSB4XQ0KDQo+IHNxbERvdWJsZT1bXQ0KDQogdGFibGVEb3VibGUgY29s ID0gYWRkRmllbGQgJCBjb2wgKysgIiBkb3VibGUgIiArKyBub3ROdWxsDQoN ClNRTCBTdW1tYXJpemUNCg0KVGhlIGFwcHJvYWNoIHRvIHN1bW1hcml6YXRp b24gaXMgdG8gZGVmaW5lIHR5cGUgbmFtZXMgdGhhdCB0ZWxsIHRoZSANCnBy b2Nlc3MgdG8gc3VtbWFyaXplIG9uIHRoZSBhcHByb3ByaWF0ZSBrZXlzIGFu ZCB0byBnZW5lcmF0ZSBhIHNldCBvZg0KcXVlcmllcyB0aGF0IGNhcnJ5IGFs bCB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIHN1bW1hcml6ZSBvbiBh IHR5cGUuDQpBbiBhdXRvbWF0aWNhbGx5IGFkZCBhIGNvdW50KCopIGZpZWxk IHRoYXQgY291bnRzIHRoZSByZWNvcmRzIGluIHRoZSBncm91cC4NClRoZSBp bnRlcmZhY2UgaXMgc3VtbW1hcml6ZSB0eXBlbmFtZSBhcyBzdHJpbmcNCg0K PiB0eXBlIEFnZ1N1bUludGVnZXIgPSBJbnRlZ2VyDQo+IHR5cGUgQWdnU3Vt SW50ID0gSW50DQo+IHR5cGUgQWdnU3VtRmxvYXQgPSBGbG9hdA0KPiB0eXBl IEFnZ1N1bURvdWJsZSA9IERvdWJsZQ0KDQo+IHJvd0FnZ1N1bUludGVnZXIg PSByb3dJbnRlZ2VyDQo+IHJvd0FnZ1N1bUludCA9IHJvd0ludA0KPi0tIHJv d0FnZ1N1bUZsb2F0ID0gcm93RmxvYXQNCj4gLS1yb3dBZ2dTdW1Eb3VibGUg PSByb3dEb3VibGUNCg0KPiBzcWxTdW1JbnRlZ2VyID0gc3FsSW50ZWdlcg0K PiBzcWxTdW1JbnQgPSBzcWxJbnQNCj4gc3FsU3VtRmxvYXQgPSBzcWxGbG9h dA0KPiBzcWxTdW1Eb3VibGU9c3FsRG91YmxlDQoNCj4gc3FsQWdnU3VtSW50 ZWdlciA9IHNxbEludGVnZXINCj4gc3FsQWdnU3VtSW50ID0gc3FsSW50DQo+ IHNxbEFnZ1N1bUZsb2F0ID0gc3FsRmxvYXQNCj4gc3FsQWdnU3VtRG91Ymxl PXNxbERvdWJsZQ0KDQotLT4gc3FsQWdnU3VtU3RyaW5nID0gc3FsU3RyaW5n DQoNCj4gc3FsU3VtQWdnU3VtSW50ZWdlciA9IHNxbFN1bUludGVnZXINCj4g c3FsU3VtQWdnU3VtSW50ID0gc3FsU3VtSW50DQo+IHNxbFN1bUFnZ1N1bUZs b2F0ID0gc3FsU3VtRmxvYXQNCj4gc3FsU3VtQWdnU3VtRG91YmxlPXNxbFN1 bURvdWJsZQ0KDQotLT4gc3FsU3VtQWdnU3VtU3RyaW5nID0gc3FsU3VtU3Ry aW5nDQoNCj4gc3FsU3VtRm4gZEBEe2JvZHksbmFtZX0gPSB0ZXh0IChmbk5h bWUrK25hbWUpIDwrPiB0ZXh0ICI9IiA8Kz4NCj4JCQkgICAgICAgKGlmIGlz RW51bSBkIHRoZW4gdGV4dCAiW10iIC0tIG5vIHRhYmxlcw0KPgkJCQllbHNl IHZjYXQgKG1hcCBzcWx0YWJsZSBib2R5KSA8Kz4odGV4dCAiW10iKSkNCj4g IHdoZXJlDQo+ICBzcWx0YWJsZSBiQEJvZHl7Y29uc3RydWN0b3IsbGFiZWxz LHR5cGVzfSA9IA0KPiAgICAgIHZjYXQgJChmb2xkbDEgKDwrPikgW3RleHQg ICJbU2VsZWN0IFsiLCBmaWVsZFNjYWxhcnMgLGFnZ1NjYWxhcnNDb3VudCwN Cj4JICAgICAgdGV4dCAiXSIsDQo+CSAgICAgIHRleHQgIiBbIix0ZXh0ICQg c2hvdyBjb25zdHJ1Y3Rvcix0ZXh0ICJdIiwgLS1Gcm9tIGxpc3QNCj4JICAg ICAgdGV4dCAiW10iLC0td2hlcmUgY2xhdXNlDQo+CSAgICAgIGlmIGlzR3Jv dXAgdGhlbiB0ZXh0ICJbIjwrPmZpZWxkU2NhbGFyczwrPnRleHQiXSIgZWxz ZSB0ZXh0ICJbXSIsDQo+CSAgICAgIHRleHQgIltdIFtdIiwgLS0gb3JkZXIg YnkNCj4JICAgICAgdGV4dCAiXSsrIl0pOiAtLSBjbG9zZSB0YWJsZSBkYXRh IHN0cnVjdHVyZQ0KPgkgICAgLS0gIChtYXAgY3JlYXRlIHR5cGVzKSAtLSB0 YWJsZSBzdHJ1Y3R1cmUgZm9yIHN1YnNpZGlhcnkgdHlwZXMNCj4gICAgICAg ICAgICAgW3RleHQgIiJdDQo+ICAgd2hlcmUgDQo+ICAgICBpc0dyb3VwID0g bGVuZ3RoIGFnZ0ZpZWxkcyA+IDANCj4gICAgIHBhaXJzID0gemlwIGxhYmVs cyB0eXBlcw0KPiAgICAgKGFnZ0ZpZWxkcyxncm91cEJ5RmllbGRzKSA9IHBh cnRpdGlvbiBpc0FnZyBwYWlycw0KPiAgICAgaXNBZ2cgKGxhYmVsLENvbiB0 eXBlTmFtZSkgPSAiQWdnU3VtIiBgaXNQcmVmaXhPZmAgdHlwZU5hbWUgDQo+ ICAgICBmaWVsZFNjYWxhcnMgPSBjb21tYVNlcCAkIG1hcCAoc2hvdy5sYWJl bDJDb2xOYW1lLmZzdCkgZ3JvdXBCeUZpZWxkcw0KPiAgICAgYWdnU2NhbGFy c0NvdW50ID0gaWYgaXNHcm91cCB0aGVuIHRleHQgIiwiPCs+DQo+CQkJCQlh Z2dTY2FsYXJzIDwrPiB0ZXh0ICIsIFwiY291bnQoKilcIiIgDQo+CQkJCSAg IGVsc2UgdGV4dCAiIg0KPiAgICAgYWdnU2NhbGFycyA9IGNvbW1hU2VwICQg DQo+CQkgICAgbWFwIChzaG93Lg0KPiAgICAgICAgICAgICAgICAgICAgICAg IChcbGFiZWwtPiJzdW0oIisrKGxhYmVsMkNvbE5hbWUgbGFiZWwpKysiKSIp LmZzdCkNCj4JCQlhZ2dGaWVsZHMNCj4gICAgIGNvbW1hU2VwIFtdID0gdGV4 dCAiIg0KPiAgICAgY29tbWFTZXAgdmFscyA9IGZvbGRsIChceCB5LT4geCA8 Kz4gdGV4dCAiLCAiIDwrPiB0ZXh0IHkpIA0KPgkJCSAgICAgICh0ZXh0ICQg aGVhZCB2YWxzKSAodGFpbCB2YWxzKQ0KPiAgIC0tICB0ZXh0ICQgIisrKHJv dyIrK3R5cGVOYW1lKysiICIrKyJcIiIrK2xhYmVsKysiXCIpIg0KPiAgY3Jl YXRlIChDb24gdHlwZU5hbWUpID10ZXh0ICQgZm5OYW1lKyt0eXBlTmFtZSsr IisrIg0KPiAgZm5OYW1lPSJzcWxTdW0iICANCg0KRm9ybWF0IHNob3VsZCBi ZSB0byBnZW5lcmF0ZSB0byBzcWwgYWR0IGFuZCB0aGVuIGNvbnZlcnQgc3Fs IGFkdCB0byBzdHJpbmcNCm9yIHR1cGxlIG9mIA0KDQoNClRhYmxlIG5hbWUg c2hvdWxkIGJlIGhhc2ggb2YgcXVlcnkgbmFtZQ0KU2VsZWN0IGNvdW50KCop OltpbmRleG5hbWVzXSsrIG1hcCBzdW0gW3N1bW5hbWVzXSBmcm9tIHRhYmxl DQpncm91cCBieSBldmVyeXRoaW5nIHRoYXQgaXNuJ3QgYSBzdW0gdHlwZQ0K DQoNCg0KDQo+ey0tDQo+IHNxbFN1bUZuIGRARHtib2R5LG5hbWV9ID0gdGV4 dCAoZm5OYW1lKytuYW1lKSA8Kz4gdGV4dCAiPSIgPCs+DQo+CQkJICAgICAg IChpZiBpc0VudW0gZCB0aGVuIHRleHQgIltcIlwiXSINCj4JCQkJZWxzZSB2 Y2F0IChtYXAgc3FsdGFibGUgYm9keSkgPCs+KHRleHQgIltdIikpDQo+ICB3 aGVyZQ0KPiAgc3FsdGFibGUgYkBCb2R5e2NvbnN0cnVjdG9yLGxhYmVscyx0 eXBlc30gPSANCj4gICAgICB2Y2F0ICRbdGV4dCAkICIoXCJTRUxFQ1QgIiwN Cj4JICAgICAgdGV4dCAkICJcIiIrK2NvbnN0cnVjdG9yICsrICJJZCAiXCIi XQ0KPgkgICAgICArKyAobWFwIHJvd1JlcCAoemlwIGxhYmVscyB0eXBlcykp IA0KPgktLSAgICAgICsrW3RleHQgY29uc3RydWN0b3IrKyIoXFxuXCIrKyJd LA0KPgkgICAgICArKyBbdGV4dCAiKytcIlxcbik7XFxuXCIpOiJdIA0KPgkg ICAgICArKyAobWFwIGNyZWF0ZSB0eXBlcykNCj4gIHJvd1JlcCAobGFiZWws Q29uIHR5cGVOYW1lKSA9IA0KPiAgICAgdGV4dCAkICIrK3RhYmxlIisrdHlw ZU5hbWUrKyIgIisrIlwiIisrbGFiZWwrKyJcIiINCj4gIGNyZWF0ZSAoQ29u IHR5cGVOYW1lKSA9dGV4dCAkICJbXSsrIisrZm5OYW1lKyt0eXBlTmFtZSsr IisrIg0KPiAgZm5OYW1lPSJzcWxDcmVhdGUiDQo+LS19DQoNCg0KDQotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KLUV4aXN0ZW50aWFsIHR5cGUgc3R1ZmYg d2Ugd291bGQgbGlrZSB0byBhZGQgbGF0ZXINCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQoNCj4tLSAgICAgc3RyaW5nQXJncyBzZXAgc3RyaW5nZXIgeCA9 IHNob3cgeA0KPi0tICAgICBudW1Db25zdHJ1Y3RvckFyZ3MgeCA9IDANCg0K IGluc3RhbmNlIChTaG93IGEpID0+IE1ldGFEYXRhIChNeVR5cGUgYSkgd2hl cmUNCiAgICAgY29uc3RydWN0b3JOYW1lIHg9IkZvbyINCiAgICAgZGF0YXR5 cGUgeD0gVHlwZU5hbWUgIk15VHlwZSINCi0tICAgICBudW1Db25zdHJ1Y3Rv ckFyZ3MgeD0zDQotLSAgICAgc3RyaW5nQXJncyBzZXAgc3RyaW5nZXIgb0Ao TXlGb28geCBpIHMpID0gc3RyaW5nQXJncycnIHNlcCBzdHJpbmdlciBvIA0K DQogc3RyaW5nQXJncycnIHMgczEgczIgPSBlcnJvciAiYXNkYXMiDQoNCg0K PiBzdHJpbmdBcmdzJyBzZXAgIChNeUZvbyB4IGkgcykgPSANCj4JIHgnICsr c2VwKytpJyArKyBzZXAgKysgcycgDQo+ICAgICAgd2hlcmUgDQo+ICAgICAg IHgnPXN0cmluZ2VyJyB4DQo+CWknPXN0cmluZ2VyJycgaQ0KPglzJz1zdHJp bmdlcicnJyBzDQo+CXN0cmluZ2VyJyBvPXN0cmluZ2VyIG8NCj4gICAgICAg c3RyaW5nZXInJyBvPXN0cmluZ2VyIG8NCj4gICAgICAgc3RyaW5nZXInJycg byA9c3RyaW5nZXIgbw0KPiAgICAgICBzdHJpbmdlciBvPXNob3cgbw0KDQoN Cj4gZm9vIHggPSBzdHJpbmdBcmdzJyAiXG4iIChNeUZvbyAiYXNkIiAxMiAi YXNkIikNCg0KPiBmb2xkQ29uc3RydWN0b3JBcmdzJycgdG9UeXBlIGZvbGRP cCBiYXNlIChNeUZvbyB4IGkgcykgPSBlcnJvciAiYXNkIg0KDQo+IGZvbGRD b25zdHJ1Y3RvckFyZ3MnIHRvVHlwZSBmb2xkT3AgYmFzZSAoTXlGb28geCBp IHMpID0gDQo+ICAgICAgIGJhc2UgYGZvbGRPcGAgeCcgYGZvbGRPcGAgaScg YGZvbGRPcGAgcycNCj4gICAgICB3aGVyZSANCj4gICAgICAgeCc9dG9UeXBl JycnIHgNCj4gICAgICAgaSc9dG9UeXBlJyBpDQo+ICAgICAgIHMnPXRvVHlw ZScnIHMNCj4gICAgICAgdG9UeXBlIG89c2hvdyBvDQo+ICAgICAgIHRvVHlw ZScgbz10b1R5cGUgbw0KPiAgICAgICB0b1R5cGUnJyBvPXRvVHlwZSBvDQo+ ICAgICAgIHRvVHlwZScnJyBvPXRvVHlwZSBvDQoNCg0KDQogZm9sZENvbnN0 cnVjdG9yQXJncycnIHRvVHlwZSBmb2xkT3AgYmFzZSAoTXlGb28geCBpIHMp ID0gDQogICAgICAgYmFzZSBgZm9sZE9wYCAodG9UeXBlIHgpIGBmb2xkT3Bg ICh0b1R5cGUnIGkpIGBmb2xkT3BgICh0b1R5cGUnJyBzKQ0KICAgICAgd2hl cmUgDQogICAgICAgdG9UeXBlJyBvID0gdG9UeXBlIG8NCiAgICAgICB0b1R5 cGUnJyBvID10b1R5cGUgbw0KICAgICAgIHRvVHlwZScnJyBvID10b1R5cGUg bw0KDQo+IGRhdGEgKFNob3cgYSk9Pk15VHlwZSBhID1NeUZvbyBhIEludCBT dHJpbmcNCg0KLS0tTk90ZXMgZm9yIHRoZSBmdXR1cmUtLS0tLQ0KSGFza2Vs bCBGZWF0dXJlIGltcHJvdmVtZW50cyBiYXNlZCBvbiB3cml0aW5nIHRoaXM6 DQoxLiB0eXBlIGZ1bmN0aW9ucw0KMi4gZGVyaXZlIGxpa2UgZnVuY3Rpb25h bGl0eSB0aGF0IHByb2R1Y2VzIGNoZWNrYWJsZSBhYnN0cmFjdCBoYXNrZWxs IHN5bnRheA0KMy4gZ2l2ZSBhY2Nlc3MgdG8gYWxsIGhhc2tlbGwgc3RydWN0 dXJlcyBieSBuYW1lIGFuZCBhbGxvdyBmdW5jdGlvbnMgb24NCiAgIHRoZSBh YnN0cmFjdCBzeW50YXggb2YgdGhvc2Ugc3RydWN0dXJlcyANCjQuIFRoaXMg YWxsb3dzIGRlZmluaXRpb25zIG9mIGZ1bmN0aW9ucyBieSBuYW1lDQoNCklu dm9jYXRpb24gd291bGQgYmUgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIHdp dGhvdXQgPSBzaWducyAgZS5nLg0KDQogPiBzcWwgTXlUeXBlDQoNCndvdWxk IHR5cGUgY2hlY2sgaWYgdGhlIHNxbCBmdW5jdGlvbiB0YWtlcyBhIGRhdGEg c3RydWN0dXJlIGFzIGFuIGFyZ3VtZW50DQphbmQgcmV0dXJucyB2YWxpZCBo YXNrZWxsIEFEVC4NCg0KVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdGhl IHVzZXIgdG8gc3VnYXIgYW55dGhpbmcgYW5kIGFsbG93cyBuZXcgc3ludGF4 IA0KKGxpa2UgTW9uZHJpYW4gb3IgSGFza2VsbCsrKSBieSBoYXZpbmcgZnVu Y3Rpb25zIGxpa2U6DQoNCjxNb25kcmlhbj4gDQpTdHVmZiBoZXJlIGdldHMg cGFyc2VkIGludG8gbW9uZHJpYW4gKGFkdCxbbGlzdCBvZiBpZGVudGlmaWVy IHN0cmluZ3NdKQ0KdGhlIG5hbWUgc3BhY2UgaXMgcHJpdmF0ZSB0byBtb25k cmlhbg0KPC9Nb25kcmlhbj4NCg0KTm93IHlvdSBjYW4gaGF2ZSBmdW5jdGlv bnMgdGhhdCB0YWtlIG90aGVyIHN5bnRheCBhZHQgYW5kIHJldHVybnMgaGFz a2VsbA0KYWR0IHcvIGlkZW50aWZpZXJzIGluIHRoZSBoYXNrZWxsIG5hbWUg c3BhY2UNCg0KPCBzcWwgTW9uZHJpYW5JZGVudGlmaWVyICAtLSByZXR1cm5z IEhhc2tlbGwgZGF0YSBzdHJ1Y3R1cmUNCg0KVGhlIHF1ZXN0aW9uIGlzIHdo ZXRoZXIgd2UgY2FuIHR5cGUgY2hlY2sgdGhlc2UgaGFza2VsbCBhdGQgc28g dGhhdCB3ZQ0Ka25vdyB0aGF0IHRoZSBvdXRwdXQgaXMgYm90aCB2YWxpZCBz eW50YXggYW5kIGlzIHR5cGUgc2FmZSAoYXNpZGUgZnJvbSANCnBhcmFtZXRl cnMgZGVwZW5kZW50IG9uIHRoZSBpbnB1dCkNCg0KVGhlIG90aGVyIHRoaW5n IHlvdSBjb3VsZCBkbyBpcyBpbWl0YXRlIHBvbHl0eXBpYyBwcm9ncmFtbWlu ZyB3aXRob3V0DQp0aGUgY29uZnVzaW5nIHRlcm1pbm9sb2d5IC0tIGUuZy4N CiFmb2xkIG9iaiBnZW5lcmF0ZXMgYSBnZW5lcmFsaXplZCBmb2xkIGZ1bmN0 aW9uIGJhc2VkIG9uIHRoZSBkYXRhc3RydWN0dXJlDQogb2Ygb2JqIHRoZW4g dGFrZXMgYXJndW1lbnRzDQoNCndlIGNhbiBkbyB0aGlzIGVpdGhlciBieSBr bm93aW5nIHRoZSB0eXBlIGluIGFkdmFuY2UgZS5nLg0KIWZvbGQgb2JqVHlw ZSBmbjEgZm4yIGZuMyBvYmoNCnRoZSBvdGhlciB3YXkgdG8gZG8gdGhpcyBp cyBnZW5lcmF0ZSBhIGZvbGQgZnVuY3Rpb24gZm9yIGFueSB0eXBlDQphbmQg cHJvdmlkZSBzb21lIGFsZ29yaXRobWljIHdheSBvZiBjaGFpbmluZyB0aGVt IHRvZ2V0aGVyLg0Kc28gd2UgZGVmaW5lIA0KIXN1bT0hZm9sZHIgKCspDQoN ClRoaXMgd2lsbCBnZW5lcmF0ZSBsb3RzIG9mIGNvZGUgYnV0IHdvdWxkIHdv cmsuLi4NCg0KLS0tLS0tDQpTbyB0aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhl IG92ZXJhbGwgbmV3IHN5c3RlbSBhcmU6DQoxLiBtb2R1bGUgc3lzdGVtIGRp c2N1c3NlZCB3LyBGZXJndXMNCjIuIGFkIGhvYyBvdmVybG9hZGluZyBvZiBz aW5nbGUgZnVuY3Rpb25zIGUuZy4gc3VtIG9yIGxlbmd0aA0KMy4gaW50cm9z cGVjdGlvbiBkZXNjcmliZWQgYWJvdmUNCjQuIGF1dG9tYXRpYyBleHRlcm5h bCBpbnRlcmZhY2UgdG8gSmF2YSwgQ29yYmEsIGFuZCBEQ29tIGFuZCBYTUwg DQo1LiBQZXJzaXN0ZW50IERCIEltcGxlbWVudGF0aW9uIChiZWluZyBidWls dCBub3cpDQo2LiBYTUwgbGl0ZXJhY3kgY29tcGF0aWJsZSB3LyBicm93c2Vy cw0KNy4gWE1MIGF1dGhvcmluZy92aWV3aW5nL3J1bnRpbWUgZW52aXJvbm1l bnQNCg== --3511000-5972-913754049=:-4033521--
Re: Haskell as a relational database language
S. Alexander Jacobson Tue, 15 Dec 1998 15:39:21 -0500 (Eastern Standard Time)
- Haskell as a relational database language Tom Pledger
- Re: Haskell as a relational database language Michael Hobbs
- Re: Haskell as a relational database language Patrick Logan
- Re: Haskell as a relational database language David Glen JEFFERY
- RE: Haskell as a relational database language Simon Peyton-Jones
- Re: Haskell as a relational database language Torsten Grust
- Re: Haskell as a relational database language S. Alexander Jacobson
- S. Alexander Jacobson