Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wFSjl-0059Jl-2N for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Apr 2026 08:15:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wFSjk-00CSm7-2s for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Apr 2026 08:15:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wFSjk-00CSlz-1R for pgsql-hackers@lists.postgresql.org; Wed, 22 Apr 2026 08:15:08 +0000 Received: from mail-yx1-xb12f.google.com ([2607:f8b0:4864:20::b12f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wFSjh-00000002RMH-2f8i for pgsql-hackers@lists.postgresql.org; Wed, 22 Apr 2026 08:15:08 +0000 Received: by mail-yx1-xb12f.google.com with SMTP id 956f58d0204a3-652f220595fso5221695d50.0 for ; Wed, 22 Apr 2026 01:15:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776845704; cv=none; d=google.com; s=arc-20240605; b=ahf+C0+a8mX4WjTit8EhBzQ9nMk4xIqef9ggH1Di9qt7Sid76FhdnPVJsi9vlPbsQh a0VT8JMsX5ZoFzSlnIx5iYsZYIL3tzen3DJQS2dwZT6O9cRPIAcixd3iGI2vNtx2enpQ fgj9zfYh9BHfv1x10fHho6/KnN1xLi9fG85hPQuLx1CaL7HhKZigBn2ex4N1DqUWemBa MV5TNmw53XFst1G7YiDcDSMkBua4KcUNhSd2IeMRC8ApIv+kXiGo5pOlvhGoywHqhpL5 4+4Drl7rzetd+C1pHMJTBXRt83S5K0FdKZPBrx1BE7rl0STYA7KUOVComYH7oXkJMXfF i8yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=pmpFkNp8mz/hjIyrsGgXgI6BQaln8fgJbKPTpZGzTak=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=EfMK9D65h75rOthfU44oYvuQSFcrO/Jo/A22CsLOiVCHkIZK9Gk6hvNdoXQxJ9jDgE YbMv9q+Uag1nrL1nnw100RDuZ/aFZjz/X0mr1ThiLIRa8+Id7PYzOP5h4828I7EV60xg 7AsJcgs9V0q5y+m+wfECve9EYGMerQmLmIX8xMYP54guGeRsFd8XvTK5xj1eiUABWvoX pcd494C6i1ENiyafftPuJA1/KVViL+mxhuHW3OAzII5F56S6AWTW8uvzaoeIR3+Km0kb oJNOJaQj+5/JOT0djchlx8bgjSqQtEzKeLke3kZOG2PyyQCXlS7Q7XsDkOLm8bDERz90 WydQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776845704; x=1777450504; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=pmpFkNp8mz/hjIyrsGgXgI6BQaln8fgJbKPTpZGzTak=; b=V1EHJRCqIiw4FZsFAf4gX24Q013VDCD+74gINbzzp0nvsTQqHCKexUiVgCyUruQPjf za4hFifE+mnTwXtK0zltEbnlCneGCqZp4oMoPsBx2xzH7u/Tj0DnnRfPe0DfPh5ZqJEB funKXgWilkd8AmaaVrWvJirK/moAJas+lCbixHDp8bkNUtu6ipvptly4DukM+J0e+gmf eVrpW9h9wRJ+U+hFBQHtsbJnDkqIenFnQIFZaokPn1imUbK8Fh+OBvAJ4nHVRcciQJpW fuclwCTz2ANYGmW22lUVnyGg8e64BBbVaT91RRcwXCh68Szocuj4g5k3HNR6d1XQ+Wu5 87yQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776845704; x=1777450504; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=pmpFkNp8mz/hjIyrsGgXgI6BQaln8fgJbKPTpZGzTak=; b=WJmcD39ZJGAvteU33DDvQ7nr1fsF4bS3Gf1kc/pTdLVWXCwkB9hpm0tIuehr3dcKmP FllOrc6SqZhj4Q3LqGba9ajles/zb0IicXJCkZ25bRVL8wNMO/EgIRvNeZqGtCONp1/z 3t0RPjbYkHYc6J67onsBFsi2tp4CeOGhMwgIbeJLO3+7uD4ZsJybogryo7eJUtTLxWfN A63U0Rq3BNJ23mYC3sNAAwPH8olXKXXwJJCyNnIlLVQP9rSsz3Z0Y0fQNAJxHiP5tfLN qTBSiRhALcKvGLLggMVTakzg0DFAHWypwyY3mayGwhVtNMjetrQKxjx3UBt8GGu5qdbO ROtw== X-Gm-Message-State: AOJu0Yw7cEVfLbpGc/x4RuxfVeuE9t3J99ZN6A+FoEfQ2qDDlFNtqZDn +w0p820prtHhA2e0QbdRI+jsOO9Rf8N85o6EIg71V3ewyf5b34WsMC+1AB+0gl/U1Jw5pGnLbSv e4Ntryjw+6EJHcmsjjRs9JBmQ7AUzeCyY2ZvD X-Gm-Gg: AeBDiesvIGwqCBvISeBGvfeCEtSWNh+qco1bQhpGx5z12iSjZOOOUL6D0xXZhaWbyTG 7BjojXVxp7NiVvKjaralhgBx+GxBaFYaW5LhCJIZ9wgZzr6v5vywm8LW0X9P0fBZ02EYkzSZsTn NfiVeXwrvKD/WXpyTHf8X/tX7UKCnYef5HayF4B7/+KnK0nxJ05qD6zRRNPoATiKxwEAyixyyVg Kjw4DQQZC5f2WYOztfFo9zTAmDmN0wjQlA01YLfdaRZySFenDlHsQE9M1SEl+2wWNPaIGBPQxmu zm6805hOWWpecjgWXPnX1tKv6Tc= X-Received: by 2002:a05:690e:23da:b0:651:d6a2:f766 with SMTP id 956f58d0204a3-653109b4699mr14083661d50.35.1776845703795; Wed, 22 Apr 2026 01:15:03 -0700 (PDT) MIME-Version: 1.0 References: <67115399-4799-4c3b-bd17-d43c98099919@vondra.me> <202508051121.fy6nhwsd4l26@alvherre.pgsql> In-Reply-To: From: Arseniy Mukhin Date: Wed, 22 Apr 2026 11:14:52 +0300 X-Gm-Features: AQROBzARPdWqxM0gqEM0xL0pSX4_Cr7KPG9JWyyqCl6w3FUqNgHHHSQ1mlZbwN4 Message-ID: Subject: Re: amcheck support for BRIN indexes To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000ff82480650082089" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ff82480650082089 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Wed, Aug 13, 2025 at 12:19=E2=80=AFAM Arseniy Mukhin wrote: > > I realized that solving the problem with opclasses without equality > operator by letting user to define operator list has several > drawbacks: > > It's not very convenient to call automatically? Because the calls are > different from index to index. You can't just call > brin_index_check('index', true, true) on everything. Maybe I'm wrong, > but it seems like amcheck is a tool that is often used to periodically > check the health of Postgres clusters (and there can be many of them), > so users probably don't want to get into the details of each index. > > Also, it seems like we don't want the user to define the operator to > check. We want them to pass in the "correct" operator if there is no > equality operator. So there's no choice, we just want users to figure > out what the correct operator is and pass it in. But we already know > what the "correct" operator is. Maybe we should just implement an > opclass <-> "correct" operator mapping on the database side? We also > need opclass developers to be able to add such a mapping if they want > their opclass to be supported by amcheck. Then during the check we can > look up into the mapping and use the operators. I was thinking about a > new catalog table or maybe adding it to BrinOpcInfo? Probably there is > a better way to do it? If the mapping doesn't have an operator for > opclass - no problem, we can skip the consistentFn call for such > columns and maybe log a message about it. This way we don't have all > these problems with operator list argument and with false positives > when a user fails to realize what the "correct" operator is. > Is it something we need to think about? If we want to do something about it, it looks like adding amcheck StrategyNumber to BrinOpcInfo is the easiest option. PFA the rebased version with several tiny fixes. Best regards, Arseniy Mukhin --000000000000ff82480650082089 Content-Type: text/x-patch; charset="US-ASCII"; name="v12-0003-amcheck-brin_index_check.patch" Content-Disposition: attachment; filename="v12-0003-amcheck-brin_index_check.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo9rrpbu2 RnJvbSA3NzZlM2UxYzg4N2IxMzk5MzZjNWM4NDk3YjBhMDI1OWIxZDI1ZDU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxNiBKdW4gMjAyNSAxODoxMToyNyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjEyIDMvM10gYW1jaGVjazogYnJpbl9pbmRleF9jaGVjaygpCgpBZGRzIGEgbmV3IGZ1 bmN0aW9uIGJyaW5faW5kZXhfY2hlY2soKSBmb3IgdmFsaWRhdGluZyBCUklOIGluZGV4ZXMuCkl0 IGluY3VkZXMgbmV4dCBjaGVja3M6Ci0gbWV0YSBwYWdlIGNoZWNrcwotIHJldm1hcCBwb2ludGVy cyBpcyB2YWxpZCBhbmQgcG9pbnRzIHRvIGluZGV4IHR1cGxlcyB3aXRoIGV4cGVjdGVkIHJhbmdl IGJsa25vCi0gaW5kZXggdHVwbGVzIGhhdmUgZXhwZWN0ZWQgZm9ybWF0Ci0gc29tZSBzcGVjaWFs IGNoZWNrcyBmb3IgZW1wdHlfcmFuZ2VzCi0gZXZlcnkgaW5kZXggdHVwbGUgaGFzIGNvcnJlc3Bv bmRpbmcgcmV2bWFwIGl0ZW0gdGhhdCBwb2ludHMgdG8gaXQgKG9wdGlvbmFsKQotIGhlYXAgYWxs IGluZGV4ZWQgY2hlY2ssIHdoZXJlIHdlIHZhbGlkYXRlIHRoYXQgZXZlcnkgaGVhcCB0dXBsZSBp cyBjb25zaXN0ZW50IHdpdGggdGhlIGluZGV4IChvcHRpb25hbCkKLS0tCiBjb250cmliL2FtY2hl Y2svTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgICA1ICstCiBjb250cmliL2FtY2hlY2svYW1j aGVjay0tMS41LS0xLjYuc3FsICAgfCAgIDIwICsKIGNvbnRyaWIvYW1jaGVjay9hbWNoZWNrLmNv bnRyb2wgICAgICAgICB8ICAgIDIgKy0KIGNvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19i cmluLm91dCB8ICAxNzIgKysrCiBjb250cmliL2FtY2hlY2svbWVzb24uYnVpbGQgICAgICAgICAg ICAgfCAgICA0ICsKIGNvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfYnJpbi5zcWwgICAgICB8ICAx MzIgKysrCiBjb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwgICAgfCAgMzUwICsr KysrKwogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9icmluLmMgICAgICAgICAgIHwgMTM1OSArKysr KysrKysrKysrKysrKysrKysrKwogZG9jL3NyYy9zZ21sL2FtY2hlY2suc2dtbCAgICAgICAgICAg ICAgIHwgICA3MCArKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgIHwg ICAgMSArCiAxMCBmaWxlcyBjaGFuZ2VkLCAyMTEyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42 LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19i cmluLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfYnJp bi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2Jy aW4ucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2FtY2hlY2svdmVyaWZ5X2JyaW4uYwoK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay9NYWtlZmlsZSBiL2NvbnRyaWIvYW1jaGVjay9N YWtlZmlsZQppbmRleCAxYjdhNjNjYmFhNC4uYmRmYjI3NGM4OWMgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvYW1jaGVjay9NYWtlZmlsZQorKysgYi9jb250cmliL2FtY2hlY2svTWFrZWZpbGUKQEAgLTYs MTEgKzYsMTIgQEAgT0JKUyA9IFwKIAl2ZXJpZnlfY29tbW9uLm8gXAogCXZlcmlmeV9naW4ubyBc CiAJdmVyaWZ5X2hlYXBhbS5vIFwKLQl2ZXJpZnlfbmJ0cmVlLm8KKwl2ZXJpZnlfbmJ0cmVlLm8g XAorCXZlcmlmeV9icmluLm8KIAogRVhURU5TSU9OID0gYW1jaGVjawogREFUQSA9IGFtY2hlY2st LTEuMi0tMS4zLnNxbCBhbWNoZWNrLS0xLjEtLTEuMi5zcWwgYW1jaGVjay0tMS4wLS0xLjEuc3Fs IGFtY2hlY2stLTEuMC5zcWwgXAotCQlhbWNoZWNrLS0xLjMtLTEuNC5zcWwgYW1jaGVjay0tMS40 LS0xLjUuc3FsCisJCWFtY2hlY2stLTEuMy0tMS40LnNxbCBhbWNoZWNrLS0xLjQtLTEuNS5zcWwg YW1jaGVjay0tMS41LS0xLjYuc3FsCiBQR0ZJTEVERVNDID0gImFtY2hlY2sgLSBmdW5jdGlvbiBm b3IgdmVyaWZ5aW5nIHJlbGF0aW9uIGludGVncml0eSIKIAogUkVHUkVTUyA9IGNoZWNrIGNoZWNr X2J0cmVlIGNoZWNrX2dpbiBjaGVja19oZWFwCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2sv YW1jaGVjay0tMS41LS0xLjYuc3FsIGIvY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42 LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTUyNzY1MjdlNjgK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3Fs CkBAIC0wLDAgKzEsMjAgQEAKKy8qIGNvbnRyaWIvYW1jaGVjay9hbWNoZWNrLS0xLjUtLTEuNi5z cWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVy IHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQUxURVIgRVhURU5TSU9OIGFt Y2hlY2sgVVBEQVRFIFRPICcxLjYnIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworCistLQor LS0gYnJpbl9pbmRleF9jaGVjaygpCistLQorQ1JFQVRFIEZVTkNUSU9OIGJyaW5faW5kZXhfY2hl Y2soaW5kZXggcmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1 bGFycGFnZXNjaGVjayBib29sZWFuIGRlZmF1bHQgZmFsc2UsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBoZWFwYWxsaW5kZXhlZCBib29sZWFuIGRlZmF1bHQgZmFsc2UsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWRpYyB0ZXh0W10gZGVmYXVsdCAne30n CispCisgICAgUkVUVVJOUyBWT0lECitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ2JyaW5faW5kZXhf Y2hlY2snCitMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExFTCBSRVNUUklDVEVEOworCistLSBXZSBk b24ndCB3YW50IHRoaXMgdG8gYmUgYXZhaWxhYmxlIHRvIHB1YmxpYworUkVWT0tFIEFMTCBPTiBG VU5DVElPTiBicmluX2luZGV4X2NoZWNrKHJlZ2NsYXNzLCBib29sZWFuLCBib29sZWFuLCB0ZXh0 W10pIEZST00gUFVCTElDOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L2NvbnRyaWIvYW1jaGVjay9hbWNoZWNrLmNvbnRyb2wgYi9jb250cmliL2FtY2hlY2svYW1jaGVj ay5jb250cm9sCmluZGV4IGM4YmE2ZDdjOWJjLi4yZjMyOWVmMmNmNCAxMDA2NDQKLS0tIGEvY29u dHJpYi9hbWNoZWNrL2FtY2hlY2suY29udHJvbAorKysgYi9jb250cmliL2FtY2hlY2svYW1jaGVj ay5jb250cm9sCkBAIC0xLDUgKzEsNSBAQAogIyBhbWNoZWNrIGV4dGVuc2lvbgogY29tbWVudCA9 ICdmdW5jdGlvbnMgZm9yIHZlcmlmeWluZyByZWxhdGlvbiBpbnRlZ3JpdHknCi1kZWZhdWx0X3Zl cnNpb24gPSAnMS41JworZGVmYXVsdF92ZXJzaW9uID0gJzEuNicKIG1vZHVsZV9wYXRobmFtZSA9 ICckbGliZGlyL2FtY2hlY2snCiByZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRy aWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dCBiL2NvbnRyaWIvYW1jaGVjay9leHBl Y3RlZC9jaGVja19icmluLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uYTA3ZThhZGI3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2FtY2hlY2svZXhwZWN0 ZWQvY2hlY2tfYnJpbi5vdXQKQEAgLTAsMCArMSwxNzIgQEAKKy0tIGhlbHBlciBmdW5jCitDUkVB VEUgT1IgUkVQTEFDRSBGVU5DVElPTiByYW5kb21fc3RyaW5nKGludCkgUkVUVVJOUyB0ZXh0IEFT ICQkCitTRUxFQ1Qgc3RyaW5nX2FnZyhzdWJzdHJpbmcoJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xt bm9wcXJzdHV2d3h5eicsIGNlaWwocmFuZG9tKCkgKiAzNik6OmludGVnZXIsIDEpLCAnJykgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgJDEpOworJCQgTEFOR1VBR0Ugc3FsOworLS0gZW1wdHkgdGFi bGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgYmlnaW50 KSBXSVRIIChmaWxsZmFjdG9yID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBi cmludGVzdCBVU0lORyBicmluIChhKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVz dF9pZHgnLCB0cnVlLCB0cnVlKTsKKyBicmluX2luZGV4X2NoZWNrIAorLS0tLS0tLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKKy0tIGNsZWFudXAKK0RST1AgVEFCTEUgYnJpbnRlc3Q7CistLSBt aW5fbWF4IG9wY2xhc3MKK0NSRUFURSBUQUJMRSBicmludGVzdCAoYSBiaWdpbnQpIFdJVEggKGZp bGxmYWN0b3IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVT SU5HIGJyaW4gKGEgaW50OF9taW5tYXhfb3BzKSBXSVRIIChwYWdlc19wZXJfcmFuZ2UgPSAyKTsK K0lOU0VSVCBJTlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwMCkgeDsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVMRVRFIEZST00gYnJp bnRlc3QgV0hFUkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7CitTRUxFQ1QgYnJpbl9pbmRleF9j aGVjaygnYnJpbnRlc3RfaWR4JywgdHJ1ZSwgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0t LS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSByZWJ1aWxkIGluZGV4CitEUk9QIElO REVYIGJyaW50ZXN0X2lkeDsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3Qg VVNJTkcgYnJpbiAoYSBpbnQ4X21pbm1heF9vcHMpIFdJVEggKHBhZ2VzX3Blcl9yYW5nZSA9IDIp OworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCcsIHRydWUsIHRydWUpOwor IGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0g Y2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsKKy0tIG11bHRpX21pbl9tYXggb3BjbGFzcwor Q1JFQVRFIFRBQkxFIGJyaW50ZXN0IChhIGJpZ2ludCkgV0lUSCAoZmlsbGZhY3RvciA9IDEwKTsK K0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgYnJpbiAoYSBpbnQ4 X21pbm1heF9tdWx0aV9vcHMpIFdJVEggKHBhZ2VzX3Blcl9yYW5nZSA9IDIpOworSU5TRVJUIElO VE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4 OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVS RSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmlu dGVzdF9pZHgnLCB0cnVlLCB0cnVlKTsKKyBicmluX2luZGV4X2NoZWNrIAorLS0tLS0tLS0tLS0t LS0tLS0tCisgCisoMSByb3cpCisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRl c3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBicmlu IChhIGludDhfbWlubWF4X211bHRpX29wcykgV0lUSCAocGFnZXNfcGVyX3JhbmdlID0gMik7CitT RUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4JywgdHJ1ZSwgdHJ1ZSk7CisgYnJp bl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBjbGVh bnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworLS0gYmxvb20gb3BjbGFzcworQ1JFQVRFIFRBQkxF IGJyaW50ZXN0IChhIGJpZ2ludCkgV0lUSCAoZmlsbGZhY3RvciA9IDEwKTsKK0NSRUFURSBJTkRF WCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgYnJpbiAoYSBpbnQ4X2Jsb29tX29wcykg V0lUSCAocGFnZXNfcGVyX3JhbmdlID0gMik7CitJTlNFUlQgSU5UTyBicmludGVzdCAoYSkgU0VM RUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIHg7CistLSBjcmVhdGUgc29tZSBl bXB0eSByYW5nZXMKK0RFTEVURSBGUk9NIGJyaW50ZXN0IFdIRVJFIGEgPiAyMDAwMCBBTkQgYSA8 IDQwMDAwOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCcsIHRydWUsIHRy dWUpOworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworLS0gcmVidWlsZCBpbmRleAorRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CitDUkVBVEUgSU5E RVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIGJyaW4gKGEgaW50OF9ibG9vbV9vcHMp IFdJVEggKHBhZ2VzX3Blcl9yYW5nZSA9IDIpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2Jy aW50ZXN0X2lkeCcsIHRydWUsIHRydWUpOworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0t LS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsK Ky0tIGluY2x1c2lvbiBvcGNsYXNzCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGlkIHNlcmlhbCBQ UklNQVJZIEtFWSwgYSBib3gpOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVz dCBVU0lORyBicmluIChhIGJveF9pbmNsdXNpb25fb3BzKSBXSVRIIChwYWdlc19wZXJfcmFuZ2Ug PSAyKTsKK0lOU0VSVCBJTlRPIGJyaW50ZXN0IChhKQorU0VMRUNUIGJveChwb2ludChyYW5kb20o KSAqIDEwMDAsIHJhbmRvbSgpICogMTAwMCksIHBvaW50KHJhbmRvbSgpICogMTAwMCwgcmFuZG9t KCkgKiAxMDAwKSkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKTsKKy0tIGNyZWF0ZSBz b21lIGVtcHR5IHJhbmdlcworREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgaWQgPiAyMDAwIEFO RCBpZCA8IDQwMDA7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4JywgdHJ1 ZSwgdHJ1ZSwgJ0A+Jyk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCistLSByZWJ1aWxkIGluZGV4CitEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsK K0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgYnJpbiAoYSBib3hf aW5jbHVzaW9uX29wcykgV0lUSCAocGFnZXNfcGVyX3JhbmdlID0gMik7CitTRUxFQ1QgYnJpbl9p bmRleF9jaGVjaygnYnJpbnRlc3RfaWR4JywgdHJ1ZSwgdHJ1ZSwgJ0A+Jyk7CisgYnJpbl9pbmRl eF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBjbGVhbnVwCitE Uk9QIFRBQkxFIGJyaW50ZXN0OworLS0gbXVsdGlwbGUgYXR0cmlidXRlcworQ1JFQVRFIFRBQkxF IGJyaW50ZXN0IChpZCBiaWdzZXJpYWwsIGEgdGV4dCkgV0lUSCAoZmlsbGZhY3RvciA9IDEwKTsK K0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgYnJpbiAoaWQgaW50 OF9taW5tYXhfb3BzLCBhIHRleHRfbWlubWF4X29wcykgV0lUSCAocGFnZXNfcGVyX3JhbmdlID0g Mik7CitJTlNFUlQgSU5UTyBicmludGVzdCAoYSkgU0VMRUNUIHJhbmRvbV9zdHJpbmcoKHggJSAx MDApKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIHg7CistLSBjcmVhdGUgc29tZSBlbXB0 eSByYW5nZXMKK0RFTEVURSBGUk9NIGJyaW50ZXN0IFdIRVJFIGlkID4gMTUwMCBBTkQgaWQgPCAy NTAwOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCcsIHRydWUsIHRydWUp OworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor LS0gcmVidWlsZCBpbmRleAorRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CitDUkVBVEUgSU5ERVgg YnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIGJyaW4gKGlkIGludDhfbWlubWF4X29wcywg YSB0ZXh0X21pbm1heF9vcHMpIFdJVEggKHBhZ2VzX3Blcl9yYW5nZSA9IDIpOworU0VMRUNUIGJy aW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCcsIHRydWUsIHRydWUpOworIGJyaW5faW5kZXhf Y2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gY2xlYW51cAorRFJP UCBUQUJMRSBicmludGVzdDsKKy0tIG11bHRpcGxlIGF0dHJpYnV0ZXMgdGVzdCB3aXRoIGN1c3Rv bSBvcGVyYXRvcnMKK0NSRUFURSBUQUJMRSBicmludGVzdCAoaWQgYmlnc2VyaWFsLCBhIHRleHQs IGIgYm94KSBXSVRIIChmaWxsZmFjdG9yID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lk eCBPTiBicmludGVzdCBVU0lORyBicmluIChpZCBpbnQ4X21pbm1heF9vcHMsIGEgdGV4dF9taW5t YXhfb3BzLCBiIGJveF9pbmNsdXNpb25fb3BzKSBXSVRIIChwYWdlc19wZXJfcmFuZ2UgPSAyKTsK K0lOU0VSVCBJTlRPIGJyaW50ZXN0IChhLCBiKSBTRUxFQ1QKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmFuZG9tX3N0cmluZygoeCAlIDEwMCkpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib3gocG9pbnQocmFuZG9tKCkgKiAxMDAwLCByYW5kb20oKSAqIDEwMDAp LCBwb2ludChyYW5kb20oKSAqIDEwMDAsIHJhbmRvbSgpICogMTAwMCkpCitGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAzMDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUg RlJPTSBicmludGVzdCBXSEVSRSBpZCA+IDE1MDAgQU5EIGlkIDwgMjUwMDsKK1NFTEVDVCBicmlu X2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnLCB0cnVlLCB0cnVlLCAnPScsICc9JywgJ0A+Jyk7 CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCist LSByZWJ1aWxkIGluZGV4CitEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKK0NSRUFURSBJTkRFWCBi cmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgYnJpbiAoaWQgaW50OF9taW5tYXhfb3BzLCBh IHRleHRfbWlubWF4X29wcywgYiBib3hfaW5jbHVzaW9uX29wcykgV0lUSCAocGFnZXNfcGVyX3Jh bmdlID0gMik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4JywgdHJ1ZSwg dHJ1ZSwgJz0nLCAnPScsICdAPicpOworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworLS0gZXJyb3IgaWYgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBk ZWZhdWx0IG9wZXJhdG9yIGZvciBhbGwgaW5kZXggYXR0cmlidXRlcworU0VMRUNUIGJyaW5faW5k ZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCcsIHRydWUsIHRydWUpOworRVJST1I6ICBvcGVyYXRvciA9 IGlzIG5vdCBhIG1lbWJlciBvZiBvcGVyYXRvciBmYW1pbHkgImJveF9pbmNsdXNpb25fb3BzIgor LS0gZXJyb3IgaWYgbnVtYmVyIG9mIG9wZXJhdG9ycyBpbiBpbnB1dCBkb2Vzbid0IG1hdGNoIGlu ZGV4IGF0dHJpYnV0ZXMgbnVtYmVyCitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3Rf aWR4JywgdHJ1ZSwgdHJ1ZSwgJz0nKTsKK0VSUk9SOiAgbnVtYmVyIG9mIG9wZXJhdG9yIG5hbWVz IGluIGlucHV0ICgxKSBkb2Vzbid0IG1hdGNoIGluZGV4IGF0dHJpYnV0ZXMgbnVtYmVyICgzKQor LS0gZXJyb3IgaWYgb3BlcmF0b3IgbmFtZSBpcyBOVUxMCitTRUxFQ1QgYnJpbl9pbmRleF9jaGVj aygnYnJpbnRlc3RfaWR4JywgdHJ1ZSwgdHJ1ZSwgJz0nLCAnPScsIE5VTEwpOworRVJST1I6ICBv cGVyYXRvciBuYW1lIG11c3Qgbm90IGJlIE5VTEwKKy0tIGVycm9yIGlmIHRoZXJlIGlzIG5vIG9w ZXJhdG9yIGZvciBhdHRyaWJ1dGUgdHlwZQorU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50 ZXN0X2lkeCcsIHRydWUsIHRydWUsICc9JywgJz0nLCAnQEAnKTsKK0VSUk9SOiAgdGhlcmUgaXMg bm8gb3BlcmF0b3IgQEAgZm9yIHR5cGUgImJveCIKKy0tIGNsZWFudXAKK0RST1AgVEFCTEUgYnJp bnRlc3Q7CistLSBjbGVhbnVwCitEUk9QIEZVTkNUSU9OIHJhbmRvbV9zdHJpbmc7CmRpZmYgLS1n aXQgYS9jb250cmliL2FtY2hlY2svbWVzb24uYnVpbGQgYi9jb250cmliL2FtY2hlY2svbWVzb24u YnVpbGQKaW5kZXggZDUxMzdlZjY5MWQuLjE0MjQ1ZTRkZDY5IDEwMDY0NAotLS0gYS9jb250cmli L2FtY2hlY2svbWVzb24uYnVpbGQKKysrIGIvY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxkCkBA IC01LDYgKzUsNyBAQCBhbWNoZWNrX3NvdXJjZXMgPSBmaWxlcygKICAgJ3ZlcmlmeV9naW4uYycs CiAgICd2ZXJpZnlfaGVhcGFtLmMnLAogICAndmVyaWZ5X25idHJlZS5jJywKKyAgJ3ZlcmlmeV9i cmluLmMnCiApCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpAQCAtMjcsNiArMjgsNyBA QCBpbnN0YWxsX2RhdGEoCiAgICdhbWNoZWNrLS0xLjItLTEuMy5zcWwnLAogICAnYW1jaGVjay0t MS4zLS0xLjQuc3FsJywKICAgJ2FtY2hlY2stLTEuNC0tMS41LnNxbCcsCisgICdhbWNoZWNrLS0x LjUtLTEuNi5zcWwnLAogICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAogKQogCkBAIC00MCw2 ICs0Miw3IEBAIHRlc3RzICs9IHsKICAgICAgICdjaGVja19idHJlZScsCiAgICAgICAnY2hlY2tf Z2luJywKICAgICAgICdjaGVja19oZWFwJywKKyAgICAgICdjaGVja19icmluJwogICAgIF0sCiAg IH0sCiAgICd0YXAnOiB7CkBAIC01MCw2ICs1Myw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAw NF92ZXJpZnlfbmJ0cmVlX3VuaXF1ZS5wbCcsCiAgICAgICAndC8wMDVfcGl0ci5wbCcsCiAgICAg ICAndC8wMDZfdmVyaWZ5X2dpbi5wbCcsCisgICAgICAndC8wMDdfdmVyaWZ5X2JyaW4ucGwnLAog ICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2Jy aW4uc3FsIGIvY29udHJpYi9hbWNoZWNrL3NxbC9jaGVja19icmluLnNxbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjZkZDE2NDdkM2IKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2JyaW4uc3FsCkBAIC0wLDAgKzEsMTMyIEBACist LSBoZWxwZXIgZnVuYworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcmFuZG9tX3N0cmluZyhp bnQpIFJFVFVSTlMgdGV4dCBBUyAkJAorU0VMRUNUIHN0cmluZ19hZ2coc3Vic3RyaW5nKCcwMTIz NDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonLCBjZWlsKHJhbmRvbSgpICogMzYpOjpp bnRlZ2VyLCAxKSwgJycpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsICQxKTsKKyQkIExBTkdVQUdF IHNxbDsKKworCistLSBlbXB0eSB0YWJsZSBpbmRleCBzaG91bGQgYmUgdmFsaWQKK0NSRUFURSBU QUJMRSBicmludGVzdCAoYSBiaWdpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSAxMCk7CitDUkVBVEUg SU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIGJyaW4gKGEpOworU0VMRUNUIGJy aW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCcsIHRydWUsIHRydWUpOworLS0gY2xlYW51cAor RFJPUCBUQUJMRSBicmludGVzdDsKKworLS0gbWluX21heCBvcGNsYXNzCitDUkVBVEUgVEFCTEUg YnJpbnRlc3QgKGEgYmlnaW50KSBXSVRIIChmaWxsZmFjdG9yID0gMTApOworQ1JFQVRFIElOREVY IGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBicmluIChhIGludDhfbWlubWF4X29wcykg V0lUSCAocGFnZXNfcGVyX3JhbmdlID0gMik7CitJTlNFUlQgSU5UTyBicmludGVzdCAoYSkgU0VM RUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIHg7CistLSBjcmVhdGUgc29tZSBl bXB0eSByYW5nZXMKK0RFTEVURSBGUk9NIGJyaW50ZXN0IFdIRVJFIGEgPiAyMDAwMCBBTkQgYSA8 IDQwMDAwOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCcsIHRydWUsIHRy dWUpOworCistLSByZWJ1aWxkIGluZGV4CitEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKK0NSRUFU RSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgYnJpbiAoYSBpbnQ4X21pbm1h eF9vcHMpIFdJVEggKHBhZ2VzX3Blcl9yYW5nZSA9IDIpOworU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCcsIHRydWUsIHRydWUpOworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBi cmludGVzdDsKKworCisKKy0tIG11bHRpX21pbl9tYXggb3BjbGFzcworQ1JFQVRFIFRBQkxFIGJy aW50ZXN0IChhIGJpZ2ludCkgV0lUSCAoZmlsbGZhY3RvciA9IDEwKTsKK0NSRUFURSBJTkRFWCBi cmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgYnJpbiAoYSBpbnQ4X21pbm1heF9tdWx0aV9v cHMpIFdJVEggKHBhZ2VzX3Blcl9yYW5nZSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEp IFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OworLS0gY3JlYXRlIHNv bWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5E IGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnLCB0cnVl LCB0cnVlKTsKKworLS0gcmVidWlsZCBpbmRleAorRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CitD UkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIGJyaW4gKGEgaW50OF9t aW5tYXhfbXVsdGlfb3BzKSBXSVRIIChwYWdlc19wZXJfcmFuZ2UgPSAyKTsKK1NFTEVDVCBicmlu X2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnLCB0cnVlLCB0cnVlKTsKKy0tIGNsZWFudXAKK0RS T1AgVEFCTEUgYnJpbnRlc3Q7CisKKworCistLSBibG9vbSBvcGNsYXNzCitDUkVBVEUgVEFCTEUg YnJpbnRlc3QgKGEgYmlnaW50KSBXSVRIIChmaWxsZmFjdG9yID0gMTApOworQ1JFQVRFIElOREVY IGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBicmluIChhIGludDhfYmxvb21fb3BzKSBX SVRIIChwYWdlc19wZXJfcmFuZ2UgPSAyKTsKK0lOU0VSVCBJTlRPIGJyaW50ZXN0IChhKSBTRUxF Q1QgeCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgeDsKKy0tIGNyZWF0ZSBzb21lIGVt cHR5IHJhbmdlcworREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgYSA+IDIwMDAwIEFORCBhIDwg NDAwMDA7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4JywgdHJ1ZSwgdHJ1 ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRF IElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBicmluIChhIGludDhfYmxvb21f b3BzKSBXSVRIIChwYWdlc19wZXJfcmFuZ2UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnLCB0cnVlLCB0cnVlKTsKKy0tIGNsZWFudXAKK0RST1AgVEFCTEUgYnJp bnRlc3Q7CisKKworLS0gaW5jbHVzaW9uIG9wY2xhc3MKK0NSRUFURSBUQUJMRSBicmludGVzdCAo aWQgc2VyaWFsIFBSSU1BUlkgS0VZLCBhIGJveCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4 IE9OIGJyaW50ZXN0IFVTSU5HIGJyaW4gKGEgYm94X2luY2x1c2lvbl9vcHMpIFdJVEggKHBhZ2Vz X3Blcl9yYW5nZSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpCitTRUxFQ1QgYm94KHBv aW50KHJhbmRvbSgpICogMTAwMCwgcmFuZG9tKCkgKiAxMDAwKSwgcG9pbnQocmFuZG9tKCkgKiAx MDAwLCByYW5kb20oKSAqIDEwMDApKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApOwor LS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBp ZCA+IDIwMDAgQU5EIGlkIDwgNDAwMDsKKworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50 ZXN0X2lkeCcsIHRydWUsIHRydWUsICdAPicpOworCistLSByZWJ1aWxkIGluZGV4CitEUk9QIElO REVYIGJyaW50ZXN0X2lkeDsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3Qg VVNJTkcgYnJpbiAoYSBib3hfaW5jbHVzaW9uX29wcykgV0lUSCAocGFnZXNfcGVyX3JhbmdlID0g Mik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4JywgdHJ1ZSwgdHJ1ZSwg J0A+Jyk7CistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworCisKKy0tIG11bHRpcGxl IGF0dHJpYnV0ZXMKK0NSRUFURSBUQUJMRSBicmludGVzdCAoaWQgYmlnc2VyaWFsLCBhIHRleHQp IFdJVEggKGZpbGxmYWN0b3IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJy aW50ZXN0IFVTSU5HIGJyaW4gKGlkIGludDhfbWlubWF4X29wcywgYSB0ZXh0X21pbm1heF9vcHMp IFdJVEggKHBhZ2VzX3Blcl9yYW5nZSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNF TEVDVCByYW5kb21fc3RyaW5nKCh4ICUgMTAwKSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAw KSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBX SEVSRSBpZCA+IDE1MDAgQU5EIGlkIDwgMjUwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnLCB0cnVlLCB0cnVlKTsKKworLS0gcmVidWlsZCBpbmRleAorRFJPUCBJTkRF WCBicmludGVzdF9pZHg7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVT SU5HIGJyaW4gKGlkIGludDhfbWlubWF4X29wcywgYSB0ZXh0X21pbm1heF9vcHMpIFdJVEggKHBh Z2VzX3Blcl9yYW5nZSA9IDIpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lk eCcsIHRydWUsIHRydWUpOworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsKKworCist LSBtdWx0aXBsZSBhdHRyaWJ1dGVzIHRlc3Qgd2l0aCBjdXN0b20gb3BlcmF0b3JzCitDUkVBVEUg VEFCTEUgYnJpbnRlc3QgKGlkIGJpZ3NlcmlhbCwgYSB0ZXh0LCBiIGJveCkgV0lUSCAoZmlsbGZh Y3RvciA9IDEwKTsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcg YnJpbiAoaWQgaW50OF9taW5tYXhfb3BzLCBhIHRleHRfbWlubWF4X29wcywgYiBib3hfaW5jbHVz aW9uX29wcykgV0lUSCAocGFnZXNfcGVyX3JhbmdlID0gMik7CitJTlNFUlQgSU5UTyBicmludGVz dCAoYSwgYikgU0VMRUNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9z dHJpbmcoKHggJSAxMDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94KHBv aW50KHJhbmRvbSgpICogMTAwMCwgcmFuZG9tKCkgKiAxMDAwKSwgcG9pbnQocmFuZG9tKCkgKiAx MDAwLCByYW5kb20oKSAqIDEwMDApKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzAwMCkgeDsK Ky0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUg aWQgPiAxNTAwIEFORCBpZCA8IDI1MDA7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRl c3RfaWR4JywgdHJ1ZSwgdHJ1ZSwgJz0nLCAnPScsICdAPicpOworCistLSByZWJ1aWxkIGluZGV4 CitEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04g YnJpbnRlc3QgVVNJTkcgYnJpbiAoaWQgaW50OF9taW5tYXhfb3BzLCBhIHRleHRfbWlubWF4X29w cywgYiBib3hfaW5jbHVzaW9uX29wcykgV0lUSCAocGFnZXNfcGVyX3JhbmdlID0gMik7CitTRUxF Q1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4JywgdHJ1ZSwgdHJ1ZSwgJz0nLCAnPScs ICdAPicpOworCistLSBlcnJvciBpZiBpdCdzIGltcG9zc2libGUgdG8gdXNlIGRlZmF1bHQgb3Bl cmF0b3IgZm9yIGFsbCBpbmRleCBhdHRyaWJ1dGVzCitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygn YnJpbnRlc3RfaWR4JywgdHJ1ZSwgdHJ1ZSk7CisKKy0tIGVycm9yIGlmIG51bWJlciBvZiBvcGVy YXRvcnMgaW4gaW5wdXQgZG9lc24ndCBtYXRjaCBpbmRleCBhdHRyaWJ1dGVzIG51bWJlcgorU0VM RUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCcsIHRydWUsIHRydWUsICc9Jyk7CisK Ky0tIGVycm9yIGlmIG9wZXJhdG9yIG5hbWUgaXMgTlVMTAorU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCcsIHRydWUsIHRydWUsICc9JywgJz0nLCBOVUxMKTsKKworLS0gZXJy b3IgaWYgdGhlcmUgaXMgbm8gb3BlcmF0b3IgZm9yIGF0dHJpYnV0ZSB0eXBlCitTRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4JywgdHJ1ZSwgdHJ1ZSwgJz0nLCAnPScsICdAQCcp OworCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworCisKKy0tIGNsZWFudXAKK0RS T1AgRlVOQ1RJT04gcmFuZG9tX3N0cmluZzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp ZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwgYi9jb250cmli L2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjZmZTBjNzhmMTJlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hbWNo ZWNrL3QvMDA3X3ZlcmlmeV9icmluLnBsCkBAIC0wLDAgKzEsMzUwIEBACisjIENvcHlyaWdodCAo YykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ug c3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKKwordXNlIFRlc3Q6 Ok1vcmU7CisKK215ICRub2RlOworbXkgJGJsa3NpemU7CitteSAkbWV0YV9wYWdlX2Jsa25vID0g MDsKKworIworIyBUZXN0IHNldC11cAorIworJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoJ3Rlc3QnKTsKKyRub2RlLT5pbml0KG5vX2RhdGFfY2hlY2tzdW1zID0+IDEpOwor JG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnYXV0b3ZhY3V1bT1vZmYnKTsK KyRub2RlLT5zdGFydDsKKyRibGtzaXplID0gaW50KCRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJ1NIT1cgYmxvY2tfc2l6ZTsnKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEo Q1JFQVRFIEVYVEVOU0lPTiBhbWNoZWNrKSk7CisKKyMgVGVzdHMKKworIyBUZXN0IGZsb3c6Cisj IC0gY3JlYXRlIGFsbCBuZWNlc3NhcnkgcmVsYXRpb25zIGFuZCBpbmRleGVzIGZvciBhbGwgdGVz dCBjYXNlcworIyAtIHN0b3AgdGhlIG5vZGUKKyMgLSBpbnNlcnQgY29ycnVwdGlvbnMgZm9yIGFs bCB0ZXN0IGNhc2VzCisjIC0gc3RhcnQgdGhlIG5vZGUKKyMgLSBhc3NlcnRpb25zCisjCisjIFRo aXMgd2F5IHdlIGF2b2lkIHdhaXRpbmcgZm9yIHRoZSBub2RlIHRvIHJlc3RhcnQgZm9yIGVhY2gg dGVzdCwgd2hpY2ggc3BlZWRzIHVwIHRoZSB0ZXN0cy4KKworbXkgQHRlc3RzID0gKAorICAgIHsK KyAgICAgICAgIyBpbnZhbGlkIG1ldGEgcGFnZSB0eXBlCisKKyAgICAgICAgZmluZCAgICAgPT4g cGFjaygnUycsIDB4RjA5MSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ1MnLCAweEFBQUEp LAorICAgICAgICBibGtubyAgICA9PiAkbWV0YV9wYWdlX2Jsa25vLAorICAgICAgICBleHBlY3Rl ZCA9PiB3cmFwKCdtZXRhcGFnZSBpcyBjb3JydXB0ZWQnKQorICAgIH0sCisgICAgeworICAgICAg ICAjIGludmFsaWQgbWV0YSBwYWdlIG1hZ2ljIHdvcmQKKworICAgICAgICBmaW5kICAgICA9PiBw YWNrKCdMJywgMHhBODEwOUNGQSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0wnLCAweEJC MTA5Q0ZCKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAgICAgICAg ZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29ycnVwdGVkJyksCisgICAgfSwKKyAgICB7 CisgICAgICAgICMgaW52YWxpZCBtZXRhIHBhZ2UgaW5kZXggdmVyc2lvbgorCisgICAgICAgIGZp bmQgICAgID0+IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMSksCisgICAgICAgIHJlcGxhY2UgID0+ IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMiksCisgICAgICAgIGJsa25vICAgID0+ICRtZXRhX3Bh Z2VfYmxrbm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFwYWdlIGlzIGNvcnJ1cHRl ZCcpCisgICAgfSwKKyAgICB7CisgICAgICAgICMgcGFnZXNfcGVyX3JhbmdlIGJlbG93IGxvd2Vy IGxpbWl0CisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTConLCAweEE4MTA5Q0ZBLCAxLCAx MjgpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEsIDEsIDApLAor ICAgICAgICBibGtubyAgICA9PiAkbWV0YV9wYWdlX2Jsa25vLAorICAgICAgICBleHBlY3RlZCA9 PiB3cmFwKCdtZXRhcGFnZSBpcyBjb3JydXB0ZWQnKQorICAgIH0sCisgICAgeworICAgICAgICAj IHBhZ2VzX3Blcl9yYW5nZSBhYm92ZSB1cHBlciBsaW1pdAorCisgICAgICAgIGZpbmQgICAgID0+ IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMSwgMTI4KSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFj aygnTConLCAweEE4MTA5Q0ZBLCAxLCAxMzEwNzMpLAorICAgICAgICBibGtubyAgICA9PiAkbWV0 YV9wYWdlX2Jsa25vLAorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdtZXRhcGFnZSBpcyBjb3Jy dXB0ZWQnKQorICAgIH0sCisgICAgeworICAgICAgICAjIGxhc3RfcmV2bWFwX3BhZ2UgYmVsb3cg bG93ZXIgbGltaXQKKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEs IDEsIDEyOCwgMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0wqJywgMHhBODEwOUNGQSwg MSwgMTI4LCAwKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAgICAg ICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29ycnVwdGVkJyksCisgICAgfSwKKyAg ICB7CisKKyAgICAgICAgIyBsYXN0X3Jldm1hcF9wYWdlIGJleW9uZCBpbmRleCByZWxhdGlvbiBz aXplCisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTConLCAweEE4MTA5Q0ZBLCAxLCAxMjgs IDEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEsIDEsIDEyOCwg MTAwKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAgICAgICAgZXhw ZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29ycnVwdGVkJyksCisgICAgfSwKKyAgICB7Cisg ICAgICAgICMgaW52YWxpZCByZXZtYXAgcGFnZSB0eXBlCisKKyAgICAgICAgZmluZCAgICAgPT4g cGFjaygnUycsIDB4RjA5MiksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ1MnLCAweEFBQUEp LAorICAgICAgICBibGtubyAgICA9PiAxLCAjIHJldm1hcCBwYWdlCisgICAgICAgIGV4cGVjdGVk ID0+IHdyYXAoJ3Jldm1hcCBwYWdlIGlzIGV4cGVjdGVkIGF0IGJsb2NrIDEsIGxhc3QgcmV2bWFw IHBhZ2UgMScpLAorICAgIH0sCisgICAgeworICAgICAgICAjIHJldm1hcCBpdGVtIHBvaW50cyBi ZXlvbmQgaW5kZXggcmVsYXRpb24gc2l6ZQorICAgICAgICAjIHJlcGxhY2UgKDIsMSkgd2l0aCAo MTAwLDEpCisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnUyonLCAwLCAyLCAxKSwKKyAgICAg ICAgcmVwbGFjZSAgPT4gcGFjaygnUyonLCAwLCAxMDAsIDEpLAorICAgICAgICBibGtubyAgICA9 PiAxLCAjIHJldm1hcCBwYWdlCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ3Jldm1hcCBpdGVt IHBvaW50cyB0byBhIG5vbiBleGlzdGluZyBibG9jayAxMDAsICcKKyAgICAgICAgICAgIC4gJ2lu ZGV4IG1heCBibG9jayAyLiBSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDApJykKKyAg ICB9LAorICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIHJlZ3VsYXIgcGFnZSB0eXBlCisKKyAgICAg ICAgZmluZCAgICAgPT4gcGFjaygnUycsIDB4RjA5MyksCisgICAgICAgIHJlcGxhY2UgID0+IHBh Y2soJ1MnLCAweEFBQUEpLAorICAgICAgICBibGtubyAgICA9PiAyLCAjIHJlZ3VsYXIgcGFnZQor ICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdyZXZtYXAgaXRlbSBwb2ludHMgdG8gdGhlIHBhZ2Ug d2hpY2ggaXMgbm90IHJlZ3VsYXIgKGJsa25vOiAyKS4gJworICAgICAgICAgICAgLiAnUmFuZ2Ug Ymxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMg cmV2bWFwIGl0ZW0gcG9pbnRzIGJleW9uZCByZWd1bGFyIHBhZ2UgbWF4IG9mZnNldAorICAgICAg ICAjIHJlcGxhY2UgKDIsMSkgd2l0aCAoMiwyKQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2so J1MqJywgMCwgMiwgMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ1MqJywgMCwgMiwgMiks CisgICAgICAgIGJsa25vICAgID0+IDEsICMgcmV2bWFwIHBhZ2UKKyAgICAgICAgZXhwZWN0ZWQg PT4gd3JhcCgncmV2bWFwIGl0ZW0gb2Zmc2V0IG51bWJlciAyIGlzIGdyZWF0ZXIgdGhhbiByZWd1 bGFyIHBhZ2UgMiBtYXggb2Zmc2V0IDEuICcKKyAgICAgICAgICAgIC4gJ1JhbmdlIGJsa25vOiAw LCByZXZtYXAgaXRlbTogKDEsMCknKQorICAgIH0sCisgICAgeworICAgICAgICAjIGludmFsaWQg aW5kZXggdHVwbGUgcmFuZ2UgYmxrbm8KKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMQ0Mn LCAwLCAweEE4LCAweDAxKSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTENDJywgMSwgMHhB OCwgMHgwMSksCisgICAgICAgIGJsa25vICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAg IGV4cGVjdGVkID0+IHdyYXAoJ2luZGV4IHR1cGxlIGhhcyBpbnZhbGlkIGJsa25vIDEuIFJhbmdl IGJsa25vOiAwLCByZXZtYXAgaXRlbTogKDEsMCksIGluZGV4IHR1cGxlOiAoMiwxKScpCisgICAg fSwKKyAgICB7CisgICAgICAgICMgcmFuZ2UgYmV5b25kIHRoZSB0YWJsZSBzaXplIGFuZCBpcyBu b3QgZW1wdHkKKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMQ0MnLCAwLCAweEE4LCAweDAx KSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTENDJywgMCwgMHg4OCwgMHgwMSksCisgICAg ICAgIGJsa25vICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIGV4cGVjdGVkID0+IHdy YXAoJ3RoZSByYW5nZSBpcyBiZXlvbmQgdGhlIHRhYmxlIHNpemUsIGJ1dCBpcyBub3QgbWFya2Vk IGFzIGVtcHR5LCB0YWJsZSBzaXplOiAwIGJsb2Nrcy4gJworICAgICAgICAgICAgLiAnUmFuZ2Ug Ymxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpJykKKyAgICB9 LAorICAgIHsKKyAgICAgICAgIyBjb3JydXB0IGluZGV4IHR1cGxlIGRhdGEgb2Zmc2V0CisgICAg ICAgICMgaGVyZSAgMHgwMCwgMHgwMCwgMHgwMCBpcyBwYWRkaW5nIGFuZCAnLicgaXMgdmFybGVu YSBsZW4gYnl0ZQorCisgICAgICAgIGZpbmQgICAgICAgPT4gcGFjaygnTENDQ0MnLCAwLCAweDA4 LCAweDAwLCAweDAwLCAweDAwKSAuICcoLiknIC4gJ2FhYWFhJywKKyAgICAgICAgcmVwbGFjZSAg ICA9PiBwYWNrKCdMQ0NDQycsIDAsIDB4MUYsIDB4MDAsIDB4MDAsIDB4MDApIC4gJyQxJyAuICdh YWFhYScsCisgICAgICAgIGJsa25vICAgICAgPT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAg dGFibGVfZGF0YSA9PiBzdWIgeworICAgICAgICAgICAgbXkgKCR0ZXN0X3N0cnVjdCkgPSBAXzsK KyAgICAgICAgICAgIHJldHVybiBxcShJTlNFUlQgSU5UTyAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9u YW1lfSAoYSkgVkFMVUVTICgnYWFhYWEnKTspOworICAgICAgICB9LAorICAgICAgICBleHBlY3Rl ZCAgID0+IHFyL2luZGV4IHR1cGxlIGhlYWRlciBsZW5ndGggMzEgaXMgZ3JlYXRlciB0aGFuIHR1 cGxlIGxlbiAuLlwuIFxRUmFuZ2UgYmxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXgg dHVwbGU6ICgyLDEpXEUvCisgICAgfSwKKyAgICB7CisgICAgICAgICMgZW1wdHkgcmFuZ2UgaW5k ZXggdHVwbGUgZG9lc24ndCBoYXZlIG51bGwgYml0bWFwCisKKyAgICAgICAgZmluZCAgICAgPT4g cGFjaygnTENDJywgMCwgMHhBOCwgMHgwMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0xD QycsIDAsIDB4MjgsIDB4MDEpLAorICAgICAgICBibGtubyAgICA9PiAyLCAjIHJlZ3VsYXIgcGFn ZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdlbXB0eSByYW5nZSBpbmRleCB0dXBsZSBkb2Vz blwndCBoYXZlIG51bGwgYml0bWFwLiAnCisgICAgICAgICAgICAuICdSYW5nZSBibGtubzogMCwg cmV2bWFwIGl0ZW06ICgxLDApLCBpbmRleCB0dXBsZTogKDIsMSknKQorICAgIH0sCisgICAgewor ICAgICAgICAjIGVtcHR5IHJhbmdlIGluZGV4IHR1cGxlIGFsbF9udWxscyAtPiBmYWxzZQorCisg ICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0xDQycsIDAsIDB4QTgsIDB4MDEpLAorICAgICAgICBy ZXBsYWNlICA9PiBwYWNrKCdMQ0MnLCAwLCAweEE4LCAweDAwKSwKKyAgICAgICAgYmxrbm8gICAg PT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnZW1wdHkgcmFu Z2UgaW5kZXggdHVwbGUgYXR0cmlidXRlIDAgd2l0aCBhbGxudWxscyBpcyBmYWxzZS4gJworICAg ICAgICAgICAgLiAnUmFuZ2UgYmxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXggdHVw bGU6ICgyLDEpJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBlbXB0eSByYW5nZSBpbmRleCB0 dXBsZSBoYXNfbnVsbHMgLT4gdHJ1ZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0xDQycs IDAsIDB4QTgsIDB4MDEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMQ0MnLCAwLCAweEE4 LCAweDAzKSwKKyAgICAgICAgYmxrbm8gICAgPT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAg ZXhwZWN0ZWQgPT4gd3JhcCgnZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgYXR0cmlidXRlIDAgd2l0 aCBoYXNudWxscyBpcyB0cnVlLiAnCisgICAgICAgICAgICAuICdSYW5nZSBibGtubzogMCwgcmV2 bWFwIGl0ZW06ICgxLDApLCBpbmRleCB0dXBsZTogKDIsMSknKQorICAgIH0sCisgICAgeworICAg ICAgICAjIGludmFsaWQgaW5kZXggdHVwbGUgZGF0YQorICAgICAgICAjIHJlcGxhY2UgdmFybGVu YSBsZW4gd2l0aCBGRiAtIHNob3VsZCB3b3JrIHdpdGggYW55IGVuZGlhbm5lc3MKKworICAgICAg ICBmaW5kICAgICAgID0+IHBhY2soJ0xDQ0NDJywgMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCkg LiAnLicgLiAnYWFhYWEnLAorICAgICAgICByZXBsYWNlICAgID0+IHBhY2soJ0xDQ0NDQycsIDAs IDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYpIC4gJ2FhYWFhJywKKyAgICAgICAgYmxrbm8g ICAgICA9PiAyLCAjIHJlZ3VsYXIgcGFnZQorICAgICAgICB0YWJsZV9kYXRhID0+IHN1YiB7Cisg ICAgICAgICAgICBteSAoJHRlc3Rfc3RydWN0KSA9IEBfOworICAgICAgICAgICAgcmV0dXJuIHFx KElOU0VSVCBJTlRPICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IChhKSBWQUxVRVMgKCdhYWFh YScpOyk7CisgICAgICAgIH0sCisgICAgICAgIGV4cGVjdGVkICAgPT4gcXIvYXR0cmlidXRlIDAg c3RvcmVkIHZhbHVlIDAgd2l0aCBsZW5ndGggLTEgZW5kcyBhdCBvZmZzZXQgMTI3IGJleW9uZCB0 b3RhbCB0dXBsZSBsZW5ndGggLi5cLlxRIFJhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTogKDEs MCksIGluZGV4IHR1cGxlOiAoMiwxKVxFLworICAgIH0sCisgICAgeworICAgICAgICAjIG9ycGhh biBpbmRleCB0dXBsZQorICAgICAgICAjIHJlcGxhY2UgdmFsaWQgcmV2bWFwIGl0ZW0gd2l0aCAo MCwwKQorCisgICAgICAgIGZpbmQgICAgICAgPT4gcGFjaygnUyonLCAwLCAyLCAxKSwKKyAgICAg ICAgcmVwbGFjZSAgICA9PiBwYWNrKCdTKicsIDAsIDAsIDApLAorICAgICAgICBibGtubyAgICAg ID0+IDEsICMgcmV2bWFwIHBhZ2UKKyAgICAgICAgdGFibGVfZGF0YSA9PiBzdWIgeworICAgICAg ICAgICAgbXkgKCR0ZXN0X3N0cnVjdCkgPSBAXzsKKyAgICAgICAgICAgIHJldHVybiBxcShJTlNF UlQgSU5UTyAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9uYW1lfSAoYSkgVkFMVUVTICgnYWFhYWEnKTsp OworICAgICAgICB9LAorICAgICAgICBleHBlY3RlZCAgID0+IHdyYXAoInJldm1hcCBkb2Vzbid0 IHBvaW50IHRvIGluZGV4IHR1cGxlLiBSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDAp LCBpbmRleCB0dXBsZTogKDIsMSkiKQorICAgIH0sCisgICAgeworICAgICAgICAjIHJhbmdlIGlz IG1hcmtlZCBhcyBlbXB0eV9yYW5nZSwgYnV0IGhlYXAgaGFzIHNvbWUgZGF0YSBmb3IgdGhlIHJh bmdlCisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTENDJywgMCwgMHg4OCwgMHgwMyksCisg ICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0xDQycsIDAsIDB4QTgsIDB4MDEpLAorICAgICAgICBi bGtubyAgICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4gc3Vi IHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3QpID0gQF87CisgICAgICAgICAgICByZXR1 cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAo bnVsbCk7KTsKKyAgICAgICAgfSwKKyAgICAgICAgZXhwZWN0ZWQgICA9PiB3cmFwKCdyYW5nZSBp cyBtYXJrZWQgYXMgZW1wdHkgYnV0IGNvbnRhaW5zIHF1YWxpZmllZCBsaXZlIHR1cGxlcy4gUmFu Z2UgYmxrbm86IDAsIGhlYXAgdGlkICgwLDEpJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBy YW5nZSBoYXNudWxscyAmIGFsbG51bGxzIGFyZSBmYWxzZSwgYnV0IGhlYXAgY29udGFpbnMgbnVs bCB2YWx1ZXMgZm9yIHRoZSByYW5nZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0xDQycs IDAsIDB4ODgsIDB4MDIpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMQ0MnLCAwLCAweDg4 LCAweDAwKSwKKyAgICAgICAgYmxrbm8gICAgICA9PiAyLCAjIHJlZ3VsYXIgcGFnZQorICAgICAg ICB0YWJsZV9kYXRhID0+IHN1YiB7CisgICAgICAgICAgICBteSAoJHRlc3Rfc3RydWN0KSA9IEBf OworICAgICAgICAgICAgcmV0dXJuIHFxKElOU0VSVCBJTlRPICR0ZXN0X3N0cnVjdC0+e3RhYmxl X25hbWV9IChhKSBWQUxVRVMgKG51bGwpLCAoJ2FhYWFhJyk7KTsKKyAgICAgICAgfSwKKyAgICAg ICAgZXhwZWN0ZWQgICA9PiB3cmFwKCdyYW5nZSBoYXNudWxscyBhbmQgYWxsbnVsbHMgYXJlIGZh bHNlLCBidXQgY29udGFpbnMgYSBudWxsIHZhbHVlLiBSYW5nZSBibGtubzogMCwgaGVhcCB0aWQg KDAsMSknKQorICAgIH0sCisgICAgeworICAgICAgICAjIHJhbmdlIGFsbG51bGxzIGlzIHRydWUs IGJ1dCBoZWFwIGNvbnRhaW5zIG5vbi1udWxsIHZhbHVlcyBmb3IgdGhlIHJhbmdlCisKKyAgICAg ICAgZmluZCAgICAgPT4gcGFjaygnTENDJywgMCwgMHg4OCwgMHgwMiksCisgICAgICAgIHJlcGxh Y2UgID0+IHBhY2soJ0xDQycsIDAsIDB4ODgsIDB4MDEpLAorICAgICAgICBibGtubyAgICAgID0+ IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4gc3ViIHsKKyAgICAgICAg ICAgIG15ICgkdGVzdF9zdHJ1Y3QpID0gQF87CisgICAgICAgICAgICByZXR1cm4gcXEoSU5TRVJU IElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAobnVsbCksICgnYWFh YWEnKTspOworICAgICAgICB9LAorICAgICAgICBleHBlY3RlZCAgID0+IHdyYXAoJ3JhbmdlIGFs bG51bGxzIGlzIHRydWUsIGJ1dCBjb250YWlucyBub25udWxsIHZhbHVlLiBSYW5nZSBibGtubzog MCwgaGVhcCB0aWQgKDAsMiknKQorICAgIH0sCisgICAgeworICAgICAgICAjIGNvbnNpc3RlbnQg ZnVuY3Rpb24gcmV0dXJuIEZBTFNFIGZvciB0aGUgdmFsaWQgaGVhcCB2YWx1ZQorICAgICAgICAj IHJlcGxhY2UgImNjY2NjIiB3aXRoICJiYmJiYiIgc28gdGhhdCBtaW5fbWF4IGluZGV4IHdhcyB0 b28gbmFycm93CisKKyAgICAgICAgZmluZCAgICAgICA9PiAnY2NjY2MnLAorICAgICAgICByZXBs YWNlICAgID0+ICdiYmJiYicsCisgICAgICAgIGJsa25vICAgICAgPT4gMiwgIyByZWd1bGFyIHBh Z2UKKyAgICAgICAgdGFibGVfZGF0YSA9PiBzdWIgeworICAgICAgICAgICAgbXkgKCR0ZXN0X3N0 cnVjdCkgPSBAXzsKKyAgICAgICAgICAgIHJldHVybiBxcShJTlNFUlQgSU5UTyAkdGVzdF9zdHJ1 Y3QtPnt0YWJsZV9uYW1lfSAoYSkgVkFMVUVTICgnYWFhYWEnKSwgKCdjY2NjYycpOyk7CisgICAg ICAgIH0sCisgICAgICAgIGV4cGVjdGVkICAgPT4gd3JhcCgnaGVhcCB0dXBsZSBpbmNvbnNpc3Rl bnQgd2l0aCBpbmRleC4gUmFuZ2UgYmxrbm86IDAsIGhlYXAgdGlkICgwLDIpJykKKyAgICB9Cisp OworCisKKyMgaW5pdCB0ZXN0IGRhdGEKK215ICRpID0gMTsKK2ZvcmVhY2ggbXkgJHRlc3Rfc3Ry dWN0IChAdGVzdHMpIHsKKworICAgICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9ID0gJ3QnIC4g JGkrKzsKKyAgICAkdGVzdF9zdHJ1Y3QtPntpbmRleF9uYW1lfSA9ICR0ZXN0X3N0cnVjdC0+e3Rh YmxlX25hbWV9IC4gJ19icmluX2lkeCc7CisKKyAgICBteSAkdGVzdF9kYXRhX3NxbCA9ICcnOwor ICAgIGlmIChleGlzdHMgJHRlc3Rfc3RydWN0LT57dGFibGVfZGF0YX0pIHsKKyAgICAgICAgJHRl c3RfZGF0YV9zcWwgPSAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9kYXRhfS0+KCR0ZXN0X3N0cnVjdCk7 CisgICAgfQorCisgICAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKyAgICAgICAg Q1JFQVRFIFRBQkxFICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IChhIFRFWFQpOworICAgICAg ICAkdGVzdF9kYXRhX3NxbAorICAgICAgICBDUkVBVEUgSU5ERVggJHRlc3Rfc3RydWN0LT57aW5k ZXhfbmFtZX0gT04gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gVVNJTkcgQlJJTiAoYSk7Cisg ICAgKSk7CisKKyAgICAkdGVzdF9zdHJ1Y3QtPntyZWxwYXRofSA9IHJlbGF0aW9uX2ZpbGVwYXRo KCR0ZXN0X3N0cnVjdC0+e2luZGV4X25hbWV9KTsKK30KKworIyBjb3JydXB0IGluZGV4Ciskbm9k ZS0+c3RvcDsKKworZm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0ZXN0cykgeworICAgIHN0cmlu Z19yZXBsYWNlX2Jsb2NrKAorICAgICAgICAkdGVzdF9zdHJ1Y3QtPntyZWxwYXRofSwKKyAgICAg ICAgJHRlc3Rfc3RydWN0LT57ZmluZH0sCisgICAgICAgICR0ZXN0X3N0cnVjdC0+e3JlcGxhY2V9 LAorICAgICAgICAkdGVzdF9zdHJ1Y3QtPntibGtub30KKyAgICApOworfQorCisjIGFzc2VydGlv bnMKKyRub2RlLT5zdGFydDsKKworZm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0ZXN0cykgewor ICAgIG15ICgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKCdwb3N0Z3Jl cycsIHFxKFNFTEVDVCBicmluX2luZGV4X2NoZWNrKCckdGVzdF9zdHJ1Y3QtPntpbmRleF9uYW1l fScsIHRydWUsIHRydWUpKSk7CisgICAgbGlrZSgkc3RkZXJyLCAkdGVzdF9zdHJ1Y3QtPntleHBl Y3RlZH0pOworfQorCisKKyMgSGVscGVycworCisjIFJldHVybnMgdGhlIGZpbGVzeXN0ZW0gcGF0 aCBmb3IgdGhlIG5hbWVkIHJlbGF0aW9uLgorc3ViIHJlbGF0aW9uX2ZpbGVwYXRoIHsKKyAgICBt eSAoJHJlbG5hbWUpID0gQF87CisKKyAgICBteSAkcGdkYXRhID0gJG5vZGUtPmRhdGFfZGlyOwor ICAgIG15ICRyZWwgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgICAgIHFxKFNF TEVDVCBwZ19yZWxhdGlvbl9maWxlcGF0aCgnJHJlbG5hbWUnKSkpOworICAgIGRpZSAicGF0aCBu b3QgZm91bmQgZm9yIHJlbGF0aW9uICRyZWxuYW1lIiB1bmxlc3MgZGVmaW5lZCAkcmVsOworICAg IHJldHVybiAiJHBnZGF0YS8kcmVsIjsKK30KKworc3ViIHN0cmluZ19yZXBsYWNlX2Jsb2NrIHsK KyAgICBteSAoJGZpbGVuYW1lLCAkZmluZCwgJHJlcGxhY2UsICRibGtubykgPSBAXzsKKworICAg IG15ICRmaDsKKyAgICBvcGVuKCRmaCwgJys8JywgJGZpbGVuYW1lKSBvciBCQUlMX09VVCgib3Bl biBmYWlsZWQ6ICQhIik7CisgICAgYmlubW9kZSAkZmg7CisKKyAgICBteSAkb2Zmc2V0ID0gJGJs a25vICogJGJsa3NpemU7CisgICAgbXkgJGJ1ZmZlcjsKKworICAgIHN5c3NlZWsoJGZoLCAkb2Zm c2V0LCAwKSBvciBCQUlMX09VVCgic2VlayBmYWlsZWQ6ICQhIik7CisgICAgc3lzcmVhZCgkZmgs ICRidWZmZXIsICRibGtzaXplKSBvciBCQUlMX09VVCgicmVhZCBmYWlsZWQ6ICQhIik7CisKKyAg ICAkYnVmZmVyID1+IHMvJGZpbmQvJyInIC4gJHJlcGxhY2UgLiAnIicvZ2VlOworCisgICAgc3lz c2VlaygkZmgsICRvZmZzZXQsIDApIG9yIEJBSUxfT1VUKCJzZWVrIGZhaWxlZDogJCEiKTsKKyAg ICBzeXN3cml0ZSgkZmgsICRidWZmZXIpIG9yIEJBSUxfT1VUKCJ3cml0ZSBmYWlsZWQ6ICQhIik7 CisKKyAgICBjbG9zZSgkZmgpIG9yIEJBSUxfT1VUKCJjbG9zZSBmYWlsZWQ6ICQhIik7CisKKyAg ICByZXR1cm47Cit9CisKK3N1YiB3cmFwCit7CisgICAgbXkgJGlucHV0ID0gQF87CisgICAgcmV0 dXJuIHFyL1xRJGlucHV0XEUvCit9CisKK2RvbmVfdGVzdGluZygpOwpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfYnJpbi5jIGIv Y29udHJpYi9hbWNoZWNrL3ZlcmlmeV9icmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmFhMDI2YmZiOGRjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hbWNo ZWNrL3ZlcmlmeV9icmluLmMKQEAgLTAsMCArMSwxMzU5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiB2ZXJpZnlfYnJpbi5jCisgKgkgIEZ1bmN0aW9ucyB0byBjaGVjayBwb3N0Z3Jlc3Fs IGJyaW4gaW5kZXhlcyBmb3IgY29ycnVwdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0y MDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJp Yi9hbWNoZWNrL3ZlcmlmeV9icmluLmMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVk ZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9icmluLmgiCisjaW5jbHVkZSAiYWNj ZXNzL2JyaW5fcGFnZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9icmluX3Jldm1hcC5oIgorI2luY2x1 ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNp bmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIK KyNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNp bmNsdWRlICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ2ZXJpZnlfY29tbW9uLmgiCisKK1BHX0ZV TkNUSU9OX0lORk9fVjEoYnJpbl9pbmRleF9jaGVjayk7CisKK3R5cGVkZWYgc3RydWN0IEJyaW5D aGVja1N0YXRlCit7CisKKwkvKiBDaGVjayBhcmd1bWVudHMgKi8KKworCWJvb2wJCXJlZ3VsYXJw YWdlc2NoZWNrOworCWJvb2wJCWhlYXBhbGxpbmRleGVkOworCUFycmF5VHlwZSAgKmNvbnNpc3Rl bnRfb3Blcl9uYW1lczsKKworCS8qIEJSSU4gY2hlY2sgY29tbW9uIGZpZWxkcyAqLworCisJUmVs YXRpb24JaWR4cmVsOworCVJlbGF0aW9uCWhlYXByZWw7CisJQnJpbkRlc2MgICAqYmRlc2M7CisJ aW50CQkJbmF0dHM7CisJQmxvY2tOdW1iZXIgcGFnZXNQZXJSYW5nZTsKKworCS8qIEluZGV4IHN0 cnVjdHVyZSBjaGVjayBmaWVsZHMgKi8KKworCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGNoZWNrc3Ry YXRlZ3k7CisJQmxvY2tOdW1iZXIgaWR4bmJsb2NrczsKKwlCbG9ja051bWJlciBoZWFwbmJsb2Nr czsKKwlCbG9ja051bWJlciBsYXN0UmV2bWFwUGFnZTsKKwkvKiBDdXJyZW50IHJhbmdlIGJsa25v ICovCisJQmxvY2tOdW1iZXIgcmFuZ2VCbGtubzsKKwkvKiBDdXJyZW50IHJldm1hcCBpdGVtICov CisJQmxvY2tOdW1iZXIgcmV2bWFwQmxrOworCUJ1ZmZlcgkJcmV2bWFwYnVmOworCVBhZ2UJCXJl dm1hcHBhZ2U7CisJdWludDMyCQlyZXZtYXBpZHg7CisJLyogQ3VycmVudCBpbmRleCB0dXBsZSAq LworCUJsb2NrTnVtYmVyIHJlZ3BhZ2VCbGs7CisJQnVmZmVyCQlyZWdwYWdlYnVmOworCVBhZ2UJ CXJlZ3BhZ2U7CisJT2Zmc2V0TnVtYmVyIHJlZ3BhZ2VvZmZzZXQ7CisKKwkvKiBIZWFwIGFsbCBp bmRleGVkIGNoZWNrIGZpZWxkcyAqLworCisJQnJpblJldm1hcCAqcmV2bWFwOworCUJ1ZmZlcgkJ YnVmOworCUZtZ3JJbmZvICAgKmNvbnNpc3RlbnRGbjsKKwkvKiBTY2FuIGtleXMgZm9yIHJlZ3Vs YXIgdmFsdWVzICovCisJU2NhbktleSAgICAqbm9ubnVsbF9zazsKKwkvKiBTY2FuIGtleXMgZm9y IG51bGwgdmFsdWVzICovCisJU2NhbktleSAgICAqaXNudWxsX3NrOworCWRvdWJsZQkJcmFuZ2Vf Y250OworCS8qIGZpcnN0IGJsb2NrIG9mIHRoZSBuZXh0IHJhbmdlICovCisJQmxvY2tOdW1iZXIg bmV4dHJhbmdlQmxrOworCisJLyoKKwkgKiBjaGVja2FibGVfcmFuZ2Ugc2hvd3MgaWYgY3VycmVu dCByYW5nZSBjb3VsZCBiZSBjaGVja2VkIGFuZCBkdHVwCisJICogY29udGFpbnMgdmFsaWQgaW5k ZXggdHVwbGUgZm9yIHRoZSByYW5nZS4gSXQgY291bGQgYmUgZmFsc2UgaWYgdGhlCisJICogY3Vy cmVudCByYW5nZSBpcyBub3Qgc3VtbWFyaXplZCwgb3IgaXQncyBwbGFjZWhvbGRlciwgb3IgaXQn cyBqdXN0IGEKKwkgKiBiZWdpbm5pbmcgb2YgdGhlIGNoZWNrCisJICovCisJYm9vbAkJY2hlY2th YmxlX3JhbmdlOworCUJyaW5NZW1UdXBsZSAqZHR1cDsKKwlNZW1vcnlDb250ZXh0IHJhbmdlQ3R4 OworCU1lbW9yeUNvbnRleHQgaGVhcHR1cGxlQ3R4OworfSBCcmluQ2hlY2tTdGF0ZTsKKworc3Rh dGljIHZvaWQgYnJpbl9jaGVjayhSZWxhdGlvbiBpZHhyZWwsIFJlbGF0aW9uIGhlYXByZWwsIHZv aWQgKmNhbGxiYWNrX3N0YXRlLCBib29sIHJlYWRvbmx5KTsKKworc3RhdGljIHZvaWQgY2hlY2tf YnJpbl9pbmRleF9zdHJ1Y3R1cmUoQnJpbkNoZWNrU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIHZv aWQgY2hlY2tfbWV0YShCcmluQ2hlY2tTdGF0ZSAqc3RhdGUpOworCitzdGF0aWMgdm9pZCBjaGVj a19yZXZtYXAoQnJpbkNoZWNrU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIHZvaWQgY2hlY2tfcmV2 bWFwX2l0ZW0oQnJpbkNoZWNrU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIHZvaWQgY2hlY2tfaW5k ZXhfdHVwbGUoQnJpbkNoZWNrU3RhdGUgKnN0YXRlLCBCcmluVHVwbGUgKnR1cGxlLCBJdGVtSWQg bHApOworCitzdGF0aWMgdm9pZCBjaGVja19yZWd1bGFyX3BhZ2VzKEJyaW5DaGVja1N0YXRlICpz dGF0ZSk7CisKK3N0YXRpYyBib29sIHJldm1hcF9wb2ludHNfdG9faW5kZXhfdHVwbGUoQnJpbkNo ZWNrU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIEl0ZW1JZCBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChC cmluQ2hlY2tTdGF0ZSAqc3RhdGUpOworCitzdGF0aWMgdm9pZCBjaGVja19oZWFwX2FsbF9pbmRl eGVkKEJyaW5DaGVja1N0YXRlICpzdGF0ZSk7CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfbm9ubnVs bF9zY2FuX2tleXMoQnJpbkNoZWNrU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIHZvaWQgYnJpbl9j aGVja19jYWxsYmFjayhSZWxhdGlvbiBpbmRleCwKKwkJCQkJCQkJSXRlbVBvaW50ZXIgdGlkLAor CQkJCQkJCQlEYXR1bSAqdmFsdWVzLAorCQkJCQkJCQlib29sICppc251bGwsCisJCQkJCQkJCWJv b2wgdHVwbGVJc0FsaXZlLAorCQkJCQkJCQl2b2lkICpicnN0YXRlKTsKKworc3RhdGljIHZvaWQg Y2hlY2tfaGVhcF90dXBsZShCcmluQ2hlY2tTdGF0ZSAqc3RhdGUsIGNvbnN0IERhdHVtICp2YWx1 ZXMsIGNvbnN0IGJvb2wgKm51bGxzLCBJdGVtUG9pbnRlciB0aWQpOworCitzdGF0aWMgU2Nhbktl eSBwcmVwYXJlX25vbm51bGxfc2Nhbl9rZXkoY29uc3QgQnJpbkNoZWNrU3RhdGUgKnN0YXRlLCBB dHRyTnVtYmVyIGF0dG5vLCBTdHJpbmcgKm9wbmFtZSk7CisKK3N0YXRpYyBTY2FuS2V5IHByZXBh cmVfaXNudWxsX3NjYW5fa2V5KEF0dHJOdW1iZXIgYXR0bm8pOworCitzdGF0aWMgdm9pZCBicmlu X2NoZWNrX2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpmbXQpOwor CitzdGF0aWMgdm9pZCByZXZtYXBfaXRlbV9lcmVwb3J0KEJyaW5DaGVja1N0YXRlICpzdGF0ZSwg Y29uc3QgY2hhciAqZm10KTsKKworc3RhdGljIHZvaWQgaW5kZXhfdHVwbGVfZXJlcG9ydChCcmlu Q2hlY2tTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCk7CisKK3N0YXRpYyB2b2lkIGluZGV4 X3R1cGxlX29ubHlfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKmZt dCk7CisKK3N0YXRpYyB2b2lkIGhlYXBfYWxsX2luZGV4ZWRfZXJlcG9ydChjb25zdCBCcmluQ2hl Y2tTdGF0ZSAqc3RhdGUsIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLCBjb25zdCBjaGFyICpt ZXNzYWdlKTsKKworRGF0dW0KK2JyaW5faW5kZXhfY2hlY2soUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlPaWQJCQlpbmRyZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJQnJpbkNoZWNrU3RhdGUgKnN0 YXRlID0gcGFsbG9jMChzaXplb2YoQnJpbkNoZWNrU3RhdGUpKTsKKworCXN0YXRlLT5yZWd1bGFy cGFnZXNjaGVjayA9IFBHX0dFVEFSR19CT09MKDEpOworCXN0YXRlLT5oZWFwYWxsaW5kZXhlZCA9 IFBHX0dFVEFSR19CT09MKDIpOworCXN0YXRlLT5jb25zaXN0ZW50X29wZXJfbmFtZXMgPSBQR19H RVRBUkdfQVJSQVlUWVBFX1AoMyk7CisKKwlhbWNoZWNrX2xvY2tfcmVsYXRpb25fYW5kX2NoZWNr KGluZHJlbGlkLAorCQkJCQkJCQkJQlJJTl9BTV9PSUQsCisJCQkJCQkJCQlicmluX2NoZWNrLAor CQkJCQkJCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJc3RhdGUpOworCisJ UEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIE1haW4gY2hlY2sgZnVuY3Rpb24KKyAqLwor c3RhdGljIHZvaWQKK2JyaW5fY2hlY2soUmVsYXRpb24gaWR4cmVsLCBSZWxhdGlvbiBoZWFwcmVs LCB2b2lkICpjYWxsYmFja19zdGF0ZSwgYm9vbCByZWFkb25seSkKK3sKKwlCcmluQ2hlY2tTdGF0 ZSAqc3RhdGUgPSAoQnJpbkNoZWNrU3RhdGUgKikgY2FsbGJhY2tfc3RhdGU7CisKKwkvKiBJbml0 aWFsaXplIGNoZWNrIGNvbW1vbiBmaWVsZHMgKi8KKwlzdGF0ZS0+aWR4cmVsID0gaWR4cmVsOwor CXN0YXRlLT5oZWFwcmVsID0gaGVhcHJlbDsKKwlzdGF0ZS0+YmRlc2MgPSBicmluX2J1aWxkX2Rl c2MoaWR4cmVsKTsKKwlzdGF0ZS0+bmF0dHMgPSBzdGF0ZS0+YmRlc2MtPmJkX3R1cGRlc2MtPm5h dHRzOworCisJLyogRG8gc29tZSBwcmVwYXJhdGlvbnMgYW5kIGNoZWNrcyBmb3IgaGVhcGFsbGlu ZGV4ZWQgKi8KKwlpZiAoc3RhdGUtPmhlYXBhbGxpbmRleGVkKQorCXsKKwkJLyoKKwkJICogQ2hl Y2sgaWYgd2UgYXJlIE9LIHdpdGggaW5kY2hlY2t4bWluLCBhbmQgdW5yZWdpc3RlciBzbmFwc2hv dCBhcyB3ZQorCQkgKiBkb24ndCBuZWVkIGl0IGZ1cnRoZXIKKwkJICovCisJCVNuYXBzaG90CXNu YXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCisJ CWNoZWNrX2luZGNoZWNreG1pbihzdGF0ZS0+aWR4cmVsLCBzbmFwc2hvdCk7CisJCVVucmVnaXN0 ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUgYXJlIHNvbWUgcHJv YmxlbXMgd2l0aCBzY2FuIGtleXMgZ2VuZXJhdGlvbiBvciBvcGVyYXRvcgorCQkgKiBuYW1lIGFy cmF5IGlzIGludmFsaWQgd2Ugd2FudCB0byBmYWlsIGZhc3QuIFNvIGRvIGl0IGhlcmUuCisJCSAq LworCQlwcmVwYXJlX25vbm51bGxfc2Nhbl9rZXlzKHN0YXRlKTsKKwl9CisKKwljaGVja19icmlu X2luZGV4X3N0cnVjdHVyZShzdGF0ZSk7CisKKwlpZiAoc3RhdGUtPmhlYXBhbGxpbmRleGVkKQor CXsKKwkJY2hlY2tfaGVhcF9hbGxfaW5kZXhlZChzdGF0ZSk7CisJfQorCisJYnJpbl9mcmVlX2Rl c2Moc3RhdGUtPmJkZXNjKTsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgaW5kZXggaGFzIGV4cGVj dGVkIHN0cnVjdHVyZQorICoKKyAqICBTb21lIGNoZWNrIGV4cGVjdGF0aW9uczoKKyAqIC0gd2Ug aG9sZCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssIHNvIHJldm1hcCBjb3VsZCBub3QgYmUgZXh0 ZW5kZWQgKGkuZS4gbm8gZXZhY3VhdGlvbikgd2hpbGUgY2hlY2sgYXMgd2VsbCBhcworICogICBh bGwgcmVndWxhciBwYWdlcyBzaG91bGQgc3RheSByZWd1bGFyIGFuZCByYW5nZXMgY291bGQgbm90 IGJlIHN1bW1hcml6ZWQgYW5kIGRlc3VtbWFyaXplZC4KKyAqICAgTmV2ZXJ0aGVsZXNzLCBjb25j dXJyZW50IHVwZGF0ZXMgY291bGQgbGVhZCB0byBuZXcgcmVndWxhciBwYWdlIGFsbG9jYXRpb25z CisgKiAgIGFuZCBtb3Zpbmcgb2YgaW5kZXggdHVwbGVzLgorICogLSBpZiByZXZtYXAgcG9pbnRl ciBpcyB2YWxpZCB0aGVyZSBzaG91bGQgYmUgdmFsaWQgaW5kZXggdHVwbGUgaXQgcG9pbnRzIHRv LgorICogLSB0aGVyZSBhcmUgbm8gb3JwaGFuIGluZGV4IHR1cGxlcyAoaWYgdGhlcmUgaXMgYW4g aW5kZXggdHVwbGUsIHRoZSByZXZtYXAgaXRlbSBwb2ludHMgdG8gdGhpcyB0dXBsZSBhbHNvIG11 c3QgZXhpc3QpCisgKiAtIGl0J3MgcG9zc2libGUgdG8gZW5jb3VudGVyIHBsYWNlaG9sZGVyIHR1 cGxlcyAoYXMgYSByZXN1bHQgb2YgY3Jhc2gpCisgKiAtIGl0J3MgcG9zc2libGUgdG8gZW5jb3Vu dGVyIG5ldyBwYWdlcyBpbnN0ZWFkIG9mIHJlZ3VsYXIgKGFzIGEgcmVzdWx0IG9mIGNyYXNoKQor ICogLSBpdCdzIHBvc3NpYmxlIHRvIGVuY291bnRlciBwYWdlcyB3aXRoIGV2YWN1YXRpb24gYml0 IChhcyBhIHJlc3VsdCBvZiBjcmFzaCkKKyAqCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19icmlu X2luZGV4X3N0cnVjdHVyZShCcmluQ2hlY2tTdGF0ZSAqc3RhdGUpCit7CisJLyogSW5kZXggc3Ry dWN0dXJlIGNoZWNrIGZpZWxkcyBpbml0aWFsaXphdGlvbiAqLworCXN0YXRlLT5jaGVja3N0cmF0 ZWd5ID0gR2V0QWNjZXNzU3RyYXRlZ3koQkFTX0JVTEtSRUFEKTsKKworCWNoZWNrX21ldGEoc3Rh dGUpOworCisJLyogQ2hlY2sgcmV2bWFwIGZpcnN0LCBibG9ja3M6IFsxLCBsYXN0UmV2bWFwUGFn ZV0gKi8KKwljaGVja19yZXZtYXAoc3RhdGUpOworCisJaWYgKHN0YXRlLT5yZWd1bGFycGFnZXNj aGVjaykKKwl7CisJCS8qIENoZWNrIHJlZ3VsYXIgcGFnZXMsIGJsb2NrczogW2xhc3RSZXZtYXBQ YWdlICsgMSwgaWR4bmJsb2Nrc10gKi8KKwkJY2hlY2tfcmVndWxhcl9wYWdlcyhzdGF0ZSk7CisJ fQorCit9CisKKy8qIE1ldGEgcGFnZSBjaGVjayBhbmQgc2F2ZSBzb21lIGRhdGEgZm9yIHRoZSBm dXJ0aGVyIGNoZWNrICovCitzdGF0aWMgdm9pZAorY2hlY2tfbWV0YShCcmluQ2hlY2tTdGF0ZSAq c3RhdGUpCit7CisJQnVmZmVyCQltZXRhYnVmOworCVBhZ2UJCW1ldGFwYWdlOworCUJyaW5NZXRh UGFnZURhdGEgKm1ldGFkYXRhOworCisJLyogTWV0YSBwYWdlIGNoZWNrICovCisJbWV0YWJ1ZiA9 IFJlYWRCdWZmZXJFeHRlbmRlZChzdGF0ZS0+aWR4cmVsLCBNQUlOX0ZPUktOVU0sIEJSSU5fTUVU QVBBR0VfQkxLTk8sIFJCTV9OT1JNQUwsCisJCQkJCQkJCSBzdGF0ZS0+Y2hlY2tzdHJhdGVneSk7 CisJTG9ja0J1ZmZlcihtZXRhYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJbWV0YXBhZ2UgPSBC dWZmZXJHZXRQYWdlKG1ldGFidWYpOworCW1ldGFkYXRhID0gKEJyaW5NZXRhUGFnZURhdGEgKikg UGFnZUdldENvbnRlbnRzKG1ldGFwYWdlKTsKKwlzdGF0ZS0+aWR4bmJsb2NrcyA9IFJlbGF0aW9u R2V0TnVtYmVyT2ZCbG9ja3Moc3RhdGUtPmlkeHJlbCk7CisKKwlpZiAoIUJSSU5fSVNfTUVUQV9Q QUdFKG1ldGFwYWdlKSB8fAorCQltZXRhZGF0YS0+YnJpbk1hZ2ljICE9IEJSSU5fTUVUQV9NQUdJ QyB8fAorCQltZXRhZGF0YS0+YnJpblZlcnNpb24gIT0gQlJJTl9DVVJSRU5UX1ZFUlNJT04gfHwK KwkJbWV0YWRhdGEtPnBhZ2VzUGVyUmFuZ2UgPCAxIHx8IG1ldGFkYXRhLT5wYWdlc1BlclJhbmdl ID4gQlJJTl9NQVhfUEFHRVNfUEVSX1JBTkdFIHx8CisJCW1ldGFkYXRhLT5sYXN0UmV2bWFwUGFn ZSA8PSBCUklOX01FVEFQQUdFX0JMS05PIHx8IG1ldGFkYXRhLT5sYXN0UmV2bWFwUGFnZSA+PSBz dGF0ZS0+aWR4bmJsb2NrcykKKwl7CisJCWJyaW5fY2hlY2tfZXJlcG9ydChzdGF0ZSwgIm1ldGFw YWdlIGlzIGNvcnJ1cHRlZCIpOworCX0KKworCXN0YXRlLT5sYXN0UmV2bWFwUGFnZSA9IG1ldGFk YXRhLT5sYXN0UmV2bWFwUGFnZTsKKwlzdGF0ZS0+cGFnZXNQZXJSYW5nZSA9IG1ldGFkYXRhLT5w YWdlc1BlclJhbmdlOworCVVubG9ja1JlbGVhc2VCdWZmZXIobWV0YWJ1Zik7Cit9CisKKy8qCisg KiBUaGlzIGlzIGEgbWFpbiBwYXJ0IG9mIHRoZSBicmluIGluZGV4IHN0cnVjdHVyZSBjaGVjay4K KyAqIFdlIHdhbGsgcmV2bWFwIHBhZ2UgYnkgcGFnZSBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGNo ZWNrIGV2ZXJ5IHJldm1hcCBpdGVtIGFuZAorICogZXZlcnkgaW5kZXggdHVwbGUgcG9pbnRlZCBm cm9tIHRoZSByZXZtYXAuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19yZXZtYXAoQnJpbkNoZWNr U3RhdGUgKnN0YXRlKQoreworCVJlbGF0aW9uCWlkeHJlbCA9IHN0YXRlLT5pZHhyZWw7CisJQmxv Y2tOdW1iZXIgbGFzdFJldm1hcFBhZ2UgPSBzdGF0ZS0+bGFzdFJldm1hcFBhZ2U7CisJUmVhZFN0 cmVhbSAqc3RyZWFtOworCWludAkJCXN0cmVhbV9mbGFnczsKKwlSZWFkU3RyZWFtQmxvY2tOdW1i ZXJDQiBzdHJlYW1fY2I7CisJQmxvY2tSYW5nZVJlYWRTdHJlYW1Qcml2YXRlIHN0cmVhbV9kYXRh OworCisJc3RhdGUtPnJhbmdlQmxrbm8gPSAwOworCXN0YXRlLT5yZWdwYWdlYnVmID0gSW52YWxp ZEJ1ZmZlcjsKKwlzdGF0ZS0+aGVhcG5ibG9ja3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tz KHN0YXRlLT5oZWFwcmVsKTsKKworCS8qCisJICogUHJlcGFyZSBzdHJlYW0gZGF0YSBmb3IgcmV2 bWFwIHdhbGsuIEl0IGlzIHNhZmUgdG8gdXNlIGJhdGNobW9kZSBhcworCSAqIGJsb2NrX3Jhbmdl X3JlYWRfc3RyZWFtX2NiIHRha2VzIG5vIGxvY2tzLgorCSAqLworCXN0cmVhbV9mbGFncyA9IFJF QURfU1RSRUFNX1NFUVVFTlRJQUwgfCBSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJTkc7CisJLyogRmly c3QgcmV2bWFwIHBhZ2UgaXMgcmlnaHQgYWZ0ZXIgbWV0YSBwYWdlICovCisJc3RyZWFtX2RhdGEu Y3VycmVudF9ibG9ja251bSA9IEJSSU5fTUVUQVBBR0VfQkxLTk8gKyAxOworCXN0cmVhbV9kYXRh Lmxhc3RfZXhjbHVzaXZlID0gbGFzdFJldm1hcFBhZ2UgKyAxOworCisJc3RyZWFtX2NiID0gYmxv Y2tfcmFuZ2VfcmVhZF9zdHJlYW1fY2I7CisJc3RyZWFtID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVs YXRpb24oc3RyZWFtX2ZsYWdzLAorCQkJCQkJCQkJCUdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxL UkVBRCksCisJCQkJCQkJCQkJaWR4cmVsLAorCQkJCQkJCQkJCU1BSU5fRk9SS05VTSwKKwkJCQkJ CQkJCQlzdHJlYW1fY2IsCisJCQkJCQkJCQkJJnN0cmVhbV9kYXRhLAorCQkJCQkJCQkJCTApOwor CisJLyogV2FsayBlYWNoIHJldm1hcCBwYWdlICovCisJd2hpbGUgKChzdGF0ZS0+cmV2bWFwYnVm ID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxMKSkgIT0gSW52YWxpZEJ1ZmZl cikKKwl7CisJCXN0YXRlLT5yZXZtYXBCbGsgPSBCdWZmZXJHZXRCbG9ja051bWJlcihzdGF0ZS0+ cmV2bWFwYnVmKTsKKwkJTG9ja0J1ZmZlcihzdGF0ZS0+cmV2bWFwYnVmLCBCVUZGRVJfTE9DS19T SEFSRSk7CisJCXN0YXRlLT5yZXZtYXBwYWdlID0gQnVmZmVyR2V0UGFnZShzdGF0ZS0+cmV2bWFw YnVmKTsKKworCQkvKgorCQkgKiBQYWdlcyB3aXRoIGJsb2NrIG51bWJlcnMgaW4gWzEsIGxhc3RS ZXZtYXBQYWdlXSBzaG91bGQgYmUgcmV2bWFwCisJCSAqIHBhZ2VzCisJCSAqLworCQlpZiAoIUJS SU5fSVNfUkVWTUFQX1BBR0Uoc3RhdGUtPnJldm1hcHBhZ2UpKQorCQl7CisJCQlicmluX2NoZWNr X2VyZXBvcnQoc3RhdGUsIHBzcHJpbnRmKCJyZXZtYXAgcGFnZSBpcyBleHBlY3RlZCBhdCBibG9j ayAldSwgbGFzdCByZXZtYXAgcGFnZSAldSIsCisJCQkJCQkJCQkJCSAgIHN0YXRlLT5yZXZtYXBC bGssCisJCQkJCQkJCQkJCSAgIGxhc3RSZXZtYXBQYWdlKSk7CisJCX0KKwkJTG9ja0J1ZmZlcihz dGF0ZS0+cmV2bWFwYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisJCS8qIFdhbGsgYW5kIGNo ZWNrIGFsbCBicmluIHR1cGxlcyBmcm9tIHRoZSBjdXJyZW50IHJldm1hcCBwYWdlICovCisJCXN0 YXRlLT5yZXZtYXBpZHggPSAwOworCQl3aGlsZSAoc3RhdGUtPnJldm1hcGlkeCA8IFJFVk1BUF9Q QUdFX01BWElURU1TKQorCQl7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCQkvKiBD aGVjayByZXZtYXAgaXRlbSAqLworCQkJY2hlY2tfcmV2bWFwX2l0ZW0oc3RhdGUpOworCisJCQlz dGF0ZS0+cmFuZ2VCbGtubyArPSBzdGF0ZS0+cGFnZXNQZXJSYW5nZTsKKwkJCXN0YXRlLT5yZXZt YXBpZHgrKzsKKwkJfQorCisJCWVsb2coREVCVUczLCAiQ29tcGxldGUgcmV2bWFwIHBhZ2UgY2hl Y2s6ICVkIiwgc3RhdGUtPnJldm1hcEJsayk7CisKKwkJUmVsZWFzZUJ1ZmZlcihzdGF0ZS0+cmV2 bWFwYnVmKTsKKwl9CisKKwlyZWFkX3N0cmVhbV9lbmQoc3RyZWFtKTsKKworCWlmIChCdWZmZXJJ c1ZhbGlkKHN0YXRlLT5yZWdwYWdlYnVmKSkKKwl7CisJCVJlbGVhc2VCdWZmZXIoc3RhdGUtPnJl Z3BhZ2VidWYpOworCX0KK30KKworLyoKKyAqIENoZWNrIHJldm1hcCBpdGVtLgorICoKKyAqIFdl IGNoZWNrIHJldm1hcCBpdGVtIHBvaW50ZXIgaXRzZWxmIGFuZCBpZiBpdCBpcyBvayB3ZSBjaGVj ayB0aGUgaW5kZXggdHVwbGUgaXQgcG9pbnRzIHRvLgorICoKKyAqIFRvIGF2b2lkIGRlYWRsb2Nr IHdlIG5lZWQgdG8gdW5sb2NrIHJldm1hcCBwYWdlIGJlZm9yZSBsb2NraW5nIHJlZ3VsYXIgcGFn ZSwKKyAqIHNvIHdoZW4gd2UgZ2V0IHRoZSBsb2NrIG9uIHRoZSByZWd1bGFyIHBhZ2Ugb3VyIGlu ZGV4IHR1cGxlIHBvaW50ZXIgbWF5IG5vIGxvbmdlciBiZSByZWxldmFudC4KKyAqIFNvIGZvciBz b21lIGNoZWNrcyBiZWZvcmUgcmVwb3J0aW5nIGFuIGVycm9yIHdlIG5lZWQgdG8gbWFrZSBzdXJl IHRoYXQgb3VyIHBvaW50ZXIgaXMgc3RpbGwgcmVsZXZhbnQgYW5kIGlmIGl0J3Mgbm90IC0gcmV0 cnkuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19yZXZtYXBfaXRlbShCcmluQ2hlY2tTdGF0ZSAq c3RhdGUpCit7CisJSXRlbVBvaW50ZXJEYXRhICpyZXZtYXB0aWRzOworCVJldm1hcENvbnRlbnRz ICpjb250ZW50czsKKwlJdGVtUG9pbnRlckRhdGEgKmlwdHI7CisJSXRlbUlkCQlscDsKKwlCcmlu VHVwbGUgICp0dXA7CisJUmVsYXRpb24JaWR4cmVsID0gc3RhdGUtPmlkeHJlbDsKKworCS8qIExv b3AgdG8gcmV0cnkgcmV2bWFwIGl0ZW0gY2hlY2sgaWYgdGhlcmUgd2FzIGEgY29uY3VycmVudCB1 cGRhdGUuICovCisJZm9yICg7OykKKwl7CisJCUxvY2tCdWZmZXIoc3RhdGUtPnJldm1hcGJ1Ziwg QlVGRkVSX0xPQ0tfU0hBUkUpOworCisJCWNvbnRlbnRzID0gKFJldm1hcENvbnRlbnRzICopIFBh Z2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKHN0YXRlLT5yZXZtYXBidWYpKTsKKwkJcmV2bWFw dGlkcyA9IGNvbnRlbnRzLT5ybV90aWRzOworCQkvKiBQb2ludGVyIGZvciB0aGUgcmFuZ2Ugd2l0 aCBzdGFydCBhdCBzdGF0ZS0+cmFuZ2VCbGtubyAqLworCQlpcHRyID0gcmV2bWFwdGlkcyArIHN0 YXRlLT5yZXZtYXBpZHg7CisKKwkJLyogQXQgZmlyc3QgY2hlY2sgcmV2bWFwIGl0ZW0gcG9pbnRl ciAqLworCisJCS8qCisJCSAqIFR1cGxlIHBvaW50ZXIgaXMgaW52YWxpZCBtZWFucyByYW5nZSBp c24ndCBzdW1tYXJpemVkLCBqdXN0IG1vdmUKKwkJICogZnVydGhlcgorCQkgKi8KKwkJaWYgKCFJ dGVtUG9pbnRlcklzVmFsaWQoaXB0cikpCisJCXsKKwkJCWVsb2coREVCVUczLCAiUmFuZ2UgJXUg aXMgbm90IHN1bW1hcml6ZWQiLCBzdGF0ZS0+cmFuZ2VCbGtubyk7CisJCQlMb2NrQnVmZmVyKHN0 YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCQlicmVhazsKKwkJfQorCisJ CS8qCisJCSAqIFBvaW50ZXIgaXMgdmFsaWQsIGl0IHNob3VsZCBwb2ludHMgdG8gaW5kZXggdHVw bGUgZm9yIHRoZSByYW5nZQorCQkgKiB3aXRoIGJsa25vIHJhbmdlQmxrbm8uIFJlbWVtYmVyIGl0 IGFuZCB1bmxvY2sgcmV2bWFwIHBhZ2UgdG8gYXZvaWQKKwkJICogZGVhZGxvY2sKKwkJICovCisJ CXN0YXRlLT5yZWdwYWdlQmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcihpcHRyKTsKKwkJ c3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcihpcHRyKTsK KworCQlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisK KwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIHJlZ3BhZ2UgYmxvY2sgbnVtYmVyIGlzIGdyZWF0ZXIg dGhhbiB0aGUgcmVsYXRpb24KKwkJICogc2l6ZS4gVG8gYXZvaWQgZmV0Y2hpbmcgdGhlIG51bWJl ciBvZiBibG9ja3MgZm9yIGVhY2ggdHVwbGUsIHVzZQorCQkgKiBjYWNoZWQgdmFsdWUgZmlyc3QK KwkJICovCisJCWlmIChzdGF0ZS0+cmVncGFnZUJsayA+PSBzdGF0ZS0+aWR4bmJsb2NrcykKKwkJ eworCQkJLyoKKwkJCSAqIFJlZ3VsYXIgcGFnZXMgbWF5IGhhdmUgYmVlbiBhZGRlZCwgc28gcmVm cmVzaCBpZHhuYmxvY2tzIGFuZAorCQkJICogcmVjaGVjaworCQkJICovCisJCQlzdGF0ZS0+aWR4 bmJsb2NrcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3MoaWR4cmVsKTsKKwkJCWlmIChzdGF0 ZS0+cmVncGFnZUJsayA+PSBzdGF0ZS0+aWR4bmJsb2NrcykKKwkJCXsKKwkJCQlyZXZtYXBfaXRl bV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCQkJcHNwcmludGYoInJldm1hcCBpdGVtIHBvaW50cyB0 byBhIG5vbiBleGlzdGluZyBibG9jayAldSwgaW5kZXggbWF4IGJsb2NrICV1IiwKKwkJCQkJCQkJ CQkJIHN0YXRlLT5yZWdwYWdlQmxrLAorCQkJCQkJCQkJCQkgc3RhdGUtPmlkeG5ibG9ja3MgLSAx KSk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBUbyBhdm9pZCBzb21lIHBpbi91bnBpbiBjeWNs ZXMgd2UgY2FjaGUgbGFzdCB1c2VkIHJlZ3VsYXIgcGFnZS4KKwkJICogQ2hlY2sgaWYgd2UgbmVl ZCBkaWZmZXJlbnQgcmVndWxhciBwYWdlIGFuZCBmZXRjaCBpdC4KKwkJICovCisJCWlmICghQnVm ZmVySXNWYWxpZChzdGF0ZS0+cmVncGFnZWJ1ZikgfHwgQnVmZmVyR2V0QmxvY2tOdW1iZXIoc3Rh dGUtPnJlZ3BhZ2VidWYpICE9IHN0YXRlLT5yZWdwYWdlQmxrKQorCQl7CisJCQlpZiAoQnVmZmVy SXNWYWxpZChzdGF0ZS0+cmVncGFnZWJ1ZikpCisJCQl7CisJCQkJUmVsZWFzZUJ1ZmZlcihzdGF0 ZS0+cmVncGFnZWJ1Zik7CisJCQl9CisJCQlzdGF0ZS0+cmVncGFnZWJ1ZiA9IFJlYWRCdWZmZXJF eHRlbmRlZChpZHhyZWwsIE1BSU5fRk9SS05VTSwgc3RhdGUtPnJlZ3BhZ2VCbGssIFJCTV9OT1JN QUwsCisJCQkJCQkJCQkJCQkgICBzdGF0ZS0+Y2hlY2tzdHJhdGVneSk7CisJCX0KKworCQlMb2Nr QnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCXN0YXRlLT5y ZWdwYWdlID0gQnVmZmVyR2V0UGFnZShzdGF0ZS0+cmVncGFnZWJ1Zik7CisKKwkJLyogUmV2bWFw IHNob3VsZCBhbHdheXMgcG9pbnQgdG8gYSByZWd1bGFyIHBhZ2UgKi8KKwkJaWYgKCFCUklOX0lT X1JFR1VMQVJfUEFHRShzdGF0ZS0+cmVncGFnZSkpCisJCXsKKwkJCXJldm1hcF9pdGVtX2VyZXBv cnQoc3RhdGUsCisJCQkJCQkJCXBzcHJpbnRmKCJyZXZtYXAgaXRlbSBwb2ludHMgdG8gdGhlIHBh Z2Ugd2hpY2ggaXMgbm90IHJlZ3VsYXIgKGJsa25vOiAldSkiLAorCQkJCQkJCQkJCSBzdGF0ZS0+ cmVncGFnZUJsaykpOworCisJCX0KKworCQkvKiBDaGVjayBpdGVtIG9mZnNldCBpcyB2YWxpZCAq LworCQlpZiAoc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPiBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHN0 YXRlLT5yZWdwYWdlKSkKKwkJeworCisJCQkvKiBJZiBjb25jdXJyZW50IHVwZGF0ZSBtb3ZlZCBv dXIgdHVwbGUgd2UgbmVlZCB0byByZXRyeSAqLworCQkJaWYgKCFyZXZtYXBfcG9pbnRzX3RvX2lu ZGV4X3R1cGxlKHN0YXRlKSkKKwkJCXsKKwkJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVm LCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlyZXZtYXBf aXRlbV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCQlwc3ByaW50ZigicmV2bWFwIGl0ZW0gb2Zmc2V0 IG51bWJlciAldSBpcyBncmVhdGVyIHRoYW4gcmVndWxhciBwYWdlICV1IG1heCBvZmZzZXQgJXUi LAorCQkJCQkJCQkJCSBzdGF0ZS0+cmVncGFnZW9mZnNldCwKKwkJCQkJCQkJCQkgc3RhdGUtPnJl Z3BhZ2VCbGssCisJCQkJCQkJCQkJIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIoc3RhdGUtPnJlZ3Bh Z2UpKSk7CisJCX0KKworCQllbG9nKERFQlVHMywgIlByb2Nlc3MgcmFuZ2U6ICV1LCBpcHRyOiAo JXUsJXUpIiwgc3RhdGUtPnJhbmdlQmxrbm8sIHN0YXRlLT5yZWdwYWdlQmxrLCBzdGF0ZS0+cmVn cGFnZW9mZnNldCk7CisKKwkJLyoKKwkJICogUmV2bWFwIHBvaW50ZXIgaXMgT0suIEl0IHBvaW50 cyB0byBleGlzdGluZyByZWd1bGFyIHBhZ2UsIG9mZnNldAorCQkgKiBhbHNvIGlzIG9rLiBMZXQn cyBjaGVjayBpbmRleCB0dXBsZSBpdCBwb2ludHMgdG8uCisJCSAqLworCisJCWxwID0gUGFnZUdl dEl0ZW1JZENhcmVmdWwoc3RhdGUpOworCisJCS8qIFJldm1hcCBzaG91bGQgcG9pbnQgdG8gTk9S TUFMIHR1cGxlcyBvbmx5ICovCisJCWlmICghSXRlbUlkSXNVc2VkKGxwKSkKKwkJeworCisJCQkv KiBJZiBjb25jdXJyZW50IHVwZGF0ZSBtb3ZlZCBvdXIgdHVwbGUgd2UgbmVlZCB0byByZXRyeSAq LworCQkJaWYgKCFyZXZtYXBfcG9pbnRzX3RvX2luZGV4X3R1cGxlKHN0YXRlKSkKKwkJCXsKKwkJ CQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJ CWNvbnRpbnVlOworCQkJfQorCisJCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLCAicmV2bWFw IGl0ZW0gcG9pbnRzIHRvIHVudXNlZCBpbmRleCB0dXBsZSIpOworCQl9CisKKwkJdHVwID0gKEJy aW5UdXBsZSAqKSBQYWdlR2V0SXRlbShzdGF0ZS0+cmVncGFnZSwgbHApOworCisJCS8qIENoZWNr IGlmIHJhbmdlIGJsb2NrIG51bWJlciBpcyBhcyBleHBlY3RlZCAqLworCQlpZiAodHVwLT5idF9i bGtubyAhPSBzdGF0ZS0+cmFuZ2VCbGtubykKKwkJeworCisJCQkvKiBJZiBjb25jdXJyZW50IHVw ZGF0ZSBtb3ZlZCBvdXIgdHVwbGUgd2UgbmVlZCB0byByZXRyeSAqLworCQkJaWYgKCFyZXZtYXBf cG9pbnRzX3RvX2luZGV4X3R1cGxlKHN0YXRlKSkKKwkJCXsKKwkJCQlMb2NrQnVmZmVyKHN0YXRl LT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJCWNvbnRpbnVlOworCQkJfQor CisJCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLCBwc3ByaW50ZigiaW5kZXggdHVwbGUgaGFz IGludmFsaWQgYmxrbm8gJXUiLCB0dXAtPmJ0X2Jsa25vKSk7CisJCX0KKworCQkvKgorCQkgKiBJ ZiB0aGUgcmFuZ2UgaXMgYmV5b25kIHRoZSB0YWJsZSBzaXplIC0gdGhlIHJhbmdlIG11c3QgYmUg ZW1wdHkuCisJCSAqIEl0J3MgdmFsaWQgc2l0dWF0aW9uIGZvciBlbXB0eSB0YWJsZSBub3cuCisJ CSAqLworCQlpZiAoc3RhdGUtPnJhbmdlQmxrbm8gPj0gc3RhdGUtPmhlYXBuYmxvY2tzKQorCQl7 CisJCQlpZiAoIUJyaW5UdXBsZUlzRW1wdHlSYW5nZSh0dXApKQorCQkJeworCQkJCWluZGV4X3R1 cGxlX2VyZXBvcnQoc3RhdGUsCisJCQkJCQkJCQlwc3ByaW50ZigidGhlIHJhbmdlIGlzIGJleW9u ZCB0aGUgdGFibGUgc2l6ZSwgIgorCQkJCQkJCQkJCQkgImJ1dCBpcyBub3QgbWFya2VkIGFzIGVt cHR5LCB0YWJsZSBzaXplOiAldSBibG9ja3MiLAorCQkJCQkJCQkJCQkgc3RhdGUtPmhlYXBuYmxv Y2tzKSk7CisJCQl9CisJCX0KKworCQkvKiBDaGVjayBpbmRleCB0dXBsZSBpdHNlbGYgKi8KKwkJ Y2hlY2tfaW5kZXhfdHVwbGUoc3RhdGUsIHR1cCwgbHApOworCisJCUxvY2tCdWZmZXIoc3RhdGUt PnJlZ3BhZ2VidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCWJyZWFrOworCX0KK30KKworLyoK KyAqIENoZWNrIHRoYXQgaW5kZXggdHVwbGUgaGFzIGV4cGVjdGVkIHN0cnVjdHVyZS4KKyAqCisg KiBUaGlzIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIGxvZ2ljIHBlcmZvcm1lZCBieSBicmluX2RlZm9y bV90dXBsZSgpLgorICogQWZ0ZXIgdGhpcyBjaGVjayBpcyBjb21wbGV0ZSB3ZSBhcmUgc3VyZSB0 aGF0IGJyaW5fZGVmb3JtX3R1cGxlIGNhbiBwcm9jZXNzIGl0LgorICoKKyAqIEluIGNhc2Ugb2Yg ZW1wdHkgcmFuZ2UgY2hlY2sgdGhhdCBmb3IgYWxsIGF0dHJpYnV0ZXMgYWxsbnVsbHMgYXJlIHRy dWUsIGhhc251bGxzIGFyZSBmYWxzZSBhbmQKKyAqIHRoZXJlIGlzIG5vIGRhdGEuIEFsbCBjb3Jl IG9wY2xhc3NlcyBleHBlY3QgYWxsbnVsbHMgaXMgdHJ1ZSBmb3IgZW1wdHkgcmFuZ2UuCisgKi8K K3N0YXRpYyB2b2lkCitjaGVja19pbmRleF90dXBsZShCcmluQ2hlY2tTdGF0ZSAqc3RhdGUsIEJy aW5UdXBsZSAqdHVwbGUsIEl0ZW1JZCBscCkKK3sKKworCWNoYXIJICAgKnRwOwkJCQkvKiB0dXBs ZSBkYXRhICovCisJdWludDE2CQlvZmY7CisJdWludDgJICAgKm51bGxiaXRzOworCVR1cGxlRGVz YwlkaXNrdGRlc2M7CisJaW50CQkJc3RvcmVkOworCWJvb2wJCWVtcHR5X3JhbmdlID0gQnJpblR1 cGxlSXNFbXB0eVJhbmdlKHR1cGxlKTsKKwlib29sCQloYXNudWxsYml0bWFwID0gQnJpblR1cGxl SGFzTnVsbHModHVwbGUpOworCXVpbnQ4CQlob2ZmID0gQnJpblR1cGxlRGF0YU9mZnNldCh0dXBs ZSk7CisJdWludDE2CQl0dXBsZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOworCisJLyogQ2hlY2sg dGhhdCBoZWFkZXIgbGVuZ3RoIGlzIG5vdCBncmVhdGVyIHRoYW4gdHVwbGUgbGVuZ3RoICovCisJ aWYgKGhvZmYgPiB0dXBsZW4pCisJeworCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLCBwc3By aW50ZigiaW5kZXggdHVwbGUgaGVhZGVyIGxlbmd0aCAldSBpcyBncmVhdGVyIHRoYW4gdHVwbGUg bGVuICV1IiwgaG9mZiwgdHVwbGVuKSk7CisJfQorCisJLyogSWYgdHVwbGUgaGFzIG51bGwgYml0 bWFwIC0gaW5pdGlhbGl6ZSBpdCAqLworCWlmIChoYXNudWxsYml0bWFwKQorCXsKKwkJbnVsbGJp dHMgPSAodWludDggKikgKChjaGFyICopIHR1cGxlICsgU2l6ZU9mQnJpblR1cGxlKTsKKwl9CisJ ZWxzZQorCXsKKwkJbnVsbGJpdHMgPSBOVUxMOworCX0KKworCS8qIEVtcHR5IHJhbmdlIGluZGV4 IHR1cGxlIGNoZWNrcyAqLworCWlmIChlbXB0eV9yYW5nZSkKKwl7CisJCS8qIEVtcHR5IHJhbmdl IHR1cGxlIHNob3VsZCBoYXZlIG51bGwgYml0bWFwICovCisJCWlmICghaGFzbnVsbGJpdG1hcCkK KwkJeworCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwgImVtcHR5IHJhbmdlIGluZGV4IHR1 cGxlIGRvZXNuJ3QgaGF2ZSBudWxsIGJpdG1hcCIpOworCQl9CisKKwkJQXNzZXJ0KG51bGxiaXRz ICE9IE5VTEwpOworCisJCS8qIENoZWNrIGV2ZXJ5IGF0dHJpYnV0ZSBoYXMgYWxsbnVsbHMgaXMg dHJ1ZSBhbmQgaGFzbnVsbHMgaXMgZmFsc2UgKi8KKwkJZm9yIChpbnQgYXR0aW5kZXggPSAwOyBh dHRpbmRleCA8IHN0YXRlLT5uYXR0czsgKythdHRpbmRleCkKKwkJeworCisJCQkvKiBBdHRyaWJ1 dGUgYWxsbnVsbHMgc2hvdWxkIGJlIHRydWUgZm9yIGVtcHR5IHJhbmdlICovCisJCQlpZiAoYXR0 X2lzbnVsbChhdHRpbmRleCwgbnVsbGJpdHMpKQorCQkJeworCQkJCWluZGV4X3R1cGxlX2VyZXBv cnQoc3RhdGUsCisJCQkJCQkJCQlwc3ByaW50ZigiZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgYXR0 cmlidXRlICVkIHdpdGggYWxsbnVsbHMgaXMgZmFsc2UiLAorCQkJCQkJCQkJCQkgYXR0aW5kZXgp KTsKKwkJCX0KKworCQkJLyogQXR0cmlidXRlIGhhc251bGxzIHNob3VsZCBiZSBmYWxzZSBmb3Ig ZW1wdHkgcmFuZ2UgKi8KKwkJCWlmICghYXR0X2lzbnVsbChzdGF0ZS0+bmF0dHMgKyBhdHRpbmRl eCwgbnVsbGJpdHMpKQorCQkJeworCQkJCWluZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUsCisJCQkJ CQkJCQlwc3ByaW50ZigiZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgYXR0cmlidXRlICVkIHdpdGgg aGFzbnVsbHMgaXMgdHJ1ZSIsCisJCQkJCQkJCQkJCSBhdHRpbmRleCkpOworCQkJfQorCQl9CisK KwkJLyogV2UgYXJlIGRvbmUgd2l0aCBlbXB0eSByYW5nZSB0dXBsZSAqLworCQlyZXR1cm47CisJ fQorCisJLyoKKwkgKiBSYW5nZSBpcyBtYXJrZWQgYXMgbm90IGVtcHR5IHNvIHdlIGNhbiBoYXZl IHNvbWUgZGF0YSBpbiB0aGUgdHVwbGUuCisJICogV2FsayBhbGwgYXR0cmlidXRlcyBhbmQgY2hl Y2tzIHRoYXQgYWxsIHN0b3JlZCB2YWx1ZXMgZml0IGludG8gdGhlCisJICogdHVwbGUKKwkgKi8K KworCXRwID0gKGNoYXIgKikgdHVwbGUgKyBCcmluVHVwbGVEYXRhT2Zmc2V0KHR1cGxlKTsKKwlz dG9yZWQgPSAwOworCW9mZiA9IDA7CisKKwlkaXNrdGRlc2MgPSBicmluX3R1cGxlX3R1cGRlc2Mo c3RhdGUtPmJkZXNjKTsKKworCWZvciAoaW50IGF0dGluZGV4ID0gMDsgYXR0aW5kZXggPCBzdGF0 ZS0+bmF0dHM7ICsrYXR0aW5kZXgpCisJeworCQlCcmluT3BjSW5mbyAqb3BjbGFzcyA9IHN0YXRl LT5iZGVzYy0+YmRfaW5mb1thdHRpbmRleF07CisKKwkJLyoKKwkJICogaWYgYWxsbnVsbHMgaXMg c2V0IHdlIGhhdmUgbm8gZGF0YSBmb3IgdGhpcyBhdHRyaWJ1dGUsIG1vdmUgdG8gdGhlCisJCSAq IG5leHQKKwkJICovCisJCWlmIChoYXNudWxsYml0bWFwICYmICFhdHRfaXNudWxsKGF0dGluZGV4 LCBudWxsYml0cykpCisJCXsKKwkJCXN0b3JlZCArPSBvcGNsYXNzLT5vaV9uc3RvcmVkOworCQkJ Y29udGludWU7CisJCX0KKworCQkvKiBXYWxrIGFsbCBzdG9yZWQgdmFsdWVzIGZvciB0aGUgY3Vy cmVudCBhdHRyaWJ1dGUgKi8KKwkJZm9yIChpbnQgZGF0dW1ubyA9IDA7IGRhdHVtbm8gPCBvcGNs YXNzLT5vaV9uc3RvcmVkOyBkYXR1bW5vKyspCisJCXsKKwkJCUNvbXBhY3RBdHRyaWJ1dGUgKnRo aXNhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cihkaXNrdGRlc2MsIHN0b3JlZCk7CisKKwkJCWlm ICh0aGlzYXR0LT5hdHRsZW4gPT0gLTEpCisJCQl7CisJCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxp Z25ieShvZmYsCisJCQkJCQkJCQkJICB0aGlzYXR0LT5hdHRhbGlnbmJ5LAorCQkJCQkJCQkJCSAg LTEsCisJCQkJCQkJCQkJICB0cCArIG9mZik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJb2Zm ID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIHRoaXNhdHQtPmF0dGFsaWduYnkpOworCQkJfQor CisJCQkvKiBDaGVjayB0aGF0IHdlIGFyZSBzdGlsbCBpbiB0aGUgdHVwbGUgKi8KKwkJCWlmICho b2ZmICsgb2ZmID4gdHVwbGVuKQorCQkJeworCQkJCWluZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUs CisJCQkJCQkJCQlwc3ByaW50ZigiYXR0cmlidXRlICV1IHN0b3JlZCB2YWx1ZSAldSB3aXRoIGxl bmd0aCAlZCAiCisJCQkJCQkJCQkJCSAic3RhcnRzIGF0IG9mZnNldCAldSBiZXlvbmQgdG90YWwg dHVwbGUgbGVuZ3RoICV1IiwKKwkJCQkJCQkJCQkJIGF0dGluZGV4LCBkYXR1bW5vLCB0aGlzYXR0 LT5hdHRsZW4sIG9mZiwgdHVwbGVuKSk7CisJCQl9CisKKwkJCW9mZiA9IGF0dF9hZGRsZW5ndGhf cG9pbnRlcihvZmYsIHRoaXNhdHQtPmF0dGxlbiwgdHAgKyBvZmYpOworCisJCQkvKiBDaGVjayB0 aGF0IHdlIGFyZSBzdGlsbCBpbiB0aGUgdHVwbGUgKi8KKwkJCWlmIChob2ZmICsgb2ZmID4gdHVw bGVuKQorCQkJeworCQkJCWluZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUsCisJCQkJCQkJCQlwc3By aW50ZigiYXR0cmlidXRlICV1IHN0b3JlZCB2YWx1ZSAldSB3aXRoIGxlbmd0aCAlZCAiCisJCQkJ CQkJCQkJCSAiZW5kcyBhdCBvZmZzZXQgJXUgYmV5b25kIHRvdGFsIHR1cGxlIGxlbmd0aCAldSIs CisJCQkJCQkJCQkJCSBhdHRpbmRleCwgZGF0dW1ubywgdGhpc2F0dC0+YXR0bGVuLCBvZmYsIHR1 cGxlbikpOworCQkJfQorCQkJc3RvcmVkKys7CisJCX0KKworCX0KKworfQorCisvKgorICogQXQg dGhlIG1vbWVudCB3ZSBzaG91bGQgaGF2ZSBiZWVuIGFscmVhZHkgY2hlY2sgdGhhdCBldmVyeSBp bmRleAorICogdHVwbGUgaW4gdGhlIHJlZ3VsYXIgcGFnZXMgaGFzIHZhbGlkIHN0cnVjdHVyZSBh bmQgcmFuZ2UgYmxrbm8KKyAqIChiZWNhdXNlIGV2ZXJ5IG5vcm1hbCBpbmRleCB0dXBsZSBtdXN0 IGhhdmUgcG9pbnRlciBpbiB0aGUgcmV2bWFwIGFuZAorICogd2UgZm9sbG93ZWQgZXZlcnkgc3Vj aCBwb2ludGVyIGluIGNoZWNrX3Jldm1hcCkuIFNvIGhlcmUgd2UganVzdCB3YW50CisgKiB0byBk byBzb21lIGFkZGl0aW9uYWwgY2hlY2tzIHRvIGJlIHN1cmUgdGhhdCB0aGVyZSBpcyBub3RoaW5n IHdyb25nCisgKiB3aXRoIHRoZSByZWd1bGFyIHBhZ2VzIFtsYXN0UmV2bWFwUGFnZSArIDEsIGlu ZGV4bmJsb2Nrc106CisgKiAgIC0gdGhlcmUgaXMgYSBwb2ludGVyIGluIHJldm1hcCB0byBlYWNo IE5PUk1BTCBpbmRleCB0dXBsZQorICogICAgIChubyBvcnBoYW5zIGluZGV4IHR1cGxlcykKKyAq ICAgLSBhbGwgcGFnZXMgaGF2ZSBleHBlY3RlZCB0eXBlIChSRUdVTEFSKS4gV2UgY2FuIGVuY291 bnRlciBuZXcgcGFnZXMgYXMKKyAqICAgICByZXN1bHQgb2YgY3Jhc2gsIHNvIHdlIGp1c3Qgc2tp cCBzdWNoIHBhZ2VzLgorICovCitzdGF0aWMgdm9pZAorY2hlY2tfcmVndWxhcl9wYWdlcyhCcmlu Q2hlY2tTdGF0ZSAqc3RhdGUpCit7CisJUmVhZFN0cmVhbSAqc3RyZWFtOworCWludAkJCXN0cmVh bV9mbGFnczsKKwlSZWFkU3RyZWFtQmxvY2tOdW1iZXJDQiBzdHJlYW1fY2I7CisJQmxvY2tSYW5n ZVJlYWRTdHJlYW1Qcml2YXRlIHN0cmVhbV9kYXRhOworCisJLyogcmVzZXQgc3RhdGUgKi8KKwlz dGF0ZS0+cmV2bWFwQmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXN0YXRlLT5yZXZtYXBidWYg PSBJbnZhbGlkQnVmZmVyOworCXN0YXRlLT5yZXZtYXBpZHggPSAtMTsKKwlzdGF0ZS0+cmVncGFn ZUJsayA9IEludmFsaWRCbG9ja051bWJlcjsKKwlzdGF0ZS0+cmVncGFnZWJ1ZiA9IEludmFsaWRC dWZmZXI7CisJc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBJbnZhbGlkT2Zmc2V0TnVtYmVyOworCXN0 YXRlLT5pZHhuYmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhzdGF0ZS0+aWR4cmVs KTsKKworCS8qCisJICogUHJlcGFyZSBzdHJlYW0gZGF0YSBmb3IgcmVndWxhciBwYWdlcyB3YWxr LiBJdCBpcyBzYWZlIHRvIHVzZSBiYXRjaG1vZGUKKwkgKiBhcyBibG9ja19yYW5nZV9yZWFkX3N0 cmVhbV9jYiB0YWtlcyBubyBsb2Nrcy4KKwkgKi8KKwlzdHJlYW1fZmxhZ3MgPSBSRUFEX1NUUkVB TV9TRVFVRU5USUFMIHwgUkVBRF9TVFJFQU1fVVNFX0JBVENISU5HIHwgUkVBRF9TVFJFQU1fRlVM TDsKKwkvKiBGaXJzdCByZWd1bGFyIHBhZ2UgaXMgcmlnaHQgYWZ0ZXIgdGhlIGxhc3QgcmV2bWFw IHBhZ2UgKi8KKwlzdHJlYW1fZGF0YS5jdXJyZW50X2Jsb2NrbnVtID0gc3RhdGUtPmxhc3RSZXZt YXBQYWdlICsgMTsKKwlzdHJlYW1fZGF0YS5sYXN0X2V4Y2x1c2l2ZSA9IHN0YXRlLT5pZHhuYmxv Y2tzOworCisJc3RyZWFtX2NiID0gYmxvY2tfcmFuZ2VfcmVhZF9zdHJlYW1fY2I7CisJc3RyZWFt ID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oc3RyZWFtX2ZsYWdzLAorCQkJCQkJCQkJCUdl dEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCksCisJCQkJCQkJCQkJc3RhdGUtPmlkeHJlbCwK KwkJCQkJCQkJCQlNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkJc3RyZWFtX2NiLAorCQkJCQkJCQkJ CSZzdHJlYW1fZGF0YSwKKwkJCQkJCQkJCQkwKTsKKworCXdoaWxlICgoc3RhdGUtPnJlZ3BhZ2Vi dWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpKSAhPSBJbnZhbGlkQnVm ZmVyKQorCXsKKwkJT2Zmc2V0TnVtYmVyIG1heG9mZjsKKworCQlzdGF0ZS0+cmVncGFnZUJsayA9 IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHN0YXRlLT5yZWdwYWdlYnVmKTsKKwkJTG9ja0J1ZmZlcihz dGF0ZS0+cmVncGFnZWJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCQlzdGF0ZS0+cmVncGFnZSA9 IEJ1ZmZlckdldFBhZ2Uoc3RhdGUtPnJlZ3BhZ2VidWYpOworCisJCS8qIFNraXAgbmV3IHBhZ2Vz ICovCisJCWlmIChQYWdlSXNOZXcoc3RhdGUtPnJlZ3BhZ2UpKQorCQl7CisJCQlVbmxvY2tSZWxl YXNlQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYg KCFCUklOX0lTX1JFR1VMQVJfUEFHRShzdGF0ZS0+cmVncGFnZSkpCisJCXsKKwkJCWJyaW5fY2hl Y2tfZXJlcG9ydChzdGF0ZSwgcHNwcmludGYoImV4cGVjdGVkIG5ldyBvciByZWd1bGFyIHBhZ2Ug YXQgYmxvY2sgJXUiLCBzdGF0ZS0+cmVncGFnZUJsaykpOworCQl9CisKKwkJLyogQ2hlY2sgdGhh dCBhbGwgTk9STUFMIGluZGV4IHR1cGxlcyB3aXRoaW4gdGhlIHBhZ2UgYXJlIG5vdCBvcnBoYW5z ICovCisJCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIoc3RhdGUtPnJlZ3BhZ2UpOwor CQlmb3IgKHN0YXRlLT5yZWdwYWdlb2Zmc2V0ID0gRmlyc3RPZmZzZXROdW1iZXI7IHN0YXRlLT5y ZWdwYWdlb2Zmc2V0IDw9IG1heG9mZjsgc3RhdGUtPnJlZ3BhZ2VvZmZzZXQrKykKKwkJeworCQkJ SXRlbUlkCQlscDsKKworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkJbHAgPSBQYWdl R2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSk7CisKKwkJCWlmIChJdGVtSWRJc1VzZWQobHApKQorCQkJ eworCQkJCUJyaW5UdXBsZSAgKnR1cDsKKwkJCQlCbG9ja051bWJlciByZXZtYXBCbGs7CisKKwkJ CQl0dXAgPSAoQnJpblR1cGxlICopIFBhZ2VHZXRJdGVtKHN0YXRlLT5yZWdwYWdlLCBscCk7CisK KwkJCQkvKiBHZXQgcmV2bWFwIGJsb2NrIG51bWJlciBmb3IgaW5kZXggdHVwbGUgYmxrbm8gKi8K KwkJCQlyZXZtYXBCbGsgPSAoKHR1cC0+YnRfYmxrbm8gLyBzdGF0ZS0+cGFnZXNQZXJSYW5nZSkg LyBSRVZNQVBfUEFHRV9NQVhJVEVNUykgKyAxOworCQkJCWlmIChyZXZtYXBCbGsgPiBzdGF0ZS0+ bGFzdFJldm1hcFBhZ2UpCisJCQkJeworCQkJCQlpbmRleF90dXBsZV9vbmx5X2VyZXBvcnQoc3Rh dGUsIHBzcHJpbnRmKCJubyByZXZtYXAgcGFnZSBmb3IgdGhlIGluZGV4IHR1cGxlIHdpdGggYmxr bm8gJXUiLAorCQkJCQkJCQkJCQkJCQkJIHR1cC0+YnRfYmxrbm8pKTsKKwkJCQl9CisKKwkJCQkv KiBGZXRjaCBhbm90aGVyIHJldm1hcCBwYWdlIGlmIG5lZWRlZCAqLworCQkJCWlmIChzdGF0ZS0+ cmV2bWFwQmxrICE9IHJldm1hcEJsaykKKwkJCQl7CisJCQkJCWlmIChCbG9ja051bWJlcklzVmFs aWQoc3RhdGUtPnJldm1hcEJsaykpCisJCQkJCXsKKwkJCQkJCVJlbGVhc2VCdWZmZXIoc3RhdGUt PnJldm1hcGJ1Zik7CisJCQkJCX0KKwkJCQkJc3RhdGUtPnJldm1hcEJsayA9IHJldm1hcEJsazsK KwkJCQkJc3RhdGUtPnJldm1hcGJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChzdGF0ZS0+aWR4cmVs LCBNQUlOX0ZPUktOVU0sIHN0YXRlLT5yZXZtYXBCbGssIFJCTV9OT1JNQUwsCisJCQkJCQkJCQkJ CQkJCSAgc3RhdGUtPmNoZWNrc3RyYXRlZ3kpOworCQkJCX0KKworCQkJCXN0YXRlLT5yZXZtYXBp ZHggPSAodHVwLT5idF9ibGtubyAvIHN0YXRlLT5wYWdlc1BlclJhbmdlKSAlIFJFVk1BUF9QQUdF X01BWElURU1TOworCQkJCXN0YXRlLT5yYW5nZUJsa25vID0gdHVwLT5idF9ibGtubzsKKworCQkJ CS8qIGNoZWNrIHRoYXQgcmV2bWFwIGl0ZW0gcG9pbnRzIHRvIGluZGV4IHR1cGxlICovCisJCQkJ aWYgKCFyZXZtYXBfcG9pbnRzX3RvX2luZGV4X3R1cGxlKHN0YXRlKSkKKwkJCQl7CisJCQkJCWlu ZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUsIHBzcHJpbnRmKCJyZXZtYXAgZG9lc24ndCBwb2ludCB0 byBpbmRleCB0dXBsZSIpKTsKKwkJCQl9CisKKwkJCX0KKwkJfQorCisJCVVubG9ja1JlbGVhc2VC dWZmZXIoc3RhdGUtPnJlZ3BhZ2VidWYpOworCX0KKworCXJlYWRfc3RyZWFtX2VuZChzdHJlYW0p OworCisJaWYgKHN0YXRlLT5yZXZtYXBidWYgIT0gSW52YWxpZEJ1ZmZlcikKKwl7CisJCVJlbGVh c2VCdWZmZXIoc3RhdGUtPnJldm1hcGJ1Zik7CisJfQorfQorCisvKgorICogQ2hlY2sgaWYgdGhl IHJldm1hcCBpdGVtIHBvaW50cyB0byB0aGUgaW5kZXggdHVwbGUgKHJlZ3BhZ2VCbGssIHJlZ3Bh Z2VvZmZzZXQpLgorICogV2UgaGF2ZSBsb2NrZWQgcmVnIHBhZ2UsIGFuZCBsb2NrIHJldm1hcCBw YWdlIGhlcmUuCisgKiBJdCdzIGEgdmFsaWQgbG9jayBvcmRlcmluZywgc28gbm8gZGVhZGxvY2sg aXMgcG9zc2libGUuCisgKi8KK3N0YXRpYyBib29sCityZXZtYXBfcG9pbnRzX3RvX2luZGV4X3R1 cGxlKEJyaW5DaGVja1N0YXRlICpzdGF0ZSkKK3sKKwlJdGVtUG9pbnRlckRhdGEgKnJldm1hcHRp ZHM7CisJUmV2bWFwQ29udGVudHMgKmNvbnRlbnRzOworCUl0ZW1Qb2ludGVyRGF0YSAqdGlkOwor CWJvb2wJCXBvaW50czsKKworCUxvY2tCdWZmZXIoc3RhdGUtPnJldm1hcGJ1ZiwgQlVGRkVSX0xP Q0tfU0hBUkUpOworCWNvbnRlbnRzID0gKFJldm1hcENvbnRlbnRzICopIFBhZ2VHZXRDb250ZW50 cyhCdWZmZXJHZXRQYWdlKHN0YXRlLT5yZXZtYXBidWYpKTsKKwlyZXZtYXB0aWRzID0gY29udGVu dHMtPnJtX3RpZHM7CisJdGlkID0gcmV2bWFwdGlkcyArIHN0YXRlLT5yZXZtYXBpZHg7CisKKwlw b2ludHMgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyTm9DaGVjayh0aWQpID09IHN0YXRlLT5y ZWdwYWdlQmxrICYmCisJCUl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyTm9DaGVjayh0aWQpID09 IHN0YXRlLT5yZWdwYWdlb2Zmc2V0OworCisJTG9ja0J1ZmZlcihzdGF0ZS0+cmV2bWFwYnVmLCBC VUZGRVJfTE9DS19VTkxPQ0spOworCXJldHVybiBwb2ludHM7Cit9CisKKy8qCisgKiBQYWdlR2V0 SXRlbUlkKCkgd3JhcHBlciB0aGF0IHZhbGlkYXRlcyByZXR1cm5lZCBsaW5lIHBvaW50ZXIuCisg KgorICogaXRlbUlkIGluIGJyaW4gaW5kZXggY291bGQgYmUgVU5VU0VEIG9yIE5PUk1BTC4KKyAq Lworc3RhdGljIEl0ZW1JZAorUGFnZUdldEl0ZW1JZENhcmVmdWwoQnJpbkNoZWNrU3RhdGUgKnN0 YXRlKQoreworCVBhZ2UJCXBhZ2UgPSBzdGF0ZS0+cmVncGFnZTsKKwlPZmZzZXROdW1iZXIgb2Zm c2V0ID0gc3RhdGUtPnJlZ3BhZ2VvZmZzZXQ7CisJSXRlbUlkCQlpdGVtaWQgPSBQYWdlR2V0SXRl bUlkKHBhZ2UsIG9mZnNldCk7CisKKwlpZiAoSXRlbUlkR2V0T2Zmc2V0KGl0ZW1pZCkgKyBJdGVt SWRHZXRMZW5ndGgoaXRlbWlkKSA+CisJCUJMQ0tTWiAtIE1BWEFMSUdOKHNpemVvZihCcmluU3Bl Y2lhbFNwYWNlKSkpCisJCWluZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUsCisJCQkJCQkJcHNwcmlu dGYoImxpbmUgcG9pbnRlciBwb2ludHMgcGFzdCBlbmQgb2YgdHVwbGUgc3BhY2UgaW4gaW5kZXgu ICIKKwkJCQkJCQkJCSAibHBfb2ZmPSV1LCBscF9sZW49JXUgbHBfZmxhZ3M9JXUiLAorCQkJCQkJ CQkJIEl0ZW1JZEdldE9mZnNldChpdGVtaWQpLAorCQkJCQkJCQkJIEl0ZW1JZEdldExlbmd0aChp dGVtaWQpLAorCQkJCQkJCQkJIEl0ZW1JZEdldEZsYWdzKGl0ZW1pZCkKKwkJCQkJCQkJCSApCisJ CQkpOworCisJLyogVmVyaWZ5IHRoYXQgbGluZSBwb2ludGVyIGlzIExQX05PUk1BTCBvciBMUF9V TlVTRUQgKi8KKwlpZiAoISgoSXRlbUlkSXNOb3JtYWwoaXRlbWlkKSAmJiBJdGVtSWRIYXNTdG9y YWdlKGl0ZW1pZCkpIHx8CisJCSAgKCFJdGVtSWRJc1VzZWQoaXRlbWlkKSAmJiAhSXRlbUlkSGFz U3RvcmFnZShpdGVtaWQpKSkpCisJeworCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLAorCQkJ CQkJCXBzcHJpbnRmKCJpbnZhbGlkIGxpbmUgcG9pbnRlciBzdG9yYWdlIGluIGluZGV4LiAiCisJ CQkJCQkJCQkgImxwX29mZj0ldSwgbHBfbGVuPSV1IGxwX2ZsYWdzPSV1IiwKKwkJCQkJCQkJCSBJ dGVtSWRHZXRPZmZzZXQoaXRlbWlkKSwKKwkJCQkJCQkJCSBJdGVtSWRHZXRMZW5ndGgoaXRlbWlk KSwKKwkJCQkJCQkJCSBJdGVtSWRHZXRGbGFncyhpdGVtaWQpCisJCQkJCQkJCQkgKSk7CisJfQor CisJcmV0dXJuIGl0ZW1pZDsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgZXZlcnkgaGVhcCB0dXBs ZSBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBpbmRleC4KKyAqCisgKiBIZXJlIHdlIGdlbmVyYXRl IFNjYW5LZXkgZm9yIGV2ZXJ5IGhlYXAgdHVwbGUgYW5kIHRlc3QgaXQgYWdhaW5zdAorICogYXBw cm9wcmlhdGUgcmFuZ2UgdXNpbmcgY29uc2lzdGVudEZuIChmb3IgU2NhbktleSBnZW5lcmF0aW9u IGxvZ2ljIGxvb2sgJ3ByZXBhcmVfbm9ubnVsbF9zY2FuX2tleXMnKQorICoKKyAqIEFsc28sIHdl IGNoZWNrIHRoYXQgZmllbGRzICdlbXB0eV9yYW5nZScsICdhbGxfbnVsbHMnIGFuZCAnaGFzX251 bGxzJworICogYXJlIG5vdCB0b28gIm5hcnJvdyIgZm9yIGVhY2ggcmFuZ2UsIHdoaWNoIG1lYW5z OgorICogMSkgaGFzX251bGxzID0gZmFsc2UsIGJ1dCB3ZSBzZWUgbnVsbCB2YWx1ZSAob25seSBm b3Igb2lfcmVndWxhcl9udWxscyBpcyB0cnVlKQorICogMikgYWxsX251bGxzID0gdHJ1ZSwgYnV0 IHdlIHNlZSBub25udWxsIHZhbHVlLgorICogMykgZW1wdHlfcmFuZ2UgPSB0cnVlLCBidXQgd2Ug c2VlIHR1cGxlIHdpdGhpbiB0aGUgcmFuZ2UuCisgKgorICogV2UgdXNlIGFsbG93U3luYyA9IGZh bHNlLCBiZWNhdXNlIHRoaXMgd2F5CisgKiB3ZSBwcm9jZXNzIGZ1bGwgcmFuZ2VzIG9uZSBieSBv bmUgZnJvbSB0aGUgZmlyc3QgcmFuZ2UuCisgKiBJdCdzIG5vdCBuZWNlc3NhcnksIGJ1dCBtYWtl cyB0aGUgY29kZSBzaW1wbGVyIGFuZCB0aGlzIHdheQorICogd2UgbmVlZCB0byBmZXRjaCBldmVy eSBpbmRleCB0dXBsZSBvbmx5IG9uY2UuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19oZWFwX2Fs bF9pbmRleGVkKEJyaW5DaGVja1N0YXRlICpzdGF0ZSkKK3sKKwlSZWxhdGlvbglpZHhyZWwgPSBz dGF0ZS0+aWR4cmVsOworCVJlbGF0aW9uCWhlYXByZWwgPSBzdGF0ZS0+aGVhcHJlbDsKKwlkb3Vi bGUJCXJlbHR1cGxlczsKKwlJbmRleEluZm8gICppbmRleEluZm87CisKKwkvKiBoZWFwIGFsbCBp bmRleGVkIGNoZWNrIGZpZWxkcyBpbml0aWFsaXphdGlvbiAqLworCisJc3RhdGUtPnJldm1hcCA9 IGJyaW5SZXZtYXBJbml0aWFsaXplKGlkeHJlbCwgJnN0YXRlLT5wYWdlc1BlclJhbmdlKTsKKwlz dGF0ZS0+ZHR1cCA9IGJyaW5fbmV3X21lbXR1cGxlKHN0YXRlLT5iZGVzYyk7CisJc3RhdGUtPmNo ZWNrYWJsZV9yYW5nZSA9IGZhbHNlOworCXN0YXRlLT5jb25zaXN0ZW50Rm4gPSBwYWxsb2MwX2Fy cmF5KEZtZ3JJbmZvLCBzdGF0ZS0+bmF0dHMpOworCXN0YXRlLT5yYW5nZV9jbnQgPSAwOworCS8q IG5leHQgcmFuZ2UgaXMgdGhlIGZpcnN0IHJhbmdlIGluIHRoZSBiZWdpbm5pbmcgKi8KKwlzdGF0 ZS0+bmV4dHJhbmdlQmxrID0gMDsKKwlzdGF0ZS0+aXNudWxsX3NrID0gcGFsbG9jMF9hcnJheShT Y2FuS2V5LCBzdGF0ZS0+bmF0dHMpOworCXN0YXRlLT5yYW5nZUN0eCA9IEFsbG9jU2V0Q29udGV4 dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJImJyaW4gY2hlY2sgcmFu Z2UgY29udGV4dCIsCisJCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCXN0YXRl LT5oZWFwdHVwbGVDdHggPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRl eHQsCisJCQkJCQkJCQkJCQkiYnJpbiBjaGVjayB0dXBsZSBjb250ZXh0IiwKKwkJCQkJCQkJCQkJ CUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyoKKwkgKiBQcmVwYXJlICJpc19udWxsIiBz Y2FuIGtleXMgYW5kIGNvbnNpc3RlbnQgZm4gZm9yIGVhY2ggYXR0cmlidXRlLgorCSAqICJub24t bnVsbCIgc2NhbiBrZXlzIGFyZSBhbHJlYWR5IGdlbmVyYXRlZC4KKwkgKi8KKwlmb3IgKEF0dHJO dW1iZXIgYXR0bm8gPSAxOyBhdHRubyA8PSBzdGF0ZS0+bmF0dHM7IGF0dG5vKyspCisJeworCQlG bWdySW5mbyAgICp0bXA7CisKKwkJdG1wID0gaW5kZXhfZ2V0cHJvY2luZm8oaWR4cmVsLCBhdHRu bywgQlJJTl9QUk9DTlVNX0NPTlNJU1RFTlQpOworCQlmbWdyX2luZm9fY29weSgmc3RhdGUtPmNv bnNpc3RlbnRGblthdHRubyAtIDFdLCB0bXAsIEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKworCQlz dGF0ZS0+aXNudWxsX3NrW2F0dG5vIC0gMV0gPSBwcmVwYXJlX2lzbnVsbF9zY2FuX2tleShhdHRu byk7CisJfQorCisJaW5kZXhJbmZvID0gQnVpbGRJbmRleEluZm8oaWR4cmVsKTsKKworCS8qCisJ ICogVXNlIHNuYXBzaG90IHRvIGNoZWNrIG9ubHkgdGhvc2UgdHVwbGVzIHRoYXQgYXJlIGd1YXJh bnRlZWQgdG8gYmUKKwkgKiBpbmRleGVkIGFscmVhZHkuIFVzaW5nIFNuYXBzaG90QW55IHdvdWxk IG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgdG8gc2F5CisJICogaWYgdGhlcmUgaXMgYSBjb3JydXB0 aW9uIG9yIGNoZWNrZWQgdHVwbGUganVzdCBoYXZlbid0IGJlZW4gaW5kZXhlZAorCSAqIHlldC4g QWxzbywgd2Ugd2FudCB0byBzdXBwb3J0IENJQyBpbmRleGVzLgorCSAqLworCWluZGV4SW5mby0+ aWlfQ29uY3VycmVudCA9IHRydWU7CisJcmVsdHVwbGVzID0gdGFibGVfaW5kZXhfYnVpbGRfc2Nh bihoZWFwcmVsLCBpZHhyZWwsIGluZGV4SW5mbywgZmFsc2UsIHRydWUsCisJCQkJCQkJCQkgICBi cmluX2NoZWNrX2NhbGxiYWNrLCAodm9pZCAqKSBzdGF0ZSwgTlVMTCk7CisKKwllbG9nKERFQlVH MywgInJhbmdlcyB3ZXJlIGNoZWNrZWQ6ICVmIiwgc3RhdGUtPnJhbmdlX2NudCk7CisJZWxvZyhE RUJVRzMsICJzY2FuIHRvdGFsIHR1cGxlczogJWYiLCByZWx0dXBsZXMpOworCisJaWYgKHN0YXRl LT5idWYgIT0gSW52YWxpZEJ1ZmZlcikKKwkJUmVsZWFzZUJ1ZmZlcihzdGF0ZS0+YnVmKTsKKwor CWJyaW5SZXZtYXBUZXJtaW5hdGUoc3RhdGUtPnJldm1hcCk7CisJTWVtb3J5Q29udGV4dERlbGV0 ZShzdGF0ZS0+cmFuZ2VDdHgpOworCU1lbW9yeUNvbnRleHREZWxldGUoc3RhdGUtPmhlYXB0dXBs ZUN0eCk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBzY2FuIGtleXMgZm9yIGV2ZXJ5IGluZGV4IGF0 dHJpYnV0ZS4KKyAqCisgKiBDb25zaXN0ZW50Rm4gcmVxdWlyZXMgU2NhbktleSwgc28gd2UgbmVl ZCB0byBnZW5lcmF0ZSBTY2FuS2V5IGZvciBldmVyeQorICogYXR0cmlidXRlIHNvbWVob3cuIFdl IHdhbnQgU2NhbktleSB0aGF0IHdvdWxkIHJlc3VsdCBpbiBUUlVFIGZvciBldmVyeSBoZWFwCisg KiB0dXBsZSB3aXRoaW4gdGhlIHJhbmdlIHdoZW4gd2UgdXNlIGl0cyBpbmRleGVkIHZhbHVlIGFz IHNrX2FyZ3VtZW50LgorICogVG8gZ2VuZXJhdGUgc3VjaCBhIFNjYW5LZXkgd2UgbmVlZCB0byBk ZWZpbmUgdGhlIHJpZ2h0IG9wZXJhbmQgdHlwZSBhbmQgdGhlIHN0cmF0ZWd5IG51bWJlci4KKyAq IFJpZ2h0IG9wZXJhbmQgdHlwZSBpcyBhIHR5cGUgb2YgZGF0YSB0aGF0IGluZGV4IGlzIGJ1aWx0 IG9uLCBzbyBpdCdzICdvcGNpbnR5cGUnLgorICogVGhlcmUgaXMgbm8gc3RyYXRlZ3kgbnVtYmVy IHRoYXQgd2UgY2FuIGFsd2F5cyB1c2UsCisgKiBiZWNhdXNlIGV2ZXJ5IG9wY2xhc3MgZGVmaW5l cyBpdHMgb3duIHNldCBvZiBvcGVyYXRvcnMgaXQgc3VwcG9ydHMgYW5kIHN0cmF0ZWd5IG51bWJl cgorICogZm9yIHRoZSBzYW1lIG9wZXJhdG9yIGNhbiBkaWZmZXIgZnJvbSBvcGNsYXNzIHRvIG9w Y2xhc3MuCisgKiBTbyB0byBnZXQgc3RyYXRlZ3kgbnVtYmVyIHdlIGxvb2sgdXAgYW4gb3BlcmF0 b3IgdGhhdCBnaXZlcyB1cyBkZXNpcmVkIGJlaGF2aW9yCisgKiBhbmQgd2hpY2ggYm90aCBvcGVy YW5kIHR5cGVzIGFyZSAnb3BjaW50eXBlJyBhbmQgdGhlbiByZXRyaWV2ZSB0aGUgc3RyYXRlZ3kg bnVtYmVyIGZvciBpdC4KKyAqIE1vc3Qgb2YgdGhlIHRpbWUgd2UgY2FuIHVzZSAnPScuIFdlIGxl dCB1c2VyIGRlZmluZSBvcGVyYXRvciBuYW1lIGluIGNhc2Ugb3BjbGFzcyBkb2Vzbid0CisgKiBz dXBwb3J0ICc9JyBvcGVyYXRvci4gQWxzbywgaWYgc3VjaCBvcGVyYXRvciBkb2Vzbid0IGV4aXN0 LCB3ZSBjYW4ndCBwcm9jZWVkIHdpdGggdGhlIGNoZWNrLgorICoKKyAqIElmIG9wZXJhdG9yIG5h bWUgYXJyYXkgaXMgZW1wdHkgdXNlICI9IiBvcGVyYXRvciBmb3IgZXZlcnkgYXR0cmlidXRlLgor ICovCitzdGF0aWMgdm9pZAorcHJlcGFyZV9ub25udWxsX3NjYW5fa2V5cyhCcmluQ2hlY2tTdGF0 ZSAqc3RhdGUpCit7CisJT2lkCQkJZWxlbWVudF90eXBlID0gQVJSX0VMRU1UWVBFKHN0YXRlLT5j b25zaXN0ZW50X29wZXJfbmFtZXMpOworCWludDE2CQl0eXBsZW47CisJYm9vbAkJdHlwYnl2YWw7 CisJY2hhcgkJdHlwYWxpZ247CisJRGF0dW0JICAgKnZhbHVlczsKKwlib29sCSAgICplbGVtX251 bGxzOworCWludAkJCW51bV9lbGVtczsKKworCWdldF90eXBsZW5ieXZhbGFsaWduKGVsZW1lbnRf dHlwZSwgJnR5cGxlbiwgJnR5cGJ5dmFsLCAmdHlwYWxpZ24pOworCWRlY29uc3RydWN0X2FycmF5 KHN0YXRlLT5jb25zaXN0ZW50X29wZXJfbmFtZXMsIGVsZW1lbnRfdHlwZSwgdHlwbGVuLCB0eXBi eXZhbCwgdHlwYWxpZ24sCisJCQkJCSAgJnZhbHVlcywgJmVsZW1fbnVsbHMsICZudW1fZWxlbXMp OworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIHNvbWUgaW5wdXQsIGNoZWNrIHRoYXQgbnVtYmVyIG9m IG9wZXJhdG9ycyBpbiB0aGUgaW5wdXQgaXMKKwkgKiByZWxldmFudCB0byB0aGUgaW5kZXgKKwkg Ki8KKwlpZiAobnVtX2VsZW1zID4gMCAmJiBudW1fZWxlbXMgIT0gc3RhdGUtPm5hdHRzKQorCXsK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJudW1iZXIgb2Ygb3BlcmF0b3IgbmFtZXMgaW4gaW5wdXQg KCV1KSAiCisJCQkJCQkiZG9lc24ndCBtYXRjaCBpbmRleCBhdHRyaWJ1dGVzIG51bWJlciAoJXUp IiwKKwkJCQkJCW51bV9lbGVtcywgc3RhdGUtPm5hdHRzKSkpOworCX0KKworCS8qIEdlbmVyYXRl IHNjYW4ga2V5IGZvciBldmVyeSBpbmRleCBhdHRyaWJ1dGUgKi8KKwlzdGF0ZS0+bm9ubnVsbF9z ayA9IHBhbGxvYzBfYXJyYXkoU2NhbktleSwgc3RhdGUtPm5hdHRzKTsKKworCWZvciAoQXR0ck51 bWJlciBhdHRubyA9IDE7IGF0dG5vIDw9IHN0YXRlLT5uYXR0czsgYXR0bm8rKykKKwl7CisJCVN0 cmluZwkgICAqb3BlcmF0b3JOYW1lOworCisJCWlmIChudW1fZWxlbXMgPiAwKQorCQl7CisKKwkJ CWlmIChlbGVtX251bGxzW2F0dG5vIC0gMV0pCisJCQl7CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygib3BlcmF0b3IgbmFtZSBtdXN0IG5vdCBiZSBOVUxMIikpKTsKKwkJCX0KKworCQkJb3Bl cmF0b3JOYW1lID0gbWFrZVN0cmluZyhUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlc1thdHRubyAt IDFdKSk7CisJCX0KKwkJZWxzZQorCQl7CisKKwkJCS8qIFVzZSAnPScgYXMgZGVmYXVsdCBvcGVy YXRvciAqLworCQkJb3BlcmF0b3JOYW1lID0gbWFrZVN0cmluZygiPSIpOworCQl9CisKKwkJc3Rh dGUtPm5vbm51bGxfc2tbYXR0bm8gLSAxXSA9IHByZXBhcmVfbm9ubnVsbF9zY2FuX2tleShzdGF0 ZSwgYXR0bm8sIG9wZXJhdG9yTmFtZSk7CisJCXBmcmVlKG9wZXJhdG9yTmFtZSk7CisJfQorfQor CisvKgorICogUHJlcGFyZSBTY2FuS2V5IGZvciBpbmRleCBhdHRyaWJ1dGUuCisgKgorICogR2Vu ZXJhdGVkIG9uY2UsIGFuZCB3aWxsIGJlIHJldXNlZCBmb3IgYWxsIGhlYXAgdHVwbGVzLgorICog QXJndW1lbnQgZmllbGQgd2lsbCBiZSBmaWxsZWQgZm9yIGV2ZXJ5IGhlYXAgdHVwbGUgYmVmb3Jl CisgKiBjb25zaXN0ZW50IGZ1bmN0aW9uIGludm9jYXRpb24sIHNvIGxlYXZlIGl0IE5VTEwgZm9y IGEgd2hpbGUuCisgKi8KK3N0YXRpYyBTY2FuS2V5CitwcmVwYXJlX25vbm51bGxfc2Nhbl9rZXko Y29uc3QgQnJpbkNoZWNrU3RhdGUgKnN0YXRlLCBBdHRyTnVtYmVyIGF0dG5vLCBTdHJpbmcgKm9w bmFtZSkKK3sKKwlTY2FuS2V5CQlzY2FuS2V5OworCU9pZAkJCW9wT2lkOworCU9pZAkJCW9wRmFt aWx5T2lkOworCWJvb2wJCWRlZmluZWQ7CisJU3RyYXRlZ3lOdW1iZXIgc3RyYXRlZ3k7CisJUmVn UHJvY2VkdXJlIG9wUmVnUHJvYzsKKwlMaXN0CSAgICpvcGVyTmFtZUxpc3Q7CisJaW50CQkJYXR0 aW5kZXggPSBhdHRubyAtIDE7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0 dHIoc3RhdGUtPmJkZXNjLT5iZF90dXBkZXNjLCBhdHRpbmRleCk7CisJT2lkCQkJdHlwZSA9IHN0 YXRlLT5pZHhyZWwtPnJkX29wY2ludHlwZVthdHRpbmRleF07CisKKwlvcEZhbWlseU9pZCA9IHN0 YXRlLT5pZHhyZWwtPnJkX29wZmFtaWx5W2F0dGluZGV4XTsKKwlvcGVyTmFtZUxpc3QgPSBsaXN0 X21ha2UxKG9wbmFtZSk7CisJb3BPaWQgPSBPcGVyYXRvckxvb2t1cChvcGVyTmFtZUxpc3QsIHR5 cGUsIHR5cGUsICZkZWZpbmVkKTsKKworCWlmIChvcE9pZCA9PSBJbnZhbGlkT2lkKQorCXsKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9GVU5DVElPTiks CisJCQkJIGVycm1zZygidGhlcmUgaXMgbm8gb3BlcmF0b3IgJXMgZm9yIHR5cGUgXCIlc1wiIiwK KwkJCQkJCW9wbmFtZS0+c3ZhbCwgZm9ybWF0X3R5cGVfYmUodHlwZSkpKSk7CisJfQorCisJc3Ry YXRlZ3kgPSBnZXRfb3Bfb3BmYW1pbHlfc3RyYXRlZ3kob3BPaWQsIG9wRmFtaWx5T2lkKTsKKwor CWlmIChzdHJhdGVneSA9PSAwKQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkgZXJybXNnKCJvcGVyYXRvciAlcyBpcyBu b3QgYSBtZW1iZXIgb2Ygb3BlcmF0b3IgZmFtaWx5IFwiJXNcIiIsCisJCQkJCQlvcG5hbWUtPnN2 YWwsCisJCQkJCQlnZXRfb3BmYW1pbHlfbmFtZShvcEZhbWlseU9pZCwgZmFsc2UpKSkpOworCX0K KworCW9wUmVnUHJvYyA9IGdldF9vcGNvZGUob3BPaWQpOworCXNjYW5LZXkgPSBwYWxsb2MwKHNp emVvZihTY2FuS2V5RGF0YSkpOworCVNjYW5LZXlFbnRyeUluaXRpYWxpemUoCisJCQkJCQkgICBz Y2FuS2V5LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIGF0dG5vLAorCQkJCQkJICAgc3RyYXRlZ3ks CisJCQkJCQkgICB0eXBlLAorCQkJCQkJICAgYXR0ci0+YXR0Y29sbGF0aW9uLAorCQkJCQkJICAg b3BSZWdQcm9jLAorCQkJCQkJICAgKERhdHVtKSBOVUxMCisJCSk7CisJcGZyZWUob3Blck5hbWVM aXN0KTsKKworCXJldHVybiBzY2FuS2V5OworfQorCitzdGF0aWMgU2NhbktleQorcHJlcGFyZV9p c251bGxfc2Nhbl9rZXkoQXR0ck51bWJlciBhdHRubykKK3sKKwlTY2FuS2V5CQlzY2FuS2V5Owor CisJc2NhbktleSA9IHBhbGxvYzAoc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CisJU2NhbktleUVudHJ5 SW5pdGlhbGl6ZShzY2FuS2V5LAorCQkJCQkJICAgU0tfSVNOVUxMIHwgU0tfU0VBUkNITlVMTCwK KwkJCQkJCSAgIGF0dG5vLAorCQkJCQkJICAgSW52YWxpZFN0cmF0ZWd5LAorCQkJCQkJICAgSW52 YWxpZE9pZCwKKwkJCQkJCSAgIEludmFsaWRPaWQsCisJCQkJCQkgICBJbnZhbGlkT2lkLAorCQkJ CQkJICAgKERhdHVtKSAwKTsKKwlyZXR1cm4gc2NhbktleTsKK30KKworLyoKKyAqIFdlIHdhbGsg ZnJvbSB0aGUgZmlyc3QgcmFuZ2UgKGJsa25vID0gMCkgdG8gdGhlIGxhc3QgYXMgdGhlIHNjYW4g cHJvY2VlZC4KKyAqIEZvciBldmVyeSBoZWFwIHR1cGxlIHdlIGNoZWNrIGlmIHdlIGFyZSBkb25l IHdpdGggdGhlIGN1cnJlbnQgcmFuZ2UsIGFuZCB3ZSBuZWVkIHRvIG1vdmUgZnVydGhlcgorICog dG8gdGhlIGN1cnJlbnQgaGVhcCB0dXBsZSdzIHJhbmdlLiBXaGlsZSBtb3ZpbmcgdG8gdGhlIG5l eHQgcmFuZ2Ugd2UgY2hlY2sgdGhhdCBpdCdzIG5vdCBlbXB0eSAoYmVjYXVzZQorICogd2UgaGF2 ZSBhdCBsZWFzdCBvbmUgdHVwbGUgZm9yIHRoaXMgcmFuZ2UpLgorICogRXZlcnkgaGVhcCB0dXBs ZSBhcmUgY2hlY2tlZCB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHJhbmdlIGl0IGJlbG9uZ3Mg dG8uCisgKiBJbiBjYXNlIG9mIHVuc3VtbWFyaXplZCByYW5nZXMgYW5kIHBsYWNlaG9sZGVycyB3 ZSBza2lwIGFsbCBjaGVja3MuCisgKgorICogV2hpbGUgbW92aW5nLCB3ZSBtYXkganVtcCBvdmVy IHNvbWUgcmFuZ2VzLAorICogYnV0IGl0J3Mgb2theSBiZWNhdXNlIHdlIHdvdWxkIG5vdCBiZSBh YmxlIHRvIGNoZWNrIHRoZW0gYW55d2F5LgorICogV2UgYWxzbyBjYW4ndCBzYXkgd2hldGhlciBz a2lwcGVkIHJhbmdlcyBzaG91bGQgYmUgbWFya2VkIGFzIGVtcHR5IG9yIG5vdCwKKyAqIHNpbmNl IGl0J3MgcG9zc2libGUgdGhhdCB0aGVyZSB3ZXJlIHNvbWUgdHVwbGVzIGJlZm9yZSB0aGF0IGFy ZSBub3cgZGVsZXRlZC4KKyAqCisgKi8KK3N0YXRpYyB2b2lkCiticmluX2NoZWNrX2NhbGxiYWNr KFJlbGF0aW9uIGluZGV4LCBJdGVtUG9pbnRlciB0aWQsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlz bnVsbCwgYm9vbCB0dXBsZUlzQWxpdmUsIHZvaWQgKmJyc3RhdGUpCit7CisJQnJpbkNoZWNrU3Rh dGUgKnN0YXRlOworCUJsb2NrTnVtYmVyIGhlYXBibGs7CisKKwlzdGF0ZSA9IChCcmluQ2hlY2tT dGF0ZSAqKSBicnN0YXRlOworCWhlYXBibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRp ZCk7CisKKwkvKiBJZiB3ZSB3ZW50IGJleW9uZCB0aGUgY3VycmVudCByYW5nZSBsZXQncyBmZXRj aCBuZXcgcmFuZ2UgKi8KKwlpZiAoaGVhcGJsayA+PSBzdGF0ZS0+bmV4dHJhbmdlQmxrKQorCXsK KwkJQnJpblR1cGxlICAqdHVwOworCQlCcmluVHVwbGUgICp0dXBjb3B5ID0gTlVMTDsKKwkJTWVt b3J5Q29udGV4dCBvbGRDdHg7CisJCU9mZnNldE51bWJlciBvZmY7CisJCVNpemUJCXNpemU7CisJ CVNpemUJCWJ0dXBzeiA9IDA7CisKKwkJTWVtb3J5Q29udGV4dFJlc2V0KHN0YXRlLT5yYW5nZUN0 eCk7CisJCW9sZEN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0ZS0+cmFuZ2VDdHgpOwor CisJCXN0YXRlLT5yYW5nZV9jbnQrKzsKKworCQkvKiBNb3ZlIHRvIHRoZSByYW5nZSB0aGF0IGNv bnRhaW5zIGN1cnJlbnQgaGVhcCB0dXBsZSAqLworCQl0dXAgPSBicmluR2V0VHVwbGVGb3JIZWFw QmxvY2soc3RhdGUtPnJldm1hcCwgaGVhcGJsaywgJnN0YXRlLT5idWYsCisJCQkJCQkJCQkgICAm b2ZmLCAmc2l6ZSwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCisJCWlmICh0dXApCisJCXsKKwkJCXR1 cGNvcHkgPSBicmluX2NvcHlfdHVwbGUodHVwLCBzaXplLCB0dXBjb3B5LCAmYnR1cHN6KTsKKwkJ CUxvY2tCdWZmZXIoc3RhdGUtPmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJCXN0YXRlLT5k dHVwID0gYnJpbl9kZWZvcm1fdHVwbGUoc3RhdGUtPmJkZXNjLCB0dXBjb3B5LCBzdGF0ZS0+ZHR1 cCk7CisKKwkJCS8qIFdlIGNhbid0IGNoZWNrIHBsYWNlaG9sZGVyIHJhbmdlcyAqLworCQkJc3Rh dGUtPmNoZWNrYWJsZV9yYW5nZSA9ICFzdGF0ZS0+ZHR1cC0+YnRfcGxhY2Vob2xkZXI7CisJCX0K KwkJZWxzZQorCQl7CisJCQkvKiBXZSBjYW4ndCBjaGVjayB1bnN1bW1hcml6ZWQgcmFuZ2VzLiAq LworCQkJc3RhdGUtPmNoZWNrYWJsZV9yYW5nZSA9IGZhbHNlOworCQl9CisKKwkJLyoKKwkJICog VXBkYXRlIG5leHRyYW5nZUJsayBzbyB3ZSBrbm93IHdoZW4gd2UgYXJlIGRvbmUgd2l0aCB0aGUg Y3VycmVudAorCQkgKiByYW5nZQorCQkgKi8KKwkJc3RhdGUtPm5leHRyYW5nZUJsayA9IChoZWFw YmxrIC8gc3RhdGUtPnBhZ2VzUGVyUmFuZ2UgKyAxKSAqIHN0YXRlLT5wYWdlc1BlclJhbmdlOwor CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDdHgpOworCisJCS8qIFJhbmdlIG11c3Qgbm90 IGJlIGVtcHR5ICovCisJCWlmIChzdGF0ZS0+Y2hlY2thYmxlX3JhbmdlICYmIHN0YXRlLT5kdHVw LT5idF9lbXB0eV9yYW5nZSkKKwkJeworCQkJaGVhcF9hbGxfaW5kZXhlZF9lcmVwb3J0KHN0YXRl LCB0aWQsICJyYW5nZSBpcyBtYXJrZWQgYXMgZW1wdHkgYnV0IGNvbnRhaW5zIHF1YWxpZmllZCBs aXZlIHR1cGxlcyIpOworCQl9CisKKwl9CisKKwkvKiBDaGVjayB0dXBsZSBpcyBjb25zaXN0ZW50 IHdpdGggdGhlIGluZGV4ICovCisJaWYgKHN0YXRlLT5jaGVja2FibGVfcmFuZ2UpCisJeworCQlj aGVja19oZWFwX3R1cGxlKHN0YXRlLCB2YWx1ZXMsIGlzbnVsbCwgdGlkKTsKKwl9CisKK30KKwor LyoKKyAqIFdlIGNoZWNrIGhhc251bGxzIGZsYWdzIGZvciBudWxsIHZhbHVlcyBhbmQgb2lfcmVn dWxhcl9udWxscyA9IHRydWUsCisgKiBjaGVjayBhbGxudWxscyBpcyBmYWxzZSBmb3IgYWxsIG5v bm51bGwgdmFsdWVzIG5vdCBtYXR0ZXIgb2lfcmVndWxhcl9udWxscyBpcyBzZXQgb3Igbm90LAor ICogRm9yIGFsbCBvdGhlciBjYXNlcyB3ZSBjYWxsIGNvbnNpc3RlbnRGbiB3aXRoIGFwcHJvcHJp YXRlIHNjYW5LZXk6CisgKiAtIGZvciBvaV9yZWd1bGFyX251bGxzID0gZmFsc2UgYW5kIG51bGwg dmFsdWVzIHdlIHVzZSAnaXNOdWxsJyBzY2FuS2V5LAorICogLSBmb3Igbm9ubnVsbCB2YWx1ZXMg d2UgdXNlICdub25udWxsJyBzY2FuS2V5CisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19oZWFwX3R1 cGxlKEJyaW5DaGVja1N0YXRlICpzdGF0ZSwgY29uc3QgRGF0dW0gKnZhbHVlcywgY29uc3QgYm9v bCAqbnVsbHMsIEl0ZW1Qb2ludGVyIHRpZCkKK3sKKwlpbnQJCQlhdHRpbmRleDsKKwlCcmluTWVt VHVwbGUgKmR0dXAgPSBzdGF0ZS0+ZHR1cDsKKwlCcmluRGVzYyAgICpiZGVzYyA9IHN0YXRlLT5i ZGVzYzsKKwlNZW1vcnlDb250ZXh0IG9sZEN0eDsKKworCUFzc2VydChzdGF0ZS0+Y2hlY2thYmxl X3JhbmdlKTsKKworCU1lbW9yeUNvbnRleHRSZXNldChzdGF0ZS0+aGVhcHR1cGxlQ3R4KTsKKwlv bGRDdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUtPmhlYXB0dXBsZUN0eCk7CisKKwkv KiBjaGVjayBldmVyeSBpbmRleCBhdHRyaWJ1dGUgKi8KKwlmb3IgKGF0dGluZGV4ID0gMDsgYXR0 aW5kZXggPCBzdGF0ZS0+bmF0dHM7IGF0dGluZGV4KyspCisJeworCQlCcmluVmFsdWVzICpidmFs OworCQlEYXR1bQkJY29uc2lzdGVudEZuUmVzdWx0OworCQlib29sCQljb25zaXN0ZW50OworCQlT Y2FuS2V5CQlzY2FuS2V5OworCQlib29sCQlvaV9yZWd1bGFyX251bGxzID0gYmRlc2MtPmJkX2lu Zm9bYXR0aW5kZXhdLT5vaV9yZWd1bGFyX251bGxzOworCisJCWJ2YWwgPSAmZHR1cC0+YnRfY29s dW1uc1thdHRpbmRleF07CisKKwkJaWYgKG51bGxzW2F0dGluZGV4XSkKKwkJeworCQkJLyoKKwkJ CSAqIFVzZSBoYXNudWxscyBmbGFnIGZvciBvaV9yZWd1bGFyX251bGxzIGlzIHRydWUuIE90aGVy d2lzZSwKKwkJCSAqIGRlbGVnYXRlIGNoZWNrIHRvIGNvbnNpc3RlbnRGbgorCQkJICovCisJCQlp ZiAob2lfcmVndWxhcl9udWxscykKKwkJCXsKKwkJCQkvKiBXZSBoYXZlIG51bGwgdmFsdWUsIHNv IGhhc251bGxzIG9yIGFsbG51bGxzIG11c3QgYmUgdHJ1ZSAqLworCQkJCWlmICghKGJ2YWwtPmJ2 X2hhc251bGxzIHx8IGJ2YWwtPmJ2X2FsbG51bGxzKSkKKwkJCQl7CisJCQkJCWhlYXBfYWxsX2lu ZGV4ZWRfZXJlcG9ydChzdGF0ZSwgdGlkLAorCQkJCQkJCQkJCQkgInJhbmdlIGhhc251bGxzIGFu ZCBhbGxudWxscyBhcmUgZmFsc2UsIGJ1dCBjb250YWlucyBhIG51bGwgdmFsdWUiKTsKKwkJCQl9 CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBJbiBjYXNlIG9mIG51bGwgYW5k IG9pX3JlZ3VsYXJfbnVsbHMgPSBmYWxzZSB3ZSB1c2UgaXNOdWxsCisJCQkgKiBzY2FuS2V5IGZv ciBpbnZvY2F0aW9uIG9mIGNvbnNpc3RlbnRGbgorCQkJICovCisJCQlzY2FuS2V5ID0gc3RhdGUt PmlzbnVsbF9za1thdHRpbmRleF07CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBXZSBoYXZlIGEg bm9ubnVsbCB2YWx1ZSwgc28gYWxsbnVsbHMgc2hvdWxkIGJlIGZhbHNlICovCisJCQlpZiAoYnZh bC0+YnZfYWxsbnVsbHMpCisJCQl7CisJCQkJaGVhcF9hbGxfaW5kZXhlZF9lcmVwb3J0KHN0YXRl LCB0aWQsICJyYW5nZSBhbGxudWxscyBpcyB0cnVlLCBidXQgY29udGFpbnMgbm9ubnVsbCB2YWx1 ZSIpOworCQkJfQorCisJCQkvKiB1c2Ugbm9ubnVsbCBzY2FuIGtleSAqLworCQkJc2NhbktleSA9 IHN0YXRlLT5ub25udWxsX3NrW2F0dGluZGV4XTsKKwkJCXNjYW5LZXktPnNrX2FyZ3VtZW50ID0g dmFsdWVzW2F0dGluZGV4XTsKKwkJfQorCisJCS8qIElmIG9pX3JlZ3VsYXJfbnVsbHMgPSB0cnVl IHdlIHNob3VsZCBuZXZlciBnZXQgdGhlcmUgd2l0aCBudWxsICovCisJCUFzc2VydCghb2lfcmVn dWxhcl9udWxscyB8fCAhbnVsbHNbYXR0aW5kZXhdKTsKKworCQlpZiAoc3RhdGUtPmNvbnNpc3Rl bnRGblthdHRpbmRleF0uZm5fbmFyZ3MgPj0gNCkKKwkJeworCQkJY29uc2lzdGVudEZuUmVzdWx0 ID0gRnVuY3Rpb25DYWxsNENvbGwoJnN0YXRlLT5jb25zaXN0ZW50Rm5bYXR0aW5kZXhdLAorCQkJ CQkJCQkJCQkJICAgc3RhdGUtPmlkeHJlbC0+cmRfaW5kY29sbGF0aW9uW2F0dGluZGV4XSwKKwkJ CQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShzdGF0ZS0+YmRlc2MpLAorCQkJCQkJCQkJCQkJ ICAgUG9pbnRlckdldERhdHVtKGJ2YWwpLAorCQkJCQkJCQkJCQkJICAgUG9pbnRlckdldERhdHVt KCZzY2FuS2V5KSwKKwkJCQkJCQkJCQkJCSAgIEludDMyR2V0RGF0dW0oMSkKKwkJCQkpOworCQl9 CisJCWVsc2UKKwkJeworCQkJY29uc2lzdGVudEZuUmVzdWx0ID0gRnVuY3Rpb25DYWxsM0NvbGwo JnN0YXRlLT5jb25zaXN0ZW50Rm5bYXR0aW5kZXhdLAorCQkJCQkJCQkJCQkJICAgc3RhdGUtPmlk eHJlbC0+cmRfaW5kY29sbGF0aW9uW2F0dGluZGV4XSwKKwkJCQkJCQkJCQkJCSAgIFBvaW50ZXJH ZXREYXR1bShzdGF0ZS0+YmRlc2MpLAorCQkJCQkJCQkJCQkJICAgUG9pbnRlckdldERhdHVtKGJ2 YWwpLAorCQkJCQkJCQkJCQkJICAgUG9pbnRlckdldERhdHVtKHNjYW5LZXkpCisJCQkJKTsKKwkJ fQorCisJCWNvbnNpc3RlbnQgPSBEYXR1bUdldEJvb2woY29uc2lzdGVudEZuUmVzdWx0KTsKKwor CQlpZiAoIWNvbnNpc3RlbnQpCisJCXsKKwkJCWhlYXBfYWxsX2luZGV4ZWRfZXJlcG9ydChzdGF0 ZSwgdGlkLCAiaGVhcCB0dXBsZSBpbmNvbnNpc3RlbnQgd2l0aCBpbmRleCIpOworCQl9CisKKwl9 CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3R4KTsKK30KKworLyogUmVwb3J0IHdpdGhv dXQgYW55IGFkZGl0aW9uYWwgaW5mbyAqLworc3RhdGljIHZvaWQKK2JyaW5fY2hlY2tfZXJlcG9y dChCcmluQ2hlY2tTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwllcmVwb3J0KEVS Uk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLAorCQkJIGVycm1zZygi aW5kZXggJXMgaXMgY29ycnVwdGVkIC0gJXMiLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0 ZS0+aWR4cmVsKSwgZm10KSkpOworfQorCisvKiBSZXBvcnQgd2l0aCByYW5nZSBibGtubywgcmV2 bWFwIGl0ZW0gaW5mbywgaW5kZXggdHVwbGUgaW5mbyAqLworc3RhdGljIHZvaWQKK2luZGV4X3R1 cGxlX2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpmbXQpCit7CisJ QXNzZXJ0KHN0YXRlLT5yYW5nZUJsa25vICE9IEludmFsaWRCbG9ja051bWJlcik7CisJQXNzZXJ0 KHN0YXRlLT5yZXZtYXBCbGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwlBc3NlcnQoc3RhdGUt PnJldm1hcGlkeCA8IFJFVk1BUF9QQUdFX01BWElURU1TKTsKKwlBc3NlcnQoc3RhdGUtPnJlZ3Bh Z2VCbGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwlBc3NlcnQoc3RhdGUtPnJlZ3BhZ2VvZmZz ZXQgIT0gSW52YWxpZE9mZnNldE51bWJlcik7CisKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNv ZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLAorCQkJIGVycm1zZygiaW5kZXggJXMgaXMgY29y cnVwdGVkIC0gJXMuIFJhbmdlIGJsa25vOiAldSwgcmV2bWFwIGl0ZW06ICgldSwldSksIGluZGV4 IHR1cGxlOiAoJXUsJXUpIiwKKwkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdGUtPmlk eHJlbCksCisJCQkJCWZtdCwKKwkJCQkJc3RhdGUtPnJhbmdlQmxrbm8sCisJCQkJCXN0YXRlLT5y ZXZtYXBCbGssCisJCQkJCXN0YXRlLT5yZXZtYXBpZHgsCisJCQkJCXN0YXRlLT5yZWdwYWdlQmxr LAorCQkJCQlzdGF0ZS0+cmVncGFnZW9mZnNldCkpKTsKK30KKworLyogUmVwb3J0IHdpdGggaW5k ZXggdHVwbGUgaW5mbyAqLworc3RhdGljIHZvaWQKK2luZGV4X3R1cGxlX29ubHlfZXJlcG9ydChC cmluQ2hlY2tTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlBc3NlcnQoc3RhdGUt PnJlZ3BhZ2VCbGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwlBc3NlcnQoc3RhdGUtPnJlZ3Bh Z2VvZmZzZXQgIT0gSW52YWxpZE9mZnNldE51bWJlcik7CisKKwllcmVwb3J0KEVSUk9SLAorCQkJ KGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLAorCQkJIGVycm1zZygiaW5kZXggJXMg aXMgY29ycnVwdGVkIC0gJXMuIEluZGV4IHR1cGxlOiAoJXUsJXUpIiwKKwkJCQkJUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUoc3RhdGUtPmlkeHJlbCksCisJCQkJCWZtdCwKKwkJCQkJc3RhdGUtPnJl Z3BhZ2VCbGssCisJCQkJCXN0YXRlLT5yZWdwYWdlb2Zmc2V0KSkpOworfQorCisvKiBSZXBvcnQg d2l0aCByYW5nZSBibGtubywgcmV2bWFwIGl0ZW0gaW5mbyAqLworc3RhdGljIHZvaWQKK3Jldm1h cF9pdGVtX2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpmbXQpCit7 CisJQXNzZXJ0KHN0YXRlLT5yYW5nZUJsa25vICE9IEludmFsaWRCbG9ja051bWJlcik7CisJQXNz ZXJ0KHN0YXRlLT5yZXZtYXBCbGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwlBc3NlcnQoc3Rh dGUtPnJldm1hcGlkeCA8IFJFVk1BUF9QQUdFX01BWElURU1TKTsKKworCWVyZXBvcnQoRVJST1Is CisJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksCisJCQkgZXJybXNnKCJpbmRl eCAlcyBpcyBjb3JydXB0ZWQgLSAlcy4gUmFuZ2UgYmxrbm86ICV1LCByZXZtYXAgaXRlbTogKCV1 LCV1KS4iLAorCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+aWR4cmVsKSwKKwkJ CQkJZm10LAorCQkJCQlzdGF0ZS0+cmFuZ2VCbGtubywKKwkJCQkJc3RhdGUtPnJldm1hcEJsaywK KwkJCQkJc3RhdGUtPnJldm1hcGlkeCkpKTsKK30KKworLyogUmVwb3J0IHdpdGggcmFuZ2UgYmxr bm8sIGhlYXAgdHVwbGUgaW5mbyAqLworc3RhdGljIHZvaWQKK2hlYXBfYWxsX2luZGV4ZWRfZXJl cG9ydChjb25zdCBCcmluQ2hlY2tTdGF0ZSAqc3RhdGUsIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAq dGlkLCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUFzc2VydChzdGF0ZS0+cmFuZ2VCbGtubyAh PSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVS UkNPREVfSU5ERVhfQ09SUlVQVEVEKSwKKwkJCSBlcnJtc2coImluZGV4ICVzIGlzIG5vdCBjb25z aXN0ZW50IHdpdGggdGhlIGhlYXAgLSAlcy4gUmFuZ2UgYmxrbm86ICV1LCBoZWFwIHRpZCAoJXUs JXUpIiwKKwkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdGUtPmlkeHJlbCksCisJCQkJ CW1lc3NhZ2UsCisJCQkJCXN0YXRlLT5kdHVwLT5idF9ibGtubywKKwkJCQkJSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQlJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcih0aWQp KSkpOworfQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2FtY2hlY2suc2dtbCBiL2RvYy9zcmMv c2dtbC9hbWNoZWNrLnNnbWwKaW5kZXggMDgwMDY4NTY1NzkuLjNjM2ZlNmQzZDMyIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvYW1jaGVjay5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9hbWNoZWNr LnNnbWwKQEAgLTIzMSw2ICsyMzEsNzYgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSBERUJV RzE7CiAgIDwvdGlwPgogCiAgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVudHJ5PgorICAg IDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+YnJpbl9pbmRleF9jaGVjayhpbmRleCByZWdjbGFzcywg cmVndWxhcnBhZ2VzY2hlY2sgYm9vbGVhbiwgaGVhcGFsbGluZGV4ZWQgYm9vbGVhbiwgdmFyaWFk aWMgdGV4dFtdKSByZXR1cm5zIHZvaWQ8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAg ICAgPHByaW1hcnk+YnJpbl9pbmRleF9jaGVjazwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+ CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxmdW5j dGlvbj5icmluX2luZGV4X2NoZWNrPC9mdW5jdGlvbj4gdGVzdHMgdGhhdCBpdHMgdGFyZ2V0IEJS SU4gaW5kZXgKKyAgICAgIGhhcyBubyBzdHJ1Y3R1cmFsIGNvcnJ1cHRpb25zLiBBIDxsaXRlcmFs PlNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jazwvbGl0ZXJhbD4KKyAgICAgIGlzIHJlcXVpcmVkIG9u IHRoZSB0YXJnZXQgaW5kZXggYnkgPGZ1bmN0aW9uPmJyaW5faW5kZXhfY2hlY2s8L2Z1bmN0aW9u Pi4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSBmb2xsb3dpbmcgb3B0aW9u YWwgYXJndW1lbnRzIGFyZSByZWNvZ25pemVkOgorICAgICA8L3BhcmE+CisgICAgIDx2YXJpYWJs ZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPjxsaXRlcmFsPnJlZ3Vs YXJwYWdlc2NoZWNrPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAg IDxwYXJhPgorICAgICAgICAgSWYgdHJ1ZSwgY2hlY2sgZG9lcyBhbm90aGVyIHJ1biBvdmVyIGFs bCByZWd1bGFyIHBhZ2VzIGFuZCB0cmllcyB0bworICAgICAgICAgZmluZCBzb21lIGNvcnJ1cHRp b25zIHRoYXQgd2FzIG5vdCBwb3NzaWJsZSB0byBmaW5kIGR1cmluZyB0aGUgYmFzaWMgY2hlY2su CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBEZWZhdWx0cyB0byBm YWxzZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxp c3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+PGxpdGVyYWw+aGVh cGFsbGluZGV4ZWQ8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg PHBhcmE+CisgICAgICAgICBJZiB0cnVlLCB0aGUgY2hlY2sgdmVyaWZpZXMgdGhhdCBldmVyeSBo ZWFwIHR1cGxlIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUKKyAgICAgICAgIGluZGV4LiBUaGlzIGNo ZWNrIHBoYXNlIG5lZWRzIGFuIG9wZXJhdG9yIGZvciB3aGljaCBhbiBleHByZXNzaW9uCisgICAg ICAgICA8bGl0ZXJhbD5MSFMgT1BFUkFUT1IgUkhTPC9saXRlcmFsPiBldmFsdWF0ZXMgdG8gPGxp dGVyYWw+dHJ1ZTwvbGl0ZXJhbD4KKyAgICAgICAgIHdoZW4gd2UgdXNlIHRoZSBzYW1lIHZhbHVl IG9mIHRoZSBpbmRleGVkIHR5cGUgZm9yIGJvdGggPGxpdGVyYWw+TEhTPC9saXRlcmFsPiBhbmQg PGxpdGVyYWw+UkhTPC9saXRlcmFsPi4KKyAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgaW5k ZXhlZCBjb2x1bW4ncyB0eXBlIGlzIDx0eXBlPmJpZ2ludDwvdHlwZT4sCisgICAgICAgICBlcXVh bGl0eSBvcGVyYXRvciBjYW4gYmUgdXNlZCBiZWNhdXNlIGV4cHJlc3Npb24KKyAgICAgICAgIDxs aXRlcmFsPnggPSB4PC9saXRlcmFsPiByZXN1bHQgaW4gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4K KyAgICAgICAgIGZvciBldmVyeSB2YWx1ZSBvZiA8dHlwZT5iaWdpbnQ8L3R5cGU+CisgICAgICAg ICAoZS5nLiA8bGl0ZXJhbD4xID0gMTwvbGl0ZXJhbD4gaXMgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJh bD4sIDxsaXRlcmFsPjIgPSAyPC9saXRlcmFsPiBpcyA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPiwg YW5kIHNvIG9uKS4KKyAgICAgICAgIE9wZXJhdG9yIGFsc28gc2hvdWxkIGJlIHBhcnQgb2YgdGhl IG9wZXJhdG9yIGZhbWlseSBvZiB0aGUgaW5kZXhlZCBjb2x1bW4uCisgICAgICAgICBNb3N0IG9m IHRoZSB0aW1lLCB0aGUgZXF1YWxpdHkgb3BlcmF0b3IgY2FuIGJlIHVzZWQuCisgICAgICAgICBJ ZiBhbGwgaW5kZXhlZCBjb2x1bW4gb3BlcmF0b3IgY2xhc3NlcyBzdXBwb3J0IGVxdWFsaXR5IG9w ZXJhdG9yLAorICAgICAgICAgdGhlIGZ1bmN0aW9uIGNhbGwgbG9va3MgbGlrZSB0aGlzOgorPHBy b2dyYW1saXN0aW5nPgorICAgU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2luZGV4X25hbWUnLCB0 cnVlLCB0cnVlKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICBJZiBhbnkgaW5kZXhlZCBj b2x1bW4gb3BlcmF0b3IgY2xhc3MgZG9lc24ndCBzdXBwb3J0IGVxdWFsaXR5IG9wZXJhdG9yIHRo ZW4KKyAgICAgICAgIGEgc3VpdGFibGUgb3BlcmF0b3IgZm9yIGV2ZXJ5IHN1Y2ggY29sdW1uIHNo b3VsZCBiZSBmb3VuZCBhbmQKKyAgICAgICAgIG9wZXJhdG9ycyBmb3IgYWxsIGluZGV4ZWQgY29s dW1ucyBzaG91bGQgYmUgbGlzdGVkIGluIHRoZSBmdW5jdGlvbiBjYWxsLgorICAgICAgICAgRm9y IGluc3RhbmNlLCB3ZSBoYXZlIHR3byBpbmRleGVkIGNvbHVtbnMKKyAgICAgICAgICg8cGFyYW1l dGVyPmE8L3BhcmFtZXRlcj4gPHR5cGU+aW50OF9taW5tYXhfb3BzPC90eXBlPiwgPHBhcmFtZXRl cj5iPC9wYXJhbWV0ZXI+IDx0eXBlPmJveF9pbmNsdXNpb25fb3BzPC90eXBlPikuCisgICAgICAg ICA8dHlwZT5ib3hfaW5jbHVzaW9uX29wczwvdHlwZT4gb3BlcmF0b3IgY2xhc3MgZG9lcyBub3Qg c3VwcG9ydCBlcXVhbGl0eSBvcGVyYXRvci4KKyAgICAgICAgIFRoZSBhcHByb3ByaWF0ZSBvcGVy YXRvciB3b3VsZCBiZSA8bGl0ZXJhbD5APjwvbGl0ZXJhbD4uCisgICAgICAgICBUaGVuIHRoZSBm dW5jdGlvbiBjYWxsIGxvb2tzIGxpa2UgdGhpczoKKzxwcm9ncmFtbGlzdGluZz4KKyAgIFNFTEVD VCBicmluX2luZGV4X2NoZWNrKCdpbmRleF9uYW1lJywgdHJ1ZSwgdHJ1ZSwgJz0nLCAnQD4nKTsK KzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAg ICAgICBEZWZhdWx0cyB0byBmYWxzZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0 ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVy bT4KICAgICAgPGZ1bmN0aW9uPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBlYTk1ZTc5 ODRiYy4uNzU5OWY3Zjg3MzYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zMzQsNiAr MzM0LDcgQEAgQm9vbGVhbgogQm9vbGVhblRlc3QKIEJwQ2hhcgogQnJpbkJ1aWxkU3RhdGUKK0Jy aW5DaGVja1N0YXRlCiBCcmluRGVzYwogQnJpbkluc2VydFN0YXRlCiBCcmluTGVhZGVyCi0tIAoy LjQzLjAKCg== --000000000000ff82480650082089 Content-Type: text/x-patch; charset="US-ASCII"; name="v12-0001-brin-refactoring.patch" Content-Disposition: attachment; filename="v12-0001-brin-refactoring.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo9rrpbg0 RnJvbSA5NTM4NzE3NzZhNTZlZGQ0YWI1ZWMzY2JjZTM5YzUwMWU1NDcxMTFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogV2VkLCAxNiBBcHIgMjAyNSAxMToyNjo0NSArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjEyIDEvM10gYnJpbiByZWZhY3RvcmluZwoKRm9yIGFkZGluZyBCUklOIGluZGV4IHN1 cHBvcnQgaW4gYW1jaGVjayB3ZSBuZWVkIHNvbWUgdGlueSBjaGFuZ2VzIGluIEJSSU4KY29yZSBj b2RlOgoKKiBXZSBuZWVkIHRvIGhhdmUgdHVwbGUgZGVzY3JpcHRvciBmb3Igb24tZGlzayBzdG9y YWdlIG9mIEJSSU4gdHVwbGVzLgogIEl0IGlzIGEgcHVibGljIGZpZWxkICdiZF9kaXNrdGRlc2Mn IGluIEJyaW5EZXNjLCBidXQgdG8gYWNjZXNzIGl0IHdlCiAgbmVlZCBmdW5jdGlvbiAnYnJ0dXBs ZV9kaXNrX3R1cGRlc2MnIHdoaWNoIGlzIGludGVybmFsLiBUaGlzIGNvbW1pdAogIG1ha2VzIGl0 IGV4dGVybiBhbmQgcmVuYW1lcyBpdCB0byAnYnJpbl90dXBsZV90dXBkZXNjJy4KCiogRm9yIG1l dGEgcGFnZSBjaGVjayB3ZSBuZWVkIHRvIGtub3cgcGFnZXNfcGVyX3JhbmdlIHVwcGVyIGxpbWl0 LiBJdCdzCiAgaGFyZGNvZGVkIG5vdy4gVGhpcyBjb21taXQgbW92ZXMgaXRzIHZhbHVlIHRvIG1h Y3JvcyBCUklOX01BWF9QQUdFU19QRVJfUkFOR0UKICBzbyB0aGF0IHdlIGNhbiB1c2UgaXQgaW4g YW1jaGVjayB0b28uCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jICAg fCAxMCArKysrKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyB8 ICAzICsrLQogc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4uaCAgICAgICAgICAgICAgfCAgMSArCiBz cmMvaW5jbHVkZS9hY2Nlc3MvYnJpbl90dXBsZS5oICAgICAgICB8ICAyICsrCiA0IGZpbGVzIGNo YW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2Jy aW4vYnJpbl90dXBsZS5jCmluZGV4IGFmMzlkNDQ4OTYyLi43YzdiZDZjYzk1MCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYwpAQCAtNTcsOCArNTcsOCBAQCBzdGF0aWMgaW5saW5l IHZvaWQgYnJpbl9kZWNvbnN0cnVjdF90dXBsZShCcmluRGVzYyAqYnJkZXNjLAogLyoKICAqIFJl dHVybiBhIHR1cGxlIGRlc2NyaXB0b3IgdXNlZCBmb3Igb24tZGlzayBzdG9yYWdlIG9mIEJSSU4g dHVwbGVzLgogICovCi1zdGF0aWMgVHVwbGVEZXNjCi1icnR1cGxlX2Rpc2tfdHVwZGVzYyhCcmlu RGVzYyAqYnJkZXNjKQorVHVwbGVEZXNjCiticmluX3R1cGxlX3R1cGRlc2MoQnJpbkRlc2MgKmJy ZGVzYykKIHsKIAkvKiBXZSBjYWNoZSB0aGVzZSBpbiB0aGUgQnJpbkRlc2MgKi8KIAlpZiAoYnJk ZXNjLT5iZF9kaXNrdGRlc2MgPT0gTlVMTCkKQEAgLTI4MCw3ICsyODAsNyBAQCBicmluX2Zvcm1f dHVwbGUoQnJpbkRlc2MgKmJyZGVzYywgQmxvY2tOdW1iZXIgYmxrbm8sIEJyaW5NZW1UdXBsZSAq dHVwbGUsCiAKIAlsZW4gPSBob2ZmID0gTUFYQUxJR04obGVuKTsKIAotCWRhdGFfbGVuID0gaGVh cF9jb21wdXRlX2RhdGFfc2l6ZShicnR1cGxlX2Rpc2tfdHVwZGVzYyhicmRlc2MpLAorCWRhdGFf bGVuID0gaGVhcF9jb21wdXRlX2RhdGFfc2l6ZShicmluX3R1cGxlX3R1cGRlc2MoYnJkZXNjKSwK IAkJCQkJCQkJCSAgdmFsdWVzLCBudWxscyk7CiAJbGVuICs9IGRhdGFfbGVuOwogCkBAIC0yOTks NyArMjk5LDcgQEAgYnJpbl9mb3JtX3R1cGxlKEJyaW5EZXNjICpicmRlc2MsIEJsb2NrTnVtYmVy IGJsa25vLCBCcmluTWVtVHVwbGUgKnR1cGxlLAogCSAqIG5lZWQgdG8gcGFzcyBhIHZhbGlkIG51 bGwgYml0bWFwIHNvIHRoYXQgaXQgd2lsbCBjb3JyZWN0bHkgc2tpcAogCSAqIG91dHB1dHRpbmcg bnVsbCBhdHRyaWJ1dGVzIGluIHRoZSBkYXRhIGFyZWEuCiAJICovCi0JaGVhcF9maWxsX3R1cGxl KGJydHVwbGVfZGlza190dXBkZXNjKGJyZGVzYyksCisJaGVhcF9maWxsX3R1cGxlKGJyaW5fdHVw bGVfdHVwZGVzYyhicmRlc2MpLAogCQkJCQl2YWx1ZXMsCiAJCQkJCW51bGxzLAogCQkJCQkoY2hh ciAqKSByZXR0dXBsZSArIGhvZmYsCkBAIC02ODIsNyArNjgyLDcgQEAgYnJpbl9kZWNvbnN0cnVj dF90dXBsZShCcmluRGVzYyAqYnJkZXNjLAogCSAqIG1heSByZXVzZSBhdHRyaWJ1dGUgZW50cmll cyBmb3IgbW9yZSB0aGFuIG9uZSBjb2x1bW4sIHdlIGNhbm5vdCBjYWNoZQogCSAqIG9mZnNldHMg aGVyZS4KIAkgKi8KLQlkaXNrZHNjID0gYnJ0dXBsZV9kaXNrX3R1cGRlc2MoYnJkZXNjKTsKKwlk aXNrZHNjID0gYnJpbl90dXBsZV90dXBkZXNjKGJyZGVzYyk7CiAJc3RvcmVkID0gMDsKIAlvZmYg PSAwOwogCWZvciAoYXR0bnVtID0gMDsgYXR0bnVtIDwgYnJkZXNjLT5iZF90dXBkZXNjLT5uYXR0 czsgYXR0bnVtKyspCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9w dGlvbnMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCmluZGV4IDNl ODMyYzM3OTdlLi43M2UyYTM2ZjUwNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2Nv bW1vbi9yZWxvcHRpb25zLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRp b25zLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvaGVhcHRvYXN0LmgiCiAj aW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUu aCIKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbi5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25z LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ190eXBlLmgiCkBAIC0zNzUsNyArMzc2LDcgQEAgc3RhdGljIHJlbG9wdF9pbnQgaW50UmVs T3B0c1tdID0KIAkJCSJOdW1iZXIgb2YgcGFnZXMgdGhhdCBlYWNoIHBhZ2UgcmFuZ2UgY292ZXJz IGluIGEgQlJJTiBpbmRleCIsCiAJCQlSRUxPUFRfS0lORF9CUklOLAogCQkJQWNjZXNzRXhjbHVz aXZlTG9jawotCQl9LCAxMjgsIDEsIDEzMTA3MgorCQl9LCAxMjgsIDEsIEJSSU5fTUFYX1BBR0VT X1BFUl9SQU5HRQogCX0sCiAJewogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv YnJpbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4uaAppbmRleCBhNWI0NTM0NjhkMS4uOTgx NTVmMjc5OWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2JyaW4uaApAQCAtMzgsNiArMzgsNyBAQCB0eXBlZGVmIHN0cnVjdCBC cmluU3RhdHNEYXRhCiAKIAogI2RlZmluZSBCUklOX0RFRkFVTFRfUEFHRVNfUEVSX1JBTkdFCTEy OAorI2RlZmluZSBCUklOX01BWF9QQUdFU19QRVJfUkFOR0UJMTMxMDcyCiAjZGVmaW5lIEJyaW5H ZXRQYWdlc1BlclJhbmdlKHJlbGF0aW9uKSBcCiAJKEFzc2VydE1hY3JvKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9JTkRFWCAmJiBcCiAJCQkJIHJlbGF0aW9uLT5yZF9yZWwt PnJlbGFtID09IEJSSU5fQU1fT0lEKSwgXApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2JyaW5fdHVwbGUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluX3R1cGxlLmgKaW5kZXggYzgx ODI4NmU1MjMuLjg1M2NmZWZjOTc3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJp bl90dXBsZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluX3R1cGxlLmgKQEAgLTEwOSw0 ICsxMDksNiBAQCBleHRlcm4gQnJpbk1lbVR1cGxlICpicmluX21lbXR1cGxlX2luaXRpYWxpemUo QnJpbk1lbVR1cGxlICpkdHVwbGUsCiBleHRlcm4gQnJpbk1lbVR1cGxlICpicmluX2RlZm9ybV90 dXBsZShCcmluRGVzYyAqYnJkZXNjLAogCQkJCQkJCQkJICAgQnJpblR1cGxlICp0dXBsZSwgQnJp bk1lbVR1cGxlICpkTWVtdHVwbGUpOwogCitleHRlcm4gVHVwbGVEZXNjIGJyaW5fdHVwbGVfdHVw ZGVzYyhCcmluRGVzYyAqYnJkZXNjKTsKKwogI2VuZGlmCQkJCQkJCS8qIEJSSU5fVFVQTEVfSCAq LwotLSAKMi40My4wCgo= --000000000000ff82480650082089 Content-Type: text/x-patch; charset="US-ASCII"; name="v12-0002-amcheck-common_verify-snapshot-indcheckxmin-chec.patch" Content-Disposition: attachment; filename="v12-0002-amcheck-common_verify-snapshot-indcheckxmin-chec.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo9rrpbr1 RnJvbSBjMWEyMzk5ZjgwYmM0YjlkYzk4MWRmNTliNjE1N2Q3YTEzNmRhNTE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAxMSBBcHIgMjAyNiAxNjoyMTozNyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjEyIDIvM10gYW1jaGVjazogY29tbW9uX3ZlcmlmeSAtIHNuYXBzaG90IGluZGNoZWNr eG1pbiBjaGVjawoKQWRkcyBpbmRjaGVja3htaW4gY2hlY2sgdG8gY29tbW9uX3ZlcmlmeS4gRXZl cnkgaW5kZXggbmVlZHMgaXQgZm9yIGhlYXBhbGxpbmRleGVkIGNoZWNrLgotLS0KIGNvbnRyaWIv YW1jaGVjay92ZXJpZnlfY29tbW9uLmMgfCAyNSArKysrKysrKysrKysrKysrKysrKysrKysrCiBj b250cmliL2FtY2hlY2svdmVyaWZ5X2NvbW1vbi5oIHwgIDMgKysrCiAyIGZpbGVzIGNoYW5nZWQs IDI4IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X2Nv bW1vbi5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9jb21tb24uYwppbmRleCA1NGNlOTAxNzE2 Yi4uNjkwOWQ3YWFhYTUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfY29tbW9u LmMKKysrIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9jb21tb24uYwpAQCAtMTg5LDMgKzE4OSwy OCBAQCBpbmRleF9jaGVja2FibGUoUmVsYXRpb24gcmVsLCBPaWQgYW1faWQpCiAKIAlyZXR1cm4g YW1jaGVja19pbmRleF9tYWluZm9ya19leHBlY3RlZChyZWwpOwogfQorCisvKgorICogR2V0VHJh bnNhY3Rpb25TbmFwc2hvdCgpIGFsd2F5cyBhY3F1aXJlcyBhIG5ldyBNVkNDIHNuYXBzaG90IGlu CisgKiBSRUFEIENPTU1JVFRFRCBtb2RlLiAgQSBuZXcgc25hcHNob3QgaXMgZ3VhcmFudGVlZCB0 byBoYXZlIGFsbAorICogdGhlIGVudHJpZXMgaXQgcmVxdWlyZXMgaW4gdGhlIGluZGV4LgorICoK KyAqIFdlIG11c3QgZGVmZW5kIGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYW4gb2xkIHhh Y3QKKyAqIHNuYXBzaG90IHdhcyByZXR1cm5lZCBhdCBoaWdoZXIgaXNvbGF0aW9uIGxldmVscyB3 aGVuIHRoYXQKKyAqIHNuYXBzaG90IGlzIG5vdCBzYWZlIGZvciBpbmRleCBzY2FucyBvZiB0aGUg dGFyZ2V0IGluZGV4LiAgVGhpcworICogaXMgcG9zc2libGUgd2hlbiB0aGUgc25hcHNob3Qgc2Vl cyB0dXBsZXMgdGhhdCBhcmUgYmVmb3JlIHRoZQorICogaW5kZXgncyBpbmRjaGVja3htaW4gaG9y aXpvbi4gIFRocm93aW5nIGFuIGVycm9yIGhlcmUgc2hvdWxkIGJlCisgKiB2ZXJ5IHJhcmUuICBJ dCBkb2Vzbid0IHNlZW0gd29ydGggdXNpbmcgYSBzZWNvbmRhcnkgc25hcHNob3QgdG8KKyAqIGF2 b2lkIHRoaXMuCisgKi8KK3ZvaWQKK2NoZWNrX2luZGNoZWNreG1pbihSZWxhdGlvbiBpZHhyZWws IFNuYXBzaG90IHNuYXBzaG90KQoreworCWlmIChJc29sYXRpb25Vc2VzWGFjdFNuYXBzaG90KCkg JiYgaWR4cmVsLT5yZF9pbmRleC0+aW5kY2hlY2t4bWluICYmCisJCSFUcmFuc2FjdGlvbklkUHJl Y2VkZXMoSGVhcFR1cGxlSGVhZGVyR2V0WG1pbihpZHhyZWwtPnJkX2luZGV4dHVwbGUtPnRfZGF0 YSksCisJCQkJCQkJICAgc25hcHNob3QtPnhtaW4pKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSksCisJCQkJIGVycm1zZygi aW5kZXggXCIlc1wiIGNhbm5vdCBiZSB2ZXJpZmllZCB1c2luZyB0cmFuc2FjdGlvbiBzbmFwc2hv dCIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHhyZWwpKSkpOworfQpkaWZmIC0t Z2l0IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9jb21tb24uaCBiL2NvbnRyaWIvYW1jaGVjay92 ZXJpZnlfY29tbW9uLmgKaW5kZXggNGM0ZGRjMDFhYTcuLjRhYWFlZmE2NDQ1IDEwMDY0NAotLS0g YS9jb250cmliL2FtY2hlY2svdmVyaWZ5X2NvbW1vbi5oCisrKyBiL2NvbnRyaWIvYW1jaGVjay92 ZXJpZnlfY29tbW9uLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2tkZWZzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2Fj aGUuaCIKKyNpbmNsdWRlICJ1dGlscy9zbmFwc2hvdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogCiAvKiBUeXBlZGVmIGZvciBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYW1jaGVja19sb2NrX3Jl bGF0aW9uX2FuZF9jaGVjayAqLwpAQCAtMjYsMyArMjcsNSBAQCBleHRlcm4gdm9pZCBhbWNoZWNr X2xvY2tfcmVsYXRpb25fYW5kX2NoZWNrKE9pZCBpbmRyZWxpZCwKIAkJCQkJCQkJCQkJT2lkIGFt X2lkLAogCQkJCQkJCQkJCQlJbmRleERvQ2hlY2tDYWxsYmFjayBjaGVjaywKIAkJCQkJCQkJCQkJ TE9DS01PREUgbG9ja21vZGUsIHZvaWQgKnN0YXRlKTsKKworZXh0ZXJuIHZvaWQgY2hlY2tfaW5k Y2hlY2t4bWluKFJlbGF0aW9uIGlkeHJlbCwgU25hcHNob3Qgc25hcHNob3QpOwotLSAKMi40My4w Cgo= --000000000000ff82480650082089--