Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r0XlB-006FgY-1h for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Nov 2023 01:53:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r0Xl9-00EhG2-7L for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Nov 2023 01:53:35 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r0Xl8-00EhEa-I3 for pgsql-hackers@lists.postgresql.org; Wed, 08 Nov 2023 01:53:34 +0000 Received: from mail-ua1-x92a.google.com ([2607:f8b0:4864:20::92a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r0Xl4-005GpM-7d for pgsql-hackers@lists.postgresql.org; Wed, 08 Nov 2023 01:53:33 +0000 Received: by mail-ua1-x92a.google.com with SMTP id a1e0cc1a2514c-7ba12f0856aso215924241.0 for ; Tue, 07 Nov 2023 17:53:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1699408408; x=1700013208; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=fz+m8Z8kcTpJ/8am8v80ktn6zTeEqXjTbBDOb/J+Id4=; b=aakfGaJmn/2QYnLwksjA6dchKno/1PgzWWgR3dfY6TMzyoJsWcWKWkZQ+SLqFgRW3H eORiR07gmJKQlay8kZ+1gZkFzNE87d3WvaQDQoYWsNBxM6woRDcdQpYrx8x7dTvOz9Cp QQjbKLrfQsbEtn6+naNwN/UdXRC7lpg+P5/sgbu9shx4A7invVjqes3VuxG7xZea80wT Xln1Ilmj/lqu49sH77zy5RolfPMWWOZGQOStQRLTn7qaRrp0GrS/CCFutni1T2xBV1jU dZN+uwQPAfssdIbq7TA7YuLLZiRIvu40L9ZloSBsHXuVmmsPDnAHSnVuA+TwGHzamIBE JvZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699408408; x=1700013208; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fz+m8Z8kcTpJ/8am8v80ktn6zTeEqXjTbBDOb/J+Id4=; b=Jj8m4LFbeLlrDWitWnFENu9bB752eQRo30FJAPEGQhy8NtkXa7gS5JYFjHKDpz33KL ws8v1VGx58qFtJoy0Rt9AnA60P3HNGckXZLMoIwoNS1FkOzdmj8BrOvbTpK9Hthtk7ET CKsvSpg8pzdhK8lT+bv0+gTPsJkU+H/+nB/14Yo6MHXCcGiHrTa/yZL1p64rh/dLzkV0 0YWSTUpGsOA63qd7Hp/ThfyOMapDlSwr19rAV3hOxb1keOuf52QxYQ86kF5WhrXO10w8 TrvjcfHm/2aJQgrLxrTZgqRs/OAsHEVBUS455xYKUb6qMlUfNlbywuDPfXE29D3e0LXR zVMA== X-Gm-Message-State: AOJu0YyC2BaqrquVVeFcmBEK+t78C4W7KUJH9gZ4qa4Vn6OaCXnvB61K DBPMzEW4NGiZtlphMEXwfsfV8j3ugqJ/8fJpKO7H1w== X-Google-Smtp-Source: AGHT+IE0S3Ce59UWNqUUD9dL/jd6N+Cs3JkM716qv3THofETOQfdskteCaIlst8GIyWh/bvQHEL1DAg19+CcpNFoct8= X-Received: by 2002:a05:6102:3d8c:b0:45e:150:ecb3 with SMTP id h12-20020a0561023d8c00b0045e0150ecb3mr226166vsv.10.1699408407943; Tue, 07 Nov 2023 17:53:27 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Peter Geoghegan Date: Tue, 7 Nov 2023 17:53:01 -0800 Message-ID: Subject: Re: Optimizing nbtree ScalarArrayOp execution, allowing multi-column ordered scans, skip scan To: Matthias van de Meent Cc: PostgreSQL Hackers , Tom Lane , Tomas Vondra , Jeff Davis , benoit , Alexander Korotkov Content-Type: multipart/mixed; boundary="0000000000007c0d9e06099a5a50" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007c0d9e06099a5a50 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Nov 7, 2023 at 4:20=E2=80=AFAM Matthias van de Meent wrote: > On Tue, 7 Nov 2023 at 00:03, Peter Geoghegan wrote: > > I should be able to post v6 later this week. My current plan is to > > commit the other nbtree patch first (the backwards scan "boundary > > cases" one from the ongoing CF) -- since I saw your review earlier > > today. I think that you should probably wait for this v6 before > > starting your review. > > Okay, thanks for the update, then I'll wait for v6 to be posted. On second thought, I'll just post v6 now (there won't be conflicts against the master branch once the other patch is committed anyway). Highlights: * Major simplifications to the array key state machine, already described by my recent email. * Added preprocessing of "redundant and contradictory" array elements to _bt_preprocess_array_keys(). This makes the special preprocessing pass just for array keys ("preprocessing preprocessing") within _bt_preprocess_array_keys() make this query into a no-op: select * from tab where a in (180, 345) and a in (230, 300); -- contradicto= ry Similarly, it can make this query only attempt one single primitive index scan for "230": select * from tab where a in (180, 230) and a in (230, 300); -- has redundancies, plus some individual elements contradict each other This duplicates some of what _bt_preprocess_keys can do already. But _bt_preprocess_keys can only do this stuff at the level of individual array elements/primitive index scans. Whereas this works "one level up", allowing preprocessing to see the full picture rather than just seeing the start of one particular primitive index scan. It explicitly works across array keys, saving repeat work inside _bt_preprocess_keys. That could really add up with thousands of array keys and/or multiple SAOPs. (Note that _bt_preprocess_array_keys already does something like this, to deal with SAOP inequalities such as "WHERE my_col >=3D any (array[1, 2])" -- it's a little surprising that this obvious optimization wasn't part of the original nbtree SAOP patch.) This reminds me: you might want to try breaking the patch by coming up with adversarial cases, Matthias. The patch needs to be able to deal with absurdly large amounts of array keys reasonably well, because it proposes to normalize passing those to the nbtree code. It's especially important that the patch never takes too much time to do something (e.g., binary searching through array keys) while holding a buffer lock -- even with very silly adversarial queries. So, for example, queries like this one (specifically designed to stress the implementation) *need* to work reasonably well: with a as ( select i from generate_series(0, 500000) i ) select count(*), thousand, tenthous from tenk1 where thousand =3D any (array[(select array_agg(i) from a)]) and tenthous =3D any (array[(select array_agg(i) from a)]) group by thousand, tenthous order by thousand, tenthous; (You can run this yourself after the regression tests finish, of course.) This takes about 130ms on my machine, hardly any of which takes place in the nbtree code with the patch (think tens of microseconds per _bt_readpage call, at most) -- the plan is an index-only scan that gets only 30 buffer hits. On the master branch, it's vastly slower -- 1000025 buffer hits. The query as a whole takes about 3 seconds there. If you have 3 or 4 SOAPs (with a composite index that has as many columns) you can quite easily DOS the master branch, since the planner makes a generic assumption that each of these SOAPs will have only 10 elements. The planner also thinks that with the patch applied, with one important difference: it doesn't matter to nbtree. The cost of scanning each index page should be practically independent of the total size of each array, at least past a certain point. Similarly, the maximum cost of an index scan should be approximately fixed: it should be capped at the cost of a full index scan (with the added cost of these relatively expensive quals still capped, still essentially independent of array sizes past some point). I notice that if I remove the "thousand =3D any (array[(select array_agg(i) from a)]) and" line from the adversarial query, executing the resulting query still get 30 buffer hits with the patch -- though it only takes 90ms this time (it's faster for reasons that likely have less than you'd think to do with nbtree overheads). This is just another way of getting roughly the same full index scan. That's a completely new way of thinking about nbtree SAOPs from a planner perspective (also from a user's perspective, I suppose). It's important that the planner's new optimistic assumptions about the cost profile of SOAPS (that it can expect reasonable performance/access patterns with wildly unreasonable/huge/arbitrarily complicated SAOPs) always be met by nbtree -- no repeat index page accesses, no holding a buffer lock for more than (say) a small fraction of 1 millisecond (no matter the complexity of the query), and possibly other things I haven't thought of yet. If you end up finding a bug in this v6, it'll most likely be a case where nbtree fails to live up to that. This project is as much about robust/predictable performance as anything else -- nbtree needs to be able to cope with practically anything. I suggest that your review start by trying to break the patch along these lines. --=20 Peter Geoghegan --0000000000007c0d9e06099a5a50 Content-Type: application/octet-stream; name="v6-0001-Enhance-nbtree-ScalarArrayOp-execution.patch" Content-Disposition: attachment; filename="v6-0001-Enhance-nbtree-ScalarArrayOp-execution.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lop3o0ys0 RnJvbSAxYWU5N2QyNmFhNWExZmIzZTdkYWZjNDE2MDk2MGJjMTQ0ZTRiZTllIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTcgSnVuIDIwMjMgMTc6MDM6MzYgLTA3MDAKU3ViamVjdDogW1BBVENIIHY2XSBFbmhhbmNl IG5idHJlZSBTY2FsYXJBcnJheU9wIGV4ZWN1dGlvbi4KCkNvbW1pdCA5ZThkYTBmNyB0YXVnaHQg bmJ0cmVlIHRvIGhhbmRsZSBTY2FsYXJBcnJheU9wRXhwciBxdWFscwpuYXRpdmVseS4gIFRoaXMg d29ya3MgYnkgcHVzaGluZyBhZGRpdGlvbmFsIGNvbnRleHQgYWJvdXQgdGhlIGFycmF5cwpkb3du IGludG8gdGhlIG5idHJlZSBpbmRleCBBTSwgYXMgaW5kZXggcXVhbHMuICBUaGlzIGluZm9ybWF0 aW9uIGVuYWJsZWQKbmJ0cmVlIHRvIGV4ZWN1dGUgbXVsdGlwbGUgcHJpbWl0aXZlIGluZGV4IHNj YW5zIGFzIHBhcnQgb2YgYW4gaW5kZXgKc2NhbiBleGVjdXRvciBub2RlIHRoYXQgd2FzIHRyZWF0 ZWQgYXMgb25lIGNvbnRpbnVvdXMgaW5kZXggc2Nhbi4KClRoZSBtb3RpdmF0aW9uIGJlaGluZCB0 aGlzIGVhcmxpZXIgd29yayB3YXMgZW5hYmxpbmcgaW5kZXgtb25seSBzY2Fucwp3aXRoIFNjYWxh ckFycmF5T3BFeHByIGNsYXVzZXMgKFNBT1AgcXVhbHMgYXJlIHRyYWRpdGlvbmFsbHkgZXhlY3V0 ZWQKdmlhIEJpdG1hcE9yIG5vZGVzLCB3aGljaCBpcyBsYXJnZWx5IGluZGV4LUFNLWFnbm9zdGlj LCBidXQgYWx3YXlzCnJlcXVpcmVzIGhlYXAgYWNjZXNzKS4gIFRoZSBnZW5lcmFsIGlkZWEgb2Yg Z2l2aW5nIHRoZSBpbmRleCBBTSB0aGlzCmFkZGl0aW9uYWwgY29udGV4dCBjYW4gYmUgcHVzaGVk IGEgbG90IGZ1cnRoZXIsIHRob3VnaC4KClRlYWNoIG5idHJlZSBTQU9QIGluZGV4IHNjYW5zIHRv IGFkdmFuY2UgYXJyYXkgc2NhbiBrZXlzIGJ5IGFwcGx5aW5nCmluZm9ybWF0aW9uIGFib3V0IHRo ZSBwaHlzaWNhbCBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGluZGV4IGF0IHJ1bnRpbWUuClRoZSBh cnJheSBrZXkgc3RhdGUgbWFjaGluZSBhZHZhbmNlcyB0aGUgY3VycmVudCBhcnJheSBrZXlzIHVz aW5nIHRoZQpuZXh0IGluZGV4IHR1cGxlIGluIGxpbmUgdG8gYmUgc2Nhbm5lZCwgYXQgdGhlIHBv aW50IHdoZXJlIHRoZSBzY2FuCnJlYWNoZXMgdGhlIGVuZCBvZiBpbmRleCB0dXBsZXMgbWF0Y2hp bmcgaXRzIGN1cnJlbnQgYXJyYXkga2V5cy4gIFdlCmR5bmFtaWNhbGx5IGRlY2lkZSB3aGV0aGVy IHRvIHBlcmZvcm0gYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAob3IKd2hldGhlciB0byBz dGljayB3aXRoIHRoZSBvbmdvaW5nIGxlYWYgbGV2ZWwgdHJhdmVyc2FsKSB1c2luZyBhIHNldCBv ZgpoZXVyaXN0aWNzIHRoYXQgYWltIHRvIG1pbmltaXplIHJlcGVhdCBpbmRleCBkZXNjZW50cy4g IFRoaXMgYXBwcm9hY2gKY2FuIGJlIGZhciBtb3JlIGVmZmljaWVudDogbWFueSBjYXNlcyB0aGF0 IHByZXZpb3VzbHkgcmVxdWlyZWQgdGhvdXNhbmRzCm9mIHByaW1pdGl2ZSBpbmRleCBzY2FucyBu b3cgcmVxdWlyZSBhcyBmZXcgYXMgb25lIHNpbmdsZSBwcmltaXRpdmUKaW5kZXggc2Nhbi4gIEFs bCBkdXBsaWNhdGl2ZSBpbmRleCBwYWdlIGFjY2Vzc2VzIGFyZSBub3cgYXZvaWRlZC4KCm5idHJl ZSBjYW4gbm93IGV4ZWN1dGUgcmVxdWlyZWQgYW5kIG5vbi1yZXF1aXJlZCBhcnJheS9TQU9QIHNj YW4ga2V5cyBpbgp0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHBvc3NpYmxlLiAgTmF0dXJhbGx5LCBv bmx5IHJlcXVpcmVkIFNBT1Aga2V5cwooaS5lLiB0aG9zZSB0aGF0IGNhbiB0ZXJtaW5hdGUgdGhl IHRvcC1sZXZlbCBzY2FuKSBhcmUgY2FwYWJsZSBvZgp0cmlnZ2VyaW5nIGEgbmV3IHByaW1pdGl2 ZSBpbmRleCBzY2FuOyBub24tcmVxdWlyZWQga2V5cyBuZXZlciBhZmZlY3QKdGhlIHNjYW4ncyBw b3NpdGlvbi4gIENvbnNlcXVlbnRseSwgaW5kZXggc2NhbnMgb24gYSBjb21wb3NpdGUgaW5kZXgK d2l0aCAoc2F5KSBhIGhpZ2gtb3JkZXIgaW5lcXVhbGl0eSBrZXkgYW5kIGEgbG93LW9yZGVyIFNB T1Aga2V5ICh3aGljaApuYnRyZWUgd2lsbCBtYWtlIGludG8gYSBub24tcmVxdWlyZWQgc2NhbiBr ZXkpIHdpbGwgbm93IHJlbGlhYmx5IG91dHB1dApyb3dzIGluIGluZGV4IG9yZGVyLiAgVGhlIHNj YW4gaXMgYWx3YXlzIGV4ZWN1dGVkIGFzIG9uZSBsYXJnZSBpbmRleApzY2FuIHVuZGVyIHRoZSBo b29kLCB3aGljaCBpcyBvYnZpb3VzbHkgdGhlIGZhc3Rlc3Qgd2F5IHRvIGRvIGl0LCBmb3IKdGhl IHVzdWFsIHJlYXNvbnM6IGl0IGF2b2lkcyB1c2VsZXNzIHJlcGVhdCBpbmRleCBwYWdlIGFjY2Vz c2VzIGFjcm9zcwpzdWNjZXNzaXZlIHByaW1pdGl2ZSBpbmRleCBzY2Fucy4gIE1vcmUgaW1wb3J0 YW50bHksIG5idHJlZSdzIHZlcnkKZ2VuZXJhbCBhcHByb2FjaCByZW1vdmVzIGFueSBxdWVzdGlv biBvZiBpbmRleCBzY2FuIG5vZGVzIG91dHB1dHRpbmcKcm93cyBpbiBhbiBvcmRlciB0aGF0IGRv ZXNuJ3QgbWF0Y2ggdGhlIGluZGV4LiAgVGhpcyBlbmFibGVzIHRoZSByZW1vdmFsCm9mIHZhcmlv dXMgc3BlY2lhbCBjYXNlcyBmcm9tIHRoZSBwbGFubmVyIC0tIHdoaWNoIGluIHR1cm4gbWFrZXMg dGhlCm5idHJlZSBlbmhhbmNlbWVudHMgbW9yZSBlZmZlY3RpdmUgYW5kIG1vcmUgd2lkZWx5IGFw cGxpY2FibGUuCgpCdWdmaXggY29tbWl0IDgwN2E0MGM1IHRhdWdodCB0aGUgcGxhbm5lciB0byBh dm9pZCBnZW5lcmF0aW5nIHVuc2FmZQpwYXRoIGtleXM6IHBhdGgga2V5cyBvbiBhIG11bHRpY29s dW1uIGluZGV4IHBhdGgsIHdpdGggYSBTQU9QIGNsYXVzZSBvbgphbnkgYXR0cmlidXRlIGJleW9u ZCB0aGUgZmlyc3QvbW9zdCBzaWduaWZpY2FudCBhdHRyaWJ1dGUuICBUaGVzZSBjYXNlcwphcmUg bm93IGFsbCBzYWZlLCBzbyB3ZSBnbyBiYWNrIHRvIGdlbmVyYXRpbmcgcGF0aCBrZXlzIHdpdGhv dXQgcmVnYXJkCmZvciB0aGUgcHJlc2VuY2Ugb2YgU0FPUCBjbGF1c2VzIChqdXN0IGxpa2Ugd2l0 aCBhbnkgb3RoZXIgY2xhdXNlIHR5cGUpLgpBbHNvIHVuZG8gY2hhbmdlcyBmcm9tIGZvbGxvdy11 cCBidWdmaXggY29tbWl0IGE0NTIzYzVhLCB3aGljaCB0YXVnaHQKdGhlIHBsYW5uZXIgdG8gcHJv ZHVjZSBhbHRlcm5hdGl2ZSBpbmRleCBwYXRocyB3aXRob3V0IGxvdy1vcmRlcgpTY2FsYXJBcnJh eU9wRXhwciBxdWFscyAocGF0aHMgd2hlcmUgdGhlIHF1YWxzIGFwcGVhciBhcyBmaWx0ZXIgcXVh bHMKaW5zdGVhZCkuICBOb3cgdGhlcmUgaXMgbmV2ZXIgYW55IG5lZWQgdG8gbWFrZSBhIGNvc3Qt YmFzZWQgY2hvaWNlCmJldHdlZW4gYW4gaW5kZXggc2NhbiB0aGF0IGNhbiBiZSB0cnVzdGVkIHRv IHJldHVybiB0dXBsZXMgaW4gaW5kZXgKb3JkZXIgKGJ1dCBoYXMgU0FPUCBmaWx0ZXIgcXVhbHMp LCBhbmQgYSBtb3JlIHNlbGVjdGl2ZSBpbmRleCBzY2FuIHRoYXQKY2FuIGFwcGx5IHRydWUgU0FP UCBpbmRleCBxdWFscyBmb3Igb25lIG9yIG1vcmUgbG93LW9yZGVyIGluZGV4IGNvbHVtbnMKKGJ1 dCBjYW5ub3QgYmUgdHJ1c3RlZCB0byBwcm9kdWNlIHR1cGxlcyBpbiBpbmRleCBvcmRlcikuCgpN YW55IG9mIHRoZSBxdWVyaWVzIHNwZWQgdXAgYnkgdGhlIGVuaGFuY2VtZW50cyBhZGRlZCBieSB0 aGlzIGNvbW1pdAp3b24ndCBiZW5lZml0IG11Y2ggZnJvbSBhdm9pZGluZyByZXBlYXQgaW5kZXgg cGFnZSBhY2Nlc3Nlcy4gIFRoZSBtb3N0CmNvbXBlbGxpbmcgY2FzZXMgYXJlIHRob3NlIHdoZXJl IHF1ZXJ5IGV4ZWN1dGlvbiBfY29tcGxldGVseV8gYXZvaWRzCm1hbnkgaGVhcCBwYWdlIGFjY2Vz c2VzIHRoYXQgZmlsdGVyIHF1YWxzIHdvdWxkIGhhdmUgb3RoZXJ3aXNlIHJlcXVpcmVkLApqdXN0 IHRvIGVsaW1pbmF0ZSBvbmUgb3IgbW9yZSBub24tbWF0Y2hpbmcgcm93cyBmcm9tIGVhY2ggaGVh cCBwYWdlLgooSW4gZ2VuZXJhbCwgaW5kZXggc2NhbiBmaWx0ZXIgcXVhbHMgYWx3YXlzIG5lZWQg ImV4dHJhIiBoZWFwIGFjY2Vzc2VzCnRvIGVsaW1pbmF0ZSBub24tbWF0Y2hpbmcgcm93cywgc2lu Y2UgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIG9ubHkKZGVlbWVkIHNhZmUgd2l0aCB2aXNpYmxl IHJvd3MuICBXaGVyZWFzIGluZGV4IHF1YWxzIG5ldmVyIHJlcXVpcmUgaW5saW5lCnZpc2liaWxp dHkgY2hlY2tzOyB0aGV5IGNhbiBqdXN0IGVsaW1pbmF0ZSBub24tbWF0Y2hpbmcgcm93cyB1cCBm cm9udC4pCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6PWtzdk5fc2pjbkQxK0J0LVd0aWZSQTVvazQ4YURZ bnEzcGtLaHhnTVFwY3dAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 cmVlLmggICAgICAgICAgICAgICAgfCAgIDQyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHJlZS5jICAgICAgICAgfCAgIDYzICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHNlYXJjaC5jICAgICAgfCAgIDkyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMgICAgICAgfCAxNDcyICsrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAgICAgfCAgIDg2ICstCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYyAgICAgICAgICAgfCAgMTIyICstCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmlu Zy5zZ21sICAgICAgICAgICAgICAgfCAgIDEzICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Y3JlYXRlX2luZGV4Lm91dCB8ICAgNjEgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9p bi5vdXQgICAgICAgICB8ICAgIDUgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRl eC5zcWwgICAgICB8ICAgMjAgKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDE3MDAgaW5zZXJ0aW9ucygr KSwgMjc2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRy ZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCA3YmZiZjMwODYuLjU2NmUx YzE1ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtOTY1LDcgKzk2NSw3IEBAIHR5cGVkZWYgc3RydWN0 IEJUU2NhblBvc0RhdGEKIAkgKiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdoZXRoZXIg d2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCiAJICogaW5kZXggZW50cmllcyB0byB0aGUg bGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2ZWx5LgogCSAqIFdl IGNhbiBjbGVhciB0aGUgYXBwcm9wcmlhdGUgb25lIG9mIHRoZXNlIGZsYWdzIHdoZW4gX2J0X2No ZWNra2V5cygpCi0JICogcmV0dXJucyBjb250aW51ZXNjYW4gPSBmYWxzZS4KKwkgKiBzZXRzIEJU UmVhZFBhZ2VTdGF0ZS5jb250aW51ZXNjYW4gPSBmYWxzZS4KIAkgKi8KIAlib29sCQltb3JlTGVm dDsKIAlib29sCQltb3JlUmlnaHQ7CkBAIC0xMDQzLDEzICsxMDQzLDEzIEBAIHR5cGVkZWYgc3Ry dWN0IEJUU2Nhbk9wYXF1ZURhdGEKIAogCS8qIHdvcmtzcGFjZSBmb3IgU0tfU0VBUkNIQVJSQVkg c3VwcG9ydCAqLwogCVNjYW5LZXkJCWFycmF5S2V5RGF0YTsJLyogbW9kaWZpZWQgY29weSBvZiBz Y2FuLT5rZXlEYXRhICovCi0JYm9vbAkJYXJyYXlzU3RhcnRlZDsJLyogU3RhcnRlZCBhcnJheSBr ZXlzLCBidXQgaGF2ZSB5ZXQgdG8gInJlYWNoCi0JCQkJCQkJCSAqIHBhc3QgdGhlIGVuZCIgb2Yg YWxsIGFycmF5cz8gKi8KIAlpbnQJCQludW1BcnJheUtleXM7CS8qIG51bWJlciBvZiBlcXVhbGl0 eS10eXBlIGFycmF5IGtleXMgKC0xIGlmCiAJCQkJCQkJCSAqIHRoZXJlIGFyZSBhbnkgdW5zYXRp c2ZpYWJsZSBhcnJheSBrZXlzKSAqLwotCWludAkJCWFycmF5S2V5Q291bnQ7CS8qIGNvdW50IGlu ZGljYXRpbmcgbnVtYmVyIG9mIGFycmF5IHNjYW4ga2V5cwotCQkJCQkJCQkgKiBwcm9jZXNzZWQg Ki8KKwlib29sCQluZWVkUHJpbVNjYW47CS8qIFBlcmZvcm0gYW5vdGhlciBwcmltaXRpdmUgc2Nh bj8gKi8KIAlCVEFycmF5S2V5SW5mbyAqYXJyYXlLZXlzOwkvKiBpbmZvIGFib3V0IGVhY2ggZXF1 YWxpdHktdHlwZSBhcnJheSBrZXkgKi8KKwlGbWdySW5mbyAgICpvcmRlclByb2NzOwkJLyogT1JE RVIgcHJvY3MgZm9yIGVxdWFsaXR5IGNvbnN0cmFpbnQga2V5cyAqLworCWludAkJCW51bVByaW1T Y2FuczsJLyogUnVubmluZyB0YWxseSBvZiAjIHByaW1pdGl2ZSBpbmRleCBzY2FucworCQkJCQkJ CQkgKiAodXNlZCB0byBjb29yZGluYXRlIHBhcmFsbGVsIHdvcmtlcnMpICovCiAJTWVtb3J5Q29u dGV4dCBhcnJheUNvbnRleHQ7IC8qIHNjYW4tbGlmZXNwYW4gY29udGV4dCBmb3IgYXJyYXkgZGF0 YSAqLwogCiAJLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBp cyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCkBAIC0xMDgzLDYgKzEwODMsMjkgQEAgdHlwZWRlZiBz dHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nh bk9wYXF1ZTsKIAorLyoKKyAqIF9idF9yZWFkcGFnZSBzdGF0ZSB1c2VkIGFjcm9zcyBfYnRfY2hl Y2trZXlzIGNhbGxzIGZvciBhIHBhZ2UKKyAqCisgKiBXaGVuIF9idF9yZWFkcGFnZSBpcyBjYWxs ZWQgZHVyaW5nIGEgZm9yd2FyZCBzY2FuIHRoYXQgaGFzIG9uZSBvciBtb3JlCisgKiBlcXVhbGl0 eS10eXBlIFNLX1NFQVJDSEFSUkFZIHNjYW4ga2V5cywgaXQgaGFzIGFuIGV4dHJhIHJlc3BvbnNp YmlsaXR5OiB0bworICogc2V0IHVwIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaW5hbCB0dXBsZSBm cm9tIHRoZSBwYWdlLiAgVGhpcyBtdXN0IGhhcHBlbgorICogYmVmb3JlIHRoZSBmaXJzdCBjYWxs IHRvIF9idF9jaGVja2tleXMuICBfYnRfY2hlY2trZXlzIHVzZXMgdGhlIGZpbmFsIHR1cGxlCisg KiB0byBtYW5hZ2UgYWR2YW5jZW1lbnQgb2YgdGhlIHNjYW4ncyBhcnJheSBrZXlzIG1vcmUgZWZm aWNpZW50bHkuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJUUmVhZFBhZ2VTdGF0ZQoreworCS8qIElu cHV0IHBhcmFtZXRlcnMsIHNldCBieSBfYnRfcmVhZHBhZ2UgKi8KKwlTY2FuRGlyZWN0aW9uIGRp cjsJCQkvKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uICovCisJSW5kZXhUdXBsZQlmaW5hbHR1cDsJ CS8qIGZpbmFsIHR1cGxlIChoaWdoIGtleSBmb3IgZm9yd2FyZCBzY2FucykgKi8KKworCS8qIE91 dHB1dCBwYXJhbWV0ZXJzLCBzZXQgYnkgX2J0X2NoZWNra2V5cyAqLworCWJvb2wJCWNvbnRpbnVl c2NhbjsJLyogVGVybWluYXRlIG9uZ29pbmcgKHByaW1pdGl2ZSkgaW5kZXggc2Nhbj8gKi8KKwor CS8qIFByaXZhdGUgX2J0X2NoZWNra2V5cy1tYW5hZ2VkIHN0YXRlICovCisJYm9vbAkJZmluYWx0 dXBjaGVja2VkOwkvKiBmaW5hbCB0dXBsZSBjaGVja2VkIGFnYWluc3QgY3VycmVudAorCQkJCQkJ CQkJICogU0tfU0VBUkNIQVJSQVkgYXJyYXkga2V5cz8gKi8KK30gQlRSZWFkUGFnZVN0YXRlOwor CiAvKgogICogV2UgdXNlIHNvbWUgcHJpdmF0ZSBza19mbGFncyBiaXRzIGluIHByZXByb2Nlc3Nl ZCBzY2FuIGtleXMuICBXZSdyZSBhbGxvd2VkCiAgKiB0byB1c2UgYml0cyAxNi0zMSAoc2VlIHNr ZXkuaCkuICBUaGUgdXBwZXJtb3N0IGJpdHMgYXJlIGNvcGllZCBmcm9tIHRoZQpAQCAtMTA5MCw2 ICsxMTEzLDcgQEAgdHlwZWRlZiBCVFNjYW5PcGFxdWVEYXRhICpCVFNjYW5PcGFxdWU7CiAgKi8K ICNkZWZpbmUgU0tfQlRfUkVRRldECTB4MDAwMTAwMDAJLyogcmVxdWlyZWQgdG8gY29udGludWUg Zm9yd2FyZCBzY2FuICovCiAjZGVmaW5lIFNLX0JUX1JFUUJLV0QJMHgwMDAyMDAwMAkvKiByZXF1 aXJlZCB0byBjb250aW51ZSBiYWNrd2FyZCBzY2FuICovCisjZGVmaW5lIFNLX0JUX1JERE5BUlJB WQkweDAwMDQwMDAwCS8qIHJlZHVuZGFudCBpbiBhcnJheSBwcmVwcm9jZXNzaW5nICovCiAjZGVm aW5lIFNLX0JUX0lORE9QVElPTl9TSElGVCAgMjQJLyogbXVzdCBjbGVhciB0aGUgYWJvdmUgYml0 cyAqLwogI2RlZmluZSBTS19CVF9ERVNDCQkJKElORE9QVElPTl9ERVNDIDw8IFNLX0JUX0lORE9Q VElPTl9TSElGVCkKICNkZWZpbmUgU0tfQlRfTlVMTFNfRklSU1QJKElORE9QVElPTl9OVUxMU19G SVJTVCA8PCBTS19CVF9JTkRPUFRJT05fU0hJRlQpCkBAIC0xMTYwLDcgKzExODQsNyBAQCBleHRl cm4gYm9vbCBidGNhbnJldHVybihSZWxhdGlvbiBpbmRleCwgaW50IGF0dG5vKTsKIGV4dGVybiBi b29sIF9idF9wYXJhbGxlbF9zZWl6ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyICpw YWdlbm8pOwogZXh0ZXJuIHZvaWQgX2J0X3BhcmFsbGVsX3JlbGVhc2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBCbG9ja051bWJlciBzY2FuX3BhZ2UpOwogZXh0ZXJuIHZvaWQgX2J0X3BhcmFsbGVsX2Rv bmUoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIF9idF9wYXJhbGxlbF9hZHZhbmNl X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIF9idF9wYXJhbGxl bF9uZXh0X3ByaW1pdGl2ZV9zY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIC8qCiAgKiBwcm90 b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0ZGVkdXAuYwpAQCAtMTI1MywxMiArMTI3NywxMiBA QCBleHRlcm4gQlRTY2FuSW5zZXJ0IF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1 cGxlIGl0dXApOwogZXh0ZXJuIHZvaWQgX2J0X2ZyZWVzdGFjayhCVFN0YWNrIHN0YWNrKTsKIGV4 dGVybiB2b2lkIF9idF9wcmVwcm9jZXNzX2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsK IGV4dGVybiB2b2lkIF9idF9zdGFydF9hcnJheV9rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2J0X2FkdmFuY2VfYXJyYXlfa2V5cyhJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29sIF9idF9hcnJh eV9rZXlzX3JlbWFpbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4 dGVybiB2b2lkIF9idF9tYXJrX2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVy biB2b2lkIF9idF9yZXN0b3JlX2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVy biB2b2lkIF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiBi b29sIF9idF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLAot CQkJCQkJICBpbnQgdHVwbmF0dHMsIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sICpjb250aW51ZXNj YW4sCitleHRlcm4gYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFk UGFnZVN0YXRlICpwc3RhdGUsCisJCQkJCQkgIEluZGV4VHVwbGUgdHVwbGUsIGJvb2wgZmluYWx0 dXAsCiAJCQkJCQkgIGJvb2wgcmVxdWlyZWRNYXRjaGVkQnlQcmVjaGVjayk7CiBleHRlcm4gdm9p ZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gQlRDeWNsZUlkIF9i dF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVl LmMKaW5kZXggYTg4YjM2YTU4Li42MzI4YThhNjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRy ZWUuYwpAQCAtNDgsOCArNDgsOCBAQAogICogQlRQQVJBTExFTF9JRExFIGluZGljYXRlcyB0aGF0 IG5vIGJhY2tlbmQgaXMgY3VycmVudGx5IGFkdmFuY2luZyB0aGUgc2NhbgogICogdG8gYSBuZXcg cGFnZTsgc29tZSBwcm9jZXNzIGNhbiBzdGFydCBkb2luZyB0aGF0LgogICoKLSAqIEJUUEFSQUxM RUxfRE9ORSBpbmRpY2F0ZXMgdGhhdCB0aGUgc2NhbiBpcyBjb21wbGV0ZSAoaW5jbHVkaW5nIGVy cm9yIGV4aXQpLgotICogV2UgcmVhY2ggdGhpcyBzdGF0ZSBvbmNlIGZvciBldmVyeSBkaXN0aW5j dCBjb21iaW5hdGlvbiBvZiBhcnJheSBrZXlzLgorICogQlRQQVJBTExFTF9ET05FIGluZGljYXRl cyB0aGF0IHRoZSBwcmltaXRpdmUgaW5kZXggc2NhbiBpcyBjb21wbGV0ZQorICogKGluY2x1ZGlu ZyBlcnJvciBleGl0KS4gIFJlYWNoZWQgb25jZSBwZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4uCiAg Ki8KIHR5cGVkZWYgZW51bQogewpAQCAtNjksOCArNjksOCBAQCB0eXBlZGVmIHN0cnVjdCBCVFBh cmFsbGVsU2NhbkRlc2NEYXRhCiAJQlRQU19TdGF0ZQlidHBzX3BhZ2VTdGF0dXM7CS8qIGluZGlj YXRlcyB3aGV0aGVyIG5leHQgcGFnZSBpcwogCQkJCQkJCQkJICogYXZhaWxhYmxlIGZvciBzY2Fu LiBzZWUgYWJvdmUgZm9yCiAJCQkJCQkJCQkgKiBwb3NzaWJsZSBzdGF0ZXMgb2YgcGFyYWxsZWwg c2Nhbi4gKi8KLQlpbnQJCQlidHBzX2FycmF5S2V5Q291bnQ7IC8qIGNvdW50IGluZGljYXRpbmcg bnVtYmVyIG9mIGFycmF5IHNjYW4KLQkJCQkJCQkJCSAqIGtleXMgcHJvY2Vzc2VkIGJ5IHBhcmFs bGVsIHNjYW4gKi8KKwlpbnQJCQlidHBzX251bVByaW1TY2FuczsJLyogY291bnQgaW5kaWNhdGlu ZyBudW1iZXIgb2YgcHJpbWl0aXZlCisJCQkJCQkJCQkgKiBpbmRleCBzY2FucyAodXNlZCB3aXRo IGFycmF5IGtleXMpICovCiAJc2xvY2tfdAkJYnRwc19tdXRleDsJCS8qIHByb3RlY3RzIGFib3Zl IHZhcmlhYmxlcyAqLwogCUNvbmRpdGlvblZhcmlhYmxlIGJ0cHNfY3Y7CS8qIHVzZWQgdG8gc3lu Y2hyb25pemUgcGFyYWxsZWwgc2NhbiAqLwogfQkJCUJUUGFyYWxsZWxTY2FuRGVzY0RhdGE7CkBA IC0yNzUsOCArMjc1LDggQEAgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCQkvKiBJZiB3ZSBoYXZlIGEgdHVwbGUsIHJldHVybiBpdCAuLi4gKi8KIAkJ aWYgKHJlcykKIAkJCWJyZWFrOwotCQkvKiAuLi4gb3RoZXJ3aXNlIHNlZSBpZiB3ZSBoYXZlIG1v cmUgYXJyYXkga2V5cyB0byBkZWFsIHdpdGggKi8KLQl9IHdoaWxlIChzby0+bnVtQXJyYXlLZXlz ICYmIF9idF9hZHZhbmNlX2FycmF5X2tleXMoc2NhbiwgZGlyKSk7CisJCS8qIC4uLiBvdGhlcndp c2Ugc2VlIGlmIHdlIG5lZWQgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLworCX0gd2hp bGUgKHNvLT5udW1BcnJheUtleXMgJiYgX2J0X2FycmF5X2tleXNfcmVtYWluKHNjYW4sIGRpcikp OwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTMzMyw4ICszMzMsOCBAQCBidGdldGJpdG1hcChJbmRl eFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCQkJCW50aWRzKys7CiAJCQl9CiAJCX0K LQkJLyogTm93IHNlZSBpZiB3ZSBoYXZlIG1vcmUgYXJyYXkga2V5cyB0byBkZWFsIHdpdGggKi8K LQl9IHdoaWxlIChzby0+bnVtQXJyYXlLZXlzICYmIF9idF9hZHZhbmNlX2FycmF5X2tleXMoc2Nh biwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKTsKKwkJLyogTm93IHNlZSBpZiB3ZSBuZWVkIGFub3Ro ZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KKwl9IHdoaWxlIChzby0+bnVtQXJyYXlLZXlzICYm IF9idF9hcnJheV9rZXlzX3JlbWFpbihzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpOwogCiAJ cmV0dXJuIG50aWRzOwogfQpAQCAtMzY0LDkgKzM2NCwxMCBAQCBidGJlZ2luc2NhbihSZWxhdGlv biByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAkJc28tPmtleURhdGEgPSBOVUxMOwog CiAJc28tPmFycmF5S2V5RGF0YSA9IE5VTEw7CS8qIGFzc3VtZSBubyBhcnJheSBrZXlzIGZvciBu b3cgKi8KLQlzby0+YXJyYXlzU3RhcnRlZCA9IGZhbHNlOwogCXNvLT5udW1BcnJheUtleXMgPSAw OworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAlzby0+YXJyYXlLZXlzID0gTlVMTDsKKwlz by0+b3JkZXJQcm9jcyA9IE5VTEw7CiAJc28tPmFycmF5Q29udGV4dCA9IE5VTEw7CiAKIAlzby0+ a2lsbGVkSXRlbXMgPSBOVUxMOwkJLyogdW50aWwgbmVlZGVkICovCkBAIC00MDYsNyArNDA3LDgg QEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nh bmtleXMsCiAJfQogCiAJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlzby0+YXJyYXlLZXlDb3Vu dCA9IDA7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5udW1QcmltU2NhbnMgPSAw OwogCXNvLT5maXJzdFBhZ2UgPSBmYWxzZTsKIAlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5t YXJrUG9zKTsKIAlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKQEAgLTU4OCw3ICs1 OTAsNyBAQCBidGluaXRwYXJhbGxlbHNjYW4odm9pZCAqdGFyZ2V0KQogCVNwaW5Mb2NrSW5pdCgm YnRfdGFyZ2V0LT5idHBzX211dGV4KTsKIAlidF90YXJnZXQtPmJ0cHNfc2NhblBhZ2UgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CiAJYnRfdGFyZ2V0LT5idHBzX3BhZ2VTdGF0dXMgPSBCVFBBUkFMTEVM X05PVF9JTklUSUFMSVpFRDsKLQlidF90YXJnZXQtPmJ0cHNfYXJyYXlLZXlDb3VudCA9IDA7CisJ YnRfdGFyZ2V0LT5idHBzX251bVByaW1TY2FucyA9IDA7CiAJQ29uZGl0aW9uVmFyaWFibGVJbml0 KCZidF90YXJnZXQtPmJ0cHNfY3YpOwogfQogCkBAIC02MTQsNyArNjE2LDcgQEAgYnRwYXJhbGxl bHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJU3BpbkxvY2tBY3F1aXJlKCZidHNjYW4tPmJ0 cHNfbXV0ZXgpOwogCWJ0c2Nhbi0+YnRwc19zY2FuUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsK IAlidHNjYW4tPmJ0cHNfcGFnZVN0YXR1cyA9IEJUUEFSQUxMRUxfTk9UX0lOSVRJQUxJWkVEOwot CWJ0c2Nhbi0+YnRwc19hcnJheUtleUNvdW50ID0gMDsKKwlidHNjYW4tPmJ0cHNfbnVtUHJpbVNj YW5zID0gMDsKIAlTcGluTG9ja1JlbGVhc2UoJmJ0c2Nhbi0+YnRwc19tdXRleCk7CiB9CiAKQEAg LTYyNSw3ICs2MjcsMTEgQEAgYnRwYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAg KgogICogVGhlIHJldHVybiB2YWx1ZSBpcyB0cnVlIGlmIHdlIHN1Y2Nlc3NmdWxseSBzZWl6ZWQg dGhlIHNjYW4gYW5kIGZhbHNlCiAgKiBpZiB3ZSBkaWQgbm90LiAgVGhlIGxhdHRlciBjYXNlIG9j Y3VycyBpZiBubyBwYWdlcyByZW1haW4gZm9yIHRoZSBjdXJyZW50Ci0gKiBzZXQgb2Ygc2Nhbmtl eXMuCisgKiBwcmltaXRpdmUgaW5kZXggc2Nhbi4KKyAqCisgKiBXaGVuIGFycmF5IHNjYW4ga2V5 cyBhcmUgaW4gdXNlLCBlYWNoIHdvcmtlciBwcm9jZXNzIGluZGVwZW5kZW50bHkgYWR2YW5jZXMK KyAqIGl0cyBhcnJheSBrZXlzLiAgSXQncyBjcnVjaWFsIHRoYXQgZWFjaCB3b3JrZXIgcHJvY2Vz cyBuZXZlciBiZSBhbGxvd2VkIHRvCisgKiBzY2FuIGEgcGFnZSBmcm9tIGJlZm9yZSB0aGUgY3Vy cmVudCBzY2FuIHBvc2l0aW9uLgogICoKICAqIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSwg KnBhZ2VubyByZXR1cm5zIHRoZSBuZXh0IG9yIGN1cnJlbnQgcGFnZQogICogb2YgdGhlIHNjYW4g KGRlcGVuZGluZyBvbiB0aGUgc2NhbiBkaXJlY3Rpb24pLiAgQW4gaW52YWxpZCBibG9jayBudW1i ZXIKQEAgLTY1NiwxNiArNjYyLDE3IEBAIF9idF9wYXJhbGxlbF9zZWl6ZShJbmRleFNjYW5EZXNj IHNjYW4sIEJsb2NrTnVtYmVyICpwYWdlbm8pCiAJCVNwaW5Mb2NrQWNxdWlyZSgmYnRzY2FuLT5i dHBzX211dGV4KTsKIAkJcGFnZVN0YXR1cyA9IGJ0c2Nhbi0+YnRwc19wYWdlU3RhdHVzOwogCi0J CWlmIChzby0+YXJyYXlLZXlDb3VudCA8IGJ0c2Nhbi0+YnRwc19hcnJheUtleUNvdW50KQorCQlp ZiAoc28tPm51bVByaW1TY2FucyA8IGJ0c2Nhbi0+YnRwc19udW1QcmltU2NhbnMpCiAJCXsKLQkJ CS8qIFBhcmFsbGVsIHNjYW4gaGFzIGFscmVhZHkgYWR2YW5jZWQgdG8gYSBuZXcgc2V0IG9mIHNj YW5rZXlzLiAqLworCQkJLyogVG9wLWxldmVsIHNjYW4gYWxyZWFkeSBtb3ZlZCBvbiB0byBuZXh0 IHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJCQlzdGF0dXMgPSBmYWxzZTsKIAkJfQogCQllbHNl IGlmIChwYWdlU3RhdHVzID09IEJUUEFSQUxMRUxfRE9ORSkKIAkJewogCQkJLyoKLQkJCSAqIFdl J3JlIGRvbmUgd2l0aCB0aGlzIHNldCBvZiBzY2Fua2V5cy4gIFRoaXMgbWF5IGJlIHRoZSBlbmQs IG9yCi0JCQkgKiB0aGVyZSBjb3VsZCBiZSBtb3JlIHNldHMgdG8gdHJ5LgorCQkJICogV2UncmUg ZG9uZSB3aXRoIHRoaXMgcHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGlzIG1pZ2h0IGhhdmUKKwkJ CSAqIGJlZW4gdGhlIGZpbmFsIHByaW1pdGl2ZSBpbmRleCBzY2FuIHJlcXVpcmVkLCBvciB0aGUg dG9wLWxldmVsCisJCQkgKiBpbmRleCBzY2FuIG1pZ2h0IHJlcXVpcmUgYWRkaXRpb25hbCBwcmlt aXRpdmUgc2NhbnMuCiAJCQkgKi8KIAkJCXN0YXR1cyA9IGZhbHNlOwogCQl9CkBAIC02OTcsOSAr NzA0LDEyIEBAIF9idF9wYXJhbGxlbF9zZWl6ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVt YmVyICpwYWdlbm8pCiB2b2lkCiBfYnRfcGFyYWxsZWxfcmVsZWFzZShJbmRleFNjYW5EZXNjIHNj YW4sIEJsb2NrTnVtYmVyIHNjYW5fcGFnZSkKIHsKKwlCVFNjYW5PcGFxdWUgc28gUEdfVVNFRF9G T1JfQVNTRVJUU19PTkxZID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVBhcmFsbGVs SW5kZXhTY2FuRGVzYyBwYXJhbGxlbF9zY2FuID0gc2Nhbi0+cGFyYWxsZWxfc2NhbjsKIAlCVFBh cmFsbGVsU2NhbkRlc2MgYnRzY2FuOwogCisJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKKwog CWJ0c2NhbiA9IChCVFBhcmFsbGVsU2NhbkRlc2MpIE9mZnNldFRvUG9pbnRlcigodm9pZCAqKSBw YXJhbGxlbF9zY2FuLAogCQkJCQkJCQkJCQkJICBwYXJhbGxlbF9zY2FuLT5wc19vZmZzZXQpOwog CkBAIC03MzMsMTIgKzc0MywxMSBAQCBfYnRfcGFyYWxsZWxfZG9uZShJbmRleFNjYW5EZXNjIHNj YW4pCiAJCQkJCQkJCQkJCQkgIHBhcmFsbGVsX3NjYW4tPnBzX29mZnNldCk7CiAKIAkvKgotCSAq IE1hcmsgdGhlIHBhcmFsbGVsIHNjYW4gYXMgZG9uZSBmb3IgdGhpcyBjb21iaW5hdGlvbiBvZiBz Y2FuIGtleXMsCi0JICogdW5sZXNzIHNvbWUgb3RoZXIgcHJvY2VzcyBhbHJlYWR5IGRpZCBzby4g IFNlZSBhbHNvCi0JICogX2J0X2FkdmFuY2VfYXJyYXlfa2V5cy4KKwkgKiBNYXJrIHRoZSBwcmlt aXRpdmUgaW5kZXggc2NhbiBhcyBkb25lLCB1bmxlc3Mgc29tZSBvdGhlciBwcm9jZXNzCisJICog YWxyZWFkeSBkaWQgc28uICBTZWUgYWxzbyBfYnRfYXJyYXlfa2V5c19yZW1haW4uCiAJICovCiAJ U3BpbkxvY2tBY3F1aXJlKCZidHNjYW4tPmJ0cHNfbXV0ZXgpOwotCWlmIChzby0+YXJyYXlLZXlD b3VudCA+PSBidHNjYW4tPmJ0cHNfYXJyYXlLZXlDb3VudCAmJgorCWlmIChzby0+bnVtUHJpbVNj YW5zID49IGJ0c2Nhbi0+YnRwc19udW1QcmltU2NhbnMgJiYKIAkJYnRzY2FuLT5idHBzX3BhZ2VT dGF0dXMgIT0gQlRQQVJBTExFTF9ET05FKQogCXsKIAkJYnRzY2FuLT5idHBzX3BhZ2VTdGF0dXMg PSBCVFBBUkFMTEVMX0RPTkU7CkBAIC03NTIsMTQgKzc2MSwxNCBAQCBfYnRfcGFyYWxsZWxfZG9u ZShJbmRleFNjYW5EZXNjIHNjYW4pCiB9CiAKIC8qCi0gKiBfYnRfcGFyYWxsZWxfYWR2YW5jZV9h cnJheV9rZXlzKCkgLS0gQWR2YW5jZXMgdGhlIHBhcmFsbGVsIHNjYW4gZm9yIGFycmF5Ci0gKgkJ CWtleXMuCisgKiBfYnRfcGFyYWxsZWxfbmV4dF9wcmltaXRpdmVfc2NhbigpIC0tIEFkdmFuY2Vz IHBhcmFsbGVsIHByaW1pdGl2ZSBzY2FuCisgKgkJCWNvdW50ZXIgd2hlbiBhcnJheSBrZXlzIGFy ZSBpbiB1c2UuCiAgKgotICogVXBkYXRlcyB0aGUgY291bnQgb2YgYXJyYXkga2V5cyBwcm9jZXNz ZWQgZm9yIGJvdGggbG9jYWwgYW5kIHBhcmFsbGVsCisgKiBVcGRhdGVzIHRoZSBjb3VudCBvZiBw cmltaXRpdmUgaW5kZXggc2NhbnMgZm9yIGJvdGggbG9jYWwgYW5kIHBhcmFsbGVsCiAgKiBzY2Fu cy4KICAqLwogdm9pZAotX2J0X3BhcmFsbGVsX2FkdmFuY2VfYXJyYXlfa2V5cyhJbmRleFNjYW5E ZXNjIHNjYW4pCitfYnRfcGFyYWxsZWxfbmV4dF9wcmltaXRpdmVfc2NhbihJbmRleFNjYW5EZXNj IHNjYW4pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OwogCVBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwYXJhbGxlbF9zY2FuID0gc2Nhbi0+cGFyYWxsZWxf c2NhbjsKQEAgLTc2OCwxMyArNzc3LDEzIEBAIF9idF9wYXJhbGxlbF9hZHZhbmNlX2FycmF5X2tl eXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCWJ0c2NhbiA9IChCVFBhcmFsbGVsU2NhbkRlc2MpIE9m ZnNldFRvUG9pbnRlcigodm9pZCAqKSBwYXJhbGxlbF9zY2FuLAogCQkJCQkJCQkJCQkJICBwYXJh bGxlbF9zY2FuLT5wc19vZmZzZXQpOwogCi0Jc28tPmFycmF5S2V5Q291bnQrKzsKKwlzby0+bnVt UHJpbVNjYW5zKys7CiAJU3BpbkxvY2tBY3F1aXJlKCZidHNjYW4tPmJ0cHNfbXV0ZXgpOwogCWlm IChidHNjYW4tPmJ0cHNfcGFnZVN0YXR1cyA9PSBCVFBBUkFMTEVMX0RPTkUpCiAJewogCQlidHNj YW4tPmJ0cHNfc2NhblBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJCWJ0c2Nhbi0+YnRwc19w YWdlU3RhdHVzID0gQlRQQVJBTExFTF9OT1RfSU5JVElBTElaRUQ7Ci0JCWJ0c2Nhbi0+YnRwc19h cnJheUtleUNvdW50Kys7CisJCWJ0c2Nhbi0+YnRwc19udW1QcmltU2NhbnMrKzsKIAl9CiAJU3Bp bkxvY2tSZWxlYXNlKCZidHNjYW4tPmJ0cHNfbXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0c2VhcmNoLmMKaW5kZXggZWZjNTI4NGU1Li5iMmFkZGQ3MTQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtODkzLDcgKzg5Myw3IEBAIF9idF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqLwogCWlmICghc28tPnF1YWxf b2spCiAJewotCQkvKiBOb3RpZnkgYW55IG90aGVyIHdvcmtlcnMgdGhhdCB3ZSdyZSBkb25lIHdp dGggdGhpcyBzY2FuIGtleS4gKi8KKwkJLyogTm90aWZ5IGFueSBvdGhlciB3b3JrZXJzIHRoYXQg dGhpcyBwcmltaXRpdmUgc2NhbiBpcyBkb25lICovCiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4p OwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtOTUyLDYgKzk1MiwxMCBAQCBfYnRfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBvbmUgd2UgdXNlIC0tLSBi eSBkZWZpbml0aW9uLCB0aGV5IGFyZSBlaXRoZXIgcmVkdW5kYW50IG9yCiAJICogY29udHJhZGlj dG9yeS4KIAkgKgorCSAqIFdoZW4gU0tfU0VBUkNIQVJSQVkga2V5cyBhcmUgaW4gdXNlLCBfYnRf dHVwbGVfYmVmb3JlX2FycmF5X2tleXMgaXMKKwkgKiB1c2VkIHRvIGF2b2lkIHByZW1hdHVyZWx5 IHN0b3BwaW5nIHRoZSBzY2FuIHdoZW4gYW4gYXJyYXkgZXF1YWxpdHkgcXVhbAorCSAqIGhhcyBp dHMgYXJyYXkga2V5cyBhZHZhbmNlZC4KKwkgKgogCSAqIEFueSByZWd1bGFyIChub3QgU0tfU0VB UkNITlVMTCkga2V5IGltcGxpZXMgYSBOT1QgTlVMTCBxdWFsaWZpZXIuCiAJICogSWYgdGhlIGlu ZGV4IHN0b3JlcyBudWxscyBhdCB0aGUgZW5kIG9mIHRoZSBpbmRleCB3ZSdsbCBiZSBzdGFydGlu ZwogCSAqIGZyb20sIGFuZCB3ZSBoYXZlIG5vIGJvdW5kYXJ5IGtleSBmb3IgdGhlIGNvbHVtbiAo d2hpY2ggbWVhbnMgdGhlIGtleQpAQCAtMTUzNyw5ICsxNTQxLDggQEAgX2J0X3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0p CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgbWlub2ZmOwogCU9mZnNldE51 bWJlciBtYXhvZmY7CisJQlRSZWFkUGFnZVN0YXRlIHBzdGF0ZTsKIAlpbnQJCQlpdGVtSW5kZXg7 Ci0JYm9vbAkJY29udGludWVzY2FuOwotCWludAkJCWluZG5hdHRzOwogCWJvb2wJCXJlcXVpcmVk TWF0Y2hlZEJ5UHJlY2hlY2s7CiAKIAkvKgpAQCAtMTU2MCw4ICsxNTYzLDExIEBAIF9idF9yZWFk cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIg b2ZmbnVtKQogCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2NhbiwgQnVmZmVyR2V0QmxvY2tOdW1i ZXIoc28tPmN1cnJQb3MuYnVmKSk7CiAJfQogCi0JY29udGludWVzY2FuID0gdHJ1ZTsJCS8qIGRl ZmF1bHQgYXNzdW1wdGlvbiAqLwotCWluZG5hdHRzID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9m QXR0cmlidXRlcyhzY2FuLT5pbmRleFJlbGF0aW9uKTsKKwlwc3RhdGUuZGlyID0gZGlyOworCXBz dGF0ZS5maW5hbHR1cCA9IE5VTEw7CisJcHN0YXRlLmNvbnRpbnVlc2NhbiA9IHRydWU7IC8qIGRl ZmF1bHQgYXNzdW1wdGlvbiAqLworCXBzdGF0ZS5maW5hbHR1cGNoZWNrZWQgPSBmYWxzZTsKKwog CW1pbm9mZiA9IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7CiAJbWF4b2ZmID0gUGFnZUdldE1heE9m ZnNldE51bWJlcihwYWdlKTsKIApAQCAtMTYwOSw5ICsxNjE1LDExIEBAIF9idF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVt KQogCSAqIHRoZSBsYXN0IGl0ZW0gb24gdGhlIHBhZ2Ugd291bGQgZ2l2ZSBhIG1vcmUgcHJlY2lz ZSBhbnN3ZXIuCiAJICoKIAkgKiBXZSBza2lwIHRoaXMgZm9yIHRoZSBmaXJzdCBwYWdlIGluIHRo ZSBzY2FuIHRvIGV2YWRlIHRoZSBwb3NzaWJsZQotCSAqIHNsb3dkb3duIG9mIHRoZSBwb2ludCBx dWVyaWVzLgorCSAqIHNsb3dkb3duIG9mIHRoZSBwb2ludCBxdWVyaWVzLiAgRG8gdGhlIHNhbWUg d2l0aCBzY2FucyB3aXRoIGFycmF5IGtleXMsCisJICogc2luY2UgdGhhdCBtYWtlcyB0aGUgb3B0 aW1pemF0aW9uIHVuc2FmZSAob3VyIHNlYXJjaC10eXBlIHNjYW4ga2V5cyBjYW4KKwkgKiBjaGFu Z2UgZHVyaW5nIGFueSBjYWxsIHRvIF9idF9jaGVja2tleXMgd2hlbmV2ZXIgYXJyYXkga2V5cyBh cmUgdXNlZCkuCiAJICovCi0JaWYgKCFzby0+Zmlyc3RQYWdlICYmIG1pbm9mZiA8IG1heG9mZikK KwlpZiAoIXNvLT5maXJzdFBhZ2UgJiYgbWlub2ZmIDwgbWF4b2ZmICYmICFzby0+bnVtQXJyYXlL ZXlzKQogCXsKIAkJSXRlbUlkCQlpaWQ7CiAJCUluZGV4VHVwbGUJaXR1cDsKQEAgLTE2MjUsOCAr MTYzMyw5IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCQkgKiBzZXQgZmxhZyB0byB0cnVlIGlmIGFsbCBy ZXF1aXJlZCBrZXlzIGFyZSBzYXRpc2ZpZWQgYW5kIGZhbHNlCiAJCSAqIG90aGVyd2lzZS4KIAkJ ICovCi0JCSh2b2lkKSBfYnRfY2hlY2trZXlzKHNjYW4sIGl0dXAsIGluZG5hdHRzLCBkaXIsCi0J CQkJCQkJICZyZXF1aXJlZE1hdGNoZWRCeVByZWNoZWNrLCBmYWxzZSk7CisJCV9idF9jaGVja2tl eXMoc2NhbiwgJnBzdGF0ZSwgaXR1cCwgZmFsc2UsIGZhbHNlKTsKKwkJcmVxdWlyZWRNYXRjaGVk QnlQcmVjaGVjayA9IHBzdGF0ZS5jb250aW51ZXNjYW47CisJCXBzdGF0ZS5jb250aW51ZXNjYW4g PSB0cnVlOyAvKiByZXNldCAqLwogCX0KIAllbHNlCiAJewpAQCAtMTYzNiw2ICsxNjQ1LDE0IEBA IF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZz ZXROdW1iZXIgb2ZmbnVtKQogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7 CisJCS8qIFNLX1NFQVJDSEFSUkFZIGZvcndhcmQgc2NhbnMgbXVzdCBwcm92aWRlIGhpZ2gga2V5 IHVwIGZyb250ICovCisJCWlmIChzby0+bnVtQXJyYXlLZXlzICYmICFQX1JJR0hUTU9TVChvcGFx dWUpKQorCQl7CisJCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgUF9ISUtFWSk7 CisKKwkJCXBzdGF0ZS5maW5hbHR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBp aWQpOworCQl9CisKIAkJLyogbG9hZCBpdGVtc1tdIGluIGFzY2VuZGluZyBvcmRlciAqLwogCQlp dGVtSW5kZXggPSAwOwogCkBAIC0xNjU5LDggKzE2NzYsOCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSkKIAog CQkJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwogCi0JCQlwYXNz ZXNfcXVhbHMgPSBfYnRfY2hlY2trZXlzKHNjYW4sIGl0dXAsIGluZG5hdHRzLCBkaXIsCi0JCQkJ CQkJCQkJICZjb250aW51ZXNjYW4sIHJlcXVpcmVkTWF0Y2hlZEJ5UHJlY2hlY2spOworCQkJcGFz c2VzX3F1YWxzID0gX2J0X2NoZWNra2V5cyhzY2FuLCAmcHN0YXRlLCBpdHVwLCBmYWxzZSwKKwkJ CQkJCQkJCQkgcmVxdWlyZWRNYXRjaGVkQnlQcmVjaGVjayk7CiAKIAkJCS8qCiAJCQkgKiBJZiB0 aGUgcmVzdWx0IG9mIHByZWNoZWNraW5nIHJlcXVpcmVkIGtleXMgd2FzIHRydWUsIHRoZW4gaW4K QEAgLTE2NjgsOCArMTY4NSw4IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCQkJICogcmVzdWx0IGlzIHRo ZSBzYW1lLgogCQkJICovCiAJCQlBc3NlcnQoIXJlcXVpcmVkTWF0Y2hlZEJ5UHJlY2hlY2sgfHwK LQkJCQkgICBwYXNzZXNfcXVhbHMgPT0gX2J0X2NoZWNra2V5cyhzY2FuLCBpdHVwLCBpbmRuYXR0 cywgZGlyLAotCQkJCQkJCQkJCQkJICZjb250aW51ZXNjYW4sIGZhbHNlKSk7CisJCQkJICAgcGFz c2VzX3F1YWxzID09IF9idF9jaGVja2tleXMoc2NhbiwgJnBzdGF0ZSwgaXR1cCwgZmFsc2UsCisJ CQkJCQkJCQkJCQkgZmFsc2UpKTsKIAkJCWlmIChwYXNzZXNfcXVhbHMpCiAJCQl7CiAJCQkJLyog dHVwbGUgcGFzc2VzIGFsbCBzY2FuIGtleSBjb25kaXRpb25zICovCkBAIC0xNzAzLDcgKzE3MjAs NyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwg T2Zmc2V0TnVtYmVyIG9mZm51bSkKIAkJCQl9CiAJCQl9CiAJCQkvKiBXaGVuICFjb250aW51ZXNj YW4sIHRoZXJlIGNhbid0IGJlIGFueSBtb3JlIG1hdGNoZXMsIHNvIHN0b3AgKi8KLQkJCWlmICgh Y29udGludWVzY2FuKQorCQkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQogCQkJCWJyZWFrOwog CiAJCQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7CkBAIC0xNzIwLDE3ICsxNzM3 LDIzIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCQkgKiBvbmx5IGFwcGVhciBvbiBub24tcGl2b3QgdHVw bGVzIG9uIHRoZSByaWdodCBzaWJsaW5nIHBhZ2UgYXJlCiAJCSAqIGNvbW1vbi4KIAkJICovCi0J CWlmIChjb250aW51ZXNjYW4gJiYgIVBfUklHSFRNT1NUKG9wYXF1ZSkpCisJCWlmIChwc3RhdGUu Y29udGludWVzY2FuICYmICFQX1JJR0hUTU9TVChvcGFxdWUpKQogCQl7Ci0JCQlJdGVtSWQJCWlp ZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgUF9ISUtFWSk7Ci0JCQlJbmRleFR1cGxlCWl0dXAgPSAo SW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKLQkJCWludAkJCXRydW5jYXR0Owor CQkJSW5kZXhUdXBsZQlpdHVwOwogCi0JCQl0cnVuY2F0dCA9IEJUcmVlVHVwbGVHZXROQXR0cyhp dHVwLCBzY2FuLT5pbmRleFJlbGF0aW9uKTsKLQkJCV9idF9jaGVja2tleXMoc2NhbiwgaXR1cCwg dHJ1bmNhdHQsIGRpciwgJmNvbnRpbnVlc2NhbiwgZmFsc2UpOworCQkJaWYgKHBzdGF0ZS5maW5h bHR1cCkKKwkJCQlpdHVwID0gcHN0YXRlLmZpbmFsdHVwOworCQkJZWxzZQorCQkJeworCQkJCUl0 ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBQX0hJS0VZKTsKKworCQkJCWl0dXAgPSAo SW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKKwkJCX0KKworCQkJX2J0X2NoZWNr a2V5cyhzY2FuLCAmcHN0YXRlLCBpdHVwLCB0cnVlLCBmYWxzZSk7CiAJCX0KIAotCQlpZiAoIWNv bnRpbnVlc2NhbikKKwkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQogCQkJc28tPmN1cnJQb3Mu bW9yZVJpZ2h0ID0gZmFsc2U7CiAKIAkJQXNzZXJ0KGl0ZW1JbmRleCA8PSBNYXhUSURzUGVyQlRy ZWVQYWdlKTsKQEAgLTE3NDAsNiArMTc2MywxNCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSkKIAl9CiAJZWxz ZQogCXsKKwkJLyogU0tfU0VBUkNIQVJSQVkgYmFja3dhcmQgc2NhbnMgbXVzdCBwcm92aWRlIGZp bmFsIHR1cGxlIHVwIGZyb250ICovCisJCWlmIChzby0+bnVtQXJyYXlLZXlzICYmIG1pbm9mZiA8 IG1heG9mZikKKwkJeworCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG1pbm9m Zik7CisKKwkJCXBzdGF0ZS5maW5hbHR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdl LCBpaWQpOworCQl9CisKIAkJLyogbG9hZCBpdGVtc1tdIGluIGRlc2NlbmRpbmcgb3JkZXIgKi8K IAkJaXRlbUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZTsKIApAQCAtMTc1MSw2ICsxNzgyLDcg QEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0pCiAJCQlJbmRleFR1cGxlCWl0dXA7CiAJCQlib29sCQl0dXBsZV9h bGl2ZTsKIAkJCWJvb2wJCXBhc3Nlc19xdWFsczsKKwkJCWJvb2wJCWZpbmFsdHVwID0gKG9mZm51 bSA9PSBtaW5vZmYpOwogCiAJCQkvKgogCQkJICogSWYgdGhlIHNjYW4gc3BlY2lmaWVzIG5vdCB0 byByZXR1cm4ga2lsbGVkIHR1cGxlcywgdGhlbiB3ZQpAQCAtMTc2MSwxMiArMTc5MywxOCBAQCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSkKIAkJCSAqIHR1cGxlIG9uIHRoZSBwYWdlLCB3ZSBkbyBjaGVjayB0aGUg aW5kZXgga2V5cywgdG8gcHJldmVudAogCQkJICogdXNlbGVzc2x5IGFkdmFuY2luZyB0byB0aGUg cGFnZSB0byB0aGUgbGVmdC4gIFRoaXMgaXMgc2ltaWxhcgogCQkJICogdG8gdGhlIGhpZ2gga2V5 IG9wdGltaXphdGlvbiB1c2VkIGJ5IGZvcndhcmQgc2NhbnMuCisJCQkgKgorCQkJICogU2VwYXJh dGVseSwgX2J0X2NoZWNra2V5cyBhY3R1YWxseSByZXF1aXJlcyB0aGF0IHdlIGNhbGwgaXQKKwkJ CSAqIHdpdGggdGhlIGZpbmFsIG5vbi1waXZvdCB0dXBsZSBmcm9tIHRoZSBwYWdlLCBpZiB0aGVy ZSdzIG9uZQorCQkJICogKGZpbmFsIHByb2Nlc3NlZCB0dXBsZSwgb3IgZmlyc3QgdHVwbGUgaW4g b2Zmc2V0IG51bWJlciB0ZXJtcykuCisJCQkgKiBXZSBtdXN0IGluZGljYXRlIHdoaWNoIHBhcnRp Y3VsYXIgdHVwbGUgY29tZXMgbGFzdCwgdG9vLgogCQkJICovCiAJCQlpZiAoc2Nhbi0+aWdub3Jl X2tpbGxlZF90dXBsZXMgJiYgSXRlbUlkSXNEZWFkKGlpZCkpCiAJCQl7CiAJCQkJQXNzZXJ0KG9m Zm51bSA+PSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpKTsKLQkJCQlpZiAob2ZmbnVtID4gUF9GSVJT VERBVEFLRVkob3BhcXVlKSkKKwkJCQlpZiAoIWZpbmFsdHVwKQogCQkJCXsKKwkJCQkJQXNzZXJ0 KG9mZm51bSA+IG1pbm9mZik7CiAJCQkJCW9mZm51bSA9IE9mZnNldE51bWJlclByZXYob2ZmbnVt KTsKIAkJCQkJY29udGludWU7CiAJCQkJfQpAQCAtMTc3OCw4ICsxODE2LDggQEAgX2J0X3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBv ZmZudW0pCiAKIAkJCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsK IAotCQkJcGFzc2VzX3F1YWxzID0gX2J0X2NoZWNra2V5cyhzY2FuLCBpdHVwLCBpbmRuYXR0cywg ZGlyLAotCQkJCQkJCQkJCSAmY29udGludWVzY2FuLCByZXF1aXJlZE1hdGNoZWRCeVByZWNoZWNr KTsKKwkJCXBhc3Nlc19xdWFscyA9IF9idF9jaGVja2tleXMoc2NhbiwgJnBzdGF0ZSwgaXR1cCwg ZmluYWx0dXAsCisJCQkJCQkJCQkJIHJlcXVpcmVkTWF0Y2hlZEJ5UHJlY2hlY2spOwogCiAJCQkv KgogCQkJICogSWYgdGhlIHJlc3VsdCBvZiBwcmVjaGVja2luZyByZXF1aXJlZCBrZXlzIHdhcyB0 cnVlLCB0aGVuIGluCkBAIC0xNzg3LDggKzE4MjUsOCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSkKIAkJCSAq IHJlc3VsdCBpcyB0aGUgc2FtZS4KIAkJCSAqLwogCQkJQXNzZXJ0KCFyZXF1aXJlZE1hdGNoZWRC eVByZWNoZWNrIHx8Ci0JCQkJICAgcGFzc2VzX3F1YWxzID09IF9idF9jaGVja2tleXMoc2Nhbiwg aXR1cCwgaW5kbmF0dHMsIGRpciwKLQkJCQkJCQkJCQkJCSAmY29udGludWVzY2FuLCBmYWxzZSkp OworCQkJCSAgIHBhc3Nlc19xdWFscyA9PSBfYnRfY2hlY2trZXlzKHNjYW4sICZwc3RhdGUsIGl0 dXAsCisJCQkJCQkJCQkJCQkgZmluYWx0dXAsIGZhbHNlKSk7CiAJCQlpZiAocGFzc2VzX3F1YWxz ICYmIHR1cGxlX2FsaXZlKQogCQkJewogCQkJCS8qIHR1cGxlIHBhc3NlcyBhbGwgc2NhbiBrZXkg Y29uZGl0aW9ucyAqLwpAQCAtMTgyNyw3ICsxODY1LDcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0pCiAJCQkJ CX0KIAkJCQl9CiAJCQl9Ci0JCQlpZiAoIWNvbnRpbnVlc2NhbikKKwkJCWlmICghcHN0YXRlLmNv bnRpbnVlc2NhbikKIAkJCXsKIAkJCQkvKiB0aGVyZSBjYW4ndCBiZSBhbnkgbW9yZSBtYXRjaGVz LCBzbyBzdG9wICovCiAJCQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwppbmRleCAxNTEwYjk3ZmIuLjgzMThlNjI1MCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpAQCAtMzMsNyArMzMsNyBAQAogCiB0eXBlZGVm IHN0cnVjdCBCVFNvcnRBcnJheUNvbnRleHQKIHsKLQlGbWdySW5mbwlmbGluZm87CisJRm1ncklu Zm8gICAqb3JkZXJwcm9jOwogCU9pZAkJCWNvbGxhdGlvbjsKIAlib29sCQlyZXZlcnNlOwogfSBC VFNvcnRBcnJheUNvbnRleHQ7CkBAIC00MSwxNSArNDEsNDEgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRT b3J0QXJyYXlDb250ZXh0CiBzdGF0aWMgRGF0dW0gX2J0X2ZpbmRfZXh0cmVtZV9lbGVtZW50KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBza2V5LAogCQkJCQkJCQkJICBTdHJhdGVneU51bWJl ciBzdHJhdCwKIAkJCQkJCQkJCSAgRGF0dW0gKmVsZW1zLCBpbnQgbmVsZW1zKTsKK3N0YXRpYyB2 b2lkIF9idF9zb3J0X2NtcF9mdW5jX3NldHVwKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBz a2V5KTsKIHN0YXRpYyBpbnQJX2J0X3NvcnRfYXJyYXlfZWxlbWVudHMoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuS2V5IHNrZXksCiAJCQkJCQkJCQlib29sIHJldmVyc2UsCiAJCQkJCQkJCQlEYXR1 bSAqZWxlbXMsIGludCBuZWxlbXMpOworc3RhdGljIGludAlfYnRfbWVyZ2VfYXJyYXlzKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBza2V5LCBib29sIHJldmVyc2UsCisJCQkJCQkJIERhdHVt ICplbGVtc19vcmlnLCBpbnQgbmVsZW1zX29yaWcsCisJCQkJCQkJIERhdHVtICplbGVtc19uZXh0 LCBpbnQgbmVsZW1zX25leHQpOwogc3RhdGljIGludAlfYnRfY29tcGFyZV9hcnJheV9lbGVtZW50 cyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICphcmcpOworc3RhdGljIGlubGlu ZSBpbnQzMiBfYnRfY29tcGFyZV9hcnJheV9za2V5KEZtZ3JJbmZvICpvcmRlcnByb2MsCisJCQkJ CQkJCQkJICAgRGF0dW0gdHVwZGF0dW0sIGJvb2wgdHVwbnVsbCwKKwkJCQkJCQkJCQkgICBEYXR1 bSBhcnJkYXR1bSwgU2NhbktleSBjdXIpOworc3RhdGljIGludAlfYnRfYmluc3JjaF9hcnJheV9z a2V5KEZtZ3JJbmZvICpvcmRlcnByb2MsCisJCQkJCQkJCSAgIGJvb2wgY3VyX2VsZW1fc3RhcnQs IFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgICBEYXR1bSB0dXBkYXR1bSwgYm9vbCB0dXBu dWxsLAorCQkJCQkJCQkgICBCVEFycmF5S2V5SW5mbyAqYXJyYXksIFNjYW5LZXkgY3VyLAorCQkJ CQkJCQkgICBpbnQzMiAqZmluYWxfcmVzdWx0KTsKK3N0YXRpYyBib29sIF9idF9hZHZhbmNlX2Fy cmF5X2tleXNfaW5jcmVtZW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp Oworc3RhdGljIGJvb2wgX2J0X3R1cGxlX2JlZm9yZV9hcnJheV9za2V5cyhJbmRleFNjYW5EZXNj IHNjYW4sCisJCQkJCQkJCQkJIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLAorCQkJCQkJCQkJCSBJ bmRleFR1cGxlIHR1cGxlKTsKK3N0YXRpYyBib29sIF9idF9hZHZhbmNlX2FycmF5X2tleXMoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSwKKwkJCQkJCQkJICAgSW5k ZXhUdXBsZSB0dXBsZSwgYm9vbCBza3JlcXVpcmVkdHJpZ2dlcik7CitzdGF0aWMgdm9pZCBfYnRf cHJlcHJvY2Vzc19rZXlzX2xlYWZidWYoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKyNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCitzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2FycmF5X3NjYW5rZXlzKElu ZGV4U2NhbkRlc2Mgc2Nhbik7CisjZW5kaWYKIHN0YXRpYyBib29sIF9idF9jb21wYXJlX3NjYW5r ZXlfYXJncyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgb3AsCiAJCQkJCQkJCQkgU2Nhbktl eSBsZWZ0YXJnLCBTY2FuS2V5IHJpZ2h0YXJnLAogCQkJCQkJCQkJIGJvb2wgKnJlc3VsdCk7CiBz dGF0aWMgYm9vbCBfYnRfZml4X3NjYW5rZXlfc3RyYXRlZ3koU2NhbktleSBza2V5LCBpbnQxNiAq aW5kb3B0aW9uKTsKIHN0YXRpYyB2b2lkIF9idF9tYXJrX3NjYW5rZXlfcmVxdWlyZWQoU2Nhbktl eSBza2V5KTsKK3N0YXRpYyBib29sIF9idF9jaGVja19jb21wYXJlKFNjYW5EaXJlY3Rpb24gZGly LCBCVFNjYW5PcGFxdWUgc28sCisJCQkJCQkJICBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0 dHMsIFR1cGxlRGVzYyB0dXBkZXNjLAorCQkJCQkJCSAgYm9vbCAqY29udGludWVzY2FuLCBib29s ICpza3JlcXVpcmVkdHJpZ2dlciwKKwkJCQkJCQkgIGJvb2wgcmVxdWlyZWRNYXRjaGVkQnlQcmVj aGVjayk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2tfcm93Y29tcGFyZShTY2FuS2V5IHNrZXksCiAJ CQkJCQkJCSBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsIFR1cGxlRGVzYyB0dXBkZXNj LAogCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgKmNvbnRpbnVlc2Nhbik7CkBAIC0x OTgsMTMgKzIyNCw0OCBAQCBfYnRfZnJlZXN0YWNrKEJUU3RhY2sgc3RhY2spCiAgKiBJZiB0aGVy ZSBhcmUgYW55IFNLX1NFQVJDSEFSUkFZIHNjYW4ga2V5cywgZGVjb25zdHJ1Y3QgdGhlIGFycmF5 KHMpIGFuZAogICogc2V0IHVwIEJUQXJyYXlLZXlJbmZvIGluZm8gZm9yIGVhY2ggb25lIHRoYXQg aXMgYW4gZXF1YWxpdHktdHlwZSBrZXkuCiAgKiBQcmVwYXJlIG1vZGlmaWVkIHNjYW4ga2V5cyBp biBzby0+YXJyYXlLZXlEYXRhLCB3aGljaCB3aWxsIGhvbGQgdGhlIGN1cnJlbnQKLSAqIGFycmF5 IGVsZW1lbnRzIGR1cmluZyBlYWNoIHByaW1pdGl2ZSBpbmRleHNjYW4gb3BlcmF0aW9uLiAgRm9y IGluZXF1YWxpdHkKLSAqIGFycmF5IGtleXMsIGl0J3Mgc3VmZmljaWVudCB0byBmaW5kIHRoZSBl eHRyZW1lIGVsZW1lbnQgdmFsdWUgYW5kIHJlcGxhY2UKLSAqIHRoZSB3aG9sZSBhcnJheSB3aXRo IHRoYXQgc2NhbGFyIHZhbHVlLgorICogYXJyYXkgZWxlbWVudHMuCisgKgorICogX2J0X3ByZXBy b2Nlc3Nfa2V5cyB0cmVhdHMgZWFjaCBwcmltaXRpdmUgc2NhbiBhcyBhbiBpbmRlcGVuZGVudCBw aWVjZSBvZgorICogd29yay4gIFRoYXQgc3RydWN0dXJlIHB1c2hlcyB0aGUgcmVzcG9uc2liaWxp dHkgZm9yIHByZXByb2Nlc3NpbmcgdGhhdCBtdXN0CisgKiB3b3JrICJhY3Jvc3MgYXJyYXkga2V5 cyIgb250byB1cy4gIFRoaXMgZGl2aXNpb24gb2YgbGFib3IgbWFrZXMgc2Vuc2Ugb25jZQorICog eW91IGNvbnNpZGVyIHRoYXQgd2UncmUgdHlwaWNhbGx5IGNhbGxlZCBubyBtb3JlIHRoYW4gb25j ZSBwZXIgYnRyZXNjYW4sCisgKiB3aGVyZWFzIF9idF9wcmVwcm9jZXNzX2tleXMgaXMgYWx3YXlz IGNhbGxlZCBvbmNlIHBlciBwcmltaXRpdmUgaW5kZXggc2Nhbi4KKyAqCisgKiBDdXJyZW50bHkg d2UgcGVyZm9ybSB0d28ga2luZHMgb2YgcHJlcHJvY2Vzc2luZyB0byBkZWFsIHdpdGggcmVkdW5k YW5jaWVzLgorICogRm9yIGluZXF1YWxpdHkgYXJyYXkga2V5cywgaXQncyBzdWZmaWNpZW50IHRv IGZpbmQgdGhlIGV4dHJlbWUgZWxlbWVudAorICogdmFsdWUgYW5kIHJlcGxhY2UgdGhlIHdob2xl IGFycmF5IHdpdGggdGhhdCBzY2FsYXIgdmFsdWUuICBUaGlzIGVsaW1pbmF0ZXMKKyAqIGFsbCBi dXQgb25lIGFycmF5IGtleSBhcyByZWR1bmRhbnQuICBTaW1pbGFybHksIHdlIGFyZSBjYXBhYmxl IG9mICJtZXJnaW5nCisgKiB0b2dldGhlciIgbXVsdGlwbGUgZXF1YWxpdHkgYXJyYXkga2V5cyBm cm9tIHR3byBvciBtb3JlIGlucHV0IHNjYW4ga2V5cworICogaW50byBhIHNpbmdsZSBvdXRwdXQg c2NhbiBrZXkgdGhhdCBjb250YWlucyBvbmx5IHRoZSBpbnRlcnNlY3RpbmcgYXJyYXkKKyAqIGVs ZW1lbnRzLiAgVGhpcyBjYW4gZWxpbWluYXRlIG1hbnkgcmVkdW5kYW50IGFycmF5IGVsZW1lbnRz LCBhcyB3ZWxsIGFzCisgKiBlbGltaW5hdGluZyB3aG9sZSBhcnJheSBzY2FuIGtleXMgYXMgcmVk dW5kYW50LgorICoKKyAqIE5vdGU6IF9idF9zdGFydF9hcnJheV9rZXlzIGFjdHVhbGx5IHNldHMg dXAgdGhlIGN1cl9lbGVtIGNvdW50ZXJzIGxhdGVyIG9uLAorICogb25jZSB0aGUgc2NhbiBkaXJl Y3Rpb24gaXMga25vd24uCiAgKgogICogTm90ZTogdGhlIHJlYXNvbiB3ZSBuZWVkIHNvLT5hcnJh eUtleURhdGEsIHJhdGhlciB0aGFuIGp1c3Qgc2NyaWJibGluZwogICogb24gc2Nhbi0+a2V5RGF0 YSwgaXMgdGhhdCBjYWxsZXJzIGFyZSBwZXJtaXR0ZWQgdG8gY2FsbCBidHJlc2NhbiB3aXRob3V0 CiAgKiBzdXBwbHlpbmcgYSBuZXcgc2V0IG9mIHNjYW5rZXkgZGF0YS4KKyAqCisgKiBOb3RlOiBf YnRfcHJlcHJvY2Vzc19rZXlzIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgc28tPmtl eURhdGEgc2NhbgorICoga2V5cyB1c2VkIGJ5IF9idF9jaGVja2tleXMuICBJbmRleCBzY2FucyB0 aGF0IGRvbid0IHVzZSBlcXVhbGl0eSBhcnJheSBrZXlzCisgKiB3aWxsIGhhdmUgX2J0X3ByZXBy b2Nlc3Nfa2V5cyB0cmVhdCBzY2FuLT5rZXlEYXRhIGFzIGlucHV0IGFuZCBzby0+a2V5RGF0YQor ICogYXMgb3V0cHV0LiAgU2NhbnMgdGhhdCB1c2UgZXF1YWxpdHkgYXJyYXkga2V5cyBoYXZlIF9i dF9wcmVwcm9jZXNzX2tleXMKKyAqIHRyZWF0IHNvLT5hcnJheUtleURhdGEgKHdoaWNoIGlzIG91 ciBvdXRwdXQpIGFzIHRoZWlyIGlucHV0LCB3aGlsZSAoYXMgcGVyCisgKiB1c3VhbCkgb3V0cHV0 dGluZyBzby0+a2V5RGF0YSBmb3IgX2J0X2NoZWNra2V5cy4gIFRoaXMgZnVuY3Rpb24gYWRkcyBh bgorICogYWRkaXRpb25hbCBsYXllciBvZiBpbmRpcmVjdGlvbiB0aGF0IGFsbG93cyBfYnRfcHJl cHJvY2Vzc19rZXlzIHRvIG1vcmUgb3IKKyAqIGxlc3MgYXZvaWQgZGVhbGluZyB3aXRoIFNLX1NF QVJDSEFSUkFZIGFzIGEgc3BlY2lhbCBjYXNlLgorICoKKyAqIE5vdGU6IF9idF9wcmVwcm9jZXNz X2tleXNfbGVhZmJ1ZiB3b3JrcyBieSB1cGRhdGluZyBhbHJlYWR5LXByb2Nlc3NlZAorICogb3V0 cHV0IGtleXMgKHNvLT5rZXlEYXRhKSBpbi1wbGFjZS4gIEl0IGNhbm5vdCBlbGltaW5hdGUgcmVk dW5kYW50IG9yCisgKiBjb250cmFkaWN0b3J5IHNjYW4ga2V5cy4gIFRoaXMgbmVjZXNzaXRhdGVz IGhhdmluZyBfYnRfcHJlcHJvY2Vzc19rZXlzCisgKiB1bmRlcnN0YW5kIHRoYXQgaXQgaXMgdW5z YWZlIHRvIGVsaW1pbmF0ZSAicmVkdW5kYW50IiBTS19TRUFSQ0hBUlJBWQorICogZXF1YWxpdHkg c2NhbiBrZXlzIG9uIHRoZSBiYXNpcyBvZiB3aGF0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGN1cnJl bnQgYXJyYXkKKyAqIGtleSB2YWx1ZXMgLS0gaXQgbXVzdCBjb25zZXJ2YXRpdmVseSBhc3N1bWUg dGhhdCBzdWNoIGEgc2NhbiBrZXkgbWlnaHQgbm8KKyAqIGxvbmdlciBiZSByZWR1bmRhbnQgYWZ0 ZXIgdGhlIG5leHQgX2J0X3ByZXByb2Nlc3Nfa2V5c19sZWFmYnVmIGNhbGwuCisgKiBJZGVhbGx5 IHdlJ2QgYmUgYWJsZSB0byBkZWFsIHdpdGggdGhhdCBieSBlbGltaW5hdGluZyBhIHN1YnNldCBv ZiB0cnVseQorICogcmVkdW5kYW50IGFycmF5IGtleXMgdXAtZnJvbnQsIGJ1dCBpdCBkb2Vzbid0 IHNlZW0gd29ydGggdGhlIHRyb3VibGUuCiAgKi8KIHZvaWQKIF9idF9wcmVwcm9jZXNzX2FycmF5 X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKQpAQCAtMjEyLDcgKzI3Myw5IEBAIF9idF9wcmVwcm9j ZXNzX2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlpbnQJCQludW1iZXJPZktleXMgPSBzY2FuLT5u dW1iZXJPZktleXM7CiAJaW50MTYJICAgKmluZG9wdGlvbiA9IHNjYW4tPmluZGV4UmVsYXRpb24t PnJkX2luZG9wdGlvbjsKKwlpbnQxNgkJbmtleWF0dHMgPSBJbmRleFJlbGF0aW9uR2V0TnVtYmVy T2ZLZXlBdHRyaWJ1dGVzKHNjYW4tPmluZGV4UmVsYXRpb24pOwogCWludAkJCW51bUFycmF5S2V5 czsKKwlpbnQJCQlsYXN0RXF1YWxpdHlBcnJheUF0dCA9IC0xOwogCVNjYW5LZXkJCWN1cjsKIAlp bnQJCQlpOwogCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsKQEAgLTI2NSw2ICszMjgsNyBAQCBf YnRfcHJlcHJvY2Vzc19hcnJheV9rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCS8qIEFsbG9j YXRlIHNwYWNlIGZvciBwZXItYXJyYXkgZGF0YSBpbiB0aGUgd29ya3NwYWNlIGNvbnRleHQgKi8K IAlzby0+YXJyYXlLZXlzID0gKEJUQXJyYXlLZXlJbmZvICopIHBhbGxvYzAobnVtQXJyYXlLZXlz ICogc2l6ZW9mKEJUQXJyYXlLZXlJbmZvKSk7CisJc28tPm9yZGVyUHJvY3MgPSAoRm1nckluZm8g KikgcGFsbG9jMChua2V5YXR0cyAqIHNpemVvZihGbWdySW5mbykpOwogCiAJLyogTm93IHByb2Nl c3MgZWFjaCBhcnJheSBrZXkgKi8KIAludW1BcnJheUtleXMgPSAwOwpAQCAtMjgxLDYgKzM0NSwx NiBAQCBfYnRfcHJlcHJvY2Vzc19hcnJheV9rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJaW50 CQkJajsKIAogCQljdXIgPSAmc28tPmFycmF5S2V5RGF0YVtpXTsKKworCQkvKgorCQkgKiBBdHRy aWJ1dGVzIHdpdGggZXF1YWxpdHktdHlwZSBzY2FuIGtleXMgKGluY2x1ZGluZyBidXQgbm90IGxp bWl0ZWQKKwkJICogdG8gYXJyYXkgc2NhbiBrZXlzKSB3aWxsIG5lZWQgYSAzLXdheSBjb21wYXJp c29uIGZ1bmN0aW9uLiAgIFNldAorCQkgKiB0aGF0IHVwIG5vdy4gIChBdm9pZHMgcmVwZWF0aW5n IHdvcmsgZm9yIHRoZSBzYW1lIGF0dHJpYnV0ZS4pCisJCSAqLworCQlpZiAoY3VyLT5za19zdHJh dGVneSA9PSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIgJiYKKwkJCSFPaWRJc1ZhbGlkKHNvLT5vcmRl clByb2NzW2N1ci0+c2tfYXR0bm8gLSAxXS5mbl9vaWQpKQorCQkJX2J0X3NvcnRfY21wX2Z1bmNf c2V0dXAoc2NhbiwgY3VyKTsKKwogCQlpZiAoIShjdXItPnNrX2ZsYWdzICYgU0tfU0VBUkNIQVJS QVkpKQogCQkJY29udGludWU7CiAKQEAgLTM1Nyw2ICs0MzEsNDYgQEAgX2J0X3ByZXByb2Nlc3Nf YXJyYXlfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJCQkJCQkJCShpbmRvcHRpb25bY3Vy LT5za19hdHRubyAtIDFdICYgSU5ET1BUSU9OX0RFU0MpICE9IDAsCiAJCQkJCQkJCQkJCWVsZW1f dmFsdWVzLCBudW1fbm9ubnVsbHMpOwogCisJCS8qCisJCSAqIElmIHRoaXMgc2NhbiBrZXkgaXMg c2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG8gYSBwcmV2aW91cyBlcXVhbGl0eQorCQkgKiBvcGVy YXRvciBhcnJheSBzY2FuIGtleSwgbWVyZ2UgdGhlIHR3byBhcnJheXMgdG9nZXRoZXIgdG8gZWxp bWluYXRlCisJCSAqIHJlZHVuZGFudCBub24taW50ZXJzZWN0aW5nIGVsZW1lbnRzIChhbmQgcmVk dW5kYW50IHdob2xlIHNjYW4ga2V5cykKKwkJICovCisJCWlmIChsYXN0RXF1YWxpdHlBcnJheUF0 dCA9PSBjdXItPnNrX2F0dG5vKQorCQl7CisJCQlCVEFycmF5S2V5SW5mbyAqcHJldiA9ICZzby0+ YXJyYXlLZXlzW251bUFycmF5S2V5cyAtIDFdOworCisJCQlBc3NlcnQoc28tPmFycmF5S2V5RGF0 YVtwcmV2LT5zY2FuX2tleV0uc2tfZnVuYy5mbl9vaWQgPT0KKwkJCQkgICBjdXItPnNrX2Z1bmMu Zm5fb2lkKTsKKwkJCUFzc2VydChzby0+YXJyYXlLZXlEYXRhW3ByZXYtPnNjYW5fa2V5XS5za19z dWJ0eXBlID09CisJCQkJICAgY3VyLT5za19zdWJ0eXBlKTsKKworCQkJLyogV2UgY291bGQgcGZy ZWUoZWxlbV92YWx1ZXMpIGFmdGVyLCBidXQgbm90IHdvcnRoIHRoZSBjeWNsZXMgKi8KKwkJCW51 bV9lbGVtcyA9IF9idF9tZXJnZV9hcnJheXMoc2NhbiwgY3VyLAorCQkJCQkJCQkJCSAoaW5kb3B0 aW9uW2N1ci0+c2tfYXR0bm8gLSAxXSAmIElORE9QVElPTl9ERVNDKSAhPSAwLAorCQkJCQkJCQkJ CSBwcmV2LT5lbGVtX3ZhbHVlcywgcHJldi0+bnVtX2VsZW1zLAorCQkJCQkJCQkJCSBlbGVtX3Zh bHVlcywgbnVtX2VsZW1zKTsKKworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGFyZSBubyBpbnRlcnNl Y3RpbmcgZWxlbWVudHMgbGVmdCBmcm9tIG1lcmdpbmcgdGhpcworCQkJICogYXJyYXkgaW50byB0 aGUgcHJldmlvdXMgYXJyYXkgb24gdGhlIHNhbWUgYXR0cmlidXRlLCB0aGUgc2NhbgorCQkJICog cXVhbCBpcyB1bnNhdGlzZmlhYmxlCisJCQkgKi8KKwkJCWlmIChudW1fZWxlbXMgPT0gMCkKKwkJ CXsKKwkJCQludW1BcnJheUtleXMgPSAtMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJ CSAqIExvd2VyIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgZnJvbSB0aGUgcHJldmlvdXMgYXJyYXks IGFuZCBtYXJrCisJCQkgKiB0aGlzIHNjYW4ga2V5L2FycmF5IGFzIHJlZHVuZGFudCBmb3IgZXZl cnkgcHJpbWl0aXZlIGluZGV4IHNjYW4KKwkJCSAqLworCQkJcHJldi0+bnVtX2VsZW1zID0gbnVt X2VsZW1zOworCQkJY3VyLT5za19mbGFncyB8PSBTS19CVF9SREROQVJSQVk7CisJCQljb250aW51 ZTsKKwkJfQorCiAJCS8qCiAJCSAqIEFuZCBzZXQgdXAgdGhlIEJUQXJyYXlLZXlJbmZvIGRhdGEu CiAJCSAqLwpAQCAtMzY0LDYgKzQ3OCw3IEBAIF9idF9wcmVwcm9jZXNzX2FycmF5X2tleXMoSW5k ZXhTY2FuRGVzYyBzY2FuKQogCQlzby0+YXJyYXlLZXlzW251bUFycmF5S2V5c10ubnVtX2VsZW1z ID0gbnVtX2VsZW1zOwogCQlzby0+YXJyYXlLZXlzW251bUFycmF5S2V5c10uZWxlbV92YWx1ZXMg PSBlbGVtX3ZhbHVlczsKIAkJbnVtQXJyYXlLZXlzKys7CisJCWxhc3RFcXVhbGl0eUFycmF5QXR0 ID0gY3VyLT5za19hdHRubzsKIAl9CiAKIAlzby0+bnVtQXJyYXlLZXlzID0gbnVtQXJyYXlLZXlz OwpAQCAtNDM3LDI2ICs1NTIsMjAgQEAgX2J0X2ZpbmRfZXh0cmVtZV9lbGVtZW50KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbktleSBza2V5LAogfQogCiAvKgotICogX2J0X3NvcnRfYXJyYXlfZWxl bWVudHMoKSAtLSBzb3J0IGFuZCBkZS1kdXAgYXJyYXkgZWxlbWVudHMKKyAqIExvb2sgdXAgdGhl IGFwcHJvcHJpYXRlIGNvbXBhcmlzb24gZnVuY3Rpb24gaW4gdGhlIG9wZmFtaWx5LgogICoKLSAq IFRoZSBhcnJheSBlbGVtZW50cyBhcmUgc29ydGVkIGluLXBsYWNlLCBhbmQgdGhlIG5ldyBudW1i ZXIgb2YgZWxlbWVudHMKLSAqIGFmdGVyIGR1cGxpY2F0ZSByZW1vdmFsIGlzIHJldHVybmVkLgot ICoKLSAqIHNjYW4gYW5kIHNrZXkgaWRlbnRpZnkgdGhlIGluZGV4IGNvbHVtbiwgd2hvc2Ugb3Bm YW1pbHkgZGV0ZXJtaW5lcyB0aGUKLSAqIGNvbXBhcmlzb24gc2VtYW50aWNzLiAgSWYgcmV2ZXJz ZSBpcyB0cnVlLCB3ZSBzb3J0IGluIGRlc2NlbmRpbmcgb3JkZXIuCisgKiBOb3RlOiBpdCdzIHBv c3NpYmxlIHRoYXQgdGhpcyB3b3VsZCBmYWlsLCBpZiB0aGUgb3BmYW1pbHkgaXMgaW5jb21wbGV0 ZSwKKyAqIGJ1dCBpdCBzZWVtcyBxdWl0ZSB1bmxpa2VseSB0aGF0IGFuIG9wZmFtaWx5IHdvdWxk IG9taXQgbm9uLWNyb3NzLXR5cGUKKyAqIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBhbnkgZGF0YXR5 cGUgdGhhdCBpdCBzdXBwb3J0cyBhdCBhbGwuCiAgKi8KLXN0YXRpYyBpbnQKLV9idF9zb3J0X2Fy cmF5X2VsZW1lbnRzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBza2V5LAotCQkJCQkJYm9v bCByZXZlcnNlLAotCQkJCQkJRGF0dW0gKmVsZW1zLCBpbnQgbmVsZW1zKQorc3RhdGljIHZvaWQK K19idF9zb3J0X2NtcF9mdW5jX3NldHVwKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBza2V5 KQogeworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlS ZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCU9pZAkJCWVsZW10eXBlOwogCVJl Z1Byb2NlZHVyZSBjbXBfcHJvYzsKLQlCVFNvcnRBcnJheUNvbnRleHQgY3h0OwotCi0JaWYgKG5l bGVtcyA8PSAxKQotCQlyZXR1cm4gbmVsZW1zOwkJCS8qIG5vIHdvcmsgdG8gZG8gKi8KKwlGbWdy SW5mbyAgICpvcmRlcnByb2MgPSAmc28tPm9yZGVyUHJvY3Nbc2tleS0+c2tfYXR0bm8gLSAxXTsK IAogCS8qCiAJICogRGV0ZXJtaW5lIHRoZSBub21pbmFsIGRhdGF0eXBlIG9mIHRoZSBhcnJheSBl bGVtZW50cy4gIFdlIGhhdmUgdG8KQEAgLTQ3MSwxMiArNTgwLDEwIEBAIF9idF9zb3J0X2FycmF5 X2VsZW1lbnRzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBza2V5LAogCSAqIExvb2sgdXAg dGhlIGFwcHJvcHJpYXRlIGNvbXBhcmlzb24gZnVuY3Rpb24gaW4gdGhlIG9wZmFtaWx5LgogCSAq CiAJICogTm90ZTogaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgd291bGQgZmFpbCwgaWYgdGhlIG9w ZmFtaWx5IGlzCi0JICogaW5jb21wbGV0ZSwgYnV0IGl0IHNlZW1zIHF1aXRlIHVubGlrZWx5IHRo YXQgYW4gb3BmYW1pbHkgd291bGQgb21pdAotCSAqIG5vbi1jcm9zcy10eXBlIHN1cHBvcnQgZnVu Y3Rpb25zIGZvciBhbnkgZGF0YXR5cGUgdGhhdCBpdCBzdXBwb3J0cyBhdAotCSAqIGFsbC4KKwkg KiBpbmNvbXBsZXRlLgogCSAqLwogCWNtcF9wcm9jID0gZ2V0X29wZmFtaWx5X3Byb2MocmVsLT5y ZF9vcGZhbWlseVtza2V5LT5za19hdHRubyAtIDFdLAotCQkJCQkJCQkgZWxlbXR5cGUsCisJCQkJ CQkJCSByZWwtPnJkX29wY2ludHlwZVtza2V5LT5za19hdHRubyAtIDFdLAogCQkJCQkJCQkgZWxl bXR5cGUsCiAJCQkJCQkJCSBCVE9SREVSX1BST0MpOwogCWlmICghUmVnUHJvY2VkdXJlSXNWYWxp ZChjbXBfcHJvYykpCkBAIC00ODQsOCArNTkxLDMyIEBAIF9idF9zb3J0X2FycmF5X2VsZW1lbnRz KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBza2V5LAogCQkJIEJUT1JERVJfUFJPQywgZWxl bXR5cGUsIGVsZW10eXBlLAogCQkJIHJlbC0+cmRfb3BmYW1pbHlbc2tleS0+c2tfYXR0bm8gLSAx XSk7CiAKKwkvKiBTYXZlIGluIG9yZGVycHJvYyBlbnRyeSBmb3IgYXR0cmlidXRlICovCisJZm1n cl9pbmZvX2N4dChjbXBfcHJvYywgb3JkZXJwcm9jLCBzby0+YXJyYXlDb250ZXh0KTsKK30KKwor LyoKKyAqIF9idF9zb3J0X2FycmF5X2VsZW1lbnRzKCkgLS0gc29ydCBhbmQgZGUtZHVwIGFycmF5 IGVsZW1lbnRzCisgKgorICogVGhlIGFycmF5IGVsZW1lbnRzIGFyZSBzb3J0ZWQgaW4tcGxhY2Us IGFuZCB0aGUgbmV3IG51bWJlciBvZiBlbGVtZW50cworICogYWZ0ZXIgZHVwbGljYXRlIHJlbW92 YWwgaXMgcmV0dXJuZWQuCisgKgorICogc2NhbiBhbmQgc2tleSBpZGVudGlmeSB0aGUgaW5kZXgg Y29sdW1uLCB3aG9zZSBvcGZhbWlseSBkZXRlcm1pbmVzIHRoZQorICogY29tcGFyaXNvbiBzZW1h bnRpY3MuICBJZiByZXZlcnNlIGlzIHRydWUsIHdlIHNvcnQgaW4gZGVzY2VuZGluZyBvcmRlci4K KyAqLworc3RhdGljIGludAorX2J0X3NvcnRfYXJyYXlfZWxlbWVudHMoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuS2V5IHNrZXksCisJCQkJCQlib29sIHJldmVyc2UsCisJCQkJCQlEYXR1bSAqZWxl bXMsIGludCBuZWxlbXMpCit7CisJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOworCUJUU29ydEFycmF5Q29udGV4dCBjeHQ7CisKKwlpZiAobmVsZW1zIDw9IDEp CisJCXJldHVybiBuZWxlbXM7CQkJLyogbm8gd29yayB0byBkbyAqLworCiAJLyogU29ydCB0aGUg YXJyYXkgZWxlbWVudHMgKi8KLQlmbWdyX2luZm8oY21wX3Byb2MsICZjeHQuZmxpbmZvKTsKKwlj eHQub3JkZXJwcm9jID0gJnNvLT5vcmRlclByb2NzW3NrZXktPnNrX2F0dG5vIC0gMV07CiAJY3h0 LmNvbGxhdGlvbiA9IHNrZXktPnNrX2NvbGxhdGlvbjsKIAljeHQucmV2ZXJzZSA9IHJldmVyc2U7 CiAJcXNvcnRfYXJnKGVsZW1zLCBuZWxlbXMsIHNpemVvZihEYXR1bSksCkBAIC00OTYsNiArNjI3 LDQ4IEBAIF9idF9zb3J0X2FycmF5X2VsZW1lbnRzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nhbktl eSBza2V5LAogCQkJCQkgICBfYnRfY29tcGFyZV9hcnJheV9lbGVtZW50cywgJmN4dCk7CiB9CiAK Ky8qCisgKiBfYnRfbWVyZ2VfYXJyYXlzKCkgLS0gbWVyZ2UgdG9nZXRoZXIgZHVwbGljYXRlIGFy cmF5IGtleXMKKyAqCisgKiBCb3RoIHNjYW4ga2V5J3MgaGF2ZSBhcnJheSBlbGVtZW50cyB0aGF0 IGhhdmUgYWxyZWFkeSBiZWVuIHNvcnRlZCBhbmQKKyAqIGRlZHVwbGljYXRlZC4KKyAqLworc3Rh dGljIGludAorX2J0X21lcmdlX2FycmF5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2tl eSwgYm9vbCByZXZlcnNlLAorCQkJCSBEYXR1bSAqZWxlbXNfb3JpZywgaW50IG5lbGVtc19vcmln LAorCQkJCSBEYXR1bSAqZWxlbXNfbmV4dCwgaW50IG5lbGVtc19uZXh0KQoreworCUJUU2Nhbk9w YXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVFNvcnRBcnJheUNvbnRl eHQgY3h0OworCURhdHVtCSAgICptZXJnZWQgPSBwYWxsb2Moc2l6ZW9mKERhdHVtKSAqIG5lbGVt c19vcmlnKTsKKwlpbnQJCQltZXJnZWRfbmVsZW1zID0gMDsKKworCS8qCisJICogSW5jcmVtZW50 YWxseSBjb3B5IHRoZSBvcmlnaW5hbCBhcnJheSBpbnRvIGEgdGVtcCBidWZmZXIsIHNraXBwaW5n IG92ZXIKKwkgKiBhbnkgaXRlbXMgdGhhdCBhcmUgbWlzc2luZyBmcm9tIHRoZSAibmV4dCIgYXJy YXkKKwkgKi8KKwljeHQub3JkZXJwcm9jID0gJnNvLT5vcmRlclByb2NzW3NrZXktPnNrX2F0dG5v IC0gMV07CisJY3h0LmNvbGxhdGlvbiA9IHNrZXktPnNrX2NvbGxhdGlvbjsKKwljeHQucmV2ZXJz ZSA9IHJldmVyc2U7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBuZWxlbXNfb3JpZzsgaSsrKQorCXsK KwkJRGF0dW0JICAgKmVsZW0gPSBlbGVtc19vcmlnICsgaTsKKworCQlpZiAoYnNlYXJjaF9hcmco ZWxlbSwgZWxlbXNfbmV4dCwgbmVsZW1zX25leHQsIHNpemVvZihEYXR1bSksCisJCQkJCQlfYnRf Y29tcGFyZV9hcnJheV9lbGVtZW50cywgJmN4dCkpCisJCQltZXJnZWRbbWVyZ2VkX25lbGVtcysr XSA9ICplbGVtOworCX0KKworCS8qCisJICogT3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBhcnJheSB3 aXRoIHRlbXAgYnVmZmVyIHNvIHRoYXQgd2UncmUgb25seSBsZWZ0CisJICogd2l0aCBpbnRlcnNl Y3RpbmcgYXJyYXkgZWxlbWVudHMKKwkgKi8KKwltZW1jcHkoZWxlbXNfb3JpZywgbWVyZ2VkLCBt ZXJnZWRfbmVsZW1zICogc2l6ZW9mKERhdHVtKSk7CisJcGZyZWUobWVyZ2VkKTsKKworCXJldHVy biBtZXJnZWRfbmVsZW1zOworfQorCiAvKgogICogcXNvcnRfYXJnIGNvbXBhcmF0b3IgZm9yIHNv cnRpbmcgYXJyYXkgZWxlbWVudHMKICAqLwpAQCAtNTA3LDcgKzY4MCw3IEBAIF9idF9jb21wYXJl X2FycmF5X2VsZW1lbnRzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZykK IAlCVFNvcnRBcnJheUNvbnRleHQgKmN4dCA9IChCVFNvcnRBcnJheUNvbnRleHQgKikgYXJnOwog CWludDMyCQljb21wYXJlOwogCi0JY29tcGFyZSA9IERhdHVtR2V0SW50MzIoRnVuY3Rpb25DYWxs MkNvbGwoJmN4dC0+ZmxpbmZvLAorCWNvbXBhcmUgPSBEYXR1bUdldEludDMyKEZ1bmN0aW9uQ2Fs bDJDb2xsKGN4dC0+b3JkZXJwcm9jLAogCQkJCQkJCQkJCQkgIGN4dC0+Y29sbGF0aW9uLAogCQkJ CQkJCQkJCQkgIGRhLCBkYikpOwogCWlmIChjeHQtPnJldmVyc2UpCkBAIC01MTUsNiArNjg4LDE2 MSBAQCBfYnRfY29tcGFyZV9hcnJheV9lbGVtZW50cyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lk ICpiLCB2b2lkICphcmcpCiAJcmV0dXJuIGNvbXBhcmU7CiB9CiAKKy8qCisgKiBDb21wYXJhdG9y IHVzZXMgdG8gc2VhcmNoIGZvciB0aGUgbmV4dCBhcnJheSBlbGVtZW50IHdoZW4gYXJyYXkga2V5 cyBuZWVkCisgKiB0byBiZSBhZHZhbmNlZCB2aWEgb25lIG9yIG1vcmUgYmluYXJ5IHNlYXJjaGVz CisgKgorICoJCVRoaXMgcm91dGluZSByZXR1cm5zOgorICoJCQk8MCBpZiB0dXBkYXR1bSA8IGFy cmRhdHVtOworICoJCQkgMCBpZiB0dXBkYXR1bSA9PSBhcnJkYXR1bTsKKyAqCQkJPjAgaWYgdHVw ZGF0dW0gPiBhcnJkYXR1bS4KKyAqCisgKiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGlu dGVyZmFjZSBhcyBfYnRfY29tcGFyZTogYm90aCBmdW5jdGlvbnMKKyAqIGNvbXBhcmUgdGhlIHZh bHVlIHRoYXQgdGhleSdyZSBzZWFyY2hpbmcgZm9yIHRvIGEgYmluYXJ5IHNlYXJjaCBwaXZvdC4K KyAqIEhvd2V2ZXIsIHVubGlrZSBfYnRfY29tcGFyZSwgdGhpcyBmdW5jdGlvbidzICJ0dXBsZSBh cmd1bWVudCIgY29tZXMgZmlyc3QsCisgKiB3aGlsZSBpdHMgImFycmF5L3NjYW5rZXkgYXJndW1l bnQiIGNvbWVzIHNlY29uZC4KKyovCitzdGF0aWMgaW5saW5lIGludDMyCitfYnRfY29tcGFyZV9h cnJheV9za2V5KEZtZ3JJbmZvICpvcmRlcnByb2MsCisJCQkJCSAgIERhdHVtIHR1cGRhdHVtLCBi b29sIHR1cG51bGwsCisJCQkJCSAgIERhdHVtIGFycmRhdHVtLCBTY2FuS2V5IGN1cikKK3sKKwlp bnQzMgkJcmVzdWx0ID0gMDsKKworCUFzc2VydChjdXItPnNrX3N0cmF0ZWd5ID09IEJURXF1YWxT dHJhdGVneU51bWJlcik7CisJQXNzZXJ0KChjdXItPnNrX2ZsYWdzICYgU0tfUk9XX0hFQURFUikg PT0gMCk7CisKKwlpZiAoY3VyLT5za19mbGFncyAmIFNLX0lTTlVMTCkJLyogYXJyYXkvc2NhbiBr ZXkgaXMgTlVMTCAqLworCXsKKwkJaWYgKHR1cG51bGwpCisJCQlyZXN1bHQgPSAwOwkJCS8qIE5V TEwgIj0iIE5VTEwgKi8KKwkJZWxzZSBpZiAoY3VyLT5za19mbGFncyAmIFNLX0JUX05VTExTX0ZJ UlNUKQorCQkJcmVzdWx0ID0gMTsJCQkvKiBOVUxMICI8IiBOT1RfTlVMTCAqLworCQllbHNlCisJ CQlyZXN1bHQgPSAtMTsJCS8qIE5VTEwgIj4iIE5PVF9OVUxMICovCisJfQorCWVsc2UgaWYgKHR1 cG51bGwpCQkJLyogYXJyYXkvc2NhbiBrZXkgaXMgTk9UX05VTEwgYW5kIHR1cGxlIGl0ZW0KKwkJ CQkJCQkJICogaXMgTlVMTCAqLworCXsKKwkJaWYgKGN1ci0+c2tfZmxhZ3MgJiBTS19CVF9OVUxM U19GSVJTVCkKKwkJCXJlc3VsdCA9IC0xOwkJLyogTk9UX05VTEwgIj4iIE5VTEwgKi8KKwkJZWxz ZQorCQkJcmVzdWx0ID0gMTsJCQkvKiBOT1RfTlVMTCAiPCIgTlVMTCAqLworCX0KKwllbHNlCisJ eworCQkvKgorCQkgKiBMaWtlIF9idF9jb21wYXJlLCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgb2Yg Y3Jvc3MtdHlwZSBjb21wYXJpc29ucywKKwkJICogc28gdGhlIGxlZnQgdmFsdWUgaGFzIHRvIGJl IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSBhbiBpbmRleAorCQkgKiB0dXBsZS4gIChBcnJheSBz Y2FuIGtleXMgY2Fubm90IGJlIGNyb3NzLXR5cGUsIGJ1dCBvdGhlciByZXF1aXJlZAorCQkgKiBz Y2FuIGtleXMgdGhhdCB1c2UgYW4gZXF1YWwgb3BlcmF0b3IgY2FuIGJlLikKKwkJICovCisJCXJl c3VsdCA9IERhdHVtR2V0SW50MzIoRnVuY3Rpb25DYWxsMkNvbGwob3JkZXJwcm9jLCBjdXItPnNr X2NvbGxhdGlvbiwKKwkJCQkJCQkJCQkJCSB0dXBkYXR1bSwgYXJyZGF0dW0pKTsKKworCQkvKgor CQkgKiBVbmxpa2UgX2J0X2NvbXBhcmUsIHdlIGZsaXAgdGhlIHNpZ24gd2hlbiBjb2x1bW4gaXMg YSBERVNDIGNvbHVtbgorCQkgKiAoYW5kICpub3QqIHdoZW4gY29sdW1uIGlzIEFTQykuICBUaGlz IG1hdGNoZXMgdGhlIGFwcHJvYWNoIHRha2VuIGJ5CisJCSAqIF9idF9jaGVja19yb3djb21wYXJl LCB3aGljaCBwZXJmb3JtcyBzaW1pbGFyIHRocmVlLXdheSBjb21wYXJpc29ucy4KKwkJICovCisJ CWlmIChjdXItPnNrX2ZsYWdzICYgU0tfQlRfREVTQykKKwkJCUlOVkVSVF9DT01QQVJFX1JFU1VM VChyZXN1bHQpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBfYnRfYmluc3Jj aF9hcnJheV9za2V5KCkgLS0gQmluYXJ5IHNlYXJjaCBmb3IgbmV4dCBtYXRjaGluZyBhcnJheSBr ZXkKKyAqCisgKiBjdXJfZWxlbV9zdGFydCBpbmRpY2F0ZXMgaWYgdGhlIGJpbmFyeSBzZWFyY2gg c2hvdWxkIGJlZ2luIGF0IHRoZSBhcnJheSdzCisgKiBjdXJyZW50IGVsZW1lbnQgKG9yIGhhdmUg dGhlIGN1cnJlbnQgZWxlbWVudCBhcyBhbiB1cHBlciBib3VuZCBpZiBpdCdzIGEKKyAqIGJhY2t3 YXJkIHNjYW4pLiAgVGhpcyAoYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzY2FuJ3MgZGlyZWN0 aW9uKSBhbGxvd3MKKyAqIHNlYXJjaGVzIGFnYWluc3QgcmVxdWlyZWQgc2NhbiBrZXkgYXJyYXlz IHRvIHJldXNlIGVhcmxpZXIgc2VhcmNoIGJvdW5kcyBhcworICogYW4gb3B0aW1pemF0aW9uLgor ICoKKyAqIFJldHVybnMgYW4gaW5kZXggdG8gdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgPj0gY2Fs bGVyJ3MgdHVwZGF0dW0gYXJndW1lbnQuCisgKiBBbHNvIHNldHMgKmZpbmFsX3Jlc3VsdCB0byB3 aGF0ZXZlciBfYnRfY29tcGFyZV9hcnJheV9za2V5IHJldHVybmVkIHdoZW4gd2UKKyAqIGRpcmVj dGx5IGNvbXBhcmVkIHRoZSByZXR1cm5lZCBhcnJheSBlbGVtZW50IHRvIGNhbGxlcidzIHR1cGRh dHVtIGFyZ3VtZW50LgorICovCitzdGF0aWMgaW50CitfYnRfYmluc3JjaF9hcnJheV9za2V5KEZt Z3JJbmZvICpvcmRlcnByb2MsCisJCQkJCSAgIGJvb2wgY3VyX2VsZW1fc3RhcnQsIFNjYW5EaXJl Y3Rpb24gZGlyLAorCQkJCQkgICBEYXR1bSB0dXBkYXR1bSwgYm9vbCB0dXBudWxsLAorCQkJCQkg ICBCVEFycmF5S2V5SW5mbyAqYXJyYXksIFNjYW5LZXkgY3VyLAorCQkJCQkgICBpbnQzMiAqZmlu YWxfcmVzdWx0KQoreworCWludAkJCWxvd19lbGVtLAorCQkJCW1pZF9lbGVtLAorCQkJCWhpZ2hf ZWxlbSwKKwkJCQlyZXN1bHQgPSAwOworCisJQXNzZXJ0KGN1ci0+c2tfZmxhZ3MgJiBTS19TRUFS Q0hBUlJBWSk7CisJQXNzZXJ0KGN1ci0+c2tfc3RyYXRlZ3kgPT0gQlRFcXVhbFN0cmF0ZWd5TnVt YmVyKTsKKwlBc3NlcnQoIWN1cl9lbGVtX3N0YXJ0IHx8CisJCSAgIGFycmF5LT5lbGVtX3ZhbHVl c1thcnJheS0+Y3VyX2VsZW1dID09IGN1ci0+c2tfYXJndW1lbnQpOworCisJaWYgKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwl7CisJCWlmIChjdXJfZWxlbV9zdGFydCkKKwkJCWxvd19l bGVtID0gYXJyYXktPmN1cl9lbGVtOworCQllbHNlCisJCQlsb3dfZWxlbSA9IDA7CisJCWhpZ2hf ZWxlbSA9IGFycmF5LT5udW1fZWxlbXMgLSAxOworCX0KKwllbHNlCisJeworCQlsb3dfZWxlbSA9 IDA7CisJCWlmIChjdXJfZWxlbV9zdGFydCkKKwkJCWhpZ2hfZWxlbSA9IGFycmF5LT5jdXJfZWxl bTsKKwkJZWxzZQorCQkJaGlnaF9lbGVtID0gYXJyYXktPm51bV9lbGVtcyAtIDE7CisJfQorCW1p ZF9lbGVtID0gLTE7CisKKwl3aGlsZSAoaGlnaF9lbGVtID4gbG93X2VsZW0pCisJeworCQlEYXR1 bQkJYXJyZGF0dW07CisKKwkJbWlkX2VsZW0gPSBsb3dfZWxlbSArICgoaGlnaF9lbGVtIC0gbG93 X2VsZW0pIC8gMik7CisJCWFycmRhdHVtID0gYXJyYXktPmVsZW1fdmFsdWVzW21pZF9lbGVtXTsK KworCQlyZXN1bHQgPSBfYnRfY29tcGFyZV9hcnJheV9za2V5KG9yZGVycHJvYywgdHVwZGF0dW0s IHR1cG51bGwsCisJCQkJCQkJCQkJYXJyZGF0dW0sIGN1cik7CisKKwkJaWYgKHJlc3VsdCA9PSAw KQorCQl7CisJCQkvKgorCQkJICogRWFjaCBhcnJheSB3YXMgZGVkdXBsaWNhdGVkIGR1cmluZyBp bml0aWFsIHByZXByb2Nlc3NpbmcsIHNvCisJCQkgKiBpdCdzIHNhZmUgdG8gcXVpdCBhcyBzb29u IGFzIHdlIHNlZSBhbiBlcXVhbCBhcnJheSBlbGVtZW50LgorCQkJICogVGhpcyBvZnRlbiBzYXZl cyBhbiBleHRyYSBjb21wYXJpc29uIG9yIHR3by4uLgorCQkJICovCisJCQlsb3dfZWxlbSA9IG1p ZF9lbGVtOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVzdWx0ID4gMCkKKwkJCWxvd19lbGVt ID0gbWlkX2VsZW0gKyAxOworCQllbHNlCisJCQloaWdoX2VsZW0gPSBtaWRfZWxlbTsKKwl9CisK KwkvKgorCSAqIC4uLmJ1dCBvdXIgY2FsbGVyIGFsc28gY2FyZXMgYWJvdXQgaG93IGl0cyBzZWFy Y2hlZC1mb3IgdHVwbGUgZGF0dW0KKwkgKiBjb21wYXJlcyB0byB0aGUgYXJyYXkgZWxlbWVudCB3 ZSdsbCByZXR1cm4uICBXZSBzZXQgKmZpbmFsX3Jlc3VsdCB3aXRoCisJICogdGhlIHJlc3VsdCBv ZiB0aGF0IGNvbXBhcmlzb24gc3BlY2lmaWNhbGx5LgorCSAqCisJICogQXZvaWQgc2V0dGluZyAq ZmluYWxfcmVzdWx0IHRvIHRoZSB3cm9uZyBjb21wYXJpc29uJ3MgcmVzdWx0LgorCSAqLworCWlm IChsb3dfZWxlbSAhPSBtaWRfZWxlbSkKKwkJcmVzdWx0ID0gX2J0X2NvbXBhcmVfYXJyYXlfc2tl eShvcmRlcnByb2MsIHR1cGRhdHVtLCB0dXBudWxsLAorCQkJCQkJCQkJCWFycmF5LT5lbGVtX3Zh bHVlc1tsb3dfZWxlbV0sIGN1cik7CisKKwkqZmluYWxfcmVzdWx0ID0gcmVzdWx0OworCisJcmV0 dXJuIGxvd19lbGVtOworfQorCiAvKgogICogX2J0X3N0YXJ0X2FycmF5X2tleXMoKSAtLSBJbml0 aWFsaXplIGFycmF5IGtleXMgYXQgc3RhcnQgb2YgYSBzY2FuCiAgKgpAQCAtNTM5LDMwICs4Njcs MzUgQEAgX2J0X3N0YXJ0X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAkJCWN1ckFycmF5S2V5LT5jdXJfZWxlbSA9IDA7CiAJCXNrZXktPnNrX2FyZ3Vt ZW50ID0gY3VyQXJyYXlLZXktPmVsZW1fdmFsdWVzW2N1ckFycmF5S2V5LT5jdXJfZWxlbV07CiAJ fQotCi0Jc28tPmFycmF5c1N0YXJ0ZWQgPSB0cnVlOwogfQogCiAvKgotICogX2J0X2FkdmFuY2Vf YXJyYXlfa2V5cygpIC0tIEFkdmFuY2UgdG8gbmV4dCBzZXQgb2YgYXJyYXkgZWxlbWVudHMKKyAq IF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVtZW50KCkgLS0gQWR2YW5jZSB0byBuZXh0IHNl dCBvZiBhcnJheSBlbGVtZW50cworICoKKyAqIEFkdmFuY2VzIHRoZSBhcnJheSBrZXlzIGJ5IGEg c2luZ2xlIGluY3JlbWVudCBpbiB0aGUgY3VycmVudCBzY2FuCisgKiBkaXJlY3Rpb24uICBXaGVu IHRoZXJlIGFyZSBtdWx0aXBsZSBhcnJheSBrZXlzIHRoaXMgY2FuIHJvbGwgb3ZlciBmcm9tIHRo ZQorICogbG93ZXN0IG9yZGVyIGFycmF5IHRvIGhpZ2hlciBvcmRlciBhcnJheXMuCiAgKgogICog UmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFub3RoZXIgc2V0IG9mIHZhbHVlcyB0byBjb25zaWRl ciwgZmFsc2UgaWYgbm90LgogICogT24gdHJ1ZSByZXN1bHQsIHRoZSBzY2Fua2V5cyBhcmUgaW5p dGlhbGl6ZWQgd2l0aCB0aGUgbmV4dCBzZXQgb2YgdmFsdWVzLgorICogT24gZmFsc2UgcmVzdWx0 LCB0aGUgc2NhbmtleXMgc3RheSB0aGUgc2FtZSwgYW5kIHRoZSBhcnJheSBrZXlzIGFyZSBub3QK KyAqIGFkdmFuY2VkIChldmVyeSBhcnJheSBpcyBzdGlsbCBhdCBpdHMgZmluYWwgZWxlbWVudCBm b3Igc2NhbiBkaXJlY3Rpb24pLgogICovCi1ib29sCi1fYnRfYWR2YW5jZV9hcnJheV9rZXlzKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgYm9vbAorX2J0X2Fk dmFuY2VfYXJyYXlfa2V5c19pbmNyZW1lbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7CiAJYm9vbAkJZm91bmQgPSBmYWxzZTsKLQlpbnQJCQlpOworCisJQXNzZXJ0KCFzby0+bmVl ZFByaW1TY2FuKTsKIAogCS8qCiAJICogV2UgbXVzdCBhZHZhbmNlIHRoZSBsYXN0IGFycmF5IGtl eSBtb3N0IHF1aWNrbHksIHNpbmNlIGl0IHdpbGwKIAkgKiBjb3JyZXNwb25kIHRvIHRoZSBsb3dl c3Qtb3JkZXIgaW5kZXggY29sdW1uIGFtb25nIHRoZSBhdmFpbGFibGUKLQkgKiBxdWFsaWZpY2F0 aW9ucy4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmcgb2Ygb3V0 cHV0Ci0JICogd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgYXJyYXkga2V5cy4KKwkgKiBxdWFsaWZp Y2F0aW9ucy4gIFJvbGxpbmcgb3ZlciBsaWtlIHRoaXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBj b3JyZWN0CisJICogb3JkZXJpbmcgb2Ygb3V0cHV0IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGFy cmF5IGtleXMuCiAJICovCi0JZm9yIChpID0gc28tPm51bUFycmF5S2V5cyAtIDE7IGkgPj0gMDsg aS0tKQorCWZvciAoaW50IGkgPSBzby0+bnVtQXJyYXlLZXlzIC0gMTsgaSA+PSAwOyBpLS0pCiAJ ewogCQlCVEFycmF5S2V5SW5mbyAqY3VyQXJyYXlLZXkgPSAmc28tPmFycmF5S2V5c1tpXTsKIAkJ U2NhbktleQkJc2tleSA9ICZzby0+YXJyYXlLZXlEYXRhW2N1ckFycmF5S2V5LT5zY2FuX2tleV07 CkBAIC01OTYsMTkgKzkyOSwzMSBAQCBfYnRfYWR2YW5jZV9hcnJheV9rZXlzKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlicmVhazsKIAl9CiAKLQkvKiBhZHZhbmNl IHBhcmFsbGVsIHNjYW4gKi8KLQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMKQotCQlf YnRfcGFyYWxsZWxfYWR2YW5jZV9hcnJheV9rZXlzKHNjYW4pOworCWlmIChmb3VuZCkKKwkJcmV0 dXJuIHRydWU7CiAKIAkvKgotCSAqIFdoZW4gbm8gbmV3IGFycmF5IGtleXMgd2VyZSBmb3VuZCwg dGhlIHNjYW4gaXMgInBhc3QgdGhlIGVuZCIgb2YgdGhlCi0JICogYXJyYXkga2V5cy4gIF9idF9z dGFydF9hcnJheV9rZXlzIGNhbiBzdGlsbCAicmVzdGFydCIgdGhlIGFycmF5IGtleXMgaWYKLQkg KiBhIHJlc2NhbiBpcyByZXF1aXJlZC4KKwkgKiBEb24ndCBhbGxvdyB0aGUgZW50aXJlIHNldCBv ZiBhcnJheSBrZXlzIHRvIHJvbGwgb3ZlcjogcmVzdG9yZSB0aGUKKwkgKiBhcnJheSBrZXlzIHRv IHRoZSBzdGF0ZSB0aGV5IHdlcmUgaW4gYmVmb3JlIHdlIHdlcmUgY2FsbGVkLgorCSAqCisJICog VGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5IGtleXMgb25seSByYXRjaGV0IGZvcndhcmQgKG9y IGJhY2t3YXJkcyBpbgorCSAqIHRoZSBjYXNlIG9mIGJhY2t3YXJkIHNjYW5zKS4gIE91ciAic28t PmFycmF5S2V5RGF0YSIgc2NhbiBrZXlzIHNob3VsZAorCSAqIGFsd2F5cyBtYXRjaCB0aGUgY3Vy cmVudCAic28tPmtleURhdGEiIHNlYXJjaC10eXBlIHNjYW4ga2V5cyAoZXhjZXB0CisJICogZm9y IGEgYnJpZWYgbW9tZW50IGR1cmluZyBhcnJheSBrZXkgYWR2YW5jZW1lbnQpLgogCSAqLwotCWlm ICghZm91bmQpCi0JCXNvLT5hcnJheXNTdGFydGVkID0gZmFsc2U7CisJZm9yIChpbnQgaSA9IDA7 IGkgPCBzby0+bnVtQXJyYXlLZXlzOyBpKyspCisJeworCQlCVEFycmF5S2V5SW5mbyAqcm9sbGFy cmF5ID0gJnNvLT5hcnJheUtleXNbaV07CisJCVNjYW5LZXkJCXNrZXkgPSAmc28tPmFycmF5S2V5 RGF0YVtyb2xsYXJyYXktPnNjYW5fa2V5XTsKIAotCXJldHVybiBmb3VuZDsKKwkJaWYgKFNjYW5E aXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpCisJCQlyb2xsYXJyYXktPmN1cl9lbGVtID0gMDsKKwkJ ZWxzZQorCQkJcm9sbGFycmF5LT5jdXJfZWxlbSA9IHJvbGxhcnJheS0+bnVtX2VsZW1zIC0gMTsK KwkJc2tleS0+c2tfYXJndW1lbnQgPSByb2xsYXJyYXktPmVsZW1fdmFsdWVzW3JvbGxhcnJheS0+ Y3VyX2VsZW1dOworCX0KKworCXJldHVybiBmYWxzZTsKIH0KIAogLyoKQEAgLTYyMiw2ICs5Njcs OCBAQCBfYnRfbWFya19hcnJheV9rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJaW50CQkJaTsKIAorCUFzc2Vy dChfYnRfdmVyaWZ5X2FycmF5X3NjYW5rZXlzKHNjYW4pKTsKKwogCWZvciAoaSA9IDA7IGkgPCBz by0+bnVtQXJyYXlLZXlzOyBpKyspCiAJewogCQlCVEFycmF5S2V5SW5mbyAqY3VyQXJyYXlLZXkg PSAmc28tPmFycmF5S2V5c1tpXTsKQEAgLTY2MSwyMCArMTAwOCw2OTEgQEAgX2J0X3Jlc3RvcmVf YXJyYXlfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJICogSWYgd2UgY2hhbmdlZCBhbnkga2V5 cywgd2UgbXVzdCByZWRvIF9idF9wcmVwcm9jZXNzX2tleXMuICBUaGF0IG1pZ2h0CiAJICogc291 bmQgbGlrZSBvdmVya2lsbCwgYnV0IGluIGNhc2VzIHdpdGggbXVsdGlwbGUga2V5cyBwZXIgaW5k ZXggY29sdW1uCiAJICogaXQgc2VlbXMgbmVjZXNzYXJ5IHRvIGRvIHRoZSBmdWxsIHNldCBvZiBw dXNodXBzLgotCSAqCi0JICogQWxzbyBkbyB0aGlzIHdoZW5ldmVyIHRoZSBzY2FuJ3Mgc2V0IG9m IGFycmF5IGtleXMgIndyYXBwZWQgYXJvdW5kIiBhdAotCSAqIHRoZSBlbmQgb2YgdGhlIGxhc3Qg cHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGVyZSB3b24ndCBoYXZlIGJlZW4gYSBjYWxsCi0JICog dG8gX2J0X3ByZXByb2Nlc3Nfa2V5cyBmcm9tIHNvbWUgb3RoZXIgcGxhY2UgZm9sbG93aW5nIHdy YXAgYXJvdW5kLCBzbwotCSAqIHdlIGRvIGl0IGZvciBvdXJzZWx2ZXMuCiAJICovCi0JaWYgKGNo YW5nZWQgfHwgIXNvLT5hcnJheXNTdGFydGVkKQorCWlmIChjaGFuZ2VkKQogCXsKIAkJX2J0X3By ZXByb2Nlc3Nfa2V5cyhzY2FuKTsKIAkJLyogVGhlIG1hcmsgc2hvdWxkIGhhdmUgYmVlbiBzZXQg b24gYSBjb25zaXN0ZW50IHNldCBvZiBrZXlzLi4uICovCiAJCUFzc2VydChzby0+cXVhbF9vayk7 CiAJfQorCisJQXNzZXJ0KF9idF92ZXJpZnlfYXJyYXlfc2NhbmtleXMoc2NhbikpOwogfQogCisv KgorICogUm91dGluZSB0byBkZXRlcm1pbmUgaWYgYSBjb250aW51ZXNjYW49ZmFsc2UgdHVwbGUg KHNldCB0aGF0IHdheSBieSBhbgorICogaW5pdGlhbCBjYWxsIHRvIF9idF9jaGVja19jb21wYXJl KSBtdXN0IGFkdmFuY2UgdGhlIHNjYW4ncyBhcnJheSBrZXlzLgorICogT25seSBjYWxsIGhlcmUg d2hlbiBfYnRfY2hlY2tfY29tcGFyZSBhbHJlYWR5IHNldCBjb250aW51ZXNjYW49ZmFsc2UuCisg KgorICogUmV0dXJucyB0cnVlIHdoZW4gY2FsbGVyIHBhc3NlcyBhIHR1cGxlIHRoYXQgaXMgPCB0 aGUgY3VycmVudCBzZXQgb2YgYXJyYXkKKyAqIGtleXMgZm9yIHRoZSBtb3N0IHNpZ25pZmljYW50 IG5vbi1lcXVhbCBjb2x1bW4vc2NhbiBrZXkgKG9yID4gZm9yIGJhY2t3YXJkcworICogc2NhbnMp LiAgVGhpcyBtZWFucyB0aGF0IGl0IGNhbm5vdCBwb3NzaWJseSBiZSB0aW1lIHRvIGFkdmFuY2Ug dGhlIGFycmF5CisgKiBrZXlzIGp1c3QgeWV0LiAgX2J0X2NoZWNra2V5cyBjYWxsZXIgc2hvdWxk IHN1cHByZXNzIGl0cyBfYnRfY2hlY2tfY29tcGFyZQorICogY2FsbCwgYW5kIHJldHVybiAtLSB0 aGUgdHVwbGUgaXMgdHJlYXRlZCBhcyBub3Qgc2F0aXNmeWluZyBvdXIgaW5kZXhxdWFscy4KKyAq CisgKiBSZXR1cm5zIGZhbHNlIHdoZW4gY2FsbGVyJ3MgdHVwbGUgaXMgPj0gdGhlIGN1cnJlbnQg YXJyYXkga2V5cyAob3IgPD0sIGluCisgKiB0aGUgY2FzZSBvZiBiYWNrd2FyZHMgc2NhbnMpLiAg VGhpcyBtZWFucyB0aGF0IGl0IGlzIG5vdyB0aW1lIGZvciBvdXIKKyAqIGNhbGxlciB0byBhZHZh bmNlIHRoZSBhcnJheSBrZXlzICh1bmxlc3MgY2FsbGVyIGJyb2tlIHRoZSBydWxlcyBieSBub3QK KyAqIGNoZWNraW5nIHdpdGggX2J0X2NoZWNrX2NvbXBhcmUgYmVmb3JlIGNhbGxpbmcgaGVyZSku CisgKgorICogTm90ZTogYWR2YW5jaW5nIHRoZSBhcnJheSBrZXlzIG1heSBiZSByZXF1aXJlZCB3 aGVuIGV2ZXJ5IGF0dHJpYnV0ZSB2YWx1ZQorICogZnJvbSBjYWxsZXIncyB0dXBsZSBpcyBlcXVh bCB0byBjb3JyZXNwb25kaW5nIHNjYW4ga2V5L2FycmF5IGRhdHVtcy4gIFNlZQorICogZnVuY3Rp b24gaGVhZGVyIGNvbW1lbnRzIGF0IHRoZSBzdGFydCBvZiBfYnRfYWR2YW5jZV9hcnJheV9rZXlz IGZvciBtb3JlLgorICovCitzdGF0aWMgYm9vbAorX2J0X3R1cGxlX2JlZm9yZV9hcnJheV9za2V5 cyhJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLAorCQkJCQkJCSBJ bmRleFR1cGxlIHR1cGxlKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOworCVNjYW5E aXJlY3Rpb24gZGlyID0gcHN0YXRlLT5kaXI7CisJVHVwbGVEZXNjCWl0dXBkZXNjID0gUmVsYXRp b25HZXREZXNjcihyZWwpOworCWJvb2wJCXR1cGxlX2JlZm9yZV9hcnJheV9rZXlzID0gZmFsc2U7 CisJU2NhbktleQkJY3VyOworCWludAkJCW50dXBhdHRzID0gQlRyZWVUdXBsZUdldE5BdHRzKHR1 cGxlLCByZWwpLAorCQkJCWlrZXk7CisKKwlBc3NlcnQoc28tPm51bUFycmF5S2V5cyA+IDApOwor CUFzc2VydChzby0+bnVtYmVyT2ZLZXlzID4gMCk7CisJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2Fu KTsKKworCWZvciAoY3VyID0gc28tPmtleURhdGEsIGlrZXkgPSAwOyBpa2V5IDwgc28tPm51bWJl ck9mS2V5czsgY3VyKyssIGlrZXkrKykKKwl7CisJCWludAkJCWF0dG51bSA9IGN1ci0+c2tfYXR0 bm87CisJCUZtZ3JJbmZvICAgKm9yZGVycHJvYzsKKwkJRGF0dW0JCXR1cGRhdHVtOworCQlib29s CQl0dXBudWxsLAorCQkJCQlza3JlcXVpcmVkOworCQlpbnQzMgkJcmVzdWx0OworCisJCS8qCisJ CSAqIFdlIG9ubHkgZGVhbCB3aXRoIGVxdWFsaXR5IHN0cmF0ZWd5IHNjYW4ga2V5cy4gIFdlIGxl YXZlIGhhbmRsaW5nCisJCSAqIG9mIGluZXF1YWxpdGllcyB1cCB0byBfYnRfY2hlY2tfY29tcGFy ZS4KKwkJICovCisJCWlmIChjdXItPnNrX3N0cmF0ZWd5ICE9IEJURXF1YWxTdHJhdGVneU51bWJl cikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIERldGVybWluZSBpZiB0aGlzIHNjYW4ga2V5 IGlzIHJlcXVpcmVkLgorCQkgKgorCQkgKiBFcXVhbGl0eSBzdHJhdGVneSBzY2FuIGtleXMgYXJl IGVpdGhlciByZXF1aXJlZCBpbiBib3RoIGRpcmVjdGlvbnMKKwkJICogb3IgbmVpdGhlciBkaXJl Y3Rpb24sIHNvIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uIGRvZXNuJ3QgbmVlZCB0bworCQkg KiBiZSB0ZXN0ZWQgaGVyZS4KKwkJICovCisJCXNrcmVxdWlyZWQgPSAoY3VyLT5za19mbGFncyAm IFNLX0JUX1JFUUZXRCk7CisJCUFzc2VydCghc2tyZXF1aXJlZCB8fCAoY3VyLT5za19mbGFncyAm IFNLX0JUX1JFUUJLV0QpKTsKKworCQkvKgorCQkgKiBVbmxpa2UgX2J0X2FkdmFuY2VfYXJyYXlf a2V5cywgd2UgbmV2ZXIgZGVhbCB3aXRoIGFueSBub24tcmVxdWlyZWQKKwkJICogYXJyYXkga2V5 cy4gIENhc2VzIHdoZXJlIHNrcmVxdWlyZWR0cmlnZ2VyIGlzIHNldCB0byBmYWxzZSBieQorCQkg KiBfYnRfY2hlY2tfY29tcGFyZSBzaG91bGQgbmV2ZXIgY2FsbCBoZXJlLiAgV2UgYXJlIG9ubHkg Y2FsbGVkIGFmdGVyCisJCSAqIF9idF9jaGVja19jb21wYXJlIHByb3Zpc2lvbmFsbHkgaW5kaWNh dGVkIHRoYXQgdGhlIHNjYW4gc2hvdWxkIGJlCisJCSAqIHRlcm1pbmF0ZWQgZHVlIHRvIGEgX3Jl cXVpcmVkXyBzY2FuIGtleSBub3QgYmVpbmcgc2F0aXNmaWVkLgorCQkgKgorCQkgKiBXZSBleHBl Y3QgX2J0X2NoZWNrX2NvbXBhcmUgdG8gbm90aWNlIGFuZCByZXBvcnQgcmVxdWlyZWQgc2NhbiBr ZXlzCisJCSAqIGJlZm9yZSBub24tcmVxdWlyZWQgb25lcy4gIF9idF9hZHZhbmNlX2FycmF5X2tl eXMgbWlnaHQgc3RpbGwgaGF2ZQorCQkgKiB0byBhZHZhbmNlIG5vbi1yZXF1aXJlZCBhcnJheSBr ZXlzIGluIHBhc3NpbmcgZm9yIGEgdHVwbGUgdGhhdCB3ZQorCQkgKiB3ZXJlIGNhbGxlZCBmb3Is IGJ1dCBpdCBkb2Vzbid0IG5lZWQgYWR2YW5jZWQgbm90aWNlIG9mIHRoYXQgZnJvbQorCQkgKiB1 cy4KKwkJICovCisJCWlmICghc2tyZXF1aXJlZCkKKwkJCWJyZWFrOworCisJCWlmIChhdHRudW0g PiBudHVwYXR0cykKKwkJeworCQkJLyoKKwkJCSAqIFdoZW4gd2UgcmVhY2ggYSBoaWdoIGtleSdz IHRydW5jYXRlZCBhdHRyaWJ1dGUsIGFzc3VtZSB0aGF0IHRoZQorCQkJICogdHVwbGUgYXR0cmli dXRlJ3MgdmFsdWUgaXMgPj0gdGhlIHNjYW4ncyBzZWFyY2gtdHlwZSBzY2FuIGtleXMKKwkJCSAq LworCQkJYnJlYWs7CisJCX0KKworCQl0dXBkYXR1bSA9IGluZGV4X2dldGF0dHIodHVwbGUsIGF0 dG51bSwgaXR1cGRlc2MsICZ0dXBudWxsKTsKKworCQlvcmRlcnByb2MgPSAmc28tPm9yZGVyUHJv Y3NbYXR0bnVtIC0gMV07CisJCXJlc3VsdCA9IF9idF9jb21wYXJlX2FycmF5X3NrZXkob3JkZXJw cm9jLCB0dXBkYXR1bSwgdHVwbnVsbCwKKwkJCQkJCQkJCQljdXItPnNrX2FyZ3VtZW50LCBjdXIp OworCisJCWlmIChyZXN1bHQgIT0gMCkKKwkJeworCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKKwkJCQl0dXBsZV9iZWZvcmVfYXJyYXlfa2V5cyA9IHJlc3VsdCA8IDA7CisJCQll bHNlCisJCQkJdHVwbGVfYmVmb3JlX2FycmF5X2tleXMgPSByZXN1bHQgPiAwOworCisJCQlicmVh azsKKwkJfQorCX0KKworCXJldHVybiB0dXBsZV9iZWZvcmVfYXJyYXlfa2V5czsKK30KKworLyoK KyAqIF9idF9hcnJheV9rZXlzX3JlbWFpbigpIC0tIFN0YXJ0IGFub3RoZXIgcHJpbWl0aXZlIGlu ZGV4IHNjYW4/CisgKgorICogUmV0dXJucyB0cnVlIGlmIF9idF9jaGVja2tleXMgZGV0ZXJtaW5l ZCB0aGF0IGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4KKyAqIG11c3QgdGFrZSBwbGFjZSBi eSBjYWxsaW5nIF9idF9maXJzdC4gIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLCBpbmRpY2F0aW5n CisgKiB0aGF0IGNhbGxlcidzIHRvcC1sZXZlbCBzY2FuIGlzIG5vdyBwYXN0IHRoZSBwb2ludCB3 aGVyZSBmdXJ0aGVyIG1hdGNoaW5nCisgKiBpbmRleCB0dXBsZXMgY2FuIGJlIGZvdW5kIChmb3Ig dGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24pLgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIGR1cmlu ZyBzY2FucyB3aXRoIG9uZSBvciBtb3JlIGVxdWFsaXR5IHR5cGUgYXJyYXkgc2NhbiBrZXlzLgor ICogQWxsIG90aGVyIHNjYW5zIHNob3VsZCBqdXN0IGNhbGwgX2J0X2ZpcnN0IG9uY2UsIG5vIG1h dHRlciB3aGF0LgorICoKKyAqIFRvcC1sZXZlbCBpbmRleCBzY2FucyBleGVjdXRlZCB2aWEgbXVs dGlwbGUgcHJpbWl0aXZlIGluZGV4IHNjYW5zIG11c3Qgbm90CisgKiBmYWlsIHRvIG91dHB1dCBp bmRleCB0dXBsZXMgaW4gdGhlIHVzdWFsIG9yZGVyIGZvciB0aGUgaW5kZXggLS0ganVzdCBsaWtl CisgKiBhbnkgb3RoZXIgaW5kZXggc2NhbiB3b3VsZC4gIFRoZSBzdGF0ZSBtYWNoaW5lIHRoYXQg bWFuYWdlcyB0aGUgc2NhbidzCisgKiBhcnJheSBrZXlzIG11c3Qgb25seSBzdGFydCBwcmltaXRp dmUgaW5kZXggc2NhbnMgd2hlbiB0aGV5IGNvdmVyIGtleSBzcGFjZQorICogc3RyaWN0bHkgZ3Jl YXRlciB0aGFuIHRoZSBrZXkgc3BhY2UgZm9yIHR1cGxlcyB0aGF0IHRoZSBzY2FuIGhhcyBhbHJl YWR5CisgKiByZXR1cm5lZCAob3Igc3RyaWN0bHkgbGVzcyBpbiB0aGUgYmFja3dhcmRzIHNjYW4g Y2FzZSkuICBPdGhlcndpc2UgdGhlIHNjYW4KKyAqIGNvdWxkIG91dHB1dCB0aGUgc2FtZSBpbmRl eCB0dXBsZXMgbW9yZSB0aGFuIG9uY2UsIG9yIGluIHRoZSB3cm9uZyBvcmRlci4KKyAqCisgKiBU aGlzIGlzIG1hbmFnZWQgYnkgbGltaXRpbmcgdGhlIGNhc2VzIHRoYXQgY2FuIHRyaWdnZXIgbmV3 IHByaW1pdGl2ZSBpbmRleAorICogc2NhbnMgdG8gdGhvc2UgaW52b2x2aW5nIHJlcXVpcmVkIGFy cmF5IHNjYW4ga2V5cyBhbmQvb3Igb3RoZXIgcmVxdWlyZWQKKyAqIHNjYW4ga2V5cyB0aGF0IHVz ZSB0aGUgZXF1YWxpdHkgc3RyYXRlZ3kuICBJbiBwYXJ0aWN1bGFyLCB0aGUgc3RhdGUgbWFjaGlu ZQorICogbXVzdCBub3QgYWxsb3cgaGlnaCBvcmRlciByZXF1aXJlZCBzY2FuIGtleXMgdXNpbmcg YW4gaW5lcXVhbGl0eSBzdHJhdGVneQorICogKHdoaWNoIGFyZSBvbmx5IHJlcXVpcmVkIGluIG9u ZSBzY2FuIGRpcmVjdGlvbikgdG8gZGlyZWN0bHkgdHJpZ2dlciBhIG5ldworICogcHJpbWl0aXZl IGluZGV4IHNjYW4gdGhhdCBhZHZhbmNlcyBsb3cgb3JkZXIgbm9uLXJlcXVpcmVkIGFycmF5IHNj YW4ga2V5cy4KKyAqIEZvciBleGFtcGxlLCBhIHF1ZXJ5IHN1Y2ggYXMgIlNFTEVDVCB0aG91c2Fu ZCwgdGVudGhvdXMgRlJPTSB0ZW5rMSBXSEVSRQorICogdGhvdXNhbmQgPCAyIEFORCB0ZW50aG91 cyBJTiAoMTAwMSwzMDAwKSBPUkRFUiBCWSB0aG91c2FuZCIgd2hvc2UgZXhlY3V0aW9uCisgKiBp bnZvbHZlcyBhIHNjYW4gb2YgYW4gaW5kZXggb24gIih0aG91c2FuZCwgdGVudGhvdXMpIiBtdXN0 IHBlcmZvcm0gbm8gbW9yZQorICogdGhhbiBhIHNpbmdsZSBwcmltaXRpdmUgaW5kZXggc2Nhbi4g IE90aGVyd2lzZSB3ZSByaXNrIG91dHB1dHRpbmcgdHVwbGVzIGluCisgKiB0aGUgd3Jvbmcgb3Jk ZXIuICBBcnJheSBrZXkgdmFsdWVzIGZvciB0aGUgbm9uLXJlcXVpcmVkIHNjYW4ga2V5IG9uIHRo ZQorICogInRlbnRob3VzIiBjb2x1bW4gbXVzdCBub3QgZGljdGF0ZSB0b3AtbGV2ZWwgc2NhbiBv cmRlci4gIFByaW1pdGl2ZSBpbmRleAorICogc2NhbnMgbXVzdG4ndCBzY2FuIHR1cGxlcyBhbHJl YWR5IHNjYW5uZWQgYnkgc29tZSBlYXJsaWVyIHByaW1pdGl2ZSBzY2FuLgorICoKKyAqIEluIGZh Y3QsIG5idHJlZSBtYWtlcyBhIHN0cm9uZ2VyIGd1YXJhbnRlZSB0aGFuIGlzIHN0cmljdGx5IG5l Y2Vzc2FyeSBoZXJlOgorICogaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSB0b3AtbGV2ZWwgc2NhbiB3 b24ndCByZXBlYXQgYW55IGxlYWYgcGFnZSByZWFkcy4KKyAqIChBY3R1YWxseSwgdGhhdCBjYW4g c3RpbGwgaGFwcGVuIHdoZW4gdGhlIHNjYW4gaXMgcmVwb3NpdGlvbmVkLCBvciB0aGUgc2Nhbgor ICogZGlyZWN0aW9uIGNoYW5nZXMgLS0gYnV0IHRoYXQncyBqdXN0IGFzIHRydWUgd2l0aCBvdGhl ciB0eXBlcyBvZiBzY2Fucy4pCisgKi8KK2Jvb2wKK19idF9hcnJheV9rZXlzX3JlbWFpbihJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9 IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKworCUFzc2VydChzby0+bnVtQXJyYXlLZXlz KTsKKworCS8qCisJICogQXJyYXkga2V5cyBhcmUgYWR2YW5jZWQgd2l0aGluIF9idF9jaGVja2tl eXMgd2hlbiB0aGUgc2NhbiByZWFjaGVzIHRoZQorCSAqIGxlYWYgbGV2ZWwgKG1vcmUgcHJlY2lz ZWx5LCB0aGV5J3JlIGFkdmFuY2VkIHdoZW4gdGhlIHNjYW4gcmVhY2hlcyB0aGUKKwkgKiBlbmQg b2YgZWFjaCBkaXN0aW5jdCBzZXQgb2YgYXJyYXkgZWxlbWVudHMpLiAgVGhpcyBwcm9jZXNzIGF2 b2lkcworCSAqIHJlcGVhdCBhY2Nlc3MgdG8gbGVhZiBwYWdlcyAoYWNyb3NzIG11bHRpcGxlIHBy aW1pdGl2ZSBpbmRleCBzY2FucykgYnkKKwkgKiBvcHBvcnR1bmlzdGljYWxseSBhZHZhbmNpbmcg dGhlIHNjYW4ncyBhcnJheSBrZXlzIHdoZW4gaXQgYWxsb3dzIHRoZQorCSAqIHByaW1pdGl2ZSBp bmRleCBzY2FuIHRvIGZpbmQgbmVhcmJ5IG1hdGNoaW5nIHR1cGxlcyAob3IgdG8gZWxpbWluYXRl CisJICogYXJyYXkga2V5cyB3aXRoIG5vIG1hdGNoaW5nIHR1cGxlcyBmcm9tIGZ1cnRoZXIgY29u c2lkZXJhdGlvbikuCisJICoKKwkgKiBfYnRfY2hlY2trZXlzIHNldHMgYSBzaW1wbGUgZmxhZyB2 YXJpYWJsZSB0aGF0IHdlIGNoZWNrIGhlcmUuICBUaGlzCisJICogdGVsbHMgdXMgaWYgd2UgbmVl ZCB0byBwZXJmb3JtIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gZm9yIHRoZQorCSAqIG5v dy1jdXJyZW50IGFycmF5IGtleXMgb3Igbm90LiAgV2UnbGwgdW5zZXQgdGhlIGZsYWcgb25jZSBh Z2FpbiB0bworCSAqIGFja25vd2xlZGdlIGhhdmluZyBzdGFydGVkIGEgbmV3IHByaW1pdGl2ZSBz Y2FuIChvciB3ZSdsbCBzZWUgdGhhdCBpdAorCSAqIGlzbid0IHNldCBhbmQgZW5kIHRoZSB0b3At bGV2ZWwgc2NhbiByaWdodCBhd2F5KS4KKwkgKgorCSAqIFdlIGNhbm5vdCByZWx5IG9uIF9idF9m aXJzdCBhbHdheXMgcmVhY2hpbmcgX2J0X2NoZWNra2V5cyBoZXJlLiAgVGhlcmUKKwkgKiBhcmUg dmFyaW91cyBzY2VuYXJpb3Mgd2hlcmUgdGhhdCB3b24ndCBoYXBwZW4uICBGb3IgZXhhbXBsZSwg aWYgdGhlCisJICogaW5kZXggaXMgY29tcGxldGVseSBlbXB0eSwgdGhlbiBfYnRfZmlyc3Qgd29u J3QgZ2V0IGFzIGZhciBhcyBjYWxsaW5nCisJICogX2J0X3JlYWRwYWdlL19idF9jaGVja2tleXMu CisJICoKKwkgKiBXZSBhbHNvIGRvbid0IGV4cGVjdCBfYnRfY2hlY2trZXlzIHRvIGJlIHJlYWNo ZWQgd2hlbiBzZWFyY2hpbmcgZm9yIGEKKwkgKiBub24tZXhpc3RlbnQgdmFsdWUgdGhhdCBoYXBw ZW5zIHRvIGJlIGhpZ2hlciB0aGFuIGFueSBleGlzdGluZyB2YWx1ZSBpbgorCSAqIHRoZSBpbmRl eC4gIE5vIF9idF9jaGVja2tleXMgYXJlIGV4cGVjdGVkIHdoZW4gX2J0X3JlYWRwYWdlIHJlYWRz IHRoZQorCSAqIHJpZ2h0bW9zdCBwYWdlIGR1cmluZyBzdWNoIGEgc2NhbiAtLSBldmVuIGEgX2J0 X2NoZWNra2V5cyBjYWxsIGFnYWluc3QKKwkgKiB0aGUgaGlnaCBrZXkgd29uJ3QgaGFwcGVuLiAg VGhlcmUgaXMgYW4gYW5hbG9nb3VzIGlzc3VlIGZvciBiYWNrd2FyZHMKKwkgKiBzY2FucyB0aGF0 IHNlYXJjaCBmb3IgYSB2YWx1ZSBsb3dlciB0aGFuIGFsbCBleGlzdGluZyBpbmRleCB0dXBsZXMu CisJICoKKwkgKiBXZSBkb24ndCBhY3R1YWxseSByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcgZm9y IHRoZXNlIGNhc2VzIC0tIHdlIGRvbid0CisJICogbmVlZCB0byBiZSBleHBsaWNpdGx5IGluc3Ry dWN0ZWQgdG8gX25vdF8gcGVyZm9ybSBhbm90aGVyIHByaW1pdGl2ZQorCSAqIGluZGV4IHNjYW4u ICBUaGlzIGlzIGNvcnJlY3QgZm9yIGFsbCBvZiB0aGUgY2FzZXMgd2UndmUgbGlzdGVkIHNvIGZh ciwKKwkgKiB3aGljaCBhbGwgaW52b2x2ZSBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCBhY2Nl c3MgcGFnZXMgIm5lYXIgdGhlCisJICogYm91bmRhcmllcyBvZiB0aGUga2V5IHNwYWNlIiAodGhl IGxlZnRtb3N0IHBhZ2UsIHRoZSByaWdodG1vc3QgcGFnZSwgb3IKKwkgKiBhbiBpbWFnaW5hcnkg ZW1wdHkgbGVhZiByb290IHBhZ2UpLiAgSWYgX2J0X2NoZWNra2V5cyBjYW5ub3QgYmUgcmVhY2hl ZAorCSAqIGJ5IGEgcHJpbWl0aXZlIGluZGV4IHNjYW4gZm9yIG9uZSBzZXQgb2YgYXJyYXkga2V5 cywgaXQgZm9sbG93cyB0aGF0IGl0CisJICogYWxzbyB3b24ndCBiZSByZWFjaGVkIGZvciBhbnkg bGF0ZXIgc2V0IG9mIGFycmF5IGtleXMuCisJICoKKwkgKiBUaGVyZSBpcyBvbmUgZXhjZXB0aW9u OiB0aGUgY2FzZSB3aGVyZSBfYnRfZmlyc3QncyBfYnRfcHJlcHJvY2Vzc19rZXlzCisJICogY2Fs bCBkZXRlcm1pbmVkIHRoYXQgdGhlIHNjYW4ncyBpbnB1dCBzY2FuIGtleXMgY2FuIG5ldmVyIGJl IHNhdGlzZmllZC4KKwkgKiBUaGF0IG1pZ2h0IGJlIHRydWUgZm9yIG9uZSBzZXQgb2YgYXJyYXkg a2V5cywgYnV0IG5vdCB0aGUgbmV4dCBzZXQuCisJICovCisJaWYgKCFzby0+cXVhbF9vaykKKwl7 CisJCS8qCisJCSAqIERlZmVuc2l2ZWx5IGNoZWNrIGZvciBpbnRlcnJ1cHRzIC0tIHRoZSBzY2Fu J3MgbmV4dCBjYWxsIHRvCisJCSAqIF9idF9maXJzdCB3b24ndCBiZSBhYmxlIHRvIGRvIHNvIGlm IHRoZSBuZXh0IHNldCBvZiBrZXlzIGFsc28gdHVybgorCQkgKiBvdXQgdG8gYmUgdW5zYXRpc2Zp YWJsZQorCQkgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBDYW4ndCB1c2Ug X2J0X2FkdmFuY2VfYXJyYXlfa2V5cyBzbyB1c2UgaW5jcmVtZW50YWwgYWR2YW5jZW1lbnQgKi8K KwkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCQlpZiAoX2J0X2FkdmFuY2VfYXJyYXlfa2V5 c19pbmNyZW1lbnQoc2NhbiwgZGlyKSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCS8qIFRpbWUg Zm9yIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4/ICovCisJaWYgKHNvLT5uZWVkUHJpbVNj YW4pCisJeworCQkvKiBIYXZlIG91ciBjYWxsZXIgY2FsbCBfYnRfZmlyc3Qgb25jZSBtb3JlICov CisJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4g IT0gTlVMTCkKKwkJCV9idF9wYXJhbGxlbF9uZXh0X3ByaW1pdGl2ZV9zY2FuKHNjYW4pOworCisJ CXJldHVybiB0cnVlOworCX0KKworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwpCisJ CV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCisJLyoKKwkgKiBObyBtb3JlIHByaW1pdGl2ZSBp bmRleCBzY2Fucy4gIFRlcm1pbmF0ZSB0aGUgdG9wLWxldmVsIHNjYW4uCisJICovCisJcmV0dXJu IGZhbHNlOworfQorCisvKgorICogX2J0X2FkdmFuY2VfYXJyYXlfa2V5cygpIC0tIEFkdmFuY2Ug YXJyYXkgZWxlbWVudHMgdXNpbmcgYSB0dXBsZQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhbGwg cmVxdWlyZWQgZXF1YWxpdHktdHlwZSBzY2FuIGtleXMgKGluIHBhcnRpY3VsYXIsIHRob3NlCisg KiB0aGF0IGFyZSBhcnJheSBrZXlzKSBub3cgaGF2ZSBleGFjdCBtYXRjaGluZyB2YWx1ZXMgdG8g dGhvc2UgZnJvbSB0dXBsZS4KKyAqIFJldHVybnMgZmFsc2Ugd2hlbiB0aGUgdHVwbGUgaXNuJ3Qg YW4gZXhhY3QgbWF0Y2ggaW4gdGhpcyBzZW5zZS4KKyAqCisgKiBTZXRzIHBzdGF0ZS5jb250aW51 ZXNjYW4gZm9yIGNhbGxlciB3aGVuIHdlIHJldHVybiBmYWxzZS4gIFdoZW4gd2UgcmV0dXJuCisg KiB0cnVlIGl0J3MgdXAgdG8gY2FsbGVyIHRvIGNhbGwgX2J0X2NoZWNrX2NvbXBhcmUgdG8gcmVj aGVjayB0aGUgdHVwbGUuICBUaGUKKyAqIHNlY29uZCBjYWxsIHNob3VsZCBiZSBhbGxvd2VkIHRv IHNldCBwc3RhdGUuY29udGludWVzY2FuPWZhbHNlIHdpdGhvdXQKKyAqIGZ1cnRoZXIgaW50ZXJ2 ZW50aW9uLCBzaW5jZSB0dXBsZSBtdXN0IGJlIDw9IHRoZSBhcnJheSBrZXlzIGFmdGVyIHdlJ3Jl CisgKiBjYWxsZWQgKGFjdHVhbGx5LCB0aGF0IGd1YXJhbnRlZSBhcHBsaWVzIHRvIGFsbCByZXF1 aXJlZCBlcXVhbGl0eS10eXBlIHNjYW4KKyAqIGtleXMsIGFuZCBkb2VzIG5vdCBhcHBseSB0byBu b24tcmVxdWlyZWQgYXJyYXkga2V5cykuCisgKgorICogV2hlbiBjYWxsZWQgd2l0aCBza3JlcXVp cmVkdHJpZ2dlcj10cnVlLCB0aGUgY2FsbCBvbmx5IGV4cGVjdHMgdG8gaGF2ZSB0bworICogZGVh bCB3aXRoIG5vbi1yZXF1aXJlZCBlcXVhbGl0eSBhcnJheSBrZXlzLiAgVGhlIHJ1bGVzIGFyZSBh IGxpdHRsZQorICogZGlmZmVyZW50IGR1cmluZyB0aGVzZSBjYWxscy4gIFdlJ2xsIGFsd2F5cyBz ZXQgcHN0YXRlLmNvbnRpbnVlc2Nhbj10cnVlLAorICogc2luY2UgKGJ5IGRlZmluaXRpb24pIGEg bm9uLXJlcXVpcmVkIHNjYW4ga2V5IG5ldmVyIHRlcm1pbmF0ZXMgdGhlIHNjYW4uCisgKgorICog SWYgd2UgcmVhY2ggdGhlIGVuZCBvZiBhbGwgb2YgdGhlIHJlcXVpcmVkIGFycmF5IGtleXMgZm9y IHRoZSBjdXJyZW50IHNjYW4KKyAqIGRpcmVjdGlvbiwgd2Ugd2lsbCBlZmZlY3RpdmVseSBlbmQg dGhlIHRvcC1sZXZlbCBpbmRleCBzY2FuLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHdh eXMgYWR2YW5jZSB0aGUgYXJyYXkga2V5cyBieSBhdCBsZWFzdCBvbmUgaW5jcmVtZW50CisgKiAo ZXhjZXB0IHdoZW4gaXQgZW5kcyB0aGUgdG9wLWxldmVsIGluZGV4IHNjYW4gaGF2aW5nIHJlYWNo ZWQgYSB0dXBsZSBiZXlvbmQKKyAqIHRoZSBzY2FuJ3MgZmluYWwgYXJyYXkga2V5LCBhbmQgZXhj ZXB0IGR1cmluZyAhc2tyZXF1aXJlZHRyaWdnZXIgY2FsbHMpLgorICoKKyAqIF9idF90dXBsZV9i ZWZvcmVfYXJyYXlfc2tleXMgaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIGlmIHRoZSBj dXJyZW50CisgKiBwbGFjZSBpbiB0aGUgc2NhbiBpcyA+PSB0aGUgY3VycmVudCBhcnJheSBrZXlz LiAgQ2FsbGluZyBoZXJlIGJlZm9yZSB0aGF0CisgKiBwb2ludCB3aWxsIHByZW1hdHVyZWx5IGFk dmFuY2UgdGhlIGFycmF5IGtleXMsIGxlYWRpbmcgdG8gd3JvbmcgcXVlcnkKKyAqIHJlc3VsdHMg KHRob3VnaCB0aGlzIHByZWNvbmRpdGlvbiBpcyBjaGVja2VkIGhlcmUgdmlhIGFuIGFzc2VydGlv bikuCisgKgorICogV2UncmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgY2FsbGVyJ3Mg dHVwbGUgaXMgPD0gY3VycmVudC9uZXdseQorICogYWR2YW5jZWQgcmVxdWlyZWQgYXJyYXkga2V5 cyBvbmNlIHdlIHJldHVybiAodGhpcyBwb3N0Y29uZGl0aW9uIGlzIGFsc28KKyAqIGNoZWNrZWQg dmlhIGFub3RoZXIgYXNzZXJ0aW9uKS4gIFdlIHRyeSB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLCBi dXQgZmFpbGluZworICogdGhhdCB3ZSdsbCBhZHZhbmNlIHRoZSBhcnJheSBrZXlzIHRvIHdoYXRl dmVyIHNldCBvZiBrZXlzIGNvbWVzIG5leHQgaW4gdGhlCisgKiBrZXkgc3BhY2UgKGFtb25nIHRo ZSBrZXlzIHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSkuICBJbiBnZW5lcmFsLCB0aGUgc2NhbidzCisg KiBhcnJheSBrZXlzIGNhbiBvbmx5IGV2ZXIgInJhdGNoZXQgZm9yd2FyZHMiLCBwcm9ncmVzc2lu ZyBpbiBsb2NrIHN0ZXAgd2l0aAorICogdGhlIHNjYW4uCisgKgorICogKFRoZSBpbnZhcmlhbnRz IGFyZSB0aGUgc2FtZSBmb3IgYmFja3dhcmRzIHNjYW5zLCBleGNlcHQgdGhhdCB0aGUgb3BlcmF0 b3JzCisgKiBhcmUgZmxpcHBlZDoganVzdCByZXBsYWNlIHRoZSBwcmVjb25kaXRpb24ncyA+PSBv cGVyYXRvciB3aXRoIGEgPD0sIGFuZCB0aGUKKyAqIHBvc3Rjb25kaXRpb24ncyA8PSBvcGVyYXRv ciB3aXRoIHdpdGggYSA+PS4gIEluIG90aGVyIHdvcmRzLCBqdXN0IHN3YXAgdGhlCisgKiBwcmVj b25kaXRpb24gd2l0aCB0aGUgcG9zdGNvbmRpdGlvbi4pCisgKgorICogTm90ZSB0aGF0IHdlIG1h eSBzb21ldGltZXMgbmVlZCB0byBhZHZhbmNlIHRoZSBhcnJheSBrZXlzIGluIHNwaXRlIG9mIHRo ZQorICogZXhpc3RpbmcgYXJyYXkga2V5cyBhbHJlYWR5IGJlaW5nIGFuIGV4YWN0IG1hdGNoIGZv ciBldmVyeSBjb3JyZXNwb25kaW5nCisgKiB2YWx1ZSBmcm9tIGNhbGxlcidzIHR1cGxlLiAgV2Ug ZmFsbCBiYWNrIG9uICJpbmNyZW1lbnRhbGx5IiBhZHZhbmNpbmcgdGhlCisgKiBhcnJheSBrZXlz IGluIHRoZXNlIGNhc2VzLCB3aGljaCBhbGwgaW52b2x2ZSBub24tYXJyYXkgc2NhbiBrZXlzLiAg Rm9yCisgKiBleGFtcGxlLCB3aXRoIGEgY29tcG9zaXRlIGluZGV4IG9uIChhLCBiKSBhbmQgYSBx dWFsICJXSEVSRSBhIElOICgzLDUpIEFORAorICogYiA8IDQyIiwgd2UnbGwgYmUgY2FsbGVkIGZv ciBib3RoICJhIiBrZXlzIChpLmUuIGtleXMgMyBhbmQgNSkgd2hlbiB0aGUKKyAqIHNjYW4gcmVh Y2hlcyB0dXBsZXMgd2hlcmUgImIgPj0gNDIiLiAgRXZlbiB0aG91Z2ggImEiIGFycmF5IGtleXMg Y29udGludWUKKyAqIHRvIGhhdmUgZXhhY3QgbWF0Y2hlcyBmb3IgdHVwbGVzICJiID49IDQyIiAo Zm9yIGJvdGggYXJyYXkga2V5IGdyb3VwaW5ncyksCisgKiB3ZSB3aWxsIHN0aWxsIGFkdmFuY2Ug dGhlIGFycmF5IGZvciAiYSIgdmlhIG91ciBmYWxsYmFjayBvbiBpbmNyZW1lbnRhbAorICogYWR2 YW5jZW1lbnQgZWFjaCB0aW1lIHdlJ3JlIGNhbGxlZC4gIFRoZSBmaXJzdCB0aW1lIHdlJ3JlIGNh bGxlZCAod2hlbiB0aGUKKyAqIHNjYW4gcmVhY2hlcyBhIHR1cGxlID49ICIoMywgNDIpIiksIHdl IGFkdmFuY2UgdGhlIGFycmF5IGtleSAoZnJvbSAzIHRvIDUpLgorICogVGhpcyBnaXZlcyBvdXIg Y2FsbGVyIHRoZSBvcHRpb24gb2Ygc3RhcnRpbmcgYSBuZXcgcHJpbWl0aXZlIGluZGV4IHNjYW4K KyAqIHRoYXQgcXVpY2tseSBsb2NhdGVzIHRoZSBzdGFydCBvZiB0dXBsZXMgPiAiKDUsIC1pbmYp Ii4gIFRoZSBzZWNvbmQgdGltZQorICogd2UncmUgY2FsbGVkICh3aGVuIHRoZSBzY2FuIHJlYWNo ZXMgYSB0dXBsZSA+PSAiKDUsIDQyKSIpLCB3ZSBpbmNyZW1lbnRhbGx5CisgKiBhZHZhbmNlIHRo ZSBrZXlzIGEgc2Vjb25kIHRpbWUuICBUaGlzIHNlY29uZCBjYWxsIGVuZHMgdGhlIHRvcC1sZXZl bCBzY2FuLgorICoKKyAqIE5vdGUgYWxzbyB0aGF0IHdlIGRlYWwgd2l0aCBhbGwgcmVxdWlyZWQg ZXF1YWxpdHktdHlwZSBzY2FuIGtleXMgaGVyZTsgaXQncworICogbm90IGxpbWl0ZWQgdG8gYXJy YXkgc2NhbiBrZXlzLiAgV2UgbmVlZCB0byBoYW5kbGUgbm9uLWFycmF5IGVxdWFsaXR5IGNhc2Vz CisgKiBoZXJlIGJlY2F1c2UgdGhleSdyZSBlcXVhbGl0eSBjb25zdHJhaW50cyBmb3IgdGhlIHNj YW4sIGluIHRoZSBzYW1lIHdheQorICogdGhhdCBhcnJheSBzY2FuIGtleXMgYXJlLgorICovCitz dGF0aWMgYm9vbAorX2J0X2FkdmFuY2VfYXJyYXlfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEJU UmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLAorCQkJCQkgICBJbmRleFR1cGxlIHR1cGxlLCBib29sIHNr cmVxdWlyZWR0cmlnZ2VyKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOworCVNjYW5E aXJlY3Rpb24gZGlyID0gcHN0YXRlLT5kaXI7CisJVHVwbGVEZXNjCWl0dXBkZXNjID0gUmVsYXRp b25HZXREZXNjcihyZWwpOworCVNjYW5LZXkJCWN1cjsKKwlpbnQJCQlpa2V5LAorCQkJCWFycmF5 aWR4ID0gMCwKKwkJCQludHVwYXR0cyA9IEJUcmVlVHVwbGVHZXROQXR0cyh0dXBsZSwgcmVsKTsK Kwlib29sCQlhcnJheXNfYWR2YW5jZWQgPSBmYWxzZSwKKwkJCQlhcnJheXNfZXhoYXVzdGVkLAor CQkJCWJleW9uZF9lbmRfYWR2YW5jZSA9IGZhbHNlLAorCQkJCWFsbF9lcXR5cGVfc2tfZXF1YWwg PSB0cnVlLAorCQkJCWFsbF9yZXF1aXJlZF9lcXR5cGVfc2tfZXF1YWwgUEdfVVNFRF9GT1JfQVNT RVJUU19PTkxZID0gdHJ1ZTsKKworCS8qCisJICogTXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHR1 cGxlIGlzID49IGN1cnJlbnQgcmVxdWlyZWQgYXJyYXkga2V5cworCSAqIChleGNlcHQgZHVyaW5n IGJhY2t3YXJkcyBzY2Fucywgd2hlbiBpdCBtdXN0IGJlIDw9IHRoZSBhcnJheSBrZXlzKQorCSAq LworCUFzc2VydChfYnRfdmVyaWZ5X2FycmF5X3NjYW5rZXlzKHNjYW4pKTsKKwlBc3NlcnQoIXNr cmVxdWlyZWR0cmlnZ2VyIHx8CisJCSAgICFfYnRfdHVwbGVfYmVmb3JlX2FycmF5X3NrZXlzKHNj YW4sIHBzdGF0ZSwgdHVwbGUpKTsKKworCS8qCisJICogVHJ5IHRvIGFkdmFuY2UgYXJyYXkga2V5 cyB2aWEgYSBzZXJpZXMgb2YgYmluYXJ5IHNlYXJjaGVzLgorCSAqCisJICogTG9vcCBpdGVyYXRl cyB0aHJvdWdoIHRoZSBjdXJyZW50IHNjYW5rZXlzIChzby0+a2V5RGF0YSwgd2hpY2ggd2VyZQor CSAqIG91dHB1dCBieSBfYnRfcHJlcHJvY2Vzc19rZXlzIGVhcmxpZXIpIGFuZCB0aGVuIHNldHMg aW5wdXQgc2NhbiBrZXlzCisJICogKHNvLT5hcnJheUtleURhdGEgc2NhbiBrZXlzKSB0byBuZXcg YXJyYXkgdmFsdWVzLgorCSAqLworCWZvciAoY3VyID0gc28tPmtleURhdGEsIGlrZXkgPSAwOyBp a2V5IDwgc28tPm51bWJlck9mS2V5czsgY3VyKyssIGlrZXkrKykKKwl7CisJCUJUQXJyYXlLZXlJ bmZvICphcnJheSA9IE5VTEw7CisJCVNjYW5LZXkJCXNrZXlhcnJheSA9IE5VTEw7CisJCUZtZ3JJ bmZvICAgKm9yZGVycHJvYzsKKwkJaW50CQkJYXR0bnVtID0gY3VyLT5za19hdHRubywKKwkJCQkJ c2V0X2VsZW0gPSAwOworCQlEYXR1bQkJdHVwZGF0dW07CisJCWJvb2wJCXNrcmVxdWlyZWQsCisJ CQkJCXR1cG51bGw7CisJCWludDMyCQlyZXN1bHQ7CisKKwkJLyoKKwkJICogV2Ugb25seSBkZWFs IHdpdGggZXF1YWxpdHkgc3RyYXRlZ3kgc2NhbiBrZXlzLiAgV2UgbGVhdmUgaGFuZGxpbmcKKwkJ ICogb2YgaW5lcXVhbGl0aWVzIHVwIHRvIF9idF9jaGVja19jb21wYXJlLgorCQkgKi8KKwkJaWYg KGN1ci0+c2tfc3RyYXRlZ3kgIT0gQlRFcXVhbFN0cmF0ZWd5TnVtYmVyKQorCQkJY29udGludWU7 CisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIGlmIHRoaXMgc2NhbiBrZXkgaXMgcmVxdWlyZWQuCisJ CSAqCisJCSAqIEVxdWFsaXR5IHN0cmF0ZWd5IHNjYW4ga2V5cyBhcmUgZWl0aGVyIHJlcXVpcmVk IGluIGJvdGggZGlyZWN0aW9ucworCQkgKiBvciBuZWl0aGVyIGRpcmVjdGlvbiwgc28gdGhlIGN1 cnJlbnQgc2NhbiBkaXJlY3Rpb24gZG9lc24ndCBuZWVkIHRvCisJCSAqIGJlIHRlc3RlZCBoZXJl LgorCQkgKi8KKwkJc2tyZXF1aXJlZCA9IChjdXItPnNrX2ZsYWdzICYgU0tfQlRfUkVRRldEKTsK KwkJQXNzZXJ0KCFza3JlcXVpcmVkIHx8IChjdXItPnNrX2ZsYWdzICYgU0tfQlRfUkVRQktXRCkp OworCisJCS8qCisJCSAqIFNldCB1cCBPUkRFUiAzLXdheSBjb21wYXJpc29uIGZ1bmN0aW9uIGFu ZCBhcnJheSBzdGF0ZQorCQkgKi8KKwkJb3JkZXJwcm9jID0gJnNvLT5vcmRlclByb2NzW2F0dG51 bSAtIDFdOworCQlpZiAoY3VyLT5za19mbGFncyAmIFNLX1NFQVJDSEFSUkFZKQorCQl7CisJCQlB c3NlcnQoYXJyYXlpZHggPCBzby0+bnVtQXJyYXlLZXlzKTsKKwkJCWFycmF5ID0gJnNvLT5hcnJh eUtleXNbYXJyYXlpZHgrK107CisJCQlza2V5YXJyYXkgPSAmc28tPmFycmF5S2V5RGF0YVthcnJh eS0+c2Nhbl9rZXldOworCQkJQXNzZXJ0KHNrZXlhcnJheS0+c2tfYXR0bm8gPT0gYXR0bnVtKTsK KwkJfQorCisJCS8qCisJCSAqIE9wdGltaXphdGlvbjogU2tpcCBvdmVyIG5vbi1yZXF1aXJlZCBz Y2FuIGtleXMgd2hlbiB3ZSBrbm93IHRoYXQKKwkJICogdGhleSBjYW4ndCBoYXZlIGNoYW5nZWQg KGJlY2F1c2UgX2J0X2NoZWNrX2NvbXBhcmUgdHJpZ2dlcmVkIHRoaXMKKwkJICogY2FsbCBkdWUg dG8gZW5jb3VudGVyaW5nIGFuIHVuc2F0aXNpZmllZCBub24tcmVxdWlyZWQgYXJyYXkgcXVhbCkK KwkJICovCisJCWlmIChza3JlcXVpcmVkICYmICFza3JlcXVpcmVkdHJpZ2dlcikKKwkJeworCQkJ QXNzZXJ0KCFiZXlvbmRfZW5kX2FkdmFuY2UgJiYgIWFycmF5c19hZHZhbmNlZCk7CisKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogSGVyZSB3ZSBwZXJmb3JtIHN0ZXBzIGZvciBhbGwg YXJyYXkgc2NhbiBrZXlzIGFmdGVyIGEgcmVxdWlyZWQKKwkJICogYXJyYXkgc2NhbiBrZXkgd2hv c2UgYmluYXJ5IHNlYXJjaCB0cmlnZ2VyZWQgImJleW9uZCBlbmQgb2YgYXJyYXkKKwkJICogZWxl bWVudCIgYXJyYXkgYWR2YW5jZW1lbnQgZHVlIHRvIGVuY291bnRlcmluZyBhIHR1cGxlIGF0dHJp YnV0ZQorCQkgKiB2YWx1ZSA+IHRoZSBjbG9zZXN0IG1hdGNoaW5nIGFycmF5IGtleSAob3IgPCBm b3IgYmFja3dhcmRzIHNjYW5zKS4KKwkJICoKKwkJICogV2UgaGVscCB0byBtYWtlIHN1cmUgdGhh dCB0aGUgYXJyYXkga2V5cyBhcmUgdWx0aW1hdGVseSBhZHZhbmNlZAorCQkgKiBzdWNoIHRoYXQg Y2FsbGVyJ3MgdHVwbGUgaXMgPCBmaW5hbCBhcnJheSBrZXlzIChvciA+IGZpbmFsIGtleXMpLgor CQkgKiBXZSdyZSBiZWhpbmQgdGhlIHNjYW4gcmlnaHQgbm93LCBidXQgd2UnbGwgZnVsbHkgImNh dGNoIHVwIiBvbmNlCisJCSAqIG91dHNpZGUgdGhlIGxvb3AgKHdlJ2xsIGJlIGltbWVkaWF0ZWx5 IGFoZWFkIG9mIHRoaXMgdHVwbGUpLiAgU2VlCisJCSAqIGJlbG93IGZvciBhIGRldGFpbGVkIGV4 cGxhbmF0aW9uLgorCQkgKgorCQkgKiBOQjogV2UgbXVzdCBkbyB0aGlzIGZvciBhbGwgYXJyYXlz IC0tIG5vdCBqdXN0IHJlcXVpcmVkIGFycmF5cy4KKwkJICogT3RoZXJ3aXNlIHRoZSBmaW5hbCBp bmNyZW1lbnRhbCBhcnJheSBhZHZhbmNlbWVudCBzdGVwICh0aGF0IHRha2VzCisJCSAqIHBsYWNl IGp1c3Qgb3V0c2lkZSB0aGUgbG9vcCkgd29uJ3QgImNhcnJ5IiBpbiB0aGUgd2F5IHdlIGV4cGVj dC4KKwkJICovCisJCWlmIChiZXlvbmRfZW5kX2FkdmFuY2UpCisJCXsKKwkJCWludAkJCWZpbmFs X2VsZW1fZGlyOworCisJCQlBc3NlcnQoc2tyZXF1aXJlZHRyaWdnZXIpOworCQkJQXNzZXJ0KCFh bGxfZXF0eXBlX3NrX2VxdWFsICYmICFhbGxfcmVxdWlyZWRfZXF0eXBlX3NrX2VxdWFsKTsKKwor CQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikgfHwgIWFycmF5KQorCQkJCWZpbmFs X2VsZW1fZGlyID0gMDsKKwkJCWVsc2UKKwkJCQlmaW5hbF9lbGVtX2RpciA9IGFycmF5LT5udW1f ZWxlbXMgLSAxOworCisJCQlpZiAoYXJyYXkgJiYgYXJyYXktPmN1cl9lbGVtICE9IGZpbmFsX2Vs ZW1fZGlyKQorCQkJeworCQkJCWFycmF5LT5jdXJfZWxlbSA9IGZpbmFsX2VsZW1fZGlyOworCQkJ CXNrZXlhcnJheS0+c2tfYXJndW1lbnQgPSBhcnJheS0+ZWxlbV92YWx1ZXNbZmluYWxfZWxlbV9k aXJdOworCQkJCWFycmF5c19hZHZhbmNlZCA9IHRydWU7CisJCQl9CisKKwkJCWNvbnRpbnVlOwor CQl9CisKKwkJLyoKKwkJICogSGVyZSB3ZSBwZXJmb3JtIHN0ZXBzIGZvciBhbnkgcmVxdWlyZWQg c2NhbiBrZXlzIGFmdGVyIHRoZSBmaXJzdAorCQkgKiByZXF1aXJlZCBzY2FuIGtleSB3aG9zZSB0 dXBsZSBhdHRyaWJ1dGUgd2FzIDwgdGhlIGNsb3Nlc3QgbWF0Y2hpbmcKKwkJICogYXJyYXkga2V5 IHdoZW4gd2UgZGVhbHQgd2l0aCBpdCAob3IgPiBmb3IgYmFja3dhcmRzIHNjYW5zKS4KKwkJICoK KwkJICogVGhpcyBlYXJsaWVyIHJlcXVpcmVkIGFycmF5IGtleSBhbHJlYWR5IHB1dHMgdXMgYWhl YWQgb2YgY2FsbGVyJ3MKKwkJICogdHVwbGUgaW4gdGhlIGtleSBzcGFjZSAoZm9yIHRoZSBjdXJy ZW50IHNjYW4gZGlyZWN0aW9uKS4gIFdlIG11c3QKKwkJICogbWFrZSBzdXJlIHRoYXQgc3Vic2Vx dWVudCBsb3dlci1vcmRlciBhcnJheSBrZXlzIGRvIG5vdCBwdXQgdXMgdG9vCisJCSAqIGZhciBh aGVhZCAoYWhlYWQgb2YgdHVwbGVzIHRoYXQgaGF2ZSB5ZXQgdG8gYmUgc2VlbiBieSBvdXIgY2Fs bGVyKS4KKwkJICogRm9yIGV4YW1wbGUsIHdoZW4gYSB0dXBsZSAiKGEsIGIpID0gKDQyLCA1KSIg YWR2YW5jZXMgdGhlIGFycmF5CisJCSAqIGtleXMgb24gImEiIGZyb20gNDAgdG8gNDUsIHdlIG11 c3QgYWxzbyBzZXQgImIiIHRvIHdoYXRldmVyIHRoZQorCQkgKiBmaXJzdCBhcnJheSBlbGVtZW50 IGZvciAiYiIgaXMuICBJdCB3b3VsZCBiZSB3cm9uZyB0byBhbGxvdyAiYiIgdG8KKwkJICogYmUg c2V0IHRvIGEgdmFsdWUgZnJvbSB0aGUgdHVwbGUsIHNpbmNlIHRoZSB2YWx1ZSBpcyBhY3R1YWxs eSBmcm9tCisJCSAqIGEgZGlmZmVyZW50IHBhcnQgb2YgdGhlIGtleSBzcGFjZS4KKwkJICoKKwkJ ICogQWxzbyBwZXJmb3JtIHRoZSBzYW1lIHN0ZXBzIHdpdGggdHJ1bmNhdGVkIGhpZ2gga2V5IGF0 dHJpYnV0ZXMuCisJCSAqIFlvdSBjYW4gdGhpbmsgb2YgdGhpcyBhcyBhICJiaW5hcnkgc2VhcmNo IiBmb3IgdGhlIGVsZW1lbnQgY2xvc2VzdAorCQkgKiB0byB0aGUgdmFsdWUgLWluZi4gIFRoaXMg aXMgYW5vdGhlciBjYXNlIHdoZXJlIHdlIGhhdmUgdG8gYXZvaWQKKwkJICogZ2V0dGluZyB0b28g ZmFyIGFoZWFkIG9mIHRoZSBzY2FuLgorCQkgKi8KKwkJaWYgKCFhbGxfZXF0eXBlX3NrX2VxdWFs IHx8IGF0dG51bSA+IG50dXBhdHRzKQorCQl7CisJCQlpbnQJCQlmaXJzdF9lbGVtX2RpcjsKKwor CQkJQXNzZXJ0KChza3JlcXVpcmVkdHJpZ2dlciAmJiBhcnJheXNfYWR2YW5jZWQpIHx8CisJCQkJ ICAgYXR0bnVtID4gbnR1cGF0dHMpOworCQkJQXNzZXJ0KCFiZXlvbmRfZW5kX2FkdmFuY2UpOwor CisJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpIHx8ICFhcnJheSkKKwkJCQlmaXJz dF9lbGVtX2RpciA9IDA7CisJCQllbHNlCisJCQkJZmlyc3RfZWxlbV9kaXIgPSBhcnJheS0+bnVt X2VsZW1zIC0gMTsKKworCQkJaWYgKGFycmF5ICYmIGFycmF5LT5jdXJfZWxlbSAhPSBmaXJzdF9l bGVtX2RpcikKKwkJCXsKKwkJCQlhcnJheS0+Y3VyX2VsZW0gPSBmaXJzdF9lbGVtX2RpcjsKKwkJ CQlza2V5YXJyYXktPnNrX2FyZ3VtZW50ID0gYXJyYXktPmVsZW1fdmFsdWVzW2ZpcnN0X2VsZW1f ZGlyXTsKKwkJCQlhcnJheXNfYWR2YW5jZWQgPSB0cnVlOworCQkJfQorCisJCQljb250aW51ZTsK KwkJfQorCisJCS8qCisJCSAqIFNlYXJjaCBpbiBzY2Fua2V5J3MgYXJyYXkgZm9yIHRoZSBjb3Jy ZXNwb25kaW5nIHR1cGxlIGF0dHJpYnV0ZQorCQkgKiB2YWx1ZSBmcm9tIGNhbGxlcidzIHR1cGxl CisJCSAqLworCQl0dXBkYXR1bSA9IGluZGV4X2dldGF0dHIodHVwbGUsIGF0dG51bSwgaXR1cGRl c2MsICZ0dXBudWxsKTsKKworCQlpZiAoIWFycmF5KQorCQl7CisJCQlpZiAoIXNrcmVxdWlyZWQp CisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGEgcmVxdWlyZWQgbm9uLWFy cmF5IGVxdWFsaXR5IHN0cmF0ZWd5IHNjYW4ga2V5LCB3aGljaAorCQkJICogd2UnbGwgdHJlYXQg YXMgYSBkZWdlbmVyYXRlIHNpbmdsZSB2YWx1ZSBhcnJheQorCQkJICovCisJCQlyZXN1bHQgPSBf YnRfY29tcGFyZV9hcnJheV9za2V5KG9yZGVycHJvYywgdHVwZGF0dW0sIHR1cG51bGwsCisJCQkJ CQkJCQkJCWN1ci0+c2tfYXJndW1lbnQsIGN1cik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBE ZXRlcm1pbmUgaWYgc2VhcmNoIGJvdW5kcyBhcmUgcmV1c2FibGUgKG9wdGltaXphdGlvbikgKi8K KwkJCWJvb2wJCWN1cl9lbGVtX3N0YXJ0ID0gKHNrcmVxdWlyZWQgJiYgIWFycmF5c19hZHZhbmNl ZCk7CisKKwkJCS8qCisJCQkgKiBCaW5hcnkgc2VhcmNoIGZvciBjbG9zZXN0IG1hdGNoIHRoYXQn cyBhdmFpbGFibGUgZnJvbSB0aGUgYXJyYXkKKwkJCSAqLworCQkJc2V0X2VsZW0gPSBfYnRfYmlu c3JjaF9hcnJheV9za2V5KG9yZGVycHJvYywgY3VyX2VsZW1fc3RhcnQsIGRpciwKKwkJCQkJCQkJ CQkJICB0dXBkYXR1bSwgdHVwbnVsbCwgYXJyYXksIGN1ciwKKwkJCQkJCQkJCQkJICAmcmVzdWx0 KTsKKwkJfQorCisJCS8qIENvbnNpZGVyIGFkdmFuY2luZyBhcnJheSBrZXlzICovCisJCUFzc2Vy dCghYXJyYXkgfHwgKHNldF9lbGVtID49IDAgJiYgc2V0X2VsZW0gPCBhcnJheS0+bnVtX2VsZW1z KSk7CisJCWlmIChhcnJheSAmJiBhcnJheS0+Y3VyX2VsZW0gIT0gc2V0X2VsZW0pCisJCXsKKwkJ CWFycmF5LT5jdXJfZWxlbSA9IHNldF9lbGVtOworCQkJc2tleWFycmF5LT5za19hcmd1bWVudCA9 IGFycmF5LT5lbGVtX3ZhbHVlc1tzZXRfZWxlbV07CisJCQlhcnJheXNfYWR2YW5jZWQgPSB0cnVl OworCisJCQkvKgorCQkJICogV2Ugc2hvdWxkbid0IGhhdmUgdG8gYWR2YW5jZSBhIHJlcXVpcmVk IGFycmF5IHdoZW4gY2FsbGVkIGR1ZQorCQkJICogdG8gX2J0X2NoZWNrX2NvbXBhcmUgZGV0ZXJt aW5pbmcgdGhhdCBhIG5vbi1yZXF1aXJlZCBhcnJheQorCQkJICogbmVlZHMgdG8gYmUgYWR2YW5j ZWQuICBXZSBleHBlY3QgX2J0X2NoZWNrX2NvbXBhcmUgdG8gbm90aWNlCisJCQkgKiBhbmQgcmVw b3J0IHJlcXVpcmVkIHNjYW4ga2V5cyBiZWZvcmUgbm9uLXJlcXVpcmVkIG9uZXMuCisJCQkgKi8K KwkJCUFzc2VydChza3JlcXVpcmVkdHJpZ2dlciB8fCAhc2tyZXF1aXJlZCk7CisJCX0KKworCQkv KgorCQkgKiBDb25zaWRlciAiYmV5b25kIGVuZCBvZiBhcnJheSBlbGVtZW50IiBhcnJheSBhZHZh bmNlbWVudC4KKwkJICoKKwkJICogV2hlbiB0aGUgdHVwbGUgYXR0cmlidXRlIHZhbHVlIGlzID4g dGhlIGNsb3Nlc3QgbWF0Y2hpbmcgYXJyYXkga2V5CisJCSAqIChvciA8IGluIHRoZSBiYWNrd2Fy ZHMgc2NhbiBjYXNlKSwgd2UgbmVlZCB0byByYXRjaGV0IHRoZSBhcnJheQorCQkgKiBmb3J3YXJk IChiYWNrd2FyZCkgYnkgb25lIHBvc2l0aW9uLCBzbyB0aGF0IHRoZSBhcnJheSBpcyBzZXQgdG8g YQorCQkgKiB2YWx1ZSA8IHRoZSB0dXBsZSBhdHRyaWJ1dGUgdmFsdWUgaW5zdGVhZCAob3IgdG8g YSB2YWx1ZSA+IHR1cGxlJ3MKKwkJICogdmFsdWUpLgorCQkgKgorCQkgKiBUaGlzIHByb2Nlc3Mg aGFzIHRvIHdvcmsgZm9yIGFsbCBvZiB0aGUgYXJyYXlzLCBub3QganVzdCB0aGlzIG9uZToKKwkJ ICogaXQgbXVzdCAiY2FycnkiIHRvIGhpZ2hlci1vcmRlciBhcnJheXMgd2hlbiB0aGUgc2V0X2Vs ZW0gdGhhdCB3ZQorCQkgKiBqdXN0IHVzZWQgZm9yIHRoaXMgYXJyYXkgaGFwcGVucyB0byBoYXZl IGJlZW4gdGhlIGZpbmFsIGVsZW1lbnQKKwkJICogKGZpbmFsIGZvciB0aGUgY3VycmVudCBzY2Fu IGRpcmVjdGlvbikuICBUaGF0J3Mgd2h5IHdlIGRvbid0IGhhbmRsZQorCQkgKiB0aGlzIGlzc3Vl IGJ5IG1vZGlmeWluZyB0aGlzIGFycmF5J3Mgc2V0X2VsZW0gKHRoYXQgd29uJ3QgImNhcnJ5Iiku CisJCSAqCisJCSAqIE91ciBhcHByb2FjaCBpcyB0byBzZXQgZWFjaCBzdWJzZXF1ZW50IGxvd2Vy LW9yZGVyIGFycmF5IHRvIGl0cworCQkgKiBmaW5hbCBlbGVtZW50LiAgV2UnbGwgdGhlbiBhZHZh bmNlIHRoZSBhcnJheSBrZXlzIGluY3JlbWVudGFsbHksCisJCSAqIGp1c3Qgb3V0c2lkZSB0aGUg bG9vcC4gIFRoYXQgd2F5IGVhcmxpZXIvaGlnaGVyIG9yZGVyIGFycmF5cworCQkgKiAoYXJyYXlz IGJlZm9yZSBfdGhpc18gYXJyYXkpIGNhbiBhZHZhbmNlIGFzIGFuZCB3aGVuIHJlcXVpcmVkLgor CQkgKgorCQkgKiBUaGUgYXJyYXkga2V5cyBhZHZhbmNlIGEgbGl0dGxlIGxpa2UgdGhlIHdheSB0 aGF0IGFuIG1pbGVhZ2UgZ2F1Z2UKKwkJICogYWR2YW5jZXMuICBJbWFnaW5lIGEgbWVjaGFuaWNh bCBkaXNwbGF5IHRoYXQgcm9sbHMgb3ZlciBmcm9tIDk5OSB0bworCQkgKiAwMDAgZXZlcnkgdGlt ZSB3ZSBkcml2ZSBvdXIgY2FyIGFub3RoZXIgMSwwMDAgbWlsZXMuICBFYWNoIGRlY2ltYWwKKwkJ ICogZGlnaXQgYmVoYXZlcyBhIGxpdHRsZSBsaWtlIGFuIGFycmF5IGZyb20gdGhlIGFycmF5IHN0 YXRlIG1hY2hpbmUKKwkJICogaW1wbGVtZW50ZWQgYnkgdGhpcyBmdW5jdGlvbi4KKwkJICoKKwkJ ICogU3VwcG9zZSB3ZSBoYXZlIDMgYXJyYXkga2V5cyBhLCBiLCBhbmQgYy4gIEVhY2ggImRpZ2l0 Ii9hcnJheSBoYXMKKwkJICogMTAgZGlzdGluY3QgZWxlbWVudHMgdGhhdCBoYXBwZW4gdG8gbWF0 Y2ggYWNyb3NzIGVhY2ggYXJyYXk6IHZhbHVlcworCQkgKiAwIHRocm91Z2ggdG8gOS4gIENhbGxl cidzIHR1cGxlICIoYSwgYiwgYykgPSAoMywgNy45LCAyKSIgbWlnaHQKKwkJICogaW5pdGlhbGx5 IGhhdmUgaXRzICJiIiBhcnJheSBhZHZhbmNlZCB1cCB0byB0aGUgdmFsdWUgNyAoNyBiZWluZwor CQkgKiB0aGUgY2xvc2VzdCBtYXRjaCB0aGUgImIiIGFycmF5IGhhcyksIGFuZCBpdHMgImMiIGFy cmF5IGFkdmFuY2VkIHVwCisJCSAqIHRvIDkuICBUaGUgaW5jcmVtZW50YWwgYWR2YW5jZW1lbnQg c3RlcCAob3V0c2lkZSB0aGUgbG9vcCkgd2lsbAorCQkgKiB0aGVuIGZpbmlzaCB0aGUgcHJvY2Vz cyBieSAiYWR2YW5jaW5nIiAoYWN0dWFsbHksIHJvbGxpbmcgb3ZlcikgdGhlCisJCSAqIGFycmF5 IG9uICJjIiB0byB0aGUgdmFsdWUgMCwgd2hpY2ggd291bGQgaW1tZWRpYXRlbHkgY2Fycnkgb3Zl ciB0bworCQkgKiAiYiIsIHdoaWNoIHdpbGwgdGhlbiBhZHZhbmNlIHRvIHRoZSB2YWx1ZSA4ICgi cm91bmRpbmcgdXAiIGZyb20gNykuCisJCSAqIFVuZGVyIHRoaXMgc2NoZW1lLCB0aGUgYXJyYXkg a2V5cyBvbmx5IGV2ZXIgcmF0Y2hldCBmb3J3YXJkLCBhbmQKKwkJICogYXJyYXkga2V5IGFkdmFu Y2VtZW50IGJ5IHVzIHRha2VzIHBsYWNlIGFzIGluZnJlcXVlbnRseSBhcyBwb3NzaWJsZQorCQkg KiAoc2VlIGFsc286IHRoaXMgZnVuY3Rpb24ncyBwb3N0Y29uZGl0aW9uIGFzc2VydGlvbnMsIGJl bG93KS4KKwkJICoKKwkJICogSW5jcmVtZW50YWwgYWR2YW5jZW1lbnQgY2FuIGFsc28gY2Fycnkg YWxsIHRoZSB3YXkgcGFzdCB0aGUgbW9zdAorCQkgKiBzaWduaWZpY2FudCBhcnJheSwgZXhoYXVz dGluZyBhbGwgb2YgdGhlIHNjYW4ncyBhcnJheSBrZXlzIGluIG9uZQorCQkgKiBzdGVwLiAgU3Vw cG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgYSBsYXRlciBjYWxsIGhlcmUgcGFzc2VzIGEgdHVwbGUK KwkJICogIihhLCBiLCBjKSA9ICg5LCA5LjksIDQpIi4gIE9uY2UgYWdhaW4gd2UgY2FuJ3QgZmlu ZCBhbiBleGFjdCBtYXRjaAorCQkgKiBmb3IgImIiLCBzbyB3ZSdsbCBzZXQgYmV5b25kX2VuZF9h ZHZhbmNlLiAgVGhpcyB0aW1lLCBpbmNyZW1lbnRhbAorCQkgKiBhZHZhbmNlbWVudCByb2xscyBv dmVyIGFsbCB0aGUgd2F5IHBhc3QgImEiLCB0aGUgbW9zdCBzaWduaWZpY2FudAorCQkgKiBhcnJh eS4gIF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVtZW50IHdpbGwgcmV0dXJuIGZhbHNlIHdo ZW4KKwkJICogdGhpcyBoYXBwZW5zLCBpbmRpY2F0aW5nIHRoYXQgYWxsIGFycmF5IGtleXMgYXJl IG5vdyBleGhhdXN0ZWQuCisJCSAqIFRoaXMgdHJpZ2dlcnMgdGhlIGVuZCBvZiB0aGUgdG9wLWxl dmVsIGluZGV4IHNjYW4gYmVsb3cuCisJCSAqLworCQlBc3NlcnQoIWJleW9uZF9lbmRfYWR2YW5j ZSk7CisJCWlmIChza3JlcXVpcmVkICYmCisJCQkoKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly KSAmJiByZXN1bHQgPiAwKSB8fAorCQkJIChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpICYm IHJlc3VsdCA8IDApKSkKKwkJCWJleW9uZF9lbmRfYWR2YW5jZSA9IHRydWU7CisKKwkJLyoKKwkJ ICogQWxzbyB0cmFjayB3aGV0aGVyIGFsbCBhdHRyaWJ1dGVzIGZyb20gdGhlIHR1cGxlIGFyZSBl cXVhbCB0byB0aGUKKwkJICogYXJyYXkga2V5cyB0aGF0IHdlJ2xsIGJlIGFkdmFuY2luZyB0byAo b3IgdG8gZXhpc3RpbmcgYXJyYXkga2V5cworCQkgKiB0aGF0IGRpZG4ndCBuZWVkIHRvIGJlIGFk dmFuY2VkKQorCQkgKi8KKwkJaWYgKHJlc3VsdCAhPSAwKQorCQl7CisJCQlhbGxfZXF0eXBlX3Nr X2VxdWFsID0gZmFsc2U7CisJCQlpZiAoc2tyZXF1aXJlZCkKKwkJCQlhbGxfcmVxdWlyZWRfZXF0 eXBlX3NrX2VxdWFsID0gZmFsc2U7CisKKwkJCS8qIEp1c3Qgc2tpcCBpZiB0cmlnZ2VyZWQgYnkg YSBub24tcmVxdWlyZWQgc2NhbiBrZXkgKi8KKwkJCWlmICghc2tyZXF1aXJlZHRyaWdnZXIpCisJ CQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIENvbnNpZGVyIGlmIHdlIG5lZWQgdG8gYWR2 YW5jZSB0aGUgYXJyYXkga2V5cyBpbmNyZW1lbnRhbGx5IHRvIGZpbmlzaAorCSAqIG9mZiAiYmV5 b25kIGVuZCBvZiBhcnJheSBlbGVtZW50IiBhcnJheSBhZHZhbmNlbWVudC4KKwkgKgorCSAqIEFs c28gZmFsbCBiYWNrIG9uIGluY3JlbWVudGFsIGFkdmFuY2VtZW50IGluIGNhc2VzIHdoZXJlIHdl IGNvdWxkbid0CisJICogYWR2YW5jZSB0aGUgYXJyYXkga2V5cyBhbnkgb3RoZXIgd2F5LiAgU2Vl IGZ1bmN0aW9uIGhlYWRlciBjb21tZW50cyBmb3IKKwkgKiBhbiBleGFtcGxlIG9mIHRoaXMsIHdo ZXJlIGluZXF1YWxpdHktdHlwZSBzY2FuIGtleXMgYWxvbmUgZHJpdmUgYXJyYXkKKwkgKiBrZXkg YWR2YW5jZW1lbnQuICAoV2UgZG9uJ3QgZGlyZWN0bHkgZGVhbCB3aXRoIGluZXF1YWxpdHkgdHlw ZSBzY2FuCisJICoga2V5cyBoZXJlLCBidXQgY2FzZXMgdGhhdCB1c2UgdGhlIGZhbGxiYWNrIG11 c3QgaW52b2x2ZSBpbmVxdWFsaXRpZXMuKQorCSAqLworCWFycmF5c19leGhhdXN0ZWQgPSBmYWxz ZTsKKwlpZiAoKGJleW9uZF9lbmRfYWR2YW5jZSB8fCAhYXJyYXlzX2FkdmFuY2VkKSAmJiBza3Jl cXVpcmVkdHJpZ2dlcikKKwl7CisJCS8qIEZhbGxiYWNrIGNhc2UgbXVzdCBoYXZlIGFsbC1lcXVh bCBlcXVhbGl0eSB0eXBlIHNjYW4ga2V5cyAqLworCQlBc3NlcnQoYmV5b25kX2VuZF9hZHZhbmNl IHx8IGFsbF9yZXF1aXJlZF9lcXR5cGVfc2tfZXF1YWwpOworCisJCWlmICghX2J0X2FkdmFuY2Vf YXJyYXlfa2V5c19pbmNyZW1lbnQoc2NhbiwgZGlyKSkKKwkJCWFycmF5c19leGhhdXN0ZWQgPSB0 cnVlOworCQllbHNlCisJCQlhcnJheXNfYWR2YW5jZWQgPSB0cnVlOworCisJCS8qCisJCSAqIFRo ZSBuZXdseSBhZHZhbmNlZCBhcnJheSBrZXlzIHdvbid0IGJlIGVxdWFsIGFueW1vcmUsIHNvIHJl bWVtYmVyCisJCSAqIHRoYXQgaW4gb3JkZXIgdG8gYXZvaWQgYSBzZWNvbmQgX2J0X2NoZWNrX2Nv bXBhcmUgY2FsbCBmb3IgdHVwbGUKKwkJICovCisJCWFsbF9lcXR5cGVfc2tfZXF1YWwgPSBhbGxf cmVxdWlyZWRfZXF0eXBlX3NrX2VxdWFsID0gZmFsc2U7CisJfQorCisJQXNzZXJ0KGFycmF5c19l eGhhdXN0ZWQgfHwgYXJyYXlzX2FkdmFuY2VkIHx8ICFza3JlcXVpcmVkdHJpZ2dlcik7CisKKwkv KgorCSAqIElmIHdlIGhhdmVuJ3QgeWV0IGV4aGF1c3RlZCBhbGwgcmVxdWlyZWQgYXJyYXkgc2Nh biBrZXlzLCBhbGxvdyB0aGUKKwkgKiBvbmdvaW5nIHByaW1pdGl2ZSBpbmRleCBzY2FuIHRvIGNv bnRpbnVlCisJICovCisJcHN0YXRlLT5jb250aW51ZXNjYW4gPSAhYXJyYXlzX2V4aGF1c3RlZDsK KworCS8qIENhbm5vdCBzZXQgY29udGludWVzY2FuPWZhbHNlIHdoZW4gY2FsbGVkIGZvciBub24t cmVxdWlyZWQgYXJyYXkgKi8KKwlBc3NlcnQocHN0YXRlLT5jb250aW51ZXNjYW4gfHwgc2tyZXF1 aXJlZHRyaWdnZXIpOworCisJaWYgKGFycmF5c19hZHZhbmNlZCkKKwl7CisJCS8qCisJCSAqIFdl IGFkdmFuY2VkIHRoZSBhcnJheSBrZXlzLCBhbmQgc28gbXVzdCBwZXJmb3JtIGEgdGFyZ2V0ZWQg Zm9ybSBvZgorCQkgKiBpbi1wbGFjZSBwcmVwcm9jZXNzaW5nIG9mIHRoZSBzY2FuJ3Mgc2VhcmNo LXR5cGUgc2NhbiBrZXlzLgorCQkgKgorCQkgKiBJZiB3ZSBtaXNzZWQgdGhpcyBmaW5hbCBzdGVw IHRoZW4gYW55IGNhbGwgdG8gX2J0X2NoZWNrX2NvbXBhcmUKKwkJICogd291bGQgdXNlIHN0YWxl IGFycmF5IGtleXMgdW50aWwgc3VjaCB0aW1lIGFzIF9idF9wcmVwcm9jZXNzX2tleXMKKwkJICog d2FzIG9uY2UgYWdhaW4gY2FsbGVkIGJ5IF9idF9maXJzdC4gIEJ1dCBpdCdzIGEgZ29vZCBpZGVh IHRvIGRvCisJCSAqIHRoaXMgZXZlbiB3aGVuIHRoZXJlIHdvbid0IGJlIGFub3RoZXIgcHJpbWl0 aXZlIGluZGV4IHNjYW4uCisJCSAqLworCQlfYnRfcHJlcHJvY2Vzc19rZXlzX2xlYWZidWYoc2Nh bik7CisKKwkJLyoKKwkJICogSWYgYW55IHJlcXVpcmVkIGFycmF5IGtleXMgd2VyZSBhZHZhbmNl ZCwgYmUgcHJlcGFyZWQgdG8gcmVjaGVjaworCQkgKiB0aGUgZmluYWwgdHVwbGUgYWdhaW5zdCB0 aGUgbmV3IGFycmF5IGtleXMgKGFzIGFuIG9wdGltaXphdGlvbikKKwkJICovCisJCWlmIChza3Jl cXVpcmVkdHJpZ2dlcikKKwkJCXBzdGF0ZS0+ZmluYWx0dXBjaGVja2VkID0gZmFsc2U7CisJfQor CisJLyoKKwkgKiBQb3N0Y29uZGl0aW9uIGFzc2VydGlvbnMuCisJICoKKwkgKiBUdXBsZSBtdXN0 IG5vdyBiZSA8PSBjdXJyZW50L25ld2x5IGFkdmFuY2VkIHJlcXVpcmVkIGFycmF5IGtleXMuICBT YW1lCisJICogZ29lcyBmb3Igb3RoZXIgcmVxdWlyZWQgZXF1YWxpdHkgdHlwZSBzY2FuIGtleXMs IHdoaWNoIGFyZSAiZGVnZW5lcmF0ZQorCSAqIHNpbmdsZSB2YWx1ZSBhcnJheXMiIGZvciBvdXIg cHVycG9zZXMuICAoQXMgdXN1YWwgdGhlIHJ1bGUgaXMgdGhlIHNhbWUKKwkgKiBmb3IgYmFja3dh cmRzIHNjYW5zLCBidXQgdGhlIG9wZXJhdG9yIGlzIGZsaXBwZWQ6IHR1cGxlIG11c3QgYmUgPj0g bmV3CisJICogYXJyYXkga2V5cy4pCisJICoKKwkgKiBXZSdyZSBzdHJpY3RlciB0aGFuIHRoYXQg aW4gY2FzZXMgd2hlcmUgdGhlIHR1cGxlIHdhcyBhbHJlYWR5IGVxdWFsIHRvCisJICogdGhlIHBy ZXZpb3VzIGFycmF5IGtleXMgd2hlbiB3ZSB3ZXJlIGNhbGxlZDogdHVwbGUgbXVzdCBub3cgYmUg PCB0aGUKKwkgKiBuZXcgYXJyYXkga2V5cyAob3IgPiB0aGUgYXJyYXkga2V5cykuICBUaGlzIGlz IGEgY29uc2VxdWVuY2Ugb2YgdGhlCisJICogZmFsbGJhY2sgb24gaW5jcmVtZW50YWwgYWR2YW5j ZW1lbnQgdXNlZCB0byBpbmRpcmVjdGx5IGhhbmRsZSBjYXNlcworCSAqIHdoZXJlIGFuIGluZXF1 YWxpdHkgdHJpZ2dlcnMgYXJyYXkga2V5IGFkdmFuY2VtZW50LiAgKFNlZSBmdW5jdGlvbgorCSAq IGhlYWRlciBjb21tZW50cyBmb3IgYW4gZXhhbXBsZSBvZiB0aGlzLikKKwkgKgorCSAqIE91ciBj YWxsZXIgZGVjaWRlcyB3aGVuIHRvIHN0YXJ0IHByaW1pdGl2ZSBpbmRleCBzY2FucyBiYXNlZCBp biBwYXJ0IG9uCisJICogdGhlIGN1cnJlbnQgYXJyYXkga2V5cy4gIEl0IGFsd2F5cyBuZWVkcyB0 byBzZWUgYSBwcmVjaXNlIGFycmF5LXdpc2UKKwkgKiBwaWN0dXJlIG9mIHRoZSBzY2FuJ3MgcHJv Z3Jlc3MuICBJZiB3ZSBldmVyIGFkdmFuY2VkIHRoZSBhcnJheSBrZXlzIGJ5CisJICogbGVzcyB0 aGFuIHRoZSBleGFjdCBtYXhpbXVtIHNhZmUgYW1vdW50LCBvdXIgY2FsbGVyIG1pZ2h0IGdvIG9u IHRvIG1ha2UKKwkgKiBzdWJ0bHkgd3JvbmcgZGVjaXNpb25zIGFib3V0IHdoZW4gdG8gcXVpdCB0 aGUgb25nb2luZyBwcmltaXRpdmUgc2Nhbi4KKwkgKiAoVGhlc2UgYXNzZXJ0aW9ucyB3b24ndCBy ZWxpYWJseSBkZXRlY3QgZXZlcnkgY2FzZSB3aGVyZSB0aGUgYXJyYXkga2V5cworCSAqIGhhdmVu J3QgYWR2YW5jZSBieSB0aGUgZXhwZWN0ZWQvbWF4aW11bSBhbW91bnQsIGJ1dCB0aGV5IGNvbWUg Y2xvc2UuKQorCSAqLworCUFzc2VydChfYnRfdmVyaWZ5X2FycmF5X3NjYW5rZXlzKHNjYW4pKTsK KwlBc3NlcnQoX2J0X3R1cGxlX2JlZm9yZV9hcnJheV9za2V5cyhzY2FuLCBwc3RhdGUsIHR1cGxl KSA9PQorCQkgICAoIWFsbF9yZXF1aXJlZF9lcXR5cGVfc2tfZXF1YWwgJiYgIWFycmF5c19leGhh dXN0ZWQpKTsKKworCS8qIEFsbC1lcXVhbCByZXF1aXJlZCBlcXVhbGl0eSBrZXlzIHNob3VsZG4n dCBiZSBmcm9tIGJlZm9yZSB0aGlzIGNhbGwgKi8KKwlBc3NlcnQoIWFsbF9yZXF1aXJlZF9lcXR5 cGVfc2tfZXF1YWwgfHwgIXNrcmVxdWlyZWR0cmlnZ2VyIHx8CisJCSAgIGFycmF5c19hZHZhbmNl ZCB8fCBhcnJheXNfZXhoYXVzdGVkKTsKKworCXJldHVybiBhbGxfZXF0eXBlX3NrX2VxdWFsICYm IHBzdGF0ZS0+Y29udGludWVzY2FuOworfQogCiAvKgogICoJX2J0X3ByZXByb2Nlc3Nfa2V5cygp IC0tIFByZXByb2Nlc3Mgc2NhbiBrZXlzCkBAIC03NDksNiArMTc2NywyMSBAQCBfYnRfcmVzdG9y ZV9hcnJheV9rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqIEFnYWluLCBtaXNzaW5nIGNyb3Nz LXR5cGUgb3BlcmF0b3JzIG1pZ2h0IGNhdXNlIHVzIHRvIGZhaWwgdG8gcHJvdmUgdGhlCiAgKiBx dWFscyBjb250cmFkaWN0b3J5IHdoZW4gdGhleSByZWFsbHkgYXJlLCBidXQgdGhlIHNjYW4gd2ls bCB3b3JrIGNvcnJlY3RseS4KICAqCisgKiBJbmRleCBzY2FucyB3aXRoIGFycmF5IGtleXMgbmVl ZCB0byBiZSBhYmxlIHRvIGFkdmFuY2UgZWFjaCBhcnJheSdzIGtleXMKKyAqIGFuZCBtYWtlIHRo ZW0gdGhlIGN1cnJlbnQgc2VhcmNoLXR5cGUgc2NhbiBrZXlzIHdpdGhvdXQgY2FsbGluZyBoZXJl LiAgVGhleQorICogZXhwZWN0IHRvIGJlIGFibGUgdG8gY2FsbCBfYnRfcHJlcHJvY2Vzc19rZXlz X2xlYWZidWYgaW5zdGVhZCAoYSBzdHJpcHBlZAorICogZG93biB2ZXJzaW9uIG9mIHRoaXMgZnVu Y3Rpb24gdGhhdCdzIHNwZWNpYWxpemVkIHRvIGFycmF5IGtleSBpbmRleCBzY2FucykuCisgKiBX ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgdGhhdCBjYXNlIGhlcmUgd2hlbiB3ZSBkZXRlcm1p bmUgcmVkdW5kYW5jeTsKKyAqIGVxdWFsaXR5IHF1YWxzIG11c3Qgbm90IGJlIGVsaW1pbmF0ZWQg YXMgcmVkdW5kYW50IG9uIHRoZSBiYXNpcyBvZiBhcnJheQorICogaW5wdXQga2V5cyB0aGF0IG1p Z2h0IGNoYW5nZSBiZWZvcmUgYW5vdGhlciBjYWxsIGhlcmUgdGFrZXMgcGxhY2UuCisgKgorICog Tm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgYW4gYXJyYXkgc2NhbiBrZXkgZG9l c24ndCBhZmZlY3QgaG93IHdlCisgKiBkZXRlcm1pbmUgaWYgaW5kZXggcXVhbHMgYXJlIGNvbnRy YWRpY3RvcnkuICBDb250cmFkaWN0b3J5IHF1YWwgc2NhbnMgbW92ZQorICogb24gdG8gdGhlIG5l eHQgcHJpbWl0aXZlIGluZGV4IHNjYW4gcmlnaHQgYXdheSwgYnkgaW5jcmVtZW50aW5nIHRoZSBz Y2FuJ3MKKyAqIGFycmF5IGtleXMgb25jZSBjb250cm9sIHJlYWNoZXMgX2J0X2FycmF5X2tleXNf cmVtYWluLiAgVGhlcmUgd29uJ3QgZXZlciBiZQorICogYSBjYWxsIHRvIF9idF9wcmVwcm9jZXNz X2tleXNfbGVhZmJ1ZiBiZWZvcmUgdGhlIG5leHQgY2FsbCBoZXJlLCBzbyB0aGVyZQorICogaXMg bm90aGluZyBmb3IgdXMgdG8gYnJlYWsuCisgKgogICogUm93IGNvbXBhcmlzb24ga2V5cyBhcmUg Y3VycmVudGx5IGFsc28gdHJlYXRlZCB3aXRob3V0IGFueSBzbWFydHM6CiAgKiB3ZSBqdXN0IHRy YW5zZmVyIHRoZW0gaW50byB0aGUgcHJlcHJvY2Vzc2VkIGFycmF5IHdpdGhvdXQgYW55CiAgKiBl ZGl0b3JpYWxpemF0aW9uLiAgV2UgY2FuIHRyZWF0IHRoZW0gdGhlIHNhbWUgYXMgYW4gb3JkaW5h cnkgaW5lcXVhbGl0eQpAQCAtODk1LDggKzE5MjgsMTEgQEAgX2J0X3ByZXByb2Nlc3Nfa2V5cyhJ bmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJCQkJc28tPnF1YWxfb2sgPSBmYWxzZTsKIAkJCQkJCQly ZXR1cm47CiAJCQkJCQl9Ci0JCQkJCQkvKiBlbHNlIGRpc2NhcmQgdGhlIHJlZHVuZGFudCBub24t ZXF1YWxpdHkga2V5ICovCi0JCQkJCQl4Zm9ybVtqXSA9IE5VTEw7CisJCQkJCQllbHNlIGlmICgh KGVxLT5za19mbGFncyAmIFNLX1NFQVJDSEFSUkFZKSkKKwkJCQkJCXsKKwkJCQkJCQkvKiBlbHNl IGRpc2NhcmQgdGhlIHJlZHVuZGFudCBub24tZXF1YWxpdHkga2V5ICovCisJCQkJCQkJeGZvcm1b al0gPSBOVUxMOworCQkJCQkJfQogCQkJCQl9CiAJCQkJCS8qIGVsc2UsIGNhbm5vdCBkZXRlcm1p bmUgcmVkdW5kYW5jeSwga2VlcCBib3RoIGtleXMgKi8KIAkJCQl9CkBAIC05ODYsNiArMjAyMiwy MiBAQCBfYnRfcHJlcHJvY2Vzc19rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCWNvbnRpbnVl OwogCQl9CiAKKwkJLyoKKwkJICogSXMgdGhpcyBhbiBhcnJheSBzY2FuIGtleSB0aGF0IF9idF9w cmVwcm9jZXNzX2FycmF5X2tleXMgbWVyZ2VkCisJCSAqIHdpdGggc29tZSBlYXJsaWVyIGFycmF5 IGtleSBkdXJpbmcgaXRzIGluaXRpYWwgcHJlcHJvY2Vzc2luZyBwYXNzPworCQkgKi8KKwkJaWYg KGN1ci0+c2tfZmxhZ3MgJiBTS19CVF9SREROQVJSQVkpCisJCXsKKwkJCS8qCisJCQkgKiBrZXkg aXMgcmVkdW5kYW50IGZvciB0aGlzIHByaW1pdGl2ZSBpbmRleCBzY2FuIChhbmQgd2lsbCBiZQor CQkJICogcmVkdW5kYW50IGR1cmluZyBhbGwgc3Vic2VxdWVudCBwcmltaXRpdmUgaW5kZXggc2Nh bnMpCisJCQkgKi8KKwkJCUFzc2VydChjdXItPnNrX2ZsYWdzICYgU0tfU0VBUkNIQVJSQVkpOwor CQkJQXNzZXJ0KGogPT0gKEJURXF1YWxTdHJhdGVneU51bWJlciAtIDEpKTsKKwkJCUFzc2VydChz by0+bnVtQXJyYXlLZXlzID4gMCk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCS8qIGhhdmUgd2Ug c2VlbiBvbmUgb2YgdGhlc2UgYmVmb3JlPyAqLwogCQlpZiAoeGZvcm1bal0gPT0gTlVMTCkKIAkJ ewpAQCAtOTk5LDcgKzIwNTEsMjYgQEAgX2J0X3ByZXByb2Nlc3Nfa2V5cyhJbmRleFNjYW5EZXNj IHNjYW4pCiAJCQkJCQkJCQkJICZ0ZXN0X3Jlc3VsdCkpCiAJCQl7CiAJCQkJaWYgKHRlc3RfcmVz dWx0KQotCQkJCQl4Zm9ybVtqXSA9IGN1cjsKKwkJCQl7CisJCQkJCWlmIChqID09IChCVEVxdWFs U3RyYXRlZ3lOdW1iZXIgLSAxKSAmJgorCQkJCQkJKCh4Zm9ybVtqXS0+c2tfZmxhZ3MgJiBTS19T RUFSQ0hBUlJBWSkgfHwKKwkJCQkJCSAoY3VyLT5za19mbGFncyAmIFNLX1NFQVJDSEFSUkFZKSkp CisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBNdXN0IG5ldmVyIHJlcGxhY2UgYW4gPSBhcnJh eSBvcGVyYXRvciBvdXJzZWx2ZXMsCisJCQkJCQkgKiBub3IgY2FuIHdlIGV2ZXIgZmFpbCB0byBy ZW1lbWJlciBhbiA9IGFycmF5CisJCQkJCQkgKiBvcGVyYXRvci4gIF9idF9wcmVwcm9jZXNzX2tl eXNfbGVhZmJ1ZiBleHBlY3RzCisJCQkJCQkgKiB0aGlzLgorCQkJCQkJICovCisJCQkJCQlTY2Fu S2V5CQlvdXRrZXkgPSAmb3V0a2V5c1tuZXdfbnVtYmVyT2ZLZXlzKytdOworCisJCQkJCQltZW1j cHkob3V0a2V5LCBjdXIsIHNpemVvZihTY2FuS2V5RGF0YSkpOworCQkJCQkJaWYgKG51bWJlck9m RXF1YWxDb2xzID09IGF0dG5vIC0gMSkKKwkJCQkJCQlfYnRfbWFya19zY2Fua2V5X3JlcXVpcmVk KG91dGtleSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJeGZvcm1bal0gPSBjdXI7CisJCQkJ fQogCQkJCWVsc2UgaWYgKGogPT0gKEJURXF1YWxTdHJhdGVneU51bWJlciAtIDEpKQogCQkJCXsK IAkJCQkJLyoga2V5ID09IGEgJiYga2V5ID09IGIsIGJ1dCBhICE9IGIgKi8KQEAgLTEwMjcsNiAr MjA5OCw5NiBAQCBfYnRfcHJlcHJvY2Vzc19rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlzby0+ bnVtYmVyT2ZLZXlzID0gbmV3X251bWJlck9mS2V5czsKIH0KIAorLyoKKyAqCV9idF9wcmVwcm9j ZXNzX2tleXNfbGVhZmJ1ZigpIC0tIFByZXByb2Nlc3MgYXJyYXkgc2NhbiBrZXlzIG9ubHkKKyAq CisgKiBTdHJpcHBlZCBkb3duIHZlcnNpb24gb2YgX2J0X3ByZXByb2Nlc3Nfa2V5cyB0aGF0IGNh biBiZSBjYWxsZWQgd2l0aCBhCisgKiBidWZmZXIgbG9jayBoZWxkLiAgUmV1c2VzIG11Y2ggb2Yg dGhlIHdvcmsgcGVyZm9ybWVkIGR1cmluZyB0aGUgcHJldmlvdXMKKyAqIF9idF9wcmVwcm9jZXNz X2tleXMgY2FsbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGp1c3QgdHJhbnNmZXJzIG5ld2x5IGFk dmFuY2VkIGFycmF5IGtleXMgdGhhdCB3ZXJlIHNldCBpbgorICogInNvLT5hcnJheUtleURhdGEi IHRvIGNvcnJlc3BvbmRpbmcgInNvLT5rZXlEYXRhIiBzZWFyY2gtdHlwZSBzY2FuIGtleXMuCisg KiBJdCBkb2VzIG5vdCBpbmRlcGVuZGVudGx5IGRldGVjdCByZWR1bmFudCBvciBjb250cmFkaWN0 b3J5IHNjYW4ga2V5cy4KKyAqLworc3RhdGljIHZvaWQKK19idF9wcmVwcm9jZXNzX2tleXNfbGVh ZmJ1ZihJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOworCVNjYW5LZXkJCWN1cjsKKwlpbnQJCQlpa2V5LAorCQkJCWFy cmF5aWR4ID0gMDsKKworCUFzc2VydChzby0+cXVhbF9vayk7CisKKwlmb3IgKGN1ciA9IHNvLT5r ZXlEYXRhLCBpa2V5ID0gMDsgaWtleSA8IHNvLT5udW1iZXJPZktleXM7IGN1cisrLCBpa2V5Kysp CisJeworCQlCVEFycmF5S2V5SW5mbyAqYXJyYXk7CisJCVNjYW5LZXkJCXNrZXlhcnJheTsKKwor CQlBc3NlcnQoKGN1ci0+c2tfZmxhZ3MgJiBTS19CVF9SREROQVJSQVkpID09IDApOworCisJCS8q IEp1c3QgdXBkYXRlIGVxdWFsaXR5IGFycmF5IHNjYW4ga2V5cyAqLworCQlpZiAoY3VyLT5za19z dHJhdGVneSAhPSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIgfHwKKwkJCSEoY3VyLT5za19mbGFncyAm IFNLX1NFQVJDSEFSUkFZKSkKKwkJCWNvbnRpbnVlOworCisJCWFycmF5ID0gJnNvLT5hcnJheUtl eXNbYXJyYXlpZHgrK107CisJCXNrZXlhcnJheSA9ICZzby0+YXJyYXlLZXlEYXRhW2FycmF5LT5z Y2FuX2tleV07CisKKwkJLyogVXBkYXRlIHRoZSBzY2FuIGtleSdzIGFyZ3VtZW50ICovCisJCUFz c2VydChjdXItPnNrX2F0dG5vID09IHNrZXlhcnJheS0+c2tfYXR0bm8pOworCQljdXItPnNrX2Fy Z3VtZW50ID0gc2tleWFycmF5LT5za19hcmd1bWVudDsKKwl9CisKKwlBc3NlcnQoYXJyYXlpZHgg PT0gc28tPm51bUFycmF5S2V5cyk7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCB0aGUgc2Nhbidz ICJzby0+YXJyYXlLZXlEYXRhIiBzY2FuIGtleXMgYXJlIGluIGFncmVlbWVudCB3aXRoCisgKiB0 aGUgY3VycmVudCAic28tPmtleURhdGEiIHNlYXJjaC10eXBlIHNjYW4ga2V5cy4gIFVzZWQgd2l0 aGluIGFzc2VydGlvbnMuCisgKi8KKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCitzdGF0aWMg Ym9vbAorX2J0X3ZlcmlmeV9hcnJheV9zY2Fua2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJ QlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCVNjYW5LZXkJ CWN1cjsKKwlpbnQJCQlpa2V5LAorCQkJCWFycmF5aWR4ID0gMDsKKworCWlmICghc28tPnF1YWxf b2spCisJCXJldHVybiBmYWxzZTsKKworCWZvciAoY3VyID0gc28tPmtleURhdGEsIGlrZXkgPSAw OyBpa2V5IDwgc28tPm51bWJlck9mS2V5czsgY3VyKyssIGlrZXkrKykKKwl7CisJCUJUQXJyYXlL ZXlJbmZvICphcnJheTsKKwkJU2NhbktleQkJc2tleWFycmF5OworCisJCWlmIChjdXItPnNrX3N0 cmF0ZWd5ICE9IEJURXF1YWxTdHJhdGVneU51bWJlciB8fAorCQkJIShjdXItPnNrX2ZsYWdzICYg U0tfU0VBUkNIQVJSQVkpKQorCQkJY29udGludWU7CisKKwkJYXJyYXkgPSAmc28tPmFycmF5S2V5 c1thcnJheWlkeCsrXTsKKwkJc2tleWFycmF5ID0gJnNvLT5hcnJheUtleURhdGFbYXJyYXktPnNj YW5fa2V5XTsKKworCQkvKiBWZXJpZnkgc28tPmFycmF5S2V5RGF0YSBpbnB1dCBzY2FuIGtleSBo YXMgZXhwZWN0ZWQgc2tfYXJndW1lbnQgKi8KKwkJaWYgKHNrZXlhcnJheS0+c2tfYXJndW1lbnQg IT0gYXJyYXktPmVsZW1fdmFsdWVzW2FycmF5LT5jdXJfZWxlbV0pCisJCQlyZXR1cm4gZmFsc2U7 CisKKwkJLyogVmVyaWZ5IHNvLT5hcnJheUtleURhdGEgaW5wdXQgc2NhbiBrZXkgYWdyZWVzIHdp dGggb3V0cHV0IGtleSAqLworCQlpZiAoY3VyLT5za19hdHRubyAhPSBza2V5YXJyYXktPnNrX2F0 dG5vKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoY3VyLT5za19hcmd1bWVudCAhPSBza2V5YXJy YXktPnNrX2FyZ3VtZW50KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChhcnJheWlkeCAh PSBzby0+bnVtQXJyYXlLZXlzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30K KyNlbmRpZgorCiAvKgogICogQ29tcGFyZSB0d28gc2NhbmtleSB2YWx1ZXMgdXNpbmcgYSBzcGVj aWZpZWQgb3BlcmF0b3IuCiAgKgpAQCAtMTM2MCw0MSArMjUyMSwxOTggQEAgX2J0X21hcmtfc2Nh bmtleV9yZXF1aXJlZChTY2FuS2V5IHNrZXkpCiAgKgogICogUmV0dXJuIHRydWUgaWYgc28sIGZh bHNlIGlmIG5vdC4gIElmIHRoZSB0dXBsZSBmYWlscyB0byBwYXNzIHRoZSBxdWFsLAogICogd2Ug YWxzbyBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSdzIGFueSBuZWVkIHRvIGNvbnRpbnVlIHRoZSBz Y2FuIGJleW9uZAotICogdGhpcyB0dXBsZSwgYW5kIHNldCAqY29udGludWVzY2FuIGFjY29yZGlu Z2x5LiAgU2VlIGNvbW1lbnRzIGZvcgorICogdGhpcyB0dXBsZSwgYW5kIHNldCBwc3RhdGUuY29u dGludWVzY2FuIGFjY29yZGluZ2x5LiAgU2VlIGNvbW1lbnRzIGZvcgogICogX2J0X3ByZXByb2Nl c3Nfa2V5cygpLCBhYm92ZSwgYWJvdXQgaG93IHRoaXMgaXMgZG9uZS4KICAqCi0gKiBGb3J3YXJk IHNjYW4gY2FsbGVycyBjYW4gcGFzcyBhIGhpZ2gga2V5IHR1cGxlIGluIHRoZSBob3BlcyBvZiBo YXZpbmcKLSAqIHVzIHNldCAqY29udGludWVzY2FuIHRvIGZhbHNlLCBhbmQgYXZvaWRpbmcgYW4g dW5uZWNlc3NhcnkgdmlzaXQgdG8KLSAqIHRoZSBwYWdlIHRvIHRoZSByaWdodC4KKyAqIEZvcndh cmQgc2NhbiBjYWxsZXJzIGNhbiBwYXNzIGEgaGlnaCBrZXkgdHVwbGUgaW4gdGhlIGhvcGVzIG9m IGhhdmluZyB1cworICogc2V0IHBzdGF0ZS5jb250aW51ZXNjYW4gdG8gZmFsc2UsIGFuZCBhdm9p ZGluZyBhbiB1bm5lY2Vzc2FyeSB2aXNpdCB0byB0aGUKKyAqIHBhZ2UgdG8gdGhlIHJpZ2h0Lgor ICoKKyAqIEZvcndhcmRzIHNjYW4gY2FsbGVycyB3aXRoIGVxdWFsaXR5IHR5cGUgYXJyYXkgc2Nh biBrZXlzIGFyZSBvYmxpZ2F0ZWQgdG8KKyAqIHNldCB1cCBwYWdlIHN0YXRlIGluIGEgd2F5IHRo YXQgbWFrZXMgaXQgcG9zc2libGUgZm9yIHVzIHRvIGNoZWNrIHRoZSBmaW5hbAorICogdHVwbGUg KHRoZSBoaWdoIGtleSBmb3IgYSBmb3J3YXJkIHNjYW4pIGVhcmx5LCBiZWZvcmUgd2UndmUgZXhw ZW5kZWQgdG9vCisgKiBtdWNoIGVmZm9ydCBvbiBjb21wYXJpbmcgdHVwbGVzIHRoYXQgY2Fubm90 IHBvc3NpYmx5IGJlIG1hdGNoZXMgZm9yIGFueSBzZXQKKyAqIG9mIGFycmF5IGtleXMuICBUaGlz IGlzIGp1c3QgYW4gb3B0aW1pemF0aW9uLgorICoKKyAqIEFkdmFuY2VzIHRoZSBjdXJyZW50IHNl dCBvZiBhcnJheSBrZXlzIGZvciBTS19TRUFSQ0hBUlJBWSBzY2FucyB3aGVyZQorICogYXBwcm9w cmlhdGUuICBUaGVzZSBjYWxsZXJzIGFyZSByZXF1aXJlZCB0byBpbml0aWFsaXplIHRoZSBwYWdl IGxldmVsIGhpZ2gKKyAqIGtleSBpbiBwc3RhdGUgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIGhlcmUg Zm9yIHRoZSBwYWdlICh3aGVuIHRoZSBzY2FuCisgKiBkaXJlY3Rpb24gaXMgZm9yd2FyZHMpLiAg Tm90ZSB0aGF0IHdlIHJlbHkgb24gX2J0X3JlYWRwYWdlIGNhbGxpbmcgaGVyZSBpbgorICogcGFn ZSBvZmZzZXQgbnVtYmVyIG9yZGVyIChmb3IgaXRzIHNjYW4gZGlyZWN0aW9uKS4gIEFueSBvdGhl ciBvcmRlciB3aWxsCisgKiBsZWFkIHRvIGluY29uc2lzdGVudCBhcnJheSBrZXkgc3RhdGUuCiAg KgogICogc2NhbjogaW5kZXggc2NhbiBkZXNjcmlwdG9yIChjb250YWluaW5nIGEgc2VhcmNoLXR5 cGUgc2NhbmtleSkKKyAqIHBzdGF0ZTogUGFnZSBsZXZlbCBpbnB1dCBhbmQgb3V0cHV0IHBhcmFt ZXRlcnMKICAqIHR1cGxlOiBpbmRleCB0dXBsZSB0byB0ZXN0Ci0gKiB0dXBuYXR0czogbnVtYmVy IG9mIGF0dHJpYnV0ZXMgaW4gdHVwbmF0dHMgKGhpZ2gga2V5IG1heSBiZSB0cnVuY2F0ZWQpCi0g KiBkaXI6IGRpcmVjdGlvbiB3ZSBhcmUgc2Nhbm5pbmcgaW4KLSAqIGNvbnRpbnVlc2Nhbjogb3V0 cHV0IHBhcmFtZXRlciAod2lsbCBiZSBzZXQgY29ycmVjdGx5IGluIGFsbCBjYXNlcykKKyAqIGZp bmFsdHVwOiBJcyB0dXBsZSB0aGUgZmluYWwgb25lIHdlJ2xsIGJlIGNhbGxlZCB3aXRoIGZvciB0 aGlzIHBhZ2U/CiAgKiByZXF1aXJlZE1hdGNoZWRCeVByZWNoZWNrOiBpbmRpY2F0ZXMgdGhhdCBz Y2FuIGtleXMgcmVxdWlyZWQgZm9yCiAgKiAJCQkJCQkJICBkaXJlY3Rpb24gc2NhbiBhcmUgYWxy ZWFkeSBtYXRjaGVkCiAgKi8KIGJvb2wKLV9idF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCi0JCQkgIFNjYW5EaXJlY3Rpb24gZGly LCBib29sICpjb250aW51ZXNjYW4sCitfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsCisJCQkgIEluZGV4VHVwbGUgdHVwbGUsIGJvb2wgZmlu YWx0dXAsCiAJCQkgIGJvb2wgcmVxdWlyZWRNYXRjaGVkQnlQcmVjaGVjaykKIHsKLQlUdXBsZURl c2MJdHVwZGVzYzsKLQlCVFNjYW5PcGFxdWUgc287Ci0JaW50CQkJa2V5c3o7CisJVHVwbGVEZXNj CXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHNjYW4tPmluZGV4UmVsYXRpb24pOworCWludAkJ CW5hdHRzID0gQlRyZWVUdXBsZUdldE5BdHRzKHR1cGxlLCBzY2FuLT5pbmRleFJlbGF0aW9uKTsK KwlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJYm9vbAkJ cmVzOworCWJvb2wJCXNrcmVxdWlyZWR0cmlnZ2VyOworCisJQXNzZXJ0KHBzdGF0ZS0+Y29udGlu dWVzY2FuKTsKKwlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOworCisJcmVzID0gX2J0X2NoZWNr X2NvbXBhcmUocHN0YXRlLT5kaXIsIHNvLCB0dXBsZSwgbmF0dHMsIHR1cGRlc2MsCisJCQkJCQkJ JnBzdGF0ZS0+Y29udGludWVzY2FuLCAmc2tyZXF1aXJlZHRyaWdnZXIsCisJCQkJCQkJcmVxdWly ZWRNYXRjaGVkQnlQcmVjaGVjayk7CisKKwkvKgorCSAqIE9ubHkgb25lIF9idF9jaGVja19jb21w YXJlIGNhbGwgaXMgcmVxdWlyZWQgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlCisJICogdGhlcmUg YXJlIG5vIGVxdWFsaXR5LXR5cGUgYXJyYXkgc2NhbiBrZXlzLgorCSAqCisJICogV2hlbiB0aGVy ZSBhcmUgYXJyYXkgc2NhbiBrZXlzIHRoZW4gd2UgY2FuIHN0aWxsIGFjY2VwdCB0aGUgZmlyc3QK KwkgKiBhbnN3ZXIgd2UgZ2V0IGZyb20gX2J0X2NoZWNrX2NvbXBhcmUgd2hlbiBjb250aW51ZXNj YW4gd2Fzbid0IHVuc2V0LgorCSAqLworCWlmICghc28tPm51bUFycmF5S2V5cyB8fCBwc3RhdGUt PmNvbnRpbnVlc2NhbikKKwkJcmV0dXJuIHJlczsKKworCS8qCisJICogX2J0X2NoZWNrX2NvbXBh cmUgc2V0IGNvbnRpbnVlc2Nhbj1mYWxzZSBpbiB0aGUgcHJlc2VuY2Ugb2YgZXF1YWxpdHkKKwkg KiB0eXBlIGFycmF5IGtleXMuICBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgaGF2ZW4ndCByZWFjaGVk IHRoZSBzdGFydCBvZgorCSAqIHRoZSBhcnJheSBrZXlzIGp1c3QgeWV0LiAgSXQncyBhbHNvIHBv c3NpYmxlIHRoYXQgd2UgbmVlZCB0byBhZHZhbmNlCisJICogdGhlIGFycmF5IGtleXMgbm93LiAg KE9yIHBlcmhhcHMgd2UgcmVhbGx5IGRvIG5lZWQgdG8gdGVybWluYXRlIHRoZQorCSAqIHRvcC1s ZXZlbCBzY2FuLikKKwkgKi8KKwlwc3RhdGUtPmNvbnRpbnVlc2NhbiA9IHRydWU7CS8qIG5ldyBp bml0aWFsIGFzc3VtcHRpb24gKi8KKworCWlmIChza3JlcXVpcmVkdHJpZ2dlciAmJiBfYnRfdHVw bGVfYmVmb3JlX2FycmF5X3NrZXlzKHNjYW4sIHBzdGF0ZSwgdHVwbGUpKQorCXsKKwkJLyoKKwkJ ICogVHVwbGUgaXMgc3RpbGwgPCB0aGUgY3VycmVudCBhcnJheSBzY2FuIGtleSB2YWx1ZXMgKGFz IHdlbGwgYXMKKwkJICogb3RoZXIgZXF1YWxpdHkgdHlwZSBzY2FuIGtleXMpIGlmIHRoaXMgaXMg YSBmb3J3YXJkIHNjYW4uCisJCSAqIChCYWNrd2FyZHMgc2NhbnMgcmVhY2ggaGVyZSB3aXRoIGEg dHVwbGUgPiBlcXVhbGl0eSBjb25zdHJhaW50cy4pCisJCSAqIFdlIG11c3Qgbm93IGNvbnNpZGVy IGhvdyB0byBwcm9jZWVkIHdpdGggdGhlIG9uZ29pbmcgcHJpbWl0aXZlCisJCSAqIGluZGV4IHNj YW4uCisJCSAqCisJCSAqIFNob3VsZCBfYnRfcmVhZHBhZ2UgY29udGludWUgd2l0aCB0aGlzIHBh Z2UgZm9yIG5vdywgaW4gdGhlIGhvcGUgb2YKKwkJICogZmluZGluZyB0dXBsZXMgd2hvc2Uga2V5 IHNwYWNlIGlzIGNvdmVyZWQgYnkgdGhlIGN1cnJlbnQgYXJyYXkga2V5cworCQkgKiBiZWZvcmUg dG9vIGxvbmc/ICBPciwgc2hvdWxkIGl0IGdpdmUgdXAgYW5kIHN0YXJ0IGEgbmV3IHByaW1pdGl2 ZQorCQkgKiBpbmRleCBzY2FuIGluc3RlYWQ/CisJCSAqCisJCSAqIE91ciBwb2xpY3kgaXMgdG8g dGVybWluYXRlIHRoZSBwcmltaXRpdmUgaW5kZXggc2NhbiBhdCB0aGUgZW5kIG9mCisJCSAqIHRo ZSBjdXJyZW50IHBhZ2UgaWYgdGhlIGN1cnJlbnQgKG1vc3QgcmVjZW50bHkgYWR2YW5jZWQpIGFy cmF5IGtleXMKKwkJICogZG9uJ3QgY292ZXIgdGhlIGZpbmFsIHR1cGxlIGZyb20gdGhlIHBhZ2Uu ICBUaGlzIHBvbGljeSBpcyBmYWlybHkKKwkJICogY29uc2VydmF0aXZlIG92ZXJhbGwuICBOb3Rl LCBob3dldmVyLCB0aGF0IG91ciBwb2xpY3kgZWZmZWN0aXZlbHkKKwkJICogaW5mZXJzIHdoYXQg dGhlIG5leHQgc2libGluZyBwYWdlIGlzIGxpa2VseSB0byBsb29rIGxpa2UgYmFzZWQgb24KKwkJ ICogZGV0YWlscyBmcm9tIHRoZSBjdXJyZW50IHBhZ2UgKGluIHBhcnRpY3VsYXIgaXRzIGZpbmFs IHR1cGxlKS4KKwkJICoKKwkJICogSXQncyBwb3NzaWJsZSB0aGF0IHdlJ2xsIGdhbWJsZSBhbmQg bG9zZTogYSBncm91cGluZyBvZiB0dXBsZXMKKwkJICogY292ZXJlZCBieSB0aGUgY3VycmVudCBh cnJheSBrZXlzIGNvdWxkIGJlIGFsaWduZWQgd2l0aCB0aGUga2V5CisJCSAqIHNwYWNlIGJvdW5k YXJpZXMgb2YgdGhlIGN1cnJlbnQgbGVhZiBwYWdlLCB3aXRob3V0IGFueSBsYXRlciBhcnJheQor CQkgKiBrZXlzIGhhdmluZyBrZXkgc3BhY2UgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoZSBuZXh0IHNp YmxpbmcgcGFnZS4KKwkJICovCisJCWlmIChmaW5hbHR1cCB8fCAoIXBzdGF0ZS0+ZmluYWx0dXBj aGVja2VkICYmIHBzdGF0ZS0+ZmluYWx0dXAgJiYKKwkJCQkJCSBfYnRfdHVwbGVfYmVmb3JlX2Fy cmF5X3NrZXlzKHNjYW4sIHBzdGF0ZSwKKwkJCQkJCQkJCQkJCQkgIHBzdGF0ZS0+ZmluYWx0dXAp KSkKKwkJeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgdGhlIGZpbmFsIHR1cGxlICh0aGUgaGlnaCBr ZXkgZm9yIGZvcndhcmQgc2NhbnMsIG9yIHRoZQorCQkJICogdHVwbGUgYXQgdGhlIGZpcnN0IG9m ZnNldCBudW1iZXIgZm9yIGJhY2t3YXJkIHNjYW5zKSwgYnV0IGl0IGlzCisJCQkgKiBzdGlsbCBi ZWZvcmUgdGhlIGN1cnJlbnQgYXJyYXkga2V5cy4gIEFzIHN1Y2gsIHdlJ3JlIHVud2lsbGluZwor CQkJICogdG8gYWxsb3cgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4gdG8gY29udGlu dWUgdG8gdGhlCisJCQkgKiBuZXh0IGxlYWYgcGFnZS4gIFN0YXJ0IGEgbmV3IHByaW1pdGl2ZSBp bmRleCBzY2FuIHRoYXQgd2lsbAorCQkJICogcmVwb3NpdGlvbiB0aGUgdG9wLWxldmVsIHNjYW4g dG8gdGhlIGZpcnN0IGxlYWYgcGFnZSB3aG9zZSBrZXkKKwkJCSAqIHNwYWNlIGlzIGNvdmVyZWQg Ynkgb3VyIF9jdXJyZW50XyBhcnJheSBrZXlzLiAgV2UgZXhwZWN0IHRoYXQKKwkJCSAqIHRoaXMg cHJvY2VzcyB3aWxsIGVmZmVjdGl2ZWx5IG1ha2UgdGhlIHNjYW4gInNraXAgb3ZlciIgYSBncm91 cAorCQkJICogb2YgbGVhZiBwYWdlcyB0aGF0IGNhbm5vdCBwb3NzaWJseSBjb250YWluIGFueSBt YXRjaGluZyB0dXBsZXMuCisJCQkgKgorCQkJICogTm90ZTogX2J0X3JlYWRwYWdlIHN0YXNoZXMg dGhlIGZpbmFsIHR1cGxlLCB3aGljaCBhbGxvd3MgdXMgdG8KKwkJCSAqIG1ha2UgdGhpcyBjaGVj ayBlYXJseS4gIFdlIHRoZXJlYnkgYXZvaWQgY29tcGFyaW5nIHZlcnkgbWFueQorCQkJICogZXh0 cmEgdHVwbGVzIG9uIHRoZSBwYWdlLiAgVGhpcyBpcyBqdXN0IGFuIG9wdGltaXphdGlvbjsKKwkJ CSAqIHNraXBwaW5nIHRoZXNlIHVzZWxlc3MgY29tcGFyaXNvbnMgc2hvdWxkIG5ldmVyIGNoYW5n ZSBvdXIKKwkJCSAqIGZpbmFsIGNvbmNsdXNpb24gYWJvdXQgd2hhdCB0aGUgc2NhbiBzaG91bGQg ZG8gbmV4dC4KKwkJCSAqLworCQkJcHN0YXRlLT5jb250aW51ZXNjYW4gPSBmYWxzZTsKKwkJCXNv LT5uZWVkUHJpbVNjYW4gPSB0cnVlOworCQl9CisJCWVsc2UgaWYgKCFmaW5hbHR1cCAmJiBwc3Rh dGUtPmZpbmFsdHVwKQorCQl7CisJCQkvKgorCQkJICogUmVtZW1iZXIgdGhhdCB0aGUgZmluYWwg dHVwbGUgaGFzIGJlZW4gY2hlY2tlZCB3aXRoIHRoaXMKKwkJCSAqIHBhcnRpY3VsYXIgc2V0IG9m IGFycmF5IGtleXMuCisJCQkgKgorCQkJICogSXQgbWlnaHQgbWFrZSBzZW5zZSB0byBjaGVjayB0 aGUgc2FtZSB0dXBsZSBhZ2FpbiBhdCBzb21lIHBvaW50CisJCQkgKiBkdXJpbmcgdGhlIG9uZ29p bmcgX2J0X3JlYWRwYWdlLXdpc2Ugc2NhbiBvZiB0aGlzIHBhZ2UuICBCdXQgaXQKKwkJCSAqIGlz IGRlZmluaXRlbHkgd2FzdGVmdWwgdG8gcmVwZWF0IHRoZSBzYW1lIGNoZWNrIGJlZm9yZSB0aGUK KwkJCSAqIGFycmF5IGtleXMgYXJlIGFkdmFuY2VkIGJ5IHNvbWUgbGF0ZXIgbm9uLWZpbmFsIHR1 cGxlLgorCQkJICovCisJCQlwc3RhdGUtPmZpbmFsdHVwY2hlY2tlZCA9IHRydWU7CisJCX0KKwor CQkvKgorCQkgKiBJbiBhbnkgY2FzZSwgdGhpcyBpbmRleHR1cGxlIGRvZXNuJ3QgbWF0Y2ggdGhl IHF1YWwKKwkJICovCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIENhbGxlcidzIHR1 cGxlIGlzID49IHRoZSBjdXJyZW50IHNldCBvZiBhcnJheSBrZXlzIGFuZCBvdGhlciBlcXVhbGl0 eQorCSAqIGNvbnN0cmFpbnQgc2NhbiBrZXlzIChvciA8PSBpZiB0aGlzIGlzIGEgYmFja3dhcmRz IHNjYW5zKS4KKwkgKgorCSAqIEl0IGl0IG5vdyB0aW1lIHRvIGFkdmFuY2UgdGhlIGFycmF5IGtl eXMgYmFzZWQgb24gdGhlIHZhbHVlcyBmcm9tIHRoaXMKKwkgKiB0dXBsZS4gIERvIHRoYXQgbm93 LCB3aGlsZSBkZXRlcm1pbmluZyBpbiBwYXNzaW5nIGlmIHRoZSB0dXBsZSBtYXRjaGVzCisJICog dGhlIG5ld2x5IGFkdmFuY2VkIHNldCBvZiBhcnJheSBrZXlzIChpZiB3ZSd2ZSBhbnkgbGVmdCku CisJICoKKwkgKiBUaGlzIGNhbGwgd2lsbCBhbHNvIHNldCBjb250aW51ZXNjYW4gZm9yIHVzIChv ciB0ZWxscyB1cyB0byBwZXJmb3JtCisJICogYW5vdGhlciBfYnRfY2hlY2tfY29tcGFyZSBjYWxs LCB3aGljaCB0aGVuIHNldHMgY29udGludWVzY2FuIGZvciB1cykuCisJICovCisJaWYgKCFfYnRf YWR2YW5jZV9hcnJheV9rZXlzKHNjYW4sIHBzdGF0ZSwgdHVwbGUsIHNrcmVxdWlyZWR0cmlnZ2Vy KSkKKwl7CisJCS8qCisJCSAqIFR1cGxlIGRvZXNuJ3QgbWF0Y2ggYW55IGxhdGVyIGFycmF5IGtl eXMsIGVpdGhlci4gIEdpdmUgdXAgb24gdGhpcworCQkgKiB0dXBsZSBiZWluZyBhIG1hdGNoLgor CQkgKi8KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogQWR2YW5jZWQgYXJyYXkga2V5 cyB0byB2YWx1ZXMgdGhhdCBhcmUgZXhhY3QgbWF0Y2hlcyBmb3IgY29ycmVzcG9uZGluZworCSAq IGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSB0aGUgdHVwbGUuICBDaGVjayBiYWNrIHdpdGggX2J0X2No ZWNrX2NvbXBhcmUuCisJICovCisJcmV0dXJuIF9idF9jaGVja19jb21wYXJlKHBzdGF0ZS0+ZGly LCBzbywgdHVwbGUsIG5hdHRzLCB0dXBkZXNjLAorCQkJCQkJCSAmcHN0YXRlLT5jb250aW51ZXNj YW4sICZza3JlcXVpcmVkdHJpZ2dlciwKKwkJCQkJCQkgZmFsc2UpOworfQorCisvKgorICogVGVz dCB3aGV0aGVyIGFuIGluZGV4dHVwbGUgc2F0aXNmaWVzIGN1cnJlbnQgc2NhbiBjb25kaXRpb24u CisgKgorICogUmV0dXJuIHRydWUgaWYgc28sIGZhbHNlIGlmIG5vdC4gIElmIG5vdCwgYWxzbyBj bGVhciAqY29udGludWVzY2FuIGlmCisgKiBpdCdzIG5vdCBwb3NzaWJsZSBmb3IgYW55IGZ1dHVy ZSB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gdG8KKyAqIHBhc3MgdGhlIHF1 YWwgd2l0aCB0aGUgY3VycmVudCBzZXQgb2YgYXJyYXkga2V5cy4KKyAqCisgKiBUaGlzIGlzIGEg c3Vicm91dGluZSBmb3IgX2J0X2NoZWNra2V5cy4gIEl0IGlzIHdyaXR0ZW4gd2l0aCB0aGUgYXNz dW1wdGlvbgorICogdGhhdCByZWFjaGluZyB0aGUgZW5kIG9mIGVhY2ggZGlzdGluY3Qgc2V0IG9m IGFycmF5IGtleXMgdGVybWluYXRlcyB0aGUKKyAqIG9uZ29pbmcgcHJpbWl0aXZlIGluZGV4IHNj YW4uICBJdCBpcyB1cCB0byBvdXIgY2FsbGVyICh0aGF0IGhhcyBtb3JlCisgKiBjb250ZXh0IHRo YW4gd2UgaGF2ZSBhdmFpbGFibGUgaGVyZSkgdG8gb3ZlcnJpZGUgdGhhdCBpbml0aWFsIGRldGVy bWluYXRpb24KKyAqIHdoZW4gaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBhZHZhbmNlIHRoZSBhcnJh eSBrZXlzIGFuZCBjb250aW51ZSB3aXRoCisgKiBmdXJ0aGVyIHR1cGxlcyBmcm9tIHRoZSBzYW1l IGxlYWYgcGFnZS4KKyAqLworc3RhdGljIGJvb2wKK19idF9jaGVja19jb21wYXJlKFNjYW5EaXJl Y3Rpb24gZGlyLCBCVFNjYW5PcGFxdWUgc28sCisJCQkJICBJbmRleFR1cGxlIHR1cGxlLCBpbnQg dHVwbmF0dHMsIFR1cGxlRGVzYyB0dXBkZXNjLAorCQkJCSAgYm9vbCAqY29udGludWVzY2FuLCBi b29sICpza3JlcXVpcmVkdHJpZ2dlciwKKwkJCQkgIGJvb2wgcmVxdWlyZWRNYXRjaGVkQnlQcmVj aGVjaykKK3sKIAlpbnQJCQlpa2V5OwogCVNjYW5LZXkJCWtleTsKIAotCUFzc2VydChCVHJlZVR1 cGxlR2V0TkF0dHModHVwbGUsIHNjYW4tPmluZGV4UmVsYXRpb24pID09IHR1cG5hdHRzKTsKKwlB c3NlcnQoIXNvLT5udW1BcnJheUtleXMgfHwgIXJlcXVpcmVkTWF0Y2hlZEJ5UHJlY2hlY2spOwog CiAJKmNvbnRpbnVlc2NhbiA9IHRydWU7CQkvKiBkZWZhdWx0IGFzc3VtcHRpb24gKi8KKwkqc2ty ZXF1aXJlZHRyaWdnZXIgPSB0cnVlOwkvKiBkZWZhdWx0IGFzc3VtcHRpb24gKi8KIAotCXR1cGRl c2MgPSBSZWxhdGlvbkdldERlc2NyKHNjYW4tPmluZGV4UmVsYXRpb24pOwotCXNvID0gKEJUU2Nh bk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWtleXN6ID0gc28tPm51bWJlck9mS2V5czsKLQotCWZv ciAoa2V5ID0gc28tPmtleURhdGEsIGlrZXkgPSAwOyBpa2V5IDwga2V5c3o7IGtleSsrLCBpa2V5 KyspCisJZm9yIChrZXkgPSBzby0+a2V5RGF0YSwgaWtleSA9IDA7IGlrZXkgPCBzby0+bnVtYmVy T2ZLZXlzOyBrZXkrKywgaWtleSsrKQogCXsKIAkJRGF0dW0JCWRhdHVtOwogCQlib29sCQlpc051 bGw7CkBAIC0xNTI2LDcgKzI4NDQsNyBAQCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzLAogCQkgKiBfYnRfZmlyc3QoKSBleGNl cHQgZm9yIHRoZSBOVUxMcyBjaGVja2luZywgd2hpY2ggaGF2ZSBhbHJlYWR5IGRvbmUKIAkJICog YWJvdmUuCiAJCSAqLwotCQlpZiAoIXJlcXVpcmVkT3Bwb3NpdGVEaXIpCisJCWlmICghcmVxdWly ZWRPcHBvc2l0ZURpciB8fCBzby0+bnVtQXJyYXlLZXlzKQogCQl7CiAJCQl0ZXN0ID0gRnVuY3Rp b25DYWxsMkNvbGwoJmtleS0+c2tfZnVuYywga2V5LT5za19jb2xsYXRpb24sCiAJCQkJCQkJCQkg ZGF0dW0sIGtleS0+c2tfYXJndW1lbnQpOwpAQCAtMTU0OSwxMCArMjg2NywyMiBAQCBfYnRfY2hl Y2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRz LAogCQkJICogcXVhbCBmYWlscywgaXQgaXMgY3JpdGljYWwgdGhhdCBlcXVhbGl0eSBxdWFscyBi ZSB1c2VkIGZvciB0aGUKIAkJCSAqIGluaXRpYWwgcG9zaXRpb25pbmcgaW4gX2J0X2ZpcnN0KCkg d2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuIFNlZQogCQkJICogY29tbWVudHMgaW4gX2J0X2ZpcnN0 KCkuCisJCQkgKgorCQkJICogU2NhbnMgd2l0aCBlcXVhbGl0eS10eXBlIGFycmF5IHNjYW4ga2V5 cyBydW4gaW50byBhIHNpbWlsYXIKKwkJCSAqIHByb2JsZW0gd2hlbmV2ZXIgdGhleSBhZHZhbmNl IHRoZSBhcnJheSBrZXlzLiAgT3VyIGNhbGxlciB1c2VzCisJCQkgKiBfYnRfdHVwbGVfYmVmb3Jl X2FycmF5X3NrZXlzIHRvIGF2b2lkIHRoZSBwcm9ibGVtIHRoZXJlLgogCQkJICovCiAJCQlpZiAo cmVxdWlyZWRTYW1lRGlyKQogCQkJCSpjb250aW51ZXNjYW4gPSBmYWxzZTsKIAorCQkJaWYgKChr ZXktPnNrX2ZsYWdzICYgU0tfU0VBUkNIQVJSQVkpICYmCisJCQkJa2V5LT5za19zdHJhdGVneSA9 PSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIpCisJCQl7CisJCQkJaWYgKCFyZXF1aXJlZFNhbWVEaXIp CisJCQkJCSpza3JlcXVpcmVkdHJpZ2dlciA9IGZhbHNlOworCQkJCSpjb250aW51ZXNjYW4gPSBm YWxzZTsKKwkJCX0KKwogCQkJLyoKIAkJCSAqIEluIGFueSBjYXNlLCB0aGlzIGluZGV4dHVwbGUg ZG9lc24ndCBtYXRjaCB0aGUgcXVhbC4KIAkJCSAqLwpAQCAtMTU3MSw3ICsyOTAxLDcgQEAgX2J0 X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBu YXR0cywKICAqIGl0J3Mgbm90IHBvc3NpYmxlIGZvciBhbnkgZnV0dXJlIHR1cGxlcyBpbiB0aGUg Y3VycmVudCBzY2FuIGRpcmVjdGlvbgogICogdG8gcGFzcyB0aGUgcXVhbC4KICAqCi0gKiBUaGlz IGlzIGEgc3Vicm91dGluZSBmb3IgX2J0X2NoZWNra2V5cywgd2hpY2ggc2VlIGZvciBtb3JlIGlu Zm8uCisgKiBUaGlzIGlzIGEgc3Vicm91dGluZSBmb3IgX2J0X2NoZWNra2V5cy9fYnRfY2hlY2tf Y29tcGFyZS4KICAqLwogc3RhdGljIGJvb2wKIF9idF9jaGVja19yb3djb21wYXJlKFNjYW5LZXkg c2tleSwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2luZHhwYXRoLmMKaW5kZXggMDNhNWZiZGM2Li5lMzc1OTdjMjYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtMTA2LDggKzEwNiw3IEBAIHN0YXRpYyBMaXN0ICpi dWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJ CQkJCSAgIEluZGV4T3B0SW5mbyAqaW5kZXgsIEluZGV4Q2xhdXNlU2V0ICpjbGF1c2VzLAogCQkJ CQkJCSAgIGJvb2wgdXNlZnVsX3ByZWRpY2F0ZSwKIAkJCQkJCQkgICBTY2FuVHlwZUNvbnRyb2wg c2NhbnR5cGUsCi0JCQkJCQkJICAgYm9vbCAqc2tpcF9ub25uYXRpdmVfc2FvcCwKLQkJCQkJCQkg ICBib29sICpza2lwX2xvd2VyX3Nhb3ApOworCQkJCQkJCSAgIGJvb2wgKnNraXBfbm9ubmF0aXZl X3Nhb3ApOwogc3RhdGljIExpc3QgKmJ1aWxkX3BhdGhzX2Zvcl9PUihQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQlMaXN0ICpjbGF1c2VzLCBMaXN0ICpvdGhlcl9j bGF1c2VzKTsKIHN0YXRpYyBMaXN0ICpnZW5lcmF0ZV9iaXRtYXBfb3JfcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKQEAgLTcwNiw4ICs3MDUsNiBAQCBlY2xhc3NfYWxy ZWFkeV91c2VkKEVxdWl2YWxlbmNlQ2xhc3MgKnBhcmVudF9lYywgUmVsaWRzIG9sZHJlbGlkcywK ICAqIGluZGV4IEFNIHN1cHBvcnRzIHRoZW0gbmF0aXZlbHksIHdlIHNob3VsZCBqdXN0IGluY2x1 ZGUgdGhlbSBpbiBzaW1wbGUKICAqIGluZGV4IHBhdGhzLiAgSWYgbm90LCB3ZSBzaG91bGQgZXhj bHVkZSB0aGVtIHdoaWxlIGJ1aWxkaW5nIHNpbXBsZSBpbmRleAogICogcGF0aHMsIGFuZCB0aGVu IG1ha2UgYSBzZXBhcmF0ZSBhdHRlbXB0IHRvIGluY2x1ZGUgdGhlbSBpbiBiaXRtYXAgcGF0aHMu Ci0gKiBGdXJ0aGVybW9yZSwgd2Ugc2hvdWxkIGNvbnNpZGVyIGV4Y2x1ZGluZyBsb3dlci1vcmRl ciBTY2FsYXJBcnJheU9wRXhwcgotICogcXVhbHMgc28gYXMgdG8gY3JlYXRlIG9yZGVyZWQgcGF0 aHMuCiAgKi8KIHN0YXRpYyB2b2lkCiBnZXRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCwKQEAgLTcxNiwzNyArNzEzLDE3IEBAIGdldF9pbmRleF9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogewogCUxpc3QJICAgKmluZGV4cGF0 aHM7CiAJYm9vbAkJc2tpcF9ub25uYXRpdmVfc2FvcCA9IGZhbHNlOwotCWJvb2wJCXNraXBfbG93 ZXJfc2FvcCA9IGZhbHNlOwogCUxpc3RDZWxsICAgKmxjOwogCiAJLyoKIAkgKiBCdWlsZCBzaW1w bGUgaW5kZXggcGF0aHMgdXNpbmcgdGhlIGNsYXVzZXMuICBBbGxvdyBTY2FsYXJBcnJheU9wRXhw cgotCSAqIGNsYXVzZXMgb25seSBpZiB0aGUgaW5kZXggQU0gc3VwcG9ydHMgdGhlbSBuYXRpdmVs eSwgYW5kIHNraXAgYW55IHN1Y2gKLQkgKiBjbGF1c2VzIGZvciBpbmRleCBjb2x1bW5zIGFmdGVy IHRoZSBmaXJzdCAoc28gdGhhdCB3ZSBwcm9kdWNlIG9yZGVyZWQKLQkgKiBwYXRocyBpZiBwb3Nz aWJsZSkuCisJICogY2xhdXNlcyBvbmx5IGlmIHRoZSBpbmRleCBBTSBzdXBwb3J0cyB0aGVtIG5h dGl2ZWx5LgogCSAqLwogCWluZGV4cGF0aHMgPSBidWlsZF9pbmRleF9wYXRocyhyb290LCByZWws CiAJCQkJCQkJCSAgIGluZGV4LCBjbGF1c2VzLAogCQkJCQkJCQkgICBpbmRleC0+cHJlZE9LLAog CQkJCQkJCQkgICBTVF9BTllTQ0FOLAotCQkJCQkJCQkgICAmc2tpcF9ub25uYXRpdmVfc2FvcCwK LQkJCQkJCQkJICAgJnNraXBfbG93ZXJfc2FvcCk7Ci0KLQkvKgotCSAqIElmIHdlIHNraXBwZWQg YW55IGxvd2VyLW9yZGVyIFNjYWxhckFycmF5T3BFeHBycyBvbiBhbiBpbmRleCB3aXRoIGFuIEFN Ci0JICogdGhhdCBzdXBwb3J0cyB0aGVtLCB0aGVuIHRyeSBhZ2FpbiBpbmNsdWRpbmcgdGhvc2Ug Y2xhdXNlcy4gIFRoaXMgd2lsbAotCSAqIHByb2R1Y2UgcGF0aHMgd2l0aCBtb3JlIHNlbGVjdGl2 aXR5IGJ1dCBubyBvcmRlcmluZy4KLQkgKi8KLQlpZiAoc2tpcF9sb3dlcl9zYW9wKQotCXsKLQkJ aW5kZXhwYXRocyA9IGxpc3RfY29uY2F0KGluZGV4cGF0aHMsCi0JCQkJCQkJCSBidWlsZF9pbmRl eF9wYXRocyhyb290LCByZWwsCi0JCQkJCQkJCQkJCQkgICBpbmRleCwgY2xhdXNlcywKLQkJCQkJ CQkJCQkJCSAgIGluZGV4LT5wcmVkT0ssCi0JCQkJCQkJCQkJCQkgICBTVF9BTllTQ0FOLAotCQkJ CQkJCQkJCQkJICAgJnNraXBfbm9ubmF0aXZlX3Nhb3AsCi0JCQkJCQkJCQkJCQkgICBOVUxMKSk7 Ci0JfQorCQkJCQkJCQkgICAmc2tpcF9ub25uYXRpdmVfc2FvcCk7CiAKIAkvKgogCSAqIFN1Ym1p dCBhbGwgdGhlIG9uZXMgdGhhdCBjYW4gZm9ybSBwbGFpbiBJbmRleFNjYW4gcGxhbnMgdG8gYWRk X3BhdGguIChBCkBAIC03ODQsNyArNzYxLDYgQEAgZ2V0X2luZGV4X3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkgICBpbmRleCwgY2xhdXNlcywKIAkJ CQkJCQkJCSAgIGZhbHNlLAogCQkJCQkJCQkJICAgU1RfQklUTUFQU0NBTiwKLQkJCQkJCQkJCSAg IE5VTEwsCiAJCQkJCQkJCQkgICBOVUxMKTsKIAkJKmJpdGluZGV4cGF0aHMgPSBsaXN0X2NvbmNh dCgqYml0aW5kZXhwYXRocywgaW5kZXhwYXRocyk7CiAJfQpAQCAtODE3LDI3ICs3OTMsMTkgQEAg Z2V0X2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAgKiB0 byB0cnVlIGlmIHdlIGZvdW5kIGFueSBzdWNoIGNsYXVzZXMgKGNhbGxlciBtdXN0IGluaXRpYWxp emUgdGhlIHZhcmlhYmxlCiAgKiB0byBmYWxzZSkuICBJZiBpdCdzIE5VTEwsIHdlIGRvIG5vdCBp Z25vcmUgU2NhbGFyQXJyYXlPcEV4cHIgY2xhdXNlcy4KICAqCi0gKiBJZiBza2lwX2xvd2VyX3Nh b3AgaXMgbm9uLU5VTEwsIHdlIGlnbm9yZSBTY2FsYXJBcnJheU9wRXhwciBjbGF1c2VzIGZvcgot ICogbm9uLWZpcnN0IGluZGV4IGNvbHVtbnMsIGFuZCB3ZSBzZXQgKnNraXBfbG93ZXJfc2FvcCB0 byB0cnVlIGlmIHdlIGZvdW5kCi0gKiBhbnkgc3VjaCBjbGF1c2VzIChjYWxsZXIgbXVzdCBpbml0 aWFsaXplIHRoZSB2YXJpYWJsZSB0byBmYWxzZSkuICBJZiBpdCdzCi0gKiBOVUxMLCB3ZSBkbyBu b3QgaWdub3JlIG5vbi1maXJzdCBTY2FsYXJBcnJheU9wRXhwciBjbGF1c2VzLCBidXQgdGhleSB3 aWxsCi0gKiByZXN1bHQgaW4gY29uc2lkZXJpbmcgdGhlIHNjYW4ncyBvdXRwdXQgdG8gYmUgdW5v cmRlcmVkLgotICoKICAqICdyZWwnIGlzIHRoZSBpbmRleCdzIGhlYXAgcmVsYXRpb24KICAqICdp bmRleCcgaXMgdGhlIGluZGV4IGZvciB3aGljaCB3ZSB3YW50IHRvIGdlbmVyYXRlIHBhdGhzCiAg KiAnY2xhdXNlcycgaXMgdGhlIGNvbGxlY3Rpb24gb2YgaW5kZXhhYmxlIGNsYXVzZXMgKEluZGV4 Q2xhdXNlIG5vZGVzKQogICogJ3VzZWZ1bF9wcmVkaWNhdGUnIGluZGljYXRlcyB3aGV0aGVyIHRo ZSBpbmRleCBoYXMgYSB1c2VmdWwgcHJlZGljYXRlCiAgKiAnc2NhbnR5cGUnIGluZGljYXRlcyB3 aGV0aGVyIHdlIG5lZWQgcGxhaW4gb3IgYml0bWFwIHNjYW4gc3VwcG9ydAogICogJ3NraXBfbm9u bmF0aXZlX3Nhb3AnIGluZGljYXRlcyB3aGV0aGVyIHRvIGFjY2VwdCBTQU9QIGlmIGluZGV4IEFN IGRvZXNuJ3QKLSAqICdza2lwX2xvd2VyX3Nhb3AnIGluZGljYXRlcyB3aGV0aGVyIHRvIGFjY2Vw dCBub24tZmlyc3QtY29sdW1uIFNBT1AKICAqLwogc3RhdGljIExpc3QgKgogYnVpbGRfaW5kZXhf cGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkgIEluZGV4T3B0 SW5mbyAqaW5kZXgsIEluZGV4Q2xhdXNlU2V0ICpjbGF1c2VzLAogCQkJCSAgYm9vbCB1c2VmdWxf cHJlZGljYXRlLAogCQkJCSAgU2NhblR5cGVDb250cm9sIHNjYW50eXBlLAotCQkJCSAgYm9vbCAq c2tpcF9ub25uYXRpdmVfc2FvcCwKLQkJCQkgIGJvb2wgKnNraXBfbG93ZXJfc2FvcCkKKwkJCQkg IGJvb2wgKnNraXBfbm9ubmF0aXZlX3Nhb3ApCiB7CiAJTGlzdAkgICAqcmVzdWx0ID0gTklMOwog CUluZGV4UGF0aCAgKmlwYXRoOwpAQCAtODQ4LDcgKzgxNiw2IEBAIGJ1aWxkX2luZGV4X3BhdGhz KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJTGlzdAkgICAqb3JkZXJieWNs YXVzZWNvbHM7CiAJTGlzdAkgICAqaW5kZXhfcGF0aGtleXM7CiAJTGlzdAkgICAqdXNlZnVsX3Bh dGhrZXlzOwotCWJvb2wJCWZvdW5kX2xvd2VyX3Nhb3BfY2xhdXNlOwogCWJvb2wJCXBhdGhrZXlz X3Bvc3NpYmx5X3VzZWZ1bDsKIAlib29sCQlpbmRleF9pc19vcmRlcmVkOwogCWJvb2wJCWluZGV4 X29ubHlfc2NhbjsKQEAgLTg4MCwxOSArODQ3LDExIEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJICogb24gYnkgYnRyZWUgYW5kIHBvc3Np Ymx5IG90aGVyIHBsYWNlcy4pICBUaGUgbGlzdCBjYW4gYmUgZW1wdHksIGlmIHRoZQogCSAqIGlu ZGV4IEFNIGFsbG93cyB0aGF0LgogCSAqCi0JICogZm91bmRfbG93ZXJfc2FvcF9jbGF1c2UgaXMg c2V0IHRydWUgaWYgd2UgYWNjZXB0IGEgU2NhbGFyQXJyYXlPcEV4cHIKLQkgKiBpbmRleCBjbGF1 c2UgZm9yIGEgbm9uLWZpcnN0IGluZGV4IGNvbHVtbi4gIFRoaXMgcHJldmVudHMgdXMgZnJvbQot CSAqIGFzc3VtaW5nIHRoYXQgdGhlIHNjYW4gcmVzdWx0IGlzIG9yZGVyZWQuICAoQWN0dWFsbHks IHRoZSByZXN1bHQgaXMKLQkgKiBzdGlsbCBvcmRlcmVkIGlmIHRoZXJlIGFyZSBlcXVhbGl0eSBj b25zdHJhaW50cyBmb3IgYWxsIGVhcmxpZXIKLQkgKiBjb2x1bW5zLCBidXQgaXQgc2VlbXMgdG9v IGV4cGVuc2l2ZSBhbmQgbm9uLW1vZHVsYXIgZm9yIHRoaXMgY29kZSB0byBiZQotCSAqIGF3YXJl IG9mIHRoYXQgcmVmaW5lbWVudC4pCi0JICoKIAkgKiBXZSBhbHNvIGJ1aWxkIGEgUmVsaWRzIHNl dCBzaG93aW5nIHdoaWNoIG91dGVyIHJlbHMgYXJlIHJlcXVpcmVkIGJ5IHRoZQogCSAqIHNlbGVj dGVkIGNsYXVzZXMuICBBbnkgbGF0ZXJhbF9yZWxpZHMgYXJlIGluY2x1ZGVkIGluIHRoYXQsIGJ1 dCBub3QKIAkgKiBvdGhlcndpc2UgYWNjb3VudGVkIGZvci4KIAkgKi8KIAlpbmRleF9jbGF1c2Vz ID0gTklMOwotCWZvdW5kX2xvd2VyX3Nhb3BfY2xhdXNlID0gZmFsc2U7CiAJb3V0ZXJfcmVsaWRz ID0gYm1zX2NvcHkocmVsLT5sYXRlcmFsX3JlbGlkcyk7CiAJZm9yIChpbmRleGNvbCA9IDA7IGlu ZGV4Y29sIDwgaW5kZXgtPm5rZXljb2x1bW5zOyBpbmRleGNvbCsrKQogCXsKQEAgLTkwMywzMCAr ODYyLDIwIEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAJCQlJbmRleENsYXVzZSAqaWNsYXVzZSA9IChJbmRleENsYXVzZSAqKSBsZmlyc3Qo bGMpOwogCQkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IGljbGF1c2UtPnJpbmZvOwogCi0JCQkvKiBX ZSBtaWdodCBuZWVkIHRvIG9taXQgU2NhbGFyQXJyYXlPcEV4cHIgY2xhdXNlcyAqLwotCQkJaWYg KElzQShyaW5mby0+Y2xhdXNlLCBTY2FsYXJBcnJheU9wRXhwcikpCisJCQkvKgorCQkJICogV2Ug bWlnaHQgbmVlZCB0byBvbWl0IFNjYWxhckFycmF5T3BFeHByIGNsYXVzZXMgd2hlbiBpbmRleCBB TQorCQkJICogbGFja3MgbmF0aXZlIHN1cHBvcnQKKwkJCSAqLworCQkJaWYgKCFpbmRleC0+YW1z ZWFyY2hhcnJheSAmJiBJc0EocmluZm8tPmNsYXVzZSwgU2NhbGFyQXJyYXlPcEV4cHIpKQogCQkJ ewotCQkJCWlmICghaW5kZXgtPmFtc2VhcmNoYXJyYXkpCisJCQkJaWYgKHNraXBfbm9ubmF0aXZl X3Nhb3ApCiAJCQkJewotCQkJCQlpZiAoc2tpcF9ub25uYXRpdmVfc2FvcCkKLQkJCQkJewotCQkJ CQkJLyogSWdub3JlIGJlY2F1c2Ugbm90IHN1cHBvcnRlZCBieSBpbmRleCAqLwotCQkJCQkJKnNr aXBfbm9ubmF0aXZlX3Nhb3AgPSB0cnVlOwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJ LyogQ2FsbGVyIGhhZCBiZXR0ZXIgaW50ZW5kIHRoaXMgb25seSBmb3IgYml0bWFwIHNjYW4gKi8K LQkJCQkJQXNzZXJ0KHNjYW50eXBlID09IFNUX0JJVE1BUFNDQU4pOwotCQkJCX0KLQkJCQlpZiAo aW5kZXhjb2wgPiAwKQotCQkJCXsKLQkJCQkJaWYgKHNraXBfbG93ZXJfc2FvcCkKLQkJCQkJewot CQkJCQkJLyogQ2FsbGVyIGRvZXNuJ3Qgd2FudCB0byBsb3NlIGluZGV4IG9yZGVyaW5nICovCi0J CQkJCQkqc2tpcF9sb3dlcl9zYW9wID0gdHJ1ZTsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0J CQkJCWZvdW5kX2xvd2VyX3Nhb3BfY2xhdXNlID0gdHJ1ZTsKKwkJCQkJLyogSWdub3JlIGJlY2F1 c2Ugbm90IHN1cHBvcnRlZCBieSBpbmRleCAqLworCQkJCQkqc2tpcF9ub25uYXRpdmVfc2FvcCA9 IHRydWU7CisJCQkJCWNvbnRpbnVlOwogCQkJCX0KKwkJCQkvKiBDYWxsZXIgaGFkIGJldHRlciBp bnRlbmQgdGhpcyBvbmx5IGZvciBiaXRtYXAgc2NhbiAqLworCQkJCUFzc2VydChzY2FudHlwZSA9 PSBTVF9CSVRNQVBTQ0FOKTsKIAkJCX0KIAogCQkJLyogT0sgdG8gaW5jbHVkZSB0aGlzIGNsYXVz ZSAqLwpAQCAtOTU2LDExICs5MDUsOSBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCS8qCiAJICogMi4gQ29tcHV0ZSBwYXRoa2V5cyBkZXNj cmliaW5nIGluZGV4J3Mgb3JkZXJpbmcsIGlmIGFueSwgdGhlbiBzZWUgaG93CiAJICogbWFueSBv ZiB0aGVtIGFyZSBhY3R1YWxseSB1c2VmdWwgZm9yIHRoaXMgcXVlcnkuICBUaGlzIGlzIG5vdCBy ZWxldmFudAotCSAqIGlmIHdlIGFyZSBvbmx5IHRyeWluZyB0byBidWlsZCBiaXRtYXAgaW5kZXhz Y2Fucywgbm9yIGlmIHdlIGhhdmUgdG8KLQkgKiBhc3N1bWUgdGhlIHNjYW4gaXMgdW5vcmRlcmVk LgorCSAqIGlmIHdlIGFyZSBvbmx5IHRyeWluZyB0byBidWlsZCBiaXRtYXAgaW5kZXhzY2Fucy4K IAkgKi8KIAlwYXRoa2V5c19wb3NzaWJseV91c2VmdWwgPSAoc2NhbnR5cGUgIT0gU1RfQklUTUFQ U0NBTiAmJgotCQkJCQkJCQkhZm91bmRfbG93ZXJfc2FvcF9jbGF1c2UgJiYKIAkJCQkJCQkJaGFz X3VzZWZ1bF9wYXRoa2V5cyhyb290LCByZWwpKTsKIAlpbmRleF9pc19vcmRlcmVkID0gKGluZGV4 LT5zb3J0b3BmYW1pbHkgIT0gTlVMTCk7CiAJaWYgKGluZGV4X2lzX29yZGVyZWQgJiYgcGF0aGtl eXNfcG9zc2libHlfdXNlZnVsKQpAQCAtMTIxMiw3ICsxMTU5LDYgQEAgYnVpbGRfcGF0aHNfZm9y X09SKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkgICBpbmRl eCwgJmNsYXVzZXNldCwKIAkJCQkJCQkJCSAgIHVzZWZ1bF9wcmVkaWNhdGUsCiAJCQkJCQkJCQkg ICBTVF9CSVRNQVBTQ0FOLAotCQkJCQkJCQkJICAgTlVMTCwKIAkJCQkJCQkJCSAgIE5VTEwpOwog CQlyZXN1bHQgPSBsaXN0X2NvbmNhdChyZXN1bHQsIGluZGV4cGF0aHMpOwogCX0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3NlbGZ1bmNzLmMKaW5kZXggYzRmY2QwMDc2Li4xYjg5OWIyZGIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9zZWxmdW5jcy5jCkBAIC02NDQ0LDggKzY0NDQsNiBAQCBnZW5lcmljY29zdGVzdGltYXRlKFBs YW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJbnVtSW5kZXhUdXBsZXM7CiAJZG91YmxlCQlzcGNf cmFuZG9tX3BhZ2VfY29zdDsKIAlkb3VibGUJCW51bV9zYV9zY2FuczsKLQlkb3VibGUJCW51bV9v dXRlcl9zY2FuczsKLQlkb3VibGUJCW51bV9zY2FuczsKIAlkb3VibGUJCXF1YWxfb3BfY29zdDsK IAlkb3VibGUJCXF1YWxfYXJnX2Nvc3Q7CiAJTGlzdAkgICAqc2VsZWN0aXZpdHlRdWFsczsKQEAg LTY0NjAsNyArNjQ1OCw3IEBAIGdlbmVyaWNjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3Qs CiAKIAkvKgogCSAqIENoZWNrIGZvciBTY2FsYXJBcnJheU9wRXhwciBpbmRleCBxdWFscywgYW5k IGVzdGltYXRlIHRoZSBudW1iZXIgb2YKLQkgKiBpbmRleCBzY2FucyB0aGF0IHdpbGwgYmUgcGVy Zm9ybWVkLgorCSAqIHByaW1pdGl2ZSBpbmRleCBzY2FucyB0aGF0IHdpbGwgYmUgcGVyZm9ybWVk IGZvciBjYWxsZXIKIAkgKi8KIAludW1fc2Ffc2NhbnMgPSAxOwogCWZvcmVhY2gobCwgaW5kZXhR dWFscykKQEAgLTY0OTAsMTkgKzY0ODgsOCBAQCBnZW5lcmljY29zdGVzdGltYXRlKFBsYW5uZXJJ bmZvICpyb290LAogCSAqLwogCW51bUluZGV4VHVwbGVzID0gY29zdHMtPm51bUluZGV4VHVwbGVz OwogCWlmIChudW1JbmRleFR1cGxlcyA8PSAwLjApCi0JewogCQludW1JbmRleFR1cGxlcyA9IGlu ZGV4U2VsZWN0aXZpdHkgKiBpbmRleC0+cmVsLT50dXBsZXM7CiAKLQkJLyoKLQkJICogVGhlIGFi b3ZlIGNhbGN1bGF0aW9uIGNvdW50cyBhbGwgdGhlIHR1cGxlcyB2aXNpdGVkIGFjcm9zcyBhbGwK LQkJICogc2NhbnMgaW5kdWNlZCBieSBTY2FsYXJBcnJheU9wRXhwciBub2Rlcy4gIFdlIHdhbnQg dG8gY29uc2lkZXIgdGhlCi0JCSAqIGF2ZXJhZ2UgcGVyLWluZGV4c2NhbiBudW1iZXIsIHNvIGFk anVzdC4gIFRoaXMgaXMgYSBoYW5keSBwbGFjZSB0bwotCQkgKiByb3VuZCB0byBpbnRlZ2VyLCB0 b28uICAoSWYgY2FsbGVyIHN1cHBsaWVkIHR1cGxlIGVzdGltYXRlLCBpdCdzCi0JCSAqIHJlc3Bv bnNpYmxlIGZvciBoYW5kbGluZyB0aGVzZSBjb25zaWRlcmF0aW9ucy4pCi0JCSAqLwotCQludW1J bmRleFR1cGxlcyA9IHJpbnQobnVtSW5kZXhUdXBsZXMgLyBudW1fc2Ffc2NhbnMpOwotCX0KLQog CS8qCiAJICogV2UgY2FuIGJvdW5kIHRoZSBudW1iZXIgb2YgdHVwbGVzIGJ5IHRoZSBpbmRleCBz aXplIGluIGFueSBjYXNlLiBBbHNvLAogCSAqIGFsd2F5cyBlc3RpbWF0ZSBhdCBsZWFzdCBvbmUg dHVwbGUgaXMgdG91Y2hlZCwgZXZlbiB3aGVuCkBAIC02NTQwLDI3ICs2NTI3LDMxIEBAIGdlbmVy aWNjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsCiAJICoKIAkgKiBUaGUgYWJvdmUgY2Fs Y3VsYXRpb25zIGFyZSBhbGwgcGVyLWluZGV4LXNjYW4uICBIb3dldmVyLCBpZiB3ZSBhcmUgaW4g YQogCSAqIG5lc3Rsb29wIGlubmVyIHNjYW4sIHdlIGNhbiBleHBlY3QgdGhlIHNjYW4gdG8gYmUg cmVwZWF0ZWQgKHdpdGgKLQkgKiBkaWZmZXJlbnQgc2VhcmNoIGtleXMpIGZvciBlYWNoIHJvdyBv ZiB0aGUgb3V0ZXIgcmVsYXRpb24uICBMaWtld2lzZSwKLQkgKiBTY2FsYXJBcnJheU9wRXhwciBx dWFscyByZXN1bHQgaW4gbXVsdGlwbGUgaW5kZXggc2NhbnMuICBUaGlzIGNyZWF0ZXMKLQkgKiB0 aGUgcG90ZW50aWFsIGZvciBjYWNoZSBlZmZlY3RzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGRp c2sgcGFnZQotCSAqIGZldGNoZXMgbmVlZGVkLiAgV2Ugd2FudCB0byBlc3RpbWF0ZSB0aGUgYXZl cmFnZSBwZXItc2NhbiBJL08gY29zdCBpbgotCSAqIHRoZSBwcmVzZW5jZSBvZiBjYWNoaW5nLgor CSAqIGRpZmZlcmVudCBzZWFyY2gga2V5cykgZm9yIGVhY2ggcm93IG9mIHRoZSBvdXRlciByZWxh dGlvbi4gIFRoaXMKKwkgKiBjcmVhdGVzIHRoZSBwb3RlbnRpYWwgZm9yIGNhY2hlIGVmZmVjdHMg dG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgZGlzaworCSAqIHBhZ2UgZmV0Y2hlcyBuZWVkZWQuICBX ZSB3YW50IHRvIGVzdGltYXRlIHRoZSBhdmVyYWdlIHBlci1zY2FuIEkvTyBjb3N0CisJICogaW4g dGhlIHByZXNlbmNlIG9mIGNhY2hpbmcuCiAJICoKIAkgKiBXZSB1c2UgdGhlIE1hY2tlcnQtTG9o bWFuIGZvcm11bGEgKHNlZSBjb3N0c2l6ZS5jIGZvciBkZXRhaWxzKSB0bwogCSAqIGVzdGltYXRl IHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZSBmZXRjaGVzIHRoYXQgb2NjdXIuICBXaGlsZSB0aGlz CiAJICogd2Fzbid0IHdoYXQgaXQgd2FzIGRlc2lnbmVkIGZvciwgaXQgc2VlbXMgYSByZWFzb25h YmxlIG1vZGVsIGFueXdheS4KIAkgKiBOb3RlIHRoYXQgd2UgYXJlIGNvdW50aW5nIHBhZ2VzIG5v dCB0dXBsZXMgYW55bW9yZSwgc28gd2UgdGFrZSBOID0gVCA9CiAJICogaW5kZXggc2l6ZSwgYXMg aWYgdGhlcmUgd2VyZSBvbmUgInR1cGxlIiBwZXIgcGFnZS4KKwkgKgorCSAqIE5vdGU6IHdlIGFz c3VtZSB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gcmVwZWF0IGluZGV4IHBhZ2UgZmV0Y2hlcyBhY3Jv c3MKKwkgKiBTY2FsYXJBcnJheU9wRXhwciBwcmltaXRpdmUgc2NhbnMgZnJvbSB0aGUgc2FtZSBs b2dpY2FsIGluZGV4IHNjYW4uCisJICogVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIHRydWUgZm9y IGJ0cmVlIGluZGV4ZXMsIGJ1dCBpcyB2ZXJ5IG9wdGltaXN0aWMKKwkgKiB3aXRoIGluZGV4IEFN cyB0aGF0IGNhbm5vdCBuYXRpdmVseSBleGVjdXRlIFNjYWxhckFycmF5T3BFeHByIHF1YWxzLgor CSAqIEhvd2V2ZXIsIHRoZXNlIHNhbWUgaW5kZXggQU1zIGFsc28gYWNjZXB0IG91ciBkZWZhdWx0 IHBlc3NpbWlzdGljCisJICogYXBwcm9hY2ggdG8gY291bnRpbmcgbnVtX3NhX3NjYW5zIChidHJl ZSBjYWxsZXIgY2FwcyB0aGlzKSwgc28gd2UgZG9uJ3QKKwkgKiBleHBlY3QgdGhlIGZpbmFsIGlu ZGV4VG90YWxDb3N0IHRvIGJlIHdpbGRseSBvdmVyLW9wdGltaXN0aWMuCiAJICovCi0JbnVtX291 dGVyX3NjYW5zID0gbG9vcF9jb3VudDsKLQludW1fc2NhbnMgPSBudW1fc2Ffc2NhbnMgKiBudW1f b3V0ZXJfc2NhbnM7Ci0KLQlpZiAobnVtX3NjYW5zID4gMSkKKwlpZiAobG9vcF9jb3VudCA+IDEp CiAJewogCQlkb3VibGUJCXBhZ2VzX2ZldGNoZWQ7CiAKIAkJLyogdG90YWwgcGFnZSBmZXRjaGVz IGlnbm9yaW5nIGNhY2hlIGVmZmVjdHMgKi8KLQkJcGFnZXNfZmV0Y2hlZCA9IG51bUluZGV4UGFn ZXMgKiBudW1fc2NhbnM7CisJCXBhZ2VzX2ZldGNoZWQgPSBudW1JbmRleFBhZ2VzICogbG9vcF9j b3VudDsKIAogCQkvKiB1c2UgTWFja2VydCBhbmQgTG9obWFuIGZvcm11bGEgdG8gYWRqdXN0IGZv ciBjYWNoZSBlZmZlY3RzICovCiAJCXBhZ2VzX2ZldGNoZWQgPSBpbmRleF9wYWdlc19mZXRjaGVk KHBhZ2VzX2ZldGNoZWQsCkBAIC02NTcwLDExICs2NTYxLDkgQEAgZ2VuZXJpY2Nvc3Rlc3RpbWF0 ZShQbGFubmVySW5mbyAqcm9vdCwKIAogCQkvKgogCQkgKiBOb3cgY29tcHV0ZSB0aGUgdG90YWwg ZGlzayBhY2Nlc3MgY29zdCwgYW5kIHRoZW4gcmVwb3J0IGEgcHJvLXJhdGVkCi0JCSAqIHNoYXJl IGZvciBlYWNoIG91dGVyIHNjYW4uICAoRG9uJ3QgcHJvLXJhdGUgZm9yIFNjYWxhckFycmF5T3BF eHByLAotCQkgKiBzaW5jZSB0aGF0J3MgaW50ZXJuYWwgdG8gdGhlIGluZGV4c2Nhbi4pCisJCSAq IHNoYXJlIGZvciBlYWNoIG91dGVyIHNjYW4KIAkJICovCi0JCWluZGV4VG90YWxDb3N0ID0gKHBh Z2VzX2ZldGNoZWQgKiBzcGNfcmFuZG9tX3BhZ2VfY29zdCkKLQkJCS8gbnVtX291dGVyX3NjYW5z OworCQlpbmRleFRvdGFsQ29zdCA9IChwYWdlc19mZXRjaGVkICogc3BjX3JhbmRvbV9wYWdlX2Nv c3QpIC8gbG9vcF9jb3VudDsKIAl9CiAJZWxzZQogCXsKQEAgLTY1OTAsMTAgKzY1NzksOCBAQCBn ZW5lcmljY29zdGVzdGltYXRlKFBsYW5uZXJJbmZvICpyb290LAogCSAqIGV2YWx1YXRlZCBvbmNl IGF0IHRoZSBzdGFydCBvZiB0aGUgc2NhbiB0byByZWR1Y2UgdGhlbSB0byBydW50aW1lIGtleXMK IAkgKiB0byBwYXNzIHRvIHRoZSBpbmRleCBBTSAoc2VlIG5vZGVJbmRleHNjYW4uYykuICBXZSBt b2RlbCB0aGUgcGVyLXR1cGxlCiAJICogQ1BVIGNvc3RzIGFzIGNwdV9pbmRleF90dXBsZV9jb3N0 IHBsdXMgb25lIGNwdV9vcGVyYXRvcl9jb3N0IHBlcgotCSAqIGluZGV4cXVhbCBvcGVyYXRvci4g IEJlY2F1c2Ugd2UgaGF2ZSBudW1JbmRleFR1cGxlcyBhcyBhIHBlci1zY2FuCi0JICogbnVtYmVy LCB3ZSBoYXZlIHRvIG11bHRpcGx5IGJ5IG51bV9zYV9zY2FucyB0byBnZXQgdGhlIGNvcnJlY3Qg cmVzdWx0Ci0JICogZm9yIFNjYWxhckFycmF5T3BFeHByIGNhc2VzLiAgU2ltaWxhcmx5IGFkZCBp biBjb3N0cyBmb3IgYW55IGluZGV4Ci0JICogT1JERVIgQlkgZXhwcmVzc2lvbnMuCisJICogaW5k ZXhxdWFsIG9wZXJhdG9yLiAgU2ltaWxhcmx5IGFkZCBpbiBjb3N0cyBmb3IgYW55IGluZGV4IE9S REVSIEJZCisJICogZXhwcmVzc2lvbnMuCiAJICoKIAkgKiBOb3RlOiB0aGlzIG5lZ2xlY3RzIHRo ZSBwb3NzaWJsZSBjb3N0cyBvZiByZWNoZWNraW5nIGxvc3N5IG9wZXJhdG9ycy4KIAkgKiBEZXRl Y3RpbmcgdGhhdCB0aGF0IG1pZ2h0IGJlIG5lZWRlZCBzZWVtcyBtb3JlIGV4cGVuc2l2ZSB0aGFu IGl0J3MKQEAgLTY2MDYsNyArNjU5Myw3IEBAIGdlbmVyaWNjb3N0ZXN0aW1hdGUoUGxhbm5lcklu Zm8gKnJvb3QsCiAKIAlpbmRleFN0YXJ0dXBDb3N0ID0gcXVhbF9hcmdfY29zdDsKIAlpbmRleFRv dGFsQ29zdCArPSBxdWFsX2FyZ19jb3N0OwotCWluZGV4VG90YWxDb3N0ICs9IG51bUluZGV4VHVw bGVzICogbnVtX3NhX3NjYW5zICogKGNwdV9pbmRleF90dXBsZV9jb3N0ICsgcXVhbF9vcF9jb3N0 KTsKKwlpbmRleFRvdGFsQ29zdCArPSBudW1JbmRleFR1cGxlcyAqIChjcHVfaW5kZXhfdHVwbGVf Y29zdCArIHF1YWxfb3BfY29zdCk7CiAKIAkvKgogCSAqIEdlbmVyaWMgYXNzdW1wdGlvbiBhYm91 dCBpbmRleCBjb3JyZWxhdGlvbjogdGhlcmUgaXNuJ3QgYW55LgpAQCAtNjY4NCw3ICs2NjcxLDYg QEAgYnRjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91 YmxlIGxvb3BfY291bnQsCiAJYm9vbAkJZXFRdWFsSGVyZTsKIAlib29sCQlmb3VuZF9zYW9wOwog CWJvb2wJCWZvdW5kX2lzX251bGxfb3A7Ci0JZG91YmxlCQludW1fc2Ffc2NhbnM7CiAJTGlzdENl bGwgICAqbGM7CiAKIAkvKgpAQCAtNjY5OSwxNyArNjY4NSwxMiBAQCBidGNvc3Rlc3RpbWF0ZShQ bGFubmVySW5mbyAqcm9vdCwgSW5kZXhQYXRoICpwYXRoLCBkb3VibGUgbG9vcF9jb3VudCwKIAkg KgogCSAqIEZvciBhIFJvd0NvbXBhcmVFeHByLCB3ZSBjb25zaWRlciBvbmx5IHRoZSBmaXJzdCBj b2x1bW4sIGp1c3QgYXMKIAkgKiByb3djb21wYXJlc2VsKCkgZG9lcy4KLQkgKgotCSAqIElmIHRo ZXJlJ3MgYSBTY2FsYXJBcnJheU9wRXhwciBpbiB0aGUgcXVhbHMsIHdlJ2xsIGFjdHVhbGx5IHBl cmZvcm0gTgotCSAqIGluZGV4IHNjYW5zIG5vdCBvbmUsIGJ1dCB0aGUgU2NhbGFyQXJyYXlPcEV4 cHIncyBvcGVyYXRvciBjYW4gYmUKLQkgKiBjb25zaWRlcmVkIHRvIGFjdCB0aGUgc2FtZSBhcyBp dCBub3JtYWxseSBkb2VzLgogCSAqLwogCWluZGV4Qm91bmRRdWFscyA9IE5JTDsKIAlpbmRleGNv bCA9IDA7CiAJZXFRdWFsSGVyZSA9IGZhbHNlOwogCWZvdW5kX3Nhb3AgPSBmYWxzZTsKIAlmb3Vu ZF9pc19udWxsX29wID0gZmFsc2U7Ci0JbnVtX3NhX3NjYW5zID0gMTsKIAlmb3JlYWNoKGxjLCBw YXRoLT5pbmRleGNsYXVzZXMpCiAJewogCQlJbmRleENsYXVzZSAqaWNsYXVzZSA9IGxmaXJzdF9u b2RlKEluZGV4Q2xhdXNlLCBsYyk7CkBAIC02NzQ5LDE0ICs2NzMwLDkgQEAgYnRjb3N0ZXN0aW1h dGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQs CiAJCQllbHNlIGlmIChJc0EoY2xhdXNlLCBTY2FsYXJBcnJheU9wRXhwcikpCiAJCQl7CiAJCQkJ U2NhbGFyQXJyYXlPcEV4cHIgKnNhb3AgPSAoU2NhbGFyQXJyYXlPcEV4cHIgKikgY2xhdXNlOwot CQkJCU5vZGUJICAgKm90aGVyX29wZXJhbmQgPSAoTm9kZSAqKSBsc2Vjb25kKHNhb3AtPmFyZ3Mp OwotCQkJCWludAkJCWFsZW5ndGggPSBlc3RpbWF0ZV9hcnJheV9sZW5ndGgob3RoZXJfb3BlcmFu ZCk7CiAKIAkJCQljbGF1c2Vfb3AgPSBzYW9wLT5vcG5vOwogCQkJCWZvdW5kX3Nhb3AgPSB0cnVl OwotCQkJCS8qIGNvdW50IG51bWJlciBvZiBTQSBzY2FucyBpbmR1Y2VkIGJ5IGluZGV4Qm91bmRR dWFscyBvbmx5ICovCi0JCQkJaWYgKGFsZW5ndGggPiAxKQotCQkJCQludW1fc2Ffc2NhbnMgKj0g YWxlbmd0aDsKIAkJCX0KIAkJCWVsc2UgaWYgKElzQShjbGF1c2UsIE51bGxUZXN0KSkKIAkJCXsK QEAgLTY4MTYsMTMgKzY3OTIsNiBAQCBidGNvc3Rlc3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwg SW5kZXhQYXRoICpwYXRoLCBkb3VibGUgbG9vcF9jb3VudCwKIAkJCQkJCQkJCQkJCSAgSk9JTl9J Tk5FUiwKIAkJCQkJCQkJCQkJCSAgTlVMTCk7CiAJCW51bUluZGV4VHVwbGVzID0gYnRyZWVTZWxl Y3Rpdml0eSAqIGluZGV4LT5yZWwtPnR1cGxlczsKLQotCQkvKgotCQkgKiBBcyBpbiBnZW5lcmlj Y29zdGVzdGltYXRlKCksIHdlIGhhdmUgdG8gYWRqdXN0IGZvciBhbnkKLQkJICogU2NhbGFyQXJy YXlPcEV4cHIgcXVhbHMgaW5jbHVkZWQgaW4gaW5kZXhCb3VuZFF1YWxzLCBhbmQgdGhlbiByb3Vu ZAotCQkgKiB0byBpbnRlZ2VyLgotCQkgKi8KLQkJbnVtSW5kZXhUdXBsZXMgPSByaW50KG51bUlu ZGV4VHVwbGVzIC8gbnVtX3NhX3NjYW5zKTsKIAl9CiAKIAkvKgpAQCAtNjgzMiw2ICs2ODAxLDQ4 IEBAIGJ0Y29zdGVzdGltYXRlKFBsYW5uZXJJbmZvICpyb290LCBJbmRleFBhdGggKnBhdGgsIGRv dWJsZSBsb29wX2NvdW50LAogCiAJZ2VuZXJpY2Nvc3Rlc3RpbWF0ZShyb290LCBwYXRoLCBsb29w X2NvdW50LCAmY29zdHMpOwogCisJLyoKKwkgKiBOb3cgY29tcGVuc2F0ZSBmb3IgYnRyZWUncyBh YmlsaXR5IHRvIGVmZmljaWVudGx5IGV4ZWN1dGUgc2NhbnMgd2l0aAorCSAqIFNBT1AgY2xhdXNl cy4KKwkgKgorCSAqIGJ0cmVlIGF1dG9tYXRpY2FsbHkgY29tYmluZXMgaW5kaXZpZHVhbCBTY2Fs YXJBcnJheU9wRXhwciBwcmltaXRpdmUKKwkgKiBpbmRleCBzY2FucyB3aGVuZXZlciB0aGUgdHVw bGVzIGNvdmVyZWQgYnkgdGhlIG5leHQgc2V0IG9mIGFycmF5IGtleXMKKwkgKiBhcmUgY2xvc2Ug dG8gdHVwbGVzIGNvdmVyZWQgYnkgdGhlIGN1cnJlbnQgc2V0LiAgVGhpcyBtYWtlcyB0aGUgZmlu YWwKKwkgKiBudW1iZXIgb2YgZGVzY2VudHMgcGFydGljdWxhcmx5IGRpZmZpY3VsdCB0byBlc3Rp bWF0ZS4gIEhvd2V2ZXIsIGJ0cmVlCisJICogc2NhbnMgbmV2ZXIgdmlzaXQgYW55IHNpbmdsZSBs ZWFmIHBhZ2UgbW9yZSB0aGFuIG9uY2UuICBUaGF0IHB1dHMgYQorCSAqIG5hdHVyYWwgZmxvb3Ig dW5kZXIgdGhlIHdvcnN0IGNhc2UgbnVtYmVyIG9mIGRlc2NlbnRzLgorCSAqCisJICogSXQncyBw YXJ0aWN1bGFybHkgaW1wb3J0YW50IHRoYXQgd2Ugbm90IHdpbGRseSBvdmVyZXN0aW1hdGUgdGhl IG51bWJlcgorCSAqIG9mIGRlc2NlbnRzIG5lZWRlZCBmb3IgYSBjbGF1c2UgbGlzdCB3aXRoIHNl dmVyYWwgU0FPUHMgLS0gdGhlIGNvc3RzCisJICogcmVhbGx5IGFyZW4ndCBtdWx0aXBsaWNhdGl2 ZSBpbiB0aGUgd2F5IGdlbmVyaWNjb3N0ZXN0aW1hdGUgZXhwZWN0cy4gSW4KKwkgKiBnZW5lcmFs LCBtb3N0IGRpc3RpbmN0IGNvbWJpbmF0aW9ucyBvZiBTQU9QIGtleXMgd2lsbCB0ZW5kIHRvIG5v dCBmaW5kCisJICogYW55IG1hdGNoaW5nIHR1cGxlcy4gIEZ1cnRoZXJtb3JlLCBidHJlZSBzY2Fu cyBzZWFyY2ggZm9yIHRoZSBuZXh0IHNldAorCSAqIG9mIGFycmF5IGtleXMgdXNpbmcgdGhlIG5l eHQgdHVwbGUgaW4gbGluZSwgYW5kIHNvIHdvbid0IGV2ZW4gbmVlZCBhCisJICogZGlyZWN0IGNv bXBhcmlzb24gdG8gZWxpbWluYXRlIG1vc3Qgbm9uLW1hdGNoaW5nIHNldHMgb2YgYXJyYXkga2V5 cy4KKwkgKgorCSAqIENsYW1wIHRoZSBudW1iZXIgb2YgZGVzY2VudHMgdG8gdGhlIGVzdGltYXRl ZCBudW1iZXIgb2YgbGVhZiBwYWdlCisJICogdmlzaXRzLiAgVGhpcyBpcyBzdGlsbCBmYWlybHkg cGVzc2ltaXN0aWMsIGJ1dCB0ZW5kcyB0byByZXN1bHQgaW4gbW9yZQorCSAqIGFjY3VyYXRlIGNv c3Rpbmcgb2Ygc2NhbnMgd2l0aCBzZXZlcmFsIFNBT1AgY2xhdXNlcyAtLSBlc3BlY2lhbGx5IHdo ZW4KKwkgKiBlYWNoIGFycmF5IGhhcyBtb3JlIHRoYW4gYSBmZXcgZWxlbWVudHMuICBUaGUgY29z dCBvZiBhZGRpbmcgYWRkaXRpb25hbAorCSAqIGFycmF5IGNvbnN0YW50cyB0byBhIGxvdy1vcmRl ciBTQU9QIGNvbHVtbiBzaG91bGQgc2F0dXJhdGUgcGFzdCBhCisJICogY2VydGFpbiBwb2ludCAo ZXhjZXB0IHdoZXJlIHNlbGVjdGl2aXR5IGVzdGltYXRlcyBjb250aW51ZSB0byBzaGlmdCkuCisJ ICoKKwkgKiBBbHNvIGNsYW1wIHRoZSBudW1iZXIgb2YgZGVzY2VudHMgdG8gMS8zIHRoZSBudW1i ZXIgb2YgaW5kZXggcGFnZXMuCisJICogVGhpcyBhdm9pZHMgaW1wbGF1c2libHkgaGlnaCBlc3Rp bWF0ZXMgd2l0aCBsb3cgc2VsZWN0aXZpdHkgcGF0aHMsCisJICogd2hlcmUgc2NhbnMgZnJlcXVl bnRseSByZXF1aXJlIG5vIG1vcmUgdGhhbiBvbmUgb3IgdHdvIGRlc2NlbnRzLgorCSAqCisJICog WFhYIElkZWFsbHksIHdlJ2QgYWxzbyBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IG5vbi1ib3Vu ZGFyeSBTQU9QCisJICogY2xhdXNlIHF1YWxzICh3aGljaCB0aGUgQi1UcmVlIGNvZGUgdXNlcyAi bm9uLXJlcXVpcmVkIiBzY2FuIGtleXMgZm9yKQorCSAqIHdvbid0IGFjdHVhbGx5IGNvbnRyaWJ1 dGUgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBkZXNjZW50cyBvZiB0aGUgaW5kZXguCisJICogVGhp cyB3b3VsZCByZXF1aXJlIHB1c2hpbmcgZG93biBtb3JlIGNvbnRleHQgaW50byBnZW5lcmljY29z dGVzdGltYXRlLgorCSAqLworCWlmIChjb3N0cy5udW1fc2Ffc2NhbnMgPiAxKQorCXsKKwkJY29z dHMubnVtX3NhX3NjYW5zID0gTWluKGNvc3RzLm51bV9zYV9zY2FucywgY29zdHMubnVtSW5kZXhQ YWdlcyk7CisJCWNvc3RzLm51bV9zYV9zY2FucyA9IE1pbihjb3N0cy5udW1fc2Ffc2NhbnMsIGlu ZGV4LT5wYWdlcyAvIDMpOworCQljb3N0cy5udW1fc2Ffc2NhbnMgPSBNYXgoY29zdHMubnVtX3Nh X3NjYW5zLCAxKTsKKwl9CisKIAkvKgogCSAqIEFkZCBhIENQVS1jb3N0IGNvbXBvbmVudCB0byBy ZXByZXNlbnQgdGhlIGNvc3RzIG9mIGluaXRpYWwgYnRyZWUKIAkgKiBkZXNjZW50LiAgV2UgZG9u J3QgY2hhcmdlIGFueSBJL08gY29zdCBmb3IgdG91Y2hpbmcgdXBwZXIgYnRyZWUgbGV2ZWxzLApA QCAtNjgzOSw5ICs2ODUwLDkgQEAgYnRjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIElu ZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQsCiAJICogY29tcGFyaXNvbnMgdG8gZGVz Y2VuZCBhIGJ0cmVlIG9mIE4gbGVhZiB0dXBsZXMuICBXZSBjaGFyZ2Ugb25lCiAJICogY3B1X29w ZXJhdG9yX2Nvc3QgcGVyIGNvbXBhcmlzb24uCiAJICoKLQkgKiBJZiB0aGVyZSBhcmUgU2NhbGFy QXJyYXlPcEV4cHJzLCBjaGFyZ2UgdGhpcyBvbmNlIHBlciBTQSBzY2FuLiAgVGhlCi0JICogb25l cyBhZnRlciB0aGUgZmlyc3Qgb25lIGFyZSBub3Qgc3RhcnR1cCBjb3N0IHNvIGZhciBhcyB0aGUg b3ZlcmFsbAotCSAqIHBsYW4gaXMgY29uY2VybmVkLCBzbyBhZGQgdGhlbSBvbmx5IHRvICJ0b3Rh bCIgY29zdC4KKwkgKiBJZiB0aGVyZSBhcmUgU2NhbGFyQXJyYXlPcEV4cHJzLCBjaGFyZ2UgdGhp cyBvbmNlIHBlciBlc3RpbWF0ZWQKKwkgKiBwcmltaXRpdmUgU0Egc2Nhbi4gIFRoZSBvbmVzIGFm dGVyIHRoZSBmaXJzdCBvbmUgYXJlIG5vdCBzdGFydHVwIGNvc3QKKwkgKiBzbyBmYXIgYXMgdGhl IG92ZXJhbGwgcGxhbiBnb2VzLCBzbyBqdXN0IGFkZCB0aGVtIHRvICJ0b3RhbCIgY29zdC4KIAkg Ki8KIAlpZiAoaW5kZXgtPnR1cGxlcyA+IDEpCQkvKiBhdm9pZCBjb21wdXRpbmcgbG9nKDApICov CiAJewpAQCAtNjg1OCw3ICs2ODY5LDggQEAgYnRjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJv b3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQsCiAJICogaW4gY2FzZXMgd2hl cmUgb25seSBhIHNpbmdsZSBsZWFmIHBhZ2UgaXMgZXhwZWN0ZWQgdG8gYmUgdmlzaXRlZC4gIFRo aXMKIAkgKiBjb3N0IGlzIHNvbWV3aGF0IGFyYml0cmFyaWx5IHNldCBhdCA1MHggY3B1X29wZXJh dG9yX2Nvc3QgcGVyIHBhZ2UKIAkgKiB0b3VjaGVkLiAgVGhlIG51bWJlciBvZiBzdWNoIHBhZ2Vz IGlzIGJ0cmVlIHRyZWUgaGVpZ2h0IHBsdXMgb25lIChpZSwKLQkgKiB3ZSBjaGFyZ2UgZm9yIHRo ZSBsZWFmIHBhZ2UgdG9vKS4gIEFzIGFib3ZlLCBjaGFyZ2Ugb25jZSBwZXIgU0Egc2Nhbi4KKwkg KiB3ZSBjaGFyZ2UgZm9yIHRoZSBsZWFmIHBhZ2UgdG9vKS4gIEFzIGFib3ZlLCBjaGFyZ2Ugb25j ZSBwZXIgZXN0aW1hdGVkCisJICogcHJpbWl0aXZlIFNBIHNjYW4uCiAJICovCiAJZGVzY2VudENv c3QgPSAoaW5kZXgtPnRyZWVfaGVpZ2h0ICsgMSkgKiBERUZBVUxUX1BBR0VfQ1BVX01VTFRJUExJ RVIgKiBjcHVfb3BlcmF0b3JfY29zdDsKIAljb3N0cy5pbmRleFN0YXJ0dXBDb3N0ICs9IGRlc2Nl bnRDb3N0OwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9z cmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKaW5kZXggZTA2OGY3ZTI0Li5kYTkwNDEyZDUgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21v bml0b3Jpbmcuc2dtbApAQCAtNDAzNSw2ICs0MDM1LDE5IEBAIGRlc2NyaXB0aW9uIHwgV2FpdGlu ZyBmb3IgYSBuZXdseSBpbml0aWFsaXplZCBXQUwgZmlsZSB0byByZWFjaCBkdXJhYmxlIHN0b3Jh Z2UKICAgIDwvcGFyYT4KICAgPC9ub3RlPgogCisgIDxub3RlPgorICAgPHBhcmE+CisgICAgRXZl cnkgdGltZSBhbiBpbmRleCBpcyBzZWFyY2hlZCwgdGhlIGluZGV4J3MKKyAgICA8c3RydWN0bmFt ZT5wZ19zdGF0X2FsbF9pbmRleGVzPC9zdHJ1Y3RuYW1lPi48c3RydWN0ZmllbGQ+aWR4X3NjYW48 L3N0cnVjdGZpZWxkPgorICAgIGZpZWxkIGlzIGluY3JlbWVudGVkLiAgVGhpcyB1c3VhbGx5IGhh cHBlbnMgb25jZSBwZXIgaW5kZXggc2NhbiBub2RlCisgICAgZXhlY3V0aW9uLCBidXQgbWlnaHQg dGFrZSBwbGFjZSBzZXZlcmFsIHRpbWVzIGR1cmluZyBleGVjdXRpb24gb2YgYSBzY2FuCisgICAg dGhhdCBzZWFyY2hlcyBmb3IgbXVsdGlwbGUgdmFsdWVzIHRvZ2V0aGVyLiAgT25seSBxdWVyaWVz IHRoYXQgdXNlIGNlcnRhaW4KKyAgICA8YWNyb255bT5TUUw8L2Fjcm9ueW0+IGNvbnN0cnVjdHMg dG8gc2VhcmNoIGZvciByb3dzIG1hdGNoaW5nIGFueSB2YWx1ZQorICAgIG91dCBvZiBhIGxpc3Qg KG9yIGFuIGFycmF5KSBvZiBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzIGFyZSBhZmZlY3RlZC4gIFNl ZQorICAgIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1jb21wYXJpc29ucyIvPiBmb3IgZGV0YWls cy4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCiAgPC9zZWN0Mj4KIAogIDxzZWN0MiBpZD0ibW9u aXRvcmluZy1wZy1zdGF0aW8tYWxsLXRhYmxlcy12aWV3Ij4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAppbmRleCBhY2ZkOWQxZjQuLjg0YzA2OGFlMyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dApAQCAtMTkxMCw3ICsxOTEw LDcgQEAgU0VMRUNUIGNvdW50KCopIEZST00gZHVwaW5kZXhjb2xzCiAoMSByb3cpCiAKIC0tCi0t LSBDaGVjayBvcmRlcmluZyBvZiA9QU5ZIGluZGV4cXVhbCByZXN1bHRzIChidWcgaW4gOS4yLjAp CistLSBDaGVjayB0aGF0IGluZGV4IHNjYW5zIHdpdGggPUFOWSBpbmRleHF1YWxzIHJldHVybiBy b3dzIGluIGluZGV4IG9yZGVyCiAtLQogZXhwbGFpbiAoY29zdHMgb2ZmKQogU0VMRUNUIHVuaXF1 ZTEgRlJPTSB0ZW5rMQpAQCAtMTkzNiwxMiArMTkzNiwxMSBAQCBleHBsYWluIChjb3N0cyBvZmYp CiBTRUxFQ1QgdGhvdXNhbmQsIHRlbnRob3VzIEZST00gdGVuazEKIFdIRVJFIHRob3VzYW5kIDwg MiBBTkQgdGVudGhvdXMgSU4gKDEwMDEsMzAwMCkKIE9SREVSIEJZIHRob3VzYW5kOwotICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgSW5kZXggT25seSBT Y2FuIHVzaW5nIHRlbmsxX3Rob3VzX3RlbnRob3VzIG9uIHRlbmsxCi0gICBJbmRleCBDb25kOiAo dGhvdXNhbmQgPCAyKQotICAgRmlsdGVyOiAodGVudGhvdXMgPSBBTlkgKCd7MTAwMSwzMDAwfSc6 OmludGVnZXJbXSkpCi0oMyByb3dzKQorICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA8IDIpIEFO RCAodGVudGhvdXMgPSBBTlkgKCd7MTAwMSwzMDAwfSc6OmludGVnZXJbXSkpKQorKDIgcm93cykK IAogU0VMRUNUIHRob3VzYW5kLCB0ZW50aG91cyBGUk9NIHRlbmsxCiBXSEVSRSB0aG91c2FuZCA8 IDIgQU5EIHRlbnRob3VzIElOICgxMDAxLDMwMDApCkBAIC0xOTUyLDE4ICsxOTUxLDM1IEBAIE9S REVSIEJZIHRob3VzYW5kOwogICAgICAgICAxIHwgICAgIDEwMDEKICgyIHJvd3MpCiAKK2V4cGxh aW4gKGNvc3RzIG9mZikKK1NFTEVDVCB0aG91c2FuZCwgdGVudGhvdXMgRlJPTSB0ZW5rMQorV0hF UkUgdGhvdXNhbmQgPCAyIEFORCB0ZW50aG91cyBJTiAoMTAwMSwzMDAwKQorT1JERVIgQlkgdGhv dXNhbmQgREVTQywgdGVudGhvdXMgREVTQzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiBCYWNrd2FyZCB1c2luZyB0ZW5r MV90aG91c190ZW50aG91cyBvbiB0ZW5rMQorICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA8IDIp IEFORCAodGVudGhvdXMgPSBBTlkgKCd7MTAwMSwzMDAwfSc6OmludGVnZXJbXSkpKQorKDIgcm93 cykKKworU0VMRUNUIHRob3VzYW5kLCB0ZW50aG91cyBGUk9NIHRlbmsxCitXSEVSRSB0aG91c2Fu ZCA8IDIgQU5EIHRlbnRob3VzIElOICgxMDAxLDMwMDApCitPUkRFUiBCWSB0aG91c2FuZCBERVND LCB0ZW50aG91cyBERVNDOworIHRob3VzYW5kIHwgdGVudGhvdXMgCistLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyAgICAgICAgMSB8ICAgICAxMDAxCisgICAgICAgIDAgfCAgICAgMzAwMAorKDIgcm93 cykKKwogU0VUIGVuYWJsZV9pbmRleG9ubHlzY2FuID0gT0ZGOwogZXhwbGFpbiAoY29zdHMgb2Zm KQogU0VMRUNUIHRob3VzYW5kLCB0ZW50aG91cyBGUk9NIHRlbmsxCiBXSEVSRSB0aG91c2FuZCA8 IDIgQU5EIHRlbnRob3VzIElOICgxMDAxLDMwMDApCiBPUkRFUiBCWSB0aG91c2FuZDsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot IFNvcnQKLSAgIFNvcnQgS2V5OiB0aG91c2FuZAotICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdGVu azFfdGhvdXNfdGVudGhvdXMgb24gdGVuazEKLSAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNh bmQgPCAyKSBBTkQgKHRlbnRob3VzID0gQU5ZICgnezEwMDEsMzAwMH0nOjppbnRlZ2VyW10pKSkK LSg0IHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBJbmRleCBTY2FuIHVzaW5nIHRlbmsxX3Rob3VzX3RlbnRob3VzIG9uIHRlbmsxCisgICBJ bmRleCBDb25kOiAoKHRob3VzYW5kIDwgMikgQU5EICh0ZW50aG91cyA9IEFOWSAoJ3sxMDAxLDMw MDB9Jzo6aW50ZWdlcltdKSkpCisoMiByb3dzKQogCiBTRUxFQ1QgdGhvdXNhbmQsIHRlbnRob3Vz IEZST00gdGVuazEKIFdIRVJFIHRob3VzYW5kIDwgMiBBTkQgdGVudGhvdXMgSU4gKDEwMDEsMzAw MCkKQEAgLTE5NzQsNiArMTk5MCwyNSBAQCBPUkRFUiBCWSB0aG91c2FuZDsKICAgICAgICAgMSB8 ICAgICAxMDAxCiAoMiByb3dzKQogCitleHBsYWluIChjb3N0cyBvZmYpCitTRUxFQ1QgdGhvdXNh bmQsIHRlbnRob3VzIEZST00gdGVuazEKK1dIRVJFIHRob3VzYW5kIDwgMiBBTkQgdGVudGhvdXMg SU4gKDEwMDEsMzAwMCkKK09SREVSIEJZIHRob3VzYW5kIERFU0MsIHRlbnRob3VzIERFU0M7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBT Y2FuIEJhY2t3YXJkIHVzaW5nIHRlbmsxX3Rob3VzX3RlbnRob3VzIG9uIHRlbmsxCisgICBJbmRl eCBDb25kOiAoKHRob3VzYW5kIDwgMikgQU5EICh0ZW50aG91cyA9IEFOWSAoJ3sxMDAxLDMwMDB9 Jzo6aW50ZWdlcltdKSkpCisoMiByb3dzKQorCitTRUxFQ1QgdGhvdXNhbmQsIHRlbnRob3VzIEZS T00gdGVuazEKK1dIRVJFIHRob3VzYW5kIDwgMiBBTkQgdGVudGhvdXMgSU4gKDEwMDEsMzAwMCkK K09SREVSIEJZIHRob3VzYW5kIERFU0MsIHRlbnRob3VzIERFU0M7CisgdGhvdXNhbmQgfCB0ZW50 aG91cyAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAxIHwgICAgIDEwMDEKKyAgICAg ICAgMCB8ICAgICAzMDAwCisoMiByb3dzKQorCiBSRVNFVCBlbmFibGVfaW5kZXhvbmx5c2NhbjsK IC0tCiAtLSBDaGVjayBlbGltaW5hdGlvbiBvZiBjb25zdGFudC1OVUxMIHN1YmV4cHJlc3Npb25z CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dAppbmRleCA4OTJlYTVmMTcuLmY0OTM5Y2Q3NCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CkBAIC04NjIwLDEwICs4NjIwLDkgQEAgd2hl cmUgajEuaWQxICUgMTAwMCA9IDEgYW5kIGoyLmlkMSAlIDEwMDAgPSAxIGFuZCBqMi5pZDEgPj0g YW55IChhcnJheVsxLDVdKTsKICAgIE1lcmdlIENvbmQ6IChqMS5pZDEgPSBqMi5pZDEpCiAgICBK b2luIEZpbHRlcjogKGoyLmlkMiA9IGoxLmlkMikKICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGox X2lkMV9pZHggb24gajEKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgajJfcGtleSBvbiBq MgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgajJfaWQxX2lkeCBvbiBqMgogICAgICAgICAgSW5k ZXggQ29uZDogKGlkMSA+PSBBTlkgKCd7MSw1fSc6OmludGVnZXJbXSkpCi0gICAgICAgICBGaWx0 ZXI6ICgoaWQxICUgMTAwMCkgPSAxKQotKDcgcm93cykKKyg2IHJvd3MpCiAKIHNlbGVjdCAqIGZy b20gajEKIGlubmVyIGpvaW4gajIgb24gajEuaWQxID0gajIuaWQxIGFuZCBqMS5pZDIgPSBqMi5p ZDIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCmluZGV4IGQ0OWNlOWYzMC4uNDFi OTU1YTI3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKQEAgLTc1Myw3ICs3 NTMsNyBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSBkdXBpbmRleGNvbHMKICAgV0hFUkUgZjEgQkVU V0VFTiAnV0EnIEFORCAnWlpaJyBhbmQgaWQgPCAxMDAwIGFuZCBmMSB+PH4gJ1lYJzsKIAogLS0K LS0tIENoZWNrIG9yZGVyaW5nIG9mID1BTlkgaW5kZXhxdWFsIHJlc3VsdHMgKGJ1ZyBpbiA5LjIu MCkKKy0tIENoZWNrIHRoYXQgaW5kZXggc2NhbnMgd2l0aCA9QU5ZIGluZGV4cXVhbHMgcmV0dXJu IHJvd3MgaW4gaW5kZXggb3JkZXIKIC0tCiAKIGV4cGxhaW4gKGNvc3RzIG9mZikKQEAgLTc3NCw2 ICs3NzQsMTUgQEAgU0VMRUNUIHRob3VzYW5kLCB0ZW50aG91cyBGUk9NIHRlbmsxCiBXSEVSRSB0 aG91c2FuZCA8IDIgQU5EIHRlbnRob3VzIElOICgxMDAxLDMwMDApCiBPUkRFUiBCWSB0aG91c2Fu ZDsKIAorZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUIHRob3VzYW5kLCB0ZW50aG91cyBGUk9N IHRlbmsxCitXSEVSRSB0aG91c2FuZCA8IDIgQU5EIHRlbnRob3VzIElOICgxMDAxLDMwMDApCitP UkRFUiBCWSB0aG91c2FuZCBERVNDLCB0ZW50aG91cyBERVNDOworCitTRUxFQ1QgdGhvdXNhbmQs IHRlbnRob3VzIEZST00gdGVuazEKK1dIRVJFIHRob3VzYW5kIDwgMiBBTkQgdGVudGhvdXMgSU4g KDEwMDEsMzAwMCkKK09SREVSIEJZIHRob3VzYW5kIERFU0MsIHRlbnRob3VzIERFU0M7CisKIFNF VCBlbmFibGVfaW5kZXhvbmx5c2NhbiA9IE9GRjsKIAogZXhwbGFpbiAoY29zdHMgb2ZmKQpAQCAt Nzg1LDYgKzc5NCwxNSBAQCBTRUxFQ1QgdGhvdXNhbmQsIHRlbnRob3VzIEZST00gdGVuazEKIFdI RVJFIHRob3VzYW5kIDwgMiBBTkQgdGVudGhvdXMgSU4gKDEwMDEsMzAwMCkKIE9SREVSIEJZIHRo b3VzYW5kOwogCitleHBsYWluIChjb3N0cyBvZmYpCitTRUxFQ1QgdGhvdXNhbmQsIHRlbnRob3Vz IEZST00gdGVuazEKK1dIRVJFIHRob3VzYW5kIDwgMiBBTkQgdGVudGhvdXMgSU4gKDEwMDEsMzAw MCkKK09SREVSIEJZIHRob3VzYW5kIERFU0MsIHRlbnRob3VzIERFU0M7CisKK1NFTEVDVCB0aG91 c2FuZCwgdGVudGhvdXMgRlJPTSB0ZW5rMQorV0hFUkUgdGhvdXNhbmQgPCAyIEFORCB0ZW50aG91 cyBJTiAoMTAwMSwzMDAwKQorT1JERVIgQlkgdGhvdXNhbmQgREVTQywgdGVudGhvdXMgREVTQzsK KwogUkVTRVQgZW5hYmxlX2luZGV4b25seXNjYW47CiAKIC0tCi0tIAoyLjQyLjAKCg== --0000000000007c0d9e06099a5a50--