Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jNiyZ-0004y5-1Y for pgsql-hackers@arkaria.postgresql.org; Sun, 12 Apr 2020 20:13:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jNiyX-0005g0-KQ for pgsql-hackers@arkaria.postgresql.org; Sun, 12 Apr 2020 20:13:05 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jNiyX-0005fg-3y for pgsql-hackers@lists.postgresql.org; Sun, 12 Apr 2020 20:13:05 +0000 Received: from mail.thelabyrinth.net ([45.56.70.56]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jNiyT-0005PG-U5 for pgsql-hackers@postgresql.org; Sun, 12 Apr 2020 20:13:04 +0000 Received: from Davids-MacBook-Pro.local (c-73-39-102-148.hsd1.va.comcast.net [73.39.102.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: dsteele) by mail.thelabyrinth.net (Postfix) with ESMTPSA id 965F65488E; Sun, 12 Apr 2020 20:13:00 +0000 (UTC) Subject: Re: cleaning perl code To: Andrew Dunstan Cc: Robert Haas , Tom Lane , Noah Misch , PostgreSQL-development References: <20200411043014.GA590991@rfd.leadboat.com> <27481.1586618092@sss.pgh.pa.us> From: David Steele Message-ID: <757f9c47-ad93-8ca0-49ea-2b2ced58d103@pgmasters.net> Date: Sun, 12 Apr 2020 16:12:59 -0400 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------299CED85534F54409FD22269" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------299CED85534F54409FD22269 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 4/12/20 3:22 PM, Robert Haas wrote: > On Sat, Apr 11, 2020 at 11:15 AM Tom Lane wrote: >> Noah Misch writes: >>> In summary, among those warnings, I see non-negative value in "Code before >>> warnings are enabled" only. While we're changing this, I propose removing >>> Subroutines::RequireFinalReturn. >> >> If it's possible to turn off just that warning, then +several. >> It's routinely caused buildfarm failures, yet I can detect exactly >> no value in it. If there were sufficient cross-procedural analysis >> backing it to detect whether any caller examines the subroutine's >> result value, then it'd be worth having. But there isn't, so those >> extra returns are just pedantic verbosity. > > I agree with Noah's comment about CPAN: it would be worth being more > careful about things like this if we were writing code that was likely > to be used by a wide variety of people and a lot of code over which we > have no control and which we do not get to even see. But that's not > the case here. It does not seem worth stressing the authors of TAP > tests over such things. FWIW, pgBackRest used Perl Critic when we were distributing Perl code but stopped when our Perl code was only used for integration testing. Perhaps that was the wrong call but we decided the extra time required to run it was not worth the benefit. Most new test code is written in C and the Perl test code is primarily in maintenance mode now. When we did use Perl Critic we set it at level 1 (--brutal) and then wrote an exception file for the stuff we wanted to ignore. The advantage of this is that if new code violated a policy that did not already have an exception we could evaluate it and either add an exception or modify the code. In practice this was pretty rare, but we also had a short excuse for many exceptions and a list of exceptions that should be re-evaluated in the future. About the time we introduced Perl Critic we were already considering the C migration so most of the exceptions stayed. Just in case it is useful, I have attached our old policy file with exceptions and excuses (when we had one). Regards, -- -David david@pgmasters.net --------------299CED85534F54409FD22269 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="perlcritic.policy" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="perlcritic.policy" IyBNYWluIFBlcmwgQ3JpdGljIFBvbGljeSBBcHBsaWVkIHRvIEVudGlyZSBDb2RlIEJhc2UK Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIEltcG9ydGFudCBwb2xpY2llcyB0aGF0IHNo b3VsZCBhbHdheXMgYmUgY2hlY2tlZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KW1Rlc3Rp bmdBbmREZWJ1Z2dpbmc6OlJlcXVpcmVVc2VTdHJpY3RdCnNldmVyaXR5ID0gNQoKW1Rlc3Rp bmdBbmREZWJ1Z2dpbmc6OlJlcXVpcmVVc2VXYXJuaW5nc10Kc2V2ZXJpdHkgPSA1CgojIFBl cm1hbmVudCBFeGNlcHRpb25zCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBSZXF1aXJl cyBhbGwgbG9jYWwgdmFyaWFibGVzIHRvIGJlIGFsbCBsb3dlci91cHBlciBjYXNlIC0tIGNh bid0IHNlZSBob3cgdGhpcyBpcyBhIGdvb2QgdGhpbmcuClstTmFtaW5nQ29udmVudGlvbnM6 OkNhcGl0YWxpemF0aW9uXQoKIyBSZXF1aXJlcyBAXyB0byBiZSBpbW1lZGlhdGVseSB1bnBh Y2tlZCBidXQgd29uJ3Qgd29yayB3aXRoIHBhcmFtIGxvZ2dpbmcgc2NoZW1lLgpbLVN1YnJv dXRpbmVzOjpSZXF1aXJlQXJnVW5wYWNraW5nXQoKIyBSZXF1aXJlcyBhbGwgZXhwb3J0cyB0 byBiZSBjb25maWd1cmFibGUgYnkgY2FsbGVyLiAgVGhpcyBpcyBmaW5lIGZvciBpbmRlcGVu ZGVudCBsaWJyYXJpZXMgYnV0CiMgb3Zlcmx5IGJ1cmRlbnNvbWUgZm9yIG1vZHVsZXMgaW50 ZWdyYXRlZCBhcyBwYXJ0IG9mIGFuIGFwcGxpY2F0aW9uLiAgTWF5YmUgYXBwbHkgdG8gY2Vy dGFpbiBtb2R1bGVzCiMgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IGRvYyBhbmQgdGVzdCBwcm9n cmFtcz8KWy1Nb2R1bGVzOjpQcm9oaWJpdEF1dG9tYXRpY0V4cG9ydGF0aW9uXQoKIyBSZXF1 aXJlcyBidWlsdC1pbiBmdW5jdGlvbnMgdG8gbm90IGhhdmUgcGFyZW5zLCBidXQgaW4gdGhp cyBwcm9qZWN0IGl0IGlzIHByZWZlcnJlZCB0byB3cmFwIGFsbAojIGZ1bmN0aW9uIGNhbGxz IGluIHBhcmVucyBmb3IgY29uc2lzdGVuY3kuClstQ29kZUxheW91dDo6UHJvaGliaXRQYXJl bnNXaXRoQnVpbHRpbnNdCgojIFJlcXVpcmVzIG1vZHVsZSB2ZXJzaW9uIHZhcnMuICBQcm9i YWJseSBub3QgcHJhY3RpY2FsIGZvciBidWlsdC1pbiBtb2R1bGVzLgpbLU1vZHVsZXM6OlJl cXVpcmVWZXJzaW9uVmFyXQoKIyBSZXF1aXJlcyBleHRlbmRlZCBmb3JtYXR0aW5nIGZvciBh bGwgcmVnZXhwcy4gIFNlZW1zIG92ZXJseSBidXJkZW5zb21lLCBvciBhdCBsZWFzdCBzb21l dGhpbmcgdG8gbG9vawojIGF0IGEgbG90IGZ1cnRoZXIgZG93biB0aGUgcm9hZC4KWy1SZWd1 bGFyRXhwcmVzc2lvbnM6OlJlcXVpcmVFeHRlbmRlZEZvcm1hdHRpbmddCgojIFJlcXVpcmVz IFVuaWNvZGUgc2FmZSBleHByZXNzaW9ucy4gIE1heSBiZSB3b3J0aCBsb29raW5nIGF0IHNv bWV0aW1lLgpbLVJlZ3VsYXJFeHByZXNzaW9uczo6UHJvaGliaXRFbnVtZXJhdGVkQ2xhc3Nl c10KCiMgUzIgLSBSZXF1aXJlcyBMaXN0OjpNb3JlVXRpbHMgaW5zdGVhZCBvZiBib29sZWFu IGdyZXAuICBOb3Qgd29ydGggaXQgdG8gbG9hZCBhbm90aGVyIG1vZHVsZS4KWy1CdWlsdGlu RnVuY3Rpb25zOjpQcm9oaWJpdEJvb2xlYW5HcmVwXQoKIyBQcm92aXNpb25hbCBFeGNlcHRp b25zIGZvciBUZXN0ICYgRG9jdW1lbnRhdGlvbiBDb2RlCiMtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQoKIyBTMiAtIFJlcXVpcmVzIGNvbXBsZXRlIFBPRCBzZWN0aW9ucyBidXQgdGhlc2Ug YXJlIGJlaW5nIHJlbW92ZWQgYW55d2F5IGluIGZhdm9yIG9mIENvbmZpZy5wbS4KWy1Eb2N1 bWVudGF0aW9uOjpSZXF1aXJlUG9kU2VjdGlvbnNdClstRG9jdW1lbnRhdGlvbjo6UmVxdWly ZVBvZEF0RW5kXQoKIyBTMyAtIFJlcXVpcmVzIHJlZ2V4cHMgdG8gYmUgYmVsb3cgYSBjZXJ0 YWluIGxlbmd0aC4gIFNlZW1zIGJ1cmRlbnNvbWUuClstUmVndWxhckV4cHJlc3Npb25zOjpQ cm9oaWJpdENvbXBsZXhSZWdleGVzXQoKIyBUbyBCZSBGaXhlZCBvciBFdmFsdWF0ZWQKIwoj IE5hdHVyYWwgb3JkZXJpbmcgaGVyZSBpbmRpY2F0ZXMgdGhlIG9yZGVyIGluIHdoaWNoIHRo ZXkgc2hvdWxkIGJlIGFkZHJlc3NlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIFMy IC0gUmVxdWlyZXMgYWxsIGxvbmcgbnVtYmVycyB0byBoYXZlIHRob3VzYW5kIHNlcGFyYXRv cnMuIFByb2JhYmx5IGEgZ29vZCBpZGVhIGJpdCBuZWVkIHRvIGNoYW5nZSBhIGZhaXIgYW1v dW50IG9mIGNvZGUuClstVmFsdWVzQW5kRXhwcmVzc2lvbnM6OlJlcXVpcmVOdW1iZXJTZXBh cmF0b3JzXQoKIyBTNCAtIFJlcXVpcmVzIHBhcmVucyB3aGVuIGxvZ2ljYWwgYW5kIGJpdHdp c2UgYm9vbGVhbnMgYXJlIG1peGVkLgpbLVZhbHVlc0FuZEV4cHJlc3Npb25zOjpQcm9oaWJp dE1peGVkQm9vbGVhbk9wZXJhdG9yc10KCiMgUzQgLSBSZXF1aXJlcyB0aGF0IHN1YiBuYW1l cyBub3Qgb3ZlcmxhcCB3aXRoIGJ1aWx0LWlucyAtIGEgYnVtbWVyIGZvciBvYmplY3QgbWVt YmVycy4KWy1TdWJyb3V0aW5lczo6UHJvaGliaXRCdWlsdGluSG9tb255bXNdCgojIFM0IC0g UmVxdWlyZXMgYmxvY2sgZm9ybSBvZiBncmVwIGZvciByZWFkYWJpbGl0eS4gTmVlZHMgdG8g YmUgZml4ZWQgaW4gYWJvdXQgMTUgcGxhY2VzLgpbLUJ1aWx0aW5GdW5jdGlvbnM6OlJlcXVp cmVCbG9ja0dyZXBdCgojIFM0IC0gUmVxdWlyZXMgbW9kaWZpY2F0aW9uIG9mIGNlcnRhaW4g dmFycyAoZS5nLiAkU0lHKSB0byBoYXZlIGxvY2FsIHNjb3BlLiBOZWVkcyB0byBiZSBmaXhl ZCBpbiBhYm91dCAyMCBwbGFjZXMuClstVmFyaWFibGVzOjpSZXF1aXJlTG9jYWxpemVkUHVu Y3R1YXRpb25WYXJzXQoKIyBTNCAtIFJlcXVpcmVzIGNsb3NlKCkgdG8gYmUgY2FsbGVkIHNv b24gYWZ0ZXIgb3BlbiBidXQgc2VlbXMgYXJiaXRyYXJ5LgpbLUlucHV0T3V0cHV0OjpSZXF1 aXJlQnJpZWZPcGVuXQoKIyBTMSAtIFJlcXVpcmVzIHJldmVyc2Uga2V5d29yZCBmb3IgcmV2 ZXJzZSBzb3J0cyBpbnN0ZWFkIG9mIGJsb2NrLiBNYXkgbm90IGJlIGFibGUgdG8gc2luY2Ug JGEgJGIgYXJlIHBhc3NlZCBhcyBhIHBhcmFtZXRlci4KWy1CdWlsdGluRnVuY3Rpb25zOjpQ cm9oaWJpdFJldmVyc2VTb3J0QmxvY2tdCgojIFMzIC0gUmVxdWlyZXMgdXNlIG9mIENhcnAg aW5zdGVhZCBvZiBkaWUgb3Igd2Fybi4gRG9lc24ndCBzZWVtIHVzZWZ1bC4KWy1FcnJvckhh bmRsaW5nOjpSZXF1aXJlQ2FycGluZ10KCiMgUzMgLSBSZXF1aXJlcyB1c2Ugb2YgbG9jYWwg dmFycyBpbiBwYWNrYWdlcy4gQ2FuJ3QgdXNlIGFzIGl0IHByb2hpYml0cyB1c2Ugb2YgJERC STo6ZXJyc3RyLgpbLVZhcmlhYmxlczo6UHJvaGliaXRQYWNrYWdlVmFyc10KCiMgUzMgLSBS ZXF1aXJlcyB0aGF0IGNlcnRhaW4gb3BlcmF0b3JzIG5vdCBiZSBtaXhlZC4KWy1WYWx1ZXNB bmRFeHByZXNzaW9uczo6UHJvaGliaXRNaXNtYXRjaGVkT3BlcmF0b3JzXQoKIyBTMiAtIFJl cXVpcmVzIHVzZSBvZiBpZiBpbnN0ZWFkIG9mIHVubGVzcy4KWy1Db250cm9sU3RydWN0dXJl czo6UHJvaGliaXRVbmxlc3NCbG9ja3NdCgojIFMxIC0gUmVxdWlyZXMgdHJ1ZSBsaXRlcmFs cyB0byB1c2Ugc2luZ2xlIHF1b3Rlcy4KWy1WYWx1ZXNBbmRFeHByZXNzaW9uczo6UHJvaGli aXRJbnRlcnBvbGF0aW9uT2ZMaXRlcmFsc10KCiMgUzIgLSBSZXF1aXJlcyBzcGxpdCBleHBy ZXNzaW9ucyB0byBiZSByZWdleHAgZm9yIGNsYXJpdHkuClstQnVpbHRpbkZ1bmN0aW9uczo6 UHJvaGliaXRTdHJpbmd5U3BsaXRdCgojIFM0IC0gUmVxdWlyZXMgdXNlIG9mIFJlYWRvbmx5 IGluc3RlYWQgb2YgY29uc3QuICBIYXMgcGVyZm9ybWFuY2UgYW5kIHN5bnRheCBhZHZhbnRh Z2VzLgpbLVZhbHVlc0FuZEV4cHJlc3Npb25zOjpQcm9oaWJpdENvbnN0YW50UHJhZ21hXQoK IyBTMiAtIFJlcXVpcmVzIGFsbCBudW1iZXJzIHRvIGJlIGRlZmluZWQgYXMgY29uc3RhbnRz ClstVmFsdWVzQW5kRXhwcmVzc2lvbnM6OlByb2hpYml0TWFnaWNOdW1iZXJzXQoKIyBTNCAt IFJlcXVpcmVzIGFsbCBzdWJzIHRvIGhhdmUgYSByZXR1cm4sIGV2ZW4gaWYgdGhlcmUgaXMg bm90IHZhbHVlIHRvIHJldHVybi4KWy1TdWJyb3V0aW5lczo6UmVxdWlyZUZpbmFsUmV0dXJu XQoKIyBTNCAtIFJlcXVpcmVzIG5ldyB0byBiZSBjYWxsZWQgYXMgT2JqZWN0LT5uZXcoKS4K Wy1PYmplY3RzOjpQcm9oaWJpdEluZGlyZWN0U3ludGF4XQoKIyBTMiAtIFJlcXVpcmVzIHRo YXQgJiBub3QgYmUgdXNlZCBpbiBmdW5jdGlvbnMgY2FsbHMuICBDdXJyZW50bHkgdGhpcyBp cyB1c2VkIGEgbG90IGZvciAmbG9nKCkgY2FsbHMuClstU3Vicm91dGluZXM6OlByb2hpYml0 QW1wZXJzYW5kU2lnaWxzXQoKIyBTMiAtIFJlcXVpcmVzIHVzZSBvZiBlcSBpbnN0ZWFkIG9m IHJlZ2V4cCB3aGVuIHBvc3NpYmxlLgpbLVJlZ3VsYXJFeHByZXNzaW9uczo6UHJvaGliaXRG aXhlZFN0cmluZ01hdGNoZXNdCgojIFMyIC0gUmVxdWlyZXMgdGhhdCBzaWdpbHMgYmUgc2Vw YXJhdGVkIGJ5IGJyYWNlcywgZWcgJSR2YXIgYmVjb21lcyAleyR2YXJ9LgpbLVJlZmVyZW5j ZXM6OlByb2hpYml0RG91YmxlU2lnaWxzXQoKIyBTMiAtIFJlcXVpcmVzIHVzZSBFbmdsaXNo IGluc3RlYWQgYSBwdWN0dWF0aW9uIHZhcnMgc3VjaCBhcyAkIS4KWy1WYXJpYWJsZXM6OlBy b2hpYml0UHVuY3R1YXRpb25WYXJzXQoKIyBTMyAtIFJlcXVpcmVzIG5lc3RlZCBpZi9lbHNl IGhhdmUgbGltaXRlZCBkZXB0aCBhbmQgcmVjb21tZW5kcyB1c2luZyBnaXZlbi93aGVuIGlu c3RlYWQuClstQ29udHJvbFN0cnVjdHVyZXM6OlByb2hpYml0Q2FzY2FkaW5nSWZFbHNlXQoK IyBTMiAtIFJlcXVpcmVzIGVtcHR5IHN0cmluZ3MgdG8gYmUgcmVwcmVzZW50ZWQgd2l0aCBx d3t9LgpbLVZhbHVlc0FuZEV4cHJlc3Npb25zOjpQcm9oaWJpdEVtcHR5UXVvdGVzXQoKIyBT MiAtIFJlcXVpcmVzIG5vbiBsZXR0ZXIgYW5kIG51bWJlciBzdHJpbmdzIHRvIGJlIHJlcHJl c2VudGVkIHdpdGggc29tZXRoaW5nIGxpa2UgcXd7L30uClstVmFsdWVzQW5kRXhwcmVzc2lv bnM6OlByb2hpYml0Tm9pc3lRdW90ZXNdCgojIFMyIC0gUmVxdWlyZXMgZXhwYW5kZWQgbWF0 Y2hpbmcgZm9yIC4gaW4gcmVndWxhciBleHByZXNzaW9ucy4KWy1SZWd1bGFyRXhwcmVzc2lv bnM6OlJlcXVpcmVEb3RNYXRjaEFueXRoaW5nXQoKIyBTMiAtIFJlcXVpcmVzIHNlZC1zdHls ZSBib3VuZGFyeSBtYXRjaGluZy4gIE1heSBub3QgYmUgYXBwcm9wcmlhdGUgZm9yIHJlZyBl eHBzIGluIHRoaXMgcHJvamVjdCwgdGhvdWdoLgpbLVJlZ3VsYXJFeHByZXNzaW9uczo6UmVx dWlyZUxpbmVCb3VuZGFyeU1hdGNoaW5nXQoKIyBTMSAtIFJlcXVpcmVzIHVzZSBvZiBQZXJs OjpUaWR5LgpbLUNvZGVMYXlvdXQ6OlJlcXVpcmVUaWR5Q29kZV0KCiMgUzIgLSBSZXF1aXJl cyB1c2Ugb2YgUGVybCBzeW50YXggZm9yIHNpbXBsZSBsb29wcywgZS5nLiBmb3IgKDAuLiRt YXgpLgpbLUNvbnRyb2xTdHJ1Y3R1cmVzOjpQcm9oaWJpdENTdHlsZUZvckxvb3BzXQoKIyBT MiAtIFJlcXVpcmUgc3RhbmRhcmQgaWYgc3RydWN0dXJlcyByYXRoZXIgdGhhbiBwb3N0Zml4 IGZvciByZWFkYWJpbGl0eS4KWy1Db250cm9sU3RydWN0dXJlczo6UHJvaGliaXRQb3N0Zml4 Q29udHJvbHNdCgojIFMzIC0gUmVxdWlyZXMgY29kZSBoYXZlIGEgTWNDYWJlIHNjb3JlIG9m IG5vIG1vcmUgdGhhbiAyMCBidXQgaXMgY29uZmlndXJhYmxlLgpbLVN1YnJvdXRpbmVzOjpQ cm9oaWJpdEV4Y2Vzc0NvbXBsZXhpdHldClstTW9kdWxlczo6UHJvaGliaXRFeGNlc3NNYWlu Q29tcGxleGl0eV0KCiMgUzMgLSBSZXF1aXJlcyBsb3cgbGV2ZWwgb2YgY29kZSBuZXN0aW5n IChtYXkgcmVxdWlyZSBhIGxvdCBvZiByZWZhY3RvcmluZykuClstQ29udHJvbFN0cnVjdHVy ZXM6OlByb2hpYml0RGVlcE5lc3RzXQoKIyBTMyAtIFJlcXVpcmVzIHN1YnMgdG8gaGF2ZSA8 PSA2IGFyZ3MgYnV0IGlzIGNvbmZpZ3VyYWJsZS4KWy1TdWJyb3V0aW5lczo6UHJvaGliaXRN YW55QXJnc10KCiMgUzMgLSBSZXF1aXJlcyBhcmJpdHJhcnkgdW5hbWJpZ2lvdXMgbmFtZXMg YnV0IGlzIGNvbmZpZ3VyYWJsZS4KWy1OYW1pbmdDb252ZW50aW9uczo6UHJvaGliaXRBbWJp Z3VvdXNOYW1lc10KCiMgUzMgLSBSZXF1aXJlcyB0aGF0IHZhciBuYW1lcyBuZXZlciBiZSBy ZXN1c2VkIGluIGEgc3ViLCBub3Qgc3VyZSBhYm91dCB0aGlzIG9uZS4KWy1WYXJpYWJsZXM6 OlByb2hpYml0UmV1c2VkTmFtZXNdCgojIFMzIC0gUmVxdWlyZXMgbm9uLWNhcHR1cmluZyBn cm91cHMgaW4gcmVnZXhwLCBwcmltYXJpbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24u ClstUmVndWxhckV4cHJlc3Npb25zOjpQcm9oaWJpdFVudXNlZENhcHR1cmVdCgojIFMxIC0g UmVxdWlyZXMgdHJhaWxpbmcgY29tbWFzIG9uIGFsbCBsaXN0cy4KWy1Db2RlTGF5b3V0OjpS ZXF1aXJlVHJhaWxpbmdDb21tYXNdCgojIFMyIC0gUmVxdWlyZXMgY2hhaW5lZCBjYWxscyBi ZSBsZXNzIHRoYW4gZm91ci4KWy1WYWx1ZXNBbmRFeHByZXNzaW9uczo6UHJvaGliaXRMb25n Q2hhaW5zT2ZNZXRob2RDYWxsc10KCiMgUzIgLSBSZXF1aXJlcyBjaGVjayBmb3Igc3VjY2Vz cyBvZiBjbG9zZSgpIGZ1bmN0aW9uLgpbLUlucHV0T3V0cHV0OjpSZXF1aXJlQ2hlY2tlZENs b3NlXQoKIyBTMSAtIFJlcXVpcmVzIHVzZSBGYXRhbCBvciBhdXRvZGllIHdpdGggc3lzY2Fs bHMuClstSW5wdXRPdXRwdXQ6OlJlcXVpcmVDaGVja2VkU3lzY2FsbHNdCgojIFMxIC0gUmVx dWlyZXMgbGVzcyBhYmlndWl0eSBmb3IgbWV0YWNoYXJhY3RlcnMgaW4gc3RyaW5ncy4KWy1W YWx1ZXNBbmRFeHByZXNzaW9uczo6UmVxdWlyZUludGVycG9sYXRpb25PZk1ldGFjaGFyc10K CiMgUzQgLSBSZXF1aXJlcyBjaGFyYWN0ZXIgY2xhc3NlcyB0byByZWR1Y2UgZXNjYXBlcyBp biByZWdleHBzLgpbLVJlZ3VsYXJFeHByZXNzaW9uczo6UHJvaGliaXRFc2NhcGVkTWV0YWNo YXJhY3RlcnNdCgojIFMxIC0gUmVxdWlyZSBjaGFyYWN0ZXIgY2xhc3NlcyByYXRoZXIgdGhh biBzaW5nbGUgY2hhcmFjdGVyIGFsdGVybmF0aW9uLgpbLVJlZ3VsYXJFeHByZXNzaW9uczo6 UHJvaGliaXRTaW5nbGVDaGFyQWx0ZXJuYXRpb25dCgojIFMyIC0gUmVxdWlyZSBxd3t9IHN5 bnRheCBmb3IgcXVvdGVkIHN0cmluZyBsaXN0cwpbLUNvZGVMYXlvdXQ6OlByb2hpYml0UXVv dGVkV29yZExpc3RzXQo= --------------299CED85534F54409FD22269--