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 1wEYTI-0048eU-2f for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Apr 2026 20:10:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wEYTI-00G9uX-09 for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Apr 2026 20:10:24 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wEYTH-00G9u8-1M for pgsql-hackers@lists.postgresql.org; Sun, 19 Apr 2026 20:10:23 +0000 Received: from mail-oo1-xc2e.google.com ([2607:f8b0:4864:20::c2e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wEYTE-000000021JD-35Vy for pgsql-hackers@lists.postgresql.org; Sun, 19 Apr 2026 20:10:23 +0000 Received: by mail-oo1-xc2e.google.com with SMTP id 006d021491bc7-67c22b05346so1159948eaf.2 for ; Sun, 19 Apr 2026 13:10:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776629418; cv=none; d=google.com; s=arc-20240605; b=TrEV7yXndfcpwOkAqduEYzU+8iKq7gMSszR07/dcauRbtiNqnDOLyA5kc2M0qfvVlc or+Ulv0VuUKM+6H/PydArAB5ANb9N/uXb2/IstCwfOOehqc0lz8PERa32WLra3SxgRqS +mpxQARR1kkCf2LpInBDi6i9SAz99GNQMovvG4IiVD1nWryFWyLpw0IEFliZp0MtZjZu gX1O+YRzrIYlpRvfLlcXEdCjr/a/cZ3WL76hUYzxkaEOzMz9fUS85dtOLGmPuOOrpR1X jAYHPR7B+9Fc7raok7FdgyDwghMWMy0cd9Gl3BqKmrD/tVNRYE6w/0nlwXrle9BWklGA tDLw== 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=Zvjrrlq6wCyw3cRuu6NN8P9XhDkg2a/7o3Xn4HJHhbQ=; fh=GWjb/dTBGjVJfcrZODBygz2DZTGX/VGM4r5+tKc5OtA=; b=DoK8BuQcq130gvBNZyfvHbvWZqRf0CNe+KGL7Ll2n7ML0SuDezt5kai/54AGgzxihI fQbxtt8+kAwXtzyaXGTKmLCSqT/XJpPE0W723XWC4zBsC1KtBuISYje1rrNMw5YxkUeR oC/fI39ocm8Wy2bGHAPdIeGGrVVdRzGSu/zP+gLeLd/3NiiJ7yDAx8r10gyOuzEgqtVA GygugsRw6xmD4REn/qQrKZ6xjY141TQgmhFVYNi2oyHS7pgLaJegCQN/YZq73ORn66fU Di9w9oEMoDkr4GfpNc4g6yKDOmS+6h2SCJYdZPDHESymlL+wFwYpyT59jMmNPBoFDRRw 02oA==; 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=illuminatedcomputing-com.20251104.gappssmtp.com; s=20251104; t=1776629418; x=1777234218; 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=Zvjrrlq6wCyw3cRuu6NN8P9XhDkg2a/7o3Xn4HJHhbQ=; b=cgYEcWDm+njqtxJ66hhM+pESmN+OZ3g53LW0cbl9sZEKbnTdoMUE0aT4fEpTQXHxft wTOGuiYnk3Z1+NXKzp9w8yHccMuAPcip43kzv0jP/yAsxi+EGmlc/70wvUTdN2DFITQm 9JUYUCkB3yfzn8U9NIv+sTaHSYRVo9lYfpi6eiC9971LBWvue+ocwHTn5ROi+JMlYofm G+ukU02doQetISUNqHgT7fsjCfqLGrbYeM1EaXd2kZG/6+wzKqqXZNQBne2m4aQQgzSx +8jX53xEg7aWgCCTayoKCo4APvjRoXXvKWPJ/qqWRo/Hp5DG00h6+gobjhrKwVfhi0eg GocQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776629418; x=1777234218; 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=Zvjrrlq6wCyw3cRuu6NN8P9XhDkg2a/7o3Xn4HJHhbQ=; b=JL/1MAjscR16MH7LH5N46JmcdGFwSQq4Us5+s90OYmY/FA9695HQKPAfxarxln73aR D17Ab2/Lus+CFEks3oGAozEExAMRlJgS5JgyrbyuDAhyCofm0UtCm/RAit96LZTXmvmP QuPtsxUl9q0mKQbP9RahmpWw8sHfRO2EdZlbR8tEg/FlZGf3bi5laHk8Rn3cV2A/SR7h WYD/9Jyh2lr/7IfY6HpNEgiPGmGUubTlpPxNGg3ESxRdwyYeu0C9iGhu3xSD6rDba2zd eraVbHVoCuPOS1y9CLWyr0xS6wtTSw7ZpQp0TcalPMtJcPZ4Ai3cI142L9S1LK3ZiG7y 3pUg== X-Forwarded-Encrypted: i=1; AFNElJ84gJjk5aOzJUYr6sEQ7zNF4PeqhXSpugaERIuFUpfJy0Okl+69N3ALTJMaalZjUiCbHW1RoqFeWN45OftR@lists.postgresql.org X-Gm-Message-State: AOJu0YzQqovvywsfqC3y7dflPq0RHTvUX8UsL2UNRrdpqQ+4/juzSQwE qAAXGkPN9ef9nVFhDbqpYziRAWaa6OKgD+ZVanrZ2HR4WoHgSE9b1agRQh9onRBzWl9eC6dAslb TizTct4SKs7BkyUo6m+J/9c1mnYgJcB9NgxgrkOAo0g== X-Gm-Gg: AeBDieuimzREszu7scgXCNXiKOiQVZkdkpyEQn03/Nyph5tlPw0rsnKnpTCtMRTCAN8 yVgb0f5qFnuaq7rSV5F43IsIdsqGRViKabmPIISnWDblGcx1WCcBaWgrikTMc9hUz25oiMt8Ds7 W2Md6YES+spP8xH098fgh5yC87PZasTltp3TnUoQuyI+HUdPq0SxZmYCoV6J4DqSqlS4tTg3vnE eP7pps+96rVTEsYdPHx4XPafJgFLdmqIfIZhBNq5yH7ciEWkXoIUS+PmDS3/326gN5SHjmABB5Y L7fzCaiiGitbpUYKoZfbYz/4P72qFg== X-Received: by 2002:a05:6820:1c82:b0:685:f11f:edba with SMTP id 006d021491bc7-69462e67df2mr6336153eaf.20.1776629418434; Sun, 19 Apr 2026 13:10:18 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Paul A Jungwirth Date: Sun, 19 Apr 2026 13:10:06 -0700 X-Gm-Features: AQROBzD27eMFRuC6ktiJV4SlmzOzPe780LVvTRwQ0Xz2_BZNXquFQmMOf-D363A Message-ID: Subject: Re: FOR PORTION OF does not recompute GENERATED STORED columns that depend on the range column To: jian he Cc: SATYANARAYANA NARLAPURAM , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000624c36064fd5c51a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000624c36064fd5c51a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Apr 17, 2026 at 1:14=E2=80=AFAM jian he wrote: > > On Thu, Apr 16, 2026 at 4:59=E2=80=AFAM Paul A Jungwirth > wrote: > > > > There's something I think we could still improve: we omit the > > valid-time in updatedCols, since that bitmapset is for permissions > > checking (at least originally), but now other features are using it as > > well. Our fix adds special logic to consider the valid-at column for > > GENERATED column dependencies and more special logic for UPDATE OF > > triggers. Perhaps we should add the attno to updatedCols after all, > > and put the special logic in the permissions check instead? That seems > > simpler and more robust. Or maybe it's time to have separate > > bitmapsets, one for permissions and another for everything else? What > > do you think? > > > > + /* > + * For UPDATE ... FOR PORTION OF, the range column is also being modifie= d > + * (narrowed via intersection), but it is not included in updatedCols > + * because the user does not need UPDATE permission on it. We must > + * account for it here so that generated columns referencing the range > + * column are recomputed. > + */ > + if (resultRelInfo->ri_forPortionOf) > + { > + AttrNumber rangeAttno =3D resultRelInfo->ri_forPortionOf->fp_rangeAttno= ; > + > + updatedCols =3D bms_add_member(bms_copy(updatedCols), > + rangeAttno - FirstLowInvalidHeapAttributeNumber); > + } > + > Putting the above into ExecGetUpdatedCols would be more neat. > InitPlan->ExecCheckPermissions happened earlier than ExecGetUpdatedCols, > So I think it will work. Okay, I like this approach. Thank you for the patch! I'm not sure about mutating perminfo though. It saves repeated bms allocations for multi-row updates, but it seems a bit surprising. > Please find the attached diff, which is based on your V3 patch. This fix doesn't work for partitioned tables, because in ExecGetUpdatedCols ri_forPortionOf->fp_rangeAttno has already been mapped to the child table, but then we add it to the unmapped bitmapset and map it again. I updated an existing FOR PORTION OF test on partitioned tables to show this, by adding a GENERATED STORED column. So instead you need to add to the bitmapset *after* mapping. That's the approach I've taken here. And then mutating perminfo is definitely wrong, because it has the parent attnos. > ExecForPortionOfLeftovers > /* > * Get the range's type cache entry. This is worth caching for the wh= ole > * UPDATE/DELETE as range functions do. > */ > typcache =3D fpoState->fp_leftoverstypcache; > if (typcache =3D=3D NULL) > { > typcache =3D lookup_type_cache(forPortionOf->rangeType, 0); > fpoState->fp_leftoverstypcache =3D typcache; > } > It seems fp_leftoverstypcache is never being used? > place it to ExecInitModifyTable would be better, i think. You're right; that must have been left over from an earlier patch. But actually the fix about preventing BEFORE triggers from changing valid_at winds up using it. So I left it in for now. > /* > * Get the ranges to the left/right of the targeted range. We call a = SETOF > * support function and insert as many temporal leftovers as it gives= us. > * Although rangetypes have 0/1/2 leftovers, multiranges have 0/1, an= d > * other types may have more. > */ > Currently, we only support anymultirange and anyrange. so here > "and other types may have more." is kind of wrong? That's all we support for now, but my goal is to allow user-defined functions to support other types. So this comment is looking forward to that future. v5 attached. Yours, --=20 Paul ~{:-) pj@illuminatedcomputing.com --000000000000624c36064fd5c51a Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0001-Fix-some-problems-with-UPDATE-FOR-PORTION-OF.patch" Content-Disposition: attachment; filename="v5-0001-Fix-some-problems-with-UPDATE-FOR-PORTION-OF.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo6793030 RnJvbSAxMTgzMDgwMDA1ZjdlNmIxNjVjMGIxODAzNDUyMjhiNWI0ZTBjMzhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTAgQXByIDIwMjYgMTc6MDE6MTIgKzA4MDAKU3ViamVjdDogW1BBVENIIHY1 XSBGaXggc29tZSBwcm9ibGVtcyB3aXRoIFVQREFURSBGT1IgUE9SVElPTiBPRgoKLSBGaXhlZCBp bnNlcnRpbmcgbGVmdG92ZXJzIHdpdGggdHJhZGl0aW9uYWwgdGFibGUgaW5oZXJpdGFuY2UuIFNp bmNlIHRoZXJlIGlzCiAgbm8gdHVwbGUgcm91dGluZywgd2UgbXVzdCBhZGQgdGhlbSBkaXJlY3Rs eSB0byB0aGUgY2hpbGQgdGFibGUuIEFsc28gdGhpcwogIHByZXNlcnZlcyBleHRyYSBjb2x1bW5z IGluIHRoYXQgdGFibGUuCi0gQWRkZWQgRXhlY0luaXRGb3JQb3J0aW9uT2YuIFRoaXMgc2V0cyB1 cCBleGVjdXRvciBzdGF0ZSBmb3IgY2hpbGQgcGFydGl0aW9ucy4KICBQcmV2aW91c2x5IHdlIGRp ZCB0aGlzIGluIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMsIGJ1dCBkb2luZyBpdCBlYXJsaWVy IGxldHMKICB1cyB1c2UgdGhlIGNoaWxkLT5wYXJlbnQgYXR0ciBtYXBwaW5nIGluIHRoZSBmaXhl cyBiZWxvdy4KLSBNYWRlIHN1cmUgR0VORVJBVEVEIFNUT1JFRCBjb2x1bW5zIHRoYXQgZGVwZW5k IG9uIHRoZSBhcHBsaWNhdGlvbi10aW1lIGNvbHVtbgogIGdldCB1cGRhdGVkLiBXZSBleGNsdWRl IHRoYXQgY29sdW1uIGZyb20gdGhlIHVwZGF0ZWRDb2xzIGJpdG1hcHNldCwgYmVjYXVzZSBpdAog IGRvZXMgbm90IHJlcXVpcmUgcGVybWlzc2lvbnMuIEJ1dCB0aGVuIHdlIG11c3QgcmVtZW1iZXIg dG8gYWRkIGl0IGxhdGVyLiBUaGlzCiAgYWxzbyBmaXhlcyBhIHNpbWlsYXIgcHJvYmxlbSB3aXRo IFVQREFURSBPRiB0cmlnZ2Vycy4KLSBDbGFyaWZpZWQgYSBjb21tZW50IGFib3V0IHRoZSByYW5n ZXR5cGUgc3RvcmVkIGluIEZvclBvcnRpb25PZlN0YXRlLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQUhnK1FEY2Q9dDY5Z0xmOXlRZXhPMDdFSjJteDBaNzBORkhvNmg5NFgxRURB PWhNMGdAbWFpbC5nbWFpbC5jb20KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUhn K1FEY3NYc1VWYVorSndNMDJ5RFJRRWk9Y0xfclRIX1JPTERZZ094MDA0c1F1N0FAbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYyAgICAgICAgICAgICB8 ICAzNSArKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jICAgICAgIHwg MTQ1ICsrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAg ICAgICAgfCAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yu b3V0IHwgMjE5ICsrKysrKysrKysrKysrKy0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9w b3J0aW9uX29mLnNxbCAgICAgIHwgIDkyICsrKysrKystCiA1IGZpbGVzIGNoYW5nZWQsIDM5NyBp bnNlcnRpb25zKCspLCA5NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjVXRpbHMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCmlu ZGV4IDFlYjZiOWYxZjQwLi4yOWE4ZDNhYmE3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMK QEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNp bmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGRlc2MuaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0 aWxzLmgiCisjaW5jbHVkZSAibm9kZXMvcHJpbnQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3Iu aCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCkBAIC0xNDA4LDYgKzE0MDksNyBAQCBCaXRtYXBzZXQgKgogRXhlY0dldFVwZGF0ZWRDb2xz KFJlc3VsdFJlbEluZm8gKnJlbGluZm8sIEVTdGF0ZSAqZXN0YXRlKQogewogCVJURVBlcm1pc3Np b25JbmZvICpwZXJtaW5mbyA9IEdldFJlc3VsdFJURVBlcm1pc3Npb25JbmZvKHJlbGluZm8sIGVz dGF0ZSk7CisJQml0bWFwc2V0ICp1cGRhdGVkQ29scyA9IHBlcm1pbmZvLT51cGRhdGVkQ29sczsK IAogCWlmIChwZXJtaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE0MTgsMTAgKzE0 MjAsMzkgQEAgRXhlY0dldFVwZGF0ZWRDb2xzKFJlc3VsdFJlbEluZm8gKnJlbGluZm8sIEVTdGF0 ZSAqZXN0YXRlKQogCQlUdXBsZUNvbnZlcnNpb25NYXAgKm1hcCA9IEV4ZWNHZXRSb290VG9DaGls ZE1hcChyZWxpbmZvLCBlc3RhdGUpOwogCiAJCWlmIChtYXApCi0JCQlyZXR1cm4gZXhlY3V0ZV9h dHRyX21hcF9jb2xzKG1hcC0+YXR0ck1hcCwgcGVybWluZm8tPnVwZGF0ZWRDb2xzKTsKKwkJCXVw ZGF0ZWRDb2xzID0gZXhlY3V0ZV9hdHRyX21hcF9jb2xzKG1hcC0+YXR0ck1hcCwgdXBkYXRlZENv bHMpOwogCX0KIAotCXJldHVybiBwZXJtaW5mby0+dXBkYXRlZENvbHM7CisJLyoKKwkgKiBGb3Ig VVBEQVRFIC4uLiBGT1IgUE9SVElPTiBPRiwgdGhlIHJhbmdlIGNvbHVtbiBpcyBiZWluZyBtb2Rp ZmllZAorCSAqIChuYXJyb3dlZCB2aWEgaW50ZXJzZWN0aW9uKSwgYnV0IGl0IGlzIG5vdCBpbmNs dWRlZCBpbiB1cGRhdGVkQ29scworCSAqIGJlY2F1c2UgdGhlIHVzZXIgZG9lcyBub3QgbmVlZCBV UERBVEUgcGVybWlzc2lvbiBvbiBpdC4gTm93IG1hbnVhbHkKKwkgKiBhZGQgaXQgdG8gdXBkYXRl ZENvbHMuIFNpbmNlIHJpX2ZvclBvcnRpb25PZi0+ZnBfcmFuZ2VBdHRubyBpcyBhbHJlYWR5CisJ ICogbWFwcGVkIGZvciB0aGUgY2hpbGQgcGFydGl0aW9uLCB3ZSBoYXZlIHRvIGFkZCBpdCBhZnRl ciB0aGUgbWFwcGluZyBqdXN0CisJICogYWJvdmUuIEFsc28gdGhhdCBtYWtlcyBpdCB1bnNhZmUg dG8gbXV0YXRlIHBlcm1pbmZvLiBYWFg6IEFsd2F5cyBhZGQgdGhlCisJICogdW5tYXBwZWQgYXR0 bm8gaW5zdGVhZCAoYmVmb3JlIG1hcHBpbmcpLCBhbmQgbXV0YXRlIHBlcm1pbmZvLCB0byBhdm9p ZAorCSAqIHJlcGVhdGVkIGFsbG9jYXRpb25zPworCSAqLworCWlmIChyZWxpbmZvLT5yaV9mb3JQ b3J0aW9uT2YpCisJeworCQlBdHRyTnVtYmVyCXJhbmdlQXR0bm8gPSByZWxpbmZvLT5yaV9mb3JQ b3J0aW9uT2YtPmZwX3JhbmdlQXR0bm87CisKKwkJaWYgKCFibXNfaXNfbWVtYmVyKHJhbmdlQXR0 bm8gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyLAorCQkJCQkJICAgdXBkYXRl ZENvbHMpKQorCQl7CisJCQlNZW1vcnlDb250ZXh0IG9sZENvbnRleHQ7CisKKwkJCW9sZENvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0YXRlLT5lc19xdWVyeV9jeHQpOworCisJCQl1 cGRhdGVkQ29scyA9CisJCQkJYm1zX2FkZF9tZW1iZXIodXBkYXRlZENvbHMsCisJCQkJCQkJICAg cmFuZ2VBdHRubyAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCisJCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisJCX0KKwl9CisKKwlyZXR1cm4gdXBk YXRlZENvbHM7CiB9CiAKIC8qIFJldHVybiBhIGJpdG1hcCByZXByZXNlbnRpbmcgZ2VuZXJhdGVk IGNvbHVtbnMgYmVpbmcgdXBkYXRlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFi bGUuYwppbmRleCBlZjJhNmJjNmU5ZC4uN2FmMDI2ODY0NmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVNb2RpZnlUYWJsZS5jCkBAIC0xOTcsNiArMTk3LDggQEAgc3RhdGljIFR1cGxlVGFibGVT bG90ICpFeGVjTWVyZ2VOb3RNYXRjaGVkKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIHN0 YXRpYyB2b2lkIEV4ZWNTZXR1cFRyYW5zaXRpb25DYXB0dXJlU3RhdGUoTW9kaWZ5VGFibGVTdGF0 ZSAqbXRzdGF0ZSwgRVN0YXRlICplc3RhdGUpOwogc3RhdGljIHZvaWQgZmlyZUJTVHJpZ2dlcnMo TW9kaWZ5VGFibGVTdGF0ZSAqbm9kZSk7CiBzdGF0aWMgdm9pZCBmaXJlQVNUcmlnZ2VycyhNb2Rp ZnlUYWJsZVN0YXRlICpub2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNJbml0Rm9yUG9ydGlvbk9mKE1v ZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAorCQkJCQkJCQkgUmVzdWx0 UmVsSW5mbyAqcmVzdWx0UmVsSW5mbyk7CiAKIAogLyoKQEAgLTE0MDgsNyArMTQxMCw2IEBAIEV4 ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCU1v ZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUgPSBjb250ZXh0LT5tdHN0YXRlOwogCU1vZGlmeVRhYmxl ICpub2RlID0gKE1vZGlmeVRhYmxlICopIG10c3RhdGUtPnBzLnBsYW47CiAJRm9yUG9ydGlvbk9m RXhwciAqZm9yUG9ydGlvbk9mID0gKEZvclBvcnRpb25PZkV4cHIgKikgbm9kZS0+Zm9yUG9ydGlv bk9mOwotCUF0dHJOdW1iZXIJcmFuZ2VBdHRubzsKIAlEYXR1bQkJb2xkUmFuZ2U7CiAJVHlwZUNh Y2hlRW50cnkgKnR5cGNhY2hlOwogCUZvclBvcnRpb25PZlN0YXRlICpmcG9TdGF0ZTsKQEAgLTE0 MjIsMzcgKzE0MjMsMTAgQEAgRXhlY0ZvclBvcnRpb25PZkxlZnRvdmVycyhNb2RpZnlUYWJsZUNv bnRleHQgKmNvbnRleHQsCiAJUmV0dXJuU2V0SW5mbyByc2k7CiAJYm9vbAkJZGlkSW5pdCA9IGZh bHNlOwogCWJvb2wJCXNob3VsZEZyZWUgPSBmYWxzZTsKKwlSZXN1bHRSZWxJbmZvICpyb290UmVs SW5mbyA9IG10c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZvOwogCiAJTE9DQUxfRkNJTkZPKGZjaW5m bywgMik7CiAKLQlpZiAoIXJlc3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25PZikKLQl7Ci0JCS8q Ci0JCSAqIElmIHdlIGRvbid0IGhhdmUgYSBGb3JQb3J0aW9uT2ZTdGF0ZSB5ZXQsIHdlIG11c3Qg YmUgYSBwYXJ0aXRpb24KLQkJICogY2hpbGQgYmVpbmcgaGl0IGZvciB0aGUgZmlyc3QgdGltZS4g TWFrZSBhIGNvcHkgZnJvbSB0aGUgcm9vdCwgd2l0aAotCQkgKiBvdXIgb3duIHR1cGxlVGFibGVT bG90LiBXZSBkbyB0aGlzIGxhemlseSBzbyB0aGF0IHdlIGRvbid0IHBheSB0aGUKLQkJICogcHJp Y2Ugb2YgdW51c2VkIHBhcnRpdGlvbnMuCi0JCSAqLwotCQlGb3JQb3J0aW9uT2ZTdGF0ZSAqbGVh ZlN0YXRlID0gbWFrZU5vZGUoRm9yUG9ydGlvbk9mU3RhdGUpOwotCi0JCWlmICghbXRzdGF0ZS0+ cm9vdFJlc3VsdFJlbEluZm8pCi0JCQllbG9nKEVSUk9SLCAibm8gcm9vdCByZWxhdGlvbiBidXQg cmlfZm9yUG9ydGlvbk9mIGlzIHVuaW5pdGlhbGl6ZWQiKTsKLQotCQlmcG9TdGF0ZSA9IG10c3Rh dGUtPnJvb3RSZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2Y7Ci0JCUFzc2VydChmcG9TdGF0 ZSk7Ci0KLQkJbGVhZlN0YXRlLT5mcF9yYW5nZU5hbWUgPSBmcG9TdGF0ZS0+ZnBfcmFuZ2VOYW1l OwotCQlsZWFmU3RhdGUtPmZwX3JhbmdlVHlwZSA9IGZwb1N0YXRlLT5mcF9yYW5nZVR5cGU7Ci0J CWxlYWZTdGF0ZS0+ZnBfcmFuZ2VBdHRubyA9IGZwb1N0YXRlLT5mcF9yYW5nZUF0dG5vOwotCQls ZWFmU3RhdGUtPmZwX3RhcmdldFJhbmdlID0gZnBvU3RhdGUtPmZwX3RhcmdldFJhbmdlOwotCQls ZWFmU3RhdGUtPmZwX0xlZnRvdmVyID0gZnBvU3RhdGUtPmZwX0xlZnRvdmVyOwotCQkvKiBFYWNo IHBhcnRpdGlvbiBuZWVkcyBhIHNsb3QgbWF0Y2hpbmcgaXRzIHR1cGxlIGRlc2NyaXB0b3IgKi8K LQkJbGVhZlN0YXRlLT5mcF9FeGlzdGluZyA9Ci0JCQl0YWJsZV9zbG90X2NyZWF0ZShyZXN1bHRS ZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCi0JCQkJCQkJICAmbXRzdGF0ZS0+cHMuc3RhdGUtPmVz X3R1cGxlVGFibGUpOwotCi0JCXJlc3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25PZiA9IGxlYWZT dGF0ZTsKLQl9CiAJZnBvU3RhdGUgPSByZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2Y7CiAJ b2xkdHVwbGVTbG90ID0gZnBvU3RhdGUtPmZwX0V4aXN0aW5nOwogCWxlZnRvdmVyU2xvdCA9IGZw b1N0YXRlLT5mcF9MZWZ0b3ZlcjsKQEAgLTE0NzMsMjEgKzE0NDcsMTMgQEAgRXhlY0ZvclBvcnRp b25PZkxlZnRvdmVycyhNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJaWYgKCF0YWJsZV90 dXBsZV9mZXRjaF9yb3dfdmVyc2lvbihyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsIHR1 cGxlaWQsIFNuYXBzaG90QW55LCBvbGR0dXBsZVNsb3QpKQogCQllbG9nKEVSUk9SLCAiZmFpbGVk IHRvIGZldGNoIHR1cGxlIGZvciBGT1IgUE9SVElPTiBPRiIpOwogCi0JLyoKLQkgKiBHZXQgdGhl IG9sZCByYW5nZSBvZiB0aGUgcmVjb3JkIGJlaW5nIHVwZGF0ZWQvZGVsZXRlZC4gTXVzdCByZWFk IHdpdGgKLQkgKiB0aGUgYXR0bm8gb2YgdGhlIGxlYWYgcGFydGl0aW9uIGJlaW5nIHVwZGF0ZWQu Ci0JICovCi0KLQlyYW5nZUF0dG5vID0gZm9yUG9ydGlvbk9mLT5yYW5nZVZhci0+dmFyYXR0bm87 Ci0JaWYgKHJlc3VsdFJlbEluZm8tPnJpX1Jvb3RSZXN1bHRSZWxJbmZvKQotCQltYXAgPSBFeGVj R2V0Q2hpbGRUb1Jvb3RNYXAocmVzdWx0UmVsSW5mbyk7Ci0JaWYgKG1hcCAhPSBOVUxMKQotCQly YW5nZUF0dG5vID0gbWFwLT5hdHRyTWFwLT5hdHRudW1zW3JhbmdlQXR0bm8gLSAxXTsKIAlzbG90 X2dldGFsbGF0dHJzKG9sZHR1cGxlU2xvdCk7CiAKLQlpZiAob2xkdHVwbGVTbG90LT50dHNfaXNu dWxsW3JhbmdlQXR0bm8gLSAxXSkKKwkvKiBHZXQgdGhlIG9sZCByYW5nZSBvZiB0aGUgcmVjb3Jk IGJlaW5nIHVwZGF0ZWQvZGVsZXRlZC4gKi8KKworCWlmIChvbGR0dXBsZVNsb3QtPnR0c19pc251 bGxbZnBvU3RhdGUtPmZwX3JhbmdlQXR0bm8gLSAxXSkKIAkJZWxvZyhFUlJPUiwgImZvdW5kIGEg TlVMTCByYW5nZSBpbiBhIHRlbXBvcmFsIHRhYmxlIik7Ci0Jb2xkUmFuZ2UgPSBvbGR0dXBsZVNs b3QtPnR0c192YWx1ZXNbcmFuZ2VBdHRubyAtIDFdOworCW9sZFJhbmdlID0gb2xkdHVwbGVTbG90 LT50dHNfdmFsdWVzW2Zwb1N0YXRlLT5mcF9yYW5nZUF0dG5vIC0gMV07CiAKIAkvKgogCSAqIEdl dCB0aGUgcmFuZ2UncyB0eXBlIGNhY2hlIGVudHJ5LiBUaGlzIGlzIHdvcnRoIGNhY2hpbmcgZm9y IHRoZSB3aG9sZQpAQCAtMTUyNCwxMiArMTQ5MCwyMCBAQCBFeGVjRm9yUG9ydGlvbk9mTGVmdG92 ZXJzKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAlmY2luZm8tPmFyZ3NbMV0uaXNudWxs ID0gZmFsc2U7CiAKIAkvKgotCSAqIElmIHRoZXJlIGFyZSBwYXJ0aXRpb25zLCB3ZSBtdXN0IGlu c2VydCBpbnRvIHRoZSByb290IHRhYmxlLCBzbyB3ZSBnZXQKLQkgKiB0dXBsZSByb3V0aW5nLiBX ZSBhbHJlYWR5IHNldCB1cCBsZWZ0b3ZlclNsb3Qgd2l0aCB0aGUgcm9vdCB0dXBsZQotCSAqIGRl c2NyaXB0b3IuCisJICogRm9yIHBhcnRpdGlvbmVkIHRhYmxlcywgd2UgbXVzdCByZWFkIGxlZnRv dmVycyB3aXRoIHRoZSB0dXBsZSBkZXNjcmlwdG9yCisJICogb2YgdGhlIGNoaWxkIHRhYmxlLCBi dXQgaW5zZXJ0IGludG8gdGhlIHJvb3QgdGFibGUgdG8gZW5hYmxlIHR1cGxlCisJICogcm91dGlu Zy4gIFNvIGxlZnRvdmVyU2xvdCBpcyBjb25maWd1cmVkIHdpdGggdGhlIHJvb3QncyB0dXBsZQor CSAqIGRlc2NyaXB0b3IuICBIb3dldmVyLCBmb3IgdHJhZGl0aW9uYWwgdGFibGUgaW5oZXJpdGFu Y2UsIHdlIGRvbid0IG5lZWQKKwkgKiB0dXBsZSByb3V0aW5nIGFuZCBqdXN0IGluc2VydCBkaXJl Y3RseSBpbnRvIHRoZSBjaGlsZCB0YWJsZSB0byBwcmVzZXJ2ZQorCSAqIGNoaWxkLXNwZWNpZmlj IGNvbHVtbnMuICBJbiB0aGF0IGNhc2UsIGxlZnRvdmVyU2xvdCB1c2VzIHRoZSBjaGlsZCdzCisJ ICogKHJlc3VsdFJlbEluZm8pIHR1cGxlIGRlc2NyaXB0b3IuCiAJICovCi0JaWYgKHJlc3VsdFJl bEluZm8tPnJpX1Jvb3RSZXN1bHRSZWxJbmZvKQorCWlmIChyb290UmVsSW5mbyAmJgorCQlyb290 UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJU SVRJT05FRF9UQUJMRSkKKwl7CisJCW1hcCA9IEV4ZWNHZXRDaGlsZFRvUm9vdE1hcChyZXN1bHRS ZWxJbmZvKTsKIAkJcmVzdWx0UmVsSW5mbyA9IHJlc3VsdFJlbEluZm8tPnJpX1Jvb3RSZXN1bHRS ZWxJbmZvOworCX0KIAogCS8qCiAJICogSW5zZXJ0IGEgbGVmdG92ZXIgZm9yIGVhY2ggdmFsdWUg cmV0dXJuZWQgYnkgdGhlIHdpdGhvdXRfcG9ydGlvbiBoZWxwZXIKQEAgLTE1ODUsOCArMTU1OSw5 IEBAIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0 LAogCQkJZGlkSW5pdCA9IHRydWU7CiAJCX0KIAotCQlsZWZ0b3ZlclNsb3QtPnR0c192YWx1ZXNb Zm9yUG9ydGlvbk9mLT5yYW5nZVZhci0+dmFyYXR0bm8gLSAxXSA9IGxlZnRvdmVyOwotCQlsZWZ0 b3ZlclNsb3QtPnR0c19pc251bGxbZm9yUG9ydGlvbk9mLT5yYW5nZVZhci0+dmFyYXR0bm8gLSAx XSA9IGZhbHNlOworCQlsZWZ0b3ZlclNsb3QtPnR0c192YWx1ZXNbcmVzdWx0UmVsSW5mby0+cmlf Zm9yUG9ydGlvbk9mLT5mcF9yYW5nZUF0dG5vIC0gMV0gPSBsZWZ0b3ZlcjsKKwkJbGVmdG92ZXJT bG90LT50dHNfaXNudWxsW3Jlc3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25PZi0+ZnBfcmFuZ2VB dHRubyAtIDFdID0gZmFsc2U7CisKIAkJRXhlY01hdGVyaWFsaXplU2xvdChsZWZ0b3ZlclNsb3Qp OwogCiAJCS8qCkBAIC00NzYxLDYgKzQ3MzYsMTggQEAgRXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0 ZSAqcHN0YXRlKQogCQkJCQkJCQkJCQkJCQkgZmFsc2UsIHRydWUpOwogCQl9CiAKKwkJLyoKKwkJ ICogSWYgd2UgZG9uJ3QgaGF2ZSBhIEZvclBvcnRpb25PZlN0YXRlIHlldCwgd2UgbXVzdCBiZSBh IHBhcnRpdGlvbgorCQkgKiBjaGlsZCBiZWluZyBoaXQgZm9yIHRoZSBmaXJzdCB0aW1lLiBNYWtl IGEgY29weSBmcm9tIHRoZSByb290LCB3aXRoCisJCSAqIG91ciBvd24gdHVwbGVUYWJsZVNsb3Qu IFdlIGRvIHRoaXMgbGF6aWx5IHNvIHRoYXQgd2UgZG9uJ3QgcGF5IHRoZQorCQkgKiBwcmljZSBv ZiB1bnVzZWQgcGFydGl0aW9ucy4KKwkJICovCisJCWlmICgoKChNb2RpZnlUYWJsZSAqKSBjb250 ZXh0Lm10c3RhdGUtPnBzLnBsYW4pLT5mb3JQb3J0aW9uT2YpICYmCisJCQkhcmVzdWx0UmVsSW5m by0+cmlfZm9yUG9ydGlvbk9mKQorCQl7CisJCQlFeGVjSW5pdEZvclBvcnRpb25PZihjb250ZXh0 Lm10c3RhdGUsIGVzdGF0ZSwgcmVzdWx0UmVsSW5mbyk7CisJCX0KKwogCQkvKgogCQkgKiBJZiBy ZXN1bHRSZWxJbmZvLT5yaV91c2VzRmR3RGlyZWN0TW9kaWZ5IGlzIHRydWUsIGFsbCB3ZSBuZWVk IHRvIGRvCiAJCSAqIGhlcmUgaXMgY29tcHV0ZSB0aGUgUkVUVVJOSU5HIGV4cHJlc3Npb25zLgpA QCAtNTg0NCwzICs1ODMxLDY3IEBAIEV4ZWNSZVNjYW5Nb2RpZnlUYWJsZShNb2RpZnlUYWJsZVN0 YXRlICpub2RlKQogCSAqLwogCWVsb2coRVJST1IsICJFeGVjUmVTY2FuTW9kaWZ5VGFibGUgaXMg bm90IGltcGxlbWVudGVkIik7CiB9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlFeGVjSW5pdEZvclBvcnRp b25PZgorICoKKyAqCQlJbml0aWFsaXplcyByZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2Yg Zm9yIGNoaWxkIHRhYmxlcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNJbml0 Rm9yUG9ydGlvbk9mKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsIEVTdGF0ZSAqZXN0YXRlLCBS ZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0Owor CUZvclBvcnRpb25PZlN0YXRlICpsZWFmU3RhdGU7CisJUmVzdWx0UmVsSW5mbyAqcm9vdFJlbElu Zm8gPSBtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mbzsKKwlGb3JQb3J0aW9uT2ZTdGF0ZSAqZnBv U3RhdGU7CisKKwlpZiAoIXJvb3RSZWxJbmZvKQorCQllbG9nKEVSUk9SLCAibm8gcm9vdCByZWxh dGlvbiBidXQgcmlfZm9yUG9ydGlvbk9mIGlzIHVuaW5pdGlhbGl6ZWQiKTsKKworCWZwb1N0YXRl ID0gbXRzdGF0ZS0+cm9vdFJlc3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25PZjsKKworCS8qIFRo aW5ncyBidWlsdCBoZXJlIGhhdmUgdG8gbGFzdCBmb3IgdGhlIHF1ZXJ5IGR1cmF0aW9uLiAqLwor CW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhlc3RhdGUtPmVzX3F1ZXJ5X2N4dCk7CisK KwlsZWFmU3RhdGUgPSBtYWtlTm9kZShGb3JQb3J0aW9uT2ZTdGF0ZSk7CisKKwlsZWFmU3RhdGUt PmZwX3JhbmdlTmFtZSA9IGZwb1N0YXRlLT5mcF9yYW5nZU5hbWU7CisJbGVhZlN0YXRlLT5mcF9y YW5nZVR5cGUgPSBmcG9TdGF0ZS0+ZnBfcmFuZ2VUeXBlOworCWxlYWZTdGF0ZS0+ZnBfdGFyZ2V0 UmFuZ2UgPSBmcG9TdGF0ZS0+ZnBfdGFyZ2V0UmFuZ2U7CisKKwkvKgorCSAqIEZvciBwYXJ0aXRp b25lZCB0YWJsZXMgd2UgbXVzdCByZWFkIHRoZSBsZWZ0b3ZlcnMgdXNpbmcgdGhlIGNoaWxkIHRh YmxlJ3MKKwkgKiB0dXBsZSBkZXNjcmlwdG9yLCBidXQgdGhlbiBpbnNlcnQgdGhlbSBpbnRvIHRo ZSByb290IHRhYmxlICh1c2luZyBpdHMKKwkgKiB0dXBsZSBkZXNjcmlwdG9yKSBzbyB3ZSBnZXQg dHVwbGUgcm91dGluZy4KKwkgKgorCSAqIEZvciB0cmFkaXRpb25hbCB0YWJsZSBpbmhlcml0YW5j ZSwgd2UgcmVhZCBhbmQgaW5zZXJ0IGRpcmVjdGx5IGludG8gdGhpcworCSAqIHJlc3VsdFJlbElu Zm87IG5vIHR1cGxlIHJvdXRpbmcgdG8gdGhlIHBhcmVudCBpcyByZXF1aXJlZC4KKwkgKi8KKwlp ZiAocm9vdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYy0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQlUdXBsZUNvbnZlcnNpb25NYXAgKm1hcCA9IEV4 ZWNHZXRDaGlsZFRvUm9vdE1hcChyZXN1bHRSZWxJbmZvKTsKKwkJaWYgKG1hcCkKKwkJCWxlYWZT dGF0ZS0+ZnBfcmFuZ2VBdHRubyA9IG1hcC0+YXR0ck1hcC0+YXR0bnVtc1tmcG9TdGF0ZS0+ZnBf cmFuZ2VBdHRubyAtIDFdOworCQllbHNlCisJCQlsZWFmU3RhdGUtPmZwX3JhbmdlQXR0bm8gPSBm cG9TdGF0ZS0+ZnBfcmFuZ2VBdHRubzsKKwkJbGVhZlN0YXRlLT5mcF9MZWZ0b3ZlciA9IGZwb1N0 YXRlLT5mcF9MZWZ0b3ZlcjsKKwl9CisJZWxzZQorCXsKKwkJbGVhZlN0YXRlLT5mcF9yYW5nZUF0 dG5vID0gZnBvU3RhdGUtPmZwX3JhbmdlQXR0bm87CisJCWxlYWZTdGF0ZS0+ZnBfTGVmdG92ZXIg PQorCQkJRXhlY0luaXRFeHRyYVR1cGxlU2xvdChtdHN0YXRlLT5wcy5zdGF0ZSwKKwkJCQkJCQkJ ICAgUmVsYXRpb25HZXREZXNjcihyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MpLAorCQkJ CQkJCQkgICAmVFRTT3BzVmlydHVhbCk7CisJfQorCisJLyogRWFjaCBwYXJ0aXRpb24gbmVlZHMg YSBzbG90IG1hdGNoaW5nIGl0cyB0dXBsZSBkZXNjcmlwdG9yICovCisJbGVhZlN0YXRlLT5mcF9F eGlzdGluZyA9CisJCXRhYmxlX3Nsb3RfY3JlYXRlKHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9u RGVzYywKKwkJCQkJCSAgJm10c3RhdGUtPnBzLnN0YXRlLT5lc190dXBsZVRhYmxlKTsKKworCXJl c3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25PZiA9IGxlYWZTdGF0ZTsKKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjeHQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAxMzM1OTE4MGQy NS4uNTNjMTM4MzEwZGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC00NzcsNyArNDc3LDggQEAg dHlwZWRlZiBzdHJ1Y3QgRm9yUG9ydGlvbk9mU3RhdGUKIAlOb2RlVGFnCQl0eXBlOwogCiAJY2hh cgkgICAqZnBfcmFuZ2VOYW1lOwkvKiB0aGUgY29sdW1uIG5hbWVkIGluIEZPUiBQT1JUSU9OIE9G ICovCi0JT2lkCQkJZnBfcmFuZ2VUeXBlOwkvKiB0aGUgdHlwZSBvZiB0aGUgRk9SIFBPUlRJT04g T0YgZXhwcmVzc2lvbiAqLworCU9pZAkJCWZwX3JhbmdlVHlwZTsJLyogdGhlIGJhc2UgdHlwZSAo bm90IGRvbWFpbikgb2YgdGhlIEZPUgorCQkJCQkJCQkgKiBQT1JUSU9OIE9GIGV4cHJlc3Npb24g Ki8KIAlpbnQJCQlmcF9yYW5nZUF0dG5vOwkvKiB0aGUgYXR0bm8gb2YgdGhlIHJhbmdlIGNvbHVt biAqLwogCURhdHVtCQlmcF90YXJnZXRSYW5nZTsgLyogdGhlIHJhbmdlL211bHRpcmFuZ2UgZnJv bSBGT1IgUE9SVElPTiBPRiAqLwogCVR5cGVDYWNoZUVudHJ5ICpmcF9sZWZ0b3ZlcnN0eXBjYWNo ZTsJLyogdHlwZSBjYWNoZSBlbnRyeSBvZiB0aGUgcmFuZ2UgKi8KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9mb3JfcG9ydGlvbl9vZi5vdXQKaW5kZXggMzFmNzcyYzcyM2QuLjYwMmFjYTZl NmFhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zvcl9wb3J0aW9uX29m Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zvcl9wb3J0aW9uX29mLm91dApA QCAtMTM2NSw2ICsxMzY1LDkgQEAgJCQ7CiBDUkVBVEUgVFJJR0dFUiBmcG9fYmVmb3JlX3N0bXQK ICAgQkVGT1JFIElOU0VSVCBPUiBVUERBVEUgT1IgREVMRVRFIE9OIGZvcl9wb3J0aW9uX29mX3Rl c3QKICAgRk9SIEVBQ0ggU1RBVEVNRU5UIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihm YWxzZSwgZmFsc2UpOworQ1JFQVRFIFRSSUdHRVIgZnBvX2JlZm9yZV9zdG10MQorICBCRUZPUkUg VVBEQVRFIE9GIHZhbGlkX2F0IE9OIGZvcl9wb3J0aW9uX29mX3Rlc3QKKyAgRk9SIEVBQ0ggU1RB VEVNRU5UIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2UpOwogQ1JF QVRFIFRSSUdHRVIgZnBvX2FmdGVyX2luc2VydF9zdG10CiAgIEFGVEVSIElOU0VSVCBPTiBmb3Jf cG9ydGlvbl9vZl90ZXN0CiAgIEZPUiBFQUNIIFNUQVRFTUVOVCBFWEVDVVRFIFBST0NFRFVSRSBk dW1wX3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKQEAgLTEzNzgsNiArMTM4MSw5IEBAIENSRUFURSBU UklHR0VSIGZwb19hZnRlcl9kZWxldGVfc3RtdAogQ1JFQVRFIFRSSUdHRVIgZnBvX2JlZm9yZV9y b3cKICAgQkVGT1JFIElOU0VSVCBPUiBVUERBVEUgT1IgREVMRVRFIE9OIGZvcl9wb3J0aW9uX29m X3Rlc3QKICAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxz ZSwgZmFsc2UpOworQ1JFQVRFIFRSSUdHRVIgZnBvX2JlZm9yZV9yb3cxCisgIEJFRk9SRSBVUERB VEUgT0YgdmFsaWRfYXQgT04gZm9yX3BvcnRpb25fb2ZfdGVzdAorICBGT1IgRUFDSCBST1cgRVhF Q1VURSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBmYWxzZSk7CiBDUkVBVEUgVFJJR0dF UiBmcG9fYWZ0ZXJfaW5zZXJ0X3JvdwogICBBRlRFUiBJTlNFUlQgT04gZm9yX3BvcnRpb25fb2Zf dGVzdAogICBGT1IgRUFDSCBST1cgRVhFQ1VURSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNl LCBmYWxzZSk7CkBAIC0xMzk0LDkgKzE0MDAsMTUgQEAgVVBEQVRFIGZvcl9wb3J0aW9uX29mX3Rl c3QKIE5PVElDRTogIGZwb19iZWZvcmVfc3RtdDogQkVGT1JFIFVQREFURSBTVEFURU1FTlQ6CiBO T1RJQ0U6ICAgIG9sZDogPE5VTEw+CiBOT1RJQ0U6ICAgIG5ldzogPE5VTEw+CitOT1RJQ0U6ICBm cG9fYmVmb3JlX3N0bXQxOiBCRUZPUkUgVVBEQVRFIFNUQVRFTUVOVDoKK05PVElDRTogICAgb2xk OiA8TlVMTD4KK05PVElDRTogICAgbmV3OiA8TlVMTD4KIE5PVElDRTogIGZwb19iZWZvcmVfcm93 OiBCRUZPUkUgVVBEQVRFIFJPVzoKIE5PVElDRTogICAgb2xkOiBbMjAxOS0wMS0wMSwyMDMwLTAx LTAxKQogTk9USUNFOiAgICBuZXc6IFsyMDIxLTAxLTAxLDIwMjItMDEtMDEpCitOT1RJQ0U6ICBm cG9fYmVmb3JlX3JvdzE6IEJFRk9SRSBVUERBVEUgUk9XOgorTk9USUNFOiAgICBvbGQ6IFsyMDE5 LTAxLTAxLDIwMzAtMDEtMDEpCitOT1RJQ0U6ICAgIG5ldzogWzIwMjEtMDEtMDEsMjAyMi0wMS0w MSkKIE5PVElDRTogIGZwb19iZWZvcmVfc3RtdDogQkVGT1JFIElOU0VSVCBTVEFURU1FTlQ6CiBO T1RJQ0U6ICAgIG9sZDogPE5VTEw+CiBOT1RJQ0U6ICAgIG5ldzogPE5VTEw+CkBAIC0xOTg2LDYg KzE5OTgsNyBAQCBTRUxFQ1QgKiBGUk9NIGZvcl9wb3J0aW9uX29mX3Rlc3QyIE9SREVSIEJZIGlk LCB2YWxpZF9hdDsKIERST1AgVEFCTEUgZm9yX3BvcnRpb25fb2ZfdGVzdDI7CiBEUk9QIFRZUEUg bXlkYXRlcmFuZ2U7CiAtLSBUZXN0IEZPUiBQT1JUSU9OIE9GIGFnYWluc3QgYSBwYXJ0aXRpb25l ZCB0YWJsZS4KKy0tIEluY2x1ZGUgYSBHRU5FUkFURUQgU1RPUkVEIGNvbHVtbiB0byB0ZXN0IHVw ZGF0ZWRDb2xzIGNvbHVtbiBtYXBwaW5nLgogLS0gdGVtcG9yYWxfcGFydGl0aW9uZWRfMSBoYXMg dGhlIHNhbWUgYXR0bnVtcyBhcyB0aGUgcm9vdAogLS0gdGVtcG9yYWxfcGFydGl0aW9uZWRfMyBo YXMgdGhlIGRpZmZlcmVudCBhdHRudW1zIGZyb20gdGhlIHJvb3QKIC0tIHRlbXBvcmFsX3BhcnRp dGlvbmVkXzUgaGFzIHRoZSBkaWZmZXJlbnQgYXR0bnVtcyB0b28sIGJ1dCByZXZlcnNlZApAQCAt MTk5MywyOSArMjAwNiwzNCBAQCBDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWQgKAog ICBpZCBpbnQ0cmFuZ2UsCiAgIHZhbGlkX2F0IGRhdGVyYW5nZSwKICAgbmFtZSB0ZXh0LAorICBy YW5nZV9sZW4gaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKHVwcGVyKHZhbGlkX2F0KSAtIGxvd2Vy KHZhbGlkX2F0KSkgU1RPUkVELAogICBDT05TVFJBSU5UIHRlbXBvcmFsX3Bhcml0aW9uZWRfdXEg VU5JUVVFIChpZCwgdmFsaWRfYXQgV0lUSE9VVCBPVkVSTEFQUykKICkgUEFSVElUSU9OIEJZIExJ U1QgKGlkKTsKIENSRUFURSBUQUJMRSB0ZW1wb3JhbF9wYXJ0aXRpb25lZF8xIFBBUlRJVElPTiBP RiB0ZW1wb3JhbF9wYXJ0aXRpb25lZCBGT1IgVkFMVUVTIElOICgnWzEsMiknLCAnWzIsMyknKTsK IENSRUFURSBUQUJMRSB0ZW1wb3JhbF9wYXJ0aXRpb25lZF8zIFBBUlRJVElPTiBPRiB0ZW1wb3Jh bF9wYXJ0aXRpb25lZCBGT1IgVkFMVUVTIElOICgnWzMsNCknLCAnWzQsNSknKTsKIENSRUFURSBU QUJMRSB0ZW1wb3JhbF9wYXJ0aXRpb25lZF81IFBBUlRJVElPTiBPRiB0ZW1wb3JhbF9wYXJ0aXRp b25lZCBGT1IgVkFMVUVTIElOICgnWzUsNiknLCAnWzYsNyknKTsKIEFMVEVSIFRBQkxFIHRlbXBv cmFsX3BhcnRpdGlvbmVkIERFVEFDSCBQQVJUSVRJT04gdGVtcG9yYWxfcGFydGl0aW9uZWRfMzsK LUFMVEVSIFRBQkxFIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzMgRFJPUCBDT0xVTU4gaWQsIERST1Ag Q09MVU1OIHZhbGlkX2F0OworQUxURVIgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWRfMyBEUk9Q IENPTFVNTiBpZCwgRFJPUCBDT0xVTU4gdmFsaWRfYXQgQ0FTQ0FERTsKK05PVElDRTogIGRyb3Ag Y2FzY2FkZXMgdG8gY29sdW1uIHJhbmdlX2xlbiBvZiB0YWJsZSB0ZW1wb3JhbF9wYXJ0aXRpb25l ZF8zCiBBTFRFUiBUQUJMRSB0ZW1wb3JhbF9wYXJ0aXRpb25lZF8zIEFERCBDT0xVTU4gaWQgaW50 NHJhbmdlIE5PVCBOVUxMLCBBREQgQ09MVU1OIHZhbGlkX2F0IGRhdGVyYW5nZSBOT1QgTlVMTDsK K0FMVEVSIFRBQkxFIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzMgQUREIENPTFVNTiByYW5nZV9sZW4g aW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKHVwcGVyKHZhbGlkX2F0KSAtIGxvd2VyKHZhbGlkX2F0 KSkgU1RPUkVEOwogQUxURVIgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWQgQVRUQUNIIFBBUlRJ VElPTiB0ZW1wb3JhbF9wYXJ0aXRpb25lZF8zIEZPUiBWQUxVRVMgSU4gKCdbMyw0KScsICdbNCw1 KScpOwogQUxURVIgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWQgREVUQUNIIFBBUlRJVElPTiB0 ZW1wb3JhbF9wYXJ0aXRpb25lZF81OwotQUxURVIgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWRf NSBEUk9QIENPTFVNTiBpZCwgRFJPUCBDT0xVTU4gdmFsaWRfYXQ7CitBTFRFUiBUQUJMRSB0ZW1w b3JhbF9wYXJ0aXRpb25lZF81IERST1AgQ09MVU1OIGlkLCBEUk9QIENPTFVNTiB2YWxpZF9hdCBD QVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byBjb2x1bW4gcmFuZ2VfbGVuIG9mIHRh YmxlIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzUKIEFMVEVSIFRBQkxFIHRlbXBvcmFsX3BhcnRpdGlv bmVkXzUgQUREIENPTFVNTiB2YWxpZF9hdCBkYXRlcmFuZ2UgTk9UIE5VTEwsIEFERCBDT0xVTU4g aWQgaW50NHJhbmdlIE5PVCBOVUxMOworQUxURVIgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWRf NSBBREQgQ09MVU1OIHJhbmdlX2xlbiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAodXBwZXIodmFs aWRfYXQpIC0gbG93ZXIodmFsaWRfYXQpKSBTVE9SRUQ7CiBBTFRFUiBUQUJMRSB0ZW1wb3JhbF9w YXJ0aXRpb25lZCBBVFRBQ0ggUEFSVElUSU9OIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzUgRk9SIFZB TFVFUyBJTiAoJ1s1LDYpJywgJ1s2LDcpJyk7CiBJTlNFUlQgSU5UTyB0ZW1wb3JhbF9wYXJ0aXRp b25lZCAoaWQsIHZhbGlkX2F0LCBuYW1lKSBWQUxVRVMKICAgKCdbMSwyKScsIGRhdGVyYW5nZSgn MjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJyksICdvbmUnKSwKICAgKCdbMyw0KScsIGRhdGVyYW5n ZSgnMjAwMC0wMS0wMScsICcyMDEwLTAxLTAxJyksICd0aHJlZScpLAogICAoJ1s1LDYpJywgZGF0 ZXJhbmdlKCcyMDAwLTAxLTAxJywgJzIwMTAtMDEtMDEnKSwgJ2ZpdmUnKTsKIFNFTEVDVCAqIEZS T00gdGVtcG9yYWxfcGFydGl0aW9uZWQ7Ci0gIGlkICAgfCAgICAgICAgdmFsaWRfYXQgICAgICAg ICB8IG5hbWUgIAotLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0KLSBb MSwyKSB8IFsyMDAwLTAxLTAxLDIwMTAtMDEtMDEpIHwgb25lCi0gWzMsNCkgfCBbMjAwMC0wMS0w MSwyMDEwLTAxLTAxKSB8IHRocmVlCi0gWzUsNikgfCBbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKSB8 IGZpdmUKKyAgaWQgICB8ICAgICAgICB2YWxpZF9hdCAgICAgICAgIHwgbmFtZSAgfCByYW5nZV9s ZW4gCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0t LQorIFsxLDIpIHwgWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSkgfCBvbmUgICB8ICAgICAgMzY1Mwor IFszLDQpIHwgWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSkgfCB0aHJlZSB8ICAgICAgMzY1MworIFs1 LDYpIHwgWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSkgfCBmaXZlICB8ICAgICAgMzY1MwogKDMgcm93 cykKIAogLS0gVXBkYXRlIHdpdGhvdXQgbW92aW5nIHdpdGhpbiBwYXJ0aXRpb24gMQpAQCAtMjA0 Nyw1NCArMjA2NSwxNjUgQEAgVVBEQVRFIHRlbXBvcmFsX3BhcnRpdGlvbmVkIEZPUiBQT1JUSU9O IE9GIHZhbGlkX2F0IEZST00gJzIwMDAtMDYtMDEnIFRPICcyMDAwLTAKICAgV0hFUkUgaWQgPSAn WzUsNiknOwogLS0gVXBkYXRlIGFsbCBwYXJ0aXRpb25zIGF0IG9uY2UgKGVhY2ggd2l0aCBsZWZ0 b3ZlcnMpCiBTRUxFQ1QgKiBGUk9NIHRlbXBvcmFsX3BhcnRpdGlvbmVkIE9SREVSIEJZIGlkLCB2 YWxpZF9hdDsKLSAgaWQgICB8ICAgICAgICB2YWxpZF9hdCAgICAgICAgIHwgIG5hbWUgICAKLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0KLSBbMSwyKSB8IFsyMDAw LTAxLTAxLDIwMDAtMDMtMDEpIHwgb25lCi0gWzEsMikgfCBbMjAwMC0wMy0wMSwyMDAwLTA0LTAx KSB8IG9uZV4xCi0gWzEsMikgfCBbMjAwMC0wNC0wMSwyMDAwLTA2LTAxKSB8IG9uZQotIFsxLDIp IHwgWzIwMDAtMDctMDEsMjAxMC0wMS0wMSkgfCBvbmUKLSBbMiwzKSB8IFsyMDAwLTA2LTAxLDIw MDAtMDctMDEpIHwgdGhyZWVeMgotIFszLDQpIHwgWzIwMDAtMDEtMDEsMjAwMC0wMy0wMSkgfCB0 aHJlZQotIFszLDQpIHwgWzIwMDAtMDMtMDEsMjAwMC0wNC0wMSkgfCB0aHJlZV4xCi0gWzMsNCkg fCBbMjAwMC0wNC0wMSwyMDAwLTA2LTAxKSB8IHRocmVlCi0gWzMsNCkgfCBbMjAwMC0wNi0wMSwy MDAwLTA3LTAxKSB8IGZpdmVeMgotIFszLDQpIHwgWzIwMDAtMDctMDEsMjAxMC0wMS0wMSkgfCB0 aHJlZQotIFs0LDUpIHwgWzIwMDAtMDYtMDEsMjAwMC0wNy0wMSkgfCBvbmVeMgotIFs1LDYpIHwg WzIwMDAtMDEtMDEsMjAwMC0wMy0wMSkgfCBmaXZlCi0gWzUsNikgfCBbMjAwMC0wMy0wMSwyMDAw LTA0LTAxKSB8IGZpdmVeMQotIFs1LDYpIHwgWzIwMDAtMDQtMDEsMjAwMC0wNi0wMSkgfCBmaXZl Ci0gWzUsNikgfCBbMjAwMC0wNy0wMSwyMDEwLTAxLTAxKSB8IGZpdmUKKyAgaWQgICB8ICAgICAg ICB2YWxpZF9hdCAgICAgICAgIHwgIG5hbWUgICB8IHJhbmdlX2xlbiAKKy0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0KKyBbMSwyKSB8IFsyMDAw LTAxLTAxLDIwMDAtMDMtMDEpIHwgb25lICAgICB8ICAgICAgICA2MAorIFsxLDIpIHwgWzIwMDAt MDMtMDEsMjAwMC0wNC0wMSkgfCBvbmVeMSAgIHwgICAgICAgIDMxCisgWzEsMikgfCBbMjAwMC0w NC0wMSwyMDAwLTA2LTAxKSB8IG9uZSAgICAgfCAgICAgICAgNjEKKyBbMSwyKSB8IFsyMDAwLTA3 LTAxLDIwMTAtMDEtMDEpIHwgb25lICAgICB8ICAgICAgMzQ3MQorIFsyLDMpIHwgWzIwMDAtMDYt MDEsMjAwMC0wNy0wMSkgfCB0aHJlZV4yIHwgICAgICAgIDMwCisgWzMsNCkgfCBbMjAwMC0wMS0w MSwyMDAwLTAzLTAxKSB8IHRocmVlICAgfCAgICAgICAgNjAKKyBbMyw0KSB8IFsyMDAwLTAzLTAx LDIwMDAtMDQtMDEpIHwgdGhyZWVeMSB8ICAgICAgICAzMQorIFszLDQpIHwgWzIwMDAtMDQtMDEs MjAwMC0wNi0wMSkgfCB0aHJlZSAgIHwgICAgICAgIDYxCisgWzMsNCkgfCBbMjAwMC0wNi0wMSwy MDAwLTA3LTAxKSB8IGZpdmVeMiAgfCAgICAgICAgMzAKKyBbMyw0KSB8IFsyMDAwLTA3LTAxLDIw MTAtMDEtMDEpIHwgdGhyZWUgICB8ICAgICAgMzQ3MQorIFs0LDUpIHwgWzIwMDAtMDYtMDEsMjAw MC0wNy0wMSkgfCBvbmVeMiAgIHwgICAgICAgIDMwCisgWzUsNikgfCBbMjAwMC0wMS0wMSwyMDAw LTAzLTAxKSB8IGZpdmUgICAgfCAgICAgICAgNjAKKyBbNSw2KSB8IFsyMDAwLTAzLTAxLDIwMDAt MDQtMDEpIHwgZml2ZV4xICB8ICAgICAgICAzMQorIFs1LDYpIHwgWzIwMDAtMDQtMDEsMjAwMC0w Ni0wMSkgfCBmaXZlICAgIHwgICAgICAgIDYxCisgWzUsNikgfCBbMjAwMC0wNy0wMSwyMDEwLTAx LTAxKSB8IGZpdmUgICAgfCAgICAgIDM0NzEKICgxNSByb3dzKQogCiBTRUxFQ1QgKiBGUk9NIHRl bXBvcmFsX3BhcnRpdGlvbmVkXzEgT1JERVIgQlkgaWQsIHZhbGlkX2F0OwotICBpZCAgIHwgICAg ICAgIHZhbGlkX2F0ICAgICAgICAgfCAgbmFtZSAgIAotLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLQotIFsxLDIpIHwgWzIwMDAtMDEtMDEsMjAwMC0wMy0wMSkgfCBv bmUKLSBbMSwyKSB8IFsyMDAwLTAzLTAxLDIwMDAtMDQtMDEpIHwgb25lXjEKLSBbMSwyKSB8IFsy MDAwLTA0LTAxLDIwMDAtMDYtMDEpIHwgb25lCi0gWzEsMikgfCBbMjAwMC0wNy0wMSwyMDEwLTAx LTAxKSB8IG9uZQotIFsyLDMpIHwgWzIwMDAtMDYtMDEsMjAwMC0wNy0wMSkgfCB0aHJlZV4yCisg IGlkICAgfCAgICAgICAgdmFsaWRfYXQgICAgICAgICB8ICBuYW1lICAgfCByYW5nZV9sZW4gCist LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tCisg WzEsMikgfCBbMjAwMC0wMS0wMSwyMDAwLTAzLTAxKSB8IG9uZSAgICAgfCAgICAgICAgNjAKKyBb MSwyKSB8IFsyMDAwLTAzLTAxLDIwMDAtMDQtMDEpIHwgb25lXjEgICB8ICAgICAgICAzMQorIFsx LDIpIHwgWzIwMDAtMDQtMDEsMjAwMC0wNi0wMSkgfCBvbmUgICAgIHwgICAgICAgIDYxCisgWzEs MikgfCBbMjAwMC0wNy0wMSwyMDEwLTAxLTAxKSB8IG9uZSAgICAgfCAgICAgIDM0NzEKKyBbMiwz KSB8IFsyMDAwLTA2LTAxLDIwMDAtMDctMDEpIHwgdGhyZWVeMiB8ICAgICAgICAzMAogKDUgcm93 cykKIAogU0VMRUNUICogRlJPTSB0ZW1wb3JhbF9wYXJ0aXRpb25lZF8zIE9SREVSIEJZIGlkLCB2 YWxpZF9hdDsKLSAgbmFtZSAgIHwgIGlkICAgfCAgICAgICAgdmFsaWRfYXQgICAgICAgICAKLS0t LS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSB0aHJlZSAgIHwgWzMs NCkgfCBbMjAwMC0wMS0wMSwyMDAwLTAzLTAxKQotIHRocmVlXjEgfCBbMyw0KSB8IFsyMDAwLTAz LTAxLDIwMDAtMDQtMDEpCi0gdGhyZWUgICB8IFszLDQpIHwgWzIwMDAtMDQtMDEsMjAwMC0wNi0w MSkKLSBmaXZlXjIgIHwgWzMsNCkgfCBbMjAwMC0wNi0wMSwyMDAwLTA3LTAxKQotIHRocmVlICAg fCBbMyw0KSB8IFsyMDAwLTA3LTAxLDIwMTAtMDEtMDEpCi0gb25lXjIgICB8IFs0LDUpIHwgWzIw MDAtMDYtMDEsMjAwMC0wNy0wMSkKKyAgbmFtZSAgIHwgIGlkICAgfCAgICAgICAgdmFsaWRfYXQg ICAgICAgICB8IHJhbmdlX2xlbiAKKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0KKyB0aHJlZSAgIHwgWzMsNCkgfCBbMjAwMC0wMS0wMSwyMDAw LTAzLTAxKSB8ICAgICAgICA2MAorIHRocmVlXjEgfCBbMyw0KSB8IFsyMDAwLTAzLTAxLDIwMDAt MDQtMDEpIHwgICAgICAgIDMxCisgdGhyZWUgICB8IFszLDQpIHwgWzIwMDAtMDQtMDEsMjAwMC0w Ni0wMSkgfCAgICAgICAgNjEKKyBmaXZlXjIgIHwgWzMsNCkgfCBbMjAwMC0wNi0wMSwyMDAwLTA3 LTAxKSB8ICAgICAgICAzMAorIHRocmVlICAgfCBbMyw0KSB8IFsyMDAwLTA3LTAxLDIwMTAtMDEt MDEpIHwgICAgICAzNDcxCisgb25lXjIgICB8IFs0LDUpIHwgWzIwMDAtMDYtMDEsMjAwMC0wNy0w MSkgfCAgICAgICAgMzAKICg2IHJvd3MpCiAKIFNFTEVDVCAqIEZST00gdGVtcG9yYWxfcGFydGl0 aW9uZWRfNSBPUkRFUiBCWSBpZCwgdmFsaWRfYXQ7Ci0gIG5hbWUgIHwgICAgICAgIHZhbGlkX2F0 ICAgICAgICAgfCAgaWQgICAKLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLQotIGZpdmUgICB8IFsyMDAwLTAxLTAxLDIwMDAtMDMtMDEpIHwgWzUsNikKLSBmaXZlXjEg fCBbMjAwMC0wMy0wMSwyMDAwLTA0LTAxKSB8IFs1LDYpCi0gZml2ZSAgIHwgWzIwMDAtMDQtMDEs MjAwMC0wNi0wMSkgfCBbNSw2KQotIGZpdmUgICB8IFsyMDAwLTA3LTAxLDIwMTAtMDEtMDEpIHwg WzUsNikKKyAgbmFtZSAgfCAgICAgICAgdmFsaWRfYXQgICAgICAgICB8ICBpZCAgIHwgcmFuZ2Vf bGVuIAorLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0t LS0tCisgZml2ZSAgIHwgWzIwMDAtMDEtMDEsMjAwMC0wMy0wMSkgfCBbNSw2KSB8ICAgICAgICA2 MAorIGZpdmVeMSB8IFsyMDAwLTAzLTAxLDIwMDAtMDQtMDEpIHwgWzUsNikgfCAgICAgICAgMzEK KyBmaXZlICAgfCBbMjAwMC0wNC0wMSwyMDAwLTA2LTAxKSB8IFs1LDYpIHwgICAgICAgIDYxCisg Zml2ZSAgIHwgWzIwMDAtMDctMDEsMjAxMC0wMS0wMSkgfCBbNSw2KSB8ICAgICAgMzQ3MQogKDQg cm93cykKIAogRFJPUCBUQUJMRSB0ZW1wb3JhbF9wYXJ0aXRpb25lZDsKKy0tIFVQREFURSBGT1Ig UE9SVElPTiBPRiB3aXRoIGdlbmVyYXRlZCBzdG9yZWQgY29sdW1ucworLS0gVGhlIGdlbmVyYXRl ZCBjb2x1bW4gZGVwZW5kcyBvbiB0aGUgcmFuZ2UgY29sdW1uLCBzbyBpdCBtdXN0IGJlCistLSBy ZWNvbXB1dGVkIHdoZW4gRk9SIFBPUlRJT04gT0YgbmFycm93cyB0aGUgcmFuZ2UuCitDUkVBVEUg VEFCTEUgZnBvX2dlbmVyYXRlZCAoCisgIGlkIGludCwKKyAgdmFsaWRfYXQgaW50NHJhbmdlLAor ICByYW5nZV9sZW4gaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKHVwcGVyKHZhbGlkX2F0KSAtIGxv d2VyKHZhbGlkX2F0KSkgU1RPUkVELAorICByYW5nZV9sZW52IGludCBHRU5FUkFURUQgQUxXQVlT IEFTICh1cHBlcih2YWxpZF9hdCkgLSBsb3dlcih2YWxpZF9hdCkpCispOworSU5TRVJUIElOVE8g ZnBvX2dlbmVyYXRlZCAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKDEsICdbMTAsMTAwKScpOworU0VM RUNUICogRlJPTSBmcG9fZ2VuZXJhdGVkIE9SREVSIEJZIHZhbGlkX2F0OworIGlkIHwgdmFsaWRf YXQgfCByYW5nZV9sZW4gfCByYW5nZV9sZW52IAorLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLQorICAxIHwgWzEwLDEwMCkgfCAgICAgICAgOTAgfCAgICAgICAgIDkwCiso MSByb3cpCisKK0NSRUFURSBUUklHR0VSIGZwb19iZWZvcmVfcm93MQorICBCRUZPUkUgVVBEQVRF IE9GIHZhbGlkX2F0IE9OIGZwb19nZW5lcmF0ZWQKKyAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgUFJP Q0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2UpOworQ1JFQVRFIFRSSUdHRVIgZnBvX2Jl Zm9yZV9yb3cyCisgIEJFRk9SRSBVUERBVEUgT0YgdmFsaWRfYXQgT04gZnBvX2dlbmVyYXRlZAor ICBGT1IgRUFDSCBTVEFURU1FTlQgRVhFQ1VURSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNl LCBmYWxzZSk7CistLSBBZnRlciB0aGUgRk9SIFBPUlRJT04gT0YgKEZQTykgdXBkYXRlLCBhbGwg dGhyZWUgcmVzdWx0aW5nIHJvd3MKKy0tIChsZWZ0b3Zlci1iZWZvcmUsIHVwZGF0ZWQsIGFuZCBs ZWZ0b3Zlci1hZnRlcikgbXVzdCBjb250YWluIHRoZSBjb3JyZWN0CistLSB2YWx1ZXMgZm9yIHJh bmdlX2xlbiBhbmQgcmFuZ2VfbGVudi4KKy0tIFRyaWdnZXJzIGZwb19iZWZvcmVfcm93MSBhbmQg ZnBvX2JlZm9yZV9yb3cyIHNob3VsZCBhbHNvIGJlIGZpcmVkLgorVVBEQVRFIGZwb19nZW5lcmF0 ZWQKKyAgRk9SIFBPUlRJT04gT0YgdmFsaWRfYXQgRlJPTSAzMCBUTyA3MAorICBTRVQgaWQgPSAy OworTk9USUNFOiAgZnBvX2JlZm9yZV9yb3cyOiBCRUZPUkUgVVBEQVRFIFNUQVRFTUVOVDoKK05P VElDRTogICAgb2xkOiA8TlVMTD4KK05PVElDRTogICAgbmV3OiA8TlVMTD4KK05PVElDRTogIGZw b19iZWZvcmVfcm93MTogQkVGT1JFIFVQREFURSBST1c6CitOT1RJQ0U6ICAgIG9sZDogWzEwLDEw MCkKK05PVElDRTogICAgbmV3OiBbMzAsNzApCitTRUxFQ1QgKiBGUk9NIGZwb19nZW5lcmF0ZWQg T1JERVIgQlkgdmFsaWRfYXQ7CisgaWQgfCB2YWxpZF9hdCB8IHJhbmdlX2xlbiB8IHJhbmdlX2xl bnYgCistLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgIDEgfCBbMTAs MzApICB8ICAgICAgICAyMCB8ICAgICAgICAgMjAKKyAgMiB8IFszMCw3MCkgIHwgICAgICAgIDQw IHwgICAgICAgICA0MAorICAxIHwgWzcwLDEwMCkgfCAgICAgICAgMzAgfCAgICAgICAgIDMwCiso MyByb3dzKQorCistLSBBbHNvIHRlc3Qgd2l0aCBhIGdlbmVyYXRlZCBjb2x1bW4gdGhhdCByZWZl cmVuY2VzIGJvdGggYSBTRVQgY29sdW1uCistLSBhbmQgdGhlIHJhbmdlIGNvbHVtbi4KK0RST1Ag VEFCTEUgZnBvX2dlbmVyYXRlZDsKK0NSRUFURSBUQUJMRSBmcG9fZ2VuZXJhdGVkICgKKyAgaWQg aW50LAorICB2YWxpZF9hdCBpbnQ0cmFuZ2UsCisgIGlkX3BsdXNfbGVuIGludCBHRU5FUkFURUQg QUxXQVlTIEFTIChpZCArIHVwcGVyKHZhbGlkX2F0KSAtIGxvd2VyKHZhbGlkX2F0KSkgU1RPUkVE LAorICBpZF9wbHVzX2xlbnYgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGlkICsgdXBwZXIodmFs aWRfYXQpIC0gbG93ZXIodmFsaWRfYXQpKQorKTsKK0lOU0VSVCBJTlRPIGZwb19nZW5lcmF0ZWQg KGlkLCB2YWxpZF9hdCkgVkFMVUVTICgxLCAnWzEwLDEwMCknKTsKK1NFTEVDVCAqIEZST00gZnBv X2dlbmVyYXRlZCBPUkRFUiBCWSB2YWxpZF9hdDsKKyBpZCB8IHZhbGlkX2F0IHwgaWRfcGx1c19s ZW4gfCBpZF9wbHVzX2xlbnYgCistLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLQorICAxIHwgWzEwLDEwMCkgfCAgICAgICAgICA5MSB8ICAgICAgICAgICA5MQorKDEg cm93KQorCitVUERBVEUgZnBvX2dlbmVyYXRlZAorICBGT1IgUE9SVElPTiBPRiB2YWxpZF9hdCBG Uk9NIDMwIFRPIDcwCisgIFNFVCBpZCA9IDI7CitTRUxFQ1QgKiBGUk9NIGZwb19nZW5lcmF0ZWQg T1JERVIgQlkgdmFsaWRfYXQ7CisgaWQgfCB2YWxpZF9hdCB8IGlkX3BsdXNfbGVuIHwgaWRfcGx1 c19sZW52IAorLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyAg MSB8IFsxMCwzMCkgIHwgICAgICAgICAgMjEgfCAgICAgICAgICAgMjEKKyAgMiB8IFszMCw3MCkg IHwgICAgICAgICAgNDIgfCAgICAgICAgICAgNDIKKyAgMSB8IFs3MCwxMDApIHwgICAgICAgICAg MzEgfCAgICAgICAgICAgMzEKKygzIHJvd3MpCisKK0RST1AgVEFCTEUgZnBvX2dlbmVyYXRlZDsK Ky0tIFVQREFURSBGT1IgUE9SVElPTiBPRiB3aXRoIHRhYmxlIGluaGVyaXRhbmNlCistLSBMZWZ0 b3ZlciByb3dzIG11c3Qgc3RheSBpbiB0aGUgY2hpbGQgdGFibGUsIHByZXNlcnZpbmcgY2hpbGQt c3BlY2lmaWMgY29sdW1ucy4KK0NSRUFURSBUQUJMRSBmcG9faW5oX3BhcmVudCAoCisgIGlkIGlu dDRyYW5nZSwKKyAgdmFsaWRfYXQgZGF0ZXJhbmdlLAorICBuYW1lIHRleHQKKyk7CitDUkVBVEUg VEFCTEUgZnBvX2luaF9jaGlsZCAoCisgIGRlc2NyaXB0aW9uIHRleHQKKykgSU5IRVJJVFMgKGZw b19pbmhfcGFyZW50KTsKK0lOU0VSVCBJTlRPIGZwb19pbmhfY2hpbGQgKGlkLCB2YWxpZF9hdCwg bmFtZSwgZGVzY3JpcHRpb24pIFZBTFVFUworICAoJ1sxLDIpJywgJ1syMDE4LTAxLTAxLDIwMTkt MDEtMDEpJywgJ29uZScsICdpbml0aWFsJyk7CistLSBVcGRhdGUgdGFyZ2V0cyB0aGUgcGFyZW50 OyB0aGUgbWF0Y2hpbmcgcm93IGxpdmVzIGluIHRoZSBjaGlsZC4KK1VQREFURSBmcG9faW5oX3Bh cmVudCBGT1IgUE9SVElPTiBPRiB2YWxpZF9hdCBGUk9NICcyMDE4LTA0LTAxJyBUTyAnMjAxOC0x MC0wMScKKyAgU0VUIG5hbWUgPSAnb25lXjEnOworLS0gQWxsIHRocmVlIHJvd3Mgc2hvdWxkIGJl IGluIHRoZSBjaGlsZCwgd2l0aCBkZXNjcmlwdGlvbiBwcmVzZXJ2ZWQuCitTRUxFQ1QgdGFibGVv aWQ6OnJlZ2NsYXNzLCAqIEZST00gZnBvX2luaF9wYXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7Cisg ICB0YWJsZW9pZCAgICB8ICBpZCAgIHwgICAgICAgIHZhbGlkX2F0ICAgICAgICAgfCBuYW1lICAK Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LQorIGZwb19pbmhfY2hpbGQgfCBbMSwyKSB8IFsyMDE4LTAxLTAxLDIwMTgtMDQtMDEpIHwgb25l CisgZnBvX2luaF9jaGlsZCB8IFsxLDIpIHwgWzIwMTgtMDQtMDEsMjAxOC0xMC0wMSkgfCBvbmVe MQorIGZwb19pbmhfY2hpbGQgfCBbMSwyKSB8IFsyMDE4LTEwLTAxLDIwMTktMDEtMDEpIHwgb25l CisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZwb19pbmhfY2hpbGQgT1JERVIgQlkgdmFsaWRf YXQ7CisgIGlkICAgfCAgICAgICAgdmFsaWRfYXQgICAgICAgICB8IG5hbWUgIHwgZGVzY3JpcHRp b24gCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0t LS0tCisgWzEsMikgfCBbMjAxOC0wMS0wMSwyMDE4LTA0LTAxKSB8IG9uZSAgIHwgaW5pdGlhbAor IFsxLDIpIHwgWzIwMTgtMDQtMDEsMjAxOC0xMC0wMSkgfCBvbmVeMSB8IGluaXRpYWwKKyBbMSwy KSB8IFsyMDE4LTEwLTAxLDIwMTktMDEtMDEpIHwgb25lICAgfCBpbml0aWFsCisoMyByb3dzKQor CistLSBObyByb3dzIHNob3VsZCBoYXZlIGxlYWtlZCBpbnRvIHRoZSBwYXJlbnQuCitTRUxFQ1Qg KiBGUk9NIE9OTFkgZnBvX2luaF9wYXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7CisgaWQgfCB2YWxp ZF9hdCB8IG5hbWUgCistLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitEUk9QIFRB QkxFIGZwb19pbmhfcGFyZW50IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIGZwb19pbmhfY2hpbGQKIFJFU0VUIGRhdGVzdHlsZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zv cl9wb3J0aW9uX29mLnNxbAppbmRleCBkNDA2MmFjZjFkMS4uMDAxZTgzZTRjZTQgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9mb3JfcG9ydGlvbl9vZi5zcWwKQEAgLTkxMyw2ICs5MTMsMTAgQEAgQ1JF QVRFIFRSSUdHRVIgZnBvX2JlZm9yZV9zdG10CiAgIEJFRk9SRSBJTlNFUlQgT1IgVVBEQVRFIE9S IERFTEVURSBPTiBmb3JfcG9ydGlvbl9vZl90ZXN0CiAgIEZPUiBFQUNIIFNUQVRFTUVOVCBFWEVD VVRFIFBST0NFRFVSRSBkdW1wX3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKIAorQ1JFQVRFIFRSSUdH RVIgZnBvX2JlZm9yZV9zdG10MQorICBCRUZPUkUgVVBEQVRFIE9GIHZhbGlkX2F0IE9OIGZvcl9w b3J0aW9uX29mX3Rlc3QKKyAgRk9SIEVBQ0ggU1RBVEVNRU5UIEVYRUNVVEUgUFJPQ0VEVVJFIGR1 bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2UpOworCiBDUkVBVEUgVFJJR0dFUiBmcG9fYWZ0ZXJfaW5z ZXJ0X3N0bXQKICAgQUZURVIgSU5TRVJUIE9OIGZvcl9wb3J0aW9uX29mX3Rlc3QKICAgRk9SIEVB Q0ggU1RBVEVNRU5UIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2Up OwpAQCAtOTMxLDYgKzkzNSwxMCBAQCBDUkVBVEUgVFJJR0dFUiBmcG9fYmVmb3JlX3JvdwogICBC RUZPUkUgSU5TRVJUIE9SIFVQREFURSBPUiBERUxFVEUgT04gZm9yX3BvcnRpb25fb2ZfdGVzdAog ICBGT1IgRUFDSCBST1cgRVhFQ1VURSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBmYWxz ZSk7CiAKK0NSRUFURSBUUklHR0VSIGZwb19iZWZvcmVfcm93MQorICBCRUZPUkUgVVBEQVRFIE9G IHZhbGlkX2F0IE9OIGZvcl9wb3J0aW9uX29mX3Rlc3QKKyAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUg UFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2UpOworCiBDUkVBVEUgVFJJR0dFUiBm cG9fYWZ0ZXJfaW5zZXJ0X3JvdwogICBBRlRFUiBJTlNFUlQgT04gZm9yX3BvcnRpb25fb2ZfdGVz dAogICBGT1IgRUFDSCBST1cgRVhFQ1VURSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBm YWxzZSk7CkBAIC0xMjkyLDYgKzEzMDAsNyBAQCBEUk9QIFRBQkxFIGZvcl9wb3J0aW9uX29mX3Rl c3QyOwogRFJPUCBUWVBFIG15ZGF0ZXJhbmdlOwogCiAtLSBUZXN0IEZPUiBQT1JUSU9OIE9GIGFn YWluc3QgYSBwYXJ0aXRpb25lZCB0YWJsZS4KKy0tIEluY2x1ZGUgYSBHRU5FUkFURUQgU1RPUkVE IGNvbHVtbiB0byB0ZXN0IHVwZGF0ZWRDb2xzIGNvbHVtbiBtYXBwaW5nLgogLS0gdGVtcG9yYWxf cGFydGl0aW9uZWRfMSBoYXMgdGhlIHNhbWUgYXR0bnVtcyBhcyB0aGUgcm9vdAogLS0gdGVtcG9y YWxfcGFydGl0aW9uZWRfMyBoYXMgdGhlIGRpZmZlcmVudCBhdHRudW1zIGZyb20gdGhlIHJvb3QK IC0tIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzUgaGFzIHRoZSBkaWZmZXJlbnQgYXR0bnVtcyB0b28s IGJ1dCByZXZlcnNlZApAQCAtMTMwMCw2ICsxMzA5LDcgQEAgQ1JFQVRFIFRBQkxFIHRlbXBvcmFs X3BhcnRpdGlvbmVkICgKICAgaWQgaW50NHJhbmdlLAogICB2YWxpZF9hdCBkYXRlcmFuZ2UsCiAg IG5hbWUgdGV4dCwKKyAgcmFuZ2VfbGVuIGludCBHRU5FUkFURUQgQUxXQVlTIEFTICh1cHBlcih2 YWxpZF9hdCkgLSBsb3dlcih2YWxpZF9hdCkpIFNUT1JFRCwKICAgQ09OU1RSQUlOVCB0ZW1wb3Jh bF9wYXJpdGlvbmVkX3VxIFVOSVFVRSAoaWQsIHZhbGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMpCiAp IFBBUlRJVElPTiBCWSBMSVNUIChpZCk7CiBDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9u ZWRfMSBQQVJUSVRJT04gT0YgdGVtcG9yYWxfcGFydGl0aW9uZWQgRk9SIFZBTFVFUyBJTiAoJ1sx LDIpJywgJ1syLDMpJyk7CkBAIC0xMzA3LDEzICsxMzE3LDE1IEBAIENSRUFURSBUQUJMRSB0ZW1w b3JhbF9wYXJ0aXRpb25lZF8zIFBBUlRJVElPTiBPRiB0ZW1wb3JhbF9wYXJ0aXRpb25lZCBGT1Ig VkFMVUVTCiBDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWRfNSBQQVJUSVRJT04gT0Yg dGVtcG9yYWxfcGFydGl0aW9uZWQgRk9SIFZBTFVFUyBJTiAoJ1s1LDYpJywgJ1s2LDcpJyk7CiAK IEFMVEVSIFRBQkxFIHRlbXBvcmFsX3BhcnRpdGlvbmVkIERFVEFDSCBQQVJUSVRJT04gdGVtcG9y YWxfcGFydGl0aW9uZWRfMzsKLUFMVEVSIFRBQkxFIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzMgRFJP UCBDT0xVTU4gaWQsIERST1AgQ09MVU1OIHZhbGlkX2F0OworQUxURVIgVEFCTEUgdGVtcG9yYWxf cGFydGl0aW9uZWRfMyBEUk9QIENPTFVNTiBpZCwgRFJPUCBDT0xVTU4gdmFsaWRfYXQgQ0FTQ0FE RTsKIEFMVEVSIFRBQkxFIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzMgQUREIENPTFVNTiBpZCBpbnQ0 cmFuZ2UgTk9UIE5VTEwsIEFERCBDT0xVTU4gdmFsaWRfYXQgZGF0ZXJhbmdlIE5PVCBOVUxMOwor QUxURVIgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWRfMyBBREQgQ09MVU1OIHJhbmdlX2xlbiBp bnQgR0VORVJBVEVEIEFMV0FZUyBBUyAodXBwZXIodmFsaWRfYXQpIC0gbG93ZXIodmFsaWRfYXQp KSBTVE9SRUQ7CiBBTFRFUiBUQUJMRSB0ZW1wb3JhbF9wYXJ0aXRpb25lZCBBVFRBQ0ggUEFSVElU SU9OIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzMgRk9SIFZBTFVFUyBJTiAoJ1szLDQpJywgJ1s0LDUp Jyk7CiAKIEFMVEVSIFRBQkxFIHRlbXBvcmFsX3BhcnRpdGlvbmVkIERFVEFDSCBQQVJUSVRJT04g dGVtcG9yYWxfcGFydGl0aW9uZWRfNTsKLUFMVEVSIFRBQkxFIHRlbXBvcmFsX3BhcnRpdGlvbmVk XzUgRFJPUCBDT0xVTU4gaWQsIERST1AgQ09MVU1OIHZhbGlkX2F0OworQUxURVIgVEFCTEUgdGVt cG9yYWxfcGFydGl0aW9uZWRfNSBEUk9QIENPTFVNTiBpZCwgRFJPUCBDT0xVTU4gdmFsaWRfYXQg Q0FTQ0FERTsKIEFMVEVSIFRBQkxFIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzUgQUREIENPTFVNTiB2 YWxpZF9hdCBkYXRlcmFuZ2UgTk9UIE5VTEwsIEFERCBDT0xVTU4gaWQgaW50NHJhbmdlIE5PVCBO VUxMOworQUxURVIgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWRfNSBBREQgQ09MVU1OIHJhbmdl X2xlbiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAodXBwZXIodmFsaWRfYXQpIC0gbG93ZXIodmFs aWRfYXQpKSBTVE9SRUQ7CiBBTFRFUiBUQUJMRSB0ZW1wb3JhbF9wYXJ0aXRpb25lZCBBVFRBQ0gg UEFSVElUSU9OIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzUgRk9SIFZBTFVFUyBJTiAoJ1s1LDYpJywg J1s2LDcpJyk7CiAKIElOU0VSVCBJTlRPIHRlbXBvcmFsX3BhcnRpdGlvbmVkIChpZCwgdmFsaWRf YXQsIG5hbWUpIFZBTFVFUwpAQCAtMTM2NSw0ICsxMzc3LDgwIEBAIFNFTEVDVCAqIEZST00gdGVt cG9yYWxfcGFydGl0aW9uZWRfNSBPUkRFUiBCWSBpZCwgdmFsaWRfYXQ7CiAKIERST1AgVEFCTEUg dGVtcG9yYWxfcGFydGl0aW9uZWQ7CiAKKy0tIFVQREFURSBGT1IgUE9SVElPTiBPRiB3aXRoIGdl bmVyYXRlZCBzdG9yZWQgY29sdW1ucworLS0gVGhlIGdlbmVyYXRlZCBjb2x1bW4gZGVwZW5kcyBv biB0aGUgcmFuZ2UgY29sdW1uLCBzbyBpdCBtdXN0IGJlCistLSByZWNvbXB1dGVkIHdoZW4gRk9S IFBPUlRJT04gT0YgbmFycm93cyB0aGUgcmFuZ2UuCitDUkVBVEUgVEFCTEUgZnBvX2dlbmVyYXRl ZCAoCisgIGlkIGludCwKKyAgdmFsaWRfYXQgaW50NHJhbmdlLAorICByYW5nZV9sZW4gaW50IEdF TkVSQVRFRCBBTFdBWVMgQVMgKHVwcGVyKHZhbGlkX2F0KSAtIGxvd2VyKHZhbGlkX2F0KSkgU1RP UkVELAorICByYW5nZV9sZW52IGludCBHRU5FUkFURUQgQUxXQVlTIEFTICh1cHBlcih2YWxpZF9h dCkgLSBsb3dlcih2YWxpZF9hdCkpCispOworSU5TRVJUIElOVE8gZnBvX2dlbmVyYXRlZCAoaWQs IHZhbGlkX2F0KSBWQUxVRVMgKDEsICdbMTAsMTAwKScpOworCitTRUxFQ1QgKiBGUk9NIGZwb19n ZW5lcmF0ZWQgT1JERVIgQlkgdmFsaWRfYXQ7CisKK0NSRUFURSBUUklHR0VSIGZwb19iZWZvcmVf cm93MQorICBCRUZPUkUgVVBEQVRFIE9GIHZhbGlkX2F0IE9OIGZwb19nZW5lcmF0ZWQKKyAgRk9S IEVBQ0ggUk9XIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2UpOwor CitDUkVBVEUgVFJJR0dFUiBmcG9fYmVmb3JlX3JvdzIKKyAgQkVGT1JFIFVQREFURSBPRiB2YWxp ZF9hdCBPTiBmcG9fZ2VuZXJhdGVkCisgIEZPUiBFQUNIIFNUQVRFTUVOVCBFWEVDVVRFIFBST0NF RFVSRSBkdW1wX3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKKworLS0gQWZ0ZXIgdGhlIEZPUiBQT1JU SU9OIE9GIChGUE8pIHVwZGF0ZSwgYWxsIHRocmVlIHJlc3VsdGluZyByb3dzCistLSAobGVmdG92 ZXItYmVmb3JlLCB1cGRhdGVkLCBhbmQgbGVmdG92ZXItYWZ0ZXIpIG11c3QgY29udGFpbiB0aGUg Y29ycmVjdAorLS0gdmFsdWVzIGZvciByYW5nZV9sZW4gYW5kIHJhbmdlX2xlbnYuCistLSBUcmln Z2VycyBmcG9fYmVmb3JlX3JvdzEgYW5kIGZwb19iZWZvcmVfcm93MiBzaG91bGQgYWxzbyBiZSBm aXJlZC4KK1VQREFURSBmcG9fZ2VuZXJhdGVkCisgIEZPUiBQT1JUSU9OIE9GIHZhbGlkX2F0IEZS T00gMzAgVE8gNzAKKyAgU0VUIGlkID0gMjsKKworU0VMRUNUICogRlJPTSBmcG9fZ2VuZXJhdGVk IE9SREVSIEJZIHZhbGlkX2F0OworCistLSBBbHNvIHRlc3Qgd2l0aCBhIGdlbmVyYXRlZCBjb2x1 bW4gdGhhdCByZWZlcmVuY2VzIGJvdGggYSBTRVQgY29sdW1uCistLSBhbmQgdGhlIHJhbmdlIGNv bHVtbi4KK0RST1AgVEFCTEUgZnBvX2dlbmVyYXRlZDsKK0NSRUFURSBUQUJMRSBmcG9fZ2VuZXJh dGVkICgKKyAgaWQgaW50LAorICB2YWxpZF9hdCBpbnQ0cmFuZ2UsCisgIGlkX3BsdXNfbGVuIGlu dCBHRU5FUkFURUQgQUxXQVlTIEFTIChpZCArIHVwcGVyKHZhbGlkX2F0KSAtIGxvd2VyKHZhbGlk X2F0KSkgU1RPUkVELAorICBpZF9wbHVzX2xlbnYgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGlk ICsgdXBwZXIodmFsaWRfYXQpIC0gbG93ZXIodmFsaWRfYXQpKQorKTsKKworSU5TRVJUIElOVE8g ZnBvX2dlbmVyYXRlZCAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKDEsICdbMTAsMTAwKScpOworU0VM RUNUICogRlJPTSBmcG9fZ2VuZXJhdGVkIE9SREVSIEJZIHZhbGlkX2F0OworCitVUERBVEUgZnBv X2dlbmVyYXRlZAorICBGT1IgUE9SVElPTiBPRiB2YWxpZF9hdCBGUk9NIDMwIFRPIDcwCisgIFNF VCBpZCA9IDI7CitTRUxFQ1QgKiBGUk9NIGZwb19nZW5lcmF0ZWQgT1JERVIgQlkgdmFsaWRfYXQ7 CitEUk9QIFRBQkxFIGZwb19nZW5lcmF0ZWQ7CisKKworLS0gVVBEQVRFIEZPUiBQT1JUSU9OIE9G IHdpdGggdGFibGUgaW5oZXJpdGFuY2UKKy0tIExlZnRvdmVyIHJvd3MgbXVzdCBzdGF5IGluIHRo ZSBjaGlsZCB0YWJsZSwgcHJlc2VydmluZyBjaGlsZC1zcGVjaWZpYyBjb2x1bW5zLgorQ1JFQVRF IFRBQkxFIGZwb19pbmhfcGFyZW50ICgKKyAgaWQgaW50NHJhbmdlLAorICB2YWxpZF9hdCBkYXRl cmFuZ2UsCisgIG5hbWUgdGV4dAorKTsKK0NSRUFURSBUQUJMRSBmcG9faW5oX2NoaWxkICgKKyAg ZGVzY3JpcHRpb24gdGV4dAorKSBJTkhFUklUUyAoZnBvX2luaF9wYXJlbnQpOworSU5TRVJUIElO VE8gZnBvX2luaF9jaGlsZCAoaWQsIHZhbGlkX2F0LCBuYW1lLCBkZXNjcmlwdGlvbikgVkFMVUVT CisgICgnWzEsMiknLCAnWzIwMTgtMDEtMDEsMjAxOS0wMS0wMSknLCAnb25lJywgJ2luaXRpYWwn KTsKKworLS0gVXBkYXRlIHRhcmdldHMgdGhlIHBhcmVudDsgdGhlIG1hdGNoaW5nIHJvdyBsaXZl cyBpbiB0aGUgY2hpbGQuCitVUERBVEUgZnBvX2luaF9wYXJlbnQgRk9SIFBPUlRJT04gT0YgdmFs aWRfYXQgRlJPTSAnMjAxOC0wNC0wMScgVE8gJzIwMTgtMTAtMDEnCisgIFNFVCBuYW1lID0gJ29u ZV4xJzsKKworLS0gQWxsIHRocmVlIHJvd3Mgc2hvdWxkIGJlIGluIHRoZSBjaGlsZCwgd2l0aCBk ZXNjcmlwdGlvbiBwcmVzZXJ2ZWQuCitTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00g ZnBvX2luaF9wYXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7CitTRUxFQ1QgKiBGUk9NIGZwb19pbmhf Y2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7CistLSBObyByb3dzIHNob3VsZCBoYXZlIGxlYWtlZCBp bnRvIHRoZSBwYXJlbnQuCitTRUxFQ1QgKiBGUk9NIE9OTFkgZnBvX2luaF9wYXJlbnQgT1JERVIg QlkgdmFsaWRfYXQ7CisKK0RST1AgVEFCTEUgZnBvX2luaF9wYXJlbnQgQ0FTQ0FERTsKKwogUkVT RVQgZGF0ZXN0eWxlOwotLSAKMi40Ny4zCgo= --000000000000624c36064fd5c51a--