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 1w6Y19-004PEj-0Y for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Mar 2026 18:04:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w6Y17-00ErxT-0k for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Mar 2026 18:04:13 +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 1w6Y16-00ErxL-1l for pgsql-hackers@lists.postgresql.org; Sat, 28 Mar 2026 18:04:13 +0000 Received: from mail-oo1-xc2a.google.com ([2607:f8b0:4864:20::c2a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w6Y14-00000001Wlk-30RF for pgsql-hackers@postgresql.org; Sat, 28 Mar 2026 18:04:11 +0000 Received: by mail-oo1-xc2a.google.com with SMTP id 006d021491bc7-67deb70bc76so1843942eaf.2 for ; Sat, 28 Mar 2026 11:04:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774721050; cv=none; d=google.com; s=arc-20240605; b=joRdI1ywd0C35QPkXQkreHM96BJ6shBo5zUC0mG11aytbMdBT+tMc/kw1V2+XxkVtA Yvp95o5UhGau4MlE3pkscjqwFOq50U7LcM51YZprgg73XZMLA91+WtJ6rw5moKvz2iQs Skw+RGr2eWEwoB2yqdGbAHSznqessskCr81l35OwcZgHg4Bc66P8nduV7KM5l9fIlyb+ H/t0uo50f7QwVuIRKMtILxAclG4KkP1RzQy43FqQBdYeHJP5GMakIBa757JPGcQiOkAY cEmJyp3wLfn7wUDcIZcEib6b3kVhHZ2veVNWjTU4W/k2SG466DdW60wnlMjgwLXzFp/b fXmw== 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=HUfOLG0M3MpMSPmsSobPVZJpEotu6fDxVjcQeFyNhdg=; fh=DeN8H4MshaMacNQ+PmRqBr+6UGNnjbBmdgmOZ2tXbvo=; b=F40YA5KL5ZeGGZVZRlFG3hIIW7rSzVcurUsuZfGijB/q6B+UVDcKwY/lUuu3s7oWa+ 9hoh4siEEjrzPWD69vv021q5PPWhxfnSHUEjzsM8aB9p1fcDn6f9zAq9Q6ryvzdQOpAg w/8HL2GbNRcGJCxudVeOBzuyoQ4K0vOatpTTap5u595w5zGk90cbfEsNy1qftxF9KX3M vnJ2fH55PqA9JOLqV2GxYSMJbcbzJqHOCd0w9JExqu47znbMEVg78tbPRzEu8nnTKGRw kQXM6CNFlvJXJibvEw13SYkMP0mwAzkUh8OqYsEmL3ByBPXnbohH+MFBHr5S20O/7pze LgWQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774721050; x=1775325850; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=HUfOLG0M3MpMSPmsSobPVZJpEotu6fDxVjcQeFyNhdg=; b=lu4XSNPqxobrC31cTObNLVbOzGr9CrNDp8sBSdqBS6fCsFW+KXzsgzLHRP5ztw6PlK uNLaqkiQIVxMFUlkX/634K/F7k5w3nI6Axh5JaYuc7/po2qZ4sHOi/xGAbI1nDINpQPK 6bIee7/SA/M0Cz3q2tmJBx5dshX5xQasm8/JauqZXPNSYZVXGJjBYOJt6Y9gr5pz96J4 uEk1eu+rrJf+QvbpHDgLORiFgh0CQZiWBTLL55nLZ3X6zR2D8TWGUqeIoYXoWIT6ce1t 1new6nk1DHT2UK29RkaF+lNiKckcg2BI9vAquAE0MDnI0/bpcPgpvcn3xfGxKjWzCjPP 4OAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774721050; x=1775325850; 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=HUfOLG0M3MpMSPmsSobPVZJpEotu6fDxVjcQeFyNhdg=; b=fjvqxvqppR0XyR+JcgDCFPoqHpExksldctf4rkKn3ilWMx+U9vYkrm87ccM6YWPP4o G6ilZpzOomn+XD0vOisWl4Trsz4LRy4KoUFYl6Fg4t/t/MiWpiuArYiufg43G24WbQ8K hdaivRe7V24tu8vhXcYdmxTaWo0napVW2nB29ui3BgAijNNjsfEwXG1zky4M94Ebf0sC XhIIxQa0WAQc9YIXHbdMlwiZdohYamxJmGL657KlyXzkSleyLH7d4ky4dTudLgUIczF+ JaJtHSCnYr3m1LHrtG0uUpUg8zqLIVlb58Woq6UwbCK/D1e4jiMwKkgbxFGMnMPjFVPY /0Zw== X-Forwarded-Encrypted: i=1; AJvYcCX9abiPmxbeTFjKBxHRDwguH+RHjz4bIeTEXT2aWBs+AXVIKD70JmpolgGfOp3vN6t0iKA/ZRQRqo1tznE+@postgresql.org X-Gm-Message-State: AOJu0Yxly6LsXNBJBO90f8UnlPNR40B1R9sXfNpvTJVaBT/mzoRc7mnj 8CjfzNlv5UFyEwOy3EHkXPXW7FiU9u//M8YlTiJMmo4nULAnkucGNYkX2T1Bck1Dr9lf39BfjkK mSHyC8mp2fYnR2NuStVVuDCn1mLcMJ60= X-Gm-Gg: ATEYQzxgzO1fxiQ8ZBN3+8lADGA3M4gepyfphLGkMC9hAvq1iCayROhTShkzpnv9+qi nQrAwt166+ACo4QtgzTLGNV07aXwXy0nGdF8P003oAXj+nBnWedMQQS5ShJeFc+tncb1CPo6iTo ORsSkk61UyvWc2Yb4KEwv3WT1FTsi6e9FWZb88NrChBq+yaN024dcrjP/c3GQfPWGQ8qNZI62E2 b8BHoXX8RrtAj95e4o3j6uOxt/BNGRyM7ntehaAbjKn/x1qgJaxlADIHoD5r1T4313VsFzDP5W8 UMfzRBoWnH0DBJXQO5m+oi30FdjIY0VELAd+dnA= X-Received: by 2002:a05:6820:80c2:b0:67d:e7c3:3c65 with SMTP id 006d021491bc7-67e18753a92mr3299061eaf.56.1774721049889; Sat, 28 Mar 2026 11:04:09 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Sat, 28 Mar 2026 11:03:58 -0700 X-Gm-Features: AQROBzAHaD7paQsvOV1zXqBogIZLH8QO1gHK21u3jLgf98pQ2J4XVtUwgSe-XsA Message-ID: Subject: Re: Introduce XID age based replication slot invalidation To: Masahiko Sawada Cc: SATYANARAYANA NARLAPURAM , "Hayato Kuroda (Fujitsu)" , John H , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000c13d85064e197185" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c13d85064e197185 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Thu, Mar 26, 2026 at 2:50=E2=80=AFPM Masahiko Sawada wrote: > > Thank you for updating the patch. I've reviewed the patch and have > some review comments: Thank you for reviewing the patch. > + /* translator: %s is a GUC variable name */ > + appendStringInfo(&err_detail, _("The slot's xmin > %u at next transaction ID %u exceeds the age %d specified by > \"%s\"."), > + xmin, > + nextXID, > + max_slot_xid_age, > + "max_slot_xid_age"); > > I think it's better to show the age of the slot's xmin instead of the > recent XID. Agreed. > --- > + > + if (!TransactionIdIsNormal(oldestXmin) || !TransactionIdIsNormal(next= XID)) > + return false; > + > > Do we expect that the passed oldestXmin or nextXID could be non-normal > XIDs? I think the function assumes these are valid XIDs. The oldestXmin is now removed. Please see the responses at the end. > Also, since this function is called only by heap_vacuum_rel(), we can > call ReadNextTransactionId() within this function. Agreed. > --- > + if (IsReplicationSlotXIDAged(slot_xmin, slot_catalog_xmin, nextXI= D)) > > We compute the cutoff XID in IsReplicationSlotXIDAged() again, which > seems redundant. > > I've attached the fixup patch addressing these comments and having > some code cleanups. Please review it. The fixup patch looked good to me, I had that merged in the attached v5 pat= ch. > I'm reviewing the regression test part, and will share review comments so= on. > > > I've also attached the 0002 patch that adds a test case to demo a > > production-like scenario by pushing the database to XID wraparound > > limits and checking if the XID-age based invalidation with the GUC > > setting at the default vacuum_failsafe_age of 1.6B works correctly, > > and whether autovacuum can successfully remove this replication slot > > blocker to proceed with freezing and bring the database back to > > normal. I don't intend to get this committed unless others think > > otherwise, but I wanted to have this as a reference. > > Thank you for sharing the test script! I'll check it as well. Thank you. On Thu, Mar 26, 2026 at 3:42=E2=80=AFAM SATYANARAYANA NARLAPURAM wrote: > > Hi, > > + if (InvalidateXIDAgedReplicationSlots(vacrel->cutoffs.OldestXmin, > + ReadNextTransactionId())) > > Does this account catalog xmin for data tables? Nice catch! When vacuum runs on regular tables, it doesn't cover catalog_xmin in the OldestXmin. So if catalog_xmin is blocking relfrozenxid advancement, slot invalidation doesn't happen. I updated vacuum_get_cutoffs to return slot_catalog_xmin and slot_xmin. These values are already available in ComputeXidHorizons, so this doesn't require an additional proc-array lock. I also added support for XID age based slot invalidation during checkpoints. This helps standbys that can have replication slots but where vacuum doesn't run. (It skips synced slots, just like idle_replication_slot_timeout does.) Please find the attached v5 patches for further review. Thank you! -- Bharath Rupireddy Amazon Web Services: https://aws.amazon.com --000000000000c13d85064e197185 Content-Type: application/x-patch; name="v5-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Disposition: attachment; filename="v5-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mna3widq0 RnJvbSA0MDg5ZGFmYjc5YzRiMDZhMzc1ZDhiYjNkMzIzMjNkMmU0NjQwYjA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFNhdCwgMjggTWFyIDIwMjYgMDY6NTI6NDMgKzAw MDAKU3ViamVjdDogW1BBVENIIHY1IDEvMl0gQWRkIFhJRCBhZ2UgYmFzZWQgcmVwbGljYXRpb24g c2xvdCBpbnZhbGlkYXRpb24KCkludHJvZHVjZSBtYXhfc2xvdF94aWRfYWdlLCBhIEdVQyB0aGF0 IGludmFsaWRhdGVzIHJlcGxpY2F0aW9uCnNsb3RzIHdob3NlIHhtaW4gb3IgY2F0YWxvZ194bWlu IGV4Y2VlZHMgdGhlIHNwZWNpZmllZCBhZ2UuCkRpc2FibGVkIGJ5IGRlZmF1bHQuCgpJZGxlIG9y IGZvcmdvdHRlbiByZXBsaWNhdGlvbiBzbG90cyBjYW4gaG9sZCBiYWNrIHZhY3V1bSwgbGVhZGlu Zwp0byBibG9hdCBhbmQgZXZlbnR1YWxseSBYSUQgd3JhcGFyb3VuZC4gSW4gdGhlIHdvcnN0IGNh c2UgdGhpcwpyZXF1aXJlcyBkcm9wcGluZyB0aGUgc2xvdCBhbmQgc2luZ2xlLXVzZXIgbW9kZSB2 YWN1dW1pbmcuIFRoaXMKc2V0dGluZyBhdm9pZHMgdGhhdCBieSBwcm9hY3RpdmVseSBpbnZhbGlk YXRpbmcgc2xvdHMgdGhhdCBoYXZlCmZhbGxlbiB0b28gZmFyIGJlaGluZC4KCkludmFsaWRhdGlv biBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbmNlIHBlciByZWxhdGlvbiBkdXJpbmcgdmFjdXVtCihi b3RoIHZhY3V1bSBjb21tYW5kIGFuZCBhdXRvdmFjdXVtKSwgYW5kIGFsc28gYnkgdGhlIGNoZWNr cG9pbnRlcgpkdXJpbmcgY2hlY2twb2ludHMgYW5kIHJlc3RhcnRwb2ludHMuCi0tLQogZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDQwICsrKysKIGRvYy9z cmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAgICAgICAgfCAgMjAgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgICAgICB8ICAyMCArLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvY2x1c3Rlci5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAgICAgICAgICB8IDEyOCArKysrKysrKysrKystCiBz cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgICAgICAgfCAgMTkgKysKIHNy Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyAgICAgICAgICAgICB8ICAgMyArLQogc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA4ICsKIHNyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMiArCiBzcmMvaW5j bHVkZS9jb21tYW5kcy92YWN1dW0uaCAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCAgICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2luY2x1 ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy90ZXN0L3Jl Y292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsICAgICB8IDE3NSArKysrKysrKysrKysrKysr KysKIDE1IGZpbGVzIGNoYW5nZWQsIDQzNSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29u ZmlnLnNnbWwKaW5kZXggMjI5ZjQxMzUzZWIuLjQ2YWFjNTljYjIwIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC00 NzY0LDYgKzQ3NjQsNDYgQEAgcmVzdG9yZV9jb21tYW5kID0gJ2NvcHkgIkM6XFxzZXJ2ZXJcXGFy Y2hpdmVkaXJcXCVmIiAiJXAiJyAgIyBXaW5kb3dzCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8 L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbWF4LXNsb3QteGlk LWFnZSIgeHJlZmxhYmVsPSJtYXhfc2xvdF94aWRfYWdlIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1l Pm1heF9zbG90X3hpZF9hZ2U8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAg IDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+bWF4X3Nsb3RfeGlkX2FnZTwv dmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4 dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgSW52YWxpZGF0ZSByZXBsaWNhdGlvbiBzbG90cyB3aG9zZSA8bGl0ZXJhbD54bWluPC9s aXRlcmFsPiAodGhlIG9sZGVzdAorICAgICAgICB0cmFuc2FjdGlvbiB0aGF0IHRoaXMgc2xvdCBu ZWVkcyB0aGUgZGF0YWJhc2UgdG8gcmV0YWluKSBvcgorICAgICAgICA8bGl0ZXJhbD5jYXRhbG9n X3htaW48L2xpdGVyYWw+ICh0aGUgb2xkZXN0IHRyYW5zYWN0aW9uIGFmZmVjdGluZyB0aGUKKyAg ICAgICAgc3lzdGVtIGNhdGFsb2dzIHRoYXQgdGhpcyBzbG90IG5lZWRzIHRoZSBkYXRhYmFzZSB0 byByZXRhaW4pIGhhcyByZWFjaGVkCisgICAgICAgIHRoZSBhZ2Ugc3BlY2lmaWVkIGJ5IHRoaXMg c2V0dGluZy4gVGhpcyBpbnZhbGlkYXRpb24gY2hlY2sgaGFwcGVucworICAgICAgICBkdXJpbmcg dmFjdXVtIChib3RoIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY29tbWFuZCBhbmQgYXV0b3Zh Y3V1bSkKKyAgICAgICAgYW5kIGR1cmluZyBjaGVja3BvaW50cy4KKyAgICAgICAgQSB2YWx1ZSBv ZiB6ZXJvICh3aGljaCBpcyBkZWZhdWx0KSBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuIFVzZXJzIGNh biBzZXQKKyAgICAgICAgdGhpcyB2YWx1ZSBhbnl3aGVyZSBmcm9tIHplcm8gdG8gdHdvIGJpbGxp b24uIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlCisgICAgICAgIHNldCBpbiB0aGUgPGZpbGVu YW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24gdGhlIHNlcnZlcgorICAg ICAgICBjb21tYW5kIGxpbmUuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAg ICAgIElkbGUgb3IgZm9yZ290dGVuIHJlcGxpY2F0aW9uIHNsb3RzIGNhbiBob2xkIGJhY2sgdmFj dXVtLCBsZWFkaW5nIHRvCisgICAgICAgIGJsb2F0IGFuZCBldmVudHVhbGx5IHRyYW5zYWN0aW9u IElEIHdyYXBhcm91bmQuIFRoaXMgc2V0dGluZyBhdm9pZHMKKyAgICAgICAgdGhhdCBieSBpbnZh bGlkYXRpbmcgc2xvdHMgdGhhdCBoYXZlIGZhbGxlbiB0b28gZmFyIGJlaGluZC4KKyAgICAgICAg U2VlIDx4cmVmIGxpbmtlbmQ9InJvdXRpbmUtdmFjdXVtaW5nIi8+IGZvciBtb3JlIGRldGFpbHMu CisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgIE5vdGUgdGhhdCB0aGlz IGludmFsaWRhdGlvbiBtZWNoYW5pc20gaXMgbm90IGFwcGxpY2FibGUgZm9yIHNsb3RzCisgICAg ICAgIG9uIHRoZSBzdGFuZGJ5IHNlcnZlciB0aGF0IGFyZSBiZWluZyBzeW5jZWQgZnJvbSB0aGUg cHJpbWFyeSBzZXJ2ZXIKKyAgICAgICAgKGkuZS4sIHN0YW5kYnkgc2xvdHMgaGF2aW5nCisgICAg ICAgIDxsaW5rIGxpbmtlbmQ9InZpZXctcGctcmVwbGljYXRpb24tc2xvdHMiPnBnX3JlcGxpY2F0 aW9uX3Nsb3RzPC9saW5rPi48c3RydWN0ZmllbGQ+c3luY2VkPC9zdHJ1Y3RmaWVsZD4KKyAgICAg ICAgdmFsdWUgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4pLiBTeW5jZWQgc2xvdHMgYXJlIGFsd2F5 cyBjb25zaWRlcmVkIHRvCisgICAgICAgIGJlIGluYWN0aXZlIGJlY2F1c2UgdGhleSBkb24ndCBw ZXJmb3JtIGxvZ2ljYWwgZGVjb2RpbmcgdG8gcHJvZHVjZQorICAgICAgICBjaGFuZ2VzLgorICAg ICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy13YWwtc2VuZGVyLXRpbWVvdXQiIHhyZWZsYWJlbD0i d2FsX3NlbmRlcl90aW1lb3V0Ij4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPndhbF9zZW5kZXJfdGlt ZW91dDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCBiL2RvYy9zcmMvc2dt bC9zeXN0ZW0tdmlld3Muc2dtbAppbmRleCA5ZWUxYTJiZmM2YS4uMWE1MDdiNDMwZjkgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv c3lzdGVtLXZpZXdzLnNnbWwKQEAgLTMxMDIsNiArMzEwMiwxNCBAQCBTRUxFQ1QgKiBGUk9NIHBn X2xvY2tzIHBsIExFRlQgSk9JTiBwZ19wcmVwYXJlZF94YWN0cyBwcHgKICAgICAgICAgICA8eHJl ZiBsaW5rZW5kPSJndWMtaWRsZS1yZXBsaWNhdGlvbi1zbG90LXRpbWVvdXQiLz4gZHVyYXRpb24u CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxsaXRlcmFsPnhpZF9hZ2VkPC9saXRlcmFs PiBtZWFucyB0aGF0IHRoZSBzbG90J3MKKyAgICAgICAgICA8bGl0ZXJhbD54bWluPC9saXRlcmFs PiBvciA8bGl0ZXJhbD5jYXRhbG9nX3htaW48L2xpdGVyYWw+CisgICAgICAgICAgaGFzIHJlYWNo ZWQgdGhlIGFnZSBzcGVjaWZpZWQgYnkKKyAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJndWMtbWF4 LXNsb3QteGlkLWFnZSIvPiBwYXJhbWV0ZXIuCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwv bGlzdGl0ZW0+CiAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICA8L3BhcmE+PC9lbnRyeT4K ICAgICAgPC9yb3c+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1s YXp5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKaW5kZXggZjY5OGMy ZDg5OWIuLjJlOGU2MWViMGUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92 YWN1dW1sYXp5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCkBA IC0xNDcsNiArMTQ3LDcgQEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0YWJp bGl0eS9pbnN0cl90aW1lLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCisj aW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9mcmVlc3BhY2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhdGNo LmgiCkBAIC02NDIsNiArNjQzLDggQEAgaGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgY29u c3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFj azsKIAljaGFyCSAgKippbmRuYW1lcyA9IE5VTEw7CiAJU2l6ZQkJZGVhZF9pdGVtc19tYXhfYnl0 ZXMgPSAwOworCVRyYW5zYWN0aW9uSWQgc2xvdF94bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7 CisJVHJhbnNhY3Rpb25JZCBzbG90X2NhdGFsb2dfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklk OwogCiAJdmVyYm9zZSA9IChwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9WRVJCT1NFKSAhPSAwOwog CWluc3RydW1lbnQgPSAodmVyYm9zZSB8fCAoQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpICYm CkBAIC03OTgsNyArODAxLDIyIEBAIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsIGNvbnN0 IFZhY3V1bVBhcmFtcyBwYXJhbXMsCiAJICogd2FudCB0byB0ZWFjaCBsYXp5X3NjYW5fcHJ1bmUg dG8gcmVjb21wdXRlIHZpc3Rlc3QgZnJvbSB0aW1lIHRvIHRpbWUsCiAJICogdG8gaW5jcmVhc2Ug dGhlIG51bWJlciBvZiBkZWFkIHR1cGxlcyBpdCBjYW4gcHJ1bmUgYXdheS4pCiAJICovCi0JdmFj cmVsLT5hZ2dyZXNzaXZlID0gdmFjdXVtX2dldF9jdXRvZmZzKHJlbCwgcGFyYW1zLCAmdmFjcmVs LT5jdXRvZmZzKTsKKwl2YWNyZWwtPmFnZ3Jlc3NpdmUgPSB2YWN1dW1fZ2V0X2N1dG9mZnMocmVs LCBwYXJhbXMsICZ2YWNyZWwtPmN1dG9mZnMsCisJCQkJCQkJCQkJCSZzbG90X3htaW4sICZzbG90 X2NhdGFsb2dfeG1pbik7CisKKwkvKgorCSAqIFRyeSB0byBpbnZhbGlkYXRlIFhJRC1hZ2VkIHJl cGxpY2F0aW9uIHNsb3RzLiBVc2UgdGhlIHNsb3QgeG1pbiB2YWx1ZXMKKwkgKiBvYnRhaW5lZCBm cm9tIHRoZSBzYW1lIGhvcml6b25zIGNvbXB1dGF0aW9uIHRoYXQgcHJvZHVjZWQgT2xkZXN0WG1p biwKKwkgKiBhdm9pZGluZyBhbiBleHRyYSBQcm9jQXJyYXlMb2NrIGFjcXVpc2l0aW9uLgorCSAq LworCWlmIChNYXliZUludmFsaWRhdGVYSURBZ2VkU2xvdHMoc2xvdF94bWluLCBzbG90X2NhdGFs b2dfeG1pbikpCisJeworCQkvKiBSZWNvbXB1dGUgY3V0b2ZmcyBhZnRlciBzbG90IGludmFsaWRh dGlvbi4gKi8KKwkJdmFjcmVsLT5hZ2dyZXNzaXZlID0gdmFjdXVtX2dldF9jdXRvZmZzKHJlbCwg cGFyYW1zLAorCQkJCQkJCQkJCQkJJnZhY3JlbC0+Y3V0b2ZmcywKKwkJCQkJCQkJCQkJCU5VTEws IE5VTEwpOworCX0KKwogCXZhY3JlbC0+cmVsX3BhZ2VzID0gb3JpZ19yZWxfcGFnZXMgPSBSZWxh dGlvbkdldE51bWJlck9mQmxvY2tzKHJlbCk7CiAJdmFjcmVsLT52aXN0ZXN0ID0gR2xvYmFsVmlz VGVzdEZvcihyZWwpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggZjVjOWEzNDM3 NGQuLmNiOTQzYmRjMmE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC03MDE5LDYg KzcwMTksNyBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAlWaXJ0dWFsVHJhbnNhY3Rp b25JZCAqdnhpZHM7CiAJaW50CQkJbnZ4aWRzOwogCWludAkJCW9sZFhMb2dBbGxvd2VkID0gMDsK Kwl1aW50MzIJCXBvc3NpYmxlSW52YWxpZGF0aW9uQ2F1c2VzOwogCiAJLyoKIAkgKiBBbiBlbmQt b2YtcmVjb3ZlcnkgY2hlY2twb2ludCBpcyByZWFsbHkgYSBzaHV0ZG93biBjaGVja3BvaW50LCBq dXN0CkBAIC03NDQxLDggKzc0NDIsMTUgQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJ ICovCiAJWExCeXRlVG9TZWcoUmVkb1JlY1B0ciwgX2xvZ1NlZ05vLCB3YWxfc2VnbWVudF9zaXpl KTsKIAlLZWVwTG9nU2VnKHJlY3B0ciwgJl9sb2dTZWdObyk7Ci0JaWYgKEludmFsaWRhdGVPYnNv bGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9JRExF X1RJTUVPVVQsCisKKwlwb3NzaWJsZUludmFsaWRhdGlvbkNhdXNlcyA9IFJTX0lOVkFMX1dBTF9S RU1PVkVEIHwgUlNfSU5WQUxfSURMRV9USU1FT1VUIHwKKwkJUlNfSU5WQUxfWElEX0FHRTsKKwor CWlmIChJbnZhbGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzKHBvc3NpYmxlSW52YWxpZGF0 aW9uQ2F1c2VzLAogCQkJCQkJCQkJCSAgIF9sb2dTZWdObywgSW52YWxpZE9pZCwKKwkJCQkJCQkJ CQkgICBJbnZhbGlkVHJhbnNhY3Rpb25JZCwKKwkJCQkJCQkJCQkgICBtYXhfc2xvdF94aWRfYWdl ID4gMCA/CisJCQkJCQkJCQkJICAgUmVhZE5leHRUcmFuc2FjdGlvbklkKCkgOgogCQkJCQkJCQkJ CSAgIEludmFsaWRUcmFuc2FjdGlvbklkKSkKIAl7CiAJCS8qCkBAIC03NzI0LDYgKzc3MzIsNyBA QCBDcmVhdGVSZXN0YXJ0UG9pbnQoaW50IGZsYWdzKQogCVhMb2dSZWNQdHIJZW5kcHRyOwogCVhM b2dTZWdObwlfbG9nU2VnTm87CiAJVGltZXN0YW1wVHogeHRpbWU7CisJdWludDMyCQlwb3NzaWJs ZUludmFsaWRhdGlvbkNhdXNlczsKIAogCS8qIENvbmN1cnJlbnQgY2hlY2twb2ludC9yZXN0YXJ0 cG9pbnQgY2Fubm90IGhhcHBlbiAqLwogCUFzc2VydCghSXNVbmRlclBvc3RtYXN0ZXIgfHwgTXlC YWNrZW5kVHlwZSA9PSBCX0NIRUNLUE9JTlRFUik7CkBAIC03ODk4LDggKzc5MDcsMTQgQEAgQ3Jl YXRlUmVzdGFydFBvaW50KGludCBmbGFncykKIAogCUlOSkVDVElPTl9QT0lOVCgicmVzdGFydHBv aW50LWJlZm9yZS1zbG90LWludmFsaWRhdGlvbiIsIE5VTEwpOwogCi0JaWYgKEludmFsaWRhdGVP YnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9J RExFX1RJTUVPVVQsCisJcG9zc2libGVJbnZhbGlkYXRpb25DYXVzZXMgPSBSU19JTlZBTF9XQUxf UkVNT1ZFRCB8IFJTX0lOVkFMX0lETEVfVElNRU9VVCB8CisJCVJTX0lOVkFMX1hJRF9BR0U7CisK KwlpZiAoSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhwb3NzaWJsZUludmFsaWRh dGlvbkNhdXNlcywKIAkJCQkJCQkJCQkgICBfbG9nU2VnTm8sIEludmFsaWRPaWQsCisJCQkJCQkJ CQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQsCisJCQkJCQkJCQkJICAgbWF4X3Nsb3RfeGlkX2Fn ZSA+IDAgPworCQkJCQkJCQkJCSAgIFJlYWROZXh0VHJhbnNhY3Rpb25JZCgpIDoKIAkJCQkJCQkJ CQkgICBJbnZhbGlkVHJhbnNhY3Rpb25JZCkpCiAJewogCQkvKgpAQCAtODc2NCw2ICs4Nzc5LDcg QEAgeGxvZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJCSAqLwogCQkJCUludmFs aWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FMX0xFVkVMLAogCQkJCQkJ CQkJCQkJICAgMCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlv bklkLAogCQkJCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOwogCQkJfQogCQkJZWxz ZSBpZiAoc3luY19yZXBsaWNhdGlvbl9zbG90cykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NsdXN0ZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYwppbmRleCAw OTA2NmRiMDk1Ni4uMTE4ZDVkMjhjMWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NsdXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jbHVzdGVyLmMKQEAgLTkyNyw3 ICs5MjcsNyBAQCBjb3B5X3RhYmxlX2RhdGEoUmVsYXRpb24gTmV3SGVhcCwgUmVsYXRpb24gT2xk SGVhcCwgUmVsYXRpb24gT2xkSW5kZXgsIGJvb2wgdmVyYgogCSAqIG5vdCB0byBiZSBhZ2dyZXNz aXZlIGFib3V0IHRoaXMuCiAJICovCiAJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihWYWN1dW1Q YXJhbXMpKTsKLQl2YWN1dW1fZ2V0X2N1dG9mZnMoT2xkSGVhcCwgcGFyYW1zLCAmY3V0b2Zmcyk7 CisJdmFjdXVtX2dldF9jdXRvZmZzKE9sZEhlYXAsIHBhcmFtcywgJmN1dG9mZnMsIE5VTEwsIE5V TEwpOwogCiAJLyoKIAkgKiBGcmVlemVYaWQgd2lsbCBiZWNvbWUgdGhlIHRhYmxlJ3MgbmV3IHJl bGZyb3plbnhpZCwgYW5kIHRoYXQgbXVzdG4ndCBnbwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCBi Y2UzYTJkYWEyNC4uZTg1ZDUzYTBlY2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC0xMDk4LDcg KzEwOTgsOSBAQCBnZXRfYWxsX3ZhY3V1bV9yZWxzKE1lbW9yeUNvbnRleHQgdmFjX2NvbnRleHQs IGludCBvcHRpb25zKQogICovCiBib29sCiB2YWN1dW1fZ2V0X2N1dG9mZnMoUmVsYXRpb24gcmVs LCBjb25zdCBWYWN1dW1QYXJhbXMgcGFyYW1zLAotCQkJCSAgIHN0cnVjdCBWYWN1dW1DdXRvZmZz ICpjdXRvZmZzKQorCQkJCSAgIHN0cnVjdCBWYWN1dW1DdXRvZmZzICpjdXRvZmZzLAorCQkJCSAg IFRyYW5zYWN0aW9uSWQgKnNsb3RfeG1pbiwKKwkJCQkgICBUcmFuc2FjdGlvbklkICpzbG90X2Nh dGFsb2dfeG1pbikKIHsKIAlpbnQJCQlmcmVlemVfbWluX2FnZSwKIAkJCQltdWx0aXhhY3RfZnJl ZXplX21pbl9hZ2UsCkBAIC0xMTMzLDcgKzExMzUsOSBAQCB2YWN1dW1fZ2V0X2N1dG9mZnMoUmVs YXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogCSAqIHRoYXQgb25seSBvbmUg dmFjdXVtIHByb2Nlc3MgY2FuIGJlIHdvcmtpbmcgb24gYSBwYXJ0aWN1bGFyIHRhYmxlIGF0CiAJ ICogYW55IHRpbWUsIGFuZCB0aGF0IGVhY2ggdmFjdXVtIGlzIGFsd2F5cyBhbiBpbmRlcGVuZGVu dCB0cmFuc2FjdGlvbi4KIAkgKi8KLQljdXRvZmZzLT5PbGRlc3RYbWluID0gR2V0T2xkZXN0Tm9u UmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChyZWwpOworCWN1dG9mZnMtPk9sZGVzdFhtaW4gPSBHZXRP bGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklkRXh0KHJlbCwKKwkJCQkJCQkJCQkJCQkJCQlz bG90X3htaW4sCisJCQkJCQkJCQkJCQkJCQkJc2xvdF9jYXRhbG9nX3htaW4pOwogCiAJQXNzZXJ0 KFRyYW5zYWN0aW9uSWRJc05vcm1hbChjdXRvZmZzLT5PbGRlc3RYbWluKSk7CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3Nsb3QuYwppbmRleCBhOTA5MmZjMjM4Mi4uMjg2ZjBmNDYzNDEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9zbG90LmMKQEAgLTExNyw2ICsxMTcsNyBAQCBzdGF0aWMgY29uc3QgU2xvdEludmFsaWRhdGlv bkNhdXNlTWFwIFNsb3RJbnZhbGlkYXRpb25DYXVzZXNbXSA9IHsKIAl7UlNfSU5WQUxfSE9SSVpP TiwgInJvd3NfcmVtb3ZlZCJ9LAogCXtSU19JTlZBTF9XQUxfTEVWRUwsICJ3YWxfbGV2ZWxfaW5z dWZmaWNpZW50In0sCiAJe1JTX0lOVkFMX0lETEVfVElNRU9VVCwgImlkbGVfdGltZW91dCJ9LAor CXtSU19JTlZBTF9YSURfQUdFLCAieGlkX2FnZWQifSwKIH07CiAKIC8qCkBAIC0xNTgsNiArMTU5 LDEyIEBAIGludAkJCW1heF9yZXBsaWNhdGlvbl9zbG90cyA9IDEwOyAvKiB0aGUgbWF4aW11bSBu dW1iZXIgb2YgcmVwbGljYXRpb24KICAqLwogaW50CQkJaWRsZV9yZXBsaWNhdGlvbl9zbG90X3Rp bWVvdXRfc2VjcyA9IDA7CiAKKy8qCisgKiBJbnZhbGlkYXRlIHJlcGxpY2F0aW9uIHNsb3RzIHRo YXQgaGF2ZSB4bWluIG9yIGNhdGFsb2dfeG1pbiBvbGRlcgorICogdGhhbiB0aGUgc3BlY2lmaWVk IGFnZTsgJzAnIGRpc2FibGVzIGl0LgorICovCitpbnQJCQltYXhfc2xvdF94aWRfYWdlID0gMDsK KwogLyoKICAqIFRoaXMgR1VDIGxpc3RzIHN0cmVhbWluZyByZXBsaWNhdGlvbiBzdGFuZGJ5IHNl cnZlciBzbG90IG5hbWVzIHRoYXQKICAqIGxvZ2ljYWwgV0FMIHNlbmRlciBwcm9jZXNzZXMgd2ls bCB3YWl0IGZvci4KQEAgLTE3ODAsNyArMTc4NywxMCBAQCBSZXBvcnRTbG90SW52YWxpZGF0aW9u KFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCQkJCQkgICBYTG9nUmVj UHRyIHJlc3RhcnRfbHNuLAogCQkJCQkgICBYTG9nUmVjUHRyIG9sZGVzdExTTiwKIAkJCQkJICAg VHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJICAgbG9uZyBzbG90 X2lkbGVfc2Vjb25kcykKKwkJCQkJICAgbG9uZyBzbG90X2lkbGVfc2Vjb25kcywKKwkJCQkJICAg VHJhbnNhY3Rpb25JZCB4bWluLAorCQkJCQkgICBUcmFuc2FjdGlvbklkIGNhdGFsb2dfeG1pbiwK KwkJCQkJICAgVHJhbnNhY3Rpb25JZCByZWNlbnRYaWQpCiB7CiAJU3RyaW5nSW5mb0RhdGEgZXJy X2RldGFpbDsKIAlTdHJpbmdJbmZvRGF0YSBlcnJfaGludDsKQEAgLTE4MjUsNiArMTgzNSwzMCBA QCBSZXBvcnRTbG90SW52YWxpZGF0aW9uKFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNl IGNhdXNlLAogCQkJCQkJCQkgImlkbGVfcmVwbGljYXRpb25fc2xvdF90aW1lb3V0Iik7CiAJCQkJ YnJlYWs7CiAJCQl9CisKKwkJY2FzZSBSU19JTlZBTF9YSURfQUdFOgorCQkJeworCQkJCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNWYWxpZCh4bWluKSB8fCBUcmFuc2FjdGlvbklkSXNWYWxpZChjYXRh bG9nX3htaW4pKTsKKworCQkJCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZCh4bWluKSkKKwkJCQl7 CisJCQkJCS8qIHRyYW5zbGF0b3I6ICVzIGlzIGEgR1VDIHZhcmlhYmxlIG5hbWUgKi8KKwkJCQkJ YXBwZW5kU3RyaW5nSW5mbygmZXJyX2RldGFpbCwgXygiVGhlIHNsb3QncyB4bWluICV1IGlzICVk IHRyYW5zYWN0aW9ucyBvbGQsIHdoaWNoIGV4Y2VlZHMgdGhlIGNvbmZpZ3VyZWQgXCIlc1wiIHZh bHVlIG9mICVkLiIpLAorCQkJCQkJCQkJIHhtaW4sIChpbnQzMikgKHJlY2VudFhpZCAtIHhtaW4p LCAibWF4X3Nsb3RfeGlkX2FnZSIsIG1heF9zbG90X3hpZF9hZ2UpOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQkvKiB0cmFuc2xhdG9yOiAlcyBpcyBhIEdVQyB2YXJpYWJsZSBuYW1lICov CisJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmVycl9kZXRhaWwsIF8oIlRoZSBzbG90J3MgeG1pbiAl dSBpcyAlZCB0cmFuc2FjdGlvbnMgb2xkLCB3aGljaCBleGNlZWRzIHRoZSBjb25maWd1cmVkIFwi JXNcIiB2YWx1ZSBvZiAlZC4iKSwKKwkJCQkJCQkJCSBjYXRhbG9nX3htaW4sIChpbnQzMikgKHJl Y2VudFhpZCAtIGNhdGFsb2dfeG1pbiksICJtYXhfc2xvdF94aWRfYWdlIiwgbWF4X3Nsb3RfeGlk X2FnZSk7CisJCQkJfQorCisJCQkJLyogdHJhbnNsYXRvcjogJXMgaXMgYSBHVUMgdmFyaWFibGUg bmFtZSAqLworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmVycl9oaW50LCBfKCJZb3UgbWlnaHQgbmVl ZCB0byBpbmNyZWFzZSBcIiVzXCIuIiksCisJCQkJCQkJCSAibWF4X3Nsb3RfeGlkX2FnZSIpOwor CQkJCWJyZWFrOworCQkJfQorCiAJCWNhc2UgUlNfSU5WQUxfTk9ORToKIAkJCXBnX3VucmVhY2hh YmxlKCk7CiAJfQpAQCAtMTg2Myw2ICsxODk3LDI1IEBAIENhbkludmFsaWRhdGVJZGxlU2xvdChS ZXBsaWNhdGlvblNsb3QgKnMpCiAJCQkhKFJlY292ZXJ5SW5Qcm9ncmVzcygpICYmIHMtPmRhdGEu c3luY2VkKSk7CiB9CiAKKy8qCisgKiBDYW4gd2UgaW52YWxpZGF0ZSBhbiBYSUQtYWdlZCByZXBs aWNhdGlvbiBzbG90PworICoKKyAqIFhJRC1hZ2VkIGJhc2VkIGludmFsaWRhdGlvbiBpcyBhbGxv d2VkIHRvIHRoZSBnaXZlbiBzbG90IHdoZW46CisgKgorICogMS4gTWF4IFhJRC1hZ2UgaXMgc2V0 CisgKiAyLiBTbG90IGhhcyB2YWxpZCB4bWluIG9yIGNhdGFsb2dfeG1pbgorICogMy4gVGhlIHNs b3QgaXMgbm90IGJlaW5nIHN5bmNlZCBmcm9tIHRoZSBwcmltYXJ5IHdoaWxlIHRoZSBzZXJ2ZXIg aXMgaW4KKyAqCSAgcmVjb3ZlcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorQ2FuSW52YWxp ZGF0ZVhpZEFnZWRTbG90KFJlcGxpY2F0aW9uU2xvdCAqcykKK3sKKwlyZXR1cm4gKG1heF9zbG90 X3hpZF9hZ2UgIT0gMCAmJgorCQkJKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHMtPmRhdGEueG1pbikg fHwKKwkJCSBUcmFuc2FjdGlvbklkSXNWYWxpZChzLT5kYXRhLmNhdGFsb2dfeG1pbikpICYmCisJ CQkhKFJlY292ZXJ5SW5Qcm9ncmVzcygpICYmIHMtPmRhdGEuc3luY2VkKSk7Cit9CisKIC8qCiAg KiBEZXRlcm1pbmVTbG90SW52YWxpZGF0aW9uQ2F1c2UgLSBEZXRlcm1pbmUgdGhlIGNhdXNlIGZv ciB3aGljaCBhIHNsb3QKICAqIGJlY29tZXMgaW52YWxpZCBhbW9uZyB0aGUgZ2l2ZW4gcG9zc2li bGUgY2F1c2VzLgpAQCAtMTg3NCw2ICsxOTI3LDcgQEAgc3RhdGljIFJlcGxpY2F0aW9uU2xvdElu dmFsaWRhdGlvbkNhdXNlCiBEZXRlcm1pbmVTbG90SW52YWxpZGF0aW9uQ2F1c2UodWludDMyIHBv c3NpYmxlX2NhdXNlcywgUmVwbGljYXRpb25TbG90ICpzLAogCQkJCQkJCSAgIFhMb2dSZWNQdHIg b2xkZXN0TFNOLCBPaWQgZGJvaWQsCiAJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENv bmZsaWN0SG9yaXpvbiwKKwkJCQkJCQkgICBUcmFuc2FjdGlvbklkIHJlY2VudFhpZCwKIAkJCQkJ CQkgICBUaW1lc3RhbXBUeiAqaW5hY3RpdmVfc2luY2UsIFRpbWVzdGFtcFR6IG5vdykKIHsKIAlB c3NlcnQocG9zc2libGVfY2F1c2VzICE9IFJTX0lOVkFMX05PTkUpOwpAQCAtMTk0NSw2ICsxOTk5 LDIyIEBAIERldGVybWluZVNsb3RJbnZhbGlkYXRpb25DYXVzZSh1aW50MzIgcG9zc2libGVfY2F1 c2VzLCBSZXBsaWNhdGlvblNsb3QgKnMsCiAJCX0KIAl9CiAKKwkvKiBDaGVjayBpZiB0aGUgc2xv dCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZSBHVUMgKi8K KwlpZiAoKHBvc3NpYmxlX2NhdXNlcyAmIFJTX0lOVkFMX1hJRF9BR0UpICYmIENhbkludmFsaWRh dGVYaWRBZ2VkU2xvdChzKSkKKwl7CisJCVRyYW5zYWN0aW9uSWQgeGlkTGltaXQ7CisKKwkJQXNz ZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJlY2VudFhpZCkpOworCisJCXhpZExpbWl0ID0gVHJh bnNhY3Rpb25JZFJldHJlYXRlZEJ5KHJlY2VudFhpZCwgbWF4X3Nsb3RfeGlkX2FnZSk7CisKKwkJ aWYgKChUcmFuc2FjdGlvbklkSXNWYWxpZChzLT5kYXRhLnhtaW4pICYmCisJCQkgVHJhbnNhY3Rp b25JZFByZWNlZGVzKHMtPmRhdGEueG1pbiwgeGlkTGltaXQpKSB8fAorCQkJKFRyYW5zYWN0aW9u SWRJc1ZhbGlkKHMtPmRhdGEuY2F0YWxvZ194bWluKSAmJgorCQkJIFRyYW5zYWN0aW9uSWRQcmVj ZWRlcyhzLT5kYXRhLmNhdGFsb2dfeG1pbiwgeGlkTGltaXQpKSkKKwkJCXJldHVybiBSU19JTlZB TF9YSURfQUdFOworCX0KKwogCXJldHVybiBSU19JTlZBTF9OT05FOwogfQogCkBAIC0xOTY3LDYg KzIwMzcsNyBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxl X2NhdXNlcywKIAkJCQkJCQkgICBSZXBsaWNhdGlvblNsb3QgKnMsCiAJCQkJCQkJICAgWExvZ1Jl Y1B0ciBvbGRlc3RMU04sCiAJCQkJCQkJICAgT2lkIGRib2lkLCBUcmFuc2FjdGlvbklkIHNuYXBz aG90Q29uZmxpY3RIb3Jpem9uLAorCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgcmVjZW50WGlkLAog CQkJCQkJCSAgIGJvb2wgKnJlbGVhc2VkX2xvY2tfb3V0KQogewogCWludAkJCWxhc3Rfc2lnbmFs ZWRfcGlkID0gMDsKQEAgLTIwMTksNiArMjA5MCw3IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29s ZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2VzLAogCQkJCQkJCQkJCQkJCQkJCXMsIG9sZGVz dExTTiwKIAkJCQkJCQkJCQkJCQkJCQlkYm9pZCwKIAkJCQkJCQkJCQkJCQkJCQlzbmFwc2hvdENv bmZsaWN0SG9yaXpvbiwKKwkJCQkJCQkJCQkJCQkJCQlyZWNlbnRYaWQsCiAJCQkJCQkJCQkJCQkJ CQkJJmluYWN0aXZlX3NpbmNlLAogCQkJCQkJCQkJCQkJCQkJCW5vdyk7CiAKQEAgLTIxMTIsNyAr MjE4NCw4IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVf Y2F1c2VzLAogCQkJCVJlcG9ydFNsb3RJbnZhbGlkYXRpb24oaW52YWxpZGF0aW9uX2NhdXNlLCB0 cnVlLCBhY3RpdmVfcGlkLAogCQkJCQkJCQkJICAgc2xvdG5hbWUsIHJlc3RhcnRfbHNuLAogCQkJ CQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJCQkJCSAg IHNsb3RfaWRsZV9zZWNzKTsKKwkJCQkJCQkJCSAgIHNsb3RfaWRsZV9zZWNzLCBzLT5kYXRhLnht aW4sCisJCQkJCQkJCQkgICBzLT5kYXRhLmNhdGFsb2dfeG1pbiwgcmVjZW50WGlkKTsKIAogCQkJ CWlmIChNeUJhY2tlbmRUeXBlID09IEJfU1RBUlRVUCkKIAkJCQkJKHZvaWQpIFNpZ25hbFJlY292 ZXJ5Q29uZmxpY3QoR2V0UEdQcm9jQnlOdW1iZXIoYWN0aXZlX3Byb2MpLApAQCAtMjE2NSw3ICsy MjM4LDggQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3NzaWJsZV9j YXVzZXMsCiAJCQlSZXBvcnRTbG90SW52YWxpZGF0aW9uKGludmFsaWRhdGlvbl9jYXVzZSwgZmFs c2UsIGFjdGl2ZV9waWQsCiAJCQkJCQkJCSAgIHNsb3RuYW1lLCByZXN0YXJ0X2xzbiwKIAkJCQkJ CQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJCQkJICAgc2xv dF9pZGxlX3NlY3MpOworCQkJCQkJCQkgICBzbG90X2lkbGVfc2Vjcywgcy0+ZGF0YS54bWluLAor CQkJCQkJCQkgICBzLT5kYXRhLmNhdGFsb2dfeG1pbiwgcmVjZW50WGlkKTsKIAogCQkJLyogZG9u ZSB3aXRoIHRoaXMgc2xvdCBmb3Igbm93ICovCiAJCQlicmVhazsKQEAgLTIxOTIsNiArMjI2Niw4 IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2Vz LAogICogICBsb2dpY2FsLgogICogLSBSU19JTlZBTF9JRExFX1RJTUVPVVQ6IGhhcyBiZWVuIGlk bGUgbG9uZ2VyIHRoYW4gdGhlIGNvbmZpZ3VyZWQKICAqICAgImlkbGVfcmVwbGljYXRpb25fc2xv dF90aW1lb3V0IiBkdXJhdGlvbi4KKyAqIC0gUlNfSU5WQUxfWElEX0FHRTogc2xvdCB4aWQgYWdl IGlzIG9sZGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQKKyAqICAgIm1heF9zbG90X3hpZF9hZ2UiIGFn ZS4KICAqCiAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGludmFsaWRhdGUgdGhl IHNsb3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlCiAgKiBjYXVzZXMgaW4gYSBzaW5nbGUgcGFzcywg bWluaW1pemluZyByZWR1bmRhbnQgaXRlcmF0aW9ucy4gVGhlICJjYXVzZSIKQEAgLTIyMDUsNyAr MjI4MSw4IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVf Y2F1c2VzLAogYm9vbAogSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyh1aW50MzIg cG9zc2libGVfY2F1c2VzLAogCQkJCQkJCQkgICBYTG9nU2VnTm8gb2xkZXN0U2Vnbm8sIE9pZCBk Ym9pZCwKLQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbikK KwkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKKwkJCQkJ CQkJICAgVHJhbnNhY3Rpb25JZCByZWNlbnRYaWQpCiB7CiAJWExvZ1JlY1B0cglvbGRlc3RMU047 CiAJYm9vbAkJaW52YWxpZGF0ZWQgPSBmYWxzZTsKQEAgLTIyNDQsNyArMjMyMSw3IEBAIHJlc3Rh cnQ6CiAKIAkJaWYgKEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdChwb3NzaWJsZV9jYXVz ZXMsIHMsIG9sZGVzdExTTiwKIAkJCQkJCQkJCQkgICBkYm9pZCwgc25hcHNob3RDb25mbGljdEhv cml6b24sCi0JCQkJCQkJCQkJICAgJnJlbGVhc2VkX2xvY2spKQorCQkJCQkJCQkJCSAgIHJlY2Vu dFhpZCwgJnJlbGVhc2VkX2xvY2spKQogCQl7CiAJCQlBc3NlcnQocmVsZWFzZWRfbG9jayk7CiAK QEAgLTMyNzUsMyArMzM1Miw0NCBAQCBXYWl0Rm9yU3RhbmRieUNvbmZpcm1hdGlvbihYTG9nUmVj UHRyIHdhaXRfZm9yX2xzbikKIAogCUNvbmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsKIH0K KworLyoKKyAqIEludmFsaWRhdGUgcmVwbGljYXRpb24gc2xvdHMgd2hvc2UgWElEIGFnZSBleGNl ZWRzIHRoZSBtYXhfc2xvdF94aWRfYWdlCisgKiBHVUMuCisgKgorICogVGhlIHNsb3RfeG1pbiBh bmQgc2xvdF9jYXRhbG9nX3htaW4gYXJlIHRoZSByZXBsaWNhdGlvbiBzbG90IHhtaW4gdmFsdWVz CisgKiBvYnRhaW5lZCBmcm9tIHRoZSBzYW1lIENvbXB1dGVYaWRIb3Jpem9ucygpIGNhbGwgdGhh dCBjb21wdXRlZCBPbGRlc3RYbWluCisgKiBkdXJpbmcgdmFjdXVtLiBVc2luZyB0aGVzZSBhdm9p ZHMgYSBzZXBhcmF0ZSBQcm9jQXJyYXlMb2NrIGFjcXVpc2l0aW9uLgorICoKKyAqIFJldHVybnMg dHJ1ZSBpZiBhdCBsZWFzdCBvbmUgc2xvdCB3YXMgaW52YWxpZGF0ZWQuCisgKi8KK2Jvb2wKK01h eWJlSW52YWxpZGF0ZVhJREFnZWRTbG90cyhUcmFuc2FjdGlvbklkIHNsb3RfeG1pbiwKKwkJCQkJ CQlUcmFuc2FjdGlvbklkIHNsb3RfY2F0YWxvZ194bWluKQoreworCVRyYW5zYWN0aW9uSWQgcmVj ZW50WGlkOworCVRyYW5zYWN0aW9uSWQgeGlkTGltaXQ7CisJYm9vbAkJaW52YWxpZGF0ZWQgPSBm YWxzZTsKKworCWlmIChtYXhfc2xvdF94aWRfYWdlID09IDApCisJCXJldHVybiBmYWxzZTsKKwor CXJlY2VudFhpZCA9IFJlYWROZXh0VHJhbnNhY3Rpb25JZCgpOworCXhpZExpbWl0ID0gVHJhbnNh Y3Rpb25JZFJldHJlYXRlZEJ5KHJlY2VudFhpZCwgbWF4X3Nsb3RfeGlkX2FnZSk7CisKKwkvKgor CSAqIEludmFsaWRhdGUgcG9zc2libHkgb2Jzb2xldGUgc2xvdHMgYmFzZWQgb24gWElELWFnZSwg aWYgZWl0aGVyIHNsb3QncworCSAqIHhtaW4gb3IgY2F0YWxvZ194bWluIGlzIG9sZGVyIHRoYW4g dGhlIGN1dG9mZi4KKwkgKi8KKwlpZiAoKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHNsb3RfeG1pbikg JiYKKwkJIFRyYW5zYWN0aW9uSWRQcmVjZWRlcyhzbG90X3htaW4sIHhpZExpbWl0KSkgfHwKKwkJ KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHNsb3RfY2F0YWxvZ194bWluKSAmJgorCQkgVHJhbnNhY3Rp b25JZFByZWNlZGVzKHNsb3RfY2F0YWxvZ194bWluLCB4aWRMaW1pdCkpKQorCQlpbnZhbGlkYXRl ZCA9IEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfWElEX0FHRSwK KwkJCQkJCQkJCQkJCQkJIDAsCisJCQkJCQkJCQkJCQkJCSBJbnZhbGlkT2lkLAorCQkJCQkJCQkJ CQkJCQkgSW52YWxpZFRyYW5zYWN0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSByZWNlbnRYaWQpOwor CisJcmV0dXJuIGludmFsaWRhdGVkOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvcHJvY2FycmF5LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpp bmRleCBjYzIwN2NiNTZlMy4uMTg2ODNjZTVhZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NhcnJheS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2Nh cnJheS5jCkBAIC0xOTUwLDExICsxOTUwLDMwIEBAIEdsb2JhbFZpc0hvcml6b25LaW5kRm9yUmVs KFJlbGF0aW9uIHJlbCkKICAqLwogVHJhbnNhY3Rpb25JZAogR2V0T2xkZXN0Tm9uUmVtb3ZhYmxl VHJhbnNhY3Rpb25JZChSZWxhdGlvbiByZWwpCit7CisJcmV0dXJuIEdldE9sZGVzdE5vblJlbW92 YWJsZVRyYW5zYWN0aW9uSWRFeHQocmVsLCBOVUxMLCBOVUxMKTsKK30KKworLyoKKyAqIFNhbWUg YXMgR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZCgpLCBidXQgYWxzbyByZXR1cm5z IHRoZQorICogcmVwbGljYXRpb24gc2xvdCB4bWluIGFuZCBjYXRhbG9nX3htaW4gZnJvbSB0aGUg c2FtZSBDb21wdXRlWGlkSG9yaXpvbnMoKQorICogY2FsbC4gIFRoaXMgYXZvaWRzIGEgc2VwYXJh dGUgUHJvY0FycmF5TG9jayBhY3F1aXNpdGlvbiB3aGVuIHRoZSBjYWxsZXIKKyAqIG5lZWRzIGJv dGggdmFsdWVzLgorICovCitUcmFuc2FjdGlvbklkCitHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFu c2FjdGlvbklkRXh0KFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCAqc2xv dF94bWluLAorCQkJCQkJCQkJICBUcmFuc2FjdGlvbklkICpzbG90X2NhdGFsb2dfeG1pbikKIHsK IAlDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgaG9yaXpvbnM7CiAKIAlDb21wdXRlWGlkSG9yaXpv bnMoJmhvcml6b25zKTsKIAorCWlmIChzbG90X3htaW4pCisJCSpzbG90X3htaW4gPSBob3Jpem9u cy5zbG90X3htaW47CisJaWYgKHNsb3RfY2F0YWxvZ194bWluKQorCQkqc2xvdF9jYXRhbG9nX3ht aW4gPSBob3Jpem9ucy5zbG90X2NhdGFsb2dfeG1pbjsKKwogCXN3aXRjaCAoR2xvYmFsVmlzSG9y aXpvbktpbmRGb3JSZWwocmVsKSkKIAl7CiAJCWNhc2UgVklTSE9SSVpPTl9TSEFSRUQ6CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9zdGFuZGJ5LmMKaW5kZXggZGU5MDkyZmRmNWIuLmQ2MGYzOWVjMDhlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jCkBAIC01MDQsNyArNTA0LDggQEAgUmVzb2x2ZVJlY292 ZXJ5Q29uZmxpY3RXaXRoU25hcHNob3QoVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9y aXpvbiwKIAkgKi8KIAlpZiAoSXNMb2dpY2FsRGVjb2RpbmdFbmFibGVkKCkgJiYgaXNDYXRhbG9n UmVsKQogCQlJbnZhbGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzKFJTX0lOVkFMX0hPUkla T04sIDAsIGxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICAgc25hcHNob3RDb25mbGljdEhvcml6 b24pOworCQkJCQkJCQkJCSAgIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAorCQkJCQkJCQkJCSAg IEludmFsaWRUcmFuc2FjdGlvbklkKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQKaW5kZXggMGE4NjI2OTNmY2QuLmNhM2NjODQxN2RhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMjA4OSw2ICsyMDg5LDE0 IEBACiAgIG1heCA9PiAnTUFYX0tJTE9CWVRFUycsCiB9LAogCit7IG5hbWUgPT4gJ21heF9zbG90 X3hpZF9hZ2UnLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAg PT4gJ1JFUExJQ0FUSU9OX1NFTkRJTkcnLAorICBzaG9ydF9kZXNjID0+ICdBZ2Ugb2YgdGhlIHRy YW5zYWN0aW9uIElEIGF0IHdoaWNoIGEgcmVwbGljYXRpb24gc2xvdCBnZXRzIGludmFsaWRhdGVk LicsCisgIHZhcmlhYmxlID0+ICdtYXhfc2xvdF94aWRfYWdlJywKKyAgYm9vdF92YWwgPT4gJzAn LAorICBtaW4gPT4gJzAnLAorICBtYXggPT4gJzIwMDAwMDAwMDAnLAorfSwKKwogIyBXZSB1c2Ug dGhlIGhvcGVmdWxseS1zYWZlbHktc21hbGwgdmFsdWUgb2YgMTAwa0IgYXMgdGhlIGNvbXBpbGVk LWluCiAjIGRlZmF1bHQgZm9yIG1heF9zdGFja19kZXB0aC4gIEluaXRpYWxpemVHVUNPcHRpb25z IHdpbGwgaW5jcmVhc2UgaXQKICMgaWYgcG9zc2libGUsIGRlcGVuZGluZyBvbiB0aGUgYWN0dWFs IHBsYXRmb3JtLXNwZWNpZmljIHN0YWNrIGxpbWl0LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGNmMTU1OTczODViLi4wNTVlYmE1NmJkZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAt MzUxLDYgKzM1MSw4IEBACiAjd2FsX2tlZXBfc2l6ZSA9IDAgICAgICAgICAgICAgICMgaW4gbWVn YWJ5dGVzOyAwIGRpc2FibGVzCiAjbWF4X3Nsb3Rfd2FsX2tlZXBfc2l6ZSA9IC0xICAgICMgaW4g bWVnYWJ5dGVzOyAtMSBkaXNhYmxlcwogI2lkbGVfcmVwbGljYXRpb25fc2xvdF90aW1lb3V0ID0g MCAgICAgICMgaW4gc2Vjb25kczsgMCBkaXNhYmxlcworI21heF9zbG90X3hpZF9hZ2UgPSAwICAg ICAgICAgICAjIG1heGltdW0gWElEIGFnZSBiZWZvcmUgYSByZXBsaWNhdGlvbiBzbG90CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0cyBpbnZhbGlkYXRlZDsgMCBkaXNhYmxl cwogI3dhbF9zZW5kZXJfdGltZW91dCA9IDYwcyAgICAgICAjIGluIG1pbGxpc2Vjb25kczsgMCBk aXNhYmxlcwogI3RyYWNrX2NvbW1pdF90aW1lc3RhbXAgPSBvZmYgICAjIGNvbGxlY3QgdGltZXN0 YW1wIG9mIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKaW5kZXggMWY0 NWJjYTAxNWMuLmM1YWU5ZWZlOTc3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92 YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaApAQCAtMzg0LDcgKzM4 NCw5IEBAIGV4dGVybiB2b2lkIHZhY191cGRhdGVfcmVsc3RhdHMoUmVsYXRpb24gcmVsYXRpb24s CiAJCQkJCQkJCWJvb2wgKm1pbm11bHRpX3VwZGF0ZWQsCiAJCQkJCQkJCWJvb2wgaW5fb3V0ZXJf eGFjdCk7CiBleHRlcm4gYm9vbCB2YWN1dW1fZ2V0X2N1dG9mZnMoUmVsYXRpb24gcmVsLCBjb25z dCBWYWN1dW1QYXJhbXMgcGFyYW1zLAotCQkJCQkJCSAgIHN0cnVjdCBWYWN1dW1DdXRvZmZzICpj dXRvZmZzKTsKKwkJCQkJCQkgICBzdHJ1Y3QgVmFjdXVtQ3V0b2ZmcyAqY3V0b2ZmcywKKwkJCQkJ CQkgICBUcmFuc2FjdGlvbklkICpzbG90X3htaW4sCisJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCAq c2xvdF9jYXRhbG9nX3htaW4pOwogZXh0ZXJuIGJvb2wgdmFjdXVtX3hpZF9mYWlsc2FmZV9jaGVj ayhjb25zdCBzdHJ1Y3QgVmFjdXVtQ3V0b2ZmcyAqY3V0b2Zmcyk7CiBleHRlcm4gdm9pZCB2YWNf dXBkYXRlX2RhdGZyb3plbnhpZCh2b2lkKTsKIGV4dGVybiB2b2lkIHZhY3V1bV9kZWxheV9wb2lu dChib29sIGlzX2FuYWx5emUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v c2xvdC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCmluZGV4IDRiNDcwOWY2ZTJj Li4wYmFhNzExMjU1OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5o CisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaApAQCAtNjYsMTAgKzY2LDEyIEBA IHR5cGVkZWYgZW51bSBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZQogCVJTX0lOVkFM X1dBTF9MRVZFTCA9ICgxIDw8IDIpLAogCS8qIGlkbGUgc2xvdCB0aW1lb3V0IGhhcyBvY2N1cnJl ZCAqLwogCVJTX0lOVkFMX0lETEVfVElNRU9VVCA9ICgxIDw8IDMpLAorCS8qIHNsb3QncyB4bWlu IG9yIGNhdGFsb2dfeG1pbiBoYXMgcmVhY2hlZCBtYXggeGlkIGFnZSAqLworCVJTX0lOVkFMX1hJ RF9BR0UgPSAoMSA8PCA0KSwKIH0gUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2U7CiAK IC8qIE1heGltdW0gbnVtYmVyIG9mIGludmFsaWRhdGlvbiBjYXVzZXMgKi8KLSNkZWZpbmUJUlNf SU5WQUxfTUFYX0NBVVNFUyA0CisjZGVmaW5lCVJTX0lOVkFMX01BWF9DQVVTRVMgNQogCiAvKgog ICogV2hlbiB0aGUgc2xvdCBzeW5jaHJvbml6YXRpb24gd29ya2VyIGlzIHJ1bm5pbmcsIG9yIHdo ZW4KQEAgLTMyNiw2ICszMjgsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgUmVwbGljYXRpb25TbG90 ICpNeVJlcGxpY2F0aW9uU2xvdDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3JlcGxpY2F0 aW9uX3Nsb3RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKnN5bmNocm9uaXplZF9zdGFuZGJ5 X3Nsb3RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBpZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGlt ZW91dF9zZWNzOworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfc2xvdF94aWRfYWdlOwogCiAv KiBzaG1lbSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVybiBTaXplIFJlcGxpY2F0 aW9uU2xvdHNTaG1lbVNpemUodm9pZCk7CkBAIC0zNjcsNyArMzcwLDEwIEBAIGV4dGVybiB2b2lk IFJlcGxpY2F0aW9uU2xvdHNEcm9wREJTbG90cyhPaWQgZGJvaWQpOwogZXh0ZXJuIGJvb2wgSW52 YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyh1aW50MzIgcG9zc2libGVfY2F1c2VzLAog CQkJCQkJCQkJCQkgICBYTG9nU2VnTm8gb2xkZXN0U2Vnbm8sCiAJCQkJCQkJCQkJCSAgIE9pZCBk Ym9pZCwKLQkJCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpv bik7CisJCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24s CisJCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgcmVjZW50WGlkKTsKK2V4dGVybiBib29sIE1h eWJlSW52YWxpZGF0ZVhJREFnZWRTbG90cyhUcmFuc2FjdGlvbklkIHNsb3RfeG1pbiwKKwkJCQkJ CQkJCQlUcmFuc2FjdGlvbklkIHNsb3RfY2F0YWxvZ194bWluKTsKIGV4dGVybiBSZXBsaWNhdGlv blNsb3QgKlNlYXJjaE5hbWVkUmVwbGljYXRpb25TbG90KGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wg bmVlZF9sb2NrKTsKIGV4dGVybiBpbnQJUmVwbGljYXRpb25TbG90SW5kZXgoUmVwbGljYXRpb25T bG90ICpzbG90KTsKIGV4dGVybiBib29sIFJlcGxpY2F0aW9uU2xvdE5hbWUoaW50IGluZGV4LCBO YW1lIG5hbWUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKaW5kZXggYWJkZjAyMWU2NmUuLmMxOThm ZDIyNTE1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKQEAgLTUzLDYgKzUzLDkgQEAgZXh0ZXJu IFJ1bm5pbmdUcmFuc2FjdGlvbnMgR2V0UnVubmluZ1RyYW5zYWN0aW9uRGF0YSh2b2lkKTsKIAog ZXh0ZXJuIGJvb2wgVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcyhUcmFuc2FjdGlvbklkIHhpZCk7 CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklk KFJlbGF0aW9uIHJlbCk7CitleHRlcm4gVHJhbnNhY3Rpb25JZCBHZXRPbGRlc3ROb25SZW1vdmFi bGVUcmFuc2FjdGlvbklkRXh0KFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCQkJICAgVHJhbnNh Y3Rpb25JZCAqc2xvdF94bWluLAorCQkJCQkJCQkJCQkJCQkgICBUcmFuc2FjdGlvbklkICpzbG90 X2NhdGFsb2dfeG1pbik7CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBHZXRPbGRlc3RUcmFuc2FjdGlv bklkQ29uc2lkZXJlZFJ1bm5pbmcodm9pZCk7CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBHZXRPbGRl c3RBY3RpdmVUcmFuc2FjdGlvbklkKGJvb2wgaW5Db21taXRPbmx5LAogCQkJCQkJCQkJCQkJICBi b29sIGFsbERicyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xv dF9saW1pdC5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsCmlu ZGV4IDdiMjUzZTY0ZDljLi5kMGY1OGQ4MzE3ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVjb3Zl cnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlf cmVwbHNsb3RfbGltaXQucGwKQEAgLTU0MCw0ICs1NDAsMTc5IEBAIGlzKCAkcHVibGlzaGVyNC0+ c2FmZV9wc3FsKAogJHB1Ymxpc2hlcjQtPnN0b3A7CiAkc3Vic2NyaWJlcjQtPnN0b3A7CiAKKyMg QWR2YW5jZSBYSURzLCBydW4gVkFDVVVNLCBhbmQgd2FpdCBmb3IgYSBzbG90IHRvIGJlIGludmFs aWRhdGVkIGR1ZSB0byBYSUQgYWdlLgorc3ViIGludmFsaWRhdGVfc2xvdF9ieV94aWRfYWdlCit7 CisJbXkgKCRub2RlLCAkdGFibGVfbmFtZSwgJHNsb3RfbmFtZSwgJHNsb3RfdHlwZSwgJG54aWRz LCAkdHJpZ2dlcikgPSBAXzsKKworCSMgRG8gc29tZSB3b3JrIHRvIGFkdmFuY2UgeGlkcworCSRu b2RlLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHFxWworCQlkbyBcJFwkCisJCWJlZ2luCisJ CWZvciBpIGluIDEuLiRueGlkcyBsb29wCisJCQktLSB1c2UgYW4gZXhjZXB0aW9uIGJsb2NrIHNv IHRoYXQgZWFjaCBpdGVyYXRpb24gZWF0cyBhbiBYSUQKKwkJCWJlZ2luCisJCQlpbnNlcnQgaW50 byAkdGFibGVfbmFtZSB2YWx1ZXMgKGkpOworCQkJZXhjZXB0aW9uCisJCQl3aGVuIGRpdmlzaW9u X2J5X3plcm8gdGhlbiBudWxsOworCQkJZW5kOworCQllbmQgbG9vcDsKKwkJZW5kXCRcJDsKKwld KTsKKworCWlmICgkdHJpZ2dlciBlcSAnY2hlY2twb2ludCcpCisJeworCQkkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDSEVDS1BPSU5UIik7CisJfQorCWVsc2UKKwl7CisJCSRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlZBQ1VVTSIpOworCX0KKworCSMgV2FpdCBmb3IgdGhlIHJl cGxpY2F0aW9uIHNsb3QgdG8gYmUgaW52YWxpZGF0ZWQgZHVlIHRvIFhJRCBhZ2UuCisJJG5vZGUt PnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsIHFxWworCQlTRUxFQ1QgQ09VTlQoc2xv dF9uYW1lKSA9IDEgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cworCQkJV0hFUkUgc2xvdF9uYW1l ID0gJyRzbG90X25hbWUnIEFORAorCQkJYWN0aXZlID0gZmFsc2UgQU5ECisJCQlpbnZhbGlkYXRp b25fcmVhc29uID0gJ3hpZF9hZ2VkJzsKKwldKQorCSAgb3IgZGllCisJICAiVGltZWQgb3V0IHdo aWxlIHdhaXRpbmcgZm9yIHNsb3QgJHNsb3RfbmFtZSB0byBiZSBpbnZhbGlkYXRlZCI7CisKKwlv aygxLCAiJHNsb3RfdHlwZSByZXBsaWNhdGlvbiBzbG90IGludmFsaWRhdGVkIGR1ZSB0byBYSUQg YWdlICh2aWEgJHRyaWdnZXIpIik7Cit9CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVz dGNhc2Ugc3RhcnQ6IEludmFsaWRhdGUgc3RyZWFtaW5nIHN0YW5kYnkncyBzbG90IGR1ZSB0byBt YXhfc2xvdF94aWRfYWdlCisjIEdVQy4KKworIyBJbml0aWFsaXplIHByaW1hcnkgbm9kZSBmb3Ig WElEIGFnZSB0ZXN0cworbXkgJHByaW1hcnk1ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdwcmltYXJ5NScpOworJHByaW1hcnk1LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xv Z2ljYWwnKTsKKworIyBDb25maWd1cmUgcHJpbWFyeSB3aXRoIFhJRCBhZ2Ugc2V0dGluZ3MuIFNl dCBhdXRvdmFjdXVtX25hcHRpbWUgaGlnaCBzbworIyB0aGF0IHRoZSBjaGVja3BvaW50ZXIgKG5v dCB2YWN1dW0pIHRyaWdnZXJzIHRoZSBpbnZhbGlkYXRpb24uCitteSAkbWF4X3Nsb3RfeGlkX2Fn ZSA9IDUwMDsKKyRwcmltYXJ5NS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFx eworbWF4X3Nsb3RfeGlkX2FnZSA9ICRtYXhfc2xvdF94aWRfYWdlCithdXRvdmFjdXVtX25hcHRp bWUgPSAnMWgnCit9KTsKKworJHByaW1hcnk1LT5zdGFydDsKKworIyBUYWtlIGEgYmFja3VwIGZv ciBjcmVhdGluZyBzdGFuZGJ5CiskYmFja3VwX25hbWUgPSAnYmFja3VwNSc7CiskcHJpbWFyeTUt PmJhY2t1cCgkYmFja3VwX25hbWUpOworCisjIENyZWF0ZSBhIHN0YW5kYnkgbGlua2luZyB0byB0 aGUgcHJpbWFyeSB1c2luZyB0aGUgcmVwbGljYXRpb24gc2xvdAorbXkgJHN0YW5kYnk1ID0gUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdGFuZGJ5NScpOworJHN0YW5kYnk1LT5pbml0 X2Zyb21fYmFja3VwKCRwcmltYXJ5NSwgJGJhY2t1cF9uYW1lLCBoYXNfc3RyZWFtaW5nID0+IDEp OworCisjIEVuYWJsZSBIUyBmZWVkYmFjay4gVGhlIHNsb3Qgc2hvdWxkIGdhaW4gYW4geG1pbi4g V2Ugc2V0IHRoZSBzdGF0dXMgaW50ZXJ2YWwKKyMgc28gd2UnbGwgc2VlIHRoZSByZXN1bHRzIHBy b21wdGx5LgorJHN0YW5kYnk1LT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXsK K3ByaW1hcnlfc2xvdF9uYW1lID0gJ3NiNV9zbG90JworaG90X3N0YW5kYnlfZmVlZGJhY2sgPSBv bgord2FsX3JlY2VpdmVyX3N0YXR1c19pbnRlcnZhbCA9IDEKK30pOworCiskcHJpbWFyeTUtPnNh ZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKyAgICBTRUxFQ1QgcGdfY3JlYXRlX3BoeXNpY2Fs X3JlcGxpY2F0aW9uX3Nsb3Qoc2xvdF9uYW1lIDo9ICdzYjVfc2xvdCcsIGltbWVkaWF0ZWx5X3Jl c2VydmUgOj0gdHJ1ZSk7CitdKTsKKworJHN0YW5kYnk1LT5zdGFydDsKKworIyBDcmVhdGUgc29t ZSBjb250ZW50IG9uIHByaW1hcnkgdG8gbW92ZSB4bWluCiskcHJpbWFyeTUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiX2ludDUgQVMgU0VMRUNUIGdlbmVyYXRlX3Nl cmllcygxLDEwKSBBUyBhIik7CisKKyMgV2FpdCB1bnRpbCBzdGFuZGJ5IGhhcyByZXBsYXllZCBl bm91Z2ggZGF0YQorJHByaW1hcnk1LT53YWl0X2Zvcl9jYXRjaHVwKCRzdGFuZGJ5NSk7CisKKyMg V2FpdCBmb3IgdGhlIHNsb3QgdG8gZ2V0IHhtaW4gZnJvbSBob3Rfc3RhbmRieV9mZWVkYmFjawor JHByaW1hcnk1LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHFxWworCVNFTEVDVCB4 bWluIElTIE5PVCBOVUxMCisJCUZST00gcGdfY2F0YWxvZy5wZ19yZXBsaWNhdGlvbl9zbG90cwor CQlXSEVSRSBzbG90X25hbWUgPSAnc2I1X3Nsb3QnOworXSkgb3IgZGllICJUaW1lZCBvdXQgd2Fp dGluZyBmb3Igc2xvdCBzYjVfc2xvdCB4bWluIGZyb20gSFMgZmVlZGJhY2siOworCisjIFN0b3Ag c3RhbmRieSB0byBtYWtlIHRoZSByZXBsaWNhdGlvbiBzbG90IG9uIHByaW1hcnkgaW5hY3RpdmUu CisjIFRoZSBzbG90J3MgeG1pbiBwZXJzaXN0cyBhbmQgaG9sZHMgYmFjayBkYXRmcm96ZW54aWQu Ciskc3RhbmRieTUtPnN0b3A7CisKKyMgQWR2YW5jZSBYSURzIGFuZCB3YWl0IGZvciB0aGUgc2xv dCB0byBiZSBpbnZhbGlkYXRlZCBkdWUgdG8gWElEIGFnZS4KKyMgVXNlIDJ4IHRoZSBtYXhfc2xv dF94aWRfYWdlIHRvIGVuc3VyZSB0aGUgc2xvdCdzIHhtaW4gYWdlIGNvbWZvcnRhYmx5CisjIGV4 Y2VlZHMgdGhlIGNvbmZpZ3VyZWQgbGltaXQuCitpbnZhbGlkYXRlX3Nsb3RfYnlfeGlkX2FnZSgk cHJpbWFyeTUsICd0YWJfaW50NScsICdzYjVfc2xvdCcsICdwaHlzaWNhbCcsCisJMiAqICRtYXhf c2xvdF94aWRfYWdlLCAnY2hlY2twb2ludCcpOworCisjIFRlc3RjYXNlIGVuZDogSW52YWxpZGF0 ZSBzdHJlYW1pbmcgc3RhbmRieSdzIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UKKyMgR1VD ICh2aWEgY2hlY2twb2ludCkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IEludmFsaWRhdGUgbG9naWNhbCBzdWJzY3Jp YmVyJ3Mgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZQorIyBHVUMgKHZpYSB2YWN1dW0pLgor CisjIFJlc2V0IGF1dG92YWN1dW1fbmFwdGltZSBzbyB0aGF0IFZBQ1VVTS10cmlnZ2VyZWQgaW52 YWxpZGF0aW9uIHdvcmtzIG5vcm1hbGx5CiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJBTFRFUiBTWVNURU0gUkVTRVQgYXV0b3ZhY3V1bV9uYXB0aW1lOyBTRUxFQ1QgcGdfcmVs b2FkX2NvbmYoKTsiKTsKKworIyBDcmVhdGUgYSBzdWJzY3JpYmVyIG5vZGUKK215ICRzdWJzY3Jp YmVyNSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcjUnKTsKKyRz dWJzY3JpYmVyNS0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskc3Vic2Ny aWJlcjUtPnN0YXJ0OworCisjIENyZWF0ZSB0YWJsZXMgb24gYm90aCBwcmltYXJ5IGFuZCBzdWJz Y3JpYmVyCiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRl c3RfdGJsNSAoaWQgaW50KSIpOworJHN1YnNjcmliZXI1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0ZXN0X3RibDUgKGlkIGludCkiKTsKKworIyBJbnNlcnQgc29tZSBpbml0 aWFsIGRhdGEKKyRwcmltYXJ5NS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRP IHRlc3RfdGJsNSBWQUxVRVMgKGdlbmVyYXRlX3NlcmllcygxLCA1KSk7Iik7CisKKyMgU2V0dXAg bG9naWNhbCByZXBsaWNhdGlvbgorbXkgJHByaW1hcnk1X2Nvbm5zdHIgPSAkcHJpbWFyeTUtPmNv bm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7CiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gcHViNSBGT1IgVEFCTEUgdGVzdF90Ymw1Iik7CisK KyRzdWJzY3JpYmVyNS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJ T04gc3ViNSBDT05ORUNUSU9OICckcHJpbWFyeTVfY29ubnN0cicgUFVCTElDQVRJT04gcHViNSBX SVRIIChzbG90X25hbWUgPSAnbHN1YjVfc2xvdCcpIgorKTsKKworIyBXYWl0IGZvciBpbml0aWFs IHN5bmMgdG8gY29tcGxldGUKKyRzdWJzY3JpYmVyNS0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5 bmMoJHByaW1hcnk1LCAnc3ViNScpOworCiskcmVzdWx0ID0gJHN1YnNjcmliZXI1LT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGJsNSIpOworaXMoJHJl c3VsdCwgcXEoNSksICJjaGVjayBpbml0aWFsIGNvcHkgd2FzIGRvbmUgZm9yIGxvZ2ljYWwgcmVw bGljYXRpb24gKFhJRCBhZ2UgdGVzdCkiKTsKKworIyBXYWl0IGZvciB0aGUgbG9naWNhbCBzbG90 IHRvIGdldCBjYXRhbG9nX3htaW4gKGxvZ2ljYWwgc2xvdHMgdXNlIGNhdGFsb2dfeG1pbiwgbm90 IHhtaW4pCiskcHJpbWFyeTUtPnBvbGxfcXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXFbCisJ U0VMRUNUIHhtaW4gSVMgTlVMTCBBTkQgY2F0YWxvZ194bWluIElTIE5PVCBOVUxMCisJRlJPTSBw Z19jYXRhbG9nLnBnX3JlcGxpY2F0aW9uX3Nsb3RzCisJV0hFUkUgc2xvdF9uYW1lID0gJ2xzdWI1 X3Nsb3QnOworXSkgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc2xvdCBsc3ViNV9zbG90 IGNhdGFsb2dfeG1pbiB0byBhZHZhbmNlIjsKKworIyBTdG9wIHN1YnNjcmliZXIgdG8gbWFrZSB0 aGUgcmVwbGljYXRpb24gc2xvdCBvbiBwcmltYXJ5IGluYWN0aXZlCiskc3Vic2NyaWJlcjUtPnN0 b3A7CisKKyMgQWR2YW5jZSBYSURzIGFuZCB3YWl0IGZvciB0aGUgc2xvdCB0byBiZSBpbnZhbGlk YXRlZCBkdWUgdG8gWElEIGFnZS4KKyMgVXNlIDJ4IHRoZSBtYXhfc2xvdF94aWRfYWdlIHRvIGVu c3VyZSB0aGUgc2xvdCdzIGNhdGFsb2dfeG1pbiBhZ2UKKyMgY29tZm9ydGFibHkgZXhjZWVkcyB0 aGUgY29uZmlndXJlZCBsaW1pdC4KK2ludmFsaWRhdGVfc2xvdF9ieV94aWRfYWdlKCRwcmltYXJ5 NSwgJ3Rlc3RfdGJsNScsICdsc3ViNV9zbG90JywgJ2xvZ2ljYWwnLAorCTIgKiAkbWF4X3Nsb3Rf eGlkX2FnZSwgJ3ZhY3V1bScpOworCiskcHJpbWFyeTUtPnN0b3A7CisKKyMgVGVzdGNhc2UgZW5k OiBJbnZhbGlkYXRlIGxvZ2ljYWwgc3Vic2NyaWJlcidzIHNsb3QgZHVlIHRvIG1heF9zbG90X3hp ZF9hZ2UKKyMgR1VDLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiBkb25lX3Rlc3RpbmcoKTsK LS0gCjIuNDcuMwoK --000000000000c13d85064e197185 Content-Type: application/x-patch; name="v5-0002-Add-more-tests-for-XID-age-slot-invalidation.patch" Content-Disposition: attachment; filename="v5-0002-Add-more-tests-for-XID-age-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mna3wie21 RnJvbSAwYTY3ZTFkNzU2ODNkMzAwNzg4MGIzNGFkOGUwMjczMGEzMDc1NzQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFNhdCwgMjggTWFyIDIwMjYgMDg6NDk6NDUgKzAw MDAKU3ViamVjdDogW1BBVENIIHY1IDIvMl0gQWRkIG1vcmUgdGVzdHMgZm9yIFhJRCBhZ2Ugc2xv dCBpbnZhbGlkYXRpb24KCkNvbnN1bWUgWElEcyB1cCB0byB3cmFwYXJvdW5kIFdBUk5JTkcgbGlt aXRzIHdpdGgKbWF4X3Nsb3RfeGlkX2FnZSBtYXRjaGluZyB2YWN1dW1fZmFpbHNhZmVfYWdlICgx LjZCKS4gVmVyaWZ5IHRoYXQKYXV0b3ZhY3V1bSBpbnZhbGlkYXRlcyB0aGUgaW5hY3RpdmUgcmVw bGljYXRpb24gc2xvdAooWElELWFnZS1iYXNlZCBpbnZhbGlkYXRpb24pLCB1bmJsb2NrcyBkYXRm cm96ZW54aWQgYWR2YW5jZW1lbnQsCmFuZCBwcmV2ZW50cyB3cmFwYXJvdW5kIHdpdGhvdXQgYW55 IGludGVydmVudGlvbi4KLS0tCiBzcmMvdGVzdC9yZWNvdmVyeS9NYWtlZmlsZSAgICAgICAgICAg ICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwg fCAxNjIgKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNjQgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L01h a2VmaWxlIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvTWFrZWZpbGUKaW5kZXggZDQxYWFhZjhhZTEuLjVj M2QyYzg5OTQxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS9NYWtlZmlsZQorKysgYi9z cmMvdGVzdC9yZWNvdmVyeS9NYWtlZmlsZQpAQCAtMTIsNyArMTIsOCBAQAogRVhUUkFfSU5TVEFM TD1jb250cmliL3BnX3ByZXdhcm0gXAogCWNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzIFwKIAlj b250cmliL3Rlc3RfZGVjb2RpbmcgXAotCXNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50 cworCXNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cyBcCisJc3JjL3Rlc3QvbW9kdWxl cy94aWRfd3JhcGFyb3VuZAogCiBzdWJkaXIgPSBzcmMvdGVzdC9yZWNvdmVyeQogdG9wX2J1aWxk ZGlyID0gLi4vLi4vLi4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxz bG90X2xpbWl0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwK aW5kZXggZDBmNThkODMxN2YuLjNhMWFkYTBhMDJlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNv dmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAx OV9yZXBsc2xvdF9saW1pdC5wbApAQCAtNzE1LDQgKzcxNSwxNjYgQEAgJHByaW1hcnk1LT5zdG9w OwogIyBHVUMuCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKyMgPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKyMgVGVzdGNhc2U6IFhJRC1hZ2UtYmFzZWQgc2xvdCBpbnZhbGlkYXRpb24gaW4gYSBwcm9k dWN0aW9uLWxpa2Ugc2NlbmFyaW8uCisjIFN0YW5kYnkgc2V0cyBzbG90IHhtaW4gdmlhIEhTIGZl ZWRiYWNrLCBkaXNjb25uZWN0cywgWElEcyBjb25zdW1lZC4KKyMgQXV0b3ZhY3V1bSBhdXRvbWF0 aWNhbGx5IGludmFsaWRhdGVzIHRoZSBzbG90IG9uY2UgaXRzIHhtaW4gYWdlIGV4Y2VlZHMKKyMg bWF4X3Nsb3RfeGlkX2FnZSwgYWR2YW5jZXMgZGF0ZnJvemVueGlkIGluIGFsbCBkYXRhYmFzZXMs IGFuZCBrZWVwcyB0aGUKKyMgc3lzdGVtIGhlYWx0aHkg4oCUIG5vIG1hbnVhbCBWQUNVVU0sIHZh Y3V1bWRiLCBvciBkb3dudGltZSBuZWVkZWQuCisKKyMgQ2hlY2sgaWYgYXV0b3ZhY3V1bSBoYXMg aW52YWxpZGF0ZWQgdGhlIHNsb3QgZHVlIHRvIHhpZF9hZ2VkLgorIyBSZXR1cm5zIDEgaWYgaW52 YWxpZGF0ZWQsIDAgb3RoZXJ3aXNlLiAgRWFybHkgZXhpdCB3aGVuIG1heF9zbG90X3hpZF9hZ2Ug PSAwLgorc3ViIGNoZWNrX3Nsb3RfaW52YWxpZGF0ZWQKK3sKKwlteSAoJG5vZGUsICRzbG90X25h bWUsICRtYXhfYWdlLCAkY29uc3VtZWRfeGlkcykgPSBAXzsKKworCXJldHVybiAwIGlmICRtYXhf YWdlID09IDA7CisKKwlteSAkcmVhc29uID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGludmFsaWRhdGlvbl9yZWFzb24gRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cyBX SEVSRSBzbG90X25hbWUgPSAnJHNsb3RfbmFtZSciKTsKKwlpZiAoJHJlYXNvbiBlcSAneGlkX2Fn ZWQnKQorCXsKKwkJZGlhZyAiU2xvdCBpbnZhbGlkYXRlZCBieSBhdXRvdmFjdXVtIGFmdGVyIGNv bnN1bWluZyAkY29uc3VtZWRfeGlkcyBYSURzIjsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAw OworfQorCisjIFZlcmlmeSBzZXJ2ZXIgbG9nIHNob3dzIHNsb3QgaW52YWxpZGF0aW9uIGJ5IGF1 dG92YWN1dW0gd29ya2VyIHdpdGgKKyMgY29ycmVjdCB4bWluLCBhZ2UsIGFuZCBuZXh0IHR4aWQg dmFsdWVzLgorc3ViIHZlcmlmeV9zbG90X3hpZF9hZ2VkX2ludmFsaWRhdGlvbgoreworCW15ICgk bm9kZSwgJHNsb3RfbmFtZSwgJHNsb3RfeG1pbiwgJG1heF9hZ2UsICRjb25zdW1lZF94aWRzKSA9 IEBfOworCisJbXkgJGxvZyA9IHNsdXJwX2ZpbGUoJG5vZGUtPmxvZ2ZpbGUpOworCisJIyBWZXJp ZnkgdGhlIGludmFsaWRhdGlvbiB3YXMgcGVyZm9ybWVkIGJ5IGFuIGF1dG92YWN1dW0gd29ya2Vy LgorCWxpa2UoJGxvZywKKwkJcXIvYXV0b3ZhY3V1bSB3b3JrZXJcW1xkK1xdIExPRzpccytpbnZh bGlkYXRpbmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCAiJHNsb3RfbmFtZSIvLAorCQkic2Vy dmVyIGxvZzogJHNsb3RfbmFtZSBpbnZhbGlkYXRlZCBieSBhdXRvdmFjdXVtIHdvcmtlciIpOwor CisJIyBWZXJpZnkgREVUQUlMIHNob3dzIHRoZSBjb3JyZWN0IHhtaW4gYW5kIG1heF9zbG90X3hp ZF9hZ2UuCisJbGlrZSgkbG9nLAorCQlxci9hdXRvdmFjdXVtIHdvcmtlclxbXGQrXF0gREVUQUlM OlxzK1RoZSBzbG90J3MgeG1pbiAkc2xvdF94bWluIGlzIChcZCspIHRyYW5zYWN0aW9ucyBvbGQs IHdoaWNoIGV4Y2VlZHMgdGhlIGNvbmZpZ3VyZWQgIm1heF9zbG90X3hpZF9hZ2UiIHZhbHVlIG9m ICRtYXhfYWdlXC4vLAorCQkic2VydmVyIGxvZzogREVUQUlMIHNob3dzIHhtaW4gJHNsb3RfeG1p biBhbmQgYWdlICRtYXhfYWdlIik7CisKKwkjIEV4dHJhY3QgeGlkIGFnZSBmcm9tIHRoZSBsb2cg YW5kIHJlcG9ydCBmb3IgZGlhZ25vc3RpY3MuCisJJGxvZyA9fgorCSAgL1RoZSBzbG90J3MgeG1p biAkc2xvdF94bWluIGlzIChcZCspIHRyYW5zYWN0aW9ucyBvbGQvOworCW15ICRsb2dfeGlkX2Fn ZSA9ICQxIC8vICdOL0EnOworCWRpYWcgInhpZF9hZ2UgZnJvbSBzZXJ2ZXIgbG9nPSRsb2dfeGlk X2FnZSwgbWF4X3Nsb3RfeGlkX2FnZT0kbWF4X2FnZSwgY29uc3VtZWQ9JGNvbnN1bWVkX3hpZHMg WElEcyI7Cit9CisKKyMgVmVyaWZ5IHNsb3Qgd2FzIGludmFsaWRhdGVkIGFuZCB3YWl0IGZvciBh dXRvdmFjdXVtIHRvIGFkdmFuY2UgZGF0ZnJvemVueGlkCisjIGluIGFsbCBkYXRhYmFzZXMuICBF YXJseSBleGl0IHdoZW4gbWF4X3Nsb3RfeGlkX2FnZSA9IDAuCitzdWIgdmVyaWZ5X2ludmFsaWRh dGlvbl9hbmRfcmVjb3ZlcnkKK3sKKwlteSAoJG5vZGUsICRzbG90X25hbWUsICRzbG90X3htaW4s ICRtYXhfYWdlLCAkY29uc3VtZWRfeGlkcywgJHNsb3RfZ29uZSkgPSBAXzsKKworCXJldHVybiBp ZiAkbWF4X2FnZSA9PSAwOworCisJb2soJHNsb3RfZ29uZSwgJ2F1dG92YWN1dW0gaW52YWxpZGF0 ZWQgc2xvdCBkdWUgdG8geGlkX2FnZWQnKTsKKworCXZlcmlmeV9zbG90X3hpZF9hZ2VkX2ludmFs aWRhdGlvbigkbm9kZSwgJHNsb3RfbmFtZSwKKwkJJHNsb3RfeG1pbiwgJG1heF9hZ2UsICRjb25z dW1lZF94aWRzKTsKKworCSMgV2FpdCBmb3IgYXV0b3ZhY3V1bSB0byBhZHZhbmNlIGRhdGZyb3pl bnhpZCBpbiBhbGwgZGF0YWJhc2VzIHBhc3QgdGhlCisJIyB3cmFwYXJvdW5kIGRhbmdlciB6b25l IOKAlCBubyBtYW51YWwgaW50ZXJ2ZW50aW9uIHJlcXVpcmVkLgorCSRub2RlLT5wb2xsX3F1ZXJ5 X3VudGlsKAorCQkncG9zdGdyZXMnLCBxcVsKKwkJU0VMRUNUIE5PVCBFWElTVFMgKAorCQkJU0VM RUNUIDEgRlJPTSBwZ19kYXRhYmFzZQorCQkJV0hFUkUgYWdlKGRhdGZyb3plbnhpZCkgPiAyMDAw MDAwMDAwCisJCSk7CisJXSkgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgYXV0b3ZhY3V1 bSB0byBhZHZhbmNlIGRhdGZyb3plbnhpZCBpbiBhbGwgZGF0YWJhc2VzIjsKK30KKworbXkgJHBy aW1hcnk2ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmltYXJ5NicpOworJHBy aW1hcnk2LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKworJG1heF9zbG90 X3hpZF9hZ2UgPSAxNjAwMDAwMDAwOyAgICAjIG1hdGNoZXMgdmFjdXVtX2ZhaWxzYWZlX2FnZSBk ZWZhdWx0CiskcHJpbWFyeTYtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsK K21heF9zbG90X3hpZF9hZ2UgPSAkbWF4X3Nsb3RfeGlkX2FnZQorYXV0b3ZhY3V1bV9uYXB0aW1l ID0gMXMKK30pOworCiskcHJpbWFyeTYtPnN0YXJ0OworJHByaW1hcnk2LT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBFWFRFTlNJT04geGlkX3dyYXBhcm91bmQiKTsKKworJGJhY2t1cF9u YW1lID0gJ2JhY2t1cDYnOworJHByaW1hcnk2LT5iYWNrdXAoJGJhY2t1cF9uYW1lKTsKKworbXkg JHN0YW5kYnk2ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdGFuZGJ5NicpOwor JHN0YW5kYnk2LT5pbml0X2Zyb21fYmFja3VwKCRwcmltYXJ5NiwgJGJhY2t1cF9uYW1lLCBoYXNf c3RyZWFtaW5nID0+IDEpOworJHN0YW5kYnk2LT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5j b25mJywgcXsKK3ByaW1hcnlfc2xvdF9uYW1lID0gJ3NiNl9zbG90JworaG90X3N0YW5kYnlfZmVl ZGJhY2sgPSBvbgord2FsX3JlY2VpdmVyX3N0YXR1c19pbnRlcnZhbCA9IDEKK30pOworCiskcHJp bWFyeTYtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfY3JlYXRlX3BoeXNpY2Fs X3JlcGxpY2F0aW9uX3Nsb3QoJ3NiNl9zbG90JywgdHJ1ZSkiKTsKKworJHN0YW5kYnk2LT5zdGFy dDsKKworJHByaW1hcnk2LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRh Yl9pbnQ2IEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgQVMgYSIpOworJHByaW1hcnk2 LT53YWl0X2Zvcl9jYXRjaHVwKCRzdGFuZGJ5Nik7CisKKyRwcmltYXJ5Ni0+cG9sbF9xdWVyeV91 bnRpbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlTRUxFQ1QgeG1pbiBJUyBOT1QgTlVMTCBGUk9NIHBn X3JlcGxpY2F0aW9uX3Nsb3RzCisJCVdIRVJFIHNsb3RfbmFtZSA9ICdzYjZfc2xvdCc7CitdKSBv ciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBzYjZfc2xvdCB4bWluIGZyb20gSFMgZmVlZGJh Y2siOworCiskcmVzdWx0ID0gJHByaW1hcnk2LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VM RUNUIHhtaW4gSVMgTk9UIE5VTEwgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cyBXSEVSRSBzbG90 X25hbWUgPSAnc2I2X3Nsb3QnIik7CitpcygkcmVzdWx0LCAndCcsICdzbG90IGhhcyB4bWluIGZy b20gaG90X3N0YW5kYnlfZmVlZGJhY2snKTsKKworIyBDYXB0dXJlIHRoZSBzbG90J3MgeG1pbiBm b3IgbGF0ZXIgbG9nIHZlcmlmaWNhdGlvbi4KK215ICRzbG90X3htaW4gPSAkcHJpbWFyeTYtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgeG1pbiBGUk9NIHBnX3JlcGxpY2F0aW9uX3Ns b3RzIFdIRVJFIHNsb3RfbmFtZSA9ICdzYjZfc2xvdCciKTsKKworIyBTdG9wIHN0YW5kYnk7IHNs b3QgeG1pbiBwZXJzaXN0cyBhbmQgaG9sZHMgYmFjayBkYXRmcm96ZW54aWQuCiskc3RhbmRieTYt PnN0b3A7CisKKyMgQ29uc3VtZSBYSURzIGluIDUwTSBjaHVua3MuICBPbmNlIHdlIGV4Y2VlZCBt YXhfc2xvdF94aWRfYWdlLCBhdXRvdmFjdXVtCisjIChuYXB0aW1lPTFzKSBzaG91bGQgYXV0b21h dGljYWxseSBpbnZhbGlkYXRlIHRoZSBzbG90LiAgS2VlcCBjb25zdW1pbmcKKyMgdW50aWwgd2Ug c2VlIHRoYXQgaGFwcGVuIOKAlCBubyBtYW51YWwgVkFDVVVNIG9yIGRvd250aW1lIG5lZWRlZC4K K215ICRsb2dzdGFydDYgPSAtcyAkcHJpbWFyeTYtPmxvZ2ZpbGU7CitteSAkY2h1bmsgPSA1MF8w MDBfMDAwOworbXkgJG1heF94aWRzID0gMl8yMDBfMDAwXzAwMDsKK215ICRjb25zdW1lZCA9IDA7 CitteSAkc2xvdF9nb25lID0gMDsKKword2hpbGUgKCRjb25zdW1lZCA8ICRtYXhfeGlkcykKK3sK KwkkcHJpbWFyeTYtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvbnN1bWVfeGlkcygk Y2h1bmspIik7CisJJGNvbnN1bWVkICs9ICRjaHVuazsKKwlteSAkcmVtYWluaW5nID0gJG1heF94 aWRzIC0gJGNvbnN1bWVkOworCWRpYWcgIkNvbnN1bWVkICRjb25zdW1lZCAvICRtYXhfeGlkcyBY SURzICgkcmVtYWluaW5nIHJlbWFpbmluZykiOworCisJaWYgKCEkc2xvdF9nb25lICYmIGNoZWNr X3Nsb3RfaW52YWxpZGF0ZWQoJHByaW1hcnk2LCAnc2I2X3Nsb3QnLAorCQkJJG1heF9zbG90X3hp ZF9hZ2UsICRjb25zdW1lZCkpCisJeworCQkkc2xvdF9nb25lID0gMTsKKwl9Cit9CisKK3Zlcmlm eV9pbnZhbGlkYXRpb25fYW5kX3JlY292ZXJ5KCRwcmltYXJ5NiwgJ3NiNl9zbG90JywKKwkkc2xv dF94bWluLCAkbWF4X3Nsb3RfeGlkX2FnZSwgJGNvbnN1bWVkLCAkc2xvdF9nb25lKTsKKworIyBD b25zdW1lIDFCIG1vcmUgWElEcyDigJQgY29tYmluaW5nIHdpdGggdGhlIDIuMkIgY29uc3VtZWQg YWJvdmUsIHRoZSB0b3RhbAorIyBvZiAzLjJCIGV4Y2VlZHMgdGhlIDJeMzEgKH4yLjFCKSB1c2Fi bGUgWElEIHNwYWNlICh4aWRTdG9wTGltaXQpLCBpLmUuCisjIG1vcmUgdGhhbiBvbmUgZnVsbCB3 cmFwYXJvdW5kIGN5Y2xlLCBwcm92aW5nIHRoZSBzeXN0ZW0gaXMgaGVhbHRoeS4KKyRwcmltYXJ5 Ni0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY29uc3VtZV94aWRzKDEwMDAwMDAwMDAp Iik7CitvaygxLCAnd3JpdGVzIHN1Y2NlZWQgYWZ0ZXIgYXV0b3ZhY3V1bSBpbnZhbGlkYXRlZCB0 aGUgc2xvdCcpOworCiskcHJpbWFyeTYtPnN0b3A7CisKKyMgVGVzdGNhc2UgZW5kOiBYSUQtYWdl LWJhc2VkIHNsb3QgaW52YWxpZGF0aW9uIGluIGEgcHJvZHVjdGlvbi1saWtlIHNjZW5hcmlvLgor IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorCiBkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcuMwoK --000000000000c13d85064e197185--