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 1vFuBC-003Ee9-V3 for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Nov 2025 13:01:02 +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 1vFuBB-003NsQ-Tf for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Nov 2025 13:01:00 +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 1vFuBB-003NsH-4J for pgsql-hackers@lists.postgresql.org; Mon, 03 Nov 2025 13:01:00 +0000 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vFuB5-005DWi-2M for pgsql-hackers@postgresql.org; Mon, 03 Nov 2025 13:00:58 +0000 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-7a9e8a15502so1198855b3a.1 for ; Mon, 03 Nov 2025 05:00:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762174855; x=1762779655; darn=postgresql.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dh9NTn6exrVTRATe2pXxOW8yGRseSQ0jPHJJm2cTw+g=; b=hCNYGqBwHwGTMDq+LZ2DZb8v5odN88EDUOy0t5SDBA1wvK5LzG7/8ZtrUxr67Y1HEe mjrQ7OXYsdDiQDKU9zWOG6WG4l8r7Yj1yV/SmUuhFEdn3G7cIhtYnXXEaU3BpoUZTcOy 13UQYQeniyMn78yCAPSZTBB6QUSLHiSvsoRexwTR9KCSWlzc2QXu2jx3KQGc889P7+OS pEZR6whBOPSVrkQznkpm+/cx1f67hV2/DSsgFvFdDV23gax9PSHh+8iY+a44VSUJq1X7 78utiBpy7BzbhAwGkvGKloPqkgoK85TdivEq1f758S+DTrIxT2Gex4FvBmlS+lnWk1iG xj3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762174855; x=1762779655; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=dh9NTn6exrVTRATe2pXxOW8yGRseSQ0jPHJJm2cTw+g=; b=Srka6KSu+yqreP06LBrJsu6d1pk+XNmTD6kpQHCIQmXbBsZA76seMFvuVbDEDs/yjU zoSlioBpgdGTh8j8Jmz5r/1XgVAQz/hk2Lcoyny+ixkWpPwfGjpMhd6ZRMoBJPWW9xyI 4zg4DvHd8ZJRXtYiCI9yvbpYhZ0jPog2eHOj2InuBwIOWE5j4K6lTm2P54zXRfe0gT8T hv3CcB42Z9UbgT7YoA/WEL1Xf7ZRq7zfhozpgsqA5je2pBFdB+5CDYrA5XjRtxEiwefO MQTnlnAasnJFSnnTexy6huCptYEHYvnZxT4IlJiNawArLnNLbLs7sgYZEI/XlbQ8CXr5 8f/w== X-Gm-Message-State: AOJu0Yyf4+lQAyLiIzYCoQF/yxlGdua0pYce9QolxgXJkNlPGmp5h506 zvav0AeB4zdPjjB9o3jVksUBGaQmQIsCgDcr8AC9MRsFV5Hgv/9cd3/X5yl6TA== X-Gm-Gg: ASbGnctvLdJgQnlwRYleL7sCoL8WiZLASoGUzB61Vs0Q+WtCTiUSRcr99KoIOn9PKPt MWIjCZ7hZnuUFNA0SaPab5A1u+I81BJc44trhOxt+t6ZnKCXfZEn2sp6RlcUtQuuHIzFmtCe7lv T4P1GavayLD5CYSJmZk1M+no7GgIbz+9s5ghvULgQZKPnrR440UmWd1mYpCuhZwU+1dSwpiPcsE ilyj8ThaZMd4ZBDZd6GqBjdmP/5H4F8CkQrzT5axbIEXb0ajryoG3yn9Pk2JU9WjlZstINGmjjF b8j5GZVLx94zwpA1lXxzJ2TdEPcm5WJ+qbaujBIMSn/8fVLD2BAUzRSJ4qNeckz7cy7cYOJe2qN msy+3lfIeC4leAamDyivFvIuIjHZEulMTuULtnVHl24O8K8c+Boi4odmz8w7JP48a3WZkUvu5Tm w9B56qVqY1zkA8a0MxxBTJNTDx5U2MGiVYTg== X-Google-Smtp-Source: AGHT+IGKhIhcElv9ndHCS4YyMzZRgMGQOAzr8nl1vz4DZJs6Zta5Clqiu4ZdKkVhU2d5frxMw8O32Q== X-Received: by 2002:a05:6a00:4fce:b0:7aa:e5f2:6175 with SMTP id d2e1a72fcca58-7aae5f263b1mr4447700b3a.32.1762174852849; Mon, 03 Nov 2025 05:00:52 -0800 (PST) Received: from localhost ([2804:14d:328a:a59c:59ad:3b0d:ff41:b4ac]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7a7db197335sm11404113b3a.47.2025.11.03.05.00.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 03 Nov 2025 05:00:51 -0800 (PST) Content-Type: multipart/mixed; boundary=82b33e176e6bcfb9d8e2e8cdeb7b2a1f970704377f33b378902fecad8868 Mime-Version: 1.0 Date: Mon, 03 Nov 2025 10:00:48 -0300 Message-Id: Cc: "Pgsql Hackers" Subject: Re: Asynchronous MergeAppend From: "Matheus Alcantara" To: "Alexander Pyhalov" , "Alena Rybakina" X-Mailer: aerc 0.21.0 References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> <159b591411bb2c81332018927acbd509@postgrespro.ru> In-Reply-To: <159b591411bb2c81332018927acbd509@postgrespro.ru> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --82b33e176e6bcfb9d8e2e8cdeb7b2a1f970704377f33b378902fecad8868 Content-Type: multipart/alternative; boundary=7e65d61f020c4c1113f7e7a020deee6f1f53fbfe285ded99f9bfe35be9d6 --7e65d61f020c4c1113f7e7a020deee6f1f53fbfe285ded99f9bfe35be9d6 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 Hi, thanks for working on this! On Tue Aug 20, 2024 at 6:14 AM -03, Alexander Pyhalov wrote: >> In addition, I have a question about testing your feature on a=20 >> benchmark. Are you going to do this? >>=20 > > The main reason for this work is a dramatic performance degradation when= =20 > Append plans with async foreign scan nodes are switched to MergeAppend=20 > plans with synchronous foreign scans. > > I've performed some synthetic tests to prove the benefits of async Merge= =20 > Append. So far tests are performed on one physical host. > > For tests I've deployed 3 PostgreSQL instances on ports 5432-5434. > > The first instance: > create server s2 foreign data wrapper postgres_fdw OPTIONS ( port=20 > '5433', dbname 'postgres', async_capable 'on'); > create server s3 foreign data wrapper postgres_fdw OPTIONS ( port=20 > '5434', dbname 'postgres', async_capable 'on'); > > create foreign table players_p1 partition of players for values with=20 > (modulus 4, remainder 0) server s2; > create foreign table players_p2 partition of players for values with=20 > (modulus 4, remainder 1) server s2; > create foreign table players_p3 partition of players for values with=20 > (modulus 4, remainder 2) server s3; > create foreign table players_p4 partition of players for values with=20 > (modulus 4, remainder 3) server s3; > > s2 instance: > create table players_p1 (id int, name text, score int); > create table players_p2 (id int, name text, score int); > create index on players_p1(score); > create index on players_p2(score); > > s3 instance: > create table players_p3 (id int, name text, score int); > create table players_p4 (id int, name text, score int); > create index on players_p3(score); > create index on players_p4(score); > > s1 instance: > insert into players select i, 'player_' ||i, random()* 100 from=20 > generate_series(1,100000) i; > > pgbench script: > \set rnd_offset random(0,200) > \set rnd_limit random(10,20) > > select * from players order by score desc offset :rnd_offset limit=20 > :rnd_limit; > > pgbench was run as: > pgbench -n -f 1.sql postgres -T 100 -c 16 -j 16 > > CPU idle was about 5-10%. > > pgbench results: > > [...] > However, if we set number of threads to 1, so that CPU has idle cores,=20 > we'll see more evident improvements: > > Patched, async_capable on: > pgbench (14.13, server 18devel) > transaction type: 1.sql > scaling factor: 1 > query mode: simple > number of clients: 1 > number of threads: 1 > duration: 100 s > number of transactions actually processed: 20221 > latency average =3D 4.945 ms > initial connection time =3D 7.035 ms > tps =3D 202.221816 (without initial connection time) > > > Patched, async_capable off > transaction type: 1.sql > scaling factor: 1 > query mode: simple > number of clients: 1 > number of threads: 1 > duration: 100 s > number of transactions actually processed: 14941 > latency average =3D 6.693 ms > initial connection time =3D 7.037 ms > tps =3D 149.415688 (without initial connection time) > I ran some benchmarks based on v4 attached by Alvaro in [1] using a smaller number of threads so that some CPU cores would be idle and I also obtained better results: Patched, async_capable on: tps =3D 4301.567405=20 Master, async_capable on: tps =3D 3847.084545 So I'm +1 for the idea. I know it's been while since the last patch, and unfortunully it hasn't received reviews since then. Do you still plan to work on it? I still need to take a look on the code to see if I can help with some comments. During the tests I got compiler errors due to fce7c73fba4, so I'm attaching a v5 with guc_parameters.dat correctly sorted.=20 The postgres_fdw/regress tests was also failling due to some whitespace problems, v5 also fix this. [1] https://www.postgresql.org/message-id/202510251154.isknefznk566%40alvhe= rre.pgsql -- Matheus Alcantara --7e65d61f020c4c1113f7e7a020deee6f1f53fbfe285ded99f9bfe35be9d6-- --82b33e176e6bcfb9d8e2e8cdeb7b2a1f970704377f33b378902fecad8868 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0001-mark_async_capable-subpath-should-match-subplan.patch Content-Type: text/plain; charset=utf-8; name=v5-0001-mark_async_capable-subpath-should-match-subplan.patch RnJvbSAyN2U5ZjZmODllZTQyMWYyOWNhOGVlNjY5ODQ1YTkxMGM4ZTNmNzRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBGcmksIDIxIEp1bCAyMDIzIDEyOjA1OjA3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2NSAxLzJdIG1hcmtfYXN5bmNfY2FwYWJsZSgpOiBzdWJwYXRoIHNob3VsZCBtYXRjaCBz dWJwbGFuCgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyB8IDE2 ICsrKysrKysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRl cGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IDhh ZjA5MWJhNjQ3Li4wMDRiYmM2ZDFkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0 ZXBsYW4uYwpAQCAtMTEzOSwxMCArMTEzOSwxMCBAQCBtYXJrX2FzeW5jX2NhcGFibGVfcGxhbihQ bGFuICpwbGFuLCBQYXRoICpwYXRoKQogCQkJCVN1YnF1ZXJ5U2NhbiAqc2Nhbl9wbGFuID0gKFN1 YnF1ZXJ5U2NhbiAqKSBwbGFuOwogCiAJCQkJLyoKLQkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBs YW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQgbm9kZSwKLQkJCQkgKiB3ZSBjYW4ndCBl eGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5LgorCQkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBu b2RlIGluY2x1ZGVzIGEgZ2F0aW5nIFJlc3VsdCBub2RlIG9yCisJCQkJICogYSBTb3J0IG5vZGUs IHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNocm9ub3VzbHkuCiAJCQkJICovCi0JCQkJaWYgKElz QShwbGFuLCBSZXN1bHQpKQorCQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwg U29ydCkpCiAJCQkJCXJldHVybiBmYWxzZTsKIAogCQkJCS8qCkBAIC0xMTYwLDEwICsxMTYwLDEw IEBAIG1hcmtfYXN5bmNfY2FwYWJsZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAJCQkJ RmR3Um91dGluZSAqZmR3cm91dGluZSA9IHBhdGgtPnBhcmVudC0+ZmR3cm91dGluZTsKIAogCQkJ CS8qCi0JCQkJICogSWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBnYXRpbmcg UmVzdWx0IG5vZGUsCi0JCQkJICogd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4K KwkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1 bHQgbm9kZSBvcgorCQkJCSAqIGEgU29ydCBub2RlLCB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5j aHJvbm91c2x5LgogCQkJCSAqLwotCQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJCQlpZiAo SXNBKHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpKQogCQkJCQlyZXR1cm4gZmFsc2U7 CiAKIAkJCQlBc3NlcnQoZmR3cm91dGluZSAhPSBOVUxMKTsKQEAgLTExNzYsOSArMTE3Niw5IEBA IG1hcmtfYXN5bmNfY2FwYWJsZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAKIAkJCS8q CiAJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIFJlc3VsdCBub2Rl IGZvciB0aGUKLQkJCSAqIHByb2plY3Rpb24sIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNocm9u b3VzbHkuCisJCQkgKiBwcm9qZWN0aW9uIG9yIGEgU29ydCBub2RlLCB3ZSBjYW4ndCBleGVjdXRl IGl0IGFzeW5jaHJvbm91c2x5LgogCQkJICovCi0JCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJ CQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpKQogCQkJCXJldHVybiBm YWxzZTsKIAogCQkJLyoKLS0gCjIuNTEuMAoK --82b33e176e6bcfb9d8e2e8cdeb7b2a1f970704377f33b378902fecad8868 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0002-MergeAppend-should-support-Async-Foreign-Scan-sub.patch Content-Type: text/plain; charset=utf-8; name=v5-0002-MergeAppend-should-support-Async-Foreign-Scan-sub.patch RnJvbSBkZDJhYWNlOTU0MGQ0NjE2NWE4MTY5NWU2ZGY4MTdmYzRkODBkZDViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDI2IEp1bCAyMDI1IDEwOjQzOjU3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2NSAyLzJdIE1lcmdlQXBwZW5kIHNob3VsZCBzdXBwb3J0IEFzeW5jIEZvcmVpZ24gU2Nh biBzdWJwbGFucwoKLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5v dXQgICAgfCAyNDcgKysrKysrKysrCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu YyAgICAgICAgICAgfCAgMTAgKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19m ZHcuc3FsICAgICB8ICA3OCArKysKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAg ICAgICAgICAgICB8ICAxNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYyAgICAg ICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMg ICAgICAgIHwgNDgxICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYyAgICAgICB8ICAgOSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19w YXJhbWV0ZXJzLmRhdCAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFw cGVuZC5oICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAg ICAgICAgICAgICAgfCAgNTYgKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dCAgICAgICAgfCAgIDMgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDkwOCBpbnNlcnRpb25zKCspLCA2 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVk L3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jl c19mZHcub3V0CmluZGV4IGNkMjgxMjYwNDlkLi5kNWYyNWE2ZGU5YSAxMDA2NDQKLS0tIGEvY29u dHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmli L3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0xMTU1Niw2ICsxMTU1 Niw0NiBAQCBTRUxFQ1QgKiBGUk9NIHJlc3VsdF90YmwgT1JERVIgQlkgYTsKICgyIHJvd3MpCiAK IERFTEVURSBGUk9NIHJlc3VsdF90Ymw7CistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiICUgMTAw ID0gMCBPUkRFUiBCWSBiLCBhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBB cHBlbmQKKyAgIFNvcnQgS2V5OiBhc3luY19wdC5iLCBhc3luY19wdC5hCisgICAtPiAgQXN5bmMg Rm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAgICBPdXRw dXQ6IGFzeW5jX3B0XzEuYSwgYXN5bmNfcHRfMS5iLCBhc3luY19wdF8xLmMKKyAgICAgICAgIFJl bW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMSBXSEVSRSAoKChi ICUgMTAwKSA9IDApKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNU CisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBhc3luY19wdF8y CisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRfMi5iLCBhc3luY19wdF8y LmMKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2Vf dGJsMiBXSEVSRSAoKChiICUgMTAwKSA9IDApKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBh IEFTQyBOVUxMUyBMQVNUCisoOCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJF IGIgJSAxMDAgPSAwIE9SREVSIEJZIGIsIGE7CisgIGEgICB8ICBiICB8ICBjICAgCistLS0tLS0r LS0tLS0rLS0tLS0tCisgMTAwMCB8ICAgMCB8IDAwMDAKKyAyMDAwIHwgICAwIHwgMDAwMAorIDEx MDAgfCAxMDAgfCAwMTAwCisgMjEwMCB8IDEwMCB8IDAxMDAKKyAxMjAwIHwgMjAwIHwgMDIwMAor IDIyMDAgfCAyMDAgfCAwMjAwCisgMTMwMCB8IDMwMCB8IDAzMDAKKyAyMzAwIHwgMzAwIHwgMDMw MAorIDE0MDAgfCA0MDAgfCAwNDAwCisgMjQwMCB8IDQwMCB8IDA0MDAKKyAxNTAwIHwgNTAwIHwg MDUwMAorIDI1MDAgfCA1MDAgfCAwNTAwCisgMTYwMCB8IDYwMCB8IDA2MDAKKyAyNjAwIHwgNjAw IHwgMDYwMAorIDE3MDAgfCA3MDAgfCAwNzAwCisgMjcwMCB8IDcwMCB8IDA3MDAKKyAxODAwIHwg ODAwIHwgMDgwMAorIDI4MDAgfCA4MDAgfCAwODAwCisgMTkwMCB8IDkwMCB8IDA5MDAKKyAyOTAw IHwgOTAwIHwgMDkwMAorKDIwIHJvd3MpCisKIC0tIFRlc3QgZXJyb3IgaGFuZGxpbmcsIGlmIGFj Y2Vzc2luZyBvbmUgb2YgdGhlIGZvcmVpZ24gcGFydGl0aW9ucyBlcnJvcnMgb3V0CiBDUkVBVEUg Rk9SRUlHTiBUQUJMRSBhc3luY19wX2Jyb2tlbiBQQVJUSVRJT04gT0YgYXN5bmNfcHQgRk9SIFZB TFVFUyBGUk9NICgxMDAwMCkgVE8gKDEwMDAxKQogICBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAo dGFibGVfbmFtZSAnbm9uX2V4aXN0ZW50X3RhYmxlJyk7CkBAIC0xMTYwNCw2ICsxMTY0NCwzNSBA QCBDT1BZIGFzeW5jX3B0IFRPIHN0ZG91dDsgLS1lcnJvcgogRVJST1I6ICBjYW5ub3QgY29weSBm cm9tIGZvcmVpZ24gdGFibGUgImFzeW5jX3AxIgogREVUQUlMOiAgUGFydGl0aW9uICJhc3luY19w MSIgaXMgYSBmb3JlaWduIHRhYmxlIGluIHBhcnRpdGlvbmVkIHRhYmxlICJhc3luY19wdCIKIEhJ TlQ6ICBUcnkgdGhlIENPUFkgKFNFTEVDVCAuLi4pIFRPIHZhcmlhbnQuCistLSBUZXN0IE1lcmdl IEFwcGVuZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3lu Y19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgQXBwZW5kCisgICBTb3J0IEtleTogYXN5bmNfcHQuYiwg YXN5bmNfcHQuYQorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDEg YXN5bmNfcHRfMQorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0XzEuYiwg YXN5bmNfcHRfMS5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8xLmIgPT09IDUwNSkKKyAg ICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMSBP UkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgQXN5bmMg Rm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBhc3luY19wdF8yCisgICAgICAgICBPdXRw dXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRfMi5iLCBhc3luY19wdF8yLmMKKyAgICAgICAgIEZp bHRlcjogKGFzeW5jX3B0XzIuYiA9PT0gNTA1KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNU IGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90YmwyIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1Qs IGEgQVNDIE5VTExTIExBU1QKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFz eW5jX3AzIGFzeW5jX3B0XzMKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMy5hLCBhc3luY19w dF8zLmIsIGFzeW5jX3B0XzMuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMy5iID09PSA1 MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNl X3RibDMgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorKDE0IHJv d3MpCisKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIs IGE7CisgIGEgICB8ICBiICB8ICBjICAgCistLS0tLS0rLS0tLS0rLS0tLS0tCisgMTUwNSB8IDUw NSB8IDA1MDUKKyAyNTA1IHwgNTA1IHwgMDUwNQorIDM1MDUgfCA1MDUgfCAwNTA1CisoMyByb3dz KQorCiBEUk9QIEZPUkVJR04gVEFCTEUgYXN5bmNfcDM7CiBEUk9QIFRBQkxFIGJhc2VfdGJsMzsK IC0tIENoZWNrIGNhc2Ugd2hlcmUgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGhhcyBsb2NhbC9yZW1v dGUgcGFydGl0aW9ucwpAQCAtMTE2MzksNiArMTE3MDgsMzcgQEAgU0VMRUNUICogRlJPTSByZXN1 bHRfdGJsIE9SREVSIEJZIGE7CiAoMyByb3dzKQogCiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOwor LS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFwcGVuZAorICAgU29ydCBLZXk6 IGFzeW5jX3B0LmIsIGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVi bGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMS5hLCBh c3luY19wdF8xLmIsIGFzeW5jX3B0XzEuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMS5i ID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1Ymxp Yy5iYXNlX3RibDEgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAor ICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRfMgor ICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRfMi5j CisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90 ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMiBPUkRFUiBCWSBiIEFT QyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgU29ydAorICAgICAgICAgT3V0 cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAgICAgICBT b3J0IEtleTogYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmEKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAgICAgICAgICAgICAgT3V0cHV0OiBh c3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAgICAgICAgICAgICBG aWx0ZXI6IChhc3luY19wdF8zLmIgPT09IDUwNSkKKygxNiByb3dzKQorCitTRUxFQ1QgKiBGUk9N IGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAgfCAg YyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDE1MDUgfCA1MDUgfCAwNTA1CisgMjUwNSB8IDUw NSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUwNQorKDMgcm93cykKKwogLS0gcGFydGl0aW9ud2lz ZSBqb2lucwogU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gdHJ1ZTsKIENSRUFURSBU QUJMRSBqb2luX3RibCAoYTEgaW50LCBiMSBpbnQsIGMxIHRleHQsIGEyIGludCwgYjIgaW50LCBj MiB0ZXh0KTsKQEAgLTEyNDIxLDYgKzEyNTIxLDE1MyBAQCBTRUxFQ1QgYSBGUk9NIGJhc2VfdGJs IFdIRVJFIChhLCByYW5kb20oKSA+IDApIElOIChTRUxFQ1QgYSwgcmFuZG9tKCkgPiAwIEZST00g ZgogRFJPUCBGT1JFSUdOIFRBQkxFIGZvcmVpZ25fdGJsIENBU0NBREU7CiBOT1RJQ0U6ICBkcm9w IGNhc2NhZGVzIHRvIGZvcmVpZ24gdGFibGUgZm9yZWlnbl90YmwyCiBEUk9QIFRBQkxFIGJhc2Vf dGJsOworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEgKGkg aW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUg YmFzZTEgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBpbnQs IGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJVElP TiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VS VkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9SRUlH TiBUQUJMRSBkaXN0cjFfcDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1P RFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFt ZSAnYmFzZTInKTsKK0NSRUFURSBUQUJMRSBkaXN0cjIgKGkgaW50LCBqIGludCwgayB0ZXh0KSBQ QVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTMgKGkgaW50LCBqIGludCwg ayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlNCAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JF QVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3AxIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9SIFZBTFVF UyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMg KHRhYmxlX25hbWUgJ2Jhc2UzJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcDIgUEFS VElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDEp CitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTQnKTsKK0lOU0VSVCBJ TlRPIGRpc3RyMQorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwKSBpOworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSoxMCwgJ2Rh dGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0FOQUxZWkUgZGlzdHIx X3AxOworQU5BTFlaRSBkaXN0cjFfcDI7CitBTkFMWVpFIGRpc3RyMl9wMTsKK0FOQUxZWkUgZGlz dHIyX3AyOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gT047CistLSBUZXN0IGpv aW5zIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFO RCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3Ry Mi5pIExJTUlUIDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRw dXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlzdHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlz dHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEuaQor ICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbgorICAgICAgICAgICAgICAgT3V0cHV0OiBk aXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJfMS5q LCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIxX3Ax IGRpc3RyMV8xKSBJTk5FUiBKT0lOIChwdWJsaWMuZGlzdHIyX3AxIGRpc3RyMl8xKQorICAgICAg ICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHIzLmksIHIzLmosIHIzLmssIHI1LmksIHI1Lmos IHI1LmsgRlJPTSAocHVibGljLmJhc2UxIHIzIElOTkVSIEpPSU4gcHVibGljLmJhc2UzIHI1IE9O ICgoKHIzLmkgPSByNS5pKSkgQU5EICgocjUuaiA+IDkwKSkgQU5EICgocjUuayB+fiAnZGF0YSUn KSkpKSBPUkRFUiBCWSByMy5pIEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMgRm9y ZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8yLmos IGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRpc3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAgICAg ICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcDIgZGlzdHIxXzIpIElOTkVSIEpPSU4g KHB1YmxpYy5kaXN0cjJfcDIgZGlzdHIyXzIpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBT RUxFQ1QgcjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChwdWJsaWMuYmFz ZTIgcjQgSU5ORVIgSk9JTiBwdWJsaWMuYmFzZTQgcjYgT04gKCgocjQuaSA9IHI2LmkpKSBBTkQg KChyNi5qID4gOTApKSBBTkQgKChyNi5rIH5+ICdkYXRhJScpKSkpIE9SREVSIEJZIHI0LmkgQVND IE5VTExTIExBU1QKKygxMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdI RVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtl ICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworIGkgIHwgIGogIHwgICAgayAg ICB8IGkgIHwgIGogIHwgICAgayAgICAKKy0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0rLS0tLS0r LS0tLS0tLS0tCisgMTAgfCAxMDAgfCBkYXRhXzEwIHwgMTAgfCAxMDAgfCBkYXRhXzEwCisgMTEg fCAxMTAgfCBkYXRhXzExIHwgMTEgfCAxMTAgfCBkYXRhXzExCisgMTIgfCAxMjAgfCBkYXRhXzEy IHwgMTIgfCAxMjAgfCBkYXRhXzEyCisgMTMgfCAxMzAgfCBkYXRhXzEzIHwgMTMgfCAxMzAgfCBk YXRhXzEzCisgMTQgfCAxNDAgfCBkYXRhXzE0IHwgMTQgfCAxNDAgfCBkYXRhXzE0CisgMTUgfCAx NTAgfCBkYXRhXzE1IHwgMTUgfCAxNTAgfCBkYXRhXzE1CisgMTYgfCAxNjAgfCBkYXRhXzE2IHwg MTYgfCAxNjAgfCBkYXRhXzE2CisgMTcgfCAxNzAgfCBkYXRhXzE3IHwgMTcgfCAxNzAgfCBkYXRh XzE3CisgMTggfCAxODAgfCBkYXRhXzE4IHwgMTggfCAxODAgfCBkYXRhXzE4CisgMTkgfCAxOTAg fCBkYXRhXzE5IHwgMTkgfCAxOTAgfCBkYXRhXzE5CisoMTAgcm93cykKKworRVhQTEFJTiAoVkVS Qk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3RyMiBP TiBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBkaXN0 cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlzdHIx LmssIGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQKKyAg ICAgICAgIFNvcnQgS2V5OiBkaXN0cjEuaQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2Nh bgorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0cjFf MS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBS ZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIxX3AxIGRpc3RyMV8xKSBMRUZUIEpPSU4gKHB1YmxpYy5k aXN0cjJfcDEgZGlzdHIyXzEpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjQu aSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChwdWJsaWMuYmFzZTEgcjQgTEVG VCBKT0lOIHB1YmxpYy5iYXNlMyByNiBPTiAoKChyNC5pID0gcjYuaSkpIEFORCAoKHI2Lmsgfn4g J2RhdGElJykpKSkgV0hFUkUgKChyNC5pID4gOTApKSBPUkRFUiBCWSByNC5pIEFTQyBOVUxMUyBM QVNUCisgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRw dXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8yLmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRpc3Ry Ml8yLmosIGRpc3RyMl8yLmsKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0 cjFfcDIgZGlzdHIxXzIpIExFRlQgSk9JTiAocHVibGljLmRpc3RyMl9wMiBkaXN0cjJfMikKKyAg ICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByNS5pLCByNS5qLCByNS5rLCByNy5pLCBy Ny5qLCByNy5rIEZST00gKHB1YmxpYy5iYXNlMiByNSBMRUZUIEpPSU4gcHVibGljLmJhc2U0IHI3 IE9OICgoKHI1LmkgPSByNy5pKSkgQU5EICgocjcuayB+fiAnZGF0YSUnKSkpKSBXSEVSRSAoKHI1 LmkgPiA5MCkpIE9SREVSIEJZIHI1LmkgQVNDIE5VTExTIExBU1QKKygxMiByb3dzKQorCitTRUxF Q1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4gZGlzdHIyIE9OICBkaXN0cjEuaT1kaXN0cjIuaSBB TkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFIGRpc3RyMS5pID4gOTAKK09SREVSIEJZIGRp c3RyMS5pIExJTUlUIDIwOworICBpICB8ICBqICAgfCAgICBrICAgICB8ICBpICB8ICBqICAgfCAg ICBrICAgICAKKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0t CisgIDkxIHwgIDkxMCB8IGRhdGFfOTEgIHwgIDkxIHwgIDkxMCB8IGRhdGFfOTEKKyAgOTIgfCAg OTIwIHwgZGF0YV85MiAgfCAgOTIgfCAgOTIwIHwgZGF0YV85MgorICA5MyB8ICA5MzAgfCBkYXRh XzkzICB8ICA5MyB8ICA5MzAgfCBkYXRhXzkzCisgIDk0IHwgIDk0MCB8IGRhdGFfOTQgIHwgIDk0 IHwgIDk0MCB8IGRhdGFfOTQKKyAgOTUgfCAgOTUwIHwgZGF0YV85NSAgfCAgOTUgfCAgOTUwIHwg ZGF0YV85NQorICA5NiB8ICA5NjAgfCBkYXRhXzk2ICB8ICA5NiB8ICA5NjAgfCBkYXRhXzk2Cisg IDk3IHwgIDk3MCB8IGRhdGFfOTcgIHwgIDk3IHwgIDk3MCB8IGRhdGFfOTcKKyAgOTggfCAgOTgw IHwgZGF0YV85OCAgfCAgOTggfCAgOTgwIHwgZGF0YV85OAorICA5OSB8ICA5OTAgfCBkYXRhXzk5 ICB8ICA5OSB8ICA5OTAgfCBkYXRhXzk5CisgMTAwIHwgMTAwMCB8IGRhdGFfMTAwIHwgMTAwIHwg MTAwMCB8IGRhdGFfMTAwCisgMTAxIHwgMTAxMCB8IGRhdGFfMTAxIHwgICAgIHwgICAgICB8IAor IDEwMiB8IDEwMjAgfCBkYXRhXzEwMiB8ICAgICB8ICAgICAgfCAKKyAxMDMgfCAxMDMwIHwgZGF0 YV8xMDMgfCAgICAgfCAgICAgIHwgCisgMTA0IHwgMTA0MCB8IGRhdGFfMTA0IHwgICAgIHwgICAg ICB8IAorIDEwNSB8IDEwNTAgfCBkYXRhXzEwNSB8ICAgICB8ICAgICAgfCAKKyAxMDYgfCAxMDYw IHwgZGF0YV8xMDYgfCAgICAgfCAgICAgIHwgCisgMTA3IHwgMTA3MCB8IGRhdGFfMTA3IHwgICAg IHwgICAgICB8IAorIDEwOCB8IDEwODAgfCBkYXRhXzEwOCB8ICAgICB8ICAgICAgfCAKKyAxMDkg fCAxMDkwIHwgZGF0YV8xMDkgfCAgICAgfCAgICAgIHwgCisgMTEwIHwgMTEwMCB8IGRhdGFfMTEw IHwgICAgIHwgICAgICB8IAorKDIwIHJvd3MpCisKKy0tIFRlc3QgcHJ1bmluZyB3aXRoIGFzeW5j IE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5TRVJUIElOVE8gZGlzdHIyCitT RUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEw MDApIGk7CitERUFMTE9DQVRFIEFMTDsKK1NFVCBwbGFuX2NhY2hlX21vZGUgVE8gZm9yY2VfZ2Vu ZXJpY19wbGFuOworUFJFUEFSRSBhc3luY19wdF9xdWVyeSAoaW50LCBpbnQpIEFTCisgIFNFTEVD VCAqIEZST00gZGlzdHIyIFdIRVJFIGkgPSBBTlkoQVJSQVlbJDEsICQyXSkKKyAgT1JERVIgQlkg aSxqCisgIExJTUlUIDEwOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorCUVYRUNVVEUg YXN5bmNfcHRfcXVlcnkoMSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExp bWl0CisgICBPdXRwdXQ6IGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBNZXJn ZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjIuaSwgZGlzdHIyLmoKKyAgICAgICAg IFN1YnBsYW5zIFJlbW92ZWQ6IDEKKyAgICAgICAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24g cHVibGljLmRpc3RyMl9wMSBkaXN0cjJfMQorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0cjJf MS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBT RUxFQ1QgaSwgaiwgayBGUk9NIHB1YmxpYy5iYXNlMyBXSEVSRSAoKGkgPSBBTlkgKEFSUkFZWyQx OjppbnRlZ2VyLCAkMjo6aW50ZWdlcl0pKSkgT1JERVIgQlkgaSBBU0MgTlVMTFMgTEFTVCwgaiBB U0MgTlVMTFMgTEFTVAorKDggcm93cykKKworRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsK KyBpIHwgIGogIHwgICAgayAgICAKKy0tLSstLS0tLSstLS0tLS0tLS0KKyAxIHwgIDEwIHwgZGF0 YV8xCisgMSB8IDExMCB8IGRhdGFfMTEKKyAxIHwgMjEwIHwgZGF0YV8yMQorIDEgfCAzMTAgfCBk YXRhXzMxCisgMSB8IDQxMCB8IGRhdGFfNDEKKyAxIHwgNTEwIHwgZGF0YV81MQorIDEgfCA2MTAg fCBkYXRhXzYxCisgMSB8IDcxMCB8IGRhdGFfNzEKKyAxIHwgODEwIHwgZGF0YV84MQorIDEgfCA5 MTAgfCBkYXRhXzkxCisoMTAgcm93cykKKworUkVTRVQgcGxhbl9jYWNoZV9tb2RlOworUkVTRVQg ZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIsIGJh c2UxLCBiYXNlMiwgYmFzZTMsIGJhc2U0OwogQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMg KERST1AgYXN5bmNfY2FwYWJsZSk7CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMgKERS T1AgYXN5bmNfY2FwYWJsZSk7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9jb250cmliL3Bv c3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVz X2Zkdy5jCmluZGV4IDQ1NmIyNjdmNzBiLi5hNjNlYjAwMjQxNiAxMDA2NDQKLS0tIGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv cG9zdGdyZXNfZmR3LmMKQEAgLTcyMTMsMTIgKzcyMTMsMTYgQEAgcG9zdGdyZXNGb3JlaWduQXN5 bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAlGb3JlaWduU2NhblN0YXRlICpu b2RlID0gKEZvcmVpZ25TY2FuU3RhdGUgKikgYXJlcS0+cmVxdWVzdGVlOwogCVBnRmR3U2NhblN0 YXRlICpmc3N0YXRlID0gKFBnRmR3U2NhblN0YXRlICopIG5vZGUtPmZkd19zdGF0ZTsKIAlBc3lu Y1JlcXVlc3QgKnBlbmRpbmdBcmVxID0gZnNzdGF0ZS0+Y29ubl9zdGF0ZS0+cGVuZGluZ0FyZXE7 Ci0JQXBwZW5kU3RhdGUgKnJlcXVlc3RvciA9IChBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1ZXN0 b3I7Ci0JV2FpdEV2ZW50U2V0ICpzZXQgPSByZXF1ZXN0b3ItPmFzX2V2ZW50c2V0OworCVBsYW5T dGF0ZSAgKnJlcXVlc3RvciA9IGFyZXEtPnJlcXVlc3RvcjsKKwlXYWl0RXZlbnRTZXQgKnNldDsK KwlCaXRtYXBzZXQgICpuZWVkcmVxdWVzdDsKIAogCS8qIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxs ZWQgdW5sZXNzIGNhbGxiYWNrX3BlbmRpbmcgKi8KIAlBc3NlcnQoYXJlcS0+Y2FsbGJhY2tfcGVu ZGluZyk7CiAKKwlzZXQgPSBHZXRBcHBlbmRFdmVudFNldChyZXF1ZXN0b3IpOworCW5lZWRyZXF1 ZXN0ID0gR2V0TmVlZFJlcXVlc3QocmVxdWVzdG9yKTsKKwogCS8qCiAJICogSWYgcHJvY2Vzc19w ZW5kaW5nX3JlcXVlc3QoKSBoYXMgYmVlbiBpbnZva2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0CiAJ ICogYmVmb3JlIHdlIGdldCBoZXJlLCB3ZSBtaWdodCBoYXZlIHNvbWUgdHVwbGVzIGFscmVhZHk7 IGluIHdoaWNoIGNhc2UKQEAgLTcyNTYsNyArNzI2MCw3IEBAIHBvc3RncmVzRm9yZWlnbkFzeW5j Q29uZmlndXJlV2FpdChBc3luY1JlcXVlc3QgKmFyZXEpCiAJCSAqIGJlbG93LCBiZWNhdXNlIHdl IG1pZ2h0IG90aGVyd2lzZSBlbmQgdXAgd2l0aCBubyBjb25maWd1cmVkIGV2ZW50cwogCQkgKiBv dGhlciB0aGFuIHRoZSBwb3N0bWFzdGVyIGRlYXRoIGV2ZW50LgogCQkgKi8KLQkJaWYgKCFibXNf aXNfZW1wdHkocmVxdWVzdG9yLT5hc19uZWVkcmVxdWVzdCkpCisJCWlmICghYm1zX2lzX2VtcHR5 KG5lZWRyZXF1ZXN0KSkKIAkJCXJldHVybjsKIAkJaWYgKEdldE51bVJlZ2lzdGVyZWRXYWl0RXZl bnRzKHNldCkgPiAxKQogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19m ZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdy ZXNfZmR3LnNxbAppbmRleCA5YThmOWUyODEzNS4uMDc4NmJhMmM1MDIgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCisrKyBiL2NvbnRyaWIvcG9z dGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0zOTIxLDYgKzM5MjEsMTEgQEAgSU5T RVJUIElOVE8gcmVzdWx0X3RibCBTRUxFQ1QgYSwgYiwgJ0FBQScgfHwgYyBGUk9NIGFzeW5jX3B0 IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00gcmVzdWx0X3RibCBPUkRFUiBCWSBhOwog REVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAlIDEw MCA9IDAgT1JERVIgQlkgYiwgYTsKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAlIDEw MCA9IDAgT1JERVIgQlkgYiwgYTsKKwogLS0gVGVzdCBlcnJvciBoYW5kbGluZywgaWYgYWNjZXNz aW5nIG9uZSBvZiB0aGUgZm9yZWlnbiBwYXJ0aXRpb25zIGVycm9ycyBvdXQKIENSRUFURSBGT1JF SUdOIFRBQkxFIGFzeW5jX3BfYnJva2VuIFBBUlRJVElPTiBPRiBhc3luY19wdCBGT1IgVkFMVUVT IEZST00gKDEwMDAwKSBUTyAoMTAwMDEpCiAgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJs ZV9uYW1lICdub25fZXhpc3RlbnRfdGFibGUnKTsKQEAgLTM5NDQsNiArMzk0OSwxMSBAQCBERUxF VEUgRlJPTSByZXN1bHRfdGJsOwogLS0gVGVzdCBDT1BZIFRPIHdoZW4gZm9yZWlnbiB0YWJsZSBp cyBwYXJ0aXRpb24KIENPUFkgYXN5bmNfcHQgVE8gc3Rkb3V0OyAtLWVycm9yCiAKKy0tIFRlc3Qg TWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworU0VMRUNUICogRlJPTSBh c3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKwogRFJPUCBGT1JFSUdOIFRB QkxFIGFzeW5jX3AzOwogRFJPUCBUQUJMRSBiYXNlX3RibDM7CiAKQEAgLTM5NTksNiArMzk2OSwx MSBAQCBJTlNFUlQgSU5UTyByZXN1bHRfdGJsIFNFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUg YiA9PT0gNTA1OwogU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiBERUxFVEUg RlJPTSByZXN1bHRfdGJsOwogCistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JE RVIgQlkgYiwgYTsKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVS IEJZIGIsIGE7CisKIC0tIHBhcnRpdGlvbndpc2Ugam9pbnMKIFNFVCBlbmFibGVfcGFydGl0aW9u d2lzZV9qb2luIFRPIHRydWU7CiAKQEAgLTQxOTcsNiArNDIxMiw2OSBAQCBTRUxFQ1QgYSBGUk9N IGJhc2VfdGJsIFdIRVJFIChhLCByYW5kb20oKSA+IDApIElOIChTRUxFQ1QgYSwgcmFuZG9tKCkg PiAwIEZST00gZgogRFJPUCBGT1JFSUdOIFRBQkxFIGZvcmVpZ25fdGJsIENBU0NBREU7CiBEUk9Q IFRBQkxFIGJhc2VfdGJsOwogCistLSBUZXN0IGFzeW5jIE1lcmdlIEFwcGVuZAorQ1JFQVRFIFRB QkxFIGRpc3RyMSAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsK K0NSRUFURSBUQUJMRSBiYXNlMSAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxF IGJhc2UyIChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0 cjFfcDEgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVN QUlOREVSIDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTEnKTsK K0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMV9wMiBQQVJUSVRJT04gT0YgZGlzdHIxIEZPUiBW QUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJ T05TICh0YWJsZV9uYW1lICdiYXNlMicpOworCitDUkVBVEUgVEFCTEUgZGlzdHIyIChpIGludCwg aiBpbnQsIGsgdGV4dCkgUEFSVElUSU9OIEJZIEhBU0ggKGkpOworQ1JFQVRFIFRBQkxFIGJhc2Uz IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgVEFCTEUgYmFzZTQgKGkgaW50LCBqIGlu dCwgayB0ZXh0KTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wMSBQQVJUSVRJT04gT0Yg ZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMCkKK1NFUlZFUiBs b29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlMycpOworQ1JFQVRFIEZPUkVJR04gVEFC TEUgZGlzdHIyX3AyIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVT IDIsIFJFTUFJTkRFUiAxKQorU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jh c2U0Jyk7CisKK0lOU0VSVCBJTlRPIGRpc3RyMQorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwg aSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworCitJTlNFUlQgSU5UTyBkaXN0cjIK K1NFTEVDVCBpLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw KSBpOworCitBTkFMWVpFIGRpc3RyMV9wMTsKK0FOQUxZWkUgZGlzdHIxX3AyOworQU5BTFlaRSBk aXN0cjJfcDE7CitBTkFMWVpFIGRpc3RyMl9wMjsKKworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNl X2pvaW4gVE8gT047CisKKy0tIFRlc3Qgam9pbnMgd2l0aCBhc3luYyBNZXJnZSBBcHBlbmQKK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZGlzdHIxLCBkaXN0cjIg V0hFUkUgZGlzdHIxLmk9ZGlzdHIyLmkgQU5EIGRpc3RyMi5qID4gOTAgYW5kIGRpc3RyMi5rIGxp a2UgJ2RhdGElJworT1JERVIgQlkgZGlzdHIyLmkgTElNSVQgMTA7CitTRUxFQ1QgKiBGUk9NIGRp c3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFu ZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpP SU4gZGlzdHIyIE9OIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScg V0hFUkUgIGRpc3RyMS5pID4gOTAKK09SREVSIEJZIGRpc3RyMS5pIExJTUlUIDIwOworU0VMRUNU ICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3RyMiBPTiAgZGlzdHIxLmk9ZGlzdHIyLmkgQU5E IGRpc3RyMi5rIGxpa2UgJ2RhdGElJyBXSEVSRSBkaXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0 cjEuaSBMSU1JVCAyMDsKKworLS0gVGVzdCBwcnVuaW5nIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5k CitERUxFVEUgRlJPTSBkaXN0cjI7CitJTlNFUlQgSU5UTyBkaXN0cjIKK1NFTEVDVCBpJTEwLCBp KjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgaTsKKworREVB TExPQ0FURSBBTEw7CitTRVQgcGxhbl9jYWNoZV9tb2RlIFRPIGZvcmNlX2dlbmVyaWNfcGxhbjsK K1BSRVBBUkUgYXN5bmNfcHRfcXVlcnkgKGludCwgaW50KSBBUworICBTRUxFQ1QgKiBGUk9NIGRp c3RyMiBXSEVSRSBpID0gQU5ZKEFSUkFZWyQxLCAkMl0pCisgIE9SREVSIEJZIGksagorICBMSU1J VCAxMDsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKKwlFWEVDVVRFIGFzeW5jX3B0X3F1 ZXJ5KDEsIDEpOworRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKK1JFU0VUIHBsYW5fY2Fj aGVfbW9kZTsKKworUkVTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsKKworRFJPUCBUQUJM RSBkaXN0cjEsIGRpc3RyMiwgYmFzZTEsIGJhc2UyLCBiYXNlMywgYmFzZTQ7CisKIEFMVEVSIFNF UlZFUiBsb29wYmFjayBPUFRJT05TIChEUk9QIGFzeW5jX2NhcGFibGUpOwogQUxURVIgU0VSVkVS IGxvb3BiYWNrMiBPUFRJT05TIChEUk9QIGFzeW5jX2NhcGFibGUpOwogCmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXgg MDZkMWU0NDAzYjUuLjNlNzc0NWYwYjMyIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmln LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC01NDQ0LDYgKzU0NDQsMjAg QEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFi bGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFy bGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtYXN5bmMtbWVy Z2UtYXBwZW5kIiB4cmVmbGFiZWw9ImVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQiPgorICAgICAg PHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZDwvdmFybmFtZT4gKDx0eXBl PmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFy bmFtZT5lbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVz IHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNlIG9mIGFzeW5jLWF3YXJlCisgICAgICAgIG1lcmdlIGFw cGVuZCBwbGFuIHR5cGVzLiBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4uCisg ICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1iaXRtYXBzY2FuIiB4cmVmbGFiZWw9 ImVuYWJsZV9iaXRtYXBzY2FuIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9iaXRtYXBz Y2FuPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FzeW5jLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQXN5bmMuYwppbmRleCA1ZDNjYWJlNzNlMy4uNmRjMTllYmMzNzQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBc3luYy5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNBc3luYy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiZXhl Y3V0b3IvZXhlY0FzeW5jLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNs dWRlICJleGVjdXRvci9ub2RlQXBwZW5kLmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZU1lcmdl QXBwZW5kLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUZvcmVpZ25zY2FuLmgiCiAKIC8qCkBA IC0xMjEsNiArMTIyLDkgQEAgRXhlY0FzeW5jUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQog CQljYXNlIFRfQXBwZW5kU3RhdGU6CiAJCQlFeGVjQXN5bmNBcHBlbmRSZXNwb25zZShhcmVxKTsK IAkJCWJyZWFrOworCQljYXNlIFRfTWVyZ2VBcHBlbmRTdGF0ZToKKwkJCUV4ZWNBc3luY01lcmdl QXBwZW5kUmVzcG9uc2UoYXJlcSk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIElmIHRo ZSBub2RlIGRvZXNuJ3Qgc3VwcG9ydCBhc3luYywgY2FsbGVyIG1lc3NlZCB1cC4gKi8KIAkJCWVs b2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IDQwNWU4Zjk0Mjg1Li42Zjg5OWEyZDVmNSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTM5LDEwICszOSwxNSBAQAogI2lu Y2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgorI2lu Y2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0 aXRpb24uaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaCIKICNpbmNsdWRl ICJsaWIvYmluYXJ5aGVhcC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCisKKyNkZWZpbmUg RVZFTlRfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAxNgogCiAvKgogICogV2UgaGF2 ZSBvbmUgc2xvdCBmb3IgZWFjaCBpdGVtIGluIHRoZSBoZWFwIGFycmF5LiAgV2UgdXNlIFNsb3RO dW1iZXIKQEAgLTU0LDYgKzU5LDEyIEBAIHR5cGVkZWYgaW50MzIgU2xvdE51bWJlcjsKIHN0YXRp YyBUdXBsZVRhYmxlU2xvdCAqRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKTsKIHN0 YXRpYyBpbnQJaGVhcF9jb21wYXJlX3Nsb3RzKERhdHVtIGEsIERhdHVtIGIsIHZvaWQgKmFyZyk7 CiAKK3N0YXRpYyB2b2lkIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBwZW5kU3Rh dGUgKm5vZGUpOworc3RhdGljIHZvaWQgRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihNZXJnZUFw cGVuZFN0YXRlICpub2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4 dChNZXJnZUFwcGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pOworc3RhdGljIGJvb2wgRXhlY01l cmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbik7 CitzdGF0aWMgdm9pZCBFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdChNZXJnZUFwcGVuZFN0 YXRlICpub2RlKTsKKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRNZXJnZUFwcGVuZApAQCAt NzEsNiArODIsOCBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpbnQJCQlucGxhbnM7CiAJaW50CQkJaSwKIAkJCQlq OworCUJpdG1hcHNldCAgKmFzeW5jcGxhbnM7CisJaW50CQkJbmFzeW5jcGxhbnM7CiAKIAkvKiBj aGVjayBmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxhZ3MgJiAoRVhFQ19G TEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX01BUkspKSk7CkBAIC0xMDYsNyArMTE5LDEwIEBAIEV4 ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQg ZWZsYWdzKQogCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCiAJ CSAqLwogCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkKKwkJ ewogCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEws IDAsIG5wbGFucyAtIDEpOworCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRp ZmllZCA9IHRydWU7CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTExOSw2ICsxMzUsNyBAQCBFeGVj SW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVm bGFncykKIAkJQXNzZXJ0KG5wbGFucyA+IDApOwogCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJw bGFucyA9IHZhbGlkc3VicGxhbnMgPQogCQkJYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMg LSAxKTsKKwkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7 CiAJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gTlVMTDsKIAl9CiAKQEAgLTEzNSwxMSAr MTUyLDI1IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIHRoZSByZXN1bHRzIGludG8gdGhlIG1lcmdlcGxhbnN0 YXRlcyBhcnJheS4KIAkgKi8KIAlqID0gMDsKKwlhc3luY3BsYW5zID0gTlVMTDsKKwluYXN5bmNw bGFucyA9IDA7CisKIAlpID0gLTE7CiAJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHZhbGlk c3VicGxhbnMsIGkpKSA+PSAwKQogCXsKIAkJUGxhbgkgICAqaW5pdE5vZGUgPSAoUGxhbiAqKSBs aXN0X250aChub2RlLT5tZXJnZXBsYW5zLCBpKTsKIAorCQkvKgorCQkgKiBSZWNvcmQgYXN5bmMg c3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdlIHRyZWF0IHRoZW0KKwkJ ICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2YWxQ bGFuUXVhbCBwbGFuCisJCSAqIHRyZWUuCisJCSAqLworCQlpZiAoaW5pdE5vZGUtPmFzeW5jX2Nh cGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpCisJCXsKKwkJCWFzeW5jcGxh bnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5zLCBqKTsKKwkJCW5hc3luY3BsYW5zKys7CisJ CX0KKwogCQltZXJnZXBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9kZShpbml0Tm9kZSwgZXN0 YXRlLCBlZmxhZ3MpOwogCX0KIApAQCAtMTcwLDYgKzIwMSw0NSBAQCBFeGVjSW5pdE1lcmdlQXBw ZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKi8K IAltZXJnZXN0YXRlLT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7CiAKKwkvKiBJbml0aWFsaXplIGFz eW5jIHN0YXRlICovCisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNwbGFucyA9IGFzeW5jcGxhbnM7CisJ bWVyZ2VzdGF0ZS0+bXNfbmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKKwltZXJnZXN0YXRlLT5t c19hc3luY3JlcXVlc3RzID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19hc3luY3Jlc3VsdHMgPSBO VUxMOworCW1lcmdlc3RhdGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBOVUxMOworCW1lcmdlc3Rh dGUtPm1zX2FzeW5jcmVtYWluID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19uZWVkcmVxdWVzdCA9 IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfZXZlbnRzZXQgPSBOVUxMOworCW1lcmdlc3RhdGUtPm1z X3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOworCisJaWYgKG5hc3luY3BsYW5zID4gMCkKKwl7CisJ CW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHMgPSAoQXN5bmNSZXF1ZXN0ICoqKQorCQkJcGFs bG9jMChucGxhbnMgKiBzaXplb2YoQXN5bmNSZXF1ZXN0ICopKTsKKworCQlpID0gLTE7CisJCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihhc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJ QXN5bmNSZXF1ZXN0ICphcmVxOworCisJCQlhcmVxID0gcGFsbG9jKHNpemVvZihBc3luY1JlcXVl c3QpKTsKKwkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgbWVyZ2VzdGF0ZTsKKwkJ CWFyZXEtPnJlcXVlc3RlZSA9IG1lcmdlcGxhbnN0YXRlc1tpXTsKKwkJCWFyZXEtPnJlcXVlc3Rf aW5kZXggPSBpOworCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOworCQkJYXJlcS0+ cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKKworCQkJ bWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7CisJCX0KKworCQltZXJnZXN0 YXRlLT5tc19hc3luY3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopCisJCQlwYWxsb2MwKG5w bGFucyAqIHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSk7CisKKwkJaWYgKG1lcmdlc3RhdGUtPm1z X3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFu cyhtZXJnZXN0YXRlKTsKKwl9CisKIAkvKgogCSAqIGluaXRpYWxpemUgc29ydC1rZXkgaW5mb3Jt YXRpb24KIAkgKi8KQEAgLTIzMSw5ICszMDEsMTYgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0 ZSAqcHN0YXRlKQogCQkgKiBydW4tdGltZSBwcnVuaW5nIGlzIGRpc2FibGVkIHRoZW4gdGhlIHZh bGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlCiAJCSAqIHNldCB0byBhbGwgc3VicGxhbnMuCiAJ CSAqLwotCQlpZiAobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKKwkJaWYgKCFub2Rl LT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCQl7CiAJCQlub2RlLT5tc192YWxpZF9z dWJwbGFucyA9CiAJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPm1zX3BydW5lX3N0 YXRlLCBmYWxzZSwgTlVMTCk7CisJCQlub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVk ID0gdHJ1ZTsKKwkJfQorCisJCS8qIElmIHRoZXJlIGFyZSBhbnkgYXN5bmMgc3VicGxhbnMsIGJl Z2luIGV4ZWN1dGluZyB0aGVtLiAqLworCQlpZiAobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAwKQor CQkJRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihub2RlKTsKIAogCQkvKgogCQkgKiBGaXJzdCB0 aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2YWxpZCBzdWJwbGFu LApAQCAtMjQ2LDYgKzMyMywxNiBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUp CiAJCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJCQkJYmluYXJ5aGVhcF9h ZGRfdW5vcmRlcmVkKG5vZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOwogCQl9CisKKwkJ LyogTG9vayBhdCB2YWxpZCBhc3luYyBzdWJwbGFucyAqLworCQlpID0gLTE7CisJCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc192YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkK KwkJeworCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQkJaWYgKCFU dXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0pKQorCQkJCWJpbmFyeWhlYXBfYWRkX3Vub3JkZXJl ZChub2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKKwkJfQorCiAJCWJpbmFyeWhlYXBf YnVpbGQobm9kZS0+bXNfaGVhcCk7CiAJCW5vZGUtPm1zX2luaXRpYWxpemVkID0gdHJ1ZTsKIAl9 CkBAIC0yNjAsNyArMzQ3LDEzIEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkK IAkJICogdG8gbm90IHB1bGwgdHVwbGVzIHVudGlsIG5lY2Vzc2FyeS4pCiAJCSAqLwogCQlpID0g RGF0dW1HZXRJbnQzMihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKLQkJbm9kZS0+ bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCWlmIChi bXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2FzeW5jcGxhbnMpKQorCQkJRXhlY01lcmdlQXBwZW5k QXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQllbHNlCisJCXsKKwkJCUFzc2VydChibXNfaXNfbWVt YmVyKGksIG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zKSk7CisJCQlub2RlLT5tc19zbG90c1tpXSA9 IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJnZXBsYW5zW2ldKTsKKwkJfQogCQlpZiAoIVR1cElzTnVs bChub2RlLT5tc19zbG90c1tpXSkpCiAJCQliaW5hcnloZWFwX3JlcGxhY2VfZmlyc3Qobm9kZS0+ bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CiAJCWVsc2UKQEAgLTI3Niw2ICszNjksOCBAQCBF eGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJewogCQlpID0gRGF0dW1HZXRJbnQz MihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKIAkJcmVzdWx0ID0gbm9kZS0+bXNf c2xvdHNbaV07CisJCS8qIEZvciBhc3luYyBwbGFuIHJlY29yZCB0aGF0IHdlIGNhbiBnZXQgdGhl IG5leHQgdHVwbGUgKi8KKwkJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19kZWxfbWVt YmVyKG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMsIGkpOwogCX0KIAogCXJldHVybiByZXN1bHQ7 CkBAIC0zNTUsNiArNDUwLDcgQEAgdm9pZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBw ZW5kU3RhdGUgKm5vZGUpCiB7CiAJaW50CQkJaTsKKwlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUt Pm1zX25hc3luY3BsYW5zOwogCiAJLyoKIAkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNl ZCBpbiBwcnVuaW5nIGV4cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgpAQCAtMzY1LDggKzQ2 MSwxMSBAQCBFeGVjUmVTY2FuTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJ Ym1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCiAJCQkJCW5vZGUtPm1zX3BydW5lX3N0YXRl LT5leGVjcGFyYW1pZHMpKQogCXsKKwkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmll ZCA9IGZhbHNlOwogCQlibXNfZnJlZShub2RlLT5tc192YWxpZF9zdWJwbGFucyk7CiAJCW5vZGUt Pm1zX3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfdmFsaWRfYXN5 bmNwbGFucyk7CisJCW5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwogCX0KIAogCWZv ciAoaSA9IDA7IGkgPCBub2RlLT5tc19ucGxhbnM7IGkrKykKQEAgLTM4Nyw2ICs0ODYsMzg0IEBA IEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogCQlpZiAoc3Vi bm9kZS0+Y2hnUGFyYW0gPT0gTlVMTCkKIAkJCUV4ZWNSZVNjYW4oc3Vibm9kZSk7CiAJfQorCisJ LyogUmVzZXQgYXN5bmMgc3RhdGUgKi8KKwlpZiAobmFzeW5jcGxhbnMgPiAwKQorCXsKKwkJaSA9 IC0xOworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfYXN5bmNwbGFucywg aSkpID49IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVx dWVzdHNbaV07CisKKwkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKwkJCWFyZXEt PnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKKwkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7CisJCX0K KworCQlibXNfZnJlZShub2RlLT5tc19hc3luY3JlbWFpbik7CisJCW5vZGUtPm1zX2FzeW5jcmVt YWluID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfbmVlZHJlcXVlc3QpOworCQlub2RlLT5t c19uZWVkcmVxdWVzdCA9IE5VTEw7CisJCWJtc19mcmVlKG5vZGUtPm1zX2hhc19hc3luY3Jlc3Vs dHMpOworCQlub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKKwl9CiAJYmluYXJ5aGVh cF9yZXNldChub2RlLT5tc19oZWFwKTsKIAlub2RlLT5tc19pbml0aWFsaXplZCA9IGZhbHNlOwog fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxh bnMKKyAqCisgKiAgICAgICAgICAgICAgQ2xhc3NpZnkgdGhlIG5vZGUncyBtc192YWxpZF9zdWJw bGFucyBpbnRvIHN5bmMgb25lcyBhbmQKKyAqICAgICAgICAgICAgICBhc3luYyBvbmVzLCBhZGp1 c3QgaXQgdG8gY29udGFpbiBzeW5jIG9uZXMgb25seSwgYW5kIHNhdmUKKyAqICAgICAgICAgICAg ICBhc3luYyBvbmVzIGluIHRoZSBub2RlJ3MgbXNfdmFsaWRfYXN5bmNwbGFucy4KKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworc3RhdGljIHZvaWQKK2NsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBw ZW5kU3RhdGUgKm5vZGUpCit7CisJQml0bWFwc2V0ICAqdmFsaWRfYXN5bmNwbGFuczsKKworCUFz c2VydChub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKwlBc3NlcnQobm9kZS0+ bXNfdmFsaWRfYXN5bmNwbGFucyA9PSBOVUxMKTsKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhl cmUgYXJlIG5vIHZhbGlkIHN1YnBsYW5zLiAqLworCWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXNf dmFsaWRfc3VicGxhbnMpKQorCXsKKwkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOworCQly ZXR1cm47CisJfQorCisJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5 bmMgc3VicGxhbnMuICovCisJaWYgKCFibXNfb3ZlcmxhcChub2RlLT5tc192YWxpZF9zdWJwbGFu cywgbm9kZS0+bXNfYXN5bmNwbGFucykpCisJeworCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5V TEw7CisJCXJldHVybjsKKwl9CisKKwkvKiBHZXQgdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJ dmFsaWRfYXN5bmNwbGFucyA9IGJtc19pbnRlcnNlY3Qobm9kZS0+bXNfYXN5bmNwbGFucywKKwkJ CQkJCQkJCSBub2RlLT5tc192YWxpZF9zdWJwbGFucyk7CisKKwkvKiBBZGp1c3QgdGhlIHZhbGlk IHN1YnBsYW5zIHRvIGNvbnRhaW4gc3luYyBzdWJwbGFucyBvbmx5LiAqLworCW5vZGUtPm1zX3Zh bGlkX3N1YnBsYW5zID0gYm1zX2RlbF9tZW1iZXJzKG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zLAor CQkJCQkJCQkJCQkgIHZhbGlkX2FzeW5jcGxhbnMpOworCisJLyogU2F2ZSB2YWxpZCBhc3luYyBz dWJwbGFucy4gKi8KKwlub2RlLT5tc192YWxpZF9hc3luY3BsYW5zID0gdmFsaWRfYXN5bmNwbGFu czsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgIEV4ZWNNZXJnZUFwcGVuZEFzeW5j QmVnaW4KKyAqCisgKiAgICAgICAgICAgICAgQmVnaW4gZXhlY3V0aW5nIGRlc2lnbmVkIGFzeW5j LWNhcGFibGUgc3VicGxhbnMuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjTWVy Z2VBcHBlbmRBc3luY0JlZ2luKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCit7CisJaW50CQkJaTsK KworCS8qIEJhY2t3YXJkIHNjYW4gaXMgbm90IHN1cHBvcnRlZCBieSBhc3luYy1hd2FyZSBNZXJn ZUFwcGVuZHMuICovCisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+cHMuc3Rh dGUtPmVzX2RpcmVjdGlvbikpOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVu IHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLworCUFzc2VydChub2RlLT5tc19ucGxhbnMgPiAwKTsK KworCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gYXN5bmMg c3VicGxhbnMuICovCisJQXNzZXJ0KG5vZGUtPm1zX25hc3luY3BsYW5zID4gMCk7CisKKwkvKiBJ ZiB3ZSd2ZSB5ZXQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZCBzdWJwbGFucyB0aGVuIGRvIHNvIG5v dy4gKi8KKwlpZiAoIW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJeworCQlu b2RlLT5tc192YWxpZF9zdWJwbGFucyA9CisJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9k ZS0+bXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKKwkJbm9kZS0+bXNfdmFsaWRfc3VicGxh bnNfaWRlbnRpZmllZCA9IHRydWU7CisKKwkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMobm9k ZSk7CisJfQorCisJLyogSW5pdGlhbGl6ZSBzdGF0ZSB2YXJpYWJsZXMuICovCisJbm9kZS0+bXNf YXN5bmNyZW1haW4gPSBibXNfY29weShub2RlLT5tc192YWxpZF9hc3luY3BsYW5zKTsKKworCS8q IE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwor CWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXNfYXN5bmNyZW1haW4pKQorCQlyZXR1cm47CisKKwkv KiBNYWtlIGEgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUgdmFsaWQgYXN5bmMgc3VicGxhbnMuICov CisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc192YWxpZF9h c3luY3BsYW5zLCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1z X2FzeW5jcmVxdWVzdHNbaV07CisKKwkJQXNzZXJ0KGFyZXEtPnJlcXVlc3RfaW5kZXggPT0gaSk7 CisJCUFzc2VydCghYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7CisKKwkJLyogRG8gdGhlIGFjdHVh bCB3b3JrLiAqLworCQlFeGVjQXN5bmNSZXF1ZXN0KGFyZXEpOworCX0KK30KKworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogICAgICAgICAgICAgIEV4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dAorICoKKyAqICAg ICAgICAgICAgICBHZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBzcGVjaWZpZWQgYXN5bmNocm9ub3Vz IHN1YnBsYW4uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjTWVyZ2VBcHBlbmRB c3luY0dldE5leHQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSwgaW50IG1wbGFuKQoreworCW5vZGUt Pm1zX3Nsb3RzW21wbGFuXSA9IE5VTEw7CisKKwkvKiBSZXF1ZXN0IGEgdHVwbGUgYXN5bmNocm9u b3VzbHkuICovCisJaWYgKEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChub2RlLCBtcGxhbikp CisJCXJldHVybjsKKworCS8qCisJICogbm9kZS0+bXNfYXN5bmNyZW1haW4gY2FuIGJlIE5VTEwg aWYgd2UgaGF2ZSBmZXRjaGVkIHR1cGxlcywgYnV0IGhhdmVuJ3QKKwkgKiByZXR1cm5lZCB0aGVt IHlldC4gSW4gdGhpcyBjYXNlIEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdCgpIGFib3ZlCisJ ICoganVzdCByZXR1cm5zIHR1cGxlcyB3aXRob3V0IHBlcmZvcm1pbmcgYSByZXF1ZXN0LgorCSAq LworCXdoaWxlIChibXNfaXNfbWVtYmVyKG1wbGFuLCBub2RlLT5tc19hc3luY3JlbWFpbikpCisJ eworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIFdhaXQgb3IgcG9sbCBmb3IgYXN5 bmMgZXZlbnRzLiAqLworCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdChub2RlKTsKKwor CQkvKiBSZXF1ZXN0IGEgdHVwbGUgYXN5bmNocm9ub3VzbHkuICovCisJCWlmIChFeGVjTWVyZ2VB cHBlbmRBc3luY1JlcXVlc3Qobm9kZSwgbXBsYW4pKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAq IFdhaXRpbmcgdW50aWwgdGhlcmUncyBubyBhc3luYyByZXF1ZXN0cyBwZW5kaW5nIG9yIHdlIGdv dCBzb21lCisJCSAqIHR1cGxlcyBmcm9tIG91ciByZXF1ZXN0CisJCSAqLworCX0KKworCS8qIE5v IHR1cGxlcyAqLworCXJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgIEV4 ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdAorICoKKyAqICAgICAgICAgICAgICBSZXF1ZXN0IGEg dHVwbGUgYXN5bmNocm9ub3VzbHkuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBib29sCitFeGVj TWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSwgaW50IG1wbGFu KQoreworCUJpdG1hcHNldCAgKm5lZWRyZXF1ZXN0OworCWludAkJCWk7CisKKwkvKgorCSAqIElm IHdlJ3ZlIGFscmVhZHkgZmV0Y2hlZCBuZWNlc3NhcnkgZGF0YSwganVzdCByZXR1cm4gaXQKKwkg Ki8KKwlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykp CisJeworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tc19hc3luY3Jlc3VsdHNbbXBs YW5dOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIEdldCBhIGxpc3Qgb2YgbWVtYmVy cyB3aGljaCBjYW4gcHJvY2VzcyByZXF1ZXN0IGFuZCBkb24ndCBoYXZlIGRhdGEKKwkgKiByZWFk eS4KKwkgKi8KKwluZWVkcmVxdWVzdCA9IE5VTEw7CisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJt c19uZXh0X21lbWJlcihub2RlLT5tc19uZWVkcmVxdWVzdCwgaSkpID49IDApCisJeworCQlpZiAo IWJtc19pc19tZW1iZXIoaSwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykpCisJCQluZWVkcmVx dWVzdCA9IGJtc19hZGRfbWVtYmVyKG5lZWRyZXF1ZXN0LCBpKTsKKwl9CisKKwkvKgorCSAqIElm IHRoZXJlJ3Mgbm8gbWVtYmVycywgd2hpY2ggc3RpbGwgbmVlZCByZXF1ZXN0LCBubyBuZWVkIHRv IHNlbmQgaXQuCisJICovCisJaWYgKGJtc19pc19lbXB0eShuZWVkcmVxdWVzdCkpCisJCXJldHVy biBmYWxzZTsKKworCS8qIENsZWFyIG1zX25lZWRyZXF1ZXN0IGZsYWcsIGFzIHdlIGFyZSBnb2lu ZyB0byBzZW5kIHJlcXVlc3RzIG5vdyAqLworCW5vZGUtPm1zX25lZWRyZXF1ZXN0ID0gYm1zX2Rl bF9tZW1iZXJzKG5vZGUtPm1zX25lZWRyZXF1ZXN0LCBuZWVkcmVxdWVzdCk7CisKKwkvKiBNYWtl IGEgbmV3IHJlcXVlc3QgZm9yIGVhY2ggb2YgdGhlIGFzeW5jIHN1YnBsYW5zIHRoYXQgbmVlZCBp dC4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5lZWRyZXF1ZXN0 LCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVx dWVzdHNbaV07CisKKwkJLyoKKwkJICogV2UndmUganVzdCBjaGVja2VkIHRoYXQgc3VicGxhbiBk b2Vzbid0IGFscmVhZHkgaGF2ZSBzb21lIGZldGNoZWQKKwkJICogZGF0YQorCQkgKi8KKwkJQXNz ZXJ0KCFibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKTsKKworCQkv KiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7CisJfQor CWJtc19mcmVlKG5lZWRyZXF1ZXN0KTsKKworCS8qIFJldHVybiBuZWVkZWQgYXN5bmNocm9ub3Vz bHktZ2VuZXJhdGVkIHJlc3VsdHMgaWYgYW55LiAqLworCWlmIChibXNfaXNfbWVtYmVyKG1wbGFu LCBub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKSkKKwl7CisJCW5vZGUtPm1zX3Nsb3RzW21wbGFu XSA9IG5vZGUtPm1zX2FzeW5jcmVzdWx0c1ttcGxhbl07CisJCXJldHVybiB0cnVlOworCX0KKwor CXJldHVybiBmYWxzZTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgIEV4ZWNBc3lu Y01lcmdlQXBwZW5kUmVzcG9uc2UKKyAqCisgKiAgICAgICAgICAgICAgUmVjZWl2ZSBhIHJlc3Bv bnNlIGZyb20gYW4gYXN5bmNocm9ub3VzIHJlcXVlc3Qgd2UgbWFkZS4KKyAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq Lwordm9pZAorRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEp Cit7CisJTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSA9IChNZXJnZUFwcGVuZFN0YXRlICopIGFyZXEt PnJlcXVlc3RvcjsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdCA9IGFyZXEtPnJlc3VsdDsKKworCS8q IFRoZSByZXN1bHQgc2hvdWxkIGJlIGEgVHVwbGVUYWJsZVNsb3Qgb3IgTlVMTC4gKi8KKwlBc3Nl cnQoc2xvdCA9PSBOVUxMIHx8IElzQShzbG90LCBUdXBsZVRhYmxlU2xvdCkpOworCUFzc2VydCgh Ym1zX2lzX21lbWJlcihhcmVxLT5yZXF1ZXN0X2luZGV4LCBub2RlLT5tc19oYXNfYXN5bmNyZXN1 bHRzKSk7CisKKwlub2RlLT5tc19hc3luY3Jlc3VsdHNbYXJlcS0+cmVxdWVzdF9pbmRleF0gPSBO VUxMOworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHJlcXVlc3QgaXMgcGVuZGluZy4gKi8KKwlp ZiAoIWFyZXEtPnJlcXVlc3RfY29tcGxldGUpCisJeworCQkvKiBUaGUgcmVxdWVzdCB3b3VsZCBo YXZlIGJlZW4gcGVuZGluZyBmb3IgYSBjYWxsYmFjay4gKi8KKwkJQXNzZXJ0KGFyZXEtPmNhbGxi YWNrX3BlbmRpbmcpOworCQlyZXR1cm47CisJfQorCisJLyogSWYgdGhlIHJlc3VsdCBpcyBOVUxM IG9yIGFuIGVtcHR5IHNsb3QsIHRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIGRvLiAqLworCWlmIChU dXBJc051bGwoc2xvdCkpCisJeworCQkvKiBUaGUgZW5kaW5nIHN1YnBsYW4gd291bGRuJ3QgaGF2 ZSBiZWVuIHBlbmRpbmcgZm9yIGEgY2FsbGJhY2suICovCisJCUFzc2VydCghYXJlcS0+Y2FsbGJh Y2tfcGVuZGluZyk7CisJCW5vZGUtPm1zX2FzeW5jcmVtYWluID0gYm1zX2RlbF9tZW1iZXIobm9k ZS0+bXNfYXN5bmNyZW1haW4sIGFyZXEtPnJlcXVlc3RfaW5kZXgpOworCQlyZXR1cm47CisJfQor CisJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPm1zX2hh c19hc3luY3Jlc3VsdHMsIGFyZXEtPnJlcXVlc3RfaW5kZXgpOworCS8qIFNhdmUgcmVzdWx0IHNv IHdlIGNhbiByZXR1cm4gaXQuICovCisJbm9kZS0+bXNfYXN5bmNyZXN1bHRzW2FyZXEtPnJlcXVl c3RfaW5kZXhdID0gc2xvdDsKKworCS8qCisJICogTWFyayB0aGUgc3VicGxhbiB0aGF0IHJldHVy bmVkIGEgcmVzdWx0IGFzIHJlYWR5IGZvciBhIG5ldyByZXF1ZXN0LiAgV2UKKwkgKiBkb24ndCBs YXVuY2ggYW5vdGhlciBvbmUgaGVyZSBpbW1lZGlhdGVseSBiZWNhdXNlIGl0IG1pZ2h0IGNvbXBs ZXRlLgorCSAqLworCW5vZGUtPm1zX25lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobm9kZS0+ bXNfbmVlZHJlcXVlc3QsCisJCQkJCQkJCQkJICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKK30KKwor LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoJCUV4ZWNNZXJnZUFwcGVuZEFzeW5jRXZlbnRXYWl0CisgKgorICoJCVdh aXQgb3IgcG9sbCBmb3IgZmlsZSBkZXNjcmlwdG9yIGV2ZW50cyBhbmQgZmlyZSBjYWxsYmFja3Mu CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50 V2FpdChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQoreworCWludAkJCW5ldmVudHMgPSBub2RlLT5t c19uYXN5bmNwbGFucyArIDI7IC8qIG9uZSBmb3IgUE0gZGVhdGggYW5kCisJCQkJCQkJCQkJCQkJ ICogb25lIGZvciBsYXRjaCAqLworCVdhaXRFdmVudAlvY2N1cnJlZF9ldmVudFtFVkVOVF9CVUZG RVJfU0laRV07CisJaW50CQkJbm9jY3VycmVkOworCWludAkJCWk7CisKKwkvKiBXZSBzaG91bGQg bmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAq LworCUFzc2VydChibXNfbnVtX21lbWJlcnMobm9kZS0+bXNfYXN5bmNyZW1haW4pID4gMCk7CisK Kwlub2RlLT5tc19ldmVudHNldCA9IENyZWF0ZVdhaXRFdmVudFNldChDdXJyZW50UmVzb3VyY2VP d25lciwgbmV2ZW50cyk7CisJQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+bXNfZXZlbnRzZXQsIFdM X0VYSVRfT05fUE1fREVBVEgsIFBHSU5WQUxJRF9TT0NLRVQsCisJCQkJCSAgTlVMTCwgTlVMTCk7 CisKKwkvKiBHaXZlIGVhY2ggd2FpdGluZyBzdWJwbGFuIGEgY2hhbmNlIHRvIGFkZCBhbiBldmVu dC4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX2Fz eW5jcGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNf YXN5bmNyZXF1ZXN0c1tpXTsKKworCQlpZiAoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZykKKwkJCUV4 ZWNBc3luY0NvbmZpZ3VyZVdhaXQoYXJlcSk7CisJfQorCisJLyoKKwkgKiBObyBuZWVkIGZvciBm dXJ0aGVyIHByb2Nlc3NpbmcgaWYgbm9uZSBvZiB0aGUgc3VicGxhbnMgY29uZmlndXJlZCBhbnkK KwkgKiBldmVudHMuCisJICovCisJaWYgKEdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKG5vZGUt Pm1zX2V2ZW50c2V0KSA9PSAxKQorCXsKKwkJRnJlZVdhaXRFdmVudFNldChub2RlLT5tc19ldmVu dHNldCk7CisJCW5vZGUtPm1zX2V2ZW50c2V0ID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCS8q CisJICogQWRkIHRoZSBwcm9jZXNzIGxhdGNoIHRvIHRoZSBzZXQsIHNvIHRoYXQgd2Ugd2FrZSB1 cCB0byBwcm9jZXNzIHRoZQorCSAqIHN0YW5kYXJkIGludGVycnVwdHMgd2l0aCBDSEVDS19GT1Jf SU5URVJSVVBUUygpLgorCSAqCisJICogTk9URTogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgaXQn cyBpbXBvcnRhbnQgdGhhdCB0aGlzIGlzIGFkZGVkIHRvIHRoZQorCSAqIFdhaXRFdmVudFNldCBh ZnRlciB0aGUgRXhlY0FzeW5jQ29uZmlndXJlV2FpdCgpIGNhbGxzLiAgTmFtZWx5LAorCSAqIHBv c3RncmVzX2ZkdyBjYWxscyAiR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMoc2V0KSA9PSAxIiB0 byBjaGVjayBpZgorCSAqIGFueSBvdGhlciBldmVudHMgYXJlIGluIHRoZSBzZXQuICBUaGF0J3Mg YSBwb29yIGRlc2lnbiwgaXQncworCSAqIHF1ZXN0aW9uYWJsZSBmb3IgcG9zdGdyZXNfZmR3IHRv IGJlIGRvaW5nIHRoYXQgaW4gdGhlIGZpcnN0IHBsYWNlLCBidXQKKwkgKiB3ZSBjYW5ub3QgY2hh bmdlIGl0IG5vdy4gIFRoZSBwYXR0ZXJuIGhhcyBwb3NzaWJseSBiZWVuIGNvcGllZCB0byBvdGhl cgorCSAqIGV4dGVuc2lvbnMgdG9vLgorCSAqLworCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPm1z X2V2ZW50c2V0LCBXTF9MQVRDSF9TRVQsIFBHSU5WQUxJRF9TT0NLRVQsCisJCQkJCSAgTXlMYXRj aCwgTlVMTCk7CisKKwkvKiBSZXR1cm4gYXQgbW9zdCBFVkVOVF9CVUZGRVJfU0laRSBldmVudHMg aW4gb25lIGNhbGwuICovCisJaWYgKG5ldmVudHMgPiBFVkVOVF9CVUZGRVJfU0laRSkKKwkJbmV2 ZW50cyA9IEVWRU5UX0JVRkZFUl9TSVpFOworCisJLyoKKwkgKiBXYWl0IHVudGlsIGF0IGxlYXN0 IG9uZSBldmVudCBvY2N1cnMuCisJICovCisJbm9jY3VycmVkID0gV2FpdEV2ZW50U2V0V2FpdChu b2RlLT5tc19ldmVudHNldCwgLTEgLyogbm8gdGltZW91dCAqLyAsIG9jY3VycmVkX2V2ZW50LAor CQkJCQkJCQkgbmV2ZW50cywgV0FJVF9FVkVOVF9BUFBFTkRfUkVBRFkpOworCUZyZWVXYWl0RXZl bnRTZXQobm9kZS0+bXNfZXZlbnRzZXQpOworCW5vZGUtPm1zX2V2ZW50c2V0ID0gTlVMTDsKKwlp ZiAobm9jY3VycmVkID09IDApCisJCXJldHVybjsKKworCS8qIERlbGl2ZXIgbm90aWZpY2F0aW9u cy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm9jY3VycmVkOyBpKyspCisJeworCQlXYWl0RXZlbnQg ICp3ID0gJm9jY3VycmVkX2V2ZW50W2ldOworCisJCS8qCisJCSAqIEVhY2ggd2FpdGluZyBzdWJw bGFuIHNob3VsZCBoYXZlIHJlZ2lzdGVyZWQgaXRzIHdhaXQgZXZlbnQgd2l0aAorCQkgKiB1c2Vy X2RhdGEgcG9pbnRpbmcgYmFjayB0byBpdHMgQXN5bmNSZXF1ZXN0LgorCQkgKi8KKwkJaWYgKCh3 LT5ldmVudHMgJiBXTF9TT0NLRVRfUkVBREFCTEUpICE9IDApCisJCXsKKwkJCUFzeW5jUmVxdWVz dCAqYXJlcSA9IChBc3luY1JlcXVlc3QgKikgdy0+dXNlcl9kYXRhOworCisJCQlpZiAoYXJlcS0+ Y2FsbGJhY2tfcGVuZGluZykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIE1hcmsgaXQgYXMgbm8gbG9u Z2VyIG5lZWRpbmcgYSBjYWxsYmFjay4gIFdlIG11c3QgZG8gdGhpcworCQkJCSAqIGJlZm9yZSBk aXNwYXRjaGluZyB0aGUgY2FsbGJhY2sgaW4gY2FzZSB0aGUgY2FsbGJhY2sgcmVzZXRzCisJCQkJ ICogdGhlIGZsYWcuCisJCQkJICovCisJCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNl OworCisJCQkJLyogRG8gdGhlIGFjdHVhbCB3b3JrLiAqLworCQkJCUV4ZWNBc3luY05vdGlmeShh cmVxKTsKKwkJCX0KKwkJfQorCisJCS8qIEhhbmRsZSBzdGFuZGFyZCBpbnRlcnJ1cHRzICovCisJ CWlmICgody0+ZXZlbnRzICYgV0xfTEFUQ0hfU0VUKSAhPSAwKQorCQl7CisJCQlSZXNldExhdGNo KE15TGF0Y2gpOworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkJfQorCX0KK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDgzMzVjZjViNWM1Li5jZmJlNTEyYTI2 ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xNjMsNiArMTYzLDcg QEAgYm9vbAkJZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSB0cnVlOwogYm9vbAkJZW5hYmxlX3BhcnRp dGlvbl9wcnVuaW5nID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9wcmVzb3J0ZWRfYWdncmVnYXRlID0g dHJ1ZTsKIGJvb2wJCWVuYWJsZV9hc3luY19hcHBlbmQgPSB0cnVlOworYm9vbAkJZW5hYmxlX2Fz eW5jX21lcmdlX2FwcGVuZCA9IHRydWU7CiAKIHR5cGVkZWYgc3RydWN0CiB7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggMDA0YmJjNmQxZDYuLjk4ODgwZTYwMDhm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0xNDY0LDYgKzE0 NjQsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdl QXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCUxpc3QJICAgKnN1YnBsYW5zID0gTklMOwogCUxpc3RD ZWxsICAgKnN1YnBhdGhzOwogCVJlbE9wdEluZm8gKnJlbCA9IGJlc3RfcGF0aC0+cGF0aC5wYXJl bnQ7CisJYm9vbAkJY29uc2lkZXJfYXN5bmMgPSBmYWxzZTsKIAogCS8qCiAJICogV2UgZG9uJ3Qg aGF2ZSB0aGUgYWN0dWFsIGNyZWF0aW9uIG9mIHRoZSBNZXJnZUFwcGVuZCBub2RlIHNwbGl0IG91 dApAQCAtMTQ3OCw2ICsxNDc5LDEwIEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVy SW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJcGxhbi0+cmlnaHR0cmVl ID0gTlVMTDsKIAlub2RlLT5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsKIAorCWNvbnNpZGVyX2Fz eW5jID0gKGVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQgJiYKKwkJCQkJICAhYmVzdF9wYXRoLT5w YXRoLnBhcmFsbGVsX3NhZmUgJiYKKwkJCQkJICBsaXN0X2xlbmd0aChiZXN0X3BhdGgtPnN1YnBh dGhzKSA+IDEpOworCiAJLyoKIAkgKiBDb21wdXRlIHNvcnQgY29sdW1uIGluZm8sIGFuZCBhZGp1 c3QgTWVyZ2VBcHBlbmQncyB0bGlzdCBhcyBuZWVkZWQuCiAJICogQmVjYXVzZSB3ZSBwYXNzIGFk anVzdF90bGlzdF9pbl9wbGFjZSA9IHRydWUsIHdlIG1heSBpZ25vcmUgdGhlCkBAIC0xNTc4LDYg KzE1ODMsMTAgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBN ZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAkJCXN1YnBsYW4gPSBzb3J0X3BsYW47CiAJCX0K IAorCQkvKiBJZiBuZWVkZWQsIGNoZWNrIHRvIHNlZSBpZiBzdWJwbGFuIGNhbiBiZSBleGVjdXRl ZCBhc3luY2hyb25vdXNseSAqLworCQlpZiAoY29uc2lkZXJfYXN5bmMpCisJCQltYXJrX2FzeW5j X2NhcGFibGVfcGxhbihzdWJwbGFuLCBzdWJwYXRoKTsKKwogCQlzdWJwbGFucyA9IGxhcHBlbmQo c3VicGxhbnMsIHN1YnBsYW4pOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJh bWV0ZXJzLmRhdAppbmRleCAyNWRhNzY5ZWIzNS4uZGQwNjBmODk3YzUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC04MDUsNiArODA1LDE0IEBACiAgIGJv b3RfdmFsID0+ICd0cnVlJywKIH0sCiAKK3sgbmFtZSA9PiAnZW5hYmxlX2FzeW5jX21lcmdlX2Fw cGVuZCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKKyAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0aGUgcGxh bm5lclwncyB1c2Ugb2YgYXN5bmMgbWVyZ2UgYXBwZW5kIHBsYW5zLicsCisgIGZsYWdzID0+ICdH VUNfRVhQTEFJTicsCisgIHZhcmlhYmxlID0+ICdlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kJywK KyAgYm9vdF92YWwgPT4gJ3RydWUnLAorfSwKKworCiB7IG5hbWUgPT4gJ2VuYWJsZV9iaXRtYXBz Y2FuJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4g J1FVRVJZX1RVTklOR19NRVRIT0QnLAogICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHRoZSBwbGFu bmVyXCdzIHVzZSBvZiBiaXRtYXAtc2NhbiBwbGFucy4nLAogICBmbGFncyA9PiAnR1VDX0VYUExB SU4nLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmlu ZGV4IGY2MmI2MTk2N2VmLi5kYWEyNmQ2ODkwYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDA1LDYgKzQwNSw3IEBACiAjIC0gUGxhbm5l ciBNZXRob2QgQ29uZmlndXJhdGlvbiAtCiAKICNlbmFibGVfYXN5bmNfYXBwZW5kID0gb24KKyNl bmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kID0gb24KICNlbmFibGVfYml0bWFwc2NhbiA9IG9uCiAj ZW5hYmxlX2dhdGhlcm1lcmdlID0gb24KICNlbmFibGVfaGFzaGFnZyA9IG9uCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaCBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oCmluZGV4IDRlYjA1ZGMzMGQ2Li5lM2ZkYjI2ZWNlNiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKKysrIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKQEAgLTE5LDUgKzE5LDYgQEAK IGV4dGVybiBNZXJnZUFwcGVuZFN0YXRlICpFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5k ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncyk7CiBleHRlcm4gdm9pZCBFeGVjRW5k TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSk7CiBleHRlcm4gdm9pZCBFeGVjUmVT Y2FuTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSk7CitleHRlcm4gdm9pZCBFeGVj QXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSk7CiAKICNlbmRpZgkJ CQkJCQkvKiBOT0RFTUVSR0VBUFBFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAxOGFl OGYwZDRiYi4uMTIxY2VkZTIyOWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNu b2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0xNTQ1LDEwICsx NTQ1LDY2IEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kU3RhdGUKIAlUdXBsZVRhYmxlU2xv dCAqKm1zX3Nsb3RzOwkvKiBhcnJheSBvZiBsZW5ndGggbXNfbnBsYW5zICovCiAJc3RydWN0IGJp bmFyeWhlYXAgKm1zX2hlYXA7IC8qIGJpbmFyeSBoZWFwIG9mIHNsb3QgaW5kaWNlcyAqLwogCWJv b2wJCW1zX2luaXRpYWxpemVkOyAvKiBhcmUgc3VicGxhbnMgc3RhcnRlZD8gKi8KKwlCaXRtYXBz ZXQgICptc19hc3luY3BsYW5zOwkvKiBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAqLworCWlu dAkJCW1zX25hc3luY3BsYW5zOyAvKiAjIG9mIGFzeW5jaHJvbm91cyBwbGFucyAqLworCUFzeW5j UmVxdWVzdCAqKm1zX2FzeW5jcmVxdWVzdHM7CS8qIGFycmF5IG9mIEFzeW5jUmVxdWVzdHMgKi8K KwlUdXBsZVRhYmxlU2xvdCAqKm1zX2FzeW5jcmVzdWx0czsJLyogdW5yZXR1cm5lZCByZXN1bHRz IG9mIGFzeW5jIHBsYW5zICovCisJQml0bWFwc2V0ICAqbXNfaGFzX2FzeW5jcmVzdWx0czsJLyog cGxhbnMgd2hpY2ggaGF2ZSBhc3luYyByZXN1bHRzICovCisJQml0bWFwc2V0ICAqbXNfYXN5bmNy ZW1haW47IC8qIHJlbWFpbmluZyBhc3luY2hyb25vdXMgcGxhbnMgKi8KKwlCaXRtYXBzZXQgICpt c19uZWVkcmVxdWVzdDsgLyogYXN5bmNocm9ub3VzIHBsYW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVz dCAqLworCXN0cnVjdCBXYWl0RXZlbnRTZXQgKm1zX2V2ZW50c2V0OwkvKiBXYWl0RXZlbnRTZXQg dXNlZCB0byBjb25maWd1cmUgZmlsZQorCQkJCQkJCQkJCSAqIGRlc2NyaXB0b3Igd2FpdCBldmVu dHMgKi8KIAlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqbXNfcHJ1bmVfc3RhdGU7CisJYm9v bAkJbXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZDsJLyogaXMgbXNfdmFsaWRfc3VicGxhbnMg dmFsaWQ/ICovCiAJQml0bWFwc2V0ICAqbXNfdmFsaWRfc3VicGxhbnM7CisJQml0bWFwc2V0ICAq bXNfdmFsaWRfYXN5bmNwbGFuczsJLyogdmFsaWQgYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMg Ki8KIH0gTWVyZ2VBcHBlbmRTdGF0ZTsKIAorLyogR2V0dGVycyBmb3IgQXBwZW5kU3RhdGUgYW5k IE1lcmdlQXBwZW5kU3RhdGUgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IFdhaXRFdmVudFNldCAq CitHZXRBcHBlbmRFdmVudFNldChQbGFuU3RhdGUgKnBzKQoreworCUFzc2VydChJc0EocHMsIEFw cGVuZFN0YXRlKSB8fCBJc0EocHMsIE1lcmdlQXBwZW5kU3RhdGUpKTsKKworCWlmIChJc0EocHMs IEFwcGVuZFN0YXRlKSkKKwkJcmV0dXJuICgoQXBwZW5kU3RhdGUgKikgcHMpLT5hc19ldmVudHNl dDsKKwllbHNlCisJCXJldHVybiAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcHMpLT5tc19ldmVudHNl dDsKK30KKworc3RhdGljIGlubGluZSBCaXRtYXBzZXQgKgorR2V0TmVlZFJlcXVlc3QoUGxhblN0 YXRlICpwcykKK3sKKwlBc3NlcnQoSXNBKHBzLCBBcHBlbmRTdGF0ZSkgfHwgSXNBKHBzLCBNZXJn ZUFwcGVuZFN0YXRlKSk7CisKKwlpZiAoSXNBKHBzLCBBcHBlbmRTdGF0ZSkpCisJCXJldHVybiAo KEFwcGVuZFN0YXRlICopIHBzKS0+YXNfbmVlZHJlcXVlc3Q7CisJZWxzZQorCQlyZXR1cm4gKChN ZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXNfbmVlZHJlcXVlc3Q7Cit9CisKK3N0YXRpYyBpbmxp bmUgQml0bWFwc2V0ICoKK0dldFZhbGlkQXN5bmNwbGFucyhQbGFuU3RhdGUgKnBzKQoreworCUFz c2VydChJc0EocHMsIEFwcGVuZFN0YXRlKSB8fCBJc0EocHMsIE1lcmdlQXBwZW5kU3RhdGUpKTsK KworCWlmIChJc0EocHMsIEFwcGVuZFN0YXRlKSkKKwkJcmV0dXJuICgoQXBwZW5kU3RhdGUgKikg cHMpLT5hc192YWxpZF9hc3luY3BsYW5zOworCWVsc2UKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmRT dGF0ZSAqKSBwcyktPm1zX3ZhbGlkX2FzeW5jcGxhbnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgQXN5 bmNSZXF1ZXN0ICoKK0dldFZhbGlkQXN5bmNSZXF1ZXN0KFBsYW5TdGF0ZSAqcHMsIGludCBucmVx KQoreworCUFzc2VydChJc0EocHMsIEFwcGVuZFN0YXRlKSB8fCBJc0EocHMsIE1lcmdlQXBwZW5k U3RhdGUpKTsKKworCWlmIChJc0EocHMsIEFwcGVuZFN0YXRlKSkKKwkJcmV0dXJuICgoQXBwZW5k U3RhdGUgKikgcHMpLT5hc19hc3luY3JlcXVlc3RzW25yZXFdOworCWVsc2UKKwkJcmV0dXJuICgo TWVyZ2VBcHBlbmRTdGF0ZSAqKSBwcyktPm1zX2FzeW5jcmVxdWVzdHNbbnJlcV07Cit9CisKIC8q IC0tLS0tLS0tLS0tLS0tLS0KICAqCSBSZWN1cnNpdmVVbmlvblN0YXRlIGluZm9ybWF0aW9uCiAg KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRl L29wdGltaXplci9jb3N0LmgKaW5kZXggYjUyM2JjZGE4ZjMuLmZlZTQ5MWI3N2FkIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9jb3N0LmgKQEAgLTcwLDYgKzcwLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5h YmxlX3BhcmFsbGVsX2hhc2g7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfcGFydGl0 aW9uX3BydW5pbmc7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfcHJlc29ydGVkX2Fn Z3JlZ2F0ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9hc3luY19hcHBlbmQ7Citl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kOwogZXh0ZXJu IFBHRExMSU1QT1JUIGludCBjb25zdHJhaW50X2V4Y2x1c2lvbjsKIAogZXh0ZXJuIGRvdWJsZSBp bmRleF9wYWdlc19mZXRjaGVkKGRvdWJsZSB0dXBsZXNfZmV0Y2hlZCwgQmxvY2tOdW1iZXIgcGFn ZXMsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDNiMzdmYWZhNjVi Li5hZTRmYTQyYTQzOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2 aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAg LTE0OSw2ICsxNDksNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdo ZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgICAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAg IHwgc2V0dGluZyAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLQog IGVuYWJsZV9hc3luY19hcHBlbmQgICAgICAgICAgICB8IG9uCisgZW5hYmxlX2FzeW5jX21lcmdl X2FwcGVuZCAgICAgIHwgb24KICBlbmFibGVfYml0bWFwc2NhbiAgICAgICAgICAgICAgfCBvbgog IGVuYWJsZV9kaXN0aW5jdF9yZW9yZGVyaW5nICAgICB8IG9uCiAgZW5hYmxlX2VhZ2VyX2FnZ3Jl Z2F0ZSAgICAgICAgIHwgb24KQEAgLTE3Myw3ICsxNzQsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGlu ZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3Nl cXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAg ICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0oMjUgcm93cykK KygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25z IGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9y IGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0 LgotLSAKMi41MS4wCgo= --82b33e176e6bcfb9d8e2e8cdeb7b2a1f970704377f33b378902fecad8868--