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 1w0ly3-002CCN-11 for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Mar 2026 19:45:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0ly1-00H8zr-2W for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Mar 2026 19:45:10 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0ly0-00H8zj-0u for pgsql-hackers@lists.postgresql.org; Thu, 12 Mar 2026 19:45:09 +0000 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0lxv-00000001ou5-42WV for pgsql-hackers@lists.postgresql.org; Thu, 12 Mar 2026 19:45:07 +0000 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-439cd6b0aedso1124417f8f.1 for ; Thu, 12 Mar 2026 12:45:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773344702; cv=none; d=google.com; s=arc-20240605; b=Tz4hhrrNWP3RVa43M3xuBqdHbywWYnkYY15/P3YKDpcWUhFYyv6vUdkkxXM0O+5e86 k7IoJ7R3PaT+DdyjyDGxhW11TLvoQcHRNeqTqm30LB4lKh0SRgK9eE+zeIV1QgcscvXw hyPWNDEiYdHtAFZ/JjhclvdEnAm3/02i3AtYx4IbkUx1XPT7t43cfME8v/JeLXrQg+AE 4rY56tZ0JAc7G0VFLqV0V7AN441f3DoqKlJDsVSKarhtXrMmXJaH+6YZvyKnbxBAywpi RLYsxpMn5AkksUepGEahN3bIDaP5i2Ow5spWijQaVcBrTtHjzy5FCZtQeV5QRXpjPfba 2kcw== 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=u4qGiBi6TF1rPSUJUevS1cq5ftzAP0W5q1sJJuAxi50=; fh=EjvPy13bQNIyvBO2eJg4Ln+FMg0XvGZfgUkMlS73bqw=; b=HWyVHAGyF7HqCM1ovvXEjSXgoZd5/+fHgEbKJdg5VaM7C1o1YM9/7PgIDL+PqXzkx3 gNy9Qk79ykiTErCy4thWS117LluNTck2mWKyG1IIvCRbow+abvrRRU9bhsQdq5j8NyPB ln43BskCgzBujWm5/ZxiwPzoqFvy4g7MD8/SFd5qGxJ8bzDC2In7i5B6GLPr3M2mhrgS hh6fZONVCcGsxSYlOGY3pAcapB+axUsvtUtG34ld9ycx9MLkTLLEslW97ubyCuIuysXy 0lhMijJphDth7g/NOYzGc5hopre1191eLNIyPWTCHQzTUJ9i37OFMDoQ7qA38WlGVYcQ HY7A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1773344702; x=1773949502; darn=lists.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=u4qGiBi6TF1rPSUJUevS1cq5ftzAP0W5q1sJJuAxi50=; b=Pr6I7OdetQnXWZpuaNI7iI9aFX37OmPbrLrSMMZ3a5DxDhB3oJ59OKZA2yR0xLe/Nt bpTd8j7VfLrqErCBmcNyyLiGATt+sb8xp/EwOuewigJp6VGtTlqI6GjPmi611CdIuhIA 2RRrRLQNmZ0/2NKu9dy7aOl8lQM6r/NysNmuL77TZDVuSDGX9TW3HvcvtRvnyC7qCVOh XPRwBCqLGtw7a/U06uv37rhbvRYI3iV7d56siuwxlJTC9CBSs9Wfn5prP1gbOXCepeko EBJJavDEiL4iwr6MKjlOHEXGTZgmW184TTaad93cXPODONDG+Wfg5hIpgnRR4uRd75FY xtkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773344702; x=1773949502; 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=u4qGiBi6TF1rPSUJUevS1cq5ftzAP0W5q1sJJuAxi50=; b=BcqLA3rQqCbCktMF2ENep+c2ZI2MRpWo2GT54V/Izrz7UQklyB18ZkM+3PA5+kZRbL MKpKbvKffeJDXEf5LW94/174x3fRLlwIM/4Rc922jQM4Km4ZQ0PKtb+1wG4D3a79ocmo Vf04FkrE8IfsJGYzUpsSeGB0uMImPYtjG+6K1hQOPHCAo1uItgJ3xifTHEro4cicUPzS 0r28xnMS94jXjtu9X+aVNZ3+5nuvHQTCMMnh9HIrrVcDw+kqhqAAc7YoCbHX6QafxNMl veV8SoSNCJkAVDk1F0X5jRcxKq/cQShD/+U7QCThu2ROWecnlzMgF/tkXm/+A+rRKuPa fNbA== X-Forwarded-Encrypted: i=1; AJvYcCWYFGZ72XpussV6HqTHm4Z3TREueYQehWflbSSFXmgXLz7wLeRtggQPLM5tNWp92fgRxdltQUwjbFM8exEU@lists.postgresql.org X-Gm-Message-State: AOJu0Yyd0jCcEK5pTgNwgPgTSxYvyn3qH90+2gwNTo9ADwBh7icI4Isf FTlG2hmS6ovbXV4ZMBtd0kRIhSWNNGOgEMZif0S4VgK//FdKab/quO1SXwMyHZ56QOMlXMNxnx4 pvitQlcrZkg1XlggxzsNm1WoIY8YKWzjo8225xHCVFA== X-Gm-Gg: ATEYQzyqtLlEj3lse74m/idT4iTakiL0pZX5xl73OOVtDNOMhQHIzJyGm9eF9PYJCGe us4gXkaV0H3acVbMJucJO/1gBVxGSlGZuMmBimIx9YJZIztkpAcdku1S1yMbrTUSLouATE8Gad5 wWHyl2Yx6y/mqYMX5X0rPSp9OnT9H7aiK1S3H3G3jrTnw8fqT34n5GcbZRRGfxppLvcgpXvzsSm u9lNDhXaL4ExYdhTRbSgpOD0DQVHbLeP1+R2lJR3IusEJAc/QezwsjENDZ7zuFlRRKz6aSQGQYp p2laKy1/7vzfDTsa8g== X-Received: by 2002:a05:6000:186f:b0:439:b629:42d7 with SMTP id ffacd0b85a97d-43a04dcbb39mr1751619f8f.46.1773344701904; Thu, 12 Mar 2026 12:45:01 -0700 (PDT) MIME-Version: 1.0 References: <52512325-b1f2-4fff-819e-f68122b2e427@vondra.me> <64mfcfv7iihc4pmqlxarii4esnmqry52ckz5m7lmwylnfnuxuz@oxh4ioxkjtep> In-Reply-To: From: Peter Geoghegan Date: Thu, 12 Mar 2026 15:44:32 -0400 X-Gm-Features: AaiRm50eoFahCiG3TtqboofGTncyupVE9w3o_f5l2lsS65QtE_G4XKmktDZ7AnY Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="00000000000005d770064cd8fd78" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000005d770064cd8fd78 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 10, 2026 at 6:29=E2=80=AFPM Andres Freund = wrote: > This seems pretty unrelated to my concern. I have a problem with the fac= t > that heapam knows which specific resources need to be held (&released) to > prevent concurrency issues during an index only scan. I am *NOT* concern= ed > with there needing to be a pin and heapam triggering the release of that > resource. Attached v13 does things this way. All index AMs that use amgetbatch must register a new amreleasebatch callback in v13. This callback releases any buffer pin held as an interlock against unsafe concurrent TID recycling by VACUUM -- at least for nbtree and hash. The buffer itself is now stored in the portion of each batch used as opaque index AM state, so nothing stops other index AMs that support amgetbatch in the future from using a different kind of interlock, from holding multiple pins instead of just one, etc. We have a generic policy that determines (at the level of each scan) whether an interlock is required at all. If an interlock isn't required, index AMs will drop both their lock and pin together. Otherwise, they will only drop the lock, and only drop the pin/abstract interlock when the new amreleasebatch callback is called by the table AM. Our policy is to assume that we don't need a TID recycling interlock except during index-only scans and non-MVCC scans (regardless of the table AM and index AM involved). Separately, I removed the requirement that amgetbatch index AMs support Valgrind instrumentation requests like those nbtree has long supported. And I removed all such instrumentation from the hash index AM. > > Is this purely because of the potential to > > disrupt the read stream's management of the backend's buffer pin > > limit? > > I'm not particularly bothered by a small number of extra buffer pins, > particularly for AMs other than nbtree. They won't cause issues in any re= al > world setups. Okay. Then I don't think that we need to do anything here. As you know, nbtree never holds buffer pins for its own internal purposes. The hash index AM continues to hang on to up to 2 extra buffer pins for its own purposes, just like on master. -- Peter Geoghegan --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0019-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v13-0019-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv388y1 RnJvbSBkZDc1NWMyZDhkMDhiNTlkNjZhNTdmZGY1NjIyMTU4MTI4MjJhZDllIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMyAxOS8xOV0g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBp bmRleGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9m IGFsbCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2Uu ICBUaGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0 aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5z LgoKTm90ZSB0aGF0IGhhc2ggaW5kZXggc2NhbnMgd2lsbCBub3cgZHJvcCBpbmRleCBwYWdlIGJ1 ZmZlciBwaW5zIGVhZ2VybHkKKGFjdHVhbGx5LCB0aGUgdGFibGUgQU0gd2lsbCBkbyBzbyBvbiBi ZWhhbGYgb2YgdGhlIGhhc2ggaW5kZXggQU0pLgpUaGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCBm b3IgYW55IGluZGV4IEFNIHRoYXQgYWRvcHRzIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2Uu ICBHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNoZXMgd29uJ3QgaG9sZCBidWZmZXIKcGlucyBv biBpbmRleCBwYWdlcyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJp bmcgaW5kZXgKcHJlZmV0Y2hpbmcsIHdoZXJlIHRoZSByZWFkIHN0cmVhbSBpcyBleHBlY3RlZCB0 byBob2xkIG1hbnkgcGlucyBvbiBoZWFwCnBhZ2VzICh0aGF0J3Mgd2h5IGFtZ2V0YmF0Y2ggbWFr ZXMgdGhpcyBhIGhhcmQgcmVxdWlyZW1lbnQpLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBn QGJvd3QuaWU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGlz Y3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgxNjFwZUFXYjVlRj1K YTdDRkFRKzBqU0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvaGFzaC5oICAgICAgICAgICAgfCAgODUgKystLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvUkVBRE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aC5jICAgICAgIHwgMjEwICsrKysrKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoX3hsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdl LmMgICB8ICAxOSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIHwgMzM4 ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHV0aWwuYyAgIHwgMTI5ICstLS0tLS0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICB8ICAgMiAtCiA4IGZpbGVzIGNoYW5nZWQsIDMyNSBpbnNlcnRpb25zKCspLCA0OTMg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li44NGVjNmJjNDAgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2hhc2guaApAQCAtMTAwLDU3ICsxMDAsMjUgQEAgdHlwZWRlZiBIYXNoUGFnZU9wYXF1ZURhdGEg Kkhhc2hQYWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4RkY4MAogCi10 eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBl YWNoIG1hdGNoICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBoYXNoIGluZGV4 IEFNICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRhCiB7Ci0JSXRlbVBvaW50ZXJEYXRh IGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJl ciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi19 IEhhc2hTY2FuUG9zSXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBpbmRleCBwYWdlIGJ1ZmZlciBw aW4gKFRJRCByZXVzZSBpbnRlcmxvY2spICovCisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBp bmRleCBwYWdlIHdpdGggbWF0Y2hpbmcgaXRlbXMgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJ CS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCisJQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBj dXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KK30gSGFzaEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1 Y3QgSGFzaFNjYW5Qb3NEYXRhCisvKgorICogQWNjZXNzIHRoZSBoYXNoLXByaXZhdGUgcGVyLWJh dGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVyLgorICogVGhpcyBmb2xsb3dz IHRoZSBzdGFuZGFyZCBjb252ZW50aW9uIGZvciBpbmRleCBBTSBvcGFxdWUgc3RhdGU6IGl0IGNh biBiZQorICogZm91bmQgYXQgYSBmaXhlZCBuZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgSW5kZXhT Y2FuQmF0Y2ggcG9pbnRlci4KKyAqLworc3RhdGljIGlubGluZSBIYXNoQmF0Y2hEYXRhICoKK0hh c2hCYXRjaEdldERhdGEoSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7Ci0JQnVmZmVyCQlidWY7CQkJ LyogaWYgdmFsaWQsIHRoZSBidWZmZXIgaXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBh Z2U7CQkvKiBjdXJyZW50IGhhc2ggaW5kZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdl OwkJLyogbmV4dCBvdmVyZmxvdyBwYWdlICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBw cmV2IG92ZXJmbG93IG9yIGJ1Y2tldCBwYWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJh eSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBp bmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRv IGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxh c3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmly c3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1J bmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRv IGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBp biBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0 ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10g Ki8KLQotCUhhc2hTY2FuUG9zSXRlbSBpdGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBN VVNUIEJFIExBU1QgKi8KLX0gSGFzaFNjYW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9z SXNQaW5uZWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlk KChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5i dWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhh c2hTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJl cklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNj YW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkg XAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBc Ci0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFn ZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVy OyBcCi0JCShzY2FucG9zKS5maXJzdEl0ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9 IDA7IFwKLQkJKHNjYW5wb3MpLml0ZW1JbmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQorCXJldHVy biAoSGFzaEJhdGNoRGF0YSAqKSAoKGNoYXIgKikgYmF0Y2ggLSBNQVhBTElHTihzaXplb2YoSGFz aEJhdGNoRGF0YSkpKTsKK30KIAogLyoKICAqCUhhc2hTY2FuT3BhcXVlRGF0YSBpcyBwcml2YXRl IHN0YXRlIGZvciBhIGhhc2ggaW5kZXggc2Nhbi4KQEAgLTE3OCwxNSArMTQ2LDYgQEAgdHlwZWRl ZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hz b19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsK LQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwg aWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVt cyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJl ciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0 aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2Nh blBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3VyclBvczsJLyogY3VycmVudCBwb3Np dGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9w YXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDExICszMjcsMTUgQEAgZXh0ZXJuIGJv b2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwK IAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRl eFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVy biBib29sIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNj IHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNj YW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQg aGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fu a2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4g dm9pZCBoYXNoa2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBiYXRjaCk7CitleHRlcm4gdm9pZCBoYXNocmVsZWFzZWJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhhc2hidWxrZGVs ZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJl c3VsdCAqc3RhdHMsCkBAIC00NDUsOCArNDA4LDkgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfZmluaXNo X3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLAogCQkJCQkJ CSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRlcm4gYm9vbCBf aGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJu IGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7Citl eHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhTcG9v bCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAtNDc2LDcgKzQ0 MCw2IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJvbV9uZXdidWNr ZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hf Z2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNr ZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJl bGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWludDMyIGxvd21h c2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRl eFNjYW5EZXNjIHNjYW4pOwogCiAvKiBoYXNoLmMgKi8KIGV4dGVybiB2b2lkIGhhc2hidWNrZXRj bGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFE TUUKaW5kZXggZmM5MDMxMTE3Li45NzJiYjY2NmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKQEAg LTI1NSwyOCArMjU1LDI5IEBAIFRoZSByZWFkZXIgYWxnb3JpdGhtIGlzOgogCQlyZXRha2UgdGhl IGJ1ZmZlciBjb250ZW50IGxvY2sgb24gbmV3IGJ1Y2tldAogCQlhcnJhbmdlIHRvIHNjYW4gdGhl IG9sZCBidWNrZXQgbm9ybWFsbHkgYW5kIHRoZSBuZXcgYnVja2V0IGZvcgogICAgICAgICAgdHVw bGVzIHdoaWNoIGFyZSBub3QgbW92ZWQtYnktc3BsaXQKLS0tIHRoZW4sIHBlciByZWFkIHJlcXVl c3Q6CistLSB0aGVuLCBwZXIgYmF0Y2ggKHBhZ2UpIHJlcXVlc3Q6CiAJcmVhY3F1aXJlIGNvbnRl bnQgbG9jayBvbiBjdXJyZW50IHBhZ2UKIAlzdGVwIHRvIG5leHQgcGFnZSBpZiBuZWNlc3Nhcnkg KG5vIGNoYWluaW5nIG9mIGNvbnRlbnQgbG9ja3MsIGJ1dCBrZWVwCiAJdGhlIHBpbiBvbiB0aGUg cHJpbWFyeSBidWNrZXQgdGhyb3VnaG91dCB0aGUgc2NhbikKLQlzYXZlIGFsbCB0aGUgbWF0Y2hp bmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYW4gaXRlbXMgYXJyYXkKLQly ZWxlYXNlIHBpbiBhbmQgY29udGVudCBsb2NrIChidXQgaWYgaXQgaXMgcHJpbWFyeSBidWNrZXQg cGFnZSByZXRhaW4KLQlpdHMgcGluIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2NhbikKLQlnZXQgdHVw bGUgZnJvbSBhbiBpdGVtIGFycmF5CisJc2F2ZSBhbGwgdGhlIG1hdGNoaW5nIHR1cGxlcyBmcm9t IGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGEgYmF0Y2gKKwlyZWxlYXNlIGNvbnRlbnQgbG9jayBv biBjdXJyZW50IHBhZ2UgcmV0dXJuIGJhdGNoIHRvIHRhYmxlIEFNICh0YWJsZSBBTQorCXdpbGwg ZHJvcCBiYXRjaCdzIGJ1ZmZlciBwaW4sIHRob3VnaCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBpbiBp cyBrZXB0CisJdW50aWwgdGhlIGVuZCBvZiB0aGUgc2NhbikKIC0tIGF0IHNjYW4gc2h1dGRvd246 Ci0JcmVsZWFzZSBhbGwgcGlucyBzdGlsbCBoZWxkCisJcmVsZWFzZSBzY2FuLW93bmVkIHBpbnMg KGUuZy4sIHByaW1hcnkgYnVja2V0IHBhZ2UgcGluKSBhcyBuZWVkZWQKIAogSG9sZGluZyB0aGUg YnVmZmVyIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBmb3IgdGhlIHdob2xlIHNjYW4g cHJldmVudHMKLXRoZSByZWFkZXIncyBjdXJyZW50LXR1cGxlIHBvaW50ZXIgZnJvbSBiZWluZyBp bnZhbGlkYXRlZCBieSBzcGxpdHMgb3IKLWNvbXBhY3Rpb25zLiAgKE9mIGNvdXJzZSwgb3RoZXIg YnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKK3RoZSBidWNrZXQgZnJv bSBiZWluZyByZW9yZ2FuaXplZCBieSBzcGxpdHMgb3IgY29tcGFjdGlvbnMgd2hpbGUgdGhlIHNj YW4gaXMKK2luIHByb2dyZXNzLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwg YmUgc3BsaXQgb3IgY29tcGFjdGVkLikKIAotVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZp YywgaGFzaCBpbmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyB0aGUgZW50aXJlCi1oYXNoIHBhZ2Ug dG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNlLCBjb3B5aW5nIHRoZWly IGhlYXAgdHVwbGUKLUlEcyBpbnRvIGJhY2tlbmQtbG9jYWwgc3RvcmFnZS4gVGhlIGhlYXAgdHVw bGUgSURzIGFyZSB0aGVuIHByb2Nlc3NlZCB3aGlsZSBub3QKLWhvbGRpbmcgYW55IHBhZ2UgbG9j ayB3aXRoaW4gdGhlIGluZGV4IHRoZXJlYnksIGFsbG93aW5nIGNvbmN1cnJlbnQgaW5zZXJ0aW9u Ci10byBoYXBwZW4gb24gdGhlIHNhbWUgaW5kZXggcGFnZSB3aXRob3V0IGFueSByZXF1aXJlbWVu dCBvZiByZS1maW5kaW5nIHRoZQotY3VycmVudCBzY2FuIHBvc2l0aW9uIGZvciB0aGUgcmVhZGVy LiBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZQotYnVja2V0IHBhZ2UsIHRvIHBy b3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGRlbGV0aW9ucyBhbmQgYnVja2V0IHNwbGl0LgorVG8g bWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FucyBhbHdheXMgc2Vh cmNoIHRoZSBlbnRpcmUKK2hhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0 ZW1zIGF0IG9uY2UsIHJldHVybmluZyB0aGVtIGluCitiYXRjaGVzIHRvIHRoZSB0YWJsZSBBTS4g IFRoZSB0YWJsZSBBTSBwcm9jZXNzZXMgYmF0Y2hlcyB3aGlsZSBubyBwYWdlIGxvY2sKK2lzIGhl bGQgd2l0aGluIHRoZSBpbmRleCwgYWxsb3dpbmcgY29uY3VycmVudCBpbnNlcnRpb24gdG8gaGFw cGVuIG9uIHRoZQorc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55IHJlcXVpcmVtZW50IG9mIHJl LWZpbmRpbmcgdGhlIGN1cnJlbnQgc2NhbgorcG9zaXRpb24gZm9yIHRoZSByZWFkZXIuICBUaGUg dGFibGUgQU0gY29udHJvbHMgd2hlbiBiYXRjaCBidWZmZXIgcGlucyBhcmUKK2Ryb3BwZWQuICBX ZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCB0 bworcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYnVja2V0IHNwbGl0cy4KIAogVG8gYWxsb3cg Zm9yIHNjYW5zIGR1cmluZyBhIGJ1Y2tldCBzcGxpdCwgaWYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBz Y2FuLCB0aGUKIGJ1Y2tldCBpcyBtYXJrZWQgYXMgYnVja2V0LWJlaW5nLXBvcHVsYXRlZCwgaXQg c2NhbiBhbGwgdGhlIHR1cGxlcyBpbiB0aGF0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggOTI4 MjRhYTVkLi4xOGU3NDdhMjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTEwMSw5ICsxMDEs MTAgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9 IGhhc2hhZGp1c3RtZW1iZXJzLAogCQkuYW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAogCQku YW1yZXNjYW4gPSBoYXNocmVzY2FuLAotCQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZSwKLQkJ LmFtZ2V0YmF0Y2ggPSBOVUxMLAotCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbWdl dHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBoYXNoZ2V0YmF0Y2gsCisJCS5hbWtpbGxp dGVtc2JhdGNoID0gaGFzaGtpbGxpdGVtc2JhdGNoLAorCQkuYW1yZWxlYXNlYmF0Y2ggPSBoYXNo cmVsZWFzZWJhdGNoLAogCQkuYW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRz Y2FuID0gaGFzaGVuZHNjYW4sCiAJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKQEAgLTI4Niw1MyArMjg3 LDI4IEBAIGhhc2hpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251 bGwsCiAKIAogLyoKLSAqCWhhc2hnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0 aGUgc2Nhbi4KKyAqCWhhc2hnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRj aCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAotaGFzaGdldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAoraGFzaGdldGJh dGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2NhbkRp cmVjdGlvbiBkaXIpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7CiAKIAkvKiBIYXNoIGluZGV4ZXMgYXJlIGFsd2F5cyBs b3NzeSBzaW5jZSB3ZSBzdG9yZSBvbmx5IHRoZSBoYXNoIGNvZGUgKi8KIAlzY2FuLT54c19yZWNo ZWNrID0gdHJ1ZTsKIAotCS8qCi0JICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlz IHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4gdGhlCi0JICogYXBwcm9wcmlhdGUgZGly ZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHlldCwgd2UgY2FsbCBhIHJvdXRpbmUgdG8K LQkgKiBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4uCi0JICovCi0JaWYgKCFIYXNoU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlyZXMgPSBfaGFzaF9maXJzdChzY2FuLCBkaXIp OwotCWVsc2UKKwlpZiAocHJpb3JiYXRjaCA9PSBOVUxMKQogCXsKLQkJLyoKLQkJICogQ2hlY2sg dG8gc2VlIGlmIHdlIHNob3VsZCBraWxsIHRoZSBwcmV2aW91c2x5LWZldGNoZWQgdHVwbGUuCi0J CSAqLwotCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJewotCQkJLyoKLQkJCSAqIFll cywgc28gcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1 cGxlcwotCQkJICogYXQgb25jZSByaWdodCBhZnRlciBsZWF2aW5nIHRoZSBpbmRleCBwYWdlIG9y IGF0IGVuZCBvZiBzY2FuLikKLQkJCSAqIEluIGNhc2UgaWYgY2FsbGVyIHJldmVyc2VzIHRoZSBp bmRleHNjYW4gZGlyZWN0aW9uIGl0IGlzIHF1aXRlCi0JCQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBz YW1lIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuCi0JCQkgKiBCdXQsIHdl IGRvbid0IGRldGVjdCB0aGF0OyBpbnN0ZWFkLCB3ZSBqdXN0IGZvcmdldCBhbnkgZXhjZXNzCi0J CQkgKiBlbnRyaWVzLgotCQkJICovCi0JCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0J CQkJc28tPmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgTWF4SW5kZXhUdXBsZXNQZXJQ YWdlKTsKKwkJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCQkJaWYgKHNv LT5udW1LaWxsZWQgPCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCi0JCQkJc28tPmtpbGxlZEl0ZW1z W3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCX0KKwkJX2hhc2hf ZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQkJLyoKLQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2Fu LgotCQkgKi8KLQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBkaXIpOworCQkvKiBJbml0aWFsaXpl IHRoZSBzY2FuLCBhbmQgcmV0dXJuIGZpcnN0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zICovCisJ CXJldHVybiBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwogCX0KIAotCXJldHVybiByZXM7CisJLyog UmV0dXJuIGJhdGNoIHBvc2l0aW9uZWQgYWZ0ZXIgY2FsbGVyJ3MgYmF0Y2ggKGluIGRpcmVjdGlv biAnZGlyJykgKi8KKwlyZXR1cm4gX2hhc2hfbmV4dChzY2FuLCBkaXIsIHByaW9yYmF0Y2gpOwog fQogCiAKQEAgLTM0MiwyNiArMzE4LDI2IEBAIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogaW50NjQKIGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIHsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nh bk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRjaCBiYXRj aDsKIAlpbnQ2NAkJbnRpZHMgPSAwOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CiAKLQly ZXMgPSBfaGFzaF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJYmF0Y2ggPSBf aGFzaF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CiAKLQl3aGlsZSAocmVzKQor CXdoaWxlIChiYXRjaCAhPSBOVUxMKQogCXsKLQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRl bXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKKwkJZm9yIChpbnQgaXRlbUluZGV4ID0gYmF0Y2gt PmZpcnN0SXRlbTsKKwkJCSBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtOworCQkJIGl0ZW1J bmRleCsrKQorCQl7CisJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sICZiYXRjaC0+aXRlbXNbaXRlbUlu ZGV4XS50YWJsZVRpZCwgMSwgdHJ1ZSk7CisJCQludGlkcysrOworCQl9CiAKIAkJLyoKLQkJICog X2hhc2hfZmlyc3QgYW5kIF9oYXNoX25leHQgaGFuZGxlIGVsaW1pbmF0ZSBkZWFkIGluZGV4IGVu dHJpZXMKLQkJICogd2hlbmV2ZXIgc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgaXMgdHJ1ZS4g IFRoZXJlZm9yZSwgdGhlcmUncwotCQkgKiBub3RoaW5nIHRvIGRvIGhlcmUgZXhjZXB0IGFkZCB0 aGUgcmVzdWx0cyB0byB0aGUgVElEQml0bWFwLgorCQkgKiBfaGFzaF9uZXh0IHJlbGVhc2VzIHRo ZSBwcmlvciBiYXRjaCBmb3IgYml0bWFwIGNhbGxlcnMgYmVmb3JlCisJCSAqIGFsbG9jYXRpbmcg dGhlIG5leHQgb25lLCBzbyBvbmx5IG9uZSBiYXRjaCBpcyBldmVyIHVzZWQgYXQgYSB0aW1lCiAJ CSAqLwotCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sICYoY3Vyckl0ZW0tPmhlYXBUaWQpLCAxLCB0cnVl KTsKLQkJbnRpZHMrKzsKLQotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGly ZWN0aW9uKTsKKwkJYmF0Y2ggPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBiYXRjaCk7CiAJfQogCiAJcmV0dXJuIG50aWRzOwpAQCAtMzgzLDE3ICszNTksMTYgQEAgaGFz aGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2Fu ID0gUmVsYXRpb25HZXRJbmRleFNjYW4ocmVsLCBua2V5cywgbm9yZGVyYnlzKTsKIAogCXNvID0g KEhhc2hTY2FuT3BhcXVlKSBwYWxsb2Nfb2JqZWN0KEhhc2hTY2FuT3BhcXVlRGF0YSk7Ci0JSGFz aFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYg PSBJbnZhbGlkQnVmZmVyOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRC dWZmZXI7CiAKIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlzby0+aGFzaHNv X2J1Y19zcGxpdCA9IGZhbHNlOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsKLQlzby0+bnVt S2lsbGVkID0gMDsKLQogCXNjYW4tPm9wYXF1ZSA9IHNvOworCXNjYW4tPm1heGl0ZW1zYmF0Y2gg PSBNYXhJbmRleFR1cGxlc1BlclBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUg PSBNQVhBTElHTihzaXplb2YoSGFzaEJhdGNoRGF0YSkpOworCXNjYW4tPmJhdGNoX3R1cGxlc193 b3Jrc3BhY2UgPSAwOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC00MDgsMTggKzM4Myw4IEBAIGhh c2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nhbmtl eXMsCiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK IAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9z SXNWYWxpZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBh Z2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4g MCkKLQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYo cmVsLCBzbyk7CiAKLQkvKiBzZXQgcG9zaXRpb24gaW52YWxpZCAodGhpcyB3aWxsIGNhdXNlIF9o YXNoX2ZpcnN0IGNhbGwpICovCi0JSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsK LQogCS8qIFVwZGF0ZSBzY2FuIGtleSwgaWYgYSBuZXcgb25lIGlzIGdpdmVuICovCiAJaWYgKHNj YW5rZXkgJiYgc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEs IHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwpAQCAt NDI4LDYgKzM5MywxMTIgQEAgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkg c2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwog fQogCisvKgorICoJaGFzaGtpbGxpdGVtc2JhdGNoKCkgLS0gTWFyayBkZWFkIGl0ZW1zJyBpbmRl eCB0dXBsZXMgTFBfREVBRAorICovCit2b2lkCitoYXNoa2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOworCUhhc2hCYXRjaERhdGEgKmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdl dERhdGEoYmF0Y2gpOworCUJ1ZmZlcgkJYnVmOworCVBhZ2UJCXBhZ2U7CisJSGFzaFBhZ2VPcGFx dWUgb3BhcXVlOworCU9mZnNldE51bWJlciBvZmZudW0sCisJCQkJbWF4b2ZmOworCWJvb2wJCWtp bGxlZHNvbWV0aGluZyA9IGZhbHNlOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJQXNzZXJ0 KGJhdGNoLT5udW1EZWFkID4gMCk7CisKKwlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBoYXNoYmF0 Y2gtPmN1cnJQYWdlLCBIQVNIX1JFQUQsCisJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZF UkZMT1dfUEFHRSk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKKwlB c3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRjaC0+bHNuICE9IGxhdGVz dGxzbikKKwl7CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KKwkJX2hhc2hf cmVsYnVmKHJlbCwgYnVmKTsKKwkJcmV0dXJuOworCX0KKworCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KGJ1Zik7CisJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7CisJbWF4b2ZmID0gUGFn ZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKKworCS8qIEl0ZXJhdGUgdGhyb3VnaCBiYXRjaC0+ ZGVhZEl0ZW1zW10gaW4gaW5kZXggcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwg YmF0Y2gtPm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5kZWFk SXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJySXRlbSA9ICZiYXRjaC0+aXRlbXNb aXRlbUluZGV4XTsKKworCQlvZmZudW0gPSBjdXJySXRlbS0+aW5kZXhPZmZzZXQ7CisKKwkJQXNz ZXJ0KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBpdGVtSW5kZXggPD0g YmF0Y2gtPmxhc3RJdGVtKTsKKworCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKKwkJeworCQkJ SXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJCQlJbmRleFR1cGxl CWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCisJCQlpZiAo SXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+dGFibGVUaWQpKQor CQkJeworCQkJCWlmICgha2lsbGVkc29tZXRoaW5nKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICog VXNlIHRoZSBoaW50IGJpdCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KKwkJCQkJ ICogdXBkYXRlIHRoZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdl CisJCQkJCSAqIGFyZSBub3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgor CQkJCQkgKi8KKwkJCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCisJCQkJCQln b3RvIHVubG9ja19wYWdlOworCQkJCX0KKworCQkJCS8qIGZvdW5kIHRoZSBpdGVtICovCisJCQkJ SXRlbUlkTWFya0RlYWQoaWlkKTsKKwkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOworCQkJCWJy ZWFrOwkJCS8qIG91dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLworCQkJfQorCQkJb2ZmbnVtID0g T2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pOworCQl9CisJfQorCisJLyoKKwkgKiBTaW5jZSB0aGlz IGNhbiBiZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuIFdoZW5l dmVyCisJICogd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdz CisJICogTEhfUEFHRV9IQVNfREVBRF9UVVBMRVMgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVz dCBhIGhpbnQuCisJICovCisJaWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1ZS0+aGFz aG9fZmxhZyB8PSBMSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKKwkJQnVmZmVyRmluaXNoU2V0SGlu dEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsKKwl9CisKK3VubG9ja19wYWdlOgorCV9oYXNoX3JlbGJ1 ZihyZWwsIGJ1Zik7Cit9CisKKy8qCisgKgloYXNocmVsZWFzZWJhdGNoKCkgLS0gUmVsZWFzZSBi YXRjaCdzIGluZGV4IHBhZ2UgYnVmZmVyIHBpbgorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUg QU0gKHZpYSBhbXJlbGVhc2ViYXRjaCkgd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUKKyAqIGJ1 ZmZlciBwaW4gaGVsZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNV VU0uCisgKiBNdXN0IGJlIGlkZW1wb3RlbnQgLS0gc2FmZSB0byBjYWxsIHdoZW4gdGhlIHBpbiBo YXMgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLgorICovCit2b2lkCitoYXNocmVsZWFzZWJhdGNoKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJSGFzaEJhdGNoRGF0 YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShiYXRjaCk7CisKKwlpZiAoQnVmZmVySXNW YWxpZChoYXNoYmF0Y2gtPmJ1ZikpCisJeworCQlSZWxlYXNlQnVmZmVyKGhhc2hiYXRjaC0+YnVm KTsKKwkJaGFzaGJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCX0KK30KKwogLyoKICAqCWhh c2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDM3LDE3ICs1MDgsOCBA QCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJSGFzaFNjYW5PcGFxdWUgc28gPSAo SGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRl eFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0Jewot CQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0 ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nh bik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQlpZiAoc28tPmtpbGxl ZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVtcyk7CiAJcGZyZWUoc28pOwog CXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCmlu ZGV4IDIwNjA2MjBjNy4uZTI2ZWU4YmI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cu YwpAQCAtMTE0MSwxNCArMTE0MSwxNCBAQCBoYXNoX21hc2soY2hhciAqcGFnZWRhdGEsIEJsb2Nr TnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBoYXNoIGJ1Y2tldCBhbmQgb3ZlcmZsb3cgcGFn ZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUKIAkJICogTFBfRkxBR1Mgd2l0aG91dCBl bWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sgdGhlIGxpbmUKLQkJICogcG9pbnRl ciBmbGFncy4gU2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRldGFp bHMuCisJCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoa2lsbGl0ZW1zYmF0Y2goKSBmb3IgZGV0 YWlscy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7CiAJfQogCiAJLyoKIAkgKiBJdCBp cyBwb3NzaWJsZSB0aGF0IHRoZSBoaW50IGJpdCBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBtYXkg cmVtYWluCi0JICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0LiBTZWUgX2hhc2hfa2lsbF9pdGVtcygp IGZvciBkZXRhaWxzLgorCSAqIHVubG9nZ2VkLiBTbywgbWFzayBpdC4gU2VlIGhhc2hraWxsaXRl bXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCSAqLwogCW9wYXF1ZS0+aGFzaG9fZmxhZyAmPSB+TEhf UEFHRV9IQVNfREVBRF9UVVBMRVM7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwppbmRl eCAyNjNiYzczZjEuLjM4OGQyNDQyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCkBA IC0yODAsMzEgKzI4MCwyNCBAQCBfaGFzaF9kcm9wYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1 ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJzIHVz ZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJzIG93 bmVkIGJ5IHNjYW4uCiAgKgotICogVGhpcyByb3V0aW5lIHVucGlucyB0aGUgYnVmZmVycyB1c2Vk IGR1cmluZyBzY2FuIG9uIHdoaWNoIHdlCi0gKiBob2xkIG5vIGxvY2suCisgKiBUaGlzIHJvdXRp bmUgdW5waW5zIHRoZSBidWZmZXJzIGZvciB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgZm9y IHRoZQorICogYnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQgYmVpbmcgc3BsaXQgYXMgbmVlZGVkLgog ICovCiB2b2lkCiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlvbiByZWwsIEhhc2hTY2FuT3BhcXVl IHNvKQogewogCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24gcHJpbWFyeSBidWNrZXQgcGFnZSAq LwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikgJiYKLQkJc28tPmhh c2hzb19idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwlpZiAoQnVmZmVySXNWYWxpZChz by0+aGFzaHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwgc28tPmhhc2hzb19i dWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0J LyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICBvZiBidWNrZXQg YmVpbmcgc3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX3NwbGl0X2J1Y2tl dF9idWYpICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiAhPSBzby0+Y3VyclBvcy5i dWYpCisJLyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlIG9mIGJ1Y2tl dCBiZWluZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fc3BsaXRfYnVj a2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9i dWYpOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkv KiByZWxlYXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNv LT5jdXJyUG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwot CXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0KIAkvKiByZXNldCBzcGxpdCBzY2Fu ICovCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNf c3BsaXQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hz ZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwppbmRleCA4OWQx YzViYzYuLjczYmFiZThjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwpAQCAt MjIsMTA1ICsyMiw4NyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVk ZSAidXRpbHMvcmVsLmgiCiAKLXN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgQnVmZmVyICpidWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworc3Rh dGljIGJvb2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBT Y2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIHN0YXRp YyBpbnQJX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdl IHBhZ2UsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRp cik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28s IGludCBpdGVtSW5kZXgsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGly ZWN0aW9uIGRpciwKKwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBp bmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1J bmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwog c3RhdGljIHZvaWQgX2hhc2hfcmVhZG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1 ZnAsCiAJCQkJCQkgICBQYWdlICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9wYXF1ZXApOwogCiAv KgotICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9o YXNoX25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoK LSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdo aWNoIG1heQotICoJCWJlIHBpbm5lZCBidXQgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0 ZW1JbmRleCBpZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRlbSB3YXMgcHJldmlvdXNseSByZXR1cm5l ZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSBi YXRjaCB3aXRoIGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vz c2Z1bCBleGl0LCBzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgVElEIG9mIHRoZSBuZXh0 Ci0gKgkJaGVhcCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJ CU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcg aXRlbXMgZnJvbQorICoJCW5leHQgcGFnZS4gIE90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGlj YXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMuICBObyBsb2NrcyBh cmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5v IG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJaGVsZCBvbiBidWNr ZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4K KyAqCQlSZXRhaW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2Zp cnN0LgogICovCi1ib29sCi1faGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAorX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKQogewogCVJlbGF0 aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFz aFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwor CUhhc2hCYXRjaERhdGEgKmhhc2hwcmlvcmJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShwcmlvcmJh dGNoKTsKIAlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJCWJ1ZjsKLQlib29sCQllbmRfb2Zf c2NhbiA9IGZhbHNlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCiAJLyoKLQkgKiBBZHZhbmNl IHRvIHRoZSBuZXh0IHR1cGxlIG9uIHRoZSBjdXJyZW50IHBhZ2U7IG9yIGlmIGRvbmUsIHRyeSB0 byByZWFkCi0JICogZGF0YSBmcm9tIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UgYmFzZWQgb24g dGhlIHNjYW4gZGlyZWN0aW9uLiBCZWZvcmUKLQkgKiBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJl dmlvdXMgcGFnZSBtYWtlIHN1cmUgdGhhdCB3ZSBkZWFsIHdpdGggYWxsIHRoZQotCSAqIGtpbGxl ZCBpdGVtcy4KKwkgKiBEZXRlcm1pbmUgd2hpY2ggcGFnZSB0byByZWFkIG5leHQgYmFzZWQgb24g c2NhbiBkaXJlY3Rpb24gYW5kIGRldGFpbHMKKwkgKiB0YWtlbiBmcm9tIHRoZSBwcmlvciBiYXRj aAogCSAqLwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JewotCQlpZiAoKytz by0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYg KHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7CisJCWJsa25v ID0gaGFzaHByaW9yYmF0Y2gtPm5leHRQYWdlOworCWVsc2UKKwkJYmxrbm8gPSBoYXNocHJpb3Ji YXRjaC0+cHJldlBhZ2U7CiAKLQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7Ci0JCQlp ZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRi dWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQkJCQlpZiAoIV9o YXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsK LQkJCX0KLQkJCWVsc2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCX0KLQl9CisJLyoKKwkg KiBGb3IgYml0bWFwIHNjYW4gY2FsbGVycywgcmVsZWFzZSB0aGUgcHJpb3IgYmF0Y2ggbm93IHNv IHRoYXQgdGhlCisJICogYWxsb2NhdGlvbiBiZWxvdyBjYW4gcmV1c2UgaXRzIG1lbW9yeS4gIFRo aXMgd2F5IGJpdG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQgbW9yZSB0aGFuIG9uZSBiYXRjaCBh bGxvY2F0aW9uLgorCSAqLworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRleGFtX3V0 aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBwcmlvcmJhdGNoKTsKKworCWlmICghQmxvY2tOdW1iZXJJ c1ZhbGlkKGJsa25vKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3Ig bmV4dCBiYXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOwor CisJLyogR2V0IHRoZSBidWZmZXIgZm9yIG5leHQgYmF0Y2ggKi8KKwlpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpKQorCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9S RUFELCBMSF9PVkVSRkxPV19QQUdFKTsKIAllbHNlCiAJewotCQlpZiAoLS1zby0+Y3VyclBvcy5p dGVtSW5kZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmIChzby0+bnVtS2ls bGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOworCQlidWYgPSBfaGFzaF9nZXRi dWYocmVsLCBibGtubywgSEFTSF9SRUFELAorCQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9P VkVSRkxPV19QQUdFKTsKIAotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsKLQkJCWlm IChCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1ZiA9IF9oYXNoX2dldGJ1 ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCi0JCQkJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhf T1ZFUkZMT1dfUEFHRSk7Ci0KLQkJCQkvKgotCQkJCSAqIFdlIGFsd2F5cyBtYWludGFpbiB0aGUg cGluIG9uIGJ1Y2tldCBwYWdlIGZvciB3aG9sZSBzY2FuCi0JCQkJICogb3BlcmF0aW9uLCBzbyBy ZWxlYXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQKLQkJCQkgKiBoZXJl LgotCQkJCSAqLwotCQkJCWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJ CWJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJCV9oYXNoX2Ryb3BidWYo cmVsLCBidWYpOwotCi0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQot CQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4g PSB0cnVlOwotCQl9CisJCS8qCisJCSAqIFdlIGFsd2F5cyBtYWludGFpbiB0aGUgcGluIG9uIGJ1 Y2tldCBwYWdlIGZvciB3aG9sZSBzY2FuIG9wZXJhdGlvbiwKKwkJICogc28gcmVsZWFzaW5nIHRo ZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkIGhlcmUuCisJCSAqLworCQlpZiAoYnVm ID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRf YnVja2V0X2J1ZikKKwkJCV9oYXNoX2Ryb3BidWYocmVsLCBidWYpOwogCX0KIAotCWlmIChlbmRf b2Zfc2NhbikKKwkvKiBSZWFkIHRoZSBuZXh0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50byBhbGxv Y2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sIGJ1ZiwgZGlyLCBiYXRj aCkpCiAJewotCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKLQkJSGFzaFNjYW5Qb3NJbnZh bGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJcmV0dXJuIGZhbHNlOworCQlpbmRleGFtX3V0aWxfYmF0 Y2hfcmVsZWFzZShzY2FuLCBiYXRjaCk7CisJCXJldHVybiBOVUxMOwogCX0KIAotCS8qIE9LLCBp dGVtSW5kZXggc2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJ dGVtLT5oZWFwVGlkOwotCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250 YWluaW5nIG1hdGNoZWQgaXRlbXMgZnJvbSBuZXh0IHBhZ2UgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9 CiAKIC8qCkBAIC0yNzAsMjIgKzI1MiwyMCBAQCBfaGFzaF9yZWFkcHJldihJbmRleFNjYW5EZXNj IHNjYW4sCiB9CiAKIC8qCi0gKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGl0ZW0g aW4gYSBzY2FuLgorICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBp dGVtcyBpbiBhIHNjYW4uCiAgKgotICoJCVdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLCBpZiBi YWNrd2FyZCBzY2FuLCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUKLSAqCQlpbmRleCB0aGF0IHNhdGlz ZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHNjYW4KLSAqCQlkZXNj cmlwdG9yLgorICoJCVdlIGZpbmQgdGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIChvciwgaWYgYmFj a3dhcmQgc2NhbiwgdGhlIGxhc3QKKyAqCQliYXRjaCkgaW4gdGhlIGluZGV4IHRoYXQgc2F0aXNm aWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aAorICoJCXRoZSBzY2FuIGRlc2Ny aXB0b3IuCiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgaWYgdGhlIHBhZ2UgY29udGFpbmlu ZyBjdXJyZW50IGluZGV4IHR1cGxlIGlzIGFuCi0gKgkJb3ZlcmZsb3cgcGFnZSwgYm90aCBwaW4g YW5kIGxvY2sgYXJlIHJlbGVhc2VkIHdoZXJlYXMgaWYgaXQgaXMgYSBidWNrZXQKLSAqCQlwYWdl IHRoZW4gaXQgaXMgcGlubmVkIGJ1dCBub3QgbG9ja2VkIGFuZCBkYXRhIGFib3V0IHRoZSBtYXRj aGluZwotICoJCXR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5j dXJyUG9zLAotICoJCXNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRoZSBoZWFwIFRJRCBvZiB0 aGUgY3VycmVudCB0dXBsZS4KKyAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHJldHVybnMgYSBiYXRj aCBjb250YWluaW5nIG1hdGNoaW5nIGl0ZW1zLgorICoJCU90aGVyd2lzZSByZXR1cm5zIE5VTEws IGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzLgorICoJCU5vIGxv Y2tzIGFyZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9uIGZhaWx1cmUgZXhp dCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggcGluIGhlbGQgb24KLSAq CQlidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93IHBhZ2Uu CisgKgkJV2UgYWx3YXlzIHJldGFpbiBvdXIgb3duIHBpbiBvbiB0aGUgYnVja2V0IHBhZ2UuICBX aGVuIHdlIHJldHVybiBhCisgKgkJYmF0Y2ggd2l0aCBhIGJ1Y2tldCBwYWdlLCBpdCB3aWxsIHJl dGFpbiBpdHMgb3duIHJlZmVyZW5jZSBwaW4uCiAgKi8KLWJvb2wKK0luZGV4U2NhbkJhdGNoCiBf aGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJl bGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBAIC0yOTYsNyArMjc2LDcgQEAgX2hh c2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlCdWZmZXIJ CWJ1ZjsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKLQlIYXNoU2NhblBv c0l0ZW0gKmN1cnJJdGVtOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCiAJcGdzdGF0X2NvdW50 X2luZGV4X3NjYW4ocmVsKTsKIAlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKQEAgLTMyNiw3ICszMDYs NyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CSAqIGl0ZW1zIGluIHRoZSBpbmRleC4KIAkgKi8KIAlpZiAoY3VyLT5za19mbGFncyAmIFNLX0lT TlVMTCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogT2theSB0 byBjb21wdXRlIHRoZSBoYXNoIGtleS4gIFdlIHdhbnQgdG8gZG8gdGhpcyBiZWZvcmUgYWNxdWly aW5nIGFueQpAQCAtNDE5LDE5MSArMzk5LDE1MiBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJX2hhc2hfcmVhZG5leHQoc2NhbiwgJmJ1Ziwg JnBhZ2UsICZvcGFxdWUpOwogCX0KIAotCS8qIHJlbWVtYmVyIHdoaWNoIGJ1ZmZlciB3ZSBoYXZl IHBpbm5lZCwgaWYgYW55ICovCi0JQXNzZXJ0KEJ1ZmZlcklzSW52YWxpZChzby0+Y3VyclBvcy5i dWYpKTsKLQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZp cnN0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CiAK LQkvKiBOb3cgZmluZCBhbGwgdGhlIHR1cGxlcyBzYXRpc2Z5aW5nIHRoZSBxdWFsaWZpY2F0aW9u IGZyb20gYSBwYWdlICovCi0JaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQot CQlyZXR1cm4gZmFsc2U7CisJLyogUmVhZCB0aGUgZmlyc3QgcGFnZSBhbmQgbG9hZCBpdGVtcyBp bnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBk aXIsIGJhdGNoKSkKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNo KTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JLyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8g cmV0dXJuICovCi0JY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRl bUluZGV4XTsKLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQkvKiBp ZiB3ZSdyZSBoZXJlLCBfaGFzaF9yZWFkcGFnZSBmb3VuZCBhIHZhbGlkIHR1cGxlcyAqLwotCXJl dHVybiB0cnVlOworCS8qIFJldHVybiB0aGUgYmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1z ICovCisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgotICoJX2hhc2hfcmVhZHBhZ2UoKSAtLSBMb2Fk IGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2hhc2hf cmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBiYXRj aAogICoKICAqCVdlIHNjYW4gYWxsIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBpbmRleCBwYWdl IGFuZCBzYXZlIHRoZW0gaW50bwotICoJc28tPmN1cnJQb3MgaWYgaXQgc2F0aXNmaWVzIHRoZSBx dWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcworICoJdGhlIGJhdGNoIGlmIHRoZXkg c2F0aXNmeSB0aGUgcXVhbGlmaWNhdGlvbi4gSWYgbm8gbWF0Y2hpbmcgaXRlbXMKICAqCWFyZSBm b3VuZCBpbiB0aGUgY3VycmVudCBwYWdlLCB3ZSBtb3ZlIHRvIHRoZSBuZXh0IG9yIHByZXZpb3Vz IHBhZ2UKICAqCWluIGEgYnVja2V0IGNoYWluIGFzIGluZGljYXRlZCBieSB0aGUgZGlyZWN0aW9u LgogICoKICAqCVJldHVybiB0cnVlIGlmIGFueSBtYXRjaGluZyBpdGVtcyBhcmUgZm91bmQgZWxz ZSByZXR1cm4gZmFsc2UuCiAgKi8KIHN0YXRpYyBib29sCi1faGFzaF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCitfaGFzaF9yZWFk cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyLAor CQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5k ZXhSZWxhdGlvbjsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOwotCUJ1ZmZlcgkJYnVmOworCUhhc2hCYXRjaERhdGEgKmhhc2hiYXRjaCA9IEhhc2hC YXRjaEdldERhdGEoYmF0Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVl OwogCU9mZnNldE51bWJlciBvZmZudW07CiAJdWludDE2CQlpdGVtSW5kZXg7CiAKLQlidWYgPSAq YnVmUDsKIAlBc3NlcnQoQnVmZmVySXNWYWxpZChidWYpKTsKIAlfaGFzaF9jaGVja3BhZ2UocmVs LCBidWYsIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAJcGFnZSA9IEJ1ZmZl ckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKIAotCXNv LT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1Zik7CisJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJaGFzaGJhdGNoLT5jdXJy UGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJYmF0Y2gtPmRpciA9IGRpcjsKIAog CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlCbG9ja051bWJlciBwcmV2 X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCiAJCWZvciAoOzspCiAJCXsKIAkJCS8qIG5l dyBwYWdlLCBsb2NhdGUgc3RhcnRpbmcgcG9zaXRpb24gYnkgYmluYXJ5IHNlYXJjaCAqLwogCQkJ b2ZmbnVtID0gX2hhc2hfYmluc2VhcmNoKHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJ CWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51 bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4s IHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRl bUluZGV4ICE9IDApCiAJCQkJYnJlYWs7CiAKIAkJCS8qCi0JCQkgKiBDb3VsZCBub3QgZmluZCBh bnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRo ZSBuZXh0IHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBh bnkKLQkJCSAqIGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGlu ZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBu ZXh0IHBhZ2UKIAkJCSAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tp bGxfaXRlbXMoc2Nhbik7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGlzIGEgcHJpbWFyeSBidWNr ZXQgcGFnZSwgaGFzaG9fcHJldmJsa25vIGlzIG5vdCBhIHJlYWwKLQkJCSAqIGJsb2NrIG51bWJl ci4KLQkJCSAqLwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9i dWYgfHwKLQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVm KQotCQkJCXByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQllbHNlCi0JCQkJcHJl dl9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwotCiAJCQlfaGFzaF9yZWFkbmV4dChz Y2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQot CQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFn ZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJ LyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0IGFuZCBwcmV2aW91cyBibG9jayBudW1iZXJzIGZvciBz Y3JvbGxhYmxlCi0JCQkJICogY3Vyc29ycyB0byBrbm93IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQg cmV0dXJuIGZhbHNlCi0JCQkJICogaW5kaWNhdGluZyB0aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVw bGVzIHdlcmUgZm91bmQuIEFsc28sCi0JCQkJICogZG9uJ3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNu LCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJCSAqIF9oYXNoX2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVk IGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwotCQkJCSAqIGZ1bmN0aW9uIHJldHVybnMuCi0J CQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBwcmV2X2Jsa25vOwotCQkJCXNvLT5j dXJyUG9zLm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5jdXJyUG9zLmJ1 ZiA9IGJ1ZjsKKwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJCXJldHVybiBmYWxzZTsK LQkJCX0KKworCQkJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJCQloYXNoYmF0Y2gtPmN1cnJQYWdl ID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5jdXJyUG9zLmZpcnN0 SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28t PmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCWJhdGNo LT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7Ci0JCUJsb2NrTnVtYmVy IG5leHRfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7OykKIAkJewogCQkJ LyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICov CiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2hfbGFzdChwYWdlLCBzby0+aGFzaHNvX3NrX2hh c2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBw YWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9p dGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAog CQkJaWYgKGl0ZW1JbmRleCAhPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCiAJCQkJYnJlYWs7CiAK IAkJCS8qCi0JCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBj dXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRoZSBwcmV2aW91cyBwYWdlLiBCZWZvcmUgbGVh dmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgKLQkJCSAqIGFueSBraWxsZWQgaXRlbXMu CisJCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50 IHBhZ2UsIHRyeSB0bworCQkJICogbW92ZSB0byB0aGUgcHJldmlvdXMgcGFnZQogCQkJICovCi0J CQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQot CQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQlz by0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCW5leHRf Ymxrbm8gPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKLQogCQkJX2hhc2hfcmVhZHByZXYoc2Nh biwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmKSkKLQkJ CXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0JCQkJc28tPmN1cnJQb3MuY3VyclBhZ2Ug PSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8q Ci0JCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVycyBmb3Igc2Ny b2xsYWJsZQotCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRpb24gYW5kIHJl dHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxl cyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdlIG9yIGxzbiwg YmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJlIGNhbGxlZCBm b3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1cm5zLgotCQkJ CSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJ CXNvLT5jdXJyUG9zLm5leHRQYWdlID0gbmV4dF9ibGtubzsKLQkJCQlzby0+Y3VyclBvcy5idWYg PSBidWY7CisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnVmKSkKIAkJCQlyZXR1cm4gZmFsc2U7Ci0J CQl9CisKKwkJCWhhc2hiYXRjaC0+YnVmID0gYnVmOworCQkJaGFzaGJhdGNoLT5jdXJyUGFnZSA9 IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAJCX0KIAotCQlzby0+Y3VyclBvcy5maXJzdEl0 ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQ ZXJQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4SW5kZXhUdXBsZXNQZXJQ YWdlIC0gMTsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJYmF0Y2gtPmxhc3RJ dGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKIAl9CiAKLQlpZiAoc28tPmN1cnJQb3Mu YnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQlzby0+Y3VyclBvcy5idWYgPT0gc28t Pmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCS8qCisJICogU2F2ZWQgYXQgbGVhc3Qgb25lIG1h dGNoIGluIGJhdGNoLml0ZW1zW10uICBQcmVwYXJlIGZvciBoYXNoZ2V0YmF0Y2ggdG8KKwkgKiBy ZXR1cm4gaXQgYnkgaW5pdGlhbGl6aW5nIHJlbWFpbmluZyB1bmluaXRpYWxpemVkIGZpZWxkcy4K KwkgKi8KKwlpZiAoaGFzaGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJ CWhhc2hiYXRjaC0+YnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKIAl7Ci0JCXNv LT5jdXJyUG9zLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlzby0+Y3VyclBvcy5u ZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlMb2NrQnVmZmVyKHNvLT5jdXJy UG9zLmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJLyoKKwkJICogQmF0Y2gncyBidWZmZXIg aXMgZWl0aGVyIHRoZSBwcmltYXJ5IGJ1Y2tldCwgb3IgYSBidWNrZXQgYmVpbmcKKwkJICogcG9w dWxhdGVkIGR1ZSB0byBhIHNwbGl0LgorCQkgKgorCQkgKiBJbmNyZW1lbnQgbG9jYWwgcmVmZXJl bmNlIGNvdW50IHNvIHRoYXQgYmF0Y2ggZ2V0cyBhbiBpbmRlcGVuZGVudAorCQkgKiBidWZmZXIg cmVmZXJlbmNlIHRoYXQgY2FuIGJlIHJlbGVhc2VkIChieSB0aGUgY29yZSBjb2RlL3RhYmxlIEFN KQorCQkgKiBiZWZvcmUgdGhlIGhhc2hzb19idWNrZXRfYnVmL2hhc2hzb19zcGxpdF9idWNrZXRf YnVmIHJlZmVyZW5jZXMgYXJlCisJCSAqIHJlbGVhc2VkLgorCQkgKi8KKwkJSW5jckJ1ZmZlclJl ZkNvdW50KGhhc2hiYXRjaC0+YnVmKTsKKworCQkvKiBDYW4gb25seSB1c2Ugb3BhcXVlLT5oYXNo b19uZXh0Ymxrbm8gKi8KKwkJaGFzaGJhdGNoLT5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJl cjsKKwkJaGFzaGJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0K IAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJldmJs a25vOwotCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwot CQlfaGFzaF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlzby0+Y3VyclBvcy5idWYg PSBJbnZhbGlkQnVmZmVyOworCQkvKiBDYW4gdXNlIG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vIGFu ZCBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLworCQloYXNoYmF0Y2gtPnByZXZQYWdlID0gb3Bh cXVlLT5oYXNob19wcmV2Ymxrbm87CisJCWhhc2hiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhh c2hvX25leHRibGtubzsKIAl9CiAKLQlBc3NlcnQoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNv LT5jdXJyUG9zLmxhc3RJdGVtKTsKKwkvKiB3ZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGlu IGJhdGNoLml0ZW1zW10gKi8KKwlpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKHNjYW4sIGJhdGNo LCBoYXNoYmF0Y2gtPmJ1Zik7CisKKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+ bGFzdEl0ZW0pOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogTG9hZCBhbGwgdGhlIHF1YWxp ZmllZCBpdGVtcyBmcm9tIGEgY3VycmVudCBpbmRleCBwYWdlCi0gKiBpbnRvIHNvLT5jdXJyUG9z LiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgorICogaW50byBiYXRjaC4gSGVs cGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4KICAqLwogc3RhdGljIGludAogX2hhc2hf bG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJ CQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKKwkJCQkJCSAgIE9m ZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7CkBAIC02NDAsNyArNTgxLDcgQEAgX2hhc2hf bG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQkJ X2hhc2hfY2hlY2txdWFsKHNjYW4sIGl0dXApKQogCQkJewogCQkJCS8qIHR1cGxlIGlzIHF1YWxp ZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZlaXRlbShzbywgaXRlbUluZGV4 LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJhdGNoLCBpdGVtSW5kZXgsIG9m Zm51bSwgaXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7CiAJCQl9CiAJCQllbHNlCkBAIC02ODcsNyAr NjI4LDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQ YWdlIHBhZ2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4LS07CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlm aWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgs IG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2Zm bnVtLCBpdHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcwNiwxMyArNjQ3LDE0IEBAIF9o YXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAog CX0KIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRl bUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gYmF0Y2gtPml0ZW1zW2l0ZW1J bmRleF0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFx dWUgc28sIGludCBpdGVtSW5kZXgsCitfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRj aCwgaW50IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUg aXR1cCkKIHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1z W2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVt c1tpdGVtSW5kZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKKwljdXJy SXRlbS0+dGFibGVUaWQgPSBpdHVwLT50X3RpZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBv ZmZudW07CisJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gMDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNodXRpbC5jCmluZGV4IDNlMTYxMTlkMC4uMzMxZDVmNGRhIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2h1dGlsLmMKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9oYXNoLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nh bi5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKQEAgLTMzLDcgKzMyLDcgQEAgX2hhc2hf Y2hlY2txdWFsKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBpdHVwKQogCS8qCiAJICog Q3VycmVudGx5LCB3ZSBjYW4ndCBjaGVjayBhbnkgb2YgdGhlIHNjYW4gY29uZGl0aW9ucyBzaW5j ZSB3ZSBkbyBub3QKIAkgKiBoYXZlIHRoZSBvcmlnaW5hbCBpbmRleCBlbnRyeSB2YWx1ZSB0byBz dXBwbHkgdG8gdGhlIHNrX2Z1bmMuIEFsd2F5cwotCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3Qg dGhhdCBoYXNoZ2V0dHVwbGUgYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZworCSAqIHJldHVy biB0cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0YmF0Y2ggYWxyZWFkeSBzZXQgdGhlIHJlY2hl Y2sgZmxhZwogCSAqIHRvIG1ha2UgdGhlIG1haW4gaW5kZXhzY2FuIGNvZGUgZG8gaXQuCiAJICov CiAjaWZkZWYgTk9UX1VTRUQKQEAgLTUwNSwxMjkgKzUwNCwzIEBAIF9oYXNoX2dldF9uZXdidWNr ZXRfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAogCXJl dHVybiBuZXdfYnVja2V0OwogfQotCi0vKgotICogX2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9E RUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3 ZXJlIGtpbGxlZC4KLSAqCi0gKiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJv dWdoIHNvLCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBh bmQga2lsbGVkIHR1cGxlcyB0aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUK LSAqIGNhbGxlZCBpZiBzby0+bnVtS2lsbGVkID4gMCkuCi0gKgotICogVGhlIGNhbGxlciBkb2Vz IG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgcGFnZSBhbmQgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUK LSAqIHBhZ2UgcGlubmVkIGluIGEgYnVmZmVyLiAgTm90ZSB0aGF0IHJlYWQtbG9jayBpcyBzdWZm aWNpZW50IGZvciBzZXR0aW5nCi0gKiBMUF9ERUFEIHN0YXR1cyAod2hpY2ggaXMgb25seSBhIGhp bnQpLgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBpbiBvbiBidWNrZXQgYnVmZmVyLCBi dXQgbWF5IG9yIG1heSBub3QgaGF2ZSBwaW4KLSAqIG9uIG92ZXJmbG93IGJ1ZmZlciwgYXMgaW5k aWNhdGVkIGJ5IEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpLgotICoKLSAqIFdlIG1h dGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQg b25lcyB0bwotICogZGVsZXRlLgotICoKLSAqIFRoZXJlIGFyZSBuZXZlciBhbnkgc2NhbnMgYWN0 aXZlIGluIGEgYnVja2V0IGF0IHRoZSB0aW1lIFZBQ1VVTSBiZWdpbnMsCi0gKiBiZWNhdXNlIFZB Q1VVTSB0YWtlcyBhIGNsZWFudXAgbG9jayBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQg c2NhbnMKLSAqIGhvbGQgYSBwaW4uICBBIHNjYW4gY2FuIGJlZ2luIGFmdGVyIFZBQ1VVTSBsZWF2 ZXMgdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UKLSAqIGJ1dCBiZWZvcmUgaXQgZmluaXNoZXMgdGhl IGVudGlyZSBidWNrZXQsIGJ1dCBpdCBjYW4gbmV2ZXIgcGFzcyBWQUNVVU0sCi0gKiBiZWNhdXNl IFZBQ1VVTSBhbHdheXMgbG9ja3MgdGhlIG5leHQgcGFnZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBs b2NrIG9uCi0gKiB0aGUgcHJldmlvdXMgb25lLiAgVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRv IHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseQotICoga2lsbGluZyBhIFRJRCB0aGF0IGhhcyBiZWVu IHJldXNlZCBmb3IgYW4gdW5yZWxhdGVkIHR1cGxlLgotICovCi12b2lkCi1faGFzaF9raWxsX2l0 ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nh bk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247Ci0JQmxvY2tOdW1iZXIgYmxrbm87Ci0JQnVmZmVyCQlidWY7Ci0JUGFnZQkJcGFnZTsKLQlI YXNoUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQltYXhvZmY7 Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKLQlpbnQJCQlpOwotCWJvb2wJCWtp bGxlZHNvbWV0aGluZyA9IGZhbHNlOwotCWJvb2wJCWhhdmVQaW4gPSBmYWxzZTsKLQotCUFzc2Vy dChzby0+bnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKTsK LQlBc3NlcnQoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKgotCSAqIEFs d2F5cyByZXNldCB0aGUgc2NhbiBzdGF0ZSwgc28gd2UgZG9uJ3QgbG9vayBmb3Igc2FtZSBpdGVt cyBvbiBvdGhlcgotCSAqIHBhZ2VzLgotCSAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JYmxr bm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKLQlpZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+ Y3VyclBvcykpCi0JewotCQkvKgotCQkgKiBXZSBhbHJlYWR5IGhhdmUgcGluIG9uIHRoaXMgYnVm ZmVyLCBzbywgYWxsIHdlIG5lZWQgdG8gZG8gaXMKLQkJICogYWNxdWlyZSBsb2NrIG9uIGl0Lgot CQkgKi8KLQkJaGF2ZVBpbiA9IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJTG9j a0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKLQl9Ci0JZWxzZQotCQlidWYgPSBfaGFz aF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7Ci0Jb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFn ZSk7Ci0JbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKLQotCWZvciAoaSA9 IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykKLQl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxs ZWRJdGVtc1tpXTsKLQkJSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tpdGVtSW5kZXhdOwotCi0JCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKLQot CQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRl bUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQotCQl3aGlsZSAob2ZmbnVtIDw9IG1h eG9mZikKLQkJewotCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7 Ci0JCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBp aWQpOwotCi0JCQlpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRl bS0+aGVhcFRpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewotCQkJ CQkvKgotCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlm IHdlIGNhbgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hh cmUgbG9jay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50 IGNvbnRpbnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMo c28tPmN1cnJQb3MuYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJ LyogZm91bmQgdGhlIGl0ZW0gKi8KLQkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOwotCQkJCWtpbGxl ZHNvbWV0aGluZyA9IHRydWU7Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBs b29wICovCi0JCQl9Ci0JCQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7Ci0JCX0K LQl9Ci0KLQkvKgotCSAqIFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQs IG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIKLQkgKiB3ZSBtYXJrIGFueXRoaW5nIExQX0RF QUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKLQkgKiBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBm bGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGludC4KLQkgKi8KLQlpZiAoa2lsbGVkc29t ZXRoaW5nKQotCXsKLQkJb3BhcXVlLT5oYXNob19mbGFnIHw9IExIX1BBR0VfSEFTX0RFQURfVFVQ TEVTOwotCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhzby0+Y3VyclBvcy5idWYsIHRydWUsIHRy dWUpOwotCX0KLQotdW5sb2NrX3BhZ2U6Ci0JaWYgKHNvLT5oYXNoc29fYnVja2V0X2J1ZiA9PSBz by0+Y3VyclBvcy5idWYgfHwKLQkJaGF2ZVBpbikKLQkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5i dWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0JZWxzZQotCQlfaGFzaF9yZWxidWYocmVsLCBidWYp OwotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA0ZDQ3MGEwNTEuLjc2YzI2ZWE0NiAx MDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyMDUsOCArMTIwNSw2IEBAIEhhc2hQYWdl U3RhdAogSGFzaFBhdGgKIEhhc2hTY2FuT3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEKLUhhc2hT Y2FuUG9zRGF0YQotSGFzaFNjYW5Qb3NJdGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0YXRlCiBI YXNoVmFsdWVGdW5jCi0tIAoyLjUzLjAKCg== --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0016-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Disposition: attachment; filename="v13-0016-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv38984 RnJvbSBmYTdjYTk0NTk1NzVmODg0NDNkMDg4NWY1MTgwNGFkZDhiNTg3YTRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNzoyNToyNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEzIDE2 LzE5XSBXSVA6IHJlYWRfc3RyZWFtOiBQcmV2ZW50IGRpc3RhbmNlIGZyb20gZGVjYXlpbmcKIHRv byBxdWlja2x5CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYyB8IDMzICsrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDMw IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRf c3RyZWFtLmMKaW5kZXggZTI4YWI1ZGUwLi5lM2MxNmJkMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vcmVhZF9zdHJlYW0uYwpAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgUmVhZFN0cmVhbQogCWlu dDE2CQlmb3J3YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7CiAJaW50MTYJ CWRpc3RhbmNlOworCXVpbnQxNgkJZGlzdGFuY2VfZGVjYXlfaG9sZG9mZjsKIAlpbnQxNgkJaW5p dGlhbGl6ZWRfYnVmZmVyczsKIAlpbnQxNgkJcmVzdW1lX2Rpc3RhbmNlOwogCWludAkJCXJlYWRf YnVmZmVyc19mbGFnczsKQEAgLTM2NCw5ICszNjUsMjIgQEAgcmVhZF9zdHJlYW1fc3RhcnRfcGVu ZGluZ19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkvKiBSZW1lbWJlciB3aGV0aGVyIHdlIG5l ZWQgdG8gd2FpdCBiZWZvcmUgcmV0dXJuaW5nIHRoaXMgYnVmZmVyLiAqLwogCWlmICghbmVlZF93 YWl0KQogCXsKLQkJLyogTG9vay1haGVhZCBkaXN0YW5jZSBkZWNheXMsIG5vIEkvTyBuZWNlc3Nh cnkuICovCi0JCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSkKLQkJCXN0cmVhbS0+ZGlzdGFuY2Ut LTsKKwkJLyoKKwkJICogSWYgdGhlcmUgY3VycmVudGx5IGlzIG5vIElPIGluIHByb2dyZXNzLCBh bmQgd2UgaGF2ZSBub3QgbmVlZGVkIHRvCisJCSAqIGlzc3VlIElPIHJlY2VudGx5LCBkZWNheSB0 aGUgbG9vay1haGVhZCBkaXN0YW5jZS4gIFdlIGRldGVjdCBpZiB3ZQorCQkgKiBoYWQgdG8gaXNz dWUgSU8gcmVjZW50bHkgYnkgaGF2aW5nIGEgZGVjYXkgaG9sZG9mZiB0aGF0J3Mgc2V0IHRvCisJ CSAqIHRoZSBtYXggbG9va2FoZWFkIGRpc3RhbmNlIHdoZW5ldmVyIHdlIG5lZWQgdG8gZG8gSU8u ICBUaGlzIGlzCisJCSAqIGltcG9ydGFudCB0byBlbnN1cmUgd2UgZXZlbnR1YWxseSByZWFjaCBh IGhpZ2ggZW5vdWdoIGRpc3RhbmNlIHRvCisJCSAqIHBlcmZvcm0gSU8gYXN5bmNocm9ub3VzbHkg d2hlbiBzdGFydGluZyBvdXQgd2l0aCBhIHNtYWxsIGxvb2thaGVhZAorCQkgKiBkaXN0YW5jZS4K KwkJICovCisJCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSAmJiBzdHJlYW0tPmlvc19pbl9wcm9n cmVzcyA9PSAwKQorCQl7CisJCQlpZiAoc3RyZWFtLT5kaXN0YW5jZV9kZWNheV9ob2xkb2ZmID09 IDApCisJCQkJc3RyZWFtLT5kaXN0YW5jZS0tOworCQkJZWxzZQorCQkJCXN0cmVhbS0+ZGlzdGFu Y2VfZGVjYXlfaG9sZG9mZi0tOworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC03MDIsNiArNzE2LDcg QEAgcmVhZF9zdHJlYW1fYmVnaW5faW1wbChpbnQgZmxhZ3MsCiAJc3RyZWFtLT5zZXFfYmxvY2tu dW0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJc3RyZWFtLT5zZXFfdW50aWxfcHJvY2Vzc2VkID0g SW52YWxpZEJsb2NrTnVtYmVyOwogCXN0cmVhbS0+dGVtcG9yYXJ5ID0gU21ncklzVGVtcChzbWdy KTsKKwlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5X2hvbGRvZmYgPSAwOwogCiAJLyoKIAkgKiBTa2lw IHRoZSBpbml0aWFsIHJhbXAtdXAgcGhhc2UgaWYgdGhlIGNhbGxlciBzYXlzIHdlJ3JlIGdvaW5n IHRvIGJlCkBAIC05NDQsNiArOTU5LDE4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJaWYgKCsrc3RyZWFtLT5v bGRlc3RfaW9faW5kZXggPT0gc3RyZWFtLT5tYXhfaW9zKQogCQkJc3RyZWFtLT5vbGRlc3RfaW9f aW5kZXggPSAwOwogCisJCS8qCisJCSAqIEFzIHdlIG5lZWRlZCBJTywgcHJldmVudCBkaXN0YW5j ZSBmcm9tIGJlaW5nIHJlZHVjZWQgd2l0aGluIG91cgorCQkgKiBtYXhpbXVtIGxvb2thaGVhZCB3 aW5kb3cuIFRoaXMgYXZvaWRzIGhhdmluZyBkaXN0YW5jZSBjb2xsYXBzZSB0b28KKwkJICogcXVp Y2tseSBpbiB3b3JrbG9hZHMgd2hlcmUgbW9zdCBvZiB0aGUgcmVxdWlyZWQgYmxvY2tzIGFyZSBj YWNoZWQsCisJCSAqIGJ1dCB3aGVyZSB0aGUgcmVtYWluaW5nIElPcyBhcmUgYSBzdWZmaWNpZW50 IGVub3VnaCBmYWN0b3IgdG8gY2F1c2UKKwkJICogYSBzdWJzdGFudGlhbCBzbG93ZG93biBpZiBl eGVjdXRlZCBzeW5jaHJvbm91c2x5LgorCQkgKgorCQkgKiBYWFg6IE5vdCBvYnZpb3VzIHdoZXRo ZXIgd2Ugc2hvdWxkIHVzZSBtYXhfaW9zIG9yCisJCSAqIG1heF9waW5uZWRfYnVmZmVycy4gT3Ig c29tZXRoaW5nIGVsc2UgZW50aXJlbHkuCisJCSAqLworCQlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5 X2hvbGRvZmYgPSBzdHJlYW0tPm1heF9pb3M7CisKIAkJLyoKIAkJICogTG9vay1haGVhZCBkaXN0 YW5jZSByYW1wcyB1cCByYXBpZGx5IGFmdGVyIHdlIG5lZWRlZCB0byB3YWl0IGZvcgogCQkgKiBJ Ty4gV2Ugb25seSBpbmNyZWFzZSB0aGUgZGlzdGFuY2Ugd2hlbiB3ZSBuZWVkZWQgdG8gd2FpdCwg dG8gYXZvaWQKLS0gCjIuNTMuMAoK --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0018-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v13-0018-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv38912 RnJvbSA1YTkwNDJjMmMyNzNiMTljZjU5NzgwYzU4NDYyY2U4YzU5MmZjMzBlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MzI6NTIgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMyAxOC8xOV0g QWRkIGZha2UgTFNOIHN1cHBvcnQgdG8gaGFzaCBpbmRleCBBTS4KClRoaXMgaXMgcHJlcGFyYXRp b24gZm9yIGFuIHVwY29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50 ZXJmYWNlIGFuZCBzd2l0Y2ggaGFzaCBvdmVyIHRvIGl0IChmcm9tIGFtZ2V0dHVwbGUpLiAgV2Ug bmVlZCBmYWtlCkxTTnMgdG8gbWFrZSBpdCBzYWZlIHRvIGFwcGx5IGJlaGF2aW9yIHRoYXQgaXMg ZXF1aXZhbGVudCB0byBuYnRyZWUncwpwcmV2aW91cyBkcm9wUGluIGJlaGF2aW9yIHRoYXQgd29y a3Mgd2l0aCB1bmxvZ2dlZCBoYXNoIGluZGV4IHNjYW5zLgoKVGhlIGNvbW1pdCB0aGF0IHdpbGwg YWRkIGhhc2hnZXRiYXRjaCB3aWxsIHJlcGxhY2UgX2hhc2hfa2lsbF9pdGVtcyB3aXRoCmEgbmV3 IGhhc2hraWxsaXRlbXNiYXRjaCByb3V0aW5lLiAgVGhpcyB3aWxsIGJlIHZlcnkgc2ltaWxhciB0 byB0aGUKYnRraWxsaXRlbXNiYXRjaCByb3V0aW5lIGFkZGVkIGJ5IGNvbW1pdCBYWFhYWC4gIElu IHBhcnRpY3VsYXIsIGl0IHdpbGwKdXNlIHRoZSBzYW1lICJkaWQgdGhlIGluZGV4IHBhZ2UncyBM U04gY2hhbmdlIHNpbmNlIHRoZSBwYWdlIHdhcyBmaXJzdApyZWFkPyIgdHJpY2suCgpBdXRob3I6 IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1oYiswRHIySzBEdGdA bWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAgMjEgKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYyB8ICAyMCAr KystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYyAgIHwgMTExICsrKysrKysr KysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyAg IHwgIDIyICsrKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDUgaW5zZXJ0aW9ucygrKSwgNjkgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDViNWM1YzZmYS4uOTI4MjRhYTVk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC00NzYsNiArNDc2LDcgQEAgaGFzaGJ1bGtkZWxl dGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAog CUJ1ZmZlcgkJbWV0YWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJSGFzaE1ldGFQYWdlIG1ldGFwOwog CUhhc2hNZXRhUGFnZSBjYWNoZWRtZXRhcDsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCXR1cGxl c19yZW1vdmVkID0gMDsKIAludW1faW5kZXhfdHVwbGVzID0gMDsKQEAgLTYxNSw3ICs2MTYsNiBA QCBsb29wX3RvcDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF91 cGRhdGVfbWV0YV9wYWdlIHhscmVjOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCQl4bHJlYy5u dHVwbGVzID0gbWV0YXAtPmhhc2htX250dXBsZXM7CiAKQEAgLTYyNSw4ICs2MjUsMTEgQEAgbG9v cF90b3A6CiAJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBtZXRhYnVmLCBSRUdCVUZfU1RBTkRBUkQp OwogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1VQREFURV9N RVRBX1BBR0UpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7 CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04o KTsKIApAQCAtNjk5LDYgKzcwMiw3IEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwg QnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCUJ1ZmZlcgkJYnVmOwogCUJ1 Y2tldAkJbmV3X2J1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSBJbnZhbGlkQnVja2V0 OwogCWJvb2wJCWJ1Y2tldF9kaXJ0eSA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJ Ymxrbm8gPSBidWNrZXRfYmxrbm87CiAJYnVmID0gYnVja2V0X2J1ZjsKQEAgLTgyMSw3ICs4MjUs NiBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBC dWZmZXIgYnVja2V0X2J1ZiwKIAkJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJCQl7CiAJ CQkJeGxfaGFzaF9kZWxldGUgeGxyZWM7Ci0JCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJCQl4 bHJlYy5jbGVhcl9kZWFkX21hcmtpbmcgPSBjbGVhcl9kZWFkX21hcmtpbmc7CiAJCQkJeGxyZWMu aXNfcHJpbWFyeV9idWNrZXRfcGFnZSA9IChidWYgPT0gYnVja2V0X2J1Zik7CkBAIC04NDYsOCAr ODQ5LDExIEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNr ZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCQkJCQkJCQkJbmRlbGV0YWJsZSAqIHNpemVvZihPZmZz ZXROdW1iZXIpKTsKIAogCQkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19I QVNIX0RFTEVURSk7Ci0JCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJlY3B0cik7 CiAJCQl9CisJCQllbHNlCisJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQkJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJlY3B0cik7CiAKIAkJCUVORF9DUklUX1NF Q1RJT04oKTsKIAkJfQpAQCAtOTA2LDE0ICs5MTIsMTUgQEAgaGFzaGJ1Y2tldGNsZWFudXAoUmVs YXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwgQnVmZmVyIGJ1Y2tldF9idWYsCiAJCS8qIFhM T0cgc3R1ZmYgKi8KIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJewotCQkJWExvZ1Jl Y1B0cglyZWNwdHI7Ci0KIAkJCVhMb2dCZWdpbkluc2VydCgpOwogCQkJWExvZ1JlZ2lzdGVyQnVm ZmVyKDAsIGJ1Y2tldF9idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJCXJlY3B0ciA9IFhMb2dJ bnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NQTElUX0NMRUFOVVApOwotCQkJUGFnZVNldExT TihwYWdlLCByZWNwdHIpOwogCQl9CisJCWVsc2UKKwkJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNO KHJlbCk7CisKKwkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJCUVORF9DUklUX1NFQ1RJ T04oKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0 LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKaW5kZXggMGNlZmJhY2M5 Li4zMzk1YmJjMTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNl cnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKQEAgLTUwLDYg KzUwLDcgQEAgX2hhc2hfZG9pbnNlcnQoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXAsIFJl bGF0aW9uIGhlYXBSZWwsIGJvb2wgc29ydGVkKQogCXVpbnQzMgkJaGFzaGtleTsKIAlCdWNrZXQJ CWJ1Y2tldDsKIAlPZmZzZXROdW1iZXIgaXR1cF9vZmY7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAK IAkvKgogCSAqIEdldCB0aGUgaGFzaCBrZXkgZm9yIHRoZSBpdGVtIChpdCdzIHN0b3JlZCBpbiB0 aGUgaW5kZXggdHVwbGUgaXRzZWxmKS4KQEAgLTIxNiw3ICsyMTcsNiBAQCByZXN0YXJ0X2luc2Vy dDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9pbnNlcnQgeGxy ZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm9mZm51bSA9IGl0dXBfb2ZmOwog CkBAIC0yMjksMTAgKzIyOSwxMiBAQCByZXN0YXJ0X2luc2VydDoKIAkJWExvZ1JlZ2lzdGVyQnVm RGF0YSgwLCBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVwKSk7CiAKIAkJcmVjcHRyID0gWExvZ0lu c2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfSU5TRVJUKTsKLQotCQlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFi dWYpLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7 CisKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNO KEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7 CiAKQEAgLTM3Miw2ICszNzQsNyBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVs LCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAlQYWdlCQlwYWdl ID0gQnVmZmVyR2V0UGFnZShidWYpOwogCUhhc2hQYWdlT3BhcXVlIHBhZ2VvcGFxdWU7CiAJSGFz aE1ldGFQYWdlIG1ldGFwOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogU2NhbiBlYWNoIHR1 cGxlIGluIHBhZ2UgdG8gc2VlIGlmIGl0IGlzIG1hcmtlZCBhcyBMUF9ERUFEICovCiAJbWF4b2Zm ID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKQEAgLTQyNCw3ICs0MjcsNiBAQCBfaGFz aF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0 YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJewogCQkJ eGxfaGFzaF92YWN1dW1fb25lX3BhZ2UgeGxyZWM7Ci0JCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAog CQkJeGxyZWMuaXNDYXRhbG9nUmVsID0gUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNv ZGluZyhocmVsKTsKIAkJCXhscmVjLnNuYXBzaG90Q29uZmxpY3RIb3Jpem9uID0gc25hcHNob3RD b25mbGljdEhvcml6b247CkBAIC00NDUsMTAgKzQ0NywxMiBAQCBfaGFzaF92YWN1dW1fb25lX3Bh Z2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1 ZikKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigxLCBtZXRhYnVmLCBSRUdCVUZfU1RBTkRBUkQpOwog CiAJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9WQUNVVU1fT05F X1BBR0UpOwotCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJ CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAkJfQorCQllbHNl CisJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCVBhZ2VTZXRMU04oQnVmZmVy R2V0UGFnZShidWYpLCByZWNwdHIpOworCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1 ZiksIHJlY3B0cik7CiAKIAkJRU5EX0NSSVRfU0VDVElPTigpOwogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaG92ZmwuYwppbmRleCA4Y2ZiNmNlNzUuLmFiZDFmOTFmYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNob3ZmbC5jCkBAIC0xMzIsNiArMTMyLDcgQEAgX2hhc2hfYWRkb3ZmbHBhZ2UoUmVsYXRp b24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZiwgYm9vbCByZXRhaW5fcGluKQogCXVp bnQzMgkJaSwKIAkJCQlqOwogCWJvb2wJCXBhZ2VfZm91bmQgPSBmYWxzZTsKKwlYTG9nUmVjUHRy CXJlY3B0cjsKIAogCS8qCiAJICogV3JpdGUtbG9jayB0aGUgdGFpbCBwYWdlLiAgSGVyZSwgd2Ug bmVlZCB0byBtYWludGFpbiBsb2NraW5nIG9yZGVyIHN1Y2gKQEAgLTM4MSw3ICszODIsNiBAQCBm b3VuZDoKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7 Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9oYXNoX2FkZF9vdmZsX3BhZ2UgeGxyZWM7CiAK IAkJeGxyZWMuYm1wYWdlX2ZvdW5kID0gcGFnZV9mb3VuZDsKQEAgLTQwOCwxOCArNDA4LDIwIEBA IGZvdW5kOgogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDQsICZtZXRhcC0+aGFzaG1fZmlyc3RmcmVl LCBzaXplb2YodWludDMyKSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBY TE9HX0hBU0hfQUREX09WRkxfUEFHRSk7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92 ZmxidWYpLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRy KTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChtYXBidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJH ZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7Ci0KLQkJaWYgKEJ1ZmZlcklzVmFsaWQobmV3bWFwYnVm KSkKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXdtYXBidWYpLCByZWNwdHIpOwotCi0J CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAl9CisJZWxzZQor CQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKG92ZmxidWYpLCByZWNwdHIpOworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWYpLCBy ZWNwdHIpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQobWFwYnVmKSkKKwkJUGFnZVNldExTTihCdWZm ZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7CisKKwlpZiAoQnVmZmVySXNWYWxpZChuZXdtYXBi dWYpKQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobmV3bWFwYnVmKSwgcmVjcHRyKTsKKwor CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklU X1NFQ1RJT04oKTsKIApAQCAtNTEwLDcgKzUxMiwxMSBAQCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVs YXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAlCdWNrZXQJCWJ1 Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJQnVmZmVyCQlwcmV2YnVmID0gSW52YWxp ZEJ1ZmZlcjsKIAlCdWZmZXIJCW5leHRidWYgPSBJbnZhbGlkQnVmZmVyOwotCWJvb2wJCXVwZGF0 ZV9tZXRhcCA9IGZhbHNlOworCWJvb2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlLAorCQkJCW1vZF93 YnVmLAorCQkJCWlzX3ByaW1fYnVja2V0X3NhbWVfd3J0LAorCQkJCWlzX3ByZXZfYnVja2V0X3Nh bWVfd3J0OworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogR2V0IGluZm9ybWF0aW9uIGZyb20g dGhlIGRvb21lZCBwYWdlICovCiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgb3ZmbGJ1ZiwgTEhfT1ZF UkZMT1dfUEFHRSk7CkBAIC02NDEsMTkgKzY0NywyMSBAQCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVs YXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJTWFya0J1ZmZl ckRpcnR5KG1ldGFidWYpOwogCX0KIAorCS8qIERldGVybWluZSB3aGljaCBwYWdlcyBXQUwgcmVj b3JkIG1vZGlmaWVzICovCisJbW9kX3didWYgPSBmYWxzZTsKKwlpc19wcmltX2J1Y2tldF9zYW1l X3dydCA9ICh3YnVmID09IGJ1Y2tldGJ1Zik7CisJaXNfcHJldl9idWNrZXRfc2FtZV93cnQgPSAo d2J1ZiA9PSBwcmV2YnVmKTsKKwogCS8qIFhMT0cgc3R1ZmYgKi8KIAlpZiAoUmVsYXRpb25OZWVk c1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9zcXVlZXplX3BhZ2UgeGxyZWM7Ci0JCVhMb2dSZWNQ dHIJcmVjcHRyOwotCQlpbnQJCQlpOwotCQlib29sCQltb2Rfd2J1ZiA9IGZhbHNlOwogCiAJCXhs cmVjLnByZXZibGtubyA9IHByZXZibGtubzsKIAkJeGxyZWMubmV4dGJsa25vID0gbmV4dGJsa25v OwogCQl4bHJlYy5udHVwcyA9IG5pdHVwczsKLQkJeGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93 cnQgPSAod2J1ZiA9PSBidWNrZXRidWYpOwotCQl4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dy dCA9ICh3YnVmID09IHByZXZidWYpOworCQl4bHJlYy5pc19wcmltX2J1Y2tldF9zYW1lX3dydCA9 IGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0OworCQl4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dy dCA9IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OwogCiAJCVhMb2dCZWdpbkluc2VydCgpOwogCQlY TG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGFzaFNxdWVlemVQYWdlKTsKQEAgLTY2Miwx NCArNjcwLDE0IEBAIF9oYXNoX2ZyZWVvdmZscGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNr ZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCQkgKiBidWNrZXQgYnVmZmVyIHdhcyBub3QgY2hhbmdl ZCwgYnV0IHN0aWxsIG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQgdG8KIAkJICogZW5zdXJlIHRoYXQg d2UgY2FuIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gaXQgZHVyaW5nIHJlcGxheS4KIAkJICov Ci0JCWlmICgheGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCisJCWlmICghaXNfcHJpbV9i dWNrZXRfc2FtZV93cnQpCiAJCXsKIAkJCXVpbnQ4CQlmbGFncyA9IFJFR0JVRl9TVEFOREFSRCB8 IFJFR0JVRl9OT19JTUFHRSB8IFJFR0JVRl9OT19DSEFOR0U7CiAKIAkJCVhMb2dSZWdpc3RlckJ1 ZmZlcigwLCBidWNrZXRidWYsIGZsYWdzKTsKIAkJfQogCi0JCWlmICh4bHJlYy5udHVwcyA+IDAp CisJCWlmIChuaXR1cHMgPiAwKQogCQl7CiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMSwgd2J1Ziwg UkVHQlVGX1NUQU5EQVJEKTsKIApAQCAtNjc4LDEwICs2ODYsMTAgQEAgX2hhc2hfZnJlZW92Zmxw YWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAKIAkJ CVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cF9vZmZzZXRzLAogCQkJCQkJCQluaXR1cHMgKiBz aXplb2YoT2Zmc2V0TnVtYmVyKSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbml0dXBzOyBpKyspCisJ CQlmb3IgKGludCBpID0gMDsgaSA8IG5pdHVwczsgaSsrKQogCQkJCVhMb2dSZWdpc3RlckJ1ZkRh dGEoMSwgaXR1cHNbaV0sIHR1cHNfc2l6ZVtpXSk7CiAJCX0KLQkJZWxzZSBpZiAoeGxyZWMuaXNf cHJpbV9idWNrZXRfc2FtZV93cnQgfHwgeGxyZWMuaXNfcHJldl9idWNrZXRfc2FtZV93cnQpCisJ CWVsc2UgaWYgKGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0IHx8IGlzX3ByZXZfYnVja2V0X3NhbWVf d3J0KQogCQl7CiAJCQl1aW50OAkJd2J1Zl9mbGFnczsKIApAQCAtNjkxLDEwICs2OTksMTAgQEAg X2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVy IG92ZmxidWYsCiAJCQkgKiBpZiBpdCBpcyB0aGUgc2FtZSBhcyBwcmltYXJ5IGJ1Y2tldCBidWZm ZXIgb3IgdXBkYXRlIHRoZQogCQkJICogbmV4dGJsa25vIGlmIGl0IGlzIHNhbWUgYXMgdGhlIHBy ZXZpb3VzIGJ1Y2tldCBidWZmZXIuCiAJCQkgKi8KLQkJCUFzc2VydCh4bHJlYy5udHVwcyA9PSAw KTsKKwkJCUFzc2VydChuaXR1cHMgPT0gMCk7CiAKIAkJCXdidWZfZmxhZ3MgPSBSRUdCVUZfU1RB TkRBUkQ7Ci0JCQlpZiAoIXhscmVjLmlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQorCQkJaWYgKCFp c19wcmV2X2J1Y2tldF9zYW1lX3dydCkKIAkJCXsKIAkJCQl3YnVmX2ZsYWdzIHw9IFJFR0JVRl9O T19DSEFOR0U7CiAJCQl9CkBAIC03MTQsNyArNzIyLDcgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJl bGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJCSAqIHByZXZw YWdlLiAgRHVyaW5nIHJlcGxheSwgd2UgY2FuIGRpcmVjdGx5IHVwZGF0ZSB0aGUgbmV4dGJsb2Nr IGluCiAJCSAqIHdyaXRlcGFnZS4KIAkJICovCi0JCWlmIChCdWZmZXJJc1ZhbGlkKHByZXZidWYp ICYmICF4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJaWYgKEJ1ZmZlcklzVmFsaWQo cHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQogCQkJWExvZ1JlZ2lzdGVyQnVm ZmVyKDMsIHByZXZidWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJaWYgKEJ1ZmZlcklzVmFsaWQo bmV4dGJ1ZikpCkBAIC03MzAsMjMgKzczOCwzMyBAQCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRp b24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJfQogCiAJCXJlY3B0 ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NRVUVFWkVfUEFHRSk7Ci0KLQkJ LyogU2V0IExTTiBpZmYgd2J1ZiBpcyBtb2RpZmllZC4gKi8KLQkJaWYgKG1vZF93YnVmKQotCQkJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04o QnVmZmVyR2V0UGFnZShvdmZsYnVmKSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChw cmV2YnVmKSAmJiAheGxyZWMuaXNfcHJldl9idWNrZXRfc2FtZV93cnQpCi0JCQlQYWdlU2V0TFNO KEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7Ci0JCWlmIChCdWZmZXJJc1ZhbGlkKG5l eHRidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG5leHRidWYpLCByZWNwdHIpOwot Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIpOwotCi0JCWlmICh1 cGRhdGVfbWV0YXApCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0 cik7CiAJfQorCWVsc2UJCQkJCQkvKiAhUmVsYXRpb25OZWVkc1dBTChyZWwpICovCisJeworCQly ZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCS8qIERldGVybWluZSBpZiB3YnVmIGlz IG1vZGlmaWVkICovCisJCWlmIChuaXR1cHMgPiAwKQorCQkJbW9kX3didWYgPSB0cnVlOworCQll bHNlIGlmIChpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJCW1vZF93YnVmID0gdHJ1ZTsKKwl9 CisKKwkvKiBTZXQgTFNOIGlmZiB3YnVmIGlzIG1vZGlmaWVkLiAqLworCWlmIChtb2Rfd2J1ZikK KwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNwdHIpOworCisJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQo cHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQorCQlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7CisJaWYgKEJ1ZmZlcklzVmFsaWQobmV4dGJ1Zikp CisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXh0YnVmKSwgcmVjcHRyKTsKKworCVBhZ2VT ZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIpOworCisJaWYgKHVwZGF0ZV9tZXRh cCkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIpOwogCiAJRU5E X0NSSVRfU0VDVElPTigpOwogCkBAIC05NTksNiArOTc3LDggQEAgcmVhZHBhZ2U6CiAKIAkJCQlp ZiAobml0dXBzID4gMCkKIAkJCQl7CisJCQkJCVhMb2dSZWNQdHIJcmVjcHRyOworCiAJCQkJCUFz c2VydChuaXR1cHMgPT0gbmRlbGV0YWJsZSk7CiAKIAkJCQkJLyoKQEAgLTk4Niw3ICsxMDA2LDYg QEAgcmVhZHBhZ2U6CiAJCQkJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJCQkJaWYgKFJlbGF0aW9uTmVl ZHNXQUwocmVsKSkKIAkJCQkJewotCQkJCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCQkJCQl4bF9o YXNoX21vdmVfcGFnZV9jb250ZW50cyB4bHJlYzsKIAogCQkJCQkJeGxyZWMubnR1cHMgPSBuaXR1 cHM7CkBAIC0xMDE4LDEwICsxMDM3LDEyIEBAIHJlYWRwYWdlOgogCQkJCQkJCQkJCQluZGVsZXRh YmxlICogc2l6ZW9mKE9mZnNldE51bWJlcikpOwogCiAJCQkJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0 KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9NT1ZFX1BBR0VfQ09OVEVOVFMpOwotCi0JCQkJCQlQYWdl U2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7Ci0JCQkJCQlQYWdlU2V0TFNOKEJ1 ZmZlckdldFBhZ2UocmJ1ZiksIHJlY3B0cik7CiAJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJcmVj cHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBh Z2Uod2J1ZiksIHJlY3B0cik7CisJCQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShyYnVmKSwg cmVjcHRyKTsKIAogCQkJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNocGFnZS5jCmluZGV4IDhlMjIwYTNhZS4uMjYzYmM3M2YxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hwYWdlLmMKQEAgLTYzMCw2ICs2MzAsNyBAQCBfaGFzaF9leHBhbmR0YWJsZShSZWxhdGlv biByZWwsIEJ1ZmZlciBtZXRhYnVmKQogCXVpbnQzMgkJbG93bWFzazsKIAlib29sCQltZXRhcF91 cGRhdGVfbWFza3MgPSBmYWxzZTsKIAlib29sCQltZXRhcF91cGRhdGVfc3BsaXRwb2ludCA9IGZh bHNlOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiByZXN0YXJ0X2V4cGFuZDoKIApAQCAtOTAwLDcg KzkwMSw2IEBAIHJlc3RhcnRfZXhwYW5kOgogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJ ewogCQl4bF9oYXNoX3NwbGl0X2FsbG9jYXRlX3BhZ2UgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJCXhscmVjLm5ld19idWNrZXQgPSBtYXhidWNrZXQ7CiAJCXhscmVjLm9sZF9idWNr ZXRfZmxhZyA9IG9vcGFxdWUtPmhhc2hvX2ZsYWc7CkBAIC05MzMsMTEgKzkzMywxMyBAQCByZXN0 YXJ0X2V4cGFuZDoKIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMsIFNpemVPZkhhc2hTcGxpdEFs bG9jUGFnZSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hf U1BMSVRfQUxMT0NBVEVfUEFHRSk7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Zl9v Ymxrbm8pLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmX25ibGtubyks IHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsK IAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOworCVBhZ2VTZXRMU04oQnVmZmVy R2V0UGFnZShidWZfbmJsa25vKSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uo bWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTEwOTIsNiAr MTA5NCw3IEBAIF9oYXNoX3NwbGl0YnVja2V0KFJlbGF0aW9uIHJlbCwKIAlTaXplCQlhbGxfdHVw c19zaXplID0gMDsKIAlpbnQJCQlpOwogCXVpbnQxNgkJbml0dXBzID0gMDsKKwlYTG9nUmVjUHRy CXJlY3B0cjsKIAogCWJ1Y2tldF9vYnVmID0gb2J1ZjsKIAlvcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo b2J1Zik7CkBAIC0xMjk2LDcgKzEyOTksNiBAQCBfaGFzaF9zcGxpdGJ1Y2tldChSZWxhdGlvbiBy ZWwsCiAKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKLQkJWExvZ1JlY1B0cglyZWNw dHI7CiAJCXhsX2hhc2hfc3BsaXRfY29tcGxldGUgeGxyZWM7CiAKIAkJeGxyZWMub2xkX2J1Y2tl dF9mbGFnID0gb29wYXF1ZS0+aGFzaG9fZmxhZzsKQEAgLTEzMTAsMTAgKzEzMTIsMTIgQEAgX2hh c2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMSwgYnVj a2V0X25idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9I QVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQ09NUExFVEUpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVy R2V0UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFn ZShidWNrZXRfbmJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZh a2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRfb2J1ZiksIHJl Y3B0cik7CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Y2tldF9uYnVmKSwgcmVjcHRyKTsK IAogCUVORF9DUklUX1NFQ1RJT04oKTsKIAotLSAKMi41My4wCgo= --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0001-Extract-fake-LSN-infrastructure-from-GiST-index-.patch" Content-Disposition: attachment; filename="v13-0001-Extract-fake-LSN-infrastructure-from-GiST-index-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv388p0 RnJvbSA0NTljNWY2ZGM0MTFiNDBhOGFkOWE1NDZmYTA2ZTc5OWQwMGEzMTE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTg6MTEgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMyAwMS8xOV0g RXh0cmFjdCBmYWtlIExTTiBpbmZyYXN0cnVjdHVyZSBmcm9tIEdpU1QgaW5kZXggQU0uCgpFeHRy YWN0IHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgR2lTVCB0byBnZW5lcmF0ZSBmYWtlIExTTnMg c28gdGhhdApvdGhlciBpbmRleCBBTXMgY2FuIHJldXNlIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgdG8g Z2VuZXJhdGUgZmFrZSBMU05zLgoKUHJlcGFyYXRpb24gZm9yIGFuIHVwY29taW5nIGNvbW1pdCB0 aGF0IHdpbGwgY2hhbmdlIHRoZSBydWxlcyBhcm91bmQKaG9sZGluZyBvbiB0byBidWZmZXIgcGlu cyBvbiBsZWFmIHBhZ2VzIGluIHVubG9nZ2VkIG5idHJlZSBpbmRleGVzCihhY3R1YWxseSwgaW4g YWxsIGNhc2VzIGJhcnJpbmcgc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdCkuClRo aXMgaXMgdGhlIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIG5ldyBhbWdldGJhdGNoIGludGVyZmFj ZS4gIEFub3RoZXIKcHJlcGFyYXRvcnkgY29tbWl0IHdpbGwgYWRkIGZha2UgTFNOIHN1cHBvcnQg dG8gbmJ0cmVlIGFoZWFkIG9mIHRoZQphbWdldGJhdGNoIGNvbW1pdC4KCkJ1bXAgWExPR19QQUdF X01BR0lDIGR1ZSB0byBYTE9HX0dJU1RfQVNTSUdOX0xTTiBiZWNvbWluZwpYTE9HX0FTU0lHTl9M U04uCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1o YiswRHIySzBEdGdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9w cml2YXRlLmggICAgICAgfCAgNCAtLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3R4bG9nLmggICAg ICAgICAgIHwgIDIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggICAgICAgICAgICAgICB8 ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9naW5zZXJ0LmggICAgICAgICB8ICAyICsKIHNy Yy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oICAgICAgICB8ICAyICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgfCAgNiArLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3R1dGlsLmMgICAgICB8IDUwIC0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYyAgICB8ICA4ICstLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdHhsb2cuYyAgICAgIHwgMjEgLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9naXN0ZGVzYy5jICB8ICA2IC0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL3hsb2dkZXNjLmMgIHwgIDcgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMgICAgICAgfCAyOCArKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z2luc2VydC5jIHwgNjUgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgICAgIHwgIDYgKy0tCiAxNCBmaWxlcyBjaGFuZ2VkLCAxMTUg aW5zZXJ0aW9ucygrKSwgOTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL2dpc3RfcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5o CmluZGV4IDU1MmY2MDVjMC4uNDQ1MTRmMWNiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvZ2lzdF9wcml2YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5o CkBAIC00NTcsOCArNDU3LDYgQEAgZXh0ZXJuIFhMb2dSZWNQdHIgZ2lzdFhMb2dTcGxpdChib29s IHBhZ2VfaXNfbGVhZiwKIAkJCQkJCQkJQmxvY2tOdW1iZXIgb3JpZ3JsaW5rLCBHaXN0TlNOIG9y aWduc24sCiAJCQkJCQkJCUJ1ZmZlciBsZWZ0Y2hpbGRidWYsIGJvb2wgbWFya2ZvbGxvd3JpZ2h0 KTsKIAotZXh0ZXJuIFhMb2dSZWNQdHIgZ2lzdFhMb2dBc3NpZ25MU04odm9pZCk7Ci0KIC8qIGdp c3RnZXQuYyAqLwogZXh0ZXJuIGJvb2wgZ2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGdpc3RnZXRiaXRtYXAoSW5kZXhTY2Fu RGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CkBAIC01MzEsOCArNTI5LDYgQEAgZXh0ZXJuIHZv aWQgZ2lzdE1ha2VVbmlvbktleShHSVNUU1RBVEUgKmdpc3RzdGF0ZSwgaW50IGF0dG5vLAogCQkJ CQkJCSBHSVNURU5UUlkgKmVudHJ5MiwgYm9vbCBpc251bGwyLAogCQkJCQkJCSBEYXR1bSAqZHN0 LCBib29sICpkc3Rpc251bGwpOwogCi1leHRlcm4gWExvZ1JlY1B0ciBnaXN0R2V0RmFrZUxTTihS ZWxhdGlvbiByZWwpOwotCiAvKiBnaXN0dmFjdXVtLmMgKi8KIGV4dGVybiBJbmRleEJ1bGtEZWxl dGVSZXN1bHQgKmdpc3RidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJ CQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2lzdHhsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oCmluZGV4 IGQzZDFjNjU0OS4uMWMyY2Y2ZTgxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lz dHhsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaApAQCAtMjYsNyArMjYs NyBAQAogIC8qICNkZWZpbmUgWExPR19HSVNUX0lOU0VSVF9DT01QTEVURQkgMHg0MCAqLwkvKiBu b3QgdXNlZCBhbnltb3JlICovCiAgLyogI2RlZmluZSBYTE9HX0dJU1RfQ1JFQVRFX0lOREVYCQkg MHg1MCAqLwkvKiBub3QgdXNlZCBhbnltb3JlICovCiAjZGVmaW5lIFhMT0dfR0lTVF9QQUdFX0RF TEVURQkJMHg2MAotI2RlZmluZSBYTE9HX0dJU1RfQVNTSUdOX0xTTgkJMHg3MAkvKiBub3AsIGFz c2lnbiBuZXcgTFNOICovCisgLyogI2RlZmluZSBYTE9HX0dJU1RfQVNTSUdOX0xTTgkJIDB4NzAg Ki8JLyogbm90IHVzZWQgYW55bW9yZSAqLwogCiAvKgogICogQmFja3VwIEJsayAwOiB1cGRhdGVk IHBhZ2UuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2cuaAppbmRleCBmZGZiNTcyNDYuLjU1M2Q2ZmM5YyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5o CkBAIC0yNTgsNiArMjU4LDcgQEAgZXh0ZXJuIGJvb2wgQ3JlYXRlUmVzdGFydFBvaW50KGludCBm bGFncyk7CiBleHRlcm4gV0FMQXZhaWxhYmlsaXR5IEdldFdBTEF2YWlsYWJpbGl0eShYTG9nUmVj UHRyIHRhcmdldExTTik7CiBleHRlcm4gdm9pZCBYTG9nUHV0TmV4dE9pZChPaWQgbmV4dE9pZCk7 CiBleHRlcm4gWExvZ1JlY1B0ciBYTG9nUmVzdG9yZVBvaW50KGNvbnN0IGNoYXIgKnJwTmFtZSk7 CitleHRlcm4gWExvZ1JlY1B0ciBYTG9nQXNzaWduTFNOKHZvaWQpOwogZXh0ZXJuIHZvaWQgVXBk YXRlRnVsbFBhZ2VXcml0ZXModm9pZCk7CiBleHRlcm4gdm9pZCBHZXRGdWxsUGFnZVdyaXRlSW5m byhYTG9nUmVjUHRyICpSZWRvUmVjUHRyX3AsIGJvb2wgKmRvUGFnZVdyaXRlc19wKTsKIGV4dGVy biBYTG9nUmVjUHRyIEdldFJlZG9SZWNQdHIodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZ2luc2VydC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dpbnNlcnQuaApp bmRleCAxNmViYzc2ZTcuLjkxZGZiZDU2MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dpbnNlcnQuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2luc2VydC5oCkBAIC02 NCw2ICs2NCw4IEBAIGV4dGVybiB2b2lkIGxvZ19uZXdwYWdlX3JhbmdlKFJlbGF0aW9uIHJlbCwg Rm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCSAgQmxvY2tOdW1iZXIgc3RhcnRibGssIEJsb2Nr TnVtYmVyIGVuZGJsaywgYm9vbCBwYWdlX3N0ZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBYTG9nU2F2 ZUJ1ZmZlckZvckhpbnQoQnVmZmVyIGJ1ZmZlciwgYm9vbCBidWZmZXJfc3RkKTsKIAorZXh0ZXJu IFhMb2dSZWNQdHIgWExvZ0dldEZha2VMU04oUmVsYXRpb24gcmVsKTsKKwogZXh0ZXJuIHZvaWQg SW5pdFhMb2dJbnNlcnQodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBYTE9HSU5TRVJUX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKaW5kZXggNzUwM2RiMWFmLi43N2E2NjFlODEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oCisrKyBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfY29udHJvbC5oCkBAIC03OCw3ICs3OCw3IEBAIHR5cGVkZWYgc3RydWN0IENo ZWNrUG9pbnQKICNkZWZpbmUgWExPR19FTkRfT0ZfUkVDT1ZFUlkJCQkweDkwCiAjZGVmaW5lIFhM T0dfRlBJX0ZPUl9ISU5UCQkJCTB4QTAKICNkZWZpbmUgWExPR19GUEkJCQkJCQkweEIwCi0vKiAw eEMwIGlzIHVzZWQgaW4gUG9zdGdyZXMgOS41LTExICovCisjZGVmaW5lIFhMT0dfQVNTSUdOX0xT TgkJCQkJMHhDMAogI2RlZmluZSBYTE9HX09WRVJXUklURV9DT05UUkVDT1JECQkweEQwCiAjZGVm aW5lIFhMT0dfQ0hFQ0tQT0lOVF9SRURPCQkJMHhFMAogI2RlZmluZSBYTE9HX0xPR0lDQUxfREVD T0RJTkdfU1RBVFVTX0NIQU5HRQkweEYwCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggZGZmZmNl M2UzLi44NTY1ZTIyNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Qu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTUxNyw3ICs1MTcsNyBA QCBnaXN0cGxhY2V0b3BhZ2UoUmVsYXRpb24gcmVsLCBTaXplIGZyZWVzcGFjZSwgR0lTVFNUQVRF ICpnaXN0c3RhdGUsCiAJCQkJCQkJCQkgICBkaXN0LCBvbGRybGluaywgb2xkbnNuLCBsZWZ0Y2hp bGRidWYsCiAJCQkJCQkJCQkgICBtYXJrZm9sbG93cmlnaHQpOwogCQkJZWxzZQotCQkJCXJlY3B0 ciA9IGdpc3RHZXRGYWtlTFNOKHJlbCk7CisJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVs KTsKIAkJfQogCiAJCWZvciAocHRyID0gZGlzdDsgcHRyOyBwdHIgPSBwdHItPm5leHQpCkBAIC01 OTQsNyArNTk0LDcgQEAgZ2lzdHBsYWNldG9wYWdlKFJlbGF0aW9uIHJlbCwgU2l6ZSBmcmVlc3Bh Y2UsIEdJU1RTVEFURSAqZ2lzdHN0YXRlLAogCQkJCQkJCQkJCWxlZnRjaGlsZGJ1Zik7CiAJCQl9 CiAJCQllbHNlCi0JCQkJcmVjcHRyID0gZ2lzdEdldEZha2VMU04ocmVsKTsKKwkJCQlyZWNwdHIg PSBYTG9nR2V0RmFrZUxTTihyZWwpOwogCQl9CiAJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsK IApAQCAtMTczMyw3ICsxNzMzLDcgQEAgZ2lzdHBydW5lcGFnZShSZWxhdGlvbiByZWwsIFBhZ2Ug cGFnZSwgQnVmZmVyIGJ1ZmZlciwgUmVsYXRpb24gaGVhcFJlbCkKIAkJCVBhZ2VTZXRMU04ocGFn ZSwgcmVjcHRyKTsKIAkJfQogCQllbHNlCi0JCQlQYWdlU2V0TFNOKHBhZ2UsIGdpc3RHZXRGYWtl TFNOKHJlbCkpOworCQkJUGFnZVNldExTTihwYWdlLCBYTG9nR2V0RmFrZUxTTihyZWwpKTsKIAog CQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdHV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMKaW5k ZXggMjc5NzJmYWQyLi4wZjU4ZjYxODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3R1dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwuYwpA QCAtMTAwNyw1NiArMTAwNyw2IEBAIGdpc3Rwcm9wZXJ0eShPaWQgaW5kZXhfb2lkLCBpbnQgYXR0 bm8sCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gKiBTb21lIGluZGV4ZXMgYXJlIG5vdCBXQUwt bG9nZ2VkLCBidXQgd2UgbmVlZCBMU05zIHRvIGRldGVjdCBjb25jdXJyZW50IHBhZ2UKLSAqIHNw bGl0cyBhbnl3YXkuIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBmYWtlIHNlcXVlbmNlIG9mIExT TnMgZm9yIHRoYXQKLSAqIHB1cnBvc2UuCi0gKi8KLVhMb2dSZWNQdHIKLWdpc3RHZXRGYWtlTFNO KFJlbGF0aW9uIHJlbCkKLXsKLQlpZiAocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJF TFBFUlNJU1RFTkNFX1RFTVApCi0JewotCQkvKgotCQkgKiBUZW1wb3JhcnkgcmVsYXRpb25zIGFy ZSBvbmx5IGFjY2Vzc2libGUgaW4gb3VyIHNlc3Npb24sIHNvIGEgc2ltcGxlCi0JCSAqIGJhY2tl bmQtbG9jYWwgY291bnRlciB3aWxsIGRvLgotCQkgKi8KLQkJc3RhdGljIFhMb2dSZWNQdHIgY291 bnRlciA9IEZpcnN0Tm9ybWFsVW5sb2dnZWRMU047Ci0KLQkJcmV0dXJuIGNvdW50ZXIrKzsKLQl9 Ci0JZWxzZSBpZiAoUmVsYXRpb25Jc1Blcm1hbmVudChyZWwpKQotCXsKLQkJLyoKLQkJICogV0FM LWxvZ2dpbmcgb24gdGhpcyByZWxhdGlvbiB3aWxsIHN0YXJ0IGFmdGVyIGNvbW1pdCwgc28gaXRz IExTTnMKLQkJICogbXVzdCBiZSBkaXN0aW5jdCBudW1iZXJzIHNtYWxsZXIgdGhhbiB0aGUgTFNO IGF0IHRoZSBuZXh0IGNvbW1pdC4KLQkJICogRW1pdCBhIGR1bW15IFdBTCByZWNvcmQgaWYgaW5z ZXJ0LUxTTiBoYXNuJ3QgYWR2YW5jZWQgYWZ0ZXIgdGhlCi0JCSAqIGxhc3QgY2FsbC4KLQkJICov Ci0JCXN0YXRpYyBYTG9nUmVjUHRyIGxhc3Rsc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKLQkJWExv Z1JlY1B0cgljdXJybHNuID0gR2V0WExvZ0luc2VydFJlY1B0cigpOwotCi0JCS8qIFNob3VsZG4n dCBiZSBjYWxsZWQgZm9yIFdBTC1sb2dnaW5nIHJlbGF0aW9ucyAqLwotCQlBc3NlcnQoIVJlbGF0 aW9uTmVlZHNXQUwocmVsKSk7Ci0KLQkJLyogTm8gbmVlZCBmb3IgYW4gYWN0dWFsIHJlY29yZCBp ZiB3ZSBhbHJlYWR5IGhhdmUgYSBkaXN0aW5jdCBMU04gKi8KLQkJaWYgKFhMb2dSZWNQdHJJc1Zh bGlkKGxhc3Rsc24pICYmIGxhc3Rsc24gPT0gY3VycmxzbikKLQkJCWN1cnJsc24gPSBnaXN0WExv Z0Fzc2lnbkxTTigpOwotCi0JCWxhc3Rsc24gPSBjdXJybHNuOwotCQlyZXR1cm4gY3VycmxzbjsK LQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogVW5sb2dnZWQgcmVsYXRpb25zIGFyZSBhY2Nlc3Np YmxlIGZyb20gb3RoZXIgYmFja2VuZHMsIGFuZCBzdXJ2aXZlCi0JCSAqIChjbGVhbikgcmVzdGFy dHMuIEdldEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpIGhhbmRsZXMgdGhhdCBmb3IgdXMuCi0JCSAq LwotCQlBc3NlcnQocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNF X1VOTE9HR0VEKTsKLQkJcmV0dXJuIEdldEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpOwotCX0KLX0K LQogLyoKICAqIFRoaXMgaXMgYSBzdHJhdG51bSB0cmFuc2xhdGlvbiBzdXBwb3J0IGZ1bmN0aW9u IGZvciBHaVNUIG9wY2xhc3NlcyB0aGF0IHVzZQogICogdGhlIFJUKlN0cmF0ZWd5TnVtYmVyIGNv bnN0YW50cy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwppbmRleCA5ZTcxNDk4MGQu LjY4NmEwNDE4MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHZhY3V1 bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwpAQCAtMTYsNyAr MTYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dp c3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisjaW5jbHVkZSAiYWNj ZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNsdWRl ICJsaWIvaW50ZWdlcnNldC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtMTgyLDcgKzE4 Miw3IEBAIGdpc3R2YWN1dW1zY2FuKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVs ZXRlUmVzdWx0ICpzdGF0cywKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCQl2c3RhdGUu c3RhcnROU04gPSBHZXRJbnNlcnRSZWNQdHIoKTsKIAllbHNlCi0JCXZzdGF0ZS5zdGFydE5TTiA9 IGdpc3RHZXRGYWtlTFNOKHJlbCk7CisJCXZzdGF0ZS5zdGFydE5TTiA9IFhMb2dHZXRGYWtlTFNO KHJlbCk7CiAKIAkvKgogCSAqIFRoZSBvdXRlciBsb29wIGl0ZXJhdGVzIG92ZXIgYWxsIGluZGV4 IHBhZ2VzLCBpbiBwaHlzaWNhbCBvcmRlciAod2UKQEAgLTQxMyw3ICs0MTMsNyBAQCByZXN0YXJ0 OgogCQkJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAkJCX0KIAkJCWVsc2UKLQkJCQlQYWdl U2V0TFNOKHBhZ2UsIGdpc3RHZXRGYWtlTFNOKHJlbCkpOworCQkJCVBhZ2VTZXRMU04ocGFnZSwg WExvZ0dldEZha2VMU04ocmVsKSk7CiAKIAkJCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNzA3 LDcgKzcwNyw3IEBAIGdpc3RkZWxldGVwYWdlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhC dWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChpbmZvLT5pbmRl eCkpCiAJCXJlY3B0ciA9IGdpc3RYTG9nUGFnZURlbGV0ZShsZWFmQnVmZmVyLCB0eGlkLCBwYXJl bnRCdWZmZXIsIGRvd25saW5rKTsKIAllbHNlCi0JCXJlY3B0ciA9IGdpc3RHZXRGYWtlTFNOKGlu Zm8tPmluZGV4KTsKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04oaW5mby0+aW5kZXgpOwogCVBh Z2VTZXRMU04ocGFyZW50UGFnZSwgcmVjcHRyKTsKIAlQYWdlU2V0TFNOKGxlYWZQYWdlLCByZWNw dHIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYwppbmRleCBjNzgzODM4NDkuLmFlNTM4 ZGM4MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jCkBAIC00MjEsOSArNDIxLDYgQEAg Z2lzdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQljYXNlIFhMT0dfR0lTVF9QQUdF X0RFTEVURToKIAkJCWdpc3RSZWRvUGFnZURlbGV0ZShyZWNvcmQpOwogCQkJYnJlYWs7Ci0JCWNh c2UgWExPR19HSVNUX0FTU0lHTl9MU046Ci0JCQkvKiBub3AuIFNlZSBnaXN0R2V0RmFrZUxTTigp LiAqLwotCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKFBBTklDLCAiZ2lzdF9yZWRvOiB1 bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKIAl9CkBAIC01NjcsMjQgKzU2NCw2IEBAIGdpc3RY TG9nUGFnZURlbGV0ZShCdWZmZXIgYnVmZmVyLCBGdWxsVHJhbnNhY3Rpb25JZCB4aWQsCiAJcmV0 dXJuIHJlY3B0cjsKIH0KIAotLyoKLSAqIFdyaXRlIGFuIGVtcHR5IFhMT0cgcmVjb3JkIHRvIGFz c2lnbiBhIGRpc3RpbmN0IExTTi4KLSAqLwotWExvZ1JlY1B0cgotZ2lzdFhMb2dBc3NpZ25MU04o dm9pZCkKLXsKLQlpbnQJCQlkdW1teSA9IDA7Ci0KLQkvKgotCSAqIFJlY29yZHMgb3RoZXIgdGhh biBYTE9HX1NXSVRDSCBtdXN0IGhhdmUgY29udGVudC4gV2UgdXNlIGFuIGludGVnZXIgMAotCSAq IHRvIGZvbGxvdyB0aGUgcmVzdHJpY3Rpb24uCi0JICovCi0JWExvZ0JlZ2luSW5zZXJ0KCk7Ci0J WExvZ1NldFJlY29yZEZsYWdzKFhMT0dfTUFSS19VTklNUE9SVEFOVCk7Ci0JWExvZ1JlZ2lzdGVy RGF0YSgmZHVtbXksIHNpemVvZihkdW1teSkpOwotCXJldHVybiBYTG9nSW5zZXJ0KFJNX0dJU1Rf SUQsIFhMT0dfR0lTVF9BU1NJR05fTFNOKTsKLX0KLQogLyoKICAqIFdyaXRlIFhMT0cgcmVjb3Jk IGFib3V0IHJldXNlIG9mIGEgZGVsZXRlZCBwYWdlLgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9naXN0ZGVzYy5jCmluZGV4IDc5YTgzOWNjMi4uNjc3ODllMDI1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYwpAQCAtODAsOSArODAsNiBAQCBnaXN0X2Rlc2MoU3Ry aW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQljYXNlIFhMT0dfR0lTVF9Q QUdFX0RFTEVURToKIAkJCW91dF9naXN0eGxvZ1BhZ2VEZWxldGUoYnVmLCAoZ2lzdHhsb2dQYWdl RGVsZXRlICopIHJlYyk7CiAJCQlicmVhazsKLQkJY2FzZSBYTE9HX0dJU1RfQVNTSUdOX0xTTjoK LQkJCS8qIE5vIGRldGFpbHMgdG8gd3JpdGUgb3V0ICovCi0JCQlicmVhazsKIAl9CiB9CiAKQEAg LTEwOCw5ICsxMDUsNiBAQCBnaXN0X2lkZW50aWZ5KHVpbnQ4IGluZm8pCiAJCWNhc2UgWExPR19H SVNUX1BBR0VfREVMRVRFOgogCQkJaWQgPSAiUEFHRV9ERUxFVEUiOwogCQkJYnJlYWs7Ci0JCWNh c2UgWExPR19HSVNUX0FTU0lHTl9MU046Ci0JCQlpZCA9ICJBU1NJR05fTFNOIjsKLQkJCWJyZWFr OwogCX0KIAogCXJldHVybiBpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy94bG9nZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMK aW5kZXggZmYwNzhmMjIyLi45MDQ0Yjk1MjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy94bG9nZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94 bG9nZGVzYy5jCkBAIC0xNzUsNiArMTc1LDEwIEBAIHhsb2dfZGVzYyhTdHJpbmdJbmZvIGJ1Ziwg WExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCW1lbWNweSgmZW5hYmxlZCwgcmVjLCBzaXplb2Yo Ym9vbCkpOwogCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgZW5hYmxlZCA/ICJ0cnVlIiA6 ICJmYWxzZSIpOwogCX0KKwllbHNlIGlmIChpbmZvID09IFhMT0dfQVNTSUdOX0xTTikKKwl7CisJ CS8qIG5vIGZ1cnRoZXIgaW5mb3JtYXRpb24gdG8gcHJpbnQgKi8KKwl9CiB9CiAKIGNvbnN0IGNo YXIgKgpAQCAtMjI5LDYgKzIzMyw5IEBAIHhsb2dfaWRlbnRpZnkodWludDggaW5mbykKIAkJY2Fz ZSBYTE9HX0xPR0lDQUxfREVDT0RJTkdfU1RBVFVTX0NIQU5HRToKIAkJCWlkID0gIkxPR0lDQUxf REVDT0RJTkdfU1RBVFVTX0NIQU5HRSI7CiAJCQlicmVhazsKKwkJY2FzZSBYTE9HX0FTU0lHTl9M U046CisJCQlpZCA9ICJBU1NJR05fTFNOIjsKKwkJCWJyZWFrOwogCX0KIAogCXJldHVybiBpZDsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCBiOWI2NzhmMzcuLjkyZTQ0YTUwMSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtODIyNCw2ICs4MjI0LDMwIEBAIFhMb2dSZXN0 b3JlUG9pbnQoY29uc3QgY2hhciAqcnBOYW1lKQogCXJldHVybiBSZWNQdHI7CiB9CiAKKy8qCisg KiBXcml0ZSBhbiBlbXB0eSBYTE9HIHJlY29yZCB0byBhc3NpZ24gYSBkaXN0aW5jdCBMU04uCisg KgorICogVGhpcyBpcyB1c2VkIGJ5IHNvbWUgaW5kZXggQU1zIHdoZW4gYnVpbGRpbmcgaW5kZXhl cyBvbiBwZXJtYW5lbnQgcmVsYXRpb25zCisgKiB3aXRoIHdhbF9sZXZlbD1taW5pbWFsLiAgSW4g dGhhdCBzY2VuYXJpbywgV0FMLWxvZ2dpbmcgd2lsbCBzdGFydCBhZnRlcgorICogY29tbWl0LCBi dXQgdGhlIGluZGV4IEFNIG5lZWRzIGRpc3RpbmN0IExTTnMgdG8gZGV0ZWN0IGNvbmN1cnJlbnQg cGFnZQorICogbW9kaWZpY2F0aW9ucy4gIFdoZW4gdGhlIGN1cnJlbnQgV0FMIGluc2VydCBwb3Np dGlvbiBoYXNuJ3QgYWR2YW5jZWQgc2luY2UKKyAqIHRoZSBsYXN0IGNhbGwsIHdlIGVtaXQgYSBk dW1teSByZWNvcmQgdG8gZW5zdXJlIHdlIGdldCBhIG5ldywgZGlzdGluY3QgTFNOLgorICovCitY TG9nUmVjUHRyCitYTG9nQXNzaWduTFNOKHZvaWQpCit7CisJaW50CQkJZHVtbXkgPSAwOworCisJ LyoKKwkgKiBSZWNvcmRzIG90aGVyIHRoYW4gWExPR19TV0lUQ0ggbXVzdCBoYXZlIGNvbnRlbnQu ICBXZSB1c2UgYW4gaW50ZWdlciAwCisJICogdG8gc2F0aXNmeSB0aGlzIHJlc3RyaWN0aW9uLgor CSAqLworCVhMb2dCZWdpbkluc2VydCgpOworCVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX01BUktf VU5JTVBPUlRBTlQpOworCVhMb2dSZWdpc3RlckRhdGEoJmR1bW15LCBzaXplb2YoZHVtbXkpKTsK KwlyZXR1cm4gWExvZ0luc2VydChSTV9YTE9HX0lELCBYTE9HX0FTU0lHTl9MU04pOworfQorCiAv KgogICogQ2hlY2sgaWYgYW55IG9mIHRoZSBHVUMgcGFyYW1ldGVycyB0aGF0IGFyZSBjcml0aWNh bCBmb3IgaG90IHN0YW5kYnkKICAqIGhhdmUgY2hhbmdlZCwgYW5kIHVwZGF0ZSB0aGUgdmFsdWUg aW4gcGdfY29udHJvbCBmaWxlIGlmIG5lY2Vzc2FyeS4KQEAgLTg1OTEsNiArODYxNSwxMCBAQCB4 bG9nX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJewogCQkvKiBub3RoaW5nIHRvIGRv IGhlcmUsIGhhbmRsZWQgaW4geGxvZ3JlY292ZXJ5LmMgKi8KIAl9CisJZWxzZSBpZiAoaW5mbyA9 PSBYTE9HX0FTU0lHTl9MU04pCisJeworCQkvKiBub3RoaW5nIHRvIGRvIGhlcmUsIHNlZSBYTG9n R2V0RmFrZUxTTigpICovCisJfQogCWVsc2UgaWYgKGluZm8gPT0gWExPR19GUEkgfHwgaW5mbyA9 PSBYTE9HX0ZQSV9GT1JfSElOVCkKIAl7CiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9naW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9naW5zZXJ0LmMKaW5kZXggYWMzYzFhNzgzLi40ZTA0OTk4MmYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9naW5zZXJ0LmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxz L3Bnc3RhdF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAvKgogICogR3Vl c3MgdGhlIG1heGltdW0gYnVmZmVyIHNpemUgcmVxdWlyZWQgdG8gc3RvcmUgYSBjb21wcmVzc2Vk IHZlcnNpb24gb2YKQEAgLTU0Nyw2ICs1NDgsNzAgQEAgWExvZ1NpbXBsZUluc2VydEludDY0KFJt Z3JJZCBybWlkLCB1aW50OCBpbmZvLCBpbnQ2NCB2YWx1ZSkKIAlyZXR1cm4gWExvZ0luc2VydChy bWlkLCBpbmZvKTsKIH0KIAorLyoKKyAqIFhMb2dHZXRGYWtlTFNOIC0gZ2V0IGEgZmFrZSBMU04g Zm9yIGFuIGluZGV4IHBhZ2UgdGhhdCBpc24ndCBXQUwtbG9nZ2VkLgorICoKKyAqIFNvbWUgaW5k ZXggQU1zIHVzZSBMU05zIHRvIGRldGVjdCBjb25jdXJyZW50IHBhZ2UgbW9kaWZpY2F0aW9ucywg YnV0IG5vdAorICogYWxsIGluZGV4IHBhZ2VzIGFyZSBXQUwtbG9nZ2VkLiAgVGhpcyBmdW5jdGlv biBwcm92aWRlcyBhIHNlcXVlbmNlIG9mIGZha2UKKyAqIExTTnMgZm9yIHRoYXQgcHVycG9zZS4K KyAqCisgKiBUaGUgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcmVsYXRpb24ncyBwZXJzaXN0ZW5j ZToKKyAqCisgKiAtIEZvciB0ZW1wb3JhcnkgcmVsYXRpb25zLCB3ZSB1c2UgYSBzaW1wbGUgYmFj a2VuZC1sb2NhbCBjb3VudGVyIHNpbmNlCisgKiAgIHRlbXBvcmFyeSByZWxhdGlvbnMgYXJlIG9u bHkgYWNjZXNzaWJsZSB3aXRoaW4gb3VyIHNlc3Npb24uCisgKgorICogLSBGb3IgcGVybWFuZW50 IHJlbGF0aW9ucyB3aGVuIFdBTC1sb2dnaW5nIGlzIGRpc2FibGVkIChlLmcuLCBkdXJpbmcgaW5k ZXgKKyAqICAgY3JlYXRpb24gd2l0aCB3YWxfbGV2ZWw9bWluaW1hbCksIHdlIHVzZSB0aGUgY3Vy cmVudCBXQUwgaW5zZXJ0IHBvc2l0aW9uLgorICogICBJZiB0aGUgaW5zZXJ0IHBvc2l0aW9uIGhh c24ndCBhZHZhbmNlZCBzaW5jZSB0aGUgbGFzdCBjYWxsLCB3ZSBlbWl0IGEKKyAqICAgZHVtbXkg V0FMIHJlY29yZCB2aWEgWExvZ0Fzc2lnbkxTTigpIHRvIGVuc3VyZSB3ZSBnZXQgYSBkaXN0aW5j dCBMU04uCisgKgorICogLSBGb3IgdW5sb2dnZWQgcmVsYXRpb25zLCB3ZSB1c2UgdGhlIGdsb2Jh bCBmYWtlIExTTiBjb3VudGVyIG1haW50YWluZWQKKyAqICAgYnkgR2V0RmFrZUxTTkZvclVubG9n Z2VkUmVsKCkuCisgKi8KK1hMb2dSZWNQdHIKK1hMb2dHZXRGYWtlTFNOKFJlbGF0aW9uIHJlbCkK K3sKKwlpZiAocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RF TVApCisJeworCQkvKgorCQkgKiBUZW1wb3JhcnkgcmVsYXRpb25zIGFyZSBvbmx5IGFjY2Vzc2li bGUgaW4gb3VyIHNlc3Npb24sIHNvIGEgc2ltcGxlCisJCSAqIGJhY2tlbmQtbG9jYWwgY291bnRl ciB3aWxsIGRvLgorCQkgKi8KKwkJc3RhdGljIFhMb2dSZWNQdHIgY291bnRlciA9IEZpcnN0Tm9y bWFsVW5sb2dnZWRMU047CisKKwkJcmV0dXJuIGNvdW50ZXIrKzsKKwl9CisJZWxzZSBpZiAocmVs LT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEKQorCXsK KwkJLyoKKwkJICogVW5sb2dnZWQgcmVsYXRpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIg YmFja2VuZHMsIGFuZCBzdXJ2aXZlCisJCSAqIChjbGVhbikgcmVzdGFydHMuICBHZXRGYWtlTFNO Rm9yVW5sb2dnZWRSZWwoKSBoYW5kbGVzIHRoYXQgZm9yIHVzLgorCQkgKi8KKwkJcmV0dXJuIEdl dEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBXQUwt bG9nZ2luZyBvbiB0aGlzIHJlbGF0aW9uIHdpbGwgc3RhcnQgYWZ0ZXIgY29tbWl0LCBzbyBpdHMg TFNOcworCQkgKiBtdXN0IGJlIGRpc3RpbmN0IG51bWJlcnMgc21hbGxlciB0aGFuIHRoZSBMU04g YXQgdGhlIG5leHQgY29tbWl0LgorCQkgKiBFbWl0IGEgZHVtbXkgV0FMIHJlY29yZCBpZiBpbnNl cnQtTFNOIGhhc24ndCBhZHZhbmNlZCBhZnRlciB0aGUKKwkJICogbGFzdCBjYWxsLgorCQkgKi8K KwkJc3RhdGljIFhMb2dSZWNQdHIgbGFzdGxzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlYTG9n UmVjUHRyCWN1cnJsc24gPSBHZXRYTG9nSW5zZXJ0UmVjUHRyKCk7CisKKwkJQXNzZXJ0KCFSZWxh dGlvbk5lZWRzV0FMKHJlbCkpOworCQlBc3NlcnQoUmVsYXRpb25Jc1Blcm1hbmVudChyZWwpKTsK KworCQkvKiBObyBuZWVkIGZvciBhbiBhY3R1YWwgcmVjb3JkIGlmIHdlIGFscmVhZHkgaGF2ZSBh IGRpc3RpbmN0IExTTiAqLworCQlpZiAoWExvZ1JlY1B0cklzVmFsaWQobGFzdGxzbikgJiYgbGFz dGxzbiA9PSBjdXJybHNuKQorCQkJY3VycmxzbiA9IFhMb2dBc3NpZ25MU04oKTsKKworCQlsYXN0 bHNuID0gY3VycmxzbjsKKwkJcmV0dXJuIGN1cnJsc247CisJfQorfQorCiAvKgogICogQXNzZW1i bGUgYSBXQUwgcmVjb3JkIGZyb20gdGhlIHJlZ2lzdGVyZWQgZGF0YSBhbmQgYnVmZmVycyBpbnRv IGFuCiAgKiBYTG9nUmVjRGF0YSBjaGFpbiwgcmVhZHkgZm9yIGluc2VydGlvbiB3aXRoIFhMb2dJ bnNlcnRSZWNvcmQoKS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggNmYzMGEy NTM3Li4wMGJjNjA5NTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC00NDYy LDkgKzQ0NjIsOSBAQCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiBy ZWxuLCBJT09iamVjdCBpb19vYmplY3QsCiAJICogbG9zdCBhZnRlciBhIGNyYXNoIGFueXdheS4g IE1vc3QgdW5sb2dnZWQgcmVsYXRpb24gcGFnZXMgZG8gbm90IGJlYXIKIAkgKiBMU05zIHNpbmNl IHdlIG5ldmVyIGVtaXQgV0FMIHJlY29yZHMgZm9yIHRoZW0sIGFuZCB0aGVyZWZvcmUgZmx1c2hp bmcKIAkgKiB1cCB0aHJvdWdoIHRoZSBidWZmZXIgTFNOIHdvdWxkIGJlIHVzZWxlc3MsIGJ1dCBo YXJtbGVzcy4gIEhvd2V2ZXIsCi0JICogR2lTVCBpbmRleGVzIHVzZSBMU05zIGludGVybmFsbHkg dG8gdHJhY2sgcGFnZS1zcGxpdHMsIGFuZCB0aGVyZWZvcmUKLQkgKiB1bmxvZ2dlZCBHaVNUIHBh Z2VzIGJlYXIgImZha2UiIExTTnMgZ2VuZXJhdGVkIGJ5Ci0JICogR2V0RmFrZUxTTkZvclVubG9n Z2VkUmVsLiAgSXQgaXMgdW5saWtlbHkgYnV0IHBvc3NpYmxlIHRoYXQgdGhlIGZha2UKKwkgKiBz b21lIGluZGV4IEFNcyB1c2UgTFNOcyBpbnRlcm5hbGx5IHRvIGRldGVjdCBjb25jdXJyZW50IHBh Z2UKKwkgKiBtb2RpZmljYXRpb25zLCBhbmQgdGhlcmVmb3JlIHVubG9nZ2VkIGluZGV4IHBhZ2Vz IGJlYXIgImZha2UiIExTTnMKKwkgKiBnZW5lcmF0ZWQgYnkgWExvZ0dldEZha2VMU04uICBJdCBp cyB1bmxpa2VseSBidXQgcG9zc2libGUgdGhhdCB0aGUgZmFrZQogCSAqIExTTiBjb3VudGVyIGNv dWxkIGFkdmFuY2UgcGFzdCB0aGUgV0FMIGluc2VydGlvbiBwb2ludDsgYW5kIGlmIGl0IGRpZAog CSAqIGhhcHBlbiwgYXR0ZW1wdGluZyB0byBmbHVzaCBXQUwgdGhyb3VnaCB0aGF0IGxvY2F0aW9u IHdvdWxkIGZhaWwsIHdpdGgKIAkgKiBkaXNhc3Ryb3VzIHN5c3RlbS13aWRlIGNvbnNlcXVlbmNl cy4gIFRvIG1ha2Ugc3VyZSB0aGF0IGNhbid0IGhhcHBlbiwKLS0gCjIuNTMuMAoK --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0017-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Disposition: attachment; filename="v13-0017-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv38943 RnJvbSBhNDI1MzE0ZmFlZWIwNmFkNGY4ODRhYWY0ODdhOWIzZWQyODZmMWFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEzIDE3 LzE5XSBXSVA6IGFpbzogaW9fdXJpbmc6IFVzZSBJTyBzaXplIG5vdCBJTyBxdWV1ZSB0bwogdHJp Z2dlciBhc3luYyBwcm9jZXNzaW5nCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMgfCA1NyArKysrKysrKysrKysrKy0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggNGUxMjQ0ZmExLi4wNDFiNzI2Mjkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCkBAIC00MDcsNyAr NDA3LDYgQEAgc3RhdGljIGludAogcGdhaW9fdXJpbmdfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2Vk X2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCXN0cnVjdCBpb191cmluZyAqdXJp bmdfaW5zdGFuY2UgPSAmcGdhaW9fbXlfdXJpbmdfY29udGV4dC0+aW9fdXJpbmdfcmluZzsKLQlp bnQJCQlpbl9mbGlnaHRfYmVmb3JlID0gZGNsaXN0X2NvdW50KCZwZ2Fpb19teV9iYWNrZW5kLT5p bl9mbGlnaHRfaW9zKTsKIAogCUFzc2VydChudW1fc3RhZ2VkX2lvcyA8PSBQR0FJT19TVUJNSVRf QkFUQ0hfU0laRSk7CiAKQEAgLTQyMywyNyArNDIyLDYgQEAgcGdhaW9fdXJpbmdfc3VibWl0KHVp bnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCiAJCXBnYWlv X2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7CiAJCXBnYWlvX3VyaW5nX3NxX2Zyb21faW8oaW9oLCBz cWUpOwotCi0JCS8qCi0JCSAqIGlvX3VyaW5nIGV4ZWN1dGVzIElPIGluIHByb2Nlc3MgY29udGV4 dCBpZiBwb3NzaWJsZS4gVGhhdCdzCi0JCSAqIGdlbmVyYWxseSBnb29kLCBhcyBpdCByZWR1Y2Vz IGNvbnRleHQgc3dpdGNoaW5nLiBXaGVuIHBlcmZvcm1pbmcgYQotCQkgKiBsb3Qgb2YgYnVmZmVy ZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbiBwYWdlIGNhY2hlIGFuZAotCQkg KiB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMgaW4gdGhlIGZvcmVncm91bmQsIGFzIGl0IGNhbid0 IGJlCi0JCSAqIG9mZmxvYWRlZCB0byBETUEgaGFyZHdhcmUgYXMgaXMgcG9zc2libGUgd2hlbiB1 c2luZyBkaXJlY3QgSU8uIFdoZW4KLQkJICogZXhlY3V0aW5nIGEgbG90IG9mIGJ1ZmZlcmVkIElP IHRoaXMgY2F1c2VzIGlvX3VyaW5nIHRvIGJlIHNsb3dlcgotCQkgKiB0aGFuIHdvcmtlciBtb2Rl LCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhlIGNvcHlpbmcuIGlvX3VyaW5nCi0JCSAq IGNhbiBiZSB0b2xkIHRvIG9mZmxvYWQgd29yayB0byB3b3JrZXIgdGhyZWFkcyBpbnN0ZWFkLgot CQkgKgotCQkgKiBJZiBhbiBJTyBpcyBidWZmZXJlZCBJTyBhbmQgd2UgYWxyZWFkeSBoYXZlIElP cyBpbiBmbGlnaHQgb3IKLQkJICogbXVsdGlwbGUgSU9zIGFyZSBiZWluZyBzdWJtaXR0ZWQsIHdl IHRodXMgdGVsbCBpb191cmluZyB0byBleGVjdXRlCi0JCSAqIHRoZSBJTyBpbiB0aGUgYmFja2dy b3VuZC4gV2UgZG9uJ3QgZG8gc28gZm9yIHRoZSBmaXJzdCBmZXcgSU9zCi0JCSAqIGJlaW5nIHN1 Ym1pdHRlZCBhcyBleGVjdXRpbmcgaW4gdGhpcyBwcm9jZXNzJyBjb250ZXh0IGhhcyBsb3dlcgot CQkgKiBsYXRlbmN5LgotCQkgKi8KLQkJaWYgKGluX2ZsaWdodF9iZWZvcmUgPiA0ICYmIChpb2gt PmZsYWdzICYgUEdBSU9fSEZfQlVGRkVSRUQpKQotCQkJaW9fdXJpbmdfc3FlX3NldF9mbGFncyhz cWUsIElPU1FFX0FTWU5DKTsKLQotCQlpbl9mbGlnaHRfYmVmb3JlKys7CiAJfQogCiAJd2hpbGUg KHRydWUpCkBAIC03MDcsNiArNjg1LDcgQEAgc3RhdGljIHZvaWQKIHBnYWlvX3VyaW5nX3NxX2Zy b21faW8oUGdBaW9IYW5kbGUgKmlvaCwgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogewogCXN0 cnVjdCBpb3ZlYyAqaW92OworCXNpemVfdAkJaW9fc2l6ZSA9IDA7CiAKIAlzd2l0Y2ggKChQZ0Fp b09wKSBpb2gtPm9wKQogCXsKQEAgLTcxOSw2ICs2OTgsOCBAQCBwZ2Fpb191cmluZ19zcV9mcm9t X2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIAkJCQkJCQkJ ICAgaW92LT5pb3ZfYmFzZSwKIAkJCQkJCQkJICAgaW92LT5pb3ZfbGVuLAogCQkJCQkJCQkgICBp b2gtPm9wX2RhdGEucmVhZC5vZmZzZXQpOworCisJCQkJaW9fc2l6ZSA9IGlvdi0+aW92X2xlbjsK IAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcyOCw3ICs3MDksMzkgQEAgcGdhaW9fdXJpbmdfc3Ff ZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCQkJ CQkJCQlpb2gtPm9wX2RhdGEucmVhZC5pb3ZfbGVuZ3RoLAogCQkJCQkJCQkJaW9oLT5vcF9kYXRh LnJlYWQub2Zmc2V0KTsKIAorCQkJCWZvciAoaW50IGkgPSAwOyBpIDw9IGlvaC0+b3BfZGF0YS5y ZWFkLmlvdl9sZW5ndGg7IGkrKywgaW92KyspCisJCQkJCWlvX3NpemUgKz0gaW92LT5pb3ZfbGVu OwogCQkJfQorCisKKwkJCS8qCisJCQkgKiBpb191cmluZyBleGVjdXRlcyBJTyBpbiBwcm9jZXNz IGNvbnRleHQgaWYgcG9zc2libGUuIFRoYXQncworCQkJICogZ2VuZXJhbGx5IGdvb2QsIGFzIGl0 IHJlZHVjZXMgY29udGV4dCBzd2l0Y2hpbmcuIFdoZW4KKwkJCSAqIHBlcmZvcm1pbmcgYSBsb3Qg b2YgYnVmZmVyZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbgorCQkJICogcGFn ZSBjYWNoZSBhbmQgdXNlcnNwYWNlIG1lbW9yeSBoYXBwZW5zIGluIHRoZSBmb3JlZ3JvdW5kLCBh cworCQkJICogaXQgY2FuJ3QgYmUgb2ZmbG9hZGVkIHRvIERNQSBoYXJkd2FyZSBhcyBpcyBwb3Nz aWJsZSB3aGVuIHVzaW5nCisJCQkgKiBkaXJlY3QgSU8uIFdoZW4gZXhlY3V0aW5nIGEgbG90IG9m IGJ1ZmZlcmVkIElPIHRoaXMgY2F1c2VzCisJCQkgKiBpb191cmluZyB0byBiZSBzbG93ZXIgdGhh biB3b3JrZXIgbW9kZSwgYXMgd29ya2VyIG1vZGUKKwkJCSAqIHBhcmFsbGVsaXplcyB0aGUgY29w eWluZy4gaW9fdXJpbmcgY2FuIGJlIHRvbGQgdG8gb2ZmbG9hZCB3b3JrCisJCQkgKiB0byB3b3Jr ZXIgdGhyZWFkcyBpbnN0ZWFkLgorCQkJICoKKwkJCSAqIElmIHRoZSBJT3MgYXJlIHNtYWxsLCB0 aGVyZSBpcyBubyBiZW5lZml0IGZyb20gZm9yY2luZyB0aGluZ3MKKwkJCSAqIGludG8gdGhlIGJh Y2tncm91bmQsIHRoZSBvdmVyaGVhZCBmcm9tIGNvbnRleHQgc3dpdGNoaW5nIGlzCisJCQkgKiBo aWdoZXIgdGhhbiB0aGUgZ2Fpbi4gIFRoZXJlZm9yZSB3ZSB1c2UgdGhlIHNpemUgb2YgdGhlIHJl YWQgYXMKKwkJCSAqIGEgaGV1cmlzdGljLgorCQkJICoKKwkJCSAqIFhYWDogV2UgdXNlZCB0byBu b3QgZG8gdGhpcyBmb3IgdGhlIGZpcnN0IGZldyBJT3MgaW4gZmxpZ2h0LAorCQkJICogYnV0IG5v dyB3ZSBoYXZlIGEgaGV1cmlzdGljIHByZXZlbnRpbmcgZGVlcGVyIElPIHF1ZXVlcyBpZiBJT3MK KwkJCSAqIGZpbmlzaCBpbiB0aW1lLCB3aGljaCB3aWxsIG9mdGVuIHByZXZlbnQgdXMgZnJvbSBl dmVyIHJlYWNoaW5nCisJCQkgKiB0aGF0IGRlZXAgcXVldWVzLiAgTWF5YmUgdGhlcmUncyBhIGJl dHRlciB3YXk/CisJCQkgKgorCQkJICogWFhYOiBOZWVkIHRvIGV2YWx1YXRlIHRoZSBudW1iZXIg b2YgYmxvY2tzIHdoZW4gSU9TUUVfQVNZTkMKKwkJCSAqIHN0YXJ0cyB0byBtYWtlIHNlbnNlLgor CQkJICovCisJCQlpZiAoaW9fc2l6ZSA+PSAoQkxDS1NaICogNCkgJiYKKwkJCQkoaW9oLT5mbGFn cyAmIFBHQUlPX0hGX0JVRkZFUkVEKSkKKwkJCQlpb191cmluZ19zcWVfc2V0X2ZsYWdzKHNxZSwg SU9TUUVfQVNZTkMpOworCiAJCQlicmVhazsKIAogCQljYXNlIFBHQUlPX09QX1dSSVRFVjoKLS0g CjIuNTMuMAoK --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0015-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Disposition: attachment; filename="v13-0015-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv38995 RnJvbSA4MmMzM2MyMzYzZTZjYWEzZjQ4OGZkOTI3ODJhMGMyNDE1N2JmNjM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEzIDE1 LzE5XSBXSVA6IHJlYWRfc3RyZWFtOiBPbmx5IGluY3JlYXNlIGRpc3RhbmNlIHdoZW4KIHdhaXRp bmcgZm9yIElPCgpUaGlzIGF2b2lkcyBpbmNyZWFzaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgbWF4 aW11bSBpbiBjYXNlcyB3aGVyZSB0aGUgSU8Kc3Vic3lzdGVtIGlzIGFscmVhZHkga2VlcGluZyB1 cC4KClRPRE86IFRoaXMgbWlnaHQgYmUgdG9vIGFnZ3Jlc3NpdmUgd2l0aG91dCBhIHN1YnNlcXVl bnQgcGF0Y2ggdGhhdCByZWR1Y2VzIGhvdwpvZnRlbiB3ZSBkZWNyZWFzZSB0aGUgZGlzdGFuY2Uu CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpC YWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyB8IDI0 ICsrKysrKysrKysrKysrKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMo KyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v cmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5k ZXggMzY2N2Q2N2FiLi5lMjhhYjVkZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYwpAQCAtOTMxLDIyICs5MzEsMzYgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCXsKIAkJaW50MTYJCWlvX2lu ZGV4ID0gc3RyZWFtLT5vbGRlc3RfaW9faW5kZXg7CiAJCWludDMyCQlkaXN0YW5jZTsJLyogd2lk ZXIgdGVtcG9yYXJ5IHZhbHVlLCBjbGFtcGVkIGJlbG93ICovCisJCWJvb2wJCW5lZWRlZF93YWl0 OwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHdlIHN0aWxsIGFncmVlIG9uIHRoZSBidWZmZXJz LiAqLwogCQlBc3NlcnQoc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmJ1ZmZlcnMgPT0KIAkJCSAg ICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0pOwogCi0JCVdhaXRSZWFkQnVm ZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJbmVlZGVkX3dhaXQgPSBXYWl0UmVh ZEJ1ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zX2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CiAJCWlm ICgrK3N0cmVhbS0+b2xkZXN0X2lvX2luZGV4ID09IHN0cmVhbS0+bWF4X2lvcykKIAkJCXN0cmVh bS0+b2xkZXN0X2lvX2luZGV4ID0gMDsKIAotCQkvKiBMb29rLWFoZWFkIGRpc3RhbmNlIHJhbXBz IHVwIHJhcGlkbHkgYWZ0ZXIgd2UgZG8gSS9PLiAqLwotCQlkaXN0YW5jZSA9IHN0cmVhbS0+ZGlz dGFuY2UgKiAyOwotCQlkaXN0YW5jZSA9IE1pbihkaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVk X2J1ZmZlcnMpOwotCQlzdHJlYW0tPmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCS8qCisJCSAqIExv b2stYWhlYWQgZGlzdGFuY2UgcmFtcHMgdXAgcmFwaWRseSBhZnRlciB3ZSBuZWVkZWQgdG8gd2Fp dCBmb3IKKwkJICogSU8uIFdlIG9ubHkgaW5jcmVhc2UgdGhlIGRpc3RhbmNlIHdoZW4gd2UgbmVl ZGVkIHRvIHdhaXQsIHRvIGF2b2lkCisJCSAqIGluY3JlYXNpbmcgdGhlIGRpc3RhbmNlIGZ1cnRo ZXIgdGhhbiBuZWNlc3NhcnksIGFzIHVubmVjZXNzYXJpbHkKKwkJICogcGlubmluZyBtYW55IGJ1 ZmZlcnMgY2FuIGJlIGNvc3RseS4KKwkJICoKKwkJICogTkI6IE1heSBub3QgaW5jcmVhc2UgdGhl IGRpc3RhbmNlIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUKKwkJICogc3RyZWFtLgorCQkg Ki8KKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPiAwICYmIG5lZWRlZF93YWl0KQorCQl7CisJCQlk aXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFuY2UgKiAyOworCQkJaWYgKGRpc3RhbmNlICYmIGRpc3Rh bmNlIDwgUEdfSU5UMTZfTUFYKQorCQkJCWRpc3RhbmNlKys7CisJCQlkaXN0YW5jZSA9IE1pbihk aXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOworCQkJc3RyZWFtLT5kaXN0YW5j ZSA9IGRpc3RhbmNlOworCQl9CiAKIAkJLyoKIAkJICogSWYgd2UndmUgcmVhY2hlZCB0aGUgZmly c3QgYmxvY2sgb2YgYSBzZXF1ZW50aWFsIHJlZ2lvbiB3ZSdyZQotLSAKMi41My4wCgo= --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0013-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Disposition: attachment; filename="v13-0013-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv389e7 RnJvbSBhMjMzMGZkNzUzOTE4OGYxYzViZjBiMTEyZGE2NzIxN2VmOWNiNGM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo0MDozNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEzIDEz LzE5XSBXSVA6IGFpbzogaW9fdXJpbmc6IEFsbG93IElPIG1ldGhvZHMgdG8gY2hlY2sgaWYgSU8K IGNvbXBsZXRlZCBpbiB0aGUgYmFja2dyb3VuZAoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYWlvX2ludGVybmFsLmggICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIHwgNDcgKysrKysrKysrKysrKysrKysrKysrKysK IDMgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRl cm5hbC5oCmluZGV4IDVmZWVhMTViZS4uMzNlMWUyZGMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2lu dGVybmFsLmgKQEAgLTMyOCw2ICszMjgsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW9NZXRob2RPcHMK IAkgKi8KIAl2b2lkCQkoKndhaXRfb25lKSAoUGdBaW9IYW5kbGUgKmlvaCwKIAkJCQkJCQkgdWlu dDY0IHJlZl9nZW5lcmF0aW9uKTsKKworCS8qIC0tLQorCSAqIENoZWNrIGlmIElPIGhhcyBhbHJl YWR5IGNvbXBsZXRlZC4gT3B0aW9uYWwuCisJICoKKwkgKiBTb21lIElPIG1ldGhvZHMgbmVlZCB0 byBwb2xsIGEga2VybmVsIG9iamVjdCB0byBzZWUgaWYgSU8gaGFzIGFscmVhZHkKKwkgKiBjb21w bGV0ZWQgaW4gdGhlIGJhY2tncm91bmQuIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRvIGRvIHNvLgor CSAqCisJICogVGhpcyBjYWxsYmFjayBtYXkgbm90IHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLCBo b3dldmVyIGl0IGlzIGFsbG93ZWQsCisJICogYWx0aG91Z2ggbm90IGRlc2lyYWJsZSwgdG8gd2Fp dCBmb3Igc2hvcnQtbGl2ZWQgbG9ja3MuIEl0IGlzIG9rIGZyb20gYQorCSAqIGNvcnJlY3RuZXNz IHBlcnNwZWN0aXZlIHRvIG5vdCBwcm9jZXNzIGFueS9hbGwgYXZhaWxhYmxlIGNvbXBsZXRpb25z LAorCSAqIGl0IGp1c3QgY2FuIGxlYWQgdG8gaW5mZXJpb3IgcGVyZm9ybWFuY2UuCisJICogLS0t CisJICovCisJdm9pZAkJKCpjaGVja19vbmUpIChQZ0Fpb0hhbmRsZSAqaW9oLAorCQkJCQkJCSAg dWludDY0IHJlZl9nZW5lcmF0aW9uKTsKIH0gSW9NZXRob2RPcHM7CiAKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW8uYwppbmRleCBlNGFlMzAzMWYuLjRlNzQyMDM4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vYWlvLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAg LTEwMTksNiArMTAxOSwyMSBAQCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICpp b3cpCiAKIAlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKIAor CS8qCisJICogSWYgdGhlIElPIGlzIG5vdCBleGVjdXRpbmcgc3luY2hyb25vdXNseSwgYWxsb3cg dGhlIElPIG1ldGhvZCB0byBjaGVjaworCSAqIGlmIHRoZSBJTyBhbHJlYWR5IGhhcyBjb21wbGV0 ZWQuCisJICovCisJaWYgKHBnYWlvX21ldGhvZF9vcHMtPmNoZWNrX29uZSAmJiAhKGlvaC0+Zmxh Z3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUykpCisJeworCQlwZ2Fpb19tZXRob2Rfb3BzLT5jaGVj a19vbmUoaW9oLCByZWZfZ2VuZXJhdGlvbik7CisKKwkJaWYgKHBnYWlvX2lvX3dhc19yZWN5Y2xl ZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJaWYg KHN0YXRlID09IFBHQUlPX0hTX0lETEUpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlpZiAoc3Rh dGUgPT0gUEdBSU9fSFNfQ09NUExFVEVEX1NIQVJFRCB8fAogCQlzdGF0ZSA9PSBQR0FJT19IU19D T01QTEVURURfTE9DQUwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v bWV0aG9kX2lvX3VyaW5nLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJp bmcuYwppbmRleCBlZDZlNzFiY2QuLjRlMTI0NGZhMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMKQEAgLTU0LDYgKzU0LDcgQEAgc3RhdGljIHZvaWQgcGdhaW9f dXJpbmdfc2htZW1faW5pdChib29sIGZpcnN0X3RpbWUpOwogc3RhdGljIHZvaWQgcGdhaW9fdXJp bmdfaW5pdF9iYWNrZW5kKHZvaWQpOwogc3RhdGljIGludAlwZ2Fpb191cmluZ19zdWJtaXQodWlu dDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpOwogc3RhdGljIHZv aWQgcGdhaW9fdXJpbmdfd2FpdF9vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5l cmF0aW9uKTsKK3N0YXRpYyB2b2lkIHBnYWlvX3VyaW5nX2NoZWNrX29uZShQZ0Fpb0hhbmRsZSAq aW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pOwogCiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCiBz dGF0aWMgdm9pZCBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVj dCBpb191cmluZ19zcWUgKnNxZSk7CkBAIC03NSw2ICs3Niw3IEBAIGNvbnN0IElvTWV0aG9kT3Bz IHBnYWlvX3VyaW5nX29wcyA9IHsKIAogCS5zdWJtaXQgPSBwZ2Fpb191cmluZ19zdWJtaXQsCiAJ LndhaXRfb25lID0gcGdhaW9fdXJpbmdfd2FpdF9vbmUsCisJLmNoZWNrX29uZSA9IHBnYWlvX3Vy aW5nX2NoZWNrX29uZSwKIH07CiAKIC8qCkBAIC02NTYsNiArNjU4LDUxIEBAIHBnYWlvX3VyaW5n X3dhaXRfb25lKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQl3 YWl0ZWQpOwogfQogCitzdGF0aWMgdm9pZAorcGdhaW9fdXJpbmdfY2hlY2tfb25lKFBnQWlvSGFu ZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKK3sKKwlQcm9jTnVtYmVyCW93bmVyX3By b2NubyA9IGlvaC0+b3duZXJfcHJvY25vOworCVBnQWlvVXJpbmdDb250ZXh0ICpvd25lcl9jb250 ZXh0ID0gJnBnYWlvX3VyaW5nX2NvbnRleHRzW293bmVyX3Byb2Nub107CisJaW50CQkJd2FpdGVk ID0gMDsKKworCS8qCisJICogVGhpcyBjaGVjayBpcyBub3QgcmVsaWFibGUgd2hlbiBub3QgaG9s ZGluZyB0aGUgY29tcGxldGlvbiBsb2NrLCBidXQKKwkgKiBpdCdzIGEgdXNlZnVsIGNoZWFwIHBy ZS1jaGVjayB0byBzZWUgaWYgaXQncyB3b3J0aCB0cnlpbmcgdG8gZ2V0IHRoZQorCSAqIGNvbXBs ZXRpb24gbG9jay4KKwkgKi8KKwlpZiAoIWlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0 LT5pb191cmluZ19yaW5nKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgY29tcGxldGlv biBsb2NrIGlzIGN1cnJlbnRseSBoZWxkLCB0aGUgaG9sZGVyIHdpbGwgbGlrZWx5CisJICogcHJv Y2VzcyBhbnkgcGVuZGluZyBjb21wbGV0aW9ucywgZ2l2ZSB1cC4KKwkgKi8KKwlpZiAoIUxXTG9j a0NvbmRpdGlvbmFsQWNxdWlyZSgmb3duZXJfY29udGV4dC0+Y29tcGxldGlvbl9sb2NrLCBMV19F WENMVVNJVkUpKQorCQlyZXR1cm47CisKKwlwZ2Fpb19kZWJ1Z19pbyhERUJVRzMsIGlvaCwKKwkJ CQkgICAiY2hlY2tfb25lIGlvX2dlbjogJSIgUFJJdTY0ICIsIHJlZl9nZW46ICUiIFBSSXU2NCAi LCBjeWNsZSAlZCIsCisJCQkJICAgaW9oLT5nZW5lcmF0aW9uLAorCQkJCSAgIHJlZl9nZW5lcmF0 aW9uLAorCQkJCSAgIHdhaXRlZCk7CisKKwkvKgorCSAqIFJlY2hlY2sgaWYgdGhlcmUgYXJlIGFu eSBjb21wbGV0aW9ucywgYW5vdGhlciBiYWNrZW5kIGNvdWxkIGhhdmUKKwkgKiBwcm9jZXNzZWQg dGhlbSBzaW5jZSB3ZSBjaGVja2VkIGFib3ZlLCBvciBvdXIgdW5sb2NrZWQgcHJlLWNoZWNrIGNv dWxkCisJICogaGF2ZSBiZWVuIHJlYWRpbmcgb3V0ZGF0ZWQgdmFsdWVzLgorCSAqCisJICogSXQg aXMgcG9zc2libGUgdGhhdCB0aGUgSU8gaGFuZGxlIGhhcyBiZWVuIHJldXNlZCBzaW5jZSB0aGUg c3RhcnQgb2YKKwkgKiB0aGUgY2FsbCwgYnV0IG5vdyB0aGF0IHdlIGhhdmUgdGhlIGxvY2ssIHdl IGNhbiBqdXN0IGFzIHdlbGwgZHJhaW4gYWxsCisJICogY29tcGxldGlvbnMuCisJICovCisJaWYg KGlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0LT5pb191cmluZ19yaW5nKSkKKwl7CisJ CXBnYWlvX3VyaW5nX2RyYWluX2xvY2tlZChvd25lcl9jb250ZXh0KTsKKwl9CisKKwlMV0xvY2tS ZWxlYXNlKCZvd25lcl9jb250ZXh0LT5jb21wbGV0aW9uX2xvY2spOworfQorCiBzdGF0aWMgdm9p ZAogcGdhaW9fdXJpbmdfc3FfZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJp bmdfc3FlICpzcWUpCiB7Ci0tIAoyLjUzLjAKCg== --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0014-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Disposition: attachment; filename="v13-0014-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv389b6 RnJvbSBkZTFhMzdkNmFjYWJjODllNjQxZmQ2MGJjMDYwZjA5Y2Y0NjNkYzNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo1MDo1MCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEzIDE0 LzE5XSBidWZtZ3I6IFJldHVybiB3aGV0aGVyIFdhaXRSZWFkQnVmZmVycygpIG5lZWRlZCB0bwog d2FpdAoKSW4gYSBzdWJzZXF1ZW50IGNvbW1pdCByZWFkX3N0cmVhbS5jIHdpbGwgdXNlIHRoaXMg YXMgYW4gaW5wdXQgdG8gdGhlIHJlYWQKYWhlYWQgZGlzdGFuY2UuCgpBdXRob3I6ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgfCAxOCArKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hh bmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApp bmRleCA4ZTFiYWY2OTEuLjMzYmQ0ODAyYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0yNTAsNyAr MjUwLDcgQEAgZXh0ZXJuIGJvb2wgU3RhcnRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlv biAqb3BlcmF0aW9uLAogCQkJCQkJCSBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJCQkgaW50 ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgV2FpdFJlYWRCdWZm ZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIGJvb2wgV2FpdFJl YWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRlcm4gdm9p ZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2NrUmVsZWFz ZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5k ZXggM2M0OGFlMWY4Li4wODA2NTA1ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CkBAIC0xNzMxLDEyICsxNzMxLDIwIEBAIFByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCUFzc2VydChvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOwogfQogCi12b2lkCisvKgorICogV2FpdCBmb3IgdGhl IElPIG9wZXJhdGlvbiBpbml0aWF0ZWQgYnkgU3RhcnRSZWFkQnVmZmVycygpIGV0IGFsIHRvCisg KiBjb21wbGV0ZS4KKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIElPIG9wZXJhdGlvbiBhbHJl YWR5IGhhZCBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgb2YgdGhpcworICogY2FsbC4KKyAqLworYm9v bAogV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiB7CiAJ UGdBaW9SZXR1cm4gKmFpb19yZXQgPSAmb3BlcmF0aW9uLT5pb19yZXR1cm47CiAJSU9Db250ZXh0 CWlvX2NvbnRleHQ7CiAJSU9PYmplY3QJaW9fb2JqZWN0OworCWJvb2wJCW5lZWRlZF93YWl0ID0g ZmFsc2U7CiAKIAlpZiAob3BlcmF0aW9uLT5wZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9U RU1QKQogCXsKQEAgLTE3OTgsNiArMTgwNiw3IEBAIFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVy c09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCQkJCWluc3RyX3RpbWUJaW9fc3RhcnQgPSBwZ3N0YXRf cHJlcGFyZV9pb190aW1lKHRyYWNrX2lvX3RpbWluZyk7CiAKIAkJCQlwZ2Fpb193cmVmX3dhaXQo Jm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCQkJbmVlZGVkX3dhaXQgPSB0cnVlOwogCiAJCQkJLyoK IAkJCQkgKiBUaGUgSU8gb3BlcmF0aW9uIGl0c2VsZiB3YXMgYWxyZWFkeSBjb3VudGVkIGVhcmxp ZXIsIGluCkBAIC0xODUwLDYgKzE4NTksMTIgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJz T3BlcmF0aW9uICpvcGVyYXRpb24pCiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAorCQkv KgorCQkgKiBJZiB0aGUgSU8gY29tcGxldGVkIG9ubHkgcGFydGlhbGx5LCB3ZSBuZWVkIHRvIHBl cmZvcm0gYWRkaXRpb25hbAorCQkgKiB3b3JrLCBjb25zaWRlciB0aGF0IGEgZm9ybSBvZiBoYXZp bmcgaGFkIHRvIHdhaXQuCisJCSAqLworCQluZWVkZWRfd2FpdCA9IHRydWU7CisKIAkJLyoKIAkJ ICogVGhpcyBtYXkgb25seSBjb21wbGV0ZSB0aGUgSU8gcGFydGlhbGx5LCBlaXRoZXIgYmVjYXVz ZSBzb21lCiAJCSAqIGJ1ZmZlcnMgd2VyZSBhbHJlYWR5IHZhbGlkLCBvciBiZWNhdXNlIG9mIGEg cGFydGlhbCByZWFkLgpAQCAtMTg2Niw2ICsxODgxLDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRC dWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJQ2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihv cGVyYXRpb24sIHRydWUpOwogCiAJLyogTkI6IFJFQURfRE9ORSB0cmFjZXBvaW50IHdhcyBhbHJl YWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwlyZXR1cm4gbmVlZGVkX3dh aXQ7CiB9CiAKIC8qCi0tIAoyLjUzLjAKCg== --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0012-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Disposition: attachment; filename="v13-0012-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv389f8 RnJvbSBkYTc5ZjBiMmU2NWY1MjYyZTk4NmQzMDBiYTk0ZmMxZDJhNjRlNzNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjoyNTo0MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEzIDEy LzE5XSBXSVA6IHJlYWRfc3RyZWFtOiBJc3N1ZSBJTyBzeW5jaHJvbm91c2x5IHdoaWxlIGluCiBm YXN0IHBhdGgKCldoaWxlIGluIGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdo dCBlbmNvdW50ZXIKc3luY2hyb25vdXNseS4gQmVjYXVzZSB3ZSBhcmUsIHJpZ2h0IG5vdywgbm90 IHJlYWRpbmcgYWhlYWQsIGRpc3BhdGNoaW5nIGFueQpvY2Nhc2lvbmFsIElPIHRvIHdvcmtlcnMg d291bGQgaGF2ZSB0aGUgb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2VycywKd2l0aG91 dCBhbnkgcmVhbGlzdGljIGNoYW5jZSBvZiB0aGUgSU8gY29tcGxldGluZyBiZWZvcmUgd2UgbmVl ZCBpdC4KCkF1dGhvcjoKUmV2aWV3ZWQtYnk6CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vCkJhY2twYXRjaDoKLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5j IHwgMTUgKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGNkNTRjMWE3NC4uMzY2N2Q2 N2FiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTgzMyw2ICs4MzMs MTkgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoq cGVyX2J1ZmZlcl9kYXRhKQogCQkJaWYgKHN0cmVhbS0+YWR2aWNlX2VuYWJsZWQpCiAJCQkJZmxh Z3MgfD0gUkVBRF9CVUZGRVJTX0lTU1VFX0FEVklDRTsKIAorCQkJLyoKKwkJCSAqIFdoaWxlIGlu IGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdodCBlbmNvdW50ZXIKKwkJCSAq IHN5bmNocm9ub3VzbHkuIEJlY2F1c2Ugd2UgYXJlLCByaWdodCBub3csIG5vdCByZWFkaW5nIGFo ZWFkLAorCQkJICogZGlzcGF0Y2hpbmcgYW55IG9jY2FzaW9uYWwgSU8gdG8gd29ya2VycyB3b3Vs ZCBoYXZlIHRoZQorCQkJICogb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2Vycywgd2l0 aG91dCBhbnkgcmVhbGlzdGljCisJCQkgKiBjaGFuY2Ugb2YgdGhlIElPIGNvbXBsZXRpbmcgYmVm b3JlIHdlIG5lZWQgaXQuIFdlIHdpbGwgc3dpdGNoCisJCQkgKiB0byBub24tc3luY2hyb25vdXMg SU8gYWZ0ZXIgdGhpcy4KKwkJCSAqCisJCQkgKiBYWFg6IFNob3VsZCB3ZSBkbyBzbyBvbmx5IGZv ciB3b3JrZXIsIG9yIGFsc28gaW9fdXJpbmc/IFRoZXJlJ3MKKwkJCSAqIG5vdCBtdWNoIGRpc3Bh dGNoIG92ZXJoZWFkIHdpdGggaW9fdXJpbmcsIGNvbXBhcmVkIHRvIHdvcmtlci4uLgorCQkJICov CisJCQlmbGFncyB8PSBSRUFEX0JVRkZFUlNfU1lOQ0hST05PVVNMWTsKKwogCQkJLyoKIAkJCSAq IFBpbiBhIGJ1ZmZlciBmb3IgdGhlIG5leHQgY2FsbC4gIFNhbWUgYnVmZmVyIGVudHJ5LCBhbmQK IAkJCSAqIGFyYml0cmFyeSBJL08gZW50cnkgKHRoZXkncmUgYWxsIGZyZWUpLiAgV2UgZG9uJ3Qg aGF2ZSB0bwpAQCAtODYwLDYgKzg3Myw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJCXN0cmVhbS0+aW9zX2lu X3Byb2dyZXNzID0gMTsKIAkJCXN0cmVhbS0+aW9zWzBdLmJ1ZmZlcl9pbmRleCA9IG9sZGVzdF9i dWZmZXJfaW5kZXg7CiAJCQlzdHJlYW0tPnNlcV9ibG9ja251bSA9IG5leHRfYmxvY2tudW0gKyAx OworCisJCQkvKiBGSVhNRTogaXQgd291bGQgcHJvYmFibHkgd29ydGggaXNzdWluZyByZWFkYWhl YWQgaGVyZSAqLwogCQl9CiAJCWVsc2UKIAkJewotLSAKMi41My4wCgo= --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0011-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v13-0011-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv389h9 RnJvbSA4ZWU4ZWEyNjczZjRhMjIzMTlhNDUyOTNhNGMzZTUxODg0OTRlODk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTMgMTEvMTldIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlN RS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNv bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCldoZW4gYSBiYWNrZW5kIGF0dGVtcHRzIHRv IHN0YXJ0IGEgcmVhZCBvbiBhIGJ1ZmZlciBhbmQgZmluZHMgdGhhdCBJL08KaXMgYWxyZWFkeSBp biBwcm9ncmVzcywgaXQgcHJldmlvdXNseSB3YWl0ZWQgZm9yIHRoYXQgSS9PIHRvIGNvbXBsZXRl CmJlZm9yZSBpbml0aWF0aW5nIHJlYWRzIGZvciBhbnkgb3RoZXIgYnVmZmVycy4gQWx0aG91Z2gg dGhlIGJhY2tlbmQgbXVzdApzdGlsbCB3YWl0IGZvciB0aGUgSS9PIHRvIGZpbmlzaCB3aGVuIGxh dGVyIGFjcXVpcmluZyB0aGUgYnVmZmVyLCBpdApzaG91bGQgbm90IG5lZWQgdG8gd2FpdCBhdCBy ZWFkIHN0YXJ0IHRpbWUuIE90aGVyIGJ1ZmZlcnMgbWF5IGJlCmF2YWlsYWJsZSBmb3IgSS9PLCBh bmQgaW4gc29tZSB3b3JrbG9hZHMgdGhpcyB3YWl0aW5nIHNpZ25pZmljYW50bHkKcmVkdWNlcyBj b25jdXJyZW5jeS4KCkZvciBleGFtcGxlLCBpbmRleCBzY2FucyBtYXkgcmVwZWF0ZWRseSByZXF1 ZXN0IHRoZSBzYW1lIGhlYXAgYmxvY2suIElmCnRoZSBiYWNrZW5kIHdhaXRzIGVhY2ggdGltZSBp dCBlbmNvdW50ZXJzIGFuIGluLXByb2dyZXNzIHJlYWQsIHRoZQphY2Nlc3MgcGF0dGVybiBlZmZl Y3RpdmVseSBkZWdlbmVyYXRlcyBpbnRvIHN5bmNocm9ub3VzIEkvTy4gQnkKaW50cm9kdWNpbmcg dGhlIGNvbmNlcHQgb2YgZm9yZWlnbiBJL08gb3BlcmF0aW9ucywgYSBiYWNrZW5kIGNhbiByZWNv cmQKdGhlIGJ1ZmZlcuKAmXMgd2FpdCByZWZlcmVuY2UgYW5kIGRlZmVyIHdhaXRpbmcgdW50aWwg V2FpdFJlYWRCdWZmZXJzKCkKd2hlbiBpdCBhY3R1YWxseSBhY3F1aXJlcyB0aGUgYnVmZmVyLgoK SW4gcmFyZSBjYXNlcywgYSBiYWNrZW5kIG1heSBzdGlsbCBuZWVkIHRvIHdhaXQgd2hlbiBzdGFy dGluZyBhIHJlYWQgaWYKaXQgZW5jb3VudGVycyBhIGJ1ZmZlciBhZnRlciBhbm90aGVyIGJhY2tl bmQgaGFzIHNldCBCTV9JT19JTl9QUk9HUkVTUwpidXQgYmVmb3JlIHRoZSBidWZmZXIgZGVzY3Jp cHRvcuKAmXMgd2FpdCByZWZlcmVuY2UgaGFzIGJlZW4gc2V0LiBTdWNoCndpbmRvd3Mgc2hvdWxk IGJlIGJyaWVmIGFuZCB1bmNvbW1vbi4KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyB8IDQ5 MSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDMyNSBpbnNlcnRpb25zKCspLCAx NjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNDAxNzg5NmY5Li44ZTFiYWY2 OTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0cnVjdCBSZWFkQnVm ZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2CQluYmxvY2tzOwogCWludDE2CQlu YmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQZ0Fpb1dhaXRSZWYgaW9fd3JlZjsK IAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YwppbmRleCA3MGE1ZGJhNzMuLjNjNDhhZTFmOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMKQEAgLTE4NSw2ICsxODUsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclNvcnRBcnJheQog CVNNZ3JSZWxhdGlvbiBzcmVsOwogfSBTTWdyU29ydEFycmF5OwogCisKKy8qCisgKiBJbiBBc3lu Y1JlYWRCdWZmZXJzKCksIHdoZW4gcHJlcGFyaW5nIGEgYnVmZmVyIGZvciByZWFkaW5nIGFuZCBz ZXR0aW5nCisgKiBCTV9JT19JTl9QUk9HUkVTUywgdGhlIGJ1ZmZlciBtYXkgYWxyZWFkeSBoYXZl IEkvTyBpbiBwcm9ncmVzcyBvciBtYXkKKyAqIGFscmVhZHkgY29udGFpbiB0aGUgZGVzaXJlZCBi bG9jay4gQXN5bmNSZWFkQnVmZmVycygpIG11c3QgZGlzdGluZ3Vpc2gKKyAqIGJldHdlZW4gdGhl c2UgY2FzZXMgKGFuZCB0aGUgY2FzZSB3aGVyZSBpdCBzaG91bGQgaW5pdGlhdGUgSS9PKSBzbyBp dCBjYW4KKyAqIG1hcmsgYW4gaW4tcHJvZ3Jlc3MgYnVmZmVyIGFzIGZvcmVpZ24gSS9PIHJhdGhl ciB0aGFuIHdhaXRpbmcgb24gaXQuCisgKi8KK3R5cGVkZWYgZW51bSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXMKK3sKKwlSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkUsCisJUkVBRF9CVUZGRVJfSU5f UFJPR1JFU1MsCisJUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPLAorfSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXM7CisKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGJvb2wJCXplcm9fZGFtYWdlZF9wYWdl cyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21heHBhZ2VzID0gMTAwOwpAQCAtMTYyOCw0 NSArMTY0Myw2IEBAIENoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24oUmVhZEJ1ZmZlcnNPcGVyYXRp b24gKm9wZXJhdGlvbiwgYm9vbCBpc19jb21wbGV0ZSkKICNlbmRpZgogfQogCi0vKiBoZWxwZXIg Zm9yIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTygpLCB0byBhdm9pZCByZXBldGl0aW9uICovCi1zdGF0 aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2FuU3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwg Ym9vbCBub3dhaXQpCi17Ci0JaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKLQkJcmV0dXJuIFN0 YXJ0TG9jYWxCdWZmZXJJTyhHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpLAot CQkJCQkJCQkgIHRydWUsIG5vd2FpdCk7Ci0JZWxzZQotCQlyZXR1cm4gU3RhcnRCdWZmZXJJTyhH ZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBub3dhaXQpOwotfQotCi0vKgot ICogSGVscGVyIGZvciBBc3luY1JlYWRCdWZmZXJzIHRoYXQgdHJpZXMgdG8gZ2V0IHRoZSBidWZm ZXIgcmVhZHkgZm9yIElPLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2Fu U3RhcnRJTyhCdWZmZXIgYnVmZmVyLCBib29sIG5vd2FpdCkKLXsKLQkvKgotCSAqIElmIHRoaXMg YmFja2VuZCBjdXJyZW50bHkgaGFzIHN0YWdlZCBJTywgd2UgbmVlZCB0byBzdWJtaXQgdGhlIHBl bmRpbmcKLQkgKiBJTyBiZWZvcmUgd2FpdGluZyBmb3IgdGhlIHJpZ2h0IHRvIGlzc3VlIElPLCB0 byBhdm9pZCB0aGUgcG90ZW50aWFsIGZvcgotCSAqIGRlYWRsb2NrcyAoYW5kLCBtb3JlIGNvbW1v bmx5LCB1bm5lY2Vzc2FyeSBkZWxheXMgZm9yIG90aGVyIGJhY2tlbmRzKS4KLQkgKi8KLQlpZiAo IW5vd2FpdCAmJiBwZ2Fpb19oYXZlX3N0YWdlZCgpKQotCXsKLQkJaWYgKFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoYnVmZmVyLCB0cnVlKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8qCi0JCSAq IFVuZm9ydHVuYXRlbHkgU3RhcnRCdWZmZXJJTygpIHJldHVybmluZyBmYWxzZSBkb2Vzbid0IGFs bG93IHRvCi0JCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGJ1ZmZlciBhbHJlYWR5IGJlaW5n IHZhbGlkIGFuZCBJTyBhbHJlYWR5Ci0JCSAqIGJlaW5nIGluIHByb2dyZXNzLiBTaW5jZSBJTyBh bHJlYWR5IGJlaW5nIGluIHByb2dyZXNzIGlzIHF1aXRlCi0JCSAqIHJhcmUsIHRoaXMgYXBwcm9h Y2ggc2VlbXMgZmluZS4KLQkJICovCi0JCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKLQl9Ci0KLQly ZXR1cm4gUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShidWZmZXIsIG5vd2FpdCk7Ci19Ci0KIC8q CiAgKiBXZSB0cmFjayB2YXJpb3VzIHN0YXRzIHJlbGF0ZWQgdG8gYnVmZmVyIGhpdHMuIEJlY2F1 c2UgdGhpcyBpcyBkb25lIGluIGEKICAqIGZldyBzZXBhcmF0ZSBwbGFjZXMsIHRoaXMgaGVscGVy IGV4aXN0cyBmb3IgY29udmVuaWVuY2UuCkBAIC0xODE2LDcgKzE3OTIsNyBAQCBXYWl0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCSAqCiAJCQkgKiB3ZSBm aXJzdCBjaGVjayBpZiB3ZSBhbHJlYWR5IGtub3cgdGhlIElPIGlzIGNvbXBsZXRlLgogCQkJICov Ci0JCQlpZiAoYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOICYmCisJ CQlpZiAoKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyB8fCBhaW9fcmV0LT5yZXN1bHQuc3RhdHVzID09 IFBHQUlPX1JTX1VOS05PV04pICYmCiAJCQkJIXBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0 aW9uLT5pb193cmVmKSkKIAkJCXsKIAkJCQlpbnN0cl90aW1lCWlvX3N0YXJ0ID0gcGdzdGF0X3By ZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOwpAQCAtMTgzNSwxMSArMTgxMSwzMyBAQCBX YWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCQlBc3Nl cnQocGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRpb24tPmlvX3dyZWYpKTsKIAkJCX0KIAot CQkJLyoKLQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBDaGVjayB0aGUg cmVzdWx0cy4gVGhpcwotCQkJICogaW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVy ZSB3ZXJlIGFueS4KLQkJCSAqLwotCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KG9wZXJhdGlv bik7CisJCQlpZiAodW5saWtlbHkob3BlcmF0aW9uLT5mb3JlaWduX2lvKSkKKwkJCXsKKwkJCQlC dWZmZXIJCWJ1ZmZlciA9IG9wZXJhdGlvbi0+YnVmZmVyc1tvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZV07CisJCQkJQnVmZmVyRGVzYyAqZGVzYyA9IEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSA/CisJCQkJ CUdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSkgOgorCQkJCQlHZXRCdWZmZXJE ZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCQkJCXVpbnQzMgkJYnVmX3N0YXRlID0gcGdfYXRvbWlj X3JlYWRfdTY0KCZkZXNjLT5zdGF0ZSk7CisKKwkJCQlpZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQp CisJCQkJeworCQkJCQlvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSArPSAxOworCQkJCQlBc3NlcnQo b3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgPD0gb3BlcmF0aW9uLT5uYmxvY2tzKTsKKworCQkJCQlQ cm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+c3RyYXRlZ3ksCisJCQkJCQkJCQkgb3BlcmF0aW9u LT5yZWwsIG9wZXJhdGlvbi0+cGVyc2lzdGVuY2UsCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5zbWdy LCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5ibG9ja251bSArIG9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJl c3VsdHMuIFRoaXMKKwkJCQkgKiBpbmNsdWRlcyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJl IHdlcmUgYW55LgorCQkJCSAqLworCQkJCVByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRp b24pOworCQkJfQogCQl9CiAKIAkJLyoKQEAgLTE4NzAsNiArMTg2OCwxNTkgQEAgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJLyogTkI6IFJFQURfRE9O RSB0cmFjZXBvaW50IHdhcyBhbHJlYWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sg Ki8KIH0KIAorLyoKKyAqIExvY2FsIHZlcnNpb24gb2YgUHJlcGFyZU5ld1JlYWRCdWZmZXJJTygp LiBIZXJlIGluc3RlYWQgb2YgbG9jYWxidWYuYyB0bworICogYXZvaWQgYW4gZXh0ZXJuYWwgZnVu Y3Rpb24gY2FsbC4KKyAqLworc3RhdGljIFByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cworUHJlcGFy ZU5ld0xvY2FsUmVhZEJ1ZmZlcklPKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCisJ CQkJCQkJQnVmZmVyIGJ1ZmZlcikKK3sKKwlCdWZmZXJEZXNjICpkZXNjID0gR2V0TG9jYWxCdWZm ZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwl1aW50NjQJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21p Y19yZWFkX3U2NCgmZGVzYy0+c3RhdGUpOworCisJLyogQWxyZWFkeSB2YWxpZCwgbm8gd29yayB0 byBkbyAqLworCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwl7CisJCXBnYWlvX3dyZWZfY2xl YXIoJm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJFQURZX0RP TkU7CisJfQorCisJcGdhaW9fc3VibWl0X3N0YWdlZCgpOworCisJaWYgKHBnYWlvX3dyZWZfdmFs aWQoJmRlc2MtPmlvX3dyZWYpKQorCXsKKwkJb3BlcmF0aW9uLT5pb193cmVmID0gZGVzYy0+aW9f d3JlZjsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJcmV0dXJuIFJFQURfQlVG RkVSX0lOX1BST0dSRVNTOworCX0KKworCXJldHVybiBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU87 Cit9CisKKy8qCisgKiBUcnkgdG8gc3RhcnQgSU8gb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiBhIG5l dyBydW4gb2YgYmxvY2tzLiBJZiBBSU8gaXMgaW4KKyAqIHByb2dyZXNzLCBiZSBpdCBpbiB0aGlz IGJhY2tlbmQgb3IgYW5vdGhlciBiYWNrZW5kLCB3ZSBqdXN0IGFzc29jaWF0ZSB0aGUKKyAqIHdh aXQgcmVmZXJlbmNlIHdpdGggdGhlIG9wZXJhdGlvbiBhbmQgd2FpdCBpbiBXYWl0UmVhZEJ1ZmZl cnMoKS4gVGhpcyB0dXJucworICogb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2Ug aW4gdHdvIHdvcmtsb2FkczoKKyAqCisgKiAxKSBBIHJlYWQgc3RyZWFtIHRoYXQgaGFzIHRvIHJl YWQgdGhlIHNhbWUgYmxvY2sgbXVsdGlwbGUgdGltZXMgd2l0aGluIHRoZQorICogICAgcmVhZGFo ZWFkIGRpc3RhbmNlLiBUaGlzIGNhbiBoYXBwZW4gZS5nLiBmb3IgdGhlIHRhYmxlIGFjY2Vzc2Vz IG9mIGFuCisgKiAgICBpbmRleCBzY2FuLgorICoKKyAqIDIpIENvbmN1cnJlbnQgc2NhbnMgYnkg bXVsdGlwbGUgYmFja2VuZHMgb24gdGhlIHNhbWUgcmVsYXRpb24uCisgKgorICogSWYgd2Ugd2Vy ZSB0byBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBpbi1wcm9ncmVzcyBJTywgd2UnZCBub3Qg YmUgYWJsZQorICogdG8ga2VlcCBlbm91Z2ggSS9PIGluIGZsaWdodC4KKyAqCisgKiBJZiB3ZSBk byBmaW5kIHRoZXJlIGlzIG9uZ29pbmcgSS9PIGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQgdXAgYSAx LWJsb2NrCisgKiBSZWFkQnVmZmVyc09wZXJhdGlvbiB0aGF0IFdhaXRSZWFkQnVmZmVycyB0aGVu IGNhbiB3YWl0IG9uLgorICoKKyAqIEl0J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tlbmQg aGFzIHN0YXJ0ZWQgSU8gb24gdGhlIGJ1ZmZlciBidXQgbm90IHlldAorICogc2V0IGl0cyB3YWl0 IHJlZmVyZW5jZS4gSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gd2FpdCBm b3IKKyAqIGVpdGhlciB0aGUgd2FpdCByZWZlcmVuY2UgdG8gYmUgdmFsaWQgb3IgdGhlIElPIHRv IGJlIGRvbmUuCisgKi8KK3N0YXRpYyBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK1ByZXBhcmVO ZXdSZWFkQnVmZmVySU8oUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKKwkJCQkJICAg QnVmZmVyIGJ1ZmZlcikKK3sKKwl1aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNj OworCisJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwkJcmV0dXJuIFByZXBhcmVOZXdMb2Nh bFJlYWRCdWZmZXJJTyhvcGVyYXRpb24sIGJ1ZmZlcik7CisKKwlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVm ZmVyIC0gMSk7CisKKwlmb3IgKDs7KQorCXsKKwkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNj KTsKKworCQkvKiBBbHJlYWR5IHZhbGlkLCBubyB3b3JrIHRvIGRvICovCisJCWlmIChidWZfc3Rh dGUgJiBCTV9WQUxJRCkKKwkJeworCQkJVW5sb2NrQnVmSGRyKGRlc2MpOworCQkJcGdhaW9fd3Jl Zl9jbGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKKwkJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJF QURZX0RPTkU7CisJCX0KKworCQlpZiAoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpCisJ CXsKKwkJCS8qIEpvaW4gZXhpc3RpbmcgcmVhZCAqLworCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQo JmRlc2MtPmlvX3dyZWYpKQorCQkJeworCQkJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGRlc2MtPmlv X3dyZWY7CisJCQkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQkJcmV0dXJuIFJFQURfQlVGRkVSX0lOX1BST0dSRVNTOworCQkJfQorCisJ CQkvKgorCQkJICogSWYgdGhlIHdhaXQgcmVmIGlzIG5vdCB2YWxpZCBidXQgdGhlIElPIGlzIGlu IHByb2dyZXNzLCBzb21lb25lCisJCQkgKiBlbHNlIHN0YXJ0ZWQgSU8gYnV0IGhhc24ndCBzZXQg dGhlIHdhaXQgcmVmIHlldC4gV2UgaGF2ZSBubworCQkJICogY2hvaWNlIGJ1dCB0byB3YWl0IHVu dGlsIHRoZSB3YWl0IHJlZiBpcyBzZXQgb3IgdGhlIElPCisJCQkgKiBjb21wbGV0ZXMuCisJCQkg Ki8KKwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKKwkJ CVdhaXRJTyhkZXNjKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTm8gSU8gaW4g cHJvZ3Jlc3MgYW5kIG5vdCBhbHJlYWR5IHZhbGlkOyBXZSB3aWxsIHN0YXJ0IElPLiBJdCdzCisJ CSAqIHBvc3NpYmxlIHRoYXQgdGhlIElPIHdhcyBpbiBwcm9ncmVzcyBhbmQgbmV2ZXIgYmVjYW1l IHZhbGlkIGJlY2F1c2UKKwkJICogdGhlIElPIGVycm9yZWQgb3V0LiBXZSdsbCBkbyB0aGUgSU8g b3Vyc2VsdmVzLgorCQkgKi8KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2MsIGJ1Zl9zdGF0ZSwgQk1f SU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVtZW1iZXJCdWZmZXJJTyhD dXJyZW50UmVzb3VyY2VPd25lciwKKwkJCQkJCQkJCSAgQnVmZmVyRGVzY3JpcHRvckdldEJ1ZmZl cihkZXNjKSk7CisKKwkJcmV0dXJuIFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTzsKKwl9Cit9CisK KworLyoKKyAqIFdoZW4gYnVpbGRpbmcgYSBuZXcgSU8gZnJvbSBtdWx0aXBsZSBidWZmZXJzLCB3 ZSB3b24ndCBpbmNsdWRlIGJ1ZmZlcnMKKyAqIHRoYXQgYXJlIGFscmVhZHkgdmFsaWQgb3IgYWxy ZWFkeSBpbiBwcm9ncmVzcy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZQorICogdXNlZCBm b3IgYWRkaXRpb25hbCBhZGphY2VudCBidWZmZXJzIGZvbGxvd2luZyB0aGUgaGVhZCBidWZmZXIg aW4gYSBuZXcgSU8uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIHN1Y2Nl c3NmdWxseSBwcmVwYXJlZCBmb3IgSU8gYW5kIGZhbHNlIGlmIGl0CisgKiBpcyByZWplY3RlZCBh bmQgdGhlIHJlYWQgSU8gc2hvdWxkIG5vdCBpbmNsdWRlIHRoaXMgYnVmZmVyLgorKi8KK3N0YXRp YyBib29sCitQcmVwYXJlQWRkaXRpb25hbFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlcikKK3sKKwl1 aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNjOworCisJaWYgKEJ1ZmZlcklzTG9j YWwoYnVmZmVyKSkKKwl7CisJCWRlc2MgPSBHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZl ciAtIDEpOworCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0YXRlKTsK KwkJLyogTG9jYWwgYnVmZmVycyBkb24ndCB1c2UgQk1fSU9fSU5fUFJPR1JFU1MgKi8KKwkJaWYg KGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEIHx8IHBnYWlvX3dyZWZfdmFsaWQoJmRlc2MtPmlvX3dyZWYp KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1 ZmZlciAtIDEpOworCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGRlc2MpOworCQlpZiAoYnVmX3N0 YXRlICYgKEJNX1ZBTElEIHwgQk1fSU9fSU5fUFJPR1JFU1MpKQorCQl7CisJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2Ms IGJ1Zl9zdGF0ZSwgQk1fSU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVt ZW1iZXJCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKwogLyoKICAqIEluaXRpYXRlIElPIGZvciB0aGUgUmVhZEJ1ZmZlcnNPcGVy YXRpb24KICAqCkBAIC0xOTAzLDcgKzIwNTQsNzUgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJdm9pZAkg ICAqaW9fcGFnZXNbTUFYX0lPX0NPTUJJTkVfTElNSVRdOwogCUlPQ29udGV4dAlpb19jb250ZXh0 OwogCUlPT2JqZWN0CWlvX29iamVjdDsKLQlib29sCQlkaWRfc3RhcnRfaW87CisJaW5zdHJfdGlt ZQlpb19zdGFydDsKKwlQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMgc3RhdHVzOworCisJLyoKKwkg KiBXZSBtdXN0IGdldCBhbiBJTyBoYW5kbGUgYmVmb3JlIFN0YXJ0TmV3QnVmZmVyUmVhZElPKCks IGFzCisJICogcGdhaW9faW9fYWNxdWlyZSgpIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3 YW50IGFmdGVyIHNldHRpbmcKKwkgKiBJT19JTl9QUk9HUkVTUy4gSWYgd2UgZG9uJ3QgbmVlZCB0 byBkbyB0aGUgSU8sIHdlJ2xsIHJlbGVhc2UgdGhlCisJICogaGFuZGxlLgorCSAqCisJICogSWYg d2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZvcmUgd2UgY2FuIGdldCBhIGhhbmRsZSwgc3VibWl0 CisJICogYWxyZWFkeS1zdGFnZWQgSU8gZmlyc3QsIHNvIHRoYXQgb3RoZXIgYmFja2VuZHMgZG9u J3QgbmVlZCB0byB3YWl0LgorCSAqIFRoZXJlIHdvdWxkbid0IGJlIGEgZGVhZGxvY2sgcmlzaywg YXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3QgbmVlZHMgdG8KKwkgKiB3YWl0IGZvciBhbHJlYWR5 IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFkZGl0aW9uYWwgbG9ja3MsCisJ ICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNlIHVuZGVzaXJhYmxlIHdhaXRzLgorCSAqCisJICog QSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd291bGQgYWxsb3cgdXMgdG8gbWVhc3Vy ZSB0aGUgdGltZSBpbgorCSAqIHBnYWlvX2lvX2FjcXVpcmUoKSB3aXRob3V0IGNhdXNpbmcgdW5k dWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiwKKwkgKiBub24tYmxvY2tpbmcsIGNhc2Uu ICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBnc3RhdHMgaW5mcmFzdHJ1Y3R1cmUKKwkgKiBkb2Vz bid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBpdCBhKSBhc3NlcnRzIHRoYXQgYW4gb3BlcmF0aW9u IGNhbid0CisJICogaGF2ZSB0aW1lIHdpdGhvdXQgb3BlcmF0aW9ucyBiKSBkb2Vzbid0IGhhdmUg YW4gQVBJIHRvIHJlcG9ydAorCSAqICJhY2N1bXVsYXRlZCIgdGltZS4KKwkgKi8KKwlpb2ggPSBw Z2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9uLT5pb19y ZXR1cm4pOworCWlmICh1bmxpa2VseSghaW9oKSkKKwl7CisJCXBnYWlvX3N1Ym1pdF9zdGFnZWQo KTsKKwkJaW9oID0gcGdhaW9faW9fYWNxdWlyZShDdXJyZW50UmVzb3VyY2VPd25lciwgJm9wZXJh dGlvbi0+aW9fcmV0dXJuKTsKKwl9CisKKwlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSBmYWxzZTsK KworCS8qIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVhZCBi dWZmZXIgKi8KKwlpZiAoKHN0YXR1cyA9IFByZXBhcmVOZXdSZWFkQnVmZmVySU8ob3BlcmF0aW9u LCBidWZmZXJzW25ibG9ja3NfZG9uZV0pKSA8CisJCVJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTykK Kwl7CisJCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKKwkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOwor CQlpZiAoc3RhdHVzID09IFJFQURfQlVGRkVSX0FMUkVBRFlfRE9ORSkKKwkJeworCQkJLyoKKwkJ CSAqIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBibG9jaywgd2UncmUg ZG9uZS4KKwkJCSAqCisJCQkgKiBXaGVuIElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUg aXMgdXBkYXRlZCBpbgorCQkJICogUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KCksIGJ1dCB0aGF0 IGlzIG5vdCBjYWxsZWQgaWYgbm8gSU8gaXMKKwkJCSAqIG5lY2Vzc2FyeS4gVGh1cyB1cGRhdGUg aGVyZS4KKwkJCSAqLworCQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsKKwkJCUFzc2Vy dChvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkv KgorCQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2gKKwkJCSAqIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3Mg aW4gUGluQnVmZmVyRm9yQmxvY2soKS4gVGhlCisJCQkgKiBvdGhlciBiYWNrZW5kIHdpbGwgdHJh Y2sgdGhpcyBhcyBhICdyZWFkJy4KKwkJCSAqLworCQkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRp b24tPnN0cmF0ZWd5LAorCQkJCQkJCSBvcGVyYXRpb24tPnJlbCwgb3BlcmF0aW9uLT5wZXJzaXN0 ZW5jZSwKKwkJCQkJCQkgb3BlcmF0aW9uLT5zbWdyLCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJ CQkJIG9wZXJhdGlvbi0+YmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBUaGUgSU8gaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyAq LworCQlBc3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX0lOX1BST0dSRVNTKTsKKwkJQ2hlY2tS ZWFkQnVmZmVyc09wZXJhdGlvbihvcGVyYXRpb24sIGZhbHNlKTsKKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyogV2UgY2FuIHJlYWQgaW4gYXQgbGVhc3QgdGhlIGhlYWQgYnVmZmVyIC4gKi8KKwlB c3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTyk7CiAKIAkvKgogCSAqIFdo ZW4gdGhpcyBJTyBpcyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LCBlaXRoZXIgYmVjYXVzZSB0aGUg Y2FsbGVyIHdpbGwKQEAgLTE5NTQsMTM4ICsyMTczLDc0IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVh ZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCSAq LwogCXBnc3RhdF9wcmVwYXJlX3JlcG9ydF9jaGVja3N1bV9mYWlsdXJlKG9wZXJhdGlvbi0+c21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkKTsKIAotCS8qCi0JICogR2V0IElPIGhhbmRs ZSBiZWZvcmUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKCksIGFzIHBnYWlvX2lvX2FjcXVpcmUoKQot CSAqIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3YW50IGFmdGVyIHNldHRpbmcgSU9fSU5f UFJPR1JFU1MuCi0JICoKLQkgKiBJZiB3ZSBuZWVkIHRvIHdhaXQgZm9yIElPIGJlZm9yZSB3ZSBj YW4gZ2V0IGEgaGFuZGxlLCBzdWJtaXQKLQkgKiBhbHJlYWR5LXN0YWdlZCBJTyBmaXJzdCwgc28g dGhhdCBvdGhlciBiYWNrZW5kcyBkb24ndCBuZWVkIHRvIHdhaXQuCi0JICogVGhlcmUgd291bGRu J3QgYmUgYSBkZWFkbG9jayByaXNrLCBhcyBwZ2Fpb19pb19hY3F1aXJlKCkganVzdCBuZWVkcyB0 bwotCSAqIHdhaXQgZm9yIGFscmVhZHkgc3VibWl0dGVkIElPLCB3aGljaCBkb2Vzbid0IHJlcXVp cmUgYWRkaXRpb25hbCBsb2NrcywKLQkgKiBidXQgaXQgY291bGQgc3RpbGwgY2F1c2UgdW5kZXNp cmFibGUgd2FpdHMuCi0JICoKLQkgKiBBIHNlY29uZGFyeSBiZW5lZml0IGlzIHRoYXQgdGhpcyB3 b3VsZCBhbGxvdyB1cyB0byBtZWFzdXJlIHRoZSB0aW1lIGluCi0JICogcGdhaW9faW9fYWNxdWly ZSgpIHdpdGhvdXQgY2F1c2luZyB1bmR1ZSB0aW1lciBvdmVyaGVhZCBpbiB0aGUgY29tbW9uLAot CSAqIG5vbi1ibG9ja2luZywgY2FzZS4gIEhvd2V2ZXIsIGN1cnJlbnRseSB0aGUgcGdzdGF0cyBp bmZyYXN0cnVjdHVyZQotCSAqIGRvZXNuJ3QgcmVhbGx5IGFsbG93IHRoYXQsIGFzIGl0IGEpIGFz c2VydHMgdGhhdCBhbiBvcGVyYXRpb24gY2FuJ3QKLQkgKiBoYXZlIHRpbWUgd2l0aG91dCBvcGVy YXRpb25zIGIpIGRvZXNuJ3QgaGF2ZSBhbiBBUEkgdG8gcmVwb3J0Ci0JICogImFjY3VtdWxhdGVk IiB0aW1lLgotCSAqLwotCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmVfbmIoQ3VycmVudFJlc291cmNl T3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JaWYgKHVubGlrZWx5KCFpb2gpKQotCXsK LQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCi0JCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmUoQ3Vy cmVudFJlc291cmNlT3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JfQorCUFzc2VydChp b19idWZmZXJzWzBdID09IGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSk7CisJaW9fcGFnZXNbMF0gPSBC dWZmZXJHZXRCbG9jayhidWZmZXJzW25ibG9ja3NfZG9uZV0pOworCWlvX2J1ZmZlcnNfbGVuID0g MTsKIAogCS8qCi0JICogQ2hlY2sgaWYgd2UgY2FuIHN0YXJ0IElPIG9uIHRoZSBmaXJzdCB0by1i ZS1yZWFkIGJ1ZmZlci4KLQkgKgotCSAqIElmIGFuIEkvTyBpcyBhbHJlYWR5IGluIHByb2dyZXNz IGluIGFub3RoZXIgYmFja2VuZCwgd2Ugd2FudCB0byB3YWl0Ci0JICogZm9yIHRoZSBvdXRjb21l OiBlaXRoZXIgZG9uZSwgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdpbGwKLQkgKiBy ZXRyeS4KKwkgKiBIb3cgbWFueSBuZWlnaGJvcmluZy1vbi1kaXNrIGJsb2NrcyBjYW4gd2Ugc2Nh dHRlci1yZWFkIGludG8gb3RoZXIKKwkgKiBidWZmZXJzIGF0IHRoZSBzYW1lIHRpbWU/ICBJbiB0 aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FpdCBpZiB3ZSBzZWUgYW4gSS9PCisJICogYWxyZWFkeSBpbiBw cm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJNX0lPX0lOX1BST0dSRVNTIGZvciB0aGUgaGVhZAor CSAqIGJsb2NrLCBzbyB3ZSBzaG91bGQgZ2V0IG9uIHdpdGggdGhhdCBJL08gYXMgc29vbiBhcyBw b3NzaWJsZS4KIAkgKi8KLQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW25ibG9j a3NfZG9uZV0sIGZhbHNlKSkKKwlmb3IgKGludCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9w ZXJhdGlvbi0+bmJsb2NrczsgaSsrKQogCXsKLQkJLyoKLQkJICogU29tZW9uZSBlbHNlIGhhcyBh bHJlYWR5IGNvbXBsZXRlZCB0aGlzIGJsb2NrLCB3ZSdyZSBkb25lLgotCQkgKgotCQkgKiBXaGVu IElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUgaXMgdXBkYXRlZCBpbgotCQkgKiBQcm9j ZXNzUmVhZEJ1ZmZlcnNSZXN1bHQoKSwgYnV0IHRoYXQgaXMgbm90IGNhbGxlZCBpZiBubyBJTyBp cwotCQkgKiBuZWNlc3NhcnkuIFRodXMgdXBkYXRlIGhlcmUuCi0JCSAqLwotCQlvcGVyYXRpb24t Pm5ibG9ja3NfZG9uZSArPSAxOwotCQkqbmJsb2Nrc19wcm9ncmVzcyA9IDE7CisJCWlmICghUHJl cGFyZUFkZGl0aW9uYWxSZWFkQnVmZmVyKGJ1ZmZlcnNbaV0pKQorCQkJYnJlYWs7CisJCS8qIE11 c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFdKSA9PQorCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmZmVyc1tpXSkgLSAxKTsKKwkJQXNzZXJ0KGlvX2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09 IGJ1ZmZlcnNbaV0pOwogCi0JCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKLQkJcGdhaW9fd3JlZl9j bGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKLQkJZGlkX3N0YXJ0X2lvID0gZmFsc2U7Ci0KLQkJ LyoKLQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2ggaXQKLQkJICogbXVzdCBoYXZlIHN0YXJ0ZWQgb3V0IGFzIGEgbWlzcyBp biBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUgb3RoZXIKLQkJICogYmFja2VuZCB3aWxsIHRyYWNr IHRoaXMgYXMgYSAncmVhZCcuCi0JCSAqLwotCQlQcm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+ c3RyYXRlZ3ksIG9wZXJhdGlvbi0+cmVsLCBwZXJzaXN0ZW5jZSwKLQkJCQkJCSBvcGVyYXRpb24t PnNtZ3IsIGZvcmtudW0sCi0JCQkJCQkgYmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSk7CisJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0QmxvY2soYnVmZmVy c1tpXSk7CiAJfQorCisJLyogZ2V0IGEgcmVmZXJlbmNlIHRvIHdhaXQgZm9yIGluIFdhaXRSZWFk QnVmZmVycygpICovCisJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3BlcmF0aW9uLT5pb193cmVm KTsKKworCS8qIHByb3ZpZGUgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB0aGUgY29tcGxldGlvbiBj YWxsYmFja3MgKi8KKwlwZ2Fpb19pb19zZXRfaGFuZGxlX2RhdGFfMzIoaW9oLCAodWludDMyICop IGlvX2J1ZmZlcnMsIGlvX2J1ZmZlcnNfbGVuKTsKKworCXBnYWlvX2lvX3JlZ2lzdGVyX2NhbGxi YWNrcyhpb2gsCisJCQkJCQkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAgPwor CQkJCQkJCQlQR0FJT19IQ0JfTE9DQUxfQlVGRkVSX1JFQURWIDoKKwkJCQkJCQkJUEdBSU9fSENC X1NIQVJFRF9CVUZGRVJfUkVBRFYsCisJCQkJCQkJCWZsYWdzKTsKKworCXBnYWlvX2lvX3NldF9m bGFnKGlvaCwgaW9oX2ZsYWdzKTsKKworCS8qIC0tLQorCSogRXZlbiB0aG91Z2ggd2UncmUgdHJ5 aW5nIHRvIGlzc3VlIElPIGFzeW5jaHJvbm91c2x5LCB0cmFjayB0aGUgdGltZQorCSogaW4gc21n cnN0YXJ0cmVhZHYoKToKKwkqIC0gaWYgaW9fbWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdp bGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCisJKiAgIGltbWVkaWF0ZWx5CisJKiAtIHRoZSBpbyBt ZXRob2QgbWlnaHQgbm90IHN1cHBvcnQgdGhlIElPIChlLmcuIHdvcmtlciBJTyBmb3IgYSB0ZW1w CisJKiAgIHRhYmxlKQorCSogLS0tCisJKi8KKwlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lv X3RpbWUodHJhY2tfaW9fdGltaW5nKTsKKwlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+ c21nciwgZm9ya251bSwKKwkJCQkgICBibG9ja251bSArIG5ibG9ja3NfZG9uZSwKKwkJCQkgICBp b19wYWdlcywgaW9fYnVmZmVyc19sZW4pOworCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29i amVjdCwgaW9fY29udGV4dCwgSU9PUF9SRUFELAorCQkJCQkJCWlvX3N0YXJ0LCAxLCBpb19idWZm ZXJzX2xlbiAqIEJMQ0tTWik7CisKKwlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf VEVNUCkKKwkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47 CiAJZWxzZQotCXsKLQkJaW5zdHJfdGltZQlpb19zdGFydDsKKwkJcGdCdWZmZXJVc2FnZS5zaGFy ZWRfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwogCi0JCS8qIFdlIGZvdW5kIGEgYnVmZmVy IHRoYXQgd2UgbmVlZCB0byByZWFkIGluLiAqLwotCQlBc3NlcnQoaW9fYnVmZmVyc1swXSA9PSBi dWZmZXJzW25ibG9ja3NfZG9uZV0pOwotCQlpb19wYWdlc1swXSA9IEJ1ZmZlckdldEJsb2NrKGJ1 ZmZlcnNbbmJsb2Nrc19kb25lXSk7Ci0JCWlvX2J1ZmZlcnNfbGVuID0gMTsKKwkvKgorCSAqIFRy YWNrIHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0 LiBPdGhlcndpc2UKKwkgKiB3ZSBjb3VsZCBlbmQgdXAgaXNzdWluZyBhIGxvdCBvZiBJTyBpbiBh IHNob3J0IHRpbWVzcGFuLCBkZXNwaXRlIGEgbG93CisJICogY29zdCBsaW1pdC4KKwkgKi8KKwlp ZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBh Z2VNaXNzICogaW9fYnVmZmVyc19sZW47CiAKLQkJLyoKLQkJICogSG93IG1hbnkgbmVpZ2hib3Jp bmctb24tZGlzayBibG9ja3MgY2FuIHdlIHNjYXR0ZXItcmVhZCBpbnRvIG90aGVyCi0JCSAqIGJ1 ZmZlcnMgYXQgdGhlIHNhbWUgdGltZT8gIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YWl0IGlmIHdl IHNlZSBhbgotCQkgKiBJL08gYWxyZWFkeSBpbiBwcm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJN X0lPX0lOX1BST0dSRVNTIGZvciB0aGUKLQkJICogaGVhZCBibG9jaywgc28gd2Ugc2hvdWxkIGdl dCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNvb24gYXMgcG9zc2libGUuCi0JCSAqLwotCQlmb3IgKGlu dCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9wZXJhdGlvbi0+bmJsb2NrczsgaSsrKQotCQl7 Ci0JCQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW2ldLCB0cnVlKSkKLQkJCQli cmVhazsKLQkJCS8qIE11c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KLQkJCUFz c2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2kgLSAxXSkgPT0KLQkJCQkgICBCdWZm ZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2ldKSAtIDEpOwotCQkJQXNzZXJ0KGlvX2J1ZmZlcnNb aW9fYnVmZmVyc19sZW5dID09IGJ1ZmZlcnNbaV0pOworCSpuYmxvY2tzX3Byb2dyZXNzID0gaW9f YnVmZmVyc19sZW47CiAKLQkJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0 QmxvY2soYnVmZmVyc1tpXSk7Ci0JCX0KLQotCQkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBm b3IgaW4gV2FpdFJlYWRCdWZmZXJzKCkgKi8KLQkJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3Bl cmF0aW9uLT5pb193cmVmKTsKLQotCQkvKiBwcm92aWRlIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgdG8g dGhlIGNvbXBsZXRpb24gY2FsbGJhY2tzICovCi0JCXBnYWlvX2lvX3NldF9oYW5kbGVfZGF0YV8z Mihpb2gsICh1aW50MzIgKikgaW9fYnVmZmVycywgaW9fYnVmZmVyc19sZW4pOwotCi0JCXBnYWlv X2lvX3JlZ2lzdGVyX2NhbGxiYWNrcyhpb2gsCi0JCQkJCQkJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QID8KLQkJCQkJCQkJCVBHQUlPX0hDQl9MT0NBTF9CVUZGRVJfUkVBRFYg OgotCQkJCQkJCQkJUEdBSU9fSENCX1NIQVJFRF9CVUZGRVJfUkVBRFYsCi0JCQkJCQkJCQlmbGFn cyk7Ci0KLQkJcGdhaW9faW9fc2V0X2ZsYWcoaW9oLCBpb2hfZmxhZ3MpOwotCi0JCS8qIC0tLQot CQkgKiBFdmVuIHRob3VnaCB3ZSdyZSB0cnlpbmcgdG8gaXNzdWUgSU8gYXN5bmNocm9ub3VzbHks IHRyYWNrIHRoZSB0aW1lCi0JCSAqIGluIHNtZ3JzdGFydHJlYWR2KCk6Ci0JCSAqIC0gaWYgaW9f bWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCi0J CSAqICAgaW1tZWRpYXRlbHkKLQkJICogLSB0aGUgaW8gbWV0aG9kIG1pZ2h0IG5vdCBzdXBwb3J0 IHRoZSBJTyAoZS5nLiB3b3JrZXIgSU8gZm9yIGEgdGVtcAotCQkgKiAgIHRhYmxlKQotCQkgKiAt LS0KLQkJICovCi0JCWlvX3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9fdGltZSh0cmFja19pb190 aW1pbmcpOwotCQlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+c21nciwgZm9ya251bSwK LQkJCQkJICAgYmxvY2tudW0gKyBuYmxvY2tzX2RvbmUsCi0JCQkJCSAgIGlvX3BhZ2VzLCBpb19i dWZmZXJzX2xlbik7Ci0JCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9SRUFELAotCQkJCQkJCQlpb19zdGFydCwgMSwgaW9fYnVmZmVyc19sZW4gKiBC TENLU1opOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQotCQkJ cGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47Ci0JCWVsc2UK LQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfcmVhZCArPSBpb19idWZmZXJzX2xlbjsKLQot CQkvKgotCQkgKiBUcmFjayB2YWN1dW0gY29zdCB3aGVuIGlzc3VpbmcgSU8sIG5vdCBhZnRlciB3 YWl0aW5nIGZvciBpdC4KLQkJICogT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCBpc3N1aW5nIGEg bG90IG9mIElPIGluIGEgc2hvcnQgdGltZXNwYW4sCi0JCSAqIGRlc3BpdGUgYSBsb3cgY29zdCBs aW1pdC4KLQkJICovCi0JCWlmIChWYWN1dW1Db3N0QWN0aXZlKQotCQkJVmFjdXVtQ29zdEJhbGFu Y2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzICogaW9fYnVmZmVyc19sZW47Ci0KLQkJKm5ibG9ja3Nf cHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKLQkJZGlkX3N0YXJ0X2lvID0gdHJ1ZTsKLQl9Ci0K LQlyZXR1cm4gZGlkX3N0YXJ0X2lvOworCXJldHVybiB0cnVlOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBkMzMxYWVkZmEuLjRkNDcwYTA1MSAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTIzNDksNiArMjM0OSw3IEBAIFByZWRpY2F0ZUxvY2tEYXRhCiBQcmVk aWNhdGVMb2NrVGFyZ2V0VHlwZQogUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIFByZXBQYXJhbGxlbFJl c3RvcmVQdHJUeXBlCitQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKIFByZXBhcmVTdG10CiBQcmVw YXJlZFN0YXRlbWVudAogUHJlc29ydGVkS2V5RGF0YQotLSAKMi41My4wCgo= --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0007-Limit-get_actual_variable_range-to-scan-three-in.patch" Content-Disposition: attachment; filename="v13-0007-Limit-get_actual_variable_range-to-scan-three-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv389q13 RnJvbSA5ODYyYzc3NmNhYTkzNGI3ZDFlNGY5NTQxNjNiZjQ0MzkxZTMyYjU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMiBGZWIgMjAyNiAyMzozNDozNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEzIDA3LzE5XSBM aW1pdCBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW4gdGhyZWUgaW5kZXgKIHBhZ2Vz LgoKZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBzY2FucyBhbiBpbmRleCB0byBmaW5kIGFjdHVh bCBtaW4vbWF4IHZhbHVlcwpmb3IgcGxhbm5lciBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uLiAgU2lu Y2UgdGhpcyBoYXBwZW5zIGR1cmluZyBwbGFubmluZywKd2UgY2FuJ3QgYWZmb3JkIHRvIHNwZW5k IHRvbyBtdWNoIHRpbWUgb24gaXQuICBDb21taXQgOWM2YWQ1ZWFhOSBhZGRlZApWSVNJVEVEX1BB R0VTX0xJTUlUIChhIGxpbWl0IG9mIDEwMCBoZWFwIHBhZ2UgdmlzaXRzKSB0byBib3VuZCB0aGUK YW1vdW50IG9mIHdvcmsgcGVyZm9ybWVkLCBnaXZpbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB0byB0 aGUgcGdfc3RhdGlzdGljCmV4dHJlbWFsIHZhbHVlIHdoZW4gdGhlIGxpbWl0IGlzIGV4Y2VlZGVk LiAgQnV0IHRoYXQgaXNuJ3QgZWZmZWN0aXZlIGluCmNhc2VzIHdpdGggbW9yZSBleHRyZW1lIGNv bmNlbnRyYXRpb25zIG9mIGRlYWQgaW5kZXggdHVwbGVzLgoKUmVjZW50IGJlbmNobWFyayByZXN1 bHRzIGZyb20gTWFyayBDYWxsYWdoYW4gc2hvdyB0aGF0ClZJU0lURURfUEFHRVNfTElNSVQgaXNu J3QgZWZmZWN0aXZlIG9uY2UgdGhlIGRlYWQgaW5kZXggdHVwbGUgcHJvYmxlbQpnZXRzIG91dCBv ZiBoYW5kICh3aGljaCBpcyBleHBlY3RlZCB3aXRoIHF1ZXVlLWxpa2UgdGFibGVzIHRoYXQKY29u dGludWFsbHkgZGVsZXRlIG9sZGVyIHJlY29yZHMgYW5kIGluc2VydCBuZXdlciBvbmVzKS4gIFRo ZSByb290IGNhdXNlCmlzIHRoYXQgVklTSVRFRF9QQUdFU19MSU1JVCBjb3VudHMgaGVhcCBwYWdl IHZpc2l0cywgYnV0IHdoZW4gbWFueSBpbmRleAp0dXBsZXMgYXJlIG1hcmtlZCBMUF9ERUFELCBf YnRfcmVhZHBhZ2UgdHJhdmVyc2VzIGFyYml0cmFyaWx5IG1hbnkgaW5kZXgKcGFnZXMgd2l0aG91 dCByZXR1cm5pbmcgYW55IHR1cGxlcyAtLSB0aGUgaGVhcCBwYWdlIGNvdW50ZXIgaW4Kc2VsZnVu Y3MuYyBuZXZlciBnZXRzIGEgY2hhbmNlIHRvIGluY3JlbWVudCwgc28gVklTSVRFRF9QQUdFU19M SU1JVApuZXZlciB0cmlnZ2Vycy4gIEZ1cnRoZXJtb3JlLCB0aGUgZGVzaWduIG9mIHNldHRpbmcg TFBfREVBRCBiaXRzIHRvIGhlbHAKZnV0dXJlIGNhbGxzIGlzIHVsdGltYXRlbHkgY291bnRlcnBy b2R1Y3RpdmU6IGVhY2ggTFBfREVBRCB0dXBsZSBpcyBvbmUKZmV3ZXIgdGhhdCBjb3VudHMgYWdh aW5zdCBWSVNJVEVEX1BBR0VTX0xJTUlULCBzbyB0aGUgbW9yZSBMUF9ERUFEIGJpdHMKd2Ugc2V0 LCB0aGUgbGVzcyBlZmZlY3RpdmUgdGhlIGxpbWl0IGJlY29tZXMgYXQgYmFpbGluZyBvdXQgZWFy bHkuCgpSZXBsYWNlIFZJU0lURURfUEFHRVNfTElNSVQgd2l0aCBhIG1lY2hhbmlzbSB0aGF0IGxp bWl0cwpnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW5uaW5nIG9ubHkgdGhlIGV4dHJl bWFsIGluZGV4IGxlYWYgcGFnZSwKYW5kIHR3byBhZGRpdGlvbmFsIGluZGV4IHBhZ2VzLCByYXRo ZXIgdGhhbiBjb3VudGluZyBoZWFwIHBhZ2UgdmlzaXRzLgpUaGlzIHByb3ZpZGVzIGEgaGFyZCBn dWFyYW50ZWUgb24gdGhlIG1heGltdW0gd29yayBwZXIgY2FsbC4gIFVubGlrZQpWSVNJVEVEX1BB R0VTX0xJTUlULCB0aGlzIGxpbWl0IGNhbm5vdCBiZSBlcm9kZWQgYnkgTFBfREVBRCBiaXRzLgoK VGhpcyBhcHByb2FjaCBhbHNvIGhhcyB0aGUgbWVyaXQgb2YgYmVpbmcgY29tcGF0aWJsZSB3aXRo IHRoZSBpbmRleApwcmVmZXRjaGluZyBjb21taXQncyBuZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9z bG90KCkgaW50ZXJmYWNlLiAgVGhhdAphcHByb2FjaCBoaWRlcyBoZWFwIGFjY2VzcyBkZXRhaWxz IGZyb20gY2FsbGVycyBsaWtlIHNlbGZ1bmNzLmMsIG1ha2luZwpWSVNJVEVEX1BBR0VTX0xJTUlU IGltcHJhY3RpY2FsIHRvIGltcGxlbWVudCB3aXRob3V0IHB1c2hpbmcgYWQtaG9jCmxvZ2ljIGlu dG8gdGhlIHRhYmxlIEFNIGxheWVyLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3Qu aWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xemt0MVdrS3A0VlJKdTNx SGZtS1hjOFcrWFl2MVJYZzVkMmQzZlN2QWVPPXJnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICB8ICA4ICsrKysrKwogc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICB8ICAzIC0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8IDExICsrKysrKysrKwogc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0c2VhcmNoLmMgICAgfCAgOSArKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYyAgICAgICAgIHwgMzEgKysrKysrKysrKysrKysrLS0tLS0tLS0tCiA2IGZpbGVzIGNo YW5nZWQsIDQ3IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5o CmluZGV4IGVkZTVlNmFhMy4uMmRiMmI2NzhjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTM4Miw2 ICszODIsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAogCS8qIHBhcmFs bGVsIGluZGV4IHNjYW4gaW5mb3JtYXRpb24sIGluIHNoYXJlZCBtZW1vcnkgKi8KIAlzdHJ1Y3Qg UGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsKKworCS8qCisJICogQ291 bnRlciB0byByZXF1ZXN0IGVhcmx5IGFib3J0IGR1cmluZyBnZXRfYWN0dWFsX3ZhcmlhYmxlX3Jh bmdlIHNjYW5zLgorCSAqIFdoZW4gbm9uemVybywgdGhlIHNjYW4gd2lsbCByZWFkIGF0IG1vc3Qg dGhpcyBtYW55IGxlYWYgcGFnZXMgYmVmb3JlCisJICogZ2l2aW5nIHVwIChyZWdhcmRsZXNzIG9m IHdoZXRoZXIgdGhvc2UgcGFnZXMgaGFkIG1hdGNoaW5nIGl0ZW1zKS4KKwkgKiBaZXJvIG1lYW5z IGRpc2FibGVkIChub3JtYWwgc2NhbiBiZWhhdmlvcikuCisJICovCisJaW50CQkJeHNfcmVhZF9l eHRyZW1hbF9vbmx5OwogfSBJbmRleFNjYW5EZXNjRGF0YTsKIAogLyogR2VuZXJpYyBzdHJ1Y3R1 cmUgZm9yIHBhcmFsbGVsIHNjYW5zICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmluZGV4IDhm MWMxMWE5My4uM2NiNTM2ZDZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtMTg4NCw5 ICsxODg0LDYgQEAgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0 aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkgKiBJZiB3ZSBjYW4ndCBzZWUgaXQsIG1h eWJlIG5vIG9uZSBlbHNlIGNhbiBlaXRoZXIuICBBdCBjYWxsZXIKIAkJICogcmVxdWVzdCwgY2hl Y2sgd2hldGhlciBhbGwgY2hhaW4gbWVtYmVycyBhcmUgZGVhZCB0byBhbGwKIAkJICogdHJhbnNh Y3Rpb25zLgotCQkgKgotCQkgKiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRoZSBjcml0ZXJpb24gaGVy ZSBmb3Igd2hhdCBpcyAiZGVhZCIsIGZpeCB0aGUKLQkJICogcGxhbm5lcidzIGdldF9hY3R1YWxf dmFyaWFibGVfcmFuZ2UoKSBmdW5jdGlvbiB0byBtYXRjaC4KIAkJICovCiAJCWlmIChhbGxfZGVh ZCAmJiAqYWxsX2RlYWQpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jCmluZGV4IDczYWU0OTI1ZS4uZmIyNWUyMDNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKQEAgLTU1Nyw2ICs1NTcsMTcgQEAgaGVhcGFtX2JhdGNoX2dldG5l eHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAogCQkvKiBB cHBlbmQgYmF0Y2ggdG8gdGhlIGVuZCBvZiByaW5nIGJ1ZmZlci93cml0ZSBpdCB0byBidWZmZXIg aW5kZXggKi8KIAkJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2NhbiwgYmF0Y2gpOworCisJCS8q CisJCSAqIHhzX3JlYWRfZXh0cmVtYWxfb25seSBzY2FucyBhcmUgdXNlZCBieSBnZXRfYWN0dWFs X3ZhcmlhYmxlX3JhbmdlCisJCSAqIHRvIGZpbmQgbWluL21heCB2YWx1ZXMuICBUaGV5IG9ubHkg bmVlZCBhIHZhbHVlIGZyb20gb25lIG9mIHRoZQorCQkgKiBleHRyZW1hbCBsZWFmIHBhZ2VzLCBz byBvbmNlIHdlIGhhdmUgb25lIGJhdGNoLCB3ZSBnaXZlIHVwLgorCQkgKi8KKwkJaWYgKHVubGlr ZWx5KHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSkgJiYgcHJpb3JCYXRjaCkKKwkJeworCQkJ QXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCX0KIAll bHNlCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCA2ZTg3MTY5YzIuLmQ1MGUzZmE3 MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsxMjYsNyBAQCBSZWxhdGlv bkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpCiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwID0gTlVM TDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOworCXNjYW4tPnhzX3JlYWRfZXh0cmVtYWxf b25seSA9IDA7CiAKIAlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9IDA7CiAJc2Nhbi0+ YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFy Y2guYwppbmRleCBmZTljNmY2MDUuLjJiN2Y1YzNiMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHNlYXJjaC5jCkBAIC0xNzAyLDEzICsxNzAyLDE4IEBAIF9idF9yZWFkZmlyc3RwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCwKIAlBc3NlcnQoZmly c3RiYXRjaC0+ZGlyID09IGRpcik7CiAKIAlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCShzY2Fu LT54c19yZWFkX2V4dHJlbWFsX29ubHkgJiYgLS1zY2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkg PT0gMCkgfHwKIAkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CiAJCSAhYnRmaXJzdGJh dGNoLT5tb3JlUmlnaHQgOiAhYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCkpCiAJewogCQkvKgogCQkg KiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rp b24gKHRob3VnaAotCQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2ls bCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAqIGlmIHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNl dCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkuCisJCSAqCisJCSAqIEFsc28g Y3V0IG91ciBsb3NzZXMgZHVyaW5nIHhzX3JlYWRfZXh0cmVtYWxfb25seSBzY2Fucywgd2hpY2gg YXJlCisJCSAqIGxpbWl0ZWQgdG8gc2Nhbm5pbmcgb25seSBhIGZldyBsZWFmIHBhZ2VzIGluIHRo ZSBpbmRleC4KIAkJICovCisJCUFzc2VydCghc2Nhbi0+eHNfcmVhZF9leHRyZW1hbF9vbmx5IHx8 ICFzby0+bmVlZFByaW1TY2FuKTsKIAkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2Nhbiwg Zmlyc3RiYXRjaCk7CiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwogCQlyZXR1cm4gTlVMTDsK QEAgLTE4MjgsNiArMTgzMyw4IEBAIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBCbG9ja051bWJlciBibGtubywKIAogCQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0aGlzIGRp cmVjdGlvbj8gKi8KIAkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkJKHNjYW4tPnhzX3JlYWRf ZXh0cmVtYWxfb25seSAmJgorCQkJIC0tc2Nhbi0+eHNfcmVhZF9leHRyZW1hbF9vbmx5ID09IDAp IHx8CiAJCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KIAkJCSAhYnRuZXdiYXRjaC0+ bW9yZVJpZ2h0IDogIWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0KSkKIAkJewpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYwppbmRleCA2ZDgwYWUwMDMuLjA5ZjJiOTY1MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1 bmNzLmMKQEAgLTcwODEsMTMgKzcwODEsMTIgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZShQ bGFubmVySW5mbyAqcm9vdCwgVmFyaWFibGVTdGF0RGF0YSAqdmFyZGF0YSwKICAqCiAgKiBzY2Fu a2V5cyBpcyBhIDEtZWxlbWVudCBzY2Fua2V5IGFycmF5IHNldCB1cCB0byByZWplY3QgbnVsbHMu CiAgKiB0eXBMZW4vdHlwQnlWYWwgZGVzY3JpYmUgdGhlIGRhdGF0eXBlIG9mIHRoZSBpbmRleCdz IGZpcnN0IGNvbHVtbi4KLSAqIHRhYmxlc2xvdCBpcyBhIHNsb3Qgc3VpdGFibGUgdG8gaG9sZCB0 YWJsZSB0dXBsZXMsIGluIGNhc2Ugd2UgbmVlZAotICogdG8gcHJvYmUgdGhlIGhlYXAuCisgKiB0 YWJsZXNsb3QgaXMgYSBzbG90IHN1aXRhYmxlIHRvIGhvbGQgdGFibGUgdHVwbGVzLgogICogKFdl IGNvdWxkIGNvbXB1dGUgdGhlc2UgdmFsdWVzIGxvY2FsbHksIGJ1dCB0aGF0IHdvdWxkIG1lYW4g Y29tcHV0aW5nIHRoZW0KICAqIHR3aWNlIHdoZW4gZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBu ZWVkcyBib3RoIHRoZSBtaW4gYW5kIHRoZSBtYXguKQogICoKLSAqIEZhaWx1cmUgb2NjdXJzIGVp dGhlciB3aGVuIHRoZSBpbmRleCBpcyBlbXB0eSwgb3Igd2UgZGVjaWRlIHRoYXQgaXQncwotICog dGFraW5nIHRvbyBsb25nIHRvIGZpbmQgYSBzdWl0YWJsZSB0dXBsZS4KKyAqIEZhaWx1cmUgb2Nj dXJzIGVpdGhlciB3aGVuIHRoZSBpbmRleCBpcyBlbXB0eSwgb3Igd2hlbiBpdCB0YWtlcyB0b28g bG9uZyB0bworICogZmluZCBhIHN1aXRhYmxlIHR1cGxlLgogICovCiBzdGF0aWMgYm9vbAogZ2V0 X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLApAQCAtNzE0NywyMiAr NzE0NiwzMCBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWws CiAJICoKIAkgKiBEZXNwaXRlIGFsbCB0aGlzIGNhcmUsIHRoZXJlIGFyZSBzaXR1YXRpb25zIHdo ZXJlIHdlIG1pZ2h0IGZpbmQgbWFueQogCSAqIG5vbi12aXNpYmxlIHR1cGxlcyBuZWFyIHRoZSBl bmQgb2YgdGhlIGluZGV4LiAgV2UgZG9uJ3Qgd2FudCB0byBleHBlbmQKLQkgKiBhIGh1Z2UgYW1v dW50IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHJlYWQgdG9vIG1hbnkg aGVhcAotCSAqIHBhZ2VzLiAgV2hlbiB3ZSBmYWlsIGZvciB0aGF0IHJlYXNvbiwgdGhlIGNhbGxl ciB3aWxsIGVuZCB1cCB1c2luZwotCSAqIHdoYXRldmVyIGV4dHJlbWFsIHZhbHVlIGlzIHJlY29y ZGVkIGluIHBnX3N0YXRpc3RpYy4KLQkgKgotCSAqIFhYWCBUaGlzIGNhbid0IHdvcmsgd2l0aCB0 aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2UsCi0JICogd2hpY2ggc2lt cGx5IHdvbid0IHJldHVybiBhIHR1cGxlIHRoYXQgaXNuJ3QgdmlzaWJsZSB0byBvdXIgc25hcHNo b3QuCi0JICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgbmVlZCBzb21lIGtpbmQgb2Yg Y2FsbGJhY2sgdGhhdCBwcm92aWRlcwotCSAqIGEgd2F5IGZvciB0aGUgc2NhbiB0byBnaXZlIHVw IHdoZW4gdGhlIGNvc3RzIHN0YXJ0IHRvIGdldCBvdXQgb2YgaGFuZC4KKwkgKiBhIGh1Z2UgYW1v dW50IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBhZnRlciByZWFkaW5nIGEgZmV3IGV4dHJl bWFsCisJICogaW5kZXggbGVhZiBwYWdlcyB3aXRob3V0IGZpbmRpbmcgbWF0Y2hpbmcgaXRlbXMg KGdlbmVyYWxseSBvbmx5IHNlZW4KKwkgKiB3aGVuIHBhZ2VzIGhhdmUgbWFueSBpbmRleCB0dXBs ZXMgd2l0aCBzZXQgTFBfREVBRCBiaXRzKS4gIFdoZW4gd2UgZ2l2ZQorCSAqIHVwIHRoZSBjYWxs ZXIgd2lsbCBlbmQgdXAgdXNpbmcgd2hhdGV2ZXIgZXh0cmVtYWwgdmFsdWUgaXMgcmVjb3JkZWQg aW4KKwkgKiBwZ19zdGF0aXN0aWMuCiAJICovCiAJSW5pdE5vblZhY3V1bWFibGVTbmFwc2hvdChT bmFwc2hvdE5vblZhY3V1bWFibGUsCiAJCQkJCQkJICBHbG9iYWxWaXNUZXN0Rm9yKGhlYXBSZWwp KTsKIAorCS8qIFNldCB1cCBhbiBpbmRleC1vbmx5IHNjYW4gKi8KIAlpbmRleF9zY2FuID0gaW5k ZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLCB0cnVlLAogCQkJCQkJCQkgJlNuYXBzaG90 Tm9uVmFjdXVtYWJsZSwgTlVMTCwKIAkJCQkJCQkJIDEsIDApOwogCUFzc2VydChpbmRleF9zY2Fu LT54c193YW50X2l0dXApOworCisJLyoKKwkgKiBNYWtlIG91ciBzY2FuIHJlYWQgYXQgbW9zdCAz IGluZGV4IGxlYWYgcGFnZXMgYmVmb3JlIGl0IGp1c3QgZ2l2ZXMgdXAuCisJICogVGhpcyBpcyBv biB0aGUgY29uc2VydmF0aXZlIHNpZGU7IGdpdmluZyB1cCBhZnRlciB0aGUgZmlyc3QgbGVhZiBw YWdlCisJICogd291bGQgd29yayBqdXN0IGFzIHdlbGwgaW4gbW9zdCBjYXNlcy4gIEJ1dCBpdCdz IHBvc3NpYmxlIHRoYXQgdGhlCisJICogaW5kZXgncyBsZWZ0bW9zdC9yaWdodG1vc3QgbGVhZiBw YWdlIGlzIG9uZSB3aXRoIHZlcnkgZmV3IGluZGV4IHR1cGxlcworCSAqICh3aXRoIG9yIHdpdGhv dXQgdGhlaXIgTFBfREVBRCBiaXRzIHNldCkuCisJICovCisJaW5kZXhfc2Nhbi0+eHNfcmVhZF9l eHRyZW1hbF9vbmx5ID0gMzsKKwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywg MSwgTlVMTCwgMCk7CiAKIAkvKiBGZXRjaCBmaXJzdC9uZXh0IHR1cGxlIGluIHNwZWNpZmllZCBk aXJlY3Rpb24gKi8KLS0gCjIuNTMuMAoK --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0008-Add-heapam-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v13-0008-Add-heapam-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv389o12 RnJvbSBkMzQwNTAzNmMzOTM4MjFiNjY0OGQ5MWVlZWQ4Zjg0ZTU1M2E0MjYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMyAwOC8xOV0g QWRkIGhlYXBhbSBpbmRleCBzY2FuIEkvTyBwcmVmZXRjaGluZy4KClRoaXMgY29tbWl0IGltcGxl bWVudHMgSS9PIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyAoYW5kIGluZGV4LW9ubHkKc2Nh bnMgdGhhdCByZXF1aXJlIGhlYXAgZmV0Y2hlcykuIFRoaXMgd2FzIG1hZGUgcG9zc2libGUgYnkg dGhlIHJlY2VudAphZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRvIGJvdGggdGhlIHRh YmxlIEFNIGFuZCBpbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJm YWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgbWF0Y2hpbmcgVElEcwoocmF0aGVyIHRoYW4gb25lIHR1 cGxlIGF0IGEgdGltZSksIGVhY2ggb2Ygd2hpY2ggbXVzdCBiZSB0YWtlbiBmcm9tCmluZGV4IHR1 cGxlcyB0aGF0IGFwcGVhciB0b2dldGhlciBvbiBhIHNpbmdsZSBpbmRleCBwYWdlLiAgVGhpcyBh bGxvd3MKbXVsdGlwbGUgYmF0Y2hlcyB0byBiZSBoZWxkIG9wZW4gc2ltdWx0YW5lb3VzbHkuICBH aXZpbmcgdGhlIHRhYmxlIEFNIGFuCmV4cGxpY2l0IHVuZGVyc3RhbmRpbmcgb2YgaW5kZXggQU0g Y29uY2VwdHMvaW5kZXggcGFnZSBib3VuZGFyaWVzIGFsbG93cwppdCB0byBjb25zaWRlciBhbGwg b2YgdGhlIHJlbGV2YW50IGNvc3RzIGFuZCBiZW5lZml0cy4KClByZWZldGNoaW5nIGlzIGltcGxl bWVudGVkIHVzaW5nIGEgcHJlZmV0Y2hpbmcgcG9zaXRpb24gdW5kZXIgdGhlCmNvbnRyb2wgb2Yg dGhlIHRhYmxlIEFNIGFuZCBjb3JlIGNvZGUuICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0 aGUKc2NhbiBwb3NpdGlvbiBhZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNoIGludHJvZHVjZWQg dGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlLiAgQSByZWFkIHN0cmVhbSBjYWxsYmFjayBhZHZhbmNl cyB0aGUgcmVhZCBzdHJlYW0gYXMgbmVlZGVkIHRvCnByb3ZpZGUgc3VmZmljaWVudGx5IG1hbnkg aGVhcCBibG9jayBudW1iZXJzIHRvIG1haW50YWluIHRoZSByZWFkCnN0cmVhbSdzIHRhcmdldCBw cmVmZXRjaCBkaXN0YW5jZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQgaW5kZXggcHJlZmV0Y2hp bmcgY2FuIG1ha2UgaW5kZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJnZSByYW5nZSBzY2FucyB0 aGF0IHJldHVybiBtYW55IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAzNXgKZmFzdGVyLgoKQW4g aW1wb3J0YW50IGdvYWwgb2YgdGhlIGFtZ2V0YmF0Y2ggZGVzaWduIGlzIHRvIGVuYWJsZSB0aGUg dGFibGUgQU0ncwpyZWFkIHN0cmVhbSBjYWxsYmFjayB0byBhZHZhbmNlIGl0cyBwcmVmZXRjaCBw b3NpdGlvbiB1c2luZyBUSURzIHRoYXQKYXBwZWFyIG9uIGEgbGVhZiBwYWdlIHRoYXQncyBhaGVh ZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgbGVhZgpwYWdlLiAgVGhpcyBpcyBjcnVj aWFsIHdpdGggc2NhbnMgb2YgaW5kZXhlcyB3aGVyZSBlYWNoIGxlYWYgcGFnZQpoYXBwZW5zIHRv IGhhdmUgcmVsYXRpdmVseSBmZXcgZGlzdGluY3QgaGVhcCBibG9ja3MgYW1vbmcgaXRzIG1hdGNo aW5nClRJRHMgKGFzIHdlbGwgYXMgd2l0aCBzY2FucyB3aXRoIGxlYWYgcGFnZXMgdGhhdCBoYXZl IHJlbGF0aXZlbHkgZmV3CnRvdGFsIG1hdGNoaW5nIGl0ZW1zKS4gIEluZGV4IHNjYW5zIGNhbiBo YXZlIGFzIG1hbnkgYXMgNjQgb3BlbiBiYXRjaGVzLAp3aGljaCB0ZXN0aW5nIGhhcyBzaG93biB0 byBiZSBhYm91dCB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gZXZlciBiZQp1c2VmdWwuICBC YXRjaGVzIGFyZSBtYWludGFpbmVkIGluIHNjYW4gb3JkZXIgdXNpbmcgYSBzaW1wbGUgcmluZyBi dWZmZXIKZGF0YSBzdHJ1Y3R1cmUuCgpJbiByYXJlIGNhc2VzIHdoZXJlIHRoZSBzY2FuIGV4Y2Vl ZHMgdGhpcyBxdWFzaS1hcmJpdHJhcnkgbGltaXQgb2YgNjQsCnRoZSByZWFkIHN0cmVhbSBpcyB0 ZW1wb3JhcmlseSBwYXVzZWQuICBQcmVmZXRjaGluZyAodmlhIHRoZSByZWFkCnN0cmVhbSkgaXMg cmVzdW1lZCBvbmx5IGFmdGVyIHRoZSBzY2FuIHBvc2l0aW9uIGFkdmFuY2VzIGJleW9uZCBpdHMK Y3VycmVudCBvcGVuIGJhdGNoIGFuZCB0aGVuIGZyZWVzIGFuZCByZW1vdmVzIHRoZSBiYXRjaCBm cm9tIHRoZSBzY2FuJ3MKYmF0Y2ggcmluZyBidWZmZXIuICBUZXN0aW5nIGhhcyBzaG93biB0aGF0 IGl0IGlzbid0IHZlcnkgY29tbW9uIGZvcgpzY2FucyB0byBob2xkIG9wZW4gbW9yZSB0aGFuIGFi b3V0IDEwIGJhdGNoZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIEkvTwpwcmVmZXRjaCBkaXN0YW5jZS4K CkF1dGhvcjogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2Vv Z2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFu YXJhemVsLmRlPgpSZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwu Y29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01 MjQ4LTUwMDBiODk0ZWJhYkBlbnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDEzICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggICAgICAgICAgICAgICAgICB8ICAzNSArKwogc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMgICAgICB8IDM3MCArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAgICB8ICA1MiArKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwogZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIGRvYy9zcmMvc2dtbC9pbmRl eGFtLnNnbWwgICAgICAgICAgICAgICAgICAgICB8IDEwNSArKysrLQogZG9jL3NyYy9zZ21sL3Rh YmxlYW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogMTMgZmlsZXMgY2hhbmdlZCwg NTkxIGluc2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAx MzYwMTk5MjUuLjE0OTA4ZjQxYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTIzLDYgKzEyMywxOSBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAlCdWZmZXIJCXhzX3ZtYnVmOwkJ LyogdmlzaWJpbGl0eSBtYXAgYnVmZmVyICovCiAJaW50CQkJeHNfdm1faXRlbXM7CS8qICMgaXRl bXMgdG8gcmVzb2x2ZSB2aXNpYmlsaXR5IGluZm8gZm9yICovCiAKKwkvKiBGb3IgYmF0Y2ggaW5k ZXggc2NhbnMgdGhhdCB1c2UgcmVhZCBzdHJlYW0gZm9yIHByZWZldGNoaW5nICovCisJUmVhZFN0 cmVhbSAqeHNfcmVhZF9zdHJlYW07CisKKwkvKgorCSAqIFRoZSByZWFkIHN0cmVhbSBpcyBhbGxv Y2F0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2NhbiBhbmQgcmVzZXQgb24KKwkgKiByZXNj YW4gb3Igd2hlbiB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcy4gVGhlIHNjYW4gZGlyZWN0aW9u IGlzIHNhdmVkCisJICogZWFjaCB0aW1lIGEgbmV3IHR1cGxlIGlzIHJlcXVlc3RlZC4gSWYgdGhl IHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZnJvbQorCSAqIG9uZSB0dXBsZSB0byB0aGUgbmV4dCwg dGhlIHJlYWQgc3RyZWFtIHJlbGVhc2VzIGFsbCBwcmV2aW91c2x5IHBpbm5lZAorCSAqIGJ1ZmZl cnMgYW5kIHJlc2V0cyB0aGUgcHJlZmV0Y2ggYmxvY2suCisJICovCisJU2NhbkRpcmVjdGlvbiB4 c19yZWFkX3N0cmVhbV9kaXI7CS8qIGluZGV4IHNjYW4gZGlyZWN0aW9uICovCisJQmxvY2tOdW1i ZXIgeHNfcHJlZmV0Y2hfYmxvY2s7CS8qIGxhc3QgYmxvY2sgcmV0dXJuZWQgdG8geHNfcmVhZF9z dHJlYW0gKi8KKwlib29sCQl4c19wYXVzZWQ7CQkvKiBwYXVzZWQgdW50aWwgbmV4dCBiYXRjaCBp cyByZWFkPyAqLwogCWJvb2wJCXhzX2xhc3RpbmJsb2NrOyAvKiBsYXN0IFRJRCBvbiB0aGlzIGJs b2NrIGluIGN1cnJlbnQgYmF0Y2g/ICovCiAKIAkvKiBOQjogaWYgeHNfY2J1ZiBvciB2bWJ1ZiBh cmUgbm90IEludmFsaWRCdWZmZXIsIHdlIGhvbGQgYSBwaW4gKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmlu ZGV4IDJkYjJiNjc4Yy4uMTQ3ODJiNTk5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv cmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTIwMyw2ICsy MDMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCiAJICogVGhpcyBhbGxv d3MgdGFibGUgQU1zIHRvIGF2b2lkIHJlZHVuZGFudCBhbWdldGJhdGNoIGNhbGxzIHdpdGggdGhl IHNhbWUKIAkgKiBwcmlvcmJhdGNoIC0tIHRoZSBpbmRleCBBTSBtaWdodCBuZWVkIHRvIHJlYWQg YWRkaXRpb25hbCBpbmRleCBwYWdlcyB0bwogCSAqIGRldGVybWluZSB0aGVyZSBhcmUgbm8gbW9y ZSBtYXRjaGluZyBpdGVtcyBiZXlvbmQgY2FsbGVyJ3MgcHJpb3JiYXRjaC4KKwkgKiBJbiBwYXJ0 aWN1bGFyLCBkdXJpbmcgcHJlZmV0Y2hpbmcgdGhlIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGRpc2Nv dmVycworCSAqIHRoZSBlbmQtb2Ytc2NhbiB2aWEgcHJlZmV0Y2hCYXRjaC4gIFRoZSB0YWJsZSBB TSBjaGVja3MgdGhlc2UgZmxhZ3Mgc28KKwkgKiB0aGF0IHRoZSBzY2FuIHNpZGUgZG9lc24ndCBy ZXBlYXQgdGhlIHNhbWUgYW1nZXRiYXRjaCBjYWxsIHdoZW4gaXQKKwkgKiBsYXRlciByZWFjaGVz IHRoYXQgYmF0Y2ggYXMgc2NhbkJhdGNoLgogCSAqLwogCWJvb2wJCWtub3duRW5kQmFja3dhcmQ7 CiAJYm9vbAkJa25vd25FbmRGb3J3YXJkOwpAQCAtMjYxLDEyICsyNjUsMjEgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKICAqIG1hdGNoZXMgaW4u ICBIb3dldmVyLCB0YWJsZSBBTXMgYXJlIGZyZWUgdG8gZmV0Y2ggdGFibGUgdHVwbGVzIGluIHdo YXRldmVyCiAgKiBvcmRlciBpcyBtb3N0IGNvbnZlbmllbnQvZWZmaWNpZW50IC0tIHByb3ZpZGVk IHRoYXQgc3VjaCByZW9yZGVyaW5nIGNhbm5vdAogICogYWZmZWN0IHRoZSBvcmRlciB0aGF0IHRh YmxlX2luZGV4X2dldG5leHRfc2xvdCBsYXRlciByZXR1cm5zIHR1cGxlcyBpbi4KKyAqCisgKiBU aGlzIGRhdGEgc3RydWN0dXJlIGFsc28gcHJvdmlkZXMgdGFibGUgQU1zIHdpdGggYSB3YXkgdG8g cmVhZCBhaGVhZCBvZiB0aGUKKyAqIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBieSBfbXVsdGlwbGVf IGJhdGNoZXMvaW5kZXggcGFnZXMuICBUaGUgZnVydGhlciBvdXQKKyAqIHRoZSB0YWJsZSBBTSBy ZWFkcyBhaGVhZCBsaWtlIHRoaXMsIHRoZSBmdXJ0aGVyIGl0IGNhbiBzZWUgaW50byB0aGUgZnV0 dXJlLgorICogVGhhdCB3YXkgdGhlIHRhYmxlIEFNIGlzIGFibGUgdG8gcmVvcmRlciB3b3JrIGFz IGFnZ3Jlc3NpdmVseSBhcyBkZXNpcmVkLgorICogRm9yIGV4YW1wbGUsIGluZGV4IHNjYW5zIHNv bWV0aW1lcyBuZWVkIHRvIHJlYWRhaGVhZCBieSBhcyBtYW55IGFzIGEgZmV3CisgKiBkb3plbiBh bWdldGJhdGNoIGJhdGNoZXMgaW4gb3JkZXIgdG8gbWFpbnRhaW4gYW4gb3B0aW1hbCBJL08gcHJl ZmV0Y2gKKyAqIGRpc3RhbmNlIChkaXN0YW5jZSBmb3IgcmVhZGluZyB0YWJsZSBibG9ja3MvZmV0 Y2hpbmcgdGFibGUgdHVwbGVzKS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nQnVmZmVy CiB7CiAJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCiAJQmF0 Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLwogCUJhdGNo UmluZ0l0ZW1Qb3MgbWFya1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCisJQmF0Y2hS aW5nSXRlbVBvcyBwcmVmZXRjaFBvczsJLyogcHJlZmV0Y2hpbmcgcG9zaXRpb24gKi8KIAogCUlu ZGV4U2NhbkJhdGNoIG1hcmtCYXRjaDsKIApAQCAtNDc4LDYgKzQ5MSwyOCBAQCBpbmRleF9zY2Fu X2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpCiAJcmluZ2J1Zi0+bmV4dEJhdGNoKys7CiB9CiAKKy8qCisgKiBDb21wYXJlIHR3byBiYXRj aCByaW5nIHBvc2l0aW9ucyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uCisgKgorICogUmV0 dXJucyBuZWdhdGl2ZSBpZiBwb3MxIGlzIGJlaGluZCBwb3MyLCAwIGlmIGVxdWFsLCBwb3NpdGl2 ZSBpZiBwb3MxIGlzCisgKiBhaGVhZCBvZiBwb3MyLgorICovCitzdGF0aWMgaW5saW5lIGludAor aW5kZXhfc2Nhbl9wb3NfY21wKEJhdGNoUmluZ0l0ZW1Qb3MgKnBvczEsIEJhdGNoUmluZ0l0ZW1Q b3MgKnBvczIsCisJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaW50OAkJYmF0 Y2hkaWZmID0gKGludDgpIChwb3MxLT5iYXRjaCAtIHBvczItPmJhdGNoKTsKKworCWlmIChiYXRj aGRpZmYgIT0gMCkKKwkJcmV0dXJuIGJhdGNoZGlmZjsKKworCS8qIFNhbWUgYmF0Y2gsIGNvbXBh cmUgaXRlbXMgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQly ZXR1cm4gcG9zMS0+aXRlbSAtIHBvczItPml0ZW07CisJZWxzZQorCQlyZXR1cm4gcG9zMi0+aXRl bSAtIHBvczEtPml0ZW07Cit9CisKIC8qCiAgKiBBZHZhbmNlIHBvc2l0aW9uIHRvIGl0cyBuZXh0 IGl0ZW0gaW4gdGhlIGJhdGNoLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXpl ci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4IGYyZmQ1ZDMxNS4u NDE5MzAwYTZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBi L3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTUyLDYgKzUyLDcgQEAgZXh0ZXJuIFBH RExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX3NlcXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBl bmFibGVfaW5kZXhzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4b25s eXNjYW47CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo OwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2JpdG1hcHNjYW47CiBleHRlcm4gUEdE TExJTVBPUlQgYm9vbCBlbmFibGVfdGlkc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVu YWJsZV9zb3J0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXgg ZmIyNWUyMDNhLi44ZDU4MmUzZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgi CiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK KyNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCkBAIC02 MCw2ICs2MSw5IEBAIHN0YXRpYyBCbG9ja051bWJlciBoZWFwYW1fc2Nhbl9nZXRfYmxvY2tzX2Rv bmUoSGVhcFNjYW5EZXNjIGhzY2FuKTsKIHN0YXRpYyBib29sIEJpdG1hcEhlYXBTY2FuTmV4dEJs b2NrKFRhYmxlU2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCWJvb2wgKnJlY2hlY2ssCiAJCQkJCQkJ CQl1aW50NjQgKmxvc3N5X3BhZ2VzLCB1aW50NjQgKmV4YWN0X3BhZ2VzKTsKK3N0YXRpYyBCbG9j a051bWJlciBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0oUmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJ CQkJCSB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJIHZvaWQgKnBlcl9i dWZmZXJfZGF0YSk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDEsNiArMTA1LDE3IEBA IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCS8q IFJlc2NhbnMgc2hvdWxkIGF2b2lkIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgVk0gbG9va3VwcyAq LwogCWhzY2FuLT54c192bV9pdGVtcyA9IDE7CiAKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBkaXJl Y3Rpb24gdW5jb25kaXRpb25hbGx5ICovCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IE5v TW92ZW1lbnRTY2FuRGlyZWN0aW9uOworCisJLyogUmVzZXQgcmVhZCBzdHJlYW0gaXRzZWxmLCBh bmQgb3RoZXIgYXNzb2NpYXRlZCBzdGF0ZSAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0p CisJeworCQloc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJ CWhzY2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwkJcmVhZF9zdHJlYW1fcmVzZXQoaHNjYW4tPnhz X3JlYWRfc3RyZWFtKTsKKwl9CisKIAkvKgogCSAqIERlbGliZXJhdGVseSBhdm9pZCBkcm9wcGlu ZyBhbnkgcGlucyBub3cgaGVsZCBpbiB4c19jYnVmIGFuZCB4c192bWJ1Zi4KIAkgKiBUaGlzIHNh dmVzIGN5Y2xlcyBkdXJpbmcgY2VydGFpbiB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucywgYW5kIGR1 cmluZwpAQCAtMTIyLDYgKzEzNyw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRj aFRhYmxlRGF0YSAqc2NhbikKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWYpKQog CQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1Zik7CiAKKwlpZiAoaHNjYW4tPnhzX3JlYWRf c3RyZWFtKQorCQlyZWFkX3N0cmVhbV9lbmQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwogCXBm cmVlKGhzY2FuKTsKIH0KIApAQCAtMTkxLDcgKzIwOSwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hf dHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCWlmIChCdWZmZXJJc1Zh bGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwog Ci0JCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2Fu LT54c19ibGspOworCQkvKgorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBzdHJlYW0sIHRoZSBzdHJl YW0gd2lsbCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVtYmVyIGNvbWVzIG5leHQg KHRob3VnaCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBiZWxvdykKKwkJICovCisJ CWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCQloc2Nhbi0+eHNfY2J1ZiA9IHJlYWRfc3Ry ZWFtX25leHRfYnVmZmVyKGhzY2FuLT54c19yZWFkX3N0cmVhbSwgTlVMTCk7CisJCWVsc2UKKwkJ CWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54 c19ibGspOwogCiAJCS8qCiAJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRo ZSBmaXJzdCB0aW1lCkBAIC0yNzYsNiArMzAxLDMwIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKICAqIChpbXBvcnRhbnQgZm9yIGlu bmVyIGluZGV4IHNjYW5zIG9mIGFudGktam9pbnMgYW5kIHNlbWktam9pbnMpLCBhbmQgdGhlCiAg KiBuZWVkIHRvIG5vdCBob2xkIG9udG8gaW5kZXggbGVhZiBwYWdlcyBmb3IgdG9vIGxvbmcuCiAg KgorICogRHJvcHBpbmcgbGVhZiBwYWdlIHBpbnMgZWFybHkKKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCB0aGUgc2NhbiBiZSBhbGxvd2Vk IHRvIGhvbGQgb250byBtb3JlIHRoYW4gb25lIGJhdGNoJ3MKKyAqIGxlYWYgcGFnZSBwaW4gYXQg YSB0aW1lLiAgVGhlIHByaW1hcnkgcmVhc29uIGZvciB0aGlzIHJlc3RyaWN0aW9uIGlzIHRvCisg KiBhdm9pZCB1bmludGVuZGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZWFkIHN0cmVhbSwgd2hp Y2ggaGFzIGl0cyBvd24KKyAqIHN0cmF0ZWd5IGZvciBrZWVwaW5nIHRoZSBudW1iZXIgb2YgcGlu cyBoZWxkIGJ5IHRoZSBiYWNrZW5kIHVuZGVyIGNvbnRyb2wuCisgKgorICogT25jZSB3ZSd2ZSBy ZXNvbHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNhZmVs eSBkcm9wCisgKiBpdHMgbGVhZiBwYWdlIHBpbi4gIFRoaXMgaXMgc2FmZSB3aXRoIHJlc3BlY3Qg dG8gY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZQorICogaW5kZXggdmFjdXVtaW5nIHdpbGwgYmxv Y2sgb24gYWNxdWlyaW5nIGEgY29uZmxpY3RpbmcgY2xlYW51cCBsb2NrIG9uIHRoZQorICogYmF0 Y2gncyBpbmRleCBwYWdlIGR1ZSB0byBvdXIgaG9sZGluZyBhIHBpbiBvbiB0aGF0IHNhbWUgcGFn ZS4gIENvcHlpbmcgdGhlCisgKiByZWxldmFudCB2aXNpYmlsaXR5IG1hcCBkYXRhIGludG8gb3Vy IGxvY2FsIGNhY2hlIHN1ZmZpY2VzIHRvIHByZXZlbnQgdW5zYWZlCisgKiBjb25jdXJyZW50IFRJ RCByZWN5Y2xpbmc6IGlmIGFueSBvZiB0aGVzZSBUSURzIHBvaW50IHRvIGRlYWQgaGVhcCB0dXBs ZXMsCisgKiBWQUNVVU0gY2Fubm90IHBvc3NpYmx5IHJldHVybiBmcm9tIGFtYnVsa2RlbGV0ZSBh bmQgbWFyayB0aGUgcG9pbnRlZC10bworICogaGVhcCBwYWdlcyBhcyBhbGwtdmlzaWJsZS4gIFZB Q1VVTSBfY2FuXyBkbyBzbyBvbmNlIHdlIHJlbGVhc2UgdGhlIGJhdGNoJ3MKKyAqIHBpbiwgYnV0 IHRoYXQncyBva2F5OyB3ZSdsbCBiZSB3b3JraW5nIG9mZiBvZiBjYWNoZWQgdmlzaWJpbGl0eSBp bmZvIHRoYXQKKyAqIGluZGljYXRlcyB0aGF0IHRoZSBkZWFkIFRJRHMgYXJlIE5PVCBhbGwtdmlz aWJsZS4KKyAqCisgKiBOb3RlOiBXZSBjYW5ub3QgZHJvcCB0aGUgcGluIGVhcmx5IHdoZW4gdGhl IHNjYW4gdXNlcyBhIG5vbi1NVkNDIHNuYXBzaG90OworICogd2UgbXVzdCBkZWxheSBpdCB1bnRp bCBhbGwgaGVhcCBmZXRjaGVzIGZvciB0aGUgbG9hZGVkIGJhdGNoIGhhdmUgdGFrZW4KKyAqIHBs YWNlLiAgVGhpcyBpcyB3aHkgd2UgZG9uJ3Qgc3VwcG9ydCBwcmVmZXRjaGluZyBkdXJpbmcgc3Vj aCBzY2Fucy4gIFNlZQorICogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbC4KKyAqCiAgKiBOb3Rl IG9uIE1lbW9yeSBPcmRlcmluZyBFZmZlY3RzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKgpAQCAtNDkyLDExICs1NDEsMTMgQEAgc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3Qg SW5kZXhTY2FuQmF0Y2gKIGhlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvckJhdGNo LCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCiB7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9 IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwogCUluZGV4U2NhbkJh dGNoIGJhdGNoID0gTlVMTDsKIAlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiBQR19VU0VE X0ZPUl9BU1NFUlRTX09OTFkgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOwogCiAJLyogWFhYOiB3ZSBz aG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwog CUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CisJQXNzZXJ0KGRpcmVj dGlvbiA9PSBoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyKTsKIAogCWlmICghcHJpb3JCYXRjaCkK IAl7CkBAIC01NjUsOSArNjE2LDM5IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCSAqLwogCQlpZiAodW5saWtlbHko c2Nhbi0+eHNfcmVhZF9leHRyZW1hbF9vbmx5KSAmJiBwcmlvckJhdGNoKQogCQl7CisJCQlBc3Nl cnQoIWhzY2FuLT54c19yZWFkX3N0cmVhbSk7CiAJCQlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVw KTsKIAkJCXJldHVybiBOVUxMOwogCQl9CisKKwkJLyoKKwkJICogRGVsYXkgaW5pdGlhbGl6aW5n IHN0cmVhbSB1bnRpbCByZWFkaW5nIGZyb20gc2NhbidzIHNlY29uZCBiYXRjaC4KKwkJICogVGhp cyBoZXVyaXN0aWMgYXZvaWRzIHdhc3RpbmcgY3ljbGVzIG9uIHN0YXJ0aW5nIGEgcmVhZCBzdHJl YW0gZm9yCisJCSAqIHZlcnkgc2VsZWN0aXZlIGluZGV4IHNjYW5zLiAgV2UgY2FuIGxpa2VseSBp bXByb3ZlIHVwb24gdGhpcywgYnV0CisJCSAqIGl0IHdvcmtzIHdlbGwgZW5vdWdoIGZvciBub3cu CisJCSAqCisJCSAqIEFsc28gYXZvaWQgcHJlZmV0Y2hpbmcgZHVyaW5nIHNjYW5zIHdoZXJlIHdl J3JlIHVuYWJsZSB0byBkcm9wIGVhY2gKKwkJICogYmF0Y2gncyBidWZmZXIgcGluIHJpZ2h0IGF3 YXkgKG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zKS4gIFdlIGFyZQorCQkgKiBub3QgcHJlcGFyZWQg dG8gc2Vuc2libHkgbGltaXQgdGhlIHRvdGFsIG51bWJlciBvZiBidWZmZXIgcGlucyBoZWxkCisJ CSAqIChyZWFkIHN0cmVhbSBoYW5kbGVzIGFsbCBwaW4gcmVzb3VyY2UgbWFuYWdlbWVudCBmb3Ig dXMsIGFuZCBrbm93cworCQkgKiBub3RoaW5nIGFib3V0IHBpbnMgaGVsZCBvbiBpbmRleCBwYWdl cy93aXRoaW4gYmF0Y2hlcykuCisJCSAqCisJCSAqIEFsc28gZGVsYXkgY3JlYXRpbmcgYSByZWFk IHN0cmVhbSBkdXJpbmcgaW5kZXgtb25seSBzY2FucyB0aGF0CisJCSAqIGhhdmVuJ3QgZG9uZSBh bnkgaGVhcCBmZXRjaGVzIHlldC4gIFdlIGRvbid0IHdhbnQgdG8gd2FzdGUgYW55CisJCSAqIGN5 Y2xlcyBvbiBhbGxvY2F0aW5nIGEgcmVhZCBzdHJlYW0gdW50aWwgd2UgaGF2ZSBhIGRlbW9uc3Ry YXRlZAorCQkgKiBuZWVkIGZvciBwZXJmb3JtIGhlYXAgZmV0Y2hlcy4KKwkJICovCisJCWlmICgh aHNjYW4tPnhzX3JlYWRfc3RyZWFtICYmIHByaW9yQmF0Y2ggJiYgc2Nhbi0+TVZDQ1NjYW4gJiYK KwkJCWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyICYmCS8qIGZvciBpbmRleC1v bmx5IHNjYW5zICovCisJCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoKQorCQl7CisJCQlBc3Nl cnQoIWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQpOworCisJCQloc2Nhbi0+eHNfcmVh ZF9zdHJlYW0gPQorCQkJCXJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX0RF RkFVTFQsIE5VTEwsCisJCQkJCQkJCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktO VU0sCisJCQkJCQkJCQkJICAgaGVhcGFtX2dldG5leHRfc3RyZWFtLCBzY2FuLCAwKTsKKwkJfQog CX0KIAllbHNlCiAJewpAQCAtNTkyLDYgKzY3MywzMiBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCXJldHVybiBiYXRj aDsKIH0KIAorLyoKKyAqIEhhbmRsZSBhIGNoYW5nZSBpbiBpbmRleCBzY2FuIGRpcmVjdGlvbiAo YXQgdGhlIHR1cGxlIGdyYW51bGFyaXR5KS4KKyAqCisgKiBSZXNldHMgdGhlIHJlYWQgc3RyZWFt LCBzaW5jZSB3ZSBjYW4ndCByZWx5IG9uIHNjYW5Qb3MgY29udGludWluZyB0byBhZ3JlZQorICog d2l0aCB0aGUgYmxvY2tzIHRoYXQgcmVhZCBzdHJlYW0gYWxyZWFkeSBjb25zdW1lZCB1c2luZyBw cmVmZXRjaFBvcy4KKyAqCisgKiBOb3RlOiBpZmYgdGhlIHNjYW4gX2NvbnRpbnVlc18gaW4gdGhp cyBuZXcgZGlyZWN0aW9uLCBhbmQgYWN0dWFsbHkgc3RlcHMKKyAqIG9mZiBzY2FuQmF0Y2ggdG8g YW4gZWFybGllciBpbmRleCBwYWdlLCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dCB3aWxsIGRlYWwgd2l0 aAorICogaXQuICBCdXQgdGhhdCBtaWdodCBuZXZlciBoYXBwZW47IHRoZSBzY2FuIG1pZ2h0IHll dCBjaGFuZ2UgZGlyZWN0aW9uIGFnYWluCisgKiAob3IganVzdCBlbmQgYmVmb3JlIHJldHVybmlu ZyBtb3JlIGl0ZW1zKS4KKyAqLworc3RhdGljIHBnX25vaW5saW5lIHZvaWQKK2hlYXBhbV9kaXJj aGFuZ2VfcmVhZHN0cmVhbV9yZXNldChJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJ CQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkgIEJhdGNoUmluZ0J1ZmZlciAq YmF0Y2hyaW5nYnVmKQoreworCS8qIFJlc2V0IHJlYWQgc3RyZWFtIHN0YXRlICovCisJYmF0Y2hy aW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOworCWhzY2FuLT54c19wYXVzZWQgPSBm YWxzZTsKKwloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOworCisJLyogUmVz ZXQgcmVhZCBzdHJlYW0gaXRzZWxmICovCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwkJ cmVhZF9zdHJlYW1fcmVzZXQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKK30KKwogLyogLS0tLS0t LS0tLS0tLS0tLQogICoJCWhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCAtIGdldCBuZXh0IFRJRCBm cm9tIGJhdGNoIHJpbmcgYnVmZmVyCiAgKgpAQCAtNjEwLDYgKzcxNywxMiBAQCBoZWFwYW1fYmF0 Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhz Y2FuLAogCUFzc2VydCghc2NhblBvcy0+dmFsaWQgfHwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gg PT0gc2NhblBvcy0+YmF0Y2gpOwogCUFzc2VydChzY2FuUG9zLT52YWxpZCB8fCBpbmRleF9zY2Fu X2JhdGNoX2NvdW50KHNjYW4pID09IDApOwogCisJLyogSGFuZGxlIHJlc2V0dGluZyB0aGUgcmVh ZCBzdHJlYW0gd2hlbiBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzICovCisJaWYgKGhzY2FuLT54c19y ZWFkX3N0cmVhbV9kaXIgPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pCisJCWhzY2FuLT54c19y ZWFkX3N0cmVhbV9kaXIgPSBkaXJlY3Rpb247CS8qIGZpcnN0IGNhbGwgKi8KKwllbHNlIGlmICh1 bmxpa2VseShoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyICE9IGRpcmVjdGlvbikpCisJCWhlYXBh bV9kaXJjaGFuZ2VfcmVhZHN0cmVhbV9yZXNldChoc2NhbiwgZGlyZWN0aW9uLCBiYXRjaHJpbmdi dWYpOworCiAJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBzY2Fu QmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAogCSAqIG1hdGNoaW5nIGl0ZW0ncyBUSUQv aW5kZXggdHVwbGUgZnJvbQpAQCAtNjE4LDcgKzczMSw3IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0 X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAJewog CQkvKgogCQkgKiBzY2FuUG9zIGlzIHZhbGlkLCBzbyBzY2FuQmF0Y2ggbXVzdCBhbHJlYWR5IGJl IGxvYWRlZCBpbiBiYXRjaCByaW5nCi0JCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJl LgorCQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZSAoY2FuJ3QgZG8gdGhpcyB3aXRo IHByZWZldGNoQmF0Y2gpLgogCQkgKi8KIAkJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNo ID09IHNjYW5Qb3MtPmJhdGNoKTsKIApAQCAtNjYzLDIxICs3NzYsMjc0IEBAIGhlYXBhbV9iYXRj aF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4sCiAJewogCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNj YW4sCiAJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlCYXRjaFJpbmdJ dGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOwogCiAJCS8q IGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0 Y2gpICovCiAJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CiAKKwkJ LyoKKwkJICogSWYgd2UncmUgYWJvdXQgdG8gcmVsZWFzZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRj aFBvcyBjdXJyZW50bHkKKwkJICogcG9pbnRzIHRvLCBqdXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQ b3MuICBXZSdsbCByZWluaXRpYWxpemUgaXQKKwkJICogdXNpbmcgc2NhblBvcyBpZiBhbmQgd2hl biBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0gaXMgbmV4dCBjYWxsZWQuIChXZQorCQkgKiBtdXN0IGF2 b2lkIGNvbmZ1c2luZyBhIHByZWZldGNoUG9zLT5iYXRjaCB0aGF0J3MgYWN0dWFsbHkgYmVmb3Jl CisJCSAqIGhlYWRCYXRjaCB3aXRoIG9uZSB0aGF0J3MgYWZ0ZXIgbmV4dEJhdGNoIGR1ZSB0byB1 aW50OCBvdmVyZmxvdzsKKwkJICogc2ltcGxlc3Qgd2F5IGlzIHRvIGludmFsaWRhdGUgcHJlZmV0 Y2hQb3MgbGlrZSB0aGlzLikKKwkJICovCisJCWlmIChwcmVmZXRjaFBvcy0+dmFsaWQgJiYKKwkJ CXByZWZldGNoUG9zLT5iYXRjaCA9PSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCkKKwkJCXByZWZl dGNoUG9zLT52YWxpZCA9IGZhbHNlOworCiAJCS8qIFJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUg cmluZyBidWZmZXIgKi8KIAkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKKworCQlpZiAoaHNj YW4tPnhzX3BhdXNlZCkKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0g d2FzIHBhdXNlZCBieSBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0gZHVlCisJCQkgKiB0byBleGhhdXN0 aW5nIGFsbCBhdmFpbGFibGUgZnJlZSBiYXRjaCBzbG90cy4gIFdlIGp1c3QgZnJlZWQgdXAKKwkJ CSAqIG9uZSBzdWNoIHNsb3Qgbm93LCB0aG91Z2guICBSZXN1bWUgdGhlIHJlYWQgc3RyZWFtIHRv IHJlLWVuYWJsZQorCQkJICogcHJlZmV0Y2hpbmcuCisJCQkgKi8KKwkJCUFzc2VydCghaW5kZXhf c2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKwkJCXJlYWRfc3RyZWFtX3Jlc3VtZShoc2Nhbi0+eHNf cmVhZF9zdHJlYW0pOworCQkJaHNjYW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCQl9CiAJfQogCiAJ LyogSW4gcHJhY3RpY2Ugc2NhbkJhdGNoIHdpbGwgYWx3YXlzIGJlIHRoZSByaW5nIGJ1ZmZlcidz IGhlYWRCYXRjaCAqLwogCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9z LT5iYXRjaCk7CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcGF1c2VkKTsKIAogCXJldHVybiBoZWFwYW1f YmF0Y2hfcmV0dXJuX3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Q b3MsCiAJCQkJCQkJCSAgIGFsbF92aXNpYmxlKTsKIH0KIAorLyoKKyAqIGhlYXBhbV9nZXRuZXh0 X3N0cmVhbQorICoJCXJldHVybiB0aGUgbmV4dCBibG9jayB0byBwYXNzIHRvIHRoZSByZWFkIHN0 cmVhbQorICoKKyAqIFRoZSBpbml0aWFsIGJhdGNoIGlzIGFsd2F5cyBsb2FkZWQgYnkgaGVhcGFt X2JhdGNoX2dldG5leHRfdGlkLiAgV2UgZG9uJ3QKKyAqIGdldCBjYWxsZWQgdW50aWwgdGhlIGZp cnN0IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKCkgY2FsbCwgd2hlbiBhIGhlYXAKKyAqIGJsb2Nr IGlzIHJlcXVlc3RlZCBmcm9tIHRoZSBzY2FuJ3Mgc3RyZWFtIGZvciB0aGUgZmlyc3QgdGltZS4K KyAqCisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0b3JlZCBpbiBwcmVm ZXRjaFBvcy4gIEl0IGlzIHR5cGljYWwgZm9yCisgKiBwcmVmZXRjaFBvcyB0byBjb25zaXN0ZW50 bHkgc3RheSBhaGVhZCBvZiB0aGUgc2NhblBvcyBwb3NpdGlvbiB0aGF0J3MgdXNlZCB0bworICog dHJhY2sgdGhlIG5leHQgVElEIHRvIGJlIHJldHVybmVkIHRvIHRoZSBzY2FuIGJ5IGhlYXBhbV9i YXRjaF9nZXRuZXh0X3RpZAorICogYWZ0ZXIgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IGNhbGxlZC4g IEhvd2V2ZXIsIHRoYXQgaXNuJ3QgYSBwcmVjb25kaXRpb24uCisgKiBUaGVyZSBpcyBhIHN0cmlj dCBwb3N0Y29uZGl0aW9uLCB0aG91Z2g6IHdoZW4gd2UgcmV0dXJuIHdlJ2xsIGFsd2F5cyBsZWF2 ZQorICogc2NhblBvcyA8PSBwcmVmZXRjaFBvcyAoZXhjZXB0IGluIGNhc2VzIHdoZXJlIHdlIHJl dHVybiBJbnZhbGlkQmxvY2tOdW1iZXIpLgorICovCitzdGF0aWMgQmxvY2tOdW1iZXIKK2hlYXBh bV9nZXRuZXh0X3N0cmVhbShSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKmNhbGxiYWNrX3ByaXZh dGVfZGF0YSwKKwkJCQkJICB2b2lkICpwZXJfYnVmZmVyX2RhdGEpCit7CisJSW5kZXhTY2FuRGVz YyBzY2FuID0gKEluZGV4U2NhbkRlc2MpIGNhbGxiYWNrX3ByaXZhdGVfZGF0YTsKKwlJbmRleEZl dGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFw ZmV0Y2g7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5n YnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9z OworCUJhdGNoUmluZ0l0ZW1Qb3MgKnByZWZldGNoUG9zID0gJmJhdGNocmluZ2J1Zi0+cHJlZmV0 Y2hQb3M7CisJU2NhbkRpcmVjdGlvbiB4c19yZWFkX3N0cmVhbV9kaXIgPSBoc2Nhbi0+eHNfcmVh ZF9zdHJlYW1fZGlyOworCUluZGV4U2NhbkJhdGNoIHByZWZldGNoQmF0Y2g7CisJYm9vbAkJZnJv bVNjYW5Qb3MgPSBmYWxzZTsKKworCS8qCisJICogc2NhblBvcyBtdXN0IGFsd2F5cyBiZSB2YWxp ZCB3aGVuIHByZWZldGNoaW5nIHRha2VzIHBsYWNlLiAgVGhlcmUgaGFzCisJICogdG8gYmUgYXQg bGVhc3Qgb25lIGJhdGNoLCBsb2FkZWQgYXMgb3VyIHNjYW5CYXRjaC4gIFRoZSBzY2FuIGRpcmVj dGlvbgorCSAqIG11c3QgYmUgZXN0YWJsaXNoZWQsIHRvby4KKwkgKi8KKwlBc3NlcnQoaW5kZXhf c2Nhbl9iYXRjaF9jb3VudChzY2FuKSA+IDApOworCUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisJ QXNzZXJ0KHNjYW5Qb3MtPnZhbGlkKTsKKwlBc3NlcnQoIWhzY2FuLT54c19wYXVzZWQpOworCUFz c2VydCh4c19yZWFkX3N0cmVhbV9kaXIgIT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pOworCisJ LyoKKwkgKiBwcmVmZXRjaFBvcyBtaWdodCBub3QgeWV0IGJlIHZhbGlkLiAgSXQgbWlnaHQgaGF2 ZSBhbHNvIGZhbGxlbiBiZWhpbmQKKwkgKiBzY2FuUG9zLiAgRGVhbCB3aXRoIGJvdGguCisJICoK KwkgKiBJZiBwcmVmZXRjaFBvcyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCB0aGF0IHR5 cGljYWxseSBpbmRpY2F0ZXMKKwkgKiB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBm b3IgdGhlIGVudGlyZSBzY2FuLiAgV2UgaW5pdGlhbGl6ZQorCSAqIHByZWZldGNoUG9zIHVzaW5n IHRoZSBjdXJyZW50IHNjYW5Qb3MsIHNpbmNlIHRoZSBjdXJyZW50IHNjYW5CYXRjaAorCSAqIGl0 ZW0ncyBUSUQgc2hvdWxkIGhhdmUgaXRzIGJsb2NrIG51bWJlciByZXR1cm5lZCBieSB0aGUgcmVh ZCBzdHJlYW0KKwkgKiBmaXJzdC4gIEl0J3MgbGlrZWx5IHRoYXQgcHJlZmV0Y2hQb3Mgd2lsbCBn ZXQgYWhlYWQgb2Ygc2NhblBvcyBiZWZvcmUKKwkgKiBsb25nLCBidXQgdGhhdCBoYXNuJ3QgaGFw cGVuZWQgeWV0LgorCSAqCisJICogSXQncyBhbHNvIHBvc3NpYmxlIGZvciBwcmVmZXRjaFBvcyB0 byAiZmFsbCBiZWhpbmQiIHNjYW5Qb3MsIGF0IGxlYXN0CisJICogaW4gYSB0cml2aWFsIHNlbnNl OiBpZiBtYW55IGFkamFjZW50IGl0ZW1zIGFyZSByZXR1cm5lZCB0aGF0IGNvbnRhaW4KKwkgKiBU SURzIHRoYXQgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcCBibG9jaywgc2NhblBvcyBjYW4gYWN0dWFs bHkgb3ZlcnRha2UKKwkgKiBwcmVmZXRjaFBvcyAocHJlZmV0Y2hQb3MgY2FuJ3QgYWR2YW5jZSB1 bnRpbCB0aGUgc2NhbiBhY3R1YWxseSBjYWxscworCSAqIHJlYWRfc3RyZWFtX25leHRfYnVmZmVy KS4gIFJlaW5pdGlhbGl6aW5nIGZyb20gc2NhblBvcyBpcyBlbm91Z2ggdG8KKwkgKiBlbnN1cmUg dGhhdCBwcmVmZXRjaFBvcyBzdGlsbCBmZXRjaGVzIHRoZSBuZXh0IGhlYXAgYmxvY2sgdGhhdCBz Y2FuUG9zCisJICogd2lsbCByZXF1aXJlIChwcmVmZXRjaFBvcyBjYW4gbmV2ZXIgZmFsbCBiZWhp bmQgImJ5IG1vcmUgdGhhbiBvbmUgZ3JvdXAKKwkgKiBvZiBpdGVtcyB0aGF0IGFsbCBwb2ludCB0 byB0aGUgc2FtZSBoZWFwIGJsb2NrIiwgc28gdGhpcyBpcyBzYWZlKS4KKwkgKgorCSAqIE5vdGU6 IHdoZW4gaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkIGZyZWVzIGEgYmF0Y2ggdGhhdCBwcmVmZXRj aFBvcworCSAqIHBvaW50cyB0bywgaXQnbGwgaW52YWxpZGF0ZSBwcmVmZXRjaFBvcyBmb3IgdXMu ICBUaGlzIHJlbW92ZXMgYW55CisJICogZGFuZ2VyIG9mIHByZWZldGNoUG9zLmJhdGNoIGZhbGxp bmcgc28gZmFyIGJlaGluZCBzY2FuUG9zLmJhdGNoIHRoYXQgaXQKKwkgKiB3cmFwcyBhcm91bmQg KGFuZCBhcHBlYXJzIHRvIGJlIGFoZWFkIG9mIHNjYW5Qb3MgaW5zdGVhZCBvZiBiZWhpbmQgaXQp LgorCSAqLworCWlmICghcHJlZmV0Y2hQb3MtPnZhbGlkIHx8CisJCWluZGV4X3NjYW5fcG9zX2Nt cChwcmVmZXRjaFBvcywgc2NhblBvcywgeHNfcmVhZF9zdHJlYW1fZGlyKSA8IDApCisJeworCQlo c2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCSpwcmVmZXRj aFBvcyA9ICpzY2FuUG9zOworCQlmcm9tU2NhblBvcyA9IHRydWU7CisKKwkJLyoKKwkJICogV2Ug bXVzdCBhdm9pZCBob2xkaW5nIG9uIHRvIGFueSBiYXRjaCdzIGJ1ZmZlciBwaW4gZm9yIG1vcmUg dGhhbiBhbgorCQkgKiBpbnN0YW50LCB0byBhdm9pZCB1bmRlc2lyYWJsZSBpbnRlcmFjdGlvbnMg d2l0aCB0aGUgc2NhbidzIHJlYWQKKwkJICogc3RyZWFtLiAgYmF0Y2hJbW1lZGlhdGVSZWxlYXNl IHNjYW5zIGFsd2F5cyBnZXQgdGhpcyBiZWhhdmlvcgorCQkgKiBhdXRvbWF0aWNhbGx5LiAgT3Ro ZXIgdHlwZXMgb2Ygc2NhbnMgKHRoZXNlIGFyZSBhbGwgaW5kZXgtb25seQorCQkgKiBzY2FucyBp biBwcmFjdGljZSkgYXJlIG1hZGUgdG8gZHJvcCB0aGVpciBidWZmZXIgcGluIGVhZ2VybHkKKwkJ ICogdGhyb3VnaCBhIHBvbGljeSBvZiBhbHdheXMgZWFnZXJseSBzZXR0aW5nIGFsbCB0aGUgYmF0 Y2ggaXRlbSdzCisJCSAqIHZpc2liaWxpdHkgaW5mbyBpbiBvbmUgZ28uCisJCSAqLworCQlpZiAo c2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2g7CisKKwkJ CS8qIE1ha2UgaGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eSByZWxlYXNlIHJlc291cmNl cyBlYWdlcmx5ICovCisJCQloc2Nhbi0+eHNfdm1faXRlbXMgPSBzY2FuLT5tYXhpdGVtc2JhdGNo OworCisJCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIG5ldyBwcmVmZXRjaEJhdGNoIGhhcyBubyBy ZXNvdXJjZXMgaGVsZCAqLworCQkJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nh biwgcHJlZmV0Y2hQb3MtPmJhdGNoKTsKKwkJCWhiYXRjaCA9IGhlYXBfYmF0Y2hfZGF0YShwcmVm ZXRjaEJhdGNoLCBzY2FuKTsKKworCQkJLyogU2V0IHZpc2liaWxpdHkgaW5mbyBub3Qgc2V0IHRo cm91Z2ggc2NhbkJhdGNoICovCisJCQloZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5KHNj YW4sIHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJcHJlZmV0Y2hCYXRjaCwgaGJhdGNo LAorCQkJCQkJCQkJCQlwcmVmZXRjaFBvcyk7CisJCX0KKwkJZWxzZQorCQkJQXNzZXJ0KHNjYW4t PmJhdGNoSW1tZWRpYXRlUmVsZWFzZSk7CisJfQorCisJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3Nj YW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKTsKKwlmb3IgKDs7KQorCXsKKwkJQmF0 Y2hNYXRjaGluZ0l0ZW0gKml0ZW07CisJCUJsb2NrTnVtYmVyIHByZWZldGNoX2Jsb2NrOworCisJ CS8qCisJCSAqIFdlIG5ldmVyIGNhbGwgYW1nZXRiYXRjaCB3aXRob3V0IGltbWVkaWF0ZWx5IHJl bGVhc2luZyB0aGUgYmF0Y2gncworCQkgKiBpbmRleCBBTSByZXNvdXJjZXMgKHdoaWNoIHJlcXVp cmVzIHNwZWNpYWwgY2FyZSBkdXJpbmcgaW5kZXgtb25seQorCQkgKiBzY2FucykuICBUaGUgcmVh ZCBzdHJlYW0gaXMgc2Vuc2l0aXZlIHRvIGJ1ZmZlciBzaG9ydGFnZXMsIHNvIHdlCisJCSAqIGRl ZmVuc2l2ZWx5IGF2b2lkIGFueXRoaW5nIHRoYXQgdmlzaWJseSBhZmZlY3RzIHRoZSBwZXItYmFj a2VuZAorCQkgKiBidWZmZXIgbGltaXQuCisJCSAqLworCisJCWlmIChmcm9tU2NhblBvcykKKwkJ eworCQkJLyoKKwkJCSAqIERvbid0IGluY3JlbWVudCBpdGVtIHdoZW4gcHJlZmV0Y2hQb3Mgd2Fz IGp1c3QgaW5pdGlhbGl6ZWQKKwkJCSAqIHVzaW5nIHNjYW5Qb3MuICBXZSdsbCByZXR1cm4gdGhl IHNjYW5Qb3MgaXRlbSdzIGhlYXAgYmxvY2sKKwkJCSAqIGRpcmVjdGx5IG9uIHRoZSBmaXJzdCBj YWxsIGhlcmUuICBJbiBvdGhlciB3b3Jkcywgd2UnbGwgcmV0dXJuCisJCQkgKiB0aGUgaGVhcCBi bG9jayBmb3IgdGhlIFRJRCBwYXNzZWQgdG8gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlCisJCQkg KiBhdCB0aGUgcG9pbnQgd2hlcmUgaXQgY2FsbGVkIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGZv ciB0aGUKKwkJCSAqIGZpcnN0IHRpbWUgZHVyaW5nIHRoZSBzY2FuLgorCQkJICovCisJCQlmcm9t U2NhblBvcyA9IGZhbHNlOworCQl9CisJCWVsc2UgaWYgKCFpbmRleF9zY2FuX3Bvc19hZHZhbmNl KHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkgcHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQ b3MpKQorCQl7CisJCQkvKgorCQkJICogUmFuIG91dCBvZiBpdGVtcyBmcm9tIHByZWZldGNoQmF0 Y2guICBUcnkgdG8gYWR2YW5jZSB0byB0aGUKKwkJCSAqIHNjYW4ncyBuZXh0IGJhdGNoLgorCQkJ ICovCisJCQlpZiAodW5saWtlbHkoaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKSkKKwkJCXsK KwkJCQkvKgorCQkJCSAqIENhbid0IGFkdmFuY2UgcHJlZmV0Y2hCYXRjaCBiZWNhdXNlIGFsbCBh dmFpbGFibGUKKwkJCQkgKiBiYXRjaHJpbmdidWYgYmF0Y2ggc2xvdHMgYXJlIGN1cnJlbnRseSBp biB1c2UuCisJCQkJICoKKwkJCQkgKiBEZWFsIHdpdGggdGhpcyBieSBtb21lbnRhcmlseSBwYXVz aW5nIHRoZSByZWFkIHN0cmVhbS4KKwkJCQkgKiBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgd2ls bCByZXN1bWUgdGhlIHJlYWQgc3RyZWFtIGxhdGVyLAorCQkJCSAqIHRob3VnaCBvbmx5IGFmdGVy IHNjYW5Qb3MgaGFzIGNvbnN1bWVkIGFsbCByZW1haW5pbmcgaXRlbXMKKwkJCQkgKiBmcm9tIHNj YW5CYXRjaCAoYXQgd2hpY2ggcG9pbnQgc2NhbkJhdGNoIHdpbGwgYmUgZnJlZWQsCisJCQkJICog bWFraW5nIGl0cyBzbG90IGF2YWlsYWJsZSBmb3IgcmV1c2UgYnkgYSBsYXRlciBiYXRjaCkuCisJ CQkJICoKKwkJCQkgKiBJbiBwcmFjdGljZSB3ZSBoYXJkbHkgZXZlciBuZWVkIHRvIGRvIHRoaXMu ICBJdCB3b3VsZCBiZQorCQkJCSAqIHBvc3NpYmxlIHRvIGF2b2lkIHRoZSBuZWVkIHRvIHBhdXNl IHRoZSByZWFkIHN0cmVhbSBieQorCQkJCSAqIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgc2xvdHMs IGJ1dCB0aGF0IHdvdWxkIGFkZCBjb21wbGV4aXR5CisJCQkJICogZm9yIG5vIHJlYWwgYmVuZWZp dC4KKwkJCQkgKi8KKwkJCQloc2Nhbi0+eHNfcGF1c2VkID0gdHJ1ZTsKKwkJCQlyZXR1cm4gcmVh ZF9zdHJlYW1fcGF1c2Uoc3RyZWFtKTsKKwkJCX0KKworCQkJcHJlZmV0Y2hCYXRjaCA9IGhlYXBh bV9iYXRjaF9nZXRuZXh0KHNjYW4sIHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJCSBw cmVmZXRjaEJhdGNoLCBwcmVmZXRjaFBvcyk7CisJCQlpZiAoIXByZWZldGNoQmF0Y2gpCisJCQl7 CisJCQkJLyoKKwkJCQkgKiBGYWlsZWQgdG8gbG9hZCBuZXh0IGJhdGNoLCBzbyBhbGwgdGhlIGJh dGNoZXMgdGhhdCB0aGUgc2NhbgorCQkJCSAqIHdpbGwgZXZlciByZXF1aXJlIChiYXJyaW5nIGEg Y2hhbmdlIGluIHNjYW4gZGlyZWN0aW9uKSBhcmUKKwkJCQkgKiBub3cgbG9hZGVkCisJCQkJICov CisJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCX0KKworCQkJLyogUG9zaXRpb24g cHJlZmV0Y2hQb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldyBwcmVmZXRjaEJhdGNoICovCisJCQlpbmRl eF9zY2FuX3Bvc19uZXh0YmF0Y2goeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJIHByZWZl dGNoQmF0Y2gsIHByZWZldGNoUG9zKTsKKworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJ CXsKKwkJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEocHJlZmV0Y2hC YXRjaCwgc2Nhbik7CisKKwkJCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSB2aXNpYmlsaXR5IGluZm8g Zm9yIHRoZSBlbnRpcmUgYmF0Y2ggKi8KKwkJCQloZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmls aXR5KHNjYW4sIHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJCXByZWZldGNoQmF0Y2gs IGhiYXRjaCwKKwkJCQkJCQkJCQkJCXByZWZldGNoUG9zKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlB c3NlcnQoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVSZWxlYXNlKTsKKwkJfQorCisJCS8qCisJCSAqIHBy ZWZldGNoUG9zIG5vdyBwb2ludHMgdG8gdGhlIG5leHQgaXRlbSB3aG9zZSBUSUQncyBoZWFwIGJs b2NrCisJCSAqIG51bWJlciBtaWdodCBuZWVkIHRvIGJlIHByZWZldGNoZWQKKwkJICovCisJCUFz c2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCkgPT0gcHJlZmV0 Y2hCYXRjaCk7CisJCUFzc2VydChwcmVmZXRjaFBvcy0+aXRlbSA+PSBwcmVmZXRjaEJhdGNoLT5m aXJzdEl0ZW0gJiYKKwkJCSAgIHByZWZldGNoUG9zLT5pdGVtIDw9IHByZWZldGNoQmF0Y2gtPmxh c3RJdGVtKTsKKwkJLyogc2NhblBvcyBpcyBhbHdheXMgPD0gcHJlZmV0Y2hQb3Mgd2hlbiB3ZSBy ZXR1cm4gKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fcG9zX2NtcChzY2FuUG9zLCBwcmVmZXRjaFBv cywgeHNfcmVhZF9zdHJlYW1fZGlyKSA8PSAwKTsKKworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVw KQorCQl7CisJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEocHJlZmV0 Y2hCYXRjaCwgc2Nhbik7CisKKwkJCUFzc2VydChoYmF0Y2gtPnZpc0luZm9bcHJlZmV0Y2hQb3Mt Pml0ZW1dICYgQkFUQ0hfVklTX0NIRUNLRUQpOworCQkJaWYgKGhiYXRjaC0+dmlzSW5mb1twcmVm ZXRjaFBvcy0+aXRlbV0gJiBCQVRDSF9WSVNfQUxMX1ZJU0lCTEUpCisJCQl7CisJCQkJLyogaXRl bSBpcyBrbm93biB0byBiZSBhbGwtdmlzaWJsZSAtLSBkb24ndCBwcmVmZXRjaCAqLworCQkJCWNv bnRpbnVlOworCQkJfQorCQl9CisKKwkJaXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVm ZXRjaFBvcy0+aXRlbV07CisJCXByZWZldGNoX2Jsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051 bWJlcigmaXRlbS0+dGFibGVUaWQpOworCisJCWlmIChwcmVmZXRjaF9ibG9jayA9PSBoc2Nhbi0+ eHNfcHJlZmV0Y2hfYmxvY2spCisJCXsKKwkJCS8qCisJCQkgKiBwcmVmZXRjaF9ibG9jayBtYXRj aGVzIHRoZSBsYXN0IHByZWZldGNoUG9zIGl0ZW0ncyBUSUQncyBoZWFwCisJCQkgKiBibG9jayBu dW1iZXI7IHdlIG11c3Qgbm90IHJldHVybiB0aGUgc2FtZSBwcmVmZXRjaF9ibG9jayB0d2ljZQor CQkJICogKHR3aWNlIGluIHN1Y2Nlc3Npb24pCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisK KwkJLyogV2UgaGF2ZSBhIG5ldyBoZWFwIGJsb2NrIG51bWJlciB0byByZXR1cm4gdG8gcmVhZCBz dHJlYW0gKi8KKwkJaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrID0gcHJlZmV0Y2hfYmxvY2s7CisJ CXJldHVybiBwcmVmZXRjaF9ibG9jazsKKwl9CisKKwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVy OworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfZmV0Y2hfaGVhcCAtIGdldCB0 aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhi YXRjaC5jCmluZGV4IGE5YTcyODEwZi4uZTI3MmRhYjllIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGJhdGNoLmMKQEAgLTEwLDcgKzEwLDEwIEBACiAgKiBhcHByb2FjaCBlbmFibGVzIGVm ZmljaWVudCBwcmVmZXRjaGluZyBvZiB0YWJsZSBBTSBibG9ja3MgZHVyaW5nIG9yZGVyZWQKICAq IGluZGV4IHNjYW5zLgogICoKLSAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGlu ZGV4IGtleSBzcGFjZSBvcmRlci4KKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGlu IGluZGV4IGtleSBzcGFjZSBvcmRlci4gIFRoaXMgYWxsb3dzIHRoZQorICogdGFibGUgQU0gdG8g bWFpbnRhaW4gYW4gYWRlcXVhdGUgcHJlZmV0Y2ggZGlzdGFuY2U6IGl0cyByZWFkIHN0cmVhbQor ICogY2FsbGJhY2sgaXMgdGhlcmVieSBhYmxlIHRvIHJlcXVlc3QgdGFibGUgYmxvY2tzIHJlZmVy ZW5jZWQgYnkgaW5kZXggcGFnZXMKKyAqIHRoYXQgYXJlIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJl bnQgc2NhbiBwb3NpdGlvbidzIGluZGV4IHBhZ2UuCiAgKgogICogVGhlcmUncyB0aHJlZSB0eXBl cyBvZiBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGU6CiAgKgpAQCAtMjgsNiArMzEsMjggQEAKICAq ICAgIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICBUaGVzZSBt YW5hZ2UgYmF0Y2gKICAqICAgIGFsbG9jYXRpb24sIGluZGV4IHBhZ2UgYnVmZmVyIGxvY2sgcmVs ZWFzZSwgYW5kIGJhdGNoIG1lbW9yeSByZWN5Y2xpbmcuCiAgKgorICogVGhlc2UgdGhyZWUgbGF5 ZXJzIGNvb3JkaW5hdGUgd2l0aG91dCBleHBsaWNpdCBjb3VwbGluZzogdGhlIGNvcmUgbGlmZWN5 Y2xlCisgKiBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGFibGUgQU1zIHVzZSBzY2FuUG9zL3NjYW5C YXRjaCBhbmQgcHJlZmV0Y2hQb3MvCisgKiBwcmVmZXRjaEJhdGNoIGluIGEgc3RhbmRhcmRpemVk IHdheSAoc2VlIGhlYXBhbV9oYW5kbGVyLmMgZm9yIHRoZSByZWZlcmVuY2UKKyAqIGltcGxlbWVu dGF0aW9uKSwgd2hpbGUgdGFibGUgQU1zIGFzc3VtZSB0aGF0IGluZGV4IEFNcyBmcmVlIGFuZCB1 bmxvY2sKKyAqIGJhdGNoZXMgYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9ucyBlc3RhYmxpc2hl ZCBoZXJlLiAgU2VlIGluZGV4YW0uc2dtbAorICogZm9yIHRoZSBmdWxsIHNwZWNpZmljYXRpb24g b2YgdGhlIGFtZ2V0YmF0Y2gvYW1raWxsaXRlbXNiYXRjaCBjb250cmFjdC4KKyAqCisgKiBUaGUg dGFibGUgQU0gZnVsbHkgY29udHJvbHMgdGhlIHJlYWQgc3RyZWFtIGFzIGl0cyBvd24gcHJpdmF0 ZSBzdGF0ZS4KKyAqIFdoZW4gdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSB0YWJsZSBB TSBtdXN0IGltbWVkaWF0ZWx5IHJlc2V0IGl0cworICogcmVhZCBzdHJlYW0gYW5kIGludmFsaWRh dGUgcHJlZmV0Y2hQb3MgLS0gYmxvY2tzIGFscmVhZHkgcmVxdWVzdGVkIHZpYQorICogcHJlZmV0 Y2hQb3Mgd2lsbCBubyBsb25nZXIgbWF0Y2ggd2hhdCBzY2FuUG9zIG5lZWRzIHRvIHJldHVybi4K KyAqCisgKiBDcm9zc2luZyBhIGJhdGNoIGJvdW5kYXJ5IGluIGEgbmV3IHNjYW4gZGlyZWN0aW9u IGlzIGEgc2VwYXJhdGUgcHJvY2VzcywKKyAqIGhhbmRsZWQgaGVyZTogdGFibGUgQU1zIGFyZSBy ZXF1aXJlZCB0byBjYWxsIHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UKKyAqIHRvIGxlYXZl IHRoZSBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIgaW4gYSBjb25zaXN0ZW50IHN0YXRlLiAgVGhl IGN1cnJlbnQKKyAqIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgdGhpcyBieSBzaW1wbHkgZGlzY2Fy ZGluZyBtb3N0IGJhdGNoZXMuICBUaGUga2V5CisgKiBpbnZhcmlhbnQgaXMgdGhhdCBhbGwgbG9h ZGVkIGJhdGNoZXMgbXVzdCBiZSBpbiBhIGNvbnNpc3RlbnQgc2NhbiBkaXJlY3Rpb24KKyAqIG9y ZGVyLiAgKER1cmluZyBjcm9zcy1iYXRjaCBkaXJlY3Rpb24gY2hhbmdlcywgdGhlIGN1cnJlbnQg c2NhbkJhdGNoIHdpbGwKKyAqIGhhdmUgaXRzIEluZGV4U2NhbkJhdGNoRGF0YS5kaXIgZmxpcHBl ZCwgYnV0IHdlIGhhdmUgbm8gcHJvdmlzaW9uIGZvcgorICoga2VlcGluZyBhbGwgb3RoZXIgbG9h ZGVkIGJhdGNoZXMuICBJdCdzIG5vdCBjbGVhciB0aGF0IGl0J2QgYmUgdXNlZnVsIHRvCisgKiBo b2xkIG9udG8gdGhlbTsgdGhlIHNjYW4gZGlyZWN0aW9uIGlzIHVubGlrZWx5IHRvIGNoYW5nZSBi YWNrLikKKyAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCiAgKgpAQCAtNjAsNiAr ODUsNyBAQCBpbmRleF9iYXRjaHNjYW5faW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCiAKIAlzY2Fu LT5iYXRjaHJpbmdidWYuc2NhblBvcy52YWxpZCA9IGZhbHNlOwogCXNjYW4tPmJhdGNocmluZ2J1 Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnByZWZldGNoUG9z LnZhbGlkID0gZmFsc2U7CiAKIAlzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsK IAlzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNo ICovCkBAIC04NCw2ICsxMTAsNyBAQCBpbmRleF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVz YyBzY2FuKQogCiAJYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CiAJYmF0Y2hy aW5nYnVmLT5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBv cy52YWxpZCA9IGZhbHNlOwogCiAJLyoKIAkgKiBFbnN1cmUgdGFibGVhbV91dGlsX2ZyZWVfYmF0 Y2ggd29uJ3Qgc2tpcCB0aGUgb2xkIG1hcmtCYXRjaCBpbiB0aGUgbG9vcApAQCAtMjIwLDcgKzI0 NywxMyBAQCBpbmRleF9iYXRjaHNjYW5fbWFya19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogICog dGhlIGN1cnJlbnQgc2NhbkJhdGNoIHdoZW4gbmVlZGVkLgogICoKICAqIFdlIGp1c3QgZGlzY2Fy ZCBhbGwgYmF0Y2hlcyAob3RoZXIgdGhhbiBtYXJrQmF0Y2gvcmVzdG9yZWQgc2NhbkJhdGNoKSwK LSAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVudCBz Y2FuQmF0Y2guCisgKiBleGNlcHQgd2hlbiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUgc2Nhbidz IGN1cnJlbnQgc2NhbkJhdGNoLiAgV2UgYWx3YXlzCisgKiBpbnZhbGlkYXRlIHByZWZldGNoUG9z LiAgVGhlIHJlYWQgc3RyZWFtIGFuZCByZWxhdGVkIHByZWZldGNoaW5nIHN0YXRlIGFyZQorICog cmVzZXQgYnkgdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoKSwgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1 bmN0aW9uLiAgVGhpcworICogYXBwcm9hY2gga2VlcHMgdGhpbmdzIHNpbXBsZSBmb3IgdGFibGUg QU1zOiBtb3N0IGNvZGUgdGhhdCBkZWFscyB3aXRoCisgKiBiYXRjaGVzIGlzIHRoZXJlYnkgYWJs ZSB0byBhc3N1bWUgdGhhdCB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2NhbiBkaXJlY3Rpb24KKyAq IG5ldmVyIGNoYW5nZXMgaXMgdGhlIG9ubHkgY2FzZSAodGFibGVhbV91dGlsX2JhdGNoX2RpcmNo YW5nZSB0YWtlcyBhCisgKiBzaW1pbGFyIGFwcHJvYWNoIHRvIGhhbmRsaW5nIGEgY3Jvc3MtYmF0 Y2ggY2hhbmdlIGluIHNjYW4gZGlyZWN0aW9uKS4KICAqLwogdm9pZAogaW5kZXhfYmF0Y2hzY2Fu X3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKQEAgLTIzNSw2ICsyNjgsMTQgQEAgaW5k ZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlBc3NlcnQoIWJh dGNocmluZ2J1Zi0+ZG9uZSk7CiAJQXNzZXJ0KG1hcmtQb3MtPnZhbGlkKTsKIAorCS8qCisJICog UmVzdG9yaW5nIGEgbWFyayBhbHdheXMgcmVxdWlyZXMgc3RvcHBpbmcgcHJlZmV0Y2hpbmcuICBU aGlzIGlzIHNpbWlsYXIKKwkgKiB0byB0aGUgaGFuZGxpbmcgdGFibGUgQU1zIGltcGxlbWVudCB0 byBkZWFsIHdpdGggYSB0dXBsZS1sZXZlbCBjaGFuZ2UKKwkgKiBpbiB0aGUgc2NhbidzIGRpcmVj dGlvbi4gIFRoZSByZWFkIHN0cmVhbSBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0CisJICog YnkgdGhlIGNhbGxlciAodmlhIHRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KS4KKwkgKi8KKwliYXRj aHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CisKIAlpZiAoc2NhbkJhdGNoID09 IG1hcmtCYXRjaCkKIAl7CiAJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVl ZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICovCkBAIC0zMDQsNiArMzQ1LDEzIEBAIGluZGV4X2Jh dGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiBwb2ludCBvbiBiYXRj aHJpbmdidWYgd2lsbCBsb29rIGFzIGlmIG91ciBuZXcgc2NhbiBkaXJlY3Rpb24gaGFkIGJlZW4g dXNlZAogICogZnJvbSB0aGUgc3RhcnQuICBUaGlzIGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJs eSBlZmZpY2llbnQsIGJ1dCBpdCB3b3JrcwogICogd2VsbCBlbm91Z2ggZm9yIHdoYXQgb3VnaHQg dG8gYmUgYSByZWxhdGl2ZWx5IHJhcmUgb2NjdXJyZW5jZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBo YXZlIHJlc2V0IHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIFRo YXQKKyAqIG5lZWRzIHRvIGhhcHBlbiBhcyBzb29uIGFzIHRoZSBzY2FuIHJlcXVlc3RzIGEgdHVw bGUgaW4gd2hhdGV2ZXIgc2NhbgorICogZGlyZWN0aW9uIGlzIG9wcG9zaXRlLXRvLWN1cnJlbnQu ICBXZSBvbmx5IGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUKKyAqIHNjYW4gYmFja3MgdXAg YnkgZW5vdWdoIGl0ZW1zIHRvIGNyb3NzIGEgYmF0Y2ggYm91bmRhcnkgKHdoZW4gdGhlIHNjYW4K KyAqIHJlc3VtZXMgc2Nhbm5pbmcgaW4gaXRzIG9yaWdpbmFsIGRpcmVjdGlvbi9lbmRzIGJlZm9y ZSBjcm9zc2luZyBhIGJvdW5kYXJ5LAorICogdGhlcmUgaXNuJ3QgYW55IG5lZWQgdG8gY2FsbCBo ZXJlKS4KICAqLwogdm9pZAogdGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5nZShJbmRleFNjYW5E ZXNjIHNjYW4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCmluZGV4IGU3NTU3N2E3ZS4uMzkzOTM5 MWFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQorKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQpAQCAtMTg2LDcgKzE4Niw3IEBAIGludGVy ZmFjZS4gIChTZWUgYWxzbywgZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCkuCiBCbG9ja2luZyBW QUNVVU0gbGlrZSB0aGlzIGNhbiBiZSBkaXNydXB0aXZlLCBzbyB0YWJsZSBBTXMgYXZvaWQgaXQg d2hlbmV2ZXIKIHBvc3NpYmxlLiAgVGhlIGhlYXAgdGFibGUgQU0gdXN1YWxseSBkcm9wcyBsZWFm IHBhZ2UgcGlucyByaWdodCBhd2F5LCB0aG91Z2gKIG5vdCBkdXJpbmcgc2NhbnMgdGhhdCB1c2Ug YSBub24tTVZDQyBzbmFwc2hvdC4gIEluZGV4LW9ubHkgc2NhbnMgbWF5IGFsc28KLXJldGFpbiBw aW5zIGluIHNvbWUgY2FzZXMuCityZXRhaW4gcGlucyBpbiBzb21lIGNhc2VzLCB0aG91Z2ggcHJl ZmV0Y2hpbmcgcmVxdWlyZXMgZHJvcHBpbmcgdGhlbS4KIAogT3Bwb3J0dW5pc3RpYyBpbmRleCB0 dXBsZSBkZWxldGlvbiBwZXJmb3JtcyB0aGUgc2FtZSBwYWdlLWxldmVsCiBtb2RpZmljYXRpb25z IGFzIFZBQ1VVTSwgd2hpbGUgb25seSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBp cwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggODljYTRlMDhiLi43OGQ4 N2NkOGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTQ1LDYgKzE0 NSw3IEBAIGludAkJCW1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwogYm9vbAkJ ZW5hYmxlX3NlcXNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4c2NhbiA9IHRydWU7CiBi b29sCQllbmFibGVfaW5kZXhvbmx5c2NhbiA9IHRydWU7Citib29sCQllbmFibGVfaW5kZXhzY2Fu X3ByZWZldGNoID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJ CWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9zb3J0ID0gdHJ1ZTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggYTVhMGVkZjI1Li43OGMz YzY0N2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMu ZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC04 OTEsNiArODkxLDEzIEBACiAgIGJvb3RfdmFsID0+ICd0cnVlJywKIH0sCiAKK3sgbmFtZSA9PiAn ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQ R0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKKyAgc2hvcnRfZGVz YyA9PiAnRW5hYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMgYW5kIGluZGV4LW9ubHkt c2NhbnMuJywKKyAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKKyAgdmFyaWFibGUgPT4gJ2VuYWJs ZV9pbmRleHNjYW5fcHJlZmV0Y2gnLAorICBib290X3ZhbCA9PiAndHJ1ZScsCit9LAorCiB7IG5h bWUgPT4gJ2VuYWJsZV9tYXRlcmlhbCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0Nf VVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKICAgc2hvcnRfZGVzYyA9 PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwncyB1c2Ugb2YgbWF0ZXJpYWxpemF0aW9uLicsCiAgIGZs YWdzID0+ICdHVUNfRVhQTEFJTicsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNj L3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUKaW5kZXggZTY4NmQ4OGFmLi5hYWQyNTZlYTggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQxNyw2ICs0MTcsNyBA QAogI2VuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ID0gb24KICNlbmFibGVfaW5kZXhzY2FuID0gb24K ICNlbmFibGVfaW5kZXhvbmx5c2NhbiA9IG9uCisjZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9 IG9uCiAjZW5hYmxlX21hdGVyaWFsID0gb24KICNlbmFibGVfbWVtb2l6ZSA9IG9uCiAjZW5hYmxl X21lcmdlam9pbiA9IG9uCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9k b2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggOGNkZDgyNmZiLi40YTRhMDlhZDcgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmln LnNnbWwKQEAgLTU3MTIsNiArNTcxMiwyMiBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAg ICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRy eSBpZD0iZ3VjLWVuYWJsZS1pbmRleHNjYW4tcHJlZmV0Y2giIHhyZWZsYWJlbD0iZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaCI+CisgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfaW5kZXhzY2Fu X3ByZWZldGNoPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0 ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g8 L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRl eHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIEVuYWJsZXMgb3IgZGlzYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4LXNjYW4gYW5k IGluZGV4LW9ubHktc2NhbgorICAgICAgICBwbGFuIHR5cGVzLiAgUHJlZmV0Y2hpbmcgY2FuIGlt cHJvdmUgcGVyZm9ybWFuY2UgYnkgcmVhZGluZyB0YWJsZSBBTQorICAgICAgICBwYWdlcyBhaGVh ZCBvZiB3aGVuIHRoZXkgYXJlIG5lZWRlZCBkdXJpbmcgaW5kZXggc2NhbnMuICBUaGUgZGVmYXVs dAorICAgICAgICBpcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAg ICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRy eSBpZD0iZ3VjLWVuYWJsZS1tYXRlcmlhbCIgeHJlZmxhYmVsPSJlbmFibGVfbWF0ZXJpYWwiPgog ICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX21hdGVyaWFsPC92YXJuYW1lPiAoPHR5cGU+Ym9v bGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggMjE5ZmI3M2U2 Li4xNDZmMjc3NzggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtODA5LDkgKzgwOSwxMiBAQCBhbWdldGJhdGNo IChJbmRleFNjYW5EZXNjIHNjYW4sCiAgIDxwYXJhPgogICAgVGhlIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRvCiAgICA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGluZyBpbmRleCBlbnRy aWVzIGluIGJhdGNoZXMKLSAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuICBCeSByZXR1cm5p bmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhCi0gICBzaW5nbGUgaW5kZXggcGFn ZSB0b2dldGhlciwgdGhlIHRhYmxlIEFNIGdhaW5zIHZpc2liaWxpdHkgaW50byB3aGljaCB0YWJs ZQotICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAgIHJhdGhl ciB0aGFuIG9uZSBhdCBhIHRpbWUuIFRoaXMgZW5hYmxlcyB0aGUgdGFibGUgYWNjZXNzIG1ldGhv ZCB0bworICAgb3B0aW1pemUgdGFibGUgYmxvY2sgYWNjZXNzIHBhdHRlcm5zIGFuZCBwZXJmb3Jt IEkvTyBwcmVmZXRjaGluZy4KKyAgIEJ5IHJldHVybmluZyBhbGwgbWF0Y2hpbmcgaW5kZXggZW50 cmllcyBmcm9tIGEgc2luZ2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsCisgICB0aGUgdGFibGUgQU0g Y2FuIHJlYWRhaGVhZCB0aHJvdWdoIHRoZSBpbmRleCBhbmQgaWRlbnRpZnkgd2hpY2ggdGFibGUK KyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCwgYWxsb3dpbmcgcHJlZmV0Y2hpbmcgb2YgdGFibGUg QU0gcGFnZXMgZHVyaW5nCisgICBvcmRlcmVkIGluZGV4IHNjYW5zLgogICA8L3BhcmE+CiAKICAg PHBhcmE+CkBAIC0xMzYyLDYgKzEzNjUsNjMgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJl VHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgb3IgdmljZSB2 ZXJzYSwgaWYgaXRzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9uZSBB UEkgb3IgdGhlIG90aGVyLgogICA8L3BhcmE+CiAKKyAgPHNlY3QyIGlkPSJpbmRleC1zY2Fubmlu Zy1iYXRjaGVzIj4KKyAgIDx0aXRsZT5UYWJsZSBBTSBDb25zaWRlcmF0aW9ucyBmb3IgQmF0Y2gg U2Nhbm5pbmc8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGlzIHNlY3Rpb24gaXMgcHJpbWFy aWx5IHJlbGV2YW50IHRvCisgICAgPGxpbmsgbGlua2VuZD0idGFibGVhbSI+dGFibGUgYWNjZXNz IG1ldGhvZDwvbGluaz4gYXV0aG9ycy4KKyAgICBXaGVuIGFuIGluZGV4IHNjYW4gdXNlcyB0aGUg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UsCisgICAgdGhlIHRhYmxl IEFNIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBwb3NpdGlvbiBzdGF0ZSB3aXRoaW4gdGhl CisgICAgPHN0cnVjdG5hbWU+SW5kZXhTY2FuRGVzYzwvc3RydWN0bmFtZT4ncworICAgIDxzdHJ1 Y3RmaWVsZD5iYXRjaHJpbmdidWY8L3N0cnVjdGZpZWxkPiBhbmQgZm9yIGNvbnRyb2xsaW5nIHdo ZW4KKyAgICBidWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcyBhcmUgcmVsZWFzZWQuCisgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0Zmll bGQ+IGZpZWxkIHdpdGhpbgorICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdidWY8L3N0cnVjdGZp ZWxkPiB0cmFja3Mgd2hpY2ggYmF0Y2ggYW5kIGl0ZW0gd2l0aGluCisgICAgdGhhdCBiYXRjaCB3 aWxsIGJlIHJldHVybmVkIG5leHQgdG8gdGhlIGV4ZWN1dG9yLiAgVGhlIHRhYmxlIEFNIG11c3Qg YWR2YW5jZQorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYXMgdHVwbGVz IGFyZSByZXR1cm5lZCBieQorICAgIDxmdW5jdGlvbj50YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Q8 L2Z1bmN0aW9uPi4gIFRoZSBjb3JlIGNvZGUgbWF5IGFsc28KKyAgICBtb2RpZnkgdGhpcyBmaWVs ZCBkdXJpbmcgb3BlcmF0aW9ucyBzdWNoIGFzIG1hcmsvcmVzdG9yZS4KKyAgIDwvcGFyYT4KKwor ICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+ IGZpZWxkIHRyYWNrcyB0aGUgcG9zaXRpb24gdXNlZAorICAgIGZvciBJL08gcHJlZmV0Y2hpbmcu ICBJdCBpcyBnZW5lcmFsbHkgYWR2YW5jZWQgYnkgaW5pdGlhbGl6aW5nIGl0IGZyb20KKyAgICA8 c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IHdpdGhpbiBhIHJlYWQgc3RyZWFtIGNh bGxiYWNrLCBhbGxvd2luZworICAgIHRoZSB0YWJsZSBBTSB0byBwcmVmZXRjaCB0YWJsZSBibG9j a3MgcG9pbnRlZCB0byBieSBpdGVtcyB0aGF0IGFyZSB3ZWxsCisgICAgYWhlYWQgb2YgdGhlIGN1 cnJlbnQgc2NhbiBwb3NpdGlvbi4gIEluaXRpYWxseQorICAgIDxzdHJ1Y3RmaWVsZD5wcmVmZXRj aFBvczwvc3RydWN0ZmllbGQ+IHN0YXJ0cyBhdAorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9z dHJ1Y3RmaWVsZD4sIGJ1dCBhcyB0aGUgcmVhZCBzdHJlYW0gcmFtcHMgdXAgaXQgY2FuCisgICAg Z2V0IGZhciBhaGVhZCAmbWRhc2g7IHNwYW5uaW5nIG11bHRpcGxlIGluZGV4IHBhZ2VzIGlmIG5l Y2Vzc2FyeSB0bworICAgIG1haW50YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoIGRpc3RhbmNl IGZvciB0YWJsZSBibG9jayByZWFkcy4gIEEgbWFqb3IKKyAgICBnb2FsIG9mIHRoZSA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyB0byBhbGxvdyB0aGUKKyAgICB0 YWJsZSBBTSB0byBwcmVmZXRjaCB3aXRob3V0IGJlaW5nIGxpbWl0ZWQgdG8gaXRlbXMgZnJvbSB0 aGUgY3VycmVudAorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYmF0Y2gn cyBpbmRleCBsZWFmIHBhZ2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEJvdGggPHN0 cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICA8c3RydWN0ZmllbGQ+cHJl ZmV0Y2hQb3M8L3N0cnVjdGZpZWxkPiBhcmUgY29udHJvbGxlZCBieSB0aGUgdGFibGUgQU0gYW5k CisgICAgY29yZSBjb2RlOyBpbmRleCBhY2Nlc3MgbWV0aG9kcyBzaG91bGQgbm90IGFjY2VzcyBv ciBtYW5pcHVsYXRlIHRoZXNlCisgICAgZmllbGRzLiAgU2VlIHRoZSA8ZmlsZW5hbWU+c3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvPC9maWxlbmFtZT4KKyAgICBpbXBsZW1lbnRhdGlvbiBmb3IgYSBy ZWZlcmVuY2UgZXhhbXBsZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgSW5kZXggcGFn ZSByZXNvdXJjZXMgaGVsZCBieSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGJhdGNo ZXMKKyAgICAodHlwaWNhbGx5IGJ1ZmZlciBwaW5zLCBzdG9yZWQgaW4gdGhlIGluZGV4IEFNJ3Mg cGVyLWJhdGNoIG9wYXF1ZSBhcmVhKQorICAgIGFyZSBvd25lZCBieSB0aGUgaW5kZXggQU0gYnV0 IHJlbGVhc2VkIHVuZGVyIHRoZSB0YWJsZSBBTSdzIGNvbnRyb2wgdmlhCisgICAgdGhlIDxmdW5j dGlvbj5hbXJlbGVhc2ViYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrLiAgU2VlIHRoZQorICAgIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5hbXJlbGVhc2ViYXRjaDwv ZnVuY3Rpb24+LCBhbmQKKyAgICA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+ IGRlc2NyaXB0aW9ucyBpbgorICAgIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWZ1bmN0aW9ucyIvPiBm b3IgZGV0YWlscy4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QyPgorCiAgPC9zZWN0MT4KIAogIDxz ZWN0MSBpZD0iaW5kZXgtbG9ja2luZyI+CkBAIC0xNDU3LDI5ICsxNTE3LDQwIEBAIGFtdHJhbnNs YXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50 eXBlKTsKICAgIFRoaXMgc29sdXRpb24gcmVxdWlyZXMgdGhhdCA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+IGluZGV4IHNjYW5zIGJlCiAgICA8cXVvdGU+c3luY2hyb25vdXM8L3F1b3Rl PjogdGhlIHRhYmxlIEFNIG11c3QgZmV0Y2ggZWFjaCBoZWFwIHR1cGxlCiAgICBpbW1lZGlhdGVs eSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBlbnRyeS4gIFRoaXMgaXMK LSAgIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIEFuCi0gICA8cXVvdGU+YXN5 bmNocm9ub3VzPC9xdW90ZT4gc2NhbiBpbiB3aGljaCB3ZSBjb2xsZWN0IG1hbnkgVElEcyBmcm9t IHRoZQotICAgaW5kZXgsIGFuZCBvbmx5IHZpc2l0IHRoZSBoZWFwIHR1cGxlcyBzb21ldGltZSBs YXRlciwgcmVxdWlyZXMgbXVjaCBsZXNzCi0gICBpbmRleCBsb2NraW5nIG92ZXJoZWFkIGFuZCBj YW4gYWxsb3cgYSBtb3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLgorICAgZXhwZW5z aXZlIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgVGhlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IGludGVyZmFjZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25lZCB0bworICAg YWxsb3cgc2NhbnMgdG8gYmUgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+OiBieSBjb2xsZWN0 aW5nIGJhdGNoZXMgb2YKKyAgIFRJRHMgZnJvbSBtdWx0aXBsZSBpbmRleCBwYWdlcywgdGhlIHRh YmxlIEFNIGNhbiBwcmVmZXRjaCB0aGUgY29ycmVzcG9uZGluZworICAgdGFibGUgYmxvY2tzIHdl bGwgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAodXNpbmcgYXN5bmNocm9ub3Vz CisgICBJL08gd2hlbiBhdmFpbGFibGUpLCByZXF1aXJpbmcgbXVjaCBsZXNzIGluZGV4IGxvY2tp bmcgb3ZlcmhlYWQgYW5kIGFsbG93aW5nCisgICBhIG1vcmUgZWZmaWNpZW50IGhlYXAgYWNjZXNz IHBhdHRlcm4uICBOb3QgYWxsIHNjYW5zIGVuZCB1cCBiZWluZworICAgYXN5bmNocm9ub3VzIGlu IHByYWN0aWNlLCBidXQgdGhlIGludGVyZmFjZSBpcyBkZXNpZ25lZCB0byBhbGxvdyBpdC4KICAg IFBlciB0aGUgYWJvdmUgYW5hbHlzaXMsIHdlIG11c3QgdXNlIHRoZSBzeW5jaHJvbm91cyBhcHBy b2FjaCBmb3IKICAgIG5vbi1NVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMsIGJ1dCBhbiBhc3luY2hy b25vdXMgc2NhbiBpcyB3b3JrYWJsZQogICAgZm9yIGEgcXVlcnkgdXNpbmcgYW4gTVZDQyBzbmFw c2hvdC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW5kZXggcGFnZSByZXNvdXJjZXMgaGVs ZCBieSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGJhdGNoZXMKLSAgICh0eXBpY2Fs bHkgYnVmZmVyIHBpbnMsIHN0b3JlZCBpbiB0aGUgaW5kZXggQU0ncyBwZXItYmF0Y2ggb3BhcXVl IGFyZWEpCi0gICBhcmUgb3duZWQgYnkgdGhlIGluZGV4IEFNIGJ1dCByZWxlYXNlZCB1bmRlciB0 aGUgdGFibGUgQU0ncyBjb250cm9sIHZpYQotICAgdGhlIDxmdW5jdGlvbj5hbXJlbGVhc2ViYXRj aDwvZnVuY3Rpb24+IGNhbGxiYWNrLiAgU2VlIHRoZQotICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmFtcmVsZWFzZWJhdGNoPC9mdW5jdGlvbj4sIGFuZAotICAg PGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBkZXNjcmlwdGlvbnMgaW4KLSAg IDx4cmVmIGxpbmtlbmQ9ImluZGV4LWZ1bmN0aW9ucyIvPiBmb3IgZGV0YWlscy4KKyAgIEJlY2F1 c2UgdGhlIHRhYmxlIEFNIHJlYWRzIG11bHRpcGxlIGluZGV4IGxlYWYgcGFnZXMgYWhlYWQgdmlh CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHRvIGZhY2lsaXRhdGUgdGhpcyBw cmVmZXRjaGluZywgaXQgY2Fubm90CisgICBwcmFjdGljYWxseSBob2xkIHBpbnMgb24gYWxsIHRo b3NlIHBhZ2VzIHNpbXVsdGFuZW91c2x5LiAgVGhlcmVmb3JlLAorICAgSS9PIHByZWZldGNoaW5n IHdpdGgKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgb25seSBwb3NzaWJs ZSB3aGVuIGFuIE1WQ0MtY29tcGxpYW50CisgICBzbmFwc2hvdCBpcyBpbiB1c2UuICBJbiBwcmFj dGljZSwgdGhlIGhlYXAgdGFibGUgQU0gKGFuZCBhbnkgdGFibGUgQU0KKyAgIHdpdGggc2ltaWxh ciBjb25jdXJyZW5jeSBydWxlcykgdXN1YWxseSByZWxlYXNlcyByZXNvdXJjZXMgZWFnZXJseSBm b3IKKyAgIHBsYWluIE1WQ0MgaW5kZXggc2NhbnMsIGJ1dCByZXRhaW5zIHRoZW0gZm9yIG5vbi1N VkNDIHNuYXBzaG90IHNjYW5zLgorICAgSW5kZXgtb25seSBzY2FucyBtYXkgcmV0YWluIHJlc291 cmNlcyBpbiBzb21lIGNhc2VzLCB3aGlsZSBwbGFpbiBpbmRleAorICAgc2NhbnMgdGhhdCB1c2Ug YW4gTVZDQyBzbmFwc2hvdCBhbHdheXMgcmVsZWFzZSB0aGVpciByZXNvdXJjZXMgZWFnZXJseS4K KyAgIFRoZSB0YWJsZSBBTSBkZWNpZGVzIDxlbXBoYXNpcz53aGVuPC9lbXBoYXNpcz4gdG8gY2Fs bAorICAgPGZ1bmN0aW9uPmFtcmVsZWFzZWJhdGNoPC9mdW5jdGlvbj47IHRoZSBpbmRleCBBTSBk ZWNpZGVzCisgICA8ZW1waGFzaXM+d2hhdDwvZW1waGFzaXM+IHRvIHJlbGVhc2UuCiAgIDwvcGFy YT4KIAogICA8cGFyYT4KLSAgIEluIGFuIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+ IGluZGV4IHNjYW4sIHRoZSBhY2Nlc3MgbWV0aG9kIGRvZXMKLSAgIG5vdCBrZWVwIGFuIGluZGV4 IHBpbiBvbiBhbnkgb2YgdGhlIHJldHVybmVkIHR1cGxlcy4gIFRoZXJlZm9yZQotICAgaXQgaXMg b25seSBzYWZlIHRvIHVzZSBzdWNoIHNjYW5zIHdpdGggTVZDQy1jb21wbGlhbnQgc25hcHNob3Rz LgorICAgU2ltaWxhcmx5LCBhbiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBpbmRl eCBzY2FuIGlzIGluaGVyZW50bHkKKyAgIGFzeW5jaHJvbm91czogYWxsIG1hdGNoaW5nIFRJRHMg YXJlIGNvbGxlY3RlZCBpbnRvIGEgYml0bWFwIGJlZm9yZSBhbnkgaGVhcAorICAgYWNjZXNzIGJl Z2lucy4gIFN1Y2ggc2NhbnMgdGhlcmVmb3JlIHJlcXVpcmUgYW4gTVZDQy1jb21wbGlhbnQgc25h cHNob3QsCisgICBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlIGFjY2VzcyBtZXRob2QgdG8g aG9sZCBpbmRleCBwYWdlIHBpbnMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCmlu ZGV4IDljY2Y1YjczOS4uOGU3MGE2MTk2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvdGFibGVh bS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKQEAgLTEyOSw2ICsxMjksMTQg QEAgbXlfdGFibGVhbV9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAgIG9wdGlvbmFsKSwgdGhl IGJsb2NrIG51bWJlciBuZWVkcyB0byBwcm92aWRlIGxvY2FsaXR5LgogIDwvcGFyYT4KIAorIDxw YXJhPgorICBUYWJsZSBhY2Nlc3MgbWV0aG9kcyBjYW4gc3VwcG9ydCBvcmRlcmVkIGluZGV4IHNj YW5zIHVzaW5nIHRoZQorICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFj ZS4gU2VlIGFsc28KKyAgPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmctYmF0Y2hlcyIvPiBm b3IgZGV0YWlscyBvbiBpbnRlcmZhY2luZyB3aXRoCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gaW5kZXggYWNjZXNzIG1ldGhvZHMsIGFuZCBtYW5hZ2luZyB0aGUKKyAgc2Nhbidz IHBvc2l0aW9uLgorIDwvcGFyYT4KKwogIDxwYXJhPgogICBGb3IgY3Jhc2ggc2FmZXR5LCBhbiBB TSBjYW4gdXNlIHBvc3RncmVzJyA8bGluawogICBsaW5rZW5kPSJ3YWwiPjxhY3JvbnltPldBTDwv YWNyb255bT48L2xpbms+LCBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggMTMyYjU2YTU4Li4zMmJjM2RkM2UgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNjYsNiArMTY2LDcgQEAgc2Vs ZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJs ZSUnOwogIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4 b25seXNjYW4gICAgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAgICAg fCBvbgorIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggICAgICB8IG9uCiAgZW5hYmxlX21hdGVy aWFsICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAgICAg fCBvbgogIGVuYWJsZV9tZXJnZWpvaW4gICAgICAgICAgICAgICB8IG9uCkBAIC0xODAsNyArMTgx LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxp a2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5h YmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAg ICAgICAgICAgfCBvbgotKDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5 cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBv aW50CiAtLSBtYXkgYmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNp bmNlIGxhc3QgcG9zdG1hc3RlciBzdGFydC4KLS0gCjIuNTMuMAoK --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0010-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v13-0010-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv389k10 RnJvbSBmZDcxYTczMzE3NmIwMGVhMDE0OTA3YjQ3NDg5MDRjZjIyMDdhNTgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTMgMTAvMTldIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNl cyBjb3VudCBidWZmZXIgaGl0cywgcmVxdWlyaW5nIHF1aXRlIGEgZmV3IGxpbmVzIG9mCmNvZGUg c2luY2Ugd2UgZG8gYWNjb3VudGluZyBpbiBzbyBtYW55IHBsYWNlcy4gRnV0dXJlIGNvbW1pdHMg d2lsbCBhZGQKbW9yZSBsb2NhdGlvbnMsIHNvIHJlZmFjdG9yIGludG8gYSBoZWxwZXIuCgpOb3Rl OiBJIChwZ2VvZ2hlYW4pIGhhdmUgY2hhbmdlZCB0aGlzIGZyb20gTWVsYW5pZSdzIG9yaWdpbmFs IGJ5CmlubGluaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb246CgpodHRwczovL3Bvc3Rnci5lcy9tL0NB SDItV3prMDJ2UGpzSlB4N0VHTm1ndnNLS2d5SG49WHRHakpjUEUrZVFUUDN4UXQ3d0BtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwgMTExICsr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1NiBpbnNlcnRpb25z KCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IDAwYmM2MDk1Mi4uNzBhNWRiYTczIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtNjQ4LDYgKzY0OCwxMCBAQCBzdGF0aWMgaW5saW5lIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9j KFNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJCQkJCQkJICBib29sICpmb3VuZFB0ciwgSU9Db250ZXh0 IGlvX2NvbnRleHQpOwogc3RhdGljIGJvb2wgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09w ZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpOwogc3RhdGljIHZvaWQg Q2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9u LCBib29sIGlzX2NvbXBsZXRlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBQcm9jZXNzQnVmZmVySGl0 KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJUmVsYXRpb24gcmVsLCBj aGFyIHBlcnNpc3RlbmNlLAorCQkJCQkJCQkJU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIg Zm9ya251bSwKKwkJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKIHN0YXRpYyBCdWZmZXIg R2V0VmljdGltQnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBJT0NvbnRleHQg aW9fY29udGV4dCk7CiBzdGF0aWMgdm9pZCBGbHVzaFVubG9ja2VkQnVmZmVyKEJ1ZmZlckRlc2Mg KmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4sCiAJCQkJCQkJCUlPT2JqZWN0IGlvX29iamVjdCwgSU9D b250ZXh0IGlvX2NvbnRleHQpOwpAQCAtMTIyNiw4ICsxMjMwLDYgQEAgUGluQnVmZmVyRm9yQmxv Y2soUmVsYXRpb24gcmVsLAogCQkJCSAgYm9vbCAqZm91bmRQdHIpCiB7CiAJQnVmZmVyRGVzYyAq YnVmSGRyOwotCUlPQ29udGV4dAlpb19jb250ZXh0OwotCUlPT2JqZWN0CWlvX29iamVjdDsKIAog CUFzc2VydChibG9ja051bSAhPSBQX05FVyk7CiAKQEAgLTEyMzYsMTcgKzEyMzgsNiBAQCBQaW5C dWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNU RU5DRV9QRVJNQU5FTlQgfHwKIAkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9H R0VEKSk7CiAKLQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQl7Ci0J CWlvX2NvbnRleHQgPSBJT0NPTlRFWFRfTk9STUFMOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9U RU1QX1JFTEFUSU9OOwotCX0KLQllbHNlCi0JewotCQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9y U3RyYXRlZ3koc3RyYXRlZ3kpOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKLQl9 Ci0KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX1NUQVJUKGZvcmtOdW0sIGJsb2NrTnVt LAogCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKIAkJCQkJ CQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKQEAgLTEyNTQsMTggKzEy NDUsMTEgQEAgUGluQnVmZmVyRm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJICAgc21n ci0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAogCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJT SVNURU5DRV9URU1QKQotCXsKIAkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzbWdyLCBmb3Jr TnVtLCBibG9ja051bSwgZm91bmRQdHIpOwotCQlpZiAoKmZvdW5kUHRyKQotCQkJcGdCdWZmZXJV c2FnZS5sb2NhbF9ibGtzX2hpdCsrOwotCX0KIAllbHNlCi0JewogCQlidWZIZHIgPSBCdWZmZXJB bGxvYyhzbWdyLCBwZXJzaXN0ZW5jZSwgZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJIHN0cmF0 ZWd5LCBmb3VuZFB0ciwgaW9fY29udGV4dCk7Ci0JCWlmICgqZm91bmRQdHIpCi0JCQlwZ0J1ZmZl clVzYWdlLnNoYXJlZF9ibGtzX2hpdCsrOwotCX0KKwkJCQkJCQkgc3RyYXRlZ3ksIGZvdW5kUHRy LCBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSkpOworCiAJaWYgKHJlbCkKIAl7CiAJCS8q CkBAIC0xMjc0LDIyICsxMjU4LDEwIEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwK IAkJICogemVyb2VkIGluc3RlYWQpLCB0aGUgcGVyLXJlbGF0aW9uIHN0YXRzIGFsd2F5cyBjb3Vu dCB0aGVtLgogCQkgKi8KIAkJcGdzdGF0X2NvdW50X2J1ZmZlcl9yZWFkKHJlbCk7Ci0JCWlmICgq Zm91bmRQdHIpCi0JCQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChyZWwpOwogCX0KLQlpZiAoKmZv dW5kUHRyKQotCXsKLQkJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29udGV4dCwg SU9PUF9ISVQsIDEsIDApOwotCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKLQkJCVZhY3V1bUNvc3RC YWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OwogCi0JCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVs TnVtYmVyLAotCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJ CQkJCSAgdHJ1ZSk7Ci0JfQorCWlmICgqZm91bmRQdHIpCisJCVByb2Nlc3NCdWZmZXJIaXQoc3Ry YXRlZ3ksIHJlbCwgcGVyc2lzdGVuY2UsIHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKIAogCXJl dHVybiBCdWZmZXJEZXNjcmlwdG9yR2V0QnVmZmVyKGJ1Zkhkcik7CiB9CkBAIC0xNjk1LDYgKzE2 NjcsNTEgQEAgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0 KQogCXJldHVybiBSZWFkQnVmZmVyc0NhblN0YXJ0SU9PbmNlKGJ1ZmZlciwgbm93YWl0KTsKIH0K IAorLyoKKyAqIFdlIHRyYWNrIHZhcmlvdXMgc3RhdHMgcmVsYXRlZCB0byBidWZmZXIgaGl0cy4g QmVjYXVzZSB0aGlzIGlzIGRvbmUgaW4gYQorICogZmV3IHNlcGFyYXRlIHBsYWNlcywgdGhpcyBo ZWxwZXIgZXhpc3RzIGZvciBjb252ZW5pZW5jZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitQ cm9jZXNzQnVmZmVySGl0KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCSBSZWxh dGlvbiByZWwsIGNoYXIgcGVyc2lzdGVuY2UsIFNNZ3JSZWxhdGlvbiBzbWdyLAorCQkJCSBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKQoreworCUlPQ29udGV4dAlpb19j b250ZXh0OworCUlPT2JqZWN0CWlvX29iamVjdDsKKworCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QKQorCXsKKwkJaW9fY29udGV4dCA9IElPQ09OVEVYVF9OT1JNQUw7CisJ CWlvX29iamVjdCA9IElPT0JKRUNUX1RFTVBfUkVMQVRJT047CisJfQorCWVsc2UKKwl7CisJCWlv X2NvbnRleHQgPSBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSk7CisJCWlvX29iamVjdCA9 IElPT0JKRUNUX1JFTEFUSU9OOworCX0KKworCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURf RE9ORShmb3JrbnVtLAorCQkJCQkJCQkJICBibG9ja251bSwKKwkJCQkJCQkJCSAgc21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu cmVsTnVtYmVyLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJCQkJ CQkJCQkgIHRydWUpOworCisJaWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAp CisJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQgKz0gMTsKKwllbHNlCisJCXBnQnVmZmVy VXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwlpZiAocmVsKQorCQlwZ3N0YXRfY291bnRf YnVmZmVyX2hpdChyZWwpOworCisJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9ISVQsIDEsIDApOworCisJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCisJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworfQorCiAvKgogICogSGVscGVyIGZv ciBXYWl0UmVhZEJ1ZmZlcnMoKSB0aGF0IHByb2Nlc3NlcyB0aGUgcmVzdWx0cyBvZiBhIHJlYWR2 CiAgKiBvcGVyYXRpb24sIHJhaXNpbmcgYW4gZXJyb3IgaWYgbmVjZXNzYXJ5LgpAQCAtMTk5MCwy NSArMjAwNyw5IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJh dGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCQkgKiBtdXN0IGhhdmUgc3RhcnRlZCBvdXQg YXMgYSBtaXNzIGluIFBpbkJ1ZmZlckZvckJsb2NrKCkuIFRoZSBvdGhlcgogCQkgKiBiYWNrZW5k IHdpbGwgdHJhY2sgdGhpcyBhcyBhICdyZWFkJy4KIAkJICovCi0JCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX1JFQURfRE9ORShmb3JrbnVtLCBibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19k b25lLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0 b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkgIHRydWUpOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQotCQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCArPSAx OwotCQllbHNlCi0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCArPSAxOwotCi0JCWlm IChvcGVyYXRpb24tPnJlbCkKLQkJCXBnc3RhdF9jb3VudF9idWZmZXJfaGl0KG9wZXJhdGlvbi0+ cmVsKTsKLQotCQlwZ3N0YXRfY291bnRfaW9fb3AoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09Q X0hJVCwgMSwgMCk7Ci0KLQkJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFs YW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKKwkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRpb24t PnN0cmF0ZWd5LCBvcGVyYXRpb24tPnJlbCwgcGVyc2lzdGVuY2UsCisJCQkJCQkgb3BlcmF0aW9u LT5zbWdyLCBmb3JrbnVtLAorCQkJCQkJIGJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2Rv bmUpOwogCX0KIAllbHNlCiAJewotLSAKMi41My4wCgo= --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0009-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Disposition: attachment; filename="v13-0009-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv389m11 RnJvbSAyOWIwNjM1NmVjZjllNGVlNzdiYzEyNjcwNzFjNDNhZWM5Mjc0NDA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjIgSmFuIDIwMjYgMTM6MDc6MTMgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMyAwOS8xOV0g VXNlIEV4ZWNTZXRUdXBsZUJvdW5kIGhpbnQgZHVyaW5nIGluZGV4IHNjYW5zLgoKVGhpcyBnaXZl cyBpbmRleCBzY2FucyBhIHdheSB0byBhdm9pZCB1c2luZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBj ZXJ0YWluCmtpbmRzIG9mIHF1ZXJpZXMgdGhhdCBhcmUgdmVyeSB1bmxpa2VseSB0byBiZW5lZml0 IGZyb20gcHJlZmV0Y2hpbmc6CnF1ZXJpZXMgd2hvc2UgcGxhbiBpbnZvbHZlcyBhIExJTUlUIG5v ZGUgdGhhdCBpcyBjb25zdW1lcyB0dXBsZXMgZnJvbSBhbgppbmRleCBzY2FuIChvciBpbmRleC1v bmx5IHNjYW4pIG5vZGUuCgpUZXN0aW5nIGhhcyBzaG93biB0aGlzIHRvIGJlIHBhcnRpY3VsYXJs eSBpbXBvcnRhbnQgd2l0aCBuZXN0ZWQgbG9vcApqb2lucyB3aXRoIGEgTElNSVQgb24gYW4gaW5u ZXIgaW5kZXggc2Nhbi4gIFRoaXMgaXMgdHlwaWNhbCBvZiBuZXN0ZWQKbG9vcCBhbnRpLWpvaW5z LCBhbmQgbmVzdGVkIGxvb3Agc2VtaS1qb2lucy4KClhYWCBUaGlzIGlzIHN0aWxsIHZlcnkgbXVj aCBhIFdJUC4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1C eTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaCAgICAgICAgICAgICB8ICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICAgICAgfCAgNCArKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyB8ICA1ICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAg ICB8ICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICAgfCA1MCAr KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMgfCAxMCArKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j ICAgICB8IDEzICsrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspCgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmgKaW5kZXggMTQ3ODJiNTk5Li43MmQ1MTc0ODcgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aApAQCAtMzk2LDYgKzM5Niw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJ LyogcGFyYWxsZWwgaW5kZXggc2NhbiBpbmZvcm1hdGlvbiwgaW4gc2hhcmVkIG1lbW9yeSAqLwog CXN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpwYXJhbGxlbF9zY2FuOwogCisJaW50 NjQJCXR1cGxlc19uZWVkZWQ7CisKIAkvKgogCSAqIENvdW50ZXIgdG8gcmVxdWVzdCBlYXJseSBh Ym9ydCBkdXJpbmcgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBzY2Fucy4KIAkgKiBXaGVuIG5v bnplcm8sIHRoZSBzY2FuIHdpbGwgcmVhZCBhdCBtb3N0IHRoaXMgbWFueSBsZWFmIHBhZ2VzIGJl Zm9yZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA3YzFiNDI3ZmIuLjEyZGQ1MzNjMyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKQEAgLTE2OTcsNiArMTY5Nyw3IEBAIHR5cGVkZWYgc3RydWN0CiAgKgkJ U2NhbkRlc2MJCSAgIGluZGV4IHNjYW4gZGVzY3JpcHRvcgogICoJCUluc3RydW1lbnQJCSAgIGxv Y2FsIGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJU2hhcmVkSW5mbwkJICAgcGFyYWxs ZWwgd29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVyIGVudHJ5KQorICoJCVR1cGxlc05l ZWRlZAkgICB0dXBsZSBib3VuZCwgc2VlIEV4ZWNTZXRUdXBsZUJvdW5kCiAgKgogICoJCVJlb3Jk ZXJRdWV1ZQkgICB0dXBsZXMgdGhhdCBuZWVkIHJlb3JkZXJpbmcgZHVlIHRvIHJlLWNoZWNrCiAg KgkJUmVhY2hlZEVuZAkJICAgaGF2ZSB3ZSBmZXRjaGVkIGFsbCB0dXBsZXMgZnJvbSBpbmRleCBh bHJlYWR5PwpAQCAtMTcyNSw2ICsxNzI2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3Rh dGUKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmlzc19TY2FuRGVzYzsKIAlJbmRleFNjYW5J bnN0cnVtZW50YXRpb24gKmlzc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1l bnRhdGlvbiAqaXNzX1NoYXJlZEluZm87CisJaW50NjQJCWlzc19UdXBsZXNOZWVkZWQ7CiAKIAkv KiBUaGVzZSBhcmUgbmVlZGVkIGZvciByZS1jaGVja2luZyBPUkRFUiBCWSBleHByIG9yZGVyaW5n ICovCiAJcGFpcmluZ2hlYXAgKmlzc19SZW9yZGVyUXVldWU7CkBAIC0xNzUzLDYgKzE3NTUsNyBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQogICoJCVNjYW5EZXNjCQkgICBpbmRleCBz Y2FuIGRlc2NyaXB0b3IKICAqCQlJbnN0cnVtZW50CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3Ry dW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAgIHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50 YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKKyAqCQlUdXBsZXNOZWVkZWQJICAgdHVwbGUgYm91bmQs IHNlZSBFeGVjU2V0VHVwbGVCb3VuZAogICoJCVRhYmxlU2xvdAkJICAgc2xvdCBmb3IgaG9sZGlu ZyB0dXBsZXMgZmV0Y2hlZCBmcm9tIHRoZSB0YWJsZQogICoJCVBzY2FuTGVuCQkgICBzaXplIG9m IHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdBdHRO dW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxFTgpA QCAtMTc3NSw2ICsxNzc4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJ c3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICppb3NzX1NjYW5EZXNjOwogCUluZGV4U2Nhbkluc3Ry dW1lbnRhdGlvbiAqaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRh dGlvbiAqaW9zc19TaGFyZWRJbmZvOworCWludDY0CQlpb3NzX1R1cGxlc05lZWRlZDsKIAlUdXBs ZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIAlBdHRy TnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCmluZGV4IDhkNTgyZTNkOS4uZDJlODRkNTFiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTYzNyw5ICs2MzcsMTQgQEAgaGVhcGFt X2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKIAkJICogaGF2ZW4ndCBkb25lIGFueSBoZWFwIGZldGNoZXMgeWV0LiAgV2UgZG9uJ3Qgd2Fu dCB0byB3YXN0ZSBhbnkKIAkJICogY3ljbGVzIG9uIGFsbG9jYXRpbmcgYSByZWFkIHN0cmVhbSB1 bnRpbCB3ZSBoYXZlIGEgZGVtb25zdHJhdGVkCiAJCSAqIG5lZWQgZm9yIHBlcmZvcm0gaGVhcCBm ZXRjaGVzLgorCQkgKgorCQkgKiBBbHNvIGF2b2lkaW5nIHByZWZldGNoaW5nIHdoZW4gdGhlIGNv cmUgZXhlY3V0b3IgcGFzc2VzIHRoZSBzY2FuIGEKKwkJICogdHVwbGVzX25lZWRlZCBoaW50IHRo YXQgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4gaXMgbGlrZWx5IHRvIGVuZAorCQkgKiBiZWZvcmUg bG9uZy4KIAkJICovCiAJCWlmICghaHNjYW4tPnhzX3JlYWRfc3RyZWFtICYmIHByaW9yQmF0Y2gg JiYgc2Nhbi0+TVZDQ1NjYW4gJiYKIAkJCWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2NrTnVt YmVyICYmCS8qIGZvciBpbmRleC1vbmx5IHNjYW5zICovCisJCQkoc2Nhbi0+dHVwbGVzX25lZWRl ZCA9PSAtMSB8fCBzY2FuLT50dXBsZXNfbmVlZGVkID4gMjApICYmCiAJCQllbmFibGVfaW5kZXhz Y2FuX3ByZWZldGNoKQogCQl7CiAJCQlBc3NlcnQoIWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3Mu dmFsaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCBkNTBlM2ZhNzEuLmFhNDRhMGVj MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsxMjYsNyBAQCBSZWxhdGlv bkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpCiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwID0gTlVM TDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOworCXNjYW4tPnR1cGxlc19uZWVkZWQgPSAt MTsJLyogbm8gbGltaXQgKi8KIAlzY2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkgPSAwOwogCiAJ c2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJv Y25vZGUuYwppbmRleCA3ZTQwYjg1MjUuLmFhZWQzNTA2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1Byb2Nub2RlLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgi CiAKKyNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1 dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFnZy5oIgogI2luY2x1ZGUgImV4ZWN1dG9y L25vZGVBcHBlbmQuaCIKQEAgLTg0MCw2ICs4NDEsMTIgQEAgRXhlY1NodXRkb3duTm9kZV93YWxr ZXIoUGxhblN0YXRlICpub2RlLCB2b2lkICpjb250ZXh0KQogICogQW55IG5lZ2F0aXZlIHR1cGxl c19uZWVkZWQgdmFsdWUgbWVhbnMgIm5vIGxpbWl0Iiwgd2hpY2ggc2hvdWxkIGJlIHRoZQogICog ZGVmYXVsdCBhc3N1bXB0aW9uIHdoZW4gdGhpcyBpcyBub3QgY2FsbGVkIGF0IGFsbCBmb3IgYSBw YXJ0aWN1bGFyIG5vZGUuCiAgKgorICogTm90ZTogZm9yIG5vZGVzIGxpa2UgU29ydCwgdHVwbGVz X25lZWRlZCBpcyBhIGhhcmQgbGltaXQgLS0gdGhlIG5vZGUgY2FuCisgKiBzdG9wIGFmdGVyIHBy b2R1Y2luZyBleGFjdGx5IHRoYXQgbWFueSB0dXBsZXMuICBGb3IgaW5kZXggc2NhbnMsIGhvd2V2 ZXIsCisgKiB0dXBsZXNfbmVlZGVkIGlzIG9ubHkgYW4gYXBwcm94aW1hdGlvbiwgYmVjYXVzZSBu b24taW5kZXggcXVhbHMgbWF5IGZpbHRlcgorICogb3V0IHNvbWUgdHVwbGVzLiAgVGhlIGFjdHVh bCBudW1iZXIgb2YgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgaW5kZXggbWF5CisgKiBuZWVkIHRv IGV4Y2VlZCB0dXBsZXNfbmVlZGVkIHRvIHNhdGlzZnkgdGhlIGNhbGxlcidzIHJlcXVpcmVtZW50 cy4KKyAqCiAgKiBOb3RlOiBpZiB0aGlzIGlzIGNhbGxlZCByZXBlYXRlZGx5IG9uIGEgcGxhbiB0 cmVlLCB0aGUgZXhhY3Qgc2FtZSBzZXQKICAqIG9mIG5vZGVzIG11c3QgYmUgdXBkYXRlZCB3aXRo IHRoZSBuZXcgbGltaXQgZWFjaCB0aW1lOyBiZSBjYXJlZnVsIHRoYXQKICAqIG9ubHkgdW5jaGFu Z2luZyBjb25kaXRpb25zIGFyZSB0ZXN0ZWQgaGVyZS4KQEAgLTk3Nyw2ICs5ODQsNDkgQEAgRXhl Y1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9ub2Rl KQogCiAJCUV4ZWNTZXRUdXBsZUJvdW5kKHR1cGxlc19uZWVkZWQsIG91dGVyUGxhblN0YXRlKGNo aWxkX25vZGUpKTsKIAl9CisJZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUsIEluZGV4U2NhblN0YXRl KSkKKwl7CisJCS8qCisJCSAqIElmIGl0IGlzIGFuIEluZGV4U2Nhbiwgc2F2ZSB0aGUgdHVwbGVz X25lZWRlZCBpbiB0aGUgc3RhdGUgc28gaXQKKwkJICogY2FuIGJlIHByb3BhZ2F0ZWQgdG8gdGhl IEluZGV4U2NhbkRlc2Mgd2hlbiB0aGUgc2NhbiBpcyBzdGFydGVkLgorCQkgKgorCQkgKiBOb3Rl OiBBcyB3aXRoIFNvcnQsIHRoZSBpbmRleCBzY2FuIG5vZGUgaXMgcmVzcG9uc2libGUgZm9yIHJl YWN0aW5nCisJCSAqIHByb3Blcmx5IHRvIGNoYW5nZXMgdG8gdGhpcyBwYXJhbWV0ZXIuCisJCSAq LworCQlJbmRleFNjYW5TdGF0ZSAqaXNzdGF0ZSA9IChJbmRleFNjYW5TdGF0ZSAqKSBjaGlsZF9u b2RlOworCisJCWlzc3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSB0dXBsZXNfbmVlZGVkOworCisJ CS8qIElmIHNjYW4gYWxyZWFkeSBzdGFydGVkLCB1cGRhdGUgdGhlIEluZGV4U2NhbkRlc2MgdG9v ICovCisJCWlmIChpc3N0YXRlLT5pc3NfU2NhbkRlc2MpCisJCQlpc3N0YXRlLT5pc3NfU2NhbkRl c2MtPnR1cGxlc19uZWVkZWQgPSB0dXBsZXNfbmVlZGVkOworCX0KKwllbHNlIGlmIChJc0EoY2hp bGRfbm9kZSwgSW5kZXhPbmx5U2NhblN0YXRlKSkKKwl7CisJCS8qIFNhbWUgY29tbWVudHMgYXMg Zm9yIEluZGV4U2NhbiAqLworCQlJbmRleE9ubHlTY2FuU3RhdGUgKmlvc3N0YXRlID0gKEluZGV4 T25seVNjYW5TdGF0ZSAqKSBjaGlsZF9ub2RlOworCisJCWlvc3N0YXRlLT5pb3NzX1R1cGxlc05l ZWRlZCA9IHR1cGxlc19uZWVkZWQ7CisKKwkJLyogSWYgc2NhbiBhbHJlYWR5IHN0YXJ0ZWQsIHVw ZGF0ZSB0aGUgSW5kZXhTY2FuRGVzYyB0b28gKi8KKwkJaWYgKGlvc3N0YXRlLT5pb3NzX1NjYW5E ZXNjKQorCQkJaW9zc3RhdGUtPmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSB0dXBsZXNf bmVlZGVkOworCX0KKwllbHNlIGlmIChJc0EoY2hpbGRfbm9kZSwgTmVzdExvb3BTdGF0ZSkpCisJ eworCQkvKgorCQkgKiBGb3IgTmVzdExvb3Agam9pbnMgd2hlcmUgZWFjaCBvdXRlciB0dXBsZSBw cm9kdWNlcyBhdCBtb3N0IG9uZQorCQkgKiBvdXRwdXQgdHVwbGUsIHdlIGNhbiBwcm9wYWdhdGUg dGhlIGJvdW5kIHRvIHRoZSBvdXRlciBjaGlsZAorCQkgKi8KKwkJTmVzdExvb3BTdGF0ZSAqbmxz dGF0ZSA9IChOZXN0TG9vcFN0YXRlICopIGNoaWxkX25vZGU7CisJCUpvaW5UeXBlCWpvaW50eXBl ID0gbmxzdGF0ZS0+anMuam9pbnR5cGU7CisKKwkJaWYgKGpvaW50eXBlID09IEpPSU5fU0VNSSB8 fCBqb2ludHlwZSA9PSBKT0lOX0FOVEkgfHwKKwkJCW5sc3RhdGUtPmpzLnNpbmdsZV9tYXRjaCkK KwkJeworCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25lZWRlZCwgb3V0ZXJQbGFuU3RhdGUo Y2hpbGRfbm9kZSkpOworCQl9CisJfQogCiAJLyoKIAkgKiBJbiBwcmluY2lwbGUgd2UgY291bGQg ZGVzY2VuZCB0aHJvdWdoIGFueSBwbGFuIG5vZGUgdHlwZSB0aGF0IGlzCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCA4NGJmZjYwY2UuLmYzZmM2M2FiZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC05Niw2ICs5Niw5IEBA IEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQlub2RlLT5pb3NzX1Nj YW5EZXNjID0gc2NhbmRlc2M7CiAJCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50 X2l0dXApOwogCisJCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwkJc2NhbmRlc2Mt PnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJ ZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhl YWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTUyOCw2 ICs1MzEsNyBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5c1Jl YWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5cyA9IE5VTEw7CiAJaW5k ZXhzdGF0ZS0+aW9zc19OdW1SdW50aW1lS2V5cyA9IDA7CisJaW5kZXhzdGF0ZS0+aW9zc19UdXBs ZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhlIGluZGV4IHNjYW4ga2V5cyBmcm9t IHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC03MDQsNiArNzA4LDkgQEAgRXhlY0luZGV4T25s eVNjYW5Jbml0aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJIHBp c2Nhbik7CiAJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKKwkv KiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aW9zc19TY2FuRGVzYy0+dHVw bGVzX25lZWRlZCA9IG5vZGUtPmlvc3NfVHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBubyBy dW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5k IHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgpAQCAtNzY5LDYgKzc3Niw5 IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUg Km5vZGUsCiAJCQkJCQkJCSBwaXNjYW4pOwogCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54 c193YW50X2l0dXApOwogCisJLyogUGFzcyBkb3duIGFueSB0dXBsZSBib3VuZCAqLworCW5vZGUt Pmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsK KwogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUg cmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBB TS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCA2NzgyMjk0N2EuLjNlMTc0 Y2I2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTE1LDYgKzExNSw5 IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAogCQlub2RlLT5pc3NfU2NhbkRl c2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJCXNj YW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCQkvKgog CQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwg Z28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAg LTIxMSw2ICsyMTQsOSBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24g YW55IHR1cGxlIGJvdW5kICovCisJCXNjYW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNz X1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1 bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5r ZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTk4Niw2ICs5OTIsNyBAQCBFeGVjSW5pdEluZGV4U2Nh bihJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3Rh dGUtPmlzc19SdW50aW1lS2V5c1JlYWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aXNzX1J1bnRp bWVLZXlzID0gTlVMTDsKIAlpbmRleHN0YXRlLT5pc3NfTnVtUnVudGltZUtleXMgPSAwOworCWlu ZGV4c3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhlIGlu ZGV4IHNjYW4ga2V5cyBmcm9tIHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC0xNzMwLDYgKzE3 MzcsOSBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwK IAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CiAK KwkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aXNzX1NjYW5EZXNjLT50 dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCS8qCiAJICogSWYgbm8g cnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFu ZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTE3OTQsNiArMTgw NCw5IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2Rl LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsK IAorCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwlub2RlLT5pc3NfU2NhbkRlc2Mt PnR1cGxlc19uZWVkZWQgPSBub2RlLT5pc3NfVHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBu byBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQg YW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgotLSAKMi41My4wCgo= --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0006-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v13-0006-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv389s14 RnJvbSA3ZWRmYmE2ODFkZDdmYmY2NzE2ZmM2YmU0ZWI5MzdiMzY2NjBmMzEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjEzIDA2LzE5XSBB ZGQgaW50ZXJmYWNlcyB0aGF0IGVuYWJsZSBpbmRleCBwcmVmZXRjaGluZy4KCkFkZCBhIG5ldyBh bWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSB0aGF0IGFsbG93cyBpbmRleCBhY2Nlc3MgbWV0 aG9kcwp0byBpbXBsZW1lbnQgcGxhaW4vb3JkZXJlZCBpbmRleCBzY2FucyB0aGF0IHJldHVybiBp bmRleCBlbnRyaWVzIGluCmJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0Y2hpbmcgaXRlbXMgZnJv bSBhbiBpbmRleCBwYWdlLCByYXRoZXIgdGhhbgpvbmUgbWF0Y2ggYXQgYSB0aW1lLgoKVGhpcyBj b21taXQgYWxzbyBhZGRzIGEgbmV3IHRhYmxlIEFNIGludGVyZmFjZSBjYWxsYmFjaywgY2FsbGVk IGJ5IHRoZQpjb3JlIGV4ZWN1dG9yIHRocm91Z2ggdGhlIG5ldyB0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3Qgc2hpbSBmdW5jdGlvbi4KVGhpcyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIGRpcmVjdGx5 IG1hbmFnZSB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXggc2NhbnMKcmF0aGVyIHRoYW4gaGF2aW5nIGlu ZGl2aWR1YWwgVElEcyBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciBvbmUgYnkgb25lLgpUaGUgYW1n ZXRiYXRjaCBpbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2Fj aCB0bwppbmRleCBzY2FucyBhZGRlZCB0byB0aGUgdGFibGUgQU0uICBUaGUgdGFibGUgQU0gY2Fu IGFwcGx5IGtub3dsZWRnZSBvZgp3aGljaCBUSURzIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHNj YW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0KSS9PIHByZWZldGNoaW5nLiAgUHJlZmV0 Y2hpbmcgd2lsbCBiZSBhZGRlZCBieSBhbiB1cGNvbWluZyBjb21taXQuCgpJbmRleCBhY2Nlc3Mg bWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVzdCBub3cgaW1wbGVtZW50 CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UgT1IgdGhlIGFtZ2V0dHVwbGUgaW50ZXJm YWNlLiAgVGhlCmFtZ2V0dHVwbGUgaW50ZXJmYWNlIHdpbGwgc3RpbGwgYmUgdXNlZCBieSBpbmRl eCBBTXMgdGhhdCByZXF1aXJlIGRpcmVjdApjb250cm9sIG92ZXIgdGhlIHByb2dyZXNzIG9mIGlu ZGV4IHNjYW5zIChlLmcuLCBHaVNUIHdpdGggS05OIG9yZGVyZWQKc2NhbnMpLiAgQWxtb3N0IGFs bCBleGlzdGluZyBjYWxsZXJzIHRoYXQgcGVyZm9ybSBpbmRleCBzY2FucyBub3cgdXNlCnRoZSBu ZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB3aGV0 aGVyIHRoZQp1bmRlcmx5aW5nIGluZGV4IEFNIHVzZXMgYW1nZXRiYXRjaCBvciBhbWdldHR1cGxl LgoKVGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIHJldHVybnMgYmF0Y2hlcyB0aGF0IGhvbGQgYSBi dWZmZXIgcGluIG9uIGFuCmluZGV4IHBhZ2UgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgdGFibGUg QU0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZB Q1VVTS4gIE5vdyBoZWFwYW0gb25seSBuZWVkcyB0byBob2xkIG9uIHRvCnN1Y2ggYSBwaW4gZm9y IGFuIGluc3RhbnQgLS0gZXhjZXB0IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDCnNu YXBzaG90LiAgTm9uLU1WQ0Mgc2NhbnMgY29udGludWUgdG8gbmVlZCB0byBob2xkIHRoZSBwaW4g dW50aWwgYWxsIG9mCnRoZSBiYXRjaCdzIFRJRHMgaGF2ZSBiZWVuIGZldGNoZWQgZnJvbSB0aGUg aGVhcC4KClRoaXMgZXh0ZW5kcyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRkZWQgdG8gbmJ0cmVl IGJ5IGNvbW1pdCAyZWQ1Yjg3ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdvcmsgd2l0aCBhbGwg aW5kZXggQU1zIHRoYXQgc3VwcG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgV2Ug Y2FuIGFsd2F5cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMKZWFnZXJseSwgcHJvdmlkZWQg dGhlIHNjYW4gdXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2UgdGhlIG5idHJlZQpkcm9wUGlu IG9wdGltaXphdGlvbiwgd2hpY2ggaGFkIGEgY291cGxlIG9mIGFkZGl0aW9uYWwgcmVzdHJpY3Rp b25zKS4KCkFuIHVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIGluZGV4IHByZWZldGNoaW5n IHdpbGwgdXNlIGEgcmVhZApzdHJlYW0gdG8gcmVhZCBoZWFwIHBhZ2VzIGR1cmluZyBpbmRleCBz Y2Fucy4gIFJlYWQgc3RyZWFtIGlzIGNhcmVmdWwgdG8KbGltaXQgaG93IG1hbnkgdGhpbmdzIGl0 IHBpbnMsIGxlc3Qgd2UgcnVuIGludG8gcHJvYmxlbXMgZHVlIHRvIGhhdmluZwp0b28gbWFueSBi dWZmZXJzIHBpbm5lZC4gIFNpbXBseSBuZXZlciBob2xkaW5nIG9uIHRvIGluZGV4IHBhZ2UgYnVm ZmVyCnBpbnMgZ3JlYXRseSBzaW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGluZGV4 IHByZWZldGNoaW5nOwp0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMg YmV0d2VlbiB0aGUgcmVhZCBzdHJlYW0gYW5kCmluZGV4IEFNLiAgVGhlIG9ubHkgZG93bnNpZGUg aXMgdGhhdCB3ZSBjYW5ub3Qgc3VwcG9ydCBwcmVmZXRjaGluZwpkdXJpbmcgc2NhbnMgdGhhdCB1 c2UgYSBub24tTVZDQyBzbmFwc2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNjZXB0YWJsZS4KCklu IHByYWN0aWNlLCBoZWFwYW0gZG9lc24ndCBkcm9wIGVhY2ggYmF0Y2gncyBpbmRleCBwYWdlIGJ1 ZmZlciBwaW4gYXQKdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IGR1cmluZyBpbmRleC1vbmx5IHNj YW5zLiAgVGhpcyB3YXMgZGVlbWVkCm5lY2Vzc2FyeSB0byBhdm9pZCByZWdyZXNzaW5nIGluZGV4 LW9ubHkgc2NhbnMgd2l0aCBhIExJTUlULCBpbgpwYXJ0aWN1bGFyIHdpdGggbmVzdGxvb3AgYW50 aS1qb2lucyBhbmQgbmVzdGxvb3Agc2VtaS1qb2luczsgZWFnZXJseQpsb2FkaW5nIGFsbCB0aGUg dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB1cCBmcm9udCByZWdyZXNzZWQgc3VjaCBxdWVyaWVzLgpU aGUgbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9yaXR5 IHRvIGRlY2lkZQp3aGVuIGFuZCB3aGVyZSB0byBkcm9wIGluZGV4IHBhZ2UgcGlucywgc28gdGhp cyBjYW4gYmUgY29uc2lkZXJlZCBhCmhlYXBhbSBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgKGluZGV4 IEFNcyBkb24ndCBuZWVkIHRvIGtub3cgYWJvdXQgaXQpLgpUaGlzIHNjaGVtZSBzdGlsbCBhbGxv d3MgaW5kZXggcHJlZmV0Y2hpbmcgdG8gY29uc2lzdGVudGx5IGhvbGQgbm8gbW9yZQp0aGFuIG9u ZSBiYXRjaCBpbmRleCBwYWdlIHBpbiBhdCBhIHRpbWUsIGV2ZW4gd2hlbiBhbiBpbmRleC1vbmx5 IHNjYW4KKHRoYXQgbXVzdCBwZXJmb3JtIHNvbWUgaGVhcCBmZXRjaGVzKSBob2xkcyBvcGVuIHNl dmVyYWwgaW5kZXggYmF0Y2hlcwphdCBvbmNlIGluIG9yZGVyIHRvIG1haW50YWluIGFuIGFkZXF1 YXRlIHByZWZldGNoIGRpc3RhbmNlLgoKQXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRy YS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBB bmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5OiBUaG9tYXMgTXVu cm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2VkYi5jb20K RGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9lZmFjMzIzOC02ZjM0LTQxZWEtYTM5My0y NmNjMDQ0MWI1MDYlNDB2b25kcmEubWUKLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAg ICAgICAgICAgICAgICAgICAgfCAgMjcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAg ICAgICAgICAgICAgICAgICB8ICAzMSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAg ICAgICAgICAgICAgICAgfCAxODggKystLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgg ICAgICAgICAgICAgICAgICB8IDMyNiArKysrKysrLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaCAgICAgICAgICAgICAgICAgIHwgIDY1ICsrCiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0 cnVtZW50X25vZGUuaCAgICAgICAgfCAgIDYgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmggICAgICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o ICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j ICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5j ICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5j ICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAg ICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAg ICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMgICAgICB8IDY5MSArKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9hbWFwaS5jICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv Z2VuYW0uYyAgICAgICAgICAgICAgfCAgMTggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGFtLmMgICAgICAgICAgICB8IDE2OSArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jICAgICAgICAgfCA3NTIgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9SRUFETUUgICAgICAgICAgICAgIHwgIDY2ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAgICAgICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyAgICAgICB8IDE5MyArKystLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICAgICAgICAgIHwgNDcwICsrKysrKy0tLS0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jICAgICAgICAgfCA1NDIgKysrKysrLS0t LS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgMjQ1 IC0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMgICAgICAgICAgIHwg ICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAg IDYgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8ICAy MyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgICAgIHwgICAy ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICAgICB8ICAgNiAr LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICAgICAgIHwgICA4ICst CiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyAgICAgIHwgMTA4ICstLQog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAgICAgIHwgIDEzICstCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMgICAgICAgICAgfCAgIDQgKy0KIHNy Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICAgICAgICB8ICAgNiArLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgICAgICAgIHwgICA4ICstCiBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgICAgfCAgIDMgKy0KIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAgICAgICAgICAgIHwgIDYxICstCiBjb250cmli L2FtY2hlY2svdmVyaWZ5X25idHJlZS5jICAgICAgICAgICAgICAgfCAgIDIgKy0KIGNvbnRyaWIv Ymxvb20vYmx1dGlscy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogZG9jL3NyYy9z Z21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgNDM2ICsrKysrKysrLS0KIGRv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgICAgICAgICAgICB8ICAxMyArLQogLi4u L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyAgIHwgICA2ICstCiBzcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgMTAgKy0KIDQ5IGZp bGVzIGNoYW5nZWQsIDMxMTggaW5zZXJ0aW9ucygrKSwgMTQ5NSBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv YW1hcGkuaAppbmRleCBlY2ZiZDAxN2QuLmI4YzI0N2NhZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAgLTE5 OCw2ICsxOTgsMTkgQEAgdHlwZWRlZiB2b2lkICgqYW1yZXNjYW5fZnVuY3Rpb24pIChJbmRleFNj YW5EZXNjIHNjYW4sCiB0eXBlZGVmIGJvb2wgKCphbWdldHR1cGxlX2Z1bmN0aW9uKSAoSW5kZXhT Y2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAorLyog bmV4dCBiYXRjaCBvZiB2YWxpZCB0dXBsZXMgKi8KK3R5cGVkZWYgSW5kZXhTY2FuQmF0Y2ggKCph bWdldGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBJ bmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbik7CisKKy8qIG1hcmsgZGVhZCBpdGVtcyBpbiBpbmRleCBwYWdlICovCit0eXBlZGVm IHZvaWQgKCphbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAor CQkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyogcmVsZWFzZSBiYXRjaCBy ZXNvdXJjZXMgaGVsZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyAqLwordHlw ZWRlZiB2b2lkICgqYW1yZWxlYXNlYmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4s CisJCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogLyogZmV0Y2ggYWxsIHZhbGlk IHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhT Y2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0bWFwICp0Ym0pOwpAQCAtMjA1LDExICsy MTgsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5E ZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAqLwogdHlwZWRlZiB2b2lkICgqYW1lbmRzY2Fu X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAotLyogbWFyayBjdXJyZW50IHNjYW4g cG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtbWFya3Bvc19mdW5jdGlvbikgKEluZGV4U2Nh bkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFya2VkIHNjYW4gcG9zaXRpb24gKi8KLXR5cGVk ZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOworLyog aW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4n cyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgqYW1wb3NyZXNldF9mdW5jdGlvbikgKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiAKIC8qCiAg KiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0gZm9yIHBhcmFsbGVsIGluZGV4IHNjYW5z LgpAQCAtMzA5LDEwICszMjAsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlh bWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsKIAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJl c2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7IC8qIGNhbiBiZSBOVUxMICov CisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFt a2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsgLyogY2FuIGJlIE5VTEwg Ki8KKwlhbXJlbGVhc2ViYXRjaF9mdW5jdGlvbiBhbXJlbGVhc2ViYXRjaDsKIAlhbWdldGJpdG1h cF9mdW5jdGlvbiBhbWdldGJpdG1hcDsJLyogY2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVu Y3Rpb24gYW1lbmRzY2FuOwotCWFtbWFya3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBi ZSBOVUxMICovCi0JYW1yZXN0cnBvc19mdW5jdGlvbiBhbXJlc3RycG9zOyAvKiBjYW4gYmUgTlVM TCAqLworCWFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8K IAogCS8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2Fu cyAqLwogCWFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbjsgLyogY2FuIGJlIE5VTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9n ZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggNGMwNDI5Y2M2Li44NDkw NzVhYzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC05NCw2ICs5NCw3IEBAIHR5cGVkZWYgYm9vbCAoKklu ZGV4QnVsa0RlbGV0ZUNhbGxiYWNrKSAoSXRlbVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3RhdGUp OwogCiAvKiBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXBwZWFyIGluIHJlbHNjYW4uaCAqLwogdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKkluZGV4U2NhbkRlc2M7Cit0eXBlZGVmIHN0cnVj dCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwogdHlwZWRlZiBzdHJ1Y3QgU3lz U2NhbkRlc2NEYXRhICpTeXNTY2FuRGVzYzsKIAogdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxJbmRl eFNjYW5EZXNjRGF0YSAqUGFyYWxsZWxJbmRleFNjYW5EZXNjOwpAQCAtMTU0LDYgKzE1NSw3IEBA IGV4dGVybiB2b2lkIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24s CiAKIGV4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVs YXRpb24sCiAJCQkJCQkJCQkgUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCSBib29s IHhzX3dhbnRfaXR1cCwKIAkJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCSBJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCQkJCQkgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzKTsKQEAgLTE4MCwxNCArMTgyLDEyIEBAIGV4dGVybiB2b2lkIGluZGV4 X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIGV4dGVybiB2 b2lkIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gSW5k ZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwKIAkJ CQkJCQkJCQkJICBSZWxhdGlvbiBpbmRleHJlbCwKKwkJCQkJCQkJCQkJICBib29sIHhzX3dhbnRf aXR1cCwKIAkJCQkJCQkJCQkJICBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQs CiAJCQkJCQkJCQkJCSAgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJCQkJCQkgIFBh cmFsbGVsSW5kZXhTY2FuRGVzYyBwc2Nhbik7CiBleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0 bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uKTsKLWV4dGVybiBib29sIGluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2Fu LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7Ci1leHRlcm4gYm9vbCBpbmRleF9nZXRuZXh0X3Nsb3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCQkgICBU dXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gaW50NjQgaW5kZXhfZ2V0Yml0bWFwKEluZGV4 U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICpiaXRtYXApOwogCiBleHRlcm4gSW5kZXhCdWxrRGVs ZXRlUmVzdWx0ICppbmRleF9idWxrX2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCkBAIC0y NTEsNCArMjUxLDI5IEBAIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2JlZ2lu KFJlbGF0aW9uIHJlbGF0aW9uLAogZXh0ZXJuIHZvaWQgc3lzdGFibGVfaW5wbGFjZV91cGRhdGVf ZmluaXNoKHZvaWQgKnN0YXRlLCBIZWFwVHVwbGUgdHVwbGUpOwogZXh0ZXJuIHZvaWQgc3lzdGFi bGVfaW5wbGFjZV91cGRhdGVfY2FuY2VsKHZvaWQgKnN0YXRlKTsKIAorLyoKKyAqIGFtZ2V0YmF0 Y2ggdXRpbGl0aWVzIGNhbGxlZCBieSBpbmRleGFtLmMgKGluIGluZGV4YmF0Y2guYykKKyAqLwor ZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4 dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0 ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJu IHZvaWQgaW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsK KworLyoKKyAqIGFtZ2V0YmF0Y2ggdXRpbGl0aWVzIGNhbGxlZCBieSB0YWJsZSBBTXMgKGluIGlu ZGV4YmF0Y2guYykKKyAqLworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5n ZShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2tpbGxfc2Nh bnBvc2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9m cmVlX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworZXh0 ZXJuIHZvaWQgdGFibGVhbV91dGlsX3JlbGVhc2VfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGllcyBjYWxs ZWQgYnkgaW5kZXggQU1zIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK2V4dGVybiB2b2lkIGluZGV4 YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCwKKwkJCQkJCQkJCSAgQnVmZmVyIGJ1Zik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggaW5k ZXhhbV91dGlsX2JhdGNoX2FsbG9jKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBp bmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKTsKKwogI2VuZGlmCQkJCQkJCS8qIEdFTkFNX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApp bmRleCBhODU5YzkwZjQuLjEzNjAxOTkyNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTE4LDkgKzEx OCwzNCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAogCUJ1ZmZlcgkJeHNf Y2J1ZjsJCS8qIGN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCiAJQmxvY2tO dW1iZXIgeHNfYmxrOwkJCS8qIHhzX2NidWYncyBibG9jayBudW1iZXIsIGlmIGFueSAqLwotCS8q IE5COiBpZiB4c19jYnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRo YXQgYnVmZmVyICovCisKKwkvKiBGb3IgaW5kZXgtb25seSBzY2FucyB0aGF0IG11c3QgYWNjZXNz IHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCUJ1ZmZlcgkJeHNfdm1idWY7CQkvKiB2aXNpYmlsaXR5 IG1hcCBidWZmZXIgKi8KKwlpbnQJCQl4c192bV9pdGVtczsJLyogIyBpdGVtcyB0byByZXNvbHZl IHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KKworCWJvb2wJCXhzX2xhc3RpbmJsb2NrOyAvKiBsYXN0 IFRJRCBvbiB0aGlzIGJsb2NrIGluIGN1cnJlbnQgYmF0Y2g/ICovCisKKwkvKiBOQjogaWYgeHNf Y2J1ZiBvciB2bWJ1ZiBhcmUgbm90IEludmFsaWRCdWZmZXIsIHdlIGhvbGQgYSBwaW4gKi8KIH0g SW5kZXhGZXRjaEhlYXBEYXRhOwogCisvKgorICogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0 aGUgaGVhcCB0YWJsZSBBTS4KKyAqCisgKiBTdG9yZWQgYXQgYSBuZWdhdGl2ZSBvZmZzZXQgZnJv bSB0aGUgSW5kZXhTY2FuQmF0Y2ggcG9pbnRlciwgaW4gdGhlCisgKiB0YWJsZSBBTSBvcGFxdWUg YXJlYSBvZiBlYWNoIGJhdGNoIGFsbG9jYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IEhlYXBC YXRjaERhdGEKK3sKKwl1aW50OAkgICAqdmlzSW5mbzsJCS8qIHBlci1pdGVtIHZpc2liaWxpdHkg ZmxhZ3MsIG9yIE5VTEwgKi8KK30gSGVhcEJhdGNoRGF0YTsKKworLyogQWNjZXNzIHRoZSBoZWFw LXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVyICov CitzdGF0aWMgaW5saW5lIEhlYXBCYXRjaERhdGEgKgoraGVhcF9iYXRjaF9kYXRhKEluZGV4U2Nh bkJhdGNoIGJhdGNoLCBJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJcmV0dXJuIChIZWFwQmF0Y2hE YXRhICopICgoY2hhciAqKSBiYXRjaCAtIHNjYW4tPmJhdGNoX3RhYmxlX29mZnNldCk7Cit9CisK IC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtICovCiB0eXBlZGVm IGVudW0KIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCBkYTc1MDNjNTcuLmZlZGM0YjRlMyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9uYnRyZWUuaApAQCAtOTI0LDExMSArOTI0LDI3IEBAIHR5cGVkZWYgc3RydWN0IEJUVmFjdXVt UG9zdGluZ0RhdGEKIAogdHlwZWRlZiBCVFZhY3V1bVBvc3RpbmdEYXRhICpCVFZhY3V1bVBvc3Rp bmc7CiAKKy8qIFBlci1iYXRjaCBkYXRhIHByaXZhdGUgdG8gdGhlIGJ0cmVlIGluZGV4IEFNICov Cit0eXBlZGVmIHN0cnVjdCBCVEJhdGNoRGF0YQoreworCUJ1ZmZlcgkJYnVmOwkJCS8qIGluZGV4 IHBhZ2UgYnVmZmVyIHBpbiAoVElEIHJldXNlIGludGVybG9jaykgKi8KKwlCbG9ja051bWJlciBj dXJyUGFnZTsJCS8qIGluZGV4IHBhZ2Ugd2l0aCBtYXRjaGluZyBpdGVtcyAqLworCUJsb2NrTnVt YmVyIHByZXZQYWdlOwkJLyogY3VyclBhZ2UncyBsZWZ0IHNpYmxpbmcgKi8KKwlCbG9ja051bWJl ciBuZXh0UGFnZTsJCS8qIGN1cnJQYWdlJ3MgcmlnaHQgc2libGluZyAqLworCWJvb2wJCW1vcmVM ZWZ0OwkJLyogbW9yZSBtYXRjaGluZyBwYWdlcyB0byB0aGUgbGVmdD8gKi8KKwlib29sCQltb3Jl UmlnaHQ7CQkvKiBtb3JlIG1hdGNoaW5nIHBhZ2VzIHRvIHRoZSByaWdodD8gKi8KK30gQlRCYXRj aERhdGE7CisKIC8qCi0gKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJlZS1wcml2YXRlIHN0 YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgotICogVGhpcyBjb25zaXN0cyBvZiBwcmVwcm9j ZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZvcgotICogZGV0YWls cyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGxv Y2F0aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXJrZWQg bG9jYXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAqIEJUU2NhblBvc0RhdGEgdG8gcmVwcmVzZW50 IHRoZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBjdXJyZW50IGFuZCBtYXJrZWQKLSAqIGxvY2F0 aW9ucy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1lbWJlciBzb21lIGtub3duLWtpbGxlZCBpbmRl eCBlbnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFya2VkIGJlZm9yZSB3ZSBjYW4gbW92ZSBvZmYg dGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRp bWU6IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVudGlmeQotICogYWxsIHRoZSBt YXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZSBhbmQgc2F2ZSB0aGVtIGluIEJUU2NhblBvc0RhdGEs IHRoZW4KLSAqIHJlbGVhc2UgdGhlIHJlYWQtbG9jayB3aGlsZSByZXR1cm5pbmcgdGhlIGl0ZW1z IHRvIHRoZSBjYWxsZXIgZm9yCi0gKiBwcm9jZXNzaW5nLiAgVGhpcyBhcHByb2FjaCBtaW5pbWl6 ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3QgYWx3YXlzCi0gKiBkcm9wIHRoZSBsb2Nr IHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHByb2Nlc3MgdGhlIHJldHVybmVkIGl0ZW1z LgotICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28gcmVsZWFzZSB0aGUgcGluIGR1cmluZyB0 aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9wIHRoZSBwaW4gKHdoZW4gc28tPmRyb3BQ aW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5IFZBQ1VVTQotICogKHNlZSBuYnRyZWUv UkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZl KS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gb24g dGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0byBpdHMgc2libGluZyBwYWdl LgotICoKLSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIHNhdmUgdGhl IGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCi0gKiBtYXRjaGVkIGl0ZW0sIG90aGVyd2lzZSBv bmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhlIEluZGV4VHVwbGVzIGdvCi0gKiBpbnRv IGEgc2VwYXJhdGUgd29ya3NwYWNlIGFycmF5OyBlYWNoIEJUU2NhblBvc0l0ZW0gc3RvcmVzIGl0 cyB0dXBsZSdzCi0gKiBvZmZzZXQgd2l0aGluIHRoYXQgYXJyYXkuICBQb3N0aW5nIGxpc3QgdHVw bGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCi0gKiBhbGxvd2luZyB0aGUgc2FtZSBrZXkg dG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxpc3QKLSAqIHR1cGxl LgorICogQWNjZXNzIHRoZSBidHJlZS1wcml2YXRlIHBlci1iYXRjaCBkYXRhIGZyb20gYW4gSW5k ZXhTY2FuQmF0Y2ggcG9pbnRlci4KKyAqIFRoaXMgZm9sbG93cyB0aGUgc3RhbmRhcmQgY29udmVu dGlvbiBmb3IgaW5kZXggQU0gb3BhcXVlIHN0YXRlOiBpdCBjYW4gYmUKKyAqIGZvdW5kIGF0IGEg Zml4ZWQgbmVnYXRpdmUgb2Zmc2V0IGZyb20gdGhlIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIuCiAg Ki8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFi b3V0IGVhY2ggbWF0Y2ggKi8KK3N0YXRpYyBpbmxpbmUgQlRCYXRjaERhdGEgKgorQlRCYXRjaEdl dERhdGEoSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7 CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9m ZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi0JTG9jYXRpb25J bmRleCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNldCBpbiB3b3Jrc3BhY2UsIGlm IGFueSAqLwotfSBCVFNjYW5Qb3NJdGVtOwotCi10eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NEYXRh Ci17Ci0JQnVmZmVyCQlidWY7CQkJLyogY3VyclBhZ2UgYnVmIChpbnZhbGlkIG1lYW5zIHVucGlu bmVkKSAqLwotCi0JLyogcGFnZSBkZXRhaWxzIGFzIG9mIHRoZSBzYXZlZCBwb3NpdGlvbidzIGNh bGwgdG8gX2J0X3JlYWRwYWdlICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBwYWdlIHJl ZmVyZW5jZWQgYnkgaXRlbXMgYXJyYXkgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGN1 cnJQYWdlJ3MgbGVmdCBsaW5rICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFn ZSdzIHJpZ2h0IGxpbmsgKi8KLQlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJyUGFnZSdzIExTTiAo d2hlbiBzby0+ZHJvcFBpbikgKi8KLQotCS8qIHNjYW4gZGlyZWN0aW9uIGZvciB0aGUgc2F2ZWQg cG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCVNjYW5EaXJlY3Rpb24gZGlyOwot Ci0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCBuZXh0VHVwbGVP ZmZzZXQgaXMgdGhlIGZpcnN0IGZyZWUKLQkgKiBsb2NhdGlvbiBpbiB0aGUgYXNzb2NpYXRlZCB0 dXBsZSBzdG9yYWdlIHdvcmtzcGFjZS4KLQkgKi8KLQlpbnQJCQluZXh0VHVwbGVPZmZzZXQ7Ci0K LQkvKgotCSAqIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgdHJhY2sgd2hldGhlciB3ZSB0aGluayB0 aGVyZSBtYXkgYmUgbWF0Y2hpbmcKLQkgKiBpbmRleCBlbnRyaWVzIHRvIHRoZSBsZWZ0IGFuZCBy aWdodCBvZiB0aGUgY3VycmVudCBwYWdlLCByZXNwZWN0aXZlbHkuCi0JICovCi0JYm9vbAkJbW9y ZUxlZnQ7Ci0JYm9vbAkJbW9yZVJpZ2h0OwotCi0JLyoKLQkgKiBUaGUgaXRlbXMgYXJyYXkgaXMg YWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCi0JICogaW5kZXhv ZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCB0byBmaWxs IHRoZQotCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNs b3QgYW5kIGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBhIGZpcnN0LXZh bGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KLQkgKiBpdGVtSW5kZXgg aXMgYSBjdXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFzdCByZXR1cm5lZCB0byBjYWxs ZXIuCi0JICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRl bXNbXSAqLwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1td ICovCi0JaW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBpdGVtc1tdICovCi0K LQlCVFNjYW5Qb3NJdGVtIGl0ZW1zW01heFRJRHNQZXJCVHJlZVBhZ2VdOwkvKiBNVVNUIEJFIExB U1QgKi8KLX0gQlRTY2FuUG9zRGF0YTsKLQotdHlwZWRlZiBCVFNjYW5Qb3NEYXRhICpCVFNjYW5Q b3M7Ci0KLSNkZWZpbmUgQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0 TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFC dWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3Mp LmJ1ZikgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbihzY2FucG9zKSBcCi0JZG8geyBcCi0J CVJlbGVhc2VCdWZmZXIoKHNjYW5wb3MpLmJ1Zik7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFs aWRCdWZmZXI7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbklmUGlubmVk KHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3MpKSBc Ci0JCQlCVFNjYW5Qb3NVbnBpbihzY2FucG9zKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUg QlRTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJl cklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNj YW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkg XAotKQotI2RlZmluZSBCVFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJ KHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0g SW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JfSB3aGlsZSAoMCkKKwlyZXR1cm4gKEJUQmF0Y2hEYXRh ICopICgoY2hhciAqKSBiYXRjaCAtIE1BWEFMSUdOKHNpemVvZihCVEJhdGNoRGF0YSkpKTsKK30K IAogLyogV2UgbmVlZCBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggZXF1YWxpdHktdHlwZSBTS19TRUFS Q0hBUlJBWSBzY2FuIGtleSAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KQEAgLTEw NTAsNiArOTY2LDI4IEBAIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiAJU2NhbktleQkJ aGlnaF9jb21wYXJlOwkvKiBhcnJheSdzIDwgb3IgPD0gdXBwZXIgYm91bmQgKi8KIH0gQlRBcnJh eUtleUluZm87CiAKKy8qCisgKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJlZS1wcml2YXRl IHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgorICogVGhpcyBjb25zaXN0cyBvZiBwcmVw cm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZvcgorICogZGV0 YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3Vy cmVudCBhcnJheQorICoga2V5cy4gIFRoZXJlIGFyZSBhc3N1bXB0aW9ucyBhYm91dCBob3cgdGhl IGN1cnJlbnQgYXJyYXkga2V5cyB0cmFjayB0aGUKKyAqIHByb2dyZXNzIG9mIHRoZSBpbmRleCBz Y2FuIHRocm91Z2ggdGhlIGluZGV4J3Mga2V5IHNwYWNlIChzZWUgX2J0X3JlYWRwYWdlCisgKiBh bmQgX2J0X2FkdmFuY2VfYXJyYXlfa2V5cyksIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB0cmFjayBh bnl0aGluZyBhYm91dCB0aGUKKyAqIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBpbiB0aGlzIG9wYXF1 ZSBzdHJ1Y3QuCisgKgorICogSW5kZXggc2NhbnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lLCBhcyBy ZXF1aXJlZCBieSB0aGUgYW1nZXRiYXRjaCBjb250cmFjdDoKKyAqIHdlIHBpbiBhbmQgcmVhZC1s b2NrIHRoZSBwYWdlLCBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdl CisgKiBhbmQgcmV0dXJuIHRoZW0gaW4gYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2guICBXZSB0aGVu IHJlbGVhc2UgdGhlIHJlYWQtbG9jaworICogdXNpbmcgYW1nZXRiYXRjaCB1dGlsaXR5IHJvdXRp bmVzLiAgVGhpcyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sKKyAqIHRyYWZmaWMuIF9i dF9uZXh0IGlzIHBhc3NlZCBwcmlvcmJhdGNoLCB3aGljaCBjb250YWlucyBkZXRhaWxzIG9mIHdo aWNoCisgKiBwYWdlIGlzIG5leHQgaW4gbGluZSB0byBiZSByZWFkIChwcmlvcmJhdGNoIGlzIHBy b3ZpZGVkIGFzIGFuIGFyZ3VtZW50IHRvCisgKiBidGdldGJhdGNoIGJ5IGNvcmUgY29kZSkuCisg KgorICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50 aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKKyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkg aXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGlzIGlzIGFsc28gcGVyIHRoZQorICogYW1nZXRi YXRjaCBjb250cmFjdC4gIFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUg b25jZSwKKyAqIGFsbG93aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBU SUQgaW4gdGhlIHBvc3RpbmcgbGlzdC4KKyAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVl RGF0YQogewogCS8qIHRoZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IF9idF9wcmVwcm9jZXNzX2tleXMo KTogKi8KQEAgLTEwNjYsMzIgKzEwMDQsNiBAQCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVE YXRhCiAJQlRBcnJheUtleUluZm8gKmFycmF5S2V5czsJLyogaW5mbyBhYm91dCBlYWNoIGVxdWFs aXR5LXR5cGUgYXJyYXkga2V5ICovCiAJRm1nckluZm8gICAqb3JkZXJQcm9jczsJCS8qIE9SREVS IHByb2NzIGZvciByZXF1aXJlZCBlcXVhbGl0eSBrZXlzICovCiAJTWVtb3J5Q29udGV4dCBhcnJh eUNvbnRleHQ7IC8qIHNjYW4tbGlmZXNwYW4gY29udGV4dCBmb3IgYXJyYXkgZGF0YSAqLwotCi0J LyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlm IG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMg aW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIg b2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCWJvb2wJCWRyb3BQaW47CQkvKiBkcm9wIGxl YWYgcGluIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnM/ICovCi0KLQkvKgotCSAqIElmIHdlIGFy ZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0aGUgdHVwbGUgc3RvcmFnZQot CSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBjdXJyUG9zIGFuZCBtYXJrUG9zIHJlc3BlY3RpdmVseS4g IEVhY2ggaXMgb2Ygc2l6ZQotCSAqIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMgbXVjaCBhcyBh IGZ1bGwgcGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KLQkgKi8KLQljaGFyCSAgICpjdXJyVHVwbGVz OwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgY3VyclBvcyAqLwotCWNoYXIJICAgKm1hcmtUdXBsZXM7 CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBtYXJrUG9zICovCi0KLQkvKgotCSAqIElmIHRoZSBtYXJr ZWQgcG9zaXRpb24gaXMgb24gdGhlIHNhbWUgcGFnZSBhcyBjdXJyZW50IHBvc2l0aW9uLCB3ZQot CSAqIGRvbid0IHVzZSBtYXJrUG9zLCBidXQganVzdCBrZWVwIHRoZSBtYXJrZWQgaXRlbUluZGV4 IGluIG1hcmtJdGVtSW5kZXgKLQkgKiAoYWxsIHRoZSByZXN0IG9mIGN1cnJQb3MgaXMgdmFsaWQg Zm9yIHRoZSBtYXJrIHBvc2l0aW9uKS4gSGVuY2UsIHRvCi0JICogZGV0ZXJtaW5lIGlmIHRoZXJl IGlzIGEgbWFyaywgZmlyc3QgbG9vayBhdCBtYXJrSXRlbUluZGV4LCB0aGVuIGF0Ci0JICogbWFy a1Bvcy4KLQkgKi8KLQlpbnQJCQltYXJrSXRlbUluZGV4OwkvKiBpdGVtSW5kZXgsIG9yIC0xIGlm IG5vdCB2YWxpZCAqLwotCi0JLyoga2VlcCB0aGVzZSBsYXN0IGluIHN0cnVjdCBmb3IgZWZmaWNp ZW5jeSAqLwotCUJUU2NhblBvc0RhdGEgY3VyclBvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gZGF0 YSAqLwotCUJUU2NhblBvc0RhdGEgbWFya1BvczsJCS8qIG1hcmtlZCBwb3NpdGlvbiwgaWYgYW55 ICovCiB9IEJUU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgQlRTY2FuT3BhcXVlRGF0YSAqQlRT Y2FuT3BhcXVlOwpAQCAtMTE2MCwxNCArMTA3MiwxNyBAQCBleHRlcm4gYm9vbCBidGluc2VydChS ZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIGV4dGVybiBJbmRleFNj YW5EZXNjIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz KTsKIGV4dGVybiBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVsYXRpb24gcmVsLCBpbnQg bmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFyYWxsZWxzY2FuKHZv aWQgKnRhcmdldCk7Ci1leHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGJ0Z2V0YmF0Y2goSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJ CQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdldGJpdG1hcChJbmRl eFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJ0cmVzY2FuKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkg U2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBidGtpbGxpdGVt c2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworZXh0ZXJu IHZvaWQgYnRyZWxlYXNlYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCk7CiBleHRlcm4gdm9pZCBidHBhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CiBleHRlcm4gdm9pZCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lk IGJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRyZXN0cnBvcyhJ bmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgYnRwb3NyZXNldChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1 bHQgKmJ0YnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJICAgSW5k ZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVD YWxsYmFjayBjYWxsYmFjaywKQEAgLTEyNzEsOCArMTE4Niw5IEBAIGV4dGVybiB2b2lkIF9idF9w cmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIC8qCiAgKiBwcm90b3R5cGVzIGZv ciBmdW5jdGlvbnMgaW4gbmJ0cmVhZHBhZ2UuYwogICovCi1leHRlcm4gYm9vbCBfYnRfcmVhZHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKLQkJCQkJCSBPZmZzZXRO dW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSk7CitleHRlcm4gYm9vbCBfYnRfcmVhZHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwKKwkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBib29sIGZpcnN0cGFn ZSk7CiBleHRlcm4gdm9pZCBfYnRfc3RhcnRfYXJyYXlfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQJX2J0X2JpbnNyY2hfYXJyYXlfc2tleShG bWdySW5mbyAqb3JkZXJwcm9jLAogCQkJCQkJCQkgICBib29sIGN1cl9lbGVtX3RyaWcsIFNjYW5E aXJlY3Rpb24gZGlyLApAQCAtMTI4NywxNSArMTIwMywxNSBAQCBleHRlcm4gQlRTdGFjayBfYnRf c2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwK IAkJCQkJCSAgQnVmZmVyICpidWZQLCBpbnQgYWNjZXNzLCBib29sIHJldHVybnN0YWNrKTsKIGV4 dGVybiBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgQlRJbnNl cnRTdGF0ZSBpbnNlcnRzdGF0ZSk7CiBleHRlcm4gaW50MzIgX2J0X2NvbXBhcmUoUmVsYXRpb24g cmVsLCBCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pOwot ZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpOwotZXh0ZXJuIGJvb2wgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9uZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJICAgSW5kZXhT Y2FuQmF0Y2ggcHJpb3JiYXRjaCk7CiBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9pbnQoUmVs YXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KTsKIAogLyoKICAqIHByb3Rv dHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnR1dGlscy5jCiAgKi8KIGV4dGVybiBCVFNjYW5JbnNl cnQgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCk7Ci1leHRlcm4g dm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gQlRDeWNsZUlk IF9idF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRf c3RhcnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5kX3ZhY3V1bShS ZWxhdGlvbiByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggY2UzNDBjMDc2Li5lZGU1ZTZhYTMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTYsOCArMTYsMTAgQEAKIAogI2luY2x1ZGUgImFjY2Vz cy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgorI2luY2x1ZGUgImFj Y2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAibm9kZXMvdGlkYml0bWFwLmgiCiAjaW5jbHVkZSAicG9y dC9hdG9taWNzLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWYuaCIKICNpbmNsdWRlICJzdG9yYWdl L3JlbGZpbGVsb2NhdG9yLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCiAjaW5jbHVkZSAi dXRpbHMvcmVsY2FjaGUuaCIKQEAgLTEyMiw4ICsxMjQsMTc3IEBAIHR5cGVkZWYgc3RydWN0IFBh cmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29y a2VyOwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogewogCVJlbGF0aW9uCXJl bDsKKworCS8qIFRhYmxlIEFNIHBlci1iYXRjaCBvcGFxdWUgYXJlYSBzaXplIChNQVhBTElHTidk KSwgc2V0IGJ5IEFNICovCisJdWludDE2CQliYXRjaF9vcGFxdWVfc2l6ZTsKKworCS8qIFBlci1p dGVtIHRyYWlsaW5nIGRhdGEgc2l6ZSBpbiBlYWNoIGJhdGNoICovCisJdWludDE2CQliYXRjaF9w ZXJfaXRlbV9zaXplOwogfSBJbmRleEZldGNoVGFibGVEYXRhOwogCisvKgorICogTG9jYXRpb24g b2YgYSBCYXRjaE1hdGNoaW5nSXRlbSB0aGF0IGFwcGVhcnMgaW4gYSBJbmRleFNjYW5CYXRjaCBy ZXR1cm5lZAorICogYnkgKGFuZCBzdWJzZXF1ZW50bHkgcGFzc2VkIHRvKSBhbiBhbWdldGJhdGNo IHJvdXRpbmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nSXRlbVBvcworeworCS8qIFBv c2l0aW9uIHJlZmVyZW5jZXMgYSB2YWxpZCBCYXRjaFJpbmdCdWZmZXIuYmF0Y2hlc1tdIGVudHJ5 PyAqLworCWJvb2wJCXZhbGlkOworCisJLyogQmF0Y2hSaW5nQnVmZmVyLmJhdGNoZXNbXS13aXNl IGluZGV4IHRvIHJlbGV2YW50IEluZGV4U2NhbkJhdGNoICovCisJdWludDgJCWJhdGNoOworCisJ LyogSW5kZXhTY2FuQmF0Y2guaXRlbXNbXS13aXNlIGluZGV4IHRvIHJlbGV2YW50IEJhdGNoTWF0 Y2hpbmdJdGVtICovCisJaW50CQkJaXRlbTsKKworfSBCYXRjaFJpbmdJdGVtUG9zOworCisvKgor ICogTWF0Y2hpbmcgaXRlbSByZXR1cm5lZCBieSBhbWdldGJhdGNoIChpbiByZXR1cm5lZCBJbmRl eFNjYW5CYXRjaCkgZHVyaW5nIGFuCisgKiBpbmRleCBzY2FuLiAgVXNlZCBieSB0YWJsZSBBTSB0 byBsb2NhdGUgcmVsZXZhbnQgbWF0Y2hpbmcgdGFibGUgdHVwbGUuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEJhdGNoTWF0Y2hpbmdJdGVtCit7CisJSXRlbVBvaW50ZXJEYXRhIHRhYmxlVGlkOwkvKiBU SUQgb2YgcmVmZXJlbmNlZCB0YWJsZSBpdGVtICovCisJT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0 OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KKwlMb2NhdGlvbkluZGV4 IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwgaWYgYW55 ICovCit9IEJhdGNoTWF0Y2hpbmdJdGVtOworCisvKgorICogUGVyLWl0ZW0gdmlzaWJpbGl0eSBm bGFncyBmb3IgaW5kZXgtb25seSBzY2Fucy4gIFN0b3JlZCBpbiBhIHNlcGFyYXRlCisgKiBhcnJh eSAoSW5kZXhTY2FuQmF0Y2hEYXRhLnZpc0luZm8pIHJhdGhlciB0aGFuIGluIEJhdGNoTWF0Y2hp bmdJdGVtIHRvIGtlZXAKKyAqIHRoZSBob3QgaXRlbXMgYXJyYXkgY29tcGFjdC4KKyAqLworI2Rl ZmluZSBCQVRDSF9WSVNfQ0hFQ0tFRAkJMHgwMQkvKiBjaGVja2VkIGl0ZW0gaW4gVk0/ICovCisj ZGVmaW5lIEJBVENIX1ZJU19BTExfVklTSUJMRQkweDAyCS8qIGJsb2NrIGlzIGtub3duIGFsbC12 aXNpYmxlPyAqLworCisvKgorICogRGF0YSBhYm91dCBvbmUgYmF0Y2ggb2YgaXRlbXMgcmV0dXJu ZWQgYnkgKGFuZCBwYXNzZWQgdG8pIGFtZ2V0YmF0Y2ggZHVyaW5nCisgKiBpbmRleCBzY2Fucy4K KyAqCisgKiBFYWNoIGJhdGNoIGFsbG9jYXRpb24gaGFzIHRoZSBmb2xsb3dpbmcgbWVtb3J5IGxh eW91dDoKKyAqCisgKiAgIFt0YWJsZSBBTSBvcGFxdWUgYXJlYV0gICAgPC0gYXQgLShiYXRjaF90 YWJsZV9vZmZzZXQpIGZyb20gYmF0Y2ggcHRyCisgKiAgIFtpbmRleCBBTSBvcGFxdWUgYXJlYV0g ICAgPC0gYXQgLShiYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSkgZnJvbSBiYXRjaCBwdHIKKyAqICAg W0luZGV4U2NhbkJhdGNoRGF0YV0gICAgICA8LSB0aGUgcmV0dXJuZWQgcG9pbnRlcgorICogICBb aXRlbXNbbWF4aXRlbXNiYXRjaF1dCisgKiAgIFt0YWJsZSBBTSB0cmFpbGluZyBkYXRhXSAgPC0g ZS5nLiBwZXItaXRlbSB2aXNpYmlsaXR5IGZsYWdzCisgKiAgIFtjdXJyVHVwbGVzIHdvcmtzcGFj ZV0gICAgPC0gc2l6ZWQgYnkgaW5kZXggQU0gKGJhdGNoX3R1cGxlc193b3Jrc3BhY2UpCisgKgor ICogVGhlIEFNLXNwZWNpZmljIG9wYXF1ZSBhcmVhcyBhcmUgYWNjZXNzZWQgdmlhIGFjY2Vzc29y IGZ1bmN0aW9ucyBkZWZpbmVkIGJ5CisgKiBlYWNoIHRhYmxlIEFNIGFuZCBpbmRleCBBTSB0aGF0 IHN1cHBvcnRzIHRoZSBiYXRjaCBpbnRlcmZhY2VzLgorICovCit0eXBlZGVmIHN0cnVjdCBJbmRl eFNjYW5CYXRjaERhdGEKK3sKKwlYTG9nUmVjUHRyCWxzbjsJCQkvKiBpbmRleCBwYWdlJ3MgTFNO ICovCisKKwkvKiBzY2FuIGRpcmVjdGlvbiB3aGVuIHRoZSBpbmRleCBwYWdlIHdhcyByZWFkICov CisJU2NhbkRpcmVjdGlvbiBkaXI7CisKKwkvKgorCSAqIGtub3duRW5kQmFja3dhcmQgYW5kIGtu b3duRW5kRm9yd2FyZCBhcmUgc2V0IGJ5IHRoZSB0YWJsZSBBTSB0bworCSAqIGluZGljYXRlIHRo YXQgdGhpcyBiYXRjaCBpcyB0aGUgbGFzdCBvbmUgd2l0aCBtYXRjaGluZyBpdGVtcyBpbiB0aGUK KwkgKiByZWxldmFudCBzY2FuIGRpcmVjdGlvbi4gIFdoZW4gYW1nZXRiYXRjaCByZXR1cm5zIE5V TEwgZm9yIGEgZ2l2ZW4KKwkgKiBkaXJlY3Rpb24sIHRoZSB0YWJsZSBBTSBzZXRzIHRoZSBjb3Jy ZXNwb25kaW5nIGZsYWcgb24gdGhlIHByaW9yYmF0Y2gKKwkgKiB0aGF0IHdhcyBwYXNzZWQgdG8g dGhhdCBjYWxsLiAgV2UgY2Fubm90IGtub3cgdGhpcyB3aGVuIGEgYmF0Y2ggaXMKKwkgKiBmaXJz dCByZXR1cm5lZCBieSBhbWdldGJhdGNoOyBpdCBvbmx5IGJlY29tZXMgYXBwYXJlbnQgd2hlbiB3 ZSB0cnkgYW5kCisJICogZmFpbCB0byBjb250aW51ZSB0aGUgc2NhbiBwYXN0IGl0LgorCSAqCisJ ICogVGhpcyBhbGxvd3MgdGFibGUgQU1zIHRvIGF2b2lkIHJlZHVuZGFudCBhbWdldGJhdGNoIGNh bGxzIHdpdGggdGhlIHNhbWUKKwkgKiBwcmlvcmJhdGNoIC0tIHRoZSBpbmRleCBBTSBtaWdodCBu ZWVkIHRvIHJlYWQgYWRkaXRpb25hbCBpbmRleCBwYWdlcyB0bworCSAqIGRldGVybWluZSB0aGVy ZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBiZXlvbmQgY2FsbGVyJ3MgcHJpb3JiYXRjaC4K KwkgKi8KKwlib29sCQlrbm93bkVuZEJhY2t3YXJkOworCWJvb2wJCWtub3duRW5kRm9yd2FyZDsK KworCS8qCisJICogTWF0Y2hpbmcgaXRlbXMgc3RhdGUgZm9yIHRoaXMgYmF0Y2guICBPdXRwdXQg YnkgaW5kZXggQU0gZm9yIHRhYmxlIEFNLgorCSAqCisJICogVGhlIGl0ZW1zIGFycmF5IGlzIGFs d2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgYnkgaW5jcmVhc2luZworCSAqIGluZGV4 b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgZm9yIGlu ZGV4IEFNcworCSAqIHRvIGZpbGwgdGhlIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0 IGF0IHRoZSBsYXN0IGl0ZW0gc2xvdCBhbmQKKwkgKiBmaWxsIGRvd253YXJkcy4gIFRoaXMgaXMg d2h5IHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhCisJICogbGFzdC12YWxp ZC1lbnRyeSBjb3VudGVyLgorCSAqCisJICogTm90ZTogdGhlc2UgYXJlIHNpZ25lZCBiZWNhdXNl IGl0J3Mgc29tZXRpbWVzIGNvbnZlbmllbnQgdG8gdXNlIC0xIHRvCisJICogcmVwcmVzZW50IGFu IG91dC1vZi1ib3VuZHMgc3BhY2UganVzdCBiZWZvcmUgZmlyc3RJdGVtICh3aGVuIGl0J3MgMCku CisJICovCisJaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNb XSAqLworCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICov CisKKwkvKiBpbmZvIGFib3V0IGRlYWQgaXRlbXMgaWYgYW55IChkZWFkSXRlbXMgaXMgTlVMTCBp ZiBuZXZlciB1c2VkKSAqLworCWludAkJCW51bURlYWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5 IHN0b3JlZCBpdGVtcyAqLworCWludAkJICAgKmRlYWRJdGVtczsJCS8qIGluZGV4ZXMgb2YgZGVh ZCBpdGVtcyAqLworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2Fu LCB0aGlzIGlzIHRoZSB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZQorCSAqIGZvciB0aGUgbWF0Y2hp bmcgdHVwbGVzICh0dXBsZXMgcmVmZXJlbmNlZCBieSBpdGVtc1tdKS4gIFRoZSB3b3Jrc3BhY2UK KwkgKiBzaXplIGlzIGRldGVybWluZWQgYnkgdGhlIGluZGV4IEFNIChiYXRjaF90dXBsZXNfd29y a3NwYWNlKS4KKwkgKgorCSAqIGN1cnJUdXBsZXMgcG9pbnRzIGludG8gdGhlIHRyYWlsaW5nIHBv cnRpb24gb2YgdGhpcyBhbGxvY2F0aW9uLCBwYXN0CisJICogaXRlbXNbXSBhbmQgYW55IHRhYmxl IEFNIHRyYWlsaW5nIGRhdGEuICBJdCBpcyBOVUxMIGZvciBwbGFpbiBpbmRleAorCSAqIHNjYW5z LgorCSAqLworCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBpdGVt c1tdICovCisJQmF0Y2hNYXRjaGluZ0l0ZW0gaXRlbXNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsg LyogbWF0Y2hpbmcgaXRlbXMgKi8KK30gSW5kZXhTY2FuQmF0Y2hEYXRhOworCit0eXBlZGVmIHN0 cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOworCisvKgorICogTWF4aW11 bSBudW1iZXIgb2YgYmF0Y2hlcyAobGVhZiBwYWdlcykgd2UgY2FuIGtlZXAgaW4gbWVtb3J5LiAg V2UgbmVlZCBhCisgKiBtaW5pbXVtIG9mIHR3bywgc2luY2Ugd2UnbGwgb25seSBjb25zaWRlciBy ZWxlYXNpbmcgb25lIGJhdGNoIHdoZW4gYW5vdGhlcgorICogaXMgcmVhZC4KKyAqCisgKiBUaGUg Y3VycmVudCBtYXhpbXVtIG9mIDY0IGJhdGNoZXMgaXMgc29tZXdoYXQgb2YgYW4gYXJiaXRyYXJ5 IGxpbWl0LiAgVmVyeQorICogZmV3IHNjYW5zIGV2ZXIgZ2V0IG5lYXIgdG8gdGhpcyBsaW1pdCBp biBwcmFjdGljZS4KKyAqLworI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQk2NAorI2Rl ZmluZSBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgorCisvKgorICogU3RhdGUgdXNlZCBieSB0 YWJsZSBBTXMgdG8gbWFuYWdlIGFuIGluZGV4IHNjYW4gdGhhdCB1c2VzIHRoZSBhbWdldGJhdGNo CisgKiBpbnRlcmZhY2UuICBTY2FucyB1c2UgYSByaW5nIGJ1ZmZlciBvZiBiYXRjaGVzIHJldHVy bmVkIGJ5IGFtZ2V0YmF0Y2guCisgKgorICogQmF0Y2hlcyBhcmUga2VwdCBpbiB0aGUgb3JkZXIg dGhhdCB0aGV5IHdlcmUgcmV0dXJuZWQgaW4gYnkgYW1nZXRiYXRjaCwKKyAqIHNpbmNlIHRoYXQg aXMgdGhlIHNhbWUgb3JkZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgd2lsbCByZXR1 cm4KKyAqIG1hdGNoZXMgaW4uICBIb3dldmVyLCB0YWJsZSBBTXMgYXJlIGZyZWUgdG8gZmV0Y2gg dGFibGUgdHVwbGVzIGluIHdoYXRldmVyCisgKiBvcmRlciBpcyBtb3N0IGNvbnZlbmllbnQvZWZm aWNpZW50IC0tIHByb3ZpZGVkIHRoYXQgc3VjaCByZW9yZGVyaW5nIGNhbm5vdAorICogYWZmZWN0 IHRoZSBvcmRlciB0aGF0IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBsYXRlciByZXR1cm5zIHR1 cGxlcyBpbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nQnVmZmVyCit7CisJLyogY3Vy cmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCisJQmF0Y2hSaW5nSXRlbVBv cyBzY2FuUG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3Mg bWFya1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCisKKwlJbmRleFNjYW5CYXRjaCBt YXJrQmF0Y2g7CisKKwkvKgorCSAqIGhlYWRCYXRjaCBpcyBhbiBpbmRleCB0byB0aGUgZWFybGll c3Qgc3RpbGwtdmFsaWQgYmF0Y2ggaW4gJ2JhdGNoZXMnLgorCSAqIEluIHByYWN0aWNlIHRoaXMg bXVzdCBiZSB0aGUgc2NhbidzIGN1cnJlbnQgc2NhblBvcyBiYXRjaCAoc2NhbkJhdGNoKS4KKwkg Ki8KKwl1aW50OAkJaGVhZEJhdGNoOworCisJLyoKKwkgKiBuZXh0QmF0Y2ggaXMgYW4gaW5kZXgg dG8gdGhlIG5leHQgZW1wdHkgYmF0Y2ggc2xvdCBpbiAnYmF0Y2hlcycuICBUaGlzCisJICogaXMg b25seSBhY3R1YWxseSB1c2FibGUgd2hlbiB0aGUgc2NhbiBpcyAhaW5kZXhfc2Nhbl9iYXRjaF9m dWxsKCkuCisJICovCisJdWludDgJCW5leHRCYXRjaDsKKworCS8qCisJICogU2hvdWxkIGluZGV4 YW1fdXRpbF9iYXRjaF9yZWxlYXNlIHNhdmUgY2FsbGVyJ3MgYmF0Y2ggaW4gY2FjaGVbXT8KKwkg Ki8KKwlib29sCQlkb25lOworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gY2FjaGVkIHJlY3lj bGFibGUgYmF0Y2hlcyAqLworCUluZGV4U2NhbkJhdGNoIGNhY2hlW0lOREVYX1NDQU5fQ0FDSEVf QkFUQ0hFU107CisKKwkvKiBBcnJheSBvZiBwb2ludGVycyB0byByaW5nIGJ1ZmZlciBiYXRjaGVz ICovCisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2hlc1tJTkRFWF9TQ0FOX01BWF9CQVRDSEVTXTsKKwor fSBCYXRjaFJpbmdCdWZmZXI7CisKIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb247CiAK IC8qCkBAIC0xNDEsNiArMzEyLDIwIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRh CiAJaW50CQkJbnVtYmVyT2ZPcmRlckJ5czsJLyogbnVtYmVyIG9mIG9yZGVyaW5nIG9wZXJhdG9y cyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqa2V5RGF0YTsJLyogYXJyYXkgb2YgaW5kZXggcXVh bGlmaWVyIGRlc2NyaXB0b3JzICovCiAJc3RydWN0IFNjYW5LZXlEYXRhICpvcmRlckJ5RGF0YTsJ LyogYXJyYXkgb2Ygb3JkZXJpbmcgb3AgZGVzY3JpcHRvcnMgKi8KKworCS8qIGluZGV4IGFjY2Vz cyBtZXRob2QncyBwcml2YXRlIHN0YXRlICovCisJdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vz cy1tZXRob2Qtc3BlY2lmaWMgaW5mbyAqLworCisJLyogdGFibGUgYWNjZXNzIG1ldGhvZCdzIHBy aXZhdGUgYW1nZXRiYXRjaCBzdGF0ZSAqLworCUJhdGNoUmluZ0J1ZmZlciBiYXRjaHJpbmdidWY7 CS8qIGFtZ2V0YmF0Y2ggcmVsYXRlZCBzdGF0ZSAqLworCisJYm9vbAkJdXNlYmF0Y2hyaW5nOwkv KiBzY2FuIHVzZXMgYW1nZXRiYXRjaC9iYXRjaHJpbmdidWY/ICovCisJYm9vbAkJYmF0Y2hJbW1l ZGlhdGVSZWxlYXNlOwkvKiBBTSByZWxlYXNlcyBiYXRjaCByZXNvdXJjZXMgaW4KKwkJCQkJCQkJ CQkgKiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrPyAqLworCisJLyogQ2FjaGVkIGJhdGNoIGZv ciBhbWdldGJpdG1hcCBjYWxsZXJzIChhdm9pZHMgcmVwZWF0ZWQgYWxsb2MvZnJlZSkgKi8KKwlJ bmRleFNjYW5CYXRjaCB4c19iaXRtYXBfYmF0Y2g7CisKIAlib29sCQl4c193YW50X2l0dXA7CS8q IGNhbGxlciByZXF1ZXN0cyBpbmRleCB0dXBsZXMgKi8KIAlib29sCQl4c190ZW1wX3NuYXA7CS8q IHVucmVnaXN0ZXIgc25hcHNob3QgYXQgc2NhbiBlbmQ/ICovCiAKQEAgLTE0OSw5ICszMzQsOCBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWJvb2wJCWlnbm9yZV9raWxsZWRf dHVwbGVzOwkvKiBkbyBub3QgcmV0dXJuIGtpbGxlZCBlbnRyaWVzICovCiAJYm9vbAkJeGFjdFN0 YXJ0ZWRJblJlY292ZXJ5OwkvKiBwcmV2ZW50cyBraWxsaW5nL3NlZWluZyBraWxsZWQKIAkJCQkJ CQkJCQkgKiB0dXBsZXMgKi8KLQotCS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0 YXRlICovCi0Jdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5m byAqLworCS8qIHhzX3NuYXBzaG90IHVzZXMgYW4gTVZDQyBzbmFwc2hvdD8gKi8KKwlib29sCQlN VkNDU2NhbjsKIAogCS8qCiAJICogSW5zdHJ1bWVudGF0aW9uIGNvdW50ZXJzIG1haW50YWluZWQg YnkgYWxsIGluZGV4IEFNcyBkdXJpbmcgYm90aApAQCAtMTYwLDEwICszNDQsMTAgQEAgdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0 aW9uICppbnN0cnVtZW50OwogCiAJLyoKLQkgKiBJbiBhbiBpbmRleC1vbmx5IHNjYW4sIGEgc3Vj Y2Vzc2Z1bCBhbWdldHR1cGxlIGNhbGwgbXVzdCBmaWxsIGVpdGhlcgotCSAqIHhzX2l0dXAgKGFu ZCB4c19pdHVwZGVzYykgb3IgeHNfaGl0dXAgKGFuZCB4c19oaXR1cGRlc2MpIHRvIHByb3ZpZGUg dGhlCi0JICogZGF0YSByZXR1cm5lZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBmaWxsIGJvdGgsIGlu IHdoaWNoIGNhc2UgdGhlIGhlYXAKLQkgKiBmb3JtYXQgd2lsbCBiZSB1c2VkLgorCSAqIEluIGFu IGluZGV4LW9ubHkgc2NhbiwgYSBzdWNjZXNzZnVsIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBj YWxsIG11c3QKKwkgKiBmaWxsIGVpdGhlciB4c19pdHVwIChhbmQgeHNfaXR1cGRlc2MpIG9yIHhz X2hpdHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0bworCSAqIHByb3ZpZGUgdGhlIGRhdGEgcmV0dXJu ZWQgYnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaCBjYXNlCisJICogdGhl IGhlYXAgZm9ybWF0IHdpbGwgYmUgdXNlZC4KIAkgKi8KIAlJbmRleFR1cGxlCXhzX2l0dXA7CQkv KiBpbmRleCB0dXBsZSByZXR1cm5lZCBieSBBTSAqLwogCXN0cnVjdCBUdXBsZURlc2NEYXRhICp4 c19pdHVwZGVzYzsJLyogcm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2l0dXAgKi8KQEAgLTE3Niw2 ICszNjAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlJbmRleEZldGNo VGFibGVEYXRhICp4c19oZWFwZmV0Y2g7CiAKIAlib29sCQl4c19yZWNoZWNrOwkJLyogVCBtZWFu cyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8KKwl1aW50MTYJCW1heGl0ZW1zYmF0Y2g7 CS8qIHNldCBieSBhbWJlZ2luc2NhbiB3aGVuIGFtZ2V0YmF0Y2ggdXNlZCAqLworCisJLyogUGVy LWJhdGNoIG9wYXF1ZSBhcmVhIHNpemVzLCBzZXQgYnkgaW5kZXggQU0gaW4gYW1iZWdpbnNjYW4g Ki8KKwl1aW50MTYJCWJhdGNoX2luZGV4X29wYXF1ZV9zaXplOwkvKiBNQVhBTElHTidkIGluZGV4 IEFNIG9wYXF1ZSBzaXplICovCisJdWludDE2CQliYXRjaF90dXBsZXNfd29ya3NwYWNlOyAvKiBj dXJyVHVwbGVzIHdvcmtzcGFjZSBzaXplICovCisKKwkvKiBDb21wdXRlZCBvZmZzZXQgZnJvbSBi YXRjaCBwb2ludGVyIHRvIHRhYmxlIEFNIG9wYXF1ZSAoaW5jbHVkZXMgYm90aCkgKi8KKwl1aW50 MTYJCWJhdGNoX3RhYmxlX29mZnNldDsKIAogCS8qCiAJICogV2hlbiBmZXRjaGluZyB3aXRoIGFu IG9yZGVyaW5nIG9wZXJhdG9yLCB0aGUgdmFsdWVzIG9mIHRoZSBPUkRFUiBCWQpAQCAtMjE1LDQg KzQwNywxMjQgQEAgdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhCiAJc3RydWN0IFR1cGxl VGFibGVTbG90ICpzbG90OwogfSBTeXNTY2FuRGVzY0RhdGE7CiAKKy8qCisgKiBSZXR1cm4gdGhl IHRydWUgYWxsb2NhdGlvbiBiYXNlIG9mIGEgYmF0Y2ggKGFjY291bnRpbmcgZm9yIEFNIG9wYXF1 ZSBhcmVhcworICogc3RvcmVkIGJlZm9yZSB0aGUgSW5kZXhTY2FuQmF0Y2hEYXRhIHBvaW50ZXIp LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorYmF0Y2hfYWxsb2NfYmFzZShJbmRleFNjYW5C YXRjaCBiYXRjaCwgSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuIChjaGFyICop IGJhdGNoIC0gc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0OworfQorCisvKgorICogQ291bnQgaG93 IG1hbnkgYmF0Y2hlcyBhcmUgY3VycmVudGx5IGxvYWRlZCBpbiB0aGUgcmluZyBidWZmZXIuCisg Ki8KK3N0YXRpYyBpbmxpbmUgdWludDgKK2luZGV4X3NjYW5fYmF0Y2hfY291bnQoSW5kZXhTY2Fu RGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuICh1aW50OCkgKHNjYW4tPmJhdGNocmluZ2J1Zi5u ZXh0QmF0Y2ggLQorCQkJCQlzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoKTsKK30KKworLyoK KyAqIERpZCB3ZSBhbHJlYWR5IGxvYWQgYmF0Y2ggd2l0aCB0aGUgcmVxdWVzdGVkIGluZGV4Pwor ICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2luZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKEluZGV4U2Nh bkRlc2NEYXRhICpzY2FuLCB1aW50OCBpZHgpCit7CisJcmV0dXJuIChpbnQ4KSAoaWR4IC0gc2Nh bi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCkgPj0gMCAmJgorCQkoaW50OCkgKGlkeCAtIHNjYW4t PmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2gpIDwgMDsKK30KKworLyoKKyAqIEhhdmUgd2UgbG9hZGVk IHRoZSBtYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzPworICovCitzdGF0aWMgaW5saW5lIGJvb2wK K2luZGV4X3NjYW5fYmF0Y2hfZnVsbChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbikKK3sKKwlyZXR1 cm4gaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVT OworfQorCisvKgorICogUmV0dXJuIGJhdGNoIGZvciB0aGUgcHJvdmlkZWQgaW5kZXguCisgKi8K K3N0YXRpYyBpbmxpbmUgSW5kZXhTY2FuQmF0Y2gKK2luZGV4X3NjYW5fYmF0Y2goSW5kZXhTY2Fu RGVzY0RhdGEgKnNjYW4sIHVpbnQ4IGlkeCkKK3sKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9s b2FkZWQoc2NhbiwgaWR4KSk7CisKKwlyZXR1cm4gc2Nhbi0+YmF0Y2hyaW5nYnVmLmJhdGNoZXNb aWR4ICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKV07Cit9CisKKy8qCisgKiBBcHBlbmQg Z2l2ZW4gYmF0Y2ggdG8gc2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyLgorICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK2luZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKEluZGV4U2NhbkRlc2NEYXRhICpzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKnJpbmdidWYgPSAm c2Nhbi0+YmF0Y2hyaW5nYnVmOworCXVpbnQ4CQluZXh0QmF0Y2ggPSByaW5nYnVmLT5uZXh0QmF0 Y2g7CisKKwlyaW5nYnVmLT5iYXRjaGVzW25leHRCYXRjaCAmIChJTkRFWF9TQ0FOX01BWF9CQVRD SEVTIC0gMSldID0gYmF0Y2g7CisJcmluZ2J1Zi0+bmV4dEJhdGNoKys7Cit9CisKKy8qCisgKiBB ZHZhbmNlIHBvc2l0aW9uIHRvIGl0cyBuZXh0IGl0ZW0gaW4gdGhlIGJhdGNoLgorICoKKyAqIEFk dmFuY2UgdG8gdGhlIG5leHQgaXRlbSB3aXRoaW4gdGhlIHByb3ZpZGVkIGJhdGNoIChvciB0byB0 aGUgcHJldmlvdXMgaXRlbSwKKyAqIHdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzKS4KKyAqCisgKiBS ZXR1cm5zIHRydWUgaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlIGFkdmFuY2VkLiAgUmV0dXJucyBm YWxzZSB3aGVuIHRoZXJlCisgKiBhcmUgbm8gbW9yZSBpdGVtcyBpbiB0aGUgYmF0Y2ggaW4gdGhl IGdpdmVuIGRpcmVjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX3Bv c19hZHZhbmNlKFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgICBJbmRleFNjYW5CYXRj aCBiYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUFzc2VydChwb3MtPnZhbGlkKTsK KworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJeworCQlpZiAoKytw b3MtPml0ZW0gPiBiYXRjaC0+bGFzdEl0ZW0pCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UJ CQkJCQkvKiBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZCAqLworCXsKKwkJaWYgKC0tcG9zLT5pdGVt IDwgYmF0Y2gtPmZpcnN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBBZHZhbmNl ZCB3aXRoaW4gYmF0Y2ggKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEFkdmFuY2UgYmF0 Y2ggcG9zaXRpb24gdG8gdGhlIHN0YXJ0IG9mIGl0cyBuZXcgYmF0Y2guCisgKgorICogU2V0cyB0 aGUgZ2l2ZW4gcG9zaXRpb24gdG8gdGhlIGZpc3QgaXRlbSBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJl Y3Rpb24gKG9yIHRvCisgKiB0aGUgbGFzdCBpdGVtLCB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcyku ICAgQWxzbyBhZHZhbmNlcy9pbmNyZW1lbnRzIGJhdGNoCisgKiBvZmZzZXQgZnJvbSBwb3NpdGlv biBzdWNoIHRoYXQgaXQgcG9pbnRzIHRvIG5ld0JhdGNoRm9yUG9zLgorICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK2luZGV4X3NjYW5fcG9zX25leHRiYXRjaChTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKKwkJCQkJCSBJbmRleFNjYW5CYXRjaCBuZXdCYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9z KQoreworCUFzc2VydChuZXdCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisKKwkvKiBJbmNyZW1l bnQgYmF0Y2ggKG9mdGVuIHdyYXBzIHVpbnQ4IGJhdGNoIGZpZWxkKSAqLworCWlmIChwb3MtPnZh bGlkKQorCQlwb3MtPmJhdGNoKys7CisJZWxzZQorCQlwb3MtPmJhdGNoID0gMDsKKworCXBvcy0+ dmFsaWQgPSB0cnVlOworCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkK KwkJcG9zLT5pdGVtID0gbmV3QmF0Y2gtPmZpcnN0SXRlbTsKKwllbHNlCisJCXBvcy0+aXRlbSA9 IG5ld0JhdGNoLT5sYXN0SXRlbTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFJFTFNDQU5fSCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmgKaW5kZXggMDYwODQ3NTIyLi4zMDExZjRlZGEgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaApAQCAtNDMzLDExICs0MzMsNDIgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUK IAkgKi8KIAl2b2lkCQkoKmluZGV4X2ZldGNoX2VuZCkgKHN0cnVjdCBJbmRleEZldGNoVGFibGVE YXRhICpkYXRhKTsKIAorCS8qCisJICogSW5pdGlhbGl6ZSB0YWJsZSBBTSdzIHBlci1iYXRjaCBv cGFxdWUgYXJlYSB3aXRoaW4gYSBiYXRjaCBhbGxvY2F0aW9uLgorCSAqCisJICogQ2FsbGVkIGJ5 IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyBmb3IgZWFjaCBuZXcgb3IgcmVjeWNsZWQgYmF0Y2gu CisJICogVGFibGUgQU1zIHNob3VsZCBzZXQgdXAgaXRzIG9wYXF1ZSBhcmVhIChhdCBhIG5lZ2F0 aXZlIG9mZnNldCBmcm9tIHRoZQorCSAqIGJhdGNoIHBvaW50ZXIpIGFuZCBhbnkgdHJhaWxpbmcg cGVyLWl0ZW0gZGF0YSAoZS5nLiB2aXNpYmlsaXR5IGZsYWdzKS4KKwkgKgorCSAqICduZXdfYWxs b2MnIGlzIHRydWUgZm9yIGZyZXNobHkgcGFsbG9jJ2QgYmF0Y2hlcywgZmFsc2UgZm9yIGJhdGNo ZXMKKwkgKiByZWN5Y2xlZCBmcm9tIHRoZSBjYWNoZS4KKwkgKi8KKwl2b2lkCQkoKmluZGV4X2Jh dGNoX2luaXQpIChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJ CQkJCQkJIGJvb2wgbmV3X2FsbG9jKTsKKworCS8qCisJICogRmV0Y2ggdGhlIG5leHQgdHVwbGUg ZnJvbSBhbiBpbmRleCBzY2FuIGludG8gc2xvdCwgc2Nhbm5pbmcgaW4gdGhlCisJICogc3BlY2lm aWVkIGRpcmVjdGlvbiwgYW5kIHJldHVybiB0cnVlIGlmIGEgdHVwbGUgd2FzIGZvdW5kLCBmYWxz ZQorCSAqIG90aGVyd2lzZS4KKwkgKgorCSAqIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRoZSB0YWJs ZSBBTSB0byBkaXJlY3RseSBtYW5hZ2UgdGhlIHNjYW4gcHJvY2VzcywKKwkgKiBpbmNsdWRpbmcg aW50ZXJmYWNpbmcgd2l0aCB0aGUgaW5kZXggQU0uIFRoZSBjYWxsZXIgc2ltcGx5IHNwZWNpZmll cworCSAqIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNjYW47IHRoZSB0YWJsZSBBTSB0YWtlcyBjYXJl IG9mIHJldHJpZXZpbmcgVElEcworCSAqIGZyb20gdGhlIGluZGV4LCBwZXJmb3JtaW5nIHZpc2li aWxpdHkgY2hlY2tzLCBhbmQgcmV0dXJuaW5nIHR1cGxlcyBpbgorCSAqIHRoZSBzbG90LgorCSAq LworCWJvb2wJCSgqaW5kZXhfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgICBUdXBsZVRhYmxl U2xvdCAqc2xvdCk7CisKIAkvKgogCSAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3Rg LCBhZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVzdAogCSAqIGFjY29yZGluZyB0byBgc25hcHNo b3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICog dGVzdCwgcmV0dXJuIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KIAkgKgorCSAqIFRoaXMgaXMgYSBs b3dlci1sZXZlbCBjYWxsYmFjayB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxlci4KKwkg KiBDYWxsZXJzIHNob3VsZCBmYXZvciB0aGUgaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIHdo ZW5ldmVyIHBvc3NpYmxlLgorCSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNl c3NhcmlseSB1cGRhdGUgaW5kZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5zIGRvIG5vdCBj aGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgogCSAq IHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0 aWQgcG9pbnRzIHRvIGFuCkBAIC0xMjA3LDYgKzEyMzgsMzcgQEAgdGFibGVfaW5kZXhfZmV0Y2hf ZW5kKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCXNjYW4tPnJlbC0+cmRfdGFi bGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOwogfQogCisvKgorICogSW5pdGlhbGl6ZSB0YWJs ZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSB3aXRoaW4gYSBiYXRjaCBhbGxvY2F0aW9uLgor ICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MgZm9yIGVhY2ggbmV3IG9y IHJlY3ljbGVkIGJhdGNoLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2luZGV4X2Jh dGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgYm9vbCBu ZXdfYWxsb2MpCit7CisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9iYXRj aF9pbml0KHNjYW4sIGJhdGNoLCBuZXdfYWxsb2MpOworfQorCisvKgorICogRmV0Y2ggdGhlIG5l eHQgdHVwbGUgZnJvbSBhbiBpbmRleCBzY2FuIGludG8gYHNsb3RgLCBzY2FubmluZyBpbiB0aGUK KyAqIHNwZWNpZmllZCBkaXJlY3Rpb24uIFJldHVybnMgdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3Vu ZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBpbmRleCBzY2FuIHNob3VsZCBoYXZlIGJl ZW4gc3RhcnRlZCB2aWEgdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oKS4KKyAqIENhbGxlcnMgbXVz dCBjaGVjayBzY2FuLT54c19yZWNoZWNrIGFuZCByZWNoZWNrIHNjYW4ga2V5cyBpZiByZXF1aXJl ZC4KKyAqCisgKiBJbmRleC1vbmx5IHNjYW4gY2FsbGVycyAodGhhdCBwYXNzIHhzX3dhbnRfaXR1 cD10cnVlIHRvIGluZGV4X2JlZ2luc2NhbikKKyAqIGNhbiBjb25zdW1lIGluZGV4IHR1cGxlIHJl c3VsdHMgYnkgZXhhbWluaW5nIEluZGV4U2NhbkRlc2NEYXRhIGZpZWxkcyBzdWNoCisgKiBhcyB4 c19pdHVwIGFuZCB4c19oaXR1cC4gIFRoZSB0YWJsZSBBTSB3b24ndCB1c3VhbGx5IGZldGNoIGEg aGVhcCB0dXBsZQorICogaW50byB0aGUgcHJvdmlkZWQgc2xvdCBpbiB0aGUgY2FzZSBvZiB4c193 YW50X2l0dXA9dHJ1ZSBjYWxsZXJzLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3RhYmxlX2lu ZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIGlzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKKwkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlyZXR1cm4gaXNjYW4tPmhl YXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZ2V0bmV4dF9zbG90KGlzY2FuLAorCQkJCQkJ CQkJCQkJCQkJICAgZGlyZWN0aW9uLCBzbG90KTsKK30KKwogLyoKICAqIEZldGNoZXMsIGFzIHBh cnQgb2YgYW4gaW5kZXggc2NhbiwgdHVwbGUgYXQgYHRpZGAgaW50byBgc2xvdGAsIGFmdGVyIGRv aW5nCiAgKiBhIHZpc2liaWxpdHkgdGVzdCBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0 dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZApAQCAtMTIzMCw2ICsxMjkyLDkgQEAgdGFibGVfaW5k ZXhfZmV0Y2hfZW5kKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogICogZW50cnkg KGxpa2UgaGVhcCdzIEhPVCkuIFdoZXJlYXMgdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24o KSBvbmx5CiAgKiBldmFsdWF0ZXMgdGhlIHR1cGxlIGV4YWN0bHkgYXQgYHRpZGAuIE91dHNpZGUg b2YgaW5kZXggZW50cnkgLT50YWJsZSB0dXBsZQogICogbG9va3VwcywgdGFibGVfdHVwbGVfZmV0 Y2hfcm93X3ZlcnNpb24oKSBpcyB3aGF0J3MgdXN1YWxseSBuZWVkZWQuCisgKgorICogVGhpcyBp cyBhIGxvd2VyLWxldmVsIGludGVyZmFjZSB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxl ci4gIENhbGxlcnMKKyAqIHNob3VsZCBmYXZvciB0aGUgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 IGludGVyZmFjZSB3aGVuZXZlciBwb3NzaWJsZS4KICAqLwogc3RhdGljIGlubGluZSBib29sCiB0 YWJsZV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oIGIvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKaW5kZXggODg0N2Q3Zjk0Li5iNWI4 ZjUwOWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCkBAIC00OCw2ICs0 OCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24KIHsKIAkvKiBJ bmRleCBzZWFyY2ggY291bnQgKGluY3JlbWVudGVkIHdpdGggcGdzdGF0X2NvdW50X2luZGV4X3Nj YW4gY2FsbCkgKi8KIAl1aW50NjQJCW5zZWFyY2hlczsKKworCS8qCisJICogaGVhcCBibG9ja3Mg ZmV0Y2hlZCBjb3VudHMgKGluY3JlbWVudGVkIGJ5IGluZGV4X2dldG5leHRfc2xvdCBjYWxscwor CSAqIHdpdGhpbiB0YWJsZSBBTXMsIHRob3VnaCBvbmx5IGR1cmluZyBpbmRleC1vbmx5IHNjYW5z KQorCSAqLworCXVpbnQ2NAkJbmhlYXBmZXRjaGVzOwogfSBJbmRleFNjYW5JbnN0cnVtZW50YXRp b247CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDUxNzgyZDFmYy4uN2MxYjQyN2ZiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTc1NCw3ICsxNzU0LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuU3RhdGUKICAqCQlJbnN0cnVtZW50CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3Ry dW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAgIHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50 YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKICAqCQlUYWJsZVNsb3QJCSAgIHNsb3QgZm9yIGhvbGRp bmcgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgdGFibGUKLSAqCQlWTUJ1ZmZlcgkJICAgYnVmZmVy IGluIHVzZSBmb3IgdmlzaWJpbGl0eSBtYXAgdGVzdGluZywgaWYgYW55CiAgKgkJUHNjYW5MZW4J CSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXgtb25seSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1l Q1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBuYW1lIHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5B TUVEQVRBTEVOCiAgKgkJTmFtZUNTdHJpbmdDb3VudCAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0 aGUgTmFtZUNTdHJpbmdBdHROdW1zIGFycmF5CkBAIC0xNzc3LDcgKzE3NzYsNiBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlv c3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hh cmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7Ci0JQnVmZmVyCQlpb3Nz X1ZNQnVmZmVyOwogCVNpemUJCWlvc3NfUHNjYW5MZW47CiAJQXR0ck51bWJlciAqaW9zc19OYW1l Q1N0cmluZ0F0dE51bXM7CiAJaW50CQkJaW9zc19OYW1lQ1N0cmluZ0NvdW50OwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaAppbmRleCAyNzc1OGVjMTYuLjA2NjFmYzAzZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK QEAgLTE0MjUsMTIgKzE0MjUsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9v bAkJYW1vcHRpb25hbGtleTsKIAlib29sCQlhbXNlYXJjaGFycmF5OwogCWJvb2wJCWFtc2VhcmNo bnVsbHM7Ci0JLyogZG9lcyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlPyAqLwotCWJvb2wJ CWFtaGFzZ2V0dHVwbGU7CisJLyogZG9lcyBBTSBoYXZlIGFtZ2V0YmF0Y2ggKG9yIGdldHR1cGxl KSBpbnRlcmZhY2U/ICovCisJYm9vbAkJYW1oYXNnZXRiYXRjaDsKIAkvKiBkb2VzIEFNIGhhdmUg YW1nZXRiaXRtYXAgaW50ZXJmYWNlPyAqLwogCWJvb2wJCWFtaGFzZ2V0Yml0bWFwOwogCWJvb2wJ CWFtY2FucGFyYWxsZWw7Ci0JLyogZG9lcyBBTSBoYXZlIGFtbWFya3BvcyBpbnRlcmZhY2U/ICov CisJLyogaXMgQU0gcHJlcGFyZWQgZm9yIHVzIHRvIHJlc3RvcmUgYSBtYXJrPyAqLwogCWJvb2wJ CWFtY2FubWFya3BvczsKIAkvKiBBTSdzIGNvc3QgZXN0aW1hdG9yICovCiAJLyogUmF0aGVyIHRo YW4gaW5jbHVkZSBhbWFwaS5oIGhlcmUsIHdlIGRlY2xhcmUgYW1jb3N0ZXN0aW1hdGUgbGlrZSB0 aGlzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggMTkwOWMzMjU0Li43YWQ4NDQzZWIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5NiwxMCArMjk2LDEyIEBAIGJyaW5oYW5kbGVyKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJyaW5iZWdpbnNjYW4sCiAJCS5hbXJl c2NhbiA9IGJyaW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2gg PSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXJlbGVhc2ViYXRjaCA9 IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJyaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBi cmluZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwK KwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEws CiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5V TEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwppbmRleCA2YjE0OGU2OWEuLjhmNzAzM2Q2MiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbmdldC5jCkBAIC0xOTUzLDkgKzE5NTMsOSBAQCBnaW5nZXRiaXRtYXAo SW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkgKiBpbnRvIHRoZSBtYWluIGlu ZGV4LCBhbmQgc28gd2UgbWlnaHQgdmlzaXQgaXQgYSBzZWNvbmQgdGltZSBkdXJpbmcgdGhlCiAJ ICogbWFpbiBzY2FuLiAgVGhpcyBpcyBva2F5IGJlY2F1c2Ugd2UnbGwganVzdCByZS1zZXQgdGhl IHNhbWUgYml0IGluIHRoZQogCSAqIGJpdG1hcC4gIChUaGUgcG9zc2liaWxpdHkgb2YgZHVwbGlj YXRlIHZpc2l0cyBpcyBhIG1ham9yIHJlYXNvbiB3aHkgR0lOCi0JICogY2FuJ3Qgc3VwcG9ydCB0 aGUgYW1nZXR0dXBsZSBBUEksIGhvd2V2ZXIuKSBOb3RlIHRoYXQgaXQgd291bGQgbm90IGRvCi0J ICogdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2Ug Y29uY3VycmVudAotCSAqIGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBl bnRpcmVseS4KKwkgKiBjYW4ndCBzdXBwb3J0IGVpdGhlciB0aGUgYW1nZXR0dXBsZSBvciBhbWdl dGJhdGNoIEFQSS4pIE5vdGUgdGhhdCBpdAorCSAqIHdvdWxkIG5vdCBkbyB0byBzY2FuIHRoZSBt YWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZQorCSAqIGNvbmN1cnJlbnQg Y2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5LgogCSAqLwog CXNjYW5QZW5kaW5nSW5zZXJ0KHNjYW4sIHRibSwgJm50aWRzKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYwppbmRleCBmZjkyNzI3OWMuLjBjMGU4OTVlNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51 dGlsLmMKQEAgLTgyLDEwICs4MiwxMiBAQCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CS5hbWJlZ2luc2NhbiA9IGdpbmJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lucmVzY2FuLAog CQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0 ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1yZWxlYXNlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRt YXAgPSBnaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBnaW5lbmRzY2FuLAotCQkuYW1tYXJr cG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEws CiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2Nh biA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Qu YwppbmRleCA4NTY1ZTIyNWIuLmE4OGRlMzlkNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAt MTAzLDEwICsxMDMsMTIgQEAgZ2lzdGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVn aW5zY2FuID0gZ2lzdGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lzdHJlc2NhbiwKIAkJLmFt Z2V0dHVwbGUgPSBnaXN0Z2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2ls bGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1yZWxlYXNlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRi aXRtYXAgPSBnaXN0Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2lzdGVuZHNjYW4sCi0JCS5h bW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0g TlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxs ZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaC5jCmluZGV4IGU4OGRkYjMyYS4uNWI1YzVjNmZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5j CkBAIC0xMDIsMTAgKzEwMiwxMSBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQku YW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBoYXNocmVzY2FuLAog CQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQku YW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXAs CiAJCS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5h bXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBh cmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1w YXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwppbmRleCBkN2IwNWFhMTQuLjczYWU0OTI1ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faGFuZGxlci5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dl bmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFw dG9hc3QuaCIKQEAgLTg0LDggKzg1LDEwIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxh dGlvbiByZWwpCiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBhbGxvYzBfb2JqZWN0KElu ZGV4RmV0Y2hIZWFwRGF0YSk7CiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwgPSByZWw7Ci0JaHNjYW4t PnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT54c19iYXNlLmJhdGNoX29wYXF1ZV9z aXplID0gTUFYQUxJR04oc2l6ZW9mKEhlYXBCYXRjaERhdGEpKTsKKwloc2Nhbi0+eHNfYmFzZS5i YXRjaF9wZXJfaXRlbV9zaXplID0gc2l6ZW9mKHVpbnQ4KTsgLyogdmlzSW5mbyBlbGVtZW50IHNp emUgKi8KIAloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCWhzY2FuLT54c192 bV9pdGVtcyA9IDE7CiAKIAlyZXR1cm4gJmhzY2FuLT54c19iYXNlOwogfQpAQCAtOTUsMTIgKzk4 LDE1IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2Fu KQogewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICop IHNjYW47CiAKLQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCi0JewotCQlSZWxl YXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKLQkJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVm ZmVyOwotCX0KLQloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCS8qIFJlc2Nh bnMgc2hvdWxkIGF2b2lkIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgVk0gbG9va3VwcyAqLworCWhz Y2FuLT54c192bV9pdGVtcyA9IDE7CisKKwkvKgorCSAqIERlbGliZXJhdGVseSBhdm9pZCBkcm9w cGluZyBhbnkgcGlucyBub3cgaGVsZCBpbiB4c19jYnVmIGFuZCB4c192bWJ1Zi4KKwkgKiBUaGlz IHNhdmVzIGN5Y2xlcyBkdXJpbmcgY2VydGFpbiB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucywgYW5k IGR1cmluZworCSAqIG1lcmdlIGpvaW5zIHRoYXQgZnJlcXVlbnRseSByZXN0b3JlIGEgc2F2ZWQg bWFyay4gIEl0IGNhbiBhbHNvIGF2b2lkCisJICogcmVwZWF0ZWQgcGlubmluZyBhbmQgdW5waW5u aW5nIG9mIHRoZSBzYW1lIGJ1ZmZlciBhY3Jvc3MgcmVzY2Fucy4KKwkgKi8KIH0KIAogc3RhdGlj IHZvaWQKQEAgLTEwOCwxMSArMTE0LDUzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbikKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKElu ZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOwogCi0JaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNj YW4pOworCS8qIGRyb3AgcGluIGlmIHRoZXJlJ3MgYSBwaW5uZWQgaGVhcCBwYWdlICovCisJaWYg KEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQorCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54 c19jYnVmKTsKKworCS8qIGRyb3AgcGluIGlmIHRoZXJlJ3MgYSBwaW5uZWQgdmlzaWJpbGl0eSBt YXAgcGFnZSAqLworCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZikpCisJCVJlbGVh c2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmKTsKIAogCXBmcmVlKGhzY2FuKTsKIH0KIAorLyoKKyAq IEluaXRpYWxpemUgdGhlIGhlYXAgdGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgKEhl YXBCYXRjaERhdGEpLgorICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Mg Zm9yIGVhY2ggbmV3IG9yIHJlY3ljbGVkIGJhdGNoLgorICogU2V0cyB1cCB0aGUgdmlzSW5mbyBw b2ludGVyIGZvciBpbmRleC1vbmx5IHNjYW5zLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqLworc3Rh dGljIHZvaWQKK2hlYXBhbV9pbmRleF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQlib29sIG5ld19hbGxvYykKK3sKKwlIZWFwQmF0Y2hE YXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEoYmF0Y2gsIHNjYW4pOworCisJaWYgKHNjYW4t PnhzX3dhbnRfaXR1cCkKKwl7CisJCWlmIChuZXdfYWxsb2MpCisJCXsKKwkJCS8qCisJCQkgKiBQ b2ludCB2aXNJbmZvIGludG8gdGhlIHRyYWlsaW5nIHBlci1pdGVtIGFyZWEgdGhhdCBmb2xsb3dz CisJCQkgKiBpdGVtc1tdIGluIHRoZSBiYXRjaCBhbGxvY2F0aW9uLgorCQkJICovCisJCQlTaXpl CQlpdGVtc0VuZDsKKworCQkJaXRlbXNFbmQgPSBNQVhBTElHTihvZmZzZXRvZihJbmRleFNjYW5C YXRjaERhdGEsIGl0ZW1zKSArCisJCQkJCQkJCXNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBz Y2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCWhiYXRjaC0+dmlzSW5mbyA9ICh1aW50OCAqKSAoKGNo YXIgKikgYmF0Y2ggKyBpdGVtc0VuZCk7CisJCX0KKworCQkvKiBDbGVhciB2aXNpYmlsaXR5IGZs YWdzIChuZWVkZWQgZm9yIGJvdGggbmV3IGFuZCByZWN5Y2xlZCBiYXRjaGVzKSAqLworCQltZW1z ZXQoaGJhdGNoLT52aXNJbmZvLCAwLCBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwl9CisJZWxzZQor CXsKKwkJaGJhdGNoLT52aXNJbmZvID0gTlVMTDsKKwl9Cit9CisKIHN0YXRpYyBib29sCiBoZWFw YW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJ CQkJCQkgSXRlbVBvaW50ZXIgdGlkLApAQCAtMTM0LDYgKzE4MiwxMiBAQCBoZWFwYW1faW5kZXhf ZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCS8qIFJlbWVt YmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVyIGZvciBuZXh0IHRpbWUgKi8KIAkJaHNjYW4t PnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKIAorCQkvKgorCQkgKiBE cm9wIHRoZSB4c19ibGsgcGluIGluZGVwZW5kZW50bHkgaGVsZCBvbiBieSBzbG90IChpZiBhbnkp IG5vdy4gU2VlCisJCSAqIGNvbW1lbnRzIGFyb3VuZCBFeGVjU3RvcmVQaW5uZWRCdWZmZXJIZWFw VHVwbGUgY2FsbCBiZWxvdy4KKwkJICovCisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCiAJCWlm IChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIoaHNjYW4t PnhzX2NidWYpOwogCkBAIC0xNzAsNyArMjI0LDMzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJKmNhbGxfYWdhaW4gPSAhSXNN VkNDU25hcHNob3Qoc25hcHNob3QpOwogCiAJCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9u R2V0UmVsaWQoc2Nhbi0+cmVsKTsKLQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+ YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nhbi0+eHNfY2J1Zik7CisKKwkJLyoKKwkJICogSWYgdGhp cyBpcyB0aGUgbGFzdCBUSUQgb24gdGhlIGN1cnJlbnQgaGVhcCBibG9jayB3aXRoaW4gdGhlIGJh dGNoLAorCQkgKiB0cmFuc2ZlciBvdXIgYnVmZmVyIHBpbiB0byB0aGUgc2xvdCByYXRoZXIgdGhh biBoYXZpbmcgdGhlIHNsb3QKKwkJICogaW5jcmVtZW50IHRoZSBwaW4gY291bnQuICBUaGlzIHNh dmVzIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQKKwkJICogYW5kIFJlbGVhc2VCdWZmZXIg Y2FsbHMsIHNpbmNlIHRoZSBjYWxsZXIgd291bGQganVzdCByZWxlYXNlIGl0cworCQkgKiBwaW4g b24geHNfY2J1ZiB3aGVuIHN3aXRjaGluZyB0byB0aGUgbmV4dCBibG9jayBhbnl3YXkuCisJCSAq CisJCSAqIFdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiBjYWxsX2FnYWluIGlzIGZhbHNlLCBzaW5j ZSBvdGhlcndpc2UgdGhlCisJCSAqIGNhbGxlciB3aWxsIG5lZWQgeHNfY2J1ZiB0byByZW1haW4g dmFsaWQgZm9yIHRoZSBuZXh0IGNhbGwuCisJCSAqLworCQlpZiAoaHNjYW4tPnhzX2xhc3RpbmJs b2NrICYmICEqY2FsbF9hZ2FpbikKKwkJeworCQkJRXhlY1N0b3JlUGlubmVkQnVmZmVySGVhcFR1 cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJCQkJCQkJCSAgIGhzY2FuLT54c19j YnVmKTsKKwkJCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJCWhzY2FuLT54c19i bGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwkJCS8qCisJCQkgKiBOb3RlOiB0aGUgcGluIG5v dyBvd25lZCBieSB0aGUgc2xvdCBpcyBleHBlY3RlZCB0byBiZSByZWxlYXNlZAorCQkJICogb24g dGhlIG5leHQgY2FsbCBoZXJlLCB2aWEgYW4gZXhwbGljaXQgRXhlY0NsZWFyVHVwbGUuICBUaGlz CisJCQkgKiBhdm9pZHMgY2h1cm4gaW4gdGhlIGJhY2tlbmQncyBwcml2YXRlIHJlZmNvdW50IGNh Y2hlLgorCQkJICovCisJCX0KKwkJZWxzZQorCQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZi c2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJCQkJCQkJIGhzY2FuLT54c19jYnVmKTsKIAl9 CiAJZWxzZQogCXsKQEAgLTE4MSw2ICsyNjEsNTkxIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAlyZXR1cm4gZ290X2hlYXBfdHVw bGU7CiB9CiAKKy8qCisgKiBoZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5CisgKgkJT2J0 YWluIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZm9yIGEgVElEIGZyb20gY2FsbGVyJ3MgYmF0Y2gu CisgKgorICogQ2FsbGVkIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zLiAgV2UgYWx3YXlzIGNoZWNr IHRoZSB2aXNpYmlsaXR5IG9mIGNhbGxlcidzCisgKiBpdGVtIChhbiBvZmZzZXQgaW50byBjYWxs ZXIncyBiYXRjaC0+aXRlbXNbXSBhcnJheSkuICBXZSBtaWdodCBhbHNvIHNldAorICogdmlzaWJp bGl0eSBpbmZvIGZvciBvdGhlciBpdGVtcyBmcm9tIGNhbGxlcidzIGJhdGNoIG1vcmUgcHJvYWN0 aXZlbHkgd2hlbgorICogdGhhdCBtYWtlcyBzZW5zZS4KKyAqCisgKiBXZSBrZWVwIHR3byBjb21w ZXRpbmcgY29uc2lkZXJhdGlvbnMgaW4gYmFsYW5jZSB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIg dG8KKyAqIGNoZWNrIGFkZGl0aW9uYWwgaXRlbXM6IHRoZSBuZWVkIHRvIGtlZXAgdGhlIGNvc3Qg b2YgdmlzaWJpbGl0eSBtYXAgYWNjZXNzCisgKiB1bmRlciBjb250cm9sIHdoZW4gbW9zdCBpdGVt cyB3aWxsIG5ldmVyIGJlIHJldHVybmVkIGJ5IHRoZSBzY2FuIGFueXdheQorICogKGltcG9ydGFu dCBmb3IgaW5uZXIgaW5kZXggc2NhbnMgb2YgYW50aS1qb2lucyBhbmQgc2VtaS1qb2lucyksIGFu ZCB0aGUKKyAqIG5lZWQgdG8gbm90IGhvbGQgb250byBpbmRleCBsZWFmIHBhZ2VzIGZvciB0b28g bG9uZy4KKyAqCisgKiBOb3RlIG9uIE1lbW9yeSBPcmRlcmluZyBFZmZlY3RzCisgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVz IGRvZXMgbm90IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwgYW5kCisgKiB0aGVyZWZv cmUgdGhlIHJlc3VsdCB3ZSByZWFkIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dl dmVyLCBpdAorICogY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRvIG1hdHRlci4KKyAqCisgKiBXZSBu ZWVkIHRvIGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0IGF3 YXksIGJlY2F1c2UKKyAqIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBwYWdlIGJ1 dCBub3QgdmlzaWJsZS4gIFRoZSByZWFkaW5nIG9mIHRoZQorICogVElEIGJ5IHRoaXMgc2NhbiAo dXNpbmcgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5kZXggYnVmZmVyKSBpcyBzZXJpYWxpemVkCisg KiB3aXRoIHRoZSBpbnNlcnQgb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleCAodXNpbmcgYW4gZXhj bHVzaXZlIGxvY2sgb24gdGhlCisgKiBpbmRleCBidWZmZXIpLiAgQmVjYXVzZSB0aGUgVk0gYml0 IGlzIGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBpbmRleCwKKyAqIGFuZCBsb2NraW5nL3Vu bG9ja2luZyBvZiB0aGUgaW5kZXggcGFnZSBhY3RzIGFzIGEgZnVsbCBtZW1vcnkgYmFycmllciwg d2UKKyAqIGFyZSBzdXJlIHRvIHNlZSB0aGUgY2xlYXJlZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50 bHktaW5zZXJ0ZWQgVElELgorICoKKyAqIERlbGV0ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXgg cGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhciBvdXQgdGhlIFRJRCksCisgKiBzbyB0aGUgY2xl YXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3Qgc2VyaWFsaXplZCB3aXRoIHRo aXMgdGVzdAorICogYmVsb3csIGFuZCB3ZSBtYXkgc2VlIGEgdmFsdWUgdGhhdCBpcyBzaWduaWZp Y2FudGx5IHN0YWxlLiAgSG93ZXZlciwgd2UKKyAqIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRlbGV0 ZSByaWdodCBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlCisgKiB1bnRp bCB0aGUgZGVsZXRpbmcgdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50IGVuZHMg KGlmIGl0J3Mgb3VyCisgKiB0cmFuc2FjdGlvbikuICBJbiBlaXRoZXIgY2FzZSwgdGhlIGxvY2sg b24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhhdmUgYmVlbgorICogcmVsZWFzZWQgKGFjdGluZyBhcyBh IHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFyaW5nIHRoZSBiaXQuICBBbmQgZm9yIHVzIHRvCisg KiBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcgdHJhbnNhY3Rpb24g KG1ha2luZyB0aGUgdHVwbGUKKyAqIGludmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1aXJlZCBQ cm9jQXJyYXlMb2NrIGFmdGVyIHRoYXQgdGltZSwgYWN0aW5nIGFzCisgKiBhIHJlYWQgYmFycmll ci4KKyAqCisgKiBJdCdzIHdvcnRoIGdvaW5nIHRocm91Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2 b2lkIG5lZWRpbmcgdG8gbG9jayB0aGUgVk0KKyAqIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ug c2lnbmlmaWNhbnQgY29udGVudGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBhbV9iYXRjaF9y ZXNvbHZlX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKKwkJCQkJCQkJSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEhlYXBCYXRjaERhdGEgKmhiYXRj aCwKKwkJCQkJCQkJQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlp bnQJCQlwb3NJdGVtID0gcG9zLT5pdGVtOworCWludAkJCW5vU2V0SXRlbSwKKwkJCQlzdGVwOwor CWJvb2wJCWFsbGJhdGNoaXRlbXZpc2libGU7CisJQmxvY2tOdW1iZXIgY3Vydm1oZWFwYmxrbm8g PSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJdWludDgJCWN1cnZtaGVhcGJsa2ZsYWdzID0gMDsKKwor CUFzc2VydChoYmF0Y2ggPT0gaGVhcF9iYXRjaF9kYXRhKGJhdGNoLCBzY2FuKSk7CisKKwkvKgor CSAqIFdlIGJldHRlciBzdGlsbCBoYXZlIGluZGV4IEFNIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2Nr IChnZW5lcmFsbHkgYSBwaW4KKwkgKiBvbiBpdHMgaW5kZXggcGFnZSkgaGVsZCBmb3IgdGhpcyBi YXRjaAorCSAqLworCUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVSZWxlYXNlKTsKKworCS8q IERldGVybWluZSB0aGUgcmFuZ2Ugb2YgaXRlbXMgdG8gc2V0IHZpc2liaWxpdHkgZm9yICovCisJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCW5vU2V0SXRlbSA9 IE1pbihiYXRjaC0+bGFzdEl0ZW0gKyAxLCBwb3NJdGVtICsgaHNjYW4tPnhzX3ZtX2l0ZW1zKTsK KwkJYWxsYmF0Y2hpdGVtdmlzaWJsZSA9IG5vU2V0SXRlbSA+IGJhdGNoLT5sYXN0SXRlbSAmJgor CQkJKHBvc0l0ZW0gPT0gYmF0Y2gtPmZpcnN0SXRlbSB8fAorCQkJIChoYmF0Y2gtPnZpc0luZm9b YmF0Y2gtPmZpcnN0SXRlbV0gJiBCQVRDSF9WSVNfQ0hFQ0tFRCkpOworCQlzdGVwID0gMTsKKwl9 CisJZWxzZQorCXsKKwkJbm9TZXRJdGVtID0gTWF4KGJhdGNoLT5maXJzdEl0ZW0gLSAxLCBwb3NJ dGVtIC0gaHNjYW4tPnhzX3ZtX2l0ZW1zKTsKKwkJYWxsYmF0Y2hpdGVtdmlzaWJsZSA9IG5vU2V0 SXRlbSA8IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCShwb3NJdGVtID09IGJhdGNoLT5sYXN0SXRl bSB8fAorCQkJIChoYmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmxhc3RJdGVtXSAmIEJBVENIX1ZJU19D SEVDS0VEKSk7CisJCXN0ZXAgPSAtMTsKKwl9CisKKwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGlu Zm8gZm9yIGEgcmFuZ2Ugb2YgaXRlbXMsIGluIHNjYW4gb3JkZXIuCisJICoKKwkgKiBub1NldEl0 ZW0gaXMgdGhlIGZpcnN0IGl0ZW0gKGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbikgdGhhdCB3 b24ndCBiZQorCSAqIHNldCBkdXJpbmcgdGhpcyBjYWxsLiAgbm9TZXRJdGVtIG9mdGVuIHBvaW50 cyB0byBqdXN0IHBhc3QgdGhlIGVuZCBvZgorCSAqIChvciBqdXN0IGJlZm9yZSB0aGUgc3RhcnQg b2YpIHRoZSBiYXRjaCdzICdpdGVtcycgYXJyYXkuCisJICoKKwkgKiBXZSBpdGVyYXRlIHRoaXMg d2F5IHRvIGF2b2lkIHRoZSBuZWVkIGZvciAyIGRpcmVjdGlvbi1zcGVjaWZpYyBsb29wcywKKwkg KiBzaW5jZSB0aGlzIGlzIGEgaG90IGNvZGUgcGF0aCB0aGF0J3Mgc2Vuc2l0aXZlIHRvIGNvZGUg c2l6ZSBpbmNyZWFzZXMuCisJICovCisJZm9yIChpbnQgc2V0SXRlbSA9IHBvc0l0ZW07IHNldEl0 ZW0gIT0gbm9TZXRJdGVtOyBzZXRJdGVtICs9IHN0ZXApCisJeworCQlJdGVtUG9pbnRlciB0aWQg PSAmYmF0Y2gtPml0ZW1zW3NldEl0ZW1dLnRhYmxlVGlkOworCQlCbG9ja051bWJlciBoZWFwYmxr bm8gPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisJCXVpbnQ4CQlmbGFnczsKKwor CQlpZiAoaGVhcGJsa25vID09IGN1cnZtaGVhcGJsa25vKQorCQl7CisJCQkvKiBjb250aWd1b3Vz IGhlYXAgYmxvY2sgLS0ganVzdCByZXVzZSBsYXN0IGl0ZW0ncyBmbGFncyAqLworCQkJaGJhdGNo LT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxrZmxhZ3M7CisJCQljb250aW51ZTsKKwkJ fQorCisJCWZsYWdzID0gQkFUQ0hfVklTX0NIRUNLRUQ7CisJCWlmIChWTV9BTExfVklTSUJMRShz Y2FuLT5oZWFwUmVsYXRpb24sIGhlYXBibGtubywgJmhzY2FuLT54c192bWJ1ZikpCisJCQlmbGFn cyB8PSBCQVRDSF9WSVNfQUxMX1ZJU0lCTEU7CisKKwkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1d ID0gY3Vydm1oZWFwYmxrZmxhZ3MgPSBmbGFnczsKKwkJY3Vydm1oZWFwYmxrbm8gPSBoZWFwYmxr bm87CisJfQorCisJLyoKKwkgKiBJdCdzIHNhZmUgdG8gZHJvcCB0aGUgYmF0Y2gncyBpbmRleCBB TSByZXNvdXJjZXMgYXMgc29vbiBhcyB3ZSd2ZQorCSAqIHJlc29sdmVkIHRoZSB2aXNpYmlsaXR5 IHN0YXR1cyBvZiBhbGwgb2YgaXRzIGl0ZW1zCisJICovCisJaWYgKGFsbGJhdGNoaXRlbXZpc2li bGUgJiYgc2Nhbi0+TVZDQ1NjYW4pCisJeworCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW2JhdGNo LT5maXJzdEl0ZW1dICYgQkFUQ0hfVklTX0NIRUNLRUQpOworCQlBc3NlcnQoaGJhdGNoLT52aXNJ bmZvW2JhdGNoLT5sYXN0SXRlbV0gJiBCQVRDSF9WSVNfQ0hFQ0tFRCk7CisKKwkJdGFibGVhbV91 dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8qCisJICogRWxzZSBjaGVj ayB2aXNpYmlsaXR5IGZvciB0d2ljZSBhcyBtYW55IGl0ZW1zIG5leHQgdGltZSwgb3IgYWxsIGl0 ZW1zLgorCSAqIFdlIGNoZWNrIGFsbCBpdGVtcyBpbiBvbmUgZ28gb25jZSB3ZSdyZSBwYXNzZWQg dGhlIHNjYW4ncyBmaXJzdCBiYXRjaC4KKwkgKi8KKwllbHNlIGlmIChoc2Nhbi0+eHNfdm1faXRl bXMgPCAoYmF0Y2gtPmxhc3RJdGVtIC0gYmF0Y2gtPmZpcnN0SXRlbSkpCisJCWhzY2FuLT54c192 bV9pdGVtcyAqPSAyOworCWVsc2UKKwkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4aXRl bXNiYXRjaDsKK30KKworc3RhdGljIGlubGluZSBJdGVtUG9pbnRlcgoraGVhcGFtX2JhdGNoX3Jl dHVybl90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAor CQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCwK KwkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsIGJvb2wgKmFsbF92aXNpYmxlKQorewor CUhlYXBCYXRjaERhdGEgKmhiYXRjaDsKKworCXBnc3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nh bi0+aW5kZXhSZWxhdGlvbiwgMSk7CisKKwkvKiBTZXQgeHNfaGVhcHRpZCwgd2hpY2ggaGVhcGFt X2luZGV4X2dldG5leHRfc2xvdCB3aWxsIG5lZWQgKi8KKwlzY2FuLT54c19oZWFwdGlkID0gc2Nh bkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50YWJsZVRpZDsKKworCWlmICghc2Nhbi0+eHNf d2FudF9pdHVwKQorCXsKKwkJaW50CQkJbmV4dEl0ZW07CisJCWJvb2wJCWhhc05leHQ7CisKKwkJ LyoKKwkJICogUGxhaW4gaW5kZXggc2Nhbi4KKwkJICoKKwkJICogRGV0ZXJtaW5lIGlmIHRoZSBu ZXh0IGl0ZW0gaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gaXMgb24gYQorCQkgKiBkaWZm ZXJlbnQgaGVhcCBibG9jay4gIFdoZW4gaXQgaXMsIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZSBj YW4KKwkJICogdHJhbnNmZXIgaXRzIGJ1ZmZlciBwaW4gdG8gdGhlIHNsb3QgaW5zdGVhZCBvZiBp bmNyZW1lbnRpbmcgdGhlIHBpbgorCQkgKiBjb3VudCwgc2F2aW5nIGEgcGFpciBvZiBJbmNyQnVm ZmVyUmVmQ291bnQvUmVsZWFzZUJ1ZmZlciBjYWxscy4KKwkJICoKKwkJICogTm90ZTogV2UgY2Fu bm90IGRvIHRoaXMgZm9yIGluZGV4LW9ubHkgc2NhbnMgYmVjYXVzZSBhbGwtdmlzaWJsZQorCQkg KiBpdGVtcyBhcmUgc2tpcHBlZCBieSBib3RoIHRoZSBzY2FuIGFuZCB0aGUgcmVhZCBzdHJlYW0g Y2FsbGJhY2suCisJCSAqIFNraXBwZWQgaXRlbXMgY2FuIGJyZWFrIHRoZSBibG9jayBkZWR1cGxp Y2F0aW9uIHN5bW1ldHJ5IGJldHdlZW4KKwkJICogdGhlIHN0cmVhbSBhbmQgdGhlIHNjYW46IHRo ZSBzdHJlYW0gZGVkdXBsaWNhdGVzIGNvbnNlY3V0aXZlCisJCSAqIG5vbi1hbGwtdmlzaWJsZSBp dGVtcyBieSBibG9jaywgYnV0IGFmdGVyIGludmFsaWRhdGluZyB4c19ibGsgdGhlCisJCSAqIHNj YW4gd291bGQgdHJ5IHRvIHJlLWZldGNoIGEgYmxvY2sgdGhhdCB0aGUgc3RyZWFtIGFscmVhZHkg cmV0dXJuZWQKKwkJICogYW5kIGRlZHVwbGljYXRlZCBhd2F5LgorCQkgKi8KKwkJaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJeworCQkJbmV4dEl0ZW0gPSBzY2FuUG9z LT5pdGVtICsgMTsKKwkJCWhhc05leHQgPSAobmV4dEl0ZW0gPD0gc2NhbkJhdGNoLT5sYXN0SXRl bSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXh0SXRlbSA9IHNjYW5Qb3MtPml0ZW0gLSAxOwor CQkJaGFzTmV4dCA9IChuZXh0SXRlbSA+PSBzY2FuQmF0Y2gtPmZpcnN0SXRlbSk7CisJCX0KKwor CQloc2Nhbi0+eHNfbGFzdGluYmxvY2sgPSBoYXNOZXh0ICYmCisJCQlJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKCZzY2FuQmF0Y2gtPml0ZW1zW25leHRJdGVtXS50YWJsZVRpZCkgIT0KKwkJCUl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhzX2hlYXB0aWQpOworCisJCXJldHVybiAm c2Nhbi0+eHNfaGVhcHRpZDsKKwl9CisKKwkvKgorCSAqIEluZGV4LW9ubHkgc2Nhbi4KKwkgKgor CSAqIEFsc28gc2V0IHhzX2l0dXAsIHdoaWNoIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgbmVl ZHMgdG9vLgorCSAqLworCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNjYW5CYXRjaC0+ Y3VyclR1cGxlcyArCisJCQkJCQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50 dXBsZU9mZnNldCk7CisKKwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGluZm8gZm9yIHRoZSBjdXJy ZW50IHNjYW5Qb3MgaXRlbSAocGx1cyBwb3NzaWJseSBzb21lCisJICogYWRkaXRpb25hbCBpdGVt cyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbikgYXMgbmVlZGVkCisJICovCisJaGJhdGNo ID0gaGVhcF9iYXRjaF9kYXRhKHNjYW5CYXRjaCwgc2Nhbik7CisJaWYgKCEoaGJhdGNoLT52aXNJ bmZvW3NjYW5Qb3MtPml0ZW1dICYgQkFUQ0hfVklTX0NIRUNLRUQpKQorCQloZWFwYW1fYmF0Y2hf cmVzb2x2ZV92aXNpYmlsaXR5KHNjYW4sIGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBoYmF0Y2gsCisJ CQkJCQkJCQkJc2NhblBvcyk7CisKKwkvKiBGaW5hbGx5LCBzZXQgYWxsX3Zpc2libGUgZm9yIGhl YXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgKi8KKwkqYWxsX3Zpc2libGUgPQorCQkoaGJhdGNoLT52 aXNJbmZvW3NjYW5Qb3MtPml0ZW1dICYgQkFUQ0hfVklTX0FMTF9WSVNJQkxFKSAhPSAwOworCisJ cmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJ aGVhcGFtX2JhdGNoX2dldG5leHQgLSBnZXQgdGhlIG5leHQgYmF0Y2ggb2YgVElEcyBmcm9tIGEg c2NhbgorICoKKyAqIENhbGxlZCB3aGVuIHdlIG5lZWQgdG8gbG9hZCB0aGUgbmV4dCBiYXRjaCBv ZiBpbmRleCBlbnRyaWVzIHRvIHByb2Nlc3MgaW4KKyAqIHRoZSBnaXZlbiBkaXJlY3Rpb24uICBD YWxsZXIgcGFzc2VzIHVzIGEgYmF0Y2ggYW5kIGEgYmF0Y2ggcG9zaXRpb24sIHdoaWNoCisgKiBo YXMganVzdCBiZWVuIHVzZWQgdG8gcmVhZCBhbGwgaXRlbXMgZnJvbSB0aGUgYmF0Y2ggaW4gdGhl IGRpcmVjdGlvbiBwYXNzZWQKKyAqIGJ5IGNhbGxlci4KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXh0 IGJhdGNoIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgaW5kZXggc2Nhbiwgb3IgTlVMTCB3aGVuCisg KiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGVzIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4g IERvZXMgbm90IGFkdmFuY2UKKyAqIGNhbGxlcidzIGJhdGNoIHBvc2l0aW9uOyB0aGF0IGlzIGxl ZnQgdXAgdG8gY2FsbGVyLgorICoKKyAqIFRoaXMgaXMgYWxzbyB3aGVyZSBiYXRjaGVzIGFyZSBh cHBlbmRlZCB0byB0aGUgc2NhbidzIHJpbmcgYnVmZmVyLiAgV2UKKyAqIGRvbid0IGZyZWUgYW55 IGJhdGNoZXMgaGVyZSwgdGhvdWdoOyB0aGF0IGlzIGFsc28gbGVmdCB1cCB0byBjYWxsZXIuCisg KiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IEluZGV4U2Nh bkJhdGNoCitoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JCYXRjaCwgQmF0Y2hS aW5nSXRlbVBvcyAqcG9zKQoreworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gTlVMTDsKKwlCYXRj aFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSAmc2Nh bi0+YmF0Y2hyaW5nYnVmOworCisJLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFw c2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLworCUFzc2VydChUcmFuc2FjdGlvbklkSXNW YWxpZChSZWNlbnRYbWluKSk7CisKKwlpZiAoIXByaW9yQmF0Y2gpCisJeworCQkvKiBGaXJzdCBj YWxsIGZvciB0aGUgc2NhbiAqLworCQlBc3NlcnQocG9zID09ICZiYXRjaHJpbmdidWYtPnNjYW5Q b3MpOworCX0KKwllbHNlIGlmICh1bmxpa2VseShwcmlvckJhdGNoLT5kaXIgIT0gZGlyZWN0aW9u KSkKKwl7CisJCS8qCisJCSAqIFdlIGRldGVjdGVkIGEgY2hhbmdlIGluIHNjYW4gZGlyZWN0aW9u IGFjcm9zcyBiYXRjaGVzLiAgUHJlcGFyZQorCQkgKiBzY2FuJ3MgYmF0Y2hyaW5nYnVmIHN0YXRl IGZvciB1cyB0byBnZXQgdGhlIG5leHQgYmF0Y2ggZm9yIHRoZQorCQkgKiBvcHBvc2l0ZSBzY2Fu IGRpcmVjdGlvbiB0byB0aGUgb25lIHVzZWQgd2hlbiBwcmlvckJhdGNoIHdhcworCQkgKiByZXR1 cm5lZCBieSBhbWdldGJhdGNoLgorCQkgKi8KKwkJdGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5n ZShzY2FuKTsKKworCQkvKiBwcmlvckJhdGNoIGlzIG5vdyBiYXRjaHJpbmdidWYncyBvbmx5IGJh dGNoICovCisJCUFzc2VydChwb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsK KwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMSk7CisJfQorCWVsc2Ug aWYgKGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKSkKKwl7CisJ CS8qIE5leHQgYmF0Y2ggYWxyZWFkeSBsb2FkZWQgZm9yIHVzICovCisJCWJhdGNoID0gaW5kZXhf c2Nhbl9iYXRjaChzY2FuLCBwb3MtPmJhdGNoICsgMSk7CisKKwkJQXNzZXJ0KHByaW9yQmF0Y2gt PmRpciA9PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOwor CQlyZXR1cm4gYmF0Y2g7CisJfQorCisJLyoKKwkgKiBBc3NlcnQgcHJlY29uZGl0aW9ucyBmb3Ig Y2FsbGluZyBhbWdldGJhdGNoLgorCSAqCisJICogcHJpb3JCYXRjaCBoYWQgYmV0dGVyIGJlIGZv ciB0aGUgbGFzdCB2YWxpZCBiYXRjaCBjdXJyZW50bHkgaW4gdGhlIHJpbmcKKwkgKiBidWZmZXIg KGJhdGNoZXMgbXVzdCBzdGF5IGluIHNjYW4gb3JkZXIpLiAgSWYgaXQgaXNuJ3QgdGhlbiB3ZSBz aG91bGQKKwkgKiBoYXZlIGFscmVhZHkgcmV0dXJuZWQgc29tZSBleGlzdGluZyBsb2FkZWQgYmF0 Y2ggZWFybGllci4KKwkgKi8KKwlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSk7 CisJQXNzZXJ0KCFwcmlvckJhdGNoIHx8CisJCSAgIChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNj YW4pID4gMCAmJiBwcmlvckJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uICYmCisJCQlpbmRleF9zY2Fu X2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMSkgPT0gcHJpb3JCYXRjaCkp OworCisJLyoKKwkgKiBCZWZvcmUgd2UgY2FsbCBhbWdldGJhdGNoIGFnYWluLCBjaGVjayBpZiBw cmlvckJhdGNoIGlzIGFscmVhZHkga25vd24KKwkgKiB0byBiZSB0aGUgbGFzdCBiYXRjaCB3aXRo IG1hdGNoaW5nIGl0ZW1zIGluIHRoaXMgc2NhbiBkaXJlY3Rpb24KKwkgKi8KKwlpZiAocHJpb3JC YXRjaCAmJgorCQkoKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSAmJiBwcmlvckJh dGNoLT5rbm93bkVuZEZvcndhcmQpIHx8CisJCSAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGly ZWN0aW9uKSAmJiBwcmlvckJhdGNoLT5rbm93bkVuZEJhY2t3YXJkKSkpCisJCXJldHVybiBOVUxM OworCisJYmF0Y2ggPSBzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaChz Y2FuLCBwcmlvckJhdGNoLAorCQkJCQkJCQkJCQkJCSAgZGlyZWN0aW9uKTsKKwlpZiAoYmF0Y2gp CisJeworCQkvKiBXZSBnb3QgdGhlIGJhdGNoIGZyb20gdGhlIEFNICovCisJCUFzc2VydChiYXRj aC0+ZGlyID09IGRpcmVjdGlvbik7CisKKwkJLyogQXBwZW5kIGJhdGNoIHRvIHRoZSBlbmQgb2Yg cmluZyBidWZmZXIvd3JpdGUgaXQgdG8gYnVmZmVyIGluZGV4ICovCisJCWluZGV4X3NjYW5fYmF0 Y2hfYXBwZW5kKHNjYW4sIGJhdGNoKTsKKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiYXRjaCBy ZXR1cm5lZCBOVUxMICovCisJCWlmIChwcmlvckJhdGNoKQorCQl7CisJCQkvKgorCQkJICogVGhl cmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hlcyB0byBiZSBmb3VuZCBpbiB0aGUgY3VycmVudCBzY2Fu CisJCQkgKiBkaXJlY3Rpb24sIGZvbGxvd2luZyBwcmlvckJhdGNoLiAgUmVtZW1iZXIgdGhhdCBw cmlvckJhdGNoIGlzCisJCQkgKiB0aGUgbGFzdCBiYXRjaCB3aXRoIG1hdGNoaW5nIGl0ZW1zLgor CQkJICovCisJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQkJCXBy aW9yQmF0Y2gtPmtub3duRW5kRm9yd2FyZCA9IHRydWU7CisJCQllbHNlCisJCQkJcHJpb3JCYXRj aC0+a25vd25FbmRCYWNrd2FyZCA9IHRydWU7CisJCX0KKwl9CisKKwkvKiB4c19oaXR1cCBpc24n dCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMgKi8KKwlBc3NlcnQoIXNj YW4tPnhzX2hpdHVwKTsKKworCXJldHVybiBiYXRjaDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LQorICoJCWhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCAtIGdldCBuZXh0IFRJRCBmcm9tIGJhdGNo IHJpbmcgYnVmZmVyCisgKgorICogR2V0IHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBzY2FuJ3MgYmF0 Y2ggcmluZyBidWZmZXIsIHdoZW4gbW92aW5nIGluIHRoZQorICogZ2l2ZW4gc2NhbiBkaXJlY3Rp b24uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IEl0 ZW1Qb2ludGVyCitoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LCBib29sICphbGxfdmlzaWJsZSkKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9 ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZiYXRj aHJpbmdidWYtPnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gTlVMTDsKKwor CUFzc2VydCghc2NhblBvcy0+dmFsaWQgfHwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2Nh blBvcy0+YmF0Y2gpOworCUFzc2VydChzY2FuUG9zLT52YWxpZCB8fCBpbmRleF9zY2FuX2JhdGNo X2NvdW50KHNjYW4pID09IDApOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0 aW5nIGxvYWRlZCBzY2FuQmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAorCSAqIG1hdGNo aW5nIGl0ZW0ncyBUSUQvaW5kZXggdHVwbGUgZnJvbQorCSAqLworCWlmIChzY2FuUG9zLT52YWxp ZCkKKwl7CisJCS8qCisJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNvIHNjYW5CYXRjaCBtdXN0IGFs cmVhZHkgYmUgbG9hZGVkIGluIGJhdGNoIHJpbmcKKwkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0 aGF0IGhlcmUuCisJCSAqLworCQlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2Nh blBvcy0+YmF0Y2gpOworCisJCXNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2Nh blBvcy0+YmF0Y2gpOworCisJCWlmIChpbmRleF9zY2FuX3Bvc19hZHZhbmNlKGRpcmVjdGlvbiwg c2NhbkJhdGNoLCBzY2FuUG9zKSkKKwkJCXJldHVybiBoZWFwYW1fYmF0Y2hfcmV0dXJuX3RpZChz Y2FuLCBoc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywK KwkJCQkJCQkJCQkgICBhbGxfdmlzaWJsZSk7CisJfQorCisJLyoKKwkgKiBFaXRoZXIgcmFuIG91 dCBvZiBpdGVtcyBmcm9tIG91ciBleGlzdGluZyBzY2FuQmF0Y2gsIG9yIGl0IGhhc24ndCBiZWVu CisJICogbG9hZGVkIHlldCAoYmVjYXVzZSB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9y IHRoZSBlbnRpcmUgc2NhbikuCisJICogVHJ5IHRvIGFkdmFuY2Ugc2NhbkJhdGNoIHRvIHRoZSBu ZXh0IGJhdGNoIChvciBnZXQgdGhlIGZpcnN0IGJhdGNoKS4KKwkgKi8KKwlzY2FuQmF0Y2ggPSBo ZWFwYW1fYmF0Y2hfZ2V0bmV4dChzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcyk7 CisKKwlpZiAoIXNjYW5CYXRjaCkKKwl7CisJCS8qCisJCSAqIFdlJ3JlIGRvbmU7IG5vIG1vcmUg YmF0Y2hlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KKwkJICoKKwkJICogTm90ZTog c2NhblBvcyBpcyBnZW5lcmFsbHkgc3RpbGwgdmFsaWQgYXQgdGhpcyBwb2ludC4gIFRoZSBzY2Fu CisJCSAqIG1pZ2h0IHN0aWxsIGJhY2sgdXAgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KKwkJICov CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogQWR2YW5jZWQgc2NhbkJhdGNoLiAgTm93 IHBvc2l0aW9uIHNjYW5Qb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldworCSAqIHNjYW5CYXRjaC4KKwkg Ki8KKwlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Q b3MpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKSA9PSBz Y2FuQmF0Y2gpOworCisJLyoKKwkgKiBSZW1vdmUgdGhlIGhlYWQgYmF0Y2ggZnJvbSB0aGUgYmF0 Y2ggcmluZyBidWZmZXIgKGV4Y2VwdCB3aGVuIHRoaXMgbmV3CisJICogc2NhbkJhdGNoIGlzIG91 ciBvbmx5IG9uZSkKKwkgKi8KKwlpZiAoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggIT0gc2NhblBv cy0+YmF0Y2gpCisJeworCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2Jh dGNoKHNjYW4sCisJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCisJCS8q IGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0 Y2gpICovCisJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CisKKwkJ LyogUmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAqLworCQliYXRjaHJpbmdi dWYtPmhlYWRCYXRjaCsrOworCX0KKworCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFs d2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KKwlBc3NlcnQoYmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCisJcmV0dXJuIGhlYXBhbV9iYXRj aF9yZXR1cm5fdGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcywK KwkJCQkJCQkJICAgYWxsX3Zpc2libGUpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJ aW5kZXhfZmV0Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQorICoKKyAq IFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBp bmRleCBUSUQgbW9zdAorICogcmVjZW50bHkgZmV0Y2hlZCBieSBvdXIgY2FsbGVyIGluIHNjYW4t PnhzX2hlYXB0aWQsIG9yIE5VTEwgaWYgbm8gbW9yZQorICogbWF0Y2hpbmcgdHVwbGVzIGV4aXN0 LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2UKKyAq IG9mIEhPVCBjaGFpbnMsIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBz aG91bGQgYmUgaW1wb3NzaWJsZQorICogZm9yIG1vcmUgdGhhbiBvbmUgc3VjaCB0dXBsZSB0byBl eGlzdC4pCisgKgorICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFw IHR1cCBpcyBwaW5uZWQuICBUaGUgcGluIG11c3QgYmUKKyAqIGRyb3BwZWQgZWxzZXdoZXJlLgor ICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBib29sCitp bmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp Cit7CisJYm9vbAkJYWxsX2RlYWQgPSBmYWxzZTsKKwlib29sCQlmb3VuZDsKKworCWZvdW5kID0g aGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hl YXB0aWQsCisJCQkJCQkJCQkgc2Nhbi0+eHNfc25hcHNob3QsIHNsb3QsCisJCQkJCQkJCQkgJnNj YW4tPnhzX2hlYXBfY29udGludWUsICZhbGxfZGVhZCk7CisKKwlpZiAoZm91bmQpCisJCXBnc3Rh dF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24pOworCisJLyoKKwkgKiBJZiB3 ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCBy ZW1lbWJlciBpdAorCSAqIGZvciBsYXRlci4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4gcmVj b3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZQorCSAqIE1WQ0MgdG8gZG8gc28uICBTZWUgY29t bWVudHMgaW4gUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KKwkgKi8KKwlpZiAoIXNjYW4tPnhhY3RT dGFydGVkSW5SZWNvdmVyeSkKKwl7CisJCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCXsKKwkJ CWlmIChhbGxfZGVhZCkKKwkJCQl0YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbShzY2FuKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBUZWxsIGFtZ2V0dHVwbGUtYmFzZWQgaW5k ZXggQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElECisJCQkgKiAodGhpcyB3aWxsIHRh a2UgZWZmZWN0IGluIHRoZSBuZXh0IGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKQorCQkJICov CisJCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7CisJCX0KKwl9CisKKwlyZXR1 cm4gZm91bmQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1faW5kZXhfZ2V0 bmV4dF9zbG90IC0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCisgKgorICogVGhlIHJl c3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUg c25hcHNob3Qgd2FzCisgKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0 b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNsb3QuCisgKgorICogT24gc3VjY2VzcywgcmVzb3VyY2Vz IChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCisg KiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBsYXRlciBjYWxsIHRvIGlu ZGV4X2VuZHNjYW4pLgorICoKKyAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3Jl Y2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCisgKiBzY2FuIGtleXMgaWYgcmVx dWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQorICog ZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNh c2UuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJv b2wKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNf aGVhcGZldGNoOworCUl0ZW1Qb2ludGVyIHRpZCA9IE5VTEw7CisJYm9vbAkJYWxsX3Zpc2libGUg PSBmYWxzZTsKKworCWZvciAoOzspCisJeworCQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGludWUp CisJCXsKKwkJCS8qCisJCQkgKiBTY2FucyB0aGF0IHVzZSBhbiBhbWdldGJhdGNoIGluZGV4IEFN IGFyZSBtYW5hZ2VkIGJ5IGhlYXBhbSdzCisJCQkgKiBpbmRleCBzY2FuIG1hbmFnZXIuICBUaGlz IGdpdmVzIGhlYXBhbSB0aGUgYWJpbGl0eSB0byByZWFkIGhlYXAKKwkJCSAqIHR1cGxlcyBpbiBh IGZsZXhpYmxlIG9yZGVyIHRoYXQgaXMgYXR0dW5lZCB0byBib3RoIGNvc3RzIGFuZAorCQkJICog YmVuZWZpdHMgb24gdGhlIGhlYXBhbSBhbmQgdGFibGUgQU0gc2lkZS4KKwkJCSAqCisJCQkgKiBT Y2FucyB0aGF0IHVzZSBhbiBhbWdldHR1cGxlIGluZGV4IEFNIHNpbXBseSBjYWxsIHRocm91Z2gg dG8KKwkJCSAqIGluZGV4X2dldG5leHRfdGlkIHRvIGdldCB0aGUgbmV4dCBUSUQgcmV0dXJuZWQg YnkgaW5kZXggQU0uIFRoZQorCQkJICogcHJvZ3Jlc3Mgb2YgdGhlIHNjYW4gd2lsbCBiZSB1bmRl ciB0aGUgY29udHJvbCBvZiBpbmRleCBBTSAod2UKKwkJCSAqIGp1c3QgcGFzcyBpdCB0aHJvdWdo IGEgZGlyZWN0aW9uIHRvIGdldCB0aGUgbmV4dCB0dXBsZSBpbiksIHNvCisJCQkgKiB3ZSBjYW5u b3QgcmVvcmRlciBhbnkgd29yay4KKwkJCSAqLworCQkJaWYgKHNjYW4tPnVzZWJhdGNocmluZykK KwkJCQl0aWQgPSBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlv biwKKwkJCQkJCQkJCQkJICAgJmFsbF92aXNpYmxlKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQl0aWQg PSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCisJCQkJaWYgKHRpZCAhPSBO VUxMICYmIHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCQkJYWxsX3Zpc2libGUgPSBWTV9BTExfVklT SUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpLAorCQkJCQkJCQkJCQkJICZoc2Nhbi0+eHNfdm1idWYpOworCQkJfQorCisJ CQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLworCQkJaWYg KHRpZCA9PSBOVUxMKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRmV0Y2ggdGhlIG5l eHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleCBlbnRyeS4KKwkJ ICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlIG5l eHQgVElEIGZyb20KKwkJICogdGhlIGluZGV4LgorCQkgKi8KKwkJQXNzZXJ0KEl0ZW1Qb2ludGVy SXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOworCQlpZiAoIXNjYW4tPnhzX3dhbnRfaXR1cCkK KwkJeworCQkJLyogUGxhaW4gaW5kZXggc2NhbiAqLworCQkJaWYgKGluZGV4X2ZldGNoX2hlYXAo c2Nhbiwgc2xvdCkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgor CQkJICogSW5kZXgtb25seSBzY2FuLgorCQkJICoKKwkJCSAqIFdlIGNhbiBza2lwIHRoZSBoZWFw IGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBvbgorCQkJICogd2hpY2gg YWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJvZHkuICBJbiBhbnkgY2FzZSwK KwkJCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRo ZSBkYXRhCisJCQkgKiBzb3VyY2UuCisJCQkgKi8KKwkJCWlmICghYWxsX3Zpc2libGUpCisJCQl7 CisJCQkJLyoKKwkJCQkgKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNr IHZpc2liaWxpdHkuCisJCQkJICovCisJCQkJaWYgKHNjYW4tPmluc3RydW1lbnQpCisJCQkJCXNj YW4tPmluc3RydW1lbnQtPm5oZWFwZmV0Y2hlcysrOworCisJCQkJaWYgKCFpbmRleF9mZXRjaF9o ZWFwKHNjYW4sIHNsb3QpKQorCQkJCQljb250aW51ZTsJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5 IG5leHQgaW5kZXggZW50cnkgKi8KKworCQkJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCisJCQkJ LyoKKwkJCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0ZWQgd2l0aCBzdGFuZGFy ZCBpbmRleC1vbmx5CisJCQkJICogc2NhbnMsIHNvIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRv IGtlZXAgZm9sbG93aW5nIHRoZSBIT1QKKwkJCQkgKiBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRy eSBoYXMgYmVlbiBmb3VuZC4gIE90aGVyIGNhbGxlcnMKKwkJCQkgKiAoY3VycmVudGx5IG9ubHkg c2VsZnVuY3MuYykgdXNlIFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwgYW5kCisJCQkJICogd2FudCB1 cyB0byBhc3N1bWUgdGhhdCBqdXN0IGhhdmluZyBvbmUgdmlzaWJsZSB0dXBsZSBpbiB0aGUKKwkJ CQkgKiBob3QgY2hhaW4gaXMgYWx3YXlzIGdvb2QgZW5vdWdoLgorCQkJCSAqLworCQkJCUFzc2Vy dCghKHNjYW4tPnhzX2hlYXBfY29udGludWUgJiYKKwkJCQkJCSBJc01WQ0NTbmFwc2hvdChzY2Fu LT54c19zbmFwc2hvdCkpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdl IGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHNvIHdlJ2xsIG5lZWQgdG8gdGFrZSBhCisJCQkJICog cHJlZGljYXRlIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbwor CQkJCSAqIHRoYXQgYXQgcGFnZSBsZXZlbC4KKwkJCQkgKi8KKwkJCQlQcmVkaWNhdGVMb2NrUGFn ZShoc2Nhbi0+eHNfYmFzZS5yZWwsCisJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpLAorCQkJCQkJCQkgIHNjYW4tPnhzX3NuYXBzaG90KTsKKwkJCX0KKworCQkJLyoKKwkJ CSAqIFJldHVybiBtYXRjaGluZyBpbmRleCB0dXBsZSBub3cgc2V0IGluIHNjYW4tPnhzX2l0dXAg KG9yIHJldHVybgorCQkJICogbWF0Y2hpbmcgaGVhcCB0dXBsZSBub3cgc2V0IGluIHNjYW4tPnhz X2hpdHVwKS4KKwkJCSAqCisJCQkgKiBOb3RlOiB3ZSB3b24ndCB1c3VhbGx5IGhhdmUgZmV0Y2hl ZCBhIGhlYXAgdHVwbGUgaW50byBjYWxsZXIncworCQkJICogdGFibGUgc2xvdC4gIFRoaXMgaXMg cGVyIHRoZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY29udHJhY3QKKwkJCSAqIGZvciBzY2Fu LT54c193YW50X2l0dXAgY2FsbGVycy4KKwkJCSAqLworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9 CisKKwlyZXR1cm4gZmFsc2U7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ2FsbGJhY2tz IGZvciBub24tbW9kaWZ5aW5nIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBsZXMgZm9yIGhl YXAgQU0KQEAgLTc2MSw3ICsxNDI2LDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0 ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQl0YWJsZVNjYW4gPSBO VUxMOwogCQloZWFwU2NhbiA9IE5VTEw7Ci0JCWluZGV4U2NhbiA9IGluZGV4X2JlZ2luc2NhbihP bGRIZWFwLCBPbGRJbmRleCwgU25hcHNob3RBbnksIE5VTEwsIDAsIDApOworCQlpbmRleFNjYW4g PSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIGZhbHNlLCBTbmFwc2hvdEFueSwK KwkJCQkJCQkJCU5VTEwsIDAsIDApOwogCQlpbmRleF9yZXNjYW4oaW5kZXhTY2FuLCBOVUxMLCAw LCBOVUxMLCAwKTsKIAl9CiAJZWxzZQpAQCAtNzk4LDcgKzE0NjQsOCBAQCBoZWFwYW1fcmVsYXRp b25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAog CiAJCWlmIChpbmRleFNjYW4gIT0gTlVMTCkKIAkJewotCQkJaWYgKCFpbmRleF9nZXRuZXh0X3Ns b3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCQlpZiAoIWhlYXBh bV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJ CQkJCQkJCQkgICBzbG90KSkKIAkJCQlicmVhazsKIAogCQkJLyogU2luY2Ugd2UgdXNlZCBubyBz Y2FuIGtleXMsIHNob3VsZCBuZXZlciBuZWVkIHRvIHJlY2hlY2sgKi8KQEAgLTI2NTcsNiArMzMy NCw4IEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAku aW5kZXhfZmV0Y2hfYmVnaW4gPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4sCiAJLmluZGV4X2Zl dGNoX3Jlc2V0ID0gaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LAogCS5pbmRleF9mZXRjaF9lbmQg PSBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kLAorCS5pbmRleF9iYXRjaF9pbml0ID0gaGVhcGFtX2lu ZGV4X2JhdGNoX2luaXQsCisJLmluZGV4X2dldG5leHRfc2xvdCA9IGhlYXBhbV9pbmRleF9nZXRu ZXh0X3Nsb3QsCiAJLmluZGV4X2ZldGNoX3R1cGxlID0gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxl LAogCiAJLnR1cGxlX2luc2VydCA9IGhlYXBhbV90dXBsZV9pbnNlcnQsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvTWFrZWZpbGUKaW5kZXggNmYyZTMwNjFhLi5lNmQ2ODFiNDAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgT0JKUyA9IFwKIAlhbWFwaS5vIFwKIAlhbXZh bGlkYXRlLm8gXAogCWdlbmFtLm8gXAotCWluZGV4YW0ubworCWluZGV4YW0ubyBcCisJaW5kZXhi YXRjaC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2FtYXBpLmMKaW5kZXggZWZhMDA3MDMwLi4xZGUyYTg4YWMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9hbWFwaS5jCkBAIC01NSw2ICs1NSwxMSBAQCBHZXRJbmRleEFtUm91dGluZShP aWQgYW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT5hbXJlc2NhbiAhPSBOVUxMKTsKIAlBc3Nl cnQocm91dGluZS0+YW1lbmRzY2FuICE9IE5VTEwpOwogCisJLyogQXNzZXJ0IHRoYXQgQU0gZG9l c24ndCBoYXZlIGFuIGludmFsaWQgY29tYmluYXRpb24gb2YgY2FsbGJhY2tzICovCisJQXNzZXJ0 KHJvdXRpbmUtPmFta2lsbGl0ZW1zYmF0Y2ggPT0gTlVMTCB8fCByb3V0aW5lLT5hbWdldGJhdGNo ICE9IE5VTEwpOworCUFzc2VydCgocm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKSA9PSAocm91 dGluZS0+YW1yZWxlYXNlYmF0Y2ggIT0gTlVMTCkpOworCUFzc2VydChyb3V0aW5lLT5hbWdldGJh dGNoICE9IE5VTEwgfHwgcm91dGluZS0+YW1wb3NyZXNldCA9PSBOVUxMKTsKKwogCXJldHVybiBy b3V0aW5lOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IDVlODliODZhNi4uNmU4 NzE2OWMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtODksNiArODksOSBAQCBSZWxh dGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBu b3JkZXJieXMpCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxl ciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwog CXNjYW4tPm51bWJlck9mT3JkZXJCeXMgPSBub3JkZXJieXM7CisJc2Nhbi0+dXNlYmF0Y2hyaW5n ID0gZmFsc2U7IC8qIHNldCBsYXRlciBmb3IgYW1nZXRiYXRjaCBjYWxsZXJzICovCisJc2Nhbi0+ eHNfYml0bWFwX2JhdGNoID0gTlVMTDsKKwlzY2FuLT54c193YW50X2l0dXAgPSBmYWxzZTsgLyog Y2FsbGVyIG11c3QgaW5pdGlhbGl6ZSB0aGlzICovCiAKIAkvKgogCSAqIFdlIGFsbG9jYXRlIGtl eSB3b3Jrc3BhY2UgaGVyZSwgYnV0IGl0IHdvbid0IGdldCBmaWxsZWQgdW50aWwgYW1yZXNjYW4u CkBAIC0xMDIsOCArMTA1LDYgQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhS ZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCWVsc2UKIAkJc2Nhbi0+b3JkZXJC eURhdGEgPSBOVUxMOwogCi0Jc2Nhbi0+eHNfd2FudF9pdHVwID0gZmFsc2U7IC8qIG1heSBiZSBz ZXQgbGF0ZXIgKi8KLQogCS8qCiAJICogRHVyaW5nIHJlY292ZXJ5IHdlIGlnbm9yZSBraWxsZWQg dHVwbGVzIGFuZCBkb24ndCBib3RoZXIgdG8ga2lsbCB0aGVtCiAJICogZWl0aGVyLiBXZSBkbyB0 aGlzIGJlY2F1c2UgdGhlIHhtaW4gb24gdGhlIHByaW1hcnkgbm9kZSBjb3VsZCBlYXNpbHkgYmUK QEAgLTEyNiw2ICsxMjcsMTAgQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhS ZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4tPnhzX2hpdHVwID0gTlVM TDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOwogCisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3Bh cXVlX3NpemUgPSAwOworCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPSAwOworCXNjYW4t PmJhdGNoX3RhYmxlX29mZnNldCA9IDA7CisKIAlyZXR1cm4gc2NhbjsKIH0KIApAQCAtNDU0LDcg KzQ1OSw3IEBAIHN5c3RhYmxlX2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJ ZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4gaW5kZXgiKTsKIAkJfQogCi0JCXN5c3NjYW4t PmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaXJlbCwKKwkJc3lzc2Nhbi0+ aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpcmVsLCBmYWxzZSwKIAkJCQkJ CQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAkJaW5kZXhfcmVzY2FuKHN5c3NjYW4t PmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAkJc3lzc2Nhbi0+c2NhbiA9IE5VTEw7 CkBAIC01MTcsNyArNTIyLDggQEAgc3lzdGFibGVfZ2V0bmV4dChTeXNTY2FuRGVzYyBzeXNzY2Fu KQogCiAJaWYgKHN5c3NjYW4tPmlyZWwpCiAJewotCQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5 c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJCWlm ICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGly ZWN0aW9uLAorCQkJCQkJCQkJIHN5c3NjYW4tPnNsb3QpKQogCQl7CiAJCQlib29sCQlzaG91bGRG cmVlOwogCkBAIC03MTUsNyArNzIxLDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuX29yZGVyZWQoUmVs YXRpb24gaGVhcFJlbGF0aW9uLAogCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZChDaGVja1hpZEFs aXZlKSkKIAkJYnN5c3NjYW4gPSB0cnVlOwogCi0Jc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdp bnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLAorCXN5c3NjYW4tPmlzY2FuID0gaW5k ZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwgZmFsc2UsCiAJCQkJCQkJ CQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNj YW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwogCXN5c3NjYW4tPnNjYW4gPSBOVUxMOwpAQCAt NzM0LDcgKzc0MCw3IEBAIHN5c3RhYmxlX2dldG5leHRfb3JkZXJlZChTeXNTY2FuRGVzYyBzeXNz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlIZWFwVHVwbGUJaHR1cCA9IE5VTEw7CiAK IAlBc3NlcnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGluZGV4X2dldG5leHRfc2xvdChzeXNzY2Fu LT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKKwlpZiAodGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQogCQlo dHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzeXNzY2FuLT5zbG90LCBmYWxzZSwgTlVMTCk7 CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0bmV4dCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMKaW5kZXggNDNmNjRhMGU3Li44ZDhiZTk0NDIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YW0uYwpAQCAtMjQsOSArMjQsNyBAQAogICoJCWluZGV4X3BhcmFsbGVsc2Nhbl9p bml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJhbGxlbCBzY2FuCiAgKgkJaW5kZXhfcGFyYWxsZWxy ZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxsZWwgc2NhbiBvZiBhbiBpbmRleAogICoJCWluZGV4 X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwgaW5kZXggc2NhbgotICoJCWluZGV4 X2dldG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgotICoJCWluZGV4X2Zl dGNoX2hlYXAJCS0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgkJaW5kZXhfZ2V0 bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCisgKgkJaW5kZXhfZ2V0 bmV4dF90aWQJLSBhbWdldHR1cGxlIHRhYmxlIEFNIGhlbHBlciByb3V0aW5lCiAgKgkJaW5kZXhf Z2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgZnJvbSBhIHNjYW4KICAqCQlpbmRleF9idWxrX2Rl bGV0ZQktIGJ1bGsgZGVsZXRpb24gb2YgaW5kZXggdHVwbGVzCiAgKgkJaW5kZXhfdmFjdXVtX2Ns ZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNsZWFudXAgb2YgYW4gaW5kZXgKQEAgLTI1NSw2ICsyNTMs NyBAQCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogSW5kZXhT Y2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQlSZWxh dGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCWJvb2wgeHNfd2FudF9pdHVwLAogCQkJCVNuYXBzaG90 IHNuYXBzaG90LAogCQkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJ CQlpbnQgbmtleXMsIGludCBub3JkZXJieXMpCkBAIC0yODEsNyArMjgwLDE0IEBAIGluZGV4X2Jl Z2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICovCiAJc2Nhbi0+aGVhcFJlbGF0aW9u ID0gaGVhcFJlbGF0aW9uOwogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7CisJc2Nhbi0+ TVZDQ1NjYW4gPSBJc01WQ0NTbmFwc2hvdChzbmFwc2hvdCk7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9 IGluc3RydW1lbnQ7CisJc2Nhbi0+eHNfd2FudF9pdHVwID0geHNfd2FudF9pdHVwOworCXNjYW4t PnVzZWJhdGNocmluZyA9IGZhbHNlOworCXNjYW4tPmJhdGNoSW1tZWRpYXRlUmVsZWFzZSA9IChz Y2FuLT5NVkNDU2NhbiAmJiAheHNfd2FudF9pdHVwKTsKKworCWlmIChpbmRleFJlbGF0aW9uLT5y ZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQorCQlpbmRleF9iYXRjaHNjYW5faW5pdChzY2Fu KTsKIAogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJ c2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcFJlbGF0aW9u KTsKQEAgLTMxMiw2ICszMTgsNyBAQCBpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sCiAJICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCiAJICovCiAJc2Nh bi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElzTVZDQ1NuYXBz aG90KHNuYXBzaG90KTsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKIAogCXJldHVy biBzY2FuOwpAQCAtMzczLDEzICszODAsMTkgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbiwKIAlBc3NlcnQobmtleXMgPT0gc2Nhbi0+bnVtYmVyT2ZLZXlzKTsKIAlBc3NlcnQobm9y ZGVyYnlzID09IHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOwogCi0JLyogUmVsZWFzZSByZXNvdXJj ZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKiByZXNldCB0 YWJsZSBBTSBzdGF0ZSBmb3IgcmVzY2FuICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJ dGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAogCXNjYW4tPmtp bGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBf Y29udGludWUgPSBmYWxzZTsKIAorCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlBc3Nl cnQoIXNjYW4tPmJhdGNocmluZ2J1Zi5kb25lKTsKKwkJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNj YW4pOworCX0KKwogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2Fu LCBrZXlzLCBua2V5cywKIAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRlcmJ5cyk7CiB9CkBAIC0z OTQsNiArNDA3LDE3IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCVNDQU5f Q0hFQ0tTOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZW5kc2Nhbik7CiAKKwkvKiBDbGVhbnVw IGJhdGNoaW5nLCBzbyB0aGF0IHRoZSBBTSBjYW4gcmVsZWFzZSBwaW5zIGFuZCBzbyBvbi4gKi8K KwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRleF9iYXRjaHNjYW5fZW5kKHNjYW4pOwor CisJLyogRnJlZSBjYWNoZWQgYml0bWFwIGJhdGNoIGlmIGFueSAqLworCWlmIChzY2FuLT54c19i aXRtYXBfYmF0Y2ggIT0gTlVMTCkKKwl7CisJCXBmcmVlKGJhdGNoX2FsbG9jX2Jhc2Uoc2Nhbi0+ eHNfYml0bWFwX2JhdGNoLCBzY2FuKSk7CisJCXNjYW4tPnhzX2JpdG1hcF9iYXRjaCA9IE5VTEw7 CisJfQorCiAJLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFi bGUgYWNjZXNzZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCXsKQEAgLTQyMiwyNCAr NDQ2LDI1IEBAIHZvaWQKIGluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCVND QU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bvcyk7CisJQ0hFQ0tfU0NB Tl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CiAKLQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1tYXJrcG9zKHNjYW4pOworCS8qIE9ubHkgYW1nZXRiYXRjaCBpbmRleCBBTXMgc3VwcG9y dCBtYXJrIGFuZCByZXN0b3JlICovCisJaW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zKHNjYW4pOwog fQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfcmVzdHJwb3MJLSByZXN0b3JlIGEg c2NhbiBwb3NpdGlvbgogICoKLSAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgaW50ZXJu YWwgc2NhbiBzdGF0ZSBvZiB0aGUgaW5kZXggQU0uICBTZWUKLSAqIGNvbW1lbnRzIGZvciBFeGVj UmVzdHJQb3MoKS4KKyAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgYmF0Y2ggcG9zaXRp b25hbCBzdGF0ZSBzaGFyZWQgYnkgdGhlIHRhYmxlIGFuZAorICogaW5kZXggQU1zLiAgU2VlIGNv bW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KICAqCiAgKiBOT1RFOiBGb3IgaGVhcCwgaW4gdGhl IHByZXNlbmNlIG9mIEhPVCBjaGFpbnMsIG1hcmsvcmVzdG9yZSBvbmx5IHdvcmtzCiAgKiBjb3Jy ZWN0bHkgaWYgdGhlIHNjYW4ncyBzbmFwc2hvdCBpcyBNVkNDLXNhZmU7IHRoYXQgZW5zdXJlcyB0 aGF0IHRoZXJlJ3MgYXQKICAqIG1vc3Qgb25lIHJldHVybmFibGUgdHVwbGUgaW4gZWFjaCBIT1Qg Y2hhaW4sIGFuZCBzbyByZXN0b3JpbmcgdGhlIHByaW9yCi0gKiBzdGF0ZSBhdCB0aGUgZ3JhbnVs YXJpdHkgb2YgdGhlIGluZGV4IEFNIGlzIHN1ZmZpY2llbnQuICBTaW5jZSB0aGUgb25seQotICog Y3VycmVudCB1c2VyIG9mIG1hcmsvcmVzdG9yZSBmdW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJnZWpv aW4uYywgdGhpcwotICogZWZmZWN0aXZlbHkgbWVhbnMgdGhhdCBtZXJnZS1qb2luIHBsYW5zIG9u bHkgd29yayBmb3IgTVZDQyBzbmFwc2hvdHMuICBUaGlzCi0gKiBjb3VsZCBiZSBmaXhlZCBpZiBu ZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0IHNlZW1zIHVuaW1wb3J0YW50LgorICogc3RhdGUgYXQg dGhlIHNjYW4gaXRlbSBncmFudWxhcml0eSBpcyBzdWZmaWNpZW50LiAgU2luY2UgdGhlIG9ubHkg Y3VycmVudAorICogdXNlciBvZiBtYXJrL3Jlc3RvcmUgZnVuY3Rpb25hbGl0eSBpcyBub2RlTWVy Z2Vqb2luLmMsIHRoaXMgZWZmZWN0aXZlbHkKKyAqIG1lYW5zIHRoYXQgbWVyZ2Utam9pbiBwbGFu cyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3RzLiAgVGhpcyBjb3VsZCBiZQorICogZml4ZWQg aWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBzZWVtcyB1bmltcG9ydGFudC4KICAqIC0tLS0t LS0tLS0tLS0tLS0KICAqLwogdm9pZApAQCAtNDQ4LDE2ICs0NzMsMTYgQEAgaW5kZXhfcmVzdHJw b3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2VydChJc01WQ0NTbmFwc2hvdChzY2FuLT54c19z bmFwc2hvdCkpOwogCiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1yZXN0 cnBvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CiAKLQkvKiByZWxlYXNl IHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8q IHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXNjYW4gKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZl dGNoKQogCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCi0J c2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCi0Jc2Nhbi0+ eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOworCS8qIGFsc28gbm90aWZ5IHRhYmxlIEFNIGFuZCBp bmRleCBBTSAqLworCWluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKIAotCXNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOworCXNjYW4tPnhzX2hl YXBfY29udGludWUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogfQogCiAvKgpAQCAtNTc5LDYg KzYwNCwxMiBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYg KHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNf aGVhcGZldGNoKTsKIAorCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlBc3NlcnQoIXNj YW4tPmJhdGNocmluZ2J1Zi5kb25lKTsKKwkJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4pOwor CX0KKwogCS8qIGFtcGFyYWxsZWxyZXNjYW4gaXMgb3B0aW9uYWw7IGFzc3VtZSBuby1vcCBpZiBu b3QgcHJvdmlkZWQgYnkgQU0gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0t PmFtcGFyYWxsZWxyZXNjYW4gIT0gTlVMTCkKIAkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtcGFyYWxsZWxyZXNjYW4oc2Nhbik7CkBAIC01OTEsNiArNjIyLDcgQEAgaW5kZXhfcGFy YWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogICovCiBJbmRleFNjYW5EZXNjCiBpbmRl eF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWws CisJCQkJCQkgYm9vbCB4c193YW50X2l0dXAsCiAJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0 aW9uICppbnN0cnVtZW50LAogCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJ CSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pCkBAIC02MTIsNyArNjQ0LDEzIEBAIGluZGV4 X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwK IAkgKi8KIAlzY2FuLT5oZWFwUmVsYXRpb24gPSBoZWFwcmVsOwogCXNjYW4tPnhzX3NuYXBzaG90 ID0gc25hcHNob3Q7CisJc2Nhbi0+TVZDQ1NjYW4gPSBJc01WQ0NTbmFwc2hvdChzbmFwc2hvdCk7 CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CisJc2Nhbi0+eHNfd2FudF9pdHVwID0g eHNfd2FudF9pdHVwOworCXNjYW4tPmJhdGNoSW1tZWRpYXRlUmVsZWFzZSA9IChzY2FuLT5NVkND U2NhbiAmJiAheHNfd2FudF9pdHVwKTsKKworCWlmIChpbmRleHJlbC0+cmRfaW5kYW0tPmFtZ2V0 YmF0Y2ggIT0gTlVMTCkKKwkJaW5kZXhfYmF0Y2hzY2FuX2luaXQoc2Nhbik7CiAKIAkvKiBwcmVw YXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwogCXNjYW4tPnhzX2hlYXBm ZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwpOwpAQCAtNjIxLDEwICs2NTks MTQgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9u IGluZGV4cmVsLAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBpbmRleF9nZXRuZXh0X3Rp ZCAtIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KKyAqIGluZGV4X2dldG5leHRfdGlkIC0g YW1nZXR0dXBsZSBpbnRlcmZhY2UKICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRoZSBuZXh0IFRJRCBz YXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCiAgKiBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcg dHVwbGVzIGV4aXN0LgorICoKKyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRhYmxl IEFNJ3MgaW5kZXhfZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uLAorICogYW5kIG9ubHkgZ2l2 ZW4gYW4gaW5kZXggQU0gdGhhdCBzdXBwb3J0cyB0aGUgc2luZ2xlLXR1cGxlIGFtZ2V0dHVwbGUK KyAqIGludGVyZmFjZS4KICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogSXRlbVBvaW50ZXIKQEAg LTY2Nyw5NyArNzA5LDYgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CiB9CiAK LS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0IHRoZSBzY2Fu J3MgbmV4dCBoZWFwIHR1cGxlCi0gKgotICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUgaGVhcCB0 dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0Ci0gKiByZWNlbnRseSBmZXRj aGVkIGJ5IGluZGV4X2dldG5leHRfdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVw bGVzCi0gKiBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBs ZSBiZWNhdXNlIG9mIEhPVCBjaGFpbnMsCi0gKiBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mg c25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIG1vcmUgdGhhbgotICogb25lIHN1 Y2ggdHVwbGUgdG8gZXhpc3QuKQotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFp bmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkICh0aGUgcGluIHdpbGwgYmUKLSAqIGRyb3BwZWQg aW4gYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhf ZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+ eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBp ZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZl Ci0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVy YWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZmV0Y2hfaGVh cChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWJvb2wJCWFs bF9kZWFkID0gZmFsc2U7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlmb3VuZCA9IHRhYmxlX2luZGV4X2Zl dGNoX3R1cGxlKHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCi0JCQkJCQkJ CQlzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKLQkJCQkJCQkJCSZzY2FuLT54c19oZWFwX2NvbnRp bnVlLCAmYWxsX2RlYWQpOwotCi0JaWYgKGZvdW5kKQotCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRj aChzY2FuLT5pbmRleFJlbGF0aW9uKTsKLQotCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xl IEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAotCSAqIEFN IHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGlu IHRoZSBuZXh0Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkuICBX ZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlv bGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25HZXRJbmRl eFNjYW4oKS4KLQkgKi8KLQlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nh bi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOwotCi0JcmV0dXJuIGZvdW5kOwotfQotCi0v KiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRoZSBuZXh0 IHR1cGxlIGZyb20gYSBzY2FuCi0gKgotICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUg c2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCi0gKiBmb3VuZCwg ZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNs b3QuCi0gKgotICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUg bGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCi0gKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGlu ZGV4X2dldG5leHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNh bGwpLgotICoKLSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFu ZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBX ZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGlu Zm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAt LS0tLS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkK LXsKLQlmb3IgKDs7KQotCXsKLQkJaWYgKCFzY2FuLT54c19oZWFwX2NvbnRpbnVlKQotCQl7Ci0J CQlJdGVtUG9pbnRlciB0aWQ7Ci0KLQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5leHQgVElEIGZy b20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rp b24pOwotCi0JCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAq LwotCQkJaWYgKHRpZCA9PSBOVUxMKQotCQkJCWJyZWFrOwotCi0JCQlBc3NlcnQoSXRlbVBvaW50 ZXJFcXVhbHModGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQl9Ci0KLQkJLyoKLQkJICogRmV0 Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleCBl bnRyeS4KLQkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdy YWIgdGhlIG5leHQgVElEIGZyb20KLQkJICogdGhlIGluZGV4LgotCQkgKi8KLQkJQXNzZXJ0KEl0 ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQlpZiAoaW5kZXhfZmV0Y2hf aGVhcChzY2FuLCBzbG90KSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsK LX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwg dHVwbGVzIGF0IG9uY2UgZnJvbSBhbiBpbmRleCBzY2FuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGJhdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5hOWE3 MjgxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhi YXRjaC5jCkBAIC0wLDAgKzEsNzUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBpbmRl eGJhdGNoLmMKKyAqCSAgQmF0Y2gtYmFzZWQgaW5kZXggc2NhbiBpbmZyYXN0cnVjdHVyZSBmb3Ig dGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgorICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRo ZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBiYXRjaC1iYXNlZCBpbmRleCBzY2FucywKKyAqIHdo aWNoIGFsbG93IGluZGV4IEFNcyB0byByZXR1cm4gbXVsdGlwbGUgbWF0Y2hpbmcgVElEcyBwZXIg cGFnZSBpbiBhIHNpbmdsZQorICogY2FsbC4gIFRoZSBiYXRjaCByaW5nIGJ1ZmZlciBpcyBtYW5h Z2VkIGJ5IHRoZSB0YWJsZSBBTSwgd2l0aCBoZWxwIGZyb20gdXMsCisgKiBhbmQgd2l0aCBoZWxw IGZyb20gdGhlIHJpbmcgYnVmZmVyIGlubGluZSBmdW5jdGlvbnMgaW4gcmVsc2Nhbi5oLiAgVGhp cworICogYXBwcm9hY2ggZW5hYmxlcyBlZmZpY2llbnQgcHJlZmV0Y2hpbmcgb2YgdGFibGUgQU0g YmxvY2tzIGR1cmluZyBvcmRlcmVkCisgKiBpbmRleCBzY2Fucy4KKyAqCisgKiBUaGUgcmluZyBi dWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2Ugb3JkZXIuCisgKgorICogVGhl cmUncyB0aHJlZSB0eXBlcyBvZiBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGU6CisgKgorICogMS4g Q29yZSBiYXRjaCBzY2FuIGxpZmVjeWNsZSAoaW5kZXhfYmF0Y2hzY2FuXyopOiBGdW5jdGlvbnMg dGhhdCBtYW5hZ2UKKyAqICAgIGJhdGNoIHNjYW4gc3RhdGUgaW5jbHVkaW5nIGluaXRpYWxpemF0 aW9uLCByZXNldCwgY2xlYW51cCwgYW5kIHRoZQorICogICAgbWFyay9yZXN0b3JlIG9wZXJhdGlv bnMgbmVlZGVkIGZvciBtZXJnZSBqb2lucy4gIENhbGxlZCBieSBpbmRleGFtLmMKKyAqICAgIHJv dXRpbmVzIHRoYXQgbWFuYWdlIGluZGV4IHNjYW5zIG9uIGJlaGFsZiBvZiB0aGUgY29yZSBleGVj dXRvci4KKyAqCisgKiAyLiBUYWJsZSBBTSB1dGlsaXRpZXMgKHRhYmxlYW1fdXRpbF8qKTogSGVs cGVyIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGFibGUKKyAqICAgIEFNcyBkdXJpbmcgYW1nZXRiYXRj aCBpbmRleCBzY2Fucy4gIFRoZXNlIGhhbmRsZSBjcm9zcy1iYXRjaCBkaXJlY3Rpb24KKyAqICAg IGNoYW5nZXMsIHJlY29yZGluZyBkZWFkIGl0ZW1zIGZvciBhIGxhdGVyIGNhbGwgdG8gYW1raWxs aXRlbXNiYXRjaCwgYW5kCisgKiAgICBmcmVlaW5nIGJhdGNoZXMgd2hlbiB0aGUgdGFibGUgQU0g aXMgZG9uZSB3aXRoIHRoZW0uCisgKgorICogMy4gSW5kZXggQU0gdXRpbGl0aWVzIChpbmRleGFt X3V0aWxfKik6IEhlbHBlciBmdW5jdGlvbnMgY2FsbGVkIGJ5IGluZGV4CisgKiAgICBBTXMgdGhh dCBpbXBsZW1lbnQgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgVGhlc2UgbWFuYWdlIGJhdGNo CisgKiAgICBhbGxvY2F0aW9uLCBpbmRleCBwYWdlIGJ1ZmZlciBsb2NrIHJlbGVhc2UsIGFuZCBi YXRjaCBtZW1vcnkgcmVjeWNsaW5nLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YmF0Y2guYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJjb21tb24vaW50LmgiCisjaW5jbHVkZSAibGliL3F1 bmlxdWUuaCIKKworc3RhdGljIGludAliYXRjaF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwg Y29uc3Qgdm9pZCAqdmIpOworCisvKgorICogU2V0cyB1cCB0aGUgYmF0Y2ggcmluZyBidWZmZXIg c3RydWN0dXJlIGZvciB1c2UgYnkgYW4gaW5kZXggc2Nhbi4KKyAqCisgKiBPbmx5IGNhbGwgaGVy ZSB3aGVuIGFsbCBvZiB0aGUgaW5kZXggcmVsYXRlZCBmaWVsZHMgaW4gJ3NjYW4nIHdlcmUgYWxy ZWFkeQorICogaW5pdGlhbGl6ZWQuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9pbml0KElu ZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvcy52 YWxpZCA9IGZhbHNlOworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7 CisKKwlzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsKKwlzY2FuLT5iYXRjaHJp bmdidWYuaGVhZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICovCisJc2Nhbi0+YmF0 Y2hyaW5nYnVmLm5leHRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggc3RhcnRzIGVtcHR5ICov CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLmRvbmUgPSBmYWxzZTsKKwltZW1zZXQoJnNjYW4tPmJhdGNo cmluZ2J1Zi5jYWNoZSwgMCwgc2l6ZW9mKHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZSkpOworCisJ c2Nhbi0+dXNlYmF0Y2hyaW5nID0gdHJ1ZTsKK30KKworLyoKKyAqIFJlc2V0IHN0YXRlIHVzZWQg Zm9yIGEgYmF0Y2ggaW5kZXggc2NhbgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fcmVzZXQo SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0g JnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJp bmdidWYtPm1hcmtCYXRjaDsKKwlib29sCQltYXJrQmF0Y2hGcmVlZCA9IGZhbHNlOworCisJQXNz ZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3MudmFsaWQg PSBmYWxzZTsKKwliYXRjaHJpbmdidWYtPm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKworCS8qCisJ ICogRW5zdXJlIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIHdvbid0IHNraXAgdGhlIG9sZCBtYXJr QmF0Y2ggaW4gdGhlIGxvb3AKKwkgKiBiZWxvdworCSAqLworCWJhdGNocmluZ2J1Zi0+bWFya0Jh dGNoID0gTlVMTDsKKworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBp ICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBi YXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJaWYgKGJhdGNoID09IG1hcmtC YXRjaCkKKwkJCW1hcmtCYXRjaEZyZWVkID0gdHJ1ZTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9i YXRjaChzY2FuLCBiYXRjaCk7CisJfQorCisJaWYgKCFtYXJrQmF0Y2hGcmVlZCAmJiB1bmxpa2Vs eShtYXJrQmF0Y2gpKQorCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gp OworCisJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+bmV4dEJh dGNoID0gMDsKK30KKworLyoKKyAqIEZyZWUgcmVzb3VyY2VzIGF0IGVuZCBvZiBiYXRjaCBpbmRl eCBzY2FuCisgKgorICogQ2FsbGVkIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBlbmRlZCwg cmlnaHQgYmVmb3JlIHRoZSBvd25pbmcgc2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3YXkuICBD bGVhbnMgdXAgYWxsIGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICovCit2b2lkCitpbmRleF9i YXRjaHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBGcmVlIGFsbCByZW1haW5p bmcgbG9hZGVkIGJhdGNoZXMgKGV2ZW4gbWFya0JhdGNoKSAqLworCXNjYW4tPmJhdGNocmluZ2J1 Zi5kb25lID0gdHJ1ZTsKKwlpbmRleF9iYXRjaHNjYW5fcmVzZXQoc2Nhbik7CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJSW5kZXhT Y2FuQmF0Y2ggY2FjaGVkID0gc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldOworCisJCWlmIChj YWNoZWQgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjYWNoZWQtPmRlYWRJdGVtcykK KwkJCXBmcmVlKGNhY2hlZC0+ZGVhZEl0ZW1zKTsKKwkJcGZyZWUoYmF0Y2hfYWxsb2NfYmFzZShj YWNoZWQsIHNjYW4pKTsKKwl9Cit9CisKKy8qCisgKiBTZXQgYSBtYXJrIGZyb20gc2NhblBvcyBw b3NpdGlvbgorICoKKyAqIFNhdmVzIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24gYW5kIGFzc29j aWF0ZWQgYmF0Y2ggc28gdGhhdCB0aGUgc2NhbiBjYW4KKyAqIGJlIHJlc3RvcmVkIHRvIHRoaXMg cG9pbnQgbGF0ZXIsIHZpYSBhIGNhbGwgdG8gaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zLgor ICogVGhlIG1hcmtlZCBiYXRjaCBpcyByZXRhaW5lZCBhbmQgbm90IGZyZWVkIHVudGlsIGEgbmV3 IG1hcmsgaXMgc2V0IG9yIHRoZQorICogc2NhbiBlbmRzIChvciB1bnRpbCB0aGUgbWFyayBpcyBy ZXN0b3JlZCkuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0 Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hyaW5n YnVmLnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHJpbmdidWYt Pm1hcmtQb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChz Y2FuLCBzY2FuUG9zLT5iYXRjaCk7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hy aW5nYnVmLT5tYXJrQmF0Y2g7CisJYm9vbAkJZnJlZU1hcmtCYXRjaDsKKworCUFzc2VydChzY2Fu LT5NVkNDU2Nhbik7CisKKwkvKgorCSAqIEZyZWUgdGhlIHByZXZpb3VzIG1hcmsgYmF0Y2ggKGlm IGFueSkgLS0gYnV0IG9ubHkgaWYgaXQgaXNuJ3Qgb3VyCisJICogc2NhbkJhdGNoIChkZWZlbnNp dmVseSBtYWtlIHN1cmUgdGhhdCBtYXJrQmF0Y2ggaXNuJ3Qgc29tZSBsYXRlcgorCSAqIHN0aWxs LW5lZWRlZCBiYXRjaCwgdG9vKQorCSAqLworCWlmICghbWFya0JhdGNoIHx8IG1hcmtCYXRjaCA9 PSBzY2FuQmF0Y2gpCisJeworCQkvKiBEZWZpbml0ZWx5IG5vIG1hcmtCYXRjaCB0aGF0IHdlIHNo b3VsZCBmcmVlIG5vdyAqLworCQlmcmVlTWFya0JhdGNoID0gZmFsc2U7CisJfQorCWVsc2UgaWYg KGxpa2VseSghaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2NhbiwgbWFya1Bvcy0+YmF0Y2gpKSkK Kwl7CisJCS8qIERlZmluaXRlbHkgaGF2ZSBhIG5vLWxvbmdlci1sb2FkZWQgbWFya0JhdGNoIHRv IGZyZWUgKi8KKwkJZnJlZU1hcmtCYXRjaCA9IHRydWU7CisJfQorCWVsc2UKKwl7CisJCS8qCisJ CSAqIEl0IGxvb2tzIGxpa2UgbWFya0JhdGNoIGlzIGxvYWRlZC9zdGlsbCBuZWVkZWQgd2l0aGlu IGJhdGNocmluZ2J1Zi4KKwkJICoKKwkJICogaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgaW5kaWNh dGVzIHRoYXQgbWFya3Bvcy0+YmF0Y2ggaXMgbG9hZGVkCisJCSAqIGFscmVhZHksIGJ1dCB3ZSBj YW5ub3QgZnVsbHkgdHJ1c3QgaXQgaGVyZS4gIEl0J3MganVzdCBhYm91dAorCQkgKiBwb3NzaWJs ZSB0aGF0IG1hcmtwb3MtPmJhdGNoIGZhbGxzIHdpdGhpbiBhIHNpbmNlLXJlY3ljbGVkIHJhbmdl IG9mCisJCSAqIGJhdGNoIG9mZnNldCBudW1iZXJzIChmb2xsb3dpbmcgdWludDggb3ZlcmZsb3cp LgorCQkgKgorCQkgKiBNYWtlIHN1cmUgdGhhdCBtYXJrQmF0Y2ggcmVhbGx5IGlzIGxvYWRlZCBi eSBkaXJlY3RseSBjb21wYXJpbmcgaXQKKwkJICogYWdhaW5zdCBhbGwgbG9hZGVkIGJhdGNoZXMu ICBXZSBtdXN0IG5vdCBmYWlsIHRvIHJlbGVhc2UgbWFya0JhdGNoCisJCSAqIHdoZW4gbm9ib2R5 IGVsc2Ugd2lsbCBsYXRlciBvbi4KKwkJICoKKwkJICogTm90ZTogaW4gcHJhY3RpY2Ugd2UncmUg dmVyeSB1bmxpa2VseSB0byBlbmQgdXAgaGVyZS4gIEl0IGlzIHZlcnkKKwkJICogYXR5cGljYWwg Zm9yIGFuIGluZGV4IHNjYW4gb24gdGhlIGlubmVyIHNpZGUgb2YgYSBtZXJnZSBqb2luIHRvCisJ CSAqIGhvbGQgb24gdG8gYSBtYXJrIHRoYXQgdHJhaWxzIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB0 aGlzIG11Y2guCisJCSAqLworCQlmcmVlTWFya0JhdGNoID0gdHJ1ZTsJLyogaS5lLiBpbmRleF9z Y2FuX2JhdGNoX2xvYWRlZCBsaWVkIHRvIHVzICovCisKKwkJZm9yICh1aW50OCBpID0gYmF0Y2hy aW5nYnVmLT5oZWFkQmF0Y2g7IGkgIT0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykKKwkJ eworCQkJaWYgKGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSkgPT0gbWFya0JhdGNoKQorCQkJewor CQkJCS8qIGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkIHdhcyByaWdodC9ubyBvdmVyZmxvdyBoYXBw ZW5lZCAqLworCQkJCWZyZWVNYXJrQmF0Y2ggPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ fQorCX0KKworCWlmIChmcmVlTWFya0JhdGNoKQorCXsKKwkJLyogRnJlZSBtYXJrQmF0Y2gsIHNp bmNlIGl0IGlzbid0IGxvYWRlZC9uZWVkZWQgZm9yIGJhdGNocmluZ2J1ZiAqLworCQliYXRjaHJp bmdidWYtPm1hcmtCYXRjaCA9IE5VTEw7IC8qIGVsc2UgY2FsbCB3b24ndCBmcmVlIG1hcmtCYXRj aCAqLworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gpOworCX0KKwor CS8qIGNvcHkgdGhlIHNjYW4ncyBwb3NpdGlvbiAqLworCWJhdGNocmluZ2J1Zi0+bWFya1BvcyA9 ICpzY2FuUG9zOworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gc2NhbkJhdGNoOworfQorCisv KgorICogUmVzdG9yZSBtYXJrIHRvIHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBSZXN0b3JlcyB0 aGUgc2NhbiB0byBhIHBvc2l0aW9uIHNhdmVkIGJ5IGluZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyBl YXJsaWVyLgorICogVGhlIHNjYW4ncyBtYXJrUG9zIGJlY29tZXMgaXRzIHNjYW5Qb3MuICBUaGUg bWFya2VkIGJhdGNoIGlzIHJlc3RvcmVkIGFzCisgKiB0aGUgY3VycmVudCBzY2FuQmF0Y2ggd2hl biBuZWVkZWQuCisgKgorICogV2UganVzdCBkaXNjYXJkIGFsbCBiYXRjaGVzIChvdGhlciB0aGFu IG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAorICogZXhjZXB0IHdoZW4gbWFya0JhdGNo IGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4KKyAqLwordm9pZAoraW5k ZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJp bmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5n SXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlCYXRjaFJp bmdJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlJbmRleFNjYW5C YXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlJbmRleFNjYW5CYXRj aCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKwor CUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisJQXNzZXJ0KCFiYXRjaHJpbmdidWYtPmRvbmUpOwor CUFzc2VydChtYXJrUG9zLT52YWxpZCk7CisKKwlpZiAoc2NhbkJhdGNoID09IG1hcmtCYXRjaCkK Kwl7CisJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVlZG4ndCBjaGFuZ2Ug YmF0Y2hyaW5nYnVmICovCisJCUFzc2VydChzY2FuUG9zLT5iYXRjaCA9PSBtYXJrUG9zLT5iYXRj aCk7CisKKwkJc2NhblBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CisJCXJldHVybjsKKwl9CisK KwkvKgorCSAqIG1hcmtCYXRjaCBpcyBiZWhpbmQgc2NhbkJhdGNoLCBhbmQgc28gbXVzdCBub3Qg YmUgc2F2ZWQgaW4gcmluZyBidWZmZXIKKwkgKiBhbnltb3JlLiAgV2UgaGF2ZSB0byBkZWFsIHdp dGggcmVzdG9yaW5nIHRoZSBtYXJrIHRoZSBoYXJkIHdheTogYnkKKwkgKiBpbnZhbGlkYXRpbmcg YWxsIG90aGVyIGxvYWRlZCBiYXRjaGVzLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBjYXNlCisJ ICogd2hlcmUgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgYW5kIHRoZSBzY2FuIGFjdHVhbGx5 IGNyb3NzZXMKKwkgKiBiYXRjaC9pbmRleCBwYWdlIGJvdW5kYXJpZXMgKHNlZSB0YWJsZWFtX3V0 aWxfYmF0Y2hfZGlyY2hhbmdlKS4KKwkgKgorCSAqIEZpcnN0LCBmcmVlIGFsbCBiYXRjaGVzIHRo YXQgYXJlIHN0aWxsIGluIHRoZSByaW5nIGJ1ZmZlci4KKwkgKi8KKwlmb3IgKHVpbnQ4IGkgPSBi YXRjaHJpbmdidWYtPmhlYWRCYXRjaDsgaSAhPSBiYXRjaHJpbmdidWYtPm5leHRCYXRjaDsgaSsr KQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGkp OworCisJCUFzc2VydChiYXRjaCAhPSBtYXJrQmF0Y2gpOworCisJCXRhYmxlYW1fdXRpbF9mcmVl X2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisKKwkvKgorCSAqIE5leHQgImFwcGVuZCIgc3RhbmRh bG9uZSBtYXJrQmF0Y2gsIG1ha2luZyB0aGUgcmluZyBidWZmZXIgYXBwZWFyIGFzIGlmCisJICog aXQgd2FzIHRoZSBmaXJzdCBiYXRjaCBldmVyIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2ggZm9yIHRo ZSBzY2FuCisJICovCisJbWFya1Bvcy0+YmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+c2NhblBv cyA9ICptYXJrUG9zOworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gYmF0Y2hyaW5nYnVmLT5o ZWFkQmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsKKwlpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChzY2Fu LCBtYXJrQmF0Y2gpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1 Zi0+c2NhblBvcy5iYXRjaCkgPT0gbWFya0JhdGNoKTsKKworCS8qCisJICogRmluYWxseSwgY2Fs bCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBrbm93IHRvIGludmFsaWRhdGUgYW55IHByaXZh dGUKKwkgKiBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jl c3MKKwkgKi8KKwlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQp CisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4sIG1hcmtC YXRjaCk7CisKKwkvKgorCSAqIE5vdGU6IG1hcmtCYXRjaC5kZWFkSXRlbXNbXSBtaWdodCBhbHJl YWR5IGNvbnRhaW4gZGVhZCBpdGVtcywgYW5kIG1pZ2h0CisJICogeWV0IGhhdmUgbW9yZSBkZWFk IGl0ZW1zIHNhdmVkLiAgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2ggaXMgcHJlcGFyZWQKKwkgKiBm b3IgdGhhdC4KKwkgKi8KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCQl1dGlsaXR5IGZ1bmN0aW9ucyBj YWxsZWQgYnkgdGFibGUgQU1zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEhhbmRsZSBjcm9z cy1iYXRjaCBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUg QU0gd2hlbiBpdHMgc2NhbiBjaGFuZ2VzIGRpcmVjdGlvbiBpbiBhIHdheSB0aGF0CisgKiBuZWNl c3NpdGF0ZXMgYmFja2luZyB0aGUgc2NhbiB1cCB0byBhbiBpbmRleCBwYWdlIG9yaWdpbmFsbHkg YXNzb2NpYXRlZAorICogd2l0aCBhIG5vdy1mcmVlZCBiYXRjaC4KKyAqCisgKiBXaGVuIHdlIHJl dHVybiwgYmF0Y2hyaW5nYnVmIHdpbGwgb25seSBjb250YWluIG9uZSBiYXRjaCAodGhlIGN1cnJl bnQKKyAqIGhlYWRCYXRjaC9zY2FuQmF0Y2gpLiAgQ2FsbGVyIGNhbiB0aGVuIHNhZmVseSBwYXNz IHRoaXMgYmF0Y2ggdG8gYW1nZXRiYXRjaAorICogdG8gZGV0ZXJtaW5lIHdoaWNoIGJhdGNoIGNv bWVzIG5leHQgaW4gdGhlIG5ldyBzY2FuIGRpcmVjdGlvbi4gIEZyb20gdGhhdAorICogcG9pbnQg b24gYmF0Y2hyaW5nYnVmIHdpbGwgbG9vayBhcyBpZiBvdXIgbmV3IHNjYW4gZGlyZWN0aW9uIGhh ZCBiZWVuIHVzZWQKKyAqIGZyb20gdGhlIHN0YXJ0LiAgVGhpcyBhcHByb2FjaCBpc24ndCBwYXJ0 aWN1bGFybHkgZWZmaWNpZW50LCBidXQgaXQgd29ya3MKKyAqIHdlbGwgZW5vdWdoIGZvciB3aGF0 IG91Z2h0IHRvIGJlIGEgcmVsYXRpdmVseSByYXJlIG9jY3VycmVuY2UuCisgKi8KK3ZvaWQKK3Rh YmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNo UmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlJbmRleFNj YW5CYXRjaCBoZWFkOworCisJLyoKKwkgKiBSZWxlYXNlIGJhdGNoZXMgc3RhcnRpbmcgZnJvbSB0 aGUgY3VycmVudCAidGFpbCIgYmF0Y2gsIHdvcmtpbmcKKwkgKiBiYWNrd2FyZHMgdW50aWwgdGhl IGN1cnJlbnQgaGVhZCBiYXRjaCAod2hpY2ggbXVzdCBhbHNvIGJlIHRoZSBjdXJyZW50CisJICog c2NhbkJhdGNoKSBpcyB0aGUgb25seSBiYXRjaCBoYXNuJ3QgYmVlbiBmcmVlZAorCSAqLworCXdo aWxlIChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID4gMSkKKwl7CisJCUluZGV4U2NhbkJh dGNoIHRhaWwgPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sCisJCQkJCQkJCQkJCSAgIGJhdGNocmlu Z2J1Zi0+bmV4dEJhdGNoIC0gMSk7CisKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2Nhbiwg dGFpbCk7CisJCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoLS07CisJfQorCisJLyogc2NhbkJhdGNo IGlzIG5vdyB0aGUgb25seSBiYXRjaCBzdGlsbCBsb2FkZWQgKi8KKwlBc3NlcnQoYmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKTsKKworCS8qCisJ ICogRGVhbCB3aXRoIGluZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhl IHByb2dyZXNzIG9mIHRoZQorCSAqIHNjYW4uICBEbyB0aGlzIGJ5IGZsaXBwaW5nIHRoZSBiYXRj aC1sZXZlbCBzY2FuIGRpcmVjdGlvbiwgYW5kIHRoZW4KKwkgKiBjYWxsaW5nIHRoZSBpbmRleCBB TSdzIGFtcG9zcmVzZXQuCisJICovCisJaGVhZCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0 Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCWhlYWQtPmRpciA9IC1oZWFkLT5kaXI7CisJaWYgKHNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBoZWFkKTsKK30KKworLyoKKyAqIFJl Y29yZCB0aGF0IHNjYW5Qb3MgaXRlbSBpcyBkZWFkCisgKgorICogUmVjb3JkcyBhbiBvZmZzZXQg dG8gdGhlIGN1cnJlbnQgc2NhbkJhdGNoL3NjYW5Qb3MgaXRlbSwgc2F2aW5nIGl0IGluCisgKiBz Y2FuQmF0Y2gncyBkZWFkSXRlbXMgYXJyYXkuICBUaGUgaXRlbXMnIGluZGV4IHR1cGxlcyB3aWxs IGxhdGVyIGJlCisgKiBtYXJrZWQgTFBfREVBRCB3aGVuIGN1cnJlbnQgc2NhbkJhdGNoIGlzIGZy ZWVkLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbShJbmRleFNjYW5E ZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJp bmdidWYuc2NhblBvczsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2Jh dGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCWlmIChzY2FuQmF0Y2gtPmRlYWRJdGVtcyA9 PSBOVUxMKQorCQlzY2FuQmF0Y2gtPmRlYWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIHNjYW4t Pm1heGl0ZW1zYmF0Y2gpOworCWlmIChzY2FuQmF0Y2gtPm51bURlYWQgPCBzY2FuLT5tYXhpdGVt c2JhdGNoKQorCQlzY2FuQmF0Y2gtPmRlYWRJdGVtc1tzY2FuQmF0Y2gtPm51bURlYWQrK10gPSBz Y2FuUG9zLT5pdGVtOworfQorCisvKgorICogUmVsZWFzZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3 aXRoIGEgYmF0Y2gKKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0ncyBvcmRlcmVkIGluZGV4IHNj YW4gaW1wbGVtZW50YXRpb24gd2hlbiBpdCBpcyBmaW5pc2hlZAorICogd2l0aCBhIGJhdGNoIGFu ZCB3aXNoZXMgdG8gcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgorICoKKyAqIFdlIGNhbGwgYW1yZWxl YXNlYmF0Y2ggdG8gcmVsZWFzZSBhbnkgaW5kZXggQU0gcmVzb3VyY2VzIChlLmcuIGJ1ZmZlciBw aW5zKQorICogdGhhdCBoYXZlbid0IGJlZW4gcmVsZWFzZWQgeWV0LiAgRm9yIHBsYWluIE1WQ0Mg c2NhbnMsIHRoZSBwaW4gd2FzIGFscmVhZHkKKyAqIHJlbGVhc2VkIGVhZ2VybHksIHNvIGFtcmVs ZWFzZWJhdGNoIGlzIGEgbm8tb3AuICBJbmRleC1vbmx5IHNjYW5zIG11c3QKKyAqIGRlbGF5IGRy b3BwaW5nIHRoZSBwaW4gdW50aWwgdmlzaWJpbGl0eSBpcyByZXNvbHZlZCBmb3IgYWxsIGl0ZW1z IGluIHRoZQorICogYmF0Y2gsIHNvIGFtcmVsZWFzZWJhdGNoIG1heSBzdGlsbCBuZWVkIHRvIHJl bGVhc2UgaGVyZS4gIEZvciBub24tTVZDQworICogc25hcHNob3Qgc2NhbnMsIHRoZSBwaW4gaXMg YWx3YXlzIGhlbGQgdW50aWwgYW1yZWxlYXNlYmF0Y2ggcmVsZWFzZXMgaXQuCisgKgorICogV2hl biB0aGUgYmF0Y2ggaGFzIGRlYWQgaXRlbXMgKG51bURlYWQgPiAwKSBhbmQgdGhlIGluZGV4IEFN IHByb3ZpZGVzIGFuCisgKiBhbWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNrLCB3ZSBjYWxsIGl0IHRv IHNldCBMUF9ERUFEIGJpdHMgaW4gdGhlIGluZGV4CisgKiBwYWdlLiAgV2UgYWx3YXlzIHJlY3lj bGUgdGhlIGJhdGNoIG1lbW9yeSB2aWEgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuCisgKgor ICogTm90ZTogQ2FsbGluZyBoZXJlIHdoZW4gJ2JhdGNoJyBpcyBhbHNvIGJhdGNocmluZ2J1Zi5t YXJrQmF0Y2ggaXMgYSBuby1vcC4KKyAqIENhbGxlcnMgdGhhdCBkb24ndCB3YW50IHRoaXMgc2hv dWxkIHNldCBiYXRjaHJpbmdidWYubWFya0JhdGNoIHRvIE5VTEwKKyAqIGJlZm9yZSBjYWxsaW5n IHVzLiAgTm90ZSB0aGF0IG1hcmtCYXRjaCBoYXMgdG8gYmUgZXhwbGljaXRseSBmcmVlZC4KKyAq Lwordm9pZAordGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBkb24ndCBmcmVlIGNhbGxlcidzIGJhdGNoIGlmIGl0 IGlzIHNjYW4ncyBjdXJyZW50IG1hcmtCYXRjaCAqLworCWlmIChiYXRjaCA9PSBzY2FuLT5iYXRj aHJpbmdidWYubWFya0JhdGNoKQorCQlyZXR1cm47CisKKwkvKiBSZWxlYXNlIGludGVybG9jayAo ZS5nLiwgYnVmZmVyIHBpbikgd2hlbiBzdGlsbCBoZWxkIGJ5IGluZGV4IEFNICovCisJaWYgKCFz Y2FuLT5iYXRjaEltbWVkaWF0ZVJlbGVhc2UpCisJCXRhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNo KHNjYW4sIGJhdGNoKTsKKworCS8qCisJICogTGV0IHRoZSBpbmRleCBBTSBzZXQgTFBfREVBRCBi aXRzIGluIHRoZSBpbmRleCBwYWdlLCBpZiBhcHBsaWNhYmxlLgorCSAqCisJICogYmF0Y2guZGVh ZEl0ZW1zW10gaXMgbm93IGluIHdoYXRldmVyIG9yZGVyIHRoZSBzY2FuIHJldHVybmVkIGl0ZW1z IGluLgorCSAqIFdlIG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJRCB0d2lj ZS4KKwkgKgorCSAqIFNvcnQgYW5kIHVuaXF1ZS1pZnkgZGVhZEl0ZW1zW10uICBUaGF0IHdheSB0 aGUgaW5kZXggQU0gY2FuIHNhZmVseQorCSAqIGFzc3VtZSB0aGF0IGl0ZW1zIHdpbGwgYWx3YXlz IGJlIGluIHRoZWlyIG9yaWdpbmFsIGluZGV4IHBhZ2Ugb3JkZXIuCisJICovCisJaWYgKGJhdGNo LT5udW1EZWFkID4gMCAmJgorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1raWxs aXRlbXNiYXRjaCAhPSBOVUxMKQorCXsKKwkJaWYgKGJhdGNoLT5udW1EZWFkID4gMSkKKwkJewor CQkJcXNvcnQoYmF0Y2gtPmRlYWRJdGVtcywgYmF0Y2gtPm51bURlYWQsIHNpemVvZihpbnQpLAor CQkJCSAgYmF0Y2hfY29tcGFyZV9pbnQpOworCQkJYmF0Y2gtPm51bURlYWQgPSBxdW5pcXVlKGJh dGNoLT5kZWFkSXRlbXMsIGJhdGNoLT5udW1EZWFkLAorCQkJCQkJCQkJIHNpemVvZihpbnQpLCBi YXRjaF9jb21wYXJlX2ludCk7CisJCX0KKworCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1raWxsaXRlbXNiYXRjaChzY2FuLCBiYXRjaCk7CisJfQorCisJLyoKKwkgKiBVc2UgY2Fj aGUsIGp1c3QgbGlrZSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZSBkb2VzIGl0LgorCSAqLwor CWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJewor CQlpZiAoc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldID09IE5VTEwpCisJCXsKKwkJCS8qIGZv dW5kIGVtcHR5IHNsb3QsIHdlJ3JlIGRvbmUgKi8KKwkJCXNjYW4tPmJhdGNocmluZ2J1Zi5jYWNo ZVtpXSA9IGJhdGNoOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGJhdGNoLT5kZWFkSXRl bXMpCisJCXBmcmVlKGJhdGNoLT5kZWFkSXRlbXMpOworCXBmcmVlKGJhdGNoX2FsbG9jX2Jhc2Uo YmF0Y2gsIHNjYW4pKTsKK30KKworLyoKKyAqIFJlbGVhc2UgYmF0Y2ggcmVzb3VyY2VzIGhlbGQg YnkgdGhlIGluZGV4IEFNCisgKgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mg c2FmZSB0byByZWxlYXNlIHdoYXRldmVyIHJlc291cmNlcyB0aGUKKyAqIGluZGV4IEFNIGhvbGRz IHRvIHByZXZlbnQgdW5zYWZlIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0KKyAq ICh0eXBpY2FsbHkgYSBidWZmZXIgcGluIG9uIHRoZSBiYXRjaCdzIGluZGV4IHBhZ2UgaW4gYmF0 Y2gncyBvcGFxdWUgYXJlYSkuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNo KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJLyogT25seSBz dXBwb3NlZCB0byBiZSBjYWxsZWQgZHVyaW5nICFiYXRjaEltbWVkaWF0ZVJlbGVhc2Ugc2NhbnMg Ki8KKwlBc3NlcnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRlUmVsZWFzZSk7CisKKwlzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1yZWxlYXNlYmF0Y2goc2NhbiwgYmF0Y2gpOworfQorCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgkJCXV0aWxpdHkgZnVuY3Rpb25zIGNhbGxlZCBieSBhbWdldGJhdGNoIGlu ZGV4IEFNcworICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBtYW5hZ2UgYmF0Y2ggYWxsb2NhdGlvbiwg dW5sb2NrL3BpbiBtYW5hZ2VtZW50LCBhbmQgYmF0Y2gKKyAqIHJlc291cmNlIHJlY3ljbGluZy4g IEluZGV4IEFNcyBpbXBsZW1lbnRpbmcgYW1nZXRiYXRjaCBzaG91bGQgdXNlIHRoZXNlCisgKiBy YXRoZXIgdGhhbiBtYW5hZ2luZyBidWZmZXJzIGRpcmVjdGx5LgorICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK Ky8qCisgKiBVbmxvY2sgYmF0Y2gncyBpbmRleCBwYWdlIGJ1ZmZlciBsb2NrCisgKgorICogVW5s b2NrcyB0aGUgZ2l2ZW4gYnVmZmVyIGluIHByZXBhcmF0aW9uIGZvciBhbWdldGJhdGNoIHJldHVy bmluZyBpdGVtcworICogc2F2ZWQgaW4gdGhhdCBiYXRjaC4gIFBlcmZvcm1zIGV4dHJhIHN0ZXBz IHJlcXVpcmVkIGJ5IGFtZ2V0YmF0Y2ggY2FsbGVycworICogaW4gcGFzc2luZy4KKyAqCisgKiBP bmx5IGNhbGwgaGVyZSB3aGVuIGEgYmF0Y2ggaGFzIG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0ZW1z IHRvIHJldHVybiB1c2luZworICogYW1nZXRiYXRjaCAob3IgZm9yIGFtZ2V0Yml0bWFwIHRvIGxv YWQgaW50byBpdHMgYml0bWFwIG9mIG1hdGNoaW5nIFRJRHMpLgorICogV2hlbiBhbiBpbmRleCBw YWdlIGhhcyBubyBtYXRjaGVzLCBpdCdzIGFsd2F5cyBzYWZlIGZvciBpbmRleCBBTXMgdG8gZHJv cAorICogYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiBmb3IgdGhlbXNlbHZlcy4KKyAqCisgKiBO b3RlOiBJdCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMgdGhhdCBpbXBsZW1lbnQgYm90aCBh bWdldGJhdGNoIGFuZAorICogYW1nZXRiaXRtYXAgdG8gY29uc2lzdGVudGx5IHVzZSB0aGUgc2Ft ZSBiYXRjaCBtYW5hZ2VtZW50IGFwcHJvYWNoLCBzaW5jZQorICogdGhhdCBhdm9pZHMgaW50cm9k dWNpbmcgc3BlY2lhbCBjYXNlcyB0byBsb3dlci1sZXZlbCBjb2RlLiAgV2UgZHJvcCBib3RoCisg KiB0aGUgbG9jayBhbmQgdGhlIHBpbiBvbiBiYXRjaCdzIHBhZ2Ugb24gYmVoYWxmIG9mIGFtZ2V0 Yml0bWFwIGNhbGxlcnMuCisgKgorICogRm9yIGFtZ2V0YmF0Y2ggY2FsbGVycywgd2hlbiBiYXRj aEltbWVkaWF0ZVJlbGVhc2UgaXMgc2V0IChwbGFpbiBNVkNDCisgKiBzY2FucyksIHdlIGFsc28g cmVsZWFzZSB0aGUgcGluIGhlcmUuICBPdGhlcndpc2UgdGhlIHRhYmxlIEFNIHdpbGwgY2FsbAor ICogYW1yZWxlYXNlYmF0Y2ggbGF0ZXIgd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgcGluLgor ICovCit2b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJ1ZmZlciBidWYpCit7CisJLyogYmF0Y2ggbXVzdCBoYXZl IG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNz ZXJ0KGJhdGNoLT5maXJzdEl0ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5s YXN0SXRlbSk7CisKKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJLyogYW1nZXRiYXRj aCAobm90IGFtZ2V0Yml0bWFwKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlv biAhPSBOVUxMKTsKKworCQkvKgorCQkgKiBIYXZlIHRvIHNldCBiYXRjaC0+bHNuIHNvIHRoYXQg YW1raWxsaXRlbXNiYXRjaCBoYXMgYSB3YXkgdG8gZGV0ZWN0CisJCSAqIHdoZW4gY29uY3VycmVu dCBoZWFwIFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4KKwkJICogcGxh Y2UuICBJdCdsbCBvbmx5IGJlIHNhZmUgdG8gc2V0IGFueSBpbmRleCB0dXBsZSBMUF9ERUFEIGJp dHMgd2hlbgorCQkgKiB0aGUgcGFnZSBMU04gaGFzbid0IGFkdmFuY2VkLgorCQkgKi8KKwkJYmF0 Y2gtPmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCisJCS8qIERyb3AgdGhlIGxvY2sg Ki8KKwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwkJaWYgKHNjYW4t PmJhdGNoSW1tZWRpYXRlUmVsZWFzZSkKKwkJeworCQkJLyoKKwkJCSAqIFBsYWluIE1WQ0Mgc2Nh bjogcmVsZWFzZSB0aGUgcGluIG5vdy4gIE5vIGFtcmVsZWFzZWJhdGNoCisJCQkgKiBjYWxsYmFj ayB3aWxsIGJlIG5lZWRlZCBsYXRlci4gIFRoZSBpbmRleCBBTSBjYWxsZXIgbXVzdCBjbGVhcgor CQkJICogaXRzIG93biBvcGFxdWUgYnVmIGZpZWxkIGFmdGVyIHdlIHJldHVybi4KKwkJCSAqLwor CQkJUmVsZWFzZUJ1ZmZlcihidWYpOworCQl9CisKKwkJLyogZWxzZTogdGFibGUgQU0gd2lsbCBj YWxsIGFtcmVsZWFzZWJhdGNoIHdoZW4gcmVhZHkgKi8KKwl9CisJZWxzZQorCXsKKwkJLyogYW1n ZXRiaXRtYXAgKG5vdCBhbWdldGJhdGNoKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBS ZWxhdGlvbiA9PSBOVUxMKTsKKworCQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4g Ki8KKwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCVJlbGVhc2VCdWZm ZXIoYnVmKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBiYXRjaAorICoKKyAqIFVz ZWQgYnkgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCBhbWdldGJhdGNoIGludGVyZmFjZSAoYm90aCBk dXJpbmcgYW1nZXRiYXRjaAorICogYW5kIGFtZ2V0Yml0bWFwIHNjYW5zKS4KKyAqCisgKiBSZXR1 cm5zIEluZGV4U2NhbkJhdGNoIHdpdGggc3BhY2UgdG8gZml0IHNjYW4tPm1heGl0ZW1zYmF0Y2gt bWFueQorICogQmF0Y2hNYXRjaGluZ0l0ZW0gZW50cmllcy4gIFRoaXMgd2lsbCBlaXRoZXIgYmUg YSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2gsIG9yCisgKiBhIGJhdGNoIHJlY3ljbGVkIGZyb20gdGhl IGNhY2hlIG1hbmFnZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuICBTZWUKKyAqIGNv bW1lbnRzIGFib3ZlIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgorICoKKyAqIEhvdXNla2Vl cGluZyBmaWVsZHMgKGJ1Ziwga25vd25FbmRCYWNrd2FyZC9Gb3J3YXJkLCBmaXJzdEl0ZW0sIGxh c3RJdGVtLAorICogbnVtRGVhZCwgZGVhZEl0ZW1zLCBjdXJyVHVwbGVzKSBhcmUgaW5pdGlhbGl6 ZWQgaGVyZS4gIFRoZSB0YWJsZSBBTSdzCisgKiBiYXRjaF9pbml0IGNhbGxiYWNrIGlzIGludm9r ZWQgaGVyZSB0byBpbml0aWFsaXplIHRoZSB0YWJsZSBBTSBvcGFxdWUgYXJlYS4KKyAqIFRoZSBp bmRleCBBTSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgaW4gaXRzIHBlci1iYXRj aCBvcGFxdWUKKyAqIGZpZWxkcyBhbmQgdGhlIG1hdGNoaW5nIGl0ZW1zW10gYXJyYXkuCisgKgor ICogT25jZSBwb3B1bGF0ZWQsIGNhbGxlciBlaXRoZXIgcGFzc2VzIHRoZSBiYXRjaCB0byBpbmRl eGFtX3V0aWxfYmF0Y2hfdW5sb2NrCisgKiAoYWhlYWQgb2YgYW1nZXRiYXRjaCByZXR1cm5pbmcg aXQpLCBvciB0byBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZSAod2hlbgorICogdGhlIHBhZ2Ug aGFkIG5vIG1hdGNoZXMpLgorICovCitJbmRleFNjYW5CYXRjaAoraW5kZXhhbV91dGlsX2JhdGNo X2FsbG9jKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5V TEw7CisJYm9vbAkJbmV3X2FsbG9jID0gZmFsc2U7CisKKwkvKgorCSAqIExhemlseSBjb21wdXRl IGJhdGNoX3RhYmxlX29mZnNldCBvbiBmaXJzdCBhbGxvY2F0aW9uLiAgVGhpcyBjb21iaW5lcwor CSAqIHRoZSB0YWJsZSBBTSBhbmQgaW5kZXggQU0gb3BhcXVlIHNpemVzIGludG8gYSBzaW5nbGUg b2Zmc2V0IHRoYXQgY2FuIGJlCisJICogdXNlZCB0byBmaW5kIHRoZSB0YWJsZSBBTSBvcGFxdWUg YXJlYSAoYW5kIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFzZSkKKwkgKiBmcm9tIHRoZSBiYXRjaCBw b2ludGVyLgorCSAqLworCWlmIChzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQgPT0gMCAmJgorCQko c2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPiAwIHx8CisJCSAoc2Nhbi0+eHNfaGVhcGZl dGNoICYmIHNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfb3BhcXVlX3NpemUgPiAwKSkpCisJewor CQl1aW50MTYJCXRhYmxlX29wYXF1ZSA9IHNjYW4tPnhzX2hlYXBmZXRjaCA/CisJCQlzY2FuLT54 c19oZWFwZmV0Y2gtPmJhdGNoX29wYXF1ZV9zaXplIDogMDsKKworCQlzY2FuLT5iYXRjaF90YWJs ZV9vZmZzZXQgPSB0YWJsZV9vcGFxdWUgKworCQkJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3Np emU7CisJfQorCisJLyogRmlyc3QgbG9vayBmb3IgYW4gZXhpc3RpbmcgYmF0Y2ggZnJvbSB0aGUg Y2FjaGUgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJZm9yIChpbnQgaSA9IDA7 IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwkJeworCQkJaWYgKHNjYW4tPmJh dGNocmluZ2J1Zi5jYWNoZVtpXSAhPSBOVUxMKQorCQkJeworCQkJCS8qIFJldHVybiBjYWNoZWQg dW5yZWZlcmVuY2VkIGJhdGNoICovCisJCQkJYmF0Y2ggPSBzY2FuLT5iYXRjaHJpbmdidWYuY2Fj aGVbaV07CisJCQkJc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldID0gTlVMTDsKKwkJCQlicmVh azsKKwkJCX0KKwkJfQorCX0KKwllbHNlIGlmIChzY2FuLT54c19iaXRtYXBfYmF0Y2ggIT0gTlVM TCkKKwl7CisJCS8qCisJCSAqIFJldXNlIGNhY2hlZCBiYXRjaCBmcm9tIHByaW9yIGFtZ2V0Yml0 bWFwIGl0ZXJhdGlvbi4gIFRoaXMgcGF0aCBpcworCQkgKiBoaXQgb24gZXZlcnkgYW1nZXRiaXRt YXAgY2FsbCBoZXJlIGFmdGVyIHRoZSBzY2FuJ3MgZmlyc3QuCisJCSAqLworCQliYXRjaCA9IHNj YW4tPnhzX2JpdG1hcF9iYXRjaDsKKwkJc2Nhbi0+eHNfYml0bWFwX2JhdGNoID0gTlVMTDsKKwl9 CisKKwlpZiAoIWJhdGNoKQorCXsKKwkJU2l6ZQkJcHJlZml4X3N6OworCQlTaXplCQliYXNlX3N6 OworCQlTaXplCQl0cmFpbGluZ19zejsKKwkJU2l6ZQkJYWxsb2NzejsKKwkJY2hhcgkgICAqcmF3 OworCisJCS8qIEFNIG9wYXF1ZSBhcmVhcyBiZWZvcmUgdGhlIGJhdGNoIHBvaW50ZXIgKi8KKwkJ cHJlZml4X3N6ID0gc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0OworCisJCS8qIEluZGV4U2NhbkJh dGNoRGF0YSBoZWFkZXIgKyBpdGVtc1tdICovCisJCWJhc2Vfc3ogPSBvZmZzZXRvZihJbmRleFNj YW5CYXRjaERhdGEsIGl0ZW1zKSArCisJCQlzaXplb2YoQmF0Y2hNYXRjaGluZ0l0ZW0pICogc2Nh bi0+bWF4aXRlbXNiYXRjaDsKKworCQkvKgorCQkgKiBUcmFpbGluZyBkYXRhIGFmdGVyIGl0ZW1z W106IHRhYmxlIEFNIHBlci1pdGVtIGRhdGEgKGUuZy4gdmlzSW5mbykKKwkJICogYW5kIGN1cnJU dXBsZXMgaW5kZXggQU0gdHVwbGUgd29ya3NwYWNlLgorCQkgKi8KKwkJdHJhaWxpbmdfc3ogPSAw OworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQlpZiAoc2Nhbi0+eHNfaGVhcGZl dGNoICYmCisJCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplID4gMCkK KwkJCQl0cmFpbGluZ19zeiArPSBNQVhBTElHTihzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Bl cl9pdGVtX3NpemUgKgorCQkJCQkJCQkJCXNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJdHJhaWxp bmdfc3ogKz0gc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTsKKwkJfQorCisJCWFsbG9jc3og PSBwcmVmaXhfc3ogKyBNQVhBTElHTihiYXNlX3N6KSArIHRyYWlsaW5nX3N6OworCQlyYXcgPSBw YWxsb2MoYWxsb2Nzeik7CisJCWJhdGNoID0gKEluZGV4U2NhbkJhdGNoKSAocmF3ICsgcHJlZml4 X3N6KTsKKworCQkvKiBTZXQgdXAgY3VyclR1cGxlcyBwb2ludGVyIGZvciBpbmRleC1vbmx5IHNj YW5zICovCisJCWlmIChzY2FuLT54c193YW50X2l0dXAgJiYgc2Nhbi0+YmF0Y2hfdHVwbGVzX3dv cmtzcGFjZSA+IDApCisJCXsKKwkJCVNpemUJCWl0ZW1zRW5kID0gTUFYQUxJR04oYmFzZV9zeik7 CisJCQlTaXplCQl0YWJsZVRyYWlsaW5nID0gMDsKKworCQkJaWYgKHNjYW4tPnhzX2hlYXBmZXRj aCAmJgorCQkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSA+IDApCisJ CQkJdGFibGVUcmFpbGluZyA9IE1BWEFMSUdOKHNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfcGVy X2l0ZW1fc2l6ZSAqCisJCQkJCQkJCQkJIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJYmF0Y2gt PmN1cnJUdXBsZXMgPSAoY2hhciAqKSBiYXRjaCArIGl0ZW1zRW5kICsgdGFibGVUcmFpbGluZzsK KwkJfQorCQllbHNlCisJCQliYXRjaC0+Y3VyclR1cGxlcyA9IE5VTEw7CisKKwkJLyoKKwkJICog QmF0Y2hlcyBhbGxvY2F0ZSBkZWFkSXRlbXMgbGF6aWx5ICh0aG91Z2ggbm90ZSB0aGF0IGNhY2hl ZCBiYXRjaGVzCisJCSAqIGtlZXAgdGhlaXIgZGVhZEl0ZW1zIGFsbG9jYXRpb24gd2hlbiByZWN5 Y2xlZCkKKwkJICovCisJCWJhdGNoLT5kZWFkSXRlbXMgPSBOVUxMOworCQluZXdfYWxsb2MgPSB0 cnVlOworCX0KKworCS8qIHhzX3dhbnRfaXR1cCBzY2FucyBtdXN0IGdldCBhIGN1cnJUdXBsZXMg c3BhY2UgKi8KKwlBc3NlcnQoIShzY2FuLT54c193YW50X2l0dXAgJiYgc2Nhbi0+YmF0Y2hfdHVw bGVzX3dvcmtzcGFjZSA+IDAgJiYKKwkJCSBiYXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKSk7CisK KwkvKiBMZXQgdGhlIHRhYmxlIEFNIGluaXRpYWxpemUgaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJl YSAqLworCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCisJCXRhYmxlX2luZGV4X2JhdGNoX2luaXQo c2NhbiwgYmF0Y2gsIG5ld19hbGxvYyk7CisKKwkvKiBzaGFyZWQgaW5pdGlhbGl6YXRpb24gKi8K KwliYXRjaC0+a25vd25FbmRCYWNrd2FyZCA9IGZhbHNlOworCWJhdGNoLT5rbm93bkVuZEZvcndh cmQgPSBmYWxzZTsKKwliYXRjaC0+Zmlyc3RJdGVtID0gLTE7CisJYmF0Y2gtPmxhc3RJdGVtID0g LTE7CisJYmF0Y2gtPm51bURlYWQgPSAwOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICog UmVsZWFzZSBhbGxvY2F0ZWQgYmF0Y2gKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBi eSBpbmRleCBBTXMgdG8gcmVsZWFzZSBhIGJhdGNoIGFsbG9jYXRlZCBieQorICogaW5kZXhhbV91 dGlsX2JhdGNoX2FsbG9jLiAgQmF0Y2hlcyBhcmUgY2FjaGVkIGhlcmUgZm9yIHJldXNlICh3aGVu IHNjYW4KKyAqIGhhc24ndCBhbHJlYWR5IGZpbmlzaGVkKSB0byByZWR1Y2UgcGFsbG9jL3BmcmVl IG92ZXJoZWFkLgorICoKKyAqIEl0J3Mgc2FmZSB0byByZWxlYXNlIGEgYmF0Y2ggaW1tZWRpYXRl bHkgd2hlbiBpdCB3YXMgdXNlZCB0byByZWFkIGEgcGFnZQorICogdGhhdCByZXR1cm5lZCBubyBt YXRjaGVzIHRvIHRoZSBzY2FuLiAgQmF0Y2hlcyBhY3R1YWxseSByZXR1cm5lZCBieSBpbmRleAor ICogQU0ncyBhbWdldGJhdGNoIHJvdXRpbmUgKGkuZS4gYmF0Y2hlcyBmb3IgcGFnZXMgd2l0aCBv bmUgb3IgbW9yZSBtYXRjaGVzKQorICogbXVzdCBiZSByZWxlYXNlZCBieSB0YWJsZWFtX3V0aWxf ZnJlZV9iYXRjaCwgd2hpY2ggY2FsbHMgaGVyZSBhZnRlciB0aGUKKyAqIGluZGV4IEFNJ3MgYW1r aWxsaXRlbXNiYXRjaCByb3V0aW5lIChpZiBhbnkpLiAgSW5kZXggQU1zIHRoYXQgdXNlIGJhdGNo ZXMKKyAqIHNob3VsZCBjYWxsIGhlcmUgdG8gcmVsZWFzZSBhIGJhdGNoIGZyb20gdGhlaXIgYW1n ZXRiYXRjaCBvciBhbWdldGJpdG1hcAorICogcm91dGluZXMuCisgKgorICogVGhlIHJ1bGVzIGZv ciBiYXRjaCBvd25lcnNoaXAgZGlmZmVyIHNsaWdodGx5IGZvciBhbWdldGJpdG1hcCBzY2Fuczsg c2VlCisgKiB0aGUgYW1nZXRiaXRtYXAgZG9jdW1lbnRhdGlvbiBpbiBkb2Mvc3JjL3NnbWwvaW5k ZXhhbS5zZ21sIGZvciBkZXRhaWxzLgorICovCit2b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCWlmIChz Y2FuLT51c2ViYXRjaHJpbmcpCisJeworCQkvKiBhbWdldGJhdGNoIHNjYW4gY2FsbGVyICovCisJ CUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CisKKwkJaWYgKHNjYW4tPmJhdGNo cmluZ2J1Zi5kb25lKQorCQl7CisJCQkvKiBEb24ndCBib3RoZXIgdXNpbmcgY2FjaGUgd2hlbiBz Y2FuIGlzIGVuZGluZyAqLworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFVzZSBjYWNo ZS4gIFRoaXMgaXMgZ2VuZXJhbGx5IG9ubHkgYmVuZWZpY2lhbCB3aGVuIHRoZXJlIGFyZQorCQkJ ICogbWFueSBzbWFsbCByZXNjYW5zIG9mIGFuIGluZGV4LgorCQkJICovCisJCQlmb3IgKGludCBp ID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQkJeworCQkJCWlmIChz Y2FuLT5iYXRjaHJpbmdidWYuY2FjaGVbaV0gPT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qIGZvdW5k IGVtcHR5IHNsb3QsIHdlJ3JlIGRvbmUgKi8KKwkJCQkJc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hl W2ldID0gYmF0Y2g7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKgorCQkg KiBGYWlsZWQgdG8gZmluZCBhIGZyZWUgc2xvdCBmb3IgdGhpcyBiYXRjaC4gIFdlJ2xsIGp1c3Qg ZnJlZSBpdAorCQkgKiBvdXJzZWx2ZXMuICBUaGlzIGlzbid0IHJlYWxseSBleHBlY3RlZDsgaXQn cyBqdXN0IGRlZmVuc2l2ZS4KKwkJICovCisJCWlmIChiYXRjaC0+ZGVhZEl0ZW1zKQorCQkJcGZy ZWUoYmF0Y2gtPmRlYWRJdGVtcyk7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIGFtZ2V0Yml0 bWFwIHNjYW4gY2FsbGVyLgorCQkgKgorCQkgKiBhbWdldGJpdG1hcCByb3V0aW5lcyBhcmUgcmVx dWlyZWQgdG8gYWxsb2NhdGUgbm8gbW9yZSB0aGFuIG9uZQorCQkgKiBiYXRjaCBhdCBhIHRpbWUs IHNvIHdlJ2xsIGFsd2F5cyBoYXZlIGEgZnJlZSBzbG90LgorCQkgKi8KKwkJQXNzZXJ0KHNjYW4t PnhzX2JpdG1hcF9iYXRjaCA9PSBOVUxMKTsKKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9 PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5kZWFkSXRlbXMgPT0gTlVMTCk7CisJCUFzc2VydChi YXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKTsKKworCQlzY2FuLT54c19iaXRtYXBfYmF0Y2ggPSBi YXRjaDsKKwkJcmV0dXJuOworCX0KKworCS8qIG5vIGZyZWUgc2xvdCB0byBzYXZlIHRoaXMgYmF0 Y2ggKGV4cGVjdGVkIHdpdGggYW1nZXRiaXRtYXAgY2FsbGVycykgKi8KKwlwZnJlZShiYXRjaF9h bGxvY19iYXNlKGJhdGNoLCBzY2FuKSk7Cit9CisKKy8qCisgKiBxc29ydCBjb21wYXJpc29uIGZ1 bmN0aW9uIGZvciBpbnQgYXJyYXlzCisgKi8KK3N0YXRpYyBpbnQKK2JhdGNoX2NvbXBhcmVfaW50 KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKK3sKKwlpbnQJCQlhID0gKigoY29uc3Qg aW50ICopIHZhKTsKKwlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZiKTsKKworCXJldHVybiBw Z19jbXBfczMyKGEsIGIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCmluZGV4 IGRhNjRjYjU5NS4uODNkZmEzZjJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxk CkBAIC01LDQgKzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdhbXZhbGlkYXRl LmMnLAogICAnZ2VuYW0uYycsCiAgICdpbmRleGFtLmMnLAorICAnaW5kZXhiYXRjaC5jJywKICkK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggY2I5MjFjYTJlLi5lNzU1NzdhN2UgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC0xNzksMTggKzE3OSwyMSBAQCBob2xkIG9uIHRvIHRo ZSBwaW4gKHVzZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGxlYWYgcGFnZSkgdW50aWwgX2FmdGVy XwogdGhleSdyZSBkb25lIHZpc2l0aW5nIHRoZSBoZWFwIChmb3IgVElEcyBmcm9tIHBpbm5lZCBs ZWFmIHBhZ2UpIHByZXZlbnRzCiBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBWQUNVVU0gY2Fu bm90IGdldCBhIGNvbmZsaWN0aW5nIGNsZWFudXAgbG9jawogdW50aWwgdGhlIGluZGV4IHNjYW4g aXMgdG90YWxseSBmaW5pc2hlZCBwcm9jZXNzaW5nIGl0cyBsZWFmIHBhZ2UuCitOb3RlIHRoYXQg dGhlIHRhYmxlIEFNIGRldGVybWluZXMgd2hlbiBhbmQgd2hlcmUgaW5kZXggcGFnZSBwaW5zIGFy ZQorZHJvcHBlZC4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgYW55IGluZGV4IEFNIHRoYXQgaW1wbGVt ZW50cyB0aGUgYW1nZXRiYXRjaAoraW50ZXJmYWNlLiAgKFNlZSBhbHNvLCBkb2Mvc3JjL3NnbWwv aW5kZXhhbS5zZ21sKS4KIAotVGhpcyBhcHByb2FjaCBpcyBmYWlybHkgY29hcnNlLCBzbyB3ZSBh dm9pZCBpdCB3aGVuZXZlciBwb3NzaWJsZS4gIEluCi1wcmFjdGljZSBtb3N0IGluZGV4IHNjYW5z IHdvbid0IGhvbGQgb250byB0aGVpciBwaW4sIGFuZCBzbyB3b24ndCBibG9jawotVkFDVVVNLiAg VGhlc2UgaW5kZXggc2NhbnMgbXVzdCBkZWFsIHdpdGggVElEIHJlY3ljbGluZyBkaXJlY3RseSwg d2hpY2ggaXMKLW1vcmUgY29tcGxpY2F0ZWQgYW5kIG5vdCBhbHdheXMgcG9zc2libGUuICBTZWUg bGF0ZXIgc2VjdGlvbiBvbiBtYWtpbmcKLWNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgor QmxvY2tpbmcgVkFDVVVNIGxpa2UgdGhpcyBjYW4gYmUgZGlzcnVwdGl2ZSwgc28gdGFibGUgQU1z IGF2b2lkIGl0IHdoZW5ldmVyCitwb3NzaWJsZS4gIFRoZSBoZWFwIHRhYmxlIEFNIHVzdWFsbHkg ZHJvcHMgbGVhZiBwYWdlIHBpbnMgcmlnaHQgYXdheSwgdGhvdWdoCitub3QgZHVyaW5nIHNjYW5z IHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuICBJbmRleC1vbmx5IHNjYW5zIG1heSBhbHNv CityZXRhaW4gcGlucyBpbiBzb21lIGNhc2VzLgogCi1PcHBvcnR1bmlzdGljIGluZGV4IHR1cGxl IGRlbGV0aW9uIHBlcmZvcm1zIGFsbW9zdCB0aGUgc2FtZSBwYWdlLWxldmVsCi1tb2RpZmljYXRp b25zIHdoaWxlIG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMgc2FmZSBi ZWNhdXNlCi10aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRha2luZyBwbGFj ZSBsYXRlciBvbiAtLSBvbmx5IFZBQ1VVTQotY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxlLiAgU2Vl IGFsc28gc2ltcGxlIGRlbGV0aW9uIGFuZCBib3R0b20tdXAKLWRlbGV0aW9uLCBiZWxvdy4KK09w cG9ydHVuaXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgdGhlIHNhbWUgcGFnZS1s ZXZlbAorbW9kaWZpY2F0aW9ucyBhcyBWQUNVVU0sIHdoaWxlIG9ubHkgaG9sZGluZyBhbiBleGNs dXNpdmUgbG9jay4gIFRoaXMgaXMKK3NhZmUgYmVjYXVzZSB0aGVyZSBpcyBubyBxdWVzdGlvbiBv ZiBUSUQgcmVjeWNsaW5nIHRha2luZyBwbGFjZSAtLSBvbmx5CitWQUNVVU0gY2FuIG1ha2UgVElE cyByZWN5Y2xhYmxlLiAgSW4gb3RoZXIgd29yZHMsIFZBQ1VVTSdzIGNsZWFudXAgbG9jaworc2Vy dmVzIHRvIHByb3RlY3Qgbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMgZnJvbSBjb25jdXJyZW50IFRJ RCByZWN5Y2xpbmcKK2hhemFyZHM7IGl0IGRvZXNuJ3QgcHJvdGVjdCB0aGUgQi1UcmVlIHN0cnVj dHVyZSBpdHNlbGYuCiAKIEJlY2F1c2UgYSBwaW4gaXMgbm90IGFsd2F5cyBoZWxkLCBhbmQgYSBw YWdlIGNhbiBiZSBzcGxpdCBldmVuIHdoaWxlCiBzb21lb25lIGRvZXMgaG9sZCBhIHBpbiBvbiBp dCwgaXQgaXMgcG9zc2libGUgdGhhdCBhbiBpbmRleHNjYW4gd2lsbApAQCAtNDQ0LDQ0ICs0NDcs MjUgQEAgTWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlCiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQXMgZXhwbGFpbmVkIGluIHRoZSBlYXJsaWVyIHNl Y3Rpb24gYWJvdXQgZGVsZXRpbmcgaW5kZXggdHVwbGVzIGR1cmluZwotVkFDVVVNLCB3ZSBpbXBs ZW1lbnQgYSBsb2NraW5nIHByb3RvY29sIHRoYXQgYWxsb3dzIGluZGl2aWR1YWwgaW5kZXggc2Nh bnMKLXRvIGF2b2lkIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIEluZGV4IHNjYW5zIG9wdC1v dXQgKGFuZCBzbyBkcm9wIHRoZWlyCi1sZWFmIHBhZ2UgcGluIHdoZW4gdmlzaXRpbmcgdGhlIGhl YXApIHdoZW5ldmVyIGl0J3Mgc2FmZSB0byBkbyBzbywgdGhvdWdoLgotRHJvcHBpbmcgdGhlIHBp biBlYXJseSBpcyB1c2VmdWwgYmVjYXVzZSBpdCBhdm9pZHMgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkK LVZBQ1VVTS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3aXRoIGluZGV4IHNjYW5z IHVzZWQgYnkgY3Vyc29ycywKLXNpbmNlIGlkbGUgY3Vyc29ycyBzb21ldGltZXMgc3RvcCBmb3Ig cmVsYXRpdmVseSBsb25nIHBlcmlvZHMgb2YgdGltZS4gIEluCi1leHRyZW1lIGNhc2VzLCBhIGNs aWVudCBhcHBsaWNhdGlvbiBtYXkgaG9sZCBvbiB0byBhbiBpZGxlIGN1cnNvcnMgZm9yCi1ob3Vy cyBvciBldmVuIGRheXMuICBCbG9ja2luZyBWQUNVVU0gZm9yIHRoYXQgbG9uZyBjb3VsZCBiZSBk aXNhc3Ryb3VzLgorVkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHByb3RvY29sIHRoYXQg aGVscHMgdGFibGUgQU1zIGRlYWwgd2l0aCBUSUQKK3JlY3ljbGluZyBoYXphcmRzIGR1cmluZyBz Y2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LgogCiBJbmRleCBzY2FucyB0aGF0IGRv bid0IGhvbGQgb24gdG8gYSBidWZmZXIgcGluIGFyZSBwcm90ZWN0ZWQgYnkgaG9sZGluZyBhbgog TVZDQyBzbmFwc2hvdCBpbnN0ZWFkLiAgVGhpcyBtb3JlIGxpbWl0ZWQgaW50ZXJsb2NrIHByZXZl bnRzIHdyb25nIGFuc3dlcnMKIHRvIHF1ZXJpZXMsIGJ1dCBpdCBkb2VzIG5vdCBwcmV2ZW50IGNv bmN1cnJlbnQgVElEIHJlY3ljbGluZyBpdHNlbGYgKG9ubHkKIGhvbGRpbmcgb250byB0aGUgbGVh ZiBwYWdlIHBpbiB3aGlsZSBhY2Nlc3NpbmcgdGhlIGhlYXAgZW5zdXJlcyB0aGF0KS4KK0ZvciB0 aGUgbW9zdCBwYXJ0LCBpdCBpcyB1cCB0byB0aGUgdGFibGUgQU0gdG8gZGVhbCB3aXRoIGNvbmN1 cnJlbnQgVElECityZWN5Y2xpbmcgaGF6YXJkcy4gIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGRpcmVj dGx5IGNvbnNpZGVyIHN1Y2ggaGF6YXJkcyB3aGVuCittYXJraW5nIGEga25vd24tZGVhZCBpbmRl eCB0dXBsZSBMUF9ERUFELgogCi1JbmRleC1vbmx5IHNjYW5zIGNhbiBuZXZlciBkcm9wIHRoZWly IGJ1ZmZlciBwaW4sIHNpbmNlIHRoZXkgYXJlIHVuYWJsZSB0bwotdG9sZXJhdGUgaGF2aW5nIGEg cmVmZXJlbmNlZCBUSUQgYmVjb21lIHJlY3ljbGFibGUuICBJbmRleC1vbmx5IHNjYW5zCi10eXBp Y2FsbHkganVzdCB2aXNpdCB0aGUgdmlzaWJpbGl0eSBtYXAgKG5vdCB0aGUgaGVhcCBwcm9wZXIp LCBhbmQgc28gd2lsbAotbm90IHJlbGlhYmx5IG5vdGljZSB0aGF0IGFueSBzdGFsZSBUSUQgcmVm ZXJlbmNlIChmb3IgYSBUSUQgdGhhdCBwb2ludGVkCi10byBhIGRlYWQtdG8tYWxsIGhlYXAgaXRl bSBhdCBmaXJzdCkgd2FzIGNvbmN1cnJlbnRseSBtYXJrZWQgTFBfVU5VU0VEIGluCi10aGUgaGVh cCBieSBWQUNVVU0uICBUaGlzIGNvdWxkIGVhc2lseSBhbGxvdyBWQUNVVU0gdG8gc2V0IHRoZSB3 aG9sZSBoZWFwCi1wYWdlIHRvIGFsbC12aXNpYmxlIGluIHRoZSB2aXNpYmlsaXR5IG1hcCBpbW1l ZGlhdGVseSBhZnRlcndhcmRzLiAgQW4gTVZDQwotc25hcHNob3QgaXMgb25seSBzdWZmaWNpZW50 IHRvIGF2b2lkIHByb2JsZW1zIGR1cmluZyBwbGFpbiBpbmRleCBzY2FucwotYmVjYXVzZSB0aGV5 IG11c3QgYWNjZXNzIGdyYW51bGFyIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZnJvbSB0aGUgaGVh cAotcHJvcGVyLiAgQSBwbGFpbiBpbmRleCBzY2FuIHdpbGwgZXZlbiByZWNvZ25pemUgTFBfVU5V U0VEIGl0ZW1zIGluIHRoZQotaGVhcCAoaXRlbXMgdGhhdCBjb3VsZCBiZSByZWN5Y2xlZCBidXQg aGF2ZW4ndCBiZWVuIGp1c3QgeWV0KSBhcyAibm90Ci12aXNpYmxlIiAtLSBldmVuIHdoZW4gdGhl IGhlYXAgcGFnZSBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbGwtdmlzaWJsZS4KLQotTFBfREVB RCBzZXR0aW5nIG9mIGluZGV4IHR1cGxlcyBieSB0aGUga2lsbF9wcmlvcl90dXBsZSBvcHRpbWl6 YXRpb24KLShkZXNjcmliZWQgaW4gZnVsbCBpbiBzaW1wbGUgZGVsZXRpb24sIGJlbG93KSBpcyBh bHNvIG1vcmUgY29tcGxpY2F0ZWQgZm9yCi1pbmRleCBzY2FucyB0aGF0IGRyb3AgdGhlaXIgbGVh ZiBwYWdlIHBpbnMuICBXZSBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQKLUxQX0RFQUQtbWFya2lu ZyBhbnkgbmV3IGluZGV4IHR1cGxlIHRoYXQgbG9va3MgbGlrZSBhIGtub3duLWRlYWQgaW5kZXgK LXR1cGxlIGJlY2F1c2UgaXQgaGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBUSUQsIGZvbGxvd2lu ZyBjb25jdXJyZW50IFRJRAotcmVjeWNsaW5nLiAgSXQncyBqdXN0IGFib3V0IHBvc3NpYmxlIHRo YXQgc29tZSBvdGhlciBzZXNzaW9uIGluc2VydGVkIGEKLW5ldywgdW5yZWxhdGVkIGluZGV4IHR1 cGxlLCBvbiB0aGUgc2FtZSBsZWFmIHBhZ2UsIHdoaWNoIGhhcyB0aGUgc2FtZQotb3JpZ2luYWwg VElELiAgSXQgd291bGQgYmUgdG90YWxseSB3cm9uZyB0byBMUF9ERUFELXNldCB0aGlzIG5ldywK K1dlIG11c3QgYXZvaWQgTFBfREVBRC1tYXJraW5nIGFueSBuZXcgaW5kZXggdHVwbGUgdGhhdCBs b29rcyBsaWtlIGEKK2tub3duLWRlYWQgaW5kZXggdHVwbGUgYmVjYXVzZSBpdCBoYXBwZW5zIHRv IHNoYXJlIHRoZSBzYW1lIFRJRCwgZm9sbG93aW5nCitjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcu ICBJdCdzIGp1c3QgYWJvdXQgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIHNlc3Npb24KK2luc2Vy dGVkIGEgbmV3LCB1bnJlbGF0ZWQgaW5kZXggdHVwbGUsIG9uIHRoZSBzYW1lIGxlYWYgcGFnZSwg d2hpY2ggaGFzIHRoZQorc2FtZSBvcmlnaW5hbCBUSUQuICBJdCB3b3VsZCBiZSB0b3RhbGx5IHdy b25nIHRvIExQX0RFQUQtc2V0IHRoaXMgbmV3LAogdW5yZWxhdGVkIGluZGV4IHR1cGxlLgogCi1X ZSBoYW5kbGUgdGhpcyBraWxsX3ByaW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5IGhhdmluZyBh ZmZlY3RlZCBpbmRleAorV2UgaGFuZGxlIHRoaXMgTFBfREVBRCBzZXR0aW5nIHJhY2UgY29uZGl0 aW9uIGJ5IGhhdmluZyBhbGwgaW5kZXgKIHNjYW5zIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0 IGFueSBjaGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBhbGwKIGltcGxpZXMgdGhhdCBpdCB3YXMg cmVhY2hlZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGludGVyaW0gcGVyaW9kIHdoZW4gbm8KIGJ1 ZmZlciBwaW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFu eSBMUF9ERUFEIGJpdHMKQEAgLTczNCw3ICs3MTgsNyBAQCBvZiByZWFkZXJzIGNvdWxkIHN0aWxs IG1vdmUgcmlnaHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRuJ3QgY291cGxlCiBzYW1lLWxldmVsIGxv Y2tzKSwgYnV0IHdlIHByZWZlciB0byBiZSBjb25zZXJ2YXRpdmUgaGVyZS4KIAogRHVyaW5nIHJl Y292ZXJ5IGFsbCBpbmRleCBzY2FucyBzdGFydCB3aXRoIGlnbm9yZV9raWxsZWRfdHVwbGVzID0g ZmFsc2UKLWFuZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlvcl90dXBsZS4gV2UgZG8gdGhpcyBiZWNh dXNlIHRoZSBvbGRlc3QgeG1pbgorYW5kIHdlIG5ldmVyIExQX0RFQUQtbWFyayB0dXBsZXMuIFdl IGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KIG9uIHRoZSBzdGFuZGJ5IHNlcnZlciBj YW4gYmUgb2xkZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4gb24gdGhlIHByaW1hcnkKIHNlcnZlciwg d2hpY2ggbWVhbnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQgTFBfREVBRCBldmVuIHdoZW4gdGhleSBh cmUKIHN0aWxsIHZpc2libGUgb24gdGhlIHN0YW5kYnkuIFdlIGRvbid0IFdBTCBsb2cgdHVwbGUg TFBfREVBRCBiaXRzLCBidXQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggY2M5 YzQ1ZGM0Li5jNGZmNmRlMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0x MDM3LDYgKzEwMzcsOSBAQCBfYnRfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKICAq IExvY2sgaXMgYWNxdWlyZWQgd2l0aG91dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4uICBUaGlzIGlz IGxpa2UgYSByYXcKICAqIExvY2tCdWZmZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMgZXh0cmEgc3Rl cHMgbmVlZGVkIGJ5IFZhbGdyaW5kLgogICoKKyAqIE5vdGU6IF9idF9iYXRjaF91bmxvY2sgaW4g bmJ0c2VhcmNoLmMgKGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgd3JhcHBlcgorICogZnVuY3Rp b24pIGhhcyBtYXRjaGluZyBWYWxncmluZCBidWZmZXIgbG9jayBpbnN0cnVtZW50YXRpb24uCisg KgogICogTm90ZTogQ2FsbGVyIG1heSBuZWVkIHRvIGNhbGwgX2J0X2NoZWNrcGFnZSgpIHdpdGgg YnVmIHdoZW4gcGluIG9uIGJ1ZgogICogd2Fzbid0IG9yaWdpbmFsbHkgYWNxdWlyZWQgaW4gX2J0 X2dldGJ1ZigpIG9yIF9idF9yZWxhbmRnZXRidWYoKS4KICAqLwpAQCAtMTA3OCwxMyArMTA4MSwx OSBAQCBfYnRfdW5sb2NrYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIAkgKiBCdWZmZXIg aXMgcGlubmVkIGFuZCBsb2NrZWQsIHdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgZXhwZWN0ZWQgdG8g YmUKIAkgKiBkZWZpbmVkIGFuZCBhZGRyZXNzYWJsZS4gIENoZWNrIHRoYXQgcHJvYWN0aXZlbHku CiAJICovCi0JVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQoQnVmZmVyR2V0UGFnZShidWYp LCBCTENLU1opOworI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCVBhZ2UJCXBhZ2UgPSBCdWZm ZXJHZXRQYWdlKGJ1Zik7CisKKwlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChwYWdlLCBC TENLU1opOworI2VuZGlmCiAKIAkvKiBMb2NrQnVmZmVyKCkgYXNzZXJ0cyB0aGF0IHBpbiBpcyBo ZWxkIGJ5IHRoaXMgYmFja2VuZCAqLwogCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxP Q0spOwogCisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCiAJaWYgKCFSZWxhdGlvblVzZXNMb2Nh bEJ1ZmZlcnMocmVsKSkKLQkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFn ZShidWYpLCBCTENLU1opOworCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhwYWdlLCBCTENL U1opOworI2VuZGlmCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHJlYWRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdl LmMKaW5kZXggMmJhMWNhNjYwLi40M2ZjNjc2MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHJlYWRwYWdlLmMKQEAgLTMyLDYgKzMyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRSZWFkUGFn ZVN0YXRlCiB7CiAJLyogSW5wdXQgcGFyYW1ldGVycywgc2V0IGJ5IF9idF9yZWFkcGFnZSBmb3Ig X2J0X2NoZWNra2V5cyAqLwogCVNjYW5EaXJlY3Rpb24gZGlyOwkJCS8qIGN1cnJlbnQgc2NhbiBk aXJlY3Rpb24gKi8KKwlCbG9ja051bWJlciBjdXJycGFnZTsJCS8qIGN1cnJlbnQgcGFnZSBiZWlu ZyByZWFkICovCiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsJCS8qIExvd2VzdCBub24tcGl2b3QgdHVw bGUncyBvZmZzZXQgKi8KIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwkJLyogSGlnaGVzdCBub24tcGl2 b3QgdHVwbGUncyBvZmZzZXQgKi8KIAlJbmRleFR1cGxlCWZpbmFsdHVwOwkJLyogTmVlZGVkIGJ5 IHNjYW5zIHdpdGggYXJyYXkga2V5cyAqLwpAQCAtNjMsMTQgKzY0LDEzIEBAIHN0YXRpYyBib29s IF9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyLAogCQkJCQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXApOwogc3RhdGljIGJvb2wgX2J0 X29wcG9kaXJfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs CiAJCQkJCQkJCSAgSW5kZXhUdXBsZSBmaW5hbHR1cCk7Ci1zdGF0aWMgdm9pZCBfYnRfc2F2ZWl0 ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJIE9mZnNldE51bWJlciBv ZmZudW0sIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVt cyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCSAgT2Zmc2V0TnVtYmVy IG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAotCQkJCQkJCQkgIEluZGV4 VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCVFNj YW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2Zm bnVtLAotCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KTsK K3N0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0 ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBJbmRleFR1cGxlIGl0dXAsIGlu dCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhT Y2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCSAgT2Zmc2V0TnVtYmVy IG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0YWJsZVRpZCwKKwkJCQkJCQkJICBJbmRl eFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2b2lkIF9idF9z YXZlcG9zdGluZ2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9m ZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkJCQkgICBJdGVtUG9pbnRlciB0YWJsZVRpZCwgaW50 IGJhc2VPZmZzZXQpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNj YW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLCBib29sIGFycmF5S2V5cywKIAkJCQkJCSAgSW5k ZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzKTsKIHN0YXRpYyBib29sIF9idF9jaGVja19jb21w YXJlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0xMTEsMTUgKzEx MSwxNSBAQCBzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKIAogCiAvKgotICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZy b20gY3VycmVudCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQb3MKKyAqCV9idF9yZWFkcGFnZSgp IC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIG5ld2JhdGNoLgogICoK LSAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBzby0+Y3VyclBvcy5i dWY7IHRoZSBidWZmZXIncyBzdGF0ZQotICogaXMgbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIGN1 cnJQb3MubW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOwotICogdGhleSBhcmUg dXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2Ygc28tPmN1cnJQb3Mg YXJlCisgKiBDYWxsZXIgbXVzdCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQgbmV3YmF0Y2gu YnVmOyB0aGUgYnVmZmVyJ3Mgc3RhdGUgaXMKKyAqIG5vdCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBu ZXdiYXRjaCdzIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsKKyAqIHRoZXkg YXJlIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIG5ld2JhdGNo IGFyZQogICogaW5pdGlhbGl6ZWQgZnJvbSBzY3JhdGNoIGhlcmUuCiAgKgogICogV2Ugc2NhbiB0 aGUgY3VycmVudCBwYWdlIHN0YXJ0aW5nIGF0IG9mZm51bSBhbmQgbW92aW5nIGluIHRoZSBpbmRp Y2F0ZWQKLSAqIGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFy ZSBsb2FkZWQgaW50byBjdXJyUG9zLml0ZW1zLgorICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1h dGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIHNhdmVkIGluIG5ld2JhdGNoLml0ZW1zLgogICogbW9y ZUxlZnQgb3IgbW9yZVJpZ2h0IChhcyBhcHByb3ByaWF0ZSkgaXMgY2xlYXJlZCBpZiBfYnRfY2hl Y2trZXlzIHJlcG9ydHMKICAqIHRoYXQgdGhlcmUgY2FuIGJlIG5vIG1vcmUgbWF0Y2hpbmcgdHVw bGVzIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCiAgKiAoY291bGQganVzdCBiZSBmb3Ig dGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4gd2hlbiBzY2FuIGhhcyBhcnJheXMpLgpA QCAtMTMxLDExICsxMzEsMTIgQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJy YXlrZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG1hdGNo aW5nIGl0ZW1zIGZvdW5kIG9uIHRoZSBwYWdlLCBmYWxzZSBpZiBub25lLgogICovCiBib29sCi1f YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKLQkJCSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwK KwkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbgly ZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRuZXdiYXRjaCA9IEJUQmF0Y2hHZXRE YXRhKG5ld2JhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zm c2V0TnVtYmVyIG1pbm9mZjsKQEAgLTE0NCwyMyArMTQ1LDIwIEBAIF9idF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAog CWJvb2wJCWFycmF5S2V5cywKIAkJCQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmlnbm9y ZV9raWxsZWRfdHVwbGVzOwogCWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNldCA9IDAs CiAJCQkJaW5kbmF0dHM7CiAKIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIs IGFsb25nIHdpdGggaXRzIHNpYmxpbmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShz by0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0bmV3YmF0Y2gtPmJ1Zik7 CiAJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdl ID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5w cmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2OwotCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3Bh cXVlLT5idHBvX25leHQ7Ci0JLyogZGVsYXkgc2V0dGluZyBzby0+Y3VyclBvcy5sc24gdW50aWwg X2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluICovCi0JcHN0YXRlLmRpciA9IHNvLT5jdXJyUG9z LmRpciA9IGRpcjsKLQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgPSAwOworCXBzdGF0ZS5j dXJycGFnZSA9IGJ0bmV3YmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnRu ZXdiYXRjaC0+YnVmKTsKKwlidG5ld2JhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2 OworCWJ0bmV3YmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7CisJcHN0YXRlLmRp ciA9IG5ld2JhdGNoLT5kaXIgPSBkaXI7CiAKIAkvKiBlaXRoZXIgbW9yZVJpZ2h0IG9yIG1vcmVM ZWZ0IHNob3VsZCBiZSBzZXQgbm93IChtYXkgYmUgdW5zZXQgbGF0ZXIpICovCi0JQXNzZXJ0KFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA6Ci0JCSAg IHNvLT5jdXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChk aXIpID8gYnRuZXdiYXRjaC0+bW9yZVJpZ2h0IDogYnRuZXdiYXRjaC0+bW9yZUxlZnQpOwogCUFz c2VydCghUF9JR05PUkUob3BhcXVlKSk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5j dXJyUG9zKSk7CiAJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAogCS8qIGluaXRpYWxpemUg bG9jYWwgdmFyaWFibGVzICovCkBAIC0xODgsMTQgKzE4NiwxNCBAQCBfYnRfcmVhZHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwK IAl7CiAJCS8qIGFsbG93IG5leHQvcHJldiBwYWdlIHRvIGJlIHJlYWQgYnkgb3RoZXIgd29ya2Vy IHdpdGhvdXQgZGVsYXkgKi8KIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJ CV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLm5leHRQYWdlLAotCQkJCQkJ CQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwg YnRuZXdiYXRjaC0+bmV4dFBhZ2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJ CWVsc2UKLQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLnByZXZQYWdl LAotCQkJCQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVh c2Uoc2NhbiwgYnRuZXdiYXRjaC0+cHJldlBhZ2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5jdXJy UGFnZSk7CiAJfQogCi0JUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFn ZSwgc2Nhbi0+eHNfc25hcHNob3QpOworCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgcHN0YXRlLmN1 cnJwYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpKQogCXsKQEAgLTIxMiwxMSArMjEwLDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkh X2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJ CQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIg YWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJCQlidG5ld2Jh dGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJ CQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQogCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2Fu X3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOwor CQkJCQkJCQkJCQkJCSAgIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZhbHNl OwogCQkJCX0KIAkJCX0KQEAgLTI4MCwyNiArMjc4LDI2IEBAIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJ CWlmICghQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVy IGl0ICovCi0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwor CQkJCQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwLCAmdHVw bGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJ CQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyog U2V0IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGZpcnN0IFRJRCkgKi8KLQkJ CQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5k ZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRl bXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVH ZXRQb3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBp dHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAogCQkJCQkvKiBSZW1lbWJl ciBhbGwgbGF0ZXIgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAoaW50 IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCiAJCQkJCXsKLQkJ CQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0 X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJ CUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZzZXQp OworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJCWl0ZW1JbmRleCsrOwogCQkJCQl9CiAJ CQkJfQpAQCAtMzM5LDEyICszMzcsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCX0KIAogCQlpZiAo IXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxzZTsK KwkJCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXgg PD0gTWF4VElEc1BlckJUcmVlUGFnZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7Ci0J CXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRl bUluZGV4ID0gMDsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5sYXN0 SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7CkBAIC0zNjEsMTEgKzM1OCwxMSBA QCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBk aXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHBy aW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlTGVm dCA9IGZhbHNlOworCQkJCQlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCQkJCQlzby0+ bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCiAJCQkJ CQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkgICBz by0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+Y3VyclBh Z2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtNDY2LDI3ICs0NjMsMjcg QEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0sCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwogCQkJCQlp dGVtSW5kZXgtLTsKLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1 cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAs ICZ0dXBsZU9mZnNldCk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCXVpbnQxNgkJbml0 ZW1zID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOwotCQkJCQlpbnQJCQl0dXBsZU9mZnNl dDsKKwkJCQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0 IHN0YXRlIChhbmQgcmVtZW1iZXIgbGFzdCBUSUQpICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJ CQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRl eCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVt cyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdl dFBvc3RpbmdOKGl0dXAsIG5pdGVtcyAtIDEpLAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJ CQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAKIAkJCQkJLyogUmVtZW1iZXIgYWxsIHByaW9y IFRJRHMgKG11c3QgYmUgYXQgbGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGludCBpID0gbml0ZW1z IC0gMjsgaSA+PSAwOyBpLS0pCiAJCQkJCXsKIAkJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQkJX2J0 X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBv c3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVU dXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJ CQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQl9CiAJCQkJfQogCQkJfQpAQCAtNTAyLDEyICs0OTks MTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs IE9mZnNldE51bWJlciBvZmZudW0sCiAJCSAqIGJlIGZvdW5kIHRoZXJlCiAJCSAqLwogCQlpZiAo IXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOwor CQkJYnRuZXdiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49 IDApOwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9z Lmxhc3RJdGVtID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1J bmRleCA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0g aXRlbUluZGV4OworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0g MTsKIAl9CiAKIAkvKgpAQCAtNTI0LDcgKzUyMCw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCSAqLwog CUFzc2VydCghcHN0YXRlLmZvcmNlbm9ucmVxdWlyZWQpOwogCi0JcmV0dXJuIChzby0+Y3VyclBv cy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCXJldHVybiAobmV3YmF0Y2gt PmZpcnN0SXRlbSA8PSBuZXdiYXRjaC0+bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAtMTAyNyw5MCAr MTAyMyw5MSBAQCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpciwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVt IGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBp dGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9z YXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVy IG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5l d2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVw bGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQ aXZvdChpdHVwKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+ aGVhcFRpZCA9IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsK LQlpZiAoc28tPmN1cnJUdXBsZXMpCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVU aWQgPSBpdHVwLT50X3RpZDsKKwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5pbmRleE9mZnNl dCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJCVNpemUJCWl0 dXBzeiA9IEluZGV4VHVwbGVTaXplKGl0dXApOwogCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9 IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsKLQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzICsg c28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOwotCQlzby0+Y3VyclBv cy5uZXh0VHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKKwkJbmV3YmF0Y2gtPml0ZW1z W2l0ZW1JbmRleF0udHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCW1lbWNweShuZXdiYXRj aC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6KTsKKwkJKnR1cGxlT2Zm c2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CiAJfQogfQogCiAvKgogICogU2V0dXAgc3RhdGUgdG8g c2F2ZSBUSURzL2l0ZW1zIGZyb20gYSBzaW5nbGUgcG9zdGluZyBsaXN0IHR1cGxlLgogICoKLSAq IFNhdmVzIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZv ciBUSUQgdGhhdCBpcwotICogcmV0dXJuZWQgdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBzdWJz ZXF1ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQKLSAqIGJlIHNhdmVkIGJ5IGNhbGxp bmcgX2J0X3NhdmVwb3N0aW5naXRlbSgpLgorICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIG5l d2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzIHJldHVybmVkCisgKiB0byBz Y2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNo b3VsZCBiZSBzYXZlZAorICogYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCiAgKgot ICogUmV0dXJucyBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0 dXBsZSBpcyBzdG9yZWQgYXQgaWYKLSAqIG5lZWRlZC4KKyAqIFJldHVybnMgYmFzZU9mZnNldCwg YW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1haW4gdHVwbGUgaXMKKyAq IHN0b3JlZCBhdCBpZiBuZWVkZWQuCiAgKi8KIHN0YXRpYyBpbnQKLV9idF9zZXR1cHBvc3Rpbmdp dGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0s Ci0JCQkJCSAgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLCBJbmRleFR1cGxlIGl0dXAp CitfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVt SW5kZXgsCisJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRh ICp0YWJsZVRpZCwKKwkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpCiB7 Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4 XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4 XTsKIAogCUFzc2VydChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAotCWN1cnJJdGVtLT5o ZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwotCWlm IChzby0+Y3VyclR1cGxlcykKKwlpdGVtLT50YWJsZVRpZCA9ICp0YWJsZVRpZDsKKwlpdGVtLT5p bmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJ CS8qIFNhdmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICovCiAJCUlu ZGV4VHVwbGUJYmFzZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZz ZXQoaXR1cCk7CiAKIAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJY3Vyckl0ZW0tPnR1 cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQliYXNlID0gKEluZGV4 VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7CisJ CWl0ZW0tPnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4VHVwbGUp IChuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1lbWNweShiYXNlLCBp dHVwLCBpdHVwc3opOwogCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVhIGluZGV4IHR1 cGxlIGhlYWRlciBzaXplICovCiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0laRV9NQVNLOwog CQliYXNlLT50X2luZm8gfD0gaXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQg Kz0gaXR1cHN6OworCQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJldHVybiBjdXJySXRl bS0+dHVwbGVPZmZzZXQ7CisJCXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsKIAl9CiAKIAlyZXR1 cm4gMDsKIH0KIAogLyoKLSAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0 ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBhbiBpbmRleCBpdGVt IGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCiAgKiB0 dXBsZS4KICAqCiAgKiBBc3N1bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0ZW1zKCkgaGFzIGFs cmVhZHkgYmVlbiBjYWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlzdCB0dXBsZS4gIENh bGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4KKyAqIHBvc3Rpbmcg bGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyBiYXNlT2Zmc2V0 LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3Bh cXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQlJdGVtUG9p bnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3RpbmdpdGVtKEluZGV4 U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAor CQkJCQlJdGVtUG9pbnRlciB0YWJsZVRpZCwgaW50IGJhc2VPZmZzZXQpCiB7Ci0JQlRTY2FuUG9z SXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1h dGNoaW5nSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1cnJJ dGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVt OworCWl0ZW0tPnRhYmxlVGlkID0gKnRhYmxlVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2Zm bnVtOwogCiAJLyoKIAkgKiBIYXZlIGluZGV4LW9ubHkgc2NhbnMgcmV0dXJuIHRoZSBzYW1lIGJh c2UgSW5kZXhUdXBsZSBmb3IgZXZlcnkgVElECiAJICogdGhhdCBvcmlnaW5hdGVzIGZyb20gdGhl IHNhbWUgcG9zdGluZyBsaXN0CiAJICovCi0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQljdXJySXRl bS0+dHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMp CisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gYmFzZU9mZnNldDsKIH0KIAogI2RlZmluZSBMT09LX0FI RUFEX1JFUVVJUkVEX1JFQ0hFQ0tTIAkzCkBAIC0yODIyLDEzICsyODE5LDEzIEBAIG5ld19wcmlt X3NjYW46CiAJICogTm90ZTogV2UgbWFrZSBhIHNvZnQgYXNzdW1wdGlvbiB0aGF0IHRoZSBjdXJy ZW50IHNjYW4gZGlyZWN0aW9uIHdpbGwKIAkgKiBhbHNvIGJlIHVzZWQgd2l0aGluIF9idF9uZXh0 LCB3aGVuIGl0IGlzIGFza2VkIHRvIHN0ZXAgb2ZmIHRoaXMgcGFnZS4KIAkgKiBJdCBpcyB1cCB0 byBfYnRfbmV4dCB0byBjYW5jZWwgdGhpcyBzY2hlZHVsZWQgcHJpbWl0aXZlIGluZGV4IHNjYW4K LQkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhlIGRpcmVjdGlvbiBvcHBvc2l0 ZSBjdXJyUG9zLmRpci4KKwkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhlIGRp cmVjdGlvbiBvcHBvc2l0ZSBwc3RhdGUtPmRpci4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVlc2Nh biA9IGZhbHNlOwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28tPm5l ZWRQcmltU2NhbiA9IHRydWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJzdCBhZ2FpbiAqLwogCiAJ aWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVs ZShzY2FuLCBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9z Y2hlZHVsZShzY2FuLCBwc3RhdGUtPmN1cnJwYWdlKTsKIAogCS8qIENhbGxlcidzIHR1cGxlIGRv ZXNuJ3QgbWF0Y2ggdGhlIG5ldyBxdWFsICovCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjkxMywxNCAr MjkxMCw2IEBAIF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVtZW50KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJICogUmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0byB0 aGUgc3RhdGUgdGhleSB3ZXJlIGluIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZQogCSAqIHdlcmUgY2Fs bGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5cyBvbmx5IGV2ZXIgcmF0Y2hldCBpbiB0 aGUKIAkgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgotCSAqCi0JICogV2l0aG91dCB0aGlzLCBz Y2FucyBjb3VsZCBvdmVybG9vayBtYXRjaGluZyB0dXBsZXMgd2hlbiB0aGUgc2NhbgotCSAqIGRp cmVjdGlvbiBnZXRzIHJldmVyc2VkIGp1c3QgYmVmb3JlIGJ0Z2V0dHVwbGUgcnVucyBvdXQgb2Yg aXRlbXMgdG8KLQkgKiByZXR1cm4sIGJ1dCBqdXN0IGFmdGVyIF9idF9yZWFkcGFnZSBwcmVwYXJl cyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlCi0JICogc2NhbidzIGZpbmFsIHBhZ2UgaW4gc28tPmN1 cnJQb3MuICBXaGVuIHdlJ3JlIG9uIHRoZSBmaW5hbCBwYWdlIGl0IGlzCi0JICogdHlwaWNhbCBm b3Igc28tPmN1cnJQb3MgdG8gZ2V0IGludmFsaWRhdGVkIG9uY2UgYnRnZXR0dXBsZSBmaW5hbGx5 Ci0JICogcmV0dXJucyBmYWxzZSwgd2hpY2gnbGwgZWZmZWN0aXZlbHkgaW52YWxpZGF0ZSB0aGUg c2NhbidzIGFycmF5IGtleXMuCi0JICogVGhhdCBoYXNuJ3QgaGFwcGVuZWQgeWV0LCB0aG91Z2gg LS0gYW5kIGluIGdlbmVyYWwgaXQgbWF5IG5ldmVyIGhhcHBlbi4KIAkgKi8KIAlfYnRfc3RhcnRf YXJyYXlfa2V5cyhzY2FuLCAtZGlyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5k ZXggMGRhNDhiNDJhLi4zNGFlYzU5Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpA QCAtMTYwLDExICsxNjAsMTMgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFk anVzdG1lbWJlcnMgPSBidGFkanVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2NhbiA9IGJ0YmVnaW5z Y2FuLAogCQkuYW1yZXNjYW4gPSBidHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBidGdldHR1cGxl LAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gYnRnZXRiYXRjaCwKKwkJ LmFta2lsbGl0ZW1zYmF0Y2ggPSBidGtpbGxpdGVtc2JhdGNoLAorCQkuYW1yZWxlYXNlYmF0Y2gg PSBidHJlbGVhc2ViYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXAsCiAJCS5hbWVu ZHNjYW4gPSBidGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBidG1hcmtwb3MsCi0JCS5hbXJlc3Ry cG9zID0gYnRyZXN0cnBvcywKKwkJLmFtcG9zcmVzZXQgPSBidHBvc3Jlc2V0LAogCQkuYW1lc3Rp bWF0ZXBhcmFsbGVsc2NhbiA9IGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4sCiAJCS5hbWluaXRwYXJh bGxlbHNjYW4gPSBidGluaXRwYXJhbGxlbHNjYW4sCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gYnRw YXJhbGxlbHJlc2NhbiwKQEAgLTIyMywxMyArMjI1LDEzIEBAIGJ0aW5zZXJ0KFJlbGF0aW9uIHJl bCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogfQogCiAvKgotICoJYnRnZXR0dXBsZSgp IC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0Z2V0YmF0Y2goKSAtLSBH ZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJv b2wKLWJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0lu ZGV4U2NhbkJhdGNoCitidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRj aCBiYXRjaCA9IHByaW9yYmF0Y2g7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5V TEwpOwogCkBAIC0yNDIsNDUgKzI0NCwyMCBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCS8qCiAJCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlh bGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluCiAJCSAqIHRoZSBhcHBy b3ByaWF0ZSBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsCi0J CSAqIF9idF9maXJzdCgpIHRvIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KKwkJICog X2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBiYXRjaCBpbiB0aGUgc2Nhbi4KIAkJICovCi0J CWlmICghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBfYnRfZmlyc3Qo c2NhbiwgZGlyKTsKKwkJaWYgKGJhdGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9idF9maXJzdChz Y2FuLCBkaXIpOwogCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ug c2hvdWxkIGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAqLwotCQkJaWYg KHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZZXMsIHJlbWVt YmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJCSAqIHR1cGxl cyBhdCBvbmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikgIFRoZQotCQkJ CSAqIHRlc3QgZm9yIG51bUtpbGxlZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFub2lhOiBpZiB0 aGUKLQkJCQkgKiBjYWxsZXIgcmV2ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRleHNjYW4gdGhl biB0aGUgc2FtZQotCQkJCSAqIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMu IEl0J3Mgbm90IHdvcnRoCi0JCQkJICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQsIHNvIHdlIGRv bid0IGRldGVjdCBpdCwgYnV0IGluc3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBhbnkgZXhjZXNz IGVudHJpZXMuCi0JCQkJICovCi0JCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJ CQlzby0+a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBNYXhUSURzUGVyQlRyZWVQYWdl KTsKLQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0JCQkJCXNv LT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4Owot CQkJfQorCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJLyoKLQkJ CSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2Nh biwgZGlyKTsKLQkJfQotCi0JCS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0IC4uLiAq LwotCQlpZiAocmVzKQorCQkvKiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAuLi4gKi8K KwkJaWYgKGJhdGNoKQogCQkJYnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlmIHdlIG5l ZWQgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5udW1BcnJh eUtleXMgJiYgX2J0X3N0YXJ0X3ByaW1fc2NhbihzY2FuKSk7CiAKLQlyZXR1cm4gcmVzOworCXJl dHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI5MCwzOCArMjY3LDQzIEBAIGludDY0CiBidGdldGJp dG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewogCUJUU2Nhbk9wYXF1 ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRj aDsKIAlpbnQ2NAkJbnRpZHMgPSAwOwotCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7CisJSXRlbVBvaW50 ZXIgdGFibGVUaWQ7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOwogCiAJ LyogRWFjaCBsb29wIGl0ZXJhdGlvbiBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBz Y2FuICovCiAJZG8KIAl7Ci0JCS8qIEZldGNoIHRoZSBmaXJzdCBwYWdlICYgdHVwbGUgKi8KLQkJ aWYgKF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCS8qIEZldGNoIHRo ZSBmaXJzdCBiYXRjaCAqLworCQlpZiAoKGJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uKSkpCiAJCXsKLQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBz Y2FubmluZyAqLwotCQkJaGVhcFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOwotCQkJdGJtX2FkZF90 dXBsZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CisJCQlpbnQJCQlpdGVtSW5kZXggPSAwOwor CisJCQkvKiBTYXZlIGZpcnN0IHR1cGxlJ3MgVElEICovCisJCQl0YWJsZVRpZCA9ICZiYXRjaC0+ aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZDsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwgdGFibGVU aWQsIDEsIGZhbHNlKTsKIAkJCW50aWRzKys7CiAKIAkJCWZvciAoOzspCiAJCQl7Ci0JCQkJLyoK LQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgd2l0aGluIHBhZ2UuICBUaGlzIGlzIHRoZSBz YW1lIGFzIHRoZQotCQkJCSAqIGVhc3kgY2FzZSBpbiBfYnRfbmV4dCgpLgotCQkJCSAqLwotCQkJ CWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJ CS8qIEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0aGluIHBhZ2Utc2l6ZWQgYmF0Y2ggKi8KKwkJCQlp ZiAoKytpdGVtSW5kZXggPiBiYXRjaC0+bGFzdEl0ZW0pCiAJCQkJewotCQkJCQkvKiBsZXQgX2J0 X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8KLQkJCQkJaWYgKCFfYnRfbmV4dChzY2FuLCBG b3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCS8qCisJCQkJCSAqIF9idF9uZXh0IHJlbGVhc2Vz IHRoZSBwcmlvciBiYXRjaCBmb3IgYml0bWFwIGNhbGxlcnMKKwkJCQkJICogYmVmb3JlIGFsbG9j YXRpbmcgdGhlIG5leHQgb25lLCBzbyBvbmx5IG9uZSBiYXRjaCBpcworCQkJCQkgKiBldmVyIHVz ZWQgYXQgYSB0aW1lCisJCQkJCSAqLworCQkJCQlpdGVtSW5kZXggPSAwOworCQkJCQliYXRjaCA9 IF9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7CisJCQkJCWlmICgh YmF0Y2gpCiAJCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCQkvKiBTYXZlIHR1cGxlIElELCBhbmQg Y29udGludWUgc2Nhbm5pbmcgKi8KLQkJCQloZWFwVGlkID0gJnNvLT5jdXJyUG9zLml0ZW1zW3Nv LT5jdXJyUG9zLml0ZW1JbmRleF0uaGVhcFRpZDsKLQkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhl YXBUaWQsIDEsIGZhbHNlKTsKKwkJCQl0YWJsZVRpZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4 XS50YWJsZVRpZDsKKwkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIHRhYmxlVGlkLCAxLCBmYWxzZSk7 CiAJCQkJbnRpZHMrKzsKIAkJCX0KIAkJfQpAQCAtMzQ4LDggKzMzMCw2IEBAIGJ0YmVnaW5zY2Fu KFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCiAJLyogYWxsb2NhdGUg cHJpdmF0ZSB3b3Jrc3BhY2UgKi8KIAlzbyA9IHBhbGxvY19vYmplY3QoQlRTY2FuT3BhcXVlRGF0 YSk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+bWFya1Bvcyk7CiAJaWYgKHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCXNvLT5r ZXlEYXRhID0gKFNjYW5LZXkpIHBhbGxvYyhzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2Nh bktleURhdGEpKTsKIAllbHNlCkBAIC0zNjMsMTkgKzM0MywxMSBAQCBidGJlZ2luc2NhbihSZWxh dGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzby0+b3JkZXJQcm9jcyA9IE5V TEw7CiAJc28tPmFycmF5Q29udGV4dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxM OwkJLyogdW50aWwgbmVlZGVkICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdl IGRvbid0IGtub3cgeWV0IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1vbmx5LCBzbyB3 ZSBkbyBub3QKLQkgKiBhbGxvY2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cyB1bnRpbCBi dHJlc2Nhbi4gIEhvd2V2ZXIsIHdlIHNldCB1cAotCSAqIHNjYW4tPnhzX2l0dXBkZXNjIHdoZXRo ZXIgd2UnbGwgbmVlZCBpdCBvciBub3QsIHNpbmNlIHRoYXQncyBzbyBjaGVhcC4KLQkgKi8KLQlz by0+Y3VyclR1cGxlcyA9IHNvLT5tYXJrVHVwbGVzID0gTlVMTDsKLQotCXNjYW4tPnhzX2l0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nh bi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2Nhbi0+bWF4aXRlbXNi YXRjaCA9IE1heFRJRHNQZXJCVHJlZVBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3Np emUgPSBNQVhBTElHTihzaXplb2YoQlRCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNf d29ya3NwYWNlID0gQkxDS1NaOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC0zODksNjQgKzM2MSwx ODYgQEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBu c2NhbmtleXMsCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBk cm9wIHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsK LQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBp dGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4p OwotCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2FuUG9zSW52 YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8gZWFnZXJs eSBkcm9wIGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0JICogVGhp cyBhdm9pZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24g dGhlIHBhZ2UuCi0JICoKLQkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMg ZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBpbnZv bHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgotCSAqIEl0 J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mg c25hcHNob3QuCi0JICoKLQkgKiBBbHNvIG9wdCBvdXQgb2YgZHJvcHBpbmcgbGVhZiBwYWdlIHBp bnMgZWFnZXJseSBkdXJpbmcgYml0bWFwIHNjYW5zLgotCSAqIFBpbnMgY2Fubm90IGJlIGhlbGQg Zm9yIG1vcmUgdGhhbiBhbiBpbnN0YW50IGR1cmluZyBiaXRtYXAgc2NhbnMgZWl0aGVyCi0JICog d2F5LCBzbyB3ZSBtaWdodCBhcyB3ZWxsIGF2b2lkIHdhc3RpbmcgY3ljbGVzIG9uIGFjcXVpcmlu ZyBwYWdlIExTTnMuCi0JICoKLQkgKiBTZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIG9uIG1ha2lu ZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZS4KLQkgKgotCSAqIE5vdGU6IHNvLT5kcm9w UGluIHNob3VsZCBuZXZlciBjaGFuZ2UgYWNyb3NzIHJlc2NhbnMuCi0JICovCi0Jc28tPmRyb3BQ aW4gPSAoIXNjYW4tPnhzX3dhbnRfaXR1cCAmJgotCQkJCSAgIElzTVZDQ1NuYXBzaG90KHNjYW4t PnhzX3NuYXBzaG90KSAmJgotCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQot CXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNv LT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5tYXJrUG9zKTsKLQotCS8qCi0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5 cywgaWYgbmVlZGVkIGZvciBhbiBpbmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkg ZG9uZSBpbiBhIHByZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBv dmVyaGVhZCwgYm90aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9j azsgb25seSB0aGlzCi0JICogZnVuY3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICov Ci0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1cGxlcyA9PSBOVUxMKQotCXsK LQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoQkxDS1NaICogMik7Ci0JCXNvLT5t YXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7Ci0JfQotCiAJLyoKIAkgKiBSZXNl dCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVyT2ZLZXlz ID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5 cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlz by0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiAJ c28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRfcHJlcHJvY2Vzc19rZXlzIHNldHMg aXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRpdHRvICovCiB9CiAKKy8qCisgKgli dGtpbGxpdGVtc2JhdGNoKCkgLS0gTWFyayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMgTFBfREVB RAorICovCit2b2lkCitidGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpCit7CisJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsK KwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKGJhdGNoKTsKKwlQYWdlCQlw YWdlOworCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CisJT2Zmc2V0TnVtYmVyIG1pbm9mZjsKKwlPZmZz ZXROdW1iZXIgbWF4b2ZmOworCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOworCUJ1ZmZl cgkJYnVmOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJLyogVGFibGUgQU0gc2hvdWxkIGhh dmUgYWxyZWFkeSByZWxlYXNlZCBiYXRjaCBwYWdlJ3MgcGluIGJ5IG5vdyAqLworCUFzc2VydChi YXRjaC0+bnVtRGVhZCA+IDApOworCisJYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJ0YmF0Y2gtPmN1 cnJQYWdlLCBCVF9SRUFEKTsKKworCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYp OworCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0g bGF0ZXN0bHNuKQorCXsKKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQlf YnRfcmVsYnVmKHJlbCwgYnVmKTsKKwkJcmV0dXJuOworCX0KKworCXBhZ2UgPSBCdWZmZXJHZXRQ YWdlKGJ1Zik7CisJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOworCW1pbm9mZiA9IFBf RklSU1REQVRBS0VZKG9wYXF1ZSk7CisJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihw YWdlKTsKKworCS8qIEl0ZXJhdGUgdGhyb3VnaCBiYXRjaC0+ZGVhZEl0ZW1zW10gaW4gbGVhZiBw YWdlIG9yZGVyICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtRGVhZDsgaSsrKQor CXsKKwkJaW50CQkJaXRlbUluZGV4ID0gYmF0Y2gtPmRlYWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRj aGluZ0l0ZW0gKmtpdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOworCQlPZmZzZXROdW1i ZXIgb2ZmbnVtID0ga2l0ZW0tPmluZGV4T2Zmc2V0OworCisJCUFzc2VydChpdGVtSW5kZXggPj0g YmF0Y2gtPmZpcnN0SXRlbSAmJiBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwkJQXNz ZXJ0KGkgPT0gMCB8fAorCQkJICAgb2ZmbnVtID49IGJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0 ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOworCisJCWlmIChvZmZudW0gPCBtaW5vZmYpCisJCQlj b250aW51ZTsJCQkvKiBwdXJlIHBhcmFub2lhICovCisJCXdoaWxlIChvZmZudW0gPD0gbWF4b2Zm KQorCQl7CisJCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJ CUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7 CisJCQlib29sCQlraWxsdHVwbGUgPSBmYWxzZTsKKworCQkJaWYgKEJUcmVlVHVwbGVJc1Bvc3Rp bmcoaXR1cGxlKSkKKwkJCXsKKwkJCQlpbnQJCQlwaSA9IGkgKyAxOworCQkJCWludAkJCW5wb3N0 aW5nID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXBsZSk7CisJCQkJaW50CQkJajsKKworCQkJ CWZvciAoaiA9IDA7IGogPCBucG9zdGluZzsgaisrKQorCQkJCXsKKwkJCQkJSXRlbVBvaW50ZXIg aXRlbSA9IEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwbGUsIGopOworCisJCQkJCWlmICghSXRl bVBvaW50ZXJFcXVhbHMoaXRlbSwgJmtpdGVtLT50YWJsZVRpZCkpCisJCQkJCQlicmVhazsJLyog b3V0IG9mIHBvc3RpbmcgbGlzdCBsb29wICovCisKKwkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9m ZnNldCA9PSBvZmZudW0pOworCisJCQkJCS8qCisJCQkJCSAqIFJlYWQtYWhlYWQgdG8gbGF0ZXIg a2l0ZW1zIGhlcmUuCisJCQkJCSAqCisJCQkJCSAqIFdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24g dGhhdCBub3QgYWR2YW5jaW5nIGtpdGVtIGhlcmUKKwkJCQkJICogd2lsbCBwcmV2ZW50IHVzIGZy b20gY29uc2lkZXJpbmcgdGhlIHBvc3RpbmcgbGlzdCB0dXBsZQorCQkJCQkgKiBmdWxseSBkZWFk IGJ5IG5vdCBtYXRjaGluZyBpdHMgbmV4dCBoZWFwIFRJRCBpbiBuZXh0CisJCQkJCSAqIGxvb3Ag aXRlcmF0aW9uLgorCQkJCQkgKgorCQkJCQkgKiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoaXMg aXMgdGhlIGZpbmFsIGhlYXAgVElEIGluCisJCQkJCSAqIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUs IHRoZW4gdHVwbGUgZ2V0cyBraWxsZWQKKwkJCQkJICogcmVnYXJkbGVzcyAoaS5lLiB3ZSBoYW5k bGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGxhc3QKKwkJCQkJICoga2l0ZW0gaXMgYWxzbyB0aGUgbGFz dCBoZWFwIFRJRCBpbiB0aGUgbGFzdCBpbmRleCB0dXBsZQorCQkJCQkgKiBjb3JyZWN0bHkgLS0g cG9zdGluZyB0dXBsZSBzdGlsbCBnZXRzIGtpbGxlZCkuCisJCQkJCSAqLworCQkJCQlpZiAocGkg PCBiYXRjaC0+bnVtRGVhZCkKKwkJCQkJCWtpdGVtID0gJmJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVh ZEl0ZW1zW3BpKytdXTsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIERvbid0IGJvdGhlciBhZHZh bmNpbmcgdGhlIG91dGVybW9zdCBsb29wJ3MgaW50IGl0ZXJhdG9yIHRvCisJCQkJICogYXZvaWQg cHJvY2Vzc2luZyBkZWFkIGl0ZW1zIHRoYXQgcmVsYXRlIHRvIHRoZSBzYW1lCisJCQkJICogb2Zm bnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWljcm8tb3B0aW1pemF0aW9uIGhhcmRseQor CQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJt b3N0IGxvb3AKKwkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0Y2ggb24gdGhpcyBzYW1lIHBvc3Rpbmcg bGlzdCdzIGZpcnN0IGhlYXAKKwkJCQkgKiBUSUQgaW5zdGVhZCwgc28gd2UnbGwgYWR2YW5jZSB0 byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKKwkJCQkgKiB0dXBsZSBwcmV0dHkgcXVpY2tseS4pCisJ CQkJICovCisJCQkJaWYgKGogPT0gbnBvc3RpbmcpCisJCQkJCWtpbGx0dXBsZSA9IHRydWU7CisJ CQl9CisJCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmtpdGVt LT50YWJsZVRpZCkpCisJCQkJa2lsbHR1cGxlID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIE1hcmsg aW5kZXggaXRlbSBhcyBkZWFkLCBpZiBpdCBpc24ndCBhbHJlYWR5LiAgU2luY2UgdGhpcworCQkJ ICogaGFwcGVucyB3aGlsZSBob2xkaW5nIGEgc2hhcmVkIGJ1ZmZlciBsb2NrLCBpdCdzIHBvc3Np YmxlIHRoYXQKKwkJCSAqIG11bHRpcGxlIHByb2Nlc3NlcyBhdHRlbXB0IHRvIGRvIHRoaXMgc2lt dWx0YW5lb3VzbHksIGxlYWRpbmcKKwkJCSAqIHRvIG11bHRpcGxlIGZ1bGwtcGFnZSBpbWFnZXMg YmVpbmcgc2VudCB0byBXQUwgKGlmCisJCQkgKiB3YWxfbG9nX2hpbnRzIG9yIGRhdGEgY2hlY2tz dW1zIGFyZSBlbmFibGVkKSwgd2hpY2ggaXMKKwkJCSAqIHVuZGVzaXJhYmxlLgorCQkJICovCisJ CQlpZiAoa2lsbHR1cGxlICYmICFJdGVtSWRJc0RlYWQoaWlkKSkKKwkJCXsKKwkJCQlpZiAoIWtp bGxlZHNvbWV0aGluZykKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFVzZSB0aGUgaGludCBiaXQg aW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuCisJCQkJCSAqIHVwZGF0ZSB0aGUgcGFn ZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJZiB3ZQorCQkJCQkgKiBhcmUgbm90 IGFsbG93ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgY29udGludWluZy4KKwkJCQkJICovCisJCQkJCWlm ICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhidWYpKQorCQkJCQkJZ290byB1bmxvY2tfcGFnZTsK KwkJCQl9CisKKwkJCQkvKiBmb3VuZCB0aGUgaXRlbS9hbGwgcG9zdGluZyBsaXN0IGl0ZW1zICov CisJCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKKwkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwor CQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLworCQkJfQorCQkJb2Zm bnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pOworCQl9CisJfQorCisJLyoKKwkgKiBTaW5j ZSB0aGlzIGNhbiBiZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQu CisJICoKKwkgKiBXaGVuZXZlciB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0 IHRoZSBwYWdlJ3MKKwkgKiBCVFBfSEFTX0dBUkJBR0UgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2Ug anVzdCBhIGhpbnQuICAoTm90ZSB0aGF0IHdlCisJICogb25seSByZWx5IG9uIHRoZSBwYWdlLWxl dmVsIGZsYWcgaW4gIWhlYXBrZXlzcGFjZSBpbmRleGVzLikKKwkgKi8KKwlpZiAoa2lsbGVkc29t ZXRoaW5nKQorCXsKKwkJb3BhcXVlLT5idHBvX2ZsYWdzIHw9IEJUUF9IQVNfR0FSQkFHRTsKKwkJ QnVmZmVyRmluaXNoU2V0SGludEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsKKwl9CisKK3VubG9ja19w YWdlOgorCV9idF9yZWxidWYocmVsLCBidWYpOworfQorCisvKgorICoJYnRyZWxlYXNlYmF0Y2go KSAtLSBSZWxlYXNlIGJhdGNoJ3MgaW5kZXggcGFnZSBidWZmZXIgcGluCisgKgorICogQ2FsbGVk IGJ5IHRoZSB0YWJsZSBBTSAodmlhIGFtcmVsZWFzZWJhdGNoKSB3aGVuIGl0J3Mgc2FmZSB0byBk cm9wIHRoZQorICogYnVmZmVyIHBpbiBoZWxkIHRvIHByZXZlbnQgY29uY3VycmVudCBUSUQgcmVj eWNsaW5nIGJ5IFZBQ1VVTS4KKyAqIE11c3QgYmUgaWRlbXBvdGVudCAtLSBzYWZlIHRvIGNhbGwg d2hlbiB0aGUgcGluIGhhcyBhbHJlYWR5IGJlZW4gcmVsZWFzZWQuCisgKi8KK3ZvaWQKK2J0cmVs ZWFzZWJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJ QlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShiYXRjaCk7CisKKwlpZiAoQnVm ZmVySXNWYWxpZChidGJhdGNoLT5idWYpKQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihidGJhdGNoLT5i dWYpOworCQlidGJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCX0KK30KKwogLyoKICAqCWJ0 ZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQ1NSwxMTYgKzU0OSw2MyBA QCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSBy ZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChCVFNjYW5Qb3NJc1Zh bGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwg ZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQot CQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3Vy clBvcyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlCVFNjYW5Qb3NVbnBpbklm UGlubmVkKHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSBwb3NpdGlv bnMsIHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0KIAkvKiBSZWxlYXNlIHN0b3Jh Z2UgKi8KIAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZyZWUoc28tPmtleURhdGEpOwog CS8qIHNvLT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFyZSBpbiBhcnJheUNvbnRleHQg Ki8KIAlpZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlNZW1vcnlDb250ZXh0RGVsZXRl KHNvLT5hcnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZy ZWUoc28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBsZXMgIT0gTlVMTCkKLQkJcGZy ZWUoc28tPmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVzIHNob3VsZCBub3QgYmUgcGZy ZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQogCiAvKgotICoJYnRtYXJrcG9z KCkgLS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0cG9zcmVzZXQoKSAtLSByZXNl dCBhcnJheSBrZXkgc3RhdGUgZm9yIHNjYW4gcG9zaXRpb24gY2hhbmdlCisgKgorICogQ2FsbGVk IGJ5IHRoZSBjb3JlIHN5c3RlbSB3aGVuIHRoZSBzY2FuJ3MgbG9naWNhbCBwb3NpdGlvbiBpcyBh Ym91dCB0bworICogY2hhbmdlIGluIGEgd2F5IHRoYXQgaW52YWxpZGF0ZXMgb3VyIGFycmF5IGtl eSBzdGF0ZS4gIFRoaXMgaGFwcGVucyB3aGVuCisgKiByZXN0b3JpbmcgYSBtYXJrZWQgcG9zaXRp b24sIG9yIHdoZW4gdGhlIHNjYW4gY3Jvc3NlcyBhIGJhdGNoIGJvdW5kYXJ5CisgKiB3aGlsZSBt b3ZpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIG9yaWdpbmFsbHkgdXNl ZC4KKyAqCisgKiBGb3IgZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGhh dmUgYWxyZWFkeSBmbGlwcGVkIHRoZQorICogYmF0Y2gncyBkaXIgZmllbGQgYmVmb3JlIGNhbGxp bmcgaGVyZTsgd2UgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24gd2hlbgorICogcmVzZXR0aW5n IG91ciBhcnJheSBrZXlzLiAgRm9yIG1hcmsgcmVzdG9yYXRpb24sIHRoZSBiYXRjaCdzIGRpciB3 aWxsCisgKiByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlIChmcm9tIHdoZW4gYnRnZXRiYXRjaCBy ZXR1cm5lZCBpdCkuCiAgKi8KIHZvaWQKLWJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiti dHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJ QlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hE YXRhICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoYmF0Y2gpOwogCi0JLyogVGhlcmUgbWF5IGJl IGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlCVFNjYW5Qb3NVbnBp bklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtleXMpCisJCXJldHVy bjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUluZGV4LiAgSWYgd2Ug bGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYXJrZWQg cG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgotCSAqIHRoZSBjdXJy UG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMpIHRoZSBtYXJrIGlz IG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24ndCBoYXZlIHRvIGRv IHRoYXQgd29yay4KKwkgKiBSZXNldCBhcnJheSBrZXlzIHRvIGluaXRpYWwgc3RhdGUgZm9yIHRo ZSBiYXRjaCdzIHNjYW4gZGlyZWN0aW9uLiAgQWxzbworCSAqIGNsZWFyIG5lZWRQcmltU2NhbiBh bmQgcmVsYXRlZCBmbGFncy4gIFRoZXNlIHdlcmUgc2V0IGJhc2VkIG9uIHRoZSBzb2Z0CisJICog YXNzdW1wdGlvbiB0aGF0IHRoZSBzY2FuIHdvdWxkIGFsd2F5cyBwcm9jZWVkIGluIHRoZSBzYW1l IGRpcmVjdGlvbi4KKwkgKgorCSAqIFRoZXNlIHN0ZXBzIHdvcmsgYXJvdW5kIHRoZSBzb2Z0IGFz c3VtcHRpb24gYmVpbmcgdmlvbGF0ZWQ6IHRoZXkgZm9yY2UKKwkgKiB0aGUgc2NhbiB0byBzdGVw IHRvIHRoZSBuZXh0L3ByZXZpb3VzIHBhZ2UsIG1ha2luZyB0aGUgYXJyYXlzIHJlY292ZXIuCisJ ICogV2hlbiB3ZSBnbyB0byByZWFkIHRoYXQgcGFnZSwgX2J0X3JlYWRwYWdlIHdpbGwgcmVsaWFi bHkgZGV0ZXJtaW5lIGlmIGEKKwkgKiBwcmltaXRpdmUgc2NhbiByZWFsbHkgaXMgbmVlZGVkIGJh c2VkIG9uIHRoZSBwYWdlJ3MgdHVwbGVzLiAgSWYgdGhlcmUncworCSAqIGEgcHJpbWl0aXZlIHNj YW4sIGl0IHdpbGwgcmVwb3NpdGlvbiB0aGUgc2NhbiB1c2luZyBuZXcgYXJyYXkgdmFsdWVzCisJ ICogKGJhc2VkIG9uIHRoZSB0dXBsZXMgZnJvbSB0aGUgbmVpZ2hib3JpbmcgcGFnZSB3ZSdsbCBz dGVwIG9uIHRvKS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gcmVzZXQgdGhlIGFycmF5IGtleSBzdGF0 ZSBpbiB0aGUgY29ycmVjdCBkaXJlY3Rpb24gc28gdGhhdAorCSAqIHdlIHdvbid0IGdldCBjb25m dXNlZC4gIFdoZW4gdGhlIGFycmF5IGtleXMgYXJlIGJlaGluZCB0aGUga2V5IHNwYWNlCisJICog Zm9yIHRoZSBwYWdlIHdlJ3JlIHN0ZXBwaW5nIG9uIHRvIChiZWhpbmQgaW4gdGVybXMgb2YgdGhl IHNjYW4gZGlyKSwKKwkgKiB0aGV5IHdpbGwgY2F0Y2ggdXAgYXV0b21hdGljYWxseS4gIEJ1dCB3 aGVuIHRoZXkncmUgYWhlYWQgb2YgdGhhdAorCSAqIHBhZ2UncyBrZXkgc3BhY2UsIHRoZSBzY2Fu IGNvdWxkIG1pc3MgbWF0Y2hpbmcgdHVwbGVzLgogCSAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlk KHNvLT5jdXJyUG9zKSkKLQkJc28tPm1hcmtJdGVtSW5kZXggPSBzby0+Y3VyclBvcy5pdGVtSW5k ZXg7CisJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgYmF0Y2gtPmRpcik7CisJaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoYmF0Y2gtPmRpcikpCisJCWJ0YmF0Y2gtPm1vcmVSaWdodCA9IHRy dWU7CiAJZWxzZQotCXsKLQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0JCXNv LT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JfQotfQotCi0vKgotICoJYnRyZXN0cnBvcygpIC0tIHJl c3RvcmUgc2NhbiB0byBsYXN0IHNhdmVkIHBvc2l0aW9uCi0gKi8KLXZvaWQKLWJ0cmVzdHJwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKLQotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyoK LQkJICogVGhlIHNjYW4gaGFzIG5ldmVyIG1vdmVkIHRvIGEgbmV3IHBhZ2Ugc2luY2UgdGhlIGxh c3QgbWFyay4gIEp1c3QKLQkJICogcmVzdG9yZSB0aGUgaXRlbUluZGV4LgotCQkgKgotCQkgKiBO QjogSW4gdGhpcyBjYXNlIHdlIGNhbid0IGNvdW50IG9uIGFueXRoaW5nIGluIHNvLT5tYXJrUG9z IHRvIGJlCi0JCSAqIGFjY3VyYXRlLgotCQkgKi8KLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0g c28tPm1hcmtJdGVtSW5kZXg7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIG1v dmVkIHRvIGEgbmV3IHBhZ2UgYWZ0ZXIgbGFzdCBtYXJrIG9yIHJlc3RvcmUsIGFuZCB3ZSBhcmUK LQkJICogbm93IHJlc3RvcmluZyB0byB0aGUgbWFya2VkIHBhZ2UuICBXZSBhcmVuJ3QgaG9sZGlu ZyBhbnkgcmVhZAotCQkgKiBsb2NrcywgYnV0IGlmIHdlJ3JlIHN0aWxsIGhvbGRpbmcgdGhlIHBp biBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24sCi0JCSAqIHdlIG11c3QgZHJvcCBpdC4KLQkJICov Ci0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJewotCQkJLyogQmVmb3Jl IGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQkJ aWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCQlCVFNj YW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJfQotCi0JCWlmIChCVFNjYW5Qb3NJ c1ZhbGlkKHNvLT5tYXJrUG9zKSkKLQkJewotCQkJLyogYnVtcCBwaW4gb24gbWFyayBidWZmZXIg Zm9yIGFzc2lnbm1lbnQgdG8gY3VycmVudCBidWZmZXIgKi8KLQkJCWlmIChCVFNjYW5Qb3NJc1Bp bm5lZChzby0+bWFya1BvcykpCi0JCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNvLT5tYXJrUG9zLmJ1 Zik7Ci0JCQltZW1jcHkoJnNvLT5jdXJyUG9zLCAmc28tPm1hcmtQb3MsCi0JCQkJICAgb2Zmc2V0 b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCQkgICBzby0+bWFya1Bvcy5sYXN0SXRl bSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCQkJ bWVtY3B5KHNvLT5jdXJyVHVwbGVzLCBzby0+bWFya1R1cGxlcywKLQkJCQkJICAgc28tPm1hcmtQ b3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJCS8qIFJlc2V0IHRoZSBzY2FuJ3MgYXJyYXkga2V5cyAo c2VlIF9idF9zdGVwcGFnZSBmb3Igd2h5KSAqLwotCQkJaWYgKHNvLT5udW1BcnJheUtleXMpCi0J CQl7Ci0JCQkJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nhbiwgc28tPmN1cnJQb3MuZGlyKTsKLQkJ CQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQkJQlRTY2Fu UG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQorCQlidGJhdGNoLT5tb3JlTGVmdCA9IHRy dWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7 CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAogLyoKQEAgLTg4MCwxNSArOTIx LDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIg Km5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsK IAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKLQkvKgotCSAqIFJlc2V0 IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQgc3VjaCB0aGF0 IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdlIHRyZWF0cyB0aGlzIGJhY2tl bmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0aGF0IHN0ZXBzIGZyb20gKmxh c3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNzIHRoaXMKLQkgKiBiYWNrZW5k J3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3JlYWRmaXJzdHBhZ2UgYmVmb3Jl IHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCXNvLT5j dXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQogCWlmIChm aXJzdCkKIAl7CiAJCS8qCkBAIC0xMDM4LDggKzEwNzAsNiBAQCBfYnRfcGFyYWxsZWxfZG9uZShJ bmRleFNjYW5EZXNjIHNjYW4pCiAJQlRQYXJhbGxlbFNjYW5EZXNjIGJ0c2NhbjsKIAlib29sCQlz dGF0dXNfY2hhbmdlZCA9IGZhbHNlOwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5j dXJyUG9zKSk7Ci0KIAkvKiBEbyBub3RoaW5nLCBmb3Igbm9uLXBhcmFsbGVsIHNjYW5zICovCiAJ aWYgKHBhcmFsbGVsX3NjYW4gPT0gTlVMTCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0c2VhcmNoLmMKaW5kZXggYWFlNmFjYjdmLi5mZTljNmY2MDUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtMjMsNTMgKzIzLDQ5IEBACiAjaW5jbHVkZSAicGdz dGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9s c3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWxz L3JlbC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9w aW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOworc3RhdGljIGlubGluZSB2b2lkIF9i dF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwK KwkJCQkJCQkJCUJ1ZmZlciBidWYpOwogc3RhdGljIEJ1ZmZlciBfYnRfbW92ZXJpZ2h0KFJlbGF0 aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJCQlCdWZm ZXIgYnVmLCBib29sIGZvcnVwZGF0ZSwgQlRTdGFjayBzdGFjaywKIAkJCQkJCQlpbnQgYWNjZXNz KTsKIHN0YXRpYyBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2goUmVsYXRpb24gcmVsLCBCVFNjYW5J bnNlcnQga2V5LCBCdWZmZXIgYnVmKTsKIHN0YXRpYyBpbnQJX2J0X2JpbnNyY2hfcG9zdGluZyhC VFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsCiAJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0p Owotc3RhdGljIGlubGluZSB2b2lkIF9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QlRTY2FuT3BhcXVlIHNvKTsKLXN0YXRpYyBib29sIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkZmlyc3RwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkgIFNjYW5E aXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJi bGtubywgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkJIGJvb2wgc2VpemVkKTsKK3N0YXRpYyBJ bmRleFNjYW5CYXRjaCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2Nh bkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9yZWFkbmV4dHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKKwkJCQkJCQkJCSAgIEJsb2Nr TnVtYmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpciwgYm9v bCBmaXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZlciBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChS ZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyICpibGtubywKIAkJCQkJCQkJCQkgQmxvY2tOdW1iZXIg bGFzdGN1cnJibGtubyk7Ci1zdGF0aWMgYm9vbCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X2VuZHBv aW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCSAgIElu ZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gpOwogCiAKIC8qCi0gKglfYnRfZHJvcF9sb2NrX2FuZF9t YXliZV9waW4oKQorICogX2J0X2JhdGNoX3VubG9jaygpIC0tIG5idHJlZSB3cmFwcGVyIGZvciBp bmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrLgogICoKLSAqIFVubG9jayBzby0+Y3VyclBvcy5idWYu ICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRvby4KLSAqIERyb3BwaW5n IHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24gYWNxdWlyaW5nIGEgY2xl YW51cCBsb2NrLgorICogUGVyZm9ybXMgdGhlIHNhbWUgVmFsZ3JpbmQgaW5zdHJ1bWVudGF0aW9u IGFzIF9idF91bmxvY2tidWYuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X2Ryb3BfbG9j a19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKQorX2J0X2JhdGNo X3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBCdWZmZXIg YnVmKQogewotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKiBKdXN0IGRyb3AgdGhlIGxvY2sg KG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsK LQkJcmV0dXJuOwotCX0KKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKKwlQYWdlCQlwYWdlID0g QnVmZmVyR2V0UGFnZShidWYpOwogCi0JLyoKLQkgKiBEcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRo ZSBwaW4uCi0JICoKLQkgKiBIYXZlIHRvIHNldCBzby0+Y3VyclBvcy5sc24gc28gdGhhdCBfYnRf a2lsbGl0ZW1zIGhhcyBhIHdheSB0byBkZXRlY3QKLQkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBU SUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgotCSAqLwotCXNv LT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhzby0+Y3VyclBvcy5idWYpOwotCV9i dF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFs aWRCdWZmZXI7CisJVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQocGFnZSwgQkxDS1NaKTsK KyNlbmRpZgorCisJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBiYXRjaCwgYnVmKTsK KworI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZm ZXJzKHNjYW4tPmluZGV4UmVsYXRpb24pKQorCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhw YWdlLCBCTENLU1opOworI2VuZGlmCiB9CiAKIC8qCkBAIC04NjAsMjYgKzg1NiwyMyBAQCBfYnRf Y29tcGFyZShSZWxhdGlvbiByZWwsCiB9CiAKIC8qCi0gKglfYnRfZmlyc3QoKSAtLSBGaW5kIHRo ZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9idF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0 IGJhdGNoIGluIGEgc2Nhbi4KICAqCiAgKgkJV2UgbmVlZCB0byBiZSBjbGV2ZXIgYWJvdXQgdGhl IGRpcmVjdGlvbiBvZiBzY2FuLCB0aGUgc2VhcmNoCi0gKgkJY29uZGl0aW9ucywgYW5kIHRoZSB0 cmVlIG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAob3IsCi0gKgkJaWYgYmFja3dh cmRzIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZSB0cmVlIHRoYXQgc2F0aXNmaWVzIHRoZQot ICoJCXF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtleS4gIE9uIHN1Y2Nlc3MgZXhpdCwgZGF0 YSBhYm91dCB0aGUKLSAqCQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBs b2FkZWQgaW50byBzby0+Y3VyclBvcy4gIFdlJ2xsCi0gKgkJZHJvcCBhbGwgbG9ja3MgYW5kIGhv bGQgb250byBhIHBpbiBvbiBwYWdlJ3MgYnVmZmVyLCBleGNlcHQgZHVyaW5nCi0gKgkJc28tPmRy b3BQaW4gc2NhbnMsIHdoZW4gd2UgZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgotICoJ CV9idF9yZXR1cm5pdGVtIHNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gc2NhbiBvbiBz dWNjZXNzIGV4aXQuCisgKgkJY29uZGl0aW9ucywgYW5kIHRoZSB0cmVlIG9yZGVyaW5nLiAgV2Ug ZmluZCB0aGUgZmlyc3QgbGVhZiBwYWdlIChvcgorICoJCXRoZSBsYXN0IGxlYWYgcGFnZSwgd2hl biBzY2FubmluZyBiYWNrd2FyZHMpIGluIHRoZSB0cmVlIHdpdGggYXQgbGVhc3QKKyAqCQlvbmUg dHVwbGUgdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtleS4g IE9uCisgKgkJc3VjY2VzcyBleGl0LCB3ZSByZXR1cm4gYSBuZXcgYmF0Y2ggd2l0aCB0aGF0IHBh Z2UncyBtYXRjaGluZyBpdGVtcy4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRl bXMgaW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggbm8KLSAqIHBpbnMgb3IgbG9j a3MgaGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWluIGludmFsaWQuCisgKiBJZiB0aGVyZSBh cmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4IChpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJl Y3Rpb24pLAorICogd2UganVzdCByZXR1cm4gTlVMTC4KICAqCiAgKiBOb3RlIHRoYXQgc2Nhbi0+ a2V5RGF0YVtdLCBhbmQgdGhlIHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWlsdCBmcm9tIGl0LAog ICogYXJlIGJvdGggc2VhcmNoLXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUvUkVBRE1FIGZvciBt b3JlIGFib3V0IHRoaXMpLgogICogV2l0aGluIHRoaXMgcm91dGluZSwgd2UgYnVpbGQgYSB0ZW1w b3JhcnkgaW5zZXJ0aW9uLXR5cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxvY2F0aW5nIHRoZSBz Y2FuIHN0YXJ0IHBvc2l0aW9uLgogICovCi1ib29sCitJbmRleFNjYW5CYXRjaAogX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVs ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTg5Miw4ICs4ODUsMTIgQEAgX2J0X2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRlZ3lOdW1iZXIgc3Ry YXRfdG90YWwgPSBJbnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxrbm8gPSBJbnZhbGlk QmxvY2tOdW1iZXIsCiAJCQkJbGFzdGN1cnJibGtubzsKKwlJbmRleFNjYW5CYXRjaCBmaXJzdGJh dGNoOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0Y2g7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lz VmFsaWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2gg Ki8KKwlmaXJzdGJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOworCWJ0Zmly c3RiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKGZpcnN0YmF0Y2gpOwogCiAJLyoKIAkgKiBFeGFtaW5l IHRoZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5kYW50IGtleXM7IGFsc28gbWFy ayB0aGUKQEAgLTkwOSw2ICs5MDYsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAJCV9i dF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2Fu LCBmaXJzdGJhdGNoKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtOTE4LDcgKzkxNiwxMCBA QCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKi8K IAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFfYnRfcGFyYWxsZWxfc2Vp emUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgdHJ1ZSkpCi0JCXJldHVybiBmYWxzZTsK Kwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOworCQly ZXR1cm4gZmFsc2U7CQkJLyogZGVmaW5pdGVseSBkb25lIChzby0+bmVlZFByaW1TY2FuIGlzIHVu c2V0KSAqLworCX0KIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc2NhbidzIGFycmF5cyAoaWYg YW55KSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KQEAgLTkzNSwxNCArOTM2LDEwIEBA IF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkgKiBf YnRfcmVhZG5leHRwYWdlIHJlbGVhc2VzIHRoZSBzY2FuIGZvciB1cyAobm90IF9idF9yZWFkZmly c3RwYWdlKS4KIAkJICovCiAJCUFzc2VydChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwpOwot CQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05FKTsK IAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRp ciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNl KHNjYW4sIGZpcnN0YmF0Y2gpOwogCi0JCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQkJcmV0 dXJuIHRydWU7CisJCXJldHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3Vy cmJsa25vLCBkaXIsIHRydWUpOwogCX0KIAogCS8qCkBAIC0xMjQyLDcgKzEyMzksNyBAQCBfYnRf Zmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBOb3RlOiBj YWxscyBfYnRfcmVhZGZpcnN0cGFnZSBmb3IgdXMsIHdoaWNoIHJlbGVhc2VzIHRoZSBwYXJhbGxl bCBzY2FuLgogCSAqLwogCWlmIChrZXlzeiA9PSAwKQotCQlyZXR1cm4gX2J0X2VuZHBvaW50KHNj YW4sIGRpcik7CisJCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyLCBmaXJzdGJhdGNoKTsK IAogCS8qCiAJICogV2Ugd2FudCB0byBzdGFydCB0aGUgc2NhbiBzb21ld2hlcmUgd2l0aGluIHRo ZSBpbmRleC4gIFNldCB1cCBhbgpAQCAtMTUxMCw5ICsxNTA3LDkgQEAgX2J0X2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogcG9zaXRpb24gb3Vyc2VsdmVz IG9uIHRoZSB0YXJnZXQgbGVhZiBwYWdlLgogCSAqLwogCUFzc2VydChTY2FuRGlyZWN0aW9uSXNC YWNrd2FyZChkaXIpID09IGluc2tleS5iYWNrd2FyZCk7Ci0JX2J0X3NlYXJjaChyZWwsIE5VTEws ICZpbnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQsIGZhbHNlKTsKKwlfYnRfc2VhcmNo KHJlbCwgTlVMTCwgJmluc2tleSwgJmJ0Zmlyc3RiYXRjaC0+YnVmLCBCVF9SRUFELCBmYWxzZSk7 CiAKLQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAodW5saWtlbHko IUJ1ZmZlcklzVmFsaWQoYnRmaXJzdGJhdGNoLT5idWYpKSkKIAl7CiAJCUFzc2VydCghc28tPm5l ZWRQcmltU2Nhbik7CiAKQEAgLTE1MjgsMjIgKzE1MjUsMjMgQEAgX2J0X2ZpcnN0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCWlmIChJc29sYXRpb25Jc1NlcmlhbGl6 YWJsZSgpKQogCQl7CiAJCQlQcmVkaWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFw c2hvdCk7Ci0JCQlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1 ZiwgQlRfUkVBRCwgZmFsc2UpOworCQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZi dGZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOwogCQl9CiAKLQkJaWYgKCFCdWZmZXJJ c1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJCWlmICghQnVmZmVySXNWYWxpZChidGZpcnN0YmF0 Y2gtPmJ1ZikpCiAJCXsKIAkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJ CX0KIAl9CiAKIAkvKiBwb3NpdGlvbiB0byB0aGUgcHJlY2lzZSBpdGVtIG9uIHRoZSBwYWdlICov Ci0Jb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBzby0+Y3VyclBvcy5idWYpOwor CW9mZm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwgYnRmaXJzdGJhdGNoLT5idWYpOwog CiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4g KHVzdWFsbHkgdGhlIHBhZ2UKLQkgKiBjdXJyZW50bHkgaW4gc28tPmN1cnJQb3MuYnVmKS4KKwkg KiBjdXJyZW50bHkgaW4gZmlyc3RiYXRjaC5idWYpLgogCSAqCiAJICogSWYgaW5za2V5Lm5leHRr ZXkgPSBmYWxzZSBhbmQgaW5za2V5LmJhY2t3YXJkID0gZmFsc2UsIG9mZm51bSBpcwogCSAqIHBv c2l0aW9uZWQgYXQgdGhlIGZpcnN0IG5vbi1waXZvdCB0dXBsZSA+PSBpbnNrZXkuc2NhbmtleXMu CkBAIC0xNTYxLDE2NSArMTU1OSw3MyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAkgKiBmb3IgdGhlIHBhZ2UuICBGb3IgZXhhbXBsZSwgd2hlbiBp bnNrZXkgaXMgYm90aCA8IHRoZSBsZWFmIHBhZ2UncyBoaWdoCiAJICoga2V5IGFuZCA+IGFsbCBv ZiBpdHMgbm9uLXBpdm90IHR1cGxlcywgb2ZmbnVtIHdpbGwgYmUgIm1heG9mZiArIDEiLgogCSAq LwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgb2ZmbnVtLCBkaXIpKQotCQlyZXR1cm4g ZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0 dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIG9mZm51bSwgZGlyKTsKIH0K IAogLyoKLSAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgorICoJ X2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggaW4gYSBzY2FuLgogICoKLSAqCQlPbiBl bnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heSBi ZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRl eCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0gd2FzCi0gKgkJcHJldmlvdXNseSByZXR1cm5lZC4KKyAq CQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGJhdGNoIHRoYXQgd2FzIGxhc3Qg cmV0dXJuZWQgYnkKKyAqCQlidGdldGJhdGNoLiAgV2UnbGwgdXNlIHRoZSBwcmlvciBiYXRjaCdz IHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uIHRvCisgKgkJZGVjaWRlIHdoaWNoIGxlYWYgcGFnZSB0 byByZWFkIG5leHQuCiAgKgotICoJCU9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBk YXRlZCBhcyBuZWVkZWQsIGFuZCBfYnRfcmV0dXJuaXRlbQotICoJCXNldHMgdGhlIG5leHQgaXRl bSB0byByZXR1cm4gdG8gdGhlIHNjYW4uICBzby0+Y3VyclBvcyByZW1haW5zIHZhbGlkLgotICoK LSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgaW52YWxpZGF0ZSBzby0+ Y3VyclBvcy4gIEl0J2xsCi0gKgkJc3RpbGwgYmUgcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJl dHVybiB0dXBsZXMgYnkgY2hhbmdpbmcgZGlyZWN0aW9uLAotICoJCXRob3VnaCB3ZSdsbCBuZWVk IHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcgaW4gdGhhdCBvdGhlciBkaXJlY3Rpb24uCisgKgkJT24g c3VjY2VzcyBleGl0LCByZXR1cm5zIHRoZSBuZXh0IGJhdGNoLiAgVGhlcmUgbXVzdCBiZSBhdCBs ZWFzdCBvbmUKKyAqCQltYXRjaGluZyB0dXBsZSBvbiBhbnkgcmV0dXJuZWQgYmF0Y2ggKGVsc2Ug d2UnZCBqdXN0IHJldHVybiBOVUxMKS4KICAqLwotYm9vbAotX2J0X25leHQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3Vy clBvcykpOwotCi0JLyoKLQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdl OyBvciBpZiB0aGVyZSdzIG5vIG1vcmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFn ZSB3aXRoIGRhdGEuCi0JICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7 Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQot CQl7Ci0JCQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsK LQkJfQotCX0KLQllbHNlCi0JewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+ Y3VyclBvcy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikp Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28p OwotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20g c28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4 IHNjYW4gYnkgc2V0dGluZyB0aGUgcmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNj YW4gZGVzY3JpcHRvcgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1 cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkv KiBNb3N0IHJlY2VudCBfYnRfcmVhZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2Vy dChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0 ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5p dGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRl bSwgcGVyIGFtZ2V0dHVwbGUgY29udHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0 ZW0tPmhlYXBUaWQ7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKElu ZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0K LS8qCi0gKglfYnRfc3RlcHBhZ2UoKSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZh bGlkIGRhdGEgZm9yIHNjYW4KLSAqCi0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhh dCBwZXJmb3JtcyBmaW5hbCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBl bnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5u ZWQsIHRob3VnaAotICogbmV2ZXIgbG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4g dGhlcmUgd29uJ3QgZXZlbiBiZSBhIHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1 cnJQYWdlIG11c3Qgc3RpbGwgYmUgc2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwot c3RhdGljIGJvb2wKLV9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpCiB7CiAJQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidHBy aW9yYmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShwcmlvcmJhdGNoKTsKIAlCbG9ja051bWJlciBibGtu bywKIAkJCQlsYXN0Y3VycmJsa25vOwotCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKTsKLQotCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFu eSBraWxsZWQgaXRlbXMgKi8KLQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCV9idF9raWxsaXRl bXMoc2Nhbik7Ci0KLQkvKgotCSAqIEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywgbWFrZSBhIGNv cHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMgYQotCSAqIG1hcmsgcG9zaXRpb24gdGhh dCBuZWVkcyBpdC4KLQkgKi8KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8q IGJ1bXAgcGluIG9uIGN1cnJlbnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsgYnVmZmVy ICovCi0JCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJbmNyQnVmZmVy UmVmQ291bnQoc28tPmN1cnJQb3MuYnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1BvcywgJnNvLT5j dXJyUG9zLAotCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCSAg IHNvLT5jdXJyUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJaWYgKHNv LT5tYXJrVHVwbGVzKQotCQkJbWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1cGxlcywK LQkJCQkgICBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFya1Bvcy5pdGVt SW5kZXggPSBzby0+bWFya0l0ZW1JbmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQot CQkvKgotCQkgKiBJZiB3ZSdyZSBqdXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0IHByaW1pdGl2 ZSBpbmRleCBzY2FuCi0JCSAqIChwb3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhhcyBhcnJheXMg a2V5cywgYW5kIG5lZWRzIHRvIHNraXAgdG8KLQkJICogY29udGludWUgaW4gdGhlIGN1cnJlbnQg c2NhbiBkaXJlY3Rpb24pLCBtb3JlTGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBpbmRpY2F0ZSB0 aGUgZW5kIG9mIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhleSBtdXN0Ci0J CSAqIG5ldmVyIGJlIHRha2VuIHRvIGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZlbCBpbmRleCBz Y2FuIGhhcyBlbmRlZAotCQkgKiAodGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAqCi0JCSAqIFdl IGNvdWxkIGhhbmRsZSB0aGlzIGNhc2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQgYXJyYXkga2V5 cyBhcwotCQkgKiBtYXJrUG9zIHN0YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBh cnJheSBzdGF0ZSBsaWtlIHRoaXMKLQkJICogd291bGQgYWRkIGNvbXBsZXhpdHkuICBJbnN0ZWFk LCB3ZSBqdXN0IHVuc2V0IG1hcmtQb3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdodCBvciBtb3Jl TGVmdCAod2hpY2hldmVyIG1pZ2h0IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5nCi0JCSAqIGJ0 cmVzdHJwb3MgcmVzZXQgdGhlIHNjYW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlhbCBzY2FuIHBv c2l0aW9ucy4KLQkJICogSW4gZWZmZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZhbmNpbmcgdGhl IGFycmF5cyB1cCB0byB0aGUgZmlyc3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwgKHRoYXQgdGFr ZXMgcGxhY2UgYWZ0ZXIgaXQgaGFzIHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8KLQkJaWYgKHNv LT5uZWVkUHJpbVNjYW4pCi0JCXsKLQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHNvLT5j dXJyUG9zLmRpcikpCi0JCQkJc28tPm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQkJCWVsc2UK LQkJCQlzby0+bWFya1Bvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBtYXJrL3Jlc3Rv cmUgbm90IHN1cHBvcnRlZCBieSBwYXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQoIXNjYW4tPnBh cmFsbGVsX3NjYW4pOwotCX0KLQotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3Mp OworCWJvb2wJCW1vcmVJbkRpcjsKIAogCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRh dGEgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlibGtubyA9IHNvLT5j dXJyUG9zLm5leHRQYWdlOworCQlibGtubyA9IGJ0cHJpb3JiYXRjaC0+bmV4dFBhZ2U7CiAJZWxz ZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJyYmxrbm8gPSBzby0+ Y3VyclBvcy5jdXJyUGFnZTsKKwkJYmxrbm8gPSBidHByaW9yYmF0Y2gtPnByZXZQYWdlOworCWxh c3RjdXJyYmxrbm8gPSBidHByaW9yYmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRpciA9IFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0cHJpb3JiYXRjaC0+bW9yZVJpZ2h0IDogYnRw cmlvcmJhdGNoLT5tb3JlTGVmdDsKIAogCS8qCi0JICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBz Y2FucyB0aGF0IHdlcmUgc2NoZWR1bGVkIHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBfYnRfcmVhZHBh Z2UgZm9yIGN1cnJQb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8g dGhlCi0JICogb25lIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2theSB0byBs ZWF2ZSB0aGUgc2NhbidzIGFycmF5Ci0JICoga2V5cyBhcy1pcywgc2luY2UgdGhlIG5leHQgX2J0 X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKKwkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4 IHNjYW5zIHRoYXQgd2VyZSBzY2hlZHVsZWQgd2hlbiBwcmlvcmJhdGNoJ3MgY2FsbAorCSAqIHRv IF9idF9yZWFkcGFnZSBoYXBwZW5lZCB0byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0 aGUgb25lIHRoYXQKKwkgKiB3ZSdyZSBzdGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5IHRvIGxl YXZlIHRoZSBzY2FuJ3MgYXJyYXkga2V5cworCSAqIGFzLWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRf cmVhZHBhZ2Ugd2lsbCBhZHZhbmNlIHRoZW0uKQogCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIg IT0gZGlyKQorCWlmIChwcmlvcmJhdGNoLT5kaXIgIT0gZGlyKQogCQlzby0+bmVlZFByaW1TY2Fu ID0gZmFsc2U7CiAKKwkvKgorCSAqIEZvciBiaXRtYXAgc2NhbiBjYWxsZXJzLCByZWxlYXNlIHRo ZSBwcmlvciBiYXRjaCBub3cgc28gdGhhdAorCSAqIF9idF9yZWFkbmV4dHBhZ2UgY2FuIHJldXNl IGl0cyBtZW1vcnkuICBUaGlzIHdheSBiaXRtYXAgc2NhbnMgbmV2ZXIKKwkgKiBuZWVkIG1vcmUg dGhhbiBvbmUgYmF0Y2ggYWxsb2NhdGlvbi4KKwkgKi8KKwlpZiAoIXNjYW4tPnVzZWJhdGNocmlu ZykKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgcHJpb3JiYXRjaCk7CisKKwlp ZiAoYmxrbm8gPT0gUF9OT05FIHx8ICFtb3JlSW5EaXIpCisJeworCQkvKgorCQkgKiBwcmlvcmJh dGNoJ3MgcGFnZSBpcyBrbm93biB0byBiZSB0aGUgZmluYWwgbGVhZiBwYWdlIHdpdGggbWF0Y2hl cworCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uIChpdHMgX2J0X3JlYWRwYWdlIGNhbGwgZmln dXJlZCB0aGF0IG91dCkuCisJCSAqCisJCSAqIE5vdGU6IGlmIHNvLT5uZWVkUHJpbVNjYW4gaXMg c2V0LCB0aGVuIHByaW9yYmF0Y2gncyBsZWFmIHBhZ2UgaXMKKwkJICogYWN0dWFsbHkganVzdCB0 aGUgZmluYWwgcGFnZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4KKwkJICog aW4gdGhpcyBzY2FuIGRpcmVjdGlvbiAodGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmly c3QpLgorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVybiBOVUxMOwor CX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBi bGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJIV9idF9wYXJh bGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXJldHVy biBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCiAJ cmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwg ZmFsc2UpOwogfQogCkBAIC0xNzMyLDczICsxNjM4LDkwIEBAIF9idF9zdGVwcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogdG8gc3RvcCB0aGUgc2NhbiBvbiB0 aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRfY2hlY2trZXlzIGFnYWluc3QgdGhlIGhpZ2gKICAqIGtl eS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9yIGZ1bGwgZGV0YWlscy4KICAqCi0gKiBPbiBlbnRyeSwg c28tPmN1cnJQb3MgbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZh bGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJzdGJhdGNoIG11c3QgYmUgcGlubmVkIGFuZCBsb2NrZWQg KHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCiAgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBo YXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoKLSAqIE9uIGV4aXQs IHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+Y3VyclBvcyBhbmQgcmV0YWluZWQgbG9ja3MgYW5kIHBp bnMKKyAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBmaXJzdGJhdGNoIGFuZCByZXRhaW5l ZCBsb2NrcyBhbmQgcGlucwogICogYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIHRob3Nl IGxhaWQgb3V0IGZvciBfYnRfcmVhZG5leHRwYWdlIGV4aXQuCi0gKiBMaWtlIF9idF9yZWFkbmV4 dHBhZ2UsIG91ciByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hp bmcKLSAqIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi4KICAqCiAgKiBXZSBhbHdheXMg cmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwgcmVnYXJkbGVzcyBv ZgogICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxlbF9yZWxlYXNl IGFzIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCi1fYnRfcmVhZGZpcnN0cGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24g ZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0Zmlyc3RiYXRjaCA9IEJUQmF0 Y2hHZXREYXRhKGZpcnN0YmF0Y2gpOworCUJsb2NrTnVtYmVyIGJsa25vLAorCQkJCWxhc3RjdXJy Ymxrbm87CiAKLQlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBqdXN0IHBhcmFub2lhICovCi0Jc28t Pm1hcmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCi0KLQkvKiBJbml0aWFsaXplIHNvLT5j dXJyUG9zIGZvciB0aGUgZmlyc3QgcGFnZSAocGFnZSBpbiBzby0+Y3VyclBvcy5idWYpICovCisJ LyogSW5pdGlhbGl6ZSBmaXJzdGJhdGNoJ3MgcG9zaXRpb24gZm9yIHRoZSBmaXJzdCBwYWdlICov CiAJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCiAJewogCQlBc3NlcnQoc28tPm51bUFycmF5S2V5cyk7 CiAKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3JlUmln aHQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJh dGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAJfQog CWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCXNvLT5jdXJyUG9z Lm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWJ0 Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQg PSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0J CXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0 ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAl9CiAKIAkvKgog CSAqIEF0dGVtcHQgdG8gbG9hZCBtYXRjaGluZyB0dXBsZXMgZnJvbSB0aGUgZmlyc3QgcGFnZS4K IAkgKgotCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5n IHRoZSBzby0+Y3VyclBvcyBmaWVsZHMuCisJICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxs IGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIGZpcnN0YmF0Y2ggZmllbGRzLgogCSAqIF9idF9yZWFk cGFnZSBhbHNvIHJlbGVhc2VzIHBhcmFsbGVsIHNjYW4gKGV2ZW4gd2hlbiBpdCByZXR1cm5zIGZh bHNlKS4KIAkgKi8KLQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgb2ZmbnVtLCB0cnVlKSkK KwlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIGRpciwgb2ZmbnVtLCB0cnVlKSkK IAl7Ci0JCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0KLQkJLyoKLQkJICog X2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGlu KSBvbgotCQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUg cmV0dXJuaW5nIHR1cGxlcy4KLQkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+ Y3VyclBvcykpOwotCQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4ocmVsLCBzbyk7Ci0JCXJl dHVybiB0cnVlOworCQkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBp biBmaXJzdGJhdGNoLml0ZW1zW10gKi8KKwkJX2J0X2JhdGNoX3VubG9jayhzY2FuLCBmaXJzdGJh dGNoLCBidGZpcnN0YmF0Y2gtPmJ1Zik7CisJCXJldHVybiBmaXJzdGJhdGNoOwogCX0KIAotCS8q IFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBzby0+Y3Vy clBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5jdXJy UG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRoZSBw YWdlICovCisJX2J0X3JlbGJ1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBidGZpcnN0YmF0Y2gtPmJ1 Zik7CiAKLQkvKiBDYWxsIF9idF9yZWFkbmV4dHBhZ2UgdXNpbmcgaXRzIF9idF9zdGVwcGFnZSB3 cmFwcGVyIGZ1bmN0aW9uICovCi0JaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJcmV0 dXJuIGZhbHNlOworCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KKwlpZiAo U2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlibGtubyA9IGJ0Zmlyc3RiYXRjaC0+bmV4 dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGJ0Zmlyc3RiYXRjaC0+cHJldlBhZ2U7CisJbGFzdGN1 cnJibGtubyA9IGJ0Zmlyc3RiYXRjaC0+Y3VyclBhZ2U7CiAKLQkvKiBfYnRfcmVhZHBhZ2UgZm9y IGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5jdXJyUG9zKSBzdWNjZWVkZWQgKi8KLQlyZXR1cm4g dHJ1ZTsKKwlBc3NlcnQoZmlyc3RiYXRjaC0+ZGlyID09IGRpcik7CisKKwlpZiAoYmxrbm8gPT0g UF9OT05FIHx8CisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIWJ0Zmlyc3Ri YXRjaC0+bW9yZVJpZ2h0IDogIWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQpKQorCXsKKwkJLyoKKwkJ ICogZmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0 aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdp bGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJaW5kZXhhbV91dGlsX2JhdGNoX3Jl bGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJz dGJhdGNoKTsKKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQg bmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJIV9i dF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJ CXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAq LworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8s IGRpciwgZmFsc2UpOwogfQogCiAvKgpAQCAtMTgwOCwxMDIgKzE3MzEsNjcgQEAgX2J0X3JlYWRm aXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGly ZWN0aW9uIGRpcikKICAqIHByZXZpb3VzbHktc2F2ZWQgcmlnaHQgbGluayBvciBsZWZ0IGxpbmsu ICBsYXN0Y3VycmJsa25vIGlzIHRoZSBwYWdlIHRoYXQKICAqIHdhcyBjdXJyZW50IGF0IHRoZSBw b2ludCB3aGVyZSB0aGUgYmxrbm8gbGluayB3YXMgc2F2ZWQsIHdoaWNoIHdlIHVzZSB0bwogICog cmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxldGlvbnMgZHVyaW5n IGJhY2t3YXJkcyBzY2Fucy4KLSAqIEluIHRoZSBjb21tb24gY2FzZSB3aGVyZSBzZWl6ZWQ9ZmFs c2UsIGJsa25vIGlzIGVpdGhlciBzby0+Y3VyclBvcy5uZXh0UGFnZQotICogb3Igc28tPmN1cnJQ b3MucHJldlBhZ2UsIGFuZCBsYXN0Y3VycmJsa25vIGlzIHNvLT5jdXJyUG9zLmN1cnJQYWdlLgor ICogYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgbmV4dFBhZ2Ugb3IgcHJldlBhZ2UgKGRlcGVu ZGluZyBvbiB0aGUgY3VycmVudAorICogc2NhbiBkaXJlY3Rpb24pLCBhbmQgbGFzdGN1cnJibGtu byBpcyB0aGUgcHJpb3IgYmF0Y2gncyBjdXJyUGFnZS4KICAqCi0gKiBPbiBlbnRyeSwgc28tPmN1 cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBzby0+Y3VyclBvcy5idWYgbXVz dAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVkZWQgYnkgY2FsbGVyIChub3Rl IHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBiZSByZWFkIGFnYWluIGluIGFs bW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJzCi0gKiB0aGF0IHNlaXplZCB0 aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNzIHNlaXplZD10cnVlOyBzdWNo IGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25vIGFyZ3VtZW50cyBjb21lIGZy b20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNhbGxlcnMganVzdCBwYXNzIHVz IHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhlaXIKLSAqIHNvLT5jdXJyUG9z LCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYpIGNhbiBiZSB1c2VkIHRvIGVu ZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBjYW4gbmV2ZXIg YmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0IGJlIHJlYWQgbmV4dCBkdXJp bmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZpZ3VyZSB0aGF0Ci0gKiBwYXJ0 IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4gKHRoZSBjb3JyZWN0IHBhZ2Ug dG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhlIHNlaXplZD1mYWxzZSBjYWxs ZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICogdW5sZXNzIGJsa25vL3NvLT5j dXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlzIGFscmVhZHkgUF9OT05FLAot ICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+Y3VyclBvcy5tb3JlTGVmdCBp cyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdlIHNob3VsZCBiZSBsb2NrZWQg YnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBkYXRl ZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50ZXJlc3RpbmcgcGFnZSwgYW5k IHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVyIG9uCi0gKiBzdWNj ZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5kZXggc2NhbnMsIHdoZW4gd2Ug ZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2NraW5nIFZBQ1VVTSkuCisgKiBP biBzdWNjZXNzIGV4aXQsIHJldHVybnMgYmF0Y2ggY29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5l eHQgcGFnZSB0aGF0IGhhcworICogYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0uICBJZiB0aGVy ZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBpbiB0aGUKKyAqIGdpdmVuIHNjYW4gZGlyZWN0 aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLgogICoKLSAqIElmIHRoZXJlIGFyZSBubyBtb3JlIG1h dGNoaW5nIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgd2UgaW52YWxpZGF0ZQotICog c28tPmN1cnJQb3MgKHdoaWxlIGVuc3VyaW5nIGl0IHJldGFpbnMgbm8gbG9ja3Mgb3IgcGlucyks IGFuZCByZXR1cm4gZmFsc2UuCi0gKgotICogV2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9y IGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YKLSAqIHN1Y2Nlc3Mgb3IgZmFp bHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxl LgorICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3Qgc2VpemUgdGhlIHNjYW4gYmVmb3JlIGNh bGxpbmcgaGVyZS4gIGJsa25vIGFuZAorICogbGFzdGN1cnJibGtubyBzaG91bGQgY29tZSBmcm9t IHRoZSBzZWl6ZWQgc2Nhbi4gIFdlJ2xsIHJlbGVhc2UgdGhlIHNjYW4gYXMKKyAqIHNvb24gYXMg cG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKIF9idF9y ZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkg QmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgc2VpemVk KQorCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9uIGRpciwgYm9v bCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlC VFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJSW5kZXhTY2Fu QmF0Y2ggbmV3YmF0Y2g7CisJQlRCYXRjaERhdGEgKmJ0bmV3YmF0Y2g7CiAKLQlBc3NlcnQoc28t PmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyB8fCBzZWl6ZWQpOwotCUFzc2VydCgh KGJsa25vID09IFBfTk9ORSAmJiBzZWl6ZWQpKTsKLQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVk KHNvLT5jdXJyUG9zKSk7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwlu ZXdiYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKKwlidG5ld2JhdGNoID0g QlRCYXRjaEdldERhdGEobmV3YmF0Y2gpOwogCiAJLyoKLQkgKiBSZW1lbWJlciB0aGF0IHRoZSBz Y2FuIGFscmVhZHkgcmVhZCBsYXN0Y3VycmJsa25vLCBhIHBhZ2UgdG8gdGhlIGxlZnQKLQkgKiBv ZiBibGtubyAob3IgcmVtZW1iZXIgcmVhZGluZyBhIHBhZ2UgdG8gdGhlIHJpZ2h0LCBmb3IgYmFj a3dhcmRzIHNjYW5zKQorCSAqIG5ld2JhdGNoIHdpbGwgYmUgdGhlIGJhdGNoIGZvciBsYXN0Y3Vy cmJsa25vLCBhIHBhZ2UgdG8gdGhlIGxlZnQgb2YKKwkgKiBibGtubyAob3IgdG8gdGhlIHJpZ2h0 LCB3aGVuIHRoZSBzY2FuIGlzIG1vdmluZyBiYWNrd2FyZHMpCiAJICovCi0JaWYgKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCWVs c2UKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwlidG5ld2JhdGNoLT5tb3JlTGVm dCA9IHRydWU7CisJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAogCWZvciAoOzspCiAJ ewogCQlQYWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCi0JCWlmIChibGtubyA9 PSBQX05PTkUgfHwKLQkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwotCQkJICFzby0+ Y3VyclBvcy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQb3MubW9yZUxlZnQpKQotCQl7Ci0JCQkvKiBt b3N0IHJlY2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3RjdXJyYmxrbm8pIGVuZGVkIHNj YW4gKi8KLQkJCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vICYm ICFzZWl6ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlfYnRf cGFyYWxsZWxfZG9uZShzY2FuKTsJLyogaWZmICFzby0+bmVlZFByaW1TY2FuICovCi0JCQlyZXR1 cm4gZmFsc2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCi0JCS8qIHBh cmFsbGVsIHNjYW4gbXVzdCBuZXZlciBhY3R1YWxseSB2aXNpdCBzby0+Y3VyclBvcyBibGtubyAq LwotCQlpZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKLQkJCSFf YnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQot CQl7Ci0JCQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBkb25lIChvciBhbm90aGVyIHByaW1pdGl2ZSBz Y2FuIHJlcXVpcmVkKSAqLwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0J CQlyZXR1cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlKS0+bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSAmJiBsYXN0Y3Vy cmJsa25vICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkK IAkJewogCQkJLyogcmVhZCBibGtubywgYnV0IGNoZWNrIGZvciBpbnRlcnJ1cHRzIGZpcnN0ICov CiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2dl dGJ1ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJCWJ0bmV3YmF0Y2gtPmJ1ZiA9IF9idF9nZXRi dWYocmVsLCBibGtubywgQlRfUkVBRCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiByZWFkIGJs a25vLCBhdm9pZGluZyByYWNlIChhbHNvIGNoZWNrcyBmb3IgaW50ZXJydXB0cykgKi8KLQkJCXNv LT5jdXJyUG9zLmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAor CQkJYnRuZXdiYXRjaC0+YnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxr bm8sCiAJCQkJCQkJCQkJCQkJCSBsYXN0Y3VycmJsa25vKTsKLQkJCWlmIChzby0+Y3VyclBvcy5i dWYgPT0gSW52YWxpZEJ1ZmZlcikKKwkJCWlmIChidG5ld2JhdGNoLT5idWYgPT0gSW52YWxpZEJ1 ZmZlcikKIAkJCXsKIAkJCQkvKiBtdXN0IGhhdmUgYmVlbiBhIGNvbmN1cnJlbnQgZGVsZXRpb24g b2YgbGVmdG1vc3QgcGFnZSAqLwotCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3Mp OwogCQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQkJCXJldHVybiBmYWxzZTsKKwkJCQlp bmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQkJcmV0dXJuIE5V TEw7CiAJCQl9CiAJCX0KIAotCQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYp OworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidG5ld2JhdGNoLT5idWYpOwogCQlvcGFxdWUgPSBC VFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJCWxhc3RjdXJyYmxrbm8gPSBibGtubzsKIAkJaWYgKGxp a2VseSghUF9JR05PUkUob3BhcXVlKSkpCkBAIC0xOTExLDE3ICsxNzk5LDE3IEBAIF9idF9yZWFk bmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAkJCS8qIHNl ZSBpZiB0aGVyZSBhcmUgYW55IG1hdGNoZXMgb24gdGhpcyBwYWdlICovCiAJCQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwg Y2xlYXIgbW9yZVJpZ2h0IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShz Y2FuLCBkaXIsIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9y ZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUF9GSVJTVERBVEFLRVkob3Bh cXVlKSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5u ZXh0UGFnZTsKKwkJCQlibGtubyA9IGJ0bmV3YmF0Y2gtPm5leHRQYWdlOwogCQkJfQogCQkJZWxz ZQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZUxlZnQgaWYgd2Ug Y2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUGFnZUdldE1heE9m ZnNldE51bWJlcihwYWdlKSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5l d2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBmaXJz dHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwor CQkJCWJsa25vID0gYnRuZXdiYXRjaC0+cHJldlBhZ2U7CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAt MTkzNiwxOSArMTgyNCwzOCBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QmxvY2tOdW1iZXIgYmxrbm8sCiAJCX0KIAogCQkvKiBubyBtYXRjaGluZyB0dXBsZXMgb24gdGhp cyBwYWdlICovCi0JCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlzZWl6ZWQg PSBmYWxzZTsJCQkvKiByZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2UgKG9yIGJ5IHVzKSAqLworCQlf YnRfcmVsYnVmKHJlbCwgYnRuZXdiYXRjaC0+YnVmKTsKKworCQkvKiBDb250aW51ZSB0aGUgc2Nh biBpbiB0aGlzIGRpcmVjdGlvbj8gKi8KKwkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkJKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCQkgIWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA6 ICFidG5ld2JhdGNoLT5tb3JlTGVmdCkpCisJCXsKKwkJCS8qCisJCQkgKiBibGtubyBfYnRfcmVh ZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2ggaWYKKwkJCSAq IHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9m aXJzdCkKKwkJCSAqLworCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlpbmRleGFtX3V0 aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQor CisJCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtu byAqLworCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCQkhX2J0X3BhcmFs bGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJeworCQkJ aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5V TEw7CQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKwkJfQorCisJ CWZpcnN0cGFnZSA9IGZhbHNlOwkJLyogbmV4dCBwYWdlIGNhbm5vdCBiZSBmaXJzdCAqLwogCX0K IAotCS8qCi0JICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBt YXliZSB0aGUgcGluKSBvbgotCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3Ig YnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCSAqLwotCUFzc2VydChzby0+Y3VyclBvcy5j dXJyUGFnZSA9PSBibGtubyk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9z KSk7Ci0JX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOworCS8qIF9idF9yZWFk cGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIG5ld2JhdGNoLml0ZW1zW10gKi8KKwlB c3NlcnQoYnRuZXdiYXRjaC0+Y3VyclBhZ2UgPT0gYmxrbm8pOworCV9idF9iYXRjaF91bmxvY2so c2NhbiwgbmV3YmF0Y2gsIGJ0bmV3YmF0Y2gtPmJ1Zik7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1 cm4gbmV3YmF0Y2g7CiB9CiAKIC8qCkBAIC0yMTc0LDI1ICsyMDgxLDI0IEBAIF9idF9nZXRfZW5k cG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFy YWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxp bmcgaGVyZS4KICAqIEV4aXQgY29uZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJz dCgpLgogICovCi1zdGF0aWMgYm9vbAotX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKK19idF9lbmRwb2ludChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBmaXJz dGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpi dGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShmaXJzdGJhdGNoKTsKIAlQYWdlCQlwYWdlOwog CUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIHN0YXJ0OwogCi0JQXNzZXJ0KCFC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KCFzby0+bmVlZFByaW1TY2Fu KTsKKwlBc3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4p OwogCiAJLyoKIAkgKiBTY2FuIGRvd24gdG8gdGhlIGxlZnRtb3N0IG9yIHJpZ2h0bW9zdCBsZWFm IHBhZ2UuICBUaGlzIGlzIGEgc2ltcGxpZmllZAogCSAqIHZlcnNpb24gb2YgX2J0X3NlYXJjaCgp LgogCSAqLwotCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2Fu RGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKKwlidGZpcnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRf ZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKIAotCWlmICgh QnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChidGZp cnN0YmF0Y2gtPmJ1ZikpCiAJewogCQkvKgogCQkgKiBFbXB0eSBpbmRleC4gTG9jayB0aGUgd2hv bGUgcmVsYXRpb24sIGFzIG5vdGhpbmcgZmluZXIgdG8gbG9jawpAQCAtMjIwMyw3ICsyMTA5LDcg QEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJ CXJldHVybiBmYWxzZTsKIAl9CiAKLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5i dWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0Zmlyc3RiYXRjaC0+YnVmKTsKIAlvcGFxdWUg PSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJQXNzZXJ0KFBfSVNMRUFGKG9wYXF1ZSkpOwogCkBA IC0yMjI5LDkgKzIxMzUsNSBAQCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFn ZSBvZiB0aGUgc2Nhbi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIHN0YXJ0 LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0J cmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gs IHN0YXJ0LCBkaXIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCmluZGV4IDli MDkxODU4OS4uNzZiMzgzMDFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCkBA IC0xOSwxNyArMTksMTMgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNpbmNsdWRl ICJhY2Nlc3MvcmVsb3B0aW9ucy5oIgotI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJjb21tb24vaW50LmgiCi0jaW5j bHVkZSAibGliL3F1bmlxdWUuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1 dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0X2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZh LCBjb25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50CV9idF9rZWVwX25hdHRzKFJlbGF0aW9uIHJl bCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJCSAgIEluZGV4VHVwbGUgZmlyc3RyaWdodCwg QlRTY2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAtMTQ0LDI0NyArMTQwLDYgQEAgX2J0X21rc2Nh bmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCkKIAlyZXR1cm4ga2V5OwogfQogCi0v KgotICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cwotICovCi1zdGF0 aWMgaW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQot ewotCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOwotCWludAkJCWIgPSAqKChjb25zdCBp bnQgKikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Ci19Ci0KLS8qCi0gKiBfYnRf a2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4c2NhbiBjYWxs ZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0gKgotICogc2Nhbi0+b3BhcXVlLCByZWZl cmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhl Ci0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0 aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDApLgotICoK LSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBzby0+Y3VyclBvcyBwYWdl LCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28tPmRyb3BQaW4uICBXaGVu IHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICogSXQnbGwgY29udGludWUg dG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgotICoK LSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0 aGUgcmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQuICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhh dCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCi0gKiBjb250aW51b3VzbHkg ZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcgdGhpcyBmdW5j dGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90IGhh dmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBwYWdlLCBzbyB0aGUgcGFnZSdzIFRJRHMg Y2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlzawotICogdGhh dCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0byB1c2UgYSBy ZWN5Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRoZSBzYW1lIFRJ RCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQotICogcGFnZSkuICBXZSBjYW4ndCByZWx5 IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdlcmx5Ci0gKiAo c28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcg TFBfREVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNl IGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgotICogV2UgdG90YWxseSBnaXZl IHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNoYW5nZWQuCi0g KgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ZHJvcFBpbiBzY2Fu cywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBjb3BlIHdpdGggY2FzZXMgd2hlcmUgaXRl bXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFuCi0gKiBpdGVtIGhh cyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwgd2UnbGwgZmFpbCB0 byBmaW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgotICovCi12b2lkCi1fYnRfa2ls bGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRl eFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKLQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0TnVtYmVyIG1p bm9mZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9IHNvLT5udW1L aWxsZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JQnVmZmVyCQlidWY7Ci0K LQlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOyAvKiBjYW4ndCBi ZSBhIGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBBbHdheXMgaW52YWxpZGF0ZSBzby0+a2ls bGVkSXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3VyclBvcyAqLwotCXNvLT5udW1LaWxsZWQg PSAwOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBzby0+a2lsbGVkSXRl bXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAqIGxvb3AgYmVsb3cgZXhwZWN0cyB0aGlz ICh3aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxlcywgYXQgbGVhc3QpLgotCSAqIHNvLT5r aWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5lZCBp dGVtcyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBzY2FucyBtaWdodCBoYXZlIGV2ZW4gc2F2 ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoKLQkgKiBTb3J0IGFuZCB1bmlxdWUtaWZ5 IHNvLT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBhbGwgdGhpcy4KLQkgKi8KLQlpZiAobnVt S2lsbGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywgbnVtS2lsbGVkLCBzaXpl b2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0gcXVuaXF1ZShzby0+a2ls bGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCi0JCQkJCQkJX2J0X2NvbXBhcmVfaW50 KTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyoKLQkJICogV2UgaGF2ZSBoZWxk IHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4IHR1cGxlcywKLQkJ ICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4gd2lsbCBoYXZlIHBy ZXZlbnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xpbmcgYW55IG9mIHRo ZSBUSURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJX2J0X2xvY2tidWYocmVs LCBidWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0JewotCQlYTG9nUmVjUHRyCWxhdGVzdGxzbjsK LQotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IF9i dF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7Ci0KLQkJbGF0ZXN0 bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChzby0+Y3VyclBvcy5sc24g PD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBsYXRlc3Rsc24pCi0JCXsK LQkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KLQkJCV9idF9yZWxidWYocmVs LCBidWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogVW5tb2RpZmllZCwgaGludGluZyBpcyBz YWZlICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKLQlvcGFxdWUgPSBCVFBh Z2VHZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKLQlt YXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0JLyogSXRlcmF0ZSB0aHJv dWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLwotCWZvciAoaW50IGkg PSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVtSW5kZXggPSBzby0+a2ls bGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1z W2l0ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRlbS0+aW5kZXhPZmZzZXQ7 Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0gJiYKLQkJCSAg IGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0JCUFzc2VydChpID09IDAgfHwK LQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRlbXNbaSAtIDFd XS5pbmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8IG1pbm9mZikKLQkJCWNvbnRpbnVlOwkJ CS8qIHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCi0JCXsKLQkJ CUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJSW5kZXhUdXBs ZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKLQkJCWJvb2wJ CWtpbGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwbGUp KQotCQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0JCQkJaW50CQkJbnBvc3RpbmcgPSBCVHJl ZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlpbnQJCQlqOwotCi0JCQkJLyoKLQkJCQkg KiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBhbG1vc3QgYW55 IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAhc28tPmRyb3BQaW4g Y2FzZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgcG9zdGluZyBsaXN0IHR1 cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAqIHR1cGxlIHdoZW4gd2UgZmlyc3QgZW5j b3VudGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8KLQkJCQlmb3IgKGogPSAwOyBqIDwgbnBv c3Rpbmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0 UG9zdGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0s ICZraXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJLyogb3V0IG9mIHBvc3RpbmcgbGlzdCBs b29wICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0gbXVzdCBoYXZlIG1hdGNoaW5nIG9mZm51 bSB3aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICogdGhvdWdoIG9ubHkgaW4gdGhlIGNvbW1v biBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJCSAqIGhhdmUgYmVlbiBjb25jdXJyZW50 bHkgbW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0g b2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJLyoKLQkJCQkJICogUmVhZC1haGVhZCB0 byBsYXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJCQkJICogV2UgcmVseSBvbiB0aGUgYXNz dW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQotCQkJCQkgKiB3aWxsIHByZXZl bnQgdXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGluZyBsaXN0IHR1cGxlCi0JCQkJCSAqIGZ1 bGx5IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0IGhlYXAgVElEIGluIG5leHQKLQkJCQkJ ICogbG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJCSAqIElmLCBvbiB0aGUgb3RoZXIgaGFu ZCwgdGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4KLQkJCQkJICogdGhlIHBvc3RpbmcgbGlz dCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAotCQkJCQkgKiByZWdhcmRsZXNzIChpLmUu IHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFzdAotCQkJCQkgKiBraXRlbSBpcyBhbHNv IHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxlCi0JCQkJCSAqIGNvcnJl Y3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4KLQkJCQkJICovCi0JCQkJ CWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3Nv LT5raWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkgKiBEb24ndCBib3Ro ZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0bwotCQkJCSAq IGF2b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRoYXQgcmVsYXRlIHRvIHRoZSBzYW1lCi0J CQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWljcm8tb3B0aW1pemF0aW9u IGhhcmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0 aGUgb3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0Y2ggb24gdGhpcyBzYW1l IHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkgKiBUSUQgaW5zdGVhZCwgc28gd2UnbGwg YWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKLQkJCQkgKiB0dXBsZSBwcmV0dHkgcXVp Y2tseS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBvc3RpbmcpCi0JCQkJCWtpbGx0dXBsZSA9 IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3Rp ZCwgJmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVwbGUgPSB0cnVlOwotCi0JCQkvKgotCQkJ ICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFscmVhZHkuICBTaW5jZSB0 aGlzCi0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcgYSBidWZmZXIgbG9jayBwb3NzaWJseSBp biBzaGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2libGUgdGhhdCBtdWx0aXBsZSBwcm9jZXNz ZXMgYXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11bHRhbmVvdXNseSwgbGVhZGluZyB0byBt dWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQKLQkJCSAqIHRvIFdBTCAoaWYgd2Fs X2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoCi0JCQkgKiBp cyB1bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFk KGlpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewotCQkJCQkvKgot CQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNh bgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9j ay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRp bnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkK LQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91bmQgdGhlIGl0ZW0v YWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLwotCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCQkJ a2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2Vh cmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsK LQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5l ZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgotCSAqCi0JICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0 aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICogQlRQX0hBU19HQVJCQUdF IGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3ZQotCSAq IG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2UgaW5kZXhl cy4pCi0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+YnRwb19mbGFn cyB8PSBCVFBfSEFTX0dBUkJBR0U7Ci0JCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1 ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoIXNvLT5kcm9wUGluKQotCQlfYnRf dW5sb2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9idF9yZWxidWYocmVsLCBidWYpOwotfQot Ci0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIG1hbmFnZSBhIHNoYXJlZC1tZW1vcnkg YXJlYSBpbiB3aGljaCB3ZSB0cmFjawogICogYXNzaWdubWVudCBvZiAidmFjdXVtIGN5Y2xlIElE cyIgdG8gY3VycmVudGx5LWFjdGl2ZSBidHJlZSB2YWN1dW1pbmcKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnR4bG9nLmMKaW5kZXggZGZmN2QyODZmLi4zYmM1ZTVjY2QgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0eGxvZy5jCkBAIC0xMDk1LDE1ICsxMDk1LDE1IEBAIGJ0cmVlX21hc2soY2hhciAq cGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBidHJlZSBsZWFmIHBh Z2VzLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIExQX0ZMQUdTIHdpdGhvdXQKIAkJICog ZW1pdHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBtYXNrIHRoZSBsaW5lIHBvaW50ZXIgZmxh Z3MuIFNlZQotCQkgKiBfYnRfa2lsbGl0ZW1zKCksIF9idF9jaGVja191bmlxdWUoKSBmb3IgZGV0 YWlscy4KKwkJICogYnRraWxsaXRlbXNiYXRjaCgpLCBfYnRfY2hlY2tfdW5pcXVlKCkgZm9yIGRl dGFpbHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBhZ2UpOwogCX0KIAogCS8qCiAJICogQlRQ X0hBU19HQVJCQUdFIGlzIGp1c3QgYW4gdW4tbG9nZ2VkIGhpbnQgYml0LiBTbywgbWFzayBpdC4g U2VlCi0JICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgpLCBfYnRfa2lsbGl0ZW1zKCks IGFuZCBfYnRfY2hlY2tfdW5pcXVlKCkKLQkgKiBmb3IgZGV0YWlscy4KKwkgKiBfYnRfZGVsZXRl X29yX2RlZHVwX29uZV9wYWdlKCksIGJ0a2lsbGl0ZW1zYmF0Y2goKSwgYW5kCisJICogX2J0X2No ZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCSAqLwogCW1hc2tvcGFxLT5idHBvX2ZsYWdzICY9 IH5CVFBfSEFTX0dBUkJBR0U7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRl eCA5ZjUzNzliODcuLmRjOTlmYzA4NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Nw Z2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMu YwpAQCAtODgsMTAgKzg4LDEyIEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFt YmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBzcGdyZXNjYW4sCiAJCS5h bWdldHR1cGxlID0gc3BnZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2ls bGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1yZWxlYXNlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRi aXRtYXAgPSBzcGdnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBzcGdlbmRzY2FuLAotCQkuYW1t YXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5V TEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVs c2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYwppbmRleCBiZWQ2NTg3YzguLjRlMDViZDc3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpA QCAtMTM1LDcgKzEzNSw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcmVjdXJzaXZlX3VuaW9uX2luZm8o UmVjdXJzaXZlVW5pb25TdGF0ZSAqcnN0YXRlLAogc3RhdGljIHZvaWQgc2hvd19tZW1vaXplX2lu Zm8oTWVtb2l6ZVN0YXRlICptc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCQkgIEV4cGxh aW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmFn Z3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKLXN0YXRpYyB2b2lkIHNob3dfaW5kZXhzZWFyY2hl c19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2 b2lkIHNob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0 ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5mbyhCaXRtYXBIZWFwU2NhblN0 YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQg c2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hhciAqcWxhYmVsLCBpbnQgd2hpY2gs CkBAIC0xOTcyLDcgKzE5NzIsNyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwg TGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hvd19pbnN0cnVtZW50 YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJCQkJCQkJCSAgIHBs YW5zdGF0ZSwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7 CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNh c2UgVF9JbmRleE9ubHlTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChJbmRleE9ubHlTY2FuICop IHBsYW4pLT5pbmRleHF1YWwsCkBAIC0xOTg2LDE1ICsxOTg2LDEyIEBAIEV4cGxhaW5Ob2RlKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+cXVhbCkK IAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIs IDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlpZiAoZXMtPmFuYWx5emUpCi0J CQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkhlYXAgRmV0Y2hlcyIsIE5VTEwsCi0JCQkJCQkJCQkg cGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzMiwgMCwgZXMpOwotCQkJc2hvd19pbmRleHNl YXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5z dGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBJbmRleFNjYW46CiAJCQlzaG93 X3NjYW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFsb3JpZywKIAkJ CQkJCSAgICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsKLQkJCXNob3df aW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hvd19pbmRleHNjYW5faW5m byhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfQml0bWFwSGVhcFNjYW46CiAJ CQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEhlYXBTY2FuICopIHBsYW4pLT5iaXRtYXBxdWFsb3Jp ZywKQEAgLTM4NTgsMTUgKzM4NTUsMTYgQEAgc2hvd19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmFn Z3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogfQogCiAvKgotICogU2hvdyB0aGUgdG90YWwgbnVt YmVyIG9mIGluZGV4IHNlYXJjaGVzIGZvciBhCisgKiBTaG93IGluZGV4IHNjYW4gcmVsYXRlZCBl eGVjdXRvciBpbnN0cnVtZW50YXRpb24gZm9yIGEKICAqIEluZGV4U2Nhbi9JbmRleE9ubHlTY2Fu L0JpdG1hcEluZGV4U2NhbiBub2RlCiAgKi8KIHN0YXRpYyB2b2lkCi1zaG93X2luZGV4c2VhcmNo ZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykKK3Nob3dfaW5k ZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB7CiAJ UGxhbgkgICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVt ZW50YXRpb24gKlNoYXJlZEluZm8gPSBOVUxMOwotCXVpbnQ2NAkJbnNlYXJjaGVzID0gMDsKKwl1 aW50NjQJCW5zZWFyY2hlcyA9IDAsCisJCQkJbmhlYXBmZXRjaGVzID0gMDsKIAogCWlmICghZXMt PmFuYWx5emUpCiAJCXJldHVybjsKQEAgLTM4ODcsNiArMzg4NSw3IEBAIHNob3dfaW5kZXhzZWFy Y2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCQkJCUlu ZGV4T25seVNjYW5TdGF0ZSAqaW5kZXhzdGF0ZSA9ICgoSW5kZXhPbmx5U2NhblN0YXRlICopIHBs YW5zdGF0ZSk7CiAKIAkJCQluc2VhcmNoZXMgPSBpbmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQt Pm5zZWFyY2hlczsKKwkJCQluaGVhcGZldGNoZXMgPSBpbmRleHN0YXRlLT5pb3NzX0luc3RydW1l bnQtPm5oZWFwZmV0Y2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5kZXhzdGF0ZS0+aW9zc19TaGFy ZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzkxMCw5ICszOTA5LDEzIEBAIHNob3dfaW5k ZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQog CQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICp3aW5zdHJ1bWVudCA9ICZTaGFyZWRJbmZvLT53 aW5zdHJ1bWVudFtpXTsKIAogCQkJbnNlYXJjaGVzICs9IHdpbnN0cnVtZW50LT5uc2VhcmNoZXM7 CisJCQluaGVhcGZldGNoZXMgKz0gd2luc3RydW1lbnQtPm5oZWFwZmV0Y2hlczsKIAkJfQogCX0K IAorCWlmIChub2RlVGFnKHBsYW4pID09IFRfSW5kZXhPbmx5U2NhbikKKwkJRXhwbGFpblByb3Bl cnR5VUludGVnZXIoIkhlYXAgRmV0Y2hlcyIsIE5VTEwsIG5oZWFwZmV0Y2hlcywgZXMpOworCiAJ RXhwbGFpblByb3BlcnR5VUludGVnZXIoIkluZGV4IFNlYXJjaGVzIiwgTlVMTCwgbnNlYXJjaGVz LCBlcyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggNjM1Njc5Y2MxLi41NGMy NDAzZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC04ODQsNyArODg0LDcgQEAgRGVm aW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2Vz IG5vdCBzdXBwb3J0IG11bHRpY29sdW1uIGluZGV4ZXMiLAogCQkJCQkJYWNjZXNzTWV0aG9kTmFt ZSkpKTsKLQlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMKQor CWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwgJiYgYW1Sb3V0 aW5lLT5hbWdldGJhdGNoID09IE5VTEwpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFjY2VzcyBtZXRo b2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzIiwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNBbWkuYwppbmRleCA5MGE2OGMwZDEuLjBkZmIwMTMzNyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNBbWkuYwpAQCAtNDI4LDcgKzQyOCw3IEBAIEV4ZWNTdXBwb3J0c01hcmtSZXN0b3JlKFBhdGgg KnBhdGhub2RlKQogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKIAogCQkJLyoKLQkJCSAqIE5vdCBh bGwgaW5kZXggdHlwZXMgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuCisJCQkgKiBOb3QgYWxsIGluZGV4 IHR5cGVzIHN1cHBvcnQgcmVzdG9yaW5nIGEgbWFyawogCQkJICovCiAJCQlyZXR1cm4gY2FzdE5v ZGUoSW5kZXhQYXRoLCBwYXRobm9kZSktPmluZGV4aW5mby0+YW1jYW5tYXJrcG9zOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDlkMDcxZTQ5NS4uM2YwYzg0NTNkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwpAQCAtODE1LDEwICs4MTUsMTIgQEAgY2hlY2tf ZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGlu ZGV4LAogcmV0cnk6CiAJY29uZmxpY3QgPSBmYWxzZTsKIAlmb3VuZF9zZWxmID0gZmFsc2U7Ci0J aW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRleCwgJkRpcnR5U25hcHNob3Qs IE5VTEwsIGluZG5rZXlhdHRzLCAwKTsKKwlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhl YXAsIGluZGV4LCBmYWxzZSwgJkRpcnR5U25hcHNob3QsIE5VTEwsCisJCQkJCQkJCSBpbmRua2V5 YXR0cywgMCk7CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0 cywgTlVMTCwgMCk7CiAKLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhf Z2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJ ZXhpc3Rpbmdfc2xvdCkpCiAJewogCQlUcmFuc2FjdGlvbklkIHh3YWl0OwogCQlYTFRXX09wZXIJ cmVhc29uX3dhaXQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGlj YXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IDI0 OTdlZTdlZC4uMmY2MzZiYTNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24u YwpAQCAtMjA1LDcgKzIwNSw3IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRp b24gcmVsLCBPaWQgaWR4b2lkLAogCXNrZXlfYXR0b2ZmID0gYnVpbGRfcmVwbGluZGV4X3NjYW5f a2V5KHNrZXksIHJlbCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKIAogCS8qIFN0YXJ0IGFuIGluZGV4 IHNjYW4uICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgJnNuYXAsIE5V TEwsIHNrZXlfYXR0b2ZmLCAwKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVs LCBmYWxzZSwgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKIAogcmV0cnk6CiAJZm91bmQg PSBmYWxzZTsKQEAgLTIxMyw3ICsyMTMsNyBAQCByZXRyeToKIAlpbmRleF9yZXNjYW4oc2Nhbiwg c2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxl ICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlv biwgb3V0c2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNp dmUgZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCkBAIC02NjYs MTIgKzY2NiwxMiBAQCBSZWxhdGlvbkZpbmREZWxldGVkVHVwbGVJbmZvQnlJbmRleChSZWxhdGlv biByZWwsIE9pZCBpZHhvaWQsCiAJICogbm90IHlldCBjb21taXR0ZWQgb3IgdGhvc2UganVzdCBj b21taXR0ZWQgcHJpb3IgdG8gdGhlIHNjYW4gYXJlCiAJICogZXhjbHVkZWQgaW4gdXBkYXRlX21v c3RfcmVjZW50X2RlbGV0aW9uX2luZm8oKS4KIAkgKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2Fu KHJlbCwgaWR4cmVsLCBTbmFwc2hvdEFueSwgTlVMTCwgc2tleV9hdHRvZmYsIDApOworCXNjYW4g PSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNlLCBTbmFwc2hvdEFueSwgTlVMTCwg c2tleV9hdHRvZmYsIDApOwogCiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2Zm LCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAqLwotCXdoaWxlIChpbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKKwl3 aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBzY2Fuc2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1YWxpdHkgY2hl Y2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggMmNhODIyY2Y4Li5hODk3N2NjYWMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKQEAgLTIwMiw2ICsyMDIsNyBA QCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4U2NhblN0YXRlICpub2RlKQogCQkg KiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgQml0bWFwSW5kZXhTY2FuU3RhdGUgYW5kIHplcm9lZCBz dGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0 cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5iaXNzX0luc3RydW1lbnQtPm5oZWFw ZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMKaW5kZXggZjg0ZGIwNDc2Li44NGJmZjYwY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQsMTQgKzM0LDEyIEBACiAjaW5jbHVkZSAiYWNj ZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFj Y2Vzcy90dXBkZXNjLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCkBAIC02NSw3ICs2 Myw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCVNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNs b3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2Fy eSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtOTAsMTggKzg3LDE0IEBAIElu ZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiBwYXJhbGxlbC4KIAkJ ICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5v ZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBz aG90LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUt Pmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMp OwogCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKLQotCi0JCS8qIFNldCBpdCB1 cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRf aXR1cCA9IHRydWU7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCQlB c3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCQkvKgogCQkgKiBJ ZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhl YWQgYW5kCkBAIC0xMTgsNzggKzExMSwxMCBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5T dGF0ZSAqbm9kZSkKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwg ZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0 X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAodGFibGVfaW5kZXhf Z2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIG5vZGUtPmlvc3NfVGFibGVTbG90KSkK IAl7Ci0JCWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOwotCiAJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CiAKLQkJLyoKLQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhl IFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCi0JCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJl IGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCi0JCSAqIHdlJ2xsIHVz ZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhIHNvdXJjZS4K LQkJICoKLQkJICogTm90ZSBvbiBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0czogdmlzaWJpbGl0eW1h cF9nZXRfc3RhdHVzIGRvZXMgbm90Ci0JCSAqIGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZl ciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQKLQkJICogaGVyZSBjb3VsZCBiZSBz bGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0bwotCQkg KiBtYXR0ZXIuCi0JCSAqCi0JCSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0 IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwKLQkJICogYmVjYXVzZSB0aGUgdHVwbGUgaXMg cHJlc2VudCBpbiB0aGUgaW5kZXggcGFnZSBidXQgbm90IHZpc2libGUuIFRoZQotCQkgKiByZWFk aW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBp bmRleAotCQkgKiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZSBU SUQgaW50byB0aGUgaW5kZXgKLQkJICogKHVzaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBp bmRleCBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQKLQkJICogaXMgY2xlYXJlZCBiZWZvcmUg dXBkYXRpbmcgdGhlIGluZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlCi0JCSAqIGlu ZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNl ZSB0aGUKLQkJICogY2xlYXJlZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElE LgotCQkgKgotCQkgKiBEZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4IHBhZ2UgKG9ubHkg VkFDVVVNIHdpbGwgY2xlYXIgb3V0Ci0JCSAqIHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2Yg dGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKLQkJICogc2VyaWFsaXplZCB3aXRoIHRoaXMg dGVzdCBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCi0JCSAqIHNpZ25pZmlj YW50bHkgc3RhbGUuIEhvd2V2ZXIsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRlbGV0ZSByaWdo dAotCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGlsIHRo ZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5k cyAoaWYgaXQncyBvdXIKLQkJICogdHJhbnNhY3Rpb24pLiBJbiBlaXRoZXIgY2FzZSwgdGhlIGxv Y2sgb24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhhdmUKLQkJICogYmVlbiByZWxlYXNlZCAoYWN0aW5n IGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4KLQkJICogQW5kIGZv ciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKLQkJICog dHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFj cXVpcmVkCi0JCSAqIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSBy ZWFkIGJhcnJpZXIuCi0JCSAqCi0JCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNv bXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrCi0JCSAqIHRoZSBWTSBidWZmZXIsIHdo aWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCi0JCSAqLwotCQlpZiAoIVZN X0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkKLQkJewot CQkJLyoKLQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlz aWJpbGl0eS4KLQkJCSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7Ci0JCQlpZiAo IWluZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90KSkKLQkJCQlj b250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0K LQkJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmlvc3NfVGFibGVTbG90KTsKLQotCQkJLyoKLQkJCSAq IE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQg YmUgbm8KLQkJCSAqIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEg dmlzaWJsZSBlbnRyeSBoYXMKLQkJCSAqIGJlZW4gZm91bmQuICBJZiB3ZSBkaWQgd2FudCB0byBh bGxvdyB0aGF0LCB3ZSdkIG5lZWQgdG8ga2VlcAotCQkJICogbW9yZSBzdGF0ZSB0byByZW1lbWJl ciBub3QgdG8gY2FsbCBpbmRleF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCi0JCQkgKi8KLQkJCWlm IChzY2FuZGVzYy0+eHNfaGVhcF9jb250aW51ZSkKLQkJCQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mg c25hcHNob3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKTsKLQotCQkJ LyoKLQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhl IGhlYXAgcGFnZSwgYXMKLQkJCSAqIHJlY29yZGVkIGluIHNjYW5kZXNjLT54c19jYnVmLiAgV2Ug Y291bGQgcmVsZWFzZSB0aGF0IHBpbiBub3csCi0JCQkgKiBidXQgaXQncyBub3QgY2xlYXIgd2hl dGhlciBpdCdzIGEgd2luIHRvIGRvIHNvLiAgVGhlIG5leHQgaW5kZXgKLQkJCSAqIGVudHJ5IG1p Z2h0IHJlcXVpcmUgYSB2aXNpdCB0byB0aGUgc2FtZSBoZWFwIHBhZ2UuCi0JCQkgKi8KLQotCQkJ dHVwbGVfZnJvbV9oZWFwID0gdHJ1ZTsKLQkJfQotCiAJCS8qCiAJCSAqIEZpbGwgdGhlIHNjYW4g dHVwbGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0IGJlCiAJCSAq IHByb3ZpZGVkIGluIGVpdGhlciBIZWFwVHVwbGUgb3IgSW5kZXhUdXBsZSBmb3JtYXQuICBDb25j ZWl2YWJseSBhbgpAQCAtMjM4LDE2ICsxNjMsNiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNj YW5TdGF0ZSAqbm9kZSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJIGVycm1zZygibG9zc3kgZGlzdGFuY2UgZnVu Y3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKSkpOwotCi0JCS8q Ci0JCSAqIElmIHdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHRoZW4gd2UnbGwgbmVlZCB0byB0 YWtlIGEgcHJlZGljYXRlCi0JCSAqIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9y IG5vdyB3ZSBkbyB0aGF0IGF0IHBhZ2UgbGV2ZWwuCi0JCSAqLwotCQlpZiAoIXR1cGxlX2Zyb21f aGVhcCkKLQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJ CQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJICBlc3RhdGUtPmVz X3NuYXBzaG90KTsKLQogCQlyZXR1cm4gc2xvdDsKIAl9CiAKQEAgLTQwNywxMyArMzIyLDYgQEAg RXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCWluZGV4UmVs YXRpb25EZXNjID0gbm9kZS0+aW9zc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhTY2FuRGVzYyA9IG5v ZGUtPmlvc3NfU2NhbkRlc2M7CiAKLQkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4sIGlmIGFueS4g Ki8KLQlpZiAobm9kZS0+aW9zc19WTUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCXsKLQkJUmVs ZWFzZUJ1ZmZlcihub2RlLT5pb3NzX1ZNQnVmZmVyKTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9 IEludmFsaWRCdWZmZXI7Ci0JfQotCiAJLyoKIAkgKiBXaGVuIGVuZGluZyBhIHBhcmFsbGVsIHdv cmtlciwgY29weSB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBieSB0aGUKIAkgKiB3b3JrZXIgYmFj ayBpbnRvIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVwIGJ5IHRoZSBt YWluCkBAIC00MzMsNiArMzQxLDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0 YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9 IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+bmhlYXBm ZXRjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzOwogCX0KIAogCS8q CkBAIC03ODgsMTMgKzY5NywxMiBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVEU00oSW5k ZXhPbmx5U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4 X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJ CSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25E ZXNjLCB0cnVlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9k ZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMs CiAJCQkJCQkJCSBwaXNjYW4pOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9 IHRydWU7Ci0Jbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJQXNzZXJ0KG5v ZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10 aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFz cwpAQCAtODU0LDEyICs3NjIsMTIgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2Vy KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlp bmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJ CQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0 aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJ IG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlL ZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0 dXAgPSB0cnVlOworCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwog CiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSBy ZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpp bmRleCAzNjMyMGQ3ZDIuLjY3ODIyOTQ3YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNj YW4uYwpAQCAtMTA3LDcgKzEwNyw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkK IAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0 byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUt PnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVz YywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSAg IGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAog CQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0xMjgsNyArMTI4LDcgQEAgSW5k ZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCS8qCiAJICogb2ssIG5vdyB0aGF0IHdlIGhh dmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoaW5k ZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQorCXdoaWxlICh0YWJs ZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCiAJewogCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwogCkBAIC0yMDMsNyArMjAzLDcgQEAgSW5kZXhOZXh0V2l0 aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBh biBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCiAJCSAqLwogCQlz Y2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0J CQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19S ZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJ CQkJCQkgICBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNj YW5LZXlzLApAQCAtMjYwLDcgKzI2MCw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2Nh blN0YXRlICpub2RlKQogCQkgKiBGZXRjaCBuZXh0IHR1cGxlIGZyb20gdGhlIGluZGV4LgogCQkg Ki8KIG5leHRfaW5kZXh0dXBsZToKLQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2Ms IEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKIAkJewogCQkJLyoK IAkJCSAqIE5vIG1vcmUgdHVwbGVzIGZyb20gdGhlIGluZGV4LiAgQnV0IHdlIHN0aWxsIG5lZWQg dG8gZHJhaW4gYW55CkBAIC04MTIsNiArODEyLDcgQEAgRXhlY0VuZEluZGV4U2NhbihJbmRleFNj YW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5T dGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyAr PSBub2RlLT5pc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQlBc3NlcnQobm9kZS0+aXNzX0lu c3RydW1lbnQtPm5oZWFwZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpAQCAtMTcyMyw3ICsxNzI0 LDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAK IAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+ c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywK KwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgbm9kZS0+ aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJ CSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCkBAIC0xNzg3LDcgKzE3ODgsNyBAQCBFeGVjSW5k ZXhTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlz c19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJy ZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkg bm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSBub2RlLT5pc3NfSW5zdHJ1 bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlz c19OdW1PcmRlckJ5S2V5cywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVN ZXJnZWpvaW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYwppbmRleCBj YmNhZTRjNzAuLjliNDNlZDhiNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZU1lcmdlam9pbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYwpA QCAtNTQsOCArNTQsOCBAQAogICoJCXRoZSBpbm5lciAiNSdzIi4gVGhpcyByZXF1aXJlcyByZXBv c2l0aW9uaW5nIHRoZSBpbm5lciAiY3Vyc29yIgogICoJCXRvIHBvaW50IGF0IHRoZSBmaXJzdCBp bm5lciAiNSIuIFRoaXMgaXMgZG9uZSBieSAibWFya2luZyIgdGhlCiAgKgkJZmlyc3QgaW5uZXIg NSBzbyB3ZSBjYW4gcmVzdG9yZSB0aGUgImN1cnNvciIgdG8gaXQgYmVmb3JlIGpvaW5pbmcKLSAq CQl3aXRoIHRoZSBzZWNvbmQgb3V0ZXIgNS4gVGhlIGFjY2VzcyBtZXRob2QgaW50ZXJmYWNlIHBy b3ZpZGVzCi0gKgkJcm91dGluZXMgdG8gbWFyayBhbmQgcmVzdG9yZSB0byBhIHR1cGxlLgorICoJ CXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBUaGUgaW5kZXhiYXRjaC5jIGludGVyZmFjZSBwcm92 aWRlcworICoJCXJvdXRpbmVzIHRvIG1hcmsgYW5kIHJlc3RvcmUgdG8gYSB0dXBsZSBkdXJpbmcg aW5kZXggc2NhbnMuCiAgKgogICoKICAqCQlFc3NlbnRpYWwgb3BlcmF0aW9uIG9mIHRoZSBtZXJn ZSBqb2luIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2lu ZHhwYXRoLmMKaW5kZXggNjdkOWRjMzVmLi5kNjFjMGI2ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvaW5keHBhdGguYwpAQCAtNDMsNyArNDMsNyBAQAogLyogV2hldGhlciB3ZSBhcmUgbG9v a2luZyBmb3IgcGxhaW4gaW5kZXhzY2FuLCBiaXRtYXAgc2Nhbiwgb3IgZWl0aGVyICovCiB0eXBl ZGVmIGVudW0KIHsKLQlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxl ICovCisJU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBsZSBvciBhbWdl dGJhdGNoICovCiAJU1RfQklUTUFQU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0Yml0bWFw ICovCiAJU1RfQU5ZU0NBTiwJCQkJCS8qIGVpdGhlciBpcyBva2F5ICovCiB9IFNjYW5UeXBlQ29u dHJvbDsKQEAgLTc0Nyw3ICs3NDcsNyBAQCBnZXRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAl7CiAJCUluZGV4UGF0aCAgKmlwYXRoID0gKEluZGV4UGF0 aCAqKSBsZmlyc3QobGMpOwogCi0JCWlmIChpbmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJaWYgKGlu ZGV4LT5hbWhhc2dldGJhdGNoKQogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBpcGF0aCk7CiAK IAkJaWYgKGluZGV4LT5hbWhhc2dldGJpdG1hcCAmJgpAQCAtODM1LDcgKzgzNSw3IEBAIGJ1aWxk X2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJc3dpdGNo IChzY2FudHlwZSkKIAl7CiAJCWNhc2UgU1RfSU5ERVhTQ0FOOgotCQkJaWYgKCFpbmRleC0+YW1o YXNnZXR0dXBsZSkKKwkJCWlmICghaW5kZXgtPmFtaGFzZ2V0YmF0Y2gpCiAJCQkJcmV0dXJuIE5J TDsKIAkJCWJyZWFrOwogCQljYXNlIFNUX0JJVE1BUFNDQU46CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wbGFuY2F0LmMKaW5kZXggYjJmYmQ2YTA4Li42NjVkZGNhNTMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTMxMCwxMSArMzEwLDExIEBAIGdldF9yZWxhdGlvbl9pbmZv KFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQs CiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGFtcm91dGluZS0+YW1zZWFyY2hhcnJheTsKIAkJ CQlpbmZvLT5hbXNlYXJjaG51bGxzID0gYW1yb3V0aW5lLT5hbXNlYXJjaG51bGxzOwogCQkJCWlu Zm8tPmFtY2FucGFyYWxsZWwgPSBhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWw7Ci0JCQkJaW5mby0+ YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisJCQkJaW5m by0+YW1oYXNnZXRiYXRjaCA9IChhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCB8fAorCQkJ CQkJCQkJICAgYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwpOwogCQkJCWluZm8tPmFtaGFz Z2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMICYmCiAJCQkJCXJlbGF0 aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1cGxlICE9IE5VTEw7Ci0JCQkJaW5m by0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJrcG9zICE9IE5VTEwgJiYKLQkJCQkJ CQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2FubWFy a3BvcyA9IGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMOwogCQkJCWluZm8tPmFtY29zdGVz dGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsKIAkJCQlBc3NlcnQoaW5mby0+YW1j b3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBnZXRfcmVsYXRpb25f aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFy ZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbXNlYXJj aG51bGxzID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwotCQkJCWlu Zm8tPmFtaGFzZ2V0dHVwbGUgPSBmYWxzZTsKKwkJCQlpbmZvLT5hbWhhc2dldGJhdGNoID0gZmFs c2U7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNhbm1h cmtwb3MgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNvc3Rlc3RpbWF0ZSA9IE5VTEw7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKaW5kZXggMGIxZDgwYjViLi43NmIw ZDAzNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRp b24uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKQEAg LTg5MCw3ICs4OTAsOCBAQCBJc0luZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxh dGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJtYXApCiAJICogVGhlIGdpdmVuIGluZGV4IGFjY2Vz cyBtZXRob2QgbXVzdCBpbXBsZW1lbnQgImFtZ2V0dHVwbGUiLCB3aGljaCB3aWxsCiAJICogYmUg dXNlZCBsYXRlciB0byBmZXRjaCB0aGUgdHVwbGVzLiAgU2VlIFJlbGF0aW9uRmluZFJlcGxUdXBs ZUJ5SW5kZXgoKS4KIAkgKi8KLQlpZiAoR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5y ZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlpZiAoR2V0SW5kZXhB bVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0dHVwbGUg PT0gTlVMTCAmJgorCQlHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVs YW0sIGZhbHNlKS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1 cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCmluZGV4IGM4MWZiNjFhMC4uZGRmZDFiNTVj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKQEAgLTM2MywxMCArMzYzLDExIEBAIGluZGV4YW1f cHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJUEdfUkVUVVJOX0JPT0wocm91 dGluZS0+YW1jbHVzdGVyYWJsZSk7CiAKIAkJCWNhc2UgQU1QUk9QX0lOREVYX1NDQU46Ci0JCQkJ UEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQkJ UEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkJICAg cm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQklUTUFQX1ND QU46Ci0JCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXRiaXRtYXAgPyB0cnVlIDogZmFs c2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwpOwog CiAJCQljYXNlIEFNUFJPUF9CQUNLV0FSRF9TQ0FOOgogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRp bmUtPmFtY2FuYmFja3dhcmQpOwpAQCAtMzkyLDcgKzM5Myw4IEBAIGluZGV4YW1fcHJvcGVydHko RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNh bm11bHRpY29sKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fRVhDTFVERToKLQkJCVBHX1JFVFVSTl9C T09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFsc2UpOworCQkJUEdfUkVUVVJOX0JP T0wocm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkgICByb3V0aW5lLT5hbWdl dGJhdGNoICE9IE5VTEwpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9JTkNMVURFOgogCQkJUEdfUkVU VVJOX0JPT0wocm91dGluZS0+YW1jYW5pbmNsdWRlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMK aW5kZXggZDRkYTBlOGRlLi42ZDgwYWUwMDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBA IC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRlICJhY2Nlc3MvZ2luLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKLSNpbmNsdWRlICJhY2Nl c3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Rh dGlzdGljLmgiCkBAIC03MTA0LDEwICs3MTAzLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRw b2ludChSZWxhdGlvbiBoZWFwUmVsLAogCWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNlOwogCVNuYXBz aG90RGF0YSBTbmFwc2hvdE5vblZhY3V1bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBpbmRleF9zY2Fu OwotCUJ1ZmZlcgkJdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCUJsb2NrTnVtYmVyIGxhc3Rf aGVhcF9ibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9w YWdlcyA9IDA7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tF WVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107CiAJTWVtb3J5Q29udGV4dCBvbGRj b250ZXh0OwpAQCAtNzE1NSw2MCArNzE1MCwyNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBv aW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJICogYSBodWdlIGFtb3VudCBvZiB0aW1lIGhlcmUsIHNv IHdlIGdpdmUgdXAgb25jZSB3ZSd2ZSByZWFkIHRvbyBtYW55IGhlYXAKIAkgKiBwYWdlcy4gIFdo ZW4gd2UgZmFpbCBmb3IgdGhhdCByZWFzb24sIHRoZSBjYWxsZXIgd2lsbCBlbmQgdXAgdXNpbmcK IAkgKiB3aGF0ZXZlciBleHRyZW1hbCB2YWx1ZSBpcyByZWNvcmRlZCBpbiBwZ19zdGF0aXN0aWMu CisJICoKKwkgKiBYWFggVGhpcyBjYW4ndCB3b3JrIHdpdGggdGhlIG5ldyB0YWJsZV9pbmRleF9n ZXRuZXh0X3Nsb3QgaW50ZXJmYWNlLAorCSAqIHdoaWNoIHNpbXBseSB3b24ndCByZXR1cm4gYSB0 dXBsZSB0aGF0IGlzbid0IHZpc2libGUgdG8gb3VyIHNuYXBzaG90LgorCSAqIHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdCB3aWxsIG5lZWQgc29tZSBraW5kIG9mIGNhbGxiYWNrIHRoYXQgcHJvdmlk ZXMKKwkgKiBhIHdheSBmb3IgdGhlIHNjYW4gdG8gZ2l2ZSB1cCB3aGVuIHRoZSBjb3N0cyBzdGFy dCB0byBnZXQgb3V0IG9mIGhhbmQuCiAJICovCiAJSW5pdE5vblZhY3V1bWFibGVTbmFwc2hvdChT bmFwc2hvdE5vblZhY3V1bWFibGUsCiAJCQkJCQkJICBHbG9iYWxWaXNUZXN0Rm9yKGhlYXBSZWwp KTsKIAotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsCisJ aW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRleFJlbCwgdHJ1ZSwKIAkJ CQkJCQkJICZTbmFwc2hvdE5vblZhY3V1bWFibGUsIE5VTEwsCiAJCQkJCQkJCSAxLCAwKTsKLQkv KiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2NhbiAqLwotCWluZGV4X3NjYW4tPnhzX3dhbnRf aXR1cCA9IHRydWU7CisJQXNzZXJ0KGluZGV4X3NjYW4tPnhzX3dhbnRfaXR1cCk7CiAJaW5kZXhf cmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCAxLCBOVUxMLCAwKTsKIAogCS8qIEZldGNoIGZp cnN0L25leHQgdHVwbGUgaW4gc3BlY2lmaWVkIGRpcmVjdGlvbiAqLwotCXdoaWxlICgodGlkID0g aW5kZXhfZ2V0bmV4dF90aWQoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyKSkgIT0gTlVMTCkKKwl3 aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIGluZGV4c2NhbmRpciwg dGFibGVzbG90KSkKIAl7Ci0JCUJsb2NrTnVtYmVyIGJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpOwotCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoaGVhcFJlbCwKLQkJCQkJCQli bG9jaywKLQkJCQkJCQkmdm1idWZmZXIpKQotCQl7Ci0JCQkvKiBSYXRzLCB3ZSBoYXZlIHRvIHZp c2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkgKi8KLQkJCWlmICghaW5kZXhfZmV0Y2hf aGVhcChpbmRleF9zY2FuLCB0YWJsZXNsb3QpKQotCQkJewotCQkJCS8qCi0JCQkJICogTm8gdmlz aWJsZSB0dXBsZSBmb3IgdGhpcyBpbmRleCBlbnRyeSwgc28gd2UgbmVlZCB0bwotCQkJCSAqIGFk dmFuY2UgdG8gdGhlIG5leHQgZW50cnkuICBCZWZvcmUgZG9pbmcgc28sIGNvdW50IGhlYXAKLQkJ CQkgKiBwYWdlIGZldGNoZXMgYW5kIGdpdmUgdXAgaWYgd2UndmUgZG9uZSB0b28gbWFueS4KLQkJ CQkgKgotCQkJCSAqIFdlIGRvbid0IGNoYXJnZSBhIHBhZ2UgZmV0Y2ggaWYgdGhpcyBpcyB0aGUg c2FtZSBoZWFwIHBhZ2UKLQkJCQkgKiBhcyB0aGUgcHJldmlvdXMgdHVwbGUuICBUaGlzIGlzIG9u IHRoZSBjb25zZXJ2YXRpdmUgc2lkZSwKLQkJCQkgKiBzaW5jZSBvdGhlciByZWNlbnRseS1hY2Nl c3NlZCBwYWdlcyBhcmUgcHJvYmFibHkgc3RpbGwgaW4KLQkJCQkgKiBidWZmZXJzIHRvbzsgYnV0 IGl0J3MgZ29vZCBlbm91Z2ggZm9yIHRoaXMgaGV1cmlzdGljLgotCQkJCSAqLwotI2RlZmluZSBW SVNJVEVEX1BBR0VTX0xJTUlUIDEwMAotCi0JCQkJaWYgKGJsb2NrICE9IGxhc3RfaGVhcF9ibG9j aykKLQkJCQl7Ci0JCQkJCWxhc3RfaGVhcF9ibG9jayA9IGJsb2NrOwotCQkJCQluX3Zpc2l0ZWRf aGVhcF9wYWdlcysrOwotCQkJCQlpZiAobl92aXNpdGVkX2hlYXBfcGFnZXMgPiBWSVNJVEVEX1BB R0VTX0xJTUlUKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJY29udGludWU7CQkvKiBubyB2 aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCQkJfQotCi0JCQkvKiBXZSBk b24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFwIHR1cGxlIGZvciBhbnl0aGluZyAqLwotCQkJRXhl Y0NsZWFyVHVwbGUodGFibGVzbG90KTsKLQotCQkJLyoKLQkJCSAqIFdlIGRvbid0IGNhcmUgd2hl dGhlciB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgdmlzaWJsZSB0dXBsZSBpbgotCQkJICogdGhlIEhP VCBjaGFpbjsgaWYgYW55IGFyZSB2aXNpYmxlLCB0aGF0J3MgZ29vZCBlbm91Z2guCi0JCQkgKi8K LQkJfQorCQkvKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFwIHR1cGxlIGZvciBhbnl0 aGluZyAqLworCQlFeGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwogCiAJCS8qCiAJCSAqIFdlIGV4 cGVjdCB0aGF0IHRoZSBpbmRleCB3aWxsIHJldHVybiBkYXRhIGluIEluZGV4VHVwbGUgbm90CkBA IC03MjQxLDggKzcyMDIsNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9u IGhlYXBSZWwsCiAJCWJyZWFrOwogCX0KIAotCWlmICh2bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVy KQotCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKIAlpbmRleF9lbmRzY2FuKGluZGV4X3NjYW4p OwogCiAJcmV0dXJuIGhhdmVfZGF0YTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJp ZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCmluZGV4IGI3NGFi NWY3YS4uMDY1NTM2MDliIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJl ZS5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKQEAgLTM5Myw3ICszOTMs NyBAQCBidF9jaGVja19ldmVyeV9sZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWws IGJvb2wgaGVhcGtleXNwYWNlLAogCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOwog CiAJLyoKLQkgKiBUaGlzIGFzc2VydGlvbiBtYXRjaGVzIHRoZSBvbmUgaW4gaW5kZXhfZ2V0bmV4 dF90aWQoKS4gIFNlZSBwYWdlCisJICogVGhpcyBhc3NlcnRpb24gbWF0Y2hlcyB0aGUgb25lIGlu IGhlYXBhbV9iYXRjaF9nZXRuZXh0KCkuICBTZWUgcGFnZQogCSAqIHJlY3ljbGluZy8idmlzaWJs ZSB0byBldmVyeW9uZSIgbm90ZXMgaW4gbmJ0cmVlIFJFQURNRS4KIAkgKi8KIAlBc3NlcnQoVHJh bnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9ibG9v bS9ibHV0aWxzLmMgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwppbmRleCA1MTExY2RjNmQuLjQ1 N2M0NWRlNyAxMDA2NDQKLS0tIGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKKysrIGIvY29udHJp Yi9ibG9vbS9ibHV0aWxzLmMKQEAgLTE0NiwxMCArMTQ2LDEyIEBAIGJsaGFuZGxlcihQR19GVU5D VElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBibGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0g YmxyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAor CQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXJlbGVhc2ViYXRjaCA9IE5VTEwsCiAJ CS5hbWdldGJpdG1hcCA9IGJsZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gYmxlbmRzY2FuLAot CQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNl dCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBh cmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21s CmluZGV4IGY0OGRhMzE4NS4uMjE5ZmI3M2U2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5k ZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTE2NywxMCArMTY3 LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYW1iZWdpbnNjYW5fZnVu Y3Rpb24gYW1iZWdpbnNjYW47CiAgICAgYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAgICAg YW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAg ICBhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisgICAg YW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbiBhbWtpbGxpdGVtc2JhdGNoOwkvKiBjYW4gYmUgTlVM TCAqLworICAgIGFtcmVsZWFzZWJhdGNoX2Z1bmN0aW9uIGFtcmVsZWFzZWJhdGNoOwogICAgIGFt Z2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOyAgIC8qIGNhbiBiZSBOVUxMICovCiAgICAg YW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKLSAgICBhbW1hcmtwb3NfZnVuY3Rpb24gYW1t YXJrcG9zOyAgICAgICAvKiBjYW4gYmUgTlVMTCAqLwotICAgIGFtcmVzdHJwb3NfZnVuY3Rpb24g YW1yZXN0cnBvczsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1wb3NyZXNldF9mdW5jdGlv biBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAgICAgLyogaW50ZXJmYWNlIGZ1bmN0 aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAgICAgYW1lc3RpbWF0ZXBh cmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAgICAvKiBjYW4gYmUg TlVMTCAqLwpAQCAtNjc4LDYgKzY4MCwzOCBAQCBhbWJlZ2luc2NhbiAoUmVsYXRpb24gaW5kZXhS ZWxhdGlvbiwKICAgIDxmdW5jdGlvbj5hbWJlZ2luc2NhbjwvZnVuY3Rpb24+IGRvZXMgbGl0dGxl IGJleW9uZCBtYWtpbmcgdGhhdCBjYWxsIGFuZCBwZXJoYXBzCiAgICBhY3F1aXJpbmcgbG9ja3M7 CiAgICB0aGUgaW50ZXJlc3RpbmcgcGFydHMgb2YgaW5kZXgtc2NhbiBzdGFydHVwIGFyZSBpbiA8 ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPi4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRo YXQgdXNlIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZQorICAg bXVzdCBhbHNvIHNldCB0aGUgZm9sbG93aW5nIGZpZWxkcyBpbiB0aGUgc2NhbiBkZXNjcmlwdG9y OgorICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg PGxpdGVyYWw+c2Nhbi0mZ3Q7bWF4aXRlbXNiYXRjaDwvbGl0ZXJhbD46IHRoZSBtYXhpbXVtIG51 bWJlciBvZiBpdGVtcworICAgICAgdGhhdCBjYW4gYXBwZWFyIGluIGEgc2luZ2xlIGJhdGNoICh0 eXBpY2FsbHkgZGVyaXZlZCBmcm9tIHRoZSBpbmRleCBwYWdlCisgICAgICBzaXplLCBlLmcuLCA8 bGl0ZXJhbD5NYXhJbmRleFR1cGxlc1BlclBhZ2U8L2xpdGVyYWw+KS4KKyAgICAgPC9wYXJhPgor ICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRl cmFsPnNjYW4tJmd0O2JhdGNoX2luZGV4X29wYXF1ZV9zaXplPC9saXRlcmFsPjogdGhlCisgICAg ICA8ZnVuY3Rpb24+TUFYQUxJR048L2Z1bmN0aW9uPidkIHNpemUgb2YgdGhlIGluZGV4IEFNJ3Mg cGVyLWJhdGNoIG9wYXF1ZQorICAgICAgYXJlYS4gIEVhY2ggYmF0Y2ggYWxsb2NhdGlvbiByZXNl cnZlcyB0aGlzIG11Y2ggc3BhY2UgaW1tZWRpYXRlbHkgYmVmb3JlCisgICAgICB0aGUgPHN0cnVj dG5hbWU+SW5kZXhTY2FuQmF0Y2hEYXRhPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLCBmb3IgdXNlIGJ5 IHRoZQorICAgICAgaW5kZXggQU0gdG8gc3RvcmUgcGVyLXBhZ2UgbmF2aWdhdGlvbiBzdGF0ZSAo ZS5nLiwgc2libGluZyBwYWdlIGxpbmtzKS4KKyAgICAgIFRoZSBpbmRleCBBTSBzaG91bGQgcHJv dmlkZSBhbiBpbmxpbmUgYWNjZXNzb3IgZnVuY3Rpb24gdG8gcmV0cmlldmUgYQorICAgICAgcG9p bnRlciB0byB0aGlzIGFyZWEgZnJvbSBhbiA8dHlwZT5JbmRleFNjYW5CYXRjaDwvdHlwZT4gKGZv ciBleGFtcGxlLAorICAgICAgQi10cmVlIHByb3ZpZGVzIDxmdW5jdGlvbj5idF9iYXRjaF9kYXRh KCk8L2Z1bmN0aW9uPikuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRjaF90dXBsZXNf d29ya3NwYWNlPC9saXRlcmFsPjogdGhlIHNpemUgaW4gYnl0ZXMKKyAgICAgIG9mIHRoZSBwZXIt YmF0Y2ggdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UgdXNlZCBmb3IgaW5kZXgtb25seSBzY2Fucwor ICAgICAgKHR5cGljYWxseSA8bGl0ZXJhbD5CTENLU1o8L2xpdGVyYWw+KSwgb3IgMCBpZiB0aGUg aW5kZXggQU0gZG9lcyBub3QKKyAgICAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2Fucy4gIFRoZSB3 b3Jrc3BhY2UgaXMgYWNjZXNzaWJsZSB2aWEKKyAgICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7 Y3VyclR1cGxlczwvc3RydWN0ZmllbGQ+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgIDwvaXRlbWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC03NDksNiArNzgz LDIxMyBAQCBhbWdldHR1cGxlIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8c3RydWN0ZmllbGQ+ YW1nZXR0dXBsZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFt Um91dGluZTwvc3RydWN0bmFtZT4KICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgogICA8 L3BhcmE+CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgQXMgb2YgPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPiB2ZXJzaW9uIDE5LCBwb3NpdGlvbiBtYXJraW5nCisgICAgYW5k IHJlc3RvcmF0aW9uIG9mIHNjYW5zIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgZm9yIHRoZQorICAg IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW50ZXJmYWNlOyBvbmx5IHRoZQorICAg IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIHN1cHBvcnRzIHRoaXMg ZmVhdHVyZS4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0 aW5nPgorSW5kZXhTY2FuQmF0Y2gKK2FtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAg ICAgICAgICAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisgICAgICAgICAgICBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUmV0dXJuIHRoZSBuZXh0 IGJhdGNoIG9mIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4gc2NhbiwgbW92aW5nIGluIHRoZQor ICAgZ2l2ZW4gZGlyZWN0aW9uIChmb3J3YXJkIG9yIGJhY2t3YXJkIGluIHRoZSBpbmRleCkuICBS ZXR1cm5zIGFuIGluc3RhbmNlIG9mCisgICA8dHlwZT5JbmRleFNjYW5CYXRjaDwvdHlwZT4gd2l0 aCBpbmRleCB0dXBsZXMgbG9hZGVkLCBvcgorICAgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gaWYg dGhlcmUgYXJlIG5vIG1vcmUgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbgorICAgc2NhbiBkaXJl Y3Rpb24uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0bworICAgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5kZXggZW50cmll cyBpbiBiYXRjaGVzCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiAgQnkgcmV0dXJuaW5n IGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYQorICAgc2luZ2xlIGluZGV4IHBhZ2Ug dG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBnYWlucyB2aXNpYmlsaXR5IGludG8gd2hpY2ggdGFibGUK KyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCBpbiB0aGUgbmVhciBmdXR1cmUuCisgIDwvcGFyYT4K KworICA8cGFyYT4KKyAgIFRoZSB0YWJsZSBBTSBwYXNzZXMgdGhlIGJhdGNoIG1vc3QgcmVjZW50 bHkgcmV0dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZm9yIHRo ZSBnaXZlbiBzY2FuIGFzCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiAob3IgPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4gb24gdGhlIGZpcnN0IGNhbGwKKyAgIGZvciB0aGUgc2Nhbiku ICBUaGUgaW5kZXggQU0gdXNlcyBpbmZvcm1hdGlvbiBmcm9tIDxsaXRlcmFsPnByaW9yYmF0Y2g8 L2xpdGVyYWw+CisgICB0byBkZXRlcm1pbmUgd2hpY2ggaW5kZXggcGFnZSB0byByZWFkIG5leHQu CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJuZWQgYnkgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBhc3NvY2lhdGVkIHdpdGggYQorICAgcGlubmVkIGlu ZGV4IHBhZ2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbS90dXBsZS4gIFRo ZSBidWZmZXIKKyAgIHBpbiBjYW4gYmUgaGVsZCBvbnRvIGJ5IHRoZSB0YWJsZSBBTSBhcyBhbiBp bnRlcmxvY2sgYWdhaW5zdCBjb25jdXJyZW50IFRJRAorICAgcmVjeWNsaW5nIGJ5IDxjb21tYW5k PlZBQ1VVTTwvY29tbWFuZD4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPgor ICAgZm9yIGRldGFpbHMgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZyBpbmRleCBzY2Fu cy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQSA8dHlwZT5JbmRleFNjYW5CYXRjaDwvdHlw ZT4gdGhhdCBpcyByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBpcyBubyBsb25nZXIgbWFuYWdlZCBieSB0aGUgYWNjZXNzIG1ldGhvZC4KKyAgIEl0IGlzIHVw IHRvIHRoZSB0YWJsZSBBTSBjYWxsZXIgdG8gZGVjaWRlIHdoZW4gaXQgc2hvdWxkIGJlIGZyZWVk ICh2aWEKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfZnJlZV9iYXRjaDwvZnVuY3Rpb24+KS4g IE5vdGUgYWxzbyB0aGF0CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0 aW9ucyBtdXN0IG5ldmVyIG1vZGlmeSB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5wcmlvcmJhdGNoPC9z dHJ1Y3RmaWVsZD4gcGFyYW1ldGVyLiAgVGhlIGNvcmUKKyAgIDxmaWxlbmFtZT5zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlLzwvZmlsZW5hbWU+IGFuZAorICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoLzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9ucyBwcm92aWRlCisgICByZWZl cmVuY2UgZXhhbXBsZXMgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgc2FtZSBjYXZlYXRzIGRlc2Ny aWJlZCBmb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhcHBseSBoZXJlCisgICB0 b286IGFuIGVudHJ5IGluIHRoZSByZXR1cm5lZCBiYXRjaCBtZWFucyBvbmx5IHRoYXQgdGhlIGlu ZGV4IGNvbnRhaW5zCisgICBhbiBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIHNjYW4ga2V5cywgbm90 IHRoYXQgdGhlIHR1cGxlIG5lY2Vzc2FyaWx5IHN0aWxsCisgICBleGlzdHMgaW4gdGhlIGhlYXAg b3Igd2lsbCBwYXNzIHRoZSBjYWxsZXIncyBzbmFwc2hvdCB0ZXN0LgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IG11c3Qgc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9s aXRlcmFsPiB0byBpbmRpY2F0ZSB3aGV0aGVyIHJlY2hlY2tpbmcgb2YKKyAgIHNjYW4ga2V5cyBp cyByZXF1aXJlZCwgaW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4KKyAgIGRvZXMuIEhvd2V2ZXIsIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xp dGVyYWw+IG11c3QgYmUgc2V0IGNvbnNpc3RlbnRseQorICAgZm9yIGFuIGVudGlyZSBzY2FuIHJh dGhlciB0aGFuIHZhcnlpbmcgb24gYSBwZXItdHVwbGUgYmFzaXMuIFRoaXMgaXMgYSBrZXkKKyAg IGRpZmZlcmVuY2UgZnJvbSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB3aGljaCBj YW4gc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBpbmRlcGVu ZGVudGx5IGZvciBlYWNoIHR1cGxlIGl0IHJldHVybnMuCisgICBJbmRleCBhY2Nlc3MgbWV0aG9k cyB0aGF0IHJlcXVpcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyCisgICA8bGl0ZXJhbD5zY2FuLSZn dDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IHVzZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPgorICAgaW50ZXJmYWNlIGluc3RlYWQgb2YgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgU2ltaWxhcmx5LCB0aGUgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgZG9lcyBub3QgY3VycmVudGx5 CisgICBzdXBwb3J0IGluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4gZGF0YSBpbiB0aGUgZm9y bSBvZiBhCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBvaW50ZXIuICBJ bmRleC1vbmx5IHNjYW5zIHdvcmsgYnkKKyAgIGNvcHlpbmcgPHN0cnVjdG5hbWU+SW5kZXhUdXBs ZTwvc3RydWN0bmFtZT4gcmVjb3JkcyBmcm9tIGluZGV4IHBhZ2VzIGludG8gYQorICAgbG9jYWwg YnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGJhdGNoLiAgPGxpdGVyYWw+eHNfaXR1cGRlc2M8 L2xpdGVyYWw+CisgICB3b3JrcyBpbiB0aGUgc2FtZSB3YXkgYXMgYWxyZWFkeSBkZXNjcmliZWQg Zm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4uCisgICBUaGUgYWNjZXNzIG1ldGhv ZCBtdXN0IG5vdCBzZXQgdGhlIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0dXA8L2xpdGVyYWw+IG9y CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19oaXR1cDwvbGl0ZXJhbD4gZmllbGRzIGl0c2VsZi4K KyAgIFdpdGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgdGhlIGluZGV4IEFNIHNl dHMKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwPC9saXRlcmFsPiB0byBwb2ludCB0byBh IHJlY29uc3RydWN0ZWQKKyAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFtZT4gd2hv c2UgbGlmZXRpbWUgZXh0ZW5kcyB1bnRpbCB0aGUgbmV4dAorICAgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiBjYWxsICZtZGFzaDsgb25seSBvbmUgdHVwbGUgaXMgdmFsaWQgYXQgYQor ICAgdGltZS4gIFdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgbXVsdGlwbGUg YmF0Y2hlcyBhcmUgaGVsZCBvcGVuCisgICBzaW11bHRhbmVvdXNseSBhbmQgaXRlbXMgYXJlIGNv bnN1bWVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSB0YWJsZSBBTSwgc28KKyAgIHRoZXJlIGlzIG5v IGVxdWl2YWxlbnQgc2luZ2xlLXR1cGxlIGxpZmV0aW1lIGZvciBwZXItaXRlbQorICAgPHN0cnVj dG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiBwb2ludGVycy4gIFRoZSBiYXRjaCBpbmZyYXN0 cnVjdHVyZQorICAgcHJvdmlkZXMgcGVyLWJhdGNoIHN0b3JhZ2UgZm9yIDxzdHJ1Y3RuYW1lPklu ZGV4VHVwbGU8L3N0cnVjdG5hbWU+IGNvcGllcywKKyAgIGJ1dCBoYXMgbm8gYW5hbG9nb3VzIG1l Y2hhbmlzbSBmb3IgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiBkYXRhCisgICAo dXNlZCBieSBpbmRleCBBTXMgc3VjaCBhcyA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBhbmQKKyAg IDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9ueW0+IGZvciByZWNvbnN0cnVjdGVkIHR1cGxlcyB0aGF0 IG1pZ2h0IG5vdCBmaXQgaW4KKyAgIDxzdHJ1Y3RuYW1lPkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+ IGZvcm1hdCkuICBUaGlzIGxpbWl0YXRpb24gY291bGQgYmUKKyAgIGFkZHJlc3NlZCBpbiBhIGZ1 dHVyZSB2ZXJzaW9uIG9mIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4uCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgcHJv dmlkZSBlaXRoZXIgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgorICAgb3IgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYnV0IG5vdCBib3RoLgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBu ZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0aG9kIHN1cHBvcnRzIDxx dW90ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKKyAgIHRoZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZpZWxkIGluIGl0cworICAgPHN0cnVjdG5h bWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+IHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxM LgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkCithbWtpbGxp dGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICAgICAgICBJbmRleFNj YW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVkIGJ5IHRoZSB0YWJs ZSBBTSB3aGVuIGl0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIGEgYmF0Y2ggdGhhdAorICAgY29u dGFpbnMgZGVhZCBpdGVtcywgdG8gc2V0IDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMg aW4gdGhlCisgICBiYXRjaCdzIGluZGV4IHBhZ2UuICBUaGUgYmF0Y2gncyBpbmRleCBwYWdlIHdp bGwgbmV2ZXIgYmUgbG9ja2VkIG9yIHBpbm5lZAorICAgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNh bGxlZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hpbGUgaW1wbGVtZW50aW5nIDxmdW5j dGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gaXMgb3B0aW9uYWwsCisgICBkb2luZyBz byBpcyByZWNvbW1lbmRlZCBmb3IgcGVyZm9ybWFuY2UsIGFzIGl0IGFsbG93cyBmdXR1cmUgc2Nh bnMgdG8gc2tpcAorICAga25vd24tZGVhZCBpbmRleCBlbnRyaWVzLiAgQm90aCBjb3JlIGluZGV4 IGFjY2VzcyBtZXRob2RzIHRoYXQgY3VycmVudGx5CisgICBzdXBwb3J0IDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gKEItdHJlZSBhbmQgaGFzaCkgaW1wbGVtZW50CisgICA8bGl0ZXJh bD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNj ZXNzIG1ldGhvZHMKKyAgIGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0 aGlzIGZlYXR1cmUuCisgICBUaGUgdGFibGUgQU0gbWF5IGNhbGwKKyAgIDxmdW5jdGlvbj50YWJs ZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbTwvZnVuY3Rpb24+IHRvIG1hcmsgZGVhZCBpdGVtcyBh cworICAgdGhlIHNjYW4gcHJvZ3Jlc3Nlcy4gIElmIHRoZSBiYXRjaCBjb250YWlucyBhbnkgc3Vj aCBkZWFkIGl0ZW1zLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRlYWRJdGVtczwvc3Ry dWN0ZmllbGQ+IGFycmF5IHdpbGwgaGF2ZSBiZWVuIHNvcnRlZCBhbmQKKyAgIGRlZHVwbGljYXRl ZCBiZWZvcmUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQs IHdpdGgKKyAgIGl0ZW0gb2Zmc2V0cyBhcHBlYXJpbmcgaW4gYXNjZW5kaW5nIG9yZGVyICh0aGF0 IGlzLCBpbiBpbmRleCBwYWdlIG9yZGVyLAorICAgd2hpY2ggaXMgYWxzbyBiYXRjaCBvcmRlcikg YW5kIG5vIG9mZnNldCBhcHBlYXJpbmcgbW9yZSB0aGFuIG9uY2UuICBJbmRleAorICAgYWNjZXNz IG1ldGhvZHMgY2FuIHJlbHkgb24gdGhpcyBvcmRlcmluZyB3aGVuIHByb2Nlc3NpbmcgZGVhZCBp dGVtczogdGhlCisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkg Y2FuIGJlIHdhbGtlZCBpbiBsb2Nrc3RlcCB3aXRoCisgICB0aGUgaW5kZXggcGFnZSdzIGl0ZW0g cG9pbnRlcnMsIHNpbmNlIGJvdGggYXJlIGluIGFzY2VuZGluZyBvZmZzZXQgb3JkZXIuCisgICBU aGlzIGFsc28gbWVhbnMgdGhlIHRhYmxlIEFNIG5lZWQgbm90IGNhbGwKKyAgIDxmdW5jdGlvbj50 YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbTwvZnVuY3Rpb24+IGluIGFueSBwYXJ0aWN1bGFy IG9yZGVyLgorICAgKEluZGV4IGFjY2VzcyBtZXRob2RzIHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1 cGxlPC9mdW5jdGlvbj4gcmVseSBvbiB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5raWxsX3ByaW9yX3R1 cGxlPC9zdHJ1Y3RmaWVsZD4gbWVjaGFuaXNtIGluc3RlYWQgdG8gbWFyayBkZWFkCisgICB0dXBs ZXM7IHRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvPC9maWxlbmFtZT4gaW1w bGVtZW50YXRpb24KKyAgIHByb3ZpZGVzIGEgcmVmZXJlbmNlIGV4YW1wbGUuKQorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBXaGVuIGltcGxlbWVudGluZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNi YXRjaDwvZnVuY3Rpb24+LCB0aGUgaW5kZXggQU0KKyAgIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGUg aW5kZXggcGFnZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGJhdGNoIHdhcworICAg b3JpZ2luYWxseSByZWFkLiAgVGhlIGJhdGNoJ3MgPHN0cnVjdGZpZWxkPmxzbjwvc3RydWN0Zmll bGQ+IGZpZWxkIHJlY29yZHMKKyAgIHRoZSBwYWdlIExTTiBhdCB0aGUgdGltZSB0aGUgaW5kZXgg cGFnZSBsb2NrIHdhcyByZWxlYXNlZCAoc2V0CisgICBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3Jl IGNvZGUpLiAgVGhlIGluZGV4IEFNIHNob3VsZCByZS1yZWFkIHRoZSBwYWdlLAorICAgY29tcGFy ZSB0aGUgY3VycmVudCBwYWdlIExTTiBhZ2FpbnN0IDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7bHNu PC9zdHJ1Y3RmaWVsZD4sCisgICBhbmQgZ2l2ZSB1cCBvbiBzZXR0aW5nIDxsaXRlcmFsPkxQX0RF QUQ8L2xpdGVyYWw+IGJpdHMgaWYgdGhlIExTTiBoYXMKKyAgIGFkdmFuY2VkLiAgQW4gYWR2YW5j ZWQgTFNOIGluZGljYXRlcyB0aGF0IHRoZSBwYWdlIHdhcyBtb2RpZmllZCAmbWRhc2g7CisgICBw b3NzaWJseSBieSA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGluZyBoZWFwIFRJRHMg Jm1kYXNoOyBzbyBpdAorICAgd291bGQgYmUgdW5zYWZlIHRvIGFzc3VtZSB0aGF0IGluZGV4IGVu dHJpZXMgc3RpbGwgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcAorICAgdHVwbGVzLiAgU2luY2UgPGxp dGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZyBpcyBvbmx5IGFuIG9wdGltaXphdGlvbgor ICAgaGludCwgaXQgaXMgYWx3YXlzIHNhZmUgdG8gc2tpcCBpdC4gIFNlZSB0aGUgQi10cmVlIGFu ZCBoYXNoIGluZGV4CisgICBpbXBsZW1lbnRhdGlvbnMgZm9yIHJlZmVyZW5jZSBleGFtcGxlcyBv ZiB0aGlzIHRlY2huaXF1ZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGluZGV4IEFN IG1heSBjaG9vc2UgdG8gcmV0YWluIGl0cyBvd24gYnVmZmVyIHBpbnMgd2hlbiB0aGlzIHNlcnZl cyBhbgorICAgaW50ZXJuYWwgcHVycG9zZSAoZm9yIGV4YW1wbGUsIG1haW50YWluaW5nIGEgZGVz Y2VudCBzdGFjayBvZiBwaW5uZWQgaW5kZXgKKyAgIHBhZ2VzIGZvciByZXVzZSBhY3Jvc3MgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscykuICBIb3dldmVyLAorICAgYW55IHNj aGVtZSB0aGF0IHJldGFpbnMgYnVmZmVyIHBpbnMgbWFuYWdlZCBieSB0aGUgaW5kZXggQU0gbXVz dCBiZSBzdXJlIHRvCisgICBmcmVlIHRoZSBwaW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAoZm9y IGV4YW1wbGUgd2hlbiA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPgorICAgYW5kL29yIDxm dW5jdGlvbj5hbWVuZHNjYW48L2Z1bmN0aW9uPiBhcmUgY2FsbGVkKS4gIEl0IG11c3QgYWxzbyBr ZWVwIHRoZQorICAgbnVtYmVyIG9mIHJldGFpbmVkIHBpbnMgZml4ZWQgYW5kIHNtYWxsLCB0byBh dm9pZCBleGhhdXN0aW5nIHRoZSBiYWNrZW5kJ3MKKyAgIGJ1ZmZlciBwaW4gbGltaXQuCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVu Y3Rpb24+IGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiAgSW5kZXgKKyAgIGFjY2VzcyBtZXRob2RzIHRo YXQgd2FudCB0byBtYXJrIGRlYWQgaW5kZXggdHVwbGVzIHdpdGgKKyAgIDxsaXRlcmFsPkxQX0RF QUQ8L2xpdGVyYWw+IGJpdHMgc2hvdWxkIHByb3ZpZGUgaXQ7IHRob3NlIHRoYXQgZG9uJ3QgY2Fu CisgICBsZWF2ZSBpdCBzZXQgdG8gPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gZXZlbiB3aGVuIHRo ZXkgcHJvdmlkZQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgordm9pZAorYW1yZWxlYXNlYmF0Y2ggKElu ZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7 Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSAodmlhIDxmdW5j dGlvbj50YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaDwvZnVuY3Rpb24+KQorICAgd2hlbiBpdCBp cyBzYWZlIHRvIHJlbGVhc2Ugd2hhdGV2ZXIgcmVzb3VyY2VzIHRoZSBpbmRleCBBTSBob2xkcyB0 byBwcmV2ZW50CisgICBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgPGNvbW1hbmQ+VkFDVVVN PC9jb21tYW5kPi4gIEZvcgorICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1l PidzIGJ1aWx0LWluIEItdHJlZSBhbmQgaGFzaCBpbmRleAorICAgYWNjZXNzIG1ldGhvZHMsIHRo aXMgbWVhbnMgcmVsZWFzaW5nIGEgYnVmZmVyIHBpbiBvbiB0aGUgYmF0Y2gncyBpbmRleCBsZWFm CisgICBwYWdlOyBvdGhlciBpbmRleCBhY2Nlc3MgbWV0aG9kcyBtYXkgaG9sZCBkaWZmZXJlbnQg cmVzb3VyY2VzIChvciBtdWx0aXBsZQorICAgcmVzb3VyY2VzKSBpbiB0aGVpciBwZXItYmF0Y2gg b3BhcXVlIGFyZWEuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1y ZWxlYXNlYmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYW55IGluZGV4 CisgICBhY2Nlc3MgbWV0aG9kIHRoYXQgcHJvdmlkZXMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPi4KKyAgPC9wYXJhPgogCiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgpAQCAtNzY4 LDggKzEwMDksOCBAQCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgaXRzZWxm LCBhbmQgdGhlcmVmb3JlIGNhbGxlcnMgcmVjaGVjayBib3RoIHRoZSBzY2FuIGNvbmRpdGlvbnMg YW5kIHRoZQogICAgcGFydGlhbCBpbmRleCBwcmVkaWNhdGUgKGlmIGFueSkgZm9yIHJlY2hlY2th YmxlIHR1cGxlcy4gIFRoYXQgbWlnaHQgbm90CiAgICBhbHdheXMgYmUgdHJ1ZSwgaG93ZXZlci4K LSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZAotICAgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPiBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBpbmRleCBzY2Fu OyB0aGVyZQorICAgT25seSBvbmUgb2YgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4s IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sCisgICBvciA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBpbmRleCBzY2FuOyB0aGVy ZQogICAgYXJlIG90aGVyIHJlc3RyaWN0aW9ucyB0b28gd2hlbiB1c2luZyA8ZnVuY3Rpb24+YW1n ZXRiaXRtYXA8L2Z1bmN0aW9uPiwgYXMgZXhwbGFpbmVkCiAgICBpbiA8eHJlZiBsaW5rZW5kPSJp bmRleC1zY2FubmluZyIvPi4KICAgPC9wYXJhPgpAQCAtNzgxLDYgKzEwMjIsMjkgQEAgYW1nZXRi aXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxM LgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHVz ZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UKKyAgIHdpbGwg Z2VuZXJhbGx5IGFsc28gd2FudCB0byB1c2UgdGhlIGJhdGNoIGFsbG9jYXRpb24gaW5mcmFzdHJ1 Y3R1cmUKKyAgICg8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jPC9mdW5jdGlvbj4g YW5kCisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2U8L2Z1bmN0aW9uPikg d2l0aGluIHRoZWlyCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBpbXBsZW1l bnRhdGlvbi4gIFRoZSBjb252ZW50aW9uIGlzIHRoYXQgb25seQorICAgb25lIGJhdGNoIGlzIGFs bG9jYXRlZCBhdCBhIHRpbWUgZHVyaW5nIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+ LAorICAgdW5saWtlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gd2hlcmUgc2V2ZXJh bCBiYXRjaGVzIG1heSBiZQorICAgb3V0c3RhbmRpbmcgaW4gdGhlIGJhdGNoIHJpbmcgYnVmZmVy IGNvbmN1cnJlbnRseS4gIFRvIG1haW50YWluIHRoaXMKKyAgIG9uZS1iYXRjaC1hdC1hLXRpbWUg aW52YXJpYW50LCB0aGUgaW5kZXggQU0gaXRzZWxmIHJlbGVhc2VzIGl0cyBwcmlvciBiYXRjaAor ICAgdmlhIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZTwvZnVuY3Rpb24+IGp1 c3QgYXMgdGhlIHNjYW4gbGVhdmVzCisgICB0aGF0IGJhdGNoJ3MgaW5kZXggcGFnZSBhbmQgaXMg YWJvdXQgdG8gZ2VuZXJhdGUgdGhlIG5leHQgYmF0Y2ggJm1kYXNoOyB0aGUKKyAgIHNhbWUgcG9p bnQgd2hlcmUgaXQgZXh0cmFjdHMgbmF2aWdhdGlvbiBzdGF0ZSAoc3VjaCBhcyBzaWJsaW5nLXBh Z2UgbGlua3MpCisgICBmcm9tIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+LiAgVGhpcyBl YXJseSByZWxlYXNlIGlzIHNwZWNpZmljIHRvCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1 bmN0aW9uPiBzY2FuczsgZHVyaW5nIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAg IHNjYW5zIHRoZSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiBpcyBzdHJpY3RseSBvd25l ZCBieSB0aGUgdGFibGUgQU0KKyAgIGFuZCBjb3JlIGNvZGUsIGFuZCB0aGUgaW5kZXggQU0gbXVz dCBuZXZlciByZWxlYXNlIGl0LiAgU2VlCisgICA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9u PiBhbmQgPGZ1bmN0aW9uPl9oYXNoX25leHQ8L2Z1bmN0aW9uPiBmb3IKKyAgIHJlZmVyZW5jZSBl eGFtcGxlcy4gIFRoZSByZWxlYXNlZCBiYXRjaCBpcyBjYWNoZWQgaW50ZXJuYWxseSBhbmQgcmV1 c2VkIGJ5CisgICB0aGUgbmV4dCA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jPC9m dW5jdGlvbj4gY2FsbCwgYXZvaWRpbmcKKyAgIHJlcGVhdGVkIG1lbW9yeSBhbGxvY2F0aW9uIGR1 cmluZyB0aGUgYml0bWFwIHNjYW4uCisgIDwvcGFyYT4KKwogICA8cGFyYT4KIDxwcm9ncmFtbGlz dGluZz4KIHZvaWQKQEAgLTc5NSwzMiArMTA1OSw0MSBAQCBhbWVuZHNjYW4gKEluZGV4U2NhbkRl c2Mgc2Nhbik7CiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgogdm9pZAotYW1tYXJrcG9zIChJ bmRleFNjYW5EZXNjIHNjYW4pOworYW1wb3NyZXNldCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAg ICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogPC9wcm9ncmFtbGlzdGluZz4KLSAgIE1h cmsgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgVGhlIGFjY2VzcyBtZXRob2QgbmVlZCBvbmx5IHN1 cHBvcnQgb25lCi0gICByZW1lbWJlcmVkIHNjYW4gcG9zaXRpb24gcGVyIHNjYW4uCisgICBOb3Rp ZnkgdGhlIGluZGV4IEFNIHRoYXQgdGhlIHRhYmxlIEFNIGlzIGFib3V0IHRvIGNoYW5nZSB0aGUg c2NhbidzCisgICBsb2dpY2FsIHBvc2l0aW9uIGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgdGhlIGlu ZGV4IEFNIHRvIHJlc2V0IGFueSBzdGF0ZQorICAgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0 aGUgc2NhbidzIHByb2dyZXNzLiAgRm9yIGV4YW1wbGUsIG5idHJlZSBtdXN0CisgICByZXNldCB0 aGUgYXJyYXkga2V5cyB1c2VkIGJ5IDxsaXRlcmFsPlNjYWxhckFycmF5T3BFeHByPC9saXRlcmFs PiBxdWFsCisgICBldmFsdWF0aW9uIHdoZW4gdGhlIHNjYW4gcG9zaXRpb24gY2hhbmdlcy4gIFRo aXMgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuCisgICB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8g cHJvY2VzcyBhIGJhdGNoIGluIGEgZGlmZmVyZW50IGRpcmVjdGlvbiB0aGFuCisgICB3YXMgdXNl ZCB3aGVuIHRoZSBiYXRjaCB3YXMgb3JpZ2luYWxseSByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYW5kIGFsc28gd2hlbiBhIG1hcmtlZCBzY2FuIHBvc2l0 aW9uIGlzCisgICBhYm91dCB0byBiZSByZXN0b3JlZC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgot ICAgVGhlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkg YmUgcHJvdmlkZWQgaWYgdGhlIGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2Nh bnMuICBJZiBpdCBkb2Vzbid0LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbW1hcmtwb3M8L3N0cnVj dGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5h bWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgorICAgV2hlbiA8ZnVuY3Rpb24+YW1w b3NyZXNldDwvZnVuY3Rpb24+IGlzIGNhbGxlZCBkdWUgdG8gYSBjcm9zcy1iYXRjaAorICAgZGly ZWN0aW9uIGNoYW5nZSwgdGhlIGNvcmUgc3lzdGVtIHdpbGwgaGF2ZSBhbHJlYWR5IGZsaXBwZWQg dGhlIGJhdGNoJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5kaXI8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byBy ZWZsZWN0IHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24KKyAgIGJlZm9yZSBtYWtpbmcgdGhlIGNhbGwu ICBUaGUgaW5kZXggQU0gc2hvdWxkIHVzZSB0aGlzIHVwZGF0ZWQgZGlyZWN0aW9uCisgICB3aGVu IHJlc2V0dGluZyBhbnkgc3RhdGUgdGhhdCBkZXBlbmRzIG9uIGtub3dpbmcgd2hpY2ggd2F5IHRo ZSBzY2FuIGlzCisgICBwcm9jZWVkaW5nLiAgV2hlbiBjYWxsZWQgdG8gcmVzdG9yZSBhIG1hcmtl ZCBwb3NpdGlvbiwgdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5kaXI8L3N0cnVjdGZpZWxk PiBpcyBub3QgbW9kaWZpZWQ7IGl0IHJldGFpbnMgdGhlIGRpcmVjdGlvbgorICAgZnJvbSB3aGVu IHRoZSBiYXRjaCB3YXMgb3JpZ2luYWxseSByZXR1cm5lZC4gIEluIGJvdGggY2FzZXMsIHRoZSBi YXRjaAorICAgcGFzc2VkIHRvIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gaXMgdGhl IGJhdGNoIHRoYXQgd2lsbCBiZSB1c2VkCisgICB0byBjb250aW51ZSB0aGUgc2Nhbi4KICAgPC9w YXJhPgogCiAgIDxwYXJhPgotPHByb2dyYW1saXN0aW5nPgotdm9pZAotYW1yZXN0cnBvcyAoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICBSZXN0b3JlIHRoZSBzY2Fu IHRvIHRoZSBtb3N0IHJlY2VudGx5IG1hcmtlZCBwb3NpdGlvbi4KLSAgPC9wYXJhPgotCi0gIDxw YXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVl ZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRl cmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1yZXN0cnBv czwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwv c3RydWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBJbmRleCBhY2Nl c3MgbWV0aG9kcyB0aGF0IGhhdmUgcHJpdmF0ZSBzdGF0ZSB3aGljaCBtdXN0IGJlIHJlc2V0IHdo ZW4gdGhlCisgICBzY2FuIHBvc2l0aW9uIGNoYW5nZXMgbXVzdCBwcm92aWRlIGFuIDxmdW5jdGlv bj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4KKyAgIGltcGxlbWVudGF0aW9uLiAgSW5kZXggQU1zIHdp dGggbm8gc3VjaCBzdGF0ZSBtYXkgc2V0CisgICA8c3RydWN0ZmllbGQ+YW1wb3NyZXNldDwvc3Ry dWN0ZmllbGQ+IHRvIE5VTEwuCisgICBUaGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9u PiBmdW5jdGlvbiBjYW4gb25seSBiZSBwcm92aWRlZCB3aGVuIHRoZQorICAgYWNjZXNzIG1ldGhv ZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zIHRocm91Z2ggdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtOTc1 LDYgKzEyNDgsOCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9p ZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICAgICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBh bHdheXMgcmV0dXJuIGVudHJpZXMgaW4gdGhlIG5hdHVyYWwgb3JkZXJpbmcKICAgICAgICBvZiB0 aGVpciBkYXRhIChzdWNoIGFzIGJ0cmVlKSBzaG91bGQgc2V0CiAgICAgICAgPHN0cnVjdGZpZWxk PmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLgorICAgICAgIEJvdGggPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PgorICAgICAgIHNjYW5zIHN1cHBvcnQgdGhpcyBjYXBhYmlsaXR5LgogICAgICAgIEN1cnJlbnRs eSwgc3VjaCBhY2Nlc3MgbWV0aG9kcyBtdXN0IHVzZSBidHJlZS1jb21wYXRpYmxlIHN0cmF0ZWd5 CiAgICAgICAgbnVtYmVycyBmb3IgdGhlaXIgZXF1YWxpdHkgYW5kIG9yZGVyaW5nIG9wZXJhdG9y cy4KICAgICAgIDwvcGFyYT4KQEAgLTk4Nyw0MSArMTI2Miw1NiBAQCBhbXRyYW5zbGF0ZWNtcHR5 cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAg ICAgICAgYW4gb3JkZXIgc2F0aXNmeWluZyA8bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD4gPHJl cGxhY2VhYmxlPmluZGV4X2tleTwvcmVwbGFjZWFibGU+CiAgICAgICAgPHJlcGxhY2VhYmxlPm9w ZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmNvbnN0YW50PC9yZXBsYWNlYWJsZT4u ICBTY2FuIG1vZGlmaWVycwogICAgICAgIG9mIHRoYXQgZm9ybSBjYW4gYmUgcGFzc2VkIHRvIDxm dW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+IGFzIGRlc2NyaWJlZAotICAgICAgIHByZXZpb3Vz bHkuCisgICAgICAgcHJldmlvdXNseS4gIE5vdGUgdGhhdCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IHNjYW5zIGRvIG5vdAorICAgICAgIGN1cnJlbnRseSBzdXBwb3J0IG9yZGVyaW5n IG9wZXJhdG9ycy4gIFRoZSBjb3JlIGV4ZWN1dG9yIGV4cGVjdHMKKyAgICAgICA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRvIHNldAorICAgICAgIDxzdHJ1Y3RmaWVsZD54c19vcmRl cmJ5dmFsczwvc3RydWN0ZmllbGQ+IGZvciBlYWNoIHJldHVybmVkIHR1cGxlLCBidXQKKyAgICAg ICB0aGVyZSBpcyBjdXJyZW50bHkgbm8gbWVjaGFuaXNtIHRvIGFzc29jaWF0ZSBwZXItaXRlbSBv cmRlcmluZyB2YWx1ZXMKKyAgICAgICB3aXRoIGluZGl2aWR1YWwgaXRlbXMgd2l0aGluIGEgYmF0 Y2guICBUaGlzIHdvdWxkIHJlcXVpcmUgYW4gYWRkaXRpb25hbAorICAgICAgIGxheWVyIG9mIGlu ZGlyZWN0aW9uIHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LCBidXQgY291bGQgYmUgYWRkZWQgaW4g YQorICAgICAgIGZ1dHVyZSB2ZXJzaW9uIG9mIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9k dWN0bmFtZT4uCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC9pdGVtaXpl ZGxpc3Q+CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhhcyBhIDxsaXRlcmFsPmRpcmVjdGlvbjwvbGl0ZXJhbD4g YXJndW1lbnQsCisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhbmQgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgZnVuY3Rpb25zIGhhdmUgYSA8bGl0ZXJh bD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAgd2hpY2ggY2FuIGJlIGVpdGhlciA8 bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4gKHRoZSBub3JtYWwgY2FzZSkK ICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LiAgSWYgdGhl IGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+IHNwZWNp ZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LCB0aGVuIHRoZQog ICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMgdG8gYmUgc2Nhbm5lZCBiYWNrLXRv LWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFsIGZyb250LXRvLWJhY2sgZGlyZWN0 aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgcmV0dXJuCi0gICB0 aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgsIHJhdGhlciB0aGFuIHRoZSBmaXJz dCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRoaXMgd2lsbCBvbmx5IG9jY3VyIGZv ciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFtY2Fub3JkZXI8L3N0 cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAgZmlyc3QgY2FsbCwgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNj YW4gaW4KKyAgIHRoZSBub3JtYWwgZnJvbnQtdG8tYmFjayBkaXJlY3Rpb24uICBJbiB0aGlzIGNh c2UsCisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgcmV0dXJuIHRoZSBs YXN0IG1hdGNoaW5nIHR1cGxlIGluIHRoZQorICAgaW5kZXgsIHJhdGhlciB0aGFuIHRoZSBmaXJz dCBvbmUgYXMgaXQgbm9ybWFsbHkgd291bGQuICBTaW1pbGFybHksCisgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IG11c3QgcmV0dXJuIHRoZSBsYXN0IG1hdGNoaW5nIGJhdGNoIG9m IGl0ZW1zCisgICB3aGVuIGVpdGhlciB0aGUgZmlyc3QgY2FsbCBhZnRlciA8ZnVuY3Rpb24+YW1y ZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMKKyAgIDxsaXRlcmFsPkJhY2t3YXJkU2NhbkRpcmVj dGlvbjwvbGl0ZXJhbD4sIG9yIGEgc3Vic2VxdWVudCBjYWxsIGhhcworICAgPGxpdGVyYWw+TlVM TDwvbGl0ZXJhbD4gYXMgaXRzIDxzdHJ1Y3RmaWVsZD5wcmlvcmJhdGNoPC9zdHJ1Y3RmaWVsZD4g YXJndW1lbnQKKyAgIChpbmRpY2F0aW5nIGEgYmFja3dhcmQgc2NhbiByZXN0YXJ0KS4gIChUaGlz IGJhY2t3YXJkLXNjYW4gYmVoYXZpb3Igd2lsbAorICAgb25seSBvY2N1ciBmb3IgYWNjZXNzIG1l dGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPgorICAg dG8gdHJ1ZS4pICBBZnRlciB0aGUgZmlyc3QgY2FsbCwgYm90aCA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0 IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4KICAgIGVpdGhlciBkaXJlY3Rpb24g ZnJvbSB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5lZCBlbnRyeS4gIChCdXQgaWYKICAgIDxzdHJ1 Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgZmFsc2UsIGFsbCBzdWJzZXF1 ZW50CiAgICBjYWxscyB3aWxsIGhhdmUgdGhlIHNhbWUgZGlyZWN0aW9uIGFzIHRoZSBmaXJzdCBv bmUuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBBY2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBv cnQgb3JkZXJlZCBzY2FucyBtdXN0IHN1cHBvcnQgPHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhCi0g ICBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVybmluZyB0byB0aGUgbWFya2VkIHBv c2l0aW9uLiAgVGhlIHNhbWUKLSAgIHBvc2l0aW9uIG1pZ2h0IGJlIHJlc3RvcmVkIG11bHRpcGxl IHRpbWVzLiAgSG93ZXZlciwgb25seSBvbmUgcG9zaXRpb24gbmVlZAotICAgYmUgcmVtZW1iZXJl ZCBwZXIgc2NhbjsgYSBuZXcgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGNhbGwgb3Zl cnJpZGVzIHRoZQotICAgcHJldmlvdXNseSBtYXJrZWQgcG9zaXRpb24uICBBbiBhY2Nlc3MgbWV0 aG9kIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBvcmRlcmVkCi0gICBzY2FucyBuZWVkIG5vdCBwcm92 aWRlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFtcmVzdHJw b3M8L2Z1bmN0aW9uPgotICAgZnVuY3Rpb25zIGluIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5l PC9zdHJ1Y3RuYW1lPjsgc2V0IHRob3NlIHBvaW50ZXJzIHRvIE5VTEwKLSAgIGluc3RlYWQuCisg ICBBY2Nlc3MgbWV0aG9kcyB1c2luZyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBpbnRlcmZhY2UKKyAgIHN1cHBvcnQgPHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhIHBvc2l0aW9u IGluIGEgc2NhbiBhbmQgbGF0ZXIgcmV0dXJuaW5nIHRvCisgICB0aGUgbWFya2VkIHBvc2l0aW9u LiAgV2hlbiBhIGJhdGNoIGlzIHByb2Nlc3NlZCBpbiBhIGRpZmZlcmVudCBkaXJlY3Rpb24KKyAg IHRoYW4gaXQgd2FzIG9yaWdpbmFsbHkgZmV0Y2hlZCwgb3Igd2hlbiBhIG1hcmtlZCBwb3NpdGlv biBpcyByZXN0b3JlZCwgdGhlCisgICBpbmRleCBBTSBpcyBub3RpZmllZCB2aWEgdGhlIDxmdW5j dGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gY2FsbGJhY2sgKGlmCisgICBwcm92aWRlZCkgc28g aXQgY2FuIHJlc2V0IGFueSBwcml2YXRlIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3Mg dGhlCisgICBzY2FuJ3MgcHJvZ3Jlc3MgKHN1Y2ggYXMgYXJyYXkga2V5IHN0YXRlKS4gIFNlZSB0 aGUgZGVzY3JpcHRpb24gb2YKKyAgIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gaW4g PHhyZWYgbGlua2VuZD0iaW5kZXgtZnVuY3Rpb25zIi8+IGZvcgorICAgZGV0YWlscy4KICAgPC9w YXJhPgogCiAgIDxwYXJhPgotICAgQm90aCB0aGUgc2NhbiBwb3NpdGlvbiBhbmQgdGhlIG1hcmsg cG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBtYWludGFpbmVkCisgICBUaGUgc2NhbiBwb3NpdGlv biAoaWYgYW55KSBtdXN0IGJlIG1haW50YWluZWQgYnkgdGhlIHRhYmxlIEFNIGFuZCBpbmRleCBB TQogICAgY29uc2lzdGVudGx5IGluIHRoZSBmYWNlIG9mIGNvbmN1cnJlbnQgaW5zZXJ0aW9ucyBv ciBkZWxldGlvbnMgaW4gdGhlCiAgICBpbmRleC4gIEl0IGlzIE9LIGlmIGEgZnJlc2hseS1pbnNl cnRlZCBlbnRyeSBpcyBub3QgcmV0dXJuZWQgYnkgYSBzY2FuIHRoYXQKICAgIHdvdWxkIGhhdmUg Zm91bmQgdGhlIGVudHJ5IGlmIGl0IGhhZCBleGlzdGVkIHdoZW4gdGhlIHNjYW4gc3RhcnRlZCwg b3IgZm9yCkBAIC0xMDQ0LDEyICsxMzM0LDE0IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFy ZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgog CiAgIDxwYXJhPgotICAgSW5zdGVhZCBvZiB1c2luZyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+LCBhbiBpbmRleCBzY2FuIGNhbiBiZSBkb25lIHdpdGgKLSAgIDxmdW5jdGlvbj5hbWdl dGJpdG1hcDwvZnVuY3Rpb24+IHRvIGZldGNoIGFsbCB0dXBsZXMgaW4gb25lIGNhbGwuICBUaGlz IGNhbiBiZQotICAgbm90aWNlYWJseSBtb3JlIGVmZmljaWVudCB0aGFuIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4gYmVjYXVzZSBpdCBhbGxvd3MKLSAgIGF2b2lkaW5nIGxvY2svdW5s b2NrIGN5Y2xlcyB3aXRoaW4gdGhlIGFjY2VzcyBtZXRob2QuICBJbiBwcmluY2lwbGUKLSAgIDxm dW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3VsZCBoYXZlIHRoZSBzYW1lIGVmZmVj dHMgYXMgcmVwZWF0ZWQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2FsbHMs IGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KKyAgIEluc3RlYWQgb2YgdXNp bmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCisgICA8ZnVu Y3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBj YWxsLiAgVGhpcyBjYW4KKyAgIGJlIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiB3aXRo IGFuIDxxdW90ZT5vcmRlcmVkPC9xdW90ZT4gc2NhbgorICAgYmVjYXVzZSBpdCBhbGxvd3MgZWZm aWNpZW50IHNlcXVlbnRpYWwgYWNjZXNzIHRvIHRhYmxlIEFNIHBhZ2VzIGNvbnRhaW5pbmcKKyAg IG1hdGNoZXMuICBJbiBwcmluY2lwbGUgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4g c2hvdWxkIGhhdmUgdGhlCisgICBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0ZWQgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBjYWxscywgYnV0IHdlIGltcG9zZSBzZXZlcmFsIHJlc3RyaWN0aW9ucyB0bwogICAgc2ltcGxp ZnkgbWF0dGVycy4gIEZpcnN0IG9mIGFsbCwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlv bj4gcmV0dXJucyBhbGwKICAgIHR1cGxlcyBhdCBvbmNlIGFuZCBtYXJraW5nIG9yIHJlc3Rvcmlu ZyBzY2FuIHBvc2l0aW9ucyBpc24ndAogICAgc3VwcG9ydGVkLiBTZWNvbmRseSwgdGhlIHR1cGxl cyBhcmUgcmV0dXJuZWQgaW4gYSBiaXRtYXAgd2hpY2ggZG9lc24ndApAQCAtMTA2Niw4ICsxMzU4 LDggQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1p bHksIE9pZCBvcGNpbnR5cGUpOwogCiAgIDxwYXJhPgogICAgTm90ZSB0aGF0IGl0IGlzIHBlcm1p dHRlZCBmb3IgYW4gYWNjZXNzIG1ldGhvZCB0byBpbXBsZW1lbnQgb25seQotICAgPGZ1bmN0aW9u PmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gYW5kIG5vdCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+LCBvciB2aWNlIHZlcnNhLAotICAgaWYgaXRzIGludGVybmFsIGltcGxlbWVudGF0aW9u IGlzIHVuc3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgorICAgPGZ1bmN0aW9uPmFtZ2V0 Yml0bWFwPC9mdW5jdGlvbj4gYW5kIG5vdCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ LzxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sCisgICBvciB2aWNlIHZlcnNhLCBpZiBp dHMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUg b3RoZXIuCiAgIDwvcGFyYT4KIAogIDwvc2VjdDE+CkBAIC0xMTIzLDExICsxNDE1LDE3IEBAIGFt dHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQg b3BjaW50eXBlKTsKICAgICAgPC9saXN0aXRlbT4KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBh cmE+Ci0gICAgICAgQW4gaW5kZXggc2NhbiBtdXN0IG1haW50YWluIGEgcGluCi0gICAgICAgb24g dGhlIGluZGV4IHBhZ2UgaG9sZGluZyB0aGUgaXRlbSBsYXN0IHJldHVybmVkIGJ5Ci0gICAgICAg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgYW5kIDxmdW5jdGlvbj5hbWJ1bGtkZWxl dGU8L2Z1bmN0aW9uPiBjYW5ub3QgZGVsZXRlCi0gICAgICAgZW50cmllcyBmcm9tIHBhZ2VzIHRo YXQgYXJlIHBpbm5lZCBieSBvdGhlciBiYWNrZW5kcy4gIFRoZSBuZWVkCi0gICAgICAgZm9yIHRo aXMgcnVsZSBpcyBleHBsYWluZWQgYmVsb3cuCisgICAgICAgQSBwaW4gbXVzdCBiZSBoZWxkIG9u IGFueSBpbmRleCBwYWdlIHdob3NlIGl0ZW1zIG1pZ2h0IHN0aWxsIG5lZWQgdG8KKyAgICAgICBi ZSBmb2xsb3dlZCwgYW5kIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPiBtdXN0IGFj cXVpcmUgYQorICAgICAgIGNsZWFudXAgbG9jayBvbiBlYWNoIGluZGV4IHBhZ2UsIHdoaWNoIHdp bGwgYmxvY2sgaWYgYW55IG90aGVyCisgICAgICAgYmFja2VuZCBob2xkcyBhIHBpbiBvbiB0aGF0 IHBhZ2UuCisgICAgICAgRm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gc2NhbnMs IHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kCisgICAgICAgbWFuYWdlcyB0aGlzIHBpbiBkaXJlY3Rs eS4KKyAgICAgICBGb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucywgdGhl IGluZGV4IEFNIG93bnMgdGhlCisgICAgICAgcmVzb3VyY2VzIChlLmcuIGJ1ZmZlciBwaW5zKSBp biBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCB3aGlsZSB0aGUKKyAgICAgICB0YWJsZSBBTSBj b250cm9scyB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkIHZpYQorICAgICAgIDxmdW5jdGlvbj5hbXJl bGVhc2ViYXRjaDwvZnVuY3Rpb24+LgorICAgICAgIFRoZSBuZWVkIGZvciB0aGlzIHJ1bGUgaXMg ZXhwbGFpbmVkIGJlbG93LgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwv aXRlbWl6ZWRsaXN0PgpAQCAtMTE1NiwyMyArMTQ1NCw0MSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUg KENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDwv cGFyYT4KIAogICA8cGFyYT4KLSAgIFRoaXMgc29sdXRpb24gcmVxdWlyZXMgdGhhdCBpbmRleCBz Y2FucyBiZSA8cXVvdGU+c3luY2hyb25vdXM8L3F1b3RlPjogd2UgaGF2ZQotICAgdG8gZmV0Y2gg ZWFjaCBoZWFwIHR1cGxlIGltbWVkaWF0ZWx5IGFmdGVyIHNjYW5uaW5nIHRoZSBjb3JyZXNwb25k aW5nIGluZGV4Ci0gICBlbnRyeS4gIFRoaXMgaXMgZXhwZW5zaXZlIGZvciBhIG51bWJlciBvZiBy ZWFzb25zLiAgQW4KLSAgIDxxdW90ZT5hc3luY2hyb25vdXM8L3F1b3RlPiBzY2FuIGluIHdoaWNo IHdlIGNvbGxlY3QgbWFueSBUSURzIGZyb20gdGhlIGluZGV4LAotICAgYW5kIG9ubHkgdmlzaXQg dGhlIGhlYXAgdHVwbGVzIHNvbWV0aW1lIGxhdGVyLCByZXF1aXJlcyBtdWNoIGxlc3MgaW5kZXgK LSAgIGxvY2tpbmcgb3ZlcmhlYWQgYW5kIGNhbiBhbGxvdyBhIG1vcmUgZWZmaWNpZW50IGhlYXAg YWNjZXNzIHBhdHRlcm4uCisgICBUaGlzIHNvbHV0aW9uIHJlcXVpcmVzIHRoYXQgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbmRleCBzY2FucyBiZQorICAgPHF1b3RlPnN5bmNocm9u b3VzPC9xdW90ZT46IHRoZSB0YWJsZSBBTSBtdXN0IGZldGNoIGVhY2ggaGVhcCB0dXBsZQorICAg aW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggZW50cnku ICBUaGlzIGlzCisgICBleHBlbnNpdmUgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMuICBBbgorICAg PHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+IHNjYW4gaW4gd2hpY2ggd2UgY29sbGVjdCBtYW55 IFRJRHMgZnJvbSB0aGUKKyAgIGluZGV4LCBhbmQgb25seSB2aXNpdCB0aGUgaGVhcCB0dXBsZXMg c29tZXRpbWUgbGF0ZXIsIHJlcXVpcmVzIG11Y2ggbGVzcworICAgaW5kZXggbG9ja2luZyBvdmVy aGVhZCBhbmQgY2FuIGFsbG93IGEgbW9yZSBlZmZpY2llbnQgaGVhcCBhY2Nlc3MgcGF0dGVybi4K ICAgIFBlciB0aGUgYWJvdmUgYW5hbHlzaXMsIHdlIG11c3QgdXNlIHRoZSBzeW5jaHJvbm91cyBh cHByb2FjaCBmb3IKICAgIG5vbi1NVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMsIGJ1dCBhbiBhc3lu Y2hyb25vdXMgc2NhbiBpcyB3b3JrYWJsZQogICAgZm9yIGEgcXVlcnkgdXNpbmcgYW4gTVZDQyBz bmFwc2hvdC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW4gYW4gPGZ1bmN0aW9uPmFtZ2V0 Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXggc2NhbiwgdGhlIGFjY2VzcyBtZXRob2QgZG9lcyBub3QK LSAgIGtlZXAgYW4gaW5kZXggcGluIG9uIGFueSBvZiB0aGUgcmV0dXJuZWQgdHVwbGVzLiAgVGhl cmVmb3JlCisgICBJbmRleCBwYWdlIHJlc291cmNlcyBoZWxkIGJ5IDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gYmF0Y2hlcworICAgKHR5cGljYWxseSBidWZmZXIgcGlucywgc3RvcmVk IGluIHRoZSBpbmRleCBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSkKKyAgIGFyZSBvd25lZCBi eSB0aGUgaW5kZXggQU0gYnV0IHJlbGVhc2VkIHVuZGVyIHRoZSB0YWJsZSBBTSdzIGNvbnRyb2wg dmlhCisgICB0aGUgPGZ1bmN0aW9uPmFtcmVsZWFzZWJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2su ICBTZWUgdGhlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+ YW1yZWxlYXNlYmF0Y2g8L2Z1bmN0aW9uPiwgYW5kCisgICA8ZnVuY3Rpb24+YW1raWxsaXRlbXNi YXRjaDwvZnVuY3Rpb24+IGRlc2NyaXB0aW9ucyBpbgorICAgPHhyZWYgbGlua2VuZD0iaW5kZXgt ZnVuY3Rpb25zIi8+IGZvciBkZXRhaWxzLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbiBh biA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBpbmRleCBzY2FuLCB0aGUgYWNjZXNz IG1ldGhvZCBkb2VzCisgICBub3Qga2VlcCBhbiBpbmRleCBwaW4gb24gYW55IG9mIHRoZSByZXR1 cm5lZCB0dXBsZXMuICBUaGVyZWZvcmUKICAgIGl0IGlzIG9ubHkgc2FmZSB0byB1c2Ugc3VjaCBz Y2FucyB3aXRoIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90cy4KICAgPC9wYXJhPgogCisgIDxwYXJh PgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiBtdXN0IG1hbmFnZQorICAgcGluIGxpZmV0aW1lIHRoZW1zZWx2ZXMsIHNpbmNl IHRoZXJlIGlzIG5vIHRhYmxlIEFNIGludGVybWVkaWFyeSAodW5saWtlCisgICB3aXRoIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4pLiAgVGhlIGluZGV4IEFNIG11c3QgaG9sZCBhIHBp biBvbiB0aGUKKyAgIGN1cnJlbnQgaW5kZXggcGFnZSB1bnRpbCB0aGUgc2NhbiBtb3ZlcyB0byBh IGRpZmZlcmVudCBwYWdlIG9yIGVuZHMuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgIFdoZW4g dGhlIDxzdHJ1Y3RmaWVsZD5hbXByZWRsb2Nrczwvc3RydWN0ZmllbGQ+IGZsYWcgaXMgbm90IHNl dCwgYW55IHNjYW4gdXNpbmcgdGhhdAogICAgaW5kZXggYWNjZXNzIG1ldGhvZCB3aXRoaW4gYSBz ZXJpYWxpemFibGUgdHJhbnNhY3Rpb24gd2lsbCBhY3F1aXJlIGEKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90 YWJsZS5zZ21sCmluZGV4IDk4MjUzMmZlNy4uZjU4YzI4ODE1IDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRl X3RhYmxlLnNnbWwKQEAgLTExNTMsMTIgKzExNTMsMTMgQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBS RU0KICAgICAgPC9wYXJhPgogCiAgICAgIDxwYXJhPgotICAgICAgVGhlIGFjY2VzcyBtZXRob2Qg bXVzdCBzdXBwb3J0IDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+IChzZWUgPHhyZWYKLSAg ICAgIGxpbmtlbmQ9ImluZGV4YW0iLz4pOyBhdCBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+ R0lOPC9hY3JvbnltPgotICAgICAgY2Fubm90IGJlIHVzZWQuICBBbHRob3VnaCBpdCdzIGFsbG93 ZWQsIHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZwotICAgICAgQi10cmVlIG9yIGhhc2gg aW5kZXhlcyB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMKLSAgICAg IGRvZXMgbm90aGluZyB0aGF0IGFuIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3Qg ZG8gYmV0dGVyLgotICAgICAgU28gaW4gcHJhY3RpY2UgdGhlIGFjY2VzcyBtZXRob2Qgd2lsbCBh bHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKKyAgICAgIFRoZSBhY2Nlc3MgbWV0 aG9kIG11c3Qgc3VwcG9ydCBlaXRoZXIgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4KKyAg ICAgIG9yIDxsaXRlcmFsPmFtZ2V0YmF0Y2g8L2xpdGVyYWw+IChzZWUgPHhyZWYgbGlua2VuZD0i aW5kZXhhbSIvPik7IGF0CisgICAgICBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+R0lOPC9h Y3JvbnltPiBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoCisgICAgICBpdCdzIGFsbG93ZWQsIHRo ZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZyBCLXRyZWUgb3IgaGFzaCBpbmRleGVzCisgICAg ICB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMgZG9lcyBub3RoaW5n IHRoYXQgYW4KKyAgICAgIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3QgZG8gYmV0 dGVyLiAgU28gaW4gcHJhY3RpY2UgdGhlCisgICAgICBhY2Nlc3MgbWV0aG9kIHdpbGwgYWx3YXlz IGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCiAgICAgICA8YWNyb255bT5TUC1HaVNUPC9h Y3JvbnltPi4KICAgICAgPC9wYXJhPgogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2R1 bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2lu ZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKaW5kZXggMzFmOGQyYjgxLi4zODkyODFiNTEgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwor KysgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKQEAg LTMzNCwxMCArMzM0LDEyIEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdp bnNjYW4gPSBkaWJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZGlyZXNjYW4sCiAJCS5hbWdldHR1 cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9 IE5VTEwsCisJCS5hbXJlbGVhc2ViYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IE5VTEws CiAJCS5hbWVuZHNjYW4gPSBkaWVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1y ZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJh bGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFy YWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAwZGU1NTE4 MzcuLmQzMzFhZWRmYSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTIyNyw4ICsyMjcs NiBAQCBCVFNjYW5JbnNlcnREYXRhCiBCVFNjYW5LZXlQcmVwcm9jCiBCVFNjYW5PcGFxdWUKIEJU U2Nhbk9wYXF1ZURhdGEKLUJUU2NhblBvc0RhdGEKLUJUU2NhblBvc0l0ZW0KIEJUU2hhcmVkCiBC VFNvcnRBcnJheUNvbnRleHQKIEJUU3Bvb2wKQEAgLTI1Nyw2ICsyNTUsOSBAQCBCYXNlQmFja3Vw Q21kCiBCYXNlQmFja3VwVGFyZ2V0SGFuZGxlCiBCYXNlQmFja3VwVGFyZ2V0VHlwZQogQmF0Y2hN VkNDU3RhdGUKK0JhdGNoTWF0Y2hpbmdJdGVtCitCYXRjaFJpbmdCdWZmZXIKK0JhdGNoUmluZ0l0 ZW1Qb3MKIEJlZ2luRGlyZWN0TW9kaWZ5X2Z1bmN0aW9uCiBCZWdpbkZvcmVpZ25JbnNlcnRfZnVu Y3Rpb24KIEJlZ2luRm9yZWlnbk1vZGlmeV9mdW5jdGlvbgpAQCAtMTI5MCw2ICsxMjkxLDggQEAg SW5kZXhPcmRlckJ5RGlzdGFuY2UKIEluZGV4UGF0aAogSW5kZXhSdW50aW1lS2V5SW5mbwogSW5k ZXhTY2FuCitJbmRleFNjYW5CYXRjaAorSW5kZXhTY2FuQmF0Y2hEYXRhCiBJbmRleFNjYW5EZXNj CiBJbmRleFNjYW5EZXNjRGF0YQogSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uCkBAIC0zNDg2LDE4 ICszNDg5LDE3IEBAIGFtY2FucmV0dXJuX2Z1bmN0aW9uCiBhbWNvc3Rlc3RpbWF0ZV9mdW5jdGlv bgogYW1lbmRzY2FuX2Z1bmN0aW9uCiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uCith bWdldGJhdGNoX2Z1bmN0aW9uCiBhbWdldGJpdG1hcF9mdW5jdGlvbgogYW1nZXR0cmVlaGVpZ2h0 X2Z1bmN0aW9uCiBhbWdldHR1cGxlX2Z1bmN0aW9uCiBhbWluaXRwYXJhbGxlbHNjYW5fZnVuY3Rp b24KIGFtaW5zZXJ0X2Z1bmN0aW9uCiBhbWluc2VydGNsZWFudXBfZnVuY3Rpb24KLWFtbWFya3Bv c19mdW5jdGlvbgogYW1vcHRpb25zX2Z1bmN0aW9uCiBhbXBhcmFsbGVscmVzY2FuX2Z1bmN0aW9u CiBhbXByb3BlcnR5X2Z1bmN0aW9uCiBhbXJlc2Nhbl9mdW5jdGlvbgotYW1yZXN0cnBvc19mdW5j dGlvbgogYW10cmFuc2xhdGVfY21wdHlwZV9mdW5jdGlvbgogYW10cmFuc2xhdGVfc3RyYXRlZ3lf ZnVuY3Rpb24KIGFtdmFjdXVtY2xlYW51cF9mdW5jdGlvbgotLSAKMi41My4wCgo= --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0004-Make-IndexScanInstrumentation-a-pointer-in-execu.patch" Content-Disposition: attachment; filename="v13-0004-Make-IndexScanInstrumentation-a-pointer-in-execu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv38a016 RnJvbSBkZDVmMmRhZTVmMTBlMGM3MDlkYjg2ZGI3N2FhZDQxZmZmNTUzMmUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6MjI6MjUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMyAwNC8xOV0g TWFrZSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gYSBwb2ludGVyIGluIGV4ZWN1dG9yCiBzY2Fu IG5vZGVzLgoKQ2hhbmdlIHRoZSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gZmllbGRzIGluIElu ZGV4U2NhblN0YXRlLApJbmRleE9ubHlTY2FuU3RhdGUsIGFuZCBCaXRtYXBJbmRleFNjYW5TdGF0 ZSBmcm9tIGlubGluZSBzdHJ1Y3RzIHRvCnBvaW50ZXJzLiAgVGhpcyBhdm9pZHMgYWRkaW5nIGFk ZGl0aW9uYWwgb3ZlcmhlYWQgYXMgbmV3IGZpZWxkcyBhcmUKYWRkZWQgdG8gSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uLCBhdCBsZWFzdCBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlCmluc3Ry dW1lbnRhdGlvbiBpc24ndCB1c2VkIChpLmUuIHdoZW4gdGhlIGV4ZWN1dG9yIG5vZGUgaXNuJ3Qg YmVpbmcgcnVuCnRocm91Z2ggYW4gRVhQTEFJTiBBTkFMWVpFKS4KLS0tCiBzcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgfCAgNiArKystLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICB8ICA2ICsrKy0tLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIHwgIDggKysrKysrLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICB8IDEyICsrKysrKysrLS0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAgIHwgMTQgKysrKysrKysrLS0tLS0KIDUg ZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAppbmRleCA2M2MwNjdkNWEuLjUxNzgyZDFmYyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKQEAgLTE3MjMsNyArMTcyMyw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAJ RXhwckNvbnRleHQgKmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbglpc3NfUmVsYXRpb25E ZXNjOwogCXN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqaXNzX1NjYW5EZXNjOwotCUluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiBpc3NfSW5zdHJ1bWVudDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKmlzc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaXNz X1NoYXJlZEluZm87CiAKIAkvKiBUaGVzZSBhcmUgbmVlZGVkIGZvciByZS1jaGVja2luZyBPUkRF UiBCWSBleHByIG9yZGVyaW5nICovCkBAIC0xNzc0LDcgKzE3NzQsNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleE9ubHlTY2FuU3RhdGUKIAlFeHByQ29udGV4dCAqaW9zc19SdW50aW1lQ29udGV4dDsK IAlSZWxhdGlvbglpb3NzX1JlbGF0aW9uRGVzYzsKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEg Kmlvc3NfU2NhbkRlc2M7Ci0JSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGlvc3NfSW5zdHJ1bWVu dDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xv dCAqaW9zc19UYWJsZVNsb3Q7CiAJQnVmZmVyCQlpb3NzX1ZNQnVmZmVyOwpAQCAtMTgxNSw3ICsx ODE1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQml0bWFwSW5kZXhTY2FuU3RhdGUKIAlFeHByQ29udGV4 dCAqYmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbgliaXNzX1JlbGF0aW9uRGVzYzsKIAlz dHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmJpc3NfU2NhbkRlc2M7Ci0JSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uIGJpc3NfSW5zdHJ1bWVudDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmJp c3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmJpc3NfU2hh cmVkSW5mbzsKIH0gQml0bWFwSW5kZXhTY2FuU3RhdGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpp bmRleCA5MzkxOGEyMjMuLmJlZDY1ODdjOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzg3 OCw3ICszODc4LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJSW5kZXhTY2FuU3RhdGUgKmluZGV4c3Rh dGUgPSAoKEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCQkJbnNlYXJjaGVzID0gaW5k ZXhzdGF0ZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5k ZXhzdGF0ZS0+aXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zODg2LDcgKzM4 ODYsNyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhw bGFpblN0YXRlICplcykKIAkJCXsKIAkJCQlJbmRleE9ubHlTY2FuU3RhdGUgKmluZGV4c3RhdGUg PSAoKEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCi0JCQkJbnNlYXJjaGVzID0g aW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0g aW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzg5NCw3 ICszODk0LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJQml0bWFwSW5kZXhTY2FuU3RhdGUgKmluZGV4 c3RhdGUgPSAoKEJpdG1hcEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2Vh cmNoZXMgPSBpbmRleHN0YXRlLT5iaXNzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQkJCW5zZWFy Y2hlcyA9IGluZGV4c3RhdGUtPmJpc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCQkJCVNoYXJl ZEluZm8gPSBpbmRleHN0YXRlLT5iaXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggMDU4YTU5ZWY1 Li4yY2E4MjJjZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJ bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2Fu LmMKQEAgLTIwMSw3ICsyMDEsNyBAQCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2Nh biBpdCB3aWxsIHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3 IEJpdG1hcEluZGV4U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwotCQl3aW5zdHJ1 bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmJpc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdp bnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7 CiAJfQogCiAJLyoKQEAgLTI3Miw2ICsyNzIsMTAgQEAgRXhlY0luaXRCaXRtYXBJbmRleFNjYW4o Qml0bWFwSW5kZXhTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAo ZWZsYWdzICYgRVhFQ19GTEFHX0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAK KwkvKiBTZXQgdXAgaW5zdHJ1bWVudGF0aW9uIG9mIGJpdG1hcCBpbmRleCBzY2FucyBpZiByZXF1 ZXN0ZWQgKi8KKwlpZiAoZXN0YXRlLT5lc19pbnN0cnVtZW50KQorCQlpbmRleHN0YXRlLT5iaXNz X0luc3RydW1lbnQgPSBwYWxsb2MwX29iamVjdChJbmRleFNjYW5JbnN0cnVtZW50YXRpb24pOwor CiAJLyogT3BlbiB0aGUgaW5kZXggcmVsYXRpb24uICovCiAJbG9ja21vZGUgPSBleGVjX3J0X2Zl dGNoKG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlc3RhdGUpLT5yZWxsb2NrbW9kZTsKIAlpbmRleHN0 YXRlLT5iaXNzX1JlbGF0aW9uRGVzYyA9IGluZGV4X29wZW4obm9kZS0+aW5kZXhpZCwgbG9ja21v ZGUpOwpAQCAtMzIzLDcgKzMyNyw3IEBAIEV4ZWNJbml0Qml0bWFwSW5kZXhTY2FuKEJpdG1hcElu ZGV4U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+ Ymlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoaW5kZXhzdGF0ZS0+Ymlz c19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKLQkJCQkJCQkg ICAmaW5kZXhzdGF0ZS0+Ymlzc19JbnN0cnVtZW50LAorCQkJCQkJCSAgIGluZGV4c3RhdGUtPmJp c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkgICBpbmRleHN0YXRlLT5iaXNzX051bVNjYW5LZXlzKTsK IAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBjMmQw OTM3NDUuLmY4NGRiMDQ3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jCkBAIC05Miw3ICs5Miw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpu b2RlKQogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkgICBl c3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAor CQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3Nf TnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMpOwogCkBA IC00MzIsNyArNDMyLDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRl ICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxs IHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25s eVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+ bnNlYXJjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCX0KIAogCS8q CkBAIC02MDQsNiArNjA0LDEwIEBAIEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2Fu ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAoZWZsYWdzICYgRVhFQ19G TEFHX0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAKKwkvKiBTZXQgdXAgaW5z dHJ1bWVudGF0aW9uIG9mIGluZGV4LW9ubHkgc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVz dGF0ZS0+ZXNfaW5zdHJ1bWVudCkKKwkJaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50ID0gcGFs bG9jMF9vYmplY3QoSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uKTsKKwogCS8qIE9wZW4gdGhlIGlu ZGV4IHJlbGF0aW9uLiAqLwogCWxvY2ttb2RlID0gZXhlY19ydF9mZXRjaChub2RlLT5zY2FuLnNj YW5yZWxpZCwgZXN0YXRlKS0+cmVsbG9ja21vZGU7CiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29w ZW4obm9kZS0+aW5kZXhpZCwgbG9ja21vZGUpOwpAQCAtNzg1LDcgKzc4OSw3IEBAIEV4ZWNJbmRl eE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJbm9kZS0+ aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19j dXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKLQkJCQkJ CQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCisJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1l bnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9z c19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CkBAIC04NTEsNyArODU1LDcgQEAg RXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSwKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5v ZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25E ZXNjLAotCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlv c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJ CSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCBhNjE2YWJmZjAuLjM2MzIwZDdkMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTA5LDcgKzEwOSw3IEBAIEluZGV4TmV4 dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9k ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+ aXNzX0luc3RydW1lbnQsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRl ckJ5S2V5cyk7CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRl eFNjYW5TdGF0ZSAqbm9kZSkKIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Mu c3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAog CQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+aXNzX0lu c3RydW1lbnQsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBu b2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5 cyk7CiAKQEAgLTgxMSw3ICs4MTEsNyBAQCBFeGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRl ICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxs IHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25s eVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdpbnN0cnVtZW50LT5u c2VhcmNoZXMgKz0gbm9kZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAl9CiAKIAkvKgpA QCAtOTcxLDYgKzk3MSwxMCBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVT dGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWlmIChlZmxhZ3MgJiBFWEVDX0ZMQUdfRVhQTEFJ Tl9PTkxZKQogCQlyZXR1cm4gaW5kZXhzdGF0ZTsKIAorCS8qIFNldCB1cCBpbnN0cnVtZW50YXRp b24gb2YgaW5kZXggc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVzdGF0ZS0+ZXNfaW5zdHJ1 bWVudCkKKwkJaW5kZXhzdGF0ZS0+aXNzX0luc3RydW1lbnQgPSBwYWxsb2MwX29iamVjdChJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24pOworCiAJLyogT3BlbiB0aGUgaW5kZXggcmVsYXRpb24uICov CiAJbG9ja21vZGUgPSBleGVjX3J0X2ZldGNoKG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlc3RhdGUp LT5yZWxsb2NrbW9kZTsKIAlpbmRleHN0YXRlLT5pc3NfUmVsYXRpb25EZXNjID0gaW5kZXhfb3Bl bihub2RlLT5pbmRleGlkLCBsb2NrbW9kZSk7CkBAIC0xNzIwLDcgKzE3MjQsNyBAQCBFeGVjSW5k ZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pc3NfU2Nh bkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLAogCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJICZub2Rl LT5pc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlL ZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKQEAgLTE3ODQsNyArMTc4OCw3IEBAIEV4ZWNJbmRleFNj YW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlzc19TY2Fu RGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkgJm5vZGUt Pmlzc19JbnN0cnVtZW50LAorCQkJCQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJ CSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtl eXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotLSAKMi41My4wCgo= --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0005-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Disposition: attachment; filename="v13-0005-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv389x15 RnJvbSBjM2ZiZDkwZTdiZjQ5YzhkZWFlYTI2OTJiMGM4MGM5NTRjNjk2OTBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMyAwNS8xOV0g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YQogdXNpbmcgeHNf YmxrCgpBZGQgYW4gZXhwbGljaXQgQmxvY2tOdW1iZXIgZmllbGQgKHhzX2JsaykgdG8gSW5kZXhG ZXRjaEhlYXBEYXRhIHRoYXQKdHJhY2tzIHdoaWNoIGhlYXAgYmxvY2sgaXMgY3VycmVudGx5IHBp bm5lZCBpbiB4c19jYnVmLgoKaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIG5vdyB1c2VzIHhzX2Js ayB0byBkZXRlcm1pbmUgd2hlbiBidWZmZXIKc3dpdGNoaW5nIGlzIG5lZWRlZCwgcmVwbGFjaW5n IHRoZSBwcmV2aW91cyBhcHByb2FjaCB0aGF0IGNvbXBhcmVkCmJ1ZmZlciBpZGVudGl0aWVzIHZp YSBSZWxlYXNlQW5kUmVhZEJ1ZmZlciBvbiBldmVyeSBub24tSE9ULWNoYWluIGNhbGwuClRoZSBu ZXcgYXBwcm9hY2ggc2tpcHMgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgcGF0aCBlbnRpcmVseSB3aGVu IHRoZSBuZXh0ClRJRCBpcyBvbiB0aGUgc2FtZSBoZWFwIHBhZ2UsIHdoaWNoIGFsc28gbWVhbnMg dGhhdCBoZWFwX3BhZ2VfcHJ1bmVfb3B0CmlzIGNhbGxlZCBleGFjdGx5IG9uY2UgcGVyIGJsb2Nr ICh3aGVuIHRoZSBibG9jayBpcyBmaXJzdCBwaW5uZWQpLgoKVGhpcyBpcyBwcmVwYXJhdG9yeSB3 b3JrIGZvciBhbiB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIG5lZWQgeHNfYmxrCnRvIG1hbmFn ZSBidWZmZXIgcGluIHRyYW5zZmVycyBiZXR3ZWVuIHRoZSBzY2FuIGFuZCB0aGUgZXhlY3V0b3Ig c2xvdC4KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8IDI4ICsrKysrKysr KysrKysrKy0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxMCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggYWQ5OTNjMDczLi5hODU5YzkwZjQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvaGVhcGFtLmgKQEAgLTExNyw2ICsxMTcsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZl dGNoSGVhcERhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8qIEFNIGluZGVwZW5k ZW50IHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNfY2J1ZjsJCS8qIGN1 cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCisJQmxvY2tOdW1iZXIgeHNfYmxr OwkJCS8qIHhzX2NidWYncyBibG9jayBudW1iZXIsIGlmIGFueSAqLwogCS8qIE5COiBpZiB4c19j YnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQgYnVmZmVyICov CiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKaW5kZXggNTEzN2QyNTEwLi5kN2IwNWFhMTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtODUsNiArODUsNyBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogCiAJaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOwogCWhz Y2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJs b2NrTnVtYmVyOwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KQEAgLTk5LDYgKzEwMCw3 IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQog CQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAkJaHNjYW4tPnhzX2NidWYgPSBJbnZh bGlkQnVmZmVyOwogCX0KKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogfQog CiBzdGF0aWMgdm9pZApAQCAtMTI0LDIzICsxMjYsMjkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCiAJQXNzZXJ0KFRUU19JU19C VUZGRVJUVVBMRShzbG90KSk7CiAKLQkvKiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3aXRjaGlu ZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWluLiAqLwotCWlmICghKmNhbGxfYWdhaW4p CisJLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgb24g dGhlIHNhbWUgcGFnZS4gKi8KKwlpZiAoaHNjYW4tPnhzX2JsayAhPSBJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKHRpZCkpCiAJewotCQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBidWZmZXIgaWYgd2Ug ZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCi0JCUJ1ZmZlcgkJcHJldl9idWYgPSBoc2Nhbi0+eHNf Y2J1ZjsKKwkJQXNzZXJ0KCEqY2FsbF9hZ2Fpbik7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxl YXNlQW5kUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNf YmFzZS5yZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsK KwkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBudW1iZXIgZm9yIG5leHQgdGltZSAq LworCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCisJ CWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJCVJlbGVhc2VCdWZmZXIoaHNj YW4tPnhzX2NidWYpOworCisJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNf YmFzZS5yZWwsIGhzY2FuLT54c19ibGspOwogCiAJCS8qCi0JCSAqIFBydW5lIHBhZ2UsIGJ1dCBv bmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFkeSBvbiB0aGlzIHBhZ2UKKwkJICogUHJ1bmUgcGFnZSB3 aGVuIGl0IGlzIHBpbm5lZCBmb3IgdGhlIGZpcnN0IHRpbWUKIAkJICovCi0JCWlmIChwcmV2X2J1 ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKLQkJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jh c2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CisJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhz X2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CiAJfQogCisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQo aHNjYW4tPnhzX2NidWYpKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoaHNjYW4tPnhz X2NidWYpID09IGhzY2FuLT54c19ibGspOworCUFzc2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0 aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhz Y2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFw X2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKLS0gCjIuNTMuMAoK --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0003-Use-fake-LSNs-to-improve-nbtree-dropPin-behavior.patch" Content-Disposition: attachment; filename="v13-0003-Use-fake-LSNs-to-improve-nbtree-dropPin-behavior.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv38a017 RnJvbSA4MDRiOTk5MDZiN2JmYjZiMjUxOTA3NGQxYWRjMTA3N2MwYTIwNzFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTQ6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMyAwMy8xOV0g VXNlIGZha2UgTFNOcyB0byBpbXByb3ZlIG5idHJlZSBkcm9wUGluIGJlaGF2aW9yLgoKUHJldmlv dXNseSB1bmxvZ2dlZCBuYnRyZWUgaW5kZXhlcyBuZWVkZWQgdG8gaG9sZCBvbiB0byBhIGxlYWYg cGFnZQpidWZmZXIgcGluIHdoZW4gc3RvcHBlZCBvbiB0aGF0IGxlYWYgcGFnZSwgcHVyZWx5IHNv IHRoYXQgdGhlCl9idF9raWxsaXRlbXMgcHJvY2VzcyBoYWQgYSB3YXkgdG8gYmUgc3VyZSB0aGF0 IHRoZXJlIHdhc24ndCBhbnkgdW5zYWZlCmNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNV VU0uICBUaGUgX2J0X2tpbGxpdGVtcycgZHJvcFBpbiBzdHJhdGVneQpjb3VsZG4ndCBiZSB1c2Vk IGJlZm9yZSBub3csIHNpbmNlIGl0IHdvcmtzIGJ5IGNoZWNraW5nIGlmIHRoZSBwYWdlIExTTgpo YXMgY2hhbmdlZCBpbiB0aGUgcGVyaW9kIGFmdGVyIF9idF9yZWFkcGFnZSByZWFkIHRoZSBwYWdl J3MgaXRlbXMsIGJ1dApiZWZvcmUgX2J0X2tpbGxpdGVtcyB3YXMgY2FsbGVkLiAgV2Ugbm93IHVz ZSB0aGUgc2FtZSBMU04gdHJpY2sgd2l0aAp1bmxvZ2dlZCBpbmRleGVzLCBicmluZ2luZyB0aGUg c2FtZSBiZW5lZml0cyB0byB0aGVzZSBzY2FucyB0aGF0IGNvbW1pdAoyZWQ1Yjg3ZiBicm91Z2h0 IHRvIHNjYW5zIG9mIGxvZ2dlZCByZWxhdGlvbnMuCgpUaGlzIGlzIHByZXBhcmF0aW9uIGZvciBh biB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIGFkZCB0aGUgYW1nZXRiYXRjaAppbnRlcmZhY2Ug YW5kIHN3aXRjaCBuYnRyZWUgb3ZlciB0byBpdCAoZnJvbSBhbWdldHR1cGxlKS4gIFRoYXQgd2ls bCBnbwpmdXJ0aGVyIGJ5IGNvbXBsZXRlbHkgb2J2aWF0aW5nIHRoZSBuZWVkIGZvciBhbWdldGJh dGNoIHNjYW5zIHRvIGhhbmcgb24KdG8gYnVmZmVyIHBpbnMgKGJhcnJpbmcgc2NhbnMgaW52b2x2 aW5nIGEgbm9uLU1WQ0Mgc25hcHNob3QpLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJv d3QuaWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1XemtlaHVoeHl1QThx dWM3clJOM0V0TlhwaUtzalBmTzhtaGIrMERyMkswRHRnQG1haWwuZ21haWwuY29tCi0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAgICB8ICA1ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMgIHwgIDggKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idGluc2VydC5jIHwgNDggKysrKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMgICB8IDgyICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICB8ICA4IC0tLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyB8ICAxIC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0dXRpbHMuYyAgfCAgMSAtCiA3IGZpbGVzIGNoYW5nZWQsIDgwIGluc2VydGlvbnMoKyks IDczIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggNTNkNGE2MWRj Li5jYjkyMWNhMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1F CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC00ODUsOSArNDg1LDgg QEAgV2UgaGFuZGxlIHRoaXMga2lsbF9wcmlvcl90dXBsZSByYWNlIGNvbmRpdGlvbiBieSBoYXZp bmcgYWZmZWN0ZWQgaW5kZXgKIHNjYW5zIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBj aGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBhbGwKIGltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hl ZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGludGVyaW0gcGVyaW9kIHdoZW4gbm8KIGJ1ZmZlciBw aW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9E RUFEIGJpdHMKLW9uIHRoZSBsZWFmIHBhZ2UgYXQgYWxsIHdoZW4gdGhlIHBhZ2UncyBMU04gaGFz IGNoYW5nZWQuICAoVGhhdCB3b24ndCB3b3JrCi13aXRoIGFuIHVubG9nZ2VkIGluZGV4LCBzbyBm b3Igbm93IHdlIGRvbid0IGV2ZXIgYXBwbHkgdGhlICJkb24ndCBob2xkCi1vbnRvIHBpbiIgb3B0 aW1pemF0aW9uIHRoZXJlLikKK29uIHRoZSBsZWFmIHBhZ2UgYXQgYWxsIHdoZW4gdGhlIHBhZ2Un cyBMU04gaGFzIGNoYW5nZWQuICAoVGhpcyBpcyB3aHkgd2UKK2ltcGxlbWVudCAiZmFrZSIgTFNO cyBmb3IgdW5sb2dnZWQgaW5kZXggcmVsYXRpb25zLikKIAogRmFzdHBhdGggRm9yIEluZGV4IElu c2VydGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRkZWR1cC5jCmluZGV4IDk1YmUwYjE3OS4uYWY3YWZmZGY0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRkZWR1cC5jCkBAIC02OSw2ICs2OSw3IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwK IAlTaXplCQlwYWdlc2F2aW5nIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IDA7CiAJYm9vbAkJ c2luZ2xldmFsc3RyYXQgPSBmYWxzZTsKIAlpbnQJCQlua2V5YXR0cyA9IEluZGV4UmVsYXRpb25H ZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCS8q IFBhc3NlZC1pbiBuZXdpdGVtc3ogaXMgTUFYQUxJR05FRCBidXQgZG9lcyBub3QgaW5jbHVkZSBs aW5lIHBvaW50ZXIgKi8KIAluZXdpdGVtc3ogKz0gc2l6ZW9mKEl0ZW1JZERhdGEpOwpAQCAtMjQ1 LDcgKzI0Niw2IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5k ZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYg KFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9i dHJlZV9kZWR1cCB4bHJlY19kZWR1cDsKIAogCQl4bHJlY19kZWR1cC5uaW50ZXJ2YWxzID0gc3Rh dGUtPm5pbnRlcnZhbHM7CkBAIC0yNjMsOSArMjYzLDExIEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwK IAkJCQkJCQlzdGF0ZS0+bmludGVydmFscyAqIHNpemVvZihCVERlZHVwSW50ZXJ2YWwpKTsKIAog CQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX0RFRFVQKTsKLQot CQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dl dEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAogCUVORF9DUklU X1NFQ1RJT04oKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRp bnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggOTFi YjM3ZDY2Li5jOGFmOTdkZDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwpA QCAtMTEzNyw2ICsxMTM3LDcgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLAogCUluZGV4 VHVwbGUJb3Bvc3RpbmcgPSBOVUxMOwogCUluZGV4VHVwbGUJb3JpZ2l0dXAgPSBOVUxMOwogCUlu ZGV4VHVwbGUJbnBvc3RpbmcgPSBOVUxMOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJcGFnZSA9 IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CkBA IC0xMzM0LDcgKzEzMzUsNiBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsCiAJCQl4bF9i dHJlZV9pbnNlcnQgeGxyZWM7CiAJCQl4bF9idHJlZV9tZXRhZGF0YSB4bG1ldGE7CiAJCQl1aW50 OAkJeGxpbmZvOwotCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCQl1aW50MTYJCXVwb3N0aW5nb2Zm OwogCiAJCQl4bHJlYy5vZmZudW0gPSBuZXdpdGVtb2ZmOwpAQCAtMTQwNywxNCArMTQwNywxNiBA QCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsCiAJCQl9CiAKIAkJCXJlY3B0ciA9IFhMb2dJ bnNlcnQoUk1fQlRSRUVfSUQsIHhsaW5mbyk7Ci0KLQkJCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFi dWYpKQotCQkJCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwotCQkJaWYgKCFpc2xlYWYpCi0J CQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGNidWYpLCByZWNwdHIpOwotCi0JCQlQYWdlU2V0 TFNOKHBhZ2UsIHJlY3B0cik7CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0gWExvZ0dldEZha2VM U04ocmVsKTsKKworCQlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkKKwkJCVBhZ2VTZXRMU04o bWV0YXBnLCByZWNwdHIpOworCQlpZiAoIWlzbGVhZikKKwkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0 UGFnZShjYnVmKSwgcmVjcHRyKTsKKworCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAkJ RU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC0xNTE2LDYgKzE1MTgsNyBAQCBfYnRfc3BsaXQoUmVs YXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZl ciBidWYsCiAJYm9vbAkJbmV3aXRlbW9ubGVmdCwKIAkJCQlpc2xlYWYsCiAJCQkJaXNyaWdodG1v c3Q7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKgogCSAqIG9yaWdwYWdlIGlzIHRoZSBvcmln aW5hbCBwYWdlIHRvIGJlIHNwbGl0LiAgbGVmdHBhZ2UgaXMgYSB0ZW1wb3JhcnkKQEAgLTE5OTUs NyArMTk5OCw2IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJU U2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwKIAl7CiAJCXhsX2J0cmVlX3NwbGl0IHhs cmVjOwogCQl1aW50OAkJeGxpbmZvOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCQl4bHJlYy5s ZXZlbCA9IHJvcGFxdWUtPmJ0cG9fbGV2ZWw7CiAJCS8qIFNlZSBjb21tZW50cyBiZWxvdyBvbiBu ZXdpdGVtLCBvcmlnbmV3aXRlbSwgYW5kIHBvc3RpbmcgbGlzdHMgKi8KQEAgLTIwNzksMTQgKzIw ODEsMTYgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2Fu SW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLAogCiAJCXhsaW5mbyA9IG5ld2l0ZW1vbmxlZnQg PyBYTE9HX0JUUkVFX1NQTElUX0wgOiBYTE9HX0JUUkVFX1NQTElUX1I7CiAJCXJlY3B0ciA9IFhM b2dJbnNlcnQoUk1fQlRSRUVfSUQsIHhsaW5mbyk7Ci0KLQkJUGFnZVNldExTTihvcmlncGFnZSwg cmVjcHRyKTsKLQkJUGFnZVNldExTTihyaWdodHBhZ2UsIHJlY3B0cik7Ci0JCWlmICghaXNyaWdo dG1vc3QpCi0JCQlQYWdlU2V0TFNOKHNwYWdlLCByZWNwdHIpOwotCQlpZiAoIWlzbGVhZikKLQkJ CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShjYnVmKSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQly ZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihvcmlncGFnZSwgcmVj cHRyKTsKKwlQYWdlU2V0TFNOKHJpZ2h0cGFnZSwgcmVjcHRyKTsKKwlpZiAoIWlzcmlnaHRtb3N0 KQorCQlQYWdlU2V0TFNOKHNwYWdlLCByZWNwdHIpOworCWlmICghaXNsZWFmKQorCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UoY2J1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7 CiAKQEAgLTI1MDQsNiArMjUwOCw3IEBAIF9idF9uZXdsZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0 aW9uIGhlYXByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIgcmJ1ZikKIAlCdWZmZXIJCW1ldGFidWY7 CiAJUGFnZQkJbWV0YXBnOwogCUJUTWV0YVBhZ2VEYXRhICptZXRhZDsKKwlYTG9nUmVjUHRyCXJl Y3B0cjsKIAogCWxia25vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIobGJ1Zik7CiAJcmJrbm8gPSBC dWZmZXJHZXRCbG9ja051bWJlcihyYnVmKTsKQEAgLTI1OTksNyArMjYwNCw2IEBAIF9idF9uZXds ZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIg cmJ1ZikKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfYnRyZWVfbmV3cm9v dCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2J0cmVlX21ldGFkYXRhIG1kOwog CiAJCXhscmVjLnJvb3RibGsgPSByb290YmxrbnVtOwpAQCAtMjYzMywxMSArMjYzNywxMyBAQCBf YnRfbmV3bGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCdWZmZXIgbGJ1Ziwg QnVmZmVyIHJidWYpCiAJCQkJCQkJKChQYWdlSGVhZGVyKSByb290cGFnZSktPnBkX3VwcGVyKTsK IAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX05FV1JPT1Qp OwotCi0JCVBhZ2VTZXRMU04obHBhZ2UsIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04ocm9vdHBhZ2Us IHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJl Y3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKGxwYWdlLCByZWNwdHIp OworCVBhZ2VTZXRMU04ocm9vdHBhZ2UsIHJlY3B0cik7CisJUGFnZVNldExTTihtZXRhcGcsIHJl Y3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRw YWdlLmMKaW5kZXggOWFhNzgwNjhhLi5jYzljNDVkYzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jCkBAIC0yMzUsNiArMjM1LDcgQEAgX2J0X3NldF9jbGVhbnVwX2luZm8oUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciBudW1fZGVscGFnZXMpCiAJQnVmZmVyCQltZXRhYnVmOwogCVBh Z2UJCW1ldGFwZzsKIAlCVE1ldGFQYWdlRGF0YSAqbWV0YWQ7CisJWExvZ1JlY1B0cglyZWNwdHI7 CiAKIAkvKgogCSAqIE9uLWRpc2sgY29tcGF0aWJpbGl0eSBub3RlOiBUaGUgYnRtX2xhc3RfY2xl YW51cF9udW1fZGVscGFnZXMgbWV0YXBhZ2UKQEAgLTI4Niw3ICsyODcsNiBAQCBfYnRfc2V0X2Ns ZWFudXBfaW5mbyhSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG51bV9kZWxwYWdlcykKIAlpZiAo UmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfYnRyZWVfbWV0YWRhdGEgbWQ7Ci0JCVhM b2dSZWNQdHIJcmVjcHRyOwogCiAJCVhMb2dCZWdpbkluc2VydCgpOwogCQlYTG9nUmVnaXN0ZXJC dWZmZXIoMCwgbWV0YWJ1ZiwgUkVHQlVGX1dJTExfSU5JVCB8IFJFR0JVRl9TVEFOREFSRCk7CkBA IC0zMDMsOSArMzAzLDExIEBAIF9idF9zZXRfY2xlYW51cF9pbmZvKFJlbGF0aW9uIHJlbCwgQmxv Y2tOdW1iZXIgbnVtX2RlbHBhZ2VzKQogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsICZtZCwgc2l6 ZW9mKHhsX2J0cmVlX21ldGFkYXRhKSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9CVFJF RV9JRCwgWExPR19CVFJFRV9NRVRBX0NMRUFOVVApOwotCi0JCVBhZ2VTZXRMU04obWV0YXBnLCBy ZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQ YWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAt MzUxLDYgKzM1Myw3IEBAIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJl bCwgaW50IGFjY2VzcykKIAlCbG9ja051bWJlciByb290Ymxrbm87CiAJdWludDMyCQlyb290bGV2 ZWw7CiAJQlRNZXRhUGFnZURhdGEgKm1ldGFkOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJQXNz ZXJ0KGFjY2VzcyA9PSBCVF9SRUFEIHx8IGhlYXByZWwgIT0gTlVMTCk7CiAKQEAgLTQ3Myw3ICs0 NzYsNiBAQCBfYnRfZ2V0cm9vdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIGludCBh Y2Nlc3MpCiAJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJCXsKIAkJCXhsX2J0cmVlX25l d3Jvb3QgeGxyZWM7Ci0JCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAkJCXhsX2J0cmVlX21ldGFkYXRh IG1kOwogCiAJCQlYTG9nQmVnaW5JbnNlcnQoKTsKQEAgLTQ5NywxMCArNDk5LDEyIEBAIF9idF9n ZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgaW50IGFjY2VzcykKIAkJCVhM b2dSZWdpc3RlckRhdGEoJnhscmVjLCBTaXplT2ZCdHJlZU5ld3Jvb3QpOwogCiAJCQlyZWNwdHIg PSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX05FV1JPT1QpOwotCi0JCQlQYWdl U2V0TFNOKHJvb3RwYWdlLCByZWNwdHIpOwotCQkJUGFnZVNldExTTihtZXRhcGcsIHJlY3B0cik7 CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQlQYWdl U2V0TFNOKHJvb3RwYWdlLCByZWNwdHIpOworCQlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsK IAogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTExNjIsNiArMTE2Niw3IEBAIF9idF9kZWxp dGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCWNoYXIJICAgKnVwZGF0ZWRi dWYgPSBOVUxMOwogCVNpemUJCXVwZGF0ZWRidWZsZW4gPSAwOwogCU9mZnNldE51bWJlciB1cGRh dGVkb2Zmc2V0c1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCVhMb2dSZWNQdHIJcmVjcHRyOwog CiAJLyogU2hvdWxkbid0IGJlIGNhbGxlZCB1bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8g Ki8KIAlBc3NlcnQobmRlbGV0YWJsZSA+IDAgfHwgbnVwZGF0YWJsZSA+IDApOwpAQCAtMTIyNiw3 ICsxMjMxLDYgQEAgX2J0X2RlbGl0ZW1zX3ZhY3V1bShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYs CiAJLyogWExPRyBzdHVmZiAqLwogCWlmIChuZWVkc3dhbCkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVj cHRyOwogCQl4bF9idHJlZV92YWN1dW0geGxyZWNfdmFjdXVtOwogCiAJCXhscmVjX3ZhY3V1bS5u ZGVsZXRlZCA9IG5kZWxldGFibGU7CkBAIC0xMjQ4LDkgKzEyNTIsMTEgQEAgX2J0X2RlbGl0ZW1z X3ZhY3V1bShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJCX0KIAogCQlyZWNwdHIgPSBYTG9n SW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX1ZBQ1VVTSk7Ci0KLQkJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7 CisKKwlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAK QEAgLTEyOTIsNiArMTI5OCw3IEBAIF9idF9kZWxpdGVtc19kZWxldGUoUmVsYXRpb24gcmVsLCBC dWZmZXIgYnVmLAogCWNoYXIJICAgKnVwZGF0ZWRidWYgPSBOVUxMOwogCVNpemUJCXVwZGF0ZWRi dWZsZW4gPSAwOwogCU9mZnNldE51bWJlciB1cGRhdGVkb2Zmc2V0c1tNYXhJbmRleFR1cGxlc1Bl clBhZ2VdOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogU2hvdWxkbid0IGJlIGNhbGxlZCB1 bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KIAlBc3NlcnQobmRlbGV0YWJsZSA+IDAg fHwgbnVwZGF0YWJsZSA+IDApOwpAQCAtMTM0Miw3ICsxMzQ5LDYgQEAgX2J0X2RlbGl0ZW1zX2Rl bGV0ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJLyogWExPRyBzdHVmZiAqLwogCWlmIChu ZWVkc3dhbCkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9idHJlZV9kZWxldGUgeGxy ZWNfZGVsZXRlOwogCiAJCXhscmVjX2RlbGV0ZS5zbmFwc2hvdENvbmZsaWN0SG9yaXpvbiA9IHNu YXBzaG90Q29uZmxpY3RIb3Jpem9uOwpAQCAtMTM2Niw5ICsxMzcyLDExIEBAIF9idF9kZWxpdGVt c19kZWxldGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCQl9CiAKIAkJcmVjcHRyID0gWExv Z0luc2VydChSTV9CVFJFRV9JRCwgWExPR19CVFJFRV9ERUxFVEUpOwotCi0JCVBhZ2VTZXRMU04o cGFnZSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwp OworCisJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwog CkBAIC0yMTAzLDYgKzIxMTEsNyBAQCBfYnRfbWFya19wYWdlX2hhbGZkZWFkKFJlbGF0aW9uIHJl bCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVyIGxlYWZidWYsCiAJT2Zmc2V0TnVtYmVyIG5leHRv ZmZzZXQ7CiAJSW5kZXhUdXBsZQlpdHVwOwogCUluZGV4VHVwbGVEYXRhIHRydW5jdHVwbGU7CisJ WExvZ1JlY1B0cglyZWNwdHI7CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKIAlv cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CkBAIC0yMjUzLDcgKzIyNjIsNiBAQCBfYnRf bWFya19wYWdlX2hhbGZkZWFkKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVy IGxlYWZidWYsCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7CiAJCXhsX2J0cmVlX21h cmtfcGFnZV9oYWxmZGVhZCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJeGxyZWMu cG9mZnNldCA9IHBvZmZzZXQ7CiAJCXhscmVjLmxlYWZibGsgPSBsZWFmYmxrbm87CkBAIC0yMjc0 LDEyICsyMjgyLDE0IEBAIF9idF9tYXJrX3BhZ2VfaGFsZmRlYWQoUmVsYXRpb24gcmVsLCBSZWxh dGlvbiBoZWFwcmVsLCBCdWZmZXIgbGVhZmJ1ZiwKIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMs IFNpemVPZkJ0cmVlTWFya1BhZ2VIYWxmRGVhZCk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChS TV9CVFJFRV9JRCwgWExPR19CVFJFRV9NQVJLX1BBR0VfSEFMRkRFQUQpOwotCi0JCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKHN1YnRyZWVwYXJlbnQpOwotCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7 Ci0JCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYpOwotCQlQYWdlU2V0TFNOKHBhZ2UsIHJl Y3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKHN1YnRyZWVwYXJlbnQpOworCVBhZ2VTZXRMU04ocGFnZSwgcmVj cHRyKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKKwlQYWdlU2V0TFNOKHBhZ2Us IHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTIzMzcsNiArMjM0Nyw3IEBA IF9idF91bmxpbmtfaGFsZmRlYWRfcGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBsZWFmYnVmLCBC bG9ja051bWJlciBzY2FuYmxrbm8sCiAJdWludDMyCQl0YXJnZXRsZXZlbDsKIAlJbmRleFR1cGxl CWxlYWZoaWtleTsKIAlCbG9ja051bWJlciBsZWFmdG9wcGFyZW50OworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobGVhZmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdl R2V0T3BhcXVlKHBhZ2UpOwpAQCAtMjY3Niw3ICsyNjg3LDYgQEAgX2J0X3VubGlua19oYWxmZGVh ZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJsb2NrTnVtYmVyIHNjYW5ibGtu bywKIAkJeGxfYnRyZWVfdW5saW5rX3BhZ2UgeGxyZWM7CiAJCXhsX2J0cmVlX21ldGFkYXRhIHhs bWV0YTsKIAkJdWludDgJCXhsaW5mbzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJWExvZ0Jl Z2luSW5zZXJ0KCk7CiAKQEAgLTI3MjAsMjUgKzI3MzAsMjUgQEAgX2J0X3VubGlua19oYWxmZGVh ZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJsb2NrTnVtYmVyIHNjYW5ibGtu bywKIAkJCXhsaW5mbyA9IFhMT0dfQlRSRUVfVU5MSU5LX1BBR0U7CiAKIAkJcmVjcHRyID0gWExv Z0luc2VydChSTV9CVFJFRV9JRCwgeGxpbmZvKTsKKwl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9n R2V0RmFrZUxTTihyZWwpOwogCi0JCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFidWYpKQotCQl7Ci0J CQlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsKLQkJfQotCQlwYWdlID0gQnVmZmVyR2V0UGFn ZShyYnVmKTsKKwlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkKKwkJUGFnZVNldExTTihtZXRh cGcsIHJlY3B0cik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UocmJ1Zik7CisJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOworCWlmIChCdWZmZXJJc1ZhbGlkKGxidWYpKQorCXsKKwkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UobGJ1Zik7CiAJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKLQkJcGFnZSA9 IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwl9CisJaWYgKHRhcmdldCAhPSBsZWFmYmxrbm8pCisJewor CQlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKIAkJUGFnZVNldExTTihwYWdlLCByZWNw dHIpOwotCQlpZiAoQnVmZmVySXNWYWxpZChsYnVmKSkKLQkJewotCQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UobGJ1Zik7Ci0JCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7Ci0JCX0KLQkJaWYgKHRh cmdldCAhPSBsZWFmYmxrbm8pCi0JCXsKLQkJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYp OwotCQkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwotCQl9CiAJfQogCiAJRU5EX0NSSVRfU0VD VElPTigpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggNmQwYTZmMjdmLi4wZGE0 OGI0MmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtNDA3LDEzICs0MDcsNiBA QCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fu a2V5cywKIAkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMg YWxsLXZpc2libGUgaW4gdGhlIFZNLgogCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGlu ZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCiAJICoKLQkgKiBXaGVuIHdl IGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRoYXQgbWFya3Mgc28tPmtpbGxlZEl0 ZW1zW10KLQkgKiBpbmRleCB0dXBsZXMgTFBfREVBRCBoYXMgdG8gZGVhbCB3aXRoIGNvbmN1cnJl bnQgVElEIHJlY3ljbGluZyByYWNlcy4KLQkgKiBUaGUgc2NoZW1lIHVzZWQgdG8gZGV0ZWN0IHVu c2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hlbiBzY2FubmluZwotCSAqIHVubG9nZ2Vk IHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2aW5nIGFuIGFmZmVjdGVkIHBhZ2UncyBM U04pLgotCSAqIE9wdCBvdXQgb2YgZWFnZXIgcGluIGRyb3BwaW5nIGR1cmluZyB1bmxvZ2dlZCBy ZWxhdGlvbiBzY2FucyBmb3Igbm93Ci0JICogKHRoaXMgaXMgcHJlZmVyYWJsZSB0byBvcHRpbmcg b3V0IG9mIGtpbGxfcHJpb3JfdHVwbGUgTFBfREVBRCBzZXR0aW5nKS4KLQkgKgogCSAqIEFsc28g b3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAg c2NhbnMuCiAJICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQg ZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKIAkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwg YXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBhZ2UgTFNOcy4KQEAgLTQyNCw3ICs0 MTcsNiBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50 IG5zY2Fua2V5cywKIAkgKi8KIAlzby0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYm CiAJCQkJICAgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCi0JCQkJICAgUmVs YXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSAmJgogCQkJCSAgIHNjYW4tPmhlYXBS ZWxhdGlvbiAhPSBOVUxMKTsKIAogCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCBhYjQ1MmM3YjAuLmFhZTZhY2I3ZiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC02Nyw3ICs2Nyw2IEBAIF9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKIAkgKiBI YXZlIHRvIHNldCBzby0+Y3VyclBvcy5sc24gc28gdGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdh eSB0byBkZXRlY3QKIAkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZB Q1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgogCSAqLwotCUFzc2VydChSZWxhdGlvbk5lZWRz V0FMKHJlbCkpOwogCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhzby0+Y3Vy clBvcy5idWYpOwogCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwogCXNvLT5jdXJy UG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMK aW5kZXggMzJkOTRlMjM2Li45YjA5MTg1ODkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMKQEAgLTIzNiw3ICsyMzYsNiBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAkJWExvZ1JlY1B0cglsYXRlc3Rsc247CiAKIAkJQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5l ZChzby0+Y3VyclBvcykpOwotCQlBc3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKIAkJYnVm ID0gX2J0X2dldGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBCVF9SRUFEKTsKIAogCQls YXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKLS0gCjIuNTMuMAoK --00000000000005d770064cd8fd78 Content-Type: application/octet-stream; name="v13-0002-Use-GetXLogInsertEndRecPtr-in-XLogGetFakeLSN.patch" Content-Disposition: attachment; filename="v13-0002-Use-GetXLogInsertEndRecPtr-in-XLogGetFakeLSN.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnv38a318 RnJvbSA0ZGVkMjkyZmJmYjY2MWI2ZjIwZTVjMGQ0NGRjYjY3ZmM5YWNlMmJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGF0ZTog VGh1LCA1IE1hciAyMDI2IDE2OjUxOjI4ICswMTAwClN1YmplY3Q6IFtQQVRDSCB2MTMgMDIvMTld IFVzZSBHZXRYTG9nSW5zZXJ0RW5kUmVjUHRyIGluIFhMb2dHZXRGYWtlTFNOCgpUaGUgZnVuY3Rp b24gdXNlZCBHZXRYTG9nSW5zZXJ0UmVjUHRyKCkgdG8gZ2VuZXJhdGUgdGhlIGZha2UgTFNOLiBN b3N0Cm9mIHRoZSB0aW1lIHRoaXMgaXMgdGhlIHNhbWUgYXMgd2hhdCBYTG9nSW5zZXJ0KCkgd291 bGQgcmV0dXJuLCBhbmQgc28KaXQgd29ya3MgZmluZSB3aXRoIHRoZSBYTG9nRmx1c2goKSBjYWxs LiBCdXQgaWYgdGhlIGxhc3QgcmVjb3JkIGVuZHMgYXQKYSBwYWdlIGJvdW5kYXJ5LCBHZXRYTG9n SW5zZXJ0UmVjUHRyKCkgcmV0dXJucyBMU04gcG9pbnRpbmcgYWZ0ZXIgdGhlCnBhZ2UgaGVhZGVy LiBJbiBzdWNoIGNhc2UgWExvZ0ZsdXNoKCkgZmFpbHMgd2l0aCBlcnJvcnMgbGlrZSB0aGlzOgoK ICBFUlJPUjogeGxvZyBmbHVzaCByZXF1ZXN0IDAvMDFCRDIwMTggaXMgbm90IHNhdGlzZmllZCAt LS0gZmx1c2hlZCBvbmx5IHRvIDAvMDFCRDIwMDAKClN1Y2ggZmFpbHVyZXMgYXJlIHZlcnkgaGFy ZCB0byB0cmlnZ2VyLCBwYXJ0aWN1bGFybHkgb3V0c2lkZSBhZ2dyZXNzaXZlCnRlc3Qgc2NlbmFy aW9zLgoKRml4ZWQgYnkgaW50cm9kdWNpbmcgR2V0WExvZ0luc2VydEVuZFJlY1B0cigpLCByZXR1 cm5pbmcgdGhlIGNvcnJlY3QgTFNOCndpdGhvdXQgc2tpcHBpbmcgdGhlIGhlYWRlci4gVGhpcyBp cyB0aGUgc2FtZSBhcyBHZXRYTG9nSW5zZXJ0UmVjUHRyKCksCmV4Y2VwdCB0aGF0IGl0IGNhbGxz IFhMb2dCeXRlUG9zVG9FbmRSZWNQdHIoKS4KClRoaXMgaXMgYSBsb25nLXN0YW5kaW5nIGJ1ZyBp biBnaXN0R2V0RmFrZUxTTigpLCBwcm9iYWJseSBpbnRyb2R1Y2VkIGJ5CmM2YjkyMDQxZDM4LiBU aGUgZmFrZSBMU04gYXBwcm9hY2ggd2FzIGdlbmVyYWxpemVkIHRvIG90aGVyIGluZGV4IHR5cGVz LAppbmhlcml0aW5nIHRoZSBzYW1lIGJ1Zy4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vdmY0aGJ3cm90dmhiZ2Nua25ycW1mYnFsdTc1b3lqa21hdXN2eTY2aWM3eDd2dWhhZnhAZTRy dndhdnRqc3dvCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAgICAgICAgIHwg IDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAgIHwgMTYgKysrKysr KysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2luc2VydC5jIHwgIDIg Ky0KIDMgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv eGxvZy5oCmluZGV4IDU1M2Q2ZmM5Yy4uZGNjMTJlYjhjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKQEAgLTIzOCw2 ICsyMzgsNyBAQCBleHRlcm4gYm9vbCBSZWNvdmVyeUluUHJvZ3Jlc3Modm9pZCk7CiBleHRlcm4g UmVjb3ZlcnlTdGF0ZSBHZXRSZWNvdmVyeVN0YXRlKHZvaWQpOwogZXh0ZXJuIGJvb2wgWExvZ0lu c2VydEFsbG93ZWQodm9pZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBHZXRYTG9nSW5zZXJ0UmVjUHRy KHZvaWQpOworZXh0ZXJuIFhMb2dSZWNQdHIgR2V0WExvZ0luc2VydEVuZFJlY1B0cih2b2lkKTsK IGV4dGVybiBYTG9nUmVjUHRyIEdldFhMb2dXcml0ZVJlY1B0cih2b2lkKTsKIAogZXh0ZXJuIHVp bnQ2NCBHZXRTeXN0ZW1JZGVudGlmaWVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j CmluZGV4IDkyZTQ0YTUwMS4uMmI2ZTYxMjAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j CkBAIC05NjIzLDYgKzk2MjMsMjIgQEAgR2V0WExvZ0luc2VydFJlY1B0cih2b2lkKQogCXJldHVy biBYTG9nQnl0ZVBvc1RvUmVjUHRyKGN1cnJlbnRfYnl0ZXBvcyk7CiB9CiAKKy8qCisgKiBHZXQg bGF0ZXN0IFdBTCBpbnNlcnQgcG9pbnRlcgorICovCitYTG9nUmVjUHRyCitHZXRYTG9nSW5zZXJ0 RW5kUmVjUHRyKHZvaWQpCit7CisJWExvZ0N0bEluc2VydCAqSW5zZXJ0ID0gJlhMb2dDdGwtPklu c2VydDsKKwl1aW50NjQJCWN1cnJlbnRfYnl0ZXBvczsKKworCVNwaW5Mb2NrQWNxdWlyZSgmSW5z ZXJ0LT5pbnNlcnRwb3NfbGNrKTsKKwljdXJyZW50X2J5dGVwb3MgPSBJbnNlcnQtPkN1cnJCeXRl UG9zOworCVNwaW5Mb2NrUmVsZWFzZSgmSW5zZXJ0LT5pbnNlcnRwb3NfbGNrKTsKKworCXJldHVy biBYTG9nQnl0ZVBvc1RvRW5kUmVjUHRyKGN1cnJlbnRfYnl0ZXBvcyk7Cit9CisKIC8qCiAgKiBH ZXQgbGF0ZXN0IFdBTCB3cml0ZSBwb2ludGVyCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2dpbnNlcnQuYwppbmRleCA0ZTA0OTk4MmYuLjE0YTU1YzdhZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2luc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYwpAQCAtNTk4LDcgKzU5OCw3IEBAIFhMb2dHZXRGYWtl TFNOKFJlbGF0aW9uIHJlbCkKIAkJICogbGFzdCBjYWxsLgogCQkgKi8KIAkJc3RhdGljIFhMb2dS ZWNQdHIgbGFzdGxzbiA9IEludmFsaWRYTG9nUmVjUHRyOwotCQlYTG9nUmVjUHRyCWN1cnJsc24g PSBHZXRYTG9nSW5zZXJ0UmVjUHRyKCk7CisJCVhMb2dSZWNQdHIJY3VycmxzbiA9IEdldFhMb2dJ bnNlcnRFbmRSZWNQdHIoKTsKIAogCQlBc3NlcnQoIVJlbGF0aW9uTmVlZHNXQUwocmVsKSk7CiAJ CUFzc2VydChSZWxhdGlvbklzUGVybWFuZW50KHJlbCkpOwotLSAKMi41My4wCgo= --00000000000005d770064cd8fd78--