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 1w7BcI-0052wg-0n for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 12:21:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7BcG-003CYO-2W for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 12:21:13 +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 1w7BcG-003CY6-1C for pgsql-hackers@lists.postgresql.org; Mon, 30 Mar 2026 12:21:12 +0000 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7BcA-00000001zUs-3fkV for pgsql-hackers@postgresql.org; Mon, 30 Mar 2026 12:21:12 +0000 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-439c56e822eso4843798f8f.2 for ; Mon, 30 Mar 2026 05:21:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774873266; cv=none; d=google.com; s=arc-20240605; b=YMDuzr2CUOfUUCddpIx8znz2G+hgB44NBUFon9UN+57uYHxN1WhojB1lbvM9EkFc7A yU4k2dhCBAXuQCsA6tO0CrSDCr9XTeUpaEWbEnc3eStoGiBfNIeQ8M9RrKWgZIRevUTK DLroDeFy4O5cLsNClm7v7MEaSVWQm4s7Ncsrc2AS14aENnOMeO2o/DQzCUZtFEPi4pc1 8eA/ZOsK6u3pPXm2y1eQH4cj0yjfxrkSc3ZOfVJKv35iEDU2x8Y2VQf5+sGNeVsGlI+V sktoUeOwO4CWC+GQrx4eC/M8s+osXvYPXexiHi+Yip7JXfP8h7yr/WyjDXiuFsXdYXe8 vvCQ== 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=FYC+km8/lqfhZ2vLm0jmTXdvuk0baSNuGU1cv8e/x78=; fh=JJePVcgTonZyPZhAyDtFDCf6lWn8xx+8v65oH9bBtcY=; b=MimgrX7wNVNEBjbql8Hqm19Nkw5FB8qvAUO4m+aCy+20h4bsx0bOfQRwk8DYrtNY32 /VV5M9vY4u2xJ5i83MjA08lFLUn294/Znmt8aIYLE1NeSARSNW9YXD51Ca5nDltE3mea kZedUhNurRZ9NsABrItzkgwltWWhLnMvuxc9UIAE5GUObljUelfP7VPtd4djoXRPEuw3 BYgdMy/DzcQRG/4H/xyfRMJgZW/+BvNx1oj8qlmKCdqe2HRABmi1YCyq2K1FfJ5awCCX oIgPgcPgG/aCBl0SaymevXAhJEclWDGlllBe+lSWlIr5dvj2CO/1CuxbrUtraKHkSYj7 dkmQ==; 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=1774873266; x=1775478066; 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=FYC+km8/lqfhZ2vLm0jmTXdvuk0baSNuGU1cv8e/x78=; b=JDdKVuOuy4oxiMSNTGJPe6GxMMhBvN8YqSalHdNDllxrQ4QBSVnhyvRTMvg05x1sE/ 2C1ZQz8i5j5cGWwKZjTo7f1rf0HYXNuJH2NSd5fmNqGRksMqiqgjRJoagHt9AeJGwW75 QEMtmDiTbhsjfONFCpkV+cPPJz9sbzxyiBoKCTAkTtjCMNtrcM9OQ+o4PZBtEH5K6Cq+ JrBme3cmJ5GGm9aoxLzheXWxpO8GAcz8n4vOwKIHAr2h27w2VzQ5Go27C0dlL6CME96d oD+qMPTsT3BPcqu9DFee8sxYG7WAlOsOykhmbMk2+ctozhLUJPKajFYgWlpjKN+orCLS kU9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774873266; x=1775478066; 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=FYC+km8/lqfhZ2vLm0jmTXdvuk0baSNuGU1cv8e/x78=; b=kn70Db/OEcKInUERW0rcYMMDt9RG8YVbJcFgg1BuN7v2VgLsuPucrnhV+WoOYK0Uv9 zWxeiV0QgnDxwau+odz3r8+TUorgWiJjZYgtpY3juskagEmKCfy/hSPhujHHpbNNHcRf qKYV2TBIUY80AGSMkGHPf05yqRXmu98DBH74HkfBRFhaTElQHLwpXScFKrhnbxsW+Wt2 uxNnotT4G8wbkcRH0w+a8OdufW+Ni40u5/pq9jw6l3n1+FAtkenAs6YZPi2YmS1ESC7o dqWUfiVuAWjPpg4S4jeV5PuCVcUzE22fhEiV/DhW9VfDANQx4cxmW0+xQuCBN7ptpMc3 OYXA== X-Forwarded-Encrypted: i=1; AJvYcCWV5j7FY1AVZmQfSM+bGF0o4uHI5AprOF9TuspUIPMvqUsYd9lJzNNIhiujqls3PjNE7FpiXYnZp2Rhlzsf@postgresql.org X-Gm-Message-State: AOJu0YxCxNVRjfz1YRuS7se6VG2dckfBCEwmojGkilMCf3X8pOHSzKo3 GPpRb5l6zjkCz2r1sYdhIqL6y4ZIISXth1CiLOcm5pG2GUFPMj9QRdaWVJ3gK64/PkGb7qfnoJp jhCe5tEmSpXkUyR2xir4BVOc2L9oT6wk= X-Gm-Gg: ATEYQzw69F8kg222mqoTxxP35q+3xURVD5jR+HkYTgO9hswdJLMHSkNz9DErJ5ka7DN kwCm1rCJaK6wwkAAtCfdqLaWNjPnQqUGuBtTfnB0YYFDC56Pvt06oEGBDlnxFj56fv7zE+BPyIw KBySIhdwPcv0+oL6VixHuLUD/1Ko/VGJPZ0LhmMjwmqVAClRoxz0kHdsMxvPi0dj2yyBdIpoI9/ 0xR94BlRa5vwJlKyKrLOIU4GbZfY2OBoLVH5XE5/msR24AwNnJhsm0QcdnX9tWbA4QfcnmK7cmb smEGDjdBRpZmIEZzXTixCVuo/Mozt9LfkzvsKTt6aOLZOS8Ln5q4sg== X-Received: by 2002:a05:6000:3106:b0:439:f64b:a82b with SMTP id ffacd0b85a97d-43b9ea1a1b0mr20742199f8f.6.1774873266057; Mon, 30 Mar 2026 05:21:06 -0700 (PDT) MIME-Version: 1.0 References: <26c766d6-db0f-43d3-a618-44f8d40a3121@iki.fi> <62b8dc23-8f6a-4cac-91ff-f74bb5bc159a@iki.fi> <8a6799be-bd42-49fb-8914-856c97bb1977@iki.fi> <113724ab-0028-493f-9605-6e8570f0939f@iki.fi> In-Reply-To: From: Ashutosh Bapat Date: Mon, 30 Mar 2026 17:50:52 +0530 X-Gm-Features: AQROBzAGm6tT8Y496XjV6GJg_3m4rBSuglNznPWzluP5FrgLn8kreUPVp7HCWho Message-ID: Subject: Re: Better shared data structure management and resizable shared data structures To: Heikki Linnakangas Cc: Robert Haas , Andres Freund , pgsql-hackers , chaturvedipalak1911@gmail.com Content-Type: multipart/mixed; boundary="0000000000008baf90064e3ce23b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008baf90064e3ce23b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Mar 27, 2026 at 12:31=E2=80=AFPM Ashutosh Bapat wrote: > > On Wed, Mar 25, 2026 at 9:35=E2=80=AFPM Ashutosh Bapat > wrote: > > > > On Tue, Mar 24, 2026 at 9:02=E2=80=AFPM Ashutosh Bapat > > wrote: > > > > > > > > > I will continue from 0008 tomorrow. > > > > > > > I reviewed the documentation part of 0008. I have a few edits attached. > > > > I have just one comment that's not covered in the edits > > > > @@ -4254,8 +4254,8 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_x= acts ppx > > > > Anonymous allocations are allocations that have been made > > with ShmemAlloc() directly, rather than via > > - ShmemInitStruct() or > > - ShmemInitHash(). > > + ShmemRequestStruct() or > > + ShmemRequestHash(). > > > > > > ShmemInitStruct() and ShmemInitHash() are still the functions to > > allocate named structures. If we are going to keep ShmemInitStruct() > > and ShmemInitHash() around for a while, I think it is more accurate to > > mention them in this sentence along with the new functions. > > > > Will continue reviewing the patch tomorrow. > > > > Here's a complete review of 0008 (from version 7). I see you have > already posted v8 which I have not looked at. I rebased my resizable shared memory structures patch on top of your v8 patch to check if newer APIs are still useful for resizable structures. Attached is the resultant WIP patch. I will rebase and finalize it once these patches are committed. Here are some review comments coming out of that exercise. The patch subtly changes what allocated_size means in ShmemIndexEntry. Without this patch, the next structure started from entry->location + allocated_bytes whereas now the given structure starts at a type aligned address whereas the next structure may start anywhere after size bytes from the type aligned address. I think these patches have got it right (current head the code gets it correct since it uses the same alignment for all the structures.). But I think the comments for allocated_size should make it clear that it's not the size available to the structure, as it used to be. The current comments and the code in HEAD may make one think so. What if the caller changes the ShmemStructDesc, which seems to be the handle we are talking about upthread? Should we make it opaque so that the callers can not play with it? --=20 Best Wishes, Ashutosh Bapat --0000000000008baf90064e3ce23b Content-Type: application/octet-stream; name="resizable_shmem_struct.patch.nocibot" Content-Disposition: attachment; filename="resizable_shmem_struct.patch.nocibot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnd5owod0 Y29tbWl0IDNmNmMyNGYwNzU3N2YyMDQ0MDkxZGVkNDAxZjYxOGQ3ZDY0ZTYxNGUKQXV0aG9yOiBB c2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4KRGF0ZTogICBUdWUg RmViIDE3IDE2OjUxOjIwIDIwMjYgKzA1MzAKCiAgICBXSVA6IHJlc2l6YWJsZSBzaGFyZWQgbWVt b3J5IHN0cnVjdHVyZXMKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNn bWwgYi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKaW5kZXggMmViZWM2OTI4ZDUuLjMx Y2QyZGFiYjU0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCkBAIC00MjQzLDggKzQyNDMsMzkgQEAg U0VMRUNUICogRlJPTSBwZ19sb2NrcyBwbCBMRUZUIEpPSU4gcGdfcHJlcGFyZWRfeGFjdHMgcHB4 CiAgICAgICAgU2l6ZSBvZiB0aGUgYWxsb2NhdGlvbiBpbiBieXRlcyBpbmNsdWRpbmcgcGFkZGlu Zy4gRm9yIGFub255bW91cwogICAgICAgIGFsbG9jYXRpb25zLCBubyBpbmZvcm1hdGlvbiBhYm91 dCBwYWRkaW5nIGlzIGF2YWlsYWJsZSwgc28gdGhlCiAgICAgICAgPGxpdGVyYWw+c2l6ZTwvbGl0 ZXJhbD4gYW5kIDxsaXRlcmFsPmFsbG9jYXRlZF9zaXplPC9saXRlcmFsPiBjb2x1bW5zCi0gICAg ICAgd2lsbCBhbHdheXMgYmUgZXF1YWwuIFBhZGRpbmcgaXMgbm90IG1lYW5pbmdmdWwgZm9yIGZy ZWUgbWVtb3J5LCBzbwotICAgICAgIHRoZSBjb2x1bW5zIHdpbGwgYmUgZXF1YWwgaW4gdGhhdCBj YXNlIGFsc28uCisgICAgICAgd2lsbCBhbHdheXMgYmUgZXF1YWwuIFBhZGRpbmcgaXMgbm90IG1l YW5pbmdmdWwgZm9yIGZyZWUgbWVtb3J5LCBzbyB0aGUKKyAgICAgICBjb2x1bW5zIHdpbGwgYmUg ZXF1YWwgaW4gdGhhdCBjYXNlIGFsc28uIEZvciByZXNpemFibGUgYWxsb2NhdGlvbnMgd2hpY2gK KyAgICAgICBtYXkgc3BhbiBtdWx0aXBsZSBtZW1vcnkgcGFnZXMsIHRoZSBwYWRkaW5nIGluY2x1 ZGVzIHRoZSBwYWRkaW5nIGR1ZSB0bworICAgICAgIHBhZ2UgYWxpZ25tZW50LgorICAgICAgPC9w YXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9s ZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgor ICAgICAgIDxzdHJ1Y3RmaWVsZD5tYXhpbXVtX3NpemU8L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnQ4 PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgTWF4aW11bSBzaXpl IGluIGJ5dGVzIHRoYXQgdGhlIGFsbG9jYXRpb24gY2FuIGdyb3cgdXB0by4gRm9yIGZpeGVkLXNp emUgYWxsb2NhdGlvbnMKKyAgICAgICA8c3RydWN0ZmllbGQ+YWxsb2NhdGVkX3NpemU8L3N0cnVj dGZpZWxkPiBhbmQKKyAgICAgICA8c3RydWN0ZmllbGQ+bWF4aXVtX3NpemU8L3N0cnVjdGZpZWxk PiBhcmUgc2FtZS4gRm9yIGFub255bW91cworICAgICAgIGFsbG9jYXRpb25zLCBubyBpbmZvcm1h dGlvbiBhYm91dCBtYXhpbXVtIHNpemUgaXMgYXZhaWxhYmxlLCBzbyB0aGUKKyAgICAgICA8bGl0 ZXJhbD5zaXplPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+bWF4aW11bV9zaXplPC9saXRlcmFsPiBj b2x1bW5zIHdpbGwKKyAgICAgICBhbHdheXMgYmUgZXF1YWwuIE1heGltdW0gc2l6ZSBpcyBub3Qg bWVhbmluZ2Z1bCBmb3IgZnJlZSBtZW1vcnksIHNvIHRoZQorICAgICAgIGNvbHVtbnMgd2lsbCBi ZSBlcXVhbCBpbiB0aGF0IGNhc2UgYWxzby4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8 L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50 cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+ YWxsb2NhdGVkX3NwYWNlPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50ODwvdHlwZT4KKyAgICAgIDwv cGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIEFkZHJlc3Mgc3BhY2UsIGFzIGFnYWluc3QgdGhl IG1lbW9yeSwgYWxsb2NhdGVkIGZvciB0aGlzIGFsbG9jYXRpb24gaW4KKyAgICAgICB0ZXJtcyBv ZiBieXRlcyBmb3IgcmVzaXphYmxlIHN0cnVjdHVyZXMuIEl0IGlzIGdyZWF0ZXIgdGhhbiBvciBl cXVhbCB0bworICAgICAgIDxzdHJ1Y3RmaWVsZD5hbGxvY2F0ZWRfc2l6ZTwvc3RydWN0ZmllbGQ+ IGZvciB0aGVzZSBzdHJ1Y3R1cmVzLiBJdCBhbHNvCisgICAgICAgaW5jbHVkZXMgcGFkZGluZywg aWYgYW55LiBGb3IgZml4ZWQtc2l6ZSBhbGxvY2F0aW9ucywgYW5vbnltb3VzCisgICAgICAgYWxs b2NhdGlvbnMsIGFuZCBmcmVlIG1lbW9yeSB0aGlzIGlzIHNhbWUgYXMKKyAgICAgICA8c3RydWN0 ZmllbGQ+YWxsb2NhdGVkX3NpemU8L3N0cnVjdGZpZWxkPi4KICAgICAgIDwvcGFyYT48L2VudHJ5 PgogICAgICA8L3Jvdz4KICAgICA8L3Rib2R5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9y dC9zeXN2X3NobWVtLmMgYi9zcmMvYmFja2VuZC9wb3J0L3N5c3Zfc2htZW0uYwppbmRleCAyZTM4 ODZjZjlmZS4uMjVhZWY0MTczYTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BvcnQvc3lzdl9z aG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3BvcnQvc3lzdl9zaG1lbS5jCkBAIC01ODksNiArNTg5 LDI3IEBAIGNoZWNrX2h1Z2VfcGFnZV9zaXplKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1 Y1NvdXJjZSBzb3VyY2UpCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBHZXQgdGhlIHBhZ2Ug c2l6ZSBiZWluZyB1c2VkIGJ5IHRoZSBzaGFyZWQgbWVtb3J5LgorICoKKyAqIFRoZSBmdW5jdGlv biBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgdGhlIHNoYXJlZCBtZW1vcnkgaGFzIGJlZW4g c2V0dXAuCisgKi8KK1NpemUKK0dldE9TUGFnZVNpemUodm9pZCkKK3sKKwlTaXplCQlvc19wYWdl X3NpemU7CisKKwlBc3NlcnQoaHVnZV9wYWdlc19zdGF0dXMgIT0gSFVHRV9QQUdFU19VTktOT1dO KTsKKworCW9zX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKworCS8qIElmIGh1 Z2UgcGFnZXMgYXJlIGFjdHVhbGx5IGluIHVzZSwgdXNlIGh1Z2UgcGFnZSBzaXplICovCisJaWYg KGh1Z2VfcGFnZXNfc3RhdHVzID09IEhVR0VfUEFHRVNfT04pCisJCUdldEh1Z2VQYWdlU2l6ZSgm b3NfcGFnZV9zaXplLCBOVUxMKTsKKworCXJldHVybiBvc19wYWdlX3NpemU7Cit9CisKIC8qCiAg KiBDcmVhdGVzIGFuIGFub255bW91cyBtbWFwKCllZCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCiAg KgpAQCAtOTkxLDMgKzEwMTIsNTEgQEAgUEdTaGFyZWRNZW1vcnlEZXRhY2godm9pZCkKIAkJQW5v bnltb3VzU2htZW0gPSBOVUxMOwogCX0KIH0KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBt ZW1vcnkgb2YgZ2l2ZW4gc2l6ZSBmcm9tIHRoZSBnaXZlbiBhZGRyZXNzIGlzIHJlbGVhc2VkLgor ICoKKyAqIFRoZSBhZGRyZXNzIGFuZCBzaXplIGFyZSBleHBlY3RlZCB0byBiZSBwYWdlIGFsaWdu ZWQuCisgKgorICogT25seSBzdXBwb3J0ZWQgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBhbm9u eW1vdXMgc2hhcmVkIG1lbW9yeS4KKyAqLwordm9pZAorUEdTaGFyZWRNZW1vcnlFbnN1cmVGcmVl ZCh2b2lkICphZGRyLCBTaXplIHNpemUpCit7CisJaWYgKCFBbm9ueW1vdXNTaG1lbSkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CisJCQkJIGVycm1zZygib25seSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeSBjYW4gYmUgZnJlZWQi KSkpOworCisJQXNzZXJ0KGFkZHIgPT0gKHZvaWQgKikgVFlQRUFMSUdOKEdldE9TUGFnZVNpemUo KSwgYWRkcikpOworCUFzc2VydChzaXplID09IFRZUEVBTElHTihHZXRPU1BhZ2VTaXplKCksIHNp emUpKTsKKwlBc3NlcnQoc2l6ZSA+IDApOworCisJaWYgKG1hZHZpc2UoYWRkciwgc2l6ZSwgTUFE Vl9SRU1PVkUpID09IC0xKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjb3VsZCBu b3QgZnJlZSBzaGFyZWQgbWVtb3J5OiAlbSIpKSk7Cit9CisKKy8qCisgKiBNYWtlIHN1cmUgdGhh dCB0aGUgbWVtb3J5IG9mIGdpdmVuIHNpemUgZnJvbSB0aGUgZ2l2ZW4gYWRkcmVzcyBpcyBhbGxv Y2F0ZWQuCisgKgorICogVGhlIGFkZHJlc3MgYW5kIHNpemUgYXJlIGV4cGVjdGVkIHRvIGJlIHBh Z2UgYWxpZ25lZC4KKyAqCisgKiBPbmx5IHN1cHBvcnRlZCBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBw b3J0IGFub255bW91cyBzaGFyZWQgbWVtb3J5LgorICovCit2b2lkCitQR1NoYXJlZE1lbW9yeUVu c3VyZUFsbG9jYXRlZCh2b2lkICphZGRyLCBTaXplIHNpemUpCit7CisJaWYgKCFBbm9ueW1vdXNT aG1lbSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygib25seSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeSBj YW4gYmUgYWxsb2NhdGVkIGF0IHJ1bnRpbWUiKSkpOworCisJQXNzZXJ0KGFkZHIgPT0gKHZvaWQg KikgVFlQRUFMSUdOKEdldE9TUGFnZVNpemUoKSwgYWRkcikpOworCUFzc2VydChzaXplID09IFRZ UEVBTElHTihHZXRPU1BhZ2VTaXplKCksIHNpemUpKTsKKwlBc3NlcnQoc2l6ZSA+IDApOworCisJ aWYgKG1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9QT1BVTEFURV9XUklURSkgPT0gLTEpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coImNvdWxkIG5vdCBhbGxvY2F0ZSBzaGFyZWQgbWVt b3J5OiAlbSIpKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3J0L3dpbjMyX3NobWVt LmMgYi9zcmMvYmFja2VuZC9wb3J0L3dpbjMyX3NobWVtLmMKaW5kZXggNzk0ZTRmY2IyYWQuLjRi MDdkYjIwNmY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3J0L3dpbjMyX3NobWVtLmMKKysr IGIvc3JjL2JhY2tlbmQvcG9ydC93aW4zMl9zaG1lbS5jCkBAIC02MjEsNiArNjIxLDMyIEBAIHBn d2luMzJfUmVzZXJ2ZVNoYXJlZE1lbW9yeVJlZ2lvbihIQU5ETEUgaENoaWxkKQogCXJldHVybiB0 cnVlOwogfQogCisvKgorICogTWFrZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBvZiBnaXZlbiBzaXpl IGZyb20gdGhlIGdpdmVuIGFkZHJlc3MgaXMgZnJlZWQuCisgKgorICogTm90IHN1cHBvcnRlZCBv biBXaW5kb3dzIGN1cnJlbnRseS4KKyAqLwordm9pZAorUEdTaGFyZWRNZW1vcnlFbnN1cmVGcmVl ZCh2b2lkICphZGRyLCBTaXplIHNpemUpCit7CisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCSBlcnJtc2coImZyZWVpbmcgc2hh cmVkIG1lbW9yeSBpcyBub3Qgc3VwcG9ydGVkIG9uIHdpbmRvd3MiKSkpOworfQorCisvKgorICog TWFrZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBvZiBnaXZlbiBzaXplIGZyb20gdGhlIGdpdmVuIGFk ZHJlc3MgaXMgYWxsb2NhdGVkLgorICoKKyAqIE5vdCBzdXBwb3J0ZWQgb24gV2luZG93cyBjdXJy ZW50bHkuCisgKi8KK3ZvaWQKK1BHU2hhcmVkTWVtb3J5RW5zdXJlQWxsb2NhdGVkKHZvaWQgKmFk ZHIsIFNpemUgc2l6ZSkKK3sKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJIGVycm1zZygiYWxsb2NhdGluZyBzaGFyZWQgbWVt b3J5IGlzIG5vdCBzdXBwb3J0ZWQgb24gd2luZG93cyIpKSk7Cit9CisKIC8qCiAgKiBUaGlzIGZ1 bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHN5c3Zfc2htZW0uYyBhbmQg ZG9lcyBub3QKICAqIHByb3ZpZGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBmb3IgV2luZG93cy4g IFRvIG9idGFpbiB0aGUgbGFyZ2UgcGFnZSBzaXplLApAQCAtNjQ4LDMgKzY3NCwyNiBAQCBjaGVj a19odWdlX3BhZ2Vfc2l6ZShpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291 cmNlKQogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KKworLyoKKyAqIEdldCB0aGUgcGFnZSBzaXplIHVz ZWQgYnkgdGhlIHNoYXJlZCBtZW1vcnkuCisgKgorICogVGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBj YWxsZWQgb25seSBhZnRlciB0aGUgc2hhcmVkIG1lbW9yeSBoYXMgYmVlbiBzZXR1cC4KKyAqLwor U2l6ZQorR2V0T1NQYWdlU2l6ZSh2b2lkKQoreworCVNZU1RFTV9JTkZPIHN5c2luZm87CisJU2l6 ZQkJb3NfcGFnZV9zaXplOworCisJQXNzZXJ0KGh1Z2VfcGFnZXNfc3RhdHVzICE9IEhVR0VfUEFH RVNfVU5LTk9XTik7CisKKwlHZXRTeXN0ZW1JbmZvKCZzeXNpbmZvKTsKKwlvc19wYWdlX3NpemUg PSBzeXNpbmZvLmR3UGFnZVNpemU7CisKKwkvKiBJZiBodWdlIHBhZ2VzIGFyZSBhY3R1YWxseSBp biB1c2UsIHVzZSBodWdlIHBhZ2Ugc2l6ZSAqLworCWlmIChodWdlX3BhZ2VzX3N0YXR1cyA9PSBI VUdFX1BBR0VTX09OKQorCQlHZXRIdWdlUGFnZVNpemUoJm9zX3BhZ2Vfc2l6ZSwgTlVMTCk7CisK KwlyZXR1cm4gb3NfcGFnZV9zaXplOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvc2htZW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggZDM4 MDg0MzJmZjEuLjgwMDhmOTVlYzQ0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTE3MSw2 ICsxNzEsOSBAQCB0eXBlZGVmIHN0cnVjdAogCVNobWVtQXJlYUtpbmQga2luZDsKIH0gU2htZW1S ZXF1ZXN0OwogCisjZGVmaW5lIFNITUVNX1JFUVVFU1RfU1BBQ0VfU0laRShyZXF1ZXN0KSBcCisJ KChyZXF1ZXN0KS0+b3B0aW9ucy0+bWF4aW11bV9zaXplID4gMCA/IChyZXF1ZXN0KS0+b3B0aW9u cy0+bWF4aW11bV9zaXplIDogKHJlcXVlc3QpLT5vcHRpb25zLT5zaXplKQorCiBzdGF0aWMgTGlz dCAqcmVxdWVzdGVkX3NobWVtX2FyZWFzOwogCiAvKgpAQCAtMjcwLDEyICsyNzMsMTUgQEAgdHlw ZWRlZiBzdHJ1Y3QKIAl2b2lkCSAgICpsb2NhdGlvbjsJCS8qIGxvY2F0aW9uIGluIHNoYXJlZCBt ZW0gKi8KIAlTaXplCQlzaXplOwkJCS8qICMgYnl0ZXMgcmVxdWVzdGVkIGZvciB0aGUgc3RydWN0 dXJlICovCiAJU2l6ZQkJYWxsb2NhdGVkX3NpemU7IC8qICMgYnl0ZXMgYWN0dWFsbHkgYWxsb2Nh dGVkICovCisJU2l6ZSAJCW1heGltdW1fc2l6ZTsJLyogdGhlIG1heGltdW0gc2l6ZSBhIHN0cnVj dHVyZSBjYW4gZ3JvdyB0byAqLworCVNpemUgYWxsb2NhdGVkX3NwYWNlOyAJCS8qIHRoZSB0b3Rh bCBhZGRyZXNzIHNwYWNlIGFsbG9jYXRlZCAqLwogfSBTaG1lbUluZGV4RW50OwogCiAvKiBUbyBn ZXQgcmVsaWFibGUgcmVzdWx0cyBmb3IgTlVNQSBpbnF1aXJ5IHdlIG5lZWQgdG8gInRvdWNoIHBh Z2VzIiBvbmNlICovCiBzdGF0aWMgYm9vbCBmaXJzdE51bWFUb3VjaCA9IHRydWU7CiAKIHN0YXRp YyBib29sIEF0dGFjaE9ySW5pdChTaG1lbVJlcXVlc3QgKnJlcXVlc3QsIGJvb2wgaW5pdF9hbGxv d2VkLCBib29sIGF0dGFjaF9hbGxvd2VkKTsKK3N0YXRpYyBTaXplIEVzdGltYXRlQWxsb2NhdGVk U2l6ZShTaG1lbUluZGV4RW50ICplbnRyeSk7CiAKIERhdHVtCQlwZ19udW1hX2F2YWlsYWJsZShQ R19GVU5DVElPTl9BUkdTKTsKIApAQCAtMzQ1LDE2ICszNTEsMjUgQEAgU2htZW1SZXF1ZXN0SW50 ZXJuYWwoU2htZW1TdHJ1Y3REZXNjICpkZXNjLCBTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzICpvcHRp b25zLAogCQlpZiAob3B0aW9ucy0+c2l6ZSA8PSAwICYmIG9wdGlvbnMtPnNpemUgIT0gU0hNRU1f UkVRVUVTVF9VTktOT1dOX1NJWkUpCiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzaXplICV6ZCBm b3Igc2hhcmVkIG1lbW9yeSByZXF1ZXN0IGZvciBcIiVzXCIiLAogCQkJCSBvcHRpb25zLT5zaXpl LCBvcHRpb25zLT5uYW1lKTsKKwkJaWYgKG9wdGlvbnMtPm1heGltdW1fc2l6ZSA8IDAgJiYgb3B0 aW9ucy0+bWF4aW11bV9zaXplICE9IFNITUVNX1JFUVVFU1RfVU5LTk9XTl9TSVpFKQorCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgbWF4aW11bV9zaXplICV6ZCBmb3Igc2hhcmVkIG1lbW9yeSByZXF1 ZXN0IGZvciBcIiVzXCIiLAorCQkJCSBvcHRpb25zLT5tYXhpbXVtX3NpemUsIG9wdGlvbnMtPm5h bWUpOwogCX0KIAllbHNlCiAJewogCQlpZiAob3B0aW9ucy0+c2l6ZSA9PSBTSE1FTV9SRVFVRVNU X1VOS05PV05fU0laRSkKIAkJCWVsb2coRVJST1IsICJTSE1FTV9SRVFVRVNUX1VOS05PV05fU0la RSBjYW5ub3QgYmUgdXNlZCBkdXJpbmcgc3RhcnR1cCIpOwotCQlpZiAob3B0aW9ucy0+c2l6ZSA8 PSAwKQotCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2l6ZSAlemQgZm9yIHNoYXJlZCBtZW1vcnkg cmVxdWVzdCBmb3IgXCIlc1wiIiwKLQkJCQkgb3B0aW9ucy0+c2l6ZSwgb3B0aW9ucy0+bmFtZSk7 CisJCWlmIChvcHRpb25zLT5tYXhpbXVtX3NpemUgPT0gU0hNRU1fUkVRVUVTVF9VTktOT1dOX1NJ WkUpCisJCQllbG9nKEVSUk9SLCAiU0hNRU1fUkVRVUVTVF9VTktOT1dOX1NJWkUgY2Fubm90IGJl IHVzZWQgZHVyaW5nIHN0YXJ0dXAiKTsKKwkJaWYgKG9wdGlvbnMtPm1heGltdW1fc2l6ZSA8IDAp CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBtYXhpbXVtX3NpemUgJXpkIGZvciBzaGFyZWQgbWVt b3J5IHJlcXVlc3QgZm9yIFwiJXNcIiIsCisJCQkJIG9wdGlvbnMtPm1heGltdW1fc2l6ZSwgb3B0 aW9ucy0+bmFtZSk7CiAJfQogCisJaWYgKG9wdGlvbnMtPm1heGltdW1fc2l6ZSA+IDAgJiYgb3B0 aW9ucy0+c2l6ZSA+PSBvcHRpb25zLT5tYXhpbXVtX3NpemUpCisJCWVsb2coRVJST1IsICJyZXNp emFibGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgXCIlc1wiIHNob3VsZCBoYXZlIG1heGltdW0g c2l6ZSAoJXpkKSBncmVhdGVyIHRoYW4gc2l6ZSAoJXpkKSIsCisJCQlvcHRpb25zLT5uYW1lLCBv cHRpb25zLT5tYXhpbXVtX3NpemUsIG9wdGlvbnMtPnNpemUpOworCiAJaWYgKHNobWVtX3N0YXJ0 dXBfc3RhdGUgIT0gU0JfUkVRVUVTVElORykKIAkJZWxvZyhFUlJPUiwgIlNobWVtUmVxdWVzdFN0 cnVjdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBhIHNobWVtX3JlcXVlc3QgY2FsbGJhY2siKTsK IApAQCAtMzc3LDggKzM5MiwxMiBAQCBTaG1lbVJlcXVlc3RJbnRlcm5hbChTaG1lbVN0cnVjdERl c2MgKmRlc2MsIFNobWVtUmVxdWVzdFN0cnVjdE9wdHMgKm9wdGlvbnMsCiB9CiAKIC8qCi0gKglT aG1lbUdldFJlcXVlc3RlZFNpemUoKSAtLS0gZXN0aW1hdGUgdGhlIHRvdGFsIHNpemUgb2YgYWxs IHJlZ2lzdGVyZWQgc2hhcmVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9y eSBzdHJ1Y3R1cmVzLgorICogU2htZW1HZXRSZXF1ZXN0ZWRTaXplKCkgLS0tIGVzdGltYXRlIHRo ZSB0b3RhbCBzaXplIG9mIGFsbCByZWdpc3RlcmVkIHNoYXJlZAorICogbWVtb3J5IHN0cnVjdHVy ZXMuCisgKgorICogV2hlbiBtYXhpbXVtX3NpemUgaXMgc3BlY2lmaWVkIGZvciBhIHJlcXVlc3Qs IHdlIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlCisgKiBpbml0aWFsIHNpemUgZm9yIHRoZSBlc3Rp bWF0aW9uLCB0byBlbnN1cmUgdGhhdCBlbm91Z2ggbWVtb3J5IGlzIHJlc2VydmVkIGZvcgorICog cmVzaXphYmxlIHN0cnVjdHVyZXMuCiAgKgogICogVGhpcyBpcyBjYWxsZWQgb25jZSBhdCBwb3N0 bWFzdGVyIHN0YXJ0dXAsIGJlZm9yZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgKiBoYXMg YmVlbiBjcmVhdGVkLgpAQCAtMzk4LDcgKzQxNyw3IEBAIFNobWVtR2V0UmVxdWVzdGVkU2l6ZSh2 b2lkKQogCXsKIAkJU2htZW1SZXF1ZXN0ICpyZXF1ZXN0ID0gKFNobWVtUmVxdWVzdCAqKSBsZmly c3QobGMpOwogCi0JCXNpemUgPSBhZGRfc2l6ZShzaXplLCByZXF1ZXN0LT5vcHRpb25zLT5zaXpl KTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNITUVNX1JFUVVFU1RfU1BBQ0VfU0laRShyZXF1 ZXN0KSk7CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCByZXF1ZXN0LT5vcHRpb25zLT5leHRyYV9z aXplKTsKIAkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHJlcXVlc3QtPm9wdGlvbnMtPmFsaWdubWVu dCk7CiAJfQpAQCAtNTY2LDEzICs1ODUsMTcgQEAgQXR0YWNoT3JJbml0KFNobWVtUmVxdWVzdCAq cmVxdWVzdCwgYm9vbCBpbml0X2FsbG93ZWQsIGJvb2wgYXR0YWNoX2FsbG93ZWQpCiAJewogCQkv KgogCQkgKiBXZSBpbnNlcnRlZCB0aGUgZW50cnkgdG8gdGhlIHNoYXJlZCBtZW1vcnkgaW5kZXgu IEFsbG9jYXRlCi0JCSAqIHJlcXVlc3RlZCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBmb3IgaXQs IGFuZCBkbyBiYXNpYwotCQkgKiBpbml0aWFsaXppb24uCisJCSAqIHJlcXVlc3RlZCBhbW91bnQg b2YgYWRkcmVzcyBzcGFjZSBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGZvciBpdCwgYW5k IGRvIGJhc2ljCisJCSAqIGluaXRpYWxpemlvbi4gVGhlIG1lbW9yeSBnZXRzIG1hcHBlZCBkdXJp bmcgaW5pdGlhbGl6YXRpb24gYXMKKwkJICogdGhlIGNvcnJlc3BvbmRpbmcgbWVtb3J5IHBhZ2Vz IGFyZSB3cml0dGVuIHRvLiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UKKwkJICogZm9yIGEgcmVzaXph YmxlIHN0cnVjdHVyZSB0byBncm93IHRvIGl0cyBtYXhpbXVtIHNpemUuIEl0IGlzIGV4cGVjdGVk CisJCSAqIHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHdpbGwgdXNlIG9ubHkgYXMg bXVjaAorCQkgKiBtZW1vcnkgYXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgcmVzaXphYmxlIHN0 cnVjdHVyZS4KIAkJICovCiAJCXNpemVfdAkJYWxsb2NhdGVkX3NpemU7CiAJCXZvaWQJICAgKnN0 cnVjdFB0cjsKIAotCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jUmF3KHJlcXVlc3QtPm9wdGlvbnMt PnNpemUsIHJlcXVlc3QtPm9wdGlvbnMtPmFsaWdubWVudCwgJmFsbG9jYXRlZF9zaXplKTsKKwkJ c3RydWN0UHRyID0gU2htZW1BbGxvY1JhdyhTSE1FTV9SRVFVRVNUX1NQQUNFX1NJWkUocmVxdWVz dCksIHJlcXVlc3QtPm9wdGlvbnMtPmFsaWdubWVudCwgJmFsbG9jYXRlZF9zaXplKTsKIAkJaWYg KHN0cnVjdFB0ciA9PSBOVUxMKQogCQl7CiAJCQkvKiBvdXQgb2YgbWVtb3J5OyByZW1vdmUgdGhl IGZhaWxlZCBTaG1lbUluZGV4IGVudHJ5ICovCkBAIC01ODQsMTEgKzYwNywyMyBAQCBBdHRhY2hP ckluaXQoU2htZW1SZXF1ZXN0ICpyZXF1ZXN0LCBib29sIGluaXRfYWxsb3dlZCwgYm9vbCBhdHRh Y2hfYWxsb3dlZCkKIAkJCQkJCQlkZXNjLT5uYW1lLCByZXF1ZXN0LT5vcHRpb25zLT5zaXplKSkp OwogCQl9CiAJCWluZGV4X2VudHJ5LT5zaXplID0gcmVxdWVzdC0+b3B0aW9ucy0+c2l6ZTsKLQkJ aW5kZXhfZW50cnktPmFsbG9jYXRlZF9zaXplID0gYWxsb2NhdGVkX3NpemU7CisJCWluZGV4X2Vu dHJ5LT5tYXhpbXVtX3NpemUgPSBTSE1FTV9SRVFVRVNUX1NQQUNFX1NJWkUocmVxdWVzdCk7CisJ CWluZGV4X2VudHJ5LT5hbGxvY2F0ZWRfc3BhY2UgPSBhbGxvY2F0ZWRfc2l6ZTsKKwkJaWYgKHJl cXVlc3QtPm9wdGlvbnMtPm1heGltdW1fc2l6ZSA+IDApCisJCXsKKwkJCS8qIFJlc2l6YWJsZSBz dHJ1Y3R1cmUuICovCisJCQlpbmRleF9lbnRyeS0+YWxsb2NhdGVkX3NpemUgPSBFc3RpbWF0ZUFs bG9jYXRlZFNpemUoaW5kZXhfZW50cnkpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogRml4ZWQt c2l6ZSBzdHJ1Y3R1cmUuKi8KKwkJCWluZGV4X2VudHJ5LT5hbGxvY2F0ZWRfc2l6ZSA9IGFsbG9j YXRlZF9zaXplOworCQl9CiAJCWluZGV4X2VudHJ5LT5sb2NhdGlvbiA9IHN0cnVjdFB0cjsKIAog CQlkZXNjLT5wdHIgPSBpbmRleF9lbnRyeS0+bG9jYXRpb247CiAJCWRlc2MtPnNpemUgPSBpbmRl eF9lbnRyeS0+c2l6ZTsKKwkJZGVzYy0+bWF4aW11bV9zaXplID0gaW5kZXhfZW50cnktPm1heGlt dW1fc2l6ZTsKIAkJc3dpdGNoIChyZXF1ZXN0LT5raW5kKQogCQl7CiAJCQljYXNlIFNITUVNX0tJ TkRfU1RSVUNUOgpAQCAtNjA3LDYgKzY0Miw5OCBAQCBBdHRhY2hPckluaXQoU2htZW1SZXF1ZXN0 ICpyZXF1ZXN0LCBib29sIGluaXRfYWxsb3dlZCwgYm9vbCBhdHRhY2hfYWxsb3dlZCkKIAlyZXR1 cm4gZm91bmQ7CiB9CiAKKy8qCisgKiBFc3RpbWF0ZSB0aGUgYWN0dWFsIG1lbW9yeSBhbGxvY2F0 ZWQgZm9yIGEgcmVzaXphYmxlIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIFNpemUgCitFc3RpbWF0 ZUFsbG9jYXRlZFNpemUoU2htZW1JbmRleEVudCAqZW50cnkpCit7CisJU2l6ZSBwYWdlX3NpemUg PSBHZXRPU1BhZ2VTaXplKCk7CisJY2hhciAqYWxpZ25fZW5kID0gKGNoYXIgKikgVFlQRUFMSUdO KHBhZ2Vfc2l6ZSwgKGNoYXIgKikgZW50cnktPmxvY2F0aW9uICsgZW50cnktPnNpemUpOworCWNo YXIgKmZsb29yX21heF9lbmQgPSAoY2hhciAqKSBUWVBFQUxJR05fRE9XTihwYWdlX3NpemUsIChj aGFyICopIGVudHJ5LT5sb2NhdGlvbiArIGVudHJ5LT5tYXhpbXVtX3NpemUpOworCisJQXNzZXJ0 KGVudHJ5LT5tYXhpbXVtX3NpemUgPj0gZW50cnktPnNpemUpOworCUFzc2VydChlbnRyeS0+YWxs b2NhdGVkX3NwYWNlID49IGVudHJ5LT5tYXhpbXVtX3NpemUpOworCisJaWYgKGFsaWduX2VuZCA+ PSBmbG9vcl9tYXhfZW5kKQorCXsKKwkJLyoKKwkJICogQSByZXNpemFibGUgc3RydWN0dXJlIHdo aWNoIGVuZHMgb24gdGhlIHNhbWUgcGFnZSBpcnJlc3BlY3RpdmUgb2YgaXRzCisJCSAqIHNpemUu IFRoZSBzdHJ1Y3R1cmUgd2lsbCBiZSBhbGxvY2F0ZWQgbWF4aW11bSBtZW1vcnkgYXQgdGhlIGJl Z2lubmluZy4KKwkJICovCisJCXJldHVybiBlbnRyeS0+YWxsb2NhdGVkX3NwYWNlOworCX0KKwll bHNlCisJeworCQkvKgorCQkgKiBUaGUgbWF4aW1hbCBzdHJ1Y3R1cmUgc3BhbnMgbXVsdGlwbGUg cGFnZXMuIEF0IHRoZSBiZWdpbm5pbmcgdGhlIHBhZ2VzCisJCSAqIGJldHdlZW4gdGhlIHBhZ2Ug d2hlcmUgdGhpcyBzdHJ1Y3R1cmUsIHdpdGggaXRzIGluaXRpYWwgc2l6ZSwgZW5kcyBhbmQKKwkJ ICogdGhlIHBhZ2Ugd2hlcmUgdGhlIG5leHQgc3RydWN0dXJlIHN0YXJ0cyB3aWxsIG5vdCBiZSBh bGxvY2F0ZWQuCisJCSAqLworCQlyZXR1cm4gZW50cnktPmFsbG9jYXRlZF9zcGFjZSAtIChmbG9v cl9tYXhfZW5kIC0gYWxpZ25fZW5kKTsKKwl9Cit9CisKK3ZvaWQKK1NobWVtUmVzaXplUmVnaXN0 ZXJlZChjb25zdCBTaG1lbVN0cnVjdERlc2MgKmRlc2MsIFNpemUgbmV3X3NpemUpCit7CisJU2ht ZW1JbmRleEVudCAqcmVzdWx0OworCWJvb2wgZm91bmQ7CisJU2l6ZSBwYWdlX3NpemUgPSBHZXRP U1BhZ2VTaXplKCk7CisJY2hhciAqbmV3X2VuZDsKKworCUFzc2VydChuZXdfc2l6ZSA+IDApOwor CisJaWYgKGRlc2MtPm1heGltdW1fc2l6ZSA8PSAwKQorCQllbG9nKEVSUk9SLCAic2hhcmVkIG1l bW9yeSBzdHJ1Y3QgXCIlc1wiIGlzIG5vdCByZXNpemFibGUiLCBkZXNjLT5uYW1lKTsKKworCS8q IGxvb2sgaXQgdXAgaW4gdGhlIHNobWVtIGluZGV4ICovCisJTFdMb2NrQWNxdWlyZShTaG1lbUlu ZGV4TG9jaywgTFdfRVhDTFVTSVZFKTsKKwlyZXN1bHQgPSAoU2htZW1JbmRleEVudCAqKSBoYXNo X3NlYXJjaChTaG1lbUluZGV4LCBkZXNjLT5uYW1lLCBIQVNIX0ZJTkQsICZmb3VuZCk7CisJaWYg KCFmb3VuZCkKKwkJZWxvZyhFUlJPUiwgInNobWVtIHN0cnVjdCBcIiVzXCIgaXMgbm90IGluaXRp YWxpemVkIiwgZGVzYy0+bmFtZSk7CisKKwlBc3NlcnQocmVzdWx0KTsKKworCWlmIChyZXN1bHQt Pm1heGltdW1fc2l6ZSAhPSBkZXNjLT5tYXhpbXVtX3NpemUpCisJCWVsb2coRVJST1IsICJzaG1l bSBzdHJ1Y3QgXCIlc1wiIGhhcyBjb3JydXB0ZWQgZGVzY3JpcHRvciIsIGRlc2MtPm5hbWUpOwor CisJaWYgKHJlc3VsdC0+bWF4aW11bV9zaXplIDwgbmV3X3NpemUpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTKSwKKwkJCQkgZXJy bXNnKCJub3QgZW5vdWdoIGFkZHJlc3Mgc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIHJlc2l6aW5nIHN0 cnVjdHVyZSBcIiVzXCIiLCBkZXNjLT5uYW1lKSkpOworCisJLyoKKwkgKiBXaGVuIHNocmlua2lu ZyB0aGUgbWVtb3J5IGZyb20gdGhlIHBhZ2UgYWxpZ25lZCBuZXcgZW5kIHRvIHRoZSBzdGFydCBv ZgorCSAqIHRoZSBwYWdlIGNvbnRhaW5pbmcgZW5kIG9mIHRoZSByZXNlcnZlZCBzcGFjZSBpcyBu b3QgcmVxdWlyZWQuIFdoZXJlYXMKKwkgKiB3aGVuIGV4cGFuZGluZyB0aGUgbWVtb3J5IGZyb20g dGhlIHN0YXJ0IG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIHN0YXJ0CisJICogb2YgdGhlIHN0 cnVjdHVyZSB0byB0aGUgcGFnZSBhbGlnbmVkIG5ldyBlbmQgaXMgcmVxdWlyZWQuCisJICovCisJ bmV3X2VuZCA9IChjaGFyICopIFRZUEVBTElHTihwYWdlX3NpemUsIChjaGFyICopIHJlc3VsdC0+ bG9jYXRpb24gKyBuZXdfc2l6ZSk7CisJaWYgKG5ld19zaXplIDwgcmVzdWx0LT5zaXplKQorCXsK KwkJY2hhciAqbWF4X2VuZCA9IChjaGFyICopIFRZUEVBTElHTl9ET1dOKHBhZ2Vfc2l6ZSwgKGNo YXIgKikgcmVzdWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+bWF4aW11bV9zaXplKTsKKwkJU2l6ZSBm cmVlX3NpemUgPSBtYXhfZW5kIC0gbmV3X2VuZDsKKworCQlpZiAoZnJlZV9zaXplID4gMCkKKwkJ CVBHU2hhcmVkTWVtb3J5RW5zdXJlRnJlZWQobmV3X2VuZCwgZnJlZV9zaXplKTsKKwl9CisJZWxz ZSBpZiAobmV3X3NpemUgPiByZXN1bHQtPnNpemUpCisJeworCQljaGFyICpzdHJ1Y3Rfc3RhcnQg PSAoY2hhciAqKSBUWVBFQUxJR05fRE9XTihwYWdlX3NpemUsIChjaGFyICopIHJlc3VsdC0+bG9j YXRpb24pOworCQlTaXplIGFsbG9jX3NpemUgPSBuZXdfZW5kIC0gc3RydWN0X3N0YXJ0OworCisJ CWlmIChhbGxvY19zaXplID4gMCkKKwkJCVBHU2hhcmVkTWVtb3J5RW5zdXJlQWxsb2NhdGVkKHN0 cnVjdF9zdGFydCwgYWxsb2Nfc2l6ZSk7CisJfQorCisJLyogVXBkYXRlIHNobWVtIGluZGV4IGVu dHJ5LiAqLworCXJlc3VsdC0+c2l6ZSA9IG5ld19zaXplOworCXJlc3VsdC0+YWxsb2NhdGVkX3Np emUgPSBFc3RpbWF0ZUFsbG9jYXRlZFNpemUocmVzdWx0KTsKKworCUxXTG9ja1JlbGVhc2UoU2ht ZW1JbmRleExvY2spOworfQorCiAvKgogICoJSW5pdFNobWVtQWxsb2NhdG9yKCkgLS0tIHNldCB1 cCBiYXNpYyBwb2ludGVycyB0byBzaGFyZWQgbWVtb3J5LgogICoKQEAgLTk3NSw3ICsxMTAyLDcg QEAgbXVsX3NpemUoU2l6ZSBzMSwgU2l6ZSBzMikKIERhdHVtCiBwZ19nZXRfc2htZW1fYWxsb2Nh dGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIHsKLSNkZWZpbmUgUEdfR0VUX1NITUVNX1NJWkVTX0NP TFMgNAorI2RlZmluZSBQR19HRVRfU0hNRU1fU0laRVNfQ09MUyA2CiAJUmV0dXJuU2V0SW5mbyAq cnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwogCUhBU0hfU0VR X1NUQVRVUyBoc3RhdDsKIAlTaG1lbUluZGV4RW50ICplbnQ7CkBAIC05OTcsNyArMTEyNCwxNSBA QCBwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJdmFsdWVzWzFd ID0gSW50NjRHZXREYXR1bSgoY2hhciAqKSBlbnQtPmxvY2F0aW9uIC0gKGNoYXIgKikgU2htZW1T ZWdIZHIpOwogCQl2YWx1ZXNbMl0gPSBJbnQ2NEdldERhdHVtKGVudC0+c2l6ZSk7CiAJCXZhbHVl c1szXSA9IEludDY0R2V0RGF0dW0oZW50LT5hbGxvY2F0ZWRfc2l6ZSk7Ci0JCW5hbWVkX2FsbG9j YXRlZCArPSBlbnQtPmFsbG9jYXRlZF9zaXplOworCQl2YWx1ZXNbNF0gPSBJbnQ2NEdldERhdHVt KGVudC0+bWF4aW11bV9zaXplKTsKKwkJdmFsdWVzWzVdID0gSW50NjRHZXREYXR1bShlbnQtPmFs bG9jYXRlZF9zcGFjZSk7CisKKwkJLyoKKwkJICogS2VlcCB0cmFjayBvZiB0aGUgdG90YWwgYWxs b2NhdGVkIHNwYWNlIGZvciBuYW1lZCBzaG1lbSBhcmVhcywgdG8gYmUKKwkJICogYWJsZSB0byBj YWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYW5vbnlt b3VzCisJCSAqIGFyZWFzIGFuZCB0aGUgYW1vdW50IG9mIGZyZWUgc2hhcmVkIG1lbW9yeSBhdCB0 aGUgZW5kIG9mIHRoZSBzZWdtZW50LgorCQkgKi8KKwkJbmFtZWRfYWxsb2NhdGVkICs9IGVudC0+ YWxsb2NhdGVkX3NwYWNlOwogCiAJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVz dWx0LCByc2luZm8tPnNldERlc2MsCiAJCQkJCQkJIHZhbHVlcywgbnVsbHMpOwpAQCAtMTAwOCw2 ICsxMTQzLDggQEAgcGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ bnVsbHNbMV0gPSB0cnVlOwogCXZhbHVlc1syXSA9IEludDY0R2V0RGF0dW0oU2htZW1BbGxvY2F0 b3ItPmZyZWVfb2Zmc2V0IC0gbmFtZWRfYWxsb2NhdGVkKTsKIAl2YWx1ZXNbM10gPSB2YWx1ZXNb Ml07CisJdmFsdWVzWzRdID0gdmFsdWVzWzJdOworCXZhbHVlc1s1XSA9IHZhbHVlc1syXTsKIAl0 dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2 YWx1ZXMsIG51bGxzKTsKIAogCS8qIG91dHB1dCBhcy1vZi15ZXQgdW51c2VkIHNoYXJlZCBtZW1v cnkgKi8KQEAgLTEwMTYsNiArMTE1Myw4IEBAIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucyhQR19G VU5DVElPTl9BUkdTKQogCW51bGxzWzFdID0gZmFsc2U7CiAJdmFsdWVzWzJdID0gSW50NjRHZXRE YXR1bShTaG1lbVNlZ0hkci0+dG90YWxzaXplIC0gU2htZW1BbGxvY2F0b3ItPmZyZWVfb2Zmc2V0 KTsKIAl2YWx1ZXNbM10gPSB2YWx1ZXNbMl07CisJdmFsdWVzWzRdID0gdmFsdWVzWzJdOworCXZh bHVlc1s1XSA9IHZhbHVlc1syXTsKIAl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJl c3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAogCUxXTG9ja1JlbGVhc2Uo U2htZW1JbmRleExvY2spOwpAQCAtMTIwMywyMyArMTM0Miw5IEBAIHBnX2dldF9zaG1lbV9hbGxv Y2F0aW9uc19udW1hKFBHX0ZVTkNUSU9OX0FSR1MpCiBTaXplCiBwZ19nZXRfc2htZW1fcGFnZXNp emUodm9pZCkKIHsKLQlTaXplCQlvc19wYWdlX3NpemU7Ci0jaWZkZWYgV0lOMzIKLQlTWVNURU1f SU5GTyBzeXNpbmZvOwotCi0JR2V0U3lzdGVtSW5mbygmc3lzaW5mbyk7Ci0Jb3NfcGFnZV9zaXpl ID0gc3lzaW5mby5kd1BhZ2VTaXplOwotI2Vsc2UKLQlvc19wYWdlX3NpemUgPSBzeXNjb25mKF9T Q19QQUdFU0laRSk7Ci0jZW5kaWYKLQogCUFzc2VydChJc1VuZGVyUG9zdG1hc3Rlcik7Ci0JQXNz ZXJ0KGh1Z2VfcGFnZXNfc3RhdHVzICE9IEhVR0VfUEFHRVNfVU5LTk9XTik7Ci0KLQlpZiAoaHVn ZV9wYWdlc19zdGF0dXMgPT0gSFVHRV9QQUdFU19PTikKLQkJR2V0SHVnZVBhZ2VTaXplKCZvc19w YWdlX3NpemUsIE5VTEwpOwogCi0JcmV0dXJuIG9zX3BhZ2Vfc2l6ZTsKKwlyZXR1cm4gR2V0T1NQ YWdlU2l6ZSgpOwogfQogCiBEYXR1bQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggMDExOGU5 NzBkZGEuLmQ0YTRjM2M1YWZkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTg2NjQsOCAr ODY2NCw4IEBACiB7IG9pZCA9PiAnNTA1MicsIGRlc2NyID0+ICdhbGxvY2F0aW9ucyBmcm9tIHRo ZSBtYWluIHNoYXJlZCBtZW1vcnkgc2VnbWVudCcsCiAgIHByb25hbWUgPT4gJ3BnX2dldF9zaG1l bV9hbGxvY2F0aW9ucycsIHByb3Jvd3MgPT4gJzUwJywgcHJvcmV0c2V0ID0+ICd0JywKICAgcHJv dm9sYXRpbGUgPT4gJ3YnLCBwcm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAn JywKLSAgcHJvYWxsYXJndHlwZXMgPT4gJ3t0ZXh0LGludDgsaW50OCxpbnQ4fScsIHByb2FyZ21v ZGVzID0+ICd7byxvLG8sb30nLAotICBwcm9hcmduYW1lcyA9PiAne25hbWUsb2ZmLHNpemUsYWxs b2NhdGVkX3NpemV9JywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3t0ZXh0LGludDgsaW50OCxpbnQ4 LGludDgsaW50OH0nLCBwcm9hcmdtb2RlcyA9PiAne28sbyxvLG8sbyxvfScsCisgIHByb2FyZ25h bWVzID0+ICd7bmFtZSxvZmYsc2l6ZSxhbGxvY2F0ZWRfc2l6ZSxtYXhpbXVtX3NpemUsYWxsb2Nh dGVkX3NwYWNlfScsCiAgIHByb3NyYyA9PiAncGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zJywKICAg cHJvYWNsID0+ICd7UE9TVEdSRVM9WCxwZ19yZWFkX2FsbF9zdGF0cz1YfScgfSwKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wZ19zaG1lbS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wZ19zaG1lbS5oCmluZGV4IDEwYzdiMDY1ODYxLi5mMGVmYmYyYWVjMSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9wZ19zaG1lbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cGdfc2htZW0uaApAQCAtODksNiArODksOSBAQCBleHRlcm4gUEdTaG1lbUhlYWRlciAqUEdTaGFy ZWRNZW1vcnlDcmVhdGUoU2l6ZSBzaXplLAogCQkJCQkJCQkJCSAgIFBHU2htZW1IZWFkZXIgKipz aGltKTsKIGV4dGVybiBib29sIFBHU2hhcmVkTWVtb3J5SXNJblVzZSh1bnNpZ25lZCBsb25nIGlk MSwgdW5zaWduZWQgbG9uZyBpZDIpOwogZXh0ZXJuIHZvaWQgUEdTaGFyZWRNZW1vcnlEZXRhY2go dm9pZCk7CitleHRlcm4gdm9pZCBQR1NoYXJlZE1lbW9yeUVuc3VyZUZyZWVkKHZvaWQgKmFkZHIs IFNpemUgc2l6ZSk7CitleHRlcm4gdm9pZCBQR1NoYXJlZE1lbW9yeUVuc3VyZUFsbG9jYXRlZCh2 b2lkICphZGRyLCBTaXplIHNpemUpOwogZXh0ZXJuIHZvaWQgR2V0SHVnZVBhZ2VTaXplKFNpemUg Kmh1Z2VwYWdlc2l6ZSwgaW50ICptbWFwX2ZsYWdzKTsKK2V4dGVybiBTaXplIEdldE9TUGFnZVNp emUodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBQR19TSE1FTV9IICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgK aW5kZXggMTUwYzg2ZDU4ODQuLjFhOWY5ZTNiN2RiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9z dG9yYWdlL3NobWVtLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCkBAIC0zNyw2 ICszNywxMiBAQCB0eXBlZGVmIGVudW0KICAqCiAgKiAnbmFtZScgYW5kICdzaXplJyBhcmUgcmVx dWlyZWQuICBJbml0aWFsaXplIGFueSBvcHRpb25hbCBmaWVsZHMgdGhhdCB5b3UKICAqIGRvbid0 IHVzZSB0byB6ZXJvcy4KKyAqIAorICogJ21heGltdW1fc2l6ZScgaXMgdGhlIG1heGltdW0gc2l6 ZSB0aGlzIHJlc2l6YWJsZSBzdHJ1Y3QgY2FuIGdyb3cgdG8gaW4gZnV0dXJlLgorICogRm9yIGZp eGVkLXNpemUgc3RydWN0dXJlcywgc2V0IGl0IHRvIDAuIFRoZSBtZW1vcnkgZm9yIHRoZSBtYXhp bXVtIHNpemUgaXMKKyAqIG5vdCBhbGxvY2F0ZWQgcmlnaHQgYXdheSBidXQgdGhlIGNvcnJlc3Bv bmRpbmcgYWRkcmVzcyBzcGFjZSBpcyByZXNlcnZlZCBzbworICogdGhhdCBtZW1vcnkgY2FuIGJl IG1hcHBlZCB0byBpdCB3aGVuIHRoZSBzdHJ1Y3R1cmUgZ3Jvd3Mgb3IgdGFrZW4gYXdheSBmcm9t CisgKiBpdCB3aGVuIHRoZSBzdHJ1Y3R1cmUgc2hyaW5rcy4KICAqCiAgKiBBZnRlciByZWdpc3Ry YXRpb24sIHRoZSBzaG1lbSBtYWNoaW5lcnkgcmVzZXJ2ZXMgbWVtb3J5IGZvciB0aGUgYXJlYSwg c2V0cwogICogJypwdHInIHRvIHBvaW50IHRvIHRoZSBhbGxvY2F0aW9uLCBhbmQgY2FsbHMgdGhl IGNhbGxiYWNrcyBhdCB0aGUgcmlnaHQKQEAgLTQ5LDYgKzU1LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg U2htZW1TdHJ1Y3REZXNjCiAKIAl2b2lkCSAgICpwdHI7CiAJc2l6ZV90CQlzaXplOworCXNpemVf dAkJbWF4aW11bV9zaXplOwogfSBTaG1lbVN0cnVjdERlc2M7CiAKICNkZWZpbmUgU0hNRU1fUkVR VUVTVF9VTktOT1dOX1NJWkUgKC0xKQpAQCAtNzIsNiArNzksMTQgQEAgdHlwZWRlZiBzdHJ1Y3Qg U2htZW1SZXF1ZXN0U3RydWN0T3B0cwogCSAqLwogCXNpemVfdAkJZXh0cmFfc2l6ZTsKIAorCS8q CQorCSAqIE1heGltdW0gc2l6ZSB0aGlzIHN0cnVjdHVyZSBjYW4gZ3JvdyB1cHRvIGluIGZ1dHVy ZS4gVGhlIG1lbW9yeSBpcyBub3QKKwkgKiBhbGxvY2F0ZWQgcmlnaHQgYXdheSBidXQgdGhlIGNv cnJlc3BvbmRpbmcgYWRkcmVzcyBzcGFjZSBpcyByZXNlcnZlZCBzbworCSAqIHRoYXQgbWVtb3J5 IGNhbiBiZSBtYXBwZWQgdG8gaXQgd2hlbiB0aGUgc3RydWN0dXJlIGdyb3dzLiBUeXBpY2FsbHkK KwkgKiBzaG91bGQgYmUgdXNlZCBmb3IgcmVzaXphYmxlIHN0cnVjdHVyZXMgd2hpY2ggbmVlZCBj b250aWd1b3VzIG1lbW9yeS4KKwkgKi8KKwlzaXplX3QJCW1heGltdW1fc2l6ZTsKKwogCS8qCiAJ ICogV2hlbiB0aGUgc2htZW0gYXJlYSBpcyBpbml0aWFsaXplZCBvciBhdHRhY2hlZCB0bywgcG9p bnRlciB0byBpdCBpcwogCSAqIHN0b3JlZCBpbiAqcHRyLiAgSXQgdXN1YWxseSBwb2ludHMgdG8g YSBnbG9iYWwgdmFyaWFibGUsIHVzZWQgdG8gYWNjZXNzCkBAIC0yMTQsNiArMjI5LDcgQEAgZXh0 ZXJuIHZvaWQgKlNobWVtQWxsb2NOb0Vycm9yKFNpemUgc2l6ZSk7CiBleHRlcm4gYm9vbCBTaG1l bUFkZHJJc1ZhbGlkKGNvbnN0IHZvaWQgKmFkZHIpOwogCiBleHRlcm4gdm9pZCBSZWdpc3RlclNo bWVtQ2FsbGJhY2tzKGNvbnN0IFNobWVtQ2FsbGJhY2tzICpjYWxsYmFja3MpOworZXh0ZXJuIHZv aWQgU2htZW1SZXNpemVSZWdpc3RlcmVkKGNvbnN0IFNobWVtU3RydWN0RGVzYyAqZGVzYywgU2l6 ZSBuZXdfc2l6ZSk7CiAKIGV4dGVybiB2b2lkIFNobWVtUmVxdWVzdEludGVybmFsKFNobWVtU3Ry dWN0RGVzYyAqZGVzYywgU2htZW1SZXF1ZXN0U3RydWN0T3B0cyAqb3B0aW9ucywKIAkJCQkJCQkJ IFNobWVtQXJlYUtpbmQga2luZCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2Vm aWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQppbmRleCA2MmZhYjlmM2MyZi4uM2VmODIy ODg1MWEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQCBTVUJESVJTID0gXAogCQkgIGxp YnBxX3BpcGVsaW5lIFwKIAkJICBvYXV0aF92YWxpZGF0b3IgXAogCQkgIHBsc2FtcGxlIFwKKwkJ ICByZXNpemFibGVfc2htZW0gXAogCQkgIHNwZ2lzdF9uYW1lX29wcyBcCiAJCSAgdGVzdF9haW8g XAogCQkgIHRlc3RfYmluYXJ5aGVhcCBcCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21l c29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAppbmRleCA2Nzk5YmExMWUx MS4uNTI0NGI0YmRiOGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMTMsNiArMTMsNyBAQCBzdWJk aXIoJ2xpYnBxX3BpcGVsaW5lJykKIHN1YmRpcignbmJ0cmVlJykKIHN1YmRpcignb2F1dGhfdmFs aWRhdG9yJykKIHN1YmRpcigncGxzYW1wbGUnKQorc3ViZGlyKCdyZXNpemFibGVfc2htZW0nKQog c3ViZGlyKCdzcGdpc3RfbmFtZV9vcHMnKQogc3ViZGlyKCdzc2xfcGFzc3BocmFzZV9jYWxsYmFj aycpCiBzdWJkaXIoJ3Rlc3RfYWlvJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvcmVz aXphYmxlX3NobWVtL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0v TWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYzYmQ4YWMw YzdmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0v TWFrZWZpbGUKQEAgLTAsMCArMSwyMyBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9z aG1lbS9NYWtlZmlsZQorCitNT0RVTEVTID0gcmVzaXphYmxlX3NobWVtCitUQVBfVEVTVFMgPSAx CisKK0VYVEVOU0lPTiA9IHJlc2l6YWJsZV9zaG1lbQorREFUQSA9IHJlc2l6YWJsZV9zaG1lbS0t MS4wLnNxbAorUEdGSUxFREVTQyA9ICJyZXNpemFibGVfc2htZW0gLSB0ZXN0IG1vZHVsZSBmb3Ig cmVzaXphYmxlIHNoYXJlZCBtZW1vcnkiCisKKyMgVGhpcyB0ZXN0IHJlcXVpcmVzIGxpYnJhcnkg dG8gYmUgbG9hZGVkIGF0IHRoZSBzZXJ2ZXIgc3RhcnQsIHNvIGRpc2FibGUKKyMgaW5zdGFsbGNo ZWNrCitOT19JTlNUQUxMQ0hFQ0sgPSAxCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBw Z19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAk KFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbQor dG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9N YWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvbWFrZWZpbGVzL3BneHMu bWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9t ZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL21lc29uLmJ1aWxk Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OTNiYmJjOTVjMwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL21lc29uLmJ1 aWxkCkBAIC0wLDAgKzEsMzYgQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0v bWVzb24uYnVpbGQKKworcmVzaXphYmxlX3NobWVtX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Jlc2l6 YWJsZV9zaG1lbS5jJywKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHJlc2l6 YWJsZV9zaG1lbV9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0 cmFfYXJnczogWworICAgICctLU5BTUUnLCAncmVzaXphYmxlX3NobWVtJywKKyAgICAnLS1GSUxF REVTQycsICdyZXNpemFibGVfc2htZW0gLSB0ZXN0IG1vZHVsZSBmb3IgcmVzaXphYmxlIHNoYXJl ZCBtZW1vcnknLF0pCitlbmRpZgorCityZXNpemFibGVfc2htZW0gPSBzaGFyZWRfbW9kdWxlKCdy ZXNpemFibGVfc2htZW0nLAorICByZXNpemFibGVfc2htZW1fc291cmNlcywKKyAga3dhcmdzOiBw Z190ZXN0X21vZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xpYnMgKz0gcmVzaXphYmxlX3NobWVt CisKK3Rlc3RfaW5zdGFsbF9kYXRhICs9IGZpbGVzKAorICAncmVzaXphYmxlX3NobWVtLmNvbnRy b2wnLAorICAncmVzaXphYmxlX3NobWVtLS0xLjAuc3FsJywKKykKKwordGVzdHMgKz0geworICAn bmFtZSc6ICdyZXNpemFibGVfc2htZW0nLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9k aXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3RhcCc6IHsKKyAg ICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfcmVzaXphYmxlX3NobWVtLnBsJywKKyAgICBdLAor ICAgICMgVGhpcyB0ZXN0IHJlcXVpcmVzIGxpYnJhcnkgdG8gYmUgbG9hZGVkIGF0IHRoZSBzZXJ2 ZXIgc3RhcnQsIHNvIGRpc2FibGUKKyAgICAjIGluc3RhbGxjaGVjaworICAgICdydW5uaW5nY2hl Y2snOiBmYWxzZSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvcmVzaXph YmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvcmVz aXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYzFiY2I2MTE3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0tLTEuMC5zcWwKQEAg LTAsMCArMSwzNyBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXph YmxlX3NobWVtLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2Vk IGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNS RUFURSBFWFRFTlNJT04gcmVzaXphYmxlX3NobWVtIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQK KworLS0gRnVuY3Rpb24gdG8gcmVzaXplIHRoZSB0ZXN0IHN0cnVjdHVyZSBpbiB0aGUgc2hhcmVk IG1lbW9yeQorQ1JFQVRFIEZVTkNUSU9OIHJlc2l6YWJsZV9zaG1lbV9yZXNpemUobmV3X2VudHJp ZXMgaW50ZWdlcikKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdF IEMgU1RSSUNUOworCistLSBGdW5jdGlvbiB0byB3cml0ZSBkYXRhIHRvIGFsbCBlbnRyaWVzIGlu IHRoZSB0ZXN0IHN0cnVjdHVyZSBpbiBzaGFyZWQgbWVtb3J5CistLSBXcml0aW5nIGFsbCB0aGUg ZW50cmllcyBtYWtlcyBzdXJlIHRoYXQgdGhlIG1lbW9yeSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQg YW5kCistLSBtYXBwZWQgdG8gdGhlIHByb2Nlc3MsIHNvIHRoYXQgd2UgY2FuIGxhdGVyIG1lYXN1 cmUgdGhlIG1lbW9yeSB1c2FnZS4KK0NSRUFURSBGVU5DVElPTiByZXNpemFibGVfc2htZW1fd3Jp dGUoZW50cnlfdmFsdWUgaW50ZWdlcikKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFN RScKK0xBTkdVQUdFIEMgU1RSSUNUOworCistLSBGdW5jdGlvbiB0byB2ZXJpZnkgdGhhdCBzcGVj aWZpZWQgbnVtYmVyIG9mIGluaXRpYWwgZW50cmllcyBoYXZlIGV4cGVjdGVkIHZhbHVlLgorLS0g UmVhZGluZyBhbGwgdGhlIGVudHJpZXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBtZW1vcnkgaXMgYWN0 dWFsbHkgbWFwcGVkIHRvIHRoZQorLS0gcHJvY2Vzcywgc28gdGhhdCB3ZSBjYW4gbGF0ZXIgbWVh c3VyZSB0aGUgbWVtb3J5IHVzYWdlLgorQ1JFQVRFIEZVTkNUSU9OIHJlc2l6YWJsZV9zaG1lbV9y ZWFkKGVudHJ5X2NvdW50IGludGVnZXIsIGVudHJ5X3ZhbHVlIGludGVnZXIpCitSRVRVUk5TIGJv b2xlYW4KK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIFNUUklDVDsKKworLS0gRnVu Y3Rpb24gdG8gcmVwb3J0IG1lbW9yeSB1c2FnZSBzdGF0aXN0aWNzIG9mIHRoZSBjYWxsaW5nIGJh Y2tlbmQKK0NSRUFURSBGVU5DVElPTiByZXNpemFibGVfc2htZW1fdXNhZ2UoT1VUIHJzc19hbm9u IGJpZ2ludCwgT1VUIHJzc19maWxlIGJpZ2ludCwgT1VUIHJzc19zaG1lbSBiaWdpbnQsIE9VVCB2 bV9zaXplIGJpZ2ludCkKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIFNUUklDVDsK KworLS0gRnVuY3Rpb24gdG8gZ2V0IHRoZSBzaGFyZWQgbWVtb3J5IHBhZ2Ugc2l6ZQorQ1JFQVRF IEZVTkNUSU9OIHJlc2l6YWJsZV9zaG1lbV9wYWdlc2l6ZSgpCitSRVRVUk5TIGludGVnZXIKK0FT ICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIFNUUklDVDsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRjMGJiNDNmYzIzCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmMKQEAgLTAs MCArMSwyNzkgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiByZXNpemFibGVfc2htZW0u YworICoJCVRlc3QgbW9kdWxlIGZvciBQb3N0Z3JlU1FMJ3MgcmVzaXphYmxlIHNoYXJlZCBtZW1v cnkgZnVuY3Rpb25hbGl0eQorICoKKyAqIFRoaXMgbW9kdWxlIGRlbW9uc3RyYXRlcyBhbmQgdGVz dHMgdGhlIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IEFQSQorICogcHJvdmlkZWQgYnkgc2htZW0u Yy9zaG1lbS5oLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJz dG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0 aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMv dGltZXN0YW1wLmgiCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorCisjaW5jbHVk ZSA8c3RkaW8uaD4KKworUEdfTU9EVUxFX01BR0lDOworCisvKgorICogRGVmYXVsdCBhbW91bnQg b2Ygc2hhcmVkIGJ1ZmZlcnMgYW5kIGhlbmNlIHRoZSBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeQor ICogYWxsb2NhdGVkIGJ5IGRlZmF1bHQgaXMgaW4gaHVuZHJlZHMgb2YgTUJzLiBUaGUgbWVtb3J5 IGFsbG9jYXRlZCB0byB0aGUgdGVzdAorICogc3RydWN0dXJlIHdpbGwgYmUgbm90aWNlYWJsZSBv bmx5IHdoZW4gaXQncyBpbiB0aGUgc2FtZSBvcmRlci4KKyAqLworI2RlZmluZSBURVNUX0lOSVRJ QUxfRU5UUklFUwkoMjUgKiAxMDI0ICogMTAyNCkJCS8qIEluaXRpYWwgbnVtYmVyIG9mIGVudHJp ZXMgKDEwME1CKSAqLworI2RlZmluZSBURVNUX01BWF9FTlRSSUVTCQkoMTAwICogMTAyNCAqIDEw MjQpCQkvKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzICg0MDBNQiwgNHggaW5pdGlhbCkgKi8K KyNkZWZpbmUgVEVTVF9FTlRSWV9TSVpFCQkJc2l6ZW9mKGludDMyKQkJLyogU2l6ZSBvZiBlYWNo IGVudHJ5ICovCisKKy8qCisgKiBSZXNpemFibGUgdGVzdCBkYXRhIHN0cnVjdHVyZSBzdG9yZWQg aW4gc2hhcmVkIG1lbW9yeS4KKyAqCisgKiBXZSBkbyBub3QgdXNlIGFueSBsb2Nrcy4gVGhlIHRl c3QgcGVyZm9ybXMgcmVzaXppbmcsIHJlYWRzIGFuZCB3cml0ZXMgbm9uZSBvZgorICogd2hpY2gg YXJlIGNvbmN1cnJlbnQgdG8ga2VlcCB0aGUgY29kZSBhbmQgdGhlIHRlc3Qgc2ltcGxlLgorICov Cit0eXBlZGVmIHN0cnVjdCBUZXN0UmVzaXphYmxlU2htZW1TdHJ1Y3QKK3sKKwkvKiBNZXRhZGF0 YSAqLworCWludDMyCQludW1fZW50cmllczsJCS8qIE51bWJlciBvZiBlbnRyaWVzIHRoYXQgY2Fu IGZpdCAqLworCisJLyogRGF0YSBhcmVhIC0gdmFyaWFibGUgc2l6ZSAqLworCWludDMyCQlkYXRh W0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IFRlc3RSZXNpemFibGVTaG1lbVN0cnVjdDsKKwor c3RhdGljIFNobWVtU3RydWN0RGVzYyB0ZXN0U2htZW1EZXNjOworCisvKiBHbG9iYWwgcG9pbnRl ciB0byBvdXIgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBUZXN0UmVzaXphYmxl U2htZW1TdHJ1Y3QgKnJlc2l6YWJsZV9zaG1lbSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHJlc2l6 YWJsZV9zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCByZXNpemFibGVfc2ht ZW1fc2htZW1faW5pdCh2b2lkICphcmcpOworCitzdGF0aWMgY29uc3QgU2htZW1DYWxsYmFja3Mg cGdzc19zaG1lbV9jYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSByZXNpemFibGVfc2htZW1f cmVxdWVzdCwKKwkuaW5pdF9mbiA9IHJlc2l6YWJsZV9zaG1lbV9zaG1lbV9pbml0LAorfTsKKwor LyogU1FMLWNhbGxhYmxlIGZ1bmN0aW9ucyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShyZXNpemFi bGVfc2htZW1fcmVzaXplKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocmVzaXphYmxlX3NobWVtX3dy aXRlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocmVzaXphYmxlX3NobWVtX3JlYWQpOworUEdfRlVO Q1RJT05fSU5GT19WMShyZXNpemFibGVfc2htZW1fdXNhZ2UpOworUEdfRlVOQ1RJT05fSU5GT19W MShyZXNpemFibGVfc2htZW1fcGFnZXNpemUpOworCisvKgorICogTW9kdWxlIGxvYWQgY2FsbGJh Y2sKKyAqLwordm9pZAorX1BHX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIFRoZSBtb2R1bGUgbmVl ZHMgdG8gYmUgbG9hZGVkIHZpYSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgdG8gcmVnaXN0ZXIK KwkgKiBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZS4gQnV0IGlmIHRoYXQncyBub3QgdGhlIGNhc2Us IGRvbid0IHRocm93IGFuIGVycm9yLgorCSAqIFRoZSBTUUwgZnVuY3Rpb25zIGNoZWNrIGZvciBl eGlzdGVuY2Ugb2YgdGhlIHNoYXJlZCBtZW1vcnkgZGF0YSBzdHJ1Y3R1cmUuCisJICovCisJaWYg KCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9wcm9ncmVzcykKKwkJcmV0dXJu OworCisjaWZkZWYgRVhFQ19CQUNLRU5ECisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCSBlcnJtc2coInJlc2l6YWJsZV9zaG1l bSBpcyBub3Qgc3VwcG9ydGVkIGluIEVYRUNfQkFDS0VORCBidWlsZHMiKSkpOworI2VuZGlmCisK KwlSZWdpc3RlclNobWVtQ2FsbGJhY2tzKCZwZ3NzX3NobWVtX2NhbGxiYWNrcyk7Cit9CisKKy8q CisgKiBSZXF1ZXN0IHNoYXJlZCBtZW1vcnkgcmVzb3VyY2VzCisgKi8KK3N0YXRpYyB2b2lkCity ZXNpemFibGVfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCit7CisJLyogUmVnaXN0ZXIgb3VyIHJl c2l6YWJsZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSAqLworCVNobWVtUmVxdWVzdFN0cnVjdCgm dGVzdFNobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJLm5hbWUgPSAicmVz aXphYmxlX3NobWVtIiwKKwkuc2l6ZSA9IG9mZnNldG9mKFRlc3RSZXNpemFibGVTaG1lbVN0cnVj dCwgZGF0YSkgKyAoVEVTVF9JTklUSUFMX0VOVFJJRVMgKiBURVNUX0VOVFJZX1NJWkUpLAorCS5t YXhpbXVtX3NpemUgPSBvZmZzZXRvZihUZXN0UmVzaXphYmxlU2htZW1TdHJ1Y3QsIGRhdGEpICsg KFRFU1RfTUFYX0VOVFJJRVMgKiBURVNUX0VOVFJZX1NJWkUpLAorCS5wdHIgPSAodm9pZCAqKikg JnJlc2l6YWJsZV9zaG1lbSwKKwl9KTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIG1l bW9yeSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQKK3Jlc2l6YWJsZV9zaG1lbV9zaG1lbV9p bml0KHZvaWQgKmFyZykKK3sKKwkvKgorCSAqIFNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIHNob3Vs ZCBoYXZlIGJlZW4gYWxsb2NhdGVkIHdpdGggdGhlIHJlcXVlc3RlZAorCSAqIHNpemUuIEluaXRp YWxpemUgdGhlIG1ldGFkYXRhLgorCSAqLworCUFzc2VydChyZXNpemFibGVfc2htZW0gIT0gTlVM TCk7CisJQXNzZXJ0KHRlc3RTaG1lbURlc2Muc2l6ZSA+PSBvZmZzZXRvZihUZXN0UmVzaXphYmxl U2htZW1TdHJ1Y3QsIGRhdGEpICsgKFRFU1RfSU5JVElBTF9FTlRSSUVTICogVEVTVF9FTlRSWV9T SVpFKSk7CisJQXNzZXJ0KHRlc3RTaG1lbURlc2MubWF4aW11bV9zaXplID49IG9mZnNldG9mKFRl c3RSZXNpemFibGVTaG1lbVN0cnVjdCwgZGF0YSkgKyAoVEVTVF9NQVhfRU5UUklFUyAqIFRFU1Rf RU5UUllfU0laRSkpOworCisJcmVzaXphYmxlX3NobWVtLT5udW1fZW50cmllcyA9IFRFU1RfSU5J VElBTF9FTlRSSUVTOworCW1lbXNldChyZXNpemFibGVfc2htZW0tPmRhdGEsIDAsIFRFU1RfSU5J VElBTF9FTlRSSUVTICogVEVTVF9FTlRSWV9TSVpFKTsKK30KKworLyoKKyAqIFJlc2l6ZSB0aGUg c2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgdG8gYWNjb21tb2RhdGUgdGhlIHNwZWNpZmllZCBudW1i ZXIgb2YKKyAqIGVudHJpZXMuCisgKi8KK0RhdHVtCityZXNpemFibGVfc2htZW1fcmVzaXplKFBH X0ZVTkNUSU9OX0FSR1MpCit7CisjaWZuZGVmIEVYRUNfQkFDS0VORAorCWludDMyCQluZXdfZW50 cmllcyA9IFBHX0dFVEFSR19JTlQzMigwKTsKKwlTaXplCQluZXdfc2l6ZTsKKworCWlmICghcmVz aXphYmxlX3NobWVtKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JK RUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInJlc2l6YWJsZV9z aG1lbSBpcyBub3QgaW5pdGlhbGl6ZWQiKSkpOworCisJbmV3X3NpemUgPSBvZmZzZXRvZihUZXN0 UmVzaXphYmxlU2htZW1TdHJ1Y3QsIGRhdGEpICsgKG5ld19lbnRyaWVzICogVEVTVF9FTlRSWV9T SVpFKTsKKwlTaG1lbVJlc2l6ZVJlZ2lzdGVyZWQoJnRlc3RTaG1lbURlc2MsIG5ld19zaXplKTsK KwlyZXNpemFibGVfc2htZW0tPm51bV9lbnRyaWVzID0gbmV3X2VudHJpZXM7CisKKwlQR19SRVRV Uk5fVk9JRCgpOworI2Vsc2UKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJIGVycm1zZygicmVzaXppbmcgc2hhcmVkIG1lbW9y eSBpcyBub3Qgc3VwcG9ydGVkIGluIEVYRUNfQkFDS0VORCBidWlsZHMiKSkpOworI2VuZGlmCit9 CisKKy8qCisgKiBXcml0ZSB0aGUgZ2l2ZW4gaW50ZWdlciB2YWx1ZSB0byBhbGwgZW50cmllcyBp biB0aGUgZGF0YSBhcnJheS4KKyAqLworRGF0dW0KK3Jlc2l6YWJsZV9zaG1lbV93cml0ZShQR19G VU5DVElPTl9BUkdTKQoreworCWludDMyCQllbnRyeV92YWx1ZSA9IFBHX0dFVEFSR19JTlQzMigw KTsKKwlpbnQzMgkJaTsKKworCWlmICghcmVzaXphYmxlX3NobWVtKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUp LAorCQkJCSBlcnJtc2coInJlc2l6YWJsZV9zaG1lbSBpcyBub3QgaW5pdGlhbGl6ZWQiKSkpOwor CisJLyogV3JpdGUgdGhlIHZhbHVlIHRvIGFsbCBjdXJyZW50IGVudHJpZXMgKi8KKwlmb3IgKGkg PSAwOyBpIDwgcmVzaXphYmxlX3NobWVtLT5udW1fZW50cmllczsgaSsrKQorCQlyZXNpemFibGVf c2htZW0tPmRhdGFbaV0gPSBlbnRyeV92YWx1ZTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisK Ky8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSBmaXJzdCAnZW50cnlfY291bnQnIGVudHJpZXMgYWxs IGhhdmUgdGhlIGV4cGVjdGVkICdlbnRyeV92YWx1ZScuCisgKiBSZXR1cm5zIHRydWUgaWYgYWxs IG1hdGNoLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK0RhdHVtCityZXNpemFibGVfc2htZW1fcmVh ZChQR19GVU5DVElPTl9BUkdTKQoreworCWludDMyCQllbnRyeV9jb3VudCA9IFBHX0dFVEFSR19J TlQzMigwKTsKKwlpbnQzMgkJZW50cnlfdmFsdWUgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisJaW50 MzIJCWk7CisKKwlpZiAocmVzaXphYmxlX3NobWVtID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSks CisJCQkJIGVycm1zZygicmVzaXphYmxlX3NobWVtIGlzIG5vdCBpbml0aWFsaXplZCIpKSk7CisK KwkvKiBWYWxpZGF0ZSBlbnRyeV9jb3VudCAqLworCWlmIChlbnRyeV9jb3VudCA8IDAgfHwgZW50 cnlfY291bnQgPiByZXNpemFibGVfc2htZW0tPm51bV9lbnRyaWVzKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBl cnJtc2coImVudHJ5X2NvdW50ICVkIGlzIG91dCBvZiByYW5nZSAoMC4uJWQpIiwgZW50cnlfY291 bnQsIHJlc2l6YWJsZV9zaG1lbS0+bnVtX2VudHJpZXMpKSk7CisKKwkvKiBDaGVjayBpZiBmaXJz dCBlbnRyeV9jb3VudCBlbnRyaWVzIGhhdmUgdGhlIGV4cGVjdGVkIHZhbHVlICovCisJZm9yIChp ID0gMDsgaSA8IGVudHJ5X2NvdW50OyBpKyspCisJeworCQlpZiAocmVzaXphYmxlX3NobWVtLT5k YXRhW2ldICE9IGVudHJ5X3ZhbHVlKQorCQkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOworCX0KKwor CVBHX1JFVFVSTl9CT09MKHRydWUpOworfQorCisvKgorICogUmVwb3J0IG11bHRpcGxlIG1lbW9y eSB1c2FnZSBzdGF0aXN0aWNzIG9mIHRoZSBjYWxsaW5nIGJhY2tlbmQgcHJvY2VzcworICogYXMg cmVwb3J0ZWQgYnkgdGhlIGtlcm5lbC4KKyAqIFJldHVybnMgUnNzQW5vbiwgUnNzRmlsZSwgUnNz U2htZW0sIFZtU2l6ZSBmcm9tIC9wcm9jL3NlbGYvc3RhdHVzIGFzIGEgcmVjb3JkLgorICoKKyAq IFRPRE86IFNlZSBUT0RPIG5vdGUgaW4gU1FMIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbi4K KyAqLworRGF0dW0KK3Jlc2l6YWJsZV9zaG1lbV91c2FnZShQR19GVU5DVElPTl9BUkdTKQorewor CUZJTEUJICAgKmY7CisJY2hhcgkJbGluZVsyNTZdOworCWludDY0CQlyc3NfYW5vbl9rYiA9IC0x OworCWludDY0CQlyc3NfZmlsZV9rYiA9IC0xOworCWludDY0CQlyc3Nfc2htZW1fa2IgPSAtMTsK KwlpbnQ2NAkJdm1fc2l6ZV9rYiA9IC0xOworCWludAkJCWZvdW5kID0gMDsKKwlUdXBsZURlc2MJ dHVwZGVzYzsKKwlEYXR1bQkJdmFsdWVzWzRdOworCWJvb2wJCW51bGxzWzRdOworCUhlYXBUdXBs ZQl0dXBsZTsKKworCS8qIE9wZW4gL3Byb2Mvc2VsZi9zdGF0dXMgdG8gcmVhZCBtZW1vcnkgaW5m b3JtYXRpb24gKi8KKwlmID0gZm9wZW4oIi9wcm9jL3NlbGYvc3RhdHVzIiwgInIiKTsKKwlpZiAo ZiA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vz cygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIC9wcm9jL3NlbGYvc3RhdHVzOiAlbSIp KSk7CisKKwkvKiBMb29rIGZvciB0aGUgbWVtb3J5IHVzYWdlIGxpbmVzICovCisJd2hpbGUgKGZn ZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikgIT0gTlVMTCAmJiBmb3VuZCA8IDQpCisJeworCQlp ZiAocnNzX2Fub25fa2IgPT0gLTEgJiYgc3NjYW5mKGxpbmUsICJSc3NBbm9uOiAlbGQga0IiLCAm cnNzX2Fub25fa2IpID09IDEpCisJCQlmb3VuZCsrOworCQllbHNlIGlmIChyc3NfZmlsZV9rYiA9 PSAtMSAmJiBzc2NhbmYobGluZSwgIlJzc0ZpbGU6ICVsZCBrQiIsICZyc3NfZmlsZV9rYikgPT0g MSkKKwkJCWZvdW5kKys7CisJCWVsc2UgaWYgKHJzc19zaG1lbV9rYiA9PSAtMSAmJiBzc2NhbmYo bGluZSwgIlJzc1NobWVtOiAlbGQga0IiLCAmcnNzX3NobWVtX2tiKSA9PSAxKQorCQkJZm91bmQr KzsKKwkJZWxzZSBpZiAodm1fc2l6ZV9rYiA9PSAtMSAmJiBzc2NhbmYobGluZSwgIlZtU2l6ZTog JWxkIGtCIiwgJnZtX3NpemVfa2IpID09IDEpCisJCQlmb3VuZCsrOworCX0KKworCWZjbG9zZShm KTsKKworCS8qIEJ1aWxkIHR1cGxlIGRlc2NyaXB0b3IgZm9yIG91ciByZXN1bHQgdHlwZSAqLwor CWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShmY2luZm8sIE5VTEwsICZ0dXBkZXNjKSAhPSBUWVBF RlVOQ19DT01QT1NJVEUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coImZ1bmN0aW9uIHJldHVybmluZyBy ZWNvcmQgY2FsbGVkIGluIGNvbnRleHQgIgorCQkJCQkJInRoYXQgY2Fubm90IGFjY2VwdCBhIHJl Y29yZCIpKSk7CisKKwkvKiBCdWlsZCB0aGUgcmVzdWx0IHR1cGxlICovCisJdmFsdWVzWzBdID0g SW50NjRHZXREYXR1bShyc3NfYW5vbl9rYiA+PSAwID8gcnNzX2Fub25fa2IgKiAxMDI0IDogMCk7 CisJdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bShyc3NfZmlsZV9rYiA+PSAwID8gcnNzX2ZpbGVf a2IgKiAxMDI0IDogMCk7CisJdmFsdWVzWzJdID0gSW50NjRHZXREYXR1bShyc3Nfc2htZW1fa2Ig Pj0gMCA/IHJzc19zaG1lbV9rYiAqIDEwMjQgOiAwKTsKKwl2YWx1ZXNbM10gPSBJbnQ2NEdldERh dHVtKHZtX3NpemVfa2IgPj0gMCA/IHZtX3NpemVfa2IgKiAxMDI0IDogMCk7CisKKwludWxsc1sw XSA9IG51bGxzWzFdID0gbnVsbHNbMl0gPSBudWxsc1szXSA9IGZhbHNlOworCisJdHVwbGUgPSBo ZWFwX2Zvcm1fdHVwbGUodHVwZGVzYywgdmFsdWVzLCBudWxscyk7CisJUEdfUkVUVVJOX0RBVFVN KEhlYXBUdXBsZUdldERhdHVtKHR1cGxlKSk7Cit9CisKKy8qCisgKiByZXNpemFibGVfc2htZW1f cGFnZXNpemUoKSAtIEdldCB0aGUgc2hhcmVkIG1lbW9yeSBwYWdlIHNpemUKKyAqLworRGF0dW0K K3Jlc2l6YWJsZV9zaG1lbV9wYWdlc2l6ZShQR19GVU5DVElPTl9BUkdTKQoreworCVBHX1JFVFVS Tl9JTlQzMihwZ19nZXRfc2htZW1fcGFnZXNpemUoKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0uY29udHJvbCBiL3NyYy90 ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS5jb250cm9sCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xY2UyYzVlYTIxYQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1l bS5jb250cm9sCkBAIC0wLDAgKzEsNSBAQAorIyByZXNpemFibGVfc2htZW0gZXh0ZW5zaW9uIHRl c3QgbW9kdWxlCitjb21tZW50ID0gJ3Rlc3QgbW9kdWxlIGZvciB0ZXN0aW5nIHJlc2l6YWJsZSBz aGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBmdW5jdGlvbmFsaXR5JworZGVmYXVsdF92ZXJzaW9uID0g JzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3Jlc2l6YWJsZV9zaG1lbScKK3JlbG9j YXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2ht ZW0vdC8wMDFfcmVzaXphYmxlX3NobWVtLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVf c2htZW0vdC8wMDFfcmVzaXphYmxlX3NobWVtLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi40MWEwNmM5NWJjZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvcmVzaXphYmxlX3NobWVtL3QvMDAxX3Jlc2l6YWJsZV9zaG1lbS5wbApAQCAtMCwwICsx LDExOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBG QVRBTCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgVGVzdCByZXNpemFibGUg c2hhcmVkIG1lbW9yeSBmdW5jdGlvbmFsaXR5CisjIFRoaXMgY29udmVydHMgdGhlIGlzb2xhdGlv biB0ZXN0IHJlc2l6YWJsZV9zaG1lbS5zcGVjIGludG8gYSBUQVAgdGVzdAorCitteSAkbm9kZSA9 IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncmVzaXphYmxlX3NobWVtJyk7CisKKyMg TmVlZCB0byBjb25maWd1cmUgZm9yIHJlc2l6YWJsZV9zaG1lbQorJG5vZGUtPmluaXQ7Ciskbm9k ZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzaGFyZWRfcHJlbG9hZF9saWJyYXJp ZXMgPSByZXNpemFibGVfc2htZW0nKTsKKyRub2RlLT5zdGFydDsKKworIyBDcmVhdGUgZXh0ZW5z aW9uCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIHJlc2l6 YWJsZV9zaG1lbTsnKTsKKworIyBRdWVyeSBzdHJpbmcgdmFyaWFibGVzIGZvciByZXVzZQorbXkg JHJzc191c2FnZV9xdWVyeSA9ICdTRUxFQ1QgcnNzX3NobWVtIEZST00gcmVzaXphYmxlX3NobWVt X3VzYWdlKCk7JzsKK215ICRhbGxvY19zaXplX3F1ZXJ5ID0gIlNFTEVDVCBhbGxvY2F0ZWRfc2l6 ZSBGUk9NIHBnX3NobWVtX2FsbG9jYXRpb25zIFdIRVJFIG5hbWUgPSAncmVzaXphYmxlX3NobWVt JzsiOworIyBDdXJyZW50bHkgb25seSBvbmUgc3RydWN0dXJlIGlzIHJlc2l6YWJsZQorbXkgJGZp eGVkX3N0cnVjdF9xdWVyeSA9ICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19zaG1lbV9hbGxvY2F0 aW9ucyBXSEVSRSBuYW1lIDw+ICdyZXNpemFibGVfc2htZW0nIGFuZCBzaXplIDw+IG1heGltdW1f c2l6ZTsiOworCitteSAkcGFnZV9zaXplID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIHJlc2l6YWJsZV9zaG1lbV9wYWdlc2l6ZSgpOyIpOworCisjIENyZWF0ZSBiYWNrZ3Jv dW5kIHNlc3Npb25zIGZvciB0ZXN0aW5nCitteSAkc2Vzc2lvbjEgPSAkbm9kZS0+YmFja2dyb3Vu ZF9wc3FsKCdwb3N0Z3JlcycpOworbXkgJHNlc3Npb24yID0gJG5vZGUtPmJhY2tncm91bmRfcHNx bCgncG9zdGdyZXMnKTsKKworbXkgJG51bV9lbnRyaWVzID0gMjUgKiAxMDI0ICogMTAyNDsgIyBJ bml0aWFsIG51bWJlciBvZiBlbnRyaWVzIGluIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5CitteSAk bWF4X2VudHJpZXMgPSAxMDAgKiAxMDI0ICogMTAyNDsgIyBNYXhpbXVtIG51bWJlciBvZiBlbnRy aWVzIGFsbG93ZWQKK215ICRlbnRyeV9zaXplID0gNDsgIyBlYWNoIGVudHJ5IGlzIGludDMyCitt eSAkcHJldl9zaG1lbV91c2FnZTEgPSAkc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoJHJzc191c2FnZV9x dWVyeSwgdmVyYm9zZSA9PiAwKTsKK215ICRwcmV2X3NobWVtX3VzYWdlMiA9ICRzZXNzaW9uMi0+ cXVlcnlfc2FmZSgkcnNzX3VzYWdlX3F1ZXJ5LCB2ZXJib3NlID0+IDApOworbXkgJHByZXZfYWxs b2Nfc2l6ZTsKKworIyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjaGFuZ2VzIHRvIHNo YXJlZCBtZW1vcnkgYWxsb2NhdGVkIGFyZQorIyBwcm9wb3J0aW9uYXRlIHRvIHRoZSBjaGFuZ2Vz IGluIHRoZSByZXNpemFibGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUuIEJ1dAorIyB0aGVyZSBp cyBubyB3YXkgdG8ga25vdyB0aGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0ZWQgYXQgdGhlIGdpdmVu IGFkZHJlc3MgaW4gYQorIyBnaXZlbiBwcm9jZXNzLiBXZSBjYW4gb25seSBrbm93IHRoZSBzaXpl IG9mIHNoYXJlZCBtZW1vcnkgYWNjZXNzZWQgYnkgdGhlIGEKKyMgZ2l2ZW4gcHJvY2Vzcy4gSW4g Y2FzZSBvZiBQb3N0Z3JlU1FMLCB0aGF0IGluY2x1ZGVzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRv CisjIG90aGVyIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcyBhcyB3ZWxsLiBJbnN0ZWFkLCB3ZSBq dXN0IG5vdGUgdGhlIGNoYW5nZXMgaW4KKyMgdGhlIGZ1bmN0aW9uIGJlbG93IHRvIGhlbHAgaW4g ZGVidWdnaW5nIG92ZXJhbGxvY2F0aW9uIGlzc3Vlcy4KK3N1YiBub3RlX3NobWVtX2NoYW5nZXMK K3sKKyAgICBteSAoJHByZXZfc2htZW1fdXNhZ2UxLCAkcHJldl9zaG1lbV91c2FnZTIsICRwcmV2 X2FsbG9jX3NpemUpID0gQF87CisKKyAgICBteSAkc2htZW1fdXNhZ2UxID0gJHNlc3Npb24xLT5x dWVyeV9zYWZlKCRyc3NfdXNhZ2VfcXVlcnksIHZlcmJvc2UgPT4gMCk7CisgICAgbXkgJHNobWVt X3VzYWdlMiA9ICRzZXNzaW9uMi0+cXVlcnlfc2FmZSgkcnNzX3VzYWdlX3F1ZXJ5LCB2ZXJib3Nl ID0+IDApOworICAgIG15ICRhbGxvY19zaXplID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAkYWxsb2Nfc2l6ZV9xdWVyeSwgdmVyYm9zZSA9PiAwKTsKKworICAgIG5vdGUgImNoYW5nZXMg aW4gYWxsb2NhdGVkIHNpemU6ICIgLiAoJGFsbG9jX3NpemUgLSAkcHJldl9hbGxvY19zaXplKTsK KyAgICBub3RlICJTZXNzaW9uIDE6IGNoYW5nZXMgaW4gcnNzX3NobWVtIHVzYWdlOiAiIC4gKCRz aG1lbV91c2FnZTEgLSAkcHJldl9zaG1lbV91c2FnZTEpOworICAgIG5vdGUgIlNlc3Npb24gMTog ZGlmZmVyZW5jZSBpbiByc3Nfc2htZW0gY2hhbmdlIGFuZCBhbGxvY2F0ZWQgc2l6ZSBjaGFuZ2U6 ICIgLiAoKCRzaG1lbV91c2FnZTEgLSAkcHJldl9zaG1lbV91c2FnZTEpIC0gKCRhbGxvY19zaXpl IC0gJHByZXZfYWxsb2Nfc2l6ZSkpOworICAgIG5vdGUgIlNlc3Npb24gMjogY2hhbmdlcyBpbiBy c3Nfc2htZW0gdXNhZ2U6ICIgLiAoJHNobWVtX3VzYWdlMiAtICRwcmV2X3NobWVtX3VzYWdlMik7 CisgICAgbm90ZSAiU2Vzc2lvbiAyOiBkaWZmZXJlbmNlIGluIHJzc19zaG1lbSBjaGFuZ2UgYW5k IGFsbG9jYXRlZCBzaXplIGNoYW5nZTogIiAuICgoJHNobWVtX3VzYWdlMiAtICRwcmV2X3NobWVt X3VzYWdlMikgLSAoJGFsbG9jX3NpemUgLSAkcHJldl9hbGxvY19zaXplKSk7CisKKyAgICByZXR1 cm4gKCRzaG1lbV91c2FnZTEsICRzaG1lbV91c2FnZTIsICRhbGxvY19zaXplKTsKK30KKworbXkg JHZhbHVlID0gMTAwOworIyBXcml0ZSBhbmQgcmVhZCB0aGUgaW5pdGlhbCBzZXQgb2YgZW50cmll cy4KKyRzZXNzaW9uMS0+cXVlcnlfc2FmZSgiU0VMRUNUIHJlc2l6YWJsZV9zaG1lbV93cml0ZSgk dmFsdWUpOyIsIHZlcmJvc2UgPT4gMCk7Citpcygkc2Vzc2lvbjItPnF1ZXJ5X3NhZmUoIlNFTEVD VCByZXNpemFibGVfc2htZW1fcmVhZCgkbnVtX2VudHJpZXMsICR2YWx1ZSk7IiwgdmVyYm9zZSA9 PiAwKSwgJ3QnLCAnZGF0YSByZWFkIGFmdGVyIHdyaXRlIHN1Y2Nlc3NmdWwnKTsKKygkcHJldl9z aG1lbV91c2FnZTEsICRwcmV2X3NobWVtX3VzYWdlMiwgJHByZXZfYWxsb2Nfc2l6ZSkgPSBub3Rl X3NobWVtX2NoYW5nZXMoJHByZXZfc2htZW1fdXNhZ2UxLCAkcHJldl9zaG1lbV91c2FnZTIsIDAp OworaXMoJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZml4ZWRfc3RydWN0X3F1ZXJ5KSwg JzAnLCAnaW5pdGlhbCBmaXhlZCBzaXplZCBzdHJ1Y3R1cmVzJyk7CisKKyMgUmVzaXplIHRvIG1h eGltdW0KK215ICRvbGRfbnVtX2VudHJpZXMgPSAkbnVtX2VudHJpZXM7CiskbnVtX2VudHJpZXMg PSAkbWF4X2VudHJpZXM7Ciskc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNpemFibGVf c2htZW1fcmVzaXplKCRudW1fZW50cmllcyk7IiwgdmVyYm9zZSA9PiAwKTsKKyMgT2xkIGRhdGEg YWZ0ZXIgcmVzaXplIHNob3VsZCBzdGlsbCBiZSBpbnRhY3QKK2lzKCRzZXNzaW9uMS0+cXVlcnlf c2FmZSgiU0VMRUNUIHJlc2l6YWJsZV9zaG1lbV9yZWFkKCRvbGRfbnVtX2VudHJpZXMsICR2YWx1 ZSk7IiwgdmVyYm9zZSA9PiAwKSwgJ3QnLCAnaW5pdGlhbCBkYXRhIHJlYWRhYmxlIGFmdGVyIHJl c2l6ZScpOworJHZhbHVlID0gNTAwOworJHNlc3Npb24yLT5xdWVyeV9zYWZlKCJTRUxFQ1QgcmVz aXphYmxlX3NobWVtX3dyaXRlKCR2YWx1ZSk7IiwgdmVyYm9zZSA9PiAwKTsKK2lzKCRzZXNzaW9u MS0+cXVlcnlfc2FmZSgiU0VMRUNUIHJlc2l6YWJsZV9zaG1lbV9yZWFkKCRudW1fZW50cmllcywg JHZhbHVlKTsiLCB2ZXJib3NlID0+IDApLCAndCcsICdlbmxhcmdlZCBhcmVhIGRhdGEgcmVhZCBz dWNjZXNzZnVsJyk7CisoJHByZXZfc2htZW1fdXNhZ2UxLCAkcHJldl9zaG1lbV91c2FnZTIsICRw cmV2X2FsbG9jX3NpemUpID0gbm90ZV9zaG1lbV9jaGFuZ2VzKCRwcmV2X3NobWVtX3VzYWdlMSwg JHByZXZfc2htZW1fdXNhZ2UyLCAkcHJldl9hbGxvY19zaXplKTsKK2lzKCRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJGZpeGVkX3N0cnVjdF9xdWVyeSksICcwJywgJ2ZpeGVkIHNpemVkIHN0 cnVjdHVyZXMgYWZ0ZXIgcmVzaXplIHRvIG1heGltdW0nKTsKKworIyBTaHJpbmsgc21hbGxlciBz aXplCiskb2xkX251bV9lbnRyaWVzID0gJG51bV9lbnRyaWVzOworJG51bV9lbnRyaWVzID0gNzUg KiAxMDI0ICogMTAyNDsKKyRzZXNzaW9uMi0+cXVlcnlfc2FmZSgiU0VMRUNUIHJlc2l6YWJsZV9z aG1lbV9yZXNpemUoJG51bV9lbnRyaWVzKTsiLCB2ZXJib3NlID0+IDApOworIyBPbGQgdmFsdWVz IHNob3VsZCByZW1haW4gaW50YWN0IGluIHRoZSBzaHJ1bmsgYXJlYQoraXMoJHNlc3Npb24xLT5x dWVyeV9zYWZlKCJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3JlYWQoJG51bV9lbnRyaWVzLCAkdmFs dWUpOyIsIHZlcmJvc2UgPT4gMCksICd0JywgJ2RhdGEgcmVhZGFibGUgYWZ0ZXIgc2hyaW5raW5n Jyk7CiskdmFsdWUgPSA5OTk7Ciskc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNpemFi bGVfc2htZW1fd3JpdGUoJHZhbHVlKTsiLCB2ZXJib3NlID0+IDApOworaXMoJHNlc3Npb24yLT5x dWVyeV9zYWZlKCJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3JlYWQoJG51bV9lbnRyaWVzLCAkdmFs dWUpOyIsIHZlcmJvc2UgPT4gMCksICd0JywgJ25ldyBkYXRhIHJlYWRhYmxlIGluIHNocnVua2Vu IGFyZWEnKTsKKygkcHJldl9zaG1lbV91c2FnZTEsICRwcmV2X3NobWVtX3VzYWdlMiwgJHByZXZf YWxsb2Nfc2l6ZSkgPSBub3RlX3NobWVtX2NoYW5nZXMoJHByZXZfc2htZW1fdXNhZ2UxLCAkcHJl dl9zaG1lbV91c2FnZTIsICRwcmV2X2FsbG9jX3NpemUpOworaXMoJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAkZml4ZWRfc3RydWN0X3F1ZXJ5KSwgJzAnLCAnZml4ZWQgc2l6ZWQgc3RydWN0 dXJlcyBhZnRlciBzaHJpbmtpbmcnKTsKKworIyBSZXNpemUgdG8gdGhlIHNhbWUgc2l6ZQorJHNl c3Npb24yLT5xdWVyeV9zYWZlKCJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3Jlc2l6ZSgkbnVtX2Vu dHJpZXMpOyIsIHZlcmJvc2UgPT4gMCk7CisjIE9sZCB2YWx1ZXMgc2hvdWxkIHJlbWFpbiBpbnRh Y3QgaW4gdGhlIHNocnVuayBhcmVhCitpcygkc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIlNFTEVDVCBy ZXNpemFibGVfc2htZW1fcmVhZCgkbnVtX2VudHJpZXMsICR2YWx1ZSk7IiwgdmVyYm9zZSA9PiAw KSwgJ3QnLCAnZGF0YSByZWFkYWJsZSBhZnRlciBzaHJpbmtpbmcnKTsKKyR2YWx1ZSA9IDE5OTk7 Ciskc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNpemFibGVfc2htZW1fd3JpdGUoJHZh bHVlKTsiLCB2ZXJib3NlID0+IDApOworaXMoJHNlc3Npb24yLT5xdWVyeV9zYWZlKCJTRUxFQ1Qg cmVzaXphYmxlX3NobWVtX3JlYWQoJG51bV9lbnRyaWVzLCAkdmFsdWUpOyIsIHZlcmJvc2UgPT4g MCksICd0JywgJ25ldyBkYXRhIHJlYWRhYmxlIGluIHNocnVua2VuIGFyZWEnKTsKKygkcHJldl9z aG1lbV91c2FnZTEsICRwcmV2X3NobWVtX3VzYWdlMiwgJHByZXZfYWxsb2Nfc2l6ZSkgPSBub3Rl X3NobWVtX2NoYW5nZXMoJHByZXZfc2htZW1fdXNhZ2UxLCAkcHJldl9zaG1lbV91c2FnZTIsICRw cmV2X2FsbG9jX3NpemUpOworaXMoJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZml4ZWRf c3RydWN0X3F1ZXJ5KSwgJzAnLCAnZml4ZWQgc2l6ZWQgc3RydWN0dXJlcyBhdCB0aGUgZW5kJyk7 CisKKyMgVGVzdCByZXNpemUgZmFpbHVyZSAoYXR0ZW1wdCB0byByZXNpemUgYmV5b25kIG1heCAt IHNob3VsZCBmYWlsKQorbXkgKCRyZXQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCByZXNpemFibGVfc2htZW1fcmVzaXplKCIgLiAoJG1heF9lbnRy aWVzICogMikgLiAiKTsiKTsKK29rKCRyZXQgIT0gMCB8fCAkc3RkZXJyID1+IC9FUlJPUi8sICdS ZXNpemUgYmV5b25kIG1heGltdW0gZmFpbHMnKTsKKworIyBDbGVhbnVwIHNlc3Npb25zCiskc2Vz c2lvbjEtPnF1aXQ7Ciskc2Vzc2lvbjItPnF1aXQ7CisKKyMgQ2xlYW51cAorJG5vZGUtPnN0b3A7 CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ydWxlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCAy YjNjZjZkODU2OS4uZDA4ZTFmZmU1OWQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnVsZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0 CkBAIC0xNzcwLDggKzE3NzAsOSBAQCBwZ19zaGFkb3d8IFNFTEVDVCBwZ19hdXRoaWQucm9sbmFt ZSBBUyB1c2VuYW1lLAogcGdfc2htZW1fYWxsb2NhdGlvbnN8IFNFTEVDVCBuYW1lLAogICAgIG9m ZiwKICAgICBzaXplLAotICAgIGFsbG9jYXRlZF9zaXplCi0gICBGUk9NIHBnX2dldF9zaG1lbV9h bGxvY2F0aW9ucygpIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucyhuYW1lLCBvZmYsIHNpemUsIGFs bG9jYXRlZF9zaXplKTsKKyAgICBhbGxvY2F0ZWRfc2l6ZSwKKyAgICByZXNlcnZlZF9zaXplCisg ICBGUk9NIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucygpIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9u cyhuYW1lLCBvZmYsIHNpemUsIGFsbG9jYXRlZF9zaXplLCBtYXhpbXVtX3NpemUpOwogcGdfc2ht ZW1fYWxsb2NhdGlvbnNfbnVtYXwgU0VMRUNUIG5hbWUsCiAgICAgbnVtYV9ub2RlLAogICAgIHNp emUK --0000000000008baf90064e3ce23b--