Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lTGhx-00072r-C0 for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Apr 2021 04:19:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lTGhw-0003j6-8K for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Apr 2021 04:19:24 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lTGhv-0003ix-R3 for pgsql-hackers@lists.postgresql.org; Mon, 05 Apr 2021 04:19:24 +0000 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1lTGho-0006in-Jp for pgsql-hackers@postgresql.org; Mon, 05 Apr 2021 04:19:23 +0000 Received: by mail-pj1-x102b.google.com with SMTP id lr1-20020a17090b4b81b02900ea0a3f38c1so7772744pjb.0 for ; Sun, 04 Apr 2021 21:19:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=jBxTIJ3KWPPxS5fmhLY67Etbsad8cRKbOP3hdEMLtB4=; b=ry/0tabLlqSYOSrWR9VaKEBHgZr8QSi9glRWcs/0jThVhub7e3FqF6TQ/KupwbSw5D 8Z7N+12SIc97ZQhJGhuY2r1dYtIS/EGPM++N5wHNDi71PBgKYTHhWinZxXXHn8G0vugf bEKbHXFsOa/SJKUjSra+xFEjM1JDp5kOkSLbi/fDIDRDwoPopgsQprUaQnwYYyCq3LIT sXWqm1EOY+zd7MV/JmfPOy1/DX5m/G9CKJhWIJ+KJ8Z8JzDdriVLT8FqkgCU83DpEaoE BcEhg7fHqiVYsq5Cbl4qAeRd8vu7gUVkEu77cFWLH3us/+xJchBC06l6rSNi6X4atZuz 2NmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=jBxTIJ3KWPPxS5fmhLY67Etbsad8cRKbOP3hdEMLtB4=; b=eacquZS8KqTrzQs8gux4Kr57qr8aJ4wjO4tGQxyL0Np5hX6hTRcJCNrY14YJ1ni/SG CnwGDzjWQ9/x3qlQcmTj38NPVMBzehnS3G0Mg8ZmqP/2pm1d9ZkkO2brkJpmZ6SBVZzX Wo/1ALmq6xj7aViSQh9R4/HNLp1gJ4u5T1lYZO6h6/2nww2QTpW2V6UlqP1RigpKCqYn 2t2Igg4fscmZHXvBSGBhrAWi+QbvFVmOhINQsNnZaUSYxt/0N6Df8ROlyf7LdbohWIDm aBck/he/+mERvta0wu0DswUZwMQ8IahiG0U7NlUXfq8dq8+KSW4Qf+pA/BIj+0CRGkfe FYkw== X-Gm-Message-State: AOAM532HUB9Gn4skoip/PVtDbmgzC9ClG8OmuNm/BecHzeTVMAYwGZAm aCVRv576KBzjjcsNG6zfWdaP+8mJmNuaKp/utZQ= X-Google-Smtp-Source: ABdhPJzRAhdx1TyF5ywQgGMTU++j5YIcDMq4OlvlEKq4Z6PN6UY7gMOatL9NfMESjOGU3iwJbxZpW+tizbGfPgZ7Gns= X-Received: by 2002:a17:902:e5c8:b029:e4:c22d:4da6 with SMTP id u8-20020a170902e5c8b02900e4c22d4da6mr22597143plf.10.1617596354389; Sun, 04 Apr 2021 21:19:14 -0700 (PDT) MIME-Version: 1.0 References: <20201217050522.GU30237@telsasoft.com> <20201217204442.GX30237@telsasoft.com> <20201218175439.GA30237@telsasoft.com> <20201221074725.GF30237@telsasoft.com> <20201225023958.GW30237@telsasoft.com> <96eaa813-4ad6-e80a-04a4-cc8082d356dd@swarm64.com> <508af801-6356-d36b-1867-011ac6df8f55@swarm64.com> In-Reply-To: From: Bharath Rupireddy Date: Mon, 5 Apr 2021 09:49:03 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: Dilip Kumar Cc: Luc Vlaming , Justin Pryzby , PostgreSQL-development , Andres Freund , Paul Guo , Jeff Davis Content-Type: multipart/mixed; boundary="0000000000001804fa05bf3200ab" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001804fa05bf3200ab Content-Type: text/plain; charset="UTF-8" On Wed, Mar 10, 2021 at 10:21 AM Bharath Rupireddy wrote: > Attaching the v4 patch set. Please review it further. Attaching v5 patch set after rebasing onto the latest master. Please review it further. With Regards, Bharath Rupireddy. EnterpriseDB: http://www.enterprisedb.com --0000000000001804fa05bf3200ab Content-Type: application/x-patch; name="v5-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Disposition: attachment; filename="v5-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kn42pwoj0 RnJvbSA2NTE4MjEyNTgzZTI0YjAxNzM3NTUxMjcwMWQ5ZmVmYTZkZTIwZTQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxMCBNYXIgMjAyMSAwOTo1Mzo0OCArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjUgMS8zXSBOZXcgVGFibGUgQU1zIGZvciBNdWx0aSBhbmQgU2luZ2xl IEluc2VydHMKClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXcgdGFibGUgYWNjZXNzIG1ldGhvZHMg Zm9yIG11bHRpIGFuZApzaW5nbGUgaW5zZXJ0cy4gQWxzbyBpbXBsZW1lbnRzL3JlYXJyYW5nZXMg dGhlIG91dHNpZGUgY29kZSBmb3IKaGVhcCBhbSBpbnRvIHRoZXNlIG5ldyBBUElzLgoKTWFpbiBk ZXNpZ24gZ29hbCBvZiB0aGVzZSBuZXcgQVBJcyBpcyB0byBnaXZlIGZsZXhpYmlsaXR5IHRvCnRh YmxlYW0gZGV2ZWxvcGVycyBpbiBpbXBsZW1lbnRpbmcgbXVsdGkgaW5zZXJ0IGxvZ2ljIGRlcGVu ZGVudCBvbgp0aGUgdW5kZXJseWluZyBzdG9yYWdlIGVuZ2luZS4gQ3VycmVudGx5LCBmb3IgYWxs IHRoZSB1bmRlcmx5aW5nCnN0b3JhZ2UgZW5naW5lcywgd2UgZm9sbG93IHRoZSBzYW1lIG11bHRp IGluc2VydCBsb2dpYyBzdWNoIGFzIHdoZW4KYW5kIGhvdyB0byBmbHVzaCB0aGUgYnVmZmVyZWQg dHVwbGVzLCB0dXBsZSBzaXplIGNhbGN1bGF0aW9uLCBhbmQKdGhpcyBsb2dpYyBkb2Vzbid0IHRh a2UgaW50byBhY2NvdW50IHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZW5naW5lCmNhcGFiaWxpdGll cy4KCldlIGNhbiBhbHNvIGF2b2lkIGR1cGxpY2F0aW5nIG11bHRpIGluc2VydCBjb2RlIChmb3Ig ZXhpc3RpbmcgQ09QWSwKYW5kIHVwY29taW5nIENUQVMsIENSRUFURS9SRUZSRVNIIE1BVCBWSUVX IGFuZCBJTlNFUlQgU0VMRUNUcykuIFdlCmNhbiBhbHNvIG1vdmUgYnVsayBpbnNlcnQgc3RhdGUg YWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGluc2lkZQp0aGVzZSBBUElzLgotLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgfCAyMTIgKysrKysrKysrKysrKysr KysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCAgIDUg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyAgICB8ICAgNyArCiBzcmMv YmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMgICAgICAgIHwgIDgzICsrKysrKysrLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICB8ICA0OSArKysrKy0KIHNyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgfCAgODcgKysrKysrKysrKwogc3Jj L2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaCAgICAgICAgICB8ICAgMSArCiA3IGZpbGVzIGNo YW5nZWQsIDQzOCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMKaW5kZXggM2I0MzVjMTA3ZC4uZDhiZmUxN2YyMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2lu Y2x1ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2lu Y2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgpAQCAt MjY2OSw2ICsyNjcwLDIxNyBAQCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwg VHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG50dXBsZXMsCiAJcGdzdGF0X2NvdW50X2hlYXBf aW5zZXJ0KHJlbGF0aW9uLCBudHVwbGVzKTsKIH0KIAorLyoKKyAqIGhlYXBfaW5zZXJ0X2JlZ2lu IC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgVGFibGVJbnNlcnRTdGF0ZQorICoKKyAqIEZvciBz aW5nbGUgaW5zZXJ0czoKKyAqICAxKSBTcGVjaWZ5IGlzX211bHRpIGFzIGZhbHNlLCB0aGVuIG11 bHRpIGluc2VydCBzdGF0ZSB3aWxsIGJlIE5VTEwuCisgKgorICogRm9yIG11bHRpIGluc2VydHM6 CisgKiAgMSkgU3BlY2lmeSBpc19tdWx0aSBhcyB0cnVlLCB0aGVuIG11bHRpIGluc2VydCBzdGF0 ZSB3aWxsIGJlIGFsbG9jYXRlZCBhbmQKKyAqIAkgICBpbml0aWFsaXplZC4KKyAqCisgKiAgT3Ro ZXIgaW5wdXQgcGFyYW1ldGVycyBpLmUuIHJlbGF0aW9uLCBjb21tYW5kIGlkLCBvcHRpb25zIGFy ZSBjb21tb24gZm9yCisgKiAgYm90aCBzaW5nbGUgYW5kIG11bHRpIGluc2VydHMuCisgKi8KK1Rh YmxlSW5zZXJ0U3RhdGUqCitoZWFwX2luc2VydF9iZWdpbihSZWxhdGlvbiByZWwsIENvbW1hbmRJ ZCBjaWQsIGludCBvcHRpb25zLCBib29sIGlzX211bHRpKQoreworCVRhYmxlSW5zZXJ0U3RhdGUg KnN0YXRlOworCisJc3RhdGUgPSBwYWxsb2Moc2l6ZW9mKFRhYmxlSW5zZXJ0U3RhdGUpKTsKKwlz dGF0ZS0+cmVsID0gcmVsOworCXN0YXRlLT5jaWQgPSBjaWQ7CisJc3RhdGUtPm9wdGlvbnMgPSBv cHRpb25zOworCS8qIEJlbG93IHBhcmFtZXRlcnMgYXJlIG5vdCB1c2VkIGZvciBzaW5nbGUgaW5z ZXJ0cy4gKi8KKwlzdGF0ZS0+bWlfc2xvdHMgPSBOVUxMOworCXN0YXRlLT5taXN0YXRlID0gTlVM TDsKKwlzdGF0ZS0+bWlfY3VyX3Nsb3RzID0gMDsKKwlzdGF0ZS0+Zmx1c2hlZCA9IGZhbHNlOwor CisJaWYgKGlzX211bHRpKQorCXsKKwkJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisK KwkJbWlzdGF0ZSA9IHBhbGxvYyhzaXplb2YoSGVhcE11bHRpSW5zZXJ0U3RhdGUpKTsKKwkJc3Rh dGUtPm1pX3Nsb3RzID0KKwkJCQlwYWxsb2MwKHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIE1B WF9CVUZGRVJFRF9UVVBMRVMpOworCQltaXN0YXRlLT5tYXhfc2xvdHMgPSBNQVhfQlVGRkVSRURf VFVQTEVTOworCQltaXN0YXRlLT5tYXhfc2l6ZSA9IE1BWF9CVUZGRVJFRF9CWVRFUzsKKwkJbWlz dGF0ZS0+Y3VyX3NpemUgPSAwOworCQkvKgorCQkgKiBDcmVhdGUgYSB0ZW1wb3JhcnkgbWVtb3J5 IGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gcmVzZXQgb25jZSBwZXIKKwkJICogbXVsdGkgaW5zZXJ0 IGJhdGNoLgorCQkgKi8KKwkJbWlzdGF0ZS0+Y29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0 ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSAiaGVhcF9tdWx0aV9pbnNlcnQi LAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQlzdGF0ZS0+bWlzdGF0 ZSA9IG1pc3RhdGU7CisJfQorCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogaGVhcF9pbnNl cnRfdjIgLSBpbnNlcnQgc2luZ2xlIHR1cGxlIGludG8gYSBoZWFwCisgKgorICogSW5zZXJ0IHR1 cGxlIGZyb20gc2xvdCBpbnRvIHRhYmxlLiBUaGlzIGlzIGxpa2UgaGVhcF9pbnNlcnQoKSwgdGhl IG9ubHkKKyAqIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgcGFyYW1ldGVycyBmb3IgaW5zZXJ0aW9u IGFyZSBpbnNpZGUgdGFibGUgaW5zZXJ0CisgKiBzdGF0ZSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQK K2hlYXBfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAq c2xvdCkKK3sKKwlib29sCQlzaG91bGRGcmVlID0gdHJ1ZTsKKwlIZWFwVHVwbGUJdHVwbGUgPSBF eGVjRmV0Y2hTbG90SGVhcFR1cGxlKHNsb3QsIHRydWUsICZzaG91bGRGcmVlKTsKKworCUFzc2Vy dChzdGF0ZSk7CisKKwkvKiBVcGRhdGUgdHVwbGUgd2l0aCB0YWJsZSBvaWQgKi8KKwlzbG90LT50 dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHN0YXRlLT5yZWwpOworCXR1cGxlLT50X3Rh YmxlT2lkID0gc2xvdC0+dHRzX3RhYmxlT2lkOworCisJLyogUGVyZm9ybSBpbnNlcnRpb24sIGFu ZCBjb3B5IHRoZSByZXN1bHRpbmcgSXRlbVBvaW50ZXIgKi8KKwloZWFwX2luc2VydChzdGF0ZS0+ cmVsLCB0dXBsZSwgc3RhdGUtPmNpZCwgc3RhdGUtPm9wdGlvbnMsIHN0YXRlLT5iaXN0YXRlKTsK KwlJdGVtUG9pbnRlckNvcHkoJnR1cGxlLT50X3NlbGYsICZzbG90LT50dHNfdGlkKTsKKworCWlm IChzaG91bGRGcmVlKQorCQlwZnJlZSh0dXBsZSk7Cit9CisKKy8qCisgKiBoZWFwX211bHRpX2lu c2VydF92MiAtIGluc2VydCBtdWx0aXBsZSB0dXBsZXMgaW50byBhIGhlYXAKKyAqCisgKiBDb21w dXRlIHNpemUgb2YgdHVwbGUuIFNlZSBpZiB0aGUgYnVmZmVyZWQgc2xvdHMgY2FuIGhvbGQgdGhl IHR1cGxlLiBJZiB5ZXMsCisgKiBzdG9yZSBpdCBpbiB0aGUgYnVmZmVycywgb3RoZXJ3aXNlIGZs dXNoIGkuZS4gaW5zZXJ0IHRoZSBzbyBmYXIgYnVmZmVyZWQKKyAqIHR1cGxlcyBpbnRvIGhlYXAu CisgKgorICogRmx1c2ggY2FuIGhhcHBlbjoKKyAqICAxKSBlaXRoZXIgaWYgYWxsIHRoZSBidWZm ZXJlZCBzbG90cyBhcmUgZmlsbGVkIHVwCisgKiAgMikgb3IgaWYgdG90YWwgdHVwbGUgc2l6ZSBv ZiB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHNsb3RzIGFyZSA+PSBtYXhfc2l6ZQorICovCit2b2lk CitoZWFwX211bHRpX2luc2VydF92MihUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpCit7CisJVHVwbGVUYWJsZVNsb3QgICpiYXRjaHNsb3Q7CisJSGVhcE11bHRp SW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisJU2l6ZSBzejsKKworCUFzc2VydChzdGF0ZSk7CisKKwlt aXN0YXRlID0gKEhlYXBNdWx0aUluc2VydFN0YXRlICopc3RhdGUtPm1pc3RhdGU7CisKKwlBc3Nl cnQobWlzdGF0ZSAmJiBzdGF0ZS0+bWlfc2xvdHMpOworCisJLyogUmVzZXQgZmx1c2ggc3RhdGUg aWYgcHJldmlvdXNseSBzZXQuICovCisJaWYgKHN0YXRlLT5mbHVzaGVkKQorCXsKKwkJc3RhdGUt Pm1pX2N1cl9zbG90cyA9IDA7CisJCXN0YXRlLT5mbHVzaGVkID0gZmFsc2U7CisJfQorCisJQXNz ZXJ0KHN0YXRlLT5taV9jdXJfc2xvdHMgPCBtaXN0YXRlLT5tYXhfc2xvdHMpOworCisJaWYgKHN0 YXRlLT5taV9zbG90c1tzdGF0ZS0+bWlfY3VyX3Nsb3RzXSA9PSBOVUxMKQorCQlzdGF0ZS0+bWlf c2xvdHNbc3RhdGUtPm1pX2N1cl9zbG90c10gPQorCQkJCQkJCQkJdGFibGVfc2xvdF9jcmVhdGUo c3RhdGUtPnJlbCwgTlVMTCk7CisKKwliYXRjaHNsb3QgPSBzdGF0ZS0+bWlfc2xvdHNbc3RhdGUt Pm1pX2N1cl9zbG90c107CisKKwlFeGVjQ2xlYXJUdXBsZShiYXRjaHNsb3QpOworCUV4ZWNDb3B5 U2xvdChiYXRjaHNsb3QsIHNsb3QpOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdHVwbGUgc2l6ZSBh ZnRlciBvcmlnaW5hbCBzbG90IGlzIGNvcGllZCwgYmVjYXVzZSB0aGUgY29waWVkCisJICogc2xv dCB0eXBlIGFuZCB0dXBsZSBzaXplIG1heSBjaGFuZ2UuCisJICovCisJc3ogPSBHZXRUdXBsZVNp emUoYmF0Y2hzbG90LCBtaXN0YXRlLT5tYXhfc2l6ZSk7CisKKwlBc3NlcnQoc3ogPiAwKTsKKwor CXN0YXRlLT5taV9jdXJfc2xvdHMrKzsKKwltaXN0YXRlLT5jdXJfc2l6ZSArPSBzejsKKworCWlm IChzdGF0ZS0+bWlfY3VyX3Nsb3RzID49IG1pc3RhdGUtPm1heF9zbG90cyB8fAorCQltaXN0YXRl LT5jdXJfc2l6ZSA+PSBtaXN0YXRlLT5tYXhfc2l6ZSkKKwkJaGVhcF9tdWx0aV9pbnNlcnRfZmx1 c2goc3RhdGUpOworfQorCisvKgorICogaGVhcF9tdWx0aV9pbnNlcnRfZmx1c2ggLSBmbHVzaCBi dWZmZXJlZCB0dXBsZXMsIGlmIGFueSwgaW50byBhIGhlYXAKKyAqCisgKiBGbHVzaCB0aGUgYnVm ZmVyZWQgdHVwbGVzLCBpbmRpY2F0ZSBjYWxsZXIgdGhhdCBmbHVzaGluZyBoYXBwZW5lZCBhbmQg cmVzZXQKKyAqIHBhcmFtZXRlcnMuCisgKi8KK3ZvaWQKK2hlYXBfbXVsdGlfaW5zZXJ0X2ZsdXNo KFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlKQoreworCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0 YXRlOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCUFzc2VydChzdGF0ZSk7CisKKwlt aXN0YXRlID0gKEhlYXBNdWx0aUluc2VydFN0YXRlICopc3RhdGUtPm1pc3RhdGU7CisKKwlBc3Nl cnQobWlzdGF0ZSAmJiBzdGF0ZS0+bWlfc2xvdHMgJiYgc3RhdGUtPm1pX2N1cl9zbG90cyA+PSAw ICYmCisJCSAgIG1pc3RhdGUtPmNvbnRleHQpOworCisJaWYgKHN0YXRlLT5mbHVzaGVkKQorCXsK KwkJc3RhdGUtPm1pX2N1cl9zbG90cyA9IDA7CisJCXN0YXRlLT5mbHVzaGVkID0gZmFsc2U7CisJ CXJldHVybjsKKwl9CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKG1pc3Rh dGUtPmNvbnRleHQpOworCWhlYXBfbXVsdGlfaW5zZXJ0KHN0YXRlLT5yZWwsIHN0YXRlLT5taV9z bG90cywgc3RhdGUtPm1pX2N1cl9zbG90cywKKwkJCQkJICBzdGF0ZS0+Y2lkLCBzdGF0ZS0+b3B0 aW9ucywgc3RhdGUtPmJpc3RhdGUpOworCU1lbW9yeUNvbnRleHRSZXNldChtaXN0YXRlLT5jb250 ZXh0KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlzdGF0ZS0+Zmx1 c2hlZCA9IHRydWU7CisJbWlzdGF0ZS0+Y3VyX3NpemUgPSAwOworfQorCisvKgorICogaGVhcF9p bnNlcnRfZW5kIC0gY2xlYW4gdXAgVGFibGVJbnNlcnRTdGF0ZQorICoKKyAqIEZvciBtdWx0aSBp bnNlcnRzLCBlbnN1cmUgdG8gZmx1c2ggYWxsIHRoZSByZW1haW5pbmcgYnVmZmVycyB3aXRoCisg KiBoZWFwX211bHRpX2luc2VydF9mbHVzaCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgor ICoKKyAqIEluIHRoaXMgZnVuY3Rpb24sIGJ1ZmZlcmVkIHNsb3RzIGFyZSBkcm9wcGVkLCBzaG9y dC1saXZlZCBtZW1vcnkgY29udGV4dCBpcworICogZGVsZXRlZCwgbWlzdGF0ZSBhbmQgVGFibGVJ bnNlcnRTdGF0ZSBhcmUgZnJlZWQgdXAuCisgKi8KK3ZvaWQKK2hlYXBfaW5zZXJ0X2VuZChUYWJs ZUluc2VydFN0YXRlICpzdGF0ZSkKK3sKKwlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZTsK KwlpbnQgaTsKKworCUFzc2VydChzdGF0ZSk7CisKKwltaXN0YXRlID0gKEhlYXBNdWx0aUluc2Vy dFN0YXRlICopc3RhdGUtPm1pc3RhdGU7CisKKwlpZiAoIW1pc3RhdGUpCisJeworCQlwZnJlZShz dGF0ZSk7CisJCXJldHVybjsKKwl9CisKKwlBc3NlcnQoc3RhdGUtPm1pX3Nsb3RzICYmICBtaXN0 YXRlLT5jb250ZXh0KTsKKworCS8qIEVuc3VyZSB0aGF0IHRoZSBidWZmZXJzIGhhdmUgYmVlbiBm bHVzaGVkIGJlZm9yZS4gKi8KKwlBc3NlcnQoc3RhdGUtPm1pX2N1cl9zbG90cyA9PSAwIHx8IHN0 YXRlLT5mbHVzaGVkKTsKKworCWZvciAoaSA9IDA7IGkgPCBtaXN0YXRlLT5tYXhfc2xvdHMgJiYg c3RhdGUtPm1pX3Nsb3RzW2ldICE9IE5VTEw7IGkrKykKKwkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRh YmxlU2xvdChzdGF0ZS0+bWlfc2xvdHNbaV0pOworCisJTWVtb3J5Q29udGV4dERlbGV0ZShtaXN0 YXRlLT5jb250ZXh0KTsKKwlwZnJlZShtaXN0YXRlKTsKKwlwZnJlZShzdGF0ZS0+bWlfc2xvdHMp OworCXBmcmVlKHN0YXRlKTsKK30KKwogLyoKICAqCXNpbXBsZV9oZWFwX2luc2VydCAtIGluc2Vy dCBhIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5k ZXggYmQ1ZmFmMGMxZi4uNjU1ZGU4ZTZiNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCkBAIC0yNTU4LDYgKzI1NTgsMTEgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1S b3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUgPSBo ZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlLAogCS50dXBsZV9jb21wbGV0ZV9zcGVjdWxh dGl2ZSA9IGhlYXBhbV90dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSwKIAkubXVsdGlfaW5zZXJ0 ID0gaGVhcF9tdWx0aV9pbnNlcnQsCisJLnR1cGxlX2luc2VydF9iZWdpbiA9IGhlYXBfaW5zZXJ0 X2JlZ2luLAorCS50dXBsZV9pbnNlcnRfdjIgPSBoZWFwX2luc2VydF92MiwKKwkubXVsdGlfaW5z ZXJ0X3YyID0gaGVhcF9tdWx0aV9pbnNlcnRfdjIsCisJLm11bHRpX2luc2VydF9mbHVzaCA9IGhl YXBfbXVsdGlfaW5zZXJ0X2ZsdXNoLAorCS50dXBsZV9pbnNlcnRfZW5kID0gaGVhcF9pbnNlcnRf ZW5kLAogCS50dXBsZV9kZWxldGUgPSBoZWFwYW1fdHVwbGVfZGVsZXRlLAogCS50dXBsZV91cGRh dGUgPSBoZWFwYW1fdHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2NrID0gaGVhcGFtX3R1cGxlX2xv Y2ssCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCAzMjVlY2RjMTIyLi45 NWYxZjliNmEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFw aS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTc4LDYg Kzc4LDEzIEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRp bmUtPnR1cGxlX2NvbXBsZXRlX3NwZWN1bGF0aXZlICE9IE5VTEwpOwogCiAJQXNzZXJ0KHJvdXRp bmUtPm11bHRpX2luc2VydCAhPSBOVUxMKTsKKworCUFzc2VydChyb3V0aW5lLT50dXBsZV9pbnNl cnRfYmVnaW4gIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2luc2VydF92MiAhPSBO VUxMKTsKKwlBc3NlcnQocm91dGluZS0+bXVsdGlfaW5zZXJ0X3YyICE9IE5VTEwpOworCUFzc2Vy dChyb3V0aW5lLT5tdWx0aV9pbnNlcnRfZmx1c2ggIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUt PnR1cGxlX2luc2VydF9lbmQgIT0gTlVMTCk7CisKIAlBc3NlcnQocm91dGluZS0+dHVwbGVfZGVs ZXRlICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV91cGRhdGUgIT0gTlVMTCk7CiAJ QXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2xvY2sgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVw bGVzLmMKaW5kZXggNzNjMzVkZjljOS4uNzlhZTIyNDU1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNU dXBsZXMuYwpAQCAtMTU5LDcgKzE1OSwxMSBAQCB0dHNfdmlydHVhbF9tYXRlcmlhbGl6ZShUdXBs ZVRhYmxlU2xvdCAqc2xvdCkKIAlpZiAoVFRTX1NIT1VMREZSRUUoc2xvdCkpCiAJCXJldHVybjsK IAotCS8qIGNvbXB1dGUgc2l6ZSBvZiBtZW1vcnkgcmVxdWlyZWQgKi8KKwkvKgorCSAqIENvbXB1 dGUgc2l6ZSBvZiBtZW1vcnkgcmVxdWlyZWQuIFRoaXMgc2l6ZSBjYWxjdWxhdGlvbiBjb2RlIGlz IGFsc28gdXNlZAorCSAqIGluIEdldFR1cGxlU2l6ZSgpLCBoZW5jZSBlbnN1cmUgdG8gaGF2ZSB0 aGUgc2FtZSBjaGFuZ2VzIG9yIGZpeGVzIGhlcmUKKwkgKiBhbmQgYWxzbyB0aGVyZS4KKwkgKi8K IAlmb3IgKGludCBuYXR0ID0gMDsgbmF0dCA8IGRlc2MtPm5hdHRzOyBuYXR0KyspCiAJewogCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGRlc2MsIG5hdHQpOwpAQCAtMTIz OSw2ICsxMjQzLDgzIEBAIEV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoVHVwbGVUYWJsZVNs b3QgKnNsb3QpCiAJcGZyZWUoc2xvdCk7CiB9CiAKKy8qCisgKiBHZXRUdXBsZVNpemUgLSBDb21w dXRlIHRoZSB0dXBsZSBzaXplIGdpdmVuIGEgdGFibGUgc2xvdC4KKyAqCisgKiBGb3IgaGVhcCB0 dXBsZSwgYnVmZmVyIHR1cGxlIGFuZCBtaW5pbWFsIHR1cGxlIHNsb3QgdHlwZXMgcmV0dXJuIHRo ZSBhY3R1YWwKKyAqIHR1cGxlIHNpemUgdGhhdCBleGlzdHMuIEZvciB2aXJ0dWFsIHR1cGxlLCB0 aGUgc2l6ZSBpcyBjYWxjdWxhdGVkIGFzIHRoZQorICogc2xvdCBkb2VzIG5vdCBoYXZlIHRoZSB0 dXBsZSBzaXplLiBJZiB0aGUgY29tcHV0ZWQgc2l6ZSBleGNlZWRzIHRoZSBnaXZlbgorICogbWF4 c2l6ZSBmb3IgdGhlIHZpcnR1YWwgdHVwbGUsIHRoaXMgZnVuY3Rpb24gZXhpdHMsIG5vdCBpbnZl c3RpbmcgdGltZSBpbgorICogZnVydGhlciB1bm5lY2Vzc2FyeSBjYWxjdWxhdGlvbi4KKyAqCisg KiBJbXBvcnRhbnQgTm90ZXM6CisgKiAxKSBTaXplIGNhbGN1bGF0aW9uIGNvZGUgZm9yIHZpcnR1 YWwgc2xvdHMgaXMgYmVpbmcgdXNlZCBmcm9tCisgKiAJICB0dHNfdmlydHVhbF9tYXRlcmlhbGl6 ZSgpLCBoZW5jZSBlbnN1cmUgdG8gaGF2ZSB0aGUgc2FtZSBjaGFuZ2VzIG9yIGZpeGVzCisgKiAJ ICBoZXJlIGFuZCBhbHNvIHRoZXJlLgorICogMikgQ3VycmVudGx5LCBHZXRUdXBsZVNpemUoKSBo YW5kbGVzIHRoZSBleGlzdGluZyBoZWFwLCBidWZmZXIsIG1pbmltYWwgYW5kCisgKiAJICB2aXJ0 dWFsIHNsb3RzLiBFbnN1cmUgdG8gYWRkIHJlbGF0ZWQgY29kZSBpbiBjYXNlIGFueSBuZXcgc2xv dCB0eXBlIGlzCisgKiAgICBpbnRyb2R1Y2VkLgorICovCitpbmxpbmUgU2l6ZQorR2V0VHVwbGVT aXplKFR1cGxlVGFibGVTbG90ICpzbG90LCBTaXplIG1heHNpemUpCit7CisJU2l6ZSBzeiA9IDA7 CisJSGVhcFR1cGxlIHR1cGxlID0gTlVMTDsKKworCWlmIChUVFNfSVNfSEVBUFRVUExFKHNsb3Qp KQorCQl0dXBsZSA9ICgoSGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3QpLT50dXBsZTsKKwllbHNl IGlmKFRUU19JU19CVUZGRVJUVVBMRShzbG90KSkKKwkJdHVwbGUgPSAoKEJ1ZmZlckhlYXBUdXBs ZVRhYmxlU2xvdCAqKSBzbG90KS0+YmFzZS50dXBsZTsKKwllbHNlIGlmKFRUU19JU19NSU5JTUFM VFVQTEUoc2xvdCkpCisJCXR1cGxlID0gKChNaW5pbWFsVHVwbGVUYWJsZVNsb3QgKikgc2xvdCkt PnR1cGxlOworCWVsc2UgaWYoVFRTX0lTX1ZJUlRVQUwoc2xvdCkpCisJeworCQkvKgorCQkgKiBT aXplIGNhbGN1bGF0aW9uIGNvZGUgYmVpbmcgdXNlZCBoZXJlIGlzIGZyb20KKwkJICogdHRzX3Zp cnR1YWxfbWF0ZXJpYWxpemUoKSwgZW5zdXJlIHRvIGhhdmUgdGhlIHNhbWUgY2hhbmdlcyBvciBm aXhlcworCQkgKiBoZXJlIGFuZCBhbHNvIHRoZXJlLgorCQkgKi8KKwkJVHVwbGVEZXNjCWRlc2Mg PSBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yOworCisJCWZvciAoaW50IG5hdHQgPSAwOyBuYXR0 IDwgZGVzYy0+bmF0dHM7IG5hdHQrKykKKwkJeworCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0g VHVwbGVEZXNjQXR0cihkZXNjLCBuYXR0KTsKKwkJCURhdHVtCQl2YWw7CisKKwkJCWlmIChhdHQt PmF0dGJ5dmFsKQorCQkJCXN6ICs9IGF0dC0+YXR0bGVuOworCisJCQlpZiAoc2xvdC0+dHRzX2lz bnVsbFtuYXR0XSkKKwkJCQljb250aW51ZTsKKworCQkJdmFsID0gc2xvdC0+dHRzX3ZhbHVlc1tu YXR0XTsKKworCQkJaWYgKGF0dC0+YXR0bGVuID09IC0xICYmCisJCQkJVkFSQVRUX0lTX0VYVEVS TkFMX0VYUEFOREVEKERhdHVtR2V0UG9pbnRlcih2YWwpKSkKKwkJCXsKKwkJCQlzeiA9IGF0dF9h bGlnbl9ub21pbmFsKHN6LCBhdHQtPmF0dGFsaWduKTsKKwkJCQlzeiArPSBFT0hfZ2V0X2ZsYXRf c2l6ZShEYXR1bUdldEVPSFAodmFsKSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJc3ogPSBh dHRfYWxpZ25fbm9taW5hbChzeiwgYXR0LT5hdHRhbGlnbik7CisJCQkJc3ogPSBhdHRfYWRkbGVu Z3RoX2RhdHVtKHN6LCBhdHQtPmF0dGxlbiwgdmFsKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdl IGFyZSBub3QgaW50ZXJlc3RlZCBpbiBwcm9jZWVkaW5nIGZ1cnRoZXIgaWYgdGhlIGNvbXB1dGVk IHNpemUKKwkJCSAqIGNyb3NzZXMgbWF4c2l6ZSBsaW1pdCB0aGF0IHdlIGFyZSBsb29raW5nIGZv ci4KKwkJCSAqLworCQkJaWYgKG1heHNpemUgIT0gMCAmJiBzeiA+PSBtYXhzaXplKQorCQkJCWJy ZWFrOworCQl9CisJfQorCisJaWYgKHR1cGxlICE9IE5VTEwgJiYgIVRUU19JU19WSVJUVUFMKHNs b3QpKQorCQlzeiA9IHR1cGxlLT50X2xlbjsKKworCXJldHVybiBzejsKK30KIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICoJCQkJICB0dXBsZSB0YWJsZSBzbG90IGFjY2Vzc29yIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oCmluZGV4IGJjMDkzNmJjMmQuLmRhNzRhYjA3MmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTM2 LDExICszNiwyNiBAQAogI2RlZmluZSBIRUFQX0lOU0VSVF9OT19MT0dJQ0FMCVRBQkxFX0lOU0VS VF9OT19MT0dJQ0FMCiAjZGVmaW5lIEhFQVBfSU5TRVJUX1NQRUNVTEFUSVZFIDB4MDAxMAogCi10 eXBlZGVmIHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpCdWxrSW5zZXJ0U3RhdGU7CiBzdHJ1 Y3QgVHVwbGVUYWJsZVNsb3Q7CiAKICNkZWZpbmUgTWF4TG9ja1R1cGxlTW9kZQlMb2NrVHVwbGVF eGNsdXNpdmUKIAorLyoKKyAqIE5vIG1vcmUgdGhhbiB0aGlzIG1hbnkgdHVwbGVzIHBlciBzaW5n bGUgbXVsdGkgaW5zZXJ0IGJhdGNoCisgKgorICogQ2F1dGlvbjogRG9uJ3QgbWFrZSB0aGlzIHRv byBiaWcsIGFzIHdlIGNvdWxkIGVuZCB1cCB3aXRoIHRoaXMgbWFueSB0dXBsZXMKKyAqIHN0b3Jl ZCBpbiBtdWx0aSBpbnNlcnQgYnVmZmVyLiBJbmNyZWFzaW5nIHRoaXMgY2FuIGNhdXNlIHF1YWRy YXRpYyBncm93dGggaW4KKyAqIG1lbW9yeSByZXF1aXJlbWVudHMgZHVyaW5nIGNvcGllcyBpbnRv IHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIGEgbGFyZ2UKKyAqIG51bWJlciBvZiBwYXJ0aXRpb25z LgorICovCisjZGVmaW5lIE1BWF9CVUZGRVJFRF9UVVBMRVMJCTEwMDAKKworLyoKKyAqIEZsdXNo IG11bHRpIGluc2VydCBidWZmZXJzIGlmIHRoZXJlIGFyZSA+PSB0aGlzIG1hbnkgYnl0ZXMsIGFz IGNvdW50ZWQgYnkKKyAqIHRoZSBzaXplIG9mIHRoZSB0dXBsZXMgYnVmZmVyZWQuCisgKi8KKyNk ZWZpbmUgTUFYX0JVRkZFUkVEX0JZVEVTCQk2NTUzNQorCiAvKgogICogRGVzY3JpcHRvciBmb3Ig aGVhcCB0YWJsZSBzY2Fucy4KICAqLwpAQCAtOTMsNiArMTA4LDI1IEBAIHR5cGVkZWYgZW51bQog CUhFQVBUVVBMRV9ERUxFVEVfSU5fUFJPR1JFU1MJLyogZGVsZXRpbmcgeGFjdCBpcyBzdGlsbCBp biBwcm9ncmVzcyAqLwogfSBIVFNWX1Jlc3VsdDsKIAorLyogSG9sZHMgbXVsdGkgaW5zZXJ0IHN0 YXRlIGZvciBoZWFwIGFjY2VzcyBtZXRob2QuKi8KK3R5cGVkZWYgc3RydWN0IEhlYXBNdWx0aUlu c2VydFN0YXRlCit7CisJLyogU3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeSBjb250ZXh0IGJl Zm9yZSBmbHVzaGluZy4gKi8KKwlNZW1vcnlDb250ZXh0ICAgICAgIGNvbnRleHQ7CisJLyogTWF4 aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBjYW4gYmUgYnVmZmVyZWQuICovCisJaW50MzIgICAg ICAgICAgICAgICBtYXhfc2xvdHM7CisJLyoKKwkgKiBNYXhpbXVtIHNpemUgKGluIGJ5dGVzKSBv ZiBhbGwgdGhlIHR1cGxlcyB0aGF0IGEgc2luZ2xlIGJhdGNoIG9mCisJICogYnVmZmVyZWQgc2xv dHMgY2FuIGhvbGQuCisJICovCisJaW50NjQgICAgICAgICAgICAgICBtYXhfc2l6ZTsKKwkvKgor CSAqIFRvdGFsIHR1cGxlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgc2xvdHMgdGhhdCBhcmUgY3Vy cmVudGx5IGJ1ZmZlcmVkLgorCSAqIEZsdXNoIHRoZSBidWZmZXJlZCBzbG90cyB3aGVuIGN1cl9z aXplID49IG1heF9zaXplLgorCSAqLworCWludDY0ICAgICAgICAgICAgICAgY3VyX3NpemU7Cit9 IEhlYXBNdWx0aUluc2VydFN0YXRlOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJZnVuY3Rp b24gcHJvdG90eXBlcyBmb3IgaGVhcCBhY2Nlc3MgbWV0aG9kCiAgKgpAQCAtMTM0LDE1ICsxNjgs MjAgQEAgZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQs IFJlbGF0aW9uIHJlbGF0aW9uLAogCiBleHRlcm4gdm9pZCBoZWFwX2dldF9sYXRlc3RfdGlkKFRh YmxlU2NhbkRlc2Mgc2NhbiwgSXRlbVBvaW50ZXIgdGlkKTsKIAotZXh0ZXJuIEJ1bGtJbnNlcnRT dGF0ZSBHZXRCdWxrSW5zZXJ0U3RhdGUodm9pZCk7Ci1leHRlcm4gdm9pZCBGcmVlQnVsa0luc2Vy dFN0YXRlKEJ1bGtJbnNlcnRTdGF0ZSk7Ci1leHRlcm4gdm9pZCBSZWxlYXNlQnVsa0luc2VydFN0 YXRlUGluKEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKTsKLQogZXh0ZXJuIHZvaWQgaGVhcF9pbnNl cnQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXAsIENvbW1hbmRJZCBjaWQsCiAJCQkJ CQlpbnQgb3B0aW9ucywgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOwogZXh0ZXJuIHZvaWQgaGVh cF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAq KnNsb3RzLAogCQkJCQkJCSAgaW50IG50dXBsZXMsIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25z LAogCQkJCQkJCSAgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOworCitleHRlcm4gVGFibGVJbnNl cnRTdGF0ZSogaGVhcF9pbnNlcnRfYmVnaW4oUmVsYXRpb24gcmVsLCBDb21tYW5kSWQgY2lkLAor CQkJCQkJCQkJCSAgIGludCBvcHRpb25zLCBib29sIGlzX211bHRpKTsKK2V4dGVybiB2b2lkIGhl YXBfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCk7CitleHRlcm4gdm9pZCBoZWFwX211bHRpX2luc2VydF92MihUYWJsZUluc2VydFN0YXRlICpz dGF0ZSwKKwkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiB2b2lkIGhlYXBf bXVsdGlfaW5zZXJ0X2ZsdXNoKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlKTsKK2V4dGVybiB2b2lk IGhlYXBfaW5zZXJ0X2VuZChUYWJsZUluc2VydFN0YXRlICpzdGF0ZSk7CisKIGV4dGVybiBUTV9S ZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCwKIAkJ CQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAogCQkJ CQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIGJvb2wgY2hhbmdpbmdQYXJ0KTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oCmluZGV4IDQxNGI2YjRkNTcuLjJhMTQ3MGE3YjYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaApAQCAtMjI5LDYgKzIyOSwzMiBAQCB0eXBlZGVmIHN0cnVjdCBUTV9JbmRleERlbGV0ZU9w CiAJVE1fSW5kZXhTdGF0dXMgKnN0YXR1czsKIH0gVE1fSW5kZXhEZWxldGVPcDsKIAorLyogSG9s ZHMgdGFibGUgaW5zZXJ0IHN0YXRlLiAqLwordHlwZWRlZiBzdHJ1Y3QgVGFibGVJbnNlcnRTdGF0 ZQoreworCVJlbGF0aW9uCXJlbDsKKwkvKiBCdWxrIGluc2VydCBzdGF0ZSBpZiByZXF1ZXN0ZWQs IG90aGVyd2lzZSBOVUxMLiAqLworCXN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhCSpiaXN0YXRl OworCUNvbW1hbmRJZAljaWQ7CisJaW50CW9wdGlvbnM7CisJLyogQmVsb3cgbWVtYmVycyBhcmUg b25seSB1c2VkIGZvciBtdWx0aSBpbnNlcnRzLiAqLworCS8qIEFycmF5IG9mIGJ1ZmZlcmVkIHNs b3RzLiAqLworCVR1cGxlVGFibGVTbG90CSoqbWlfc2xvdHM7CisJLyogTnVtYmVyIG9mIHNsb3Rz IHRoYXQgYXJlIGN1cnJlbnRseSBidWZmZXJlZC4gKi8KKwlpbnQzMgltaV9jdXJfc2xvdHM7CisJ LyoKKwkgKiBBY2Nlc3MgbWV0aG9kIHNwZWNpZmljIGluZm9ybWF0aW9uIHN1Y2ggYXMgcGFyYW1l dGVycyB0aGF0IGFyZSBuZWVkZWQKKwkgKiBmb3IgYnVmZmVyaW5nIGFuZCBmbHVzaGluZyBkZWNp c2lvbnMgY2FuIGdvIGhlcmUuCisJICovCisJdm9pZAkqbWlzdGF0ZTsKKwkvKgorCSAqIFRoaXMg cGFyYW1ldGVyIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgYnVmZmVyZWQgc2xvdHMgaGF2 ZSBiZWVuCisJICogZmx1c2hlZCB0byBhIHRhYmxlLiBVc2VkIGJ5IGNhbGxlcnMgb2YgbXVsdGkg aW5zZXJ0IEFQSSBmb3IgaW5zZXJ0aW5nCisJICogaW50byBpbmRleGVzIG9yIGV4ZWN1dGluZyBh ZnRlciByb3cgdHJpZ2dlcnMsIGlmIGFueS4KKwkgKi8KKwlib29sCWZsdXNoZWQ7Cit9VGFibGVJ bnNlcnRTdGF0ZTsKKwogLyogIm9wdGlvbnMiIGZsYWcgYml0cyBmb3IgdGFibGVfdHVwbGVfaW5z ZXJ0ICovCiAvKiBUQUJMRV9JTlNFUlRfU0tJUF9XQUwgd2FzIDB4MDAwMTsgUmVsYXRpb25OZWVk c1dBTCgpIG5vdyBnb3Zlcm5zICovCiAjZGVmaW5lIFRBQkxFX0lOU0VSVF9TS0lQX0ZTTQkJMHgw MDAyCkBAIC01MDQsNiArNTMwLDE3IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJ dm9pZAkJKCptdWx0aV9pbnNlcnQpIChSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICoqc2xv dHMsIGludCBuc2xvdHMsCiAJCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywgc3Ry dWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgKmJpc3RhdGUpOwogCisJVGFibGVJbnNlcnRTdGF0ZSog KCp0dXBsZV9pbnNlcnRfYmVnaW4pIChSZWxhdGlvbiByZWwsIENvbW1hbmRJZCBjaWQsCisJCQkJ CQkJCQkJCSBpbnQgb3B0aW9ucywgYm9vbCBpc19tdWx0aSk7CisKKwl2b2lkICgqdHVwbGVfaW5z ZXJ0X3YyKSAoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsK KworCXZvaWQgKCptdWx0aV9pbnNlcnRfdjIpIChUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVw bGVUYWJsZVNsb3QgKnNsb3QpOworCisJdm9pZCAoKm11bHRpX2luc2VydF9mbHVzaCkgKFRhYmxl SW5zZXJ0U3RhdGUgKnN0YXRlKTsKKworCXZvaWQgKCp0dXBsZV9pbnNlcnRfZW5kKSAoVGFibGVJ bnNlcnRTdGF0ZSAqc3RhdGUpOworCiAJLyogc2VlIHRhYmxlX3R1cGxlX2RlbGV0ZSgpIGZvciBy ZWZlcmVuY2UgYWJvdXQgcGFyYW1ldGVycyAqLwogCVRNX1Jlc3VsdAkoKnR1cGxlX2RlbGV0ZSkg KFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKQEAgLTg1MSw2ICs4ODgs OCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogfSBUYWJsZUFtUm91dGluZTsKIAog Cit0eXBlZGVmIHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpCdWxrSW5zZXJ0U3RhdGU7CisK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNsb3QgZnVuY3Rpb25zLgogICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpAQCAtODY5LDYgKzkwOCwxMCBAQCBleHRlcm4gY29uc3QgVHVwbGVUYWJsZVNs b3RPcHMgKnRhYmxlX3Nsb3RfY2FsbGJhY2tzKFJlbGF0aW9uIHJlbCk7CiAgKi8KIGV4dGVybiBU dXBsZVRhYmxlU2xvdCAqdGFibGVfc2xvdF9jcmVhdGUoUmVsYXRpb24gcmVsLCBMaXN0ICoqcmVn bGlzdCk7CiAKKy8qIEJ1bGsgaW5zZXJ0IHN0YXRlIGZ1bmN0aW9ucy4gKi8KK2V4dGVybiBCdWxr SW5zZXJ0U3RhdGUgR2V0QnVsa0luc2VydFN0YXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgRnJlZUJ1 bGtJbnNlcnRTdGF0ZShCdWxrSW5zZXJ0U3RhdGUpOworZXh0ZXJuIHZvaWQgUmVsZWFzZUJ1bGtJ bnNlcnRTdGF0ZVBpbihCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqIFRhYmxlIHNjYW4gZnVuY3Rpb25zLgpAQCAtMTQzMCw2ICsxNDczLDUwIEBA IHRhYmxlX211bHRpX2luc2VydChSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICoqc2xvdHMs IGludCBuc2xvdHMsCiAJCQkJCQkJCSAgY2lkLCBvcHRpb25zLCBiaXN0YXRlKTsKIH0KIAorc3Rh dGljIGlubGluZSBUYWJsZUluc2VydFN0YXRlKgordGFibGVfaW5zZXJ0X2JlZ2luKFJlbGF0aW9u IHJlbCwgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCisJCQkJICAgYm9vbCBhbGxvY19iaXN0 YXRlLCBib29sIGlzX211bHRpKQoreworCVRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlID0gcmVsLT5y ZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfYmVnaW4ocmVsLCBjaWQsCisJCQkJCQkJCQkJb3B0aW9u cywgaXNfbXVsdGkpOworCisJLyogQWxsb2NhdGUgYnVsayBpbnNlcnQgc3RhdGUgaGVyZSwgc2lu Y2UgaXQncyBBTSBpbmRlcGVuZGVudC4gKi8KKwlpZiAoYWxsb2NfYmlzdGF0ZSkKKwkJc3RhdGUt PmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwllbHNlCisJCXN0YXRlLT5iaXN0YXRl ID0gTlVMTDsKKworCXJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJs ZV90dXBsZV9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90 ICpzbG90KQoreworCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF92MihzdGF0 ZSwgc2xvdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbXVsdGlfaW5zZXJ0X3Yy KFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlzdGF0 ZS0+cmVsLT5yZF90YWJsZWFtLT5tdWx0aV9pbnNlcnRfdjIoc3RhdGUsIHNsb3QpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX211bHRpX2luc2VydF9mbHVzaChUYWJsZUluc2VydFN0 YXRlICpzdGF0ZSkKK3sKKwlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT5tdWx0aV9pbnNlcnRfZmx1 c2goc3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2luc2VydF9lbmQoVGFi bGVJbnNlcnRTdGF0ZSAqc3RhdGUpCit7CisJLyogRGVhbGxvY2F0ZSBidWxrIGluc2VydCBzdGF0 ZSBoZXJlLCBzaW5jZSBpdCdzIEFNIGluZGVwZW5kZW50LiAqLworCWlmIChzdGF0ZS0+YmlzdGF0 ZSkKKwkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShzdGF0ZS0+YmlzdGF0ZSk7CisKKwlzdGF0ZS0+cmVs LT5yZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfZW5kKHN0YXRlKTsKK30KKwogLyoKICAqIERlbGV0 ZSBhIHR1cGxlLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxl LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oCmluZGV4IDY3OWU1N2ZiZGQuLjFm NTk2MTQxODMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKKysr IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaApAQCAtMzMwLDYgKzMzMCw3IEBAIGV4 dGVybiB2b2lkIHNsb3RfZ2V0bWlzc2luZ2F0dHJzKFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQg c3RhcnRBdHROdW0sCiAJCQkJCQkJCSBpbnQgbGFzdEF0dE51bSk7CiBleHRlcm4gdm9pZCBzbG90 X2dldHNvbWVhdHRyc19pbnQoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBhdHRudW0pOwogCitl eHRlcm4gU2l6ZSBHZXRUdXBsZVNpemUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFNpemUgbWF4c2l6 ZSk7CiAKICNpZm5kZWYgRlJPTlRFTkQKIAotLSAKMi4yNS4xCgo= --0000000000001804fa05bf3200ab Content-Type: application/x-patch; name="v5-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-T.patch" Content-Disposition: attachment; filename="v5-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kn42q14a1 RnJvbSBkOWRlOTIyODFkN2I1YzQ0YTZhMTU5OTRhOWExMTA1MjE0OWM5OTgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxMCBNYXIgMjAyMSAwOTo1NDo1OSArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjUgMi8zXSBDVEFTIGFuZCBSRUZSRVNIIE1hdCBWaWV3IFdpdGggTmV3 IE11bHRpIEluc2VydCBUYWJsZSBBTQoKVGhpcyBwYXRjaCBhZGRzIG5ldyBtdWx0aSBpbnNlcnQg dGFibGUgYWNjZXNzIG1ldGhvZHMgdG8KQ1JFQVRFIFRBQkxFIEFTLCBDUkVBVEUgTUFURVJJQUxJ WkVEIFZJRVcgYW5kIFJFRlJFU0ggTUFURVJJQUxJWkVEClZJRVcuCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYyB8IDQ5ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICB8IDM1ICsrKysrKysrKysrKy0tLS0t LS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4IGRjZTg4MjAxMmUuLjM2YWQwZWY2OTggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtNTgsOSArNTgsNyBAQCB0eXBlZGVmIHN0cnVjdAog CS8qIFRoZXNlIGZpZWxkcyBhcmUgZmlsbGVkIGJ5IGludG9yZWxfc3RhcnR1cDogKi8KIAlSZWxh dGlvbglyZWw7CQkJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KIAlPYmplY3RBZGRyZXNzIHJl bGFkZHI7CQkvKiBhZGRyZXNzIG9mIHJlbCwgZm9yIEV4ZWNDcmVhdGVUYWJsZUFzICovCi0JQ29t bWFuZElkCW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICov Ci0JaW50CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5jZSBv cHRpb25zICovCi0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIGJ1bGsgaW5zZXJ0IHN0YXRl ICovCisJVGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlOwkvKiBpbnNlcnQgc3RhdGUgKi8KIH0gRFJf aW50b3JlbDsKIAogLyogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIENUQVMgZGVmaW5pdGlvbiBjcmVh dGlvbiAqLwpAQCAtNTQ2LDIyICs1NDQsMjYgQEAgaW50b3JlbF9zdGFydHVwKERlc3RSZWNlaXZl ciAqc2VsZiwgaW50IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5cGVpbmZvKQogCWlmIChpc19tYXR2 aWV3ICYmICFpbnRvLT5za2lwRGF0YSkKIAkJU2V0TWF0Vmlld1BvcHVsYXRlZFN0YXRlKGludG9S ZWxhdGlvbkRlc2MsIHRydWUpOwogCi0JLyoKLQkgKiBGaWxsIHByaXZhdGUgZmllbGRzIG9mIG15 U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcwotCSAqLwotCW15U3RhdGUtPnJlbCA9IGlu dG9SZWxhdGlvbkRlc2M7Ci0JbXlTdGF0ZS0+cmVsYWRkciA9IGludG9SZWxhdGlvbkFkZHI7Ci0J bXlTdGF0ZS0+b3V0cHV0X2NpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7Ci0JbXlTdGF0 ZS0+dGlfb3B0aW9ucyA9IFRBQkxFX0lOU0VSVF9TS0lQX0ZTTTsKLQogCS8qCiAJICogSWYgV0lU SCBOTyBEQVRBIGlzIHNwZWNpZmllZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXQgdXAgdGhlIHN0 YXRlIGZvcgotCSAqIGJ1bGsgaW5zZXJ0cyBhcyB0aGVyZSBhcmUgbm8gdHVwbGVzIHRvIGluc2Vy dC4KKwkgKiBidWxrIGluc2VydHMgYW5kIG11bHRpIGluc2VydHMgYXMgdGhlcmUgYXJlIG5vIHR1 cGxlcyB0byBpbnNlcnQuCiAJICovCiAJaWYgKCFpbnRvLT5za2lwRGF0YSkKLQkJbXlTdGF0ZS0+ YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCXsKKwkJbXlTdGF0ZS0+aXN0YXRlID0g dGFibGVfaW5zZXJ0X2JlZ2luKGludG9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSBHZXRDdXJy ZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJCQkJCQkgVEFCTEVfSU5TRVJUX1NLSVBfRlNNLAor CQkJCQkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkJCQkJIHRydWUpOworCX0KIAllbHNlCi0JCW15U3Rh dGUtPmJpc3RhdGUgPSBOVUxMOworCQlteVN0YXRlLT5pc3RhdGUgPSBOVUxMOworCisJLyoKKwkg KiBGaWxsIHByaXZhdGUgZmllbGRzIG9mIG15U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5l cworCSAqLworCW15U3RhdGUtPnJlbCA9IGludG9SZWxhdGlvbkRlc2M7CisJbXlTdGF0ZS0+cmVs YWRkciA9IGludG9SZWxhdGlvbkFkZHI7CiAKIAkvKgogCSAqIFZhbGlkIHNtZ3JfdGFyZ2Jsb2Nr IGltcGxpZXMgc29tZXRoaW5nIGFscmVhZHkgd3JvdGUgdG8gdGhlIHJlbGF0aW9uLgpAQCAtNTg5 LDExICs1OTEsNyBAQCBpbnRvcmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RS ZWNlaXZlciAqc2VsZikKIAkJICogd291bGQgbm90IGJlIGNoZWFwIGVpdGhlci4gVGhpcyBhbHNv IGRvZXNuJ3QgYWxsb3cgYWNjZXNzaW5nIHBlci1BTQogCQkgKiBkYXRhIChzYXkgYSB0dXBsZSdz IHhtaW4pLCBidXQgc2luY2Ugd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLi4uCiAJCSAqLwotCQl0YWJs ZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+cmVsLAotCQkJCQkJICAgc2xvdCwKLQkJCQkJCSAgIG15 U3RhdGUtPm91dHB1dF9jaWQsCi0JCQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkJ ICAgbXlTdGF0ZS0+YmlzdGF0ZSk7CisJCXRhYmxlX211bHRpX2luc2VydF92MihteVN0YXRlLT5p c3RhdGUsIHNsb3QpOwogCX0KIAogCS8qIFdlIGtub3cgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQg cmVsYXRpb24sIHNvIHRoZXJlIGFyZSBubyBpbmRleGVzICovCkBAIC02MDgsMTIgKzYwNiwxNyBA QCBzdGF0aWMgdm9pZAogaW50b3JlbF9zaHV0ZG93bihEZXN0UmVjZWl2ZXIgKnNlbGYpCiB7CiAJ RFJfaW50b3JlbCAqbXlTdGF0ZSA9IChEUl9pbnRvcmVsICopIHNlbGY7Ci0JSW50b0NsYXVzZSAq aW50byA9IG15U3RhdGUtPmludG87CisJaW50IHRpX29wdGlvbnM7CiAKLQlpZiAoIWludG8tPnNr aXBEYXRhKQorCWlmICghbXlTdGF0ZS0+aW50by0+c2tpcERhdGEpCiAJewotCQlGcmVlQnVsa0lu c2VydFN0YXRlKG15U3RhdGUtPmJpc3RhdGUpOwotCQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQo bXlTdGF0ZS0+cmVsLCBteVN0YXRlLT50aV9vcHRpb25zKTsKKwkJdGlfb3B0aW9ucyA9IG15U3Rh dGUtPmlzdGF0ZS0+b3B0aW9uczsKKworCQl0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2gobXlTdGF0 ZS0+aXN0YXRlKTsKKworCQl0YWJsZV9pbnNlcnRfZW5kKG15U3RhdGUtPmlzdGF0ZSk7CisKKwkJ dGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG15U3RhdGUtPnJlbCwgdGlfb3B0aW9ucyk7CiAJfQog CiAJLyogY2xvc2UgcmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1pdCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv bWF0dmlldy5jCmluZGV4IGM1YzI1Y2UxMWQuLjljNmI1Zjg1MjUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2 aWV3LmMKQEAgLTUyLDEwICs1Miw3IEBAIHR5cGVkZWYgc3RydWN0CiAJRGVzdFJlY2VpdmVyIHB1 YjsJCQkvKiBwdWJsaWNseS1rbm93biBmdW5jdGlvbiBwb2ludGVycyAqLwogCU9pZAkJCXRyYW5z aWVudG9pZDsJLyogT0lEIG9mIG5ldyBoZWFwIGludG8gd2hpY2ggdG8gc3RvcmUgKi8KIAkvKiBU aGVzZSBmaWVsZHMgYXJlIGZpbGxlZCBieSB0cmFuc2llbnRyZWxfc3RhcnR1cDogKi8KLQlSZWxh dGlvbgl0cmFuc2llbnRyZWw7CS8qIHJlbGF0aW9uIHRvIHdyaXRlIHRvICovCi0JQ29tbWFuZElk CW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICovCi0JaW50 CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5jZSBvcHRpb25z ICovCi0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIGJ1bGsgaW5zZXJ0IHN0YXRlICovCisJ VGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlOwkvKiBpbnNlcnQgc3RhdGUgKi8KIH0gRFJfdHJhbnNp ZW50cmVsOwogCiBzdGF0aWMgaW50CW1hdHZpZXdfbWFpbnRlbmFuY2VfZGVwdGggPSAwOwpAQCAt NDY2LDEwICs0NjMsMTEgQEAgdHJhbnNpZW50cmVsX3N0YXJ0dXAoRGVzdFJlY2VpdmVyICpzZWxm LCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlwZWluZm8pCiAJLyoKIAkgKiBGaWxsIHByaXZh dGUgZmllbGRzIG9mIG15U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcwogCSAqLwotCW15 U3RhdGUtPnRyYW5zaWVudHJlbCA9IHRyYW5zaWVudHJlbDsKLQlteVN0YXRlLT5vdXRwdXRfY2lk ID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0gVEFC TEVfSU5TRVJUX1NLSVBfRlNNIHwgVEFCTEVfSU5TRVJUX0ZST1pFTjsKLQlteVN0YXRlLT5iaXN0 YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7CisJbXlTdGF0ZS0+aXN0YXRlID0gdGFibGVfaW5z ZXJ0X2JlZ2luKHRyYW5zaWVudHJlbCwKKwkJCQkJCQkJCQkgR2V0Q3VycmVudENvbW1hbmRJZCh0 cnVlKSwKKwkJCQkJCQkJCQkgVEFCTEVfSU5TRVJUX1NLSVBfRlNNIHwgVEFCTEVfSU5TRVJUX0ZS T1pFTiwKKwkJCQkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkJCQkgdHJ1ZSk7CiAKIAkvKgogCSAqIFZh bGlkIHNtZ3JfdGFyZ2Jsb2NrIGltcGxpZXMgc29tZXRoaW5nIGFscmVhZHkgd3JvdGUgdG8gdGhl IHJlbGF0aW9uLgpAQCAtNDk0LDEyICs0OTIsNyBAQCB0cmFuc2llbnRyZWxfcmVjZWl2ZShUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVyICpzZWxmKQogCSAqIGNoZWFwIGVpdGhlci4g VGhpcyBhbHNvIGRvZXNuJ3QgYWxsb3cgYWNjZXNzaW5nIHBlci1BTSBkYXRhIChzYXkgYQogCSAq IHR1cGxlJ3MgeG1pbiksIGJ1dCBzaW5jZSB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuLi4KIAkgKi8K LQotCXRhYmxlX3R1cGxlX2luc2VydChteVN0YXRlLT50cmFuc2llbnRyZWwsCi0JCQkJCSAgIHNs b3QsCi0JCQkJCSAgIG15U3RhdGUtPm91dHB1dF9jaWQsCi0JCQkJCSAgIG15U3RhdGUtPnRpX29w dGlvbnMsCi0JCQkJCSAgIG15U3RhdGUtPmJpc3RhdGUpOworCXRhYmxlX211bHRpX2luc2VydF92 MihteVN0YXRlLT5pc3RhdGUsIHNsb3QpOwogCiAJLyogV2Uga25vdyB0aGlzIGlzIGEgbmV3bHkg Y3JlYXRlZCByZWxhdGlvbiwgc28gdGhlcmUgYXJlIG5vIGluZGV4ZXMgKi8KIApAQCAtNTEzLDE0 ICs1MDYsMjAgQEAgc3RhdGljIHZvaWQKIHRyYW5zaWVudHJlbF9zaHV0ZG93bihEZXN0UmVjZWl2 ZXIgKnNlbGYpCiB7CiAJRFJfdHJhbnNpZW50cmVsICpteVN0YXRlID0gKERSX3RyYW5zaWVudHJl bCAqKSBzZWxmOworCWludCB0aV9vcHRpb25zOworCVJlbGF0aW9uIHRyYW5zaWVudHJlbDsKKwor CXRpX29wdGlvbnMgPSBteVN0YXRlLT5pc3RhdGUtPm9wdGlvbnM7CisJdHJhbnNpZW50cmVsID0g bXlTdGF0ZS0+aXN0YXRlLT5yZWw7CisKKwl0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2gobXlTdGF0 ZS0+aXN0YXRlKTsKIAotCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7CisJ dGFibGVfaW5zZXJ0X2VuZChteVN0YXRlLT5pc3RhdGUpOwogCi0JdGFibGVfZmluaXNoX2J1bGtf aW5zZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJlbCwgbXlTdGF0ZS0+dGlfb3B0aW9ucyk7CisJdGFi bGVfZmluaXNoX2J1bGtfaW5zZXJ0KHRyYW5zaWVudHJlbCwgdGlfb3B0aW9ucyk7CiAKIAkvKiBj bG9zZSB0cmFuc2llbnRyZWwsIGJ1dCBrZWVwIGxvY2sgdW50aWwgY29tbWl0ICovCi0JdGFibGVf Y2xvc2UobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBOb0xvY2spOwotCW15U3RhdGUtPnRyYW5zaWVu dHJlbCA9IE5VTEw7CisJdGFibGVfY2xvc2UodHJhbnNpZW50cmVsLCBOb0xvY2spOwogfQogCiAv KgotLSAKMi4yNS4xCgo= --0000000000001804fa05bf3200ab Content-Type: application/x-patch; name="v5-0003-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch" Content-Disposition: attachment; filename="v5-0003-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kn42q73r2 RnJvbSA4NDhmNDQ4ZDdlNDEyMDNhMjA3ODFiOTZkNTk2ZWY0NjU3M2MxN2NlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogTW9uLCA1IEFwciAyMDIxIDA5OjM2OjUyICswNTMwClN1 YmplY3Q6IFtQQVRDSCB2NV0gQ09QWSBXaXRoIE5ldyBNdWx0aSBhbmQgU2luZ2xlIEluc2VydCBU YWJsZSBBTQoKVGhpcyBwYXRjaCBhZGRzIG5ldyBzaW5nbGUgYW5kIG11bHRpIGluc2VydCB0YWJs ZSBhY2Nlc3MgbWV0aG9kIHRvCkNPUFkgY29kZS4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9j b3B5ZnJvbS5jIHwgNDY4ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgMTQ2IGluc2VydGlvbnMoKyksIDMyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weWZyb20uYwppbmRleCBiZTJlM2Q3MzU0Li5hYTdmYmMxZmIxIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHlmcm9tLmMKQEAgLTUzLDU0ICs1MywxNyBAQAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2lu Y2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKIAotLyoKLSAqIE5vIG1vcmUgdGhhbiB0aGlzIG1hbnkg dHVwbGVzIHBlciBDb3B5TXVsdGlJbnNlcnRCdWZmZXIKLSAqCi0gKiBDYXV0aW9uOiBEb24ndCBt YWtlIHRoaXMgdG9vIGJpZywgYXMgd2UgY291bGQgZW5kIHVwIHdpdGggdGhpcyBtYW55Ci0gKiBD b3B5TXVsdGlJbnNlcnRCdWZmZXIgaXRlbXMgc3RvcmVkIGluIENvcHlNdWx0aUluc2VydEluZm8n cwotICogbXVsdGlJbnNlcnRCdWZmZXJzIGxpc3QuICBJbmNyZWFzaW5nIHRoaXMgY2FuIGNhdXNl IHF1YWRyYXRpYyBncm93dGggaW4KLSAqIG1lbW9yeSByZXF1aXJlbWVudHMgZHVyaW5nIGNvcGll cyBpbnRvIHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIGEgbGFyZ2UKLSAqIG51bWJlciBvZiBwYXJ0 aXRpb25zLgotICovCi0jZGVmaW5lIE1BWF9CVUZGRVJFRF9UVVBMRVMJCTEwMDAKLQotLyoKLSAq IEZsdXNoIGJ1ZmZlcnMgaWYgdGhlcmUgYXJlID49IHRoaXMgbWFueSBieXRlcywgYXMgY291bnRl ZCBieSB0aGUgaW5wdXQKLSAqIHNpemUsIG9mIHR1cGxlcyBzdG9yZWQuCi0gKi8KLSNkZWZpbmUg TUFYX0JVRkZFUkVEX0JZVEVTCQk2NTUzNQotCiAvKiBUcmltIHRoZSBsaXN0IG9mIGJ1ZmZlcnMg YmFjayBkb3duIHRvIHRoaXMgbnVtYmVyIGFmdGVyIGZsdXNoaW5nICovCiAjZGVmaW5lIE1BWF9Q QVJUSVRJT05fQlVGRkVSUwkzMgogCiAvKiBTdG9yZXMgbXVsdGktaW5zZXJ0IGRhdGEgcmVsYXRl ZCB0byBhIHNpbmdsZSByZWxhdGlvbiBpbiBDb3B5RnJvbS4gKi8KIHR5cGVkZWYgc3RydWN0IENv cHlNdWx0aUluc2VydEJ1ZmZlcgogewotCVR1cGxlVGFibGVTbG90ICpzbG90c1tNQVhfQlVGRkVS RURfVFVQTEVTXTsgLyogQXJyYXkgdG8gc3RvcmUgdHVwbGVzICovCi0JUmVzdWx0UmVsSW5mbyAq cmVzdWx0UmVsSW5mbzsJLyogUmVzdWx0UmVsSW5mbyBmb3IgJ3JlbGlkJyAqLwotCUJ1bGtJbnNl cnRTdGF0ZSBiaXN0YXRlOwkvKiBCdWxrSW5zZXJ0U3RhdGUgZm9yIHRoaXMgcmVsICovCi0JaW50 CQkJbnVzZWQ7CQkJLyogbnVtYmVyIG9mICdzbG90cycgY29udGFpbmluZyB0dXBsZXMgKi8KLQl1 aW50NjQJCWxpbmVub3NbTUFYX0JVRkZFUkVEX1RVUExFU107CS8qIExpbmUgIyBvZiB0dXBsZSBp biBjb3B5Ci0JCQkJCQkJCQkJCQkgKiBzdHJlYW0gKi8KKwlUYWJsZUluc2VydFN0YXRlICppc3Rh dGU7CisJLyogTGluZSAjIG9mIHR1cGxlIGluIGNvcHkgc3RyZWFtLiAqLworCXVpbnQ2NCAgICAg ICAgICBsaW5lbm9zW01BWF9CVUZGRVJFRF9UVVBMRVNdOwogfSBDb3B5TXVsdGlJbnNlcnRCdWZm ZXI7CiAKLS8qCi0gKiBTdG9yZXMgb25lIG9yIG1hbnkgQ29weU11bHRpSW5zZXJ0QnVmZmVycyBh bmQgZGV0YWlscyBhYm91dCB0aGUgc2l6ZSBhbmQKLSAqIG51bWJlciBvZiB0dXBsZXMgd2hpY2gg YXJlIHN0b3JlZCBpbiB0aGVtLiAgVGhpcyBhbGxvd3MgbXVsdGlwbGUgYnVmZmVycyB0bwotICog ZXhpc3QgYXQgb25jZSB3aGVuIENPUFlpbmcgaW50byBhIHBhcnRpdGlvbmVkIHRhYmxlLgotICov Ci10eXBlZGVmIHN0cnVjdCBDb3B5TXVsdGlJbnNlcnRJbmZvCi17Ci0JTGlzdAkgICAqbXVsdGlJ bnNlcnRCdWZmZXJzOyAvKiBMaXN0IG9mIHRyYWNrZWQgQ29weU11bHRpSW5zZXJ0QnVmZmVycyAq LwotCWludAkJCWJ1ZmZlcmVkVHVwbGVzOyAvKiBudW1iZXIgb2YgdHVwbGVzIGJ1ZmZlcmVkIG92 ZXIgYWxsIGJ1ZmZlcnMgKi8KLQlpbnQJCQlidWZmZXJlZEJ5dGVzOwkvKiBudW1iZXIgb2YgYnl0 ZXMgZnJvbSBhbGwgYnVmZmVyZWQgdHVwbGVzICovCi0JQ29weUZyb21TdGF0ZSBjc3RhdGU7CQkv KiBDb3B5IHN0YXRlIGZvciB0aGlzIENvcHlNdWx0aUluc2VydEluZm8gKi8KLQlFU3RhdGUJICAg KmVzdGF0ZTsJCQkvKiBFeGVjdXRvciBzdGF0ZSB1c2VkIGZvciBDT1BZICovCi0JQ29tbWFuZElk CW15Y2lkOwkJCS8qIENvbW1hbmQgSWQgdXNlZCBmb3IgQ09QWSAqLwotCWludAkJCXRpX29wdGlv bnM7CQkvKiB0YWJsZSBpbnNlcnQgb3B0aW9ucyAqLwotfSBDb3B5TXVsdGlJbnNlcnRJbmZvOwot Ci0KIC8qIG5vbi1leHBvcnQgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3RhdGljIGNoYXIgKmxp bWl0X3ByaW50b3V0X2xlbmd0aChjb25zdCBjaGFyICpzdHIpOwogCkBAIC0yMDcsMTA4ICsxNzAs MzMgQEAgbGltaXRfcHJpbnRvdXRfbGVuZ3RoKGNvbnN0IGNoYXIgKnN0cikKIAlyZXR1cm4gcmVz OwogfQogCi0vKgotICogQWxsb2NhdGUgbWVtb3J5IGFuZCBpbml0aWFsaXplIGEgbmV3IENvcHlN dWx0aUluc2VydEJ1ZmZlciBmb3IgdGhpcwotICogUmVzdWx0UmVsSW5mby4KLSAqLwotc3RhdGlj IENvcHlNdWx0aUluc2VydEJ1ZmZlciAqCi1Db3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KFJlc3Vs dFJlbEluZm8gKnJyaSkKLXsKLQlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlcjsKLQotCWJ1 ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikgcGFsbG9jKHNpemVvZihDb3B5TXVsdGlJ bnNlcnRCdWZmZXIpKTsKLQltZW1zZXQoYnVmZmVyLT5zbG90cywgMCwgc2l6ZW9mKFR1cGxlVGFi bGVTbG90ICopICogTUFYX0JVRkZFUkVEX1RVUExFUyk7Ci0JYnVmZmVyLT5yZXN1bHRSZWxJbmZv ID0gcnJpOwotCWJ1ZmZlci0+YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOwotCWJ1ZmZl ci0+bnVzZWQgPSAwOwotCi0JcmV0dXJuIGJ1ZmZlcjsKLX0KLQotLyoKLSAqIE1ha2UgYSBuZXcg YnVmZmVyIGZvciB0aGlzIFJlc3VsdFJlbEluZm8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAot Q29weU11bHRpSW5zZXJ0SW5mb1NldHVwQnVmZmVyKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5m bywKLQkJCQkJCQkgICBSZXN1bHRSZWxJbmZvICpycmkpCitzdGF0aWMgdm9pZAorSW5pdENvcHlN dWx0aUluc2VydEJ1ZmZlckluZm8oTGlzdCAqKm1pcnJpLCBSZXN1bHRSZWxJbmZvICpycmksCisJ CQkJCQkJICAgQ29tbWFuZElkIG15Y2lkLCBpbnQgdGlfb3B0aW9ucykKIHsKIAlDb3B5TXVsdGlJ bnNlcnRCdWZmZXIgKmJ1ZmZlcjsKIAotCWJ1ZmZlciA9IENvcHlNdWx0aUluc2VydEJ1ZmZlcklu aXQocnJpKTsKLQorCWJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikgcGFsbG9jMChz aXplb2YoQ29weU11bHRpSW5zZXJ0QnVmZmVyKSk7CisJYnVmZmVyLT5pc3RhdGUgPSB0YWJsZV9p bnNlcnRfYmVnaW4ocnJpLT5yaV9SZWxhdGlvbkRlc2MsIG15Y2lkLAorCQkJCQkJCQkJCXRpX29w dGlvbnMsIHRydWUsIHRydWUpOwogCS8qIFNldHVwIGJhY2stbGluayBzbyB3ZSBjYW4gZWFzaWx5 IGZpbmQgdGhpcyBidWZmZXIgYWdhaW4gKi8KIAlycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZl ciA9IGJ1ZmZlcjsKLQkvKiBSZWNvcmQgdGhhdCB3ZSdyZSB0cmFja2luZyB0aGlzIGJ1ZmZlciAq LwotCW1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzID0gbGFwcGVuZChtaWluZm8tPm11bHRpSW5z ZXJ0QnVmZmVycywgYnVmZmVyKTsKKwkqbWlycmkgPSBsYXBwZW5kKCptaXJyaSwgcnJpKTsKIH0K IAogLyoKLSAqIEluaXRpYWxpemUgYW4gYWxyZWFkeSBhbGxvY2F0ZWQgQ29weU11bHRpSW5zZXJ0 SW5mby4KLSAqCi0gKiBJZiBycmkgaXMgYSBub24tcGFydGl0aW9uZWQgdGFibGUgdGhlbiBhIENv cHlNdWx0aUluc2VydEJ1ZmZlciBpcyBzZXQgdXAKLSAqIGZvciB0aGF0IHRhYmxlLgorICogUnVu IEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMgb3IgaW5zZXJ0IGludG8gaW5kZXhlcywgaWYgYW55 LCBhZnRlciBidWZmZXJlZAorICogdHVwbGVzIGFyZSBmbHVzaGVkIHRvIHRhYmxlLgogICovCiBz dGF0aWMgdm9pZAotQ29weU11bHRpSW5zZXJ0SW5mb0luaXQoQ29weU11bHRpSW5zZXJ0SW5mbyAq bWlpbmZvLCBSZXN1bHRSZWxJbmZvICpycmksCi0JCQkJCQlDb3B5RnJvbVN0YXRlIGNzdGF0ZSwg RVN0YXRlICplc3RhdGUsIENvbW1hbmRJZCBteWNpZCwKLQkJCQkJCWludCB0aV9vcHRpb25zKQot ewotCW1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzID0gTklMOwotCW1paW5mby0+YnVmZmVyZWRU dXBsZXMgPSAwOwotCW1paW5mby0+YnVmZmVyZWRCeXRlcyA9IDA7Ci0JbWlpbmZvLT5jc3RhdGUg PSBjc3RhdGU7Ci0JbWlpbmZvLT5lc3RhdGUgPSBlc3RhdGU7Ci0JbWlpbmZvLT5teWNpZCA9IG15 Y2lkOwotCW1paW5mby0+dGlfb3B0aW9ucyA9IHRpX29wdGlvbnM7Ci0KLQkvKgotCSAqIE9ubHkg c2V0dXAgdGhlIGJ1ZmZlciB3aGVuIG5vdCBkZWFsaW5nIHdpdGggYSBwYXJ0aXRpb25lZCB0YWJs ZS4KLQkgKiBCdWZmZXJzIGZvciBwYXJ0aXRpb25lZCB0YWJsZXMgd2lsbCBqdXN0IGJlIHNldHVw IHdoZW4gd2UgbmVlZCB0byBzZW5kCi0JICogdHVwbGVzIHRoZWlyIHdheSBmb3IgdGhlIGZpcnN0 IHRpbWUuCi0JICovCi0JaWYgKHJyaS0+cmlfUmVsYXRpb25EZXNjLT5yZF9yZWwtPnJlbGtpbmQg IT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKLQkJQ29weU11bHRpSW5zZXJ0SW5mb1NldHVw QnVmZmVyKG1paW5mbywgcnJpKTsKLX0KLQotLyoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVm ZmVycyBhcmUgZnVsbAotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLUNvcHlNdWx0aUluc2VydElu Zm9Jc0Z1bGwoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvKQotewotCWlmIChtaWluZm8tPmJ1 ZmZlcmVkVHVwbGVzID49IE1BWF9CVUZGRVJFRF9UVVBMRVMgfHwKLQkJbWlpbmZvLT5idWZmZXJl ZEJ5dGVzID49IE1BWF9CVUZGRVJFRF9CWVRFUykKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZh bHNlOwotfQotCi0vKgotICogUmV0dXJucyB0cnVlIGlmIHdlIGhhdmUgbm8gYnVmZmVyZWQgdHVw bGVzCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotQ29weU11bHRpSW5zZXJ0SW5mb0lzRW1wdHko Q29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvKQorSGFuZGxlQWZ0ZXJSb3dFdmVudHMoUmVzdWx0 UmVsSW5mbyAqcnJpLCBFU3RhdGUgKmVzdGF0ZSwgQ29weUZyb21TdGF0ZSBjc3RhdGUsCisJCQkJ CSBpbnQzMiBjdXJfc2xvdHMpCiB7Ci0JcmV0dXJuIG1paW5mby0+YnVmZmVyZWRUdXBsZXMgPT0g MDsKLX0KLQotLyoKLSAqIFdyaXRlIHRoZSB0dXBsZXMgc3RvcmVkIGluICdidWZmZXInIG91dCB0 byB0aGUgdGFibGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotQ29weU11bHRpSW5zZXJ0QnVm ZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAotCQkJCQkJICAgQ29weU11bHRp SW5zZXJ0QnVmZmVyICpidWZmZXIpCi17Ci0JTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwotCWlu dAkJCWk7Ci0JdWludDY0CQlzYXZlX2N1cl9saW5lbm87Ci0JQ29weUZyb21TdGF0ZSBjc3RhdGUg PSBtaWluZm8tPmNzdGF0ZTsKLQlFU3RhdGUJICAgKmVzdGF0ZSA9IG1paW5mby0+ZXN0YXRlOwot CUNvbW1hbmRJZAlteWNpZCA9IG1paW5mby0+bXljaWQ7Ci0JaW50CQkJdGlfb3B0aW9ucyA9IG1p aW5mby0+dGlfb3B0aW9uczsKLQlib29sCQlsaW5lX2J1Zl92YWxpZCA9IGNzdGF0ZS0+bGluZV9i dWZfdmFsaWQ7Ci0JaW50CQkJbnVzZWQgPSBidWZmZXItPm51c2VkOwotCVJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8gPSBidWZmZXItPnJlc3VsdFJlbEluZm87Ci0JVHVwbGVUYWJsZVNsb3Qg KipzbG90cyA9IGJ1ZmZlci0+c2xvdHM7CisJaW50IGk7CisJQ29weU11bHRpSW5zZXJ0QnVmZmVy ICpidWZmZXIgPSBycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKKwlUYWJsZUluc2VydFN0 YXRlICppc3RhdGUgPSBidWZmZXItPmlzdGF0ZTsKKwl1aW50NjQgIHNhdmVfY3VyX2xpbmVubzsK Kwlib29sICAgIGxpbmVfYnVmX3ZhbGlkID0gY3N0YXRlLT5saW5lX2J1Zl92YWxpZDsKIAogCS8q CiAJICogUHJpbnQgZXJyb3IgY29udGV4dCBpbmZvcm1hdGlvbiBjb3JyZWN0bHksIGlmIG9uZSBv ZiB0aGUgb3BlcmF0aW9ucwpAQCAtMzE3LDM2ICsyMDUsMjcgQEAgQ29weU11bHRpSW5zZXJ0QnVm ZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogCWNzdGF0ZS0+bGluZV9idWZf dmFsaWQgPSBmYWxzZTsKIAlzYXZlX2N1cl9saW5lbm8gPSBjc3RhdGUtPmN1cl9saW5lbm87CiAK LQkvKgotCSAqIHRhYmxlX211bHRpX2luc2VydCBtYXkgbGVhayBtZW1vcnksIHNvIHN3aXRjaCB0 byBzaG9ydC1saXZlZCBtZW1vcnkKLQkgKiBjb250ZXh0IGJlZm9yZSBjYWxsaW5nIGl0LgotCSAq LwotCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1vcnlD b250ZXh0KGVzdGF0ZSkpOwotCXRhYmxlX211bHRpX2luc2VydChyZXN1bHRSZWxJbmZvLT5yaV9S ZWxhdGlvbkRlc2MsCi0JCQkJCSAgIHNsb3RzLAotCQkJCQkgICBudXNlZCwKLQkJCQkJICAgbXlj aWQsCi0JCQkJCSAgIHRpX29wdGlvbnMsCi0JCQkJCSAgIGJ1ZmZlci0+YmlzdGF0ZSk7Ci0JTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwotCi0JZm9yIChpID0gMDsgaSA8IG51c2Vk OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGN1cl9zbG90czsgaSsrKQogCXsKIAkJLyoKIAkJICog SWYgdGhlcmUgYXJlIGFueSBpbmRleGVzLCB1cGRhdGUgdGhlbSBmb3IgYWxsIHRoZSBpbnNlcnRl ZCB0dXBsZXMsCiAJCSAqIGFuZCBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2Vycy4KIAkJICov Ci0JCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCkKKwkJaWYgKHJyaS0+cmlf TnVtSW5kaWNlcyA+IDApCiAJCXsKIAkJCUxpc3QJICAgKnJlY2hlY2tJbmRleGVzOwogCiAJCQlj c3RhdGUtPmN1cl9saW5lbm8gPSBidWZmZXItPmxpbmVub3NbaV07Ci0JCQlyZWNoZWNrSW5kZXhl cyA9Ci0JCQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCi0JCQkJCQkJCQkg IGJ1ZmZlci0+c2xvdHNbaV0sIGVzdGF0ZSwgZmFsc2UsIGZhbHNlLAotCQkJCQkJCQkJICBOVUxM LCBOSUwpOwotCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLAot CQkJCQkJCQkgc2xvdHNbaV0sIHJlY2hlY2tJbmRleGVzLAorCisJCQlyZWNoZWNrSW5kZXhlcyA9 IEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhycmksCisJCQkJCQkJCQkJCQkgICBpc3RhdGUtPm1pX3Ns b3RzW2ldLCBlc3RhdGUsCisJCQkJCQkJCQkJCQkgICBmYWxzZSwKKwkJCQkJCQkJCQkJCSAgIGZh bHNlLAorCQkJCQkJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkJCQkJCSAgIE5VTEwpOworCisJCQlF eGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJyaSwKKwkJCQkJCQkJIGlzdGF0ZS0+bWlfc2xv dHNbaV0sIHJlY2hlY2tJbmRleGVzLAogCQkJCQkJCQkgY3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1 cmUpOwogCQkJbGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKIAkJfQpAQCAtMzU1LDc5ICsyMzQs NjkgQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlp bmZvLAogCQkgKiBUaGVyZSdzIG5vIGluZGV4ZXMsIGJ1dCBzZWUgaWYgd2UgbmVlZCB0byBydW4g QUZURVIgUk9XIElOU0VSVAogCQkgKiB0cmlnZ2VycyBhbnl3YXkuCiAJCSAqLwotCQllbHNlIGlm IChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCi0JCQkJIChyZXN1bHRSZWxJ bmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYWZ0ZXJfcm93IHx8Ci0JCQkJICByZXN1bHRS ZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkKKwkJZWxzZSBpZiAo cnJpLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCQkJIChycmktPnJpX1RyaWdEZXNjLT50cmln X2luc2VydF9hZnRlcl9yb3cgfHwKKwkJCQkgIHJyaS0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0 X25ld190YWJsZSkpCiAJCXsKIAkJCWNzdGF0ZS0+Y3VyX2xpbmVubyA9IGJ1ZmZlci0+bGluZW5v c1tpXTsKLQkJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKLQkJ CQkJCQkJIHNsb3RzW2ldLCBOSUwsIGNzdGF0ZS0+dHJhbnNpdGlvbl9jYXB0dXJlKTsKKwkJCUV4 ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwKKwkJCQkJCQkJIHJyaSwKKwkJCQkJCQkJIGlzdGF0 ZS0+bWlfc2xvdHNbaV0sCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgY3N0YXRlLT50cmFuc2l0 aW9uX2NhcHR1cmUpOwogCQl9Ci0KLQkJRXhlY0NsZWFyVHVwbGUoc2xvdHNbaV0pOwogCX0KIAot CS8qIE1hcmsgdGhhdCBhbGwgc2xvdHMgYXJlIGZyZWUgKi8KLQlidWZmZXItPm51c2VkID0gMDsK LQogCS8qIHJlc2V0IGN1cl9saW5lbm8gYW5kIGxpbmVfYnVmX3ZhbGlkIHRvIHdoYXQgdGhleSB3 ZXJlICovCiAJY3N0YXRlLT5saW5lX2J1Zl92YWxpZCA9IGxpbmVfYnVmX3ZhbGlkOwogCWNzdGF0 ZS0+Y3VyX2xpbmVubyA9IHNhdmVfY3VyX2xpbmVubzsKLX0KKyB9CiAKIC8qCi0gKiBEcm9wIHVz ZWQgc2xvdHMgYW5kIGZyZWUgbWVtYmVyIGZvciB0aGlzIGJ1ZmZlci4KLSAqCi0gKiBUaGUgYnVm ZmVyIG11c3QgYmUgZmx1c2hlZCBiZWZvcmUgY2xlYW51cC4KKyAqIFN0b3JlIHR1cGxlIGZyb20g dGhlIGluY29taW5nIHNsb3QgaW50byBidWZmZXJlZCBzbG90cy4KICAqLwotc3RhdGljIGlubGlu ZSB2b2lkCi1Db3B5TXVsdGlJbnNlcnRCdWZmZXJDbGVhbnVwKENvcHlNdWx0aUluc2VydEluZm8g Km1paW5mbywKLQkJCQkJCQkgQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIpCitzdGF0aWMg dm9pZAorQ29weU11bHRpSW5zZXJ0QnVmZmVyVHVwbGUoUmVzdWx0UmVsSW5mbyAqcnJpLCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCSAgIENvcHlGcm9tU3RhdGUgY3N0YXRlLCBFU3RhdGUg KmVzdGF0ZSkKIHsKLQlpbnQJCQlpOwotCi0JLyogRW5zdXJlIGJ1ZmZlciB3YXMgZmx1c2hlZCAq LwotCUFzc2VydChidWZmZXItPm51c2VkID09IDApOwotCi0JLyogUmVtb3ZlIGJhY2stbGluayB0 byBvdXJzZWxmICovCi0JYnVmZmVyLT5yZXN1bHRSZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRC dWZmZXIgPSBOVUxMOwotCi0JRnJlZUJ1bGtJbnNlcnRTdGF0ZShidWZmZXItPmJpc3RhdGUpOwor CUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRC dWZmZXI7CisJVGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlID0gYnVmZmVyLT5pc3RhdGU7CiAKLQkv KiBTaW5jZSB3ZSBvbmx5IGNyZWF0ZSBzbG90cyBvbiBkZW1hbmQsIGp1c3QgZHJvcCB0aGUgbm9u LW51bGwgb25lcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVRkZFUkVEX1RVUExFUyAmJiBi dWZmZXItPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKLQkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxl U2xvdChidWZmZXItPnNsb3RzW2ldKTsKKwl0YWJsZV9tdWx0aV9pbnNlcnRfdjIoYnVmZmVyLT5p c3RhdGUsIHNsb3QpOwogCi0JdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KGJ1ZmZlci0+cmVzdWx0 UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJCSBtaWluZm8tPnRpX29wdGlvbnMpOwor CWJ1ZmZlci0+bGluZW5vc1tpc3RhdGUtPm1pX2N1cl9zbG90cyAtIDFdID0gY3N0YXRlLT5jdXJf bGluZW5vOwogCi0JcGZyZWUoYnVmZmVyKTsKKwlpZiAoaXN0YXRlLT5mbHVzaGVkKQorCQlIYW5k bGVBZnRlclJvd0V2ZW50cyhycmksIGVzdGF0ZSwgY3N0YXRlLCBpc3RhdGUtPm1pX2N1cl9zbG90 cyk7CiB9CiAKIC8qCi0gKiBXcml0ZSBvdXQgYWxsIHN0b3JlZCB0dXBsZXMgaW4gYWxsIGJ1ZmZl cnMgb3V0IHRvIHRoZSB0YWJsZXMuCi0gKgotICogT25jZSBmbHVzaGVkIHdlIGFsc28gdHJpbSB0 aGUgdHJhY2tlZCBidWZmZXJzIGxpc3QgZG93biB0byBzaXplIGJ5IHJlbW92aW5nCi0gKiB0aGUg YnVmZmVycyBjcmVhdGVkIGVhcmxpZXN0IGZpcnN0LgotICoKLSAqIENhbGxlcnMgc2hvdWxkIHBh c3MgJ2N1cnJfcnJpJyBpcyB0aGUgUmVzdWx0UmVsSW5mbyB0aGF0J3MgY3VycmVudGx5IGJlaW5n Ci0gKiB1c2VkLiAgV2hlbiBjbGVhbmluZyB1cCBvbGQgYnVmZmVycyB3ZSdsbCBuZXZlciByZW1v dmUgdGhlIG9uZSBmb3IKLSAqICdjdXJyX3JyaScuCisgKiBGbHVzaCB0dXBsZXMgaW50byB0YWJs ZSBmcm9tIHRoZSBidWZmZXJlZCBzbG90cy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCi1Db3B5 TXVsdGlJbnNlcnRJbmZvRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRS ZWxJbmZvICpjdXJyX3JyaSkKLXsKK3N0YXRpYyB2b2lkCitDb3B5TXVsaXRJbnNlcnRGbHVzaEJ1 ZmZlcnMoTGlzdCAqKm1pcnJpLCBSZXN1bHRSZWxJbmZvICpjdXJyX3JyaSwKKwkJCQkJCQlDb3B5 RnJvbVN0YXRlIGNzdGF0ZSwgRVN0YXRlICplc3RhdGUpCisgewogCUxpc3RDZWxsICAgKmxjOwor CVJlc3VsdFJlbEluZm8gKnJyaTsKKwlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlcjsKKwlU YWJsZUluc2VydFN0YXRlICppc3RhdGU7CiAKLQlmb3JlYWNoKGxjLCBtaWluZm8tPm11bHRpSW5z ZXJ0QnVmZmVycykKKwlmb3JlYWNoKGxjLCAqbWlycmkpCiAJewotCQlDb3B5TXVsdGlJbnNlcnRC dWZmZXIgKmJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikgbGZpcnN0KGxjKTsKKwkJ cnJpID0gbGZpcnN0KGxjKTsKKwkJYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZm ZXI7CisJCWlzdGF0ZSA9IGJ1ZmZlci0+aXN0YXRlOworCisJCXRhYmxlX211bHRpX2luc2VydF9m bHVzaChpc3RhdGUpOwogCi0JCUNvcHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKG1paW5mbywgYnVm ZmVyKTsKKwkJaWYgKGlzdGF0ZS0+Zmx1c2hlZCkKKwkJCUhhbmRsZUFmdGVyUm93RXZlbnRzKHJy aSwgZXN0YXRlLCBjc3RhdGUsIGlzdGF0ZS0+bWlfY3VyX3Nsb3RzKTsKIAl9CiAKLQltaWluZm8t PmJ1ZmZlcmVkVHVwbGVzID0gMDsKLQltaWluZm8tPmJ1ZmZlcmVkQnl0ZXMgPSAwOworCXJyaSA9 IE5VTEw7CisJYnVmZmVyID0gTlVMTDsKKwlpc3RhdGUgPSBOVUxMOwogCiAJLyoKIAkgKiBUcmlt IHRoZSBsaXN0IG9mIHRyYWNrZWQgYnVmZmVycyBkb3duIGlmIGl0IGV4Y2VlZHMgdGhlIGxpbWl0 LiAgSGVyZSB3ZQpAQCAtNDM1LDg3ICszMDQsNTkgQEAgQ29weU11bHRpSW5zZXJ0SW5mb0ZsdXNo KENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5mbyAqY3Vycl9ycmkpCiAJ ICogbGlrZWx5IHRoYXQgdGhlc2Ugb2xkZXIgb25lcyB3aWxsIGJlIG5lZWRlZCB0aGFuIHRoZSBv bmVzIHRoYXQgd2VyZQogCSAqIGp1c3QgY3JlYXRlZC4KIAkgKi8KLQl3aGlsZSAobGlzdF9sZW5n dGgobWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMpID4gTUFYX1BBUlRJVElPTl9CVUZGRVJTKQor CXdoaWxlIChsaXN0X2xlbmd0aCgqbWlycmkpID4gTUFYX1BBUlRJVElPTl9CVUZGRVJTKQogCXsK LQkJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXI7CisJCWludCB0aV9vcHRpb25zOwogCi0J CWJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikgbGluaXRpYWwobWlpbmZvLT5tdWx0 aUluc2VydEJ1ZmZlcnMpOworCQlycmkgPSAoUmVzdWx0UmVsSW5mbyAqKSBsaW5pdGlhbCgqbWly cmkpOwogCiAJCS8qCiAJCSAqIFdlIG5ldmVyIHdhbnQgdG8gcmVtb3ZlIHRoZSBidWZmZXIgdGhh dCdzIGN1cnJlbnRseSBiZWluZyB1c2VkLCBzbwogCQkgKiBpZiB3ZSBoYXBwZW4gdG8gZmluZCB0 aGF0IHRoZW4gbW92ZSBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgogCQkgKi8KLQkJaWYgKGJ1 ZmZlci0+cmVzdWx0UmVsSW5mbyA9PSBjdXJyX3JyaSkKKwkJaWYgKHJyaSA9PSBjdXJyX3JyaSkK IAkJewotCQkJbWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMgPSBsaXN0X2RlbGV0ZV9maXJzdCht aWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyk7Ci0JCQltaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVy cyA9IGxhcHBlbmQobWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMsIGJ1ZmZlcik7Ci0JCQlidWZm ZXIgPSAoQ29weU11bHRpSW5zZXJ0QnVmZmVyICopIGxpbml0aWFsKG1paW5mby0+bXVsdGlJbnNl cnRCdWZmZXJzKTsKKwkJCSptaXJyaSA9IGxpc3RfZGVsZXRlX2ZpcnN0KCptaXJyaSk7CisJCQkq bWlycmkgPSBsYXBwZW5kKCptaXJyaSwgcnJpKTsKKwkJCXJyaSA9IChSZXN1bHRSZWxJbmZvICop IGxpbml0aWFsKCptaXJyaSk7CiAJCX0KIAotCQlDb3B5TXVsdGlJbnNlcnRCdWZmZXJDbGVhbnVw KG1paW5mbywgYnVmZmVyKTsKLQkJbWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMgPSBsaXN0X2Rl bGV0ZV9maXJzdChtaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyk7Ci0JfQotfQorCQlidWZmZXIg PSBycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKKwkJaXN0YXRlID0gYnVmZmVyLT5pc3Rh dGU7CisJCXRpX29wdGlvbnMgPSBpc3RhdGUtPm9wdGlvbnM7CiAKLS8qCi0gKiBDbGVhbnVwIGFs bG9jYXRlZCBidWZmZXJzIGFuZCBmcmVlIG1lbW9yeQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQK LUNvcHlNdWx0aUluc2VydEluZm9DbGVhbnVwKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbykK LXsKLQlMaXN0Q2VsbCAgICpsYzsKLQotCWZvcmVhY2gobGMsIG1paW5mby0+bXVsdGlJbnNlcnRC dWZmZXJzKQotCQlDb3B5TXVsdGlJbnNlcnRCdWZmZXJDbGVhbnVwKG1paW5mbywgbGZpcnN0KGxj KSk7CisJCXRhYmxlX2luc2VydF9lbmQoaXN0YXRlKTsKKwkJdGFibGVfZmluaXNoX2J1bGtfaW5z ZXJ0KHJyaS0+cmlfUmVsYXRpb25EZXNjLCB0aV9vcHRpb25zKTsKIAotCWxpc3RfZnJlZShtaWlu Zm8tPm11bHRpSW5zZXJ0QnVmZmVycyk7CisJCSptaXJyaSA9IGxpc3RfZGVsZXRlX2ZpcnN0KCpt aXJyaSk7CisJfQogfQogCiAvKgotICogR2V0IHRoZSBuZXh0IFR1cGxlVGFibGVTbG90IHRoYXQg dGhlIG5leHQgdHVwbGUgc2hvdWxkIGJlIHN0b3JlZCBpbi4KLSAqCi0gKiBDYWxsZXJzIG11c3Qg ZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBpcyBub3QgZnVsbC4KLSAqCi0gKiBOb3RlOiAnbWlpbmZv JyBpcyB1bnVzZWQgYnV0IGhhcyBiZWVuIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRo ZQotICogb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgYXJlYS4KKyAqIERyb3AgdGhlIGJ1ZmZlcmVk IHNsb3RzLgogICovCi1zdGF0aWMgaW5saW5lIFR1cGxlVGFibGVTbG90ICoKLUNvcHlNdWx0aUlu c2VydEluZm9OZXh0RnJlZVNsb3QoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAotCQkJCQkJ CQlSZXN1bHRSZWxJbmZvICpycmkpCitzdGF0aWMgdm9pZAorQ29weU11bGl0SW5zZXJ0RHJvcEJ1 ZmZlcnMoTGlzdCAqbWlycmkpCiB7Ci0JQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIgPSBy cmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKLQlpbnQJCQludXNlZCA9IGJ1ZmZlci0+bnVz ZWQ7Ci0KLQlBc3NlcnQoYnVmZmVyICE9IE5VTEwpOwotCUFzc2VydChudXNlZCA8IE1BWF9CVUZG RVJFRF9UVVBMRVMpOworCUxpc3RDZWxsICAgKmxjOwogCi0JaWYgKGJ1ZmZlci0+c2xvdHNbbnVz ZWRdID09IE5VTEwpCi0JCWJ1ZmZlci0+c2xvdHNbbnVzZWRdID0gdGFibGVfc2xvdF9jcmVhdGUo cnJpLT5yaV9SZWxhdGlvbkRlc2MsIE5VTEwpOwotCXJldHVybiBidWZmZXItPnNsb3RzW251c2Vk XTsKLX0KKwlmb3JlYWNoKGxjLCBtaXJyaSkKKwl7CisJCWludCB0aV9vcHRpb25zOworCQlSZXN1 bHRSZWxJbmZvICpycmkgPSBsZmlyc3QobGMpOworCQlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1 ZmZlciA9IHJyaS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOworCQlUYWJsZUluc2VydFN0YXRl ICppc3RhdGUgPSBidWZmZXItPmlzdGF0ZTsKIAotLyoKLSAqIFJlY29yZCB0aGUgcHJldmlvdXNs eSByZXNlcnZlZCBUdXBsZVRhYmxlU2xvdCB0aGF0IHdhcyByZXNlcnZlZCBieQotICogQ29weU11 bHRpSW5zZXJ0SW5mb05leHRGcmVlU2xvdCBhcyBiZWluZyBjb25zdW1lZC4KLSAqLwotc3RhdGlj IGlubGluZSB2b2lkCi1Db3B5TXVsdGlJbnNlcnRJbmZvU3RvcmUoQ29weU11bHRpSW5zZXJ0SW5m byAqbWlpbmZvLCBSZXN1bHRSZWxJbmZvICpycmksCi0JCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNs b3QsIGludCB0dXBsZW4sIHVpbnQ2NCBsaW5lbm8pCi17Ci0JQ29weU11bHRpSW5zZXJ0QnVmZmVy ICpidWZmZXIgPSBycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKKwkJdGlfb3B0aW9ucyA9 IGlzdGF0ZS0+b3B0aW9uczsKIAotCUFzc2VydChidWZmZXIgIT0gTlVMTCk7Ci0JQXNzZXJ0KHNs b3QgPT0gYnVmZmVyLT5zbG90c1tidWZmZXItPm51c2VkXSk7CisJCXRhYmxlX2luc2VydF9lbmQo aXN0YXRlKTsKIAotCS8qIFN0b3JlIHRoZSBsaW5lIG51bWJlciBzbyB3ZSBjYW4gcHJvcGVybHkg cmVwb3J0IGFueSBlcnJvcnMgbGF0ZXIgKi8KLQlidWZmZXItPmxpbmVub3NbYnVmZmVyLT5udXNl ZF0gPSBsaW5lbm87CisJCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChycmktPnJpX1JlbGF0aW9u RGVzYywgdGlfb3B0aW9ucyk7CiAKLQkvKiBSZWNvcmQgdGhpcyBzbG90IGFzIGJlaW5nIHVzZWQg Ki8KLQlidWZmZXItPm51c2VkKys7CisJCXBmcmVlKGJ1ZmZlcik7CisJfQogCi0JLyogVXBkYXRl IGhvdyBtYW55IHR1cGxlcyBhcmUgc3RvcmVkIGFuZCB0aGVpciBzaXplICovCi0JbWlpbmZvLT5i dWZmZXJlZFR1cGxlcysrOwotCW1paW5mby0+YnVmZmVyZWRCeXRlcyArPSB0dXBsZW47CisJbGlz dF9mcmVlKG1pcnJpKTsKIH0KIAogLyoKQEAgLTUzMCwyMSArMzcxLDIxIEBAIENvcHlGcm9tKENv cHlGcm9tU3RhdGUgY3N0YXRlKQogCUVTdGF0ZQkgICAqZXN0YXRlID0gQ3JlYXRlRXhlY3V0b3JT dGF0ZSgpOyAvKiBmb3IgRXhlY0NvbnN0cmFpbnRzKCkgKi8KIAlNb2RpZnlUYWJsZVN0YXRlICpt dHN0YXRlOwogCUV4cHJDb250ZXh0ICplY29udGV4dDsKLQlUdXBsZVRhYmxlU2xvdCAqc2luZ2xl c2xvdCA9IE5VTEw7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3QgPSBOVUxMOwogCU1lbW9yeUNvbnRl eHQgb2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OwogCiAJUGFydGl0aW9uVHVwbGVS b3V0aW5nICpwcm91dGUgPSBOVUxMOwogCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNr OwogCUNvbW1hbmRJZAlteWNpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7CiAJaW50CQkJ dGlfb3B0aW9ucyA9IDA7IC8qIHN0YXJ0IHdpdGggZGVmYXVsdCBvcHRpb25zIGZvciBpbnNlcnQg Ki8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSA9IE5VTEw7CiAJQ29weUluc2VydE1ldGhvZCBp bnNlcnRNZXRob2Q7Ci0JQ29weU11bHRpSW5zZXJ0SW5mbyBtdWx0aUluc2VydEluZm8gPSB7MH07 CS8qIHBhY2lmeSBjb21waWxlciAqLwogCWludDY0CQlwcm9jZXNzZWQgPSAwOwogCWludDY0CQll eGNsdWRlZCA9IDA7CiAJYm9vbAkJaGFzX2JlZm9yZV9pbnNlcnRfcm93X3RyaWc7CiAJYm9vbAkJ aGFzX2luc3RlYWRfaW5zZXJ0X3Jvd190cmlnOwogCWJvb2wJCWxlYWZwYXJ0X3VzZV9tdWx0aV9p bnNlcnQgPSBmYWxzZTsKKwlMaXN0ICAgICAgICptdWx0aV9pbnNlcnRfcnJpcyA9IE5VTEw7CisJ VGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlID0gTlVMTDsKIAogCUFzc2VydChjc3RhdGUtPnJlbCk7 CiAJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNzdGF0ZS0+cmFuZ2VfdGFibGUpID09IDEpOwpAQCAtNzI5 LDcgKzU3MCw3IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkgKiBGb3IgcGFy dGl0aW9uZWQgdGFibGVzIHdlIGNhbid0IHN1cHBvcnQgbXVsdGktaW5zZXJ0cyB3aGVuIHRoZXJl CiAJCSAqIGFyZSBhbnkgc3RhdGVtZW50IGxldmVsIGluc2VydCB0cmlnZ2Vycy4gSXQgbWlnaHQg YmUgcG9zc2libGUgdG8KIAkJICogYWxsb3cgcGFydGl0aW9uZWQgdGFibGVzIHdpdGggc3VjaCB0 cmlnZ2VycyBpbiB0aGUgZnV0dXJlLCBidXQgZm9yCi0JCSAqIG5vdywgQ29weU11bHRpSW5zZXJ0 SW5mb0ZsdXNoIGV4cGVjdHMgdGhhdCBhbnkgYmVmb3JlIHJvdyBpbnNlcnQKKwkJICogbm93LCBD b3B5TXVsaXRJbnNlcnRGbHVzaEJ1ZmZlcnMgZXhwZWN0cyB0aGF0IGFueSBiZWZvcmUgcm93IGlu c2VydAogCQkgKiBhbmQgc3RhdGVtZW50IGxldmVsIGluc2VydCB0cmlnZ2VycyBhcmUgb24gdGhl IHNhbWUgcmVsYXRpb24uCiAJCSAqLwogCQlpbnNlcnRNZXRob2QgPSBDSU1fU0lOR0xFOwpAQCAt Nzc3LDIyICs2MTgsMjIgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCWVsc2UK IAkJCWluc2VydE1ldGhvZCA9IENJTV9NVUxUSTsKIAotCQlDb3B5TXVsdGlJbnNlcnRJbmZvSW5p dCgmbXVsdGlJbnNlcnRJbmZvLCByZXN1bHRSZWxJbmZvLCBjc3RhdGUsCi0JCQkJCQkJCWVzdGF0 ZSwgbXljaWQsIHRpX29wdGlvbnMpOworCQkvKgorCQkqIE9ubHkgc2V0dXAgdGhlIGJ1ZmZlciB3 aGVuIG5vdCBkZWFsaW5nIHdpdGggYSBwYXJ0aXRpb25lZCB0YWJsZS4KKwkJKiBCdWZmZXJzIGZv ciBwYXJ0aXRpb25lZCB0YWJsZXMgd2lsbCBqdXN0IGJlIHNldHVwIHdoZW4gd2UgbmVlZCB0bwor CQkqIHNlbmQgdHVwbGVzIHRoZWlyIHdheSBmb3IgdGhlIGZpcnN0IHRpbWUuCisJCSovCisJCWlm ICghcHJvdXRlKQorCQkJSW5pdENvcHlNdWx0aUluc2VydEJ1ZmZlckluZm8oJm11bHRpX2luc2Vy dF9ycmlzLCByZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJCSAgbXljaWQsIHRpX29wdGlvbnMpOwog CX0KIAogCS8qCi0JICogSWYgbm90IHVzaW5nIGJhdGNoIG1vZGUgKHdoaWNoIGFsbG9jYXRlcyBz bG90cyBhcyBuZWVkZWQpIHNldCB1cCBhCi0JICogdHVwbGUgc2xvdCB0b28uIFdoZW4gaW5zZXJ0 aW5nIGludG8gYSBwYXJ0aXRpb25lZCB0YWJsZSwgd2UgYWxzbyBuZWVkCi0JICogb25lLCBldmVu IGlmIHdlIG1pZ2h0IGJhdGNoIGluc2VydCwgdG8gcmVhZCB0aGUgdHVwbGUgaW4gdGhlIHJvb3QK LQkgKiBwYXJ0aXRpb24ncyBmb3JtLgorCSAqIFNldCB1cCBhIHR1cGxlIHNsb3QgdG8gd2hpY2gg dGhlIGlucHV0IGRhdGEgZnJvbSBjb3B5IHN0cmVhbSBpcyByZWFkCisJICogaW50byBhbmQgdXNl ZCBmb3IgaW5zZXJ0cyBpbnRvIHRhYmxlLgogCSAqLwotCWlmIChpbnNlcnRNZXRob2QgPT0gQ0lN X1NJTkdMRSB8fCBpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMKQotCXsKLQkJ c2luZ2xlc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9u RGVzYywKLQkJCQkJCQkJCSAgICZlc3RhdGUtPmVzX3R1cGxlVGFibGUpOwotCQliaXN0YXRlID0g R2V0QnVsa0luc2VydFN0YXRlKCk7Ci0JfQorCXNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShyZXN1 bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJICZlc3RhdGUtPmVzX3R1cGxlVGFi bGUpOwogCiAJaGFzX2JlZm9yZV9pbnNlcnRfcm93X3RyaWcgPSAocmVzdWx0UmVsSW5mby0+cmlf VHJpZ0Rlc2MgJiYKIAkJCQkJCQkJICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19p bnNlcnRfYmVmb3JlX3Jvdyk7CkBAIC04MzAsMTkgKzY3MSw4IEBAIENvcHlGcm9tKENvcHlGcm9t U3RhdGUgY3N0YXRlKQogCQlSZXNldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRlKTsKIAogCQkv KiBzZWxlY3Qgc2xvdCB0byAoaW5pdGlhbGx5KSBsb2FkIHJvdyBpbnRvICovCi0JCWlmIChpbnNl cnRNZXRob2QgPT0gQ0lNX1NJTkdMRSB8fCBwcm91dGUpCi0JCXsKLQkJCW15c2xvdCA9IHNpbmds ZXNsb3Q7Ci0JCQlBc3NlcnQobXlzbG90ICE9IE5VTEwpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJ QXNzZXJ0KHJlc3VsdFJlbEluZm8gPT0gdGFyZ2V0X3Jlc3VsdFJlbEluZm8pOwotCQkJQXNzZXJ0 KGluc2VydE1ldGhvZCA9PSBDSU1fTVVMVEkpOwotCi0JCQlteXNsb3QgPSBDb3B5TXVsdGlJbnNl cnRJbmZvTmV4dEZyZWVTbG90KCZtdWx0aUluc2VydEluZm8sCi0JCQkJCQkJCQkJCQkJIHJlc3Vs dFJlbEluZm8pOwotCQl9CisJCW15c2xvdCA9IHNsb3Q7CisJCUFzc2VydChteXNsb3QgIT0gTlVM TCk7CiAKIAkJLyoKIAkJICogU3dpdGNoIHRvIHBlci10dXBsZSBjb250ZXh0IGJlZm9yZSBjYWxs aW5nIE5leHRDb3B5RnJvbSwgd2hpY2ggZG9lcwpAQCAtOTE4LDIxICs3NDgsMjIgQEAgQ29weUZy b20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQkJaWYgKGxlYWZwYXJ0X3VzZV9tdWx0aV9pbnNl cnQpCiAJCQkJewogCQkJCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfQ29weU11bHRpSW5zZXJ0QnVm ZmVyID09IE5VTEwpCi0JCQkJCQlDb3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIoJm11bHRp SW5zZXJ0SW5mbywKLQkJCQkJCQkJCQkJCQkgICByZXN1bHRSZWxJbmZvKTsKKwkJCQkJCUluaXRD b3B5TXVsdGlJbnNlcnRCdWZmZXJJbmZvKCZtdWx0aV9pbnNlcnRfcnJpcywKKwkJCQkJCQkJCQkJ CQkgIHJlc3VsdFJlbEluZm8sIG15Y2lkLAorCQkJCQkJCQkJCQkJCSAgdGlfb3B0aW9ucyk7CiAJ CQkJfQotCQkJCWVsc2UgaWYgKGluc2VydE1ldGhvZCA9PSBDSU1fTVVMVElfQ09ORElUSU9OQUwg JiYKLQkJCQkJCSAhQ29weU11bHRpSW5zZXJ0SW5mb0lzRW1wdHkoJm11bHRpSW5zZXJ0SW5mbykp CisJCQkJZWxzZSBpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSV9DT05ESVRJT05BTCkKIAkJ CQl7CiAJCQkJCS8qCiAJCQkJCSAqIEZsdXNoIHBlbmRpbmcgaW5zZXJ0cyBpZiB0aGlzIHBhcnRp dGlvbiBjYW4ndCB1c2UKIAkJCQkJICogYmF0Y2hpbmcsIHNvIHJvd3MgYXJlIHZpc2libGUgdG8g dHJpZ2dlcnMgZXRjLgogCQkJCQkgKi8KLQkJCQkJQ29weU11bHRpSW5zZXJ0SW5mb0ZsdXNoKCZt dWx0aUluc2VydEluZm8sIHJlc3VsdFJlbEluZm8pOworCQkJCQlDb3B5TXVsaXRJbnNlcnRGbHVz aEJ1ZmZlcnMoJm11bHRpX2luc2VydF9ycmlzLAorCQkJCQkJCQkJCQkJcmVzdWx0UmVsSW5mbywg Y3N0YXRlLCBlc3RhdGUpOwogCQkJCX0KIAotCQkJCWlmIChiaXN0YXRlICE9IE5VTEwpCi0JCQkJ CVJlbGVhc2VCdWxrSW5zZXJ0U3RhdGVQaW4oYmlzdGF0ZSk7CisJCQkJaWYgKGlzdGF0ZSAmJiBp c3RhdGUtPmJpc3RhdGUpCisJCQkJCVJlbGVhc2VCdWxrSW5zZXJ0U3RhdGVQaW4oaXN0YXRlLT5i aXN0YXRlKTsKIAkJCQlwcmV2UmVzdWx0UmVsSW5mbyA9IHJlc3VsdFJlbEluZm87CiAJCQl9CiAK QEAgLTk3NCw4ICs4MDUsOCBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJCQkv KiBubyBvdGhlciBwYXRoIGF2YWlsYWJsZSBmb3IgcGFydGl0aW9uZWQgdGFibGUgKi8KIAkJCQlB c3NlcnQoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSV9DT05ESVRJT05BTCk7CiAKLQkJCQliYXRj aHNsb3QgPSBDb3B5TXVsdGlJbnNlcnRJbmZvTmV4dEZyZWVTbG90KCZtdWx0aUluc2VydEluZm8s Ci0JCQkJCQkJCQkJCQkJCQlyZXN1bHRSZWxJbmZvKTsKKwkJCQliYXRjaHNsb3QgPSB0YWJsZV9z bG90X2NyZWF0ZShyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSAg JmVzdGF0ZS0+ZXNfdHVwbGVUYWJsZSk7CiAKIAkJCQlpZiAobWFwICE9IE5VTEwpCiAJCQkJCW15 c2xvdCA9IGV4ZWN1dGVfYXR0cl9tYXBfc2xvdChtYXAtPmF0dHJNYXAsIG15c2xvdCwKQEAgLTEw NDcsMjQgKzg3OCw5IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJCS8qIFN0 b3JlIHRoZSBzbG90IGluIHRoZSBtdWx0aS1pbnNlcnQgYnVmZmVyLCB3aGVuIGVuYWJsZWQuICov CiAJCQkJaWYgKGluc2VydE1ldGhvZCA9PSBDSU1fTVVMVEkgfHwgbGVhZnBhcnRfdXNlX211bHRp X2luc2VydCkKIAkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIFRoZSBzbG90IHByZXZpb3VzbHkgbWln aHQgcG9pbnQgaW50byB0aGUgcGVyLXR1cGxlCi0JCQkJCSAqIGNvbnRleHQuIEZvciBiYXRjaGlu ZyBpdCBuZWVkcyB0byBiZSBsb25nZXIgbGl2ZWQuCi0JCQkJCSAqLwotCQkJCQlFeGVjTWF0ZXJp YWxpemVTbG90KG15c2xvdCk7Ci0KIAkJCQkJLyogQWRkIHRoaXMgdHVwbGUgdG8gdGhlIHR1cGxl IGJ1ZmZlciAqLwotCQkJCQlDb3B5TXVsdGlJbnNlcnRJbmZvU3RvcmUoJm11bHRpSW5zZXJ0SW5m bywKLQkJCQkJCQkJCQkJIHJlc3VsdFJlbEluZm8sIG15c2xvdCwKLQkJCQkJCQkJCQkJIGNzdGF0 ZS0+bGluZV9idWYubGVuLAotCQkJCQkJCQkJCQkgY3N0YXRlLT5jdXJfbGluZW5vKTsKLQotCQkJ CQkvKgotCQkJCQkgKiBJZiBlbm91Z2ggaW5zZXJ0cyBoYXZlIHF1ZXVlZCB1cCwgdGhlbiBmbHVz aCBhbGwKLQkJCQkJICogYnVmZmVycyBvdXQgdG8gdGhlaXIgdGFibGVzLgotCQkJCQkgKi8KLQkJ CQkJaWYgKENvcHlNdWx0aUluc2VydEluZm9Jc0Z1bGwoJm11bHRpSW5zZXJ0SW5mbykpCi0JCQkJ CQlDb3B5TXVsdGlJbnNlcnRJbmZvRmx1c2goJm11bHRpSW5zZXJ0SW5mbywgcmVzdWx0UmVsSW5m byk7CisJCQkJCUNvcHlNdWx0aUluc2VydEJ1ZmZlclR1cGxlKHJlc3VsdFJlbEluZm8sIG15c2xv dCwgY3N0YXRlLAorCQkJCQkJCQkJCQkgICBlc3RhdGUpOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJ ewpAQCAtMTA5MCw5ICs5MDYsMTkgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJ CQkJCX0KIAkJCQkJZWxzZQogCQkJCQl7CisJCQkJCQlpZiAoIWlzdGF0ZSkKKwkJCQkJCXsKKwkJ CQkJCQlpc3RhdGUgPSB0YWJsZV9pbnNlcnRfYmVnaW4ocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRp b25EZXNjLAorCQkJCQkJCQkJCQkJCQlteWNpZCwKKwkJCQkJCQkJCQkJCQkJdGlfb3B0aW9ucywK KwkJCQkJCQkJCQkJCQkJdHJ1ZSwKKwkJCQkJCQkJCQkJCQkJZmFsc2UpOworCQkJCQkJfQorCisJ CQkJCQlpc3RhdGUtPnJlbCA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKKwogCQkJ CQkJLyogT0ssIHN0b3JlIHRoZSB0dXBsZSBhbmQgY3JlYXRlIGluZGV4IGVudHJpZXMgZm9yIGl0 ICovCi0JCQkJCQl0YWJsZV90dXBsZV9pbnNlcnQocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25E ZXNjLAotCQkJCQkJCQkJCSAgIG15c2xvdCwgbXljaWQsIHRpX29wdGlvbnMsIGJpc3RhdGUpOwor CQkJCQkJdGFibGVfdHVwbGVfaW5zZXJ0X3YyKGlzdGF0ZSwgbXlzbG90KTsKIAogCQkJCQkJaWYg KHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwKQogCQkJCQkJCXJlY2hlY2tJbmRleGVz ID0gRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCkBAIC0xMTI1LDE2ICs5NTEs MTQgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAKIAkvKiBGbHVzaCBhbnkgcmVt YWluaW5nIGJ1ZmZlcmVkIHR1cGxlcyAqLwogCWlmIChpbnNlcnRNZXRob2QgIT0gQ0lNX1NJTkdM RSkKLQl7Ci0JCWlmICghQ29weU11bHRpSW5zZXJ0SW5mb0lzRW1wdHkoJm11bHRpSW5zZXJ0SW5m bykpCi0JCQlDb3B5TXVsdGlJbnNlcnRJbmZvRmx1c2goJm11bHRpSW5zZXJ0SW5mbywgTlVMTCk7 Ci0JfQorCQlDb3B5TXVsaXRJbnNlcnRGbHVzaEJ1ZmZlcnMoJm11bHRpX2luc2VydF9ycmlzLCBy ZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJY3N0YXRlLCBlc3RhdGUpOwogCiAJLyogRG9uZSwgY2xl YW4gdXAgKi8KIAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CiAK LQlpZiAoYmlzdGF0ZSAhPSBOVUxMKQotCQlGcmVlQnVsa0luc2VydFN0YXRlKGJpc3RhdGUpOwor CWlmIChpc3RhdGUpCisJCXRhYmxlX2luc2VydF9lbmQoaXN0YXRlKTsKIAogCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIApAQCAtMTE1NCw3ICs5NzgsNyBAQCBDb3B5RnJvbShD b3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAogCS8qIFRlYXIgZG93biB0aGUgbXVsdGktaW5zZXJ0IGJ1 ZmZlciBkYXRhICovCiAJaWYgKGluc2VydE1ldGhvZCAhPSBDSU1fU0lOR0xFKQotCQlDb3B5TXVs dGlJbnNlcnRJbmZvQ2xlYW51cCgmbXVsdGlJbnNlcnRJbmZvKTsKKwkJQ29weU11bGl0SW5zZXJ0 RHJvcEJ1ZmZlcnMobXVsdGlfaW5zZXJ0X3JyaXMpOwogCiAJLyogQ2xvc2UgYWxsIHRoZSBwYXJ0 aXRpb25lZCB0YWJsZXMsIGxlYWYgcGFydGl0aW9ucywgYW5kIHRoZWlyIGluZGljZXMgKi8KIAlp ZiAocHJvdXRlKQotLSAKMi4yNS4xCgo= --0000000000001804fa05bf3200ab--