From nobody@FreeBSD.org  Thu Jan  9 02:03:35 2014
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115])
	(using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by hub.freebsd.org (Postfix) with ESMTPS id 642DDC8F
	for <freebsd-gnats-submit@FreeBSD.org>; Thu,  9 Jan 2014 02:03:35 +0000 (UTC)
Received: from oldred.freebsd.org (oldred.freebsd.org [IPv6:2001:1900:2254:206a::50:4])
	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by mx1.freebsd.org (Postfix) with ESMTPS id 4E7E71932
	for <freebsd-gnats-submit@FreeBSD.org>; Thu,  9 Jan 2014 02:03:35 +0000 (UTC)
Received: from oldred.freebsd.org ([127.0.1.6])
	by oldred.freebsd.org (8.14.5/8.14.7) with ESMTP id s0923Zej095588
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 9 Jan 2014 02:03:35 GMT
	(envelope-from nobody@oldred.freebsd.org)
Received: (from nobody@localhost)
	by oldred.freebsd.org (8.14.5/8.14.5/Submit) id s0923Zp0095587;
	Thu, 9 Jan 2014 02:03:35 GMT
	(envelope-from nobody)
Message-Id: <201401090203.s0923Zp0095587@oldred.freebsd.org>
Date: Thu, 9 Jan 2014 02:03:35 GMT
From: David Cecchin <dcecchin@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: security/gnutls Misplaced { }
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         185595
>Category:       ports
>Synopsis:       security/gnutls Misplaced { }
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    novel
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jan 09 02:10:00 UTC 2014
>Closed-Date:    Mon Jan 13 15:11:36 UTC 2014
>Last-Modified:  Mon Jan 13 15:11:36 UTC 2014
>Originator:     David Cecchin
>Release:        FreeBSD 9.2-RELEASE
>Organization:
>Environment:
FreeBSD sanction.local 9.2-RELEASE FreeBSD 9.2-RELEASE #0 r255898: Thu Sep 26 22:50:31 UTC 2013     root@bake.isc.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64
>Description:
Creating documentation for file ../lib/auth_anon.c... Updating ./version.texi
  CC     errcodes.o
  CC     printlist.o
  CCLD   errcodes
ok
Creating documentation for file ../lib/gnutls_privkey.c... ok
Creating documentation for file ../lib/gnutls_record.c... ok
Creating documentation for file ../lib/gnutls_mem.c... ok
Creating documentation for file ../lib/auth_dhe_psk.c... ok
Creating documentation for file ../lib/ext_max_record.c... ok
Creating documentation for file ../lib/gnutls_anon_cred.c...   CCLD   printlist
ok
Creating documentation for file ../lib/gnutls_psk.c... ok
Creating documentation for file ../lib/gnutls_num.c... ok
Creating documentation for file ../lib/pkcs11_secret.c... ok
Creating documentation for file ../lib/auth_dh_common.c... ok
Creating documentation for file ../lib/gnutls_v2_compat.c... ok
Creating documentation for file ../lib/ext_safe_renegotiation.c... ok
Creating documentation for file ../lib/gnutls_cipher.c... ok
Creating documentation for file ../lib/gnutls_str.c... ok
Creating documentation for file ../lib/gnutls_helper.c... ok
Creating documentation for file ../lib/gnutls_cert.c... ok
Creating documentation for file ../lib/crypto.c... ok
Creating documentation for file ../lib/gnutls_handshake.c... ok
Creating documentation for file ../lib/gnutls_dh.c... ok
Creating documentation for file ../lib/x509_b64.c... ok
Creating documentation for file ../lib/gnutls_compress.c... ok
Creating documentation for file ../lib/gnutls_rsa_export.c... ok
Creating documentation for file ../lib/auth_srp_rsa.c... ok
Creating documentation for file ../lib/gnutls_auth.c... ok
Creating documentation for file ../lib/pkix_asn1_tab.c... ok
Creating documentation for file ../lib/auth_srp.c... ok
Creating documentation for file ../lib/auth_dhe.c... ok
Creating documentation for file ../lib/random.c... ok
Creating documentation for file ../lib/ext_server_name.c... ok
Creating documentation for file ../lib/gnutls_pk.c... ok
Creating documentation for file ../lib/gnutls_buffers.c... ok
Creating documentation for file ../lib/debug.c... ok
Creating documentation for file ../lib/gnutls_priority.c... ok
Creating documentation for file ../lib/gnutls_mpi.c... ok
Creating documentation for file ../lib/gnutls_algorithms.c... ok
Creating documentation for file ../lib/gnutls_global.c... ok
Creating documentation for file ../lib/gnutls_mbuffers.c... ok
Creating documentation for file ../lib/pkcs11.c... ok
Creating documentation for file ../lib/gnutls_hash_int.c... ok
Creating documentation for file ../lib/auth_rsa.c... ok
Creating documentation for file ../lib/gnutls_extensions.c... ok
Creating documentation for file ../lib/gnutls_cipher_int.c... ok
Creating documentation for file ../lib/gnutls_dh_primes.c... ok
Creating documentation for file ../lib/auth_srp_sb64.c... ok
Creating documentation for file ../lib/locks.c... ok
Creating documentation for file ../lib/auth_psk.c... ok
Creating documentation for file ../lib/gnutls_asn1_tab.c... ok
Creating documentation for file ../lib/auth_srp_passwd.c... ok
Creating documentation for file ../lib/gnutls_db.c... ok
Creating documentation for file ../lib/pkcs11_privkey.c... ok
Creating documentation for file ../lib/ext_signature.c... ok
Creating documentation for file ../lib/auth_cert.c... ok
Creating documentation for file ../lib/gnutls_psk_netconf.c... ok
Creating documentation for file ../lib/ext_session_ticket.c... ok
Creating documentation for file ../lib/system.c... ok
Creating documentation for file ../lib/gnutls_supplemental.c... ok
Creating documentation for file ../lib/auth_rsa_export.c... ok
Creating documentation for file ../lib/gnutls_kx.c... ok
Creating documentation for file ../lib/gnutls_x509.c... ok
Creating documentation for file ../lib/ext_cert_type.c... ok
Creating documentation for file ../lib/gnutls_srp.c... ok
Creating documentation for file ../lib/cryptodev.c... ok
Creating documentation for file ../lib/ext_srp.c... ok
Creating documentation for file ../lib/gnutls_datum.c... ok
Creating documentation for file ../lib/crypto-api.c... ok
Creating documentation for file ../lib/gnutls_constate.c... ok
Creating documentation for file ../lib/gnutls_sig.c... ok
Creating documentation for file ../lib/gnutls_session_pack.c... ok
Creating documentation for file ../lib/gnutls_pubkey.c... ok
Creating documentation for file ../lib/gnutls_session.c... ok
Creating documentation for file ../lib/gnutls_state.c... ok
Creating documentation for file ../lib/gnutls_errors.c... ok
Creating documentation for file ../lib/gnutls_ui.c... ok
Creating documentation for file ../lib/auth_psk_passwd.c... ok
Creating documentation for file ../lib/pkcs11_write.c... ok
Creating documentation for file ../lib/gnutls_alert.c... ok
./scripts/sort2.pl < gnutls-api.texi-tmp > gnutls-api.texi-tmp2
rm -f gnutls-api.texi-tmp
mv -f gnutls-api.texi-tmp2 gnutls-api.texi
restore=: && backupdir=".am$$" && \
am__cwd=`pwd` && CDPATH="${ZSH_VERSION+.}:" && cd . && \
rm -rf $backupdir && mkdir $backupdir && \
if (/bin/sh /usr/ports/security/gnutls/work/gnutls-2.12.23/build-aux/missing --run makeinfo --version) >/dev/null 2>&1; then \
  for f in gnutls.info gnutls.info-[0-9] gnutls.info-[0-9][0-9] gnutls.i[0-9] gnutls.i[0-9][0-9]; do \
    if test -f $f; then mv $f $backupdir; restore=mv; else :; fi; \
  done; \
else :; fi && \
cd "$am__cwd"; \
if /bin/sh /usr/ports/security/gnutls/work/gnutls-2.12.23/build-aux/missing --run makeinfo -I ../doc  -I . \
 -o gnutls.info gnutls.texi; \
then \
  rc=0; \
  CDPATH="${ZSH_VERSION+.}:" && cd .; \
else \
  rc=$?; \
  CDPATH="${ZSH_VERSION+.}:" && cd . && \
  $restore $backupdir/* `echo "./gnutls.info" | sed 's|[^/]*$||'`; \
fi; \
rm -rf $backupdir; exit $rc
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:8: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:8: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:11: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:11: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:11: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:11: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:13: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:13: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:19: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:19: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:22: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:22: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:23: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:23: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:30: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:30: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:36: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:36: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:41: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:41: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:44: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:44: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:45: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:45: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:47: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:47: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:50: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:50: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:57: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:252: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:285: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:285: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:310: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:310: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:336: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:336: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:385: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:385: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:566: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:566: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:624: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:624: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:625: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:625: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:625: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:625: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:947: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:947: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:948: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:948: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:956: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:956: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:959: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:959: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:980: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:980: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:982: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:982: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:989: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:989: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:1000: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:1000: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:1016: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:1016: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:1021: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:1021: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:1037: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:1037: Misplaced }.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:1042: Misplaced {.
/usr/ports/security/gnutls/work/gnutls-2.12.23/doc//gnutls-api.texi:1042: Misplaced }.
Too many errors!  Gave up.
gmake[4]: *** [gnutls.info] Error 1
gmake[4]: Leaving directory `/usr/ports/security/gnutls/work/gnutls-2.12.23/doc'
gmake[3]: *** [all-recursive] Error 1
gmake[3]: Leaving directory `/usr/ports/security/gnutls/work/gnutls-2.12.23/doc'
gmake[2]: *** [all] Error 2
gmake[2]: Leaving directory `/usr/ports/security/gnutls/work/gnutls-2.12.23/doc'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/usr/ports/security/gnutls/work/gnutls-2.12.23'
gmake: *** [all] Error 2
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** [do-build] Error code 1

Stop in /usr/ports/security/gnutls.
*** [build] Error code 1

Stop in /usr/ports/security/gnutls.

===>>> make failed for security/gnutls
===>>> Aborting update

===>>> Killing background jobs
Terminated

===>>> You can restart from the point of failure with this command line:
       portmaster <flags> security/gnutls 

===>>> Exiting
>How-To-Repeat:
Happens whenever I try to install security/gnutls.
>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->novel 
Responsible-Changed-By: gjb 
Responsible-Changed-When: Thu Jan 9 02:17:34 UTC 2014 
Responsible-Changed-Why:  
Fix synopsis and assign. 


http://www.freebsd.org/cgi/query-pr.cgi?pr=185595 

From: Yasuhiro KIMURA <yasu@utahime.org>
To: bug-followup@FreeBSD.org, dcecchin@gmail.com, novel@FreeBSD.org
Cc:  
Subject: Re: ports/185595: security/gnutls Misplaced { }
Date: Thu, 09 Jan 2014 15:33:32 +0900

 This is a multi-part message in MIME format.
 --------------070601080001070505020300
 Content-Type: text/plain; charset=ISO-2022-JP
 Content-Transfer-Encoding: 7bit
 
 Hello,
 
 This problem seems to happen with perl 5.18. Attached patch, obtained
 from Debain, fixes it(While here, converted to new LIB_DEPENDS format).
 
 --------------070601080001070505020300
 Content-Type: text/plain; charset=Shift_JIS;
  name="patch-gnutls"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment;
  filename="patch-gnutls"
 
 SW5kZXg6IE1ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1ha2VmaWxlCShyZXZpc2lvbiAz
 MzkxMTQpCisrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMTMsOSArMTMsOSBAQAog
 CiBMSUNFTlNFPQlHUEx2MwogCi1MSUJfREVQRU5EUz0JbmV0dGxlOiR7UE9SVFNESVJ9L3Nl
 Y3VyaXR5L25ldHRsZSBcCi0JCWdwZy1lcnJvcjoke1BPUlRTRElSfS9zZWN1cml0eS9saWJn
 cGctZXJyb3IgXAotCQlwMTEta2l0OiR7UE9SVFNESVJ9L3NlY3VyaXR5L3AxMS1raXQKK0xJ
 Ql9ERVBFTkRTPQlsaWJuZXR0bGUuc286JHtQT1JUU0RJUn0vc2VjdXJpdHkvbmV0dGxlIFwK
 KwkJbGliZ3BnLWVycm9yLnNvOiR7UE9SVFNESVJ9L3NlY3VyaXR5L2xpYmdwZy1lcnJvciBc
 CisJCWxpYnAxMS1raXQuc286JHtQT1JUU0RJUn0vc2VjdXJpdHkvcDExLWtpdAogCiBDT05G
 TElDVFM9CWdudXRscy1kZXZlbC1bMC05XSoKIApAQCAtNDYsMTMgKzQ2LDEzIEBACiAuaW5j
 bHVkZSA8YnNkLnBvcnQub3B0aW9ucy5taz4KIAogLmlmICR7UE9SVF9PUFRJT05TOk1MSUJU
 QVNOMX0KLUxJQl9ERVBFTkRTKz0JCXRhc24xOiR7UE9SVFNESVJ9L3NlY3VyaXR5L2xpYnRh
 c24xCitMSUJfREVQRU5EUys9CQlsaWJ0YXNuMS5zbzoke1BPUlRTRElSfS9zZWN1cml0eS9s
 aWJ0YXNuMQogLmVsc2UKIENPTkZJR1VSRV9BUkdTKz0JLS13aXRoLWluY2x1ZGVkLWxpYnRh
 c24xCiAuZW5kaWYKIAogLmlmICR7UE9SVF9PUFRJT05TOk1MWk99Ci1MSUJfREVQRU5EUys9
 CQlsem8yOiR7UE9SVFNESVJ9L2FyY2hpdmVycy9sem8yCitMSUJfREVQRU5EUys9CQlsaWJs
 em8yLnNvOiR7UE9SVFNESVJ9L2FyY2hpdmVycy9sem8yCiBDT05GSUdVUkVfQVJHUys9CS0t
 d2l0aC1sem8KIC5lbHNlCiBDT05GSUdVUkVfQVJHUys9CS0td2l0aC1sem89bm8KSW5kZXg6
 IGZpbGVzL3BhdGNoLWRvYy1zY3JpcHRzLWdkb2MKPT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmlsZXMv
 cGF0Y2gtZG9jLXNjcmlwdHMtZ2RvYwkocmV2aXNpb24gMCkKKysrIGZpbGVzL3BhdGNoLWRv
 Yy1zY3JpcHRzLWdkb2MJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MjAgQEAKKy0tLSBk
 b2Mvc2NyaXB0cy9nZG9jLm9yaWcJMjAxMS0wNC0wOCAwOTozMDo0NC4wMDAwMDAwMDAgKzA5
 MDAKKysrKyBkb2Mvc2NyaXB0cy9nZG9jCTIwMTQtMDEtMDkgMTU6MDY6MjAuMDAwMDAwMDAw
 ICswOTAwCitAQCAtMSw0ICsxLDYgQEAKKy0jIS91c3IvYmluL3BlcmwKKytldmFsICcoZXhp
 dCAkPzApJyAmJiBldmFsICdleGVjIHBlcmwgIiQwIiAkezErIiRAIn0nCisrICAmIGV2YWwg
 J2V4ZWMgcGVybCAiJDAiICRhcmd2OnEnCisrICAgIGlmIDA7CisgCisgIyMgQ29weXJpZ2h0
 IChjKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IFNp
 bW9uIEpvc2Vmc3NvbgorICMjICAgICAgICAgICAgICAgICAgICBhZGRlZCAtdGV4aW5mbywg
 LWxpc3RmdW5jLCAtcGtnLW5hbWUKK0BAIC03LDYgKzksOCBAQAorICMjIENvcHlyaWdodCAo
 YykgMjAwMSwgMjAwMiBOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcworICMjICAgICAgICAgICAg
 ICAgICAgICBhZGRlZCAtdGV4CisgIyMgQ29weXJpZ2h0IChjKSAxOTk4IE1pY2hhZWwgWnVj
 Y2hpCisrIyMgQ29weXJpZ2h0IChjKSAyMDEzIEFkYW0gU2FtcHNvbgorKyMjICAgICAgICAg
 ICAgICAgICAgICBtYWRlIGhpZ2hsaWdodGluZyBub3QgZGVwZW5kIG9uIGhhc2ggb3JkZXIs
 IGZvciBQZXJsIDUuMTgKKyAKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5
 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIyBpdCB1bmRlciB0aGUg
 dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
 eQorQEAgLTEzMiw1NyArMTM2LDU5IEBACisgdXNlIFBPU0lYIHF3KHN0cmZ0aW1lKTsKKyAK
 KyAjIG1hdGNoIGV4cHJlc3Npb25zIHVzZWQgdG8gZmluZCBlbWJlZGRlZCB0eXBlIGluZm9y
 bWF0aW9uCistJHR5cGVfY29uc3RhbnQgPSAiKCg/PCFcIilcXFwlKFxcdyspKSI7CistJHR5
 cGVfZnVuYyA9ICIoXFx3K1xcKFxcKSkiOworLSR0eXBlX3BhcmFtID0gIlxcXEAoXFx3Kyki
 OworLSR0eXBlX3N0cnVjdCA9ICJcXFwjKFxcdyspIjsKKy0kdHlwZV9lbnYgPSAiKFxcXCRc
 XHcrKSI7CisrJHR5cGVfY29uc3RhbnQgPSAiXFxcJShbQS1aYS16MC05X10rKSI7CisrJHR5
 cGVfZnVuYyA9ICIoW0EtWmEtejAtOV9dK1xcKFxcKSkiOworKyR0eXBlX3BhcmFtID0gJ1xA
 KFtBLVphLXowLTlfXSspXHMqJzsKKyskdHlwZV9zdHJ1Y3QgPSAiXFxcIyhbQS1aYS16MC05
 X10rKSI7CisrJHR5cGVfZW52ID0gIihcXFwkW0EtWmEtejAtOV9dKykiOworIAorIAorICMg
 T3V0cHV0IGNvbnZlcnNpb24gc3Vic3RpdHV0aW9ucy4KKyAjICBPbmUgZm9yIGVhY2ggb3V0
 cHV0IGZvcm1hdAorIAorICMgdGhlc2Ugd29yayBmYWlybHkgd2VsbAorLSVoaWdobGlnaHRz
 X2h0bWwgPSAoICR0eXBlX2NvbnN0YW50LCAiPGk+XCQyPC9pPiIsCistCQkgICAgICR0eXBl
 X2Z1bmMsICI8Yj5cJDE8L2I+IiwKKy0JCSAgICAgJHR5cGVfc3RydWN0LCAiPGk+XCQxPC9p
 PiIsCistCQkgICAgICR0eXBlX3BhcmFtLCAiPHR0PjxiPlwkMTwvYj48L3R0PiIgKTsKKytA
 aGlnaGxpZ2h0c19odG1sID0gKCBbJHR5cGVfY29uc3RhbnQsICciPGk+JDE8L2k+IiddLAor
 KwkJICAgICBbJHR5cGVfZnVuYywgJyI8Yj4kMTwvYj4iJ10sCisrCQkgICAgIFskdHlwZV9z
 dHJ1Y3QsICciPGk+JDE8L2k+IiddLAorKwkJICAgICBbJHR5cGVfcGFyYW0sICciIDx0dD48
 Yj4kMTwvYj48L3R0PiAiJ10gKTsKKyAkYmxhbmtsaW5lX2h0bWwgPSAiPHA+IjsKKyAKKy0l
 aGlnaGxpZ2h0c190ZXhpbmZvID0gKCAkdHlwZV9jb25zdGFudCwgIlxcXEBjb2Rle1wkMn0i
 LAorLQkJCSR0eXBlX2Z1bmMsICJcXFxAY29kZXtcJDF9IiwKKy0JCQkkdHlwZV9zdHJ1Y3Qs
 ICJcXFxAY29kZXtcJDF9IiwKKy0JCQkkdHlwZV9wYXJhbSwgIlxcXEBjb2Rle1wkMX0iICk7
 CisrQGhpZ2hsaWdodHNfdGV4aW5mbyA9ICggWyR0eXBlX3BhcmFtLCAnIiBcQGNvZGV7JDF9
 ICInXSwKKysJCQlbJHR5cGVfY29uc3RhbnQsICciXEBjb2RleyQxfSAiJ10sCisrCQkJWyR0
 eXBlX2Z1bmMsICciXEBjb2RleyQxfSAiJ10sCisrCQkJWyR0eXBlX3N0cnVjdCwgJyJcQGNv
 ZGV7JDF9ICInXSwKKysJCQkgKTsKKyAkYmxhbmtsaW5lX3RleGluZm8gPSAiIjsKKyAKKy0l
 aGlnaGxpZ2h0c190ZXggPSAoICR0eXBlX2NvbnN0YW50LCAie1xcXFxpdCBcJDJ9IiwKKy0J
 CSAgICAgJHR5cGVfZnVuYywgIntcXFxcYmYgXCQxfSIsCistCQkgICAgICR0eXBlX3N0cnVj
 dCwgIntcXFxcaXQgXCQxfSIsCistCQkgICAgICR0eXBlX3BhcmFtLCAie1xcXFxiZiBcJDF9
 IiApOworK0BoaWdobGlnaHRzX3RleCA9ICggWyR0eXBlX3BhcmFtLCAnIiB7XFxcYmYgJDF9
 ICInXSwKKysJCVskdHlwZV9jb25zdGFudCwgJyJ7XFxcaXQgJDF9IiddLAorKwkJWyR0eXBl
 X2Z1bmMsICcie1xcXGJmICQxfSInXSwKKysJCVskdHlwZV9zdHJ1Y3QsICcie1xcXGl0ICQx
 fSInXSwKKysJCSAgICAgICk7CisgJGJsYW5rbGluZV90ZXggPSAiXFxcXCI7CisgCisgIyBz
 Z21sLCBkb2Nib29rIGZvcm1hdAorLSVoaWdobGlnaHRzX3NnbWwgPSAoICR0eXBlX2NvbnN0
 YW50LCAiPHJlcGxhY2VhYmxlIGNsYXNzPVwib3B0aW9uXCI+XCQyPC9yZXBsYWNlYWJsZT4i
 LAorLQkJICAgICAkdHlwZV9mdW5jLCAiPGZ1bmN0aW9uPlwkMTwvZnVuY3Rpb24+IiwKKy0J
 CSAgICAgJHR5cGVfc3RydWN0LCAiPHN0cnVjdG5hbWU+XCQxPC9zdHJ1Y3RuYW1lPiIsCist
 CQkgICAgICR0eXBlX2VudiwgIjxlbnZhcj5cJDE8L2VudmFyPiIsCistCQkgICAgICR0eXBl
 X3BhcmFtLCAiPHBhcmFtZXRlcj5cJDE8L3BhcmFtZXRlcj4iICk7CisrQGhpZ2hsaWdodHNf
 c2dtbCA9ICggWyR0eXBlX2NvbnN0YW50LCAnIjxyZXBsYWNlYWJsZSBjbGFzcz1cIm9wdGlv
 blwiPiQxPC9yZXBsYWNlYWJsZT4iJ10sCisrCQkgICAgIFskdHlwZV9mdW5jLCAnIjxmdW5j
 dGlvbj4kMTwvZnVuY3Rpb24+IiddLAorKwkJICAgICBbJHR5cGVfc3RydWN0LCAnIjxzdHJ1
 Y3RuYW1lPiQxPC9zdHJ1Y3RuYW1lPiInXSwKKysJCSAgICAgWyR0eXBlX2VudiwgJyI8ZW52
 YXI+JDE8L2VudmFyPiInXSwKKysJCSAgICAgWyR0eXBlX3BhcmFtLCAnIiA8cGFyYW1ldGVy
 PiQxPC9wYXJhbWV0ZXI+ICInXSApOworICRibGFua2xpbmVfc2dtbCA9ICI8L3BhcmE+PHBh
 cmE+XG4iOworIAorICMgdGhlc2UgYXJlIHByZXR0eSByb3VnaAorLSVoaWdobGlnaHRzX21h
 biA9ICggJHR5cGVfY29uc3RhbnQsICJcXFxcZkJcJDJcXFxcZlAiLAorLQkJICAgICR0eXBl
 X2Z1bmMsICJcXFxcZkJcJDFcXFxcZlAiLAorLQkJICAgICR0eXBlX3N0cnVjdCwgIlxcXFxm
 QlwkMVxcXFxmUCIsCistCQkgICAgJHR5cGVfcGFyYW0sICJcXFxcZklcJDFcXFxcZlAiICk7
 CisrQGhpZ2hsaWdodHNfbWFuID0gKCBbJHR5cGVfY29uc3RhbnQsICciXFxcZkIkMVxcXGZQ
 IiddLAorKwkJICAgIFskdHlwZV9mdW5jLCAnIlxcXGZCJDFcXFxmUCInXSwKKysJCSAgICBb
 JHR5cGVfc3RydWN0LCAnIlxcXGZCJDFcXFxmUCInXSwKKysJCSAgICBbJHR5cGVfcGFyYW0s
 ICciIFxcXGZJJDFcXFxmUCAiJ10gKTsKKyAkYmxhbmtsaW5lX21hbiA9ICIiOworIAorICMg
 dGV4dC1tb2RlCistJWhpZ2hsaWdodHNfdGV4dCA9ICggJHR5cGVfY29uc3RhbnQsICJcJDIi
 LAorLQkJICAgICAkdHlwZV9mdW5jLCAiXCQxIiwKKy0JCSAgICAgJHR5cGVfc3RydWN0LCAi
 XCQxIiwKKy0JCSAgICAgJHR5cGVfcGFyYW0sICJcJDEiICk7CisrQGhpZ2hsaWdodHNfdGV4
 dCA9ICggWyR0eXBlX2NvbnN0YW50LCAnIiQxIiddLAorKwkJICAgICBbJHR5cGVfZnVuYywg
 JyIkMSInXSwKKysJCSAgICAgWyR0eXBlX3N0cnVjdCwgJyIkMSInXSwKKysJCSAgICAgWyR0
 eXBlX3BhcmFtLCAnIiQxICInXSApOworICRibGFua2xpbmVfdGV4dCA9ICIiOworLQorK215
 ICRsaW5lcHJlZml4ID0gIiI7CisgCisgc3ViIHVzYWdlIHsKKyAgICAgcHJpbnQgIlVzYWdl
 OiAkMCBbIC12IF0gWyAtZG9jYm9vayB8IC1odG1sIHwgLXRleHQgfCAtbWFuIHwgLXRleCB8
 IC10ZXhpbmZvICAtbGlzdGZ1bmMgXVxuIjsKK0BAIC0yMDEsNyArMjA3LDcgQEAKKyAKKyAk
 dmVyYm9zZSA9IDA7CisgJG91dHB1dF9tb2RlID0gIm1hbiI7CistJWhpZ2hsaWdodHMgPSAl
 aGlnaGxpZ2h0c19tYW47CisrQGhpZ2hsaWdodHMgPSBAaGlnaGxpZ2h0c19tYW47CisgJGJs
 YW5rbGluZSA9ICRibGFua2xpbmVfbWFuOworICRtb2R1bGVuYW1lID0gIkFQSSBEb2N1bWVu
 dGF0aW9uIjsKKyAkc291cmNldmVyc2lvbiA9IHN0cmZ0aW1lICIlWS0lbS0lZCIsIGxvY2Fs
 dGltZTsKK0BAIC0yMTAsMjcgKzIxNiwyNyBAQAorICAgICAkY21kID0gc2hpZnQgQEFSR1Y7
 CisgICAgIGlmICgkY21kIGVxICItaHRtbCIpIHsKKyAJJG91dHB1dF9tb2RlID0gImh0bWwi
 OworLQklaGlnaGxpZ2h0cyA9ICVoaWdobGlnaHRzX2h0bWw7CisrCUBoaWdobGlnaHRzID0g
 QGhpZ2hsaWdodHNfaHRtbDsKKyAJJGJsYW5rbGluZSA9ICRibGFua2xpbmVfaHRtbDsKKyAg
 ICAgfSBlbHNpZiAoJGNtZCBlcSAiLW1hbiIpIHsKKyAJJG91dHB1dF9tb2RlID0gIm1hbiI7
 CistCSVoaWdobGlnaHRzID0gJWhpZ2hsaWdodHNfbWFuOworKwlAaGlnaGxpZ2h0cyA9IEBo
 aWdobGlnaHRzX21hbjsKKyAJJGJsYW5rbGluZSA9ICRibGFua2xpbmVfbWFuOworICAgICB9
 IGVsc2lmICgkY21kIGVxICItdGV4IikgeworIAkkb3V0cHV0X21vZGUgPSAidGV4IjsKKy0J
 JWhpZ2hsaWdodHMgPSAlaGlnaGxpZ2h0c190ZXg7CisrCUBoaWdobGlnaHRzID0gQGhpZ2hs
 aWdodHNfdGV4OworIAkkYmxhbmtsaW5lID0gJGJsYW5rbGluZV90ZXg7CisgICAgIH0gZWxz
 aWYgKCRjbWQgZXEgIi10ZXhpbmZvIikgeworIAkkb3V0cHV0X21vZGUgPSAidGV4aW5mbyI7
 CistCSVoaWdobGlnaHRzID0gJWhpZ2hsaWdodHNfdGV4aW5mbzsKKysJQGhpZ2hsaWdodHMg
 PSBAaGlnaGxpZ2h0c190ZXhpbmZvOworIAkkYmxhbmtsaW5lID0gJGJsYW5rbGluZV90ZXhp
 bmZvOworICAgICB9IGVsc2lmICgkY21kIGVxICItdGV4dCIpIHsKKyAJJG91dHB1dF9tb2Rl
 ID0gInRleHQiOworLQklaGlnaGxpZ2h0cyA9ICVoaWdobGlnaHRzX3RleHQ7CisrCUBoaWdo
 bGlnaHRzID0gQGhpZ2hsaWdodHNfdGV4dDsKKyAJJGJsYW5rbGluZSA9ICRibGFua2xpbmVf
 dGV4dDsKKyAgICAgfSBlbHNpZiAoJGNtZCBlcSAiLWRvY2Jvb2siKSB7CisgCSRvdXRwdXRf
 bW9kZSA9ICJzZ21sIjsKKy0JJWhpZ2hsaWdodHMgPSAlaGlnaGxpZ2h0c19zZ21sOworKwlA
 aGlnaGxpZ2h0cyA9IEBoaWdobGlnaHRzX3NnbWw7CisgCSRibGFua2xpbmUgPSAkYmxhbmts
 aW5lX3NnbWw7CisgICAgIH0gZWxzaWYgKCRjbWQgZXEgIi1saXN0ZnVuYyIpIHsKKyAJJG91
 dHB1dF9tb2RlID0gImxpc3RmdW5jIjsKK0BAIC0yNzAsNiArMjc2LDggQEAKKyAgICAgbXkg
 JG5hbWUgPSBzaGlmdCBAXzsKKyAgICAgbXkgJGNvbnRlbnRzID0gam9pbiAiXG4iLCBAXzsK
 KyAKKysgICAgJG5hbWUgPSAiICRuYW1lIjsKKysKKyAgICAgaWYgKCRuYW1lID1+IG0vJHR5
 cGVfY29uc3RhbnQvKSB7CisgCSRuYW1lID0gJDE7CisgIwlwcmludCBTVERFUlIgImNvbnN0
 YW50IHNlY3Rpb24gJyQxJyA9ICckY29udGVudHMnXG4iOworQEAgLTI4MCw2ICsyODgsNyBA
 QAorIAkkcGFyYW1ldGVyc3skbmFtZX0gPSAkY29udGVudHM7CisgICAgIH0gZWxzZSB7Cisg
 IwlwcmludCBTVERFUlIgIm90aGVyIHNlY3Rpb24gJyRuYW1lJyA9ICckY29udGVudHMnXG4i
 OworKwkkbmFtZSA9fiB0ci8gLy9kOworIAkkc2VjdGlvbnN7JG5hbWV9ID0gJGNvbnRlbnRz
 OworIAlwdXNoIEBzZWN0aW9ubGlzdCwgJG5hbWU7CisgICAgIH0KK0BAIC0yOTYsMzUgKzMw
 NSwxNSBAQAorICMgIHNlY3Rpb25zID0+ICVkZXNjcmlvbnQgZGVzY3JpcHRpb25zCisgIyAg
 CisgCistc3ViIHJlcHN0ciB7CistICAgICRwYXR0ZXJuID0gc2hpZnQ7CistICAgICRyZXBs
 ID0gc2hpZnQ7CistICAgICRtYXRjaDEgPSBzaGlmdDsKKy0gICAgJG1hdGNoMiA9IHNoaWZ0
 OworLSAgICAkbWF0Y2gzID0gc2hpZnQ7CistICAgICRtYXRjaDQgPSBzaGlmdDsKKy0KKy0g
 ICAgJG91dHB1dCA9ICRyZXBsOworLSAgICAkb3V0cHV0ID1+IHMsXCQxLCRtYXRjaDEsZzsK
 Ky0gICAgJG91dHB1dCA9fiBzLFwkMiwkbWF0Y2gyLGc7CistICAgICRvdXRwdXQgPX4gcyxc
 JDMsJG1hdGNoMyxnOworLSAgICAkb3V0cHV0ID1+IHMsXCQ0LCRtYXRjaDQsZzsKKy0KKy0g
 ICAgZXZhbCAiXCRyZXR1cm4gPSBxcS8kb3V0cHV0LyI7CistCistIyAgICBwcmludCAicGF0
 dGVybiAkcGF0dGVybiBtYXRjaGVkIDE9JG1hdGNoMSAyPSRtYXRjaDIgMz0kbWF0Y2gzIDQ9
 JG1hdGNoNCByZXBsYWNlICRyZXBsIHlpZWxkZWQgJG91dHB1dCBpbnRlcnBvbGF0ZWQgJHJl
 dHVyblxuIjsKKy0KKy0gICAgJHJldHVybjsKKy19CistCisgc3ViIGp1c3RfaGlnaGxpZ2h0
 IHsKKyAgICAgbXkgJGNvbnRlbnRzID0gam9pbiAiXG4iLCBAXzsKKyAgICAgbXkgJGxpbmU7
 CisgICAgIG15ICRyZXQgPSAiIjsKKyAKKy0gICAgZm9yZWFjaCAkcGF0dGVybiAoa2V5cyAl
 aGlnaGxpZ2h0cykgeworLSMJcHJpbnQgInNjYW5uaW5nIHBhdHRlcm4gJHBhdHRlcm4gKCRo
 aWdobGlnaHRzeyRwYXR0ZXJufSlcbiI7CistCSRjb250ZW50cyA9fiBzOiRwYXR0ZXJuOnJl
 cHN0cigkcGF0dGVybiwgJGhpZ2hsaWdodHN7JHBhdHRlcm59LCAkMSwgJDIsICQzLCAkNCk6
 Z3NlOworKyAgICBmb3JlYWNoICRoaWdobGlnaHQgKEBoaWdobGlnaHRzKSB7CisrCW15ICgk
 cGF0dGVybiwgJHJlcGxhY2UpID0gQCRoaWdobGlnaHQ7CisrCSNwcmludCAic2Nhbm5pbmcg
 cGF0dGVybiAkcGF0dGVybiAoJHJlcGxhY2UpXG4iOworKwkkY29udGVudHMgPX4gcy8kcGF0
 dGVybi8kcmVwbGFjZS9nZWVzOworICAgICB9CisgICAgIGZvcmVhY2ggJGxpbmUgKHNwbGl0
 ICJcbiIsICRjb250ZW50cykgeworIAlpZiAoJGxpbmUgZXEgIiIpeworQEAgLTM3MCwxMyAr
 MzU5LDQ1IEBACisgCX0KKyAgICAgfQorICAgICBmb3JlYWNoICRzZWN0aW9uIChAeyRhcmdz
 eydzZWN0aW9ubGlzdCd9fSkgeworKwkkc2VjdGlvbiA9fiBzL1xALy9nOworIAlwcmludCAi
 XG5cQHN0cm9uZ3skc2VjdGlvbjp9ICIgaWYgJHNlY3Rpb24gbmUgJHNlY3Rpb25fZGVmYXVs
 dDsKKy0JJGFyZ3N7J3NlY3Rpb25zJ317JHNlY3Rpb259ID1+IHM6KFt7fV0pOlxAXDE6Z3M7
 CisrCSRhcmdzeydzZWN0aW9ucyd9eyRzZWN0aW9ufSA9fiBzOihbe31dKTpcQCQxOmdzOwor
 IAlvdXRwdXRfaGlnaGxpZ2h0KCRhcmdzeydzZWN0aW9ucyd9eyRzZWN0aW9ufSk7CisgICAg
 IH0KKyAgICAgcHJpbnQgIlxAZW5kIGRlZnR5cGVmdW5cblxuIjsKKyB9CisgCisrc3ViIG91
 dHB1dF9lbnVtX3RleGluZm8geworKyAgICBteSAlYXJncyA9ICV7JF9bMF19OworKyAgICBt
 eSAoJHBhcmFtZXRlciwgJHNlY3Rpb24pOworKyAgICBteSAkY291bnQ7CisrICAgIG15ICRu
 YW1lID0gJGFyZ3N7J2VudW0nfTsKKysgICAgbXkgJHBhcmFtOworKyAgICBteSAkcGFyYW0y
 OworKyAgICBteSAkc2VjOworKyAgICBteSAkY2hlY2s7CisrICAgIG15ICR0eXBlOworKwor
 KyAgICBwcmludCAiXG5cQGMgJG5hbWVcbiI7CisrICAgIHByaW50ICJcQHRhYmxlIFxAY29k
 ZVxuIjsKKysKKysgICAgJGNoZWNrPTA7CisrICAgIGZvcmVhY2ggJHBhcmFtZXRlciAoQHsk
 YXJnc3sncGFyYW1ldGVybGlzdCd9fSkgeworKyAgICAgICAgJHBhcmFtMSA9ICRwYXJhbWV0
 ZXI7CisrCSRwYXJhbTEgPX4gcy9fL19cQC0vZzsKKysKKysJJGNoZWNrID0gMTsKKysJcHJp
 bnQgIlxAaXRlbSAiLiRwYXJhbTEuIlxuIjsKKysjCXByaW50ICJcbiI7CisrCisrICAgICAg
 ICAkcGFyYW0yID0gJGFyZ3N7J3BhcmFtZXRlcnMnfXskcGFyYW1ldGVyfTsKKysJJG91dCA9
 IGp1c3RfaGlnaGxpZ2h0KCRwYXJhbTIpOworKwljaG9tcCAkb3V0OworKwlwcmludCAkb3V0
 IC4gIlxuIjsKKysgICAgfQorKyAgICBwcmludCAiXEBlbmQgdGFibGVcbiI7CisrfQorKwor
 ICMgb3V0cHV0IGluIGh0bWwKKyBzdWIgb3V0cHV0X2h0bWwgeworICAgICBteSAlYXJncyA9
 ICV7JF9bMF19OworQEAgLTQyOCw3ICs0NDksOSBAQAorIAorICAgICAkZnVuYyA9fiBzL18v
 XFxfL2c7CisgCistICAgIHByaW50ICJcblxuXFxzdWJzZWN0aW9ueyIuICRmdW5jIC4gIn1c
 blxcbGFiZWx7IiAuICRhcmdzeydmdW5jdGlvbid9IC4gIn1cbiI7CisrICAgIHByaW50ICJc
 blxuXFxiZWdpbntmdW5jdGlvbn1cbiI7CisrICAgIHByaW50ICJcXGZ1bmN0aW9uVGl0bGV7
 Ii4gJGZ1bmMgLiAifVxuIjsKKysgICAgcHJpbnQgIlxcaW5kZXh7Ii4gJGZ1bmMgLiAifVxu
 IjsKKyAKKyAgICAgJHR5cGUgPSAkYXJnc3snZnVuY3Rpb250eXBlJ307CisgICAgICR0eXBl
 ID1+IHMvXy9cXF8vZzsKK0BAIC00NTEsOSArNDc0LDggQEAKKyAgICAgfQorICAgICBwcmlu
 dCAiKVxuIjsKKyAKKy0gICAgcHJpbnQgIlxue1xcbGFyZ2V7QXJndW1lbnRzfX1cbiI7Cisr
 ICAgIHByaW50ICJcblxcYmVnaW57ZnVuY3Rpb25Bcmd1bWVudHN9XG4iOworIAorLSAgICBw
 cmludCAiXFxiZWdpbntpdGVtaXplfVxuIjsKKyAgICAgJGNoZWNrPTA7CisgICAgIGZvcmVh
 Y2ggJHBhcmFtZXRlciAoQHskYXJnc3sncGFyYW1ldGVybGlzdCd9fSkgeworICAgICAgICAg
 JHBhcmFtMSA9ICRhcmdzeydwYXJhbWV0ZXJ0eXBlcyd9eyRwYXJhbWV0ZXJ9OworQEAgLTQ2
 MiwxMSArNDg0LDEyIEBACisgCSRwYXJhbTIgPX4gcy9fL1xcXy9nOworIAorIAkkY2hlY2sg
 PSAxOworLQlwcmludCAiXFxpdGVtIHtcXGl0ICIuJHBhcmFtMS4ifSB7XFxiZiAiLiRwYXJh
 bTIuIn06IFxuIjsKKysJcHJpbnQgIlxcZnVuY3Rpb25Bcmd1bWVudCB7XFxpdCAiLiRwYXJh
 bTEuIn0ge1xcYmYgIi4kcGFyYW0yLiJ9OiBcbiI7CisgIwlwcmludCAiXG4iOworIAorIAkk
 cGFyYW0zID0gJGFyZ3N7J3BhcmFtZXRlcnMnfXskcGFyYW1ldGVyfTsKKy0JJHBhcmFtMyA9
 fiBzLyMoW2EtekEtWlxfXSspL3tcXGl0IFwxfS9nOworKwkkcGFyYW0zID1+IHMvXCMoW2Et
 ekEtWlxfXSspL3tcXGl0ICQxfS9nOworKwkkcGFyYW0zID1+IHMvXCUoW2EtekEtWlxfXSsp
 L3tcXGJmICQxfS9nOworIAorIAkkb3V0ID0ganVzdF9oaWdobGlnaHQoJHBhcmFtMyk7Cisg
 CSRvdXQgPX4gcy9fL1xcXy9nOworQEAgLTQ3NSwzMSArNDk4LDcyIEBACisgICAgIGlmICgk
 Y2hlY2s9PTApIHsKKyAJcHJpbnQgIlxcaXRlbSB2b2lkXG4iOworICAgICB9CistICAgIHBy
 aW50ICJcXGVuZHtpdGVtaXplfVxuIjsKKysgICAgcHJpbnQgIlxcZW5ke2Z1bmN0aW9uQXJn
 dW1lbnRzfVxuIjsKKyAKKyAgICAgZm9yZWFjaCAkc2VjdGlvbiAoQHskYXJnc3snc2VjdGlv
 bmxpc3QnfX0pIHsKKyAJJHNlYyA9ICRzZWN0aW9uOworIAkkc2VjID1+IHMvXy9cXF8vZzsK
 Ky0JJHNlYyA9fiBzLyMoW2EtekEtWlxfXSspL3tcXGl0IFwxfS9nOworKwkkc2VjID1+IHMv
 IyhbYS16QS1aXF9dKykve1xcaXQgJDF9L2c7CisgCistCXByaW50ICJcbntcXGxhcmdleyRz
 ZWN9fVxcXFxcbiI7CistCXByaW50ICJcXGJlZ2lue3JtZmFtaWx5fVxuIjsKKysJcHJpbnQg
 IlxuXFxiZWdpbntmdW5jdGlvbiR7c2VjfX1cbiI7CisrCSRvdXQgPSAkYXJnc3snc2VjdGlv
 bnMnfXskc2VjdGlvbn07CisgCistCSRzZWMgPSAkYXJnc3snc2VjdGlvbnMnfXskc2VjdGlv
 bn07CistCSRzZWMgPX4gcy9cXDovOi9nOworLQkkc2VjID1+IHMvIyhbYS16QS1aXF9dKykv
 e1xcaXQgXDF9L2c7CistCSRzZWMgPX4gcy8tPi9cJFxccmlnaHRhcnJvd1wkL2c7CistCSRz
 ZWMgPX4gcy8oWzAtOV0rKVxeKFswLTldKykvXCRce1wxXH1cXlx7XDJcfVwkL2c7CistCist
 CSRvdXQgPSBqdXN0X2hpZ2hsaWdodCgkc2VjKTsKKy0JJG91dCA9fiBzL18vXFxfL2c7Cisr
 CSRvdXQgPX4gcy9cIyhbYS16QS1aXF9dKykve1xcaXQgJDF9L2c7CisrCSRvdXQgPX4gcy9c
 JShbYS16QS1aXF9dKykve1xcYmYgJDF9L2c7CisrCSRvdXQgPX4gcy9cQChbYS16QS1aXF9d
 Kykve1xcYmYgJDF9L2c7CisrCSRvdXQgPX4gcy9fL1xcX1xcLS9nOworKyAgICAgICAgJG91
 dCA9fiBzL1wkL1xcXCQvZzsKKysJJG91dCA9fiBzLyMvXFwjL2c7CisrCSRvdXQgPX4gcy9c
 blxuL1xuL2c7CisrCSRvdXQgPX4gcy9cXDovOi9nOworKwkkb3V0ID1+IHMvXC1cPi9cJFxc
 cmlnaHRhcnJvd1wkL2c7CisrCSRvdXQgPX4gcy8oWzAtOV0rKVxeKFswLTldKykvXCRceyQx
 XH1cXlx7JDJcfVwkL2c7CisgCisgCXByaW50ICRvdXQ7CistCXByaW50ICJcXGVuZHtybWZh
 bWlseX1cbiI7CisrCXByaW50ICJcXGVuZHtmdW5jdGlvbiR7c2VjfX1cbiI7CisgICAgIH0K
 Ky0gICAgcHJpbnQgIlxuIjsKKysgICAgcHJpbnQgIlxcZW5ke2Z1bmN0aW9ufVxuXG4iOwor
 IH0KKyAKKytzdWIgb3V0cHV0X2VudW1fdGV4IHsKKysgICAgbXkgJWFyZ3MgPSAleyRfWzBd
 fTsKKysgICAgbXkgKCRwYXJhbWV0ZXIsICRzZWN0aW9uKTsKKysgICAgbXkgJGNvdW50Owor
 KyAgICBteSAkbmFtZSA9ICRhcmdzeydlbnVtJ307CisrICAgIG15ICRwYXJhbTsKKysgICAg
 bXkgJHBhcmFtMjsKKysgICAgbXkgJHNlYzsKKysgICAgbXkgJGNoZWNrOworKyAgICBteSAk
 dHlwZTsKKysKKysgICAgcHJpbnQgIlxuXG5cXGJlZ2lue2VudW19XG4iOworKyAgICAkbmFt
 ZSA9fiBzL18vXFxfL2c7CisrICAgIHByaW50ICJcXGVudW1UaXRsZXsiLiAkbmFtZSAuICJ9
 XG4iOworKyAgICBwcmludCAiXFxpbmRleHsiLiAkbmFtZSAuICJ9XG4iOworKworKyAgICBw
 cmludCAiXG5cXGJlZ2lue2VudW1MaXN0fVxuIjsKKysKKysgICAgJGNoZWNrPTA7CisrICAg
 IGZvcmVhY2ggJHBhcmFtZXRlciAoQHskYXJnc3sncGFyYW1ldGVybGlzdCd9fSkgeworKyAg
 ICAgICAgJHBhcmFtMSA9ICRwYXJhbWV0ZXI7CisrCSRwYXJhbTEgPX4gcy9fL1xcX1xcLS9n
 OworKworKwkkY2hlY2sgPSAxOworKwlwcmludCAiXFxlbnVtRWxlbWVudHsiLiRwYXJhbTEu
 In17IjsKKysjCXByaW50ICJcbiI7CisrCisrICAgICAgICAkcGFyYW0yID0gJGFyZ3N7J3Bh
 cmFtZXRlcnMnfXskcGFyYW1ldGVyfTsKKysJJHBhcmFtMiA9fiBzL1wjKFthLXpBLVpcX10r
 KS97XFxpdCAkMX0vZzsKKysJJHBhcmFtMiA9fiBzL1wlKFthLXpBLVpcX10rKS97XFxiZiAk
 MX0vZzsKKysJJG91dCA9IGp1c3RfaGlnaGxpZ2h0KCRwYXJhbTIpOworKwkkb3V0ID1+IHMv
 Xy9cXF8vZzsKKysJY2hvbXAgJG91dDsKKysJcHJpbnQgJG91dCAuICJ9XG4iOworKyAgICB9
 CisrICAgIHByaW50ICJcXGVuZHtlbnVtTGlzdH1cbiI7CisrCisrICAgIHByaW50ICJcXGVu
 ZHtlbnVtfVxuXG4iOworK30KKyAKKyAjIG91dHB1dCBpbiBzZ21sIERvY0Jvb2sKKyBzdWIg
 b3V0cHV0X3NnbWwgeworQEAgLTYzOSwxMSArNzAzLDE0IEBACisgICAgIGlmICgkYXJnc3sn
 YnVnc3RvJ30pIHsKKyAJcHJpbnQgIi5TSCBcIlJFUE9SVElORyBCVUdTXCJcbiI7CisgCXBy
 aW50ICJSZXBvcnQgYnVncyB0byA8Ii4gJGFyZ3N7J2J1Z3N0byd9IC4gIj4uXG4iOworKyAg
 ICAgICAgcHJpbnQgIi5iclxuIjsKKysJcHJpbnQgIkdlbmVyYWwgZ3VpZGVsaW5lcyBmb3Ig
 cmVwb3J0aW5nIGJ1Z3M6IGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwL1xuIjsKKysgICAg
 ICAgIHByaW50ICIuYnJcbiI7CisgCWlmICgkYXJnc3sncGtnbmFtZSd9KSB7CisgCSAgICBw
 cmludCAkYXJnc3sncGtnbmFtZSd9IC4gIiBob21lIHBhZ2U6ICIgLgorIAkJImh0dHA6Ly93
 d3cuZ251Lm9yZy9zb2Z0d2FyZS8iIC4gJGFyZ3N7J21vZHVsZSd9IC4gIi9cbiI7CisgCX0K
 Ky0JcHJpbnQgIkdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IGh0dHA6Ly93d3cu
 Z251Lm9yZy9nZXRoZWxwL1xuIjsKKysJcHJpbnQgIlxuIjsKKyAgICAgfQorIAorICAgICBp
 ZiAoJGFyZ3N7J2NvcHlyaWdodCd9KSB7CitAQCAtNjcwLDYgKzczNywxMCBAQAorIAlwcmlu
 dCAiLkIgaW5mbyAiIC4gJGFyZ3N7J3NlZWluZm8nfSAuICJcbiI7CisgCXByaW50ICIuUFBc
 biI7CisgCXByaW50ICJzaG91bGQgZ2l2ZSB5b3UgYWNjZXNzIHRvIHRoZSBjb21wbGV0ZSBt
 YW51YWwuXG4iOworKwlwcmludCAiQXMgYW4gYWx0ZXJuYXRpdmUgeW91IG1heSBvYnRhaW4g
 dGhlIG1hbnVhbCBmcm9tOlxuIjsKKysJcHJpbnQgIi5JUFxuIjsKKysJcHJpbnQgIi5CIGh0
 dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS8iIC4gJGFyZ3N7J21vZHVsZSd9IC4gIi9tYW51
 YWwvXG4iOworKwlwcmludCAiLlBQXG4iOworICAgICB9CisgfQorIAorQEAgLTcwNSw2ICs3
 NzYsMTAgQEAKKyAgICAgZXZhbCAib3V0cHV0XyIuJG91dHB1dF9tb2RlLiIoXEBfKTsiOwor
 IH0KKyAKKytzdWIgb3V0cHV0X2VudW0geworKyAgICBldmFsICJvdXRwdXRfZW51bV8iLiRv
 dXRwdXRfbW9kZS4iKFxAXyk7IjsKKyt9CisrCisgCisgIyMKKyAjIHRha2VzIGEgZnVuY3Rp
 b24gcHJvdG90eXBlIGFuZCBzcGl0cyBvdXQgYWxsIHRoZSBkZXRhaWxzCitAQCAtNzQ0LDcg
 KzgxOSw3IEBACisgIwkgICAgcHJpbnQgU1RERVJSICIgOj4gQGFyZ3NcbiI7CisgCSAgICAk
 dHlwZSA9IGpvaW4gIiAiLCBAYXJnczsKKyAKKy0JICAgIGlmICgkcGFyYW1ldGVyc3skcGFy
 YW19IGVxICIiICYmICRwYXJhbSAhPSAidm9pZCIpIHsKKysJICAgIGlmICgoIWRlZmluZWQo
 JHBhcmFtZXRlcnN7JHBhcmFtfSkgfHwgJHBhcmFtZXRlcnN7JHBhcmFtfSBlcSAiIikgJiYg
 JHBhcmFtIG5lICJ2b2lkIikgeworIAkJJHBhcmFtZXRlcnN7JHBhcmFtfSA9ICItLSB1bmRl
 c2NyaWJlZCAtLSI7CisgCQlwcmludCBTVERFUlIgIndhcm5pbmc6ICRsaW5lbm86IEZ1bmN0
 aW9uIHBhcmFtZXRlciAnJHBhcmFtJyBub3QgZGVzY3JpYmVkIGluICckZnVuY3Rpb25fbmFt
 ZSdcbiI7CisgCSAgICB9CitAQCAtNzgxLDYgKzg1Niw1NiBAQAorICAgICB9CisgfQorIAor
 K3N1YiBkdW1wX2VudW0geworKyAgICBteSAkcHJvdG90eXBlID0gc2hpZnQgQF87CisrCisr
 ICAgIGlmICgoJHByb3RvdHlwZSA9fiBtL15ccyp0eXBlZGVmXHMrZW51bVxzKlthLXpBLVow
 LTlffjpdKlxzKlx7KFtcLWEtekEtWjAtOV9+PSw6XHNcKFwpXDxdKylccypcfVxzKihbYS16
 QS1aMC05X10rKTsuKi8pKSB7CisrIyAgICAgICAgfHwgJHByb3RvdHlwZSA9fiBtL15ccypl
 bnVtXHMrKFthLXpBLVowLTlffjpdKykuKi8pIHsKKysgICAgICAgICRhcmdzID0gJDE7Cisr
 CSRuYW1lID0gJDI7CisrCisrCWZvcmVhY2ggJGFyZyAoc3BsaXQgJywnLCAkYXJncykgewor
 KwkgICAgIyBzdHJpcCBsZWFkaW5nL3RyYWlsaW5nIHNwYWNlcworKwkgICAgJGFyZyA9fiBz
 L15ccyovLzsKKysJICAgICRhcmcgPX4gcy9ccyokLy87CisrCSAgICAkYXJnID1+IHMvKFtB
 LVphLXowLTlfXSspXHMqPS4qLyQxL2c7CisrIwkgICAgcHJpbnQgU1RERVJSICJTQ0FOIEFS
 RzogJyRhcmcnXG4iOworKworKyAgICAgICAgICAgIG5leHQgaWYgJGFyZyBlcSAnJzsKKysJ
 ICAgIGlmICgoIWRlZmluZWQoJHBhcmFtZXRlcnN7JGFyZ30pIHx8ICRwYXJhbWV0ZXJzeyRh
 cmd9IGVxICIiKSkgeworKwkJJHBhcmFtZXRlcnN7JGFyZ30gPSAiLS0gdW5kZXNjcmliZWQg
 LS0iOworKwkJcHJpbnQgU1RERVJSICJ3YXJuaW5nOiAkbGluZW5vOiBFbnVtZXJhdGlvbiBw
 YXJhbWV0ZXIgJyRhcmcnIG5vdCBkZXNjcmliZWQgaW4gJyRuYW1lJ1xuIjsKKysJICAgIH0K
 KysKKysJICAgIHB1c2ggQHBhcmFtZXRlcmxpc3QsICRhcmc7CisrCisrIwkgICAgcHJpbnQg
 U1RERVJSICJwYXJhbSA9ICckYXJnJ1xuIjsKKysJfQorKyAgICB9IGVsc2UgeworKyMJcHJp
 bnQgU1RERVJSICJ3YXJuaW5nOiAkbGluZW5vOiBDYW5ub3QgdW5kZXJzdGFuZCBlbnVtZXJh
 dGlvbjogJyRwcm90b3R5cGUnXG4iOworKwlyZXR1cm47CisrICAgIH0KKysKKysgICAgb3V0
 cHV0X2VudW0oeydlbnVtJyA9PiAkbmFtZSwKKysJCQkgJ21vZHVsZScgPT4gJG1vZHVsZW5h
 bWUsCisrCQkJICdzb3VyY2V2ZXJzaW9uJyA9PiAkc291cmNldmVyc2lvbiwKKysJCQkgJ2lu
 Y2x1ZGUnID0+ICRpbmNsdWRlLAorKwkJCSAnaW5jbHVkZWZ1bmNwcmVmaXgnID0+ICRpbmNs
 dWRlZnVuY3ByZWZpeCwKKysJCQkgJ2J1Z3N0bycgPT4gJGJ1Z3N0bywKKysJCQkgJ3BrZ25h
 bWUnID0+ICRwa2duYW1lLAorKwkJCSAnY29weXJpZ2h0JyA9PiAkY29weXJpZ2h0LAorKwkJ
 CSAndmVyYmF0aW1jb3B5aW5nJyA9PiAkdmVyYmF0aW1jb3B5aW5nLAorKwkJCSAnc2VlaW5m
 bycgPT4gJHNlZWluZm8sCisrCQkJICdmdW5jdGlvbnR5cGUnID0+ICRyZXR1cm5fdHlwZSwK
 KysJCQkgJ3BhcmFtZXRlcmxpc3QnID0+IFxAcGFyYW1ldGVybGlzdCwKKysJCQkgJ3BhcmFt
 ZXRlcnMnID0+IFwlcGFyYW1ldGVycywKKysJCQkgJ3BhcmFtZXRlcnR5cGVzJyA9PiBcJXBh
 cmFtZXRlcnR5cGVzLAorKwkJCSAnc2VjdGlvbmxpc3QnID0+IFxAc2VjdGlvbmxpc3QsCisr
 CQkJICdzZWN0aW9ucycgPT4gXCVzZWN0aW9ucywKKysJCQkgJ3B1cnBvc2UnID0+ICRmdW5j
 dGlvbl9wdXJwb3NlCisrCQkJIH0pOworK30KKysKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
 IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBt
 YWluCisgIyBzdGF0ZXMKK0BAIC03OTcsNyArOTIyLDcgQEAKKyAkZG9jX2VuZCA9ICJcXCov
 IjsKKyAkZG9jX2NvbSA9ICJcXHMqXFwqXFxzKiI7CisgJGRvY19mdW5jID0gJGRvY19jb20u
 IihcXHcrKTo/IjsKKy0kZG9jX3NlY3QgPSAkZG9jX2NvbS4iKFsiLiRkb2Nfc3BlY2lhbC4i
 Wzp1cHBlcjpdXVtcXHcgXSspOlxccyooLiopIjsKKyskZG9jX3NlY3QgPSAkZG9jX2NvbS4i
 KFsiLiRkb2Nfc3BlY2lhbC4iWzp1cHBlcjpdXVtcXHddKyk6XFxzKiguKikiOworICRkb2Nf
 Y29udGVudCA9ICRkb2NfY29tLiIoLiopIjsKKyAKKyAlY29uc3RhbnRzID0gKCk7CitAQCAt
 ODA5LDYgKzkzNCw3IEBACisgJGNvbnRlbnRzID0gIiI7CisgJHNlY3Rpb25fZGVmYXVsdCA9
 ICJEZXNjcmlwdGlvbiI7CSMgZGVmYXVsdCBzZWN0aW9uCisgJHNlY3Rpb24gPSAkc2VjdGlv
 bl9kZWZhdWx0OworKyRlbnVtID0gMDsKKyAKKyAkbGluZW5vID0gMDsKKyBmb3JlYWNoICRm
 aWxlIChAQVJHVikgeworQEAgLTgxNiwxOCArOTQyLDIxIEBACisgCXByaW50IFNUREVSUiAi
 RXJyb3I6IENhbm5vdCBvcGVuIGZpbGUgJGZpbGVcbiI7CisgCW5leHQ7CisgICAgIH0KKy0g
 ICAgd2hpbGUgKDxJTj4pIHsKKysgICAgd2hpbGUgKCRsaW5lID0gPElOPikgeworIAkkbGlu
 ZW5vKys7CisgCisgCWlmICgkc3RhdGUgPT0gMCkgeworLQkgICAgaWYgKC8kZG9jX3N0YXJ0
 L28pIHsKKysJICAgIGlmICgkbGluZSA9fiAvJGRvY19zdGFydC9vKSB7CisgCQkkc3RhdGUg
 PSAxOwkJIyBuZXh0IGxpbmUgaXMgYWx3YXlzIHRoZSBmdW5jdGlvbiBuYW1lCisrIwkgICAg
 cHJpbnQgU1RERVJSICJYWFg6IHN0YXJ0IG9mIGRvYyBjb21tZW50XG4iOworIAkgICAgfQor
 IAl9IGVsc2lmICgkc3RhdGUgPT0gMSkgewkjIHRoaXMgbGluZSBpcyB0aGUgZnVuY3Rpb24g
 bmFtZSAoYWx3YXlzKQorLQkgICAgaWYgKC8kZG9jX2Z1bmMvbykgeworKwkgICAgaWYgKCRs
 aW5lID1+IC8kZG9jX2Z1bmMvbykgeworIAkJJGZ1bmN0aW9uID0gJDE7CisgCQkkc3RhdGUg
 PSAyOworLQkJaWYgKC8tXHMqKC4qKS8pIHsKKysjCSAgICBwcmludCBTVERFUlIgIlhYWDog
 c3RhcnQgb2YgZG9jIGNvbW1lbnQsIGxvb2tpbmcgZm9yIHByb3RvdHlwZVxuIjsKKysKKysJ
 CWlmICgkbGluZSA9fiAvLVxzKiguKikvKSB7CisgCQkgICAgJGZ1bmN0aW9uX3B1cnBvc2Ug
 PSAkMTsKKyAJCX0gZWxzZSB7CisgCQkgICAgJGZ1bmN0aW9uX3B1cnBvc2UgPSAiIjsKK0BA
 IC04NDEsMTEgKzk3MCwxMSBAQAorIAkJJHN0YXRlID0gMDsKKyAJICAgIH0KKyAJfSBlbHNp
 ZiAoJHN0YXRlID09IDIpIHsJIyBsb29rIGZvciBoZWFkOiBsaW5lcywgYW5kIGluY2x1ZGUg
 Y29udGVudAorLQkgICAgaWYgKC8kZG9jX3NlY3QvbykgeworKwkgICAgaWYgKCRsaW5lID1+
 IC8kZG9jX3NlY3QvbykgeworIAkJJG5ld3NlY3Rpb24gPSAkMTsKKyAJCSRuZXdjb250ZW50
 cyA9ICQyOworIAorLQkJaWYgKCRjb250ZW50cyBuZSAiIikgeworKwkJaWYgKCRjb250ZW50
 cyBuZSAnJykgeworIAkJICAgIGR1bXBfc2VjdGlvbigkc2VjdGlvbiwgJGNvbnRlbnRzKTsK
 KyAJCSAgICAkc2VjdGlvbiA9ICRzZWN0aW9uX2RlZmF1bHQ7CisgCQl9CitAQCAtODU1LDcg
 Kzk4NCw3IEBACisgCQkgICAgJGNvbnRlbnRzIC49ICJcbiI7CisgCQl9CisgCQkkc2VjdGlv
 biA9ICRuZXdzZWN0aW9uOworLQkgICAgfSBlbHNpZiAoLyRkb2NfZW5kLykgeworKwkgICAg
 fSBlbHNpZiAoJGxpbmUgPX4gLyRkb2NfZW5kLykgeworIAorIAkJaWYgKCRjb250ZW50cyBu
 ZSAiIikgeworIAkJICAgIGR1bXBfc2VjdGlvbigkc2VjdGlvbiwgJGNvbnRlbnRzKTsKK0BA
 IC04NjMsMTMgKzk5MiwxMiBAQAorIAkJICAgICRjb250ZW50cyA9ICIiOworIAkJfQorIAor
 LSMJICAgIHByaW50IFNUREVSUiAiZW5kIG9mIGRvYyBjb21tZW50LCBsb29raW5nIGZvciBw
 cm90b3R5cGVcbiI7CisgCQkkcHJvdG90eXBlID0gIiI7CisgCQkkc3RhdGUgPSAzOworLQkg
 ICAgfSBlbHNpZiAoLyRkb2NfY29udGVudC8pIHsKKysJICAgIH0gZWxzaWYgKCRsaW5lID1+
 IC8kZG9jX2NvbnRlbnQvKSB7CisgCQkjIG1pZ3VlbC1zdHlsZSBjb21tZW50IGtsdWRnZSwg
 bG9vayBmb3IgYmxhbmsgbGluZXMgYWZ0ZXIKKyAJCSMgQHBhcmFtZXRlciBsaW5lIHRvIHNp
 Z25pZnkgc3RhcnQgb2YgZGVzY3JpcHRpb24KKy0JCWlmICgkMSBlcSAiIiAmJiAkc2VjdGlv
 biA9fiBtL15ALykgeworKwkJaWYgKCQxIGVxICcnICYmICRzZWN0aW9uID1+IG0vXkAvKSB7
 CisgCQkgICAgZHVtcF9zZWN0aW9uKCRzZWN0aW9uLCAkY29udGVudHMpOworIAkJICAgICRz
 ZWN0aW9uID0gJHNlY3Rpb25fZGVmYXVsdDsKKyAJCSAgICAkY29udGVudHMgPSAiIjsKK0BA
 IC04ODEsMTMgKzEwMDksMTYgQEAKKyAJCXByaW50IFNUREVSUiAid2FybmluZzogJGxpbmVu
 bzogQmFkIGxpbmU6ICRfIjsKKyAJICAgIH0KKyAJfSBlbHNpZiAoJHN0YXRlID09IDMpIHsJ
 IyBzY2FubmluZyBmb3IgZnVuY3Rpb24geyAoZW5kIG9mIHByb3RvdHlwZSkKKy0JICAgIGlm
 IChtI1xzKi9cKlxzK01BQ0RPQ1xzKiNpbykgeworKwkgICAgaWYgKCRsaW5lID1+IG0jXHMq
 L1wqXHMrTUFDRE9DXHMqI2lvKSB7CisgCSAgICAgICMgZG8gbm90aGluZworIAkgICAgfQor
 LQkgICAgZWxzaWYgKC8oW15ce10qKS8pIHsKKysJICAgIGVsc2lmICgkZW51bSA9PSAxICYm
 ICRsaW5lID1+IC8oXlxzKlx7KS4qLykgeworKwkJJHByb3RvdHlwZSAuPSAieyI7CisrCSAg
 ICB9CisrCSAgICBlbHNpZiAoJGxpbmUgPX4gLyhbXlx7XSopLykgeworIAkJJHByb3RvdHlw
 ZSAuPSAkMTsKKyAJICAgIH0KKy0JICAgIGlmICgvXHsvKSB7CisrCSAgICBpZiAoJGVudW0g
 PT0gMCAmJiAkbGluZSA9fiAvXHsvKSB7CisgCQkkcHJvdG90eXBlID1+IHNAL1wqLio/XCov
 QEBnb3M7CSMgc3RyaXAgY29tbWVudHMuCisgCQkkcHJvdG90eXBlID1+IHNAW1xyXG5dK0Ag
 QGdvczsgIyBzdHJpcCBuZXdsaW5lcy9jcidzLgorIAkJJHByb3RvdHlwZSA9fiBzQF4gK0BA
 Z29zOyAjIHN0cmlwIGxlYWRpbmcgc3BhY2VzCitAQCAtOTAxLDkgKzEwMzIsMzIgQEAKKyAJ
 CSVzZWN0aW9ucyA9ICgpOworIAkJQHNlY3Rpb25saXN0ID0gKCk7CisgCQkkcHJvdG90eXBl
 ID0gIiI7CisrCQkkZW51bSA9IDA7CisgCisgCQkkc3RhdGUgPSAwOworIAkgICAgfQorKwkg
 ICAgZWxzaWYgKCRlbnVtID09IDEgJiYgJGxpbmUgPX4gL1x9LykgeworKwkJJHByb3RvdHlw
 ZSA9fiBzQC9cKi4qP1wqL0BAZ29zOwkjIHN0cmlwIGNvbW1lbnRzLgorKwkJJHByb3RvdHlw
 ZSA9fiBzQFtcclxuXStAIEBnb3M7ICMgc3RyaXAgbmV3bGluZXMvY3Incy4KKysJCSRwcm90
 b3R5cGUgPX4gc0BeICtAQGdvczsgIyBzdHJpcCBsZWFkaW5nIHNwYWNlcworKwkJZHVtcF9l
 bnVtKCRwcm90b3R5cGUpOworKworKwkJJGZ1bmN0aW9uID0gIiI7CisrCQklY29uc3RhbnRz
 ID0gKCk7CisrCQklcGFyYW1ldGVycyA9ICgpOworKwkJJXBhcmFtZXRlcnR5cGVzID0gKCk7
 CisrCQlAcGFyYW1ldGVybGlzdCA9ICgpOworKwkJJXNlY3Rpb25zID0gKCk7CisrCQlAc2Vj
 dGlvbmxpc3QgPSAoKTsKKysJCSRwcm90b3R5cGUgPSAiIjsKKysJCSRlbnVtID0gMDsKKysK
 KysJCSRzdGF0ZSA9IDA7CisrCSAgICB9CisrCSAgICBlbHNpZiAoJGxpbmUgPX4gLyhbYS16
 QS1aXHNdKyllbnVtKC4qKSQvKSB7CisrCSAgICAgICAgJGVudW0gPSAxOworKwkgICAgfQor
 KyAgICAKKyAJfQorICAgICB9CisgfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogZmlsZXMvcGF0
 Y2gtZG9jLXNjcmlwdHMtZ2RvYwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
 X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBmYnNkOm5va2V5d29y
 ZHMKIyMgLTAsMCArMSAjIworeWVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
 QWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGlu
 ZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAj
 IwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cg==
 --------------070601080001070505020300--

From: David Cecchin <dcecchin@gmail.com>
To: bug-followup@freebsd.org
Cc:  
Subject: Re: ports/185595: security/gnutls Misplaced { }
Date: Thu, 09 Jan 2014 18:22:57 +1030

 On 9/01/2014 5:03 pm, Yasuhiro KIMURA wrote:
 > This problem seems to happen with perl 5.18. Attached patch, obtained
 > from Debain, fixes it(While here, converted to new LIB_DEPENDS format).
 
 I put that patch in /usr/ports/security/gnutls and applied with patch
 -p0 < patch-gnutls
 
 Seems to work, no more error, and yes I was using perl 5.18.
 
 -- 
 David Cecchin

From: Olivier Smedts <olivier@gid0.org>
To: bug-followup@FreeBSD.org, dcecchin@gmail.com, 
	Yasuhiro KIMURA <yasu@utahime.org>
Cc:  
Subject: Re: ports/185595: security/gnutls Misplaced { }
Date: Thu, 9 Jan 2014 11:38:17 +0100

 --001a11c34ad81add4e04ef87358b
 Content-Type: text/plain; charset=ISO-8859-1
 Content-Transfer-Encoding: quoted-printable
 
 Hello,
 
 Different problem here with perl 5.14 but solved by the same patch. I also
 have to apply sed magic to remove a hardcoded /usr/bin/perl in
 gnutls-2.12.23/doc/scripts/sort2.pl (I'm using
 "perl_OPTIONS_UNSET+=3DUSE_PERL", and "OPTIONS_UNSET=3DDOCS EXAMPLES" in ca=
 se
 it matters).
 
 # pkg info | grep perl
 perl5.14-5.14.4_4              Practical Extraction and Report Language
 # portmaster security/gnutls
 [...]
 gmake[6]: Entering directory
 `/usr/ports/security/gnutls/work/gnutls-2.12.23/doc'
 echo "" > gnutls-api.texi-tmp
 for i in ../lib/auth_anon.c ../lib/gnutls_privkey.c ../lib/gnutls_num.c
 ../lib/gnutls_mem.c ../lib/gnutls_record.c ../lib/auth_dhe_psk.c
 ../lib/gnutls_anon_cred.c ../lib/gnutls_psk.c ../lib/gnutls_ui.c
 ../lib/gnutls_helper.c ../lib/auth_dh_common.c ../lib/gnutls_rsa_export.c
 ../lib/gnutls_v2_compat.c ../lib/gnutls_global.c ../lib/gnutls_cert.c
 ../lib/crypto.c ../lib/ext_srp.c ../lib/gnutls_dh.c ../lib/x509_b64.c
 ../lib/auth_srp_rsa.c ../lib/gnutls_auth.c ../lib/pkcs11_secret.c
 ../lib/auth_dhe.c ../lib/ext_server_name.c ../lib/gnutls_algorithms.c
 ../lib/gnutls_session_pack.c ../lib/locks.c ../lib/gnutls_cipher.c
 ../lib/gnutls_priority.c ../lib/gnutls_mpi.c ../lib/gnutls_pk.c
 ../lib/pkcs11.c ../lib/gnutls_mbuffers.c ../lib/gnutls_errors.c
 ../lib/gnutls_hash_int.c ../lib/ext_safe_renegotiation.c ../lib/auth_psk.c
 ../lib/gnutls_extensions.c ../lib/gnutls_cipher_int.c
 ../lib/gnutls_dh_primes.c ../lib/auth_srp_sb64.c ../lib/auth_rsa.c
 ../lib/auth_srp.c ../lib/gnutls_asn1_tab.c ../lib/gnutls_handshake.c
 ../lib/auth_srp_passwd.c ../lib/pkcs11_privkey.c ../lib/auth_cert.c
 ../lib/gnutls_psk_netconf.c ../lib/ext_session_ticket.c
 ../lib/gnutls_supplemental.c ../lib/auth_rsa_export.c ../lib/gnutls_kx.c
 ../lib/gnutls_srp.c ../lib/gnutls_x509.c ../lib/gnutls_compress.c
 ../lib/ext_cert_type.c ../lib/debug.c ../lib/gnutls_str.c
 ../lib/cryptodev.c ../lib/gnutls_datum.c ../lib/crypto-api.c
 ../lib/random.c ../lib/gnutls_buffers.c ../lib/gnutls_constate.c
 ../lib/system.c ../lib/gnutls_sig.c ../lib/gnutls_db.c
 ../lib/pkix_asn1_tab.c ../lib/gnutls_pubkey.c ../lib/gnutls_session.c
 ../lib/ext_signature.c ../lib/gnutls_state.c ../lib/ext_max_record.c
 ../lib/auth_psk_passwd.c ../lib/pkcs11_write.c ../lib/gnutls_alert.c; do \
         echo -n "Creating documentation for file $i... " && \
         ./scripts/gdoc -texinfo $i >> gnutls-api.texi-tmp && \
         echo "ok"; \
 done
 Creating documentation for file ../lib/auth_anon.c...   CC     errcodes.o
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/gnutls_privkey.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_num.c... ./scripts/gdoc: not
 found
   CC     printlist.o
 Creating documentation for file ../lib/gnutls_mem.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_record.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/auth_dhe_psk.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_anon_cred.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/gnutls_psk.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_ui.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_helper.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/auth_dh_common.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_rsa_export.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/gnutls_v2_compat.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/gnutls_global.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_cert.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/crypto.c... ./scripts/gdoc: not foun=
 d
 Creating documentation for file ../lib/ext_srp.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_dh.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/x509_b64.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/auth_srp_rsa.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_auth.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/pkcs11_secret.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/auth_dhe.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/ext_server_name.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_algorithms.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/gnutls_session_pack.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/locks.c... ./scripts/gdoc: not found
 Creating documentation for file ../lib/gnutls_cipher.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_priority.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_mpi.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_pk.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/pkcs11.c... ./scripts/gdoc: not foun=
 d
 Creating documentation for file ../lib/gnutls_mbuffers.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_errors.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_hash_int.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/ext_safe_renegotiation.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/auth_psk.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_extensions.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/gnutls_cipher_int.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/gnutls_dh_primes.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/auth_srp_sb64.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/auth_rsa.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/auth_srp.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_asn1_tab.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_handshake.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/auth_srp_passwd.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/pkcs11_privkey.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/auth_cert.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_psk_netconf.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/ext_session_ticket.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/gnutls_supplemental.c...
 ./scripts/gdoc: not found
 Creating documentation for file ../lib/auth_rsa_export.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_kx.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_srp.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_x509.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_compress.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/ext_cert_type.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/debug.c... ./scripts/gdoc: not found
 Creating documentation for file ../lib/gnutls_str.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/cryptodev.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_datum.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/crypto-api.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/random.c... ./scripts/gdoc: not foun=
 d
 Creating documentation for file ../lib/gnutls_buffers.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_constate.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/system.c... ./scripts/gdoc: not foun=
 d
 Creating documentation for file ../lib/gnutls_sig.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/gnutls_db.c... ./scripts/gdoc: not
 found
 Creating documentation for file ../lib/pkix_asn1_tab.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_pubkey.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_session.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/ext_signature.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_state.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/ext_max_record.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/auth_psk_passwd.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/pkcs11_write.c... ./scripts/gdoc:
 not found
 Creating documentation for file ../lib/gnutls_alert.c... ./scripts/gdoc:
 not found
 gmake[6]: *** [gnutls-api.texi] Error 127
 gmake[6]: *** Waiting for unfinished jobs....
 gmake[6]: Leaving directory
 `/usr/ports/security/gnutls/work/gnutls-2.12.23/doc'
 gmake[5]: *** [all-recursive] Error 1
 gmake[5]: Leaving directory
 `/usr/ports/security/gnutls/work/gnutls-2.12.23/doc'
 gmake[4]: *** [all] Error 2
 gmake[4]: Leaving directory
 `/usr/ports/security/gnutls/work/gnutls-2.12.23/doc'
 gmake[3]: *** [all-recursive] Erreur 1
 gmake[3] : on quitte le r=E9pertoire =AB
 /usr/ports/security/gnutls/work/gnutls-2.12.23 =BB
 gmake[2]: *** [all] Erreur 2
 gmake[2] : on quitte le r=E9pertoire =AB
 /usr/ports/security/gnutls/work/gnutls-2.12.23 =BB
 =3D=3D=3D> Compilation failed unexpectedly.
 Try to set MAKE_JOBS_UNSAFE=3Dyes and rebuild before reporting the failure =
 to
 the maintainer.
 *** Error code 1
 
 Stop.
 make[1]: stopped in /usr/ports/security/gnutls
 *** Error code 1
 
 Stop.
 make: stopped in /usr/ports/security/gnutls
 
 =3D=3D=3D>>> make failed for security/gnutls
 =3D=3D=3D>>> Aborting update
 
 # cd /tmp
 # fetch '
 http://www.freebsd.org/cgi/query-pr.cgi?pr=3Dports%2F185595&getpatch=3D1'
 # cd /usr/ports/security/gnutls
 # make clean
 # svn patch /tmp/query-pr.cgi\?pr=3Dports%2F185595\&getpatch=3D1
 # make patch
 # sed -i '' '1 s:/perl:/env perl:' work/gnutls-2.12.23/doc/scripts/sort2.pl
 # portmaster -C security/gnutls
 [...]
 
 =3D=3D=3D>>> Upgrade of gnutls-2.12.23_2 to gnutls-2.12.23_3 complete
 
 =3D=3D=3D>>> Exiting
 
 --=20
 Olivier Smedts                                                 _
                                         ASCII ribbon campaign ( )
 e-mail: olivier@gid0.org        - against HTML email & vCards  X
 www: http://www.gid0.org    - against proprietary attachments / \
 
   "Il y a seulement 10 sortes de gens dans le monde :
   ceux qui comprennent le binaire,
   et ceux qui ne le comprennent pas."
 
 --001a11c34ad81add4e04ef87358b
 Content-Type: text/html; charset=ISO-8859-1
 Content-Transfer-Encoding: quoted-printable
 
 <div dir=3D"ltr"><div><div><div>Hello,<br><br></div>Different problem here =
 with perl 5.14 but solved by the same patch. I also have to apply sed magic=
  to remove a hardcoded /usr/bin/perl in gnutls-2.12.23/doc/scripts/<a href=
 =3D"http://sort2.pl">sort2.pl</a> (I&#39;m using &quot;perl_OPTIONS_UNSET+=
 =3DUSE_PERL&quot;, and &quot;OPTIONS_UNSET=3DDOCS EXAMPLES&quot; in case it=
  matters).<br>
 <br># pkg info | grep perl<br>perl5.14-5.14.4_4=A0=A0=A0=A0=A0=A0=A0=A0=A0=
 =A0=A0=A0=A0 Practical Extraction and Report Language<br></div># portmaster=
  security/gnutls<br>[...]<br>gmake[6]: Entering directory `/usr/ports/secur=
 ity/gnutls/work/gnutls-2.12.23/doc&#39;<br>
 echo &quot;&quot; &gt; gnutls-api.texi-tmp<br>for i in ../lib/auth_anon.c .=
 ./lib/gnutls_privkey.c ../lib/gnutls_num.c ../lib/gnutls_mem.c ../lib/gnutl=
 s_record.c ../lib/auth_dhe_psk.c ../lib/gnutls_anon_cred.c ../lib/gnutls_ps=
 k.c ../lib/gnutls_ui.c ../lib/gnutls_helper.c ../lib/auth_dh_common.c ../li=
 b/gnutls_rsa_export.c ../lib/gnutls_v2_compat.c ../lib/gnutls_global.c ../l=
 ib/gnutls_cert.c ../lib/crypto.c ../lib/ext_srp.c ../lib/gnutls_dh.c ../lib=
 /x509_b64.c ../lib/auth_srp_rsa.c ../lib/gnutls_auth.c ../lib/pkcs11_secret=
 .c ../lib/auth_dhe.c ../lib/ext_server_name.c ../lib/gnutls_algorithms.c ..=
 /lib/gnutls_session_pack.c ../lib/locks.c ../lib/gnutls_cipher.c ../lib/gnu=
 tls_priority.c ../lib/gnutls_mpi.c ../lib/gnutls_pk.c ../lib/pkcs11.c ../li=
 b/gnutls_mbuffers.c ../lib/gnutls_errors.c ../lib/gnutls_hash_int.c ../lib/=
 ext_safe_renegotiation.c ../lib/auth_psk.c ../lib/gnutls_extensions.c ../li=
 b/gnutls_cipher_int.c ../lib/gnutls_dh_primes.c ../lib/auth_srp_sb64.c ../l=
 ib/auth_rsa.c ../lib/auth_srp.c ../lib/gnutls_asn1_tab.c ../lib/gnutls_hand=
 shake.c ../lib/auth_srp_passwd.c ../lib/pkcs11_privkey.c ../lib/auth_cert.c=
  ../lib/gnutls_psk_netconf.c ../lib/ext_session_ticket.c ../lib/gnutls_supp=
 lemental.c ../lib/auth_rsa_export.c ../lib/gnutls_kx.c ../lib/gnutls_srp.c =
 ../lib/gnutls_x509.c ../lib/gnutls_compress.c ../lib/ext_cert_type.c ../lib=
 /debug.c ../lib/gnutls_str.c ../lib/cryptodev.c ../lib/gnutls_datum.c ../li=
 b/crypto-api.c ../lib/random.c ../lib/gnutls_buffers.c ../lib/gnutls_consta=
 te.c ../lib/system.c ../lib/gnutls_sig.c ../lib/gnutls_db.c ../lib/pkix_asn=
 1_tab.c ../lib/gnutls_pubkey.c ../lib/gnutls_session.c ../lib/ext_signature=
 .c ../lib/gnutls_state.c ../lib/ext_max_record.c ../lib/auth_psk_passwd.c .=
 ./lib/pkcs11_write.c ../lib/gnutls_alert.c; do \<br>
 =A0=A0=A0=A0=A0=A0=A0 echo -n &quot;Creating documentation for file $i... &=
 quot; &amp;&amp; \<br>=A0=A0=A0=A0=A0=A0=A0 ./scripts/gdoc -texinfo $i &gt;=
 &gt; gnutls-api.texi-tmp &amp;&amp; \<br>=A0=A0=A0=A0=A0=A0=A0 echo &quot;o=
 k&quot;; \<br>done<br>Creating documentation for file ../lib/auth_anon.c...=
 =A0=A0 CC=A0=A0=A0=A0 errcodes.o<br>
 ./scripts/gdoc: not found<br>Creating documentation for file ../lib/gnutls_=
 privkey.c... ./scripts/gdoc: not found<br>Creating documentation for file .=
 ./lib/gnutls_num.c... ./scripts/gdoc: not found<br>=A0 CC=A0=A0=A0=A0 print=
 list.o<br>
 Creating documentation for file ../lib/gnutls_mem.c... ./scripts/gdoc: not =
 found<br>Creating documentation for file ../lib/gnutls_record.c... ./script=
 s/gdoc: not found<br>Creating documentation for file ../lib/auth_dhe_psk.c.=
 .. ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_anon_cred.c... ./scripts/gdoc=
 : not found<br>Creating documentation for file ../lib/gnutls_psk.c... ./scr=
 ipts/gdoc: not found<br>Creating documentation for file ../lib/gnutls_ui.c.=
 .. ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_helper.c... ./scripts/gdoc: n=
 ot found<br>Creating documentation for file ../lib/auth_dh_common.c... ./sc=
 ripts/gdoc: not found<br>Creating documentation for file ../lib/gnutls_rsa_=
 export.c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_v2_compat.c... ./scripts/gdoc=
 : not found<br>Creating documentation for file ../lib/gnutls_global.c... ./=
 scripts/gdoc: not found<br>Creating documentation for file ../lib/gnutls_ce=
 rt.c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/crypto.c... ./scripts/gdoc: not foun=
 d<br>Creating documentation for file ../lib/ext_srp.c... ./scripts/gdoc: no=
 t found<br>Creating documentation for file ../lib/gnutls_dh.c... ./scripts/=
 gdoc: not found<br>
 Creating documentation for file ../lib/x509_b64.c... ./scripts/gdoc: not fo=
 und<br>Creating documentation for file ../lib/auth_srp_rsa.c... ./scripts/g=
 doc: not found<br>Creating documentation for file ../lib/gnutls_auth.c... .=
 /scripts/gdoc: not found<br>
 Creating documentation for file ../lib/pkcs11_secret.c... ./scripts/gdoc: n=
 ot found<br>Creating documentation for file ../lib/auth_dhe.c... ./scripts/=
 gdoc: not found<br>Creating documentation for file ../lib/ext_server_name.c=
 ... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_algorithms.c... ./scripts/gdo=
 c: not found<br>Creating documentation for file ../lib/gnutls_session_pack.=
 c... ./scripts/gdoc: not found<br>Creating documentation for file ../lib/lo=
 cks.c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_cipher.c... ./scripts/gdoc: n=
 ot found<br>Creating documentation for file ../lib/gnutls_priority.c... ./s=
 cripts/gdoc: not found<br>Creating documentation for file ../lib/gnutls_mpi=
 .c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_pk.c... ./scripts/gdoc: not f=
 ound<br>Creating documentation for file ../lib/pkcs11.c... ./scripts/gdoc: =
 not found<br>Creating documentation for file ../lib/gnutls_mbuffers.c... ./=
 scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_errors.c... ./scripts/gdoc: n=
 ot found<br>Creating documentation for file ../lib/gnutls_hash_int.c... ./s=
 cripts/gdoc: not found<br>Creating documentation for file ../lib/ext_safe_r=
 enegotiation.c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/auth_psk.c... ./scripts/gdoc: not fo=
 und<br>Creating documentation for file ../lib/gnutls_extensions.c... ./scri=
 pts/gdoc: not found<br>Creating documentation for file ../lib/gnutls_cipher=
 _int.c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_dh_primes.c... ./scripts/gdoc=
 : not found<br>Creating documentation for file ../lib/auth_srp_sb64.c... ./=
 scripts/gdoc: not found<br>Creating documentation for file ../lib/auth_rsa.=
 c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/auth_srp.c... ./scripts/gdoc: not fo=
 und<br>Creating documentation for file ../lib/gnutls_asn1_tab.c... ./script=
 s/gdoc: not found<br>Creating documentation for file ../lib/gnutls_handshak=
 e.c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/auth_srp_passwd.c... ./scripts/gdoc:=
  not found<br>Creating documentation for file ../lib/pkcs11_privkey.c... ./=
 scripts/gdoc: not found<br>Creating documentation for file ../lib/auth_cert=
 .c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_psk_netconf.c... ./scripts/gd=
 oc: not found<br>Creating documentation for file ../lib/ext_session_ticket.=
 c... ./scripts/gdoc: not found<br>Creating documentation for file ../lib/gn=
 utls_supplemental.c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/auth_rsa_export.c... ./scripts/gdoc:=
  not found<br>Creating documentation for file ../lib/gnutls_kx.c... ./scrip=
 ts/gdoc: not found<br>Creating documentation for file ../lib/gnutls_srp.c..=
 . ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_x509.c... ./scripts/gdoc: not=
  found<br>Creating documentation for file ../lib/gnutls_compress.c... ./scr=
 ipts/gdoc: not found<br>Creating documentation for file ../lib/ext_cert_typ=
 e.c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/debug.c... ./scripts/gdoc: not found=
 <br>Creating documentation for file ../lib/gnutls_str.c... ./scripts/gdoc: =
 not found<br>Creating documentation for file ../lib/cryptodev.c... ./script=
 s/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_datum.c... ./scripts/gdoc: no=
 t found<br>Creating documentation for file ../lib/crypto-api.c... ./scripts=
 /gdoc: not found<br>Creating documentation for file ../lib/random.c... ./sc=
 ripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_buffers.c... ./scripts/gdoc: =
 not found<br>Creating documentation for file ../lib/gnutls_constate.c... ./=
 scripts/gdoc: not found<br>Creating documentation for file ../lib/system.c.=
 .. ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_sig.c... ./scripts/gdoc: not =
 found<br>Creating documentation for file ../lib/gnutls_db.c... ./scripts/gd=
 oc: not found<br>Creating documentation for file ../lib/pkix_asn1_tab.c... =
 ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_pubkey.c... ./scripts/gdoc: n=
 ot found<br>Creating documentation for file ../lib/gnutls_session.c... ./sc=
 ripts/gdoc: not found<br>Creating documentation for file ../lib/ext_signatu=
 re.c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/gnutls_state.c... ./scripts/gdoc: no=
 t found<br>Creating documentation for file ../lib/ext_max_record.c... ./scr=
 ipts/gdoc: not found<br>Creating documentation for file ../lib/auth_psk_pas=
 swd.c... ./scripts/gdoc: not found<br>
 Creating documentation for file ../lib/pkcs11_write.c... ./scripts/gdoc: no=
 t found<br>Creating documentation for file ../lib/gnutls_alert.c... ./scrip=
 ts/gdoc: not found<br>gmake[6]: *** [gnutls-api.texi] Error 127<br>gmake[6]=
 : *** Waiting for unfinished jobs....<br>
 gmake[6]: Leaving directory `/usr/ports/security/gnutls/work/gnutls-2.12.23=
 /doc&#39;<br>gmake[5]: *** [all-recursive] Error 1<br>gmake[5]: Leaving dir=
 ectory `/usr/ports/security/gnutls/work/gnutls-2.12.23/doc&#39;<br>gmake[4]=
 : *** [all] Error 2<br>
 gmake[4]: Leaving directory `/usr/ports/security/gnutls/work/gnutls-2.12.23=
 /doc&#39;<br>gmake[3]: *** [all-recursive] Erreur 1<br>gmake[3] : on quitte=
  le r=E9pertoire =AB /usr/ports/security/gnutls/work/gnutls-2.12.23 =BB<br>=
 gmake[2]: *** [all] Erreur 2<br>
 gmake[2] : on quitte le r=E9pertoire =AB /usr/ports/security/gnutls/work/gn=
 utls-2.12.23 =BB<br>=3D=3D=3D&gt; Compilation failed unexpectedly.<br>Try t=
 o set MAKE_JOBS_UNSAFE=3Dyes and rebuild before reporting the failure to<br=
 >the maintainer.<br>
 *** Error code 1<br><br>Stop.<br>make[1]: stopped in /usr/ports/security/gn=
 utls<br>*** Error code 1<br><br>Stop.<br>make: stopped in /usr/ports/securi=
 ty/gnutls<br><br>=3D=3D=3D&gt;&gt;&gt; make failed for security/gnutls<br>=
 =3D=3D=3D&gt;&gt;&gt; Aborting update<br>
 <br># cd /tmp<br># fetch &#39;<a href=3D"http://www.freebsd.org/cgi/query-p=
 r.cgi?pr=3Dports%2F185595&amp;getpatch=3D1">http://www.freebsd.org/cgi/quer=
 y-pr.cgi?pr=3Dports%2F185595&amp;getpatch=3D1</a>&#39;<br># cd /usr/ports/s=
 ecurity/gnutls<br>
 </div><div># make clean<br></div><div># svn patch /tmp/query-pr.cgi\?pr=3Dp=
 orts%2F185595\&amp;getpatch=3D1<br></div><div># make patch<br></div># sed -=
 i &#39;&#39; &#39;1 s:/perl:/env perl:&#39; work/gnutls-2.12.23/doc/scripts=
 /<a href=3D"http://sort2.pl">sort2.pl</a><br clear=3D"all">
 <div><div><div><div># portmaster -C security/gnutls<br>[...]<br><br>=3D=3D=
 =3D&gt;&gt;&gt; Upgrade of gnutls-2.12.23_2 to gnutls-2.12.23_3 complete<br=
 ><br>=3D=3D=3D&gt;&gt;&gt; Exiting<br><br></div><div>-- <br>Olivier Smedts=
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
  =A0 =A0 =A0 =A0 =A0=A0 _<br>
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
  =A0 ASCII ribbon campaign ( )<br>e-mail: <a href=3D"mailto:olivier@gid0.or=
 g">olivier@gid0.org</a>=A0 =A0 =A0 =A0 - against HTML email &amp; vCards=A0=
  X<br>www: <a href=3D"http://www.gid0.org">http://www.gid0.org</a>=A0 =A0 -=
  against proprietary attachments / \<br>
 <br>=A0 &quot;Il y a seulement 10 sortes de gens dans le monde :<br>=A0 ceu=
 x qui comprennent le binaire,<br>=A0 et ceux qui ne le comprennent pas.&quo=
 t;
 </div></div></div></div></div>
 
 --001a11c34ad81add4e04ef87358b--

From: Yasuhiro KIMURA <yasu@utahime.org>
To: Olivier Smedts <olivier@gid0.org>, bug-followup@FreeBSD.org, 
 dcecchin@gmail.com
Cc:  
Subject: Re: ports/185595: security/gnutls Misplaced { }
Date: Thu, 09 Jan 2014 20:49:21 +0900

 This is a multi-part message in MIME format.
 --------------090209050208010008040906
 Content-Type: text/plain; charset=ISO-8859-1; format=flowed
 Content-Transfer-Encoding: 7bit
 
 Hello Olivier,
 
 I have updated patch so shebang line of doc/scripts/sort2.pl should be 
 fixed properly. Would you please try and check if it works fine?
 
 Best Regards.
 
 
 --------------090209050208010008040906
 Content-Type: text/plain; charset=Shift_JIS;
  name="patch-gnutls"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: attachment;
  filename="patch-gnutls"
 
 Index: Makefile
 ===================================================================
 --- Makefile	(revision 339114)
 +++ Makefile	(working copy)
 @@ -13,13 +13,13 @@
  
  LICENSE=	GPLv3
  
 -LIB_DEPENDS=	nettle:${PORTSDIR}/security/nettle \
 -		gpg-error:${PORTSDIR}/security/libgpg-error \
 -		p11-kit:${PORTSDIR}/security/p11-kit
 +LIB_DEPENDS=	libnettle.so:${PORTSDIR}/security/nettle \
 +		libgpg-error.so:${PORTSDIR}/security/libgpg-error \
 +		libp11-kit.so:${PORTSDIR}/security/p11-kit
  
  CONFLICTS=	gnutls-devel-[0-9]*
  
 -USES=		pathfix pkgconfig iconv gmake perl5
 +USES=		pathfix pkgconfig iconv gmake perl5 shebangfix
  USE_PERL5=	build
  USE_BZIP2=	yes
  USE_GNOME=	ltverhack
 @@ -33,6 +33,7 @@
  CONFIGURE_ARGS+=	--disable-guile
  CONFIGURE_ARGS_PREFIX=	${STAGEDIR}${PREFIX}
  
 +SHEBANG_FILES=	doc/scripts/sort2.pl
  INFO=		gnutls
  
  OPTIONS_DEFINE=	LIBTASN1 CXX LZO NLS
 @@ -46,13 +47,13 @@
  .include <bsd.port.options.mk>
  
  .if ${PORT_OPTIONS:MLIBTASN1}
 -LIB_DEPENDS+=		tasn1:${PORTSDIR}/security/libtasn1
 +LIB_DEPENDS+=		libtasn1.so:${PORTSDIR}/security/libtasn1
  .else
  CONFIGURE_ARGS+=	--with-included-libtasn1
  .endif
  
  .if ${PORT_OPTIONS:MLZO}
 -LIB_DEPENDS+=		lzo2:${PORTSDIR}/archivers/lzo2
 +LIB_DEPENDS+=		liblzo2.so:${PORTSDIR}/archivers/lzo2
  CONFIGURE_ARGS+=	--with-lzo
  .else
  CONFIGURE_ARGS+=	--with-lzo=no
 Index: files/patch-doc-scripts-gdoc
 ===================================================================
 --- files/patch-doc-scripts-gdoc	(revision 0)
 +++ files/patch-doc-scripts-gdoc	(working copy)
 @@ -0,0 +1,620 @@
 +--- doc/scripts/gdoc.orig	2011-04-08 09:30:44.000000000 +0900
 ++++ doc/scripts/gdoc	2014-01-09 15:06:20.000000000 +0900
 +@@ -1,4 +1,6 @@
 +-#!/usr/bin/perl
 ++eval '(exit $?0)' && eval 'exec perl "$0" ${1+"$@"}'
 ++  & eval 'exec perl "$0" $argv:q'
 ++    if 0;
 + 
 + ## Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Simon Josefsson
 + ##                    added -texinfo, -listfunc, -pkg-name
 +@@ -7,6 +9,8 @@
 + ## Copyright (c) 2001, 2002 Nikos Mavrogiannopoulos
 + ##                    added -tex
 + ## Copyright (c) 1998 Michael Zucchi
 ++## Copyright (c) 2013 Adam Sampson
 ++##                    made highlighting not depend on hash order, for Perl 5.18
 + 
 + # This program is free software: you can redistribute it and/or modify
 + # it under the terms of the GNU General Public License as published by
 +@@ -132,57 +136,59 @@
 + use POSIX qw(strftime);
 + 
 + # match expressions used to find embedded type information
 +-$type_constant = "((?<!\")\\\%(\\w+))";
 +-$type_func = "(\\w+\\(\\))";
 +-$type_param = "\\\@(\\w+)";
 +-$type_struct = "\\\#(\\w+)";
 +-$type_env = "(\\\$\\w+)";
 ++$type_constant = "\\\%([A-Za-z0-9_]+)";
 ++$type_func = "([A-Za-z0-9_]+\\(\\))";
 ++$type_param = '\@([A-Za-z0-9_]+)\s*';
 ++$type_struct = "\\\#([A-Za-z0-9_]+)";
 ++$type_env = "(\\\$[A-Za-z0-9_]+)";
 + 
 + 
 + # Output conversion substitutions.
 + #  One for each output format
 + 
 + # these work fairly well
 +-%highlights_html = ( $type_constant, "<i>\$2</i>",
 +-		     $type_func, "<b>\$1</b>",
 +-		     $type_struct, "<i>\$1</i>",
 +-		     $type_param, "<tt><b>\$1</b></tt>" );
 ++@highlights_html = ( [$type_constant, '"<i>$1</i>"'],
 ++		     [$type_func, '"<b>$1</b>"'],
 ++		     [$type_struct, '"<i>$1</i>"'],
 ++		     [$type_param, '" <tt><b>$1</b></tt> "'] );
 + $blankline_html = "<p>";
 + 
 +-%highlights_texinfo = ( $type_constant, "\\\@code{\$2}",
 +-			$type_func, "\\\@code{\$1}",
 +-			$type_struct, "\\\@code{\$1}",
 +-			$type_param, "\\\@code{\$1}" );
 ++@highlights_texinfo = ( [$type_param, '" \@code{$1} "'],
 ++			[$type_constant, '"\@code{$1} "'],
 ++			[$type_func, '"\@code{$1} "'],
 ++			[$type_struct, '"\@code{$1} "'],
 ++			 );
 + $blankline_texinfo = "";
 + 
 +-%highlights_tex = ( $type_constant, "{\\\\it \$2}",
 +-		     $type_func, "{\\\\bf \$1}",
 +-		     $type_struct, "{\\\\it \$1}",
 +-		     $type_param, "{\\\\bf \$1}" );
 ++@highlights_tex = ( [$type_param, '" {\\\bf $1} "'],
 ++		[$type_constant, '"{\\\it $1}"'],
 ++		[$type_func, '"{\\\bf $1}"'],
 ++		[$type_struct, '"{\\\it $1}"'],
 ++		      );
 + $blankline_tex = "\\\\";
 + 
 + # sgml, docbook format
 +-%highlights_sgml = ( $type_constant, "<replaceable class=\"option\">\$2</replaceable>",
 +-		     $type_func, "<function>\$1</function>",
 +-		     $type_struct, "<structname>\$1</structname>",
 +-		     $type_env, "<envar>\$1</envar>",
 +-		     $type_param, "<parameter>\$1</parameter>" );
 ++@highlights_sgml = ( [$type_constant, '"<replaceable class=\"option\">$1</replaceable>"'],
 ++		     [$type_func, '"<function>$1</function>"'],
 ++		     [$type_struct, '"<structname>$1</structname>"'],
 ++		     [$type_env, '"<envar>$1</envar>"'],
 ++		     [$type_param, '" <parameter>$1</parameter> "'] );
 + $blankline_sgml = "</para><para>\n";
 + 
 + # these are pretty rough
 +-%highlights_man = ( $type_constant, "\\\\fB\$2\\\\fP",
 +-		    $type_func, "\\\\fB\$1\\\\fP",
 +-		    $type_struct, "\\\\fB\$1\\\\fP",
 +-		    $type_param, "\\\\fI\$1\\\\fP" );
 ++@highlights_man = ( [$type_constant, '"\\\fB$1\\\fP"'],
 ++		    [$type_func, '"\\\fB$1\\\fP"'],
 ++		    [$type_struct, '"\\\fB$1\\\fP"'],
 ++		    [$type_param, '" \\\fI$1\\\fP "'] );
 + $blankline_man = "";
 + 
 + # text-mode
 +-%highlights_text = ( $type_constant, "\$2",
 +-		     $type_func, "\$1",
 +-		     $type_struct, "\$1",
 +-		     $type_param, "\$1" );
 ++@highlights_text = ( [$type_constant, '"$1"'],
 ++		     [$type_func, '"$1"'],
 ++		     [$type_struct, '"$1"'],
 ++		     [$type_param, '"$1 "'] );
 + $blankline_text = "";
 +-
 ++my $lineprefix = "";
 + 
 + sub usage {
 +     print "Usage: $0 [ -v ] [ -docbook | -html | -text | -man | -tex | -texinfo  -listfunc ]\n";
 +@@ -201,7 +207,7 @@
 + 
 + $verbose = 0;
 + $output_mode = "man";
 +-%highlights = %highlights_man;
 ++@highlights = @highlights_man;
 + $blankline = $blankline_man;
 + $modulename = "API Documentation";
 + $sourceversion = strftime "%Y-%m-%d", localtime;
 +@@ -210,27 +216,27 @@
 +     $cmd = shift @ARGV;
 +     if ($cmd eq "-html") {
 + 	$output_mode = "html";
 +-	%highlights = %highlights_html;
 ++	@highlights = @highlights_html;
 + 	$blankline = $blankline_html;
 +     } elsif ($cmd eq "-man") {
 + 	$output_mode = "man";
 +-	%highlights = %highlights_man;
 ++	@highlights = @highlights_man;
 + 	$blankline = $blankline_man;
 +     } elsif ($cmd eq "-tex") {
 + 	$output_mode = "tex";
 +-	%highlights = %highlights_tex;
 ++	@highlights = @highlights_tex;
 + 	$blankline = $blankline_tex;
 +     } elsif ($cmd eq "-texinfo") {
 + 	$output_mode = "texinfo";
 +-	%highlights = %highlights_texinfo;
 ++	@highlights = @highlights_texinfo;
 + 	$blankline = $blankline_texinfo;
 +     } elsif ($cmd eq "-text") {
 + 	$output_mode = "text";
 +-	%highlights = %highlights_text;
 ++	@highlights = @highlights_text;
 + 	$blankline = $blankline_text;
 +     } elsif ($cmd eq "-docbook") {
 + 	$output_mode = "sgml";
 +-	%highlights = %highlights_sgml;
 ++	@highlights = @highlights_sgml;
 + 	$blankline = $blankline_sgml;
 +     } elsif ($cmd eq "-listfunc") {
 + 	$output_mode = "listfunc";
 +@@ -270,6 +276,8 @@
 +     my $name = shift @_;
 +     my $contents = join "\n", @_;
 + 
 ++    $name = " $name";
 ++
 +     if ($name =~ m/$type_constant/) {
 + 	$name = $1;
 + #	print STDERR "constant section '$1' = '$contents'\n";
 +@@ -280,6 +288,7 @@
 + 	$parameters{$name} = $contents;
 +     } else {
 + #	print STDERR "other section '$name' = '$contents'\n";
 ++	$name =~ tr/ //d;
 + 	$sections{$name} = $contents;
 + 	push @sectionlist, $name;
 +     }
 +@@ -296,35 +305,15 @@
 + #  sections => %descriont descriptions
 + #  
 + 
 +-sub repstr {
 +-    $pattern = shift;
 +-    $repl = shift;
 +-    $match1 = shift;
 +-    $match2 = shift;
 +-    $match3 = shift;
 +-    $match4 = shift;
 +-
 +-    $output = $repl;
 +-    $output =~ s,\$1,$match1,g;
 +-    $output =~ s,\$2,$match2,g;
 +-    $output =~ s,\$3,$match3,g;
 +-    $output =~ s,\$4,$match4,g;
 +-
 +-    eval "\$return = qq/$output/";
 +-
 +-#    print "pattern $pattern matched 1=$match1 2=$match2 3=$match3 4=$match4 replace $repl yielded $output interpolated $return\n";
 +-
 +-    $return;
 +-}
 +-
 + sub just_highlight {
 +     my $contents = join "\n", @_;
 +     my $line;
 +     my $ret = "";
 + 
 +-    foreach $pattern (keys %highlights) {
 +-#	print "scanning pattern $pattern ($highlights{$pattern})\n";
 +-	$contents =~ s:$pattern:repstr($pattern, $highlights{$pattern}, $1, $2, $3, $4):gse;
 ++    foreach $highlight (@highlights) {
 ++	my ($pattern, $replace) = @$highlight;
 ++	#print "scanning pattern $pattern ($replace)\n";
 ++	$contents =~ s/$pattern/$replace/gees;
 +     }
 +     foreach $line (split "\n", $contents) {
 + 	if ($line eq ""){
 +@@ -370,13 +359,45 @@
 + 	}
 +     }
 +     foreach $section (@{$args{'sectionlist'}}) {
 ++	$section =~ s/\@//g;
 + 	print "\n\@strong{$section:} " if $section ne $section_default;
 +-	$args{'sections'}{$section} =~ s:([{}]):\@\1:gs;
 ++	$args{'sections'}{$section} =~ s:([{}]):\@$1:gs;
 + 	output_highlight($args{'sections'}{$section});
 +     }
 +     print "\@end deftypefun\n\n";
 + }
 + 
 ++sub output_enum_texinfo {
 ++    my %args = %{$_[0]};
 ++    my ($parameter, $section);
 ++    my $count;
 ++    my $name = $args{'enum'};
 ++    my $param;
 ++    my $param2;
 ++    my $sec;
 ++    my $check;
 ++    my $type;
 ++
 ++    print "\n\@c $name\n";
 ++    print "\@table \@code\n";
 ++
 ++    $check=0;
 ++    foreach $parameter (@{$args{'parameterlist'}}) {
 ++        $param1 = $parameter;
 ++	$param1 =~ s/_/_\@-/g;
 ++
 ++	$check = 1;
 ++	print "\@item ".$param1."\n";
 ++#	print "\n";
 ++
 ++        $param2 = $args{'parameters'}{$parameter};
 ++	$out = just_highlight($param2);
 ++	chomp $out;
 ++	print $out . "\n";
 ++    }
 ++    print "\@end table\n";
 ++}
 ++
 + # output in html
 + sub output_html {
 +     my %args = %{$_[0]};
 +@@ -428,7 +449,9 @@
 + 
 +     $func =~ s/_/\\_/g;
 + 
 +-    print "\n\n\\subsection{". $func . "}\n\\label{" . $args{'function'} . "}\n";
 ++    print "\n\n\\begin{function}\n";
 ++    print "\\functionTitle{". $func . "}\n";
 ++    print "\\index{". $func . "}\n";
 + 
 +     $type = $args{'functiontype'};
 +     $type =~ s/_/\\_/g;
 +@@ -451,9 +474,8 @@
 +     }
 +     print ")\n";
 + 
 +-    print "\n{\\large{Arguments}}\n";
 ++    print "\n\\begin{functionArguments}\n";
 + 
 +-    print "\\begin{itemize}\n";
 +     $check=0;
 +     foreach $parameter (@{$args{'parameterlist'}}) {
 +         $param1 = $args{'parametertypes'}{$parameter};
 +@@ -462,11 +484,12 @@
 + 	$param2 =~ s/_/\\_/g;
 + 
 + 	$check = 1;
 +-	print "\\item {\\it ".$param1."} {\\bf ".$param2."}: \n";
 ++	print "\\functionArgument {\\it ".$param1."} {\\bf ".$param2."}: \n";
 + #	print "\n";
 + 
 + 	$param3 = $args{'parameters'}{$parameter};
 +-	$param3 =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
 ++	$param3 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
 ++	$param3 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
 + 
 + 	$out = just_highlight($param3);
 + 	$out =~ s/_/\\_/g;
 +@@ -475,31 +498,72 @@
 +     if ($check==0) {
 + 	print "\\item void\n";
 +     }
 +-    print "\\end{itemize}\n";
 ++    print "\\end{functionArguments}\n";
 + 
 +     foreach $section (@{$args{'sectionlist'}}) {
 + 	$sec = $section;
 + 	$sec =~ s/_/\\_/g;
 +-	$sec =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
 ++	$sec =~ s/#([a-zA-Z\_]+)/{\\it $1}/g;
 + 
 +-	print "\n{\\large{$sec}}\\\\\n";
 +-	print "\\begin{rmfamily}\n";
 ++	print "\n\\begin{function${sec}}\n";
 ++	$out = $args{'sections'}{$section};
 + 
 +-	$sec = $args{'sections'}{$section};
 +-	$sec =~ s/\\:/:/g;
 +-	$sec =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
 +-	$sec =~ s/->/\$\\rightarrow\$/g;
 +-	$sec =~ s/([0-9]+)\^([0-9]+)/\$\{\1\}\^\{\2\}\$/g;
 +-
 +-	$out = just_highlight($sec);
 +-	$out =~ s/_/\\_/g;
 ++	$out =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
 ++	$out =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
 ++	$out =~ s/\@([a-zA-Z\_]+)/{\\bf $1}/g;
 ++	$out =~ s/_/\\_\\-/g;
 ++        $out =~ s/\$/\\\$/g;
 ++	$out =~ s/#/\\#/g;
 ++	$out =~ s/\n\n/\n/g;
 ++	$out =~ s/\\:/:/g;
 ++	$out =~ s/\-\>/\$\\rightarrow\$/g;
 ++	$out =~ s/([0-9]+)\^([0-9]+)/\$\{$1\}\^\{$2\}\$/g;
 + 
 + 	print $out;
 +-	print "\\end{rmfamily}\n";
 ++	print "\\end{function${sec}}\n";
 +     }
 +-    print "\n";
 ++    print "\\end{function}\n\n";
 + }
 + 
 ++sub output_enum_tex {
 ++    my %args = %{$_[0]};
 ++    my ($parameter, $section);
 ++    my $count;
 ++    my $name = $args{'enum'};
 ++    my $param;
 ++    my $param2;
 ++    my $sec;
 ++    my $check;
 ++    my $type;
 ++
 ++    print "\n\n\\begin{enum}\n";
 ++    $name =~ s/_/\\_/g;
 ++    print "\\enumTitle{". $name . "}\n";
 ++    print "\\index{". $name . "}\n";
 ++
 ++    print "\n\\begin{enumList}\n";
 ++
 ++    $check=0;
 ++    foreach $parameter (@{$args{'parameterlist'}}) {
 ++        $param1 = $parameter;
 ++	$param1 =~ s/_/\\_\\-/g;
 ++
 ++	$check = 1;
 ++	print "\\enumElement{".$param1."}{";
 ++#	print "\n";
 ++
 ++        $param2 = $args{'parameters'}{$parameter};
 ++	$param2 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
 ++	$param2 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
 ++	$out = just_highlight($param2);
 ++	$out =~ s/_/\\_/g;
 ++	chomp $out;
 ++	print $out . "}\n";
 ++    }
 ++    print "\\end{enumList}\n";
 ++
 ++    print "\\end{enum}\n\n";
 ++}
 + 
 + # output in sgml DocBook
 + sub output_sgml {
 +@@ -639,11 +703,14 @@
 +     if ($args{'bugsto'}) {
 + 	print ".SH \"REPORTING BUGS\"\n";
 + 	print "Report bugs to <". $args{'bugsto'} . ">.\n";
 ++        print ".br\n";
 ++	print "General guidelines for reporting bugs: http://www.gnu.org/gethelp/\n";
 ++        print ".br\n";
 + 	if ($args{'pkgname'}) {
 + 	    print $args{'pkgname'} . " home page: " .
 + 		"http://www.gnu.org/software/" . $args{'module'} . "/\n";
 + 	}
 +-	print "General help using GNU software: http://www.gnu.org/gethelp/\n";
 ++	print "\n";
 +     }
 + 
 +     if ($args{'copyright'}) {
 +@@ -670,6 +737,10 @@
 + 	print ".B info " . $args{'seeinfo'} . "\n";
 + 	print ".PP\n";
 + 	print "should give you access to the complete manual.\n";
 ++	print "As an alternative you may obtain the manual from:\n";
 ++	print ".IP\n";
 ++	print ".B http://www.gnu.org/software/" . $args{'module'} . "/manual/\n";
 ++	print ".PP\n";
 +     }
 + }
 + 
 +@@ -705,6 +776,10 @@
 +     eval "output_".$output_mode."(\@_);";
 + }
 + 
 ++sub output_enum {
 ++    eval "output_enum_".$output_mode."(\@_);";
 ++}
 ++
 + 
 + ##
 + # takes a function prototype and spits out all the details
 +@@ -744,7 +819,7 @@
 + #	    print STDERR " :> @args\n";
 + 	    $type = join " ", @args;
 + 
 +-	    if ($parameters{$param} eq "" && $param != "void") {
 ++	    if ((!defined($parameters{$param}) || $parameters{$param} eq "") && $param ne "void") {
 + 		$parameters{$param} = "-- undescribed --";
 + 		print STDERR "warning: $lineno: Function parameter '$param' not described in '$function_name'\n";
 + 	    }
 +@@ -781,6 +856,56 @@
 +     }
 + }
 + 
 ++sub dump_enum {
 ++    my $prototype = shift @_;
 ++
 ++    if (($prototype =~ m/^\s*typedef\s+enum\s*[a-zA-Z0-9_~:]*\s*\{([\-a-zA-Z0-9_~=,:\s\(\)\<]+)\s*\}\s*([a-zA-Z0-9_]+);.*/)) {
 ++#        || $prototype =~ m/^\s*enum\s+([a-zA-Z0-9_~:]+).*/) {
 ++        $args = $1;
 ++	$name = $2;
 ++
 ++	foreach $arg (split ',', $args) {
 ++	    # strip leading/trailing spaces
 ++	    $arg =~ s/^\s*//;
 ++	    $arg =~ s/\s*$//;
 ++	    $arg =~ s/([A-Za-z0-9_]+)\s*=.*/$1/g;
 ++#	    print STDERR "SCAN ARG: '$arg'\n";
 ++
 ++            next if $arg eq '';
 ++	    if ((!defined($parameters{$arg}) || $parameters{$arg} eq "")) {
 ++		$parameters{$arg} = "-- undescribed --";
 ++		print STDERR "warning: $lineno: Enumeration parameter '$arg' not described in '$name'\n";
 ++	    }
 ++
 ++	    push @parameterlist, $arg;
 ++
 ++#	    print STDERR "param = '$arg'\n";
 ++	}
 ++    } else {
 ++#	print STDERR "warning: $lineno: Cannot understand enumeration: '$prototype'\n";
 ++	return;
 ++    }
 ++
 ++    output_enum({'enum' => $name,
 ++			 'module' => $modulename,
 ++			 'sourceversion' => $sourceversion,
 ++			 'include' => $include,
 ++			 'includefuncprefix' => $includefuncprefix,
 ++			 'bugsto' => $bugsto,
 ++			 'pkgname' => $pkgname,
 ++			 'copyright' => $copyright,
 ++			 'verbatimcopying' => $verbatimcopying,
 ++			 'seeinfo' => $seeinfo,
 ++			 'functiontype' => $return_type,
 ++			 'parameterlist' => \@parameterlist,
 ++			 'parameters' => \%parameters,
 ++			 'parametertypes' => \%parametertypes,
 ++			 'sectionlist' => \@sectionlist,
 ++			 'sections' => \%sections,
 ++			 'purpose' => $function_purpose
 ++			 });
 ++}
 ++
 + ######################################################################
 + # main
 + # states
 +@@ -797,7 +922,7 @@
 + $doc_end = "\\*/";
 + $doc_com = "\\s*\\*\\s*";
 + $doc_func = $doc_com."(\\w+):?";
 +-$doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w ]+):\\s*(.*)";
 ++$doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w]+):\\s*(.*)";
 + $doc_content = $doc_com."(.*)";
 + 
 + %constants = ();
 +@@ -809,6 +934,7 @@
 + $contents = "";
 + $section_default = "Description";	# default section
 + $section = $section_default;
 ++$enum = 0;
 + 
 + $lineno = 0;
 + foreach $file (@ARGV) {
 +@@ -816,18 +942,21 @@
 + 	print STDERR "Error: Cannot open file $file\n";
 + 	next;
 +     }
 +-    while (<IN>) {
 ++    while ($line = <IN>) {
 + 	$lineno++;
 + 
 + 	if ($state == 0) {
 +-	    if (/$doc_start/o) {
 ++	    if ($line =~ /$doc_start/o) {
 + 		$state = 1;		# next line is always the function name
 ++#	    print STDERR "XXX: start of doc comment\n";
 + 	    }
 + 	} elsif ($state == 1) {	# this line is the function name (always)
 +-	    if (/$doc_func/o) {
 ++	    if ($line =~ /$doc_func/o) {
 + 		$function = $1;
 + 		$state = 2;
 +-		if (/-\s*(.*)/) {
 ++#	    print STDERR "XXX: start of doc comment, looking for prototype\n";
 ++
 ++		if ($line =~ /-\s*(.*)/) {
 + 		    $function_purpose = $1;
 + 		} else {
 + 		    $function_purpose = "";
 +@@ -841,11 +970,11 @@
 + 		$state = 0;
 + 	    }
 + 	} elsif ($state == 2) {	# look for head: lines, and include content
 +-	    if (/$doc_sect/o) {
 ++	    if ($line =~ /$doc_sect/o) {
 + 		$newsection = $1;
 + 		$newcontents = $2;
 + 
 +-		if ($contents ne "") {
 ++		if ($contents ne '') {
 + 		    dump_section($section, $contents);
 + 		    $section = $section_default;
 + 		}
 +@@ -855,7 +984,7 @@
 + 		    $contents .= "\n";
 + 		}
 + 		$section = $newsection;
 +-	    } elsif (/$doc_end/) {
 ++	    } elsif ($line =~ /$doc_end/) {
 + 
 + 		if ($contents ne "") {
 + 		    dump_section($section, $contents);
 +@@ -863,13 +992,12 @@
 + 		    $contents = "";
 + 		}
 + 
 +-#	    print STDERR "end of doc comment, looking for prototype\n";
 + 		$prototype = "";
 + 		$state = 3;
 +-	    } elsif (/$doc_content/) {
 ++	    } elsif ($line =~ /$doc_content/) {
 + 		# miguel-style comment kludge, look for blank lines after
 + 		# @parameter line to signify start of description
 +-		if ($1 eq "" && $section =~ m/^@/) {
 ++		if ($1 eq '' && $section =~ m/^@/) {
 + 		    dump_section($section, $contents);
 + 		    $section = $section_default;
 + 		    $contents = "";
 +@@ -881,13 +1009,16 @@
 + 		print STDERR "warning: $lineno: Bad line: $_";
 + 	    }
 + 	} elsif ($state == 3) {	# scanning for function { (end of prototype)
 +-	    if (m#\s*/\*\s+MACDOC\s*#io) {
 ++	    if ($line =~ m#\s*/\*\s+MACDOC\s*#io) {
 + 	      # do nothing
 + 	    }
 +-	    elsif (/([^\{]*)/) {
 ++	    elsif ($enum == 1 && $line =~ /(^\s*\{).*/) {
 ++		$prototype .= "{";
 ++	    }
 ++	    elsif ($line =~ /([^\{]*)/) {
 + 		$prototype .= $1;
 + 	    }
 +-	    if (/\{/) {
 ++	    if ($enum == 0 && $line =~ /\{/) {
 + 		$prototype =~ s@/\*.*?\*/@@gos;	# strip comments.
 + 		$prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
 + 		$prototype =~ s@^ +@@gos; # strip leading spaces
 +@@ -901,9 +1032,32 @@
 + 		%sections = ();
 + 		@sectionlist = ();
 + 		$prototype = "";
 ++		$enum = 0;
 + 
 + 		$state = 0;
 + 	    }
 ++	    elsif ($enum == 1 && $line =~ /\}/) {
 ++		$prototype =~ s@/\*.*?\*/@@gos;	# strip comments.
 ++		$prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
 ++		$prototype =~ s@^ +@@gos; # strip leading spaces
 ++		dump_enum($prototype);
 ++
 ++		$function = "";
 ++		%constants = ();
 ++		%parameters = ();
 ++		%parametertypes = ();
 ++		@parameterlist = ();
 ++		%sections = ();
 ++		@sectionlist = ();
 ++		$prototype = "";
 ++		$enum = 0;
 ++
 ++		$state = 0;
 ++	    }
 ++	    elsif ($line =~ /([a-zA-Z\s]+)enum(.*)$/) {
 ++	        $enum = 1;
 ++	    }
 ++    
 + 	}
 +     }
 + }
 
 Property changes on: files/patch-doc-scripts-gdoc
 ___________________________________________________________________
 Added: fbsd:nokeywords
 ## -0,0 +1 ##
 +yes
 \ No newline at end of property
 Added: svn:eol-style
 ## -0,0 +1 ##
 +native
 \ No newline at end of property
 Added: svn:mime-type
 ## -0,0 +1 ##
 +text/plain
 \ No newline at end of property
 
 --------------090209050208010008040906--

From: Roman Bogorodskiy <novel@FreeBSD.org>
To: bug-followup@FreeBSD.org, dcecchin@gmail.com
Cc:  
Subject: Re: ports/185595: security/gnutls Misplaced { }
Date: Thu, 9 Jan 2014 18:01:34 +0400

 Hi Yasuhiro!
 
 Thanks for the fix! One thing not clear from the fix is why
 don't you add gdoc script to SHEBANG_FILES?
 
 Thanks,
 Roman Bogorodskiy

From: Yasuhiro KIMURA <yasu@utahime.org>
To: novel@FreeBSD.org
Cc: bug-followup@FreeBSD.org, dcecchin@gmail.com
Subject: Re: ports/185595: security/gnutls Misplaced { }
Date: Sat, 11 Jan 2014 17:28:32 +0900

 Hi Roman,
 
 After files/patch-doc-scripts-gdoc is applied the first line of
 doc/scripts/gdoc is modified as following:
 
 yasu@eastasia[23807]% head doc/scripts/gdoc
 eval '(exit $?0)' && eval 'exec perl "$0" ${1+"$@"}'
   & eval 'exec perl "$0" $argv:q'
     if 0;
 
 ## Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Simon
 Josefsson
 ##                    added -texinfo, -listfunc, -pkg-name
 ##                    man page revamp
 ##                    various improvements
 ## Copyright (c) 2001, 2002 Nikos Mavrogiannopoulos
 ##                    added -tex
 yasu@eastasia[23808]%
 
 So shebang fixing is not necessary.
 
 The reason of change is simply because original patch from Debian does
 it. I don't know why Debian maintainer modified shebang line as above.
 But it seems work fine anyway.
 
 Best regards.

From: Roman Bogorodskiy <novel@FreeBSD.org>
To: Yasuhiro KIMURA <yasu@utahime.org>, John Marino <marino@FreeBSD.org>
Cc: bug-followup@FreeBSD.org, dcecchin@gmail.com
Subject: Re: ports/185595: security/gnutls Misplaced { }
Date: Sun, 12 Jan 2014 00:26:24 +0400

   Yasuhiro KIMURA wrote:
 
 > Hi Roman,
 > 
 > After files/patch-doc-scripts-gdoc is applied the first line of
 > doc/scripts/gdoc is modified as following:
 > 
 > yasu@eastasia[23807]% head doc/scripts/gdoc
 > eval '(exit $?0)' && eval 'exec perl "$0" ${1+"$@"}'
 >   & eval 'exec perl "$0" $argv:q'
 >     if 0;
 > 
 > ## Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Simon
 > Josefsson
 > ##                    added -texinfo, -listfunc, -pkg-name
 > ##                    man page revamp
 > ##                    various improvements
 > ## Copyright (c) 2001, 2002 Nikos Mavrogiannopoulos
 > ##                    added -tex
 > yasu@eastasia[23808]%
 > 
 > So shebang fixing is not necessary.
 > 
 > The reason of change is simply because original patch from Debian does
 > it. I don't know why Debian maintainer modified shebang line as above.
 > But it seems work fine anyway.
 
 I see, thanks for the explanation.
 
 Meanwhile, marino@ committed a partial fix:
 
 http://docs.freebsd.org/cgi/getmsg.cgi?fetch=5104828+0+current/svn-ports-all
 
 I've asked him to review this change, because I'm not good at perl.
 
 Thanks,
 
 Roman Bogorodskiy

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: ports/185595: commit references a PR
Date: Mon, 13 Jan 2014 11:31:17 +0000 (UTC)

 Author: novel
 Date: Mon Jan 13 11:31:03 2014
 New Revision: 339583
 URL: http://svnweb.freebsd.org/changeset/ports/339583
 
 Log:
   Fix build with perl 5.18.
   
   PR:		185595
   Reviewed by:	marino
   Obtained from:	Debian
 
 Added:
   head/security/gnutls/files/patch-doc-scripts-gdoc   (contents, props changed)
 
 Added: head/security/gnutls/files/patch-doc-scripts-gdoc
 ==============================================================================
 --- /dev/null	00:00:00 1970	(empty, because file is newly added)
 +++ head/security/gnutls/files/patch-doc-scripts-gdoc	Mon Jan 13 11:31:03 2014	(r339583)
 @@ -0,0 +1,612 @@
 +--- doc/scripts/gdoc.orig	2014-01-13 15:08:22.000000000 +0400
 ++++ doc/scripts/gdoc	2014-01-13 15:10:10.000000000 +0400
 +@@ -7,6 +7,8 @@
 + ## Copyright (c) 2001, 2002 Nikos Mavrogiannopoulos
 + ##                    added -tex
 + ## Copyright (c) 1998 Michael Zucchi
 ++## Copyright (c) 2013 Adam Sampson
 ++##                    made highlighting not depend on hash order, for Perl 5.18
 + 
 + # This program is free software: you can redistribute it and/or modify
 + # it under the terms of the GNU General Public License as published by
 +@@ -132,57 +134,59 @@
 + use POSIX qw(strftime);
 + 
 + # match expressions used to find embedded type information
 +-$type_constant = "((?<!\")\\\%(\\w+))";
 +-$type_func = "(\\w+\\(\\))";
 +-$type_param = "\\\@(\\w+)";
 +-$type_struct = "\\\#(\\w+)";
 +-$type_env = "(\\\$\\w+)";
 ++$type_constant = "\\\%([A-Za-z0-9_]+)";
 ++$type_func = "([A-Za-z0-9_]+\\(\\))";
 ++$type_param = '\@([A-Za-z0-9_]+)\s*';
 ++$type_struct = "\\\#([A-Za-z0-9_]+)";
 ++$type_env = "(\\\$[A-Za-z0-9_]+)";
 + 
 + 
 + # Output conversion substitutions.
 + #  One for each output format
 + 
 + # these work fairly well
 +-%highlights_html = ( $type_constant, "<i>\$2</i>",
 +-		     $type_func, "<b>\$1</b>",
 +-		     $type_struct, "<i>\$1</i>",
 +-		     $type_param, "<tt><b>\$1</b></tt>" );
 ++@highlights_html = ( [$type_constant, '"<i>$1</i>"'],
 ++		     [$type_func, '"<b>$1</b>"'],
 ++		     [$type_struct, '"<i>$1</i>"'],
 ++		     [$type_param, '" <tt><b>$1</b></tt> "'] );
 + $blankline_html = "<p>";
 + 
 +-%highlights_texinfo = ( $type_constant, "\\\@code{\$2}",
 +-			$type_func, "\\\@code{\$1}",
 +-			$type_struct, "\\\@code{\$1}",
 +-			$type_param, "\\\@code{\$1}" );
 ++@highlights_texinfo = ( [$type_param, '" \@code{$1} "'],
 ++			[$type_constant, '"\@code{$1} "'],
 ++			[$type_func, '"\@code{$1} "'],
 ++			[$type_struct, '"\@code{$1} "'],
 ++			 );
 + $blankline_texinfo = "";
 + 
 +-%highlights_tex = ( $type_constant, "{\\\\it \$2}",
 +-		     $type_func, "{\\\\bf \$1}",
 +-		     $type_struct, "{\\\\it \$1}",
 +-		     $type_param, "{\\\\bf \$1}" );
 ++@highlights_tex = ( [$type_param, '" {\\\bf $1} "'],
 ++		[$type_constant, '"{\\\it $1}"'],
 ++		[$type_func, '"{\\\bf $1}"'],
 ++		[$type_struct, '"{\\\it $1}"'],
 ++		      );
 + $blankline_tex = "\\\\";
 + 
 + # sgml, docbook format
 +-%highlights_sgml = ( $type_constant, "<replaceable class=\"option\">\$2</replaceable>",
 +-		     $type_func, "<function>\$1</function>",
 +-		     $type_struct, "<structname>\$1</structname>",
 +-		     $type_env, "<envar>\$1</envar>",
 +-		     $type_param, "<parameter>\$1</parameter>" );
 ++@highlights_sgml = ( [$type_constant, '"<replaceable class=\"option\">$1</replaceable>"'],
 ++		     [$type_func, '"<function>$1</function>"'],
 ++		     [$type_struct, '"<structname>$1</structname>"'],
 ++		     [$type_env, '"<envar>$1</envar>"'],
 ++		     [$type_param, '" <parameter>$1</parameter> "'] );
 + $blankline_sgml = "</para><para>\n";
 + 
 + # these are pretty rough
 +-%highlights_man = ( $type_constant, "\\\\fB\$2\\\\fP",
 +-		    $type_func, "\\\\fB\$1\\\\fP",
 +-		    $type_struct, "\\\\fB\$1\\\\fP",
 +-		    $type_param, "\\\\fI\$1\\\\fP" );
 ++@highlights_man = ( [$type_constant, '"\\\fB$1\\\fP"'],
 ++		    [$type_func, '"\\\fB$1\\\fP"'],
 ++		    [$type_struct, '"\\\fB$1\\\fP"'],
 ++		    [$type_param, '" \\\fI$1\\\fP "'] );
 + $blankline_man = "";
 + 
 + # text-mode
 +-%highlights_text = ( $type_constant, "\$2",
 +-		     $type_func, "\$1",
 +-		     $type_struct, "\$1",
 +-		     $type_param, "\$1" );
 ++@highlights_text = ( [$type_constant, '"$1"'],
 ++		     [$type_func, '"$1"'],
 ++		     [$type_struct, '"$1"'],
 ++		     [$type_param, '"$1 "'] );
 + $blankline_text = "";
 +-
 ++my $lineprefix = "";
 + 
 + sub usage {
 +     print "Usage: $0 [ -v ] [ -docbook | -html | -text | -man | -tex | -texinfo  -listfunc ]\n";
 +@@ -201,7 +205,7 @@
 + 
 + $verbose = 0;
 + $output_mode = "man";
 +-%highlights = %highlights_man;
 ++@highlights = @highlights_man;
 + $blankline = $blankline_man;
 + $modulename = "API Documentation";
 + $sourceversion = strftime "%Y-%m-%d", localtime;
 +@@ -210,27 +214,27 @@
 +     $cmd = shift @ARGV;
 +     if ($cmd eq "-html") {
 + 	$output_mode = "html";
 +-	%highlights = %highlights_html;
 ++	@highlights = @highlights_html;
 + 	$blankline = $blankline_html;
 +     } elsif ($cmd eq "-man") {
 + 	$output_mode = "man";
 +-	%highlights = %highlights_man;
 ++	@highlights = @highlights_man;
 + 	$blankline = $blankline_man;
 +     } elsif ($cmd eq "-tex") {
 + 	$output_mode = "tex";
 +-	%highlights = %highlights_tex;
 ++	@highlights = @highlights_tex;
 + 	$blankline = $blankline_tex;
 +     } elsif ($cmd eq "-texinfo") {
 + 	$output_mode = "texinfo";
 +-	%highlights = %highlights_texinfo;
 ++	@highlights = @highlights_texinfo;
 + 	$blankline = $blankline_texinfo;
 +     } elsif ($cmd eq "-text") {
 + 	$output_mode = "text";
 +-	%highlights = %highlights_text;
 ++	@highlights = @highlights_text;
 + 	$blankline = $blankline_text;
 +     } elsif ($cmd eq "-docbook") {
 + 	$output_mode = "sgml";
 +-	%highlights = %highlights_sgml;
 ++	@highlights = @highlights_sgml;
 + 	$blankline = $blankline_sgml;
 +     } elsif ($cmd eq "-listfunc") {
 + 	$output_mode = "listfunc";
 +@@ -270,6 +274,8 @@
 +     my $name = shift @_;
 +     my $contents = join "\n", @_;
 + 
 ++    $name = " $name";
 ++
 +     if ($name =~ m/$type_constant/) {
 + 	$name = $1;
 + #	print STDERR "constant section '$1' = '$contents'\n";
 +@@ -280,6 +286,7 @@
 + 	$parameters{$name} = $contents;
 +     } else {
 + #	print STDERR "other section '$name' = '$contents'\n";
 ++	$name =~ tr/ //d;
 + 	$sections{$name} = $contents;
 + 	push @sectionlist, $name;
 +     }
 +@@ -296,35 +303,15 @@
 + #  sections => %descriont descriptions
 + #  
 + 
 +-sub repstr {
 +-    $pattern = shift;
 +-    $repl = shift;
 +-    $match1 = shift;
 +-    $match2 = shift;
 +-    $match3 = shift;
 +-    $match4 = shift;
 +-
 +-    $output = $repl;
 +-    $output =~ s,\$1,$match1,g;
 +-    $output =~ s,\$2,$match2,g;
 +-    $output =~ s,\$3,$match3,g;
 +-    $output =~ s,\$4,$match4,g;
 +-
 +-    eval "\$return = qq/$output/";
 +-
 +-#    print "pattern $pattern matched 1=$match1 2=$match2 3=$match3 4=$match4 replace $repl yielded $output interpolated $return\n";
 +-
 +-    $return;
 +-}
 +-
 + sub just_highlight {
 +     my $contents = join "\n", @_;
 +     my $line;
 +     my $ret = "";
 + 
 +-    foreach $pattern (keys %highlights) {
 +-#	print "scanning pattern $pattern ($highlights{$pattern})\n";
 +-	$contents =~ s:$pattern:repstr($pattern, $highlights{$pattern}, $1, $2, $3, $4):gse;
 ++    foreach $highlight (@highlights) {
 ++	my ($pattern, $replace) = @$highlight;
 ++	#print "scanning pattern $pattern ($replace)\n";
 ++	$contents =~ s/$pattern/$replace/gees;
 +     }
 +     foreach $line (split "\n", $contents) {
 + 	if ($line eq ""){
 +@@ -370,13 +357,45 @@
 + 	}
 +     }
 +     foreach $section (@{$args{'sectionlist'}}) {
 ++	$section =~ s/\@//g;
 + 	print "\n\@strong{$section:} " if $section ne $section_default;
 +-	$args{'sections'}{$section} =~ s:([{}]):\@\1:gs;
 ++	$args{'sections'}{$section} =~ s:([{}]):\@$1:gs;
 + 	output_highlight($args{'sections'}{$section});
 +     }
 +     print "\@end deftypefun\n\n";
 + }
 + 
 ++sub output_enum_texinfo {
 ++    my %args = %{$_[0]};
 ++    my ($parameter, $section);
 ++    my $count;
 ++    my $name = $args{'enum'};
 ++    my $param;
 ++    my $param2;
 ++    my $sec;
 ++    my $check;
 ++    my $type;
 ++
 ++    print "\n\@c $name\n";
 ++    print "\@table \@code\n";
 ++
 ++    $check=0;
 ++    foreach $parameter (@{$args{'parameterlist'}}) {
 ++        $param1 = $parameter;
 ++	$param1 =~ s/_/_\@-/g;
 ++
 ++	$check = 1;
 ++	print "\@item ".$param1."\n";
 ++#	print "\n";
 ++
 ++        $param2 = $args{'parameters'}{$parameter};
 ++	$out = just_highlight($param2);
 ++	chomp $out;
 ++	print $out . "\n";
 ++    }
 ++    print "\@end table\n";
 ++}
 ++
 + # output in html
 + sub output_html {
 +     my %args = %{$_[0]};
 +@@ -428,7 +447,9 @@
 + 
 +     $func =~ s/_/\\_/g;
 + 
 +-    print "\n\n\\subsection{". $func . "}\n\\label{" . $args{'function'} . "}\n";
 ++    print "\n\n\\begin{function}\n";
 ++    print "\\functionTitle{". $func . "}\n";
 ++    print "\\index{". $func . "}\n";
 + 
 +     $type = $args{'functiontype'};
 +     $type =~ s/_/\\_/g;
 +@@ -451,9 +472,8 @@
 +     }
 +     print ")\n";
 + 
 +-    print "\n{\\large{Arguments}}\n";
 ++    print "\n\\begin{functionArguments}\n";
 + 
 +-    print "\\begin{itemize}\n";
 +     $check=0;
 +     foreach $parameter (@{$args{'parameterlist'}}) {
 +         $param1 = $args{'parametertypes'}{$parameter};
 +@@ -462,11 +482,12 @@
 + 	$param2 =~ s/_/\\_/g;
 + 
 + 	$check = 1;
 +-	print "\\item {\\it ".$param1."} {\\bf ".$param2."}: \n";
 ++	print "\\functionArgument {\\it ".$param1."} {\\bf ".$param2."}: \n";
 + #	print "\n";
 + 
 + 	$param3 = $args{'parameters'}{$parameter};
 +-	$param3 =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
 ++	$param3 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
 ++	$param3 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
 + 
 + 	$out = just_highlight($param3);
 + 	$out =~ s/_/\\_/g;
 +@@ -475,31 +496,72 @@
 +     if ($check==0) {
 + 	print "\\item void\n";
 +     }
 +-    print "\\end{itemize}\n";
 ++    print "\\end{functionArguments}\n";
 + 
 +     foreach $section (@{$args{'sectionlist'}}) {
 + 	$sec = $section;
 + 	$sec =~ s/_/\\_/g;
 +-	$sec =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
 ++	$sec =~ s/#([a-zA-Z\_]+)/{\\it $1}/g;
 + 
 +-	print "\n{\\large{$sec}}\\\\\n";
 +-	print "\\begin{rmfamily}\n";
 ++	print "\n\\begin{function${sec}}\n";
 ++	$out = $args{'sections'}{$section};
 + 
 +-	$sec = $args{'sections'}{$section};
 +-	$sec =~ s/\\:/:/g;
 +-	$sec =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
 +-	$sec =~ s/->/\$\\rightarrow\$/g;
 +-	$sec =~ s/([0-9]+)\^([0-9]+)/\$\{\1\}\^\{\2\}\$/g;
 +-
 +-	$out = just_highlight($sec);
 +-	$out =~ s/_/\\_/g;
 ++	$out =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
 ++	$out =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
 ++	$out =~ s/\@([a-zA-Z\_]+)/{\\bf $1}/g;
 ++	$out =~ s/_/\\_\\-/g;
 ++        $out =~ s/\$/\\\$/g;
 ++	$out =~ s/#/\\#/g;
 ++	$out =~ s/\n\n/\n/g;
 ++	$out =~ s/\\:/:/g;
 ++	$out =~ s/\-\>/\$\\rightarrow\$/g;
 ++	$out =~ s/([0-9]+)\^([0-9]+)/\$\{$1\}\^\{$2\}\$/g;
 + 
 + 	print $out;
 +-	print "\\end{rmfamily}\n";
 ++	print "\\end{function${sec}}\n";
 +     }
 +-    print "\n";
 ++    print "\\end{function}\n\n";
 + }
 + 
 ++sub output_enum_tex {
 ++    my %args = %{$_[0]};
 ++    my ($parameter, $section);
 ++    my $count;
 ++    my $name = $args{'enum'};
 ++    my $param;
 ++    my $param2;
 ++    my $sec;
 ++    my $check;
 ++    my $type;
 ++
 ++    print "\n\n\\begin{enum}\n";
 ++    $name =~ s/_/\\_/g;
 ++    print "\\enumTitle{". $name . "}\n";
 ++    print "\\index{". $name . "}\n";
 ++
 ++    print "\n\\begin{enumList}\n";
 ++
 ++    $check=0;
 ++    foreach $parameter (@{$args{'parameterlist'}}) {
 ++        $param1 = $parameter;
 ++	$param1 =~ s/_/\\_\\-/g;
 ++
 ++	$check = 1;
 ++	print "\\enumElement{".$param1."}{";
 ++#	print "\n";
 ++
 ++        $param2 = $args{'parameters'}{$parameter};
 ++	$param2 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g;
 ++	$param2 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g;
 ++	$out = just_highlight($param2);
 ++	$out =~ s/_/\\_/g;
 ++	chomp $out;
 ++	print $out . "}\n";
 ++    }
 ++    print "\\end{enumList}\n";
 ++
 ++    print "\\end{enum}\n\n";
 ++}
 + 
 + # output in sgml DocBook
 + sub output_sgml {
 +@@ -639,11 +701,14 @@
 +     if ($args{'bugsto'}) {
 + 	print ".SH \"REPORTING BUGS\"\n";
 + 	print "Report bugs to <". $args{'bugsto'} . ">.\n";
 ++        print ".br\n";
 ++	print "General guidelines for reporting bugs: http://www.gnu.org/gethelp/\n";
 ++        print ".br\n";
 + 	if ($args{'pkgname'}) {
 + 	    print $args{'pkgname'} . " home page: " .
 + 		"http://www.gnu.org/software/" . $args{'module'} . "/\n";
 + 	}
 +-	print "General help using GNU software: http://www.gnu.org/gethelp/\n";
 ++	print "\n";
 +     }
 + 
 +     if ($args{'copyright'}) {
 +@@ -670,6 +735,10 @@
 + 	print ".B info " . $args{'seeinfo'} . "\n";
 + 	print ".PP\n";
 + 	print "should give you access to the complete manual.\n";
 ++	print "As an alternative you may obtain the manual from:\n";
 ++	print ".IP\n";
 ++	print ".B http://www.gnu.org/software/" . $args{'module'} . "/manual/\n";
 ++	print ".PP\n";
 +     }
 + }
 + 
 +@@ -705,6 +774,10 @@
 +     eval "output_".$output_mode."(\@_);";
 + }
 + 
 ++sub output_enum {
 ++    eval "output_enum_".$output_mode."(\@_);";
 ++}
 ++
 + 
 + ##
 + # takes a function prototype and spits out all the details
 +@@ -744,7 +817,7 @@
 + #	    print STDERR " :> @args\n";
 + 	    $type = join " ", @args;
 + 
 +-	    if ($parameters{$param} eq "" && $param != "void") {
 ++	    if ((!defined($parameters{$param}) || $parameters{$param} eq "") && $param ne "void") {
 + 		$parameters{$param} = "-- undescribed --";
 + 		print STDERR "warning: $lineno: Function parameter '$param' not described in '$function_name'\n";
 + 	    }
 +@@ -781,6 +854,56 @@
 +     }
 + }
 + 
 ++sub dump_enum {
 ++    my $prototype = shift @_;
 ++
 ++    if (($prototype =~ m/^\s*typedef\s+enum\s*[a-zA-Z0-9_~:]*\s*\{([\-a-zA-Z0-9_~=,:\s\(\)\<]+)\s*\}\s*([a-zA-Z0-9_]+);.*/)) {
 ++#        || $prototype =~ m/^\s*enum\s+([a-zA-Z0-9_~:]+).*/) {
 ++        $args = $1;
 ++	$name = $2;
 ++
 ++	foreach $arg (split ',', $args) {
 ++	    # strip leading/trailing spaces
 ++	    $arg =~ s/^\s*//;
 ++	    $arg =~ s/\s*$//;
 ++	    $arg =~ s/([A-Za-z0-9_]+)\s*=.*/$1/g;
 ++#	    print STDERR "SCAN ARG: '$arg'\n";
 ++
 ++            next if $arg eq '';
 ++	    if ((!defined($parameters{$arg}) || $parameters{$arg} eq "")) {
 ++		$parameters{$arg} = "-- undescribed --";
 ++		print STDERR "warning: $lineno: Enumeration parameter '$arg' not described in '$name'\n";
 ++	    }
 ++
 ++	    push @parameterlist, $arg;
 ++
 ++#	    print STDERR "param = '$arg'\n";
 ++	}
 ++    } else {
 ++#	print STDERR "warning: $lineno: Cannot understand enumeration: '$prototype'\n";
 ++	return;
 ++    }
 ++
 ++    output_enum({'enum' => $name,
 ++			 'module' => $modulename,
 ++			 'sourceversion' => $sourceversion,
 ++			 'include' => $include,
 ++			 'includefuncprefix' => $includefuncprefix,
 ++			 'bugsto' => $bugsto,
 ++			 'pkgname' => $pkgname,
 ++			 'copyright' => $copyright,
 ++			 'verbatimcopying' => $verbatimcopying,
 ++			 'seeinfo' => $seeinfo,
 ++			 'functiontype' => $return_type,
 ++			 'parameterlist' => \@parameterlist,
 ++			 'parameters' => \%parameters,
 ++			 'parametertypes' => \%parametertypes,
 ++			 'sectionlist' => \@sectionlist,
 ++			 'sections' => \%sections,
 ++			 'purpose' => $function_purpose
 ++			 });
 ++}
 ++
 + ######################################################################
 + # main
 + # states
 +@@ -797,7 +920,7 @@
 + $doc_end = "\\*/";
 + $doc_com = "\\s*\\*\\s*";
 + $doc_func = $doc_com."(\\w+):?";
 +-$doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w ]+):\\s*(.*)";
 ++$doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w]+):\\s*(.*)";
 + $doc_content = $doc_com."(.*)";
 + 
 + %constants = ();
 +@@ -809,6 +932,7 @@
 + $contents = "";
 + $section_default = "Description";	# default section
 + $section = $section_default;
 ++$enum = 0;
 + 
 + $lineno = 0;
 + foreach $file (@ARGV) {
 +@@ -816,18 +940,21 @@
 + 	print STDERR "Error: Cannot open file $file\n";
 + 	next;
 +     }
 +-    while (<IN>) {
 ++    while ($line = <IN>) {
 + 	$lineno++;
 + 
 + 	if ($state == 0) {
 +-	    if (/$doc_start/o) {
 ++	    if ($line =~ /$doc_start/o) {
 + 		$state = 1;		# next line is always the function name
 ++#	    print STDERR "XXX: start of doc comment\n";
 + 	    }
 + 	} elsif ($state == 1) {	# this line is the function name (always)
 +-	    if (/$doc_func/o) {
 ++	    if ($line =~ /$doc_func/o) {
 + 		$function = $1;
 + 		$state = 2;
 +-		if (/-\s*(.*)/) {
 ++#	    print STDERR "XXX: start of doc comment, looking for prototype\n";
 ++
 ++		if ($line =~ /-\s*(.*)/) {
 + 		    $function_purpose = $1;
 + 		} else {
 + 		    $function_purpose = "";
 +@@ -841,11 +968,11 @@
 + 		$state = 0;
 + 	    }
 + 	} elsif ($state == 2) {	# look for head: lines, and include content
 +-	    if (/$doc_sect/o) {
 ++	    if ($line =~ /$doc_sect/o) {
 + 		$newsection = $1;
 + 		$newcontents = $2;
 + 
 +-		if ($contents ne "") {
 ++		if ($contents ne '') {
 + 		    dump_section($section, $contents);
 + 		    $section = $section_default;
 + 		}
 +@@ -855,7 +982,7 @@
 + 		    $contents .= "\n";
 + 		}
 + 		$section = $newsection;
 +-	    } elsif (/$doc_end/) {
 ++	    } elsif ($line =~ /$doc_end/) {
 + 
 + 		if ($contents ne "") {
 + 		    dump_section($section, $contents);
 +@@ -863,13 +990,12 @@
 + 		    $contents = "";
 + 		}
 + 
 +-#	    print STDERR "end of doc comment, looking for prototype\n";
 + 		$prototype = "";
 + 		$state = 3;
 +-	    } elsif (/$doc_content/) {
 ++	    } elsif ($line =~ /$doc_content/) {
 + 		# miguel-style comment kludge, look for blank lines after
 + 		# @parameter line to signify start of description
 +-		if ($1 eq "" && $section =~ m/^@/) {
 ++		if ($1 eq '' && $section =~ m/^@/) {
 + 		    dump_section($section, $contents);
 + 		    $section = $section_default;
 + 		    $contents = "";
 +@@ -881,13 +1007,16 @@
 + 		print STDERR "warning: $lineno: Bad line: $_";
 + 	    }
 + 	} elsif ($state == 3) {	# scanning for function { (end of prototype)
 +-	    if (m#\s*/\*\s+MACDOC\s*#io) {
 ++	    if ($line =~ m#\s*/\*\s+MACDOC\s*#io) {
 + 	      # do nothing
 + 	    }
 +-	    elsif (/([^\{]*)/) {
 ++	    elsif ($enum == 1 && $line =~ /(^\s*\{).*/) {
 ++		$prototype .= "{";
 ++	    }
 ++	    elsif ($line =~ /([^\{]*)/) {
 + 		$prototype .= $1;
 + 	    }
 +-	    if (/\{/) {
 ++	    if ($enum == 0 && $line =~ /\{/) {
 + 		$prototype =~ s@/\*.*?\*/@@gos;	# strip comments.
 + 		$prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
 + 		$prototype =~ s@^ +@@gos; # strip leading spaces
 +@@ -901,9 +1030,32 @@
 + 		%sections = ();
 + 		@sectionlist = ();
 + 		$prototype = "";
 ++		$enum = 0;
 + 
 + 		$state = 0;
 + 	    }
 ++	    elsif ($enum == 1 && $line =~ /\}/) {
 ++		$prototype =~ s@/\*.*?\*/@@gos;	# strip comments.
 ++		$prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
 ++		$prototype =~ s@^ +@@gos; # strip leading spaces
 ++		dump_enum($prototype);
 ++
 ++		$function = "";
 ++		%constants = ();
 ++		%parameters = ();
 ++		%parametertypes = ();
 ++		@parameterlist = ();
 ++		%sections = ();
 ++		@sectionlist = ();
 ++		$prototype = "";
 ++		$enum = 0;
 ++
 ++		$state = 0;
 ++	    }
 ++	    elsif ($line =~ /([a-zA-Z\s]+)enum(.*)$/) {
 ++	        $enum = 1;
 ++	    }
 ++    
 + 	}
 +     }
 + }
 _______________________________________________
 svn-ports-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-ports-all
 To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->closed 
State-Changed-By: novel 
State-Changed-When: Mon Jan 13 15:11:26 UTC 2014 
State-Changed-Why:  
Should be fixed now. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=185595 
>Unformatted:
