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 1whReV-000EAp-2A for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 12:45:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whReS-007Gbf-2m for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 12:45:21 +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 1whReS-007GbX-0f for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 12:45:21 +0000 Received: from mail-yx1-xb12c.google.com ([2607:f8b0:4864:20::b12c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whReO-000000009aK-3sv3 for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 12:45:20 +0000 Received: by mail-yx1-xb12c.google.com with SMTP id 956f58d0204a3-664cb440f9eso770115d50.1 for ; Wed, 08 Jul 2026 05:45:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783514716; cv=none; d=google.com; s=arc-20260327; b=AH0usQDPY4Uql/sSgWseleKDkzICF5egz5yXWhF653m1x0yVRI58iQzYUM0IRoZcbr Gt+JIdeqvQTjJxALNiHmO+8TQAg9q6k8mbGWb5T/LfCXAW+VMz0FAbrEfpNszL26TR6d BzU/fStsXb20GKz7mWDWLm7er2mKobSvwm75lkHukHZbvmXUXgscgvteTJtpJXGfNI9C vbRkxzjFTIGeG4oW4eT7g2pMeymOMefg7KkQnV05T2epY/5U0ZPQDSa0bRK7WiPaYvVA KUkmmeU3PQl/fk8IEdF70agNdGC4Tp/Ei8ABD+q+8ery8A/h4KwYhUgruy7Cn4qEZXtM aOzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=DGjEqY7Bw/jK7YiXcL5URJwA9ZVdX89xj/ereMtxbW4=; fh=FV5OufVTdOboRf9dh8JfFMG3ADPYffcFIKROo17oBBc=; b=qFoT0rjX6KNtP2Y1ZTd7G8FVxKtCwf+CNemtcgt8Aelquuawd/XeGJEnlwHtl1/TrM G0COJpu8EGyGpJoezZEzJ5UwuIFqZ0M2JhRDC0giYCeoKXzsY9F8GiYp/o3VoTvT49uT 2JrtKPnYGXD9HM7hzbRhFqq2w2Rzc57P1Hegc2cR3IVlt0f4vhOZABzgxU0ZxLosjIqd r7FKQjznLlN9HVl553NM19KZPPB2dc4ysEOcJh/zpPSWUWG3/NYNiH7ORL+6g16/36dO FE2fgon8ETSISOl8B8zbk2zE/wwVaVHLOfZecTjkWtOXszlxwuppOUI0mByaLUIs8eB6 5M/g==; 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=gmail.com; s=20251104; t=1783514716; x=1784119516; 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=DGjEqY7Bw/jK7YiXcL5URJwA9ZVdX89xj/ereMtxbW4=; b=dHd5PjYWOH3uBnUJLlE4SB4oLQlTf+SOm/UgBx6lG7LontkgFmks4j7vtLP7vBf9Hx 0xKK0q+23duHliJuC+lT+a2BRhYuZJvMAwrK8Jja1/U/btm6o2b+nEzerCY9ReSgulhr 7Ssprb5i3ZAmZmCuGDQ12t6ZA9BBCsQPgAdmAdy8vElsXOLWz2WgBtN9IeDVQohPRBPd 6zQohM6bBwf1n2x5RRAZ8aCB7HBXMOVCvEKPoqXe4D00/2PmtQeLNkA12Vca22LMrJ3F UlSrOeLtKo14/lGBT7Oz2VX8o6GRFh27SPmM6agGdhf1eFOk+C5ndiMJH02n0XFhvk1p 5ojQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783514716; x=1784119516; 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=DGjEqY7Bw/jK7YiXcL5URJwA9ZVdX89xj/ereMtxbW4=; b=leDULSTNT0e4bDvEihT7OddCLBzL55+z9zMa++dIuE+AP3m2JXpreKbR1VQdPLpVWa 2bxUkW74yDBFIzH3FG57te3149YF+zOOqskcbVMtlKAZY9VTemmzX3iz1amOFw6o2z5U 6/0d8nRUArHVJfzpkq3HJsuBVivnM6zrcLkHeWdEaVLepgbr1R0uy1CLBY/2frKFfstY 9kyy6yVbU98skBLBluUNinWKbDuwX3XIjbPxvJ5/zv/hhRBrKvUcqktxPjhHAQTH/1C3 c8lU+38BhbzlNseIx6FyvIrfr+B+b3qvHeymu/eSOIE0Nellk/Bd1w91FkNuXpO3h5UQ fmbw== X-Forwarded-Encrypted: i=1; AHgh+Ro4q+LQWX6xwnFGjsbT5Lw4HM/GrL6/Hz3MpT24NkPZXmZMAmP/aBXAT1/c0h2BoBR07xWDK0wBFtpYMAOk@lists.postgresql.org X-Gm-Message-State: AOJu0YxaJhqNUbdgN50F5KcCW3bv7rr9EDvzlYVwZwOEECMIs3SWCw0T 1Jyy6Pye91gKkbpe/sz/WndLK8aJXqK8xytNjffs6Zu3T9FmJWxiajLpi0kna+KGrrxbbt67Kja iDUxdFlKdjGdmI8wcais6xiFiROSAKNY= X-Gm-Gg: AfdE7cm8OBymPayjvaw1+2dkpELnMR+3ArKqZDDJ9hdEdSZwN4++zsB5fzSOfzEqrOg 9RYpijI90WL9WQyTbqfUGsAkm6GbSL3ijeCoVRs96bOMsbsxWH/gLVw/2rnlpCxf6VNS3geuGFl kw3qy7TEY/xzAc6L5+69/0m8dANL7ZuweiwnhAubqeSTEYGDlduQLbCZNoxTkk4aoXVwvkq9aCF qgTJjqHSU92Fc2b2VhPhasBD7XQAtA8LdR+13xw5HGH1Vh1o+dA1j4H8dKCB6Bdh9xrBIWDoWuF qA3eYBVpcQcuogr1+yN7yzoc1nRr9jaTbnrrjTvazT1ZEVfPbeHDJY1xBHGc0iuZH/iG2iB/+cg fI0P05YhHEjJ7fcCBZjEFxASYax0C392W+UiVgI9BLEvF7Ik= X-Received: by 2002:a05:690e:d4f:b0:664:bc2c:b25d with SMTP id 956f58d0204a3-6679f08a3c2mr1958247d50.33.1783514716296; Wed, 08 Jul 2026 05:45:16 -0700 (PDT) MIME-Version: 1.0 References: <4166.1773289811@sss.pgh.pa.us> <3648848.1782942004@sss.pgh.pa.us> In-Reply-To: From: Pavel Stehule Date: Wed, 8 Jul 2026 14:44:38 +0200 X-Gm-Features: AVVi8Cc5ZIWoGN-ugXhgtQhLC4iePIcjcr8Cmv-vu5ond6q3Z8X-jViViwtMi6Q Message-ID: Subject: Re: POC: PLpgSQL FOREACH IN JSON ARRAY To: Tom Lane Cc: Peter Eisentraut , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000001e37d9065618e167" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001e37d9065618e167 Content-Type: multipart/alternative; boundary="0000000000001e37d8065618e165" --0000000000001e37d8065618e165 Content-Type: text/plain; charset="UTF-8" Hi fix regress tests Regards Pavel --0000000000001e37d8065618e165 Content-Type: text/html; charset="UTF-8"
Hi

fix regress tests

Regards

Pavel
--0000000000001e37d8065618e165-- --0000000000001e37d9065618e167 Content-Type: text/x-patch; charset="US-ASCII"; name="v20260708-0001-FOREACH-scalar-IN-ARRAY-jsonb_expr.patch" Content-Disposition: attachment; filename="v20260708-0001-FOREACH-scalar-IN-ARRAY-jsonb_expr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrc2l3sk0 RnJvbSA3MGNjNWVhYWUzYmJjNjAyZTJmYWFkZjcwZjBlNjg0ZjJlMzEwNTkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAib2tib2JAZ2l0aHViLmNvbSIgPHBhdmVsLnN0ZWh1bGVAZ21h aWwuY29tPgpEYXRlOiBNb24sIDIzIEZlYiAyMDI2IDEyOjUzOjQ0ICswMTAwClN1YmplY3Q6IFtQ QVRDSF0gRk9SRUFDSCBzY2FsYXIgSU4gQVJSQVkganNvbmJfZXhwcgoKdGhpcyBwYXRjaCBpbnRy b2R1Y2Ugc3VwcG9ydCBGT1JFQUNIIHNjYWxhcl92YXIgSU4gQVJSQVkgZXhwciwgd2hlbiB0aGUK cmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIGNhbiBiZSBKc29uYi4gVGhlIGRlc2lnbiBpcyBiYXNl ZApvbiBiZWhhdmUgb2YganNvbmJfYXJyYXlfZWxlbWVudHMgZnVuY3Rpb25zLiBJbiB0aGlzIGNh c2UsIEZPUkVBQ0ggZW5mb3JjZQpjYXN0aW5nIHRvIHRhcmdldCB0eXBlIChiZWNhdXNlIHdlIGtu b3cgdGFyZ2V0IHR5cGUpIGFuZCB0cnkgdG8gcmVkdWNlCklPIGNhc3RpbmcuIEF0dGVudGlvbjog SU8gY2FzdGluZyBjYW4gYmUgbW9yZSBzdHJpY3QsIHRoZW4gY2FzdGluZyBiYXNlZApvbiBjYXN0 IGZ1bmN0aW9ucy4KCkRFQ0xBUkUgdCBpbnQ7CkJFR0lOCiAgLS0gdGhpcyBjYW4gd29yayBiZWNh dXNlIHdlIHVzZSBjYXN0IG51bWVyaWMgLT4gaW50CiAgRk9SRUFDSCB0IElOIEFSUkFZICdbMSwy LDMuMTRdJzo6anNvbmIKICBMT09QCgogIC0tIHRoaXMgZmFpbHMsIGJlY2F1c2UgSU8gY2FzdCBp cyB1c2VkLCBhbmQgaW50ZWdlciBpbnB1dCBmdW5jdGlvbgogIC0tIGFsbG93cyBvbmx5IGRpZ2l0 cwogIEZPUkVBQyB0IElOIEpTT04gQVJSQVkgJ1sxLDIsMywiMy4xNCJdJzo6anNvbmIKICBMT09Q CgpDb25jZXB0dWFsIHF1ZXN0aW9uIGlzIGlmIGNhc3Rpbmcgc2hvdWxkIGJlIHN0cmljdCBsaWtl ICJvbGQiIFBvc3RncmVTUUwKanNvbiBmdW5jdGlvbiBvciBsYXggYXMgIm5ldyIgU1FML0pTT04g ZnVuY3Rpb25zPyBJIGNhbiBpbWFnaW5lIGxheCBtb2RlCmFzIGRlZmF1bHQgd2l0aCBwb3NzaWJp bGl0eSB0byBzd2l0Y2ggdG8gc3RyaWN0IG1vZGUgKHRoaXMgaXMgbm90IGltcGxlbWVudGVkCm5v dyk6CgogIEZPUkVBQ0ggdCBJTiBBUlJBWSAnWzEsMiwzXScgRVJST1IgT04gRU1QVFkgRVJST1Ig T04gRVJST1IKICBMT09QCiAgICAuLi4KCkJlY2F1c2Ugd2UgdXNlICJvbGQiIHN5bnRheCAtIEZP UkVBQ0ggSU4gQVJSQVksIEkgcHJlZmVyICJvbGQiIGJlaGF2aW91ciwKdGhhdCBpcyBtb3JlIHNp bWlsYXIgdG8gaXRlcmF0aW9uIG92ZXIgYW4gYXJyYXkuCgpUaGUgcGVyZm9ybWFuY2UgKGJlc3Qg Y2FzZSBmb3IgaXRlcmF0aW9uIG92ZXIgMTAwMCBmaWVsZHMgYXJyYXkpIGlzIGFib3V0CjR4IGJl dHRlciB0aGFuIHdoZW4gRk9SIElOIFNFTEVDVCBqc29uYl9hcnJheV9lbGVtZW50cyBpcyB1c2Vk LgotLS0KIGRvYy9zcmMvc2dtbC9wbHBnc3FsLnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICA2 MiArKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvYXJyYXlzdWJzLmMgICAgICAgICAgICAgfCAg OTIgKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJzdWJzLmMgICAgICAgICAgICAg fCAxOTYgKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9zdWJzY3JpcHRpbmcuaCAgICAg ICAgICAgICAgfCAgMzcgKysrCiBzcmMvcGwvcGxwZ3NxbC9zcmMvTWFrZWZpbGUgICAgICAgICAg ICAgICAgICAgfCAgIDIgKy0KIC4uLi9wbHBnc3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX2ZvcmVh Y2gub3V0ICB8IDI5NSArKysrKysrKysrKysrKysrKysKIHNyYy9wbC9wbHBnc3FsL3NyYy9tZXNv bi5idWlsZCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhl Yy5jICAgICAgICAgICAgICAgICAgfCAxODcgKysrKystLS0tLS0KIHNyYy9wbC9wbHBnc3FsL3Ny Yy9wbHBnc3FsLmggICAgICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL3BsL3BscGdzcWwvc3Jj L3NxbC9wbHBnc3FsX2ZvcmVhY2guc3FsICAgIHwgMjUyICsrKysrKysrKysrKysrKwogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wbHBnc3FsLm91dCAgICAgICAgIHwgICA0ICstCiAxMSBmaWxl cyBjaGFuZ2VkLCAxMDM1IGluc2VydGlvbnMoKyksIDk2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9wbC9wbHBnc3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX2ZvcmVhY2gub3V0 CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX2ZvcmVh Y2guc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3BscGdzcWwuc2dtbCBiL2RvYy9zcmMv c2dtbC9wbHBnc3FsLnNnbWwKaW5kZXggNTYxZjZlNTBkNjMuLjZiYzlmYjAyZTFlIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcGxwZ3NxbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wbHBnc3Fs LnNnbWwKQEAgLTI2OTcsMTIgKzI2OTcsMTIgQEAgRU5EIExPT1AgPG9wdGlvbmFsPiA8cmVwbGFj ZWFibGU+bGFiZWw8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPjsKICAgIDwvc2VjdDI+CiAKICAg IDxzZWN0MiBpZD0icGxwZ3NxbC1mb3JlYWNoLWFycmF5Ij4KLSAgICA8dGl0bGU+TG9vcGluZyB0 aHJvdWdoIEFycmF5czwvdGl0bGU+CisgICAgPHRpdGxlPkxvb3BpbmcgdGhyb3VnaCBBcnJheXMg b3IgSnNvbmIgYXJyYXlzPC90aXRsZT4KIAogICAgIDxwYXJhPgogICAgICBUaGUgPGxpdGVyYWw+ Rk9SRUFDSDwvbGl0ZXJhbD4gbG9vcCBpcyBtdWNoIGxpa2UgYSA8bGl0ZXJhbD5GT1I8L2xpdGVy YWw+IGxvb3AsCiAgICAgIGJ1dCBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSByb3dz IHJldHVybmVkIGJ5IGFuIFNRTCBxdWVyeSwKLSAgICAgaXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUg ZWxlbWVudHMgb2YgYW4gYXJyYXkgdmFsdWUuCisgICAgIGl0IGl0ZXJhdGVzIHRocm91Z2ggdGhl IGVsZW1lbnRzIG9mIGFuIGFycmF5IHZhbHVlIG9yIG9mIGpzb25iIGFycmF5IHZhbHVlLgogICAg ICAoSW4gZ2VuZXJhbCwgPGxpdGVyYWw+Rk9SRUFDSDwvbGl0ZXJhbD4gaXMgbWVhbnQgZm9yIGxv b3BpbmcgdGhyb3VnaAogICAgICBjb21wb25lbnRzIG9mIGEgY29tcG9zaXRlLXZhbHVlZCBleHBy ZXNzaW9uOyB2YXJpYW50cyBmb3IgbG9vcGluZwogICAgICB0aHJvdWdoIGNvbXBvc2l0ZXMgYmVz aWRlcyBhcnJheXMgbWF5IGJlIGFkZGVkIGluIGZ1dHVyZS4pCkBAIC0yNzc4LDYgKzI3NzgsNjQg QEAgTk9USUNFOiAgcm93ID0gezcsOCw5fQogTk9USUNFOiAgcm93ID0gezEwLDExLDEyfQogPC9w cm9ncmFtbGlzdGluZz4KICAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgVGhlIDxsaXRl cmFsPlNMSUNFPC9saXRlcmFsPiBoaWdoZXIgdGhhbiB6ZXJvIGNhbm5vdCBiZSB1c2VkIHdoZW4g aXRlcmF0ZXMKKyAgICAgdGhyb3VnaCBqc29uYiBhcnJheXMuCisgICAgPC9wYXJhPgorCisgICAg PHBhcmE+CisgICAgIFRoZSA8bGl0ZXJhbD5GT1JFQUNIPC9saXRlcmFsPiBsb29wIG92ZXIganNv bmIgYXJyYXlzIHVzZXMKKyAgICAgc2FtZSBzeW50YXggbGlrZSA8bGl0ZXJhbD5GT1JFQUNIPC9s aXRlcmFsPiBsb29wIG92ZXIgYXJyYXlzLAorICAgICBidXQgaW5zdGVhZCBvZiBpdGVyYXRpbmcg dGhyb3VnaCBlbGVtZW50cyBvZiB0aGUgYXJyYXksCisgICAgIGl0IGl0ZXJhdGVzIHRocm91Z2gg dGhlIGVsZW1lbnRzIG9mIGEgSnNvbmIgYXJyYXkgdmFsdWUuCisgICAgPC9wYXJhPgorCisgICAg PHBhcmE+CisgICAgIFRoZSB0YXJnZXQgY2FuIGJlIGEgc2NhbGFyIHZhcmlhYmxlLCBhIGNvbXBv c2l0ZSB2YXJpYWJsZSwgb3IgYSBsaXN0CisgICAgIG9mIHNjYWxhciB2YXJpYWJsZXMuIFdoZW4g dmFyaWFibGUgaXMgbm90IHNjYWxhciwgdGhlbiBhc3NpZ25lZCB2YWx1ZQorICAgICBzaG91bGQg YmUgYSBKU09OIG9iamVjdCBhbmQgdGhlIEpTT04gYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgYnkg bmFtZXMuCisKKzxwcm9ncmFtbGlzdGluZz4KK0NSRUFURSBGVU5DVElPTiBwcmludF9lbGVtZW50 cyhqc29uYikgUkVUVVJOUyB2b2lkIEFTICQkCitERUNMQVJFCisgIHggaW50OworQkVHSU4KKyAg Rk9SRUFDSCB4IElOIEFSUkFZICQxCisgIExPT1AKKyAgICBSQUlTRSBOT1RJQ0UgJ3JvdyA9ICUn LCB4OworICBFTkQgTE9PUDsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWw7CisKK1NFTEVDVCBw cmludF9lbGVtZW50cygnWzEsMiwzXScpOworTk9USUNFOiAgcm93ID0gMQorTk9USUNFOiAgcm93 ID0gMgorTk9USUNFOiAgcm93ID0gMworCitDUkVBVEUgRlVOQ1RJT04gcHJpbnRfZmllbGRzKGpz b25iKSBSRVRVUk5TIHZvaWQgQVMgJCQKK0RFQ0xBUkUKKyAgeCBpbnQ7IHkgdmFyY2hhcjsKK0JF R0lOCisgIEZPUkVBQ0ggeCwgeSBJTiBBUlJBWSAkMQorICBMT09QCisgICAgUkFJU0UgTk9USUNF ICd4OiAlLCB5OiAlJywgeCwgeTsKKyAgRU5EIExPT1A7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBn c3FsOworCitTRUxFQ1QgcHJpbnRfZmllbGRzKCdbe30seyJ4IjoxMH0seyJ5IjoiSGkifSx7Inki OiJIaSIsICJ4IjoxMDAwfV0nKTsKK05PVElDRTogIHg6ICZsdDtOVUxMJmd0OywgeTogJmx0O05V TEwmZ3Q7CitOT1RJQ0U6ICB4OiAxMCwgeTogJmx0O05VTEwmZ3Q7CitOT1RJQ0U6ICB4OiAmbHQ7 TlVMTCZndDssIHk6IEhpCitOT1RJQ0U6ICB4OiAxMDAwLCB5OiBIaQorPC9wcm9ncmFtbGlzdGlu Zz4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgVGhlIHRhcmdldCB2YXJpYWJsZSBj YW4gYmUgb2YgdHlwZSA8bGl0ZXJhbD5SRUNPUkQ8L2xpdGVyYWw+LCBidXQgdGhlIHJlYWwgc3Ry dWN0dXJlIGhhcyB0byBiZQorICAgICBhc3NpZ25lZCBiZWZvcmUgdXNhZ2UgaW4gdGhlIDxsaXRl cmFsPkZPUkVBQ0g8L2xpdGVyYWw+IHN0YXRlbWVudC4KKyAgICA8L3BhcmE+CiAgICA8L3NlY3Qy PgogCiAgICA8c2VjdDIgaWQ9InBscGdzcWwtZXJyb3ItdHJhcHBpbmciPgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5c3Vicy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2FycmF5c3Vicy5jCmluZGV4IDJiZjllOTUwOWZiLi44NDRmZmU5MjMwMSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5c3Vicy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9hcnJheXN1YnMuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9jb2VyY2UuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZXhwci5oIgogI2luY2x1ZGUgInV0 aWxzL2FycmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGls cy9mbWdycHJvdG9zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAKQEAgLTQ2LDYg KzQ3LDkxIEBAIHR5cGVkZWYgc3RydWN0IEFycmF5U3ViV29ya3NwYWNlCiAJaW50CQkJbG93ZXJp bmRleFtNQVhESU1dOwogfSBBcnJheVN1YldvcmtzcGFjZTsKIAordHlwZWRlZiBzdHJ1Y3QKK3sK KwlGb3JlYWNoQUl0ZXJhdG9yIHB1YjsKKwlBcnJheUl0ZXJhdG9yIGl0OworCU9pZAkJCXJlc3Vs dF90eXBpZDsKKwlpbnQzMgkJcmVzdWx0X3R5cG1vZDsKK30gQXJyYXlGb3JlYWNoQUl0ZXJhdG9y OworCitzdGF0aWMgYm9vbAorYXJyYXlfZm9yZWFjaF9hX2l0ZXJhdGUoRm9yZWFjaEFJdGVyYXRv ciAqc2VsZiwKKwkJCQkJCURhdHVtICp2YWx1ZSwgYm9vbCAqaXNudWxsLAorCQkJCQkJT2lkICp0 eXBpZCwgaW50MzIgKnR5cG1vZCkKK3sKKwlBcnJheUZvcmVhY2hBSXRlcmF0b3IgKml0ZXIgPSAo QXJyYXlGb3JlYWNoQUl0ZXJhdG9yICopIHNlbGY7CisKKwkqdHlwaWQgPSBpdGVyLT5yZXN1bHRf dHlwaWQ7CisJKnR5cG1vZCA9IGl0ZXItPnJlc3VsdF90eXBtb2Q7CisKKwlyZXR1cm4gYXJyYXlf aXRlcmF0ZShpdGVyLT5pdCwgdmFsdWUsIGlzbnVsbCk7Cit9CisKKy8qCisgKiBBbiBhcnJheSBG b3JlYWNoQUl0ZXJhdG9yIGNvbnN0cnVjdG9yCisgKi8KK3N0YXRpYyBGb3JlYWNoQUl0ZXJhdG9y ICoKK2NyZWF0ZV9hcnJheV9mb3JlYWNoX2FfaXRlcmF0b3IoRGF0dW0gdmFsdWUsIE9pZCB0eXBp ZCwgaW50MzIgdHlwbW9kLCBpbnQgc2xpY2UsCisJCQkJCQkJCU9pZCBleHBlY3RlZF90eXBpZCwg aW50MzIgZXhwZWN0ZWRfdHlwbW9kKQoreworCUFycmF5Rm9yZWFjaEFJdGVyYXRvciAqaXRlciA9 IHBhbGxvYzAoc2l6ZW9mKEFycmF5Rm9yZWFjaEFJdGVyYXRvcikpOworCUFycmF5VHlwZSAgKmFy cjsKKworCUFzc2VydChPaWRJc1ZhbGlkKGdldF9lbGVtZW50X3R5cGUodHlwaWQpKSk7CisKKwlh cnIgPSBEYXR1bUdldEFycmF5VHlwZVAodmFsdWUpOworCisJLyogU2xpY2UgZGltZW5zaW9uIG11 c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFycmF5IGRpbWVuc2lvbiAqLworCWlmIChzbGlj ZSA8IDAgfHwgc2xpY2UgPiBBUlJfTkRJTShhcnIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfQVJSQVlfU1VCU0NSSVBUX0VSUk9SKSwKKwkJCQkgZXJybXNnKCJzbGlj ZSBkaW1lbnNpb24gKCVkKSBpcyBvdXQgb2YgdGhlIHZhbGlkIHJhbmdlIDAuLiVkIiwKKwkJCQkJ CXNsaWNlLCBBUlJfTkRJTShhcnIpKSkpOworCisJaWYgKE9pZElzVmFsaWQoZXhwZWN0ZWRfdHlw aWQpKQorCXsKKwkJT2lkCQkJdGFyZ2V0X2VsZW1fdHlwaWQ7CisKKwkJLyoKKwkJICogU2FuaXR5 LWNoZWNrIHRoZSBleHBlY3RlZCB0eXBlLiAgV2UgZG9uJ3QgdHJ5IHZlcnkgaGFyZCBoZXJlLCBh bmQKKwkJICogc2hvdWxkIG5vdCBiZSB0b28gcGlja3kgc2luY2UgaXQncyBwb3NzaWJsZSB0aGF0 IGV4ZWNfYXNzaWduX3ZhbHVlIGNhbgorCQkgKiBjb2VyY2UgdmFsdWVzIG9mIGRpZmZlcmVudCB0 eXBlcy4gIEJ1dCBpdCBzZWVtcyB3b3J0aHdoaWxlIHRvIGNvbXBsYWluCisJCSAqIGlmIHRoZSBh cnJheS1uZXNzIG9mIHRoZSBsb29wIHZhcmlhYmxlIGlzIG5vdCByaWdodC4KKwkJICovCisJCXRh cmdldF9lbGVtX3R5cGlkID0gZ2V0X2VsZW1lbnRfdHlwZShleHBlY3RlZF90eXBpZCk7CisKKwkJ aWYgKHNsaWNlID4gMCAmJiB0YXJnZXRfZWxlbV90eXBpZCA9PSBJbnZhbGlkT2lkKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJ CQkJCSBlcnJtc2coImNhbm5vdCB0byBjYXN0IGEgdmFsdWUgb2YgYXJyYXkgdHlwZSB0byBzY2Fs YXIgdHlwZSIpKSk7CisJCWlmIChzbGljZSA9PSAwICYmIHRhcmdldF9lbGVtX3R5cGlkICE9IElu dmFsaWRPaWQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFU WVBFX01JU01BVENIKSwKKwkJCQkJIGVycm1zZygiY2Fubm90IHRvIGNhc3QgYSB2YWx1ZSBvZiBz Y2FsYXIgdHlwZSB0byBhcnJheSB0eXBlIikpKTsKKwl9CisKKwkvKiBJZGVudGlmeSBpdGVyYXRv ciByZXN1bHQgdHlwZSAqLworCWlmIChzbGljZSA+IDApCisJeworCQkvKiBXaGVuIHNsaWNpbmcs IG5vbWluYWwgdHlwZSBvZiByZXN1bHQgaXMgc2FtZSBhcyBhcnJheSB0eXBlICovCisJCWl0ZXIt PnJlc3VsdF90eXBpZCA9IHR5cGlkOworCQlpdGVyLT5yZXN1bHRfdHlwbW9kID0gdHlwbW9kOwor CX0KKwllbHNlCisJeworCQkvKiBXaXRob3V0IHNsaWNpbmcsIHJlc3VsdHMgYXJlIGluZGl2aWR1 YWwgYXJyYXkgZWxlbWVudHMgKi8KKwkJaXRlci0+cmVzdWx0X3R5cGlkID0gQVJSX0VMRU1UWVBF KGFycik7CisJCWl0ZXItPnJlc3VsdF90eXBtb2QgPSB0eXBtb2Q7CisJfQorCisJLyogQ3JlYXRl IGFuIGl0ZXJhdG9yIHRvIHN0ZXAgdGhyb3VnaCB0aGUgYXJyYXkgKi8KKwlpdGVyLT5pdCA9IGFy cmF5X2NyZWF0ZV9pdGVyYXRvcihhcnIsIHNsaWNlLCBOVUxMKTsKKworCWl0ZXItPnB1Yi5pdGVy YXRlID0gYXJyYXlfZm9yZWFjaF9hX2l0ZXJhdGU7CisKKwlyZXR1cm4gKEZvcmVhY2hBSXRlcmF0 b3IgKikgaXRlcjsKK30KIAogLyoKICAqIEZpbmlzaCBwYXJzZSBhbmFseXNpcyBvZiBhIFN1YnNj cmlwdGluZ1JlZiBleHByZXNzaW9uIGZvciBhbiBhcnJheS4KQEAgLTU0NSw3ICs2MzEsOCBAQCBh cnJheV9zdWJzY3JpcHRfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuZXhlY19zZXR1cCA9 IGFycmF5X2V4ZWNfc2V0dXAsCiAJCS5mZXRjaF9zdHJpY3QgPSB0cnVlLAkvKiBmZXRjaCByZXR1 cm5zIE5VTEwgZm9yIE5VTEwgaW5wdXRzICovCiAJCS5mZXRjaF9sZWFrcHJvb2YgPSB0cnVlLAkv KiBmZXRjaCByZXR1cm5zIE5VTEwgZm9yIGJhZCBzdWJzY3JpcHQgKi8KLQkJLnN0b3JlX2xlYWtw cm9vZiA9IGZhbHNlCS8qIC4uLiBidXQgYXNzaWdubWVudCB0aHJvd3MgZXJyb3IgKi8KKwkJLnN0 b3JlX2xlYWtwcm9vZiA9IGZhbHNlLAkvKiAuLi4gYnV0IGFzc2lnbm1lbnQgdGhyb3dzIGVycm9y ICovCisJCS5jcmVhdGVfZm9yZWFjaF9hX2l0ZXJhdG9yID0gY3JlYXRlX2FycmF5X2ZvcmVhY2hf YV9pdGVyYXRvcgogCX07CiAKIAlQR19SRVRVUk5fUE9JTlRFUigmc2Jzcm91dGluZXMpOwpAQCAt NTcyLDcgKzY1OSw4IEBAIHJhd19hcnJheV9zdWJzY3JpcHRfaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQogCQkuZXhlY19zZXR1cCA9IGFycmF5X2V4ZWNfc2V0dXAsCiAJCS5mZXRjaF9zdHJpY3Qg PSB0cnVlLAkvKiBmZXRjaCByZXR1cm5zIE5VTEwgZm9yIE5VTEwgaW5wdXRzICovCiAJCS5mZXRj aF9sZWFrcHJvb2YgPSB0cnVlLAkvKiBmZXRjaCByZXR1cm5zIE5VTEwgZm9yIGJhZCBzdWJzY3Jp cHQgKi8KLQkJLnN0b3JlX2xlYWtwcm9vZiA9IGZhbHNlCS8qIC4uLiBidXQgYXNzaWdubWVudCB0 aHJvd3MgZXJyb3IgKi8KKwkJLnN0b3JlX2xlYWtwcm9vZiA9IGZhbHNlLAkvKiAuLi4gYnV0IGFz c2lnbm1lbnQgdGhyb3dzIGVycm9yICovCisJCS5jcmVhdGVfZm9yZWFjaF9hX2l0ZXJhdG9yID0g Y3JlYXRlX2FycmF5X2ZvcmVhY2hfYV9pdGVyYXRvcgogCX07CiAKIAlQR19SRVRVUk5fUE9JTlRF Uigmc2Jzcm91dGluZXMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25i c3Vicy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25ic3Vicy5jCmluZGV4IGYyNzQ1YjI5 YTNmLi5lNDkyOWIzM2NlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25i c3Vicy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYnN1YnMuYwpAQCAtMjIsNiAr MjIsNyBAQAogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9leHByLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxzL2pz b25mdW5jcy5oIgogCiAKIC8qIFN1YnNjcmlwdGluZ1JlZlN0YXRlLndvcmtzcGFjZSBmb3IganNv bmIgc3Vic2NyaXB0aW5nIGV4ZWN1dGlvbiAqLwpAQCAtMzMsNiArMzQsMTcgQEAgdHlwZWRlZiBz dHJ1Y3QgSnNvbmJTdWJXb3Jrc3BhY2UKIAlEYXR1bQkgICAqaW5kZXg7CQkJLyogU3Vic2NyaXB0 IHZhbHVlcyBpbiBEYXR1bSBmb3JtYXQgKi8KIH0gSnNvbmJTdWJXb3Jrc3BhY2U7CiAKK3R5cGVk ZWYgc3RydWN0Cit7CisJRm9yZWFjaEFJdGVyYXRvciBwdWI7CisJSnNvbmJJdGVyYXRvciAqaXQ7 CisJYm9vbAkJc2tpcF9uZXN0ZWQ7CisJT2lkCQkJZXhwZWN0ZWRfdHlwaWQ7CisJaW50MzIJCWV4 cGVjdGVkX3R5cG1vZDsKKworCU1lbW9yeUNvbnRleHQgY2FjaGVfbWN4dDsKKwl2b2lkCSAgICpj YWNoZTsKK30gSnNvbmJGb3JlYWNoQUl0ZXJhdG9yOwogCiAvKgogICogRmluaXNoIHBhcnNlIGFu YWx5c2lzIG9mIGEgU3Vic2NyaXB0aW5nUmVmIGV4cHJlc3Npb24gZm9yIGEganNvbmIuCkBAIC0z OTQsNiArNDA2LDE4NyBAQCBqc29uYl9leGVjX3NldHVwKGNvbnN0IFN1YnNjcmlwdGluZ1JlZiAq c2JzcmVmLAogCW1ldGhvZHMtPnNic19mZXRjaF9vbGQgPSBqc29uYl9zdWJzY3JpcHRfZmV0Y2hf b2xkOwogfQogCisvKgorICogQ29udmVydCBKc29uYlZhbHVlIHRvIERhdHVtLiBUaGlzIGZ1bmN0 aW9uIGlzIHVzZWQgYnkKKyAqIGdlbmVyaWMgYXJyYXkgaXRlcmF0b3IuIFdoZW4gZXhwZWN0ZWRf dHlwZSBpcyB1bmtub3duCisgKiBvciBpdCBpcyBqc29uIG9yIGpzb25iLCB0aGVuIHRoZXJlIGFy ZSBtaW5pbWFsIHRyYW5zZm9ybWF0aW9ucy4KKyAqIFdoZW4gSnNvblZhbHVlIGlzIG9mIGJhc2lj IHR5cGVzIChzdHJpbmcsIG51bWVyaWMsIGJvb2wpLAorICogdGhlbiB2YWx1ZSBpcyBjb252ZXJ0 ZWQgdG8gbW9zdCBuZWFyIFBvc3RncmVzIG5hdGl2ZSB0eXBlcy4KKyAqIEluIG90aGVyIGNhc2Vz LCB0aGUgZ2VuZXJpYyB0cmFuc2Zvcm1hdGlvbiBqc29uX3BvcHVsYXRlX3R5cGUKKyAqIGlzIHVz ZWQuCisgKgorICogVGhlIHJlYXNvbiB3aHkgZ2VuZXJpYyB0cmFuc2Zvcm1hdGlvbiBpcyBub3Qg dXNlZCBieSBkZWZhdWx0CisgKiBhcmUgZGlmZmVyZW50IGNhc3QgcnVsZXMsIGJlY2F1c2UgaXQg dXNlcyBvbmx5IGltcGxpY2l0IG9yCisgKiBJTyBjYXN0cywgdGhhdCBhcmUgdXN1YWxseSBtb3Jl IHJlc3RyaWN0aXZlLiBUaGUgY2FzdAorICogSlNPTkItPklOVCBpcyBtb3JlIHJlc3RyaWN0aXZl IHRoYW4gY2FzdHMgSlNPTkItPk5VTUVSSUMtPklOVC4KKyAqCisgKiBUaGUgdHlwZSBvZiByZXN1 bHQgaXMgb2YgZXhwZWN0ZWRfdHlwaWQsIGV4cGVjdGVkX3R5cG1vZCBvbmx5CisgKiB3aGVuIGV4 cGVjdGVkX3R5cGlkIGlzIG9mIGNvbXBvc2l0ZSB0eXBlLiBUaGVvcmV0aWNhbGx5IGl0IGNhbgor ICogYmUgY29udmVydGVkIHRvIHRoaXMgdHlwZSBpbiBhbGwgY2FzZXMsIGJ1dCBpdCByZXF1aXJl cyBtb3JlCisgKiBzaWduaWZpY2FudCBjaGFuZ2Ugb2YgcGxwZ3NxbCBjb2RlICh0aGUgY2FzdCBy b3V0aW5lcyBzaG91bGQgYmUKKyAqIG1vdmVkIHRvIGNvcmUpLCBhbmQgYmVjYXVzZSAoaW4gdGhp cyBtb21lbnQpIG9ubHkgb25lIHVzZXIgb2YKKyAqIGdlbmVyaWMgYXJyYXkgaXRlcmF0b3IgaXMg cGxwZ3NxbCBGT1JFQUNIIHN0YXRlbWVudCwgdGhlbiB0aGUKKyAqIGNhc3QgdG8gZXhwZWN0ZWRf dHlwZSBpcyBub3QgZW5mb3JjZWQgaGVyZSAoZm9yIGFsbCBjYXNlcykuCisgKi8KK3N0YXRpYyBE YXR1bQorSnNvbmJWYWx1ZVRvRGF0dW0oSnNvbmJWYWx1ZSAqamJ2LAorCQkJCSAgT2lkICp0eXBp ZCwgaW50MzIgKnR5cG1vZCwgYm9vbCAqaXNudWxsLAorCQkJCSAgT2lkIGV4cGVjdGVkX3R5cGlk LCBpbnQzMiBleHBlY3RlZF90eXBtb2QsCisJCQkJICB2b2lkICoqY2FjaGUsIE1lbW9yeUNvbnRl eHQgbWN4dCkKK3sKKwlEYXR1bQkJcmVzdWx0OworCisJKmlzbnVsbCA9IGZhbHNlOworCSp0eXBt b2QgPSAtMTsKKworCS8qCisJICogVGhlc2UgdHlwZXMgY2FuIGhvbGRzIEpTT04gbnVsbCwgc28g bXVzdCBiZSBwcm9jZXNzZWQKKwkgKiBiZWZvcmUgcHJvY2Vzc2luZyBqYnZOdWxsLiBXZSBkb24n dCB3YW50IHRvIGNvbnZlcnQKKwkgKiBKU09OIG51bGwsIHRvIFNRTCBudWxsLCB3aGVuIHRhcmdl ciBpcyBvZiBKU09OLgorCSAqLworCWlmIChleHBlY3RlZF90eXBpZCA9PSBKU09OQk9JRCB8fCBl eHBlY3RlZF90eXBpZCA9PSBKU09OT0lEKQorCXsKKwkJSnNvbmIJICAgKmpiID0gSnNvbmJWYWx1 ZVRvSnNvbmIoamJ2KTsKKworCQlpZiAoZXhwZWN0ZWRfdHlwaWQgPT0gSlNPTk9JRCkKKwkJewor CQkJY2hhcgkgICAqc3RyOworCisJCQlzdHIgPSBKc29uYlRvQ1N0cmluZyhOVUxMLCAmamItPnJv b3QsIFZBUlNJWkUoamIpKTsKKwkJCXJlc3VsdCA9IFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3Rv X3RleHQoc3RyKSk7CisJCX0KKwkJZWxzZQorCQkJcmVzdWx0ID0gUG9pbnRlckdldERhdHVtKGpi KTsKKworCQkqdHlwaWQgPSBleHBlY3RlZF90eXBpZDsKKwl9CisKKwkvKgorCSAqIEZvciBzcGVj aWFsIGNhc2VzIHdlIGNhbiBza2lwIGNvbnZlcnNpb24gdG8gSnNvbmIKKwkgKiBhbmQgcG9zc2li bHkgSU8gY2FzdC4KKwkgKi8KKwllbHNlIGlmIChqYnYtPnR5cGUgPT0gamJ2TnVsbCkKKwl7CisJ CXJlc3VsdCA9IChEYXR1bSkgMDsKKwkJKmlzbnVsbCA9IHRydWU7CisJCSp0eXBpZCA9IGV4cGVj dGVkX3R5cGlkOworCX0KKwllbHNlIGlmIChqYnYtPnR5cGUgPT0gamJ2U3RyaW5nKQorCXsKKwkJ dGV4dAkgICAqdHh0ID0gY3N0cmluZ190b190ZXh0X3dpdGhfbGVuKGpidi0+dmFsLnN0cmluZy52 YWwsCisJCQkJCQkJCQkJCQkgICBqYnYtPnZhbC5zdHJpbmcubGVuKTsKKworCQlyZXN1bHQgPSBQ b2ludGVyR2V0RGF0dW0odHh0KTsKKwkJKnR5cGlkID0gVEVYVE9JRDsKKwl9CisJZWxzZSBpZiAo amJ2LT50eXBlID09IGpidk51bWVyaWMpCisJeworCQlyZXN1bHQgPSBQb2ludGVyR2V0RGF0dW0o amJ2LT52YWwubnVtZXJpYyk7CisJCSp0eXBpZCA9IE5VTUVSSUNPSUQ7CisJfQorCWVsc2UgaWYg KGpidi0+dHlwZSA9PSBqYnZCb29sKQorCXsKKwkJcmVzdWx0ID0gQm9vbEdldERhdHVtKGpidi0+ dmFsLmJvb2xlYW4pOworCQkqdHlwaWQgPSBCT09MT0lEOworCX0KKworCS8qIGdlbmVyaWMgY29u dmVyc2lvbiAqLworCWVsc2UKKwl7CisJCUpzb25iCSAgICpqYiA9IEpzb25iVmFsdWVUb0pzb25i KGpidik7CisKKwkJcmVzdWx0ID0ganNvbl9wb3B1bGF0ZV90eXBlKFBvaW50ZXJHZXREYXR1bShq YiksIEpTT05CT0lELAorCQkJCQkJCQkJZXhwZWN0ZWRfdHlwaWQsIGV4cGVjdGVkX3R5cG1vZCwK KwkJCQkJCQkJCWNhY2hlLCBtY3h0LAorCQkJCQkJCQkJaXNudWxsLCBmYWxzZSwgTlVMTCk7CisK KwkJKnR5cGlkID0gZXhwZWN0ZWRfdHlwaWQ7CisJCSp0eXBtb2QgPSBleHBlY3RlZF90eXBtb2Q7 CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wKK2pzb25iX2ZvcmVhY2hf YV9pdGVyYXRlKEZvcmVhY2hBSXRlcmF0b3IgKnNlbGYsCisJCQkJCQlEYXR1bSAqdmFsdWUsIGJv b2wgKmlzbnVsbCwKKwkJCQkJCU9pZCAqdHlwaWQsIGludDMyICp0eXBtb2QpCit7CisJSnNvbmJG b3JlYWNoQUl0ZXJhdG9yICppdGVyID0gKEpzb25iRm9yZWFjaEFJdGVyYXRvciAqKSBzZWxmOwor CUpzb25iSXRlcmF0b3JUb2tlbiByOworCUpzb25iVmFsdWUJamJ2OworCisJd2hpbGUgKChyID0g SnNvbmJJdGVyYXRvck5leHQoJml0ZXItPml0LCAmamJ2LCBpdGVyLT5za2lwX25lc3RlZCkpICE9 IFdKQl9ET05FKQorCXsKKwkJaXRlci0+c2tpcF9uZXN0ZWQgPSB0cnVlOworCisJCWlmIChyID09 IFdKQl9FTEVNKQorCQl7CisJCQkqdmFsdWUgPSBKc29uYlZhbHVlVG9EYXR1bSgmamJ2LCB0eXBp ZCwgdHlwbW9kLCBpc251bGwsCisJCQkJCQkJCQkgICBpdGVyLT5leHBlY3RlZF90eXBpZCwgaXRl ci0+ZXhwZWN0ZWRfdHlwbW9kLAorCQkJCQkJCQkJICAgJml0ZXItPmNhY2hlLCBpdGVyLT5jYWNo ZV9tY3h0KTsKKworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9 CisKKy8qCisgKiBDcmVhdGUgZm9yZWFjaCBhcnJheSBpdGVyYXRvciBmb3IganNvbmIgYXJyYXkK KyAqLworc3RhdGljIEZvcmVhY2hBSXRlcmF0b3IgKgorY3JlYXRlX2pzb25iX2ZvcmVhY2hfYV9p dGVyYXRvcihEYXR1bSB2YWx1ZSwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJCQkJCWlu dCBzbGljZSwgT2lkIGV4cGVjdGVkX3R5cGlkLCBpbnQzMiBleHBlY3RlZF90eXBtb2QpCit7CisJ SnNvbmJGb3JlYWNoQUl0ZXJhdG9yICppdGVyID0gcGFsbG9jMChzaXplb2YoSnNvbmJGb3JlYWNo QUl0ZXJhdG9yKSk7CisJSnNvbmIJICAgKmpiOworCisJQXNzZXJ0KHR5cGlkID09IEpTT05CT0lE KTsKKworCWlmIChzbGljZSA+IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coImpzb25iIGFycmF5IGl0 ZXJhdG9yIGRvZXNuJ3Qgc3VwcG9ydCBzbGljaW5nIikpKTsKKworCWpiID0gRGF0dW1HZXRKc29u YlAodmFsdWUpOworCisJLyoKKwkgKiBKc29uYiBpdGVyYXRvciBpcyBkZXNpZ25lZCBsaWtlIGpz b25iX2FycmF5X2VsZW1lbnQuIElucHV0IHZhbHVlCisJICogbXVzdCBiZSBqc29uIGFycmF5Lgor CSAqLworCWlmIChKQl9ST09UX0lTX1NDQUxBUihqYikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygi Y2Fubm90IGl0ZXJhdGUgb3ZlciBhIHNjYWxhciB2YWx1ZS4iKSkpOworCWVsc2UgaWYgKEpCX1JP T1RfSVNfT0JKRUNUKGpiKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgaXRlcmF0ZSBv dmVyIGFuIG9iamVjdCB2YWx1ZS4iKSkpOworCisJQXNzZXJ0KEpCX1JPT1RfSVNfQVJSQVkoamIp KTsKKworCWl0ZXItPml0ID0gSnNvbmJJdGVyYXRvckluaXQoJmpiLT5yb290KTsKKworCWlmIChP aWRJc1ZhbGlkKGV4cGVjdGVkX3R5cGlkKSkKKwl7CisJCWl0ZXItPmV4cGVjdGVkX3R5cGlkID0g ZXhwZWN0ZWRfdHlwaWQ7CisJCWl0ZXItPmV4cGVjdGVkX3R5cG1vZCA9IGV4cGVjdGVkX3R5cG1v ZDsKKwl9CisJZWxzZQorCXsKKwkJaXRlci0+ZXhwZWN0ZWRfdHlwaWQgPSBKU09OQk9JRDsKKwkJ aXRlci0+ZXhwZWN0ZWRfdHlwbW9kID0gLTE7CisJfQorCisJaXRlci0+Y2FjaGVfbWN4dCA9IEN1 cnJlbnRNZW1vcnlDb250ZXh0OworCisJaXRlci0+cHViLml0ZXJhdGUgPSBqc29uYl9mb3JlYWNo X2FfaXRlcmF0ZTsKKworCXJldHVybiAoRm9yZWFjaEFJdGVyYXRvciAqKSBpdGVyOworfQorCiAv KgogICoganNvbmJfc3Vic2NyaXB0X2hhbmRsZXIKICAqCQlTdWJzY3JpcHRpbmcgaGFuZGxlciBm b3IganNvbmIuCkBAIC00MDcsNyArNjAwLDggQEAganNvbmJfc3Vic2NyaXB0X2hhbmRsZXIoUEdf RlVOQ1RJT05fQVJHUykKIAkJLmV4ZWNfc2V0dXAgPSBqc29uYl9leGVjX3NldHVwLAogCQkuZmV0 Y2hfc3RyaWN0ID0gdHJ1ZSwJLyogZmV0Y2ggcmV0dXJucyBOVUxMIGZvciBOVUxMIGlucHV0cyAq LwogCQkuZmV0Y2hfbGVha3Byb29mID0gdHJ1ZSwJLyogZmV0Y2ggcmV0dXJucyBOVUxMIGZvciBi YWQgc3Vic2NyaXB0ICovCi0JCS5zdG9yZV9sZWFrcHJvb2YgPSBmYWxzZQkvKiAuLi4gYnV0IGFz c2lnbm1lbnQgdGhyb3dzIGVycm9yICovCisJCS5zdG9yZV9sZWFrcHJvb2YgPSBmYWxzZSwJLyog Li4uIGJ1dCBhc3NpZ25tZW50IHRocm93cyBlcnJvciAqLworCQkuY3JlYXRlX2ZvcmVhY2hfYV9p dGVyYXRvciA9IGNyZWF0ZV9qc29uYl9mb3JlYWNoX2FfaXRlcmF0b3IKIAl9OwogCiAJUEdfUkVU VVJOX1BPSU5URVIoJnNic3JvdXRpbmVzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L3N1YnNjcmlwdGluZy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvc3Vic2NyaXB0aW5nLmgKaW5kZXgg MzAxZjIxZGFjMmYuLjRkZDIyM2QxZWY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9z dWJzY3JpcHRpbmcuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9zdWJzY3JpcHRpbmcuaApAQCAt MTU0LDYgKzE1NCw0MCBAQCB0eXBlZGVmIHZvaWQgKCpTdWJzY3JpcHRFeGVjU2V0dXApIChjb25z dCBTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwKIAkJCQkJCQkJCVN1YnNjcmlwdGluZ1JlZlN0YXRl ICpzYnNyZWZzdGF0ZSwKIAkJCQkJCQkJCVN1YnNjcmlwdEV4ZWNTdGVwcyAqbWV0aG9kcyk7CiAK K3R5cGVkZWYgc3RydWN0IF9Gb3JlYWNoQUl0ZXJhdG9yIEZvcmVhY2hBSXRlcmF0b3I7CisKKy8q CisgKiBGb3JlYWNoQUlpdGVyYXRvciBhbGxvd3MgYW4gaXRlcmF0aW9uIG92ZXIgYSBjb250YWlu ZXIgb2JqZWN0CisgKiBsaWtlIGFuIGFycmF5IG9mIGpzb25iJ3MgYXJyYXkuIENvbnRhaW5lcnMg Y2FuIGhvbGRzIGEgdmFsdWVzIG9mCisgKiBkaWZmZXJlbnQgdHlwZXMsIHNvIGluIGFueSBpdGVy YXRpb24sIHRoZSByZXR1cm5lZCB2YWx1ZSBjYW4gYmUKKyAqIG9mIGFueSBkaWZmZXJlbnQgdHlw ZS4gQ29udGFpbmVycyBjYW4gaG9sZHMgY29tcG9zaXRlIHR5cGVzIGluIG93bgorICogYmluYXJ5 IGZvcm1hdHMgKGpzb25iIG9iamVjdCkuIFdlIGNhbm5vdCB0byBkbyBzYWZlIGNvbnZlcnNpb24g dG8KKyAqIFBvc3RncmVzJ3MgZ2VuZXJpYyBjb21wb3NpdGUgdHlwZSB3aXRob3V0IGV4dHJhIGtu b3dsZWRnZSwKKyAqIHNvIGEgdXNlciBjYW4gc3BlY2lmeSB0aGUgZXhwZWN0ZWQgdHlwZSAod2hl biBpdCBpcyBrbm93bikuCisgKiBFeHBlY3RlZCB0eXBlIGNhbiBiZSB1bnNwZWNpZmllZCAoSW52 YWxpZE9pZCksIGJ1dCB3aGVuCisgKiBpdCBpcyBzcGVjaWZpZWQsIHRoZW4gaXQgY2FuIGJlIHVz ZWQgZm9yIHNvbWUgb3RoZXIgc3BlY2lhbCBjYXNlcworICogbGlrZSB0cmFuc2Zvcm1hdGlvbiBv ZiBqc29uYiBqYnZOdWxsIHRvIE5VTEwgb3IgdG8gc3RyaW5nICJudWxsIi4KKyAqIEFsdGhvdWdo IHRoZSBleHBlY3RlZCB0eXBlIGlzIHNwZWNpZmllZCwgdGhlIGl0ZXJhdG9yIGRvZXNuJ3QgZW5m b3JjZQorICogdGhlIGNvbnZlcnNpb24gdG8gdGhpcyB0eXBlIChiZWNhdXNlIGNvbnZlcnNpb24g cnVsZXMgY2FuIGJlIGRpZmZlcmVudAorICogaW4gcG9zc2libGUgZW52aXJvbm1lbnRzIChTUUws IFBML3BnU1FMKS4KKyAqLworc3RydWN0IF9Gb3JlYWNoQUl0ZXJhdG9yCit7CisJYm9vbAkJKCpp dGVyYXRlKSAoRm9yZWFjaEFJdGVyYXRvciAqc2VsZiwKKwkJCQkJCQlEYXR1bSAqdmFsdWUsCisJ CQkJCQkJYm9vbCAqaXNudWxsLAorCQkJCQkJCU9pZCAqdHlwaWQsCisJCQkJCQkJaW50MzIgKnR5 cG1vZCk7CisJLyogUHJpdmF0ZSBmaWVsZHMgbWlnaHQgYXBwZWFyIGJleW9uZCB0aGlzIHBvaW50 Li4uICovCit9OworCit0eXBlZGVmIEZvcmVhY2hBSXRlcmF0b3IgKiAoKkNyZWF0ZUZvcmVhY2hB SXRlcmF0b3IpIChEYXR1bSB2YWx1ZSwKKwkJCQkJCQkJCQkJCQkgIE9pZCB0eXBpZCwKKwkJCQkJ CQkJCQkJCQkgIGludDMyIHR5cG1vZCwKKwkJCQkJCQkJCQkJCQkgIGludCBzbGljZSwKKwkJCQkJ CQkJCQkJCQkgIE9pZCBleHBlY3RlZF90eXBpZCwKKwkJCQkJCQkJCQkJCQkgIGludDMyIGV4cGVj dGVkX3R5cG1vZCk7CisKIC8qIFN0cnVjdCByZXR1cm5lZCBieSB0aGUgU1FMLXZpc2libGUgc3Vi c2NyaXB0IGhhbmRsZXIgZnVuY3Rpb24gKi8KIHR5cGVkZWYgc3RydWN0IFN1YnNjcmlwdFJvdXRp bmVzCiB7CkBAIC0xNjMsNiArMTk3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vic2NyaXB0Um91dGlu ZXMKIAlib29sCQlmZXRjaF9sZWFrcHJvb2Y7CS8qIGlzIGZldGNoIFN1YnNjcmlwdGluZ1JlZiBs ZWFrcHJvb2Y/ICovCiAJYm9vbAkJc3RvcmVfbGVha3Byb29mOwkvKiBpcyBhc3NpZ25tZW50IFN1 YnNjcmlwdGluZ1JlZgogCQkJCQkJCQkJICogbGVha3Byb29mPyAqLworCisJLyogcmV0dXJucyBp dGVyYXRvciB1c2VkIGJ5IFBML3BnU1FMIEZPUkVBQ0ggc3RhdGVtZW50ICovCisJQ3JlYXRlRm9y ZWFjaEFJdGVyYXRvciBjcmVhdGVfZm9yZWFjaF9hX2l0ZXJhdG9yOwogfSBTdWJzY3JpcHRSb3V0 aW5lczsKIAogI2VuZGlmCQkJCQkJCS8qIFNVQlNDUklQVElOR19IICovCmRpZmYgLS1naXQgYS9z cmMvcGwvcGxwZ3NxbC9zcmMvTWFrZWZpbGUgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvTWFrZWZpbGUK aW5kZXggNjNjYjk2ZmFlM2UuLjViZDBjZjMxZGZjIDEwMDY0NAotLS0gYS9zcmMvcGwvcGxwZ3Nx bC9zcmMvTWFrZWZpbGUKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL01ha2VmaWxlCkBAIC0zNSw3 ICszNSw3IEBAIFJFR1JFU1NfT1BUUyA9IC0tZGJuYW1lPSQoUExfVEVTVERCKQogUkVHUkVTUyA9 IHBscGdzcWxfYXJyYXkgcGxwZ3NxbF9jYWNoZSBwbHBnc3FsX2NhbGwgcGxwZ3NxbF9jb250cm9s IFwKIAlwbHBnc3FsX2NvcHkgcGxwZ3NxbF9kb21haW4gcGxwZ3NxbF9taXNjIFwKIAlwbHBnc3Fs X3JlY29yZCBwbHBnc3FsX3NpbXBsZSBwbHBnc3FsX3RyYW5zYWN0aW9uIFwKLQlwbHBnc3FsX3Ry YXAgcGxwZ3NxbF90cmlnZ2VyIHBscGdzcWxfdmFycHJvcHMKKwlwbHBnc3FsX3RyYXAgcGxwZ3Nx bF90cmlnZ2VyIHBscGdzcWxfdmFycHJvcHMgcGxwZ3NxbF9mb3JlYWNoCiAKICMgd2hlcmUgdG8g ZmluZCBnZW5fa2V5d29yZGxpc3QucGwgYW5kIHN1YnNpZGlhcnkgZmlsZXMKIFRPT0xTRElSID0g JCh0b3Bfc3JjZGlyKS9zcmMvdG9vbHMKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9l eHBlY3RlZC9wbHBnc3FsX2ZvcmVhY2gub3V0IGIvc3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVk L3BscGdzcWxfZm9yZWFjaC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjc4N2Q3Njk4YmQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL2V4 cGVjdGVkL3BscGdzcWxfZm9yZWFjaC5vdXQKQEAgLTAsMCArMSwyOTUgQEAKKy0tIGlucHV0IG11 c3QgYmUgYSBKU09OIGFycmF5CitkbyAkJAorZGVjbGFyZSB4IG51bWVyaWM7CitiZWdpbgorICBm b3JlYWNoIHggaW4gYXJyYXkgTlVMTDo6anNvbmIgLS0gZmFpbAorICBsb29wCisgICAgcmFpc2Ug bm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK0VSUk9SOiAgRk9SRUFDSCBl eHByZXNzaW9uIG11c3Qgbm90IGJlIG51bGwKK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBp bmxpbmVfY29kZV9ibG9jayBsaW5lIDQgYXQgRk9SRUFDSCBvdmVyIGFycmF5CitkbyAkJAorZGVj bGFyZSB4IG51bWVyaWM7CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkganNvbmIgJzEwJyAt LSBmYWlsCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2Vu ZDsKKyQkOworRVJST1I6ICBjYW5ub3QgaXRlcmF0ZSBvdmVyIGEgc2NhbGFyIHZhbHVlLgorQ09O VEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgNCBhdCBGT1JF QUNIIG92ZXIgYXJyYXkKK2RvICQkCitkZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2luCisgIGZvcmVh Y2ggeCBpbiBhcnJheSBqc29uYiAne30nIC0tIGZhaWwKKyAgbG9vcAorICAgIHJhaXNlIG5vdGlj ZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitFUlJPUjogIGNhbm5vdCBpdGVyYXRl IG92ZXIgYW4gb2JqZWN0IHZhbHVlLgorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGlubGlu ZV9jb2RlX2Jsb2NrIGxpbmUgNCBhdCBGT1JFQUNIIG92ZXIgYXJyYXkKKy0tIG51bWVyaWMgdG8g bnVtZXJpYworZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOworYmVnaW4KKyAgZm9yZWFjaCB4IGlu IGFycmF5IGpzb25iICdbMTAsMjAsMzAsMy4xNCwgbnVsbF0nCisgIGxvb3AKKyAgICByYWlzZSBu b3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgMTAKK05PVElD RTogIDIwCitOT1RJQ0U6ICAzMAorTk9USUNFOiAgMy4xNAorTk9USUNFOiAgPE5VTEw+CistLSBu dW1lcmljIHRvIGludCBieSBjYXN0CitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZv cmVhY2ggeCBpbiBhcnJheSBqc29uYiAnWzEwLDIwLDMwLDMuMTQsIG51bGxdJworICBsb29wCisg ICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTog IDEwCitOT1RJQ0U6ICAyMAorTk9USUNFOiAgMzAKK05PVElDRTogIDMKK05PVElDRTogIDxOVUxM PgorLS0gdGVzdCBvZiBGT1VORCB2YXJpYWJsZQorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdp bgorICBmb3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1sxMF0nCisgIGxvb3AKKyAgICByYWlzZSBu b3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKKyAgcmFpc2Ugbm90aWNlICdGT1VORDogJScsIGZv dW5kOworZW5kOworJCQ7CitOT1RJQ0U6ICAxMAorTk9USUNFOiAgRk9VTkQ6IHQKKy0tIHRlc3Qg b2YgRk9VTkQgdmFyaWFibGUKK2RvICQkCitkZWNsYXJlIHggaW50OworYmVnaW4KKyAgZm9yZWFj aCB4IGluIGFycmF5IGpzb25iICdbXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7 CisgIGVuZCBsb29wOworICByYWlzZSBub3RpY2UgJ0ZPVU5EOiAlJywgZm91bmQ7CitlbmQ7Cisk JDsKK05PVElDRTogIEZPVU5EOiBmCistLSBjb252ZXJzaW9uICIzLjE0IiB0byBpbnQgc2hvdWxk IHRvIGZhaWwgZHVlIElPIGNhc3QKK2RvICQkCitkZWNsYXJlIHggaW50OworYmVnaW4KKyAgZm9y ZWFjaCB4IGluIGFycmF5IGpzb25iICdbIjEwIiwyMCwzMCwiMy4xNCJdJworICBsb29wCisgICAg cmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEw CitOT1RJQ0U6ICAyMAorTk9USUNFOiAgMzAKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXgg Zm9yIHR5cGUgaW50ZWdlcjogIjMuMTQiCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gaW5s aW5lX2NvZGVfYmxvY2sgbGluZSA0IGF0IEZPUkVBQ0ggb3ZlciBhcnJheQorZG8gJCQKK2RlY2xh cmUgeCBib29sZWFuOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25iICdbdHJ1ZSwg ZmFsc2VdJworICBsb29wCisgIGlmIHggdGhlbgorICAgIHJhaXNlIG5vdGljZSAndHJ1ZSc7Cisg IGVsc2UKKyAgICByYWlzZSBub3RpY2UgJ2ZhbHNlJzsKKyAgZW5kIGlmOworICBlbmQgbG9vcDsK K2VuZDsKKyQkOworTk9USUNFOiAgdHJ1ZQorTk9USUNFOiAgZmFsc2UKKy0tIGpzb25iIHRvIGpz b25iCitkbyAkJAorZGVjbGFyZSB4IGpzb25iOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGFycmF5 IGpzb25iICdbMTAsMjAsMzAsMy4xNCwgbnVsbCwgIkhpIl0nCisgIGxvb3AKKyAgICByYWlzZSBu b3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgMTAKK05PVElD RTogIDIwCitOT1RJQ0U6ICAzMAorTk9USUNFOiAgMy4xNAorTk9USUNFOiAgbnVsbAorTk9USUNF OiAgIkhpIgorLS0ganNvbmIgdG8ganNvbgorZG8gJCQKK2RlY2xhcmUgeCBqc29uOworYmVnaW4K KyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25iICdbMTAsMjAsMzAsMy4xNCwgbnVsbCwgIkhpIl0n CisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQk OworTk9USUNFOiAgMTAKK05PVElDRTogIDIwCitOT1RJQ0U6ICAzMAorTk9USUNFOiAgMy4xNAor Tk9USUNFOiAgbnVsbAorTk9USUNFOiAgIkhpIgorLS0gaXRlcmF0aW9uIG92ZXIgY29tcG9zaXRl cworZG8gJCQKK2RlY2xhcmUgeCBpbnQ7IHkgbnVtZXJpYzsgeiB2YXJjaGFyOworYmVnaW4KKyAg Zm9yZWFjaCB4LCB5LCB6IGluIGFycmF5IGpzb25iICdbe30sIHsieiI6IkhpIn0sIHsieSI6IDMu MTR9LCB7InoiOiJIaSIsICJ4IjoxMCwgInkiOjMuMTR9XScKKyAgbG9vcAorICAgIHJhaXNlIG5v dGljZSAneDogJSwgeTogJSwgejogJScsIHgsIHksIHo7CisgIGVuZCBsb29wOworZW5kOworJCQ7 CitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDxOVUxMPiwgejogPE5VTEw+CitOT1RJQ0U6ICB4OiA8 TlVMTD4sIHk6IDxOVUxMPiwgejogSGkKK05PVElDRTogIHg6IDxOVUxMPiwgeTogMy4xNCwgejog PE5VTEw+CitOT1RJQ0U6ICB4OiAxMCwgeTogMy4xNCwgejogSGkKK2NyZWF0ZSB0eXBlIHQzIGFz ICh4IGludCwgeSBudW1lcmljLCB6IHZhcmNoYXIpOworZG8gJCQKK2RlY2xhcmUgYyB0MzsKK2Jl Z2luCisgIGZvcmVhY2ggYyBpbiBhcnJheSBqc29uYiAnW3t9LCB7InoiOiJIaSJ9LCB7InkiOiAz LjE0fSwgeyJ6IjoiSGkiLCAieCI6MTAsICJ5IjozLjE0fV0nCisgIGxvb3AKKyAgICByYWlzZSBu b3RpY2UgJ3g6ICUsIHk6ICUsIHo6ICUnLCBjLngsIGMueSwgYy56OworICBlbmQgbG9vcDsKK2Vu ZDsKKyQkOworTk9USUNFOiAgeDogPE5VTEw+LCB5OiA8TlVMTD4sIHo6IDxOVUxMPgorTk9USUNF OiAgeDogPE5VTEw+LCB5OiA8TlVMTD4sIHo6IEhpCitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDMu MTQsIHo6IDxOVUxMPgorTk9USUNFOiAgeDogMTAsIHk6IDMuMTQsIHo6IEhpCitkbyAkJAorZGVj bGFyZSBjIHQzOworYmVnaW4KKyAgZm9yZWFjaCBjLngsIGMueSwgYy56IGluIGFycmF5IGpzb25i ICdbe30sIHsieiI6IkhpIn0sIHsieSI6IDMuMTR9LCB7InoiOiJIaSIsICJ4IjoxMCwgInkiOjMu MTR9XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAneDogJSwgeTogJSwgejogJScsIGMueCwg Yy55LCBjLno7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6 IDxOVUxMPiwgejogPE5VTEw+CitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDxOVUxMPiwgejogSGkK K05PVElDRTogIHg6IDxOVUxMPiwgeTogMy4xNCwgejogPE5VTEw+CitOT1RJQ0U6ICB4OiAxMCwg eTogMy4xNCwgejogSGkKK2Ryb3AgdHlwZSB0MzsKKy0tIHRhcmdldCBjYW4gYmUgYSBhcnJheQor ZG8gJCQKK2RlY2xhcmUgeCBpbnRbXTsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBhcnJheSBqc29u YiAnW1sxLDIsM10sWzQsNSw2XV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJSAlJywg eFsxXSwgeFsyXSwgeFszXTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEgMiAz CitOT1RJQ0U6ICA0IDUgNgorZG8gJCQKK2RlY2xhcmUgeCB2YXJjaGFyW107CitiZWdpbgorICBm b3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1tbIkhpIiwiSGVsbG8iXSxbIkhlbGxvIiwiSGkiXV0n CisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJScsIHhbMV0sIHhbMl07CisgIGVuZCBsb29w OworZW5kOworJCQ7CitOT1RJQ0U6ICBIaSBIZWxsbworTk9USUNFOiAgSGVsbG8gSGkKK2RvICQk CitkZWNsYXJlIHggdmFyY2hhcltdOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25i ICdbWyJIaSIsIkhlbGxvIl0sWyJIZWxsbyIsIkhpIl1dJworICBsb29wCisgICAgcmFpc2Ugbm90 aWNlICclICUnLCB4WzFdLCB4WzJdOworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAg SGkgSGVsbG8KK05PVElDRTogIEhlbGxvIEhpCitkbyAkJAorZGVjbGFyZSB4IGludFtdOyB5IHZh cmNoYXI7CitiZWdpbgorICBmb3JlYWNoIHgsIHkgaW4gYXJyYXkganNvbmIgJ1t7IngiOlsxLDIs M10sICJ5IjoiSGkifSwgeyJ4IjpbNCw1LDZdLCAieSI6IkhpIn1dJworICBsb29wCisgICAgcmFp c2Ugbm90aWNlICclICUgJSwgeTogJScsIHhbMV0sIHhbMl0sIHhbM10sIHk7CisgIGVuZCBsb29w OworZW5kOworJCQ7CitOT1RJQ0U6ICAxIDIgMywgeTogSGkKK05PVElDRTogIDQgNSA2LCB5OiBI aQorY3JlYXRlIHR5cGUgdDIgYXMgKHggaW50W10sIHkgdmFyY2hhcik7CitkbyAkJAorZGVjbGFy ZSBjIHQyOworYmVnaW4KKyAgZm9yZWFjaCBjIGluIGFycmF5IGpzb25iICdbeyJ4IjpbMSwyLDNd LCAieSI6IkhpIn0sIHsieCI6WzQsNSw2XSwgInkiOiJIaSJ9XScKKyAgbG9vcAorICAgIHJhaXNl IG5vdGljZSAnJSAlICUsIHk6ICUnLCBjLnhbMV0sIGMueFsyXSwgYy54WzNdLCBjLnk7CisgIGVu ZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAxIDIgMywgeTogSGkKK05PVElDRTogIDQgNSA2 LCB5OiBIaQorZHJvcCB0eXBlIHQyOworLS0gRVhJVCBhbmQgQ09OVElOVUUgY2FuIGJlIHRyaWdn ZXJlZCBieSBMT09QX1JDX1BST0NFU1NJTkcKK2RvICQkCitkZWNsYXJlIHggaW50OworYmVnaW4K KyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25iICAnWzEsMiwzLDQsNV0nCisgIGxvb3AKKyAgICBl eGl0IHdoZW4geCA9IDM7CisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7Citl bmQ7CiskJDsKK05PVElDRTogIDEKK05PVElDRTogIDIKK2RvICQkCitkZWNsYXJlIHggaW50Owor YmVnaW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25iICdbMSwyLDMsNCw1XScKKyAgbG9vcAor ICAgIGNvbnRpbnVlIHdoZW4geCAlIDIgPSAwOworICAgIHJhaXNlIG5vdGljZSAnJScsIHg7Cisg IGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAxCitOT1RJQ0U6ICAzCitOT1RJQ0U6ICA1 CistLSBWYXJpYWJsZSBpbnN0ZWFkIG9mIHN0cmluZworRE8gJCQKK2RlY2xhcmUKKyAgeCBpbnQ7 CisgIGFyciBqc29uYjsKK2JlZ2luCisgIHNlbGVjdCBqc29uYl9hZ2coaSkgaW50byBhcnIKKyAg ICBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDMpIGcoaSk7CisKKyAgZm9yZWFjaCB4IGluIGFycmF5 IGFycgorICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7 CiskJDsKK05PVElDRTogIDEKK05PVElDRTogIDIKK05PVElDRTogIDMKZGlmZiAtLWdpdCBhL3Ny Yy9wbC9wbHBnc3FsL3NyYy9tZXNvbi5idWlsZCBiL3NyYy9wbC9wbHBnc3FsL3NyYy9tZXNvbi5i dWlsZAppbmRleCA2ZmYyNzAwNmNmYy4uNjA5ZWVkN2EyOGQgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9w bHBnc3FsL3NyYy9tZXNvbi5idWlsZAorKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvbWVzb24uYnVp bGQKQEAgLTg4LDYgKzg4LDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3BscGdzcWxfdHJhcCcsCiAg ICAgICAncGxwZ3NxbF90cmlnZ2VyJywKICAgICAgICdwbHBnc3FsX3ZhcnByb3BzJywKKyAgICAg ICdwbHBnc3FsX2ZvcmVhY2gnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvcGwv cGxwZ3NxbC9zcmMvcGxfZXhlYy5jIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYwppbmRl eCA2NWIwZmQwNzkwZi4uMTZiYjE1YzIyMDcgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3FsL3Ny Yy9wbF9leGVjLmMKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYwpAQCAtMjksNiAr MjksNyBAQAogI2luY2x1ZGUgIm1iL3N0cmluZ2luZm9fbWIuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9zdWJz Y3JpcHRpbmcuaCIKICNpbmNsdWRlICJub2Rlcy9zdXBwb3J0bm9kZXMuaCIKICNpbmNsdWRlICJv cHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvZXJjZS5oIgpA QCAtMzAyNiw0MCArMzAyNyw1MSBAQCBleGVjX3N0bXRfZm9yYyhQTHBnU1FMX2V4ZWNzdGF0ZSAq ZXN0YXRlLCBQTHBnU1FMX3N0bXRfZm9yYyAqc3RtdCkKIAlyZXR1cm4gcmM7CiB9CiAKLQogLyog LS0tLS0tLS0tLQotICogZXhlY19zdG10X2ZvcmVhY2hfYQkJCUxvb3Agb3ZlciBlbGVtZW50cyBv ciBzbGljZXMgb2YgYW4gYXJyYXkKLSAqCi0gKiBXaGVuIGxvb3Bpbmcgb3ZlciBlbGVtZW50cywg dGhlIGxvb3AgdmFyaWFibGUgaXMgdGhlIHNhbWUgdHlwZSB0aGF0IHRoZQotICogYXJyYXkgc3Rv cmVzIChlZzogaW50ZWdlciksIHdoZW4gbG9vcGluZyB0aHJvdWdoIHNsaWNlcywgdGhlIGxvb3Ag dmFyaWFibGUKLSAqIGlzIGFuIGFycmF5IG9mIHNpemUgYW5kIGRpbWVuc2lvbnMgdG8gbWF0Y2gg dGhlIHNpemUgb2YgdGhlIHNsaWNlLgotICogLS0tLS0tLS0tLQorICogZXhlY19zdG10X2ZvcmVh Y2hfYQkJCUxvb3Agb3ZlciBlbGVtZW50cyBpbiBhbiBhcnJheSBvciBqc29uYiBhcnJheQorICAq IC0tLS0tLS0tLS0KICAqLwogc3RhdGljIGludAogZXhlY19zdG10X2ZvcmVhY2hfYShQTHBnU1FM X2V4ZWNzdGF0ZSAqZXN0YXRlLCBQTHBnU1FMX3N0bXRfZm9yZWFjaF9hICpzdG10KQogewotCUFy cmF5VHlwZSAgKmFycjsKLQlPaWQJCQlhcnJ0eXBlOwotCWludDMyCQlhcnJ0eXBtb2Q7Ci0JUExw Z1NRTF9kYXR1bSAqbG9vcF92YXI7Ci0JT2lkCQkJbG9vcF92YXJfZWxlbV90eXBlOwotCWJvb2wJ CWZvdW5kID0gZmFsc2U7CisJRGF0dW0JCWV4cHI7CisJT2lkCQkJZXhwcl90eXBpZDsKKwlpbnQz MgkJZXhwcl90eXBtb2Q7CisJaW50MTYJCWV4cHJfdHlwbGVuOworCWJvb2wJCWV4cHJfdHlwYnl2 YWw7CisJYm9vbAkJaXNudWxsOworCVBMcGdTUUxfZGF0dW0gKnRhcmdldF92YXI7CisJT2lkCQkJ dGFyZ2V0X3R5cGlkOworCWludDMyCQl0YXJnZXRfdHlwbW9kOworCU9pZAkJCXRhcmdldF9jb2xs YXRpb247CisJRGF0dW0JCXZhbHVlOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CiAJ aW50CQkJcmMgPSBQTFBHU1FMX1JDX09LOworCWNvbnN0IHN0cnVjdCBTdWJzY3JpcHRSb3V0aW5l cyAqc2Jyb3V0aW5lczsKKwlGb3JlYWNoQUl0ZXJhdG9yICppdGVyYXRvcjsKIAlNZW1vcnlDb250 ZXh0IHN0bXRfbWNvbnRleHQ7CisJTWVtb3J5Q29udGV4dCB0bXBfY3h0OwogCU1lbW9yeUNvbnRl eHQgb2xkY29udGV4dDsKLQlBcnJheUl0ZXJhdG9yIGFycmF5X2l0ZXJhdG9yOwotCU9pZAkJCWl0 ZXJhdG9yX3Jlc3VsdF90eXBlOwotCWludDMyCQlpdGVyYXRvcl9yZXN1bHRfdHlwbW9kOwotCURh dHVtCQl2YWx1ZTsKLQlib29sCQlpc251bGw7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKIAotCS8q IGdldCB0aGUgdmFsdWUgb2YgdGhlIGFycmF5IGV4cHJlc3Npb24gKi8KLQl2YWx1ZSA9IGV4ZWNf ZXZhbF9leHByKGVzdGF0ZSwgc3RtdC0+ZXhwciwgJmlzbnVsbCwgJmFycnR5cGUsICZhcnJ0eXBt b2QpOworCS8qIGdldCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gKi8KKwlleHByID0gZXhl Y19ldmFsX2V4cHIoZXN0YXRlLCBzdG10LT5leHByLCAmaXNudWxsLAorCQkJCQkJICAmZXhwcl90 eXBpZCwgJmV4cHJfdHlwbW9kKTsKIAlpZiAoaXNudWxsKQogCQllcmVwb3J0KEVSUk9SLAogCQkJ CShlcnJjb2RlKEVSUkNPREVfTlVMTF9WQUxVRV9OT1RfQUxMT1dFRCksCiAJCQkJIGVycm1zZygi Rk9SRUFDSCBleHByZXNzaW9uIG11c3Qgbm90IGJlIG51bGwiKSkpOwogCisJc2Jyb3V0aW5lcyA9 IGdldFN1YnNjcmlwdGluZ1JvdXRpbmVzKGV4cHJfdHlwaWQsIE5VTEwpOworCWlmICghc2Jyb3V0 aW5lcykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01J U01BVENIKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgaXRlcmF0ZSBvdmVyIHR5cGUgJXMgYmVjYXVz ZSBpdCBkb2VzIG5vdCBzdXBwb3J0IHN1YnNjcmlwdGluZyIsCisJCQkJCQlmb3JtYXRfdHlwZV9i ZShleHByX3R5cGlkKSkpKTsKKworCUFzc2VydChzYnJvdXRpbmVzLT5jcmVhdGVfZm9yZWFjaF9h X2l0ZXJhdG9yKTsKKwogCS8qCiAJICogRG8gYXMgbXVjaCBhcyBwb3NzaWJsZSBvZiB0aGUgY29k ZSBiZWxvdyBpbiBzdG10X21jb250ZXh0LCB0byBhdm9pZCBhbnkKIAkgKiBsZWFrcyBmcm9tIGNh bGxlZCBzdWJyb3V0aW5lcy4gIFdlIG5lZWQgYSBwcml2YXRlIHN0bXRfbWNvbnRleHQgc2luY2UK QEAgLTMwNjksNzkgKzMwODEsMzYgQEAgZXhlY19zdG10X2ZvcmVhY2hfYShQTHBnU1FMX2V4ZWNz dGF0ZSAqZXN0YXRlLCBQTHBnU1FMX3N0bXRfZm9yZWFjaF9hICpzdG10KQogCXB1c2hfc3RtdF9t Y29udGV4dChlc3RhdGUpOwogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3Rt dF9tY29udGV4dCk7CiAKLQkvKiBjaGVjayB0aGUgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbiAtIG11 c3QgYmUgYW4gYXJyYXkgKi8KLQlpZiAoIU9pZElzVmFsaWQoZ2V0X2VsZW1lbnRfdHlwZShhcnJ0 eXBlKSkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9N SVNNQVRDSCksCi0JCQkJIGVycm1zZygiRk9SRUFDSCBleHByZXNzaW9uIG11c3QgeWllbGQgYW4g YXJyYXksIG5vdCB0eXBlICVzIiwKLQkJCQkJCWZvcm1hdF90eXBlX2JlKGFycnR5cGUpKSkpOwor CS8qIFNldCB1cCB0aGUgdGFyZ2V0IChsb29wKSB2YXJpYWJsZSAqLworCXRhcmdldF92YXIgPSBl c3RhdGUtPmRhdHVtc1tzdG10LT52YXJub107CisKKwlwbHBnc3FsX2V4ZWNfZ2V0X2RhdHVtX3R5 cGVfaW5mbyhlc3RhdGUsIHRhcmdldF92YXIsCisJCQkJCQkJCQkgJnRhcmdldF90eXBpZCwgJnRh cmdldF90eXBtb2QsCisJCQkJCQkJCQkgJnRhcmdldF9jb2xsYXRpb24pOwogCiAJLyoKIAkgKiBX ZSBtdXN0IGNvcHkgdGhlIGFycmF5IGludG8gc3RtdF9tY29udGV4dCwgZWxzZSBpdCB3aWxsIGRp c2FwcGVhciBpbgogCSAqIGV4ZWNfZXZhbF9jbGVhbnVwLiAgVGhpcyBpcyBhbm5veWluZywgYnV0 IGNsZWFudXAgd2lsbCBjZXJ0YWlubHkgaGFwcGVuCiAJICogd2hpbGUgcnVubmluZyB0aGUgbG9v cCBib2R5LCBzbyB3ZSBoYXZlIGxpdHRsZSBjaG9pY2UuCiAJICovCi0JYXJyID0gRGF0dW1HZXRB cnJheVR5cGVQQ29weSh2YWx1ZSk7CisJZ2V0X3R5cGxlbmJ5dmFsKGV4cHJfdHlwaWQsICZleHBy X3R5cGxlbiwgJmV4cHJfdHlwYnl2YWwpOworCWV4cHIgPSBkYXR1bUNvcHkoZXhwciwgZXhwcl90 eXBieXZhbCwgZXhwcl90eXBsZW4pOworCisJaXRlcmF0b3IgPSBzYnJvdXRpbmVzLT5jcmVhdGVf Zm9yZWFjaF9hX2l0ZXJhdG9yKGV4cHIsCisJCQkJCQkJCQkJCQkJIGV4cHJfdHlwaWQsIGV4cHJf dHlwbW9kLAorCQkJCQkJCQkJCQkJCSBzdG10LT5zbGljZSwgdGFyZ2V0X3R5cGlkLAorCQkJCQkJ CQkJCQkJCSB0YXJnZXRfdHlwbW9kKTsKIAogCS8qIENsZWFuIHVwIGFueSBsZWZ0b3ZlciB0ZW1w b3JhcnkgbWVtb3J5ICovCiAJZXhlY19ldmFsX2NsZWFudXAoZXN0YXRlKTsKIAotCS8qIFNsaWNl IGRpbWVuc2lvbiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBhcnJheSBkaW1lbnNpb24g Ki8KLQlpZiAoc3RtdC0+c2xpY2UgPCAwIHx8IHN0bXQtPnNsaWNlID4gQVJSX05ESU0oYXJyKSkK LQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0FSUkFZX1NVQlNDUklQVF9F UlJPUiksCi0JCQkJIGVycm1zZygic2xpY2UgZGltZW5zaW9uICglZCkgaXMgb3V0IG9mIHRoZSB2 YWxpZCByYW5nZSAwLi4lZCIsCi0JCQkJCQlzdG10LT5zbGljZSwgQVJSX05ESU0oYXJyKSkpKTsK LQotCS8qIFNldCB1cCB0aGUgbG9vcCB2YXJpYWJsZSBhbmQgc2VlIGlmIGl0IGlzIG9mIGFuIGFy cmF5IHR5cGUgKi8KLQlsb29wX3ZhciA9IGVzdGF0ZS0+ZGF0dW1zW3N0bXQtPnZhcm5vXTsKLQlp ZiAobG9vcF92YXItPmR0eXBlID09IFBMUEdTUUxfRFRZUEVfUkVDIHx8Ci0JCWxvb3BfdmFyLT5k dHlwZSA9PSBQTFBHU1FMX0RUWVBFX1JPVykKLQl7Ci0JCS8qCi0JCSAqIFJlY29yZC9yb3cgdmFy aWFibGUgaXMgY2VydGFpbmx5IG5vdCBvZiBhcnJheSB0eXBlLCBhbmQgbWlnaHQgbm90Ci0JCSAq IGJlIGluaXRpYWxpemVkIGF0IGFsbCB5ZXQsIHNvIGRvbid0IHRyeSB0byBnZXQgaXRzIHR5cGUK LQkJICovCi0JCWxvb3BfdmFyX2VsZW1fdHlwZSA9IEludmFsaWRPaWQ7Ci0JfQotCWVsc2UKLQkJ bG9vcF92YXJfZWxlbV90eXBlID0gZ2V0X2VsZW1lbnRfdHlwZShwbHBnc3FsX2V4ZWNfZ2V0X2Rh dHVtX3R5cGUoZXN0YXRlLAotCQkJCQkJCQkJCQkJCQkJCQkJICBsb29wX3ZhcikpOwotCi0JLyoK LQkgKiBTYW5pdHktY2hlY2sgdGhlIGxvb3AgdmFyaWFibGUgdHlwZS4gIFdlIGRvbid0IHRyeSB2 ZXJ5IGhhcmQgaGVyZSwgYW5kCi0JICogc2hvdWxkIG5vdCBiZSB0b28gcGlja3kgc2luY2UgaXQn cyBwb3NzaWJsZSB0aGF0IGV4ZWNfYXNzaWduX3ZhbHVlIGNhbgotCSAqIGNvZXJjZSB2YWx1ZXMg b2YgZGlmZmVyZW50IHR5cGVzLiAgQnV0IGl0IHNlZW1zIHdvcnRod2hpbGUgdG8gY29tcGxhaW4K LQkgKiBpZiB0aGUgYXJyYXktbmVzcyBvZiB0aGUgbG9vcCB2YXJpYWJsZSBpcyBub3QgcmlnaHQu Ci0JICovCi0JaWYgKHN0bXQtPnNsaWNlID4gMCAmJiBsb29wX3Zhcl9lbGVtX3R5cGUgPT0gSW52 YWxpZE9pZCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBF X01JU01BVENIKSwKLQkJCQkgZXJybXNnKCJGT1JFQUNIIC4uLiBTTElDRSBsb29wIHZhcmlhYmxl IG11c3QgYmUgb2YgYW4gYXJyYXkgdHlwZSIpKSk7Ci0JaWYgKHN0bXQtPnNsaWNlID09IDAgJiYg bG9vcF92YXJfZWxlbV90eXBlICE9IEludmFsaWRPaWQpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJ KGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCi0JCQkJIGVycm1zZygiRk9SRUFD SCBsb29wIHZhcmlhYmxlIG11c3Qgbm90IGJlIG9mIGFuIGFycmF5IHR5cGUiKSkpOwotCi0JLyog Q3JlYXRlIGFuIGl0ZXJhdG9yIHRvIHN0ZXAgdGhyb3VnaCB0aGUgYXJyYXkgKi8KLQlhcnJheV9p dGVyYXRvciA9IGFycmF5X2NyZWF0ZV9pdGVyYXRvcihhcnIsIHN0bXQtPnNsaWNlLCBOVUxMKTsK Kwl0bXBfY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKHN0bXRfbWNvbnRleHQsCisJCQkJCQkJ CQkiRk9SRUFDSCBJTiBBUlJBWSB0ZW1wb3JhcnkgY3h0IiwKKwkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOwogCi0JLyogSWRlbnRpZnkgaXRlcmF0b3IgcmVzdWx0IHR5cGUgKi8KLQlp ZiAoc3RtdC0+c2xpY2UgPiAwKQotCXsKLQkJLyogV2hlbiBzbGljaW5nLCBub21pbmFsIHR5cGUg b2YgcmVzdWx0IGlzIHNhbWUgYXMgYXJyYXkgdHlwZSAqLwotCQlpdGVyYXRvcl9yZXN1bHRfdHlw ZSA9IGFycnR5cGU7Ci0JCWl0ZXJhdG9yX3Jlc3VsdF90eXBtb2QgPSBhcnJ0eXBtb2Q7Ci0JfQot CWVsc2UKLQl7Ci0JCS8qIFdpdGhvdXQgc2xpY2luZywgcmVzdWx0cyBhcmUgaW5kaXZpZHVhbCBh cnJheSBlbGVtZW50cyAqLwotCQlpdGVyYXRvcl9yZXN1bHRfdHlwZSA9IEFSUl9FTEVNVFlQRShh cnIpOwotCQlpdGVyYXRvcl9yZXN1bHRfdHlwbW9kID0gYXJydHlwbW9kOwotCX0KKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8odG1wX2N4dCk7CiAKLQkvKiBJdGVyYXRlIG92ZXIgdGhlIGFycmF5IGVs ZW1lbnRzIG9yIHNsaWNlcyAqLwotCXdoaWxlIChhcnJheV9pdGVyYXRlKGFycmF5X2l0ZXJhdG9y LCAmdmFsdWUsICZpc251bGwpKQorCXdoaWxlIChpdGVyYXRvci0+aXRlcmF0ZShpdGVyYXRvciwg JnZhbHVlLCAmaXNudWxsLCAmdHlwaWQsICZ0eXBtb2QpKQogCXsKIAkJZm91bmQgPSB0cnVlOwkJ CS8qIGxvb3BlZCBhdCBsZWFzdCBvbmNlICovCiAKQEAgLTMxNDksMTIgKzMxMTgsOSBAQCBleGVj X3N0bXRfZm9yZWFjaF9hKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdTUUxfc3RtdF9m b3JlYWNoX2EgKnN0bXQpCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAog CQkvKiBBc3NpZ24gY3VycmVudCBlbGVtZW50L3NsaWNlIHRvIHRoZSBsb29wIHZhcmlhYmxlICov Ci0JCWV4ZWNfYXNzaWduX3ZhbHVlKGVzdGF0ZSwgbG9vcF92YXIsIHZhbHVlLCBpc251bGwsCi0J CQkJCQkgIGl0ZXJhdG9yX3Jlc3VsdF90eXBlLCBpdGVyYXRvcl9yZXN1bHRfdHlwbW9kKTsKKwkJ ZXhlY19hc3NpZ25fdmFsdWUoZXN0YXRlLCB0YXJnZXRfdmFyLCB2YWx1ZSwgaXNudWxsLCB0eXBp ZCwgdHlwbW9kKTsKIAotCQkvKiBJbiBzbGljZSBjYXNlLCB2YWx1ZSBpcyB0ZW1wb3Jhcnk7IG11 c3QgZnJlZSBpdCB0byBhdm9pZCBsZWFrYWdlICovCi0JCWlmIChzdG10LT5zbGljZSA+IDApCi0J CQlwZnJlZShEYXR1bUdldFBvaW50ZXIodmFsdWUpKTsKKwkJTWVtb3J5Q29udGV4dFJlc2V0KHRt cF9jeHQpOwogCiAJCS8qCiAJCSAqIEV4ZWN1dGUgdGhlIHN0YXRlbWVudHMKQEAgLTMxNjMsNyAr MzEyOSw3IEBAIGV4ZWNfc3RtdF9mb3JlYWNoX2EoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwg UExwZ1NRTF9zdG10X2ZvcmVhY2hfYSAqc3RtdCkKIAogCQlMT09QX1JDX1BST0NFU1NJTkcoc3Rt dC0+bGFiZWwsIGJyZWFrKTsKIAotCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RtdF9tY29udGV4 dCk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBfY3h0KTsKIAl9CiAKIAkvKiBSZXN0b3Jl IG1lbW9yeSBjb250ZXh0IHN0YXRlICovCkBAIC01NjM5LDYgKzU2MDUsNTMgQEAgcGxwZ3NxbF9l eGVjX2dldF9kYXR1bV90eXBlX2luZm8oUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAkJCQli cmVhazsKIAkJCX0KIAorCQljYXNlIFBMUEdTUUxfRFRZUEVfUk9XOgorCQkJeworCQkJCVBMcGdT UUxfcm93ICpyb3cgPSAoUExwZ1NRTF9yb3cgKikgZGF0dW07CisKKwkJCQlpZiAoIXJvdy0+cm93 dHVwZGVzYykKKwkJCQl7CisJCQkJCWludAkJCWk7CisKKwkJCQkJcm93LT5yb3d0dXBkZXNjID0g Q3JlYXRlVGVtcGxhdGVUdXBsZURlc2Mocm93LT5uZmllbGRzKTsKKworCQkJCQlmb3IgKGkgPSAw OyBpIDwgcm93LT5uZmllbGRzOyBpKyspCisJCQkJCXsKKwkJCQkJCVBMcGdTUUxfZGF0dW0gKnZh ciA9IGVzdGF0ZS0+ZGF0dW1zW3Jvdy0+dmFybm9zW2ldXTsKKwkJCQkJCU9pZAkJCXZhcnR5cGlk OworCQkJCQkJaW50MzIJCXZhcnR5cG1vZDsKKwkJCQkJCU9pZAkJCXZhcmNvbGxhdGlvbjsKKwor CQkJCQkJLyoKKwkJCQkJCSAqIFdlIGNhbm5vdCB1c2UgZmllbGRuYW1lcyBmb3IgdHVwZGVzY2Vu dHJ5LCBiZWNhdXNlCisJCQkJCQkgKiB0aGVzZSBuYW1lcyBjYW4gYmUgc3VmZml4ZWQgYnkgbmFt ZSBvZiByb3cgdmFyaWFibGUuCisJCQkJCQkgKiBVbmZvcnR1bmF0ZWx5LCB0aGUgUExwZ1NRTF9y ZWNmaWVsZCBpcyBub3QgY2FzdGVkIHRvCisJCQkJCQkgKiBQTHBnU1FMX3ZhcmlhYmxlLgorCQkJ CQkJICovCisJCQkJCQlwbHBnc3FsX2V4ZWNfZ2V0X2RhdHVtX3R5cGVfaW5mbyhlc3RhdGUsIHZh ciwKKwkJCQkJCQkJCQkJCQkJICZ2YXJ0eXBpZCwgJnZhcnR5cG1vZCwKKwkJCQkJCQkJCQkJCQkJ ICZ2YXJjb2xsYXRpb24pOworCisJCQkJCQlUdXBsZURlc2NJbml0RW50cnkocm93LT5yb3d0dXBk ZXNjLCBpICsgMSwKKwkJCQkJCQkJCQkgICB2YXItPnJlZm5hbWUsIHZhcnR5cGlkLCB2YXJ0eXBt b2QsCisJCQkJCQkJCQkJICAgMCk7CisJCQkJCQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24o cm93LT5yb3d0dXBkZXNjLCBpICsgMSwKKwkJCQkJCQkJCQkJCQl2YXJjb2xsYXRpb24pOworCQkJ CQl9CisKKwkJCQkJVHVwbGVEZXNjRmluYWxpemUocm93LT5yb3d0dXBkZXNjKTsKKworCQkJCQkv KiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIHR5cGUvdHlwbW9kIHNldHRpbmcgKi8KKwkJCQkJ Qmxlc3NUdXBsZURlc2Mocm93LT5yb3d0dXBkZXNjKTsKKwkJCQl9CisKKwkJCQkqdHlwZUlkID0g cm93LT5yb3d0dXBkZXNjLT50ZHR5cGVpZDsKKwkJCQkqdHlwTW9kID0gcm93LT5yb3d0dXBkZXNj LT50ZHR5cG1vZDsKKwkJCQkvKiBjb21wb3NpdGUgdHlwZXMgYXJlIG5ldmVyIGNvbGxhdGFibGUg Ki8KKwkJCQkqY29sbGF0aW9uID0gSW52YWxpZE9pZDsKKwkJCQlicmVhazsKKwkJCX0KKwogCQlj YXNlIFBMUEdTUUxfRFRZUEVfUkVDOgogCQkJewogCQkJCVBMcGdTUUxfcmVjICpyZWMgPSAoUExw Z1NRTF9yZWMgKikgZGF0dW07CmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxwZ3Nx bC5oIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaAppbmRleCBhZGRiMTRhOTk1OS4uNWNi ZGI0ZWNkOWQgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbHBnc3FsLmgKKysrIGIv c3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaApAQCAtMjk5LDYgKzI5OSw3IEBAIHR5cGVkZWYg c3RydWN0IFBMcGdTUUxfZGF0dW0KIHsKIAlQTHBnU1FMX2RhdHVtX3R5cGUgZHR5cGU7CiAJaW50 CQkJZG5vOworCWNoYXIJICAgKnJlZm5hbWU7CiB9IFBMcGdTUUxfZGF0dW07CiAKIC8qCkBAIC00 NDQsOSArNDQ1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUExwZ1NRTF9yZWNmaWVsZAogewogCVBMcGdT UUxfZGF0dW1fdHlwZSBkdHlwZTsKIAlpbnQJCQlkbm87CisJY2hhcgkgICAqZmllbGRuYW1lOwkJ LyogbmFtZSBvZiBmaWVsZCAqLwogCS8qIGVuZCBvZiBQTHBnU1FMX2RhdHVtIGZpZWxkcyAqLwog Ci0JY2hhcgkgICAqZmllbGRuYW1lOwkJLyogbmFtZSBvZiBmaWVsZCAqLwogCWludAkJCXJlY3Bh cmVudG5vOwkvKiBkbm8gb2YgcGFyZW50IHJlY29yZCAqLwogCWludAkJCW5leHRmaWVsZDsJCS8q IGRubyBvZiBuZXh0IGNoaWxkLCBvciAtMSBpZiBub25lICovCiAJdWludDY0CQlyZWN0dXBsZWRl c2NpZDsgLyogcmVjb3JkJ3MgdHVwbGVkZXNjIElEIGFzIG9mIGxhc3QgbG9va3VwICovCmRpZmYg LS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfZm9yZWFjaC5zcWwgYi9zcmMv cGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfZm9yZWFjaC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE2NDAwNDQxN2FmCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3BsL3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX2ZvcmVhY2guc3FsCkBAIC0wLDAgKzEsMjUyIEBA CistLSBpbnB1dCBtdXN0IGJlIGEgSlNPTiBhcnJheQorZG8gJCQKK2RlY2xhcmUgeCBudW1lcmlj OworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IE5VTEw6Ompzb25iIC0tIGZhaWwKKyAgbG9v cAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2Rv ICQkCitkZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBhcnJheSBqc29u YiAnMTAnIC0tIGZhaWwKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBs b29wOworZW5kOworJCQ7CisKK2RvICQkCitkZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2luCisgIGZv cmVhY2ggeCBpbiBhcnJheSBqc29uYiAne30nIC0tIGZhaWwKKyAgbG9vcAorICAgIHJhaXNlIG5v dGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKKy0tIG51bWVyaWMgdG8gbnVt ZXJpYworZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGFy cmF5IGpzb25iICdbMTAsMjAsMzAsMy4xNCwgbnVsbF0nCisgIGxvb3AKKyAgICByYWlzZSBub3Rp Y2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBudW1lcmljIHRvIGludCBi eSBjYXN0CitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBhcnJh eSBqc29uYiAnWzEwLDIwLDMwLDMuMTQsIG51bGxdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNl ICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0gdGVzdCBvZiBGT1VORCB2YXJp YWJsZQorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkg anNvbmIgJ1sxMF0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9v cDsKKyAgcmFpc2Ugbm90aWNlICdGT1VORDogJScsIGZvdW5kOworZW5kOworJCQ7CisKKy0tIHRl c3Qgb2YgRk9VTkQgdmFyaWFibGUKK2RvICQkCitkZWNsYXJlIHggaW50OworYmVnaW4KKyAgZm9y ZWFjaCB4IGluIGFycmF5IGpzb25iICdbXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScs IHg7CisgIGVuZCBsb29wOworICByYWlzZSBub3RpY2UgJ0ZPVU5EOiAlJywgZm91bmQ7CitlbmQ7 CiskJDsKKworLS0gY29udmVyc2lvbiAiMy4xNCIgdG8gaW50IHNob3VsZCB0byBmYWlsIGR1ZSBJ TyBjYXN0CitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBhcnJh eSBqc29uYiAnWyIxMCIsMjAsMzAsIjMuMTQiXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAn JScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2RvICQkCitkZWNsYXJlIHggYm9vbGVh bjsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBhcnJheSBqc29uYiAnW3RydWUsIGZhbHNlXScKKyAg bG9vcAorICBpZiB4IHRoZW4KKyAgICByYWlzZSBub3RpY2UgJ3RydWUnOworICBlbHNlCisgICAg cmFpc2Ugbm90aWNlICdmYWxzZSc7CisgIGVuZCBpZjsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsK KworLS0ganNvbmIgdG8ganNvbmIKK2RvICQkCitkZWNsYXJlIHgganNvbmI7CitiZWdpbgorICBm b3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1sxMCwyMCwzMCwzLjE0LCBudWxsLCAiSGkiXScKKyAg bG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisK Ky0tIGpzb25iIHRvIGpzb24KK2RvICQkCitkZWNsYXJlIHgganNvbjsKK2JlZ2luCisgIGZvcmVh Y2ggeCBpbiBhcnJheSBqc29uYiAnWzEwLDIwLDMwLDMuMTQsIG51bGwsICJIaSJdJworICBsb29w CisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0g aXRlcmF0aW9uIG92ZXIgY29tcG9zaXRlcworZG8gJCQKK2RlY2xhcmUgeCBpbnQ7IHkgbnVtZXJp YzsgeiB2YXJjaGFyOworYmVnaW4KKyAgZm9yZWFjaCB4LCB5LCB6IGluIGFycmF5IGpzb25iICdb e30sIHsieiI6IkhpIn0sIHsieSI6IDMuMTR9LCB7InoiOiJIaSIsICJ4IjoxMCwgInkiOjMuMTR9 XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAneDogJSwgeTogJSwgejogJScsIHgsIHksIHo7 CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2NyZWF0ZSB0eXBlIHQzIGFzICh4IGludCwgeSBu dW1lcmljLCB6IHZhcmNoYXIpOworCitkbyAkJAorZGVjbGFyZSBjIHQzOworYmVnaW4KKyAgZm9y ZWFjaCBjIGluIGFycmF5IGpzb25iICdbe30sIHsieiI6IkhpIn0sIHsieSI6IDMuMTR9LCB7Inoi OiJIaSIsICJ4IjoxMCwgInkiOjMuMTR9XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAneDog JSwgeTogJSwgejogJScsIGMueCwgYy55LCBjLno7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisK K2RvICQkCitkZWNsYXJlIGMgdDM7CitiZWdpbgorICBmb3JlYWNoIGMueCwgYy55LCBjLnogaW4g YXJyYXkganNvbmIgJ1t7fSwgeyJ6IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsieiI6IkhpIiwgIngi OjEwLCAieSI6My4xNH1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5OiAlLCB6 OiAlJywgYy54LCBjLnksIGMuejsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZHJvcCB0eXBl IHQzOworCistLSB0YXJnZXQgY2FuIGJlIGEgYXJyYXkKK2RvICQkCitkZWNsYXJlIHggaW50W107 CitiZWdpbgorICBmb3JlYWNoIHggaW4gYXJyYXkganNvbmIgJ1tbMSwyLDNdLFs0LDUsNl1dJwor ICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclICUgJScsIHhbMV0sIHhbMl0sIHhbM107CisgIGVu ZCBsb29wOworZW5kOworJCQ7CisKK2RvICQkCitkZWNsYXJlIHggdmFyY2hhcltdOworYmVnaW4K KyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25iICdbWyJIaSIsIkhlbGxvIl0sWyJIZWxsbyIsIkhp Il1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclICUnLCB4WzFdLCB4WzJdOworICBlbmQg bG9vcDsKK2VuZDsKKyQkOworCitkbyAkJAorZGVjbGFyZSB4IHZhcmNoYXJbXTsKK2JlZ2luCisg IGZvcmVhY2ggeCBpbiBhcnJheSBqc29uYiAnW1siSGkiLCJIZWxsbyJdLFsiSGVsbG8iLCJIaSJd XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlJywgeFsxXSwgeFsyXTsKKyAgZW5kIGxv b3A7CitlbmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCBpbnRbXTsgeSB2YXJjaGFyOworYmVn aW4KKyAgZm9yZWFjaCB4LCB5IGluIGFycmF5IGpzb25iICdbeyJ4IjpbMSwyLDNdLCAieSI6Ikhp In0sIHsieCI6WzQsNSw2XSwgInkiOiJIaSJ9XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAn JSAlICUsIHk6ICUnLCB4WzFdLCB4WzJdLCB4WzNdLCB5OworICBlbmQgbG9vcDsKK2VuZDsKKyQk OworCitjcmVhdGUgdHlwZSB0MiBhcyAoeCBpbnRbXSwgeSB2YXJjaGFyKTsKKworZG8gJCQKK2Rl Y2xhcmUgYyB0MjsKK2JlZ2luCisgIGZvcmVhY2ggYyBpbiBhcnJheSBqc29uYiAnW3sieCI6WzEs MiwzXSwgInkiOiJIaSJ9LCB7IngiOls0LDUsNl0sICJ5IjoiSGkifV0nCisgIGxvb3AKKyAgICBy YWlzZSBub3RpY2UgJyUgJSAlLCB5OiAlJywgYy54WzFdLCBjLnhbMl0sIGMueFszXSwgYy55Owor ICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCitkcm9wIHR5cGUgdDI7CisKKy0tIEVYSVQgYW5kIENP TlRJTlVFIGNhbiBiZSB0cmlnZ2VyZWQgYnkgTE9PUF9SQ19QUk9DRVNTSU5HCitkbyAkJAorZGVj bGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBhcnJheSBqc29uYiAgJ1sxLDIsMyw0 LDVdJworICBsb29wCisgICAgZXhpdCB3aGVuIHggPSAzOworICAgIHJhaXNlIG5vdGljZSAnJScs IHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2RvICQkCitkZWNsYXJlIHggaW50OworYmVn aW4KKyAgZm9yZWFjaCB4IGluIGFycmF5IGpzb25iICdbMSwyLDMsNCw1XScKKyAgbG9vcAorICAg IGNvbnRpbnVlIHdoZW4geCAlIDIgPSAwOworICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVu ZCBsb29wOworZW5kOworJCQ7CisKKy0tIFZhcmlhYmxlIGluc3RlYWQgb2Ygc3RyaW5nCitETyAk JAorZGVjbGFyZQorICB4IGludDsKKyAgYXJyIGpzb25iOworYmVnaW4KKyAgc2VsZWN0IGpzb25i X2FnZyhpKSBpbnRvIGFycgorICAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMykgZyhpKTsKKwor ICBmb3JlYWNoIHggaW4gYXJyYXkgYXJyCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4 OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wbHBnc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxwZ3NxbC5v dXQKaW5kZXggYjM3YjJhYmFmODAuLjRmMDE4N2Y2NzE0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BscGdzcWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcGxwZ3NxbC5vdXQKQEAgLTQ4NjksMTAgKzQ4NjksMTAgQEAgYmVnaW4KICQkIGxhbmd1YWdl IHBscGdzcWw7CiAtLSBzaG91bGQgZmFpbAogc2VsZWN0IGZvcmVhY2hfdGVzdChBUlJBWVsxLDIs Myw0XSk7Ci1FUlJPUjogIEZPUkVBQ0ggLi4uIFNMSUNFIGxvb3AgdmFyaWFibGUgbXVzdCBiZSBv ZiBhbiBhcnJheSB0eXBlCitFUlJPUjogIGNhbm5vdCB0byBjYXN0IGEgdmFsdWUgb2YgYXJyYXkg dHlwZSB0byBzY2FsYXIgdHlwZQogQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGZvcmVhY2hf dGVzdChhbnlhcnJheSkgbGluZSA0IGF0IEZPUkVBQ0ggb3ZlciBhcnJheQogc2VsZWN0IGZvcmVh Y2hfdGVzdChBUlJBWVtbMSwyXSxbMyw0XV0pOwotRVJST1I6ICBGT1JFQUNIIC4uLiBTTElDRSBs b29wIHZhcmlhYmxlIG11c3QgYmUgb2YgYW4gYXJyYXkgdHlwZQorRVJST1I6ICBjYW5ub3QgdG8g Y2FzdCBhIHZhbHVlIG9mIGFycmF5IHR5cGUgdG8gc2NhbGFyIHR5cGUKIENPTlRFWFQ6ICBQTC9w Z1NRTCBmdW5jdGlvbiBmb3JlYWNoX3Rlc3QoYW55YXJyYXkpIGxpbmUgNCBhdCBGT1JFQUNIIG92 ZXIgYXJyYXkKIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGZvcmVhY2hfdGVzdChhbnlhcnJh eSkKIHJldHVybnMgdm9pZCBhcyAkJAotLSAKMi41NC4wCgo= --0000000000001e37d9065618e167--