Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vjOKC-00EBq9-0m for pgsql-hackers@arkaria.postgresql.org; Fri, 23 Jan 2026 21:04:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vjOK9-001R1t-1N for pgsql-hackers@arkaria.postgresql.org; Fri, 23 Jan 2026 21:04:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vjOK8-001R1l-2z for pgsql-hackers@lists.postgresql.org; Fri, 23 Jan 2026 21:04:09 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vjOK6-000000008C0-1fUP for pgsql-hackers@postgresql.org; Fri, 23 Jan 2026 21:04:08 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-6505cac9879so4069694a12.1 for ; Fri, 23 Jan 2026 13:04:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769202245; cv=none; d=google.com; s=arc-20240605; b=ASuTYTiACYIqJSeKYIiwTTHHmqpmIUul41+9tvM4Cn6o0r8e6FvcLHGW4XrTNZHgCW TaUYSPlguVbnFU3TXkqF/pzx94jjjX3lmZ0af+6xw806PFvcoyi1VK7WWPH/TTXjblrh ZKgaI4yO5E6/F3VNYfvNpa8K+XxDNvfJkx6AeWG5fcKCJmeEp9LOyVwFNeO5GasYlwBR G8Avjb4G0c8GHNpX6jKigPxOhsuGoYQX6mTlE5i7GF9TYUj4yOLxxNcWh0P0kTR6AXDf wHyABfWDihRneOvvv4dZzjaAznNJHhVga3b6K4uwLB6uUeXXgXIfUrF7ZM1Sz09zhtyx 6C0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=g1bsIzgjv9gQFWTCJcp+uz+NAHd9HOpxTJSBD+L2S1s=; fh=01yND2g1pwf8JFxKuUqcWmKPEyrd2lpZGlPTwjpU26Y=; b=L3PoK4Pv+K+oEx6kcCUTkyInburUrR3Cg8l+EHHFB7DHaztbw1SQrbLaKXJmacj5yW /YKs+OfTBAJ4BN1IImSk+AFlubqhqxvr31CchOvDB+DN6WQANlebVii9pTqi7JfcndfX T0A79qw/H3U04MfyY7swCGapav/uCihjT585ehEjC0Q3B0ndxc9pgGlwvCeSyA0Q7nyl 8YNbKYBdK0NTj8Tc0kKhtP4s1Qx7GZxUNJhafePb+d1KVfbSz+dqTLEduqA5ee4ESLgt Ov4uS2400t8htl7mLky8eOtoDFIzYUQcMeKkFwcsVirk38srOAUj49JLI+CSAQK5VfXL sbbQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769202245; x=1769807045; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=g1bsIzgjv9gQFWTCJcp+uz+NAHd9HOpxTJSBD+L2S1s=; b=AVamCMxDAb6i6vcVbwNu/krnXHbNVtMeA6heU9Dn6ACFfHGQV7TQ4mhAlNb9p0PC/p nOsbrM+Enr8kPti27fcnYeMgxAlS05n6BaI3rPRWTFza9Co+KtQZZ2nmOLqo1v06/7Zv ycY8GVgbSUUY97hUVD8fMRGEUQqBgVBzPksuk1ni8nz0wJim9wXkH8bXkcLHsbhED/6S THCs26VDE/NkAv6VvYNL+QfVMZOZh3VWyzAp9PabivyuOqIJpOAc3p+d5Y/9shM3UQRs lwQtN1aZ+KMbFPjCZgeeUGS4m3U010bgzoW0fjMv/gI7doqiTXac7F/ZLub6f51Pqcqa t9nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769202245; x=1769807045; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=g1bsIzgjv9gQFWTCJcp+uz+NAHd9HOpxTJSBD+L2S1s=; b=aOtIJN9K0U1itzIQpF9BxmXpAep2BY6RslSJ6o1grjoLXkXeswVzUV8gNkO7jbsyns b4ZO8oTmEfOwBrT9onc8tpCgIV6MF9kC0J3Ug00oUkYIDQlnls6yvZ6lfzUEnH1ckqzF nUe/CxgPa/dYvYb9pDVmCzl0Vjvc9gOnqolpp0fYheJKIYOpIwJqsZroCxqugDANYQUD I/y+NC5bp7v2fxwh5idpZuH4LUY/np/MuSmNyJnoqT1jVmuJCgmbI0KMuyAjCwMLQLHK +XNAcJDX9xZ+Y7wjpaIJnMYy0+jdO+2bYksUimrK8sQV0RKzK7NdcWQRm2+MUhI73XBW tmZQ== X-Forwarded-Encrypted: i=1; AJvYcCVNi2aD20LWaB3Ws9m+ShP3TBEZI+XZNOoZ2petU0+Ldkd0T7sNZywwqDfHy2ZvXMg05ES/6LKUA1yKF4qr@postgresql.org X-Gm-Message-State: AOJu0YzpAJFa5UFFuvwUPQzqCsIST3n05hnavJIsE0vzbSzBS3tz9n9z M2sjhsXtpLib62LfAbVvnr2y/jB4uAulzSBToPCPSc9eum2a7mfuEMNDU4lqOQCyFicJMLZ6x2s qH0GoKERgy1hpPt+TKQwIHyxokPoYhRM= X-Gm-Gg: AZuq6aLZYW/MVsBtjLuvVSLikB35Epz3NgYNkj1la9ZxnOMX1WIvTiPEq6uJqbmSVnv Ut8m0wGWM9moJ9yVbAPtRsocsjKfA+OVsuhRczt+nmD2jhHZUp49Cju/NoU0TljDLbgD632UyvH 9iX4DXjIz0nAg4r75oLnotY1J++QLFSR9OgdNCgozqwq99ztEfOkSvzHdV7DLp76Sf0x2OuYL+W RXc03K38k+aXwwbNB3QHGH1ildR7/3aPbSiUwfGhHHbF8H1ygn9nt6QKBvaNq63CghespgMwgq0 TIckN7jVXZGm1bJfPBhIZXCgb2pK X-Received: by 2002:a05:6402:13c8:b0:658:60d:c0a6 with SMTP id 4fb4d7f45d1cf-65848763afemr3235777a12.12.1769202244861; Fri, 23 Jan 2026 13:04:04 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Melanie Plageman Date: Fri, 23 Jan 2026 16:03:53 -0500 X-Gm-Features: AZwV_QjRkEZNB76bfAlUPyf3_j2HBrim1br2WvnyQIscKNAJhRBxw-nXN21HEGM Message-ID: Subject: Re: Don't synchronously wait for already-in-progress IO in read stream To: Thomas Munro Cc: Andres Freund , pgsql-hackers@postgresql.org, Peter Geoghegan , Tomas Vondra Content-Type: multipart/mixed; boundary="000000000000578f610649147fcb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000578f610649147fcb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Nov 9, 2025 at 5:21=E2=80=AFPM Thomas Munro wrote: > > I suppose (or perhaps vaguely recall from an off-list discussion?) > that you must have considered merging the new > is-it-already-in-progress check into ReadBuffersCanStartIO(). I > suppose the nowait argument would become a tri-state argument with a > value that means "don't wait for an in-progress read, just give me the > IO handle so I can 'join' it as a foreign waiter", with a new output > argument to receive the handle, or something along those lines, and I > guess you'd need a tri-state result, and perhaps s/Can/Try/ in the > name. That'd remove the double-check (extra header lock-unlock cycle) > and associated race that can cause that rare synchronous wait (which > must still happen sometimes in the duelling concurrent scan use > case?), at the slight extra cost of having to allocate and free a > handle in the case of repeated blocks (eg the index->heap scan use > case), but at least that's just backend-local list pushups and doesn't > do extra work otherwise. Is there some logical problem with that > approach? Is the code just too clumsy? Attached v3 basically does what you suggested above. Now, we should only have to wait if the backend encounters a buffer after another backend has set BM_IO_IN_PROGRESS but before that other backend has set the buffer descriptor's wait reference. 0001 and 0002 are Andres' test-related patches. 0003 is a change I think is required to make one of the tests stable (esp on the BSDs). 0004 is a bit of preliminary refactoring and 0005 is Andres' foreign IO concept but with your suggested structure and my suggested styling. I could potentially break out more into smaller refactoring commits, but I don't think it's too bad the way it is. A few things about the patch that I'm not sure about: - I don't know if pgaio_submit_staged() is in all the right places (and not in too many places). I basically do it before we would wait when starting read IO on the buffer. In the permanent buffers case, that's now only when BM_IO_IN_PROGRESS is set but the wait reference isn't valid yet. This can't happen in the temporary buffers case, so I'm not sure we need to call pgaio_submit_staged(). - StartBufferIO() is no longer invoked in the AsyncReadBuffers() path. We could refactor it so that it works for AsyncReadBuffers(), but that would involve returning something that distinguishes between IO_IN_PROGRESS and IO already done. And StartBufferIO()'s comment explicitly says it wants to avoid that. If we keep my structure, with AsyncReadBuffers() using its own helper (PrepareNewReadBufferIO()) instead of StartBufferIO(), then it seems like we need some way to make it clear what StartBufferIO() is for. I'm not sure what would collectively describe its current users, though. It also now has no non-test callers passing nowait as true. However, once we add write combining, it will, so it seems like we should leave it the way it is to avoid churn. However, other developers might be confused in the interim. - In the 004_read_stream tests, I wonder if there is a way to test that we don't wait for foreign IO until WaitReadBuffers(). We have tests for the stream accessing the same block, which in some cases will exercise the foreign IO path. But it doesn't distinguish between the old behavior -- waiting for the IO to complete when starting read IO on it -- and the new behavior -- not waiting until WaitReadBuffers(). That may not be possible to test, though. - Melanie --000000000000578f610649147fcb Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-aio-Refactor-tests-in-preparation-for-more-tests.patch" Content-Disposition: attachment; filename="v3-0001-aio-Refactor-tests-in-preparation-for-more-tests.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkrd9tbw0 RnJvbSAxMzQwZTUyZmU4OGViZGRmYWJjZDgyODVlNGJjYzQ4Y2EyMTcyMmVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgOSBTZXAgMjAyNSAxMDoxNDozNCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjMgMS81 XSBhaW86IFJlZmFjdG9yIHRlc3RzIGluIHByZXBhcmF0aW9uIGZvciBtb3JlIHRlc3RzCgpJbiBh IGZ1dHVyZSBjb21taXQgbW9yZSBBSU8gcmVsYXRlZCB0ZXN0cyBhcmUgZHVlIHRvIGJlIGludHJv ZHVjZWQuIEhvd2V2ZXIKMDAxX2Fpby5wbCBhbHJlYWR5IGlzIGZhaXJseSBsYXJnZS4KClRoaXMg Y29tbWl0IGludHJvZHVjZXMgYSBuZXcgVGVzdEFpbyBwYWNrYWdlIHdpdGggaGVscGVycyBmb3Ig d3JpdGluZyBBSU8KcmVsYXRlZCB0ZXN0cy4gVGhlbiBpdCB1c2VzIHRoZSBuZXcgaGVscGVycyB0 byBzaW1wbGlmeSB0aGUgZXhpc3RpbmcKMDAxX2Fpby5wbCBieSBpdGVyYXRpbmcgb3ZlciBhbGwg c3VwcG9ydGVkIGlvX21ldGhvZHMuIFRoaXMgd2lsbCBiZQpwYXJ0aWN1bGFybHkgaGVscGZ1bCBi ZWNhdXNlIGFkZGl0aW9uYWwgbWV0aG9kcyBhbHJlYWR5IGhhdmUgYmVlbiBzdWJtaXR0ZWQuCgpB ZGRpdGlvbmFsbHkgdGhpcyBjb21taXQgc3BsaXRzIG91dCB0ZXN0aW5nIG9mIGluaXRkYiB1c2lu ZyBhIG5vbi1kZWZhdWx0Cm1ldGhvZCBpbnRvIGl0cyBvd24gdGVzdC4gV2hpbGUgdGhhdCB0ZXN0 IGlzIHNvbWV3aGF0IGltcG9ydGFudCwgaXQncyBmYWlybHkKc2xvdyBhbmQgZG9lc24ndCBicmVh ayB0aGF0IG9mdGVuLiBGb3IgZGV2ZWxvcG1lbnQgdmVsb2NpdHkgaXQncyBoZWxwZnVsIGZvcgow MDFfYWlvLnBsIHRvIGJlIGZhc3Rlci4KCldoaWxlIHBhcnRpY3VsYXJseSB0aGUgbGF0dGVyIGNv dWxkIGJlbmVmaXQgZnJvbSBiZWluZyBpdHMgb3duIGNvbW1pdCwgaXQKc2VlbXMgdG8gaW50cm9k dWNlIG1vcmUgYmFjay1hbmQtZm9ydGggdGhhbiBpdCdzIHdvcnRoLgoKQXV0aG9yOgpSZXZpZXdl ZC1ieToKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vbWVzb24uYnVpbGQgICAgIHwgICAxICsKIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsICAgIHwgMTQwICsrKysrKystLS0tLS0tLS0t LS0tLS0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDNfaW5pdGRiLnBsIHwgIDcxICsr KysrKysrKysrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvVGVzdEFpby5wbSAgICB8ICA5 MCArKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAyMDMgaW5zZXJ0aW9ucygrKSwgOTkg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fp by90LzAwM19pbml0ZGIucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL3QvVGVzdEFpby5wbQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9h aW8vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkCmlu ZGV4IGZlZmEyNWJjNWFiLi4xOGE3OTdmM2EzYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2Fpby9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21l c29uLmJ1aWxkCkBAIC0zMiw2ICszMiw3IEBAIHRlc3RzICs9IHsKICAgICAndGVzdHMnOiBbCiAg ICAgICAndC8wMDFfYWlvLnBsJywKICAgICAgICd0LzAwMl9pb193b3JrZXJzLnBsJywKKyAgICAg ICd0LzAwM19pbml0ZGIucGwnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAxX2Fpby5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9h aW8vdC8wMDFfYWlvLnBsCmluZGV4IDVjNjM0ZWMzY2E5Li4yN2VlOTY4OThlMCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKQEAgLTcsMTI2ICs3LDU1IEBAIHVzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNl IFRlc3Q6Ok1vcmU7CiAKK3VzZSBGaW5kQmluOwordXNlIGxpYiAkRmluZEJpbjo6UmVhbEJpbjsK IAotIyMjCi0jIFRlc3QgaW9fbWV0aG9kPXdvcmtlcgotIyMjCi1teSAkbm9kZV93b3JrZXIgPSBj cmVhdGVfbm9kZSgnd29ya2VyJyk7Ci0kbm9kZV93b3JrZXItPnN0YXJ0KCk7Ci0KLXRlc3RfZ2Vu ZXJpYygnd29ya2VyJywgJG5vZGVfd29ya2VyKTsKLVNLSVA6Ci17Ci0Jc2tpcCAnSW5qZWN0aW9u IHBvaW50cyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQnLCAxCi0JICB1bmxlc3MgJEVOVntl bmFibGVfaW5qZWN0aW9uX3BvaW50c30gZXEgJ3llcyc7Ci0JdGVzdF9pbmplY3Rfd29ya2VyKCd3 b3JrZXInLCAkbm9kZV93b3JrZXIpOwotfQordXNlIFRlc3RBaW87CiAKLSRub2RlX3dvcmtlci0+ c3RvcCgpOworbXkgJW5vZGVzOwogCiAKICMjIwotIyBUZXN0IGlvX21ldGhvZD1pb191cmluZwor IyBDcmVhdGUgYW5kIGNvbmZpZ3VyZSBvbmUgaW5zdGFuY2UgZm9yIGVhY2ggaW9fbWV0aG9kCiAj IyMKIAotaWYgKGhhdmVfaW9fdXJpbmcoKSkKK2ZvcmVhY2ggbXkgJG1ldGhvZCAoVGVzdEFpbzo6 c3VwcG9ydGVkX2lvX21ldGhvZHMoKSkKIHsKLQlteSAkbm9kZV91cmluZyA9IGNyZWF0ZV9ub2Rl KCdpb191cmluZycpOwotCSRub2RlX3VyaW5nLT5zdGFydCgpOwotCXRlc3RfZ2VuZXJpYygnaW9f dXJpbmcnLCAkbm9kZV91cmluZyk7Ci0JJG5vZGVfdXJpbmctPnN0b3AoKTsKLX0KLQotCi0jIyMK LSMgVGVzdCBpb19tZXRob2Q9c3luYwotIyMjCi0KLW15ICRub2RlX3N5bmMgPSBjcmVhdGVfbm9k ZSgnc3luYycpOworCW15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCRt ZXRob2QpOwogCi0jIGp1c3QgdG8gaGF2ZSBvbmUgdGVzdCBub3QgdXNlIHRoZSBkZWZhdWx0IGF1 dG8tdHVuaW5nCisJJG5vZGVzeyRtZXRob2R9ID0gJG5vZGU7CisJJG5vZGUtPmluaXQoKTsKKwkk bm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJpb19tZXRob2Q9JG1ldGhvZCIp OworCVRlc3RBaW86OmNvbmZpZ3VyZSgkbm9kZSk7Cit9CiAKLSRub2RlX3N5bmMtPmFwcGVuZF9j b25mKAorIyBKdXN0IHRvIGhhdmUgb25lIHRlc3Qgbm90IHVzZSB0aGUgZGVmYXVsdCBhdXRvLXR1 bmluZworJG5vZGVzeydzeW5jJ30tPmFwcGVuZF9jb25mKAogCSdwb3N0Z3Jlc3FsLmNvbmYnLCBx cSgKLWlvX21heF9jb25jdXJyZW5jeT00CisgaW9fbWF4X2NvbmN1cnJlbmN5PTQKICkpOwogCi0k bm9kZV9zeW5jLT5zdGFydCgpOwotdGVzdF9nZW5lcmljKCdzeW5jJywgJG5vZGVfc3luYyk7Ci0k bm9kZV9zeW5jLT5zdG9wKCk7Ci0KLWRvbmVfdGVzdGluZygpOwotCiAKICMjIwotIyBUZXN0IEhl bHBlcnMKKyMgRXhlY3V0ZSB0aGUgdGVzdHMgZm9yIGVhY2ggaW9fbWV0aG9kCiAjIyMKIAotc3Vi IGNyZWF0ZV9ub2RlCitmb3JlYWNoIG15ICRtZXRob2QgKFRlc3RBaW86OnN1cHBvcnRlZF9pb19t ZXRob2RzKCkpCiB7Ci0JbG9jYWwgJFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1aWxk ZXI6OkxldmVsICsgMTsKLQotCW15ICRpb19tZXRob2QgPSBzaGlmdDsKKwlteSAkbm9kZSA9ICRu b2Rlc3skbWV0aG9kfTsKIAotCW15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCRpb19tZXRob2QpOwotCi0JIyBXYW50IHRvIHRlc3QgaW5pdGRiIGZvciBlYWNoIElPIG1l dGhvZCwgb3RoZXJ3aXNlIHdlIGNvdWxkIGp1c3QgcmV1c2UKLQkjIHRoZSBjbHVzdGVyLgotCSMK LQkjIFVuZm9ydHVuYXRlbHkgQ2x1c3Rlcjo6aW5pdCgpIHB1dHMgUEdfVEVTVF9JTklUREJfRVhU UkFfT1BUUyBhZnRlciB0aGUKLQkjIG9wdGlvbnMgc3BlY2lmaWVkIGJ5IC0+ZXh0cmEsIGlmIHNv bWVib2R5IHB1dHMgLWMgaW9fbWV0aG9kPXh5eiBpbgotCSMgUEdfVEVTVF9JTklUREJfRVhUUkFf T1BUUyBpdCB3b3VsZCBicmVhayB0aGlzIHRlc3QuIEZpeCB0aGF0IHVwIGlmIHdlCi0JIyBkZXRl Y3QgaXQuCi0JbG9jYWwgJEVOVntQR19URVNUX0lOSVREQl9FWFRSQV9PUFRTfSA9ICRFTlZ7UEdf VEVTVF9JTklUREJfRVhUUkFfT1BUU307Ci0JaWYgKGRlZmluZWQgJEVOVntQR19URVNUX0lOSVRE Ql9FWFRSQV9PUFRTfQotCQkmJiAkRU5We1BHX1RFU1RfSU5JVERCX0VYVFJBX09QVFN9ID1+IG0v aW9fbWV0aG9kPS8pCi0JewotCQkkRU5We1BHX1RFU1RfSU5JVERCX0VYVFJBX09QVFN9IC49ICIg LWMgaW9fbWV0aG9kPSRpb19tZXRob2QiOwotCX0KLQotCSRub2RlLT5pbml0KGV4dHJhID0+IFsg Jy1jJywgImlvX21ldGhvZD0kaW9fbWV0aG9kIiBdKTsKLQotCSRub2RlLT5hcHBlbmRfY29uZigK LQkJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAotc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzPXRlc3Rf YWlvCi1sb2dfbWluX21lc3NhZ2VzID0gJ0RFQlVHMycKLWxvZ19zdGF0ZW1lbnQ9YWxsCi1sb2df ZXJyb3JfdmVyYm9zaXR5PWRlZmF1bHQKLXJlc3RhcnRfYWZ0ZXJfY3Jhc2g9ZmFsc2UKLXRlbXBf YnVmZmVycz0xMDAKLSkpOworCSRub2RlLT5zdGFydCgpOworCXRlc3RfaW9fbWV0aG9kKCRtZXRo b2QsICRub2RlKTsKKwkkbm9kZS0+c3RvcCgpOworfQogCi0JIyBFdmVuIHRob3VnaCB3ZSB1c2Vk IC1jIGlvX21ldGhvZD0uLi4gYWJvdmUsIGlmIFRFTVBfQ09ORklHIHNldHMKLQkjIGlvX21ldGhv ZCwgaXQnZCBvdmVycmlkZSB0aGUgc2V0dGluZyBwZXJzaXN0ZWQgYXQgaW5pdGRiIHRpbWUuIFdo aWxlCi0JIyB1c2luZyAoYW5kIGxhdGVyIHZlcmlmeWluZykgdGhlIHNldHRpbmcgZnJvbSBpbml0 ZGIgcHJvdmlkZXMgc29tZQotCSMgdmVyaWZpY2F0aW9uIG9mIGhhdmluZyB1c2VkIHRoZSBpb19t ZXRob2QgZHVyaW5nIGluaXRkYiwgaXQncyBwcm9iYWJseQotCSMgbm90IHdvcnRoIHRoZSBjb21w bGljYXRpb24gb2Ygb25seSBhcHBlbmRpbmcgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbgotCSMg aW4gVEVNUF9DT05GSUcuCi0JJG5vZGUtPmFwcGVuZF9jb25mKAotCQkncG9zdGdyZXNxbC5jb25m JywgcXEoCi1pb19tZXRob2Q9JGlvX21ldGhvZAotKSk7Citkb25lX3Rlc3RpbmcoKTsKIAotCW9r KDEsICIkaW9fbWV0aG9kOiBpbml0ZGIiKTsKIAotCXJldHVybiAkbm9kZTsKLX0KKyMjIworIyBU ZXN0IEhlbHBlcnMKKyMjIwogCi1zdWIgaGF2ZV9pb191cmluZwotewotCSMgVG8gZGV0ZWN0IGlm IGlvX3VyaW5nIGlzIHN1cHBvcnRlZCwgd2UgbG9vayBhdCB0aGUgZXJyb3IgbWVzc2FnZSBmb3IK LQkjIGFzc2lnbmluZyBhbiBpbnZhbGlkIHZhbHVlIHRvIGFuIGVudW0gR1VDLCB3aGljaCBsaXN0 cyBhbGwgdGhlIHZhbGlkCi0JIyBvcHRpb25zLiBXZSBuZWVkIHRvIHVzZSAtQyB0byBkZWFsIHdp dGggcnVubmluZyBhcyBhZG1pbmlzdHJhdG9yIG9uCi0JIyB3aW5kb3dzLCB0aGUgc3VwZXJ1c2Vy IGNoZWNrIGlzIG9taXR0ZWQgaWYgLUMgaXMgdXNlZC4KLQlteSAoJHN0ZG91dCwgJHN0ZGVycikg PQotCSAgcnVuX2NvbW1hbmQgW3F3KHBvc3RncmVzIC1DIGludmFsaWQgLWMgaW9fbWV0aG9kPWlu dmFsaWQpXTsKLQlkaWUgImNhbid0IGRldGVybWluZSBzdXBwb3J0ZWQgaW9fbWV0aG9kIHZhbHVl cyIKLQkgIHVubGVzcyAkc3RkZXJyID1+IG0vQXZhaWxhYmxlIHZhbHVlczogKFteXC5dKylcLi87 Ci0JbXkgJG1ldGhvZHMgPSAkMTsKLQlub3RlICJzdXBwb3J0ZWQgaW9fbWV0aG9kIHZhbHVlcyBh cmU6ICRtZXRob2RzIjsKLQotCXJldHVybiAoJG1ldGhvZHMgPX4gbS9pb191cmluZy8pID8gMSA6 IDA7Ci19CiAKIHN1YiBwc3FsX2xpa2UKIHsKQEAgLTE0OTAsOCArMTQxOSw4IEBAIFNFTEVDVCBy ZWFkX3JlbF9ibG9ja19sbCgndGJsX2NzX2ZhaWwnLCAzLCBuYmxvY2tzPT4xLCB6ZXJvX29uX2Vy cm9yPT50cnVlKTspLAogfQogCiAKLSMgUnVuIGFsbCB0ZXN0cyB0aGF0IGFyZSBzdXBwb3J0ZWQg Zm9yIGFsbCBpb19tZXRob2RzCi1zdWIgdGVzdF9nZW5lcmljCisjIFJ1biBhbGwgdGVzdHMgdGhh dCBmb3IgdGhlIHNwZWNpZmllZCBub2RlIC8gaW9fbWV0aG9kCitzdWIgdGVzdF9pb19tZXRob2QK IHsKIAlteSAkaW9fbWV0aG9kID0gc2hpZnQ7CiAJbXkgJG5vZGUgPSBzaGlmdDsKQEAgLTE1MjYs MTAgKzE0NTUsMjMgQEAgQ0hFQ0tQT0lOVDsKIAl0ZXN0X2lnbm9yZV9jaGVja3N1bSgkaW9fbWV0 aG9kLCAkbm9kZSk7CiAJdGVzdF9jaGVja3N1bV9jcmVhdGVkYigkaW9fbWV0aG9kLCAkbm9kZSk7 CiAKKwkjIGdlbmVyaWMgaW5qZWN0aW9uIHRlc3RzCiAgIFNLSVA6CiAJewogCQlza2lwICdJbmpl Y3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCcsIDEKIAkJICB1bmxlc3Mg JEVOVntlbmFibGVfaW5qZWN0aW9uX3BvaW50c30gZXEgJ3llcyc7CiAJCXRlc3RfaW5qZWN0KCRp b19tZXRob2QsICRub2RlKTsKIAl9CisKKwkjIHdvcmtlciBzcGVjaWZpYyBpbmplY3Rpb24gdGVz dHMKKwlpZiAoJGlvX21ldGhvZCBlcSAnd29ya2VyJykKKwl7CisJICBTS0lQOgorCQl7CisJCQlz a2lwICdJbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCcsIDEKKwkJ CSAgdW5sZXNzICRFTlZ7ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IGVxICd5ZXMnOworCisJCQl0 ZXN0X2luamVjdF93b3JrZXIoJGlvX21ldGhvZCwgJG5vZGUpOworCQl9CisJfQogfQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwM19pbml0ZGIucGwgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAzX2luaXRkYi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uYzAzYWU1OGQwMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAzX2luaXRkYi5wbApAQCAtMCwwICsxLDcxIEBACisjIENv cHlyaWdodCAoYykgMjAyNC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorIworIyBUZXN0IGluaXRkYiBmb3IgZWFjaCBJTyBtZXRob2QuIFRoaXMgaXMgZG9uZSBzZXBh cmF0ZWx5IGZyb20gMDAxX2Fpby5wbCwgYXMKKyMgaXQgaXNuJ3QgZmFzdC4gVGhpcyB3YXkgdGhl IG1vcmUgY29tbW9ubHkgZmFpbGluZyAvIGhhY2tlZC1vbiAwMDFfYWlvLnBsIGNhbgorIyBiZSBp dGVyYXRlZCBvbiBtb3JlIHF1aWNrbHkuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFU QUwgPT4gJ2FsbCc7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCit1c2UgRmluZEJpbjsKK3VzZSBs aWIgJEZpbmRCaW46OlJlYWxCaW47CisKK3VzZSBUZXN0QWlvOworCisKK2ZvcmVhY2ggbXkgJG1l dGhvZCAoVGVzdEFpbzo6c3VwcG9ydGVkX2lvX21ldGhvZHMoKSkKK3sKKwl0ZXN0X2NyZWF0ZV9u b2RlKCRtZXRob2QpOworfQorCitkb25lX3Rlc3RpbmcoKTsKKworCitzdWIgdGVzdF9jcmVhdGVf bm9kZQoreworCWxvY2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0OjpCdWlsZGVyOjpM ZXZlbCArIDE7CisKKwlteSAkaW9fbWV0aG9kID0gc2hpZnQ7CisKKwlteSAkbm9kZSA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygkaW9fbWV0aG9kKTsKKworCSMgV2FudCB0byB0ZXN0 IGluaXRkYiBmb3IgZWFjaCBJTyBtZXRob2QsIG90aGVyd2lzZSB3ZSBjb3VsZCBqdXN0IHJldXNl CisJIyB0aGUgY2x1c3Rlci4KKwkjCisJIyBVbmZvcnR1bmF0ZWx5IENsdXN0ZXI6OmluaXQoKSBw dXRzIFBHX1RFU1RfSU5JVERCX0VYVFJBX09QVFMgYWZ0ZXIgdGhlCisJIyBvcHRpb25zIHNwZWNp ZmllZCBieSAtPmV4dHJhLCBpZiBzb21lYm9keSBwdXRzIC1jIGlvX21ldGhvZD14eXogaW4KKwkj IFBHX1RFU1RfSU5JVERCX0VYVFJBX09QVFMgaXQgd291bGQgYnJlYWsgdGhpcyB0ZXN0LiBGaXgg dGhhdCB1cCBpZiB3ZQorCSMgZGV0ZWN0IGl0LgorCWxvY2FsICRFTlZ7UEdfVEVTVF9JTklUREJf RVhUUkFfT1BUU30gPSAkRU5We1BHX1RFU1RfSU5JVERCX0VYVFJBX09QVFN9OworCWlmIChkZWZp bmVkICRFTlZ7UEdfVEVTVF9JTklUREJfRVhUUkFfT1BUU30KKwkJJiYgJEVOVntQR19URVNUX0lO SVREQl9FWFRSQV9PUFRTfSA9fiBtL2lvX21ldGhvZD0vKQorCXsKKwkJJEVOVntQR19URVNUX0lO SVREQl9FWFRSQV9PUFRTfSAuPSAiIC1jIGlvX21ldGhvZD0kaW9fbWV0aG9kIjsKKwl9CisKKwkk bm9kZS0+aW5pdChleHRyYSA9PiBbICctYycsICJpb19tZXRob2Q9JGlvX21ldGhvZCIgXSk7CisK KwlUZXN0QWlvOjpjb25maWd1cmUoJG5vZGUpOworCisJIyBFdmVuIHRob3VnaCB3ZSB1c2VkIC1j IGlvX21ldGhvZD0uLi4gYWJvdmUsIGlmIFRFTVBfQ09ORklHIHNldHMKKwkjIGlvX21ldGhvZCwg aXQnZCBvdmVycmlkZSB0aGUgc2V0dGluZyBwZXJzaXN0ZWQgYXQgaW5pdGRiIHRpbWUuIFdoaWxl CisJIyB1c2luZyAoYW5kIGxhdGVyIHZlcmlmeWluZykgdGhlIHNldHRpbmcgZnJvbSBpbml0ZGIg cHJvdmlkZXMgc29tZQorCSMgdmVyaWZpY2F0aW9uIG9mIGhhdmluZyB1c2VkIHRoZSBpb19tZXRo b2QgZHVyaW5nIGluaXRkYiwgaXQncyBwcm9iYWJseQorCSMgbm90IHdvcnRoIHRoZSBjb21wbGlj YXRpb24gb2Ygb25seSBhcHBlbmRpbmcgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbgorCSMgaW4g VEVNUF9DT05GSUcuCisJJG5vZGUtPmFwcGVuZF9jb25mKAorCQkncG9zdGdyZXNxbC5jb25mJywg cXEoCitpb19tZXRob2Q9JGlvX21ldGhvZAorKSk7CisKKwlvaygxLCAiJGlvX21ldGhvZDogaW5p dGRiIik7CisKKwkkbm9kZS0+c3RhcnQoKTsKKwkkbm9kZS0+c3RvcCgpOworCW9rKDEsICIkaW9f bWV0aG9kOiBzdGFydCAmIHN0b3AiKTsKKworCXJldHVybiAkbm9kZTsKK30KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC9UZXN0QWlvLnBtIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2Fpby90L1Rlc3RBaW8ucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjViYzgwYTliMTMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2Fpby90L1Rlc3RBaW8ucG0KQEAgLTAsMCArMSw5MCBAQAorIyBDb3B5cmlnaHQgKGMpIDIw MjQtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworPXBvZAorCis9 aGVhZDEgTkFNRQorCitUZXN0QWlvIC0gaGVscGVycyBmb3Igd3JpdGluZyBBSU8gcmVsYXRlZCB0 ZXN0cworCis9Y3V0CisKK3BhY2thZ2UgVGVzdEFpbzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsK KworCis9cG9kCisKKz1oZWFkMSBNRVRIT0RTCisKKz1vdmVyCisKKz1pdGVtIFRlc3RBaW86OnN1 cHBvcnRlZF9pb19tZXRob2RzKCkKKworUmV0dXJuIGFuIGFycmF5IG9mIGFsbCB0aGUgc3VwcG9y dGVkIHZhbHVlcyBmb3IgdGhlIGlvX21ldGhvZCBHVUMKKworPWN1dAorCitzdWIgc3VwcG9ydGVk X2lvX21ldGhvZHMoKQoreworCW15IEBpb19tZXRob2RzID0gKCd3b3JrZXInKTsKKworCXB1c2go QGlvX21ldGhvZHMsICJpb191cmluZyIpIGlmIGhhdmVfaW9fdXJpbmcoKTsKKworCSMgUmV0dXJu IHN5bmMgbGFzdCwgYXMgaXQgd2lsbCBsZWFzdCBjb21tb25seSBmYWlsCisJcHVzaChAaW9fbWV0 aG9kcywgInN5bmMiKTsKKworCXJldHVybiBAaW9fbWV0aG9kczsKK30KKworCis9aXRlbSBUZXN0 QWlvOjpjb25maWd1cmUoKQorCitQcmVwYXJlIGEgY2x1c3RlciBmb3IgQUlPIHRlc3QKKworPWN1 dAorCitzdWIgY29uZmlndXJlCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKworCSRub2RlLT5hcHBl bmRfY29uZigKKwkJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAorc2hhcmVkX3ByZWxvYWRfbGlicmFy aWVzPXRlc3RfYWlvCitsb2dfbWluX21lc3NhZ2VzID0gJ0RFQlVHMycKK2xvZ19zdGF0ZW1lbnQ9 YWxsCitsb2dfZXJyb3JfdmVyYm9zaXR5PWRlZmF1bHQKK3Jlc3RhcnRfYWZ0ZXJfY3Jhc2g9ZmFs c2UKK3RlbXBfYnVmZmVycz0xMDAKKykpOworCit9CisKKworPXBvZAorCis9aXRlbSBUZXN0QWlv OjpoYXZlX2lvX3VyaW5nKCkKKworUmV0dXJuIGlmIGlvX3VyaW5nIGlzIHN1cHBvcnRlZAorCis9 Y3V0CisKK3N1YiBoYXZlX2lvX3VyaW5nCit7CisJIyBUbyBkZXRlY3QgaWYgaW9fdXJpbmcgaXMg c3VwcG9ydGVkLCB3ZSBsb29rIGF0IHRoZSBlcnJvciBtZXNzYWdlIGZvcgorCSMgYXNzaWduaW5n IGFuIGludmFsaWQgdmFsdWUgdG8gYW4gZW51bSBHVUMsIHdoaWNoIGxpc3RzIGFsbCB0aGUgdmFs aWQKKwkjIG9wdGlvbnMuIFdlIG5lZWQgdG8gdXNlIC1DIHRvIGRlYWwgd2l0aCBydW5uaW5nIGFz IGFkbWluaXN0cmF0b3Igb24KKwkjIHdpbmRvd3MsIHRoZSBzdXBlcnVzZXIgY2hlY2sgaXMgb21p dHRlZCBpZiAtQyBpcyB1c2VkLgorCW15ICgkc3Rkb3V0LCAkc3RkZXJyKSA9CisJICBydW5fY29t bWFuZCBbcXcocG9zdGdyZXMgLUMgaW52YWxpZCAtYyBpb19tZXRob2Q9aW52YWxpZCldOworCWRp ZSAiY2FuJ3QgZGV0ZXJtaW5lIHN1cHBvcnRlZCBpb19tZXRob2QgdmFsdWVzIgorCSAgdW5sZXNz ICRzdGRlcnIgPX4gbS9BdmFpbGFibGUgdmFsdWVzOiAoW15cLl0rKVwuLzsKKwlteSAkbWV0aG9k cyA9ICQxOworCW5vdGUgInN1cHBvcnRlZCBpb19tZXRob2QgdmFsdWVzIGFyZTogJG1ldGhvZHMi OworCisJcmV0dXJuICgkbWV0aG9kcyA9fiBtL2lvX3VyaW5nLykgPyAxIDogMDsKK30KKworMTsK LS0gCjIuNDMuMAoK --000000000000578f610649147fcb Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0002-test_aio-Add-read_stream-test-infrastructure-test.patch" Content-Disposition: attachment; filename="v3-0002-test_aio-Add-read_stream-test-infrastructure-test.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkrd9vz61 RnJvbSBhODgwMzlkYzM0MTQ0YWJjNmFkNzQyOTM4NDM1NTM4ZDhkYzcwZjhjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFdlZCwgMTAgU2VwIDIwMjUgMTQ6MDA6MDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYzIDIv NV0gdGVzdF9haW86IEFkZCByZWFkX3N0cmVhbSB0ZXN0IGluZnJhc3RydWN0dXJlICYgdGVzdHMK CkF1dGhvcjoKUmV2aWV3ZWQtYnk6CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vCkJh Y2twYXRjaDoKLS0tCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkICAgICAg ICAgfCAgIDEgKwogLi4uL21vZHVsZXMvdGVzdF9haW8vdC8wMDRfcmVhZF9zdHJlYW0ucGwgICAg IHwgMjgyICsrKysrKysrKysrKysrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlv LS0xLjAuc3FsICAgfCAgMjYgKy0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8u YyAgICAgICAgICB8IDM0NCArKysrKysrKysrKysrKystLS0KIHNyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiA1IGZpbGVzIGNoYW5nZWQsIDYwMiBp bnNlcnRpb25zKCspLCA1MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDA0X3JlYWRfc3RyZWFtLnBsCgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vbWVzb24uYnVpbGQKaW5kZXggMThhNzk3ZjNhM2IuLjkwOWY4MWQ5NmMxIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vbWVzb24uYnVpbGQKQEAgLTMzLDYgKzMzLDcgQEAgdGVzdHMgKz0g ewogICAgICAgJ3QvMDAxX2Fpby5wbCcsCiAgICAgICAndC8wMDJfaW9fd29ya2Vycy5wbCcsCiAg ICAgICAndC8wMDNfaW5pdGRiLnBsJywKKyAgICAgICd0LzAwNF9yZWFkX3N0cmVhbS5wbCcsCiAg ICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8w MDRfcmVhZF9zdHJlYW0ucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDA0X3JlYWRf c3RyZWFtLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OWNmYWJi YjFkMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDRf cmVhZF9zdHJlYW0ucGwKQEAgLTAsMCArMSwyODIgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdh cm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCit1c2UgRmlu ZEJpbjsKK3VzZSBsaWIgJEZpbmRCaW46OlJlYWxCaW47CisKK3VzZSBUZXN0QWlvOworCisKK215 ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCd0ZXN0Jyk7Ciskbm9kZS0+ aW5pdCgpOworCiskbm9kZS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAor c2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzPXRlc3RfYWlvCitsb2dfbWluX21lc3NhZ2VzID0gJ0RF QlVHMycKK2xvZ19zdGF0ZW1lbnQ9YWxsCitsb2dfZXJyb3JfdmVyYm9zaXR5PWRlZmF1bHQKK3Jl c3RhcnRfYWZ0ZXJfY3Jhc2g9ZmFsc2UKK3RlbXBfYnVmZmVycz0xMDAKK21heF9jb25uZWN0aW9u cz04Citpb19tZXRob2Q9d29ya2VyCispKTsKKworJG5vZGUtPnN0YXJ0KCk7Cit0ZXN0X3NldHVw KCRub2RlKTsKKyRub2RlLT5zdG9wKCk7CisKKworZm9yZWFjaCBteSAkbWV0aG9kIChUZXN0QWlv OjpzdXBwb3J0ZWRfaW9fbWV0aG9kcygpKQoreworCSRub2RlLT5hZGp1c3RfY29uZigncG9zdGdy ZXNxbC5jb25mJywgJ2lvX21ldGhvZCcsICd3b3JrZXInKTsKKwkkbm9kZS0+c3RhcnQoKTsKKwl0 ZXN0X2lvX21ldGhvZCgkbWV0aG9kLCAkbm9kZSk7CisJJG5vZGUtPnN0b3AoKTsKK30KKworZG9u ZV90ZXN0aW5nKCk7CisKKworc3ViIHRlc3Rfc2V0dXAKK3sKKwlteSAkbm9kZSA9IHNoaWZ0Owor CisJJG5vZGUtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXEoCitDUkVBVEUgRVhURU5TSU9O IHRlc3RfYWlvOworCitDUkVBVEUgVEFCTEUgbGFyZ2Vpc2goayBpbnQgbm90IG51bGwpIFdJVEgg KEZJTExGQUNUT1I9MTApOworSU5TRVJUIElOVE8gbGFyZ2Vpc2goaykgU0VMRUNUIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwMCk7CispKTsKKwlvaygxLCAic2V0dXAiKTsKK30KKworCitzdWIgdGVz dF9yZXBlYXRlZF9ibG9ja3MKK3sKKwlteSAkaW9fbWV0aG9kID0gc2hpZnQ7CisJbXkgJG5vZGUg PSBzaGlmdDsKKworCW15ICRwc3FsID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMn LCBvbl9lcnJvcl9zdG9wID0+IDApOworCisJIyBQcmV2ZW50aW5nIGxhcmdlciByZWFkcyBtYWtl cyB0ZXN0aW5nIGVhc2llcgorCSRwc3FsLT5xdWVyeV9zYWZlKAorCQlxcS8KK1NFVCBpb19jb21i aW5lX2xpbWl0ID0gMTsKKy8pOworCisJIyB0ZXN0IG1pc3Mgb2YgdGhlIHNhbWUgYmxvY2sgdHdp Y2UgaW4gYSByb3cKKwkkcHNxbC0+cXVlcnlfc2FmZSgKKwkJcXEvCitTRUxFQ1QgZXZpY3RfcmVs KCdsYXJnZWlzaCcpOworLyk7CisJJHBzcWwtPnF1ZXJ5X3NhZmUoCisJCXFxLworU0VMRUNUICog RlJPTSByZWFkX3N0cmVhbV9mb3JfYmxvY2tzKCdsYXJnZWlzaCcsIEFSUkFZWzAsIDIsIDIsIDQs IDRdKTsKKy8pOworCW9rKDEsICIkaW9fbWV0aG9kOiBzdHJlYW0gbWlzc2luZyB0aGUgc2FtZSBi bG9jayByZXBlYXRlZGx5Iik7CisKKwkkcHNxbC0+cXVlcnlfc2FmZSgKKwkJcXEvCitTRUxFQ1Qg KiBGUk9NIHJlYWRfc3RyZWFtX2Zvcl9ibG9ja3MoJ2xhcmdlaXNoJywgQVJSQVlbMCwgMiwgMiwg NCwgNF0pOworLyk7CisJb2soMSwgIiRpb19tZXRob2Q6IHN0cmVhbSBoaXR0aW5nIHRoZSBzYW1l IGJsb2NrIHJlcGVhdGVkbHkiKTsKKworCSMgdGVzdCBoaXQgb2YgdGhlIHNhbWUgYmxvY2sgdHdp Y2UgaW4gYSByb3cKKwkkcHNxbC0+cXVlcnlfc2FmZSgKKwkJcXEvCitTRUxFQ1QgZXZpY3RfcmVs KCdsYXJnZWlzaCcpOworLyk7CisJJHBzcWwtPnF1ZXJ5X3NhZmUoCisJCXFxLworU0VMRUNUICog RlJPTSByZWFkX3N0cmVhbV9mb3JfYmxvY2tzKCdsYXJnZWlzaCcsIEFSUkFZWzAsIDEsIDIsIDMs IDQsIDUsIDYsIDUsIDQsIDMsIDIsIDEsIDBdKTsKKy8pOworCW9rKDEsICIkaW9fbWV0aG9kOiBz dHJlYW0gYWNjZXNzaW5nIHNhbWUgYmxvY2siKTsKKworCSRwc3FsLT5xdWl0KCk7Cit9CisKKwor c3ViIHRlc3RfaW5qZWN0X2ZvcmVpZ24KK3sKKwlteSAkaW9fbWV0aG9kID0gc2hpZnQ7CisJbXkg JG5vZGUgPSBzaGlmdDsKKworCW15ICRwc3FsX2EgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdw b3N0Z3JlcycsIG9uX2Vycm9yX3N0b3AgPT4gMCk7CisJbXkgJHBzcWxfYiA9ICRub2RlLT5iYWNr Z3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywgb25fZXJyb3Jfc3RvcCA9PiAwKTsKKworCW15ICRwaWRf YSA9ICRwc3FsX2EtPnF1ZXJ5X3NhZmUocXEvU0VMRUNUIHBnX2JhY2tlbmRfcGlkKCk7Lyk7CisK KworCSMjIworCSMgVGVzdCByZWFkIHN0cmVhbSBlbmNvdW50ZXJpbmcgYnVmZmVycyB1bmRlcmdv aW5nIElPIGluIGFub3RoZXIgYmFja2VuZCwKKwkjIHdpdGggdGhlIG90aGVyIGJhY2tlbmQncyBy ZWFkcyBzdWNjZWVkaW5nLgorCSMjIworCSRwc3FsX2EtPnF1ZXJ5X3NhZmUoCisJCXFxLworU0VM RUNUIGV2aWN0X3JlbCgnbGFyZ2Vpc2gnKTsKKy8pOworCisJJHBzcWxfYi0+cXVlcnlfc2FmZSgK KwkJcXEvCitTRUxFQ1QgaW5qX2lvX2NvbXBsZXRpb25fd2FpdChwaWQ9PnBnX2JhY2tlbmRfcGlk KCksIHJlbGZpbGVub2RlPT5wZ19yZWxhdGlvbl9maWxlbm9kZSgnbGFyZ2Vpc2gnKSk7CisvKTsK KworCSRwc3FsX2ItPntzdGRpbn0gLj0gcXEvCitTRUxFQ1QgcmVhZF9yZWxfYmxvY2tfbGwoJ2xh cmdlaXNoJywgYmxvY2tubz0+NSwgbmJsb2Nrcz0+MSk7CisvOworCSRwc3FsX2ItPntydW59LT5w dW1wX25iKCk7CisKKwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgcXEv CitTRUxFQ1Qgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVu dCA9ICdjb21wbGV0aW9uX3dhaXQnOworLywKKwkJJ2NvbXBsZXRpb25fd2FpdCcpOworCisJJHBz cWxfYS0+e3N0ZGlufSAuPSBxcS8KK1NFTEVDVCBhcnJheV9hZ2coYmxvY2tudW0pIEZST00gcmVh ZF9zdHJlYW1fZm9yX2Jsb2NrcygnbGFyZ2Vpc2gnLCBBUlJBWVswLCAyLCA1LCA3XSk7CisvOwor CSRwc3FsX2EtPntydW59LT5wdW1wX25iKCk7CisKKwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgn cG9zdGdyZXMnLAorCQlxcShTRUxFQ1Qgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkg V0hFUkUgcGlkID0gJHBpZF9hKSwKKwkJJ0Fpb0lvQ29tcGxldGlvbicpOworCisJJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcS9TRUxFQ1QgaW5qX2lvX2NvbXBsZXRpb25fY29udGludWUo KS8pOworCisJcHVtcF91bnRpbCgKKwkJJHBzcWxfYS0+e3J1bn0sICRwc3FsX2EtPnt0aW1lb3V0 fSwKKwkJXCRwc3FsX2EtPntzdGRvdXR9LCBxci9cezAsMiw1LDdcfS8pOworCisJb2soMSwKKwkJ cXEvJGlvX21ldGhvZDogcmVhZCBzdHJlYW0gZW5jb3VudGVycyBzdWNjZWVkaW5nIElPIGJ5IGFu b3RoZXIgYmFja2VuZC8KKwkpOworCisKKwkjIyMKKwkjIFRlc3QgcmVhZCBzdHJlYW0gZW5jb3Vu dGVyaW5nIGJ1ZmZlcnMgdW5kZXJnb2luZyBJTyBpbiBhbm90aGVyIGJhY2tlbmQsCisJIyB3aXRo IHRoZSBvdGhlciBiYWNrZW5kJ3MgcmVhZHMgZmFpbGluZy4KKwkjIyMKKwkkcHNxbF9hLT5xdWVy eV9zYWZlKAorCQlxcS8KK1NFTEVDVCBldmljdF9yZWwoJ2xhcmdlaXNoJyk7CisvKTsKKworCSRw c3FsX2ItPnF1ZXJ5X3NhZmUoCisJCXFxLworU0VMRUNUIGlual9pb19jb21wbGV0aW9uX3dhaXQo cGlkPT5wZ19iYWNrZW5kX3BpZCgpLCByZWxmaWxlbm9kZT0+cGdfcmVsYXRpb25fZmlsZW5vZGUo J2xhcmdlaXNoJykpOworLyk7CisKKwkkcHNxbF9iLT5xdWVyeV9zYWZlKAorCQlxcS8KK1NFTEVD VCBpbmpfaW9fc2hvcnRfcmVhZF9hdHRhY2goLWVycm5vX2Zyb21fc3RyaW5nKCdFSU8nKSwgcGlk PT5wZ19iYWNrZW5kX3BpZCgpLCByZWxmaWxlbm9kZT0+cGdfcmVsYXRpb25fZmlsZW5vZGUoJ2xh cmdlaXNoJykpOworLyk7CisKKwkkcHNxbF9iLT57c3RkaW59IC49IHFxLworU0VMRUNUIHJlYWRf cmVsX2Jsb2NrX2xsKCdsYXJnZWlzaCcsIGJsb2Nrbm89PjUsIG5ibG9ja3M9PjEpOworLzsKKwkk cHNxbF9iLT57cnVufS0+cHVtcF9uYigpOworCisJJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoCisJ CSdwb3N0Z3JlcycsIHFxLworU0VMRUNUIHdhaXRfZXZlbnQgRlJPTSBwZ19zdGF0X2FjdGl2aXR5 IFdIRVJFIHdhaXRfZXZlbnQgPSAnY29tcGxldGlvbl93YWl0JzsKKy8sCisJCSdjb21wbGV0aW9u X3dhaXQnKTsKKworCSRwc3FsX2EtPntzdGRpbn0gLj0gcXEvCitTRUxFQ1QgYXJyYXlfYWdnKGJs b2NrbnVtKSBGUk9NIHJlYWRfc3RyZWFtX2Zvcl9ibG9ja3MoJ2xhcmdlaXNoJywgQVJSQVlbMCwg MiwgNSwgN10pOworLzsKKwkkcHNxbF9hLT57cnVufS0+cHVtcF9uYigpOworCisJJG5vZGUtPnBv bGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkJcXEoU0VMRUNUIHdhaXRfZXZlbnQgRlJPTSBw Z19zdGF0X2FjdGl2aXR5IFdIRVJFIHBpZCA9ICRwaWRfYSksCisJCSdBaW9Jb0NvbXBsZXRpb24n KTsKKworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEvU0VMRUNUIGlual9pb19jb21w bGV0aW9uX2NvbnRpbnVlKCkvKTsKKworCXB1bXBfdW50aWwoCisJCSRwc3FsX2EtPntydW59LCAk cHNxbF9hLT57dGltZW91dH0sCisJCVwkcHNxbF9hLT57c3Rkb3V0fSwgcXIvXHswLDIsNSw3XH0v KTsKKworCSRwc3FsX2ItPntydW59LT5wdW1wX25iKCk7CisJbGlrZSgKKwkJJHBzcWxfYi0+e3N0 ZGVycn0sCisJCXFyLy4qRVJST1IuKmNvdWxkIG5vdCByZWFkIGJsb2NrcyA1Li41LiokLywKKwkJ IiRpb19tZXRob2Q6IGluamVjdGVkIGVycm9yIG9jY3VycmVkIik7CisJJHBzcWxfYi0+e3N0ZGVy cn0gPSAnJzsKKwkkcHNxbF9iLT5xdWVyeV9zYWZlKHFxL1NFTEVDVCBpbmpfaW9fc2hvcnRfcmVh ZF9kZXRhY2goKTsvKTsKKworCisJb2soMSwKKwkJcXEvJGlvX21ldGhvZDogcmVhZCBzdHJlYW0g ZW5jb3VudGVycyBmYWlsaW5nIElPIGJ5IGFub3RoZXIgYmFja2VuZC8pOworCisKKwkjIyMKKwkj IFRlc3QgcmVhZCBzdHJlYW0gZW5jb3VudGVyaW5nIHR3byBidWZmZXJzIHRoYXQgYXJlIHVuZGVy Z29pbmcgdGhlIHNhbWUKKwkjIElPLCBzdGFydGVkIGJ5IGFub3RoZXIgYmFja2VuZAorCSMjIwor CSRwc3FsX2EtPnF1ZXJ5X3NhZmUoCisJCXFxLworU0VMRUNUIGV2aWN0X3JlbCgnbGFyZ2Vpc2gn KTsKKy8pOworCisJJHBzcWxfYi0+cXVlcnlfc2FmZSgKKwkJcXEvCitTRUxFQ1QgaW5qX2lvX2Nv bXBsZXRpb25fd2FpdChwaWQ9PnBnX2JhY2tlbmRfcGlkKCksIHJlbGZpbGVub2RlPT5wZ19yZWxh dGlvbl9maWxlbm9kZSgnbGFyZ2Vpc2gnKSk7CisvKTsKKworCSRwc3FsX2ItPntzdGRpbn0gLj0g cXEvCitTRUxFQ1QgcmVhZF9yZWxfYmxvY2tfbGwoJ2xhcmdlaXNoJywgYmxvY2tubz0+MiwgbmJs b2Nrcz0+Myk7CisvOworCSRwc3FsX2ItPntydW59LT5wdW1wX25iKCk7CisKKwkkbm9kZS0+cG9s bF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgcXEvCitTRUxFQ1Qgd2FpdF9ldmVudCBGUk9N IHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVudCA9ICdjb21wbGV0aW9uX3dhaXQnOwor LywKKwkJJ2NvbXBsZXRpb25fd2FpdCcpOworCisJJHBzcWxfYS0+e3N0ZGlufSAuPSBxcS8KK1NF TEVDVCBhcnJheV9hZ2coYmxvY2tudW0pIEZST00gcmVhZF9zdHJlYW1fZm9yX2Jsb2NrcygnbGFy Z2Vpc2gnLCBBUlJBWVswLCAyLCA0XSk7CisvOworCSRwc3FsX2EtPntydW59LT5wdW1wX25iKCk7 CisKKwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCQlxcShTRUxFQ1Qgd2Fp dF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgcGlkID0gJHBpZF9hKSwKKwkJJ0Fp b0lvQ29tcGxldGlvbicpOworCisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcS9TRUxF Q1QgaW5qX2lvX2NvbXBsZXRpb25fY29udGludWUoKS8pOworCisJcHVtcF91bnRpbCgKKwkJJHBz cWxfYS0+e3J1bn0sICRwc3FsX2EtPnt0aW1lb3V0fSwKKwkJXCRwc3FsX2EtPntzdGRvdXR9LCBx ci9cezAsMiw0XH0vKTsKKworCW9rKDEsIHFxLyRpb19tZXRob2Q6IHJlYWQgc3RyZWFtIGVuY291 bnRlcnMgdHdvIGJ1ZmZlciByZWFkIGluIG9uZSBJTy8pOworCisKKwkkcHNxbF9hLT5xdWl0KCk7 CisJJHBzcWxfYi0+cXVpdCgpOworfQorCisKK3N1YiB0ZXN0X2lvX21ldGhvZAoreworCW15ICRp b19tZXRob2QgPSBzaGlmdDsKKwlteSAkbm9kZSA9IHNoaWZ0OworCisJdGVzdF9yZXBlYXRlZF9i bG9ja3MoJGlvX21ldGhvZCwgJG5vZGUpOworCisgIFNLSVA6CisJeworCQlza2lwICdJbmplY3Rp b24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCcsIDEKKwkJICB1bmxlc3MgJEVO VntlbmFibGVfaW5qZWN0aW9uX3BvaW50c30gZXEgJ3llcyc7CisJCXRlc3RfaW5qZWN0X2ZvcmVp Z24oJGlvX21ldGhvZCwgJG5vZGUpOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlv L3Rlc3RfYWlvLS0xLjAuc3FsCmluZGV4IGU0OTU0ODFjNDFlLi5kYTdjYzAzODI5YSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCkBAIC0zMyw2ICszMywx MCBAQCBDUkVBVEUgRlVOQ1RJT04gcmVhZF9yZWxfYmxvY2tfbGwoCiBSRVRVUk5TIHBnX2NhdGFs b2cudm9pZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CiAKK0NSRUFU RSBGVU5DVElPTiBldmljdF9yZWwocmVsIHJlZ2NsYXNzKQorUkVUVVJOUyBwZ19jYXRhbG9nLnZv aWQgU1RSSUNUCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCiBDUkVBVEUgRlVO Q1RJT04gaW52YWxpZGF0ZV9yZWxfYmxvY2socmVsIHJlZ2NsYXNzLCBibG9ja25vIGludCkKIFJF VFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VB R0UgQzsKQEAgLTQxLDcgKzQ1LDcgQEAgQ1JFQVRFIEZVTkNUSU9OIGJ1ZmZlcl9jcmVhdGVfdG95 KHJlbCByZWdjbGFzcywgYmxvY2tubyBpbnQ0KQogUkVUVVJOUyBwZ19jYXRhbG9nLmludDQgU1RS SUNUCiBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwogCi1DUkVBVEUgRlVOQ1RJT04g YnVmZmVyX2NhbGxfc3RhcnRfaW8oYnVmZmVyIGludCwgZm9yX2lucHV0IGJvb2wsIG5vd2FpdCBi b29sKQorQ1JFQVRFIEZVTkNUSU9OIGJ1ZmZlcl9jYWxsX3N0YXJ0X2lvKGJ1ZmZlciBpbnQsIGZv cl9pbnB1dCBib29sLCBub3dhaXQgYm9vbCwgYXNzaWduX2lvIGJvb2wgREVGQVVMVCBmYWxzZSkK IFJFVFVSTlMgcGdfY2F0YWxvZy5ib29sIFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFO R1VBR0UgQzsKIApAQCAtNTAsNiArNTQsMTQgQEAgUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQgU1RS SUNUCiBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwogCiAKKy8qCisgKiBSZWFkIHN0 cmVhbSByZWxhdGVkIGZ1bmN0aW9ucworICovCitDUkVBVEUgRlVOQ1RJT04gcmVhZF9zdHJlYW1f Zm9yX2Jsb2NrcyhyZWwgcmVnY2xhc3MsIGJsb2NrcyBpbnQ0W10sIE9VVCBibG9ja29mZiBpbnQ0 LCBPVVQgYmxvY2tudW0gaW50NCwgT1VUIGJ1ZiBpbnQ0KQorUkVUVVJOUyBTRVRPRiByZWNvcmQg U1RSSUNUCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCisKIAogLyoKICAqIEhh bmRsZSByZWxhdGVkIGZ1bmN0aW9ucwpAQCAtOTEsOCArMTAzLDE2IEBAIEFTICdNT0RVTEVfUEFU SE5BTUUnIExBTkdVQUdFIEM7CiAvKgogICogSW5qZWN0aW9uIHBvaW50IHJlbGF0ZWQgZnVuY3Rp b25zCiAgKi8KLUNSRUFURSBGVU5DVElPTiBpbmpfaW9fc2hvcnRfcmVhZF9hdHRhY2gocmVzdWx0 IGludCkKLVJFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAorQ1JFQVRFIEZVTkNUSU9OIGlu al9pb19jb21wbGV0aW9uX3dhaXQocGlkIGludCBERUZBVUxUIE5VTEwsIHJlbGZpbGVub2RlIG9p ZCBERUZBVUxUIDApCitSRVRVUk5TIHBnX2NhdGFsb2cudm9pZAorQVMgJ01PRFVMRV9QQVRITkFN RScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIGlual9pb19jb21wbGV0aW9uX2NvbnRp bnVlKCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5H VUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gaW5qX2lvX3Nob3J0X3JlYWRfYXR0YWNoKHJlc3Vs dCBpbnQsIHBpZCBpbnQgREVGQVVMVCBOVUxMLCByZWxmaWxlbm9kZSBvaWQgREVGQVVMVCAwKQor UkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQKIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7 CiAKIENSRUFURSBGVU5DVElPTiBpbmpfaW9fc2hvcnRfcmVhZF9kZXRhY2goKQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2Fpby90ZXN0X2Fpby5jCmluZGV4IGIxYWE4YWY5ZWMwLi45MTFhNzEwMmEzNCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYwpAQCAtMjAsMTYgKzIwLDIzIEBACiAKICNp bmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKICNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAi ZnVuY2FwaS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYWlvLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9h aW9faW50ZXJuYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNs dWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvY2hlY2tzdW0uaCIKKyNp bmNsdWRlICJzdG9yYWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv aXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3By b2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NudW1iZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdl L3JlYWRfc3RyZWFtLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZlbnQuaCIKIAogCiBQR19N T0RVTEVfTUFHSUM7CkBAIC0zNywxMyArNDQsMzAgQEAgUEdfTU9EVUxFX01BR0lDOwogCiB0eXBl ZGVmIHN0cnVjdCBJbmpJb0Vycm9yU3RhdGUKIHsKKwlDb25kaXRpb25WYXJpYWJsZSBjdjsKKwog CWJvb2wJCWVuYWJsZWRfc2hvcnRfcmVhZDsKIAlib29sCQllbmFibGVkX3Jlb3BlbjsKIAorCWJv b2wJCWVuYWJsZWRfY29tcGxldGlvbl93YWl0OworCU9pZAkJCWNvbXBsZXRpb25fd2FpdF9yZWxm aWxlbm9kZTsKKwlwaWRfdAkJY29tcGxldGlvbl93YWl0X3BpZDsKKwl1aW50MzIJCWNvbXBsZXRp b25fd2FpdF9ldmVudDsKKwogCWJvb2wJCXNob3J0X3JlYWRfcmVzdWx0X3NldDsKKwlPaWQJCQlz aG9ydF9yZWFkX3JlbGZpbGVub2RlOworCXBpZF90CQlzaG9ydF9yZWFkX3BpZDsKIAlpbnQJCQlz aG9ydF9yZWFkX3Jlc3VsdDsKIH0gSW5qSW9FcnJvclN0YXRlOwogCit0eXBlZGVmIHN0cnVjdCBC bG9ja3NSZWFkU3RyZWFtRGF0YQoreworCWludAkJCW5ibG9ja3M7CisJaW50CQkJY3VyYmxvY2s7 CisJdWludDMyCSAgICpibG9ja3M7Cit9IEJsb2Nrc1JlYWRTdHJlYW1EYXRhOworCisKIHN0YXRp YyBJbmpJb0Vycm9yU3RhdGUgKmlual9pb19lcnJvcl9zdGF0ZTsKIAogLyogU2hhcmVkIG1lbW9y eSBpbml0IGNhbGxiYWNrcyAqLwpAQCAtODUsMTAgKzEwOSwxMyBAQCB0ZXN0X2Fpb19zaG1lbV9z dGFydHVwKHZvaWQpCiAJCWlual9pb19lcnJvcl9zdGF0ZS0+ZW5hYmxlZF9zaG9ydF9yZWFkID0g ZmFsc2U7CiAJCWlual9pb19lcnJvcl9zdGF0ZS0+ZW5hYmxlZF9yZW9wZW4gPSBmYWxzZTsKIAor CQlDb25kaXRpb25WYXJpYWJsZUluaXQoJmlual9pb19lcnJvcl9zdGF0ZS0+Y3YpOworCQlpbmpf aW9fZXJyb3Jfc3RhdGUtPmNvbXBsZXRpb25fd2FpdF9ldmVudCA9IFdhaXRFdmVudEluamVjdGlv blBvaW50TmV3KCJjb21wbGV0aW9uX3dhaXQiKTsKKwogI2lmZGVmIFVTRV9JTkpFQ1RJT05fUE9J TlRTCiAJCUluamVjdGlvblBvaW50QXR0YWNoKCJhaW8tcHJvY2Vzcy1jb21wbGV0aW9uLWJlZm9y ZS1zaGFyZWQiLAogCQkJCQkJCSAidGVzdF9haW8iLAotCQkJCQkJCSAiaW5qX2lvX3Nob3J0X3Jl YWQiLAorCQkJCQkJCSAiaW5qX2lvX2NvbXBsZXRpb25faG9vayIsCiAJCQkJCQkJIE5VTEwsCiAJ CQkJCQkJIDApOwogCQlJbmplY3Rpb25Qb2ludExvYWQoImFpby1wcm9jZXNzLWNvbXBsZXRpb24t YmVmb3JlLXNoYXJlZCIpOwpAQCAtMzg0LDcgKzQxMSw3IEBAIHJlYWRfcmVsX2Jsb2NrX2xsKFBH X0ZVTkNUSU9OX0FSR1MpCiAJaWYgKG5ibG9ja3MgPD0gMCB8fCBuYmxvY2tzID4gUEdfSU9WX01B WCkKIAkJZWxvZyhFUlJPUiwgIm5ibG9ja3MgaXMgb3V0IG9mIHJhbmdlIik7CiAKLQlyZWwgPSBy ZWxhdGlvbl9vcGVuKHJlbGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwlyZWwgPSByZWxhdGlv bl9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOwogCiAJZm9yIChpbnQgaSA9IDA7IGkgPCBu YmxvY2tzOyBpKyspCiAJewpAQCAtNDU4LDYgKzQ4NSwyNyBAQCByZWFkX3JlbF9ibG9ja19sbChQ R19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CiAKK1BHX0ZVTkNUSU9OX0lO Rk9fVjEoZXZpY3RfcmVsKTsKK0RhdHVtCitldmljdF9yZWwoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlPaWQJCQlyZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJUmVsYXRpb24JcmVsOworCWludDMy CQlidWZmZXJzX2V2aWN0ZWQsCisJCQkJYnVmZmVyc19mbHVzaGVkLAorCQkJCWJ1ZmZlcnNfc2tp cHBlZDsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sp OworCisJRXZpY3RSZWxVbnBpbm5lZEJ1ZmZlcnMocmVsLCAmYnVmZmVyc19ldmljdGVkLCAmYnVm ZmVyc19mbHVzaGVkLAorCQkJCQkJCSZidWZmZXJzX3NraXBwZWQpOworCisJcmVsYXRpb25fY2xv c2UocmVsLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30K KwogUEdfRlVOQ1RJT05fSU5GT19WMShpbnZhbGlkYXRlX3JlbF9ibG9jayk7CiBEYXR1bQogaW52 YWxpZGF0ZV9yZWxfYmxvY2soUEdfRlVOQ1RJT05fQVJHUykKQEAgLTYxMCw2ICs2NTgsODYgQEAg YnVmZmVyX2NhbGxfdGVybWluYXRlX2lvKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1ZP SUQoKTsKIH0KIAorCitzdGF0aWMgQmxvY2tOdW1iZXIKK3JlYWRfc3RyZWFtX2Zvcl9ibG9ja3Nf Y2IoUmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJICB2b2lkICpjYWxsYmFja19wcml2YXRlX2Rh dGEsCisJCQkJCQkgIHZvaWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwlCbG9ja3NSZWFkU3RyZWFt RGF0YSAqc3RyZWFtX2RhdGEgPSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisKKwlpZiAoc3RyZWFt X2RhdGEtPmN1cmJsb2NrID49IHN0cmVhbV9kYXRhLT5uYmxvY2tzKQorCQlyZXR1cm4gSW52YWxp ZEJsb2NrTnVtYmVyOworCXJldHVybiBzdHJlYW1fZGF0YS0+YmxvY2tzW3N0cmVhbV9kYXRhLT5j dXJibG9jaysrXTsKK30KKworUEdfRlVOQ1RJT05fSU5GT19WMShyZWFkX3N0cmVhbV9mb3JfYmxv Y2tzKTsKK0RhdHVtCityZWFkX3N0cmVhbV9mb3JfYmxvY2tzKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJT2lkCQkJcmVsaWQgPSBQR19HRVRBUkdfT0lEKDApOworCUFycmF5VHlwZSAgKmJsb2Nrc2Fy cmF5ID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDEpOworCVJldHVyblNldEluZm8gKnJzaW5mbyA9 IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlSZWxhdGlvbglyZWw7CisJ QmxvY2tzUmVhZFN0cmVhbURhdGEgc3RyZWFtX2RhdGE7CisJUmVhZFN0cmVhbSAqc3RyZWFtOwor CisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJLyoKKwkgKiBXZSBleHBlY3Qg dGhlIGlucHV0IHRvIGJlIGFuIE4tZWxlbWVudCBpbnQ0IGFycmF5OyB2ZXJpZnkgdGhhdC4gV2UK KwkgKiBkb24ndCBuZWVkIHRvIHVzZSBkZWNvbnN0cnVjdF9hcnJheSgpIHNpbmNlIHRoZSBhcnJh eSBkYXRhIGlzIGp1c3QKKwkgKiBnb2luZyB0byBsb29rIGxpa2UgYSBDIGFycmF5IG9mIE4gaW50 NCB2YWx1ZXMuCisJICovCisJaWYgKEFSUl9ORElNKGJsb2Nrc2FycmF5KSAhPSAxIHx8CisJCUFS Ul9IQVNOVUxMKGJsb2Nrc2FycmF5KSB8fAorCQlBUlJfRUxFTVRZUEUoYmxvY2tzYXJyYXkpICE9 IElOVDRPSUQpCisJCWVsb2coRVJST1IsICJleHBlY3RlZCAxIGRpbWVuc2lvbmFsIGludDQgYXJy YXkiKTsKKworCXN0cmVhbV9kYXRhLmN1cmJsb2NrID0gMDsKKwlzdHJlYW1fZGF0YS5uYmxvY2tz ID0gQVJSX0RJTVMoYmxvY2tzYXJyYXkpWzBdOworCXN0cmVhbV9kYXRhLmJsb2NrcyA9ICh1aW50 MzIgKikgQVJSX0RBVEFfUFRSKGJsb2Nrc2FycmF5KTsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4o cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9y ZWxhdGlvbihSRUFEX1NUUkVBTV9GVUxMLAorCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJcmVs LAorCQkJCQkJCQkJCU1BSU5fRk9SS05VTSwKKwkJCQkJCQkJCQlyZWFkX3N0cmVhbV9mb3JfYmxv Y2tzX2NiLAorCQkJCQkJCQkJCSZzdHJlYW1fZGF0YSwKKwkJCQkJCQkJCQkwKTsKKworCWZvciAo aW50IGkgPSAwOyBpIDwgc3RyZWFtX2RhdGEubmJsb2NrczsgaSsrKQorCXsKKwkJQnVmZmVyCQli dWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCQlEYXR1bQkJdmFs dWVzWzNdID0gezB9OworCQlib29sCQludWxsc1szXSA9IHswfTsKKworCQlpZiAoIUJ1ZmZlcklz VmFsaWQoYnVmKSkKKwkJCWVsb2coRVJST1IsICJyZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcigpIGNh bGwgJWQgaXMgdW5leHBlY3RlZGx5IGludmFsaWQiLCBpKTsKKworCQl2YWx1ZXNbMF0gPSBJbnQz MkdldERhdHVtKGkpOworCQl2YWx1ZXNbMV0gPSBVSW50MzJHZXREYXR1bShzdHJlYW1fZGF0YS5i bG9ja3NbaV0pOworCQl2YWx1ZXNbMl0gPSBVSW50MzJHZXREYXR1bShidWYpOworCisJCXR1cGxl c3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsIHZhbHVl cywgbnVsbHMpOworCisJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKwl9CisKKwlpZiAocmVhZF9zdHJl YW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxMKSAhPSBJbnZhbGlkQnVmZmVyKQorCQllbG9nKEVS Uk9SLCAicmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoKSBjYWxsICVkIGlzIHVuZXhwZWN0ZWRseSB2 YWxpZCIsCisJCQkgc3RyZWFtX2RhdGEubmJsb2NrcyArIDEpOworCisJcmVhZF9zdHJlYW1fZW5k KHN0cmVhbSk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CisKKwlyZXR1cm4gKERh dHVtKSAwOworfQorCisKIFBHX0ZVTkNUSU9OX0lORk9fVjEoaGFuZGxlX2dldCk7CiBEYXR1bQog aGFuZGxlX2dldChQR19GVU5DVElPTl9BUkdTKQpAQCAtNjgwLDE1ICs4MDgsOTggQEAgYmF0Y2hf ZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKICNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUwot ZXh0ZXJuIFBHRExMRVhQT1JUIHZvaWQgaW5qX2lvX3Nob3J0X3JlYWQoY29uc3QgY2hhciAqbmFt ZSwKLQkJCQkJCQkJCQkgIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YSwKLQkJCQkJCQkJCQkgIHZv aWQgKmFyZyk7CitleHRlcm4gUEdETExFWFBPUlQgdm9pZCBpbmpfaW9fY29tcGxldGlvbl9ob29r KGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQkJCQkJCSAgIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0 YSwKKwkJCQkJCQkJCQkJICAgdm9pZCAqYXJnKTsKIGV4dGVybiBQR0RMTEVYUE9SVCB2b2lkIGlu al9pb19yZW9wZW4oY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJCQkJCSAgY29uc3Qgdm9pZCAqcHJp dmF0ZV9kYXRhLAogCQkJCQkJCQkJICB2b2lkICphcmcpOwogCi12b2lkCi1pbmpfaW9fc2hvcnRf cmVhZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpwcml2YXRlX2RhdGEsIHZvaWQgKmFy ZykKK3N0YXRpYyBib29sCitpbmpfaW9fc2hvcnRfcmVhZF9tYXRjaGVzKFBnQWlvSGFuZGxlICpp b2gpCit7CisJUEdQUk9DCSAgICpvd25lcl9wcm9jOworCWludDMyCQlvd25lcl9waWQ7CisJUGdB aW9UYXJnZXREYXRhICp0ZDsKKworCWlmICghaW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFibGVkX3No b3J0X3JlYWQpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghaW5qX2lvX2Vycm9yX3N0YXRlLT5z aG9ydF9yZWFkX3Jlc3VsdF9zZXQpCisJCXJldHVybiBmYWxzZTsKKworCW93bmVyX3Byb2MgPSBH ZXRQR1Byb2NCeU51bWJlcihwZ2Fpb19pb19nZXRfb3duZXIoaW9oKSk7CisJb3duZXJfcGlkID0g b3duZXJfcHJvYy0+cGlkOworCisJaWYgKGlual9pb19lcnJvcl9zdGF0ZS0+c2hvcnRfcmVhZF9w aWQgIT0gMCAmJgorCQlpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0X3JlYWRfcGlkICE9IG93bmVy X3BpZCkKKwkJcmV0dXJuIGZhbHNlOworCisJdGQgPSBwZ2Fpb19pb19nZXRfdGFyZ2V0X2RhdGEo aW9oKTsKKworCWlmIChpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0X3JlYWRfcmVsZmlsZW5vZGUg IT0gSW52YWxpZE9pZCAmJgorCQl0ZC0+c21nci5ybG9jYXRvci5yZWxOdW1iZXIgIT0gaW5qX2lv X2Vycm9yX3N0YXRlLT5zaG9ydF9yZWFkX3JlbGZpbGVub2RlKQorCQlyZXR1cm4gZmFsc2U7CisK KwkvKgorCSAqIE9ubHkgc2hvcnRlbiByZWFkcyB0aGF0IGFyZSBhY3R1YWxseSBsb25nZXIgdGhh biB0aGUgdGFyZ2V0IHNpemUsCisJICogb3RoZXJ3aXNlIHdlIGNhbiB0cmlnZ2VyIG92ZXItcmVh ZHMuCisJICovCisJaWYgKGlual9pb19lcnJvcl9zdGF0ZS0+c2hvcnRfcmVhZF9yZXN1bHQgPj0g aW9oLT5yZXN1bHQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgYm9vbAoraW5qX2lvX2NvbXBsZXRpb25fd2FpdF9tYXRjaGVzKFBnQWlvSGFuZGxlICppb2gp Cit7CisJUEdQUk9DCSAgICpvd25lcl9wcm9jOworCWludDMyCQlvd25lcl9waWQ7CisJUGdBaW9U YXJnZXREYXRhICp0ZDsKKworCWlmICghaW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFibGVkX2NvbXBs ZXRpb25fd2FpdCkKKwkJcmV0dXJuIGZhbHNlOworCisJb3duZXJfcHJvYyA9IEdldFBHUHJvY0J5 TnVtYmVyKHBnYWlvX2lvX2dldF9vd25lcihpb2gpKTsKKwlvd25lcl9waWQgPSBvd25lcl9wcm9j LT5waWQ7CisKKwlpZiAoaW5qX2lvX2Vycm9yX3N0YXRlLT5jb21wbGV0aW9uX3dhaXRfcGlkICE9 IG93bmVyX3BpZCkKKwkJcmV0dXJuIGZhbHNlOworCisJdGQgPSBwZ2Fpb19pb19nZXRfdGFyZ2V0 X2RhdGEoaW9oKTsKKworCWlmIChpbmpfaW9fZXJyb3Jfc3RhdGUtPmNvbXBsZXRpb25fd2FpdF9y ZWxmaWxlbm9kZSAhPSBJbnZhbGlkT2lkICYmCisJCXRkLT5zbWdyLnJsb2NhdG9yLnJlbE51bWJl ciAhPSBpbmpfaW9fZXJyb3Jfc3RhdGUtPmNvbXBsZXRpb25fd2FpdF9yZWxmaWxlbm9kZSkKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCitpbmpfaW9f Y29tcGxldGlvbl93YWl0X2hvb2soY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0 ZV9kYXRhLCB2b2lkICphcmcpCit7CisJUGdBaW9IYW5kbGUgKmlvaCA9IChQZ0Fpb0hhbmRsZSAq KSBhcmc7CisKKwlpZiAoIWlual9pb19jb21wbGV0aW9uX3dhaXRfbWF0Y2hlcyhpb2gpKQorCQly ZXR1cm47CisKKwlDb25kaXRpb25WYXJpYWJsZVByZXBhcmVUb1NsZWVwKCZpbmpfaW9fZXJyb3Jf c3RhdGUtPmN2KTsKKworCXdoaWxlICh0cnVlKQorCXsKKwkJaWYgKCFpbmpfaW9fY29tcGxldGlv bl93YWl0X21hdGNoZXMoaW9oKSkKKwkJCWJyZWFrOworCisJCUNvbmRpdGlvblZhcmlhYmxlU2xl ZXAoJmlual9pb19lcnJvcl9zdGF0ZS0+Y3YsCisJCQkJCQkJICAgaW5qX2lvX2Vycm9yX3N0YXRl LT5jb21wbGV0aW9uX3dhaXRfZXZlbnQpOworCX0KKworCUNvbmRpdGlvblZhcmlhYmxlQ2FuY2Vs U2xlZXAoKTsKK30KKworc3RhdGljIHZvaWQKK2lual9pb19zaG9ydF9yZWFkX2hvb2soY29uc3Qg Y2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLCB2b2lkICphcmcpCiB7CiAJUGdB aW9IYW5kbGUgKmlvaCA9IChQZ0Fpb0hhbmRsZSAqKSBhcmc7CiAKQEAgLTY5Nyw1OCArOTA4LDU2 IEBAIGlual9pb19zaG9ydF9yZWFkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnByaXZh dGVfZGF0YSwgdm9pZCAqYXJnKQogCQkJCSAgIGlual9pb19lcnJvcl9zdGF0ZS0+ZW5hYmxlZF9y ZW9wZW4pLAogCQkJZXJyaGlkZXN0bXQodHJ1ZSksIGVycmhpZGVjb250ZXh0KHRydWUpKTsKIAot CWlmIChpbmpfaW9fZXJyb3Jfc3RhdGUtPmVuYWJsZWRfc2hvcnRfcmVhZCkKKwlpZiAoaW5qX2lv X3Nob3J0X3JlYWRfbWF0Y2hlcyhpb2gpKQogCXsKKwkJc3RydWN0IGlvdmVjICppb3YgPSAmcGdh aW9fY3RsLT5pb3ZlY3NbaW9oLT5pb3ZlY19vZmZdOworCQlpbnQzMgkJb2xkX3Jlc3VsdCA9IGlv aC0+cmVzdWx0OworCQlpbnQzMgkJbmV3X3Jlc3VsdCA9IGlual9pb19lcnJvcl9zdGF0ZS0+c2hv cnRfcmVhZF9yZXN1bHQ7CisJCWludDMyCQlwcm9jZXNzZWQgPSAwOworCisJCWVyZXBvcnQoTE9H LAorCQkJCWVycm1zZygic2hvcnQgcmVhZCBpbmplY3QgcG9pbnQsIGNoYW5naW5nIHJlc3VsdCBm cm9tICVkIHRvICVkIiwKKwkJCQkJICAgb2xkX3Jlc3VsdCwgbmV3X3Jlc3VsdCksCisJCQkJZXJy aGlkZXN0bXQodHJ1ZSksIGVycmhpZGVjb250ZXh0KHRydWUpKTsKKwogCQkvKgotCQkgKiBPbmx5 IHNob3J0ZW4gcmVhZHMgdGhhdCBhcmUgYWN0dWFsbHkgbG9uZ2VyIHRoYW4gdGhlIHRhcmdldCBz aXplLAotCQkgKiBvdGhlcndpc2Ugd2UgY2FuIHRyaWdnZXIgb3Zlci1yZWFkcy4KKwkJICogVGhl IHVuZGVybHlpbmcgSU8gYWN0dWFsbHkgY29tcGxldGVkIE9LLCBhbmQgdGh1cyB0aGUgImludmFs aWQiCisJCSAqIHBvcnRpb24gb2YgdGhlIElPViBhY3R1YWxseSBjb250YWlucyB2YWxpZCBkYXRh LiBUaGF0IGNhbiBoaWRlIGEKKwkJICogbG90IG9mIHByb2JsZW1zLCBlLmcuIGlmIHdlIHdlcmUg dG8gd3JvbmdseSBtYXJrIGEgYnVmZmVyLCB0aGF0CisJCSAqIHdhc24ndCByZWFkIGFjY29yZGlu ZyB0byB0aGUgc2hvcnRlbmVkLXJlYWQsIElPIGFzIHZhbGlkLCB0aGUKKwkJICogY29udGVudHMg d291bGQgbG9vayB2YWxpZCBhbmQgd2UgbWlnaHQgbWlzcyBhIGJ1Zy4KKwkJICoKKwkJICogVG8g YXZvaWQgdGhhdCwgaXRlcmF0ZSB0aHJvdWdoIHRoZSBJT1YgYW5kIHplcm8gb3V0IHRoZSAiZmFp bGVkIgorCQkgKiBwb3J0aW9uIG9mIHRoZSBJTy4KIAkJICovCi0JCWlmIChpbmpfaW9fZXJyb3Jf c3RhdGUtPnNob3J0X3JlYWRfcmVzdWx0X3NldAotCQkJJiYgaW9oLT5vcCA9PSBQR0FJT19PUF9S RUFEVgotCQkJJiYgaW5qX2lvX2Vycm9yX3N0YXRlLT5zaG9ydF9yZWFkX3Jlc3VsdCA8PSBpb2gt PnJlc3VsdCkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpb2gtPm9wX2RhdGEucmVhZC5pb3ZfbGVu Z3RoOyBpKyspCiAJCXsKLQkJCXN0cnVjdCBpb3ZlYyAqaW92ID0gJnBnYWlvX2N0bC0+aW92ZWNz W2lvaC0+aW92ZWNfb2ZmXTsKLQkJCWludDMyCQlvbGRfcmVzdWx0ID0gaW9oLT5yZXN1bHQ7Ci0J CQlpbnQzMgkJbmV3X3Jlc3VsdCA9IGlual9pb19lcnJvcl9zdGF0ZS0+c2hvcnRfcmVhZF9yZXN1 bHQ7Ci0JCQlpbnQzMgkJcHJvY2Vzc2VkID0gMDsKLQotCQkJZXJlcG9ydChMT0csCi0JCQkJCWVy cm1zZygic2hvcnQgcmVhZCBpbmplY3QgcG9pbnQsIGNoYW5naW5nIHJlc3VsdCBmcm9tICVkIHRv ICVkIiwKLQkJCQkJCSAgIG9sZF9yZXN1bHQsIG5ld19yZXN1bHQpLAotCQkJCQllcnJoaWRlc3Rt dCh0cnVlKSwgZXJyaGlkZWNvbnRleHQodHJ1ZSkpOwotCi0JCQkvKgotCQkJICogVGhlIHVuZGVy bHlpbmcgSU8gYWN0dWFsbHkgY29tcGxldGVkIE9LLCBhbmQgdGh1cyB0aGUgImludmFsaWQiCi0J CQkgKiBwb3J0aW9uIG9mIHRoZSBJT1YgYWN0dWFsbHkgY29udGFpbnMgdmFsaWQgZGF0YS4gVGhh dCBjYW4gaGlkZQotCQkJICogYSBsb3Qgb2YgcHJvYmxlbXMsIGUuZy4gaWYgd2Ugd2VyZSB0byB3 cm9uZ2x5IG1hcmsgYSBidWZmZXIsCi0JCQkgKiB0aGF0IHdhc24ndCByZWFkIGFjY29yZGluZyB0 byB0aGUgc2hvcnRlbmVkLXJlYWQsIElPIGFzIHZhbGlkLAotCQkJICogdGhlIGNvbnRlbnRzIHdv dWxkIGxvb2sgdmFsaWQgYW5kIHdlIG1pZ2h0IG1pc3MgYSBidWcuCi0JCQkgKgotCQkJICogVG8g YXZvaWQgdGhhdCwgaXRlcmF0ZSB0aHJvdWdoIHRoZSBJT1YgYW5kIHplcm8gb3V0IHRoZQotCQkJ ICogImZhaWxlZCIgcG9ydGlvbiBvZiB0aGUgSU8uCi0JCQkgKi8KLQkJCWZvciAoaW50IGkgPSAw OyBpIDwgaW9oLT5vcF9kYXRhLnJlYWQuaW92X2xlbmd0aDsgaSsrKQorCQkJaWYgKHByb2Nlc3Nl ZCArIGlvdltpXS5pb3ZfbGVuIDw9IG5ld19yZXN1bHQpCisJCQkJcHJvY2Vzc2VkICs9IGlvdltp XS5pb3ZfbGVuOworCQkJZWxzZSBpZiAocHJvY2Vzc2VkIDw9IG5ld19yZXN1bHQpCiAJCQl7Ci0J CQkJaWYgKHByb2Nlc3NlZCArIGlvdltpXS5pb3ZfbGVuIDw9IG5ld19yZXN1bHQpCi0JCQkJCXBy b2Nlc3NlZCArPSBpb3ZbaV0uaW92X2xlbjsKLQkJCQllbHNlIGlmIChwcm9jZXNzZWQgPD0gbmV3 X3Jlc3VsdCkKLQkJCQl7Ci0JCQkJCXVpbnQzMgkJb2tfcGFydCA9IG5ld19yZXN1bHQgLSBwcm9j ZXNzZWQ7Ci0KLQkJCQkJbWVtc2V0KChjaGFyICopIGlvdltpXS5pb3ZfYmFzZSArIG9rX3BhcnQs IDAsIGlvdltpXS5pb3ZfbGVuIC0gb2tfcGFydCk7Ci0JCQkJCXByb2Nlc3NlZCArPSBpb3ZbaV0u aW92X2xlbjsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJbWVtc2V0KChjaGFyICopIGlv dltpXS5pb3ZfYmFzZSwgMCwgaW92W2ldLmlvdl9sZW4pOwotCQkJCX0KLQkJCX0KKwkJCQl1aW50 MzIJCW9rX3BhcnQgPSBuZXdfcmVzdWx0IC0gcHJvY2Vzc2VkOwogCi0JCQlpb2gtPnJlc3VsdCA9 IG5ld19yZXN1bHQ7CisJCQkJbWVtc2V0KChjaGFyICopIGlvdltpXS5pb3ZfYmFzZSArIG9rX3Bh cnQsIDAsIGlvdltpXS5pb3ZfbGVuIC0gb2tfcGFydCk7CisJCQkJcHJvY2Vzc2VkICs9IGlvdltp XS5pb3ZfbGVuOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW1lbXNldCgoY2hhciAqKSBpb3Zb aV0uaW92X2Jhc2UsIDAsIGlvdltpXS5pb3ZfbGVuKTsKKwkJCX0KIAkJfQorCisJCWlvaC0+cmVz dWx0ID0gbmV3X3Jlc3VsdDsKIAl9CiB9CiAKK3ZvaWQKK2lual9pb19jb21wbGV0aW9uX2hvb2so Y29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLCB2b2lkICphcmcpCit7 CisJaW5qX2lvX2NvbXBsZXRpb25fd2FpdF9ob29rKG5hbWUsIHByaXZhdGVfZGF0YSwgYXJnKTsK KwlpbmpfaW9fc2hvcnRfcmVhZF9ob29rKG5hbWUsIHByaXZhdGVfZGF0YSwgYXJnKTsKK30KKwog dm9pZAogaW5qX2lvX3Jlb3Blbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpwcml2YXRl X2RhdGEsIHZvaWQgKmFyZykKIHsKQEAgLTc2Miw2ICs5NzEsMzkgQEAgaW5qX2lvX3Jlb3Blbihj b25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpwcml2YXRlX2RhdGEsIHZvaWQgKmFyZykKIH0K ICNlbmRpZgogCitQR19GVU5DVElPTl9JTkZPX1YxKGlual9pb19jb21wbGV0aW9uX3dhaXQpOwor RGF0dW0KK2lual9pb19jb21wbGV0aW9uX3dhaXQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKyNpZmRl ZiBVU0VfSU5KRUNUSU9OX1BPSU5UUworCWlual9pb19lcnJvcl9zdGF0ZS0+ZW5hYmxlZF9jb21w bGV0aW9uX3dhaXQgPSB0cnVlOworCWlual9pb19lcnJvcl9zdGF0ZS0+Y29tcGxldGlvbl93YWl0 X3BpZCA9CisJCVBHX0FSR0lTTlVMTCgwKSA/IDAgOiBQR19HRVRBUkdfSU5UMzIoMCk7CisJaW5q X2lvX2Vycm9yX3N0YXRlLT5jb21wbGV0aW9uX3dhaXRfcmVsZmlsZW5vZGUgPQorCQlQR19BUkdJ U05VTEwoMSkgPyBJbnZhbGlkT2lkIDogUEdfR0VUQVJHX09JRCgxKTsKKyNlbHNlCisJZWxvZyhF UlJPUiwgImluamVjdGlvbiBwb2ludHMgbm90IHN1cHBvcnRlZCIpOworI2VuZGlmCisKKwlQR19S RVRVUk5fVk9JRCgpOworfQorCitQR19GVU5DVElPTl9JTkZPX1YxKGlual9pb19jb21wbGV0aW9u X2NvbnRpbnVlKTsKK0RhdHVtCitpbmpfaW9fY29tcGxldGlvbl9jb250aW51ZShQR19GVU5DVElP Tl9BUkdTKQoreworI2lmZGVmIFVTRV9JTkpFQ1RJT05fUE9JTlRTCisJaW5qX2lvX2Vycm9yX3N0 YXRlLT5lbmFibGVkX2NvbXBsZXRpb25fd2FpdCA9IGZhbHNlOworCWlual9pb19lcnJvcl9zdGF0 ZS0+Y29tcGxldGlvbl93YWl0X3BpZCA9IDA7CisJaW5qX2lvX2Vycm9yX3N0YXRlLT5jb21wbGV0 aW9uX3dhaXRfcmVsZmlsZW5vZGUgPSBJbnZhbGlkT2lkOworCUNvbmRpdGlvblZhcmlhYmxlQnJv YWRjYXN0KCZpbmpfaW9fZXJyb3Jfc3RhdGUtPmN2KTsKKyNlbHNlCisJZWxvZyhFUlJPUiwgImlu amVjdGlvbiBwb2ludHMgbm90IHN1cHBvcnRlZCIpOworI2VuZGlmCisKKwlQR19SRVRVUk5fVk9J RCgpOworfQorCiBQR19GVU5DVElPTl9JTkZPX1YxKGlual9pb19zaG9ydF9yZWFkX2F0dGFjaCk7 CiBEYXR1bQogaW5qX2lvX3Nob3J0X3JlYWRfYXR0YWNoKFBHX0ZVTkNUSU9OX0FSR1MpCkBAIC03 NzEsNiArMTAxMywxMCBAQCBpbmpfaW9fc2hvcnRfcmVhZF9hdHRhY2goUEdfRlVOQ1RJT05fQVJH UykKIAlpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0X3JlYWRfcmVzdWx0X3NldCA9ICFQR19BUkdJ U05VTEwoMCk7CiAJaWYgKGlual9pb19lcnJvcl9zdGF0ZS0+c2hvcnRfcmVhZF9yZXN1bHRfc2V0 KQogCQlpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0X3JlYWRfcmVzdWx0ID0gUEdfR0VUQVJHX0lO VDMyKDApOworCWlual9pb19lcnJvcl9zdGF0ZS0+c2hvcnRfcmVhZF9waWQgPQorCQlQR19BUkdJ U05VTEwoMSkgPyAwIDogUEdfR0VUQVJHX0lOVDMyKDEpOworCWlual9pb19lcnJvcl9zdGF0ZS0+ c2hvcnRfcmVhZF9yZWxmaWxlbm9kZSA9CisJCVBHX0FSR0lTTlVMTCgyKSA/IDAgOiBQR19HRVRB UkdfT0lEKDIpOwogI2Vsc2UKIAllbG9nKEVSUk9SLCAiaW5qZWN0aW9uIHBvaW50cyBub3Qgc3Vw cG9ydGVkIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMWM4NjEwZmQ0 NmMuLmRiNTgzOTg1ODEzIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzAyLDYgKzMw Miw3IEBAIEJsb2NrU2FtcGxlcgogQmxvY2tTYW1wbGVyRGF0YQogQmxvY2tlZFByb2NEYXRhCiBC bG9ja2VkUHJvY3NEYXRhCitCbG9ja3NSZWFkU3RyZWFtRGF0YQogQmxvY2t0YWJsZUVudHJ5CiBC bG9vbUJ1aWxkU3RhdGUKIEJsb29tRmlsdGVyCi0tIAoyLjQzLjAKCg== --000000000000578f610649147fcb Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0003-fix-test.patch" Content-Disposition: attachment; filename="v3-0003-fix-test.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkrd9yxe2 RnJvbSBlOWUwYmMxYzczZGUwZWRjMjNhMzkxYTU5ZjQ4ZWEzZWU2NGNmNzA3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjA5OjE0IC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MyAzLzVdIGZpeCB0ZXN0CgotLS0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8w MDRfcmVhZF9zdHJlYW0ucGwgfCAxMCArKysrLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNCBpbnNl cnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9haW8vdC8wMDRfcmVhZF9zdHJlYW0ucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlv L3QvMDA0X3JlYWRfc3RyZWFtLnBsCmluZGV4IDg5Y2ZhYmJiMWQzLi42NDU2N2RlMzdjMiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwNF9yZWFkX3N0cmVhbS5wbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDA0X3JlYWRfc3RyZWFtLnBsCkBAIC0y MDUsMTUgKzIwNSwxMyBAQCBTRUxFQ1QgYXJyYXlfYWdnKGJsb2NrbnVtKSBGUk9NIHJlYWRfc3Ry ZWFtX2Zvcl9ibG9ja3MoJ2xhcmdlaXNoJywgQVJSQVlbMCwgMiwgNQogCQkkcHNxbF9hLT57cnVu fSwgJHBzcWxfYS0+e3RpbWVvdXR9LAogCQlcJHBzcWxfYS0+e3N0ZG91dH0sIHFyL1x7MCwyLDUs N1x9Lyk7CiAKLQkkcHNxbF9iLT57cnVufS0+cHVtcF9uYigpOwotCWxpa2UoCi0JCSRwc3FsX2It PntzdGRlcnJ9LAotCQlxci8uKkVSUk9SLipjb3VsZCBub3QgcmVhZCBibG9ja3MgNS4uNS4qJC8s Ci0JCSIkaW9fbWV0aG9kOiBpbmplY3RlZCBlcnJvciBvY2N1cnJlZCIpOworCXB1bXBfdW50aWwo CisJCSRwc3FsX2ItPntydW59LCAkcHNxbF9iLT57dGltZW91dH0sCisJCVwkcHNxbF9iLT57c3Rk ZXJyfSwgcXIvRVJST1IuKmNvdWxkIG5vdCByZWFkIGJsb2NrcyA1XC5cLjUvKTsKKwlvaygxLCAi JGlvX21ldGhvZDogaW5qZWN0ZWQgZXJyb3Igb2NjdXJyZWQiKTsKIAkkcHNxbF9iLT57c3RkZXJy fSA9ICcnOwogCSRwc3FsX2ItPnF1ZXJ5X3NhZmUocXEvU0VMRUNUIGlual9pb19zaG9ydF9yZWFk X2RldGFjaCgpOy8pOwogCi0KIAlvaygxLAogCQlxcS8kaW9fbWV0aG9kOiByZWFkIHN0cmVhbSBl bmNvdW50ZXJzIGZhaWxpbmcgSU8gYnkgYW5vdGhlciBiYWNrZW5kLyk7CiAKLS0gCjIuNDMuMAoK --000000000000578f610649147fcb Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0004-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v3-0004-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkrda1kk3 RnJvbSAyNzY0NTBmZTlmODRjNDA5MTY0Y2JkMGYzMzk3MWEyMjQ2NDRlYjc5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MyA0LzVdIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNlcyBj b3VudCBidWZmZXIgaGl0cywgcmVxdWlyaW5nIHF1aXRlIGEgZmV3IGxpbmVzIG9mCmNvZGUgc2lu Y2Ugd2UgZG8gYWNjb3VudGluZyBpbiBzbyBtYW55IHBsYWNlcy4gRnV0dXJlIGNvbW1pdHMgd2ls bCBhZGQKbW9yZSBsb2NhdGlvbnMsIHNvIHJlZmFjdG9yIGludG8gYSBoZWxwZXIuCi0tLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgfCAxMTEgKysrKysrKysrKysrKystLS0t LS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyksIDU1IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggNmY5MzU2NDhhZTkuLmJh ZDg4OTQwMTFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtNjM4LDYgKzYz OCwxMCBAQCBzdGF0aWMgaW5saW5lIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlv biBzbWdyLAogCQkJCQkJCQkJICBib29sICpmb3VuZFB0ciwgSU9Db250ZXh0IGlvX2NvbnRleHQp Owogc3RhdGljIGJvb2wgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3Bl cmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpOwogc3RhdGljIHZvaWQgQ2hlY2tSZWFkQnVm ZmVyc09wZXJhdGlvbihSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBib29sIGlzX2Nv bXBsZXRlKTsKKworc3RhdGljIHZvaWQgUHJvY2Vzc0J1ZmZlckhpdChCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneSwKKwkJCQkJCQkgUmVsYXRpb24gcmVsLCBjaGFyIHBlcnNpc3RlbmNlLCBT TWdyUmVsYXRpb24gc21nciwKKwkJCQkJCQkgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJl ciBibG9ja251bSk7CiBzdGF0aWMgQnVmZmVyIEdldFZpY3RpbUJ1ZmZlcihCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSwgSU9Db250ZXh0IGlvX2NvbnRleHQpOwogc3RhdGljIHZvaWQgRmx1 c2hVbmxvY2tlZEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuLAogCQkJ CQkJCQlJT09iamVjdCBpb19vYmplY3QsIElPQ29udGV4dCBpb19jb250ZXh0KTsKQEAgLTEyMTYs OCArMTIyMCw2IEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwKIAkJCQkgIGJvb2wg KmZvdW5kUHRyKQogewogCUJ1ZmZlckRlc2MgKmJ1ZkhkcjsKLQlJT0NvbnRleHQJaW9fY29udGV4 dDsKLQlJT09iamVjdAlpb19vYmplY3Q7CiAKIAlBc3NlcnQoYmxvY2tOdW0gIT0gUF9ORVcpOwog CkBAIC0xMjI2LDE3ICsxMjI4LDYgQEAgUGluQnVmZmVyRm9yQmxvY2soUmVsYXRpb24gcmVsLAog CQkJcGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIHx8CiAJCQlwZXJzaXN0 ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCkpOwogCi0JaWYgKHBlcnNpc3RlbmNlID09 IFJFTFBFUlNJU1RFTkNFX1RFTVApCi0JewotCQlpb19jb250ZXh0ID0gSU9DT05URVhUX05PUk1B TDsKLQkJaW9fb2JqZWN0ID0gSU9PQkpFQ1RfVEVNUF9SRUxBVElPTjsKLQl9Ci0JZWxzZQotCXsK LQkJaW9fY29udGV4dCA9IElPQ29udGV4dEZvclN0cmF0ZWd5KHN0cmF0ZWd5KTsKLQkJaW9fb2Jq ZWN0ID0gSU9PQkpFQ1RfUkVMQVRJT047Ci0JfQotCiAJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJf UkVBRF9TVEFSVChmb3JrTnVtLCBibG9ja051bSwKIAkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5zcGNPaWQsCiAJCQkJCQkJCQkgICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IuZGJPaWQsCkBAIC0xMjQ0LDE4ICsxMjM1LDExIEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJl bGF0aW9uIHJlbCwKIAkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCk7CiAK IAlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQl7CiAJCWJ1ZkhkciA9 IExvY2FsQnVmZmVyQWxsb2Moc21nciwgZm9ya051bSwgYmxvY2tOdW0sIGZvdW5kUHRyKTsKLQkJ aWYgKCpmb3VuZFB0cikKLQkJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQrKzsKLQl9CiAJ ZWxzZQotCXsKIAkJYnVmSGRyID0gQnVmZmVyQWxsb2Moc21nciwgcGVyc2lzdGVuY2UsIGZvcmtO dW0sIGJsb2NrTnVtLAotCQkJCQkJCSBzdHJhdGVneSwgZm91bmRQdHIsIGlvX2NvbnRleHQpOwot CQlpZiAoKmZvdW5kUHRyKQotCQkJcGdCdWZmZXJVc2FnZS5zaGFyZWRfYmxrc19oaXQrKzsKLQl9 CisJCQkJCQkJIHN0cmF0ZWd5LCBmb3VuZFB0ciwgSU9Db250ZXh0Rm9yU3RyYXRlZ3koc3RyYXRl Z3kpKTsKKwogCWlmIChyZWwpCiAJewogCQkvKgpAQCAtMTI2NCwyMiArMTI0OCwxMCBAQCBQaW5C dWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJCSAqIHplcm9lZCBpbnN0ZWFkKSwgdGhlIHBl ci1yZWxhdGlvbiBzdGF0cyBhbHdheXMgY291bnQgdGhlbS4KIAkJICovCiAJCXBnc3RhdF9jb3Vu dF9idWZmZXJfcmVhZChyZWwpOwotCQlpZiAoKmZvdW5kUHRyKQotCQkJcGdzdGF0X2NvdW50X2J1 ZmZlcl9oaXQocmVsKTsKIAl9Ci0JaWYgKCpmb3VuZFB0cikKLQl7Ci0JCXBnc3RhdF9jb3VudF9p b19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElPT1BfSElULCAxLCAwKTsKLQkJaWYgKFZhY3V1 bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsK IAotCQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX0RPTkUoZm9ya051bSwgYmxvY2tOdW0s Ci0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJ CQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCSAgc21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCQkgIHNtZ3ItPnNt Z3JfcmxvY2F0b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkgIHRydWUpOwotCX0KKwlpZiAoKmZvdW5k UHRyKQorCQlQcm9jZXNzQnVmZmVySGl0KHN0cmF0ZWd5LCByZWwsIHBlcnNpc3RlbmNlLCBzbWdy LCBmb3JrTnVtLCBibG9ja051bSk7CiAKIAlyZXR1cm4gQnVmZmVyRGVzY3JpcHRvckdldEJ1ZmZl cihidWZIZHIpOwogfQpAQCAtMTY4NSw2ICsxNjU3LDUxIEBAIFJlYWRCdWZmZXJzQ2FuU3RhcnRJ TyhCdWZmZXIgYnVmZmVyLCBib29sIG5vd2FpdCkKIAlyZXR1cm4gUmVhZEJ1ZmZlcnNDYW5TdGFy dElPT25jZShidWZmZXIsIG5vd2FpdCk7CiB9CiAKKy8qCisgKiBXZSB0cmFjayB2YXJpb3VzIHN0 YXRzIHJlbGF0ZWQgdG8gYnVmZmVyIGhpdHMuIEJlY2F1c2UgdGhpcyBpcyBkb25lIGluIGEKKyAq IGZldyBzZXBhcmF0ZSBwbGFjZXMsIHRoaXMgaGVscGVyIGV4aXN0cyBmb3IgY29udmVuaWVuY2Uu CisgKi8KK3N0YXRpYyB2b2lkCitQcm9jZXNzQnVmZmVySGl0KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5LAorCQkJCSBSZWxhdGlvbiByZWwsIGNoYXIgcGVyc2lzdGVuY2UsIFNNZ3JSZWxh dGlvbiBzbWdyLAorCQkJCSBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVt KQoreworCUlPQ29udGV4dAlpb19jb250ZXh0OworCUlPT2JqZWN0CWlvX29iamVjdDsKKworCWlm IChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCXsKKwkJaW9fY29udGV4dCA9 IElPQ09OVEVYVF9OT1JNQUw7CisJCWlvX29iamVjdCA9IElPT0JKRUNUX1RFTVBfUkVMQVRJT047 CisJfQorCWVsc2UKKwl7CisJCWlvX2NvbnRleHQgPSBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJh dGVneSk7CisJCWlvX29iamVjdCA9IElPT0JKRUNUX1JFTEFUSU9OOworCX0KKworCVRSQUNFX1BP U1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShmb3JrbnVtLAorCQkJCQkJCQkJICBibG9ja251bSwK KwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJ CSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICBzbWdyLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Js b2NhdG9yLmJhY2tlbmQsCisJCQkJCQkJCQkgIHRydWUpOworCisJaWYgKHBlcnNpc3RlbmNlID09 IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQgKz0g MTsKKwllbHNlCisJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwlpZiAo cmVsKQorCQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChyZWwpOworCisJcGdzdGF0X2NvdW50X2lv X29wKGlvX29iamVjdCwgaW9fY29udGV4dCwgSU9PUF9ISVQsIDEsIDApOworCisJaWYgKFZhY3V1 bUNvc3RBY3RpdmUpCisJCVZhY3V1bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0Owor fQorCiAvKgogICogSGVscGVyIGZvciBXYWl0UmVhZEJ1ZmZlcnMoKSB0aGF0IHByb2Nlc3NlcyB0 aGUgcmVzdWx0cyBvZiBhIHJlYWR2CiAgKiBvcGVyYXRpb24sIHJhaXNpbmcgYW4gZXJyb3IgaWYg bmVjZXNzYXJ5LgpAQCAtMTk4MCwyNSArMTk5Nyw5IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1 ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCQkgKiBt dXN0IGhhdmUgc3RhcnRlZCBvdXQgYXMgYSBtaXNzIGluIFBpbkJ1ZmZlckZvckJsb2NrKCkuIFRo ZSBvdGhlcgogCQkgKiBiYWNrZW5kIHdpbGwgdHJhY2sgdGhpcyBhcyBhICdyZWFkJy4KIAkJICov Ci0JCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShmb3JrbnVtLCBibG9ja251bSAr IG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdy LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNt Z3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJICBvcGVyYXRp b24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkgIHRydWUpOwotCi0J CWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQotCQkJcGdCdWZmZXJVc2Fn ZS5sb2NhbF9ibGtzX2hpdCArPSAxOwotCQllbHNlCi0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9i bGtzX2hpdCArPSAxOwotCi0JCWlmIChvcGVyYXRpb24tPnJlbCkKLQkJCXBnc3RhdF9jb3VudF9i dWZmZXJfaGl0KG9wZXJhdGlvbi0+cmVsKTsKLQotCQlwZ3N0YXRfY291bnRfaW9fb3AoaW9fb2Jq ZWN0LCBpb19jb250ZXh0LCBJT09QX0hJVCwgMSwgMCk7Ci0KLQkJaWYgKFZhY3V1bUNvc3RBY3Rp dmUpCi0JCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKKwkJUHJvY2Vz c0J1ZmZlckhpdChvcGVyYXRpb24tPnN0cmF0ZWd5LCBvcGVyYXRpb24tPnJlbCwgcGVyc2lzdGVu Y2UsCisJCQkJCQkgb3BlcmF0aW9uLT5zbWdyLCBmb3JrbnVtLAorCQkJCQkJIGJsb2NrbnVtICsg b3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUpOwogCX0KIAllbHNlCiAJewotLSAKMi40My4wCgo= --000000000000578f610649147fcb Content-Type: text/x-patch; charset="UTF-8"; name="v3-0005-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v3-0005-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkrda4714 RnJvbSBmYjliYTZiNjdkZjUwNjBiY2Q3ODhjYmQ3Mjk4ODczNDcxOGM2YTdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MyA1LzVdIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlNRS1W ZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCldoZW4gYSBiYWNrZW5kIGF0dGVtcHRzIHRvIHN0 YXJ0IGEgcmVhZCBvbiBhIGJ1ZmZlciBhbmQgZmluZHMgdGhhdCBJL08KaXMgYWxyZWFkeSBpbiBw cm9ncmVzcywgaXQgcHJldmlvdXNseSB3YWl0ZWQgZm9yIHRoYXQgSS9PIHRvIGNvbXBsZXRlCmJl Zm9yZSBpbml0aWF0aW5nIHJlYWRzIGZvciBhbnkgb3RoZXIgYnVmZmVycy4gQWx0aG91Z2ggdGhl IGJhY2tlbmQgbXVzdApzdGlsbCB3YWl0IGZvciB0aGUgSS9PIHRvIGZpbmlzaCB3aGVuIGxhdGVy IGFjcXVpcmluZyB0aGUgYnVmZmVyLCBpdApzaG91bGQgbm90IG5lZWQgdG8gd2FpdCBhdCByZWFk IHN0YXJ0IHRpbWUuIE90aGVyIGJ1ZmZlcnMgbWF5IGJlCmF2YWlsYWJsZSBmb3IgSS9PLCBhbmQg aW4gc29tZSB3b3JrbG9hZHMgdGhpcyB3YWl0aW5nIHNpZ25pZmljYW50bHkKcmVkdWNlcyBjb25j dXJyZW5jeS4KCkZvciBleGFtcGxlLCBpbmRleCBzY2FucyBtYXkgcmVwZWF0ZWRseSByZXF1ZXN0 IHRoZSBzYW1lIGhlYXAgYmxvY2suIElmCnRoZSBiYWNrZW5kIHdhaXRzIGVhY2ggdGltZSBpdCBl bmNvdW50ZXJzIGFuIGluLXByb2dyZXNzIHJlYWQsIHRoZQphY2Nlc3MgcGF0dGVybiBlZmZlY3Rp dmVseSBkZWdlbmVyYXRlcyBpbnRvIHN5bmNocm9ub3VzIEkvTy4gQnkKaW50cm9kdWNpbmcgdGhl IGNvbmNlcHQgb2YgZm9yZWlnbiBJL08gb3BlcmF0aW9ucywgYSBiYWNrZW5kIGNhbiByZWNvcmQK dGhlIGJ1ZmZlcuKAmXMgd2FpdCByZWZlcmVuY2UgYW5kIGRlZmVyIHdhaXRpbmcgdW50aWwgV2Fp dFJlYWRCdWZmZXJzKCkKd2hlbiBpdCBhY3R1YWxseSBhY3F1aXJlcyB0aGUgYnVmZmVyLgoKSW4g cmFyZSBjYXNlcywgYSBiYWNrZW5kIG1heSBzdGlsbCBuZWVkIHRvIHdhaXQgd2hlbiBzdGFydGlu ZyBhIHJlYWQgaWYKaXQgZW5jb3VudGVycyBhIGJ1ZmZlciBhZnRlciBhbm90aGVyIGJhY2tlbmQg aGFzIHNldCBCTV9JT19JTl9QUk9HUkVTUwpidXQgYmVmb3JlIHRoZSBidWZmZXIgZGVzY3JpcHRv cuKAmXMgd2FpdCByZWZlcmVuY2UgaGFzIGJlZW4gc2V0LiBTdWNoCndpbmRvd3Mgc2hvdWxkIGJl IGJyaWVmIGFuZCB1bmNvbW1vbi4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZt Z3IuYyB8IDQ4MSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zm1nci5oICAgICAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDMyMCBpbnNlcnRpb25zKCspLCAxNjMg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBiYWQ4ODk0 MDExYS4uNTVjNzdlMTBhODEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC0x NjksNiArMTY5LDIxIEBAIHR5cGVkZWYgc3RydWN0IFNNZ3JTb3J0QXJyYXkKIAlTTWdyUmVsYXRp b24gc3JlbDsKIH0gU01nclNvcnRBcnJheTsKIAorCisvKgorICogSW4gQXN5bmNSZWFkQnVmZmVy cygpLCB3aGVuIHByZXBhcmluZyBhIGJ1ZmZlciBmb3IgcmVhZGluZyBhbmQgc2V0dGluZworICog Qk1fSU9fSU5fUFJPR1JFU1MsIHRoZSBidWZmZXIgbWF5IGFscmVhZHkgaGF2ZSBJL08gaW4gcHJv Z3Jlc3Mgb3IgbWF5CisgKiBhbHJlYWR5IGNvbnRhaW4gdGhlIGRlc2lyZWQgYmxvY2suIEFzeW5j UmVhZEJ1ZmZlcnMoKSBtdXN0IGRpc3Rpbmd1aXNoCisgKiBiZXR3ZWVuIHRoZXNlIGNhc2VzIChh bmQgdGhlIGNhc2Ugd2hlcmUgaXQgc2hvdWxkIGluaXRpYXRlIEkvTykgc28gaXQgY2FuCisgKiBt YXJrIGFuIGluLXByb2dyZXNzIGJ1ZmZlciBhcyBmb3JlaWduIEkvTyByYXRoZXIgdGhhbiB3YWl0 aW5nIG9uIGl0LgorICovCit0eXBlZGVmIGVudW0gUHJlcGFyZVJlYWRCdWZmZXJfU3RhdHVzCit7 CisJUkVBRF9CVUZGRVJfQUxSRUFEWV9ET05FLAorCVJFQURfQlVGRkVSX0lOX1BST0dSRVNTLAor CVJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTywKK30gUHJlcGFyZVJlYWRCdWZmZXJfU3RhdHVzOwor CiAvKiBHVUMgdmFyaWFibGVzICovCiBib29sCQl6ZXJvX2RhbWFnZWRfcGFnZXMgPSBmYWxzZTsK IGludAkJCWJnd3JpdGVyX2xydV9tYXhwYWdlcyA9IDEwMDsKQEAgLTE2MTgsNDUgKzE2MzMsNiBA QCBDaGVja1JlYWRCdWZmZXJzT3BlcmF0aW9uKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRp b24sIGJvb2wgaXNfY29tcGxldGUpCiAjZW5kaWYKIH0KIAotLyogaGVscGVyIGZvciBSZWFkQnVm ZmVyc0NhblN0YXJ0SU8oKSwgdG8gYXZvaWQgcmVwZXRpdGlvbiAqLwotc3RhdGljIGlubGluZSBi b29sCi1SZWFkQnVmZmVyc0NhblN0YXJ0SU9PbmNlKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0 KQotewotCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZlcikpCi0JCXJldHVybiBTdGFydExvY2FsQnVm ZmVySU8oR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKSwKLQkJCQkJCQkJICB0 cnVlLCBub3dhaXQpOwotCWVsc2UKLQkJcmV0dXJuIFN0YXJ0QnVmZmVySU8oR2V0QnVmZmVyRGVz Y3JpcHRvcihidWZmZXIgLSAxKSwgdHJ1ZSwgbm93YWl0KTsKLX0KLQotLyoKLSAqIEhlbHBlciBm b3IgQXN5bmNSZWFkQnVmZmVycyB0aGF0IHRyaWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZv ciBJTy4KLSAqLwotc3RhdGljIGlubGluZSBib29sCi1SZWFkQnVmZmVyc0NhblN0YXJ0SU8oQnVm ZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCi17Ci0JLyoKLQkgKiBJZiB0aGlzIGJhY2tlbmQgY3Vy cmVudGx5IGhhcyBzdGFnZWQgSU8sIHdlIG5lZWQgdG8gc3VibWl0IHRoZSBwZW5kaW5nCi0JICog SU8gYmVmb3JlIHdhaXRpbmcgZm9yIHRoZSByaWdodCB0byBpc3N1ZSBJTywgdG8gYXZvaWQgdGhl IHBvdGVudGlhbCBmb3IKLQkgKiBkZWFkbG9ja3MgKGFuZCwgbW9yZSBjb21tb25seSwgdW5uZWNl c3NhcnkgZGVsYXlzIGZvciBvdGhlciBiYWNrZW5kcykuCi0JICovCi0JaWYgKCFub3dhaXQgJiYg cGdhaW9faGF2ZV9zdGFnZWQoKSkKLQl7Ci0JCWlmIChSZWFkQnVmZmVyc0NhblN0YXJ0SU9PbmNl KGJ1ZmZlciwgdHJ1ZSkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQkvKgotCQkgKiBVbmZvcnR1bmF0 ZWx5IFN0YXJ0QnVmZmVySU8oKSByZXR1cm5pbmcgZmFsc2UgZG9lc24ndCBhbGxvdyB0bwotCQkg KiBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBidWZmZXIgYWxyZWFkeSBiZWluZyB2YWxpZCBhbmQg SU8gYWxyZWFkeQotCQkgKiBiZWluZyBpbiBwcm9ncmVzcy4gU2luY2UgSU8gYWxyZWFkeSBiZWlu ZyBpbiBwcm9ncmVzcyBpcyBxdWl0ZQotCQkgKiByYXJlLCB0aGlzIGFwcHJvYWNoIHNlZW1zIGZp bmUuCi0JCSAqLwotCQlwZ2Fpb19zdWJtaXRfc3RhZ2VkKCk7Ci0JfQotCi0JcmV0dXJuIFJlYWRC dWZmZXJzQ2FuU3RhcnRJT09uY2UoYnVmZmVyLCBub3dhaXQpOwotfQotCiAvKgogICogV2UgdHJh Y2sgdmFyaW91cyBzdGF0cyByZWxhdGVkIHRvIGJ1ZmZlciBoaXRzLiBCZWNhdXNlIHRoaXMgaXMg ZG9uZSBpbiBhCiAgKiBmZXcgc2VwYXJhdGUgcGxhY2VzLCB0aGlzIGhlbHBlciBleGlzdHMgZm9y IGNvbnZlbmllbmNlLgpAQCAtMTgwNiw3ICsxNzgyLDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRC dWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJCQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sg aWYgd2UgYWxyZWFkeSBrbm93IHRoZSBJTyBpcyBjb21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFp b19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9fUlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVy YXRpb24tPmZvcmVpZ25faW8gfHwgYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19V TktOT1dOKSAmJgogCQkJCSFwZ2Fpb193cmVmX2NoZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3Jl ZikpCiAJCQl7CiAJCQkJaW5zdHJfdGltZQlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3Rp bWUodHJhY2tfaW9fdGltaW5nKTsKQEAgLTE4MjUsMTEgKzE4MDEsMzMgQEAgV2FpdFJlYWRCdWZm ZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dy ZWZfY2hlY2tfZG9uZSgmb3BlcmF0aW9uLT5pb193cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkg KiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRo aXMKLQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnku Ci0JCQkgKi8KLQkJCVByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYg KHVubGlrZWx5KG9wZXJhdGlvbi0+Zm9yZWlnbl9pbykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZm ZXIgPSBvcGVyYXRpb24tPmJ1ZmZlcnNbb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1 ZmZlckRlc2MgKmRlc2MgPSBCdWZmZXJJc0xvY2FsKGJ1ZmZlcikgPworCQkJCQlHZXRMb2NhbEJ1 ZmZlckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpIDoKKwkJCQkJR2V0QnVmZmVyRGVzY3JpcHRvcihi dWZmZXIgLSAxKTsKKwkJCQl1aW50MzIJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3U2NCgm ZGVzYy0+c3RhdGUpOworCisJCQkJaWYgKGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEKQorCQkJCXsKKwkJ CQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsKKwkJCQkJQXNzZXJ0KG9wZXJhdGlvbi0+ bmJsb2Nrc19kb25lIDw9IG9wZXJhdGlvbi0+bmJsb2Nrcyk7CisKKwkJCQkJUHJvY2Vzc0J1ZmZl ckhpdChvcGVyYXRpb24tPnN0cmF0ZWd5LAorCQkJCQkJCQkJIG9wZXJhdGlvbi0+cmVsLCBvcGVy YXRpb24tPnBlcnNpc3RlbmNlLAorCQkJCQkJCQkJIG9wZXJhdGlvbi0+c21nciwgb3BlcmF0aW9u LT5mb3JrbnVtLAorCQkJCQkJCQkJIG9wZXJhdGlvbi0+YmxvY2tudW0gKyBvcGVyYXRpb24tPm5i bG9ja3NfZG9uZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICog V2Ugbm93IGFyZSBzdXJlIHRoZSBJTyBjb21wbGV0ZWQuIENoZWNrIHRoZSByZXN1bHRzLiBUaGlz CisJCQkJICogaW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVyZSB3ZXJlIGFueS4K KwkJCQkgKi8KKwkJCQlQcm9jZXNzUmVhZEJ1ZmZlcnNSZXN1bHQob3BlcmF0aW9uKTsKKwkJCX0K IAkJfQogCiAJCS8qCkBAIC0xODYwLDYgKzE4NTgsMTU5IEBAIFdhaXRSZWFkQnVmZmVycyhSZWFk QnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCS8qIE5COiBSRUFEX0RPTkUgdHJhY2Vwb2lu dCB3YXMgYWxyZWFkeSBleGVjdXRlZCBpbiBjb21wbGV0aW9uIGNhbGxiYWNrICovCiB9CiAKKy8q CisgKiBMb2NhbCB2ZXJzaW9uIG9mIFByZXBhcmVOZXdSZWFkQnVmZmVySU8oKS4gSGVyZSBpbnN0 ZWFkIG9mIGxvY2FsYnVmLmMgdG8KKyAqIGF2b2lkIGFuIGV4dGVybmFsIGZ1bmN0aW9uIGNhbGwu CisgKi8KK3N0YXRpYyBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK1ByZXBhcmVOZXdMb2NhbFJl YWRCdWZmZXJJTyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAorCQkJCQkJCUJ1ZmZl ciBidWZmZXIpCit7CisJQnVmZmVyRGVzYyAqZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRv cigtYnVmZmVyIC0gMSk7CisJdWludDY0CQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQo JmRlc2MtPnN0YXRlKTsKKworCS8qIEFscmVhZHkgdmFsaWQsIG5vIHdvcmsgdG8gZG8gKi8KKwlp ZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQpCisJeworCQlwZ2Fpb193cmVmX2NsZWFyKCZvcGVyYXRp b24tPmlvX3dyZWYpOworCQlyZXR1cm4gUkVBRF9CVUZGRVJfQUxSRUFEWV9ET05FOworCX0KKwor CXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKKworCWlmIChwZ2Fpb193cmVmX3ZhbGlkKCZkZXNjLT5p b193cmVmKSkKKwl7CisJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGRlc2MtPmlvX3dyZWY7CisJCW9w ZXJhdGlvbi0+Zm9yZWlnbl9pbyA9IHRydWU7CisJCXJldHVybiBSRUFEX0JVRkZFUl9JTl9QUk9H UkVTUzsKKwl9CisKKwlyZXR1cm4gUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPOworfQorCisvKgor ICogVHJ5IHRvIHN0YXJ0IElPIG9uIHRoZSBmaXJzdCBidWZmZXIgaW4gYSBuZXcgcnVuIG9mIGJs b2Nrcy4gSWYgQUlPIGlzIGluCisgKiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9y IGFub3RoZXIgYmFja2VuZCwgd2UganVzdCBhc3NvY2lhdGUgdGhlCisgKiB3YWl0IHJlZmVyZW5j ZSB3aXRoIHRoZSBvcGVyYXRpb24gYW5kIHdhaXQgaW4gV2FpdFJlYWRCdWZmZXJzKCkuIFRoaXMg dHVybnMKKyAqIG91dCB0byBiZSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlIGluIHR3byB3b3Jr bG9hZHM6CisgKgorICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFkIHRoZSBzYW1l IGJsb2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbiB0aGUKKyAqICAgIHJlYWRhaGVhZCBkaXN0YW5j ZS4gVGhpcyBjYW4gaGFwcGVuIGUuZy4gZm9yIHRoZSB0YWJsZSBhY2Nlc3NlcyBvZiBhbgorICog ICAgaW5kZXggc2Nhbi4KKyAqCisgKiAyKSBDb25jdXJyZW50IHNjYW5zIGJ5IG11bHRpcGxlIGJh Y2tlbmRzIG9uIHRoZSBzYW1lIHJlbGF0aW9uLgorICoKKyAqIElmIHdlIHdlcmUgdG8gc3luY2hy b25vdXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJlIGFibGUKKyAq IHRvIGtlZXAgZW5vdWdoIEkvTyBpbiBmbGlnaHQuCisgKgorICogSWYgd2UgZG8gZmluZCB0aGVy ZSBpcyBvbmdvaW5nIEkvTyBmb3IgdGhlIGJ1ZmZlciwgd2Ugc2V0IHVwIGEgMS1ibG9jaworICog UmVhZEJ1ZmZlcnNPcGVyYXRpb24gdGhhdCBXYWl0UmVhZEJ1ZmZlcnMgdGhlbiBjYW4gd2FpdCBv bi4KKyAqCisgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYWNrZW5kIGhhcyBzdGFydGVk IElPIG9uIHRoZSBidWZmZXIgYnV0IG5vdCB5ZXQKKyAqIHNldCBpdHMgd2FpdCByZWZlcmVuY2Uu IEluIHRoaXMgY2FzZSwgd2UgaGF2ZSBubyBjaG9pY2UgYnV0IHRvIHdhaXQgZm9yCisgKiBlaXRo ZXIgdGhlIHdhaXQgcmVmZXJlbmNlIHRvIGJlIHZhbGlkIG9yIHRoZSBJTyB0byBiZSBkb25lLgor ICovCitzdGF0aWMgUHJlcGFyZVJlYWRCdWZmZXJfU3RhdHVzCitQcmVwYXJlTmV3UmVhZEJ1ZmZl cklPKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCisJCQkJCSAgIEJ1ZmZlciBidWZm ZXIpCit7CisJdWludDY0CQlidWZfc3RhdGU7CisJQnVmZmVyRGVzYyAqZGVzYzsKKworCWlmIChC dWZmZXJJc0xvY2FsKGJ1ZmZlcikpCisJCXJldHVybiBQcmVwYXJlTmV3TG9jYWxSZWFkQnVmZmVy SU8ob3BlcmF0aW9uLCBidWZmZXIpOworCisJUmVzb3VyY2VPd25lckVubGFyZ2UoQ3VycmVudFJl c291cmNlT3duZXIpOworCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOwor CisJZm9yICg7OykKKwl7CisJCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoZGVzYyk7CisKKwkJLyog QWxyZWFkeSB2YWxpZCwgbm8gd29yayB0byBkbyAqLworCQlpZiAoYnVmX3N0YXRlICYgQk1fVkFM SUQpCisJCXsKKwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXBnYWlvX3dyZWZfY2xlYXIoJm9w ZXJhdGlvbi0+aW9fd3JlZik7CisJCQlyZXR1cm4gUkVBRF9CVUZGRVJfQUxSRUFEWV9ET05FOwor CQl9CisKKwkJaWYgKGJ1Zl9zdGF0ZSAmIEJNX0lPX0lOX1BST0dSRVNTKQorCQl7CisJCQkvKiBK b2luIGV4aXN0aW5nIHJlYWQgKi8KKwkJCWlmIChwZ2Fpb193cmVmX3ZhbGlkKCZkZXNjLT5pb193 cmVmKSkKKwkJCXsKKwkJCQlvcGVyYXRpb24tPmlvX3dyZWYgPSBkZXNjLT5pb193cmVmOworCQkJ CW9wZXJhdGlvbi0+Zm9yZWlnbl9pbyA9IHRydWU7CisJCQkJVW5sb2NrQnVmSGRyKGRlc2MpOwor CQkJCXJldHVybiBSRUFEX0JVRkZFUl9JTl9QUk9HUkVTUzsKKwkJCX0KKworCQkJLyoKKwkJCSAq IElmIHRoZSB3YWl0IHJlZiBpcyBub3QgdmFsaWQgYnV0IHRoZSBJTyBpcyBpbiBwcm9ncmVzcywg c29tZW9uZQorCQkJICogZWxzZSBzdGFydGVkIElPIGJ1dCBoYXNuJ3Qgc2V0IHRoZSB3YWl0IHJl ZiB5ZXQuIFdlIGhhdmUgbm8KKwkJCSAqIGNob2ljZSBidXQgdG8gd2FpdCB1bnRpbCB0aGUgd2Fp dCByZWYgaXMgc2V0IG9yIHRoZSBJTworCQkJICogY29tcGxldGVzLgorCQkJICovCisJCQlVbmxv Y2tCdWZIZHIoZGVzYyk7CisJCQlwZ2Fpb19zdWJtaXRfc3RhZ2VkKCk7CisJCQlXYWl0SU8oZGVz Yyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIE5vIElPIGluIHByb2dyZXNzIGFu ZCBub3QgYWxyZWFkeSB2YWxpZDsgV2Ugd2lsbCBzdGFydCBJTy4gSXQncworCQkgKiBwb3NzaWJs ZSB0aGF0IHRoZSBJTyB3YXMgaW4gcHJvZ3Jlc3MgYW5kIG5ldmVyIGJlY2FtZSB2YWxpZCBiZWNh dXNlCisJCSAqIHRoZSBJTyBlcnJvcmVkIG91dC4gV2UnbGwgZG8gdGhlIElPIG91cnNlbHZlcy4K KwkJICovCisJCVVubG9ja0J1ZkhkckV4dChkZXNjLCBidWZfc3RhdGUsIEJNX0lPX0lOX1BST0dS RVNTLCAwLCAwKTsKKwkJUmVzb3VyY2VPd25lclJlbWVtYmVyQnVmZmVySU8oQ3VycmVudFJlc291 cmNlT3duZXIsCisJCQkJCQkJCQkgIEJ1ZmZlckRlc2NyaXB0b3JHZXRCdWZmZXIoZGVzYykpOwor CisJCXJldHVybiBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU87CisJfQorfQorCisKKy8qCisgKiBX aGVuIGJ1aWxkaW5nIGEgbmV3IElPIGZyb20gbXVsdGlwbGUgYnVmZmVycywgd2Ugd29uJ3QgaW5j bHVkZSBidWZmZXJzCisgKiB0aGF0IGFyZSBhbHJlYWR5IHZhbGlkIG9yIGFscmVhZHkgaW4gcHJv Z3Jlc3MuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUKKyAqIHVzZWQgZm9yIGFkZGl0aW9u YWwgYWRqYWNlbnQgYnVmZmVycyBmb2xsb3dpbmcgdGhlIGhlYWQgYnVmZmVyIGluIGEgbmV3IElP LgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIHdhcyBzdWNjZXNzZnVsbHkgcHJl cGFyZWQgZm9yIElPIGFuZCBmYWxzZSBpZiBpdAorICogaXMgcmVqZWN0ZWQgYW5kIHRoZSByZWFk IElPIHNob3VsZCBub3QgaW5jbHVkZSB0aGlzIGJ1ZmZlci4KKyovCitzdGF0aWMgYm9vbAorUHJl cGFyZUFkZGl0aW9uYWxSZWFkQnVmZmVyKEJ1ZmZlciBidWZmZXIpCit7CisJdWludDY0CQlidWZf c3RhdGU7CisJQnVmZmVyRGVzYyAqZGVzYzsKKworCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZlcikp CisJeworCQlkZXNjID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwkJ YnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTY0KCZkZXNjLT5zdGF0ZSk7CisJCS8qIExvY2Fs IGJ1ZmZlcnMgZG9uJ3QgdXNlIEJNX0lPX0lOX1BST0dSRVNTICovCisJCWlmIChidWZfc3RhdGUg JiBCTV9WQUxJRCB8fCBwZ2Fpb193cmVmX3ZhbGlkKCZkZXNjLT5pb193cmVmKSkKKwkJCXJldHVy biBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJUmVzb3VyY2VPd25lckVubGFyZ2UoQ3VycmVudFJl c291cmNlT3duZXIpOworCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsK KwkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJaWYgKGJ1Zl9zdGF0ZSAmIChCTV9W QUxJRCB8IEJNX0lPX0lOX1BST0dSRVNTKSkKKwkJeworCQkJVW5sb2NrQnVmSGRyKGRlc2MpOwor CQkJcmV0dXJuIGZhbHNlOworCQl9CisJCVVubG9ja0J1ZkhkckV4dChkZXNjLCBidWZfc3RhdGUs IEJNX0lPX0lOX1BST0dSRVNTLCAwLCAwKTsKKwkJUmVzb3VyY2VPd25lclJlbWVtYmVyQnVmZmVy SU8oQ3VycmVudFJlc291cmNlT3duZXIsIGJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CisKIC8qCiAgKiBJbml0aWF0ZSBJTyBmb3IgdGhlIFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAgKgpA QCAtMTg5Myw3ICsyMDQ0LDc1IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRp b24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCXZvaWQJICAgKmlvX3BhZ2Vz W01BWF9JT19DT01CSU5FX0xJTUlUXTsKIAlJT0NvbnRleHQJaW9fY29udGV4dDsKIAlJT09iamVj dAlpb19vYmplY3Q7Ci0JYm9vbAkJZGlkX3N0YXJ0X2lvOworCWluc3RyX3RpbWUJaW9fc3RhcnQ7 CisJUHJlcGFyZVJlYWRCdWZmZXJfU3RhdHVzIHN0YXR1czsKKworCS8qCisJICogV2UgbXVzdCBn ZXQgYW4gSU8gaGFuZGxlIGJlZm9yZSBTdGFydE5ld0J1ZmZlclJlYWRJTygpLCBhcworCSAqIHBn YWlvX2lvX2FjcXVpcmUoKSBtaWdodCBibG9jaywgd2hpY2ggd2UgZG9uJ3Qgd2FudCBhZnRlciBz ZXR0aW5nCisJICogSU9fSU5fUFJPR1JFU1MuIElmIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhlIElP LCB3ZSdsbCByZWxlYXNlIHRoZQorCSAqIGhhbmRsZS4KKwkgKgorCSAqIElmIHdlIG5lZWQgdG8g d2FpdCBmb3IgSU8gYmVmb3JlIHdlIGNhbiBnZXQgYSBoYW5kbGUsIHN1Ym1pdAorCSAqIGFscmVh ZHktc3RhZ2VkIElPIGZpcnN0LCBzbyB0aGF0IG90aGVyIGJhY2tlbmRzIGRvbid0IG5lZWQgdG8g d2FpdC4KKwkgKiBUaGVyZSB3b3VsZG4ndCBiZSBhIGRlYWRsb2NrIHJpc2ssIGFzIHBnYWlvX2lv X2FjcXVpcmUoKSBqdXN0IG5lZWRzIHRvCisJICogd2FpdCBmb3IgYWxyZWFkeSBzdWJtaXR0ZWQg SU8sIHdoaWNoIGRvZXNuJ3QgcmVxdWlyZSBhZGRpdGlvbmFsIGxvY2tzLAorCSAqIGJ1dCBpdCBj b3VsZCBzdGlsbCBjYXVzZSB1bmRlc2lyYWJsZSB3YWl0cy4KKwkgKgorCSAqIEEgc2Vjb25kYXJ5 IGJlbmVmaXQgaXMgdGhhdCB0aGlzIHdvdWxkIGFsbG93IHVzIHRvIG1lYXN1cmUgdGhlIHRpbWUg aW4KKwkgKiBwZ2Fpb19pb19hY3F1aXJlKCkgd2l0aG91dCBjYXVzaW5nIHVuZHVlIHRpbWVyIG92 ZXJoZWFkIGluIHRoZSBjb21tb24sCisJICogbm9uLWJsb2NraW5nLCBjYXNlLiAgSG93ZXZlciwg Y3VycmVudGx5IHRoZSBwZ3N0YXRzIGluZnJhc3RydWN0dXJlCisJICogZG9lc24ndCByZWFsbHkg YWxsb3cgdGhhdCwgYXMgaXQgYSkgYXNzZXJ0cyB0aGF0IGFuIG9wZXJhdGlvbiBjYW4ndAorCSAq IGhhdmUgdGltZSB3aXRob3V0IG9wZXJhdGlvbnMgYikgZG9lc24ndCBoYXZlIGFuIEFQSSB0byBy ZXBvcnQKKwkgKiAiYWNjdW11bGF0ZWQiIHRpbWUuCisJICovCisJaW9oID0gcGdhaW9faW9fYWNx dWlyZV9uYihDdXJyZW50UmVzb3VyY2VPd25lciwgJm9wZXJhdGlvbi0+aW9fcmV0dXJuKTsKKwlp ZiAodW5saWtlbHkoIWlvaCkpCisJeworCQlwZ2Fpb19zdWJtaXRfc3RhZ2VkKCk7CisJCWlvaCA9 IHBnYWlvX2lvX2FjcXVpcmUoQ3VycmVudFJlc291cmNlT3duZXIsICZvcGVyYXRpb24tPmlvX3Jl dHVybik7CisJfQorCisJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisKKwkvKiBDaGVj ayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQgYnVmZmVyICovCisJ aWYgKChzdGF0dXMgPSBQcmVwYXJlTmV3UmVhZEJ1ZmZlcklPKG9wZXJhdGlvbiwgYnVmZmVyc1tu YmxvY2tzX2RvbmVdKSkgPAorCQlSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU8pCisJeworCQlwZ2Fp b19pb19yZWxlYXNlKGlvaCk7CisJCSpuYmxvY2tzX3Byb2dyZXNzID0gMTsKKwkJaWYgKHN0YXR1 cyA9PSBSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkUpCisJCXsKKwkJCS8qCisJCQkgKiBTb21lb25l IGVsc2UgaGFzIGFscmVhZHkgY29tcGxldGVkIHRoaXMgYmxvY2ssIHdlJ3JlIGRvbmUuCisJCQkg KgorCQkJICogV2hlbiBJTyBpcyBuZWNlc3NhcnksIC0+bmJsb2Nrc19kb25lIGlzIHVwZGF0ZWQg aW4KKwkJCSAqIFByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdCgpLCBidXQgdGhhdCBpcyBub3QgY2Fs bGVkIGlmIG5vIElPIGlzCisJCQkgKiBuZWNlc3NhcnkuIFRodXMgdXBkYXRlIGhlcmUuCisJCQkg Ki8KKwkJCW9wZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQlBc3NlcnQob3BlcmF0aW9u LT5uYmxvY2tzX2RvbmUgPD0gb3BlcmF0aW9uLT5uYmxvY2tzKTsKKworCQkJLyoKKwkJCSAqIFJl cG9ydCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4gdGhv dWdoCisJCQkgKiBpdCBtdXN0IGhhdmUgc3RhcnRlZCBvdXQgYXMgYSBtaXNzIGluIFBpbkJ1ZmZl ckZvckJsb2NrKCkuIFRoZQorCQkJICogb3RoZXIgYmFja2VuZCB3aWxsIHRyYWNrIHRoaXMgYXMg YSAncmVhZCcuCisJCQkgKi8KKwkJCVByb2Nlc3NCdWZmZXJIaXQob3BlcmF0aW9uLT5zdHJhdGVn eSwKKwkJCQkJCQkgb3BlcmF0aW9uLT5yZWwsIG9wZXJhdGlvbi0+cGVyc2lzdGVuY2UsCisJCQkJ CQkJIG9wZXJhdGlvbi0+c21nciwgb3BlcmF0aW9uLT5mb3JrbnVtLAorCQkJCQkJCSBvcGVyYXRp b24tPmJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUpOworCQkJcmV0dXJuIGZhbHNl OworCQl9CisKKwkJLyogVGhlIElPIGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgKi8KKwkJQXNzZXJ0 KHN0YXR1cyA9PSBSRUFEX0JVRkZFUl9JTl9QUk9HUkVTUyk7CisJCUNoZWNrUmVhZEJ1ZmZlcnNP cGVyYXRpb24ob3BlcmF0aW9uLCBmYWxzZSk7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qIFdl IGNhbiByZWFkIGluIGF0IGxlYXN0IHRoZSBoZWFkIGJ1ZmZlciAuICovCisJQXNzZXJ0KHN0YXR1 cyA9PSBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU8pOwogCiAJLyoKIAkgKiBXaGVuIHRoaXMgSU8g aXMgZXhlY3V0ZWQgc3luY2hyb25vdXNseSwgZWl0aGVyIGJlY2F1c2UgdGhlIGNhbGxlciB3aWxs CkBAIC0xOTQ0LDEzOCArMjE2Myw3NCBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3Bl cmF0aW9uICpvcGVyYXRpb24sIGludCAqbmJsb2Nrc19wcm9ncmVzcykKIAkgKi8KIAlwZ3N0YXRf cHJlcGFyZV9yZXBvcnRfY2hlY2tzdW1fZmFpbHVyZShvcGVyYXRpb24tPnNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5kYk9pZCk7CiAKLQkvKgotCSAqIEdldCBJTyBoYW5kbGUgYmVmb3JlIFJl YWRCdWZmZXJzQ2FuU3RhcnRJTygpLCBhcyBwZ2Fpb19pb19hY3F1aXJlKCkKLQkgKiBtaWdodCBi bG9jaywgd2hpY2ggd2UgZG9uJ3Qgd2FudCBhZnRlciBzZXR0aW5nIElPX0lOX1BST0dSRVNTLgot CSAqCi0JICogSWYgd2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZvcmUgd2UgY2FuIGdldCBhIGhh bmRsZSwgc3VibWl0Ci0JICogYWxyZWFkeS1zdGFnZWQgSU8gZmlyc3QsIHNvIHRoYXQgb3RoZXIg YmFja2VuZHMgZG9uJ3QgbmVlZCB0byB3YWl0LgotCSAqIFRoZXJlIHdvdWxkbid0IGJlIGEgZGVh ZGxvY2sgcmlzaywgYXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3QgbmVlZHMgdG8KLQkgKiB3YWl0 IGZvciBhbHJlYWR5IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFkZGl0aW9u YWwgbG9ja3MsCi0JICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNlIHVuZGVzaXJhYmxlIHdhaXRz LgotCSAqCi0JICogQSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd291bGQgYWxsb3cg dXMgdG8gbWVhc3VyZSB0aGUgdGltZSBpbgotCSAqIHBnYWlvX2lvX2FjcXVpcmUoKSB3aXRob3V0 IGNhdXNpbmcgdW5kdWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiwKLQkgKiBub24tYmxv Y2tpbmcsIGNhc2UuICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBnc3RhdHMgaW5mcmFzdHJ1Y3R1 cmUKLQkgKiBkb2Vzbid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBpdCBhKSBhc3NlcnRzIHRoYXQg YW4gb3BlcmF0aW9uIGNhbid0Ci0JICogaGF2ZSB0aW1lIHdpdGhvdXQgb3BlcmF0aW9ucyBiKSBk b2Vzbid0IGhhdmUgYW4gQVBJIHRvIHJlcG9ydAotCSAqICJhY2N1bXVsYXRlZCIgdGltZS4KLQkg Ki8KLQlpb2ggPSBwZ2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3Bl cmF0aW9uLT5pb19yZXR1cm4pOwotCWlmICh1bmxpa2VseSghaW9oKSkKLQl7Ci0JCXBnYWlvX3N1 Ym1pdF9zdGFnZWQoKTsKLQotCQlpb2ggPSBwZ2Fpb19pb19hY3F1aXJlKEN1cnJlbnRSZXNvdXJj ZU93bmVyLCAmb3BlcmF0aW9uLT5pb19yZXR1cm4pOwotCX0KKwlBc3NlcnQoaW9fYnVmZmVyc1sw XSA9PSBidWZmZXJzW25ibG9ja3NfZG9uZV0pOworCWlvX3BhZ2VzWzBdID0gQnVmZmVyR2V0Qmxv Y2soYnVmZmVyc1tuYmxvY2tzX2RvbmVdKTsKKwlpb19idWZmZXJzX2xlbiA9IDE7CiAKIAkvKgot CSAqIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVhZCBidWZm ZXIuCi0JICoKLQkgKiBJZiBhbiBJL08gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBpbiBhbm90aGVy IGJhY2tlbmQsIHdlIHdhbnQgdG8gd2FpdAotCSAqIGZvciB0aGUgb3V0Y29tZTogZWl0aGVyIGRv bmUsIG9yIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSB3aWxsCi0JICogcmV0cnkuCisJICog SG93IG1hbnkgbmVpZ2hib3Jpbmctb24tZGlzayBibG9ja3MgY2FuIHdlIHNjYXR0ZXItcmVhZCBp bnRvIG90aGVyCisJICogYnVmZmVycyBhdCB0aGUgc2FtZSB0aW1lPyAgSW4gdGhpcyBjYXNlIHdl IGRvbid0IHdhaXQgaWYgd2Ugc2VlIGFuIEkvTworCSAqIGFscmVhZHkgaW4gcHJvZ3Jlc3MuICBX ZSBhbHJlYWR5IHNldCBCTV9JT19JTl9QUk9HUkVTUyBmb3IgdGhlIGhlYWQKKwkgKiBibG9jaywg c28gd2Ugc2hvdWxkIGdldCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNvb24gYXMgcG9zc2libGUuCiAJ ICovCi0JaWYgKCFSZWFkQnVmZmVyc0NhblN0YXJ0SU8oYnVmZmVyc1tuYmxvY2tzX2RvbmVdLCBm YWxzZSkpCisJZm9yIChpbnQgaSA9IG5ibG9ja3NfZG9uZSArIDE7IGkgPCBvcGVyYXRpb24tPm5i bG9ja3M7IGkrKykKIAl7Ci0JCS8qCi0JCSAqIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBjb21w bGV0ZWQgdGhpcyBibG9jaywgd2UncmUgZG9uZS4KLQkJICoKLQkJICogV2hlbiBJTyBpcyBuZWNl c3NhcnksIC0+bmJsb2Nrc19kb25lIGlzIHVwZGF0ZWQgaW4KLQkJICogUHJvY2Vzc1JlYWRCdWZm ZXJzUmVzdWx0KCksIGJ1dCB0aGF0IGlzIG5vdCBjYWxsZWQgaWYgbm8gSU8gaXMKLQkJICogbmVj ZXNzYXJ5LiBUaHVzIHVwZGF0ZSBoZXJlLgotCQkgKi8KLQkJb3BlcmF0aW9uLT5uYmxvY2tzX2Rv bmUgKz0gMTsKLQkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOwotCi0JCXBnYWlvX2lvX3JlbGVhc2Uo aW9oKTsKLQkJcGdhaW9fd3JlZl9jbGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKLQkJZGlkX3N0 YXJ0X2lvID0gZmFsc2U7CisJCWlmICghUHJlcGFyZUFkZGl0aW9uYWxSZWFkQnVmZmVyKGJ1ZmZl cnNbaV0pKQorCQkJYnJlYWs7CisJCS8qIE11c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVy cy4gKi8KKwkJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFdKSA9PQor CQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmZmVyc1tpXSkgLSAxKTsKKwkJQXNzZXJ0KGlv X2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09IGJ1ZmZlcnNbaV0pOwogCi0JCS8qCi0JCSAqIFJl cG9ydCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4gdGhv dWdoIGl0Ci0JCSAqIG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4gUGluQnVmZmVy Rm9yQmxvY2soKS4gVGhlIG90aGVyCi0JCSAqIGJhY2tlbmQgd2lsbCB0cmFjayB0aGlzIGFzIGEg J3JlYWQnLgotCQkgKi8KLQkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRpb24tPnN0cmF0ZWd5LCBv cGVyYXRpb24tPnJlbCwgcGVyc2lzdGVuY2UsCi0JCQkJCQkgb3BlcmF0aW9uLT5zbWdyLCBmb3Jr bnVtLAotCQkJCQkJIGJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUpOworCQlpb19w YWdlc1tpb19idWZmZXJzX2xlbisrXSA9IEJ1ZmZlckdldEJsb2NrKGJ1ZmZlcnNbaV0pOwogCX0K LQllbHNlCi0JewotCQlpbnN0cl90aW1lCWlvX3N0YXJ0OwotCi0JCS8qIFdlIGZvdW5kIGEgYnVm ZmVyIHRoYXQgd2UgbmVlZCB0byByZWFkIGluLiAqLwotCQlBc3NlcnQoaW9fYnVmZmVyc1swXSA9 PSBidWZmZXJzW25ibG9ja3NfZG9uZV0pOwotCQlpb19wYWdlc1swXSA9IEJ1ZmZlckdldEJsb2Nr KGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSk7Ci0JCWlvX2J1ZmZlcnNfbGVuID0gMTsKLQotCQkvKgot CQkgKiBIb3cgbWFueSBuZWlnaGJvcmluZy1vbi1kaXNrIGJsb2NrcyBjYW4gd2Ugc2NhdHRlci1y ZWFkIGludG8gb3RoZXIKLQkJICogYnVmZmVycyBhdCB0aGUgc2FtZSB0aW1lPyAgSW4gdGhpcyBj YXNlIHdlIGRvbid0IHdhaXQgaWYgd2Ugc2VlIGFuCi0JCSAqIEkvTyBhbHJlYWR5IGluIHByb2dy ZXNzLiAgV2UgYWxyZWFkeSBzZXQgQk1fSU9fSU5fUFJPR1JFU1MgZm9yIHRoZQotCQkgKiBoZWFk IGJsb2NrLCBzbyB3ZSBzaG91bGQgZ2V0IG9uIHdpdGggdGhhdCBJL08gYXMgc29vbiBhcyBwb3Nz aWJsZS4KLQkJICovCi0JCWZvciAoaW50IGkgPSBuYmxvY2tzX2RvbmUgKyAxOyBpIDwgb3BlcmF0 aW9uLT5uYmxvY2tzOyBpKyspCi0JCXsKLQkJCWlmICghUmVhZEJ1ZmZlcnNDYW5TdGFydElPKGJ1 ZmZlcnNbaV0sIHRydWUpKQotCQkJCWJyZWFrOwotCQkJLyogTXVzdCBiZSBjb25zZWN1dGl2ZSBi bG9jayBudW1iZXJzLiAqLwotCQkJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcnNb aSAtIDFdKSA9PQotCQkJCSAgIEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcnNbaV0pIC0gMSk7 Ci0JCQlBc3NlcnQoaW9fYnVmZmVyc1tpb19idWZmZXJzX2xlbl0gPT0gYnVmZmVyc1tpXSk7CiAK LQkJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0QmxvY2soYnVmZmVyc1tp XSk7Ci0JCX0KKwkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBmb3IgaW4gV2FpdFJlYWRCdWZm ZXJzKCkgKi8KKwlwZ2Fpb19pb19nZXRfd3JlZihpb2gsICZvcGVyYXRpb24tPmlvX3dyZWYpOwog Ci0JCS8qIGdldCBhIHJlZmVyZW5jZSB0byB3YWl0IGZvciBpbiBXYWl0UmVhZEJ1ZmZlcnMoKSAq LwotCQlwZ2Fpb19pb19nZXRfd3JlZihpb2gsICZvcGVyYXRpb24tPmlvX3dyZWYpOworCS8qIHBy b3ZpZGUgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB0aGUgY29tcGxldGlvbiBjYWxsYmFja3MgKi8K KwlwZ2Fpb19pb19zZXRfaGFuZGxlX2RhdGFfMzIoaW9oLCAodWludDMyICopIGlvX2J1ZmZlcnMs IGlvX2J1ZmZlcnNfbGVuKTsKIAotCQkvKiBwcm92aWRlIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgdG8g dGhlIGNvbXBsZXRpb24gY2FsbGJhY2tzICovCi0JCXBnYWlvX2lvX3NldF9oYW5kbGVfZGF0YV8z Mihpb2gsICh1aW50MzIgKikgaW9fYnVmZmVycywgaW9fYnVmZmVyc19sZW4pOworCXBnYWlvX2lv X3JlZ2lzdGVyX2NhbGxiYWNrcyhpb2gsCisJCQkJCQkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJ U1RFTkNFX1RFTVAgPworCQkJCQkJCQlQR0FJT19IQ0JfTE9DQUxfQlVGRkVSX1JFQURWIDoKKwkJ CQkJCQkJUEdBSU9fSENCX1NIQVJFRF9CVUZGRVJfUkVBRFYsCisJCQkJCQkJCWZsYWdzKTsKIAot CQlwZ2Fpb19pb19yZWdpc3Rlcl9jYWxsYmFja3MoaW9oLAotCQkJCQkJCQkJcGVyc2lzdGVuY2Ug PT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCA/Ci0JCQkJCQkJCQlQR0FJT19IQ0JfTE9DQUxfQlVGRkVS X1JFQURWIDoKLQkJCQkJCQkJCVBHQUlPX0hDQl9TSEFSRURfQlVGRkVSX1JFQURWLAotCQkJCQkJ CQkJZmxhZ3MpOworCXBnYWlvX2lvX3NldF9mbGFnKGlvaCwgaW9oX2ZsYWdzKTsKIAotCQlwZ2Fp b19pb19zZXRfZmxhZyhpb2gsIGlvaF9mbGFncyk7CisJLyogLS0tCisJKiBFdmVuIHRob3VnaCB3 ZSdyZSB0cnlpbmcgdG8gaXNzdWUgSU8gYXN5bmNocm9ub3VzbHksIHRyYWNrIHRoZSB0aW1lCisJ KiBpbiBzbWdyc3RhcnRyZWFkdigpOgorCSogLSBpZiBpb19tZXRob2QgPT0gSU9NRVRIT0RfU1lO Qywgd2Ugd2lsbCBhbHdheXMgcGVyZm9ybSB0aGUgSU8KKwkqICAgaW1tZWRpYXRlbHkKKwkqIC0g dGhlIGlvIG1ldGhvZCBtaWdodCBub3Qgc3VwcG9ydCB0aGUgSU8gKGUuZy4gd29ya2VyIElPIGZv ciBhIHRlbXAKKwkqICAgdGFibGUpCisJKiAtLS0KKwkqLworCWlvX3N0YXJ0ID0gcGdzdGF0X3By ZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOworCXNtZ3JzdGFydHJlYWR2KGlvaCwgb3Bl cmF0aW9uLT5zbWdyLCBmb3JrbnVtLAorCQkJCSAgIGJsb2NrbnVtICsgbmJsb2Nrc19kb25lLAor CQkJCSAgIGlvX3BhZ2VzLCBpb19idWZmZXJzX2xlbik7CisJcGdzdGF0X2NvdW50X2lvX29wX3Rp bWUoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09QX1JFQUQsCisJCQkJCQkJaW9fc3RhcnQsIDEs IGlvX2J1ZmZlcnNfbGVuICogQkxDS1NaKTsKIAotCQkvKiAtLS0KLQkJICogRXZlbiB0aG91Z2gg d2UncmUgdHJ5aW5nIHRvIGlzc3VlIElPIGFzeW5jaHJvbm91c2x5LCB0cmFjayB0aGUgdGltZQot CQkgKiBpbiBzbWdyc3RhcnRyZWFkdigpOgotCQkgKiAtIGlmIGlvX21ldGhvZCA9PSBJT01FVEhP RF9TWU5DLCB3ZSB3aWxsIGFsd2F5cyBwZXJmb3JtIHRoZSBJTwotCQkgKiAgIGltbWVkaWF0ZWx5 Ci0JCSAqIC0gdGhlIGlvIG1ldGhvZCBtaWdodCBub3Qgc3VwcG9ydCB0aGUgSU8gKGUuZy4gd29y a2VyIElPIGZvciBhIHRlbXAKLQkJICogICB0YWJsZSkKLQkJICogLS0tCi0JCSAqLwotCQlpb19z dGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9fdGltaW5nKTsKLQkJc21ncnN0 YXJ0cmVhZHYoaW9oLCBvcGVyYXRpb24tPnNtZ3IsIGZvcmtudW0sCi0JCQkJCSAgIGJsb2NrbnVt ICsgbmJsb2Nrc19kb25lLAotCQkJCQkgICBpb19wYWdlcywgaW9fYnVmZmVyc19sZW4pOwotCQlw Z3N0YXRfY291bnRfaW9fb3BfdGltZShpb19vYmplY3QsIGlvX2NvbnRleHQsIElPT1BfUkVBRCwK LQkJCQkJCQkJaW9fc3RhcnQsIDEsIGlvX2J1ZmZlcnNfbGVuICogQkxDS1NaKTsKLQotCQlpZiAo cGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQkJCXBnQnVmZmVyVXNhZ2UubG9j YWxfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwotCQllbHNlCi0JCQlwZ0J1ZmZlclVzYWdl LnNoYXJlZF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47CisJaWYgKHBlcnNpc3RlbmNlID09 IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19yZWFkICs9 IGlvX2J1ZmZlcnNfbGVuOworCWVsc2UKKwkJcGdCdWZmZXJVc2FnZS5zaGFyZWRfYmxrc19yZWFk ICs9IGlvX2J1ZmZlcnNfbGVuOwogCi0JCS8qCi0JCSAqIFRyYWNrIHZhY3V1bSBjb3N0IHdoZW4g aXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0LgotCQkgKiBPdGhlcndpc2Ugd2Ug Y291bGQgZW5kIHVwIGlzc3VpbmcgYSBsb3Qgb2YgSU8gaW4gYSBzaG9ydCB0aW1lc3BhbiwKLQkJ ICogZGVzcGl0ZSBhIGxvdyBjb3N0IGxpbWl0LgotCQkgKi8KLQkJaWYgKFZhY3V1bUNvc3RBY3Rp dmUpCi0JCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFnZU1pc3MgKiBpb19idWZm ZXJzX2xlbjsKKwkvKgorCSAqIFRyYWNrIHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90 IGFmdGVyIHdhaXRpbmcgZm9yIGl0LiBPdGhlcndpc2UKKwkgKiB3ZSBjb3VsZCBlbmQgdXAgaXNz dWluZyBhIGxvdCBvZiBJTyBpbiBhIHNob3J0IHRpbWVzcGFuLCBkZXNwaXRlIGEgbG93CisJICog Y29zdCBsaW1pdC4KKwkgKi8KKwlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJVmFjdXVtQ29zdEJh bGFuY2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzICogaW9fYnVmZmVyc19sZW47CiAKLQkJKm5ibG9j a3NfcHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKLQkJZGlkX3N0YXJ0X2lvID0gdHJ1ZTsKLQl9 CisJKm5ibG9ja3NfcHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKIAotCXJldHVybiBkaWRfc3Rh cnRfaW87CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCBhNDBh ZGY2YjJhOC4uMTM1OGZjN2ZhNjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm bWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTQ3LDYgKzE0Nyw3 IEBAIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2CQlu YmxvY2tzOwogCWludDE2CQluYmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQZ0Fp b1dhaXRSZWYgaW9fd3JlZjsKIAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBkYjU4Mzk4NTgxMy4uNmM2YmRjOGFjNGYgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0yMzQxLDYgKzIzNDEsNyBAQCBQcmVkaWNhdGVMb2NrRGF0YQog UHJlZGljYXRlTG9ja1RhcmdldFR5cGUKIFByZWZldGNoQnVmZmVyUmVzdWx0CiBQcmVwUGFyYWxs ZWxSZXN0b3JlUHRyVHlwZQorUHJlcGFyZVJlYWRCdWZmZXJfU3RhdHVzCiBQcmVwYXJlU3RtdAog UHJlcGFyZWRTdGF0ZW1lbnQKIFByZXNvcnRlZEtleURhdGEKLS0gCjIuNDMuMAoK --000000000000578f610649147fcb--