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 1tN5DX-008S8R-57 for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Dec 2024 07:08: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 1tN5DU-003mJU-A2 for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Dec 2024 07:08:33 +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.94.2) (envelope-from ) id 1tN5DT-003mJM-Ps for pgsql-hackers@lists.postgresql.org; Mon, 16 Dec 2024 07:08:33 +0000 Received: from mail-vk1-xa2a.google.com ([2607:f8b0:4864:20::a2a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tN5DR-0036Gx-EE for pgsql-hackers@lists.postgresql.org; Mon, 16 Dec 2024 07:08:32 +0000 Received: by mail-vk1-xa2a.google.com with SMTP id 71dfb90a1353d-518c46cc6e4so932774e0c.3 for ; Sun, 15 Dec 2024 23:08:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734332907; x=1734937707; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=TizfaEBgkG0ZhNNzCXKOF62+XQMrBBNzwjQIM/BM9iI=; b=EhalMgtsJ3jkN2WfK1EHM7WDdJPfPAQjUuMUYggOpLTNjvAh29sT0fTYZis3NEzrKn G9+9+hRS96lkGGHWjXxUthEjOuRJ56cUoiZ7E+Upa5s35du8a5VkJBVvNRq7YELjS9EQ SwaFjEK2MJK8cJeZPSFMWmL+ngJpmDFTIEp6OLEX+LzAWOtO7uvPzNqK17aji/CgVxeU F2ttelf7yJqTHGiOZXM3BfoimxiZ8Ujs0bkn4ObCMRnzRBXEy2CVcsdF0C4SsmOf5Fxp UB0dsEgfI+yNCYn3GwBoZ26+67R0THbbQwoIRhyI6KdbF1McXoT4SRB9kgpboATT/rmG lzSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734332907; x=1734937707; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=TizfaEBgkG0ZhNNzCXKOF62+XQMrBBNzwjQIM/BM9iI=; b=fGVVRINpoGjTnO0uhaeM9OgiWupwda1pGuB92SigzvDbKT5Tgm6CPxCSiiVsz+K2cq evzSAI4v3NwUK7xDpAd+IKocTT4yRdne5X2/WIWlC+StOTJGhnbb/l3ysL09rU0E8ZAX RhpbEr0pC2RlJC6C9igpyMYnfGxczhfVNIJhGcwO/AbEeaLp9/hdX0HX11I18nojIQp7 d7a+9zlpk70wnJ8MxYpF2RSXDZh1Vxgb4FQiXdIAot9GHgN/wbGGPxCCikPL6yaxEweD I+2toaZ4q1YpIIHTa38EOsd4gIM6jBDAtJkdf3sqzBy6BkB3EnHk/G9zEoy/jhDLf6xb xQjw== X-Gm-Message-State: AOJu0Yz4poYSLb+5iqzM06hwqBL0sGMtX5kJn4csYQ5hux3jMwCndpWN CZpcMgCVSKvmWFaIjoc8TgMKPwl9EuyR1jC1xv+Q1h7Qo/JQP+T4OjzLRKKL74QHW3O9Pb4qglC fRjoYmrX9MRkJaVPCAhoZu/pjOEwSEBz2 X-Gm-Gg: ASbGnctJFbd2E4Q6wLExcrJevt9jpUPzjfjNWwwiIWq3kIglfvts8gxfHOIESibonhX mc0xy7vvcqAAilz6wKxCkAxQAMytklbwusw1KKdU= X-Google-Smtp-Source: AGHT+IGghyIIQGXRg4Z8u8a/A6BtuXpIvcJyfTTjcdganJVlOtMPKINVaT803b4C9elZ7+gGi7pMmNxzsdDPHfnkfsI= X-Received: by 2002:a05:6122:3106:b0:514:eeba:517 with SMTP id 71dfb90a1353d-518ca481d0cmr7898353e0c.10.1734332907458; Sun, 15 Dec 2024 23:08:27 -0800 (PST) MIME-Version: 1.0 From: jian he Date: Mon, 16 Dec 2024 15:07:51 +0800 Message-ID: Subject: using index to speedup add not null constraints to a table To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000df370c06295dd8f7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000df370c06295dd8f7 Content-Type: text/plain; charset="UTF-8" hi. context: i was trying to speedup add check constraint then Sergei Kornilov sent me a link: [1]. so i studied that thread, then tried to implement $SUBJECT. obviously not using SPI at all. the logic is mentioned [2]: """ we could try an index scan - via index_beginscan() / index_getnext() / index_endscan() - trying to pull exactly one null from the index, and judge whether or not there are nulls present based only whether we get one. This would be a lot cheaper than scanning a large table, but it needs some careful thought because of visibility issues. """ Currently, if the leading key column of an index is the same as the column with the NOT NULL constraint, then $SUBJECT applies. so the following test case, the $SUBJECT applies: create index t_idx_ab on t(a,b); alter table t add constraint t1 not null a; However, query: alter table t add constraint t1 not null b; $SUBEJCT does not apply, since "b" is not the leading column of the index. (It is possible that this could be implemented. So I missed something....) This approach will not work for partitioned tables, as ALTER TABLE ALTER COLUMN SET EXPRESSION may trigger an index rebuild. We cannot perform an index scan if the index will be rebuilt later. In the future, if we determine that the column being rebuilt in the index is the same as the column to which the NOT NULL constraint is being added, then $SUBJECT can also be applied to partitioned tables. based on [3], I wrote some isolation tests to address concurrency issues. however since add not-null constraint takes ACCESS EXCLUSIVE lock, so there is less anomaly can happen? PERFORMANCE: --100% bloat and zero null bloat value: drop table if exists t \; create unlogged table t(a int, b int, c int) \; create index t_idx_a on t(a); insert into t select g, g+1 from generate_series(1,1_000_000) g; delete from t; alter table t add constraint t1 not null a; with patch Time: 1.873 ms master Time: 648.312 ms comments are welcome. [1] https://www.postgresql.org/message-id/9878.1511970441%40sss.pgh.pa.us [2] https://postgr.es/m/CA%2BTgmoa5NKz8iGW_9v7wz%3D-%2BzQFu%3DE4SZoaTaU1znLaEXRYp-Q%40mail.gmail.com [3] https://postgr.es/m/900056D1-32DF-4927-8251-3E0C0DC407FD%40anarazel.de --000000000000df370c06295dd8f7 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-using-index-to-speedup-add-not-null-constraint-to.patch" Content-Disposition: attachment; filename="v1-0001-using-index-to-speedup-add-not-null-constraint-to.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m4qoxyc00 RnJvbSA0NzZjZWUxMDUzMTMzMGZhOGQ4M2FhOTQwYzIyN2RlYWFhZDhhYjQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTYgRGVjIDIwMjQgMTU6MDM6MTggKzA4MDAKU3ViamVjdDogW1BBVENIIHYx IDEvMV0gdXNpbmcgaW5kZXggdG8gc3BlZWR1cCBhZGQgbm90IG51bGwgY29uc3RyYWludCB0byBh CiB0YWJsZQoKVGhpcyBwYXRjaCB0cnlpbmcgdG8gdXNlIGluZGV4X2JlZ2luc2NhbigpIC8gaW5k ZXhfZ2V0bmV4dCgpIC8gaW5kZXhfZW5kc2NhbigpIG1lbnRpb25lZCBpbiBbMV0KdG8gc3BlZWR1 cCBhZGQgbm90LW51bGwgY29uc3RyYWludHMgdG8gdGhlIGV4aXN0aW5nIHRhYmxlLgoKdGhlcmUg YXJlIHR3byB3YXlzIHRvIGFkZCBub3QtbnVsbCBjb25zdHJhaW50cyB0byBhbiBleGlzdGluZyB0 YWJsZS4KMS4gQVRFeGVjQWRkQ29uc3RyYWludC0+QVRBZGRDaGVja05OQ29uc3RyYWludC0+QWRk UmVsYXRpb25OZXdDb25zdHJhaW50cwoyLiBBVEV4ZWNTZXROb3ROdWxsLT5BZGRSZWxhdGlvbk5l d0NvbnN0cmFpbnRzCgp0aGUgbG9naWMgaXM6CjEuIEluIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWlu dHMsIGlmIGNvbmRpdGlvbiBtZWV0IChzZWUgZ2V0X2luZGV4X2Zvcl92YWxpZGF0ZV9ub3RudWxs KQogICB0aGVuIGF0dGVtcHQgdG8gdXNlIGluZGV4c2NhbiB0byBwcmVjaGVjayB3aGV0aGVyIHRo ZSBjb2x1bW4gaXMgTk9UIE5VTEwuCjIuIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMgcmV0dXJu ZWQgYSBsaXN0IG9mIENvb2tlZENvbnN0cmFpbnQgbm9kZXMuIHBhc3Mgbm90LW51bGwgY29va2Vk IGNvbnN0cmFpbnQKICAgdG8gdGFiLT5jb25zdHJhaW50cyAoYSBsaXN0IG9mIE5ld0NvbnN0cmFp bnQpLiBjb2RlIHNuaXBwZXQ6CglpZiAoIWNjb24tPnNraXBfdmFsaWRhdGlvbikKICAgIHsKCQlu ZXdjb24gPSAoTmV3Q29uc3RyYWludCAqKSBwYWxsb2MwKHNpemVvZihOZXdDb25zdHJhaW50KSk7 CgkJaWYgKGNjb24tPnByZV92YWxpZGF0ZWQpCgkJCW5ld2Nvbi0+bm5fYXR0bnVtID0gY2Nvbi0+ YXR0bnVtOwoJCXRhYi0+Y29uc3RyYWludHMgPSBsYXBwZW5kKHRhYi0+Y29uc3RyYWludHMsIG5l d2Nvbik7CiAgICB9CjMuIEluIEFUUmV3cml0ZVRhYmxlLCB2ZXJpZnkgd2hldGhlciBhbGwgYXR0 bnVtcyBhc3NvY2lhdGVkIHdpdGggbm90bnVsbF9hdHRycyBoYXZlIGFscmVhZHkgYmVlbiBwcmV2 YWxpZGF0ZWQuCiAgIElmIHRoZXkgaGF2ZSwgc2V0IG5lZWRzY2FuIHRvIGZhbHNlLgoKQ0FVVElP TjoKQUxURVIgVEFCTEUgU0VUIERBVEEgVFlQRSBhbmQgQUxURVIgVEFCTEUgU0VUIEVYUFJFU1NJ T04gdHJpZ2dlciBhbiBpbmRleCByZWJ1aWxkCihyZWZlciB0byBSZW1lbWJlckFsbERlcGVuZGVu dEZvclJlYnVpbGRpbmcpLgpXaGlsZSB0aGUgZm9ybWVyIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHBh cnRpdGlvbmVkIHRhYmxlcywgdGhlIGxhdHRlciBjYW4uCklmIGFuIGluZGV4IHJlYnVpbGQgb2Nj dXJzLCB0aGVuIGluZGV4c2NhbiBjYW5ub3QgYmUgdXNlZCB0byBwcmV2YWxpZGF0ZSB3aGV0aGVy IGEgY29sdW1uIGNvbnRhaW5zIG51bGwgdmFsdWVzLgpDb25zZXF1ZW50bHksIHByZS12YWxpZGF0 aW5nIGEgTk9UIE5VTEwgY29uc3RyYWludCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3Ig cGFydGl0aW9uZWQgdGFibGVzLgoKQWx0ZXJlZFRhYmxlSW5mby0+dmVyaWZ5X25ld19ub3RudWxs IG9ubHkgdXNlZCBpbiBBVEV4ZWNBZGRDb2x1bW4sIHNvIGluCgpjb25jdXJyZW5jeSBjb25jZXJu OgpBTFRFUiBUQUJMRSBTRVQgTk9UIE5VTEwgd2lsbCB0YWtlIGFuIEFDQ0VTUyBFWENMVVNJVkUg bG9jaywKc28gdGhlcmUgaXMgbGVzcyB2YXJpYW50IG9mIHJhY2UgaXNzdWUgY2FuIG9jY3VyPwp0 byBwcm92ZSBhY2N1cmF0ZSwgSSB3cm90ZSBzb21lIGlzb2xhdGUgdGVzdHMuCnNlZVsyXQoKcGVy Zm9ybWFuY2UgY29uY2VybjoKaXQgd2lsbCBzbG93ZXIgdGhhbiBub3JtYWwgYWRkIG5vdC1udWxs IGlmIHlvdXIgaW5kZXggaXMgYmxvYXQgYW5kIGEgbGFyZ2UKcGVyY2VudCBvZiBibG9hdCBpcyBy ZWxhdGVkIHRvIG51bGwgdmFsdWUgZGF0YS4KCnRha2UgYSBzaW1wbGUgZXhhbXBsZToKCjEwMCUg YmxvYXQgYW5kIHplcm8gbnVsbCBibG9hdCB2YWx1ZToKZHJvcCB0YWJsZSBpZiBleGlzdHMgdCBc OyBjcmVhdGUgdW5sb2dnZWQgdGFibGUgdChhIGludCwgYiBpbnQsIGMgaW50KSBcOyBjcmVhdGUg aW5kZXggdF9pZHhfYSBvbiB0KGEpOwppbnNlcnQgaW50byB0IHNlbGVjdCBnLCBnKzEgZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMSwxXzAwMF8wMDApIGc7CmRlbGV0ZSBmcm9tIHQ7CmFsdGVyIHRhYmxl IHQgYWRkIGNvbnN0cmFpbnQgdDEgbm90IG51bGwgYTsKCndpdGggcGF0Y2ggVGltZTogIDEuODcz IG1zCm1hc3RlciBUaW1lOiA2NDguMzEyIG1zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0t ICUyMCBwZXJjZW50IGNvbHVtbiB2YWx1ZSBpcyBudWxsIGFuZCBkZWxldGVkIGZyb20gaGVhcCBz dGlsbCBvbiB0aGUgaW5kZXguCmRyb3AgdGFibGUgaWYgZXhpc3RzIHQgXDsgY3JlYXRlIHVubG9n Z2VkIHRhYmxlIHQoYSBpbnQsIGIgaW50KSBcOyBjcmVhdGUgaW5kZXggdF9pZHhfYSBvbiB0KGEp OwppbnNlcnQgaW50byB0IHNlbGVjdCBjYXNlIHdoZW4gZyAlIDUgPSAwIHRoZW4gbnVsbCBlbHNl IGcgZW5kLCBnKzEgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxXzAwMF8wMDApIGc7CmRlbGV0ZSBm cm9tIHQgd2hlcmUgYSBpcyBudWxsOwoKYWx0ZXIgdGFibGUgdCBhZGQgY29uc3RyYWludCB0MSBu b3QgbnVsbCBhOwp3aXRoIHBhdGNoIFRpbWU6OiAxMDgwLjQwNyBtcyAoMDA6MDEuMDgwKQptYXN0 ZXIgVGltZTogOTcwLjY3MSBtcwoKcmVmZXJlbmNlczoKWzFdIGh0dHBzOi8vcG9zdGdyLmVzL20v Q0ElMkJUZ21vYTVOS3o4aUdXXzl2N3d6JTNELSUyQnpRRnUlM0RFNFNab2FUYVUxem5MYUVYUllw LVElNDBtYWlsLmdtYWlsLmNvbQpbMl0gaHR0cHM6Ly9wb3N0Z3IuZXMvbS85MDAwNTZEMS0zMkRG LTQ5MjctODI1MS0zRTBDMERDNDA3RkQlNDBhbmFyYXplbC5kZQotLS0KIHNyYy9iYWNrZW5kL2Nh dGFsb2cvaGVhcC5jICAgICAgICAgICAgICAgIHwgODAgKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfY29uc3RyYWludC5jICAgICAgIHwgIDEgKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgfCA3NCArKysrKysrKysrKysrKysr KystLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgIHwgODAgKysr KysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvaGVhcC5oICAgICAgICAg ICAgICAgIHwgIDIgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgICAg fCAgMSArCiBzcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlICAgICB8ICAxICsK IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0IHwgMzUgKysrKysrKysr Kwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWx0ZXJfdGFibGUuc3FsICAgICAgfCA0MCArKysrKysr KysrKysKIDkgZmlsZXMgY2hhbmdlZCwgMzA2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMgYi9zcmMvYmFja2VuZC9j YXRhbG9nL2hlYXAuYwppbmRleCBkN2I4OGI2MWRjLi5mYTA4NzJlMmRkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAu YwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgogI2lu Y2x1ZGUgImNvbW1hbmRzL3R5cGVjbWRzLmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgorI2lu Y2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5o IgpAQCAtMTE2LDYgKzExNyw3IEBAIHN0YXRpYyBOb2RlICpjb29rQ29uc3RyYWludChQYXJzZVN0 YXRlICpwc3RhdGUsCiAJCQkJCQkJY2hhciAqcmVsbmFtZSk7CiAKIAorc3RhdGljIE9pZCBnZXRf aW5kZXhfZm9yX3ZhbGlkYXRlX25vdG51bGwoUmVsYXRpb24gcmVsLCBpbnQgY29sbnVtKTsKIC8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqCQkJCVhYWCBVR0xZIEhBUkQgQ09ERUQgQkFETkVTUyBGT0xMT1dTIFhYWAog ICoKQEAgLTIyOTgsNiArMjMwMCw4IEBAIFN0b3JlQ29uc3RyYWludHMoUmVsYXRpb24gcmVsLCBM aXN0ICpjb29rZWRfY29uc3RyYWludHMsIGJvb2wgaXNfaW50ZXJuYWwpCiAgKiBuZXdDb25zdHJh aW50czogbGlzdCBvZiBDb25zdHJhaW50IG5vZGVzCiAgKiBhbGxvd19tZXJnZTogdHJ1ZSBpZiBj aGVjayBjb25zdHJhaW50cyBtYXkgYmUgbWVyZ2VkIHdpdGggZXhpc3Rpbmcgb25lcwogICogaXNf bG9jYWw6IHRydWUgaWYgZGVmaW5pdGlvbiBpcyBsb2NhbCwgZmFsc2UgaWYgaXQncyBpbmhlcml0 ZWQKKyAqIGluZGV4X3JlYnVpbGQ6IHRydWUgaWYgdGhlIEFMVEVSIFRBQkxFIGNvbW1hbmQgYW5k IGl0J3Mgc3ViY29tbWFuZHMKKyAqIHdpbGxsIGRvIGFueSBpbmRleCByZWJ1aWxkIGluIGZ1dHVy ZS4KICAqIGlzX2ludGVybmFsOiB0cnVlIGlmIHJlc3VsdCBvZiBzb21lIGludGVybmFsIHByb2Nl c3MsIG5vdCBhIHVzZXIgcmVxdWVzdAogICogcXVlcnlTdHJpbmc6IHVzZWQgZHVyaW5nIGV4cHJl c3Npb24gdHJhbnNmb3JtYXRpb24gb2YgZGVmYXVsdCB2YWx1ZXMgYW5kCiAgKgkJY29va2VkIENI RUNLIGNvbnN0cmFpbnRzCkBAIC0yMzIyLDYgKzIzMjYsNyBAQCBBZGRSZWxhdGlvbk5ld0NvbnN0 cmFpbnRzKFJlbGF0aW9uIHJlbCwKIAkJCQkJCSAgYm9vbCBhbGxvd19tZXJnZSwKIAkJCQkJCSAg Ym9vbCBpc19sb2NhbCwKIAkJCQkJCSAgYm9vbCBpc19pbnRlcm5hbCwKKwkJCQkJCSAgYm9vbCBp bmRleF9yZWJ1aWxkLAogCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeVN0cmluZykKIHsKIAlMaXN0 CSAgICpjb29rZWRDb25zdHJhaW50cyA9IE5JTDsKQEAgLTI0MDksNiArMjQxNCw3IEBAIEFkZFJl bGF0aW9uTmV3Q29uc3RyYWludHMoUmVsYXRpb24gcmVsLAogCQljb29rZWQtPmlzX2xvY2FsID0g aXNfbG9jYWw7CiAJCWNvb2tlZC0+aW5oY291bnQgPSBpc19sb2NhbCA/IDAgOiAxOwogCQljb29r ZWQtPmlzX25vX2luaGVyaXQgPSBmYWxzZTsKKwkJY29va2VkLT5wcmVfdmFsaWRhdGVkID0gZmFs c2U7CiAJCWNvb2tlZENvbnN0cmFpbnRzID0gbGFwcGVuZChjb29rZWRDb25zdHJhaW50cywgY29v a2VkKTsKIAl9CiAKQEAgLTI1MzksNiArMjU0NSw3IEBAIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWlu dHMoUmVsYXRpb24gcmVsLAogCQkJY29va2VkLT5pc19sb2NhbCA9IGlzX2xvY2FsOwogCQkJY29v a2VkLT5pbmhjb3VudCA9IGlzX2xvY2FsID8gMCA6IDE7CiAJCQljb29rZWQtPmlzX25vX2luaGVy aXQgPSBjZGVmLT5pc19ub19pbmhlcml0OworCQkJY29va2VkLT5wcmVfdmFsaWRhdGVkID0gZmFs c2U7CiAJCQljb29rZWRDb25zdHJhaW50cyA9IGxhcHBlbmQoY29va2VkQ29uc3RyYWludHMsIGNv b2tlZCk7CiAJCX0KIAkJZWxzZSBpZiAoY2RlZi0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkK QEAgLTI1NDcsNiArMjU1NCw3IEBAIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMoUmVsYXRpb24g cmVsLAogCQkJQXR0ck51bWJlcgljb2xudW07CiAJCQlpbnQxNgkJaW5oY291bnQgPSBpc19sb2Nh bCA/IDAgOiAxOwogCQkJY2hhcgkgICAqbm5uYW1lOworCQkJT2lkCQkJaW5kZXhvaWQgPSBJbnZh bGlkT2lkOwogCiAJCQkvKiBEZXRlcm1pbmUgd2hpY2ggY29sdW1uIHRvIG1vZGlmeSAqLwogCQkJ Y29sbnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN0clZhbChsaW5pdGlh bChjZGVmLT5rZXlzKSkpOwpAQCAtMjU5OSw2ICsyNjA3LDE2IEBAIEFkZFJlbGF0aW9uTmV3Q29u c3RyYWludHMoUmVsYXRpb24gcmVsLAogCQkJCQkJCQlpbmhjb3VudCwKIAkJCQkJCQkJY2RlZi0+ aXNfbm9faW5oZXJpdCk7CiAKKwkJCS8qCisJCQkgKiBpZiB0aGVyZSBpcyBhbnkgaW5kZXggdG8g YmUgcmVidWlsZCwgdGhlbiB3ZSBjYW5ub3QgZG8gaW5kZXhzY2FuCisJCQkgKiBpbiBpbmRleF9j aGVja19ub3RudWxsOyBmb3IgcmVfYWRkZWQgbm90LW51bGxjb25zdHJhaW50IGFsc28KKwkJCSAq IGNhbm5vdCB1c2UgaW5kZXhzY2FuIHRvIGNoZWNrIG51bGwgZXhpc3RlbmNlLgorCQkJICoKKwkJ CSovCisJCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiAmJgor CQkJCSFpc19pbnRlcm5hbCAmJgorCQkJCSFpbmRleF9yZWJ1aWxkKQorCQkJCWluZGV4b2lkID0g Z2V0X2luZGV4X2Zvcl92YWxpZGF0ZV9ub3RudWxsKHJlbCwgY29sbnVtKTsKIAkJCW5uY29va2Vk ID0gKENvb2tlZENvbnN0cmFpbnQgKikgcGFsbG9jKHNpemVvZihDb29rZWRDb25zdHJhaW50KSk7 CiAJCQlubmNvb2tlZC0+Y29udHlwZSA9IENPTlNUUl9OT1ROVUxMOwogCQkJbm5jb29rZWQtPmNv bm9pZCA9IGNvbnN0ck9pZDsKQEAgLTI2MDksNyArMjYyNywxNCBAQCBBZGRSZWxhdGlvbk5ld0Nv bnN0cmFpbnRzKFJlbGF0aW9uIHJlbCwKIAkJCW5uY29va2VkLT5pc19sb2NhbCA9IGlzX2xvY2Fs OwogCQkJbm5jb29rZWQtPmluaGNvdW50ID0gaW5oY291bnQ7CiAJCQlubmNvb2tlZC0+aXNfbm9f aW5oZXJpdCA9IGNkZWYtPmlzX25vX2luaGVyaXQ7CisJCQlubmNvb2tlZC0+cHJlX3ZhbGlkYXRl ZCA9IGZhbHNlOworCQkJaWYgKE9pZElzVmFsaWQoaW5kZXhvaWQpKQorCQkJCW5uY29va2VkLT5w cmVfdmFsaWRhdGVkID0gaW5kZXhfY2hlY2tfbm90bnVsbChSZWxhdGlvbkdldFJlbGlkKHJlbCks IGluZGV4b2lkKTsKIAorCQkJaWYgKG5uY29va2VkLT5wcmVfdmFsaWRhdGVkKQorCQkJCWVsb2co REVCVUcxLCAiY2FuIGRvIGZhc3Qgbm90LW51bGwgY2hlY2siKTsKKwkJCWVsc2UKKwkJCQllbG9n KERFQlVHMSwgImNhbm5vdCBkbyBmYXN0IG5vdC1udWxsIGNoZWNrIik7CiAJCQljb29rZWRDb25z dHJhaW50cyA9IGxhcHBlbmQoY29va2VkQ29uc3RyYWludHMsIG5uY29va2VkKTsKIAkJfQogCX0K QEAgLTI2MjYsNiArMjY1MSw2MSBAQCBBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKFJlbGF0aW9u IHJlbCwKIAlyZXR1cm4gY29va2VkQ29uc3RyYWludHM7CiB9CiAKK3N0YXRpYyBPaWQKK2dldF9p bmRleF9mb3JfdmFsaWRhdGVfbm90bnVsbChSZWxhdGlvbiByZWxhdGlvbiwgaW50IGNvbG51bSkK K3sKKwlSZWxhdGlvbglpbmRyZWw7CisJU3lzU2NhbkRlc2MgaW5kc2NhbjsKKwlTY2FuS2V5RGF0 YSBza2V5OworCUhlYXBUdXBsZQlodHVwOworCUxpc3QJICAgKnJlc3VsdDsKKwlUdXBsZURlc2MJ dHVwZGVzYzsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyOworCisJdHVwZGVzYyA9IFJlbGF0aW9u R2V0RGVzY3IocmVsYXRpb24pOworCXJlc3VsdCA9IE5JTDsKKworCS8qIFByZXBhcmUgdG8gc2Nh biBwZ19pbmRleCBmb3IgZW50cmllcyBoYXZpbmcgaW5kcmVsaWQgPSB0aGlzIHJlbC4gKi8KKwlT Y2FuS2V5SW5pdCgmc2tleSwKKwkJCQlBbnVtX3BnX2luZGV4X2luZHJlbGlkLAorCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9u R2V0UmVsaWQocmVsYXRpb24pKSk7CisKKwlpbmRyZWwgPSB0YWJsZV9vcGVuKEluZGV4UmVsYXRp b25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpbmRzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGlu ZHJlbCwgSW5kZXhJbmRyZWxpZEluZGV4SWQsIHRydWUsCisJCQkJCQkJCSBOVUxMLCAxLCAmc2tl eSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChodHVwID0gc3lzdGFibGVfZ2V0bmV4dChp bmRzY2FuKSkpCisJeworCQlGb3JtX3BnX2luZGV4IGluZGV4ID0gKEZvcm1fcGdfaW5kZXgpIEdF VFNUUlVDVChodHVwKTsKKworCQlpZiAoIWluZGV4LT5pbmRpbW1lZGlhdGUgfHwgIWluZGV4LT5p bmRpc3ZhbGlkIHx8ICFpbmRleC0+aW5kaXNsaXZlKQorCQkJY29udGludWU7CisKKwkJaWYgKCFo ZWFwX2F0dGlzbnVsbChodHVwLCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxMKSB8fAorCQkJ IWhlYXBfYXR0aXNudWxsKGh0dXAsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCisJCQlj b250aW51ZTsKKworCQkvKiB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGluZGV4J3MgbGVhZGlu ZyBjb2x1bW4gKi8KKwkJYXR0ciA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgKGluZGV4LT5pbmRr ZXkudmFsdWVzWzBdKSAtIDEpOworCQlpZiAoYXR0ci0+YXR0bnVtICE9IGNvbG51bSkKKwkJCWNv bnRpbnVlOworCisJCS8qIGFkZCBpbmRleCdzIE9JRCB0byByZXN1bHQgbGlzdCAqLworCQlyZXN1 bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIGluZGV4LT5pbmRleHJlbGlkKTsKKwl9CisJc3lzdGFi bGVfZW5kc2NhbihpbmRzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmRyZWwsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwkvKiBTb3J0IHRoZSByZXN1bHQgbGlzdCBpbnRvIE9JRCBvcmRlciwgbWFrZSB0aGUg cmVzdWx0IHN0YWJsZS4gKi8KKwlsaXN0X3NvcnQocmVzdWx0LCBsaXN0X29pZF9jbXApOworCisJ aWYobGlzdF9sZW5ndGgocmVzdWx0KSA9PSAwKQorCQlyZXR1cm4gSW52YWxpZE9pZDsKKwllbHNl CisJCXJldHVybiBsaXN0X250aF9vaWQocmVzdWx0LCAwKTsKK30KKwogLyoKICAqIENoZWNrIGZv ciBhIHByZS1leGlzdGluZyBjaGVjayBjb25zdHJhaW50IHRoYXQgY29uZmxpY3RzIHdpdGggYSBw cm9wb3NlZAogICogbmV3IG9uZSwgYW5kIGVpdGhlciBhZGp1c3QgaXRzIGNvbmlzbG9jYWwvY29u aW5oY291bnQgc2V0dGluZ3Mgb3IgdGhyb3cKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfY29uc3RyYWludC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19jb25zdHJhaW50LmMK aW5kZXggOWMwNWE5OGQyOC4uNjYzOGYxZmJlMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19jb25zdHJhaW50LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19jb25zdHJh aW50LmMKQEAgLTgyNiw2ICs4MjYsNyBAQCBSZWxhdGlvbkdldE5vdE51bGxDb25zdHJhaW50cyhP aWQgcmVsaWQsIGJvb2wgY29va2VkLCBib29sIGluY2x1ZGVfbm9pbmgpCiAJCQljb29rZWQtPmlz X2xvY2FsID0gdHJ1ZTsKIAkJCWNvb2tlZC0+aW5oY291bnQgPSAwOwogCQkJY29va2VkLT5pc19u b19pbmhlcml0ID0gY29uRm9ybS0+Y29ubm9pbmhlcml0OworCQkJY29va2VkLT5wcmVfdmFsaWRh dGVkID0gZmFsc2U7CiAKIAkJCW5vdG51bGxzID0gbGFwcGVuZChub3RudWxscywgY29va2VkKTsK IAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCA2Y2NhZTRjYjRhLi4yNzQ1NjhlMGYy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMjE5LDYgKzIxOSw4IEBAIHR5cGVkZWYg c3RydWN0IE5ld0NvbnN0cmFpbnQKIAlPaWQJCQlyZWZpbmRpZDsJCS8qIE9JRCBvZiBQSydzIGlu ZGV4LCBpZiBGT1JFSUdOICovCiAJYm9vbAkJY29ud2l0aHBlcmlvZDsJLyogV2hldGhlciB0aGUg bmV3IEZPUkVJR04gS0VZIHVzZXMgUEVSSU9EICovCiAJT2lkCQkJY29uaWQ7CQkJLyogT0lEIG9m IHBnX2NvbnN0cmFpbnQgZW50cnksIGlmIEZPUkVJR04gKi8KKwlpbnQJCQlubl9hdHRudW07CQkv KiBhbHJlYWR5IHZhbGlkYXRlZCBOT1QtTlVMTCBjb25zdHJhaW50IGF0dG51bS4KKwkJCQkJCQkJ CS0xIG1lYW5zIG5vdCBhcHBsaWFibGUgKi8KIAlOb2RlCSAgICpxdWFsOwkJCS8qIENoZWNrIGV4 cHIgb3IgQ09OU1RSX0ZPUkVJR04gQ29uc3RyYWludCAqLwogCUV4cHJTdGF0ZSAgKnF1YWxzdGF0 ZTsJCS8qIEV4ZWN1dGlvbiBzdGF0ZSBmb3IgQ0hFQ0sgZXhwciAqLwogfSBOZXdDb25zdHJhaW50 OwpAQCAtOTc3LDYgKzk3OSw3IEBAIERlZmluZVJlbGF0aW9uKENyZWF0ZVN0bXQgKnN0bXQsIGNo YXIgcmVsa2luZCwgT2lkIG93bmVySWQsCiAJCQljb29rZWQtPmlzX2xvY2FsID0gdHJ1ZTsJLyog bm90IHVzZWQgZm9yIGRlZmF1bHRzICovCiAJCQljb29rZWQtPmluaGNvdW50ID0gMDsJLyogZGl0 dG8gKi8KIAkJCWNvb2tlZC0+aXNfbm9faW5oZXJpdCA9IGZhbHNlOworCQkJY29va2VkLT5wcmVf dmFsaWRhdGVkID0gZmFsc2U7CiAJCQljb29rZWREZWZhdWx0cyA9IGxhcHBlbmQoY29va2VkRGVm YXVsdHMsIGNvb2tlZCk7CiAJCQlhdHRyLT5hdHRoYXNkZWYgPSB0cnVlOwogCQl9CkBAIC0xMDYw LDcgKzEwNjMsNyBAQCBEZWZpbmVSZWxhdGlvbihDcmVhdGVTdG10ICpzdG10LCBjaGFyIHJlbGtp bmQsIE9pZCBvd25lcklkLAogCSAqLwogCWlmIChyYXdEZWZhdWx0cykKIAkJQWRkUmVsYXRpb25O ZXdDb25zdHJhaW50cyhyZWwsIHJhd0RlZmF1bHRzLCBOSUwsCi0JCQkJCQkJCSAgdHJ1ZSwgdHJ1 ZSwgZmFsc2UsIHF1ZXJ5U3RyaW5nKTsKKwkJCQkJCQkJICB0cnVlLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHF1ZXJ5U3RyaW5nKTsKIAogCS8qCiAJICogTWFrZSBjb2x1bW4gZ2VuZXJhdGlvbiBleHBy ZXNzaW9ucyB2aXNpYmxlIGZvciB1c2UgYnkgcGFydGl0aW9uaW5nLgpAQCAtMTI5MSw3ICsxMjk0 LDcgQEAgRGVmaW5lUmVsYXRpb24oQ3JlYXRlU3RtdCAqc3RtdCwgY2hhciByZWxraW5kLCBPaWQg b3duZXJJZCwKIAkgKi8KIAlpZiAoc3RtdC0+Y29uc3RyYWludHMpCiAJCUFkZFJlbGF0aW9uTmV3 Q29uc3RyYWludHMocmVsLCBOSUwsIHN0bXQtPmNvbnN0cmFpbnRzLAotCQkJCQkJCQkgIHRydWUs IHRydWUsIGZhbHNlLCBxdWVyeVN0cmluZyk7CisJCQkJCQkJCSAgdHJ1ZSwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCBxdWVyeVN0cmluZyk7CiAKIAkvKgogCSAqIEZpbmFsbHksIG1lcmdlIHRoZSBub3Qt bnVsbCBjb25zdHJhaW50cyB0aGF0IGFyZSBkZWNsYXJlZCBkaXJlY3RseSB3aXRoCkBAIC02MDM4 LDYgKzYwNDEsNyBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIE9pZCBP SUROZXdIZWFwLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAlUdXBsZURlc2MJb2xkVHVwRGVzYzsKIAlU dXBsZURlc2MJbmV3VHVwRGVzYzsKIAlib29sCQluZWVkc2NhbiA9IGZhbHNlOworCWJvb2wJCXBy ZXZhbGlkZWQgPSB0cnVlOwogCUxpc3QJICAgKm5vdG51bGxfYXR0cnM7CiAJaW50CQkJaTsKIAlM aXN0Q2VsbCAgICpsOwpAQCAtNjA5NSw2ICs2MDk5LDExIEBAIEFUUmV3cml0ZVRhYmxlKEFsdGVy ZWRUYWJsZUluZm8gKnRhYiwgT2lkIE9JRE5ld0hlYXAsIExPQ0tNT0RFIGxvY2ttb2RlKQogCQkJ CW5lZWRzY2FuID0gdHJ1ZTsKIAkJCQljb24tPnF1YWxzdGF0ZSA9IEV4ZWNQcmVwYXJlRXhwcigo RXhwciAqKSBjb24tPnF1YWwsIGVzdGF0ZSk7CiAJCQkJYnJlYWs7CisKKwkJCWNhc2UgQ09OU1RS X05PVE5VTEw6CisJCQkJaWYoY29uLT5ubl9hdHRudW0gPT0gLTEpCisJCQkJCXByZXZhbGlkZWQg PSBmYWxzZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgQ09OU1RSX0ZPUkVJR046CiAJCQkJLyogTm90 aGluZyB0byBkbyBoZXJlICovCiAJCQkJYnJlYWs7CkBAIC02MTM2LDYgKzYxNDUsMTIgQEAgQVRS ZXdyaXRlVGFibGUoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCwgTE9DS01P REUgbG9ja21vZGUpCiAJCX0KIAkJaWYgKG5vdG51bGxfYXR0cnMpCiAJCQluZWVkc2NhbiA9IHRy dWU7CisJCS8qCisJCSAqIHdlIGRpZCBzb21lIHByZXZhbGlkYXRpb24gYXQgcGhhc2UgMiwgc28g d2UgY2FuIHNhZmVseSBiZSBzdXJlIG5vCisJCSAqIG5lZWQgdG8gc2Nhbi4gc2VlIEFkZFJlbGF0 aW9uTmV3Q29uc3RyYWludHMgYW5kIGluZGV4X2NoZWNrX25vdG51bGwKKwkJKi8KKwkJaWYocHJl dmFsaWRlZCkKKwkJCW5lZWRzY2FuID0gZmFsc2U7CiAJfQogCiAJaWYgKG5ld3JlbCB8fCBuZWVk c2NhbikKQEAgLTcyODAsNyArNzI5NSw3IEBAIEFURXhlY0FkZENvbHVtbihMaXN0ICoqd3F1ZXVl LCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkJICogX2xpc3RfIG9mIGRl ZmF1bHRzLCBidXQgd2UganVzdCBkbyBvbmUuCiAJCSAqLwogCQlBZGRSZWxhdGlvbk5ld0NvbnN0 cmFpbnRzKHJlbCwgbGlzdF9tYWtlMShyYXdFbnQpLCBOSUwsCi0JCQkJCQkJCSAgZmFsc2UsIHRy dWUsIGZhbHNlLCBOVUxMKTsKKwkJCQkJCQkJICBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBO VUxMKTsKIAogCQkvKiBNYWtlIHRoZSBhZGRpdGlvbmFsIGNhdGFsb2cgY2hhbmdlcyB2aXNpYmxl ICovCiAJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CkBAIC03NzIyLDYgKzc3MzcsOCBAQCBB VEV4ZWNTZXROb3ROdWxsKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY2hhciAqY29uTmFt ZSwgY2hhciAqY29sTmFtZSwKIAlDb29rZWRDb25zdHJhaW50ICpjY29uOwogCUxpc3QJICAgKmNv b2tlZDsKIAlib29sCQlpc19ub19pbmhlcml0ID0gZmFsc2U7CisJYm9vbAkJaW5kZXhfcmVidWls ZCA9IGZhbHNlOworCUFsdGVyZWRUYWJsZUluZm8gKnRhYiA9IE5VTEw7CiAKIAkvKiBHdWFyZCBh Z2FpbnN0IHN0YWNrIG92ZXJmbG93IGR1ZSB0byBvdmVybHkgZGVlcCBpbmhlcml0YW5jZSB0cmVl LiAqLwogCWNoZWNrX3N0YWNrX2RlcHRoKCk7CkBAIC03ODM3LDEwICs3ODU0LDM5IEBAIEFURXhl Y1NldE5vdE51bGwoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBjaGFyICpjb25OYW1lLCBj aGFyICpjb2xOYW1lLAogCWNvbnN0cmFpbnQtPmlzX25vX2luaGVyaXQgPSBpc19ub19pbmhlcml0 OwogCWNvbnN0cmFpbnQtPmNvbm5hbWUgPSBjb25OYW1lOwogCisJLyoKKwkgKiBmb3IgQUxURVIg VEFCTEUgQUxURVIgQ09MVU1OIFNFVCBFWFBSRVNTSU9OLCBSZW1lbWJlckluZGV4Rm9yUmVidWls ZGluZworCSAqIGNhbiBvbmx5IHJlbWVtYmVyIHRoZSBwYXJ0aXRpb25lZCBpbmRleCBlbnRyeSwg bm90IHRoZSByZWd1bGFyIGluZGV4LiBJbgorCSAqIHRoYXQgY2FzZSwgdGFiLT5jaGFuZ2VkSW5k ZXhPaWRzIHdvbid0IGhhdmUgcmVndWxhciBpbmRleCBvaWQsIHRoZW4gIHdlCisJICogY2FuIG5v dCB1c2UgaW5kZXhfY2hlY2tfbm90bnVsbCB0byBmYXN0IGNoZWNrIHRoZSBjb2x1bW4gbm90LW51 bGwgc3RhdHVzLgorCSAqIHRoYXQgd2h5IGlmIHJlY3Vyc2luZyBpcyB0cnVlLCB3ZSBibGluZGx5 IGFzc3VtZSBpbmRleF9yZWJ1aWxkIGlzIHRydWUuCisJICogd2UgdXNlIGluZGV4X3JlYnVpbGQg Zm9yIGluZGV4X2NoZWNrX25vdG51bGwgcHVycG9zZSBvbmx5LgorCSAqLworCXRhYiA9IEFUR2V0 UXVldWVFbnRyeSh3cXVldWUsIHJlbCk7CisJaWYgKGxpc3RfbGVuZ3RoKHRhYi0+Y2hhbmdlZElu ZGV4T2lkcykgPiAwIHx8IHJlY3Vyc2luZykKKwkJaW5kZXhfcmVidWlsZCA9IHRydWU7CisKIAkv KiBhbmQgZG8gaXQgKi8KIAljb29rZWQgPSBBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKHJlbCwg TklMLCBsaXN0X21ha2UxKGNvbnN0cmFpbnQpLAotCQkJCQkJCQkJICAgZmFsc2UsICFyZWN1cnNp bmcsIGZhbHNlLCBOVUxMKTsKKwkJCQkJCQkJCSAgIGZhbHNlLCAhcmVjdXJzaW5nLCBmYWxzZSwg aW5kZXhfcmVidWlsZCwgTlVMTCk7CiAJY2NvbiA9IGxpbml0aWFsKGNvb2tlZCk7CisKKwlpZiAo IWNjb24tPnNraXBfdmFsaWRhdGlvbikKKwl7CisJCU5ld0NvbnN0cmFpbnQgKm5ld2NvbjsKKwor CQluZXdjb24gPSAoTmV3Q29uc3RyYWludCAqKSBwYWxsb2MwKHNpemVvZihOZXdDb25zdHJhaW50 KSk7CisJCW5ld2Nvbi0+bmFtZSA9IGNjb24tPm5hbWU7CisJCW5ld2Nvbi0+Y29udHlwZSA9IGNj b24tPmNvbnR5cGU7CisJCWlmIChjY29uLT5wcmVfdmFsaWRhdGVkKQorCQkJbmV3Y29uLT5ubl9h dHRudW0gPSBjY29uLT5hdHRudW07CisJCWVsc2UKKwkJCW5ld2Nvbi0+bm5fYXR0bnVtID0gLTE7 CisJCW5ld2Nvbi0+cXVhbCA9IE5VTEw7CisKKwkJdGFiLT5jb25zdHJhaW50cyA9IGxhcHBlbmQo dGFiLT5jb25zdHJhaW50cywgbmV3Y29uKTsKKwkJQXNzZXJ0KGNjb24tPmF0dG51bSA+IDApOwor CX0KIAlPYmplY3RBZGRyZXNzU2V0KGFkZHJlc3MsIENvbnN0cmFpbnRSZWxhdGlvbklkLCBjY29u LT5jb25vaWQpOwogCiAJSW52b2tlT2JqZWN0UG9zdEFsdGVySG9vayhSZWxhdGlvblJlbGF0aW9u SWQsCkBAIC03OTg4LDcgKzgwMzQsNyBAQCBBVEV4ZWNDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJl bCwgY29uc3QgY2hhciAqY29sTmFtZSwKIAkJICogX2xpc3RfIG9mIGRlZmF1bHRzLCBidXQgd2Ug anVzdCBkbyBvbmUuCiAJCSAqLwogCQlBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKHJlbCwgbGlz dF9tYWtlMShyYXdFbnQpLCBOSUwsCi0JCQkJCQkJCSAgZmFsc2UsIHRydWUsIGZhbHNlLCBOVUxM KTsKKwkJCQkJCQkJICBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBOVUxMKTsKIAl9CiAKIAlP YmplY3RBZGRyZXNzU3ViU2V0KGFkZHJlc3MsIFJlbGF0aW9uUmVsYXRpb25JZCwKQEAgLTg0NTAs NyArODQ5Niw3IEBAIEFURXhlY1NldEV4cHJlc3Npb24oQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBS ZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsCiAKIAkvKiBTdG9yZSB0aGUgZ2VuZXJh dGVkIGV4cHJlc3Npb24gKi8KIAlBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKHJlbCwgbGlzdF9t YWtlMShyYXdFbnQpLCBOSUwsCi0JCQkJCQkJICBmYWxzZSwgdHJ1ZSwgZmFsc2UsIE5VTEwpOwor CQkJCQkJCSAgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBNYWtlIGFi b3ZlIG5ldyBleHByZXNzaW9uIHZpc2libGUgKi8KIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgp OwpAQCAtOTU1NCw2ICs5NjAwLDEwIEBAIEFUQWRkQ2hlY2tOTkNvbnN0cmFpbnQoTGlzdCAqKndx dWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJTGlzdAkgICAqY2hp bGRyZW47CiAJTGlzdENlbGwgICAqY2hpbGQ7CiAJT2JqZWN0QWRkcmVzcyBhZGRyZXNzID0gSW52 YWxpZE9iamVjdEFkZHJlc3M7CisJYm9vbAkJaW5kZXhfcmVidWlsZCA9IGZhbHNlOworCisJaWYg KGxpc3RfbGVuZ3RoKHRhYi0+Y2hhbmdlZEluZGV4T2lkcykgPiAwIHx8IHJlY3Vyc2luZykKKwkJ aW5kZXhfcmVidWlsZCA9IHRydWU7CiAKIAkvKiBHdWFyZCBhZ2FpbnN0IHN0YWNrIG92ZXJmbG93 IGR1ZSB0byBvdmVybHkgZGVlcCBpbmhlcml0YW5jZSB0cmVlLiAqLwogCWNoZWNrX3N0YWNrX2Rl cHRoKCk7CkBAIC05NTc4LDYgKzk2MjgsNyBAQCBBVEFkZENoZWNrTk5Db25zdHJhaW50KExpc3Qg Kip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJ CXJlY3Vyc2luZyB8fCBpc19yZWFkZCwJLyogYWxsb3dfbWVyZ2UgKi8KIAkJCQkJCQkJCQkhcmVj dXJzaW5nLCAvKiBpc19sb2NhbCAqLwogCQkJCQkJCQkJCWlzX3JlYWRkLAkvKiBpc19pbnRlcm5h bCAqLworCQkJCQkJCQkJCWluZGV4X3JlYnVpbGQsCiAJCQkJCQkJCQkJTlVMTCk7CS8qIHF1ZXJ5 U3RyaW5nIG5vdCBhdmFpbGFibGUKIAkJCQkJCQkJCQkJCSAqIGhlcmUgKi8KIApAQCAtOTU4OSwx NSArOTY0MCwxOSBAQCBBVEFkZENoZWNrTk5Db25zdHJhaW50KExpc3QgKip3cXVldWUsIEFsdGVy ZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCXsKIAkJQ29va2VkQ29uc3RyYWludCAq Y2NvbiA9IChDb29rZWRDb25zdHJhaW50ICopIGxmaXJzdChsY29uKTsKIAotCQlpZiAoIWNjb24t PnNraXBfdmFsaWRhdGlvbiAmJiBjY29uLT5jb250eXBlICE9IENPTlNUUl9OT1ROVUxMKQorCQlp ZiAoIWNjb24tPnNraXBfdmFsaWRhdGlvbikKIAkJewogCQkJTmV3Q29uc3RyYWludCAqbmV3Y29u OwogCiAJCQluZXdjb24gPSAoTmV3Q29uc3RyYWludCAqKSBwYWxsb2MwKHNpemVvZihOZXdDb25z dHJhaW50KSk7CiAJCQluZXdjb24tPm5hbWUgPSBjY29uLT5uYW1lOwogCQkJbmV3Y29uLT5jb250 eXBlID0gY2Nvbi0+Y29udHlwZTsKKwkJCWlmIChjY29uLT5wcmVfdmFsaWRhdGVkICYmIGNjb24t PmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCQkJbmV3Y29uLT5ubl9hdHRudW0gPSBjY29u LT5hdHRudW07CisJCQllbHNlCisJCQkJbmV3Y29uLT5ubl9hdHRudW0gPSAtMTsKKwogCQkJbmV3 Y29uLT5xdWFsID0gY2Nvbi0+ZXhwcjsKLQogCQkJdGFiLT5jb25zdHJhaW50cyA9IGxhcHBlbmQo dGFiLT5jb25zdHJhaW50cywgbmV3Y29uKTsKIAkJfQogCkBAIC0xMDcxOCw2ICsxMDc3Myw3IEBA IGFkZEZrUmVjdXJzZVJlZmVyZW5jaW5nKExpc3QgKip3cXVldWUsIENvbnN0cmFpbnQgKmZrY29u c3RyYWludCwgUmVsYXRpb24gcmVsLAogCQkJbmV3Y29uLT5yZWZpbmRpZCA9IGluZGV4T2lkOwog CQkJbmV3Y29uLT5jb25pZCA9IHBhcmVudENvbnN0cjsKIAkJCW5ld2Nvbi0+Y29ud2l0aHBlcmlv ZCA9IGZrY29uc3RyYWludC0+Zmtfd2l0aF9wZXJpb2Q7CisJCQluZXdjb24tPm5uX2F0dG51bSA9 IC0xOwogCQkJbmV3Y29uLT5xdWFsID0gKE5vZGUgKikgZmtjb25zdHJhaW50OwogCiAJCQl0YWIt PmNvbnN0cmFpbnRzID0gbGFwcGVuZCh0YWItPmNvbnN0cmFpbnRzLCBuZXdjb24pOwpAQCAtMTIw MjYsNiArMTIwODIsNyBAQCBBVEV4ZWNWYWxpZGF0ZUNvbnN0cmFpbnQoTGlzdCAqKndxdWV1ZSwg UmVsYXRpb24gcmVsLCBjaGFyICpjb25zdHJOYW1lLAogCQkJbmV3Y29uLT5yZWZyZWxpZCA9IGNv bi0+Y29uZnJlbGlkOwogCQkJbmV3Y29uLT5yZWZpbmRpZCA9IGNvbi0+Y29uaW5kaWQ7CiAJCQlu ZXdjb24tPmNvbmlkID0gY29uLT5vaWQ7CisJCQluZXdjb24tPm5uX2F0dG51bSA9IC0xOwogCQkJ bmV3Y29uLT5xdWFsID0gKE5vZGUgKikgZmtjb25zdHJhaW50OwogCiAJCQkvKiBGaW5kIG9yIGNy ZWF0ZSB3b3JrIHF1ZXVlIGVudHJ5IGZvciB0aGlzIHRhYmxlICovCkBAIC0xMjA5OCw2ICsxMjE1 NSw3IEBAIEFURXhlY1ZhbGlkYXRlQ29uc3RyYWludChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBy ZWwsIGNoYXIgKmNvbnN0ck5hbWUsCiAKIAkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwo Q09OU1RST0lELCB0dXBsZSwKIAkJCQkJCQkJCQkgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbik7 CisJCQluZXdjb24tPm5uX2F0dG51bSA9IC0xOwogCQkJY29uYmluID0gVGV4dERhdHVtR2V0Q1N0 cmluZyh2YWwpOwogCQkJbmV3Y29uLT5xdWFsID0gKE5vZGUgKikgc3RyaW5nVG9Ob2RlKGNvbmJp bik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggZjBhNWY4ODc5YS4uNjlj ZWE5NzRjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTEwOCw2ICsxMDgs NyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNj YW4uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVh bS5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5o IgpAQCAtMTE2NiwzICsxMTY3LDgyIEBAIEV4ZWNXaXRob3V0T3ZlcmxhcHNOb3RFbXB0eShSZWxh dGlvbiByZWwsIE5hbWVEYXRhIGF0dG5hbWUsIERhdHVtIGF0dHZhbCwgY2hhciB0CiAJCQkJIGVy cm1zZygiZW1wdHkgV0lUSE9VVCBPVkVSTEFQUyB2YWx1ZSBmb3VuZCBpbiBjb2x1bW4gXCIlc1wi IGluIHJlbGF0aW9uIFwiJXNcIiIsCiAJCQkJCQlOYW1lU3RyKGF0dG5hbWUpLCBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWwpKSkpOwogfQorCitib29sCitpbmRleF9jaGVja19ub3RudWxsKE9p ZCB0YWJsZV9vaWQsIE9pZCBpbmRleG9pZCkKK3sKKwlSZWxhdGlvbiBpbmRleDsKKwlSZWxhdGlv biBoZWFwOworCisJU25hcHNob3REYXRhIERpcnR5U25hcHNob3Q7CisJSW5kZXhTY2FuRGVzYyBp bmRleF9zY2FuOworCVNjYW5LZXlEYXRhIHNjYW5rZXlzW0lOREVYX01BWF9LRVlTXTsKKwlUdXBs ZVRhYmxlU2xvdCAqZXhpc3Rpbmdfc2xvdDsKKwlJbmRleEluZm8gICppbmRleEluZm87CisJRVN0 YXRlCSAgICplc3RhdGU7CisJaW50CQkJaW5kbmtleWF0dHM7CisJRXhwckNvbnRleHQgKmVjb250 ZXh0OworCWJvb2wgYWxsX25vdF9udWxsID0gdHJ1ZTsKKworCWhlYXAgPSB0YWJsZV9vcGVuKHRh YmxlX29pZCwgTm9Mb2NrKTsKKwlpbmRleCA9IGluZGV4X29wZW4oaW5kZXhvaWQsIEFjY2Vzc1No YXJlTG9jayk7CisJLyoKKwkgKiBOZWVkIGFuIEVTdGF0ZSBmb3Igc2xvdCB0byBob2xkIHRoZSBj dXJyZW50IHR1cGxlLgorCSAqCisJICovCisJZXN0YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgp OworCWVjb250ZXh0ID0gR2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOworCWV4aXN0aW5n X3Nsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShoZWFwLCBOVUxMKTsKKworCS8qIEFycmFuZ2UgZm9y IGVjb250ZXh0J3Mgc2NhbiB0dXBsZSB0byBiZSB0aGUgdHVwbGUgdW5kZXIgdGVzdCAqLworCWVj b250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IGV4aXN0aW5nX3Nsb3Q7CisKKwlpbmRleEluZm8gPSBC dWlsZEluZGV4SW5mbyhpbmRleCk7CisJaW5kbmtleWF0dHMgPSBJbmRleFJlbGF0aW9uR2V0TnVt YmVyT2ZLZXlBdHRyaWJ1dGVzKGluZGV4KTsKKwkvKgorCSAqIFNlYXJjaCB0aGUgdHVwbGVzIHRo YXQgYXJlIGluIHRoZSBpbmRleCBmb3IgYW55IHZpb2xhdGlvbnMsIGluY2x1ZGluZworCSAqIHR1 cGxlcyB0aGF0IGFyZW4ndCB2aXNpYmxlIHlldC4KKwkgKi8KKwlJbml0RGlydHlTbmFwc2hvdChE aXJ0eVNuYXBzaG90KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kbmtleWF0dHM7IGkrKykK Kwl7CisJCS8qIHNldCB1cCBhbiBJUyBOT1QgTlVMTCBzY2FuIGtleSBzbyB0aGF0IHdlIGlnbm9y ZSBudWxscyAqLworCQlTY2FuS2V5RW50cnlJbml0aWFsaXplKCZzY2Fua2V5c1tpXSwKKwkJCQkJ CQkJU0tfSVNOVUxMIHwgU0tfU0VBUkNITlVMTCwKKwkJCQkJCQkJMSwJCQkJLyogaW5kZXggY29s IHRvIHNjYW4gKi8KKwkJCQkJCQkJSW52YWxpZFN0cmF0ZWd5LC8qIG5vIHN0cmF0ZWd5ICovCisJ CQkJCQkJCUludmFsaWRPaWQsCQkvKiBubyBzdHJhdGVneSBzdWJ0eXBlICovCisJCQkJCQkJCUlu dmFsaWRPaWQsCQkvKiBubyBjb2xsYXRpb24gKi8KKwkJCQkJCQkJSW52YWxpZE9pZCwJCS8qIG5v IHJlZyBwcm9jIGZvciB0aGlzICovCisJCQkJCQkJCShEYXR1bSkgMCk7CQkvKiBjb25zdGFudCAq LworCX0KKworCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsICZEaXJ0 eVNuYXBzaG90LCBpbmRua2V5YXR0cywgMCk7CisJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNj YW5rZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7CisJd2hpbGUgKGluZGV4X2dldG5leHRfc2xv dChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCisJewor CQlEYXR1bQkJZXhpc3RpbmdfdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKKwkJYm9vbAkJZXhpc3Rp bmdfaXNudWxsW0lOREVYX01BWF9LRVlTXTsKKworCQkvKgorCQkgKiBFeHRyYWN0IHRoZSBpbmRl eCBjb2x1bW4gdmFsdWVzIGFuZCBpc251bGwgZmxhZ3MgZnJvbSB0aGUgZXhpc3RpbmcKKwkJICog dHVwbGUuCisJCSAqLworCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sIGV4aXN0aW5nX3Nsb3Qs IGVzdGF0ZSwKKwkJCQkJICAgZXhpc3RpbmdfdmFsdWVzLCBleGlzdGluZ19pc251bGwpOworCQlp ZiAoZXhpc3RpbmdfaXNudWxsWzBdKQorCQl7CisJCQlhbGxfbm90X251bGwgPSBmYWxzZTsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJaW5kZXhfZW5kc2NhbihpbmRleF9zY2FuKTsKKwl0YWJsZV9j bG9zZShoZWFwLCBOb0xvY2spOworCWluZGV4X2Nsb3NlKGluZGV4LCBBY2Nlc3NTaGFyZUxvY2sp OworCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoZXhpc3Rpbmdfc2xvdCk7CisJRnJlZUV4 ZWN1dG9yU3RhdGUoZXN0YXRlKTsKKworCXJldHVybiBhbGxfbm90X251bGw7Cit9ClwgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9oZWFw LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2hlYXAuaAppbmRleCA4YzI3OGYyMDJiLi5hOTE4ODAx NzYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2hlYXAuaAorKysgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL2hlYXAuaApAQCAtNDUsNiArNDUsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb29r ZWRDb25zdHJhaW50CiAJaW50MTYJCWluaGNvdW50OwkJLyogbnVtYmVyIG9mIHRpbWVzIGNvbnN0 cmFpbnQgaXMgaW5oZXJpdGVkICovCiAJYm9vbAkJaXNfbm9faW5oZXJpdDsJLyogY29uc3RyYWlu dCBoYXMgbG9jYWwgZGVmIGFuZCBjYW5ub3QgYmUKIAkJCQkJCQkJICogaW5oZXJpdGVkICovCisJ Ym9vbAkJcHJlX3ZhbGlkYXRlZDsgIC8qIHRoZSBjb25zdHJhaW50IGFscmVhZHkgdmFsaWRhdGVk PyBvbmx5IGZvciBDT05TVFJfQ0hFQ0sgKi8KIH0gQ29va2VkQ29uc3RyYWludDsKIAogZXh0ZXJu IFJlbGF0aW9uIGhlYXBfY3JlYXRlKGNvbnN0IGNoYXIgKnJlbG5hbWUsCkBAIC0xMTMsNiArMTE0 LDcgQEAgZXh0ZXJuIExpc3QgKkFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMoUmVsYXRpb24gcmVs LAogCQkJCQkJCQkJICAgYm9vbCBhbGxvd19tZXJnZSwKIAkJCQkJCQkJCSAgIGJvb2wgaXNfbG9j YWwsCiAJCQkJCQkJCQkgICBib29sIGlzX2ludGVybmFsLAorCQkJCQkJCQkJICAgYm9vbCBpbmRl eF9yZWJ1aWxkLAogCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcpOwogZXh0ZXJu IExpc3QgKkFkZFJlbGF0aW9uTm90TnVsbENvbnN0cmFpbnRzKFJlbGF0aW9uIHJlbCwKIAkJCQkJ CQkJCQkgICBMaXN0ICpjb25zdHJhaW50cywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IDQ5 NGVjNGYyZTUuLjk2MmZmYTM1MjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtNjYyLDYg KzY2Miw3IEBAIGV4dGVybiB2b2lkIGNoZWNrX2V4Y2x1c2lvbl9jb25zdHJhaW50KFJlbGF0aW9u IGhlYXAsIFJlbGF0aW9uIGluZGV4LAogCQkJCQkJCQkJICAgY29uc3QgRGF0dW0gKnZhbHVlcywg Y29uc3QgYm9vbCAqaXNudWxsLAogCQkJCQkJCQkJICAgRVN0YXRlICplc3RhdGUsIGJvb2wgbmV3 SW5kZXgpOwogCitleHRlcm4gYm9vbCBpbmRleF9jaGVja19ub3RudWxsKE9pZCBoZWFwLCBPaWQg aW5kZXhvaWQpOwogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlvbnMgaW4gZXhlY1JlcGxp Y2F0aW9uLmMKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9z Y2hlZHVsZSBiL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUKaW5kZXggMTQz MTA5YWE0ZC4uMzJkN2U1MWFhOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xh dGlvbl9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxl CkBAIC01NSw2ICs1NSw3IEBAIHRlc3Q6IG1lcmdlLWRlbGV0ZQogdGVzdDogbWVyZ2UtdXBkYXRl CiB0ZXN0OiBtZXJnZS1tYXRjaC1yZWNoZWNrCiB0ZXN0OiBtZXJnZS1qb2luCit0ZXN0OiBmYXN0 LXNldC1ub3RudWxsCiB0ZXN0OiBkZWxldGUtYWJvcnQtc2F2ZXB0CiB0ZXN0OiBkZWxldGUtYWJv cnQtc2F2ZXB0LTIKIHRlc3Q6IGFib3J0ZWQta2V5cmV2b2tlCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2FsdGVyX3RhYmxlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvYWx0ZXJfdGFibGUub3V0CmluZGV4IDEyODUyYWE2MTIuLjgxZTA2NTkxNGEgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0CkBAIC00NzM4LDMgKzQ3Mzgs MzggQEAgZHJvcCBwdWJsaWNhdGlvbiBwdWIxOwogZHJvcCBzY2hlbWEgYWx0ZXIxIGNhc2NhZGU7 CiBkcm9wIHNjaGVtYSBhbHRlcjIgY2FzY2FkZTsKIE5PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8g dGFibGUgYWx0ZXIyLnQxCistLS0tLWZhc3QgYWRkIG5vdC1udWxsIGNvbnN0cmFpbnQgdGVzdHMu CitDUkVBVEUgVEFCTEUgdHAgKGEgaW50LCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTICgyMikg c3RvcmVkKSBQQVJUSVRJT04gQlkgcmFuZ2UoYSk7CitDUkVBVEUgVEFCTEUgdHBwMShhIGludCwg YiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSsxKSBzdG9yZWQpOworQ1JFQVRFIFRBQkxFIHRw cDIoYSBpbnQsIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGErMTApIHN0b3JlZCk7CitBTFRF UiBUQUJMRSB0cCBBVFRBQ0ggUEFSVElUSU9OIHRwcDEgRk9SIHZhbHVlcyBmcm9tICggMSApIHRv ICgxMDApOworQUxURVIgVEFCTEUgdHAgQVRUQUNIIFBBUlRJVElPTiB0cHAyIGRlZmF1bHQ7CitD UkVBVEUgSU5ERVggT04gdHAoYik7CitpbnNlcnQgaW50byB0cCBzZWxlY3QgZyBmcm9tIGdlbmVy YXRlX3NlcmllcygxMDAsMTIwKSBnOworLS1jYW5ub3QgZmFzdCBBTFRFUiBUQUJMRSBTRVQgTk9U IE5VTEwgb3IgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgTk9UIE5VTEwKKy0tc28gd29uJ3Qg aW50ZXJmZXJlIHRoZSBpbmRleCByZWJ1aWxkLgorQUxURVIgVEFCTEUgdHAgYWx0ZXIgY29sdW1u IGIgc2V0IG5vdCBudWxsLCBBTFRFUiBDT0xVTU4gYiBTRVQgRVhQUkVTU0lPTiBBUyAoYSAqIDMp OworQUxURVIgVEFCTEUgdHAgYWx0ZXIgY29sdW1uIGIgZHJvcCBub3QgbnVsbDsKK0FMVEVSIFRB QkxFIHRwIGFkZCBjb25zdHJhaW50IG5uIG5vdCBudWxsIGIsIEFMVEVSIENPTFVNTiBiIFNFVCBF WFBSRVNTSU9OIEFTIChhICogMTEpOworLS0tLS0tdGVzdCBub24tcGFydGl0aW9uZWQgdGFibGUK K0NSRUFURSBUQUJMRSB0MShmMSBJTlQsIGYyIGludCwgZjMgaW50KTsKK0lOU0VSVCBJTlRPIHQx IHNlbGVjdCBnLCBnKzEsIGcrMiBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAyMCkgZzsKK0NSRUFU RSBJTkRFWCB0MV9mMWlkeCBPTiB0MShmMSk7CitDUkVBVEUgSU5ERVggdDFfZjJpZHggT04gdDEo ZjIpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCB0MV9mM2lkeCBPTiB0MShmMyk7CistLWNhbm5vdCBm YXN0IEFMVEVSIFRBQkxFIFNFVCBOT1QgTlVMTCBvciBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlO VCBOT1QgTlVMTAorLS1zbyB3b24ndCBpbnRlcmZlcmUgdGhlIGluZGV4IHJlYnVpbGQuCitBTFRF UiBUQUJMRSB0MSBhbHRlciBjb2x1bW4gZjEgc2V0IG5vdCBudWxsLCBBTFRFUiBmMSBUWVBFIEJJ R0lOVDsKK0FMVEVSIFRBQkxFIHQxIGFsdGVyIGNvbHVtbiBmMSBkcm9wIG5vdCBudWxsOworQUxU RVIgVEFCTEUgdDEgYWRkIGNvbnN0cmFpbnQgbm4gbm90IG51bGwgZjEsIEFMVEVSIGYxIFRZUEUg YmlnaW50OworLS1vay4KK0FMVEVSIFRBQkxFIHQxIGFsdGVyIGNvbHVtbiBmMSBkcm9wIG5vdCBu dWxsLCBhbHRlciBjb2x1bW4gZjIgZHJvcCBub3QgbnVsbDsKK0FMVEVSIFRBQkxFIHQxIGFsdGVy IGNvbHVtbiBmMiBzZXQgbm90IG51bGwsIGFsdGVyIGNvbHVtbiBmMSBzZXQgbm90IG51bGw7Cist LW9rLgorQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYxIGRyb3Agbm90IG51bGwsIGFsdGVy IGNvbHVtbiBmMiBkcm9wIG5vdCBudWxsOworQUxURVIgVEFCTEUgdDEgYWRkIGNvbnN0cmFpbnQg bm4gbm90IG51bGwgZjIsIGFkZCBjb25zdHJhaW50IG5uZjEgbm90IG51bGwgZjE7CistLW9rLgor QUxURVIgVEFCTEUgdDEgYWRkIGNvbnN0cmFpbnQgdF9mM19wayBwcmltYXJ5IGtleSB1c2luZyBp bmRleCB0MV9mM2lkeDsKK05PVElDRTogIEFMVEVSIFRBQkxFIC8gQUREIENPTlNUUkFJTlQgVVNJ TkcgSU5ERVggd2lsbCByZW5hbWUgaW5kZXggInQxX2YzaWR4IiB0byAidF9mM19wayIKK2Ryb3Ag dGFibGUgdDE7Citkcm9wIHRhYmxlIHRwcDEsIHRwcDIsIHRwOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvYWx0ZXJfdGFibGUuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWx0 ZXJfdGFibGUuc3FsCmluZGV4IGM4OGY5ZWFhYjAuLmU2NGIzZGNlZWQgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2FsdGVyX3RhYmxlLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9hbHRlcl90YWJsZS5zcWwKQEAgLTMxMDIsMyArMzEwMiw0MyBAQCBhbHRlciB0YWJsZSBh bHRlcjEudDEgc2V0IHNjaGVtYSBhbHRlcjI7CiBkcm9wIHB1YmxpY2F0aW9uIHB1YjE7CiBkcm9w IHNjaGVtYSBhbHRlcjEgY2FzY2FkZTsKIGRyb3Agc2NoZW1hIGFsdGVyMiBjYXNjYWRlOworCist LS0tLWZhc3QgYWRkIG5vdC1udWxsIGNvbnN0cmFpbnQgdGVzdHMuCitDUkVBVEUgVEFCTEUgdHAg KGEgaW50LCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTICgyMikgc3RvcmVkKSBQQVJUSVRJT04g QlkgcmFuZ2UoYSk7CitDUkVBVEUgVEFCTEUgdHBwMShhIGludCwgYiBpbnQgR0VORVJBVEVEIEFM V0FZUyBBUyAoYSsxKSBzdG9yZWQpOworQ1JFQVRFIFRBQkxFIHRwcDIoYSBpbnQsIGIgaW50IEdF TkVSQVRFRCBBTFdBWVMgQVMgKGErMTApIHN0b3JlZCk7CitBTFRFUiBUQUJMRSB0cCBBVFRBQ0gg UEFSVElUSU9OIHRwcDEgRk9SIHZhbHVlcyBmcm9tICggMSApIHRvICgxMDApOworQUxURVIgVEFC TEUgdHAgQVRUQUNIIFBBUlRJVElPTiB0cHAyIGRlZmF1bHQ7CitDUkVBVEUgSU5ERVggT04gdHAo Yik7CitpbnNlcnQgaW50byB0cCBzZWxlY3QgZyBmcm9tIGdlbmVyYXRlX3NlcmllcygxMDAsMTIw KSBnOworCistLWNhbm5vdCBmYXN0IEFMVEVSIFRBQkxFIFNFVCBOT1QgTlVMTCBvciBBTFRFUiBU QUJMRSBBREQgQ09OU1RSQUlOVCBOT1QgTlVMTAorLS1zbyB3b24ndCBpbnRlcmZlcmUgdGhlIGlu ZGV4IHJlYnVpbGQuCitBTFRFUiBUQUJMRSB0cCBhbHRlciBjb2x1bW4gYiBzZXQgbm90IG51bGws IEFMVEVSIENPTFVNTiBiIFNFVCBFWFBSRVNTSU9OIEFTIChhICogMyk7CitBTFRFUiBUQUJMRSB0 cCBhbHRlciBjb2x1bW4gYiBkcm9wIG5vdCBudWxsOworQUxURVIgVEFCTEUgdHAgYWRkIGNvbnN0 cmFpbnQgbm4gbm90IG51bGwgYiwgQUxURVIgQ09MVU1OIGIgU0VUIEVYUFJFU1NJT04gQVMgKGEg KiAxMSk7CisKKy0tLS0tLXRlc3Qgbm9uLXBhcnRpdGlvbmVkIHRhYmxlCitDUkVBVEUgVEFCTEUg dDEoZjEgSU5ULCBmMiBpbnQsIGYzIGludCk7CitJTlNFUlQgSU5UTyB0MSBzZWxlY3QgZywgZysx LCBnKzIgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjApIGc7CitDUkVBVEUgSU5ERVggdDFfZjFp ZHggT04gdDEoZjEpOworQ1JFQVRFIElOREVYIHQxX2YyaWR4IE9OIHQxKGYyKTsKK0NSRUFURSBV TklRVUUgSU5ERVggdDFfZjNpZHggT04gdDEoZjMpOworCistLWNhbm5vdCBmYXN0IEFMVEVSIFRB QkxFIFNFVCBOT1QgTlVMTCBvciBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBOT1QgTlVMTAor LS1zbyB3b24ndCBpbnRlcmZlcmUgdGhlIGluZGV4IHJlYnVpbGQuCitBTFRFUiBUQUJMRSB0MSBh bHRlciBjb2x1bW4gZjEgc2V0IG5vdCBudWxsLCBBTFRFUiBmMSBUWVBFIEJJR0lOVDsKK0FMVEVS IFRBQkxFIHQxIGFsdGVyIGNvbHVtbiBmMSBkcm9wIG5vdCBudWxsOworQUxURVIgVEFCTEUgdDEg YWRkIGNvbnN0cmFpbnQgbm4gbm90IG51bGwgZjEsIEFMVEVSIGYxIFRZUEUgYmlnaW50OworCist LW9rLgorQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYxIGRyb3Agbm90IG51bGwsIGFsdGVy IGNvbHVtbiBmMiBkcm9wIG5vdCBudWxsOworQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYy IHNldCBub3QgbnVsbCwgYWx0ZXIgY29sdW1uIGYxIHNldCBub3QgbnVsbDsKKy0tb2suCitBTFRF UiBUQUJMRSB0MSBhbHRlciBjb2x1bW4gZjEgZHJvcCBub3QgbnVsbCwgYWx0ZXIgY29sdW1uIGYy IGRyb3Agbm90IG51bGw7CitBTFRFUiBUQUJMRSB0MSBhZGQgY29uc3RyYWludCBubiBub3QgbnVs bCBmMiwgYWRkIGNvbnN0cmFpbnQgbm5mMSBub3QgbnVsbCBmMTsKKy0tb2suCitBTFRFUiBUQUJM RSB0MSBhZGQgY29uc3RyYWludCB0X2YzX3BrIHByaW1hcnkga2V5IHVzaW5nIGluZGV4IHQxX2Yz aWR4OworCitkcm9wIHRhYmxlIHQxOworZHJvcCB0YWJsZSB0cHAxLCB0cHAyLCB0cDsKXCBObyBu ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0tIAoyLjM0LjEKCg== --000000000000df370c06295dd8f7--