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.94.2) (envelope-from ) id 1ts0KK-00D8xi-2G for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Mar 2025 14:11:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ts0KI-00GuT8-6t for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Mar 2025 14:11:22 +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.94.2) (envelope-from ) id 1ts0KH-00GuSr-NB for pgsql-hackers@lists.postgresql.org; Tue, 11 Mar 2025 14:11:21 +0000 Received: from mail-qt1-x82b.google.com ([2607:f8b0:4864:20::82b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ts0KD-002FNu-2M for pgsql-hackers@lists.postgresql.org; Tue, 11 Mar 2025 14:11:21 +0000 Received: by mail-qt1-x82b.google.com with SMTP id d75a77b69052e-47664364628so32096091cf.1 for ; Tue, 11 Mar 2025 07:11:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741702277; x=1742307077; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=eRDtfkemK7SXBskLUNJkq3HMRoxv3IdySsnmmWkAwsA=; b=i6a/YHPbI0zB9qcTHgH71a7GrewWs/KsJf8ZI1OJ8n7I4cDUHASBMe3Cu7iXjL+x+l 8qlfPbz+8s3/6/VnhNLYq6onM9nVKpsWYpgHD+aPpTfTm3iSjnAQmTJR3MrDbGl96oso zX2kPbTREkIJioeWDVsRq0IDzN2sD4AUIOtsaOFCvpH/NRmGxaQk8ymCFWAJkZ+HOjrJ w+fjiSNOMJQ65l2Tfao1Dj87gQaB6U+DjT81SxRuWaf3zsedPUBA+2I7tvAneprn1jDa PpNPsZFq+sGS5Knf/jlAlt2ftWXnQM5kQMPYa4MH3bC3Uz2WyXS0zflFdfN7dVg367Z6 YuDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741702277; x=1742307077; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=eRDtfkemK7SXBskLUNJkq3HMRoxv3IdySsnmmWkAwsA=; b=B0MALlllrHWtZE1+cIKaESVj+BvKEWegqHQ2/S6Ycjy/GB1Vf2c5WhePADFForwJEu HOzyF8AzxjoKkKBBCP5E6K6ne5IRu2Scy3DMReRCZxCBxyqiLsPJFYyOKzgtiiZ/1u4l dlIGBcuPa7CtL78upNAfQHEgmLgqyqHm8fOnXOjxg+zRo6z6VSTiGv8l2imBVVyobXgF 0jv8vLbPtXz/r5mzdIkcqCVBahK8pxGVOkK8MISw/SWFy8PEngESsFIRjb9gZh1NHcfI Ds4eGPjFpNRQyINK/epy0H0YBQi1jwsnjaUDhzLmw6FPXgU+2is79NhpJZoK+HeRd12b /IEg== X-Forwarded-Encrypted: i=1; AJvYcCV2N5MvfUkdzXj5qWYg9FGHMa5Z8usiBhpRP4g2S+4CDzR4DA9Ftaazxm9ICObT9qDiGGYwbLFNzMzRrdx1@lists.postgresql.org X-Gm-Message-State: AOJu0YwJp/mroDGLL/IgQh2bVW+g8c0f6v1mvYLoYUvE8WPcDeMTQcxe bocBmBmGy6CQYRXToejOkjHA9drkMnPy0utj68pdJRbDwvvNHl6YoaCBsmjxr1zYU/JBGtYHhB7 mClkaUoQ9HR8PoMZRfGecXQtmYHc= X-Gm-Gg: ASbGncvSat0Ty/MZ5GPFgxdXngg2UFLFCNmwYGPFBcNWAwSSEGOrZwIYIiqLcpaoqwp NsV4wygq1W5PP0X2YUKH/LRzk2bGeyie1ONQCDti5ndxSvXVchsVXp4HWpc8ulxZJ15LtS7RC+I QkcFvDB30tYAwBM8JbC3MvzfZ/gdhOR8qroKwHcuCPUAMuQ2ijItBbMdbIJAMp X-Google-Smtp-Source: AGHT+IEYzBp5y1nnl5NkstvrlHV0bwERq5EjL4OJQBQeB++xoAY9guPkxxMwc8Qi4iwJAqsI4L+U3nmw0fjgkTX8Uks= X-Received: by 2002:ac8:5783:0:b0:471:9e02:365e with SMTP id d75a77b69052e-47699ec984bmr58434891cf.8.1741702276955; Tue, 11 Mar 2025 07:11:16 -0700 (PDT) MIME-Version: 1.0 References: <202503051512.tr7vcirldfns@alvherre.pgsql> In-Reply-To: <202503051512.tr7vcirldfns@alvherre.pgsql> From: Mahendra Singh Thalor Date: Tue, 11 Mar 2025 19:41:04 +0530 X-Gm-Features: AQ5f1JrDSO98LhnuqI6RsyYGKJr8ma7AjV_LoGAPZsBV6VDZVp1bZV3AGxtePfc Message-ID: Subject: Re: Non-text mode for pg_dumpall To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: jian he , Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000085f057063011a9f4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000085f057063011a9f4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Alvaro and Jian for the review and feedback. On Wed, 5 Mar 2025 at 20:42, =C3=81lvaro Herrera = wrote: > > Disclaimer: I didn't review these patches fully. > > On 2025-Mar-05, Mahendra Singh Thalor wrote: > > > On Wed, 5 Mar 2025 at 01:02, =C3=81lvaro Herrera wrote: > > > > > A database name containing a newline breaks things for this patch: > > > > > > CREATE DATABASE "foo > > > bar"; > > > I also reported this issue on 29-01-2025. This breaks even without this > > patch also. > > Okay, we should probably fix that, but I think the new map.dat file your > patch adds is going to make the problem worse, because it doesn't look > like you handled that case in any particular way that would make it not > fail. I think it would be good to avoid digging us up even deeper in > that hole. More generally, the pg_upgrade tests contain some code to > try database names with almost all possible ascii characters (see > generate_db in pg_upgrade/t/002_pg_upgrade.pl); it would be good to > ensure that this new functionality also works correctly for that -- > perhaps add an equivalent test to the pg_dumpall test suite. As Jian also pointed out, we should not allow \n\r in dbnames. I am keeping dbanames as single line names only. I am doing testing using the pg_upgrade/t/002_pg_upgrade.pl file to check different-2 dbnames. > > Looking at 0001: > > I'm not sure that the whole common_dumpall_restore.c thing is properly > structured. First, the file name shouldn't presume which programs > exactly are going to use the funcionality there. Second, it looks like > there's another PQconnectdbParams() in pg_backup_db.c and I don't > understand what the reason is for that one to be separate. In my mind, > there should be a file maybe called connection.c or connectdb.c or > whatever that's in charge of establishing connection for all the > src/bin/pg_dump programs, for cleanliness sake. (This is probably also > the place where to put an on_exit callback that cleans up any leftover > connections.) I did some more refactoring and made a connectdb.c file. > Looking at 0002 I see it mentions looking at the EXIT_NICELY macro for > documentation. No such macro exists. But also I think the addition > (and use) of reset_exit_nicely_list() is not a good idea. It seems to > assume that the only entries in that list are ones that can be cleared > and reinstated whenever. This makes too much of an assumption about how > the program works. It may work today, but it'll get in the way of any > other patch that wants to set up some different on-exit clean up. In > other words, we shouldn't reset the on_exit list at all. Also, this is > just a weird addition: Based on some discussions, I added handling for cleanup. for 1st database, I am saving index of array and then I am using same index for rest of the databases as we are closing archive file in CloseArchive so we can use same index for next database. > > #define exit_nicely(code) exit(code) Fixed. > > You added "A" as an option to the getopt_long() call in pg_restore, but > no handling for it is added. Fixed. > > I think the --globals-only option to pg_restore should be a separate > commit. I will make this in the next version. Here, I am attaching updated patches for review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000085f057063011a9f4 Content-Type: application/octet-stream; name="v22_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Disposition: attachment; filename="v22_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m84kjxcz0 RnJvbSA2M2VmYjAwY2E0MGQ4N2U4NTNkYTYyNjZkNTM2NTYzYjBjYWVmN2Y2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAxMSBNYXIgMjAyNSAxODo0MDowMCArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBtb3ZlIGNvbW1vbiBjb2RlIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0byBuZXcgdGhl IGZpbGUKCkNvbm5lY3REYXRhYmFzZSBpcyB1c2VkIGJ5IGJvdGggcGdfZHVtcGFsbCwgcGdfcmVz dG9yZQphbmQgcGdfZHVtcCBzbyBtb3ZlIGNvbW1vbiBjb2RlIHRvIG5ldyBmaWxlLgoKbmV3IGZp bGUgbmFtZTogY29ubmVjdGRiLmMKLS0tCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAg ICAgICAgfCAgIDkgKy0KIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAg MiArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyB8ICAgNiArLQogc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9kYi5jICAgICAgIHwgIDc1ICstLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyAg ICAgICAgIHwgMjc5ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNyBmaWxlcyBjaGFuZ2Vk LCAzMiBpbnNlcnRpb25zKCspLCAzNDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCmluZGV4IDIzM2Fk MTVjYTc1Li5jNDg4YWI0YWVjZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxl CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtNDAsNyArNDAsOCBAQCBPQkpTID0g XAogCXBnX2JhY2t1cF9kaXJlY3RvcnkubyBcCiAJcGdfYmFja3VwX251bGwubyBcCiAJcGdfYmFj a3VwX3Rhci5vIFwKLQlwZ19iYWNrdXBfdXRpbHMubworCXBnX2JhY2t1cF91dGlscy5vIFwKKwlj b25uZWN0ZGIubwogCiBhbGw6IHBnX2R1bXAgcGdfcmVzdG9yZSBwZ19kdW1wYWxsCiAKQEAgLTUw LDggKzUxLDggQEAgcGdfZHVtcDogcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBfc29ydC5vICQo T0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGcKIHBnX3Jlc3RvcmU6IHBnX3Jlc3Rv cmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxp YnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0b3JlLm8gJChPQkpTKSAkKExERkxB R1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAotcGdfZHVtcGFsbDogcGdfZHVt cGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBz dWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZMQUdTKSBw Z19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgJChMREZMQUdTKSAk KExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCitwZ19kdW1wYWxsOiBwZ19kdW1wYWxsLm8g ZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29ubmVjdGRiLm8gcGdfYmFja3VwX3V0aWxzLm8gJChXSU4z MlJFUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0 aWxzCisJJChDQykgJChDRkxBR1MpIHBnX2R1bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyBj b25uZWN0ZGIubyBwZ19iYWNrdXBfdXRpbHMubyAkKFdJTjMyUkVTKSAkKExERkxBR1MpICQoTERG TEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAogaW5zdGFsbDogYWxsIGluc3RhbGxkaXJzCiAJ JChJTlNUQUxMX1BST0dSQU0pIHBnX2R1bXAkKFgpICckKERFU1RESVIpJChiaW5kaXIpJy9wZ19k dW1wJChYKQpAQCAtNzEsNSArNzIsNSBAQCB1bmluc3RhbGw6CiAJcm0gLWYgJChhZGRwcmVmaXgg JyQoREVTVERJUikkKGJpbmRpciknLywgcGdfZHVtcCQoWCkgcGdfcmVzdG9yZSQoWCkgcGdfZHVt cGFsbCQoWCkpCiAKIGNsZWFuIGRpc3RjbGVhbjoKLQlybSAtZiBwZ19kdW1wJChYKSBwZ19yZXN0 b3JlJChYKSBwZ19kdW1wYWxsJChYKSAkKE9CSlMpIHBnX2R1bXAubyBjb21tb24ubyBwZ19kdW1w X3NvcnQubyBwZ19yZXN0b3JlLm8gcGdfZHVtcGFsbC5vCisJcm0gLWYgcGdfZHVtcCQoWCkgcGdf cmVzdG9yZSQoWCkgcGdfZHVtcGFsbCQoWCkgJChPQkpTKSBwZ19kdW1wLm8gY29tbW9uLm8gcGdf ZHVtcF9zb3J0Lm8gcGdfcmVzdG9yZS5vIHBnX2R1bXBhbGwubyBjb25uZWN0ZGIubwogCXJtIC1y ZiB0bXBfY2hlY2sKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3Ny Yy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCA2MDNiYTZjZmJmMC4uZDVmODA1ZmI1MTEg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKQEAgLTMwLDYgKzMwLDcgQEAgcGdfZHVtcF9zb3VyY2VzID0gZmls ZXMoCiAgICdjb21tb24uYycsCiAgICdwZ19kdW1wLmMnLAogICAncGdfZHVtcF9zb3J0LmMnLAor ICAnY29ubmVjdGRiLmMnLAogKQogCiBpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKQEAgLTQ5 LDYgKzUwLDcgQEAgYmluX3RhcmdldHMgKz0gcGdfZHVtcAogCiBwZ19kdW1wYWxsX3NvdXJjZXMg PSBmaWxlcygKICAgJ3BnX2R1bXBhbGwuYycsCisgICdjb25uZWN0ZGIuYycsCiApCiAKIGlmIGhv c3Rfc3lzdGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IGU3ODNjYzY4ZDg5Li43 MzFjYjJkMTlmYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMjkxLDcgKzI5MSw3IEBAIHR5cGVkZWYg dm9pZCAoKlNldHVwV29ya2VyUHRyVHlwZSkgKEFyY2hpdmUgKkFIKTsKICAqIE1haW4gYXJjaGl2 ZXIgaW50ZXJmYWNlLgogICovCiAKLWV4dGVybiB2b2lkIENvbm5lY3REYXRhYmFzZShBcmNoaXZl ICpBSFgsCitleHRlcm4gdm9pZCBDb25uZWN0RGF0YWJhc2VBaHgoQXJjaGl2ZSAqQUhYLAogCQkJ CQkJCWNvbnN0IENvbm5QYXJhbXMgKmNwYXJhbXMsCiAJCQkJCQkJYm9vbCBpc1JlY29ubmVjdCk7 CiBleHRlcm4gdm9pZCBEaXNjb25uZWN0RGF0YWJhc2UoQXJjaGl2ZSAqQUhYKTsKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCA3NDgwZTEyMmI2MS4uMTJmM2YzOWUzOWIgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTQxMyw3ICs0MTMsNyBAQCBSZXN0 b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJCUFIWC0+bWluUmVtb3RlVmVyc2lvbiA9IDA7CiAJ CUFIWC0+bWF4UmVtb3RlVmVyc2lvbiA9IDk5OTk5OTk7CiAKLQkJQ29ubmVjdERhdGFiYXNlKEFI WCwgJnJvcHQtPmNwYXJhbXMsIGZhbHNlKTsKKwkJQ29ubmVjdERhdGFiYXNlQWh4KEFIWCwgJnJv cHQtPmNwYXJhbXMsIGZhbHNlKTsKIAogCQkvKgogCQkgKiBJZiB3ZSdyZSB0YWxraW5nIHRvIHRo ZSBEQiBkaXJlY3RseSwgZG9uJ3Qgc2VuZCBjb21tZW50cyBzaW5jZSB0aGV5CkBAIC00NDMwLDcg KzQ0MzAsNyBAQCByZXN0b3JlX3RvY19lbnRyaWVzX3Bvc3Rmb3JrKEFyY2hpdmVIYW5kbGUgKkFI LCBUb2NFbnRyeSAqcGVuZGluZ19saXN0KQogCS8qCiAJICogTm93IHJlY29ubmVjdCB0aGUgc2lu Z2xlIHBhcmVudCBjb25uZWN0aW9uLgogCSAqLwotCUNvbm5lY3REYXRhYmFzZSgoQXJjaGl2ZSAq KSBBSCwgJnJvcHQtPmNwYXJhbXMsIHRydWUpOworCUNvbm5lY3REYXRhYmFzZUFoeCgoQXJjaGl2 ZSAqKSBBSCwgJnJvcHQtPmNwYXJhbXMsIHRydWUpOwogCiAJLyogcmUtZXN0YWJsaXNoIGZpeGVk IHN0YXRlICovCiAJX2RvU2V0Rml4ZWRPdXRwdXRTdGF0ZShBSCk7CkBAIC01MDQ3LDcgKzUwNDcs NyBAQCBDbG9uZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJICogQ29ubmVjdCBvdXIgbmV3 IGNsb25lIG9iamVjdCB0byB0aGUgZGF0YWJhc2UsIHVzaW5nIHRoZSBzYW1lIGNvbm5lY3Rpb24K IAkgKiBwYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLgogCSAqLwot CUNvbm5lY3REYXRhYmFzZSgoQXJjaGl2ZSAqKSBjbG9uZSwgJmNsb25lLT5wdWJsaWMucm9wdC0+ Y3BhcmFtcywgdHJ1ZSk7CisJQ29ubmVjdERhdGFiYXNlQWh4KChBcmNoaXZlICopIGNsb25lLCAm Y2xvbmUtPnB1YmxpYy5yb3B0LT5jcGFyYW1zLCB0cnVlKTsKIAogCS8qIHJlLWVzdGFibGlzaCBm aXhlZCBzdGF0ZSAqLwogCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZVJlYWQpCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2RiLmMKaW5kZXggNzFjNTVkMjQ2NmEuLjIyN2RkOTYzOTg0IDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9kYi5jCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgog I2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb25uZWN0ZGIuaCIKICNpbmNs dWRlICJwYXJhbGxlbC5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogI2luY2x1 ZGUgInBnX2JhY2t1cF9kYi5oIgpAQCAtODYsOSArODcsOSBAQCBSZWNvbm5lY3RUb1NlcnZlcihB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZGJuYW1lKQogCSAqIEFyY2hpdmVIYW5kbGUn cyBjb25uQ2FuY2VsLCBiZWZvcmUgY2xvc2luZyBvbGQgY29ubmVjdGlvbi4gIE90aGVyd2lzZQog CSAqIGFuIGlsbC10aW1lZCBTSUdJTlQgY291bGQgdHJ5IHRvIGFjY2VzcyBhIGRlYWQgY29ubmVj dGlvbi4KIAkgKi8KLQlBSC0+Y29ubmVjdGlvbiA9IE5VTEw7CQkvKiBkb2RnZSBlcnJvciBjaGVj ayBpbiBDb25uZWN0RGF0YWJhc2UgKi8KKwlBSC0+Y29ubmVjdGlvbiA9IE5VTEw7CQkvKiBkb2Rn ZSBlcnJvciBjaGVjayBpbiBDb25uZWN0RGF0YWJhc2VBaHggKi8KIAotCUNvbm5lY3REYXRhYmFz ZSgoQXJjaGl2ZSAqKSBBSCwgJnJvcHQtPmNwYXJhbXMsIHRydWUpOworCUNvbm5lY3REYXRhYmFz ZUFoeCgoQXJjaGl2ZSAqKSBBSCwgJnJvcHQtPmNwYXJhbXMsIHRydWUpOwogCiAJUFFmaW5pc2go b2xkQ29ubik7CiB9CkBAIC0xMDUsMTQgKzEwNiwxMyBAQCBSZWNvbm5lY3RUb1NlcnZlcihBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZGJuYW1lKQogICogdXNlcm5hbWUgbmV2ZXIgZG9l cyBjaGFuZ2UsIHNvIG9uZSBzYXZlZFBhc3N3b3JkIGlzIHN1ZmZpY2llbnQuCiAgKi8KIHZvaWQK LUNvbm5lY3REYXRhYmFzZShBcmNoaXZlICpBSFgsCitDb25uZWN0RGF0YWJhc2VBaHgoQXJjaGl2 ZSAqQUhYLAogCQkJCWNvbnN0IENvbm5QYXJhbXMgKmNwYXJhbXMsCiAJCQkJYm9vbCBpc1JlY29u bmVjdCkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAl0 cml2YWx1ZQlwcm9tcHRfcGFzc3dvcmQ7CiAJY2hhcgkgICAqcGFzc3dvcmQ7Ci0JYm9vbAkJbmV3 X3Bhc3M7CiAKIAlpZiAoQUgtPmNvbm5lY3Rpb24pCiAJCXBnX2ZhdGFsKCJhbHJlYWR5IGNvbm5l Y3RlZCB0byBhIGRhdGFiYXNlIik7CkBAIC0xMjUsNjkgKzEyNSwxMCBAQCBDb25uZWN0RGF0YWJh c2UoQXJjaGl2ZSAqQUhYLAogCWlmIChwcm9tcHRfcGFzc3dvcmQgPT0gVFJJX1lFUyAmJiBwYXNz d29yZCA9PSBOVUxMKQogCQlwYXNzd29yZCA9IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBm YWxzZSk7CiAKLQkvKgotCSAqIFN0YXJ0IHRoZSBjb25uZWN0aW9uLiAgTG9vcCB1bnRpbCB3ZSBo YXZlIGEgcGFzc3dvcmQgaWYgcmVxdWVzdGVkIGJ5Ci0JICogYmFja2VuZC4KLQkgKi8KLQlkbwot CXsKLQkJY29uc3QgY2hhciAqa2V5d29yZHNbOF07Ci0JCWNvbnN0IGNoYXIgKnZhbHVlc1s4XTsK LQkJaW50CQkJaSA9IDA7Ci0KLQkJLyoKLQkJICogSWYgZGJuYW1lIGlzIGEgY29ubnN0cmluZywg aXRzIGVudHJpZXMgY2FuIG92ZXJyaWRlIHRoZSBvdGhlcgotCQkgKiB2YWx1ZXMgb2J0YWluZWQg ZnJvbSBjcGFyYW1zOyBidXQgaW4gdHVybiwgb3ZlcnJpZGVfZGJuYW1lIGNhbgotCQkgKiBvdmVy cmlkZSB0aGUgZGJuYW1lIGNvbXBvbmVudCBvZiBpdC4KLQkJICovCi0JCWtleXdvcmRzW2ldID0g Imhvc3QiOwotCQl2YWx1ZXNbaSsrXSA9IGNwYXJhbXMtPnBnaG9zdDsKLQkJa2V5d29yZHNbaV0g PSAicG9ydCI7Ci0JCXZhbHVlc1tpKytdID0gY3BhcmFtcy0+cGdwb3J0OwotCQlrZXl3b3Jkc1tp XSA9ICJ1c2VyIjsKLQkJdmFsdWVzW2krK10gPSBjcGFyYW1zLT51c2VybmFtZTsKLQkJa2V5d29y ZHNbaV0gPSAicGFzc3dvcmQiOwotCQl2YWx1ZXNbaSsrXSA9IHBhc3N3b3JkOwotCQlrZXl3b3Jk c1tpXSA9ICJkYm5hbWUiOwotCQl2YWx1ZXNbaSsrXSA9IGNwYXJhbXMtPmRibmFtZTsKLQkJaWYg KGNwYXJhbXMtPm92ZXJyaWRlX2RibmFtZSkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAiZGJuYW1l IjsKLQkJCXZhbHVlc1tpKytdID0gY3BhcmFtcy0+b3ZlcnJpZGVfZGJuYW1lOwotCQl9Ci0JCWtl eXdvcmRzW2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiOwotCQl2YWx1ZXNbaSsrXSA9 IHByb2duYW1lOwotCQlrZXl3b3Jkc1tpXSA9IE5VTEw7Ci0JCXZhbHVlc1tpKytdID0gTlVMTDsK LQkJQXNzZXJ0KGkgPD0gbGVuZ3Rob2Yoa2V5d29yZHMpKTsKLQotCQluZXdfcGFzcyA9IGZhbHNl OwotCQlBSC0+Y29ubmVjdGlvbiA9IFBRY29ubmVjdGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMs IHRydWUpOwotCi0JCWlmICghQUgtPmNvbm5lY3Rpb24pCi0JCQlwZ19mYXRhbCgiY291bGQgbm90 IGNvbm5lY3QgdG8gZGF0YWJhc2UiKTsKLQotCQlpZiAoUFFzdGF0dXMoQUgtPmNvbm5lY3Rpb24p ID09IENPTk5FQ1RJT05fQkFEICYmCi0JCQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKEFILT5j b25uZWN0aW9uKSAmJgotCQkJcGFzc3dvcmQgPT0gTlVMTCAmJgotCQkJcHJvbXB0X3Bhc3N3b3Jk ICE9IFRSSV9OTykKLQkJewotCQkJUFFmaW5pc2goQUgtPmNvbm5lY3Rpb24pOwotCQkJcGFzc3dv cmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOwotCQkJbmV3X3Bhc3MgPSB0 cnVlOwotCQl9Ci0JfSB3aGlsZSAobmV3X3Bhc3MpOwotCi0JLyogY2hlY2sgdG8gc2VlIHRoYXQg dGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KLQlpZiAoUFFz dGF0dXMoQUgtPmNvbm5lY3Rpb24pID09IENPTk5FQ1RJT05fQkFEKQotCXsKLQkJaWYgKGlzUmVj b25uZWN0KQotCQkJcGdfZmF0YWwoInJlY29ubmVjdGlvbiBmYWlsZWQ6ICVzIiwKLQkJCQkJIFBR ZXJyb3JNZXNzYWdlKEFILT5jb25uZWN0aW9uKSk7Ci0JCWVsc2UKLQkJCXBnX2ZhdGFsKCIlcyIs Ci0JCQkJCSBQUWVycm9yTWVzc2FnZShBSC0+Y29ubmVjdGlvbikpOwotCX0KKwlBSC0+Y29ubmVj dGlvbiA9IENvbm5lY3REYXRhYmFzZShjcGFyYW1zLT5kYm5hbWUsIE5VTEwsIGNwYXJhbXMtPnBn aG9zdCwKKwkJCWNwYXJhbXMtPnBncG9ydCwgY3BhcmFtcy0+dXNlcm5hbWUsCisJCQlwcm9tcHRf cGFzc3dvcmQsIHRydWUsCisJCQlwcm9nbmFtZSwgTlVMTCwgTlVMTCwgcGFzc3dvcmQsIGNwYXJh bXMtPm92ZXJyaWRlX2RibmFtZSk7CiAKIAkvKiBTdGFydCBzdHJpY3Q7IGxhdGVyIHBoYXNlcyBt YXkgb3ZlcnJpZGUgdGhpcy4gKi8KIAlQUWNsZWFyKEV4ZWN1dGVTcWxRdWVyeUZvclNpbmdsZVJv dygoQXJjaGl2ZSAqKSBBSCwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMg Yi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IGMzNzE1NzA1MDFhLi42YmI1NGMxYTJi NCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCkBAIC05MzQsNyArOTM0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJICogT3BlbiB0aGUgZGF0YWJhc2UgdXNpbmcgdGhlIEFyY2hpdmVyLCBzbyBpdCBr bm93cyBhYm91dCBpdC4gRXJyb3JzIG1lYW4KIAkgKiBkZWF0aC4KIAkgKi8KLQlDb25uZWN0RGF0 YWJhc2UoZm91dCwgJmRvcHQuY3BhcmFtcywgZmFsc2UpOworCUNvbm5lY3REYXRhYmFzZUFoeChm b3V0LCAmZG9wdC5jcGFyYW1zLCBmYWxzZSk7CiAJc2V0dXBfY29ubmVjdGlvbihmb3V0LCBkdW1w ZW5jb2RpbmcsIGR1bXBzbmFwc2hvdCwgdXNlX3JvbGUpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5j CmluZGV4IGUwODY3MjQyNTI2Li5lN2U0OTJhZmEyOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXBhbGwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC0y NCwxMSArMjQsMTEgQEAKICNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCiAjaW5j bHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5j bHVkZSAiY29ubmVjdGRiLmgiCiAjaW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVf dXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0 b3B0X2xvbmcuaCIKLSNpbmNsdWRlICJwZ19iYWNrdXAuaCIKIAogLyogdmVyc2lvbiBzdHJpbmcg d2UgZXhwZWN0IGJhY2sgZnJvbSBwZ19kdW1wICovCiAjZGVmaW5lIFBHRFVNUF9WRVJTSU9OU1RS ICJwZ19kdW1wIChQb3N0Z3JlU1FMKSAiIFBHX1ZFUlNJT04gIlxuIgpAQCAtNzEsMjEgKzcxLDE1 IEBAIHN0YXRpYyB2b2lkIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJCQkJCSBj b25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29uc3QgY2hh ciAqb2JqdHlwZSwgY29uc3QgY2hhciAqb2JqbmFtZSwKIAkJCQkJCQkgUFFFeHBCdWZmZXIgYnVm ZmVyKTsKLXN0YXRpYyBQR2Nvbm4gKmNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUs Ci0JCQkJCQkJICAgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsIGNvbnN0IGNoYXIgKnBn aG9zdCwKLQkJCQkJCQkgICBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwK LQkJCQkJCQkgICB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcik7 Ci1zdGF0aWMgY2hhciAqY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNv bnN0IGNoYXIgKip2YWx1ZXMpOwotc3RhdGljIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25u ICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5h bWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJ CQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1w YWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRl cm4pOwogCiBzdGF0aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwotc3RhdGljIGNvbnN0 IGNoYXIgKnByb2duYW1lOworY29uc3QgY2hhciAqcHJvZ25hbWU7CiBzdGF0aWMgUFFFeHBCdWZm ZXIgcGdkdW1wb3B0czsKLXN0YXRpYyBjaGFyICpjb25uc3RyID0gIiI7CitzdGF0aWMgY29uc3Qg Y2hhciAqY29ubnN0ciA9ICIiOwogc3RhdGljIGJvb2wgb3V0cHV0X2NsZWFuID0gZmFsc2U7CiBz dGF0aWMgYm9vbCBza2lwX2FjbHMgPSBmYWxzZTsKIHN0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxz ZTsKQEAgLTEyNSw4ICsxMTksNiBAQCBzdGF0aWMgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogc3Rh dGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBO VUxMfTsKIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7 TlVMTCwgTlVMTH07CiAKLSNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQotCiBp bnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKQEAgLTQ4MywxOSArNDc1LDIyIEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkgKi8KIAlpZiAocGdkYikKIAl7Ci0JCWNv bm4gPSBjb25uZWN0RGF0YWJhc2UocGdkYiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNl ciwKLQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlKTsKKwkJY29ubiA9IENvbm5lY3RE YXRhYmFzZShwZ2RiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAorCQkJCQkJCSAg IHByb21wdF9wYXNzd29yZCwgZmFsc2UsCisJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAm c2VydmVyX3ZlcnNpb24sIE5VTEwsIE5VTEwpOwogCiAJCWlmICghY29ubikKIAkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBwZ2RiKTsKIAl9CiAJZWxz ZQogCXsKLQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgicG9zdGdyZXMiLCBjb25uc3RyLCBwZ2hv c3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2UpOwor CQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIGNvbm5zdHIsIHBnaG9zdCwgcGdw b3J0LCBwZ3VzZXIsCisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSwKKwkJCQkJCQkg ICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbiwgTlVMTCwgTlVMTCk7CiAJCWlm ICghY29ubikKLQkJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIGNvbm5zdHIs IHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgdHJ1 ZSk7CisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBjb25uc3RyLCBwZ2hv c3QsIHBncG9ydCwgcGd1c2VyLAorCQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIHRydWUsCisJ CQkJCQkJCSAgIHByb2duYW1lLCAmY29ubnN0ciwgJnNlcnZlcl92ZXJzaW9uLCBOVUxMLCBOVUxM KTsKIAogCQlpZiAoIWNvbm4pCiAJCXsKQEAgLTE3MTgsMjU2ICsxNzEzLDYgQEAgYnVpbGRTaFNl Y0xhYmVscyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVj dElkLAogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihzcWwpOwogfQogCi0vKgotICogTWFrZSBhIGRhdGFi YXNlIGNvbm5lY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIEFuCi0gKiBpbnRlcmFj dGl2ZSBwYXNzd29yZCBwcm9tcHQgaXMgYXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQu Ci0gKgotICogSWYgZmFpbF9vbl9lcnJvciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91 dCBwcmludGluZyBhbnkgbWVzc2FnZQotICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBw cm9tcHRlZCBwYXNzd29yZCBmb3IgdGhlIG5leHQgdHJ5LgotICoKLSAqIE9uIHN1Y2Nlc3MsIHRo ZSBnbG9iYWwgdmFyaWFibGUgJ2Nvbm5zdHInIGlzIHNldCB0byBhIGNvbm5lY3Rpb24gc3RyaW5n Ci0gKiBjb250YWluaW5nIHRoZSBvcHRpb25zIHVzZWQuCi0gKi8KLXN0YXRpYyBQR2Nvbm4gKgot Y29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlv bl9zdHJpbmcsCi0JCQkJY29uc3QgY2hhciAqcGdob3N0LCBjb25zdCBjaGFyICpwZ3BvcnQsIGNv bnN0IGNoYXIgKnBndXNlciwKLQkJCQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFp bF9vbl9lcnJvcikKLXsKLQlQR2Nvbm4JICAgKmNvbm47Ci0JYm9vbAkJbmV3X3Bhc3M7Ci0JY29u c3QgY2hhciAqcmVtb3RldmVyc2lvbl9zdHI7Ci0JaW50CQkJbXlfdmVyc2lvbjsKLQljb25zdCBj aGFyICoqa2V5d29yZHMgPSBOVUxMOwotCWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxMOwotCVBR Y29ubmluZm9PcHRpb24gKmNvbm5fb3B0cyA9IE5VTEw7Ci0Jc3RhdGljIGNoYXIgKnBhc3N3b3Jk ID0gTlVMTDsKLQotCWlmIChwcm9tcHRfcGFzc3dvcmQgPT0gVFJJX1lFUyAmJiAhcGFzc3dvcmQp Ci0JCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQotCS8q Ci0JICogU3RhcnQgdGhlIGNvbm5lY3Rpb24uICBMb29wIHVudGlsIHdlIGhhdmUgYSBwYXNzd29y ZCBpZiByZXF1ZXN0ZWQgYnkKLQkgKiBiYWNrZW5kLgotCSAqLwotCWRvCi0JewotCQlpbnQJCQlh cmdjb3VudCA9IDY7Ci0JCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0OwotCQljaGFyCSAgICpl cnJfbXNnID0gTlVMTDsKLQkJaW50CQkJaSA9IDA7Ci0KLQkJZnJlZShrZXl3b3Jkcyk7Ci0JCWZy ZWUodmFsdWVzKTsKLQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKLQotCQkvKgotCQkgKiBN ZXJnZSB0aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBnaXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rp b24gc3RyaW5nCi0JCSAqIGFuZCBvdGhlciBvcHRpb25zLiAgRXhwbGljaXRseSBkaXNjYXJkIGFu eSBkYm5hbWUgdmFsdWUgaW4gdGhlCi0JCSAqIGNvbm5lY3Rpb24gc3RyaW5nOyBvdGhlcndpc2Us IFBRY29ubmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJwcmV0Ci0JCSAqIHRoYXQgdmFsdWUgYXMg YmVpbmcgaXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcuCi0JCSAqLwotCQlpZiAoY29ubmVjdGlv bl9zdHJpbmcpCi0JCXsKLQkJCWNvbm5fb3B0cyA9IFBRY29ubmluZm9QYXJzZShjb25uZWN0aW9u X3N0cmluZywgJmVycl9tc2cpOwotCQkJaWYgKGNvbm5fb3B0cyA9PSBOVUxMKQotCQkJCXBnX2Zh dGFsKCIlcyIsIGVycl9tc2cpOwotCi0JCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25u X29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQotCQkJewotCQkJCWlmIChjb25uX29w dC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCi0JCQkJCXN0cmNt cChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCi0JCQkJCWFyZ2NvdW50Kys7Ci0J CQl9Ci0KLQkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigq a2V5d29yZHMpKTsKLQkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXpl b2YoKnZhbHVlcykpOwotCi0JCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+ a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQotCQkJewotCQkJCWlmIChjb25uX29wdC0+dmFs ICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCi0JCQkJCXN0cmNtcChjb25u X29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCi0JCQkJewotCQkJCQlrZXl3b3Jkc1tpXSA9 IGNvbm5fb3B0LT5rZXl3b3JkOwotCQkJCQl2YWx1ZXNbaV0gPSBjb25uX29wdC0+dmFsOwotCQkJ CQlpKys7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJa2V5d29yZHMgPSBwZ19t YWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOwotCQkJdmFsdWVzID0g cGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7Ci0JCX0KLQotCQlp ZiAocGdob3N0KQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJob3N0IjsKLQkJCXZhbHVlc1tpXSA9 IHBnaG9zdDsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGdwb3J0KQotCQl7Ci0JCQlrZXl3b3Jkc1tp XSA9ICJwb3J0IjsKLQkJCXZhbHVlc1tpXSA9IHBncG9ydDsKLQkJCWkrKzsKLQkJfQotCQlpZiAo cGd1c2VyKQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJ1c2VyIjsKLQkJCXZhbHVlc1tpXSA9IHBn dXNlcjsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGFzc3dvcmQpCi0JCXsKLQkJCWtleXdvcmRzW2ld ID0gInBhc3N3b3JkIjsKLQkJCXZhbHVlc1tpXSA9IHBhc3N3b3JkOwotCQkJaSsrOwotCQl9Ci0J CWlmIChkYm5hbWUpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gImRibmFtZSI7Ci0JCQl2YWx1ZXNb aV0gPSBkYm5hbWU7Ci0JCQlpKys7Ci0JCX0KLQkJa2V5d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBw bGljYXRpb25fbmFtZSI7Ci0JCXZhbHVlc1tpXSA9IHByb2duYW1lOwotCQlpKys7Ci0KLQkJbmV3 X3Bhc3MgPSBmYWxzZTsKLQkJY29ubiA9IFBRY29ubmVjdGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1 ZXMsIHRydWUpOwotCi0JCWlmICghY29ubikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVj dCB0byBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwotCi0JCWlmIChQUXN0YXR1cyhjb25uKSA9 PSBDT05ORUNUSU9OX0JBRCAmJgotCQkJUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChjb25uKSAm JgotCQkJIXBhc3N3b3JkICYmCi0JCQlwcm9tcHRfcGFzc3dvcmQgIT0gVFJJX05PKQotCQl7Ci0J CQlQUWZpbmlzaChjb25uKTsKLQkJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6 ICIsIGZhbHNlKTsKLQkJCW5ld19wYXNzID0gdHJ1ZTsKLQkJfQotCX0gd2hpbGUgKG5ld19wYXNz KTsKLQotCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1 Y2Nlc3NmdWxseSBtYWRlICovCi0JaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFE KQotCXsKLQkJaWYgKGZhaWxfb25fZXJyb3IpCi0JCQlwZ19mYXRhbCgiJXMiLCBQUWVycm9yTWVz c2FnZShjb25uKSk7Ci0JCWVsc2UKLQkJewotCQkJUFFmaW5pc2goY29ubik7Ci0KLQkJCWZyZWUo a2V5d29yZHMpOwotCQkJZnJlZSh2YWx1ZXMpOwotCQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRz KTsKLQotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE9rLCBjb25uZWN0ZWQg c3VjY2Vzc2Z1bGx5LiBSZW1lbWJlciB0aGUgb3B0aW9ucyB1c2VkLCBpbiB0aGUgZm9ybSBvZiBh Ci0JICogY29ubmVjdGlvbiBzdHJpbmcuCi0JICovCi0JY29ubnN0ciA9IGNvbnN0cnVjdENvbm5T dHIoa2V5d29yZHMsIHZhbHVlcyk7Ci0KLQlmcmVlKGtleXdvcmRzKTsKLQlmcmVlKHZhbHVlcyk7 Ci0JUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKLQotCS8qIENoZWNrIHZlcnNpb24gKi8KLQly ZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFyYW1ldGVyU3RhdHVzKGNvbm4sICJzZXJ2ZXJfdmVyc2lv biIpOwotCWlmICghcmVtb3RldmVyc2lvbl9zdHIpCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgZ2V0 IHNlcnZlciB2ZXJzaW9uIik7Ci0Jc2VydmVyX3ZlcnNpb24gPSBQUXNlcnZlclZlcnNpb24oY29u bik7Ci0JaWYgKHNlcnZlcl92ZXJzaW9uID09IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFy c2Ugc2VydmVyIHZlcnNpb24gXCIlc1wiIiwKLQkJCQkgcmVtb3RldmVyc2lvbl9zdHIpOwotCi0J bXlfdmVyc2lvbiA9IFBHX1ZFUlNJT05fTlVNOwotCi0JLyoKLQkgKiBXZSBhbGxvdyB0aGUgc2Vy dmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVhc2Ugb2YKLQkg KiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVjayBpbiBwZ19k dW1wLmMuKQotCSAqLwotCWlmIChteV92ZXJzaW9uICE9IHNlcnZlcl92ZXJzaW9uCi0JCSYmIChz ZXJ2ZXJfdmVyc2lvbiA8IDkwMjAwIHx8Ci0JCQkoc2VydmVyX3ZlcnNpb24gLyAxMDApID4gKG15 X3ZlcnNpb24gLyAxMDApKSkKLQl7Ci0JCXBnX2xvZ19lcnJvcigiYWJvcnRpbmcgYmVjYXVzZSBv ZiBzZXJ2ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOwotCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJzZXJ2 ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwKLQkJCQkJCQlyZW1vdGV2ZXJzaW9uX3N0 ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04pOwotCQlleGl0X25pY2VseSgxKTsKLQl9Ci0KLQlQUWNs ZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NRTCkpOwot Ci0JcmV0dXJuIGNvbm47Ci19Ci0KLS8qIC0tLS0tLS0tLS0KLSAqIENvbnN0cnVjdCBhIGNvbm5l Y3Rpb24gc3RyaW5nIGZyb20gdGhlIGdpdmVuIGtleXdvcmQvdmFsdWUgcGFpcnMuIEl0IGlzCi0g KiB1c2VkIHRvIHBhc3MgdGhlIGNvbm5lY3Rpb24gb3B0aW9ucyB0byB0aGUgcGdfZHVtcCBzdWJw cm9jZXNzLgotICoKLSAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZXhjbHVkZWQ6Ci0g KglkYm5hbWUJCS0gdmFyaWVzIGluIGVhY2ggcGdfZHVtcCBpbnZvY2F0aW9uCi0gKglwYXNzd29y ZAktIGl0J3Mgbm90IHNlY3VyZSB0byBwYXNzIGEgcGFzc3dvcmQgb24gdGhlIGNvbW1hbmQgbGlu ZQotICoJZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSAtIHdlJ2xsIGxldCBwZ19kdW1wIHNldCBp dAotICogLS0tLS0tLS0tLQotICovCi1zdGF0aWMgY2hhciAqCi1jb25zdHJ1Y3RDb25uU3RyKGNv bnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcykKLXsKLQlQUUV4cEJ1ZmZl ciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwotCWNoYXIJICAgKmNvbm5zdHI7Ci0JaW50CQkJ aTsKLQlib29sCQlmaXJzdGtleXdvcmQgPSB0cnVlOwotCi0JLyogQ29uc3RydWN0IGEgbmV3IGNv bm5lY3Rpb24gc3RyaW5nIGluIGtleT0ndmFsdWUnIGZvcm1hdC4gKi8KLQlmb3IgKGkgPSAwOyBr ZXl3b3Jkc1tpXSAhPSBOVUxMOyBpKyspCi0JewotCQlpZiAoc3RyY21wKGtleXdvcmRzW2ldLCAi ZGJuYW1lIikgPT0gMCB8fAotCQkJc3RyY21wKGtleXdvcmRzW2ldLCAicGFzc3dvcmQiKSA9PSAw IHx8Ci0JCQlzdHJjbXAoa2V5d29yZHNbaV0sICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIikg PT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghZmlyc3RrZXl3b3JkKQotCQkJYXBwZW5kUFFF eHBCdWZmZXJDaGFyKGJ1ZiwgJyAnKTsKLQkJZmlyc3RrZXl3b3JkID0gZmFsc2U7Ci0JCWFwcGVu ZFBRRXhwQnVmZmVyKGJ1ZiwgIiVzPSIsIGtleXdvcmRzW2ldKTsKLQkJYXBwZW5kQ29ublN0clZh bChidWYsIHZhbHVlc1tpXSk7Ci0JfQotCi0JY29ubnN0ciA9IHBnX3N0cmR1cChidWYtPmRhdGEp OwotCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwotCXJldHVybiBjb25uc3RyOwotfQotCi0vKgot ICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0cywgZXhpdCBwcm9ncmFtIG9uIGZhaWx1 cmUuCi0gKi8KLXN0YXRpYyBQR3Jlc3VsdCAqCi1leGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpxdWVyeSkKLXsKLQlQR3Jlc3VsdCAgICpyZXM7Ci0KLQlwZ19sb2dfaW5mbygi ZXhlY3V0aW5nICVzIiwgcXVlcnkpOwotCi0JcmVzID0gUFFleGVjKGNvbm4sIHF1ZXJ5KTsKLQlp ZiAoIXJlcyB8fAotCQlQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKLQl7 Ci0JCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4p KTsKLQkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQkJUFFm aW5pc2goY29ubik7Ci0JCWV4aXRfbmljZWx5KDEpOwotCX0KLQotCXJldHVybiByZXM7Ci19Ci0K IC8qCiAgKiBBcyBhYm92ZSBmb3IgYSBTUUwgY29tbWFuZCAod2hpY2ggcmV0dXJucyBub3RoaW5n KS4KICAqLwotLSAKMi4zOS4zCgo= --00000000000085f057063011a9f4 Content-Type: application/octet-stream; name="v22_0002_pg_dumpall-with-non-text_format-11th_march.patch" Content-Disposition: attachment; filename="v22_0002_pg_dumpall-with-non-text_format-11th_march.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m84kjxd71 RnJvbSA3YWQxZmY0NDhlYmM2MGJjYzIwMzViYzgxYTIxN2UyZWIwMWNlMjBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAxMSBNYXIgMjAyNSAxOToyOToxNSArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBwZ19kdW1wYWxsIHdpdGggZGlyZWN0b3J5fHRhcnxjdXN0b20gZm9ybWF0IGFuZCBy ZXN0b3JlIAogaXQgIGJ5IHBnX3Jlc3RvcmUKCm5ldyBvcHRpb24gdG8gcGdfZHVtcGFsbDoKLUYs IC0tZm9ybWF0PWR8dHxjfHAgIG91dHB1dCBmaWxlIGZvcm1hdCAoIHBsYWluIHRleHQgKGRlZmF1 bHQpKQoKRXg6MSAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9ZGlyZWN0b3J5IC0tZmlsZT1kdW1wRGly TmFtZQpFeDoyIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD10YXIgLS1maWxlPWR1bXBEaXJOYW1lCkV4 OjMgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWN1c3RvbSAtLWZpbGU9ZHVtcERpck5hbWUKRXg6NCAu L3BnX2R1bXBhbGwgLS1mb3JtYXQ9cGxhaW4gLS1maWxlPWR1bXBEaXJOYW1lCgpkdW1wcyBhcmUg YXM6Cmdsb2JhbC5kYXQgOjo6IGdsb2JhbCBzcWwgY29tbWFuZHMgaW4gc2ltcGxlIHBsYWluIGZv cm1hdAptYXAuZGF0LiAgIDo6OiBkYm9pZCBkYm5hbWUgLS0tZW50cmllcyBmb3IgYWxsIGRhdGFi YXNlcyBpbiBzaW1wbGUgdGV4dCBmb3JtCmRhdGFiYXNlcy4gOjo6CiAgICAgIHN1YmRpciAgICAg ZGJvaWQxICAtPiB0b2MuZGF0IGFuZCBkYXRhIGZpbGVzIGluIGFyY2hpdmUgZm9ybWF0CiAgICAg IHN1YmRpciAgICAgZGJvaWQyLiAtPiB0b2MuZGF0IGFuZCBkYXRhIGZpbGVzIGluIGFyY2hpdmUg Zm9ybWF0CiAgICAgICAgICAgICAgZXRjCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpOT1RFOgppZiBuZWVk ZWQsIHJlc3RvcmUgc2luZ2xlIGRiIGJ5IHBhcnRpY3VsYXIgc3ViZGlyCgpFeDogLi9wZ19yZXN0 b3JlIC0tZm9ybWF0PWRpcmVjdG9yeSAtZCBwb3N0Z3JlcyBkdW1wRGlyTmFtZS9kYXRhYmFzZXMv NQogICAtLSBoZXJlLCA1IGlzIHRoZSBkYm9pZCBvZiBwb3N0Z3JlcyBkYgogICAtLSB0byBnZXQg ZGJvaWQsIHJlZmVyIGRibmFtZSBpbiBtYXAuZmlsZQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbmV3IG9w dGlvbnMgdG8gcGdfcmVzdG9yZToKLWcsIC0tZ2xvYmFscy1vbmx5ICAgICAgICAgICByZXN0b3Jl IG9ubHkgZ2xvYmFsIG9iamVjdHMsIG5vIGRhdGFiYXNlcwotLWV4Y2x1ZGUtZGF0YWJhc2U9UEFU VEVSTiAgIGV4Y2x1ZGUgZGF0YWJhc2Ugd2hvc2UgbmFtZSBtYXRjaGVzIHBhdHRlcm4KCldoZW4g d2UgZ2l2ZSAtZy8tLWdsb2JhbHMtb25seSBvcHRpb24sIHRoZW4gb25seSByZXN0b3JlIGdsb2Jh bHMsIG5vIGRiIHJlc3RvcmluZy4KCkRlc2lnbjoKV2hlbiAtLWZvcm1hdD1kfHR8YyBpcyBzcGVj aWZpZWQgYW5kIHRoZXJlIGlzIG5vIHRvYy5kYXQgaW4gbWFpbiBkaXJlY3RvcnksIHRoZW4gY2hl Y2sKZm9yIGdsb2JhbC5kYXQgdG8gcmVzdG9yZSBhbGwgZGF0YWJhc2VzLiBJZiBnbG9iYWwuZGF0 IGZpbGUgaXMgZXhpc3QgaW4gZGlyZWN0b3J5LAp0aGVuIGZpcnN0IHJlc3RvcmUgYWxsIGdsb2Jh bHMgZnJvbSBnbG9iYWwuZGF0IGFuZCB0aGVuIHJlc3RvcmUgYWxsIGRhdGFiYXNlcyBvbmUgYnkg b25lCmZyb20gbWFwLmRhdCBsaXN0IChpZiBleGlzdCkKCmZvciAtLWV4Y2x1ZGUtZGF0YWJhc2U9 UEFUVEVSTiBmb3IgcGdfcmVzdG9yZQoKYXMgb2Ygbm93LCBTRUxFQ1QgMSBXSEVSRSBYWFggT1BF UkFUT1IocGdfY2F0YWxvZy5+KSAnXihQQVRURVJOKSQnIENPTExBVEUgcGdfY2F0YWxvZy5kZWZh dWx0CmlmIG5vIGRiIGNvbm5lY3Rpb24sIHRoZW4gUEFUVEVSTj1OQU1FIG1hdGNoaW5nIG9ubHkK CmZvciBlYWNoIGRhdGFiYXNlLCB3ZSBhcmUgY2xlYW5pbmcgb25fZXhpdF9uaWNlbHlfaW5kZXgg bGlzdC4KCmF0IHRoZSBlbmQgb2YgcmVzdG9yZSwgd2UgYXJlIGdpdmluZyB3YXJuaW5nIHdpdGgg dG90YWwgbnVtYmVyIG9mIGVycm9ycyAoaW5jbHVkaW5nIGdsb2JhbC5kYXQsCmFuZCBlYWNoIGRh dGFiYXNlIGVycm9ycykgYW5kIGZvciBlYWNoIGRhdGFiYXNlLCB3ZSBhcmUgcHJpbnRpbmcgd2Fy bmluZyB3aXRoIGRibmFtZSBhbmQgdG90YWwKZXJyb3JzLgoKdGhyZWFkOgpodHRwczovL3d3dy5w b3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0FLWXROQXA5dk90eWRYTDNfcG5HSiUyQlRl dFp0TiUzREZZU25aU01DcVhjZVUzbWtIUHhQZyU0MG1haWwuZ21haWwuY29tIzA2NjQzM2NiNWFl MDA3Y2JlMzVmZWZkZGY3OTZkNTJmCi0tLQotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFs bC5zZ21sICAgICB8ICA4MCArKy0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAg ICB8ICA0MSArLQogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAzICst CiBzcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYyAgICAgICAgICAgfCAgMTEgKy0KIHNyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXAuaCAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jIHwgIDIwICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmggfCAgIDMgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICB8 ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jICAgIHwgIDIyICstCiBz cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmggICAgfCAgIDMgKy0KIHNyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXBhbGwuYyAgICAgICAgIHwgMjgwICsrKysrKystLQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3Rv cmUuYyAgICAgICAgIHwgODQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2Jpbi9w Z19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgICA5ICsKIHNyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0ICAgICB8ICAgMiArCiAxNSBmaWxlcyBjaGFuZ2VkLCAxMjQ4IGluc2VydGlv bnMoKyksIDc5IGRlbGV0aW9ucygtKQogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzcmMv YmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVm L3BnX2R1bXBhbGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmluZGV4 IGMyZmE1YmU5NTE5Li5jMzY4MDJlMDZmZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9w Z19kdW1wYWxsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKQEAg LTE2LDcgKzE2LDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4K ICAgPHJlZm5hbWU+cGdfZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBh IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBp bnRvIGEgc2NyaXB0IGZpbGU8L3JlZnB1cnBvc2U+CisgIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgYmFz ZWQgb24gc3BlY2lmaWVkIGR1bXAgZm9ybWF0IDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVkaXY+ CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0xMjEsNyArMTIxLDgzIEBAIFBvc3RncmVTUUwgZG9j dW1lbnRhdGlvbgogICAgICAgIDxwYXJhPgogICAgICAgICBTZW5kIG91dHB1dCB0byB0aGUgc3Bl Y2lmaWVkIGZpbGUuICBJZiB0aGlzIGlzIG9taXR0ZWQsIHRoZQogICAgICAgICBzdGFuZGFyZCBv dXRwdXQgaXMgdXNlZC4KLSAgICAgICA8L3BhcmE+CisgICAgICAgIE5vdGU6IFRoaXMgb3B0aW9u IGNhbiBiZSBvbWl0dGVkIG9ubHkgd2hlbiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+IGlzIHBs YWluCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LUYgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90 ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWZvcm1hdD08cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlz dGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNpZnkgZm9ybWF0IG9mIGR1bXAgZmls ZXMuICBJZiB3ZSB3YW50IHRvIGR1bXAgYWxsIHRoZSBkYXRhYmFzZXMsCisgICAgICAgIHRoZW4g cGFzcyB0aGlzIGFzIG5vbi1wbGFpbiBzbyB0aGF0IGR1bXAgb2YgYWxsIGRhdGFiYXNlcyBjYW4g YmUgdGFrZW4KKyAgICAgICAgaW4gc2VwYXJhdGUgc3ViZGlyZWN0b3J5IGluIGFyY2hpdmUgZm9y bWF0LgorICAgICAgICBieSBkZWZhdWx0LCB0aGlzIGlzIHBsYWluIGZvcm1hdC4KKworICAgICAg ICBJZiBub24tcGxhaW4gbW9kZSBpcyBwYXNzZWQsIHRoZW4gZ2xvYmFsLmRhdCAoZ2xvYmFsIHNx bCBjb21tYW5kcykgYW5kCisgICAgICAgIG1hcC5kYXQoZGJvaWQgYW5kIGRibmFtZXMgbGlzdCBv ZiBhbGwgdGhlIGRhdGFiYXNlcykgZmlsZXMgd2lsbCBiZSBjcmVhdGVkLgorICAgICAgICBBcGFy dCBmcm9tIHRoZXNlIGZpbGVzLCBvbmUgc3ViZGlyZWN0b3J5IHdpdGggZGF0YWJhc2VzIG5hbWUg d2lsbCBiZSBjcmVhdGVkLgorICAgICAgICBVbmRlciB0aGlzIGRhdGFiYXNlcyBzdWJkaXJlY3Rv cnksIHRoZXJlIHdpbGwgYmUgZmlsZXMgd2l0aCBkYm9pZCBuYW1lIGZvciBlYWNoCisgICAgICAg IGRhdGFiYXNlIGFuZCBpZiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+IGlzIGRpcmVjdG9yeSwg dGhlbiB0b2MuZGF0IGFuZCBvdGhlcgorICAgICAgICBkdW1wIGZpbGVzIHdpbGwgYmUgdW5kZXIg ZGJvaWQgc3ViZGlyZWN0b3J5LgorCisgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8L2xpdGVyYWw+PC90ZXJtPgor ICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRlcmFsPjwvdGVybT4KKyAgICAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgZGly ZWN0b3J5LWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUu IFVuZGVyIGRib2lkCisgICAgICAgICAgIHN1YmRpcmVjdG9yeSwgdGhpcyB3aWxsIGNyZWF0ZSBh IGRpcmVjdG9yeSB3aXRoIG9uZSBmaWxlIGZvciBlYWNoIHRhYmxlIGFuZCBsYXJnZQorICAgICAg ICAgICBvYmplY3QgYmVpbmcgZHVtcGVkLCBwbHVzIGEgc28tY2FsbGVkIFRhYmxlIG9mIENvbnRl bnRzIGZpbGUgZGVzY3JpYmluZyB0aGUgZHVtcGVkCisgICAgICAgICAgIG9iamVjdHMgaW4gYSBt YWNoaW5lLXJlYWRhYmxlIGZvcm1hdCB0aGF0IHBnX3Jlc3RvcmUgY2FuIHJlYWQuIEEgZGlyZWN0 b3J5IGZvcm1hdAorICAgICAgICAgICBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRoIHN0 YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBpbiBhbgorICAgICAgICAgICB1 bmNvbXByZXNzZWQgYXJjaGl2ZSBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSBnemlwLCBsejQs IG9yIHpzdGQgdG9vbHMuIFRoaXMKKyAgICAgICAgICAgZm9ybWF0IGlzIGNvbXByZXNzZWQgYnkg ZGVmYXVsdCB1c2luZyBnemlwIGFuZCBhbHNvIHN1cHBvcnRzIHBhcmFsbGVsIGR1bXBzLgorICAg ICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVu dHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5w PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnBsYWluPC9saXRlcmFs PjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAg ICAgT3V0cHV0IGEgcGxhaW4tdGV4dCBTUUwgc2NyaXB0IGZpbGUgKHRoZSBkZWZhdWx0KS4KKyAg ICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ YzwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jdXN0b208L2xpdGVy YWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAg ICAgICBPdXRwdXQgYSBjdXN0b20tZm9ybWF0IGFyY2hpdmUgc3VpdGFibGUgZm9yIGlucHV0IGlu dG8gcGdfcmVzdG9yZS4gVG9nZXRoZXIgd2l0aCB0aGUKKyAgICAgICAgICAgZGlyZWN0b3J5IG91 dHB1dCBmb3JtYXQsIHRoaXMgaXMgdGhlIG1vc3QgZmxleGlibGUgb3V0cHV0IGZvcm1hdCBpbiB0 aGF0IGl0IGFsbG93cyBtYW51YWwKKyAgICAgICAgICAgc2VsZWN0aW9uIGFuZCByZW9yZGVyaW5n IG9mIGFyY2hpdmVkIGl0ZW1zIGR1cmluZyByZXN0b3JlLiBUaGlzIGZvcm1hdCBpcyBhbHNvCisg ICAgICAgICAgIGNvbXByZXNzZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICA8L3BhcmE+CisgICAg ICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+PC90ZXJtPgor ICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgdGFyLWZvcm1h dCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSB0YXIgZm9y bWF0IGlzCisgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgZGlyZWN0b3J5IGZvcm1hdDog ZXh0cmFjdGluZyBhIHRhci1mb3JtYXQgYXJjaGl2ZSBwcm9kdWNlcyBhIHZhbGlkCisgICAgICAg ICAgIGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZS4gSG93ZXZlciwgdGhlIHRhciBmb3JtYXQgZG9l cyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbi4gQWxzbywKKyAgICAgICAgICAgd2hlbiB1c2luZyB0 YXIgZm9ybWF0IHRoZSByZWxhdGl2ZSBvcmRlciBvZiB0YWJsZSBkYXRhIGl0ZW1zIGNhbm5vdCBi ZSBjaGFuZ2VkIGR1cmluZyByZXN0b3JlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwv bGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFibGVs aXN0PgorICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3Rl bnRyeT4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgYi9k b2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCAxOTllYTMzNDVmMy4uNDZiZGJj MDkyYzMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0xOCw4ICsxOCw5IEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cmVmbmFtZT5wZ19yZXN0b3JlPC9yZWZuYW1lPgogCiAg IDxyZWZwdXJwb3NlPgotICAgcmVzdG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9k dWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgotICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkgPGFw cGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPgorICAgcmVzdG9yZSA8cHJvZHVjdG5hbWU+ UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KKyAgIGFyY2hpdmUgZmls ZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxh cHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9yZWZwdXJwb3NlPgogIDwv cmVmbmFtZWRpdj4KIApAQCAtMzcsOSArMzgsMTAgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CiAKICAgPHBhcmE+Ci0gICA8YXBwbGljYXRp b24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3IgcmVzdG9yaW5nIGEK KyAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZv ciByZXN0b3JpbmcKICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0 YWJhc2UgZnJvbSBhbiBhcmNoaXZlCi0gICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFwcC1w Z2R1bXAiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAorICAgY3JlYXRlZCBieSA8eHJl ZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IG9yCisgICA8eHJlZiBsaW5rZW5kPSJhcHAtcGctZHVt cGFsbCIvPiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CiAgICBmb3JtYXRzLiAgSXQgd2ls bCBpc3N1ZSB0aGUgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0IHRoZQogICAgZGF0 YWJhc2UgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMgc2F2ZWQuICBU aGUKICAgIGFyY2hpdmUgZmlsZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwv YXBwbGljYXRpb24+IHRvCkBAIC0xNDAsNiArMTQyLDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0 aW9uCiAgICAgICAgIGNvbW1hbmRzIHRoYXQgbWVudGlvbiB0aGlzIGRhdGFiYXNlLgogICAgICAg ICBBY2Nlc3MgcHJpdmlsZWdlcyBmb3IgdGhlIGRhdGFiYXNlIGl0c2VsZiBhcmUgYWxzbyByZXN0 b3JlZCwKICAgICAgICAgdW5sZXNzIDxvcHRpb24+LS1uby1hY2w8L29wdGlvbj4gaXMgc3BlY2lm aWVkLgorICAgICAgICA8b3B0aW9uPi0tY3JlYXRlPC9vcHRpb24+IGlzIHJlcXVpcmVkIHdoZW4g cmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcworICAgICAgICBmcm9tIGR1bXAgb2YgPGFwcGxp Y2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KICAgICAgICA8L3BhcmE+CiAKICAgICAg ICA8cGFyYT4KQEAgLTE2Niw2ICsxNzAsMjUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAg ICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVu dHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U9PHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4K KyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHJlc3RvcmUg ZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+LgorICAgICAgICBNdWx0aXBsZSBwYXR0 ZXJucyBjYW4gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyBtdWx0aXBsZQorICAgICAgICA8b3B0aW9u Pi0tZXhjbHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBzd2l0Y2hlcy4gIFRoZQorICAgICAgICA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+IHBhcmFtZXRl ciBpcworICAgICAgICBpbnRlcnByZXRlZCBhcyBhIHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBz YW1lIHJ1bGVzIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9u PidzIDxsaXRlcmFsPlxkPC9saXRlcmFsPgorICAgICAgICBjb21tYW5kcyAoc2VlIDx4cmVmIGxp bmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIi8+KSwKKyAgICAgICAgc28gbXVsdGlwbGUgZGF0YWJh c2VzIGNhbiBhbHNvIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgd2lsZGNhcmQKKyAgICAgICAgY2hh cmFjdGVycyBpbiB0aGUgcGF0dGVybi4gIFdoZW4gdXNpbmcgd2lsZGNhcmRzLCBiZSBjYXJlZnVs IHRvCisgICAgICAgIHF1b3RlIHRoZSBwYXR0ZXJuIGlmIG5lZWRlZCB0byBwcmV2ZW50IHNoZWxs IHdpbGRjYXJkIGV4cGFuc2lvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+ PG9wdGlvbj4tZTwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGl0LW9u LWVycm9yPC9vcHRpb24+PC90ZXJtPgpAQCAtMzE1LDYgKzMzOCwxNiBAQCBQb3N0Z3JlU1FMIGRv Y3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJt PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KKyAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGdsb2Jh bCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAg PC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAg PHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8 dGVybT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4 PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggZDVmODA1 ZmI1MTEuLmRjMWVkNDEwODM4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVp bGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC0xNiw2ICsxNiw3IEBAIHBn X2R1bXBfY29tbW9uX3NvdXJjZXMgPSBmaWxlcygKICAgJ3BnX2JhY2t1cF9udWxsLmMnLAogICAn cGdfYmFja3VwX3Rhci5jJywKICAgJ3BnX2JhY2t1cF91dGlscy5jJywKKyAgJ2Nvbm5lY3RkYi5j JywKICkKIAogcGdfZHVtcF9jb21tb24gPSBzdGF0aWNfbGlicmFyeSgnbGlicGdkdW1wX2NvbW1v bicsCkBAIC0zMCw3ICszMSw2IEBAIHBnX2R1bXBfc291cmNlcyA9IGZpbGVzKAogICAnY29tbW9u LmMnLAogICAncGdfZHVtcC5jJywKICAgJ3BnX2R1bXBfc29ydC5jJywKLSAgJ2Nvbm5lY3RkYi5j JywKICkKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCkBAIC03MCw2ICs3MCw3IEBAIGJp bl90YXJnZXRzICs9IHBnX2R1bXBhbGwKIAogcGdfcmVzdG9yZV9zb3VyY2VzID0gZmlsZXMoCiAg ICdwZ19yZXN0b3JlLmMnLAorICAnY29ubmVjdGRiLmMnLAogKQogCiBpZiBob3N0X3N5c3RlbSA9 PSAnd2luZG93cycKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jIGIvc3Jj L2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKaW5kZXggMDg2YWRjZGM1MDIuLmEzNmQyYTViZjg0IDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGFyYWxsZWwuYwpAQCAtMzI2LDExICszMjYsMTggQEAgZ2V0VGhyZWFkTG9jYWxQUUV4cEJ1 ZmZlcih2b2lkKQogICogcGdfZHVtcCBhbmQgcGdfcmVzdG9yZSBjYWxsIHRoaXMgdG8gcmVnaXN0 ZXIgdGhlIGNsZWFudXAgaGFuZGxlcgogICogYXMgc29vbiBhcyB0aGV5J3ZlIGNyZWF0ZWQgdGhl IEFyY2hpdmVIYW5kbGUuCiAgKi8KLXZvaWQKK2ludAogb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFy Y2hpdmUgKkFIWCkKIHsKIAlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsKLQlvbl9leGl0X25pY2Vs eShhcmNoaXZlX2Nsb3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKKwlyZXR1cm4gb25f ZXhpdF9uaWNlbHkoYXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbyk7Cit9 CisKK3ZvaWQKK3JlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCwgaW50 IGlkeCkKK3sKKwlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsKKwlzZXRfb25fZXhpdF9uaWNlbHlf ZW50cnkoYXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbywgaWR4KTsKIH0K IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXAuaAppbmRleCA3MzFjYjJkMTlmYi4uNDFlZTMwNTg1MGEgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwLmgKQEAgLTMwOSw3ICszMDksNyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0 aW9ucyhBcmNoaXZlICpBSCwgRHVtcE9wdGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwog CiBleHRlcm4gdm9pZCBQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7 CiAKLWV4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9p ZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpOwogCiAvKiBP cGVuIGFuIGV4aXN0aW5nIGFyY2hpdmUgKi8KIGV4dGVybiBBcmNoaXZlICpPcGVuQXJjaGl2ZShj b25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQpOwpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDEyZjNmMzllMzliLi5hZDJhNjJhMmM5YyAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMg aW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcF9s b19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2b2lk IFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJ CSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKwkJ CWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywgYm9vbCBh cHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hp dmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0zMzYsOSArMzM2LDE0 IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKQogCQlTdHJpY3RO YW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJsaWMgKi8KKy8qCisgKiBSZXN0b3JlQXJjaGl2 ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZp bGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisgKiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hp Y2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCisgKi8KIHZvaWQKLVJlc3RvcmVBcmNoaXZlKEFy Y2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0 YSkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0 b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKQEAgLTQ1NSw3ICs0NjAsNyBAQCBS ZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7 CiAJaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht ICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUs IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1l LCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlhaHByaW50ZihBSCwg Ii0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBAIC0xMjkxLDcg KzEyOTYsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCiAJc2F2ID0gU2F2ZU91 dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZp bGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+Zmls ZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjLCBmYWxzZSk7CiAKIAlpZiAoc3RyZnRpbWUoc3Rh bXBfc3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1QX1NUUkZUSU1FX0ZNVCwKIAkJCQkgbG9j YWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09IDApCkBAIC0xNjcwLDcgKzE2NzUsOCBAQCBhcmNo cHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKQogCiBzdGF0aWMgdm9pZAog U2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJICBj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCisJCSAgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAorCQkgIGJvb2wg YXBwZW5kX2RhdGEpCiB7CiAJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAq bW9kZTsKQEAgLTE2OTAsNyArMTY5Niw3IEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwg Y29uc3QgY2hhciAqZmlsZW5hbWUsCiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0J aWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCWlmIChhcHBlbmRfZGF0YSB8fCBBSC0+ bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKIAkJbW9kZSA9IFBHX0JJTkFSWV9BOwogCWVsc2UKIAkJ bW9kZSA9IFBHX0JJTkFSWV9XOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4 IGEyMDY0ZjQ3MWVkLi5hZTQzMzEzMjQzNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuaApAQCAtMzg1LDcgKzM4NSw4IEBAIHN0cnVjdCBfdG9jRW50cnkKIH07CiAKIGV4dGVybiBp bnQJcGFyYWxsZWxfcmVzdG9yZShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKTsKLWV4 dGVybiB2b2lkIG9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIGlu dCBvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJlcGxh Y2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCwgaW50IGlkeCk7CiAKIGV4dGVy biB2b2lkIHdhcm5fb3JfZXhpdF9ob3JyaWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hh ciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf dGFyLmMKaW5kZXggYjViYTNiNDZkZDkuLmQ5NGQwZGUyYTVkIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf dGFyLmMKQEAgLTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI KQogCQlzYXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJv c2UgPSAwOwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFy Y2hpdmUoKEFyY2hpdmUgKikgQUgsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJj aGl2ZSAqKSBBSCwgc2F2RG9wdCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfdXRpbHMuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMu YwppbmRleCA3OWFlYzVmNTE1OC4uNTllY2UyOTk5YTggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfdXRpbHMuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0 aWxzLmMKQEAgLTYxLDE0ICs2MSwyNiBAQCBzZXRfZHVtcF9zZWN0aW9uKGNvbnN0IGNoYXIgKmFy ZywgaW50ICpkdW1wU2VjdGlvbnMpCiAKIAogLyogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBiZSBy dW4gd2hlbiBleGl0X25pY2VseSBpcyBpbnZva2VkLiAqLwotdm9pZAoraW50CiBvbl9leGl0X25p Y2VseShvbl9leGl0X25pY2VseV9jYWxsYmFjayBmdW5jdGlvbiwgdm9pZCAqYXJnKQogewotCWlm IChvbl9leGl0X25pY2VseV9pbmRleCA+PSBNQVhfT05fRVhJVF9OSUNFTFkpCi0JCXBnX2ZhdGFs KCJvdXQgb2Ygb25fZXhpdF9uaWNlbHkgc2xvdHMiKTsKLQlvbl9leGl0X25pY2VseV9saXN0W29u X2V4aXRfbmljZWx5X2luZGV4XS5mdW5jdGlvbiA9IGZ1bmN0aW9uOwotCW9uX2V4aXRfbmljZWx5 X2xpc3Rbb25fZXhpdF9uaWNlbHlfaW5kZXhdLmFyZyA9IGFyZzsKKwlzZXRfb25fZXhpdF9uaWNl bHlfZW50cnkoZnVuY3Rpb24sIGFyZywgb25fZXhpdF9uaWNlbHlfaW5kZXgpOwogCW9uX2V4aXRf bmljZWx5X2luZGV4Kys7CisKKwlyZXR1cm4gKG9uX2V4aXRfbmljZWx5X2luZGV4IC0gMSk7Cit9 CisKK3ZvaWQKK3NldF9vbl9leGl0X25pY2VseV9lbnRyeShvbl9leGl0X25pY2VseV9jYWxsYmFj ayBmdW5jdGlvbiwgdm9pZCAqYXJnLCBpbnQgaSkKK3sKKwlpZiAoaSA+PSBNQVhfT05fRVhJVF9O SUNFTFkpCisJCXBnX2ZhdGFsKCJvdXQgb2Ygb25fZXhpdF9uaWNlbHkgc2xvdHMiKTsKKworCWlm IChpID4gb25fZXhpdF9uaWNlbHlfaW5kZXgpCisJCXBnX2ZhdGFsKCJubyBlbnRyeSBleGlzdHMg b24gJWQgaW5kZXggaW50byBvbl9leGl0X25pY2VseSBzbG90cyIsIGkpOworCisJb25fZXhpdF9u aWNlbHlfbGlzdFtpXS5mdW5jdGlvbiA9IGZ1bmN0aW9uOworCW9uX2V4aXRfbmljZWx5X2xpc3Rb aV0uYXJnID0gYXJnOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF91dGlscy5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5oCmluZGV4IDM4 NTUxOTQ0NTEzLi41N2YzMTk3ZjEwMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF91dGlscy5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaApAQCAt MjgsNyArMjgsOCBAQCB0eXBlZGVmIHZvaWQgKCpvbl9leGl0X25pY2VseV9jYWxsYmFjaykgKGlu dCBjb2RlLCB2b2lkICphcmcpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2duYW1lOwogCiBleHRl cm4gdm9pZCBzZXRfZHVtcF9zZWN0aW9uKGNvbnN0IGNoYXIgKmFyZywgaW50ICpkdW1wU2VjdGlv bnMpOwotZXh0ZXJuIHZvaWQgb25fZXhpdF9uaWNlbHkob25fZXhpdF9uaWNlbHlfY2FsbGJhY2sg ZnVuY3Rpb24sIHZvaWQgKmFyZyk7CitleHRlcm4gaW50IG9uX2V4aXRfbmljZWx5KG9uX2V4aXRf bmljZWx5X2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICphcmcpOworZXh0ZXJuIHZvaWQgc2V0X29u X2V4aXRfbmljZWx5X2VudHJ5KG9uX2V4aXRfbmljZWx5X2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lk ICphcmcsIGludCBpZHgpOwogZXh0ZXJuIHZvaWQgZXhpdF9uaWNlbHkoaW50IGNvZGUpIHBnX2F0 dHJpYnV0ZV9ub3JldHVybigpOwogCiAvKiBJbiBwZ19kdW1wLCB3ZSBtb2RpZnkgcGdfZmF0YWwg dG8gY2FsbCBleGl0X25pY2VseSBpbnN0ZWFkIG9mIGV4aXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDZi YjU0YzFhMmI0Li41YjZkNDM2NGViMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0xMTg2LDcgKzExODYsNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiByaWdodCBub3cuCiAJICovCiAJaWYg KHBsYWluVGV4dCkKLQkJUmVzdG9yZUFyY2hpdmUoZm91dCk7CisJCVJlc3RvcmVBcmNoaXZlKGZv dXQsIGZhbHNlKTsKIAogCUNsb3NlQXJjaGl2ZShmb3V0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5k ZXggZTdlNDkyYWZhMjguLmVlN2M2MmRhMDlkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTE1LDYg KzE1LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlIDxzeXMvc3Rh dC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIApAQCAtNjQsOSAr NjUsMTAgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0 aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGRyb3BE QnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nv bm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hp dmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChjb25z dCBjaGFyICptc2cpOwotc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBj b25zdCBjaGFyICpjcmVhdGVfb3B0cyk7CitzdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFy ICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLAorCQljaGFyICpkYmZpbGUsIEFyY2hp dmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQ R2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVj dElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLApA QCAtNzUsNiArNzcsOCBAQCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMo UEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2lt cGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMo Y29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3RhdGlj IHZvaWQgY3JlYXRlX29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpOworc3RhdGljIEFy Y2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CiAKIHN0YXRp YyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBjb25zdCBjaGFyICpwcm9nbmFtZTsKQEAg LTEwNCw3ICsxMDgsNyBAQCBzdGF0aWMgaW50CW5vX3N1YnNjcmlwdGlvbnMgPSAwOwogc3RhdGlj IGludAlub190b2FzdF9jb21wcmVzc2lvbiA9IDA7CiBzdGF0aWMgaW50CW5vX3VubG9nZ2VkX3Rh YmxlX2RhdGEgPSAwOwogc3RhdGljIGludAlub19yb2xlX3Bhc3N3b3JkcyA9IDA7Ci1zdGF0aWMg aW50CXNlcnZlcl92ZXJzaW9uOworc3RhdGljIGludCBzZXJ2ZXJfdmVyc2lvbjsKIHN0YXRpYyBp bnQJbG9hZF92aWFfcGFydGl0aW9uX3Jvb3QgPSAwOwogc3RhdGljIGludAlvbl9jb25mbGljdF9k b19ub3RoaW5nID0gMDsKIHN0YXRpYyBpbnQJc3RhdGlzdGljc19vbmx5ID0gMDsKQEAgLTE0Myw2 ICsxNDcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBu b19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQs IE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsi Zm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhl IGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24g bGV0dGVyCkBAIC0xODgsNiArMTkzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25z dCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3Jt YXQgPSBhcmNoTnVsbDsKKwljb25zdCBjaGFyICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVl CXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNl OwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjM3LDcgKzI0NCw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6 bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hp bGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0 VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAo YykKIAkJewpAQCAtMjY1LDcgKzI3Miw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVu ZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2Fz ZSAnRic6CisJCQkJZm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwog CQkJY2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQx NCw2ICs0MjMsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2Vs eSgxKTsKIAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0 ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOworCisJLyoKKwkgKiBJZiBub24tcGxhaW4g Zm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIHdlIG11c3QgcHJvdmlkZSB0aGUKKwkgKiBmaWxlIG5h bWUgdG8gY3JlYXRlIG9uZSBtYWluIGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3Jt YXQgIT0gYXJjaE51bGwgJiYKKwkJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikg PT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbnMgLUYvLS1mb3JtYXQ9ZHxjfHQgcmVx dWlyZXMgb3B0aW9uIC1mLy0tZmlsZSB3aXRoIG5vbi1lbXB0eSBzdHJpbmciKTsKKwkJcGdfbG9n X2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHBy b2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyoKIAkgKiBJZiBwYXNzd29yZCB2 YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5nCiAJICog cGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8gaGF2 ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ2OCw2ICs0OTIsMzMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCWlmIChzdGF0aXN0aWNzX29ubHkpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBn ZHVtcG9wdHMsICIgLS1zdGF0aXN0aWNzLW9ubHkiKTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0 cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQs CisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeSBhbmQgZ2xvYmFsLmRhdCBmaWxlLgorCSAq LworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNoYXIJdG9jX3BhdGhb TUFYUEdQQVRIXTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBvciBhY2NlcHQgdGhlIGVt cHR5IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29yX29wZW5fZGlyKGZpbGVuYW1l KTsKKworCQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGZp bGVuYW1lKTsKKworCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdfQklOQVJZX1cpOworCQlpZiAo IU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwuZGF0IGZpbGU6ICVzIiwg c3RyZXJyb3IoZXJybm8pKTsKKwl9CisJZWxzZSBpZiAoZmlsZW5hbWUpCisJeworCQlPUEYgPSBm b3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9QRikKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJIGZpbGVuYW1lKTsK Kwl9CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisKIAkvKgogCSAqIElmIHRoZXJlIHdhcyBhIGRh dGFiYXNlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB1c2UgdGhhdCwKIAkgKiBvdGhl cndpc2UgdHJ5IHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgInBvc3RncmVzIiwgYW5kIGZhaWxpbmcg dGhhdApAQCAtNTA3LDE5ICs1NTgsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJ ZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywK IAkJCQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUg b3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYg KGZpbGVuYW1lKQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJ aWYgKCFPUEYpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wi OiAlbSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJ LyoKIAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC02 MTksNyArNjU3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogCWlmICgh Z2xvYmFsc19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQotCQlkdW1w RGF0YWJhc2VzKGNvbm4pOworCQlkdW1wRGF0YWJhc2VzKGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsK IAogCVBRZmluaXNoKGNvbm4pOwogCkBAIC02MzIsNyArNjcwLDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCQlmY2xvc2UoT1BGKTsKIAogCQkvKiBzeW5jIHRoZSByZXN1bHRpbmcg ZmlsZSwgZXJyb3JzIGFyZSBub3QgZmF0YWwgKi8KLQkJaWYgKGRvc3luYykKKwkJaWYgKGRvc3lu YyAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQkJKHZvaWQpIGZzeW5jX2ZuYW1l KGZpbGVuYW1lLCBmYWxzZSk7CiAJfQogCkBAIC02NDMsMTIgKzY4MSwxNCBAQCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCiBzdGF0aWMgdm9pZAogaGVscCh2b2lkKQogewotCXByaW50Zihf KCIlcyBleHRyYWN0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBpbnRvIGFuIFNRTCBz Y3JpcHQgZmlsZS5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgZXh0cmFjdHMgYSBQ b3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgYmFzZWQgb24gc3BlY2lmaWVkIGR1bXAgZm9ybWF0 LlxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygi ICAlcyBbT1BUSU9OXS4uLlxuIiksIHByb2duYW1lKTsKIAogCXByaW50ZihfKCJcbkdlbmVyYWwg b3B0aW9uczpcbiIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAg IG91dHB1dCBmaWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8 cCAgICAgICAgIG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIK KwkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQp KVxuIikpOwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9z ZSBtb2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBv dXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAg LS1sb2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBm b3IgYSB0YWJsZSBsb2NrXG4iKSk7CkBAIC0xNTUxLDEwICsxNTkxLDEzIEBAIGV4cGFuZF9kYm5h bWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMu CiAgKi8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRh YmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBH cmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOwor CWNoYXIJCWRiZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFICAgICAgICptYXBfZmlsZSA9IE5V TEw7CiAKIAkvKgogCSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBz aW5jZSB3ZSdkIGJlIHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNTY4LDcgKzE2MTEsNyBAQCBkdW1w RGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1v ZGUgd2l0aCAtLWNsZWFuLgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkg ICAiU0VMRUNUIGRhdG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJ CSAgICJGUk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFO RCBkYXRjb25ubGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3Rl bXBsYXRlMScpLCBkYXRuYW1lIik7CkBAIC0xNTc2LDkgKzE2MTksMzMgQEAgZHVtcERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4pCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihPUEYs ICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0b3J5L3Rh ci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeQor CSAqIHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZpbGUg c3ViZGlyZWN0b3J5IHdpbGwKKwkgKiBiZSBjcmVhdGVkIHVuZGVyIHRoZSBzdWJkaXJlY3Rvcnkg aW4gYXJjaGl2ZSBtb2RlIGFzIHBlciBzaW5nbGUgZGIgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJj aER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCW1hcF9maWxlX3BhdGhbTUFYUEdQ QVRIXTsKKworCQlzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIs IGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2Vz JyBuYW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCQlpZiAobWtkaXIoZGJfc3ViZGlyLCAw NzU1KSAhPSAwKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgc3ViZGlyZWN0b3J5IFwi JXNcIjogJW0iLCBkYl9zdWJkaXIpOworCisJCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBH UEFUSCwgIiVzL21hcC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgbWFwIGZpbGUg KHRvIHN0b3JlIGRib2lkIGFuZCBkYm5hbWUpICovCisJCW1hcF9maWxlID0gZm9wZW4obWFwX2Zp bGVfcGF0aCwgUEdfQklOQVJZX1cpOworCQlpZiAoIW1hcF9maWxlKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIG1hcCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCiAJZm9y IChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5hbWUg PSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CisJCWNoYXIJICAgKm9pZCA9IFBRZ2V0dmFsdWUocmVz LCBpLCAxKTsKIAkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CiAJCWludAkJCXJldDsKIApAQCAt MTU5Myw2ICsxNjYwLDE4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQkJY29udGlu dWU7CiAJCX0KIAorCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vbi1wbGFpbiBkdW1wIGZvcm1hdCwg dGhlbiBhcHBlbmQgZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUgbWFwLmRhdCBmaWxlLgor CQkgKi8KKwkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJCQlzbnByaW50 ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiIiwgZGJfc3ViZGlyLCBvaWQp OworCisJCQkvKiBQdXQgb25lIGxpbmUgZW50cnkgZm9yIGRib2lkIGFuZCBkYm5hbWUgaW4gbWFw IGZpbGUuICovCisJCQlmcHJpbnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9pZCwgcGdfc3RyZHVw KGRibmFtZSkpOworCQl9CisKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wi IiwgZGJuYW1lKTsKIAogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVt cFxuLS1cblxuIiwgZGJuYW1lKTsKQEAgLTE2MTEsOSArMTY5MCwxNyBAQCBkdW1wRGF0YWJhc2Vz KFBHY29ubiAqY29ubikKIAkJCQljcmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKIAkJ CWVsc2UKIAkJCXsKLQkJCQljcmVhdGVfb3B0cyA9ICIiOwogCQkJCS8qIFNpbmNlIHBnX2R1bXAg d29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KLQkJCQlmcHJpbnRmKE9Q RiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwkJCQl7CisJCQkJCWNyZWF0ZV9vcHRzID0gIiI7CisJCQkJCWZwcmludGYo T1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7 CisJCQkJCS8qIER1bXBpbmcgYWxsIGRhdGFiYXNlcyBzbyBhZGQgLS1jcmVhdGUgb3B0aW9uLiAq LworCQkJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7CisJCQkJfQogCQkJfQogCQl9CiAJCWVs c2UKQEAgLTE2MjIsMTkgKzE3MDksMzAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJ CWlmIChmaWxlbmFtZSkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChkYm5h bWUsIGNyZWF0ZV9vcHRzKTsKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMs IGRiZmlsZXBhdGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcGdfZmF0 YWwoInBnX2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGluZyIsIGRibmFtZSk7 CiAKIAkJaWYgKGZpbGVuYW1lKQogCQl7Ci0JCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklO QVJZX0EpOworCQkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhdOworCisJCQlpZiAoYXJjaER1bXBG b3JtYXQgIT0gYXJjaE51bGwpCisJCQkJc25wcmludGYodG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVz L2dsb2JhbC5kYXQiLCBmaWxlbmFtZSk7CisJCQllbHNlCisJCQkJc25wcmludGYodG9jX3BhdGgs IE1BWFBHUEFUSCwgIiVzIiwgZmlsZW5hbWUpOworCisJCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwg UEdfQklOQVJZX0EpOwogCQkJaWYgKCFPUEYpCiAJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZS1v cGVuIHRoZSBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCSBmaWxlbmFtZSk7CisJCQkJ CQkgdG9jX3BhdGgpOwogCQl9CiAJfQogCisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJj aER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFy KHJlcyk7CiB9CiAKQEAgLTE2NDQsNyArMTc0Miw4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpj b25uKQogICogUnVuIHBnX2R1bXAgb24gZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgog ICovCiBzdGF0aWMgaW50Ci1ydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFy ICpjcmVhdGVfb3B0cykKK3J1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIg KmNyZWF0ZV9vcHRzLCBjaGFyICpkYmZpbGUsCisJCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3Jt YXQpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRhIGNt ZDsKQEAgLTE2NTMsMTcgKzE3NTIsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwg Y29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVmKTsK IAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIl c1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRl X29wdHMpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1 bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMgaXMg bm9uLXBsYWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkg KiBmb3JtYXQgdG8gdGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAq LwotCWlmIChmaWxlbmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7 CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZm ZXIoJmNtZCwgIlwiJXNcIiAtZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUs IGNyZWF0ZV9vcHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkK KwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsK KwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0t Zm9ybWF0PXRhciAiKTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAi IC1GcCAiKTsKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBw Z19kdW1wX2JpbiwKKwkJCQkJCXBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKKworCQkv KgorCQkqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4t YXBwZW5kIHBnX2R1bXAKKwkJKiBmb3JtYXQuCisJCSovCisJCWlmIChmaWxlbmFtZSkKKwkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0 YWJhc2UgbmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24K QEAgLTE4MDgsMyArMTkyNiw5MSBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpm aWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3Rh dGUpOwogfQorCisvKgorICogY3JlYXRlX29yX29wZW5fZGlyCisgKgorICogVGhpcyB3aWxsIGNy ZWF0ZSBhIG5ldyBkaXJlY3Rvcnkgd2l0aCBnaXZlbiBuYW1lLiAgSWYgdGhlcmUgaXMgYWxyZWFk eSBzYW1lCisgKiBlbXB0eSBkaXJlY3RvcnkgZXhpc3QsIHRoZW4gdXNlIGl0LgorICovCitzdGF0 aWMgdm9pZAorY3JlYXRlX29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJc3Ry dWN0IHN0YXQJCXN0OworCWJvb2wJCQlpc19lbXB0eSA9IGZhbHNlOworCisJLyogd2UgYWNjZXB0 IGFuIGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9yeSAqLworCWlmIChzdGF0KGRpcm5hbWUsICZzdCkg PT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQorCXsKKwkJRElSCQkqZGlyID0gb3BlbmRpcihk aXJuYW1lKTsKKworCQlpZiAoZGlyKQorCQl7CisJCQlzdHJ1Y3QgZGlyZW50CSpkOworCisJCQlp c19lbXB0eSA9IHRydWU7CisKKwkJCXdoaWxlIChlcnJubyA9IDAsIChkID0gcmVhZGRpcihkaXIp KSkKKwkJCXsKKwkJCQlpZiAoc3RyY21wKGQtPmRfbmFtZSwgIi4iKSAhPSAwICYmIHN0cmNtcChk LT5kX25hbWUsICIuLiIpICE9IDApCisJCQkJeworCQkJCQlpc19lbXB0eSA9IGZhbHNlOworCQkJ CQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChlcnJubykKKwkJCQlwZ19mYXRhbCgiY291 bGQgbm90IHJlYWQgZGlyZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJZGlybmFtZSk7CisKKwkJ CWlmIChjbG9zZWRpcihkaXIpKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGlyZWN0 b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJZGlybmFtZSk7CisJCX0KKworCQlpZighaXNfZW1wdHkp CisJCXsKKwkJCXBnX2xvZ19lcnJvcigiZGlyZWN0b3J5IFwiJXNcIiBleGlzdHMgYnV0IGlzIG5v dCBlbXB0eSIsIGRpcm5hbWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIklmIHlvdSB3YW50IHRv IGR1bXAgZGF0YSBvbiB0aGlzIGRpcmVjdG9yeSwgZWl0aGVyIHJlbW92ZSBvciBlbXB0eSAiCisJ CQkJCQkJICAidGhpcyBkaXJlY3RvcnkgXCIlc1wiIG9yIHJ1biAlcyAiCisJCQkJCQkJICAid2l0 aCBhbiBhcmd1bWVudCBvdGhlciB0aGFuIFwiJXNcIi4iLAorCQkJCQkJCSAgZGlybmFtZSwgcHJv Z25hbWUsIGRpcm5hbWUpOworCQkJZXhpdF9uaWNlbHkoMSk7CisJCX0KKwl9CisJZWxzZSBpZiAo bWtkaXIoZGlybmFtZSwgMDcwMCkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBk aXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRpcm5hbWUpOworfQorCisvKgorICogcGFyc2VEdW1wRm9y bWF0CisgKgorICogVGhpcyB3aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLworc3RhdGlj IEFyY2hpdmVGb3JtYXQKK3BhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJ QXJjaGl2ZUZvcm1hdAlhcmNoRHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgImMiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9 IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikgPT0gMCkK KwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2Vj bXAoZm9ybWF0LCAiZGlyZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGly ZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQs ICJwbGFpbiIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNo VGFyOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJj aER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBh cmNoaXZlIGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIs IG9yIFwidFwiIiwKKwkJCQlmb3JtYXQpOworCisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19yZXN0b3JlLmMKaW5kZXggMTNlNGRjNTA3ZTAuLjliODAyZTdhNmJkIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19y ZXN0b3JlLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0 b3JlIGlzIGFuIHV0aWxpdHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9u cwotICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUg YXJjaGl2ZXIKKyAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdf ZHVtcGFsbCB1c2luZyB0aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0 b3JlIHdpbGwgcmVhZCB0aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwzMCArNDEsNzcgQEAK ICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRl IDxzeXMvc3RhdC5oPgogI2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5o PgogI2VuZGlmCiAKKyNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbXBy ZXNzX2lvLmgiCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbm5lY3Rk Yi5oIgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0 aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9w dF9sb25nLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJj aGl2ZXIuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAordHlwZWRlZiBzdHJ1Y3Qg U2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAoreworCXN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExp c3RDZWxsCSpuZXh0OworCU9pZAkJCQkJCQkJCWRiX29pZDsKKwljb25zdCBjaGFyCQkJCQkJCSpk Yl9uYW1lOworfSBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsOworCit0eXBlZGVmIHN0cnVjdCBT aW1wbGVEYXRhYmFzZU9pZExpc3QKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpoZWFk OworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKnRhaWw7Cit9IFNpbXBsZURhdGFiYXNlT2lk TGlzdDsKKwogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGlj IHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVP cHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29sIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0 IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCByZXN0b3JlT25l RGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMs CisJCQkJCQkJICBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSk7Citz dGF0aWMgaW50IFJlYWRPbmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklMRSAqcGZpbGUp Oworc3RhdGljIGludCByZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hh ciAqZHVtcGRpcnBhdGgsCisJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3Bh dHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMpOworc3RhdGljIGlu dCBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpk dW1wZGlycGF0aCwKKwkJCQkJCQkJCQljb25zdCBjaGFyICpvdXRmaWxlKTsKK3N0YXRpYyB2b2lk IGNvcHlfb3JfcHJpbnRfZ2xvYmFsX2ZpbGUoY29uc3QgY2hhciAqb3V0ZmlsZSwgRklMRSAqcGZp bGUpOworc3RhdGljIGludCBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25u LAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJU2ltcGxlU3Ry aW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQgZ2V0X2RibmFtZV9vaWRf bGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAgU2lt cGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworc3RhdGljIHZvaWQgc2ltcGxl X2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9v aWQsCisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmRibmFtZSk7CitzdGF0aWMgdm9pZCBzaW1wbGVf c3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCk7CitzdGF0aWMg dm9pZCBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0 ICpsaXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2ltcGxlRGF0 YWJhc2VPaWRMaXN0ICpsaXN0LAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxs ICpjZWxsLAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpwcmV2KTsKK3N0 YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0 ICpsaXN0LAorCQlPaWQgZGJfb2lkLCBjb25zdCBjaGFyICpkYm5hbWUpOworc3RhdGljIHNpemVf dCBxdW90ZV9saXRlcmFsX2ludGVybmFsKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXpl X3QgbGVuKTsKK3N0YXRpYyBjaGFyICpxdW90ZV9saXRlcmFsX2NzdHIoY29uc3QgY2hhciAqcmF3 c3RyKTsKK3N0YXRpYyBpbnQgb25fZXhpdF9pbmRleCA9IDA7CiAKIGludAogbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiB7CiAJUmVzdG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50CQkJYzsKLQlp bnQJCQlleGl0X2NvZGU7CiAJaW50CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2ZSAgICAqQUg7 CiAJY2hhcgkgICAqaW5wdXRGaWxlU3BlYzsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAli b29sCQlzY2hlbWFfb25seSA9IGZhbHNlOworCWludAkJCW5fZXJyb3JzID0gMDsKKwlib29sCQln bG9iYWxzX29ubHkgPSBmYWxzZTsKKwlTaW1wbGVTdHJpbmdMaXN0CWRiX2V4Y2x1ZGVfcGF0dGVy bnMgPSB7TlVMTCwgTlVMTH07CiAJc3RhdGljIGludAlkaXNhYmxlX3RyaWdnZXJzID0gMDsKIAlz dGF0aWMgaW50CWVuYWJsZV9yb3dfc2VjdXJpdHkgPSAwOwogCXN0YXRpYyBpbnQJaWZfZXhpc3Rz ID0gMDsKQEAgLTg2LDYgKzEzMyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7 ImNsZWFuIiwgMCwgTlVMTCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAwLCBOVUxMLCAnQyd9LAogCQl7 ImRhdGEtb25seSIsIDAsIE5VTEwsICdhJ30sCisJCXsiZ2xvYmFscy1vbmx5IiwgMCwgTlVMTCwg J2cnfSwKIAkJeyJkYm5hbWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7ImV4aXQtb24tZXJyb3IiLCAw LCBOVUxMLCAnZSd9LAogCQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwgTlVMTCwgJ04nfSwKQEAgLTEz Niw2ICsxODQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJuby1zdGF0aXN0 aWNzIiwgbm9fYXJndW1lbnQsICZub19zdGF0aXN0aWNzLCAxfSwKIAkJeyJzdGF0aXN0aWNzLW9u bHkiLCBub19hcmd1bWVudCwgJnN0YXRpc3RpY3Nfb25seSwgMX0sCiAJCXsiZmlsdGVyIiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsIDR9LAorCQl7ImV4Y2x1ZGUtZGF0YWJhc2UiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgNn0sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKQEAgLTE2 NCw3ICsyMTMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAotCXdo aWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6aDpJOmo6bEw6bjpO Ok9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBh cmd2LCAiYWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJ CQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTE5MSwxMSAr MjQwLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChzdHJsZW4ob3B0 YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJ CQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xvYmFsLmRhdCBm aWxlIGZyb20gZGlyZWN0b3J5ICovCisJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKKwkJCQlicmVh azsKIAkJCWNhc2UgJ2gnOgogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRz LT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwotCiAJCQlj YXNlICdqJzoJCQkvKiBudW1iZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJCQkJaWYgKCFvcHRpb25f cGFyc2VfaW50KG9wdGFyZywgIi1qLy0tam9icyIsIDEsCiAJCQkJCQkJCQkgIFBHX01BWF9KT0JT LApAQCAtMzEwLDYgKzM2MiwxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJ ZXhpdCgxKTsKIAkJCQlvcHRzLT5leGl0X29uX2Vycm9yID0gdHJ1ZTsKIAkJCQlicmVhazsKKwkJ CWNhc2UgNjoKKwkJCQkvKiBsaXN0IG9mIGRhdGFiYXNlcyBwYXR0ZXJucyB0aG9zZSBuZWVkcyB0 byBza2lwIHdoaWxlIHJlc3RvcmluZyAqLworCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQo JmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6 CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCkBAIC0z MzcsNiArMzkzLDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+ Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVuYW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQog CQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVj aWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9i YWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2Ug Y2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seSIpOworCQlwZ19s b2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwg cHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1v c3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICovCiAJaWYgKG9wdHMt PmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQxNyw2ICs0ODAsMTA4IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9ybWF0TmFtZSk7CiAJfQogCisJLyoKKwkgKiBJ ZiB0b2MuZGF0IGZpbGUgZG9lcyBub3QgcHJlc2VudCBpbiBjdXJyZW50IHBhdGgsIHRoZW4gY2hl Y2sgZm9yCisJICogZ2xvYmFsLmRhdC4gIElmIGdsb2JhbC5kYXQgZmlsZSBpcyBwcmVzZW50LCB0 aGVuIHJlc3RvcmUgYWxsIHRoZQorCSAqIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQoaWYgZXhpc3Qp IGZpbGUgbGlzdCBhbmQgc2tpcCByZXN0b3JpbmcgZm9yCisJICogLS1leGNsdWRlLWRhdGFiYXNl IHBhdHRlcm5zLgorCSAqLworCWlmIChpbnB1dEZpbGVTcGVjICE9IE5VTEwgJiYgIUlzRmlsZUV4 aXN0c0luRGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZGF0IikgJiYKKwkJCUlzRmlsZUV4 aXN0c0luRGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJnbG9iYWwuZGF0IikpCisJeworCQlQR2Nv bm4gICpjb25uID0gTlVMTDsgLyogQ29ubmVjdGlvbiB0byByZXN0b3JlIGdsb2JhbCBzcWwgY29t bWFuZHMuICovCisKKwkJLyoKKwkJICogVXNlciBpcyBzdWdnZXN0ZWQgdG8gdXNlIHNpbmdsZSBk YXRhYmFzZSBkdW1wIGZvciAtLWxpc3Qgb3B0aW9uLgorCQkgKi8KKwkJaWYgKG9wdHMtPnRvY1N1 bW1hcnkpCisJCQlwZ19mYXRhbCgib3B0aW9uIC1sLy0tbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVu IHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMgYnkgYXJjaGl2ZSBvZiBwZ19kdW1wYWxsIik7 CisKKwkJLyoKKwkJICogVG8gcmVzdG9yZSBtdWx0aXBsZSBkYXRhYmFzZXMsIC1DIChjcmVhdGUg ZGF0YWJhc2UpIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkLgorCQkgKiBFdmVuIHRoZXJlIGlz IHNpbmdsZSBkYXRhYmFzZSBpbiBkdW1wLCByZXBvcnQgZXJyb3IgYmVjYXVzZSBpdCBtaWdodCBi ZSBwb3NzaWJsZQorCQkgKiB0aGF0IGRhdGFiYXNlIGhhc24ndCBjcmVhdGVkIHNvIGJldHRlciB3 ZSByZXBvcnQgZXJyb3IuCisJCSAqLworCQlpZiAoIWdsb2JhbHNfb25seSAmJiBvcHRzLT5jcmVh dGVEQiAhPSAxKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIi1DLy0tY3JlYXRlIG9wdGlvbiBzaG91 bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcyBieSBhcmNo aXZlIG9mIHBnX2R1bXBhbGwiKTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhl bHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCQlwZ19sb2dfZXJyb3Jf aGludCgiSWYgZGIgaXMgYWxyZWFkeSBjcmVhdGVkIGFuZCBkdW1wIGhhcyBzaW5nbGUgZGIgZHVt cCwgdGhlbiB1c2UgcGFydGljdWxhciBkdW1wIGZpbGUuIik7CisJCQlleGl0X25pY2VseSgxKTsK KwkJfQorCisJCS8qCisJCSAqIENvbm5lY3QgdG8gZGF0YWJhc2UgdG8gZXhlY3V0ZSBnbG9iYWwg c3FsIGNvbW1hbmRzIGZyb20gZ2xvYmFsLmRhdCBmaWxlLgorCQkgKi8KKwkJaWYgKG9wdHMtPmNw YXJhbXMuZGJuYW1lKQorCQl7CisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKG9wdHMtPmNwYXJh bXMuZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFt cy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQlmYWxz ZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCQlpZiAoIWNvbm4pCisJ CQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9wdHMt PmNwYXJhbXMuZGJuYW1lKTsKKwkJfQorCisJCS8qIElmIGdsb2JhbHMtb25seSwgdGhlbiByZXR1 cm4gZnJvbSBoZXJlLiAqLworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQl7CisJCQkvKiBPcGVuIGds b2JhbC5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1h bmRzLiAqLworCQkJbl9lcnJvcnMgPSBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwg aW5wdXRGaWxlU3BlYywKKwkJCQkJb3B0cy0+ZmlsZW5hbWUpOworCisJCQlpZiAoY29ubikKKwkJ CQlQUWZpbmlzaChjb25uKTsKKworCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlcyByZXN0b3Jpbmcg aXMgc2tpcHBlZCBhcyAtZy8tLWdsb2JhbHMtb25seSBvcHRpb24gaXMgc3BlY2lmaWVkIik7CisJ CX0KKwkJZWxzZQorCQl7CisJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9t IG1hcC5kYXQgZmlsZS4gKi8KKwkJCW5fZXJyb3JzID0gcmVzdG9yZUFsbERhdGFiYXNlcyhjb25u LCBpbnB1dEZpbGVTcGVjLCBkYl9leGNsdWRlX3BhdHRlcm5zLAorCQkJCQlvcHRzLCBudW1Xb3Jr ZXJzKTsKKwkJfQorCisJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQlzaW1wbGVfc3Ry aW5nX2Z1bGxfbGlzdF9kZWxldGUoJmRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCX0KKwllbHNlIC8q IHByb2Nlc3MgaWYgZ2xvYmFsLmRhdCBmaWxlIGRvZXMgbm90IGV4aXN0LiAqLworCXsKKwkJaWYg KGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCQkJcGdfZmF0YWwoIm9wdGlvbiAt LWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBtdWx0aXBs ZSBkYXRhYmFzZXMgYnkgYXJjaGl2ZSBvZiBwZ19kdW1wYWxsIik7CisKKwkJaWYgKGdsb2JhbHNf b25seSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLWcvLS1nbG9iYWxzLW9ubHkgY2FuIGJlIHVzZWQg b25seSB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMgYnkgYXJjaGl2ZSBvZiBwZ19k dW1wYWxsIik7CisKKwkJbl9lcnJvcnMgPSByZXN0b3JlT25lRGF0YWJhc2UoaW5wdXRGaWxlU3Bl Yywgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIDApOworCX0KKworCW9uX2V4aXRfaW5kZXggPSAw OyAvKiBSZXNldCBpbmRleC4gKi8KKworCS8qIERvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25v cmVkIGVycm9ycyBkdXJpbmcgcmVzdG9yZS4gKi8KKwlpZiAobl9lcnJvcnMpCisJeworCQlwZ19s b2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisJ CXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcmVzdG9yZU9uZURhdGFi YXNlCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVzaW5nIHRvYy5kYXQg ZmlsZS4KKyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJl c3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVPbmVEYXRhYmFzZShjb25zdCBjaGFyICpp bnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkgICBpbnQgbnVtV29ya2Vy cywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSkKK3sKKwlBcmNoaXZlCQkqQUg7CisJaW50CQkJ bl9lcnJvcnM7CisKIAlBSCA9IE9wZW5BcmNoaXZlKGlucHV0RmlsZVNwZWMsIG9wdHMtPmZvcm1h dCk7CiAKIAlTZXRBcmNoaXZlT3B0aW9ucyhBSCwgTlVMTCwgb3B0cyk7CkBAIC00MjUsOCArNTkw LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIFdlIGRvbid0IGhhdmUgYSBj b25uZWN0aW9uIHlldCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlci4gVGhlIGNvbm5lY3Rpb24KIAkg KiBpcyBpbml0aWFsaXplZCB0byBOVUxMIGFuZCBpZiB3ZSB0ZXJtaW5hdGUgdGhyb3VnaCBleGl0 X25pY2VseSgpIHdoaWxlCiAJICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlv biB3aWxsIGp1c3QgYmUgYSBuby1vcC4KKwkgKiBJZiB3ZSBhcmUgcmVzdG9yaW5nIG11bHRpcGxl IGRhdGFiYXNlcywgdGhlbiBzYXZlIGluZGV4IG9mIGV4aXRfbmljZWx5CisJICogc28gdGhhdCB3 ZSBjYW4gdXNlIHNhbWUgc2xvdCBmb3IgYWxsIHRoZSBkYXRhYmFzZXMgYXMgd2UgYWxyZWFkeSBj bG9zZWQKKwkgKiB0aGUgcHJldmlvdXMgYXJjaGl2ZSBieSBDbG9zZUFyY2hpdmUuCiAJICovCi0J b25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwlpZiAoIWFwcGVuZF9kYXRhIHx8IG51bSA9PSAw KQorCQlvbl9leGl0X2luZGV4ID0gb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJ CXJlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFILCBvbl9leGl0X2luZGV4KTsKIAogCS8q IExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9 IG9wdHMtPnZlcmJvc2U7CkBAIC00NDYsMjUgKzYxNywyMiBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAllbHNlCiAJewogCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsK LQkJUmVzdG9yZUFyY2hpdmUoQUgpOworCQlSZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEp OwogCX0KIAotCS8qIGRvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyAqLwot CWlmIChBSC0+bl9lcnJvcnMpCi0JCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBy ZXN0b3JlOiAlZCIsIEFILT5uX2Vycm9ycyk7CisJbl9lcnJvcnMgPSBBSC0+bl9lcnJvcnM7CiAK IAkvKiBBSCBtYXkgYmUgZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLwotCWV4aXRfY29kZSA9IEFI LT5uX2Vycm9ycyA/IDEgOiAwOwotCiAJQ2xvc2VBcmNoaXZlKEFIKTsKIAotCXJldHVybiBleGl0 X2NvZGU7CisJcmV0dXJuIG5fZXJyb3JzOwogfQogCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29uc3Qg Y2hhciAqcHJvZ25hbWUpCiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdyZVNRTCBk YXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuXG4iKSwgcHJvZ25h bWUpOworCXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZnJvbSBh biBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cbiIKKwkJCQkiSWYgYXJjaGl2ZSBpcyBjcmVh dGVkIGJ5IHBnX2R1bXBhbGwsIHRoZW4gcmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJhc2VzIGFsc28u IFxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygi ICAlcyBbT1BUSU9OXS4uLiBbRklMRV1cbiIpLCBwcm9nbmFtZSk7CiAKQEAgLTQ4Miw2ICs2NTAs NyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVh biAgICAgICAgICAgICAgICAgIGNsZWFuIChkcm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSBy ZWNyZWF0aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAg ICBjcmVhdGUgdGhlIHRhcmdldCBkYXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4 aXQtb24tZXJyb3IgICAgICAgICAgZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51 ZVxuIikpOworCXByaW50ZihfKCIgIC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9y ZSBvbmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAt SSwgLS1pbmRleD1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlw cmludGYoXygiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFy YWxsZWwgam9icyB0byByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9 RklMRU5BTUUgICAgICB1c2UgdGFibGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4i CkBAIC00OTQsNiArNjYzLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRm KF8oIiAgLVMsIC0tc3VwZXJ1c2VyPU5BTUUgICAgICAgICBzdXBlcnVzZXIgdXNlciBuYW1lIHRv IHVzZSBmb3IgZGlzYWJsaW5nIHRyaWdnZXJzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXQsIC0tdGFi bGU9TkFNRSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIHJlbGF0aW9uICh0YWJsZSwgdmlldywg ZXRjLilcbiIpKTsKIAlwcmludGYoXygiICAtVCwgLS10cmlnZ2VyPU5BTUUgICAgICAgICAgIHJl c3RvcmUgbmFtZWQgdHJpZ2dlclxuIikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRhYmFz ZT1QQVRURVJOICAgZXhjbHVkZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzIHdpdGggcGF0 dGVyblxuIikpOwogCXByaW50ZihfKCIgIC14LCAtLW5vLXByaXZpbGVnZXMgICAgICAgICAgc2tp cCByZXN0b3JhdGlvbiBvZiBhY2Nlc3MgcHJpdmlsZWdlcyAoZ3JhbnQvcmV2b2tlKVxuIikpOwog CXByaW50ZihfKCIgIC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNp bmdsZSB0cmFuc2FjdGlvblxuIikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAg ICAgICAgICAgZGlzYWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsK QEAgLTUzMCw4ICs3MDAsOCBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYo XygiICAtLXJvbGU9Uk9MRU5BTUUgICAgICAgICAgZG8gU0VUIFJPTEUgYmVmb3JlIHJlc3RvcmVc biIpKTsKIAogCXByaW50ZihfKCJcbiIKLQkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAs IC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29tYmluZWQgYW5kIHNwZWNpZmllZFxuIgot CQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJ CSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgLS1zZWN0aW9uLCBhbmQgLS1l eGNsdWRlLWRhdGFiYXNlIGNhbiBiZSBjb21iaW5lZFxuIgorCQkJICJhbmQgc3BlY2lmaWVkIG11 bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwogCXByaW50Zihf KCJcbklmIG5vIGlucHV0IGZpbGUgbmFtZSBpcyBzdXBwbGllZCwgdGhlbiBzdGFuZGFyZCBpbnB1 dCBpcyB1c2VkLlxuXG4iKSk7CiAJcHJpbnRmKF8oIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwg UEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5cbiIpLCBQ QUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKQEAgLTYzNiwzICs4MDYsNjQ4IEBAIHJlYWRfcmVz dG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykK IAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogSXNGaWxlRXhpc3RzSW5EaXJl Y3RvcnkKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZmlsZSBleGlzdCBpbiBjdXJyZW50IGRpcmVj dG9yeS4KKyAqLworc3RhdGljIGJvb2wKK0lzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNo YXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQJCQlzdDsKKwlj aGFyCQkJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAi JXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBnX2ZhdGFsKCJkaXJlY3Rv cnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJldHVybiAoc3RhdChidWYsICZz dCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKworLyoKKyAqIFJlYWRPbmVTdGF0 ZW1lbnQKKyAqCisgKiBUaGlzIHdpbGwgc3RhcnQgcmVhZGluZyBmcm9tIHBhc3NlZCBmaWxlIHBv aW50ZXIgdXNpbmcgZmdldGMgYW5kIHJlYWQgdGlsbAorICogc2VtaWNvbG9uKHNxbCBzdGF0ZW1l bnQgdGVybWluYXRvciBmb3IgZ2xvYmFsLmRhdCBmaWxlKQorICoKKyAqIEVPRiBpcyByZXR1cm5l ZCBpZiBlbmQtb2YtZmlsZSBpbnB1dCBpcyBzZWVuOyB0aW1lIHRvIHNodXQgZG93bi4KKyAqLwor CitzdGF0aWMgaW50CitSZWFkT25lU3RhdGVtZW50KFN0cmluZ0luZm8gaW5CdWYsIEZJTEUgKnBm aWxlKQoreworCWludAkJCWM7IC8qIGNoYXJhY3RlciByZWFkIGZyb20gZ2V0YygpICovCisJaW50 CQkJbTsKKworCVN0cmluZ0luZm9EYXRhCXE7CisJaW5pdFN0cmluZ0luZm8oJnEpOworCisJcmVz ZXRTdHJpbmdJbmZvKGluQnVmKTsKKworCS8qCisJICogUmVhZCBjaGFyYWN0ZXJzIHVudGlsIEVP RiBvciB0aGUgYXBwcm9wcmlhdGUgZGVsaW1pdGVyIGlzIHNlZW4uCisJICovCisJd2hpbGUgKChj ID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJeworCQlpZiAoYyAhPSAnXCcnICYmIGMgIT0gJyIn ICYmIGMgIT0gJ1xuJyAmJiBjICE9ICc7JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo aW5CdWYsIChjaGFyKSBjKTsKKwkJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQor CQkJeworCQkJCWlmIChjICE9ICdcJycgJiYgYyAhPSAnIicgJiYgYyAhPSAnOycgJiYgYyAhPSAn XG4nKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpIGMpOworCQkJCWVs c2UKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoYyA9PSAnXCcnIHx8IGMgPT0gJyIn KQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmcSwgKGNoYXIpIGMpOworCQkJbSA9IGM7 CisKKwkJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQkJeworCQkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZxLCAoY2hhcikgYyk7CisKKwkJCQlpZihjID09IG0pCisJCQkJewor CQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGluQnVmLCBxLmRhdGEpOworCQkJCQlyZXNldFN0 cmluZ0luZm8oJnEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoYyA9 PSAnOycpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgJzsnKTsK KwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGluQnVmLCAoY2hhcikgJ1xuJyk7CisJfQorCisJLyogTm8gaW5wdXQgYmVmb3JlIEVPRiBz aWduYWwgbWVhbnMgdGltZSB0byBxdWl0LiAqLworCWlmIChjID09IEVPRiAmJiBpbkJ1Zi0+bGVu ID09IDApCisJCXJldHVybiBFT0Y7CisKKwkvKiBBZGQgJ1wwJyB0byBtYWtlIGl0IGxvb2sgdGhl IHNhbWUgYXMgbWVzc2FnZSBjYXNlLiAqLworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAo Y2hhcikgJ1wwJyk7CisKKwlyZXR1cm4gJ1EnOworfQorCisvKgorICogZ2V0X2RibmFtZXNfbGlz dF90b19yZXN0b3JlCisgKgorICogVGhpcyB3aWxsIHJlbW92ZSBlbnRyaWVzIGZyb20gZGJuYW1l X29pZF9saXN0IHRoYXQgcGF0dGVybiBtYXRjaGluZyBhbnkKKyAqIGluIHRoZSBkYl9leGNsdWRl X3BhdHRlcm5zIGxpc3QuICBkYm5hbWVfb2lkX2xpc3QgbWF5YmUgaW5wbGFjZSBtb2RpZmllZC4K KyAqCisgKiByZXR1cm5zLCBudW1iZXIgb2YgZGF0YWJhc2Ugd2lsbCBiZSByZXN0b3JlZC4KKyAq CisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNv bm4sCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQlTaW1wbGVT dHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbAkqZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwlTaW1wbGVEYXRhYmFz ZU9pZExpc3RDZWxsCSpkYm9pZHByZWNlbGwgPSBOVUxMOworCWludAkJCQkJCQljb3VudF9kYiA9 IDA7CisJUFFFeHBCdWZmZXIgcXVlcnk7CisJUEdyZXN1bHQgICAqcmVzOworCisJLyogUmV0dXJu IDAgaWYgdGhlcmUgaXMgbm8gZGF0YWJhc2UgdG8gcmVzdG9yZS4gKi8KKwlpZiAoZGJvaWRfY2Vs bCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsK KworCWlmICghY29ubikKKwkJcGdfbG9nX2luZm8oImNvbnNpZGVyaW5nIFBBVFRFUk4gYXMgTkFN RSBmb3IgLS1leGNsdWRlLWRhdGFiYXNlIG9wdGlvbiBhcyBubyBkYiBjb25uZWN0aW9uIHdoaWxl IGRvaW5nIHBnX3Jlc3RvcmUuIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5IG9uZSBhbGwg ZGJuYW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCisJICogcmVt b3ZlIGRibmFtZSBmcm9tIGxpc3QuCisJICovCisJd2hpbGUgKGRib2lkX2NlbGwgIT0gTlVMTCkK Kwl7CisJCWJvb2wJCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKwkJU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbAkqbmV4dCA9IGRib2lkX2NlbGwtPm5leHQ7CisKKwkJZm9yIChTaW1wbGVT dHJpbmdMaXN0Q2VsbCAqY2VsbGRiID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBjZWxsZGI7 IGNlbGxkYiA9IGNlbGxkYi0+bmV4dCkKKwkJeworCQkJLyoKKwkJCSAqIHRoZSBjb25zdHJ1Y3Qg cGF0dGVybiBtYXRjaGluZyBxdWVyeToKKwkJCSAqIFNFTEVDVCAxIFdIRVJFIFhYWCBPUEVSQVRP UihwZ19jYXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09MTEFURQorCQkJICogcGdfY2F0YWxvZy5k ZWZhdWx0CisJCQkgKgorCQkJICogWFhYIHJlcHJlc2VudHMgdGhlIHN0cmluZyBsaXRlcmFsIGRh dGFiYXNlIG5hbWUgZGVyaXZlZCBmcm9tIHRoZQorCQkJICogZGJuYW1lX29pZF9saXN0LCB3aGlj aCBpcyBpbml0aWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIG1hcC5kYXQKKwkJCSAqIGZpbGUgbG9j YXRlZCBpbiB0aGUgYmFja3VwIGRpcmVjdG9yeS4gIHRoYXQncyB3aHkgd2UgbmVlZAorCQkJICog cXVvdGVfbGl0ZXJhbF9jc3RyLgorCQkJICoKKwkJCSAqIElmIG5vIGRiIGNvbm5lY3Rpb24sIHRo ZW4gY29uc2lkZXIgUEFUVEVSTiBhcyBOQU1FLgorCQkJICovCisJCQlpZiAocGdfc3RyY2FzZWNt cChkYm9pZF9jZWxsLT5kYl9uYW1lLCBjZWxsZGItPnZhbCkgPT0gMCkKKwkJCSAgIHNraXBfZGJf cmVzdG9yZSA9IHRydWU7CisJCQllbHNlIGlmIChjb25uKQorCQkJeworCQkJCWludAlkb3RjbnQ7 CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOworCQkJCXBy b2Nlc3NTUUxOYW1lUGF0dGVybihjb25uLCBxdWVyeSwgY2VsbGRiLT52YWwsIGZhbHNlLAorCQkJ CQkJCQkJICBmYWxzZSwgTlVMTCwgcXVvdGVfbGl0ZXJhbF9jc3RyKGRib2lkX2NlbGwtPmRiX25h bWUpLAorCQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKKworCQkJCWlmIChk b3RjbnQgPiAwKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFsaWZpZWQg bmFtZSAodG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJCQkgIGNlbGxkYi0+dmFs KTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmljZWx5KDEpOworCQkJCX0KKwor CQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisKKwkJCQlpZiAoKFBR cmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfVFVQTEVTX09LKSAmJiBQUW50dXBsZXMocmVzKSkK KwkJCQl7CisJCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJCXBnX2xvZ19pbmZvKCJk YXRhYmFzZSBcIiVzXCIgaXMgbWF0Y2hpbmcgd2l0aCBleGNsdWRlIHBhdHRlcm46IFwiJXNcIiIs IGRib2lkX2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKTsKKwkJCQl9CisKKwkJCQlQUWNsZWFy KHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlmIChza2lw X2RiX3Jlc3RvcmUpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbmNyZW1lbnQgY291bnQgaWYg ZGF0YWJhc2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJCWlmIChza2lwX2RiX3Jlc3RvcmUp CisJCXsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRf Y2VsbC0+ZGJfbmFtZSk7CisJCQlzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKGRibmFtZV9vaWRf bGlzdCwgZGJvaWRfY2VsbCwgZGJvaWRwcmVjZWxsKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNv dW50X2RiKys7CisJCQlkYm9pZHByZWNlbGwgPSBkYm9pZF9jZWxsOworCQl9CisKKwkJLyogUHJv Y2VzcyBuZXh0IGRibmFtZSBmcm9tIGRibmFtZSBsaXN0LiAqLworCQlkYm9pZF9jZWxsID0gbmV4 dDsKKwl9CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lX29pZF9s aXN0X2Zyb21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVhZCBsaW5lIGJ5 IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5hbWVzIGFuZCBj b3JyZXNwb25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1cm5zLCB0b3RhbCBudW1iZXIgb2YgZGF0 YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlLgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1l X29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIFNpbXBsZURhdGFi YXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0KQoreworCUZJTEUgICAgKnBmaWxlOworCWNoYXIg ICAgbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIgICAgbGluZVtNQVhQR1BBVEhdOwor CWludCAgICAgY291bnQgPSAwOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBvbmx5IGdsb2JhbC5k YXQgZmlsZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMgdGhlcmUKKwkgKiBpcyBu byBkYXRhYmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghSXNGaWxlRXhpc3RzSW5EaXJlY3Rv cnkocGdfc3RyZHVwKGR1bXBkaXJwYXRoKSwgIm1hcC5kYXQiKSkKKwl7CisJCXBnX2xvZ19pbmZv KCJkYXRhYmFzZXMgcmVzdG9yaW5nIGlzIHNraXBwZWQgYXMgbWFwLmRhdCBmaWxlIGlzIG5vdCBw cmVzZW50IGluIFwiJXNcIiIsIGR1bXBkaXJwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25w cmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGR1bXBkaXJwYXRo KTsKKworCS8qIE9wZW4gbWFwLmRhdCBmaWxlLiAqLworCXBmaWxlID0gZm9wZW4obWFwX2ZpbGVf cGF0aCwgUEdfQklOQVJZX1IpOworCisJaWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBtYXAuZGF0IGZpbGU6IFwiJXNcIiIsIG1hcF9maWxlX3BhdGgpOworCisJ LyogQXBwZW5kIGFsbCB0aGUgZGJuYW1lIGFuZCBkYl9vaWQgdG8gdGhlIGxpc3QuICovCisJd2hp bGUoKGZnZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAhPSBOVUxMKQorCXsKKwkJT2lkICAg ICAgICAgZGJfb2lkID0gSW52YWxpZE9pZDsKKwkJY2hhcgkJZGJfb2lkX3N0cltNQVhQR1BBVEgg KyAxXSA9IHsnXDAnfTsKKwkJY2hhciAgICAgICAgZGJuYW1lW01BWFBHUEFUSCArIDFdID0geydc MCd9OworCisJCS8qIEV4dHJhY3QgZGJvaWQuICovCisJCXNzY2FuZihsaW5lLCAiJXUiICwgJmRi X29pZCk7CisJCXNzY2FuZihsaW5lLCAiJXMiICwgZGJfb2lkX3N0cik7CisKKwkJLyogTm93IGNv cHkgZGJuYW1lLiAqLworCQlzdHJjcHkoZGJuYW1lLCBsaW5lICsgc3RybGVuKGRiX29pZF9zdHIp ICsgMSk7CisKKwkJLyogUmVtb3ZlIFxuIGZyb20gZGJhbm1lLiAqLworCQlkYm5hbWVbc3RybGVu KGRibmFtZSkgLSAxXSA9ICdcMCc7CisKKwkJcGdfbG9nX2luZm8oImZvdW5kIGRhdGFiYXNlIFwi JXNcIiAoT0lEOiAldSkgaW4gbWFwLmRhdCBmaWxlIHdoaWxlIHJlc3RvcmluZy4iLCBkYm5hbWUs IGRiX29pZCk7CisKKwkJLyogUmVwb3J0IGVycm9yIGFuZCBleGl0IGlmIHRoZSBmaWxlIGhhcyBh bnkgY29ycnVwdGVkIGRhdGEuICovCisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQpIHx8IHN0cmxl bihkYm5hbWUpID09IDApCisJCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRyeSBpbiBtYXAuZGF0IGZp bGUgYXQgbGluZSA6ICVkIiwgY291bnQgKyAxKTsKKworCQkvKgorCQkgKiBYWFggOiBiZWZvcmUg YWRkaW5nIGRibmFtZSBpbnRvIGxpc3QsIHdlIGNhbiB2ZXJpZnkgdGhhdCB0aGlzIGRiCisJCSAq IG5lZWRzIHRvIHNraXBwZWQgZm9yIHJlc3RvcmUgb3Igbm90IGJ1dCBhcyBvZiBub3csIHdlIGFy ZSBtYWtpbmcKKwkJICogYSBsaXN0IG9mIGFsbCB0aGUgZGF0YWJhc2VzLgorCQkgKi8KKwkJc2lt cGxlX2RiX29pZF9saXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRiX29pZCwgZGJuYW1lKTsK KwkJY291bnQrKzsKKwl9CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCisJZmNsb3NlKHBm aWxlKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHJlc3RvcmVBbGxEYXRhYmFzZXMK KyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNl bnQgaW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAqCisg KiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZp ZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJucywgbnVt YmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0 b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJ CQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMg Km9wdHMsCisJCQkJCWludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdAkJ CWRibmFtZV9vaWRfbGlzdCA9IHtOVUxMLCBOVUxMfTsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RD ZWxsCQkqZGJvaWRfY2VsbDsKKwlpbnQJCQkJCQkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJ CQkJCQkJCW51bV90b3RhbF9kYjsKKwlpbnQJCQkJCQkJCW5fZXJyb3JzX3RvdGFsOworCWludAkJ CQkJCQkJY291bnQgPSAwOworCisJbnVtX3RvdGFsX2RiID0gZ2V0X2RibmFtZV9vaWRfbGlzdF9m cm9tX21maWxlKGR1bXBkaXJwYXRoLCAmZGJuYW1lX29pZF9saXN0KTsKKworCS8qCisJICogSWYg bWFwLmRhdCBoYXMgbm8gZW50cnksIHJldHVybiBmcm9tIGhlcmUgYWZ0ZXIgcHJvY2Vzc2luZwor CSAqIGdsb2JhbC5kYXQgZmlsZS4KKwkgKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0g TlVMTCkKKwkJcmV0dXJuIHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhjb25uLCBkdW1wZGly cGF0aCwgb3B0cy0+ZmlsZW5hbWUpOworCisJcGdfbG9nX2luZm8oImZvdW5kIHRvdGFsICVkIGRh dGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZSIsIG51bV90b3RhbF9kYik7CisKKwlpZiAoIWNv bm4pCisJeworCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJwb3N0 Z3Jlc1wiICB0byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQljb25uID0gQ29ubmVjdERhdGFi YXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCSAgIG9w dHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwK KwkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJ CS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJaWYgKCFjb25uKQorCQl7CisJCQlwZ19sb2df aW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJ0ZW1wbGF0ZTFcIiBhcyBmYWlsZWQg dG8gY29ubmVjdCB0byBkYXRhYmFzZSBcInBvc3RncmVzXCIgdG8gZHVtcCBpbnRvIG91dCBmaWxl Iik7CisKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIE5VTEwsIG9wdHMt PmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+ Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFt ZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCX0KKwl9CisKKwkvKgorCSAqIHByb2Nlc3Np bmcgcGdfcmV0c29yZSAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTi9OQU1FIGlmIG5vIGNvbm5l Y3Rpb24uCisJICovCisJbnVtX2RiX3Jlc3RvcmUgPSBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3Rv cmUoY29ubiwgJmRibmFtZV9vaWRfbGlzdCwKKwkJCWRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJ LyogT3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFs IHNxbCBjb21tYW5kcy4gKi8KKwluX2Vycm9yc190b3RhbCA9IHByb2Nlc3NfZ2xvYmFsX3NxbF9j b21tYW5kcyhjb25uLCBkdW1wZGlycGF0aCwgb3B0cy0+ZmlsZW5hbWUpOworCisJLyogQ2xvc2Ug dGhlIGRiIGNvbm5lY3Rpb24gYXMgd2UgYXJlIGRvbmUgd2l0aCBnbG9iYWxzIGFuZCBwYXR0ZXJu cy4gKi8KKwlpZiAoY29ubikKKwkJUFFmaW5pc2goY29ubik7CisKKwkvKiBFeGl0IGlmIG5vIGRi IG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9PSBO VUxMKQorCXsKKwkJcGdfbG9nX2luZm8oIm5vIGRhdGFiYXNlIG5lZWRzIHRvIHJlc3RvcmUgb3V0 IG9mICVkIGRhdGFiYXNlcyIsIG51bV90b3RhbF9kYik7CisJCXJldHVybiBuX2Vycm9yc190b3Rh bDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZHMgdG8gcmVzdG9yZSAlZCBkYXRhYmFzZXMgb3V0 IG9mICVkIGRhdGFiYXNlcyIsIG51bV9kYl9yZXN0b3JlLCBudW1fdG90YWxfZGIpOworCisJLyoK KwkgKiBUaWxsIG5vdywgd2UgbWFkZSBhIGxpc3Qgb2YgZGF0YWJhc2VzLCB0aG9zZSBuZWVkcyB0 byBiZSByZXN0b3JlZAorCSAqIGFmdGVyIHNraXBwaW5nIG5hbWVzIG9mIGV4Y2x1ZGUtZGF0YWJh c2UuICBOb3cgd2UgY2FuIGxhdW5jaCBwYXJhbGxlbAorCSAqIHdvcmtlcnMgdG8gcmVzdG9yZSB0 aGVzZSBkYXRhYmFzZXMuCisJICovCisJZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC5oZWFk OworCisJd2hpbGUoZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJY2hhcgkJc3ViZGlycGF0aFtN QVhQR1BBVEhdOworCQlpbnQJCQluX2Vycm9yczsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJl c2V0IG92ZXJyaWRlX2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkIGludG8K KwkJICogYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9w dGlvbikKKwkJICovCisJCWlmIChvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJewor CQkJcGZyZWUob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFt cy5vdmVycmlkZV9kYm5hbWUgPSBOVUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlycGF0aCwg TUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgZHVtcGRpcnBhdGgsIGRib2lkX2NlbGwtPmRi X29pZCk7CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm9p ZF9jZWxsLT5kYl9uYW1lKTsKKworCQkvKiBSZXN0b3JlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJ bl9lcnJvcnMgPSByZXN0b3JlT25lRGF0YWJhc2Uoc3ViZGlycGF0aCwgb3B0cywgbnVtV29ya2Vy cywgdHJ1ZSwgY291bnQpOworCisJCS8qIFByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9y cyBkdXJpbmcgc2luZ2xlIGRhdGFiYXNlIHJlc3RvcmUuICovCisJCWlmIChuX2Vycm9ycykKKwkJ eworCQkJbl9lcnJvcnNfdG90YWwgKz0gbl9lcnJvcnM7CisJCQlwZ19sb2dfd2FybmluZygiZXJy b3JzIGlnbm9yZWQgb24gZGF0YWJhc2UgXCIlc1wiIHJlc3RvcmU6ICVkIiwgZGJvaWRfY2VsbC0+ ZGJfbmFtZSwgbl9lcnJvcnMpOworCQl9CisKKwkJZGJvaWRfY2VsbCA9IGRib2lkX2NlbGwtPm5l eHQ7CisJCWNvdW50Kys7CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJh c2VzLiovCisJcGdfbG9nX2luZm8oIm51bWJlciBvZiByZXN0b3JlZCBkYXRhYmFzZXMgYXJlICVk IiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuICov CisJc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKCZkYm5hbWVfb2lkX2xpc3QpOworCisJ cmV0dXJuIG5fZXJyb3JzX3RvdGFsOworfQorCisvKgorICogcHJvY2Vzc19nbG9iYWxfc3FsX2Nv bW1hbmRzCisgKgorICogVGhpcyB3aWxsIG9wZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCB3aWxsIGV4 ZWN1dGUgYWxsIGdsb2JhbCBzcWwgY29tbWFuZHMgb25lCisgKiBieSBvbmUgc3RhdGVtZW50Lgor ICogU2VtaWNvbG9uIGlzIGNvbnNpZGVyZWQgYXMgc3RhdGVtZW50IHRlcm1pbmF0b3IuICBJZiBv dXRmaWxlIGlzIHBhc3NlZCwgdGhlbgorICogdGhpcyB3aWxsIGNvcHkgYWxsIHNxbCBjb21tYW5k cyBpbnRvIG91dGZpbGUgcmF0aGVyIHRoZW4gZXhlY3V0aW5nIHRoZW0uCisgKgorICogcmV0dXJu cyB0aGUgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBwcm9jZXNzaW5nIGdsb2JhbC5kYXQKKyAqLwor c3RhdGljIGludAorcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqZHVtcGRpcnBhdGgsIGNvbnN0IGNoYXIgKm91dGZpbGUpCit7CisJY2hhciAgICAg ICAgICAgIGdsb2JhbF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlQR3Jlc3VsdAkJKnJlc3VsdDsK KwlTdHJpbmdJbmZvRGF0YQlzcWxzdGF0ZW1lbnQ7CisJRklMRQkJCSpwZmlsZTsKKwlpbnQJCQkJ bl9lcnJvcnMgPSAwOworCisJc25wcmludGYoZ2xvYmFsX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAi JXMvZ2xvYmFsLmRhdCIsIGR1bXBkaXJwYXRoKTsKKworCS8qIE9wZW4gZ2xvYmFsLmRhdCBmaWxl LiAqLworCXBmaWxlID0gZm9wZW4oZ2xvYmFsX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1IpOworCisJ aWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwuZGF0 IGZpbGU6IFwiJXNcIiIsIGdsb2JhbF9maWxlX3BhdGgpOworCisJLyoKKwkgKiBJZiBvdXRmaWxl IGlzIGdpdmVuLCB0aGVuIGp1c3QgY29weSBhbGwgZ2xvYmFsLmRhdCBmaWxlIGRhdGEgaW50bwor CSAqIG91dGZpbGUuCisJICovCisJaWYgKG91dGZpbGUpCisJeworCQljb3B5X29yX3ByaW50X2ds b2JhbF9maWxlKG91dGZpbGUsIHBmaWxlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSW5pdCBz cWxzdGF0ZW1lbnQgdG8gYXBwZW5kIGNvbW1hbmRzLiAqLworCWluaXRTdHJpbmdJbmZvKCZzcWxz dGF0ZW1lbnQpOworCisJLyogUHJvY2VzcyBmaWxlIHRpbGwgRU9GIGFuZCBleGVjdXRlIHNxbCBz dGF0ZW1lbnRzLiAqLworCXdoaWxlIChSZWFkT25lU3RhdGVtZW50KCZzcWxzdGF0ZW1lbnQsIHBm aWxlKSAhPSBFT0YpCisJeworCQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nIHF1ZXJ5OiAlcyIsIHNx bHN0YXRlbWVudC5kYXRhKTsKKwkJcmVzdWx0ID0gUFFleGVjKGNvbm4sIHNxbHN0YXRlbWVudC5k YXRhKTsKKworCQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkpCisJCXsKKwkJCWNhc2Ug UEdSRVNfQ09NTUFORF9PSzoKKwkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOgorCQkJY2FzZSBQR1JF U19FTVBUWV9RVUVSWToKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbl9lcnJvcnMrKzsK KwkJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBleGVjdXRlIHF1ZXJ5OiBcIiVzXCIgXG5Db21t YW5kIHdhczogXCIlc1wiIiwgUFFlcnJvck1lc3NhZ2UoY29ubiksIHNxbHN0YXRlbWVudC5kYXRh KTsKKwkJfQorCQlQUWNsZWFyKHJlc3VsdCk7CisJfQorCisJLyogUHJpbnQgYSBzdW1tYXJ5IG9m IGlnbm9yZWQgZXJyb3JzIGR1cmluZyBnbG9iYWwuZGF0LiAqLworCWlmIChuX2Vycm9ycykKKwkJ cGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIGdsb2JhbC5kYXQgZmlsZSByZXN0b3Jl OiAlZCIsIG5fZXJyb3JzKTsKKworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4gbl9lcnJvcnM7 Cit9CisKKy8qCisgKiBjb3B5X29yX3ByaW50X2dsb2JhbF9maWxlCisgKgorICogVGhpcyB3aWxs IGNvcHkgZ2xvYmFsLmRhdCBmaWxlIGludG8gb3V0IGZpbGUuICBJZiAiLSIgaXMgdXNlZCBhcyBv dXRmaWxlLAorICogdGhlbiBwcmludCBjb21tYW5kcyB0byB0aGUgc3Rkb3V0LgorICovCitzdGF0 aWMgdm9pZAorY29weV9vcl9wcmludF9nbG9iYWxfZmlsZShjb25zdCBjaGFyICpvdXRmaWxlLCBG SUxFICpwZmlsZSkKK3sKKwljaGFyCW91dF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlGSUxFCSpP UEY7CisJaW50CQljOworCisJLyogIi0iIGlzIHVzZWQgZm9yIHN0ZG91dC4gKi8KKwlpZiAoc3Ry Y21wKG91dGZpbGUsICItIikgPT0gMCkKKwkJT1BGID0gc3Rkb3V0OworCWVsc2UKKwl7CisJCXNu cHJpbnRmKG91dF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzIiwgb3V0ZmlsZSk7CisJCU9QRiA9 IGZvcGVuKG91dF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKworCQlpZiAoT1BGID09IE5VTEwp CisJCXsKKwkJCWZjbG9zZShwZmlsZSk7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmls ZTogXCIlc1wiIiwgb3V0ZmlsZSk7CisJCX0KKwl9CisKKwkvKiBBcHBlbmQgZ2xvYmFsLmRhdCBp bnRvIG91dCBmaWxlIG9yIHByaW50IHRvIHRoZSBzdGRvdXQuICovCisJd2hpbGUgKChjID0gZmdl dGMocGZpbGUpKSAhPSBFT0YpCisJCWZwdXRjKGMsIE9QRik7CisKKwlmY2xvc2UocGZpbGUpOwor CisJLyogQ2xvc2Ugb3V0IGZpbGUuICovCisJaWYgKHN0cmNtcChvdXRmaWxlLCAiLSIpICE9IDAp CisJCWZjbG9zZShPUEYpOworfQorCisvKgorICogc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZAor ICoKKyAqIGFwcGVuZHMgYSBub2RlIHRvIHRoZSBsaXN0IGluIHRoZSBlbmQuCisgKi8KK3N0YXRp YyB2b2lkCitzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAq bGlzdCwgT2lkIGRiX29pZCwKKwkJY29uc3QgY2hhciAqZGJuYW1lKQoreworCVNpbXBsZURhdGFi YXNlT2lkTGlzdENlbGwgKmNlbGw7CisKKwljZWxsID0gcGdfbWFsbG9jX29iamVjdChTaW1wbGVE YXRhYmFzZU9pZExpc3RDZWxsKTsKKworCWNlbGwtPm5leHQgPSBOVUxMOworCWNlbGwtPmRiX29p ZCA9IGRiX29pZDsKKwljZWxsLT5kYl9uYW1lID0gcGdfc3RyZHVwKGRibmFtZSk7CisKKwlpZiAo bGlzdC0+dGFpbCkKKwkJbGlzdC0+dGFpbC0+bmV4dCA9IGNlbGw7CisJZWxzZQorCQlsaXN0LT5o ZWFkID0gY2VsbDsKKwlsaXN0LT50YWlsID0gY2VsbDsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9v aWRfZnVsbF9saXN0X2RlbGV0ZQorICoKKyAqIGRlbGV0ZSBhbGwgY2VsbCBmcm9tIGRibmFtZSBh bmQgZGJvaWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfZnVsbF9saXN0 X2RlbGV0ZShTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QpCit7CisJU2ltcGxlRGF0YWJhc2VP aWRMaXN0Q2VsbAkqY2VsbCA9IGxpc3QtPmhlYWQ7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2Vs bAkqbmV4dGNlbGwgPSBOVUxMOworCisJd2hpbGUgKGNlbGwpCisJeworCQluZXh0Y2VsbCA9IGNl bGwtPm5leHQ7CisJCXBmcmVlIChjZWxsKTsKKwkJY2VsbCA9IG5leHRjZWxsOworCX0KKworCWxp c3QtPmhlYWQgPSBOVUxMOworCWxpc3QtPnRhaWwgPSBOVUxMOworfQorCisvKgorICogc2ltcGxl X3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGFsbCBjZWxsIGZyb20gc3Ry aW5nIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxl dGUoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCkKK3sKKwlTaW1wbGVTdHJpbmdMaXN0Q2VsbAkqY2Vs bCA9IGxpc3QtPmhlYWQ7CisJU2ltcGxlU3RyaW5nTGlzdENlbGwgICAgKmNlbGxuZXh0ID0gTlVM TDsKKworCXdoaWxlIChjZWxsKQorCXsKKwkJY2VsbG5leHQgPSBjZWxsLT5uZXh0OworCQlwZnJl ZShjZWxsKTsKKwkJY2VsbCA9IGNlbGxuZXh0OworCX0KKworCWxpc3QtPmhlYWQgPSBOVUxMOwor CWxpc3QtPnRhaWwgPSBOVUxMOworfQorCisvKgorICogc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0 ZQorICoKKyAqIGRlbGV0ZSBjZWxsIGZyb20gZGF0YWJhc2UgYW5kIG9pZCBsaXN0LgorICovCitz dGF0aWMgdm9pZAorc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShTaW1wbGVEYXRhYmFzZU9pZExp c3QgKmxpc3QsCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKmNlbGwsCisJCVNpbXBsZURh dGFiYXNlT2lkTGlzdENlbGwgKnByZXYpCit7CisJaWYgKHByZXYgPT0gTlVMTCkKKwl7CisJCWxp c3QtPmhlYWQgPSBjZWxsLT5uZXh0OworCQlwZnJlZShjZWxsKTsKKwl9CisJZWxzZQorCXsKKwkJ cHJldi0+bmV4dCA9IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCX0KK30KKworLyoKKyAq IHF1b3RlX2xpdGVyYWxfaW50ZXJuYWwKKyAqLworc3RhdGljIHNpemVfdAorcXVvdGVfbGl0ZXJh bF9pbnRlcm5hbChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbikKK3sKKwlj b25zdCBjaGFyICpzOworCWNoYXIJICAgKnNhdmVkc3QgPSBkc3Q7CisKKwlmb3IgKHMgPSBzcmM7 IHMgPCBzcmMgKyBsZW47IHMrKykKKwl7CisJCWlmICgqcyA9PSAnXFwnKQorCQl7CisJCQkqZHN0 KysgPSBFU0NBUEVfU1RSSU5HX1NZTlRBWDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJKmRzdCsr ID0gJ1wnJzsKKwl3aGlsZSAobGVuLS0gPiAwKQorCXsKKwkJaWYgKFNRTF9TVFJfRE9VQkxFKCpz cmMsIHRydWUpKQorCQkJKmRzdCsrID0gKnNyYzsKKwkJKmRzdCsrID0gKnNyYysrOworCX0KKwkq ZHN0KysgPSAnXCcnOworCisJcmV0dXJuIGRzdCAtIHNhdmVkc3Q7Cit9CisKKy8qCisgKiBxdW90 ZV9saXRlcmFsX2NzdHIKKyAqCisgKgkgIHJldHVybnMgYSBwcm9wZXJseSBxdW90ZWQgbGl0ZXJh bAorICogY29waWVkIGZyb20gc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3F1b3RlLmMKKyAqLworc3Rh dGljIGNoYXIgKgorcXVvdGVfbGl0ZXJhbF9jc3RyKGNvbnN0IGNoYXIgKnJhd3N0cikKK3sKKwlj aGFyCSAgICpyZXN1bHQ7CisJaW50CQkJbGVuOworCWludAkJCW5ld2xlbjsKKworCWxlbiA9IHN0 cmxlbihyYXdzdHIpOworCisJLyogV2UgbWFrZSBhIHdvcnN0LWNhc2UgcmVzdWx0IGFyZWE7IHdh c3RpbmcgYSBsaXR0bGUgc3BhY2UgaXMgT0sgKi8KKwlyZXN1bHQgPSBwZ19tYWxsb2MobGVuICog MiArIDMgKyAxKTsKKworCW5ld2xlbiA9IHF1b3RlX2xpdGVyYWxfaW50ZXJuYWwocmVzdWx0LCBy YXdzdHIsIGxlbik7CisJcmVzdWx0W25ld2xlbl0gPSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsK K30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4v cGdfZHVtcC90LzAwMV9iYXNpYy5wbApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1Cmlu ZGV4IDM3ZDg5M2Q1ZTZhLi4wYmJjZGJlODRhNwotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFf YmFzaWMucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0yMzcsNiAr MjM3LDExIEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkncGdfcmVzdG9yZTogb3B0aW9ucyAtQ1wv LS1jcmVhdGUgYW5kIC0xXC8tLXNpbmdsZS10cmFuc2FjdGlvbiBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlcicKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywgJy0tZXhj bHVkZS1kYXRhYmFzZT1mb28nLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JyBdLAorCXFy L1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJl IHVzZWQgdG9nZXRoZXIgd2l0aCAtZ1wvLS1nbG9iYWxzLW9ubHlcRS8sCisJJ3BnX3Jlc3RvcmU6 IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAt Zy8tLWdsb2JhbHMtb25seScpOworCiAjIGFsc28gZmFpbHMgZm9yIC1yIGFuZCAtdCwgYnV0IGl0 IHNlZW1zIHBvaW50bGVzcyB0byBhZGQgbW9yZSB0ZXN0cyBmb3IgdGhvc2UuCiBjb21tYW5kX2Zh aWxzX2xpa2UoCiAJWyAncGdfZHVtcGFsbCcsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0t Z2xvYmFscy1vbmx5JyBdLApAQCAtMjQ0LDQgKzI0OSw4IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgK IAkncGdfZHVtcGFsbDogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0 b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5JwogKTsKIAorY29tbWFuZF9mYWlsc19saWtl KAorCVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAneCcgXSwKKwlxci9cUXBnX2R1bXBhbGw6 IGVycm9yOiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQgIngiO1xFLywKKwkncGdfZHVtcGFs bDogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0Jyk7CiBkb25lX3Rlc3RpbmcoKTsKZGlmZiAt LWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOTg0MDA2MDk5N2YuLmI0M2EzZTQ4ZTNiIDEwMDY0NAot LS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjY5NSw2ICsyNjk1LDggQEAgU2h1dGRvd25Nb2RlCiBT aWduVFNWZWN0b3IKIFNpbXBsZUFjdGlvbkxpc3QKIFNpbXBsZUFjdGlvbkxpc3RDZWxsCitTaW1w bGVEYXRhYmFzZU9pZExpc3QKK1NpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwKIFNpbXBsZUVjb250 ZXh0U3RhY2tFbnRyeQogU2ltcGxlT2lkTGlzdAogU2ltcGxlT2lkTGlzdENlbGwKLS0gCjIuMzku MwoK --00000000000085f057063011a9f4--