From owner-freebsd-ports@FreeBSD.ORG Thu Aug 19 21:24:17 2010 Return-Path: Delivered-To: freebsd-ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AC14D1065747; Thu, 19 Aug 2010 21:24:17 +0000 (UTC) (envelope-from jhellenthal@gmail.com) Received: from mail-qy0-f182.google.com (mail-qy0-f182.google.com [209.85.216.182]) by mx1.freebsd.org (Postfix) with ESMTP id 4AEAA8FC1B; Thu, 19 Aug 2010 21:24:15 +0000 (UTC) Received: by qyk4 with SMTP id 4so2631766qyk.13 for ; Thu, 19 Aug 2010 14:24:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:message-id:date:from :user-agent:mime-version:to:cc:subject:references:in-reply-to :x-enigmail-version:content-type; bh=sblDzu4vMRlsbV+UX/e0tWUFhVyJAKKe9BqnTbrg+pM=; b=I44qJYjO7/t8iWBQKNQfBItamwLR3UA7mGgjAMrJSSJuPYJvlcVfuwayltfiuPc0ka IxmB/lZVMiD8xSa95DNKCO09wt9fgVsQw/5TWWv9pv6AOHtgUfefdQEndmeZJQRs2GTF d6ySlAsrHc9IBWseddqbgzjv7RzCPlxmigxP0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:x-enigmail-version:content-type; b=ApJ2kCf5TTRwFWvcz+oOmIoosBt3jYUgnEQKBfJZuA+hgH3YmVU24+UWwp8TDPg12U /xu8dlML/lMRdYO7EfeUyI7A0+FoMPTKtctRngerQJgxhROhdm92PlwCfJySq20ffMFB V8NX63ktWfbd3qPuK4ZOJCmEd2RFC/8eCU0Uo= Received: by 10.229.233.142 with SMTP id jy14mr399522qcb.77.1282253055025; Thu, 19 Aug 2010 14:24:15 -0700 (PDT) Received: from centel.dataix.local (adsl-99-190-84-182.dsl.klmzmi.sbcglobal.net [99.190.84.182]) by mx.google.com with ESMTPS id l13sm2042932qck.43.2010.08.19.14.24.11 (version=SSLv3 cipher=RC4-MD5); Thu, 19 Aug 2010 14:24:13 -0700 (PDT) Sender: "J. Hellenthal" Message-ID: <4C6DA0FA.7080203@DataIX.net> Date: Thu, 19 Aug 2010 17:24:10 -0400 From: jhell User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.2.8) Gecko/20100806 Lightning/1.0b1 Thunderbird MIME-Version: 1.0 To: Ivan Voras References: <20100819143830.GJ35140@azathoth.lan> In-Reply-To: X-Enigmail-Version: 1.1.2 Content-Type: multipart/mixed; boundary="------------040104070006050800060606" Cc: bapt@freebsd.org, Florent Thoumie , Julien Laffaye , David Forsythe , Garrett Cooper , Tim Kientzle , freebsd-ports@freebsd.org Subject: Re: what next for the pkg_install rewrite X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Aug 2010 21:24:17 -0000 This is a multi-part message in MIME format. --------------040104070006050800060606 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 08/19/2010 12:50, Ivan Voras wrote: > - Fully specify and separate package name from its version - metadata > should not record "apache-2.2.13" but "apache", "2.2.13" to better > support upgrading and dependancies. > - Debian-like dependancies - the "suggests" variety, as well as > "ranged-dependancies" - package X depends on Y versions W through Z. > - A wrapper for all pkg_ tools to use, implemented with libarchive. > This wrapper would allow preparation of the whole archive layout > in-memory, together with simulating common file system operations > like chmod, chown, rmdir, mkdir, rename, unlink, etc. and would as a > last step offer to serialize this virtual file system to an archive. > - Policy to forbid the lazy-maintainer dances with package names, such > as package names depending on config flags used, etc. - this probably > needs more thinking through. Essentially, I want to avoid things like > what happened to the apr port - names like > "apr-ipv6-devrandom-gdbm-db42-1.4.2.9.3.1_1" Adding to this I would like to see a central database created for packages that have been removed like in Slackware Linux. They keep a file in /var/log/preserved_packages with a flat text format with the file name looking like: ${PORTNAME}-${PORTVERSION}${PORTREVISION}-`date +%Y%m%d%H%M%S` With the contents being that of all the actions that were performed upon package removal & and any output from errors etc. Id like to see that same approach achieved within /var/db/preserved or something similiar for a suggestion. I have attached a copy of removepkg from Slackware 13.1 that appears to be a 1 clause BSD license ;) for reference. As well I would also like to see something done about packages that don't need to be upgraded because they are neither platform or arch dependent but yet they are upgraded due to being listed as a dependent of another port that needs to be upgraded. For example any package that may be type shell script does not need updating due to a major lib version bump of for say libpng. Regards, -- jhell,v --------------040104070006050800060606 Content-Type: text/plain; name="removepkg.asc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="removepkg.asc" LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQpIYXNoOiBTSEExCgojIS9iaW4v c2gKIyBTbGFja3dhcmUgcmVtb3ZlIHBhY2thZ2Ugc2NyaXB0CiMKIyBTYXQgQXByIDI1IDIx OjE4OjUzIFVUQyAyMDA5ICgxMi4zNDU2Nzg5MGIpCiMgQ29udmVydGVkIHRvIHVzZSBuZXcg cGtnYmFzZSgpIGZ1bmN0aW9uIHRvIHJlbW92ZSBwYXRobmFtZSBhbmQKIyB2YWxpZCBwYWNr YWdlIGV4dGVuc2lvbnMuCiMKIyBSZXZpc2lvbiAxMi4zNDU2Nzg5MCBTdW4gQXByICA1IDIw OjU5OjMyIENEVCAyMDA5IDx2b2xrZXJkaT4KIyAtIFN1cHBvcnQgcGFja2FnZXMgd2l0aCB0 aGUgZXh0ZW5zaW9uczogLnRneiwgLnRieiwgLnRseiwgLnR4egojCiMgUmV2aXNpb24gMS45 IFdlZCBPY3QgMzEgMTQ6MDQ6MjggQ0RUIDIwMDcgdm9sa2VyZGluZwojIC0gRml4IHByb2Js ZW0gcmVtb3ZpbmcgcGFja2FnZXMgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBmaWVsZHMuCiMg ICBUaGFua3MgdG8gTmlraSBLb3ZhY3MgZm9yIG5vdGljaW5nIHRoaXMsIGFuZCB0byBQaXRl ciBQdW5rCiMgICBmb3IgdGhlIHBhdGNoLgojIC0gVXNlIExDX0FMTD1DIGxvY2FsZSwgd2hp Y2ggaXMgbXVjaCBmYXN0ZXIgd2l0aCAic29ydCIuCiMgICBUaGFua3MgdG8gVHNvbWkuCiMg LSBEb24ndCB0cnkgdG8gcmVtb3ZlIGFueSBwYWNrYWdlIHRoYXQgc3RhcnRzIHdpdGggJy0n LiAgVGhpcwojICAgaXMgbm90IGEgcHJvcGVyIHBhY2thZ2UgbmFtZSAodXN1YWxseSBhIHR5 cG8pLCBhbmQgcmVzdWx0cwojICAgaW4gdGhlIHBhY2thZ2UgZGF0YWJhc2UgYmVpbmcgYnJv a2VuLiAgVGhhbmtzIHRvIEplZiBPbGl2ZXIuCiMgLSBQYXRjaGVkIGNhdF9leGNlcHQoKSB0 byBhbGxvdyB0aGUgbGFzdCBTbGFja3dhcmUgcGFja2FnZSBvbgojICAgYSBwYXJ0aXRpb24g dG8gYmUgcmVtb3ZlZCAodXNpbmcgUk9PVD0sIG9mIGNvdXJzZSkKIyAgIFRoYW5rcyB0byBT ZWxrZm9zdGVyIGZvciB0aGUgcGF0Y2gsIGFuZCB0byBldmVyeW9uZSBlbHNlIHdobwojICAg cHJvcG9zZWQgc29sdXRpb25zIGJlZm9yZS4gIFRoaXMgaXNzdWUgcmVhbGx5IHdhc24ndCBn aXZlbgojICAgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgYmVmb3JlLCBidXQgSSBmaWd1cmVkIHdo aWxlIEknbSBpbiBoZXJlLi4uCiMKIyBSZXZpc2lvbiAxLjggVGh1IE5vdiAyMiAxNDowMDox MyBQU1QgMjAwMSB2b2xrZXJkaW5nIFJlbCAkCiMgLSBNb3ZlICRUTVAgdW5kZXJuZWF0aCAk Uk9PVAojIC0gVW5kZXJzdGFuZCB0aGUgaWRlYSBvZiBhIGJhc2UgcGFja2FnZSBuYW1lLCBz byB0aGF0IHBhY2thZ2VzCiMgICBjYW4gYmUgcmVtb3ZlZCB3aXRoIGFueSBvZiB0aGVzZSBu b3RhdGlvbnM6CiMgICByZW1vdmVwa2cgZm9vLTEuMC1pMzg2LTEudGd6CiMgICByZW1vdmVw a2cgZm9vLTEuMC1pMzg2LTEKIyAgIHJlbW92ZXBrZyBmb28udGd6CiMgICByZW1vdmVwa2cg Zm9vCiMKIyBSZXZpc2lvbiAxLjcgIDIwMDEvMDMvMzAgMTI6MzY6Mjggdm9sa2VyZGluZwoj IC0gU3RyaXAgZXh0cmEgIi50Z3oiIGZyb20gaW5wdXQgbmFtZXMuCiMKIyBSZXZpc2lvbiAx LjYgIDE5OTkvMDMvMjUgMTg6MjY6NDEgdm9sa2VyZGluZwojIC0gVXNlIGV4dGVybmFsICRS T09UIHZhcmlhYmxlLCBsaWtlIGluc3RhbGxwa2cuCiMKIyBSZXZpc2lvbiAxLjUuMSAgMTk5 OC8wMy8xOCAxNTozNzoyOCB2b2xrZXJkaW5nCiMgLSBTaW5jZSByZW1vdmVwa2cgaXMgYWx3 YXlzIHJ1biBieSByb290LCB0aGUgdGVtcCBkaXJlY3RvcnkgaGFzIGJlZW4KIyAgIG1vdmVk IGZyb20gL3RtcCB0byBhIHByaXZhdGUgZGlyZWN0b3J5IHRvIGF2b2lkIHN5bWxpbmsgYXR0 YWNrcyBmcm9tCiMgICBtYWxpY2lvdXMgdXNlcnMuCiMKIyBSZXZpc2lvbiAxLjUgIDE5OTcv MDYvMjYgMTI6MDk6NTMgIGZyYW5rZQojIC0gRml4ZWQgb2xkIGJ1ZyBpbiBUUklHR0VSIHJl Z2V4IHNldHRpbmcKIyAtIC1wcmVzZXJ2ZS8tY29weSBvcHRpb25zIG5vdyBwcmVzZXJ2ZSBu b24tdW5pcXVlIGZpbGVzCiMgICBhbmQgZW1wdHkgZGlyZWN0b3JpZXMgYWxzbwojCiMgUmV2 aXNpb24gMS40ICAxOTk3LzA2LzA5IDEzOjIxOjM2ICBmcmFua2UKIyAtIFBhY2thZ2UgZmls ZSBwcmVzZXJ2ZSAoLXByZXNlcnZlLCAtY29weSkgYWRkZWQuCiMgLSBEb24ndCBleGVjdXRl ICJybSAtcmYiIGxpbmVzIGZyb20gZG9pbnN0LnNoLCByZW1vdmluZyBsaW5rcyBleHBsaWNp dC4KIyAtIFdhcm5pbmcgb24gbm8gbG9uZ2VyIGV4aXN0aW5nIGZpbGVzIGFkZGVkLgojIC0g V2FybmluZyBvbiBmaWxlcyBjaGFuZ2VkIGFmdGVyIHBhY2thZ2UgaW5zdGFsbGF0aW9uIGFk ZGVkLgojIC0gSW50ZXJtZWRpYXRlIGZpbGUgcHJlc2VydmUgKC1rZWVwKSBhZGRlZC4KIyAt IENoZWNrIGZvciByZXF1aXJlZCBmaWxlcy9saW5rcyBub3cgZG9uZSBvbiBhIGNvbWJpbmVk IGxpc3QuCiMgLSBXcml0ZSBhY2Nlc3MgdG8gL3Zhci9sb2cve3BhY2thZ2VzLHNjcmlwdHN9 IG5vIGxvbmdlciBuZWNlc3NhcnkgZm9yIC13YXJuLgojCiMgUmV2aXNpb24gMS4zICAxOTk3 LzA2LzA4IDEzOjAzOjA1ICBmcmFua2UKIyBNZXJnZWQgd2l0aCByZXZpc2lvbiAxLjEuMS4x CiMKIyBSZXZpc2lvbiAxLjIgIDE5OTYvMDYvMDEgMjA6MDQ6MjYgIGZyYW5rZQojIERlbGV0 ZSBlbXB0eSBkaXJlY3RvcmllcyAmIGZvcm1hdGVkIG1hbnVhbCBwYWdlcyBhZGRlZAojCiMg UmV2aXNpb24gMS4xLjEuMSAgMTk5NS8xMi8xOCAyMToyMDo0MiAgdm9sa2VyZGluZwojIE9y aWdpbmFsIFZlcnNpb24gZnJvbSBTbGFja3dhcmUgMy4xCiMKIyBSZXZpc2lvbiAxLjEgIDE5 OTUvMDYvMDUgMjI6NDk6MTEgIHZvbGtlcmRpbmcKIyBPcmlnaW5hbCBWZXJzaW9uIGZyb20g U2xhY2t3YXJlIDMuMAojCgojIENvcHlyaWdodCAxOTk0LCAxOTk1LCAxOTk4ICBQYXRyaWNr IFZvbGtlcmRpbmcsIE1vb3JoZWFkLCBNaW5uZXNvdGEgVVNBCiMgQ29weXJpZ2h0IDIwMDEs IFNsYWNrd2FyZSBMaW51eCwgSW5jLiwgQ29uY29yZCwgQ0EgVVNBCiMgQ29weXJpZ2h0IDIw MDkgIFBhdHJpY2sgSi4gVm9sa2VyZGluZywgU2ViZWthLCBNTiwgVVNBCiMgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KIwojIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzY3JpcHQs IHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGlzIAojIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgojCiMgMS4gUmVkaXN0 cmlidXRpb25zIG9mIHRoaXMgc2NyaXB0IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCiMKIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg QVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAojICBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO VElFUyBPRiAKIyAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PCiMgIEVWRU5UIFNIQUxMIFRIRSBB VVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg CiMgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKIyAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CiMg IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCAKIyAgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgCiMgIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgCiMgIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgojCgojIFJldHVybiBhIHBhY2thZ2UgbmFtZSB0aGF0IGhhcyBiZWVuIHN0cmlwcGVkIG9m IHRoZSBkaXJuYW1lIHBvcnRpb24KIyBhbmQgYW55IG9mIHRoZSB2YWxpZCBleHRlbnNpb25z IChvbmx5KToKcGtnYmFzZSgpIHsKICBQS0dFWFQ9JChlY2hvICQxIHwgcmV2IHwgY3V0IC1m IDEgLWQgLiB8IHJldikKICBjYXNlICRQS0dFWFQgaW4KICAndGd6JyApCiAgICBQS0dSRVRV Uk49JChiYXNlbmFtZSAkMSAudGd6KQogICAgOzsKICAndGJ6JyApCiAgICBQS0dSRVRVUk49 JChiYXNlbmFtZSAkMSAudGJ6KQogICAgOzsKICAndGx6JyApCiAgICBQS0dSRVRVUk49JChi YXNlbmFtZSAkMSAudGx6KQogICAgOzsKICAndHh6JyApCiAgICBQS0dSRVRVUk49JChiYXNl bmFtZSAkMSAudHh6KQogICAgOzsKICAqKQogICAgUEtHUkVUVVJOPSQoYmFzZW5hbWUgJDEp CiAgICA7OwogIGVzYWMKICBlY2hvICRQS0dSRVRVUk4KfQoKIyBUaGlzIG1ha2VzICJzb3J0 IiBydW4gbXVjaCBmYXN0ZXI6CmV4cG9ydCBMQ19BTEw9QwoKIyBNYWtlIHN1cmUgdGhlcmUn cyBhIHByb3BlciB0ZW1wIGRpcmVjdG9yeToKVE1QPSRST09UL3Zhci9sb2cvc2V0dXAvdG1w CiMgSWYgdGhlICRUTVAgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdDoKaWYg WyAhIC1kICRUTVAgXTsgdGhlbgogIHJtIC1yZiAkVE1QICMgbWFrZSBzdXJlIGl0J3Mgbm90 IGEgc3ltbGluayBvciBzb21ldGhpbmcgc3R1cGlkCiAgbWtkaXIgLXAgJFRNUAogIGNobW9k IDcwMCAkVE1QICMgbm8gbmVlZCB0byBsZWF2ZSBpdCBvcGVuCmZpCkFETV9ESVI9JFJPT1Qv dmFyL2xvZwpQUkVTX0RJUj0kVE1QL3ByZXNlcnZlZF9wYWNrYWdlcwoKIyBUaGlzIHNpbXBs ZSBjYXRfZXhjZXB0KCkgc2hvdWxkIGJlIHVzZWQgb24gdGhlIGluc3RhbGxlciwKIyBzaW5j ZSB0aGUgYnVzeWJveCAiZmluZCIgY2FuJ3QgaGFuZGxlIHRoZSBjb21wbGV4IGZpbmQKIyBz eW50YXg6CiNjYXRfZXhjZXB0KCkgewojICggY2QgIiQxIiAmJiBjYXQgJChscyAqIHwgc2Vk ICIvXiQyXCQvZCIpKQojfQoKIyBUaGlzIHZlcnNpb24gb2YgY2F0X2V4Y2VwdCgpIGFsbG93 cyB0aGUgbGFzdCBwYWNrYWdlIHRvIGJlCiMgcmVtb3ZlZCB3aGVuIFJPT1Q9IGlzIHVzZWQ6 CmNhdF9leGNlcHQoKSB7CiAgKCBjZCAiJDEiICYmIFwKICAgIGlmIFsgJChmaW5kIC4gLXR5 cGUgZiAtbWF4ZGVwdGggMSB8IHdjIC1sKSAtbmUgMSBdOyB0aGVuCiAgICAgIGNhdCAkKGZp bmQgLiAtdHlwZSBmIC1tYXhkZXB0aCAxIHwgZ3JlcCAtdiAiJDIiKQogICAgZmkKICApCn0K CmV4dHJhY3RfbGlua3MoKSB7CiBzZWQgLW4gJ3MsXiggKmNkIFwoW14gO11bXiA7XSpcKSAq OyAqcm0gLXJmIFwoW14gKV1bXiApXSpcKSAqKSAqJCxcMS9cMixwJwp9CgpwcmVzZXJ2ZV9m aWxlKCkgewogaWYgWyAiJFBSRVNFUlZFIiA9ICJ0cnVlIiBdOyB0aGVuCiAgRj0iJChiYXNl bmFtZSAiJDEiKSIKICBEPSIkKGRpcm5hbWUgIiQxIikiCiAgaWYgWyAhIC1kICIkUFJFU19E SVIvJFBLR05BTUUvJEQiIF07IHRoZW4KICAgIG1rZGlyIC1wICIkUFJFU19ESVIvJFBLR05B TUUvJEQiIHx8IHJldHVybiAxCiAgZmkKICBjcCAtcCAiJFJPT1QvJEQvJEYiICIkUFJFU19E SVIvJFBLR05BTUUvJEQiIHx8IHJldHVybiAxCiBmaQogcmV0dXJuIDAKfQoKcHJlc2VydmVf ZGlyKCkgewogaWYgWyAiJFBSRVNFUlZFIiA9ICJ0cnVlIiBdOyB0aGVuCiAgaWYgWyAhIC1k ICIkUFJFU19ESVIvJFBLR05BTUUvJDEiIF07IHRoZW4KICAgIG1rZGlyIC1wICIkUFJFU19E SVIvJFBLR05BTUUvJDEiIHx8IHJldHVybiAxCiAgZmkKIGZpCiByZXR1cm4gMAp9CgprZWVw X2ZpbGVzKCkgewogd2hpbGUgcmVhZCBGSUxFIDsgZG8KICBpZiBbICEgLWQgIiRST09ULyRG SUxFIiBdOyB0aGVuCiAgIGlmIFsgLXIgIiRST09ULyRGSUxFIiBdOyB0aGVuCiAgICBlY2hv ICIgIC0tPiAkUk9PVC8kRklMRSB3YXMgZm91bmQgaW4gYW5vdGhlciBwYWNrYWdlLiBTa2lw cGluZy4iCiAgICBwcmVzZXJ2ZV9maWxlICIkRklMRSIKICAgZWxzZQogICAgaWYgWyAiJChl Y2hvICRGSUxFIHwgY3V0IC1iMS04KSIgIT0gImluc3RhbGwvIiBdOyB0aGVuCiAgICAgZWNo byAiV0FSTklORzogTm9uZXhpc3RlbnQgJFJPT1QvJEZJTEUgd2FzIGZvdW5kIGluIGFub3Ro ZXIgcGFja2FnZS4gU2tpcHBpbmcuIgogICAgZmkKICAgZmkKICBlbHNlCiAgIHByZXNlcnZl X2RpciAiJEZJTEUiCiAgZmkKIGRvbmUKfQoKa2VlcF9saW5rcygpIHsKIHdoaWxlIHJlYWQg TElOSyA7IGRvCiAgaWYgWyAtTCAiJFJPT1QvJExJTksiIF07IHRoZW4KICAgZWNobyAiICAt LT4gJFJPT1QvJExJTksgKHN5bWxpbmspIHdhcyBmb3VuZCBpbiBhbm90aGVyIHBhY2thZ2Uu IFNraXBwaW5nLiIKICBlbHNlCiAgIGVjaG8gIldBUk5JTkc6IE5vbmV4aXN0ZW50ICRST09U LyRMSU5LIChzeW1saW5rKSB3YXMgZm91bmQgaW4gYW5vdGhlciBwYWNrYWdlLiBTa2lwcGlu Zy4iCiAgZmkKIGRvbmUKfQoKZGVsZXRlX2ZpbGVzKCkgewogd2hpbGUgcmVhZCBGSUxFIDsg ZG8KICBpZiBbICEgLWQgIiRST09ULyRGSUxFIiBdOyB0aGVuCiAgIGlmIFsgLXIgIiRST09U LyRGSUxFIiBdOyB0aGVuCiAgICBpZiBbICIkUk9PVC8kRklMRSIgLW50ICIkQURNX0RJUi9w YWNrYWdlcy8kUEtHTkFNRSIgXTsgdGhlbgogICAgIGVjaG8gIldBUk5JTkc6ICRST09ULyRG SUxFIGNoYW5nZWQgYWZ0ZXIgcGFja2FnZSBpbnN0YWxsYXRpb24uIgogICAgZmkKICAgIGlm IFsgISAiJFdBUk4iID0gInRydWUiIF07IHRoZW4KICAgICBlY2hvICIgIC0tPiBEZWxldGlu ZyAkUk9PVC8kRklMRSIKICAgICBwcmVzZXJ2ZV9maWxlICIkRklMRSIgJiYgcm0gLWYgIiRS T09ULyRGSUxFIgogICAgZWxzZQogICAgIGVjaG8gIiAgLS0+ICRST09ULyRGSUxFIHdvdWxk IGJlIGRlbGV0ZWQiCiAgICAgcHJlc2VydmVfZmlsZSAiJEZJTEUiCiAgICBmaQogICBlbHNl CiAgICBlY2hvICIgIC0tPiAkUk9PVC8kRklMRSBubyBsb25nZXIgZXhpc3RzLiBTa2lwcGlu Zy4iCiAgIGZpCiAgZWxzZQogICBwcmVzZXJ2ZV9kaXIgIiRGSUxFIgogIGZpCiBkb25lCn0K CmRlbGV0ZV9saW5rcygpIHsKIHdoaWxlIHJlYWQgTElOSyA7IGRvCiAgaWYgWyAtTCAiJFJP T1QvJExJTksiIF07IHRoZW4KICAgaWYgWyAhICIkV0FSTiIgPSAidHJ1ZSIgXTsgdGhlbgog ICAgZWNobyAiICAtLT4gRGVsZXRpbmcgc3ltbGluayAkUk9PVC8kTElOSyIKICAgIHJtIC1m ICRST09ULyRMSU5LCiAgIGVsc2UKICAgIGVjaG8gIiAgLS0+ICRST09ULyRMSU5LIChzeW1s aW5rKSB3b3VsZCBiZSBkZWxldGVkIgogICBmaQogIGVsc2UKICAgZWNobyAiICAtLT4gJFJP T1QvJExJTksgKHN5bWxpbmspIG5vIGxvbmdlciBleGlzdHMuIFNraXBwaW5nLiIKICBmaQog ZG9uZQp9CgpkZWxldGVfZGlycygpIHsKIHNvcnQgLXIgfCBcCiB3aGlsZSByZWFkIERJUiA7 IGRvCiAgaWYgWyAtZCAiJFJPT1QvJERJUiIgXTsgdGhlbgogICAgaWYgWyAhICIkV0FSTiIg PSAidHJ1ZSIgXTsgdGhlbgogICAgICBpZiBbICQobHMgLWEgIiRST09ULyRESVIiIHwgd2Mg LWwpIC1lcSAyIF07IHRoZW4KICAgICAgICBlY2hvICIgIC0tPiBEZWxldGluZyBlbXB0eSBk aXJlY3RvcnkgJFJPT1QvJERJUiIKICAgICAgICBybWRpciAiJFJPT1QvJERJUiIKICAgICAg ZWxzZQogICAgICAgIGVjaG8gIldBUk5JTkc6IFVuaXF1ZSBkaXJlY3RvcnkgJFJPT1QvJERJ UiBjb250YWlucyBuZXcgZmlsZXMiCiAgICAgIGZpCiAgICBlbHNlCiAgICAgZWNobyAiICAt LT4gJFJPT1QvJERJUiAoZGlyKSB3b3VsZCBiZSBkZWxldGVkIGlmIGVtcHR5IgogICAgZmkK ICBmaQogZG9uZQp9CgpkZWxldGVfY2F0cygpIHsKIHNlZCAtbiAncywvbWFuXCguL1teL10q JFwpLC9jYXRcMSxwJyAgfCBcCiB3aGlsZSByZWFkIEZJTEUgOyBkbwogICBpZiBbIC1mICIk Uk9PVC8kRklMRSIgXTsgdGhlbgogICAgIGlmIFsgISAiJFdBUk4iID0gInRydWUiIF07IHRo ZW4KICAgICAgIGVjaG8gIiAgLS0+IERlbGV0aW5nICRST09ULyRGSUxFIChmbXQgbWFuIHBh Z2UpIgogICAgICAgcm0gLWYgJFJPT1QvJEZJTEUKICAgICBlbHNlCiAgICAgICBlY2hvICIg IC0tPiAkUk9PVC8kRklMRSAoZm10IG1hbiBwYWdlKSB3b3VsZCBiZSBkZWxldGVkIgogICAg IGZpCiAgIGZpCiBkb25lCn0KCnBhY2thZ2VfbmFtZSgpIHsKICBTVFJJTkc9JChwa2diYXNl ICQxKQogICMgSWYgd2UgZG9uJ3QgZG8gdGhpcywgY29tbWFuZHMgcnVuIGxhdGVyIHdpbGwg dGFrZSB0aGUgJy0nIHRvIGJlIGFuIG9wdGlvbgogICMgYW5kIHdpbGwgZGVzdHJveSB0aGUg cGFja2FnZSBkYXRhYmFzZS4gIFBhY2thZ2VzIHNob3VsZCBub3QgY29udGFpbiBzcGFjZXMK ICAjIGluIHRoZW0uICBOb3JtYWxseSB0aGlzIHR5cGUgb2YgcHJvYmxlbSByZXN1bHRzIGZy b20gYSBjb21tYW5kIGxpbmUgdHlwby4KICBpZiBbICIkKGVjaG8gJFNUUklORyB8IGN1dCAt YiAxKSIgPSAiLSIgXTsgdGhlbgogICAgU1RSSU5HPSJtYWxmb3JtZWQtcGFja2FnZS1uYW1l LWRldGVjdGVkIgogIGZpCiAgIyBDaGVjayBmb3Igb2xkIHN0eWxlIHBhY2thZ2UgbmFtZSB3 aXRoIG9uZSBzZWdtZW50OgogIGlmIFsgIiQoZWNobyAkU1RSSU5HIHwgY3V0IC1mIDEgLWQg LSkiID0gIiQoZWNobyAkU1RSSU5HIHwgY3V0IC1mIDIgLWQgLSkiIF07IHRoZW4KICAgIGVj aG8gJFNUUklORwogIGVsc2UgIyBoYXMgbW9yZSB0aGFuIG9uZSBkYXNoIGRlbGltaXRlZCBz ZWdtZW50CiAgICAjIENvdW50IG51bWJlciBvZiBzZWdtZW50czoKICAgIElOREVYPTEKICAg IHdoaWxlIFsgISAiJChlY2hvICRTVFJJTkcgfCBjdXQgLWYgJElOREVYIC1kIC0pIiA9ICIi IF07IGRvCiAgICAgIElOREVYPSQoZXhwciAkSU5ERVggKyAxKQogICAgZG9uZQogICAgSU5E RVg9JChleHByICRJTkRFWCAtIDEpICMgZG9uJ3QgaW5jbHVkZSB0aGUgbnVsbCB2YWx1ZQog ICAgIyBJZiB3ZSBkb24ndCBoYXZlIGZvdXIgc2VnbWVudHMsIHJldHVybiB0aGUgb2xkLXN0 eWxlIChvciBvdXQgb2Ygc3BlYykgcGFja2FnZSBuYW1lOgogICAgaWYgWyAiJElOREVYIiA9 ICIyIiAtbyAiJElOREVYIiA9ICIzIiBdOyB0aGVuCiAgICAgIGVjaG8gJFNUUklORwogICAg ZWxzZSAjIHdlIGhhdmUgZm91ciBvciBtb3JlIHNlZ21lbnRzLCBzbyB3ZSdsbCBjb25zaWRl ciB0aGlzIGEgbmV3LXN0eWxlIG5hbWU6CiAgICAgIE5BTUU9JChleHByICRJTkRFWCAtIDMp CiAgICAgIE5BTUU9IiQoZWNobyAkU1RSSU5HIHwgY3V0IC1mIDEtJE5BTUUgLWQgLSkiCiAg ICAgIGVjaG8gJE5BTUUKICAgICAgIyBjcnVmdCBmb3IgbGF0ZXIgOykKICAgICAgI1ZFUj0k KGV4cHIgJElOREVYIC0gMikKICAgICAgI1ZFUj0iJChlY2hvICRTVFJJTkcgfCBjdXQgLWYg JFZFUiAtZCAtKSIKICAgICAgI0FSQ0g9JChleHByICRJTkRFWCAtIDEpCiAgICAgICNBUkNI PSIkKGVjaG8gJFNUUklORyB8IGN1dCAtZiAkQVJDSCAtZCAtKSIKICAgICAgI0JVSUxEPSIk KGVjaG8gJFNUUklORyB8IGN1dCAtZiAkSU5ERVggLWQgLSkiCiAgICBmaQogIGZpCn0KCiMg Q29udmVyc2lvbiB0byAnY29tbScgdXRpbGl0eSBieSBNYXJrIFdpc2RvbS4KIyBpcyBwcmV0 dHkgbmlmdHkhIDpeKQpyZW1vdmVfcGFja2FnZXMoKSB7CiBmb3IgUEtHTElTVCBpbiAkKiAK IGRvCiAgUEtHTkFNRT0kKHBrZ2Jhc2UgJFBLR0xJU1QpCiAgZWNobwogICMgSWYgd2UgZG9u J3QgaGF2ZSBhIHBhY2thZ2UgbWF0Y2ggaGVyZSwgdGhlbiB3ZSB3aWxsIGF0dGVtcHQgdG8g ZmluZAogICMgYSBwYWNrYWdlIHVzaW5nIHRoZSBsb25nIG5hbWUgZm9ybWF0IChuYW1lLXZl cnNpb24tYXJjaC1idWlsZCkgZm9yCiAgIyB3aGljaCB0aGUgYmFzZSBwYWNrYWdlIG5hbWUg d2FzIGdpdmVuLiAgT24gYSBwcm9wZXJseS1tYW5hZ2VkIG1hY2hpbmUsCiAgIyB0aGVyZSBz aG91bGQgb25seSBiZSBvbmUgcGFja2FnZSBpbnN0YWxsZWQgd2l0aCBhIGdpdmVuIGJhc2Vu YW1lLCBidXQKICAjIHdlIGRvbid0IGVuZm9yY2UgdGhpcyBwb2xpY3kuICBJZiB0aGVyZSdz IG1vcmUgdGhhbiBvbmUsIG9ubHkgb25lIHdpbGwKICAjIGJlIHJlbW92ZWQuICBJZiB5b3Ug d2FudCB0byByZW1vdmUgdGhlbSBhbGwsIHlvdSdsbCBuZWVkIHRvIHJ1bgogICMgcmVtb3Zl cGtnIGFnYWluIHVudGlsIGl0IHJlbW92ZXMgYWxsIHRoZSBzYW1lLW5hbWVkIHBhY2thZ2Vz LgogIGlmIFsgISAtZSAkQURNX0RJUi9wYWNrYWdlcy8kUEtHTkFNRSBdOyB0aGVuCiAgIFNI T1JUPSIkKHBhY2thZ2VfbmFtZSAkUEtHTkFNRSkiCiAgIGZvciBsb25nX3BhY2thZ2UgaW4g JEFETV9ESVIvcGFja2FnZXMvJHtQS0dOQU1FfSogOyBkbwogICAgaWYgWyAiJFNIT1JUIiA9 ICIkKHBhY2thZ2VfbmFtZSAkbG9uZ19wYWNrYWdlKSIgXTsgdGhlbgogICAgIFBLR05BTUU9 IiQoYmFzZW5hbWUgJGxvbmdfcGFja2FnZSkiCiAgICBmaQogICBkb25lCiAgZmkKCiAgaWYg WyAhIC1lICRBRE1fRElSL3BhY2thZ2VzLyRQS0dOQU1FIF07IHRoZW4KICAgIGxvbmdfcGFj a2FnZT0kKGxzIC0xICRBRE1fRElSL3BhY2thZ2VzLyR7UEtHTkFNRX0qIHwgZ3JlcCAtbSAx ICIke1BLR05BTUV9LVteLV0qLVteLV0qLVteLV0qJCIpCiAgICBpZiBbIC1lICIkbG9uZ19w YWNrYWdlIiBdOyB0aGVuCiAgICAgIFBLR05BTUU9JChiYXNlbmFtZSAkbG9uZ19wYWNrYWdl KQogICAgZmkKICBmaQoKICBpZiBbIC1yICRBRE1fRElSL3BhY2thZ2VzLyRQS0dOQU1FIF07 IHRoZW4KICAgaWYgWyAhICIkV0FSTiIgPSB0cnVlIF07IHRoZW4KICAgIGVjaG8gIlJlbW92 aW5nIHBhY2thZ2UgJEFETV9ESVIvcGFja2FnZXMvJFBLR05BTUUuLi4iCiAgIGZpCiAgIGlm IGZncmVwICIuLyIgJEFETV9ESVIvcGFja2FnZXMvJFBLR05BTUUgMT4gL2Rldi9udWxsIDI+ JjE7IHRoZW4KICAgIFRSSUdHRVI9Il5cLlwvIgogICBlbHNlCiAgICBUUklHR0VSPSJGSUxF IExJU1Q6IgogICBmaQogICBpZiBbICEgIiRXQVJOIiA9IHRydWUgXTsgdGhlbgogICAgZWNo byAiUmVtb3ZpbmcgZmlsZXM6IgogICBmaQogICBzZWQgLW4gIi8kVFJJR0dFUi8sL14kL3Ai IDwgJEFETV9ESVIvcGFja2FnZXMvJFBLR05BTUUgfCBcCiAgICBmZ3JlcCAtdiAiRklMRSBM SVNUOiIgfCBzb3J0IC11ID4gJFRNUC9kZWxldGVfbGlzdCQkCiAgICMgUGF0J3MgbmV3LW5l dyAmJiBpbXByb3ZlZCBwcmUtcmVtb3ZhbCByb3V0aW5lLgogICBjYXRfZXhjZXB0ICRBRE1f RElSL3BhY2thZ2VzICRQS0dOQU1FIHwgc29ydCAtdSA+ICRUTVAvcmVxdWlyZWRfbGlzdCQk CiAgIGlmIFsgLXIgJEFETV9ESVIvc2NyaXB0cy8kUEtHTkFNRSBdOyB0aGVuCiAgICBleHRy YWN0X2xpbmtzIDwgJEFETV9ESVIvc2NyaXB0cy8kUEtHTkFNRSB8IHNvcnQgLXUgPiAkVE1Q L2RlbF9saW5rX2xpc3QkJAogICAgY2F0X2V4Y2VwdCAkQURNX0RJUi9zY3JpcHRzICRQS0dO QU1FIHwgZXh0cmFjdF9saW5rcyB8IFwKICAgICBzb3J0IC11ID4gJFRNUC9yZXF1aXJlZF9s aW5rcyQkCiAgICBtdiAkVE1QL3JlcXVpcmVkX2xpc3QkJCAkVE1QL3JlcXVpcmVkX2ZpbGVz JCQKICAgIHNvcnQgLXUgJFRNUC9yZXF1aXJlZF9saW5rcyQkICRUTVAvcmVxdWlyZWRfZmls ZXMkJCA+ICRUTVAvcmVxdWlyZWRfbGlzdCQkCiAgICBjb21tIC0xMiAkVE1QL2RlbF9saW5r X2xpc3QkJCAkVE1QL3JlcXVpcmVkX2xpc3QkJCB8IGtlZXBfbGlua3MKICAgIGNvbW0gLTIz ICRUTVAvZGVsX2xpbmtfbGlzdCQkICRUTVAvcmVxdWlyZWRfbGlzdCQkIHwgZGVsZXRlX2xp bmtzCiAgIGVsc2UKICAgIGNhdCAkQURNX0RJUi9zY3JpcHRzLyogfCBleHRyYWN0X2xpbmtz IHwgXAogICAgIHNvcnQgLXUgPiAkVE1QL3JlcXVpcmVkX2xpbmtzJCQKICAgIG12ICRUTVAv cmVxdWlyZWRfbGlzdCQkICRUTVAvcmVxdWlyZWRfZmlsZXMkJAogICAgc29ydCAtdSAkVE1Q L3JlcXVpcmVkX2xpbmtzJCQgJFRNUC9yZXF1aXJlZF9maWxlcyQkID4kVE1QL3JlcXVpcmVk X2xpc3QkJAogICBmaQogICBjb21tIC0xMiAkVE1QL2RlbGV0ZV9saXN0JCQgJFRNUC9yZXF1 aXJlZF9saXN0JCQgfCBrZWVwX2ZpbGVzCiAgIGNvbW0gLTIzICRUTVAvZGVsZXRlX2xpc3Qk JCAkVE1QL3JlcXVpcmVkX2xpc3QkJCA+ICRUTVAvdW5pcV9saXN0JCQKICAgZGVsZXRlX2Zp bGVzIDwgJFRNUC91bmlxX2xpc3QkJAogICBkZWxldGVfZGlycyA8ICRUTVAvdW5pcV9saXN0 JCQKICAgZGVsZXRlX2NhdHMgPCAkVE1QL3VuaXFfbGlzdCQkCiAgIGlmIFsgISAiJEtFRVAi ID0gInRydWUiIF07IHRoZW4KICAgIHJtIC1mICRUTVAvZGVsZXRlX2xpc3QkJCAkVE1QL3Jl cXVpcmVkX2ZpbGVzJCQgJFRNUC91bmlxX2xpc3QkJAogICAgcm0gLWYgJFRNUC9kZWxfbGlu a19saXN0JCQgJFRNUC9yZXF1aXJlZF9saW5rcyQkICRUTVAvcmVxdWlyZWRfbGlzdCQkCiAg IGZpCiAgIGlmIFsgIiRQUkVTRVJWRSIgPSAidHJ1ZSIgXTsgdGhlbgogICAgaWYgWyAtciAk QURNX0RJUi9zY3JpcHRzLyRQS0dOQU1FIF07IHRoZW4KICAgICBpZiBbICEgLWQgIiRQUkVT X0RJUi8kUEtHTkFNRS9pbnN0YWxsIiBdOyB0aGVuCiAgICAgIG1rZGlyIC1wICIkUFJFU19E SVIvJFBLR05BTUUvaW5zdGFsbCIKICAgICBmaQogICAgIGNwIC1wICRBRE1fRElSL3Njcmlw dHMvJFBLR05BTUUgJFBSRVNfRElSLyRQS0dOQU1FL2luc3RhbGwvZG9pbnN0LnNoCiAgICBm aQogICBmaQogICBpZiBbICEgIiRXQVJOIiA9ICJ0cnVlIiBdOyB0aGVuCiAgICBmb3IgRElS IGluICRBRE1fRElSL3JlbW92ZWRfcGFja2FnZXMgJEFETV9ESVIvcmVtb3ZlZF9zY3JpcHRz IDsgZG8KICAgICBpZiBbICEgLWQgJERJUiBdIDsgdGhlbiBta2RpciAtcCAkRElSIDsgY2ht b2QgNzU1ICRESVIgOyBmaQogICAgZG9uZQogICAgbXYgJEFETV9ESVIvcGFja2FnZXMvJFBL R05BTUUgJEFETV9ESVIvcmVtb3ZlZF9wYWNrYWdlcwogICAgaWYgWyAtciAkQURNX0RJUi9z Y3JpcHRzLyRQS0dOQU1FIF07IHRoZW4KICAgICBtdiAkQURNX0RJUi9zY3JpcHRzLyRQS0dO QU1FICRBRE1fRElSL3JlbW92ZWRfc2NyaXB0cwogICAgZmkKICAgZmkKICBlbHNlCiAgIGVj aG8gIk5vIHN1Y2ggcGFja2FnZTogJEFETV9ESVIvcGFja2FnZXMvJFBLR05BTUUuIENhbid0 IHJlbW92ZS4iCiAgZmkKIGRvbmUKfQoKaWYgWyAiJCMiID0gIjAiIF07IHRoZW4KICBlY2hv ICJVc2FnZTogJChiYXNlbmFtZSAkMCkgWy1jb3B5XSBbLWtlZXBdIFstcHJlc2VydmVdIFst d2Fybl0gcGFja2FnZW5hbWUgLi4uIjsgZXhpdCAxCmZpCgp3aGlsZSA6IDsgZG8KIGNhc2Ug IiQxIiBpbgogIC1jb3B5IHwgLS1jb3B5KSBXQVJOPXRydWU7IFBSRVNFUlZFPXRydWU7IHNo aWZ0OzsKICAta2VlcCB8IC0ta2VlcCkgS0VFUD10cnVlOyBzaGlmdDs7CiAgLXByZXNlcnZl IHwgLS1wcmVzZXJ2ZSkgUFJFU0VSVkU9dHJ1ZTsgc2hpZnQ7OwogIC13YXJuIHwgLS13YXJu KSBXQVJOPXRydWU7IHNoaWZ0OzsKICAtKiB8IC0tKikgZWNobyAiVXNhZ2U6ICQoYmFzZW5h bWUgJDApIFstY29weV0gWy1rZWVwXSBbLXByZXNlcnZlXSBbLXdhcm5dIHBhY2thZ2VuYW1l IC4uLiI7IGV4aXQgMTs7CiAgKikgYnJlYWsKIGVzYWMKZG9uZQoKaWYgWyAiJFdBUk4iID0g InRydWUiIF07IHRoZW4KIGVjaG8gIk9ubHkgd2FybmluZy4uLiBub3QgYWN0dWFsbHkgcmVt b3ZpbmcgYW55IGZpbGVzLiIKIGlmIFsgIiRQUkVTRVJWRSIgPSAidHJ1ZSIgXTsgdGhlbgog IGVjaG8gIlBhY2thZ2UgY29udGVudHMgaXMgY29waWVkIHRvICRQUkVTX0RJUi4iCiBmaQog ZWNobyAiSGVyZSdzIHdoYXQgd291bGQgYmUgcmVtb3ZlZCAoYW5kIGxlZnQgYmVoaW5kKSBp ZiB5b3UiCiBlY2hvICJyZW1vdmVkIHRoZSBwYWNrYWdlKHMpOiIKIGVjaG8KZWxzZQogaWYg WyAiJFBSRVNFUlZFIiA9ICJ0cnVlIiBdOyB0aGVuCiAgZWNobyAiUGFja2FnZSBjb250ZW50 cyBpcyBjb3BpZWQgdG8gJFBSRVNfRElSLiIKIGZpCmZpCgpyZW1vdmVfcGFja2FnZXMgJCoK Ci0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tClZlcnNpb246IEdudVBHIHYyLjAuMTYg KEZyZWVCU0QpCgppUUVjQkFFQkFnQUdCUUpNYlo0L0FBb0pFSkJYaDRtSjJGUitaVEVJQUlV d0MwNUlka3JZYTNTYmdXcVdsV29JCk9SRlVKckt3OHJnMHc0d0FFY0p4aGpuamNQWGY5aXMy M1JhelNkZ21seWtNYXk3c0tsa2NNVWwvelZCR3IvRVQKLzhYOUlWSGovUWhTcUJVY0hrQXpI MlJLZFBvbHc1KzZML2tSVDV6N0p5allnMU9GcHZHK2xhREVobjRySGxhdwpyeTNCQ3RmV0dk WHpBWGZUR2VSNkxFMk9rb1c2V09Mb1NUZCt2WXIyN0FNN3UydldSRGlpcFJoNk9BdmlWNWE2 CmNIT3ZqTDJqdE45MWhwN3hObXo3Tk0rV2ZKYkowTGJveFVIQkxSOFJUZU9EdnZtd1psMTVF ODRlZVpETWNZMlcKUFdCazB0L29CdTVmcWQ4OElFYlpwV3pIWEpzUzZXbnFZcnhQYjN2Tkp5 OFIzN3FXZVlDRkpFMjF2YXVNM2dBPQo9dFcxawotLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0t LS0K --------------040104070006050800060606--