Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1Yryfj-0005C6-CM for pgsql-hackers@arkaria.postgresql.org; Tue, 12 May 2015 01:07:48 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1Yryfi-0005aF-Gs for pgsql-hackers@arkaria.postgresql.org; Tue, 12 May 2015 01:07:46 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1Yryff-0005a8-IG for pgsql-hackers@postgresql.org; Tue, 12 May 2015 01:07:43 +0000 Received: from linode.thelabyrinth.net ([2600:3c00::f03c:91ff:fe69:8d76] helo=mail.thelabyrinth.net) by magus.postgresql.org with esmtps (TLS1.1:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1YryfW-0005j3-0U; Tue, 12 May 2015 01:07:41 +0000 Received: from theseus.local (c-76-114-206-193.hsd1.va.comcast.net [76.114.206.193]) (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 7BCAE12F97; Tue, 12 May 2015 01:07:29 +0000 (UTC) Message-ID: <5551525A.6070709@pgmasters.net> Date: Mon, 11 May 2015 21:07:38 -0400 From: David Steele User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Sawada Masahiko CC: Fujii Masao , Simon Riggs , Tatsuo Ishii , PostgreSQL-development , Abhijit Menon-Sen Subject: Re: Auditing extension for PostgreSQL (Take 2) References: <552326EE.4060509@pgmasters.net> <552D2C1A.3060002@pgmasters.net> <20150415.081354.1167351714960358354.t-ishii@sraoss.co.jp> <552DA959.2010102@pgmasters.net> <552EA121.1090603@pgmasters.net> <5534FC6E.9030906@pgmasters.net> <553938A1.7030707@pgmasters.net> <553FA477.5010803@pgmasters.net> <55429DA5.40503@pgmasters.net> In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="l8JL6fLuTWfRGQgqsPx2s0WiUPkMwoOsH" X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --l8JL6fLuTWfRGQgqsPx2s0WiUPkMwoOsH Content-Type: multipart/mixed; boundary="------------070802090709020904070301" This is a multi-part message in MIME format. --------------070802090709020904070301 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 5/1/15 5:58 AM, Sawada Masahiko wrote: > For now, since pg_audit patch has a pg_audit_ddl_command_end() > function which uses part of un-committed "deparsing utility commands" > patch API, > pg_audit patch is completely depend on that patch. > If API name, interface are changed, it would affect for pg_audit patch.= > I'm not sure about progress of "deparsing utility command" patch but > you have any idea if that patch is not committed into 9.5 until May > 15? The attached v12 patch removes the code that became redundant with Alvaro committing the event trigger/deparse work. I've updated the regression tests to reflect the changes, which were fairly minor and add additional information to the output. There are no longer any #ifdef'd code blocks. --=20 - David Steele david@pgmasters.net --------------070802090709020904070301 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pg_audit-v12.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pg_audit-v12.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4 IGY4NGU2ODQuLjFmM2QzZjEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIv Y29udHJpYi9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQCBTVUJESVJTID0gXAogCQlvaWQy bmFtZQlcCiAJCXBhZ2VpbnNwZWN0CVwKIAkJcGFzc3dvcmRjaGVjawlcCisJCXBnX2F1ZGl0 CVwKIAkJcGdfYnVmZmVyY2FjaGUJXAogCQlwZ19mcmVlc3BhY2VtYXAgXAogCQlwZ19wcmV3 YXJtCVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvLmdpdGlnbm9yZSBiL2NvbnRy aWIvcGdfYXVkaXQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hNTI2N2NmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC8uZ2l0 aWdub3JlCkBAIC0wLDAgKzEsNSBAQAorbG9nLworcmVzdWx0cy8KK3RtcF9jaGVjay8KK3Jl Z3Jlc3Npb24uZGlmZnMKK3JlZ3Jlc3Npb24ub3V0CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X2F1ZGl0L01ha2VmaWxlIGIvY29udHJpYi9wZ19hdWRpdC9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM2MDExCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19hdWRpdC9NYWtlZmlsZQpAQCAtMCwwICsxLDIxIEBACisjIHBnX2F1ZGl0 L01ha2VmaWxlCisKK01PRFVMRSA9IHBnX2F1ZGl0CitNT0RVTEVfYmlnID0gcGdfYXVkaXQK K09CSlMgPSBwZ19hdWRpdC5vCisKK0VYVEVOU0lPTiA9IHBnX2F1ZGl0CitSRUdSRVNTID0g cGdfYXVkaXQKK1JFR1JFU1NfT1BUUyA9IC0tdGVtcC1jb25maWc9JCh0b3Bfc3JjZGlyKS9j b250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbmYKK0RBVEEgPSBwZ19hdWRpdC0tMS4wLjAu c3FsCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0g JChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitz dWJkaXIgPSBjb250cmliL3BnX2F1ZGl0Cit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9z cmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9j b250cmliL3BnX2F1ZGl0L2V4cGVjdGVkL3BnX2F1ZGl0Lm91dCBiL2NvbnRyaWIvcGdfYXVk aXQvZXhwZWN0ZWQvcGdfYXVkaXQub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjgwZTNhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1ZGl0L2V4 cGVjdGVkL3BnX2F1ZGl0Lm91dApAQCAtMCwwICsxLDk5OCBAQAorLS0gTG9hZCBwZ19hdWRp dCBtb2R1bGUKK2NyZWF0ZSBleHRlbnNpb24gcGdfYXVkaXQ7CistLQorLS0gQ3JlYXRlIGEg c3VwZXJ1c2VyIHJvbGUgdGhhdCB3ZSBrbm93IHRoZSBuYW1lIG9mIGZvciB0ZXN0aW5nCitD UkVBVEUgVVNFUiBzdXBlciBTVVBFUlVTRVI7CitBTFRFUiBST0xFIHN1cGVyIFNFVCBwZ19h dWRpdC5sb2cgPSAnUm9sZSc7CitBTFRFUiBST0xFIHN1cGVyIFNFVCBwZ19hdWRpdC5sb2df bm90aWNlID0gT047CitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXI7CistLQor LS0gQ3JlYXRlIGF1ZGl0b3Igcm9sZQorQ1JFQVRFIFJPTEUgYXVkaXRvcjsKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDEsMSxST0xFLENSRUFURSBST0xFLCwsQ1JFQVRFIFJPTEUgYXVk aXRvcjsKKy0tCistLSBDcmVhdGUgZmlyc3QgdGVzdCB1c2VyCitDUkVBVEUgVVNFUiB1c2Vy MTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIsMSxST0xFLENSRUFURSBST0xFLCwsQ1JF QVRFIFVTRVIgdXNlcjE7CitBTFRFUiBST0xFIHVzZXIxIFNFVCBwZ19hdWRpdC5sb2cgPSAn ZGRsLCBST0xFJzsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMsMSxST0xFLEFMVEVSIFJP TEUsLCwiQUxURVIgUk9MRSB1c2VyMSBTRVQgcGdfYXVkaXQubG9nID0gJ2RkbCwgUk9MRSc7 IgorQUxURVIgUk9MRSB1c2VyMSBTRVQgcGdfYXVkaXQubG9nX25vdGljZSA9IE9OOworTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sNCwxLFJPTEUsQUxURVIgUk9MRSwsLEFMVEVSIFJPTEUg dXNlcjEgU0VUIHBnX2F1ZGl0LmxvZ19ub3RpY2UgPSBPTjsKKy0tCistLSBDcmVhdGUsIHNl bGVjdCwgZHJvcCAoc2VsZWN0IHdpbGwgbm90IGJlIGF1ZGl0ZWQpCitcY29ubmVjdCBjb250 cmliX3JlZ3Jlc3Npb24gdXNlcjEKK0NSRUFURSBUQUJMRSBwdWJsaWMudGVzdCAoaWQgSU5U KTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEsMSxEREwsQ1JFQVRFIFRBQkxFLFRBQkxF LHB1YmxpYy50ZXN0LENSRUFURSBUQUJMRSBwdWJsaWMudGVzdCAoaWQgSU5UKTsKK1NFTEVD VCAqIEZST00gdGVzdDsKKyBpZCAKKy0tLS0KKygwIHJvd3MpCisKK0RST1AgVEFCTEUgdGVz dDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIsMSxEREwsRFJPUCBUQUJMRSxUQUJMRSxw dWJsaWMudGVzdCxEUk9QIFRBQkxFIHRlc3Q7CistLQorLS0gQ3JlYXRlIHNlY29uZCB0ZXN0 IHVzZXIKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBzdXBlcgorQ1JFQVRFIFVTRVIg dXNlcjI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxLDEsUk9MRSxDUkVBVEUgUk9MRSws LENSRUFURSBVU0VSIHVzZXIyOworQUxURVIgUk9MRSB1c2VyMiBTRVQgcGdfYXVkaXQubG9n ID0gJ1JlYWQsIHdyaXRFJzsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIsMSxST0xFLEFM VEVSIFJPTEUsLCwiQUxURVIgUk9MRSB1c2VyMiBTRVQgcGdfYXVkaXQubG9nID0gJ1JlYWQs IHdyaXRFJzsiCitBTFRFUiBST0xFIHVzZXIyIFNFVCBwZ19hdWRpdC5sb2dfY2F0YWxvZyA9 IE9GRjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMsMSxST0xFLEFMVEVSIFJPTEUsLCxB TFRFUiBST0xFIHVzZXIyIFNFVCBwZ19hdWRpdC5sb2dfY2F0YWxvZyA9IE9GRjsKK0FMVEVS IFJPTEUgdXNlcjIgU0VUIHBnX2F1ZGl0LmxvZ19ub3RpY2UgPSBPTjsKK05PVElDRTogIEFV RElUOiBTRVNTSU9OLDQsMSxST0xFLEFMVEVSIFJPTEUsLCxBTFRFUiBST0xFIHVzZXIyIFNF VCBwZ19hdWRpdC5sb2dfbm90aWNlID0gT047CitBTFRFUiBST0xFIHVzZXIyIFNFVCBwZ19h dWRpdC5yb2xlID0gYXVkaXRvcjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDUsMSxST0xF LEFMVEVSIFJPTEUsLCxBTFRFUiBST0xFIHVzZXIyIFNFVCBwZ19hdWRpdC5yb2xlID0gYXVk aXRvcjsKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMgorQ1JFQVRFIFRBQkxF IHRlc3QyIChpZCBJTlQpOworR1JBTlQgU0VMRUNUIE9OIFRBQkxFIHB1YmxpYy50ZXN0MiBU TyBhdWRpdG9yOworLS0KKy0tIFJvbGUtYmFzZWQgdGVzdHMKK0NSRUFURSBUQUJMRSB0ZXN0 MworKAorCWlkIElOVAorKTsKK1NFTEVDVCBjb3VudCgqKQorICBGUk9NCisoCisJU0VMRUNU IHJlbG5hbWUKKwkgIEZST00gcGdfY2xhc3MKKwkgIExJTUlUIDEKKykgU1VCUVVFUlk7Cisg Y291bnQgCistLS0tLS0tCisgICAgIDEKKygxIHJvdykKKworU0VMRUNUICoKKyAgRlJPTSB0 ZXN0MywgdGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxLDEsUkVBRCxTRUxFQ1Qs LCwiU0VMRUNUICoKKyAgRlJPTSB0ZXN0MywgdGVzdDI7IgorTk9USUNFOiAgQVVESVQ6IE9C SkVDVCwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLnRlc3QyLCJTRUxFQ1QgKgorICBG Uk9NIHRlc3QzLCB0ZXN0MjsiCisgaWQgfCBpZCAKKy0tLS0rLS0tLQorKDAgcm93cykKKwor R1JBTlQgSU5TRVJUCisgICBPTiBUQUJMRSBwdWJsaWMudGVzdDMKKyAgIFRPIGF1ZGl0b3I7 CistLQorLS0gQ3JlYXRlIGEgdmlldyB0byB0ZXN0IGxvZ2dpbmcKK0NSRUFURSBWSUVXIHZ3 X3Rlc3QzIEFTCitTRUxFQ1QgKgorICBGUk9NIHRlc3QzOworR1JBTlQgU0VMRUNUCisgICBP TiB2d190ZXN0MworICAgVE8gYXVkaXRvcjsKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1 c2Ugb2Y6CistLSBzZWxlY3Qgb24gdndfdGVzdDMKKy0tIHNlbGVjdCBvbiB0ZXN0MgorU0VM RUNUICoKKyAgRlJPTSB2d190ZXN0MywgdGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwyLDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUICoKKyAgRlJPTSB2d190ZXN0MywgdGVzdDI7 IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwyLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGlj LnRlc3QyLCJTRUxFQ1QgKgorICBGUk9NIHZ3X3Rlc3QzLCB0ZXN0MjsiCitOT1RJQ0U6ICBB VURJVDogT0JKRUNULDIsMSxSRUFELFNFTEVDVCxWSUVXLHB1YmxpYy52d190ZXN0MywiU0VM RUNUICoKKyAgRlJPTSB2d190ZXN0MywgdGVzdDI7IgorIGlkIHwgaWQgCistLS0tKy0tLS0K KygwIHJvd3MpCisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNl cnQgb24gdGVzdDMKKy0tIHNlbGVjdCBvbiB0ZXN0MgorV0lUSCBDVEUgQVMKKygKKwlTRUxF Q1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQK KyAgRlJPTSBjdGU7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzLDEsV1JJVEUsSU5TRVJU LCwsIldJVEggQ1RFIEFTCisoCisJU0VMRUNUIGlkCisJICBGUk9NIHRlc3QyCispCitJTlNF UlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00gY3RlOyIKK05PVElDRTogIEFVRElU OiBPQkpFQ1QsMywxLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdDMsIldJVEggQ1RF IEFTCisoCisJU0VMRUNUIGlkCisJICBGUk9NIHRlc3QyCispCitJTlNFUlQgSU5UTyB0ZXN0 MworU0VMRUNUIGlkCisgIEZST00gY3RlOyIKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMywx LFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy50ZXN0MiwiV0lUSCBDVEUgQVMKKygKKwlTRUxF Q1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQK KyAgRlJPTSBjdGU7IgorLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIGlu c2VydCBvbiB0ZXN0MworV0lUSCBDVEUgQVMKKygKKwlJTlNFUlQgSU5UTyB0ZXN0MyBWQUxV RVMgKDEpCisJCQkJICAgUkVUVVJOSU5HIGlkCispCitJTlNFUlQgSU5UTyB0ZXN0MgorU0VM RUNUIGlkCisgIEZST00gY3RlOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNCwxLFdSSVRF LElOU0VSVCwsLCJXSVRIIENURSBBUworKAorCUlOU0VSVCBJTlRPIHRlc3QzIFZBTFVFUyAo MSkKKwkJCQkgICBSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJTlRPIHRlc3QyCitTRUxFQ1Qg aWQKKyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCw0LDEsV1JJVEUsSU5T RVJULFRBQkxFLHB1YmxpYy50ZXN0MywiV0lUSCBDVEUgQVMKKygKKwlJTlNFUlQgSU5UTyB0 ZXN0MyBWQUxVRVMgKDEpCisJCQkJICAgUkVUVVJOSU5HIGlkCispCitJTlNFUlQgSU5UTyB0 ZXN0MgorU0VMRUNUIGlkCisgIEZST00gY3RlOyIKK0dSQU5UIFVQREFURSBPTiBUQUJMRSBw dWJsaWMudGVzdDIgVE8gYXVkaXRvcjsKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ug b2Y6CistLSBpbnNlcnQgb24gdGVzdDMKKy0tIHVwZGF0ZSBvbiB0ZXN0MgorV0lUSCBDVEUg QVMKKygKKwlVUERBVEUgdGVzdDIKKwkgICBTRVQgaWQgPSAxCisJUkVUVVJOSU5HIGlkCisp CitJTlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00gY3RlOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sNSwxLFdSSVRFLElOU0VSVCwsLCJXSVRIIENURSBBUworKAorCVVQ REFURSB0ZXN0MgorCSAgIFNFVCBpZCA9IDEKKwlSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJ TlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6IE9C SkVDVCw1LDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50ZXN0MywiV0lUSCBDVEUgQVMK KygKKwlVUERBVEUgdGVzdDIKKwkgICBTRVQgaWQgPSAxCisJUkVUVVJOSU5HIGlkCispCitJ TlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00gY3RlOyIKK05PVElDRTogIEFV RElUOiBPQkpFQ1QsNSwxLFdSSVRFLFVQREFURSxUQUJMRSxwdWJsaWMudGVzdDIsIldJVEgg Q1RFIEFTCisoCisJVVBEQVRFIHRlc3QyCisJICAgU0VUIGlkID0gMQorCVJFVFVSTklORyBp ZAorKQorSU5TRVJUIElOVE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsiCistLQor LS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gaW5zZXJ0IG9uIHRlc3QyCitXSVRI IENURSBBUworKAorCUlOU0VSVCBJTlRPIHRlc3QyIFZBTFVFUyAoMSkKKwkJCQkgICBSRVRV Uk5JTkcgaWQKKykKK1VQREFURSB0ZXN0MworICAgU0VUIGlkID0gY3RlLmlkCisgIEZST00g Y3RlCisgV0hFUkUgdGVzdDMuaWQgPD4gY3RlLmlkOworTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sNiwxLFdSSVRFLFVQREFURSwsLCJXSVRIIENURSBBUworKAorCUlOU0VSVCBJTlRPIHRl c3QyIFZBTFVFUyAoMSkKKwkJCQkgICBSRVRVUk5JTkcgaWQKKykKK1VQREFURSB0ZXN0Mwor ICAgU0VUIGlkID0gY3RlLmlkCisgIEZST00gY3RlCisgV0hFUkUgdGVzdDMuaWQgPD4gY3Rl LmlkOyIKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsNiwxLFdSSVRFLElOU0VSVCxUQUJMRSxw dWJsaWMudGVzdDIsIldJVEggQ1RFIEFTCisoCisJSU5TRVJUIElOVE8gdGVzdDIgVkFMVUVT ICgxKQorCQkJCSAgIFJFVFVSTklORyBpZAorKQorVVBEQVRFIHRlc3QzCisgICBTRVQgaWQg PSBjdGUuaWQKKyAgRlJPTSBjdGUKKyBXSEVSRSB0ZXN0My5pZCA8PiBjdGUuaWQ7IgorLS0K Ky0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDIgc28gdGhhdCBvbmx5IG9iamVjdCBs b2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVy CithbHRlciByb2xlIHVzZXIyIHNldCBwZ19hdWRpdC5sb2cgPSAnTk9ORSc7CitOT1RJQ0U6 ICBBVURJVDogU0VTU0lPTiwxLDEsUk9MRSxBTFRFUiBST0xFLCwsYWx0ZXIgcm9sZSB1c2Vy MiBzZXQgcGdfYXVkaXQubG9nID0gJ05PTkUnOworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNz aW9uIHVzZXIyCistLQorLS0gQ3JlYXRlIHRlc3Q0IGFuZCBhZGQgcGVybWlzc2lvbnMKK0NS RUFURSBUQUJMRSB0ZXN0NAorKAorCWlkIGludCwKKwluYW1lIHRleHQKKyk7CitHUkFOVCBT RUxFQ1QgKG5hbWUpCisgICBPTiBUQUJMRSBwdWJsaWMudGVzdDQKKyAgIFRPIGF1ZGl0b3I7 CitHUkFOVCBVUERBVEUgKGlkKQorICAgT04gVEFCTEUgcHVibGljLnRlc3Q0CisgICBUTyBh dWRpdG9yOworR1JBTlQgaW5zZXJ0IChuYW1lKQorICAgT04gVEFCTEUgcHVibGljLnRlc3Q0 CisgICBUTyBhdWRpdG9yOworLS0KKy0tIE5vdCBvYmplY3QgbG9nZ2VkCitTRUxFQ1QgaWQK KyAgRlJPTSBwdWJsaWMudGVzdDQ7CisgaWQgCistLS0tCisoMCByb3dzKQorCistLQorLS0g T2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0IChuYW1lKSBvbiB0ZXN0NAor U0VMRUNUIG5hbWUKKyAgRlJPTSBwdWJsaWMudGVzdDQ7CitOT1RJQ0U6ICBBVURJVDogT0JK RUNULDEsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMudGVzdDQsIlNFTEVDVCBuYW1lCisg IEZST00gcHVibGljLnRlc3Q0OyIKKyBuYW1lIAorLS0tLS0tCisoMCByb3dzKQorCistLQor LS0gTm90IG9iamVjdCBsb2dnZWQKK0lOU0VSVCBJTlRPIHB1YmxpYy50ZXN0NCAoaWQpCisJ CQkJICBWQUxVRVMgKDEpOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0t IGluc2VydCAobmFtZSkgb24gdGVzdDQKK0lOU0VSVCBJTlRPIHB1YmxpYy50ZXN0NCAobmFt ZSkKKwkJCQkgIFZBTFVFUyAoJ3Rlc3QnKTsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMiwx LFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdDQsIklOU0VSVCBJTlRPIHB1YmxpYy50 ZXN0NCAobmFtZSkKKwkJCQkgIFZBTFVFUyAoJ3Rlc3QnKTsiCistLQorLS0gTm90IG9iamVj dCBsb2dnZWQKK1VQREFURSBwdWJsaWMudGVzdDQKKyAgIFNFVCBuYW1lID0gJ2Zvbyc7Cist LQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gdXBkYXRlIChpZCkgb24gdGVz dDQKK1VQREFURSBwdWJsaWMudGVzdDQKKyAgIFNFVCBpZCA9IDE7CitOT1RJQ0U6ICBBVURJ VDogT0JKRUNULDMsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLnRlc3Q0LCJVUERBVEUg cHVibGljLnRlc3Q0CisgICBTRVQgaWQgPSAxOyIKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJl Y2F1c2Ugb2Y6CistLSB1cGRhdGUgKG5hbWUpIG9uIHRlc3Q0CistLSB1cGRhdGUgKG5hbWUp IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBzZWxlY3QgKG5hbWUpIGR1ZSB0byBvcmRlcmluZwor dXBkYXRlIHB1YmxpYy50ZXN0NCBzZXQgbmFtZSA9ICdmb28nIHdoZXJlIG5hbWUgPSAnYmFy JzsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsNCwxLFdSSVRFLFVQREFURSxUQUJMRSxwdWJs aWMudGVzdDQsdXBkYXRlIHB1YmxpYy50ZXN0NCBzZXQgbmFtZSA9ICdmb28nIHdoZXJlIG5h bWUgPSAnYmFyJzsKKy0tCistLSBEcm9wIHRlc3QgdGFibGVzCitEUk9QIFRBQkxFIHRlc3Qy OworRFJPUCBWSUVXIHZ3X3Rlc3QzOworRFJPUCBUQUJMRSB0ZXN0MzsKK0RST1AgVEFCTEUg dGVzdDQ7CistLQorLS0gQ2hhbmdlIHBlcm1pc3Npb25zIG9mIHVzZXIgMSBzbyB0aGF0IHNl c3Npb24gbG9nZ2luZyB3aWxsIGJlIGRvbmUKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lv biBzdXBlcgorYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQubG9nID0gJ0RETCwgUkVB RCc7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxLDEsUk9MRSxBTFRFUiBST0xFLCwsImFs dGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZyA9ICdEREwsIFJFQUQnOyIKK1xjb25u ZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMQorLS0KKy0tIENyZWF0ZSB0YWJsZSBpcyBz ZXNzaW9uIGxvZ2dlZAorQ1JFQVRFIFRBQkxFIHB1YmxpYy5hY2NvdW50CisoCisJaWQgSU5U LAorCW5hbWUgVEVYVCwKKwlwYXNzd29yZCBURVhULAorCWRlc2NyaXB0aW9uIFRFWFQKKyk7 CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxLDEsRERMLENSRUFURSBUQUJMRSxUQUJMRSxw dWJsaWMuYWNjb3VudCwiQ1JFQVRFIFRBQkxFIHB1YmxpYy5hY2NvdW50CisoCisJaWQgSU5U LAorCW5hbWUgVEVYVCwKKwlwYXNzd29yZCBURVhULAorCWRlc2NyaXB0aW9uIFRFWFQKKyk7 IgorLS0KKy0tIFNlbGVjdCBpcyBzZXNzaW9uIGxvZ2dlZAorU0VMRUNUICoKKyAgRlJPTSBh Y2NvdW50OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMiwxLFJFQUQsU0VMRUNULCwsIlNF TEVDVCAqCisgIEZST00gYWNjb3VudDsiCisgaWQgfCBuYW1lIHwgcGFzc3dvcmQgfCBkZXNj cmlwdGlvbiAKKy0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorKDAgcm93 cykKKworLS0KKy0tIEluc2VydCBpcyBub3QgbG9nZ2VkCitJTlNFUlQgSU5UTyBhY2NvdW50 IChpZCwgbmFtZSwgcGFzc3dvcmQsIGRlc2NyaXB0aW9uKQorCQkJIFZBTFVFUyAoMSwgJ3Vz ZXIxJywgJ0hBU0gxJywgJ2JsYWgsIGJsYWgnKTsKKy0tCistLSBDaGFuZ2UgcGVybWlzc2lv bnMgb2YgdXNlciAxIHNvIHRoYXQgb25seSBvYmplY3QgbG9nZ2luZyB3aWxsIGJlIGRvbmUK K1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBzdXBlcgorYWx0ZXIgcm9sZSB1c2VyMSBz ZXQgcGdfYXVkaXQubG9nID0gJ25vbmUnOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMSwx LFJPTEUsQUxURVIgUk9MRSwsLGFsdGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZyA9 ICdub25lJzsKK2FsdGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LnJvbGUgPSAnYXVkaXRv cic7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyLDEsUk9MRSxBTFRFUiBST0xFLCwsYWx0 ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQucm9sZSA9ICdhdWRpdG9yJzsKK1xjb25uZWN0 IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMQorLS0KKy0tIEF1ZGl0b3IgZ3JhbnRzIG5vdCBs b2dnZWQKK0dSQU5UIFNFTEVDVCAocGFzc3dvcmQpLAorCSAgVVBEQVRFIChuYW1lLCBwYXNz d29yZCkKKyAgIE9OIFRBQkxFIHB1YmxpYy5hY2NvdW50CisgICBUTyBhdWRpdG9yOworLS0K Ky0tIE5vdCBvYmplY3QgbG9nZ2VkCitTRUxFQ1QgaWQsCisJICAgbmFtZQorICBGUk9NIGFj Y291bnQ7CisgaWQgfCBuYW1lICAKKy0tLS0rLS0tLS0tLQorICAxIHwgdXNlcjEKKygxIHJv dykKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAocGFz c3dvcmQpIG9uIGFjY291bnQKK1NFTEVDVCBwYXNzd29yZAorICBGUk9NIGFjY291bnQ7CitO T1RJQ0U6ICBBVURJVDogT0JKRUNULDEsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNj b3VudCwiU0VMRUNUIHBhc3N3b3JkCisgIEZST00gYWNjb3VudDsiCisgcGFzc3dvcmQgCist LS0tLS0tLS0tCisgSEFTSDEKKygxIHJvdykKKworLS0KKy0tIE5vdCBvYmplY3QgbG9nZ2Vk CitVUERBVEUgYWNjb3VudAorICAgU0VUIGRlc2NyaXB0aW9uID0gJ3lhZGEsIHlhZGEnOwor LS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAocGFzc3dvcmQp IG9uIGFjY291bnQKK1VQREFURSBhY2NvdW50CisgICBTRVQgcGFzc3dvcmQgPSAnSEFTSDIn OworTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwyLDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1Ymxp Yy5hY2NvdW50LCJVUERBVEUgYWNjb3VudAorICAgU0VUIHBhc3N3b3JkID0gJ0hBU0gyJzsi CistLQorLS0gQ2hhbmdlIHBlcm1pc3Npb25zIG9mIHVzZXIgMSBzbyB0aGF0IHNlc3Npb24g cmVsYXRpb24gbG9nZ2luZyB3aWxsIGJlIGRvbmUKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVz c2lvbiBzdXBlcgorYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQubG9nX3JlbGF0aW9u ID0gb247CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxLDEsUk9MRSxBTFRFUiBST0xFLCws YWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQubG9nX3JlbGF0aW9uID0gb247CithbHRl ciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2cgPSAncmVhZCwgV1JJVEUnOworTk9USUNF OiAgQVVESVQ6IFNFU1NJT04sMiwxLFJPTEUsQUxURVIgUk9MRSwsLCJhbHRlciByb2xlIHVz ZXIxIHNldCBwZ19hdWRpdC5sb2cgPSAncmVhZCwgV1JJVEUnOyIKK1xjb25uZWN0IGNvbnRy aWJfcmVncmVzc2lvbiB1c2VyMQorLS0KKy0tIE5vdCBsb2dnZWQKK2NyZWF0ZSB0YWJsZSBB Q0NPVU5UX1JPTEVfTUFQCisoCisJYWNjb3VudF9pZCBJTlQsCisJcm9sZV9pZCBJTlQKKyk7 CistLQorLS0gQXVkaXRvciBncmFudHMgbm90IGxvZ2dlZAorR1JBTlQgU0VMRUNUCisgICBP TiBUQUJMRSBwdWJsaWMuYWNjb3VudF9yb2xlX21hcAorICAgVE8gYXVkaXRvcjsKKy0tCist LSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBzZWxlY3QgKHBhc3N3b3JkKSBvbiBh Y2NvdW50CistLSBzZWxlY3Qgb24gYWNjb3VudF9yb2xlX21hcAorLS0gU2Vzc2lvbiBsb2dn ZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlvbiA9 IG9uCitTRUxFQ1QgYWNjb3VudC5wYXNzd29yZCwKKwkgICBhY2NvdW50X3JvbGVfbWFwLnJv bGVfaWQKKyAgRlJPTSBhY2NvdW50CisJICAgSU5ORVIgSk9JTiBhY2NvdW50X3JvbGVfbWFw CisJCQlvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5hY2NvdW50X2lkOworTk9U SUNFOiAgQVVESVQ6IE9CSkVDVCwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291 bnQsIlNFTEVDVCBhY2NvdW50LnBhc3N3b3JkLAorCSAgIGFjY291bnRfcm9sZV9tYXAucm9s ZV9pZAorICBGUk9NIGFjY291bnQKKwkgICBJTk5FUiBKT0lOIGFjY291bnRfcm9sZV9tYXAK KwkJCW9uIGFjY291bnQuaWQgPSBhY2NvdW50X3JvbGVfbWFwLmFjY291bnRfaWQ7IgorTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sMSwxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2Nv dW50LCJTRUxFQ1QgYWNjb3VudC5wYXNzd29yZCwKKwkgICBhY2NvdW50X3JvbGVfbWFwLnJv bGVfaWQKKyAgRlJPTSBhY2NvdW50CisJICAgSU5ORVIgSk9JTiBhY2NvdW50X3JvbGVfbWFw CisJCQlvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5hY2NvdW50X2lkOyIKK05P VElDRTogIEFVRElUOiBPQkpFQ1QsMSwxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2Nv dW50X3JvbGVfbWFwLCJTRUxFQ1QgYWNjb3VudC5wYXNzd29yZCwKKwkgICBhY2NvdW50X3Jv bGVfbWFwLnJvbGVfaWQKKyAgRlJPTSBhY2NvdW50CisJICAgSU5ORVIgSk9JTiBhY2NvdW50 X3JvbGVfbWFwCisJCQlvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5hY2NvdW50 X2lkOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEsMSxSRUFELFNFTEVDVCxUQUJMRSxw dWJsaWMuYWNjb3VudF9yb2xlX21hcCwiU0VMRUNUIGFjY291bnQucGFzc3dvcmQsCisJICAg YWNjb3VudF9yb2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3VudAorCSAgIElOTkVSIEpP SU4gYWNjb3VudF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9IGFjY291bnRfcm9sZV9t YXAuYWNjb3VudF9pZDsiCisgcGFzc3dvcmQgfCByb2xlX2lkIAorLS0tLS0tLS0tLSstLS0t LS0tLS0KKygwIHJvd3MpCisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6Cist LSBzZWxlY3QgKHBhc3N3b3JkKSBvbiBhY2NvdW50CistLSBTZXNzaW9uIGxvZ2dlZCBvbiBh bGwgdGFibGVzIGJlY2F1c2UgbG9nID0gcmVhZCBhbmQgbG9nX3JlbGF0aW9uID0gb24KK1NF TEVDVCBwYXNzd29yZAorICBGUk9NIGFjY291bnQ7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNU LDIsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCwiU0VMRUNUIHBhc3N3b3Jk CisgIEZST00gYWNjb3VudDsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyLDEsUkVBRCxT RUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQsIlNFTEVDVCBwYXNzd29yZAorICBGUk9NIGFj Y291bnQ7IgorIHBhc3N3b3JkIAorLS0tLS0tLS0tLQorIEhBU0gyCisoMSByb3cpCisKKy0t CistLSBOb3Qgb2JqZWN0IGxvZ2dlZAorLS0gU2Vzc2lvbiBsb2dnZWQgb24gYWxsIHRhYmxl cyBiZWNhdXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlvbiA9IG9uCitVUERBVEUgYWNj b3VudAorICAgU0VUIGRlc2NyaXB0aW9uID0gJ3lhZGEsIHlhZGEnOworTk9USUNFOiAgQVVE SVQ6IFNFU1NJT04sMywxLFdSSVRFLFVQREFURSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiVVBE QVRFIGFjY291bnQKKyAgIFNFVCBkZXNjcmlwdGlvbiA9ICd5YWRhLCB5YWRhJzsiCistLQor LS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0IChwYXNzd29yZCkgb24g YWNjb3VudCAoaW4gdGhlIHdoZXJlIGNsYXVzZSkKKy0tIFNlc3Npb24gbG9nZ2VkIG9uIGFs bCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2dfcmVsYXRpb24gPSBvbgorVVBE QVRFIGFjY291bnQKKyAgIFNFVCBkZXNjcmlwdGlvbiA9ICd5YWRhLCB5YWRhJworIHdoZXJl IHBhc3N3b3JkID0gJ0hBU0gyJzsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsNCwxLFdSSVRF LFVQREFURSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiVVBEQVRFIGFjY291bnQKKyAgIFNFVCBk ZXNjcmlwdGlvbiA9ICd5YWRhLCB5YWRhJworIHdoZXJlIHBhc3N3b3JkID0gJ0hBU0gyJzsi CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0LDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1Ymxp Yy5hY2NvdW50LCJVUERBVEUgYWNjb3VudAorICAgU0VUIGRlc2NyaXB0aW9uID0gJ3lhZGEs IHlhZGEnCisgd2hlcmUgcGFzc3dvcmQgPSAnSEFTSDInOyIKKy0tCistLSBPYmplY3QgbG9n Z2VkIGJlY2F1c2Ugb2Y6CistLSB1cGRhdGUgKHBhc3N3b3JkKSBvbiBhY2NvdW50CistLSBT ZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2UgbG9nID0gcmVhZCBhbmQgbG9n X3JlbGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50CisgICBTRVQgcGFzc3dvcmQgPSAnSEFT SDInOworTk9USUNFOiAgQVVESVQ6IE9CSkVDVCw1LDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1 YmxpYy5hY2NvdW50LCJVUERBVEUgYWNjb3VudAorICAgU0VUIHBhc3N3b3JkID0gJ0hBU0gy JzsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1LDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1 YmxpYy5hY2NvdW50LCJVUERBVEUgYWNjb3VudAorICAgU0VUIHBhc3N3b3JkID0gJ0hBU0gy JzsiCistLQorLS0gQ2hhbmdlIGJhY2sgdG8gc3VwZXJ1c2VyIHRvIGRvIGV4aGF1c3RpdmUg dGVzdHMKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBzdXBlcgorU0VUIHBnX2F1ZGl0 LmxvZyA9ICdBTEwnOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMSwxLE1JU0MsU0VULCws U0VUIHBnX2F1ZGl0LmxvZyA9ICdBTEwnOworU0VUIHBnX2F1ZGl0LmxvZ19ub3RpY2UgPSBP TjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIsMSxNSVNDLFNFVCwsLFNFVCBwZ19hdWRp dC5sb2dfbm90aWNlID0gT047CitTRVQgcGdfYXVkaXQubG9nX3JlbGF0aW9uID0gT047CitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzLDEsTUlTQyxTRVQsLCxTRVQgcGdfYXVkaXQubG9n X3JlbGF0aW9uID0gT047CitTRVQgcGdfYXVkaXQubG9nX3BhcmFtZXRlciA9IE9OOworTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sNCwxLE1JU0MsU0VULCwsU0VUIHBnX2F1ZGl0LmxvZ19w YXJhbWV0ZXIgPSBPTjsKKy0tCistLSBTaW1wbGUgRE8gYmxvY2sKK0RPICQkCitCRUdJTgor CXJhaXNlIG5vdGljZSAndGVzdCc7CitFTkQgJCQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP Tiw1LDEsRlVOQ1RJT04sRE8sLCwiRE8gJCQKK0JFR0lOCisJcmFpc2Ugbm90aWNlICd0ZXN0 JzsKK0VORCAkJDsiCitOT1RJQ0U6ICB0ZXN0CistLQorLS0gQ3JlYXRlIHRlc3Qgc2NoZW1h CitDUkVBVEUgU0NIRU1BIHRlc3Q7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw2LDEsRERM LENSRUFURSBTQ0hFTUEsU0NIRU1BLHRlc3QsQ1JFQVRFIFNDSEVNQSB0ZXN0OworLS0KKy0t IENvcHkgYWNjb3VudCB0byBzdGRvdXQKK0NPUFkgYWNjb3VudCBUTyBzdGRvdXQ7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiw3LDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291 bnQsQ09QWSBhY2NvdW50IFRPIHN0ZG91dDsKKzEJdXNlcjEJSEFTSDIJeWFkYSwgeWFkYQor LS0KKy0tIENyZWF0ZSBhIHRhYmxlIGZyb20gYSBxdWVyeQorQ1JFQVRFIFRBQkxFIHRlc3Qu YWNjb3VudF9jb3B5IEFTCitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQ7CitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiw4LDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQsIkNS RUFURSBUQUJMRSB0ZXN0LmFjY291bnRfY29weSBBUworU0VMRUNUICoKKyAgRlJPTSBhY2Nv dW50OyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDgsMSxXUklURSxJTlNFUlQsVEFCTEUs dGVzdC5hY2NvdW50X2NvcHksIkNSRUFURSBUQUJMRSB0ZXN0LmFjY291bnRfY29weSBBUwor U0VMRUNUICoKKyAgRlJPTSBhY2NvdW50OyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDgs MixEREwsQ1JFQVRFIFRBQkxFIEFTLFRBQkxFLHRlc3QuYWNjb3VudF9jb3B5LCJDUkVBVEUg VEFCTEUgdGVzdC5hY2NvdW50X2NvcHkgQVMKK1NFTEVDVCAqCisgIEZST00gYWNjb3VudDsi CistLQorLS0gQ29weSBmcm9tIHN0ZGluIHRvIGFjY291bnQgY29weQorQ09QWSB0ZXN0LmFj Y291bnRfY29weSBmcm9tIHN0ZGluOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sOSwxLFdS SVRFLElOU0VSVCxUQUJMRSx0ZXN0LmFjY291bnRfY29weSxDT1BZIHRlc3QuYWNjb3VudF9j b3B5IGZyb20gc3RkaW47CistLQorLS0gVGVzdCBwcmVwYXJlZCBzdGF0ZW1lbnQKK1BSRVBB UkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMKK1NFTEVDVCAqCisgIEZST00gYWNjb3VudAorIFdI RVJFIGlkID0gJDE7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxMCwxLFJFQUQsUFJFUEFS RSwsLCJQUkVQQVJFIHBnY2xhc3NzdG10IChvaWQpIEFTCitTRUxFQ1QgKgorICBGUk9NIGFj Y291bnQKKyBXSEVSRSBpZCA9ICQxOyIKK0VYRUNVVEUgcGdjbGFzc3N0bXQgKDEpOworTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sMTEsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNj b3VudCwiUFJFUEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBBUworU0VMRUNUICoKKyAgRlJPTSBh Y2NvdW50CisgV0hFUkUgaWQgPSAkMTsiLDEKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEx LDIsUkVBRCxFWEVDVVRFLCwsRVhFQ1VURSBwZ2NsYXNzc3RtdCAoMSk7CisgaWQgfCBuYW1l ICB8IHBhc3N3b3JkIHwgZGVzY3JpcHRpb24gCistLS0tKy0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tCisgIDEgfCB1c2VyMSB8IEhBU0gyICAgIHwgeWFkYSwgeWFkYQorKDEg cm93KQorCitERUFMTE9DQVRFIHBnY2xhc3NzdG10OworTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sMTIsMSxNSVNDLERFQUxMT0NBVEUsLCxERUFMTE9DQVRFIHBnY2xhc3NzdG10OworLS0K Ky0tIFRlc3QgY3Vyc29yCitCRUdJTjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEzLDEs TUlTQyxCRUdJTiwsLEJFR0lOOworREVDTEFSRSBjdGVzdCBTQ1JPTEwgQ1VSU09SIEZPUgor U0VMRUNUIGNvdW50KCopCisgIEZST00KKygKKwlTRUxFQ1QgcmVsbmFtZQorCSAgRlJPTSBw Z19jbGFzcworCSBMSU1JVCAxCisgKSBzdWJxdWVyeTsKK05PVElDRTogIEFVRElUOiBTRVNT SU9OLDE0LDEsUkVBRCxTRUxFQ1QsVEFCTEUscGdfY2F0YWxvZy5wZ19jbGFzcywiREVDTEFS RSBjdGVzdCBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIGNvdW50KCopCisgIEZST00KKygK KwlTRUxFQ1QgcmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcworCSBMSU1JVCAxCisgKSBzdWJx dWVyeTsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxNCwyLFJFQUQsREVDTEFSRSBDVVJT T1IsLCwiREVDTEFSRSBjdGVzdCBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIGNvdW50KCop CisgIEZST00KKygKKwlTRUxFQ1QgcmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcworCSBMSU1J VCAxCisgKSBzdWJxdWVyeTsiCitGRVRDSCBORVhUIEZST00gY3Rlc3Q7CitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiwxNSwxLE1JU0MsRkVUQ0gsLCxGRVRDSCBORVhUIEZST00gY3Rlc3Q7 CisgY291bnQgCistLS0tLS0tCisgICAgIDEKKygxIHJvdykKKworQ0xPU0UgY3Rlc3Q7CitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxNiwxLE1JU0MsQ0xPU0UgQ1VSU09SLCwsQ0xPU0Ug Y3Rlc3Q7CitDT01NSVQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxNywxLE1JU0MsQ09N TUlULCwsQ09NTUlUOworLS0KKy0tIFR1cm4gb2ZmIGxvZ19jYXRhbG9nIGFuZCBwZ19jbGFz cyB3aWxsIG5vdCBiZSBsb2dnZWQKK1NFVCBwZ19hdWRpdC5sb2dfY2F0YWxvZyA9IE9GRjsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDE4LDEsTUlTQyxTRVQsLCxTRVQgcGdfYXVkaXQu bG9nX2NhdGFsb2cgPSBPRkY7CitTRUxFQ1QgY291bnQoKikKKyAgRlJPTQorKAorCVNFTEVD VCByZWxuYW1lCisJICBGUk9NIHBnX2NsYXNzCisJIExJTUlUIDEKKyApIHN1YnF1ZXJ5Owor IGNvdW50IAorLS0tLS0tLQorICAgICAxCisoMSByb3cpCisKKy0tCistLSBUZXN0IHByZXBh cmVkIGluc2VydAorQ1JFQVRFIFRBQkxFIHRlc3QudGVzdF9pbnNlcnQKKygKKwlpZCBJTlQK Kyk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxOSwxLERETCxDUkVBVEUgVEFCTEUsVEFC TEUsdGVzdC50ZXN0X2luc2VydCwiQ1JFQVRFIFRBQkxFIHRlc3QudGVzdF9pbnNlcnQKKygK KwlpZCBJTlQKKyk7IgorUFJFUEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBBUworSU5TRVJUIElO VE8gdGVzdC50ZXN0X2luc2VydCAoaWQpCisJCQkJCSAgVkFMVUVTICgkMSk7CitOT1RJQ0U6 ICBBVURJVDogU0VTU0lPTiwyMCwxLFdSSVRFLFBSRVBBUkUsLCwiUFJFUEFSRSBwZ2NsYXNz c3RtdCAob2lkKSBBUworSU5TRVJUIElOVE8gdGVzdC50ZXN0X2luc2VydCAoaWQpCisJCQkJ CSAgVkFMVUVTICgkMSk7IgorRVhFQ1VURSBwZ2NsYXNzc3RtdCAoMSk7CitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiwyMSwxLFdSSVRFLElOU0VSVCxUQUJMRSx0ZXN0LnRlc3RfaW5zZXJ0 LCJQUkVQQVJFIHBnY2xhc3NzdG10IChvaWQpIEFTCitJTlNFUlQgSU5UTyB0ZXN0LnRlc3Rf aW5zZXJ0IChpZCkKKwkJCQkJICBWQUxVRVMgKCQxKTsiLDEKK05PVElDRTogIEFVRElUOiBT RVNTSU9OLDIxLDIsV1JJVEUsRVhFQ1VURSwsLEVYRUNVVEUgcGdjbGFzc3N0bXQgKDEpOwor LS0KKy0tIENoZWNrIHRoYXQgcHJpbWFyeSBrZXkgY3JlYXRpb24gaXMgbG9nZ2VkCitDUkVB VEUgVEFCTEUgcHVibGljLnRlc3QKKygKKwlpZCBJTlQsCisJbmFtZSBURVhULAorCWRlc2Ny aXB0aW9uIFRFWFQsCisJQ09OU1RSQUlOVCB0ZXN0X3BrZXkgUFJJTUFSWSBLRVkgKGlkKQor KTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIyLDEsRERMLENSRUFURSBUQUJMRSxUQUJM RSxwdWJsaWMudGVzdCwiQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0CisoCisJaWQgSU5ULAor CW5hbWUgVEVYVCwKKwlkZXNjcmlwdGlvbiBURVhULAorCUNPTlNUUkFJTlQgdGVzdF9wa2V5 IFBSSU1BUlkgS0VZIChpZCkKKyk7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjIsMSxE REwsQ1JFQVRFIFRBQkxFLElOREVYLHB1YmxpYy50ZXN0X3BrZXksIkNSRUFURSBUQUJMRSBw dWJsaWMudGVzdAorKAorCWlkIElOVCwKKwluYW1lIFRFWFQsCisJZGVzY3JpcHRpb24gVEVY VCwKKwlDT05TVFJBSU5UIHRlc3RfcGtleSBQUklNQVJZIEtFWSAoaWQpCispOyIKKy0tCist LSBDaGVjayB0aGF0IGFuYWx5emUgaXMgbG9nZ2VkCitBTkFMWVpFIHRlc3Q7CitOT1RJQ0U6 ICBBVURJVDogU0VTU0lPTiwyMywxLE1JU0MsQU5BTFlaRSwsLEFOQUxZWkUgdGVzdDsKKy0t CistLSBHcmFudHMgdG8gcHVibGljIHNob3VsZCBub3QgY2F1c2Ugb2JqZWN0IGxvZ2dpbmcg KHNlc3Npb24gbG9nZ2luZyB3aWxsCistLSBzdGlsbCBoYXBwZW4pCitHUkFOVCBTRUxFQ1QK KyAgT04gVEFCTEUgcHVibGljLnRlc3QKKyAgVE8gUFVCTElDOworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMjQsMSxST0xFLEdSQU5ULFRBQkxFLCwiR1JBTlQgU0VMRUNUCisgIE9OIFRB QkxFIHB1YmxpYy50ZXN0CisgIFRPIFBVQkxJQzsiCitTRUxFQ1QgKgorICBGUk9NIHRlc3Q7 CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyNSwxLFJFQUQsU0VMRUNULFRBQkxFLHB1Ymxp Yy50ZXN0LCJTRUxFQ1QgKgorICBGUk9NIHRlc3Q7IgorIGlkIHwgbmFtZSB8IGRlc2NyaXB0 aW9uIAorLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworLS0gQ2hlY2sg dGhhdCBzdGF0ZW1lbnRzIHdpdGhvdXQgY29sdW1ucyBsb2cKK1NFTEVDVAorICBGUk9NIHRl c3Q7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyNiwxLFJFQUQsU0VMRUNULFRBQkxFLHB1 YmxpYy50ZXN0LCJTRUxFQ1QKKyAgRlJPTSB0ZXN0OyIKKy0tCisoMCByb3dzKQorCitTRUxF Q1QgMSwKKwkgICBjdXJyZW50X3VzZXI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyNywx LFJFQUQsU0VMRUNULCwsIlNFTEVDVCAxLAorCSAgIGN1cnJlbnRfdXNlcjsiCisgP2NvbHVt bj8gfCBjdXJyZW50X3VzZXIgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgICAgICAg IDEgfCBzdXBlcgorKDEgcm93KQorCitETyAkJAorREVDTEFSRQorCXRlc3QgSU5UOworQkVH SU4KKwlTRUxFQ1QgMQorCSAgSU5UTyB0ZXN0OworRU5EICQkOworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMjgsMSxGVU5DVElPTixETywsLCJETyAkJAorREVDTEFSRQorCXRlc3QgSU5U OworQkVHSU4KKwlTRUxFQ1QgMQorCSAgSU5UTyB0ZXN0OworRU5EICQkOyIKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDI4LDIsUkVBRCxTRUxFQ1QsLCxTRUxFQ1QgMQorQ09OVEVYVDog IFNRTCBzdGF0ZW1lbnQgIlNFTEVDVCAxIgorUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2Nv ZGVfYmxvY2sgbGluZSA1IGF0IFNRTCBzdGF0ZW1lbnQKK2V4cGxhaW4gc2VsZWN0IDE7CitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyOSwxLFJFQUQsU0VMRUNULCwsZXhwbGFpbiBzZWxl Y3QgMTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDIsTUlTQyxFWFBMQUlOLCwsZXhw bGFpbiBzZWxlY3QgMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVz dWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9MSB3aWR0aD0wKQorKDEgcm93KQorCistLQor LS0gVGVzdCB0aGF0IGxvb2tzIGluc2lkZSBvZiBkbyBibG9ja3MgbG9nCitJTlNFUlQgSU5U TyBURVNUIChpZCkKKwkJICBWQUxVRVMgKDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s MzAsMSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3QsIklOU0VSVCBJTlRPIFRFU1Qg KGlkKQorCQkgIFZBTFVFUyAoMSk7IgorSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFM VUVTICgyKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMxLDEsV1JJVEUsSU5TRVJULFRB QkxFLHB1YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxVRVMgKDIp OyIKK0lOU0VSVCBJTlRPIFRFU1QgKGlkKQorCQkgIFZBTFVFUyAoMyk7CitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiwzMiwxLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdCwiSU5T RVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgzKTsiCitETyAkJAorREVDTEFSRQor CXJlc3VsdCBSRUNPUkQ7CitCRUdJTgorCUZPUiByZXN1bHQgSU4KKwkJU0VMRUNUIGlkCisJ CSAgRlJPTSB0ZXN0CisJTE9PUAorCQlJTlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJCSBWQUxV RVMgKHJlc3VsdC5pZCArIDEwMCk7CisJRU5EIExPT1A7CitFTkQgJCQ7CitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiwzMywxLEZVTkNUSU9OLERPLCwsIkRPICQkCitERUNMQVJFCisJcmVz dWx0IFJFQ09SRDsKK0JFR0lOCisJRk9SIHJlc3VsdCBJTgorCQlTRUxFQ1QgaWQKKwkJICBG Uk9NIHRlc3QKKwlMT09QCisJCUlOU0VSVCBJTlRPIHRlc3QgKGlkKQorCQkJIFZBTFVFUyAo cmVzdWx0LmlkICsgMTAwKTsKKwlFTkQgTE9PUDsKK0VORCAkJDsiCitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiwzMywyLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy50ZXN0LCJTRUxFQ1Qg aWQKKwkJICBGUk9NIHRlc3QiCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5l X2NvZGVfYmxvY2sgbGluZSA1IGF0IEZPUiBvdmVyIFNFTEVDVCByb3dzCitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiwzMywzLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdCwiSU5T RVJUIElOVE8gdGVzdCAoaWQpCisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIiwsLAor Q09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIklOU0VSVCBJTlRPIHRlc3QgKGlkKQorCQkJIFZB TFVFUyAocmVzdWx0LmlkICsgMTAwKSIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2Rl X2Jsb2NrIGxpbmUgOSBhdCBTUUwgc3RhdGVtZW50CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwzMyw0LFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdCwiSU5TRVJUIElOVE8gdGVz dCAoaWQpCisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIiwsLAorQ09OVEVYVDogIFNR TCBzdGF0ZW1lbnQgIklOU0VSVCBJTlRPIHRlc3QgKGlkKQorCQkJIFZBTFVFUyAocmVzdWx0 LmlkICsgMTAwKSIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUg OSBhdCBTUUwgc3RhdGVtZW50CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzMyw1LFdSSVRF LElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdCwiSU5TRVJUIElOVE8gdGVzdCAoaWQpCisJCQkg VkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIiwsLAorQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQg IklOU0VSVCBJTlRPIHRlc3QgKGlkKQorCQkJIFZBTFVFUyAocmVzdWx0LmlkICsgMTAwKSIK K1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgOSBhdCBTUUwgc3Rh dGVtZW50CistLQorLS0gVGVzdCBvYmZ1c2NhdGVkIGR5bmFtaWMgc3FsIGZvciBjbGVhbiBs b2dnaW5nCitETyAkJAorREVDTEFSRQorCXRhYmxlX25hbWUgVEVYVCA9ICdkb190YWJsZSc7 CitCRUdJTgorCUVYRUNVVEUgJ0NSRUFURSBUQUJMRSAnIHx8IHRhYmxlX25hbWUgfHwgJyAo IndlaXJkIG5hbWUiIElOVCknOworCUVYRUNVVEUgJ0RST1AgdGFibGUgJyB8fCB0YWJsZV9u YW1lOworRU5EICQkOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzQsMSxGVU5DVElPTixE TywsLCJETyAkJAorREVDTEFSRQorCXRhYmxlX25hbWUgVEVYVCA9ICdkb190YWJsZSc7CitC RUdJTgorCUVYRUNVVEUgJ0NSRUFURSBUQUJMRSAnIHx8IHRhYmxlX25hbWUgfHwgJyAoIiJ3 ZWlyZCBuYW1lIiIgSU5UKSc7CisJRVhFQ1VURSAnRFJPUCB0YWJsZSAnIHx8IHRhYmxlX25h bWU7CitFTkQgJCQ7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzQsMixEREwsQ1JFQVRF IFRBQkxFLFRBQkxFLHB1YmxpYy5kb190YWJsZSwiQ1JFQVRFIFRBQkxFIGRvX3RhYmxlICgi IndlaXJkIG5hbWUiIiBJTlQpIgorQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIkNSRUFURSBU QUJMRSBkb190YWJsZSAoIndlaXJkIG5hbWUiIElOVCkiCitQTC9wZ1NRTCBmdW5jdGlvbiBp bmxpbmVfY29kZV9ibG9jayBsaW5lIDUgYXQgRVhFQ1VURSBzdGF0ZW1lbnQKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDM0LDMsRERMLERST1AgVEFCTEUsVEFCTEUscHVibGljLmRvX3Rh YmxlLERST1AgdGFibGUgZG9fdGFibGUKK0NPTlRFWFQ6ICBTUUwgc3RhdGVtZW50ICJEUk9Q IHRhYmxlIGRvX3RhYmxlIgorUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sg bGluZSA2IGF0IEVYRUNVVEUgc3RhdGVtZW50CistLQorLS0gR2VuZXJhdGUgYW4gZXJyb3Ig YW5kIG1ha2Ugc3VyZSB0aGUgc3RhY2sgZ2V0cyBjbGVhcmVkCitETyAkJAorQkVHSU4KKwlD UkVBVEUgVEFCTEUgYm9ndXMudGVzdF9ibG9jaworCSgKKwkJaWQgSU5UCisJKTsKK0VORCAk JDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM1LDEsRlVOQ1RJT04sRE8sLCwiRE8gJCQK K0JFR0lOCisJQ1JFQVRFIFRBQkxFIGJvZ3VzLnRlc3RfYmxvY2sKKwkoCisJCWlkIElOVAor CSk7CitFTkQgJCQ7IgorRVJST1I6ICBzY2hlbWEgImJvZ3VzIiBkb2VzIG5vdCBleGlzdAor TElORSAxOiBDUkVBVEUgVEFCTEUgYm9ndXMudGVzdF9ibG9jaworICAgICAgICAgICAgICAg ICAgICAgXgorUVVFUlk6ICBDUkVBVEUgVEFCTEUgYm9ndXMudGVzdF9ibG9jaworCSgKKwkJ aWQgSU5UCisJKQorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Js b2NrIGxpbmUgMyBhdCBTUUwgc3RhdGVtZW50CistLQorLS0gVGVzdCBhbHRlciB0YWJsZSBz dGF0ZW1lbnRzCitBTFRFUiBUQUJMRSBwdWJsaWMudGVzdAorCURST1AgQ09MVU1OIGRlc2Ny aXB0aW9uIDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM2LDEsRERMLEFMVEVSIFRBQkxF LFRBQkxFIENPTFVNTixwdWJsaWMudGVzdC5kZXNjcmlwdGlvbiwiQUxURVIgVEFCTEUgcHVi bGljLnRlc3QKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlvbiA7IgorTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMzYsMSxEREwsQUxURVIgVEFCTEUsVEFCTEUscHVibGljLnRlc3QsIkFMVEVS IFRBQkxFIHB1YmxpYy50ZXN0CisJRFJPUCBDT0xVTU4gZGVzY3JpcHRpb24gOyIKK0FMVEVS IFRBQkxFIHB1YmxpYy50ZXN0CisJUkVOQU1FIFRPIHRlc3QyOworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMzcsMSxEREwsQUxURVIgVEFCTEUsVEFCTEUscHVibGljLnRlc3QyLCJBTFRF UiBUQUJMRSBwdWJsaWMudGVzdAorCVJFTkFNRSBUTyB0ZXN0MjsiCitBTFRFUiBUQUJMRSBw dWJsaWMudGVzdDIKKwlTRVQgU0NIRU1BIHRlc3Q7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwzOCwxLERETCxBTFRFUiBUQUJMRSxUQUJMRSx0ZXN0LnRlc3QyLCJBTFRFUiBUQUJMRSBw dWJsaWMudGVzdDIKKwlTRVQgU0NIRU1BIHRlc3Q7IgorQUxURVIgVEFCTEUgdGVzdC50ZXN0 MgorCUFERCBDT0xVTU4gZGVzY3JpcHRpb24gVEVYVDsKK05PVElDRTogIEFVRElUOiBTRVNT SU9OLDM5LDEsRERMLEFMVEVSIFRBQkxFLFRBQkxFLHRlc3QudGVzdDIsIkFMVEVSIFRBQkxF IHRlc3QudGVzdDIKKwlBREQgQ09MVU1OIGRlc2NyaXB0aW9uIFRFWFQ7IgorQUxURVIgVEFC TEUgdGVzdC50ZXN0MgorCURST1AgQ09MVU1OIGRlc2NyaXB0aW9uOworTk9USUNFOiAgQVVE SVQ6IFNFU1NJT04sNDAsMSxEREwsQUxURVIgVEFCTEUsVEFCTEUgQ09MVU1OLHRlc3QudGVz dDIuZGVzY3JpcHRpb24sIkFMVEVSIFRBQkxFIHRlc3QudGVzdDIKKwlEUk9QIENPTFVNTiBk ZXNjcmlwdGlvbjsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0MCwxLERETCxBTFRFUiBU QUJMRSxUQUJMRSx0ZXN0LnRlc3QyLCJBTFRFUiBUQUJMRSB0ZXN0LnRlc3QyCisJRFJPUCBD T0xVTU4gZGVzY3JpcHRpb247IgorRFJPUCBUQUJMRSB0ZXN0LnRlc3QyOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sNDEsMSxEREwsRFJPUCBUQUJMRSxUQUJMRSx0ZXN0LnRlc3QyLERS T1AgVEFCTEUgdGVzdC50ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQxLDEsRERM LERST1AgVEFCTEUsVEFCTEUgQ09OU1RSQUlOVCx0ZXN0X3BrZXkgb24gdGVzdC50ZXN0MixE Uk9QIFRBQkxFIHRlc3QudGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0MSwxLERE TCxEUk9QIFRBQkxFLElOREVYLHRlc3QudGVzdF9wa2V5LERST1AgVEFCTEUgdGVzdC50ZXN0 MjsKKy0tCistLSBUZXN0IG11bHRpcGxlIHN0YXRlbWVudHMgd2l0aCBvbmUgc2VtaS1jb2xv bgorQ1JFQVRFIFNDSEVNQSBmb28KKwlDUkVBVEUgVEFCTEUgZm9vLmJhciAoaWQgaW50KQor CUNSRUFURSBUQUJMRSBmb28uYmF6IChpZCBpbnQpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sNDIsMSxEREwsQ1JFQVRFIFNDSEVNQSxTQ0hFTUEsZm9vLCJDUkVBVEUgU0NIRU1BIGZv bworCUNSRUFURSBUQUJMRSBmb28uYmFyIChpZCBpbnQpCisJQ1JFQVRFIFRBQkxFIGZvby5i YXogKGlkIGludCk7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDIsMSxEREwsQ1JFQVRF IFNDSEVNQSxUQUJMRSxmb28uYmFyLCJDUkVBVEUgU0NIRU1BIGZvbworCUNSRUFURSBUQUJM RSBmb28uYmFyIChpZCBpbnQpCisJQ1JFQVRFIFRBQkxFIGZvby5iYXogKGlkIGludCk7Igor Tk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDIsMSxEREwsQ1JFQVRFIFNDSEVNQSxUQUJMRSxm b28uYmF6LCJDUkVBVEUgU0NIRU1BIGZvbworCUNSRUFURSBUQUJMRSBmb28uYmFyIChpZCBp bnQpCisJQ1JFQVRFIFRBQkxFIGZvby5iYXogKGlkIGludCk7IgorLS0KKy0tIFRlc3QgYWdn cmVnYXRlCitDUkVBVEUgRlVOQ1RJT04gcHVibGljLmludF9hZGQKKygKKwlhIElOVCwKKwli IElOVAorKQorCVJFVFVSTlMgSU5UIExBTkdVQUdFIHBscGdzcWwgQVMgJCQKK0JFR0lOCisJ cmV0dXJuIGEgKyBiOworRU5EICQkOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDMsMSxE REwsQ1JFQVRFIEZVTkNUSU9OLEZVTkNUSU9OLCJwdWJsaWMuaW50X2FkZChpbnRlZ2VyLGlu dGVnZXIpIiwiQ1JFQVRFIEZVTkNUSU9OIHB1YmxpYy5pbnRfYWRkCisoCisJYSBJTlQsCisJ YiBJTlQKKykKKwlSRVRVUk5TIElOVCBMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitCRUdJTgor CXJldHVybiBhICsgYjsKK0VORCAkJDsiCitTRUxFQ1QgaW50X2FkZCgxLCAxKTsKK05PVElD RTogIEFVRElUOiBTRVNTSU9OLDQ0LDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUIGludF9hZGQo MSwgMSk7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDQsMixGVU5DVElPTixFWEVDVVRF LEZVTkNUSU9OLHB1YmxpYy5pbnRfYWRkLCJTRUxFQ1QgaW50X2FkZCgxLCAxKTsiCisgaW50 X2FkZCAKKy0tLS0tLS0tLQorICAgICAgIDIKKygxIHJvdykKKworQ1JFQVRFIEFHR1JFR0FU RSBwdWJsaWMuc3VtX3Rlc3QoSU5UKSAoU0ZVTkM9cHVibGljLmludF9hZGQsIFNUWVBFPUlO VCwgSU5JVENPTkQ9JzAnKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQ1LDEsRERMLENS RUFURSBBR0dSRUdBVEUsQUdHUkVHQVRFLHB1YmxpYy5zdW1fdGVzdChpbnRlZ2VyKSwiQ1JF QVRFIEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoSU5UKSAoU0ZVTkM9cHVibGljLmludF9h ZGQsIFNUWVBFPUlOVCwgSU5JVENPTkQ9JzAnKTsiCitBTFRFUiBBR0dSRUdBVEUgcHVibGlj LnN1bV90ZXN0KGludGVnZXIpIFJFTkFNRSBUTyBzdW1fdGVzdDI7CitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiw0NiwxLERETCxBTFRFUiBBR0dSRUdBVEUsQUdHUkVHQVRFLHB1YmxpYy5z dW1fdGVzdDIoaW50ZWdlciksQUxURVIgQUdHUkVHQVRFIHB1YmxpYy5zdW1fdGVzdChpbnRl Z2VyKSBSRU5BTUUgVE8gc3VtX3Rlc3QyOworLS0KKy0tIFRlc3QgY29udmVyc2lvbgorQ1JF QVRFIENPTlZFUlNJT04gcHVibGljLmNvbnZlcnNpb25fdGVzdCBGT1IgJ1NRTF9BU0NJSScg VE8gJ01VTEVfSU5URVJOQUwnIEZST00gcGdfY2F0YWxvZy5hc2NpaV90b19taWM7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiw0NywxLERETCxDUkVBVEUgQ09OVkVSU0lPTixDT05WRVJT SU9OLHB1YmxpYy5jb252ZXJzaW9uX3Rlc3QsQ1JFQVRFIENPTlZFUlNJT04gcHVibGljLmNv bnZlcnNpb25fdGVzdCBGT1IgJ1NRTF9BU0NJSScgVE8gJ01VTEVfSU5URVJOQUwnIEZST00g cGdfY2F0YWxvZy5hc2NpaV90b19taWM7CitBTFRFUiBDT05WRVJTSU9OIHB1YmxpYy5jb252 ZXJzaW9uX3Rlc3QgUkVOQU1FIFRPIGNvbnZlcnNpb25fdGVzdDI7CitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiw0OCwxLERETCxBTFRFUiBDT05WRVJTSU9OLENPTlZFUlNJT04scHVibGlj LmNvbnZlcnNpb25fdGVzdDIsQUxURVIgQ09OVkVSU0lPTiBwdWJsaWMuY29udmVyc2lvbl90 ZXN0IFJFTkFNRSBUTyBjb252ZXJzaW9uX3Rlc3QyOworLS0KKy0tIFRlc3QgY3JlYXRlL2Fs dGVyL2Ryb3AgZGF0YWJhc2UKK0NSRUFURSBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Npb25f cGdhdWRpdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQ5LDEsRERMLENSRUFURSBEQVRB QkFTRSwsLENSRUFURSBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDsKK0FM VEVSIERBVEFCQVNFIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0IFJFTkFNRSBUTyBjb250 cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1MCwx LERETCxBTFRFUiBEQVRBQkFTRSwsLEFMVEVSIERBVEFCQVNFIGNvbnRyaWJfcmVncmVzc2lv bl9wZ2F1ZGl0IFJFTkFNRSBUTyBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDI7CitEUk9Q IERBVEFCQVNFIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0MjsKK05PVElDRTogIEFVRElU OiBTRVNTSU9OLDUxLDEsRERMLERST1AgREFUQUJBU0UsLCxEUk9QIERBVEFCQVNFIGNvbnRy aWJfcmVncmVzc2lvbl9wZ2F1ZGl0MjsKKy0tCistLSBUZXN0IHRoYXQgZnJlZXMgYSBtZW1v cnkgY29udGV4dCBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQKK0NSRUFURSBUQUJMRSBob2dlCiso CisJaWQgaW50CispOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNTIsMSxEREwsQ1JFQVRF IFRBQkxFLFRBQkxFLHB1YmxpYy5ob2dlLCJDUkVBVEUgVEFCTEUgaG9nZQorKAorCWlkIGlu dAorKTsiCitDUkVBVEUgRlVOQ1RJT04gdGVzdCgpCisJUkVUVVJOUyBJTlQgQVMgJCQKK0RF Q0xBUkUKKwljdXIxIGN1cnNvciBmb3Igc2VsZWN0ICogZnJvbSBob2dlOworCXRtcCBpbnQ7 CitCRUdJTgorCU9QRU4gY3VyMTsKKwlGRVRDSCBjdXIxIGludG8gdG1wOworCVJFVFVSTiB0 bXA7CitFTkQgJCQKK0xBTkdVQUdFIHBscGdzcWwgOworTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sNTMsMSxEREwsQ1JFQVRFIEZVTkNUSU9OLEZVTkNUSU9OLHB1YmxpYy50ZXN0KCksIkNS RUFURSBGVU5DVElPTiB0ZXN0KCkKKwlSRVRVUk5TIElOVCBBUyAkJAorREVDTEFSRQorCWN1 cjEgY3Vyc29yIGZvciBzZWxlY3QgKiBmcm9tIGhvZ2U7CisJdG1wIGludDsKK0JFR0lOCisJ T1BFTiBjdXIxOworCUZFVENIIGN1cjEgaW50byB0bXA7CisJUkVUVVJOIHRtcDsKK0VORCAk JAorTEFOR1VBR0UgcGxwZ3NxbCA7IgorU0VMRUNUIHRlc3QoKTsKK05PVElDRTogIEFVRElU OiBTRVNTSU9OLDU0LDEsUkVBRCxTRUxFQ1QsLCxTRUxFQ1QgdGVzdCgpOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sNTQsMixGVU5DVElPTixFWEVDVVRFLEZVTkNUSU9OLHB1YmxpYy50 ZXN0LFNFTEVDVCB0ZXN0KCk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1NCwzLFJFQUQs U0VMRUNULFRBQkxFLHB1YmxpYy5ob2dlLHNlbGVjdCAqIGZyb20gaG9nZQorQ09OVEVYVDog IFBML3BnU1FMIGZ1bmN0aW9uIHRlc3QoKSBsaW5lIDYgYXQgT1BFTgorIHRlc3QgCistLS0t LS0KKyAgICAgCisoMSByb3cpCisKKy0tCistLSBEZWxldGUgYWxsIHJvd3MgdGhlbiBkZWxl dGUgMSByb3cKK1NFVCBwZ19hdWRpdC5sb2cgPSAnd3JpdGUnOworU0VUIHBnX2F1ZGl0LnJv bGUgPSAnYXVkaXRvcic7CitjcmVhdGUgdGFibGUgYmFyCisoCisJY29sIGludAorKTsKK2dy YW50IGRlbGV0ZQorICAgb24gYmFyCisgICB0byBhdWRpdG9yOworaW5zZXJ0IGludG8gYmFy IChjb2wpCisJCSB2YWx1ZXMgKDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNTUsMSxX UklURSxJTlNFUlQsVEFCTEUscHVibGljLmJhciwiaW5zZXJ0IGludG8gYmFyIChjb2wpCisJ CSB2YWx1ZXMgKDEpOyIKK2RlbGV0ZSBmcm9tIGJhcjsKK05PVElDRTogIEFVRElUOiBPQkpF Q1QsNTYsMSxXUklURSxERUxFVEUsVEFCTEUscHVibGljLmJhcixkZWxldGUgZnJvbSBiYXI7 CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1NiwxLFdSSVRFLERFTEVURSxUQUJMRSxwdWJs aWMuYmFyLGRlbGV0ZSBmcm9tIGJhcjsKK2luc2VydCBpbnRvIGJhciAoY29sKQorCQkgdmFs dWVzICgxKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDU3LDEsV1JJVEUsSU5TRVJULFRB QkxFLHB1YmxpYy5iYXIsImluc2VydCBpbnRvIGJhciAoY29sKQorCQkgdmFsdWVzICgxKTsi CitkZWxldGUgZnJvbSBiYXIKKyB3aGVyZSBjb2wgPSAxOworTk9USUNFOiAgQVVESVQ6IE9C SkVDVCw1OCwxLFdSSVRFLERFTEVURSxUQUJMRSxwdWJsaWMuYmFyLCJkZWxldGUgZnJvbSBi YXIKKyB3aGVyZSBjb2wgPSAxOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDU4LDEsV1JJ VEUsREVMRVRFLFRBQkxFLHB1YmxpYy5iYXIsImRlbGV0ZSBmcm9tIGJhcgorIHdoZXJlIGNv bCA9IDE7IgorZHJvcCB0YWJsZSBiYXI7CistLQorLS0gR3JhbnQgcm9sZXMgdG8gZWFjaCBv dGhlcgorU0VUIHBnX2F1ZGl0LmxvZyA9ICdyb2xlJzsKK0dSQU5UIHVzZXIxIFRPIHVzZXIy OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNTksMSxST0xFLEdSQU5UIFJPTEUsLCxHUkFO VCB1c2VyMSBUTyB1c2VyMjsKK1JFVk9LRSB1c2VyMSBGUk9NIHVzZXIyOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sNjAsMSxST0xFLFJFVk9LRSBST0xFLCwsUkVWT0tFIHVzZXIxIEZS T00gdXNlcjI7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LS0xLjAu MC5zcWwgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LS0xLjAuMC5zcWwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5ZWU4MwotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQtLTEuMC4wLnNxbApAQCAtMCwwICsxLDIyIEBA CisvKiBwZ19hdWRpdC9wZ19hdWRpdC0tMS4wLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlm IHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhU RU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gcGdfYXVkaXQiIHRvIGxvYWQg dGhpcyBmaWxlLlxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBwZ19hdWRpdF9kZGxfY29tbWFu ZF9lbmQoKQorCVJFVFVSTlMgZXZlbnRfdHJpZ2dlcgorCUxBTkdVQUdFIEMKKwlBUyAnTU9E VUxFX1BBVEhOQU1FJywgJ3BnX2F1ZGl0X2RkbF9jb21tYW5kX2VuZCc7CisKK0NSRUFURSBF VkVOVCBUUklHR0VSIHBnX2F1ZGl0X2RkbF9jb21tYW5kX2VuZAorCU9OIGRkbF9jb21tYW5k X2VuZAorCUVYRUNVVEUgUFJPQ0VEVVJFIHBnX2F1ZGl0X2RkbF9jb21tYW5kX2VuZCgpOwor CitDUkVBVEUgRlVOQ1RJT04gcGdfYXVkaXRfc3FsX2Ryb3AoKQorCVJFVFVSTlMgZXZlbnRf dHJpZ2dlcgorCUxBTkdVQUdFIEMKKwlBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2F1ZGl0 X3NxbF9kcm9wJzsKKworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgcGdfYXVkaXRfc3FsX2Ryb3AK KwlPTiBzcWxfZHJvcAorCUVYRUNVVEUgUFJPQ0VEVVJFIHBnX2F1ZGl0X3NxbF9kcm9wKCk7 CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmMgYi9jb250cmliL3Bn X2F1ZGl0L3BnX2F1ZGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MTFkZGNkMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQu YwpAQCAtMCwwICsxLDE3MDcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBw Z19hdWRpdC5jCisgKgorICogQW4gYXVkaXRpbmcgZXh0ZW5zaW9uIGZvciBQb3N0Z3JlU1FM LiBJbXByb3ZlcyBvbiBzdGFuZGFyZCBzdGF0ZW1lbnQgbG9nZ2luZworICogYnkgYWRkaW5n IG1vcmUgbG9nZ2luZyBjbGFzc2VzLCBvYmplY3QgbGV2ZWwgbG9nZ2luZywgYW5kIHByb3Zp ZGluZworICogZnVsbHktcXVhbGlmaWVkIG9iamVjdCBuYW1lcyBmb3IgYWxsIERNTCBhbmQg bWFueSBEREwgc3RhdGVtZW50cyAoU2VlCisgKiBwZ19hdWRpdC5zZ21sIGZvciBkZXRhaWxz KS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCSAgY29udHJp Yi9wZ19hdWRpdC9wZ19hdWRpdC5jCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFp bHMuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgorI2luY2x1ZGUgImFjY2Vzcy94 YWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9nLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9vYmplY3RhY2Nlc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kYmNvbW1h bmRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCisj aW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAibGlicHEvYXV0aC5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisjaW5jbHVk ZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1 dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1 ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisjaW5jbHVk ZSAidXRpbHMvdGltZXN0YW1wLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKwordm9pZCBfUEdf aW5pdCh2b2lkKTsKKworLyoKKyAqIEV2ZW50IHRyaWdnZXIgcHJvdG90eXBlcworICovCitE YXR1bSBwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUyk7CitEYXR1 bSBwZ19hdWRpdF9zcWxfZHJvcChQR19GVU5DVElPTl9BUkdTKTsKKworUEdfRlVOQ1RJT05f SU5GT19WMShwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQpOworUEdfRlVOQ1RJT05fSU5GT19W MShwZ19hdWRpdF9zcWxfZHJvcCk7CisKKy8qCisgKiBhdWRpdFJvbGUgaXMgdGhlIHN0cmlu ZyB2YWx1ZSBvZiB0aGUgcGdfYXVkaXQucm9sZSBHVUMsIHdoaWNoIGNvbnRhaW5zIHRoZQor ICogcm9sZSBmb3IgZ3JhbnQtYmFzZWQgYXVkaXRpbmcuCisgKi8KK2NoYXIgKmF1ZGl0Um9s ZSA9IE5VTEw7CisKKy8qCisgKiBhdWRpdExvZyBpcyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRo ZSBwZ19hdWRpdC5sb2cgR1VDLCBlLmcuICJyZWFkLCB3cml0ZSwgZGRsIgorICogKGl0J3Mg bm90IHVzZWQgYnkgdGhlIG1vZHVsZSBidXQgaXMgcmVxdWlyZWQgYnkgRGVmaW5lQ3VzdG9t U3RyaW5nVmFyaWFibGUpLgorICogRWFjaCB0b2tlbiBjb3JyZXNwb25kcyB0byBhIGZsYWcg aW4gZW51bSBMb2dDbGFzcyBiZWxvdy4gV2UgY29udmVydCB0aGUgbGlzdAorICogb2YgdG9r ZW5zIGludG8gYSBiaXRtYXAgaW4gYXVkaXRMb2dCaXRtYXAgZm9yIGludGVybmFsIHVzZS4K KyAqLworY2hhciAqYXVkaXRMb2cgPSBOVUxMOworc3RhdGljIHVpbnQ2NCBhdWRpdExvZ0Jp dG1hcCA9IDA7CisKKy8qCisgKiBhdWRpdExvZ1BhcmFtZXRlciBjb250cm9scyB3aGV0aGVy IHBhcmFtZXRlcnMgcGFzc2VkIHdpdGggdGhlIHN0YXRlbWVudCBhcmUKKyAqIGluY2x1ZGVk IGluIHRoZSBhdWRpdCBsb2cuCisgKi8KK2Jvb2wgYXVkaXRMb2dQYXJhbWV0ZXIgPSBmYWxz ZTsKKworLyoKKyAqIGF1ZGl0TG9nUmVsYXRpb24gY29udHJvbHMgd2hldGhlciBhbGwgcmVs YXRpb25zIGFyZSBsb2dnZWQgZm9yIFJFQUQgYW5kCisgKiBXUklURSBjbGFzc2VzIGR1cmlu ZyBzZXNzaW9uIGxvZ2dpbmcuCisgKi8KK2Jvb2wgYXVkaXRMb2dSZWxhdGlvbiA9IGZhbHNl OworCisvKgorICogYXVkaXRMb2dDYXRhbG9nIGFsbG93cyBsb2dnaW5nIG9mIHJlbGF0aW9u cyBpbiBwZ19jYXRhbG9nIHdoZW4gYSBxdWVyeQorICogY29udGFpbnMgKmFsbCogcGdfY2F0 YWxvZyByZWxhdGlvbnMuCisgKi8KK2Jvb2wgYXVkaXRMb2dDYXRhbG9nID0gZmFsc2U7CisK Ky8qCisgKiBhdWRpdExvZ05vdGljZSByYWlzZXMgYSBub3RpY2UgYXMgd2VsbCBhcyBsb2dn aW5nIHZpYSB0aGUgc3RhbmRhcmQgZmFjaWxpdHkuCisgKiBUaGlzIGlzIHByaW1hcmlseSBm b3IgdGhlIGJlbmVmaXQgb2YgdGVzdGluZy4KKyAqLworYm9vbCBhdWRpdExvZ05vdGljZSA9 IGZhbHNlOworCisvKgorICogU3RyaW5nIGNvbnN0YW50cyBmb3IgYXVkaXQgdHlwZXMgLSB1 c2VkIHdoZW4gbG9nZ2luZyB0byBkaXN0aW5ndWlzaCBzZXNzaW9uCisgKiB2cy4gb2JqZWN0 IGF1ZGl0aW5nLgorICovCisjZGVmaW5lIEFVRElUX1RZUEVfT0JKRUNUCSJPQkpFQ1QiCisj ZGVmaW5lIEFVRElUX1RZUEVfU0VTU0lPTgkiU0VTU0lPTiIKKworLyoKKyAqIFN0cmluZyBj b25zdGFudHMgZm9yIGxvZyBjbGFzc2VzIC0gdXNlZCB3aGVuIHByb2Nlc3NpbmcgdG9rZW5z IGluIHRoZQorICogcGdfYXVkaXQubG9nIEdVQy4KKyAqLworI2RlZmluZSBDTEFTU19EREwJ CQkiRERMIgorI2RlZmluZSBDTEFTU19GVU5DVElPTgkJIkZVTkNUSU9OIgorI2RlZmluZSBD TEFTU19NSVNDCQkJIk1JU0MiCisjZGVmaW5lIENMQVNTX1JFQUQJCQkiUkVBRCIKKyNkZWZp bmUgQ0xBU1NfUk9MRQkJCSJST0xFIgorI2RlZmluZSBDTEFTU19XUklURQkJCSJXUklURSIK KworI2RlZmluZSBDTEFTU19BTEwJCQkiQUxMIgorI2RlZmluZSBDTEFTU19OT05FCQkJIk5P TkUiCisKKy8qIExvZyBjbGFzcyBlbnVtIHVzZWQgdG8gcmVwcmVzZW50IGJpdHMgaW4gYXVk aXRMb2dCaXRtYXAgKi8KK2VudW0gTG9nQ2xhc3MKK3sKKwlMT0dfTk9ORSA9IDAsCisKKwkv KiBEREw6IENSRUFURS9EUk9QL0FMVEVSICovCisJTE9HX0RETCA9ICgxIDw8IDEpLAorCisJ LyogRnVuY3Rpb24gZXhlY3V0aW9uICovCisJTE9HX0ZVTkNUSU9OID0gKDEgPDwgMiksCisK KwkvKiBTdGF0ZW1lbnRzIG5vdCBjb3ZlcmVkIGJ5IGFub3RoZXIgY2xhc3MgKi8KKwlMT0df TUlTQyA9ICgxIDw8IDMpLAorCisJLyogU0VMRUNUICovCisJTE9HX1JFQUQgPSAoMSA8PCA0 KSwKKworCS8qIEdSQU5ULCBSRVZPS0UsIENSRUFURS9BTFRFUi9EUk9QIFJPTEUgKi8KKwlM T0dfUk9MRSA9ICgxIDw8IDUpLAorCisJLyogSU5TRVJULCBVUERBVEUsIERFTEVURSwgVFJV TkNBVEUgKi8KKwlMT0dfV1JJVEUgPSAoMSA8PCA2KSwKKworCS8qIEFic29sdXRlbHkgZXZl cnl0aGluZyAqLworCUxPR19BTEwgPSB+KHVpbnQ2NCkwCit9OworCisvKiBTdHJpbmcgY29u c3RhbnRzIGZvciBsb2dnaW5nIGNvbW1hbmRzICovCisjZGVmaW5lIENPTU1BTkRfREVMRVRF CQkiREVMRVRFIgorI2RlZmluZSBDT01NQU5EX0VYRUNVVEUJCSJFWEVDVVRFIgorI2RlZmlu ZSBDT01NQU5EX0lOU0VSVAkJIklOU0VSVCIKKyNkZWZpbmUgQ09NTUFORF9VUERBVEUJCSJV UERBVEUiCisjZGVmaW5lIENPTU1BTkRfU0VMRUNUCQkiU0VMRUNUIgorCisjZGVmaW5lIENP TU1BTkRfQUxURVJfUk9MRQkJIkFMVEVSIFJPTEUiCisjZGVmaW5lIENPTU1BTkRfRFJPUF9S T0xFCQkiQ1JFQVRFIFJPTEUiCisjZGVmaW5lIENPTU1BTkRfQ1JFQVRFX0RBVEFCQVNFCSJD UkVBVEUgREFUQUJBU0UiCisjZGVmaW5lIENPTU1BTkRfQUxURVJfREFUQUJBU0UJIkFMVEVS IERBVEFCQVNFIgorI2RlZmluZSBDT01NQU5EX0RST1BfREFUQUJBU0UJIkRST1AgREFUQUJB U0UiCisKKyNkZWZpbmUgQ09NTUFORF9VTktOT1dOCQkiVU5LTk9XTiIKKworLyogU3RyaW5n IGNvbnN0YW50cyBmb3IgbG9nZ2luZyBvYmplY3QgdHlwZXMgKi8KKyNkZWZpbmUgT0JKRUNU X1RZUEVfQ09NUE9TSVRFX1RZUEUJIkNPTVBPU0lURSBUWVBFIgorI2RlZmluZSBPQkpFQ1Rf VFlQRV9GT1JFSUdOX1RBQkxFCSJGT1JFSUdOIFRBQkxFIgorI2RlZmluZSBPQkpFQ1RfVFlQ RV9GVU5DVElPTgkJIkZVTkNUSU9OIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9JTkRFWAkJCSJJ TkRFWCIKKyNkZWZpbmUgT0JKRUNUX1RZUEVfVEFCTEUJCQkiVEFCTEUiCisjZGVmaW5lIE9C SkVDVF9UWVBFX1RPQVNUVkFMVUUJCSJUT0FTVFZBTFVFIgorI2RlZmluZSBPQkpFQ1RfVFlQ RV9NQVRWSUVXCQkJIk1BVEVSSUFMSVpFRCBWSUVXIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9T RVFVRU5DRQkJIlNFUVVFTkNFIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9WSUVXCQkJIlZJRVci CisKKyNkZWZpbmUgT0JKRUNUX1RZUEVfVU5LTk9XTgkJCSJVTktOT1dOIgorCisvKgorICog QW4gQXVkaXRFdmVudCByZXByZXNlbnRzIGFuIG9wZXJhdGlvbiB0aGF0IHBvdGVudGlhbGx5 IGFmZmVjdHMgYSBzaW5nbGUKKyAqIG9iamVjdC4gSWYgYSBzdGF0ZW1lbnQgYWZmZWN0cyBt dWx0aXBsZSBvYmplY3RzIG11bHRpcGxlIEF1ZGl0RXZlbnRzIG11c3QgYmUKKyAqIGNyZWF0 ZWQgdG8gcmVwcmVzZW50IGl0LgorICovCit0eXBlZGVmIHN0cnVjdAoreworCWludDY0IHN0 YXRlbWVudElkOworCWludDY0IHN1YnN0YXRlbWVudElkOworCisJTG9nU3RtdExldmVsIGxv Z1N0bXRMZXZlbDsKKwlOb2RlVGFnIGNvbW1hbmRUYWc7CisJY29uc3QgY2hhciAqY29tbWFu ZDsKKwljb25zdCBjaGFyICpvYmplY3RUeXBlOworCWNoYXIgKm9iamVjdE5hbWU7CisJY29u c3QgY2hhciAqY29tbWFuZFRleHQ7CisJUGFyYW1MaXN0SW5mbyBwYXJhbUxpc3Q7CisKKwli b29sIGdyYW50ZWQ7CisJYm9vbCBsb2dnZWQ7Cit9IEF1ZGl0RXZlbnQ7CisKKy8qCisgKiBB IHNpbXBsZSBGSUZPIHF1ZXVlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhY2sg b2YgYXVkaXQgZXZlbnRzLgorICovCit0eXBlZGVmIHN0cnVjdCBBdWRpdEV2ZW50U3RhY2tJ dGVtCit7CisJc3RydWN0IEF1ZGl0RXZlbnRTdGFja0l0ZW0gKm5leHQ7CisKKwlBdWRpdEV2 ZW50IGF1ZGl0RXZlbnQ7CisKKwlpbnQ2NCBzdGFja0lkOworCisJTWVtb3J5Q29udGV4dCBj b250ZXh0QXVkaXQ7CisJTWVtb3J5Q29udGV4dENhbGxiYWNrIGNvbnRleHRDYWxsYmFjazsK K30gQXVkaXRFdmVudFN0YWNrSXRlbTsKKworQXVkaXRFdmVudFN0YWNrSXRlbSAqYXVkaXRF dmVudFN0YWNrID0gTlVMTDsKKworLyoKKyAqIFRyYWNrIHdoZW4gYW4gaW50ZXJuYWwgc3Rh dGVtZW50IGlzIHJ1bm5pbmcgc28gaXQgaXMgbm90IGxvZ2dlZAorICovCitzdGF0aWMgYm9v bCBpbnRlcm5hbFN0YXRlbWVudCA9IGZhbHNlOworCisvKgorICogVHJhY2sgcnVubmluZyB0 b3RhbCBmb3Igc3RhdGVtZW50cyBhbmQgc3Vic3RhdGVtZW50cyBhbmQgd2hldGhlciBvciBu b3QKKyAqIGFueXRoaW5nIGhhcyBiZWVuIGxvZ2dlZCBzaW5jZSB0aGlzIHN0YXRlbWVudCBi ZWdhbi4KKyAqLworc3RhdGljIGludDY0IHN0YXRlbWVudFRvdGFsID0gMDsKK3N0YXRpYyBp bnQ2NCBzdWJzdGF0ZW1lbnRUb3RhbCA9IDA7CitzdGF0aWMgaW50NjQgc3RhY2tUb3RhbCA9 IDA7CisKK3N0YXRpYyBib29sIHN0YXRlbWVudExvZ2dlZCA9IGZhbHNlOworCisvKgorICog U3RhY2sgZnVuY3Rpb25zCisgKgorICogQXVkaXQgZXZlbnRzIGNhbiBnbyBkb3duIHRvIG11 bHRpcGxlIGxldmVscyBzbyBhIHN0YWNrIGlzIG1haW50YWluZWQgdG8ga2VlcAorICogdHJh Y2sgb2YgdGhlbS4KKyAqLworCisvKgorICogUmVzcG9uZCB0byBjYWxsYmFja3MgcmVnaXN0 ZXJlZCB3aXRoIE1lbW9yeUNvbnRleHRSZWdpc3RlclJlc2V0Q2FsbGJhY2soKS4KKyAqIFJl bW92ZXMgdGhlIGV2ZW50KHMpIG9mZiB0aGUgc3RhY2sgdGhhdCBoYXZlIGJlY29tZSBvYnNv bGV0ZSBvbmNlIHRoZQorICogTWVtb3J5Q29udGV4dCBoYXMgYmVlbiBmcmVlZC4gIFRoZSBj YWxsYmFjayBzaG91bGQgYWx3YXlzIGJlIGZyZWVpbmcgdGhlIHRvcAorICogb2YgdGhlIHN0 YWNrLCBidXQgdGhlIGNvZGUgaXMgdG9sZXJhbnQgb2Ygb3V0LW9mLW9yZGVyIGNhbGxiYWNr cy4KKyAqLworc3RhdGljIHZvaWQKK3N0YWNrX2ZyZWUodm9pZCAqc3RhY2tGcmVlKQorewor CUF1ZGl0RXZlbnRTdGFja0l0ZW0gKm5leHRJdGVtID0gYXVkaXRFdmVudFN0YWNrOworCisJ LyogT25seSBwcm9jZXNzIGlmIHRoZSBzdGFjayBjb250YWlucyBpdGVtcyAqLworCXdoaWxl IChuZXh0SXRlbSAhPSBOVUxMKQorCXsKKwkJLyogQ2hlY2sgaWYgdGhpcyBpdGVtIG1hdGNo ZXMgdGhlIGl0ZW0gdG8gYmUgZnJlZWQgKi8KKwkJaWYgKG5leHRJdGVtID09IChBdWRpdEV2 ZW50U3RhY2tJdGVtICopc3RhY2tGcmVlKQorCQl7CisJCQkvKiBNb3ZlIHRvcCBvZiBzdGFj ayB0byB0aGUgaXRlbSBhZnRlciB0aGUgZnJlZWQgaXRlbSAqLworCQkJYXVkaXRFdmVudFN0 YWNrID0gbmV4dEl0ZW0tPm5leHQ7CisKKwkJCS8qIElmIHRoZSBzdGFjayBpcyBub3QgZW1w dHkgKi8KKwkJCWlmIChhdWRpdEV2ZW50U3RhY2sgPT0gTlVMTCkKKwkJCXsKKwkJCQkvKiBS ZXNldCBpbnRlcm5hbCBzdGF0ZW1lbnQgaW4gY2FzZSBvZiBlcnJvciAqLworCQkJCWludGVy bmFsU3RhdGVtZW50ID0gZmFsc2U7CisKKwkJCQkvKiBSZXNldCBzdWIgc3RhdGVtZW50IHRv dGFsICovCisJCQkJc3Vic3RhdGVtZW50VG90YWwgPSAwOworCisJCQkJLyogUmVzZXQgc3Rh dGVtZW50IGxvZ2dlZCBmbGFnIHRvdGFsICovCisJCQkJc3RhdGVtZW50TG9nZ2VkID0gZmFs c2U7CisJCQl9CisKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIFN0aWxsIGxvb2tpbmcsIHRl c3QgdGhlIG5leHQgaXRlbSAqLworCQluZXh0SXRlbSA9IG5leHRJdGVtLT5uZXh0OworCX0K K30KKworLyoKKyAqIFB1c2ggYSBuZXcgYXVkaXQgZXZlbnQgb250byB0aGUgc3RhY2sgYW5k IGNyZWF0ZSBhIG5ldyBtZW1vcnkgY29udGV4dCB0bworICogc3RvcmUgaXQuCisgKi8KK3N0 YXRpYyBBdWRpdEV2ZW50U3RhY2tJdGVtICoKK3N0YWNrX3B1c2goKQoreworCU1lbW9yeUNv bnRleHQgY29udGV4dEF1ZGl0OworCU1lbW9yeUNvbnRleHQgY29udGV4dE9sZDsKKwlBdWRp dEV2ZW50U3RhY2tJdGVtICpzdGFja0l0ZW07CisKKwkvKiBDcmVhdGUgYSBuZXcgbWVtb3J5 IGNvbnRleHQgKi8KKwljb250ZXh0QXVkaXQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3Vy cmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICJwZ19hdWRpdCBzdGFjayBjb250ZXh0 IiwKKwkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJCQkJCSBB TExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJCQkJCQkJCSBBTExPQ1NFVF9ERUZBVUxU X01BWFNJWkUpOworCWNvbnRleHRPbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4 dEF1ZGl0KTsKKworCS8qIEFsbG9jYXRlIHRoZSBzdGFjayBpdGVtICovCisJc3RhY2tJdGVt ID0gcGFsbG9jMChzaXplb2YoQXVkaXRFdmVudFN0YWNrSXRlbSkpOworCisJLyogU3RvcmUg bWVtb3J5IGNvbnRleHRzICovCisJc3RhY2tJdGVtLT5jb250ZXh0QXVkaXQgPSBjb250ZXh0 QXVkaXQ7CisKKwkvKiBJZiBpdGVtIGFscmVhZHkgb24gc3RhY2sgdGhlbiBwdXNoIGl0IGRv d24gKi8KKwlpZiAoYXVkaXRFdmVudFN0YWNrICE9IE5VTEwpCisJCXN0YWNrSXRlbS0+bmV4 dCA9IGF1ZGl0RXZlbnRTdGFjazsKKwllbHNlCisJCXN0YWNrSXRlbS0+bmV4dCA9IE5VTEw7 CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgdW5pcXVlIHN0YWNrSWQgLSB1c2VkIHRvIGtlZXAg dGhlIHN0YWNrIHNhbmUgd2hlbiBtZW1vcnkKKwkgKiBjb250ZXh0cyBhcmUgZnJlZWQgdW5l eHBlY3RlZGx5LgorCSAqLworCXN0YWNrSXRlbS0+c3RhY2tJZCA9ICsrc3RhY2tUb3RhbDsK KworCS8qCisJICogU2V0dXAgYSBjYWxsYmFjayBpbiBjYXNlIGFuIGVycm9yIGhhcHBlbnMu ICBzdGFja19mcmVlKCkgd2lsbCB0cnVuY2F0ZQorCSAqIHRoZSBzdGFjayBhdCB0aGlzIGl0 ZW0uCisJICovCisJc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2suZnVuYyA9IHN0YWNrX2Zy ZWU7CisJc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2suYXJnID0gKHZvaWQgKilzdGFja0l0 ZW07CisJTWVtb3J5Q29udGV4dFJlZ2lzdGVyUmVzZXRDYWxsYmFjayhjb250ZXh0QXVkaXQs CisJCQkJCQkJCQkgICAmc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2spOworCisJLyogUHVz aCBpdGVtIG9uIHRoZSBzdGFjayAqLworCWF1ZGl0RXZlbnRTdGFjayA9IHN0YWNrSXRlbTsK KworCS8qIFJldHVybiB0byB0aGUgb2xkIG1lbW9yeSBjb250ZXh0ICovCisJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGNvbnRleHRPbGQpOworCisJLyogUmV0dXJuIHRoZSBzdGFjayBpdGVt ICovCisJcmV0dXJuIHN0YWNrSXRlbTsKK30KKworLyoKKyAqIFBvcCBhbiBhdWRpdCBldmVu dCBmcm9tIHRoZSBzdGFjayBieSBkZWxldGluZyB0aGUgbWVtb3J5IGNvbnRleHQgdGhhdAor ICogY29udGFpbnMgaXQuICBUaGUgY2FsbGJhY2sgdG8gc3RhY2tfZnJlZSgpIGRvZXMgdGhl IGFjdHVhbCBwb3AuCisgKi8KK3N0YXRpYyB2b2lkCitzdGFja19wb3AoaW50NjQgc3RhY2tJ ZCkKK3sKKwkvKiBNYWtlIHN1cmUgd2hhdCB3ZSB3YW50IHRvIGRlbGV0ZSBpcyBhdCB0aGUg dG9wIG9mIHRoZSBzdGFjayAqLworCWlmIChhdWRpdEV2ZW50U3RhY2sgIT0gTlVMTCAmJiBh dWRpdEV2ZW50U3RhY2stPnN0YWNrSWQgPT0gc3RhY2tJZCkKKwl7CisJCU1lbW9yeUNvbnRl eHREZWxldGUoYXVkaXRFdmVudFN0YWNrLT5jb250ZXh0QXVkaXQpOworCX0KKwllbHNlCisJ eworCQllbG9nKEVSUk9SLCAicGdfYXVkaXQgc3RhY2sgaXRlbSAlbGQgbm90IGZvdW5kIG9u IHRvcCAtIGNhbm5vdCBwb3AiLAorCQkJCQlzdGFja0lkKTsKKwl9Cit9CisKKy8qCisgKiBD aGVjayB0aGF0IGFuIGl0ZW0gaXMgb24gdGhlIHN0YWNrLiAgSWYgbm90IGFuIGVycm9yIHdp bGwgYmUgcmFpc2VkIHNpbmNlCisgKiB0aGlzIGlzIGEgYmFkIHN0YXRlIHRvIGJlIGluLCBh bmQgaXQgbWlnaHQgbWVhbiBhdWRpdCByZWNvcmRzIGFyZSBiZWluZworICogbG9zdC4KKyAq Lworc3RhdGljIHZvaWQKK3N0YWNrX3ZhbGlkKGludDY0IHN0YWNrSWQpCit7CisJQXVkaXRF dmVudFN0YWNrSXRlbSAqbmV4dEl0ZW0gPSBhdWRpdEV2ZW50U3RhY2s7CisKKwlpZiAobmV4 dEl0ZW0gPT0gTlVMTCkKKwl7CisJCWVsb2coRVJST1IsICJwZ19hdWRpdCBzdGFjayBpdGVt ICVsZCBub3QgZm91bmQgLSBzdGFjayBpcyBlbXB0eSIsCisJCQkJCXN0YWNrSWQpOworCX0K KworCS8qIE9ubHkgcHJvY2VzcyBpZiB0aGUgc3RhY2sgY29udGFpbnMgaXRlbXMgKi8KKwl3 aGlsZSAobmV4dEl0ZW0gIT0gTlVMTCkKKwl7CisJCS8qIENoZWNrIGlmIHRoaXMgaXRlbSBt YXRjaGVzIHRoZSBpdGVtIHNlYXJjaGVkIGZvciAqLworCQlpZiAobmV4dEl0ZW0tPnN0YWNr SWQgPT0gc3RhY2tJZCkKKwkJeworCQkJcmV0dXJuOworCQl9CisKKwkJLyogU3RpbGwgbG9v a2luZywgdGVzdCB0aGUgbmV4dCBpdGVtICovCisJCW5leHRJdGVtID0gbmV4dEl0ZW0tPm5l eHQ7CisJfQorCisJZWxvZyhFUlJPUiwgInBnX2F1ZGl0IHN0YWNrIGl0ZW0gJWxkIG5vdCBm b3VuZCAtIHRvcCBvZiBzdGFjayBpcyAlbGQiLAorCQkJCXN0YWNrSWQsIGF1ZGl0RXZlbnRT dGFjay0+c3RhY2tJZCk7Cit9CisKKy8qCisgKiBBcHBlbmRzIGEgcHJvcGVybHkgcXVvdGVk IENTViBmaWVsZCB0byBTdHJpbmdJbmZvLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3Zh bGlkX2NzdihTdHJpbmdJbmZvRGF0YSAqYnVmZmVyLCBjb25zdCBjaGFyICphcHBlbmRTdHIp Cit7CisJY29uc3QgY2hhciAqcENoYXI7CisKKwkvKgorCSAqIElmIHRoZSBhcHBlbmQgc3Ry aW5nIGlzIG51bGwgdGhlbiByZXR1cm4uICBOVUxMIGZpZWxkcyBhcmUgbm90IHF1b3RlZAor CSAqIGluIENTVgorCSAqLworCWlmIChhcHBlbmRTdHIgPT0gTlVMTCkKKwkJcmV0dXJuOwor CisJLyogT25seSBmb3JtYXQgZm9yIENTViBpZiBhcHBlbmRTdHIgY29udGFpbnM6ICIsIGNv bW1hLCBcbiwgXHIgKi8KKwlpZiAoc3Ryc3RyKGFwcGVuZFN0ciwgIiwiKSB8fCBzdHJzdHIo YXBwZW5kU3RyLCAiXCIiKSB8fAorCQlzdHJzdHIoYXBwZW5kU3RyLCAiXG4iKSB8fCBzdHJz dHIoYXBwZW5kU3RyLCAiXHIiKSkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8o YnVmZmVyLCAnIicpOworCisJCWZvciAocENoYXIgPSBhcHBlbmRTdHI7ICpwQ2hhcjsgcENo YXIrKykKKwkJeworCQkJaWYgKCpwQ2hhciA9PSAnIicpIC8qIGRvdWJsZSBzaW5nbGUgcXVv dGVzICovCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWZmZXIsICpwQ2hhcik7 CisKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmZmVyLCAqcENoYXIpOworCQl9 CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWZmZXIsICciJyk7CisJfQorCS8q IEVsc2UganVzdCBhcHBlbmQgKi8KKwllbHNlCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZmZlciwgYXBwZW5kU3RyKTsKKwl9Cit9CisKKy8qCisgKiBUYWtlcyBhbiBBdWRp dEV2ZW50LCBjbGFzc2lmaWVzIGl0LCB0aGVuIGxvZ3MgaXQgaWYgcGVybWlzc2lvbnMgd2Vy ZSBncmFudGVkCisgKiB2aWEgcm9sZXMgb3IgaWYgdGhlIHN0YXRlbWVudCBiZWxvbmdzIGlu IGEgY2xhc3MgdGhhdCBpcyBiZWluZyBsb2dnZWQuCisgKi8KK3N0YXRpYyB2b2lkCitsb2df YXVkaXRfZXZlbnQoQXVkaXRFdmVudFN0YWNrSXRlbSAqc3RhY2tJdGVtKQoreworCU1lbW9y eUNvbnRleHQgY29udGV4dE9sZDsKKwlTdHJpbmdJbmZvRGF0YSBhdWRpdFN0cjsKKworCS8q IEJ5IGRlZmF1bHQgcHV0IGV2ZXJ5dGhpbmcgaW4gdGhlIE1JU0MgY2xhc3MuICovCisJZW51 bSBMb2dDbGFzcyBjbGFzcyA9IExPR19NSVNDOworCWNvbnN0IGNoYXIgKmNsYXNzTmFtZSA9 IENMQVNTX01JU0M7CisKKwkvKiBDbGFzc2lmeSB0aGUgc3RhdGVtZW50IHVzaW5nIGxvZyBz dG10IGxldmVsIGFuZCB0aGUgY29tbWFuZCB0YWcgKi8KKwlzd2l0Y2ggKHN0YWNrSXRlbS0+ YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwpCisJeworCQkvKiBBbGwgbW9kcyBnbyBpbiBXUklU RSBjbGFzcyAqLworCQljYXNlIExPR1NUTVRfTU9EOgorCQkJY2xhc3NOYW1lID0gQ0xBU1Nf V1JJVEU7CisJCQljbGFzcyA9IExPR19XUklURTsKKwkJCWJyZWFrOworCisJCS8qIFNlcGFy YXRlIFJPTEUgZnJvbSBvdGhlciBEREwgc3RhdGVtZW50cyAqLworCQljYXNlIExPR1NUTVRf RERMOgorCQkJLyogSWRlbnRpZnkgcm9sZSBzdGF0ZW1lbnRzICovCisJCQlpZiAoc3RhY2tJ dGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9HcmFudFN0bXQgfHwKKwkJCQlzdGFj a0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9PSBUX0dyYW50Um9sZVN0bXQgfHwKKwkJ CQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9PSBUX0NyZWF0ZVJvbGVTdG10 IHx8CisJCQkJKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID09IFRfUmVuYW1l U3RtdCAmJgorCQkJCSBwZ19zdHJjYXNlY21wKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21t YW5kLAorCQkJCQkJCSAgIENPTU1BTkRfQUxURVJfUk9MRSkgPT0gMCkgfHwKKwkJCQkoc3Rh Y2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9Ecm9wU3RtdCAmJgorCQkJCSBw Z19zdHJjYXNlY21wKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kLAorCQkJCQkJCSAg IENPTU1BTkRfRFJPUF9ST0xFKSA9PSAwKSB8fAorCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVu dC5jb21tYW5kVGFnID09IFRfRHJvcFJvbGVTdG10IHx8CisJCQkJc3RhY2tJdGVtLT5hdWRp dEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9BbHRlclJvbGVTdG10IHx8CisJCQkJc3RhY2tJdGVt LT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9BbHRlclJvbGVTZXRTdG10KQorCQkJewor CQkJCWNsYXNzTmFtZSA9IENMQVNTX1JPTEU7CisJCQkJY2xhc3MgPSBMT0dfUk9MRTsKKwkJ CX0KKwkJCS8qIEVsc2UgbG9nIGFzIERETCAqLworCQkJZWxzZQorCQkJeworCQkJCWNsYXNz TmFtZSA9IENMQVNTX0RETDsKKwkJCQljbGFzcyA9IExPR19EREw7CisJCQl9CisKKwkJLyog RmlndXJlIG91dCB0aGUgcmVzdCAqLworCQljYXNlIExPR1NUTVRfQUxMOgorCQkJc3dpdGNo IChzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZykKKwkJCXsKKwkJCQkvKiBSRUFE IHN0YXRlbWVudHMgKi8KKwkJCQljYXNlIFRfQ29weVN0bXQ6CisJCQkJY2FzZSBUX1NlbGVj dFN0bXQ6CisJCQkJY2FzZSBUX1ByZXBhcmVTdG10OgorCQkJCWNhc2UgVF9QbGFubmVkU3Rt dDoKKwkJCQljYXNlIFRfRXhlY3V0ZVN0bXQ6CisJCQkJCWNsYXNzTmFtZSA9IENMQVNTX1JF QUQ7CisJCQkJCWNsYXNzID0gTE9HX1JFQUQ7CisJCQkJCWJyZWFrOworCisJCQkJLyogUmVp bmRleCBpcyBEREwgKGJlY2F1c2UgY2x1c3RlciBpcyBEREwpICovCisJCQkJY2FzZSBUX1Jl aW5kZXhTdG10OgorCQkJCQljbGFzc05hbWUgPSBDTEFTU19EREw7CisJCQkJCWNsYXNzID0g TE9HX0RETDsKKwkJCQkJYnJlYWs7CisKKwkJCQkvKiBGVU5DVElPTiBzdGF0ZW1lbnRzICov CisJCQkJY2FzZSBUX0RvU3RtdDoKKwkJCQkJY2xhc3NOYW1lID0gQ0xBU1NfRlVOQ1RJT047 CisJCQkJCWNsYXNzID0gTE9HX0ZVTkNUSU9OOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1 bHQ6CisJCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBMT0dTVE1UX05P TkU6CisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIE9ubHkgbG9nIHRoZSBzdGF0ZW1lbnQg aWY6CisJICoKKwkgKiAxLiBJZiBwZXJtaXNzaW9ucyB3ZXJlIGdyYW50ZWQgdmlhIHJvbGVz CisJICogMi4gVGhlIHN0YXRlbWVudCBiZWxvbmdzIHRvIGEgY2xhc3MgdGhhdCBpcyBiZWlu ZyBsb2dnZWQKKwkgKi8KKwlpZiAoIXN0YWNrSXRlbS0+YXVkaXRFdmVudC5ncmFudGVkICYm ICEoYXVkaXRMb2dCaXRtYXAgJiBjbGFzcykpCisJCXJldHVybjsKKworCS8qIFVzZSBhdWRp dCBtZW1vcnkgY29udGV4dCBpbiBjYXNlIHNvbWV0aGluZyBpcyBub3QgZnJlZWQgKi8KKwlj b250ZXh0T2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YWNrSXRlbS0+Y29udGV4dEF1 ZGl0KTsKKworCS8qIFNldCBzdGF0ZW1lbnQgYW5kIHN1YnN0YXRlbWVudCBJZHMgKi8KKwlp ZiAoc3RhY2tJdGVtLT5hdWRpdEV2ZW50LnN0YXRlbWVudElkID09IDApCisJeworCQkvKiBJ ZiBub3RoaW5nIGhhcyBiZWVuIGxvZ2dlZCB5ZXQgdGhlbiBjcmVhdGUgYSBuZXcgc3RhdGVt ZW50IElkICovCisJCWlmICghc3RhdGVtZW50TG9nZ2VkKQorCQl7CisJCQlzdGF0ZW1lbnRU b3RhbCsrOworCQkJc3RhdGVtZW50TG9nZ2VkID0gdHJ1ZTsKKwkJfQorCisJCXN0YWNrSXRl bS0+YXVkaXRFdmVudC5zdGF0ZW1lbnRJZCA9IHN0YXRlbWVudFRvdGFsOworCQlzdGFja0l0 ZW0tPmF1ZGl0RXZlbnQuc3Vic3RhdGVtZW50SWQgPSArK3N1YnN0YXRlbWVudFRvdGFsOwor CX0KKworCS8qIENyZWF0ZSB0aGUgYXVkaXQgc3RyaW5nICovCisJaW5pdFN0cmluZ0luZm8o JmF1ZGl0U3RyKTsKKworCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3RyLCBzdGFja0l0ZW0t PmF1ZGl0RXZlbnQuY29tbWFuZCk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmYXVk aXRTdHIsICcsJyk7CisKKwlhcHBlbmRfdmFsaWRfY3N2KCZhdWRpdFN0ciwgc3RhY2tJdGVt LT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8o JmF1ZGl0U3RyLCAnLCcpOworCisJYXBwZW5kX3ZhbGlkX2NzdigmYXVkaXRTdHIsIHN0YWNr SXRlbS0+YXVkaXRFdmVudC5vYmplY3ROYW1lKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhck1h Y3JvKCZhdWRpdFN0ciwgJywnKTsKKworCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3RyLCBz dGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRleHQpOworCisJLyogSWYgcGFyYW1ldGVy IGxvZ2dpbmcgaXMgdHVybmVkIG9uIGFuZCB0aGVyZSBhcmUgcGFyYW1ldGVycyB0byBsb2cg Ki8KKwlpZiAoYXVkaXRMb2dQYXJhbWV0ZXIgJiYKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50 LnBhcmFtTGlzdCAhPSBOVUxMICYmCisJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5wYXJhbUxp c3QtPm51bVBhcmFtcyA+IDAgJiYKKwkJIUlzQWJvcnRlZFRyYW5zYWN0aW9uQmxvY2tTdGF0 ZSgpKQorCXsKKwkJUGFyYW1MaXN0SW5mbyBwYXJhbUxpc3QgPSBzdGFja0l0ZW0tPmF1ZGl0 RXZlbnQucGFyYW1MaXN0OworCQlpbnQgcGFyYW1JZHg7CisKKwkJLyogSXRlcmF0ZSB0aHJv dWdoIGFsbCBwYXJhbXMgKi8KKwkJZm9yIChwYXJhbUlkeCA9IDA7IHBhcmFtSWR4IDwgcGFy YW1MaXN0LT5udW1QYXJhbXM7IHBhcmFtSWR4KyspCisJCXsKKwkJCVBhcmFtRXh0ZXJuRGF0 YSAqcHJtID0gJnBhcmFtTGlzdC0+cGFyYW1zW3BhcmFtSWR4XTsKKwkJCU9pZCAJCQkgdHlw ZU91dHB1dDsKKwkJCWJvb2wgCQkJIHR5cGVJc1ZhckxlbmE7CisJCQljaGFyIAkJCSpwYXJh bVN0cjsKKworCQkJLyogQWRkIGEgY29tbWEgZm9yIGVhY2ggcGFyYW0gKi8KKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyTWFjcm8oJmF1ZGl0U3RyLCAnLCcpOworCisJCQkvKiBTa2lwIHRo aXMgcGFyYW0gaWYgbnVsbCBvciBpZiBvaWQgaXMgaW52YWxpZCAqLworCQkJaWYgKHBybS0+ aXNudWxsIHx8ICFPaWRJc1ZhbGlkKHBybS0+cHR5cGUpKQorCQkJeworCQkJCWNvbnRpbnVl OworCQkJfQorCisJCQkvKiBPdXRwdXQgdGhlIHN0cmluZyAqLworCQkJZ2V0VHlwZU91dHB1 dEluZm8ocHJtLT5wdHlwZSwgJnR5cGVPdXRwdXQsICZ0eXBlSXNWYXJMZW5hKTsKKwkJCXBh cmFtU3RyID0gT2lkT3V0cHV0RnVuY3Rpb25DYWxsKHR5cGVPdXRwdXQsIHBybS0+dmFsdWUp OworCisJCQlhcHBlbmRfdmFsaWRfY3N2KCZhdWRpdFN0ciwgcGFyYW1TdHIpOworCQkJcGZy ZWUocGFyYW1TdHIpOworCQl9CisJfQorCisJLyogTG9nIHRoZSBhdWRpdCBzdHJpbmcgKi8K KwllbG9nKGF1ZGl0TG9nTm90aWNlID8gTk9USUNFIDogTE9HLAorCQkgIkFVRElUOiAlcywl bGQsJWxkLCVzLCVzIiwKKwkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5ncmFudGVkID8KKwkJ CQlBVURJVF9UWVBFX09CSkVDVCA6IEFVRElUX1RZUEVfU0VTU0lPTiwKKwkJCXN0YWNrSXRl bS0+YXVkaXRFdmVudC5zdGF0ZW1lbnRJZCwKKwkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5z dWJzdGF0ZW1lbnRJZCwKKwkJCWNsYXNzTmFtZSwgYXVkaXRTdHIuZGF0YSk7CisKKwkvKiBN YXJrIHRoZSBhdWRpdCBldmVudCBhcyBsb2dnZWQgKi8KKwlzdGFja0l0ZW0tPmF1ZGl0RXZl bnQubG9nZ2VkID0gdHJ1ZTsKKworCS8qIFN3aXRjaCBiYWNrIHRvIHRoZSBvbGQgbWVtb3J5 IGNvbnRleHQgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dE9sZCk7Cit9CisK Ky8qCisgKiBDaGVjayBpZiB0aGUgcm9sZSBvciBhbnkgaW5oZXJpdGVkIHJvbGUgaGFzIGFu eSBwZXJtaXNzaW9uIGluIHRoZSBtYXNrLiAgVGhlCisgKiBwdWJsaWMgcm9sZSBpcyBleGNs dWRlZCBmcm9tIHRoaXMgY2hlY2sgYW5kIHN1cGVydXNlciBwZXJtaXNzaW9ucyBhcmUgbm90 CisgKiBjb25zaWRlcmVkLgorICovCitzdGF0aWMgYm9vbAorYXVkaXRfb25fYWNsKERhdHVt IGFjbERhdHVtLAorCQkJIE9pZCBhdWRpdE9pZCwKKwkJCSBBY2xNb2RlIG1hc2spCit7CisJ Ym9vbAkJcmVzdWx0ID0gZmFsc2U7CisJQWNsCQkgICAqYWNsOworCUFjbEl0ZW0JICAgKmFj bEl0ZW1EYXRhOworCWludAkJCWFjbEluZGV4OworCWludAkJCWFjbFRvdGFsOworCisJLyog RGV0b2FzdCBjb2x1bW4ncyBBQ0wgaWYgbmVjZXNzYXJ5ICovCisJYWNsID0gRGF0dW1HZXRB Y2xQKGFjbERhdHVtKTsKKworCS8qIEdldCB0aGUgYWNsIGxpc3QgYW5kIHRvdGFsICovCisJ YWNsVG90YWwgPSBBQ0xfTlVNKGFjbCk7CisJYWNsSXRlbURhdGEgPSBBQ0xfREFUKGFjbCk7 CisKKwkvKiBDaGVjayBwcml2aWxlZ2VzIGdyYW50ZWQgZGlyZWN0bHkgdG8gYXVkaXRPaWQg Ki8KKwlmb3IgKGFjbEluZGV4ID0gMDsgYWNsSW5kZXggPCBhY2xUb3RhbDsgYWNsSW5kZXgr KykKKwl7CisJCUFjbEl0ZW0gKmFjbEl0ZW0gPSAmYWNsSXRlbURhdGFbYWNsSW5kZXhdOwor CisJCWlmIChhY2xJdGVtLT5haV9ncmFudGVlID09IGF1ZGl0T2lkICYmCisJCQlhY2xJdGVt LT5haV9wcml2cyAmIG1hc2spCisJCXsKKwkJCXJlc3VsdCA9IHRydWU7CisJCQlicmVhazsK KwkJfQorCX0KKworCS8qCisJICogQ2hlY2sgcHJpdmlsZWdlcyBncmFudGVkIGluZGlyZWN0 bHkgdmlhIHJvbGUgbWVtYmVyc2hpcHMuIFdlIGRvIHRoaXMgaW4KKwkgKiBhIHNlcGFyYXRl IHBhc3MgdG8gbWluaW1pemUgZXhwZW5zaXZlIGluZGlyZWN0IG1lbWJlcnNoaXAgdGVzdHMu ICBJbgorCSAqIHBhcnRpY3VsYXIsIGl0J3Mgd29ydGggdGVzdGluZyB3aGV0aGVyIGEgZ2l2 ZW4gQUNMIGVudHJ5IGdyYW50cyBhbnkKKwkgKiBwcml2aWxlZ2VzIHN0aWxsIG9mIGludGVy ZXN0IGJlZm9yZSB3ZSBwZXJmb3JtIHRoZSBoYXNfcHJpdnNfb2Zfcm9sZQorCSAqIHRlc3Qu CisJICovCisJaWYgKCFyZXN1bHQpCisJeworCQlmb3IgKGFjbEluZGV4ID0gMDsgYWNsSW5k ZXggPCBhY2xUb3RhbDsgYWNsSW5kZXgrKykKKwkJeworCQkJQWNsSXRlbSAqYWNsSXRlbSA9 ICZhY2xJdGVtRGF0YVthY2xJbmRleF07CisKKwkJCS8qIERvbid0IHRlc3QgcHVibGljIG9y IGF1ZGl0T2lkIChpdCBoYXMgYmVlbiB0ZXN0ZWQgYWxyZWFkeSkgKi8KKwkJCWlmIChhY2xJ dGVtLT5haV9ncmFudGVlID09IEFDTF9JRF9QVUJMSUMgfHwKKwkJCQlhY2xJdGVtLT5haV9n cmFudGVlID09IGF1ZGl0T2lkKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogQ2hl Y2sgdGhhdCB0aGUgcm9sZSBoYXMgdGhlIHJlcXVpcmVkIHByaXZpbGVnZXMgYW5kIHRoYXQg aXQgaXMKKwkJCSAqIGluaGVyaXRlZCBieSBhdWRpdE9pZC4KKwkJCSAqLworCQkJaWYgKGFj bEl0ZW0tPmFpX3ByaXZzICYgbWFzayAmJgorCQkJCWhhc19wcml2c19vZl9yb2xlKGF1ZGl0 T2lkLCBhY2xJdGVtLT5haV9ncmFudGVlKSkKKwkJCXsKKwkJCQlyZXN1bHQgPSB0cnVlOwor CQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyogaWYgd2UgaGF2ZSBhIGRldG9hc3Rl ZCBjb3B5LCBmcmVlIGl0ICovCisJaWYgKGFjbCAmJiAoUG9pbnRlcikgYWNsICE9IERhdHVt R2V0UG9pbnRlcihhY2xEYXR1bSkpCisJCXBmcmVlKGFjbCk7CisKKwlyZXR1cm4gcmVzdWx0 OworfQorCisvKgorICogQ2hlY2sgaWYgYSByb2xlIGhhcyBhbnkgb2YgdGhlIHBlcm1pc3Np b25zIGluIHRoZSBtYXNrIG9uIGEgcmVsYXRpb24uCisgKi8KK3N0YXRpYyBib29sCithdWRp dF9vbl9yZWxhdGlvbihPaWQgcmVsT2lkLAorCQkJCSAgT2lkIGF1ZGl0T2lkLAorCQkJCSAg QWNsTW9kZSBtYXNrKQoreworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCUhlYXBUdXBsZQl0 dXBsZTsKKwlEYXR1bQkJYWNsRGF0dW07CisJYm9vbAkJaXNOdWxsOworCisJLyogR2V0IHJl bGF0aW9uIHR1cGxlIGZyb20gcGdfY2xhc3MgKi8KKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hl MShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0ocmVsT2lkKSk7CisKKwkvKiBSZXR1cm4gZmFs c2UgaWYgdHVwbGUgaXMgbm90IHZhbGlkICovCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1 cGxlKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogR2V0IHRoZSByZWxhdGlvbidzIEFDTCAq LworCWFjbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVwbGUsIEFudW1fcGdf Y2xhc3NfcmVsYWNsLAorCQkJCQkJCSAgICZpc051bGwpOworCisJLyogSWYgbm90IG51bGwg dGhlbiB0ZXN0ICovCisJaWYgKCFpc051bGwpCisJCXJlc3VsdCA9IGF1ZGl0X29uX2FjbChh Y2xEYXR1bSwgYXVkaXRPaWQsIG1hc2spOworCisJLyogRnJlZSB0aGUgcmVsYXRpb24gdHVw bGUgKi8KKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyoKKyAqIENoZWNrIGlmIGEgcm9sZSBoYXMgYW55IG9mIHRoZSBwZXJtaXNzaW9ucyBp biB0aGUgbWFzayBvbiBhbiBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBib29sCithdWRpdF9v bl9hdHRyaWJ1dGUoT2lkIHJlbE9pZCwKKwkJCQkgICBBdHRyTnVtYmVyIGF0dE51bSwKKwkJ CQkgICBPaWQgYXVkaXRPaWQsCisJCQkJICAgQWNsTW9kZSBtYXNrKQoreworCWJvb2wJCXJl c3VsdCA9IGZhbHNlOworCUhlYXBUdXBsZQlhdHRUdXBsZTsKKwlEYXR1bQkJYWNsRGF0dW07 CisJYm9vbAkJaXNOdWxsOworCisJLyogR2V0IHRoZSBhdHRyaWJ1dGUncyBBQ0wgKi8KKwlh dHRUdXBsZSA9IFNlYXJjaFN5c0NhY2hlMihBVFROVU0sCisJCQkJCQkJICAgT2JqZWN0SWRH ZXREYXR1bShyZWxPaWQpLAorCQkJCQkJCSAgIEludDE2R2V0RGF0dW0oYXR0TnVtKSk7CisK KwkvKiBSZXR1cm4gZmFsc2UgaWYgYXR0cmlidXRlIGlzIGludmFsaWQgKi8KKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQoYXR0VHVwbGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBPbmx5 IHByb2Nlc3MgYXR0cmlidXRlIHRoYXQgaGF2ZSBub3QgYmVlbiBkcm9wcGVkICovCisJaWYg KCEoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0VHVwbGUpKS0+YXR0aXNkcm9w cGVkKQorCXsKKwkJYWNsRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQVRUTlVNLCBhdHRUdXBs ZSwgQW51bV9wZ19hdHRyaWJ1dGVfYXR0YWNsLAorCQkJCQkJCQkgICAmaXNOdWxsKTsKKwor CQlpZiAoIWlzTnVsbCkKKwkJCXJlc3VsdCA9IGF1ZGl0X29uX2FjbChhY2xEYXR1bSwgYXVk aXRPaWQsIG1hc2spOworCX0KKworCS8qIEZyZWUgYXR0cmlidXRlICovCisJUmVsZWFzZVN5 c0NhY2hlKGF0dFR1cGxlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVj ayBpZiBhIHJvbGUgaGFzIGFueSBvZiB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIG1hc2sgb24g YW4gYXR0cmlidXRlIGluCisgKiB0aGUgcHJvdmlkZWQgc2V0LiAgSWYgdGhlIHNldCBpcyBl bXB0eSwgdGhlbiBhbGwgdmFsaWQgYXR0cmlidXRlcyBpbiB0aGUKKyAqIHJlbGF0aW9uIHdp bGwgYmUgdGVzdGVkLgorICovCitzdGF0aWMgYm9vbAorYXVkaXRfb25fYW55X2F0dHJpYnV0 ZShPaWQgcmVsT2lkLAorCQkJCQkgICBPaWQgYXVkaXRPaWQsCisJCQkJCSAgIEJpdG1hcHNl dCAqYXR0cmlidXRlU2V0LAorCQkJCQkgICBBY2xNb2RlIG1vZGUpCit7CisJYm9vbCByZXN1 bHQgPSBmYWxzZTsKKwlBdHRyTnVtYmVyIGNvbDsKKwlCaXRtYXBzZXQgKnRtcFNldDsKKwor CS8qIElmIGJtcyBpcyBlbXB0eSB0aGVuIGNoZWNrIGZvciBhbnkgY29sdW1uIG1hdGNoICov CisJaWYgKGJtc19pc19lbXB0eShhdHRyaWJ1dGVTZXQpKQorCXsKKwkJSGVhcFR1cGxlCWNs YXNzVHVwbGU7CisJCUF0dHJOdW1iZXIJbmF0dHJzOworCQlBdHRyTnVtYmVyCWN1cnJfYXR0 OworCisJCS8qIEdldCByZWxhdGlvbiB0byBkZXRlcm1pbmUgdG90YWwgYXR0cmlidXRlICov CisJCWNsYXNzVHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERh dHVtKHJlbE9pZCkpOworCisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc1R1cGxlKSkK KwkJCXJldHVybiBmYWxzZTsKKworCQluYXR0cnMgPSAoKEZvcm1fcGdfY2xhc3MpIEdFVFNU UlVDVChjbGFzc1R1cGxlKSktPnJlbG5hdHRzOworCQlSZWxlYXNlU3lzQ2FjaGUoY2xhc3NU dXBsZSk7CisKKwkJLyogQ2hlY2sgZWFjaCBjb2x1bW4gKi8KKwkJZm9yIChjdXJyX2F0dCA9 IDE7IGN1cnJfYXR0IDw9IG5hdHRyczsgY3Vycl9hdHQrKykKKwkJeworCQkJaWYgKGF1ZGl0 X29uX2F0dHJpYnV0ZShyZWxPaWQsIGN1cnJfYXR0LCBhdWRpdE9pZCwgbW9kZSkpCisJCQkJ cmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwkvKiBibXNfZmlyc3RfbWVtYmVyIGlzIGRlc3Ry dWN0aXZlLCBzbyBtYWtlIGEgY29weSBiZWZvcmUgdXNpbmcgaXQuICovCisJdG1wU2V0ID0g Ym1zX2NvcHkoYXR0cmlidXRlU2V0KTsKKworCS8qIENoZWNrIGVhY2ggY29sdW1uICovCisJ d2hpbGUgKChjb2wgPSBibXNfZmlyc3RfbWVtYmVyKHRtcFNldCkpID49IDApCisJeworCQlj b2wgKz0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKworCQlpZiAoY29s ICE9IEludmFsaWRBdHRyTnVtYmVyICYmCisJCQlhdWRpdF9vbl9hdHRyaWJ1dGUocmVsT2lk LCBjb2wsIGF1ZGl0T2lkLCBtb2RlKSkKKwkJeworCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCWJy ZWFrOworCQl9CisJfQorCisJLyogRnJlZSB0aGUgY29sdW1uIHNldCAqLworCWJtc19mcmVl KHRtcFNldCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ3JlYXRlIEF1ZGl0 RXZlbnRzIGZvciBTRUxFQ1QvRE1MIG9wZXJhdGlvbnMgdmlhIGV4ZWN1dG9yIHBlcm1pc3Np b25zIGNoZWNrcy4KKyAqLworc3RhdGljIHZvaWQKK2xvZ19zZWxlY3RfZG1sKE9pZCBhdWRp dE9pZCwgTGlzdCAqcmFuZ2VUYWJscykKK3sKKwlMaXN0Q2VsbCAqbHI7CisJYm9vbCBmaXJz dCA9IHRydWU7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJLyogRG8gbm90IGxvZyBpZiB0 aGlzIGlzIGFuIGludGVybmFsIHN0YXRlbWVudCAqLworCWlmIChpbnRlcm5hbFN0YXRlbWVu dCkKKwkJcmV0dXJuOworCisJZm9yZWFjaChsciwgcmFuZ2VUYWJscykKKwl7CisJCU9pZCBy ZWxPaWQ7CisJCVJlbGF0aW9uIHJlbDsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gbGZpcnN0 KGxyKTsKKworCQkvKiBXZSBvbmx5IGNhcmUgYWJvdXQgdGFibGVzLCBhbmQgY2FuIGlnbm9y ZSBzdWJxdWVyaWVzIGV0Yy4gKi8KKwkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJ T04pCisJCQljb250aW51ZTsKKworCQlmb3VuZCA9IHRydWU7CisKKwkJLyoKKwkJICogRmls dGVyIG91dCBhbnkgc3lzdGVtIHJlbGF0aW9ucworCQkgKi8KKwkJcmVsT2lkID0gcnRlLT5y ZWxpZDsKKwkJcmVsID0gcmVsYXRpb25fb3BlbihyZWxPaWQsIE5vTG9jayk7CisKKwkJaWYg KCFhdWRpdExvZ0NhdGFsb2cgJiYgSXNTeXN0ZW1OYW1lc3BhY2UoUmVsYXRpb25HZXROYW1l c3BhY2UocmVsKSkpCisJCXsKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogRmlsbCB2YWx1ZXMgaW4gdGhlIGV2ZW50 IHN0cnVjdCB0aGF0IGFyZSByZXF1aXJlZCBmb3Igc2Vzc2lvbgorCQkgKiBsb2dnaW5nLgor CQkgKi8KKwkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmdyYW50ZWQgPSBmYWxzZTsK KworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBydGUgdGhlbiBzZXNzaW9uIGxv ZyB1bmxlc3MgYXVkaXRMb2dSZWxhdGlvbgorCQkgKiBpcyBzZXQuCisJCSAqLworCQlpZiAo Zmlyc3QgJiYgIWF1ZGl0TG9nUmVsYXRpb24pCisJCXsKKwkJCWxvZ19hdWRpdF9ldmVudChh dWRpdEV2ZW50U3RhY2spOworCisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisKKwkJLyoKKwkJ ICogV2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHBhcnNldHJlZSBoZXJlLCBzbyB3ZSBo YXZlIHRvIGdlbmVyYXRlCisJCSAqIHRoZSBub2RlIHR5cGUsIG9iamVjdCB0eXBlLCBhbmQg Y29tbWFuZCB0YWcgYnkgZGVjb2RpbmcKKwkJICogcnRlLT5yZXF1aXJlZFBlcm1zIGFuZCBy dGUtPnJlbGtpbmQuCisJCSAqLworCQlpZiAocnRlLT5yZXF1aXJlZFBlcm1zICYgQUNMX0lO U0VSVCkKKwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZl bCA9IExPR1NUTVRfTU9EOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1h bmRUYWcgPSBUX0luc2VydFN0bXQ7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQu Y29tbWFuZCA9IENPTU1BTkRfSU5TRVJUOworCQl9CisJCWVsc2UgaWYgKHJ0ZS0+cmVxdWly ZWRQZXJtcyAmIEFDTF9VUERBVEUpCisJCXsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRF dmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX01PRDsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+ YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9VcGRhdGVTdG10OworCQkJYXVkaXRFdmVudFN0 YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1VQREFURTsKKwkJfQorCQllbHNl IGlmIChydGUtPnJlcXVpcmVkUGVybXMgJiBBQ0xfREVMRVRFKQorCQl7CisJCQlhdWRpdEV2 ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9NT0Q7CisJCQlh dWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRfRGVsZXRlU3RtdDsK KwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9ERUxF VEU7CisJCX0KKwkJZWxzZSBpZiAocnRlLT5yZXF1aXJlZFBlcm1zICYgQUNMX1NFTEVDVCkK KwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExP R1NUTVRfQUxMOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcg PSBUX1NlbGVjdFN0bXQ7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFu ZCA9IENPTU1BTkRfU0VMRUNUOworCQl9CisJCWVsc2UKKwkJeworCQkJYXVkaXRFdmVudFN0 YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfQUxMOworCQkJYXVkaXRF dmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0ludmFsaWQ7CisJCQlhdWRp dEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfVU5LTk9XTjsKKwkJ fQorCisJCS8qIEdldCB0aGUgcmVsYXRpb24gdHlwZSAqLworCQlzd2l0Y2ggKHJ0ZS0+cmVs a2luZCkKKwkJeworCQkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQkJCWF1ZGl0RXZlbnRT dGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfVEFCTEU7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9JTkRFWDoKKwkJCQlhdWRpdEV2ZW50 U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX0lOREVY OworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfU0VRVUVOQ0U6CisJCQkJYXVkaXRF dmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9T RVFVRU5DRTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX1RPQVNUVkFMVUU6CisJ CQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpF Q1RfVFlQRV9UT0FTVFZBTFVFOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfVklF VzoKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJ CU9CSkVDVF9UWVBFX1ZJRVc7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9DT01Q T1NJVEVfVFlQRToKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlw ZSA9CisJCQkJCU9CSkVDVF9UWVBFX0NPTVBPU0lURV9UWVBFOworCQkJCWJyZWFrOworCisJ CQljYXNlIFJFTEtJTkRfRk9SRUlHTl9UQUJMRToKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1 ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX0ZPUkVJR05fVEFCTEU7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9NQVRWSUVXOgorCQkJCWF1ZGl0RXZl bnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfTUFU VklFVzsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlhdWRpdEV2ZW50U3RhY2st PmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1VOS05PV047CisJ CQkJYnJlYWs7CisJCX0KKworCQkvKiBHZXQgdGhlIHJlbGF0aW9uIG5hbWUgKi8KKwkJYXVk aXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUgPQorCQkJcXVvdGVfcXVhbGlm aWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKAorCQkJCQkJCQkJICAgUmVsYXRp b25HZXROYW1lc3BhY2UocmVsKSksCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKTsKKwkJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCisJCS8qIFBl cmZvcm0gb2JqZWN0IGF1ZGl0aW5nIG9ubHkgaWYgdGhlIGF1ZGl0IHJvbGUgaXMgdmFsaWQg Ki8KKwkJaWYgKGF1ZGl0T2lkICE9IEludmFsaWRPaWQpCisJCXsKKwkJCUFjbE1vZGUgYXVk aXRQZXJtcyA9CisJCQkJKEFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX0lOU0VSVCB8 IEFDTF9ERUxFVEUpICYKKwkJCQlydGUtPnJlcXVpcmVkUGVybXM7CisKKwkJCS8qCisJCQkg KiBJZiBhbnkgb2YgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIGZvciB0aGUgcmVsYXRpb24g YXJlIGdyYW50ZWQKKwkJCSAqIHRvIHRoZSBhdWRpdCByb2xlIHRoZW4gYXVkaXQgdGhlIHJl bGF0aW9uCisJCQkgKi8KKwkJCWlmIChhdWRpdF9vbl9yZWxhdGlvbihyZWxPaWQsIGF1ZGl0 T2lkLCBhdWRpdFBlcm1zKSkKKwkJCXsKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZl bnQuZ3JhbnRlZCA9IHRydWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBFbHNlIGNoZWNrIGlm IHRoZSBhdWRpdCByb2xlIGhhcyBjb2x1bW4tbGV2ZWwgcGVybWlzc2lvbnMgZm9yCisJCQkg KiBzZWxlY3QsIGluc2VydCwgb3IgdXBkYXRlLgorCQkJICovCisJCQllbHNlIGlmIChhdWRp dFBlcm1zICE9IDApCisJCQl7CisJCQkJLyoKKwkJCQkgKiBDaGVjayB0aGUgc2VsZWN0IGNv bHVtbnMKKwkJCQkgKi8KKwkJCQlpZiAoYXVkaXRQZXJtcyAmIEFDTF9TRUxFQ1QpCisJCQkJ eworCQkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3JhbnRlZCA9CisJCQkJCQlh dWRpdF9vbl9hbnlfYXR0cmlidXRlKHJlbE9pZCwgYXVkaXRPaWQsCisJCQkJCQkJCQkJCSAg IHJ0ZS0+c2VsZWN0ZWRDb2xzLAorCQkJCQkJCQkJCQkgICBBQ0xfU0VMRUNUKTsKKwkJCQl9 CisKKwkJCQkvKgorCQkJCSAqIENoZWNrIHRoZSBpbnNlcnRlZCBjb2x1bW5zCisJCQkJICov CisJCQkJaWYgKCFhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3JhbnRlZCAmJgorCQkJ CQlhdWRpdFBlcm1zICYgQUNMX0lOU0VSVCkKKwkJCQl7CisJCQkJCWF1ZGl0RXZlbnRTdGFj ay0+YXVkaXRFdmVudC5ncmFudGVkID0KKwkJCQkJCWF1ZGl0X29uX2FueV9hdHRyaWJ1dGUo cmVsT2lkLCBhdWRpdE9pZCwKKwkJCQkJCQkJCQkJICAgcnRlLT5pbnNlcnRlZENvbHMsCisJ CQkJCQkJCQkJCSAgIGF1ZGl0UGVybXMpOworCQkJCX0KKworCQkJCS8qCisJCQkJICogQ2hl Y2sgdGhlIHVwZGF0ZWQgY29sdW1ucworCQkJCSAqLworCQkJCWlmICghYXVkaXRFdmVudFN0 YWNrLT5hdWRpdEV2ZW50LmdyYW50ZWQgJiYKKwkJCQkJYXVkaXRQZXJtcyAmIEFDTF9VUERB VEUpCisJCQkJeworCQkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3JhbnRlZCA9 CisJCQkJCQlhdWRpdF9vbl9hbnlfYXR0cmlidXRlKHJlbE9pZCwgYXVkaXRPaWQsCisJCQkJ CQkJCQkJCSAgIHJ0ZS0+dXBkYXRlZENvbHMsCisJCQkJCQkJCQkJCSAgIGF1ZGl0UGVybXMp OworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIERvIHJlbGF0aW9uIGxldmVsIGxvZ2dpbmcg aWYgYSBncmFudCB3YXMgZm91bmQgKi8KKwkJaWYgKGF1ZGl0RXZlbnRTdGFjay0+YXVkaXRF dmVudC5ncmFudGVkKQorCQl7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9n Z2VkID0gZmFsc2U7CisJCQlsb2dfYXVkaXRfZXZlbnQoYXVkaXRFdmVudFN0YWNrKTsKKwkJ fQorCisJCS8qIERvIHJlbGF0aW9uIGxldmVsIGxvZ2dpbmcgaWYgYXVkaXRMb2dSZWxhdGlv biBpcyBzZXQgKi8KKwkJaWYgKGF1ZGl0TG9nUmVsYXRpb24pCisJCXsKKwkJCWF1ZGl0RXZl bnRTdGFjay0+YXVkaXRFdmVudC5sb2dnZWQgPSBmYWxzZTsKKwkJCWF1ZGl0RXZlbnRTdGFj ay0+YXVkaXRFdmVudC5ncmFudGVkID0gZmFsc2U7CisJCQlsb2dfYXVkaXRfZXZlbnQoYXVk aXRFdmVudFN0YWNrKTsKKwkJfQorCisJCXBmcmVlKGF1ZGl0RXZlbnRTdGFjay0+YXVkaXRF dmVudC5vYmplY3ROYW1lKTsKKwl9CisKKwkvKgorCSAqIElmIG5vIHRhYmxlcyB3ZXJlIGZv dW5kIHRoYXQgbWVhbnMgdGhhdCBSYW5nZVRibHMgd2FzIGVtcHR5IG9yIGFsbAorCSAqIHJl bGF0aW9ucyB3ZXJlIGluIHRoZSBzeXN0ZW0gc2NoZW1hLiAgSW4gdGhhdCBjYXNlIHN0aWxs IGxvZyBhCisJICogc2Vzc2lvbiByZWNvcmQuCisJICovCisJaWYgKCFmb3VuZCkKKwl7CisJ CWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5ncmFudGVkID0gZmFsc2U7CisJCWF1ZGl0 RXZlbnRTdGFjay0+YXVkaXRFdmVudC5sb2dnZWQgPSBmYWxzZTsKKworCQlsb2dfYXVkaXRf ZXZlbnQoYXVkaXRFdmVudFN0YWNrKTsKKwl9Cit9CisKKy8qCisgKiBDcmVhdGUgQXVkaXRF dmVudHMgZm9yIG5vbi1jYXRhbG9nIGZ1bmN0aW9uIGV4ZWN1dGlvbiwgYXMgZGV0ZWN0ZWQg YnkKKyAqIGxvZ19vYmplY3RfYWNjZXNzKCkgYmVsb3cuCisgKi8KK3N0YXRpYyB2b2lkCits b2dfZnVuY3Rpb25fZXhlY3V0ZShPaWQgb2JqZWN0SWQpCit7CisJSGVhcFR1cGxlIHByb2N0 dXA7CisJRm9ybV9wZ19wcm9jIHByb2M7CisJQXVkaXRFdmVudFN0YWNrSXRlbSAqc3RhY2tJ dGVtOworCisJLyogR2V0IGluZm8gYWJvdXQgdGhlIGZ1bmN0aW9uLiAqLworCXByb2N0dXAg PSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCisJaWYgKCFwcm9jdHVwKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgZnVuY3Rpb24gJXUiLCBvYmplY3RJZCk7CisJcHJvYyA9IChGb3JtX3BnX3Byb2Mp IEdFVFNUUlVDVChwcm9jdHVwKTsKKworCS8qCisJICogTG9nZ2luZyBleGVjdXRpb24gb2Yg YWxsIHBnX2NhdGFsb2cgZnVuY3Rpb25zIHdvdWxkIG1ha2UgdGhlIGxvZworCSAqIHVudXNh Ymx5IG5vaXN5LgorCSAqLworCWlmIChJc1N5c3RlbU5hbWVzcGFjZShwcm9jLT5wcm9uYW1l c3BhY2UpKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCQlyZXR1cm47CisJ fQorCisJLyogUHVzaCBhdWRpdCBldmVudCBvbnRvIHRoZSBzdGFjayAqLworCXN0YWNrSXRl bSA9IHN0YWNrX3B1c2goKTsKKworCS8qIEdlbmVyYXRlIHRoZSBmdWxseS1xdWFsaWZpZWQg ZnVuY3Rpb24gbmFtZS4gKi8KKwlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9 CisJCXF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9j LT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkgICBOYW1lU3RyKHByb2MtPnByb25hbWUpKTsK KwlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisKKwkvKiBMb2cgdGhlIGZ1bmN0aW9uIGNh bGwgKi8KKwlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9B TEw7CisJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0RvU3RtdDsKKwlz dGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfRVhFQ1VURTsKKwlzdGFj a0l0ZW0tPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9IE9CSkVDVF9UWVBFX0ZVTkNUSU9OOwor CXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGV4dCA9IHN0YWNrSXRlbS0+bmV4dC0+ YXVkaXRFdmVudC5jb21tYW5kVGV4dDsKKworCWxvZ19hdWRpdF9ldmVudChzdGFja0l0ZW0p OworCisJLyogUG9wIGF1ZGl0IGV2ZW50IGZyb20gdGhlIHN0YWNrICovCisJc3RhY2tfcG9w KHN0YWNrSXRlbS0+c3RhY2tJZCk7Cit9CisKKy8qCisgKiBIb29rIGZ1bmN0aW9ucworICov CitzdGF0aWMgRXhlY3V0b3JDaGVja1Blcm1zX2hvb2tfdHlwZSBuZXh0X0V4ZWN1dG9yQ2hl Y2tQZXJtc19ob29rID0gTlVMTDsKK3N0YXRpYyBQcm9jZXNzVXRpbGl0eV9ob29rX3R5cGUg bmV4dF9Qcm9jZXNzVXRpbGl0eV9ob29rID0gTlVMTDsKK3N0YXRpYyBvYmplY3RfYWNjZXNz X2hvb2tfdHlwZSBuZXh0X29iamVjdF9hY2Nlc3NfaG9vayA9IE5VTEw7CitzdGF0aWMgRXhl Y3V0b3JTdGFydF9ob29rX3R5cGUgbmV4dF9FeGVjdXRvclN0YXJ0X2hvb2sgPSBOVUxMOwor CisvKgorICogSG9vayBFeGVjdXRvclN0YXJ0IHRvIGdldCB0aGUgcXVlcnkgdGV4dCBhbmQg YmFzaWMgY29tbWFuZCB0eXBlIGZvciBxdWVyaWVzCisgKiB0aGF0IGRvIG5vdCBjb250YWlu IGEgdGFibGUgc28gY2FuJ3QgYmUgaWRlbml0aWZpZWQgYWNjdXJhdGVseSBpbgorICogRXhl Y3V0b3JDaGVja1Blcm1zLgorICovCitzdGF0aWMgdm9pZAorcGdfYXVkaXRfRXhlY3V0b3JT dGFydF9ob29rKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQoreworCUF1ZGl0 RXZlbnRTdGFja0l0ZW0gKnN0YWNrSXRlbSA9IE5VTEw7CisKKwlpZiAoIWludGVybmFsU3Rh dGVtZW50KQorCXsKKwkJLyogQWxsb2NhdGUgdGhlIGF1ZGl0IGV2ZW50ICovCisJCXN0YWNr SXRlbSA9IHN0YWNrX3B1c2goKTsKKworCQkvKiBJbml0aWFsaXplIGNvbW1hbmQgKi8KKwkJ c3dpdGNoIChxdWVyeURlc2MtPm9wZXJhdGlvbikKKwkJeworCQkJY2FzZSBDTURfU0VMRUNU OgorCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX0FM TDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRfU2VsZWN0U3Rt dDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfU0VMRUNU OworCQkJCWJyZWFrOworCisJCQljYXNlIENNRF9JTlNFUlQ6CisJCQkJc3RhY2tJdGVtLT5h dWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfTU9EOworCQkJCXN0YWNrSXRlbS0+ YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9JbnNlcnRTdG10OworCQkJCXN0YWNrSXRlbS0+ YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9JTlNFUlQ7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQ01EX1VQREFURToKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExl dmVsID0gTE9HU1RNVF9NT0Q7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRU YWcgPSBUX1VwZGF0ZVN0bXQ7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmQg PSBDT01NQU5EX1VQREFURTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBDTURfREVMRVRFOgor CQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX01PRDsK KwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRfRGVsZXRlU3RtdDsK KwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfREVMRVRFOwor CQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5s b2dTdG10TGV2ZWwgPSBMT0dTVE1UX0FMTDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQu Y29tbWFuZFRhZyA9IFRfSW52YWxpZDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29t bWFuZCA9IENPTU1BTkRfVU5LTk9XTjsKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIEluaXRp YWxpemUgdGhlIGF1ZGl0IGV2ZW50ICovCisJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21t YW5kVGV4dCA9IHF1ZXJ5RGVzYy0+c291cmNlVGV4dDsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2 ZW50LnBhcmFtTGlzdCA9IHF1ZXJ5RGVzYy0+cGFyYW1zOworCX0KKworCS8qIENhbGwgdGhl IHByZXZpb3VzIGhvb2sgb3Igc3RhbmRhcmQgZnVuY3Rpb24gKi8KKwlpZiAobmV4dF9FeGVj dXRvclN0YXJ0X2hvb2spCisJCW5leHRfRXhlY3V0b3JTdGFydF9ob29rKHF1ZXJ5RGVzYywg ZWZsYWdzKTsKKwllbHNlCisJCXN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBl ZmxhZ3MpOworCisJLyoKKwkgKiBNb3ZlIHRoZSBzdGFjayBtZW1vcnkgY29udGV4dCB0byB0 aGUgcXVlcnkgbWVtb3J5IGNvbnRleHQuICBUaGlzIG5lZWRzIHRvCisJICogYmUgZG9uZSBo ZXJlIGJlY2F1c2UgdGhlIHF1ZXJ5IGNvbnRleHQgZG9lcyBub3QgZXhpc3QgYmVmb3JlIHRo ZSBjYWxsCisJICogdG8gc3RhbmRhcmRfRXhlY3V0b3JTdGFydCgpIGJ1dCB0aGUgc3RhY2sg aXRlbSBpcyByZXF1aXJlZCBieQorCSAqIHBnX2F1ZGl0X0V4ZWN1dG9yQ2hlY2tQZXJtc19o b29rKCkgd2hpY2ggaXMgY2FsbGVkIGR1cmluZworCSAqIHN0YW5kYXJkX0V4ZWN1dG9yU3Rh cnQoKS4KKwkgKi8KKwlpZiAoc3RhY2tJdGVtKQorCXsKKwkJTWVtb3J5Q29udGV4dFNldFBh cmVudChzdGFja0l0ZW0tPmNvbnRleHRBdWRpdCwKKwkJCQkJCQkgICBxdWVyeURlc2MtPmVz dGF0ZS0+ZXNfcXVlcnlfY3h0KTsKKwl9Cit9CisKKy8qCisgKiBIb29rIEV4ZWN1dG9yQ2hl Y2tQZXJtcyB0byBkbyBzZXNzaW9uIGFuZCBvYmplY3QgYXVkaXRpbmcgZm9yIERNTC4KKyAq Lworc3RhdGljIGJvb2wKK3BnX2F1ZGl0X0V4ZWN1dG9yQ2hlY2tQZXJtc19ob29rKExpc3Qg KnJhbmdlVGFibHMsIGJvb2wgYWJvcnQpCit7CisJT2lkIGF1ZGl0T2lkOworCisJLyogR2V0 IHRoZSBhdWRpdCBvaWQgaWYgdGhlIHJvbGUgZXhpc3RzLiAqLworCWF1ZGl0T2lkID0gZ2V0 X3JvbGVfb2lkKGF1ZGl0Um9sZSwgdHJ1ZSk7CisKKwkvKiBMb2cgRE1MIGlmIHRoZSBhdWRp dCByb2xlIGlzIHZhbGlkIG9yIHNlc3Npb24gbG9nZ2luZyBpcyBlbmFibGVkLiAqLworCWlm ICgoYXVkaXRPaWQgIT0gSW52YWxpZE9pZCB8fCBhdWRpdExvZ0JpdG1hcCAhPSAwKSAmJgor CQkhSXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9ja1N0YXRlKCkpCisJCWxvZ19zZWxlY3RfZG1s KGF1ZGl0T2lkLCByYW5nZVRhYmxzKTsKKworCS8qIENhbGwgdGhlIG5leHQgaG9vayBmdW5j dGlvbi4gKi8KKwlpZiAobmV4dF9FeGVjdXRvckNoZWNrUGVybXNfaG9vayAmJgorCQkhKCpu ZXh0X0V4ZWN1dG9yQ2hlY2tQZXJtc19ob29rKSAocmFuZ2VUYWJscywgYWJvcnQpKQorCQly ZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEhvb2sgUHJvY2Vz c1V0aWxpdHkgdG8gZG8gc2Vzc2lvbiBhdWRpdGluZyBmb3IgRERMIGFuZCB1dGlsaXR5IGNv bW1hbmRzLgorICovCitzdGF0aWMgdm9pZAorcGdfYXVkaXRfUHJvY2Vzc1V0aWxpdHlfaG9v ayhOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAor CQkJCQkJCSBQcm9jZXNzVXRpbGl0eUNvbnRleHQgY29udGV4dCwKKwkJCQkJCQkgUGFyYW1M aXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJIERlc3RSZWNlaXZlciAqZGVzdCwKKwkJCQkJCQkg Y2hhciAqY29tcGxldGlvblRhZykKK3sKKwlBdWRpdEV2ZW50U3RhY2tJdGVtICpzdGFja0l0 ZW0gPSBOVUxMOworCWludDY0IHN0YWNrSWQ7CisKKwkvKiBBbGxvY2F0ZSB0aGUgYXVkaXQg ZXZlbnQgKi8KKwlpZiAoY29udGV4dCA8PSBQUk9DRVNTX1VUSUxJVFlfUVVFUlkgJiYgIUlz QWJvcnRlZFRyYW5zYWN0aW9uQmxvY2tTdGF0ZSgpKQorCXsKKwkJLyogUHJvY2VzcyB0b3Ag bGV2ZWwgdXRpbGl0eSBzdGF0ZW1lbnQgKi8KKwkJaWYgKGNvbnRleHQgPT0gUFJPQ0VTU19V VElMSVRZX1RPUExFVkVMKQorCQl7CisJCQlpZiAoYXVkaXRFdmVudFN0YWNrICE9IE5VTEwp CisJCQkJZWxvZyhFUlJPUiwgInBnX2F1ZGl0IHN0YWNrIGlzIG5vdCBlbXB0eSIpOworCisJ CQkvKiBTZXQgcGFyYW1zICovCisJCQlzdGFja0l0ZW0gPSBzdGFja19wdXNoKCk7CisJCQlz dGFja0l0ZW0tPmF1ZGl0RXZlbnQucGFyYW1MaXN0ID0gcGFyYW1zOworCQl9CisJCWVsc2UK KwkJCXN0YWNrSXRlbSA9IHN0YWNrX3B1c2goKTsKKworCQlzdGFja0lkID0gc3RhY2tJdGVt LT5zdGFja0lkOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gR2V0 Q29tbWFuZExvZ0xldmVsKHBhcnNldHJlZSk7CisJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5j b21tYW5kVGFnID0gbm9kZVRhZyhwYXJzZXRyZWUpOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZl bnQuY29tbWFuZCA9IENyZWF0ZUNvbW1hbmRUYWcocGFyc2V0cmVlKTsKKwkJc3RhY2tJdGVt LT5hdWRpdEV2ZW50LmNvbW1hbmRUZXh0ID0gcXVlcnlTdHJpbmc7CisKKwkJLyoKKwkJICog SWYgdGhpcyBpcyBhIERPIGJsb2NrIGxvZyBpdCBiZWZvcmUgY2FsbGluZyB0aGUgbmV4dCBQ cm9jZXNzVXRpbGl0eQorCQkgKiBob29rLgorCQkgKi8KKwkJaWYgKGF1ZGl0TG9nQml0bWFw ICYgTE9HX0ZVTkNUSU9OICYmCisJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRh ZyA9PSBUX0RvU3RtdCAmJgorCQkJIUlzQWJvcnRlZFRyYW5zYWN0aW9uQmxvY2tTdGF0ZSgp KQorCQl7CisJCQlsb2dfYXVkaXRfZXZlbnQoc3RhY2tJdGVtKTsKKwkJfQorCX0KKworCS8q IENhbGwgdGhlIHN0YW5kYXJkIHByb2Nlc3MgdXRpbGl0eSBjaGFpbi4gKi8KKwlpZiAobmV4 dF9Qcm9jZXNzVXRpbGl0eV9ob29rKQorCQkoKm5leHRfUHJvY2Vzc1V0aWxpdHlfaG9vaykg KHBhcnNldHJlZSwgcXVlcnlTdHJpbmcsIGNvbnRleHQsCisJCQkJCQkJCQkgcGFyYW1zLCBk ZXN0LCBjb21wbGV0aW9uVGFnKTsKKwllbHNlCisJCXN0YW5kYXJkX1Byb2Nlc3NVdGlsaXR5 KHBhcnNldHJlZSwgcXVlcnlTdHJpbmcsIGNvbnRleHQsCisJCQkJCQkJCXBhcmFtcywgZGVz dCwgY29tcGxldGlvblRhZyk7CisKKwkvKgorCSAqIFByb2Nlc3MgdGhlIGF1ZGl0IGV2ZW50 IGlmIHRoZXJlIGlzIG9uZS4gIEFsc28gY2hlY2sgdGhhdCB0aGlzIGV2ZW50IHdhcworCSAq IG5vdCBwb3BwZWQgb2ZmIHRoZSBzdGFjayBieSBhIG1lbW9yeSBjb250ZXh0IGJlaW5nIGZy ZWVkIGVsc2V3aGVyZS4KKwkgKi8KKwlpZiAoc3RhY2tJdGVtICYmICFJc0Fib3J0ZWRUcmFu c2FjdGlvbkJsb2NrU3RhdGUoKSkKKwl7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGUgaXRl bSB3ZSB3YW50IHRvIGxvZyBpcyBzdGlsbCBvbiB0aGUgc3RhY2sgLSBpZiBub3QgdGhlbgor CQkgKiBzb21ldGhpbmcgaGFzIGdvbmUgd3JvbmcgYW5kIGFuIGVycm9yIHdpbGwgYmUgcmFp c2VkLgorCQkgKi8KKwkJc3RhY2tfdmFsaWQoc3RhY2tJZCk7CisKKwkJLyogTG9nIHRoZSB1 dGlsaXR5IGNvbW1hbmQgaWYgbG9nZ2luZyBpcyBvbiwgdGhlIGNvbW1hbmQgaGFzIG5vdCBh bHJlYWR5CisJCSAqIGJlZW4gbG9nZ2VkIGJ5IGFub3RoZXIgaG9vaywgYW5kIHRoZSB0cmFu c2FjdGlvbiBpcyBub3QgYWJvcnRlZC4gKi8KKwkJaWYgKGF1ZGl0TG9nQml0bWFwICE9IDAg JiYgIXN0YWNrSXRlbS0+YXVkaXRFdmVudC5sb2dnZWQpCisJCQlsb2dfYXVkaXRfZXZlbnQo c3RhY2tJdGVtKTsKKwl9Cit9CisKKy8qCisgKiBIb29rIG9iamVjdF9hY2Nlc3NfaG9vayB0 byBwcm92aWRlIGZ1bGx5LXF1YWxpZmllZCBvYmplY3QgbmFtZXMgZm9yIGZ1bmN0aW9uCisg KiBjYWxscy4KKyAqLworc3RhdGljIHZvaWQKK3BnX2F1ZGl0X29iamVjdF9hY2Nlc3NfaG9v ayhPYmplY3RBY2Nlc3NUeXBlIGFjY2VzcywKKwkJCQkJCQlPaWQgY2xhc3NJZCwKKwkJCQkJ CQlPaWQgb2JqZWN0SWQsCisJCQkJCQkJaW50IHN1YklkLAorCQkJCQkJCXZvaWQgKmFyZykK K3sKKwlpZiAoYXVkaXRMb2dCaXRtYXAgJiBMT0dfRlVOQ1RJT04gJiYgYWNjZXNzID09IE9B VF9GVU5DVElPTl9FWEVDVVRFICYmCisJCWF1ZGl0RXZlbnRTdGFjayAmJiAhSXNBYm9ydGVk VHJhbnNhY3Rpb25CbG9ja1N0YXRlKCkpCisJCWxvZ19mdW5jdGlvbl9leGVjdXRlKG9iamVj dElkKTsKKworCWlmIChuZXh0X29iamVjdF9hY2Nlc3NfaG9vaykKKwkJKCpuZXh0X29iamVj dF9hY2Nlc3NfaG9vaykgKGFjY2VzcywgY2xhc3NJZCwgb2JqZWN0SWQsIHN1YklkLCBhcmcp OworfQorCisvKgorICogRXZlbnQgdHJpZ2dlciBmdW5jdGlvbnMKKyAqLworCisvKgorICog U3VwcGx5IGFkZGl0aW9uYWwgZGF0YSBmb3IgKG5vbiBkcm9wKSBzdGF0ZW1lbnRzIHRoYXQg aGF2ZSBldmVudCB0cmlnZ2VyCisgKiBzdXBwb3J0IGFuZCBjYW4gYmUgZGVwYXJzZWQuCisg Ki8KK0RhdHVtCitwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwkvKiBDb250aW51ZSBvbmx5IGlmIHNlc3Npb24gRERMIGxvZ2dpbmcgaXMgZW5hYmxl ZCAqLworCWlmIChhdWRpdExvZ0JpdG1hcCAmIExPR19EREwpCisJeworCQlFdmVudFRyaWdn ZXJEYXRhICpldmVudERhdGE7CisJCWludAkJCQkgIHJlc3VsdCwgcm93OworCQlUdXBsZURl c2MJCSAgc3BpVHVwRGVzYzsKKwkJY29uc3QgY2hhcgkJICpxdWVyeTsKKwkJTWVtb3J5Q29u dGV4dCAJICBjb250ZXh0UXVlcnk7CisJCU1lbW9yeUNvbnRleHQgCSAgY29udGV4dE9sZDsK KworCQkvKiBCZSBzdXJlIHRoZSBtb2R1bGUgd2FzIGxvYWRlZCAqLworCQlpZiAoIWF1ZGl0 RXZlbnRTdGFjaykKKwkJeworCQkJZWxvZyhFUlJPUiwgInBnX2F1ZGl0IG5vdCBsb2FkZWQg YmVmb3JlIGNhbGwgdG8gIgorCQkJCQkJInBnX2F1ZGl0X2RkbF9jb21tYW5kX2VuZCgpIik7 CisJCX0KKworCQkvKiBUaGlzIGlzIGFuIGludGVybmFsIHN0YXRlbWVudCAtIGRvIG5vdCBs b2cgaXQgKi8KKwkJaW50ZXJuYWxTdGF0ZW1lbnQgPSB0cnVlOworCisJCS8qIE1ha2Ugc3Vy ZSB0aGUgZnVjdGlvbiB3YXMgZmlyZWQgYXMgYSB0cmlnZ2VyICovCisJCWlmICghQ0FMTEVE X0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJCWVsb2coRVJST1IsICJub3QgZmlyZWQg YnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwkJLyogU3dpdGNoIG1lbW9yeSBjb250 ZXh0ICovCisJCWNvbnRleHRRdWVyeSA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZSgKKwkJCQkJ CUN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJInBnX2F1ZGl0X2Z1bmNfZGRsX2NvbW1h bmRfZW5kIHRlbXBvcmFyeSBjb250ZXh0IiwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfTUlO U0laRSwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQlBTExPQ1NF VF9ERUZBVUxUX01BWFNJWkUpOworCQljb250ZXh0T2xkID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKGNvbnRleHRRdWVyeSk7CisKKwkJLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRyaWdn ZXJlZCBldmVudHMgKi8KKwkJZXZlbnREYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNp bmZvLT5jb250ZXh0OworCisJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5sb2dTdG10 TGV2ZWwgPQorCQkJR2V0Q29tbWFuZExvZ0xldmVsKGV2ZW50RGF0YS0+cGFyc2V0cmVlKTsK KwkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPQorCQkJbm9kZVRh ZyhldmVudERhdGEtPnBhcnNldHJlZSk7CisJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVu dC5jb21tYW5kID0KKwkJCUNyZWF0ZUNvbW1hbmRUYWcoZXZlbnREYXRhLT5wYXJzZXRyZWUp OworCisJCS8qIFJldHVybiBvYmplY3RzIGFmZmVjdGVkIGJ5IHRoZSAobm9uIGRyb3ApIERE TCBzdGF0ZW1lbnQgKi8KKwkJcXVlcnkgPSAiU0VMRUNUIFVQUEVSKG9iamVjdF90eXBlKSwg b2JqZWN0X2lkZW50aXR5XG4iCisJCQkJIiAgRlJPTSBwZ19ldmVudF90cmlnZ2VyX2RkbF9j b21tYW5kcygpIjsKKworCQkvKiBBdHRlbXB0IHRvIGNvbm5lY3QgKi8KKwkJcmVzdWx0ID0g U1BJX2Nvbm5lY3QoKTsKKworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWVsb2coRVJST1IsICJw Z19hdWRpdF9kZGxfY29tbWFuZF9lbmQ6IFNQSV9jb25uZWN0IHJldHVybmVkICVkIiwKKwkJ CQkJCXJlc3VsdCk7CisKKwkJLyogRXhlY3V0ZSB0aGUgcXVlcnkgKi8KKwkJcmVzdWx0ID0g U1BJX2V4ZWN1dGUocXVlcnksIHRydWUsIDApOworCisJCWlmIChyZXN1bHQgIT0gU1BJX09L X1NFTEVDVCkKKwkJCWVsb2coRVJST1IsICJwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQ6IFNQ SV9leGVjdXRlIHJldHVybmVkICVkIiwKKwkJCQkJCXJlc3VsdCk7CisKKwkJLyogSXRlcmF0 ZSByZXR1cm5lZCByb3dzICovCisJCXNwaVR1cERlc2MgPSBTUElfdHVwdGFibGUtPnR1cGRl c2M7CisKKwkJZm9yIChyb3cgPSAwOyByb3cgPCBTUElfcHJvY2Vzc2VkOyByb3crKykKKwkJ eworCQkJSGVhcFR1cGxlICBzcGlUdXBsZTsKKworCQkJc3BpVHVwbGUgPSBTUElfdHVwdGFi bGUtPnZhbHNbcm93XTsKKworCQkJLyogU3VwcGx5IG9iamVjdCBuYW1lIGFuZCB0eXBlIGZv ciBhdWRpdCBldmVudCAqLworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVj dFR5cGUgPQorCQkJCVNQSV9nZXR2YWx1ZShzcGlUdXBsZSwgc3BpVHVwRGVzYywgMSk7CisJ CQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9CisJCQkJU1BJX2dl dHZhbHVlKHNwaVR1cGxlLCBzcGlUdXBEZXNjLCAyKTsKKworCQkJLyogTG9nIHRoZSBhdWRp dCBldmVudCAqLworCQkJbG9nX2F1ZGl0X2V2ZW50KGF1ZGl0RXZlbnRTdGFjayk7CisJCX0K KworCQkvKiBDb21wbGV0ZSB0aGUgcXVlcnkgKi8KKwkJU1BJX2ZpbmlzaCgpOworCisJCS8q IFN3aXRjaCB0byB0aGUgb2xkIG1lbW9yeSBjb250ZXh0ICovCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhjb250ZXh0T2xkKTsKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShjb250ZXh0UXVl cnkpOworCisJCS8qIE5vIGxvbmdlciBpbiBhbiBpbnRlcm5hbCBzdGF0ZW1lbnQgKi8KKwkJ aW50ZXJuYWxTdGF0ZW1lbnQgPSBmYWxzZTsKKwl9CisKKwlQR19SRVRVUk5fTlVMTCgpOwor fQorCisvKgorICogU3VwcGx5IGFkZGl0aW9uYWwgZGF0YSBmb3IgZHJvcCBzdGF0ZW1lbnRz IHRoYXQgaGF2ZSBldmVudCB0cmlnZ2VyIHN1cHBvcnQuCisgKi8KK0RhdHVtCitwZ19hdWRp dF9zcWxfZHJvcChQR19GVU5DVElPTl9BUkdTKQoreworCWlmIChhdWRpdExvZ0JpdG1hcCAm IExPR19EREwpCisJeworCQlpbnQJCQkJICByZXN1bHQsIHJvdzsKKwkJVHVwbGVEZXNjCQkg IHNwaVR1cERlc2M7CisJCWNvbnN0IGNoYXIJCSAqcXVlcnk7CisJCU1lbW9yeUNvbnRleHQg CSAgY29udGV4dFF1ZXJ5OworCQlNZW1vcnlDb250ZXh0IAkgIGNvbnRleHRPbGQ7CisKKwkJ LyogQmUgc3VyZSB0aGUgbW9kdWxlIHdhcyBsb2FkZWQgKi8KKwkJaWYgKCFhdWRpdEV2ZW50 U3RhY2spCisJCXsKKwkJCWVsb2coRVJST1IsICJwZ19hdWRpdCBub3QgbG9hZGVkIGJlZm9y ZSBjYWxsIHRvICIKKwkJCQkJCSJwZ19hdWRpdF9zcWxfZHJvcCgpIik7CisJCX0KKworCQkv KiBUaGlzIGlzIGFuIGludGVybmFsIHN0YXRlbWVudCAtIGRvIG5vdCBsb2cgaXQgKi8KKwkJ aW50ZXJuYWxTdGF0ZW1lbnQgPSB0cnVlOworCisJCS8qIE1ha2Ugc3VyZSB0aGUgZnVjdGlv biB3YXMgZmlyZWQgYXMgYSB0cmlnZ2VyICovCisJCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RS SUdHRVIoZmNpbmZvKSkKKwkJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJp Z2dlciBtYW5hZ2VyIik7CisKKwkJLyogU3dpdGNoIG1lbW9yeSBjb250ZXh0ICovCisJCWNv bnRleHRRdWVyeSA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZSgKKwkJCQkJCUN1cnJlbnRNZW1v cnlDb250ZXh0LAorCQkJCQkJInBnX2F1ZGl0X2Z1bmNfZGRsX2NvbW1hbmRfZW5kIHRlbXBv cmFyeSBjb250ZXh0IiwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJ CUFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX01B WFNJWkUpOworCQljb250ZXh0T2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHRR dWVyeSk7CisKKwkJLyogUmV0dXJuIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIGRyb3Agc3Rh dGVtZW50ICovCisJCXF1ZXJ5ID0gIlNFTEVDVCBVUFBFUihvYmplY3RfdHlwZSksXG4iCisJ CQkJIiAgICAgICBvYmplY3RfaWRlbnRpdHlcbiIKKwkJCQkiICBGUk9NIHBnX2V2ZW50X3Ry aWdnZXJfZHJvcHBlZF9vYmplY3RzKClcbiIKKwkJCQkiIFdIRVJFIGxvd2VyKG9iamVjdF90 eXBlKSA8PiAndHlwZSdcbiIKKwkJCQkiICAgQU5EIHNjaGVtYV9uYW1lIDw+ICdwZ190b2Fz dCciOworCisJCS8qIEF0dGVtcHQgdG8gY29ubmVjdCAqLworCQlyZXN1bHQgPSBTUElfY29u bmVjdCgpOworCisJCWlmIChyZXN1bHQgPCAwKQorCQkJZWxvZyhFUlJPUiwgInBnX2F1ZGl0 X2RkbF9kcm9wOiBTUElfY29ubmVjdCByZXR1cm5lZCAlZCIsCisJCQkJCQlyZXN1bHQpOwor CisJCS8qIEV4ZWN1dGUgdGhlIHF1ZXJ5ICovCisJCXJlc3VsdCA9IFNQSV9leGVjdXRlKHF1 ZXJ5LCB0cnVlLCAwKTsKKworCQlpZiAocmVzdWx0ICE9IFNQSV9PS19TRUxFQ1QpCisJCQll bG9nKEVSUk9SLCAicGdfYXVkaXRfZGRsX2Ryb3A6IFNQSV9leGVjdXRlIHJldHVybmVkICVk IiwKKwkJCQkJCXJlc3VsdCk7CisKKwkJLyogSXRlcmF0ZSByZXR1cm5lZCByb3dzICovCisJ CXNwaVR1cERlc2MgPSBTUElfdHVwdGFibGUtPnR1cGRlc2M7CisKKwkJZm9yIChyb3cgPSAw OyByb3cgPCBTUElfcHJvY2Vzc2VkOyByb3crKykKKwkJeworCQkJSGVhcFR1cGxlICBzcGlU dXBsZTsKKworCQkJc3BpVHVwbGUgPSBTUElfdHVwdGFibGUtPnZhbHNbcm93XTsKKworCQkJ YXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCVNQSV9nZXR2 YWx1ZShzcGlUdXBsZSwgc3BpVHVwRGVzYywgMSk7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1 ZGl0RXZlbnQub2JqZWN0TmFtZSA9CisJCQkJCVNQSV9nZXR2YWx1ZShzcGlUdXBsZSwgc3Bp VHVwRGVzYywgMik7CisKKwkJCWxvZ19hdWRpdF9ldmVudChhdWRpdEV2ZW50U3RhY2spOwor CQl9CisKKwkJLyogQ29tcGxldGUgdGhlIHF1ZXJ5ICovCisJCVNQSV9maW5pc2goKTsKKwor CQkvKiBTd2l0Y2ggdG8gdGhlIG9sZCBtZW1vcnkgY29udGV4dCAqLworCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8oY29udGV4dE9sZCk7CisJCU1lbW9yeUNvbnRleHREZWxldGUoY29udGV4 dFF1ZXJ5KTsKKworCQkvKiBObyBsb25nZXIgaW4gYW4gaW50ZXJuYWwgc3RhdGVtZW50ICov CisJCWludGVybmFsU3RhdGVtZW50ID0gZmFsc2U7CisJfQorCisJUEdfUkVUVVJOX05VTEwo KTsKK30KKworLyoKKyAqIEdVQyBjaGVjayBhbmQgYXNzaWduIGZ1bmN0aW9ucworICovCisK Ky8qCisgKiBUYWtlIGEgcGdfYXVkaXQubG9nIHZhbHVlIHN1Y2ggYXMgInJlYWQsIHdyaXRl LCBkbWwiLCB2ZXJpZnkgdGhhdCBlYWNoIG9mIHRoZQorICogY29tbWEtc2VwYXJhdGVkIHRv a2VucyBjb3JyZXNwb25kcyB0byBhIExvZ0NsYXNzIHZhbHVlLCBhbmQgY29udmVydCB0aGVt IGludG8KKyAqIGEgYml0bWFwIHRoYXQgbG9nX2F1ZGl0X2V2ZW50IGNhbiBjaGVjay4KKyAq Lworc3RhdGljIGJvb2wKK2NoZWNrX3BnX2F1ZGl0X2xvZyhjaGFyICoqbmV3dmFsLCB2b2lk ICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJTGlzdCAqZmxhZ3M7CisJY2hhciAq cmF3dmFsOworCUxpc3RDZWxsICpsdDsKKwl1aW50NjQgKmY7CisKKwkvKiBNYWtlIHN1cmUg bmV3dmFsIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdG9rZW5zLiAqLworCXJhd3Zh bCA9IHBzdHJkdXAoKm5ld3ZhbCk7CisJaWYgKCFTcGxpdElkZW50aWZpZXJTdHJpbmcocmF3 dmFsLCAnLCcsICZmbGFncykpCisJeworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJMaXN0IHN5 bnRheCBpcyBpbnZhbGlkIik7CisJCWxpc3RfZnJlZShmbGFncyk7CisJCXBmcmVlKHJhd3Zh bCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIENoZWNrIHRoYXQgd2UgcmVj b2duaXNlIGVhY2ggdG9rZW4sIGFuZCBhZGQgaXQgdG8gdGhlIGJpdG1hcCB3ZSdyZQorCSAq IGJ1aWxkaW5nIHVwIGluIGEgbmV3bHktYWxsb2NhdGVkIHVpbnQ2NCAqZi4KKwkgKi8KKwlm ID0gKHVpbnQ2NCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQ2NCkpOworCWlmICghZikKKwkJcmV0 dXJuIGZhbHNlOworCSpmID0gMDsKKworCWZvcmVhY2gobHQsIGZsYWdzKQorCXsKKwkJYm9v bCBzdWJ0cmFjdCA9IGZhbHNlOworCQl1aW50NjQgY2xhc3M7CisKKwkJLyogUmV0cmlldmUg YSB0b2tlbiAqLworCQljaGFyICp0b2tlbiA9IChjaGFyICopbGZpcnN0KGx0KTsKKworCQkv KiBJZiB0b2tlbiBpcyBwcmVjZWRlZCBieSAtLCB0aGVuIHRoZSB0b2tlbiBpcyBzdWJ0cmFj dGl2ZS4gKi8KKwkJaWYgKHN0cnN0cih0b2tlbiwgIi0iKSA9PSB0b2tlbikKKwkJeworCQkJ dG9rZW4gPSB0b2tlbiArIDE7CisJCQlzdWJ0cmFjdCA9IHRydWU7CisJCX0KKworCQkvKiBU ZXN0IGVhY2ggdG9rZW4uICovCisJCWlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19O T05FKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfTk9ORTsKKwkJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcCh0b2tlbiwgQ0xBU1NfQUxMKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfQUxMOworCQll bHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19EREwpID09IDApCisJCQljbGFz cyA9IExPR19EREw7CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX0ZV TkNUSU9OKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfRlVOQ1RJT047CisJCWVsc2UgaWYgKHBn X3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX01JU0MpID09IDApCisJCQljbGFzcyA9IExPR19N SVNDOworCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19SRUFEKSA9PSAw KQorCQkJY2xhc3MgPSBMT0dfUkVBRDsKKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcCh0b2tl biwgQ0xBU1NfUk9MRSkgPT0gMCkKKwkJCWNsYXNzID0gTE9HX1JPTEU7CisJCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX1dSSVRFKSA9PSAwKQorCQkJY2xhc3MgPSBM T0dfV1JJVEU7CisJCWVsc2UKKwkJeworCQkJZnJlZShmKTsKKwkJCXBmcmVlKHJhd3ZhbCk7 CisJCQlsaXN0X2ZyZWUoZmxhZ3MpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyog QWRkIG9yIHN1YnRyYWN0IGNsYXNzIGJpdHMgZnJvbSB0aGUgbG9nIGJpdG1hcC4gKi8KKwkJ aWYgKHN1YnRyYWN0KQorCQkJKmYgJj0gfmNsYXNzOworCQllbHNlCisJCQkqZiB8PSBjbGFz czsKKwl9CisKKwlwZnJlZShyYXd2YWwpOworCWxpc3RfZnJlZShmbGFncyk7CisKKwkvKgor CSAqIFN0b3JlIHRoZSBiaXRtYXAgZm9yIGFzc2lnbl9wZ19hdWRpdF9sb2cuCisJICovCisJ KmV4dHJhID0gZjsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU2V0IHBnX2F1ZGl0 X2xvZyBmcm9tIGV4dHJhIChpZ25vcmluZyBuZXd2YWwsIHdoaWNoIGhhcyBhbHJlYWR5IGJl ZW4KKyAqIGNvbnZlcnRlZCB0byBhIGJpdG1hcCBhYm92ZSkuIE5vdGUgdGhhdCBleHRyYSBt YXkgbm90IGJlIHNldCBpZiB0aGUKKyAqIGFzc2lnbm1lbnQgaXMgdG8gYmUgc3VwcHJlc3Nl ZC4KKyAqLworc3RhdGljIHZvaWQKK2Fzc2lnbl9wZ19hdWRpdF9sb2coY29uc3QgY2hhciAq bmV3dmFsLCB2b2lkICpleHRyYSkKK3sKKwlpZiAoZXh0cmEpCisJCWF1ZGl0TG9nQml0bWFw ID0gKih1aW50NjQgKilleHRyYTsKK30KKworLyoKKyAqIERlZmluZSBHVUMgdmFyaWFibGVz IGFuZCBpbnN0YWxsIGhvb2tzIHVwb24gbW9kdWxlIGxvYWQuCisgKi8KK3ZvaWQKK19QR19p bml0KHZvaWQpCit7CisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQorCQllcmVwb3J0KEVSUk9S LAorCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFU RSksCisJCQllcnJtc2coInBnX2F1ZGl0IG11c3QgYmUgbG9hZGVkIHZpYSBzaGFyZWRfcHJl bG9hZF9saWJyYXJpZXMiKSkpOworCisJLyoKKwkgKiBwZ19hdWRpdC5yb2xlID0gImF1ZGl0 IgorCSAqCisJICogRGVmaW5lcyBhIHJvbGUgdG8gYmUgdXNlZCBmb3IgYXVkaXRpbmcuCisJ ICovCisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX2F1ZGl0LnJvbGUiLAorCQkJ CQkJCSAgICJFbmFibGUgb2JqZWN0IGF1ZGl0aW5nIGZvciByb2xlIiwKKwkJCQkJCQkgICBO VUxMLAorCQkJCQkJCSAgICZhdWRpdFJvbGUsCisJCQkJCQkJICAgIiIsCisJCQkJCQkJICAg UEdDX1NVU0VULAorCQkJCQkJCSAgIEdVQ19OT1RfSU5fU0FNUExFLAorCQkJCQkJCSAgIE5V TEwsIE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiBwZ19hdWRpdC5sb2cgPSAicmVhZCwgd3Jp dGUsIGRkbCIKKwkgKgorCSAqIENvbnRyb2xzIHdoYXQgY2xhc3NlcyBvZiBjb21tYW5kcyBh cmUgbG9nZ2VkLgorCSAqLworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19hdWRp dC5sb2ciLAorCQkJCQkJCSAgICJFbmFibGUgc2Vzc2lvbiBhdWRpdGluZyBmb3IgY2xhc3Nl cyBvZiAiCisJCQkJCQkJICAgImNvbW1hbmRzIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJ CSAgICZhdWRpdExvZywKKwkJCQkJCQkgICAibm9uZSIsCisJCQkJCQkJICAgUEdDX1NVU0VU LAorCQkJCQkJCSAgIEdVQ19MSVNUX0lOUFVUIHwgR1VDX05PVF9JTl9TQU1QTEUsCisJCQkJ CQkJICAgY2hlY2tfcGdfYXVkaXRfbG9nLAorCQkJCQkJCSAgIGFzc2lnbl9wZ19hdWRpdF9s b2csCisJCQkJCQkJICAgTlVMTCk7CisKKwkvKgorCSAqIHBnX2F1ZGl0LmxvZ19wYXJhbWV0 ZXIgPSBvbgorCSAqCisJICogQ29udHJvbHMgd2hldGhlciBwYXJhbWV0ZXJzIHBhc3NlZCB3 aXRoIGEgc3RhdGVtZW50IGFyZSBsb2dnZWQuCisJICovCisJRGVmaW5lQ3VzdG9tQm9vbFZh cmlhYmxlKCJwZ19hdWRpdC5sb2dfcGFyYW1ldGVyIiwKKwkJCQkJCQkgIkVuYWJsZSBzdGF0 ZW1lbnQgcGFyYW1ldGVyIGxvZ2dpbmciLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmYXVk aXRMb2dQYXJhbWV0ZXIsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfU1VTRVQsCisJ CQkJCQkJIEdVQ19OT1RfSU5fU0FNUExFLAorCQkJCQkJCSBOVUxMLCBOVUxMLCBOVUxMKTsK KworCS8qCisJICogcGdfYXVkaXQubG9nX3JlbGF0aW9uID0gb24KKwkgKgorCSAqIENvbnRy b2xzIHdoZXRoZXIgcmVsYXRpb25zIGdldCBzZXBhcmF0ZSBsb2cgZW50cmllcyBkdXJpbmcg c2Vzc2lvbgorCSAqIGxvZ2dpbmcgb2YgUkVBRCBhbmQgV1JJVEUgY2xhc3Nlcy4gIFRoaXMg d29ya3MgYXMgaWYgYWxsIHJlbGF0aW9ucyBpbiB0aGUKKwkgKiBkYXRhYmFzZSBoYWQgYmVl biBhZGRlZCB0byB0aGUgYXVkaXQgcm9sZSBhbmQgcHJvdmlkZXMgYSBzaG9ydGN1dCB3aGVu CisJICogcmVhbGx5IGRldGFpbGVkIGxvZ2dpbmcgb2YgYWJzb2x1dGVseSBldmVyeSByZWxh dGlvbiBpcyByZXF1aXJlZC4KKwkgKi8KKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBn X2F1ZGl0LmxvZ19yZWxhdGlvbiIsCisJCQkJCQkJICJFbmFibGUgc2Vzc2lvbiByZWxhdGlv biBsb2dnaW5nIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJmF1ZGl0TG9nUmVsYXRpb24s CisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfU1VTRVQsCisJCQkJCQkJIEdVQ19OT1Rf SU5fU0FNUExFLAorCQkJCQkJCSBOVUxMLCBOVUxMLCBOVUxMKTsKKworCS8qCisJICogcGdf YXVkaXQubG9nX2NhdGFsb2cgPSBvbgorCSAqCisJICogQ29udHJvbHMgd2hldGhlciByZWxh dGlvbnMgaW4gcGdfY2F0YWxvZyBhcmUgc2Vzc2lvbiBsb2dnZWQgaW4gcXVlcmllcworCSAq IHRoYXQgY29udGFpbiAqb25seSogcGdfY2F0YWxvZyByZWxhdGlvbnMuCisJICovCisJRGVm aW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19hdWRpdC5sb2dfY2F0YWxvZyIsCisJCQkJCQkJ ICJFbmFibGUgbG9nZ2luZyBvZiByZWxhdGlvbnMgaW4gcGdfY2F0YWxvZyIsCisJCQkJCQkJ IE5VTEwsCisJCQkJCQkJICZhdWRpdExvZ0NhdGFsb2csCisJCQkJCQkJIHRydWUsCisJCQkJ CQkJIFBHQ19TVVNFVCwKKwkJCQkJCQkgR1VDX05PVF9JTl9TQU1QTEUsCisJCQkJCQkJIE5V TEwsIE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiBwZ19hdWRpdC5sb2dfbm90aWNlID0gb24K KwkgKgorCSAqIEF1ZGl0IGxvZ2dpbmcgaXMgcmFpc2VkIGFzIG5vdGljZXMgdGhhdCBjYW4g YmUgc2VlbiBvbiB0aGUgY2xpZW50LiAgVGhpcworCSAqIGlzIGludGVuZGVkIGZvciB0ZXN0 aW5nIHB1cnBvc2VzLgorCSAqLworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfYXVk aXQubG9nX25vdGljZSIsCisJCQkJCQkJICJSYWlzZSBhIG5vdGljZSB3aGVuIGxvZ2dpbmci LAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmYXVkaXRMb2dOb3RpY2UsCisJCQkJCQkJIGZh bHNlLAorCQkJCQkJCSBQR0NfU1VTRVQsCisJCQkJCQkJIEdVQ19OT1RfSU5fU0FNUExFLAor CQkJCQkJCSBOVUxMLCBOVUxMLCBOVUxMKTsKKworCS8qCisJICogSW5zdGFsbCBvdXIgaG9v ayBmdW5jdGlvbnMgYWZ0ZXIgc2F2aW5nIHRoZSBleGlzdGluZyBwb2ludGVycyB0byBwcmVz ZXJ2ZQorCSAqIHRoZSBjaGFpbi4KKwkgKi8KKwluZXh0X0V4ZWN1dG9yU3RhcnRfaG9vayA9 IEV4ZWN1dG9yU3RhcnRfaG9vazsKKwlFeGVjdXRvclN0YXJ0X2hvb2sgPSBwZ19hdWRpdF9F eGVjdXRvclN0YXJ0X2hvb2s7CisKKwluZXh0X0V4ZWN1dG9yQ2hlY2tQZXJtc19ob29rID0g RXhlY3V0b3JDaGVja1Blcm1zX2hvb2s7CisJRXhlY3V0b3JDaGVja1Blcm1zX2hvb2sgPSBw Z19hdWRpdF9FeGVjdXRvckNoZWNrUGVybXNfaG9vazsKKworCW5leHRfUHJvY2Vzc1V0aWxp dHlfaG9vayA9IFByb2Nlc3NVdGlsaXR5X2hvb2s7CisJUHJvY2Vzc1V0aWxpdHlfaG9vayA9 IHBnX2F1ZGl0X1Byb2Nlc3NVdGlsaXR5X2hvb2s7CisKKwluZXh0X29iamVjdF9hY2Nlc3Nf aG9vayA9IG9iamVjdF9hY2Nlc3NfaG9vazsKKwlvYmplY3RfYWNjZXNzX2hvb2sgPSBwZ19h dWRpdF9vYmplY3RfYWNjZXNzX2hvb2s7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2F1 ZGl0L3BnX2F1ZGl0LmNvbmYgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbmYKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmNGEyMgotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQuY29uZgpAQCAtMCwwICsxIEBACitz aGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSBwZ19hdWRpdApkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19hdWRpdC9wZ19hdWRpdC5jb250cm9sIGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRp dC5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MzBjNjgK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbnRyb2wK QEAgLTAsMCArMSw1IEBACisjIHBnX2F1ZGl0IGV4dGVuc2lvbgorY29tbWVudCA9ICdwcm92 aWRlcyBhdWRpdGluZyBmdW5jdGlvbmFsaXR5JworZGVmYXVsdF92ZXJzaW9uID0gJzEuMC4w JworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdfYXVkaXQnCityZWxvY2F0YWJsZSA9 IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvc3FsL3BnX2F1ZGl0LnNxbCBi L2NvbnRyaWIvcGdfYXVkaXQvc3FsL3BnX2F1ZGl0LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4wNGZjNjEyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19hdWRpdC9zcWwvcGdfYXVkaXQuc3FsCkBAIC0wLDAgKzEsNjAzIEBACistLSBMb2FkIHBn X2F1ZGl0IG1vZHVsZQorY3JlYXRlIGV4dGVuc2lvbiBwZ19hdWRpdDsKKworLS0KKy0tIENy ZWF0ZSBhIHN1cGVydXNlciByb2xlIHRoYXQgd2Uga25vdyB0aGUgbmFtZSBvZiBmb3IgdGVz dGluZworQ1JFQVRFIFVTRVIgc3VwZXIgU1VQRVJVU0VSOworQUxURVIgUk9MRSBzdXBlciBT RVQgcGdfYXVkaXQubG9nID0gJ1JvbGUnOworQUxURVIgUk9MRSBzdXBlciBTRVQgcGdfYXVk aXQubG9nX25vdGljZSA9IE9OOworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVy OworCistLQorLS0gQ3JlYXRlIGF1ZGl0b3Igcm9sZQorQ1JFQVRFIFJPTEUgYXVkaXRvcjsK KworLS0KKy0tIENyZWF0ZSBmaXJzdCB0ZXN0IHVzZXIKK0NSRUFURSBVU0VSIHVzZXIxOwor QUxURVIgUk9MRSB1c2VyMSBTRVQgcGdfYXVkaXQubG9nID0gJ2RkbCwgUk9MRSc7CitBTFRF UiBST0xFIHVzZXIxIFNFVCBwZ19hdWRpdC5sb2dfbm90aWNlID0gT047CisKKy0tCistLSBD cmVhdGUsIHNlbGVjdCwgZHJvcCAoc2VsZWN0IHdpbGwgbm90IGJlIGF1ZGl0ZWQpCitcY29u bmVjdCBjb250cmliX3JlZ3Jlc3Npb24gdXNlcjEKK0NSRUFURSBUQUJMRSBwdWJsaWMudGVz dCAoaWQgSU5UKTsKK1NFTEVDVCAqIEZST00gdGVzdDsKK0RST1AgVEFCTEUgdGVzdDsKKwor LS0KKy0tIENyZWF0ZSBzZWNvbmQgdGVzdCB1c2VyCitcY29ubmVjdCBjb250cmliX3JlZ3Jl c3Npb24gc3VwZXIKKworQ1JFQVRFIFVTRVIgdXNlcjI7CitBTFRFUiBST0xFIHVzZXIyIFNF VCBwZ19hdWRpdC5sb2cgPSAnUmVhZCwgd3JpdEUnOworQUxURVIgUk9MRSB1c2VyMiBTRVQg cGdfYXVkaXQubG9nX2NhdGFsb2cgPSBPRkY7CitBTFRFUiBST0xFIHVzZXIyIFNFVCBwZ19h dWRpdC5sb2dfbm90aWNlID0gT047CitBTFRFUiBST0xFIHVzZXIyIFNFVCBwZ19hdWRpdC5y b2xlID0gYXVkaXRvcjsKKworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIyCitD UkVBVEUgVEFCTEUgdGVzdDIgKGlkIElOVCk7CitHUkFOVCBTRUxFQ1QgT04gVEFCTEUgcHVi bGljLnRlc3QyIFRPIGF1ZGl0b3I7CisKKy0tCistLSBSb2xlLWJhc2VkIHRlc3RzCitDUkVB VEUgVEFCTEUgdGVzdDMKKygKKwlpZCBJTlQKKyk7CisKK1NFTEVDVCBjb3VudCgqKQorICBG Uk9NCisoCisJU0VMRUNUIHJlbG5hbWUKKwkgIEZST00gcGdfY2xhc3MKKwkgIExJTUlUIDEK KykgU1VCUVVFUlk7CisKK1NFTEVDVCAqCisgIEZST00gdGVzdDMsIHRlc3QyOworCitHUkFO VCBJTlNFUlQKKyAgIE9OIFRBQkxFIHB1YmxpYy50ZXN0MworICAgVE8gYXVkaXRvcjsKKwor LS0KKy0tIENyZWF0ZSBhIHZpZXcgdG8gdGVzdCBsb2dnaW5nCitDUkVBVEUgVklFVyB2d190 ZXN0MyBBUworU0VMRUNUICoKKyAgRlJPTSB0ZXN0MzsKKworR1JBTlQgU0VMRUNUCisgICBP TiB2d190ZXN0MworICAgVE8gYXVkaXRvcjsKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVj YXVzZSBvZjoKKy0tIHNlbGVjdCBvbiB2d190ZXN0MworLS0gc2VsZWN0IG9uIHRlc3QyCitT RUxFQ1QgKgorICBGUk9NIHZ3X3Rlc3QzLCB0ZXN0MjsKKworLS0KKy0tIE9iamVjdCBsb2dn ZWQgYmVjYXVzZSBvZjoKKy0tIGluc2VydCBvbiB0ZXN0MworLS0gc2VsZWN0IG9uIHRlc3Qy CitXSVRIIENURSBBUworKAorCVNFTEVDVCBpZAorCSAgRlJPTSB0ZXN0MgorKQorSU5TRVJU IElOVE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsKKworLS0KKy0tIE9iamVjdCBs b2dnZWQgYmVjYXVzZSBvZjoKKy0tIGluc2VydCBvbiB0ZXN0MworV0lUSCBDVEUgQVMKKygK KwlJTlNFUlQgSU5UTyB0ZXN0MyBWQUxVRVMgKDEpCisJCQkJICAgUkVUVVJOSU5HIGlkCisp CitJTlNFUlQgSU5UTyB0ZXN0MgorU0VMRUNUIGlkCisgIEZST00gY3RlOworCitHUkFOVCBV UERBVEUgT04gVEFCTEUgcHVibGljLnRlc3QyIFRPIGF1ZGl0b3I7CisKKy0tCistLSBPYmpl Y3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQgb24gdGVzdDMKKy0tIHVwZGF0ZSBv biB0ZXN0MgorV0lUSCBDVEUgQVMKKygKKwlVUERBVEUgdGVzdDIKKwkgICBTRVQgaWQgPSAx CisJUkVUVVJOSU5HIGlkCispCitJTlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZS T00gY3RlOworCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gaW5zZXJ0 IG9uIHRlc3QyCitXSVRIIENURSBBUworKAorCUlOU0VSVCBJTlRPIHRlc3QyIFZBTFVFUyAo MSkKKwkJCQkgICBSRVRVUk5JTkcgaWQKKykKK1VQREFURSB0ZXN0MworICAgU0VUIGlkID0g Y3RlLmlkCisgIEZST00gY3RlCisgV0hFUkUgdGVzdDMuaWQgPD4gY3RlLmlkOworCistLQor LS0gQ2hhbmdlIHBlcm1pc3Npb25zIG9mIHVzZXIgMiBzbyB0aGF0IG9ubHkgb2JqZWN0IGxv Z2dpbmcgd2lsbCBiZSBkb25lCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXIK K2FsdGVyIHJvbGUgdXNlcjIgc2V0IHBnX2F1ZGl0LmxvZyA9ICdOT05FJzsKKworXGNvbm5l Y3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIyCisKKy0tCistLSBDcmVhdGUgdGVzdDQgYW5k IGFkZCBwZXJtaXNzaW9ucworQ1JFQVRFIFRBQkxFIHRlc3Q0CisoCisJaWQgaW50LAorCW5h bWUgdGV4dAorKTsKKworR1JBTlQgU0VMRUNUIChuYW1lKQorICAgT04gVEFCTEUgcHVibGlj LnRlc3Q0CisgICBUTyBhdWRpdG9yOworCitHUkFOVCBVUERBVEUgKGlkKQorICAgT04gVEFC TEUgcHVibGljLnRlc3Q0CisgICBUTyBhdWRpdG9yOworCitHUkFOVCBpbnNlcnQgKG5hbWUp CisgICBPTiBUQUJMRSBwdWJsaWMudGVzdDQKKyAgIFRPIGF1ZGl0b3I7CisKKy0tCistLSBO b3Qgb2JqZWN0IGxvZ2dlZAorU0VMRUNUIGlkCisgIEZST00gcHVibGljLnRlc3Q0OworCist LQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0IChuYW1lKSBvbiB0 ZXN0NAorU0VMRUNUIG5hbWUKKyAgRlJPTSBwdWJsaWMudGVzdDQ7CisKKy0tCistLSBOb3Qg b2JqZWN0IGxvZ2dlZAorSU5TRVJUIElOVE8gcHVibGljLnRlc3Q0IChpZCkKKwkJCQkgIFZB TFVFUyAoMSk7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNl cnQgKG5hbWUpIG9uIHRlc3Q0CitJTlNFUlQgSU5UTyBwdWJsaWMudGVzdDQgKG5hbWUpCisJ CQkJICBWQUxVRVMgKCd0ZXN0Jyk7CisKKy0tCistLSBOb3Qgb2JqZWN0IGxvZ2dlZAorVVBE QVRFIHB1YmxpYy50ZXN0NAorICAgU0VUIG5hbWUgPSAnZm9vJzsKKworLS0KKy0tIE9iamVj dCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAoaWQpIG9uIHRlc3Q0CitVUERBVEUg cHVibGljLnRlc3Q0CisgICBTRVQgaWQgPSAxOworCistLQorLS0gT2JqZWN0IGxvZ2dlZCBi ZWNhdXNlIG9mOgorLS0gdXBkYXRlIChuYW1lKSBvbiB0ZXN0NAorLS0gdXBkYXRlIChuYW1l KSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgc2VsZWN0IChuYW1lKSBkdWUgdG8gb3JkZXJpbmcK K3VwZGF0ZSBwdWJsaWMudGVzdDQgc2V0IG5hbWUgPSAnZm9vJyB3aGVyZSBuYW1lID0gJ2Jh cic7CisKKy0tCistLSBEcm9wIHRlc3QgdGFibGVzCitEUk9QIFRBQkxFIHRlc3QyOworRFJP UCBWSUVXIHZ3X3Rlc3QzOworRFJPUCBUQUJMRSB0ZXN0MzsKK0RST1AgVEFCTEUgdGVzdDQ7 CisKKy0tCistLSBDaGFuZ2UgcGVybWlzc2lvbnMgb2YgdXNlciAxIHNvIHRoYXQgc2Vzc2lv biBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1 cGVyCithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2cgPSAnRERMLCBSRUFEJzsK K1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMQorCistLQorLS0gQ3JlYXRlIHRh YmxlIGlzIHNlc3Npb24gbG9nZ2VkCitDUkVBVEUgVEFCTEUgcHVibGljLmFjY291bnQKKygK KwlpZCBJTlQsCisJbmFtZSBURVhULAorCXBhc3N3b3JkIFRFWFQsCisJZGVzY3JpcHRpb24g VEVYVAorKTsKKworLS0KKy0tIFNlbGVjdCBpcyBzZXNzaW9uIGxvZ2dlZAorU0VMRUNUICoK KyAgRlJPTSBhY2NvdW50OworCistLQorLS0gSW5zZXJ0IGlzIG5vdCBsb2dnZWQKK0lOU0VS VCBJTlRPIGFjY291bnQgKGlkLCBuYW1lLCBwYXNzd29yZCwgZGVzY3JpcHRpb24pCisJCQkg VkFMVUVTICgxLCAndXNlcjEnLCAnSEFTSDEnLCAnYmxhaCwgYmxhaCcpOworCistLQorLS0g Q2hhbmdlIHBlcm1pc3Npb25zIG9mIHVzZXIgMSBzbyB0aGF0IG9ubHkgb2JqZWN0IGxvZ2dp bmcgd2lsbCBiZSBkb25lCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXIKK2Fs dGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZyA9ICdub25lJzsKK2FsdGVyIHJvbGUg dXNlcjEgc2V0IHBnX2F1ZGl0LnJvbGUgPSAnYXVkaXRvcic7CitcY29ubmVjdCBjb250cmli X3JlZ3Jlc3Npb24gdXNlcjEKKworLS0KKy0tIEF1ZGl0b3IgZ3JhbnRzIG5vdCBsb2dnZWQK K0dSQU5UIFNFTEVDVCAocGFzc3dvcmQpLAorCSAgVVBEQVRFIChuYW1lLCBwYXNzd29yZCkK KyAgIE9OIFRBQkxFIHB1YmxpYy5hY2NvdW50CisgICBUTyBhdWRpdG9yOworCistLQorLS0g Tm90IG9iamVjdCBsb2dnZWQKK1NFTEVDVCBpZCwKKwkgICBuYW1lCisgIEZST00gYWNjb3Vu dDsKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAocGFz c3dvcmQpIG9uIGFjY291bnQKK1NFTEVDVCBwYXNzd29yZAorICBGUk9NIGFjY291bnQ7CisK Ky0tCistLSBOb3Qgb2JqZWN0IGxvZ2dlZAorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBkZXNj cmlwdGlvbiA9ICd5YWRhLCB5YWRhJzsKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVz ZSBvZjoKKy0tIHVwZGF0ZSAocGFzc3dvcmQpIG9uIGFjY291bnQKK1VQREFURSBhY2NvdW50 CisgICBTRVQgcGFzc3dvcmQgPSAnSEFTSDInOworCistLQorLS0gQ2hhbmdlIHBlcm1pc3Np b25zIG9mIHVzZXIgMSBzbyB0aGF0IHNlc3Npb24gcmVsYXRpb24gbG9nZ2luZyB3aWxsIGJl IGRvbmUKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBzdXBlcgorYWx0ZXIgcm9sZSB1 c2VyMSBzZXQgcGdfYXVkaXQubG9nX3JlbGF0aW9uID0gb247CithbHRlciByb2xlIHVzZXIx IHNldCBwZ19hdWRpdC5sb2cgPSAncmVhZCwgV1JJVEUnOworXGNvbm5lY3QgY29udHJpYl9y ZWdyZXNzaW9uIHVzZXIxCisKKy0tCistLSBOb3QgbG9nZ2VkCitjcmVhdGUgdGFibGUgQUND T1VOVF9ST0xFX01BUAorKAorCWFjY291bnRfaWQgSU5ULAorCXJvbGVfaWQgSU5UCispOwor CistLQorLS0gQXVkaXRvciBncmFudHMgbm90IGxvZ2dlZAorR1JBTlQgU0VMRUNUCisgICBP TiBUQUJMRSBwdWJsaWMuYWNjb3VudF9yb2xlX21hcAorICAgVE8gYXVkaXRvcjsKKworLS0K Ky0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAocGFzc3dvcmQpIG9u IGFjY291bnQKKy0tIHNlbGVjdCBvbiBhY2NvdW50X3JvbGVfbWFwCistLSBTZXNzaW9uIGxv Z2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2UgbG9nID0gcmVhZCBhbmQgbG9nX3JlbGF0aW9u ID0gb24KK1NFTEVDVCBhY2NvdW50LnBhc3N3b3JkLAorCSAgIGFjY291bnRfcm9sZV9tYXAu cm9sZV9pZAorICBGUk9NIGFjY291bnQKKwkgICBJTk5FUiBKT0lOIGFjY291bnRfcm9sZV9t YXAKKwkJCW9uIGFjY291bnQuaWQgPSBhY2NvdW50X3JvbGVfbWFwLmFjY291bnRfaWQ7CisK Ky0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBzZWxlY3QgKHBhc3N3b3Jk KSBvbiBhY2NvdW50CistLSBTZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2Ug bG9nID0gcmVhZCBhbmQgbG9nX3JlbGF0aW9uID0gb24KK1NFTEVDVCBwYXNzd29yZAorICBG Uk9NIGFjY291bnQ7CisKKy0tCistLSBOb3Qgb2JqZWN0IGxvZ2dlZAorLS0gU2Vzc2lvbiBs b2dnZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlv biA9IG9uCitVUERBVEUgYWNjb3VudAorICAgU0VUIGRlc2NyaXB0aW9uID0gJ3lhZGEsIHlh ZGEnOworCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0IChw YXNzd29yZCkgb24gYWNjb3VudCAoaW4gdGhlIHdoZXJlIGNsYXVzZSkKKy0tIFNlc3Npb24g bG9nZ2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2dfcmVsYXRp b24gPSBvbgorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBkZXNjcmlwdGlvbiA9ICd5YWRhLCB5 YWRhJworIHdoZXJlIHBhc3N3b3JkID0gJ0hBU0gyJzsKKworLS0KKy0tIE9iamVjdCBsb2dn ZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAocGFzc3dvcmQpIG9uIGFjY291bnQKKy0tIFNl c3Npb24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2df cmVsYXRpb24gPSBvbgorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBwYXNzd29yZCA9ICdIQVNI Mic7CisKKy0tCistLSBDaGFuZ2UgYmFjayB0byBzdXBlcnVzZXIgdG8gZG8gZXhoYXVzdGl2 ZSB0ZXN0cworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVyCitTRVQgcGdfYXVk aXQubG9nID0gJ0FMTCc7CitTRVQgcGdfYXVkaXQubG9nX25vdGljZSA9IE9OOworU0VUIHBn X2F1ZGl0LmxvZ19yZWxhdGlvbiA9IE9OOworU0VUIHBnX2F1ZGl0LmxvZ19wYXJhbWV0ZXIg PSBPTjsKKworLS0KKy0tIFNpbXBsZSBETyBibG9jaworRE8gJCQKK0JFR0lOCisJcmFpc2Ug bm90aWNlICd0ZXN0JzsKK0VORCAkJDsKKworLS0KKy0tIENyZWF0ZSB0ZXN0IHNjaGVtYQor Q1JFQVRFIFNDSEVNQSB0ZXN0OworCistLQorLS0gQ29weSBhY2NvdW50IHRvIHN0ZG91dAor Q09QWSBhY2NvdW50IFRPIHN0ZG91dDsKKworLS0KKy0tIENyZWF0ZSBhIHRhYmxlIGZyb20g YSBxdWVyeQorQ1JFQVRFIFRBQkxFIHRlc3QuYWNjb3VudF9jb3B5IEFTCitTRUxFQ1QgKgor ICBGUk9NIGFjY291bnQ7CisKKy0tCistLSBDb3B5IGZyb20gc3RkaW4gdG8gYWNjb3VudCBj b3B5CitDT1BZIHRlc3QuYWNjb3VudF9jb3B5IGZyb20gc3RkaW47CisxCXVzZXIxCUhBU0gy CXlhZGEsIHlhZGEKK1wuCisKKy0tCistLSBUZXN0IHByZXBhcmVkIHN0YXRlbWVudAorUFJF UEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBBUworU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50Cisg V0hFUkUgaWQgPSAkMTsKKworRVhFQ1VURSBwZ2NsYXNzc3RtdCAoMSk7CitERUFMTE9DQVRF IHBnY2xhc3NzdG10OworCistLQorLS0gVGVzdCBjdXJzb3IKK0JFR0lOOworCitERUNMQVJF IGN0ZXN0IFNDUk9MTCBDVVJTT1IgRk9SCitTRUxFQ1QgY291bnQoKikKKyAgRlJPTQorKAor CVNFTEVDVCByZWxuYW1lCisJICBGUk9NIHBnX2NsYXNzCisJIExJTUlUIDEKKyApIHN1YnF1 ZXJ5OworCitGRVRDSCBORVhUIEZST00gY3Rlc3Q7CitDTE9TRSBjdGVzdDsKK0NPTU1JVDsK KworLS0KKy0tIFR1cm4gb2ZmIGxvZ19jYXRhbG9nIGFuZCBwZ19jbGFzcyB3aWxsIG5vdCBi ZSBsb2dnZWQKK1NFVCBwZ19hdWRpdC5sb2dfY2F0YWxvZyA9IE9GRjsKKworU0VMRUNUIGNv dW50KCopCisgIEZST00KKygKKwlTRUxFQ1QgcmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcwor CSBMSU1JVCAxCisgKSBzdWJxdWVyeTsKKworLS0KKy0tIFRlc3QgcHJlcGFyZWQgaW5zZXJ0 CitDUkVBVEUgVEFCTEUgdGVzdC50ZXN0X2luc2VydAorKAorCWlkIElOVAorKTsKKworUFJF UEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBBUworSU5TRVJUIElOVE8gdGVzdC50ZXN0X2luc2Vy dCAoaWQpCisJCQkJCSAgVkFMVUVTICgkMSk7CitFWEVDVVRFIHBnY2xhc3NzdG10ICgxKTsK KworLS0KKy0tIENoZWNrIHRoYXQgcHJpbWFyeSBrZXkgY3JlYXRpb24gaXMgbG9nZ2VkCitD UkVBVEUgVEFCTEUgcHVibGljLnRlc3QKKygKKwlpZCBJTlQsCisJbmFtZSBURVhULAorCWRl c2NyaXB0aW9uIFRFWFQsCisJQ09OU1RSQUlOVCB0ZXN0X3BrZXkgUFJJTUFSWSBLRVkgKGlk KQorKTsKKworLS0KKy0tIENoZWNrIHRoYXQgYW5hbHl6ZSBpcyBsb2dnZWQKK0FOQUxZWkUg dGVzdDsKKworLS0KKy0tIEdyYW50cyB0byBwdWJsaWMgc2hvdWxkIG5vdCBjYXVzZSBvYmpl Y3QgbG9nZ2luZyAoc2Vzc2lvbiBsb2dnaW5nIHdpbGwKKy0tIHN0aWxsIGhhcHBlbikKK0dS QU5UIFNFTEVDVAorICBPTiBUQUJMRSBwdWJsaWMudGVzdAorICBUTyBQVUJMSUM7CisKK1NF TEVDVCAqCisgIEZST00gdGVzdDsKKworLS0gQ2hlY2sgdGhhdCBzdGF0ZW1lbnRzIHdpdGhv dXQgY29sdW1ucyBsb2cKK1NFTEVDVAorICBGUk9NIHRlc3Q7CisKK1NFTEVDVCAxLAorCSAg IGN1cnJlbnRfdXNlcjsKKworRE8gJCQKK0RFQ0xBUkUKKwl0ZXN0IElOVDsKK0JFR0lOCisJ U0VMRUNUIDEKKwkgIElOVE8gdGVzdDsKK0VORCAkJDsKKworZXhwbGFpbiBzZWxlY3QgMTsK KworLS0KKy0tIFRlc3QgdGhhdCBsb29rcyBpbnNpZGUgb2YgZG8gYmxvY2tzIGxvZworSU5T RVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIFRFU1Qg KGlkKQorCQkgIFZBTFVFUyAoMik7CitJTlNFUlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxV RVMgKDMpOworCitETyAkJAorREVDTEFSRQorCXJlc3VsdCBSRUNPUkQ7CitCRUdJTgorCUZP UiByZXN1bHQgSU4KKwkJU0VMRUNUIGlkCisJCSAgRlJPTSB0ZXN0CisJTE9PUAorCQlJTlNF UlQgSU5UTyB0ZXN0IChpZCkKKwkJCSBWQUxVRVMgKHJlc3VsdC5pZCArIDEwMCk7CisJRU5E IExPT1A7CitFTkQgJCQ7CisKKy0tCistLSBUZXN0IG9iZnVzY2F0ZWQgZHluYW1pYyBzcWwg Zm9yIGNsZWFuIGxvZ2dpbmcKK0RPICQkCitERUNMQVJFCisJdGFibGVfbmFtZSBURVhUID0g J2RvX3RhYmxlJzsKK0JFR0lOCisJRVhFQ1VURSAnQ1JFQVRFIFRBQkxFICcgfHwgdGFibGVf bmFtZSB8fCAnICgid2VpcmQgbmFtZSIgSU5UKSc7CisJRVhFQ1VURSAnRFJPUCB0YWJsZSAn IHx8IHRhYmxlX25hbWU7CitFTkQgJCQ7CisKKy0tCistLSBHZW5lcmF0ZSBhbiBlcnJvciBh bmQgbWFrZSBzdXJlIHRoZSBzdGFjayBnZXRzIGNsZWFyZWQKK0RPICQkCitCRUdJTgorCUNS RUFURSBUQUJMRSBib2d1cy50ZXN0X2Jsb2NrCisJKAorCQlpZCBJTlQKKwkpOworRU5EICQk OworCistLQorLS0gVGVzdCBhbHRlciB0YWJsZSBzdGF0ZW1lbnRzCitBTFRFUiBUQUJMRSBw dWJsaWMudGVzdAorCURST1AgQ09MVU1OIGRlc2NyaXB0aW9uIDsKKworQUxURVIgVEFCTEUg cHVibGljLnRlc3QKKwlSRU5BTUUgVE8gdGVzdDI7CisKK0FMVEVSIFRBQkxFIHB1YmxpYy50 ZXN0MgorCVNFVCBTQ0hFTUEgdGVzdDsKKworQUxURVIgVEFCTEUgdGVzdC50ZXN0MgorCUFE RCBDT0xVTU4gZGVzY3JpcHRpb24gVEVYVDsKKworQUxURVIgVEFCTEUgdGVzdC50ZXN0Mgor CURST1AgQ09MVU1OIGRlc2NyaXB0aW9uOworCitEUk9QIFRBQkxFIHRlc3QudGVzdDI7CisK Ky0tCistLSBUZXN0IG11bHRpcGxlIHN0YXRlbWVudHMgd2l0aCBvbmUgc2VtaS1jb2xvbgor Q1JFQVRFIFNDSEVNQSBmb28KKwlDUkVBVEUgVEFCTEUgZm9vLmJhciAoaWQgaW50KQorCUNS RUFURSBUQUJMRSBmb28uYmF6IChpZCBpbnQpOworCistLQorLS0gVGVzdCBhZ2dyZWdhdGUK K0NSRUFURSBGVU5DVElPTiBwdWJsaWMuaW50X2FkZAorKAorCWEgSU5ULAorCWIgSU5UCisp CisJUkVUVVJOUyBJTlQgTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorQkVHSU4KKwlyZXR1cm4g YSArIGI7CitFTkQgJCQ7CisKK1NFTEVDVCBpbnRfYWRkKDEsIDEpOworCitDUkVBVEUgQUdH UkVHQVRFIHB1YmxpYy5zdW1fdGVzdChJTlQpIChTRlVOQz1wdWJsaWMuaW50X2FkZCwgU1RZ UEU9SU5ULCBJTklUQ09ORD0nMCcpOworQUxURVIgQUdHUkVHQVRFIHB1YmxpYy5zdW1fdGVz dChpbnRlZ2VyKSBSRU5BTUUgVE8gc3VtX3Rlc3QyOworCistLQorLS0gVGVzdCBjb252ZXJz aW9uCitDUkVBVEUgQ09OVkVSU0lPTiBwdWJsaWMuY29udmVyc2lvbl90ZXN0IEZPUiAnU1FM X0FTQ0lJJyBUTyAnTVVMRV9JTlRFUk5BTCcgRlJPTSBwZ19jYXRhbG9nLmFzY2lpX3RvX21p YzsKK0FMVEVSIENPTlZFUlNJT04gcHVibGljLmNvbnZlcnNpb25fdGVzdCBSRU5BTUUgVE8g Y29udmVyc2lvbl90ZXN0MjsKKworLS0KKy0tIFRlc3QgY3JlYXRlL2FsdGVyL2Ryb3AgZGF0 YWJhc2UKK0NSRUFURSBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDsKK0FM VEVSIERBVEFCQVNFIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0IFJFTkFNRSBUTyBjb250 cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDI7CitEUk9QIERBVEFCQVNFIGNvbnRyaWJfcmVncmVz c2lvbl9wZ2F1ZGl0MjsKKworLS0KKy0tIFRlc3QgdGhhdCBmcmVlcyBhIG1lbW9yeSBjb250 ZXh0IGVhcmxpZXIgdGhhbiBleHBlY3RlZAorQ1JFQVRFIFRBQkxFIGhvZ2UKKygKKwlpZCBp bnQKKyk7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0KCkKKwlSRVRVUk5TIElOVCBBUyAkJAor REVDTEFSRQorCWN1cjEgY3Vyc29yIGZvciBzZWxlY3QgKiBmcm9tIGhvZ2U7CisJdG1wIGlu dDsKK0JFR0lOCisJT1BFTiBjdXIxOworCUZFVENIIGN1cjEgaW50byB0bXA7CisJUkVUVVJO IHRtcDsKK0VORCAkJAorTEFOR1VBR0UgcGxwZ3NxbCA7CisKK1NFTEVDVCB0ZXN0KCk7CisK Ky0tCistLSBEZWxldGUgYWxsIHJvd3MgdGhlbiBkZWxldGUgMSByb3cKK1NFVCBwZ19hdWRp dC5sb2cgPSAnd3JpdGUnOworU0VUIHBnX2F1ZGl0LnJvbGUgPSAnYXVkaXRvcic7CisKK2Ny ZWF0ZSB0YWJsZSBiYXIKKygKKwljb2wgaW50CispOworCitncmFudCBkZWxldGUKKyAgIG9u IGJhcgorICAgdG8gYXVkaXRvcjsKKworaW5zZXJ0IGludG8gYmFyIChjb2wpCisJCSB2YWx1 ZXMgKDEpOworZGVsZXRlIGZyb20gYmFyOworCitpbnNlcnQgaW50byBiYXIgKGNvbCkKKwkJ IHZhbHVlcyAoMSk7CitkZWxldGUgZnJvbSBiYXIKKyB3aGVyZSBjb2wgPSAxOworCitkcm9w IHRhYmxlIGJhcjsKKworLS0KKy0tIEdyYW50IHJvbGVzIHRvIGVhY2ggb3RoZXIKK1NFVCBw Z19hdWRpdC5sb2cgPSAncm9sZSc7CitHUkFOVCB1c2VyMSBUTyB1c2VyMjsKK1JFVk9LRSB1 c2VyMSBGUk9NIHVzZXIyOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dt bCBiL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKaW5kZXggNDlhNmNlOC4uMGEyYmFlOCAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvY29udHJpYi5zZ21sCkBAIC0xMjQsNiArMTI0LDcgQEAgQ1JFQVRFIEVYVEVOU0lPTiA8 cmVwbGFjZWFibGU+bW9kdWxlX25hbWU8Lz4gRlJPTSB1bnBhY2thZ2VkOwogICZsdHJlZTsK ICAmcGFnZWluc3BlY3Q7CiAgJnBhc3N3b3JkY2hlY2s7CisgJnBnYXVkaXQ7CiAgJnBnYnVm ZmVyY2FjaGU7CiAgJnBnY3J5cHRvOwogICZwZ2ZyZWVzcGFjZW1hcDsKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNn bWwKaW5kZXggNjI2OGQ1NC4uMDNmZWEzMiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Zp bGVsaXN0LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKQEAgLTEyNiw2 ICsxMjYsNyBAQAogPCFFTlRJVFkgb2lkMm5hbWUgICAgICAgIFNZU1RFTSAib2lkMm5hbWUu c2dtbCI+CiA8IUVOVElUWSBwYWdlaW5zcGVjdCAgICAgU1lTVEVNICJwYWdlaW5zcGVjdC5z Z21sIj4KIDwhRU5USVRZIHBhc3N3b3JkY2hlY2sgICBTWVNURU0gInBhc3N3b3JkY2hlY2su c2dtbCI+Cis8IUVOVElUWSBwZ2F1ZGl0ICAgICAgICAgU1lTVEVNICJwZ2F1ZGl0LnNnbWwi PgogPCFFTlRJVFkgcGdidWZmZXJjYWNoZSAgIFNZU1RFTSAicGdidWZmZXJjYWNoZS5zZ21s Ij4KIDwhRU5USVRZIHBnY3J5cHRvICAgICAgICBTWVNURU0gInBnY3J5cHRvLnNnbWwiPgog PCFFTlRJVFkgcGdmcmVlc3BhY2VtYXAgIFNZU1RFTSAicGdmcmVlc3BhY2VtYXAuc2dtbCI+ CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGdhdWRpdC5zZ21sIGIvZG9jL3NyYy9zZ21s L3BnYXVkaXQuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTg2 MWY4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3BnYXVkaXQuc2dtbApAQCAt MCwwICsxLDY2MCBAQAorPCEtLSBkb2Mvc3JjL3NnbWwvcGdhdWRpdC5zZ21sIC0tPgorCis8 c2VjdDEgaWQ9InBnYXVkaXQiIHhyZWZsYWJlbD0icGdhdWRpdCI+CisgIDx0aXRsZT5wZ19h dWRpdDwvdGl0bGU+CisKKyAgPGluZGV4dGVybSB6b25lPSJwZ2F1ZGl0Ij4KKyAgICA8cHJp bWFyeT5wZ19hdWRpdDwvcHJpbWFyeT4KKyAgPC9pbmRleHRlcm0+CisKKyAgPHBhcmE+Cisg ICAgVGhlIDxmaWxlbmFtZT5wZ19hdWRpdDwvZmlsZW5hbWU+IGV4dGVuc2lvbiBwcm92aWRl cyBkZXRhaWxlZCBzZXNzaW9uCisgICAgYW5kL29yIG9iamVjdCBhdWRpdCBsb2dnaW5nIHZp YSB0aGUgc3RhbmRhcmQgbG9nZ2luZyBmYWNpbGl0eS4gIFRoZSBnb2FsCisgICAgaXMgdG8g cHJvdmlkZSB0aGUgdG9vbHMgbmVlZGVkIHRvIHByb2R1Y2UgYXVkaXQgbG9ncyByZXF1aXJl ZCB0byBwYXNzIGFueQorICAgIGdvdmVybm1lbnQsIGZpbmFuY2lhbCwgb3IgSVNPIGNlcnRp ZmljYXRpb24gYXVkaXQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgICBBbiBhdWRpdCBp cyBhbiBvZmZpY2lhbCBpbnNwZWN0aW9uIG9mIGFuIGluZGl2aWR1YWwncyBvciBvcmdhbml6 YXRpb24ncworICAgIGFjY291bnRzLCB0eXBpY2FsbHkgYnkgYW4gaW5kZXBlbmRlbnQgYm9k eS4gIFRoZSBpbmZvcm1hdGlvbiBnYXRoZXJlZCBieQorICAgIDxmaWxlbmFtZT5wZ19hdWRp dDwvZmlsZW5hbWU+IGlzIHByb3Blcmx5IGNhbGxlZCBhbiBhdWRpdCB0cmFpbCBvciBhdWRp dAorICAgIGxvZy4gIFRoZSB0ZXJtIGF1ZGl0IGxvZyBpcyB1c2VkIGluIHRoaXMgZG9jdW1l bnRhdGlvbi4KKyAgPC9wYXJhPgorCisgIDxzZWN0Mj4KKyAgICA8dGl0bGU+V2h5IDxsaXRl cmFsPnBnX2F1ZGl0PC8+PzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIEJhc2ljIHN0 YXRlbWVudCBsb2dnaW5nIGNhbiBiZSBwcm92aWRlZCBieSB0aGUgc3RhbmRhcmQgbG9nZ2lu ZyBmYWNpbGl0eQorICAgICAgdXNpbmcgPGxpdGVyYWw+bG9nX3N0YXRlbWVudCA9IGFsbDwv Pi4gIFRoaXMgaXMgYWNjZXB0YWJsZSBmb3IgbW9uaXRvcmluZworICAgICAgYW5kIG90aGVy IHVzYWdlcyBidXQgZG9lcyBub3QgcHJvdmlkZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGdlbmVy YWxseQorICAgICAgcmVxdWlyZWQgZm9yIGFuIGF1ZGl0LiAgSXQgaXMgbm90IGVub3VnaCB0 byBoYXZlIGEgbGlzdCBvZiBhbGwgdGhlCisgICAgICBvcGVyYXRpb25zIHBlcmZvcm1lZCBh Z2FpbnN0IHRoZSBkYXRhYmFzZS4gSXQgbXVzdCBhbHNvIGJlIHBvc3NpYmxlIHRvCisgICAg ICBmaW5kIHBhcnRpY3VsYXIgc3RhdGVtZW50cyB0aGF0IGFyZSBvZiBpbnRlcmVzdCB0byBh biBhdWRpdG9yLiAgVGhlCisgICAgICBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXR5IHNob3dz IHdoYXQgdGhlIHVzZXIgcmVxdWVzdGVkLCB3aGlsZQorICAgICAgPGxpdGVyYWw+cGdfYXVk aXQ8Lz4gZm9jdXNlcyBvbiB0aGUgZGV0YWlscyBvZiB3aGF0IGhhcHBlbmVkIHdoaWxlCisg ICAgICB0aGUgZGF0YWJhc2Ugd2FzIHNhdGlzZnlpbmcgdGhlIHJlcXVlc3QuCisgICAgPC9w YXJhPgorCisgICAgPHBhcmE+CisgICAgICBGb3IgZXhhbXBsZSwgYW4gYXVkaXRvciBtYXkg d2FudCB0byB2ZXJpZnkgdGhhdCBhIHBhcnRpY3VsYXIgdGFibGUgd2FzCisgICAgICBjcmVh dGVkIGluc2lkZSBhIGRvY3VtZW50ZWQgbWFpbnRlbmFuY2Ugd2luZG93LiAgVGhpcyBtaWdo dCBzZWVtIGxpa2UgYQorICAgICAgc2ltcGxlIGpvYiBmb3IgZ3JlcCwgYnV0IHdoYXQgaWYg eW91IGFyZSBwcmVzZW50ZWQgd2l0aCBzb21ldGhpbmcgbGlrZQorICAgICAgdGhpcyAoaW50 ZW50aW9uYWxseSBvYmZ1c2NhdGVkKSBleGFtcGxlOgorICAgIDwvcGFyYT4KKworICAgIDxw cm9ncmFtbGlzdGluZz4KK0RPICQkCitCRUdJTgorICAgIEVYRUNVVEUgJ0NSRUFURSBUQUJM RSBpbXBvcnQnIHx8ICdhbnRfdGFibGUgKGlkIElOVCknOworRU5EICQkOworICAgIDwvcHJv Z3JhbWxpc3Rpbmc+CisKKyAgICA8cGFyYT4KKyAgICAgIFN0YW5kYXJkIGxvZ2dpbmcgd2ls bCBnaXZlIHlvdSB0aGlzOgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz4K K0xPRzogIHN0YXRlbWVudDogRE8gJCQKK0JFR0lOCisgICAgRVhFQ1VURSAnQ1JFQVRFIFRB QkxFIGltcG9ydCcgfHwgJ2FudF90YWJsZSAoaWQgSU5UKSc7CitFTkQgJCQ7CisgICAgPC9w cm9ncmFtbGlzdGluZz4KKworICAgIDxwYXJhPgorICAgICAgSXQgYXBwZWFycyB0aGF0IGZp bmRpbmcgdGhlIHRhYmxlIG9mIGludGVyZXN0IG1heSByZXF1aXJlIHNvbWUga25vd2xlZGdl CisgICAgICBvZiB0aGUgY29kZSBpbiBjYXNlcyB3aGVyZSB0YWJsZXMgYXJlIGNyZWF0ZWQg ZHluYW1pY2FsbHkuICBUaGlzIGlzIG5vdAorICAgICAgaWRlYWwgc2luY2UgaXQgd291bGQg YmUgcHJlZmVycmFibGUgdG8ganVzdCBzZWFyY2ggb24gdGhlIHRhYmxlIG5hbWUuCisgICAg ICBUaGlzIGlzIHdoZXJlIDxsaXRlcmFsPnBnX2F1ZGl0PC8+IGNvbWVzIGluLiAgRm9yIHRo ZSBzYW1lIGlucHV0LAorICAgICAgaXQgd2lsbCBwcm9kdWNlIHRoaXMgb3V0cHV0IGluIHRo ZSBsb2c6CisgICAgPC9wYXJhPgorCisgICAgPHByb2dyYW1saXN0aW5nPgorQVVESVQ6IFNF U1NJT04sMzMsMSxGVU5DVElPTixETywsLCJETyAkJAorQkVHSU4KKyAgICBFWEVDVVRFICdD UkVBVEUgVEFCTEUgaW1wb3J0JyB8fCAnYW50X3RhYmxlIChpZCBJTlQpJzsKK0VORCAkJDsi CitBVURJVDogU0VTU0lPTiwzMywyLERETCxDUkVBVEUgVEFCTEUsVEFCTEUscHVibGljLmlt cG9ydGFudF90YWJsZSxDUkVBVEUgVEFCTEUgaW1wb3J0YW50X3RhYmxlIChpZCBJTlQpCisg ICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgIDxwYXJhPgorICAgICAgTm90IG9ubHkgaXMg dGhlIDxsaXRlcmFsPkRPPC8+IGJsb2NrIGxvZ2dlZCwgYnV0IHN1YnN0YXRlbWVudCAyIGNv bnRhaW5zCisgICAgICB0aGUgZnVsbCB0ZXh0IG9mIHRoZSA8bGl0ZXJhbD5DUkVBVEUgVEFC TEU8Lz4gd2l0aCB0aGUgc3RhdGVtZW50IHR5cGUsCisgICAgICBvYmplY3QgdHlwZSwgYW5k IGZ1bGwtcXVhbGlmaWVkIG5hbWUgdG8gbWFrZSBzZWFyY2hlcyBlYXN5LgorICAgIDwvcGFy YT4KKworICAgIDxwYXJhPgorICAgICAgV2hlbiBsb2dnaW5nIDxsaXRlcmFsPlNFTEVDVDwv PiBhbmQgPGxpdGVyYWw+RE1MPC8+IHN0YXRlbWVudHMsCisgICAgICA8bGl0ZXJhbD5wZ19h dWRpdDwvPiBjYW4gYmUgY29uZmlndXJlZCB0byBsb2cgYSBzZXBhcmF0ZSBlbnRyeSBmb3Ig ZWFjaAorICAgICAgcmVsYXRpb24gcmVmZXJlbmNlZCBpbiBhIHN0YXRlbWVudC4gIE5vIHBh cnNpbmcgaXMgcmVxdWlyZWQgdG8gZmluZCBhbGwKKyAgICAgIHN0YXRlbWVudHMgdGhhdCB0 b3VjaCBhIHBhcnRpY3VsYXIgdGFibGUuICBJbiBmYWN0LCB0aGUgZ29hbCBpcyB0aGF0IHRo ZQorICAgICAgc3RhdGVtZW50IHRleHQgaXMgcHJvdmlkZWQgcHJpbWFyaWx5IGZvciBkZWVw IGZvcmVuc2ljcyBhbmQgc2hvdWxkIG5vdCBiZQorICAgICAgdGhlIHJlcXVpcmVkIGZvciBh biBhdWRpdC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyPgorICAgIDx0 aXRsZT5Vc2FnZSBDb25zaWRlcmF0aW9uczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAg IERlcGVuZGluZyBvbiBzZXR0aW5ncywgaXQgaXMgcG9zc2libGUgZm9yIDxsaXRlcmFsPnBn X2F1ZGl0PC9saXRlcmFsPiB0bworICAgICAgZ2VuZXJhdGUgYW4gZW5vcm1vdXMgdm9sdW1l IG9mIGxvZ2dpbmcuICBCZSBjYXJlZnVsIHRvIGRldGVybWluZQorICAgICAgZXhhY3RseSB3 aGF0IG5lZWRzIHRvIGJlIGF1ZGl0IGxvZ2dlZCBpbiB5b3VyIGVudmlyb25tZW50IHRvIGF2 b2lkCisgICAgICBsb2dnaW5nIHRvbyBtdWNoLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJh PgorICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gd29ya2luZyBpbiBhbiBPTEFQIGVudmlyb25t ZW50IGl0IHdvdWxkIHByb2JhYmx5IG5vdCBiZQorICAgICAgd2lzZSB0byBhdWRpdCBsb2cg aW5zZXJ0cyBpbnRvIGEgbGFyZ2UgZmFjdCB0YWJsZS4gIFRoZSBzaXplIG9mIHRoZSBsb2cK KyAgICAgIGZpbGUgd2lsbCBsaWtlbHkgYmUgbWFueSB0aW1lcyB0aGUgYWN0dWFsIGRhdGEg c2l6ZSBvZiB0aGUgaW5zZXJ0cyBiZWNhdXNlCisgICAgICB0aGUgbG9nIGZpbGUgaXMgZXhw cmVzc2VkIGFzIHRleHQuICBTaW5jZSBsb2dzIGFyZSBnZW5lcmFsbHkgc3RvcmVkIHdpdGgK KyAgICAgIHRoZSBPUyB0aGlzIG1heSBsZWFkIHRvIGRpc2sgc3BhY2UgYmVpbmcgZXhoYXVz dGVkIHZlcnkKKyAgICAgIHF1aWNrbHkuICBJbiBjYXNlcyB3aGVyZSBpdCBpcyBub3QgcG9z c2libGUgdG8gbGltaXQgYXVkaXQgbG9nZ2luZyB0bworICAgICAgY2VydGFpbiB0YWJsZXMs IGJlIHN1cmUgdG8gYXNzZXNzIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgd2hpbGUgdGVzdGlu ZworICAgICAgYW5kIGFsbG9jYXRlIHBsZW50eSBvZiBzcGFjZSBvbiB0aGUgbG9nIHZvbHVt ZS4gIFRoaXMgbWF5IGFsc28gYmUgdHJ1ZSBmb3IKKyAgICAgIE9MVFAgZW52aXJvbm1lbnRz LiAgRXZlbiBpZiB0aGUgaW5zZXJ0IHZvbHVtZSBpcyBub3QgYXMgaGlnaCwgdGhlCisgICAg ICBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgYXVkaXQgbG9nZ2luZyBtYXkgc3RpbGwgbm90aWNl YWJseSBhZmZlY3QgbGF0ZW5jeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAg IFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVsYXRpb25zIGF1ZGl0IGxvZ2dlZCBmb3IgPGxp dGVyYWw+U0VMRUNUPC8+CisgICAgICBhbmQgPGxpdGVyYWw+RE1MPC8+IHN0YXRtZW50cywg Y29uc2lkZXIgdXNpbmcgb2JqZWN0IGF1ZGl0IGxvZ2dpbmcKKyAgICAgIChzZWUgPHhyZWYg bGlua2VuZD0icGdhdWRpdC1vYmplY3QtYXVkaXQtbG9nZ2luZyI+KS4gIE9iamVjdCBhdWRp dCBsb2dnaW5nCisgICAgICBhbGxvd3Mgc2VsZWN0aW9uIG9mIHRoZSByZWxhdGlvbnMgdG8g YmUgbG9nZ2VkIGFsbG93aW5nIGZvciByZWR1Y3Rpb24KKyAgICAgIG9mIHRoZSBvdmVyYWxs IGxvZyB2b2x1bWUuICBIb3dldmVyLCB3aGVuIG5ldyByZWxhdGlvbnMgYXJlIGFkZGVkIHRo ZXkKKyAgICAgIG11c3QgYmUgZXhwbGljaXRseSBhZGRlZCB0byBvYmplY3QgYXVkaXQgbG9n Z2luZy4gIEEgcHJvZ3JhbW1hdGljCisgICAgICBzb2x1dGlvbiB3aGVyZSBzcGVjaWZpZWQg dGFibGVzIGFyZSBleGNsdWRlZCBmcm9tIGxvZ2dpbmcgYW5kIGFsbCBvdGhlcnMKKyAgICAg IGFyZSBpbmNsdWRlZCBtYXkgYmUgYSBnb29kIG9wdGlvbiBpbiB0aGlzIGNhc2UuCisgICAg PC9wYXJhPgorICA8L3NlY3QyPgorCisgIDxzZWN0Mj4KKyAgICA8dGl0bGU+U2V0dGluZ3M8 L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBTZXR0aW5ncyBtYXkgYmUgbW9kaWZpZWQg b25seSBieSBhIHN1cGVydXNlci4gQWxsb3dpbmcgbm9ybWFsIHVzZXJzIHRvCisgICAgICBj aGFuZ2UgdGhlaXIgc2V0dGluZ3Mgd291bGQgZGVmZWF0IHRoZSBwb2ludCBvZiBhbiBhdWRp dCBsb2cuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBTZXR0aW5ncyBjYW4g YmUgc3BlY2lmaWVkIGdsb2JhbGx5IChpbgorICAgICAgPGZpbGVuYW1lPnBvc3RncmVzcWwu Y29uZjwvZmlsZW5hbWU+IG9yIHVzaW5nCisgICAgICA8bGl0ZXJhbD5BTFRFUiBTWVNURU0g Li4uIFNFVDwvPiksIGF0IHRoZSBkYXRhYmFzZSBsZXZlbCAodXNpbmcKKyAgICAgIDxsaXRl cmFsPkFMVEVSIERBVEFCQVNFIC4uLiBTRVQ8L2xpdGVyYWw+KSwgb3IgYXQgdGhlIHJvbGUg bGV2ZWwgKHVzaW5nCisgICAgICA8bGl0ZXJhbD5BTFRFUiBST0xFIC4uLiBTRVQ8L2xpdGVy YWw+KS4gIE5vdGUgdGhhdCBzZXR0aW5ncyBhcmUgbm90CisgICAgICBpbmhlcml0ZWQgdGhy b3VnaCBub3JtYWwgcm9sZSBpbmhlcml0YW5jZSBhbmQgPGxpdGVyYWw+U0VUIFJPTEU8Lz4g d2lsbAorICAgICAgbm90IGFsdGVyIGEgdXNlcidzIDxsaXRlcmFsPnBnX2F1ZGl0PC8+IHNl dHRpbmdzLiAgVGhpcyBpcyBhIGxpbWl0YXRpb24KKyAgICAgIG9mIHRoZSByb2xlcyBzeXN0 ZW0gYW5kIG5vdCBpbmhlcmVudCB0byA8bGl0ZXJhbD5wZ19hdWRpdDwvPi4KKyAgICA8L3Bh cmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSA8bGl0ZXJhbD5wZ19hdWRpdDwvPiBleHRl bnNpb24gbXVzdCBiZSBsb2FkZWQgaW4KKyAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFy ZWQtcHJlbG9hZC1saWJyYXJpZXMiPi4gIE90aGVyd2lzZSwgYW4gZXJyb3IKKyAgICAgIHdp bGwgYmUgcmFpc2VkIGF0IGxvYWQgdGltZSBhbmQgbm8gYXVkaXQgbG9nZ2luZyB3aWxsIG9j Y3VyLgorICAgIDwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlz dGVudHJ5IGlkPSJndWMtcGdhdWRpdC1sb2ciIHhyZWZsYWJlbD0icGdfYXVkaXQubG9nIj4K KyAgICAgICAgPHRlcm0+PHZhcm5hbWU+cGdfYXVkaXQubG9nPC92YXJuYW1lPiAoPHR5cGU+ c3RyaW5nPC90eXBlPikKKyAgICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgICAgPHBy aW1hcnk+PHZhcm5hbWU+cGdfYXVkaXQubG9nPC8+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy PC9wcmltYXJ5PgorICAgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8L3Rlcm0+Cisg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNwZWNp ZmllcyB3aGljaCBjbGFzc2VzIG9mIHN0YXRlbWVudHMgd2lsbCBiZSBsb2dnZWQgYnkgc2Vz c2lvbgorICAgICAgICAgICAgYXVkaXQgbG9nZ2luZy4gIFBvc3NpYmxlIHZhbHVlcyBhcmU6 CisgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAg ICAgPGxpdGVyYWw+UkVBRDwvbGl0ZXJhbD4gLSA8bGl0ZXJhbD5TRUxFQ1Q8L2xpdGVyYWw+ IGFuZAorICAgICAgICAgICAgICAgIDxsaXRlcmFsPkNPUFk8L2xpdGVyYWw+IHdoZW4gdGhl IHNvdXJjZSBpcyBhIHJlbGF0aW9uIG9yIGEKKyAgICAgICAgICAgICAgICBxdWVyeS4KKyAg ICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAg PGxpdGVyYWw+V1JJVEU8L2xpdGVyYWw+IC0gPGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPiwK KyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCA8bGl0ZXJhbD5E RUxFVEU8L2xpdGVyYWw+LAorICAgICAgICAgICAgICAgIDxsaXRlcmFsPlRSVU5DQVRFPC9s aXRlcmFsPiwgYW5kIDxsaXRlcmFsPkNPUFk8L2xpdGVyYWw+IHdoZW4gdGhlCisgICAgICAg ICAgICAgICAgZGVzdGluYXRpb24gaXMgYSByZWxhdGlvbi4KKyAgICAgICAgICAgICAgPC9w YXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+RlVOQ1RJ T048L2xpdGVyYWw+IC0gRnVuY3Rpb24gY2FsbHMgYW5kCisgICAgICAgICAgICAgICAgPGxp dGVyYWw+RE88L2xpdGVyYWw+IGJsb2Nrcy4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAg ICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+Uk9MRTwvbGl0ZXJhbD4g LSBTdGF0ZW1lbnRzIHJlbGF0ZWQgdG8gcm9sZXMgYW5kCisgICAgICAgICAgICAgICAgcHJp dmlsZWdlczogPGxpdGVyYWw+R1JBTlQ8L2xpdGVyYWw+LAorICAgICAgICAgICAgICAgIDxs aXRlcmFsPlJFVk9LRTwvbGl0ZXJhbD4sCisgICAgICAgICAgICAgICAgPGxpdGVyYWw+Q1JF QVRFL0FMVEVSL0RST1AgUk9MRTwvbGl0ZXJhbD4uCisgICAgICAgICAgICAgIDwvcGFyYT4K KyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxsaXRlcmFsPkRETDwvbGl0ZXJh bD4gLSBBbGwgPGxpdGVyYWw+RERMPC8+IHRoYXQgaXMgbm90IGluY2x1ZGVkCisgICAgICAg ICAgICAgICAgaW4gdGhlIDxsaXRlcmFsPlJPTEU8Lz4gY2xhc3MgcGx1cyA8bGl0ZXJhbD5S RUlOREVYPC8+LgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgICAgICA8bGl0ZXJhbD5NSVNDPC9saXRlcmFsPiAtIE1pc2NlbGxhbmVvdXMg Y29tbWFuZHMsIGUuZy4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5ESVNDQVJEPC9saXRl cmFsPiwgPGxpdGVyYWw+RkVUQ0g8L2xpdGVyYWw+LAorICAgICAgICAgICAgICAgIDxsaXRl cmFsPkNIRUNLUE9JTlQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5WQUNVVU08L2xpdGVyYWw+Lgor ICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAg ICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBN dWx0aXBsZSBjbGFzc2VzIGNhbiBiZSBwcm92aWRlZCB1c2luZyBhIGNvbW1hLXNlcGFyYXRl ZCBsaXN0IGFuZAorICAgICAgICAgICAgY2xhc3NlcyBjYW4gYmUgc3VidHJhY3RlZCBieSBw cmVmYWNpbmcgdGhlIGNsYXNzIHdpdGggYQorICAgICAgICAgICAgPGxpdGVyYWw+LTwvPiBz aWduIChzZWUgPHhyZWYgbGlua2VuZD0icGdhdWRpdC1zZXNzaW9uLWF1ZGl0LWxvZ2dpbmci PikuCisgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5ub25lPC8+LgorICAg ICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVu dHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtcGdhdWRpdC1sb2ctY2F0YWxv ZyIgeHJlZmxhYmVsPSJwZ19hdWRpdC5sb2dfY2F0YWxvZyI+CisgICAgICAgIDx0ZXJtPjx2 YXJuYW1lPnBnX2F1ZGl0LmxvZ19jYXRhbG9nPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwv dHlwZT4pCisgICAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPnBnX2F1ZGl0LmxvZ19jYXRhbG9nPC8+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy PC9wcmltYXJ5PgorICAgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8L3Rlcm0+Cisg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNwZWNp ZmllcyB0aGF0IHNlc3Npb24gbG9nZ2luZyBzaG91bGQgYmUgZW5hYmxlZCBpbiB0aGUgY2Fz ZSB3aGVyZSBhbGwKKyAgICAgICAgICAgIHJlbGF0aW9ucyBpbiBhIHN0YXRlbWVudCBhcmUg aW4gcGdfY2F0YWxvZy4gIERpc2FibGluZyB0aGlzIHNldHRpbmcKKyAgICAgICAgICAgIHdp bGwgcmVkdWNlIG5vaXNlIGluIHRoZSBsb2cgZnJvbSB0b29scyBsaWtlIHBzcWwgYW5kIFBn QWRtaW4gdGhhdCBxdWVyeQorICAgICAgICAgICAgdGhlIGNhdGFsb2cgZnJlcXVlbnRseSBh bmQgaGVhdmlseS4gVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b248Lz4uCisgICAgICAgICAg PC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisK KyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1wZ2F1ZGl0LWxvZy1ub3RpY2UiIHhyZWZs YWJlbD0icGdfYXVkaXQubG9nX25vdGljZSI+CisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPnBn X2F1ZGl0LmxvZ19ub3RpY2U8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAg ICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdf YXVkaXQubG9nX25vdGljZTwvPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4K KyAgICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlz dGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTcGVjaWZpZXMgdGhhdCB0 aGUgYXVkaXQgbG9nIG1lc3NhZ2VzIHNob3VsZCBiZSByYWlzZWQgYXMKKyAgICAgICAgICAg IDxsaXRlcmFsPk5PVElDRTwvPiBpbnN0ZWFkIG9mIDxsaXRlcmFsPkxPRzwvPi4gIFRoZSBw cmltYXJ5CisgICAgICAgICAgICBhZHZhbnRhZ2UgaXMgdGhhdCA8bGl0ZXJhbD5OT1RJQ0U8 Lz4gbWVzc2FnZXMgY2FuIGJlIGV4cG9zZWQKKyAgICAgICAgICAgIHRocm91Z2ggdGhlIHVz ZXIgaW50ZXJmYWNlLiAgVGhpcyBzZXR0aW5nIGlzIHVzZWQgZm9yIHJlZ3Jlc3Npb24KKyAg ICAgICAgICAgIHRlc3RpbmcgYW5kIG1heSBhbHNvIGJlIHVzZWZ1bCB0byBlbmQgdXNlcnMg Zm9yIHRlc3RpbmcuICBJdCBpcyBub3QKKyAgICAgICAgICAgIGludGVuZGVkIHRvIGJlIHVz ZWQgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50IGFzIGl0IHdpbGwgbGVhaworICAgICAg ICAgICAgd2hpY2ggc3RhdGVtZW50cyBhcmUgYmVpbmcgbG9nZ2VkIHRvIHRoZSB1c2VyLiBU aGUgZGVmYXVsdCBpcworICAgICAgICAgICAgPGxpdGVyYWw+b2ZmPC8+LgorICAgICAgICAg IDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtcGdhdWRpdC1sb2ctcGFyYW1ldGVyIiB4 cmVmbGFiZWw9InBnX2F1ZGl0LmxvZ19wYXJhbWV0ZXIiPgorICAgICAgICA8dGVybT48dmFy bmFtZT5wZ19hdWRpdC5sb2dfcGFyYW1ldGVyPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwv dHlwZT4pCisgICAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPnBnX2F1ZGl0LmxvZ19wYXJhbWV0ZXI8Lz4gY29uZmlndXJhdGlvbiBwYXJhbWV0 ZXI8L3ByaW1hcnk+CisgICAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDwvdGVybT4K KyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3Bl Y2lmaWVzIHRoYXQgYXVkaXQgbG9nZ2luZyBzaG91bGQgaW5jbHVkZSB0aGUgcGFyYW1ldGVy cyB0aGF0CisgICAgICAgICAgICB3ZXJlIHBhc3NlZCB3aXRoIHRoZSBzdGF0ZW1lbnQuICBX aGVuIHBhcmFtZXRlcnMgYXJlIHByZXNlbnQgdGhleSB3aWxsCisgICAgICAgICAgICBiZSBp bmNsdWRlZCBpbiBDU1YgZm9ybWF0IGFmdGVyIHRoZSBzdGF0ZW1lbnQgdGV4dC4gVGhlIGRl ZmF1bHQgaXMKKyAgICAgICAgICAgIDxsaXRlcmFsPm9mZjwvPi4KKyAgICAgICAgICA8L3Bh cmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXBnYXVkaXQtbG9nLXJlbGF0aW9uIiB4cmVmbGFi ZWw9InBnX2F1ZGl0LmxvZ19yZWxhdGlvbiI+CisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPnBn X2F1ZGl0LmxvZ19yZWxhdGlvbjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQor ICAgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5w Z19hdWRpdC5sb2dfcmVsYXRpb248Lz4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1h cnk+CisgICAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAg PGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3BlY2lmaWVzIHdo ZXRoZXIgc2Vzc2lvbiBhdWRpdCBsb2dnaW5nIHNob3VsZCBjcmVhdGUgYSBzZXBhcmF0ZQor ICAgICAgICAgICAgbG9nIGVudHJ5IGZvciBlYWNoIHJlbGF0aW9uICg8bGl0ZXJhbD5UQUJM RTwvPiwgPGxpdGVyYWw+VklFVzwvPiwKKyAgICAgICAgICAgIGV0Yy4pIHJlZmVyZW5jZWQg aW4gYSA8bGl0ZXJhbD5TRUxFQ1Q8Lz4gb3IgPGxpdGVyYWw+RE1MPC8+CisgICAgICAgICAg ICBzdGF0ZW1lbnQuICBUaGlzIGlzIGEgdXNlZnVsIHNob3J0Y3V0IGZvciBleGhhdXN0aXZl IGxvZ2dpbmcKKyAgICAgICAgICAgIHdpdGhvdXQgdXNpbmcgb2JqZWN0IGF1ZGl0IGxvZ2dp bmcuICBUaGUgZGVmYXVsdCBpcworICAgICAgICAgICAgPGxpdGVyYWw+b2ZmPC8+LgorICAg ICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVu dHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtcGdhdWRpdC1yb2xlIiB4cmVm bGFiZWw9InBnX2F1ZGl0LnJvbGUiPgorICAgICAgICA8dGVybT48dmFybmFtZT5wZ19hdWRp dC5yb2xlPC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgICAgICA8aW5k ZXh0ZXJtPgorICAgICAgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfYXVkaXQucm9sZTwv PiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgICAgICA8L2luZGV4 dGVybT4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG1hc3RlciByb2xlIHRvIHVzZSBm b3Igb2JqZWN0IGF1ZGl0IGxvZ2dpbmcuICBNdWxpcGxlCisgICAgICAgICAgICBhdWRpdCBy b2xlcyBjYW4gYmUgZGVmaW5lZCBieSBncmFudGluZyB0aGVtIHRvIHRoZSBtYXN0ZXIgcm9s ZS4KKyAgICAgICAgICAgIFRoaXMgYWxsb3dzIG11bHRpcGxlIGdyb3VwcyB0byBiZSBpbiBj aGFyZ2Ugb2YgZGlmZmVyZW50IGFzcGVjdHMKKyAgICAgICAgICAgIG9mIGF1ZGl0IGxvZ2dp bmcuICBUaGVyZSBpcyBubyBkZWZhdWx0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAg PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0 PgorICA8L3NlY3QyPgorCisgIDxzZWN0MiBpZD0icGdhdWRpdC1zZXNzaW9uLWF1ZGl0LWxv Z2dpbmciPgorICAgIDx0aXRsZT5TZXNzaW9uIEF1ZGl0IExvZ2dpbmc8L3RpdGxlPgorCisg ICAgPHBhcmE+CisgICAgICBTZXNzaW9uIGF1ZGl0IGxvZ2dpbmcgcHJvdmlkZXMgZGV0YWls ZWQgbG9ncyBvZiBhbGwgc3RhdGVtZW50cyBleGVjdXRlZAorICAgICAgYnkgYSB1c2VyIGlu IHRoZSBiYWNrZW5kLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0Mz4KKyAgICAgIDx0aXRs ZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNlc3Np b24gbG9nZ2luZyBpcyBlbmFibGVkIHdpdGggdGhlIDx4cmVmIGxpbmtlbmQ9Imd1Yy1wZ2F1 ZGl0LWxvZyI+CisgICAgICAgIHNldHRpbmcuCisKKyAgICAgICAgRW5hYmxlIHNlc3Npb24g bG9nZ2luZyBmb3IgYWxsIDxsaXRlcmFsPkRNTDwvPiBhbmQgPGxpdGVyYWw+RERMPC8+IGFu ZAorICAgICAgICBsb2cgYWxsIHJlbGF0aW9ucyBpbiA8bGl0ZXJhbD5ETUw8Lz4gc3RhdGVt ZW50czoKKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzZXQgcGdfYXVkaXQubG9nID0g J3dyaXRlLCBkZGwnOworc2V0IHBnX2F1ZGl0LmxvZ19yZWxhdGlvbiA9IG9uOworICAgICAg ICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgor ICAgICAgICBFbmFibGUgc2Vzc2lvbiBsb2dnaW5nIGZvciBhbGwgY29tbWFuZHMgZXhjZXB0 IDxsaXRlcmFsPk1JU0M8Lz4gYW5kCisgICAgICAgIHJhaXNlIGF1ZGl0IGxvZyBtZXNzYWdl cyBhcyA8bGl0ZXJhbD5OT1RJQ0U8Lz46CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgor c2V0IHBnX2F1ZGl0LmxvZyA9ICdhbGwsIC1taXNjJzsKK3NldCBwZ19hdWRpdC5sb2dfbm90 aWNlID0gb247CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvcGFyYT4K KyAgICA8L3NlY3QzPgorCisgICAgPHNlY3QzPgorICAgICAgPHRpdGxlPkV4YW1wbGU8L3Rp dGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhpcyBleGFtcGxlIHNlc3Npb24g YXVkaXQgbG9nZ2luZyBpcyB1c2VkIGZvciBsb2dnaW5nCisgICAgICAgIDxsaXRlcmFsPkRE TDwvPiBhbmQgPGxpdGVyYWw+U0VMRUNUPC8+IHN0YXRlbWVudHMuICBOb3RlIHRoYXQgdGhl CisgICAgICAgIGluc2VydCBzdGF0ZW1lbnQgaXMgbm90IGxvZ2dlZCBzaW5jZSB0aGUgPGxp dGVyYWw+V1JJVEU8Lz4gY2xhc3MKKyAgICAgICAgaXMgbm90IGVuYWJsZWQKKyAgICAgIDwv cGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNRTDoKKyAgICAgIDwvcGFyYT4KKyAg ICAgIDxwcm9ncmFtbGlzdGluZz4KK3NldCBwZ19hdWRpdC5sb2cgPSAncmVhZCwgZGRsJzsK KworY3JlYXRlIHRhYmxlIGFjY291bnQKKygKKyAgICBpZCBpbnQsCisgICAgbmFtZSB0ZXh0 LAorICAgIHBhc3N3b3JkIHRleHQsCisgICAgZGVzY3JpcHRpb24gdGV4dAorKTsKKworaW5z ZXJ0IGludG8gYWNjb3VudCAoaWQsIG5hbWUsIHBhc3N3b3JkLCBkZXNjcmlwdGlvbikKKyAg ICAgICAgICAgICB2YWx1ZXMgKDEsICd1c2VyMScsICdIQVNIMScsICdibGFoLCBibGFoJyk7 CisKK3NlbGVjdCAqCisgICAgZnJvbSBhY2NvdW50OworICAgICAgPC9wcm9ncmFtbGlzdGlu Zz4KKworICAgICAgPHBhcmE+CisgICAgICAgIExvZyBPdXRwdXQ6CisgICAgICA8L3BhcmE+ CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0FVRElUOiBTRVNTSU9OLDEsMSxEREwsQ1JF QVRFIFRBQkxFLFRBQkxFLHB1YmxpYy5hY2NvdW50LGNyZWF0ZSB0YWJsZSBhY2NvdW50Ciso CisgICAgaWQgaW50LAorICAgIG5hbWUgdGV4dCwKKyAgICBwYXNzd29yZCB0ZXh0LAorICAg IGRlc2NyaXB0aW9uIHRleHQKKyk7CitBVURJVDogU0VTU0lPTiwyLDEsUkVBRCxTRUxFQ1Qs LCxzZWxlY3QgKgorICAgIGZyb20gYWNjb3VudAorICAgICAgPC9wcm9ncmFtbGlzdGluZz4K KyAgICA8L3NlY3QzPgorICA8L3NlY3QyPgorCisgIDxzZWN0MiBpZD0icGdhdWRpdC1vYmpl Y3QtYXVkaXQtbG9nZ2luZyI+CisgICAgPHRpdGxlPk9iamVjdCBBdWRpdGluZzwvdGl0bGU+ CisKKyAgICA8cGFyYT4KKyAgICAgIE9iamVjdCBhdWRpdCBsb2dnaW5nIGxvZ3Mgc3RhdGVt ZW50cyB0aGF0IGFmZmVjdCBhIHBhcnRpY3VsYXIgcmVsYXRpb24uCisgICAgICBPbmx5IDxs aXRlcmFsPlNFTEVDVDwvPiwgPGxpdGVyYWw+SU5TRVJUPC8+LCA8bGl0ZXJhbD5VUERBVEU8 Lz4gYW5kCisgICAgICA8bGl0ZXJhbD5ERUxFVEU8Lz4gY29tbWFuZHMgYXJlIHN1cHBvcnRl ZC4gIDxsaXRlcmFsPlRSVU5DQVRFPC8+IGlzIG5vdAorICAgICAgaW5jbHVkZWQgYmVjYXVz ZSB0aGVyZSBpcyBubyBzcGVjaWZpYyBwcml2aWxlZ2UgZm9yIGl0LgorICAgIDwvcGFyYT4K KworICAgIDxwYXJhPgorICAgICAgT2JqZWN0IGF1ZGl0IGxvZ2dpbmcgaXMgaW50ZW5kZWQg dG8gYmUgYSBmaW5lci1ncmFpbmVkIHJlcGxhY2VtZW50IGZvcgorICAgICAgPGxpdGVyYWw+ cGdfYXVkaXQubG9nID0gJ3JlYWQsIHdyaXRlJzwvbGl0ZXJhbD4uICBBcyBzdWNoLCBpdCBt YXkgbm90CisgICAgICBtYWtlIHNlbnNlIHRvIHVzZSB0aGVtIGluIGNvbmp1bmN0aW9uIGJ1 dCBvbmUgcG9zc2libGUgc2NlbmFyaW8gd291bGQKKyAgICAgIGJlIHRvIHVzZSBzZXNzaW9u IGxvZ2dpbmcgdG8gY2FwdHVyZSBlYWNoIHN0YXRlbWVudCBhbmQgdGhlbiBzdXBwbGVtZW50 CisgICAgICB0aGF0IHdpdGggb2JqZWN0IGxvZ2dpbmcgdG8gZ2V0IG1vcmUgZGV0YWlsIGFi b3V0IHNwZWNpZmljIHJlbGF0aW9ucy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdDM+Cisg ICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAg ICAgICBPYmplY3QtbGV2ZWwgYXVkaXQgbG9nZ2luZyBpcyBpbXBsZW1lbnRlZCB2aWEgdGhl IHJvbGVzIHN5c3RlbS4gIFRoZQorICAgICAgICA8eHJlZiBsaW5rZW5kPSJndWMtcGdhdWRp dC1yb2xlIj4gc2V0dGluZyBkZWZpbmVzIHRoZSByb2xlIHRoYXQKKyAgICAgICAgd2lsbCBi ZSB1c2VkIGZvciBhdWRpdCBsb2dnaW5nLiAgQSByZWxhdGlvbiAoPGxpdGVyYWw+VEFCTEU8 Lz4sCisgICAgICAgIDxsaXRlcmFsPlZJRVc8Lz4sIGV0Yy4pIHdpbGwgYmUgYXVkaXQgbG9n Z2VkIHdoZW4gdGhlIGF1ZGl0IHJvbGUgaGFzCisgICAgICAgIHBlcm1pc3Npb25zIGZvciB0 aGUgY29tbWFuZCBleGVjdXRlZCBvciBpbmhlcml0cyB0aGUgcGVybWlzc2lvbnMgZnJvbQor ICAgICAgICBhbm90aGVyIHJvbGUuICBUaGlzIGFsbG93cyB5b3UgdG8gZWZmZWN0aXZlbHkg aGF2ZSBtdWx0aXBsZSBhdWRpdCByb2xlcworICAgICAgICBldmVuIHRob3VnaCB0aGVyZSBp cyBhIHNpbmdsZSBtYXN0ZXIgcm9sZSBpbiBhbnkgY29udGV4dC4KKyAgICAgIDwvcGFyYT4K KworICAgICAgPHBhcmE+CisgICAgICBTZXQgPHhyZWYgbGlua2VuZD0iZ3VjLXBnYXVkaXQt cm9sZSI+IHRvIDxsaXRlcmFsPmF1ZGl0b3I8Lz4gYW5kCisgICAgICBncmFudCA8bGl0ZXJh bD5TRUxFQ1Q8Lz4gYW5kIDxsaXRlcmFsPkRFTEVURTwvPiBwcml2aWxlZ2VzIG9uIHRoZQor ICAgICAgPGxpdGVyYWw+YWNjb3VudDwvPiB0YWJsZS4gIEFueSA8bGl0ZXJhbD5TRUxFQ1Q8 Lz4gb3IKKyAgICAgIDxsaXRlcmFsPkRFTEVURTwvPiBzdGF0ZW1lbnRzIG9uIDxsaXRlcmFs PmFjY291bnQ8Lz4gd2lsbCBub3cgYmUKKyAgICAgIGxvZ2dlZDoKKyAgICAgIDwvcGFyYT4K KworICAgICAgPHByb2dyYW1saXN0aW5nPgorc2V0IHBnX2F1ZGl0LnJvbGUgPSAnYXVkaXRv cic7CisKK2dyYW50IHNlbGVjdCwgZGVsZXRlCisgICBvbiBwdWJsaWMuYWNjb3VudAorICAg dG8gYXVkaXRvcjsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9zZWN0Mz4KKwor ICAgIDxzZWN0Mz4KKyAgICAgIDx0aXRsZT5FeGFtcGxlPC90aXRsZT4KKworICAgICAgPHBh cmE+CisgICAgICAgIEluIHRoaXMgZXhhbXBsZSBvYmplY3QgYXVkaXQgbG9nZ2luZyBpcyB1 c2VkIHRvIGlsbHVzdHJhdGUgaG93IGEKKyAgICAgICAgZ3JhbnVsYXIgYXBwcm9hY2ggbWF5 IGJlIHRha2VuIHRvd2FyZHMgbG9nZ2luZyBvZiA8bGl0ZXJhbD5TRUxFQ1Q8Lz4KKyAgICAg ICAgYW5kIDxsaXRlcmFsPkRNTDwvPiBzdGF0ZW1lbnRzLiAgTm90ZSB0aGF0IGxvZ2dpbmcg b24gdGhlCisgICAgICAgIDxsaXRlcmFsPmFjY291bnQ8Lz4gdGFibGUgaXMgY29udHJvbGxl ZCBieSBjb2x1bW4tbGV2ZWwgcGVybWlzc2lvbnMsCisgICAgICAgIHdoaWxlIGxvZ2dpbmcg b24gPGxpdGVyYWw+YWNjb3VudF9yb2xlX21hcDwvPiBpcyB0YWJsZS1sZXZlbC4KKyAgICAg IDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNRTDoKKyAgICAgIDwvcGFyYT4K KworICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzZXQgcGdfYXVkaXQucm9sZSA9ICdhdWRp dG9yJzsKKworY3JlYXRlIHRhYmxlIGFjY291bnQKKygKKyAgICBpZCBpbnQsCisgICAgbmFt ZSB0ZXh0LAorICAgIHBhc3N3b3JkIHRleHQsCisgICAgZGVzY3JpcHRpb24gdGV4dAorKTsK KworZ3JhbnQgc2VsZWN0IChwYXNzd29yZCkKKyAgIG9uIHB1YmxpYy5hY2NvdW50CisgICB0 byBhdWRpdG9yOworCitzZWxlY3QgaWQsIG5hbWUKKyAgZnJvbSBhY2NvdW50OworCitzZWxl Y3QgcGFzc3dvcmQKKyAgZnJvbSBhY2NvdW50OworCitncmFudCB1cGRhdGUgKG5hbWUsIHBh c3N3b3JkKQorICAgb24gcHVibGljLmFjY291bnQKKyAgIHRvIGF1ZGl0b3I7CisKK3VwZGF0 ZSBhY2NvdW50CisgICBzZXQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYSc7CisKK3VwZGF0 ZSBhY2NvdW50CisgICBzZXQgcGFzc3dvcmQgPSAnSEFTSDInOworCitjcmVhdGUgdGFibGUg YWNjb3VudF9yb2xlX21hcAorKAorICAgIGFjY291bnRfaWQgaW50LAorICAgIHJvbGVfaWQg aW50CispOworCitncmFudCBzZWxlY3QKKyAgIG9uIHB1YmxpYy5hY2NvdW50X3JvbGVfbWFw CisgICB0byBhdWRpdG9yOworCitzZWxlY3QgYWNjb3VudC5wYXNzd29yZCwKKyAgICAgICBh Y2NvdW50X3JvbGVfbWFwLnJvbGVfaWQKKyAgZnJvbSBhY2NvdW50CisgICAgICAgaW5uZXIg am9pbiBhY2NvdW50X3JvbGVfbWFwCisgICAgICAgICAgICBvbiBhY2NvdW50LmlkID0gYWNj b3VudF9yb2xlX21hcC5hY2NvdW50X2lkCisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisK KyAgICAgIDxwYXJhPgorICAgICAgICBMb2cgT3V0cHV0OgorICAgICAgPC9wYXJhPgorCisg ICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitBVURJVDogT0JKRUNULDEsMSxSRUFELFNFTEVDVCxU QUJMRSxwdWJsaWMuYWNjb3VudCxzZWxlY3QgcGFzc3dvcmQKKyAgZnJvbSBhY2NvdW50CitB VURJVDogT0JKRUNULDIsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQsdXBk YXRlIGFjY291bnQKKyAgIHNldCBwYXNzd29yZCA9ICdIQVNIMicKK0FVRElUOiBPQkpFQ1Qs MywxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50LHNlbGVjdCBhY2NvdW50LnBh c3N3b3JkLAorICAgICAgIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZAorICBmcm9tIGFjY291 bnQKKyAgICAgICBpbm5lciBqb2luIGFjY291bnRfcm9sZV9tYXAKKyAgICAgICAgICAgIG9u IGFjY291bnQuaWQgPSBhY2NvdW50X3JvbGVfbWFwLmFjY291bnRfaWQKK0FVRElUOiBPQkpF Q1QsMywxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50X3JvbGVfbWFwLHNlbGVj dCBhY2NvdW50LnBhc3N3b3JkLAorICAgICAgIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZAor ICBmcm9tIGFjY291bnQKKyAgICAgICBpbm5lciBqb2luIGFjY291bnRfcm9sZV9tYXAKKyAg ICAgICAgICAgIG9uIGFjY291bnQuaWQgPSBhY2NvdW50X3JvbGVfbWFwLmFjY291bnRfaWQK KyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9zZWN0Mz4KKyAgPC9zZWN0Mj4KKwor ICA8c2VjdDI+CisgICAgPHRpdGxlPkZvcm1hdDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAg ICAgIEF1ZGl0IGVudHJpZXMgYXJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIGxvZ2dpbmcg ZmFjaWxpdHkgYW5kIGNvbnRhaW4KKyAgICAgIHRoZSBmb2xsb3dpbmcgY29sdW1ucyBpbiBj b21tYS1zZXBhcmF0ZWQgZm9ybWF0OgorCisgICAgICA8bm90ZT4KKyAgICAgICAgPHBhcmE+ CisgICAgICAgICAgT3V0cHV0IGlzIGNvbXBsaWFudCBDU1YgZm9ybWF0IG9ubHkgaWYgdGhl IGxvZyBsaW5lIHByZWZpeCBwb3J0aW9uCisgICAgICAgICAgb2YgZWFjaCBsb2cgZW50cnkg aXMgcmVtb3ZlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9ub3RlPgorCisgICAgICA8 aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+Cisg ICAgICAgICAgICA8bGl0ZXJhbD5BVURJVF9UWVBFPC8+IC0gPGxpdGVyYWw+U0VTU0lPTjwv PiBvcgorICAgICAgICAgICAgPGxpdGVyYWw+T0JKRUNUPC8+LgorICAgICAgICAgIDwvcGFy YT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+U1RBVEVNRU5UX0lEPC8+IC0gVW5pcXVl IHN0YXRlbWVudCBJRCBmb3IgdGhpcyBzZXNzaW9uLgorICAgICAgICAgICAgRWFjaCBzdGF0 ZW1lbnQgSUQgcmVwcmVzZW50cyBhIGJhY2tlbmQgY2FsbC4gIFN0YXRlbWVudCBJRHMgYXJl CisgICAgICAgICAgICBzZXF1ZW50aWFsIGV2ZW4gaWYgc29tZSBzdGF0ZW1lbnRzIGFyZSBu b3QgbG9nZ2VkLiAgVGhlcmUgbWF5IGJlCisgICAgICAgICAgICBtdWx0aXBsZSBlbnRyaWVz IGZvciBhIHN0YXRlbWVudCBJRCB3aGVuIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24KKyAgICAg ICAgICAgIGlzIGxvZ2dlZC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0 ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg IDxsaXRlcmFsPlNVQlNUQVRFTUVOVF9JRDwvPiAtIFNlcXVlbnRpYWwgSUQgZm9yIGVhY2gK KyAgICAgICAgICAgIHN1YnN0YXRlbWVudCB3aXRoaW4gdGhlIG1haW4gc3RhdGVtZW50LiAg Rm9yIGV4YW1wbGUsIGNhbGxpbmcKKyAgICAgICAgICAgIGEgZnVuY3Rpb24gZnJvbSBhIHF1 ZXJ5LiAgU3Vic3RhdGVtZW50IElEcyBhcmUgY29udGludW91cworICAgICAgICAgICAgZXZl biBpZiBzb21lIHN1YnN0YXRlbWVudHMgYXJlIG5vdCBsb2dnZWQuICBUaGVyZSBtYXkgYmUg bXVsdGlwbGUKKyAgICAgICAgICAgIGVudHJpZXMgZm9yIGEgc3Vic3RhdGVtZW50IElEIHdo ZW4gbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpcyBsb2dnZWQuCisgICAgICAgICAgPC9wYXJh PgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5DTEFTUzwvPiAtIGUuZy4gKDxsaXRlcmFs PlJFQUQ8Lz4sCisgICAgICAgICAgICA8bGl0ZXJhbD5ST0xFPC8+KSAoc2VlIDx4cmVmIGxp bmtlbmQ9Imd1Yy1wZ2F1ZGl0LWxvZyI+KS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAg IDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgIDxsaXRlcmFsPkNPTU1BTkQ8Lz4gLSBlLmcuIDxsaXRlcmFsPkFMVEVSIFRB QkxFPC8+LAorICAgICAgICAgICAgPGxpdGVyYWw+U0VMRUNUPC8+LgorICAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAg ICAgIDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+T0JKRUNUX1RZUEU8Lz4gLSA8bGl0 ZXJhbD5UQUJMRTwvPiwKKyAgICAgICAgICAgIDxsaXRlcmFsPklOREVYPC8+LCA8bGl0ZXJh bD5WSUVXPC8+LCBldGMuCisgICAgICAgICAgICBBdmFpbGFibGUgZm9yIDxsaXRlcmFsPlNF TEVDVDwvPiwgPGxpdGVyYWw+RE1MPC8+IGFuZCBtb3N0CisgICAgICAgICAgICA8bGl0ZXJh bD5EREw8Lz4gc3RhdGVtZW50cy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAg ICAgIDxsaXRlcmFsPk9CSkVDVF9OQU1FPC8+IC0gVGhlIGZ1bGx5LXF1YWxpZmllZCBvYmpl Y3QgbmFtZQorICAgICAgICAgICAgKGUuZy4gcHVibGljLmFjY291bnQpLiAgQXZhaWxhYmxl IGZvciA8bGl0ZXJhbD5TRUxFQ1Q8Lz4sCisgICAgICAgICAgICA8bGl0ZXJhbD5ETUw8Lz4g YW5kIG1vc3QgPGxpdGVyYWw+RERMPC8+IHN0YXRlbWVudHMuCisgICAgICAgICAgPC9wYXJh PgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5TVEFURU1FTlQ8Lz4gLSBTdGF0ZW1lbnQg ZXhlY3V0ZWQgb24gdGhlIGJhY2tlbmQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8 L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAg PHBhcmE+CisgICAgICBVc2UgPHhyZWYgbGlua2VuZD0iZ3VjLWxvZy1saW5lLXByZWZpeCI+ IHRvIGFkZCBhbnkgb3RoZXIgZmllbGRzIHRoYXQKKyAgICAgIGFyZSBuZWVkZWQgdG8gc2F0 aXNmeSB5b3VyIGF1ZGl0IGxvZyByZXF1aXJlbWVudHMuICBBIHR5cGljYWwgbG9nIGxpbmUK KyAgICAgIHByZWZpeCBtaWdodCBiZSA8bGl0ZXJhbD4nJW0gJXUgJWQ6ICc8Lz4gd2hpY2gg d291bGQgcHJvdmlkZSB0aGUgZGF0ZS90aW1lLAorICAgICAgdXNlciBuYW1lLCBhbmQgZGF0 YWJhc2UgbmFtZSBmb3IgZWFjaCBhdWRpdCBsb2cuCisgICAgPC9wYXJhPgorICA8L3NlY3Qy PgorCisgIDxzZWN0Mj4KKyAgICA8dGl0bGU+Q2F2ZWF0czwvdGl0bGU+CisKKyAgICA8aXRl bWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAg ICBPYmplY3QgcmVuYW1lcyBhcmUgbG9nZ2VkIHVuZGVyIHRoZSBuYW1lIHRoZXkgd2VyZSBy ZW5hbWVkIHRvLgorICAgICAgICAgIEZvciBleGFtcGxlLCByZW5hbWluZyBhIHRhYmxlIHdp bGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIHJlc3VsdDoKKyAgICAgICAgPC9wYXJhPgorCisg ICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0FMVEVSIFRBQkxFIHRlc3QgUkVOQU1FIFRPIHRl c3QyOworCitBVURJVDogU0VTU0lPTiwzNiwxLERETCxBTFRFUiBUQUJMRSxUQUJMRSxwdWJs aWMudGVzdDIsQUxURVIgVEFCTEUgdGVzdCBSRU5BTUUgVE8gdGVzdDIKKyAgICAgICAgPC9w cm9ncmFtbGlzdGluZz4KKyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhIGNv bW1hbmQgbG9nZ2VkIG1vcmUgdGhhbiBvbmNlLiAgRm9yIGV4YW1wbGUsCisgICAgICAgICAg d2hlbiBhIHRhYmxlIGlzIGNyZWF0ZWQgd2l0aCBhIHByaW1hcnkga2V5IHNwZWNpZmllZCBh dCBjcmVhdGlvbiB0aW1lCisgICAgICAgICAgdGhlIGluZGV4IGZvciB0aGUgcHJpbWFyeSBr ZXkgd2lsbCBiZSBsb2dnZWQgaW5kZXBlbmRlbnRseSBhbmQgYW5vdGhlcgorICAgICAgICAg IGF1ZGl0IGxvZyB3aWxsIGJlIG1hZGUgZm9yIHRoZSBpbmRleCB1bmRlciB0aGUgY3JlYXRl IGVudHJ5LiAgVGhlCisgICAgICAgICAgbXVsdGlwbGUgZW50cmllcyB3aWxsIGhvd2V2ZXIg YmUgY29udGFpbmVkIHdpdGhpbiBvbmUgc3RhdGVtZW50IElELgorICAgICAgICA8L3BhcmE+ CisgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJh PgorICAgICAgICAgIEF1dG92YWN1dW0gYW5kIEF1dG9hbmFseXplIGFyZSBub3QgbG9nZ2Vk LCBub3IgYXJlIHRoZXkgaW50ZW5kZWQgdG8gYmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAg IDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAg ICAgICAgU3RhdGVtZW50cyB0aGF0IGFyZSBleGVjdXRlZCBhZnRlciBhIHRyYW5zYWN0aW9u IGVudGVycyBhbiBhYm9ydGVkIHN0YXRlCisgICAgICAgICAgd2lsbCBub3QgYmUgYXVkaXQg bG9nZ2VkLiAgSG93ZXZlciwgdGhlIHN0YXRlbWVudCB0aGF0IGNhdXNlZCB0aGUgZXJyb3IK KyAgICAgICAgICBhbmQgYW55IHN1YnNlcXVlbnQgc3RhdGVtZW50cyBleGVjdXRlZCBpbiB0 aGUgYWJvcnRlZCB0cmFuc2FjdGlvbiB3aWxsCisgICAgICAgICAgYmUgbG9nZ2VkIGFzIEVS Uk9ScyBieSB0aGUgc3RhbmRhcmQgbG9nZ2luZyBmYWNpbGl0eS4KKyAgICAgICAgPC9wYXJh PgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0Mj4K KworICA8c2VjdDI+CisgICAgPHRpdGxlPkF1dGhvcnM8L3RpdGxlPgorCisgICAgPHBhcmE+ CisgICAgICBBYmhpaml0IE1lbm9uLVNlbiA8ZW1haWw+YW1zQDJuZFF1YWRyYW50LmNvbTwv ZW1haWw+LCBJYW4gQmFyd2ljayA8ZW1haWw+aWFuQDJuZFF1YWRyYW50LmNvbTwvZW1haWw+ LCBhbmQgRGF2aWQgU3RlZWxlIDxlbWFpbD5kYXZpZEBwZ21hc3RlcnMubmV0PC9lbWFpbD4u CisgICAgPC9wYXJhPgorICA8L3NlY3QyPgorPC9zZWN0MT4K --------------070802090709020904070301-- --l8JL6fLuTWfRGQgqsPx2s0WiUPkMwoOsH Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJVUVJaAAoJEIA2uIJQ5SFAQUoP/ito/tTScNrqJl/f2lFlDOWw 3xnWjfos0nR3yAp6KQK2aA7X86s7zLBvWuhfeG6gk7eRoHcIDg7Jet1NCm6F7zYk hreQKa1X0liScn1D/ctcXlq8XlvPC9PSHEnLAzC77pdP47JYC5qgGb/jI1VSRbbD +CVj9Z3RFw4jE7HPNz+EOpH51BNjdXVy7rtaisM1mhrpDQyieuyShqwA8IJyy5wx CpGD6Te9X77ZdA3PAqinE3bR0XS6TrhkWkuxqAb7QfdeCSYyi3/6Ri0JlOdFkBio 4FZZ6TLoPhsU8sB59+f+iK9uplwe6Dg9PBN8WCaBhhNpU4KcuSKHnzRzRZ6rXy/6 P4y+LT7hgwjEmPRZEf7KQgZWlFMCHQv4XIlz6fKUxpExLIfuPjtruSvrIlHJDqAW m6v4N+fPWokGOmqcLtdpg2PYLOCAW1rebzqFJs1eyeyefi3bcYYioa3k1/oJfmPr cX0WWqOP35GTF407DBenuYUSbonka2TvayMoq41jgRO7Uj7f7h/+eh1g5+XpEN+D 597Z+sFQKerutwupWMW32qTS8ofFkWerLwPmMBwgvKwht+ZIDs6jYcVdRC5fQ8Xi PgDjqESLCycAlscaSw7wv8D680gX3cufvoZhPGam2b25ACCJ/H6vZ1mChjRGi+Ze kEGO09HgVW5aUJHuEGpV =aYiX -----END PGP SIGNATURE----- --l8JL6fLuTWfRGQgqsPx2s0WiUPkMwoOsH--