From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Julian Graham Newsgroups: gmane.lisp.guile.devel Subject: [PATCH] Unicode string normalization Date: Sat, 2 Jan 2010 00:38:41 -0500 Message-ID: <2bc5f8211001012138r20128284k824f24e332c37a1e@mail.gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6d785539eda76047c27e65e X-Trace: ger.gmane.org 1262410740 24337 80.91.229.12 (2 Jan 2010 05:39:00 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 2 Jan 2010 05:39:00 +0000 (UTC) To: guile-devel Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Sat Jan 02 06:38:53 2010 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1NQwhQ-0001jx-Ig for guile-devel@m.gmane.org; Sat, 02 Jan 2010 06:38:53 +0100 Original-Received: from localhost ([127.0.0.1]:39927 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NQwhQ-0003TQ-HY for guile-devel@m.gmane.org; Sat, 02 Jan 2010 00:38:52 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NQwhM-0003TA-Vq for guile-devel@gnu.org; Sat, 02 Jan 2010 00:38:49 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NQwhJ-0003Sc-Ry for guile-devel@gnu.org; Sat, 02 Jan 2010 00:38:47 -0500 Original-Received: from [199.232.76.173] (port=40401 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NQwhJ-0003SZ-NH for guile-devel@gnu.org; Sat, 02 Jan 2010 00:38:45 -0500 Original-Received: from ey-out-1920.google.com ([74.125.78.148]:32124) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NQwhJ-0006V8-Fk for guile-devel@gnu.org; Sat, 02 Jan 2010 00:38:45 -0500 Original-Received: by ey-out-1920.google.com with SMTP id 4so1570984eyg.34 for ; Fri, 01 Jan 2010 21:38:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=iQ/N4IYZhuVKN6Gi9lsh1g8ifMS0+XC9t/nJpKcJcL4=; b=DiKAv+BCJYK1stD25C/L+ev8R6CF3KeI85Js8ye6Qf/M3KRlO1/ItHMoR1tc0iN5ds uNL5JhqeYA9MOY/DjgMw/AUVMZc2et/MYwU5Owfb4Cf4bKhJbbE/DuBwmWg3fEU00Scg QqVUKHjT5KJpnKn0FkoatkXWfeG4k78cykHAg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=t7AYa7R6eapqJfAk5I3/TMYf8N0wNR4ULPkkckvHqOyQOeTnA6jYMTR4lap/B5XAlH FeYFWWYdrxcJhF3bPsQOW7q3JjFczTpAKUAGe9DR7AD6aQKfSZn/Sw0Xlts34kOzG55u PDbmnpmYeKuI99IRg2JuOeFAkDMvAT37UGioI= Original-Received: by 10.216.86.211 with SMTP id w61mr1157446wee.6.1262410721580; Fri, 01 Jan 2010 21:38:41 -0800 (PST) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:9810 Archived-At: --0016e6d785539eda76047c27e65e Content-Type: text/plain; charset=ISO-8859-1 Hi Guilers, Happy new year! Find attached a patch that adds C and Scheme support for the four Unicode string normalization forms [0], along with documentation and unit tests. The API matches the one described in R6RS Standard Libraries 1.2 [1]. Questions? Comments? Regards, Julian [0] - http://www.unicode.org/reports/tr15/tr15-31.html [1] - http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-1.html#node_toc_node_sec_1.2 --0016e6d785539eda76047c27e65e Content-Type: text/x-diff; charset=US-ASCII; name="0001-Support-for-Unicode-string-normalization-functions.patch" Content-Disposition: attachment; filename="0001-Support-for-Unicode-string-normalization-functions.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g3xyoio30 RnJvbSBlYjhmNzJlN2QyMzhlZTMzNTE0MTFiOTAzODk4MDc1YzI3ODdmYzA3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKdWxpYW4gR3JhaGFtIDxqdWxpYW4uZ3JhaGFtQGF5YS55YWxl LmVkdT4KRGF0ZTogU2F0LCAyIEphbiAyMDEwIDAwOjA2OjIzIC0wNTAwClN1YmplY3Q6IFtQQVRD SF0gU3VwcG9ydCBmb3IgVW5pY29kZSBzdHJpbmcgbm9ybWFsaXphdGlvbiBmdW5jdGlvbnMKCiog bGliZ3VpbGUvc3RyaW5ncy5jLCBsaWJndWlsZS9zdHJpbmdzLmggKG5vcm1hbGl6ZV9zdHIsCiAg c2NtX3N0cmluZ19ub3JtYWxpemVfbmZjLCBzY21fc3RyaW5nX25vcm1hbGl6ZV9uZmQsIHNjbV9u b3JtYWxpemVfbmZrYywKICBzY21fc3RyaW5nX25vcm1hbGl6ZV9uZmtkKTogTmV3IGZ1bmN0aW9u cy4KKiB0ZXN0LXN1aXRlL3Rlc3RzL3N0cmluZ3MudGVzdDogVW5pdCB0ZXN0cyBmb3IgYHN0cmlu Zy1ub3JtYWxpemUtbmZjJywKICBgc3RyaW5nLW5vcm1hbGl6ZS1uZmQnLCBgc3RyaW5nLW5vcm1h bGl6ZS1uZmtjJywgYW5kCiAgYHN0cmluZy1ub3JtYWxpemUtbmZrZCcuCiogZG9jL3JlZi9hcGkt ZGF0YS50ZXhpIChTdHJpbmcgQ29tcGFyaXNvbik6IERvY3VtZW50YXRpb24gZm9yIG5vcm1hbGl6 YXRpb24KICBmdW5jdGlvbnMuCi0tLQogZG9jL3JlZi9hcGktZGF0YS50ZXhpICAgICAgICAgfCAg IDY0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliZ3VpbGUvc3RyaW5n cy5jICAgICAgICAgICAgfCAgIDczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBsaWJndWlsZS9zdHJpbmdzLmggICAgICAgICAgICB8ICAgIDUgKysrCiB0ZXN0LXN1 aXRlL3Rlc3RzL3N0cmluZ3MudGVzdCB8ICAgNDAgKysrKysrKysrKysrKysrKysrKysrKwogNCBm aWxlcyBjaGFuZ2VkLCAxODIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9kb2MvcmVmL2FwaS1kYXRhLnRleGkgYi9kb2MvcmVmL2FwaS1kYXRhLnRleGkKaW5kZXgg Yjk1OWFiOS4uOWNjOGVhNSAxMDA3NTUKLS0tIGEvZG9jL3JlZi9hcGktZGF0YS50ZXhpCisrKyBi L2RvYy9yZWYvYXBpLWRhdGEudGV4aQpAQCAtMzI1Miw2ICszMjUyLDcwIEBAIENvbXB1dGUgYSBo YXNoIHZhbHVlIGZvciBAdmFye1N9LiAgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IEB2YXJ7Ym91bmR9 IGlzIGEgbm9uLW5lCiBDb21wdXRlIGEgaGFzaCB2YWx1ZSBmb3IgQHZhcntTfS4gIHRoZSBvcHRp b25hbCBhcmd1bWVudCBAdmFye2JvdW5kfSBpcyBhIG5vbi1uZWdhdGl2ZSBleGFjdCBpbnRlZ2Vy IHNwZWNpZnlpbmcgdGhlIHJhbmdlIG9mIHRoZSBoYXNoIGZ1bmN0aW9uLiBBIHBvc2l0aXZlIHZh bHVlIHJlc3RyaWN0cyB0aGUgcmV0dXJuIHZhbHVlIHRvIHRoZSByYW5nZSBbMCxib3VuZCkuCiBA ZW5kIGRlZmZuCiAKK0JlY2F1c2UgdGhlIHNhbWUgdmlzdWFsIGFwcGVhcmFuY2Ugb2YgYW4gYWJz dHJhY3QgVW5pY29kZSBjaGFyYWN0ZXIgY2FuIAorYmUgb2J0YWluZWQgdmlhIG11bHRpcGxlIHNl cXVlbmNlcyBvZiBVbmljb2RlIGNoYXJhY3RlcnMsIGV2ZW4gdGhlIAorY2FzZS1pbnNlbnNpdGl2 ZSBzdHJpbmcgY29tcGFyaXNvbiBmdW5jdGlvbnMgZGVzY3JpYmVkIGFib3ZlIG1heSByZXR1cm4K K0Bjb2RleyNmfSB3aGVuIHByZXNlbnRlZCB3aXRoIHN0cmluZ3MgY29udGFpbmluZyBkaWZmZXJl bnQgCityZXByZXNlbnRhdGlvbnMgb2YgdGhlIHNhbWUgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUs IHRoZSBVbmljb2RlIAorY2hhcmFjdGVyIGBgTEFUSU4gU01BTEwgTEVUVEVSIFMgV0lUSCBET1Qg QkVMT1cgQU5EIERPVCBBQk9WRScnIGNhbiBiZSAKK3JlcHJlc2VudGVkIHdpdGggYSBzaW5nbGUg Y2hhcmFjdGVyIChVKzFFNjkpIG9yIGJ5IHRoZSBjaGFyYWN0ZXIgYGBMQVRJTgorU01BTEwgTEVU VEVSIFMnJyAoVSswMDczKSBmb2xsb3dlZCBieSB0aGUgY29tYmluaW5nIG1hcmtzIGBgQ09NQklO SU5HIAorRE9UIEJFTE9XJycgKFUrMDMyMykgYW5kIGBgQ09NQklOSU5HIERPVCBBQk9WRScnIChV KzAzMDcpLgorCitGb3IgdGhpcyByZWFzb24sIGl0IGlzIG9mdGVuIGRlc2lyYWJsZSB0byBlbnN1 cmUgdGhhdCB0aGUgc3RyaW5ncwordG8gYmUgY29tcGFyZWQgYXJlIHVzaW5nIGEgbXV0dWFsbHkg Y29uc2lzdGVudCByZXByZXNlbnRhdGlvbiBmb3IgZXZlcnkgCitjaGFyYWN0ZXIuICBUaGUgVW5p Y29kZSBzdGFuZGFyZCBkZWZpbmVzIHR3byBtZXRob2RzIG9mIG5vcm1hbGl6aW5nIHRoZQorY29u dGVudHMgb2Ygc3RyaW5nczogRGVjb21wb3NpdGlvbiwgd2hpY2ggYnJlYWtzIGNvbXBvc2l0ZSBj aGFyYWN0ZXJzIAoraW50byBhIHNldCBvZiBjb25zdGl0dWVudCBjaGFyYWN0ZXJzIHdpdGggYW4g b3JkZXJpbmcgZGVmaW5lZCBieSB0aGUKK1VuaWNvZGUgU3RhbmRhcmQ7IGFuZCBjb21wb3NpdGlv biwgd2hpY2ggcGVyZm9ybXMgdGhlIGNvbnZlcnNlLgorCitUaGVyZSBhcmUgdHdvIGRlY29tcG9z aXRpb24gb3BlcmF0aW9ucy4gIGBgQ2Fub25pY2FsIGRlY29tcG9zaXRpb24nJyAKK3Byb2R1Y2Vz IGNoYXJhY3RlciBzZXF1ZW5jZXMgdGhhdCBzaGFyZSB0aGUgc2FtZSB2aXN1YWwgYXBwZWFyYW5j ZSBhcwordGhlIG9yaWdpbmFsIGNoYXJhY3RlcnMsIHdoaWxlIGBgY29tcGF0aWJsaXR5IGRlY29t cG9zaXRpb24nJyBwcm9kdWNlcworb25lcyB3aG9zZSB2aXN1YWwgYXBwZWFyYW5jZXMgbWF5IGRp ZmZlciBmcm9tIHRoZSBvcmlnaW5hbHMgYnV0IHdoaWNoCityZXByZXNlbnQgdGhlIHNhbWUgYWJz dHJhY3QgY2hhcmFjdGVyLgorCitUaGVzZSBvcGVyYXRpb25zIGFyZSBlbmNhcHN1bGF0ZWQgaW4g dGhlIGZvbGxvd2luZyBzZXQgb2Ygbm9ybWFsaXphdGlvbgorZm9ybXM6CisKK0B0YWJsZSBAZGZu CitAaXRlbSBORkQKK0NoYXJhY3RlcnMgYXJlIGRlY29tcG9zZWQgdG8gdGhlaXIgY2Fub25pY2Fs IGZvcm1zLgorCitAaXRlbSBORktECitDaGFyYWN0ZXJzIGFyZSBkZWNvbXBvc2VkIHRvIHRoZWly IGNvbXBhdGliaWxpdHkgZm9ybXMuCisKK0BpdGVtIE5GQworQ2hhcmFjdGVycyBhcmUgZGVjb21w b3NlZCB0byB0aGVpciBjYW5vbmljYWwgZm9ybXMsIHRoZW4gY29tcG9zZWQuCisKK0BpdGVtIE5G S0MKK0NoYXJhY3RlcnMgYXJlIGRlY29tcG9zZWQgdG8gdGhlaXIgY29tcGF0aWJpbGl0eSBmb3Jt cywgdGhlbiBjb21wb3NlZC4KKworQGVuZCB0YWJsZQorCitUaGUgZnVuY3Rpb25zIGJlbG93IHB1 dCB0aGVpciBhcmd1bWVudHMgaW50byBvbmUgb2YgdGhlIGZvcm1zIGRlc2NyaWJlZAorYWJvdmUu CisKK0BkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gc3RyaW5nLW5vcm1hbGl6ZS1uZmQgcworQGRl ZmZueCB7QyBGdW5jdGlvbn0gc2NtX3N0cmluZ19ub3JtYWxpemVfbmZkIChzKQorUmV0dXJuIHRo ZSBAY29kZXtORkR9IG5vcm1hbGl6ZWQgZm9ybSBvZiBAdmFye3N9LgorQGVuZCBkZWZmbgorCitA ZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHN0cmluZy1ub3JtYWxpemUtbmZrZCBzCitAZGVmZm54 IHtDIEZ1bmN0aW9ufSBzY21fc3RyaW5nX25vcm1hbGl6ZV9uZmtkIChzKQorUmV0dXJuIHRoZSBA Y29kZXtORktEfSBub3JtYWxpemVkIGZvcm0gb2YgQHZhcntzfS4KK0BlbmQgZGVmZm4KKworQGRl ZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBzdHJpbmctbm9ybWFsaXplLW5mYyBzCitAZGVmZm54IHtD IEZ1bmN0aW9ufSBzY21fc3RyaW5nX25vcm1hbGl6ZV9uZmMgKHMpCitSZXR1cm4gdGhlIEBjb2Rl e05GQ30gbm9ybWFsaXplZCBmb3JtIG9mIEB2YXJ7c30uCitAZW5kIGRlZmZuCisKK0BkZWZmbiB7 U2NoZW1lIFByb2NlZHVyZX0gc3RyaW5nLW5vcm1hbGl6ZS1uZmtjIHMKK0BkZWZmbngge0MgRnVu Y3Rpb259IHNjbV9zdHJpbmdfbm9ybWFsaXplX25ma2MgKHMpCitSZXR1cm4gdGhlIEBjb2Rle05G S0N9IG5vcm1hbGl6ZWQgZm9ybSBvZiBAdmFye3N9LgorQGVuZCBkZWZmbgorCiBAbm9kZSBTdHJp bmcgU2VhcmNoaW5nCiBAc3Vic3Vic2VjdGlvbiBTdHJpbmcgU2VhcmNoaW5nCiAKZGlmZiAtLWdp dCBhL2xpYmd1aWxlL3N0cmluZ3MuYyBiL2xpYmd1aWxlL3N0cmluZ3MuYwppbmRleCA3MTFkYTlj Li44NGRmNDhhIDEwMDY0NAotLS0gYS9saWJndWlsZS9zdHJpbmdzLmMKKysrIGIvbGliZ3VpbGUv c3RyaW5ncy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVk ZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHVuaW5vcm0uaD4KICNp bmNsdWRlIDx1bmlzdHIuaD4KICNpbmNsdWRlIDx1bmljb252Lmg+CiAKQEAgLTE3MzYsNiArMTcz Nyw3OCBAQCBzY21fdG9fbG9jYWxlX3N0cmluZ2J1ZiAoU0NNIHN0ciwgY2hhciAqYnVmLCBzaXpl X3QgbWF4X2xlbikKICAgcmV0dXJuIGxlbjsKIH0KIAorLyogVGhpcyBmdW5jdGlvbiBpcyBhIHBh cnRpYWwgY2xvbmUgb2YgU0NNX1NUUklOR19UT19VMzJfQlVGIGZyb20gCisgICBsaWJndWlsZS9p MThuLmMuICBJdCB3b3VsZCBiZSB1c2VmdWwgdG8gaGF2ZSB0aGlzIGZhY3RvcmVkIG91dCBpbnRv IGEgbW9yZQorICAgY29udmVuaWVudCBsb2NhdGlvbiwgYnV0IGl0cyB1c2Ugb2YgYWxsb2NhIG1h a2VzIHRoYXQgdHJpY2t5IHRvIGRvLiAqLworCitzdGF0aWMgU0NNIAorbm9ybWFsaXplX3N0ciAo U0NNIHN0cmluZywgdW5pbm9ybV90IGZvcm0pCit7CisgIFNDTSByZXQ7CisgIHNjbV90X3VpbnQz MiAqd19zdHI7CisgIHNjbV90X3djaGFyICpjYnVmOworICBzaXplX3QgcmxlbiwgbGVuID0gc2Nt X2lfc3RyaW5nX2xlbmd0aCAoc3RyaW5nKTsKKworICBpZiAoc2NtX2lfaXNfbmFycm93X3N0cmlu ZyAoc3RyaW5nKSkKKyAgICB7CisgICAgICBzaXplX3QgaTsKKyAgICAgIGNvbnN0IGNoYXIgKmJ1 ZiA9IHNjbV9pX3N0cmluZ19jaGFycyAoc3RyaW5nKTsKKworICAgICAgd19zdHIgPSBhbGxvY2Eg KHNpemVvZiAoc2NtX3Rfd2NoYXIpICogKGxlbiArIDEpKTsKKworICAgICAgZm9yIChpID0gMDsg aSA8IGxlbjsgaSArKykKKwl3X3N0cltpXSA9ICh1bnNpZ25lZCBjaGFyKSBidWZbaV07CisgICAg ICB3X3N0cltsZW5dID0gMDsKKyAgICB9CisgIGVsc2Ugd19zdHIgPSAoc2NtX3RfdWludDMyICop IHNjbV9pX3N0cmluZ193aWRlX2NoYXJzIChzdHJpbmcpOworICB3X3N0ciA9IHUzMl9ub3JtYWxp emUgKGZvcm0sIHdfc3RyLCBsZW4sIE5VTEwsICZybGVuKTsgIAorICAKKyAgcmV0ID0gc2NtX2lf bWFrZV93aWRlX3N0cmluZyAocmxlbiwgJmNidWYpOworICB1MzJfY3B5ICgoc2NtX3RfdWludDMy ICopIGNidWYsIHdfc3RyLCBybGVuKTsKKyAgZnJlZSAod19zdHIpOworICByZXR1cm4gcmV0Owor fQorCitTQ01fREVGSU5FIChzY21fc3RyaW5nX25vcm1hbGl6ZV9uZmMsICJzdHJpbmctbm9ybWFs aXplLW5mYyIsIDEsIDAsIDAsCisJICAgIChTQ00gc3RyaW5nKSwKKwkgICAgIlJldHVybnMgdGhl IE5GQyBub3JtYWxpemVkIGZvcm0gb2YgQHZhcntzdHJpbmd9LiIpCisjZGVmaW5lIEZVTkNfTkFN RSBzX3NjbV9zdHJpbmdfbm9ybWFsaXplX25mYworeworICBTQ01fVkFMSURBVEVfU1RSSU5HICgx LCBzdHJpbmcpOworICByZXR1cm4gbm9ybWFsaXplX3N0ciAoc3RyaW5nLCBVTklOT1JNX05GQyk7 Cit9CisjdW5kZWYgRlVOQ19OQU1FCisKK1NDTV9ERUZJTkUgKHNjbV9zdHJpbmdfbm9ybWFsaXpl X25mZCwgInN0cmluZy1ub3JtYWxpemUtbmZkIiwgMSwgMCwgMCwKKwkgICAgKFNDTSBzdHJpbmcp LAorCSAgICAiUmV0dXJucyB0aGUgTkZEIG5vcm1hbGl6ZWQgZm9ybSBvZiBAdmFye3N0cmluZ30u IikKKyNkZWZpbmUgRlVOQ19OQU1FIHNfc2NtX3N0cmluZ19ub3JtYWxpemVfbmZkCit7CisgIFND TV9WQUxJREFURV9TVFJJTkcgKDEsIHN0cmluZyk7CisgIHJldHVybiBub3JtYWxpemVfc3RyIChz dHJpbmcsIFVOSU5PUk1fTkZEKTsKK30KKyN1bmRlZiBGVU5DX05BTUUKKworU0NNX0RFRklORSAo c2NtX3N0cmluZ19ub3JtYWxpemVfbmZrYywgInN0cmluZy1ub3JtYWxpemUtbmZrYyIsIDEsIDAs IDAsCisJICAgIChTQ00gc3RyaW5nKSwKKwkgICAgIlJldHVybnMgdGhlIE5GS0Mgbm9ybWFsaXpl ZCBmb3JtIG9mIEB2YXJ7c3RyaW5nfS4iKQorI2RlZmluZSBGVU5DX05BTUUgc19zY21fc3RyaW5n X25vcm1hbGl6ZV9uZmtjCit7CisgIFNDTV9WQUxJREFURV9TVFJJTkcgKDEsIHN0cmluZyk7Cisg IHJldHVybiBub3JtYWxpemVfc3RyIChzdHJpbmcsIFVOSU5PUk1fTkZLQyk7Cit9CisjdW5kZWYg RlVOQ19OQU1FCisKK1NDTV9ERUZJTkUgKHNjbV9zdHJpbmdfbm9ybWFsaXplX25ma2QsICJzdHJp bmctbm9ybWFsaXplLW5ma2QiLCAxLCAwLCAwLAorCSAgICAoU0NNIHN0cmluZyksCisJICAgICJS ZXR1cm5zIHRoZSBORktEIG5vcm1hbGl6ZWQgZm9ybSBvZiBAdmFye3N0cmluZ30uIikKKyNkZWZp bmUgRlVOQ19OQU1FIHNfc2NtX3N0cmluZ19ub3JtYWxpemVfbmZrZAoreworICBTQ01fVkFMSURB VEVfU1RSSU5HICgxLCBzdHJpbmcpOworICByZXR1cm4gbm9ybWFsaXplX3N0ciAoc3RyaW5nLCBV TklOT1JNX05GS0QpOworfQorI3VuZGVmIEZVTkNfTkFNRQorCiAvKiBjb252ZXJ0cyBDIHNjbV9h cnJheSBvZiBzdHJpbmdzIHRvIFNDTSBzY21fbGlzdCBvZiBzdHJpbmdzLiAqLwogLyogSWYgYXJn YyA8IDAsIGEgbnVsbCB0ZXJtaW5hdGVkIHNjbV9hcnJheSBpcyBhc3N1bWVkLiAqLwogU0NNCmRp ZmYgLS1naXQgYS9saWJndWlsZS9zdHJpbmdzLmggYi9saWJndWlsZS9zdHJpbmdzLmgKaW5kZXgg ZWRmZjBmOC4uNmVhZmFmYSAxMDA2NDQKLS0tIGEvbGliZ3VpbGUvc3RyaW5ncy5oCisrKyBiL2xp Ymd1aWxlL3N0cmluZ3MuaApAQCAtMTQyLDYgKzE0MiwxMSBAQCBTQ01fSU5URVJOQUwgY2hhciAq c2NtX3RvX3N0cmluZ24gKFNDTSBzdHIsIHNpemVfdCAqbGVucCwKIFNDTV9JTlRFUk5BTCBzY21f dF91aW50OCAqc2NtX2lfdG9fdXRmOF9zdHJpbmcgKFNDTSBzdHIpOwogU0NNX0FQSSBzaXplX3Qg c2NtX3RvX2xvY2FsZV9zdHJpbmdidWYgKFNDTSBzdHIsIGNoYXIgKmJ1Ziwgc2l6ZV90IG1heF9s ZW4pOwogCitTQ01fQVBJIFNDTSBzY21fc3RyaW5nX25vcm1hbGl6ZV9uZmQgKFNDTSBzdHIpOwor U0NNX0FQSSBTQ00gc2NtX3N0cmluZ19ub3JtYWxpemVfbmZrZCAoU0NNIHN0cik7CitTQ01fQVBJ IFNDTSBzY21fc3RyaW5nX25vcm1hbGl6ZV9uZmMgKFNDTSBzdHIpOworU0NNX0FQSSBTQ00gc2Nt X3N0cmluZ19ub3JtYWxpemVfbmZrYyAoU0NNIHN0cik7CisKIFNDTV9BUEkgU0NNIHNjbV9tYWtm cm9tc3RycyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIAogDApkaWZmIC0tZ2l0IGEvdGVzdC1z dWl0ZS90ZXN0cy9zdHJpbmdzLnRlc3QgYi90ZXN0LXN1aXRlL3Rlc3RzL3N0cmluZ3MudGVzdApp bmRleCAwMTNjMWE4Li45ODQxNzhkIDEwMDY0NAotLS0gYS90ZXN0LXN1aXRlL3Rlc3RzL3N0cmlu Z3MudGVzdAorKysgYi90ZXN0LXN1aXRlL3Rlc3RzL3N0cmluZ3MudGVzdApAQCAtMzg2LDYgKzM4 Niw0NiBAQAogCSAoc3RyaW5nLWNpPj0/IChzdHJpbmctaW50cyAwKSAoc3RyaW5nLWludHMgMjU1 KSkpKSkKIAogOzsKKzs7IFVuaWNvZGUgc3RyaW5nIG5vcm1hbGl6YXRpb24gZm9ybXMKKzs7CisK Kzs7Cis7OyBzdHJpbmctbm9ybWFsaXplLW5mZAorOzsKKworKHdpdGgtdGVzdC1wcmVmaXggInN0 cmluZy1ub3JtYWxpemUtbmZkIgorCisgIChwYXNzLWlmICJjYW5vbmljYWwgZGVjb21wb3NpdGlv biBpcyBlcXVhbD8iCisgICAgKGVxdWFsPyAoc3RyaW5nLW5vcm1hbGl6ZS1uZmQgIlx4ZTkiKSAi XHg2NVx1MDMwMSIpKSkKKworOzsKKzs7IHN0cmluZy1ub3JtYWxpemUtbmZrZAorOzsKKworKHdp dGgtdGVzdC1wcmVmaXggInN0cmluZy1ub3JtYWxpemUtbmZrZCIKKyAgCisgIChwYXNzLWlmICJj b21wYXRpYmlsaXR5IGRlY29tcG9zaXRpb24gaXMgZXF1YWw/IgorICAgIChlcXVhbD8gKHN0cmlu Zy1ub3JtYWxpemUtbmZrZCAiXHUxZTliXHUwMzIzIikgInNcdTAzMjNcdTAzMDciKSkpCisKKzs7 Cis7OyBzdHJpbmctbm9ybWFsaXplLW5mYworOzsKKworKHdpdGgtdGVzdC1wcmVmaXggInN0cmlu Zy1ub3JtYWxpemUtbmZjIgorCisgIChwYXNzLWlmICJjYW5vbmljYWwgY29tcG9zaXRpb24gaXMg ZXF1YWw/IgorICAgIChlcXVhbD8gKHN0cmluZy1ub3JtYWxpemUtbmZjICJceDY1XHUwMzAxIikg Ilx4ZTkiKSkpCisKKzs7Cis7OyBzdHJpbmctbm9ybWFsaXplLW5ma2MKKzs7CisKKyh3aXRoLXRl c3QtcHJlZml4ICJzdHJpbmctbm9ybWFsaXplLW5ma2MiCisKKyAgKHBhc3MtaWYgImNvbXBhdGli aWxpdHkgY29tcG9zaXRpb24gaXMgZXF1YWw/IgorICAgIChlcXVhbD8gKHN0cmluZy1ub3JtYWxp emUtbmZrYyAiXHUxZTliXHUwMzIzIikgIlx1MWU2OSIpKSkKKworOzsKIDs7IHN0cmluZy1yZWYK IDs7CiAKLS0gCjEuNi4zLjMKCg== --0016e6d785539eda76047c27e65e--