From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael Kerrisk (man-pages)" Subject: Re: getrichacl(1) man page review comments Date: Sun, 14 Feb 2016 22:30:39 +0100 Message-ID: <56C0F1FF.3050003@gmail.com> References: <56B770B6.7040803@gmail.com> <56B77139.4080209@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Return-path: In-Reply-To: <56B77139.4080209-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Sender: linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Andreas Gruenbacher Cc: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, "J. Bruce Fields" , linux-ext4-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, xfs-VZNHf3L845pBDgjK7y7TUQ@public.gmane.org, lkml , linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Linux API , Dave Chinner , Christoph Hellwig , Anna Schumaker , Trond Myklebust , Jeff Layton , Andreas Dilger List-Id: linux-api@vger.kernel.org Hi Andreas, Here's a few more comments on the current getrichacl(1) page that I fetched from the git repo. > .\" > .\" RichACL Manual Pages > .\" > .\" Copyright (C) 2015,2016 Red Hat, Inc. > .\" Written by Andreas Gruenbacher > .\" This is free documentation; you can redistribute it and/or > .\" modify it under the terms of the GNU General Public License as > .\" published by the Free Software Foundation; either version 2 of > .\" the License, or (at your option) any later version. > .\" > .\" The GNU General Public License's references to "object code" > .\" and "executables" are to be interpreted as the output of any > .\" document formatting or typesetting system, including > .\" intermediate and printed output. > .\" > .\" This manual is distributed in the hope that it will be useful, > .\" but WITHOUT ANY WARRANTY; without even the implied warranty of > .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > .\" GNU General Public License for more details. > .\" > .\" You should have received a copy of the GNU General Public > .\" License along with this manual. If not, see > .\" . > .\" > .TH GETRICHACL 7 2015-09-01 "Linux" "Rich Access Control Lists" >=20 > .SH NAME > getrichacl \- Get Rich Access Control Lists >=20 > .SH SYNOPSIS > .B getrichacl > .RI [ option "]... [" file ]... >=20 > .SH DESCRIPTION > For each file, > .B getrichacl > displays the file name and the file's Rich Access Control List (RichA= CL). >=20 > The output format of > .B getrichacl > is as follows: Add a blank line here. > .fam C > .RS > .nf > 1: file: > 2: flags:a > 3: owner:rwp-------------::mask > 4: group:r-p-------------::mask > 5: other:r---------------::mask > 6: owner@:rwp-------------::allow > 7: user:foo:r-p-------------::allow > 8: group@:r-p-------------::allow > 9: group:bar:r-p-------------::allow > 10: everyone@:r---------------::allow > 11: > .fi > .RE > .fam T >=20 > Line 1 contains the file name, followed by a colon. >=20 > Line 2 contains the ACL flags. This line is omitted if no flags are s= et. >=20 > Lines 3--5 indicate the owner, group, and other file masks, which are= only > shown if the \fB\-\-raw\fR option is specified. >=20 > Lines 6--10 indicate different ACL entries for the file owner > .RB ( owner@ ), > user \fIfoo\fR, the owning group > .RB ( group@ ), > group \fIbar\fR, and for everyone > .RB ( everyone@ ). >=20 > A blank line follows at the end. >=20 > The default output format uses the single-letter forms of flags and > permissions, identifiers of ACL entries are right justified, permissi= ons are > vertically aligned, and permissions which are always granted > .RB ( read_attributes ", " read_acl ", " synchronize ) > are omitted. See the > .BR richacl (7) > manual page for the defined flags and permissions. >=20 > By default, > .B getrichacl > displays the effective permissions remaining after applying the file = masks to > the ACL. The file masks and underlying NFSv4 ACL can be displayed wi= th the > \fB\-\-raw\fR option. >=20 > When > .B getrichacl > is used on a file that does not have a RichACL or on a filesystem tha= t does not > support RichACLs, > .B getrichacl Replace the previous line with "it". > displays the access permissions defined by the traditional file permi= ssion bits > as a RichACL. When > .B getrichacl > is used on a file that has a POSIX ACL (see > .BR acl (5)), > it prints an error message. >=20 > .SH OPTIONS > .TP > \fB\-\-long\fR, \fB\-l\fR > Display access masks and flags in their long form. > .TP > \fB\-\-full\fR > Also show permissions which are always implicitly allowed. > .TP > \fB\-\-raw\fR > Show ACLs as stored on the file system, including the file masks. Imp= lies > \fB\-\-full\fR. > .TP > \fB\-\-unaligned\fR > Do not align ACL entries or pad missing permissions with '-'. > .TP > \fB\-\-numeric-ids\fR > Display numeric user and group IDs instead of names. > .TP > \fB\-\-access\fR [=3D\fIuser\fR[:\fIgroup\fR:...]}, \fB\-a\fR[\fIuser= \fR[:\fIgroup\fR:...]} > Instead of showing the ACL, show which permissions the user running t= he command > has for the specified file(s). When \fIuser\fR is specified, show wh= ich > permissions the specified user has instead. If \fIuser\fR is followe= d by a > colon and a (possibly empty) list of groups, assume that \fIuser\fR i= s a member > in the specified groups; otherwise, > .BR getgrouplist (3) > is used to determine the groups \fIuser\fR is a member in. s/in/of/ > .TP > \fB\-\-version\fR, \fB\-v\fR > Display the version of > .B getrichacl > and exit. > .TP > \fB\-\-help\fR, \fB\-h\fR > Display command-line usage help text. >=20 > .SH AUTHOR > Written by Andreas Gr=C3=BCnbacher . >=20 > Please send your bug reports, suggested features and comments to the = above address. >=20 > .SH CONFORMING TO > Rich Access Control Lists are Linux-specific. >=20 > .SH SEE ALSO > .BR richacl (7), > .BR setrichacl (1) Cheers, Michael From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f53.google.com ([74.125.82.53]:36378 "EHLO mail-wm0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751723AbcBNVar (ORCPT ); Sun, 14 Feb 2016 16:30:47 -0500 Subject: Re: getrichacl(1) man page review comments To: Andreas Gruenbacher References: <56B770B6.7040803@gmail.com> <56B77139.4080209@gmail.com> Cc: mtk.manpages@gmail.com, "J. Bruce Fields" , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, lkml , linux-fsdevel@vger.kernel.org, linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org, Linux API , Dave Chinner , Christoph Hellwig , Anna Schumaker , Trond Myklebust , Jeff Layton , Andreas Dilger From: "Michael Kerrisk (man-pages)" Message-ID: <56C0F1FF.3050003@gmail.com> Date: Sun, 14 Feb 2016 22:30:39 +0100 MIME-Version: 1.0 In-Reply-To: <56B77139.4080209@gmail.com> Content-Type: text/plain; charset=utf-8 Sender: linux-nfs-owner@vger.kernel.org List-ID: Hi Andreas, Here's a few more comments on the current getrichacl(1) page that I fetched from the git repo. > .\" > .\" RichACL Manual Pages > .\" > .\" Copyright (C) 2015,2016 Red Hat, Inc. > .\" Written by Andreas Gruenbacher > .\" This is free documentation; you can redistribute it and/or > .\" modify it under the terms of the GNU General Public License as > .\" published by the Free Software Foundation; either version 2 of > .\" the License, or (at your option) any later version. > .\" > .\" The GNU General Public License's references to "object code" > .\" and "executables" are to be interpreted as the output of any > .\" document formatting or typesetting system, including > .\" intermediate and printed output. > .\" > .\" This manual is distributed in the hope that it will be useful, > .\" but WITHOUT ANY WARRANTY; without even the implied warranty of > .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > .\" GNU General Public License for more details. > .\" > .\" You should have received a copy of the GNU General Public > .\" License along with this manual. If not, see > .\" . > .\" > .TH GETRICHACL 7 2015-09-01 "Linux" "Rich Access Control Lists" > > .SH NAME > getrichacl \- Get Rich Access Control Lists > > .SH SYNOPSIS > .B getrichacl > .RI [ option "]... [" file ]... > > .SH DESCRIPTION > For each file, > .B getrichacl > displays the file name and the file's Rich Access Control List (RichACL). > > The output format of > .B getrichacl > is as follows: Add a blank line here. > .fam C > .RS > .nf > 1: file: > 2: flags:a > 3: owner:rwp-------------::mask > 4: group:r-p-------------::mask > 5: other:r---------------::mask > 6: owner@:rwp-------------::allow > 7: user:foo:r-p-------------::allow > 8: group@:r-p-------------::allow > 9: group:bar:r-p-------------::allow > 10: everyone@:r---------------::allow > 11: > .fi > .RE > .fam T > > Line 1 contains the file name, followed by a colon. > > Line 2 contains the ACL flags. This line is omitted if no flags are set. > > Lines 3--5 indicate the owner, group, and other file masks, which are only > shown if the \fB\-\-raw\fR option is specified. > > Lines 6--10 indicate different ACL entries for the file owner > .RB ( owner@ ), > user \fIfoo\fR, the owning group > .RB ( group@ ), > group \fIbar\fR, and for everyone > .RB ( everyone@ ). > > A blank line follows at the end. > > The default output format uses the single-letter forms of flags and > permissions, identifiers of ACL entries are right justified, permissions are > vertically aligned, and permissions which are always granted > .RB ( read_attributes ", " read_acl ", " synchronize ) > are omitted. See the > .BR richacl (7) > manual page for the defined flags and permissions. > > By default, > .B getrichacl > displays the effective permissions remaining after applying the file masks to > the ACL. The file masks and underlying NFSv4 ACL can be displayed with the > \fB\-\-raw\fR option. > > When > .B getrichacl > is used on a file that does not have a RichACL or on a filesystem that does not > support RichACLs, > .B getrichacl Replace the previous line with "it". > displays the access permissions defined by the traditional file permission bits > as a RichACL. When > .B getrichacl > is used on a file that has a POSIX ACL (see > .BR acl (5)), > it prints an error message. > > .SH OPTIONS > .TP > \fB\-\-long\fR, \fB\-l\fR > Display access masks and flags in their long form. > .TP > \fB\-\-full\fR > Also show permissions which are always implicitly allowed. > .TP > \fB\-\-raw\fR > Show ACLs as stored on the file system, including the file masks. Implies > \fB\-\-full\fR. > .TP > \fB\-\-unaligned\fR > Do not align ACL entries or pad missing permissions with '-'. > .TP > \fB\-\-numeric-ids\fR > Display numeric user and group IDs instead of names. > .TP > \fB\-\-access\fR [=\fIuser\fR[:\fIgroup\fR:...]}, \fB\-a\fR[\fIuser\fR[:\fIgroup\fR:...]} > Instead of showing the ACL, show which permissions the user running the command > has for the specified file(s). When \fIuser\fR is specified, show which > permissions the specified user has instead. If \fIuser\fR is followed by a > colon and a (possibly empty) list of groups, assume that \fIuser\fR is a member > in the specified groups; otherwise, > .BR getgrouplist (3) > is used to determine the groups \fIuser\fR is a member in. s/in/of/ > .TP > \fB\-\-version\fR, \fB\-v\fR > Display the version of > .B getrichacl > and exit. > .TP > \fB\-\-help\fR, \fB\-h\fR > Display command-line usage help text. > > .SH AUTHOR > Written by Andreas Grünbacher . > > Please send your bug reports, suggested features and comments to the above address. > > .SH CONFORMING TO > Rich Access Control Lists are Linux-specific. > > .SH SEE ALSO > .BR richacl (7), > .BR setrichacl (1) Cheers, Michael From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 75B3A7CA2 for ; Sun, 14 Feb 2016 15:30:48 -0600 (CST) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6401D8F8049 for ; Sun, 14 Feb 2016 13:30:48 -0800 (PST) Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by cuda.sgi.com with ESMTP id kNcVW9Y9Ae2bQftY (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Sun, 14 Feb 2016 13:30:45 -0800 (PST) Received: by mail-wm0-f45.google.com with SMTP id g62so126422304wme.0 for ; Sun, 14 Feb 2016 13:30:45 -0800 (PST) Subject: Re: getrichacl(1) man page review comments References: <56B770B6.7040803@gmail.com> <56B77139.4080209@gmail.com> From: "Michael Kerrisk (man-pages)" Message-ID: <56C0F1FF.3050003@gmail.com> Date: Sun, 14 Feb 2016 22:30:39 +0100 MIME-Version: 1.0 In-Reply-To: <56B77139.4080209@gmail.com> List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xfs-bounces@oss.sgi.com Sender: xfs-bounces@oss.sgi.com To: Andreas Gruenbacher Cc: Andreas Dilger , linux-cifs@vger.kernel.org, linux-nfs@vger.kernel.org, Christoph Hellwig , Linux API , Trond Myklebust , lkml , xfs@oss.sgi.com, "J. Bruce Fields" , mtk.manpages@gmail.com, linux-fsdevel@vger.kernel.org, Jeff Layton , linux-ext4@vger.kernel.org, Anna Schumaker SGkgQW5kcmVhcywKCkhlcmUncyBhIGZldyBtb3JlIGNvbW1lbnRzIG9uIHRoZSBjdXJyZW50IGdl dHJpY2hhY2woMSkgcGFnZQp0aGF0IEkgZmV0Y2hlZCBmcm9tIHRoZSBnaXQgcmVwby4KCj4gLlwi Cj4gLlwiIFJpY2hBQ0wgTWFudWFsIFBhZ2VzCj4gLlwiCj4gLlwiIENvcHlyaWdodCAoQykgMjAx NSwyMDE2ICBSZWQgSGF0LCBJbmMuCj4gLlwiIFdyaXR0ZW4gYnkgQW5kcmVhcyBHcnVlbmJhY2hl ciA8YWdydWVuYmFAcmVkaGF0LmNvbT4KPiAuXCIgVGhpcyBpcyBmcmVlIGRvY3VtZW50YXRpb247 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+IC5cIiBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwo+IC5cIiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgo+ IC5cIiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K PiAuXCIKPiAuXCIgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlJ3MgcmVmZXJlbmNlcyB0 byAib2JqZWN0IGNvZGUiCj4gLlwiIGFuZCAiZXhlY3V0YWJsZXMiIGFyZSB0byBiZSBpbnRlcnBy ZXRlZCBhcyB0aGUgb3V0cHV0IG9mIGFueQo+IC5cIiBkb2N1bWVudCBmb3JtYXR0aW5nIG9yIHR5 cGVzZXR0aW5nIHN5c3RlbSwgaW5jbHVkaW5nCj4gLlwiIGludGVybWVkaWF0ZSBhbmQgcHJpbnRl ZCBvdXRwdXQuCj4gLlwiCj4gLlwiIFRoaXMgbWFudWFsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gLlwiIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gLlwiIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiAuXCIg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAuXCIKPiAuXCIg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj Cj4gLlwiIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIG1hbnVhbC4gIElmIG5vdCwgc2VlCj4gLlwi IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiAuXCIKPiAuVEggR0VUUklDSEFDTCA3 IDIwMTUtMDktMDEgIkxpbnV4IiAiUmljaCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKPiAKPiAuU0gg TkFNRQo+IGdldHJpY2hhY2wgXC0gR2V0IFJpY2ggQWNjZXNzIENvbnRyb2wgTGlzdHMKPiAKPiAu U0ggU1lOT1BTSVMKPiAuQiBnZXRyaWNoYWNsCj4gLlJJIFsgb3B0aW9uICJdLi4uIFsiIGZpbGUg XS4uLgo+IAo+IC5TSCBERVNDUklQVElPTgo+IEZvciBlYWNoIGZpbGUsCj4gLkIgZ2V0cmljaGFj bAo+IGRpc3BsYXlzIHRoZSBmaWxlIG5hbWUgYW5kIHRoZSBmaWxlJ3MgUmljaCBBY2Nlc3MgQ29u dHJvbCBMaXN0IChSaWNoQUNMKS4KPiAKPiBUaGUgb3V0cHV0IGZvcm1hdCBvZgo+IC5CIGdldHJp Y2hhY2wKPiBpcyBhcyBmb2xsb3dzOgoKQWRkIGEgYmxhbmsgbGluZSBoZXJlLgoKPiAuZmFtIEMK PiAuUlMKPiAubmYKPiAgMTogIGZpbGU6Cj4gIDI6ICAgICAgZmxhZ3M6YQo+ICAzOiAgICAgIG93 bmVyOnJ3cC0tLS0tLS0tLS0tLS06Om1hc2sKPiAgNDogICAgICBncm91cDpyLXAtLS0tLS0tLS0t LS0tOjptYXNrCj4gIDU6ICAgICAgb3RoZXI6ci0tLS0tLS0tLS0tLS0tLTo6bWFzawo+ICA2OiAg ICAgb3duZXJAOnJ3cC0tLS0tLS0tLS0tLS06OmFsbG93Cj4gIDc6ICAgdXNlcjpmb286ci1wLS0t LS0tLS0tLS0tLTo6YWxsb3cKPiAgODogICAgIGdyb3VwQDpyLXAtLS0tLS0tLS0tLS0tOjphbGxv dwo+ICA5OiAgZ3JvdXA6YmFyOnItcC0tLS0tLS0tLS0tLS06OmFsbG93Cj4gMTA6ICBldmVyeW9u ZUA6ci0tLS0tLS0tLS0tLS0tLTo6YWxsb3cKPiAxMToKPiAuZmkKPiAuUkUKPiAuZmFtIFQKPiAK PiBMaW5lIDEgY29udGFpbnMgdGhlIGZpbGUgbmFtZSwgZm9sbG93ZWQgYnkgYSBjb2xvbi4KPiAK PiBMaW5lIDIgY29udGFpbnMgdGhlIEFDTCBmbGFncy4gVGhpcyBsaW5lIGlzIG9taXR0ZWQgaWYg bm8gZmxhZ3MgYXJlIHNldC4KPiAKPiBMaW5lcyAzLS01IGluZGljYXRlIHRoZSBvd25lciwgZ3Jv dXAsIGFuZCBvdGhlciBmaWxlIG1hc2tzLCB3aGljaCBhcmUgb25seQo+IHNob3duIGlmIHRoZSBc ZkJcLVwtcmF3XGZSIG9wdGlvbiBpcyBzcGVjaWZpZWQuCj4gCj4gTGluZXMgNi0tMTAgaW5kaWNh dGUgZGlmZmVyZW50IEFDTCBlbnRyaWVzIGZvciB0aGUgZmlsZSBvd25lcgo+IC5SQiAoIG93bmVy QCApLAo+IHVzZXIgXGZJZm9vXGZSLCB0aGUgb3duaW5nIGdyb3VwCj4gLlJCICggZ3JvdXBAICks Cj4gZ3JvdXAgXGZJYmFyXGZSLCBhbmQgZm9yIGV2ZXJ5b25lCj4gLlJCICggZXZlcnlvbmVAICku Cj4gCj4gQSBibGFuayBsaW5lIGZvbGxvd3MgYXQgdGhlIGVuZC4KPiAKPiBUaGUgZGVmYXVsdCBv dXRwdXQgZm9ybWF0IHVzZXMgdGhlIHNpbmdsZS1sZXR0ZXIgZm9ybXMgb2YgZmxhZ3MgYW5kCj4g cGVybWlzc2lvbnMsIGlkZW50aWZpZXJzIG9mIEFDTCBlbnRyaWVzIGFyZSByaWdodCBqdXN0aWZp ZWQsIHBlcm1pc3Npb25zIGFyZQo+IHZlcnRpY2FsbHkgYWxpZ25lZCwgYW5kIHBlcm1pc3Npb25z IHdoaWNoIGFyZSBhbHdheXMgZ3JhbnRlZAo+IC5SQiAoIHJlYWRfYXR0cmlidXRlcyAiLCAiIHJl YWRfYWNsICIsICIgc3luY2hyb25pemUgKQo+IGFyZSBvbWl0dGVkLiBTZWUgdGhlCj4gLkJSIHJp Y2hhY2wgKDcpCj4gbWFudWFsIHBhZ2UgZm9yIHRoZSBkZWZpbmVkIGZsYWdzIGFuZCBwZXJtaXNz aW9ucy4KPiAKPiBCeSBkZWZhdWx0LAo+IC5CIGdldHJpY2hhY2wKPiBkaXNwbGF5cyB0aGUgZWZm ZWN0aXZlIHBlcm1pc3Npb25zIHJlbWFpbmluZyBhZnRlciBhcHBseWluZyB0aGUgZmlsZSBtYXNr cyB0bwo+IHRoZSBBQ0wuICBUaGUgZmlsZSBtYXNrcyBhbmQgdW5kZXJseWluZyBORlN2NCBBQ0wg Y2FuIGJlIGRpc3BsYXllZCB3aXRoIHRoZQo+IFxmQlwtXC1yYXdcZlIgb3B0aW9uLgo+IAo+IFdo ZW4KPiAuQiBnZXRyaWNoYWNsCj4gaXMgdXNlZCBvbiBhIGZpbGUgdGhhdCBkb2VzIG5vdCBoYXZl IGEgUmljaEFDTCBvciBvbiBhIGZpbGVzeXN0ZW0gdGhhdCBkb2VzIG5vdAo+IHN1cHBvcnQgUmlj aEFDTHMsCj4gLkIgZ2V0cmljaGFjbAoKUmVwbGFjZSB0aGUgcHJldmlvdXMgbGluZSB3aXRoICJp dCIuCgo+IGRpc3BsYXlzIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgZGVmaW5lZCBieSB0aGUgdHJh ZGl0aW9uYWwgZmlsZSBwZXJtaXNzaW9uIGJpdHMKPiBhcyBhIFJpY2hBQ0wuIFdoZW4KPiAuQiBn ZXRyaWNoYWNsCj4gaXMgdXNlZCBvbiBhIGZpbGUgdGhhdCBoYXMgYSBQT1NJWCBBQ0wgKHNlZQo+ IC5CUiBhY2wgKDUpKSwKPiBpdCBwcmludHMgYW4gZXJyb3IgbWVzc2FnZS4KPiAKPiAuU0ggT1BU SU9OUwo+IC5UUAo+IFxmQlwtXC1sb25nXGZSLCBcZkJcLWxcZlIKPiBEaXNwbGF5IGFjY2VzcyBt YXNrcyBhbmQgZmxhZ3MgaW4gdGhlaXIgbG9uZyBmb3JtLgo+IC5UUAo+IFxmQlwtXC1mdWxsXGZS Cj4gQWxzbyBzaG93IHBlcm1pc3Npb25zIHdoaWNoIGFyZSBhbHdheXMgaW1wbGljaXRseSBhbGxv d2VkLgo+IC5UUAo+IFxmQlwtXC1yYXdcZlIKPiBTaG93IEFDTHMgYXMgc3RvcmVkIG9uIHRoZSBm aWxlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBmaWxlIG1hc2tzLiBJbXBsaWVzCj4gXGZCXC1cLWZ1 bGxcZlIuCj4gLlRQCj4gXGZCXC1cLXVuYWxpZ25lZFxmUgo+IERvIG5vdCBhbGlnbiBBQ0wgZW50 cmllcyBvciBwYWQgbWlzc2luZyBwZXJtaXNzaW9ucyB3aXRoICctJy4KPiAuVFAKPiBcZkJcLVwt bnVtZXJpYy1pZHNcZlIKPiBEaXNwbGF5IG51bWVyaWMgdXNlciBhbmQgZ3JvdXAgSURzIGluc3Rl YWQgb2YgbmFtZXMuCj4gLlRQCj4gXGZCXC1cLWFjY2Vzc1xmUiBbPVxmSXVzZXJcZlJbOlxmSWdy b3VwXGZSOi4uLl19LCBcZkJcLWFcZlJbXGZJdXNlclxmUls6XGZJZ3JvdXBcZlI6Li4uXX0KPiBJ bnN0ZWFkIG9mIHNob3dpbmcgdGhlIEFDTCwgc2hvdyB3aGljaCBwZXJtaXNzaW9ucyB0aGUgdXNl ciBydW5uaW5nIHRoZSBjb21tYW5kCj4gaGFzIGZvciB0aGUgc3BlY2lmaWVkIGZpbGUocykuICBX aGVuIFxmSXVzZXJcZlIgaXMgc3BlY2lmaWVkLCBzaG93IHdoaWNoCj4gcGVybWlzc2lvbnMgdGhl IHNwZWNpZmllZCB1c2VyIGhhcyBpbnN0ZWFkLiAgSWYgXGZJdXNlclxmUiBpcyBmb2xsb3dlZCBi eSBhCj4gY29sb24gYW5kIGEgKHBvc3NpYmx5IGVtcHR5KSBsaXN0IG9mIGdyb3VwcywgYXNzdW1l IHRoYXQgXGZJdXNlclxmUiBpcyBhIG1lbWJlcgo+IGluIHRoZSBzcGVjaWZpZWQgZ3JvdXBzOyBv dGhlcndpc2UsCj4gLkJSIGdldGdyb3VwbGlzdCAoMykKPiBpcyB1c2VkIHRvIGRldGVybWluZSB0 aGUgZ3JvdXBzIFxmSXVzZXJcZlIgaXMgYSBtZW1iZXIgaW4uCgpzL2luL29mLwoKPiAuVFAKPiBc ZkJcLVwtdmVyc2lvblxmUiwgXGZCXC12XGZSCj4gRGlzcGxheSB0aGUgdmVyc2lvbiBvZgo+IC5C IGdldHJpY2hhY2wKPiBhbmQgZXhpdC4KPiAuVFAKPiBcZkJcLVwtaGVscFxmUiwgXGZCXC1oXGZS Cj4gRGlzcGxheSBjb21tYW5kLWxpbmUgdXNhZ2UgaGVscCB0ZXh0Lgo+IAo+IC5TSCBBVVRIT1IK PiBXcml0dGVuIGJ5IEFuZHJlYXMgR3LDvG5iYWNoZXIgPGFncnVlbmJhQHJlZGhhdC5jb20+Lgo+ IAo+IFBsZWFzZSBzZW5kIHlvdXIgYnVnIHJlcG9ydHMsIHN1Z2dlc3RlZCBmZWF0dXJlcyBhbmQg Y29tbWVudHMgdG8gdGhlIGFib3ZlIGFkZHJlc3MuCj4gCj4gLlNIIENPTkZPUk1JTkcgVE8KPiBS aWNoIEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSBMaW51eC1zcGVjaWZpYy4KPiAKPiAuU0ggU0VF IEFMU08KPiAuQlIgcmljaGFjbCAoNyksCj4gLkJSIHNldHJpY2hhY2wgKDEpCgpDaGVlcnMsCgpN aWNoYWVsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp4 ZnMgbWFpbGluZyBsaXN0Cnhmc0Bvc3Muc2dpLmNvbQpodHRwOi8vb3NzLnNnaS5jb20vbWFpbG1h bi9saXN0aW5mby94ZnMK