From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18906 invoked by alias); 27 Dec 2011 06:23:55 -0000 Received: (qmail 18879 invoked by uid 22791); 27 Dec 2011 06:23:48 -0000 X-SWARE-Spam-Status: No, hits=-2.7 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,TW_BJ X-Spam-Check-By: sourceware.org Received: from mail-qw0-f48.google.com (HELO mail-qw0-f48.google.com) (209.85.216.48) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 27 Dec 2011 06:23:27 +0000 Received: by qadc16 with SMTP id c16so7999597qad.0 for ; Mon, 26 Dec 2011 22:23:26 -0800 (PST) Received: by 10.224.204.196 with SMTP id fn4mr11143994qab.77.1324967006021; Mon, 26 Dec 2011 22:23:26 -0800 (PST) MIME-Version: 1.0 Received: by 10.224.204.196 with SMTP id fn4mr11143978qab.77.1324967005714; Mon, 26 Dec 2011 22:23:25 -0800 (PST) Received: by 10.224.72.210 with HTTP; Mon, 26 Dec 2011 22:23:25 -0800 (PST) In-Reply-To: References: Date: Tue, 27 Dec 2011 06:29:00 -0000 Message-ID: Subject: Re: [RFC] A new command 'explore' From: Siva Chandra To: gdb-patches@sourceware.org X-System-Of-Record: true Content-Type: multipart/mixed; boundary=20cf3005dcb0b6f8f304b50ceb5a X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-12/txt/msg00832.txt.bz2 --20cf3005dcb0b6f8f304b50ceb5a Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Content-length: 2466 Hello again, I have updated the patch based on feedback from Tom and Joel. The new version is attached. As I have said earlier, I will add documentation to gdb/doc/gdb.texinfo once the basic functionality and feature set is approved. 2011-12-27 Siva Chandra New command 'explore' which helps explore values in scope. * data-directory/Makefile.in: Add gdb/command/explore.py * python/lib/gdb/command/explore.py: Implemention of the 'explore' command using the GDB Python API. * testsuite/gdb.python/Makefile.in: Add py-explore to EXECUTABLES * testsuite/gdb.python/py-explore.c: C program used for testing the new 'explore' command. * testsuite/gdb-python/py-explore.exp: Tests for the new 'explore' command. Thanks, Siva Chandra On Tue, Dec 20, 2011 at 12:30 AM, Siva Chandra wro= te: > Hello, > > Attached is a patch which implements a new command 'explore' using the > GDB Python API. The idea behind this 'explore' command is as follows: > Often, when exploring a new code base which has complicated data > structures, we would like to explore the data structure values > top-down. For example, if a struct is part of a struct/union is part > of another struct/union, then we typically explore the top-level > struct/union in the first pass. In subsequent passes, we might want to > go deeper by exploring the structs/unions embedded in the top level > struct. We might infact want to explore all the way up to the leaf > values. The =91explore=92 command enables a user to do such a top-down > exploration of data structures interactively. > > I will add the documentation to gdb/doc/gdb.texinfo once the basics of > this patch are approved. > > 2011-12-19 Siva Chandra > > =A0 =A0 =A0 =A0New command 'explore' which helps explore values in scope. > =A0 =A0 =A0 =A0* data-directory/Makefile.in: Add gdb/command/explore.py > =A0 =A0 =A0 =A0* python/lib/gdb/command/explore.py: Implemention of the '= explore' > =A0 =A0 =A0 =A0command using the GDB Python API. > =A0 =A0 =A0 =A0* testsuite/gdb.python/Makefile.in: Add py-explore to EXEC= UTABLES > =A0 =A0 =A0 =A0* testsuite/gdb.python/py-explore.c: C program used for te= sting > =A0 =A0 =A0 =A0the new 'explore' command. > =A0 =A0 =A0 =A0* testsuite/gdb-python/py-explore.exp: Tests for the new '= explore' > =A0 =A0 =A0 =A0command. > > Thanks, > Siva Chandra --20cf3005dcb0b6f8f304b50ceb5a Content-Type: text/plain; charset=US-ASCII; name="explore_command_patch_v2.txt" Content-Disposition: attachment; filename="explore_command_patch_v2.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gwoiucs11 Content-length: 61928 ZGlmZiAtcnVwTiBzcmMvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmlu IHNyY19sb2NhbC9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KLS0t IHNyYy9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4JMjAxMS0wOC0x NyAxNjoxMToyMC4wMDAwMDAwMDAgKzA1MzAKKysrIHNyY19sb2NhbC9nZGIv ZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4JMjAxMS0xMS0xMiAxMjowNzoz NC44MDI1MDY3MDMgKzA1MzAKQEAgLTU4LDcgKzU4LDggQEAgUFlUSE9OX0ZJ TEVTID0gXAogCWdkYi9wcm9tcHQucHkgXAogCWdkYi9jb21tYW5kL19faW5p dF9fLnB5IFwKIAlnZGIvY29tbWFuZC9wcmV0dHlfcHJpbnRlcnMucHkgXAot CWdkYi9jb21tYW5kL3Byb21wdC5weQorCWdkYi9jb21tYW5kL3Byb21wdC5w eSBcCisJZ2RiL2NvbW1hbmQvZXhwbG9yZS5weQogCiBGTEFHU19UT19QQVNT ID0gXAogCSJwcmVmaXg9JChwcmVmaXgpIiBcCmRpZmYgLXJ1cE4gc3JjL2dk Yi9weXRob24vbGliL2dkYi9jb21tYW5kL2V4cGxvcmUucHkgc3JjX2xvY2Fs L2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL2V4cGxvcmUucHkKLS0tIHNy Yy9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9leHBsb3JlLnB5CTE5NzAt MDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBzcmNfbG9jYWwv Z2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvZXhwbG9yZS5weQkyMDExLTEy LTI3IDEwOjQ1OjAwLjA5MDE3NDg2MyArMDUzMApAQCAtMCwwICsxLDY5MyBA QAorIyBHREIgJ2V4cGxvcmUnIGNvbW1hbmQuCisjIENvcHlyaWdodCAoQykg MjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor IworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKworIiIiSW1wbGVtZW50YXRpb24gb2YgdGhlIEdEQiAnZXhw bG9yZScgY29tbWFuZCB1c2luZyB0aGUgR0RCIFB5dGhvbiBBUEkuIiIiCisK K2ltcG9ydCBnZGIKKworY2xhc3MgRXhwbG9yZXIob2JqZWN0KToKKyAgICAi IiJJbnRlcm5hbCBjbGFzcyB3aGljaCBpbnZva2VzIG90aGVyIGV4cGxvcmVy cy4iIiIKKworICAgICMgVGhpcyBtYXAgaXMgZmlsbGVkIGJ5IHRoZSBFeHBs b3Jlci5pbml0X2VudigpIGZ1bmN0aW9uCisgICAgdHlwZV9jb2RlX3RvX2V4 cGxvcmVyX21hcCA9IHsgfQorCisgICAgX1NDQUxBUl9UWVBFX0xJU1QgPSAo CisgICAgICAgIGdkYi5UWVBFX0NPREVfQ0hBUiwKKyAgICAgICAgZ2RiLlRZ UEVfQ09ERV9JTlQsCisgICAgICAgIGdkYi5UWVBFX0NPREVfQk9PTCwKKyAg ICAgICAgZ2RiLlRZUEVfQ09ERV9GTFQsCisgICAgICAgIGdkYi5UWVBFX0NP REVfVk9JRCwKKyAgICAgICAgZ2RiLlRZUEVfQ09ERV9FTlVNLAorICAgICkK KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhwbG9yZV9leHByKGV4 cHIsIHZhbHVlLCBpc19jaGlsZCk6CisgICAgICAgICIiIk1haW4gZnVuY3Rp b24gdG8gZXhwbG9yZSBhbiBleHByZXNzaW9uIHZhbHVlLgorCisgICAgICAg IEFyZ3VtZW50czoKKyAgICAgICAgICAgIGV4cHI6IFRoZSBleHByZXNzaW9u IHN0cmluZyB0aGF0IGlzIGJlaW5nIGV4cGxvcmVkLgorICAgICAgICAgICAg dmFsdWU6IFRoZSBnZGIuVmFsdWUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24u CisgICAgICAgICAgICBpc19jaGlsZDogQm9vbGVhbiB2YWx1ZSB0byBpbmRp Y2F0ZSBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIGNoaWxkLgorICAgICAgICAg ICAgICAgICAgICAgIEFuIGV4cHJlc3Npb24gaXMgYSBjaGlsZCBpZiBpdCBp cyBkZXJpdmVkIGZyb20gdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAg ICBleHByZXNzaW9uIGVudGVyZWQgYnkgdGhlIHVzZXIuIEZvciBleGFtcGxl LCBpZiB0aGUgdXNlcgorICAgICAgICAgICAgICAgICAgICAgIGVudGVyZWQg YW4gZXhwcmVzc2lvbiB3aGljaCBldmFsdWF0ZXMgdG8gYSBzdHJ1Y3QsIHRo ZW4KKyAgICAgICAgICAgICAgICAgICAgICB3aGVuIGV4cGxvcmluZyB0aGUg ZmllbGRzIG9mIHRoZSBzdHJ1Y3QsIGlzX2NoaWxkIGlzIHNldAorICAgICAg ICAgICAgICAgICAgICAgIHRvIFRydWUgaW50ZXJuYWxseS4KKworICAgICAg ICBSZXR1cm5zOgorICAgICAgICAgICAgTm8gcmV0dXJuIHZhbHVlLgorICAg ICAgICAiIiIKKyAgICAgICAgdHlwZV9jb2RlID0gdmFsdWUudHlwZS5jb2Rl CisgICAgICAgIGlmIHR5cGVfY29kZSBpbiBFeHBsb3Jlci50eXBlX2NvZGVf dG9fZXhwbG9yZXJfbWFwOgorICAgICAgICAgICAgaWYgZXhwclswXSA9PSAn Kic6CisgICAgICAgICAgICAgICAgZXhwciA9ICIoJXMpIiAlIGV4cHIKKyAg ICAgICAgICAgIGV4cGxvcmVyX2NsYXNzID0gRXhwbG9yZXIudHlwZV9jb2Rl X3RvX2V4cGxvcmVyX21hcFt0eXBlX2NvZGVdCisgICAgICAgICAgICB3aGls ZSBleHBsb3Jlcl9jbGFzcy5leHBsb3JlX2V4cHIoZXhwciwgdmFsdWUsIGlz X2NoaWxkKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6 CisgICAgICAgICAgICBwcmludCAoIkV4cGxvcmVyIGZvciB0eXBlICclcycg bm90IHlldCBhdmFpbGFibGUuXG4iICUKKyAgICAgICAgICAgICAgICAgICBz dHIodmFsdWUudHlwZSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm IGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlwZSwgaXNfY2hpbGQpOgorICAg ICAgICAiIiJNYWluIGZ1bmN0aW9uIHRvIGV4cGxvcmUgYSBkYXRhIHR5cGUu CisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICAgbmFtZTogVGhl IHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhdGggdG8gdGhlIGRhdGEgdHlw ZSBiZWluZworICAgICAgICAgICAgICAgICAgZXhwbG9yZWQuCisgICAgICAg ICAgICBkYXRhdHlwZTogVGhlIGdkYi5UeXBlIHZhbHVlIG9mIHRoZSBkYXRh IHR5cGUgYmVpbmcgZXhwbG9yZWQuCisgICAgICAgICAgICBpc19jaGlsZDog Qm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZSBpZiB0aGUgbmFtZSBpcyBhIGNo aWxkLgorICAgICAgICAgICAgICAgICAgICAgIEEgbmFtZSBpcyBhIGNoaWxk IGlmIGl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgbWFpbiBuYW1lCisgICAgICAg ICAgICAgICAgICAgICAgZW50ZXJlZCBieSB0aGUgdXNlci4gRm9yIGV4YW1w bGUsIGlmIHRoZSB1c2VyIGVudGVyZWQgdGhlCisgICAgICAgICAgICAgICAg ICAgICAgbmFtZSBvZiBzdHJ1Y3QgdHlwZSwgdGhlbiB3aGVuIGV4cGxvcmlu ZyB0aGUgZmllbGRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCwgaXNfY2hpbGQgaXMgc2V0IHRvIFRydWUgaW50ZXJuYWxseS4KKwor ICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgTm8gcmV0dXJuIHZhbHVl LgorICAgICAgICAiIiIKKyAgICAgICAgdHlwZV9jb2RlID0gZGF0YXR5cGUu Y29kZQorICAgICAgICBpZiB0eXBlX2NvZGUgaW4gRXhwbG9yZXIudHlwZV9j b2RlX3RvX2V4cGxvcmVyX21hcDoKKyAgICAgICAgICAgIGV4cGxvcmVyX2Ns YXNzID0gRXhwbG9yZXIudHlwZV9jb2RlX3RvX2V4cGxvcmVyX21hcFt0eXBl X2NvZGVdCisgICAgICAgICAgICB3aGlsZSBleHBsb3Jlcl9jbGFzcy5leHBs b3JlX3R5cGUobmFtZSwgZGF0YXR5cGUsIGlzX2NoaWxkKToKKyAgICAgICAg ICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmlu dCAoIkV4cGxvcmVyIGZvciB0eXBlICclcycgbm90IHlldCBhdmFpbGFibGUu XG4iICUKKyAgICAgICAgICAgICAgICAgICBzdHIoZGF0YXR5cGUpKQorCisg ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpbml0X2VudigpOgorICAgICAg ICAiIiJJbml0aWFsaXplcyB0aGUgRXhwbG9yZXIgZW52aXJvbm1lbnQuCisg ICAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQgYmVmb3Jl IHN0YXJ0aW5nIGFueSBleHBsb3JhdGlvbi4gSWYKKyAgICAgICAgaW52b2tl ZCBiZWZvcmUgYW4gZXhwbG9yYXRpb24sIGl0IG5lZWQgbm90IGJlIGludm9r ZWQgZm9yIHN1YnNlcXVlbnQKKyAgICAgICAgZXhwbG9yYXRpb25zLgorICAg ICAgICAiIiIKKyAgICAgICAgRXhwbG9yZXIudHlwZV9jb2RlX3RvX2V4cGxv cmVyX21hcCA9IHsKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfQ0hBUiA6 IFNjYWxhckV4cGxvcmVyLAorICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9J TlQgOiBTY2FsYXJFeHBsb3JlciwKKyAgICAgICAgICAgIGdkYi5UWVBFX0NP REVfQk9PTCA6IFNjYWxhckV4cGxvcmVyLAorICAgICAgICAgICAgZ2RiLlRZ UEVfQ09ERV9GTFQgOiBTY2FsYXJFeHBsb3JlciwKKyAgICAgICAgICAgIGdk Yi5UWVBFX0NPREVfVk9JRCA6IFNjYWxhckV4cGxvcmVyLAorICAgICAgICAg ICAgZ2RiLlRZUEVfQ09ERV9FTlVNIDogU2NhbGFyRXhwbG9yZXIsCisgICAg ICAgICAgICBnZGIuVFlQRV9DT0RFX1NUUlVDVCA6IENvbXBvdW5kRXhwbG9y ZXIsCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX1VOSU9OIDogQ29tcG91 bmRFeHBsb3JlciwKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfUFRSIDog UG9pbnRlckV4cGxvcmVyLAorICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9U WVBFREVGIDogVHlwZWRlZkV4cGxvcmVyLAorICAgICAgICAgICAgZ2RiLlRZ UEVfQ09ERV9BUlJBWSA6IEFycmF5RXhwbG9yZXIKKyAgICAgICAgfQorCisg ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpc19zY2FsYXJfdHlwZSh0eXBl KToKKyAgICAgICAgIiIiQ2hlY2tzIHdoZXRoZXIgYSB0eXBlIGlzIGEgc2Nh bGFyIHR5cGUuCisgICAgICAgIEEgdHlwZSBpcyBhIHNjYWxhciB0eXBlIG9m IGl0cyB0eXBlIGlzCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX0NIQVIg b3IKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfSU5UIG9yCisgICAgICAg ICAgICBnZGIuVFlQRV9DT0RFX0JPT0wgb3IKKyAgICAgICAgICAgIGdkYi5U WVBFX0NPREVfRkxUIG9yCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX1ZP SUQgb3IKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfRU5VTS4KKworICAg ICAgICBBcmd1bWVudHM6CisgICAgICAgICAgICB0eXBlOiBUaGUgdHlwZSB0 byBiZSBjaGVja2VkLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAg ICAnVHJ1ZScgaWYgJ3R5cGUnIGlzIGEgc2NhbGFyIHR5cGUuICdGYWxzZScg b3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHR5cGUu Y29kZSBpbiBFeHBsb3Jlci5fU0NBTEFSX1RZUEVfTElTVAorCisgICAgQHN0 YXRpY21ldGhvZAorICAgIGRlZiByZXR1cm5pbmdfdG9fcGFyZW50X3ZhbHVl X21lc3NhZ2UoKToKKyAgICAgICAgIiIiQSB1dGlsaXR5IGZ1bmN0aW9uIHdo aWNoIHByaW50cyB0aGF0IHRoZSBjdXJyZW50IGV4cGxvcmF0aW9uIHNlc3Np b24KKyAgICAgICAgaXMgcmV0dXJuaW5nIHRvIHRoZSBwYXJlbnQgdmFsdWUu IFVzZWZ1bCB3aGVuIGV4cGxvcmluZyB2YWx1ZXMuCisgICAgICAgICIiIgor ICAgICAgICBwcmludCAiXG5SZXR1cm5pbmcgdG8gcGFyZW50IHZhbHVlLi4u XG4iCisgICAgICAgIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcmV0 dXJuX3RvX3BhcmVudF92YWx1ZV9wcm9tcHQoKToKKyAgICAgICAgIiIiQSB1 dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIHByb21wdHMgdGhlIHVzZXIgdG8gcHJl c3MgdGhlICdlbnRlcicga2V5IHNvCisgICAgICAgIHRoYXQgdGhlIGV4cGxv cmF0aW9uIHNlc3Npb24gY2FuIHNoaWZ0IGJhY2sgdG8gdGhlIHBhcmVudCB2 YWx1ZS4gVXNlZnVsCisgICAgICAgIHdoZW4gZXhwbG9yaW5nIHZhbHVlcy4K KyAgICAgICAgIiIiCisgICAgICAgIHJhd19pbnB1dCgiXG5QcmVzcyBlbnRl ciB0byByZXR1cm4gdG8gcGFyZW50IHZhbHVlLi4uIikKKyAgICAgICAgRXhw bG9yZXIucmV0dXJuaW5nX3RvX3BhcmVudF92YWx1ZV9tZXNzYWdlKCkKKyAg ICAgICAgCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByZXR1cm5pbmdf dG9fZW5jbG9zaW5nX3R5cGVfbWVzc2FnZSgpOgorICAgICAgICAiIiJBIHV0 aWxpdHkgZnVuY3Rpb24gd2hpY2ggcHJpbnRzIHRoYXQgdGhlIGN1cnJlbnQg ZXhwbG9yYXRpb24gc2Vzc2lvbgorICAgICAgICBpcyByZXR1cm5pbmcgdG8g dGhlIGVuY2xvc2luZyB0eXBlLiBVc2VmdWwgd2hlbiBleHBsb3JpbmcgdHlw ZXMuCisgICAgICAgICIiIgorICAgICAgICBwcmludCAiXG5SZXR1cm5pbmcg dG8gZW5jbG9zaW5nIHR5cGUuLi5cbiIKKyAgICAgICAgCisgICAgQHN0YXRp Y21ldGhvZAorICAgIGRlZiByZXR1cm5fdG9fZW5jbG9zaW5nX3R5cGVfcHJv bXB0KCk6CisgICAgICAgICIiIkEgdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBw cm9tcHRzIHRoZSB1c2VyIHRvIHByZXNzIHRoZSAnZW50ZXInIGtleSBzbwor ICAgICAgICB0aGF0IHRoZSBleHBsb3JhdGlvbiBzZXNzaW9uIGNhbiBzaGlm dCBiYWNrIHRvIHRoZSBlbmNsb3NpbmcgdHlwZS4KKyAgICAgICAgVXNlZnVs IHdoZW4gZXhwbG9yaW5nIHR5cGVzLgorICAgICAgICAiIiIKKyAgICAgICAg cmF3X2lucHV0KCJcblByZXNzIGVudGVyIHRvIHJldHVybiB0byBlbmNsb3Np bmcgdHlwZS4uLiIpCisgICAgICAgIEV4cGxvcmVyLnJldHVybmluZ190b19l bmNsb3NpbmdfdHlwZV9tZXNzYWdlKCkKKworCitjbGFzcyBTY2FsYXJFeHBs b3JlcihvYmplY3QpOgorICAgICIiIkludGVybmFsIGNsYXNzIHVzZWQgdG8g ZXhwbG9yZSBzY2FsYXIgdmFsdWVzLiIiIgorCisgICAgQHN0YXRpY21ldGhv ZAorICAgIGRlZiBleHBsb3JlX2V4cHIoZXhwciwgdmFsdWUsIGlzX2NoaWxk KToKKyAgICAgICAgIiIiRnVuY3Rpb24gdG8gZXhwbG9yZSBzY2FsYXIgdmFs dWVzLgorICAgICAgICBTZWUgRXhwbG9yZXIuZXhwbG9yZV9leHByIGFuZCBF eHBsb3Jlci5pc19zY2FsYXJfdHlwZSBmb3IgbW9yZQorICAgICAgICBpbmZv cm1hdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICgiJyVzJyBp cyBhIHNjYWxhciB2YWx1ZSBvZiB0eXBlICclcycuXG4iICUKKyAgICAgICAg ICAgICAgIChleHByLCB2YWx1ZS50eXBlKSkKKyAgICAgICAgcHJpbnQgIiAg JXMgPSAlcyIgJSAoZXhwciwgc3RyKHZhbHVlKSkKKworICAgICAgICBpZiBp c19jaGlsZDoKKyAgICAgICAgICAgIEV4cGxvcmVyLnJldHVybl90b19wYXJl bnRfdmFsdWVfcHJvbXB0KCkKKworICAgICAgICByZXR1cm4gRmFsc2UKKwor ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhwbG9yZV90eXBlKG5hbWUs IGRhdGF0eXBlLCBpc19jaGlsZCk6CisgICAgICAgICIiIkZ1bmN0aW9uIHRv IGV4cGxvcmUgc2NhbGFyIHR5cGVzLgorICAgICAgICBTZWUgRXhwbG9yZXIu ZXhwbG9yZV90eXBlIGFuZCBFeHBsb3Jlci5pc19zY2FsYXJfdHlwZSBmb3Ig bW9yZQorICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgIiIiCisgICAg ICAgIGlmIGRhdGF0eXBlLmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9FTlVNOgor ICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgcHJp bnQgKCIlcyBpcyBvZiBhbiBlbnVtZXJhdGVkIHR5cGUgJyVzJy4iICUKKyAg ICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHN0cihkYXRhdHlwZSkpKQor ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAiJXMg aXMgYW4gZW51bWVyYXRlZCB0eXBlLiIgJSBuYW1lCisgICAgICAgIGVsc2U6 CisgICAgICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAgICAgICBw cmludCAoIiVzIGlzIG9mIGEgcHJpbWl0aXZlIHNjYWxhciB0eXBlICclcycu IiAlCisgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBzdHIoZGF0YXR5 cGUpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJp bnQgIiVzIGlzIGEgcHJpbWl0aXZlIHNjYWxhciB0eXBlLiIgJSBuYW1lCisK KyAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICBFeHBsb3Jlci5y ZXR1cm5fdG9fZW5jbG9zaW5nX3R5cGVfcHJvbXB0KCkKKworICAgICAgICBy ZXR1cm4gRmFsc2UKKworCitjbGFzcyBQb2ludGVyRXhwbG9yZXIob2JqZWN0 KToKKyAgICAiIiJJbnRlcm5hbCBjbGFzcyB1c2VkIHRvIGV4cGxvcmUgcG9p bnRlciB2YWx1ZXMuIiIiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm IGV4cGxvcmVfZXhwcihleHByLCB2YWx1ZSwgaXNfY2hpbGQpOgorICAgICAg ICAiIiJGdW5jdGlvbiB0byBleHBsb3JlIHBvaW50ZXIgdmFsdWVzLgorICAg ICAgICBTZWUgRXhwbG9yZXIuZXhwbG9yZV9leHByIGZvciBtb3JlIGluZm9y bWF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc3RyKHZhbHVlKSA9 PSAiMHgwIjoKKyAgICAgICAgICAgIHByaW50ICJcbiAgJXMgPSBOVUxMIiAl IGV4cHIKKyAgICAgICAgICAgIGlmIGlzX2NoaWxkOgorICAgICAgICAgICAg ICAgIEV4cGxvcmVyLnJldHVybl90b19wYXJlbnRfdmFsdWVfcHJvbXB0KCkK KyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHByaW50ICgi XG4nJXMnIGlzIGEgcG9pbnRlciB0byBhIHZhbHVlIG9mIHR5cGUgJyVzJyIg JQorICAgICAgICAgICAgICAgKGV4cHIsIHN0cih2YWx1ZS50eXBlLnRhcmdl dCgpKSkpCisgICAgICAgIG9wdGlvbiAgPSByYXdfaW5wdXQoIlxuRW50ZXIg J3MnIHRvIGNvbnRpbnVlIGV4cGxvcmluZyBhcyBhIHBvaW50ZXIgIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBhIHNpbmdsZSB2YWx1ZSwg J2EnIHRvIGV4cGxvcmUgYXMgYW4gYXJyYXk6ICIpCisgICAgICAgIGlmIG9w dGlvbiA9PSAicyI6CisgICAgICAgICAgICBkZXJlZl92YWx1ZSA9IE5vbmUK KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZXJlZl92YWx1 ZSA9IHZhbHVlLmRlcmVmZXJlbmNlKCkKKyAgICAgICAgICAgICAgICBzdHIo ZGVyZWZfdmFsdWUpCisgICAgICAgICAgICBleGNlcHQgZ2RiLk1lbW9yeUVy cm9yOgorICAgICAgICAgICAgICAgIHByaW50ICgiJyVzJyBhIHBvaW50ZXIg cG9pbnRpbmcgdG8gYW4gaW52YWxpZCBtZW1vcnkgIgorICAgICAgICAgICAg ICAgICAgICAgICAibG9jYXRpb24uIiAlIGV4cHIpCisgICAgICAgICAgICAg ICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIEV4cGxvcmVy LnJldHVybl90b19wYXJlbnRfdmFsdWVfcHJvbXB0KCkKKyAgICAgICAgICAg ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIEV4cGxvcmVyLmV4cGxv cmVfZXhwcigiKiglcykiICUgZXhwciwgZGVyZWZfdmFsdWUsIGlzX2NoaWxk KQorICAgICAgICBpZiBvcHRpb24gPT0gImEiOgorICAgICAgICAgICAgd2hp bGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBpbmRleCA9IDAKKyAgICAgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW50 KHJhd19pbnB1dCgiRW50ZXIgdGhlIGluZGV4IHRvIGV4cGxvcmU6ICIpKQor ICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAg ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsZW1lbnRfZXhw ciA9ICIlc1slZF0iICUgKGV4cHIsIGluZGV4KQorICAgICAgICAgICAgICAg IGVsZW1lbnQgPSBnZGIucGFyc2VfYW5kX2V2YWwoZWxlbWVudF9leHByKQor ICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3Ry KGVsZW1lbnQpCisgICAgICAgICAgICAgICAgZXhjZXB0IGdkYi5NZW1vcnlF cnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNhbm5vdCByZWFk IHZhbHVlIGF0IGluZGV4ICVkLiIgJSBpbmRleAorICAgICAgICAgICAgICAg ICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIEV4cGxvcmVyLmV4cGxv cmVfZXhwcihlbGVtZW50X2V4cHIsIGVsZW1lbnQsIFRydWUpCisgICAgICAg IGlmIG9wdGlvbiAhPSAicyIgYW5kIG9wdGlvbiAhPSAiYSI6ICAgIAorICAg ICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgRXhwbG9y ZXIucmV0dXJuaW5nX3RvX3BhcmVudF92YWx1ZV9tZXNzYWdlKCkKKworICAg ICAgICByZXR1cm4gRmFsc2UKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk ZWYgZXhwbG9yZV90eXBlKG5hbWUsIGRhdGF0eXBlLCBpc19jaGlsZCk6Cisg ICAgICAgICIiIkZ1bmN0aW9uIHRvIGV4cGxvcmUgcG9pbnRlciB0eXBlcy4K KyAgICAgICAgU2VlIEV4cGxvcmVyLmV4cGxvcmVfdHlwZSBmb3IgbW9yZSBp bmZvcm1hdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHRhcmdldF90eXBl ID0gZGF0YXR5cGUudGFyZ2V0KCkKKyAgICAgICAgcHJpbnQgKCJcbiclcycg aXMgb2YgYSBwb2ludGVyIHR5cGUgd2l0aCB0YXJnZXQgdHlwZSAnJXMnLiIg JQorICAgICAgICAgICAgICAgKG5hbWUsIHN0cih0YXJnZXRfdHlwZSkpKQor CisgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfdHlwZSgidGhlIHZhbHVlIHBv aW50ZWQgdG8gYnkgJXMiICUgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRhcmdldF90eXBlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaXNfY2hpbGQpCisgICAgICAgIHJldHVybiBGYWxzZQorCisK K2NsYXNzIEFycmF5RXhwbG9yZXIob2JqZWN0KToKKyAgICAiIiJJbnRlcm5h bCBjbGFzcyB1c2VkIHRvIGV4cGxvcmUgYXJyYXlzLiIiIgorCisgICAgQHN0 YXRpY21ldGhvZAorICAgIGRlZiBfcHJpbnRfYXJyYXlfaW5mbyhuYW1lLCB0 YXJnZXRfdHlwZSk6CisgICAgICAgICIiIkludGVybmFsIGZ1bmN0aW9uIHdo aWNoIHByaW50cyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFycmF5IHR5 cGUuCisgICAgICAgICIiIgorICAgICAgICBwcmludCAoIlxuJXMgaXMgYW4g YXJyYXkgb2YgZWxlbWVudHMgb2YgdHlwZSAnJXMnLiIgJQorICAgICAgICAg ICAgICAgKG5hbWUsIHRhcmdldF90eXBlKSkKKworICAgIEBzdGF0aWNtZXRo b2QKKyAgICBkZWYgZXhwbG9yZV9leHByKGV4cHIsIHZhbHVlLCBpc19jaGls ZCk6CisgICAgICAgICIiIkZ1bmN0aW9uIHRvIGV4cGxvcmUgYXJyYXkgdmFs dWVzLgorICAgICAgICBTZWUgRXhwbG9yZXIuZXhwbG9yZV9leHByIGZvciBt b3JlIGluZm9ybWF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgQXJyYXlF eHBsb3Jlci5fcHJpbnRfYXJyYXlfaW5mbygiJyVzJyIgJSBleHByLCB2YWx1 ZS50eXBlLnRhcmdldCgpKQorICAgICAgICBpbmRleCA9IDAKKyAgICAgICAg dHJ5OgorICAgICAgICAgICAgaW5kZXggPSBpbnQocmF3X2lucHV0KCJFbnRl ciB0aGUgaW5kZXggdG8gZXhwbG9yZTogIikpCisgICAgICAgIGV4Y2VwdCBW YWx1ZUVycm9yOgorICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAg ICAgICAgICAgRXhwbG9yZXIucmV0dXJuaW5nX3RvX3BhcmVudF92YWx1ZV9t ZXNzYWdlKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAg IGVsZW1lbnQgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVs ZW1lbnQgPSB2YWx1ZVtpbmRleF0KKyAgICAgICAgICAgIHN0cihlbGVtZW50 KQorICAgICAgICBleGNlcHQgZ2RiLk1lbW9yeUVycm9yOgorICAgICAgICAg ICAgcHJpbnQgIkNhbm5vdCByZWFkIHZhbHVlIGF0IGluZGV4ICVkLiIgJSBp bmRleAorICAgICAgICAgICAgcmF3X2lucHV0KCJQcmVzcyBlbnRlciB0byBj b250aW51ZS4uLiAiKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAg ICAgICAgIAorICAgICAgICBFeHBsb3Jlci5leHBsb3JlX2V4cHIoIiVzWyVz XSIgJSAoZXhwciwgaW5kZXgpLCBlbGVtZW50LCBUcnVlKQorICAgICAgICBy ZXR1cm4gVHJ1ZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHBs b3JlX3R5cGUobmFtZSwgZGF0YXR5cGUsIGlzX2NoaWxkKToKKyAgICAgICAg IiIiRnVuY3Rpb24gdG8gZXhwbG9yZSBhcnJheSB0eXBlcy4KKyAgICAgICAg U2VlIEV4cGxvcmVyLmV4cGxvcmVfdHlwZSBmb3IgbW9yZSBpbmZvcm1hdGlv bi4KKyAgICAgICAgIiIiCisgICAgICAgIHRhcmdldF90eXBlID0gZGF0YXR5 cGUudGFyZ2V0KCkKKyAgICAgICAgQXJyYXlFeHBsb3Jlci5fcHJpbnRfYXJy YXlfaW5mbyhuYW1lLCB0YXJnZXRfdHlwZSkKKworICAgICAgICBlbnRyeSA9 IHJhd19pbnB1dCgiRW50ZXIgJ3MnIHRvIHN0ZXAgaW4gdG8gZXhwbG9yaW5n IHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIG9mIHRo ZSBlbGVtZW50czogIikKKyAgICAgICAgaWYgZW50cnkgPT0gInMiOgorICAg ICAgICAgICAgRXhwbG9yZXIuZXhwbG9yZV90eXBlKCJhbiBhcnJheSBlbGVt ZW50IG9mICVzIiAlIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGFyZ2V0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg IGlmIGlzX2NoaWxkOgorICAgICAgICAgICAgICAgIEV4cGxvcmVyLnJldHVy bmluZ190b19lbmNsb3NpbmdfdHlwZV9tZXNzYWdlKCkKKyAgICAgICAgICAg IHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xh c3MgQ29tcG91bmRFeHBsb3JlcihvYmplY3QpOgorICAgICIiIkludGVybmFs IGNsYXNzIHVzZWQgdG8gZXhwbG9yZSBzdHJ1Y3QsIGNsYXNzZXMgYW5kIHVu aW9ucy4iIiIKKworICAgIF9WQUxVRVMgPSAwCisgICAgX1RZUEVTICA9IDEK KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3ByaW50X2ZpZWxkcyhw cmludF9saXN0LCBwcmludF90eXBlKToKKyAgICAgICAgIiIiSW50ZXJuYWwg ZnVuY3Rpb24gd2hpY2ggcHJpbnRzIHRoZSBmaWVsZHMgb2YgYSBzdHJ1Y3Qv Y2xhc3MvdW5pb24uIiIiCisgICAgICAgIG1heF90eXBlX25hbWVfbGVuZ3Ro ID0gMAorICAgICAgICBtYXhfZmllbGRfbmFtZV9sZW5ndGggPSAwCisgICAg ICAgIGZvciB0cmlwbGUgaW4gcHJpbnRfbGlzdDoKKyAgICAgICAgICAgIGlm IG1heF90eXBlX25hbWVfbGVuZ3RoIDwgbGVuKHRyaXBsZVswXSk6CisgICAg ICAgICAgICAgICAgbWF4X3R5cGVfbmFtZV9sZW5ndGggPSBsZW4odHJpcGxl WzBdKQorICAgICAgICAgICAgaWYgbWF4X2ZpZWxkX25hbWVfbGVuZ3RoIDwg bGVuKHRyaXBsZVsxXSk6CisgICAgICAgICAgICAgICAgbWF4X2ZpZWxkX25h bWVfbGVuZ3RoID0gbGVuKHRyaXBsZVsxXSkKKworICAgICAgICBmb3JtYXRf c3RyID0gIiIKKyAgICAgICAgaWYgcHJpbnRfdHlwZSA9PSBDb21wb3VuZEV4 cGxvcmVyLl9WQUxVRVM6CisgICAgICAgICAgICBmb3JtYXRfc3RyID0gKCIg IHswOj4lZH0gezE6PCVkfSA9IHsyfSIgJQorICAgICAgICAgICAgICAgICAg ICAgICAgICAobWF4X3R5cGVfbmFtZV9sZW5ndGgsIG1heF9maWVsZF9uYW1l X2xlbmd0aCkpCisgICAgICAgIGlmIHByaW50X3R5cGUgPT0gQ29tcG91bmRF eHBsb3Jlci5fVFlQRVM6CisgICAgICAgICAgICBmb3JtYXRfc3RyID0gKCIg IHswOj4lZH0gezE6PCVkfSAvLyB7Mn0iICUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgKG1heF90eXBlX25hbWVfbGVuZ3RoLCBtYXhfZmllbGRfbmFt ZV9sZW5ndGgpKQorCisgICAgICAgIGZvciB0cmlwbGUgaW4gcHJpbnRfbGlz dDoKKyAgICAgICAgICAgIHByaW50IGZvcm1hdF9zdHIuZm9ybWF0KHRyaXBs ZVswXSwgdHJpcGxlWzFdLCB0cmlwbGVbMl0pCisKKyAgICBAc3RhdGljbWV0 aG9kCisgICAgZGVmIGV4cGxvcmVfZXhwcihleHByLCB2YWx1ZSwgaXNfY2hp bGQpOgorICAgICAgICAiIiJGdW5jdGlvbiB0byBleHBsb3JlIHN0cnVjdHMv Y2xhc3NlcyBhbmQgdW5pb24gdmFsdWVzLgorICAgICAgICBTZWUgRXhwbG9y ZXIuZXhwbG9yZV9leHByIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAg ICAiIiIKKyAgICAgICAgdHlwZV9jb2RlID0gdmFsdWUudHlwZS5jb2RlCisg ICAgICAgIGlmIHR5cGVfY29kZSA9PSBnZGIuVFlQRV9DT0RFX1NUUlVDVDoK KyAgICAgICAgICAgIHByaW50ICgiXG4nJXMnIGlzIGEgc3RydWN0L2NsYXNz IG9mIHR5cGUgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgIndpdGggdGhl IGZvbGxvd2luZyBmaWVsZHM6XG4iICUKKyAgICAgICAgICAgICAgICAgICAo ZXhwciwgc3RyKHZhbHVlLnR5cGUpKSkKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIHByaW50ICgiXG4nJXMnIGlzIGEgdW5pb24gb2YgdHlwZSAnJXMn IHdpdGggdGhlIGZvbGxvd2luZyAiCisgICAgICAgICAgICAgICAgICAgImZp ZWxkczpcbiIgJQorICAgICAgICAgICAgICAgICAgIChleHByLCBzdHIodmFs dWUudHlwZSkpKQorCisgICAgICAgIGZpZWxkcyA9IHZhbHVlLnR5cGUuZmll bGRzKCkKKyAgICAgICAgaGFzX2V4cGxvcmFibGVfZmllbGRzID0gRmFsc2UK KyAgICAgICAgY3VycmVudF9jaG9pY2UgPSAwCisgICAgICAgIGNob2ljZV90 b19jb21wb3VuZF9maWVsZF9tYXAgPSB7IH0KKyAgICAgICAgcHJpbnRfbGlz dCA9IFsgXQorICAgICAgICBmb3IgZmllbGQgaW4gZmllbGRzOgorICAgICAg ICAgICAgZmllbGRfZnVsbF9uYW1lID0gZXhwciArICIuIiArIGZpZWxkLm5h bWUKKyAgICAgICAgICAgIGZpZWxkX3ZhbHVlID0gdmFsdWVbZmllbGQubmFt ZV0KKyAgICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSAiIgorICAgICAgICAg ICAgaXNfY29tcG91bmRfZmllbGQgPSBGYWxzZQorICAgICAgICAgICAgaWYg dHlwZV9jb2RlID09IGdkYi5UWVBFX0NPREVfVU5JT046CisgICAgICAgICAg ICAgICAgbGl0ZXJhbF92YWx1ZSA9ICgiPEVudGVyICVzIHRvIGV4cGxvcmUg dGhpcyBmaWVsZD4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cihjdXJyZW50X2Nob2ljZSkpCisgICAgICAgICAgICAgICAgaXNf Y29tcG91bmRfZmllbGQgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAg ICAgICAgICAgICAgIGlmIEV4cGxvcmVyLmlzX3NjYWxhcl90eXBlKGZpZWxk LnR5cGUpOgorICAgICAgICAgICAgICAgICAgICBsaXRlcmFsX3ZhbHVlID0g c3RyKGZpZWxkX3ZhbHVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSAoIjxFbnRlciAlcyB0 byBleHBsb3JlIHRoaXMgZmllbGQ+IiAlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RyKGN1cnJlbnRfY2hvaWNlKSkKKyAgICAg ICAgICAgICAgICAgICAgaXNfY29tcG91bmRfZmllbGQgPSBUcnVlCisKKyAg ICAgICAgICAgIGlmIGlzX2NvbXBvdW5kX2ZpZWxkOgorICAgICAgICAgICAg ICAgIGNob2ljZV90b19jb21wb3VuZF9maWVsZF9tYXBbc3RyKGN1cnJlbnRf Y2hvaWNlKV0gPSAoCisgICAgICAgICAgICAgICAgICAgIGZpZWxkX2Z1bGxf bmFtZSwgZmllbGRfdmFsdWUpCisgICAgICAgICAgICAgICAgY3VycmVudF9j aG9pY2UgPSBjdXJyZW50X2Nob2ljZSArIDEKKworICAgICAgICAgICAgcHJp bnRfbGlzdC5hcHBlbmQoKHN0cihmaWVsZC50eXBlKSwgZmllbGQubmFtZSwg bGl0ZXJhbF92YWx1ZSkpCisKKyAgICAgICAgQ29tcG91bmRFeHBsb3Jlci5f cHJpbnRfZmllbGRzKHByaW50X2xpc3QsIENvbXBvdW5kRXhwbG9yZXIuX1ZB TFVFUykKKyAgICAgICAgcHJpbnQgIiIKKworICAgICAgICBpZiBsZW4oY2hv aWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcCkgPiAwOgorICAgICAgICAgICAg Y2hvaWNlID0gcmF3X2lucHV0KCJFbnRlciB0aGUgbnVtYmVyIG9mIHRoZSBm aWVsZCB5b3UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3 YW50IHRvIGV4cGxvcmUgaW4gJyVzJzogIiAlIGV4cHIpCisgICAgICAgICAg ICBpZiBjaG9pY2UgaW4gY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcDoK KyAgICAgICAgICAgICAgICBFeHBsb3Jlci5leHBsb3JlX2V4cHIoY2hvaWNl X3RvX2NvbXBvdW5kX2ZpZWxkX21hcFtjaG9pY2VdWzBdLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VfdG9fY29tcG91 bmRfZmllbGRfbWFwW2Nob2ljZV1bMV0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgICAgICAgICAgcmV0 dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg aWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIEV4cGxvcmVyLnJl dHVybmluZ190b19wYXJlbnRfdmFsdWVfbWVzc2FnZSgpCisgICAgICAgIGVs c2U6CisgICAgICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAgICAg ICBFeHBsb3Jlci5yZXR1cm5fdG9fcGFyZW50X3ZhbHVlX3Byb21wdCgpCisK KyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3RhdGljbWV0aG9kCisg ICAgZGVmIGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlwZSwgaXNfY2hpbGQp OgorICAgICAgICAiIiJGdW5jdGlvbiB0byBleHBsb3JlIHN0cnVjdC9jbGFz cyBhbmQgdW5pb24gdHlwZXMuCisgICAgICAgIFNlZSBFeHBsb3Jlci5leHBs b3JlX3R5cGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgor ICAgICAgICB0eXBlX2NvZGUgPSBkYXRhdHlwZS5jb2RlCisgICAgICAgIGlm IHR5cGVfY29kZSA9PSBnZGIuVFlQRV9DT0RFX1NUUlVDVDoKKyAgICAgICAg ICAgIGlmIGlzX2NoaWxkOgorICAgICAgICAgICAgICAgIHByaW50ICgiXG4l cyBpcyBhIHN0cnVjdC9jbGFzcyBvZiB0eXBlICclcycgIgorICAgICAgICAg ICAgICAgICAgICAgICAid2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczpcbiIg JQorICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgc3RyKGRhdGF0eXBl KSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50 ICgiXG4lcyBpcyBhIHN0cnVjdC9jbGFzcyB3aXRoIHRoZSBmb2xsb3dpbmcg IgorICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRzOlxuIiAlCisgICAg ICAgICAgICAgICAgICAgICAgIG5hbWUpCisgICAgICAgIGVsc2U6CisgICAg ICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAgICAgICBwcmludCAo IlxuJXMgaXMgYSB1bmlvbiBvZiB0eXBlICclcycgIgorICAgICAgICAgICAg ICAgICAgICAgICAid2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczpcbiIgJQor ICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgc3RyKGRhdGF0eXBlKSkp CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgi XG4lcyBpcyBhIHVuaW9uIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6XG4i ICUKKyAgICAgICAgICAgICAgICAgICAgICAgbmFtZSkKKworICAgICAgICBm aWVsZHMgPSBkYXRhdHlwZS5maWVsZHMoKQorICAgICAgICBoYXNfZXhwbG9y YWJsZV9maWVsZHMgPSBGYWxzZQorICAgICAgICBjdXJyZW50X2Nob2ljZSA9 IDAKKyAgICAgICAgY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcCA9IHsg fQorICAgICAgICBwcmludF9saXN0ID0gWyBdCisgICAgICAgIGZvciBmaWVs ZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBpZiBFeHBsb3Jlci5pc19zY2Fs YXJfdHlwZShmaWVsZC50eXBlKToKKyAgICAgICAgICAgICAgICBwcmludF9s aXN0LmFwcGVuZCgoc3RyKGZpZWxkLnR5cGUpLCBmaWVsZC5uYW1lLCAiU2Nh bGFyIFZhbHVlIikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg ICAgIHByaW50X2xpc3QuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAo c3RyKGZpZWxkLnR5cGUpLAorICAgICAgICAgICAgICAgICAgICAgZmllbGQu bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICI8RW50ZXIgJWQgdG8gZXhw bG9yZSB0aGlzIGZpZWxkPiIgJSBjdXJyZW50X2Nob2ljZSkpCisgICAgICAg ICAgICAgICAgY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcFtzdHIoY3Vy cmVudF9jaG9pY2UpXSA9ICgKKyAgICAgICAgICAgICAgICAgICAgZmllbGQu bmFtZSwgZmllbGQudHlwZSkKKyAgICAgICAgICAgICAgICBjdXJyZW50X2No b2ljZSA9IGN1cnJlbnRfY2hvaWNlICsgMQorCisgICAgICAgIENvbXBvdW5k RXhwbG9yZXIuX3ByaW50X2ZpZWxkcyhwcmludF9saXN0LCBDb21wb3VuZEV4 cGxvcmVyLl9UWVBFUykKKyAgICAgICAgcHJpbnQgIiIKKworICAgICAgICBp ZiBsZW4oY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcCkgPiAwOgorICAg ICAgICAgICAgY2hvaWNlID0gcmF3X2lucHV0KCJFbnRlciB0aGUgbnVtYmVy IG9mIHRoZSBmaWVsZCB5b3Ugd2FudCB0byAiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImV4cGxvcmUgOiAiKQorICAgICAgICAgICAgaWYg Y2hvaWNlIGluIGNob2ljZV90b19jb21wb3VuZF9maWVsZF9tYXA6CisgICAg ICAgICAgICAgICAgRXhwbG9yZXIuZXhwbG9yZV90eXBlKAorICAgICAgICAg ICAgICAgICAgICAoImZpZWxkICclcycgb2YgJyVzJyIgJQorICAgICAgICAg ICAgICAgICAgICAgKGNob2ljZV90b19jb21wb3VuZF9maWVsZF9tYXBbY2hv aWNlXVswXSwgbmFtZSkpLAorICAgICAgICAgICAgICAgICAgICBjaG9pY2Vf dG9fY29tcG91bmRfZmllbGRfbWFwW2Nob2ljZV1bMV0sCisgICAgICAgICAg ICAgICAgICAgIFRydWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUK KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNfY2hp bGQ6CisgICAgICAgICAgICAgICAgICAgIEV4cGxvcmVyLnJldHVybmluZ190 b19lbmNsb3NpbmdfdHlwZV9tZXNzYWdlKCkKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIGlmIGlzX2NoaWxkOgorICAgICAgICAgICAgICAgIEV4cGxv cmVyLnJldHVybl90b19lbmNsb3NpbmdfdHlwZV9wcm9tcHQoKQorCisgICAg ICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgCisKK2NsYXNzIFR5cGVk ZWZFeHBsb3JlcihvYmplY3QpOgorICAgICIiIkludGVybmFsIGNsYXNzIHVz ZWQgdG8gZXhwbG9yZSB2YWx1ZXMgd2hvc2UgdHlwZSBpcyBhIHR5cGVkZWYu IiIiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4cGxvcmVfZXhw cihleHByLCB2YWx1ZSwgaXNfY2hpbGQpOgorICAgICAgICAiIiJGdW5jdGlv biB0byBleHBsb3JlIHR5cGVkZWYgdmFsdWVzLgorICAgICAgICBTZWUgRXhw bG9yZXIuZXhwbG9yZV9leHByIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAg ICAgICAiIiIKKyAgICAgICAgYWN0dWFsX3R5cGUgPSB2YWx1ZS50eXBlLnN0 cmlwX3R5cGVkZWZzKCkKKyAgICAgICAgcHJpbnQgKCJcbiclcycgaXMgYSB2 YWx1ZSBvZiB0eXBlICclcycgIgorICAgICAgICAgICAgICAgIndoaWNoIGlz IGEgdHlwZWRlZiBvZiB0eXBlICclcyciICUKKyAgICAgICAgICAgICAgIChl eHByLCBzdHIodmFsdWUudHlwZSksIHN0cihhY3R1YWxfdHlwZSkpKQorCisg ICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfZXhwcihleHByLCB2YWx1ZS5jYXN0 KGFjdHVhbF90eXBlKSwgaXNfY2hpbGQpCisgICAgICAgIHJldHVybiBGYWxz ZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHBsb3JlX3R5cGUo bmFtZSwgZGF0YXR5cGUsIGlzX2NoaWxkKToKKyAgICAgICAgIiIiRnVuY3Rp b24gdG8gZXhwbG9yZSB0eXBlZGVmIHR5cGVzLgorICAgICAgICBTZWUgRXhw bG9yZXIuZXhwbG9yZV90eXBlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAg ICAgICAiIiIKKyAgICAgICAgYWN0dWFsX3R5cGUgPSBkYXRhdHlwZS5zdHJp cF90eXBlZGVmcygpCisgICAgICAgIHByaW50KCJcbiVzIGlzIG9mIGEgdHlw ZSB3aGljaCBpcyBhIHR5cGVkZWYgb2YgdHlwZSAnJXMnLiIgJQorICAgICAg ICAgICAgICAobmFtZSwgc3RyKGFjdHVhbF90eXBlKSkpCisgICAgICAgIEV4 cGxvcmVyLmV4cGxvcmVfdHlwZShuYW1lLCBhY3R1YWxfdHlwZSwgaXNfY2hp bGQpCisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIEV4cGxvcmVV dGlscyhvYmplY3QpOgorICAgICIiIkludGVybmFsIGNsYXNzIHdoaWNoIHBy b3ZpZGVzIHV0aWxpdGllcyBmb3IgdGhlIG1haW4gY29tbWFuZCBjbGFzc2Vz LiIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjaGVja19hcmdz KG5hbWUsIGFyZ19zdHIpOgorICAgICAgICAiIiJVdGlsaXR5IHRvIGNoZWNr IGlmIGFkZXF1YXRlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0 byBhbgorICAgICAgICBleHBsb3JlIGNvbW1hbmQuCisKKyAgICAgICAgQXJn dW1lbnRzOgorICAgICAgICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIGV4 cGxvcmUgY29tbWFuZC4KKyAgICAgICAgICAgIGFyZ19zdHI6IFRoZSBhcmd1 bWVudCBzdHJpbmcgcGFzc2VkIHRvIHRoZSBleHBsb3JlIGNvbW1hbmQuCisK KyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWUgaWYgYWRlcXVh dGUgYXJndW1lbnRzIGFyZSBwYXNzZWQsIGZhbHNlIG90aGVyd2lzZS4KKwor ICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBnZGIuR2RiRXJyb3IgaWYg YWRlcXVhdGUgYXJndW1lbnRzIGFyZSBub3QgcGFzc2VkLgorICAgICAgICAi IiIKKyAgICAgICAgaWYgbGVuKGFyZ19zdHIpIDwgMToKKyAgICAgICAgICAg IHJhaXNlIGdkYi5HZGJFcnJvcigiRVJST1I6ICclcycgY29tbWFuZCByZXF1 aXJlcyBhbiBhcmd1bWVudC4iCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJSBuYW1lKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg ICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgQHN0 YXRpY21ldGhvZAorICAgIGRlZiBnZXRfdHlwZV9mcm9tX3N0cih0eXBlX3N0 cik6CisgICAgICAgICIiIkEgdXRpbGl0eSBmdW5jdGlvbiB0byBkZWR1Y2Ug dGhlIGdkYi5UeXBlIHZhbHVlIGZyb20gYSBzdHJpbmcKKyAgICAgICAgcmVw cmVzZW50aW5nIHRoZSB0eXBlLgorCisgICAgICAgIEFyZ3VtZW50czoKKyAg ICAgICAgICAgIHR5cGVfc3RyOiBUaGUgdHlwZSBzdHJpbmcgZnJvbSB3aGlj aCB0aGUgZ2RiLlR5cGUgdmFsdWUgc2hvdWxkIGJlCisgICAgICAgICAgICAg ICAgICAgICAgZGVkdWNlZC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAg ICAgICAgVGhlIGRlZHVjZWQgZ2RiLlR5cGUgdmFsdWUgaWYgcG9zc2libGUs IE5vbmUgb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5Ogor ICAgICAgICAgICAgIyBBc3N1bWUgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgdG8g YmUgQy9DKysgYW5kIG1ha2UgYSB0cnkuCisgICAgICAgICAgICByZXR1cm4g Z2RiLnBhcnNlX2FuZF9ldmFsKCIoJXMgKikwIiAlIHR5cGVfc3RyKS50eXBl LnRhcmdldCgpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAg ICAgICAgICAjIElmIGFzc3VtcHRpb24gb2YgY3VycmVudCBsYW5ndWFnZSB0 byBiZSBDL0MrKyB3YXMgd3JvbmcsIHRoZW4KKyAgICAgICAgICAgICMgbG9v a3VwIHRoZSB0eXBlIHVzaW5nIHRoZSBBUEkuCisgICAgICAgICAgICB0cnk6 CisgICAgICAgICAgICAgICAgcmV0dXJuIGdkYi5sb29rdXBfdHlwZSh0eXBl X3N0cikKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAg ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QK KyAgICBkZWYgZ2V0X3ZhbHVlX2Zyb21fc3RyKHZhbHVlX3N0cik6CisgICAg ICAgICIiIkEgdXRpbGl0eSBmdW5jdGlvbiB0byBkZWR1Y2UgdGhlIGdkYi5W YWx1ZSB2YWx1ZSBmcm9tIGEgc3RyaW5nCisgICAgICAgIHJlcHJlc2VudGlu ZyB0aGUgdmFsdWUuCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAg ICAgdmFsdWVfc3RyOiBUaGUgdmFsdWUgc3RyaW5nIGZyb20gd2hpY2ggdGhl IGdkYi5WYWx1ZSB2YWx1ZSBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAg ICAgICAgZGVkdWNlZC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAg ICAgVGhlIGRlZHVjZWQgZ2RiLlZhbHVlIHZhbHVlIGlmIHBvc3NpYmxlLCBO b25lIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAg ICAgICAgICAgIHJldHVybiBnZGIucGFyc2VfYW5kX2V2YWwodmFsdWVfc3Ry KQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAg cmV0dXJuIE5vbmUKKworCitjbGFzcyBFeHBsb3JlQ29tbWFuZChnZGIuQ29t bWFuZCk6CisgICAgIiIiR0RCIGNvbW1hbmQgdG8gZXhwbG9yZSBleHByZXNz aW9uIHZhbHVlcyBhbmQgdHlwZXMgdG9wIGRvd24uCisKKyAgICBVc2FnZTog ZXhwbG9yZSBBUkcKKworICAgIEFSRyBpcyBlaXRoZXIgYW4gZXhwcmVzc2lv biBvciBhIHR5cGUgdmlzaWJsZSBpbiB0aGUgY3VycmVudCBzY29wZS4gCisK KyAgICBJZiBBUkcgaXMgYW4gZXhwcmVzc2lvbiB3aGljaCBldmFsdWF0ZXMg dG8gYSBzY2FsYXIgdmFsdWUgb3Igc3RydWN0L2NsYXNzCisgICAgd2l0aCBv bmx5IHNjYWxhciBmaWVsZHMsIHRoZW4gdGhlIHZhbHVlIGlzIHByaW50ZWQu IElmIGl0IGV2YWx1YXRlcyB0byBhCisgICAgdW5pb24sIG9yIGlmIGl0IGlz IGEgY2xhc3Mvc3RydWN0IHdpdGggY2xhc3Mvc3RydWN0IGZpZWxkcywgb3Ig aWYgaXMgYXMKKyAgICBhcnJheSwgdGhlIHVzZXIgY2FuIGludGVyYWN0aXZl bHkgZXhwbG9yZSB0aGUgdmFsdWUuIEV4cGxvcmF0aW9uIGhlcmUgbWVhbnMK KyAgICB0byBvYnNlcnZlLCBzdGFydGluZyBmcm9tIHRoZSBmaWVsZHMvZWxl bWVudHMgb2YgdGhlIFZBTFVFLCByaWdodCBkb3duIHRvCisgICAgdGhlIGxl YWYgc2NhbGFyIHZhbHVlcyBlbWJlZGRlZCBpbiB0aGVzZSBmaWVsZHMuCisK KyAgICBJZiBBUkcgaXMgYSB0eXBlIHZpc2libGUgaW4gdGhlIGN1cnJlbnQg c2NvcGUsIHRoZW4gdGhlIHVzZXIgY2FuIGV4cGxvcmUKKyAgICB0aGUgdHlw ZSB0b3AgZG93bi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm KToKKyAgICAgICAgc3VwZXIoRXhwbG9yZUNvbW1hbmQsIHNlbGYpLl9faW5p dF9fKG5hbWUgPSAiZXhwbG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2NsYXNzID0gZ2RiLkNP TU1BTkRfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHByZWZpeCA9IFRydWUpCisKKyAgICBkZWYgaW52b2tl KHNlbGYsIGFyZ19zdHIsIGZyb21fdHR5KToKKyAgICAgICAgaWYgRXhwbG9y ZVV0aWxzLmNoZWNrX2FyZ3MoImV4cGxvcmUiLCBhcmdfc3RyKSA9PSBGYWxz ZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQ2hlY2sgaWYg aXQgaXMgYSB2YWx1ZQorICAgICAgICB2YWx1ZSA9IEV4cGxvcmVVdGlscy5n ZXRfdmFsdWVfZnJvbV9zdHIoYXJnX3N0cikKKyAgICAgICAgaWYgdmFsdWUg aXMgbm90IE5vbmU6CisgICAgICAgICAgICBFeHBsb3Jlci5leHBsb3JlX2V4 cHIoYXJnX3N0ciwgdmFsdWUsIEZhbHNlKQorICAgICAgICAgICAgcmV0dXJu CisKKyAgICAgICAgIyBJZiBpdCBpcyBub3QgYSB2YWx1ZSwgY2hlY2sgaWYg aXQgaXMgYSB0eXBlCisgICAgICAgIGRhdGF0eXBlID0gRXhwbG9yZVV0aWxz LmdldF90eXBlX2Zyb21fc3RyKGFyZ19zdHIpCisgICAgICAgIGlmIGRhdGF0 eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgRXhwbG9yZXIuZXhwbG9y ZV90eXBlKGFyZ19zdHIsIGRhdGF0eXBlLCBGYWxzZSkKKyAgICAgICAgICAg IHJldHVybgorCisgICAgICAgICMgSWYgaXQgaXMgbmVpdGhlciBhIHZhbHVl IG5vciBhIHR5cGUsIHJhaXNlIGFuIGVycm9yLgorICAgICAgICByYWlzZSBn ZGIuR2RiRXJyb3IoCisgICAgICAgICAgICAoIiclcycgbmVpdGhlciBldmFs dWF0ZXMgdG8gYSB2YWx1ZSBub3IgaXMgYSB0eXBlICIKKyAgICAgICAgICAg ICAiaW4gdGhlIGN1cnJlbnQgY29udGV4dC4iICUKKyAgICAgICAgICAgICBh cmdfc3RyKSkKKworCitjbGFzcyBFeHBsb3JlVmFsdWVDb21tYW5kKGdkYi5D b21tYW5kKToKKyAgICAiIiJHREIgY29tbWFuZCB0byBleHBsb3JlIGV4cHJl c3Npb24gdmFsdWVzIHRvcCBkb3duLgorCisgICAgVXNhZ2U6IGV4cGxvcmUg dmFsdWUgQVJHCisKKyAgICBBUkcgaXMgYW4gZXhwcmVzc2lvbiB2aXNpYmxl IGluIHRoZSBjdXJyZW50IHNjb3BlLiAKKworICAgIElmIEFSRyBpcyBhbiBl eHByZXNzaW9uIHdoaWNoIGV2YWx1YXRlcyB0byBhIHNjYWxhciB2YWx1ZSBv ciBzdHJ1Y3QvY2xhc3MKKyAgICB3aXRoIG9ubHkgc2NhbGFyIGZpZWxkcywg dGhlbiB0aGUgdmFsdWUgaXMgcHJpbnRlZC4gSWYgaXQgZXZhbHVhdGVzIHRv IGEKKyAgICB1bmlvbiwgb3IgaWYgaXQgaXMgYSBjbGFzcy9zdHJ1Y3Qgd2l0 aCBjbGFzcy9zdHJ1Y3QgZmllbGRzLCBvciBpZiBpcyBhcworICAgIGFycmF5 LCB0aGUgdXNlciBjYW4gaW50ZXJhY3RpdmVseSBleHBsb3JlIHRoZSB2YWx1 ZS4gRXhwbG9yYXRpb24gaGVyZSBtZWFucworICAgIHRvIG9ic2VydmUsIHN0 YXJ0aW5nIGZyb20gdGhlIGZpZWxkcy9lbGVtZW50cyBvZiB0aGUgVkFMVUUs IHJpZ2h0IGRvd24gdG8KKyAgICB0aGUgbGVhZiBzY2FsYXIgdmFsdWVzIGVt YmVkZGVkIGluIHRoZXNlIGZpZWxkcy4KKyAgICAiIiIKKyAKKyAgICBkZWYg X19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKEV4cGxvcmVWYWx1ZUNv bW1hbmQsIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgbmFtZSA9ICJl eHBsb3JlIHZhbHVlIiwgY29tbWFuZF9jbGFzcyA9IGdkYi5DT01NQU5EX0RB VEEpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ19zdHIsIGZyb21fdHR5 KToKKyAgICAgICAgaWYgRXhwbG9yZVV0aWxzLmNoZWNrX2FyZ3MoImV4cGxv cmUgdmFsdWUiLCBhcmdfc3RyKSA9PSBGYWxzZToKKyAgICAgICAgICAgIHJl dHVybgorCisgICAgICAgIHZhbHVlID0gRXhwbG9yZVV0aWxzLmdldF92YWx1 ZV9mcm9tX3N0cihhcmdfc3RyKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25l OgorICAgICAgICAgICAgcmFpc2UgZ2RiLkdkYkVycm9yKAorICAgICAgICAg ICAgICAgICgiICclcycgZG9lcyBub3QgZXZhbHVhdGUgdG8gYSB2YWx1ZSBp biB0aGUgY3VycmVudCAiCisgICAgICAgICAgICAgICAgICJjb250ZXh0LiIg JQorICAgICAgICAgICAgICAgICBhcmdfc3RyKSkKKyAgICAgICAgICAgIHJl dHVybgorCisgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfZXhwcihhcmdfc3Ry LCB2YWx1ZSwgRmFsc2UpCisKKworY2xhc3MgRXhwbG9yZVR5cGVDb21tYW5k KGdkYi5Db21tYW5kKTogICAgICAgICAgICAKKyAgICAiIiJHREIgY29tbWFu ZCB0byBleHBsb3JlIHR5cGVzIHRvcCBkb3duLgorCisgICAgVXNhZ2U6IGV4 cGxvcmUgdHlwZSBBUkcKKworICAgIEFSRyBpcyBhIHR5cGUgdmlzaWJsZSBp biB0aGUgY3VycmVudCBzY29wZS4gCisKKyAgICBJZiBBUkcgaXMgYSB0eXBl IHZpc2libGUgaW4gdGhlIGN1cnJlbnQgc2NvcGUsIHRoZW4gdGhlIHVzZXIg Y2FuIGV4cGxvcmUKKyAgICB0aGUgdHlwZSB0b3AgZG93bi4KKyAgICAiIiIK KworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoRXhw bG9yZVR5cGVDb21tYW5kLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAg IG5hbWUgPSAiZXhwbG9yZSB0eXBlIiwgY29tbWFuZF9jbGFzcyA9IGdkYi5D T01NQU5EX0RBVEEpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ19zdHIs IGZyb21fdHR5KToKKyAgICAgICAgaWYgRXhwbG9yZVV0aWxzLmNoZWNrX2Fy Z3MoImV4cGxvcmUgdHlwZSIsIGFyZ19zdHIpID09IEZhbHNlOgorICAgICAg ICAgICAgcmV0dXJuCisKKyAgICAgICAgZGF0YXR5cGUgPSBFeHBsb3JlVXRp bHMuZ2V0X3R5cGVfZnJvbV9zdHIoYXJnX3N0cikKKyAgICAgICAgaWYgZGF0 YXR5cGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIGdkYi5HZGJFcnJv cigKKyAgICAgICAgICAgICAgICAoIiclcycgaXMgbm90IGEgdHlwZSBpbiB0 aGUgY3VycmVudCBjb250ZXh0LiIgJQorICAgICAgICAgICAgICAgICBhcmdf c3RyKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIEV4cGxvcmVy LmV4cGxvcmVfdHlwZShhcmdfc3RyLCBkYXRhdHlwZSwgRmFsc2UpCisKKwor RXhwbG9yZXIuaW5pdF9lbnYoKQorCitFeHBsb3JlQ29tbWFuZCgpCitFeHBs b3JlVmFsdWVDb21tYW5kKCkKK0V4cGxvcmVUeXBlQ29tbWFuZCgpCmRpZmYg LXJ1cE4gc3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9NYWtlZmlsZS5p biBzcmNfbG9jYWwvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL01ha2VmaWxl LmluCi0tLSBzcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL01ha2VmaWxl LmluCTIwMTEtMDUtMTYgMTk6MjY6NDAuMDAwMDAwMDAwICswNTMwCisrKyBz cmNfbG9jYWwvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL01ha2VmaWxlLmlu CTIwMTEtMTEtMTIgMTE6NDg6NDQuODcyNTU4OTEyICswNTMwCkBAIC00LDcg KzQsOCBAQCBzcmNkaXIgPSBAc3JjZGlyQAogRVhFQ1VUQUJMRVMgPSBweS10 eXBlIHB5LXZhbHVlIHB5LXByZXR0eXByaW50IHB5LXRlbXBsYXRlIHB5LWJs b2NrIFwKIAlweS1zeW1ib2wgcHktbWkgcHktYnJlYWtwb2ludCBweS1pbmZl cmlvciBweS1pbmZ0aHJlYWQgXAogCXB5LXNoYXJlZCBweXRob24gbGliLXR5 cGVzIHB5LWV2ZW50cyBweS1ldnRocmVhZHMgcHktZnJhbWUgXAotCXB5LW1p IHB5LXBwLW1haW50IHB5LXByb2dzcGFjZSBweS1zZWN0aW9uLXNjcmlwdCBw eS1vYmpmaWxlCisJcHktbWkgcHktcHAtbWFpbnQgcHktcHJvZ3NwYWNlIHB5 LXNlY3Rpb24tc2NyaXB0IHB5LW9iamZpbGUgXAorCXB5LWV4cGxvcmUKIAog TUlTQ0VMTEFORU9VUyA9IHB5LXNoYXJlZC1zbC5zbAogCmRpZmYgLXJ1cE4g c3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1leHBsb3JlLmMgc3Jj X2xvY2FsL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1leHBsb3JlLmMK LS0tIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZXhwbG9yZS5j CTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBzcmNf bG9jYWwvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWV4cGxvcmUuYwky MDExLTEyLTI1IDIzOjQ2OjE0LjY0MTkyNzM2MyArMDUzMApAQCAtMCwwICsx LDgzIEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUg R05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKyovCisKKyNkZWZpbmUgQVJSQVlfU0laRSAxMAorCitzdHJ1Y3QgU2lt cGxlU3RydWN0Cit7CisgIGludCBhOworICBkb3VibGUgZDsKK307CisKK3Vu aW9uIFNpbXBsZVVuaW9uCit7CisgIGludCBpOworICBjaGFyIGM7CisgIGZs b2F0IGY7CisgIGRvdWJsZSBkOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgU2lt cGxlU3RydWN0IFNTOworCitzdHJ1Y3QgQ29tcGxleFN0cnVjdAoreworICBz dHJ1Y3QgU2ltcGxlU3RydWN0IHM7CisgIHVuaW9uIFNpbXBsZVVuaW9uIHU7 CisgIFNTIHNhW0FSUkFZX1NJWkVdOworfTsKKwordW5pb24gQ29tcGxleFVu aW9uCit7CisgIFNTIHM7CisgIHN0cnVjdCBTaW1wbGVTdHJ1Y3Qgc2FbQVJS QVlfU0laRV07Cit9OworCitpbnQKK21haW4gKHZvaWQpCit7CisgIGludCog aW52YWxpZF9wdHIgPSAoaW50ICopMTA7CisgIHN0cnVjdCBTaW1wbGVTdHJ1 Y3Qgc3M7CisgIHN0cnVjdCBTaW1wbGVTdHJ1Y3QqIHNzX3B0ciA9ICZzczsK KyAgU1Mgc3NfdDsKKworICB1bmlvbiBTaW1wbGVVbmlvbiBzdTsKKyAgc3Ry dWN0IENvbXBsZXhTdHJ1Y3QgY3M7CisgIHN0cnVjdCBDb21wbGV4U3RydWN0 KiBjc19wdHIgPSAmY3M7CisgIHVuaW9uIENvbXBsZXhVbmlvbiBjdTsKKyAg aW50IGk7CisgIGRvdWJsZSBkYXJyYXlbNV0gPSB7MC4xLCAwLjIsIDAuMywg MC40LCAwLjV9OworICBkb3VibGUgKmRhcnJheV9yZWYgPSBkYXJyYXk7CisK KyAgc3MuYSA9IDEwOworICBzcy5kID0gMTAwLjAxOworICBzc190ID0gc3M7 CisgIAorICBzdS5kID0gMTAwLjE7CisKKyAgY3MucyA9IHNzOworICBjcy51 ID0gc3U7CisgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFOyBpKyspCisg ICAgeworICAgICAgY3Muc2FbaV0uYSA9IGk7CisgICAgICBjcy5zYVtpXS5k ID0gMTAuMTAgKyBpOworICAgICAgY3Uuc2FbaV0uYSA9IGk7CisgICAgICBj dS5zYVtpXS5kID0gMTAwLjEwICsgaTsKKyAgICB9CisKKyAgcmV0dXJuIDA7 IC8qIEJyZWFrIGhlcmUuICovCit9CmRpZmYgLXJ1cE4gc3JjL2dkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1leHBsb3JlLmV4cCBzcmNfbG9jYWwvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWV4cGxvcmUuZXhwCi0tLSBzcmMv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWV4cGxvcmUuZXhwCTE5NzAt MDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBzcmNfbG9jYWwv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWV4cGxvcmUuZXhwCTIwMTEt MTItMjcgMDE6MjE6NTAuMzAyNDg3NDMxICswNTMwCkBAIC0wLDAgKzEsMzU4 IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIwor IyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUg aXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHRoZSBj b21tYW5kICdleHBsb3JlJworIyB3aGljaCBpcyBpbXBsZW1lbnRlZCB1c2lu ZyB0aGUgR0RCLVB5dGhvbiBBUEkuCisKK2xvYWRfbGliIGdkYi1weXRob24u ZXhwCisKK3NldCB0ZXN0ZmlsZSAicHktZXhwbG9yZSIKK3NldCBzcmNmaWxl ICR7dGVzdGZpbGV9LmMKK3NldCBiaW5maWxlICR7b2JqZGlyfS8ke3N1YmRp cn0vJHt0ZXN0ZmlsZX0KK2lmIHsgW3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHt0 ZXN0ZmlsZX0uZXhwICR7dGVzdGZpbGV9ICR7c3JjZmlsZX1dIH0geworICAg IHJldHVybiAtMQorfQorCisjIFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBz Y3JpcHRpbmcgaXMgbm90IGVuYWJsZWQuCitpZiB7IFtza2lwX3B5dGhvbl90 ZXN0c10gfSB7IGNvbnRpbnVlIH0KKworc2V0IFNTICJzdHJ1Y3QgU2ltcGxl U3RydWN0Igorc2V0IFNVICJ1bmlvbiBTaW1wbGVVbmlvbiIKK3NldCBDUyAi c3RydWN0IENvbXBsZXhTdHJ1Y3QiCitzZXQgQ1UgInVuaW9uIENvbXBsZXhV bmlvbiIKK3NldCByZXR1cm5fdG9fcGFyZW50X3Byb21wdCB7UHJlc3MgZW50 ZXIgdG8gcmV0dXJuIHRvIHBhcmVudCB2YWx1ZS4uLn0KK3NldCBhcnJheV9p bmRleF9wcm9tcHQge0VudGVyIHRoZSBpbmRleCB0byBleHBsb3JlOiB9CisK K3Byb2MgZW50ZXJfZmllbGRfbnVtYmVyX3Byb21wdCB7IHZhbHVlX25hbWUg fSB7CisgICAgcmV0dXJuICJFbnRlciB0aGUgbnVtYmVyIG9mIHRoZSBmaWVs ZCB5b3Ugd2FudCB0byBleHBsb3JlIGluICckdmFsdWVfbmFtZSc6ICIKK30K KworcHJvYyBjb21wb3VuZF9kZXNjcmlwdGlvbiB7IHZhbHVlX25hbWUgdHlw ZV9raW5kIHR5cGVfbmFtZSB9IHsKKyAgICByZXR1cm4gIickdmFsdWVfbmFt ZScgaXMgYSAkdHlwZV9raW5kIG9mIHR5cGUgJyR0eXBlX25hbWUnIHdpdGgg dGhlIGZvbGxvd2luZyBmaWVsZHM6XFtcclxuXF0rIgorfQorCitwcm9jIHR5 cGVkZWZfZGVzY3JpcHRpb24geyB2YWx1ZV9uYW1lIHR5cGVkZWZfbmFtZSB0 eXBlX25hbWUgfSB7CisgICAgcmV0dXJuICInJHZhbHVlX25hbWUnIGlzIGEg dmFsdWUgb2YgdHlwZSAnJHR5cGVkZWZfbmFtZScgd2hpY2ggaXMgYSB0eXBl ZGVmIG9mIHR5cGUgJyR0eXBlX25hbWUnXFtcclxuXF0rIgorfQorCitwcm9j IHNjYWxhcl9kZXNjcmlwdGlvbiB7IHZhbHVlX25hbWUgdHlwZSB9IHsKKyAg ICByZXR1cm4gIickdmFsdWVfbmFtZScgaXMgYSBzY2FsYXIgdmFsdWUgb2Yg dHlwZSAnJHR5cGUnXC5cW1xyXG5cXSsiCit9CisKK3Byb2MgYXJyYXlfZGVz Y3JpcHRpb24geyB2YWx1ZV9uYW1lIHR5cGUgfSB7CisgICAgcmV0dXJuICIn JHZhbHVlX25hbWUnIGlzIGFuIGFycmF5IG9mIGVsZW1lbnRzIG9mIHR5cGUg JyR0eXBlJy5cW1xyXG5cXSsiCit9CisKK3Byb2MgcG9pbnRlcl9kZXNjcmlw dGlvbiB7IHZhbHVlX25hbWUgdHlwZV9uYW1lIH0geworICAgIHNldCB0eXBl X2Rlc2NyaXB0aW9uICInJHZhbHVlX25hbWUnIGlzIGEgcG9pbnRlciB0byBh IHZhbHVlIG9mIHR5cGUgJyR0eXBlX25hbWUnXFtcclxuXF0rIgorICAgIHNl dCBwcm9tcHQgIkVudGVyICdzJyB0byBjb250aW51ZSBleHBsb3JpbmcgYXMg YSBwb2ludGVyIHRvIGEgc2luZ2xlIHZhbHVlLCAnYScgdG8gZXhwbG9yZSBh cyBhbiBhcnJheTogIiAKKyAgICByZXR1cm4gIiR0eXBlX2Rlc2NyaXB0aW9u JHByb21wdCIKK30KKworcHJvYyBmaWVsZF92YWx1ZXMgeyBhcmdzIH0gewor ICAgIHNldCByZXN1bHQgIiIKKyAgICBmb3JlYWNoIGZpZWxkICRhcmdzIHsK KyAgICAgICAgc2V0IHJlc3VsdCAiJHJlc3VsdFxbIFxdKiRmaWVsZFxbXHJc blxdKyIKKyAgICB9CisgICAgcmV0dXJuICRyZXN1bHQKK30KKworcHJvYyBm aWVsZF9jaG9pY2VzIHsgYXJncyB9IHsKKyAgICBzZXQgcmVzdWx0ICIiCisg ICAgc2V0IGZpZWxkX251bSAwCisgICAgZm9yZWFjaCBmaWVsZCAkYXJncyB7 CisgICAgICAgIHNldCByZXN1bHQgIiRyZXN1bHQkZmllbGRcWyBcXSs9XFsg XF0rPEVudGVyICRmaWVsZF9udW0gLioiCisgICAgICAgIGluY3IgZmllbGRf bnVtCisgICAgfQorICAgIHJldHVybiAkcmVzdWx0Cit9CisKK3Byb2Mgc2Nh bGFyX3ZhbHVlIHsgdmFsdWVfbmFtZSB2YWx1ZSB9IHsKKyAgICByZXR1cm4g IiR2YWx1ZV9uYW1lID0gJHZhbHVlXFtyXG5cXSsiCit9CisKK3NldCBTU19m aWVsZHMgW2ZpZWxkX3ZhbHVlcyB7aW50IGEgPSAxMH0ge2RvdWJsZSBkID0g MTAwWy5dLip9XQorCitpZiAhW3J1bnRvX21haW5dIHsKKyAgIHJldHVybiAt MQorfQorCitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAi QnJlYWsgaGVyZS4iXQorZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgIkJy ZWFrIGhlcmUiICIuKkJyZWFrIGhlcmUuKiIKKworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworIyBWYWx1ZSBleHBsb3JhdGlvbiB0ZXN0cworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworCitnZGJfdGVzdCAiZXhwbG9yZSBpIiAi W3NjYWxhcl9kZXNjcmlwdGlvbiB7aX0ge2ludH1dLippID0gLioiCitnZGJf dGVzdCAiZXhwbG9yZSBzcyIgIltjb21wb3VuZF9kZXNjcmlwdGlvbiB7c3N9 IHtzdHJ1Y3QvY2xhc3N9ICRTU10uKiRTU19maWVsZHMiCitnZGJfdGVzdCAi ZXhwbG9yZSAqc3NfcHRyIiAiW2NvbXBvdW5kX2Rlc2NyaXB0aW9uIHtcKFwq c3NfcHRyXCl9IHtzdHJ1Y3QvY2xhc3N9ICRTU10uKiRTU19maWVsZHMiCitn ZGJfdGVzdCAiZXhwbG9yZSBzc190IiAiW3R5cGVkZWZfZGVzY3JpcHRpb24g e3NzX3R9IHtTU30gJFNTXS4qW2NvbXBvdW5kX2Rlc2NyaXB0aW9uIHtzc190 fSB7c3RydWN0L2NsYXNzfSAkU1NdLiokU1NfZmllbGRzIgorCitnZGJfdGVz dF9tdWx0aXBsZSAiZXhwbG9yZSBpbnZhbGlkX3B0ciIgIiIgeworICAgIC1y ZSAiW3BvaW50ZXJfZGVzY3JpcHRpb24ge2ludmFsaWRfcHRyfSB7aW50fV0u KiIgeworICAgICAgICBwYXNzICJleHBsb3JlIGludmFsaWRfcHRyIgorICAg ICAgICBnZGJfdGVzdF9tdWx0aXBsZSAicyIgImV4cGxvcmVfaW52YWxpZF9w dHJfYXNfc2luZ2xlX3ZhbHVlX3BvaW50ZXIiIHsKKyAgICAgICAgICAgIC1y ZSAiLionaW52YWxpZF9wdHInIGEgcG9pbnRlciBwb2ludGluZyB0byBhbiBp bnZhbGlkIG1lbW9yeSBsb2NhdGlvblwuLioiIHsKKyAgICAgICAgICAgICAg ICBwYXNzICJleHBsb3JlX2ludmFsaWRfcHRyX2FzX3NpbmdsZV92YWx1ZV9w b2ludGVyIgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor CitnZGJfdGVzdF9tdWx0aXBsZSAiZXhwbG9yZSBzc19wdHIiICIiIHsKKyAg ICAtcmUgIltwb2ludGVyX2Rlc2NyaXB0aW9uIHtzc19wdHJ9ICRTU10uKiIg eworICAgICAgICBwYXNzICJleHBsb3JlIHNzX3B0ciIKKyAgICAgICAgZ2Ri X3Rlc3RfbXVsdGlwbGUgInMiICJleHBsb3JlX2FzX3NpbmdsZV92YWx1ZV9w b2ludGVyIiB7CisgICAgICAgICAgICAtcmUgIiRTU19maWVsZHMiIHsKKyAg ICAgICAgICAgICAgICBwYXNzICJleHBsb3JlIHN1IGFzIHNpbmdsZSB2YWx1 ZSBwb2ludGVyIgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor fQorCitnZGJfdGVzdF9tdWx0aXBsZSAiZXhwbG9yZSBkYXJyYXlfcmVmIiAi IiB7CisgICAgLXJlICJbcG9pbnRlcl9kZXNjcmlwdGlvbiB7ZGFycmF5X3Jl Zn0ge2RvdWJsZX1dLioiIHsKKyAgICAgICAgcGFzcyAiZXhwbG9yZSBkYXJy YXlfcmVmIgorICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiYSIgImV4cGxv cmVfYXNfYXJyYXkiIHsKKyAgICAgICAgICAgIC1yZSAiLipFbnRlciB0aGUg aW5kZXggdG8gZXhwbG9yZTouKiIgIHsKKyAgICAgICAgICAgICAgICBwYXNz ICJleHBsb3JlX2FzX2FycmF5IgorICAgICAgICAgICAgICAgIGdkYl90ZXN0 X211bHRpcGxlICIyIiAiZXhwbG9yZV9hc19hcnJheV9pbmRleF8yIiB7Cisg ICAgICAgICAgICAgICAgICAgIC1yZSAiLipkYXJyYXlfcmVmXFxcWzJcXFxd ID0gMC4qIiB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICJleHBs b3JlX2FzX2FycmF5X2luZGV4XzIiCisgICAgICAgICAgICAgICAgICAgICAg ICBnZGJfdGVzdF9tdWx0aXBsZSAiICIgImVuZCBleHBsb3JlX2FzX2FycmF5 X2luZGV4XzIiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtcmUg IlJldHVybmluZyB0byBwYXJlbnQgdmFsdWUuKkVudGVyIHRoZSBpbmRleCB0 byBleHBsb3JlOiAiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGFzcyAiZW5kIGV4cGxvcmVfYXNfYXJyYXlfaW5kZXhfMiIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUg IiAiICJlbmQgZXhwbG9yZV9hc19hcnJheSIgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLXJlICJcW1xuXHJcXSsiIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICJlbmQg ZXhwbG9yZV9hc19hcnJheSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0gCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 Cit9CisKK2dkYl90ZXN0X211bHRpcGxlICJleHBsb3JlIHN1IiAiIiB7Cisg ICAgLXJlICJbY29tcG91bmRfZGVzY3JpcHRpb24ge3N1fSB1bmlvbiB7dW5p b24gU2ltcGxlVW5pb259XS4qW2ZpZWxkX2Nob2ljZXMge2ludCBpfSB7Y2hh ciBjfSB7ZmxvYXQgZn0ge2RvdWJsZSBkfV1bZW50ZXJfZmllbGRfbnVtYmVy X3Byb21wdCB7c3V9XSIgeworICAgICAgICBwYXNzICJleHBsb3JlIHN1Igor ICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiMyIgImV4cGxvcmUgc3UuZCIg eworICAgICAgICAgICAgLXJlICJbc2NhbGFyX2Rlc2NyaXB0aW9uIHtzdS5k fSB7ZG91YmxlfV0uKltzY2FsYXJfdmFsdWUge3N1LmR9IHsxMDBbLl0uKn1d LiokcmV0dXJuX3RvX3BhcmVudF9wcm9tcHQiIHsKKyAgICAgICAgICAgICAg ICBwYXNzICJleHBsb3JlIHN1LmQiCisgICAgICAgICAgICAgICAgZ2RiX3Rl c3RfbXVsdGlwbGUgIiAiICJlbmQgc3UuZCBleHBsb3JhdGlvbiIgeworICAg ICAgICAgICAgICAgICAgICAtcmUgIltlbnRlcl9maWVsZF9udW1iZXJfcHJv bXB0IHtzdX1dIiB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICJl bmQgc3UuZCBleHBsb3JhdGlvbiIKKyAgICAgICAgICAgICAgICAgICAgICAg IGdkYl90ZXN0X211bHRpcGxlICIgIiAiZW5kIHN1IGV4cGxvcmF0aW9uIiB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXJlICIkZ2RiX3Byb21w dCIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICJl bmQgc3UgZXhwbG9yYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorfQorCitnZGJfdGVzdF9tdWx0aXBsZSAiZXhw bG9yZSBjcyIgIiIgeworICAgIC1yZSAiW2NvbXBvdW5kX2Rlc2NyaXB0aW9u IHtjc30ge3N0cnVjdC9jbGFzc30ge3N0cnVjdCBDb21wbGV4U3RydWN0fV0u KltmaWVsZF9jaG9pY2VzIHtzdHJ1Y3QgU2ltcGxlU3RydWN0IHN9IHt1bmlv biBTaW1wbGVVbmlvbiB1fSB7U1MgLjEwLiBzYX1dW2VudGVyX2ZpZWxkX251 bWJlcl9wcm9tcHQge2NzfV0iIHsKKyAgICAgICAgcGFzcyAiZXhwbG9yZSBj cyIKKyAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIjAiICJleHBsb3JlIGNz LnMiIHsKKyAgICAgICAgICAgIC1yZSAiW2NvbXBvdW5kX2Rlc2NyaXB0aW9u IHtjcy5zfSB7c3RydWN0L2NsYXNzfSB7c3RydWN0IFNpbXBsZVN0cnVjdH1d LipbZmllbGRfdmFsdWVzIHtpbnQgYSA9IDEwfSB7ZG91YmxlIGQgPSAxMDBb Ll0uKn1dLiokcmV0dXJuX3RvX3BhcmVudF9wcm9tcHQiIHsKKyAgICAgICAg ICAgICAgICBwYXNzICJleHBsb3JlIGNzLnMiCisgICAgICAgICAgICAgICAg Z2RiX3Rlc3RfbXVsdGlwbGUgIiAiICJlbmQgY3MucyBleHBsb3JhdGlvbiIg eworICAgICAgICAgICAgICAgICAgICAtcmUgIltlbnRlcl9maWVsZF9udW1i ZXJfcHJvbXB0IHtjc31dIiB7CisgICAgICAgICAgICAgICAgICAgICAgICBw YXNzICJlbmQgY3MucyBleHBsb3JhdGlvbiIKKyAgICAgICAgICAgICAgICAg ICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIgIiAiZW5kIGNzIGV4cGxvcmF0 aW9uIiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXJlICIkZ2Ri X3Byb21wdCIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YXNzICJlbmQgY3MgZXhwbG9yYXRpb24iCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgfQorfQorCitnZGJfdGVzdF9tdWx0aXBs ZSAiZXhwbG9yZSBjdSIgIiIgeworICAgIC1yZSAiW2NvbXBvdW5kX2Rlc2Ny aXB0aW9uIHtjdX0gdW5pb24ge3VuaW9uIENvbXBsZXhVbmlvbn1dLipbZmll bGRfY2hvaWNlcyB7U1Mgc30ge3N0cnVjdCBTaW1wbGVTdHJ1Y3QgLjEwLiBz YX1dW2VudGVyX2ZpZWxkX251bWJlcl9wcm9tcHQge2N1fV0iIHsKKyAgICAg ICAgcGFzcyAiZXhwbG9yZSBjdSIKKyAgICAgICAgZ2RiX3Rlc3RfbXVsdGlw bGUgIjEiICJleHBsb3JlIGN1LnNhIiB7CisgICAgICAgICAgICAtcmUgIlth cnJheV9kZXNjcmlwdGlvbiB7Y3Uuc2F9ICRTU10kYXJyYXlfaW5kZXhfcHJv bXB0IiB7CisgICAgICAgICAgICAgICAgcGFzcyAiZXhwbG9yZSBjdS5zYSIK KyAgICAgICAgICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiMCIgImV4cGxv cmUgY3Uuc2FcWzBcXSIgeworICAgICAgICAgICAgICAgICAgICAtcmUgIltj b21wb3VuZF9kZXNjcmlwdGlvbiB7Y3Uuc2FcWzBcXX0ge3N0cnVjdC9jbGFz c30ge3N0cnVjdCBTaW1wbGVTdHJ1Y3R9XS4qW2ZpZWxkX3ZhbHVlcyB7aW50 IGEgPSAwfSB7ZG91YmxlIGQgPSAuKlsuXS4qfV0uKiRyZXR1cm5fdG9fcGFy ZW50X3Byb21wdCIgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAi ZXhwbG9yZSBjdS5zYVxbMFxdIgorICAgICAgICAgICAgICAgICAgICAgICAg Z2RiX3Rlc3RfbXVsdGlwbGUgIiAiICJlbmQgY3Uuc2FcWzBcXSBleHBsb3Jh dGlvbiIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1yZSAiW2Fy cmF5X2Rlc2NyaXB0aW9uIHtjdS5zYX0gJFNTXSRhcnJheV9pbmRleF9wcm9t cHQiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAi ZW5kIGN1LnNhXFswXF0gZXhwbG9yYXRpb24iCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIgIiAiZW5kIGN1LnNhIGV4 cGxvcmF0aW9uIiB7CisgICAgICAgICAgICAgICAgICAgIC1yZSAiW2VudGVy X2ZpZWxkX251bWJlcl9wcm9tcHQge2N1fV0iIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHBhc3MgImVuZCBjdS5zYSBleHBsb3JhdGlvbiIKKyAgICAg ICAgICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIgIiAiZW5k IGN1IGV4cGxvcmF0aW9uIiB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLXJlICIkZ2RiX3Byb21wdCIgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYXNzICJlbmQgY3UgZXhwbG9yYXRpb24iCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVHlwZSBleHBsb3JhdGlvbiB0ZXN0 cworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Byb2Mgc2NhbGFyX3By aW1pdGl2ZV90eXBlX2RlY3NyaXB0aW9uIHt0eXBlfSB7CisgICAgcmV0dXJu ICIkdHlwZSBpcyBhIHByaW1pdGl2ZSBzY2FsYXIgdHlwZSIKK30KKworcHJv YyBjb21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uIHsgdHlwZV9uYW1lIHR5cGVf a2luZCB9IHsKKyAgICByZXR1cm4gIiR0eXBlX25hbWUgaXMgYSAkdHlwZV9r aW5kIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6IgorfQorCitwcm9jIGNv bXBvdW5kX2ZpZWxkX3R5cGVfZGVzY3JpcHRpb24geyBmaWVsZF9uYW1lIHR5 cGVfa2luZCB0eXBlX25hbWV9IHsKKyAgICByZXR1cm4gIiRmaWVsZF9uYW1l IGlzIGEgJHR5cGVfa2luZCBvZiB0eXBlICckdHlwZV9uYW1lJyB3aXRoIHRo ZSBmb2xsb3dpbmcgZmllbGRzOiIKK30KKworcHJvYyBhcnJheV90eXBlX2Rl c2NyaXB0aW9uIHsgYXJyYXlfbmFtZSB0eXBlX25hbWUgfSB7CisgICAgcmV0 dXJuICIkYXJyYXlfbmFtZSBpcyBhbiBhcnJheSBvZiBlbGVtZW50cyBvZiB0 eXBlICckdHlwZV9uYW1lJyIKK30KKworcHJvYyB0eXBlZGVmX3R5cGVfZGVz Y3JpcHRpb24geyB0eXBlX25hbWUgdGFyZ2V0X25hbWUgfSB7CisgICAgcmV0 dXJuICIkdHlwZV9uYW1lIGlzIG9mIGEgdHlwZSB3aGljaCBpcyBhIHR5cGVk ZWYgb2YgdHlwZSAnJHRhcmdldF9uYW1lJyIKK30KKworc2V0IENTX2ZpZWxk XzAgImZpZWxkICdzJyBvZiAnc3RydWN0IENvbXBsZXhTdHJ1Y3QnIgorc2V0 IENTX2ZpZWxkXzEgImZpZWxkICd1JyBvZiAnc3RydWN0IENvbXBsZXhTdHJ1 Y3QnIgorc2V0IENTX2ZpZWxkXzIgImZpZWxkICdzYScgb2YgJ3N0cnVjdCBD b21wbGV4U3RydWN0JyIKK3NldCBDU19maWVsZF8yX2FycmF5X2VsZW1lbnQg ImFuIGFycmF5IGVsZW1lbnQgb2YgJENTX2ZpZWxkXzIiCisKK3NldCBDVV9m aWVsZF8wICJmaWVsZCAncycgb2YgJ3VuaW9uIENvbXBsZXhVbmlvbiciCitz ZXQgQ1VfZmllbGRfMSAiZmllbGQgJ3NhJyBvZiAndW5pb24gQ29tcGxleFVu aW9uJyIKK3NldCBDVV9maWVsZF8xX2FycmF5X2VsZW1lbnQgImFuIGFycmF5 IGVsZW1lbnQgb2YgJENVX2ZpZWxkXzEiCisKK3NldCBTU19maWVsZHNfdHlw ZXMgW2ZpZWxkX3ZhbHVlcyB7aW50IGEgLy8gU2NhbGFyIFZhbHVlfSB7ZG91 YmxlIGQgLy8gU2NhbGFyIFZhbHVlfV0KK3NldCBTVV9maWVsZHNfdHlwZXMg W2ZpZWxkX3ZhbHVlcyB7aW50IGkgLy8gU2NhbGFyIFZhbHVlfSB7Y2hhciBj IC8vIFNjYWxhciBWYWx1ZX0ge2Zsb2F0IGYgLy8gU2NhbGFyIFZhbHVlfSB7 ZG91YmxlIGQgLy8gU2NhbGFyIFZhbHVlfV0KK3NldCBDU19maWVsZHNfdHlw ZXMgW2ZpZWxkX3ZhbHVlcyB7c3RydWN0IFNpbXBsZVN0cnVjdCBzICAvLyA8 RW50ZXIgMCB0byBleHBsb3JlIHRoaXMgZmllbGQ+fSB7dW5pb24gU2ltcGxl VW5pb24gdSAgLy8gPEVudGVyIDEgdG8gZXhwbG9yZSB0aGlzIGZpZWxkPn0g e1NTIFxbMTBcXSBzYSAvLyA8RW50ZXIgMiB0byBleHBsb3JlIHRoaXMgZmll bGQ+fV0KK3NldCBDVV9maWVsZHNfdHlwZXMgW2ZpZWxkX3ZhbHVlcyB7U1Mg cyAgLy8gPEVudGVyIDAgdG8gZXhwbG9yZSB0aGlzIGZpZWxkPn0ge3N0cnVj dCBTaW1wbGVTdHJ1Y3QgXFsxMFxdIHNhIC8vIDxFbnRlciAxIHRvIGV4cGxv cmUgdGhpcyBmaWVsZD59XQorCitnZGJfdGVzdCAiZXhwbG9yZSBpbnQiICIu KltzY2FsYXJfcHJpbWl0aXZlX3R5cGVfZGVjc3JpcHRpb24ge2ludH1dLioi CitnZGJfdGVzdCAiZXhwbG9yZSBzdHJ1Y3QgU2ltcGxlU3RydWN0IiAiLipb Y29tcG91bmRfdHlwZV9kZXNjcmlwdGlvbiAkU1Mge3N0cnVjdC9jbGFzc31d LiokU1NfZmllbGRzX3R5cGVzLioiCitnZGJfdGVzdCAiZXhwbG9yZSB1bmlv biBTaW1wbGVVbmlvbiIgIi4qW2NvbXBvdW5kX3R5cGVfZGVzY3JpcHRpb24g JFNVIHt1bmlvbn1dLiokU1VfZmllbGRzX3R5cGVzIgorZ2RiX3Rlc3QgImV4 cGxvcmUgU1MiICIuKlt0eXBlZGVmX3R5cGVfZGVzY3JpcHRpb24ge1NTfSAk U1NdLipbY29tcG91bmRfdHlwZV9kZXNjcmlwdGlvbiB7U1N9IHtzdHJ1Y3Qv Y2xhc3N9XS4qJFNTX2ZpZWxkc190eXBlcy4qIgorCitnZGJfdGVzdF9tdWx0 aXBsZSAiZXhwbG9yZSB0eXBlIHN0cnVjdCBDb21wbGV4U3RydWN0IiAiIiB7 CisgICAgLXJlICIuKltjb21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uICRDUyB7 c3RydWN0L2NsYXNzfV0uKiRDU19maWVsZHNfdHlwZXMuKiIgeworICAgICAg ICBwYXNzICJleHBsb3JlIHR5cGUgc3RydWN0IENvbXBsZXhTdHJ1Y3QiCisg ICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIwIiAiZXhwbG9yZSB0eXBlIHN0 cnVjdCBDb21wbGV4U3RydWN0IGZpZWxkIDAiIHsKKyAgICAgICAgICAgIC1y ZSAiLipbY29tcG91bmRfZmllbGRfdHlwZV9kZXNjcmlwdGlvbiAkQ1NfZmll bGRfMCB7c3RydWN0L2NsYXNzfSAkU1NdLiokU1NfZmllbGRzX3R5cGVzLioi IHsKKyAgICAgICAgICAgICAgICBwYXNzICJleHBsb3JlIHR5cGUgc3RydWN0 IENvbXBsZXhTdHJ1Y3QgZmllbGQgMCIKKyAgICAgICAgICAgICAgICBnZGJf dGVzdF9tdWx0aXBsZSAiICIgInJldHVybiB0byBDb21wbGV4U3RydWN0IGZy b20gZmllbGQgMCIgeworICAgICAgICAgICAgICAgICAgICAtcmUgIi4qW2Nv bXBvdW5kX3R5cGVfZGVzY3JpcHRpb24gJENTIHtzdHJ1Y3QvY2xhc3N9XS4q JENTX2ZpZWxkc190eXBlcy4qIiB7CisgICAgICAgICAgICAgICAgICAgICAg ICBwYXNzICJyZXR1cm4gdG8gQ29tcGxleFN0cnVjdCBmcm9tIGZpZWxkIDAi CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ2RiX3Rlc3RfbXVs dGlwbGUgIjEiICJleHBsb3JlIHR5cGUgc3RydWN0IENvbXBsZXhTdHJ1Y3Qg ZmllbGQgMSIgeworICAgICAgICAgICAgLXJlICIuKltjb21wb3VuZF9maWVs ZF90eXBlX2Rlc2NyaXB0aW9uICRDU19maWVsZF8xIHt1bmlvbn0gJFNVXS4q JFNVX2ZpZWxkc190eXBlcy4qIiB7CisgICAgICAgICAgICAgICAgcGFzcyAi ZXhwbG9yZSB0eXBlIHN0cnVjdCBDb21wbGV4U3RydWN0IGZpZWxkIDEiCisg ICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIiAiICJyZXR1cm4g dG8gQ29tcGxleFN0cnVjdCBmcm9tIGZpZWxkIDEiIHsKKyAgICAgICAgICAg ICAgICAgICAgLXJlICIuKltjb21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uICRD UyB7c3RydWN0L2NsYXNzfV0uKiRDU19maWVsZHNfdHlwZXMuKiIgeworICAg ICAgICAgICAgICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRvIENvbXBsZXhT dHJ1Y3QgZnJvbSBmaWVsZCAxIgorICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIyIiAiZXhwbG9yZSB0eXBlIHN0 cnVjdCBDb21wbGV4U3RydWN0IGZpZWxkIDIiIHsKKyAgICAgICAgICAgIC1y ZSAiLipbYXJyYXlfdHlwZV9kZXNjcmlwdGlvbiAkQ1NfZmllbGRfMiB7U1N9 XS4qIiB7CisgICAgICAgICAgICAgICAgcGFzcyAiZXhwbG9yZSB0eXBlIHN0 cnVjdCBDb21wbGV4U3RydWN0IGZpZWxkIDIiCisgICAgICAgICAgICAgICAg Z2RiX3Rlc3RfbXVsdGlwbGUgInMiICJhcnJheSBlbGVtZW50IG9mIGZpZWxk IDIgb2YgQ29tcGxleFN0cnVjdCIgeworICAgICAgICAgICAgICAgICAgICAt cmUgIi4qW2NvbXBvdW5kX2ZpZWxkX3R5cGVfZGVzY3JpcHRpb24gJENTX2Zp ZWxkXzJfYXJyYXlfZWxlbWVudCB7c3RydWN0L2NsYXNzfSAkU1NdLiokU1Nf ZmllbGRzX3R5cGVzLioiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBh c3MgImFycmF5IGVsZW1lbnQgb2YgZmllbGQgMiBvZiBDb21wbGV4U3RydWN0 IgorICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUg IiAiICJyZXR1cm4gdG8gQ29tcGxleFN0cnVjdCBhcnJheSIgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC1yZSAiLipbYXJyYXlfdHlwZV9kZXNj cmlwdGlvbiAkQ1NfZmllbGRfMiB7U1N9XS4qIiB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhc3MgInJldHVybiB0byBDb21wbGV4U3Ry dWN0IGFycmF5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn ZGJfdGVzdF9tdWx0aXBsZSAiICIgInJldHVybiB0byBDb21wbGV4U3RydWN0 IGZyb20gZmllbGQgMiIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLXJlICIuKltjb21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uICRD UyB7c3RydWN0L2NsYXNzfV0uKiRDU19maWVsZHNfdHlwZXMuKiIgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MgInJl dHVybiB0byBDb21wbGV4U3RydWN0IGZyb20gZmllbGQgMiIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiICIgInJl dHVybiB0byBHREIgcHJvbXB0IGZyb20gQ29tcGxleFN0cnVjdCB0eXBlIGV4 cGxvcmF0aW9uIiB7CisgICAgICAgICAgICAtcmUgIiRnZGJfcHJvbXB0IiB7 CisgICAgICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRvIEdEQiBwcm9tcHQg ZnJvbSBDb21wbGV4U3RydWN0IHR5cGUgZXhwbG9yYXRpb24iCisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2dkYl90ZXN0X211bHRp cGxlICJleHBsb3JlIHR5cGUgdW5pb24gQ29tcGxleFVuaW9uIiAiIiB7Cisg ICAgLXJlICIuKltjb21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uICRDVSB7dW5p b259XS4qJENVX2ZpZWxkc190eXBlcy4qIiB7CisgICAgICAgIHBhc3MgImV4 cGxvcmUgdHlwZSB1bmlvbiBDb21wbGV4VW5pb24iCisgICAgICAgIGdkYl90 ZXN0X211bHRpcGxlICIwIiAiZXhwbG9yZSB0eXBlIHVuaW9uIENvbXBsZXhT dHJ1Y3QgZmllbGQgMCIgeworICAgICAgICAgICAgLXJlICIuKltjb21wb3Vu ZF9maWVsZF90eXBlX2Rlc2NyaXB0aW9uICRDVV9maWVsZF8wIHtzdHJ1Y3Qv Y2xhc3N9ICRTU10uKiRTU19maWVsZHNfdHlwZXMuKiIgeworICAgICAgICAg ICAgICAgIHBhc3MgImV4cGxvcmUgdHlwZSB1bmlvbiBDb21wbGV4VW5pb24g ZmllbGQgMCIKKyAgICAgICAgICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAi ICIgInJldHVybiB0byBDb21wbGV4VW5pb24gZnJvbSBmaWVsZCAwIiB7Cisg ICAgICAgICAgICAgICAgICAgIC1yZSAiLipbY29tcG91bmRfdHlwZV9kZXNj cmlwdGlvbiAkQ1Uge3VuaW9ufV0uKiRDVV9maWVsZHNfdHlwZXMuKiIgewor ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRvIENvbXBs ZXhVbmlvbiBmcm9tIGZpZWxkIDAiCisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIjEiICJleHBsb3JlIHR5cGUg dW5pb24gQ29tcGxleFVuaW9uIGZpZWxkIDEiIHsKKyAgICAgICAgICAgIC1y ZSAiLipbYXJyYXlfdHlwZV9kZXNjcmlwdGlvbiAkQ1VfZmllbGRfMSAkU1Nd LioiIHsKKyAgICAgICAgICAgICAgICBwYXNzICJleHBsb3JlIHR5cGUgdW5p b24gQ29tcGxleFVuaW9uIGZpZWxkIDEiCisgICAgICAgICAgICAgICAgZ2Ri X3Rlc3RfbXVsdGlwbGUgInMiICJhcnJheSBlbGVtZW50IG9mIGZpZWxkIDEg b2YgQ29tcGxleFVuaW9uIiB7CisgICAgICAgICAgICAgICAgICAgIC1yZSAi LipbY29tcG91bmRfZmllbGRfdHlwZV9kZXNjcmlwdGlvbiAkQ1VfZmllbGRf MV9hcnJheV9lbGVtZW50IHtzdHJ1Y3QvY2xhc3N9ICRTU10uKiRTU19maWVs ZHNfdHlwZXMuKiIgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAi YXJyYXkgZWxlbWVudCBvZiBmaWVsZCAxIG9mIENvbXBsZXhVbmlvbiIKKyAg ICAgICAgICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIgIiAi cmV0dXJuIHRvIENvbXBsZXhVbmlvbiBhcnJheSIgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC1yZSAiLipbYXJyYXlfdHlwZV9kZXNjcmlwdGlv biAkQ1VfZmllbGRfMSAkU1NdLioiIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRvIENvbXBsZXhVbmlvbiBhcnJh eSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3Rlc3Rf bXVsdGlwbGUgIiAiICJyZXR1cm4gdG8gQ29tcGxleFVuaW9uIGZyb20gZmll bGQgMSIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LXJlICIuKltjb21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uICRDVSB7dW5pb259 XS4qJENVX2ZpZWxkc190eXBlcy4qIiB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRvIENvbXBsZXhV bmlvbiBmcm9tIGZpZWxkIDEiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIiAiICJyZXR1cm4gdG8gR0RCIHByb21w dCBmcm9tIENvbXBsZXhVbmlvbiB0eXBlIGV4cGxvcmF0aW9uIiB7CisgICAg ICAgICAgICAtcmUgIiRnZGJfcHJvbXB0IiB7CisgICAgICAgICAgICAgICAg cGFzcyAicmV0dXJuIHRvIEdEQiBwcm9tcHQgZnJvbSBDb21wbGV4VW5pb24g dHlwZSBleHBsb3JhdGlvbiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KK30K --20cf3005dcb0b6f8f304b50ceb5a--