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.94.2) (envelope-from ) id 1uyDVD-005E57-6r for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Sep 2025 18:00:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uyDVA-00CnVI-Gm for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Sep 2025 18:00:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uyDV9-00CnVA-M9 for pgsql-hackers@lists.postgresql.org; Mon, 15 Sep 2025 18:00:33 +0000 Received: from fhigh-a4-smtp.messagingengine.com ([103.168.172.155]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1uyDV8-000a6k-0X for pgsql-hackers@lists.postgresql.org; Mon, 15 Sep 2025 18:00:31 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.phl.internal (Postfix) with ESMTP id 2043614001D0; Mon, 15 Sep 2025 14:00:30 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Mon, 15 Sep 2025 14:00:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1757959230; x=1758045630; bh=exqaTilAIN /SiMx7Z56XELiseT1del1SuPyrf64/pWk=; b=fQ7iZjR8qtOQPNgZnDL+ZovhsL 5iupKVjEXU1KWcVvoHKi2DOI5k2WBMqk9dQJFRWjHEn8C/JOuoCKuCV5mOQS8TTF s7RKLYGPoz8UpOZ1qXIstAwBa45Kc9oZS2S5rOm89fqWnh6nWdnyNMMIscpKfIOB v/6Li4JNDVs//9/nDqJU/Rt1ZEXkdVmrU4FBIYAQQCAOQS1m1rKuU5r20NLAw0A3 6weF8nIAJiLxTcZZXtLoNjV/+3Xx83AscRwgaRZeXyHBF4T6TwRamxy3qcVbBEb6 i0yPlgDeFPjp2j8er7f+AYORh6R55SwD+Nt6/F5A6xeSANsfOCxaSELgztNw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1757959230; x=1758045630; bh=exqaTilAIN/SiMx7Z56XELiseT1del1SuPy rf64/pWk=; b=IqqWuBOkUUBbeKdon00owRIqPiGQtDCpgmZs0P5YMasMNha+cH8 /FVIIFZFHncTuuswFLN34hKIKK6rAgDCSluWQOdsvLIQQEwoHwbBSnweLWfxPDDq buH3YzAG8TY0P/blIB8nW49kF2LYmBZLSgy5NPZdVdZl/Tnx8i0OZrhHggloxKDy 5kHUywDMQ0d+uZNl4Iy5wljikWNJnWQSJwF6PpuKcy96y+cuMjLe7AmsEqHrRGHl nfRIN0U8UuwBGJHYMOtSE7ipv1FSiGjRGeSxth7Y4PILjgTOKEl8FM5YFbXhzL9N GTYZgFEf6GDu4SnPmtnV8D1pfK0zeJQsm2A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdefkeefiecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpeffhffvvefkjghfuffogggtsehmtdhmreertdejnecuhfhrohhmpefirhgvghcuuehu rhguuceoghhrvghgsegsuhhrugdrmhgvqeenucggtffrrghtthgvrhhnpeefvdfhudelud evveegheeuhfdtuedvueeiveegieejkefggfevhfekkefhtdekheenucevlhhushhtvghr ufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehgrhgvghessghurhgurdhmvg dpnhgspghrtghpthhtohepgedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepphhg shhqlhdqhhgrtghkvghrsheslhhishhtshdrphhoshhtghhrvghsqhhlrdhorhhgpdhrtg hpthhtohepnhgrthhhrghnuggsohhsshgrrhhtsehgmhgrihhlrdgtohhmpdhrtghpthht ohepshgrfigruggrrdhmshhhkhesghhmrghilhdrtghomhdprhgtphhtthhopehmihgthh grvghlsehprghquhhivghrrdighiii X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 15 Sep 2025 14:00:29 -0400 (EDT) Date: Mon, 15 Sep 2025 14:00:18 -0400 From: Greg Burd To: PostgreSQL Hackers Cc: Nathan Bossart , Masahiko Sawada , Michael Paquier Message-ID: In-Reply-To: <20200C9C-8DA3-413F-AE9A-60D6761DD060@burd.me> References: <20200C9C-8DA3-413F-AE9A-60D6761DD060@burd.me> Subject: Re: [PATCH] Add tests for Bitmapset X-Mailer: Mailspring MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="68c85432_25b860ba_6415" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --68c85432_25b860ba_6415 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Sep 13 2025, at 10:23 am, Greg Burd wrote: > =20 > Sawada-san, Michael, > =20 > Thank you both for the push to measure. =C2=A0Before the patch as it st= ands > now the > coverage for src/backend/nodes/bitmapset.c is 63.5% and after it is > 66.5%. =C2=A0Not > an amazing difference, but something.=C2=A0 I guess I expected this to = be > higher given > the degree to which this datatype is used. > =20 > I'll review the gaps in coverage and update the tests.=C2=A0 I'll look = for > a way to add meaningful randomization. > =20 > -greg Hello hackers, Here's the progress I've made in coverage for testing Bitmapset. coverage: HEAD v1 v2 lines......: 87.1 87.7 91.3 functions..: 100 100 100 branches...: 63.5 66.5 77.9 I've also added a function that performs a variety of operations using random data. =46or reference radixtree has: coverage: HEAD lines......: 98.3 =20 functions..: 97.2 branches...: 89.4 best, -greg --68c85432_25b860ba_6415 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v2-0001-Add-a-module-that-tests-Bitmapset.patch" RnJvbSA3ZWY0MDBlYzllN2FjMDg0MmE1OTNkZTAxZGI0NjJlODBkNWVmMTlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogV2VkLCAx MyBBdWcgMjAyNSAxNTo0MDozMSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIEFkZCBhIG1vZHVs ZSB0aGF0IHRlc3RzIEJpdG1hcHNldAoKQmFzaWMgdGVzdHMgZm9yIEJpdG1hcHNldCB0byBlbnN1 cmUgZnVuY3Rpb25hbGl0eSBhbmQgaGVscCBwcmV2ZW50CnVuaW50ZW50aW9uYWwgYnJlYWtpbmcg Y2hhbmdlcyBpbiB0aGUgZnV0dXJlLgotLS0KIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC8u Z2l0aWdub3JlICAgIHwgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvTWFr ZWZpbGUgICAgICB8ICAyMyArCiAuLi4vZXhwZWN0ZWQvdGVzdF9iaXRtYXBzZXQub3V0ICAgICAg ICAgICAgICAgfCAgMjQgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9tZXNvbi5i dWlsZCAgIHwgIDMzICsKIC4uLi90ZXN0X2JpdG1hcHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3Fs ICAgICB8ICAgNyArCiAuLi4vdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwg ICAgfCAgIDggKwogLi4uL21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQuYyAg IHwgNzY3ICsrKysrKysrKysrKysrKysrKwogLi4uL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFw c2V0LmNvbnRyb2wgICAgIHwgICA0ICsKIDEwIGZpbGVzIGNoYW5nZWQsIDg3MiBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC8u Z2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1h cHNldC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9i aXRtYXBzZXQvZXhwZWN0ZWQvdGVzdF9iaXRtYXBzZXQub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvc3FsL3Rlc3RfYml0bWFwc2V0 LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv dGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wKCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9N YWtlZmlsZQppbmRleCA5MDNhOGFjMTUxYS4uOTQwNzFlYzBlMTYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAt MTYsNiArMTYsNyBAQCBTVUJESVJTID0gXAogCQkgIHNwZ2lzdF9uYW1lX29wcyBcCiAJCSAgdGVz dF9haW8gXAogCQkgIHRlc3RfYmluYXJ5aGVhcCBcCisJCSAgdGVzdF9iaXRtYXBzZXQgXAogCQkg IHRlc3RfYmxvb21maWx0ZXIgXAogCQkgIHRlc3RfY29weV9jYWxsYmFja3MgXAogCQkgIHRlc3Rf Y3VzdG9tX3JtZ3JzIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQg Yi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDkzYmUwZjU3Mjg5Li5kOGY1Yzlj NzQ5NCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0xNSw2ICsxNSw3IEBAIHN1YmRpcignc3BnaXN0 X25hbWVfb3BzJykKIHN1YmRpcignc3NsX3Bhc3NwaHJhc2VfY2FsbGJhY2snKQogc3ViZGlyKCd0 ZXN0X2FpbycpCiBzdWJkaXIoJ3Rlc3RfYmluYXJ5aGVhcCcpCitzdWJkaXIoJ3Rlc3RfYml0bWFw c2V0JykKIHN1YmRpcigndGVzdF9ibG9vbWZpbHRlcicpCiBzdWJkaXIoJ3Rlc3RfY29weV9jYWxs YmFja3MnKQogc3ViZGlyKCd0ZXN0X2N1c3RvbV9ybWdycycpCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0Ly5naXRpZ25vcmUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYml0bWFwc2V0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjVkY2IzZmY5NzIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2JpdG1hcHNldC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNCBAQAorIyBHZW5lcmF0ZWQgc3Vi ZGlyZWN0b3JpZXMKKy9sb2cvCisvcmVzdWx0cy8KKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2JpdG1hcHNldC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNjcxOTlkNDBkNzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYml0bWFwc2V0L01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKKyMgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2JpdG1hcHNldC9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gdGVzdF9iaXRtYXBz ZXQKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCXRlc3RfYml0bWFwc2V0Lm8KK1BHRklMRURF U0MgPSAidGVzdF9iaXRtYXBzZXQgLSB0ZXN0IGNvZGUgZm9yIHNyYy9pbmNsdWRlL25vZGVzL2Jp dG1hcHNldC5oIgorCitFWFRFTlNJT04gPSB0ZXN0X2JpdG1hcHNldAorREFUQSA9IHRlc3RfYml0 bWFwc2V0LS0xLjAuc3FsCisKK1JFR1JFU1MgPSB0ZXN0X2JpdG1hcHNldAorCitpZmRlZiBVU0Vf UEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcp IC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2JpdG1hcHNldAordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0 b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9j b250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2JpdG1hcHNldC9leHBlY3RlZC90ZXN0X2JpdG1hcHNldC5vdXQgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L2V4cGVjdGVkL3Rlc3RfYml0bWFwc2V0Lm91dApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjI2NjlmMTQ1MDEKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L2V4cGVjdGVkL3Rlc3Rf Yml0bWFwc2V0Lm91dApAQCAtMCwwICsxLDI0IEBACitDUkVBVEUgRVhURU5TSU9OIHRlc3RfYml0 bWFwc2V0OworLS0KKy0tIEFsbCB0aGUgbG9naWMgaXMgaW4gdGhlIHRlc3RfYml0bWFwc2V0KCkg ZnVuY3Rpb24uIEl0IHdpbGwgdGhyb3cKKy0tIGFuIGVycm9yIGlmIHNvbWV0aGluZyBmYWlscy4K Ky0tCitTRUxFQ1QgdGVzdF9iaXRtYXBzZXQoKTsKK05PVElDRTogIHN0YXJ0aW5nIGJpdG1hcHNl dCB0ZXN0cworTk9USUNFOiAgdGVzdGluZyBlbXB0eSBiaXRtYXBzZXQgb3BlcmF0aW9ucworTk9U SUNFOiAgdGVzdGluZyBzaW5nbGUgZWxlbWVudCBiaXRtYXBzZXQgb3BlcmF0aW9ucworTk9USUNF OiAgdGVzdGluZyBtdWx0aXBsZSBlbGVtZW50cyBhbmQgc2V0IG9wZXJhdGlvbnMKK05PVElDRTog IHRlc3RpbmcgZXJyb3IgY29uZGl0aW9ucworTk9USUNFOiAgdGVzdGluZyBwcmV2X21lbWJlciBl ZGdlIGNhc2VzCitOT1RJQ0U6ICB0ZXN0aW5nIGVkZ2UgY2FzZXMgYW5kIGJvdW5kYXJ5IGNvbmRp dGlvbnMKK05PVElDRTogIHRlc3RpbmcgaXRlcmF0aW9uIGZ1bmN0aW9ucworTk9USUNFOiAgdGVz dGluZyBjb21wcmVoZW5zaXZlIHNldCBvcGVyYXRpb25zCitOT1RJQ0U6ICB0ZXN0aW5nIHJhbmRv bWl6ZWQgb3BlcmF0aW9ucworTk9USUNFOiAgcmFuZG9taXplZCB0ZXN0aW5nIGNvbXBsZXRlZCBz dWNjZXNzZnVsbHkKK05PVElDRTogIHRlc3RpbmcgYWR2YW5jZWQgZnVuY3Rpb25zCitOT1RJQ0U6 ICBhbGwgYml0bWFwc2V0IHRlc3RzIHBhc3NlZAorIHRlc3RfYml0bWFwc2V0IAorLS0tLS0tLS0t LS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Yml0bWFwc2V0L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9t ZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODQ4Zjdh NDRlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0 L21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3Rlc3RfYml0bWFwc2V0X3Nv dXJjZXMgPSBmaWxlcygKKyAgJ3Rlc3RfYml0bWFwc2V0LmMnLAorKQorCitpZiBob3N0X3N5c3Rl bSA9PSAnd2luZG93cycKKyAgdGVzdF9iaXRtYXBzZXRfc291cmNlcyArPSByY19saWJfZ2VuLnBy b2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Rlc3RfYml0 bWFwc2V0JywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0X2JpdG1hcHNldCAtIHRlc3QgY29kZSBm b3Igc3JjL2luY2x1ZGUvbm9kZXMvYml0bWFwc2V0LmgnLF0pCitlbmRpZgorCit0ZXN0X2JpdG1h cHNldCA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfYml0bWFwc2V0JywKKyAgdGVzdF9iaXRtYXBzZXRf c291cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21vZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xp YnMgKz0gdGVzdF9iaXRtYXBzZXQKKwordGVzdF9pbnN0YWxsX2RhdGEgKz0gZmlsZXMoCisgICd0 ZXN0X2JpdG1hcHNldC5jb250cm9sJywKKyAgJ3Rlc3RfYml0bWFwc2V0LS0xLjAuc3FsJywKKykK KwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2JpdG1hcHNldCcsCisgICdzZCc6IG1lc29u LmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2Rpcigp LAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ3Rlc3RfYml0bWFwc2V0JywK KyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1h cHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1h cHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5jZWI1MjRlZTUxYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9iaXRtYXBzZXQvc3FsL3Rlc3RfYml0bWFwc2V0LnNxbApAQCAtMCwwICsxLDcgQEAK K0NSRUFURSBFWFRFTlNJT04gdGVzdF9iaXRtYXBzZXQ7CisKKy0tCistLSBBbGwgdGhlIGxvZ2lj IGlzIGluIHRoZSB0ZXN0X2JpdG1hcHNldCgpIGZ1bmN0aW9uLiBJdCB3aWxsIHRocm93CistLSBh biBlcnJvciBpZiBzb21ldGhpbmcgZmFpbHMuCistLQorU0VMRUNUIHRlc3RfYml0bWFwc2V0KCk7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFw c2V0LS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1h cHNldC0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmE4 YWY5OTcwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFw c2V0L3Rlc3RfYml0bWFwc2V0LS0xLjAuc3FsCkBAIC0wLDAgKzEsOCBAQAorLyogc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC0tMS4wLnNxbCAqLworCistLSBj b21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JF QVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHRlc3RfYml0bWFwc2V0 IiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYml0bWFw c2V0KCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAorQVMgJ01PRFVMRV9QQVRITkFN RScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBz ZXQvdGVzdF9iaXRtYXBzZXQuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVz dF9iaXRtYXBzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzA2 MTRiZDZlNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFw c2V0L3Rlc3RfYml0bWFwc2V0LmMKQEAgLTAsMCArMSw3NjcgQEAKKy8qCisgKiB0ZXN0X2JpdG1h cHNldC5jCisgKiAgICAgIFRlc3QgbW9kdWxlIGZvciBiaXRtYXBzZXQgZGF0YSBzdHJ1Y3R1cmUK KyAqCisgKiBUaGlzIG1vZHVsZSB0ZXN0cyB0aGUgYml0bWFwc2V0IGltcGxlbWVudGF0aW9uIGlu IFBvc3RncmVTUUwsCisgKiBjb3ZlcmluZyBhbGwgcHVibGljIEFQSSBmdW5jdGlvbnMsIGVkZ2Ug Y2FzZXMsIGFuZCBtZW1vcnkgdXNhZ2UuCisgKgorICogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Jp dG1hcHNldC90ZXN0X2JpdG1hcHNldC5jCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlICJjb21tb24vcGdfcHJuZy5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5o IgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVk ZSAibm9kZXMvYml0bWFwc2V0LmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZXN0X2JpdG1hcHNldCk7CisKKyNkZWZpbmUgRVhQRUNUX1RSVUUoZXhwcikgXAor ICAgIGRvIHsgXAorICAgICAgICBpZiAoIShleHByKSkgXAorICAgICAgICAgICAgZWxvZyhFUlJP UiwgXAorICAgICAgICAgICAgICAgICAiJXMgd2FzIHVuZXhwZWN0ZWRseSBmYWxzZSBpbiBmaWxl IFwiJXNcIiBsaW5lICV1IiwgXAorICAgICAgICAgICAgICAgICAjZXhwciwgX19GSUxFX18sIF9f TElORV9fKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRVhQRUNUX0ZBTFNFKGV4cHIp IFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKGV4cHIpIFwKKyAgICAgICAgICAgIGVsb2coRVJS T1IsIFwKKyAgICAgICAgICAgICAgICAgIiVzIHdhcyB1bmV4cGVjdGVkbHkgdHJ1ZSBpbiBmaWxl IFwiJXNcIiBsaW5lICV1IiwgXAorICAgICAgICAgICAgICAgICAjZXhwciwgX19GSUxFX18sIF9f TElORV9fKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRVhQRUNUX0VRX0lOVChyZXN1 bHRfZXhwciwgZXhwZWN0ZWRfZXhwcikgXAorICAgIGRvIHsgXAorICAgICAgICBpbnQgX3Jlc3Vs dCA9IChyZXN1bHRfZXhwcik7IFwKKyAgICAgICAgaW50IF9leHBlY3RlZCA9IChleHBlY3RlZF9l eHByKTsgXAorICAgICAgICBpZiAoX3Jlc3VsdCAhPSBfZXhwZWN0ZWQpIFwKKyAgICAgICAgICAg IGVsb2coRVJST1IsIFwKKyAgICAgICAgICAgICAgICAgIiVzIHlpZWxkZWQgJWQsIGV4cGVjdGVk ICVkICglcykgaW4gZmlsZSBcIiVzXCIgbGluZSAldSIsIFwKKyAgICAgICAgICAgICAgICAgI3Jl c3VsdF9leHByLCBfcmVzdWx0LCBfZXhwZWN0ZWQsICNleHBlY3RlZF9leHByLCBfX0ZJTEVfXywg X19MSU5FX18pOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFWFBFQ1RfTlVMTChleHBy KSBcCisgICAgZG8geyBcCisgICAgICAgIGlmICgoZXhwcikgIT0gTlVMTCkgXAorICAgICAgICAg ICAgZWxvZyhFUlJPUiwgXAorICAgICAgICAgICAgICAgICAiJXMgd2FzIHVuZXhwZWN0ZWRseSBu b24tTlVMTCBpbiBmaWxlIFwiJXNcIiBsaW5lICV1IiwgXAorICAgICAgICAgICAgICAgICAjZXhw ciwgX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRVhQ RUNUX05PVF9OVUxMKGV4cHIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKChleHByKSA9PSBO VUxMKSBcCisgICAgICAgICAgICBlbG9nKEVSUk9SLCBcCisgICAgICAgICAgICAgICAgICIlcyB3 YXMgdW5leHBlY3RlZGx5IE5VTEwgaW4gZmlsZSBcIiVzXCIgbGluZSAldSIsIFwKKyAgICAgICAg ICAgICAgICAgI2V4cHIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKyAgICB9IHdoaWxlICgwKQor CisjaWZkZWYgREVCVUcKKworc3RhdGljIHZvaWQKK2Vsb2dfYml0bWFwc2V0KGludCBlbGV2ZWws IGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBCaXRtYXBzZXQgKmJtcykKK3sKKwlTdHJpbmdJbmZv RGF0YSBidWY7CisJaW50CQkJbWVtYmVyOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWluaXRT dHJpbmdJbmZvKCZidWYpOworCisJaWYgKGxhYmVsKQorCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYs ICIlczogIiwgbGFiZWwpOworCisJaWYgKCFibXNfaXNfZW1wdHkoYm1zKSkKKwl7CisJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZidWYsICd7Jyk7CisJCW1lbWJlciA9IC0xOworCQl3aGlsZSAoKG1l bWJlciA9IGJtc19uZXh0X21lbWJlcihibXMsIG1lbWJlcikpID49IDApCisJCXsKKwkJCWlmICgh Zmlyc3QpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiLCAiKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm8oJmJ1ZiwgIiVkIiwgbWVtYmVyKTsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0K KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJ30nKTsKKwl9CisJZWxzZQorCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZidWYsICJFTVBUWSIpOworCisJZWxvZyhlbGV2ZWwsICIlcyIsIGJ1 Zi5kYXRhKTsKKwlwZnJlZShidWYuZGF0YSk7Cit9CisKKyNlbmRpZgorCisvKiBUZXN0IGVycm9y IGNvbmRpdGlvbnMgZm9yIG5lZ2F0aXZlIG1lbWJlcnMgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X2Vy cm9yX2NvbmRpdGlvbnModm9pZCkKK3sKKwlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCWJvb2wJ CWVycm9yX2NhdWdodDsKKworCWVsb2coTk9USUNFLCAidGVzdGluZyBlcnJvciBjb25kaXRpb25z Iik7CisKKwkvKiBUZXN0IG5lZ2F0aXZlIG1lbWJlciBpbiBibXNfbWFrZV9zaW5nbGV0b24gKi8K KwllcnJvcl9jYXVnaHQgPSBmYWxzZTsKKwlQR19UUlkoKTsKKwl7CisJCWJtc19tYWtlX3Npbmds ZXRvbigtMSk7CisJfQorCVBHX0NBVENIKCk7CisJeworCQllcnJvcl9jYXVnaHQgPSB0cnVlOwor CQlGbHVzaEVycm9yU3RhdGUoKTsKKwl9CisJUEdfRU5EX1RSWSgpOworCUVYUEVDVF9UUlVFKGVy cm9yX2NhdWdodCk7CisKKwkvKiBUZXN0IG5lZ2F0aXZlIG1lbWJlciBpbiBibXNfaXNfbWVtYmVy ICovCisJZXJyb3JfY2F1Z2h0ID0gZmFsc2U7CisJUEdfVFJZKCk7CisJeworCQlibXNfaXNfbWVt YmVyKC01LCBibXMpOworCX0KKwlQR19DQVRDSCgpOworCXsKKwkJZXJyb3JfY2F1Z2h0ID0gdHJ1 ZTsKKwkJRmx1c2hFcnJvclN0YXRlKCk7CisJfQorCVBHX0VORF9UUlkoKTsKKwlFWFBFQ1RfVFJV RShlcnJvcl9jYXVnaHQpOworCisJLyogVGVzdCBuZWdhdGl2ZSBtZW1iZXIgaW4gYm1zX2FkZF9t ZW1iZXIgKi8KKwllcnJvcl9jYXVnaHQgPSBmYWxzZTsKKwlQR19UUlkoKTsKKwl7CisJCWJtcyA9 IGJtc19hZGRfbWVtYmVyKGJtcywgLTEwKTsKKwl9CisJUEdfQ0FUQ0goKTsKKwl7CisJCWVycm9y X2NhdWdodCA9IHRydWU7CisJCUZsdXNoRXJyb3JTdGF0ZSgpOworCX0KKwlQR19FTkRfVFJZKCk7 CisJRVhQRUNUX1RSVUUoZXJyb3JfY2F1Z2h0KTsKKworCS8qIFRlc3QgbmVnYXRpdmUgbWVtYmVy IGluIGJtc19kZWxfbWVtYmVyICovCisJZXJyb3JfY2F1Z2h0ID0gZmFsc2U7CisJUEdfVFJZKCk7 CisJeworCQlibXMgPSBibXNfZGVsX21lbWJlcihibXMsIC0yMCk7CisJfQorCVBHX0NBVENIKCk7 CisJeworCQllcnJvcl9jYXVnaHQgPSB0cnVlOworCQlGbHVzaEVycm9yU3RhdGUoKTsKKwl9CisJ UEdfRU5EX1RSWSgpOworCUVYUEVDVF9UUlVFKGVycm9yX2NhdWdodCk7CisKKwkvKiBUZXN0IG5l Z2F0aXZlIG1lbWJlciBpbiBibXNfYWRkX3JhbmdlICovCisJZXJyb3JfY2F1Z2h0ID0gZmFsc2U7 CisJUEdfVFJZKCk7CisJeworCQlibXMgPSBibXNfYWRkX3JhbmdlKGJtcywgLTUsIDEwKTsKKwl9 CisJUEdfQ0FUQ0goKTsKKwl7CisJCWVycm9yX2NhdWdodCA9IHRydWU7CisJCUZsdXNoRXJyb3JT dGF0ZSgpOworCX0KKwlQR19FTkRfVFJZKCk7CisJRVhQRUNUX1RSVUUoZXJyb3JfY2F1Z2h0KTsK KworCS8qIFRlc3QgZW1wdHkgc2V0IGVycm9yIGluIGJtc19zaW5nbGV0b25fbWVtYmVyICovCisJ ZXJyb3JfY2F1Z2h0ID0gZmFsc2U7CisJUEdfVFJZKCk7CisJeworCQlibXNfc2luZ2xldG9uX21l bWJlcihOVUxMKTsKKwl9CisJUEdfQ0FUQ0goKTsKKwl7CisJCWVycm9yX2NhdWdodCA9IHRydWU7 CisJCUZsdXNoRXJyb3JTdGF0ZSgpOworCX0KKwlQR19FTkRfVFJZKCk7CisJRVhQRUNUX1RSVUUo ZXJyb3JfY2F1Z2h0KTsKKworCS8qIFRlc3QgbXVsdGlwbGUgbWVtYmVycyBlcnJvciBpbiBibXNf c2luZ2xldG9uX21lbWJlciAqLworCWJtcyA9IGJtc19hZGRfbWVtYmVyKGJtcywgMSk7CisJYm1z ID0gYm1zX2FkZF9tZW1iZXIoYm1zLCAyKTsKKwllcnJvcl9jYXVnaHQgPSBmYWxzZTsKKwlQR19U UlkoKTsKKwl7CisJCWJtc19zaW5nbGV0b25fbWVtYmVyKGJtcyk7CisJfQorCVBHX0NBVENIKCk7 CisJeworCQllcnJvcl9jYXVnaHQgPSB0cnVlOworCQlGbHVzaEVycm9yU3RhdGUoKTsKKwl9CisJ UEdfRU5EX1RSWSgpOworCUVYUEVDVF9UUlVFKGVycm9yX2NhdWdodCk7Cit9CisKKy8qIFRlc3Qg aGFzaCBmdW5jdGlvbnMgYW5kIGFkdmFuY2VkIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyB2b2lkCit0 ZXN0X2FkdmFuY2VkX2Z1bmN0aW9ucyh2b2lkKQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxM OworCUJpdG1hcHNldCAgKmJtczIgPSBOVUxMOworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7 CisJTGlzdAkgICAqaW50X2xpc3QgPSBOSUw7CisJdWludDMyCQloYXNoMSwKKwkJCQloYXNoMjsK KwlCaXRtYXBzZXQgICpwdHIxLAorCQkJICAgKnB0cjI7CisKKwllbG9nKE5PVElDRSwgInRlc3Rp bmcgYWR2YW5jZWQgZnVuY3Rpb25zIik7CisKKwkvKiBUZXN0IGhhc2ggZnVuY3Rpb25zICovCisJ Ym1zMSA9IGJtc19hZGRfbWVtYmVyKGJtczEsIDEwKTsKKwlibXMxID0gYm1zX2FkZF9tZW1iZXIo Ym1zMSwgMjApOworCWJtczIgPSBibXNfYWRkX21lbWJlcihibXMyLCAxMCk7CisJYm1zMiA9IGJt c19hZGRfbWVtYmVyKGJtczIsIDIwKTsKKworCWhhc2gxID0gYm1zX2hhc2hfdmFsdWUoYm1zMSk7 CisJaGFzaDIgPSBibXNfaGFzaF92YWx1ZShibXMyKTsKKwlFWFBFQ1RfRVFfSU5UKGhhc2gxLCBo YXNoMik7CisKKwkvKiBUZXN0IGJpdG1hcF9oYXNoIGFuZCBiaXRtYXBfbWF0Y2ggKi8KKwlwdHIx ID0gYm1zMTsKKwlwdHIyID0gYm1zMjsKKwlFWFBFQ1RfRVFfSU5UKGJpdG1hcF9oYXNoKCZwdHIx LCBzaXplb2YoQml0bWFwc2V0ICopKSwKKwkJCQkgIGJpdG1hcF9oYXNoKCZwdHIyLCBzaXplb2Yo Qml0bWFwc2V0ICopKSk7CisJRVhQRUNUX0VRX0lOVChiaXRtYXBfbWF0Y2goJnB0cjEsICZwdHIy LCBzaXplb2YoQml0bWFwc2V0ICopKSwgMCk7CisKKwkvKiBUZXN0IGJtc19vdmVybGFwX2xpc3Qg Ki8KKwlpbnRfbGlzdCA9IGxhcHBlbmRfaW50KGludF9saXN0LCA1KTsKKwlpbnRfbGlzdCA9IGxh cHBlbmRfaW50KGludF9saXN0LCAxMCk7CisJaW50X2xpc3QgPSBsYXBwZW5kX2ludChpbnRfbGlz dCwgMzApOworCisJRVhQRUNUX1RSVUUoYm1zX292ZXJsYXBfbGlzdChibXMxLCBpbnRfbGlzdCkp OworCUVYUEVDVF9GQUxTRShibXNfb3ZlcmxhcF9saXN0KE5VTEwsIGludF9saXN0KSk7CisJRVhQ RUNUX0ZBTFNFKGJtc19vdmVybGFwX2xpc3QoYm1zMSwgTklMKSk7CisKKwkvKiBUZXN0IGJtc19h ZGRfcmFuZ2UgKi8KKwlyZXN1bHQgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDUsIDgpOworCUVYUEVD VF9FUV9JTlQoYm1zX251bV9tZW1iZXJzKHJlc3VsdCksIDQpOwkvKiA1LCA2LCA3LCA4ICovCisJ Zm9yIChpbnQgaSA9IDU7IGkgPD0gODsgaSsrKQorCQlFWFBFQ1RfVFJVRShibXNfaXNfbWVtYmVy KGksIHJlc3VsdCkpOworCWJtc19mcmVlKHJlc3VsdCk7CisKKwkvKiBUZXN0IGVtcHR5IHJhbmdl ICovCisJcmVzdWx0ID0gYm1zX2FkZF9yYW5nZShOVUxMLCAxMCwgNSk7CisJRVhQRUNUX05VTEwo cmVzdWx0KTsKKworCS8qIFRlc3QgcmVjeWNsaW5nIG9wZXJhdGlvbnMgKi8KKwlyZXN1bHQgPSBi bXNfYWRkX21lbWJlcnMoYm1zMSwgYm1zMik7CisJRVhQRUNUX1RSVUUoYm1zMSA9PSByZXN1bHQp OwkvKiBibXMxIGlzIHJlY3ljbGVkICovCisJRVhQRUNUX0VRX0lOVChibXNfbnVtX21lbWJlcnMo cmVzdWx0KSwgMik7CisKKwlyZXN1bHQgPSBibXNfcmVwbGFjZV9tZW1iZXJzKHJlc3VsdCwgYm1z Mik7CisJRVhQRUNUX1RSVUUoYm1zX2VxdWFsKHJlc3VsdCwgYm1zMikpOworCisJYm1zX2ZyZWUo cmVzdWx0KTsJCQkvKiB3aGljaCBpcyBibXMxICovCisJYm1zX2ZyZWUoYm1zMik7CisJbGlzdF9m cmVlKGludF9saXN0KTsKK30KKworLyogVGVzdCBwcmV2X21lbWJlciBlZGdlIGNhc2VzICovCitz dGF0aWMgdm9pZAordGVzdF9wcmV2X21lbWJlcl9lZGdlX2Nhc2VzKHZvaWQpCit7CisJQml0bWFw c2V0ICAqYm1zID0gTlVMTDsKKworCWVsb2coTk9USUNFLCAidGVzdGluZyBwcmV2X21lbWJlciBl ZGdlIGNhc2VzIik7CisKKwkvKiBUZXN0IHByZXZfbWVtYmVyIHdpdGggLTEgb24gZW1wdHkgc2V0 ICovCisJRVhQRUNUX0VRX0lOVChibXNfcHJldl9tZW1iZXIoYm1zLCAtMSksIC0yKTsKKworCS8q IFRlc3QgcHJldl9tZW1iZXIgd2l0aCAtMSBvbiBub24tZW1wdHkgc2V0IChmaW5kIGhpZ2hlc3Qp ICovCisJYm1zID0gYm1zX2FkZF9tZW1iZXIoYm1zLCAxMDApOworCUVYUEVDVF9FUV9JTlQoYm1z X3ByZXZfbWVtYmVyKGJtcywgLTEpLCAxMDApOworCisJYm1zX2ZyZWUoYm1zKTsKK30KKworLyog UmFuZG9taXplZCB0ZXN0aW5nIHNpbWlsYXIgdG8gdGVzdF9yYWRpeHRyZWUuYyAqLworc3RhdGlj IHZvaWQKK3Rlc3RfcmFuZG9tX29wZXJhdGlvbnModm9pZCkKK3sKKwlCaXRtYXBzZXQgICpibXMx ID0gTlVMTDsKKwlCaXRtYXBzZXQgICpibXMyID0gTlVMTDsKKwlCaXRtYXBzZXQgICpyZXN1bHQg PSBOVUxMOworCXBnX3Bybmdfc3RhdGUgc3RhdGU7CisJdWludDY0CQlzZWVkID0gR2V0Q3VycmVu dFRpbWVzdGFtcCgpOworCWludAkJCW51bV9vcHMgPSA1MDAwOworCWludAkJCW1heF9yYW5nZSA9 IDIwMDA7CisJaW50CQkgICAqbWVtYmVyczsKKwlpbnQJCQludW1fbWVtYmVycyA9IDA7CisKKwll bG9nKE5PVElDRSwgInRlc3RpbmcgcmFuZG9taXplZCBvcGVyYXRpb25zIik7CisKKwlwZ19wcm5n X3NlZWQoJnN0YXRlLCBzZWVkKTsKKwltZW1iZXJzID0gcGFsbG9jKHNpemVvZihpbnQpICogbnVt X29wcyk7CisKKwkvKiBQaGFzZSAxOiBSYW5kb20gaW5zZXJ0aW9ucyAqLworCWZvciAoaW50IGkg PSAwOyBpIDwgbnVtX29wcyAvIDI7IGkrKykKKwl7CisJCWludAkJCW1lbWJlciA9IHBnX3Bybmdf dWludDMyKCZzdGF0ZSkgJSBtYXhfcmFuZ2U7CisKKwkJaWYgKCFibXNfaXNfbWVtYmVyKG1lbWJl ciwgYm1zMSkpCisJCXsKKwkJCW1lbWJlcnNbbnVtX21lbWJlcnMrK10gPSBtZW1iZXI7CisJCQli bXMxID0gYm1zX2FkZF9tZW1iZXIoYm1zMSwgbWVtYmVyKTsKKwkJfQorCX0KKworCS8qIFBoYXNl IDI6IFJhbmRvbSBzZXQgb3BlcmF0aW9ucyAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX29w cyAvIDQ7IGkrKykKKwl7CisJCWludAkJCW1lbWJlciA9IHBnX3BybmdfdWludDMyKCZzdGF0ZSkg JSBtYXhfcmFuZ2U7CisKKwkJYm1zMiA9IGJtc19hZGRfbWVtYmVyKGJtczIsIG1lbWJlcik7CisJ fQorCisJLyogVGVzdCB1bmlvbiAqLworCXJlc3VsdCA9IGJtc191bmlvbihibXMxLCBibXMyKTsK KwlFWFBFQ1RfTk9UX05VTEwocmVzdWx0KTsKKworCS8qIFZlcmlmeSB1bmlvbiBjb250YWlucyBh bGwgbWVtYmVycyBmcm9tIGZpcnN0IHNldCAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX21l bWJlcnM7IGkrKykKKwl7CisJCWlmICghYm1zX2lzX21lbWJlcihtZW1iZXJzW2ldLCByZXN1bHQp KQorCQkJZWxvZyhFUlJPUiwgInVuaW9uIG1pc3NpbmcgbWVtYmVyICVkIiwgbWVtYmVyc1tpXSk7 CisJfQorCWJtc19mcmVlKHJlc3VsdCk7CisKKwkvKiBUZXN0IGludGVyc2VjdGlvbiAqLworCXJl c3VsdCA9IGJtc19pbnRlcnNlY3QoYm1zMSwgYm1zMik7CisJaWYgKHJlc3VsdCAhPSBOVUxMKQor CXsKKwkJaW50CQkJbWVtYmVyID0gLTE7CisKKwkJd2hpbGUgKChtZW1iZXIgPSBibXNfbmV4dF9t ZW1iZXIocmVzdWx0LCBtZW1iZXIpKSA+PSAwKQorCQl7CisJCQlpZiAoIWJtc19pc19tZW1iZXIo bWVtYmVyLCBibXMxKSB8fCAhYm1zX2lzX21lbWJlcihtZW1iZXIsIGJtczIpKQorCQkJCWVsb2co RVJST1IsICJpbnRlcnNlY3Rpb24gY29udGFpbnMgaW52YWxpZCBtZW1iZXIgJWQiLCBtZW1iZXIp OworCQl9CisJCWJtc19mcmVlKHJlc3VsdCk7CisJfQorCisJLyogUGhhc2UgMzogVGVzdCByYW5n ZSBvcGVyYXRpb25zICovCisJcmVzdWx0ID0gTlVMTDsKKwlmb3IgKGludCBpID0gMDsgaSA8IDU7 IGkrKykKKwl7CisJCWludAkJCWxvd2VyID0gcGdfcHJuZ191aW50MzIoJnN0YXRlKSAlIDEwMDsK KwkJaW50CQkJdXBwZXIgPSBsb3dlciArIChwZ19wcm5nX3VpbnQzMigmc3RhdGUpICUgMjApOwor CisJCXJlc3VsdCA9IGJtc19hZGRfcmFuZ2UocmVzdWx0LCBsb3dlciwgdXBwZXIpOworCX0KKwlp ZiAocmVzdWx0ICE9IE5VTEwpCisJeworCQlFWFBFQ1RfVFJVRShibXNfbnVtX21lbWJlcnMocmVz dWx0KSA+IDApOworCQlibXNfZnJlZShyZXN1bHQpOworCX0KKworCS8qIENsZWFudXAgKi8KKwlw ZnJlZShtZW1iZXJzKTsKKwlibXNfZnJlZShibXMxKTsKKwlibXNfZnJlZShibXMyKTsKKworCWVs b2coTk9USUNFLCAicmFuZG9taXplZCB0ZXN0aW5nIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiKTsK K30KKworLyogVGVzdCBlbXB0eSBiaXRtYXBzZXQgb3BlcmF0aW9ucyAqLworc3RhdGljIHZvaWQK K3Rlc3RfZW1wdHlfYml0bWFwc2V0KHZvaWQpCit7CisJQml0bWFwc2V0ICAqcmVzdWx0LAorCQkJ ICAgKmJtcyA9IE5VTEw7CisKKwllbG9nKE5PVElDRSwgInRlc3RpbmcgZW1wdHkgYml0bWFwc2V0 IG9wZXJhdGlvbnMiKTsKKworCS8qIFRlc3Qgb3BlcmF0aW9ucyBvbiBOVUxMIGJpdG1hcHNldCAq LworCUVYUEVDVF9UUlVFKGJtc19pc19lbXB0eShibXMpKTsKKwlFWFBFQ1RfRVFfSU5UKGJtc19u dW1fbWVtYmVycyhibXMpLCAwKTsKKwlFWFBFQ1RfRkFMU0UoYm1zX2lzX21lbWJlcigwLCBibXMp KTsKKwlFWFBFQ1RfRkFMU0UoYm1zX2lzX21lbWJlcigxLCBibXMpKTsKKwlFWFBFQ1RfRkFMU0Uo Ym1zX2lzX21lbWJlcigxMDAsIGJtcykpOworCUVYUEVDVF9FUV9JTlQoYm1zX25leHRfbWVtYmVy KGJtcywgLTEpLCAtMik7CisJRVhQRUNUX0VRX0lOVChibXNfcHJldl9tZW1iZXIoYm1zLCAtMSks IC0yKTsKKworCS8qIFRlc3QgaGFzaCBvZiBlbXB0eSBzZXQgKi8KKwlFWFBFQ1RfRVFfSU5UKGJt c19oYXNoX3ZhbHVlKGJtcyksIDApOworCisJLyogVGVzdCBjb21wYXJpc29uIHdpdGggZW1wdHkg c2V0cyAqLworCUVYUEVDVF9FUV9JTlQoYm1zX2NvbXBhcmUoYm1zLCBOVUxMKSwgMCk7CisKKwkv KiBUZXN0IGNvcHkgb2YgZW1wdHkgc2V0ICovCisJcmVzdWx0ID0gYm1zX2NvcHkoYm1zKTsKKwlF WFBFQ1RfTlVMTChyZXN1bHQpOworCisJLyogVGVzdCB1bmlvbiB3aXRoIGVtcHR5IHNldCAqLwor CXJlc3VsdCA9IGJtc191bmlvbihibXMsIE5VTEwpOworCUVYUEVDVF9OVUxMKHJlc3VsdCk7CisK KwkvKiBUZXN0IGludGVyc2VjdGlvbiB3aXRoIGVtcHR5IHNldCAqLworCXJlc3VsdCA9IGJtc19p bnRlcnNlY3QoYm1zLCBOVUxMKTsKKwlFWFBFQ1RfTlVMTChyZXN1bHQpOworCisJLyogVGVzdCBk aWZmZXJlbmNlIHdpdGggZW1wdHkgc2V0ICovCisJcmVzdWx0ID0gYm1zX2RpZmZlcmVuY2UoYm1z LCBOVUxMKTsKKwlFWFBFQ1RfTlVMTChyZXN1bHQpOworCisJLyogVGVzdCBlcXVhbCBjb21wYXJp c29uICovCisJRVhQRUNUX1RSVUUoYm1zX2VxdWFsKGJtcywgTlVMTCkpOworCUVYUEVDVF9UUlVF KGJtc19lcXVhbChOVUxMLCBibXMpKTsKKworCS8qIFRlc3Qgc3Vic2V0IG9wZXJhdGlvbnMgKi8K KwlFWFBFQ1RfVFJVRShibXNfaXNfc3Vic2V0KGJtcywgTlVMTCkpOworCUVYUEVDVF9UUlVFKGJt c19pc19zdWJzZXQoTlVMTCwgYm1zKSk7CisKKwkvKiBUZXN0IG92ZXJsYXAgKi8KKwlFWFBFQ1Rf RkFMU0UoYm1zX292ZXJsYXAoYm1zLCBOVUxMKSk7CisJRVhQRUNUX0ZBTFNFKGJtc19vdmVybGFw KE5VTEwsIGJtcykpOworfQorCisvKiBUZXN0IHNpbmdsZSBlbGVtZW50IGJpdG1hcHNldCBvcGVy YXRpb25zICovCitzdGF0aWMgdm9pZAordGVzdF9zaW5nbGVfZWxlbWVudCh2b2lkKQoreworCUJp dG1hcHNldCAgKnJlc3VsdCwKKwkJCSAgICpibXMgPSBOVUxMOworCWludAkJCXRlc3RfbWVtYmVy ID0gNDI7CisKKwllbG9nKE5PVElDRSwgInRlc3Rpbmcgc2luZ2xlIGVsZW1lbnQgYml0bWFwc2V0 IG9wZXJhdGlvbnMiKTsKKworCS8qIEFkZCBzaW5nbGUgZWxlbWVudCAqLworCWJtcyA9IGJtc19h ZGRfbWVtYmVyKGJtcywgdGVzdF9tZW1iZXIpOworCUVYUEVDVF9OT1RfTlVMTChibXMpOworCUVY UEVDVF9GQUxTRShibXNfaXNfZW1wdHkoYm1zKSk7CisJRVhQRUNUX0VRX0lOVChibXNfbnVtX21l bWJlcnMoYm1zKSwgMSk7CisJRVhQRUNUX1RSVUUoYm1zX2lzX21lbWJlcih0ZXN0X21lbWJlciwg Ym1zKSk7CisJRVhQRUNUX0ZBTFNFKGJtc19pc19tZW1iZXIodGVzdF9tZW1iZXIgLSAxLCBibXMp KTsKKwlFWFBFQ1RfRkFMU0UoYm1zX2lzX21lbWJlcih0ZXN0X21lbWJlciArIDEsIGJtcykpOwor CisJLyogVGVzdCBpdGVyYXRpb24gKi8KKwlFWFBFQ1RfRVFfSU5UKGJtc19uZXh0X21lbWJlcihi bXMsIC0xKSwgdGVzdF9tZW1iZXIpOworCUVYUEVDVF9FUV9JTlQoYm1zX25leHRfbWVtYmVyKGJt cywgdGVzdF9tZW1iZXIpLCAtMik7CisJRVhQRUNUX0VRX0lOVChibXNfcHJldl9tZW1iZXIoYm1z LCB0ZXN0X21lbWJlciArIDEpLCB0ZXN0X21lbWJlcik7CisJRVhQRUNUX0VRX0lOVChibXNfcHJl dl9tZW1iZXIoYm1zLCB0ZXN0X21lbWJlciksIC0yKTsKKworCS8qIFRlc3QgY29weSAqLworCXJl c3VsdCA9IGJtc19jb3B5KGJtcyk7CisJRVhQRUNUX05PVF9OVUxMKHJlc3VsdCk7CisJRVhQRUNU X1RSVUUoYm1zX2VxdWFsKGJtcywgcmVzdWx0KSk7CisJRVhQRUNUX1RSVUUoYm1zX2lzX21lbWJl cih0ZXN0X21lbWJlciwgcmVzdWx0KSk7CisKKwkvKiBUZXN0IG1lbWJlciBpbmRleCAqLworCUVY UEVDVF9FUV9JTlQoYm1zX21lbWJlcl9pbmRleChibXMsIDQyKSwgMCk7CisJRVhQRUNUX0VRX0lO VChibXNfbWVtYmVyX2luZGV4KGJtcywgNDMpLCAtMSk7CisKKwkvKiBUZXN0IGNvbXBhcmlzb24g Ki8KKwlFWFBFQ1RfRVFfSU5UKGJtc19jb21wYXJlKGJtcywgcmVzdWx0KSwgMCk7CisKKwkvKiBU ZXN0IHJlbW92ZSBtZW1iZXIgKi8KKwlyZXN1bHQgPSBibXNfZGVsX21lbWJlcihyZXN1bHQsIHRl c3RfbWVtYmVyKTsKKwlFWFBFQ1RfTlVMTChyZXN1bHQpOworCisJLyogVGVzdCBjb21wYXJpc29u IGFnYWluICovCisJRVhQRUNUX0VRX0lOVChibXNfY29tcGFyZShibXMsIHJlc3VsdCksIDEpOwor CisJLyogVGVzdCByZW1vdmUgbm9uLWV4aXN0ZW50IG1lbWJlciAqLworCXJlc3VsdCA9IGJtc19j b3B5KGJtcyk7CisJRVhQRUNUX05PVF9OVUxMKHJlc3VsdCk7CisJcmVzdWx0ID0gYm1zX2RlbF9t ZW1iZXIocmVzdWx0LCB0ZXN0X21lbWJlciArIDEpOworCUVYUEVDVF9OT1RfTlVMTChyZXN1bHQp OworCUVYUEVDVF9UUlVFKGJtc19lcXVhbChibXMsIHJlc3VsdCkpOworCisJYm1zX2ZyZWUoYm1z KTsKKwlibXNfZnJlZShyZXN1bHQpOworfQorCisvKiBUZXN0IG11bHRpcGxlIGVsZW1lbnRzIGFu ZCBzZXQgb3BlcmF0aW9ucyAqLworc3RhdGljIHZvaWQKK3Rlc3RfbXVsdGlwbGVfZWxlbWVudHMo dm9pZCkKK3sKKwlCaXRtYXBzZXQgICpibXMxID0gTlVMTDsKKwlCaXRtYXBzZXQgICpibXMyID0g TlVMTDsKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOworCWludAkJCWVsZW1lbnRzMVtdID0g ezEsIDUsIDEwLCAxNSwgMjAsIDEwMH07CisJaW50CQkJZWxlbWVudHMyW10gPSB7MywgNSwgMTIs IDE1LCAyNSwgMjAwfTsKKwlpbnQJCQludW1fZWxlbWVudHMxID0gc2l6ZW9mKGVsZW1lbnRzMSkg LyBzaXplb2YoZWxlbWVudHMxWzBdKTsKKwlpbnQJCQludW1fZWxlbWVudHMyID0gc2l6ZW9mKGVs ZW1lbnRzMikgLyBzaXplb2YoZWxlbWVudHMyWzBdKTsKKworCWVsb2coTk9USUNFLCAidGVzdGlu ZyBtdWx0aXBsZSBlbGVtZW50cyBhbmQgc2V0IG9wZXJhdGlvbnMiKTsKKworCS8qIEJ1aWxkIGZp cnN0IHNldCAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2VsZW1lbnRzMTsgaSsrKQorCQli bXMxID0gYm1zX2FkZF9tZW1iZXIoYm1zMSwgZWxlbWVudHMxW2ldKTsKKworCUVYUEVDVF9FUV9J TlQoYm1zX251bV9tZW1iZXJzKGJtczEpLCBudW1fZWxlbWVudHMxKTsKKworCS8qIEJ1aWxkIHNl Y29uZCBzZXQgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9lbGVtZW50czI7IGkrKykKKwkJ Ym1zMiA9IGJtc19hZGRfbWVtYmVyKGJtczIsIGVsZW1lbnRzMltpXSk7CisKKwlFWFBFQ1RfRVFf SU5UKGJtc19udW1fbWVtYmVycyhibXMyKSwgbnVtX2VsZW1lbnRzMik7CisKKwkvKiBUZXN0IG1l bWJlcnNoaXAgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9lbGVtZW50czE7IGkrKykKKwkJ RVhQRUNUX1RSVUUoYm1zX2lzX21lbWJlcihlbGVtZW50czFbaV0sIGJtczEpKTsKKworCWZvciAo aW50IGkgPSAwOyBpIDwgbnVtX2VsZW1lbnRzMjsgaSsrKQorCQlFWFBFQ1RfVFJVRShibXNfaXNf bWVtYmVyKGVsZW1lbnRzMltpXSwgYm1zMikpOworCisJLyogVGVzdCB1bmlvbiAqLworCXJlc3Vs dCA9IGJtc191bmlvbihibXMxLCBibXMyKTsKKwlFWFBFQ1RfTk9UX05VTEwocmVzdWx0KTsKKwlm b3IgKGludCBpID0gMDsgaSA8IG51bV9lbGVtZW50czE7IGkrKykKKwkJRVhQRUNUX1RSVUUoYm1z X2lzX21lbWJlcihlbGVtZW50czFbaV0sIHJlc3VsdCkpOworCWZvciAoaW50IGkgPSAwOyBpIDwg bnVtX2VsZW1lbnRzMjsgaSsrKQorCQlFWFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKGVsZW1lbnRz MltpXSwgcmVzdWx0KSk7CisJRVhQRUNUX0VRX0lOVChibXNfbnVtX21lbWJlcnMocmVzdWx0KSwg MTApOyAvKiAxLDMsNSwxMCwxMiwxNSwyMCwyNSwxMDAsMjAwICovCisJYm1zX2ZyZWUocmVzdWx0 KTsKKworCS8qIFRlc3QgaW50ZXJzZWN0aW9uICovCisJcmVzdWx0ID0gYm1zX2ludGVyc2VjdChi bXMxLCBibXMyKTsKKwlFWFBFQ1RfTk9UX05VTEwocmVzdWx0KTsKKwlFWFBFQ1RfVFJVRShibXNf aXNfbWVtYmVyKDUsIHJlc3VsdCkpOworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1iZXIoMTUsIHJl c3VsdCkpOworCUVYUEVDVF9FUV9JTlQoYm1zX251bV9tZW1iZXJzKHJlc3VsdCksIDIpOwkvKiA1 LCAxNSAqLworCWJtc19mcmVlKHJlc3VsdCk7CisKKwkvKiBUZXN0IGRpZmZlcmVuY2UgKi8KKwly ZXN1bHQgPSBibXNfZGlmZmVyZW5jZShibXMxLCBibXMyKTsKKwlFWFBFQ1RfTk9UX05VTEwocmVz dWx0KTsKKwlFWFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKDEsIHJlc3VsdCkpOworCUVYUEVDVF9U UlVFKGJtc19pc19tZW1iZXIoMTAsIHJlc3VsdCkpOworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1i ZXIoMjAsIHJlc3VsdCkpOworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1iZXIoMTAwLCByZXN1bHQp KTsKKwlFWFBFQ1RfRkFMU0UoYm1zX2lzX21lbWJlcig1LCByZXN1bHQpKTsKKwlFWFBFQ1RfRkFM U0UoYm1zX2lzX21lbWJlcigxNSwgcmVzdWx0KSk7CisJRVhQRUNUX0VRX0lOVChibXNfbnVtX21l bWJlcnMocmVzdWx0KSwgNCk7CS8qIDEsIDEwLCAyMCwgMTAwICovCisJYm1zX2ZyZWUocmVzdWx0 KTsKKworCS8qIFRlc3Qgb3ZlcmxhcCAqLworCUVYUEVDVF9UUlVFKGJtc19vdmVybGFwKGJtczEs IGJtczIpKTsKKworCS8qIFRlc3Qgc3Vic2V0IG9wZXJhdGlvbnMgKi8KKwlyZXN1bHQgPSBOVUxM OworCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwgNSk7CisJcmVzdWx0ID0gYm1zX2Fk ZF9tZW1iZXIocmVzdWx0LCAxNSk7CisJRVhQRUNUX1RSVUUoYm1zX2lzX3N1YnNldChyZXN1bHQs IGJtczEpKTsKKwlFWFBFQ1RfVFJVRShibXNfaXNfc3Vic2V0KHJlc3VsdCwgYm1zMikpOworCUVY UEVDVF9GQUxTRShibXNfaXNfc3Vic2V0KGJtczEsIHJlc3VsdCkpOworCWJtc19mcmVlKHJlc3Vs dCk7CisKKwkvKiBUZXN0IHN1YnNldCBjb21wYXJpc29uICovCisJYm1zMiA9IGJtc19hZGRfbWVt YmVyKE5VTEwsIDUpOworCUVYUEVDVF9FUV9JTlQoYm1zX3N1YnNldF9jb21wYXJlKGJtczIsIGJt czEpLCBCTVNfU1VCU0VUMSk7CisJRVhQRUNUX0VRX0lOVChibXNfc3Vic2V0X2NvbXBhcmUoYm1z MSwgYm1zMiksIEJNU19TVUJTRVQyKTsKKworCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKE5VTEws IDk5OSk7CisJRVhQRUNUX0VRX0lOVChibXNfc3Vic2V0X2NvbXBhcmUoYm1zMiwgcmVzdWx0KSwg Qk1TX0RJRkZFUkVOVCk7CisJYm1zX2ZyZWUocmVzdWx0KTsKKworCWJtc19mcmVlKGJtczEpOwor CWJtc19mcmVlKGJtczIpOworfQorCisvKiBUZXN0IGVkZ2UgY2FzZXMgYW5kIGJvdW5kYXJ5IGNv bmRpdGlvbnMgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X2VkZ2VfY2FzZXModm9pZCkKK3sKKwlpbnQJ CQlsYXJnZV9lbGVtZW50ID0gMTAwMDA7CisJaW50CQkJY291bnQ7CisJaW50CQkJbWVtYmVyOwor CUJpdG1hcHNldCAgKnJlc3VsdDsKKwlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCisJZWxvZyhO T1RJQ0UsICJ0ZXN0aW5nIGVkZ2UgY2FzZXMgYW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMiKTsKKwor CS8qIFRlc3QgZWxlbWVudCAwICovCisJYm1zID0gYm1zX2FkZF9tZW1iZXIoYm1zLCAwKTsKKwlF WFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKDAsIGJtcykpOworCUVYUEVDVF9FUV9JTlQoYm1zX251 bV9tZW1iZXJzKGJtcyksIDEpOworCUVYUEVDVF9FUV9JTlQoYm1zX25leHRfbWVtYmVyKGJtcywg LTEpLCAwKTsKKwlibXNfZnJlZShibXMpOworCWJtcyA9IE5VTEw7CisKKwkvKiBUZXN0IGxhcmdl IGVsZW1lbnQgbnVtYmVycyAqLworCWJtcyA9IGJtc19hZGRfbWVtYmVyKGJtcywgbGFyZ2VfZWxl bWVudCk7CisJRVhQRUNUX1RSVUUoYm1zX2lzX21lbWJlcihsYXJnZV9lbGVtZW50LCBibXMpKTsK KwlFWFBFQ1RfRVFfSU5UKGJtc19udW1fbWVtYmVycyhibXMpLCAxKTsKKwlibXNfZnJlZShibXMp OworCWJtcyA9IE5VTEw7CisKKwkvKiBUZXN0IGFkZGluZyBzYW1lIGVsZW1lbnQgbXVsdGlwbGUg dGltZXMgKi8KKwlibXMgPSBibXNfYWRkX21lbWJlcihibXMsIDQyKTsKKwlibXMgPSBibXNfYWRk X21lbWJlcihibXMsIDQyKTsKKwlFWFBFQ1RfRVFfSU5UKGJtc19udW1fbWVtYmVycyhibXMpLCAx KTsKKwlFWFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKDQyLCBibXMpKTsKKwlibXNfZnJlZShibXMp OworCWJtcyA9IE5VTEw7CisKKwkvKiBUZXN0IHJlbW92aW5nIGZyb20gc2luZ2xlLWVsZW1lbnQg c2V0ICovCisJYm1zID0gYm1zX2FkZF9tZW1iZXIoYm1zLCA5OSk7CisJcmVzdWx0ID0gYm1zX2Rl bF9tZW1iZXIoYm1zLCA5OSk7CisJRVhQRUNUX05VTEwocmVzdWx0KTsKKwlibXNfZnJlZShibXMp OworCWJtcyA9IE5VTEw7CisKKwkvKiBUZXN0IGRlbnNlIHJhbmdlICovCisJZm9yIChpbnQgaSA9 IDA7IGkgPCA2NDsgaSsrKQorCQlibXMgPSBibXNfYWRkX21lbWJlcihibXMsIGkpOworCUVYUEVD VF9FUV9JTlQoYm1zX251bV9tZW1iZXJzKGJtcyksIDY0KTsKKworCS8qIFRlc3QgaXRlcmF0aW9u IG92ZXIgZGVuc2UgcmFuZ2UgKi8KKwljb3VudCA9IDA7CisJbWVtYmVyID0gLTE7CisJd2hpbGUg KChtZW1iZXIgPSBibXNfbmV4dF9tZW1iZXIoYm1zLCBtZW1iZXIpKSA+PSAwKQorCXsKKwkJRVhQ RUNUX0VRX0lOVChtZW1iZXIsIGNvdW50KTsKKwkJY291bnQrKzsKKwl9CisJRVhQRUNUX0VRX0lO VChjb3VudCwgNjQpOworCisJYm1zX2ZyZWUoYm1zKTsKK30KKworLyogVGVzdCBpdGVyYXRvciBm dW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X2l0ZXJhdGlvbih2b2lkKQoreworCUJpdG1h cHNldCAgKmJtcyA9IE5VTEw7CisJaW50CQkJbWVtYmVyOworCWludAkJCWluZGV4OworCWludAkJ CWVsZW1lbnRzW10gPSB7MiwgNywgMTUsIDMxLCA2MywgMTI3LCAyNTUsIDUxMSwgMTAyM307CisJ aW50CQkJbnVtX2VsZW1lbnRzID0gc2l6ZW9mKGVsZW1lbnRzKSAvIHNpemVvZihlbGVtZW50c1sw XSk7CisKKwllbG9nKE5PVElDRSwgInRlc3RpbmcgaXRlcmF0aW9uIGZ1bmN0aW9ucyIpOworCisJ LyogQnVpbGQgdGVzdCBzZXQgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9lbGVtZW50czsg aSsrKQorCQlibXMgPSBibXNfYWRkX21lbWJlcihibXMsIGVsZW1lbnRzW2ldKTsKKworCS8qIFRl c3QgZm9yd2FyZCBpdGVyYXRpb24gKi8KKwltZW1iZXIgPSAtMTsKKwlpbmRleCA9IDA7CisJd2hp bGUgKChtZW1iZXIgPSBibXNfbmV4dF9tZW1iZXIoYm1zLCBtZW1iZXIpKSA+PSAwKQorCXsKKwkJ RVhQRUNUX0VRX0lOVChtZW1iZXIsIGVsZW1lbnRzW2luZGV4XSk7CisJCWluZGV4Kys7CisJfQor CUVYUEVDVF9FUV9JTlQoaW5kZXgsIG51bV9lbGVtZW50cyk7CisKKwkvKiBUZXN0IGJhY2t3YXJk IGl0ZXJhdGlvbiAqLworCW1lbWJlciA9IGJtcy0+bndvcmRzICogQklUU19QRVJfQklUTUFQV09S RDsKKwlpbmRleCA9IG51bV9lbGVtZW50cyAtIDE7CisJd2hpbGUgKChtZW1iZXIgPSBibXNfcHJl dl9tZW1iZXIoYm1zLCBtZW1iZXIpKSA+PSAwKQorCXsKKwkJRVhQRUNUX0VRX0lOVChtZW1iZXIs IGVsZW1lbnRzW2luZGV4XSk7CisJCWluZGV4LS07CisJfQorCUVYUEVDVF9FUV9JTlQoaW5kZXgs IC0xKTsKKworCS8qIFRlc3QgaXRlcmF0aW9uIGJvdW5kcyAqLworCUVYUEVDVF9FUV9JTlQoYm1z X25leHRfbWVtYmVyKGJtcywgMTAyMyksIC0yKTsKKwlFWFBFQ1RfRVFfSU5UKGJtc19wcmV2X21l bWJlcihibXMsIDIpLCAtMik7CisKKwlibXNfZnJlZShibXMpOworfQorCisvKiBUZXN0IHNldCBv cGVyYXRpb25zIHdpdGggdmFyaW91cyBjb21iaW5hdGlvbnMgKi8KK3N0YXRpYyB2b2lkCit0ZXN0 X3NldF9vcGVyYXRpb25zKHZvaWQpCit7CisJQml0bWFwc2V0ICAqZW1wdHkgPSBOVUxMOworCUJp dG1hcHNldCAgKnNpbmdsZSA9IE5VTEw7CisJQml0bWFwc2V0ICAqbXVsdGkgPSBOVUxMOworCUJp dG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisJQml0bWFwc2V0ICAqc2luZ2xlX2NvcHkgPSBOVUxM OworCisJZWxvZyhOT1RJQ0UsICJ0ZXN0aW5nIGNvbXByZWhlbnNpdmUgc2V0IG9wZXJhdGlvbnMi KTsKKworCXNpbmdsZSA9IGJtc19tYWtlX3NpbmdsZXRvbigxMCk7CisJbXVsdGkgPSBibXNfYWRk X3JhbmdlKG11bHRpLCA5LCAxMSk7CisKKwlyZXN1bHQgPSBibXNfdW5pb24oc2luZ2xlLCBtdWx0 aSk7CisJRVhQRUNUX0VRX0lOVChibXNfbnVtX21lbWJlcnMoc2luZ2xlKSwgMSk7CisJRVhQRUNU X0VRX0lOVChibXNfbnVtX21lbWJlcnMobXVsdGkpLCAzKTsKKwlFWFBFQ1RfRVFfSU5UKGJtc19u dW1fbWVtYmVycyhyZXN1bHQpLCAzKTsKKwlFWFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKDksIHJl c3VsdCkpOworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1iZXIoMTAsIHJlc3VsdCkpOworCUVYUEVD VF9UUlVFKGJtc19pc19tZW1iZXIoMTEsIHJlc3VsdCkpOworCWJtc19mcmVlKHJlc3VsdCk7CisK KwkvKiBVbmlvbiBvcGVyYXRpb25zICovCisJcmVzdWx0ID0gYm1zX3VuaW9uKGVtcHR5LCBzaW5n bGUpOworCUVYUEVDVF9UUlVFKGJtc19lcXVhbChyZXN1bHQsIHNpbmdsZSkpOworCWJtc19mcmVl KHJlc3VsdCk7CisKKwlyZXN1bHQgPSBibXNfdW5pb24oc2luZ2xlLCBlbXB0eSk7CisJRVhQRUNU X1RSVUUoYm1zX2VxdWFsKHJlc3VsdCwgc2luZ2xlKSk7CisJYm1zX2ZyZWUocmVzdWx0KTsKKwor CS8qIEludGVyc2VjdGlvbiBvcGVyYXRpb25zICovCisJcmVzdWx0ID0gYm1zX2ludGVyc2VjdChl bXB0eSwgc2luZ2xlKTsKKwlFWFBFQ1RfTlVMTChyZXN1bHQpOworCisJcmVzdWx0ID0gYm1zX2lu dGVyc2VjdChzaW5nbGUsIG11bHRpKTsKKwlFWFBFQ1RfRVFfSU5UKGJtc19udW1fbWVtYmVycyhy ZXN1bHQpLCAxKTsKKwlFWFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKDEwLCByZXN1bHQpKTsKKwli bXNfZnJlZShyZXN1bHQpOworCisJLyogRGlmZmVyZW5jZSBvcGVyYXRpb25zICovCisJcmVzdWx0 ID0gYm1zX2RpZmZlcmVuY2Uoc2luZ2xlLCBtdWx0aSk7CisJRVhQRUNUX05VTEwocmVzdWx0KTsK KworCXJlc3VsdCA9IGJtc19kaWZmZXJlbmNlKG11bHRpLCBzaW5nbGUpOworCUVYUEVDVF9FUV9J TlQoYm1zX251bV9tZW1iZXJzKHJlc3VsdCksIDIpOworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1i ZXIoOSwgcmVzdWx0KSk7CisJRVhQRUNUX0ZBTFNFKGJtc19pc19tZW1iZXIoMTAsIHJlc3VsdCkp OworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1iZXIoMTEsIHJlc3VsdCkpOworCWJtc19mcmVlKHJl c3VsdCk7CisKKwkvKiBFcXVhbGl0eSB0ZXN0cyAqLworCUVYUEVDVF9GQUxTRShibXNfZXF1YWwo c2luZ2xlLCBtdWx0aSkpOworCUVYUEVDVF9UUlVFKGJtc19lcXVhbChlbXB0eSwgTlVMTCkpOwor CisJc2luZ2xlX2NvcHkgPSBibXNfY29weShzaW5nbGUpOworCUVYUEVDVF9UUlVFKGJtc19lcXVh bChzaW5nbGUsIHNpbmdsZV9jb3B5KSk7CisJYm1zX2ZyZWUoc2luZ2xlX2NvcHkpOworCisJYm1z X2ZyZWUoc2luZ2xlKTsKKwlibXNfZnJlZShtdWx0aSk7Cit9CisKKy8qIE1haW4gdGVzdCBmdW5j dGlvbiAqLworRGF0dW0KK3Rlc3RfYml0bWFwc2V0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJZWxv ZyhOT1RJQ0UsICJzdGFydGluZyBiaXRtYXBzZXQgdGVzdHMiKTsKKworCXRlc3RfZW1wdHlfYml0 bWFwc2V0KCk7CisJdGVzdF9zaW5nbGVfZWxlbWVudCgpOworCXRlc3RfbXVsdGlwbGVfZWxlbWVu dHMoKTsKKwl0ZXN0X2Vycm9yX2NvbmRpdGlvbnMoKTsKKwl0ZXN0X3ByZXZfbWVtYmVyX2VkZ2Vf Y2FzZXMoKTsKKwl0ZXN0X2VkZ2VfY2FzZXMoKTsKKwl0ZXN0X2l0ZXJhdGlvbigpOworCXRlc3Rf c2V0X29wZXJhdGlvbnMoKTsKKwl0ZXN0X3JhbmRvbV9vcGVyYXRpb25zKCk7CisJdGVzdF9hZHZh bmNlZF9mdW5jdGlvbnMoKTsKKworCWVsb2coTk9USUNFLCAiYWxsIGJpdG1hcHNldCB0ZXN0cyBw YXNzZWQiKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhkMDJlYzhiZjBhCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5jb250cm9s CkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIEJpdG1hcHNldCcKK2Rl ZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci90ZXN0X2Jp dG1hcHNldCcKK3JlbG9jYXRhYmxlID0gdHJ1ZQotLSAKMi40OS4wCgo= --68c85432_25b860ba_6415--