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 1nysn3-0007dO-Ca for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jun 2022 10:19:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nysn2-0000Hh-7f for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jun 2022 10:19:52 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nysn1-0000HV-LR for pgsql-hackers@lists.postgresql.org; Wed, 08 Jun 2022 10:19:51 +0000 Received: from mail-io1-xd2a.google.com ([2607:f8b0:4864:20::d2a]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nysmy-0003bB-Ih for pgsql-hackers@postgresql.org; Wed, 08 Jun 2022 10:19:50 +0000 Received: by mail-io1-xd2a.google.com with SMTP id s26so8451040ioa.3 for ; Wed, 08 Jun 2022 03:19:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=TVkGjGFWKAT1nFfJVkT8Z1ayoYBfJwFnNYymv1/NaZg=; b=bL+Aia8gByNrPia50ofOLJUz4wqTyPBigPFGkqVnZSJJl2FCG97xt2atjapo/R9xX0 L13oT/uSIfCWC/HPf+4S6mpCcFzthmoM7HnDeioLJy7gPWogN/QfDbxja0Kqx1HazyF/ Iom5RMmhMl4s8uHCIdS7JcEVgCk9/cRSL8VsBL/itifb+4T1IOdWpSr+8WihnpwS/8mu p+RxiJ8pu+a5qgl6EM6StfsmLaTrg39QcP45/7Xy/yNSgPbnvfLC2dDjGYk2QISt1Emb tazubdyHpV1y1wG1M7ZB/QAufNoLiCXhQqAPHPvEdf6/z/F47eF/Vl1DXHviuekdujyL hXWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=TVkGjGFWKAT1nFfJVkT8Z1ayoYBfJwFnNYymv1/NaZg=; b=iUL3cLjpvyzA0d6tH2I7vw7xXa56ldT0eW2u29/mG9D7+ek3zZ6RWlC6zvDas93HiI 24exe2jRbTPcqKgGshR30FQD+pIGHlewNq0wmrscDc6KgBCD0lKFWgNKeLtSCGhwDbmK IY2E/Th97CNxva8/w63Uf1Jr6/HsiVBH9PuqdeFBJm3ea2kH7MykC11PZN2GEKjOGXDW a9+TlZ1GjjUdQwVc5lBsCoL8V49O3jYKxpWyBUyX3WO8yPQ3bzaFGe6TnLFpUKkAcBLd txqfIK56lQhgPI3yP4RflWSwvkch+hzwm3H4lfXMUqSBN3K2/Pr9ZqXJ2kOUEBSopEhU KpGA== X-Gm-Message-State: AOAM530+bnxvochU49cl7UKYuu6s/K7NUNbyvPsMdSEXfEw3gRi+lehk 3n25So2185Um0aKN8EUMnaiZM8HN+OgSdJ5ikE8= X-Google-Smtp-Source: ABdhPJzLh9h4Yp7pRcgQJKGYcE5Fqj0G8uge+iU+ymlKvAECQI1aVAGMXllqC8JtCOZTZJYyXCGiDVfSQaHIWR9hCdA= X-Received: by 2002:a05:6638:dcc:b0:32e:bfe7:95c6 with SMTP id m12-20020a0566380dcc00b0032ebfe795c6mr18364606jaj.245.1654683587808; Wed, 08 Jun 2022 03:19:47 -0700 (PDT) MIME-Version: 1.0 References: <381977b1-0898-cb6f-a427-3b5d873e81bd@enterprisedb.com> <231072.1654273317@sss.pgh.pa.us> <1874de62-6bec-4bc1-1d14-0a2730b125da@ardentperf.com> <366234.1654289888@sss.pgh.pa.us> <0867fe37-abbd-77ba-aafc-572074978bb0@amazon.com> In-Reply-To: From: Thomas Munro Date: Wed, 8 Jun 2022 22:19:11 +1200 Message-ID: Subject: Re: Collation version tracking for macOS To: Peter Geoghegan Cc: Jim Nasby , Tom Lane , Jeremy Schneider , Peter Eisentraut , pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000077ce8c05e0ed0b95" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000077ce8c05e0ed0b95 Content-Type: text/plain; charset="UTF-8" On Wed, Jun 8, 2022 at 12:23 PM Peter Geoghegan wrote: > ISTM that there are two mostly-distinct questions here: > > 1. How do we link to multiple versions of ICU at the same time, in a > way that is going to work smoothly on mainstream platforms? > > 2. What semantics around collations do we want for Postgres once we > gain the ability to use multiple versions of ICU at the same time? For > example, do we want to generalize the definition of a collation, so > that it's associated with one particular ICU version and collation for > the purposes of on-disk compatibility, but isn't necessarily tied to > the same ICU version in other contexts, such as on a dump and restore? Yeah. Well I couldn't resist doing some (very!) experimental hacking. See attached. The idea of putting a raw library name in there is just a straw-man, and I already found a major problem with it: I also need to get my hands on u_strToLower and friends for formatting.c, but those functions are in a different library that needs to be dlopen'd separately, so we need *two* names. That's not done in the attached patch, but at least this demonstrates some of the mechanics of a dlopen() based solution that can do the collating part... of course there are all kinds of problems apparent (security of loading arbitrary libraries, API stability, interaction with the "default" ICU that our binary is linked against, creation of initial set of collations in initdb, naming, upgrades, ...). Demo: $ sudo apt-get install libicu63 libicu67 postgres=# create schema icu63; CREATE SCHEMA postgres=# create schema icu67; CREATE SCHEMA postgres=# create collation icu63."en-US-x-icu" (provider = icu, locale = 'libicui18n.so.63:en-US'); CREATE COLLATION postgres=# create collation icu67."en-US-x-icu" (provider = icu, locale = 'libicui18n.so.67:en-US'); CREATE COLLATION postgres=# select collname, collnamespace::regnamespace, colliculocale, collversion from pg_collation where collname = 'en-US-x-icu'; collname | collnamespace | colliculocale | collversion -------------+---------------+------------------------+------------- en-US-x-icu | pg_catalog | en-US | 153.14 en-US-x-icu | icu63 | libicui18n.so.63:en-US | 153.88 en-US-x-icu | icu67 | libicui18n.so.67:en-US | 153.14 (3 rows) postgres=# select relname from pg_class order by relname collate icu63."en-US-x-icu" limit 2; relname --------------------------- _pg_foreign_data_wrappers _pg_foreign_servers (2 rows) --00000000000077ce8c05e0ed0b95 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-WIP-allow-multiple-ICU-libraries.patch" Content-Disposition: attachment; filename="0001-WIP-allow-multiple-ICU-libraries.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l45ftmgg0 RnJvbSA1NjIyZjI1MTcyODgxZTAyMWQwZjQzNmFkZDhhNzg1ZjllMzQ0NWU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgOCBKdW4gMjAyMiAxNzo0Mzo1MyArMTIwMApTdWJqZWN0OiBbUEFUQ0hdIFdJ UDogYWxsb3cgbXVsdGlwbGUgSUNVIGxpYnJhcmllcwoKWFhYIFRoaXMgaXMgaGlnaGx5IGV4cGVy aW1lbnRhbCBjb2RlCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGZ1bmMuYyB8ICAx NiArLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyAgfCAyMDkgKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJjaGFyLmMgICAg fCAgMTYgKy0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jICAgIHwgIDQ3ICsrKy0t LS0KIHNyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oICAgICAgfCAgNDcgKysrKysrKwogNSBm aWxlcyBjaGFuZ2VkLCAyODQgaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGZ1bmMuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2hmdW5jLmMKaW5kZXggYjU3ZWQ5NDZjNC4uYzE4NDcxNDlkZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGZ1bmMuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoZnVuYy5jCkBAIC0yOTgsMTEgKzI5OCwxMSBAQCBoYXNodGV4dChQ R19GVU5DVElPTl9BUkdTKQogCiAJCQl1bGVuID0gaWN1X3RvX3VjaGFyKCZ1Y2hhciwgVkFSREFU QV9BTlkoa2V5KSwgVkFSU0laRV9BTllfRVhIRFIoa2V5KSk7CiAKLQkJCWJzaXplID0gdWNvbF9n ZXRTb3J0S2V5KG15bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJdWNoYXIsIHVsZW4s IE5VTEwsIDApOworCQkJYnNpemUgPSBteWxvY2FsZS0+aW5mby5pY3UuZnVuY3MtPmdldFNvcnRL ZXkobXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCQkJCQkJCSB1Y2hhciwgdWxlbiwg TlVMTCwgMCk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCQkJdWNvbF9nZXRTb3J0S2V5KG15 bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVjaGFyLCB1bGVuLCBidWYsIGJzaXplKTsK KwkJCW15bG9jYWxlLT5pbmZvLmljdS5mdW5jcy0+Z2V0U29ydEtleShteWxvY2FsZS0+aW5mby5p Y3UudWNvbCwKKwkJCQkJCQkJCQkJCSB1Y2hhciwgdWxlbiwgYnVmLCBic2l6ZSk7CiAKIAkJCXJl c3VsdCA9IGhhc2hfYW55KGJ1ZiwgYnNpemUpOwogCkBAIC0zNTUsMTEgKzM1NSwxMSBAQCBoYXNo dGV4dGV4dGVuZGVkKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAkJCXVsZW4gPSBpY3VfdG9fdWNoYXIo JnVjaGFyLCBWQVJEQVRBX0FOWShrZXkpLCBWQVJTSVpFX0FOWV9FWEhEUihrZXkpKTsKIAotCQkJ YnNpemUgPSB1Y29sX2dldFNvcnRLZXkobXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJ CQl1Y2hhciwgdWxlbiwgTlVMTCwgMCk7CisJCQlic2l6ZSA9IG15bG9jYWxlLT5pbmZvLmljdS5m dW5jcy0+Z2V0U29ydEtleShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwkJCQkJCQkJCQkJCQkJ IHVjaGFyLCB1bGVuLCBOVUxMLCAwKTsKIAkJCWJ1ZiA9IHBhbGxvYyhic2l6ZSk7Ci0JCQl1Y29s X2dldFNvcnRLZXkobXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJdWNoYXIsIHVsZW4s IGJ1ZiwgYnNpemUpOworCQkJbXlsb2NhbGUtPmluZm8uaWN1LmZ1bmNzLT5nZXRTb3J0S2V5KG15 bG9jYWxlLT5pbmZvLmljdS51Y29sLAorCQkJCQkJCQkJCQkJIHVjaGFyLCB1bGVuLCBidWYsIGJz aXplKTsKIAogCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoYnVmLCBic2l6ZSwgUEdfR0VU QVJHX0lOVDY0KDEpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xv Y2FsZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCmluZGV4IGEwNDkwYTc1 MjIuLjNhODk1MWZlNDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2Nh bGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKQEAgLTc4LDYgKzc4 LDEwIEBACiAjaW5jbHVkZSA8c2hsd2FwaS5oPgogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX0RMT1BF TgorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKwogI2RlZmluZQkJTUFYX0wxME5fREFUQQkJ ODAKIAogCkBAIC0xNDM1LDI5ICsxNDM5LDIwNCBAQCBsY19jdHlwZV9pc19jKE9pZCBjb2xsYXRp b24pCiAJcmV0dXJuIChsb29rdXBfY29sbGF0aW9uX2NhY2hlKGNvbGxhdGlvbiwgdHJ1ZSkpLT5j dHlwZV9pc19jOwogfQogCisjaWZkZWYgVVNFX0lDVQorCiBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVj dCBkZWZhdWx0X2xvY2FsZTsKIAorLyogTGlua2VkIGxpc3Qgb2YgSUNVIGxpYnJhcmllcyB3ZSBo YXZlIGxvYWRlZC4gKi8KK3N0YXRpYyBwZ19pY3VfbGlicmFyeSAqaWN1X2xpYnJhcnlfbGlzdCA9 IE5VTEw7CisKK3N0YXRpYyB2b2lkCitmcmVlX2ljdV9saWJyYXJ5KHBnX2ljdV9saWJyYXJ5ICps KQoreworCWlmIChsLT5oYW5kbGUpCisJCWRsY2xvc2UobC0+aGFuZGxlKTsKKwlpZiAobC0+bmFt ZSkKKwkJcGZyZWUobC0+bmFtZSk7CisJcGZyZWUobCk7Cit9CisKK3N0YXRpYyB2b2lkICoKK2dl dF9pY3VfZnVuY3Rpb24odm9pZCAqaGFuZGxlLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgaW50IHZl cnNpb24pCit7CisJY2hhciBuYW1lWzgwXTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1l KSwgIiVzXyVkIiwgZnVuY3Rpb24sIHZlcnNpb24pOworCisJcmV0dXJuIGRsc3ltKGhhbmRsZSwg bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK2dldF9pY3VfbGlicmFyeV92ZXJzaW9uKGNvbnN0IGNo YXIgKm5hbWUsIHZvaWQgKmhhbmRsZSkKK3sKKwkvKgorCSAqIFByb2JlIHVudGlsIHdlIGZpbmQg dGhlIHN1ZmZpeCBiZWluZyB1c2VkLiAgU2luY2Ugd2UgZG9uJ3Qgd2FudCB0byB1c2UKKwkgKiBs aWJyYXJpZXMgdGhhdCBhcmUgbmV3ZXIgdGhhbiB0aGUgb25lIHdlIGFyZSBjb21waWxlZCBhZ2Fp bnN0IChuZXdlcgorCSAqIGxpYnJhcmllcyBtaWdodCBtYWtlIGluY29tcGF0aWJsZSBBUEkgY2hh bmdlcyksIHdlJ2xsIHNlYXJjaCBmcm9tIGEKKwkgKiBrbm93biBnb29kIGFuY2llbnQgdmVyc2lv biBudW1iZXIgdXAgdG8gdGhlIHZlcnNpb24gd2Ugd2VyZSBjb21waWxlZAorCSAqIHdpdGguCisJ ICovCisJZm9yIChpbnQgaSA9IDU0OyBpIDw9IFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNOyArK2kp CisJCWlmIChnZXRfaWN1X2Z1bmN0aW9uKGhhbmRsZSwgInVjb2xfb3BlbiIsIGkpKQorCQkJcmV0 dXJuIGk7CisKKwkvKiBFaXRoZXIgaXQncyBhIGxhdGVyIHZlcnNpb24gd2UgZG9uJ3QgZGFyZSB1 c2UsIG9yIG5vdCBJQ1UuICovCisJcmV0dXJuIC0xOworfQorCisvKgorICogR2l2ZW4gYSBsaWJy YXJ5IG5hbWUsIHJldHVybiB0aGUgb2JqZWN0IHdlIG5lZWQgdG8gY2FsbCBpdHMgZnVuY3Rpb25z LgorICovCitzdGF0aWMgcGdfaWN1X2xpYnJhcnkgKgorZ2V0X2ljdV9saWJyYXJ5KGNvbnN0IGNo YXIgKm5hbWUpCit7CisJcGdfaWN1X2xpYnJhcnkgKmw7CisKKwkvKiBUcnkgdG8gZmluZCBpdCBp biBvdXIgbGlzdCBvZiBleGlzdGluZyBsaWJyYXJpZXMuICovCisJZm9yIChsID0gaWN1X2xpYnJh cnlfbGlzdDsgbDsgbCA9IGwtPm5leHQpCisJeworCQlpZiAobmFtZSA9PSBOVUxMICYmIGwtPm5h bWUgPT0gTlVMTCkKKwkJCXJldHVybiBsOworCQlpZiAobmFtZSAhPSBOVUxMICYmIGwtPm5hbWUg IT0gTlVMTCAmJiBzdHJjbXAobmFtZSwgbC0+bmFtZSkgPT0gMCkKKwkJCXJldHVybiBsOworCX0K KworCS8qIE1ha2UgYSBuZXcgZW50cnkuICovCisJbCA9IE1lbW9yeUNvbnRleHRBbGxvY1plcm8o VG9wTWVtb3J5Q29udGV4dCwgc2l6ZW9mKCpsKSk7CisJaWYgKG5hbWUgIT0gTlVMTCkgeworI2lm ZGVmIEhBVkVfRExPUEVOCisJCWludCB2ZXJzaW9uOworCisJCWwtPm5hbWUgPSBNZW1vcnlDb250 ZXh0U3RyZHVwKFRvcE1lbW9yeUNvbnRleHQsIG5hbWUpOworCQlsLT5oYW5kbGUgPSBkbG9wZW4o bmFtZSwgUlRMRF9OT1cgfCBSVExEX0dMT0JBTCk7CisJCWlmIChsLT5oYW5kbGUgPT0gTlVMTCkK KwkJeworCQkJaW50IGVycm5vX3NhdmUgPSBlcnJubzsKKwkJCWZyZWVfaWN1X2xpYnJhcnkobCk7 CisJCQllcnJubyA9IGVycm5vX3NhdmU7CisKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJt c2coImNvdWxkIG5vdCBsb2FkIGxpYnJhcnkgXCIlc1wiOiAlbSIsIG5hbWUpKSk7CisJCX0KKwor CQkvKiBGaWd1cmUgb3V0IHdoaWNoIG1ham9yIHZlcnNpb24gdGhpcyBpcy4gKi8KKwkJdmVyc2lv biA9IGdldF9pY3VfbGlicmFyeV92ZXJzaW9uKG5hbWUsIGwtPmhhbmRsZSk7CisJCWlmICh2ZXJz aW9uIDwgMCkKKwkJeworCQkJZnJlZV9pY3VfbGlicmFyeShsKTsKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmaW5kIGNvbXBhdGlibGUgSUNVIHZlcnNpb24gaW4g bGlicmFyeSBcIiVzXCIiLAorCQkJCQkJCW5hbWUpKSk7CisJCX0KKwkJbC0+dmVyc2lvbiA9IHZl cnNpb247CisKKwkJLyogTG9vayB1cCBhbGwgdGhlIGZ1bmN0aW9ucyB3ZSBuZWVkLiAqLworCQls LT5vcGVuID0gZ2V0X2ljdV9mdW5jdGlvbihsLT5oYW5kbGUsICJ1Y29sX29wZW4iLCB2ZXJzaW9u KTsKKwkJbC0+Y2xvc2UgPSBnZXRfaWN1X2Z1bmN0aW9uKGwtPmhhbmRsZSwgInVjb2xfY2xvc2Ui LCB2ZXJzaW9uKTsKKwkJbC0+Z2V0VmVyc2lvbiA9IGdldF9pY3VfZnVuY3Rpb24obC0+aGFuZGxl LCAidWNvbF9nZXRWZXJzaW9uIiwgdmVyc2lvbik7CisJCWwtPnZlcnNpb25Ub1N0cmluZyA9IGdl dF9pY3VfZnVuY3Rpb24obC0+aGFuZGxlLCAidV92ZXJzaW9uVG9TdHJpbmciLAorCQkJCQkJCQkJ CQkgIHZlcnNpb24pOworCQlsLT5zdHJjb2xsID0gZ2V0X2ljdV9mdW5jdGlvbihsLT5oYW5kbGUs ICJ1Y29sX3N0cmNvbGwiLCB2ZXJzaW9uKTsKKwkJbC0+c3RyY29sbFVURjggPSBnZXRfaWN1X2Z1 bmN0aW9uKGwtPmhhbmRsZSwgInVjb2xfc3RyY29sbFVURjgiLAorCQkJCQkJCQkJCSAgdmVyc2lv bik7CisJCWwtPmdldFNvcnRLZXkgPSBnZXRfaWN1X2Z1bmN0aW9uKGwtPmhhbmRsZSwgInVjb2xf Z2V0U29ydEtleSIsCisJCQkJCQkJCQkJIHZlcnNpb24pOworCQlsLT5uZXh0U29ydEtleVBhcnQg PSBnZXRfaWN1X2Z1bmN0aW9uKGwtPmhhbmRsZSwgInVjb2xfbmV4dFNvcnRLZXlQYXJ0IiwKKwkJ CQkJCQkJCQkJICB2ZXJzaW9uKTsKKwkJbC0+ZXJyb3JOYW1lID0gZ2V0X2ljdV9mdW5jdGlvbihs LT5oYW5kbGUsICJ1X2Vycm9yTmFtZSIsIHZlcnNpb24pOworCQlpZiAoIWwtPm9wZW4gfHwKKwkJ CSFsLT5jbG9zZSB8fAorCQkJIWwtPmdldFZlcnNpb24gfHwKKwkJCSFsLT52ZXJzaW9uVG9TdHJp bmcgfHwKKwkJCSFsLT5zdHJjb2xsIHx8CisJCQkhbC0+c3RyY29sbFVURjggfHwKKwkJCSFsLT5n ZXRTb3J0S2V5IHx8CisJCQkhbC0+bmV4dFNvcnRLZXlQYXJ0IHx8CisJCQkhbC0+ZXJyb3JOYW1l KQorCQl7CisJCQlmcmVlX2ljdV9saWJyYXJ5KGwpOworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycm1zZygiY291bGQgbm90IGZpbmQgZXhwZWN0ZWQgc3ltYm9scyBpbiBsaWJyYXJ5IFwiJXNc IiIsCisJCQkJCQkJbmFtZSkpKTsKKwkJfQorI2Vsc2UKKwkJZXJlcG9ydChFUlJPUiwKKwkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCSBlcnJtc2coImxvYWRp bmcgZXh0cmEgSUNVIGxpYnJhcmllcyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQiKSkp OworI2VuZGlmCisJfQorCWVsc2UKKwl7CisJCS8qIFVzZSB0aGUgbGlicmFyeSB3ZSB3ZXJlIGNv bXBpbGVkIGFuZCBsaW5rZWQgd2l0aC4gKi8KKwkJbC0+b3BlbiA9IHVjb2xfb3BlbjsKKwkJbC0+ Y2xvc2UgPSB1Y29sX2Nsb3NlOworCQlsLT5nZXRWZXJzaW9uID0gdWNvbF9nZXRWZXJzaW9uOwor CQlsLT52ZXJzaW9uVG9TdHJpbmcgPSB1X3ZlcnNpb25Ub1N0cmluZzsKKwkJbC0+c3RyY29sbCA9 IHVjb2xfc3RyY29sbDsKKwkJbC0+c3RyY29sbFVURjggPSB1Y29sX3N0cmNvbGxVVEY4OworCQls LT5nZXRTb3J0S2V5ID0gdWNvbF9nZXRTb3J0S2V5OworCQlsLT5uZXh0U29ydEtleVBhcnQgPSB1 Y29sX25leHRTb3J0S2V5UGFydDsKKwkJbC0+ZXJyb3JOYW1lID0gdV9lcnJvck5hbWU7CisJfQor CWwtPm5leHQgPSBpY3VfbGlicmFyeV9saXN0OworCWljdV9saWJyYXJ5X2xpc3QgPSBsOworCisJ cmV0dXJuIGw7Cit9CisKKy8qCisgKiBMb29rIHVwIHRoZSBsaWJyYXJ5IHRvIHVzZSBmb3IgYSBn aXZlbiBjb2xsY29sbGF0ZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBwZ19pY3VfbGlicmFyeSAqCitn ZXRfaWN1X2xpYnJhcnlfZm9yX2NvbGxhdGlvbihjb25zdCBjaGFyICpjb2xsY29sbGF0ZSwgY29u c3QgY2hhciAqKnJlc3QpCit7CisJY2hhciBwcmVmaXhbTUFYUEdQQVRIXTsKKwljaGFyICpzZXBh cmF0b3I7CisJc2l6ZV90IHByZWZpeF9sZW47CisKKwlzZXBhcmF0b3IgPSBzdHJjaHIoY29sbGNv bGxhdGUsICc6Jyk7CisKKwkvKiBJZiBpdCdzIGEgdHJhZGl0aW9uYWwgdmFsdWUgd2l0aG91dCBh IHByZWZpeCwgdXNlIGRlZmF1bHQgbGlicmFyeS4gKi8KKwlpZiAoc2VwYXJhdG9yID09IE5VTEwp CisJeworCQkqcmVzdCA9IGNvbGxjb2xsYXRlOworCQlyZXR1cm4gZ2V0X2ljdV9saWJyYXJ5KE5V TEwpOworCX0KKworCS8qIElmIGl0IGhhcyBhIHByZWZpeCwgd2UgbG9vayB0aGF0IGxpYnJhcnkg dXAuICovCisJcHJlZml4X2xlbiA9IHNlcGFyYXRvciAtIGNvbGxjb2xsYXRlOworCXN0cm5jcHko cHJlZml4LCBjb2xsY29sbGF0ZSwgcHJlZml4X2xlbik7CisJcHJlZml4W3ByZWZpeF9sZW5dID0g MDsKKwkqcmVzdCA9IHNlcGFyYXRvciArIDE7CisJcmV0dXJuIGdldF9pY3VfbGlicmFyeShwcmVm aXgpOworfQorCisjZW5kaWYKKwogdm9pZAogbWFrZV9pY3VfY29sbGF0b3IoY29uc3QgY2hhciAq aWN1bG9jc3RyLAogCQkJCSAgc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QgKnJlc3VsdHApCiB7CiAj aWZkZWYgVVNFX0lDVQorCXBnX2ljdV9saWJyYXJ5ICpsOwogCVVDb2xsYXRvciAgKmNvbGxhdG9y OwogCVVFcnJvckNvZGUJc3RhdHVzOwogCisJbCA9IGdldF9pY3VfbGlicmFyeV9mb3JfY29sbGF0 aW9uKGljdWxvY3N0ciwgJmljdWxvY3N0cik7CiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCWNv bGxhdG9yID0gdWNvbF9vcGVuKGljdWxvY3N0ciwgJnN0YXR1cyk7CisJY29sbGF0b3IgPSBsLT5v cGVuKGljdWxvY3N0ciwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9yIGZvciBsb2Nh bGUgXCIlc1wiOiAlcyIsCi0JCQkJCQlpY3Vsb2NzdHIsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7 CisJCQkJCQlpY3Vsb2NzdHIsIGwtPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCi0JaWYgKFVfSUNV X1ZFUlNJT05fTUFKT1JfTlVNIDwgNTQpCisJaWYgKGwtPnZlcnNpb24gPCA1NCkKIAkJaWN1X3Nl dF9jb2xsYXRpb25fYXR0cmlidXRlcyhjb2xsYXRvciwgaWN1bG9jc3RyKTsKIAogCS8qIFdlIHdp bGwgbGVhayB0aGlzIHN0cmluZyBpZiB0aGUgY2FsbGVyIGVycm9ycyBsYXRlciA6LSggKi8KIAly ZXN1bHRwLT5pbmZvLmljdS5sb2NhbGUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKFRvcE1lbW9yeUNv bnRleHQsIGljdWxvY3N0cik7CiAJcmVzdWx0cC0+aW5mby5pY3UudWNvbCA9IGNvbGxhdG9yOwor CXJlc3VsdHAtPmluZm8uaWN1LmZ1bmNzID0gbDsKICNlbHNlCQkJCQkJCS8qIG5vdCBVU0VfSUNV ICovCiAJLyogY291bGQgZ2V0IGhlcmUgaWYgYSBjb2xsYXRpb24gd2FzIGNyZWF0ZWQgYnkgYSBi dWlsZCB3aXRoIElDVSAqLwogCWVyZXBvcnQoRVJST1IsCkBAIC0xNjg4LDIxICsxODY3LDIzIEBA IGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNo YXIgKmNvbGxjb2xsYXRlKQogI2lmZGVmIFVTRV9JQ1UKIAlpZiAoY29sbHByb3ZpZGVyID09IENP TExQUk9WSURFUl9JQ1UpCiAJeworCQlwZ19pY3VfbGlicmFyeSAqbDsKIAkJVUNvbGxhdG9yICAq Y29sbGF0b3I7CiAJCVVFcnJvckNvZGUJc3RhdHVzOwogCQlVVmVyc2lvbkluZm8gdmVyc2lvbmlu Zm87CiAJCWNoYXIJCWJ1ZltVX01BWF9WRVJTSU9OX1NUUklOR19MRU5HVEhdOwogCisJCWwgPSBn ZXRfaWN1X2xpYnJhcnlfZm9yX2NvbGxhdGlvbihjb2xsY29sbGF0ZSwgJmNvbGxjb2xsYXRlKTsK IAkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQljb2xsYXRvciA9IHVjb2xfb3Blbihjb2xsY29s bGF0ZSwgJnN0YXR1cyk7CisJCWNvbGxhdG9yID0gbC0+b3Blbihjb2xsY29sbGF0ZSwgJnN0YXR1 cyk7CiAJCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShl cnJtc2coImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9yIGZvciBsb2NhbGUgXCIlc1wiOiAlcyIsCi0J CQkJCQkJY29sbGNvbGxhdGUsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7Ci0JCXVjb2xfZ2V0VmVy c2lvbihjb2xsYXRvciwgdmVyc2lvbmluZm8pOwotCQl1Y29sX2Nsb3NlKGNvbGxhdG9yKTsKKwkJ CQkJCQljb2xsY29sbGF0ZSwgbC0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCWwtPmdldFZlcnNp b24oY29sbGF0b3IsIHZlcnNpb25pbmZvKTsKKwkJbC0+Y2xvc2UoY29sbGF0b3IpOwogCi0JCXVf dmVyc2lvblRvU3RyaW5nKHZlcnNpb25pbmZvLCBidWYpOworCQlsLT52ZXJzaW9uVG9TdHJpbmco dmVyc2lvbmluZm8sIGJ1Zik7CiAJCWNvbGx2ZXJzaW9uID0gcHN0cmR1cChidWYpOwogCX0KIAll bHNlCkBAIC0xNzcwLDYgKzE5NTEsOCBAQCBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNo YXIgY29sbHByb3ZpZGVyLCBjb25zdCBjaGFyICpjb2xsY29sbGF0ZSkKIAogCiAjaWZkZWYgVVNF X0lDVQorCisKIC8qCiAgKiBDb252ZXJ0ZXIgb2JqZWN0IGZvciBjb252ZXJ0aW5nIGJldHdlZW4g SUNVJ3MgVUNoYXIgc3RyaW5ncyBhbmQgQyBzdHJpbmdzCiAgKiBpbiBkYXRhYmFzZSBlbmNvZGlu Zy4gIFNpbmNlIHRoZSBkYXRhYmFzZSBlbmNvZGluZyBkb2Vzbid0IGNoYW5nZSwgd2Ugb25seQpA QCAtMTk5MSwxOSArMjE3NCwyMSBAQCB2b2lkCiBjaGVja19pY3VfbG9jYWxlKGNvbnN0IGNoYXIg KmljdV9sb2NhbGUpCiB7CiAjaWZkZWYgVVNFX0lDVQorCXBnX2ljdV9saWJyYXJ5ICpsOwogCVVD b2xsYXRvciAgKmNvbGxhdG9yOwogCVVFcnJvckNvZGUJc3RhdHVzOwogCisJbCA9IGdldF9pY3Vf bGlicmFyeV9mb3JfY29sbGF0aW9uKGljdV9sb2NhbGUsICZpY3VfbG9jYWxlKTsKIAlzdGF0dXMg PSBVX1pFUk9fRVJST1I7Ci0JY29sbGF0b3IgPSB1Y29sX29wZW4oaWN1X2xvY2FsZSwgJnN0YXR1 cyk7CisJY29sbGF0b3IgPSBsLT5vcGVuKGljdV9sb2NhbGUsICZzdGF0dXMpOwogCWlmIChVX0ZB SUxVUkUoc3RhdHVzKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJjb3VsZCBub3Qg b3BlbiBjb2xsYXRvciBmb3IgbG9jYWxlIFwiJXNcIjogJXMiLAotCQkJCQkJaWN1X2xvY2FsZSwg dV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJCQkJCWljdV9sb2NhbGUsIGwtPmVycm9yTmFtZShz dGF0dXMpKSkpOwogCi0JaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNTQpCisJaWYgKGwt PnZlcnNpb24gPCA1NCkKIAkJaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhjb2xsYXRvciwg aWN1X2xvY2FsZSk7Ci0JdWNvbF9jbG9zZShjb2xsYXRvcik7CisJbC0+Y2xvc2UoY29sbGF0b3Ip OwogI2Vsc2UKIAllcmVwb3J0KEVSUk9SLAogCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJjaGFyLmMKaW5kZXggYmJlYjBhMjY1My4uNDgx NTI3NWZmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5jCkBAIC0xMDI1LDExICsxMDI1LDExIEBA IGhhc2hicGNoYXIoUEdfRlVOQ1RJT05fQVJHUykKIAogCQkJdWxlbiA9IGljdV90b191Y2hhcigm dWNoYXIsIGtleWRhdGEsIGtleWxlbik7CiAKLQkJCWJzaXplID0gdWNvbF9nZXRTb3J0S2V5KG15 bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJdWNoYXIsIHVsZW4sIE5VTEwsIDApOwor CQkJYnNpemUgPSBteWxvY2FsZS0+aW5mby5pY3UuZnVuY3MtPmdldFNvcnRLZXkobXlsb2NhbGUt PmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCQkJCQkJCSB1Y2hhciwgdWxlbiwgTlVMTCwgMCk7CiAJ CQlidWYgPSBwYWxsb2MoYnNpemUpOwotCQkJdWNvbF9nZXRTb3J0S2V5KG15bG9jYWxlLT5pbmZv LmljdS51Y29sLAotCQkJCQkJCXVjaGFyLCB1bGVuLCBidWYsIGJzaXplKTsKKwkJCW15bG9jYWxl LT5pbmZvLmljdS5mdW5jcy0+Z2V0U29ydEtleShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwkJ CQkJCQkJCQkJCSB1Y2hhciwgdWxlbiwgYnVmLCBic2l6ZSk7CiAKIAkJCXJlc3VsdCA9IGhhc2hf YW55KGJ1ZiwgYnNpemUpOwogCkBAIC0xMDg2LDExICsxMDg2LDExIEBAIGhhc2hicGNoYXJleHRl bmRlZChQR19GVU5DVElPTl9BUkdTKQogCiAJCQl1bGVuID0gaWN1X3RvX3VjaGFyKCZ1Y2hhciwg VkFSREFUQV9BTlkoa2V5KSwgVkFSU0laRV9BTllfRVhIRFIoa2V5KSk7CiAKLQkJCWJzaXplID0g dWNvbF9nZXRTb3J0S2V5KG15bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJdWNoYXIs IHVsZW4sIE5VTEwsIDApOworCQkJYnNpemUgPSBteWxvY2FsZS0+aW5mby5pY3UuZnVuY3MtPmdl dFNvcnRLZXkobXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCQkJCQkJCSB1Y2hhciwg dWxlbiwgTlVMTCwgMCk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCQkJdWNvbF9nZXRTb3J0 S2V5KG15bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVjaGFyLCB1bGVuLCBidWYsIGJz aXplKTsKKwkJCW15bG9jYWxlLT5pbmZvLmljdS5mdW5jcy0+Z2V0U29ydEtleShteWxvY2FsZS0+ aW5mby5pY3UudWNvbCwKKwkJCQkJCQkJCQkJCSB1Y2hhciwgdWxlbiwgYnVmLCBic2l6ZSk7CiAK IAkJCXJlc3VsdCA9IGhhc2hfYW55X2V4dGVuZGVkKGJ1ZiwgYnNpemUsIFBHX0dFVEFSR19JTlQ2 NCgxKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCmluZGV4IDkxOTEzOGVhZjMuLmY5MzNlYzBk ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwpAQCAtMTY2NiwxMCArMTY2NiwxMCBAQCB2YXJz dHJfY21wKGNvbnN0IGNoYXIgKmFyZzEsIGludCBsZW4xLCBjb25zdCBjaGFyICphcmcyLCBpbnQg bGVuMiwgT2lkIGNvbGxpZCkKIAkJCQkJVUVycm9yQ29kZQlzdGF0dXM7CiAKIAkJCQkJc3RhdHVz ID0gVV9aRVJPX0VSUk9SOwotCQkJCQlyZXN1bHQgPSB1Y29sX3N0cmNvbGxVVEY4KG15bG9jYWxl LT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJCQkgIGFyZzEsIGxlbjEsCi0JCQkJCQkJCQkJCSAg YXJnMiwgbGVuMiwKLQkJCQkJCQkJCQkJICAmc3RhdHVzKTsKKwkJCQkJcmVzdWx0ID0gbXlsb2Nh bGUtPmluZm8uaWN1LmZ1bmNzLT5zdHJjb2xsVVRGOChteWxvY2FsZS0+aW5mby5pY3UudWNvbCwK KwkJCQkJCQkJCQkJCQkJCQkgICBhcmcxLCBsZW4xLAorCQkJCQkJCQkJCQkJCQkJCSAgIGFyZzIs IGxlbjIsCisJCQkJCQkJCQkJCQkJCQkJICAgJnN0YXR1cyk7CiAJCQkJCWlmIChVX0ZBSUxVUkUo c3RhdHVzKSkKIAkJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJCShlcnJtc2coImNvbGxhdGlv biBmYWlsZWQ6ICVzIiwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKQEAgLTE2ODUsOSArMTY4NSw5 IEBAIHZhcnN0cl9jbXAoY29uc3QgY2hhciAqYXJnMSwgaW50IGxlbjEsIGNvbnN0IGNoYXIgKmFy ZzIsIGludCBsZW4yLCBPaWQgY29sbGlkKQogCQkJCQl1bGVuMSA9IGljdV90b191Y2hhcigmdWNo YXIxLCBhcmcxLCBsZW4xKTsKIAkJCQkJdWxlbjIgPSBpY3VfdG9fdWNoYXIoJnVjaGFyMiwgYXJn MiwgbGVuMik7CiAKLQkJCQkJcmVzdWx0ID0gdWNvbF9zdHJjb2xsKG15bG9jYWxlLT5pbmZvLmlj dS51Y29sLAotCQkJCQkJCQkJCSAgdWNoYXIxLCB1bGVuMSwKLQkJCQkJCQkJCQkgIHVjaGFyMiwg dWxlbjIpOworCQkJCQlyZXN1bHQgPSBteWxvY2FsZS0+aW5mby5pY3UuZnVuY3MtPnN0cmNvbGwo bXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCQkJCQkJCQkgICB1Y2hhcjEsIHVsZW4x LAorCQkJCQkJCQkJCQkJCQkJICAgdWNoYXIyLCB1bGVuMik7CiAKIAkJCQkJcGZyZWUodWNoYXIx KTsKIAkJCQkJcGZyZWUodWNoYXIyKTsKQEAgLTIzODksMTAgKzIzODksMTAgQEAgdmFyc3RyZmFz dGNtcF9sb2NhbGUoY2hhciAqYTFwLCBpbnQgbGVuMSwgY2hhciAqYTJwLCBpbnQgbGVuMiwgU29y dFN1cHBvcnQgc3N1cCkKIAkJCQlVRXJyb3JDb2RlCXN0YXR1czsKIAogCQkJCXN0YXR1cyA9IFVf WkVST19FUlJPUjsKLQkJCQlyZXN1bHQgPSB1Y29sX3N0cmNvbGxVVEY4KHNzcy0+bG9jYWxlLT5p bmZvLmljdS51Y29sLAotCQkJCQkJCQkJCSAgYTFwLCBsZW4xLAotCQkJCQkJCQkJCSAgYTJwLCBs ZW4yLAotCQkJCQkJCQkJCSAgJnN0YXR1cyk7CisJCQkJcmVzdWx0ID0gc3NzLT5sb2NhbGUtPmlu Zm8uaWN1LmZ1bmNzLT5zdHJjb2xsVVRGOChzc3MtPmxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwkJ CQkJCQkJCQkJCQkJCQkgIGExcCwgbGVuMSwKKwkJCQkJCQkJCQkJCQkJCQkgIGEycCwgbGVuMiwK KwkJCQkJCQkJCQkJCQkJCQkgICZzdGF0dXMpOwogCQkJCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkK IAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkoZXJybXNnKCJjb2xsYXRpb24gZmFpbGVkOiAl cyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CkBAIC0yNDA4LDkgKzI0MDgsOSBAQCB2YXJzdHJm YXN0Y21wX2xvY2FsZShjaGFyICphMXAsIGludCBsZW4xLCBjaGFyICphMnAsIGludCBsZW4yLCBT b3J0U3VwcG9ydCBzc3VwKQogCQkJCXVsZW4xID0gaWN1X3RvX3VjaGFyKCZ1Y2hhcjEsIGExcCwg bGVuMSk7CiAJCQkJdWxlbjIgPSBpY3VfdG9fdWNoYXIoJnVjaGFyMiwgYTJwLCBsZW4yKTsKIAot CQkJCXJlc3VsdCA9IHVjb2xfc3RyY29sbChzc3MtPmxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJ CQkJCQkJCSAgdWNoYXIxLCB1bGVuMSwKLQkJCQkJCQkJCSAgdWNoYXIyLCB1bGVuMik7CisJCQkJ cmVzdWx0ID0gc3NzLT5sb2NhbGUtPmluZm8uaWN1LmZ1bmNzLT5zdHJjb2xsKHNzcy0+bG9jYWxl LT5pbmZvLmljdS51Y29sLAorCQkJCQkJCQkJCQkJCQkJICB1Y2hhcjEsIHVsZW4xLAorCQkJCQkJ CQkJCQkJCQkJICB1Y2hhcjIsIHVsZW4yKTsKIAogCQkJCXBmcmVlKHVjaGFyMSk7CiAJCQkJcGZy ZWUodWNoYXIyKTsKQEAgLTI1NzQsMjEgKzI1NzQsMjIgQEAgdmFyc3RyX2FiYnJldl9jb252ZXJ0 KERhdHVtIG9yaWdpbmFsLCBTb3J0U3VwcG9ydCBzc3VwKQogCQkJCQl1aXRlcl9zZXRVVEY4KCZp dGVyLCBzc3MtPmJ1ZjEsIGxlbik7CiAJCQkJCXN0YXRlWzBdID0gc3RhdGVbMV0gPSAwOwkvKiB3 b24ndCBuZWVkIHRoYXQgYWdhaW4gKi8KIAkJCQkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQkJ CQlic2l6ZSA9IHVjb2xfbmV4dFNvcnRLZXlQYXJ0KHNzcy0+bG9jYWxlLT5pbmZvLmljdS51Y29s LAotCQkJCQkJCQkJCQkJICZpdGVyLAotCQkJCQkJCQkJCQkJIHN0YXRlLAotCQkJCQkJCQkJCQkJ ICh1aW50OF90ICopIHNzcy0+YnVmMiwKLQkJCQkJCQkJCQkJCSBNaW4oc2l6ZW9mKERhdHVtKSwg c3NzLT5idWZsZW4yKSwKLQkJCQkJCQkJCQkJCSAmc3RhdHVzKTsKKwkJCQkJYnNpemUgPQorCQkJ CQkJc3NzLT5sb2NhbGUtPmluZm8uaWN1LmZ1bmNzLT5uZXh0U29ydEtleVBhcnQoc3NzLT5sb2Nh bGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCQkJCQkJCQkJCSAmaXRlciwKKwkJCQkJCQkJCQkJ CQkJCQkJIHN0YXRlLAorCQkJCQkJCQkJCQkJCQkJCQkgKHVpbnQ4X3QgKikgc3NzLT5idWYyLAor CQkJCQkJCQkJCQkJCQkJCQkgTWluKHNpemVvZihEYXR1bSksIHNzcy0+YnVmbGVuMiksCisJCQkJ CQkJCQkJCQkJCQkJCSAmc3RhdHVzKTsKIAkJCQkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQkJ CQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkJKGVycm1zZygic29ydCBrZXkgZ2VuZXJhdGlvbiBm YWlsZWQ6ICVzIiwKIAkJCQkJCQkJCQl1X2Vycm9yTmFtZShzdGF0dXMpKSkpOwogCQkJCX0KIAkJ CQllbHNlCi0JCQkJCWJzaXplID0gdWNvbF9nZXRTb3J0S2V5KHNzcy0+bG9jYWxlLT5pbmZvLmlj dS51Y29sLAotCQkJCQkJCQkJCQl1Y2hhciwgdWxlbiwKLQkJCQkJCQkJCQkJKHVpbnQ4X3QgKikg c3NzLT5idWYyLCBzc3MtPmJ1ZmxlbjIpOworCQkJCQlic2l6ZSA9IHNzcy0+bG9jYWxlLT5pbmZv LmljdS5mdW5jcy0+Z2V0U29ydEtleShzc3MtPmxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwkJCQkJ CQkJCQkJCQkJCQkJdWNoYXIsIHVsZW4sCisJCQkJCQkJCQkJCQkJCQkJCSh1aW50OF90ICopIHNz cy0+YnVmMiwgc3NzLT5idWZsZW4yKTsKIAkJCX0KIAkJCWVsc2UKICNlbmRpZgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ19s b2NhbGUuaAppbmRleCBlNzM4NWZhZWY4Li5kYTUzM2ZjYjkxIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9wZ19sb2NhbGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUu aApAQCAtNzQsNiArNzQsNTIgQEAgZXh0ZXJuIHN0cnVjdCBsY29udiAqUEdMQ19sb2NhbGVjb252 KHZvaWQpOwogCiBleHRlcm4gdm9pZCBjYWNoZV9sb2NhbGVfdGltZSh2b2lkKTsKIAorI2lmZGVm IFVTRV9JQ1UKKworLyoKKyAqIEFuIElDVSBsaWJyYXJ5IHZlcnNpb24gdGhhdCB3ZSdyZSBlaXRo ZXIgbGlua2VkIGFnYWluc3Qgb3IgaGF2ZSBsb2FkZWQgYXQKKyAqIHJ1bnRpbWUuCisgKi8KK3R5 cGVkZWYgc3RydWN0IHBnX2ljdV9saWJyYXJ5Cit7CisJY2hhcgkgICAqbmFtZTsJCQkvKiBpZiBs b2FkZWQgd2l0aCBkbG9wZW4oKSAqLworCXZvaWQJICAgKmhhbmRsZTsJCQkvKiBpZiBsb2FkZWQg d2l0aCBkbG9wZW4oKSAqLworCWludAkJCXZlcnNpb247CQkvKiBtYWpvciB2ZXJzaW9uIG9mIElD VSAqLworCVVDb2xsYXRvciAqKCpvcGVuKShjb25zdCBjaGFyICpsb2MsIFVFcnJvckNvZGUgKnN0 YXR1cyk7CisJdm9pZCAoKmNsb3NlKShVQ29sbGF0b3IgKmNvbGwpOworCXZvaWQgKCpnZXRWZXJz aW9uKShjb25zdCBVQ29sbGF0b3IgKmNvbGwsIFVWZXJzaW9uSW5mbyBpbmZvKTsKKwl2b2lkICgq dmVyc2lvblRvU3RyaW5nKShjb25zdCBVVmVyc2lvbkluZm8gdmVyc2lvbkFycmF5LAorCQkJCQkJ CWNoYXIgKnZlcnNpb25TdHJpbmcpOworCVVDb2xsYXRpb25SZXN1bHQgKCpzdHJjb2xsKShjb25z dCBVQ29sbGF0b3IgKmNvbGwsCisJCQkJCQkJCWNvbnN0IFVDaGFyICpzb3VyY2UsCisJCQkJCQkJ CWludDMyX3Qgc291cmNlTGVuZ3RoLAorCQkJCQkJCQljb25zdCBVQ2hhciAqdGFyZ2V0LAorCQkJ CQkJCQlpbnQzMl90IHRhcmdldExlbmd0aCk7CisJVUNvbGxhdGlvblJlc3VsdCAoKnN0cmNvbGxV VEY4KShjb25zdCBVQ29sbGF0b3IgKmNvbGwsCisJCQkJCQkJCQljb25zdCBjaGFyICpzb3VyY2Us CisJCQkJCQkJCQlpbnQzMl90IHNvdXJjZUxlbmd0aCwKKwkJCQkJCQkJCWNvbnN0IGNoYXIgKnRh cmdldCwKKwkJCQkJCQkJCWludDMyX3QgdGFyZ2V0TGVuZ3RoLAorCQkJCQkJCQkJVUVycm9yQ29k ZSAqc3RhdHVzKTsKKwlpbnQzMl90ICgqZ2V0U29ydEtleSkoY29uc3QgVUNvbGxhdG9yICpjb2xs LAorCQkJCQkJICBjb25zdCBVQ2hhciAqc291cmNlLAorCQkJCQkJICBpbnQzMl90IHNvdXJjZUxl bmd0aCwKKwkJCQkJCSAgdWludDhfdCAqcmVzdWx0LAorCQkJCQkJICBpbnQzMl90IHJlc3VsdExl bmd0aCk7CisJaW50MzJfdCAoKm5leHRTb3J0S2V5UGFydCkoY29uc3QgVUNvbGxhdG9yICpjb2xs LAorCQkJCQkJCSAgIFVDaGFySXRlcmF0b3IgKml0ZXIsCisJCQkJCQkJICAgdWludDMyX3Qgc3Rh dGVbMl0sCisJCQkJCQkJICAgdWludDhfdCAqZGVzdCwKKwkJCQkJCQkgICBpbnQzMl90IGNvdW50 LAorCQkJCQkJCSAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisJY29uc3QgY2hhciAqKCplcnJvck5h bWUpKFVFcnJvckNvZGUgY29kZSk7CisvKgorCVVWZXJzaW9uSW5mbyAoKnZlcnNpb25pbmZvKQor Ki8KKwlzdHJ1Y3QgcGdfaWN1X2xpYnJhcnkgKm5leHQ7Cit9IHBnX2ljdV9saWJyYXJ5OworCisj ZW5kaWYKIAogLyoKICAqIFdlIGRlZmluZSBvdXIgb3duIHdyYXBwZXIgYXJvdW5kIGxvY2FsZV90 IHNvIHdlIGNhbiBrZWVwIHRoZSBzYW1lCkBAIC05NSw2ICsxNDEsNyBAQCBzdHJ1Y3QgcGdfbG9j YWxlX3N0cnVjdAogCQl7CiAJCQljb25zdCBjaGFyICpsb2NhbGU7CiAJCQlVQ29sbGF0b3IgICp1 Y29sOworCQkJcGdfaWN1X2xpYnJhcnkgKmZ1bmNzOwogCQl9CQkJaWN1OwogI2VuZGlmCiAJCWlu dAkJCWR1bW15OwkJLyogaW4gY2FzZSB3ZSBoYXZlIG5laXRoZXIgTE9DQUxFX1Qgbm9yIElDVSAq LwotLSAKMi4zMC4yCgo= --00000000000077ce8c05e0ed0b95--