CLSQL Postgresql additions

Andrew Golding <andy-QKmEoyqQnbRWk0Htik3J/[email protected]> Mon, 16 Oct 2006 13:33:03 -0500
Newsgroups gmane.lisp.clsql.devel
Organization OnShore Inc.
Message-ID <[email protected]>
--=-tUA1ynThxubAIDVM+c9W
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Hello:

I've noticed that the error-id slot for the condition
sql-database-data-error while using Postgres does not actually contain
the 5-letter SQL error code specified by
http://www.postgresql.org/docs/8.1/interactive/errcodes-appendix.html
(and apparently to some degree the SQL spec), but rather the integer
status code for the result set.  Since the status code for fatal error
is always 7, the error-id slot will always be 7.

Setting error-id to the SQL error code (which can be done by calling
PQresultErrorField with the result set and the constant PG_DIAG_SQLSTATE
(equal to ascii character code for capitol C, specified in
postgres_ext.h) is accomplished within the three files attached to this
message.

Postgresql-api.lisp contains the new UFFI function definition for
PQresultErrorField and constants defined for each possible value for the
field code argument.  Postgresql-package.lisp exports the new function
along with the constant +PG-DIAG-SQLSTATE+ (the only constant we are
interested in at the moment).  Postgresql-sql.lisp is changed so that
when the sql-database-data-error is generated as the result of a bad sql
command, error-id is set to the error code instead of the result status
code.

These changes allow application code which handles errors to discern
between a constraint violation causing an sql-database-data-error and
something more sinister (such as a disk being full or the data center
where the machine is hosted being on fire).

Let me know if there are any questions.

The following changes started with files from CLSQL 3.7.4

Regards
Andrew Golding

--=-tUA1ynThxubAIDVM+c9W
Content-Disposition: attachment; filename=postgresql-api.lisp
Content-Type: text/plain; name=postgresql-api.lisp; charset=UTF-8
Content-Transfer-Encoding: base64

Ozs7OyAtKi0gTW9kZTogTElTUDsgU3ludGF4OiBBTlNJLUNvbW1vbi1MaXNwOyBCYXNlOiAxMCAt
Ki0NCjs7OzsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKg0KOzs7OyBGSUxFIElERU5USUZJQ0FUSU9ODQo7Ozs7
DQo7Ozs7IE5hbWU6ICAgICAgICAgIHBvc3RncmVzcWwuY2wNCjs7OzsgUHVycG9zZTogICAgICAg
TG93LWxldmVsIFBvc3RncmVTUUwgaW50ZXJmYWNlIHVzaW5nIFVGRkkNCjs7OzsgUHJvZ3JhbW1l
cnM6ICAgS2V2aW4gTS4gUm9zZW5iZXJnIGJhc2VkIG9uIA0KOzs7OyAgICAgICAgICAgICAgICBP
cmlnaW5hbCBjb2RlIGJ5IFBpZXJyZSBSLiBNYWkgDQo7Ozs7IERhdGUgU3RhcnRlZDogIEZlYiAy
MDAyDQo7Ozs7DQo7Ozs7ICRJZDogcG9zdGdyZXNxbC1hcGkubGlzcCAxMDA3NyAyMDA0LTEwLTAx
IDE3OjAyOjIwWiBrZXZpbiAkDQo7Ozs7DQo7Ozs7IFRoaXMgZmlsZSwgcGFydCBvZiBDTFNRTCwg
aXMgQ29weXJpZ2h0IChjKSAyMDAyIGJ5IEtldmluIE0uIFJvc2VuYmVyZw0KOzs7OyBhbmQgQ29w
eXJpZ2h0IChjKSAxOTk5LTIwMDEgYnkgUGllcnJlIFIuIE1haQ0KOzs7Ow0KOzs7OyBDTFNRTCB1
c2VycyBhcmUgZ3JhbnRlZCB0aGUgcmlnaHRzIHRvIGRpc3RyaWJ1dGUgYW5kIHVzZSB0aGlzIHNv
ZnR3YXJlDQo7Ozs7IGFzIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgTGlzcCBMZXNzZXIg
R05VIFB1YmxpYyBMaWNlbnNlDQo7Ozs7IChodHRwOi8vb3BlbnNvdXJjZS5mcmFuei5jb20vcHJl
YW1ibGUuaHRtbCksIGFsc28ga25vd24gYXMgdGhlIExMR1BMLg0KOzs7OyAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqDQoNCihpbi1wYWNrYWdlICM6cG9zdGdyZXNxbCkNCg0KDQo7Ozs7IFRoaXMgZmlsZSBpbXBs
ZW1lbnRzIGFzIGxpdHRsZSBvZiB0aGUgRkZJIGJpbmRpbmdzIHRvIHRoZQ0KOzs7OyBQb3N0Z3Jl
U1FMIGNsaWVudCBsaWJyYXJpZXMgYXMgd2UgY291bGQgZ2V0IGF3YXkgd2l0aC4NCjs7OzsgRXNw
ZWNpYWxseSBhbGwgdGhlIFBvc3RncmVTUUwtc3BlY2lmaWMgZ29vZGllcyBhcmVuJ3QgdGhlcmUs
IGFuZA0KOzs7OyB3ZSBqdXN0IHVzZSB2b2lkIHBvaW50ZXJzIHdoZXJlIHdlIGNhbiBnZXQgYXdh
eSB3aXRoIGl0LCB3aGljaA0KOzs7OyB0aGFua3MgdG8gdGhlIGRlc2lnbiBvZiB0aGUgUG9zdGdy
ZVNRTCBjbGllbnQgbGlicmFyaWVzIGlzIHByZXR0eQ0KOzs7OyBtdWNoIGV2ZXJ5d2hlcmUsIGlu
IGNvbnRyYXN0IHRvIHRoZSBNeVNRTCBjbGllbnQgbGlicmFyaWVzIGZvcg0KOzs7OyBleGFtcGxl
Lg0KDQo7Ozs7IFR5cGUgZGVmaW5pdGlvbnMNCg0KOzs7IEJhc2ljIFR5cGVzDQoNCih1ZmZpOmRl
Zi1mb3JlaWduLXR5cGUgcGdzcWwtb2lkIDp1bnNpZ25lZC1pbnQpDQoNCih1ZmZpOmRlZi1lbnVt
IHBnc3FsLWNvbm4tc3RhdHVzLXR5cGUgDQogICAgKDpjb25uZWN0aW9uLW9rDQogICAgIDpjb25u
ZWN0aW9uLWJhZCkpDQoNCih1ZmZpOmRlZi1lbnVtIHBnc3FsLWV4ZWMtc3RhdHVzLXR5cGUNCiAg
ICAoOmVtcHR5LXF1ZXJ5DQogICAgIDpjb21tYW5kLW9rDQogICAgIDp0dXBsZXMtb2sNCiAgICAg
OmNvcHktb3V0DQogICAgIDpjb3B5LWluDQogICAgIDpiYWQtcmVzcG9uc2UNCiAgICAgOm5vbmZh
dGFsLWVycm9yDQogICAgIDpmYXRhbC1lcnJvcikpDQoNCih1ZmZpOmRlZi1mb3JlaWduLXR5cGUg
cGdzcWwtY29ubiA6cG9pbnRlci12b2lkKQ0KKHVmZmk6ZGVmLWZvcmVpZ24tdHlwZSBwZ3NxbC1y
ZXN1bHQgOnBvaW50ZXItdm9pZCkNCg0KKHVmZmk6ZGVmLXR5cGUgcGdzcWwtY29ubi1wdHIgOnBv
aW50ZXItdm9pZCkNCg0KKHVmZmk6ZGVmLWVudW0gcGdzcWwtZnR5cGUNCiAgICAoKDpieXRlYSAx
NykNCiAgICAgKDppbnQyIDIxKQ0KICAgICAoOmludDQgMjMpDQogICAgICg6aW50OCAyMCkNCiAg
ICAgKDpmbG9hdDQgNzAwKQ0KICAgICAoOmZsb2F0OCA3MDEpKSkNCiAgDQo7OyhkZWNsYWltIChp
bmxpbmUgUFFzZXRkYkxvZ2luKSkgOzsgY2F1c2VzIGNvbXBpbGUgZXJyb3IgaW4gTFcgNC4yLjAN
Cih1ZmZpOmRlZi1mdW5jdGlvbiAoIlBRc2V0ZGJMb2dpbiIgUFFzZXRkYkxvZ2luKQ0KICAoKHBn
aG9zdCA6Y3N0cmluZykNCiAgIChwZ3BvcnQgOmNzdHJpbmcpDQogICAocGdvcHRpb25zIDpjc3Ry
aW5nKQ0KICAgKHBndHR5IDpjc3RyaW5nKQ0KICAgKGRiTmFtZSA6Y3N0cmluZykNCiAgIChsb2dp
biA6Y3N0cmluZykNCiAgIChwd2QgOmNzdHJpbmcpKQ0KICA6bW9kdWxlICJwb3N0Z3Jlc3FsIg0K
ICA6cmV0dXJuaW5nIHBnc3FsLWNvbm4pDQoNCihkZWNsYWltIChpbmxpbmUgUFFmaW5pc2gpKQ0K
KHVmZmk6ZGVmLWZ1bmN0aW9uICgiUFFmaW5pc2giIFBRZmluaXNoKQ0KICAoKGNvbm4gcGdzcWwt
Y29ubikpDQogIDptb2R1bGUgInBvc3RncmVzcWwiDQogIDpyZXR1cm5pbmcgOnZvaWQpDQoNCihk
ZWNsYWltIChpbmxpbmUgUFFzdGF0dXMpKQ0KKHVmZmk6ZGVmLWZ1bmN0aW9uICgiUFFzdGF0dXMi
IFBRc3RhdHVzKQ0KICAoKGNvbm4gcGdzcWwtY29ubikpDQogIDptb2R1bGUgInBvc3RncmVzcWwi
DQogIDpyZXR1cm5pbmcgcGdzcWwtY29ubi1zdGF0dXMtdHlwZSkNCg0KKGRlY2xhaW0gKGlubGlu
ZSBQUWVycm9yTWVzc2FnZSkpDQoodWZmaTpkZWYtZnVuY3Rpb24gKCJQUWVycm9yTWVzc2FnZSIg
UFFlcnJvck1lc3NhZ2UpDQogICgoY29ubiBwZ3NxbC1jb25uKSkNCiAgOm1vZHVsZSAicG9zdGdy
ZXNxbCINCiAgOnJldHVybmluZyA6Y3N0cmluZykNCg0KKGRlY2xhaW0gKGlubGluZSBQUWV4ZWMp
KQ0KKHVmZmk6ZGVmLWZ1bmN0aW9uICgiUFFleGVjIiBQUWV4ZWMpDQogICgoY29ubiBwZ3NxbC1j
b25uKQ0KICAgKHF1ZXJ5IDpjc3RyaW5nKSkNCiAgOm1vZHVsZSAicG9zdGdyZXNxbCINCiAgOnJl
dHVybmluZyBwZ3NxbC1yZXN1bHQpDQoNCihkZWNsYWltIChpbmxpbmUgUFFyZXN1bHRTdGF0dXMp
KQ0KKHVmZmk6ZGVmLWZ1bmN0aW9uICgiUFFyZXN1bHRTdGF0dXMiIFBRcmVzdWx0U3RhdHVzKQ0K
ICAoKHJlcyBwZ3NxbC1yZXN1bHQpKQ0KICA6bW9kdWxlICJwb3N0Z3Jlc3FsIg0KICA6cmV0dXJu
aW5nIHBnc3FsLWV4ZWMtc3RhdHVzLXR5cGUpDQoNCjsgRnJvbSBwb3N0Z3Jlc19leHQuaA0KDQo7
ICNkZWZpbmUgUEdfRElBR19TRVZFUklUWSAgICAgICAgICAgICAgICAnUycNCjsgI2RlZmluZSBQ
R19ESUFHX1NRTFNUQVRFICAgICAgICAgICAgICAgICdDJw0KOyAjZGVmaW5lIFBHX0RJQUdfTUVT
U0FHRV9QUklNQVJZICdNJw0KOyAjZGVmaW5lIFBHX0RJQUdfTUVTU0FHRV9ERVRBSUwgICdEJw0K
OyAjZGVmaW5lIFBHX0RJQUdfTUVTU0FHRV9ISU5UICAgICdIJw0KOyAjZGVmaW5lIFBHX0RJQUdf
U1RBVEVNRU5UX1BPU0lUSU9OICdQJw0KOyAjZGVmaW5lIFBHX0RJQUdfSU5URVJOQUxfUE9TSVRJ
T04gJ3AnDQo7ICNkZWZpbmUgUEdfRElBR19JTlRFUk5BTF9RVUVSWSAgJ3EnDQo7ICNkZWZpbmUg
UEdfRElBR19DT05URVhUICAgICAgICAgICAgICAgICAnVycNCjsgI2RlZmluZSBQR19ESUFHX1NP
VVJDRV9GSUxFICAgICAgICAgICAgICdGJw0KOyAjZGVmaW5lIFBHX0RJQUdfU09VUkNFX0xJTkUg
ICAgICAgICAgICAgJ0wnDQo7ICNkZWZpbmUgUEdfRElBR19TT1VSQ0VfRlVOQ1RJT04gJ1InDQoo
ZGVmY29uc3RhbnQgK1BHLURJQUctU0VWRVJJVFkrIChjaGFyLWNvZGUgI1xTKSkNCihkZWZjb25z
dGFudCArUEctRElBRy1TUUxTVEFURSsgKGNoYXItY29kZSAjXEMpKQ0KKGRlZmNvbnN0YW50ICtQ
Ry1ESUFHLU1FU1NBR0UtUFJJTUFSWSsgKGNoYXItY29kZSAjXE0pKQ0KKGRlZmNvbnN0YW50ICtQ
Ry1ESUFHLU1FU1NBR0UtREVUQUlMKyAoY2hhci1jb2RlICNcRCkpDQooZGVmY29uc3RhbnQgK1BH
LURJQUctTUVTU0FHRS1ISU5UKyAoY2hhci1jb2RlICNcSCkpDQooZGVmY29uc3RhbnQgK1BHLURJ
QUctU1RBVEVNRU5ULVBPU0lUSU9OKyAoY2hhci1jb2RlICNcUCkpDQooZGVmY29uc3RhbnQgK1BH
LURJQUctSU5URVJOQUwtUE9TSVRJT04rIChjaGFyLWNvZGUgI1xwKSkNCihkZWZjb25zdGFudCAr
UEctRElBRy1JTlRFUk5BTC1RVUVSWSsgKGNoYXItY29kZSAjXHEpKQ0KKGRlZmNvbnN0YW50ICtQ
Ry1ESUFHLUNPTlRFWFQrIChjaGFyLWNvZGUgI1xXKSkNCihkZWZjb25zdGFudCArUEctRElBRy1T
T1VSQ0UtRklMRSsgKGNoYXItY29kZSAjXEYpKQ0KKGRlZmNvbnN0YW50ICtQRy1ESUFHLVNPVVJD
RS1MSU5FKyAoY2hhci1jb2RlICNcTCkpDQooZGVmY29uc3RhbnQgK1BHLURJQUctU09VUkNFLUZV
TkNUSU9OKyAoY2hhci1jb2RlICNcUikpDQoNCjsgUFFyZXN1bHRFcnJvckZpZWxkIGNhbiByZXR1
cm4gZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBhYm91dCBhbiBlcnJvcg0KKGRlY2xhaW0gKGlubGlu
ZSBQUXJlc3VsdEVycm9yRmllbGQpKQ0KKHVmZmk6ZGVmLWZ1bmN0aW9uICgiUFFyZXN1bHRFcnJv
ckZpZWxkIiBQUXJlc3VsdEVycm9yRmllbGQpDQogICAgKChyZXMgcGdzcWwtcmVzdWx0KQ0KICAg
ICAoZmllbGQtY29kZSA6aW50KSkNCiAgOm1vZHVsZSAicG9zdGdyZXNxbCINCiAgOnJldHVybmlu
ZyAoKiBjaGFyKSkNCg0KKGRlY2xhaW0gKGlubGluZSBQUXJlc3VsdEVycm9yTWVzc2FnZSkpDQoo
dWZmaTpkZWYtZnVuY3Rpb24gKCJQUXJlc3VsdEVycm9yTWVzc2FnZSIgUFFyZXN1bHRFcnJvck1l
c3NhZ2UpDQogICgocmVzIHBnc3FsLXJlc3VsdCkpDQogIDptb2R1bGUgInBvc3RncmVzcWwiDQog
IDpyZXR1cm5pbmcgOmNzdHJpbmcpDQoNCihkZWNsYWltIChpbmxpbmUgUFFudHVwbGVzKSkNCih1
ZmZpOmRlZi1mdW5jdGlvbiAoIlBRbnR1cGxlcyIgUFFudHVwbGVzKSANCiAgKChyZXMgcGdzcWwt
cmVzdWx0KSkNCiAgOm1vZHVsZSAicG9zdGdyZXNxbCINCiAgOnJldHVybmluZyA6aW50KQ0KDQoo
ZGVjbGFpbSAoaW5saW5lIFBRbmZpZWxkcykpDQoodWZmaTpkZWYtZnVuY3Rpb24gKCJQUW5maWVs
ZHMiIFBRbmZpZWxkcykNCiAgKChyZXMgcGdzcWwtcmVzdWx0KSkNCiAgOm1vZHVsZSAicG9zdGdy
ZXNxbCINCiAgOnJldHVybmluZyA6aW50KQ0KDQooZGVjbGFpbSAoaW5saW5lIFBRZm5hbWUpKQ0K
KHVmZmk6ZGVmLWZ1bmN0aW9uICgiUFFmbmFtZSIgUFFmbmFtZSkNCiAgKChyZXMgcGdzcWwtcmVz
dWx0KQ0KICAgKGZpZWxkLW51bSA6aW50KSkNCiAgOm1vZHVsZSAicG9zdGdyZXNxbCINCiAgOnJl
dHVybmluZyA6Y3N0cmluZykNCg0KKGRlY2xhaW0gKGlubGluZSBQUWZudW1iZXIpKQ0KKHVmZmk6
ZGVmLWZ1bmN0aW9uICgiUFFmbnVtYmVyIiBQUWZudW1iZXIpDQogICgocmVzIHBnc3FsLXJlc3Vs
dCkNCiAgKGZpZWxkLW5hbWUgOmNzdHJpbmcpKQ0KICA6bW9kdWxlICJwb3N0Z3Jlc3FsIg0KICA6
cmV0dXJuaW5nIDppbnQpDQoNCihkZWNsYWltIChpbmxpbmUgUFFmdHlwZSkpDQoodWZmaTpkZWYt
ZnVuY3Rpb24gKCJQUWZ0eXBlIiBQUWZ0eXBlKQ0KICAoKHJlcyBwZ3NxbC1yZXN1bHQpDQogICAo
ZmllbGQtbnVtIDppbnQpKQ0KICA6bW9kdWxlICJwb3N0Z3Jlc3FsIg0KICA6cmV0dXJuaW5nIHBn
c3FsLW9pZCkNCg0KKGRlY2xhaW0gKGlubGluZSBQUWZzaXplKSkNCih1ZmZpOmRlZi1mdW5jdGlv
biAoIlBRZnNpemUiIFBRZnNpemUpDQogICgocmVzIHBnc3FsLXJlc3VsdCkNCiAgIChmaWVsZC1u
dW0gOmludCkpDQogIDptb2R1bGUgInBvc3RncmVzcWwiDQogIDpyZXR1cm5pbmcgOnNob3J0KQ0K
DQooZGVjbGFpbSAoaW5saW5lIFBRY21kU3RhdHVzKSkNCih1ZmZpOmRlZi1mdW5jdGlvbiAoIlBR
Y21kU3RhdHVzIiBQUWNtZFN0YXR1cykNCiAgKChyZXMgcGdzcWwtcmVzdWx0KSkNCiAgOm1vZHVs
ZSAicG9zdGdyZXNxbCINCiAgOnJldHVybmluZyA6Y3N0cmluZykNCg0KKGRlY2xhaW0gKGlubGlu
ZSBQUW9pZFN0YXR1cykpDQoodWZmaTpkZWYtZnVuY3Rpb24gKCJQUW9pZFN0YXR1cyIgUFFvaWRT
dGF0dXMpDQogICgocmVzIHBnc3FsLXJlc3VsdCkpDQogIDptb2R1bGUgInBvc3RncmVzcWwiDQog
IDpyZXR1cm5pbmcgOmNzdHJpbmcpDQoNCihkZWNsYWltIChpbmxpbmUgUFFjbWRUdXBsZXMpKQ0K
KHVmZmk6ZGVmLWZ1bmN0aW9uICgiUFFjbWRUdXBsZXMiIFBRY21kVHVwbGVzKQ0KICAoKHJlcyBw
Z3NxbC1yZXN1bHQpKQ0KICA6bW9kdWxlICJwb3N0Z3Jlc3FsIg0KICA6cmV0dXJuaW5nIDpjc3Ry
aW5nKQ0KDQooZGVjbGFpbSAoaW5saW5lIFBRZ2V0dmFsdWUpKQ0KKHVmZmk6ZGVmLWZ1bmN0aW9u
ICgiUFFnZXR2YWx1ZSIgUFFnZXR2YWx1ZSkNCiAgKChyZXMgcGdzcWwtcmVzdWx0KQ0KICAgKHR1
cC1udW0gOmludCkNCiAgIChmaWVsZC1udW0gOmludCkpDQogIDptb2R1bGUgInBvc3RncmVzcWwi
DQogIDpyZXR1cm5pbmcgKCogOnVuc2lnbmVkLWNoYXIpKQ0KDQooZGVjbGFpbSAoaW5saW5lIFBR
Z2V0bGVuZ3RoKSkNCih1ZmZpOmRlZi1mdW5jdGlvbiAoIlBRZ2V0bGVuZ3RoIiBQUWdldGxlbmd0
aCkNCiAgKChyZXMgcGdzcWwtcmVzdWx0KQ0KICAgKHR1cC1udW0gOmludCkNCiAgIChmaWVsZC1u
dW0gOmludCkpDQogIDptb2R1bGUgInBvc3RncmVzcWwiDQogIDpyZXR1cm5pbmcgOmludCkNCg0K
KGRlY2xhaW0gKGlubGluZSBQUWdldGlzbnVsbCkpDQoodWZmaTpkZWYtZnVuY3Rpb24gKCJQUWdl
dGlzbnVsbCIgUFFnZXRpc251bGwpDQogICgocmVzIHBnc3FsLXJlc3VsdCkNCiAgICh0dXAtbnVt
IDppbnQpDQogICAoZmllbGQtbnVtIDppbnQpKQ0KICA6bW9kdWxlICJwb3N0Z3Jlc3FsIg0KICA6
cmV0dXJuaW5nIDppbnQpDQoNCihkZWNsYWltIChpbmxpbmUgUFFjbGVhcikpDQoodWZmaTpkZWYt
ZnVuY3Rpb24gKCJQUWNsZWFyIiBQUWNsZWFyKQ0KICAoKHJlcyBwZ3NxbC1yZXN1bHQpKQ0KICA6
bW9kdWxlICJwb3N0Z3Jlc3FsIg0KICA6cmV0dXJuaW5nIDp2b2lkKQ0KDQooZGVjbGFpbSAoaW5s
aW5lIFBRaXNCdXN5KSkNCih1ZmZpOmRlZi1mdW5jdGlvbiAoIlBRaXNCdXN5IiBQUWlzQnVzeSkN
CiAgKChjb25uIHBnc3FsLWNvbm4pKQ0KICA6bW9kdWxlICJwb3N0Z3Jlc3FsIg0KICA6cmV0dXJu
aW5nIDppbnQpDQoNCg0KOzs7IExhcmdlIG9iamVjdHMgc3VwcG9ydCAoTUIpDQoNCihkZWZjb25z
dGFudCArSU5WX0FSQ0hJVkUrIDY1NTM2KSAgICAgICAgIDsgZmUtbG9iai5jDQooZGVmY29uc3Rh
bnQgK0lOVl9XUklURSsgICAxMzEwNzIpDQooZGVmY29uc3RhbnQgK0lOVl9SRUFEKyAgICAyNjIx
NDQpDQoNCihkZWNsYWltIChpbmxpbmUgbG8tY3JlYXQpKQ0KKHVmZmk6ZGVmLWZ1bmN0aW9uICgi
bG9fY3JlYXQiIGxvLWNyZWF0ZSkNCiAgKChjb25uIHBnc3FsLWNvbm4pDQogICAobW9kZSA6aW50
KSkNCiAgOm1vZHVsZSAicG9zdGdyZXNxbCINCiAgOnJldHVybmluZyBwZ3NxbC1vaWQpDQoNCihk
ZWNsYWltIChpbmxpbmUgbG8tb3BlbikpDQoodWZmaTpkZWYtZnVuY3Rpb24gKCJsb19vcGVuIiBs
by1vcGVuKQ0KICAoKGNvbm4gcGdzcWwtY29ubikNCiAgIChvaWQgcGdzcWwtb2lkKQ0KICAgKG1v
ZGUgOmludCkpDQogIDptb2R1bGUgInBvc3RncmVzcWwiDQogIDpyZXR1cm5pbmcgOmludCkNCg0K
KGRlY2xhaW0gKGlubGluZSBsby13cml0ZSkpDQoodWZmaTpkZWYtZnVuY3Rpb24gKCJsb193cml0
ZSIgbG8td3JpdGUpDQogICgoY29ubiBwZ3NxbC1jb25uKQ0KICAgKGZkIDppbnQpDQogICAoZGF0
YSA6Y3N0cmluZykNCiAgIChzaXplIDppbnQpKQ0KICA6bW9kdWxlICJwb3N0Z3Jlc3FsIg0KICA6
cmV0dXJuaW5nIDppbnQpDQoNCihkZWNsYWltIChpbmxpbmUgbG8tcmVhZCkpDQoodWZmaTpkZWYt
ZnVuY3Rpb24gKCJsb19yZWFkIiBsby1yZWFkKQ0KICAoKGNvbm4gcGdzcWwtY29ubikNCiAgIChm
ZCA6aW50KQ0KICAgKGRhdGEgKCogOnVuc2lnbmVkLWNoYXIpKQ0KICAgKHNpemUgOmludCkpDQog
IDptb2R1bGUgInBvc3RncmVzcWwiDQogIDpyZXR1cm5pbmcgOmludCkNCg0KKGRlY2xhaW0gKGlu
bGluZSBsby1sc2VlaykpDQoodWZmaTpkZWYtZnVuY3Rpb24gKCJsb19sc2VlayIgbG8tbHNlZWsp
DQogICgoY29ubiBwZ3NxbC1jb25uKQ0KICAgKGZkIDppbnQpDQogICAob2Zmc2V0IDppbnQpDQog
ICAod2hlbmNlIDppbnQpKQ0KICA6bW9kdWxlICJwb3N0Z3Jlc3FsIg0KICA6cmV0dXJuaW5nIDpp
bnQpDQoNCihkZWNsYWltIChpbmxpbmUgbG8tY2xvc2UpKQ0KKHVmZmk6ZGVmLWZ1bmN0aW9uICgi
bG9fY2xvc2UiIGxvLWNsb3NlKQ0KICAoKGNvbm4gcGdzcWwtY29ubikNCiAgIChmZCA6aW50KSkN
CiAgOm1vZHVsZSAicG9zdGdyZXNxbCINCiAgOnJldHVybmluZyA6aW50KQ0KDQooZGVjbGFpbSAo
aW5saW5lIGxvLXVubGluaykpDQoodWZmaTpkZWYtZnVuY3Rpb24gKCJsb191bmxpbmsiIGxvLXVu
bGluaykNCiAgKChjb25uIHBnc3FsLWNvbm4pDQogICAob2lkIHBnc3FsLW9pZCkpDQogIDptb2R1
bGUgInBvc3RncmVzcWwiDQogIDpyZXR1cm5pbmcgOmludCkNCk==


--=-tUA1ynThxubAIDVM+c9W
Content-Disposition: attachment; filename=postgresql-package.lisp
Content-Type: text/plain; name=postgresql-package.lisp; charset=UTF-8
Content-Transfer-Encoding: base64

Ozs7OyAtKi0gTW9kZTogTElTUDsgU3ludGF4OiBBTlNJLUNvbW1vbi1MaXNwOyBCYXNlOiAxMCAt
Ki0NCjs7OzsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKg0KOzs7OyBGSUxFIElERU5USUZJQ0FUSU9ODQo7Ozs7
DQo7Ozs7IE5hbWU6ICAgICAgICAgIHBvc3RncmVzcWwtcGFja2FnZS5jbA0KOzs7OyBQdXJwb3Nl
OiAgICAgICBQYWNrYWdlIGRlZmluaXRpb24gZm9yIGxvdy1sZXZlbCBQb3N0Z3JlU1FMIGludGVy
ZmFjZQ0KOzs7OyBQcm9ncmFtbWVyOiAgICBLZXZpbiBNLiBSb3NlbmJlcmcNCjs7OzsgRGF0ZSBT
dGFydGVkOiAgRmViIDIwMDINCjs7OzsNCjs7OzsgJElkOiBwb3N0Z3Jlc3FsLXBhY2thZ2UubGlz
cCA3MDYxIDIwMDMtMDktMDcgMDY6MzQ6NDVaIGtldmluICQNCjs7OzsNCjs7OzsgVGhpcyBmaWxl
LCBwYXJ0IG9mIENMU1FMLCBpcyBDb3B5cmlnaHQgKGMpIDIwMDIgYnkgS2V2aW4gTS4gUm9zZW5i
ZXJnDQo7Ozs7DQo7Ozs7IENMU1FMIHVzZXJzIGFyZSBncmFudGVkIHRoZSByaWdodHMgdG8gZGlz
dHJpYnV0ZSBhbmQgdXNlIHRoaXMgc29mdHdhcmUNCjs7OzsgYXMgZ292ZXJuZWQgYnkgdGhlIHRl
cm1zIG9mIHRoZSBMaXNwIExlc3NlciBHTlUgUHVibGljIExpY2Vuc2UNCjs7OzsgKGh0dHA6Ly9v
cGVuc291cmNlLmZyYW56LmNvbS9wcmVhbWJsZS5odG1sKSwgYWxzbyBrbm93biBhcyB0aGUgTExH
UEwuDQo7Ozs7ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioNCg0KKGluLXBhY2thZ2UgIzpjbC11c2VyKQ0KDQoo
ZGVmcGFja2FnZSAjOnBvc3RncmVzcWwNCiAgICAoOm5pY2tuYW1lcyAjOnBnc3FsKQ0KICAgICg6
dXNlICM6Y2wgIzpjbHNxbC11ZmZpKQ0KICAgICg6ZXhwb3J0DQogICAgICM6cGdzcWwtb2lkDQog
ICAgICM6cGdzcWwtY29ubi1zdGF0dXMtdHlwZQ0KICAgICAjOnBnc3FsLWNvbm4tc3RhdHVzLXR5
cGUjY29ubmVjdGlvbi1vaw0KICAgICAjOnBnc3FsLWNvbm4tc3RhdHVzLXR5cGUjY29ubmVjdGlv
bi1iYWQNCiAgICAgIzpwZ3NxbC1leGVjLXN0YXR1cy10eXBlDQogICAgICM6cGdzcWwtZXhlYy1z
dGF0dXMtdHlwZSNlbXB0eS1xdWVyeQ0KICAgICAjOnBnc3FsLWV4ZWMtc3RhdHVzLXR5cGUjY29t
bWFuZC1vaw0KICAgICAjOnBnc3FsLWV4ZWMtc3RhdHVzLXR5cGUjdHVwbGVzLW9rDQogICAgICM6
cGdzcWwtZXhlYy1zdGF0dXMtdHlwZSNjb3B5LW91dA0KICAgICAjOnBnc3FsLWV4ZWMtc3RhdHVz
LXR5cGUjY29weS1pbg0KICAgICAjOnBnc3FsLWV4ZWMtc3RhdHVzLXR5cGUjYmFkLXJlc3BvbnNl
DQogICAgICM6cGdzcWwtZXhlYy1zdGF0dXMtdHlwZSNub25mYXRhbC1lcnJvcg0KICAgICAjOnBn
c3FsLWV4ZWMtc3RhdHVzLXR5cGUjZmF0YWwtZXJyb3INCiAgICAgIzpwZ3NxbC1jb25uDQogICAg
ICM6cGdzcWwtcmVzdWx0DQoNCiAgICAgIzpwZ3NxbC1mdHlwZSNieXRlYQ0KICAgICAjOnBnc3Fs
LWZ0eXBlI2ludDINCiAgICAgIzpwZ3NxbC1mdHlwZSNpbnQ0DQogICAgICM6cGdzcWwtZnR5cGUj
aW50OA0KICAgICAjOnBnc3FsLWZ0eXBlI2Zsb2F0NA0KICAgICAjOnBnc3FsLWZ0eXBlI2Zsb2F0
OA0KDQogICAgIDs7IFVzZWQgYnkgUFFyZXN1bHRFcnJvckZpZWxkIHRvIGdldCB0aGUgc3FsIGVy
cm9yIGNvZGUNCiAgICAgIzorUEctRElBRy1TUUxTVEFURSsNCg0KICAgICANCiAgICAgOzsgRnVu
Y3Rpb25zDQogICAgICM6UFFzZXRkYkxvZ2luDQogICAgICM6UFFsb2dpbg0KICAgICAjOlBRZmlu
aXNoDQogICAgICM6UFFzdGF0dXMNCiAgICAgIzpQUWVycm9yTWVzc2FnZQ0KICAgICAjOlBRZXhl
Yw0KICAgICAjOlBRcmVzdWx0U3RhdHVzDQogICAgICM6UFFyZXN1bHRFcnJvckZpZWxkIDsgdXNl
ZCB0byBncmFiIHRoZSBTUUxTVEFURSBjb2RlIGZyb20gYW4gZXJyb3INCiAgICAgIzpQUXJlc3Vs
dEVycm9yTWVzc2FnZQ0KICAgICAjOlBRbnR1cGxlcw0KICAgICAjOlBRbmZpZWxkcw0KICAgICAj
OlBRZm5hbWUNCiAgICAgIzpQUWZudW1iZXINCiAgICAgIzpQUWZ0eXBlDQogICAgICM6UFFmc2l6
ZQ0KICAgICAjOlBRY21kU3RhdHVzDQogICAgICM6UFFvaWRTdGF0dXMNCiAgICAgIzpQUWNtZFR1
cGxlcw0KICAgICAjOlBRZ2V0dmFsdWUNCiAgICAgIzpQUWdldGxlbmd0aA0KICAgICAjOlBRZ2V0
aXNudWxsDQogICAgICM6UFFjbGVhcg0KICAgICAjOlBRaXNCdXN5DQogICAgIA0KICAgICA7O0xh
cmdlIE9iamVjdHMgKE1hcmMgQikNCiAgICAgIzpsby1jcmVhdGUNCiAgICAgIzpsby1vcGVuDQog
ICAgICM6bG8td3JpdGUNCiAgICAgIzpsby1yZWFkDQogICAgICM6bG8tbHNlZWsNCiAgICAgIzps
by1jbG9zZQ0KICAgICAjOmxvLXVubGluaw0KICAgICApDQogICAgKDpkb2N1bWVudGF0aW9uICJU
aGlzIGlzIHRoZSBsb3ctbGV2ZWwgaW50ZXJmYWNlIHRvIFBvc3RncmVTUUwuIikpDQoNCg0K


--=-tUA1ynThxubAIDVM+c9W
Content-Disposition: attachment; filename=postgresql-sql.lisp
Content-Type: text/plain; name=postgresql-sql.lisp; charset=UTF-8
Content-Transfer-Encoding: base64

Ozs7OyAtKi0gTW9kZTogTElTUDsgU3ludGF4OiBBTlNJLUNvbW1vbi1MaXNwOyBCYXNlOiAxMCAt
Ki0NCjs7OzsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKg0KOzs7OyBGSUxFIElERU5USUZJQ0FUSU9ODQo7Ozs7
DQo7Ozs7IE5hbWU6ICAgICAgICAgIHBvc3RncmVzcWwtc3FsLmxpc3ANCjs7OzsgUHVycG9zZTog
ICAgICAgSGlnaC1sZXZlbCBQb3N0Z3JlU1FMIGludGVyZmFjZSB1c2luZyBVRkZJDQo7Ozs7IERh
dGUgU3RhcnRlZDogIEZlYiAyMDAyDQo7Ozs7DQo7Ozs7ICRJZDogcG9zdGdyZXNxbC1zcWwubGlz
cCAxMDk2OSAyMDA2LTA3LTA1IDAyOjE2OjQ5WiBrZXZpbiAkDQo7Ozs7DQo7Ozs7IENMU1FMIHVz
ZXJzIGFyZSBncmFudGVkIHRoZSByaWdodHMgdG8gZGlzdHJpYnV0ZSBhbmQgdXNlIHRoaXMgc29m
dHdhcmUNCjs7OzsgYXMgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBMaXNwIExlc3NlciBH
TlUgUHVibGljIExpY2Vuc2UNCjs7OzsgKGh0dHA6Ly9vcGVuc291cmNlLmZyYW56LmNvbS9wcmVh
bWJsZS5odG1sKSwgYWxzbyBrbm93biBhcyB0aGUgTExHUEwuDQo7Ozs7ICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioNCg0KKGluLXBhY2thZ2UgIzpjbC11c2VyKQ0KDQooZGVmcGFja2FnZSAjOmNsc3FsLXBvc3Rn
cmVzcWwNCiAgICAoOnVzZSAjOmNvbW1vbi1saXNwICM6Y2xzcWwtc3lzICM6cG9zdGdyZXNxbCAj
OmNsc3FsLXVmZmkpDQogICAgKDpleHBvcnQgIzpwb3N0Z3Jlc3FsLWRhdGFiYXNlKQ0KICAgICg6
ZG9jdW1lbnRhdGlvbiAiVGhpcyBpcyB0aGUgQ0xTUUwgaW50ZXJmYWNlIHRvIFBvc3RncmVTUUwu
IikpDQoNCihpbi1wYWNrYWdlICM6Y2xzcWwtcG9zdGdyZXNxbCkNCg0KOzs7IEZpZWxkIGNvbnZl
cnNpb24gZnVuY3Rpb25zDQoNCihkZWZ1biBtYWtlLXR5cGUtbGlzdC1mb3ItYXV0byAobnVtLWZp
ZWxkcyByZXMtcHRyKQ0KICAobGV0ICgobmV3LXR5cGVzICcoKSkpDQogICAgKGRvdGltZXMgKGkg
bnVtLWZpZWxkcykNCiAgICAgIChkZWNsYXJlIChmaXhudW0gaSkpDQogICAgICAobGV0KiAoKHR5
cGUgKFBRZnR5cGUgcmVzLXB0ciBpKSkpDQoJKHB1c2gNCgkgKGNhc2UgdHlwZQ0KCSAgICgoIy5w
Z3NxbC1mdHlwZSNieXRlYQ0KCSAgICAgIy5wZ3NxbC1mdHlwZSNpbnQyDQoJICAgICAjLnBnc3Fs
LWZ0eXBlI2ludDQpDQoJICAgIDppbnQzMikNCgkgICAoIy5wZ3NxbC1mdHlwZSNpbnQ4DQoJICAg
IDppbnQ2NCkNCgkgICAoKCMucGdzcWwtZnR5cGUjZmxvYXQ0DQoJICAgICAjLnBnc3FsLWZ0eXBl
I2Zsb2F0OCkNCgkgICAgOmRvdWJsZSkNCgkgICAob3RoZXJ3aXNlDQoJICAgIHQpKQ0KCSBuZXct
dHlwZXMpKSkNCiAgICAgIChucmV2ZXJzZSBuZXctdHlwZXMpKSkNCg0KKGRlZnVuIGNhbm9uaWNh
bGl6ZS10eXBlcyAodHlwZXMgbnVtLWZpZWxkcyByZXMtcHRyKQ0KICAoaWYgKG51bGwgdHlwZXMp
DQogICAgICBuaWwNCiAgICAgIChsZXQgKChhdXRvLWxpc3QgKG1ha2UtdHlwZS1saXN0LWZvci1h
dXRvIG51bS1maWVsZHMgcmVzLXB0cikpKQ0KCShjb25kDQoJICAoKGxpc3RwIHR5cGVzKQ0KCSAg
IChjYW5vbmljYWxpemUtdHlwZS1saXN0IHR5cGVzIGF1dG8tbGlzdCkpDQoJICAoKGVxIHR5cGVz
IDphdXRvKQ0KCSAgIGF1dG8tbGlzdCkNCgkgICh0DQoJICAgbmlsKSkpKSkNCg0KKGRlZnVuIHRp
ZHktZXJyb3ItbWVzc2FnZSAobWVzc2FnZSkNCiAgKHVubGVzcyAoc3RyaW5ncCBtZXNzYWdlKQ0K
ICAgIChzZXRxIG1lc3NhZ2UgKHVmZmk6Y29udmVydC1mcm9tLWZvcmVpZ24tc3RyaW5nIG1lc3Nh
Z2UpKSkNCiAgKGxldCAoKG1lc3NhZ2UgKHN0cmluZy1yaWdodC10cmltICcoI1xSZXR1cm4gI1xO
ZXdsaW5lKSBtZXNzYWdlKSkpDQogICAgKGNvbmQNCiAgICAgICgoPCAobGVuZ3RoIG1lc3NhZ2Up
IChsZW5ndGggIkVSUk9SOiIpKQ0KICAgICAgIG1lc3NhZ2UpDQogICAgICAoKHN0cmluZz0gbWVz
c2FnZSAiRVJST1I6IiA6ZW5kMSA2KQ0KICAgICAgIChzdHJpbmctbGVmdC10cmltICcoI1xTcGFj
ZSkgKHN1YnNlcSBtZXNzYWdlIDYpKSkNCiAgICAgICh0DQogICAgICAgbWVzc2FnZSkpKSkNCg0K
KGRlZm1ldGhvZCBkYXRhYmFzZS1pbml0aWFsaXplLWRhdGFiYXNlLXR5cGUgKChkYXRhYmFzZS10
eXBlDQoJCQkJCSAgICAgICAoZXFsIDpwb3N0Z3Jlc3FsKSkpDQogIHQpDQoNCih1ZmZpOmRlZi10
eXBlIHBnc3FsLWNvbm4tZGVmIHBnc3FsLWNvbm4pDQoodWZmaTpkZWYtdHlwZSBwZ3NxbC1yZXN1
bHQtZGVmIHBnc3FsLXJlc3VsdCkNCg0KDQooZGVmY2xhc3MgcG9zdGdyZXNxbC1kYXRhYmFzZSAo
Z2VuZXJpYy1wb3N0Z3Jlc3FsLWRhdGFiYXNlKQ0KICAoKGNvbm4tcHRyIDphY2Nlc3NvciBkYXRh
YmFzZS1jb25uLXB0ciA6aW5pdGFyZyA6Y29ubi1wdHINCgkgICAgIDp0eXBlIHBnc3FsLWNvbm4t
ZGVmKQ0KICAgKGxvY2sNCiAgICA6YWNjZXNzb3IgZGF0YWJhc2UtbG9jaw0KICAgIDppbml0Zm9y
bSAobWFrZS1wcm9jZXNzLWxvY2sgImNvbm4iKSkpKQ0KDQooZGVmbWV0aG9kIGRhdGFiYXNlLXR5
cGUgKChkYXRhYmFzZSBwb3N0Z3Jlc3FsLWRhdGFiYXNlKSkNCiAgOnBvc3RncmVzcWwpDQoNCihk
ZWZtZXRob2QgZGF0YWJhc2UtbmFtZS1mcm9tLXNwZWMgKGNvbm5lY3Rpb24tc3BlYyAoZGF0YWJh
c2UtdHlwZQ0KCQkJCQkJICAgICAoZXFsIDpwb3N0Z3Jlc3FsKSkpDQogIChjaGVjay1jb25uZWN0
aW9uLXNwZWMgY29ubmVjdGlvbi1zcGVjIGRhdGFiYXNlLXR5cGUNCgkJCSAoaG9zdCBkYiB1c2Vy
IHBhc3N3b3JkICZvcHRpb25hbCBwb3J0IG9wdGlvbnMgdHR5KSkNCiAgKGRlc3RydWN0dXJpbmct
YmluZCAoaG9zdCBkYiB1c2VyIHBhc3N3b3JkICZvcHRpb25hbCBwb3J0IG9wdGlvbnMgdHR5KQ0K
ICAgICAgY29ubmVjdGlvbi1zcGVjDQogICAgKGRlY2xhcmUgKGlnbm9yZSBwYXNzd29yZCBvcHRp
b25zIHR0eSkpDQogICAgKGNvbmNhdGVuYXRlICdzdHJpbmcgDQogICAgICAoZXR5cGVjYXNlIGhv
c3QNCgkobnVsbCAibG9jYWxob3N0IikNCgkocGF0aG5hbWUgKG5hbWVzdHJpbmcgaG9zdCkpDQoJ
KHN0cmluZyBob3N0KSkNCiAgICAgICh3aGVuIHBvcnQgDQoJKGNvbmNhdGVuYXRlICdzdHJpbmcN
CgkJICAgICAiOiINCgkJICAgICAoZXR5cGVjYXNlIHBvcnQNCgkJICAgICAgIChpbnRlZ2VyICh3
cml0ZS10by1zdHJpbmcgcG9ydCkpDQoJCSAgICAgICAoc3RyaW5nIHBvcnQpKSkpDQogICAgICAi
LyIgZGIgIi8iIHVzZXIpKSkNCg0KDQooZGVmbWV0aG9kIGRhdGFiYXNlLWNvbm5lY3QgKGNvbm5l
Y3Rpb24tc3BlYyAoZGF0YWJhc2UtdHlwZSAoZXFsIDpwb3N0Z3Jlc3FsKSkpDQogIChjaGVjay1j
b25uZWN0aW9uLXNwZWMgY29ubmVjdGlvbi1zcGVjIGRhdGFiYXNlLXR5cGUNCgkJCSAoaG9zdCBk
YiB1c2VyIHBhc3N3b3JkICZvcHRpb25hbCBwb3J0IG9wdGlvbnMgdHR5KSkNCiAgKGRlc3RydWN0
dXJpbmctYmluZCAoaG9zdCBkYiB1c2VyIHBhc3N3b3JkICZvcHRpb25hbCBwb3J0IG9wdGlvbnMg
dHR5KQ0KICAgICAgY29ubmVjdGlvbi1zcGVjDQogICAgKHVmZmk6d2l0aC1jc3RyaW5ncyAoKGhv
c3QtbmF0aXZlIGhvc3QpDQoJCQkgKHVzZXItbmF0aXZlIHVzZXIpDQoJCQkgKHBhc3N3b3JkLW5h
dGl2ZSBwYXNzd29yZCkNCgkJCSAoZGItbmF0aXZlIGRiKQ0KCQkJIChwb3J0LW5hdGl2ZSBwb3J0
KQ0KCQkJIChvcHRpb25zLW5hdGl2ZSBvcHRpb25zKQ0KCQkJICh0dHktbmF0aXZlIHR0eSkpDQog
ICAgICAobGV0ICgoY29ubmVjdGlvbiAoUFFzZXRkYkxvZ2luIGhvc3QtbmF0aXZlIHBvcnQtbmF0
aXZlDQoJCQkJICAgICAgb3B0aW9ucy1uYXRpdmUgdHR5LW5hdGl2ZQ0KCQkJCSAgICAgIGRiLW5h
dGl2ZSB1c2VyLW5hdGl2ZQ0KCQkJCSAgICAgIHBhc3N3b3JkLW5hdGl2ZSkpKQ0KCShkZWNsYXJl
ICh0eXBlIHBnc3FsLWNvbm4tZGVmIGNvbm5lY3Rpb24pKQ0KCSh3aGVuIChub3QgKGVxIChQUXN0
YXR1cyBjb25uZWN0aW9uKSANCgkJICAgICAgIHBnc3FsLWNvbm4tc3RhdHVzLXR5cGUjY29ubmVj
dGlvbi1vaykpDQogICAgICAgICAgKGxldCAoKHBxc3RhdHVzIChQUXN0YXR1cyBjb25uZWN0aW9u
KSkNCiAgICAgICAgICAgICAgICAocHFtZXNzYWdlICh0aWR5LWVycm9yLW1lc3NhZ2UgKFBRZXJy
b3JNZXNzYWdlIGNvbm5lY3Rpb24pKSkpDQogICAgICAgICAgICAoUFFmaW5pc2ggY29ubmVjdGlv
bikNCiAgICAgICAgICAgIChlcnJvciAnc3FsLWNvbm5lY3Rpb24tZXJyb3INCiAgICAgICAgICAg
ICAgICAgICA6ZGF0YWJhc2UtdHlwZSBkYXRhYmFzZS10eXBlDQogICAgICAgICAgICAgICAgICAg
OmNvbm5lY3Rpb24tc3BlYyBjb25uZWN0aW9uLXNwZWMNCiAgICAgICAgICAgICAgICAgICA6ZXJy
b3ItaWQgcHFzdGF0dXMNCiAgICAgICAgICAgICAgICAgICA6bWVzc2FnZSAgcHFtZXNzYWdlKSkp
DQoJKG1ha2UtaW5zdGFuY2UgJ3Bvc3RncmVzcWwtZGF0YWJhc2UNCgkJICAgICAgIDpuYW1lIChk
YXRhYmFzZS1uYW1lLWZyb20tc3BlYyBjb25uZWN0aW9uLXNwZWMNCgkJCQkJCSAgICAgIGRhdGFi
YXNlLXR5cGUpDQoJCSAgICAgICA6ZGF0YWJhc2UtdHlwZSA6cG9zdGdyZXNxbA0KCQkgICAgICAg
OmNvbm5lY3Rpb24tc3BlYyBjb25uZWN0aW9uLXNwZWMNCgkJICAgICAgIDpjb25uLXB0ciBjb25u
ZWN0aW9uKSkpKSkNCg0KDQooZGVmbWV0aG9kIGRhdGFiYXNlLWRpc2Nvbm5lY3QgKChkYXRhYmFz
ZSBwb3N0Z3Jlc3FsLWRhdGFiYXNlKSkNCiAgKFBRZmluaXNoIChkYXRhYmFzZS1jb25uLXB0ciBk
YXRhYmFzZSkpDQogIChzZXRmIChkYXRhYmFzZS1jb25uLXB0ciBkYXRhYmFzZSkgbmlsKQ0KICB0
KQ0KDQooZGVmbWV0aG9kIGRhdGFiYXNlLXF1ZXJ5IChxdWVyeS1leHByZXNzaW9uIChkYXRhYmFz
ZSBwb3N0Z3Jlc3FsLWRhdGFiYXNlKSByZXN1bHQtdHlwZXMgZmllbGQtbmFtZXMpDQogIChsZXQg
KChjb25uLXB0ciAoZGF0YWJhc2UtY29ubi1wdHIgZGF0YWJhc2UpKSkNCiAgICAoZGVjbGFyZSAo
dHlwZSBwZ3NxbC1jb25uLWRlZiBjb25uLXB0cikpDQogICAgKHVmZmk6d2l0aC1jc3RyaW5nIChx
dWVyeS1uYXRpdmUgcXVlcnktZXhwcmVzc2lvbikNCiAgICAgIChsZXQgKChyZXN1bHQgKFBRZXhl
YyBjb25uLXB0ciBxdWVyeS1uYXRpdmUpKSkNCiAgICAgICAgKHdoZW4gKHVmZmk6bnVsbC1wb2lu
dGVyLXAgcmVzdWx0KQ0KICAgICAgICAgIChlcnJvciAnc3FsLWRhdGFiYXNlLWRhdGEtZXJyb3IN
CiAgICAgICAgICAgICAgICAgOmRhdGFiYXNlIGRhdGFiYXNlDQogICAgICAgICAgICAgICAgIDpl
eHByZXNzaW9uIHF1ZXJ5LWV4cHJlc3Npb24NCiAgICAgICAgICAgICAgICAgOm1lc3NhZ2UgKHRp
ZHktZXJyb3ItbWVzc2FnZSAoUFFlcnJvck1lc3NhZ2UgY29ubi1wdHIpKSkpDQogICAgICAgICh1
bndpbmQtcHJvdGVjdA0KICAgICAgICAgICAgKGNhc2UgKFBRcmVzdWx0U3RhdHVzIHJlc3VsdCkN
CgkgICAgICA7OyBVc2VyIGdhdmUgYSBjb21tYW5kIHJhdGhlciB0aGFuIGEgcXVlcnkgDQogICAg
ICAgICAgICAgICgjLnBnc3FsLWV4ZWMtc3RhdHVzLXR5cGUjY29tbWFuZC1vaw0KICAgICAgICAg
ICAgICAgbmlsKQ0KICAgICAgICAgICAgICAoIy5wZ3NxbC1leGVjLXN0YXR1cy10eXBlI2VtcHR5
LXF1ZXJ5DQogICAgICAgICAgICAgICBuaWwpDQogICAgICAgICAgICAgICgjLnBnc3FsLWV4ZWMt
c3RhdHVzLXR5cGUjdHVwbGVzLW9rDQoJICAgICAgIChsZXQgKChudW0tZmllbGRzIChQUW5maWVs
ZHMgcmVzdWx0KSkpDQoJCSAod2hlbiByZXN1bHQtdHlwZXMNCgkJICAgKHNldHEgcmVzdWx0LXR5
cGVzDQoJCSAgICAgKGNhbm9uaWNhbGl6ZS10eXBlcyByZXN1bHQtdHlwZXMgbnVtLWZpZWxkcw0K
CQkJCQkgcmVzdWx0KSkpDQoJCSAobGV0ICgocmVzIChsb29wIGZvciB0dXBsZS1pbmRleCBmcm9t
IDAgYmVsb3cgKFBRbnR1cGxlcyByZXN1bHQpDQoJCQkJY29sbGVjdA0KCQkJCSAgKGxvb3AgZm9y
IGkgZnJvbSAwIGJlbG93IG51bS1maWVsZHMNCgkJCQkgICAgICBjb2xsZWN0DQoJCQkJCShpZiAo
emVyb3AgKFBRZ2V0aXNudWxsIHJlc3VsdCB0dXBsZS1pbmRleCBpKSkNCgkJCQkJICAgIChjb252
ZXJ0LXJhdy1maWVsZA0KCQkJCQkgICAgIChQUWdldHZhbHVlIHJlc3VsdCB0dXBsZS1pbmRleCBp
KQ0KCQkJCQkgICAgIHJlc3VsdC10eXBlcyBpKQ0KCQkJCQkgIG5pbCkpKSkpDQoJCSAgIChpZiBm
aWVsZC1uYW1lcw0KCQkgICAgICAgKHZhbHVlcyByZXMgKHJlc3VsdC1maWVsZC1uYW1lcyBudW0t
ZmllbGRzIHJlc3VsdCkpDQoJCSAgICAgcmVzKSkpKQ0KICAgICAgICAgICAgICAodA0KICAgICAg
ICAgICAgICAgKGVycm9yICdzcWwtZGF0YWJhc2UtZGF0YS1lcnJvcg0KICAgICAgICAgICAgICAg
ICAgICAgIDpkYXRhYmFzZSBkYXRhYmFzZQ0KICAgICAgICAgICAgICAgICAgICAgIDpleHByZXNz
aW9uIHF1ZXJ5LWV4cHJlc3Npb24NCiAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItaWQgKFBR
cmVzdWx0U3RhdHVzIHJlc3VsdCkNCiAgICAgICAgICAgICAgICAgICAgICA6bWVzc2FnZSAodGlk
eS1lcnJvci1tZXNzYWdlDQoJCQkJKFBRcmVzdWx0RXJyb3JNZXNzYWdlIHJlc3VsdCkpKSkpDQog
ICAgICAgICAgKFBRY2xlYXIgcmVzdWx0KSkpKSkpDQoNCihkZWZ1biByZXN1bHQtZmllbGQtbmFt
ZXMgKG51bS1maWVsZHMgcmVzdWx0KQ0KICAiUmV0dXJuIGxpc3Qgb2YgcmVzdWx0IGZpZWxkIG5h
bWVzLiINCiAgKGxldCAoKG5hbWVzICcoKSkpDQogICAgKGRvdGltZXMgKGkgbnVtLWZpZWxkcyAo
bnJldmVyc2UgbmFtZXMpKQ0KICAgICAgKGRlY2xhcmUgKGZpeG51bSBpKSkNCiAgICAgIChwdXNo
ICh1ZmZpOmNvbnZlcnQtZnJvbS1jc3RyaW5nIChQUWZuYW1lIHJlc3VsdCBpKSkgbmFtZXMpKSkp
DQoNCihkZWZtZXRob2QgZGF0YWJhc2UtZXhlY3V0ZS1jb21tYW5kIChzcWwtZXhwcmVzc2lvbg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhYmFzZSBwb3N0Z3Jlc3Fs
LWRhdGFiYXNlKSkNCiAgKGxldCAoKGNvbm4tcHRyIChkYXRhYmFzZS1jb25uLXB0ciBkYXRhYmFz
ZSkpKQ0KICAgIChkZWNsYXJlICh0eXBlIHBnc3FsLWNvbm4tZGVmIGNvbm4tcHRyKSkNCiAgICAo
dWZmaTp3aXRoLWNzdHJpbmcgKHNxbC1uYXRpdmUgc3FsLWV4cHJlc3Npb24pDQogICAgICAobGV0
ICgocmVzdWx0IChQUWV4ZWMgY29ubi1wdHIgc3FsLW5hdGl2ZSkpKQ0KICAgICAgICAod2hlbiAo
dWZmaTpudWxsLXBvaW50ZXItcCByZXN1bHQpDQogICAgICAgICAgKGVycm9yICdzcWwtZGF0YWJh
c2UtZGF0YS1lcnJvcg0KICAgICAgICAgICAgICAgICA6ZGF0YWJhc2UgZGF0YWJhc2UNCiAgICAg
ICAgICAgICAgICAgOmV4cHJlc3Npb24gc3FsLWV4cHJlc3Npb24NCiAgICAgICAgICAgICAgICAg
Om1lc3NhZ2UgKHRpZHktZXJyb3ItbWVzc2FnZSAoUFFlcnJvck1lc3NhZ2UgY29ubi1wdHIpKSkp
DQogICAgICAgICh1bndpbmQtcHJvdGVjdA0KICAgICAgICAgICAgKGNhc2UgKFBRcmVzdWx0U3Rh
dHVzIHJlc3VsdCkNCiAgICAgICAgICAgICAgKCMucGdzcWwtZXhlYy1zdGF0dXMtdHlwZSNjb21t
YW5kLW9rDQogICAgICAgICAgICAgICB0KQ0KICAgICAgICAgICAgICAoKCMucGdzcWwtZXhlYy1z
dGF0dXMtdHlwZSNlbXB0eS1xdWVyeQ0KICAgICAgICAgICAgICAgICMucGdzcWwtZXhlYy1zdGF0
dXMtdHlwZSN0dXBsZXMtb2spDQogICAgICAgICAgICAgICAod2FybiAiU3RyYW5nZSByZXN1bHQu
Li4iKQ0KICAgICAgICAgICAgICAgdCkNCiAgICAgICAgICAgICAgKHQNCiAgICAgICAgICAgICAg
IChlcnJvciAnc3FsLWRhdGFiYXNlLWRhdGEtZXJyb3INCiAgICAgICAgICAgICAgICAgICAgICA6
ZGF0YWJhc2UgZGF0YWJhc2UNCiAgICAgICAgICAgICAgICAgICAgICA6ZXhwcmVzc2lvbiBzcWwt
ZXhwcmVzc2lvbg0KICAgICAgICAgICAgICAgICAgICAgIDplcnJvci1pZCAodWZmaTpjb252ZXJ0
LWZyb20tZm9yZWlnbi1zdHJpbmcgKFBRcmVzdWx0RXJyb3JGaWVsZCByZXN1bHQgK1BHLURJQUct
U1FMU1RBVEUrKSkNCiAgICAgICAgICAgICAgICAgICAgICA6bWVzc2FnZSAodGlkeS1lcnJvci1t
ZXNzYWdlDQoJCQkJKFBRcmVzdWx0RXJyb3JNZXNzYWdlIHJlc3VsdCkpKSkpDQogICAgICAgICAg
KFBRY2xlYXIgcmVzdWx0KSkpKSkpDQoNCihkZWZzdHJ1Y3QgcG9zdGdyZXNxbC1yZXN1bHQtc2V0
DQogIChyZXMtcHRyICh1ZmZpOm1ha2UtbnVsbC1wb2ludGVyICdwZ3NxbC1yZXN1bHQpIA0KCSAg
IDp0eXBlIHBnc3FsLXJlc3VsdC1kZWYpDQogICh0eXBlcyBuaWwpIA0KICAobnVtLXR1cGxlcyAw
IDp0eXBlIGludGVnZXIpDQogIChudW0tZmllbGRzIDAgOnR5cGUgaW50ZWdlcikNCiAgKHR1cGxl
LWluZGV4IDAgOnR5cGUgaW50ZWdlcikpDQoNCihkZWZtZXRob2QgZGF0YWJhc2UtcXVlcnktcmVz
dWx0LXNldCAoKHF1ZXJ5LWV4cHJlc3Npb24gc3RyaW5nKQ0KCQkJCSAgICAgIChkYXRhYmFzZSBw
b3N0Z3Jlc3FsLWRhdGFiYXNlKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmtleSBmdWxsLXNldCByZXN1bHQtdHlwZXMpDQogIChsZXQgKChjb25uLXB0ciAoZGF0YWJh
c2UtY29ubi1wdHIgZGF0YWJhc2UpKSkNCiAgICAoZGVjbGFyZSAodHlwZSBwZ3NxbC1jb25uLWRl
ZiBjb25uLXB0cikpDQogICAgKHVmZmk6d2l0aC1jc3RyaW5nIChxdWVyeS1uYXRpdmUgcXVlcnkt
ZXhwcmVzc2lvbikNCiAgICAgIChsZXQgKChyZXN1bHQgKFBRZXhlYyBjb25uLXB0ciBxdWVyeS1u
YXRpdmUpKSkNCiAgICAgICAgKHdoZW4gKHVmZmk6bnVsbC1wb2ludGVyLXAgcmVzdWx0KQ0KICAg
ICAgICAgIChlcnJvciAnc3FsLWRhdGFiYXNlLWRhdGEtZXJyb3INCiAgICAgICAgICAgICAgICAg
OmRhdGFiYXNlIGRhdGFiYXNlDQogICAgICAgICAgICAgICAgIDpleHByZXNzaW9uIHF1ZXJ5LWV4
cHJlc3Npb24NCiAgICAgICAgICAgICAgICAgOm1lc3NhZ2UgKHRpZHktZXJyb3ItbWVzc2FnZSAo
UFFlcnJvck1lc3NhZ2UgY29ubi1wdHIpKSkpDQogICAgICAgIChjYXNlIChQUXJlc3VsdFN0YXR1
cyByZXN1bHQpDQogICAgICAgICAgKCgjLnBnc3FsLWV4ZWMtc3RhdHVzLXR5cGUjZW1wdHktcXVl
cnkNCiAgICAgICAgICAgICMucGdzcWwtZXhlYy1zdGF0dXMtdHlwZSN0dXBsZXMtb2spDQoJICAg
KGxldCAoKHJlc3VsdC1zZXQgKG1ha2UtcG9zdGdyZXNxbC1yZXN1bHQtc2V0DQogICAgICAgICAg
ICAgICAgICAgICAgICA6cmVzLXB0ciByZXN1bHQNCiAgICAgICAgICAgICAgICAgICAgICAgIDpu
dW0tZmllbGRzIChQUW5maWVsZHMgcmVzdWx0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgOm51
bS10dXBsZXMgKFBRbnR1cGxlcyByZXN1bHQpDQoJCQk6dHlwZXMgKGNhbm9uaWNhbGl6ZS10eXBl
cyANCgkJCQkgICAgICByZXN1bHQtdHlwZXMNCgkJCQkgICAgICAoUFFuZmllbGRzIHJlc3VsdCkN
CgkJCQkgICAgICByZXN1bHQpKSkpDQoJICAgICAoaWYgZnVsbC1zZXQNCgkJICh2YWx1ZXMgcmVz
dWx0LXNldA0KCQkJIChQUW5maWVsZHMgcmVzdWx0KQ0KCQkJIChQUW50dXBsZXMgcmVzdWx0KSkN
CgkJICh2YWx1ZXMgcmVzdWx0LXNldA0KCQkJIChQUW5maWVsZHMgcmVzdWx0KSkpKSkNCgkgICh0
DQoJICAgKHVud2luZC1wcm90ZWN0DQogICAgICAgICAgICAgICAoZXJyb3IgJ3NxbC1kYXRhYmFz
ZS1kYXRhLWVycm9yDQogICAgICAgICAgICAgICAgICAgICAgOmRhdGFiYXNlIGRhdGFiYXNlDQog
ICAgICAgICAgICAgICAgICAgICAgOmV4cHJlc3Npb24gcXVlcnktZXhwcmVzc2lvbg0KICAgICAg
ICAgICAgICAgICAgICAgIDplcnJvci1pZCAoUFFyZXN1bHRTdGF0dXMgcmVzdWx0KQ0KICAgICAg
ICAgICAgICAgICAgICAgIDptZXNzYWdlICh0aWR5LWVycm9yLW1lc3NhZ2UNCgkJCQkoUFFyZXN1
bHRFcnJvck1lc3NhZ2UgcmVzdWx0KSkpDQogICAgICAgICAgICAgKFBRY2xlYXIgcmVzdWx0KSkp
KSkpKSkNCiAgDQooZGVmbWV0aG9kIGRhdGFiYXNlLWR1bXAtcmVzdWx0LXNldCAocmVzdWx0LXNl
dCAoZGF0YWJhc2UgcG9zdGdyZXNxbC1kYXRhYmFzZSkpDQogIChsZXQgKChyZXMtcHRyIChwb3N0
Z3Jlc3FsLXJlc3VsdC1zZXQtcmVzLXB0ciByZXN1bHQtc2V0KSkpIA0KICAgIChkZWNsYXJlICh0
eXBlIHBnc3FsLXJlc3VsdC1kZWYgcmVzLXB0cikpDQogICAgKFBRY2xlYXIgcmVzLXB0cikNCiAg
ICB0KSkNCg0KKGRlZm1ldGhvZCBkYXRhYmFzZS1zdG9yZS1uZXh0LXJvdyAocmVzdWx0LXNldCAo
ZGF0YWJhc2UgcG9zdGdyZXNxbC1kYXRhYmFzZSkgDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0KQ0KICAobGV0ICgocmVzdWx0IChwb3N0Z3Jlc3FsLXJlc3VsdC1zZXQt
cmVzLXB0ciByZXN1bHQtc2V0KSkNCgkodHlwZXMgKHBvc3RncmVzcWwtcmVzdWx0LXNldC10eXBl
cyByZXN1bHQtc2V0KSkpDQogICAgKGRlY2xhcmUgKHR5cGUgcGdzcWwtcmVzdWx0LWRlZiByZXN1
bHQpKQ0KICAgIChpZiAoPj0gKHBvc3RncmVzcWwtcmVzdWx0LXNldC10dXBsZS1pbmRleCByZXN1
bHQtc2V0KQ0KCSAgICAocG9zdGdyZXNxbC1yZXN1bHQtc2V0LW51bS10dXBsZXMgcmVzdWx0LXNl
dCkpDQoJbmlsDQogICAgICAobG9vcCB3aXRoIHR1cGxlLWluZGV4ID0gKHBvc3RncmVzcWwtcmVz
dWx0LXNldC10dXBsZS1pbmRleCByZXN1bHQtc2V0KQ0KICAgICAgICAgIGZvciBpIGZyb20gMCBi
ZWxvdyAocG9zdGdyZXNxbC1yZXN1bHQtc2V0LW51bS1maWVsZHMgcmVzdWx0LXNldCkNCiAgICAg
ICAgICBmb3IgcmVzdCBvbiBsaXN0DQogICAgICAgICAgZG8NCiAgICAgICAgICAgIChzZXRmIChj
YXIgcmVzdCkNCiAgICAgICAgICAgICAgKGlmICh6ZXJvcCAoUFFnZXRpc251bGwgcmVzdWx0IHR1
cGxlLWluZGV4IGkpKQ0KICAgICAgICAgICAgICAgICAgKGNvbnZlcnQtcmF3LWZpZWxkDQogICAg
ICAgICAgICAgICAgICAgKFBRZ2V0dmFsdWUgcmVzdWx0IHR1cGxlLWluZGV4IGkpDQoJCSAgIHR5
cGVzIGkpDQogICAgICAgICAgICAgICAgbmlsKSkNCiAgICAgICAgICBmaW5hbGx5DQogICAgICAg
ICAgICAoaW5jZiAocG9zdGdyZXNxbC1yZXN1bHQtc2V0LXR1cGxlLWluZGV4IHJlc3VsdC1zZXQp
KQ0KICAgICAgICAgICAgKHJldHVybiBsaXN0KSkpKSkNCg0KOzs7IExhcmdlIG9iamVjdHMgc3Vw
cG9ydCAoTWFyYyBCKQ0KDQooZGVmbWV0aG9kIGRhdGFiYXNlLWNyZWF0ZS1sYXJnZS1vYmplY3Qg
KChkYXRhYmFzZSBwb3N0Z3Jlc3FsLWRhdGFiYXNlKSkNCiAgKGxvLWNyZWF0ZSAoZGF0YWJhc2Ut
Y29ubi1wdHIgZGF0YWJhc2UpDQoJICAgICAobG9naW9yIHBvc3RncmVzcWw6OitJTlZfV1JJVEUr
IHBvc3RncmVzcWw6OitJTlZfUkVBRCspKSkNCg0KDQojK21iLW9yaWdpbmFsDQooZGVmbWV0aG9k
IGRhdGFiYXNlLXdyaXRlLWxhcmdlLW9iamVjdCAob2JqZWN0LWlkIChkYXRhIHN0cmluZykgKGRh
dGFiYXNlIHBvc3RncmVzcWwtZGF0YWJhc2UpKQ0KICAobGV0ICgocHRyIChkYXRhYmFzZS1jb25u
LXB0ciBkYXRhYmFzZSkpDQoJKGxlbmd0aCAobGVuZ3RoIGRhdGEpKQ0KCShyZXN1bHQgbmlsKQ0K
CShmZCBuaWwpKQ0KICAgICh3aXRoLXRyYW5zYWN0aW9uICg6ZGF0YWJhc2UgZGF0YWJhc2UpDQog
ICAgICAgKHVud2luZC1wcm90ZWN0DQoJICAocHJvZ24gDQoJICAgIChzZXRmIGZkIChsby1vcGVu
IHB0ciBvYmplY3QtaWQgcG9zdGdyZXNxbDo6K0lOVl9XUklURSspKQ0KCSAgICAod2hlbiAoPj0g
ZmQgMCkNCgkgICAgICAod2hlbiAoPSAobG8td3JpdGUgcHRyIGZkIGRhdGEgbGVuZ3RoKSBsZW5n
dGgpDQoJCShzZXRmIHJlc3VsdCB0KSkpKQ0KCSAocHJvZ24NCgkgICAod2hlbiAoYW5kIGZkICg+
PSBmZCAwKSkNCgkgICAgIChsby1jbG9zZSBwdHIgZmQpKQ0KCSAgICkpKQ0KICAgIHJlc3VsdCkp
DQoNCihkZWZtZXRob2QgZGF0YWJhc2Utd3JpdGUtbGFyZ2Utb2JqZWN0IChvYmplY3QtaWQgKGRh
dGEgc3RyaW5nKSAoZGF0YWJhc2UgcG9zdGdyZXNxbC1kYXRhYmFzZSkpDQogIChsZXQgKChwdHIg
KGRhdGFiYXNlLWNvbm4tcHRyIGRhdGFiYXNlKSkNCgkobGVuZ3RoIChsZW5ndGggZGF0YSkpDQoJ
KHJlc3VsdCBuaWwpDQoJKGZkIG5pbCkpDQogICAgKGRhdGFiYXNlLWV4ZWN1dGUtY29tbWFuZCAi
YmVnaW4iIGRhdGFiYXNlKQ0KICAgICh1bndpbmQtcHJvdGVjdA0KCShwcm9nbiANCgkgIChzZXRm
IGZkIChsby1vcGVuIHB0ciBvYmplY3QtaWQgcG9zdGdyZXNxbDo6K0lOVl9XUklURSspKQ0KCSAg
KHdoZW4gKD49IGZkIDApDQoJICAgICh3aGVuICg9IChsby13cml0ZSBwdHIgZmQgZGF0YSBsZW5n
dGgpIGxlbmd0aCkNCgkgICAgICAoc2V0ZiByZXN1bHQgdCkpKSkNCiAgICAgIChwcm9nbg0KCSh3
aGVuIChhbmQgZmQgKD49IGZkIDApKQ0KCSAgKGxvLWNsb3NlIHB0ciBmZCkpDQoJKGRhdGFiYXNl
LWV4ZWN1dGUtY29tbWFuZCAoaWYgcmVzdWx0ICJjb21taXQiICJyb2xsYmFjayIpIGRhdGFiYXNl
KSkpDQogICAgcmVzdWx0KSkNCg0KOzsgKE1CKSB0aGUgYmVnaW4vY29tbWl0L3JvbGxiYWNrIHN0
dWZmIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHdpdGgtdHJhbnNhY3Rpb24gd2lsIGJlIGltcGxlbWVu
dGVkDQo7OyAoS01SKSBDYW4ndCB1c2Ugd2l0aC10cmFuc2FjdGlvbiBzaW5jZSB0aGF0IGZ1bmN0
aW9uIGlzIGluIGhpZ2gtbGV2ZWwgY29kZQ0KKGRlZm1ldGhvZCBkYXRhYmFzZS1yZWFkLWxhcmdl
LW9iamVjdCAob2JqZWN0LWlkIChkYXRhYmFzZSBwb3N0Z3Jlc3FsLWRhdGFiYXNlKSkNCiAgKGxl
dCAoKHB0ciAoZGF0YWJhc2UtY29ubi1wdHIgZGF0YWJhc2UpKQ0KCShidWZmZXIgbmlsKQ0KCShy
ZXN1bHQgbmlsKQ0KCShsZW5ndGggMCkNCgkoZmQgbmlsKSkNCiAgICAodW53aW5kLXByb3RlY3QN
CiAgICAgICAocHJvZ24NCgkgKGRhdGFiYXNlLWV4ZWN1dGUtY29tbWFuZCAiYmVnaW4iIGRhdGFi
YXNlKQ0KCSAoc2V0ZiBmZCAobG8tb3BlbiBwdHIgb2JqZWN0LWlkIHBvc3RncmVzcWw6OitJTlZf
UkVBRCspKQ0KCSAod2hlbiAoPj0gZmQgMCkNCgkgICAoc2V0ZiBsZW5ndGggKGxvLWxzZWVrIHB0
ciBmZCAwIDIpKQ0KCSAgIChsby1sc2VlayBwdHIgZmQgMCAwKQ0KCSAgICh3aGVuICg+IGxlbmd0
aCAwKQ0KCSAgICAgKHNldGYgYnVmZmVyICh1ZmZpOmFsbG9jYXRlLWZvcmVpZ24tc3RyaW5nIA0K
CQkJICAgbGVuZ3RoIDp1bnNpZ25lZCB0KSkNCgkgICAgICh3aGVuICg9IChsby1yZWFkIHB0ciBm
ZCBidWZmZXIgbGVuZ3RoKSBsZW5ndGgpDQoJICAgICAgIChzZXRmIHJlc3VsdCAodWZmaTpjb252
ZXJ0LWZyb20tZm9yZWlnbi1zdHJpbmcNCgkJCSAgICAgYnVmZmVyIDpsZW5ndGggbGVuZ3RoIDpu
dWxsLXRlcm1pbmF0ZWQtcCBuaWwpKSkpKSkNCiAgICAgIChwcm9nbg0KCSh3aGVuIGJ1ZmZlciAo
dWZmaTpmcmVlLWZvcmVpZ24tb2JqZWN0IGJ1ZmZlcikpDQoJKHdoZW4gKGFuZCBmZCAoPj0gZmQg
MCkpIChsby1jbG9zZSBwdHIgZmQpKQ0KCShkYXRhYmFzZS1leGVjdXRlLWNvbW1hbmQgKGlmIHJl
c3VsdCAiY29tbWl0IiAicm9sbGJhY2siKSBkYXRhYmFzZSkpKQ0KICAgIHJlc3VsdCkpDQoNCihk
ZWZtZXRob2QgZGF0YWJhc2UtZGVsZXRlLWxhcmdlLW9iamVjdCAob2JqZWN0LWlkIChkYXRhYmFz
ZSBwb3N0Z3Jlc3FsLWRhdGFiYXNlKSkNCiAgKGxvLXVubGluayAoZGF0YWJhc2UtY29ubi1wdHIg
ZGF0YWJhc2UpIG9iamVjdC1pZCkpDQoNCg0KOzs7IE9iamVjdCBsaXN0aW5nDQoNCg0KICANCihk
ZWZtZXRob2QgZGF0YWJhc2UtY3JlYXRlIChjb25uZWN0aW9uLXNwZWMgKHR5cGUgKGVxbCA6cG9z
dGdyZXNxbCkpKQ0KICAoZGVzdHJ1Y3R1cmluZy1iaW5kIChob3N0IG5hbWUgdXNlciBwYXNzd29y
ZCkgY29ubmVjdGlvbi1zcGVjDQogICAgKGRlY2xhcmUgKGlnbm9yZSB1c2VyIHBhc3N3b3JkKSkN
CiAgICAobXVsdGlwbGUtdmFsdWUtYmluZCAob3V0cHV0IHN0YXR1cykNCgkoY2xzcWwtc3lzOmNv
bW1hbmQtb3V0cHV0ICJjcmVhdGVkYiAtaH5BIH5BIg0KCQkJCSAgICAgICAoaWYgaG9zdCBob3N0
ICJsb2NhbGhvc3QiKQ0KCQkJCSAgICAgICBuYW1lKQ0KICAgICAgKGlmIChvciAobm90ICh6ZXJv
cCBzdGF0dXMpKQ0KCSAgICAgIChzZWFyY2ggImRhdGFiYXNlIGNyZWF0aW9uIGZhaWxlZDogRVJS
T1I6IiBvdXRwdXQpKQ0KCSAgKGVycm9yICdzcWwtZGF0YWJhc2UtZXJyb3INCgkJIDptZXNzYWdl
DQoJCSAoZm9ybWF0IG5pbCAiY3JlYXRlZGIgZmFpbGVkIGZvciBwb3N0Z3Jlc3FsIGJhY2tlbmQg
d2l0aCBjb25uZWN0aW9uIHNwZWMgfkEuIg0KCQkJIGNvbm5lY3Rpb24tc3BlYykpDQoJdCkpKSkN
Cg0KKGRlZm1ldGhvZCBkYXRhYmFzZS1kZXN0cm95IChjb25uZWN0aW9uLXNwZWMgKHR5cGUgKGVx
bCA6cG9zdGdyZXNxbCkpKQ0KICAoZGVzdHJ1Y3R1cmluZy1iaW5kIChob3N0IG5hbWUgdXNlciBw
YXNzd29yZCkgY29ubmVjdGlvbi1zcGVjDQogICAgKGRlY2xhcmUgKGlnbm9yZSB1c2VyIHBhc3N3
b3JkKSkNCiAgICAobXVsdGlwbGUtdmFsdWUtYmluZCAob3V0cHV0IHN0YXR1cykNCgkoY2xzcWwt
c3lzOmNvbW1hbmQtb3V0cHV0ICJkcm9wZGIgLWh+QSB+QSINCgkJCQkgICAgICAgKGlmIGhvc3Qg
aG9zdCAibG9jYWxob3N0IikNCgkJCQkgICAgICAgbmFtZSkNCiAgICAgIChpZiAob3IgKG5vdCAo
emVyb3Agc3RhdHVzKSkNCgkgICAgICAoc2VhcmNoICJkYXRhYmFzZSByZW1vdmFsIGZhaWxlZDog
RVJST1I6IiBvdXRwdXQpKQ0KCSAgKGVycm9yICdzcWwtZGF0YWJhc2UtZXJyb3INCgkJIDptZXNz
YWdlDQoJCSAoZm9ybWF0IG5pbCAiZHJvcGRiIGZhaWxlZCBmb3IgcG9zdGdyZXNxbCBiYWNrZW5k
IHdpdGggY29ubmVjdGlvbiBzcGVjIH5BLiINCgkJCSBjb25uZWN0aW9uLXNwZWMpKQ0KCXQpKSkp
DQoNCg0KKGRlZm1ldGhvZCBkYXRhYmFzZS1wcm9iZSAoY29ubmVjdGlvbi1zcGVjICh0eXBlIChl
cWwgOnBvc3RncmVzcWwpKSkNCiAgKHdoZW4gKGZpbmQgKHNlY29uZCBjb25uZWN0aW9uLXNwZWMp
IChkYXRhYmFzZS1saXN0IGNvbm5lY3Rpb24tc3BlYyB0eXBlKQ0KICAgICAgICAgICAgICA6dGVz
dCAjJ3N0cmluZy1lcXVhbCkNCiAgICB0KSkNCg0KDQooZGVmdW4gJXBnLWRhdGFiYXNlLWNvbm5l
Y3Rpb24gKGNvbm5lY3Rpb24tc3BlYykNCiAgKGNoZWNrLWNvbm5lY3Rpb24tc3BlYyBjb25uZWN0
aW9uLXNwZWMgOnBvc3RncmVzcWwNCgkJCSAoaG9zdCBkYiB1c2VyIHBhc3N3b3JkICZvcHRpb25h
bCBwb3J0IG9wdGlvbnMgdHR5KSkNCiAgKG1hY3JvbGV0ICgoY29lcmNlLXN0cmluZyAodmFyKQ0K
ICAgICAgICAgICAgICAgYCh1bmxlc3MgKHR5cGVwICx2YXIgJ3NpbXBsZS1iYXNlLXN0cmluZykN
CiAgICAgICAgICAgICAgICAgKHNldGYgLHZhciAoY29lcmNlICx2YXIgJ3NpbXBsZS1iYXNlLXN0
cmluZykpKSkpDQogICAgKGRlc3RydWN0dXJpbmctYmluZCAoaG9zdCBkYiB1c2VyIHBhc3N3b3Jk
ICZvcHRpb25hbCBwb3J0IG9wdGlvbnMgdHR5KQ0KICAgICAgICBjb25uZWN0aW9uLXNwZWMNCiAg
ICAgIChjb2VyY2Utc3RyaW5nIGRiKQ0KICAgICAgKGNvZXJjZS1zdHJpbmcgdXNlcikNCiAgICAg
IChsZXQgKChjb25uZWN0aW9uIChQUXNldGRiTG9naW4gaG9zdCBwb3J0IG9wdGlvbnMgdHR5IGRi
IHVzZXIgcGFzc3dvcmQpKSkNCiAgICAgICAgKGRlY2xhcmUgKHR5cGUgcG9zdGdyZXNxbDo6cGdz
cWwtY29ubi1wdHIgY29ubmVjdGlvbikpDQogICAgICAgICh1bmxlc3MgKGVxIChQUXN0YXR1cyBj
b25uZWN0aW9uKQ0KCQkgICAgcGdzcWwtY29ubi1zdGF0dXMtdHlwZSNjb25uZWN0aW9uLW9rKQ0K
ICAgICAgICAgIDs7IENvbm5lY3QgZmFpbGVkDQogICAgICAgICAgKGVycm9yICdzcWwtY29ubmVj
dGlvbi1lcnJvcg0KICAgICAgICAgICAgICAgICA6ZGF0YWJhc2UtdHlwZSA6cG9zdGdyZXNxbA0K
ICAgICAgICAgICAgICAgICA6Y29ubmVjdGlvbi1zcGVjIGNvbm5lY3Rpb24tc3BlYw0KICAgICAg
ICAgICAgICAgICA6ZXJyb3ItaWQgKFBRc3RhdHVzIGNvbm5lY3Rpb24pDQogICAgICAgICAgICAg
ICAgIDptZXNzYWdlIChQUWVycm9yTWVzc2FnZSBjb25uZWN0aW9uKSkpDQogICAgICAgIGNvbm5l
Y3Rpb24pKSkpDQoNCihkZWZtZXRob2QgZGF0YWJhc2UtcmVjb25uZWN0ICgoZGF0YWJhc2UgcG9z
dGdyZXNxbC1kYXRhYmFzZSkpDQogIChsZXQgKChsb2NrIChkYXRhYmFzZS1sb2NrIGRhdGFiYXNl
KSkpDQogICAgKHdpdGgtcHJvY2Vzcy1sb2NrIChsb2NrICJSZWNvbm5lY3RpbmciKQ0KICAgICAg
KHdpdGgtc2xvdHMgKGNvbm5lY3Rpb24tc3BlYyBjb25uLXB0cikNCgkgIGRhdGFiYXNlDQoJKHNl
dGYgY29ubi1wdHIgKCVwZy1kYXRhYmFzZS1jb25uZWN0aW9uIGNvbm5lY3Rpb24tc3BlYykpDQoJ
ZGF0YWJhc2UpKSkpDQoNCjs7OyBEYXRhYmFzZSBjYXBhYmlsaXRpZXMNCg0KKHdoZW4gKGNsc3Fs
LXN5czpkYXRhYmFzZS10eXBlLWxpYnJhcnktbG9hZGVkIDpwb3N0Z3Jlc3FsKQ0KICAoY2xzcWwt
c3lzOmluaXRpYWxpemUtZGF0YWJhc2UtdHlwZSA6ZGF0YWJhc2UtdHlwZSA6cG9zdGdyZXNxbCkp
DQo=


--=-tUA1ynThxubAIDVM+c9W
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
CLSQL-Devel mailing list
[email protected]
http://lists.b9.com/mailman/listinfo/clsql-devel

--=-tUA1ynThxubAIDVM+c9W--