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 1su23T-003Zb9-6z for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Sep 2024 03:54:08 +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 1su23S-0023Fo-0B for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Sep 2024 03:54:06 +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 1su23R-0023Fg-DB for pgsql-hackers@lists.postgresql.org; Fri, 27 Sep 2024 03:54:05 +0000 Received: from mail-yw1-x112b.google.com ([2607:f8b0:4864:20::112b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1su23N-001IOt-4m for pgsql-hackers@postgresql.org; Fri, 27 Sep 2024 03:54:04 +0000 Received: by mail-yw1-x112b.google.com with SMTP id 00721157ae682-68518bc1407so18824337b3.2 for ; Thu, 26 Sep 2024 20:54:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727409240; x=1728014040; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=jiw7rSVNdfpOgnwxQ7QMm6h5aFqvw3df9MaQFGrXpY8=; b=dlTABGKBP+Kni33IdzF46Rm9eynjW/TTts+u1z4agZ5IMoovbhHkQgthyo5eNVm0H1 6lFykHlxfmps5dcPF/i5tr7JpWQF94TTyanZvQbefzSqNfrheAQQfELRy+S5gfdexMTq fYqAUNgxYmS/JvEdedjYz6kTxbxW7SkLSlGjVfpe4QDTF5QEPb6U0Ynz5RGYqK1mbx2k RP/oqTzlfL9AfjFnKyiohRFWf0PJTT/KeUNFW2Nj2v9BoCKKoba9NI/RJEiEB/XRYvo2 mGhIXCVhuRKUNAfHBGJEsWbmT/h1/j4SakRM5GaHO9oNAoOkBuhPfQOihFMNRGjsLncK yGTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727409240; x=1728014040; 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=jiw7rSVNdfpOgnwxQ7QMm6h5aFqvw3df9MaQFGrXpY8=; b=PrulVRVfKH0YoBTmmZOy1igp5Ykb7qFGLVt4PDpBWfSoOGzqMYEJoBRC8NnPApQw9M BzJuKlgtm+k9EFqGZJFz+ae6zjcNHjetDKGtKn9s8YsmagZqheP9EN55WZoNiAVmOSkC waXEboj9H/poLn9YONcFWEmSf0d0PJRbPOnKLilLaWB9YyOz+PAyDE5GKzf7w+jjjX1T pMM1D+Ay7YkOiC2TqsMS0HmxKWptXt5eLuIwWWcLo0T/vT7kLj7nK4XF08/ar7JbeIKG wYfSaUU/0CuvCwRJYJlq+Jc/0v8HIZ24RGyxGvZccZxCSG72STLODilrrkukFQI+o1u4 eeGQ== X-Forwarded-Encrypted: i=1; AJvYcCX81RsyVtMjnPtQzthAQm1BuFOj3vrAjVnshhqQdazHxqc88/Fh1+7pp7sHSR2oiTT+b7fvNCKhUOJivdKU@postgresql.org X-Gm-Message-State: AOJu0YzlBhlH3jcJIHsd4UN4bDwhw4LibiGL1upAdOiMuH0rIsQ/Cqie /65apR5/C4WbHNCHnqIBjOBtJxeK7l8IsRVAWP5k3twjzXb5fYi4a35ahl2tbcFiLjY3OSkwGFJ xiVH1z7ePZqpI9Iisg0F4ORSkgwY= X-Google-Smtp-Source: AGHT+IHjOfcCaJjHAcUoHvrmchiyST9dIj75Pk9CaHKzp/EZqX7ykRPhNWNFvcgO1RXWaTXIMN/6+7+Ktfrwat6B+0U= X-Received: by 2002:a05:690c:6892:b0:6db:de34:8049 with SMTP id 00721157ae682-6e2475450c5mr16465497b3.16.1727409240379; Thu, 26 Sep 2024 20:54:00 -0700 (PDT) MIME-Version: 1.0 References: <87il22cj51.fsf@163.com> In-Reply-To: From: Richard Guo Date: Fri, 27 Sep 2024 11:53:43 +0800 Message-ID: Subject: Re: Eager aggregation, take 3 To: Robert Haas Cc: Tender Wang , Paul George , Andy Fan , PostgreSQL-development , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000002801ee062311ce5b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002801ee062311ce5b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Sep 25, 2024 at 11:20=E2=80=AFAM Richard Guo wrote: > Look at the Nested Loop node: > > -> Nested Loop (cost=3D1672.00..1840.60 rows=3D1000000 width=3D12) > > How can a 10-row outer path joining a 1000-row inner path generate > 1000000 rows? This is because we are using the plan of the first path > described above, and the rowcount estimate of the second path. What a > kluge! > > To address this issue, one solution I=E2=80=99m considering is to recalcu= late > the row count estimate for a grouped join path using its outer and > inner paths. While this may seem expensive, it might not be that bad > since we will cache the results of the selectivity calculation. In > fact, this is already the approach we take for parameterized join > paths (see get_parameterized_joinrel_size). Here is an updated version of this patch that fixes the rowcount estimate issue along this routine. (see set_joinpath_size.) Now the Nested Loop node looks like: -> Nested Loop (cost=3D1672.00..1840.60 rows=3D1000 width=3D12) (actual time=3D119.685..122.841 rows=3D1000 loops=3D1) Its rowcount estimate looks much more sane now. But wait, why are we using nestloop here? My experience suggests that hashjoin typically outperforms nestloop with input paths of this size on this type of dataset. The thing is, the first path (join-then-aggregate one) of the t1/t2 grouped join relation has a much fewer rowcount but more expensive costs: :path.rows 10 :path.disabled_nodes 0 :path.startup_cost 1672 :path.total_cost 1672.1 And the second path (aggregate-then-join one) has cheaper costs but more rows. :jpath.path.rows 10000 :jpath.path.disabled_nodes 0 :jpath.path.startup_cost 25.75 :jpath.path.total_cost 156.75 Both paths have survived the add_path() tournament for this relation, and the second one is selected as the cheapest path by set_cheapest, which mainly uses costs and then pathkeys as the selection criterion. The rowcount estimate is not taken into account, which is reasonable because unparameterized paths for the same relation usually have the same rowcount estimate. And when creating hashjoins, we only consider the cheapest input paths. This is why we are unable to generate a hashjoin with the first path. However, the situation changes with grouped relations, as different paths of a grouped relation can have very different row counts. To cope with this, I modified set_cheapest() to also find the fewest-row unparameterized path if the relation is a grouped relation, and include it in the cheapest_parameterized_paths list. It could be argued that this will increase the overall planning time a lot because it adds one more path to cheapest_parameterized_paths. But in many cases the fewest-row-path is the same path as cheapest_total_path, in which case we do not need to add it again. And now the plan becomes: explain (costs on) select sum(t2.c) from t t1 join t t2 on t1.a =3D t2.a join t t3 on t2.b =3D t3.b group by t3.a; QUERY PLAN ---------------------------------------------------------------------------= ------------------ Finalize HashAggregate (cost=3D1706.97..1707.07 rows=3D10 width=3D12) Group Key: t3.a -> Hash Join (cost=3D1672.22..1701.97 rows=3D1000 width=3D12) Hash Cond: (t3.b =3D t2.b) -> Seq Scan on t t3 (cost=3D0.00..16.00 rows=3D1000 width=3D8) -> Hash (cost=3D1672.10..1672.10 rows=3D10 width=3D12) -> Partial HashAggregate (cost=3D1672.00..1672.10 rows=3D10 width=3D12) Group Key: t2.b -> Hash Join (cost=3D28.50..1172.00 rows=3D100000 wi= dth=3D8) Hash Cond: (t1.a =3D t2.a) -> Seq Scan on t t1 (cost=3D0.00..16.00 rows=3D1000 width=3D4) -> Hash (cost=3D16.00..16.00 rows=3D1000 width= =3D12) -> Seq Scan on t t2 (cost=3D0.00..16.00 rows=3D1000 width=3D12) (13 rows) I believe this is the most optimal plan we can find for this query on this dataset. I also made some changes to how grouped relations are stored in this version of the patch. Thanks Richard --0000000000002801ee062311ce5b Content-Type: application/octet-stream; name="v12-0001-Implement-Eager-Aggregation.patch" Content-Disposition: attachment; filename="v12-0001-Implement-Eager-Aggregation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m1k6u8yx0 RnJvbSAyMDA3OGUyYjA5NDAyMzIzMzAyZDhhMjlmNDEyYjNlMGY0NmJmMDE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNTo1OToxOSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEy XSBJbXBsZW1lbnQgRWFnZXIgQWdncmVnYXRpb24KCkVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGEgcXVl cnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZSB0aGF0IHBhcnRpYWxseQpwdXNoZXMgYWdncmVnYXRp b24gcGFzdCBhIGpvaW4sIGFuZCBmaW5hbGl6ZXMgaXQgb25jZSBhbGwgdGhlCnJlbGF0aW9ucyBh cmUgam9pbmVkLiAgRWFnZXIgYWdncmVnYXRpb24gbWF5IHJlZHVjZSB0aGUgbnVtYmVyIG9mCmlu cHV0IHJvd3MgdG8gdGhlIGpvaW4gYW5kIHRodXMgY291bGQgcmVzdWx0IGluIGEgYmV0dGVyIG92 ZXJhbGwgcGxhbi4KCkEgcGxhbiB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIGxvb2tzIGxpa2U6Cgog RVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIGEuaSwgYXZnKGIueSkKIEZST00gYSBKT0lOIGIg T04gYS5pID0gYi5qCiBHUk9VUCBCWSBhLmk7CgogRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQogICBH cm91cCBLZXk6IGEuaQogICAtPiAgTmVzdGVkIExvb3AKICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQogICAgICAgICAgICAgICBHcm91cCBLZXk6IGIuagogICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gYgogICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFfcGtl eSBvbiBhCiAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpID0gYi5qKQoKRHVyaW5nIHRoZSBj b25zdHJ1Y3Rpb24gb2YgdGhlIGpvaW4gdHJlZSwgd2UgZXZhbHVhdGUgZWFjaCBiYXNlIG9yCmpv aW4gcmVsYXRpb24gdG8gZGV0ZXJtaW5lIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGNhbiBiZSBhcHBs aWVkLiAgSWYKZmVhc2libGUsIHdlIGNyZWF0ZSBhIHNlcGFyYXRlIFJlbE9wdEluZm8gY2FsbGVk IGEgImdyb3VwZWQgcmVsYXRpb24iCmFuZCBzdG9yZSBpdCBpbiBhIGRlZGljYXRlZCBsaXN0LgoK R3JvdXBlZCByZWxhdGlvbiBwYXRocyBjYW4gYmUgZ2VuZXJhdGVkIGluIHR3byB3YXlzLiAgVGhl IGZpcnN0IG1ldGhvZAppbnZvbHZlcyBhZGRpbmcgc29ydGVkIGFuZCBoYXNoZWQgcGFydGlhbCBh Z2dyZWdhdGlvbiBwYXRocyBvbiB0b3Agb2YKdGhlIG5vbi1ncm91cGVkIHBhdGhzLiAgVG8gbGlt aXQgcGxhbm5pbmcgdGltZSwgd2Ugb25seSBjb25zaWRlciB0aGUKY2hlYXBlc3Qgb3Igc3VpdGFi bHktc29ydGVkIG5vbi1ncm91cGVkIHBhdGhzIGR1cmluZyB0aGlzIHBoYXNlLgoKQWx0ZXJuYXRp dmVseSwgZ3JvdXBlZCBwYXRocyBjYW4gYmUgZ2VuZXJhdGVkIGJ5IGpvaW5pbmcgYSBncm91cGVk CnJlbGF0aW9uIHdpdGggYSBub24tZ3JvdXBlZCByZWxhdGlvbi4gIEpvaW5pbmcgdHdvIGdyb3Vw ZWQgcmVsYXRpb25zCmRvZXMgbm90IHNlZW0gdG8gYmUgdmVyeSB1c2VmdWwgYW5kIGlzIGN1cnJl bnRseSBub3Qgc3VwcG9ydGVkLgoKRm9yIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHRoYXQgaXMg cHVzaGVkIGRvd24gdG8gYSBub24tYWdncmVnYXRlZApyZWxhdGlvbiwgd2UgbmVlZCB0byBjb25z aWRlciBhbGwgZXhwcmVzc2lvbnMgZnJvbSB0aGlzIHJlbGF0aW9uIHRoYXQKYXJlIGludm9sdmVk IGluIHVwcGVyIGpvaW4gY2xhdXNlcyBhbmQgaW5jbHVkZSB0aGVtIGluIHRoZSBncm91cGluZwpr ZXlzLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGF2ZSB0aGUgY29ycmVjdCBpbnB1dCBmb3IgdGhl IHVwcGVyIGpvaW5zCmFuZCB0aGF0IGFuIGFnZ3JlZ2F0ZWQgcm93IGZyb20gdGhlIHBhcnRpYWwg YWdncmVnYXRpb24gbWF0Y2hlcyB0aGUKb3RoZXIgc2lkZSBvZiB0aGUgam9pbiBpZiBhbmQgb25s eSBpZiBlYWNoIHJvdyBpbiB0aGUgcGFydGlhbCBncm91cApkb2VzLCB3aGljaCBpcyBjcnVjaWFs IGZvciBtYWludGFpbmluZyBjb3JyZWN0bmVzcy4KCk9uZSByZXN0cmljdGlvbiBpcyB0aGF0IHdl IGNhbm5vdCBwdXNoIHBhcnRpYWwgYWdncmVnYXRpb24gZG93biB0byBhCnJlbGF0aW9uIHRoYXQg aXMgaW4gdGhlIG51bGxhYmxlIHNpZGUgb2YgYW4gb3V0ZXIgam9pbiwgYmVjYXVzZSB0aGUKTlVM TC1leHRlbmRlZCByb3dzIHByb2R1Y2VkIGJ5IHRoZSBvdXRlciBqb2luIHdvdWxkIG5vdCBiZSBh dmFpbGFibGUKd2hlbiB3ZSBwZXJmb3JtIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uLCB3aGlsZSB3 aXRoIGEKbm9uLWVhZ2VyLWFnZ3JlZ2F0aW9uIHBsYW4gdGhlc2Ugcm93cyBhcmUgYXZhaWxhYmxl IGZvciB0aGUgdG9wLWxldmVsCmFnZ3JlZ2F0aW9uLiAgUHVzaGluZyBwYXJ0aWFsIGFnZ3JlZ2F0 aW9uIGluIHRoaXMgY2FzZSBtYXkgcmVzdWx0IGluCnRoZSByb3dzIGJlaW5nIGdyb3VwZWQgZGlm ZmVyZW50bHkgdGhhbiBleHBlY3RlZCwgb3IgcHJvZHVjZSBpbmNvcnJlY3QKdmFsdWVzIGZyb20g dGhlIGFnZ3JlZ2F0ZSBmdW5jdGlvbnMuCgpJZiB3ZSBoYXZlIGdlbmVyYXRlZCBhIGdyb3VwZWQg cmVsYXRpb24gZm9yIHRoZSB0b3Btb3N0IGpvaW4gcmVsYXRpb24sCndlIGZpbmFsaXplIGl0cyBw YXRocyBhdCB0aGUgZW5kLiAgVGhlIGZpbmFsIHBhdGhzIHdpbGwgY29tcGV0ZSBpbiB0aGUKdXN1 YWwgd2F5IHdpdGggcGF0aHMgYnVpbHQgZnJvbSByZWd1bGFyIHBsYW5uaW5nLgoKU2luY2UgZWFn ZXIgYWdncmVnYXRpb24gY2FuIGdlbmVyYXRlIG1hbnkgZ3JvdXBlZCByZWxhdGlvbnMsIHdlCmlu dHJvZHVjZSBhIFJlbEluZm9MaXN0IHN0cnVjdHVyZSwgd2hpY2ggZW5jYXBzdWxhdGVzIGJvdGgg YSBsaXN0IGFuZAphIGhhc2ggdGFibGUsIHNvIHRoYXQgd2UgY2FuIGxldmVyYWdlIHRoZSBoYXNo IHRhYmxlIGZvciBmYXN0ZXIKbG9va3VwcyBub3Qgb25seSBmb3Igam9pbiByZWxhdGlvbnMgYnV0 IGFsc28gZm9yIGdyb3VwZWQgcmVsYXRpb25zLgoKRWFnZXIgYWdncmVnYXRpb24gY2FuIHVzZSBz aWduaWZpY2FudGx5IG1vcmUgQ1BVIHRpbWUgYW5kIG1lbW9yeSB0aGFuCnJlZ3VsYXIgcGxhbm5p bmcgd2hlbiB0aGUgcXVlcnkgaW52b2x2ZXMgYWdncmVnYXRlcyBhbmQgbWFueSBqb2luaW5nCnJl bGF0aW9ucy4gIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMsIHRoZSByZXN1bHRpbmcgcGxhbiBjYW4g YmUgbXVjaApiZXR0ZXIsIGp1c3RpZnlpbmcgdGhlIGFkZGl0aW9uYWwgcGxhbm5pbmcgZWZmb3J0 LiAgQWxsIHRoZSBzYW1lLCBmb3IKbm93LCB0dXJuIHRoaXMgZmVhdHVyZSBvZmYgYnkgZGVmYXVs dC4KLS0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAgICAgICAgfCAg ICAzICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvUkVBRE1FICAgICAgICAgICAgICAgICAgfCAg IDc5ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZhbC5jICAgICAgICB8ICAg OTggKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8ICA0 NDggKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgICAgICAg fCAgMTAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jICAgICAgICAg fCAgMTMxICsrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYyAgICAgICAg fCAgMjU5ICsrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgICAgICAg ICB8ICAgMTcgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICAgICAg ICB8ICAgOTkgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZGluZm8uYyAgICAg ICB8ICAgNjAgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyAgICAgICAg IHwgICA0NyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jICAgICAgICAg IHwgIDcwOCArKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAg ICAgICAgICB8ICAgMTAgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlIHwgICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAg ICAgICAgfCAgMTQyICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAgICAg ICAgICAgfCAgICA3ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oICAgICAgICAgICAg ICAgICB8ICAgIDUgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmggICAgICAgICAg ICAgIHwgICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5v dXQgfCAxMzA4ICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5 c3ZpZXdzLm91dCAgICAgICAgfCAgICAzICstCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3Nj aGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9lYWdlcl9h Z2dyZWdhdGUuc3FsICAgICAgfCAgMTkyICsrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICAgICAgIHwgICAgNyArLQogMjMgZmlsZXMgY2hhbmdlZCwgMzU3MiBpbnNl cnRpb25zKCspLCAxNTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvcmVncmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbAoKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv cG9zdGdyZXNfZmR3LmMKaW5kZXggYWRjNjI1NzZkMS4uNDhiMDQ4ODE4NCAxMDA2NDQKLS0tIGEv Y29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTYwOTIsNyArNjA5Miw4IEBAIGZvcmVpZ25fam9pbl9v ayhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwgSm9pblR5cGUgam9pbnR5 cGUsCiAJICovCiAJQXNzZXJ0KGZwaW5mby0+cmVsYXRpb25faW5kZXggPT0gMCk7CS8qIHNob3Vs ZG4ndCBiZSBzZXQgeWV0ICovCiAJZnBpbmZvLT5yZWxhdGlvbl9pbmRleCA9Ci0JCWxpc3RfbGVu Z3RoKHJvb3QtPnBhcnNlLT5ydGFibGUpICsgbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlz dCk7CisJCWxpc3RfbGVuZ3RoKHJvb3QtPnBhcnNlLT5ydGFibGUpICsKKwkJbGlzdF9sZW5ndGgo cm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMpOwogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvUkVBRE1FIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L1JFQURNRQppbmRleCAyYWI0ZjNkYmYzLi4wMDhjNzAwYWVhIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUK QEAgLTE0OTcsMyArMTQ5Nyw4MiBAQCBicmVha2luZyBkb3duIGFnZ3JlZ2F0aW9uIG9yIGdyb3Vw aW5nIG92ZXIgYSBwYXJ0aXRpb25lZCByZWxhdGlvbiBpbnRvCiBhZ2dyZWdhdGlvbiBvciBncm91 cGluZyBvdmVyIGl0cyBwYXJ0aXRpb25zIGlzIGNhbGxlZCBwYXJ0aXRpb253aXNlCiBhZ2dyZWdh dGlvbi4gIEVzcGVjaWFsbHkgd2hlbiB0aGUgcGFydGl0aW9uIGtleXMgbWF0Y2ggdGhlIEdST1VQ IEJZIGNsYXVzZSwKIHRoaXMgY2FuIGJlIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gdGhlIHJl Z3VsYXIgbWV0aG9kLgorCitFYWdlciBhZ2dyZWdhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0KKwor RWFnZXIgYWdncmVnYXRpb24gaXMgYSBxdWVyeSBvcHRpbWl6YXRpb24gdGVjaG5pcXVlIHRoYXQg cGFydGlhbGx5IHB1c2hlcworYWdncmVnYXRpb24gcGFzdCBhIGpvaW4sIGFuZCBmaW5hbGl6ZXMg aXQgb25jZSBhbGwgdGhlIHJlbGF0aW9ucyBhcmUgam9pbmVkLgorRWFnZXIgYWdncmVnYXRpb24g bWF5IHJlZHVjZSB0aGUgbnVtYmVyIG9mIGlucHV0IHJvd3MgdG8gdGhlIGpvaW4gYW5kIHRodXMK K2NvdWxkIHJlc3VsdCBpbiBhIGJldHRlciBvdmVyYWxsIHBsYW4uCisKK0ZvciBleGFtcGxlOgor CisgRVhQTEFJTiAoQ09TVFMgT0ZGKQorIFNFTEVDVCBhLmksIGF2ZyhiLnkpCisgRlJPTSBhIEpP SU4gYiBPTiBhLmkgPSBiLmoKKyBHUk9VUCBCWSBhLmk7CisKKyBGaW5hbGl6ZSBIYXNoQWdncmVn YXRlCisgICBHcm91cCBLZXk6IGEuaQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAg UGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IGIuagorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGIKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNj YW4gdXNpbmcgYV9wa2V5IG9uIGEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpID0gYi5q KQorCitJZiB0aGUgcGFydGlhbCBhZ2dyZWdhdGlvbiBvbiB0YWJsZSBCIHNpZ25pZmljYW50bHkg cmVkdWNlcyB0aGUgbnVtYmVyIG9mCitpbnB1dCByb3dzLCB0aGUgam9pbiBhYm92ZSB3aWxsIGJl IG11Y2ggY2hlYXBlciwgbGVhZGluZyB0byBhIG1vcmUgZWZmaWNpZW50CitmaW5hbCBwbGFuLgor CitGb3IgdGhlIHBhcnRpYWwgYWdncmVnYXRpb24gdGhhdCBpcyBwdXNoZWQgZG93biB0byBhIG5v bi1hZ2dyZWdhdGVkIHJlbGF0aW9uLAord2UgbmVlZCB0byBjb25zaWRlciBhbGwgZXhwcmVzc2lv bnMgZnJvbSB0aGlzIHJlbGF0aW9uIHRoYXQgYXJlIGludm9sdmVkIGluCit1cHBlciBqb2luIGNs YXVzZXMgYW5kIGluY2x1ZGUgdGhlbSBpbiB0aGUgZ3JvdXBpbmcga2V5cy4gIFRoaXMgZW5zdXJl cyB0aGF0IHdlCitoYXZlIHRoZSBjb3JyZWN0IGlucHV0IGZvciB0aGUgdXBwZXIgam9pbnMgYW5k IHRoYXQgYW4gYWdncmVnYXRlZCByb3cgZnJvbSB0aGUKK3BhcnRpYWwgYWdncmVnYXRpb24gbWF0 Y2hlcyB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgam9pbiBpZiBhbmQgb25seSBpZiBlYWNoIHJvdwor aW4gdGhlIHBhcnRpYWwgZ3JvdXAgZG9lcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5p bmcgY29ycmVjdG5lc3MuCisKK09uZSByZXN0cmljdGlvbiBpcyB0aGF0IHdlIGNhbm5vdCBwdXNo IHBhcnRpYWwgYWdncmVnYXRpb24gZG93biB0byBhIHJlbGF0aW9uCit0aGF0IGlzIGluIHRoZSBu dWxsYWJsZSBzaWRlIG9mIGFuIG91dGVyIGpvaW4sIGJlY2F1c2UgdGhlIE5VTEwtZXh0ZW5kZWQg cm93cworcHJvZHVjZWQgYnkgdGhlIG91dGVyIGpvaW4gd291bGQgbm90IGJlIGF2YWlsYWJsZSB3 aGVuIHdlIHBlcmZvcm0gdGhlIHBhcnRpYWwKK2FnZ3JlZ2F0aW9uLCB3aGlsZSB3aXRoIGEgbm9u LWVhZ2VyLWFnZ3JlZ2F0aW9uIHBsYW4gdGhlc2Ugcm93cyBhcmUgYXZhaWxhYmxlCitmb3IgdGhl IHRvcC1sZXZlbCBhZ2dyZWdhdGlvbi4gIFB1c2hpbmcgcGFydGlhbCBhZ2dyZWdhdGlvbiBpbiB0 aGlzIGNhc2UgbWF5CityZXN1bHQgaW4gdGhlIHJvd3MgYmVpbmcgZ3JvdXBlZCBkaWZmZXJlbnRs eSB0aGFuIGV4cGVjdGVkLCBvciBwcm9kdWNlCitpbmNvcnJlY3QgdmFsdWVzIGZyb20gdGhlIGFn Z3JlZ2F0ZSBmdW5jdGlvbnMuCisKK1dlIGNhbiBhbHNvIGFwcGx5IGVhZ2VyIGFnZ3JlZ2F0aW9u IHRvIGEgam9pbjoKKworIEVYUExBSU4gKENPU1RTIE9GRikKKyBTRUxFQ1QgYS5pLCBhdmcoYi55 ICsgYy56KQorIEZST00gYSBKT0lOIGIgT04gYS5pID0gYi5qCisgICAgICAgIEpPSU4gYyBPTiBi LmogPSBjLmkKKyBHUk9VUCBCWSBhLmk7CisKKyBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICBH cm91cCBLZXk6IGEuaQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgUGFydGlhbCBI YXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IGIuagorICAgICAgICAgICAg ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoYi5qID0g Yy5pKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGIKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gYworICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBhX3BrZXkgb24gYQor ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGkgPSBiLmopCisKK0R1cmluZyB0aGUgY29uc3Ry dWN0aW9uIG9mIHRoZSBqb2luIHRyZWUsIHdlIGV2YWx1YXRlIGVhY2ggYmFzZSBvciBqb2luCity ZWxhdGlvbiB0byBkZXRlcm1pbmUgaWYgZWFnZXIgYWdncmVnYXRpb24gY2FuIGJlIGFwcGxpZWQu ICBJZiBmZWFzaWJsZSwgd2UKK2NyZWF0ZSBhIHNlcGFyYXRlIFJlbE9wdEluZm8gY2FsbGVkIGEg Imdyb3VwZWQgcmVsYXRpb24iIGFuZCBnZW5lcmF0ZSBncm91cGVkCitwYXRocyBieSBhZGRpbmcg c29ydGVkIGFuZCBoYXNoZWQgcGFydGlhbCBhZ2dyZWdhdGlvbiBwYXRocyBvbiB0b3Agb2YgdGhl Citub24tZ3JvdXBlZCBwYXRocy4gIFRvIGxpbWl0IHBsYW5uaW5nIHRpbWUsIHdlIGNvbnNpZGVy IG9ubHkgdGhlIGNoZWFwZXN0Citub24tZ3JvdXBlZCBwYXRocyBpbiB0aGlzIHN0ZXAuCisKK0Fu b3RoZXIgd2F5IHRvIGdlbmVyYXRlIGdyb3VwZWQgcGF0aHMgaXMgdG8gam9pbiBhIGdyb3VwZWQg cmVsYXRpb24gd2l0aCBhCitub24tZ3JvdXBlZCByZWxhdGlvbi4gIEpvaW5pbmcgdHdvIGdyb3Vw ZWQgcmVsYXRpb25zIGRvZXMgbm90IHNlZW0gdG8gYmUgdmVyeQordXNlZnVsIGFuZCBpcyBjdXJy ZW50bHkgbm90IHN1cHBvcnRlZC4KKworSWYgd2UgaGF2ZSBnZW5lcmF0ZWQgYSBncm91cGVkIHJl bGF0aW9uIGZvciB0aGUgdG9wbW9zdCBqb2luIHJlbGF0aW9uLCB3ZSBuZWVkCit0byBmaW5hbGl6 ZSBpdHMgcGF0aHMgYXQgdGhlIGVuZC4gIFRoZSBmaW5hbCBwYXRocyB3aWxsIGNvbXBldGUgaW4g dGhlIHVzdWFsCit3YXkgd2l0aCBwYXRocyBidWlsdCBmcm9tIHJlZ3VsYXIgcGxhbm5pbmcuCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZhbC5jCmluZGV4IGQyZjdmNGU1ZjMuLmNkYzk1 NDMxMzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZhbC5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZhbC5jCkBAIC0zOSwxMCAr MzksMjAgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQlzaXplOwkJCS8qIG51bWJlciBvZiBpbnB1 dCByZWxhdGlvbnMgaW4gY2x1bXAgKi8KIH0gQ2x1bXA7CiAKKy8qIFRoZSBvcmlnaW5hbCBsZW5n dGggYW5kIGhhc2h0YWJsZSBvZiBhIFJlbEluZm9MaXN0ICovCit0eXBlZGVmIHN0cnVjdAorewor CWludAkJCXNhdmVsZW5ndGg7CisJc3RydWN0IEhUQUIgKnNhdmVoYXNoOworfSBSZWxJbmZvTGlz dEluZm87CisKIHN0YXRpYyBMaXN0ICptZXJnZV9jbHVtcChQbGFubmVySW5mbyAqcm9vdCwgTGlz dCAqY2x1bXBzLCBDbHVtcCAqbmV3X2NsdW1wLAogCQkJCQkJIGludCBudW1fZ2VuZSwgYm9vbCBm b3JjZSk7CiBzdGF0aWMgYm9vbCBkZXNpcmFibGVfam9pbihQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSAgIFJlbE9wdEluZm8gKm91dGVyX3JlbCwgUmVsT3B0SW5mbyAqaW5uZXJfcmVsKTsKK3N0 YXRpYyBSZWxJbmZvTGlzdEluZm8gc2F2ZV9yZWxpbmZvbGlzdChSZWxJbmZvTGlzdCAqcmVsaW5m b19saXN0KTsKK3N0YXRpYyB2b2lkIHJlc3RvcmVfcmVsaW5mb2xpc3QoUmVsSW5mb0xpc3QgKnJl bGluZm9fbGlzdCwKKwkJCQkJCQkJUmVsSW5mb0xpc3RJbmZvICppbmZvKTsKIAogCiAvKgpAQCAt NjAsOCArNzAsOCBAQCBnZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3QsIEdlbmUgKnRvdXIsIGlu dCBudW1fZ2VuZSkKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlSZWxPcHRJbmZvICpqb2lucmVs OwogCUNvc3QJCWZpdG5lc3M7Ci0JaW50CQkJc2F2ZWxlbmd0aDsKLQlzdHJ1Y3QgSFRBQiAqc2F2 ZWhhc2g7CisJUmVsSW5mb0xpc3RJbmZvIHNhdmVfam9pbl9yZWw7CisJUmVsSW5mb0xpc3RJbmZv IHNhdmVfZ3JvdXBlZF9yZWw7CiAKIAkvKgogCSAqIENyZWF0ZSBhIHByaXZhdGUgbWVtb3J5IGNv bnRleHQgdGhhdCB3aWxsIGhvbGQgYWxsIHRlbXAgc3RvcmFnZQpAQCAtNzgsMjUgKzg4LDI5IEBA IGdlcW9fZXZhbChQbGFubmVySW5mbyAqcm9vdCwgR2VuZSAqdG91ciwgaW50IG51bV9nZW5lKQog CW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhteWNvbnRleHQpOwogCiAJLyoKLQkgKiBn aW1tZV90cmVlIHdpbGwgYWRkIGVudHJpZXMgdG8gcm9vdC0+am9pbl9yZWxfbGlzdCwgd2hpY2gg bWF5IG9yIG1heQotCSAqIG5vdCBhbHJlYWR5IGNvbnRhaW4gc29tZSBlbnRyaWVzLiAgVGhlIG5l d2x5IGFkZGVkIGVudHJpZXMgd2lsbCBiZQotCSAqIHJlY3ljbGVkIGJ5IHRoZSBNZW1vcnlDb250 ZXh0RGVsZXRlIGJlbG93LCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRoZQotCSAqIGxpc3QgaXMg cmVzdG9yZWQgdG8gaXRzIGZvcm1lciBzdGF0ZSBiZWZvcmUgZXhpdGluZy4gIFdlIGNhbiBkbyB0 aGlzIGJ5Ci0JICogdHJ1bmNhdGluZyB0aGUgbGlzdCB0byBpdHMgb3JpZ2luYWwgbGVuZ3RoLiAg Tk9URSB0aGlzIGFzc3VtZXMgdGhhdCBhbnkKLQkgKiBhZGRlZCBlbnRyaWVzIGFyZSBhcHBlbmRl ZCBhdCB0aGUgZW5kIQorCSAqIGdpbW1lX3RyZWUgd2lsbCBhZGQgZW50cmllcyB0byByb290LT5q b2luX3JlbF9saXN0IGFuZAorCSAqIHJvb3QtPmdyb3VwZWRfcmVsX2xpc3QsIHdoaWNoIG1heSBv ciBtYXkgbm90IGFscmVhZHkgY29udGFpbiBzb21lCisJICogZW50cmllcy4gIFRoZSBuZXdseSBh ZGRlZCBlbnRyaWVzIHdpbGwgYmUgcmVjeWNsZWQgYnkgdGhlCisJICogTWVtb3J5Q29udGV4dERl bGV0ZSBiZWxvdywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCBlYWNoIGxpc3Qgd2l0aGluIHRoZQor CSAqIFJlbEluZm9MaXN0IHN0cnVjdHVyZXMgaXMgcmVzdG9yZWQgdG8gaXRzIGZvcm1lciBzdGF0 ZSBiZWZvcmUgZXhpdGluZy4KKwkgKiBXZSBjYW4gZG8gdGhpcyBieSB0cnVuY2F0aW5nIGVhY2gg bGlzdCB0byBpdHMgb3JpZ2luYWwgbGVuZ3RoLiAgTk9URQorCSAqIHRoaXMgYXNzdW1lcyB0aGF0 IGFueSBhZGRlZCBlbnRyaWVzIGFyZSBhcHBlbmRlZCBhdCB0aGUgZW5kIQogCSAqCi0JICogV2Ug YWxzbyBtdXN0IHRha2UgY2FyZSBub3QgdG8gbWVzcyB1cCB0aGUgb3V0ZXIgam9pbl9yZWxfaGFz aCwgaWYgdGhlcmUKLQkgKiBpcyBvbmUuICBXZSBjYW4gZG8gdGhpcyBieSBqdXN0IHRlbXBvcmFy aWx5IHNldHRpbmcgdGhlIGxpbmsgdG8gTlVMTC4KLQkgKiAoSWYgd2UgYXJlIGRlYWxpbmcgd2l0 aCBlbm91Z2ggam9pbiByZWxzLCB3aGljaCB3ZSB2ZXJ5IGxpa2VseSBhcmUsIGEKLQkgKiBuZXcg aGFzaCB0YWJsZSB3aWxsIGdldCBidWlsdCBhbmQgdXNlZCBsb2NhbGx5LikKKwkgKiBXZSBhbHNv IG11c3QgdGFrZSBjYXJlIG5vdCB0byBtZXNzIHVwIHRoZSBvdXRlciBoYXNoIHRhYmxlcyB3aXRo aW4gdGhlCisJICogUmVsSW5mb0xpc3Qgc3RydWN0dXJlcywgaWYgYW55LiAgV2UgY2FuIGRvIHRo aXMgYnkganVzdCB0ZW1wb3JhcmlseQorCSAqIHNldHRpbmcgZWFjaCBsaW5rIHRvIE5VTEwuICAo SWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBlbm91Z2ggam9pbiByZWxzIG9yCisJICogZ3JvdXBlZCBy ZWxzLCB3aGljaCB3ZSB2ZXJ5IGxpa2VseSBhcmUsIG5ldyBoYXNoIHRhYmxlcyB3aWxsIGdldCBi dWlsdAorCSAqIGFuZCB1c2VkIGxvY2FsbHkuKQogCSAqCiAJICogam9pbl9yZWxfbGV2ZWxbXSBz aG91bGRuJ3QgYmUgaW4gdXNlLCBzbyBqdXN0IEFzc2VydCBpdCBpc24ndC4KIAkgKi8KLQlzYXZl bGVuZ3RoID0gbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCk7Ci0Jc2F2ZWhhc2ggPSBy b290LT5qb2luX3JlbF9oYXNoOworCXNhdmVfam9pbl9yZWwgPSBzYXZlX3JlbGluZm9saXN0KHJv b3QtPmpvaW5fcmVsX2xpc3QpOworCXNhdmVfZ3JvdXBlZF9yZWwgPSBzYXZlX3JlbGluZm9saXN0 KHJvb3QtPmdyb3VwZWRfcmVsX2xpc3QpOworCiAJQXNzZXJ0KHJvb3QtPmpvaW5fcmVsX2xldmVs ID09IE5VTEwpOwogCi0Jcm9vdC0+am9pbl9yZWxfaGFzaCA9IE5VTEw7CisJcm9vdC0+am9pbl9y ZWxfbGlzdC0+aGFzaCA9IE5VTEw7CisJcm9vdC0+Z3JvdXBlZF9yZWxfbGlzdC0+aGFzaCA9IE5V TEw7CiAKIAkvKiBjb25zdHJ1Y3QgdGhlIGJlc3QgcGF0aCBmb3IgdGhlIGdpdmVuIGNvbWJpbmF0 aW9uIG9mIHJlbGF0aW9ucyAqLwogCWpvaW5yZWwgPSBnaW1tZV90cmVlKHJvb3QsIHRvdXIsIG51 bV9nZW5lKTsKQEAgLTExOCwxMiArMTMyLDExIEBAIGdlcW9fZXZhbChQbGFubmVySW5mbyAqcm9v dCwgR2VuZSAqdG91ciwgaW50IG51bV9nZW5lKQogCQlmaXRuZXNzID0gREJMX01BWDsKIAogCS8q Ci0JICogUmVzdG9yZSBqb2luX3JlbF9saXN0IHRvIGl0cyBmb3JtZXIgc3RhdGUsIGFuZCBwdXQg YmFjayBvcmlnaW5hbAotCSAqIGhhc2h0YWJsZSBpZiBhbnkuCisJICogUmVzdG9yZSBlYWNoIG9m IHRoZSBsaXN0IGluIGpvaW5fcmVsX2xpc3QgYW5kIGdyb3VwZWRfcmVsX2xpc3QgdG8gaXRzCisJ ICogZm9ybWVyIHN0YXRlLCBhbmQgcHV0IGJhY2sgb3JpZ2luYWwgaGFzaHRhYmxlcyBpZiBhbnku CiAJICovCi0Jcm9vdC0+am9pbl9yZWxfbGlzdCA9IGxpc3RfdHJ1bmNhdGUocm9vdC0+am9pbl9y ZWxfbGlzdCwKLQkJCQkJCQkJCQlzYXZlbGVuZ3RoKTsKLQlyb290LT5qb2luX3JlbF9oYXNoID0g c2F2ZWhhc2g7CisJcmVzdG9yZV9yZWxpbmZvbGlzdChyb290LT5qb2luX3JlbF9saXN0LCAmc2F2 ZV9qb2luX3JlbCk7CisJcmVzdG9yZV9yZWxpbmZvbGlzdChyb290LT5ncm91cGVkX3JlbF9saXN0 LCAmc2F2ZV9ncm91cGVkX3JlbCk7CiAKIAkvKiByZWxlYXNlIGFsbCB0aGUgbWVtb3J5IGFjcXVp cmVkIHdpdGhpbiBnaW1tZV90cmVlICovCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7 CkBAIC0yNzksNiArMjkyLDI3IEBAIG1lcmdlX2NsdW1wKFBsYW5uZXJJbmZvICpyb290LCBMaXN0 ICpjbHVtcHMsIENsdW1wICpuZXdfY2x1bXAsIGludCBudW1fZ2VuZSwKIAkJCQkvKiBGaW5kIGFu ZCBzYXZlIHRoZSBjaGVhcGVzdCBwYXRocyBmb3IgdGhpcyBqb2lucmVsICovCiAJCQkJc2V0X2No ZWFwZXN0KGpvaW5yZWwpOwogCisJCQkJLyoKKwkJCQkgKiBFeGNlcHQgZm9yIHRoZSB0b3Btb3N0 IHNjYW4vam9pbiByZWwsIGNvbnNpZGVyIGdlbmVyYXRpbmcKKwkJCQkgKiBwYXJ0aWFsIGFnZ3Jl Z2F0aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiBvbiB0b3AKKwkJCQkgKiBvZiB0 aGUgcGF0aHMgb2YgdGhpcyByZWwuICBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIGNyZWF0aW5nCisJ CQkJICogcGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uLCBzbyBydW4gc2V0X2NoZWFwZXN0 KCkuCisJCQkJICovCisJCQkJaWYgKCFibXNfZXF1YWwoam9pbnJlbC0+cmVsaWRzLCByb290LT5h bGxfcXVlcnlfcmVscykpCisJCQkJeworCQkJCQlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKwor CQkJCQlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbC0+cmVsaWRz KTsKKwkJCQkJaWYgKHJlbF9ncm91cGVkKQorCQkJCQl7CisJCQkJCQlBc3NlcnQoSVNfR1JPVVBF RF9SRUwocmVsX2dyb3VwZWQpKTsKKworCQkJCQkJZ2VuZXJhdGVfZ3JvdXBlZF9wYXRocyhyb290 LCByZWxfZ3JvdXBlZCwgam9pbnJlbCwKKwkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQtPmFnZ19p bmZvKTsKKwkJCQkJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJCQkJCX0KKwkJCQl9CisK IAkJCQkvKiBBYnNvcmIgbmV3IGNsdW1wIGludG8gb2xkICovCiAJCQkJb2xkX2NsdW1wLT5qb2lu cmVsID0gam9pbnJlbDsKIAkJCQlvbGRfY2x1bXAtPnNpemUgKz0gbmV3X2NsdW1wLT5zaXplOwpA QCAtMzM2LDMgKzM3MCwyNyBAQCBkZXNpcmFibGVfam9pbihQbGFubmVySW5mbyAqcm9vdCwKIAkv KiBPdGhlcndpc2UgcG9zdHBvbmUgdGhlIGpvaW4gdGlsbCBsYXRlci4gKi8KIAlyZXR1cm4gZmFs c2U7CiB9CisKKy8qCisgKiBTYXZlIHRoZSBvcmlnaW5hbCBsZW5ndGggYW5kIGhhc2h0YWJsZSBv ZiBhIFJlbEluZm9MaXN0LgorICovCitzdGF0aWMgUmVsSW5mb0xpc3RJbmZvCitzYXZlX3JlbGlu Zm9saXN0KFJlbEluZm9MaXN0ICpyZWxpbmZvX2xpc3QpCit7CisJUmVsSW5mb0xpc3RJbmZvIGlu Zm87CisKKwlpbmZvLnNhdmVsZW5ndGggPSBsaXN0X2xlbmd0aChyZWxpbmZvX2xpc3QtPml0ZW1z KTsKKwlpbmZvLnNhdmVoYXNoID0gcmVsaW5mb19saXN0LT5oYXNoOworCisJcmV0dXJuIGluZm87 Cit9CisKKy8qCisgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBsZW5ndGggYW5kIGhhc2h0YWJsZSBv ZiBhIFJlbEluZm9MaXN0LgorICovCitzdGF0aWMgdm9pZAorcmVzdG9yZV9yZWxpbmZvbGlzdChS ZWxJbmZvTGlzdCAqcmVsaW5mb19saXN0LCBSZWxJbmZvTGlzdEluZm8gKmluZm8pCit7CisJcmVs aW5mb19saXN0LT5pdGVtcyA9IGxpc3RfdHJ1bmNhdGUocmVsaW5mb19saXN0LT5pdGVtcywgaW5m by0+c2F2ZWxlbmd0aCk7CisJcmVsaW5mb19saXN0LT5oYXNoID0gaW5mby0+c2F2ZWhhc2g7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCAxNzJlZGI2NDNhLi4xYmQy ZTYzYzZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTQwLDYgKzQw LDcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIv cGxhbmNhdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAib3B0 aW1pemVyL3ByZXAuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKICNpbmNsdWRlICJw YXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgpAQCAt NDcsNiArNDgsNyBAQAogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJy ZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2lu Y2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCiAKIAogLyogQml0bWFzayBmbGFncyBmb3IgcHVzaGRv d25fc2FmZXR5X2luZm8udW5zYWZlRmxhZ3MgKi8KQEAgLTc3LDYgKzc5LDcgQEAgdHlwZWRlZiBl bnVtIHB1c2hkb3duX3NhZmVfdHlwZQogCiAvKiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYnkg R1VDICovCiBib29sCQllbmFibGVfZ2VxbyA9IGZhbHNlOwkvKiBqdXN0IGluIGNhc2UgR1VDIGRv ZXNuJ3Qgc2V0IGl0ICovCitib29sCQllbmFibGVfZWFnZXJfYWdncmVnYXRlID0gZmFsc2U7CiBp bnQJCQlnZXFvX3RocmVzaG9sZDsKIGludAkJCW1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU7 CiBpbnQJCQltaW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplOwpAQCAtOTAsNiArOTMsNyBAQCBq b2luX3NlYXJjaF9ob29rX3R5cGUgam9pbl9zZWFyY2hfaG9vayA9IE5VTEw7CiAKIHN0YXRpYyB2 b2lkIHNldF9iYXNlX3JlbF9jb25zaWRlcl9zdGFydHVwKFBsYW5uZXJJbmZvICpyb290KTsKIHN0 YXRpYyB2b2lkIHNldF9iYXNlX3JlbF9zaXplcyhQbGFubmVySW5mbyAqcm9vdCk7CitzdGF0aWMg dm9pZCBzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQbGFubmVySW5mbyAqcm9vdCk7CiBzdGF0aWMg dm9pZCBzZXRfYmFzZV9yZWxfcGF0aGxpc3RzKFBsYW5uZXJJbmZvICpyb290KTsKIHN0YXRpYyB2 b2lkIHNldF9yZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJ CQkJIEluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKQEAgLTExNCw2ICsxMTgsNyBAQCBz dGF0aWMgdm9pZCBzZXRfYXBwZW5kX3JlbF9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCQkJCQkJCUluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKIHN0YXRp YyB2b2lkIHNldF9hcHBlbmRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCQkJCQkJCQlJbmRleCBydGksIFJhbmdlVGJsRW50cnkgKnJ0ZSk7CitzdGF0 aWMgdm9pZCBzZXRfZ3JvdXBlZF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCk7CiBzdGF0aWMgdm9pZCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJIExpc3QgKmxpdmVf Y2hpbGRyZWxzLAogCQkJCQkJCQkJCSBMaXN0ICphbGxfY2hpbGRfcGF0aGtleXMpOwpAQCAtMTgy LDYgKzE4NywxMSBAQCBtYWtlX29uZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmpvaW5s aXN0KQogCSAqLwogCXNldF9iYXNlX3JlbF9zaXplcyhyb290KTsKIAorCS8qCisJICogQnVpbGQg Z3JvdXBlZCBiYXNlIHJlbGF0aW9ucyBmb3IgZWFjaCBiYXNlIHJlbCBpZiBwb3NzaWJsZS4KKwkg Ki8KKwlzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhyb290KTsKKwogCS8qCiAJICogV2Ugc2hvdWxk IG5vdyBoYXZlIHNpemUgZXN0aW1hdGVzIGZvciBldmVyeSBhY3R1YWwgdGFibGUgaW52b2x2ZWQg aW4KIAkgKiB0aGUgcXVlcnksIGFuZCB3ZSBhbHNvIGtub3cgd2hpY2ggaWYgYW55IGhhdmUgYmVl biBkZWxldGVkIGZyb20gdGhlCkBAIC0zMjMsNiArMzMzLDQ1IEBAIHNldF9iYXNlX3JlbF9zaXpl cyhQbGFubmVySW5mbyAqcm9vdCkKIAl9CiB9CiAKKy8qCisgKiBzZXR1cF9iYXNlX2dyb3VwZWRf cmVscworICoJICBGb3IgZWFjaCAicGxhaW4iIGJhc2UgcmVsYXRpb24sIGJ1aWxkIGEgZ3JvdXBl ZCBiYXNlIHJlbGF0aW9uIGlmIGVhZ2VyCisgKgkgIGFnZ3JlZ2F0aW9uIGlzIHBvc3NpYmxlIGFu ZCBpZiB0aGlzIHJlbGF0aW9uIGNhbiBwcm9kdWNlIGdyb3VwZWQgcGF0aHMuCisgKi8KK3N0YXRp YyB2b2lkCitzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQbGFubmVySW5mbyAqcm9vdCkKK3sKKwlJ bmRleAkJcnRpOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gYWdncmVnYXRlIGV4cHJlc3Np b25zIG9yIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5v dCBwb3NzaWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2NsYXVzZV9saXN0ID09IE5JTCB8fAor CQlyb290LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwlmb3IgKHJ0aSA9 IDE7IHJ0aSA8IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZTsgcnRpKyspCisJeworCQlSZWxP cHRJbmZvICpyZWwgPSByb290LT5zaW1wbGVfcmVsX2FycmF5W3J0aV07CisJCVJlbE9wdEluZm8g KnJlbF9ncm91cGVkOworCisJCS8qIHRoZXJlIG1heSBiZSBlbXB0eSBzbG90cyBjb3JyZXNwb25k aW5nIHRvIG5vbi1iYXNlcmVsIFJURXMgKi8KKwkJaWYgKHJlbCA9PSBOVUxMKQorCQkJY29udGlu dWU7CisKKwkJQXNzZXJ0KHJlbC0+cmVsaWQgPT0gcnRpKTsJLyogc2FuaXR5IGNoZWNrIG9uIGFy cmF5ICovCisJCUFzc2VydChJU19TSU1QTEVfUkVMKHJlbCkpOyAvKiBzYW5pdHkgY2hlY2sgb24g cmVsICovCisKKwkJcmVsX2dyb3VwZWQgPSBidWlsZF9zaW1wbGVfZ3JvdXBlZF9yZWwocm9vdCwg cmVsKTsKKwkJaWYgKHJlbF9ncm91cGVkKQorCQl7CisJCQkvKiBNYWtlIHRoZSBncm91cGVkIHJl bGF0aW9uIGF2YWlsYWJsZSBmb3Igam9pbmluZy4gKi8KKwkJCWFkZF9ncm91cGVkX3JlbChyb290 LCByZWxfZ3JvdXBlZCk7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBzZXRfYmFzZV9yZWxfcGF0aGxp c3RzCiAgKgkgIEZpbmRzIGFsbCBwYXRocyBhdmFpbGFibGUgZm9yIHNjYW5uaW5nIGVhY2ggYmFz ZS1yZWxhdGlvbiBlbnRyeS4KQEAgLTU1OSw2ICs2MDgsMTUgQEAgc2V0X3JlbF9wYXRobGlzdChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCS8qIE5vdyBmaW5kIHRoZSBjaGVh cGVzdCBvZiB0aGUgcGF0aHMgZm9yIHRoaXMgcmVsICovCiAJc2V0X2NoZWFwZXN0KHJlbCk7CiAK KwkvKgorCSAqIElmIGEgZ3JvdXBlZCByZWxhdGlvbiBmb3IgdGhpcyByZWwgZXhpc3RzLCBidWls ZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uCisJICogcGF0aHMgZm9yIGl0LgorCSAqCisJICogTm90ZSB0 aGF0IHRoaXMgY2FuIG9ubHkgaGFwcGVuIGFmdGVyIHdlJ3ZlIGNhbGxlZCBzZXRfY2hlYXBlc3Qo KSBmb3IKKwkgKiB0aGlzIGJhc2UgcmVsLCBiZWNhdXNlIHdlIG5lZWQgaXRzIGNoZWFwZXN0IHBh dGhzLgorCSAqLworCXNldF9ncm91cGVkX3JlbF9wYXRobGlzdChyb290LCByZWwpOworCiAjaWZk ZWYgT1BUSU1JWkVSX0RFQlVHCiAJcHByaW50KHJlbCk7CiAjZW5kaWYKQEAgLTEyOTgsNiArMTM1 NiwzNiBAQCBzZXRfYXBwZW5kX3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCWFkZF9wYXRoc190b19hcHBlbmRfcmVsKHJvb3QsIHJlbCwgbGl2ZV9jaGls ZHJlbHMpOwogfQogCisvKgorICogc2V0X2dyb3VwZWRfcmVsX3BhdGhsaXN0CisgKgkgIElmIGEg Z3JvdXBlZCByZWxhdGlvbiBmb3IgdGhlIGdpdmVuICdyZWwnIGV4aXN0cywgYnVpbGQgcGFydGlh bAorICoJICBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgaXQuCisgKi8KK3N0YXRpYyB2b2lkCitzZXRf Z3JvdXBlZF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkK K3sKKwlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5v IGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBvciBncm91cGluZyBleHByZXNzaW9ucywgZWFnZXIKKwkg KiBhZ2dyZWdhdGlvbiBpcyBub3QgcG9zc2libGUuCisJICovCisJaWYgKHJvb3QtPmFnZ19jbGF1 c2VfbGlzdCA9PSBOSUwgfHwKKwkJcm9vdC0+Z3JvdXBfZXhwcl9saXN0ID09IE5JTCkKKwkJcmV0 dXJuOworCisJLyogQWRkIHBhdGhzIHRvIHRoZSBncm91cGVkIGJhc2UgcmVsYXRpb24gaWYgb25l IGV4aXN0cy4gKi8KKwlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwgcmVsLT5y ZWxpZHMpOworCWlmIChyZWxfZ3JvdXBlZCkKKwl7CisJCUFzc2VydChJU19HUk9VUEVEX1JFTChy ZWxfZ3JvdXBlZCkpOworCisJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3Vw ZWQsIHJlbCwKKwkJCQkJCQkgICByZWxfZ3JvdXBlZC0+YWdnX2luZm8pOworCQlzZXRfY2hlYXBl c3QocmVsX2dyb3VwZWQpOworCX0KK30KKwogCiAvKgogICogYWRkX3BhdGhzX3RvX2FwcGVuZF9y ZWwKQEAgLTMzMDYsNiArMzM5NCwzMTEgQEAgZ2VuZXJhdGVfdXNlZnVsX2dhdGhlcl9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBib29sIG92ZXJyaWRlX3IKIAl9CiB9 CiAKKy8qCisgKiBnZW5lcmF0ZV9ncm91cGVkX3BhdGhzCisgKgkJR2VuZXJhdGUgcGF0aHMgZm9y IGEgZ3JvdXBlZCByZWxhdGlvbiBieSBhZGRpbmcgc29ydGVkIGFuZCBoYXNoZWQKKyAqCQlwYXJ0 aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiBwYXRocyBvZiB0aGUgcGxhaW4gYmFzZSBv ciBqb2luCisgKgkJcmVsYXRpb24uCisgKgorICogVGhlIGluZm9ybWF0aW9uIG5lZWRlZCBhcmUg cHJvdmlkZWQgYnkgdGhlIFJlbEFnZ0luZm8gc3RydWN0dXJlLgorICovCit2b2lkCitnZW5lcmF0 ZV9ncm91cGVkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWxfZ3JvdXBl ZCwKKwkJCQkJICAgUmVsT3B0SW5mbyAqcmVsX3BsYWluLCBSZWxBZ2dJbmZvICphZ2dfaW5mbykK K3sKKwlBZ2dDbGF1c2VDb3N0cyBhZ2dfY29zdHM7CisJYm9vbAkJY2FuX2hhc2g7CisJYm9vbAkJ Y2FuX3NvcnQ7CisJUGF0aAkgICAqY2hlYXBlc3RfdG90YWxfcGF0aCA9IE5VTEw7CisJUGF0aAkg ICAqY2hlYXBlc3RfcGFydGlhbF9wYXRoID0gTlVMTDsKKwlkb3VibGUJCWROdW1Hcm91cHMgPSAw OworCWRvdWJsZQkJZE51bVBhcnRpYWxHcm91cHMgPSAwOworCisJaWYgKElTX0RVTU1ZX1JFTChy ZWxfcGxhaW4pKQorCXsKKwkJbWFya19kdW1teV9yZWwocmVsX2dyb3VwZWQpOworCQlyZXR1cm47 CisJfQorCisJTWVtU2V0KCZhZ2dfY29zdHMsIDAsIHNpemVvZihBZ2dDbGF1c2VDb3N0cykpOwor CWdldF9hZ2dfY2xhdXNlX2Nvc3RzKHJvb3QsIEFHR1NQTElUX0lOSVRJQUxfU0VSSUFMLCAmYWdn X2Nvc3RzKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBwb3NzaWJsZSB0byBw ZXJmb3JtIHNvcnQtYmFzZWQgaW1wbGVtZW50YXRpb25zCisJICogb2YgZ3JvdXBpbmcuCisJICov CisJY2FuX3NvcnQgPSBncm91cGluZ19pc19zb3J0YWJsZShhZ2dfaW5mby0+Z3JvdXBfY2xhdXNl cyk7CisKKwkvKgorCSAqIERldGVybWluZSB3aGV0aGVyIHdlIHNob3VsZCBjb25zaWRlciBoYXNo LWJhc2VkIGltcGxlbWVudGF0aW9ucyBvZgorCSAqIGdyb3VwaW5nLgorCSAqLworCUFzc2VydChy b290LT5udW1PcmRlcmVkQWdncyA9PSAwKTsKKwljYW5faGFzaCA9IChhZ2dfaW5mby0+Z3JvdXBf Y2xhdXNlcyAhPSBOSUwgJiYKKwkJCQlncm91cGluZ19pc19oYXNoYWJsZShhZ2dfaW5mby0+Z3Jv dXBfY2xhdXNlcykpOworCisJLyoKKwkgKiBDb25zaWRlciB3aGV0aGVyIHdlIHNob3VsZCBnZW5l cmF0ZSBwYXJ0aWFsbHkgYWdncmVnYXRlZCBub24tcGFydGlhbAorCSAqIHBhdGhzLiAgV2UgY2Fu IG9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIGEgbm9uLXBhcnRpYWwgcGF0aC4KKwkgKi8KKwlpZiAo cmVsX3BsYWluLT5wYXRobGlzdCAhPSBOSUwpCisJeworCQljaGVhcGVzdF90b3RhbF9wYXRoID0g cmVsX3BsYWluLT5jaGVhcGVzdF90b3RhbF9wYXRoOworCQlBc3NlcnQoY2hlYXBlc3RfdG90YWxf cGF0aCAhPSBOVUxMKTsKKwl9CisKKwkvKgorCSAqIElmIHBhcmFsbGVsaXNtIGlzIHBvc3NpYmxl IGZvciByZWxfZ3JvdXBlZCwgdGhlbiB3ZSBzaG91bGQgY29uc2lkZXIKKwkgKiBnZW5lcmF0aW5n IHBhcnRpYWxseS1ncm91cGVkIHBhcnRpYWwgcGF0aHMuICBIb3dldmVyLCBpZiB0aGUgcGxhaW4g cmVsCisJICogaGFzIG5vIHBhcnRpYWwgcGF0aHMsIHRoZW4gd2UgY2FuJ3QuCisJICovCisJaWYg KHJlbF9ncm91cGVkLT5jb25zaWRlcl9wYXJhbGxlbCAmJiByZWxfcGxhaW4tPnBhcnRpYWxfcGF0 aGxpc3QgIT0gTklMKQorCXsKKwkJY2hlYXBlc3RfcGFydGlhbF9wYXRoID0gbGluaXRpYWwocmVs X3BsYWluLT5wYXJ0aWFsX3BhdGhsaXN0KTsKKwkJQXNzZXJ0KGNoZWFwZXN0X3BhcnRpYWxfcGF0 aCAhPSBOVUxMKTsKKwl9CisKKwkvKiBFc3RpbWF0ZSBudW1iZXIgb2YgcGFydGlhbCBncm91cHMu ICovCisJaWYgKGNoZWFwZXN0X3RvdGFsX3BhdGggIT0gTlVMTCkKKwkJZE51bUdyb3VwcyA9IGVz dGltYXRlX251bV9ncm91cHMocm9vdCwKKwkJCQkJCQkJCQkgYWdnX2luZm8tPmdyb3VwX2V4cHJz LAorCQkJCQkJCQkJCSBjaGVhcGVzdF90b3RhbF9wYXRoLT5yb3dzLAorCQkJCQkJCQkJCSBOVUxM LCBOVUxMKTsKKwlpZiAoY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpCisJCWROdW1QYXJ0 aWFsR3JvdXBzID0gZXN0aW1hdGVfbnVtX2dyb3Vwcyhyb290LAorCQkJCQkJCQkJCQkJYWdnX2lu Zm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCQkJY2hlYXBlc3RfcGFydGlhbF9wYXRoLT5yb3dz LAorCQkJCQkJCQkJCQkJTlVMTCwgTlVMTCk7CisKKwlpZiAoY2FuX3NvcnQgJiYgY2hlYXBlc3Rf dG90YWxfcGF0aCAhPSBOVUxMKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyoKKwkJICog VXNlIGFueSBhdmFpbGFibGUgc3VpdGFibHktc29ydGVkIHBhdGggYXMgaW5wdXQsIGFuZCBhbHNv IGNvbnNpZGVyCisJCSAqIHNvcnRpbmcgdGhlIGNoZWFwZXN0LXRvdGFsIHBhdGguCisJCSAqLwor CQlmb3JlYWNoKGxjLCByZWxfcGxhaW4tPnBhdGhsaXN0KQorCQl7CisJCQlQYXRoCSAgICppbnB1 dF9wYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKKwkJCVBhdGgJICAgKnBhdGg7CisJCQlib29s CQlpc19zb3J0ZWQ7CisJCQlpbnQJCQlwcmVzb3J0ZWRfa2V5czsKKworCQkJLyoKKwkJCSAqIFNp bmNlIHRoZSBwYXRoIG9yaWdpbmF0ZXMgZnJvbSBhIG5vbi1ncm91cGVkIHJlbGF0aW9uIHRoYXQg aXMKKwkJCSAqIG5vdCBhd2FyZSBvZiBlYWdlciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBlbnN1cmUg dGhhdCBpdCBwcm92aWRlcworCQkJICogdGhlIGNvcnJlY3QgaW5wdXQgZm9yIHBhcnRpYWwgYWdn cmVnYXRpb24uCisJCQkgKi8KKwkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfcHJvamVjdGlvbl9w YXRoKHJvb3QsCisJCQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJCSAgIGlu cHV0X3BhdGgsCisJCQkJCQkJCQkJCQkgICBhZ2dfaW5mby0+YWdnX2lucHV0KTsKKworCQkJaXNf c29ydGVkID0gcGF0aGtleXNfY291bnRfY29udGFpbmVkX2luKGFnZ19pbmZvLT5ncm91cF9wYXRo a2V5cywKKwkJCQkJCQkJCQkJCQlwYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkmcHJlc29y dGVkX2tleXMpOworCQkJaWYgKCFpc19zb3J0ZWQpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUcnkg YXQgbGVhc3Qgc29ydGluZyB0aGUgY2hlYXBlc3QgcGF0aCBhbmQgYWxzbyB0cnkKKwkJCQkgKiBp bmNyZW1lbnRhbGx5IHNvcnRpbmcgYW55IHBhdGggd2hpY2ggaXMgcGFydGlhbGx5IHNvcnRlZAor CQkJCSAqIGFscmVhZHkgKG5vIG5lZWQgdG8gZGVhbCB3aXRoIHBhdGhzIHdoaWNoIGhhdmUgcHJl c29ydGVkCisJCQkJICoga2V5cyB3aGVuIGluY3JlbWVudGFsIHNvcnQgaXMgZGlzYWJsZWQgdW5s ZXNzIGl0J3MgdGhlCisJCQkJICogY2hlYXBlc3QgaW5wdXQgcGF0aCkuCisJCQkJICovCisJCQkJ aWYgKGlucHV0X3BhdGggIT0gY2hlYXBlc3RfdG90YWxfcGF0aCAmJgorCQkJCQkocHJlc29ydGVk X2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpKQorCQkJCQljb250aW51ZTsK KworCQkJCS8qCisJCQkJICogV2UndmUgbm8gbmVlZCB0byBjb25zaWRlciBib3RoIGEgc29ydCBh bmQgaW5jcmVtZW50YWwgc29ydC4KKwkJCQkgKiBXZSdsbCBqdXN0IGRvIGEgc29ydCBpZiB0aGVy ZSBhcmUgbm8gcHJlc29ydGVkIGtleXMgYW5kIGFuCisJCQkJICogaW5jcmVtZW50YWwgc29ydCB3 aGVuIHRoZXJlIGFyZSBwcmVzb3J0ZWQga2V5cy4KKwkJCQkgKi8KKwkJCQlpZiAocHJlc29ydGVk X2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpCisJCQkJCXBhdGggPSAoUGF0 aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJIHJlbF9ncm91cGVkLAor CQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJCSBhZ2dfaW5mby0+Z3JvdXBfcGF0aGtl eXMsCisJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJCWVsc2UKKwkJCQkJcGF0aCA9IChQYXRoICop IGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkJCQkgcmVs X2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJCQkJIGFnZ19p bmZvLT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgcHJlc29ydGVkX2tleXMsCisJ CQkJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJfQorCisJCQkvKgorCQkJICogcXVhbCBpcyBOSUwg YmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVhdGVkIHVudGlsCisJCQkg KiB0aGUgZmluYWwgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0ZSBpcyBrbm93bi4KKwkJCSAqLworCQkJ cGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCQlyZWxfZ3Jv dXBlZCwKKwkJCQkJCQkJCQkJcGF0aCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPnRhcmdldCwKKwkJ CQkJCQkJCQkJQUdHX1NPUlRFRCwKKwkJCQkJCQkJCQkJQUdHU1BMSVRfSU5JVElBTF9TRVJJQUws CisJCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCQlOSUwsCisJ CQkJCQkJCQkJCSZhZ2dfY29zdHMsCisJCQkJCQkJCQkJCWROdW1Hcm91cHMpOworCisJCQlhZGRf cGF0aChyZWxfZ3JvdXBlZCwgcGF0aCk7CisJCX0KKwl9CisKKwlpZiAoY2FuX3NvcnQgJiYgY2hl YXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkv KiBTaW1pbGFyIHRvIGFib3ZlIGxvZ2ljLCBidXQgZm9yIHBhcnRpYWwgcGF0aHMuICovCisJCWZv cmVhY2gobGMsIHJlbF9wbGFpbi0+cGFydGlhbF9wYXRobGlzdCkKKwkJeworCQkJUGF0aAkgICAq aW5wdXRfcGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7CisJCQlQYXRoCSAgICpwYXRoOworCQkJ Ym9vbAkJaXNfc29ydGVkOworCQkJaW50CQkJcHJlc29ydGVkX2tleXM7CisKKwkJCS8qCisJCQkg KiBTaW5jZSB0aGUgcGF0aCBvcmlnaW5hdGVzIGZyb20gYSBub24tZ3JvdXBlZCByZWxhdGlvbiB0 aGF0IGlzCisJCQkgKiBub3QgYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5z dXJlIHRoYXQgaXQgcHJvdmlkZXMKKwkJCSAqIHRoZSBjb3JyZWN0IGlucHV0IGZvciBwYXJ0aWFs IGFnZ3JlZ2F0aW9uLgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rp b25fcGF0aChyb290LAorCQkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkg ICBpbnB1dF9wYXRoLAorCQkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7CisKKwkJ CWlzX3NvcnRlZCA9IHBhdGhrZXlzX2NvdW50X2NvbnRhaW5lZF9pbihhZ2dfaW5mby0+Z3JvdXBf cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJJnBy ZXNvcnRlZF9rZXlzKTsKKworCQkJaWYgKCFpc19zb3J0ZWQpCisJCQl7CisJCQkJLyoKKwkJCQkg KiBUcnkgYXQgbGVhc3Qgc29ydGluZyB0aGUgY2hlYXBlc3QgcGF0aCBhbmQgYWxzbyB0cnkKKwkJ CQkgKiBpbmNyZW1lbnRhbGx5IHNvcnRpbmcgYW55IHBhdGggd2hpY2ggaXMgcGFydGlhbGx5IHNv cnRlZAorCQkJCSAqIGFscmVhZHkgKG5vIG5lZWQgdG8gZGVhbCB3aXRoIHBhdGhzIHdoaWNoIGhh dmUgcHJlc29ydGVkCisJCQkJICoga2V5cyB3aGVuIGluY3JlbWVudGFsIHNvcnQgaXMgZGlzYWJs ZWQgdW5sZXNzIGl0J3MgdGhlCisJCQkJICogY2hlYXBlc3QgaW5wdXQgcGF0aCkuCisJCQkJICov CisJCQkJaWYgKGlucHV0X3BhdGggIT0gY2hlYXBlc3RfcGFydGlhbF9wYXRoICYmCisJCQkJCShw cmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkpCisJCQkJCWNv bnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBubyBuZWVkIHRvIGNvbnNpZGVyIGJvdGgg YSBzb3J0IGFuZCBpbmNyZW1lbnRhbCBzb3J0LgorCQkJCSAqIFdlJ2xsIGp1c3QgZG8gYSBzb3J0 IGlmIHRoZXJlIGFyZSBubyBwcmVzb3J0ZWQga2V5cyBhbmQgYW4KKwkJCQkgKiBpbmNyZW1lbnRh bCBzb3J0IHdoZW4gdGhlcmUgYXJlIHByZXNvcnRlZCBrZXlzLgorCQkJCSAqLworCQkJCWlmIChw cmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkKKwkJCQkJcGF0 aCA9IChQYXRoICopIGNyZWF0ZV9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkgcmVsX2dy b3VwZWQsCisJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91 cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJZWxzZQorCQkJCQlwYXRoID0g KFBhdGggKikgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJ CQkJCSByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkJ CQkgYWdnX2luZm8tPmdyb3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCSBwcmVzb3J0ZWRf a2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBxdWFs IGlzIE5JTCBiZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50 aWwKKwkJCSAqIHRoZSBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3duLgorCQkJ ICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJ CXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCQlhZ2dfaW5mby0+dGFy Z2V0LAorCQkJCQkJCQkJCQlBR0dfU09SVEVELAorCQkJCQkJCQkJCQlBR0dTUExJVF9JTklUSUFM X1NFUklBTCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJ CU5JTCwKKwkJCQkJCQkJCQkJJmFnZ19jb3N0cywKKwkJCQkJCQkJCQkJZE51bVBhcnRpYWxHcm91 cHMpOworCisJCQlhZGRfcGFydGlhbF9wYXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwkJfQorCX0K KworCS8qCisJICogQWRkIGEgcGFydGlhbGx5LWdyb3VwZWQgSGFzaEFnZyBQYXRoIHdoZXJlIHBv c3NpYmxlCisJICovCisJaWYgKGNhbl9oYXNoICYmIGNoZWFwZXN0X3RvdGFsX3BhdGggIT0gTlVM TCkKKwl7CisJCVBhdGgJICAgKnBhdGg7CisKKwkJLyoKKwkJICogU2luY2UgdGhlIHBhdGggb3Jp Z2luYXRlcyBmcm9tIGEgbm9uLWdyb3VwZWQgcmVsYXRpb24gdGhhdCBpcyBub3QKKwkJICogYXdh cmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMg dGhlCisJCSAqIGNvcnJlY3QgaW5wdXQgZm9yIHBhcnRpYWwgYWdncmVnYXRpb24uCisJCSAqLwor CQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJ CQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfdG90YWxfcGF0aCwKKwkJ CQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7CisKKwkJLyoKKwkJICogcXVhbCBpcyBO SUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVhdGVkIHVudGlsIHRo ZQorCQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3duLgorCQkgKi8KKwkJ cGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCXJlbF9ncm91 cGVkLAorCQkJCQkJCQkJCXBhdGgsCisJCQkJCQkJCQkJYWdnX2luZm8tPnRhcmdldCwKKwkJCQkJ CQkJCQlBR0dfSEFTSEVELAorCQkJCQkJCQkJCUFHR1NQTElUX0lOSVRJQUxfU0VSSUFMLAorCQkJ CQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCU5JTCwKKwkJCQkJCQkJ CQkmYWdnX2Nvc3RzLAorCQkJCQkJCQkJCWROdW1Hcm91cHMpOworCisJCWFkZF9wYXRoKHJlbF9n cm91cGVkLCBwYXRoKTsKKwl9CisKKwkvKgorCSAqIE5vdyBhZGQgYSBwYXJ0aWFsbHktZ3JvdXBl ZCBIYXNoQWdnIHBhcnRpYWwgUGF0aCB3aGVyZSBwb3NzaWJsZQorCSAqLworCWlmIChjYW5faGFz aCAmJiBjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCkKKwl7CisJCVBhdGgJICAgKnBhdGg7 CisKKwkJLyoKKwkJICogU2luY2UgdGhlIHBhdGggb3JpZ2luYXRlcyBmcm9tIGEgbm9uLWdyb3Vw ZWQgcmVsYXRpb24gdGhhdCBpcyBub3QKKwkJICogYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24s IHdlIG11c3QgZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMgdGhlCisJCSAqIGNvcnJlY3QgaW5wdXQg Zm9yIHBhcnRpYWwgYWdncmVnYXRpb24uCisJCSAqLworCQlwYXRoID0gKFBhdGggKikgY3JlYXRl X3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJ CQkJCQkJICAgY2hlYXBlc3RfcGFydGlhbF9wYXRoLAorCQkJCQkJCQkJCQkgICBhZ2dfaW5mby0+ YWdnX2lucHV0KTsKKworCQkvKgorCQkgKiBxdWFsIGlzIE5JTCBiZWNhdXNlIHRoZSBIQVZJTkcg Y2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50aWwgdGhlCisJCSAqIGZpbmFsIHZhbHVlIG9m IHRoZSBhZ2dyZWdhdGUgaXMga25vd24uCisJCSAqLworCQlwYXRoID0gKFBhdGggKikgY3JlYXRl X2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJcGF0aCwK KwkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0LAorCQkJCQkJCQkJCUFHR19IQVNIRUQsCisJCQkJ CQkJCQkJQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwsCisJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3Vw X2NsYXVzZXMsCisJCQkJCQkJCQkJTklMLAorCQkJCQkJCQkJCSZhZ2dfY29zdHMsCisJCQkJCQkJ CQkJZE51bVBhcnRpYWxHcm91cHMpOworCisJCWFkZF9wYXJ0aWFsX3BhdGgocmVsX2dyb3VwZWQs IHBhdGgpOworCX0KK30KKwogLyoKICAqIG1ha2VfcmVsX2Zyb21fam9pbmxpc3QKICAqCSAgQnVp bGQgYWNjZXNzIHBhdGhzIHVzaW5nIGEgImpvaW5saXN0IiB0byBndWlkZSB0aGUgam9pbiBwYXRo IHNlYXJjaC4KQEAgLTM0MTQsOSArMzgwNywxMCBAQCBtYWtlX3JlbF9mcm9tX2pvaW5saXN0KFBs YW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCkKICAqIG5lZWRlZCBmb3IgdGhlc2UgcGF0 aHMgbmVlZCBoYXZlIGJlZW4gaW5zdGFudGlhdGVkLgogICoKICAqIE5vdGUgdG8gcGx1Z2luIGF1 dGhvcnM6IHRoZSBmdW5jdGlvbnMgaW52b2tlZCBkdXJpbmcgc3RhbmRhcmRfam9pbl9zZWFyY2go KQotICogbW9kaWZ5IHJvb3QtPmpvaW5fcmVsX2xpc3QgYW5kIHJvb3QtPmpvaW5fcmVsX2hhc2gu ICBJZiB5b3Ugd2FudCB0byBkbyBtb3JlCi0gKiB0aGFuIG9uZSBqb2luLW9yZGVyIHNlYXJjaCwg eW91J2xsIHByb2JhYmx5IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUKLSAqIG9yaWdpbmFs IHN0YXRlcyBvZiB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuICBTZWUgZ2Vxb19ldmFsKCkgZm9yIGFu IGV4YW1wbGUuCisgKiBtb2RpZnkgcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgYW5kIHJvb3Qt PmpvaW5fcmVsX2xpc3QtPmhhc2guICBJZiB5b3UKKyAqIHdhbnQgdG8gZG8gbW9yZSB0aGFuIG9u ZSBqb2luLW9yZGVyIHNlYXJjaCwgeW91J2xsIHByb2JhYmx5IG5lZWQgdG8gc2F2ZSBhbmQKKyAq IHJlc3RvcmUgdGhlIG9yaWdpbmFsIHN0YXRlcyBvZiB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuICBT ZWUgZ2Vxb19ldmFsKCkgZm9yCisgKiBhbiBleGFtcGxlLgogICovCiBSZWxPcHRJbmZvICoKIHN0 YW5kYXJkX2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZvICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwg TGlzdCAqaW5pdGlhbF9yZWxzKQpAQCAtMzQ2NSw2ICszODU5LDEwIEBAIHN0YW5kYXJkX2pvaW5f c2VhcmNoKFBsYW5uZXJJbmZvICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAqaW5pdGlh bF9yZWxzKQogCQkgKgogCQkgKiBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIGNyZWF0aW5nIHBhdGhz IGZvciB0aGUgam9pbnJlbCwgc28gcnVuCiAJCSAqIHNldF9jaGVhcGVzdCgpLgorCQkgKgorCQkg KiBJbiBhZGRpdGlvbiwgd2UgYWxzbyBydW4gZ2VuZXJhdGVfZ3JvdXBlZF9wYXRocygpIGZvciB0 aGUgZ3JvdXBlZAorCQkgKiByZWxhdGlvbiBvZiBlYWNoIGp1c3QtcHJvY2Vzc2VkIGpvaW5yZWws IGFuZCBydW4gc2V0X2NoZWFwZXN0KCkgZm9yCisJCSAqIHRoZSBncm91cGVkIHJlbGF0aW9uIGFm dGVyd2FyZHMuCiAJCSAqLwogCQlmb3JlYWNoKGxjLCByb290LT5qb2luX3JlbF9sZXZlbFtsZXZd KQogCQl7CkBAIC0zNDg1LDYgKzM4ODMsMjcgQEAgc3RhbmRhcmRfam9pbl9zZWFyY2goUGxhbm5l ckluZm8gKnJvb3QsIGludCBsZXZlbHNfbmVlZGVkLCBMaXN0ICppbml0aWFsX3JlbHMpCiAJCQkv KiBGaW5kIGFuZCBzYXZlIHRoZSBjaGVhcGVzdCBwYXRocyBmb3IgdGhpcyByZWwgKi8KIAkJCXNl dF9jaGVhcGVzdChyZWwpOwogCisJCQkvKgorCQkJICogRXhjZXB0IGZvciB0aGUgdG9wbW9zdCBz Y2FuL2pvaW4gcmVsLCBjb25zaWRlciBnZW5lcmF0aW5nCisJCQkgKiBwYXJ0aWFsIGFnZ3JlZ2F0 aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiBvbiB0b3Agb2YKKwkJCSAqIHRoZSBw YXRocyBvZiB0aGlzIHJlbC4gIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUgY3JlYXRpbmcgcGF0aHMK KwkJCSAqIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiwgc28gcnVuIHNldF9jaGVhcGVzdCgpLgor CQkJICovCisJCQlpZiAoIWJtc19lcXVhbChyZWwtPnJlbGlkcywgcm9vdC0+YWxsX3F1ZXJ5X3Jl bHMpKQorCQkJeworCQkJCVJlbE9wdEluZm8gKnJlbF9ncm91cGVkOworCisJCQkJcmVsX2dyb3Vw ZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIHJlbC0+cmVsaWRzKTsKKwkJCQlpZiAocmVsX2dy b3VwZWQpCisJCQkJeworCQkJCQlBc3NlcnQoSVNfR1JPVVBFRF9SRUwocmVsX2dyb3VwZWQpKTsK KworCQkJCQlnZW5lcmF0ZV9ncm91cGVkX3BhdGhzKHJvb3QsIHJlbF9ncm91cGVkLCByZWwsCisJ CQkJCQkJCQkJICAgcmVsX2dyb3VwZWQtPmFnZ19pbmZvKTsKKwkJCQkJc2V0X2NoZWFwZXN0KHJl bF9ncm91cGVkKTsKKwkJCQl9CisJCQl9CisKICNpZmRlZiBPUFRJTUlaRVJfREVCVUcKIAkJCXBw cmludChyZWwpOwogI2VuZGlmCkBAIC00MzUzLDYgKzQ3NzIsMjkgQEAgZ2VuZXJhdGVfcGFydGl0 aW9ud2lzZV9qb2luX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCiAJ CWlmIChJU19EVU1NWV9SRUwoY2hpbGRfcmVsKSkKIAkJCWNvbnRpbnVlOwogCisJCS8qCisJCSAq IEV4Y2VwdCBmb3IgdGhlIHRvcG1vc3Qgc2Nhbi9qb2luIHJlbCwgY29uc2lkZXIgZ2VuZXJhdGlu ZyBwYXJ0aWFsCisJCSAqIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlv biBvbiB0b3Agb2YgdGhlIHBhdGhzIG9mCisJCSAqIHRoaXMgcGFydGl0aW9uZWQgY2hpbGQtam9p bi4gIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUgY3JlYXRpbmcgcGF0aHMKKwkJICogZm9yIHRoZSBn cm91cGVkIHJlbGF0aW9uLCBzbyBydW4gc2V0X2NoZWFwZXN0KCkuCisJCSAqLworCQlpZiAoIWJt c19lcXVhbChJU19PVEhFUl9SRUwocmVsKSA/CisJCQkJCSAgIHJlbC0+dG9wX3BhcmVudF9yZWxp ZHMgOiByZWwtPnJlbGlkcywKKwkJCQkJICAgcm9vdC0+YWxsX3F1ZXJ5X3JlbHMpKQorCQl7CisJ CQlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKworCQkJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3Vw ZWRfcmVsKHJvb3QsIGNoaWxkX3JlbC0+cmVsaWRzKTsKKwkJCWlmIChyZWxfZ3JvdXBlZCkKKwkJ CXsKKwkJCQlBc3NlcnQoSVNfR1JPVVBFRF9SRUwocmVsX2dyb3VwZWQpKTsKKworCQkJCWdlbmVy YXRlX2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3VwZWQsIGNoaWxkX3JlbCwKKwkJCQkJCQkJ CSAgIHJlbF9ncm91cGVkLT5hZ2dfaW5mbyk7CisJCQkJc2V0X2NoZWFwZXN0KHJlbF9ncm91cGVk KTsKKwkJCX0KKwkJfQorCiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAJCXBwcmludChjaGlsZF9y ZWwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCBlMTUy M2QxNWRmLi4zYzM4ZWQ3ODQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMK QEAgLTE4MCw2ICsxODAsOSBAQCBzdGF0aWMgYm9vbCBjb3N0X3F1YWxfZXZhbF93YWxrZXIoTm9k ZSAqbm9kZSwgY29zdF9xdWFsX2V2YWxfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBn ZXRfcmVzdHJpY3Rpb25fcXVhbF9jb3N0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpi YXNlcmVsLAogCQkJCQkJCQkJICBQYXJhbVBhdGhJbmZvICpwYXJhbV9pbmZvLAogCQkJCQkJCQkJ ICBRdWFsQ29zdCAqcXBxdWFsX2Nvc3QpOworc3RhdGljIHZvaWQgc2V0X2pvaW5wYXRoX3NpemUo UGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCisJCQkJCQkJICBQYXRoICpvdXRlcl9wYXRo LCBQYXRoICppbm5lcl9wYXRoLAorCQkJCQkJCSAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sIExp c3QgKnJlc3RyaWN0X2NsYXVzZXMpOwogc3RhdGljIGJvb2wgaGFzX2luZGV4ZWRfam9pbl9xdWFs cyhOZXN0UGF0aCAqcGF0aCk7CiBzdGF0aWMgZG91YmxlIGFwcHJveF90dXBsZV9jb3VudChQbGFu bmVySW5mbyAqcm9vdCwgSm9pblBhdGggKnBhdGgsCiAJCQkJCQkJCSBMaXN0ICpxdWFscyk7CkBA IC0zMzcwLDE5ICszMzczLDggQEAgZmluYWxfY29zdF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9v dCwgTmVzdFBhdGggKnBhdGgsCiAJaWYgKGlubmVyX3BhdGhfcm93cyA8PSAwKQogCQlpbm5lcl9w YXRoX3Jvd3MgPSAxOwogCS8qIE1hcmsgdGhlIHBhdGggd2l0aCB0aGUgY29ycmVjdCByb3cgZXN0 aW1hdGUgKi8KLQlpZiAocGF0aC0+anBhdGgucGF0aC5wYXJhbV9pbmZvKQotCQlwYXRoLT5qcGF0 aC5wYXRoLnJvd3MgPSBwYXRoLT5qcGF0aC5wYXRoLnBhcmFtX2luZm8tPnBwaV9yb3dzOwotCWVs c2UKLQkJcGF0aC0+anBhdGgucGF0aC5yb3dzID0gcGF0aC0+anBhdGgucGF0aC5wYXJlbnQtPnJv d3M7Ci0KLQkvKiBGb3IgcGFydGlhbCBwYXRocywgc2NhbGUgcm93IGVzdGltYXRlLiAqLwotCWlm IChwYXRoLT5qcGF0aC5wYXRoLnBhcmFsbGVsX3dvcmtlcnMgPiAwKQotCXsKLQkJZG91YmxlCQlw YXJhbGxlbF9kaXZpc29yID0gZ2V0X3BhcmFsbGVsX2Rpdmlzb3IoJnBhdGgtPmpwYXRoLnBhdGgp OwotCi0JCXBhdGgtPmpwYXRoLnBhdGgucm93cyA9Ci0JCQljbGFtcF9yb3dfZXN0KHBhdGgtPmpw YXRoLnBhdGgucm93cyAvIHBhcmFsbGVsX2Rpdmlzb3IpOwotCX0KKwlzZXRfam9pbnBhdGhfc2l6 ZShyb290LCAmcGF0aC0+anBhdGgucGF0aCwgb3V0ZXJfcGF0aCwgaW5uZXJfcGF0aCwKKwkJCQkJ ICBleHRyYS0+c2ppbmZvLCBwYXRoLT5qcGF0aC5qb2lucmVzdHJpY3RpbmZvKTsKIAogCS8qIGNv c3Qgb2YgaW5uZXItcmVsYXRpb24gc291cmNlIGRhdGEgKHdlIGFscmVhZHkgZGVhbHQgd2l0aCBv dXRlciByZWwpICovCiAKQEAgLTM4MjIsMTkgKzM4MTQsOCBAQCBmaW5hbF9jb3N0X21lcmdlam9p bihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VQYXRoICpwYXRoLAogCQlpbm5lcl9wYXRoX3Jvd3Mg PSAxOwogCiAJLyogTWFyayB0aGUgcGF0aCB3aXRoIHRoZSBjb3JyZWN0IHJvdyBlc3RpbWF0ZSAq LwotCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBhcmFtX2luZm8pCi0JCXBhdGgtPmpwYXRoLnBhdGgu cm93cyA9IHBhdGgtPmpwYXRoLnBhdGgucGFyYW1faW5mby0+cHBpX3Jvd3M7Ci0JZWxzZQotCQlw YXRoLT5qcGF0aC5wYXRoLnJvd3MgPSBwYXRoLT5qcGF0aC5wYXRoLnBhcmVudC0+cm93czsKLQot CS8qIEZvciBwYXJ0aWFsIHBhdGhzLCBzY2FsZSByb3cgZXN0aW1hdGUuICovCi0JaWYgKHBhdGgt PmpwYXRoLnBhdGgucGFyYWxsZWxfd29ya2VycyA+IDApCi0JewotCQlkb3VibGUJCXBhcmFsbGVs X2Rpdmlzb3IgPSBnZXRfcGFyYWxsZWxfZGl2aXNvcigmcGF0aC0+anBhdGgucGF0aCk7Ci0KLQkJ cGF0aC0+anBhdGgucGF0aC5yb3dzID0KLQkJCWNsYW1wX3Jvd19lc3QocGF0aC0+anBhdGgucGF0 aC5yb3dzIC8gcGFyYWxsZWxfZGl2aXNvcik7Ci0JfQorCXNldF9qb2lucGF0aF9zaXplKHJvb3Qs ICZwYXRoLT5qcGF0aC5wYXRoLCBvdXRlcl9wYXRoLCBpbm5lcl9wYXRoLAorCQkJCQkgIGV4dHJh LT5zamluZm8sIHBhdGgtPmpwYXRoLmpvaW5yZXN0cmljdGluZm8pOwogCiAJLyoKIAkgKiBDb21w dXRlIGNvc3Qgb2YgdGhlIG1lcmdlcXVhbHMgYW5kIHFwcXVhbHMgKG90aGVyIHJlc3RyaWN0aW9u IGNsYXVzZXMpCkBAIC00MjU0LDE5ICs0MjM1LDggQEAgZmluYWxfY29zdF9oYXNoam9pbihQbGFu bmVySW5mbyAqcm9vdCwgSGFzaFBhdGggKnBhdGgsCiAJcGF0aC0+anBhdGgucGF0aC5kaXNhYmxl ZF9ub2RlcyA9IHdvcmtzcGFjZS0+ZGlzYWJsZWRfbm9kZXM7CiAKIAkvKiBNYXJrIHRoZSBwYXRo IHdpdGggdGhlIGNvcnJlY3Qgcm93IGVzdGltYXRlICovCi0JaWYgKHBhdGgtPmpwYXRoLnBhdGgu cGFyYW1faW5mbykKLQkJcGF0aC0+anBhdGgucGF0aC5yb3dzID0gcGF0aC0+anBhdGgucGF0aC5w YXJhbV9pbmZvLT5wcGlfcm93czsKLQllbHNlCi0JCXBhdGgtPmpwYXRoLnBhdGgucm93cyA9IHBh dGgtPmpwYXRoLnBhdGgucGFyZW50LT5yb3dzOwotCi0JLyogRm9yIHBhcnRpYWwgcGF0aHMsIHNj YWxlIHJvdyBlc3RpbWF0ZS4gKi8KLQlpZiAocGF0aC0+anBhdGgucGF0aC5wYXJhbGxlbF93b3Jr ZXJzID4gMCkKLQl7Ci0JCWRvdWJsZQkJcGFyYWxsZWxfZGl2aXNvciA9IGdldF9wYXJhbGxlbF9k aXZpc29yKCZwYXRoLT5qcGF0aC5wYXRoKTsKLQotCQlwYXRoLT5qcGF0aC5wYXRoLnJvd3MgPQot CQkJY2xhbXBfcm93X2VzdChwYXRoLT5qcGF0aC5wYXRoLnJvd3MgLyBwYXJhbGxlbF9kaXZpc29y KTsKLQl9CisJc2V0X2pvaW5wYXRoX3NpemUocm9vdCwgJnBhdGgtPmpwYXRoLnBhdGgsIG91dGVy X3BhdGgsIGlubmVyX3BhdGgsCisJCQkJCSAgZXh0cmEtPnNqaW5mbywgcGF0aC0+anBhdGguam9p bnJlc3RyaWN0aW5mbyk7CiAKIAkvKiBtYXJrIHRoZSBwYXRoIHdpdGggZXN0aW1hdGVkICMgb2Yg YmF0Y2hlcyAqLwogCXBhdGgtPm51bV9iYXRjaGVzID0gbnVtYmF0Y2hlczsKQEAgLTUwMTQsNiAr NDk4NCw2MCBAQCBnZXRfcmVzdHJpY3Rpb25fcXVhbF9jb3N0KFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpiYXNlcmVsLAogCQkqcXBxdWFsX2Nvc3QgPSBiYXNlcmVsLT5iYXNlcmVzdHJp Y3Rjb3N0OwogfQogCisvKgorICogc2V0X2pvaW5wYXRoX3NpemUKKyAqCSAgU2V0IHRoZSBjb3Jy ZWN0IHJvdyBlc3RpbWF0ZSBmb3IgdGhlIGdpdmVuIGpvaW4gcGF0aC4KKyAqCisgKiAncGF0aCcg aXMgdGhlIGpvaW4gcGF0aCB1bmRlciBjb25zaWRlcmF0aW9uLgorICogJ291dGVyX3BhdGgnLCAn aW5uZXJfcGF0aCcgYXJlIFBhdGhzIHRoYXQgcHJvZHVjZSB0aGUgcmVsYXRpb25zIGJlaW5nCisg KgkJam9pbmVkLgorICogJ3NqaW5mbycgaXMgYW55IFNwZWNpYWxKb2luSW5mbyByZWxldmFudCB0 byB0aGlzIGpvaW4uCisgKiAncmVzdHJpY3RfY2xhdXNlcycgbGlzdHMgdGhlIGpvaW4gY2xhdXNl cyB0aGF0IG5lZWQgdG8gYmUgYXBwbGllZCBhdCB0aGUKKyAqCQlqb2luIG5vZGUuCisgKgorICog Tm90ZSB0aGF0IGZvciBhIGdyb3VwZWQgam9pbiByZWxhdGlvbiwgaXRzIHBhdGhzIGNvdWxkIGhh dmUgdmVyeSBkaWZmZXJlbnQKKyAqIHJvd2NvdW50IGVzdGltYXRlcywgc28gd2UgbmVlZCB0byBj YWxjdWxhdGUgdGhlIHJvd2NvdW50IGVzdGltYXRlIHVzaW5nIHRoZQorICogdGhlIHBhaXIgb2Yg aW5wdXQgcGF0aHMgcHJvdmlkZWQuCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfam9pbnBhdGhfc2l6 ZShQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwKKwkJCQkgIFBhdGggKm91dGVyX3BhdGgs IFBhdGggKmlubmVyX3BhdGgsCisJCQkJICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAq cmVzdHJpY3RfY2xhdXNlcykKK3sKKwlpZiAoSVNfR1JPVVBFRF9SRUwocGF0aC0+cGFyZW50KSkK Kwl7CisJCS8qCisJCSAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2Ygcm93cyBvZiB0aGlzIGdyb3Vw ZWQgam9pbiBwYXRoIGFzIHRoZSBzaXplcworCQkgKiBvZiB0aGUgaW5wdXQgcGF0aHMgdGltZXMg dGhlIHNlbGVjdGl2aXR5IG9mIHRoZSBjbGF1c2VzIHRoYXQgaGF2ZQorCQkgKiBlbmRlZCB1cCBh dCB0aGlzIGpvaW4gbm9kZS4KKwkJICovCisJCXBhdGgtPnJvd3MgPSBjYWxjX2pvaW5yZWxfc2l6 ZV9lc3RpbWF0ZShyb290LAorCQkJCQkJCQkJCQkJcGF0aC0+cGFyZW50LAorCQkJCQkJCQkJCQkJ b3V0ZXJfcGF0aC0+cGFyZW50LAorCQkJCQkJCQkJCQkJaW5uZXJfcGF0aC0+cGFyZW50LAorCQkJ CQkJCQkJCQkJb3V0ZXJfcGF0aC0+cm93cywKKwkJCQkJCQkJCQkJCWlubmVyX3BhdGgtPnJvd3Ms CisJCQkJCQkJCQkJCQlzamluZm8sCisJCQkJCQkJCQkJCQlyZXN0cmljdF9jbGF1c2VzKTsKKwl9 CisJZWxzZSBpZiAocGF0aC0+cGFyYW1faW5mbykKKwkJcGF0aC0+cm93cyA9IHBhdGgtPnBhcmFt X2luZm8tPnBwaV9yb3dzOworCWVsc2UKKwkJcGF0aC0+cm93cyA9IHBhdGgtPnBhcmVudC0+cm93 czsKKworCS8qCisJICogRm9yIHBhcnRpYWwgcGF0aHMsIHNjYWxlIHJvdyBlc3RpbWF0ZS4gIFdl IGNhbiBza2lwIHRoaXMgZm9yIGdyb3VwZWQKKwkgKiBqb2luIHBhdGhzLgorCSAqLworCWlmIChw YXRoLT5wYXJhbGxlbF93b3JrZXJzID4gMCAmJiAhSVNfR1JPVVBFRF9SRUwocGF0aC0+cGFyZW50 KSkKKwl7CisJCWRvdWJsZQkJcGFyYWxsZWxfZGl2aXNvciA9IGdldF9wYXJhbGxlbF9kaXZpc29y KHBhdGgpOworCisJCXBhdGgtPnJvd3MgPQorCQkJY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8g cGFyYWxsZWxfZGl2aXNvcik7CisJfQorfQorCiAKIC8qCiAgKiBjb21wdXRlX3NlbWlfYW50aV9q b2luX2ZhY3RvcnMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5y ZWxzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCmluZGV4IDdkYjVl MzBlZWYuLjQzYzlmYTk1MjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2pvaW5yZWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpA QCAtMzUsNiArMzUsOSBAQCBzdGF0aWMgYm9vbCBoYXNfbGVnYWxfam9pbmNsYXVzZShQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKIHN0YXRpYyBib29sIHJlc3RyaWN0aW9uX2lz X2NvbnN0YW50X2ZhbHNlKExpc3QgKnJlc3RyaWN0bGlzdCwKIAkJCQkJCQkJCQkgIFJlbE9wdElu Zm8gKmpvaW5yZWwsCiAJCQkJCQkJCQkJICBib29sIG9ubHlfcHVzaGVkX2Rvd24pOworc3RhdGlj IHZvaWQgbWFrZV9ncm91cGVkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwxLAorCQkJCQkJCQkgIFJlbE9wdEluZm8gKnJlbDIsIFJlbE9wdEluZm8gKmpvaW5yZWws CisJCQkJCQkJCSAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sIExpc3QgKnJlc3RyaWN0bGlzdCk7 CiBzdGF0aWMgdm9pZCBwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbDEsCiAJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsMiwgUmVsT3B0 SW5mbyAqam9pbnJlbCwKIAkJCQkJCQkJCQlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAq cmVzdHJpY3RsaXN0KTsKQEAgLTc3MSw2ICs3NzQsMTAgQEAgbWFrZV9qb2luX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMikKIAkJcmV0dXJu IGpvaW5yZWw7CiAJfQogCisJLyogQnVpbGQgYSBncm91cGVkIGpvaW4gcmVsYXRpb24gZm9yICdq b2lucmVsJyBpZiBwb3NzaWJsZS4gKi8KKwltYWtlX2dyb3VwZWRfam9pbl9yZWwocm9vdCwgcmVs MSwgcmVsMiwgam9pbnJlbCwgc2ppbmZvLAorCQkJCQkJICByZXN0cmljdGxpc3QpOworCiAJLyog QWRkIHBhdGhzIHRvIHRoZSBqb2luIHJlbGF0aW9uLiAqLwogCXBvcHVsYXRlX2pvaW5yZWxfd2l0 aF9wYXRocyhyb290LCByZWwxLCByZWwyLCBqb2lucmVsLCBzamluZm8sCiAJCQkJCQkJCXJlc3Ry aWN0bGlzdCk7CkBAIC04ODIsNiArODg5LDEyNSBAQCBhZGRfb3V0ZXJfam9pbnNfdG9fcmVsaWRz KFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgaW5wdXRfcmVsaWRzLAogCXJldHVybiBpbnB1dF9y ZWxpZHM7CiB9CiAKKy8qCisgKiBtYWtlX2dyb3VwZWRfam9pbl9yZWwKKyAqCSAgQnVpbGQgYSBn cm91cGVkIGpvaW4gcmVsYXRpb24gb3V0IG9mICdqb2lucmVsJyBpZiBlYWdlciBhZ2dyZWdhdGlv biBpcworICoJICBwb3NzaWJsZSBhbmQgdGhlICdqb2lucmVsJyBjYW4gcHJvZHVjZSBncm91cGVk IHBhdGhzLgorICoKKyAqIFdlIGFsc28gZ2VuZXJhdGUgcGFydGlhbCBhZ2dyZWdhdGlvbiBwYXRo cyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gYnkKKyAqIGpvaW5pbmcgdGhlIGdyb3VwZWQgcGF0 aHMgb2YgJ3JlbDEnIHRvIHRoZSBwbGFpbiBwYXRocyBvZiAncmVsMicsIG9yIGJ5CisgKiBqb2lu aW5nIHRoZSBncm91cGVkIHBhdGhzIG9mICdyZWwyJyB0byB0aGUgcGxhaW4gcGF0aHMgb2YgJ3Jl bDEnLgorICovCitzdGF0aWMgdm9pZAorbWFrZV9ncm91cGVkX2pvaW5fcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwxLAorCQkJCQkgIFJlbE9wdEluZm8gKnJlbDIsIFJlbE9w dEluZm8gKmpvaW5yZWwsCisJCQkJCSAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sIExpc3QgKnJl c3RyaWN0bGlzdCkKK3sKKwlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKwlSZWxPcHRJbmZvICpy ZWwxX2dyb3VwZWQ7CisJUmVsT3B0SW5mbyAqcmVsMl9ncm91cGVkOworCWJvb2wJCXJlbDFfZW1w dHk7CisJYm9vbAkJcmVsMl9lbXB0eTsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIGFnZ3Jl Z2F0ZSBleHByZXNzaW9ucyBvciBncm91cGluZyBleHByZXNzaW9ucywgZWFnZXIKKwkgKiBhZ2dy ZWdhdGlvbiBpcyBub3QgcG9zc2libGUuCisJICovCisJaWYgKHJvb3QtPmFnZ19jbGF1c2VfbGlz dCA9PSBOSUwgfHwKKwkJcm9vdC0+Z3JvdXBfZXhwcl9saXN0ID09IE5JTCkKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBTZWUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgZ3JvdXBlZCBqb2lucmVsIGZvciB0 aGlzIGpvaW5yZWwuCisJICovCisJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3Qs IGpvaW5yZWwtPnJlbGlkcyk7CisKKwkvKgorCSAqIENvbnN0cnVjdCBhIG5ldyBSZWxPcHRJbmZv IGZvciB0aGUgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIGlmIHRoZXJlIGlzIG5vCisJICogZXhpc3Rp bmcgb25lLgorCSAqLworCWlmIChyZWxfZ3JvdXBlZCA9PSBOVUxMKQorCXsKKwkJUmVsQWdnSW5m byAqYWdnX2luZm8gPSBOVUxMOworCisJCS8qCisJCSAqIFByZXBhcmUgdGhlIGluZm9ybWF0aW9u IG5lZWRlZCB0byBjcmVhdGUgZ3JvdXBlZCBwYXRocyBmb3IgdGhpcworCQkgKiBqb2luIHJlbGF0 aW9uLgorCQkgKi8KKwkJYWdnX2luZm8gPSBjcmVhdGVfcmVsX2FnZ19pbmZvKHJvb3QsIGpvaW5y ZWwpOworCQlpZiAoYWdnX2luZm8gPT0gTlVMTCkKKwkJCXJldHVybjsKKworCQkvKiBidWlsZCBh IGdyb3VwZWQgcmVsYXRpb24gb3V0IG9mIHRoZSBwbGFpbiByZWxhdGlvbiAqLworCQlyZWxfZ3Jv dXBlZCA9IGJ1aWxkX2dyb3VwZWRfcmVsKHJvb3QsIGpvaW5yZWwpOworCQlyZWxfZ3JvdXBlZC0+ cmVsdGFyZ2V0ID0gYWdnX2luZm8tPnRhcmdldDsKKwkJcmVsX2dyb3VwZWQtPnJvd3MgPSBhZ2df aW5mby0+Z3JvdXBlZF9yb3dzOworCQlyZWxfZ3JvdXBlZC0+YWdnX2luZm8gPSBhZ2dfaW5mbzsK KworCQkvKgorCQkgKiBNYWtlIHRoZSBncm91cGVkIHJlbGF0aW9uIGF2YWlsYWJsZSBmb3IgZnVy dGhlciBqb2luaW5nIG9yIGZvcgorCQkgKiBhY3RpbmcgYXMgdGhlIHVwcGVyIHJlbCByZXByZXNl bnRpbmcgdGhlIHJlc3VsdCBvZiBwYXJ0aWFsCisJCSAqIGFnZ3JlZ2F0aW9uLgorCQkgKi8KKwkJ YWRkX2dyb3VwZWRfcmVsKHJvb3QsIHJlbF9ncm91cGVkKTsKKwl9CisKKwlBc3NlcnQoSVNfR1JP VVBFRF9SRUwocmVsX2dyb3VwZWQpKTsKKworCS8qIFdlIG1heSBoYXZlIGFscmVhZHkgcHJvdmVu IHRoaXMgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIHRvIGJlIGR1bW15LiAqLworCWlmIChJU19EVU1N WV9SRUwocmVsX2dyb3VwZWQpKQorCQlyZXR1cm47CisKKwkvKiBSZXRyaWV2ZSB0aGUgZ3JvdXBl ZCByZWxhdGlvbnMgZm9yIHRoZSB0d28gaW5wdXQgcmVscyAqLworCXJlbDFfZ3JvdXBlZCA9IGZp bmRfZ3JvdXBlZF9yZWwocm9vdCwgcmVsMS0+cmVsaWRzKTsKKwlyZWwyX2dyb3VwZWQgPSBmaW5k X2dyb3VwZWRfcmVsKHJvb3QsIHJlbDItPnJlbGlkcyk7CisKKwlyZWwxX2VtcHR5ID0gKHJlbDFf Z3JvdXBlZCA9PSBOVUxMIHx8IElTX0RVTU1ZX1JFTChyZWwxX2dyb3VwZWQpKTsKKwlyZWwyX2Vt cHR5ID0gKHJlbDJfZ3JvdXBlZCA9PSBOVUxMIHx8IElTX0RVTU1ZX1JFTChyZWwyX2dyb3VwZWQp KTsKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUncyBubyBncm91cGVkIHJlbGF0aW9uLiAq LworCWlmIChyZWwxX2VtcHR5ICYmIHJlbDJfZW1wdHkpCisJCXJldHVybjsKKworCS8qCisJICog Sm9pbmluZyB0d28gZ3JvdXBlZCByZWxhdGlvbnMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQu ICBHcm91cGluZyBvbmUKKwkgKiBzaWRlIHdvdWxkIGFsdGVyIHRoZSBvY2N1cnJlbmNlIG9mIHRo ZSBvdGhlciBzaWRlJ3MgYWdncmVnYXRlIHRyYW5zaWVudAorCSAqIHN0YXRlcyBpbiB0aGUgZmlu YWwgYWdncmVnYXRpb24gaW5wdXQuICBXaGlsZSB0aGlzIGlzc3VlIGNvdWxkIGJlCisJICogYWRk cmVzc2VkIGJ5IGFkanVzdGluZyB0aGUgdHJhbnNpZW50IHN0YXRlcywgaXQgaXMgbm90IGRlZW1l ZAorCSAqIHdvcnRod2hpbGUgZm9yIG5vdy4KKwkgKi8KKwlpZiAoIXJlbDFfZW1wdHkgJiYgIXJl bDJfZW1wdHkpCisJCXJldHVybjsKKworCS8qIEdlbmVyYXRlIHBhcnRpYWwgYWdncmVnYXRpb24g cGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uICovCisJaWYgKCFyZWwxX2VtcHR5KQorCXsK KwkJcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzKHJvb3QsIHJlbDFfZ3JvdXBlZCwgcmVsMiwg cmVsX2dyb3VwZWQsCisJCQkJCQkJCQlzamluZm8sIHJlc3RyaWN0bGlzdCk7CisKKwkJLyoKKwkJ ICogSXQgc2hvdWxkbid0IGhhcHBlbiB0aGF0IHdlIGhhdmUgbWFya2VkIHJlbDFfZ3JvdXBlZCBh cyBkdW1teSBpbgorCQkgKiBwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMgZHVlIHRvIHByb3Zh Ymx5IGNvbnN0YW50LWZhbHNlIGpvaW4KKwkJICogcmVzdHJpY3Rpb25zLCBoZW5jZSB3ZSB3b3Vs ZG4ndCBlbmQgdXAgd2l0aCBhIHBsYW4gdGhhdCBoYXMgQWdncmVmCisJCSAqIGluIG5vbi1BZ2cg cGxhbiBub2RlLgorCQkgKi8KKwkJQXNzZXJ0KCFJU19EVU1NWV9SRUwocmVsMV9ncm91cGVkKSk7 CisJfQorCWVsc2UgaWYgKCFyZWwyX2VtcHR5KQorCXsKKwkJcG9wdWxhdGVfam9pbnJlbF93aXRo X3BhdGhzKHJvb3QsIHJlbDEsIHJlbDJfZ3JvdXBlZCwgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQlz amluZm8sIHJlc3RyaWN0bGlzdCk7CisKKwkJLyoKKwkJICogSXQgc2hvdWxkbid0IGhhcHBlbiB0 aGF0IHdlIGhhdmUgbWFya2VkIHJlbDJfZ3JvdXBlZCBhcyBkdW1teSBpbgorCQkgKiBwb3B1bGF0 ZV9qb2lucmVsX3dpdGhfcGF0aHMgZHVlIHRvIHByb3ZhYmx5IGNvbnN0YW50LWZhbHNlIGpvaW4K KwkJICogcmVzdHJpY3Rpb25zLCBoZW5jZSB3ZSB3b3VsZG4ndCBlbmQgdXAgd2l0aCBhIHBsYW4g dGhhdCBoYXMgQWdncmVmCisJCSAqIGluIG5vbi1BZ2cgcGxhbiBub2RlLgorCQkgKi8KKwkJQXNz ZXJ0KCFJU19EVU1NWV9SRUwocmVsMl9ncm91cGVkKSk7CisJfQorfQorCiAvKgogICogcG9wdWxh dGVfam9pbnJlbF93aXRoX3BhdGhzCiAgKgkgIEFkZCBwYXRocyB0byB0aGUgZ2l2ZW4gam9pbnJl bCBmb3IgZ2l2ZW4gcGFpciBvZiBqb2luaW5nIHJlbGF0aW9ucy4gVGhlCkBAIC0xNjc0LDYgKzE4 MDAsMTEgQEAgdHJ5X3BhcnRpdGlvbndpc2Vfam9pbihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwKIAkJCQkJCSBhZGp1c3RfY2hpbGRfcmVsaWRz KGpvaW5yZWwtPnJlbGlkcywKIAkJCQkJCQkJCQkJIG5hcHBpbmZvcywgYXBwaW5mb3MpKSk7CiAK KwkJLyogQnVpbGQgYSBncm91cGVkIGpvaW4gcmVsYXRpb24gZm9yICdjaGlsZF9qb2lucmVsJyBp ZiBwb3NzaWJsZSAqLworCQltYWtlX2dyb3VwZWRfam9pbl9yZWwocm9vdCwgY2hpbGRfcmVsMSwg Y2hpbGRfcmVsMiwKKwkJCQkJCQkgIGNoaWxkX2pvaW5yZWwsIGNoaWxkX3NqaW5mbywKKwkJCQkJ CQkgIGNoaWxkX3Jlc3RyaWN0bGlzdCk7CisKIAkJLyogQW5kIG1ha2UgcGF0aHMgZm9yIHRoZSBj aGlsZCBqb2luICovCiAJCXBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyhyb290LCBjaGlsZF9y ZWwxLCBjaGlsZF9yZWwyLAogCQkJCQkJCQkJY2hpbGRfam9pbnJlbCwgY2hpbGRfc2ppbmZvLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYwppbmRleCBmM2I5ODIxNDk4Li5hZDQ2 OGQzNzk2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4u YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYwpAQCAtMTQsNiAr MTQsNyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9u YnRyZWUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJub2Rlcy9t YWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKQEAgLTgwLDYgKzgxLDgg QEAgdHlwZWRlZiBzdHJ1Y3QgSm9pblRyZWVJdGVtCiB9IEpvaW5UcmVlSXRlbTsKIAogCitzdGF0 aWMgdm9pZCBjcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhQbGFubmVySW5mbyAqcm9vdCk7CitzdGF0 aWMgdm9pZCBjcmVhdGVfZ3JvdXBpbmdfZXhwcl9pbmZvcyhQbGFubmVySW5mbyAqcm9vdCk7CiBz dGF0aWMgdm9pZCBleHRyYWN0X2xhdGVyYWxfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqYnJlbCwKIAkJCQkJCQkJCSAgIEluZGV4IHJ0aW5kZXgpOwogc3RhdGljIExp c3QgKmRlY29uc3RydWN0X3JlY3Vyc2UoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmp0bm9kZSwK QEAgLTMyNyw2ICszMzAsMjYyIEBAIGFkZF92YXJzX3RvX3RhcmdldGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIExpc3QgKnZhcnMsCiAJfQogfQogCisvKgorICogc2V0dXBfZWFnZXJfYWdncmVnYXRp b24KKyAqCSAgQ2hlY2sgaWYgZWFnZXIgYWdncmVnYXRpb24gaXMgYXBwbGljYWJsZSwgYW5kIGlm IHNvIGNvbGxlY3Qgc3VpdGFibGUKKyAqCSAgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZCBncm91 cGluZyBleHByZXNzaW9ucyBpbiB0aGUgcXVlcnkuCisgKi8KK3ZvaWQKK3NldHVwX2VhZ2VyX2Fn Z3JlZ2F0aW9uKFBsYW5uZXJJbmZvICpyb290KQoreworCS8qCisJICogRG9uJ3QgYXBwbHkgZWFn ZXIgYWdncmVnYXRpb24gaWYgZGlzYWJsZWQgYnkgdXNlci4KKwkgKi8KKwlpZiAoIWVuYWJsZV9l YWdlcl9hZ2dyZWdhdGUpCisJCXJldHVybjsKKworCS8qCisJICogRG9uJ3QgYXBwbHkgZWFnZXIg YWdncmVnYXRpb24gaWYgdGhlcmUgYXJlIG5vIGF2YWlsYWJsZSBHUk9VUCBCWQorCSAqIGNsYXVz ZXMuCisJICovCisJaWYgKCFyb290LT5wcm9jZXNzZWRfZ3JvdXBDbGF1c2UpCisJCXJldHVybjsK KworCS8qCisJICogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8gc3VwcG9ydCBncm91cGluZyBzZXRz LgorCSAqLworCWlmIChyb290LT5wYXJzZS0+Z3JvdXBpbmdTZXRzKQorCQlyZXR1cm47CisKKwkv KgorCSAqIEZvciBub3cgd2UgZG9uJ3QgdHJ5IHRvIHN1cHBvcnQgRElTVElOQ1Qgb3IgT1JERVIg QlkgYWdncmVnYXRlcy4KKwkgKi8KKwlpZiAocm9vdC0+bnVtT3JkZXJlZEFnZ3MgPiAwKQorCQly ZXR1cm47CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkgYWdncmVnYXRlcyB0aGF0IGRvIG5v dCBzdXBwb3J0IHBhcnRpYWwgbW9kZSwgb3IgYW55CisJICogcGFydGlhbCBhZ2dyZWdhdGVzIHRo YXQgYXJlIG5vbi1zZXJpYWxpemFibGUsIGRvIG5vdCBhcHBseSBlYWdlcgorCSAqIGFnZ3JlZ2F0 aW9uLgorCSAqLworCWlmIChyb290LT5oYXNOb25QYXJ0aWFsQWdncyB8fCByb290LT5oYXNOb25T ZXJpYWxBZ2dzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIGRvbid0IHRyeSB0byBhcHBseSBl YWdlciBhZ2dyZWdhdGlvbiBpZiB0aGVyZSBhcmUgc2V0LXJldHVybmluZworCSAqIGZ1bmN0aW9u cyBpbiB0YXJnZXRsaXN0LgorCSAqLworCWlmIChyb290LT5wYXJzZS0+aGFzVGFyZ2V0U1JGcykK KwkJcmV0dXJuOworCisJLyoKKwkgKiBFYWdlciBhZ2dyZWdhdGlvbiBvbmx5IG1ha2VzIHNlbnNl IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBiYXNlIHJlbHMgaW4KKwkgKiB0aGUgcXVlcnkuCisJICov CisJaWYgKGJtc19tZW1iZXJzaGlwKHJvb3QtPmFsbF9iYXNlcmVscykgIT0gQk1TX01VTFRJUExF KQorCQlyZXR1cm47CisKKwkvKgorCSAqIENvbGxlY3QgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFu ZCBwbGFpbiBWYXJzIHRoYXQgYXBwZWFyIGluIHRhcmdldGxpc3QKKwkgKiBhbmQgaGF2aW5nUXVh bC4KKwkgKi8KKwljcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhyb290KTsKKworCS8qCisJICogSWYg dGhlcmUgYXJlIG5vIHN1aXRhYmxlIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucywgd2UgY2Fubm90IGFw cGx5IGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJaWYgKHJvb3QtPmFnZ19jbGF1c2Vf bGlzdCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qCisJICogQ29sbGVjdCBncm91cGluZyBleHBy ZXNzaW9ucyB0aGF0IGFwcGVhciBpbiBncm91cGluZyBjbGF1c2VzLgorCSAqLworCWNyZWF0ZV9n cm91cGluZ19leHByX2luZm9zKHJvb3QpOworfQorCisvKgorICogY3JlYXRlX2FnZ19jbGF1c2Vf aW5mb3MKKyAqCSAgU2VhcmNoIHRoZSB0YXJnZXRsaXN0IGFuZCBoYXZpbmdRdWFsIGZvciBBZ2dy ZWZzIGFuZCBwbGFpbiBWYXJzLCBhbmQKKyAqCSAgY3JlYXRlIGFuIEFnZ0NsYXVzZUluZm8gZm9y IGVhY2ggQWdncmVmIG5vZGUuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfYWdnX2NsYXVzZV9p bmZvcyhQbGFubmVySW5mbyAqcm9vdCkKK3sKKwlMaXN0CSAgICp0bGlzdF9leHByczsKKwlMaXN0 Q2VsbCAgICpsYzsKKworCUFzc2VydChyb290LT5hZ2dfY2xhdXNlX2xpc3QgPT0gTklMKTsKKwlB c3NlcnQocm9vdC0+dGxpc3RfdmFycyA9PSBOSUwpOworCisJdGxpc3RfZXhwcnMgPSBwdWxsX3Zh cl9jbGF1c2UoKE5vZGUgKikgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0LAorCQkJCQkJCQkgIFBWQ19J TkNMVURFX0FHR1JFR0FURVMgfAorCQkJCQkJCQkgIFBWQ19SRUNVUlNFX1dJTkRPV0ZVTkNTIHwK KwkJCQkJCQkJICBQVkNfUkVDVVJTRV9QTEFDRUhPTERFUlMpOworCisJLyoKKwkgKiBGb3Igbm93 IHdlIGRvbid0IHRyeSB0byBzdXBwb3J0IEdST1VQSU5HKCkgZXhwcmVzc2lvbnMuCisJICovCisJ Zm9yZWFjaChsYywgdGxpc3RfZXhwcnMpCisJeworCQlFeHByCSAgICpleHByID0gKEV4cHIgKikg bGZpcnN0KGxjKTsKKworCQlpZiAoSXNBKGV4cHIsIEdyb3VwaW5nRnVuYykpCisJCQlyZXR1cm47 CisJfQorCisJLyoKKwkgKiBBZ2dyZWdhdGVzIHdpdGhpbiB0aGUgSEFWSU5HIGNsYXVzZSBuZWVk IHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgc2FtZQorCSAqIHdheSBhcyB0aG9zZSBpbiB0aGUgdGFy Z2V0bGlzdC4gIE5vdGUgdGhhdCBIQVZJTkcgY2FuIGNvbnRhaW4gQWdncmVmcworCSAqIGJ1dCBu b3QgV2luZG93RnVuY3MuCisJICovCisJaWYgKHJvb3QtPnBhcnNlLT5oYXZpbmdRdWFsICE9IE5V TEwpCisJeworCQlMaXN0CSAgICpoYXZpbmdfZXhwcnM7CisKKwkJaGF2aW5nX2V4cHJzID0gcHVs bF92YXJfY2xhdXNlKChOb2RlICopIHJvb3QtPnBhcnNlLT5oYXZpbmdRdWFsLAorCQkJCQkJCQkJ ICAgUFZDX0lOQ0xVREVfQUdHUkVHQVRFUyB8CisJCQkJCQkJCQkgICBQVkNfUkVDVVJTRV9QTEFD RUhPTERFUlMpOworCQlpZiAoaGF2aW5nX2V4cHJzICE9IE5JTCkKKwkJeworCQkJdGxpc3RfZXhw cnMgPSBsaXN0X2NvbmNhdCh0bGlzdF9leHBycywgaGF2aW5nX2V4cHJzKTsKKwkJCWxpc3RfZnJl ZShoYXZpbmdfZXhwcnMpOworCQl9CisJfQorCisJZm9yZWFjaChsYywgdGxpc3RfZXhwcnMpCisJ eworCQlFeHByCSAgICpleHByID0gKEV4cHIgKikgbGZpcnN0KGxjKTsKKwkJQWdncmVmCSAgICph Z2dyZWY7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm87CisKKwkJLyoKKwkJICogY29sbGVjdCBw bGFpbiBWYXJzIGZvciBmdXR1cmUgcmVmZXJlbmNlCisJCSAqLworCQlpZiAoSXNBKGV4cHIsIFZh cikpCisJCXsKKwkJCXJvb3QtPnRsaXN0X3ZhcnMgPSBsaXN0X2FwcGVuZF91bmlxdWUocm9vdC0+ dGxpc3RfdmFycywgZXhwcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWFnZ3JlZiA9IGNhc3RO b2RlKEFnZ3JlZiwgZXhwcik7CisKKwkJQXNzZXJ0KGFnZ3JlZi0+YWdnb3JkZXIgPT0gTklMKTsK KwkJQXNzZXJ0KGFnZ3JlZi0+YWdnZGlzdGluY3QgPT0gTklMKTsKKworCQlhY19pbmZvID0gbWFr ZU5vZGUoQWdnQ2xhdXNlSW5mbyk7CisJCWFjX2luZm8tPmFnZ3JlZiA9IGFnZ3JlZjsKKwkJYWNf aW5mby0+YWdnX2V2YWxfYXQgPSBwdWxsX3Zhcm5vcyhyb290LCAoTm9kZSAqKSBhZ2dyZWYpOwor CisJCXJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9CisJCQlsaXN0X2FwcGVuZF91bmlxdWUocm9vdC0+ YWdnX2NsYXVzZV9saXN0LCBhY19pbmZvKTsKKwl9CisKKwlsaXN0X2ZyZWUodGxpc3RfZXhwcnMp OworfQorCisvKgorICogY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3MKKyAqCSAgQ3JlYXRlIEdy b3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbiB1c2FibGUgYXMgZ3JvdXBpbmcga2V5Lgor ICoKKyAqIElmIGFueSBncm91cGluZyBleHByZXNzaW9uIGlzIG5vdCBzdWl0YWJsZSwgd2Ugd2ls bCBqdXN0IHJldHVybiB3aXRoCisgKiByb290LT5ncm91cF9leHByX2xpc3QgYmVpbmcgTklMLgor ICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3MoUGxhbm5lckluZm8g KnJvb3QpCit7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisJTGlzdAkgICAqc29ydGdyb3VwcmVm cyA9IE5JTDsKKwlMaXN0CSAgICpidHJlZV9vcGZhbWlsaWVzID0gTklMOworCUxpc3RDZWxsICAg KmxjLAorCQkJICAgKmxjMSwKKwkJCSAgICpsYzIsCisJCQkgICAqbGMzOworCisJQXNzZXJ0KHJv b3QtPmdyb3VwX2V4cHJfbGlzdCA9PSBOSUwpOworCisJZm9yZWFjaChsYywgcm9vdC0+cHJvY2Vz c2VkX2dyb3VwQ2xhdXNlKQorCXsKKwkJU29ydEdyb3VwQ2xhdXNlICpzZ2MgPSBsZmlyc3Rfbm9k ZShTb3J0R3JvdXBDbGF1c2UsIGxjKTsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IGdldF9zb3J0Z3Jv dXBjbGF1c2VfdGxlKHNnYywgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0KTsKKwkJVHlwZUNhY2hlRW50 cnkgKnRjZTsKKwkJT2lkCQkJZXF1YWxpbWFnZXByb2M7CisJCU9pZAkJCWVxX29wOworCQlMaXN0 CSAgICplcV9vcGZhbWlsaWVzOworCQlPaWQJCQlidHJlZV9vcGZhbWlseTsKKworCQlBc3NlcnQo dGxlLT5yZXNzb3J0Z3JvdXByZWYgPiAwKTsKKworCQkvKgorCQkgKiBGb3Igbm93IHdlIG9ubHkg c3VwcG9ydCBwbGFpbiBWYXJzIGFzIGdyb3VwaW5nIGV4cHJlc3Npb25zLgorCQkgKi8KKwkJaWYg KCFJc0EodGxlLT5leHByLCBWYXIpKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIEVhZ2VyIGFn Z3JlZ2F0aW9uIGlzIG9ubHkgcG9zc2libGUgaWYgZXF1YWxpdHkgb2YgZ3JvdXBpbmcga2V5cywg YXMKKwkJICogZGVmaW5lZCBieSB0aGUgZXF1YWxpdHkgb3BlcmF0b3IsIGltcGxpZXMgYml0d2lz ZSBlcXVhbGl0eS4KKwkJICogT3RoZXJ3aXNlLCBpZiB3ZSBwdXQga2V5cyB3aXRoIGRpZmZlcmVu dCBieXRlIGltYWdlcyBpbnRvIHRoZSBzYW1lCisJCSAqIGdyb3VwLCB3ZSBtYXkgbG9zZSBzb21l IGluZm9ybWF0aW9uIHRoYXQgY291bGQgYmUgbmVlZGVkIHRvCisJCSAqIGV2YWx1YXRlIHVwcGVy IHF1YWwgY2xhdXNlcy4KKwkJICoKKwkJICogRm9yIGV4YW1wbGUsIHRoZSBOVU1FUklDIGRhdGEg dHlwZSBpcyBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgdmFsdWVzCisJCSAqIHRoYXQgZmFsbCBpbnRv IHRoZSBzYW1lIGdyb3VwIGFjY29yZGluZyB0byB0aGUgZXF1YWxpdHkgb3BlcmF0b3IKKwkJICog KGUuZy4gMCBhbmQgMC4wKSBjYW4gaGF2ZSBkaWZmZXJlbnQgc2NhbGUuCisJCSAqLworCQl0Y2Ug PSBsb29rdXBfdHlwZV9jYWNoZShleHByVHlwZSgoTm9kZSAqKSB0bGUtPmV4cHIpLAorCQkJCQkJ CQlUWVBFQ0FDSEVfQlRSRUVfT1BGQU1JTFkpOworCQlpZiAoIU9pZElzVmFsaWQodGNlLT5idHJl ZV9vcGYpIHx8CisJCQkhT2lkSXNWYWxpZCh0Y2UtPmJ0cmVlX29waW50eXBlKSkKKwkJCXJldHVy bjsKKworCQllcXVhbGltYWdlcHJvYyA9IGdldF9vcGZhbWlseV9wcm9jKHRjZS0+YnRyZWVfb3Bm LAorCQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQkJICAgdGNlLT5i dHJlZV9vcGludHlwZSwKKwkJCQkJCQkJCQkgICBCVEVRVUFMSU1BR0VfUFJPQyk7CisJCWlmICgh T2lkSXNWYWxpZChlcXVhbGltYWdlcHJvYykgfHwKKwkJCSFEYXR1bUdldEJvb2woT2lkRnVuY3Rp b25DYWxsMUNvbGwoZXF1YWxpbWFnZXByb2MsCisJCQkJCQkJCQkJCSAgIHRjZS0+dHlwY29sbGF0 aW9uLAorCQkJCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHRjZS0+YnRyZWVfb3BpbnR5cGUp KSkpCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogR2V0IHRoZSBvcGVyYXRvciBpbiB0aGUgYnRy ZWUncyBvcGZhbWlseS4KKwkJICovCisJCWVxX29wID0gZ2V0X29wZmFtaWx5X21lbWJlcih0Y2Ut PmJ0cmVlX29wZiwKKwkJCQkJCQkJCXRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQl0Y2Ut PmJ0cmVlX29waW50eXBlLAorCQkJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyKTsKKwkJaWYg KCFPaWRJc1ZhbGlkKGVxX29wKSkKKwkJCXJldHVybjsKKwkJZXFfb3BmYW1pbGllcyA9IGdldF9t ZXJnZWpvaW5fb3BmYW1pbGllcyhlcV9vcCk7CisJCWlmICghZXFfb3BmYW1pbGllcykKKwkJCXJl dHVybjsKKwkJYnRyZWVfb3BmYW1pbHkgPSBsaW5pdGlhbF9vaWQoZXFfb3BmYW1pbGllcyk7CisK KwkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCB0bGUtPmV4cHIpOworCQlzb3J0Z3JvdXByZWZzID0g bGFwcGVuZF9pbnQoc29ydGdyb3VwcmVmcywgdGxlLT5yZXNzb3J0Z3JvdXByZWYpOworCQlidHJl ZV9vcGZhbWlsaWVzID0gbGFwcGVuZF9vaWQoYnRyZWVfb3BmYW1pbGllcywgYnRyZWVfb3BmYW1p bHkpOworCX0KKworCS8qCisJICogQ29uc3RydWN0IEdyb3VwRXhwckluZm8gZm9yIGVhY2ggZXhw cmVzc2lvbi4KKwkgKi8KKwlmb3J0aHJlZShsYzEsIGV4cHJzLCBsYzIsIHNvcnRncm91cHJlZnMs IGxjMywgYnRyZWVfb3BmYW1pbGllcykKKwl7CisJCUV4cHIJICAgKmV4cHIgPSAoRXhwciAqKSBs Zmlyc3QobGMxKTsKKwkJaW50CQkJc29ydGdyb3VwcmVmID0gbGZpcnN0X2ludChsYzIpOworCQlP aWQJCQlidHJlZV9vcGZhbWlseSA9IGxmaXJzdF9vaWQobGMzKTsKKwkJR3JvdXBFeHBySW5mbyAq Z2VfaW5mbzsKKworCQlnZV9pbmZvID0gbWFrZU5vZGUoR3JvdXBFeHBySW5mbyk7CisJCWdlX2lu Zm8tPmV4cHIgPSAoRXhwciAqKSBjb3B5T2JqZWN0KGV4cHIpOworCQlnZV9pbmZvLT5zb3J0Z3Jv dXByZWYgPSBzb3J0Z3JvdXByZWY7CisJCWdlX2luZm8tPmJ0cmVlX29wZmFtaWx5ID0gYnRyZWVf b3BmYW1pbHk7CisKKwkJcm9vdC0+Z3JvdXBfZXhwcl9saXN0ID0gbGFwcGVuZChyb290LT5ncm91 cF9leHByX2xpc3QsIGdlX2luZm8pOworCX0KK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggZTE3ZDMxYTVjMy4uYThm MTAyYmViOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4u YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCkBAIC02NCw4ICs2 NCwxMiBAQCBxdWVyeV9wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LAogCSAqIE5PVEU6IGFwcGVu ZF9yZWxfbGlzdCB3YXMgc2V0IHVwIGJ5IHN1YnF1ZXJ5X3BsYW5uZXIsIHNvIGRvIG5vdCB0b3Vj aAogCSAqIGhlcmUuCiAJICovCi0Jcm9vdC0+am9pbl9yZWxfbGlzdCA9IE5JTDsKLQlyb290LT5q b2luX3JlbF9oYXNoID0gTlVMTDsKKwlyb290LT5qb2luX3JlbF9saXN0ID0gbWFrZU5vZGUoUmVs SW5mb0xpc3QpOworCXJvb3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zID0gTklMOworCXJvb3QtPmpv aW5fcmVsX2xpc3QtPmhhc2ggPSBOVUxMOworCXJvb3QtPmdyb3VwZWRfcmVsX2xpc3QgPSBtYWtl Tm9kZShSZWxJbmZvTGlzdCk7CisJcm9vdC0+Z3JvdXBlZF9yZWxfbGlzdC0+aXRlbXMgPSBOSUw7 CisJcm9vdC0+Z3JvdXBlZF9yZWxfbGlzdC0+aGFzaCA9IE5VTEw7CiAJcm9vdC0+am9pbl9yZWxf bGV2ZWwgPSBOVUxMOwogCXJvb3QtPmpvaW5fY3VyX2xldmVsID0gMDsKIAlyb290LT5jYW5vbl9w YXRoa2V5cyA9IE5JTDsKQEAgLTc2LDYgKzgwLDkgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5m byAqcm9vdCwKIAlyb290LT5wbGFjZWhvbGRlcl9saXN0ID0gTklMOwogCXJvb3QtPnBsYWNlaG9s ZGVyX2FycmF5ID0gTlVMTDsKIAlyb290LT5wbGFjZWhvbGRlcl9hcnJheV9zaXplID0gMDsKKwly b290LT5hZ2dfY2xhdXNlX2xpc3QgPSBOSUw7CisJcm9vdC0+Z3JvdXBfZXhwcl9saXN0ID0gTklM OworCXJvb3QtPnRsaXN0X3ZhcnMgPSBOSUw7CiAJcm9vdC0+ZmtleV9saXN0ID0gTklMOwogCXJv b3QtPmluaXRpYWxfcmVscyA9IE5JTDsKIApAQCAtMjU3LDYgKzI2NCwxMiBAQCBxdWVyeV9wbGFu bmVyKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCWV4dHJhY3RfcmVzdHJpY3Rpb25fb3JfY2xh dXNlcyhyb290KTsKIAorCS8qCisJICogQ2hlY2sgaWYgZWFnZXIgYWdncmVnYXRpb24gaXMgYXBw bGljYWJsZSwgYW5kIGlmIHNvLCBzZXQgdXAKKwkgKiByb290LT5hZ2dfY2xhdXNlX2xpc3QgYW5k IHJvb3QtPmdyb3VwX2V4cHJfbGlzdC4KKwkgKi8KKwlzZXR1cF9lYWdlcl9hZ2dyZWdhdGlvbihy b290KTsKKwogCS8qCiAJICogTm93IGV4cGFuZCBhcHBlbmRyZWxzIGJ5IGFkZGluZyAib3RoZXJy ZWxzIiBmb3IgdGhlaXIgY2hpbGRyZW4uICBXZQogCSAqIGRlbGF5IHRoaXMgdG8gdGhlIGVuZCBz byB0aGF0IHdlIGhhdmUgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGQ5MmQ0M2ExN2UuLjkyMmNiN2E3OTMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTIyNyw3ICsyMjcsNiBAQCBzdGF0aWMg dm9pZCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICppbnB1dF9yZWwsCiAJCQkJCQkJCQkgIFJlbE9wdEluZm8gKnBhcnRpYWxseV9ncm91cGVk X3JlbCwKIAkJCQkJCQkJCSAgY29uc3QgQWdnQ2xhdXNlQ29zdHMgKmFnZ19jb3N0cywKIAkJCQkJ CQkJCSAgZ3JvdXBpbmdfc2V0c19kYXRhICpnZCwKLQkJCQkJCQkJCSAgZG91YmxlIGROdW1Hcm91 cHMsCiAJCQkJCQkJCQkgIEdyb3VwUGF0aEV4dHJhRGF0YSAqZXh0cmEpOwogc3RhdGljIFJlbE9w dEluZm8gKmNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkJCQkJCQkJIFJlbE9wdEluZm8gKmdyb3VwZWRfcmVsLApAQCAtNDA3NSw5ICs0MDc0LDcg QEAgY3JlYXRlX29yZGluYXJ5X2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkJICAgR3JvdXBQYXRoRXh0cmFEYXRhICpleHRyYSwK IAkJCQkJCQkgICBSZWxPcHRJbmZvICoqcGFydGlhbGx5X2dyb3VwZWRfcmVsX3ApCiB7Ci0JUGF0 aAkgICAqY2hlYXBlc3RfcGF0aCA9IGlucHV0X3JlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aDsKIAlS ZWxPcHRJbmZvICpwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgPSBOVUxMOwotCWRvdWJsZQkJZE51bUdy b3VwczsKIAlQYXJ0aXRpb253aXNlQWdncmVnYXRlVHlwZSBwYXR5cGUgPSBQQVJUSVRJT05XSVNF X0FHR1JFR0FURV9OT05FOwogCiAJLyoKQEAgLTQxNTgsMjMgKzQxNTUsMTYgQEAgY3JlYXRlX29y ZGluYXJ5X2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1 dF9yZWwsCiAKIAkvKiBHYXRoZXIgYW55IHBhcnRpYWxseSBncm91cGVkIHBhcnRpYWwgcGF0aHMu ICovCiAJaWYgKHBhcnRpYWxseV9ncm91cGVkX3JlbCAmJiBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwt PnBhcnRpYWxfcGF0aGxpc3QpCi0JewogCQlnYXRoZXJfZ3JvdXBpbmdfcGF0aHMocm9vdCwgcGFy dGlhbGx5X2dyb3VwZWRfcmVsKTsKLQkJc2V0X2NoZWFwZXN0KHBhcnRpYWxseV9ncm91cGVkX3Jl bCk7Ci0JfQogCi0JLyoKLQkgKiBFc3RpbWF0ZSBudW1iZXIgb2YgZ3JvdXBzLgotCSAqLwotCWRO dW1Hcm91cHMgPSBnZXRfbnVtYmVyX29mX2dyb3Vwcyhyb290LAotCQkJCQkJCQkJICBjaGVhcGVz dF9wYXRoLT5yb3dzLAotCQkJCQkJCQkJICBnZCwKLQkJCQkJCQkJCSAgZXh0cmEtPnRhcmdldExp c3QpOworCS8qIE5vdyBjaG9vc2UgdGhlIGJlc3QgcGF0aChzKSBmb3IgcGFydGlhbGx5X2dyb3Vw ZWRfcmVsLiAqLworCWlmIChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3Vw ZWRfcmVsLT5wYXRobGlzdCkKKwkJc2V0X2NoZWFwZXN0KHBhcnRpYWxseV9ncm91cGVkX3JlbCk7 CiAKIAkvKiBCdWlsZCBmaW5hbCBncm91cGluZyBwYXRocyAqLwogCWFkZF9wYXRoc190b19ncm91 cGluZ19yZWwocm9vdCwgaW5wdXRfcmVsLCBncm91cGVkX3JlbCwKIAkJCQkJCQkgIHBhcnRpYWxs eV9ncm91cGVkX3JlbCwgYWdnX2Nvc3RzLCBnZCwKLQkJCQkJCQkgIGROdW1Hcm91cHMsIGV4dHJh KTsKKwkJCQkJCQkgIGV4dHJhKTsKIAogCS8qIEdpdmUgYSBoZWxwZnVsIGVycm9yIGlmIHdlIGZh aWxlZCB0byBmaW5kIGFueSBpbXBsZW1lbnRhdGlvbiAqLwogCWlmIChncm91cGVkX3JlbC0+cGF0 aGxpc3QgPT0gTklMKQpAQCAtNzA3NCwxNiArNzA2NCw0MiBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBp bmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkg IFJlbE9wdEluZm8gKmdyb3VwZWRfcmVsLAogCQkJCQkJICBSZWxPcHRJbmZvICpwYXJ0aWFsbHlf Z3JvdXBlZF9yZWwsCiAJCQkJCQkgIGNvbnN0IEFnZ0NsYXVzZUNvc3RzICphZ2dfY29zdHMsCi0J CQkJCQkgIGdyb3VwaW5nX3NldHNfZGF0YSAqZ2QsIGRvdWJsZSBkTnVtR3JvdXBzLAorCQkJCQkJ ICBncm91cGluZ19zZXRzX2RhdGEgKmdkLAogCQkJCQkJICBHcm91cFBhdGhFeHRyYURhdGEgKmV4 dHJhKQogewogCVF1ZXJ5CSAgICpwYXJzZSA9IHJvb3QtPnBhcnNlOwogCVBhdGgJICAgKmNoZWFw ZXN0X3BhdGggPSBpbnB1dF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CisJUGF0aAkgICAqY2hl YXBlc3RfcGFydGlhbGx5X2dyb3VwZWRfcGF0aCA9IE5VTEw7CiAJTGlzdENlbGwgICAqbGM7CiAJ Ym9vbAkJY2FuX2hhc2ggPSAoZXh0cmEtPmZsYWdzICYgR1JPVVBJTkdfQ0FOX1VTRV9IQVNIKSAh PSAwOwogCWJvb2wJCWNhbl9zb3J0ID0gKGV4dHJhLT5mbGFncyAmIEdST1VQSU5HX0NBTl9VU0Vf U09SVCkgIT0gMDsKIAlMaXN0CSAgICpoYXZpbmdRdWFsID0gKExpc3QgKikgZXh0cmEtPmhhdmlu Z1F1YWw7CiAJQWdnQ2xhdXNlQ29zdHMgKmFnZ19maW5hbF9jb3N0cyA9ICZleHRyYS0+YWdnX2Zp bmFsX2Nvc3RzOworCWRvdWJsZQkJZE51bUdyb3VwcyA9IDA7CisJZG91YmxlCQlkTnVtRmluYWxH cm91cHMgPSAwOworCisJLyoKKwkgKiBFc3RpbWF0ZSBudW1iZXIgb2YgZ3JvdXBzIGZvciBub24t c3BsaXQgYWdncmVnYXRpb24uCisJICovCisJZE51bUdyb3VwcyA9IGdldF9udW1iZXJfb2ZfZ3Jv dXBzKHJvb3QsCisJCQkJCQkJCQkgIGNoZWFwZXN0X3BhdGgtPnJvd3MsCisJCQkJCQkJCQkgIGdk LAorCQkJCQkJCQkJICBleHRyYS0+dGFyZ2V0TGlzdCk7CisKKwlpZiAocGFydGlhbGx5X2dyb3Vw ZWRfcmVsICYmIHBhcnRpYWxseV9ncm91cGVkX3JlbC0+cGF0aGxpc3QpCisJeworCQljaGVhcGVz dF9wYXJ0aWFsbHlfZ3JvdXBlZF9wYXRoID0KKwkJCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+Y2hl YXBlc3RfdG90YWxfcGF0aDsKKworCQkvKgorCQkgKiBFc3RpbWF0ZSBudW1iZXIgb2YgZ3JvdXBz IGZvciBmaW5hbCBwaGFzZSBvZiBwYXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkgKi8KKwkJZE51bUZp bmFsR3JvdXBzID0KKwkJCWdldF9udW1iZXJfb2ZfZ3JvdXBzKHJvb3QsCisJCQkJCQkJCSBjaGVh cGVzdF9wYXJ0aWFsbHlfZ3JvdXBlZF9wYXRoLT5yb3dzLAorCQkJCQkJCQkgZ2QsCisJCQkJCQkJ CSBleHRyYS0+dGFyZ2V0TGlzdCk7CisJfQogCiAJaWYgKGNhbl9zb3J0KQogCXsKQEAgLTcxOTUs NyArNzIxMSw3IEBAIGFkZF9wYXRoc190b19ncm91cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJcGF0aCA9IG1ha2Vfb3JkZXJlZF9wYXRoKHJv b3QsCiAJCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKIAkJCQkJCQkJCQkJIHBhdGgsCi0JCQkJCQkJ CQkJCSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgsCisJCQkJCQkJ CQkJCSBjaGVhcGVzdF9wYXJ0aWFsbHlfZ3JvdXBlZF9wYXRoLAogCQkJCQkJCQkJCQkgaW5mby0+ cGF0aGtleXMpOwogCiAJCQkJCWlmIChwYXRoID09IE5VTEwpCkBAIC03MjEyLDcgKzcyMjgsNyBA QCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICppbnB1dF9yZWwsCiAJCQkJCQkJCQkJCQkgaW5mby0+Y2xhdXNlcywKIAkJCQkJCQkJCQkJCSBo YXZpbmdRdWFsLAogCQkJCQkJCQkJCQkJIGFnZ19maW5hbF9jb3N0cywKLQkJCQkJCQkJCQkJCSBk TnVtR3JvdXBzKSk7CisJCQkJCQkJCQkJCQkgZE51bUZpbmFsR3JvdXBzKSk7CiAJCQkJCWVsc2UK IAkJCQkJCWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAqKQogCQkJCQkJCQkgY3JlYXRlX2dy b3VwX3BhdGgocm9vdCwKQEAgLTcyMjAsNyArNzIzNiw3IEBAIGFkZF9wYXRoc190b19ncm91cGlu Z19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkJ CQkJCSAgIHBhdGgsCiAJCQkJCQkJCQkJCQkgICBpbmZvLT5jbGF1c2VzLAogCQkJCQkJCQkJCQkJ ICAgaGF2aW5nUXVhbCwKLQkJCQkJCQkJCQkJCSAgIGROdW1Hcm91cHMpKTsKKwkJCQkJCQkJCQkJ CSAgIGROdW1GaW5hbEdyb3VwcykpOwogCiAJCQkJfQogCQkJfQpAQCAtNzI2MiwxOSArNzI3OCwx NyBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICppbnB1dF9yZWwsCiAJCSAqLwogCQlpZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsICYmIHBh cnRpYWxseV9ncm91cGVkX3JlbC0+cGF0aGxpc3QpCiAJCXsKLQkJCVBhdGgJICAgKnBhdGggPSBw YXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7Ci0KIAkJCWFkZF9wYXRo KGdyb3VwZWRfcmVsLCAoUGF0aCAqKQogCQkJCQkgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCiAJCQkJ CQkJCQkgZ3JvdXBlZF9yZWwsCi0JCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCSBjaGVhcGVzdF9w YXJ0aWFsbHlfZ3JvdXBlZF9wYXRoLAogCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQs CiAJCQkJCQkJCQkgQUdHX0hBU0hFRCwKIAkJCQkJCQkJCSBBR0dTUExJVF9GSU5BTF9ERVNFUklB TCwKIAkJCQkJCQkJCSByb290LT5wcm9jZXNzZWRfZ3JvdXBDbGF1c2UsCiAJCQkJCQkJCQkgaGF2 aW5nUXVhbCwKIAkJCQkJCQkJCSBhZ2dfZmluYWxfY29zdHMsCi0JCQkJCQkJCQkgZE51bUdyb3Vw cykpOworCQkJCQkJCQkJIGROdW1GaW5hbEdyb3VwcykpOwogCQl9CiAJfQogCkBAIC03MzI0LDYg KzczMzgsMjEgQEAgY3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsCiAJYm9vbAkJY2FuX2hhc2ggPSAoZXh0cmEtPmZsYWdzICYgR1JPVVBJTkdfQ0FOX1VTRV9I QVNIKSAhPSAwOwogCWJvb2wJCWNhbl9zb3J0ID0gKGV4dHJhLT5mbGFncyAmIEdST1VQSU5HX0NB Tl9VU0VfU09SVCkgIT0gMDsKIAorCS8qCisJICogVGhlIHBhcnRpYWxseV9ncm91cGVkX3JlbCBj b3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBjcmVhdGVkIGR1ZSB0byBlYWdlcgorCSAqIGFnZ3JlZ2F0 aW9uLgorCSAqLworCXBhcnRpYWxseV9ncm91cGVkX3JlbCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9v dCwgaW5wdXRfcmVsLT5yZWxpZHMpOworCUFzc2VydChlbmFibGVfZWFnZXJfYWdncmVnYXRlIHx8 IHBhcnRpYWxseV9ncm91cGVkX3JlbCA9PSBOVUxMKTsKKworCS8qCisJICogSXQgaXMgcG9zc2li bGUgdGhhdCB0aGUgcGFydGlhbGx5X2dyb3VwZWRfcmVsIGNyZWF0ZWQgYnkgZWFnZXIKKwkgKiBh Z2dyZWdhdGlvbiBpcyBkdW1teS4gIEluIHRoaXMgY2FzZSB3ZSBqdXN0IHNldCBpdCB0byBOVUxM LiAgSXQgbWlnaHQKKwkgKiBiZSBjcmVhdGVkIGFnYWluIGJ5IHRoZSBmb2xsb3dpbmcgbG9naWMg aWYgcG9zc2libGUuCisJICovCisJaWYgKHBhcnRpYWxseV9ncm91cGVkX3JlbCAmJiBJU19EVU1N WV9SRUwocGFydGlhbGx5X2dyb3VwZWRfcmVsKSkKKwkJcGFydGlhbGx5X2dyb3VwZWRfcmVsID0g TlVMTDsKKwogCS8qCiAJICogQ29uc2lkZXIgd2hldGhlciB3ZSBzaG91bGQgZ2VuZXJhdGUgcGFy dGlhbGx5IGFnZ3JlZ2F0ZWQgbm9uLXBhcnRpYWwKIAkgKiBwYXRocy4gIFdlIGNhbiBvbmx5IGRv IHRoaXMgaWYgd2UgaGF2ZSBhIG5vbi1wYXJ0aWFsIHBhdGgsIGFuZCBvbmx5IGlmCkBAIC03MzQ3 LDE5ICs3Mzc2LDI3IEBAIGNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LAogCSAqIElmIHdlIGNhbid0IHBhcnRpYWxseSBhZ2dyZWdhdGUgcGFydGlhbCBwYXRo cywgYW5kIHdlIGNhbid0IHBhcnRpYWxseQogCSAqIGFnZ3JlZ2F0ZSBub24tcGFydGlhbCBwYXRo cywgdGhlbiBkb24ndCBib3RoZXIgY3JlYXRpbmcgdGhlIG5ldwogCSAqIFJlbE9wdEluZm8gYXQg YWxsLCB1bmxlc3MgdGhlIGNhbGxlciBzcGVjaWZpZWQgZm9yY2VfcmVsX2NyZWF0aW9uLgorCSAq CisJICogTm90ZSB0aGF0IHRoZSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgY291bGQgaGF2ZSBiZWVu IGFscmVhZHkgY3JlYXRlZCBhbmQKKwkgKiBwb3B1bGF0ZWQgd2l0aCBhcHByb3ByaWF0ZSBwYXRo cyBieSBlYWdlciBhZ2dyZWdhdGlvbi4KIAkgKi8KIAlpZiAoY2hlYXBlc3RfdG90YWxfcGF0aCA9 PSBOVUxMICYmCiAJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9PSBOVUxMICYmCisJCShwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwgPT0gTlVMTCB8fAorCQkgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXRo bGlzdCA9PSBOSUwpICYmCiAJCSFmb3JjZV9yZWxfY3JlYXRpb24pCiAJCXJldHVybiBOVUxMOwog CiAJLyoKIAkgKiBCdWlsZCBhIG5ldyB1cHBlciByZWxhdGlvbiB0byByZXByZXNlbnQgdGhlIHJl c3VsdCBvZiBwYXJ0aWFsbHkKLQkgKiBhZ2dyZWdhdGluZyB0aGUgcm93cyBmcm9tIHRoZSBpbnB1 dCByZWxhdGlvbi4KLQkgKi8KLQlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgPSBmZXRjaF91cHBlcl9y ZWwocm9vdCwKLQkJCQkJCQkJCQkJVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0csCi0JCQkJCQkJ CQkJCWdyb3VwZWRfcmVsLT5yZWxpZHMpOworCSAqIGFnZ3JlZ2F0aW5nIHRoZSByb3dzIGZyb20g dGhlIGlucHV0IHJlbGF0aW9uLiAgVGhlIHJlbGF0aW9uIG1heSBhbHJlYWR5CisJICogZXhpc3Qg ZHVlIHRvIGVhZ2VyIGFnZ3JlZ2F0aW9uLCBpbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8g Y3JlYXRlCisJICogaXQuCisJICovCisJaWYgKHBhcnRpYWxseV9ncm91cGVkX3JlbCA9PSBOVUxM KQorCQlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgPSBmZXRjaF91cHBlcl9yZWwocm9vdCwKKwkJCQkJ CQkJCQkJCVVQUEVSUkVMX1BBUlRJQUxfR1JPVVBfQUdHLAorCQkJCQkJCQkJCQkJZ3JvdXBlZF9y ZWwtPnJlbGlkcyk7CiAJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9 CiAJCWdyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9y ZWwtPnJlbG9wdGtpbmQgPSBncm91cGVkX3JlbC0+cmVsb3B0a2luZDsKQEAgLTczNjgsNiArNzQw NSwxNCBAQCBjcmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwK IAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnVzZXJpZGlzY3VycmVudCA9IGdyb3VwZWRfcmVsLT51 c2VyaWRpc2N1cnJlbnQ7CiAJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5mZHdyb3V0aW5lID0gZ3Jv dXBlZF9yZWwtPmZkd3JvdXRpbmU7CiAKKwkvKgorCSAqIFBhcnRpYWxseS1ncm91cGVkIHBhcnRp YWwgcGF0aHMgbWF5IGhhdmUgYmVlbiBnZW5lcmF0ZWQgYnkgZWFnZXIKKwkgKiBhZ2dyZWdhdGlv bi4gIElmIHdlIGZpbmQgdGhhdCBwYXJhbGxlbGlzbSBpcyBub3QgcG9zc2libGUgZm9yCisJICog cGFydGlhbGx5X2dyb3VwZWRfcmVsLCB3ZSBuZWVkIHRvIGRyb3AgdGhlc2UgcGFydGlhbCBwYXRo cy4KKwkgKi8KKwlpZiAoIXBhcnRpYWxseV9ncm91cGVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwp CisJCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+cGFydGlhbF9wYXRobGlzdCA9IE5JTDsKKwogCS8q CiAJICogQnVpbGQgdGFyZ2V0IGxpc3QgZm9yIHBhcnRpYWwgYWdncmVnYXRlIHBhdGhzLiAgVGhl c2UgcGF0aHMgY2Fubm90IGp1c3QKIAkgKiBlbWl0IHRoZSBzYW1lIHRsaXN0IGFzIHJlZ3VsYXIg YWdncmVnYXRlIHBhdGhzLCBiZWNhdXNlICgxKSB3ZSBtdXN0CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9hcHBlbmRpbmZvLmMKaW5kZXggNDk4OTcyMjYzNy4uNDg4NGQ5ZGRlYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL2FwcGVuZGluZm8uYwpAQCAtNDk5LDYgKzQ5OSw2NiBAQCBhZGp1 c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJcmV0dXJuIChOb2RlICop IG5ld2luZm87CiAJfQogCisJLyoKKwkgKiBXZSBoYXZlIHRvIHByb2Nlc3MgUmVsQWdnSW5mbyBu b2RlcyBzcGVjaWFsbHkuCisJICovCisJaWYgKElzQShub2RlLCBSZWxBZ2dJbmZvKSkKKwl7CisJ CVJlbEFnZ0luZm8gKm9sZGluZm8gPSAoUmVsQWdnSW5mbyAqKSBub2RlOworCQlSZWxBZ2dJbmZv ICpuZXdpbmZvID0gbWFrZU5vZGUoUmVsQWdnSW5mbyk7CisKKwkJLyogQ29weSBhbGwgZmxhdC1j b3BpYWJsZSBmaWVsZHMgKi8KKwkJbWVtY3B5KG5ld2luZm8sIG9sZGluZm8sIHNpemVvZihSZWxB Z2dJbmZvKSk7CisKKwkJbmV3aW5mby0+cmVsaWRzID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhvbGRp bmZvLT5yZWxpZHMsCisJCQkJCQkJCQkJCSAgY29udGV4dC0+bmFwcGluZm9zLAorCQkJCQkJCQkJ CQkgIGNvbnRleHQtPmFwcGluZm9zKTsKKworCQluZXdpbmZvLT50YXJnZXQgPSAoUGF0aFRhcmdl dCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKChOb2RlICopIG9sZGluZm8t PnRhcmdldCwKKwkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQluZXdpbmZvLT5hZ2dfaW5wdXQg PSAoUGF0aFRhcmdldCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKChOb2Rl ICopIG9sZGluZm8tPmFnZ19pbnB1dCwKKwkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQluZXdp bmZvLT5ncm91cF9jbGF1c2VzID0gKExpc3QgKikKKwkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNf bXV0YXRvcigoTm9kZSAqKSBvbGRpbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCSAgIGNv bnRleHQpOworCisJCW5ld2luZm8tPmdyb3VwX2V4cHJzID0gKExpc3QgKikKKwkJCWFkanVzdF9h cHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZvLT5ncm91cF9leHBycywKKwkJ CQkJCQkJCQkgICBjb250ZXh0KTsKKworCQlyZXR1cm4gKE5vZGUgKikgbmV3aW5mbzsKKwl9CisK KwkvKgorCSAqIFdlIGhhdmUgdG8gcHJvY2VzcyBQYXRoVGFyZ2V0IG5vZGVzIHNwZWNpYWxseS4K KwkgKi8KKwlpZiAoSXNBKG5vZGUsIFBhdGhUYXJnZXQpKQorCXsKKwkJUGF0aFRhcmdldCAqb2xk dGFyZ2V0ID0gKFBhdGhUYXJnZXQgKikgbm9kZTsKKwkJUGF0aFRhcmdldCAqbmV3dGFyZ2V0ID0g bWFrZU5vZGUoUGF0aFRhcmdldCk7CisKKwkJLyogQ29weSBhbGwgZmxhdC1jb3BpYWJsZSBmaWVs ZHMgKi8KKwkJbWVtY3B5KG5ld3RhcmdldCwgb2xkdGFyZ2V0LCBzaXplb2YoUGF0aFRhcmdldCkp OworCisJCWlmIChvbGR0YXJnZXQtPnNvcnRncm91cHJlZnMpCisJCXsKKwkJCVNpemUJCW5ieXRl cyA9IGxpc3RfbGVuZ3RoKG9sZHRhcmdldC0+ZXhwcnMpICogc2l6ZW9mKEluZGV4KTsKKworCQkJ bmV3dGFyZ2V0LT5leHBycyA9IChMaXN0ICopCisJCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19t dXRhdG9yKChOb2RlICopIG9sZHRhcmdldC0+ZXhwcnMsCisJCQkJCQkJCQkJCSAgIGNvbnRleHQp OworCisJCQluZXd0YXJnZXQtPnNvcnRncm91cHJlZnMgPSAoSW5kZXggKikgcGFsbG9jKG5ieXRl cyk7CisJCQltZW1jcHkobmV3dGFyZ2V0LT5zb3J0Z3JvdXByZWZzLCBvbGR0YXJnZXQtPnNvcnRn cm91cHJlZnMsIG5ieXRlcyk7CisJCX0KKworCQlyZXR1cm4gKE5vZGUgKikgbmV3dGFyZ2V0Owor CX0KKwogCS8qCiAJICogTk9URTogd2UgZG8gbm90IG5lZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ymxp bmtzLCBiZWNhdXNlIHRoZXkgc2hvdWxkCiAJICogYWxyZWFkeSBoYXZlIGJlZW4gY29udmVydGVk IHRvIHN1YnBsYW5zIGJlZm9yZSB3ZSBzZWUgdGhlbS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCmluZGV4IGZjOTdiZjZlZTIuLjY3M2UxODFiMzIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtMjYyLDYgKzI2MiwxMiBAQCBjb21wYXJlX3BhdGhfY29z dHNfZnV6emlseShQYXRoICpwYXRoMSwgUGF0aCAqcGF0aDIsIGRvdWJsZSBmdXp6X2ZhY3RvcikK ICAqIHVucGFyYW1ldGVyaXplZCBwYXRoLCB0b28sIGlmIHRoZXJlIGlzIG9uZTsgdGhlIHVzZXJz IG9mIHRoYXQgbGlzdCBmaW5kCiAgKiBpdCBtb3JlIGNvbnZlbmllbnQgaWYgdGhhdCdzIGluY2x1 ZGVkLgogICoKKyAqIGNoZWFwZXN0X3BhcmFtZXRlcml6ZWRfcGF0aHMgYWxzbyBhbHdheXMgaW5j bHVkZXMgdGhlIGZld2VzdC1yb3cKKyAqIHVucGFyYW1ldGVyaXplZCBwYXRoLCBpZiB0aGVyZSBp cyBvbmUsIGZvciBncm91cGVkIHJlbGF0aW9ucy4gIERpZmZlcmVudAorICogcGF0aHMgb2YgYSBn cm91cGVkIHJlbGF0aW9uIGNhbiBoYXZlIHZlcnkgZGlmZmVyZW50IHJvdyBjb3VudHMsIGFuZCBp biBzb21lCisgKiBjYXNlcyB0aGUgY2hlYXBlc3QtdG90YWwgdW5wYXJhbWV0ZXJpemVkIHBhdGgg bWF5IG5vdCBiZSB0aGUgb25lIHdpdGggdGhlCisgKiBmZXdlc3Qgcm93LgorICoKICAqIFRoaXMg aXMgbm9ybWFsbHkgY2FsbGVkIG9ubHkgYWZ0ZXIgd2UndmUgZmluaXNoZWQgY29uc3RydWN0aW5n IHRoZSBwYXRoCiAgKiBsaXN0IGZvciB0aGUgcmVsIG5vZGUuCiAgKi8KQEAgLTI3MSw2ICsyNzcs NyBAQCBzZXRfY2hlYXBlc3QoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCkKIAlQYXRoCSAgICpjaGVh cGVzdF9zdGFydHVwX3BhdGg7CiAJUGF0aAkgICAqY2hlYXBlc3RfdG90YWxfcGF0aDsKIAlQYXRo CSAgICpiZXN0X3BhcmFtX3BhdGg7CisJUGF0aAkgICAqZmV3ZXN0X3Jvd19wYXRoOwogCUxpc3QJ ICAgKnBhcmFtZXRlcml6ZWRfcGF0aHM7CiAJTGlzdENlbGwgICAqcDsKIApAQCAtMjgwLDYgKzI4 Nyw3IEBAIHNldF9jaGVhcGVzdChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKQogCQllbG9nKEVSUk9S LCAiY291bGQgbm90IGRldmlzZSBhIHF1ZXJ5IHBsYW4gZm9yIHRoZSBnaXZlbiBxdWVyeSIpOwog CiAJY2hlYXBlc3Rfc3RhcnR1cF9wYXRoID0gY2hlYXBlc3RfdG90YWxfcGF0aCA9IGJlc3RfcGFy YW1fcGF0aCA9IE5VTEw7CisJZmV3ZXN0X3Jvd19wYXRoID0gTlVMTDsKIAlwYXJhbWV0ZXJpemVk X3BhdGhzID0gTklMOwogCiAJZm9yZWFjaChwLCBwYXJlbnRfcmVsLT5wYXRobGlzdCkKQEAgLTM0 MSw2ICszNDksOCBAQCBzZXRfY2hlYXBlc3QoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCkKIAkJCWlm IChjaGVhcGVzdF90b3RhbF9wYXRoID09IE5VTEwpCiAJCQl7CiAJCQkJY2hlYXBlc3Rfc3RhcnR1 cF9wYXRoID0gY2hlYXBlc3RfdG90YWxfcGF0aCA9IHBhdGg7CisJCQkJaWYgKElTX0dST1VQRURf UkVMKHBhcmVudF9yZWwpKQorCQkJCQlmZXdlc3Rfcm93X3BhdGggPSBwYXRoOwogCQkJCWNvbnRp bnVlOwogCQkJfQogCkBAIC0zNjQsNiArMzc0LDI3IEBAIHNldF9jaGVhcGVzdChSZWxPcHRJbmZv ICpwYXJlbnRfcmVsKQogCQkJCSBjb21wYXJlX3BhdGhrZXlzKGNoZWFwZXN0X3RvdGFsX3BhdGgt PnBhdGhrZXlzLAogCQkJCQkJCQkgIHBhdGgtPnBhdGhrZXlzKSA9PSBQQVRIS0VZU19CRVRURVIy KSkKIAkJCQljaGVhcGVzdF90b3RhbF9wYXRoID0gcGF0aDsKKworCQkJLyoKKwkJCSAqIEZpbmQg dGhlIGZld2VzdC1yb3cgdW5wYXJhbWV0ZXJpemVkIHBhdGggZm9yIGEgZ3JvdXBlZAorCQkJICog cmVsYXRpb24uICBJZiB3ZSBmaW5kIHR3byBwYXRocyBvZiB0aGUgc2FtZSByb3cgY291bnQsIHRy eSB0bworCQkJICoga2VlcCB0aGUgb25lIHdpdGggdGhlIGNoZWFwZXIgdG90YWwgY29zdDsgaWYg dGhlIGNvc3RzIGFyZQorCQkJICogaWRlbnRpY2FsLCBrZWVwIHRoZSBiZXR0ZXItc29ydGVkIG9u ZS4KKwkJCSAqLworCQkJaWYgKElTX0dST1VQRURfUkVMKHBhcmVudF9yZWwpKQorCQkJeworCQkJ CWlmIChmZXdlc3Rfcm93X3BhdGgtPnJvd3MgPiBwYXRoLT5yb3dzKQorCQkJCQlmZXdlc3Rfcm93 X3BhdGggPSBwYXRoOworCQkJCWVsc2UgaWYgKGZld2VzdF9yb3dfcGF0aC0+cm93cyA9PSBwYXRo LT5yb3dzKQorCQkJCXsKKwkJCQkJY21wID0gY29tcGFyZV9wYXRoX2Nvc3RzKGZld2VzdF9yb3df cGF0aCwgcGF0aCwgVE9UQUxfQ09TVCk7CisJCQkJCWlmIChjbXAgPiAwIHx8CisJCQkJCQkoY21w ID09IDAgJiYKKwkJCQkJCSBjb21wYXJlX3BhdGhrZXlzKGZld2VzdF9yb3dfcGF0aC0+cGF0aGtl eXMsCisJCQkJCQkJCQkJICBwYXRoLT5wYXRoa2V5cykgPT0gUEFUSEtFWVNfQkVUVEVSMikpCisJ CQkJCQlmZXdlc3Rfcm93X3BhdGggPSBwYXRoOworCQkJCX0KKwkJCX0KIAkJfQogCX0KIApAQCAt MzcxLDYgKzQwMiwxMCBAQCBzZXRfY2hlYXBlc3QoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCkKIAlp ZiAoY2hlYXBlc3RfdG90YWxfcGF0aCkKIAkJcGFyYW1ldGVyaXplZF9wYXRocyA9IGxjb25zKGNo ZWFwZXN0X3RvdGFsX3BhdGgsIHBhcmFtZXRlcml6ZWRfcGF0aHMpOwogCisJLyogQWRkIGZld2Vz dC1yb3cgdW5wYXJhbWV0ZXJpemVkIHBhdGgsIGlmIGFueSwgdG8gcGFyYW1ldGVyaXplZF9wYXRo cyAqLworCWlmIChmZXdlc3Rfcm93X3BhdGggJiYgZmV3ZXN0X3Jvd19wYXRoICE9IGNoZWFwZXN0 X3RvdGFsX3BhdGgpCisJCXBhcmFtZXRlcml6ZWRfcGF0aHMgPSBsY29ucyhmZXdlc3Rfcm93X3Bh dGgsIHBhcmFtZXRlcml6ZWRfcGF0aHMpOworCiAJLyoKIAkgKiBJZiB0aGVyZSBpcyBubyB1bnBh cmFtZXRlcml6ZWQgcGF0aCwgdXNlIHRoZSBiZXN0IHBhcmFtZXRlcml6ZWQgcGF0aCBhcwogCSAq IGNoZWFwZXN0X3RvdGFsX3BhdGggKGJ1dCBub3QgYXMgY2hlYXBlc3Rfc3RhcnR1cF9wYXRoKS4K QEAgLTI3ODcsOCArMjgyMiw3IEBAIGNyZWF0ZV9wcm9qZWN0aW9uX3BhdGgoUGxhbm5lckluZm8g KnJvb3QsCiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX1Jlc3VsdDsKIAlwYXRobm9kZS0+ cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHRhcmdldCA9IHRhcmdldDsK LQkvKiBGb3Igbm93LCBhc3N1bWUgd2UgYXJlIGFib3ZlIGFueSBqb2lucywgc28gbm8gcGFyYW1l dGVyaXphdGlvbiAqLwotCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBOVUxMOworCXBhdGhu b2RlLT5wYXRoLnBhcmFtX2luZm8gPSBzdWJwYXRoLT5wYXJhbV9pbmZvOwogCXBhdGhub2RlLT5w YXRoLnBhcmFsbGVsX2F3YXJlID0gZmFsc2U7CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfc2Fm ZSA9IHJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYKIAkJc3VicGF0aC0+cGFyYWxsZWxfc2FmZSAm JgpAQCAtMzA0Myw4ICszMDc3LDcgQEAgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJLyogU29ydCBk b2Vzbid0IHByb2plY3QsIHNvIHVzZSBzb3VyY2UgcGF0aCdzIHBhdGh0YXJnZXQgKi8KIAlwYXRo bm9kZS0+cGF0aC5wYXRodGFyZ2V0ID0gc3VicGF0aC0+cGF0aHRhcmdldDsKLQkvKiBGb3Igbm93 LCBhc3N1bWUgd2UgYXJlIGFib3ZlIGFueSBqb2lucywgc28gbm8gcGFyYW1ldGVyaXphdGlvbiAq LwotCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBOVUxMOworCXBhdGhub2RlLT5wYXRoLnBh cmFtX2luZm8gPSBzdWJwYXRoLT5wYXJhbV9pbmZvOwogCXBhdGhub2RlLT5wYXRoLnBhcmFsbGVs X2F3YXJlID0gZmFsc2U7CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfc2FmZSA9IHJlbC0+Y29u c2lkZXJfcGFyYWxsZWwgJiYKIAkJc3VicGF0aC0+cGFyYWxsZWxfc2FmZTsKQEAgLTMwOTEsOCAr MzEyNCw3IEBAIGNyZWF0ZV9zb3J0X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJcGF0aG5vZGUt PnBhdGgucGFyZW50ID0gcmVsOwogCS8qIFNvcnQgZG9lc24ndCBwcm9qZWN0LCBzbyB1c2Ugc291 cmNlIHBhdGgncyBwYXRodGFyZ2V0ICovCiAJcGF0aG5vZGUtPnBhdGgucGF0aHRhcmdldCA9IHN1 YnBhdGgtPnBhdGh0YXJnZXQ7Ci0JLyogRm9yIG5vdywgYXNzdW1lIHdlIGFyZSBhYm92ZSBhbnkg am9pbnMsIHNvIG5vIHBhcmFtZXRlcml6YXRpb24gKi8KLQlwYXRobm9kZS0+cGF0aC5wYXJhbV9p bmZvID0gTlVMTDsKKwlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0gc3VicGF0aC0+cGFyYW1f aW5mbzsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9hd2FyZSA9IGZhbHNlOwogCXBhdGhub2Rl LT5wYXRoLnBhcmFsbGVsX3NhZmUgPSByZWwtPmNvbnNpZGVyX3BhcmFsbGVsICYmCiAJCXN1YnBh dGgtPnBhcmFsbGVsX3NhZmU7CkBAIC0zMjUzLDggKzMyODUsNyBAQCBjcmVhdGVfYWdnX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsCiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0FnZzsKIAlw YXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHRhcmdldCA9 IHRhcmdldDsKLQkvKiBGb3Igbm93LCBhc3N1bWUgd2UgYXJlIGFib3ZlIGFueSBqb2lucywgc28g bm8gcGFyYW1ldGVyaXphdGlvbiAqLwotCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBOVUxM OworCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBzdWJwYXRoLT5wYXJhbV9pbmZvOwogCXBh dGhub2RlLT5wYXRoLnBhcmFsbGVsX2F3YXJlID0gZmFsc2U7CiAJcGF0aG5vZGUtPnBhdGgucGFy YWxsZWxfc2FmZSA9IHJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYKIAkJc3VicGF0aC0+cGFyYWxs ZWxfc2FmZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCBkNzI2NmU0Y2Ri Li42ZDM1N2RiMjhjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxu b2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0xNiw2 ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KIAorI2luY2x1ZGUgImNhdGFsb2cvcGdf Y29uc3RyYWludC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL25v ZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9hcHBlbmRpbmZvLmgiCkBAIC0yNywxOSAr MjgsMjYgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRpbWl6 ZXIvcGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2luY2x1 ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3Jlc3RyaWN0aW5m by5oIgogI2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9vcGVyLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAi cmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIKIAog Ci10eXBlZGVmIHN0cnVjdCBKb2luSGFzaEVudHJ5CisvKgorICogQW4gZW50cnkgb2YgYSBoYXNo IHRhYmxlIHRoYXQgd2UgdXNlIHRvIG1ha2UgbG9va3VwIGZvciBSZWxPcHRJbmZvCisgKiBzdHJ1 Y3R1cmVzIG1vcmUgZWZmaWNpZW50LgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxIYXNoRW50cnkK IHsKLQlSZWxpZHMJCWpvaW5fcmVsaWRzOwkvKiBoYXNoIGtleSAtLS0gTVVTVCBCRSBGSVJTVCAq LwotCVJlbE9wdEluZm8gKmpvaW5fcmVsOwotfSBKb2luSGFzaEVudHJ5OworCVJlbGlkcwkJcmVs aWRzOwkJCS8qIGhhc2gga2V5IC0tLSBNVVNUIEJFIEZJUlNUICovCisJUmVsT3B0SW5mbyAqcmVs OworfSBSZWxIYXNoRW50cnk7CiAKIHN0YXRpYyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxpc3QoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkJCVJlbE9wdEluZm8g KmlucHV0X3JlbCwKQEAgLTgzLDYgKzkxLDE0IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX2NoaWxkX2pv aW5fcmVsdGFyZ2V0KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJICAgUmVsT3B0SW5mbyAq Y2hpbGRyZWwsCiAJCQkJCQkJCQkgICBpbnQgbmFwcGluZm9zLAogCQkJCQkJCQkJICAgQXBwZW5k UmVsSW5mbyAqKmFwcGluZm9zKTsKK3N0YXRpYyBib29sIGVhZ2VyX2FnZ3JlZ2F0aW9uX3Bvc3Np YmxlX2Zvcl9yZWxhdGlvbihQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJCQlSZWxPcHRJ bmZvICpyZWwpOworc3RhdGljIGJvb2wgaW5pdF9ncm91cGluZ190YXJnZXRzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCSAgUGF0aFRhcmdldCAqdGFyZ2V0LCBQ YXRoVGFyZ2V0ICphZ2dfaW5wdXQsCisJCQkJCQkJCSAgTGlzdCAqKmdyb3VwX2NsYXVzZXMsIExp c3QgKipncm91cF9leHBycyk7CitzdGF0aWMgYm9vbCBpc192YXJfaW5fYWdncmVmX29ubHkoUGxh bm5lckluZm8gKnJvb3QsIFZhciAqdmFyKTsKK3N0YXRpYyBib29sIGlzX3Zhcl9uZWVkZWRfYnlf am9pbihQbGFubmVySW5mbyAqcm9vdCwgVmFyICp2YXIsIFJlbE9wdEluZm8gKnJlbCk7CitzdGF0 aWMgSW5kZXggZ2V0X2V4cHJlc3Npb25fc29ydGdyb3VwcmVmKFBsYW5uZXJJbmZvICpyb290LCBF eHByICpleHByKTsKIAogCiAvKgpAQCAtMjc2LDYgKzI5Miw3IEBAIGJ1aWxkX3NpbXBsZV9yZWwo UGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVsT3B0SW5mbyAqcGFyZW50KQogCXJlbC0+ am9pbmluZm8gPSBOSUw7CiAJcmVsLT5oYXNfZWNsYXNzX2pvaW5zID0gZmFsc2U7CiAJcmVsLT5j b25zaWRlcl9wYXJ0aXRpb253aXNlX2pvaW4gPSBmYWxzZTsJLyogbWlnaHQgZ2V0IGNoYW5nZWQg bGF0ZXIgKi8KKwlyZWwtPmFnZ19pbmZvID0gTlVMTDsKIAlyZWwtPnBhcnRfc2NoZW1lID0gTlVM TDsKIAlyZWwtPm5wYXJ0cyA9IC0xOwogCXJlbC0+Ym91bmRpbmZvID0gTlVMTDsKQEAgLTQwNiw2 ICs0MjMsOTIgQEAgYnVpbGRfc2ltcGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlk LCBSZWxPcHRJbmZvICpwYXJlbnQpCiAJcmV0dXJuIHJlbDsKIH0KIAorLyoKKyAqIGJ1aWxkX3Np bXBsZV9ncm91cGVkX3JlbAorICoJICBDb25zdHJ1Y3QgYSBuZXcgUmVsT3B0SW5mbyBmb3IgYSBn cm91cGVkIGJhc2UgcmVsYXRpb24gb3V0IG9mIGFuIGV4aXN0aW5nCisgKgkgIG5vbi1ncm91cGVk IGJhc2UgcmVsYXRpb24uCisgKi8KK1JlbE9wdEluZm8gKgorYnVpbGRfc2ltcGxlX2dyb3VwZWRf cmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWxfcGxhaW4pCit7CisJUmVsT3B0 SW5mbyAqcmVsX2dyb3VwZWQ7CisJUmVsQWdnSW5mbyAqYWdnX2luZm87CisKKwkvKgorCSAqIFdl IHNob3VsZCBoYXZlIGF2YWlsYWJsZSBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMgYW5kIGdyb3VwaW5n CisJICogZXhwcmVzc2lvbnMsIG90aGVyd2lzZSB3ZSBjYW5ub3QgcmVhY2ggaGVyZS4KKwkgKi8K KwlBc3NlcnQocm9vdC0+YWdnX2NsYXVzZV9saXN0ICE9IE5JTCk7CisJQXNzZXJ0KHJvb3QtPmdy b3VwX2V4cHJfbGlzdCAhPSBOSUwpOworCisJLyogbm90aGluZyB0byBkbyBmb3IgZHVtbXkgcmVs ICovCisJaWYgKElTX0RVTU1ZX1JFTChyZWxfcGxhaW4pKQorCQlyZXR1cm4gTlVMTDsKKworCS8q CisJICogUHJlcGFyZSB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSBncm91cGVkIHBh dGhzIGZvciB0aGlzIGJhc2UKKwkgKiByZWxhdGlvbi4KKwkgKi8KKwlhZ2dfaW5mbyA9IGNyZWF0 ZV9yZWxfYWdnX2luZm8ocm9vdCwgcmVsX3BsYWluKTsKKwlpZiAoYWdnX2luZm8gPT0gTlVMTCkK KwkJcmV0dXJuIE5VTEw7CisKKwkvKiBidWlsZCBhIGdyb3VwZWQgcmVsYXRpb24gb3V0IG9mIHRo ZSBwbGFpbiByZWxhdGlvbiAqLworCXJlbF9ncm91cGVkID0gYnVpbGRfZ3JvdXBlZF9yZWwocm9v dCwgcmVsX3BsYWluKTsKKwlyZWxfZ3JvdXBlZC0+cmVsdGFyZ2V0ID0gYWdnX2luZm8tPnRhcmdl dDsKKwlyZWxfZ3JvdXBlZC0+cm93cyA9IGFnZ19pbmZvLT5ncm91cGVkX3Jvd3M7CisJcmVsX2dy b3VwZWQtPmFnZ19pbmZvID0gYWdnX2luZm87CisKKwlyZXR1cm4gcmVsX2dyb3VwZWQ7Cit9CisK Ky8qCisgKiBidWlsZF9ncm91cGVkX3JlbAorICoJICBCdWlsZCBhIGdyb3VwZWQgcmVsYXRpb24g YnkgZmxhdCBjb3B5aW5nIGEgcGxhaW4gcmVsYXRpb24gYW5kIHJlc2V0dGluZworICoJICB0aGUg bmVjZXNzYXJ5IGZpZWxkcy4KKyAqLworUmVsT3B0SW5mbyAqCitidWlsZF9ncm91cGVkX3JlbChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsX3BsYWluKQoreworCVJlbE9wdEluZm8g KnJlbF9ncm91cGVkOworCisJcmVsX2dyb3VwZWQgPSBtYWtlTm9kZShSZWxPcHRJbmZvKTsKKwlt ZW1jcHkocmVsX2dyb3VwZWQsIHJlbF9wbGFpbiwgc2l6ZW9mKFJlbE9wdEluZm8pKTsKKworCS8q CisJICogY2xlYXIgcGF0aCBpbmZvCisJICovCisJcmVsX2dyb3VwZWQtPnBhdGhsaXN0ID0gTklM OworCXJlbF9ncm91cGVkLT5wcGlsaXN0ID0gTklMOworCXJlbF9ncm91cGVkLT5wYXJ0aWFsX3Bh dGhsaXN0ID0gTklMOworCXJlbF9ncm91cGVkLT5jaGVhcGVzdF9zdGFydHVwX3BhdGggPSBOVUxM OworCXJlbF9ncm91cGVkLT5jaGVhcGVzdF90b3RhbF9wYXRoID0gTlVMTDsKKwlyZWxfZ3JvdXBl ZC0+Y2hlYXBlc3RfdW5pcXVlX3BhdGggPSBOVUxMOworCXJlbF9ncm91cGVkLT5jaGVhcGVzdF9w YXJhbWV0ZXJpemVkX3BhdGhzID0gTklMOworCisJLyoKKwkgKiBjbGVhciBwYXJ0aXRpb24gaW5m bworCSAqLworCXJlbF9ncm91cGVkLT5wYXJ0X3NjaGVtZSA9IE5VTEw7CisJcmVsX2dyb3VwZWQt Pm5wYXJ0cyA9IC0xOworCXJlbF9ncm91cGVkLT5ib3VuZGluZm8gPSBOVUxMOworCXJlbF9ncm91 cGVkLT5wYXJ0Ym91bmRzX21lcmdlZCA9IGZhbHNlOworCXJlbF9ncm91cGVkLT5wYXJ0aXRpb25f cXVhbCA9IE5JTDsKKwlyZWxfZ3JvdXBlZC0+cGFydF9yZWxzID0gTlVMTDsKKwlyZWxfZ3JvdXBl ZC0+bGl2ZV9wYXJ0cyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPmFsbF9wYXJ0cmVscyA9IE5VTEw7 CisJcmVsX2dyb3VwZWQtPnBhcnRleHBycyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPm51bGxhYmxl X3BhcnRleHBycyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPmNvbnNpZGVyX3BhcnRpdGlvbndpc2Vf am9pbiA9IGZhbHNlOworCisJLyoKKwkgKiBjbGVhciBzaXplIGVzdGltYXRlcworCSAqLworCXJl bF9ncm91cGVkLT5yb3dzID0gMDsKKworCXJldHVybiByZWxfZ3JvdXBlZDsKK30KKwogLyoKICAq IGZpbmRfYmFzZV9yZWwKICAqCSAgRmluZCBhIGJhc2Ugb3Igb3RoZXJyZWwgcmVsYXRpb24gZW50 cnksIHdoaWNoIG11c3QgYWxyZWFkeSBleGlzdC4KQEAgLTQ3OSwxMSArNTgyLDExIEBAIGZpbmRf YmFzZV9yZWxfaWdub3JlX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCkKIH0KIAog LyoKLSAqIGJ1aWxkX2pvaW5fcmVsX2hhc2gKLSAqCSAgQ29uc3RydWN0IHRoZSBhdXhpbGlhcnkg aGFzaCB0YWJsZSBmb3Igam9pbiByZWxhdGlvbnMuCisgKiBidWlsZF9yZWxfaGFzaAorICoJICBD b25zdHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNoIHRhYmxlIGZvciByZWxhdGlvbnMuCiAgKi8KIHN0 YXRpYyB2b2lkCi1idWlsZF9qb2luX3JlbF9oYXNoKFBsYW5uZXJJbmZvICpyb290KQorYnVpbGRf cmVsX2hhc2goUmVsSW5mb0xpc3QgKmxpc3QpCiB7CiAJSFRBQgkgICAqaGFzaHRhYjsKIAlIQVNI Q1RMCQloYXNoX2N0bDsKQEAgLTQ5MSw0NyArNTk0LDQ2IEBAIGJ1aWxkX2pvaW5fcmVsX2hhc2go UGxhbm5lckluZm8gKnJvb3QpCiAKIAkvKiBDcmVhdGUgdGhlIGhhc2ggdGFibGUgKi8KIAloYXNo X2N0bC5rZXlzaXplID0gc2l6ZW9mKFJlbGlkcyk7Ci0JaGFzaF9jdGwuZW50cnlzaXplID0gc2l6 ZW9mKEpvaW5IYXNoRW50cnkpOworCWhhc2hfY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihSZWxIYXNo RW50cnkpOwogCWhhc2hfY3RsLmhhc2ggPSBiaXRtYXBfaGFzaDsKIAloYXNoX2N0bC5tYXRjaCA9 IGJpdG1hcF9tYXRjaDsKIAloYXNoX2N0bC5oY3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7Ci0J aGFzaHRhYiA9IGhhc2hfY3JlYXRlKCJKb2luUmVsSGFzaFRhYmxlIiwKKwloYXNodGFiID0gaGFz aF9jcmVhdGUoIlJlbEhhc2hUYWJsZSIsCiAJCQkJCQkgIDI1NkwsCiAJCQkJCQkgICZoYXNoX2N0 bCwKIAkJCQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hfQ09NUEFSRSB8IEhB U0hfQ09OVEVYVCk7CiAKLQkvKiBJbnNlcnQgYWxsIHRoZSBhbHJlYWR5LWV4aXN0aW5nIGpvaW5y ZWxzICovCi0JZm9yZWFjaChsLCByb290LT5qb2luX3JlbF9saXN0KQorCS8qIEluc2VydCBhbGwg dGhlIGFscmVhZHktZXhpc3RpbmcgUmVsT3B0SW5mb3MgKi8KKwlmb3JlYWNoKGwsIGxpc3QtPml0 ZW1zKQogCXsKIAkJUmVsT3B0SW5mbyAqcmVsID0gKFJlbE9wdEluZm8gKikgbGZpcnN0KGwpOwot CQlKb2luSGFzaEVudHJ5ICpoZW50cnk7CisJCVJlbEhhc2hFbnRyeSAqaGVudHJ5OwogCQlib29s CQlmb3VuZDsKIAotCQloZW50cnkgPSAoSm9pbkhhc2hFbnRyeSAqKSBoYXNoX3NlYXJjaChoYXNo dGFiLAotCQkJCQkJCQkJCQkgICAmKHJlbC0+cmVsaWRzKSwKLQkJCQkJCQkJCQkJICAgSEFTSF9F TlRFUiwKLQkJCQkJCQkJCQkJICAgJmZvdW5kKTsKKwkJaGVudHJ5ID0gKFJlbEhhc2hFbnRyeSAq KSBoYXNoX3NlYXJjaChoYXNodGFiLAorCQkJCQkJCQkJCQkgICYocmVsLT5yZWxpZHMpLAorCQkJ CQkJCQkJCQkgIEhBU0hfRU5URVIsCisJCQkJCQkJCQkJCSAgJmZvdW5kKTsKIAkJQXNzZXJ0KCFm b3VuZCk7Ci0JCWhlbnRyeS0+am9pbl9yZWwgPSByZWw7CisJCWhlbnRyeS0+cmVsID0gcmVsOwog CX0KIAotCXJvb3QtPmpvaW5fcmVsX2hhc2ggPSBoYXNodGFiOworCWxpc3QtPmhhc2ggPSBoYXNo dGFiOwogfQogCiAvKgotICogZmluZF9qb2luX3JlbAotICoJICBSZXR1cm5zIHJlbGF0aW9uIGVu dHJ5IGNvcnJlc3BvbmRpbmcgdG8gJ3JlbGlkcycgKGEgc2V0IG9mIFJUIGluZGV4ZXMpLAotICoJ ICBvciBOVUxMIGlmIG5vbmUgZXhpc3RzLiAgVGhpcyBpcyBmb3Igam9pbiByZWxhdGlvbnMuCisg KiBmaW5kX3JlbF9pbmZvCisgKgkgIEZpbmQgYSBSZWxPcHRJbmZvIGVudHJ5IGNvcnJlc3BvbmRp bmcgdG8gJ3JlbGlkcycuCiAgKi8KLVJlbE9wdEluZm8gKgotZmluZF9qb2luX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKK3N0YXRpYyBSZWxPcHRJbmZvICoKK2ZpbmRfcmVs X2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxpZHMpCiB7CiAJLyoKIAkgKiBTd2l0 Y2ggdG8gdXNpbmcgaGFzaCBsb29rdXAgd2hlbiBsaXN0IGdyb3dzICJ0b28gbG9uZyIuICBUaGUg dGhyZXNob2xkCiAJICogaXMgYXJiaXRyYXJ5IGFuZCBpcyBrbm93biBvbmx5IGhlcmUuCiAJICov Ci0JaWYgKCFyb290LT5qb2luX3JlbF9oYXNoICYmIGxpc3RfbGVuZ3RoKHJvb3QtPmpvaW5fcmVs X2xpc3QpID4gMzIpCi0JCWJ1aWxkX2pvaW5fcmVsX2hhc2gocm9vdCk7CisJaWYgKCFsaXN0LT5o YXNoICYmIGxpc3RfbGVuZ3RoKGxpc3QtPml0ZW1zKSA+IDMyKQorCQlidWlsZF9yZWxfaGFzaChs aXN0KTsKIAogCS8qCiAJICogVXNlIGVpdGhlciBoYXNodGFibGUgbG9va3VwIG9yIGxpbmVhciBz ZWFyY2gsIGFzIGFwcHJvcHJpYXRlLgpAQCAtNTQxLDIzICs2NDMsMjMgQEAgZmluZF9qb2luX3Jl bChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKIAkgKiBzbyB3b3VsZCBmb3JjZSBy ZWxpZHMgb3V0IG9mIGEgcmVnaXN0ZXIgYW5kIHRodXMgcHJvYmFibHkgc2xvdyBkb3duIHRoZQog CSAqIGxpc3Qtc2VhcmNoIGNhc2UuCiAJICovCi0JaWYgKHJvb3QtPmpvaW5fcmVsX2hhc2gpCisJ aWYgKGxpc3QtPmhhc2gpCiAJewogCQlSZWxpZHMJCWhhc2hrZXkgPSByZWxpZHM7Ci0JCUpvaW5I YXNoRW50cnkgKmhlbnRyeTsKKwkJUmVsSGFzaEVudHJ5ICpoZW50cnk7CiAKLQkJaGVudHJ5ID0g KEpvaW5IYXNoRW50cnkgKikgaGFzaF9zZWFyY2gocm9vdC0+am9pbl9yZWxfaGFzaCwKLQkJCQkJ CQkJCQkJICAgJmhhc2hrZXksCi0JCQkJCQkJCQkJCSAgIEhBU0hfRklORCwKLQkJCQkJCQkJCQkJ ICAgTlVMTCk7CisJCWhlbnRyeSA9IChSZWxIYXNoRW50cnkgKikgaGFzaF9zZWFyY2gobGlzdC0+ aGFzaCwKKwkJCQkJCQkJCQkJICAmaGFzaGtleSwKKwkJCQkJCQkJCQkJICBIQVNIX0ZJTkQsCisJ CQkJCQkJCQkJCSAgTlVMTCk7CiAJCWlmIChoZW50cnkpCi0JCQlyZXR1cm4gaGVudHJ5LT5qb2lu X3JlbDsKKwkJCXJldHVybiBoZW50cnktPnJlbDsKIAl9CiAJZWxzZQogCXsKIAkJTGlzdENlbGwg ICAqbDsKIAotCQlmb3JlYWNoKGwsIHJvb3QtPmpvaW5fcmVsX2xpc3QpCisJCWZvcmVhY2gobCwg bGlzdC0+aXRlbXMpCiAJCXsKIAkJCVJlbE9wdEluZm8gKnJlbCA9IChSZWxPcHRJbmZvICopIGxm aXJzdChsKTsKIApAQCAtNTY5LDYgKzY3MSwyOCBAQCBmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxpZHMgcmVsaWRzKQogCXJldHVybiBOVUxMOwogfQogCisvKgorICogZmluZF9q b2luX3JlbAorICoJICBSZXR1cm5zIHJlbGF0aW9uIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gJ3Jl bGlkcycgKGEgc2V0IG9mIFJUIGluZGV4ZXMpLAorICoJICBvciBOVUxMIGlmIG5vbmUgZXhpc3Rz LiAgVGhpcyBpcyBmb3Igam9pbiByZWxhdGlvbnMuCisgKi8KK1JlbE9wdEluZm8gKgorZmluZF9q b2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKK3sKKwlyZXR1cm4gZmlu ZF9yZWxfaW5mbyhyb290LT5qb2luX3JlbF9saXN0LCByZWxpZHMpOworfQorCisvKgorICogZmlu ZF9ncm91cGVkX3JlbAorICoJICBSZXR1cm5zIHJlbGF0aW9uIGVudHJ5IGNvcnJlc3BvbmRpbmcg dG8gJ3JlbGlkcycgKGEgc2V0IG9mIFJUIGluZGV4ZXMpLAorICoJICBvciBOVUxMIGlmIG5vbmUg ZXhpc3RzLiAgVGhpcyBpcyBmb3IgZ3JvdXBlZCByZWxhdGlvbnMuCisgKi8KK1JlbE9wdEluZm8g KgorZmluZF9ncm91cGVkX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKK3sK KwlyZXR1cm4gZmluZF9yZWxfaW5mbyhyb290LT5ncm91cGVkX3JlbF9saXN0LCByZWxpZHMpOwor fQorCiAvKgogICogc2V0X2ZvcmVpZ25fcmVsX3Byb3BlcnRpZXMKICAqCQlTZXQgdXAgZm9yZWln bi1qb2luIGZpZWxkcyBpZiBvdXRlciBhbmQgaW5uZXIgcmVsYXRpb24gYXJlIGZvcmVpZ24KQEAg LTYxOSwzMSArNzQzLDUzIEBAIHNldF9mb3JlaWduX3JlbF9wcm9wZXJ0aWVzKFJlbE9wdEluZm8g KmpvaW5yZWwsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIH0KIAogLyoKLSAqIGFkZF9qb2luX3Jl bAotICoJCUFkZCBnaXZlbiBqb2luIHJlbGF0aW9uIHRvIHRoZSBsaXN0IG9mIGpvaW4gcmVsYXRp b25zIGluIHRoZSBnaXZlbgotICoJCVBsYW5uZXJJbmZvLiBBbHNvIGFkZCBpdCB0byB0aGUgYXV4 aWxpYXJ5IGhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUuCisgKiBhZGRfcmVsX2luZm8KKyAqCQlB ZGQgZ2l2ZW4gcmVsYXRpb24gdG8gdGhlIGxpc3QsIGFuZCBhbHNvIGFkZCBpdCB0byB0aGUgYXV4 aWxpYXJ5CisgKgkJaGFzaHRhYmxlIGlmIHRoZXJlIGlzIG9uZS4KICAqLwogc3RhdGljIHZvaWQK LWFkZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCkKK2Fk ZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsT3B0SW5mbyAqcmVsKQogewotCS8qIEdF UU8gcmVxdWlyZXMgdXMgdG8gYXBwZW5kIHRoZSBuZXcgam9pbnJlbCB0byB0aGUgZW5kIG9mIHRo ZSBsaXN0ISAqLwotCXJvb3QtPmpvaW5fcmVsX2xpc3QgPSBsYXBwZW5kKHJvb3QtPmpvaW5fcmVs X2xpc3QsIGpvaW5yZWwpOworCS8qIEdFUU8gcmVxdWlyZXMgdXMgdG8gYXBwZW5kIHRoZSBuZXcg cmVsYXRpb24gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCEgKi8KKwlsaXN0LT5pdGVtcyA9IGxhcHBl bmQobGlzdC0+aXRlbXMsIHJlbCk7CiAKIAkvKiBzdG9yZSBpdCBpbnRvIHRoZSBhdXhpbGlhcnkg aGFzaHRhYmxlIGlmIHRoZXJlIGlzIG9uZS4gKi8KLQlpZiAocm9vdC0+am9pbl9yZWxfaGFzaCkK KwlpZiAobGlzdC0+aGFzaCkKIAl7Ci0JCUpvaW5IYXNoRW50cnkgKmhlbnRyeTsKKwkJUmVsSGFz aEVudHJ5ICpoZW50cnk7CiAJCWJvb2wJCWZvdW5kOwogCi0JCWhlbnRyeSA9IChKb2luSGFzaEVu dHJ5ICopIGhhc2hfc2VhcmNoKHJvb3QtPmpvaW5fcmVsX2hhc2gsCi0JCQkJCQkJCQkJCSAgICYo am9pbnJlbC0+cmVsaWRzKSwKLQkJCQkJCQkJCQkJICAgSEFTSF9FTlRFUiwKLQkJCQkJCQkJCQkJ ICAgJmZvdW5kKTsKKwkJaGVudHJ5ID0gKFJlbEhhc2hFbnRyeSAqKSBoYXNoX3NlYXJjaChsaXN0 LT5oYXNoLAorCQkJCQkJCQkJCQkgICYocmVsLT5yZWxpZHMpLAorCQkJCQkJCQkJCQkgIEhBU0hf RU5URVIsCisJCQkJCQkJCQkJCSAgJmZvdW5kKTsKIAkJQXNzZXJ0KCFmb3VuZCk7Ci0JCWhlbnRy eS0+am9pbl9yZWwgPSBqb2lucmVsOworCQloZW50cnktPnJlbCA9IHJlbDsKIAl9CiB9CiAKKy8q CisgKiBhZGRfam9pbl9yZWwKKyAqCQlBZGQgZ2l2ZW4gam9pbiByZWxhdGlvbiB0byB0aGUgbGlz dCBvZiBqb2luIHJlbGF0aW9ucyBpbiB0aGUgZ2l2ZW4KKyAqCQlQbGFubmVySW5mby4KKyAqLwor c3RhdGljIHZvaWQKK2FkZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq am9pbnJlbCkKK3sKKwlhZGRfcmVsX2luZm8ocm9vdC0+am9pbl9yZWxfbGlzdCwgam9pbnJlbCk7 Cit9CisKKy8qCisgKiBhZGRfZ3JvdXBlZF9yZWwKKyAqCQlBZGQgZ2l2ZW4gZ3JvdXBlZCByZWxh dGlvbiB0byB0aGUgbGlzdCBvZiBncm91cGVkIHJlbGF0aW9ucyBpbiB0aGUKKyAqCQlnaXZlbiBQ bGFubmVySW5mby4KKyAqLwordm9pZAorYWRkX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwpCit7CisJYWRkX3JlbF9pbmZvKHJvb3QtPmdyb3VwZWRfcmVsX2xp c3QsIHJlbCk7Cit9CisKIC8qCiAgKiBidWlsZF9qb2luX3JlbAogICoJICBSZXR1cm5zIHJlbGF0 aW9uIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVuaW9uIG9mIHR3byBnaXZlbiByZWxzLApA QCAtNzU1LDYgKzkwMSw3IEBAIGJ1aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LAogCWpv aW5yZWwtPmpvaW5pbmZvID0gTklMOwogCWpvaW5yZWwtPmhhc19lY2xhc3Nfam9pbnMgPSBmYWxz ZTsKIAlqb2lucmVsLT5jb25zaWRlcl9wYXJ0aXRpb253aXNlX2pvaW4gPSBmYWxzZTsJLyogbWln aHQgZ2V0IGNoYW5nZWQgbGF0ZXIgKi8KKwlqb2lucmVsLT5hZ2dfaW5mbyA9IE5VTEw7CiAJam9p bnJlbC0+cGFyZW50ID0gTlVMTDsKIAlqb2lucmVsLT50b3BfcGFyZW50ID0gTlVMTDsKIAlqb2lu cmVsLT50b3BfcGFyZW50X3JlbGlkcyA9IE5VTEw7CkBAIC05MzksNiArMTA4Niw3IEBAIGJ1aWxk X2NoaWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWws CiAJam9pbnJlbC0+am9pbmluZm8gPSBOSUw7CiAJam9pbnJlbC0+aGFzX2VjbGFzc19qb2lucyA9 IGZhbHNlOwogCWpvaW5yZWwtPmNvbnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbiA9IGZhbHNlOwkv KiBtaWdodCBnZXQgY2hhbmdlZCBsYXRlciAqLworCWpvaW5yZWwtPmFnZ19pbmZvID0gTlVMTDsK IAlqb2lucmVsLT5wYXJlbnQgPSBwYXJlbnRfam9pbnJlbDsKIAlqb2lucmVsLT50b3BfcGFyZW50 ID0gcGFyZW50X2pvaW5yZWwtPnRvcF9wYXJlbnQgPyBwYXJlbnRfam9pbnJlbC0+dG9wX3BhcmVu dCA6IHBhcmVudF9qb2lucmVsOwogCWpvaW5yZWwtPnRvcF9wYXJlbnRfcmVsaWRzID0gam9pbnJl bC0+dG9wX3BhcmVudC0+cmVsaWRzOwpAQCAtMjUwOCwzICsyNjU2LDQ3MSBAQCBidWlsZF9jaGls ZF9qb2luX3JlbHRhcmdldChQbGFubmVySW5mbyAqcm9vdCwKIAljaGlsZHJlbC0+cmVsdGFyZ2V0 LT5jb3N0LnBlcl90dXBsZSA9IHBhcmVudHJlbC0+cmVsdGFyZ2V0LT5jb3N0LnBlcl90dXBsZTsK IAljaGlsZHJlbC0+cmVsdGFyZ2V0LT53aWR0aCA9IHBhcmVudHJlbC0+cmVsdGFyZ2V0LT53aWR0 aDsKIH0KKworLyoKKyAqIGNyZWF0ZV9yZWxfYWdnX2luZm8KKyAqCSAgQ3JlYXRlIHRoZSBSZWxB Z2dJbmZvIHN0cnVjdHVyZSBmb3IgdGhlIGdpdmVuIHJlbGF0aW9uIGlmIGl0IGNhbiBwcm9kdWNl CisgKgkgIGdyb3VwZWQgcGF0aHMuICBUaGUgZ2l2ZW4gcmVsYXRpb24gaXMgdGhlIG5vbi1ncm91 cGVkIG9uZSB3aGljaCBoYXMgdGhlCisgKgkgIHJlbHRhcmdldCBhbHJlYWR5IGNvbnN0cnVjdGVk LgorICovCitSZWxBZ2dJbmZvICoKK2NyZWF0ZV9yZWxfYWdnX2luZm8oUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlSZWxBZ2dJbmZvICpy ZXN1bHQ7CisJUGF0aFRhcmdldCAqYWdnX2lucHV0OworCVBhdGhUYXJnZXQgKnRhcmdldDsKKwlM aXN0CSAgICpncm91cF9jbGF1c2VzID0gTklMOworCUxpc3QJICAgKmdyb3VwX2V4cHJzID0gTklM OworCisJLyoKKwkgKiBUaGUgbGlzdHMgb2YgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZCBncm91 cGluZyBleHByZXNzaW9ucyBzaG91bGQgaGF2ZQorCSAqIGJlZW4gY29uc3RydWN0ZWQuCisJICov CisJQXNzZXJ0KHJvb3QtPmFnZ19jbGF1c2VfbGlzdCAhPSBOSUwpOworCUFzc2VydChyb290LT5n cm91cF9leHByX2xpc3QgIT0gTklMKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIGNoaWxkIHJl bCwgdGhlIGdyb3VwZWQgcmVsIGZvciBpdHMgcGFyZW50IHJlbCBtdXN0IGhhdmUKKwkgKiBiZWVu IGNyZWF0ZWQgaWYgaXQgY2FuLiAgU28gd2UgY2FuIGp1c3QgdXNlIHBhcmVudCdzIFJlbEFnZ0lu Zm8gaWYKKwkgKiB0aGVyZSBpcyBvbmUsIHdpdGggYXBwcm9wcmlhdGUgdmFyaWFibGUgc3Vic3Rp dHV0aW9ucy4KKwkgKi8KKwlpZiAoSVNfT1RIRVJfUkVMKHJlbCkpCisJeworCQlSZWxPcHRJbmZv ICpyZWxfZ3JvdXBlZDsKKwkJUmVsQWdnSW5mbyAqYWdnX2luZm87CisKKwkJQXNzZXJ0KCFibXNf aXNfZW1wdHkocmVsLT50b3BfcGFyZW50X3JlbGlkcykpOworCQlyZWxfZ3JvdXBlZCA9IGZpbmRf Z3JvdXBlZF9yZWwocm9vdCwgcmVsLT50b3BfcGFyZW50X3JlbGlkcyk7CisKKwkJaWYgKHJlbF9n cm91cGVkID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKworCQlBc3NlcnQoSVNfR1JPVVBFRF9S RUwocmVsX2dyb3VwZWQpKTsKKwkJLyogTXVzdCBkbyBtdWx0aS1sZXZlbCB0cmFuc2Zvcm1hdGlv biAqLworCQlhZ2dfaW5mbyA9IChSZWxBZ2dJbmZvICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0 dHJzX211bHRpbGV2ZWwocm9vdCwKKwkJCQkJCQkJCQkJICAoTm9kZSAqKSByZWxfZ3JvdXBlZC0+ YWdnX2luZm8sCisJCQkJCQkJCQkJCSAgcmVsLAorCQkJCQkJCQkJCQkgIHJlbC0+dG9wX3BhcmVu dCk7CisKKwkJYWdnX2luZm8tPmdyb3VwZWRfcm93cyA9CisJCQllc3RpbWF0ZV9udW1fZ3JvdXBz KHJvb3QsIGFnZ19pbmZvLT5ncm91cF9leHBycywKKwkJCQkJCQkJcmVsLT5yb3dzLCBOVUxMLCBO VUxMKTsKKworCQlyZXR1cm4gYWdnX2luZm87CisJfQorCisJLyogQ2hlY2sgaWYgaXQncyBwb3Nz aWJsZSB0byBwcm9kdWNlIGdyb3VwZWQgcGF0aHMgZm9yIHRoaXMgcmVsYXRpb24uICovCisJaWYg KCFlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24ocm9vdCwgcmVsKSkKKwkJ cmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIENyZWF0ZSB0YXJnZXRzIGZvciB0aGUgZ3JvdXBlZCBw YXRocyBhbmQgZm9yIHRoZSBpbnB1dCBwYXRocyBvZiB0aGUKKwkgKiBncm91cGVkIHBhdGhzLgor CSAqLworCXRhcmdldCA9IGNyZWF0ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CisJYWdnX2lucHV0ID0g Y3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKKworCS8qIC4uLiBhbmQgaW5pdGlhbGl6ZSB0aGVz ZSB0YXJnZXRzICovCisJaWYgKCFpbml0X2dyb3VwaW5nX3RhcmdldHMocm9vdCwgcmVsLCB0YXJn ZXQsIGFnZ19pbnB1dCwKKwkJCQkJCQkgICAmZ3JvdXBfY2xhdXNlcywgJmdyb3VwX2V4cHJzKSkK KwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIEVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIG5vdCBhcHBs aWNhYmxlIGlmIHRoZXJlIGFyZSBubyBhdmFpbGFibGUgZ3JvdXBpbmcKKwkgKiBleHByZXNzaW9u cy4KKwkgKi8KKwlpZiAobGlzdF9sZW5ndGgoZ3JvdXBfY2xhdXNlcykgPT0gMCkKKwkJcmV0dXJu IE5VTEw7CisKKwkvKiBidWlsZCB0aGUgUmVsQWdnSW5mbyByZXN1bHQgKi8KKwlyZXN1bHQgPSBt YWtlTm9kZShSZWxBZ2dJbmZvKTsKKworCXJlc3VsdC0+Z3JvdXBfY2xhdXNlcyA9IGdyb3VwX2Ns YXVzZXM7CisJcmVzdWx0LT5ncm91cF9leHBycyA9IGdyb3VwX2V4cHJzOworCisJLyogQ2FsY3Vs YXRlIHBhdGhrZXlzIHRoYXQgcmVwcmVzZW50IHRoaXMgZ3JvdXBpbmcgcmVxdWlyZW1lbnRzICov CisJcmVzdWx0LT5ncm91cF9wYXRoa2V5cyA9CisJCW1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1 c2VzKHJvb3QsIHJlc3VsdC0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCSAgbWFrZV90bGlzdF9m cm9tX3BhdGh0YXJnZXQodGFyZ2V0KSk7CisKKwkvKiBBZGQgYWdncmVnYXRlcyB0byB0aGUgZ3Jv dXBpbmcgdGFyZ2V0ICovCisJZm9yZWFjaChsYywgcm9vdC0+YWdnX2NsYXVzZV9saXN0KQorCXsK KwkJQWdnQ2xhdXNlSW5mbyAqYWNfaW5mbyA9IGxmaXJzdF9ub2RlKEFnZ0NsYXVzZUluZm8sIGxj KTsKKwkJQWdncmVmCSAgICphZ2dyZWY7CisKKwkJQXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYs IEFnZ3JlZikpOworCisJCWFnZ3JlZiA9IChBZ2dyZWYgKikgY29weU9iamVjdChhY19pbmZvLT5h Z2dyZWYpOworCQltYXJrX3BhcnRpYWxfYWdncmVmKGFnZ3JlZiwgQUdHU1BMSVRfSU5JVElBTF9T RVJJQUwpOworCisJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIChFeHByICopIGFn Z3JlZiwgMCk7CisJfQorCisJLyogU2V0IHRoZSBlc3RpbWF0ZWQgZXZhbCBjb3N0IGFuZCBvdXRw dXQgd2lkdGggZm9yIGJvdGggdGFyZ2V0cyAqLworCXNldF9wYXRodGFyZ2V0X2Nvc3Rfd2lkdGgo cm9vdCwgdGFyZ2V0KTsKKwlzZXRfcGF0aHRhcmdldF9jb3N0X3dpZHRoKHJvb3QsIGFnZ19pbnB1 dCk7CisKKwlyZXN1bHQtPnJlbGlkcyA9IGJtc19jb3B5KHJlbC0+cmVsaWRzKTsKKwlyZXN1bHQt PnRhcmdldCA9IHRhcmdldDsKKwlyZXN1bHQtPmFnZ19pbnB1dCA9IGFnZ19pbnB1dDsKKwlyZXN1 bHQtPmdyb3VwZWRfcm93cyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwgcmVzdWx0LT5ncm91 cF9leHBycywKKwkJCQkJCQkJCQkJICAgcmVsLT5yb3dzLCBOVUxMLCBOVUxMKTsKKworCXJldHVy biByZXN1bHQ7Cit9CisKKy8qCisgKiBlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVs YXRpb24KKyAqIAkgIENoZWNrIGlmIGl0J3MgcG9zc2libGUgdG8gcHJvZHVjZSBncm91cGVkIHBh dGhzIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24uCisgKi8KK3N0YXRpYyBib29sCitlYWdlcl9hZ2dy ZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQljdXJfcmVsaWQ7CisKKwkvKgor CSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gcmVsYXRpb24gaXMgaW4gdGhlIG51bGxhYmxl IHNpZGUgb2YgYW4gb3V0ZXIKKwkgKiBqb2luLiAgSW4gdGhpcyBjYXNlLCB3ZSBjYW5ub3QgcHVz aCBhIHBhcnRpYWwgYWdncmVnYXRpb24gZG93biB0byB0aGUKKwkgKiByZWxhdGlvbiwgYmVjYXVz ZSB0aGUgTlVMTC1leHRlbmRlZCByb3dzIHByb2R1Y2VkIGJ5IHRoZSBvdXRlciBqb2luCisJICog d291bGQgbm90IGJlIGF2YWlsYWJsZSB3aGVuIHdlIHBlcmZvcm0gdGhlIHBhcnRpYWwgYWdncmVn YXRpb24sIHdoaWxlCisJICogd2l0aCBhIG5vbi1lYWdlci1hZ2dyZWdhdGlvbiBwbGFuIHRoZXNl IHJvd3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlCisJICogdG9wLWxldmVsIGFnZ3JlZ2F0aW9uLiAg RG9pbmcgc28gbWF5IHJlc3VsdCBpbiB0aGUgcm93cyBiZWluZyBncm91cGVkCisJICogZGlmZmVy ZW50bHkgdGhhbiBleHBlY3RlZCwgb3IgcHJvZHVjZSBpbmNvcnJlY3QgdmFsdWVzIGZyb20gdGhl CisJICogYWdncmVnYXRlIGZ1bmN0aW9ucy4KKwkgKi8KKwljdXJfcmVsaWQgPSAtMTsKKwl3aGls ZSAoKGN1cl9yZWxpZCA9IGJtc19uZXh0X21lbWJlcihyZWwtPnJlbGlkcywgY3VyX3JlbGlkKSkg Pj0gMCkKKwl7CisJCVJlbE9wdEluZm8gKmJhc2VyZWwgPSBmaW5kX2Jhc2VfcmVsX2lnbm9yZV9q b2luKHJvb3QsIGN1cl9yZWxpZCk7CisKKwkJaWYgKGJhc2VyZWwgPT0gTlVMTCkKKwkJCWNvbnRp bnVlOwkJCS8qIGlnbm9yZSBvdXRlciBqb2lucyBpbiByZWwtPnJlbGlkcyAqLworCisJCWlmICgh Ym1zX2lzX3N1YnNldChiYXNlcmVsLT5udWxsaW5nX3JlbGlkcywgcmVsLT5yZWxpZHMpKQorCQkJ cmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8gc3Vw cG9ydCBQbGFjZUhvbGRlclZhcnMuCisJICovCisJZm9yZWFjaChsYywgcmVsLT5yZWx0YXJnZXQt PmV4cHJzKQorCXsKKwkJRXhwcgkgICAqZXhwciA9IGxmaXJzdChsYyk7CisKKwkJaWYgKElzQShl eHByLCBQbGFjZUhvbGRlclZhcikpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogQ2FsbGVy IHNob3VsZCBvbmx5IHBhc3MgYmFzZSByZWxhdGlvbnMgb3Igam9pbnMuICovCisJQXNzZXJ0KHJl bC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCB8fAorCQkgICByZWwtPnJlbG9wdGtpbmQg PT0gUkVMT1BUX0pPSU5SRUwpOworCisJLyoKKwkgKiBDaGVjayBpZiBhbGwgYWdncmVnYXRlIGV4 cHJlc3Npb25zIGNhbiBiZSBldmFsdWF0ZWQgb24gdGhpcyByZWxhdGlvbgorCSAqIGxldmVsLgor CSAqLworCWZvcmVhY2gobGMsIHJvb3QtPmFnZ19jbGF1c2VfbGlzdCkKKwl7CisJCUFnZ0NsYXVz ZUluZm8gKmFjX2luZm8gPSBsZmlyc3Rfbm9kZShBZ2dDbGF1c2VJbmZvLCBsYyk7CisKKwkJQXNz ZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCS8qCisJCSAqIEdpdmUgdXAg aWYgYW55IGFnZ3JlZ2F0ZSBuZWVkcyByZWxhdGlvbnMgb3RoZXIgdGhhbiB0aGUgY3VycmVudAor CQkgKiBvbmUuCisJCSAqCisJCSAqIElmIHRoZSBhZ2dyZWdhdGUgbmVlZHMgdGhlIGN1cnJlbnQg cmVsIHBsdXMgYW55dGhpbmcgZWxzZSwgZ3JvdXBpbmcKKwkJICogdGhlIGN1cnJlbnQgcmVsIGNv dWxkIG1ha2Ugc29tZSBpbnB1dCB2YXJpYWJsZXMgdW5hdmFpbGFibGUgZm9yIHRoZQorCQkgKiBo aWdoZXIgYWdncmVnYXRlIGFuZCBhbHNvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGlucHV0IHJvd3Mg aXQKKwkJICogcmVjZWl2ZXMuCisJCSAqCisJCSAqIElmIHRoZSBhZ2dyZWdhdGUgZG9lcyBub3Qg bmVlZCB0aGUgY3VycmVudCByZWwgYXQgYWxsLCB0aGVuIHRoZQorCQkgKiBjdXJyZW50IHJlbCBz aG91bGQgbm90IGJlIGdyb3VwZWQsIGFzIHdlIGRvIG5vdCBzdXBwb3J0IGpvaW5pbmcgdHdvCisJ CSAqIGdyb3VwZWQgcmVsYXRpb25zLgorCQkgKi8KKwkJaWYgKCFibXNfaXNfc3Vic2V0KGFjX2lu Zm8tPmFnZ19ldmFsX2F0LCByZWwtPnJlbGlkcykpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ cmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBpbml0X2dyb3VwaW5nX3RhcmdldHMKKyAqCSAgSW5p dGlhbGl6ZSB0aGUgdGFyZ2V0IGZvciBncm91cGVkIHBhdGhzICh0YXJnZXQpIGFzIHdlbGwgYXMg dGhlIHRhcmdldAorICoJICBmb3IgcGF0aHMgdGhhdCBnZW5lcmF0ZSBpbnB1dCBmb3IgdGhlIGdy b3VwZWQgcGF0aHMgKGFnZ19pbnB1dCkuCisgKgorICogV2UgYWxzbyBjb25zdHJ1Y3QgdGhlIGxp c3Qgb2YgU29ydEdyb3VwQ2xhdXNlcyBhbmQgdGhlIGxpc3Qgb2YgZ3JvdXBpbmcKKyAqIGV4cHJl c3Npb25zIGZvciB0aGUgcGFydGlhbCBhZ2dyZWdhdGlvbiwgYW5kIHJldHVybiB0aGVtIGluICpn cm91cF9jbGF1c2UKKyAqIGFuZCAqZ3JvdXBfZXhwcnMuCisgKgorICogUmV0dXJuIHRydWUgaWYg dGhlIHRhcmdldHMgY291bGQgYmUgaW5pdGlhbGl6ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAqLwor c3RhdGljIGJvb2wKK2luaXRfZ3JvdXBpbmdfdGFyZ2V0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAorCQkJCQkgIFBhdGhUYXJnZXQgKnRhcmdldCwgUGF0aFRhcmdldCAqYWdn X2lucHV0LAorCQkJCQkgIExpc3QgKipncm91cF9jbGF1c2VzLCBMaXN0ICoqZ3JvdXBfZXhwcnMp Cit7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqcG9zc2libHlfZGVwZW5kZW50ID0gTklM OworCUluZGV4CQltYXhTb3J0R3JvdXBSZWY7CisKKwkvKiBJZGVudGlmeSB0aGUgbWF4IHNvcnRn cm91cHJlZiAqLworCW1heFNvcnRHcm91cFJlZiA9IDA7CisJZm9yZWFjaChsYywgcm9vdC0+cHJv Y2Vzc2VkX3RsaXN0KQorCXsKKwkJSW5kZXgJCXJlZiA9ICgoVGFyZ2V0RW50cnkgKikgbGZpcnN0 KGxjKSktPnJlc3NvcnRncm91cHJlZjsKKworCQlpZiAocmVmID4gbWF4U29ydEdyb3VwUmVmKQor CQkJbWF4U29ydEdyb3VwUmVmID0gcmVmOworCX0KKworCWZvcmVhY2gobGMsIHJlbC0+cmVsdGFy Z2V0LT5leHBycykKKwl7CisJCUV4cHIJICAgKmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMpOwor CQlJbmRleAkJc29ydGdyb3VwcmVmOworCisJCS8qCisJCSAqIEdpdmVuIHRoYXQgUGxhY2VIb2xk ZXJWYXIgY3VycmVudGx5IHByZXZlbnRzIHVzIGZyb20gZG9pbmcgZWFnZXIKKwkJICogYWdncmVn YXRpb24sIHRoZSBzb3VyY2UgdGFyZ2V0IGNhbm5vdCBjb250YWluIGFueXRoaW5nIG1vcmUgY29t cGxleAorCQkgKiB0aGFuIGEgVmFyLgorCQkgKi8KKwkJQXNzZXJ0KElzQShleHByLCBWYXIpKTsK KworCQkvKiBHZXQgdGhlIHNvcnRncm91cHJlZiBpZiB0aGUgZXhwciBjYW4gYWN0IGFzIGdyb3Vw aW5nIGV4cHJlc3Npb24uICovCisJCXNvcnRncm91cHJlZiA9IGdldF9leHByZXNzaW9uX3NvcnRn cm91cHJlZihyb290LCBleHByKTsKKwkJaWYgKHNvcnRncm91cHJlZiA+IDApCisJCXsKKwkJCVNv cnRHcm91cENsYXVzZSAqc2djOworCisJCQkvKiBGaW5kIHRoZSBtYXRjaGluZyBTb3J0R3JvdXBD bGF1c2UgKi8KKwkJCXNnYyA9IGdldF9zb3J0Z3JvdXByZWZfY2xhdXNlKHNvcnRncm91cHJlZiwg cm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlKTsKKwkJCUFzc2VydChzZ2MtPnRsZVNvcnRHcm91 cFJlZiA8PSBtYXhTb3J0R3JvdXBSZWYpOworCisJCQkvKgorCQkJICogSWYgdGhlIHRhcmdldCBl eHByZXNzaW9uIGNhbiBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcga2V5LCBpdAorCQkJICogc2hvdWxk IGJlIGVtaXR0ZWQgYnkgdGhlIGdyb3VwZWQgcGF0aHMgdGhhdCBoYXZlIGJlZW4gcHVzaGVkCisJ CQkgKiBkb3duIHRvIHRoaXMgcmVsYXRpb24gbGV2ZWwuCisJCQkgKi8KKwkJCWFkZF9jb2x1bW5f dG9fcGF0aHRhcmdldCh0YXJnZXQsIGV4cHIsIHNvcnRncm91cHJlZik7CisKKwkJCS8qCisJCQkg KiAuLi4gYW5kIGl0IGFsc28gc2hvdWxkIGJlIGVtaXR0ZWQgYnkgdGhlIGlucHV0IHBhdGhzLgor CQkJICovCisJCQlhZGRfY29sdW1uX3RvX3BhdGh0YXJnZXQoYWdnX2lucHV0LCBleHByLCBzb3J0 Z3JvdXByZWYpOworCisJCQkvKgorCQkJICogUmVjb3JkIHRoaXMgU29ydEdyb3VwQ2xhdXNlIGFu ZCBncm91cGluZyBleHByZXNzaW9uLiAgTm90ZSB0aGF0CisJCQkgKiB0aGlzIFNvcnRHcm91cENs YXVzZSBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiByZWNvcmRlZC4KKwkJCSAqLworCQkJaWYgKCFs aXN0X21lbWJlcigqZ3JvdXBfY2xhdXNlcywgc2djKSkKKwkJCXsKKwkJCQkqZ3JvdXBfY2xhdXNl cyA9IGxhcHBlbmQoKmdyb3VwX2NsYXVzZXMsIHNnYyk7CisJCQkJKmdyb3VwX2V4cHJzID0gbGFw cGVuZCgqZ3JvdXBfZXhwcnMsIGV4cHIpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKGlzX3Zhcl9u ZWVkZWRfYnlfam9pbihyb290LCAoVmFyICopIGV4cHIsIHJlbCkpCisJCXsKKwkJCS8qCisJCQkg KiBUaGUgZXhwcmVzc2lvbiBpcyBuZWVkZWQgZm9yIGFuIHVwcGVyIGpvaW4gYnV0IGlzIG5laXRo ZXIgaW4KKwkJCSAqIHRoZSBHUk9VUCBCWSBjbGF1c2Ugbm9yIGRlcml2YWJsZSBmcm9tIGl0IHVz aW5nIEVDIChvdGhlcndpc2UsCisJCQkgKiBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBpbmNs dWRlZCBpbiB0aGUgdGFyZ2V0cyBhYm92ZSkuICBXZQorCQkJICogbmVlZCB0byBjcmVhdGUgYSBz cGVjaWFsIFNvcnRHcm91cENsYXVzZSBmb3IgdGhpcyBleHByZXNzaW9uLgorCQkJICovCisJCQlT b3J0R3JvdXBDbGF1c2UgKnNnYyA9IG1ha2VOb2RlKFNvcnRHcm91cENsYXVzZSk7CisKKwkJCS8q IEluaXRpYWxpemUgdGhlIFNvcnRHcm91cENsYXVzZS4gKi8KKwkJCXNnYy0+dGxlU29ydEdyb3Vw UmVmID0gKyttYXhTb3J0R3JvdXBSZWY7CisJCQlnZXRfc29ydF9ncm91cF9vcGVyYXRvcnMoKGNh c3ROb2RlKFZhciwgZXhwcikpLT52YXJ0eXBlLAorCQkJCQkJCQkJIGZhbHNlLCB0cnVlLCBmYWxz ZSwKKwkJCQkJCQkJCSAmc2djLT5zb3J0b3AsICZzZ2MtPmVxb3AsIE5VTEwsCisJCQkJCQkJCQkg JnNnYy0+aGFzaGFibGUpOworCisJCQkvKiBUaGlzIGV4cHJlc3Npb24gc2hvdWxkIGJlIGVtaXR0 ZWQgYnkgdGhlIGdyb3VwZWQgcGF0aHMgKi8KKwkJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdldCh0 YXJnZXQsIGV4cHIsIHNnYy0+dGxlU29ydEdyb3VwUmVmKTsKKworCQkJLyogLi4uIGFuZCBpdCBh bHNvIHNob3VsZCBiZSBlbWl0dGVkIGJ5IHRoZSBpbnB1dCBwYXRocy4gKi8KKwkJCWFkZF9jb2x1 bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIGV4cHIsIHNnYy0+dGxlU29ydEdyb3VwUmVmKTsK KworCQkJLyogUmVjb3JkIHRoaXMgU29ydEdyb3VwQ2xhdXNlIGFuZCBncm91cGluZyBleHByZXNz aW9uICovCisJCQkqZ3JvdXBfY2xhdXNlcyA9IGxhcHBlbmQoKmdyb3VwX2NsYXVzZXMsIHNnYyk7 CisJCQkqZ3JvdXBfZXhwcnMgPSBsYXBwZW5kKCpncm91cF9leHBycywgZXhwcik7CisJCX0KKwkJ ZWxzZSBpZiAoaXNfdmFyX2luX2FnZ3JlZl9vbmx5KHJvb3QsIChWYXIgKikgZXhwcikpCisJCXsK KwkJCS8qCisJCQkgKiBUaGUgZXhwcmVzc2lvbiBpcyByZWZlcmVuY2VkIGJ5IGFuIGFnZ3JlZ2F0 ZSBmdW5jdGlvbiBwdXNoZWQKKwkJCSAqIGRvd24gdG8gdGhpcyByZWxhdGlvbiBhbmQgZG9lcyBu b3QgYXBwZWFyIGVsc2V3aGVyZSBpbiB0aGUKKwkJCSAqIHRhcmdldGxpc3Qgb3IgaGF2aW5nUXVh bC4gIEFkZCBpdCB0byAnYWdnX2lucHV0JyBidXQgbm90IHRvCisJCQkgKiAndGFyZ2V0Jy4KKwkJ CSAqLworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIGV4cHIpOwor CQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBleHByZXNzaW9uIG1heSBiZSBmdW5j dGlvbmFsbHkgZGVwZW5kZW50IG9uIG90aGVyCisJCQkgKiBleHByZXNzaW9ucyBpbiB0aGUgdGFy Z2V0LCBidXQgd2UgY2Fubm90IHZlcmlmeSB0aGlzIHVudGlsIGFsbAorCQkJICogdGFyZ2V0IGV4 cHJlc3Npb25zIGhhdmUgYmVlbiBjb25zdHJ1Y3RlZC4KKwkJCSAqLworCQkJcG9zc2libHlfZGVw ZW5kZW50ID0gbGFwcGVuZChwb3NzaWJseV9kZXBlbmRlbnQsIGV4cHIpOworCQl9CisJfQorCisJ LyoKKwkgKiBOb3cgd2UgY2FuIHZlcmlmeSB3aGV0aGVyIGFuIGV4cHJlc3Npb24gaXMgZnVuY3Rp b25hbGx5IGRlcGVuZGVudCBvbgorCSAqIG90aGVycy4KKwkgKi8KKwlmb3JlYWNoKGxjLCBwb3Nz aWJseV9kZXBlbmRlbnQpCisJeworCQlWYXIJCSAgICp0dmFyOworCQlMaXN0CSAgICpkZXBzID0g TklMOworCQlSYW5nZVRibEVudHJ5ICpydGU7CisKKwkJdHZhciA9IGxmaXJzdF9ub2RlKFZhciwg bGMpOworCQlydGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W3R2YXItPnZhcm5vXTsKKworCQlp ZiAoY2hlY2tfZnVuY3Rpb25hbF9ncm91cGluZyhydGUtPnJlbGlkLCB0dmFyLT52YXJubywKKwkJ CQkJCQkJCSAgdHZhci0+dmFybGV2ZWxzdXAsCisJCQkJCQkJCQkgIHRhcmdldC0+ZXhwcnMsICZk ZXBzKSkKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBleHByZXNzaW9uIGlzIGZ1bmN0aW9uYWxseSBk ZXBlbmRlbnQgb24gb3RoZXIgdGFyZ2V0CisJCQkgKiBleHByZXNzaW9ucywgc28gaXQgY2FuIGJl IGluY2x1ZGVkIGluIHRoZSB0YXJnZXRzLiAgU2luY2UgaXQKKwkJCSAqIHdpbGwgbm90IGJlIHVz ZWQgYXMgYSBncm91cGluZyBrZXksIGEgc29ydGdyb3VwcmVmIGlzIG5vdAorCQkJICogbmVlZGVk IGZvciBpdC4KKwkJCSAqLworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQs IChFeHByICopIHR2YXIpOworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5w dXQsIChFeHByICopIHR2YXIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFdlIG1h eSBhcnJpdmUgaGVyZSB3aXRoIGEgZ3JvdXBpbmcgZXhwcmVzc2lvbiB0aGF0IGlzIHByb3Zlbgor CQkJICogcmVkdW5kYW50IGJ5IEVxdWl2YWxlbmNlQ2xhc3MgcHJvY2Vzc2luZywgc3VjaCBhcyAn dDEuYScgaW4gdGhlCisJCQkgKiBxdWVyeSBiZWxvdy4KKwkJCSAqCisJCQkgKiBzZWxlY3QgbWF4 KHQxLmMpIGZyb20gdCB0MSwgdCB0MiB3aGVyZSB0MS5hID0gMSBncm91cCBieSB0MS5hLAorCQkJ ICogdDEuYjsKKwkJCSAqCisJCQkgKiBGb3Igbm93IHdlIGp1c3QgZ2l2ZSB1cCBpbiB0aGlzIGNh c2UuCisJCQkgKi8KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOwor fQorCisvKgorICogaXNfdmFyX2luX2FnZ3JlZl9vbmx5CisgKgkgIENoZWNrIHdoZXRoZXIgdGhl IGdpdmVuIFZhciBhcHBlYXJzIGluIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBhbmQgbm90CisgKgkg IGVsc2V3aGVyZSBpbiB0aGUgdGFyZ2V0bGlzdCBvciBoYXZpbmdRdWFsLgorICovCitzdGF0aWMg Ym9vbAoraXNfdmFyX2luX2FnZ3JlZl9vbmx5KFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhcikK K3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICogU2VhcmNoIHRoZSBsaXN0IG9mIGFnZ3Jl Z2F0ZSBleHByZXNzaW9ucyBmb3IgdGhlIFZhci4KKwkgKi8KKwlmb3JlYWNoKGxjLCByb290LT5h Z2dfY2xhdXNlX2xpc3QpCisJeworCQlBZ2dDbGF1c2VJbmZvICphY19pbmZvID0gbGZpcnN0X25v ZGUoQWdnQ2xhdXNlSW5mbywgbGMpOworCQlMaXN0CSAgICp2YXJzOworCisJCUFzc2VydChJc0Eo YWNfaW5mby0+YWdncmVmLCBBZ2dyZWYpKTsKKworCQlpZiAoIWJtc19pc19tZW1iZXIodmFyLT52 YXJubywgYWNfaW5mby0+YWdnX2V2YWxfYXQpKQorCQkJY29udGludWU7CisKKwkJdmFycyA9IHB1 bGxfdmFyX2NsYXVzZSgoTm9kZSAqKSBhY19pbmZvLT5hZ2dyZWYsCisJCQkJCQkJICAgUFZDX1JF Q1VSU0VfQUdHUkVHQVRFUyB8CisJCQkJCQkJICAgUFZDX1JFQ1VSU0VfV0lORE9XRlVOQ1MgfAor CQkJCQkJCSAgIFBWQ19SRUNVUlNFX1BMQUNFSE9MREVSUyk7CisKKwkJaWYgKGxpc3RfbWVtYmVy KHZhcnMsIHZhcikpCisJCXsKKwkJCWxpc3RfZnJlZSh2YXJzKTsKKwkJCWJyZWFrOworCQl9CisK KwkJbGlzdF9mcmVlKHZhcnMpOworCX0KKworCXJldHVybiAobGMgIT0gTlVMTCAmJiAhbGlzdF9t ZW1iZXIocm9vdC0+dGxpc3RfdmFycywgdmFyKSk7Cit9CisKKy8qCisgKiBpc192YXJfbmVlZGVk X2J5X2pvaW4KKyAqCSAgQ2hlY2sgaWYgdGhlIGdpdmVuIFZhciBpcyBuZWVkZWQgYnkgam9pbnMg YWJvdmUgdGhlIGN1cnJlbnQgcmVsLgorICoKKyAqIENvbnNpZGVyIHB1c2hpbmcgdGhlIGFnZ3Jl Z2F0ZSBhdmcoYi55KSBkb3duIHRvIHJlbGF0aW9uIGIgZm9yIHRoZSBmb2xsb3dpbmcKKyAqIHF1 ZXJ5OgorICoKKyAqICAgIFNFTEVDVCBhLmksIGF2ZyhiLnkpCisgKiAgICBGUk9NIGEgSk9JTiBi IE9OIGEuaiA9IGIuagorICogICAgR1JPVVAgQlkgYS5pOworICoKKyAqIENvbHVtbiBiLmogbmVl ZHMgdG8gYmUgdXNlZCBhcyB0aGUgZ3JvdXBpbmcga2V5IGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IGNh bm5vdAorICogZmluZCBpdHMgd2F5IHRvIHRoZSBpbnB1dCBvZiB0aGUgam9pbiBleHByZXNzaW9u LgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX25lZWRlZF9ieV9qb2luKFBsYW5uZXJJbmZvICpy b290LCBWYXIgKnZhciwgUmVsT3B0SW5mbyAqcmVsKQoreworCVJlbGlkcwkJcmVsaWRzOworCWlu dAkJCWF0dG5vOworCVJlbE9wdEluZm8gKmJhc2VyZWw7CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3 aGVuIGNoZWNraW5nIGlmIHRoZSBWYXIgaXMgbmVlZGVkIGJ5IGpvaW5zIGFib3ZlLCB3ZSB3YW50 IHRvCisJICogZXhjbHVkZSBjYXNlcyB3aGVyZSB0aGUgVmFyIGlzIG9ubHkgbmVlZGVkIGluIHRo ZSBmaW5hbCBvdXRwdXQuICBTbworCSAqIGluY2x1ZGUgInJlbGF0aW9uIDAiIGluIHRoZSBjaGVj ay4KKwkgKi8KKwlyZWxpZHMgPSBibXNfY29weShyZWwtPnJlbGlkcyk7CisJcmVsaWRzID0gYm1z X2FkZF9tZW1iZXIocmVsaWRzLCAwKTsKKworCWJhc2VyZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3Qs IHZhci0+dmFybm8pOworCWF0dG5vID0gdmFyLT52YXJhdHRubyAtIGJhc2VyZWwtPm1pbl9hdHRy OworCisJcmV0dXJuIGJtc19ub25lbXB0eV9kaWZmZXJlbmNlKGJhc2VyZWwtPmF0dHJfbmVlZGVk W2F0dG5vXSwgcmVsaWRzKTsKK30KKworLyoKKyAqIGdldF9leHByZXNzaW9uX3NvcnRncm91cHJl ZgorICoJICBSZXR1cm4gc29ydGdyb3VwcmVmIGlmIHRoZSBnaXZlbiAnZXhwcicgY2FuIGJlIHVz ZWQgYXMgYSBncm91cGluZyBrZXkgaW4KKyAqCSAgZ3JvdXBlZCBwYXRocyBmb3IgYmFzZSBvciBq b2luIHJlbGF0aW9ucywgb3IgMCBvdGhlcndpc2UuCisgKgorICogV2UgZmlyc3QgY2hlY2sgaWYg J2V4cHInIGlzIGFtb25nIHRoZSBncm91cGluZyBleHByZXNzaW9ucy4gIElmIGl0IGlzIG5vdCwK KyAqIHdlIHRoZW4gY2hlY2sgaWYgJ2V4cHInIGlzIGtub3duIGVxdWFsIHRvIGFueSBvZiB0aGUg Z3JvdXBpbmcgZXhwcmVzc2lvbnMKKyAqIGR1ZSB0byBlcXVpdmFsZW5jZSByZWxhdGlvbnNoaXBz LgorICovCitzdGF0aWMgSW5kZXgKK2dldF9leHByZXNzaW9uX3NvcnRncm91cHJlZihQbGFubmVy SW5mbyAqcm9vdCwgRXhwciAqZXhwcikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2go bGMsIHJvb3QtPmdyb3VwX2V4cHJfbGlzdCkKKwl7CisJCUdyb3VwRXhwckluZm8gKmdlX2luZm8g PSBsZmlyc3Rfbm9kZShHcm91cEV4cHJJbmZvLCBsYyk7CisKKwkJQXNzZXJ0KElzQShnZV9pbmZv LT5leHByLCBWYXIpKTsKKworCQlpZiAoZXF1YWwoZ2VfaW5mby0+ZXhwciwgZXhwcikgfHwKKwkJ CWV4cHJzX2tub3duX2VxdWFsKHJvb3QsIChOb2RlICopIGV4cHIsIChOb2RlICopIGdlX2luZm8t PmV4cHIsCisJCQkJCQkJICBnZV9pbmZvLT5idHJlZV9vcGZhbWlseSkpCisJCXsKKwkJCUFzc2Vy dChnZV9pbmZvLT5zb3J0Z3JvdXByZWYgPiAwKTsKKworCQkJcmV0dXJuIGdlX2luZm8tPnNvcnRn cm91cHJlZjsKKwkJfQorCX0KKworCS8qIFRoZSBleHByZXNzaW9uIGNhbm5vdCBiZSB1c2VkIGFz IGEgZ3JvdXBpbmcga2V5LiAqLworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190 YWJsZXMuYwppbmRleCA2ODYzMDlkYjU4Li43ODk2YzQ4ZmUyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYwpAQCAtOTI5LDYgKzkyOSwxNiBAQCBzdHJ1Y3QgY29uZmlnX2Jvb2wgQ29u ZmlndXJlTmFtZXNCb29sW10gPQogCQlmYWxzZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCisJ eworCQl7ImVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUiLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5H X01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyBlYWdlciBhZ2dyZWdhdGlvbi4iKSwK KwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTgorCQl9LAorCQkmZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0 ZSwKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAogCXsKIAkJeyJlbmFibGVfcGFy YWxsZWxfYXBwZW5kIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCiAJCQlnZXR0 ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgcGFyYWxsZWwgYXBwZW5kIHBs YW5zLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl CmluZGV4IDY2N2UwZGM0MGEuLjJlOWRmNTZjZjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQxMyw2ICs0MTMsNyBAQAogI2VuYWJsZV9z b3J0ID0gb24KICNlbmFibGVfdGlkc2NhbiA9IG9uCiAjZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJp bmcgPSBvbgorI2VuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgPSBvZmYKIAogIyAtIFBsYW5uZXIgQ29z dCBDb25zdGFudHMgLQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDA3ZTI0MTUzOTguLmIyYTUx YjEyMWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC04MCw2ICs4MCwyNSBAQCB0eXBlZGVmIGVu dW0gVXBwZXJSZWxhdGlvbktpbmQKIAkvKiBOQjogVVBQRVJSRUxfRklOQUwgbXVzdCBiZSBsYXN0 IGVudW0gZW50cnk7IGl0J3MgdXNlZCB0byBzaXplIGFycmF5cyAqLwogfSBVcHBlclJlbGF0aW9u S2luZDsKIAorLyoKKyAqIEEgc3RydWN0dXJlIGNvbnNpc3Rpbmcgb2YgYSBsaXN0IGFuZCBhIGhh c2ggdGFibGUgdG8gc3RvcmUgcmVsYXRpb25zLgorICoKKyAqIEZvciBzbWFsbCBwcm9ibGVtcyB3 ZSBqdXN0IHNjYW4gdGhlIGxpc3QgdG8gZG8gbG9va3VwcywgYnV0IHdoZW4gdGhlcmUgYXJlCisg KiBtYW55IHJlbGF0aW9ucyB3ZSBidWlsZCBhIGhhc2ggdGFibGUgZm9yIGZhc3RlciBsb29rdXBz LiAgVGhlIGhhc2ggdGFibGUgaXMKKyAqIHByZXNlbnQgYW5kIHZhbGlkIHdoZW4gJ2hhc2gnIGlz IG5vdCBOVUxMLiAgTm90ZSB0aGF0IHdlIHN0aWxsIG1haW50YWluIHRoZQorICogbGlzdCBldmVu IHdoZW4gdXNpbmcgdGhlIGhhc2ggdGFibGUgZm9yIGxvb2t1cHM7IHRoaXMgc2ltcGxpZmllcyBs aWZlIGZvcgorICogR0VRTy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUmVsSW5mb0xpc3QKK3sKKwlw Z19ub2RlX2F0dHIobm9fY29weV9lcXVhbCwgbm9fcmVhZCkKKworCU5vZGVUYWcJCXR5cGU7CisK KwlMaXN0CSAgICppdGVtczsKKwlzdHJ1Y3QgSFRBQiAqaGFzaCBwZ19ub2RlX2F0dHIocmVhZF93 cml0ZV9pZ25vcmUpOworfSBSZWxJbmZvTGlzdDsKKwogLyotLS0tLS0tLS0tCiAgKiBQbGFubmVy R2xvYmFsCiAgKgkJR2xvYmFsIGluZm9ybWF0aW9uIGZvciBwbGFubmluZy9vcHRpbWl6YXRpb24K QEAgLTI3MCwxNSArMjg5LDE2IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCiAJLyoKIAkgKiBqb2lu X3JlbF9saXN0IGlzIGEgbGlzdCBvZiBhbGwgam9pbi1yZWxhdGlvbiBSZWxPcHRJbmZvcyB3ZSBo YXZlCi0JICogY29uc2lkZXJlZCBpbiB0aGlzIHBsYW5uaW5nIHJ1bi4gIEZvciBzbWFsbCBwcm9i bGVtcyB3ZSBqdXN0IHNjYW4gdGhlCi0JICogbGlzdCB0byBkbyBsb29rdXBzLCBidXQgd2hlbiB0 aGVyZSBhcmUgbWFueSBqb2luIHJlbGF0aW9ucyB3ZSBidWlsZCBhCi0JICogaGFzaCB0YWJsZSBm b3IgZmFzdGVyIGxvb2t1cHMuICBUaGUgaGFzaCB0YWJsZSBpcyBwcmVzZW50IGFuZCB2YWxpZAot CSAqIHdoZW4gam9pbl9yZWxfaGFzaCBpcyBub3QgTlVMTC4gIE5vdGUgdGhhdCB3ZSBzdGlsbCBt YWludGFpbiB0aGUgbGlzdAotCSAqIGV2ZW4gd2hlbiB1c2luZyB0aGUgaGFzaCB0YWJsZSBmb3Ig bG9va3VwczsgdGhpcyBzaW1wbGlmaWVzIGxpZmUgZm9yCi0JICogR0VRTy4KKwkgKiBjb25zaWRl cmVkIGluIHRoaXMgcGxhbm5pbmcgcnVuLgogCSAqLwotCUxpc3QJICAgKmpvaW5fcmVsX2xpc3Q7 Ci0Jc3RydWN0IEhUQUIgKmpvaW5fcmVsX2hhc2ggcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdu b3JlKTsKKwlSZWxJbmZvTGlzdCAqam9pbl9yZWxfbGlzdDsgLyogbGlzdCBvZiBqb2luLXJlbGF0 aW9uIFJlbE9wdEluZm9zICovCisKKwkvKgorCSAqIGdyb3VwZWRfcmVsX2xpc3QgaXMgYSBsaXN0 IG9mIGFsbCBncm91cGVkLXJlbGF0aW9uIFJlbE9wdEluZm9zIHdlIGhhdmUKKwkgKiBjb25zaWRl cmVkIGluIHRoaXMgcGxhbm5pbmcgcnVuLiAgVGhpcyBpcyBvbmx5IHVzZWQgYnkgZWFnZXIKKwkg KiBhZ2dyZWdhdGlvbi4KKwkgKi8KKwlSZWxJbmZvTGlzdCAqZ3JvdXBlZF9yZWxfbGlzdDsJLyog bGlzdCBvZiBncm91cGVkLXJlbGF0aW9uIFJlbE9wdEluZm9zICovCiAKIAkvKgogCSAqIFdoZW4g ZG9pbmcgYSBkeW5hbWljLXByb2dyYW1taW5nLXN0eWxlIGpvaW4gc2VhcmNoLCBqb2luX3JlbF9s ZXZlbFtrXQpAQCAtMzczLDYgKzM5MywxNSBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAkvKiBsaXN0 IG9mIFBsYWNlSG9sZGVySW5mb3MgKi8KIAlMaXN0CSAgICpwbGFjZWhvbGRlcl9saXN0OwogCisJ LyogbGlzdCBvZiBBZ2dDbGF1c2VJbmZvcyAqLworCUxpc3QJICAgKmFnZ19jbGF1c2VfbGlzdDsK KworCS8qIGxpc3Qgb2YgR3JvdXBFeHBySW5mb3MgKi8KKwlMaXN0CSAgICpncm91cF9leHByX2xp c3Q7CisKKwkvKiBsaXN0IG9mIHBsYWluIFZhcnMgY29udGFpbmVkIGluIHRhcmdldGxpc3QgYW5k IGhhdmluZ1F1YWwgKi8KKwlMaXN0CSAgICp0bGlzdF92YXJzOworCiAJLyogYXJyYXkgb2YgUGxh Y2VIb2xkZXJJbmZvcyBpbmRleGVkIGJ5IHBoaWQgKi8KIAlzdHJ1Y3QgUGxhY2VIb2xkZXJJbmZv ICoqcGxhY2Vob2xkZXJfYXJyYXkgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlLCBhcnJh eV9zaXplKHBsYWNlaG9sZGVyX2FycmF5X3NpemUpKTsKIAkvKiBhbGxvY2F0ZWQgc2l6ZSBvZiBh cnJheSAqLwpAQCAtOTk4LDYgKzEwMjcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwog CS8qIGNvbnNpZGVyIHBhcnRpdGlvbndpc2Ugam9pbiBwYXRocz8gKGlmIHBhcnRpdGlvbmVkIHJl bCkgKi8KIAlib29sCQljb25zaWRlcl9wYXJ0aXRpb253aXNlX2pvaW47CiAKKwkvKgorCSAqIHVz ZWQgYnkgZWFnZXIgYWdncmVnYXRpb246CisJICovCisJLyogaW5mb3JtYXRpb24gbmVlZGVkIHRv IGNyZWF0ZSBncm91cGVkIHBhdGhzICovCisJc3RydWN0IFJlbEFnZ0luZm8gKmFnZ19pbmZvOwor CiAJLyoKIAkgKiBpbmhlcml0YW5jZSBsaW5rcywgaWYgdGhpcyBpcyBhbiBvdGhlcnJlbCAob3Ro ZXJ3aXNlIE5VTEwpOgogCSAqLwpAQCAtMTA3MSw2ICsxMTA2LDYyIEBAIHR5cGVkZWYgc3RydWN0 IFJlbE9wdEluZm8KIAkoKHJlbCktPnBhcnRfc2NoZW1lICYmIChyZWwpLT5ib3VuZGluZm8gJiYg KHJlbCktPm5wYXJ0cyA+IDAgJiYgXAogCSAocmVsKS0+cGFydF9yZWxzICYmIChyZWwpLT5wYXJ0 ZXhwcnMgJiYgKHJlbCktPm51bGxhYmxlX3BhcnRleHBycykKIAorLyoKKyAqIElzIHRoZSBnaXZl biByZWxhdGlvbiBhIGdyb3VwZWQgcmVsYXRpb24/CisgKi8KKyNkZWZpbmUgSVNfR1JPVVBFRF9S RUwocmVsKSBcCisJKChyZWwpLT5hZ2dfaW5mbyAhPSBOVUxMKQorCisvKgorICogUmVsQWdnSW5m bworICoJCUluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgZ3JvdXBlZCBwYXRocyBmb3IgYmFz ZSBhbmQgam9pbiByZWxzLgorICoKKyAqICJyZWxpZHMiIGlzIHRoZSBzZXQgb2YgcmVsYXRpb24g aWRlbnRpZmllcnMgKFJUIGluZGV4ZXMpLgorICoKKyAqICJ0YXJnZXQiIGlzIHRoZSBvdXRwdXQg dGxpc3QgZm9yIHRoZSBncm91cGVkIHBhdGhzLgorICoKKyAqICJhZ2dfaW5wdXQiIGlzIHRoZSBv dXRwdXQgdGxpc3QgZm9yIHRoZSBwYXRocyB0aGF0IHByb3ZpZGUgaW5wdXQgdG8gdGhlCisgKiBn cm91cGVkIHBhdGhzLiAgT25lIGRpZmZlcmVuY2UgZnJvbSB0aGUgcmVsdGFyZ2V0IG9mIHRoZSBu b24tZ3JvdXBlZAorICogcmVsYXRpb24gaXMgdGhhdCBhZ2dfaW5wdXQgaGFzIGl0cyBzb3J0Z3Jv dXByZWZzW10gaW5pdGlhbGl6ZWQuCisgKgorICogImdyb3VwZWRfcm93cyIgaXMgdGhlIGVzdGlt YXRlZCBudW1iZXIgb2YgcmVzdWx0IHR1cGxlcyBvZiB0aGUgZ3JvdXBlZAorICogcmVsYXRpb24u CisgKgorICogImdyb3VwX2NsYXVzZXMiLCAiZ3JvdXBfZXhwcnMiIGFuZCAiZ3JvdXBfcGF0aGtl eXMiIGFyZSBsaXN0cyBvZgorICogU29ydEdyb3VwQ2xhdXNlcywgdGhlIGNvcnJlc3BvbmRpbmcg Z3JvdXBpbmcgZXhwcmVzc2lvbnMgYW5kIFBhdGhLZXlzCisgKiByZXNwZWN0aXZlbHkuCisgKi8K K3R5cGVkZWYgc3RydWN0IFJlbEFnZ0luZm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fY29weV9lcXVh bCwgbm9fcmVhZCwgbm9fcXVlcnlfanVtYmxlKQorCisJTm9kZVRhZwkJdHlwZTsKKworCS8qIHNl dCBvZiBiYXNlICsgT0ogcmVsaWRzIChyYW5nZXRhYmxlIGluZGV4ZXMpICovCisJUmVsaWRzCQly ZWxpZHM7CisKKwkvKgorCSAqIGRlZmF1bHQgcmVzdWx0IHRhcmdldGxpc3QgZm9yIFBhdGhzIHNj YW5uaW5nIHRoaXMgZ3JvdXBlZCByZWxhdGlvbjsKKwkgKiBsaXN0IG9mIFZhcnMvRXhwcnMsIGNv c3QsIHdpZHRoCisJICovCisJc3RydWN0IFBhdGhUYXJnZXQgKnRhcmdldDsKKworCS8qCisJICog dGhlIHRhcmdldGxpc3QgZm9yIFBhdGhzIHRoYXQgcHJvdmlkZSBpbnB1dCB0byB0aGUgZ3JvdXBl ZCBwYXRocworCSAqLworCXN0cnVjdCBQYXRoVGFyZ2V0ICphZ2dfaW5wdXQ7CisKKwkvKiBlc3Rp bWF0ZWQgbnVtYmVyIG9mIHJlc3VsdCB0dXBsZXMgKi8KKwlDYXJkaW5hbGl0eSBncm91cGVkX3Jv d3M7CisKKwkvKiBhIGxpc3Qgb2YgU29ydEdyb3VwQ2xhdXNlcyAqLworCUxpc3QJICAgKmdyb3Vw X2NsYXVzZXM7CisJLyogYSBsaXN0IG9mIGdyb3VwaW5nIGV4cHJlc3Npb25zICovCisJTGlzdAkg ICAqZ3JvdXBfZXhwcnM7CisJLyogYSBsaXN0IG9mIFBhdGhLZXlzICovCisJTGlzdAkgICAqZ3Jv dXBfcGF0aGtleXM7Cit9IFJlbEFnZ0luZm87CisKIC8qCiAgKiBJbmRleE9wdEluZm8KICAqCQlQ ZXItaW5kZXggaW5mb3JtYXRpb24gZm9yIHBsYW5uaW5nL29wdGltaXphdGlvbgpAQCAtMzE0MCw2 ICszMjMxLDQxIEBAIHR5cGVkZWYgc3RydWN0IE1pbk1heEFnZ0luZm8KIAlQYXJhbQkgICAqcGFy YW07CiB9IE1pbk1heEFnZ0luZm87CiAKKy8qCisgKiBUaGUgYWdncmVnYXRlIGV4cHJlc3Npb25z IHRoYXQgYXBwZWFyIGluIHRhcmdldGxpc3QgYW5kIGhhdmluZyBjbGF1c2VzCisgKi8KK3R5cGVk ZWYgc3RydWN0IEFnZ0NsYXVzZUluZm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fcmVhZCwgbm9fcXVl cnlfanVtYmxlKQorCisJTm9kZVRhZwkJdHlwZTsKKworCS8qIHRoZSBBZ2dyZWYgZXhwciAqLwor CUFnZ3JlZgkgICAqYWdncmVmOworCisJLyogbG93ZXN0IGxldmVsIHdlIGNhbiBldmFsdWF0ZSB0 aGlzIGFnZ3JlZ2F0ZSBhdCAqLworCVJlbGlkcwkJYWdnX2V2YWxfYXQ7Cit9IEFnZ0NsYXVzZUlu Zm87CisKKy8qCisgKiBUaGUgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgdGhhdCBhcHBlYXIgaW4gZ3Jv dXBpbmcgY2xhdXNlcworICovCit0eXBlZGVmIHN0cnVjdCBHcm91cEV4cHJJbmZvCit7CisJcGdf bm9kZV9hdHRyKG5vX3JlYWQsIG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJCXR5cGU7CisK KwkvKiB0aGUgcmVwcmVzZW50ZWQgZXhwcmVzc2lvbiAqLworCUV4cHIJICAgKmV4cHI7CisKKwkv KiB0aGUgdGxlU29ydEdyb3VwUmVmIG9mIHRoZSBjb3JyZXNwb25kaW5nIFNvcnRHcm91cENsYXVz ZSAqLworCUluZGV4CQlzb3J0Z3JvdXByZWY7CisKKwkvKiBidHJlZSBvcGZhbWlseSBkZWZpbmlu ZyB0aGUgb3JkZXJpbmcgKi8KKwlPaWQJCQlidHJlZV9vcGZhbWlseTsKK30gR3JvdXBFeHBySW5m bzsKKwogLyoKICAqIEF0IHJ1bnRpbWUsIFBBUkFNX0VYRUMgc2xvdHMgYXJlIHVzZWQgdG8gcGFz cyB2YWx1ZXMgYXJvdW5kIGZyb20gb25lIHBsYW4KICAqIG5vZGUgdG8gYW5vdGhlci4gIFRoZXkg Y2FuIGJlIHVzZWQgdG8gcGFzcyB2YWx1ZXMgZG93biBpbnRvIHN1YnF1ZXJpZXMgKGZvcgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aG5vZGUuaAppbmRleCAxMDM1ZTY1NjBjLi5kM2MwNWE2MWJhIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMzE0LDEwICszMTQsMTYgQEAgZXh0ZXJuIHZvaWQgc2V0 dXBfc2ltcGxlX3JlbF9hcnJheXMoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgZXhw YW5kX3BsYW5uZXJfYXJyYXlzKFBsYW5uZXJJbmZvICpyb290LCBpbnQgYWRkX3NpemUpOwogZXh0 ZXJuIFJlbE9wdEluZm8gKmJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCBy ZWxpZCwKIAkJCQkJCQkJCVJlbE9wdEluZm8gKnBhcmVudCk7CitleHRlcm4gUmVsT3B0SW5mbyAq YnVpbGRfc2ltcGxlX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQlS ZWxPcHRJbmZvICpyZWxfcGxhaW4pOworZXh0ZXJuIFJlbE9wdEluZm8gKmJ1aWxkX2dyb3VwZWRf cmVsKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJIFJlbE9wdEluZm8gKnJlbF9wbGFpbik7 CiBleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9iYXNlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50 IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5kX2Jhc2VfcmVsX25vZXJyKFBsYW5uZXJJ bmZvICpyb290LCBpbnQgcmVsaWQpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWxf aWdub3JlX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCk7CiBleHRlcm4gUmVsT3B0 SW5mbyAqZmluZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcyk7Citl eHRlcm4gdm9pZCBhZGRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCk7CitleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9ncm91cGVkX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsaWRzIHJlbGlkcyk7CiBleHRlcm4gUmVsT3B0SW5mbyAqYnVpbGRfam9pbl9yZWwo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgUmVsaWRzIGpvaW5yZWxpZHMsCiAJCQkJCQkJ CSAgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLApAQCAtMzUzLDQgKzM1OSw1IEBAIGV4dGVybiBSZWxP cHRJbmZvICpidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJ CQlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKIAkJCQkJCQkJCQlpbnQgbmFwcGluZm9zLCBBcHBl bmRSZWxJbmZvICoqYXBwaW5mb3MpOwogCitleHRlcm4gUmVsQWdnSW5mbyAqY3JlYXRlX3JlbF9h Z2dfaW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKICNlbmRpZgkJCQkJ CQkvKiBQQVRITk9ERV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmluZGV4IGE3OGU5MDYxMGYuLjFl N2QwMTBlY2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCisrKyBi L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCkBAIC0yMSw2ICsyMSw3IEBACiAgKiBhbGxw YXRocy5jCiAgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9nZXFvOworZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZTsKIGV4dGVybiBQR0RMTElN UE9SVCBpbnQgZ2Vxb190aHJlc2hvbGQ7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1pbl9wYXJh bGxlbF90YWJsZV9zY2FuX3NpemU7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1pbl9wYXJhbGxl bF9pbmRleF9zY2FuX3NpemU7CkBAIC01Nyw2ICs1OCwxMCBAQCBleHRlcm4gdm9pZCBnZW5lcmF0 ZV9nYXRoZXJfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJ CQkJICBib29sIG92ZXJyaWRlX3Jvd3MpOwogZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfdXNlZnVsX2dh dGhlcl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJ CSBib29sIG92ZXJyaWRlX3Jvd3MpOworZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfZ3JvdXBlZF9wYXRo cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICAgUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQs CisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbF9wbGFpbiwKKwkJCQkJCQkJICAgUmVsQWdnSW5m byAqYWdnX2luZm8pOwogZXh0ZXJuIGludAljb21wdXRlX3BhcmFsbGVsX3dvcmtlcihSZWxPcHRJ bmZvICpyZWwsIGRvdWJsZSBoZWFwX3BhZ2VzLAogCQkJCQkJCQkJZG91YmxlIGluZGV4X3BhZ2Vz LCBpbnQgbWF4X3dvcmtlcnMpOwogZXh0ZXJuIHZvaWQgY3JlYXRlX3BhcnRpYWxfYml0bWFwX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFu bWFpbi5oCmluZGV4IGFhZmMxNzM3OTIuLmNlZGNkODhlYmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL29wdGltaXplci9wbGFubWFpbi5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFu bWFpbi5oCkBAIC03Miw2ICs3Miw3IEBAIGV4dGVybiB2b2lkIGFkZF9vdGhlcl9yZWxzX3RvX3F1 ZXJ5KFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIGJ1aWxkX2Jhc2VfcmVsX3RsaXN0 cyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZmluYWxfdGxpc3QpOwogZXh0ZXJuIHZvaWQgYWRk X3ZhcnNfdG9fdGFyZ2V0bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFycywKIAkJCQkJ CQkJICAgUmVsaWRzIHdoZXJlX25lZWRlZCk7CitleHRlcm4gdm9pZCBzZXR1cF9lYWdlcl9hZ2dy ZWdhdGlvbihQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBmaW5kX2xhdGVyYWxfcmVm ZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBjcmVhdGVfbGF0ZXJhbF9q b2luX2luZm8oUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIExpc3QgKmRlY29uc3RydWN0X2pv aW50cmVlKFBsYW5uZXJJbmZvICpyb290KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZWFnZXJfYWdncmVnYXRlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv ZWFnZXJfYWdncmVnYXRlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li45ZjYzNDcyZWZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9lYWdlcl9hZ2dyZWdhdGUub3V0CkBAIC0wLDAgKzEsMTMwOCBAQAorLS0KKy0tIEVBR0VSIEFH R1JFR0FUSU9OCistLSBUZXN0IHdlIGNhbiBwdXNoIGFnZ3JlZ2F0aW9uIGRvd24gYmVsb3cgam9p bgorLS0KKy0tIEVuYWJsZSBlYWdlciBhZ2dyZWdhdGlvbiwgd2hpY2ggYnkgZGVmYXVsdCBpcyBk aXNhYmxlZC4KK1NFVCBlbmFibGVfZWFnZXJfYWdncmVnYXRlIFRPIG9uOworQ1JFQVRFIFRBQkxF IGVhZ2VyX2FnZ190MSAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOworQ1JFQVRF IFRBQkxFIGVhZ2VyX2FnZ190MiAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOwor Q1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190MyAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNp b24pOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3QxIFNFTEVDVCBpLCBpLCBpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDApaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MiBTRUxFQ1QgaSwg aSUxMCwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CitJTlNFUlQgSU5UTyBlYWdl cl9hZ2dfdDMgU0VMRUNUIGklMTAsIGklMTAsIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw MClpOworQU5BTFlaRSBlYWdlcl9hZ2dfdDE7CitBTkFMWVpFIGVhZ2VyX2FnZ190MjsKK0FOQUxZ WkUgZWFnZXJfYWdnX3QzOworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gb3ZlciBiYXNl IHJlbAorLS0KKy0tIFBlcmZvcm0gc2NhbiBvZiBhIHRhYmxlLCBhZ2dyZWdhdGUgdGhlIHJlc3Vs dCwgam9pbiBpdCB0byB0aGUgb3RoZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUgYWdncmVn YXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQy LmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0 Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg RmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBH cm91cCBLZXk6IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJU SUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkK KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2Zyh0Mi5jKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MiB0MgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisoMTggcm93cykK KworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2Vy X2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7Cisg YSB8IGF2ZyAKKy0tLSstLS0tLQorIDEgfCA0OTYKKyAyIHwgNDk3CisgMyB8IDQ5OAorIDQgfCA0 OTkKKyA1IHwgNTAwCisgNiB8IDUwMQorIDcgfCA1MDIKKyA4IHwgNTAzCisgOSB8IDUwNAorKDkg cm93cykKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgorU0VU IGVuYWJsZV9oYXNoYWdnIFRPIG9mZjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2df dDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAg T3V0cHV0OiB0MS5hLCBhdmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQK KyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgU29y dCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1 dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo dDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5j CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Mi5iLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlh bCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5i LCBQQVJUSUFMIGF2Zyh0Mi5jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0Mi5iCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYgorKDIxIHJv d3MpCisKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBl YWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5h OworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5NworIDMgfCA0OTgKKyA0 IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMworIDkgfCA1MDQK Kyg5IHJvd3MpCisKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworLS0KKy0tIFRlc3QgZWFnZXIgYWdn cmVnYXRpb24gb3ZlciBqb2luIHJlbAorLS0KKy0tIFBlcmZvcm0gam9pbiBvZiB0YWJsZXMsIGFn Z3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0gYW5kIGZp bmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFn ZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEg PSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91 dHB1dDogdDEuYSwgYXZnKCh0Mi5jICsgdDMuYykpCisgICBHcm91cCBLZXk6IHQxLmEKKyAgIC0+ ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMp KSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKSkKKyAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykp KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2ZygodDIuYyArIHQz LmMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQzLmMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQzLmEgPSB0Mi5hKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDMgdDMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDMuYSwgdDMuYiwg dDMuYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYiwgdDIuYQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYiwgdDIuYQorKDI1IHJvd3MpCisKK1NFTEVDVCB0 MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdn X3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5h IEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8 IDQ5NworIDIgfCA0OTkKKyAzIHwgNTAxCisgNCB8IDUwMworIDUgfCA1MDUKKyA2IHwgNTA3Cisg NyB8IDUwOQorIDggfCA1MTEKKyA5IHwgNTEzCisoOSByb3dzKQorCistLSBQcm9kdWNlIHJlc3Vs dHMgd2l0aCBzb3J0aW5nIGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMu YykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQy LmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRF UiBCWSB0MS5hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBh dmcoKHQyLmMgKyB0My5jKSkKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAgICAg ICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAg U29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91 dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5h LCB0MS5iLCB0MS5jCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Mi5iLCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Mi5jLCB0Mi5iLCB0My5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0 IEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0 Mi5iLCB0My5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0My5hID0gdDIuYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQy LmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKygyOCBy b3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0 MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0 MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgYSB8IGF2ZyAK Ky0tLSstLS0tLQorIDEgfCA0OTcKKyAyIHwgNDk5CisgMyB8IDUwMQorIDQgfCA1MDMKKyA1IHwg NTA1CisgNiB8IDUwNworIDcgfCA1MDkKKyA4IHwgNTExCisgOSB8IDUxMworKDkgcm93cykKKwor UkVTRVQgZW5hYmxlX2hhc2hhZ2c7CistLQorLS0gVGVzdCB0aGF0IGVhZ2VyIGFnZ3JlZ2F0aW9u IHdvcmtzIGZvciBvdXRlciBqb2luCistLQorLS0gRW5zdXJlIGFnZ3JlZ2F0aW9uIGNhbiBiZSBw dXNoZWQgZG93biB0byB0aGUgbm9uLW51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgUklH SFQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRF UiBCWSB0MS5hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0 ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4g IFNvcnQKKyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAg ICAgU29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIFJpZ2h0IEpvaW4KKyAgICAgICAg ICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5h LCB0MS5iLCB0MS5jCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Mi5iLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQyLmMKKygxOCByb3dzKQorCitTRUxFQ1QgdDEuYSwg YXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3QyIHQy IE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAor LS0tKy0tLS0tCisgMSB8IDQ5NgorIDIgfCA0OTcKKyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1 MDAKKyA2IHwgNTAxCisgNyB8IDUwMgorIDggfCA1MDMKKyA5IHwgNTA0CisgICB8IDUwNQorKDEw IHJvd3MpCisKKy0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW5ub3QgYmUgcHVzaGVkIGRvd24gdG8g dGhlIG51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0 Mi5iLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2FnZ190 MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7CisgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNvcnQKKyAgIE91dHB1dDogdDIuYiwgKGF2Zyh0Mi5jKSkKKyAgIFNvcnQgS2V5OiB0Mi5i CisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0Mi5iLCBhdmcodDIuYykK KyAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAgICAgICAgLT4gIEhhc2ggUmlnaHQgSm9pbgor ICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCB0Mi5jCisgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0Mi5iID0gdDEuYikKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIs IHQyLmMKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxLmIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIKKygx NSByb3dzKQorCitTRUxFQ1QgdDIuYiwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIExF RlQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDIuYiBPUkRF UiBCWSB0Mi5iOworIGIgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5NworIDMg fCA0OTgKKyA0IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMwor IDkgfCA1MDQKKyAgIHwgICAgCisoMTAgcm93cykKKworLS0KKy0tIFRlc3QgdGhhdCBlYWdlciBh Z2dyZWdhdGlvbiB3b3JrcyBmb3IgcGFyYWxsZWwgcGxhbnMKKy0tCitTRVQgcGFyYWxsZWxfc2V0 dXBfY29zdD0wOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q9MDsKK1NFVCBtaW5fcGFyYWxsZWxf dGFibGVfc2Nhbl9zaXplPTA7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcj00 OworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBG Uk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBH Uk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisgICBPdXRw dXQ6IHQxLmEsIGF2Zyh0Mi5jKQorICAgR3JvdXAgS2V5OiB0MS5hCisgICAtPiAgR2F0aGVyIE1l cmdlCisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAg IFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIE91 dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgU29ydCBLZXk6 IHQxLmEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Mi5iLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIs IHQyLmMKKygyMSByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdn X3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEg T1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5NgorIDIgfCA0OTcK KyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwgNTAxCisgNyB8IDUwMgorIDggfCA1 MDMKKyA5IHwgNTA0CisoOSByb3dzKQorCitSRVNFVCBwYXJhbGxlbF9zZXR1cF9jb3N0OworUkVT RVQgcGFyYWxsZWxfdHVwbGVfY29zdDsKK1JFU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3Np emU7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOworRFJPUCBUQUJMRSBl YWdlcl9hZ2dfdDE7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RST1AgVEFCTEUgZWFnZXJf YWdnX3QzOworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gZm9yIHBhcnRpdGlvbndpc2Ug am9pbgorLS0KKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0ZSwgd2hpY2ggYnkgZGVm YXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUgVE8g dHJ1ZTsKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGpvaW4sIHdoaWNoIGJ5IGRlZmF1bHQgaXMg ZGlzYWJsZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOworQ1JFQVRF IFRBQkxFIGVhZ2VyX2FnZ190YWIxKHggaW50LCB5IGludCkgUEFSVElUSU9OIEJZIFJBTkdFKHgp OworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxX3AxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2df dGFiMSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdn X3RhYjFfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMTAp IFRPICgyMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDMgUEFSVElUSU9OIE9GIGVh Z2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRPICgzMCk7CitDUkVBVEUgVEFCTEUg ZWFnZXJfYWdnX3RhYjIoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeSk7CitDUkVB VEUgVEFCTEUgZWFnZXJfYWdnX3RhYjJfcDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIyIEZP UiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9w MiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIw KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMyBQQVJUSVRJT04gT0YgZWFnZXJfYWdn X3RhYjIgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2Fn Z190YWIxIFNFTEVDVCBpICUgMzAsIGkgJSAyMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLCAyOTks IDIpIGk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiMiBTRUxFQ1QgaSAlIDIwLCBpICUgMzAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCwgMjk5LCAzKSBpOworQU5BTFlaRSBlYWdlcl9hZ2dfdGFi MTsKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYjI7CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRj aGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBjb3Vu dCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54 ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91 dHB1dDogdDEueCwgKHN1bSh0MS55KSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54Cisg ICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgT3V0cHV0OiB0MS54LCBzdW0odDEueSksIGNvdW50KCopCisgICAgICAgICAgICAg ICBHcm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi55ID0gdDEueCkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh YjJfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueQorICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDEueCwgKFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIFBBUlRJQUwgc3VtKHQxLnkpLCBQ QVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQxLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDEueCwgdDEueQorICAgICAgICAgLT4gIEZpbmFsaXplIEhh c2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBzdW0odDFfMS55KSwg Y291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBB UlRJQUwgc3VtKHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHQyXzEueSA9IHQxXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDIgdDJfMQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwg c3VtKHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMS54LCBQQVJUSUFMIHN1bSh0MV8xLnkpLCBQQVJUSUFMIGNvdW50 KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiMV9wMiB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzEueCwgdDFfMS55CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIHN1bSh0MV8yLnkpLCBjb3Vu dCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElB TCBzdW0odDFfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDJfMi55ID0gdDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMyB0Ml8yCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzIueQorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0o dDFfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8yLngsIFBBUlRJQUwgc3VtKHQxXzIueSksIFBBUlRJQUwgY291bnQoKikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWIxX3AzIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMi54LCB0MV8yLnkKKyg0OSByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQx LnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBX SEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgeCAgfCBzdW0g IHwgY291bnQgCistLS0tKy0tLS0tLSstLS0tLS0tCisgIDAgfCAgNTAwIHwgICAxMDAKKyAgNiB8 IDExMDAgfCAgIDEwMAorIDEyIHwgIDcwMCB8ICAgMTAwCisgMTggfCAxMzAwIHwgICAxMDAKKyAy NCB8ICA5MDAgfCAgIDEwMAorKDUgcm93cykKKworLS0gR1JPVVAgQlkgaGF2aW5nIG90aGVyIG1h dGNoaW5nIGtleQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLnksIHN1 bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIg dDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueSBPUkRFUiBCWSB0Mi55OworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTb3J0CisgICBPdXRwdXQ6IHQyLnksIChzdW0odDEueSkpLCAoY291bnQoKikpCisgICBTb3J0 IEtleTogdDIueQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKQor ICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi55CisgICAgICAgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIChQQVJUSUFMIHN1bSh0MS55 KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo dDIueSA9IHQxLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmVhZ2VyX2FnZ190YWIyX3AxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1bSh0MS55KSksIChQQVJUSUFMIGNvdW50 KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCBQQVJUSUFM IHN1bSh0MS55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiB0MS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQxCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLnksIHQxLngKKyAgICAgICAgIC0+ ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwg c3VtKHQxXzEueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueQor ICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8xLnksIChQQVJUSUFMIHN1bSh0MV8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8xLnkgPSB0MV8xLngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AyIHQyXzEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55CisgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8x LngsIChQQVJUSUFMIHN1bSh0MV8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgUEFSVElBTCBzdW0odDFfMS55KSwg UEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLnksIHQxXzEueAorICAgICAgICAgLT4gIEZp bmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCBzdW0o dDFfMi55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMi55CisgICAg ICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzIueSwgKFBBUlRJQUwgc3VtKHQxXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueSA9IHQxXzIueCkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDMgdDJfMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwg KFBBUlRJQUwgc3VtKHQxXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBQQVJUSUFMIHN1bSh0MV8yLnkpLCBQQVJU SUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMyB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueSwgdDFfMi54CisoNDkgcm93cykKKworU0VMRUNU IHQyLnksIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJf YWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueSBPUkRFUiBCWSB0Mi55 OworIHkgIHwgc3VtICB8IGNvdW50IAorLS0tLSstLS0tLS0rLS0tLS0tLQorICAwIHwgIDUwMCB8 ICAgMTAwCisgIDYgfCAxMTAwIHwgICAxMDAKKyAxMiB8ICA3MDAgfCAgIDEwMAorIDE4IHwgMTMw MCB8ICAgMTAwCisgMjQgfCAgOTAwIHwgICAxMDAKKyg1IHJvd3MpCisKKy0tIFdoZW4gR1JPVVAg QlkgY2xhdXNlIGRvZXMgbm90IG1hdGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1l ZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QgdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdl cl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklORyBhdmco dDEueCkgPiAxMCBPUkRFUiBCWSB0Mi54OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBPdXRwdXQ6IHQyLngsIChzdW0odDEueCkpLCAo Y291bnQoKikpCisgICBTb3J0IEtleTogdDIueAorICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgIE91dHB1dDogdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKQorICAgICAgICAg R3JvdXAgS2V5OiB0Mi54CisgICAgICAgICBGaWx0ZXI6IChhdmcodDEueCkgPiAnMTAnOjpudW1l cmljKQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIChQQVJUSUFMIHN1bSh0MV8xLngp KSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMS54KSkKKyAgICAgICAgICAg ICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueSA9IHQxXzEueCkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDEgdDJfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIHQyXzEueQorICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFf MS54LCAoUEFSVElBTCBzdW0odDFfMS54KSksIChQQVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwg YXZnKHQxXzEueCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEu eCwgUEFSVElBTCBzdW0odDFfMS54KSwgUEFSVElBTCBjb3VudCgqKSwgUEFSVElBTCBhdmcodDFf MS54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjFfcDEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCAoUEFSVElBTCBzdW0odDFfMi54KSksIChQ QVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwgYXZnKHQxXzIueCkpCisgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0Ml8yLnkgPSB0MV8yLngpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AyIHQyXzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCB0Ml8yLnkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwg KFBBUlRJQUwgc3VtKHQxXzIueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0 MV8yLngpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIFBB UlRJQUwgc3VtKHQxXzIueCksIFBBUlRJQUwgY291bnQoKiksIFBBUlRJQUwgYXZnKHQxXzIueCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWIxX3AyIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgKFBBUlRJQUwgc3VtKHQxXzMueCkpLCAoUEFSVElB TCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0MV8zLngpKQorICAgICAgICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDJfMy55ID0gdDFfMy54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMyB0Ml8zCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgdDJfMy55CisgICAgICAgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIChQQVJU SUFMIHN1bSh0MV8zLngpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMy54 KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCBQQVJUSUFM IHN1bSh0MV8zLngpLCBQQVJUSUFMIGNvdW50KCopLCBQQVJUSUFMIGF2Zyh0MV8zLngpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzMueAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiMV9wMyB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzMueAorKDQ0IHJvd3MpCisKK1NFTEVDVCB0Mi54LCBzdW0odDEueCksIGNvdW50KCop IEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0 Mi55IEdST1VQIEJZIHQyLnggSEFWSU5HIGF2Zyh0MS54KSA+IDEwIE9SREVSIEJZIHQyLng7Cisg eCAgfCBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLSstLS0tLS0tCisgIDIgfCAgNjAwIHwgICAg NTAKKyAgNCB8IDEyMDAgfCAgICA1MAorICA4IHwgIDkwMCB8ICAgIDUwCisgMTIgfCAgNjAwIHwg ICAgNTAKKyAxNCB8IDEyMDAgfCAgICA1MAorIDE4IHwgIDkwMCB8ICAgIDUwCisoNiByb3dzKQor CistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tIGZ1bGwg YWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54LCBz dW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFi MSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54 IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBP dXRwdXQ6IHQxLngsIChzdW0oKHQyLnkgKyB0My55KSkpCisgICBTb3J0IEtleTogdDEueAorICAg LT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgIE91dHB1dDogdDEueCwgc3VtKCh0Mi55ICsgdDMueSkpCisgICAgICAgICAgICAgICBH cm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKQorICAg ICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEueCA9IHQyLngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQxCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLngsIHQzLngs IChQQVJUSUFMIHN1bSgodDIueSArIHQzLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDIueCwgdDMueCwgUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54LCB0My55LCB0My54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi54ID0gdDMueCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgdDIueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDMueSwgdDMueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiMV9wMSB0MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIHN1bSgodDJfMS55ICsgdDNfMS55 KSkKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwg c3VtKCh0Ml8xLnkgKyB0M18xLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQxXzEueCA9IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCAoUEFSVElBTCBzdW0oKHQy XzEueSArIHQzXzEueSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8xLngsIHQzXzEueCwgUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9 IHQzXzEueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDJfMQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAg ICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFf Mi54LCBzdW0oKHQyXzIueSArIHQzXzIueSkpCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQx XzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkpCisgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngs IHQzXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCB0M18yLngsIFBBUlRJQUwgc3VtKCh0Ml8y LnkgKyB0M18yLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0 Ml8yLngsIHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0Ml8yLnggPSB0M18yLngpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3Az IHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQzXzIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDNfMi55LCB0M18yLngKKyg3MCByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0 My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEu eCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0 MS54IE9SREVSIEJZIHQxLng7CisgeCAgfCAgc3VtICAKKy0tLS0rLS0tLS0tLQorICAwIHwgMTAw MDAKKyAgMiB8IDE0MDAwCisgIDQgfCAxODAwMAorICA2IHwgMjIwMDAKKyAgOCB8IDI2MDAwCisg MTAgfCAxMDAwMAorIDEyIHwgMTQwMDAKKyAxNCB8IDE4MDAwCisgMTYgfCAyMjAwMAorIDE4IHwg MjYwMDAKKyAyMCB8IDEwMDAwCisgMjIgfCAxNDAwMAorIDI0IHwgMTgwMDAKKyAyNiB8IDIyMDAw CisgMjggfCAyNjAwMAorKDE1IHJvd3MpCisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK1NFVCBl bmFibGVfaGFzaGFnZyBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFn ZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0 Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg RmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDMueSwgc3VtKCh0Mi55ICsgdDMu eSkpCisgICBHcm91cCBLZXk6IHQzLnkKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQz LnksIChQQVJUSUFMIHN1bSgodDIueSArIHQzLnkpKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0My55 CisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgKFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0 M18xLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9IHQxXzEu eCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS55LCB0M18xLngsIFBB UlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg R3JvdXAgS2V5OiB0Ml8xLngsIHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgSW5jcmVtZW50YWwgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Ml8xLngsIHQzXzEueQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHJlc29ydGVkIEtleTogdDJfMS54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0Ml8x LnggPSB0M18xLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU29ydCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0Ml8x CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU29ydCBLZXk6IHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9w MSB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDFf MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNf Mi55LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKQorICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDJfMi54ID0gdDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4g IFBhcnRpYWwgR3JvdXBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMi54LCB0M18yLnksIHQzXzIueCwgUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueCwgdDNfMi55LCB0 M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54LCB0 M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6 IHQyXzIueCwgdDNfMi55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzb3J0 ZWQgS2V5OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBNZXJn ZSBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzIueSwgdDJfMi54LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTWVyZ2UgQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDJfMi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDNfMi54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQzXzIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIChQQVJUSUFMIHN1bSgodDJfMy55ICsg dDNfMy55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0MV8z LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueSwgdDNfMy54LCBQ QVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IEdyb3VwIEtleTogdDJfMy54LCB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngsIHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDJfMy54LCB0M18zLnkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFByZXNvcnRlZCBLZXk6IHQyXzMueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIE1lcmdlIEpvaW4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngsIHQzXzMueSwgdDNfMy54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDJf My54ID0gdDNfMy54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNvcnQgS2V5OiB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDJf MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNvcnQgS2V5OiB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFf cDMgdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQx XzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisoODgg cm93cykKKworU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2dfdGFi MSB0MSBKT0lOIGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdn X3RhYjEgdDMgT04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55OworIHkg IHwgIHN1bSAgCistLS0tKy0tLS0tLS0KKyAgMCB8ICA3NTAwCisgIDIgfCAxMzUwMAorICA0IHwg MTk1MDAKKyAgNiB8IDI1NTAwCisgIDggfCAzMTUwMAorIDEwIHwgMjI1MDAKKyAxMiB8IDI4NTAw CisgMTQgfCAzNDUwMAorIDE2IHwgNDA1MDAKKyAxOCB8IDQ2NTAwCisoMTAgcm93cykKKworUkVT RVQgZW5hYmxlX2hhc2hhZ2c7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWIxOworRFJPUCBUQUJM RSBlYWdlcl9hZ2dfdGFiMjsKKy0tCistLSBUZXN0IHdpdGggbXVsdGktbGV2ZWwgcGFydGl0aW9u aW5nIHNjaGVtZQorLS0KK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sKHggaW50LCB5IGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxf cDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo MTApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDIgUEFSVElUSU9OIE9GIGVhZ2Vy X2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKSBQQVJUSVRJT04gQlkgUkFO R0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSBQQVJUSVRJT04gT0Yg ZWFnZXJfYWdnX3RhYl9tbF9wMiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpOworQ1JFQVRF IFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDJfczIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJf bWxfcDIgRk9SIFZBTFVFUyBGUk9NICgxNSkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9h Z2dfdGFiX21sX3AzIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBWQUxVRVMgRlJP TSAoMjApIFRPICgzMCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2Vy X2FnZ190YWJfbWxfcDNfczEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZB TFVFUyBGUk9NICgyMCkgVE8gKDI1KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3Az X3MyIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AzIEZPUiBWQUxVRVMgRlJPTSAoMjUp IFRPICgzMCk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiX21sIFNFTEVDVCBpICUgMzAsIGkg JSAzMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworQU5BTFlaRSBlYWdlcl9hZ2df dGFiX21sOworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlv biBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKQorU0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2df dGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBC WSB0MS54IE9SREVSIEJZIHQxLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEueCwgKHN1 bSh0Mi55KSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54CisgICAtPiAgQXBwZW5kCisg ICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0 OiB0MS54LCBzdW0odDIueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQx LngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKHQyLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS54ID0gdDIueCkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54CisgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi54LCAoUEFS VElBTCBzdW0odDIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDIueCwgUEFSVElBTCBzdW0odDIueSksIFBBUlRJQUwgY291bnQo KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiX21sX3AxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyLnksIHQyLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRl CisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgc3VtKHQyXzEueSksIGNvdW50KCopCisg ICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIChQQVJUSUFMIHN1bSh0 Ml8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0MV8xLnggPSB0Ml8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDFfMQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgKFBBUlRJQUwgc3VtKHQy XzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMS54LCBQQVJUSUFMIHN1bSh0Ml8xLnkpLCBQQVJUSUFMIGNvdW50KCopCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiX21sX3AyX3MxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdn cmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgc3VtKHQyXzIueSksIGNvdW50 KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzIueAorICAgICAgICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIChQQVJUSUFM IHN1bSh0Ml8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBI YXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDFfMgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgKFBBUlRJQUwg c3VtKHQyXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMi54LCBQQVJUSUFMIHN1bSh0Ml8yLnkpLCBQQVJUSUFMIGNvdW50 KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBI YXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueCwgc3VtKHQyXzMueSks IGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzMueAorICAgICAgICAgICAg ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIChQ QVJUSUFMIHN1bSh0Ml8zLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDFfMworICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgKFBB UlRJQUwgc3VtKHQyXzMueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCBQQVJUSUFMIHN1bSh0Ml8zLnkpLCBQQVJUSUFM IGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQy XzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgIC0+ICBGaW5h bGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueCwgc3VtKHQy XzQueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzQueAorICAgICAg ICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80 LngsIChQQVJUSUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDFfNAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQu eCwgKFBBUlRJQUwgc3VtKHQyXzQueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC54LCBQQVJUSUFMIHN1bSh0Ml80LnkpLCBQ QVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQyXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQyXzQKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80LngKKyg3OSByb3dzKQor CitTRUxFQ1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwg dDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLngg T1JERVIgQlkgdDEueDsKKyB4ICB8ICBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLS0rLS0tLS0t LQorICAwIHwgICAgIDAgfCAgMTA4OQorICAxIHwgIDExNTYgfCAgMTE1NgorICAyIHwgIDIzMTIg fCAgMTE1NgorICAzIHwgIDM0NjggfCAgMTE1NgorICA0IHwgIDQ2MjQgfCAgMTE1NgorICA1IHwg IDU3ODAgfCAgMTE1NgorICA2IHwgIDY5MzYgfCAgMTE1NgorICA3IHwgIDgwOTIgfCAgMTE1Ngor ICA4IHwgIDkyNDggfCAgMTE1NgorICA5IHwgMTA0MDQgfCAgMTE1NgorIDEwIHwgMTE1NjAgfCAg MTE1NgorIDExIHwgMTE5NzkgfCAgMTA4OQorIDEyIHwgMTMwNjggfCAgMTA4OQorIDEzIHwgMTQx NTcgfCAgMTA4OQorIDE0IHwgMTUyNDYgfCAgMTA4OQorIDE1IHwgMTYzMzUgfCAgMTA4OQorIDE2 IHwgMTc0MjQgfCAgMTA4OQorIDE3IHwgMTg1MTMgfCAgMTA4OQorIDE4IHwgMTk2MDIgfCAgMTA4 OQorIDE5IHwgMjA2OTEgfCAgMTA4OQorIDIwIHwgMjE3ODAgfCAgMTA4OQorIDIxIHwgMjI4Njkg fCAgMTA4OQorIDIyIHwgMjM5NTggfCAgMTA4OQorIDIzIHwgMjUwNDcgfCAgMTA4OQorIDI0IHwg MjYxMzYgfCAgMTA4OQorIDI1IHwgMjcyMjUgfCAgMTA4OQorIDI2IHwgMjgzMTQgfCAgMTA4OQor IDI3IHwgMjk0MDMgfCAgMTA4OQorIDI4IHwgMzA0OTIgfCAgMTA4OQorIDI5IHwgMzE1ODEgfCAg MTA4OQorKDMwIHJvd3MpCisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIGRvZXMgbm90IG1hdGNo OyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueSwgc3VtKHQyLnkpLCBjb3Vu dCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9O IHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLnkgT1JERVIgQlkgdDEueTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAor ICAgT3V0cHV0OiB0MS55LCAoc3VtKHQyLnkpKSwgKGNvdW50KCopKQorICAgU29ydCBLZXk6IHQx LnkKKyAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxLnks IHN1bSh0Mi55KSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDEueQorICAgICAgICAg LT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8xLnksIChQQVJUSUFMIHN1bSh0Ml8xLnkpKSwgKFBBUlRJQUwgY291 bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLnggPSB0Ml8xLngp CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWJfbWxfcDEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLnks IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfMS54LCAoUEFSVElBTCBzdW0odDJfMS55KSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngs IFBBUlRJQUwgc3VtKHQyXzEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDJf MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnks IHQyXzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8yLnksIChQQVJUSUFMIHN1bSh0Ml8yLnkpKSwgKFBBUlRJQUwgY291bnQo KikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDJfczEgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLnks IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfMi54LCAoUEFSVElBTCBzdW0odDJfMi55KSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngs IFBBUlRJQUwgc3VtKHQyXzIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEg dDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8y LnksIHQyXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8zLnksIChQQVJUSUFMIHN1bSh0Ml8zLnkpKSwgKFBBUlRJQUwgY291 bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngp CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWJfbWxfcDJfczIgdDFfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8z LnksIHQxXzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCAoUEFSVElBTCBzdW0odDJfMy55KSksIChQQVJU SUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8z LngsIFBBUlRJQUwgc3VtKHQyXzMueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJf czIgdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MV80LnksIChQQVJUSUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80 LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWJfbWxfcDNfczEgdDFfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV80LnksIHQxXzQueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC54LCAoUEFSVElBTCBzdW0odDJfNC55KSksIChQ QVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml80LngsIFBBUlRJQUwgc3VtKHQyXzQueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNC54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxf cDNfczEgdDJfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml80LnksIHQyXzQueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0MV81LnksIChQQVJUSUFMIHN1bSh0Ml81LnkpKSwgKFBBUlRJ QUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV81LnggPSB0 Ml81LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWJfbWxfcDNfczIgdDFfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV81LnksIHQxXzUueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNS54LCAoUEFSVElBTCBzdW0odDJfNS55KSks IChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRp YWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml81LngsIFBBUlRJQUwgc3VtKHQyXzUueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNS54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDNfczIgdDJfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml81LnksIHQyXzUueAorKDY3IHJvd3MpCisKK1NFTEVDVCB0MS55LCBzdW0odDIueSks IGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwg dDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueSBPUkRFUiBCWSB0MS55OworIHkgIHwgIHN1 bSAgfCBjb3VudCAKKy0tLS0rLS0tLS0tLSstLS0tLS0tCisgIDAgfCAgICAgMCB8ICAxMDg5Cisg IDEgfCAgMTE1NiB8ICAxMTU2CisgIDIgfCAgMjMxMiB8ICAxMTU2CisgIDMgfCAgMzQ2OCB8ICAx MTU2CisgIDQgfCAgNDYyNCB8ICAxMTU2CisgIDUgfCAgNTc4MCB8ICAxMTU2CisgIDYgfCAgNjkz NiB8ICAxMTU2CisgIDcgfCAgODA5MiB8ICAxMTU2CisgIDggfCAgOTI0OCB8ICAxMTU2CisgIDkg fCAxMDQwNCB8ICAxMTU2CisgMTAgfCAxMTU2MCB8ICAxMTU2CisgMTEgfCAxMTk3OSB8ICAxMDg5 CisgMTIgfCAxMzA2OCB8ICAxMDg5CisgMTMgfCAxNDE1NyB8ICAxMDg5CisgMTQgfCAxNTI0NiB8 ICAxMDg5CisgMTUgfCAxNjMzNSB8ICAxMDg5CisgMTYgfCAxNzQyNCB8ICAxMDg5CisgMTcgfCAx ODUxMyB8ICAxMDg5CisgMTggfCAxOTYwMiB8ICAxMDg5CisgMTkgfCAyMDY5MSB8ICAxMDg5Cisg MjAgfCAyMTc4MCB8ICAxMDg5CisgMjEgfCAyMjg2OSB8ICAxMDg5CisgMjIgfCAyMzk1OCB8ICAx MDg5CisgMjMgfCAyNTA0NyB8ICAxMDg5CisgMjQgfCAyNjEzNiB8ICAxMDg5CisgMjUgfCAyNzIy NSB8ICAxMDg5CisgMjYgfCAyODMxNCB8ICAxMDg5CisgMjcgfCAyOTQwMyB8ICAxMDg5CisgMjgg fCAzMDQ5MiB8ICAxMDg5CisgMjkgfCAzMTU4MSB8ICAxMDg5CisoMzAgcm93cykKKworLS0gQ2hl Y2sgd2l0aCBlYWdlciBhZ2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCistLSBmdWxsIGFnZ3JlZ2F0 aW9uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkg KyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdn X3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIu eCA9IHQzLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEueCwgKHN1bSgo dDIueSArIHQzLnkpKSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54CisgICAtPiAgQXBw ZW5kCisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg T3V0cHV0OiB0MS54LCBzdW0oKHQyLnkgKyB0My55KSksIGNvdW50KCopCisgICAgICAgICAgICAg ICBHcm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKSwg KFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS54 ID0gdDIueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYl9tbF9wMSB0MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Mi54LCB0My54LCAoUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkpLCAo UEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFs IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDIueCwgdDMueCwgUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSksIFBBUlRJQUwgY291bnQoKikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54LCB0My55LCB0My54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi54ID0g dDMueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWJfbWxfcDEgdDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDMueSwgdDMueAorICAgICAgICAgLT4gIEZpbmFsaXpl IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBzdW0oKHQyXzEu eSArIHQzXzEueSkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngK KyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDFfMS54LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpKSwgKFBBUlRJQUwgY291 bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLnggPSB0Ml8xLngp CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWJfbWxfcDJfczEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8x LngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEu eSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg UGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzEueCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSksIFBB UlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtl eTogdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwg dDJfMS54LCB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAodDJfMS54ID0gdDNfMS54KQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21s X3AyX3MxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxf cDJfczEgdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hB Z2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBzdW0oKHQyXzIueSArIHQz XzIueSkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFf Mi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwgY291bnQoKikp CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxf cDJfczIgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzIueCwgdDNfMi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKSwg KFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlh bCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzIueCwgdDNfMi54LCBQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSksIFBBUlRJQUwg Y291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJf Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54 LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDJfMi54ID0gdDNfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3My IHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIg dDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0M18yLnksIHQzXzIueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCBzdW0oKHQyXzMueSArIHQzXzMueSkp LCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8zLngKKyAgICAgICAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCAo UEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEg dDFfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzMueCwgdDNfMy54LCAoUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJ QUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMu eCwgdDNfMy54LCBQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSksIFBBUlRJQUwgY291bnQo KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54LCB0M18z LnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDJfMy54ID0gdDNfMy54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQyXzMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf My55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDNfMwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0M18zLnksIHQzXzMueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgICAgICAgIE91dHB1dDogdDFfNC54LCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBjb3Vu dCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV80LngKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC54LCAoUEFSVElB TCBzdW0oKHQyXzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDFfNAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQu eCwgdDNfNC54LCAoUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291 bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVn YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgdDNf NC54LCBQQVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSksIFBBUlRJQUwgY291bnQoKikKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNC54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54LCB0M180LnksIHQz XzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo dDJfNC54ID0gdDNfNC54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQyXzQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0 Ml80LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzQu eSwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDNfNAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180 LnksIHQzXzQueAorKDExNCByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSwg Y291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0 MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLngg R1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworIHggIHwgICBzdW0gICB8IGNvdW50IAorLS0t LSstLS0tLS0tLS0rLS0tLS0tLQorICAwIHwgICAgICAgMCB8IDM1OTM3CisgIDEgfCAgIDc4NjA4 IHwgMzkzMDQKKyAgMiB8ICAxNTcyMTYgfCAzOTMwNAorICAzIHwgIDIzNTgyNCB8IDM5MzA0Cisg IDQgfCAgMzE0NDMyIHwgMzkzMDQKKyAgNSB8ICAzOTMwNDAgfCAzOTMwNAorICA2IHwgIDQ3MTY0 OCB8IDM5MzA0CisgIDcgfCAgNTUwMjU2IHwgMzkzMDQKKyAgOCB8ICA2Mjg4NjQgfCAzOTMwNAor ICA5IHwgIDcwNzQ3MiB8IDM5MzA0CisgMTAgfCAgNzg2MDgwIHwgMzkzMDQKKyAxMSB8ICA3OTA2 MTQgfCAzNTkzNworIDEyIHwgIDg2MjQ4OCB8IDM1OTM3CisgMTMgfCAgOTM0MzYyIHwgMzU5MzcK KyAxNCB8IDEwMDYyMzYgfCAzNTkzNworIDE1IHwgMTA3ODExMCB8IDM1OTM3CisgMTYgfCAxMTQ5 OTg0IHwgMzU5MzcKKyAxNyB8IDEyMjE4NTggfCAzNTkzNworIDE4IHwgMTI5MzczMiB8IDM1OTM3 CisgMTkgfCAxMzY1NjA2IHwgMzU5MzcKKyAyMCB8IDE0Mzc0ODAgfCAzNTkzNworIDIxIHwgMTUw OTM1NCB8IDM1OTM3CisgMjIgfCAxNTgxMjI4IHwgMzU5MzcKKyAyMyB8IDE2NTMxMDIgfCAzNTkz NworIDI0IHwgMTcyNDk3NiB8IDM1OTM3CisgMjUgfCAxNzk2ODUwIHwgMzU5MzcKKyAyNiB8IDE4 Njg3MjQgfCAzNTkzNworIDI3IHwgMTk0MDU5OCB8IDM1OTM3CisgMjggfCAyMDEyNDcyIHwgMzU5 MzcKKyAyOSB8IDIwODQzNDYgfCAzNTkzNworKDMwIHJvd3MpCisKKy0tIHBhcnRpYWwgYWdncmVn YXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0odDIu eSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9h Z2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0 Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91 dHB1dDogdDMueSwgKHN1bSgodDIueSArIHQzLnkpKSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5 OiB0My55CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0 My55LCBzdW0oKHQyLnkgKyB0My55KSksIGNvdW50KCopCisgICAgICAgICBHcm91cCBLZXk6IHQz LnkKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCAoUEFSVElBTCBzdW0oKHQyXzEueSAr IHQzXzEueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0MV8xLnggPSB0Ml8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDFfMQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS55LCB0M18xLngs IChQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0M18xLnksIHQzXzEu eCwgUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueCwgdDNfMS55LCB0 M18xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8x LngsIHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0Ml8xLnggPSB0M18xLngpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEg dDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0M18x CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18y LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDFfMi54ID0gdDJfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueSwgdDNfMi54LCAo UEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgdDNfMi55LCB0M18yLngs IFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8yLngsIHQzXzIueSwgdDNf Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54 LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDJfMi54ID0gdDNfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3Mx IHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEg dDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIChQQVJUSUFMIHN1bSgodDJfMy55ICsg dDNfMy55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHQxXzMueCA9IHQyXzMueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0MV8zCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxXzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCB0M18zLnksIHQzXzMu eCwgKFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueSwgdDNf My54LCBQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSksIFBBUlRJQUwgY291bnQoKikKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54LCB0M18zLnks IHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQy XzMueCwgdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHQyXzMueCA9IHQzXzMueCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9w Ml9zMiB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Ay X3MyIHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNC55LCAoUEFSVElBTCBzdW0oKHQyXzQu eSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBI YXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDFfNAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgdDNfNC55LCB0 M180LngsIChQQVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSkpLCAoUEFSVElBTCBjb3VudCgq KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC54LCB0M180Lnks IHQzXzQueCwgUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBQQVJUSUFMIGNvdW50KCop CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzQueCwgdDNf NC55LCB0M180LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55 LCB0Ml80LngsIHQzXzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0Ml80LnggPSB0M180LngpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDNfczEgdDJfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml80LnksIHQyXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDNfNC55LCB0M180LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wM19zMSB0M180CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzXzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzUueSwgKFBBUlRJQUwgc3VtKCh0 Ml81LnkgKyB0M181LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDFfNS54ID0gdDJfNS54KQorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQxXzUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNS54CisgICAgICAgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81LngsIHQzXzUu eSwgdDNfNS54LCAoUEFSVElBTCBzdW0oKHQyXzUueSArIHQzXzUueSkpKSwgKFBBUlRJQUwgY291 bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVn YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzUueCwgdDNf NS55LCB0M181LngsIFBBUlRJQUwgc3VtKCh0Ml81LnkgKyB0M181LnkpKSwgUEFSVElBTCBjb3Vu dCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml81Lngs IHQzXzUueSwgdDNfNS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzUueSwgdDJfNS54LCB0M181LnksIHQzXzUueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfNS54ID0gdDNfNS54KQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiX21sX3AzX3MyIHQyXzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfNS55LCB0Ml81LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQzXzUueSwgdDNfNS54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWJfbWxfcDNfczIgdDNfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M181LnksIHQzXzUueAorKDEwMiByb3dzKQorCitTRUxFQ1Qg dDMueSwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQx IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190 YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55OworIHkg IHwgICBzdW0gICB8IGNvdW50IAorLS0tLSstLS0tLS0tLS0rLS0tLS0tLQorICAwIHwgICAgICAg MCB8IDM1OTM3CisgIDEgfCAgIDc4NjA4IHwgMzkzMDQKKyAgMiB8ICAxNTcyMTYgfCAzOTMwNAor ICAzIHwgIDIzNTgyNCB8IDM5MzA0CisgIDQgfCAgMzE0NDMyIHwgMzkzMDQKKyAgNSB8ICAzOTMw NDAgfCAzOTMwNAorICA2IHwgIDQ3MTY0OCB8IDM5MzA0CisgIDcgfCAgNTUwMjU2IHwgMzkzMDQK KyAgOCB8ICA2Mjg4NjQgfCAzOTMwNAorICA5IHwgIDcwNzQ3MiB8IDM5MzA0CisgMTAgfCAgNzg2 MDgwIHwgMzkzMDQKKyAxMSB8ICA3OTA2MTQgfCAzNTkzNworIDEyIHwgIDg2MjQ4OCB8IDM1OTM3 CisgMTMgfCAgOTM0MzYyIHwgMzU5MzcKKyAxNCB8IDEwMDYyMzYgfCAzNTkzNworIDE1IHwgMTA3 ODExMCB8IDM1OTM3CisgMTYgfCAxMTQ5OTg0IHwgMzU5MzcKKyAxNyB8IDEyMjE4NTggfCAzNTkz NworIDE4IHwgMTI5MzczMiB8IDM1OTM3CisgMTkgfCAxMzY1NjA2IHwgMzU5MzcKKyAyMCB8IDE0 Mzc0ODAgfCAzNTkzNworIDIxIHwgMTUwOTM1NCB8IDM1OTM3CisgMjIgfCAxNTgxMjI4IHwgMzU5 MzcKKyAyMyB8IDE2NTMxMDIgfCAzNTkzNworIDI0IHwgMTcyNDk3NiB8IDM1OTM3CisgMjUgfCAx Nzk2ODUwIHwgMzU5MzcKKyAyNiB8IDE4Njg3MjQgfCAzNTkzNworIDI3IHwgMTk0MDU5OCB8IDM1 OTM3CisgMjggfCAyMDEyNDcyIHwgMzU5MzcKKyAyOSB8IDIwODQzNDYgfCAzNTkzNworKDMwIHJv d3MpCisKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zeXN2aWV3cy5vdXQKaW5kZXggZmFkN2ZjM2E3ZS4uMWRkYTY5ZTdjMiAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE1MCw2ICsxNTAsNyBAQCBzZWxlY3QgbmFt ZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0KICBlbmFibGVfYXN5bmNf YXBwZW5kICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9iaXRtYXBzY2FuICAgICAgICAgICAgICB8 IG9uCisgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSAgICAgICAgIHwgb2ZmCiAgZW5hYmxlX2dhdGhl cm1lcmdlICAgICAgICAgICAgIHwgb24KICBlbmFibGVfZ3JvdXBfYnlfcmVvcmRlcmluZyAgICAg fCBvbgogIGVuYWJsZV9oYXNoYWdnICAgICAgICAgICAgICAgICB8IG9uCkBAIC0xNzAsNyArMTcx LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxp a2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5h YmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAg ICAgICAgICAgfCBvbgotKDIyIHJvd3MpCisoMjMgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5 cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBv aW50CiAtLSBtYXkgYmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNp bmNlIGxhc3QgcG9zdG1hc3RlciBzdGFydC4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv cGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmlu ZGV4IDRmMzgxMDRiYTAuLjdiZmYzNTgzMTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv cGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZQpAQCAtMTE5LDcgKzExOSw3IEBAIHRlc3Q6IHBsYW5jYWNoZSBsaW1pdCBwbHBnc3FsIGNvcHky IHRlbXAgZG9tYWluIHJhbmdlZnVuY3MgcHJlcGFyZSBjb252ZXJzaW9uIHRyCiAjIFRoZSBzdGF0 cyB0ZXN0IHJlc2V0cyBzdGF0cywgc28gbm90aGluZyBlbHNlIG5lZWRpbmcgc3RhdHMgYWNjZXNz IGNhbiBiZSBpbgogIyB0aGlzIGdyb3VwLgogIyAtLS0tLS0tLS0tCi10ZXN0OiBwYXJ0aXRpb25f am9pbiBwYXJ0aXRpb25fcHJ1bmUgcmVsb3B0aW9ucyBoYXNoX3BhcnQgaW5kZXhpbmcgcGFydGl0 aW9uX2FnZ3JlZ2F0ZSBwYXJ0aXRpb25faW5mbyB0dXBsZXNvcnQgZXhwbGFpbiBjb21wcmVzc2lv biBtZW1vaXplIHN0YXRzIHByZWRpY2F0ZQordGVzdDogcGFydGl0aW9uX2pvaW4gcGFydGl0aW9u X3BydW5lIHJlbG9wdGlvbnMgaGFzaF9wYXJ0IGluZGV4aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUg cGFydGl0aW9uX2luZm8gdHVwbGVzb3J0IGV4cGxhaW4gY29tcHJlc3Npb24gbWVtb2l6ZSBzdGF0 cyBwcmVkaWNhdGUgZWFnZXJfYWdncmVnYXRlCiAKICMgZXZlbnRfdHJpZ2dlciBkZXBlbmRzIG9u IGNyZWF0ZV9hbSBhbmQgY2Fubm90IHJ1biBjb25jdXJyZW50bHkgd2l0aAogIyBhbnkgdGVzdCB0 aGF0IHJ1bnMgRERMCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9lYWdlcl9hZ2dy ZWdhdGUuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40MDUwZTRkZjQ0Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbApAQCAtMCww ICsxLDE5MiBAQAorLS0KKy0tIEVBR0VSIEFHR1JFR0FUSU9OCistLSBUZXN0IHdlIGNhbiBwdXNo IGFnZ3JlZ2F0aW9uIGRvd24gYmVsb3cgam9pbgorLS0KKworLS0gRW5hYmxlIGVhZ2VyIGFnZ3Jl Z2F0aW9uLCB3aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9lYWdlcl9h Z2dyZWdhdGUgVE8gb247CisKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdDEgKGEgaW50LCBiIGlu dCwgYyBkb3VibGUgcHJlY2lzaW9uKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdDIgKGEgaW50 LCBiIGludCwgYyBkb3VibGUgcHJlY2lzaW9uKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdDMg KGEgaW50LCBiIGludCwgYyBkb3VibGUgcHJlY2lzaW9uKTsKKworSU5TRVJUIElOVE8gZWFnZXJf YWdnX3QxIFNFTEVDVCBpLCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApaTsKK0lO U0VSVCBJTlRPIGVhZ2VyX2FnZ190MiBTRUxFQ1QgaSwgaSUxMCwgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwKWk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDMgU0VMRUNUIGklMTAsIGkl MTAsIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClpOworCitBTkFMWVpFIGVhZ2VyX2Fn Z190MTsKK0FOQUxZWkUgZWFnZXJfYWdnX3QyOworQU5BTFlaRSBlYWdlcl9hZ2dfdDM7CisKKwor LS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gb3ZlciBiYXNlIHJlbAorLS0KKworLS0gUGVy Zm9ybSBzY2FuIG9mIGEgdGFibGUsIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRo ZSBvdGhlciB0YWJsZQorLS0gYW5kIGZpbmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9h Z2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEu YSBPUkRFUiBCWSB0MS5hOworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190 MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9S REVSIEJZIHQxLmE7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcgYWdncmVnYXRp b24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBl YWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5h OworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2Vy X2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisK K1JFU0VUIGVuYWJsZV9oYXNoYWdnOworCisKKy0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9u IG92ZXIgam9pbiByZWwKKy0tCisKKy0tIFBlcmZvcm0gam9pbiBvZiB0YWJsZXMsIGFnZ3JlZ2F0 ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0gYW5kIGZpbmFsaXpl IHRoZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0 MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdn X3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5h IEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQz LmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0 Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmEgT1JE RVIgQlkgdDEuYTsKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlv bgorU0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9mZjsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEg Sk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMg T04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworU0VMRUNUIHQxLmEs IGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIg dDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JP VVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworCitSRVNFVCBlbmFibGVfaGFzaGFnZzsKKworCist LQorLS0gVGVzdCB0aGF0IGVhZ2VyIGFnZ3JlZ2F0aW9uIHdvcmtzIGZvciBvdXRlciBqb2luCist LQorCistLSBFbnN1cmUgYWdncmVnYXRpb24gY2FuIGJlIHB1c2hlZCBkb3duIHRvIHRoZSBub24t bnVsbGFibGUgc2lkZQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEs IGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBSSUdIVCBKT0lOIGVhZ2VyX2FnZ190MiB0 MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CitTRUxFQ1QgdDEu YSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3Qy IHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKworLS0gRW5z dXJlIGFnZ3JlZ2F0aW9uIGNhbm5vdCBiZSBwdXNoZWQgZG93biB0byB0aGUgbnVsbGFibGUgc2lk ZQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLmIsIGF2Zyh0Mi5jKSBG Uk9NIGVhZ2VyX2FnZ190MSB0MSBMRUZUIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0 Mi5iIEdST1VQIEJZIHQyLmIgT1JERVIgQlkgdDIuYjsKK1NFTEVDVCB0Mi5iLCBhdmcodDIuYykg RlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0g dDIuYiBHUk9VUCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7CisKKworLS0KKy0tIFRlc3QgdGhhdCBl YWdlciBhZ2dyZWdhdGlvbiB3b3JrcyBmb3IgcGFyYWxsZWwgcGxhbnMKKy0tCisKK1NFVCBwYXJh bGxlbF9zZXR1cF9jb3N0PTA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdD0wOworU0VUIG1pbl9w YXJhbGxlbF90YWJsZV9zY2FuX3NpemU9MDsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyPTQ7CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBh dmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEu YiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworU0VMRUNUIHQxLmEsIGF2Zyh0 Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0g dDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisKK1JFU0VUIHBhcmFsbGVsX3NldHVw X2Nvc3Q7CitSRVNFVCBwYXJhbGxlbF90dXBsZV9jb3N0OworUkVTRVQgbWluX3BhcmFsbGVsX3Rh YmxlX3NjYW5fc2l6ZTsKK1JFU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CisK KworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdDE7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RS T1AgVEFCTEUgZWFnZXJfYWdnX3QzOworCisKKy0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9u IGZvciBwYXJ0aXRpb253aXNlIGpvaW4KKy0tCisKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGFn Z3JlZ2F0ZSwgd2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0 aW9ud2lzZV9hZ2dyZWdhdGUgVE8gdHJ1ZTsKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGpvaW4s IHdoaWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJsZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vf am9pbiBUTyB0cnVlOworCitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjEoeCBpbnQsIHkgaW50 KSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDEg UEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsK K0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMV9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3Rh YjEgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2df dGFiMV9wMyBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgyMCkg VE8gKDMwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMih4IGludCwgeSBpbnQpIFBBUlRJ VElPTiBCWSBSQU5HRSh5KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMSBQQVJUSVRJ T04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTApOworQ1JFQVRF IFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AyIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1Ig VkFMVUVTIEZST00gKDEwKSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3Az IFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMzAp OworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3RhYjEgU0VMRUNUIGkgJSAzMCwgaSAlIDIwIEZST00g Z2VuZXJhdGVfc2VyaWVzKDAsIDI5OSwgMikgaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIy IFNFTEVDVCBpICUgMjAsIGkgJSAzMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLCAyOTksIDMpIGk7 CisKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYjE7CitBTkFMWVpFIGVhZ2VyX2FnZ190YWIyOworCist LSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRjaGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZv cm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBl YWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZ IHQxLng7CitTRUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190 YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0MS54 IE9SREVSIEJZIHQxLng7CisKKy0tIEdST1VQIEJZIGhhdmluZyBvdGhlciBtYXRjaGluZyBrZXkK K0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0Mi55LCBzdW0odDEueSksIGNv dW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQx LnggPSB0Mi55IEdST1VQIEJZIHQyLnkgT1JERVIgQlkgdDIueTsKK1NFTEVDVCB0Mi55LCBzdW0o dDEueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQy IFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQyLnkgT1JERVIgQlkgdDIueTsKKworLS0gV2hl biBHUk9VUCBCWSBjbGF1c2UgZG9lcyBub3QgbWF0Y2g7IHBhcnRpYWwgYWdncmVnYXRpb24gaXMg cGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikKK1NFTEVDVCB0Mi54LCBzdW0odDEueCksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEg dDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQyLnggSEFW SU5HIGF2Zyh0MS54KSA+IDEwIE9SREVSIEJZIHQyLng7CitTRUxFQ1QgdDIueCwgc3VtKHQxLngp LCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVS RSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklORyBhdmcodDEueCkgPiAxMCBPUkRFUiBC WSB0Mi54OworCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwK Ky0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCB0MS54LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdl cl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQy LnggPSB0My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKK1NFTEVDVCB0MS54LCBzdW0o dDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0 MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdS T1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKworLS0gcGFydGlhbCBhZ2dyZWdhdGlvbgorU0VU IGVuYWJsZV9oYXNoYWdnIFRPIG9mZjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBl YWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9O IHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkgT1JERVIgQlkgdDMueTsKK1NFTEVDVCB0My55LCBz dW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFi MSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54 IEdST1VQIEJZIHQzLnkgT1JERVIgQlkgdDMueTsKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworCitE Uk9QIFRBQkxFIGVhZ2VyX2FnZ190YWIxOworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdGFiMjsKKwor CistLQorLS0gVGVzdCB3aXRoIG11bHRpLWxldmVsIHBhcnRpdGlvbmluZyBzY2hlbWUKKy0tCitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbCh4IGludCwgeSBpbnQpIFBBUlRJVElPTiBCWSBS QU5HRSh4KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AxIFBBUlRJVElPTiBPRiBl YWdlcl9hZ2dfdGFiX21sIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJM RSBlYWdlcl9hZ2dfdGFiX21sX3AyIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBW QUxVRVMgRlJPTSAoMTApIFRPICgyMCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRB QkxFIGVhZ2VyX2FnZ190YWJfbWxfcDJfczEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxf cDIgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDE1KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2df dGFiX21sX3AyX3MyIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AyIEZPUiBWQUxVRVMg RlJPTSAoMTUpIFRPICgyMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMyBQQVJU SVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMzApIFBB UlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AzX3Mx IFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AzIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRP ICgyNSk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wM19zMiBQQVJUSVRJT04gT0Yg ZWFnZXJfYWdnX3RhYl9tbF9wMyBGT1IgVkFMVUVTIEZST00gKDI1KSBUTyAoMzApOworSU5TRVJU IElOVE8gZWFnZXJfYWdnX3RhYl9tbCBTRUxFQ1QgaSAlIDMwLCBpICUgMzAgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwMCkgaTsKKworQU5BTFlaRSBlYWdlcl9hZ2dfdGFiX21sOworCistLSBX aGVuIEdST1VQIEJZIGNsYXVzZSBtYXRjaGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1l ZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9J TiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLnggT1JERVIg QlkgdDEueDsKK1NFTEVDVCB0MS54LCBzdW0odDIueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdn X3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggR1JPVVAg QlkgdDEueCBPUkRFUiBCWSB0MS54OworCistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBkb2VzIG5v dCBtYXRjaDsgcGFydGlhbCBhZ2dyZWdhdGlvbiBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0 aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLnksIHN1bSh0Mi55 KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9t bCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS55IE9SREVSIEJZIHQxLnk7CitTRUxFQ1Qg dDEueSwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBl YWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLnkgT1JERVIgQlkg dDEueTsKKworLS0gQ2hlY2sgd2l0aCBlYWdlciBhZ2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCist LSBmdWxsIGFnZ3JlZ2F0aW9uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1Qg dDEueCwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQx IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190 YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworU0VM RUNUIHQxLngsIHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9t bCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9h Z2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsK KworLS0gcGFydGlhbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3Rh Yl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdl cl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkgT1JERVIgQlkgdDMu eTsKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2Fn Z190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4g ZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZ IHQzLnk7CisKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbDsKZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKaW5kZXggYjYxMzVmMDM0Ny4uODkyMzJhZTEzZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTQxLDYgKzQxLDcgQEAgQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YQogQWZ0ZXJUcmln Z2Vyc1RyYW5zRGF0YQogQWdnCiBBZ2dDbGF1c2VDb3N0cworQWdnQ2xhdXNlSW5mbwogQWdnSW5m bwogQWdnUGF0aAogQWdnU3BsaXQKQEAgLTEwNjIsNiArMTA2Myw3IEBAIEdyYW50VGFyZ2V0VHlw ZQogR3JvdXAKIEdyb3VwQnlPcmRlcmluZwogR3JvdXBDbGF1c2UKK0dyb3VwRXhwckluZm8KIEdy b3VwUGF0aAogR3JvdXBQYXRoRXh0cmFEYXRhCiBHcm91cFJlc3VsdFBhdGgKQEAgLTEyOTMsNyAr MTI5NSw2IEBAIEpvaW4KIEpvaW5Db3N0V29ya3NwYWNlCiBKb2luRG9tYWluCiBKb2luRXhwcgot Sm9pbkhhc2hFbnRyeQogSm9pblBhdGgKIEpvaW5QYXRoRXh0cmFEYXRhCiBKb2luU3RhdGUKQEAg LTIzNzQsMTIgKzIzNzUsMTYgQEAgUmVpbmRleE9iamVjdFR5cGUKIFJlaW5kZXhQYXJhbXMKIFJl aW5kZXhTdG10CiBSZWluZGV4VHlwZQorUmVsQWdnSW5mbwogUmVsRmlsZUxvY2F0b3IKIFJlbEZp bGVMb2NhdG9yQmFja2VuZAogUmVsRmlsZU51bWJlcgorUmVsSGFzaEVudHJ5CiBSZWxJZENhY2hl RW50CiBSZWxJbmZvCiBSZWxJbmZvQXJyCitSZWxJbmZvTGlzdAorUmVsSW5mb0xpc3RJbmZvCiBS ZWxNYXBGaWxlCiBSZWxNYXBwaW5nCiBSZWxPcHRJbmZvCi0tIAoyLjQzLjAKCg== --0000000000002801ee062311ce5b--