--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--


Reply via email to