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 1tNOTv-00AiJ2-1z for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Dec 2024 03:42:47 +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 1tNOTs-00ENJA-4J for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Dec 2024 03:42:45 +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 1tNOTr-00ENJ0-Ge for pgsql-hackers@lists.postgresql.org; Tue, 17 Dec 2024 03:42:44 +0000 Received: from mail-yw1-x1132.google.com ([2607:f8b0:4864:20::1132]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tNOTp-0005Bs-4a for pgsql-hackers@postgresql.org; Tue, 17 Dec 2024 03:42:43 +0000 Received: by mail-yw1-x1132.google.com with SMTP id 00721157ae682-6ef66a7ac14so55386637b3.0 for ; Mon, 16 Dec 2024 19:42:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734406959; x=1735011759; 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=cExDOXL1fmD+WvtEvv2ypqzhEudUE33EJXYoXxlTFVs=; b=nOOXrS2irFu3OviUlqrkRZUQLazlCpktK6ktlRuNKC1hVgFiM9+W8B2oWJjTcyWP+G j2L1yEp/Tpc6ggu3qvpceYTmC3F38U7uIU+Xg5MqhNag5b/A8qZmcE1PpBNkUVZ7lQSM ImadX73hu32WwD/W8HBg88S7UxWBopKpsdJOimPA8qo46czQxDysADvTX/OoMWJvGDi7 KYQ5xON09bAXcvr0GkVvXsB2DdCofg5yeuM/GuTGEIyhVl+M3RhXbzAeC5d5Poa0Oytn oTzVzw5w2gD+EDcpwvBI21OrJyQfPgGQ9FVOm197Jr4Q989KlUyODoV6uD8bnKyZIO9X FpJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734406959; x=1735011759; 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=cExDOXL1fmD+WvtEvv2ypqzhEudUE33EJXYoXxlTFVs=; b=By8vU0WllGuQo3UgIFiDGE/BpwUA17ErlxKl7ln0o6eJlwXduSl5KxAY7dzBrD1LQE Nkr/MX8qcZu9S1PSXVZPJZWUJK8NxxaFen731SJ1ujXAYA6gf0qUlu0EE9GJEyBMheXh hc0zZaPjzBi8O+aVos6qw54GhCgfEWZnJE8V49dyad2iZ9eVjZLKWl2q5/ShZ+9NdR2E UmoHVzoSgYhFMngNMcu+y8r0OQ9PODuBMW1KBRKfr17v9W/3MlR+vAsUdYmDkYBpNKYM VL2X10lSX0wrzajS99JlpVu8um1wrEYeik7WA1LHYqtshDBzh0/Zg4DyIQnJLWD8kZxS 2VqA== X-Forwarded-Encrypted: i=1; AJvYcCUMljfm2CXDx4G8Q87fjKdGgfbqKv7HkH5FRDb8HCoZMBJxvePHk/b6xqTEG8HxZlPGLm07zu/Kr1+RraNj@postgresql.org X-Gm-Message-State: AOJu0YzcmG4L5AGhvCRc4+gCTIAcqJ/GTATlMW4+Fu/pppgkW+sE5h8G J5MYO6dK5alk5L9UTCo12jBcKFJlTSj3DxunVMo+yZNG4J6IwdVD8Sh4icU2VDefx1HtiCkXeIx hlNU1voNQhBiCcGhvvNWTh27Gr+M= X-Gm-Gg: ASbGncvPO6jmt6fRrY5E12pJ+3WZYEWPbOoBxiw+o/mgmk0ytUCKFklxQZrAOMcyudy pjHlItrT1fx30sAQO1tSGOlK8tVM7jp48LkBqnsD6/o9Di2eeFSrSxn4wifct0+3OJH4WBtOz X-Google-Smtp-Source: AGHT+IFBJCTpFO5TFirNhbL6XiYl83fpdyP9GtAw+Cf0cqBlaonNub8xwpoRvXbe7UJD+ZkOGfD89W2rVt3U9FH8Jsw= X-Received: by 2002:a05:690c:6604:b0:6ee:8515:6730 with SMTP id 00721157ae682-6f2bbb250b2mr15294907b3.17.1734406959478; Mon, 16 Dec 2024 19:42:39 -0800 (PST) MIME-Version: 1.0 References: <87il22cj51.fsf@163.com> In-Reply-To: From: Richard Guo Date: Tue, 17 Dec 2024 12:42:28 +0900 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="000000000000b7adec06296f1647" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b7adec06296f1647 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Nov 1, 2024 at 2:54=E2=80=AFPM Richard Guo = wrote: > Perhaps we could introduce a GroupPathInfo into the Path structure to > store common information for a grouped path, such as the location of > the partial aggregation (which could be the relids of the relation on > top of which we place the partial aggregation) and the estimated > rowcount for this grouped path, similar to how ParamPathInfo functions > for parameterized paths. Then we should be able to compare the > grouped paths of the same location apples to apples. I haven=E2=80=99t > thought this through in detail yet, though. After thinking over this again, I think one difference from the parameterized path case is that, for a parameterized path, the fewer the required outer rels, the better, as more outer rels imply more join restrictions. Therefore, the number of required outer rels serves as a criterion when comparing paths in add_path(). For a grouped path, however, we don't concern ourselves with the location of the partial aggregation. What matters is whether one grouped path is preferable to another based on the current merits of add_path(). Therefore, I think it's acceptable to compare grouped paths for the same grouped rel, regardless of where the partial aggregation is placed. Note that non-grouped and grouped paths will not appear in the same RelOptInfo. All paths for a grouped rel are grouped paths, meaning there is a partial aggregation node somewhere in the path tree. Similarly, all paths for a non-grouped rel are non-grouped paths. That is to say, it is not possible to compare a grouped path with a non-grouped path. Two different grouped paths for the same grouped rel can have very different rowcount estimates, depending on where the partial aggregation is placed in the path tree. Therefore, for a grouped join path, we have to calculate its rowcount estimate using its outer and inner paths, as what we do in set_joinpath_size(). This is similar to what we do for parameterized paths: two different parameterized paths for the same rel can also have very different rowcount estimates, depending on which outer rels supply the parameters. So we calculate the rowcount estimates for parameterized join paths for each different parameterization in get_parameterized_joinrel_size(). set_joinpath_size() adds a special case into final_cost_nestloop(), final_cost_mergejoin(), and final_cost_hashjoin(). For non-grouped paths, it adds an additional check - IS_GROUPED_REL(rel), which is defined as #define IS_GROUPED_REL(rel) ((rel)->agg_info !=3D NULL) I doubt that this additional simple pointer check will cause general performance regressions. > Yeah, this patch does not get it correct here. Basically the logic is > that for the partial aggregation pushed down to a non-aggregated > relation, we need to consider all columns of that relation involved in > upper join clauses and include them in the grouping keys. Currently, > the patch only checks whether a column is involved in upper join > clauses but does not verify how the column is used. We need to ensure > that the operator used in the join clause is at least compatible with > the grouping operator; otherwise, the grouping operator might > interpret the values as the same while the join operator sees them as > different. Hmm, I think we can prevent this issue from occurring if we ensure that "equality implies image equality" for each grouping key used in partial aggregation. In such cases, if the grouping operator in partial aggregation treats two values as equal, the join operator in the upper join clause must also treat them as equal. On the other hand, it=E2=80=99s possible that the grouping operator treats = two values as different, while the join operator treats them as equal. This is fine, as the different partial groups will be combined during the final aggregation. Attached is the patch rebased on the latest master. It refines the theoretical justification for the correctness of this transformation in README and commit message. It also adds the check for image equality for all grouping keys used in partial aggregation, and fixes the issue reported by Jian. It does not yet handle the RLS case though. Thanks Richard --000000000000b7adec06296f1647 Content-Type: application/octet-stream; name="v14-0001-Implement-Eager-Aggregation.patch" Content-Disposition: attachment; filename="v14-0001-Implement-Eager-Aggregation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m4rx41xj0 RnJvbSA4ZDM5NTVlNWEzYzViZmE1YjVkZTczMDczMzU2MmIyYzhlMWM2NzFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNTo1OToxOSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjE0 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 ZXlzLCB1c2luZyBjb21wYXRpYmxlIG9wZXJhdG9ycy4gIFRoaXMgaXMgZXNzZW50aWFsIHRvIGVu c3VyZSB0aGF0IGFuCmFnZ3JlZ2F0ZWQgcm93IGZyb20gdGhlIHBhcnRpYWwgYWdncmVnYXRpb24g bWF0Y2hlcyB0aGUgb3RoZXIgc2lkZSBvZgp0aGUgam9pbiBpZiBhbmQgb25seSBpZiBlYWNoIHJv dyBpbiB0aGUgcGFydGlhbCBncm91cCBkb2VzLiAgVGhpcwplbnN1cmVzIHRoYXQgYWxsIHJvd3Mg d2l0aGluIHRoZSBzYW1lIHBhcnRpYWwgZ3JvdXAgc2hhcmUgdGhlIHNhbWUKJ2Rlc3RpbnknLCB3 aGljaCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBjb3JyZWN0bmVzcy4KCk9uZSByZXN0cmlj dGlvbiBpcyB0aGF0IHdlIGNhbm5vdCBwdXNoIHBhcnRpYWwgYWdncmVnYXRpb24gZG93biB0byBh CnJlbGF0aW9uIHRoYXQgaXMgaW4gdGhlIG51bGxhYmxlIHNpZGUgb2YgYW4gb3V0ZXIgam9pbiwg YmVjYXVzZSB0aGUKTlVMTC1leHRlbmRlZCByb3dzIHByb2R1Y2VkIGJ5IHRoZSBvdXRlciBqb2lu IHdvdWxkIG5vdCBiZSBhdmFpbGFibGUKd2hlbiB3ZSBwZXJmb3JtIHRoZSBwYXJ0aWFsIGFnZ3Jl Z2F0aW9uLCB3aGlsZSB3aXRoIGEKbm9uLWVhZ2VyLWFnZ3JlZ2F0aW9uIHBsYW4gdGhlc2Ugcm93 cyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgdG9wLWxldmVsCmFnZ3JlZ2F0aW9uLiAgUHVzaGluZyBw YXJ0aWFsIGFnZ3JlZ2F0aW9uIGluIHRoaXMgY2FzZSBtYXkgcmVzdWx0IGluCnRoZSByb3dzIGJl aW5nIGdyb3VwZWQgZGlmZmVyZW50bHkgdGhhbiBleHBlY3RlZCwgb3IgcHJvZHVjZSBpbmNvcnJl Y3QKdmFsdWVzIGZyb20gdGhlIGFnZ3JlZ2F0ZSBmdW5jdGlvbnMuCgpJZiB3ZSBoYXZlIGdlbmVy YXRlZCBhIGdyb3VwZWQgcmVsYXRpb24gZm9yIHRoZSB0b3Btb3N0IGpvaW4gcmVsYXRpb24sCndl IGZpbmFsaXplIGl0cyBwYXRocyBhdCB0aGUgZW5kLiAgVGhlIGZpbmFsIHBhdGhzIHdpbGwgY29t cGV0ZSBpbiB0aGUKdXN1YWwgd2F5IHdpdGggcGF0aHMgYnVpbHQgZnJvbSByZWd1bGFyIHBsYW5u aW5nLgoKU2luY2UgZWFnZXIgYWdncmVnYXRpb24gY2FuIGdlbmVyYXRlIG1hbnkgZ3JvdXBlZCBy ZWxhdGlvbnMsIHdlCmludHJvZHVjZSBhIFJlbEluZm9MaXN0IHN0cnVjdHVyZSwgd2hpY2ggZW5j YXBzdWxhdGVzIGJvdGggYSBsaXN0IGFuZAphIGhhc2ggdGFibGUsIHNvIHRoYXQgd2UgY2FuIGxl dmVyYWdlIHRoZSBoYXNoIHRhYmxlIGZvciBmYXN0ZXIKbG9va3VwcyBub3Qgb25seSBmb3Igam9p biByZWxhdGlvbnMgYnV0IGFsc28gZm9yIGdyb3VwZWQgcmVsYXRpb25zLgoKRWFnZXIgYWdncmVn YXRpb24gY2FuIHVzZSBzaWduaWZpY2FudGx5IG1vcmUgQ1BVIHRpbWUgYW5kIG1lbW9yeSB0aGFu CnJlZ3VsYXIgcGxhbm5pbmcgd2hlbiB0aGUgcXVlcnkgaW52b2x2ZXMgYWdncmVnYXRlcyBhbmQg bWFueSBqb2luaW5nCnJlbGF0aW9ucy4gIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMsIHRoZSByZXN1 bHRpbmcgcGxhbiBjYW4gYmUgbXVjaApiZXR0ZXIsIGp1c3RpZnlpbmcgdGhlIGFkZGl0aW9uYWwg cGxhbm5pbmcgZWZmb3J0LiAgQWxsIHRoZSBzYW1lLCBmb3IKbm93LCB0dXJuIHRoaXMgZmVhdHVy ZSBvZmYgYnkgZGVmYXVsdC4KLS0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu YyAgICAgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvUkVBRE1FICAgICAg ICAgICAgICAgICAgfCAgIDgwICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZh bC5jICAgICAgICB8ICAgOTggKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMgICAgICAgICB8ICA0NTUgKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jICAgICAgICAgfCAgIDk1ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lu cmVscy5jICAgICAgICAgfCAgMTQ3ICsrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0 c3BsYW4uYyAgICAgICAgfCAgMjU4ICsrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5tYWluLmMgICAgICAgICB8ICAgMTcgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYyAgICAgICAgICB8ICAgOTkgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2Fw cGVuZGluZm8uYyAgICAgICB8ICAgNjAgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0 aG5vZGUuYyAgICAgICAgIHwgICA0NyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVs bm9kZS5jICAgICAgICAgIHwgIDc2MSArKysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYyAgICAgICAgICAgfCAgIDEwICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5v ZGVzLmggICAgICAgICAgICAgICAgIHwgIDE0OCArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhub2RlLmggICAgICAgICAgICAgIHwgICAgNyArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aHMuaCAgICAgICAgICAgICAgICAgfCAgICA1ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9wbGFu bWFpbi5oICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9l YWdlcl9hZ2dyZWdhdGUub3V0IHwgMTMwOCArKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwgICAgMyArLQogc3JjL3Rlc3QvcmVn cmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgICAgIHwgICAgMiArLQogc3JjL3Rlc3QvcmVn cmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbCAgICAgIHwgIDE5MiArKysKIHNyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgIDcgKy0KIDIzIGZpbGVzIGNo YW5nZWQsIDM2NDYgaW5zZXJ0aW9ucygrKSwgMTU4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZWFnZXJfYWdncmVnYXRlLm91dAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2VyX2FnZ3JlZ2F0ZS5zcWwK CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IGMwODEwZmJkN2MuLjAwNjNmMzk0 MmQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCkBAIC02MDg5LDcgKzYwODksOCBA QCBmb3JlaWduX2pvaW5fb2soUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWws IEpvaW5UeXBlIGpvaW50eXBlLAogCSAqLwogCUFzc2VydChmcGluZm8tPnJlbGF0aW9uX2luZGV4 ID09IDApOwkvKiBzaG91bGRuJ3QgYmUgc2V0IHlldCAqLwogCWZwaW5mby0+cmVsYXRpb25faW5k ZXggPQotCQlsaXN0X2xlbmd0aChyb290LT5wYXJzZS0+cnRhYmxlKSArIGxpc3RfbGVuZ3RoKHJv b3QtPmpvaW5fcmVsX2xpc3QpOworCQlsaXN0X2xlbmd0aChyb290LT5wYXJzZS0+cnRhYmxlKSAr CisJCWxpc3RfbGVuZ3RoKHJvb3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zKTsKIAogCXJldHVybiB0 cnVlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRSBiL3NyYy9i YWNrZW5kL29wdGltaXplci9SRUFETUUKaW5kZXggMmFiNGYzZGJmMy4uN2E2ZGUyNWY2ZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvUkVBRE1FCkBAIC0xNDk3LDMgKzE0OTcsODMgQEAgYnJlYWtpbmcgZG93biBhZ2dy ZWdhdGlvbiBvciBncm91cGluZyBvdmVyIGEgcGFydGl0aW9uZWQgcmVsYXRpb24gaW50bwogYWdn cmVnYXRpb24gb3IgZ3JvdXBpbmcgb3ZlciBpdHMgcGFydGl0aW9ucyBpcyBjYWxsZWQgcGFydGl0 aW9ud2lzZQogYWdncmVnYXRpb24uICBFc3BlY2lhbGx5IHdoZW4gdGhlIHBhcnRpdGlvbiBrZXlz IG1hdGNoIHRoZSBHUk9VUCBCWSBjbGF1c2UsCiB0aGlzIGNhbiBiZSBzaWduaWZpY2FudGx5IGZh c3RlciB0aGFuIHRoZSByZWd1bGFyIG1ldGhvZC4KKworRWFnZXIgYWdncmVnYXRpb24KKy0tLS0t LS0tLS0tLS0tLS0tCisKK0VhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGEgcXVlcnkgb3B0aW1pemF0aW9u IHRlY2huaXF1ZSB0aGF0IHBhcnRpYWxseSBwdXNoZXMKK2FnZ3JlZ2F0aW9uIHBhc3QgYSBqb2lu LCBhbmQgZmluYWxpemVzIGl0IG9uY2UgYWxsIHRoZSByZWxhdGlvbnMgYXJlIGpvaW5lZC4KK0Vh Z2VyIGFnZ3JlZ2F0aW9uIG1heSByZWR1Y2UgdGhlIG51bWJlciBvZiBpbnB1dCByb3dzIHRvIHRo ZSBqb2luIGFuZCB0aHVzCitjb3VsZCByZXN1bHQgaW4gYSBiZXR0ZXIgb3ZlcmFsbCBwbGFuLgor CitGb3IgZXhhbXBsZToKKworIEVYUExBSU4gKENPU1RTIE9GRikKKyBTRUxFQ1QgYS5pLCBhdmco Yi55KQorIEZST00gYSBKT0lOIGIgT04gYS5pID0gYi5qCisgR1JPVVAgQlkgYS5pOworCisgRmlu YWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBhLmkKKyAgIC0+ICBOZXN0ZWQgTG9v cAorICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiBiLmoKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBiCisgICAgICAgICAt PiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFfcGtleSBvbiBhCisgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAoaSA9IGIuaikKKworSWYgdGhlIHBhcnRpYWwgYWdncmVnYXRpb24gb24gdGFibGUg QiBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZgoraW5wdXQgcm93cywgdGhlIGpv aW4gYWJvdmUgd2lsbCBiZSBtdWNoIGNoZWFwZXIsIGxlYWRpbmcgdG8gYSBtb3JlIGVmZmljaWVu dAorZmluYWwgcGxhbi4KKworRm9yIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHRoYXQgaXMgcHVz aGVkIGRvd24gdG8gYSBub24tYWdncmVnYXRlZCByZWxhdGlvbiwKK3dlIG5lZWQgdG8gY29uc2lk ZXIgYWxsIGV4cHJlc3Npb25zIGZyb20gdGhpcyByZWxhdGlvbiB0aGF0IGFyZSBpbnZvbHZlZCBp bgordXBwZXIgam9pbiBjbGF1c2VzIGFuZCBpbmNsdWRlIHRoZW0gaW4gdGhlIGdyb3VwaW5nIGtl eXMsIHVzaW5nIGNvbXBhdGlibGUKK29wZXJhdG9ycy4gIFRoaXMgaXMgZXNzZW50aWFsIHRvIGVu c3VyZSB0aGF0IGFuIGFnZ3JlZ2F0ZWQgcm93IGZyb20gdGhlIHBhcnRpYWwKK2FnZ3JlZ2F0aW9u IG1hdGNoZXMgdGhlIG90aGVyIHNpZGUgb2YgdGhlIGpvaW4gaWYgYW5kIG9ubHkgaWYgZWFjaCBy b3cgaW4gdGhlCitwYXJ0aWFsIGdyb3VwIGRvZXMuICBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgcm93 cyB3aXRoaW4gdGhlIHNhbWUgcGFydGlhbCBncm91cAorc2hhcmUgdGhlIHNhbWUgJ2Rlc3Rpbnkn LCB3aGljaCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBjb3JyZWN0bmVzcy4KKworT25lIHJl c3RyaWN0aW9uIGlzIHRoYXQgd2UgY2Fubm90IHB1c2ggcGFydGlhbCBhZ2dyZWdhdGlvbiBkb3du IHRvIGEgcmVsYXRpb24KK3RoYXQgaXMgaW4gdGhlIG51bGxhYmxlIHNpZGUgb2YgYW4gb3V0ZXIg am9pbiwgYmVjYXVzZSB0aGUgTlVMTC1leHRlbmRlZCByb3dzCitwcm9kdWNlZCBieSB0aGUgb3V0 ZXIgam9pbiB3b3VsZCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gd2UgcGVyZm9ybSB0aGUgcGFydGlh bAorYWdncmVnYXRpb24sIHdoaWxlIHdpdGggYSBub24tZWFnZXItYWdncmVnYXRpb24gcGxhbiB0 aGVzZSByb3dzIGFyZSBhdmFpbGFibGUKK2ZvciB0aGUgdG9wLWxldmVsIGFnZ3JlZ2F0aW9uLiAg UHVzaGluZyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGluIHRoaXMgY2FzZSBtYXkKK3Jlc3VsdCBpbiB0 aGUgcm93cyBiZWluZyBncm91cGVkIGRpZmZlcmVudGx5IHRoYW4gZXhwZWN0ZWQsIG9yIHByb2R1 Y2UKK2luY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgYWdncmVnYXRlIGZ1bmN0aW9ucy4KKworV2Ug Y2FuIGFsc28gYXBwbHkgZWFnZXIgYWdncmVnYXRpb24gdG8gYSBqb2luOgorCisgRVhQTEFJTiAo Q09TVFMgT0ZGKQorIFNFTEVDVCBhLmksIGF2ZyhiLnkgKyBjLnopCisgRlJPTSBhIEpPSU4gYiBP TiBhLmkgPSBiLmoKKyAgICAgICAgSk9JTiBjIE9OIGIuaiA9IGMuaQorIEdST1VQIEJZIGEuaTsK KworIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogYS5pCisgICAtPiAgTmVz dGVkIExvb3AKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAg ICAgIEdyb3VwIEtleTogYi5qCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6IChiLmogPSBjLmkpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gYgorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBjCisgICAgICAgICAtPiAgSW5k ZXggT25seSBTY2FuIHVzaW5nIGFfcGtleSBvbiBhCisgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoaSA9IGIuaikKKworRHVyaW5nIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIGpvaW4gdHJlZSwg d2UgZXZhbHVhdGUgZWFjaCBiYXNlIG9yIGpvaW4KK3JlbGF0aW9uIHRvIGRldGVybWluZSBpZiBl YWdlciBhZ2dyZWdhdGlvbiBjYW4gYmUgYXBwbGllZC4gIElmIGZlYXNpYmxlLCB3ZQorY3JlYXRl IGEgc2VwYXJhdGUgUmVsT3B0SW5mbyBjYWxsZWQgYSAiZ3JvdXBlZCByZWxhdGlvbiIgYW5kIGdl bmVyYXRlIGdyb3VwZWQKK3BhdGhzIGJ5IGFkZGluZyBzb3J0ZWQgYW5kIGhhc2hlZCBwYXJ0aWFs IGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiB0aGUKK25vbi1ncm91cGVkIHBhdGhzLiAgVG8g bGltaXQgcGxhbm5pbmcgdGltZSwgd2UgY29uc2lkZXIgb25seSB0aGUgY2hlYXBlc3QKK25vbi1n cm91cGVkIHBhdGhzIGluIHRoaXMgc3RlcC4KKworQW5vdGhlciB3YXkgdG8gZ2VuZXJhdGUgZ3Jv dXBlZCBwYXRocyBpcyB0byBqb2luIGEgZ3JvdXBlZCByZWxhdGlvbiB3aXRoIGEKK25vbi1ncm91 cGVkIHJlbGF0aW9uLiAgSm9pbmluZyB0d28gZ3JvdXBlZCByZWxhdGlvbnMgZG9lcyBub3Qgc2Vl bSB0byBiZSB2ZXJ5Cit1c2VmdWwgYW5kIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorCitJ ZiB3ZSBoYXZlIGdlbmVyYXRlZCBhIGdyb3VwZWQgcmVsYXRpb24gZm9yIHRoZSB0b3Btb3N0IGpv aW4gcmVsYXRpb24sIHdlIG5lZWQKK3RvIGZpbmFsaXplIGl0cyBwYXRocyBhdCB0aGUgZW5kLiAg VGhlIGZpbmFsIHBhdGhzIHdpbGwgY29tcGV0ZSBpbiB0aGUgdXN1YWwKK3dheSB3aXRoIHBhdGhz IGJ1aWx0IGZyb20gcmVndWxhciBwbGFubmluZy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci9nZXFvL2dlcW9fZXZhbC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vx b19ldmFsLmMKaW5kZXggZDJmN2Y0ZTVmMy4uY2RjOTU0MzEzNSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL2dlcW8vZ2Vxb19ldmFsLmMKQEAgLTM5LDEwICszOSwyMCBAQCB0eXBlZGVmIHN0cnVjdAog CWludAkJCXNpemU7CQkJLyogbnVtYmVyIG9mIGlucHV0IHJlbGF0aW9ucyBpbiBjbHVtcCAqLwog fSBDbHVtcDsKIAorLyogVGhlIG9yaWdpbmFsIGxlbmd0aCBhbmQgaGFzaHRhYmxlIG9mIGEgUmVs SW5mb0xpc3QgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJaW50CQkJc2F2ZWxlbmd0aDsKKwlzdHJ1 Y3QgSFRBQiAqc2F2ZWhhc2g7Cit9IFJlbEluZm9MaXN0SW5mbzsKKwogc3RhdGljIExpc3QgKm1l cmdlX2NsdW1wKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbHVtcHMsIENsdW1wICpuZXdfY2x1 bXAsCiAJCQkJCQkgaW50IG51bV9nZW5lLCBib29sIGZvcmNlKTsKIHN0YXRpYyBib29sIGRlc2ly YWJsZV9qb2luKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJf cmVsLCBSZWxPcHRJbmZvICppbm5lcl9yZWwpOworc3RhdGljIFJlbEluZm9MaXN0SW5mbyBzYXZl X3JlbGluZm9saXN0KFJlbEluZm9MaXN0ICpyZWxpbmZvX2xpc3QpOworc3RhdGljIHZvaWQgcmVz dG9yZV9yZWxpbmZvbGlzdChSZWxJbmZvTGlzdCAqcmVsaW5mb19saXN0LAorCQkJCQkJCQlSZWxJ bmZvTGlzdEluZm8gKmluZm8pOwogCiAKIC8qCkBAIC02MCw4ICs3MCw4IEBAIGdlcW9fZXZhbChQ bGFubmVySW5mbyAqcm9vdCwgR2VuZSAqdG91ciwgaW50IG51bV9nZW5lKQogCU1lbW9yeUNvbnRl eHQgb2xkY3h0OwogCVJlbE9wdEluZm8gKmpvaW5yZWw7CiAJQ29zdAkJZml0bmVzczsKLQlpbnQJ CQlzYXZlbGVuZ3RoOwotCXN0cnVjdCBIVEFCICpzYXZlaGFzaDsKKwlSZWxJbmZvTGlzdEluZm8g c2F2ZV9qb2luX3JlbDsKKwlSZWxJbmZvTGlzdEluZm8gc2F2ZV9ncm91cGVkX3JlbDsKIAogCS8q CiAJICogQ3JlYXRlIGEgcHJpdmF0ZSBtZW1vcnkgY29udGV4dCB0aGF0IHdpbGwgaG9sZCBhbGwg dGVtcCBzdG9yYWdlCkBAIC03OCwyNSArODgsMjkgQEAgZ2Vxb19ldmFsKFBsYW5uZXJJbmZvICpy b290LCBHZW5lICp0b3VyLCBpbnQgbnVtX2dlbmUpCiAJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG15Y29udGV4dCk7CiAKIAkvKgotCSAqIGdpbW1lX3RyZWUgd2lsbCBhZGQgZW50cmll cyB0byByb290LT5qb2luX3JlbF9saXN0LCB3aGljaCBtYXkgb3IgbWF5Ci0JICogbm90IGFscmVh ZHkgY29udGFpbiBzb21lIGVudHJpZXMuICBUaGUgbmV3bHkgYWRkZWQgZW50cmllcyB3aWxsIGJl Ci0JICogcmVjeWNsZWQgYnkgdGhlIE1lbW9yeUNvbnRleHREZWxldGUgYmVsb3csIHNvIHdlIG11 c3QgZW5zdXJlIHRoYXQgdGhlCi0JICogbGlzdCBpcyByZXN0b3JlZCB0byBpdHMgZm9ybWVyIHN0 YXRlIGJlZm9yZSBleGl0aW5nLiAgV2UgY2FuIGRvIHRoaXMgYnkKLQkgKiB0cnVuY2F0aW5nIHRo ZSBsaXN0IHRvIGl0cyBvcmlnaW5hbCBsZW5ndGguICBOT1RFIHRoaXMgYXNzdW1lcyB0aGF0IGFu eQotCSAqIGFkZGVkIGVudHJpZXMgYXJlIGFwcGVuZGVkIGF0IHRoZSBlbmQhCisJICogZ2ltbWVf dHJlZSB3aWxsIGFkZCBlbnRyaWVzIHRvIHJvb3QtPmpvaW5fcmVsX2xpc3QgYW5kCisJICogcm9v dC0+Z3JvdXBlZF9yZWxfbGlzdCwgd2hpY2ggbWF5IG9yIG1heSBub3QgYWxyZWFkeSBjb250YWlu IHNvbWUKKwkgKiBlbnRyaWVzLiAgVGhlIG5ld2x5IGFkZGVkIGVudHJpZXMgd2lsbCBiZSByZWN5 Y2xlZCBieSB0aGUKKwkgKiBNZW1vcnlDb250ZXh0RGVsZXRlIGJlbG93LCBzbyB3ZSBtdXN0IGVu c3VyZSB0aGF0IGVhY2ggbGlzdCB3aXRoaW4gdGhlCisJICogUmVsSW5mb0xpc3Qgc3RydWN0dXJl cyBpcyByZXN0b3JlZCB0byBpdHMgZm9ybWVyIHN0YXRlIGJlZm9yZSBleGl0aW5nLgorCSAqIFdl IGNhbiBkbyB0aGlzIGJ5IHRydW5jYXRpbmcgZWFjaCBsaXN0IHRvIGl0cyBvcmlnaW5hbCBsZW5n dGguICBOT1RFCisJICogdGhpcyBhc3N1bWVzIHRoYXQgYW55IGFkZGVkIGVudHJpZXMgYXJlIGFw cGVuZGVkIGF0IHRoZSBlbmQhCiAJICoKLQkgKiBXZSBhbHNvIG11c3QgdGFrZSBjYXJlIG5vdCB0 byBtZXNzIHVwIHRoZSBvdXRlciBqb2luX3JlbF9oYXNoLCBpZiB0aGVyZQotCSAqIGlzIG9uZS4g IFdlIGNhbiBkbyB0aGlzIGJ5IGp1c3QgdGVtcG9yYXJpbHkgc2V0dGluZyB0aGUgbGluayB0byBO VUxMLgotCSAqIChJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGVub3VnaCBqb2luIHJlbHMsIHdoaWNo IHdlIHZlcnkgbGlrZWx5IGFyZSwgYQotCSAqIG5ldyBoYXNoIHRhYmxlIHdpbGwgZ2V0IGJ1aWx0 IGFuZCB1c2VkIGxvY2FsbHkuKQorCSAqIFdlIGFsc28gbXVzdCB0YWtlIGNhcmUgbm90IHRvIG1l c3MgdXAgdGhlIG91dGVyIGhhc2ggdGFibGVzIHdpdGhpbiB0aGUKKwkgKiBSZWxJbmZvTGlzdCBz dHJ1Y3R1cmVzLCBpZiBhbnkuICBXZSBjYW4gZG8gdGhpcyBieSBqdXN0IHRlbXBvcmFyaWx5CisJ ICogc2V0dGluZyBlYWNoIGxpbmsgdG8gTlVMTC4gIChJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGVu b3VnaCBqb2luIHJlbHMgb3IKKwkgKiBncm91cGVkIHJlbHMsIHdoaWNoIHdlIHZlcnkgbGlrZWx5 IGFyZSwgbmV3IGhhc2ggdGFibGVzIHdpbGwgZ2V0IGJ1aWx0CisJICogYW5kIHVzZWQgbG9jYWxs eS4pCiAJICoKIAkgKiBqb2luX3JlbF9sZXZlbFtdIHNob3VsZG4ndCBiZSBpbiB1c2UsIHNvIGp1 c3QgQXNzZXJ0IGl0IGlzbid0LgogCSAqLwotCXNhdmVsZW5ndGggPSBsaXN0X2xlbmd0aChyb290 LT5qb2luX3JlbF9saXN0KTsKLQlzYXZlaGFzaCA9IHJvb3QtPmpvaW5fcmVsX2hhc2g7CisJc2F2 ZV9qb2luX3JlbCA9IHNhdmVfcmVsaW5mb2xpc3Qocm9vdC0+am9pbl9yZWxfbGlzdCk7CisJc2F2 ZV9ncm91cGVkX3JlbCA9IHNhdmVfcmVsaW5mb2xpc3Qocm9vdC0+Z3JvdXBlZF9yZWxfbGlzdCk7 CisKIAlBc3NlcnQocm9vdC0+am9pbl9yZWxfbGV2ZWwgPT0gTlVMTCk7CiAKLQlyb290LT5qb2lu X3JlbF9oYXNoID0gTlVMTDsKKwlyb290LT5qb2luX3JlbF9saXN0LT5oYXNoID0gTlVMTDsKKwly b290LT5ncm91cGVkX3JlbF9saXN0LT5oYXNoID0gTlVMTDsKIAogCS8qIGNvbnN0cnVjdCB0aGUg YmVzdCBwYXRoIGZvciB0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2YgcmVsYXRpb25zICovCiAJam9p bnJlbCA9IGdpbW1lX3RyZWUocm9vdCwgdG91ciwgbnVtX2dlbmUpOwpAQCAtMTE4LDEyICsxMzIs MTEgQEAgZ2Vxb19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5lICp0b3VyLCBpbnQgbnVtX2dl bmUpCiAJCWZpdG5lc3MgPSBEQkxfTUFYOwogCiAJLyoKLQkgKiBSZXN0b3JlIGpvaW5fcmVsX2xp c3QgdG8gaXRzIGZvcm1lciBzdGF0ZSwgYW5kIHB1dCBiYWNrIG9yaWdpbmFsCi0JICogaGFzaHRh YmxlIGlmIGFueS4KKwkgKiBSZXN0b3JlIGVhY2ggb2YgdGhlIGxpc3QgaW4gam9pbl9yZWxfbGlz dCBhbmQgZ3JvdXBlZF9yZWxfbGlzdCB0byBpdHMKKwkgKiBmb3JtZXIgc3RhdGUsIGFuZCBwdXQg YmFjayBvcmlnaW5hbCBoYXNodGFibGVzIGlmIGFueS4KIAkgKi8KLQlyb290LT5qb2luX3JlbF9s aXN0ID0gbGlzdF90cnVuY2F0ZShyb290LT5qb2luX3JlbF9saXN0LAotCQkJCQkJCQkJCXNhdmVs ZW5ndGgpOwotCXJvb3QtPmpvaW5fcmVsX2hhc2ggPSBzYXZlaGFzaDsKKwlyZXN0b3JlX3JlbGlu Zm9saXN0KHJvb3QtPmpvaW5fcmVsX2xpc3QsICZzYXZlX2pvaW5fcmVsKTsKKwlyZXN0b3JlX3Jl bGluZm9saXN0KHJvb3QtPmdyb3VwZWRfcmVsX2xpc3QsICZzYXZlX2dyb3VwZWRfcmVsKTsKIAog CS8qIHJlbGVhc2UgYWxsIHRoZSBtZW1vcnkgYWNxdWlyZWQgd2l0aGluIGdpbW1lX3RyZWUgKi8K IAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKQEAgLTI3OSw2ICsyOTIsMjcgQEAgbWVy Z2VfY2x1bXAoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsdW1wcywgQ2x1bXAgKm5ld19jbHVt cCwgaW50IG51bV9nZW5lLAogCQkJCS8qIEZpbmQgYW5kIHNhdmUgdGhlIGNoZWFwZXN0IHBhdGhz IGZvciB0aGlzIGpvaW5yZWwgKi8KIAkJCQlzZXRfY2hlYXBlc3Qoam9pbnJlbCk7CiAKKwkJCQkv KgorCQkJCSAqIEV4Y2VwdCBmb3IgdGhlIHRvcG1vc3Qgc2Nhbi9qb2luIHJlbCwgY29uc2lkZXIg Z2VuZXJhdGluZworCQkJCSAqIHBhcnRpYWwgYWdncmVnYXRpb24gcGF0aHMgZm9yIHRoZSBncm91 cGVkIHJlbGF0aW9uIG9uIHRvcAorCQkJCSAqIG9mIHRoZSBwYXRocyBvZiB0aGlzIHJlbC4gIEFm dGVyIHRoYXQsIHdlJ3JlIGRvbmUgY3JlYXRpbmcKKwkJCQkgKiBwYXRocyBmb3IgdGhlIGdyb3Vw ZWQgcmVsYXRpb24sIHNvIHJ1biBzZXRfY2hlYXBlc3QoKS4KKwkJCQkgKi8KKwkJCQlpZiAoIWJt c19lcXVhbChqb2lucmVsLT5yZWxpZHMsIHJvb3QtPmFsbF9xdWVyeV9yZWxzKSkKKwkJCQl7CisJ CQkJCVJlbE9wdEluZm8gKnJlbF9ncm91cGVkOworCisJCQkJCXJlbF9ncm91cGVkID0gZmluZF9n cm91cGVkX3JlbChyb290LCBqb2lucmVsLT5yZWxpZHMpOworCQkJCQlpZiAocmVsX2dyb3VwZWQp CisJCQkJCXsKKwkJCQkJCUFzc2VydChJU19HUk9VUEVEX1JFTChyZWxfZ3JvdXBlZCkpOworCisJ CQkJCQlnZW5lcmF0ZV9ncm91cGVkX3BhdGhzKHJvb3QsIHJlbF9ncm91cGVkLCBqb2lucmVsLAor CQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZC0+YWdnX2luZm8pOworCQkJCQkJc2V0X2NoZWFwZXN0 KHJlbF9ncm91cGVkKTsKKwkJCQkJfQorCQkJCX0KKwogCQkJCS8qIEFic29yYiBuZXcgY2x1bXAg aW50byBvbGQgKi8KIAkJCQlvbGRfY2x1bXAtPmpvaW5yZWwgPSBqb2lucmVsOwogCQkJCW9sZF9j bHVtcC0+c2l6ZSArPSBuZXdfY2x1bXAtPnNpemU7CkBAIC0zMzYsMyArMzcwLDI3IEBAIGRlc2ly YWJsZV9qb2luKFBsYW5uZXJJbmZvICpyb290LAogCS8qIE90aGVyd2lzZSBwb3N0cG9uZSB0aGUg am9pbiB0aWxsIGxhdGVyLiAqLwogCXJldHVybiBmYWxzZTsKIH0KKworLyoKKyAqIFNhdmUgdGhl IG9yaWdpbmFsIGxlbmd0aCBhbmQgaGFzaHRhYmxlIG9mIGEgUmVsSW5mb0xpc3QuCisgKi8KK3N0 YXRpYyBSZWxJbmZvTGlzdEluZm8KK3NhdmVfcmVsaW5mb2xpc3QoUmVsSW5mb0xpc3QgKnJlbGlu Zm9fbGlzdCkKK3sKKwlSZWxJbmZvTGlzdEluZm8gaW5mbzsKKworCWluZm8uc2F2ZWxlbmd0aCA9 IGxpc3RfbGVuZ3RoKHJlbGluZm9fbGlzdC0+aXRlbXMpOworCWluZm8uc2F2ZWhhc2ggPSByZWxp bmZvX2xpc3QtPmhhc2g7CisKKwlyZXR1cm4gaW5mbzsKK30KKworLyoKKyAqIFJlc3RvcmUgdGhl IG9yaWdpbmFsIGxlbmd0aCBhbmQgaGFzaHRhYmxlIG9mIGEgUmVsSW5mb0xpc3QuCisgKi8KK3N0 YXRpYyB2b2lkCityZXN0b3JlX3JlbGluZm9saXN0KFJlbEluZm9MaXN0ICpyZWxpbmZvX2xpc3Qs IFJlbEluZm9MaXN0SW5mbyAqaW5mbykKK3sKKwlyZWxpbmZvX2xpc3QtPml0ZW1zID0gbGlzdF90 cnVuY2F0ZShyZWxpbmZvX2xpc3QtPml0ZW1zLCBpbmZvLT5zYXZlbGVuZ3RoKTsKKwlyZWxpbmZv X2xpc3QtPmhhc2ggPSBpbmZvLT5zYXZlaGFzaDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jCmluZGV4IDE3MmVkYjY0M2EuLjBhYzJjMmQ1MDcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvYWxscGF0aHMuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIm9wdGltaXpl ci9wYXRocy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFuY2F0LmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL3BsYW5uZXIuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcHJlcC5oIgogI2luY2x1ZGUg Im9wdGltaXplci90bGlzdC5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jbGF1c2UuaCIKICNp bmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCkBAIC00Nyw2ICs0OCw3IEBACiAjaW5jbHVkZSAi cG9ydC9wZ19iaXR1dGlscy5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZU1hbmlwLmgiCiAj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIK IAogCiAvKiBCaXRtYXNrIGZsYWdzIGZvciBwdXNoZG93bl9zYWZldHlfaW5mby51bnNhZmVGbGFn cyAqLwpAQCAtNzcsNiArNzksNyBAQCB0eXBlZGVmIGVudW0gcHVzaGRvd25fc2FmZV90eXBlCiAK IC8qIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHNldCBieSBHVUMgKi8KIGJvb2wJCWVuYWJsZV9nZXFv ID0gZmFsc2U7CS8qIGp1c3QgaW4gY2FzZSBHVUMgZG9lc24ndCBzZXQgaXQgKi8KK2Jvb2wJCWVu YWJsZV9lYWdlcl9hZ2dyZWdhdGUgPSBmYWxzZTsKIGludAkJCWdlcW9fdGhyZXNob2xkOwogaW50 CQkJbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsKIGludAkJCW1pbl9wYXJhbGxlbF9pbmRl eF9zY2FuX3NpemU7CkBAIC05MCw2ICs5Myw3IEBAIGpvaW5fc2VhcmNoX2hvb2tfdHlwZSBqb2lu X3NlYXJjaF9ob29rID0gTlVMTDsKIAogc3RhdGljIHZvaWQgc2V0X2Jhc2VfcmVsX2NvbnNpZGVy X3N0YXJ0dXAoUGxhbm5lckluZm8gKnJvb3QpOwogc3RhdGljIHZvaWQgc2V0X2Jhc2VfcmVsX3Np emVzKFBsYW5uZXJJbmZvICpyb290KTsKK3N0YXRpYyB2b2lkIHNldHVwX2Jhc2VfZ3JvdXBlZF9y ZWxzKFBsYW5uZXJJbmZvICpyb290KTsKIHN0YXRpYyB2b2lkIHNldF9iYXNlX3JlbF9wYXRobGlz dHMoUGxhbm5lckluZm8gKnJvb3QpOwogc3RhdGljIHZvaWQgc2V0X3JlbF9zaXplKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgSW5kZXggcnRpLCBSYW5nZVRibEVu dHJ5ICpydGUpOwpAQCAtMTE0LDYgKzExOCw3IEBAIHN0YXRpYyB2b2lkIHNldF9hcHBlbmRfcmVs X3NpemUoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJSW5kZXgg cnRpLCBSYW5nZVRibEVudHJ5ICpydGUpOwogc3RhdGljIHZvaWQgc2V0X2FwcGVuZF9yZWxfcGF0 aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCUluZGV4 IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKK3N0YXRpYyB2b2lkIHNldF9ncm91cGVkX3JlbF9w YXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKIHN0YXRpYyB2b2lk IGdlbmVyYXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKIAkJCQkJCQkJCQkgTGlzdCAqbGl2ZV9jaGlsZHJlbHMsCiAJCQkJCQkJCQkJIExp c3QgKmFsbF9jaGlsZF9wYXRoa2V5cyk7CkBAIC0xODIsNiArMTg3LDExIEBAIG1ha2Vfb25lX3Jl bChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqam9pbmxpc3QpCiAJICovCiAJc2V0X2Jhc2VfcmVs X3NpemVzKHJvb3QpOwogCisJLyoKKwkgKiBCdWlsZCBncm91cGVkIGJhc2UgcmVsYXRpb25zIGZv ciBlYWNoIGJhc2UgcmVsIGlmIHBvc3NpYmxlLgorCSAqLworCXNldHVwX2Jhc2VfZ3JvdXBlZF9y ZWxzKHJvb3QpOworCiAJLyoKIAkgKiBXZSBzaG91bGQgbm93IGhhdmUgc2l6ZSBlc3RpbWF0ZXMg Zm9yIGV2ZXJ5IGFjdHVhbCB0YWJsZSBpbnZvbHZlZCBpbgogCSAqIHRoZSBxdWVyeSwgYW5kIHdl IGFsc28ga25vdyB3aGljaCBpZiBhbnkgaGF2ZSBiZWVuIGRlbGV0ZWQgZnJvbSB0aGUKQEAgLTMy Myw2ICszMzMsNDUgQEAgc2V0X2Jhc2VfcmVsX3NpemVzKFBsYW5uZXJJbmZvICpyb290KQogCX0K IH0KIAorLyoKKyAqIHNldHVwX2Jhc2VfZ3JvdXBlZF9yZWxzCisgKgkgIEZvciBlYWNoICJwbGFp biIgYmFzZSByZWxhdGlvbiwgYnVpbGQgYSBncm91cGVkIGJhc2UgcmVsYXRpb24gaWYgZWFnZXIK KyAqCSAgYWdncmVnYXRpb24gaXMgcG9zc2libGUgYW5kIGlmIHRoaXMgcmVsYXRpb24gY2FuIHBy b2R1Y2UgZ3JvdXBlZCBwYXRocy4KKyAqLworc3RhdGljIHZvaWQKK3NldHVwX2Jhc2VfZ3JvdXBl ZF9yZWxzKFBsYW5uZXJJbmZvICpyb290KQoreworCUluZGV4CQlydGk7CisKKwkvKgorCSAqIElm IHRoZXJlIGFyZSBubyBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMgb3IgZ3JvdXBpbmcgZXhwcmVzc2lv bnMsIGVhZ2VyCisJICogYWdncmVnYXRpb24gaXMgbm90IHBvc3NpYmxlLgorCSAqLworCWlmIChy b290LT5hZ2dfY2xhdXNlX2xpc3QgPT0gTklMIHx8CisJCXJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9 PSBOSUwpCisJCXJldHVybjsKKworCWZvciAocnRpID0gMTsgcnRpIDwgcm9vdC0+c2ltcGxlX3Jl bF9hcnJheV9zaXplOyBydGkrKykKKwl7CisJCVJlbE9wdEluZm8gKnJlbCA9IHJvb3QtPnNpbXBs ZV9yZWxfYXJyYXlbcnRpXTsKKwkJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisKKwkJLyogdGhl cmUgbWF5IGJlIGVtcHR5IHNsb3RzIGNvcnJlc3BvbmRpbmcgdG8gbm9uLWJhc2VyZWwgUlRFcyAq LworCQlpZiAocmVsID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlBc3NlcnQocmVsLT5yZWxp ZCA9PSBydGkpOwkvKiBzYW5pdHkgY2hlY2sgb24gYXJyYXkgKi8KKwkJQXNzZXJ0KElTX1NJTVBM RV9SRUwocmVsKSk7IC8qIHNhbml0eSBjaGVjayBvbiByZWwgKi8KKworCQlyZWxfZ3JvdXBlZCA9 IGJ1aWxkX3NpbXBsZV9ncm91cGVkX3JlbChyb290LCByZWwpOworCQlpZiAocmVsX2dyb3VwZWQp CisJCXsKKwkJCS8qIE1ha2UgdGhlIGdyb3VwZWQgcmVsYXRpb24gYXZhaWxhYmxlIGZvciBqb2lu aW5nLiAqLworCQkJYWRkX2dyb3VwZWRfcmVsKHJvb3QsIHJlbF9ncm91cGVkKTsKKwkJfQorCX0K K30KKwogLyoKICAqIHNldF9iYXNlX3JlbF9wYXRobGlzdHMKICAqCSAgRmluZHMgYWxsIHBhdGhz IGF2YWlsYWJsZSBmb3Igc2Nhbm5pbmcgZWFjaCBiYXNlLXJlbGF0aW9uIGVudHJ5LgpAQCAtNTU5 LDYgKzYwOCwxNSBAQCBzZXRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJLyogTm93IGZpbmQgdGhlIGNoZWFwZXN0IG9mIHRoZSBwYXRocyBmb3IgdGhp cyByZWwgKi8KIAlzZXRfY2hlYXBlc3QocmVsKTsKIAorCS8qCisJICogSWYgYSBncm91cGVkIHJl bGF0aW9uIGZvciB0aGlzIHJlbCBleGlzdHMsIGJ1aWxkIHBhcnRpYWwgYWdncmVnYXRpb24KKwkg KiBwYXRocyBmb3IgaXQuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBjYW4gb25seSBoYXBwZW4g YWZ0ZXIgd2UndmUgY2FsbGVkIHNldF9jaGVhcGVzdCgpIGZvcgorCSAqIHRoaXMgYmFzZSByZWws IGJlY2F1c2Ugd2UgbmVlZCBpdHMgY2hlYXBlc3QgcGF0aHMuCisJICovCisJc2V0X2dyb3VwZWRf cmVsX3BhdGhsaXN0KHJvb3QsIHJlbCk7CisKICNpZmRlZiBPUFRJTUlaRVJfREVCVUcKIAlwcHJp bnQocmVsKTsKICNlbmRpZgpAQCAtMTI5OCw2ICsxMzU2LDM2IEBAIHNldF9hcHBlbmRfcmVsX3Bh dGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJYWRkX3BhdGhzX3Rv X2FwcGVuZF9yZWwocm9vdCwgcmVsLCBsaXZlX2NoaWxkcmVscyk7CiB9CiAKKy8qCisgKiBzZXRf Z3JvdXBlZF9yZWxfcGF0aGxpc3QKKyAqCSAgSWYgYSBncm91cGVkIHJlbGF0aW9uIGZvciB0aGUg Z2l2ZW4gJ3JlbCcgZXhpc3RzLCBidWlsZCBwYXJ0aWFsCisgKgkgIGFnZ3JlZ2F0aW9uIHBhdGhz IGZvciBpdC4KKyAqLworc3RhdGljIHZvaWQKK3NldF9ncm91cGVkX3JlbF9wYXRobGlzdChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQoreworCVJlbE9wdEluZm8gKnJlbF9ncm91 cGVkOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9y IGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3Nz aWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2NsYXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290 LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKiBBZGQgcGF0aHMgdG8g dGhlIGdyb3VwZWQgYmFzZSByZWxhdGlvbiBpZiBvbmUgZXhpc3RzLiAqLworCXJlbF9ncm91cGVk ID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwtPnJlbGlkcyk7CisJaWYgKHJlbF9ncm91cGVk KQorCXsKKwkJQXNzZXJ0KElTX0dST1VQRURfUkVMKHJlbF9ncm91cGVkKSk7CisKKwkJZ2VuZXJh dGVfZ3JvdXBlZF9wYXRocyhyb290LCByZWxfZ3JvdXBlZCwgcmVsLAorCQkJCQkJCSAgIHJlbF9n cm91cGVkLT5hZ2dfaW5mbyk7CisJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJfQorfQor CiAKIC8qCiAgKiBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbApAQCAtMzMwNiw2ICszMzk0LDMxOCBA QCBnZW5lcmF0ZV91c2VmdWxfZ2F0aGVyX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsIGJvb2wgb3ZlcnJpZGVfcgogCX0KIH0KIAorLyoKKyAqIGdlbmVyYXRlX2dyb3Vw ZWRfcGF0aHMKKyAqCQlHZW5lcmF0ZSBwYXRocyBmb3IgYSBncm91cGVkIHJlbGF0aW9uIGJ5IGFk ZGluZyBzb3J0ZWQgYW5kIGhhc2hlZAorICoJCXBhcnRpYWwgYWdncmVnYXRpb24gcGF0aHMgb24g dG9wIG9mIHBhdGhzIG9mIHRoZSBwbGFpbiBiYXNlIG9yIGpvaW4KKyAqCQlyZWxhdGlvbi4KKyAq CisgKiBUaGUgaW5mb3JtYXRpb24gbmVlZGVkIGFyZSBwcm92aWRlZCBieSB0aGUgUmVsQWdnSW5m byBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQKK2dlbmVyYXRlX2dyb3VwZWRfcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbF9ncm91cGVkLAorCQkJCQkgICBSZWxPcHRJbmZvICpy ZWxfcGxhaW4sIFJlbEFnZ0luZm8gKmFnZ19pbmZvKQoreworCUFnZ0NsYXVzZUNvc3RzIGFnZ19j b3N0czsKKwlib29sCQljYW5faGFzaDsKKwlib29sCQljYW5fc29ydDsKKwlQYXRoCSAgICpjaGVh cGVzdF90b3RhbF9wYXRoID0gTlVMTDsKKwlQYXRoCSAgICpjaGVhcGVzdF9wYXJ0aWFsX3BhdGgg PSBOVUxMOworCWRvdWJsZQkJZE51bUdyb3VwcyA9IDA7CisJZG91YmxlCQlkTnVtUGFydGlhbEdy b3VwcyA9IDA7CisKKwlpZiAoSVNfRFVNTVlfUkVMKHJlbF9wbGFpbikpCisJeworCQltYXJrX2R1 bW15X3JlbChyZWxfZ3JvdXBlZCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBn cm91cGVkIHBhdGhzIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24gYXJlIG5vdCBjb25zaWRlcmVkIHVz ZWZ1bCwKKwkgKiBkbyBub3QgYm90aGVyIHRvIGdlbmVyYXRlIHRoZW0uCisJICovCisJaWYgKCFh Z2dfaW5mby0+YWdnX3VzZWZ1bCkKKwkJcmV0dXJuOworCisJTWVtU2V0KCZhZ2dfY29zdHMsIDAs IHNpemVvZihBZ2dDbGF1c2VDb3N0cykpOworCWdldF9hZ2dfY2xhdXNlX2Nvc3RzKHJvb3QsIEFH R1NQTElUX0lOSVRJQUxfU0VSSUFMLCAmYWdnX2Nvc3RzKTsKKworCS8qCisJICogRGV0ZXJtaW5l IHdoZXRoZXIgaXQncyBwb3NzaWJsZSB0byBwZXJmb3JtIHNvcnQtYmFzZWQgaW1wbGVtZW50YXRp b25zCisJICogb2YgZ3JvdXBpbmcuCisJICovCisJY2FuX3NvcnQgPSBncm91cGluZ19pc19zb3J0 YWJsZShhZ2dfaW5mby0+Z3JvdXBfY2xhdXNlcyk7CisKKwkvKgorCSAqIERldGVybWluZSB3aGV0 aGVyIHdlIHNob3VsZCBjb25zaWRlciBoYXNoLWJhc2VkIGltcGxlbWVudGF0aW9ucyBvZgorCSAq IGdyb3VwaW5nLgorCSAqLworCUFzc2VydChyb290LT5udW1PcmRlcmVkQWdncyA9PSAwKTsKKwlj YW5faGFzaCA9IChhZ2dfaW5mby0+Z3JvdXBfY2xhdXNlcyAhPSBOSUwgJiYKKwkJCQlncm91cGlu Z19pc19oYXNoYWJsZShhZ2dfaW5mby0+Z3JvdXBfY2xhdXNlcykpOworCisJLyoKKwkgKiBDb25z aWRlciB3aGV0aGVyIHdlIHNob3VsZCBnZW5lcmF0ZSBwYXJ0aWFsbHkgYWdncmVnYXRlZCBub24t cGFydGlhbAorCSAqIHBhdGhzLiAgV2UgY2FuIG9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIGEgbm9u LXBhcnRpYWwgcGF0aC4KKwkgKi8KKwlpZiAocmVsX3BsYWluLT5wYXRobGlzdCAhPSBOSUwpCisJ eworCQljaGVhcGVzdF90b3RhbF9wYXRoID0gcmVsX3BsYWluLT5jaGVhcGVzdF90b3RhbF9wYXRo OworCQlBc3NlcnQoY2hlYXBlc3RfdG90YWxfcGF0aCAhPSBOVUxMKTsKKwl9CisKKwkvKgorCSAq IElmIHBhcmFsbGVsaXNtIGlzIHBvc3NpYmxlIGZvciByZWxfZ3JvdXBlZCwgdGhlbiB3ZSBzaG91 bGQgY29uc2lkZXIKKwkgKiBnZW5lcmF0aW5nIHBhcnRpYWxseS1ncm91cGVkIHBhcnRpYWwgcGF0 aHMuICBIb3dldmVyLCBpZiB0aGUgcGxhaW4gcmVsCisJICogaGFzIG5vIHBhcnRpYWwgcGF0aHMs IHRoZW4gd2UgY2FuJ3QuCisJICovCisJaWYgKHJlbF9ncm91cGVkLT5jb25zaWRlcl9wYXJhbGxl bCAmJiByZWxfcGxhaW4tPnBhcnRpYWxfcGF0aGxpc3QgIT0gTklMKQorCXsKKwkJY2hlYXBlc3Rf cGFydGlhbF9wYXRoID0gbGluaXRpYWwocmVsX3BsYWluLT5wYXJ0aWFsX3BhdGhsaXN0KTsKKwkJ QXNzZXJ0KGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKTsKKwl9CisKKwkvKiBFc3RpbWF0 ZSBudW1iZXIgb2YgcGFydGlhbCBncm91cHMuICovCisJaWYgKGNoZWFwZXN0X3RvdGFsX3BhdGgg IT0gTlVMTCkKKwkJZE51bUdyb3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKKwkJCQkJ CQkJCQkgYWdnX2luZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCSBjaGVhcGVzdF90b3RhbF9w YXRoLT5yb3dzLAorCQkJCQkJCQkJCSBOVUxMLCBOVUxMKTsKKwlpZiAoY2hlYXBlc3RfcGFydGlh bF9wYXRoICE9IE5VTEwpCisJCWROdW1QYXJ0aWFsR3JvdXBzID0gZXN0aW1hdGVfbnVtX2dyb3Vw cyhyb290LAorCQkJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCQkJ Y2hlYXBlc3RfcGFydGlhbF9wYXRoLT5yb3dzLAorCQkJCQkJCQkJCQkJTlVMTCwgTlVMTCk7CisK KwlpZiAoY2FuX3NvcnQgJiYgY2hlYXBlc3RfdG90YWxfcGF0aCAhPSBOVUxMKQorCXsKKwkJTGlz dENlbGwgICAqbGM7CisKKwkJLyoKKwkJICogVXNlIGFueSBhdmFpbGFibGUgc3VpdGFibHktc29y dGVkIHBhdGggYXMgaW5wdXQsIGFuZCBhbHNvIGNvbnNpZGVyCisJCSAqIHNvcnRpbmcgdGhlIGNo ZWFwZXN0LXRvdGFsIHBhdGguCisJCSAqLworCQlmb3JlYWNoKGxjLCByZWxfcGxhaW4tPnBhdGhs aXN0KQorCQl7CisJCQlQYXRoCSAgICppbnB1dF9wYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsK KwkJCVBhdGgJICAgKnBhdGg7CisJCQlib29sCQlpc19zb3J0ZWQ7CisJCQlpbnQJCQlwcmVzb3J0 ZWRfa2V5czsKKworCQkJLyoKKwkJCSAqIFNpbmNlIHRoZSBwYXRoIG9yaWdpbmF0ZXMgZnJvbSBh IG5vbi1ncm91cGVkIHJlbGF0aW9uIHRoYXQgaXMKKwkJCSAqIG5vdCBhd2FyZSBvZiBlYWdlciBh Z2dyZWdhdGlvbiwgd2UgbXVzdCBlbnN1cmUgdGhhdCBpdCBwcm92aWRlcworCQkJICogdGhlIGNv cnJlY3QgaW5wdXQgZm9yIHBhcnRpYWwgYWdncmVnYXRpb24uCisJCQkgKi8KKwkJCXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfcHJvamVjdGlvbl9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkgICByZWxf Z3JvdXBlZCwKKwkJCQkJCQkJCQkJCSAgIGlucHV0X3BhdGgsCisJCQkJCQkJCQkJCQkgICBhZ2df aW5mby0+YWdnX2lucHV0KTsKKworCQkJaXNfc29ydGVkID0gcGF0aGtleXNfY291bnRfY29udGFp bmVkX2luKGFnZ19pbmZvLT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQlwYXRoLT5wYXRo a2V5cywKKwkJCQkJCQkJCQkJCQkmcHJlc29ydGVkX2tleXMpOworCQkJaWYgKCFpc19zb3J0ZWQp CisJCQl7CisJCQkJLyoKKwkJCQkgKiBUcnkgYXQgbGVhc3Qgc29ydGluZyB0aGUgY2hlYXBlc3Qg cGF0aCBhbmQgYWxzbyB0cnkKKwkJCQkgKiBpbmNyZW1lbnRhbGx5IHNvcnRpbmcgYW55IHBhdGgg d2hpY2ggaXMgcGFydGlhbGx5IHNvcnRlZAorCQkJCSAqIGFscmVhZHkgKG5vIG5lZWQgdG8gZGVh bCB3aXRoIHBhdGhzIHdoaWNoIGhhdmUgcHJlc29ydGVkCisJCQkJICoga2V5cyB3aGVuIGluY3Jl bWVudGFsIHNvcnQgaXMgZGlzYWJsZWQgdW5sZXNzIGl0J3MgdGhlCisJCQkJICogY2hlYXBlc3Qg aW5wdXQgcGF0aCkuCisJCQkJICovCisJCQkJaWYgKGlucHV0X3BhdGggIT0gY2hlYXBlc3RfdG90 YWxfcGF0aCAmJgorCQkJCQkocHJlc29ydGVkX2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVu dGFsX3NvcnQpKQorCQkJCQljb250aW51ZTsKKworCQkJCS8qCisJCQkJICogV2UndmUgbm8gbmVl ZCB0byBjb25zaWRlciBib3RoIGEgc29ydCBhbmQgaW5jcmVtZW50YWwgc29ydC4KKwkJCQkgKiBX ZSdsbCBqdXN0IGRvIGEgc29ydCBpZiB0aGVyZSBhcmUgbm8gcHJlc29ydGVkIGtleXMgYW5kIGFu CisJCQkJICogaW5jcmVtZW50YWwgc29ydCB3aGVuIHRoZXJlIGFyZSBwcmVzb3J0ZWQga2V5cy4K KwkJCQkgKi8KKwkJCQlpZiAocHJlc29ydGVkX2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVu dGFsX3NvcnQpCisJCQkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCisJ CQkJCQkJCQkJCQkJIHJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJ CQkJCSBhZ2dfaW5mby0+Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJ CWVsc2UKKwkJCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgo cm9vdCwKKwkJCQkJCQkJCQkJCQkJCQkgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJCQkJIHBh dGgsCisJCQkJCQkJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJ CQkJCQkJCQkgcHJlc29ydGVkX2tleXMsCisJCQkJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJfQor CisJCQkvKgorCQkJICogcXVhbCBpcyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5u b3QgYmUgZXZhbHVhdGVkIHVudGlsCisJCQkgKiB0aGUgZmluYWwgdmFsdWUgb2YgdGhlIGFnZ3Jl Z2F0ZSBpcyBrbm93bi4KKwkJCSAqLworCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0 aChyb290LAorCQkJCQkJCQkJCQlyZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJcGF0aCwKKwkJCQkJ CQkJCQkJYWdnX2luZm8tPnRhcmdldCwKKwkJCQkJCQkJCQkJQUdHX1NPUlRFRCwKKwkJCQkJCQkJ CQkJQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwsCisJCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9j bGF1c2VzLAorCQkJCQkJCQkJCQlOSUwsCisJCQkJCQkJCQkJCSZhZ2dfY29zdHMsCisJCQkJCQkJ CQkJCWROdW1Hcm91cHMpOworCisJCQlhZGRfcGF0aChyZWxfZ3JvdXBlZCwgcGF0aCk7CisJCX0K Kwl9CisKKwlpZiAoY2FuX3NvcnQgJiYgY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpCisJ eworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkvKiBTaW1pbGFyIHRvIGFib3ZlIGxvZ2ljLCBidXQg Zm9yIHBhcnRpYWwgcGF0aHMuICovCisJCWZvcmVhY2gobGMsIHJlbF9wbGFpbi0+cGFydGlhbF9w YXRobGlzdCkKKwkJeworCQkJUGF0aAkgICAqaW5wdXRfcGF0aCA9IChQYXRoICopIGxmaXJzdChs Yyk7CisJCQlQYXRoCSAgICpwYXRoOworCQkJYm9vbAkJaXNfc29ydGVkOworCQkJaW50CQkJcHJl c29ydGVkX2tleXM7CisKKwkJCS8qCisJCQkgKiBTaW5jZSB0aGUgcGF0aCBvcmlnaW5hdGVzIGZy b20gYSBub24tZ3JvdXBlZCByZWxhdGlvbiB0aGF0IGlzCisJCQkgKiBub3QgYXdhcmUgb2YgZWFn ZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMKKwkJCSAqIHRo ZSBjb3JyZWN0IGlucHV0IGZvciBwYXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkJICovCisJCQlwYXRo ID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkJICAg cmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkgICBpbnB1dF9wYXRoLAorCQkJCQkJCQkJCQkJICAg YWdnX2luZm8tPmFnZ19pbnB1dCk7CisKKwkJCWlzX3NvcnRlZCA9IHBhdGhrZXlzX2NvdW50X2Nv bnRhaW5lZF9pbihhZ2dfaW5mby0+Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJcGF0aC0+ cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJJnByZXNvcnRlZF9rZXlzKTsKKworCQkJaWYgKCFpc19z b3J0ZWQpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUcnkgYXQgbGVhc3Qgc29ydGluZyB0aGUgY2hl YXBlc3QgcGF0aCBhbmQgYWxzbyB0cnkKKwkJCQkgKiBpbmNyZW1lbnRhbGx5IHNvcnRpbmcgYW55 IHBhdGggd2hpY2ggaXMgcGFydGlhbGx5IHNvcnRlZAorCQkJCSAqIGFscmVhZHkgKG5vIG5lZWQg dG8gZGVhbCB3aXRoIHBhdGhzIHdoaWNoIGhhdmUgcHJlc29ydGVkCisJCQkJICoga2V5cyB3aGVu IGluY3JlbWVudGFsIHNvcnQgaXMgZGlzYWJsZWQgdW5sZXNzIGl0J3MgdGhlCisJCQkJICogY2hl YXBlc3QgaW5wdXQgcGF0aCkuCisJCQkJICovCisJCQkJaWYgKGlucHV0X3BhdGggIT0gY2hlYXBl c3RfcGFydGlhbF9wYXRoICYmCisJCQkJCShwcmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVf aW5jcmVtZW50YWxfc29ydCkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBXZSd2 ZSBubyBuZWVkIHRvIGNvbnNpZGVyIGJvdGggYSBzb3J0IGFuZCBpbmNyZW1lbnRhbCBzb3J0Lgor CQkJCSAqIFdlJ2xsIGp1c3QgZG8gYSBzb3J0IGlmIHRoZXJlIGFyZSBubyBwcmVzb3J0ZWQga2V5 cyBhbmQgYW4KKwkJCQkgKiBpbmNyZW1lbnRhbCBzb3J0IHdoZW4gdGhlcmUgYXJlIHByZXNvcnRl ZCBrZXlzLgorCQkJCSAqLworCQkJCWlmIChwcmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVf aW5jcmVtZW50YWxfc29ydCkKKwkJCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9zb3J0X3BhdGgo cm9vdCwKKwkJCQkJCQkJCQkJCQkgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJIHBhdGgsCisJ CQkJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkgLTEu MCk7CisJCQkJZWxzZQorCQkJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2luY3JlbWVudGFsX3Nv cnRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCQkJCSByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJ CQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkJCQkgYWdnX2luZm8tPmdyb3VwX3BhdGhrZXlzLAor CQkJCQkJCQkJCQkJCQkJCSBwcmVzb3J0ZWRfa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgLTEuMCk7 CisJCQl9CisKKwkJCS8qCisJCQkgKiBxdWFsIGlzIE5JTCBiZWNhdXNlIHRoZSBIQVZJTkcgY2xh dXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50aWwKKwkJCSAqIHRoZSBmaW5hbCB2YWx1ZSBvZiB0 aGUgYWdncmVnYXRlIGlzIGtub3duLgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRl X2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQlwYXRo LAorCQkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0LAorCQkJCQkJCQkJCQlBR0dfU09SVEVELAor CQkJCQkJCQkJCQlBR0dTUExJVF9JTklUSUFMX1NFUklBTCwKKwkJCQkJCQkJCQkJYWdnX2luZm8t Pmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJCU5JTCwKKwkJCQkJCQkJCQkJJmFnZ19jb3N0cywK KwkJCQkJCQkJCQkJZE51bVBhcnRpYWxHcm91cHMpOworCisJCQlhZGRfcGFydGlhbF9wYXRoKHJl bF9ncm91cGVkLCBwYXRoKTsKKwkJfQorCX0KKworCS8qCisJICogQWRkIGEgcGFydGlhbGx5LWdy b3VwZWQgSGFzaEFnZyBQYXRoIHdoZXJlIHBvc3NpYmxlCisJICovCisJaWYgKGNhbl9oYXNoICYm IGNoZWFwZXN0X3RvdGFsX3BhdGggIT0gTlVMTCkKKwl7CisJCVBhdGgJICAgKnBhdGg7CisKKwkJ LyoKKwkJICogU2luY2UgdGhlIHBhdGggb3JpZ2luYXRlcyBmcm9tIGEgbm9uLWdyb3VwZWQgcmVs YXRpb24gdGhhdCBpcyBub3QKKwkJICogYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11 c3QgZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMgdGhlCisJCSAqIGNvcnJlY3QgaW5wdXQgZm9yIHBh cnRpYWwgYWdncmVnYXRpb24uCisJCSAqLworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2pl Y3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJ ICAgY2hlYXBlc3RfdG90YWxfcGF0aCwKKwkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1 dCk7CisKKwkJLyoKKwkJICogcXVhbCBpcyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBj YW5ub3QgYmUgZXZhbHVhdGVkIHVudGlsIHRoZQorCQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdn cmVnYXRlIGlzIGtub3duLgorCQkgKi8KKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0 aChyb290LAorCQkJCQkJCQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCXBhdGgsCisJCQkJCQkJ CQkJYWdnX2luZm8tPnRhcmdldCwKKwkJCQkJCQkJCQlBR0dfSEFTSEVELAorCQkJCQkJCQkJCUFH R1NQTElUX0lOSVRJQUxfU0VSSUFMLAorCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2Vz LAorCQkJCQkJCQkJCU5JTCwKKwkJCQkJCQkJCQkmYWdnX2Nvc3RzLAorCQkJCQkJCQkJCWROdW1H cm91cHMpOworCisJCWFkZF9wYXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwl9CisKKwkvKgorCSAq IE5vdyBhZGQgYSBwYXJ0aWFsbHktZ3JvdXBlZCBIYXNoQWdnIHBhcnRpYWwgUGF0aCB3aGVyZSBw b3NzaWJsZQorCSAqLworCWlmIChjYW5faGFzaCAmJiBjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0g TlVMTCkKKwl7CisJCVBhdGgJICAgKnBhdGg7CisKKwkJLyoKKwkJICogU2luY2UgdGhlIHBhdGgg b3JpZ2luYXRlcyBmcm9tIGEgbm9uLWdyb3VwZWQgcmVsYXRpb24gdGhhdCBpcyBub3QKKwkJICog YXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5zdXJlIHRoYXQgaXQgcHJvdmlk ZXMgdGhlCisJCSAqIGNvcnJlY3QgaW5wdXQgZm9yIHBhcnRpYWwgYWdncmVnYXRpb24uCisJCSAq LworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJ CQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfcGFydGlhbF9wYXRo LAorCQkJCQkJCQkJCQkgICBhZ2dfaW5mby0+YWdnX2lucHV0KTsKKworCQkvKgorCQkgKiBxdWFs IGlzIE5JTCBiZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50 aWwgdGhlCisJCSAqIGZpbmFsIHZhbHVlIG9mIHRoZSBhZ2dyZWdhdGUgaXMga25vd24uCisJCSAq LworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJcmVs X2dyb3VwZWQsCisJCQkJCQkJCQkJcGF0aCwKKwkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0LAor CQkJCQkJCQkJCUFHR19IQVNIRUQsCisJCQkJCQkJCQkJQUdHU1BMSVRfSU5JVElBTF9TRVJJQUws CisJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJTklMLAorCQkJ CQkJCQkJCSZhZ2dfY29zdHMsCisJCQkJCQkJCQkJZE51bVBhcnRpYWxHcm91cHMpOworCisJCWFk ZF9wYXJ0aWFsX3BhdGgocmVsX2dyb3VwZWQsIHBhdGgpOworCX0KK30KKwogLyoKICAqIG1ha2Vf cmVsX2Zyb21fam9pbmxpc3QKICAqCSAgQnVpbGQgYWNjZXNzIHBhdGhzIHVzaW5nIGEgImpvaW5s aXN0IiB0byBndWlkZSB0aGUgam9pbiBwYXRoIHNlYXJjaC4KQEAgLTM0MTQsOSArMzgxNCwxMCBA QCBtYWtlX3JlbF9mcm9tX2pvaW5saXN0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlz dCkKICAqIG5lZWRlZCBmb3IgdGhlc2UgcGF0aHMgbmVlZCBoYXZlIGJlZW4gaW5zdGFudGlhdGVk LgogICoKICAqIE5vdGUgdG8gcGx1Z2luIGF1dGhvcnM6IHRoZSBmdW5jdGlvbnMgaW52b2tlZCBk dXJpbmcgc3RhbmRhcmRfam9pbl9zZWFyY2goKQotICogbW9kaWZ5IHJvb3QtPmpvaW5fcmVsX2xp c3QgYW5kIHJvb3QtPmpvaW5fcmVsX2hhc2guICBJZiB5b3Ugd2FudCB0byBkbyBtb3JlCi0gKiB0 aGFuIG9uZSBqb2luLW9yZGVyIHNlYXJjaCwgeW91J2xsIHByb2JhYmx5IG5lZWQgdG8gc2F2ZSBh bmQgcmVzdG9yZSB0aGUKLSAqIG9yaWdpbmFsIHN0YXRlcyBvZiB0aG9zZSBkYXRhIHN0cnVjdHVy ZXMuICBTZWUgZ2Vxb19ldmFsKCkgZm9yIGFuIGV4YW1wbGUuCisgKiBtb2RpZnkgcm9vdC0+am9p bl9yZWxfbGlzdC0+aXRlbXMgYW5kIHJvb3QtPmpvaW5fcmVsX2xpc3QtPmhhc2guICBJZiB5b3UK KyAqIHdhbnQgdG8gZG8gbW9yZSB0aGFuIG9uZSBqb2luLW9yZGVyIHNlYXJjaCwgeW91J2xsIHBy b2JhYmx5IG5lZWQgdG8gc2F2ZSBhbmQKKyAqIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHN0YXRlcyBv ZiB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuICBTZWUgZ2Vxb19ldmFsKCkgZm9yCisgKiBhbiBleGFt cGxlLgogICovCiBSZWxPcHRJbmZvICoKIHN0YW5kYXJkX2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZv ICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAqaW5pdGlhbF9yZWxzKQpAQCAtMzQ2NSw2 ICszODY2LDEwIEBAIHN0YW5kYXJkX2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZvICpyb290LCBpbnQg bGV2ZWxzX25lZWRlZCwgTGlzdCAqaW5pdGlhbF9yZWxzKQogCQkgKgogCQkgKiBBZnRlciB0aGF0 LCB3ZSdyZSBkb25lIGNyZWF0aW5nIHBhdGhzIGZvciB0aGUgam9pbnJlbCwgc28gcnVuCiAJCSAq IHNldF9jaGVhcGVzdCgpLgorCQkgKgorCQkgKiBJbiBhZGRpdGlvbiwgd2UgYWxzbyBydW4gZ2Vu ZXJhdGVfZ3JvdXBlZF9wYXRocygpIGZvciB0aGUgZ3JvdXBlZAorCQkgKiByZWxhdGlvbiBvZiBl YWNoIGp1c3QtcHJvY2Vzc2VkIGpvaW5yZWwsIGFuZCBydW4gc2V0X2NoZWFwZXN0KCkgZm9yCisJ CSAqIHRoZSBncm91cGVkIHJlbGF0aW9uIGFmdGVyd2FyZHMuCiAJCSAqLwogCQlmb3JlYWNoKGxj LCByb290LT5qb2luX3JlbF9sZXZlbFtsZXZdKQogCQl7CkBAIC0zNDg1LDYgKzM4OTAsMjcgQEAg c3RhbmRhcmRfam9pbl9zZWFyY2goUGxhbm5lckluZm8gKnJvb3QsIGludCBsZXZlbHNfbmVlZGVk LCBMaXN0ICppbml0aWFsX3JlbHMpCiAJCQkvKiBGaW5kIGFuZCBzYXZlIHRoZSBjaGVhcGVzdCBw YXRocyBmb3IgdGhpcyByZWwgKi8KIAkJCXNldF9jaGVhcGVzdChyZWwpOwogCisJCQkvKgorCQkJ ICogRXhjZXB0IGZvciB0aGUgdG9wbW9zdCBzY2FuL2pvaW4gcmVsLCBjb25zaWRlciBnZW5lcmF0 aW5nCisJCQkgKiBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBlZCByZWxh dGlvbiBvbiB0b3Agb2YKKwkJCSAqIHRoZSBwYXRocyBvZiB0aGlzIHJlbC4gIEFmdGVyIHRoYXQs IHdlJ3JlIGRvbmUgY3JlYXRpbmcgcGF0aHMKKwkJCSAqIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlv biwgc28gcnVuIHNldF9jaGVhcGVzdCgpLgorCQkJICovCisJCQlpZiAoIWJtc19lcXVhbChyZWwt PnJlbGlkcywgcm9vdC0+YWxsX3F1ZXJ5X3JlbHMpKQorCQkJeworCQkJCVJlbE9wdEluZm8gKnJl bF9ncm91cGVkOworCisJCQkJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIHJl bC0+cmVsaWRzKTsKKwkJCQlpZiAocmVsX2dyb3VwZWQpCisJCQkJeworCQkJCQlBc3NlcnQoSVNf R1JPVVBFRF9SRUwocmVsX2dyb3VwZWQpKTsKKworCQkJCQlnZW5lcmF0ZV9ncm91cGVkX3BhdGhz KHJvb3QsIHJlbF9ncm91cGVkLCByZWwsCisJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQtPmFnZ19p bmZvKTsKKwkJCQkJc2V0X2NoZWFwZXN0KHJlbF9ncm91cGVkKTsKKwkJCQl9CisJCQl9CisKICNp ZmRlZiBPUFRJTUlaRVJfREVCVUcKIAkJCXBwcmludChyZWwpOwogI2VuZGlmCkBAIC00MzUzLDYg KzQ3NzksMjkgQEAgZ2VuZXJhdGVfcGFydGl0aW9ud2lzZV9qb2luX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwpCiAJCWlmIChJU19EVU1NWV9SRUwoY2hpbGRfcmVsKSkK IAkJCWNvbnRpbnVlOwogCisJCS8qCisJCSAqIEV4Y2VwdCBmb3IgdGhlIHRvcG1vc3Qgc2Nhbi9q b2luIHJlbCwgY29uc2lkZXIgZ2VuZXJhdGluZyBwYXJ0aWFsCisJCSAqIGFnZ3JlZ2F0aW9uIHBh dGhzIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiBvbiB0b3Agb2YgdGhlIHBhdGhzIG9mCisJCSAq IHRoaXMgcGFydGl0aW9uZWQgY2hpbGQtam9pbi4gIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUgY3Jl YXRpbmcgcGF0aHMKKwkJICogZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uLCBzbyBydW4gc2V0X2No ZWFwZXN0KCkuCisJCSAqLworCQlpZiAoIWJtc19lcXVhbChJU19PVEhFUl9SRUwocmVsKSA/CisJ CQkJCSAgIHJlbC0+dG9wX3BhcmVudF9yZWxpZHMgOiByZWwtPnJlbGlkcywKKwkJCQkJICAgcm9v dC0+YWxsX3F1ZXJ5X3JlbHMpKQorCQl7CisJCQlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKwor CQkJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIGNoaWxkX3JlbC0+cmVsaWRz KTsKKwkJCWlmIChyZWxfZ3JvdXBlZCkKKwkJCXsKKwkJCQlBc3NlcnQoSVNfR1JPVVBFRF9SRUwo cmVsX2dyb3VwZWQpKTsKKworCQkJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dy b3VwZWQsIGNoaWxkX3JlbCwKKwkJCQkJCQkJCSAgIHJlbF9ncm91cGVkLT5hZ2dfaW5mbyk7CisJ CQkJc2V0X2NoZWFwZXN0KHJlbF9ncm91cGVkKTsKKwkJCX0KKwkJfQorCiAjaWZkZWYgT1BUSU1J WkVSX0RFQlVHCiAJCXBwcmludChjaGlsZF9yZWwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvY29zdHNpemUuYwppbmRleCBjMzY2ODdhYTRkLi5jMDkzYjQ3YWY0IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE4MCw2ICsxODAsOCBAQCBzdGF0aWMgYm9v bCBjb3N0X3F1YWxfZXZhbF93YWxrZXIoTm9kZSAqbm9kZSwgY29zdF9xdWFsX2V2YWxfY29udGV4 dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfcmVzdHJpY3Rpb25fcXVhbF9jb3N0KFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVsLAogCQkJCQkJCQkJICBQYXJhbVBhdGhJ bmZvICpwYXJhbV9pbmZvLAogCQkJCQkJCQkJICBRdWFsQ29zdCAqcXBxdWFsX2Nvc3QpOworc3Rh dGljIHZvaWQgc2V0X2pvaW5wYXRoX3NpemUoUGxhbm5lckluZm8gKnJvb3QsIEpvaW5QYXRoICpq cGF0aCwKKwkJCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKIHN0YXRpYyBib29sIGhh c19pbmRleGVkX2pvaW5fcXVhbHMoTmVzdFBhdGggKnBhdGgpOwogc3RhdGljIGRvdWJsZSBhcHBy b3hfdHVwbGVfY291bnQoUGxhbm5lckluZm8gKnJvb3QsIEpvaW5QYXRoICpwYXRoLAogCQkJCQkJ CQkgTGlzdCAqcXVhbHMpOwpAQCAtMzM3MCwxOSArMzM3Miw3IEBAIGZpbmFsX2Nvc3RfbmVzdGxv b3AoUGxhbm5lckluZm8gKnJvb3QsIE5lc3RQYXRoICpwYXRoLAogCWlmIChpbm5lcl9wYXRoX3Jv d3MgPD0gMCkKIAkJaW5uZXJfcGF0aF9yb3dzID0gMTsKIAkvKiBNYXJrIHRoZSBwYXRoIHdpdGgg dGhlIGNvcnJlY3Qgcm93IGVzdGltYXRlICovCi0JaWYgKHBhdGgtPmpwYXRoLnBhdGgucGFyYW1f aW5mbykKLQkJcGF0aC0+anBhdGgucGF0aC5yb3dzID0gcGF0aC0+anBhdGgucGF0aC5wYXJhbV9p bmZvLT5wcGlfcm93czsKLQllbHNlCi0JCXBhdGgtPmpwYXRoLnBhdGgucm93cyA9IHBhdGgtPmpw YXRoLnBhdGgucGFyZW50LT5yb3dzOwotCi0JLyogRm9yIHBhcnRpYWwgcGF0aHMsIHNjYWxlIHJv dyBlc3RpbWF0ZS4gKi8KLQlpZiAocGF0aC0+anBhdGgucGF0aC5wYXJhbGxlbF93b3JrZXJzID4g MCkKLQl7Ci0JCWRvdWJsZQkJcGFyYWxsZWxfZGl2aXNvciA9IGdldF9wYXJhbGxlbF9kaXZpc29y KCZwYXRoLT5qcGF0aC5wYXRoKTsKLQotCQlwYXRoLT5qcGF0aC5wYXRoLnJvd3MgPQotCQkJY2xh bXBfcm93X2VzdChwYXRoLT5qcGF0aC5wYXRoLnJvd3MgLyBwYXJhbGxlbF9kaXZpc29yKTsKLQl9 CisJc2V0X2pvaW5wYXRoX3NpemUocm9vdCwgJnBhdGgtPmpwYXRoLCBleHRyYS0+c2ppbmZvKTsK IAogCS8qIGNvc3Qgb2YgaW5uZXItcmVsYXRpb24gc291cmNlIGRhdGEgKHdlIGFscmVhZHkgZGVh bHQgd2l0aCBvdXRlciByZWwpICovCiAKQEAgLTM4NjcsMTkgKzM4NTcsNyBAQCBmaW5hbF9jb3N0 X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VQYXRoICpwYXRoLAogCQlpbm5lcl9w YXRoX3Jvd3MgPSAxOwogCiAJLyogTWFyayB0aGUgcGF0aCB3aXRoIHRoZSBjb3JyZWN0IHJvdyBl c3RpbWF0ZSAqLwotCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBhcmFtX2luZm8pCi0JCXBhdGgtPmpw YXRoLnBhdGgucm93cyA9IHBhdGgtPmpwYXRoLnBhdGgucGFyYW1faW5mby0+cHBpX3Jvd3M7Ci0J ZWxzZQotCQlwYXRoLT5qcGF0aC5wYXRoLnJvd3MgPSBwYXRoLT5qcGF0aC5wYXRoLnBhcmVudC0+ cm93czsKLQotCS8qIEZvciBwYXJ0aWFsIHBhdGhzLCBzY2FsZSByb3cgZXN0aW1hdGUuICovCi0J aWYgKHBhdGgtPmpwYXRoLnBhdGgucGFyYWxsZWxfd29ya2VycyA+IDApCi0JewotCQlkb3VibGUJ CXBhcmFsbGVsX2Rpdmlzb3IgPSBnZXRfcGFyYWxsZWxfZGl2aXNvcigmcGF0aC0+anBhdGgucGF0 aCk7Ci0KLQkJcGF0aC0+anBhdGgucGF0aC5yb3dzID0KLQkJCWNsYW1wX3Jvd19lc3QocGF0aC0+ anBhdGgucGF0aC5yb3dzIC8gcGFyYWxsZWxfZGl2aXNvcik7Ci0JfQorCXNldF9qb2lucGF0aF9z aXplKHJvb3QsICZwYXRoLT5qcGF0aCwgZXh0cmEtPnNqaW5mbyk7CiAKIAkvKgogCSAqIENvbXB1 dGUgY29zdCBvZiB0aGUgbWVyZ2VxdWFscyBhbmQgcXBxdWFscyAob3RoZXIgcmVzdHJpY3Rpb24g Y2xhdXNlcykKQEAgLTQyOTksMTkgKzQyNzcsNyBAQCBmaW5hbF9jb3N0X2hhc2hqb2luKFBsYW5u ZXJJbmZvICpyb290LCBIYXNoUGF0aCAqcGF0aCwKIAlwYXRoLT5qcGF0aC5wYXRoLmRpc2FibGVk X25vZGVzID0gd29ya3NwYWNlLT5kaXNhYmxlZF9ub2RlczsKIAogCS8qIE1hcmsgdGhlIHBhdGgg d2l0aCB0aGUgY29ycmVjdCByb3cgZXN0aW1hdGUgKi8KLQlpZiAocGF0aC0+anBhdGgucGF0aC5w YXJhbV9pbmZvKQotCQlwYXRoLT5qcGF0aC5wYXRoLnJvd3MgPSBwYXRoLT5qcGF0aC5wYXRoLnBh cmFtX2luZm8tPnBwaV9yb3dzOwotCWVsc2UKLQkJcGF0aC0+anBhdGgucGF0aC5yb3dzID0gcGF0 aC0+anBhdGgucGF0aC5wYXJlbnQtPnJvd3M7Ci0KLQkvKiBGb3IgcGFydGlhbCBwYXRocywgc2Nh bGUgcm93IGVzdGltYXRlLiAqLwotCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBhcmFsbGVsX3dvcmtl cnMgPiAwKQotCXsKLQkJZG91YmxlCQlwYXJhbGxlbF9kaXZpc29yID0gZ2V0X3BhcmFsbGVsX2Rp dmlzb3IoJnBhdGgtPmpwYXRoLnBhdGgpOwotCi0JCXBhdGgtPmpwYXRoLnBhdGgucm93cyA9Ci0J CQljbGFtcF9yb3dfZXN0KHBhdGgtPmpwYXRoLnBhdGgucm93cyAvIHBhcmFsbGVsX2Rpdmlzb3Ip OwotCX0KKwlzZXRfam9pbnBhdGhfc2l6ZShyb290LCAmcGF0aC0+anBhdGgsIGV4dHJhLT5zamlu Zm8pOwogCiAJLyogbWFyayB0aGUgcGF0aCB3aXRoIGVzdGltYXRlZCAjIG9mIGJhdGNoZXMgKi8K IAlwYXRoLT5udW1fYmF0Y2hlcyA9IG51bWJhdGNoZXM7CkBAIC01MDYxLDYgKzUwMjcsNTcgQEAg Z2V0X3Jlc3RyaWN0aW9uX3F1YWxfY29zdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq YmFzZXJlbCwKIAkJKnFwcXVhbF9jb3N0ID0gYmFzZXJlbC0+YmFzZXJlc3RyaWN0Y29zdDsKIH0K IAorLyoKKyAqIHNldF9qb2lucGF0aF9zaXplCisgKgkgIFNldCB0aGUgY29ycmVjdCByb3cgZXN0 aW1hdGUgZm9yIHRoZSBnaXZlbiBqb2luIHBhdGguCisgKgorICogJ2pwYXRoJyBpcyB0aGUgam9p biBwYXRoIHVuZGVyIGNvbnNpZGVyYXRpb24uCisgKiAnc2ppbmZvJyBpcyBhbnkgU3BlY2lhbEpv aW5JbmZvIHJlbGV2YW50IHRvIHRoaXMgam9pbi4KKyAqCisgKiBOb3RlIHRoYXQgZm9yIGEgZ3Jv dXBlZCBqb2luIHJlbGF0aW9uLCBpdHMgcGF0aHMgY291bGQgaGF2ZSB2ZXJ5IGRpZmZlcmVudAor ICogcm93Y291bnQgZXN0aW1hdGVzLCBzbyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgcm93Y291 bnQgZXN0aW1hdGUgdXNpbmcgdGhlCisgKiBvdXRlciBwYXRoIGFuZCBpbm5lciBwYXRoIG9mIHRo ZSBnaXZlbiBqb2luIHBhdGguCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfam9pbnBhdGhfc2l6ZShQ bGFubmVySW5mbyAqcm9vdCwgSm9pblBhdGggKmpwYXRoLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5m bykKK3sKKwlpZiAoSVNfR1JPVVBFRF9SRUwoanBhdGgtPnBhdGgucGFyZW50KSkKKwl7CisJCVBh dGgJICAgKm91dGVyX3BhdGggPSBqcGF0aC0+b3V0ZXJqb2lucGF0aDsKKwkJUGF0aAkgICAqaW5u ZXJfcGF0aCA9IGpwYXRoLT5pbm5lcmpvaW5wYXRoOworCisJCS8qCisJCSAqIEVzdGltYXRlIHRo ZSBudW1iZXIgb2Ygcm93cyBvZiB0aGlzIGdyb3VwZWQgam9pbiBwYXRoIGFzIHRoZSBzaXplcwor CQkgKiBvZiB0aGUgb3V0ZXIgYW5kIGlubmVyIHBhdGhzIHRpbWVzIHRoZSBzZWxlY3Rpdml0eSBv ZiB0aGUgY2xhdXNlcworCQkgKiB0aGF0IGhhdmUgZW5kZWQgdXAgYXQgdGhpcyBqb2luIG5vZGUu CisJCSAqLworCQlqcGF0aC0+cGF0aC5yb3dzID0gY2FsY19qb2lucmVsX3NpemVfZXN0aW1hdGUo cm9vdCwKKwkJCQkJCQkJCQkJCQkgIGpwYXRoLT5wYXRoLnBhcmVudCwKKwkJCQkJCQkJCQkJCQkg IG91dGVyX3BhdGgtPnBhcmVudCwKKwkJCQkJCQkJCQkJCQkgIGlubmVyX3BhdGgtPnBhcmVudCwK KwkJCQkJCQkJCQkJCQkgIG91dGVyX3BhdGgtPnJvd3MsCisJCQkJCQkJCQkJCQkJICBpbm5lcl9w YXRoLT5yb3dzLAorCQkJCQkJCQkJCQkJCSAgc2ppbmZvLAorCQkJCQkJCQkJCQkJCSAganBhdGgt PmpvaW5yZXN0cmljdGluZm8pOworCX0KKwllbHNlCisJeworCQlpZiAoanBhdGgtPnBhdGgucGFy YW1faW5mbykKKwkJCWpwYXRoLT5wYXRoLnJvd3MgPSBqcGF0aC0+cGF0aC5wYXJhbV9pbmZvLT5w cGlfcm93czsKKwkJZWxzZQorCQkJanBhdGgtPnBhdGgucm93cyA9IGpwYXRoLT5wYXRoLnBhcmVu dC0+cm93czsKKworCQkvKiBGb3IgcGFydGlhbCBwYXRocywgc2NhbGUgcm93IGVzdGltYXRlLiAq LworCQlpZiAoanBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA+IDApCisJCXsKKwkJCWRvdWJs ZQkJcGFyYWxsZWxfZGl2aXNvciA9IGdldF9wYXJhbGxlbF9kaXZpc29yKCZqcGF0aC0+cGF0aCk7 CisKKwkJCWpwYXRoLT5wYXRoLnJvd3MgPQorCQkJCWNsYW1wX3Jvd19lc3QoanBhdGgtPnBhdGgu cm93cyAvIHBhcmFsbGVsX2Rpdmlzb3IpOworCQl9CisJfQorfQorCiAKIC8qCiAgKiBjb21wdXRl X3NlbWlfYW50aV9qb2luX2ZhY3RvcnMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2pvaW5yZWxzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5j CmluZGV4IDdkYjVlMzBlZWYuLjIwNjk4ZTQ4ZjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2pvaW5yZWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv am9pbnJlbHMuYwpAQCAtMzUsNiArMzUsOSBAQCBzdGF0aWMgYm9vbCBoYXNfbGVnYWxfam9pbmNs YXVzZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKIHN0YXRpYyBib29sIHJl c3RyaWN0aW9uX2lzX2NvbnN0YW50X2ZhbHNlKExpc3QgKnJlc3RyaWN0bGlzdCwKIAkJCQkJCQkJ CQkgIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkJCQkJICBib29sIG9ubHlfcHVzaGVkX2Rv d24pOworc3RhdGljIHZvaWQgbWFrZV9ncm91cGVkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwxLAorCQkJCQkJCQkgIFJlbE9wdEluZm8gKnJlbDIsIFJlbE9wdElu Zm8gKmpvaW5yZWwsCisJCQkJCQkJCSAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sIExpc3QgKnJl c3RyaWN0bGlzdCk7CiBzdGF0aWMgdm9pZCBwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsCiAJCQkJCQkJCQkJUmVsT3B0SW5mbyAq cmVsMiwgUmVsT3B0SW5mbyAqam9pbnJlbCwKIAkJCQkJCQkJCQlTcGVjaWFsSm9pbkluZm8gKnNq aW5mbywgTGlzdCAqcmVzdHJpY3RsaXN0KTsKQEAgLTc3MSw2ICs3NzQsMTAgQEAgbWFrZV9qb2lu X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVs MikKIAkJcmV0dXJuIGpvaW5yZWw7CiAJfQogCisJLyogQnVpbGQgYSBncm91cGVkIGpvaW4gcmVs YXRpb24gZm9yICdqb2lucmVsJyBpZiBwb3NzaWJsZS4gKi8KKwltYWtlX2dyb3VwZWRfam9pbl9y ZWwocm9vdCwgcmVsMSwgcmVsMiwgam9pbnJlbCwgc2ppbmZvLAorCQkJCQkJICByZXN0cmljdGxp c3QpOworCiAJLyogQWRkIHBhdGhzIHRvIHRoZSBqb2luIHJlbGF0aW9uLiAqLwogCXBvcHVsYXRl X2pvaW5yZWxfd2l0aF9wYXRocyhyb290LCByZWwxLCByZWwyLCBqb2lucmVsLCBzamluZm8sCiAJ CQkJCQkJCXJlc3RyaWN0bGlzdCk7CkBAIC04ODIsNiArODg5LDE0MSBAQCBhZGRfb3V0ZXJfam9p bnNfdG9fcmVsaWRzKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgaW5wdXRfcmVsaWRzLAogCXJl dHVybiBpbnB1dF9yZWxpZHM7CiB9CiAKKy8qCisgKiBtYWtlX2dyb3VwZWRfam9pbl9yZWwKKyAq CSAgQnVpbGQgYSBncm91cGVkIGpvaW4gcmVsYXRpb24gb3V0IG9mICdqb2lucmVsJyBpZiBlYWdl ciBhZ2dyZWdhdGlvbiBpcworICoJICBwb3NzaWJsZSBhbmQgdGhlICdqb2lucmVsJyBjYW4gcHJv ZHVjZSBncm91cGVkIHBhdGhzLgorICoKKyAqIFdlIGFsc28gZ2VuZXJhdGUgcGFydGlhbCBhZ2dy ZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gYnkKKyAqIGpvaW5pbmcgdGhl IGdyb3VwZWQgcGF0aHMgb2YgJ3JlbDEnIHRvIHRoZSBwbGFpbiBwYXRocyBvZiAncmVsMicsIG9y IGJ5CisgKiBqb2luaW5nIHRoZSBncm91cGVkIHBhdGhzIG9mICdyZWwyJyB0byB0aGUgcGxhaW4g cGF0aHMgb2YgJ3JlbDEnLgorICovCitzdGF0aWMgdm9pZAorbWFrZV9ncm91cGVkX2pvaW5fcmVs KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLAorCQkJCQkgIFJlbE9wdEluZm8g KnJlbDIsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCSAgU3BlY2lhbEpvaW5JbmZvICpzamlu Zm8sIExpc3QgKnJlc3RyaWN0bGlzdCkKK3sKKwlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKwlS ZWxPcHRJbmZvICpyZWwxX2dyb3VwZWQ7CisJUmVsT3B0SW5mbyAqcmVsMl9ncm91cGVkOworCWJv b2wJCXJlbDFfZW1wdHk7CisJYm9vbAkJcmVsMl9lbXB0eTsKKwlib29sCQl5ZXRfdG9fYWRkID0g ZmFsc2U7CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMg b3IgZ3JvdXBpbmcgZXhwcmVzc2lvbnMsIGVhZ2VyCisJICogYWdncmVnYXRpb24gaXMgbm90IHBv c3NpYmxlLgorCSAqLworCWlmIChyb290LT5hZ2dfY2xhdXNlX2xpc3QgPT0gTklMIHx8CisJCXJv b3QtPmdyb3VwX2V4cHJfbGlzdCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qCisJICogU2VlIGlm IHdlIGFscmVhZHkgaGF2ZSBhIGdyb3VwZWQgam9pbnJlbCBmb3IgdGhpcyBqb2lucmVsLgorCSAq LworCXJlbF9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCBqb2lucmVsLT5yZWxpZHMp OworCisJLyoKKwkgKiBDb25zdHJ1Y3QgYSBuZXcgUmVsT3B0SW5mbyBmb3IgdGhlIGdyb3VwZWQg am9pbiByZWxhdGlvbiBpZiB0aGVyZSBpcyBubworCSAqIGV4aXN0aW5nIG9uZS4KKwkgKi8KKwlp ZiAocmVsX2dyb3VwZWQgPT0gTlVMTCkKKwl7CisJCVJlbEFnZ0luZm8gKmFnZ19pbmZvID0gTlVM TDsKKworCQkvKgorCQkgKiBQcmVwYXJlIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRl IGdyb3VwZWQgcGF0aHMgZm9yIHRoaXMKKwkJICogam9pbiByZWxhdGlvbi4KKwkJICovCisJCWFn Z19pbmZvID0gY3JlYXRlX3JlbF9hZ2dfaW5mbyhyb290LCBqb2lucmVsKTsKKwkJaWYgKGFnZ19p bmZvID09IE5VTEwpCisJCQlyZXR1cm47CisKKwkJLyogYnVpbGQgYSBncm91cGVkIHJlbGF0aW9u IG91dCBvZiB0aGUgcGxhaW4gcmVsYXRpb24gKi8KKwkJcmVsX2dyb3VwZWQgPSBidWlsZF9ncm91 cGVkX3JlbChyb290LCBqb2lucmVsKTsKKwkJcmVsX2dyb3VwZWQtPnJlbHRhcmdldCA9IGFnZ19p bmZvLT50YXJnZXQ7CisJCXJlbF9ncm91cGVkLT5yb3dzID0gYWdnX2luZm8tPmdyb3VwZWRfcm93 czsKKwkJcmVsX2dyb3VwZWQtPmFnZ19pbmZvID0gYWdnX2luZm87CisKKwkJLyoKKwkJICogSWYg dGhlIGdyb3VwZWQgcGF0aHMgZm9yIHRoZSBnaXZlbiBqb2luIHJlbGF0aW9uIGFyZSBjb25zaWRl cmVkCisJCSAqIHVzZWZ1bCwgYWRkIHRoZSBncm91cGVkIHJlbGF0aW9uIHdlIGp1c3QgYnVpbHQg dG8gdGhlIFBsYW5uZXJJbmZvCisJCSAqIHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBmdXJ0aGVy IGpvaW5pbmcgb3IgZm9yIGFjdGluZyBhcyB0aGUgdXBwZXIKKwkJICogcmVsIHJlcHJlc2VudGlu ZyB0aGUgcmVzdWx0IG9mIHBhcnRpYWwgYWdncmVnYXRpb24uICBPdGhlcndpc2UsIHdlCisJCSAq IG5lZWQgdG8gcG9zdHBvbmUgdGhlIGRlY2lzaW9uIG9uIGFkZGluZyB0aGUgZ3JvdXBlZCByZWxh dGlvbiB0byB0aGUKKwkJICogUGxhbm5lckluZm8sIGFzIGl0IGRlcGVuZHMgb24gd2hldGhlciB3 ZSBjYW4gZ2VuZXJhdGUgYW55IGdyb3VwZWQKKwkJICogcGF0aHMgYnkgam9pbmluZyB0aGUgZ2l2 ZW4gcGFpciBvZiBpbnB1dCByZWxhdGlvbnMuCisJCSAqLworCQlpZiAoYWdnX2luZm8tPmFnZ191 c2VmdWwpCisJCQlhZGRfZ3JvdXBlZF9yZWwocm9vdCwgcmVsX2dyb3VwZWQpOworCQllbHNlCisJ CQl5ZXRfdG9fYWRkID0gdHJ1ZTsKKwl9CisKKwlBc3NlcnQoSVNfR1JPVVBFRF9SRUwocmVsX2dy b3VwZWQpKTsKKworCS8qIFdlIG1heSBoYXZlIGFscmVhZHkgcHJvdmVuIHRoaXMgZ3JvdXBlZCBq b2luIHJlbGF0aW9uIHRvIGJlIGR1bW15LiAqLworCWlmIChJU19EVU1NWV9SRUwocmVsX2dyb3Vw ZWQpKQorCQlyZXR1cm47CisKKwkvKiBSZXRyaWV2ZSB0aGUgZ3JvdXBlZCByZWxhdGlvbnMgZm9y IHRoZSB0d28gaW5wdXQgcmVscyAqLworCXJlbDFfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwo cm9vdCwgcmVsMS0+cmVsaWRzKTsKKwlyZWwyX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJv b3QsIHJlbDItPnJlbGlkcyk7CisKKwlyZWwxX2VtcHR5ID0gKHJlbDFfZ3JvdXBlZCA9PSBOVUxM IHx8IElTX0RVTU1ZX1JFTChyZWwxX2dyb3VwZWQpKTsKKwlyZWwyX2VtcHR5ID0gKHJlbDJfZ3Jv dXBlZCA9PSBOVUxMIHx8IElTX0RVTU1ZX1JFTChyZWwyX2dyb3VwZWQpKTsKKworCS8qIE5vdGhp bmcgdG8gZG8gaWYgdGhlcmUncyBubyBncm91cGVkIHJlbGF0aW9uLiAqLworCWlmIChyZWwxX2Vt cHR5ICYmIHJlbDJfZW1wdHkpCisJCXJldHVybjsKKworCS8qCisJICogSm9pbmluZyB0d28gZ3Jv dXBlZCByZWxhdGlvbnMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuICBHcm91cGluZyBvbmUK KwkgKiBzaWRlIHdvdWxkIGFsdGVyIHRoZSBvY2N1cnJlbmNlIG9mIHRoZSBvdGhlciBzaWRlJ3Mg YWdncmVnYXRlIHRyYW5zaWVudAorCSAqIHN0YXRlcyBpbiB0aGUgZmluYWwgYWdncmVnYXRpb24g aW5wdXQuICBXaGlsZSB0aGlzIGlzc3VlIGNvdWxkIGJlCisJICogYWRkcmVzc2VkIGJ5IGFkanVz dGluZyB0aGUgdHJhbnNpZW50IHN0YXRlcywgaXQgaXMgbm90IGRlZW1lZAorCSAqIHdvcnRod2hp bGUgZm9yIG5vdy4KKwkgKi8KKwlpZiAoIXJlbDFfZW1wdHkgJiYgIXJlbDJfZW1wdHkpCisJCXJl dHVybjsKKworCS8qIEdlbmVyYXRlIHBhcnRpYWwgYWdncmVnYXRpb24gcGF0aHMgZm9yIHRoZSBn cm91cGVkIHJlbGF0aW9uICovCisJaWYgKCFyZWwxX2VtcHR5KQorCXsKKwkJcG9wdWxhdGVfam9p bnJlbF93aXRoX3BhdGhzKHJvb3QsIHJlbDFfZ3JvdXBlZCwgcmVsMiwgcmVsX2dyb3VwZWQsCisJ CQkJCQkJCQlzamluZm8sIHJlc3RyaWN0bGlzdCk7CisKKwkJLyoKKwkJICogSXQgc2hvdWxkbid0 IGhhcHBlbiB0aGF0IHdlIGhhdmUgbWFya2VkIHJlbDFfZ3JvdXBlZCBhcyBkdW1teSBpbgorCQkg KiBwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMgZHVlIHRvIHByb3ZhYmx5IGNvbnN0YW50LWZh bHNlIGpvaW4KKwkJICogcmVzdHJpY3Rpb25zLCBoZW5jZSB3ZSB3b3VsZG4ndCBlbmQgdXAgd2l0 aCBhIHBsYW4gdGhhdCBoYXMgQWdncmVmCisJCSAqIGluIG5vbi1BZ2cgcGxhbiBub2RlLgorCQkg Ki8KKwkJQXNzZXJ0KCFJU19EVU1NWV9SRUwocmVsMV9ncm91cGVkKSk7CisJfQorCWVsc2UgaWYg KCFyZWwyX2VtcHR5KQorCXsKKwkJcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzKHJvb3QsIHJl bDEsIHJlbDJfZ3JvdXBlZCwgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQlzamluZm8sIHJlc3RyaWN0 bGlzdCk7CisKKwkJLyoKKwkJICogSXQgc2hvdWxkbid0IGhhcHBlbiB0aGF0IHdlIGhhdmUgbWFy a2VkIHJlbDJfZ3JvdXBlZCBhcyBkdW1teSBpbgorCQkgKiBwb3B1bGF0ZV9qb2lucmVsX3dpdGhf cGF0aHMgZHVlIHRvIHByb3ZhYmx5IGNvbnN0YW50LWZhbHNlIGpvaW4KKwkJICogcmVzdHJpY3Rp b25zLCBoZW5jZSB3ZSB3b3VsZG4ndCBlbmQgdXAgd2l0aCBhIHBsYW4gdGhhdCBoYXMgQWdncmVm CisJCSAqIGluIG5vbi1BZ2cgcGxhbiBub2RlLgorCQkgKi8KKwkJQXNzZXJ0KCFJU19EVU1NWV9S RUwocmVsMl9ncm91cGVkKSk7CisJfQorCisJLyoKKwkgKiBTaW5jZSB3ZSBoYXZlIGdlbmVyYXRl ZCBncm91cGVkIHBhdGhzIGJ5IGpvaW5pbmcgdGhlIGdpdmVuIHBhaXIgb2YKKwkgKiBpbnB1dCBy ZWxhdGlvbnMsIGFkZCB0aGUgZ3JvdXBlZCByZWxhdGlvbiB0byB0aGUgUGxhbm5lckluZm8gaWYg d2UgaGF2ZQorCSAqIG5vdCBhbHJlYWR5IGRvbmUgc28uCisJICovCisJaWYgKHlldF90b19hZGQp CisJCWFkZF9ncm91cGVkX3JlbChyb290LCByZWxfZ3JvdXBlZCk7Cit9CisKIC8qCiAgKiBwb3B1 bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMKICAqCSAgQWRkIHBhdGhzIHRvIHRoZSBnaXZlbiBqb2lu cmVsIGZvciBnaXZlbiBwYWlyIG9mIGpvaW5pbmcgcmVsYXRpb25zLiBUaGUKQEAgLTE2NzQsNiAr MTgxNiwxMSBAQCB0cnlfcGFydGl0aW9ud2lzZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCQkJCQkJIGFkanVzdF9jaGlsZF9yZWxp ZHMoam9pbnJlbC0+cmVsaWRzLAogCQkJCQkJCQkJCQkgbmFwcGluZm9zLCBhcHBpbmZvcykpKTsK IAorCQkvKiBCdWlsZCBhIGdyb3VwZWQgam9pbiByZWxhdGlvbiBmb3IgJ2NoaWxkX2pvaW5yZWwn IGlmIHBvc3NpYmxlICovCisJCW1ha2VfZ3JvdXBlZF9qb2luX3JlbChyb290LCBjaGlsZF9yZWwx LCBjaGlsZF9yZWwyLAorCQkJCQkJCSAgY2hpbGRfam9pbnJlbCwgY2hpbGRfc2ppbmZvLAorCQkJ CQkJCSAgY2hpbGRfcmVzdHJpY3RsaXN0KTsKKwogCQkvKiBBbmQgbWFrZSBwYXRocyBmb3IgdGhl IGNoaWxkIGpvaW4gKi8KIAkJcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzKHJvb3QsIGNoaWxk X3JlbDEsIGNoaWxkX3JlbDIsCiAJCQkJCQkJCQljaGlsZF9qb2lucmVsLCBjaGlsZF9zamluZm8s CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCmluZGV4IDVmMzkwOGJlNTEuLjFm NWU2NzBkY2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxh bi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCkBAIC0xNCw2 ICsxNCw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNz L25idHJlZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgpAQCAtODEs NiArODIsOCBAQCB0eXBlZGVmIHN0cnVjdCBKb2luVHJlZUl0ZW0KIH0gSm9pblRyZWVJdGVtOwog CiAKK3N0YXRpYyB2b2lkIGNyZWF0ZV9hZ2dfY2xhdXNlX2luZm9zKFBsYW5uZXJJbmZvICpyb290 KTsKK3N0YXRpYyB2b2lkIGNyZWF0ZV9ncm91cGluZ19leHByX2luZm9zKFBsYW5uZXJJbmZvICpy b290KTsKIHN0YXRpYyB2b2lkIGV4dHJhY3RfbGF0ZXJhbF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpicmVsLAogCQkJCQkJCQkJICAgSW5kZXggcnRpbmRleCk7CiBz dGF0aWMgTGlzdCAqZGVjb25zdHJ1Y3RfcmVjdXJzZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAq anRub2RlLApAQCAtNjI4LDYgKzYzMSwyNjEgQEAgcmVtb3ZlX3VzZWxlc3NfZ3JvdXBieV9jb2x1 bW5zKFBsYW5uZXJJbmZvICpyb290KQogCX0KIH0KIAorLyoKKyAqIHNldHVwX2VhZ2VyX2FnZ3Jl Z2F0aW9uCisgKgkgIENoZWNrIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGFwcGxpY2FibGUsIGFu ZCBpZiBzbyBjb2xsZWN0IHN1aXRhYmxlCisgKgkgIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBhbmQg Z3JvdXBpbmcgZXhwcmVzc2lvbnMgaW4gdGhlIHF1ZXJ5LgorICovCit2b2lkCitzZXR1cF9lYWdl cl9hZ2dyZWdhdGlvbihQbGFubmVySW5mbyAqcm9vdCkKK3sKKwkvKgorCSAqIERvbid0IGFwcGx5 IGVhZ2VyIGFnZ3JlZ2F0aW9uIGlmIGRpc2FibGVkIGJ5IHVzZXIuCisJICovCisJaWYgKCFlbmFi bGVfZWFnZXJfYWdncmVnYXRlKQorCQlyZXR1cm47CisKKwkvKgorCSAqIERvbid0IGFwcGx5IGVh Z2VyIGFnZ3JlZ2F0aW9uIGlmIHRoZXJlIGFyZSBubyBhdmFpbGFibGUgR1JPVVAgQlkKKwkgKiBj bGF1c2VzLgorCSAqLworCWlmICghcm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlKQorCQlyZXR1 cm47CisKKwkvKgorCSAqIEZvciBub3cgd2UgZG9uJ3QgdHJ5IHRvIHN1cHBvcnQgZ3JvdXBpbmcg c2V0cy4KKwkgKi8KKwlpZiAocm9vdC0+cGFyc2UtPmdyb3VwaW5nU2V0cykKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBGb3Igbm93IHdlIGRvbid0IHRyeSB0byBzdXBwb3J0IERJU1RJTkNUIG9yIE9S REVSIEJZIGFnZ3JlZ2F0ZXMuCisJICovCisJaWYgKHJvb3QtPm51bU9yZGVyZWRBZ2dzID4gMCkK KwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGFnZ3JlZ2F0ZXMgdGhhdCBk byBub3Qgc3VwcG9ydCBwYXJ0aWFsIG1vZGUsIG9yIGFueQorCSAqIHBhcnRpYWwgYWdncmVnYXRl cyB0aGF0IGFyZSBub24tc2VyaWFsaXphYmxlLCBkbyBub3QgYXBwbHkgZWFnZXIKKwkgKiBhZ2dy ZWdhdGlvbi4KKwkgKi8KKwlpZiAocm9vdC0+aGFzTm9uUGFydGlhbEFnZ3MgfHwgcm9vdC0+aGFz Tm9uU2VyaWFsQWdncykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBXZSBkb24ndCB0cnkgdG8gYXBw bHkgZWFnZXIgYWdncmVnYXRpb24gaWYgdGhlcmUgYXJlIHNldC1yZXR1cm5pbmcKKwkgKiBmdW5j dGlvbnMgaW4gdGFyZ2V0bGlzdC4KKwkgKi8KKwlpZiAocm9vdC0+cGFyc2UtPmhhc1RhcmdldFNS RnMpCisJCXJldHVybjsKKworCS8qCisJICogRWFnZXIgYWdncmVnYXRpb24gb25seSBtYWtlcyBz ZW5zZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYmFzZSByZWxzIGluCisJICogdGhlIHF1ZXJ5Lgor CSAqLworCWlmIChibXNfbWVtYmVyc2hpcChyb290LT5hbGxfYmFzZXJlbHMpICE9IEJNU19NVUxU SVBMRSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDb2xsZWN0IGFnZ3JlZ2F0ZSBleHByZXNzaW9u cyBhbmQgcGxhaW4gVmFycyB0aGF0IGFwcGVhciBpbiB0YXJnZXRsaXN0CisJICogYW5kIGhhdmlu Z1F1YWwuCisJICovCisJY3JlYXRlX2FnZ19jbGF1c2VfaW5mb3Mocm9vdCk7CisKKwkvKgorCSAq IElmIHRoZXJlIGFyZSBubyBzdWl0YWJsZSBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMsIHdlIGNhbm5v dCBhcHBseSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uLgorCSAqLworCWlmIChyb290LT5hZ2dfY2xh dXNlX2xpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENvbGxlY3QgZ3JvdXBpbmcg ZXhwcmVzc2lvbnMgdGhhdCBhcHBlYXIgaW4gZ3JvdXBpbmcgY2xhdXNlcy4KKwkgKi8KKwljcmVh dGVfZ3JvdXBpbmdfZXhwcl9pbmZvcyhyb290KTsKK30KKworLyoKKyAqIGNyZWF0ZV9hZ2dfY2xh dXNlX2luZm9zCisgKgkgIFNlYXJjaCB0aGUgdGFyZ2V0bGlzdCBhbmQgaGF2aW5nUXVhbCBmb3Ig QWdncmVmcyBhbmQgcGxhaW4gVmFycywgYW5kCisgKgkgIGNyZWF0ZSBhbiBBZ2dDbGF1c2VJbmZv IGZvciBlYWNoIEFnZ3JlZiBub2RlLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2FnZ19jbGF1 c2VfaW5mb3MoUGxhbm5lckluZm8gKnJvb3QpCit7CisJTGlzdAkgICAqdGxpc3RfZXhwcnM7CisJ TGlzdENlbGwgICAqbGM7CisKKwlBc3NlcnQocm9vdC0+YWdnX2NsYXVzZV9saXN0ID09IE5JTCk7 CisJQXNzZXJ0KHJvb3QtPnRsaXN0X3ZhcnMgPT0gTklMKTsKKworCXRsaXN0X2V4cHJzID0gcHVs bF92YXJfY2xhdXNlKChOb2RlICopIHJvb3QtPnByb2Nlc3NlZF90bGlzdCwKKwkJCQkJCQkJICBQ VkNfSU5DTFVERV9BR0dSRUdBVEVTIHwKKwkJCQkJCQkJICBQVkNfUkVDVVJTRV9XSU5ET1dGVU5D UyB8CisJCQkJCQkJCSAgUFZDX1JFQ1VSU0VfUExBQ0VIT0xERVJTKTsKKworCS8qCisJICogQWdn cmVnYXRlcyB3aXRoaW4gdGhlIEhBVklORyBjbGF1c2UgbmVlZCB0byBiZSBwcm9jZXNzZWQgaW4g dGhlIHNhbWUKKwkgKiB3YXkgYXMgdGhvc2UgaW4gdGhlIHRhcmdldGxpc3QuICBOb3RlIHRoYXQg SEFWSU5HIGNhbiBjb250YWluIEFnZ3JlZnMKKwkgKiBidXQgbm90IFdpbmRvd0Z1bmNzLgorCSAq LworCWlmIChyb290LT5wYXJzZS0+aGF2aW5nUXVhbCAhPSBOVUxMKQorCXsKKwkJTGlzdAkgICAq aGF2aW5nX2V4cHJzOworCisJCWhhdmluZ19leHBycyA9IHB1bGxfdmFyX2NsYXVzZSgoTm9kZSAq KSByb290LT5wYXJzZS0+aGF2aW5nUXVhbCwKKwkJCQkJCQkJCSAgIFBWQ19JTkNMVURFX0FHR1JF R0FURVMgfAorCQkJCQkJCQkJICAgUFZDX1JFQ1VSU0VfUExBQ0VIT0xERVJTKTsKKwkJaWYgKGhh dmluZ19leHBycyAhPSBOSUwpCisJCXsKKwkJCXRsaXN0X2V4cHJzID0gbGlzdF9jb25jYXQodGxp c3RfZXhwcnMsIGhhdmluZ19leHBycyk7CisJCQlsaXN0X2ZyZWUoaGF2aW5nX2V4cHJzKTsKKwkJ fQorCX0KKworCWZvcmVhY2gobGMsIHRsaXN0X2V4cHJzKQorCXsKKwkJRXhwcgkgICAqZXhwciA9 IChFeHByICopIGxmaXJzdChsYyk7CisJCUFnZ3JlZgkgICAqYWdncmVmOworCQlBZ2dDbGF1c2VJ bmZvICphY19pbmZvOworCisJCS8qIEZvciBub3cgd2UgZG9uJ3QgdHJ5IHRvIHN1cHBvcnQgR1JP VVBJTkcoKSBleHByZXNzaW9ucyAqLworCQlpZiAoSXNBKGV4cHIsIEdyb3VwaW5nRnVuYykpCisJ CXsKKwkJCWxpc3RfZnJlZV9kZWVwKHJvb3QtPmFnZ19jbGF1c2VfbGlzdCk7CisJCQlyb290LT5h Z2dfY2xhdXNlX2xpc3QgPSBOSUw7CisKKwkJCWxpc3RfZnJlZShyb290LT50bGlzdF92YXJzKTsK KwkJCXJvb3QtPnRsaXN0X3ZhcnMgPSBOSUw7CisKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIENv bGxlY3QgcGxhaW4gVmFycyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqLworCQlpZiAoSXNBKGV4cHIs IFZhcikpCisJCXsKKwkJCXJvb3QtPnRsaXN0X3ZhcnMgPSBsaXN0X2FwcGVuZF91bmlxdWUocm9v dC0+dGxpc3RfdmFycywgZXhwcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWFnZ3JlZiA9IGNh c3ROb2RlKEFnZ3JlZiwgZXhwcik7CisKKwkJQXNzZXJ0KGFnZ3JlZi0+YWdnb3JkZXIgPT0gTklM KTsKKwkJQXNzZXJ0KGFnZ3JlZi0+YWdnZGlzdGluY3QgPT0gTklMKTsKKworCQlhY19pbmZvID0g bWFrZU5vZGUoQWdnQ2xhdXNlSW5mbyk7CisJCWFjX2luZm8tPmFnZ3JlZiA9IGFnZ3JlZjsKKwkJ YWNfaW5mby0+YWdnX2V2YWxfYXQgPSBwdWxsX3Zhcm5vcyhyb290LCAoTm9kZSAqKSBhZ2dyZWYp OworCisJCXJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9CisJCQlsaXN0X2FwcGVuZF91bmlxdWUocm9v dC0+YWdnX2NsYXVzZV9saXN0LCBhY19pbmZvKTsKKwl9CisKKwlsaXN0X2ZyZWUodGxpc3RfZXhw cnMpOworfQorCisvKgorICogY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3MKKyAqCSAgQ3JlYXRl IEdyb3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbiB1c2FibGUgYXMgZ3JvdXBpbmcga2V5 LgorICoKKyAqIElmIGFueSBncm91cGluZyBleHByZXNzaW9uIGlzIG5vdCBzdWl0YWJsZSwgd2Ug d2lsbCBqdXN0IHJldHVybiB3aXRoCisgKiByb290LT5ncm91cF9leHByX2xpc3QgYmVpbmcgTklM LgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3MoUGxhbm5lcklu Zm8gKnJvb3QpCit7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisJTGlzdAkgICAqc29ydGdyb3Vw cmVmcyA9IE5JTDsKKwlMaXN0CSAgICpidHJlZV9vcGZhbWlsaWVzID0gTklMOworCUxpc3RDZWxs ICAgKmxjLAorCQkJICAgKmxjMSwKKwkJCSAgICpsYzIsCisJCQkgICAqbGMzOworCisJQXNzZXJ0 KHJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9PSBOSUwpOworCisJZm9yZWFjaChsYywgcm9vdC0+cHJv Y2Vzc2VkX2dyb3VwQ2xhdXNlKQorCXsKKwkJU29ydEdyb3VwQ2xhdXNlICpzZ2MgPSBsZmlyc3Rf bm9kZShTb3J0R3JvdXBDbGF1c2UsIGxjKTsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IGdldF9zb3J0 Z3JvdXBjbGF1c2VfdGxlKHNnYywgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0KTsKKwkJVHlwZUNhY2hl RW50cnkgKnRjZTsKKwkJT2lkCQkJZXF1YWxpbWFnZXByb2M7CisJCU9pZAkJCWVxX29wOworCQlM aXN0CSAgICplcV9vcGZhbWlsaWVzOworCQlPaWQJCQlidHJlZV9vcGZhbWlseTsKKworCQlBc3Nl cnQodGxlLT5yZXNzb3J0Z3JvdXByZWYgPiAwKTsKKworCQkvKgorCQkgKiBGb3Igbm93IHdlIG9u bHkgc3VwcG9ydCBwbGFpbiBWYXJzIGFzIGdyb3VwaW5nIGV4cHJlc3Npb25zLgorCQkgKi8KKwkJ aWYgKCFJc0EodGxlLT5leHByLCBWYXIpKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIEVhZ2Vy IGFnZ3JlZ2F0aW9uIGlzIG9ubHkgcG9zc2libGUgaWYgZXF1YWxpdHkgaW1wbGllcyBpbWFnZQor CQkgKiBlcXVhbGl0eSBmb3IgZWFjaCBncm91cGluZyBrZXkuICBPdGhlcndpc2UsIHBsYWNpbmcg a2V5cyB3aXRoCisJCSAqIGRpZmZlcmVudCBieXRlIGltYWdlcyBpbnRvIHRoZSBzYW1lIGdyb3Vw IG1heSByZXN1bHQgaW4gdGhlIGxvc3Mgb2YKKwkJICogaW5mb3JtYXRpb24gdGhhdCBjb3VsZCBi ZSBuZWNlc3NhcnkgdG8gZXZhbHVhdGUgdXBwZXIgcXVhbCBjbGF1c2VzLgorCQkgKgorCQkgKiBG b3IgaW5zdGFuY2UsIHRoZSBOVU1FUklDIGRhdGEgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLCBhcyB2 YWx1ZXMKKwkJICogdGhhdCBhcmUgY29uc2lkZXJlZCBlcXVhbCBieSB0aGUgZXF1YWxpdHkgb3Bl cmF0b3IgKGUuZy4sIDAgYW5kCisJCSAqIDAuMCkgY2FuIGhhdmUgZGlmZmVyZW50IHNjYWxlcy4K KwkJICovCisJCXRjZSA9IGxvb2t1cF90eXBlX2NhY2hlKGV4cHJUeXBlKChOb2RlICopIHRsZS0+ ZXhwciksCisJCQkJCQkJCVRZUEVDQUNIRV9CVFJFRV9PUEZBTUlMWSk7CisJCWlmICghT2lkSXNW YWxpZCh0Y2UtPmJ0cmVlX29wZikgfHwKKwkJCSFPaWRJc1ZhbGlkKHRjZS0+YnRyZWVfb3BpbnR5 cGUpKQorCQkJcmV0dXJuOworCisJCWVxdWFsaW1hZ2Vwcm9jID0gZ2V0X29wZmFtaWx5X3Byb2Mo dGNlLT5idHJlZV9vcGYsCisJCQkJCQkJCQkJICAgdGNlLT5idHJlZV9vcGludHlwZSwKKwkJCQkJ CQkJCQkgICB0Y2UtPmJ0cmVlX29waW50eXBlLAorCQkJCQkJCQkJCSAgIEJURVFVQUxJTUFHRV9Q Uk9DKTsKKwkJaWYgKCFPaWRJc1ZhbGlkKGVxdWFsaW1hZ2Vwcm9jKSB8fAorCQkJIURhdHVtR2V0 Qm9vbChPaWRGdW5jdGlvbkNhbGwxQ29sbChlcXVhbGltYWdlcHJvYywKKwkJCQkJCQkJCQkJICAg dGNlLT50eXBjb2xsYXRpb24sCisJCQkJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0odGNlLT5i dHJlZV9vcGludHlwZSkpKSkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBHZXQgdGhlIG9wZXJh dG9yIGluIHRoZSBidHJlZSdzIG9wZmFtaWx5LgorCQkgKi8KKwkJZXFfb3AgPSBnZXRfb3BmYW1p bHlfbWVtYmVyKHRjZS0+YnRyZWVfb3BmLAorCQkJCQkJCQkJdGNlLT5idHJlZV9vcGludHlwZSwK KwkJCQkJCQkJCXRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQlCVEVxdWFsU3RyYXRlZ3lO dW1iZXIpOworCQlpZiAoIU9pZElzVmFsaWQoZXFfb3ApKQorCQkJcmV0dXJuOworCQllcV9vcGZh bWlsaWVzID0gZ2V0X21lcmdlam9pbl9vcGZhbWlsaWVzKGVxX29wKTsKKwkJaWYgKCFlcV9vcGZh bWlsaWVzKQorCQkJcmV0dXJuOworCQlidHJlZV9vcGZhbWlseSA9IGxpbml0aWFsX29pZChlcV9v cGZhbWlsaWVzKTsKKworCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIHRsZS0+ZXhwcik7CisJCXNv cnRncm91cHJlZnMgPSBsYXBwZW5kX2ludChzb3J0Z3JvdXByZWZzLCB0bGUtPnJlc3NvcnRncm91 cHJlZik7CisJCWJ0cmVlX29wZmFtaWxpZXMgPSBsYXBwZW5kX29pZChidHJlZV9vcGZhbWlsaWVz LCBidHJlZV9vcGZhbWlseSk7CisJfQorCisJLyoKKwkgKiBDb25zdHJ1Y3QgR3JvdXBFeHBySW5m byBmb3IgZWFjaCBleHByZXNzaW9uLgorCSAqLworCWZvcnRocmVlKGxjMSwgZXhwcnMsIGxjMiwg c29ydGdyb3VwcmVmcywgbGMzLCBidHJlZV9vcGZhbWlsaWVzKQorCXsKKwkJRXhwcgkgICAqZXhw ciA9IChFeHByICopIGxmaXJzdChsYzEpOworCQlpbnQJCQlzb3J0Z3JvdXByZWYgPSBsZmlyc3Rf aW50KGxjMik7CisJCU9pZAkJCWJ0cmVlX29wZmFtaWx5ID0gbGZpcnN0X29pZChsYzMpOworCQlH cm91cEV4cHJJbmZvICpnZV9pbmZvOworCisJCWdlX2luZm8gPSBtYWtlTm9kZShHcm91cEV4cHJJ bmZvKTsKKwkJZ2VfaW5mby0+ZXhwciA9IChFeHByICopIGNvcHlPYmplY3QoZXhwcik7CisJCWdl X2luZm8tPnNvcnRncm91cHJlZiA9IHNvcnRncm91cHJlZjsKKwkJZ2VfaW5mby0+YnRyZWVfb3Bm YW1pbHkgPSBidHJlZV9vcGZhbWlseTsKKworCQlyb290LT5ncm91cF9leHByX2xpc3QgPSBsYXBw ZW5kKHJvb3QtPmdyb3VwX2V4cHJfbGlzdCwgZ2VfaW5mbyk7CisJfQorfQorCiAvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKICAqCiAgKgkgIExBVEVSQUwgUkVGRVJFTkNFUwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5tYWluLmMKaW5kZXggNzM1NTYwZThjYS4uMjJkZjk2ODYyOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCkBAIC02NCw4ICs2NCwxMiBAQCBxdWVyeV9wbGFu bmVyKFBsYW5uZXJJbmZvICpyb290LAogCSAqIE5PVEU6IGFwcGVuZF9yZWxfbGlzdCB3YXMgc2V0 IHVwIGJ5IHN1YnF1ZXJ5X3BsYW5uZXIsIHNvIGRvIG5vdCB0b3VjaAogCSAqIGhlcmUuCiAJICov Ci0Jcm9vdC0+am9pbl9yZWxfbGlzdCA9IE5JTDsKLQlyb290LT5qb2luX3JlbF9oYXNoID0gTlVM TDsKKwlyb290LT5qb2luX3JlbF9saXN0ID0gbWFrZU5vZGUoUmVsSW5mb0xpc3QpOworCXJvb3Qt PmpvaW5fcmVsX2xpc3QtPml0ZW1zID0gTklMOworCXJvb3QtPmpvaW5fcmVsX2xpc3QtPmhhc2gg PSBOVUxMOworCXJvb3QtPmdyb3VwZWRfcmVsX2xpc3QgPSBtYWtlTm9kZShSZWxJbmZvTGlzdCk7 CisJcm9vdC0+Z3JvdXBlZF9yZWxfbGlzdC0+aXRlbXMgPSBOSUw7CisJcm9vdC0+Z3JvdXBlZF9y ZWxfbGlzdC0+aGFzaCA9IE5VTEw7CiAJcm9vdC0+am9pbl9yZWxfbGV2ZWwgPSBOVUxMOwogCXJv b3QtPmpvaW5fY3VyX2xldmVsID0gMDsKIAlyb290LT5jYW5vbl9wYXRoa2V5cyA9IE5JTDsKQEAg LTc2LDYgKzgwLDkgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwKIAlyb290LT5w bGFjZWhvbGRlcl9saXN0ID0gTklMOwogCXJvb3QtPnBsYWNlaG9sZGVyX2FycmF5ID0gTlVMTDsK IAlyb290LT5wbGFjZWhvbGRlcl9hcnJheV9zaXplID0gMDsKKwlyb290LT5hZ2dfY2xhdXNlX2xp c3QgPSBOSUw7CisJcm9vdC0+Z3JvdXBfZXhwcl9saXN0ID0gTklMOworCXJvb3QtPnRsaXN0X3Zh cnMgPSBOSUw7CiAJcm9vdC0+ZmtleV9saXN0ID0gTklMOwogCXJvb3QtPmluaXRpYWxfcmVscyA9 IE5JTDsKIApAQCAtMjYwLDYgKzI2NywxMiBAQCBxdWVyeV9wbGFubmVyKFBsYW5uZXJJbmZvICpy b290LAogCSAqLwogCWV4dHJhY3RfcmVzdHJpY3Rpb25fb3JfY2xhdXNlcyhyb290KTsKIAorCS8q CisJICogQ2hlY2sgaWYgZWFnZXIgYWdncmVnYXRpb24gaXMgYXBwbGljYWJsZSwgYW5kIGlmIHNv LCBzZXQgdXAKKwkgKiByb290LT5hZ2dfY2xhdXNlX2xpc3QgYW5kIHJvb3QtPmdyb3VwX2V4cHJf bGlzdC4KKwkgKi8KKwlzZXR1cF9lYWdlcl9hZ2dyZWdhdGlvbihyb290KTsKKwogCS8qCiAJICog Tm93IGV4cGFuZCBhcHBlbmRyZWxzIGJ5IGFkZGluZyAib3RoZXJyZWxzIiBmb3IgdGhlaXIgY2hp bGRyZW4uICBXZQogCSAqIGRlbGF5IHRoaXMgdG8gdGhlIGVuZCBzbyB0aGF0IHdlIGhhdmUgYXMg bXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jCmluZGV4IGEwYTJkZTdlZTQuLjA0OWJiNjc5ZjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKQEAgLTIyOSw3ICsyMjksNiBAQCBzdGF0aWMgdm9pZCBhZGRfcGF0aHNfdG9f Z3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJ CQkJCQkJCQkgIFJlbE9wdEluZm8gKnBhcnRpYWxseV9ncm91cGVkX3JlbCwKIAkJCQkJCQkJCSAg Y29uc3QgQWdnQ2xhdXNlQ29zdHMgKmFnZ19jb3N0cywKIAkJCQkJCQkJCSAgZ3JvdXBpbmdfc2V0 c19kYXRhICpnZCwKLQkJCQkJCQkJCSAgZG91YmxlIGROdW1Hcm91cHMsCiAJCQkJCQkJCQkgIEdy b3VwUGF0aEV4dHJhRGF0YSAqZXh0cmEpOwogc3RhdGljIFJlbE9wdEluZm8gKmNyZWF0ZV9wYXJ0 aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJIFJlbE9w dEluZm8gKmdyb3VwZWRfcmVsLApAQCAtMzkxNiw5ICszOTE1LDcgQEAgY3JlYXRlX29yZGluYXJ5 X2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWws CiAJCQkJCQkJICAgR3JvdXBQYXRoRXh0cmFEYXRhICpleHRyYSwKIAkJCQkJCQkgICBSZWxPcHRJ bmZvICoqcGFydGlhbGx5X2dyb3VwZWRfcmVsX3ApCiB7Ci0JUGF0aAkgICAqY2hlYXBlc3RfcGF0 aCA9IGlucHV0X3JlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aDsKIAlSZWxPcHRJbmZvICpwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwgPSBOVUxMOwotCWRvdWJsZQkJZE51bUdyb3VwczsKIAlQYXJ0aXRpb253 aXNlQWdncmVnYXRlVHlwZSBwYXR5cGUgPSBQQVJUSVRJT05XSVNFX0FHR1JFR0FURV9OT05FOwog CiAJLyoKQEAgLTQwMDAsMjMgKzM5OTcsMTYgQEAgY3JlYXRlX29yZGluYXJ5X2dyb3VwaW5nX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAKIAkvKiBHYXRo ZXIgYW55IHBhcnRpYWxseSBncm91cGVkIHBhcnRpYWwgcGF0aHMuICovCiAJaWYgKHBhcnRpYWxs eV9ncm91cGVkX3JlbCAmJiBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBhcnRpYWxfcGF0aGxpc3Qp Ci0JewogCQlnYXRoZXJfZ3JvdXBpbmdfcGF0aHMocm9vdCwgcGFydGlhbGx5X2dyb3VwZWRfcmVs KTsKLQkJc2V0X2NoZWFwZXN0KHBhcnRpYWxseV9ncm91cGVkX3JlbCk7Ci0JfQogCi0JLyoKLQkg KiBFc3RpbWF0ZSBudW1iZXIgb2YgZ3JvdXBzLgotCSAqLwotCWROdW1Hcm91cHMgPSBnZXRfbnVt YmVyX29mX2dyb3Vwcyhyb290LAotCQkJCQkJCQkJICBjaGVhcGVzdF9wYXRoLT5yb3dzLAotCQkJ CQkJCQkJICBnZCwKLQkJCQkJCQkJCSAgZXh0cmEtPnRhcmdldExpc3QpOworCS8qIE5vdyBjaG9v c2UgdGhlIGJlc3QgcGF0aChzKSBmb3IgcGFydGlhbGx5X2dyb3VwZWRfcmVsLiAqLworCWlmIChw YXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXRobGlzdCkK KwkJc2V0X2NoZWFwZXN0KHBhcnRpYWxseV9ncm91cGVkX3JlbCk7CiAKIAkvKiBCdWlsZCBmaW5h bCBncm91cGluZyBwYXRocyAqLwogCWFkZF9wYXRoc190b19ncm91cGluZ19yZWwocm9vdCwgaW5w dXRfcmVsLCBncm91cGVkX3JlbCwKIAkJCQkJCQkgIHBhcnRpYWxseV9ncm91cGVkX3JlbCwgYWdn X2Nvc3RzLCBnZCwKLQkJCQkJCQkgIGROdW1Hcm91cHMsIGV4dHJhKTsKKwkJCQkJCQkgIGV4dHJh KTsKIAogCS8qIEdpdmUgYSBoZWxwZnVsIGVycm9yIGlmIHdlIGZhaWxlZCB0byBmaW5kIGFueSBp bXBsZW1lbnRhdGlvbiAqLwogCWlmIChncm91cGVkX3JlbC0+cGF0aGxpc3QgPT0gTklMKQpAQCAt NjkwNiwxNiArNjg5Niw0MiBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkgIFJlbE9wdEluZm8gKmdyb3Vw ZWRfcmVsLAogCQkJCQkJICBSZWxPcHRJbmZvICpwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCiAJCQkJ CQkgIGNvbnN0IEFnZ0NsYXVzZUNvc3RzICphZ2dfY29zdHMsCi0JCQkJCQkgIGdyb3VwaW5nX3Nl dHNfZGF0YSAqZ2QsIGRvdWJsZSBkTnVtR3JvdXBzLAorCQkJCQkJICBncm91cGluZ19zZXRzX2Rh dGEgKmdkLAogCQkJCQkJICBHcm91cFBhdGhFeHRyYURhdGEgKmV4dHJhKQogewogCVF1ZXJ5CSAg ICpwYXJzZSA9IHJvb3QtPnBhcnNlOwogCVBhdGgJICAgKmNoZWFwZXN0X3BhdGggPSBpbnB1dF9y ZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CisJUGF0aAkgICAqY2hlYXBlc3RfcGFydGlhbGx5X2dy b3VwZWRfcGF0aCA9IE5VTEw7CiAJTGlzdENlbGwgICAqbGM7CiAJYm9vbAkJY2FuX2hhc2ggPSAo ZXh0cmEtPmZsYWdzICYgR1JPVVBJTkdfQ0FOX1VTRV9IQVNIKSAhPSAwOwogCWJvb2wJCWNhbl9z b3J0ID0gKGV4dHJhLT5mbGFncyAmIEdST1VQSU5HX0NBTl9VU0VfU09SVCkgIT0gMDsKIAlMaXN0 CSAgICpoYXZpbmdRdWFsID0gKExpc3QgKikgZXh0cmEtPmhhdmluZ1F1YWw7CiAJQWdnQ2xhdXNl Q29zdHMgKmFnZ19maW5hbF9jb3N0cyA9ICZleHRyYS0+YWdnX2ZpbmFsX2Nvc3RzOworCWRvdWJs ZQkJZE51bUdyb3VwcyA9IDA7CisJZG91YmxlCQlkTnVtRmluYWxHcm91cHMgPSAwOworCisJLyoK KwkgKiBFc3RpbWF0ZSBudW1iZXIgb2YgZ3JvdXBzIGZvciBub24tc3BsaXQgYWdncmVnYXRpb24u CisJICovCisJZE51bUdyb3VwcyA9IGdldF9udW1iZXJfb2ZfZ3JvdXBzKHJvb3QsCisJCQkJCQkJ CQkgIGNoZWFwZXN0X3BhdGgtPnJvd3MsCisJCQkJCQkJCQkgIGdkLAorCQkJCQkJCQkJICBleHRy YS0+dGFyZ2V0TGlzdCk7CisKKwlpZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsICYmIHBhcnRpYWxs eV9ncm91cGVkX3JlbC0+cGF0aGxpc3QpCisJeworCQljaGVhcGVzdF9wYXJ0aWFsbHlfZ3JvdXBl ZF9wYXRoID0KKwkJCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aDsK KworCQkvKgorCQkgKiBFc3RpbWF0ZSBudW1iZXIgb2YgZ3JvdXBzIGZvciBmaW5hbCBwaGFzZSBv ZiBwYXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkgKi8KKwkJZE51bUZpbmFsR3JvdXBzID0KKwkJCWdl dF9udW1iZXJfb2ZfZ3JvdXBzKHJvb3QsCisJCQkJCQkJCSBjaGVhcGVzdF9wYXJ0aWFsbHlfZ3Jv dXBlZF9wYXRoLT5yb3dzLAorCQkJCQkJCQkgZ2QsCisJCQkJCQkJCSBleHRyYS0+dGFyZ2V0TGlz dCk7CisJfQogCiAJaWYgKGNhbl9zb3J0KQogCXsKQEAgLTcwMjgsNyArNzA0NCw3IEBAIGFkZF9w YXRoc190b19ncm91cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0 X3JlbCwKIAkJCQkJcGF0aCA9IG1ha2Vfb3JkZXJlZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCSBn cm91cGVkX3JlbCwKIAkJCQkJCQkJCQkJIHBhdGgsCi0JCQkJCQkJCQkJCSBwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgsCisJCQkJCQkJCQkJCSBjaGVhcGVzdF9wYXJ0 aWFsbHlfZ3JvdXBlZF9wYXRoLAogCQkJCQkJCQkJCQkgaW5mby0+cGF0aGtleXMsCiAJCQkJCQkJ CQkJCSAtMS4wKTsKIApAQCAtNzA0Niw3ICs3MDYyLDcgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5n X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJCQkJ CQkJIGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCQkgaGF2aW5nUXVhbCwKIAkJCQkJCQkJCQkJ CSBhZ2dfZmluYWxfY29zdHMsCi0JCQkJCQkJCQkJCQkgZE51bUdyb3VwcykpOworCQkJCQkJCQkJ CQkJIGROdW1GaW5hbEdyb3VwcykpOwogCQkJCQllbHNlCiAJCQkJCQlhZGRfcGF0aChncm91cGVk X3JlbCwgKFBhdGggKikKIAkJCQkJCQkJIGNyZWF0ZV9ncm91cF9wYXRoKHJvb3QsCkBAIC03MDU0 LDcgKzcwNzAsNyBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkJCQkJCQkgICBwYXRoLAogCQkJCQkJCQkJ CQkJICAgaW5mby0+Y2xhdXNlcywKIAkJCQkJCQkJCQkJCSAgIGhhdmluZ1F1YWwsCi0JCQkJCQkJ CQkJCQkgICBkTnVtR3JvdXBzKSk7CisJCQkJCQkJCQkJCQkgICBkTnVtRmluYWxHcm91cHMpKTsK IAogCQkJCX0KIAkJCX0KQEAgLTcwOTYsMTkgKzcxMTIsMTcgQEAgYWRkX3BhdGhzX3RvX2dyb3Vw aW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkgKi8K IAkJaWYgKHBhcnRpYWxseV9ncm91cGVkX3JlbCAmJiBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBh dGhsaXN0KQogCQl7Ci0JCQlQYXRoCSAgICpwYXRoID0gcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5j aGVhcGVzdF90b3RhbF9wYXRoOwotCiAJCQlhZGRfcGF0aChncm91cGVkX3JlbCwgKFBhdGggKikK IAkJCQkJIGNyZWF0ZV9hZ2dfcGF0aChyb290LAogCQkJCQkJCQkJIGdyb3VwZWRfcmVsLAotCQkJ CQkJCQkJIHBhdGgsCisJCQkJCQkJCQkgY2hlYXBlc3RfcGFydGlhbGx5X2dyb3VwZWRfcGF0aCwK IAkJCQkJCQkJCSBncm91cGVkX3JlbC0+cmVsdGFyZ2V0LAogCQkJCQkJCQkJIEFHR19IQVNIRUQs CiAJCQkJCQkJCQkgQUdHU1BMSVRfRklOQUxfREVTRVJJQUwsCiAJCQkJCQkJCQkgcm9vdC0+cHJv Y2Vzc2VkX2dyb3VwQ2xhdXNlLAogCQkJCQkJCQkJIGhhdmluZ1F1YWwsCiAJCQkJCQkJCQkgYWdn X2ZpbmFsX2Nvc3RzLAotCQkJCQkJCQkJIGROdW1Hcm91cHMpKTsKKwkJCQkJCQkJCSBkTnVtRmlu YWxHcm91cHMpKTsKIAkJfQogCX0KIApAQCAtNzE1OCw2ICs3MTcyLDIxIEBAIGNyZWF0ZV9wYXJ0 aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCWJvb2wJCWNhbl9oYXNoID0g KGV4dHJhLT5mbGFncyAmIEdST1VQSU5HX0NBTl9VU0VfSEFTSCkgIT0gMDsKIAlib29sCQljYW5f c29ydCA9IChleHRyYS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX1NPUlQpICE9IDA7CiAKKwkv KgorCSAqIFRoZSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgY291bGQgaGF2ZSBiZWVuIGFscmVhZHkg Y3JlYXRlZCBkdWUgdG8gZWFnZXIKKwkgKiBhZ2dyZWdhdGlvbi4KKwkgKi8KKwlwYXJ0aWFsbHlf Z3JvdXBlZF9yZWwgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIGlucHV0X3JlbC0+cmVsaWRzKTsK KwlBc3NlcnQoZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSB8fCBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwg PT0gTlVMTCk7CisKKwkvKgorCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHBhcnRpYWxseV9n cm91cGVkX3JlbCBjcmVhdGVkIGJ5IGVhZ2VyCisJICogYWdncmVnYXRpb24gaXMgZHVtbXkuICBJ biB0aGlzIGNhc2Ugd2UganVzdCBzZXQgaXQgdG8gTlVMTC4gIEl0IG1pZ2h0CisJICogYmUgY3Jl YXRlZCBhZ2FpbiBieSB0aGUgZm9sbG93aW5nIGxvZ2ljIGlmIHBvc3NpYmxlLgorCSAqLworCWlm IChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgSVNfRFVNTVlfUkVMKHBhcnRpYWxseV9ncm91cGVk X3JlbCkpCisJCXBhcnRpYWxseV9ncm91cGVkX3JlbCA9IE5VTEw7CisKIAkvKgogCSAqIENvbnNp ZGVyIHdoZXRoZXIgd2Ugc2hvdWxkIGdlbmVyYXRlIHBhcnRpYWxseSBhZ2dyZWdhdGVkIG5vbi1w YXJ0aWFsCiAJICogcGF0aHMuICBXZSBjYW4gb25seSBkbyB0aGlzIGlmIHdlIGhhdmUgYSBub24t cGFydGlhbCBwYXRoLCBhbmQgb25seSBpZgpAQCAtNzE4MSwxOSArNzIxMCwyNyBAQCBjcmVhdGVf cGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkgKiBJZiB3ZSBjYW4n dCBwYXJ0aWFsbHkgYWdncmVnYXRlIHBhcnRpYWwgcGF0aHMsIGFuZCB3ZSBjYW4ndCBwYXJ0aWFs bHkKIAkgKiBhZ2dyZWdhdGUgbm9uLXBhcnRpYWwgcGF0aHMsIHRoZW4gZG9uJ3QgYm90aGVyIGNy ZWF0aW5nIHRoZSBuZXcKIAkgKiBSZWxPcHRJbmZvIGF0IGFsbCwgdW5sZXNzIHRoZSBjYWxsZXIg c3BlY2lmaWVkIGZvcmNlX3JlbF9jcmVhdGlvbi4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgcGFy dGlhbGx5X2dyb3VwZWRfcmVsIGNvdWxkIGhhdmUgYmVlbiBhbHJlYWR5IGNyZWF0ZWQgYW5kCisJ ICogcG9wdWxhdGVkIHdpdGggYXBwcm9wcmlhdGUgcGF0aHMgYnkgZWFnZXIgYWdncmVnYXRpb24u CiAJICovCiAJaWYgKGNoZWFwZXN0X3RvdGFsX3BhdGggPT0gTlVMTCAmJgogCQljaGVhcGVzdF9w YXJ0aWFsX3BhdGggPT0gTlVMTCAmJgorCQkocGFydGlhbGx5X2dyb3VwZWRfcmVsID09IE5VTEwg fHwKKwkJIHBhcnRpYWxseV9ncm91cGVkX3JlbC0+cGF0aGxpc3QgPT0gTklMKSAmJgogCQkhZm9y Y2VfcmVsX2NyZWF0aW9uKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogQnVpbGQgYSBuZXcg dXBwZXIgcmVsYXRpb24gdG8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgcGFydGlhbGx5Ci0JICog YWdncmVnYXRpbmcgdGhlIHJvd3MgZnJvbSB0aGUgaW5wdXQgcmVsYXRpb24uCi0JICovCi0JcGFy dGlhbGx5X2dyb3VwZWRfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsCi0JCQkJCQkJCQkJCVVQ UEVSUkVMX1BBUlRJQUxfR1JPVVBfQUdHLAotCQkJCQkJCQkJCQlncm91cGVkX3JlbC0+cmVsaWRz KTsKKwkgKiBhZ2dyZWdhdGluZyB0aGUgcm93cyBmcm9tIHRoZSBpbnB1dCByZWxhdGlvbi4gIFRo ZSByZWxhdGlvbiBtYXkgYWxyZWFkeQorCSAqIGV4aXN0IGR1ZSB0byBlYWdlciBhZ2dyZWdhdGlv biwgaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZQorCSAqIGl0LgorCSAqLwor CWlmIChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgPT0gTlVMTCkKKwkJcGFydGlhbGx5X2dyb3VwZWRf cmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsCisJCQkJCQkJCQkJCQlVUFBFUlJFTF9QQVJUSUFM X0dST1VQX0FHRywKKwkJCQkJCQkJCQkJCWdyb3VwZWRfcmVsLT5yZWxpZHMpOwogCXBhcnRpYWxs eV9ncm91cGVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPQogCQlncm91cGVkX3JlbC0+Y29uc2lk ZXJfcGFyYWxsZWw7CiAJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5yZWxvcHRraW5kID0gZ3JvdXBl ZF9yZWwtPnJlbG9wdGtpbmQ7CkBAIC03MjAyLDYgKzcyMzksMTQgQEAgY3JlYXRlX3BhcnRpYWxf Z3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJcGFydGlhbGx5X2dyb3VwZWRfcmVs LT51c2VyaWRpc2N1cnJlbnQgPSBncm91cGVkX3JlbC0+dXNlcmlkaXNjdXJyZW50OwogCXBhcnRp YWxseV9ncm91cGVkX3JlbC0+ZmR3cm91dGluZSA9IGdyb3VwZWRfcmVsLT5mZHdyb3V0aW5lOwog CisJLyoKKwkgKiBQYXJ0aWFsbHktZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzIG1heSBoYXZlIGJlZW4g Z2VuZXJhdGVkIGJ5IGVhZ2VyCisJICogYWdncmVnYXRpb24uICBJZiB3ZSBmaW5kIHRoYXQgcGFy YWxsZWxpc20gaXMgbm90IHBvc3NpYmxlIGZvcgorCSAqIHBhcnRpYWxseV9ncm91cGVkX3JlbCwg d2UgbmVlZCB0byBkcm9wIHRoZXNlIHBhcnRpYWwgcGF0aHMuCisJICovCisJaWYgKCFwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsKQorCQlwYXJ0aWFsbHlfZ3JvdXBlZF9y ZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CisKIAkvKgogCSAqIEJ1aWxkIHRhcmdldCBsaXN0 IGZvciBwYXJ0aWFsIGFnZ3JlZ2F0ZSBwYXRocy4gIFRoZXNlIHBhdGhzIGNhbm5vdCBqdXN0CiAJ ICogZW1pdCB0aGUgc2FtZSB0bGlzdCBhcyByZWd1bGFyIGFnZ3JlZ2F0ZSBwYXRocywgYmVjYXVz ZSAoMSkgd2UgbXVzdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBw ZW5kaW5mby5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jCmluZGV4 IDQ1ZThiNzRmOTQuLjBlNGM3YjJiMmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2FwcGVuZGluZm8uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBl bmRpbmZvLmMKQEAgLTQ5OSw2ICs0OTksNjYgQEAgYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRh dG9yKE5vZGUgKm5vZGUsCiAJCXJldHVybiAoTm9kZSAqKSBuZXdpbmZvOwogCX0KIAorCS8qCisJ ICogV2UgaGF2ZSB0byBwcm9jZXNzIFJlbEFnZ0luZm8gbm9kZXMgc3BlY2lhbGx5LgorCSAqLwor CWlmIChJc0Eobm9kZSwgUmVsQWdnSW5mbykpCisJeworCQlSZWxBZ2dJbmZvICpvbGRpbmZvID0g KFJlbEFnZ0luZm8gKikgbm9kZTsKKwkJUmVsQWdnSW5mbyAqbmV3aW5mbyA9IG1ha2VOb2RlKFJl bEFnZ0luZm8pOworCisJCS8qIENvcHkgYWxsIGZsYXQtY29waWFibGUgZmllbGRzICovCisJCW1l bWNweShuZXdpbmZvLCBvbGRpbmZvLCBzaXplb2YoUmVsQWdnSW5mbykpOworCisJCW5ld2luZm8t PnJlbGlkcyA9IGFkanVzdF9jaGlsZF9yZWxpZHMob2xkaW5mby0+cmVsaWRzLAorCQkJCQkJCQkJ CQkgIGNvbnRleHQtPm5hcHBpbmZvcywKKwkJCQkJCQkJCQkJICBjb250ZXh0LT5hcHBpbmZvcyk7 CisKKwkJbmV3aW5mby0+dGFyZ2V0ID0gKFBhdGhUYXJnZXQgKikKKwkJCWFkanVzdF9hcHBlbmRy ZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZvLT50YXJnZXQsCisJCQkJCQkJCQkJICAg Y29udGV4dCk7CisKKwkJbmV3aW5mby0+YWdnX2lucHV0ID0gKFBhdGhUYXJnZXQgKikKKwkJCWFk anVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZvLT5hZ2dfaW5wdXQs CisJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJbmV3aW5mby0+Z3JvdXBfY2xhdXNlcyA9IChM aXN0ICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkaW5m by0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQluZXdpbmZvLT5n cm91cF9leHBycyA9IChMaXN0ICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3Io KE5vZGUgKikgb2xkaW5mby0+Z3JvdXBfZXhwcnMsCisJCQkJCQkJCQkJICAgY29udGV4dCk7CisK KwkJcmV0dXJuIChOb2RlICopIG5ld2luZm87CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIHRvIHBy b2Nlc3MgUGF0aFRhcmdldCBub2RlcyBzcGVjaWFsbHkuCisJICovCisJaWYgKElzQShub2RlLCBQ YXRoVGFyZ2V0KSkKKwl7CisJCVBhdGhUYXJnZXQgKm9sZHRhcmdldCA9IChQYXRoVGFyZ2V0ICop IG5vZGU7CisJCVBhdGhUYXJnZXQgKm5ld3RhcmdldCA9IG1ha2VOb2RlKFBhdGhUYXJnZXQpOwor CisJCS8qIENvcHkgYWxsIGZsYXQtY29waWFibGUgZmllbGRzICovCisJCW1lbWNweShuZXd0YXJn ZXQsIG9sZHRhcmdldCwgc2l6ZW9mKFBhdGhUYXJnZXQpKTsKKworCQlpZiAob2xkdGFyZ2V0LT5z b3J0Z3JvdXByZWZzKQorCQl7CisJCQlTaXplCQluYnl0ZXMgPSBsaXN0X2xlbmd0aChvbGR0YXJn ZXQtPmV4cHJzKSAqIHNpemVvZihJbmRleCk7CisKKwkJCW5ld3RhcmdldC0+ZXhwcnMgPSAoTGlz dCAqKQorCQkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGR0YXJn ZXQtPmV4cHJzLAorCQkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQkJbmV3dGFyZ2V0LT5zb3J0 Z3JvdXByZWZzID0gKEluZGV4ICopIHBhbGxvYyhuYnl0ZXMpOworCQkJbWVtY3B5KG5ld3Rhcmdl dC0+c29ydGdyb3VwcmVmcywgb2xkdGFyZ2V0LT5zb3J0Z3JvdXByZWZzLCBuYnl0ZXMpOworCQl9 CisKKwkJcmV0dXJuIChOb2RlICopIG5ld3RhcmdldDsKKwl9CisKIAkvKgogCSAqIE5PVEU6IHdl IGRvIG5vdCBuZWVkIHRvIHJlY3Vyc2UgaW50byBzdWJsaW5rcywgYmVjYXVzZSB0aGV5IHNob3Vs ZAogCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBzdWJwbGFucyBiZWZvcmUgd2Ug c2VlIHRoZW0uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCBmYzk3YmY2 ZWUyLi42NzNlMTgxYjMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAg LTI2Miw2ICsyNjIsMTIgQEAgY29tcGFyZV9wYXRoX2Nvc3RzX2Z1enppbHkoUGF0aCAqcGF0aDEs IFBhdGggKnBhdGgyLCBkb3VibGUgZnV6el9mYWN0b3IpCiAgKiB1bnBhcmFtZXRlcml6ZWQgcGF0 aCwgdG9vLCBpZiB0aGVyZSBpcyBvbmU7IHRoZSB1c2VycyBvZiB0aGF0IGxpc3QgZmluZAogICog aXQgbW9yZSBjb252ZW5pZW50IGlmIHRoYXQncyBpbmNsdWRlZC4KICAqCisgKiBjaGVhcGVzdF9w YXJhbWV0ZXJpemVkX3BhdGhzIGFsc28gYWx3YXlzIGluY2x1ZGVzIHRoZSBmZXdlc3Qtcm93Cisg KiB1bnBhcmFtZXRlcml6ZWQgcGF0aCwgaWYgdGhlcmUgaXMgb25lLCBmb3IgZ3JvdXBlZCByZWxh dGlvbnMuICBEaWZmZXJlbnQKKyAqIHBhdGhzIG9mIGEgZ3JvdXBlZCByZWxhdGlvbiBjYW4gaGF2 ZSB2ZXJ5IGRpZmZlcmVudCByb3cgY291bnRzLCBhbmQgaW4gc29tZQorICogY2FzZXMgdGhlIGNo ZWFwZXN0LXRvdGFsIHVucGFyYW1ldGVyaXplZCBwYXRoIG1heSBub3QgYmUgdGhlIG9uZSB3aXRo IHRoZQorICogZmV3ZXN0IHJvdy4KKyAqCiAgKiBUaGlzIGlzIG5vcm1hbGx5IGNhbGxlZCBvbmx5 IGFmdGVyIHdlJ3ZlIGZpbmlzaGVkIGNvbnN0cnVjdGluZyB0aGUgcGF0aAogICogbGlzdCBmb3Ig dGhlIHJlbCBub2RlLgogICovCkBAIC0yNzEsNiArMjc3LDcgQEAgc2V0X2NoZWFwZXN0KFJlbE9w dEluZm8gKnBhcmVudF9yZWwpCiAJUGF0aAkgICAqY2hlYXBlc3Rfc3RhcnR1cF9wYXRoOwogCVBh dGgJICAgKmNoZWFwZXN0X3RvdGFsX3BhdGg7CiAJUGF0aAkgICAqYmVzdF9wYXJhbV9wYXRoOwor CVBhdGgJICAgKmZld2VzdF9yb3dfcGF0aDsKIAlMaXN0CSAgICpwYXJhbWV0ZXJpemVkX3BhdGhz OwogCUxpc3RDZWxsICAgKnA7CiAKQEAgLTI4MCw2ICsyODcsNyBAQCBzZXRfY2hlYXBlc3QoUmVs T3B0SW5mbyAqcGFyZW50X3JlbCkKIAkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBkZXZpc2UgYSBx dWVyeSBwbGFuIGZvciB0aGUgZ2l2ZW4gcXVlcnkiKTsKIAogCWNoZWFwZXN0X3N0YXJ0dXBfcGF0 aCA9IGNoZWFwZXN0X3RvdGFsX3BhdGggPSBiZXN0X3BhcmFtX3BhdGggPSBOVUxMOworCWZld2Vz dF9yb3dfcGF0aCA9IE5VTEw7CiAJcGFyYW1ldGVyaXplZF9wYXRocyA9IE5JTDsKIAogCWZvcmVh Y2gocCwgcGFyZW50X3JlbC0+cGF0aGxpc3QpCkBAIC0zNDEsNiArMzQ5LDggQEAgc2V0X2NoZWFw ZXN0KFJlbE9wdEluZm8gKnBhcmVudF9yZWwpCiAJCQlpZiAoY2hlYXBlc3RfdG90YWxfcGF0aCA9 PSBOVUxMKQogCQkJewogCQkJCWNoZWFwZXN0X3N0YXJ0dXBfcGF0aCA9IGNoZWFwZXN0X3RvdGFs X3BhdGggPSBwYXRoOworCQkJCWlmIChJU19HUk9VUEVEX1JFTChwYXJlbnRfcmVsKSkKKwkJCQkJ ZmV3ZXN0X3Jvd19wYXRoID0gcGF0aDsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMzY0LDYg KzM3NCwyNyBAQCBzZXRfY2hlYXBlc3QoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCkKIAkJCQkgY29t cGFyZV9wYXRoa2V5cyhjaGVhcGVzdF90b3RhbF9wYXRoLT5wYXRoa2V5cywKIAkJCQkJCQkJICBw YXRoLT5wYXRoa2V5cykgPT0gUEFUSEtFWVNfQkVUVEVSMikpCiAJCQkJY2hlYXBlc3RfdG90YWxf cGF0aCA9IHBhdGg7CisKKwkJCS8qCisJCQkgKiBGaW5kIHRoZSBmZXdlc3Qtcm93IHVucGFyYW1l dGVyaXplZCBwYXRoIGZvciBhIGdyb3VwZWQKKwkJCSAqIHJlbGF0aW9uLiAgSWYgd2UgZmluZCB0 d28gcGF0aHMgb2YgdGhlIHNhbWUgcm93IGNvdW50LCB0cnkgdG8KKwkJCSAqIGtlZXAgdGhlIG9u ZSB3aXRoIHRoZSBjaGVhcGVyIHRvdGFsIGNvc3Q7IGlmIHRoZSBjb3N0cyBhcmUKKwkJCSAqIGlk ZW50aWNhbCwga2VlcCB0aGUgYmV0dGVyLXNvcnRlZCBvbmUuCisJCQkgKi8KKwkJCWlmIChJU19H Uk9VUEVEX1JFTChwYXJlbnRfcmVsKSkKKwkJCXsKKwkJCQlpZiAoZmV3ZXN0X3Jvd19wYXRoLT5y b3dzID4gcGF0aC0+cm93cykKKwkJCQkJZmV3ZXN0X3Jvd19wYXRoID0gcGF0aDsKKwkJCQllbHNl IGlmIChmZXdlc3Rfcm93X3BhdGgtPnJvd3MgPT0gcGF0aC0+cm93cykKKwkJCQl7CisJCQkJCWNt cCA9IGNvbXBhcmVfcGF0aF9jb3N0cyhmZXdlc3Rfcm93X3BhdGgsIHBhdGgsIFRPVEFMX0NPU1Qp OworCQkJCQlpZiAoY21wID4gMCB8fAorCQkJCQkJKGNtcCA9PSAwICYmCisJCQkJCQkgY29tcGFy ZV9wYXRoa2V5cyhmZXdlc3Rfcm93X3BhdGgtPnBhdGhrZXlzLAorCQkJCQkJCQkJCSAgcGF0aC0+ cGF0aGtleXMpID09IFBBVEhLRVlTX0JFVFRFUjIpKQorCQkJCQkJZmV3ZXN0X3Jvd19wYXRoID0g cGF0aDsKKwkJCQl9CisJCQl9CiAJCX0KIAl9CiAKQEAgLTM3MSw2ICs0MDIsMTAgQEAgc2V0X2No ZWFwZXN0KFJlbE9wdEluZm8gKnBhcmVudF9yZWwpCiAJaWYgKGNoZWFwZXN0X3RvdGFsX3BhdGgp CiAJCXBhcmFtZXRlcml6ZWRfcGF0aHMgPSBsY29ucyhjaGVhcGVzdF90b3RhbF9wYXRoLCBwYXJh bWV0ZXJpemVkX3BhdGhzKTsKIAorCS8qIEFkZCBmZXdlc3Qtcm93IHVucGFyYW1ldGVyaXplZCBw YXRoLCBpZiBhbnksIHRvIHBhcmFtZXRlcml6ZWRfcGF0aHMgKi8KKwlpZiAoZmV3ZXN0X3Jvd19w YXRoICYmIGZld2VzdF9yb3dfcGF0aCAhPSBjaGVhcGVzdF90b3RhbF9wYXRoKQorCQlwYXJhbWV0 ZXJpemVkX3BhdGhzID0gbGNvbnMoZmV3ZXN0X3Jvd19wYXRoLCBwYXJhbWV0ZXJpemVkX3BhdGhz KTsKKwogCS8qCiAJICogSWYgdGhlcmUgaXMgbm8gdW5wYXJhbWV0ZXJpemVkIHBhdGgsIHVzZSB0 aGUgYmVzdCBwYXJhbWV0ZXJpemVkIHBhdGggYXMKIAkgKiBjaGVhcGVzdF90b3RhbF9wYXRoIChi dXQgbm90IGFzIGNoZWFwZXN0X3N0YXJ0dXBfcGF0aCkuCkBAIC0yNzg3LDggKzI4MjIsNyBAQCBj cmVhdGVfcHJvamVjdGlvbl9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCXBhdGhub2RlLT5wYXRo LnBhdGh0eXBlID0gVF9SZXN1bHQ7CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBh dGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSB0YXJnZXQ7Ci0JLyogRm9yIG5vdywgYXNzdW1lIHdl IGFyZSBhYm92ZSBhbnkgam9pbnMsIHNvIG5vIHBhcmFtZXRlcml6YXRpb24gKi8KLQlwYXRobm9k ZS0+cGF0aC5wYXJhbV9pbmZvID0gTlVMTDsKKwlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0g c3VicGF0aC0+cGFyYW1faW5mbzsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9hd2FyZSA9IGZh bHNlOwogCXBhdGhub2RlLT5wYXRoLnBhcmFsbGVsX3NhZmUgPSByZWwtPmNvbnNpZGVyX3BhcmFs bGVsICYmCiAJCXN1YnBhdGgtPnBhcmFsbGVsX3NhZmUgJiYKQEAgLTMwNDMsOCArMzA3Nyw3IEBA IGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJcGF0aG5v ZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCS8qIFNvcnQgZG9lc24ndCBwcm9qZWN0LCBzbyB1c2Ug c291cmNlIHBhdGgncyBwYXRodGFyZ2V0ICovCiAJcGF0aG5vZGUtPnBhdGgucGF0aHRhcmdldCA9 IHN1YnBhdGgtPnBhdGh0YXJnZXQ7Ci0JLyogRm9yIG5vdywgYXNzdW1lIHdlIGFyZSBhYm92ZSBh bnkgam9pbnMsIHNvIG5vIHBhcmFtZXRlcml6YXRpb24gKi8KLQlwYXRobm9kZS0+cGF0aC5wYXJh bV9pbmZvID0gTlVMTDsKKwlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0gc3VicGF0aC0+cGFy YW1faW5mbzsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9hd2FyZSA9IGZhbHNlOwogCXBhdGhu b2RlLT5wYXRoLnBhcmFsbGVsX3NhZmUgPSByZWwtPmNvbnNpZGVyX3BhcmFsbGVsICYmCiAJCXN1 YnBhdGgtPnBhcmFsbGVsX3NhZmU7CkBAIC0zMDkxLDggKzMxMjQsNyBAQCBjcmVhdGVfc29ydF9w YXRoKFBsYW5uZXJJbmZvICpyb290LAogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAkv KiBTb3J0IGRvZXNuJ3QgcHJvamVjdCwgc28gdXNlIHNvdXJjZSBwYXRoJ3MgcGF0aHRhcmdldCAq LwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSBzdWJwYXRoLT5wYXRodGFyZ2V0OwotCS8q IEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55IGpvaW5zLCBzbyBubyBwYXJhbWV0ZXJp emF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IE5VTEw7CisJcGF0aG5vZGUt PnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBhcmFtX2luZm87CiAJcGF0aG5vZGUtPnBhdGgu cGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0g cmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlzdWJwYXRoLT5wYXJhbGxlbF9zYWZlOwpAQCAt MzI1Myw4ICszMjg1LDcgQEAgY3JlYXRlX2FnZ19wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCXBh dGhub2RlLT5wYXRoLnBhdGh0eXBlID0gVF9BZ2c7CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0g cmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSB0YXJnZXQ7Ci0JLyogRm9yIG5vdywg YXNzdW1lIHdlIGFyZSBhYm92ZSBhbnkgam9pbnMsIHNvIG5vIHBhcmFtZXRlcml6YXRpb24gKi8K LQlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0gTlVMTDsKKwlwYXRobm9kZS0+cGF0aC5wYXJh bV9pbmZvID0gc3VicGF0aC0+cGFyYW1faW5mbzsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9h d2FyZSA9IGZhbHNlOwogCXBhdGhub2RlLT5wYXRoLnBhcmFsbGVsX3NhZmUgPSByZWwtPmNvbnNp ZGVyX3BhcmFsbGVsICYmCiAJCXN1YnBhdGgtPnBhcmFsbGVsX3NhZmU7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9yZWxub2RlLmMKaW5kZXggZjk2NTczZWI1ZC4uNjI4MmMxMGRhNiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAtMTYsNiArMTYsOCBAQAogCiAjaW5jbHVkZSA8 bGltaXRzLmg+CiAKKyNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9k ZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2FwcGVuZGluZm8uaCIKQEAgLTI3 LDE5ICsyOSwyNyBAQAogI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgogI2luY2x1ZGUgIm9w dGltaXplci9wbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFuY2F0LmgiCisj aW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcmVzdHJp Y3RpbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3RsaXN0LmgiCisjaW5jbHVkZSAicGFyc2Vy L3BhcnNlX29wZXIuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNs dWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIK ICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5o IgorI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKIAotdHlwZWRlZiBzdHJ1Y3QgSm9pbkhh c2hFbnRyeQorLyoKKyAqIEFuIGVudHJ5IG9mIGEgaGFzaCB0YWJsZSB0aGF0IHdlIHVzZSB0byBt YWtlIGxvb2t1cCBmb3IgUmVsT3B0SW5mbworICogc3RydWN0dXJlcyBtb3JlIGVmZmljaWVudC4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgUmVsSGFzaEVudHJ5CiB7Ci0JUmVsaWRzCQlqb2luX3JlbGlk czsJLyogaGFzaCBrZXkgLS0tIE1VU1QgQkUgRklSU1QgKi8KLQlSZWxPcHRJbmZvICpqb2luX3Jl bDsKLX0gSm9pbkhhc2hFbnRyeTsKKwlSZWxpZHMJCXJlbGlkczsJCQkvKiBoYXNoIGtleSAtLS0g TVVTVCBCRSBGSVJTVCAqLworCVJlbE9wdEluZm8gKnJlbDsKK30gUmVsSGFzaEVudHJ5OwogCiBz dGF0aWMgdm9pZCBidWlsZF9qb2lucmVsX3RsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpqb2lucmVsLAogCQkJCQkJCQlSZWxPcHRJbmZvICppbnB1dF9yZWwsCkBAIC04Myw3ICs5 MywxNyBAQCBzdGF0aWMgdm9pZCBidWlsZF9jaGlsZF9qb2luX3JlbHRhcmdldChQbGFubmVySW5m byAqcm9vdCwKIAkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmNoaWxkcmVsLAogCQkJCQkJCQkJICAg aW50IG5hcHBpbmZvcywKIAkJCQkJCQkJCSAgIEFwcGVuZFJlbEluZm8gKiphcHBpbmZvcyk7Ci0K K3N0YXRpYyBib29sIGVhZ2VyX2FnZ3JlZ2F0aW9uX3Bvc3NpYmxlX2Zvcl9yZWxhdGlvbihQbGFu bmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIGJv b2wgaW5pdF9ncm91cGluZ190YXJnZXRzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCisJCQkJCQkJCSAgUGF0aFRhcmdldCAqdGFyZ2V0LCBQYXRoVGFyZ2V0ICphZ2dfaW5wdXQs CisJCQkJCQkJCSAgTGlzdCAqKmdyb3VwX2NsYXVzZXMsIExpc3QgKipncm91cF9leHBycyk7Citz dGF0aWMgYm9vbCBpc192YXJfaW5fYWdncmVmX29ubHkoUGxhbm5lckluZm8gKnJvb3QsIFZhciAq dmFyKTsKK3N0YXRpYyBib29sIGlzX3Zhcl9uZWVkZWRfYnlfam9pbihQbGFubmVySW5mbyAqcm9v dCwgVmFyICp2YXIsIFJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgSW5kZXggZ2V0X2V4cHJlc3Np b25fc29ydGdyb3VwcmVmKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByKTsKKworLyogTWlu aW11bSByb3cgcmVkdWN0aW9uIHJhdGlvIGF0IHdoaWNoIGEgZ3JvdXBlZCBwYXRoIGlzIGNvbnNp ZGVyZWQgdXNlZnVsICovCisjZGVmaW5lIEVBR0VSX0FHR1JFR0FURV9SQVRJTyAwLjUKIAogLyoK ICAqIHNldHVwX3NpbXBsZV9yZWxfYXJyYXlzCkBAIC0yNzYsNiArMjk2LDcgQEAgYnVpbGRfc2lt cGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBSZWxPcHRJbmZvICpwYXJlbnQp CiAJcmVsLT5qb2luaW5mbyA9IE5JTDsKIAlyZWwtPmhhc19lY2xhc3Nfam9pbnMgPSBmYWxzZTsK IAlyZWwtPmNvbnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbiA9IGZhbHNlOwkvKiBtaWdodCBnZXQg Y2hhbmdlZCBsYXRlciAqLworCXJlbC0+YWdnX2luZm8gPSBOVUxMOwogCXJlbC0+cGFydF9zY2hl bWUgPSBOVUxMOwogCXJlbC0+bnBhcnRzID0gLTE7CiAJcmVsLT5ib3VuZGluZm8gPSBOVUxMOwpA QCAtNDA2LDYgKzQyNyw5OSBAQCBidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBp bnQgcmVsaWQsIFJlbE9wdEluZm8gKnBhcmVudCkKIAlyZXR1cm4gcmVsOwogfQogCisvKgorICog YnVpbGRfc2ltcGxlX2dyb3VwZWRfcmVsCisgKgkgIENvbnN0cnVjdCBhIG5ldyBSZWxPcHRJbmZv IGZvciBhIGdyb3VwZWQgYmFzZSByZWxhdGlvbiBvdXQgb2YgYW4gZXhpc3RpbmcKKyAqCSAgbm9u LWdyb3VwZWQgYmFzZSByZWxhdGlvbi4KKyAqLworUmVsT3B0SW5mbyAqCitidWlsZF9zaW1wbGVf Z3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbF9wbGFpbikKK3sK KwlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKwlSZWxBZ2dJbmZvICphZ2dfaW5mbzsKKworCS8q CisJICogV2Ugc2hvdWxkIGhhdmUgYXZhaWxhYmxlIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBhbmQg Z3JvdXBpbmcKKwkgKiBleHByZXNzaW9ucywgb3RoZXJ3aXNlIHdlIGNhbm5vdCByZWFjaCBoZXJl LgorCSAqLworCUFzc2VydChyb290LT5hZ2dfY2xhdXNlX2xpc3QgIT0gTklMKTsKKwlBc3NlcnQo cm9vdC0+Z3JvdXBfZXhwcl9saXN0ICE9IE5JTCk7CisKKwkvKiBub3RoaW5nIHRvIGRvIGZvciBk dW1teSByZWwgKi8KKwlpZiAoSVNfRFVNTVlfUkVMKHJlbF9wbGFpbikpCisJCXJldHVybiBOVUxM OworCisJLyoKKwkgKiBQcmVwYXJlIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRlIGdy b3VwZWQgcGF0aHMgZm9yIHRoaXMgYmFzZQorCSAqIHJlbGF0aW9uLgorCSAqLworCWFnZ19pbmZv ID0gY3JlYXRlX3JlbF9hZ2dfaW5mbyhyb290LCByZWxfcGxhaW4pOworCWlmIChhZ2dfaW5mbyA9 PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogSWYgdGhlIGdyb3VwZWQgcGF0aHMg Zm9yIHRoZSBnaXZlbiBiYXNlIHJlbGF0aW9uIGFyZSBub3QgY29uc2lkZXJlZAorCSAqIHVzZWZ1 bCwgZG8gbm90IGJ1aWxkIHRoZSBncm91cGVkIHJlbGF0aW9uLgorCSAqLworCWlmICghYWdnX2lu Zm8tPmFnZ191c2VmdWwpCisJCXJldHVybiBOVUxMOworCisJLyogYnVpbGQgYSBncm91cGVkIHJl bGF0aW9uIG91dCBvZiB0aGUgcGxhaW4gcmVsYXRpb24gKi8KKwlyZWxfZ3JvdXBlZCA9IGJ1aWxk X2dyb3VwZWRfcmVsKHJvb3QsIHJlbF9wbGFpbik7CisJcmVsX2dyb3VwZWQtPnJlbHRhcmdldCA9 IGFnZ19pbmZvLT50YXJnZXQ7CisJcmVsX2dyb3VwZWQtPnJvd3MgPSBhZ2dfaW5mby0+Z3JvdXBl ZF9yb3dzOworCXJlbF9ncm91cGVkLT5hZ2dfaW5mbyA9IGFnZ19pbmZvOworCisJcmV0dXJuIHJl bF9ncm91cGVkOworfQorCisvKgorICogYnVpbGRfZ3JvdXBlZF9yZWwKKyAqCSAgQnVpbGQgYSBn cm91cGVkIHJlbGF0aW9uIGJ5IGZsYXQgY29weWluZyBhIHBsYWluIHJlbGF0aW9uIGFuZCByZXNl dHRpbmcKKyAqCSAgdGhlIG5lY2Vzc2FyeSBmaWVsZHMuCisgKi8KK1JlbE9wdEluZm8gKgorYnVp bGRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbF9wbGFpbikK K3sKKwlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKworCXJlbF9ncm91cGVkID0gbWFrZU5vZGUo UmVsT3B0SW5mbyk7CisJbWVtY3B5KHJlbF9ncm91cGVkLCByZWxfcGxhaW4sIHNpemVvZihSZWxP cHRJbmZvKSk7CisKKwkvKgorCSAqIGNsZWFyIHBhdGggaW5mbworCSAqLworCXJlbF9ncm91cGVk LT5wYXRobGlzdCA9IE5JTDsKKwlyZWxfZ3JvdXBlZC0+cHBpbGlzdCA9IE5JTDsKKwlyZWxfZ3Jv dXBlZC0+cGFydGlhbF9wYXRobGlzdCA9IE5JTDsKKwlyZWxfZ3JvdXBlZC0+Y2hlYXBlc3Rfc3Rh cnR1cF9wYXRoID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+Y2hlYXBlc3RfdG90YWxfcGF0aCA9IE5V TEw7CisJcmVsX2dyb3VwZWQtPmNoZWFwZXN0X3VuaXF1ZV9wYXRoID0gTlVMTDsKKwlyZWxfZ3Jv dXBlZC0+Y2hlYXBlc3RfcGFyYW1ldGVyaXplZF9wYXRocyA9IE5JTDsKKworCS8qCisJICogY2xl YXIgcGFydGl0aW9uIGluZm8KKwkgKi8KKwlyZWxfZ3JvdXBlZC0+cGFydF9zY2hlbWUgPSBOVUxM OworCXJlbF9ncm91cGVkLT5ucGFydHMgPSAtMTsKKwlyZWxfZ3JvdXBlZC0+Ym91bmRpbmZvID0g TlVMTDsKKwlyZWxfZ3JvdXBlZC0+cGFydGJvdW5kc19tZXJnZWQgPSBmYWxzZTsKKwlyZWxfZ3Jv dXBlZC0+cGFydGl0aW9uX3F1YWwgPSBOSUw7CisJcmVsX2dyb3VwZWQtPnBhcnRfcmVscyA9IE5V TEw7CisJcmVsX2dyb3VwZWQtPmxpdmVfcGFydHMgPSBOVUxMOworCXJlbF9ncm91cGVkLT5hbGxf cGFydHJlbHMgPSBOVUxMOworCXJlbF9ncm91cGVkLT5wYXJ0ZXhwcnMgPSBOVUxMOworCXJlbF9n cm91cGVkLT5udWxsYWJsZV9wYXJ0ZXhwcnMgPSBOVUxMOworCXJlbF9ncm91cGVkLT5jb25zaWRl cl9wYXJ0aXRpb253aXNlX2pvaW4gPSBmYWxzZTsKKworCS8qCisJICogY2xlYXIgc2l6ZSBlc3Rp bWF0ZXMKKwkgKi8KKwlyZWxfZ3JvdXBlZC0+cm93cyA9IDA7CisKKwlyZXR1cm4gcmVsX2dyb3Vw ZWQ7Cit9CisKIC8qCiAgKiBmaW5kX2Jhc2VfcmVsCiAgKgkgIEZpbmQgYSBiYXNlIG9yIG90aGVy cmVsIHJlbGF0aW9uIGVudHJ5LCB3aGljaCBtdXN0IGFscmVhZHkgZXhpc3QuCkBAIC00NzksMTEg KzU5MywxMSBAQCBmaW5kX2Jhc2VfcmVsX2lnbm9yZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBp bnQgcmVsaWQpCiB9CiAKIC8qCi0gKiBidWlsZF9qb2luX3JlbF9oYXNoCi0gKgkgIENvbnN0cnVj dCB0aGUgYXV4aWxpYXJ5IGhhc2ggdGFibGUgZm9yIGpvaW4gcmVsYXRpb25zLgorICogYnVpbGRf cmVsX2hhc2gKKyAqCSAgQ29uc3RydWN0IHRoZSBhdXhpbGlhcnkgaGFzaCB0YWJsZSBmb3IgcmVs YXRpb25zLgogICovCiBzdGF0aWMgdm9pZAotYnVpbGRfam9pbl9yZWxfaGFzaChQbGFubmVySW5m byAqcm9vdCkKK2J1aWxkX3JlbF9oYXNoKFJlbEluZm9MaXN0ICpsaXN0KQogewogCUhUQUIJICAg Kmhhc2h0YWI7CiAJSEFTSENUTAkJaGFzaF9jdGw7CkBAIC00OTEsNDcgKzYwNSw0NiBAQCBidWls ZF9qb2luX3JlbF9oYXNoKFBsYW5uZXJJbmZvICpyb290KQogCiAJLyogQ3JlYXRlIHRoZSBoYXNo IHRhYmxlICovCiAJaGFzaF9jdGwua2V5c2l6ZSA9IHNpemVvZihSZWxpZHMpOwotCWhhc2hfY3Rs LmVudHJ5c2l6ZSA9IHNpemVvZihKb2luSGFzaEVudHJ5KTsKKwloYXNoX2N0bC5lbnRyeXNpemUg PSBzaXplb2YoUmVsSGFzaEVudHJ5KTsKIAloYXNoX2N0bC5oYXNoID0gYml0bWFwX2hhc2g7CiAJ aGFzaF9jdGwubWF0Y2ggPSBiaXRtYXBfbWF0Y2g7CiAJaGFzaF9jdGwuaGN4dCA9IEN1cnJlbnRN ZW1vcnlDb250ZXh0OwotCWhhc2h0YWIgPSBoYXNoX2NyZWF0ZSgiSm9pblJlbEhhc2hUYWJsZSIs CisJaGFzaHRhYiA9IGhhc2hfY3JlYXRlKCJSZWxIYXNoVGFibGUiLAogCQkJCQkJICAyNTZMLAog CQkJCQkJICAmaGFzaF9jdGwsCiAJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBI QVNIX0NPTVBBUkUgfCBIQVNIX0NPTlRFWFQpOwogCi0JLyogSW5zZXJ0IGFsbCB0aGUgYWxyZWFk eS1leGlzdGluZyBqb2lucmVscyAqLwotCWZvcmVhY2gobCwgcm9vdC0+am9pbl9yZWxfbGlzdCkK KwkvKiBJbnNlcnQgYWxsIHRoZSBhbHJlYWR5LWV4aXN0aW5nIFJlbE9wdEluZm9zICovCisJZm9y ZWFjaChsLCBsaXN0LT5pdGVtcykKIAl7CiAJCVJlbE9wdEluZm8gKnJlbCA9IChSZWxPcHRJbmZv ICopIGxmaXJzdChsKTsKLQkJSm9pbkhhc2hFbnRyeSAqaGVudHJ5OworCQlSZWxIYXNoRW50cnkg KmhlbnRyeTsKIAkJYm9vbAkJZm91bmQ7CiAKLQkJaGVudHJ5ID0gKEpvaW5IYXNoRW50cnkgKikg aGFzaF9zZWFyY2goaGFzaHRhYiwKLQkJCQkJCQkJCQkJICAgJihyZWwtPnJlbGlkcyksCi0JCQkJ CQkJCQkJCSAgIEhBU0hfRU5URVIsCi0JCQkJCQkJCQkJCSAgICZmb3VuZCk7CisJCWhlbnRyeSA9 IChSZWxIYXNoRW50cnkgKikgaGFzaF9zZWFyY2goaGFzaHRhYiwKKwkJCQkJCQkJCQkJICAmKHJl bC0+cmVsaWRzKSwKKwkJCQkJCQkJCQkJICBIQVNIX0VOVEVSLAorCQkJCQkJCQkJCQkgICZmb3Vu ZCk7CiAJCUFzc2VydCghZm91bmQpOwotCQloZW50cnktPmpvaW5fcmVsID0gcmVsOworCQloZW50 cnktPnJlbCA9IHJlbDsKIAl9CiAKLQlyb290LT5qb2luX3JlbF9oYXNoID0gaGFzaHRhYjsKKwls aXN0LT5oYXNoID0gaGFzaHRhYjsKIH0KIAogLyoKLSAqIGZpbmRfam9pbl9yZWwKLSAqCSAgUmV0 dXJucyByZWxhdGlvbiBlbnRyeSBjb3JyZXNwb25kaW5nIHRvICdyZWxpZHMnIChhIHNldCBvZiBS VCBpbmRleGVzKSwKLSAqCSAgb3IgTlVMTCBpZiBub25lIGV4aXN0cy4gIFRoaXMgaXMgZm9yIGpv aW4gcmVsYXRpb25zLgorICogZmluZF9yZWxfaW5mbworICoJICBGaW5kIGEgUmVsT3B0SW5mbyBl bnRyeSBjb3JyZXNwb25kaW5nIHRvICdyZWxpZHMnLgogICovCi1SZWxPcHRJbmZvICoKLWZpbmRf am9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMpCitzdGF0aWMgUmVsT3B0 SW5mbyAqCitmaW5kX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBSZWxpZHMgcmVsaWRzKQog ewogCS8qCiAJICogU3dpdGNoIHRvIHVzaW5nIGhhc2ggbG9va3VwIHdoZW4gbGlzdCBncm93cyAi dG9vIGxvbmciLiAgVGhlIHRocmVzaG9sZAogCSAqIGlzIGFyYml0cmFyeSBhbmQgaXMga25vd24g b25seSBoZXJlLgogCSAqLwotCWlmICghcm9vdC0+am9pbl9yZWxfaGFzaCAmJiBsaXN0X2xlbmd0 aChyb290LT5qb2luX3JlbF9saXN0KSA+IDMyKQotCQlidWlsZF9qb2luX3JlbF9oYXNoKHJvb3Qp OworCWlmICghbGlzdC0+aGFzaCAmJiBsaXN0X2xlbmd0aChsaXN0LT5pdGVtcykgPiAzMikKKwkJ YnVpbGRfcmVsX2hhc2gobGlzdCk7CiAKIAkvKgogCSAqIFVzZSBlaXRoZXIgaGFzaHRhYmxlIGxv b2t1cCBvciBsaW5lYXIgc2VhcmNoLCBhcyBhcHByb3ByaWF0ZS4KQEAgLTU0MSwyMyArNjU0LDIz IEBAIGZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMpCiAJICog c28gd291bGQgZm9yY2UgcmVsaWRzIG91dCBvZiBhIHJlZ2lzdGVyIGFuZCB0aHVzIHByb2JhYmx5 IHNsb3cgZG93biB0aGUKIAkgKiBsaXN0LXNlYXJjaCBjYXNlLgogCSAqLwotCWlmIChyb290LT5q b2luX3JlbF9oYXNoKQorCWlmIChsaXN0LT5oYXNoKQogCXsKIAkJUmVsaWRzCQloYXNoa2V5ID0g cmVsaWRzOwotCQlKb2luSGFzaEVudHJ5ICpoZW50cnk7CisJCVJlbEhhc2hFbnRyeSAqaGVudHJ5 OwogCi0JCWhlbnRyeSA9IChKb2luSGFzaEVudHJ5ICopIGhhc2hfc2VhcmNoKHJvb3QtPmpvaW5f cmVsX2hhc2gsCi0JCQkJCQkJCQkJCSAgICZoYXNoa2V5LAotCQkJCQkJCQkJCQkgICBIQVNIX0ZJ TkQsCi0JCQkJCQkJCQkJCSAgIE5VTEwpOworCQloZW50cnkgPSAoUmVsSGFzaEVudHJ5ICopIGhh c2hfc2VhcmNoKGxpc3QtPmhhc2gsCisJCQkJCQkJCQkJCSAgJmhhc2hrZXksCisJCQkJCQkJCQkJ CSAgSEFTSF9GSU5ELAorCQkJCQkJCQkJCQkgIE5VTEwpOwogCQlpZiAoaGVudHJ5KQotCQkJcmV0 dXJuIGhlbnRyeS0+am9pbl9yZWw7CisJCQlyZXR1cm4gaGVudHJ5LT5yZWw7CiAJfQogCWVsc2UK IAl7CiAJCUxpc3RDZWxsICAgKmw7CiAKLQkJZm9yZWFjaChsLCByb290LT5qb2luX3JlbF9saXN0 KQorCQlmb3JlYWNoKGwsIGxpc3QtPml0ZW1zKQogCQl7CiAJCQlSZWxPcHRJbmZvICpyZWwgPSAo UmVsT3B0SW5mbyAqKSBsZmlyc3QobCk7CiAKQEAgLTU2OSw2ICs2ODIsMjggQEAgZmluZF9qb2lu X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKIAlyZXR1cm4gTlVMTDsKIH0K IAorLyoKKyAqIGZpbmRfam9pbl9yZWwKKyAqCSAgUmV0dXJucyByZWxhdGlvbiBlbnRyeSBjb3Jy ZXNwb25kaW5nIHRvICdyZWxpZHMnIChhIHNldCBvZiBSVCBpbmRleGVzKSwKKyAqCSAgb3IgTlVM TCBpZiBub25lIGV4aXN0cy4gIFRoaXMgaXMgZm9yIGpvaW4gcmVsYXRpb25zLgorICovCitSZWxP cHRJbmZvICoKK2ZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMp Cit7CisJcmV0dXJuIGZpbmRfcmVsX2luZm8ocm9vdC0+am9pbl9yZWxfbGlzdCwgcmVsaWRzKTsK K30KKworLyoKKyAqIGZpbmRfZ3JvdXBlZF9yZWwKKyAqCSAgUmV0dXJucyByZWxhdGlvbiBlbnRy eSBjb3JyZXNwb25kaW5nIHRvICdyZWxpZHMnIChhIHNldCBvZiBSVCBpbmRleGVzKSwKKyAqCSAg b3IgTlVMTCBpZiBub25lIGV4aXN0cy4gIFRoaXMgaXMgZm9yIGdyb3VwZWQgcmVsYXRpb25zLgor ICovCitSZWxPcHRJbmZvICoKK2ZpbmRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJl bGlkcyByZWxpZHMpCit7CisJcmV0dXJuIGZpbmRfcmVsX2luZm8ocm9vdC0+Z3JvdXBlZF9yZWxf bGlzdCwgcmVsaWRzKTsKK30KKwogLyoKICAqIHNldF9mb3JlaWduX3JlbF9wcm9wZXJ0aWVzCiAg KgkJU2V0IHVwIGZvcmVpZ24tam9pbiBmaWVsZHMgaWYgb3V0ZXIgYW5kIGlubmVyIHJlbGF0aW9u IGFyZSBmb3JlaWduCkBAIC02MTksMzEgKzc1NCw1MyBAQCBzZXRfZm9yZWlnbl9yZWxfcHJvcGVy dGllcyhSZWxPcHRJbmZvICpqb2lucmVsLCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiB9CiAKIC8q Ci0gKiBhZGRfam9pbl9yZWwKLSAqCQlBZGQgZ2l2ZW4gam9pbiByZWxhdGlvbiB0byB0aGUgbGlz dCBvZiBqb2luIHJlbGF0aW9ucyBpbiB0aGUgZ2l2ZW4KLSAqCQlQbGFubmVySW5mby4gQWxzbyBh ZGQgaXQgdG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUgaXMgb25lLgorICogYWRk X3JlbF9pbmZvCisgKgkJQWRkIGdpdmVuIHJlbGF0aW9uIHRvIHRoZSBsaXN0LCBhbmQgYWxzbyBh ZGQgaXQgdG8gdGhlIGF1eGlsaWFyeQorICoJCWhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUuCiAg Ki8KIHN0YXRpYyB2b2lkCi1hZGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKmpvaW5yZWwpCithZGRfcmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbE9wdEluZm8g KnJlbCkKIHsKLQkvKiBHRVFPIHJlcXVpcmVzIHVzIHRvIGFwcGVuZCB0aGUgbmV3IGpvaW5yZWwg dG8gdGhlIGVuZCBvZiB0aGUgbGlzdCEgKi8KLQlyb290LT5qb2luX3JlbF9saXN0ID0gbGFwcGVu ZChyb290LT5qb2luX3JlbF9saXN0LCBqb2lucmVsKTsKKwkvKiBHRVFPIHJlcXVpcmVzIHVzIHRv IGFwcGVuZCB0aGUgbmV3IHJlbGF0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QhICovCisJbGlz dC0+aXRlbXMgPSBsYXBwZW5kKGxpc3QtPml0ZW1zLCByZWwpOwogCiAJLyogc3RvcmUgaXQgaW50 byB0aGUgYXV4aWxpYXJ5IGhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUuICovCi0JaWYgKHJvb3Qt PmpvaW5fcmVsX2hhc2gpCisJaWYgKGxpc3QtPmhhc2gpCiAJewotCQlKb2luSGFzaEVudHJ5ICpo ZW50cnk7CisJCVJlbEhhc2hFbnRyeSAqaGVudHJ5OwogCQlib29sCQlmb3VuZDsKIAotCQloZW50 cnkgPSAoSm9pbkhhc2hFbnRyeSAqKSBoYXNoX3NlYXJjaChyb290LT5qb2luX3JlbF9oYXNoLAot CQkJCQkJCQkJCQkgICAmKGpvaW5yZWwtPnJlbGlkcyksCi0JCQkJCQkJCQkJCSAgIEhBU0hfRU5U RVIsCi0JCQkJCQkJCQkJCSAgICZmb3VuZCk7CisJCWhlbnRyeSA9IChSZWxIYXNoRW50cnkgKikg aGFzaF9zZWFyY2gobGlzdC0+aGFzaCwKKwkJCQkJCQkJCQkJICAmKHJlbC0+cmVsaWRzKSwKKwkJ CQkJCQkJCQkJICBIQVNIX0VOVEVSLAorCQkJCQkJCQkJCQkgICZmb3VuZCk7CiAJCUFzc2VydCgh Zm91bmQpOwotCQloZW50cnktPmpvaW5fcmVsID0gam9pbnJlbDsKKwkJaGVudHJ5LT5yZWwgPSBy ZWw7CiAJfQogfQogCisvKgorICogYWRkX2pvaW5fcmVsCisgKgkJQWRkIGdpdmVuIGpvaW4gcmVs YXRpb24gdG8gdGhlIGxpc3Qgb2Ygam9pbiByZWxhdGlvbnMgaW4gdGhlIGdpdmVuCisgKgkJUGxh bm5lckluZm8uCisgKi8KK3N0YXRpYyB2b2lkCithZGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKmpvaW5yZWwpCit7CisJYWRkX3JlbF9pbmZvKHJvb3QtPmpvaW5fcmVs X2xpc3QsIGpvaW5yZWwpOworfQorCisvKgorICogYWRkX2dyb3VwZWRfcmVsCisgKgkJQWRkIGdp dmVuIGdyb3VwZWQgcmVsYXRpb24gdG8gdGhlIGxpc3Qgb2YgZ3JvdXBlZCByZWxhdGlvbnMgaW4g dGhlCisgKgkJZ2l2ZW4gUGxhbm5lckluZm8uCisgKi8KK3ZvaWQKK2FkZF9ncm91cGVkX3JlbChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQoreworCWFkZF9yZWxfaW5mbyhyb290 LT5ncm91cGVkX3JlbF9saXN0LCByZWwpOworfQorCiAvKgogICogYnVpbGRfam9pbl9yZWwKICAq CSAgUmV0dXJucyByZWxhdGlvbiBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSB1bmlvbiBvZiB0 d28gZ2l2ZW4gcmVscywKQEAgLTc1NSw2ICs5MTIsNyBAQCBidWlsZF9qb2luX3JlbChQbGFubmVy SW5mbyAqcm9vdCwKIAlqb2lucmVsLT5qb2luaW5mbyA9IE5JTDsKIAlqb2lucmVsLT5oYXNfZWNs YXNzX2pvaW5zID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFydGl0aW9ud2lzZV9qb2lu ID0gZmFsc2U7CS8qIG1pZ2h0IGdldCBjaGFuZ2VkIGxhdGVyICovCisJam9pbnJlbC0+YWdnX2lu Zm8gPSBOVUxMOwogCWpvaW5yZWwtPnBhcmVudCA9IE5VTEw7CiAJam9pbnJlbC0+dG9wX3BhcmVu dCA9IE5VTEw7CiAJam9pbnJlbC0+dG9wX3BhcmVudF9yZWxpZHMgPSBOVUxMOwpAQCAtOTM5LDYg KzEwOTcsNyBAQCBidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqb3V0ZXJfcmVsLAogCWpvaW5yZWwtPmpvaW5pbmZvID0gTklMOwogCWpvaW5yZWwtPmhh c19lY2xhc3Nfam9pbnMgPSBmYWxzZTsKIAlqb2lucmVsLT5jb25zaWRlcl9wYXJ0aXRpb253aXNl X2pvaW4gPSBmYWxzZTsJLyogbWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIgKi8KKwlqb2lucmVsLT5h Z2dfaW5mbyA9IE5VTEw7CiAJam9pbnJlbC0+cGFyZW50ID0gcGFyZW50X2pvaW5yZWw7CiAJam9p bnJlbC0+dG9wX3BhcmVudCA9IHBhcmVudF9qb2lucmVsLT50b3BfcGFyZW50ID8gcGFyZW50X2pv aW5yZWwtPnRvcF9wYXJlbnQgOiBwYXJlbnRfam9pbnJlbDsKIAlqb2lucmVsLT50b3BfcGFyZW50 X3JlbGlkcyA9IGpvaW5yZWwtPnRvcF9wYXJlbnQtPnJlbGlkczsKQEAgLTI1MTgsMyArMjY3Nyw1 MTEgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWx0YXJnZXQoUGxhbm5lckluZm8gKnJvb3QsCiAJY2hp bGRyZWwtPnJlbHRhcmdldC0+Y29zdC5wZXJfdHVwbGUgPSBwYXJlbnRyZWwtPnJlbHRhcmdldC0+ Y29zdC5wZXJfdHVwbGU7CiAJY2hpbGRyZWwtPnJlbHRhcmdldC0+d2lkdGggPSBwYXJlbnRyZWwt PnJlbHRhcmdldC0+d2lkdGg7CiB9CisKKy8qCisgKiBjcmVhdGVfcmVsX2FnZ19pbmZvCisgKgkg IENyZWF0ZSB0aGUgUmVsQWdnSW5mbyBzdHJ1Y3R1cmUgZm9yIHRoZSBnaXZlbiByZWxhdGlvbiBp ZiBpdCBjYW4gcHJvZHVjZQorICoJICBncm91cGVkIHBhdGhzLiAgVGhlIGdpdmVuIHJlbGF0aW9u IGlzIHRoZSBub24tZ3JvdXBlZCBvbmUgd2hpY2ggaGFzIHRoZQorICoJICByZWx0YXJnZXQgYWxy ZWFkeSBjb25zdHJ1Y3RlZC4KKyAqLworUmVsQWdnSW5mbyAqCitjcmVhdGVfcmVsX2FnZ19pbmZv KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCit7CisJTGlzdENlbGwgICAqbGM7 CisJUmVsQWdnSW5mbyAqcmVzdWx0OworCVBhdGhUYXJnZXQgKmFnZ19pbnB1dDsKKwlQYXRoVGFy Z2V0ICp0YXJnZXQ7CisJTGlzdAkgICAqZ3JvdXBfY2xhdXNlcyA9IE5JTDsKKwlMaXN0CSAgICpn cm91cF9leHBycyA9IE5JTDsKKworCS8qCisJICogVGhlIGxpc3RzIG9mIGFnZ3JlZ2F0ZSBleHBy ZXNzaW9ucyBhbmQgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgc2hvdWxkIGhhdmUKKwkgKiBiZWVuIGNv bnN0cnVjdGVkLgorCSAqLworCUFzc2VydChyb290LT5hZ2dfY2xhdXNlX2xpc3QgIT0gTklMKTsK KwlBc3NlcnQocm9vdC0+Z3JvdXBfZXhwcl9saXN0ICE9IE5JTCk7CisKKwkvKgorCSAqIElmIHRo aXMgaXMgYSBjaGlsZCByZWwsIHRoZSBncm91cGVkIHJlbCBmb3IgaXRzIHBhcmVudCByZWwgbXVz dCBoYXZlCisJICogYmVlbiBjcmVhdGVkIGlmIGl0IGNhbi4gIFNvIHdlIGNhbiBqdXN0IHVzZSBw YXJlbnQncyBSZWxBZ2dJbmZvIGlmCisJICogdGhlcmUgaXMgb25lLCB3aXRoIGFwcHJvcHJpYXRl IHZhcmlhYmxlIHN1YnN0aXR1dGlvbnMuCisJICovCisJaWYgKElTX09USEVSX1JFTChyZWwpKQor CXsKKwkJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJCVJlbEFnZ0luZm8gKmFnZ19pbmZvOwor CisJCUFzc2VydCghYm1zX2lzX2VtcHR5KHJlbC0+dG9wX3BhcmVudF9yZWxpZHMpKTsKKwkJcmVs X2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIHJlbC0+dG9wX3BhcmVudF9yZWxpZHMp OworCisJCWlmIChyZWxfZ3JvdXBlZCA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJQXNz ZXJ0KElTX0dST1VQRURfUkVMKHJlbF9ncm91cGVkKSk7CisJCS8qIE11c3QgZG8gbXVsdGktbGV2 ZWwgdHJhbnNmb3JtYXRpb24gKi8KKwkJYWdnX2luZm8gPSAoUmVsQWdnSW5mbyAqKQorCQkJYWRq dXN0X2FwcGVuZHJlbF9hdHRyc19tdWx0aWxldmVsKHJvb3QsCisJCQkJCQkJCQkJCSAgKE5vZGUg KikgcmVsX2dyb3VwZWQtPmFnZ19pbmZvLAorCQkJCQkJCQkJCQkgIHJlbCwKKwkJCQkJCQkJCQkJ ICByZWwtPnRvcF9wYXJlbnQpOworCisJCWFnZ19pbmZvLT5ncm91cGVkX3Jvd3MgPQorCQkJZXN0 aW1hdGVfbnVtX2dyb3Vwcyhyb290LCBhZ2dfaW5mby0+Z3JvdXBfZXhwcnMsCisJCQkJCQkJCXJl bC0+cm93cywgTlVMTCwgTlVMTCk7CisKKwkJLyoKKwkJICogVGhlIGdyb3VwZWQgcGF0aHMgZm9y IHRoZSBnaXZlbiByZWxhdGlvbiBhcmUgY29uc2lkZXJlZCB1c2VmdWwgaWZmCisJCSAqIHRoZSBy b3cgcmVkdWN0aW9uIHJhdGlvIGlzIGdyZWF0ZXIgdGhhbiBFQUdFUl9BR0dSRUdBVEVfUkFUSU8u CisJCSAqLworCQlhZ2dfaW5mby0+YWdnX3VzZWZ1bCA9CisJCQkoYWdnX2luZm8tPmdyb3VwZWRf cm93cyA8PSByZWwtPnJvd3MgKiAoMSAtIEVBR0VSX0FHR1JFR0FURV9SQVRJTykpOworCisJCXJl dHVybiBhZ2dfaW5mbzsKKwl9CisKKwkvKiBDaGVjayBpZiBpdCdzIHBvc3NpYmxlIHRvIHByb2R1 Y2UgZ3JvdXBlZCBwYXRocyBmb3IgdGhpcyByZWxhdGlvbi4gKi8KKwlpZiAoIWVhZ2VyX2FnZ3Jl Z2F0aW9uX3Bvc3NpYmxlX2Zvcl9yZWxhdGlvbihyb290LCByZWwpKQorCQlyZXR1cm4gTlVMTDsK KworCS8qCisJICogQ3JlYXRlIHRhcmdldHMgZm9yIHRoZSBncm91cGVkIHBhdGhzIGFuZCBmb3Ig dGhlIGlucHV0IHBhdGhzIG9mIHRoZQorCSAqIGdyb3VwZWQgcGF0aHMuCisJICovCisJdGFyZ2V0 ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKKwlhZ2dfaW5wdXQgPSBjcmVhdGVfZW1wdHlf cGF0aHRhcmdldCgpOworCisJLyogLi4uIGFuZCBpbml0aWFsaXplIHRoZXNlIHRhcmdldHMgKi8K KwlpZiAoIWluaXRfZ3JvdXBpbmdfdGFyZ2V0cyhyb290LCByZWwsIHRhcmdldCwgYWdnX2lucHV0 LAorCQkJCQkJCSAgICZncm91cF9jbGF1c2VzLCAmZ3JvdXBfZXhwcnMpKQorCQlyZXR1cm4gTlVM TDsKKworCS8qCisJICogRWFnZXIgYWdncmVnYXRpb24gaXMgbm90IGFwcGxpY2FibGUgaWYgdGhl cmUgYXJlIG5vIGF2YWlsYWJsZSBncm91cGluZworCSAqIGV4cHJlc3Npb25zLgorCSAqLworCWlm IChsaXN0X2xlbmd0aChncm91cF9jbGF1c2VzKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCS8q IGJ1aWxkIHRoZSBSZWxBZ2dJbmZvIHJlc3VsdCAqLworCXJlc3VsdCA9IG1ha2VOb2RlKFJlbEFn Z0luZm8pOworCisJcmVzdWx0LT5ncm91cF9jbGF1c2VzID0gZ3JvdXBfY2xhdXNlczsKKwlyZXN1 bHQtPmdyb3VwX2V4cHJzID0gZ3JvdXBfZXhwcnM7CisKKwkvKiBDYWxjdWxhdGUgcGF0aGtleXMg dGhhdCByZXByZXNlbnQgdGhpcyBncm91cGluZyByZXF1aXJlbWVudHMgKi8KKwlyZXN1bHQtPmdy b3VwX3BhdGhrZXlzID0KKwkJbWFrZV9wYXRoa2V5c19mb3Jfc29ydGNsYXVzZXMocm9vdCwgcmVz dWx0LT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJICBtYWtlX3RsaXN0X2Zyb21fcGF0aHRhcmdl dCh0YXJnZXQpKTsKKworCS8qIEFkZCBhZ2dyZWdhdGVzIHRvIHRoZSBncm91cGluZyB0YXJnZXQg Ki8KKwlmb3JlYWNoKGxjLCByb290LT5hZ2dfY2xhdXNlX2xpc3QpCisJeworCQlBZ2dDbGF1c2VJ bmZvICphY19pbmZvID0gbGZpcnN0X25vZGUoQWdnQ2xhdXNlSW5mbywgbGMpOworCQlBZ2dyZWYJ ICAgKmFnZ3JlZjsKKworCQlBc3NlcnQoSXNBKGFjX2luZm8tPmFnZ3JlZiwgQWdncmVmKSk7CisK KwkJYWdncmVmID0gKEFnZ3JlZiAqKSBjb3B5T2JqZWN0KGFjX2luZm8tPmFnZ3JlZik7CisJCW1h cmtfcGFydGlhbF9hZ2dyZWYoYWdncmVmLCBBR0dTUExJVF9JTklUSUFMX1NFUklBTCk7CisKKwkJ YWRkX2NvbHVtbl90b19wYXRodGFyZ2V0KHRhcmdldCwgKEV4cHIgKikgYWdncmVmLCAwKTsKKwl9 CisKKwkvKiBTZXQgdGhlIGVzdGltYXRlZCBldmFsIGNvc3QgYW5kIG91dHB1dCB3aWR0aCBmb3Ig Ym90aCB0YXJnZXRzICovCisJc2V0X3BhdGh0YXJnZXRfY29zdF93aWR0aChyb290LCB0YXJnZXQp OworCXNldF9wYXRodGFyZ2V0X2Nvc3Rfd2lkdGgocm9vdCwgYWdnX2lucHV0KTsKKworCXJlc3Vs dC0+cmVsaWRzID0gYm1zX2NvcHkocmVsLT5yZWxpZHMpOworCXJlc3VsdC0+dGFyZ2V0ID0gdGFy Z2V0OworCXJlc3VsdC0+YWdnX2lucHV0ID0gYWdnX2lucHV0OworCXJlc3VsdC0+Z3JvdXBlZF9y b3dzID0gZXN0aW1hdGVfbnVtX2dyb3Vwcyhyb290LCByZXN1bHQtPmdyb3VwX2V4cHJzLAorCQkJ CQkJCQkJCQkgICByZWwtPnJvd3MsIE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiBUaGUgZ3JvdXBl ZCBwYXRocyBmb3IgdGhlIGdpdmVuIHJlbGF0aW9uIGFyZSBjb25zaWRlcmVkIHVzZWZ1bCBpZmYg dGhlCisJICogcm93IHJlZHVjdGlvbiByYXRpbyBpcyBncmVhdGVyIHRoYW4gRUFHRVJfQUdHUkVH QVRFX1JBVElPLgorCSAqLworCXJlc3VsdC0+YWdnX3VzZWZ1bCA9CisJCShyZXN1bHQtPmdyb3Vw ZWRfcm93cyA8PSByZWwtPnJvd3MgKiAoMSAtIEVBR0VSX0FHR1JFR0FURV9SQVRJTykpOworCisJ cmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGVhZ2VyX2FnZ3JlZ2F0aW9uX3Bvc3NpYmxlX2Zv cl9yZWxhdGlvbgorICogCSAgQ2hlY2sgaWYgaXQncyBwb3NzaWJsZSB0byBwcm9kdWNlIGdyb3Vw ZWQgcGF0aHMgZm9yIHRoZSBnaXZlbiByZWxhdGlvbi4KKyAqLworc3RhdGljIGJvb2wKK2VhZ2Vy X2FnZ3JlZ2F0aW9uX3Bvc3NpYmxlX2Zvcl9yZWxhdGlvbihQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsKQoreworCUxpc3RDZWxsICAgKmxjOworCWludAkJCWN1cl9yZWxpZDsKKwor CS8qCisJICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBnaXZlbiByZWxhdGlvbiBpcyBpbiB0aGUgbnVs bGFibGUgc2lkZSBvZiBhbiBvdXRlcgorCSAqIGpvaW4uICBJbiB0aGlzIGNhc2UsIHdlIGNhbm5v dCBwdXNoIGEgcGFydGlhbCBhZ2dyZWdhdGlvbiBkb3duIHRvIHRoZQorCSAqIHJlbGF0aW9uLCBi ZWNhdXNlIHRoZSBOVUxMLWV4dGVuZGVkIHJvd3MgcHJvZHVjZWQgYnkgdGhlIG91dGVyIGpvaW4K KwkgKiB3b3VsZCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gd2UgcGVyZm9ybSB0aGUgcGFydGlhbCBh Z2dyZWdhdGlvbiwgd2hpbGUKKwkgKiB3aXRoIGEgbm9uLWVhZ2VyLWFnZ3JlZ2F0aW9uIHBsYW4g dGhlc2Ugcm93cyBhcmUgYXZhaWxhYmxlIGZvciB0aGUKKwkgKiB0b3AtbGV2ZWwgYWdncmVnYXRp b24uICBEb2luZyBzbyBtYXkgcmVzdWx0IGluIHRoZSByb3dzIGJlaW5nIGdyb3VwZWQKKwkgKiBk aWZmZXJlbnRseSB0aGFuIGV4cGVjdGVkLCBvciBwcm9kdWNlIGluY29ycmVjdCB2YWx1ZXMgZnJv bSB0aGUKKwkgKiBhZ2dyZWdhdGUgZnVuY3Rpb25zLgorCSAqLworCWN1cl9yZWxpZCA9IC0xOwor CXdoaWxlICgoY3VyX3JlbGlkID0gYm1zX25leHRfbWVtYmVyKHJlbC0+cmVsaWRzLCBjdXJfcmVs aWQpKSA+PSAwKQorCXsKKwkJUmVsT3B0SW5mbyAqYmFzZXJlbCA9IGZpbmRfYmFzZV9yZWxfaWdu b3JlX2pvaW4ocm9vdCwgY3VyX3JlbGlkKTsKKworCQlpZiAoYmFzZXJlbCA9PSBOVUxMKQorCQkJ Y29udGludWU7CQkJLyogaWdub3JlIG91dGVyIGpvaW5zIGluIHJlbC0+cmVsaWRzICovCisKKwkJ aWYgKCFibXNfaXNfc3Vic2V0KGJhc2VyZWwtPm51bGxpbmdfcmVsaWRzLCByZWwtPnJlbGlkcykp CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBGb3Igbm93IHdlIGRvbid0IHRyeSB0 byBzdXBwb3J0IFBsYWNlSG9sZGVyVmFycy4KKwkgKi8KKwlmb3JlYWNoKGxjLCByZWwtPnJlbHRh cmdldC0+ZXhwcnMpCisJeworCQlFeHByCSAgICpleHByID0gbGZpcnN0KGxjKTsKKworCQlpZiAo SXNBKGV4cHIsIFBsYWNlSG9sZGVyVmFyKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBD YWxsZXIgc2hvdWxkIG9ubHkgcGFzcyBiYXNlIHJlbGF0aW9ucyBvciBqb2lucy4gKi8KKwlBc3Nl cnQocmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9CQVNFUkVMIHx8CisJCSAgIHJlbC0+cmVsb3B0 a2luZCA9PSBSRUxPUFRfSk9JTlJFTCk7CisKKwkvKgorCSAqIENoZWNrIGlmIGFsbCBhZ2dyZWdh dGUgZXhwcmVzc2lvbnMgY2FuIGJlIGV2YWx1YXRlZCBvbiB0aGlzIHJlbGF0aW9uCisJICogbGV2 ZWwuCisJICovCisJZm9yZWFjaChsYywgcm9vdC0+YWdnX2NsYXVzZV9saXN0KQorCXsKKwkJQWdn Q2xhdXNlSW5mbyAqYWNfaW5mbyA9IGxmaXJzdF9ub2RlKEFnZ0NsYXVzZUluZm8sIGxjKTsKKwor CQlBc3NlcnQoSXNBKGFjX2luZm8tPmFnZ3JlZiwgQWdncmVmKSk7CisKKwkJLyoKKwkJICogR2l2 ZSB1cCBpZiBhbnkgYWdncmVnYXRlIG5lZWRzIHJlbGF0aW9ucyBvdGhlciB0aGFuIHRoZSBjdXJy ZW50CisJCSAqIG9uZS4KKwkJICoKKwkJICogSWYgdGhlIGFnZ3JlZ2F0ZSBuZWVkcyB0aGUgY3Vy cmVudCByZWwgcGx1cyBhbnl0aGluZyBlbHNlLCBncm91cGluZworCQkgKiB0aGUgY3VycmVudCBy ZWwgY291bGQgbWFrZSBzb21lIGlucHV0IHZhcmlhYmxlcyB1bmF2YWlsYWJsZSBmb3IgdGhlCisJ CSAqIGhpZ2hlciBhZ2dyZWdhdGUgYW5kIGFsc28gcmVkdWNlIHRoZSBudW1iZXIgb2YgaW5wdXQg cm93cyBpdAorCQkgKiByZWNlaXZlcy4KKwkJICoKKwkJICogSWYgdGhlIGFnZ3JlZ2F0ZSBkb2Vz IG5vdCBuZWVkIHRoZSBjdXJyZW50IHJlbCBhdCBhbGwsIHRoZW4gdGhlCisJCSAqIGN1cnJlbnQg cmVsIHNob3VsZCBub3QgYmUgZ3JvdXBlZCwgYXMgd2UgZG8gbm90IHN1cHBvcnQgam9pbmluZyB0 d28KKwkJICogZ3JvdXBlZCByZWxhdGlvbnMuCisJCSAqLworCQlpZiAoIWJtc19pc19zdWJzZXQo YWNfaW5mby0+YWdnX2V2YWxfYXQsIHJlbC0+cmVsaWRzKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIGluaXRfZ3JvdXBpbmdfdGFyZ2V0cworICoJ ICBJbml0aWFsaXplIHRoZSB0YXJnZXQgZm9yIGdyb3VwZWQgcGF0aHMgKHRhcmdldCkgYXMgd2Vs bCBhcyB0aGUgdGFyZ2V0CisgKgkgIGZvciBwYXRocyB0aGF0IGdlbmVyYXRlIGlucHV0IGZvciB0 aGUgZ3JvdXBlZCBwYXRocyAoYWdnX2lucHV0KS4KKyAqCisgKiBXZSBhbHNvIGNvbnN0cnVjdCB0 aGUgbGlzdCBvZiBTb3J0R3JvdXBDbGF1c2VzIGFuZCB0aGUgbGlzdCBvZiBncm91cGluZworICog ZXhwcmVzc2lvbnMgZm9yIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uLCBhbmQgcmV0dXJuIHRoZW0g aW4gKmdyb3VwX2NsYXVzZQorICogYW5kICpncm91cF9leHBycy4KKyAqCisgKiBSZXR1cm4gdHJ1 ZSBpZiB0aGUgdGFyZ2V0cyBjb3VsZCBiZSBpbml0aWFsaXplZCwgZmFsc2Ugb3RoZXJ3aXNlLgor ICovCitzdGF0aWMgYm9vbAoraW5pdF9ncm91cGluZ190YXJnZXRzKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwsCisJCQkJCSAgUGF0aFRhcmdldCAqdGFyZ2V0LCBQYXRoVGFyZ2V0 ICphZ2dfaW5wdXQsCisJCQkJCSAgTGlzdCAqKmdyb3VwX2NsYXVzZXMsIExpc3QgKipncm91cF9l eHBycykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpwb3NzaWJseV9kZXBlbmRlbnQg PSBOSUw7CisJSW5kZXgJCW1heFNvcnRHcm91cFJlZjsKKworCS8qIElkZW50aWZ5IHRoZSBtYXgg c29ydGdyb3VwcmVmICovCisJbWF4U29ydEdyb3VwUmVmID0gMDsKKwlmb3JlYWNoKGxjLCByb290 LT5wcm9jZXNzZWRfdGxpc3QpCisJeworCQlJbmRleAkJcmVmID0gKChUYXJnZXRFbnRyeSAqKSBs Zmlyc3QobGMpKS0+cmVzc29ydGdyb3VwcmVmOworCisJCWlmIChyZWYgPiBtYXhTb3J0R3JvdXBS ZWYpCisJCQltYXhTb3J0R3JvdXBSZWYgPSByZWY7CisJfQorCisJZm9yZWFjaChsYywgcmVsLT5y ZWx0YXJnZXQtPmV4cHJzKQorCXsKKwkJRXhwcgkgICAqZXhwciA9IChFeHByICopIGxmaXJzdChs Yyk7CisJCUluZGV4CQlzb3J0Z3JvdXByZWY7CisKKwkJLyoKKwkJICogR2l2ZW4gdGhhdCBQbGFj ZUhvbGRlclZhciBjdXJyZW50bHkgcHJldmVudHMgdXMgZnJvbSBkb2luZyBlYWdlcgorCQkgKiBh Z2dyZWdhdGlvbiwgdGhlIHNvdXJjZSB0YXJnZXQgY2Fubm90IGNvbnRhaW4gYW55dGhpbmcgbW9y ZSBjb21wbGV4CisJCSAqIHRoYW4gYSBWYXIuCisJCSAqLworCQlBc3NlcnQoSXNBKGV4cHIsIFZh cikpOworCisJCS8qIEdldCB0aGUgc29ydGdyb3VwcmVmIGlmIHRoZSBleHByIGNhbiBhY3QgYXMg Z3JvdXBpbmcgZXhwcmVzc2lvbi4gKi8KKwkJc29ydGdyb3VwcmVmID0gZ2V0X2V4cHJlc3Npb25f c29ydGdyb3VwcmVmKHJvb3QsIGV4cHIpOworCQlpZiAoc29ydGdyb3VwcmVmID4gMCkKKwkJewor CQkJU29ydEdyb3VwQ2xhdXNlICpzZ2M7CisKKwkJCS8qIEZpbmQgdGhlIG1hdGNoaW5nIFNvcnRH cm91cENsYXVzZSAqLworCQkJc2djID0gZ2V0X3NvcnRncm91cHJlZl9jbGF1c2Uoc29ydGdyb3Vw cmVmLCByb290LT5wcm9jZXNzZWRfZ3JvdXBDbGF1c2UpOworCQkJQXNzZXJ0KHNnYy0+dGxlU29y dEdyb3VwUmVmIDw9IG1heFNvcnRHcm91cFJlZik7CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgdGFy Z2V0IGV4cHJlc3Npb24gY2FuIGJlIHVzZWQgYXMgYSBncm91cGluZyBrZXksIGl0CisJCQkgKiBz aG91bGQgYmUgZW1pdHRlZCBieSB0aGUgZ3JvdXBlZCBwYXRocyB0aGF0IGhhdmUgYmVlbiBwdXNo ZWQKKwkJCSAqIGRvd24gdG8gdGhpcyByZWxhdGlvbiBsZXZlbC4KKwkJCSAqLworCQkJYWRkX2Nv bHVtbl90b19wYXRodGFyZ2V0KHRhcmdldCwgZXhwciwgc29ydGdyb3VwcmVmKTsKKworCQkJLyoK KwkJCSAqIC4uLiBhbmQgaXQgYWxzbyBzaG91bGQgYmUgZW1pdHRlZCBieSB0aGUgaW5wdXQgcGF0 aHMuCisJCQkgKi8KKwkJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIGV4cHIs IHNvcnRncm91cHJlZik7CisKKwkJCS8qCisJCQkgKiBSZWNvcmQgdGhpcyBTb3J0R3JvdXBDbGF1 c2UgYW5kIGdyb3VwaW5nIGV4cHJlc3Npb24uICBOb3RlIHRoYXQKKwkJCSAqIHRoaXMgU29ydEdy b3VwQ2xhdXNlIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHJlY29yZGVkLgorCQkJICovCisJCQlp ZiAoIWxpc3RfbWVtYmVyKCpncm91cF9jbGF1c2VzLCBzZ2MpKQorCQkJeworCQkJCSpncm91cF9j bGF1c2VzID0gbGFwcGVuZCgqZ3JvdXBfY2xhdXNlcywgc2djKTsKKwkJCQkqZ3JvdXBfZXhwcnMg PSBsYXBwZW5kKCpncm91cF9leHBycywgZXhwcik7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoaXNf dmFyX25lZWRlZF9ieV9qb2luKHJvb3QsIChWYXIgKikgZXhwciwgcmVsKSkKKwkJeworCQkJLyoK KwkJCSAqIFRoZSBleHByZXNzaW9uIGlzIG5lZWRlZCBmb3IgYW4gdXBwZXIgam9pbiBidXQgaXMg bmVpdGhlciBpbgorCQkJICogdGhlIEdST1VQIEJZIGNsYXVzZSBub3IgZGVyaXZhYmxlIGZyb20g aXQgdXNpbmcgRUMgKG90aGVyd2lzZSwKKwkJCSAqIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVu IGluY2x1ZGVkIGluIHRoZSB0YXJnZXRzIGFib3ZlKS4gIFdlCisJCQkgKiBuZWVkIHRvIGNyZWF0 ZSBhIHNwZWNpYWwgU29ydEdyb3VwQ2xhdXNlIGZvciB0aGlzIGV4cHJlc3Npb24uCisJCQkgKi8K KwkJCVNvcnRHcm91cENsYXVzZSAqc2djOworCQkJVHlwZUNhY2hlRW50cnkgKnRjZTsKKwkJCU9p ZAkJCWVxdWFsaW1hZ2Vwcm9jOworCisJCQkvKgorCQkJICogQnV0IGZpcnN0LCBjaGVjayBpZiBl cXVhbGl0eSBpbXBsaWVzIGltYWdlIGVxdWFsaXR5IGZvciB0aGlzCisJCQkgKiBleHByZXNzaW9u LiAgSWYgbm90LCB3ZSBjYW5ub3QgdXNlIGl0IGFzIGEgZ3JvdXBpbmcga2V5LiAgU2VlCisJCQkg KiBjb21tZW50cyBpbiBjcmVhdGVfZ3JvdXBpbmdfZXhwcl9pbmZvcygpLgorCQkJICovCisJCQl0 Y2UgPSBsb29rdXBfdHlwZV9jYWNoZShleHByVHlwZSgoTm9kZSAqKSBleHByKSwKKwkJCQkJCQkJ CVRZUEVDQUNIRV9CVFJFRV9PUEZBTUlMWSk7CisJCQlpZiAoIU9pZElzVmFsaWQodGNlLT5idHJl ZV9vcGYpIHx8CisJCQkJIU9pZElzVmFsaWQodGNlLT5idHJlZV9vcGludHlwZSkpCisJCQkJcmV0 dXJuIGZhbHNlOworCisJCQllcXVhbGltYWdlcHJvYyA9IGdldF9vcGZhbWlseV9wcm9jKHRjZS0+ YnRyZWVfb3BmLAorCQkJCQkJCQkJCQkgICB0Y2UtPmJ0cmVlX29waW50eXBlLAorCQkJCQkJCQkJ CQkgICB0Y2UtPmJ0cmVlX29waW50eXBlLAorCQkJCQkJCQkJCQkgICBCVEVRVUFMSU1BR0VfUFJP Qyk7CisJCQlpZiAoIU9pZElzVmFsaWQoZXF1YWxpbWFnZXByb2MpIHx8CisJCQkJIURhdHVtR2V0 Qm9vbChPaWRGdW5jdGlvbkNhbGwxQ29sbChlcXVhbGltYWdlcHJvYywKKwkJCQkJCQkJCQkJCSAg IHRjZS0+dHlwY29sbGF0aW9uLAorCQkJCQkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bSh0Y2Ut PmJ0cmVlX29waW50eXBlKSkpKQorCQkJCXJldHVybiBmYWxzZTsKKworCQkJLyogQ3JlYXRlIHRo ZSBTb3J0R3JvdXBDbGF1c2UuICovCisJCQlzZ2MgPSBtYWtlTm9kZShTb3J0R3JvdXBDbGF1c2Up OworCisJCQkvKiBJbml0aWFsaXplIHRoZSBTb3J0R3JvdXBDbGF1c2UuICovCisJCQlzZ2MtPnRs ZVNvcnRHcm91cFJlZiA9ICsrbWF4U29ydEdyb3VwUmVmOworCQkJZ2V0X3NvcnRfZ3JvdXBfb3Bl cmF0b3JzKGV4cHJUeXBlKChOb2RlICopIGV4cHIpLAorCQkJCQkJCQkJIGZhbHNlLCB0cnVlLCBm YWxzZSwKKwkJCQkJCQkJCSAmc2djLT5zb3J0b3AsICZzZ2MtPmVxb3AsIE5VTEwsCisJCQkJCQkJ CQkgJnNnYy0+aGFzaGFibGUpOworCisJCQkvKiBUaGlzIGV4cHJlc3Npb24gc2hvdWxkIGJlIGVt aXR0ZWQgYnkgdGhlIGdyb3VwZWQgcGF0aHMgKi8KKwkJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdl dCh0YXJnZXQsIGV4cHIsIHNnYy0+dGxlU29ydEdyb3VwUmVmKTsKKworCQkJLyogLi4uIGFuZCBp dCBhbHNvIHNob3VsZCBiZSBlbWl0dGVkIGJ5IHRoZSBpbnB1dCBwYXRocy4gKi8KKwkJCWFkZF9j b2x1bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIGV4cHIsIHNnYy0+dGxlU29ydEdyb3VwUmVm KTsKKworCQkJLyogUmVjb3JkIHRoaXMgU29ydEdyb3VwQ2xhdXNlIGFuZCBncm91cGluZyBleHBy ZXNzaW9uICovCisJCQkqZ3JvdXBfY2xhdXNlcyA9IGxhcHBlbmQoKmdyb3VwX2NsYXVzZXMsIHNn Yyk7CisJCQkqZ3JvdXBfZXhwcnMgPSBsYXBwZW5kKCpncm91cF9leHBycywgZXhwcik7CisJCX0K KwkJZWxzZSBpZiAoaXNfdmFyX2luX2FnZ3JlZl9vbmx5KHJvb3QsIChWYXIgKikgZXhwcikpCisJ CXsKKwkJCS8qCisJCQkgKiBUaGUgZXhwcmVzc2lvbiBpcyByZWZlcmVuY2VkIGJ5IGFuIGFnZ3Jl Z2F0ZSBmdW5jdGlvbiBwdXNoZWQKKwkJCSAqIGRvd24gdG8gdGhpcyByZWxhdGlvbiBhbmQgZG9l cyBub3QgYXBwZWFyIGVsc2V3aGVyZSBpbiB0aGUKKwkJCSAqIHRhcmdldGxpc3Qgb3IgaGF2aW5n UXVhbC4gIEFkZCBpdCB0byAnYWdnX2lucHV0JyBidXQgbm90IHRvCisJCQkgKiAndGFyZ2V0Jy4K KwkJCSAqLworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIGV4cHIp OworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBleHByZXNzaW9uIG1heSBiZSBm dW5jdGlvbmFsbHkgZGVwZW5kZW50IG9uIG90aGVyCisJCQkgKiBleHByZXNzaW9ucyBpbiB0aGUg dGFyZ2V0LCBidXQgd2UgY2Fubm90IHZlcmlmeSB0aGlzIHVudGlsIGFsbAorCQkJICogdGFyZ2V0 IGV4cHJlc3Npb25zIGhhdmUgYmVlbiBjb25zdHJ1Y3RlZC4KKwkJCSAqLworCQkJcG9zc2libHlf ZGVwZW5kZW50ID0gbGFwcGVuZChwb3NzaWJseV9kZXBlbmRlbnQsIGV4cHIpOworCQl9CisJfQor CisJLyoKKwkgKiBOb3cgd2UgY2FuIHZlcmlmeSB3aGV0aGVyIGFuIGV4cHJlc3Npb24gaXMgZnVu Y3Rpb25hbGx5IGRlcGVuZGVudCBvbgorCSAqIG90aGVycy4KKwkgKi8KKwlmb3JlYWNoKGxjLCBw b3NzaWJseV9kZXBlbmRlbnQpCisJeworCQlWYXIJCSAgICp0dmFyOworCQlMaXN0CSAgICpkZXBz ID0gTklMOworCQlSYW5nZVRibEVudHJ5ICpydGU7CisKKwkJdHZhciA9IGxmaXJzdF9ub2RlKFZh ciwgbGMpOworCQlydGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W3R2YXItPnZhcm5vXTsKKwor CQlpZiAoY2hlY2tfZnVuY3Rpb25hbF9ncm91cGluZyhydGUtPnJlbGlkLCB0dmFyLT52YXJubywK KwkJCQkJCQkJCSAgdHZhci0+dmFybGV2ZWxzdXAsCisJCQkJCQkJCQkgIHRhcmdldC0+ZXhwcnMs ICZkZXBzKSkKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBleHByZXNzaW9uIGlzIGZ1bmN0aW9uYWxs eSBkZXBlbmRlbnQgb24gb3RoZXIgdGFyZ2V0CisJCQkgKiBleHByZXNzaW9ucywgc28gaXQgY2Fu IGJlIGluY2x1ZGVkIGluIHRoZSB0YXJnZXRzLiAgU2luY2UgaXQKKwkJCSAqIHdpbGwgbm90IGJl IHVzZWQgYXMgYSBncm91cGluZyBrZXksIGEgc29ydGdyb3VwcmVmIGlzIG5vdAorCQkJICogbmVl ZGVkIGZvciBpdC4KKwkJCSAqLworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJn ZXQsIChFeHByICopIHR2YXIpOworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldChhZ2df aW5wdXQsIChFeHByICopIHR2YXIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFdl IG1heSBhcnJpdmUgaGVyZSB3aXRoIGEgZ3JvdXBpbmcgZXhwcmVzc2lvbiB0aGF0IGlzIHByb3Zl bgorCQkJICogcmVkdW5kYW50IGJ5IEVxdWl2YWxlbmNlQ2xhc3MgcHJvY2Vzc2luZywgc3VjaCBh cyAndDEuYScgaW4gdGhlCisJCQkgKiBxdWVyeSBiZWxvdy4KKwkJCSAqCisJCQkgKiBzZWxlY3Qg bWF4KHQxLmMpIGZyb20gdCB0MSwgdCB0MiB3aGVyZSB0MS5hID0gMSBncm91cCBieSB0MS5hLAor CQkJICogdDEuYjsKKwkJCSAqCisJCQkgKiBGb3Igbm93IHdlIGp1c3QgZ2l2ZSB1cCBpbiB0aGlz IGNhc2UuCisJCQkgKi8KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiB0cnVl OworfQorCisvKgorICogaXNfdmFyX2luX2FnZ3JlZl9vbmx5CisgKgkgIENoZWNrIHdoZXRoZXIg dGhlIGdpdmVuIFZhciBhcHBlYXJzIGluIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBhbmQgbm90Cisg KgkgIGVsc2V3aGVyZSBpbiB0aGUgdGFyZ2V0bGlzdCBvciBoYXZpbmdRdWFsLgorICovCitzdGF0 aWMgYm9vbAoraXNfdmFyX2luX2FnZ3JlZl9vbmx5KFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZh cikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICogU2VhcmNoIHRoZSBsaXN0IG9mIGFn Z3JlZ2F0ZSBleHByZXNzaW9ucyBmb3IgdGhlIFZhci4KKwkgKi8KKwlmb3JlYWNoKGxjLCByb290 LT5hZ2dfY2xhdXNlX2xpc3QpCisJeworCQlBZ2dDbGF1c2VJbmZvICphY19pbmZvID0gbGZpcnN0 X25vZGUoQWdnQ2xhdXNlSW5mbywgbGMpOworCQlMaXN0CSAgICp2YXJzOworCisJCUFzc2VydChJ c0EoYWNfaW5mby0+YWdncmVmLCBBZ2dyZWYpKTsKKworCQlpZiAoIWJtc19pc19tZW1iZXIodmFy LT52YXJubywgYWNfaW5mby0+YWdnX2V2YWxfYXQpKQorCQkJY29udGludWU7CisKKwkJdmFycyA9 IHB1bGxfdmFyX2NsYXVzZSgoTm9kZSAqKSBhY19pbmZvLT5hZ2dyZWYsCisJCQkJCQkJICAgUFZD X1JFQ1VSU0VfQUdHUkVHQVRFUyB8CisJCQkJCQkJICAgUFZDX1JFQ1VSU0VfV0lORE9XRlVOQ1Mg fAorCQkJCQkJCSAgIFBWQ19SRUNVUlNFX1BMQUNFSE9MREVSUyk7CisKKwkJaWYgKGxpc3RfbWVt YmVyKHZhcnMsIHZhcikpCisJCXsKKwkJCWxpc3RfZnJlZSh2YXJzKTsKKwkJCWJyZWFrOworCQl9 CisKKwkJbGlzdF9mcmVlKHZhcnMpOworCX0KKworCXJldHVybiAobGMgIT0gTlVMTCAmJiAhbGlz dF9tZW1iZXIocm9vdC0+dGxpc3RfdmFycywgdmFyKSk7Cit9CisKKy8qCisgKiBpc192YXJfbmVl ZGVkX2J5X2pvaW4KKyAqCSAgQ2hlY2sgaWYgdGhlIGdpdmVuIFZhciBpcyBuZWVkZWQgYnkgam9p bnMgYWJvdmUgdGhlIGN1cnJlbnQgcmVsLgorICoKKyAqIENvbnNpZGVyIHB1c2hpbmcgdGhlIGFn Z3JlZ2F0ZSBhdmcoYi55KSBkb3duIHRvIHJlbGF0aW9uIGIgZm9yIHRoZSBmb2xsb3dpbmcKKyAq IHF1ZXJ5OgorICoKKyAqICAgIFNFTEVDVCBhLmksIGF2ZyhiLnkpCisgKiAgICBGUk9NIGEgSk9J TiBiIE9OIGEuaiA9IGIuagorICogICAgR1JPVVAgQlkgYS5pOworICoKKyAqIENvbHVtbiBiLmog bmVlZHMgdG8gYmUgdXNlZCBhcyB0aGUgZ3JvdXBpbmcga2V5IGJlY2F1c2Ugb3RoZXJ3aXNlIGl0 IGNhbm5vdAorICogZmluZCBpdHMgd2F5IHRvIHRoZSBpbnB1dCBvZiB0aGUgam9pbiBleHByZXNz aW9uLgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX25lZWRlZF9ieV9qb2luKFBsYW5uZXJJbmZv ICpyb290LCBWYXIgKnZhciwgUmVsT3B0SW5mbyAqcmVsKQoreworCVJlbGlkcwkJcmVsaWRzOwor CWludAkJCWF0dG5vOworCVJlbE9wdEluZm8gKmJhc2VyZWw7CisKKwkvKgorCSAqIE5vdGUgdGhh dCB3aGVuIGNoZWNraW5nIGlmIHRoZSBWYXIgaXMgbmVlZGVkIGJ5IGpvaW5zIGFib3ZlLCB3ZSB3 YW50IHRvCisJICogZXhjbHVkZSBjYXNlcyB3aGVyZSB0aGUgVmFyIGlzIG9ubHkgbmVlZGVkIGlu IHRoZSBmaW5hbCBvdXRwdXQuICBTbworCSAqIGluY2x1ZGUgInJlbGF0aW9uIDAiIGluIHRoZSBj aGVjay4KKwkgKi8KKwlyZWxpZHMgPSBibXNfY29weShyZWwtPnJlbGlkcyk7CisJcmVsaWRzID0g Ym1zX2FkZF9tZW1iZXIocmVsaWRzLCAwKTsKKworCWJhc2VyZWwgPSBmaW5kX2Jhc2VfcmVsKHJv b3QsIHZhci0+dmFybm8pOworCWF0dG5vID0gdmFyLT52YXJhdHRubyAtIGJhc2VyZWwtPm1pbl9h dHRyOworCisJcmV0dXJuIGJtc19ub25lbXB0eV9kaWZmZXJlbmNlKGJhc2VyZWwtPmF0dHJfbmVl ZGVkW2F0dG5vXSwgcmVsaWRzKTsKK30KKworLyoKKyAqIGdldF9leHByZXNzaW9uX3NvcnRncm91 cHJlZgorICoJICBSZXR1cm4gc29ydGdyb3VwcmVmIGlmIHRoZSBnaXZlbiAnZXhwcicgY2FuIGJl IHVzZWQgYXMgYSBncm91cGluZyBrZXkgaW4KKyAqCSAgZ3JvdXBlZCBwYXRocyBmb3IgYmFzZSBv ciBqb2luIHJlbGF0aW9ucywgb3IgMCBvdGhlcndpc2UuCisgKgorICogV2UgZmlyc3QgY2hlY2sg aWYgJ2V4cHInIGlzIGFtb25nIHRoZSBncm91cGluZyBleHByZXNzaW9ucy4gIElmIGl0IGlzIG5v dCwKKyAqIHdlIHRoZW4gY2hlY2sgaWYgJ2V4cHInIGlzIGtub3duIGVxdWFsIHRvIGFueSBvZiB0 aGUgZ3JvdXBpbmcgZXhwcmVzc2lvbnMKKyAqIGR1ZSB0byBlcXVpdmFsZW5jZSByZWxhdGlvbnNo aXBzLgorICovCitzdGF0aWMgSW5kZXgKK2dldF9leHByZXNzaW9uX3NvcnRncm91cHJlZihQbGFu bmVySW5mbyAqcm9vdCwgRXhwciAqZXhwcikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVh Y2gobGMsIHJvb3QtPmdyb3VwX2V4cHJfbGlzdCkKKwl7CisJCUdyb3VwRXhwckluZm8gKmdlX2lu Zm8gPSBsZmlyc3Rfbm9kZShHcm91cEV4cHJJbmZvLCBsYyk7CisKKwkJQXNzZXJ0KElzQShnZV9p bmZvLT5leHByLCBWYXIpKTsKKworCQlpZiAoZXF1YWwoZ2VfaW5mby0+ZXhwciwgZXhwcikgfHwK KwkJCWV4cHJzX2tub3duX2VxdWFsKHJvb3QsIChOb2RlICopIGV4cHIsIChOb2RlICopIGdlX2lu Zm8tPmV4cHIsCisJCQkJCQkJICBnZV9pbmZvLT5idHJlZV9vcGZhbWlseSkpCisJCXsKKwkJCUFz c2VydChnZV9pbmZvLT5zb3J0Z3JvdXByZWYgPiAwKTsKKworCQkJcmV0dXJuIGdlX2luZm8tPnNv cnRncm91cHJlZjsKKwkJfQorCX0KKworCS8qIFRoZSBleHByZXNzaW9uIGNhbm5vdCBiZSB1c2Vk IGFzIGEgZ3JvdXBpbmcga2V5LiAqLworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y190YWJsZXMuYwppbmRleCA4Y2YxYWZiYWQyLi45NWJkODBjNGRkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y190YWJsZXMuYwpAQCAtOTI5LDYgKzkyOSwxNiBAQCBzdHJ1Y3QgY29uZmlnX2Jvb2wg Q29uZmlndXJlTmFtZXNCb29sW10gPQogCQlmYWxzZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0s CisJeworCQl7ImVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUiLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVO SU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyBlYWdlciBhZ2dyZWdhdGlvbi4i KSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTgorCQl9LAorCQkmZW5hYmxlX2VhZ2VyX2FnZ3Jl Z2F0ZSwKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAogCXsKIAkJeyJlbmFibGVf cGFyYWxsZWxfYXBwZW5kIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCiAJCQln ZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgcGFyYWxsZWwgYXBwZW5k IHBsYW5zLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2Ft cGxlCmluZGV4IGEyYWM3NTc1Y2EuLjE1NGZjNWIxZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQxNiw2ICs0MTYsNyBAQAogI2VuYWJs ZV90aWRzY2FuID0gb24KICNlbmFibGVfZ3JvdXBfYnlfcmVvcmRlcmluZyA9IG9uCiAjZW5hYmxl X2Rpc3RpbmN0X3Jlb3JkZXJpbmcgPSBvbgorI2VuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgPSBvZmYK IAogIyAtIFBsYW5uZXIgQ29zdCBDb25zdGFudHMgLQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4 IDA3NTllMDBlOTYuLjZhMDU3MmQ5YzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC04MCw2ICs4 MCwyNSBAQCB0eXBlZGVmIGVudW0gVXBwZXJSZWxhdGlvbktpbmQKIAkvKiBOQjogVVBQRVJSRUxf RklOQUwgbXVzdCBiZSBsYXN0IGVudW0gZW50cnk7IGl0J3MgdXNlZCB0byBzaXplIGFycmF5cyAq LwogfSBVcHBlclJlbGF0aW9uS2luZDsKIAorLyoKKyAqIEEgc3RydWN0dXJlIGNvbnNpc3Rpbmcg b2YgYSBsaXN0IGFuZCBhIGhhc2ggdGFibGUgdG8gc3RvcmUgcmVsYXRpb25zLgorICoKKyAqIEZv ciBzbWFsbCBwcm9ibGVtcyB3ZSBqdXN0IHNjYW4gdGhlIGxpc3QgdG8gZG8gbG9va3VwcywgYnV0 IHdoZW4gdGhlcmUgYXJlCisgKiBtYW55IHJlbGF0aW9ucyB3ZSBidWlsZCBhIGhhc2ggdGFibGUg Zm9yIGZhc3RlciBsb29rdXBzLiAgVGhlIGhhc2ggdGFibGUgaXMKKyAqIHByZXNlbnQgYW5kIHZh bGlkIHdoZW4gJ2hhc2gnIGlzIG5vdCBOVUxMLiAgTm90ZSB0aGF0IHdlIHN0aWxsIG1haW50YWlu IHRoZQorICogbGlzdCBldmVuIHdoZW4gdXNpbmcgdGhlIGhhc2ggdGFibGUgZm9yIGxvb2t1cHM7 IHRoaXMgc2ltcGxpZmllcyBsaWZlIGZvcgorICogR0VRTy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg UmVsSW5mb0xpc3QKK3sKKwlwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCwgbm9fcmVhZCkKKwor CU5vZGVUYWcJCXR5cGU7CisKKwlMaXN0CSAgICppdGVtczsKKwlzdHJ1Y3QgSFRBQiAqaGFzaCBw Z19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworfSBSZWxJbmZvTGlzdDsKKwogLyotLS0t LS0tLS0tCiAgKiBQbGFubmVyR2xvYmFsCiAgKgkJR2xvYmFsIGluZm9ybWF0aW9uIGZvciBwbGFu bmluZy9vcHRpbWl6YXRpb24KQEAgLTI3MCwxNSArMjg5LDE2IEBAIHN0cnVjdCBQbGFubmVySW5m bwogCiAJLyoKIAkgKiBqb2luX3JlbF9saXN0IGlzIGEgbGlzdCBvZiBhbGwgam9pbi1yZWxhdGlv biBSZWxPcHRJbmZvcyB3ZSBoYXZlCi0JICogY29uc2lkZXJlZCBpbiB0aGlzIHBsYW5uaW5nIHJ1 bi4gIEZvciBzbWFsbCBwcm9ibGVtcyB3ZSBqdXN0IHNjYW4gdGhlCi0JICogbGlzdCB0byBkbyBs b29rdXBzLCBidXQgd2hlbiB0aGVyZSBhcmUgbWFueSBqb2luIHJlbGF0aW9ucyB3ZSBidWlsZCBh Ci0JICogaGFzaCB0YWJsZSBmb3IgZmFzdGVyIGxvb2t1cHMuICBUaGUgaGFzaCB0YWJsZSBpcyBw cmVzZW50IGFuZCB2YWxpZAotCSAqIHdoZW4gam9pbl9yZWxfaGFzaCBpcyBub3QgTlVMTC4gIE5v dGUgdGhhdCB3ZSBzdGlsbCBtYWludGFpbiB0aGUgbGlzdAotCSAqIGV2ZW4gd2hlbiB1c2luZyB0 aGUgaGFzaCB0YWJsZSBmb3IgbG9va3VwczsgdGhpcyBzaW1wbGlmaWVzIGxpZmUgZm9yCi0JICog R0VRTy4KKwkgKiBjb25zaWRlcmVkIGluIHRoaXMgcGxhbm5pbmcgcnVuLgogCSAqLwotCUxpc3QJ ICAgKmpvaW5fcmVsX2xpc3Q7Ci0Jc3RydWN0IEhUQUIgKmpvaW5fcmVsX2hhc2ggcGdfbm9kZV9h dHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKKwlSZWxJbmZvTGlzdCAqam9pbl9yZWxfbGlzdDsgLyog bGlzdCBvZiBqb2luLXJlbGF0aW9uIFJlbE9wdEluZm9zICovCisKKwkvKgorCSAqIGdyb3VwZWRf cmVsX2xpc3QgaXMgYSBsaXN0IG9mIGFsbCBncm91cGVkLXJlbGF0aW9uIFJlbE9wdEluZm9zIHdl IGhhdmUKKwkgKiBjb25zaWRlcmVkIGluIHRoaXMgcGxhbm5pbmcgcnVuLiAgVGhpcyBpcyBvbmx5 IHVzZWQgYnkgZWFnZXIKKwkgKiBhZ2dyZWdhdGlvbi4KKwkgKi8KKwlSZWxJbmZvTGlzdCAqZ3Jv dXBlZF9yZWxfbGlzdDsJLyogbGlzdCBvZiBncm91cGVkLXJlbGF0aW9uIFJlbE9wdEluZm9zICov CiAKIAkvKgogCSAqIFdoZW4gZG9pbmcgYSBkeW5hbWljLXByb2dyYW1taW5nLXN0eWxlIGpvaW4g c2VhcmNoLCBqb2luX3JlbF9sZXZlbFtrXQpAQCAtMzczLDYgKzM5MywxNSBAQCBzdHJ1Y3QgUGxh bm5lckluZm8KIAkvKiBsaXN0IG9mIFBsYWNlSG9sZGVySW5mb3MgKi8KIAlMaXN0CSAgICpwbGFj ZWhvbGRlcl9saXN0OwogCisJLyogbGlzdCBvZiBBZ2dDbGF1c2VJbmZvcyAqLworCUxpc3QJICAg KmFnZ19jbGF1c2VfbGlzdDsKKworCS8qIGxpc3Qgb2YgR3JvdXBFeHBySW5mb3MgKi8KKwlMaXN0 CSAgICpncm91cF9leHByX2xpc3Q7CisKKwkvKiBsaXN0IG9mIHBsYWluIFZhcnMgY29udGFpbmVk IGluIHRhcmdldGxpc3QgYW5kIGhhdmluZ1F1YWwgKi8KKwlMaXN0CSAgICp0bGlzdF92YXJzOwor CiAJLyogYXJyYXkgb2YgUGxhY2VIb2xkZXJJbmZvcyBpbmRleGVkIGJ5IHBoaWQgKi8KIAlzdHJ1 Y3QgUGxhY2VIb2xkZXJJbmZvICoqcGxhY2Vob2xkZXJfYXJyYXkgcGdfbm9kZV9hdHRyKHJlYWRf d3JpdGVfaWdub3JlLCBhcnJheV9zaXplKHBsYWNlaG9sZGVyX2FycmF5X3NpemUpKTsKIAkvKiBh bGxvY2F0ZWQgc2l6ZSBvZiBhcnJheSAqLwpAQCAtOTk4LDYgKzEwMjcsMTIgQEAgdHlwZWRlZiBz dHJ1Y3QgUmVsT3B0SW5mbwogCS8qIGNvbnNpZGVyIHBhcnRpdGlvbndpc2Ugam9pbiBwYXRocz8g KGlmIHBhcnRpdGlvbmVkIHJlbCkgKi8KIAlib29sCQljb25zaWRlcl9wYXJ0aXRpb253aXNlX2pv aW47CiAKKwkvKgorCSAqIHVzZWQgYnkgZWFnZXIgYWdncmVnYXRpb246CisJICovCisJLyogaW5m b3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSBncm91cGVkIHBhdGhzICovCisJc3RydWN0IFJlbEFn Z0luZm8gKmFnZ19pbmZvOworCiAJLyoKIAkgKiBpbmhlcml0YW5jZSBsaW5rcywgaWYgdGhpcyBp cyBhbiBvdGhlcnJlbCAob3RoZXJ3aXNlIE5VTEwpOgogCSAqLwpAQCAtMTA3MSw2ICsxMTA2LDY4 IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAkoKHJlbCktPnBhcnRfc2NoZW1lICYmIChy ZWwpLT5ib3VuZGluZm8gJiYgKHJlbCktPm5wYXJ0cyA+IDAgJiYgXAogCSAocmVsKS0+cGFydF9y ZWxzICYmIChyZWwpLT5wYXJ0ZXhwcnMgJiYgKHJlbCktPm51bGxhYmxlX3BhcnRleHBycykKIAor LyoKKyAqIElzIHRoZSBnaXZlbiByZWxhdGlvbiBhIGdyb3VwZWQgcmVsYXRpb24/CisgKi8KKyNk ZWZpbmUgSVNfR1JPVVBFRF9SRUwocmVsKSBcCisJKChyZWwpLT5hZ2dfaW5mbyAhPSBOVUxMKQor CisvKgorICogUmVsQWdnSW5mbworICoJCUluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgZ3Jv dXBlZCBwYXRocyBmb3IgYmFzZSBhbmQgam9pbiByZWxzLgorICoKKyAqICJyZWxpZHMiIGlzIHRo ZSBzZXQgb2YgcmVsYXRpb24gaWRlbnRpZmllcnMgKFJUIGluZGV4ZXMpLgorICoKKyAqICJ0YXJn ZXQiIGlzIHRoZSBvdXRwdXQgdGxpc3QgZm9yIHRoZSBncm91cGVkIHBhdGhzLgorICoKKyAqICJh Z2dfaW5wdXQiIGlzIHRoZSBvdXRwdXQgdGxpc3QgZm9yIHRoZSBwYXRocyB0aGF0IHByb3ZpZGUg aW5wdXQgdG8gdGhlCisgKiBncm91cGVkIHBhdGhzLiAgT25lIGRpZmZlcmVuY2UgZnJvbSB0aGUg cmVsdGFyZ2V0IG9mIHRoZSBub24tZ3JvdXBlZAorICogcmVsYXRpb24gaXMgdGhhdCBhZ2dfaW5w dXQgaGFzIGl0cyBzb3J0Z3JvdXByZWZzW10gaW5pdGlhbGl6ZWQuCisgKgorICogImdyb3VwZWRf cm93cyIgaXMgdGhlIGVzdGltYXRlZCBudW1iZXIgb2YgcmVzdWx0IHR1cGxlcyBvZiB0aGUgZ3Jv dXBlZAorICogcmVsYXRpb24uCisgKgorICogImdyb3VwX2NsYXVzZXMiLCAiZ3JvdXBfZXhwcnMi IGFuZCAiZ3JvdXBfcGF0aGtleXMiIGFyZSBsaXN0cyBvZgorICogU29ydEdyb3VwQ2xhdXNlcywg dGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgYW5kIFBhdGhLZXlzCisgKiBy ZXNwZWN0aXZlbHkuCisgKgorICogImFnZ191c2VmdWwiIGlzIGEgZmxhZyB0byBpbmRpY2F0ZSB3 aGV0aGVyIHRoZSBncm91cGVkIHBhdGhzIGFyZSBjb25zaWRlcmVkCisgKiB1c2VmdWwuCisgKi8K K3R5cGVkZWYgc3RydWN0IFJlbEFnZ0luZm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fY29weV9lcXVh bCwgbm9fcmVhZCwgbm9fcXVlcnlfanVtYmxlKQorCisJTm9kZVRhZwkJdHlwZTsKKworCS8qIHNl dCBvZiBiYXNlICsgT0ogcmVsaWRzIChyYW5nZXRhYmxlIGluZGV4ZXMpICovCisJUmVsaWRzCQly ZWxpZHM7CisKKwkvKgorCSAqIGRlZmF1bHQgcmVzdWx0IHRhcmdldGxpc3QgZm9yIFBhdGhzIHNj YW5uaW5nIHRoaXMgZ3JvdXBlZCByZWxhdGlvbjsKKwkgKiBsaXN0IG9mIFZhcnMvRXhwcnMsIGNv c3QsIHdpZHRoCisJICovCisJc3RydWN0IFBhdGhUYXJnZXQgKnRhcmdldDsKKworCS8qCisJICog dGhlIHRhcmdldGxpc3QgZm9yIFBhdGhzIHRoYXQgcHJvdmlkZSBpbnB1dCB0byB0aGUgZ3JvdXBl ZCBwYXRocworCSAqLworCXN0cnVjdCBQYXRoVGFyZ2V0ICphZ2dfaW5wdXQ7CisKKwkvKiBlc3Rp bWF0ZWQgbnVtYmVyIG9mIHJlc3VsdCB0dXBsZXMgKi8KKwlDYXJkaW5hbGl0eSBncm91cGVkX3Jv d3M7CisKKwkvKiBhIGxpc3Qgb2YgU29ydEdyb3VwQ2xhdXNlcyAqLworCUxpc3QJICAgKmdyb3Vw X2NsYXVzZXM7CisJLyogYSBsaXN0IG9mIGdyb3VwaW5nIGV4cHJlc3Npb25zICovCisJTGlzdAkg ICAqZ3JvdXBfZXhwcnM7CisJLyogYSBsaXN0IG9mIFBhdGhLZXlzICovCisJTGlzdAkgICAqZ3Jv dXBfcGF0aGtleXM7CisKKwkvKiB0aGUgZ3JvdXBlZCBwYXRocyBhcmUgY29uc2lkZXJlZCB1c2Vm dWw/ICovCisJYm9vbAkJYWdnX3VzZWZ1bDsKK30gUmVsQWdnSW5mbzsKKwogLyoKICAqIEluZGV4 T3B0SW5mbwogICoJCVBlci1pbmRleCBpbmZvcm1hdGlvbiBmb3IgcGxhbm5pbmcvb3B0aW1pemF0 aW9uCkBAIC0zMTQ1LDYgKzMyNDIsNDEgQEAgdHlwZWRlZiBzdHJ1Y3QgTWluTWF4QWdnSW5mbwog CVBhcmFtCSAgICpwYXJhbTsKIH0gTWluTWF4QWdnSW5mbzsKIAorLyoKKyAqIFRoZSBhZ2dyZWdh dGUgZXhwcmVzc2lvbnMgdGhhdCBhcHBlYXIgaW4gdGFyZ2V0bGlzdCBhbmQgaGF2aW5nIGNsYXVz ZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgQWdnQ2xhdXNlSW5mbworeworCXBnX25vZGVfYXR0cihu b19yZWFkLCBub19xdWVyeV9qdW1ibGUpCisKKwlOb2RlVGFnCQl0eXBlOworCisJLyogdGhlIEFn Z3JlZiBleHByICovCisJQWdncmVmCSAgICphZ2dyZWY7CisKKwkvKiBsb3dlc3QgbGV2ZWwgd2Ug Y2FuIGV2YWx1YXRlIHRoaXMgYWdncmVnYXRlIGF0ICovCisJUmVsaWRzCQlhZ2dfZXZhbF9hdDsK K30gQWdnQ2xhdXNlSW5mbzsKKworLyoKKyAqIFRoZSBncm91cGluZyBleHByZXNzaW9ucyB0aGF0 IGFwcGVhciBpbiBncm91cGluZyBjbGF1c2VzCisgKi8KK3R5cGVkZWYgc3RydWN0IEdyb3VwRXhw ckluZm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fcmVhZCwgbm9fcXVlcnlfanVtYmxlKQorCisJTm9k ZVRhZwkJdHlwZTsKKworCS8qIHRoZSByZXByZXNlbnRlZCBleHByZXNzaW9uICovCisJRXhwcgkg ICAqZXhwcjsKKworCS8qIHRoZSB0bGVTb3J0R3JvdXBSZWYgb2YgdGhlIGNvcnJlc3BvbmRpbmcg U29ydEdyb3VwQ2xhdXNlICovCisJSW5kZXgJCXNvcnRncm91cHJlZjsKKworCS8qIGJ0cmVlIG9w ZmFtaWx5IGRlZmluaW5nIHRoZSBvcmRlcmluZyAqLworCU9pZAkJCWJ0cmVlX29wZmFtaWx5Owor fSBHcm91cEV4cHJJbmZvOworCiAvKgogICogQXQgcnVudGltZSwgUEFSQU1fRVhFQyBzbG90cyBh cmUgdXNlZCB0byBwYXNzIHZhbHVlcyBhcm91bmQgZnJvbSBvbmUgcGxhbgogICogbm9kZSB0byBh bm90aGVyLiAgVGhleSBjYW4gYmUgdXNlZCB0byBwYXNzIHZhbHVlcyBkb3duIGludG8gc3VicXVl cmllcyAoZm9yCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCBi L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDEwMzVlNjU2MGMuLmQzYzA1 YTYxYmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCisrKyBi L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC0zMTQsMTAgKzMxNCwxNiBAQCBl eHRlcm4gdm9pZCBzZXR1cF9zaW1wbGVfcmVsX2FycmF5cyhQbGFubmVySW5mbyAqcm9vdCk7CiBl eHRlcm4gdm9pZCBleHBhbmRfcGxhbm5lcl9hcnJheXMoUGxhbm5lckluZm8gKnJvb3QsIGludCBh ZGRfc2l6ZSk7CiBleHRlcm4gUmVsT3B0SW5mbyAqYnVpbGRfc2ltcGxlX3JlbChQbGFubmVySW5m byAqcm9vdCwgaW50IHJlbGlkLAogCQkJCQkJCQkJUmVsT3B0SW5mbyAqcGFyZW50KTsKK2V4dGVy biBSZWxPcHRJbmZvICpidWlsZF9zaW1wbGVfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3Qs CisJCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbF9wbGFpbik7CitleHRlcm4gUmVsT3B0SW5mbyAq YnVpbGRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkgUmVsT3B0SW5m byAqcmVsX3BsYWluKTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5kX2Jhc2VfcmVsKFBsYW5uZXJJ bmZvICpyb290LCBpbnQgcmVsaWQpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWxf bm9lcnIoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCk7CiBleHRlcm4gUmVsT3B0SW5mbyAq ZmluZF9iYXNlX3JlbF9pZ25vcmVfam9pbihQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkKTsK IGV4dGVybiBSZWxPcHRJbmZvICpmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxp ZHMgcmVsaWRzKTsKK2V4dGVybiB2b2lkIGFkZF9ncm91cGVkX3JlbChQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsKTsKK2V4dGVybiBSZWxPcHRJbmZvICpmaW5kX2dyb3VwZWRfcmVs KFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRzKTsKIGV4dGVybiBSZWxPcHRJbmZvICpi dWlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJICBSZWxpZHMgam9pbnJl bGlkcywKIAkJCQkJCQkJICBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCkBAIC0zNTMsNCArMzU5LDUg QEAgZXh0ZXJuIFJlbE9wdEluZm8gKmJ1aWxkX2NoaWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQkJCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAogCQkJCQkJCQkJCWludCBu YXBwaW5mb3MsIEFwcGVuZFJlbEluZm8gKiphcHBpbmZvcyk7CiAKK2V4dGVybiBSZWxBZ2dJbmZv ICpjcmVhdGVfcmVsX2FnZ19pbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwp OwogI2VuZGlmCQkJCQkJCS8qIFBBVEhOT0RFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L29wdGltaXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXgg NTQ4NjlkNDQwMS4uYTE4OWI3ZjE4YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKQEAgLTIxLDYgKzIx LDcgQEAKICAqIGFsbHBhdGhzLmMKICAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxl X2dlcW87CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfZWFnZXJfYWdncmVnYXRlOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBnZXFvX3RocmVzaG9sZDsKIGV4dGVybiBQR0RMTElNUE9S VCBpbnQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBp bnQgbWluX3BhcmFsbGVsX2luZGV4X3NjYW5fc2l6ZTsKQEAgLTU3LDYgKzU4LDEwIEBAIGV4dGVy biB2b2lkIGdlbmVyYXRlX2dhdGhlcl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogCQkJCQkJCQkgIGJvb2wgb3ZlcnJpZGVfcm93cyk7CiBleHRlcm4gdm9pZCBnZW5l cmF0ZV91c2VmdWxfZ2F0aGVyX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJCQkJCQkJCQkJIGJvb2wgb3ZlcnJpZGVfcm93cyk7CitleHRlcm4gdm9pZCBnZW5lcmF0 ZV9ncm91cGVkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkgICBSZWxPcHRJbmZv ICpyZWxfZ3JvdXBlZCwKKwkJCQkJCQkJICAgUmVsT3B0SW5mbyAqcmVsX3BsYWluLAorCQkJCQkJ CQkgICBSZWxBZ2dJbmZvICphZ2dfaW5mbyk7CiBleHRlcm4gaW50CWNvbXB1dGVfcGFyYWxsZWxf d29ya2VyKFJlbE9wdEluZm8gKnJlbCwgZG91YmxlIGhlYXBfcGFnZXMsCiAJCQkJCQkJCQlkb3Vi bGUgaW5kZXhfcGFnZXMsIGludCBtYXhfd29ya2Vycyk7CiBleHRlcm4gdm9pZCBjcmVhdGVfcGFy dGlhbF9iaXRtYXBfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oIGIvc3JjL2luY2x1ZGUv b3B0aW1pemVyL3BsYW5tYWluLmgKaW5kZXggMGI2ZjBmNzk2OS4uNDk2MTRkYmQ3NSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKKysrIGIvc3JjL2luY2x1ZGUv b3B0aW1pemVyL3BsYW5tYWluLmgKQEAgLTc1LDYgKzc1LDcgQEAgZXh0ZXJuIHZvaWQgYWRkX3Zh cnNfdG9fdGFyZ2V0bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFycywKIGV4dGVybiB2 b2lkIGFkZF92YXJzX3RvX2F0dHJfbmVlZGVkKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICp2YXJz LAogCQkJCQkJCQkJUmVsaWRzIHdoZXJlX25lZWRlZCk7CiBleHRlcm4gdm9pZCByZW1vdmVfdXNl bGVzc19ncm91cGJ5X2NvbHVtbnMoUGxhbm5lckluZm8gKnJvb3QpOworZXh0ZXJuIHZvaWQgc2V0 dXBfZWFnZXJfYWdncmVnYXRpb24oUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgZmlu ZF9sYXRlcmFsX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgcmVi dWlsZF9sYXRlcmFsX2F0dHJfbmVlZGVkKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lk IGNyZWF0ZV9sYXRlcmFsX2pvaW5faW5mbyhQbGFubmVySW5mbyAqcm9vdCk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uOWY2MzQ3MmVmZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZWFnZXJfYWdncmVnYXRlLm91dApAQCAtMCwwICsxLDEzMDgg QEAKKy0tCistLSBFQUdFUiBBR0dSRUdBVElPTgorLS0gVGVzdCB3ZSBjYW4gcHVzaCBhZ2dyZWdh dGlvbiBkb3duIGJlbG93IGpvaW4KKy0tCistLSBFbmFibGUgZWFnZXIgYWdncmVnYXRpb24sIHdo aWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJsZWQuCitTRVQgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSBU TyBvbjsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdDEgKGEgaW50LCBiIGludCwgYyBkb3VibGUg cHJlY2lzaW9uKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdDIgKGEgaW50LCBiIGludCwgYyBk b3VibGUgcHJlY2lzaW9uKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdDMgKGEgaW50LCBiIGlu dCwgYyBkb3VibGUgcHJlY2lzaW9uKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MSBTRUxFQ1Qg aSwgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CitJTlNFUlQgSU5UTyBlYWdl cl9hZ2dfdDIgU0VMRUNUIGksIGklMTAsIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClp OworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3QzIFNFTEVDVCBpJTEwLCBpJTEwLCBpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApaTsKK0FOQUxZWkUgZWFnZXJfYWdnX3QxOworQU5BTFlaRSBl YWdlcl9hZ2dfdDI7CitBTkFMWVpFIGVhZ2VyX2FnZ190MzsKKy0tCistLSBUZXN0IGVhZ2VyIGFn Z3JlZ2F0aW9uIG92ZXIgYmFzZSByZWwKKy0tCistLSBQZXJmb3JtIHNjYW4gb2YgYSB0YWJsZSwg YWdncmVnYXRlIHRoZSByZXN1bHQsIGpvaW4gaXQgdG8gdGhlIG90aGVyIHRhYmxlCistLSBhbmQg ZmluYWxpemUgdGhlIGFnZ3JlZ2F0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2Fn Z190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisgICBPdXRwdXQ6IHQx LmEsIGF2Zyh0Mi5jKQorICAgR3JvdXAgS2V5OiB0MS5hCisgICAtPiAgU29ydAorICAgICAgICAg T3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICBTb3J0IEtleTogdDEu YQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAo UEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIu YikKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQx CisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMKKyAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJU SUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBh dmcodDIuYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dDIgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYSwgdDIu YiwgdDIuYworKDE4IHJvd3MpCisKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9h Z2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEu YSBPUkRFUiBCWSB0MS5hOworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5 NworIDMgfCA0OTgKKyA0IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8 IDUwMworIDkgfCA1MDQKKyg5IHJvd3MpCisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRp bmcgYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3Qx IHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JE RVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUg R3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBHcm91cCBLZXk6 IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0 Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAg ICAgICAgICAgLT4gIFBhcnRpYWwgR3JvdXBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBhdmcodDIuYykKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIu YgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQyLmIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyLmMsIHQyLmIKKygyMSByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFn ZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZ IHQxLmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5NgorIDIg fCA0OTcKKyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwgNTAxCisgNyB8IDUwMgor IDggfCA1MDMKKyA5IHwgNTA0CisoOSByb3dzKQorCitSRVNFVCBlbmFibGVfaGFzaGFnZzsKKy0t CistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tCistLSBQZXJmb3Jt IGpvaW4gb2YgdGFibGVzLCBhZ2dyZWdhdGUgdGhlIHJlc3VsdCwgam9pbiBpdCB0byB0aGUgb3Ro ZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUgYWdncmVnYXRpb24uCitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2Vy X2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2Vy X2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdy b3VwQWdncmVnYXRlCisgICBPdXRwdXQ6IHQxLmEsIGF2ZygodDIuYyArIHQzLmMpKQorICAgR3Jv dXAgS2V5OiB0MS5hCisgICAtPiAgU29ydAorICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElB TCBhdmcoKHQyLmMgKyB0My5jKSkpCisgICAgICAgICBTb3J0IEtleTogdDEuYQorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmco KHQyLmMgKyB0My5jKSkpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIuYikK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQxCisg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMKKyAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFM IGF2ZygodDIuYyArIHQzLmMpKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhh c2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFS VElBTCBhdmcoKHQyLmMgKyB0My5jKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vw IEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0Mi5iLCB0My5jCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0My5hID0gdDIuYSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyLmMsIHQyLmIsIHQyLmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKygy NSByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190 MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190 MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgYSB8IGF2 ZyAKKy0tLSstLS0tLQorIDEgfCA0OTcKKyAyIHwgNDk5CisgMyB8IDUwMQorIDQgfCA1MDMKKyA1 IHwgNTA1CisgNiB8IDUwNworIDcgfCA1MDkKKyA4IHwgNTExCisgOSB8IDUxMworKDkgcm93cykK KworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgorU0VUIGVuYWJs ZV9oYXNoYWdnIFRPIG9mZjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0 MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdn X3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5h IEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUK KyAgIE91dHB1dDogdDEuYSwgYXZnKCh0Mi5jICsgdDMuYykpCisgICBHcm91cCBLZXk6IHQxLmEK KyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2ZygodDIuYyAr IHQzLmMpKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMp KSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKCh0Mi5jICsg dDMuYykpKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgR3JvdXBBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBhdmcoKHQy LmMgKyB0My5jKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYiwgdDMuYworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU29ydCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDIuYywgdDIuYiwgdDMuYworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAodDMuYSA9IHQyLmEpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MyB0 MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 My5hLCB0My5iLCB0My5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Mi5jLCB0Mi5iLCB0Mi5hCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MiB0MgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5j LCB0Mi5iLCB0Mi5hCisoMjggcm93cykKKworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMuYykg RlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIg Sk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRFUiBC WSB0MS5hOworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk3CisgMiB8IDQ5OQorIDMgfCA1 MDEKKyA0IHwgNTAzCisgNSB8IDUwNQorIDYgfCA1MDcKKyA3IHwgNTA5CisgOCB8IDUxMQorIDkg fCA1MTMKKyg5IHJvd3MpCisKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworLS0KKy0tIFRlc3QgdGhh dCBlYWdlciBhZ2dyZWdhdGlvbiB3b3JrcyBmb3Igb3V0ZXIgam9pbgorLS0KKy0tIEVuc3VyZSBh Z2dyZWdhdGlvbiBjYW4gYmUgcHVzaGVkIGRvd24gdG8gdGhlIG5vbi1udWxsYWJsZSBzaWRlCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00g ZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5i IEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmlu YWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBHcm91 cCBLZXk6IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFM IGF2Zyh0Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgSGFzaCBS aWdodCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5j KSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKHQyLmMpKQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2Zyh0Mi5jKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MiB0MgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisoMTggcm93 cykKKworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBSSUdIVCBK T0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZ IHQxLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0tLQorIDEgfCA0OTYKKyAyIHwgNDk3CisgMyB8IDQ5 OAorIDQgfCA0OTkKKyA1IHwgNTAwCisgNiB8IDUwMQorIDcgfCA1MDIKKyA4IHwgNTAzCisgOSB8 IDUwNAorICAgfCA1MDUKKygxMCByb3dzKQorCistLSBFbnN1cmUgYWdncmVnYXRpb24gY2Fubm90 IGJlIHB1c2hlZCBkb3duIHRvIHRoZSBudWxsYWJsZSBzaWRlCitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpCitTRUxFQ1QgdDIuYiwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIExF RlQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDIuYiBPUkRF UiBCWSB0Mi5iOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBPdXRwdXQ6IHQyLmIsIChhdmcodDIuYykp CisgICBTb3J0IEtleTogdDIuYgorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIE91dHB1 dDogdDIuYiwgYXZnKHQyLmMpCisgICAgICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgIC0+ ICBIYXNoIFJpZ2h0IEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgdDIuYworICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAodDIuYiA9IHQxLmIpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MiB0MgorICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5iCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MS5iCisoMTUgcm93cykKKworU0VMRUNUIHQyLmIsIGF2Zyh0Mi5jKSBGUk9N IGVhZ2VyX2FnZ190MSB0MSBMRUZUIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5i IEdST1VQIEJZIHQyLmIgT1JERVIgQlkgdDIuYjsKKyBiIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8 IDQ5NgorIDIgfCA0OTcKKyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwgNTAxCisg NyB8IDUwMgorIDggfCA1MDMKKyA5IHwgNTA0CisgICB8ICAgIAorKDEwIHJvd3MpCisKKy0tCist LSBUZXN0IHRoYXQgZWFnZXIgYWdncmVnYXRpb24gd29ya3MgZm9yIHBhcmFsbGVsIHBsYW5zCist LQorU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3Q9MDsKK1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0PTA7 CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZT0wOworU0VUIG1heF9wYXJhbGxlbF93 b3JrZXJzX3Blcl9nYXRoZXI9NDsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIg dDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91 cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEu YQorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBh dmcodDIuYykpCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDIKKyAgICAgICAgIC0+ICBTb3J0 CisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAg ICAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFz aCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0 Mi5jKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdDEgdDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgdDEuYiwg dDEuYworICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2Zyh0Mi5jKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gcHVibGlj LmVhZ2VyX2FnZ190MiB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisoMjEgcm93cykKKworU0VMRUNUIHQxLmEsIGF2Zyh0 Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0g dDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0tLQor IDEgfCA0OTYKKyAyIHwgNDk3CisgMyB8IDQ5OAorIDQgfCA0OTkKKyA1IHwgNTAwCisgNiB8IDUw MQorIDcgfCA1MDIKKyA4IHwgNTAzCisgOSB8IDUwNAorKDkgcm93cykKKworUkVTRVQgcGFyYWxs ZWxfc2V0dXBfY29zdDsKK1JFU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q7CitSRVNFVCBtaW5fcGFy YWxsZWxfdGFibGVfc2Nhbl9zaXplOworUkVTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlcjsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3QxOworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdDI7 CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MzsKKy0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9u IGZvciBwYXJ0aXRpb253aXNlIGpvaW4KKy0tCistLSBFbmFibGUgcGFydGl0aW9ud2lzZSBhZ2dy ZWdhdGUsIHdoaWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJsZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlv bndpc2VfYWdncmVnYXRlIFRPIHRydWU7CistLSBFbmFibGUgcGFydGl0aW9ud2lzZSBqb2luLCB3 aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pv aW4gVE8gdHJ1ZTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMSh4IGludCwgeSBpbnQpIFBB UlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMV9wMSBQQVJU SVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTApOworQ1JF QVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxX3AyIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMSBG T1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIx X3AzIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMSBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAo MzApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyKHggaW50LCB5IGludCkgUEFSVElUSU9O IEJZIFJBTkdFKHkpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AxIFBBUlRJVElPTiBP RiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3RhYjJfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIyIEZPUiBWQUxV RVMgRlJPTSAoMTApIFRPICgyMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjJfcDMgUEFS VElUSU9OIE9GIGVhZ2VyX2FnZ190YWIyIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRPICgzMCk7CitJ TlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiMSBTRUxFQ1QgaSAlIDMwLCBpICUgMjAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMCwgMjk5LCAyKSBpOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3RhYjIgU0VM RUNUIGkgJSAyMCwgaSAlIDMwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsIDI5OSwgMykgaTsKK0FO QUxZWkUgZWFnZXJfYWdnX3RhYjE7CitBTkFMWVpFIGVhZ2VyX2FnZ190YWIyOworLS0gV2hlbiBH Uk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlvbiBpcyBwZXJmb3JtZWQgZm9y IGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQx LngsIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdn X3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54Owor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTb3J0CisgICBPdXRwdXQ6IHQxLngsIChzdW0odDEueSkpLCAoY291bnQoKikpCisg ICBTb3J0IEtleTogdDEueAorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhh c2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgc3VtKHQxLnkpLCBjb3Vu dCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MS54CisgICAgICAgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1 bSh0MS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDIueSA9IHQxLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190YWIyX3AxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1bSh0MS55KSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCBQ QVJUSUFMIHN1bSh0MS55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiB0MS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQxCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIHQxLnkKKyAgICAg ICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzEueCwgc3VtKHQxXzEueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQx XzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV8xLngsIChQQVJUSUFMIHN1bSh0MV8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikp CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8xLnkgPSB0MV8xLngpCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3Ay IHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55CisgICAgICAg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8xLngsIChQQVJUSUFMIHN1bSh0MV8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgUEFSVElBTCBzdW0odDFf MS55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R3JvdXAgS2V5OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIHQxXzEueQorICAgICAgICAg LT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54 LCBzdW0odDFfMi55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54 CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzIueCwgKFBBUlRJQUwgc3VtKHQxXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueSA9IHQxXzIueCkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDMgdDJf MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnkKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzIueCwgKFBBUlRJQUwgc3VtKHQxXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBQQVJUSUFMIHN1bSh0MV8yLnkp LCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMyB0MV8yCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgdDFfMi55CisoNDkgcm93cykKKwor U0VMRUNUIHQxLngsIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwg ZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDEueCBPUkRFUiBC WSB0MS54OworIHggIHwgc3VtICB8IGNvdW50IAorLS0tLSstLS0tLS0rLS0tLS0tLQorICAwIHwg IDUwMCB8ICAgMTAwCisgIDYgfCAxMTAwIHwgICAxMDAKKyAxMiB8ICA3MDAgfCAgIDEwMAorIDE4 IHwgMTMwMCB8ICAgMTAwCisgMjQgfCAgOTAwIHwgICAxMDAKKyg1IHJvd3MpCisKKy0tIEdST1VQ IEJZIGhhdmluZyBvdGhlciBtYXRjaGluZyBrZXkKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikKK1NFTEVDVCB0Mi55LCBzdW0odDEueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEg dDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQyLnkgT1JE RVIgQlkgdDIueTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0cHV0OiB0Mi55LCAoc3VtKHQxLnkpKSwg KGNvdW50KCopKQorICAgU29ydCBLZXk6IHQyLnkKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIHN1 bSh0MS55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueQorICAgICAg ICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55 LCAoUEFSVElBTCBzdW0odDEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQyLnkgPSB0MS54KQorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMSB0MgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Mi55CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0odDEu eSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQ YXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDEueCwgUEFSVElBTCBzdW0odDEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9w MSB0MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS55 LCB0MS54CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml8xLnksIHN1bSh0MV8xLnkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAg R3JvdXAgS2V5OiB0Ml8xLnkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCAoUEFSVElBTCBzdW0odDFfMS55KSksIChQQVJU SUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS55ID0g dDFfMS54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiMl9wMiB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzEueQorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMS54LCAoUEFSVElBTCBzdW0odDFfMS55KSksIChQQVJUSUFMIGNv dW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIFBB UlRJQUwgc3VtKHQxXzEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQxXzEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS55LCB0MV8x LngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzIueSwgc3VtKHQxXzIueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHQyXzIueQorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIChQQVJUSUFMIHN1bSh0MV8yLnkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnkgPSB0MV8y LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWIyX3AzIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55 CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSh0MV8yLnkpKSwgKFBBUlRJQUwgY291bnQo KikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgUEFSVElB TCBzdW0odDFfMi55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDFfMgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLnksIHQxXzIueAor KDQ5IHJvd3MpCisKK1NFTEVDVCB0Mi55LCBzdW0odDEueSksIGNvdW50KCopIEZST00gZWFnZXJf YWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZ IHQyLnkgT1JERVIgQlkgdDIueTsKKyB5ICB8IHN1bSAgfCBjb3VudCAKKy0tLS0rLS0tLS0tKy0t LS0tLS0KKyAgMCB8ICA1MDAgfCAgIDEwMAorICA2IHwgMTEwMCB8ICAgMTAwCisgMTIgfCAgNzAw IHwgICAxMDAKKyAxOCB8IDEzMDAgfCAgIDEwMAorIDI0IHwgIDkwMCB8ICAgMTAwCisoNSByb3dz KQorCistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBkb2VzIG5vdCBtYXRjaDsgcGFydGlhbCBhZ2dy ZWdhdGlvbiBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLngsIHN1bSh0MS54KSwgY291bnQoKikgRlJPTSBlYWdl cl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAg QlkgdDIueCBIQVZJTkcgYXZnKHQxLngpID4gMTAgT1JERVIgQlkgdDIueDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0cHV0OiB0 Mi54LCAoc3VtKHQxLngpKSwgKGNvdW50KCopKQorICAgU29ydCBLZXk6IHQyLngKKyAgIC0+ICBG aW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQyLngsIHN1bSh0MS54KSwg Y291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAgICAgICAgRmlsdGVyOiAoYXZn KHQxLngpID4gJzEwJzo6bnVtZXJpYykKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCAo UEFSVElBTCBzdW0odDFfMS54KSksIChQQVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwgYXZnKHQx XzEueCkpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8xLnkgPSB0MV8xLngp CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWIyX3AxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0 Ml8xLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwgc3VtKHQxXzEueCkpLCAoUEFSVElBTCBj b3VudCgqKSksIChQQVJUSUFMIGF2Zyh0MV8xLngpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8xLngsIFBBUlRJQUwgc3VtKHQxXzEueCksIFBBUlRJQUwgY291bnQo KiksIFBBUlRJQUwgYXZnKHQxXzEueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQxXzEKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54CisgICAgICAgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgKFBBUlRJ QUwgc3VtKHQxXzIueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0MV8yLngp KQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMi55ID0gdDFfMi54KQorICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9w MiB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgdDJfMi55 CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSh0MV8yLngpKSwgKFBBUlRJQUwgY291bnQo KikpLCAoUEFSVElBTCBhdmcodDFfMi54KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMi54LCBQQVJUSUFMIHN1bSh0MV8yLngpLCBQQVJUSUFMIGNvdW50KCopLCBQ QVJUSUFMIGF2Zyh0MV8yLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0MV8yCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIChQQVJUSUFMIHN1 bSh0MV8zLngpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMy54KSkKKyAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzMueSA9IHQxXzMueCkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDMgdDJf MworICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIHQyXzMueQorICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMy54LCAoUEFSVElBTCBzdW0odDFfMy54KSksIChQQVJUSUFMIGNvdW50KCopKSwg KFBBUlRJQUwgYXZnKHQxXzMueCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy dGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzMueCwgUEFSVElBTCBzdW0odDFfMy54KSwgUEFSVElBTCBjb3VudCgqKSwgUEFSVElB TCBhdmcodDFfMy54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0MV8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDFfMworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyg0NCByb3dzKQorCitTRUxFQ1QgdDIueCwg c3VtKHQxLngpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFi MiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklORyBhdmcodDEueCkgPiAx MCBPUkRFUiBCWSB0Mi54OworIHggIHwgc3VtICB8IGNvdW50IAorLS0tLSstLS0tLS0rLS0tLS0t LQorICAyIHwgIDYwMCB8ICAgIDUwCisgIDQgfCAxMjAwIHwgICAgNTAKKyAgOCB8ICA5MDAgfCAg ICA1MAorIDEyIHwgIDYwMCB8ICAgIDUwCisgMTQgfCAxMjAwIHwgICAgNTAKKyAxOCB8ICA5MDAg fCAgICA1MAorKDYgcm93cykKKworLS0gQ2hlY2sgd2l0aCBlYWdlciBhZ2dyZWdhdGlvbiBvdmVy IGpvaW4gcmVsCistLSBmdWxsIGFnZ3JlZ2F0aW9uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQx IEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFi MSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU29ydAorICAgT3V0cHV0OiB0MS54LCAoc3VtKCh0Mi55ICsgdDMueSkpKQorICAg U29ydCBLZXk6IHQxLngKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIHN1bSgodDIueSArIHQzLnkp KQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MS54CisgICAgICAgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1bSgo dDIueSArIHQzLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLnggPSB0 Mi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMSB0MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54Cisg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Mi54LCB0My54LCAoUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLngsIHQzLngsIFBBUlRJQUwgc3VtKCh0 Mi55ICsgdDMueSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQyLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgdDIueCwg dDMueSwgdDMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDIueCA9IHQzLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQyCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIHQyLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnksIHQzLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDMueSwgdDMueAorICAgICAgICAgLT4g IEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBz dW0oKHQyXzEueSArIHQzXzEueSkpCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAor ICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8xLngsIChQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpCisgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLnggPSB0Ml8xLngpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQxXzEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54CisgICAgICAgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIHQzXzEu eCwgKFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0M18xLngsIFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0 M18xLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8x LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngs IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBI YXNoIENvbmQ6ICh0Ml8xLnggPSB0M18xLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQyXzEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf MS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQzXzEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNf MS55LCB0M18xLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxXzIueCwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKQorICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSAr IHQzXzIueSkpKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMi54ID0gdDJf Mi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMyB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIu eAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMi54LCB0M18yLngsIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55 KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgdDNfMi54 LCBQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMi54ID0gdDNfMi54KQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiMV9wMyB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiMV9wMyB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisoNzAgcm93cykKKworU0VMRUNU IHQxLngsIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSBKT0lOIGVhZ2Vy X2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYjEgdDMgT04gdDIu eCA9IHQzLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworIHggIHwgIHN1bSAgCistLS0t Ky0tLS0tLS0KKyAgMCB8IDEwMDAwCisgIDIgfCAxNDAwMAorICA0IHwgMTgwMDAKKyAgNiB8IDIy MDAwCisgIDggfCAyNjAwMAorIDEwIHwgMTAwMDAKKyAxMiB8IDE0MDAwCisgMTQgfCAxODAwMAor IDE2IHwgMjIwMDAKKyAxOCB8IDI2MDAwCisgMjAgfCAxMDAwMAorIDIyIHwgMTQwMDAKKyAyNCB8 IDE4MDAwCisgMjYgfCAyMjAwMAorIDI4IHwgMjYwMDAKKygxNSByb3dzKQorCistLSBwYXJ0aWFs IGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOworRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9h Z2dfdGFiMSB0MSBKT0lOIGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFn ZXJfYWdnX3RhYjEgdDMgT04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55 OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisgICBPdXRwdXQ6IHQz LnksIHN1bSgodDIueSArIHQzLnkpKQorICAgR3JvdXAgS2V5OiB0My55CisgICAtPiAgU29ydAor ICAgICAgICAgT3V0cHV0OiB0My55LCAoUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkpCisgICAg ICAgICBTb3J0IEtleTogdDMueQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIChQQVJU SUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0Ml8xLnggPSB0MV8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBH cm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngs IHQzXzEueSwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMS54LCB0M18xLnksIHQzXzEueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngsIHQzXzEueSwgdDNf MS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDJfMS54LCB0 M18xLnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNvcnRlZCBLZXk6IHQy XzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIE1lcmdlIEpvaW4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8x LngsIHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBNZXJnZSBDb25kOiAodDJfMS54ID0gdDNfMS54KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Ml8xLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYjFfcDEgdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0M18xLngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYjFfcDEgdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFf MS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWIxX3AxIHQxXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzXzIueSwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSkK KyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQxXzIueCkKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgdDNfMi55LCB0M18yLngsIFBBUlRJQUwgc3Vt KCh0Ml8yLnkgKyB0M18yLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Ml8yLngsIHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg SW5jcmVtZW50YWwgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8yLnksIHQyXzIueCwgdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNvcnQgS2V5OiB0Ml8yLngsIHQzXzIueQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHJlc29ydGVkIEtleTogdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueCwgdDNfMi55LCB0M18yLngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0Ml8yLnggPSB0M18y LngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnks IHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29y dCBLZXk6IHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0Ml8yCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIu eSwgdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU29ydCBLZXk6IHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0M18yCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCAoUEFS VElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDJfMy54ID0gdDFfMy54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwg R3JvdXBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54 LCB0M18zLnksIHQzXzMueCwgUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzMueCwgdDNfMy55LCB0M18zLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54LCB0M18zLnksIHQz XzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQyXzMueCwg dDNfMy55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzb3J0ZWQgS2V5OiB0 Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBNZXJnZSBKb2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJf My54LCB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTWVyZ2UgQ29uZDogKHQyXzMueCA9IHQzXzMueCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDJfMy54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWIxX3AzIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDNfMy54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWIxX3AzIHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiMV9wMyB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxXzMueAorKDg4IHJvd3MpCisKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkp IEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0g dDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkg T1JERVIgQlkgdDMueTsKKyB5ICB8ICBzdW0gIAorLS0tLSstLS0tLS0tCisgIDAgfCAgNzUwMAor ICAyIHwgMTM1MDAKKyAgNCB8IDE5NTAwCisgIDYgfCAyNTUwMAorICA4IHwgMzE1MDAKKyAxMCB8 IDIyNTAwCisgMTIgfCAyODUwMAorIDE0IHwgMzQ1MDAKKyAxNiB8IDQwNTAwCisgMTggfCA0NjUw MAorKDEwIHJvd3MpCisKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworRFJPUCBUQUJMRSBlYWdlcl9h Z2dfdGFiMTsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYjI7CistLQorLS0gVGVzdCB3aXRoIG11 bHRpLWxldmVsIHBhcnRpdGlvbmluZyBzY2hlbWUKKy0tCitDUkVBVEUgVEFCTEUgZWFnZXJfYWdn X3RhYl9tbCh4IGludCwgeSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFURSBUQUJM RSBlYWdlcl9hZ2dfdGFiX21sX3AxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBW QUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3Ay IFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgy MCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxf cDJfczEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDIgRk9SIFZBTFVFUyBGUk9NICgx MCkgVE8gKDE1KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MyIFBBUlRJVElP TiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMyBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3Rh Yl9tbCBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMzApIFBBUlRJVElPTiBCWSBSQU5HRSh4KTsK K0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AzX3MxIFBBUlRJVElPTiBPRiBlYWdlcl9h Z2dfdGFiX21sX3AzIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRPICgyNSk7CitDUkVBVEUgVEFCTEUg ZWFnZXJfYWdnX3RhYl9tbF9wM19zMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMyBG T1IgVkFMVUVTIEZST00gKDI1KSBUTyAoMzApOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3RhYl9t bCBTRUxFQ1QgaSAlIDMwLCBpICUgMzAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgaTsK K0FOQUxZWkUgZWFnZXJfYWdnX3RhYl9tbDsKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIG1hdGNo ZXM7IGZ1bGwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlvbi4KK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54LCBzdW0odDIueSksIGNvdW50 KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04g dDEueCA9IHQyLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0Cisg ICBPdXRwdXQ6IHQxLngsIChzdW0odDIueSkpLCAoY291bnQoKikpCisgICBTb3J0IEtleTogdDEu eAorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgICAgICAgIE91dHB1dDogdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKQorICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiB0MS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1bSh0Mi55KSksIChQQVJU SUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEueCA9IHQy LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWJfbWxfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueAor ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDIueCwgKFBBUlRJQUwgc3VtKHQyLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLngsIFBBUlRJQUwgc3VtKHQy LnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH cm91cCBLZXk6IHQyLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54CisgICAgICAgICAtPiAgRmlu YWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIHN1bSh0 Ml8xLnkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFf MS54LCAoUEFSVElBTCBzdW0odDJfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54CisgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8x LngsIChQQVJUSUFMIHN1bSh0Ml8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgUEFSVElBTCBzdW0odDJfMS55KSwg UEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0Ml8xCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAt PiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngs IHN1bSh0Ml8yLnkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngK KyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDJfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAg ICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMi54ID0gdDJfMi54KQorICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3My IHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8yLngsIChQQVJUSUFMIHN1bSh0Ml8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgUEFSVElBTCBzdW0odDJf Mi55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R3JvdXAgS2V5OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0Ml8yCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54CisgICAg ICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV8zLngsIHN1bSh0Ml8zLnkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0 MV8zLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMy54LCAoUEFSVElBTCBzdW0odDJfMy55KSksIChQQVJUSUFMIGNvdW50KCop KQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMy54ID0gdDJfMy54KQorICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21s X3AzX3MxIHQxXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54Cisg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Ml8zLngsIChQQVJUSUFMIHN1bSh0Ml8zLnkpKSwgKFBBUlRJQUwgY291bnQoKikp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgUEFSVElBTCBz dW0odDJfMy55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0Ml8zCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54 CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0 cHV0OiB0MV80LngsIHN1bSh0Ml80LnkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0MV80LngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDFfNC54LCAoUEFSVElBTCBzdW0odDJfNC55KSksIChQQVJUSUFMIGNv dW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfNC54ID0gdDJfNC54 KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiX21sX3AzX3MyIHQxXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFf NC54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml80LngsIChQQVJUSUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJQUwgY291 bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVn YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgUEFS VElBTCBzdW0odDJfNC55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml80LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMiB0Ml80 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueSwg dDJfNC54CisoNzkgcm93cykKKworU0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJP TSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0g dDIueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgeCAgfCAgc3VtICB8IGNvdW50IAor LS0tLSstLS0tLS0tKy0tLS0tLS0KKyAgMCB8ICAgICAwIHwgIDEwODkKKyAgMSB8ICAxMTU2IHwg IDExNTYKKyAgMiB8ICAyMzEyIHwgIDExNTYKKyAgMyB8ICAzNDY4IHwgIDExNTYKKyAgNCB8ICA0 NjI0IHwgIDExNTYKKyAgNSB8ICA1NzgwIHwgIDExNTYKKyAgNiB8ICA2OTM2IHwgIDExNTYKKyAg NyB8ICA4MDkyIHwgIDExNTYKKyAgOCB8ICA5MjQ4IHwgIDExNTYKKyAgOSB8IDEwNDA0IHwgIDEx NTYKKyAxMCB8IDExNTYwIHwgIDExNTYKKyAxMSB8IDExOTc5IHwgIDEwODkKKyAxMiB8IDEzMDY4 IHwgIDEwODkKKyAxMyB8IDE0MTU3IHwgIDEwODkKKyAxNCB8IDE1MjQ2IHwgIDEwODkKKyAxNSB8 IDE2MzM1IHwgIDEwODkKKyAxNiB8IDE3NDI0IHwgIDEwODkKKyAxNyB8IDE4NTEzIHwgIDEwODkK KyAxOCB8IDE5NjAyIHwgIDEwODkKKyAxOSB8IDIwNjkxIHwgIDEwODkKKyAyMCB8IDIxNzgwIHwg IDEwODkKKyAyMSB8IDIyODY5IHwgIDEwODkKKyAyMiB8IDIzOTU4IHwgIDEwODkKKyAyMyB8IDI1 MDQ3IHwgIDEwODkKKyAyNCB8IDI2MTM2IHwgIDEwODkKKyAyNSB8IDI3MjI1IHwgIDEwODkKKyAy NiB8IDI4MzE0IHwgIDEwODkKKyAyNyB8IDI5NDAzIHwgIDEwODkKKyAyOCB8IDMwNDkyIHwgIDEw ODkKKyAyOSB8IDMxNTgxIHwgIDEwODkKKygzMCByb3dzKQorCistLSBXaGVuIEdST1VQIEJZIGNs YXVzZSBkb2VzIG5vdCBtYXRjaDsgcGFydGlhbCBhZ2dyZWdhdGlvbiBpcyBwZXJmb3JtZWQgZm9y IGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQx LnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFn ZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS55IE9SREVSIEJZIHQx Lnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEueSwgKHN1bSh0Mi55KSksIChjb3VudCgq KSkKKyAgIFNvcnQgS2V5OiB0MS55CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgT3V0cHV0OiB0MS55LCBzdW0odDIueSksIGNvdW50KCopCisgICAgICAgICBHcm91cCBL ZXk6IHQxLnkKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS55LCAoUEFSVElBTCBzdW0odDJf MS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQxXzEKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDFfMS55LCB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgKFBBUlRJQUwgc3Vt KHQyXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMS54LCBQQVJUSUFMIHN1bSh0Ml8xLnkpLCBQQVJUSUFMIGNvdW50KCop CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiX21sX3AxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi55LCAoUEFSVElBTCBzdW0odDJfMi55 KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo dDFfMi54ID0gdDJfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDFfMi55LCB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgKFBBUlRJQUwgc3Vt KHQyXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMi54LCBQQVJUSUFMIHN1bSh0Ml8yLnkpLCBQQVJUSUFMIGNvdW50KCop CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiX21sX3AyX3MxIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy55LCAoUEFSVElBTCBzdW0odDJf My55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDFfMy54ID0gdDJfMy54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQxXzMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMy55LCB0MV8zLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgKFBBUlRJQUwg c3VtKHQyXzMueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMy54LCBQQVJUSUFMIHN1bSh0Ml8zLnkpLCBQQVJUSUFMIGNvdW50 KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzMueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC55LCAoUEFSVElBTCBzdW0o dDJfNC55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDFfNC54ID0gdDJfNC54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQxXzQKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDFfNC55LCB0MV80LngKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgKFBBUlRJ QUwgc3VtKHQyXzQueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfNC54LCBQQVJUSUFMIHN1bSh0Ml80LnkpLCBQQVJUSUFMIGNv dW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzQu eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQyXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80LngKKyAgICAgICAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNS55LCAoUEFSVElBTCBz dW0odDJfNS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFz aCBDb25kOiAodDFfNS54ID0gdDJfNS54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQxXzUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfNS55LCB0MV81LngKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzUueCwgKFBB UlRJQUwgc3VtKHQyXzUueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfNS54LCBQQVJUSUFMIHN1bSh0Ml81LnkpLCBQQVJUSUFM IGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQy XzUueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQyXzUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNS55LCB0Ml81LngKKyg2NyByb3dzKQorCitTRUxF Q1QgdDEueSwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9J TiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLnkgT1JERVIg QlkgdDEueTsKKyB5ICB8ICBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLS0rLS0tLS0tLQorICAw IHwgICAgIDAgfCAgMTA4OQorICAxIHwgIDExNTYgfCAgMTE1NgorICAyIHwgIDIzMTIgfCAgMTE1 NgorICAzIHwgIDM0NjggfCAgMTE1NgorICA0IHwgIDQ2MjQgfCAgMTE1NgorICA1IHwgIDU3ODAg fCAgMTE1NgorICA2IHwgIDY5MzYgfCAgMTE1NgorICA3IHwgIDgwOTIgfCAgMTE1NgorICA4IHwg IDkyNDggfCAgMTE1NgorICA5IHwgMTA0MDQgfCAgMTE1NgorIDEwIHwgMTE1NjAgfCAgMTE1Ngor IDExIHwgMTE5NzkgfCAgMTA4OQorIDEyIHwgMTMwNjggfCAgMTA4OQorIDEzIHwgMTQxNTcgfCAg MTA4OQorIDE0IHwgMTUyNDYgfCAgMTA4OQorIDE1IHwgMTYzMzUgfCAgMTA4OQorIDE2IHwgMTc0 MjQgfCAgMTA4OQorIDE3IHwgMTg1MTMgfCAgMTA4OQorIDE4IHwgMTk2MDIgfCAgMTA4OQorIDE5 IHwgMjA2OTEgfCAgMTA4OQorIDIwIHwgMjE3ODAgfCAgMTA4OQorIDIxIHwgMjI4NjkgfCAgMTA4 OQorIDIyIHwgMjM5NTggfCAgMTA4OQorIDIzIHwgMjUwNDcgfCAgMTA4OQorIDI0IHwgMjYxMzYg fCAgMTA4OQorIDI1IHwgMjcyMjUgfCAgMTA4OQorIDI2IHwgMjgzMTQgfCAgMTA4OQorIDI3IHwg Mjk0MDMgfCAgMTA4OQorIDI4IHwgMzA0OTIgfCAgMTA4OQorIDI5IHwgMzE1ODEgfCAgMTA4OQor KDMwIHJvd3MpCisKKy0tIENoZWNrIHdpdGggZWFnZXIgYWdncmVnYXRpb24gb3ZlciBqb2luIHJl bAorLS0gZnVsbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VM RUNUIHQxLngsIHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9t bCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9h Z2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBP dXRwdXQ6IHQxLngsIChzdW0oKHQyLnkgKyB0My55KSkpLCAoY291bnQoKikpCisgICBTb3J0IEtl eTogdDEueAorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgc3VtKCh0Mi55ICsgdDMueSkpLCBjb3Vu dCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MS54CisgICAgICAgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1 bSgodDIueSArIHQzLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDEueCA9IHQyLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDEueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueCwgdDMueCwgKFBBUlRJQUwgc3Vt KCh0Mi55ICsgdDMueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyLngsIHQzLngsIFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkp LCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHQyLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwg dDIueCwgdDMueSwgdDMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDIueCA9IHQzLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwg dDIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDMueSwg dDMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnksIHQzLngKKyAg ICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzEueCwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSwgY291bnQoKikKKyAgICAgICAgICAgICAg IEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18x LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIHQzXzEueCwgKFBBUlRJQUwg c3VtKCh0Ml8xLnkgKyB0M18xLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIHQzXzEueCwgUEFSVElBTCBzdW0oKHQy XzEueSArIHQzXzEueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9IHQzXzEueCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAg IC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIu eCwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3Vw IEtleTogdDFfMi54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSks IChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFf Mi54ID0gdDJfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueCwgKFBBUlRJQUwgc3VtKCh0 Ml8yLnkgKyB0M18yLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueCwgUEFSVElBTCBzdW0oKHQyXzIueSAr IHQzXzIueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8yLnksIHQyXzIueCwgdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYl9tbF9wMl9zMiB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiX21sX3AyX3MyIHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgIC0+ICBG aW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueCwgc3Vt KCh0Ml8zLnkgKyB0M18zLnkpKSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTog dDFfMy54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzMueCwgKFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSksIChQQVJU SUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMy54ID0g dDJfMy54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiX21sX3AzX3MxIHQxXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDFfMy54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueCwgKFBBUlRJQUwgc3VtKCh0Ml8zLnkg KyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueCwgUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMu eSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH cm91cCBLZXk6IHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8zLnksIHQyXzMueCwgdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzMueCA9IHQzXzMueCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wM19zMSB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiX21sX3AzX3MxIHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgIC0+ICBGaW5hbGl6 ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueCwgc3VtKCh0Ml80 LnkgKyB0M180LnkpKSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfNC54 CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzQueCwgKFBBUlRJQUwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSksIChQQVJUSUFMIGNv dW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfNC54ID0gdDJfNC54 KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiX21sX3AzX3MyIHQxXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFf NC54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml80LngsIHQzXzQueCwgKFBBUlRJQUwgc3VtKCh0Ml80LnkgKyB0M180 LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Ml80LngsIHQzXzQueCwgUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBQ QVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQyXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80Lnks IHQyXzQueCwgdDNfNC55LCB0M180LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQyXzQueCA9IHQzXzQueCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wM19zMiB0Ml80CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0M180LnksIHQzXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21s X3AzX3MyIHQzXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDNfNC55LCB0M180LngKKygxMTQgcm93cykKKworU0VMRUNUIHQxLngs IHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lO IGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21s IHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKyB4ICB8ICAg c3VtICAgfCBjb3VudCAKKy0tLS0rLS0tLS0tLS0tKy0tLS0tLS0KKyAgMCB8ICAgICAgIDAgfCAz NTkzNworICAxIHwgICA3ODYwOCB8IDM5MzA0CisgIDIgfCAgMTU3MjE2IHwgMzkzMDQKKyAgMyB8 ICAyMzU4MjQgfCAzOTMwNAorICA0IHwgIDMxNDQzMiB8IDM5MzA0CisgIDUgfCAgMzkzMDQwIHwg MzkzMDQKKyAgNiB8ICA0NzE2NDggfCAzOTMwNAorICA3IHwgIDU1MDI1NiB8IDM5MzA0CisgIDgg fCAgNjI4ODY0IHwgMzkzMDQKKyAgOSB8ICA3MDc0NzIgfCAzOTMwNAorIDEwIHwgIDc4NjA4MCB8 IDM5MzA0CisgMTEgfCAgNzkwNjE0IHwgMzU5MzcKKyAxMiB8ICA4NjI0ODggfCAzNTkzNworIDEz IHwgIDkzNDM2MiB8IDM1OTM3CisgMTQgfCAxMDA2MjM2IHwgMzU5MzcKKyAxNSB8IDEwNzgxMTAg fCAzNTkzNworIDE2IHwgMTE0OTk4NCB8IDM1OTM3CisgMTcgfCAxMjIxODU4IHwgMzU5MzcKKyAx OCB8IDEyOTM3MzIgfCAzNTkzNworIDE5IHwgMTM2NTYwNiB8IDM1OTM3CisgMjAgfCAxNDM3NDgw IHwgMzU5MzcKKyAyMSB8IDE1MDkzNTQgfCAzNTkzNworIDIyIHwgMTU4MTIyOCB8IDM1OTM3Cisg MjMgfCAxNjUzMTAyIHwgMzU5MzcKKyAyNCB8IDE3MjQ5NzYgfCAzNTkzNworIDI1IHwgMTc5Njg1 MCB8IDM1OTM3CisgMjYgfCAxODY4NzI0IHwgMzU5MzcKKyAyNyB8IDE5NDA1OTggfCAzNTkzNwor IDI4IHwgMjAxMjQ3MiB8IDM1OTM3CisgMjkgfCAyMDg0MzQ2IHwgMzU5MzcKKygzMCByb3dzKQor CistLSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFi X21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2Vy X2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55 OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTb3J0CisgICBPdXRwdXQ6IHQzLnksIChzdW0oKHQyLnkgKyB0My55KSkpLCAoY291 bnQoKikpCisgICBTb3J0IEtleTogdDMueQorICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgIE91dHB1dDogdDMueSwgc3VtKCh0Mi55ICsgdDMueSkpLCBjb3VudCgqKQorICAg ICAgICAgR3JvdXAgS2V5OiB0My55CisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgKFBB UlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAg ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQxXzEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54CisgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8x LngsIHQzXzEueSwgdDNfMS54LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpKSwgKFBB UlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBI YXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzEueCwgdDNfMS55LCB0M18xLngsIFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSwgUEFS VElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Ml8xLngsIHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzEueSwgdDJfMS54LCB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS54ID0gdDNfMS54KQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiX21sX3AxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWJfbWxfcDEgdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIChQQVJUSUFM IHN1bSgodDJfMi55ICsgdDNfMi55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAg ICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzIueCA9IHQyXzIueCkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0MV8yCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54 LCB0M18yLnksIHQzXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSksIChQQVJU SUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8y LngsIHQzXzIueSwgdDNfMi54LCBQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSksIFBBUlRJ QUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTog dDJfMi54LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8yLnksIHQyXzIueCwgdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYl9tbF9wMl9zMSB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiX21sX3AyX3MxIHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCAoUEFS VElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDFf MworICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzMueCwgdDNfMy55LCB0M18zLngsIChQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkpLCAo UEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFs IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfMy54LCB0M18zLnksIHQzXzMueCwgUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpLCBQ QVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQyXzMueCwgdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMy55LCB0Ml8zLngsIHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0M18zLngpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzQueSwg KFBBUlRJQUwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAg ICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfNC54ID0gdDJfNC54KQorICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3Mx IHQxXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC54CisgICAgICAg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml80LngsIHQzXzQueSwgdDNfNC54LCAoUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkp KSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy dGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzQueCwgdDNfNC55LCB0M180LngsIFBBUlRJQUwgc3VtKCh0Ml80LnkgKyB0M180Lnkp KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiB0Ml80LngsIHQzXzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54LCB0M180LnksIHQzXzQueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfNC54ID0gdDNfNC54KQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQyXzQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80LngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzQueSwgdDNfNC54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDNfNAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIHQzXzQueAorICAgICAg ICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M181 LnksIChQQVJUSUFMIHN1bSgodDJfNS55ICsgdDNfNS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkK KyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzUueCA9IHQyXzUueCkKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9w M19zMiB0MV81CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzUueAorICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfNS54LCB0M181LnksIHQzXzUueCwgKFBBUlRJQUwgc3VtKCh0Ml81LnkgKyB0M181 LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Ml81LngsIHQzXzUueSwgdDNfNS54LCBQQVJUSUFMIHN1bSgodDJfNS55ICsgdDNf NS55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdyb3VwIEtleTogdDJfNS54LCB0M181LnksIHQzXzUueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml81LnksIHQyXzUueCwgdDNfNS55LCB0M181LngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzUueCA9IHQzXzUu eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMiB0Ml81CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzUueSwgdDJfNS54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M181LnksIHQzXzUueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQzXzUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNS55LCB0M181LngKKygx MDIgcm93cykKKworU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00g ZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQy LnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkg T1JERVIgQlkgdDMueTsKKyB5ICB8ICAgc3VtICAgfCBjb3VudCAKKy0tLS0rLS0tLS0tLS0tKy0t LS0tLS0KKyAgMCB8ICAgICAgIDAgfCAzNTkzNworICAxIHwgICA3ODYwOCB8IDM5MzA0CisgIDIg fCAgMTU3MjE2IHwgMzkzMDQKKyAgMyB8ICAyMzU4MjQgfCAzOTMwNAorICA0IHwgIDMxNDQzMiB8 IDM5MzA0CisgIDUgfCAgMzkzMDQwIHwgMzkzMDQKKyAgNiB8ICA0NzE2NDggfCAzOTMwNAorICA3 IHwgIDU1MDI1NiB8IDM5MzA0CisgIDggfCAgNjI4ODY0IHwgMzkzMDQKKyAgOSB8ICA3MDc0NzIg fCAzOTMwNAorIDEwIHwgIDc4NjA4MCB8IDM5MzA0CisgMTEgfCAgNzkwNjE0IHwgMzU5MzcKKyAx MiB8ICA4NjI0ODggfCAzNTkzNworIDEzIHwgIDkzNDM2MiB8IDM1OTM3CisgMTQgfCAxMDA2MjM2 IHwgMzU5MzcKKyAxNSB8IDEwNzgxMTAgfCAzNTkzNworIDE2IHwgMTE0OTk4NCB8IDM1OTM3Cisg MTcgfCAxMjIxODU4IHwgMzU5MzcKKyAxOCB8IDEyOTM3MzIgfCAzNTkzNworIDE5IHwgMTM2NTYw NiB8IDM1OTM3CisgMjAgfCAxNDM3NDgwIHwgMzU5MzcKKyAyMSB8IDE1MDkzNTQgfCAzNTkzNwor IDIyIHwgMTU4MTIyOCB8IDM1OTM3CisgMjMgfCAxNjUzMTAyIHwgMzU5MzcKKyAyNCB8IDE3MjQ5 NzYgfCAzNTkzNworIDI1IHwgMTc5Njg1MCB8IDM1OTM3CisgMjYgfCAxODY4NzI0IHwgMzU5MzcK KyAyNyB8IDE5NDA1OTggfCAzNTkzNworIDI4IHwgMjAxMjQ3MiB8IDM1OTM3CisgMjkgfCAyMDg0 MzQ2IHwgMzU5MzcKKygzMCByb3dzKQorCitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWw7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDkxMDg5YWMyMTUuLjYzNzA1 MDQzNzcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNTEsNiAr MTUxLDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1l IGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9hc3luY19hcHBlbmQgICAgICAgICAgICB8IG9uCiAg ZW5hYmxlX2JpdG1hcHNjYW4gICAgICAgICAgICAgIHwgb24KICBlbmFibGVfZGlzdGluY3RfcmVv cmRlcmluZyAgICAgfCBvbgorIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgICAgICAgICB8IG9mZgog IGVuYWJsZV9nYXRoZXJtZXJnZSAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2dyb3VwX2J5X3Jl b3JkZXJpbmcgICAgIHwgb24KICBlbmFibGVfaGFzaGFnZyAgICAgICAgICAgICAgICAgfCBvbgpA QCAtMTcxLDcgKzE3Miw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mg d2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAg ICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3Rp ZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyMyByb3dzKQorKDI0IHJvd3MpCiAKIC0tIFRo ZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMu ICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJlIHByZXNlbnQgb3IgYWJzZW50LCBkZXBlbmRpbmcg b24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3RtYXN0ZXIgc3RhcnQuCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZQppbmRleCAxZWRkOWU0NWViLi40ZmMyMTBlMmVmIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUKQEAgLTExOSw3ICsxMTksNyBAQCB0ZXN0OiBwbGFuY2FjaGUgbGltaXQg cGxwZ3NxbCBjb3B5MiB0ZW1wIGRvbWFpbiByYW5nZWZ1bmNzIHByZXBhcmUgY29udmVyc2lvbiB0 cgogIyBUaGUgc3RhdHMgdGVzdCByZXNldHMgc3RhdHMsIHNvIG5vdGhpbmcgZWxzZSBuZWVkaW5n IHN0YXRzIGFjY2VzcyBjYW4gYmUgaW4KICMgdGhpcyBncm91cC4KICMgLS0tLS0tLS0tLQotdGVz dDogcGFydGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5lIHJlbG9wdGlvbnMgaGFzaF9wYXJ0IGlu ZGV4aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0aW9uX2luZm8gdHVwbGVzb3J0IGV4cGxh aW4gY29tcHJlc3Npb24gbWVtb2l6ZSBzdGF0cyBwcmVkaWNhdGUKK3Rlc3Q6IHBhcnRpdGlvbl9q b2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGluZyBwYXJ0aXRp b25fYWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNvbXByZXNzaW9u IG1lbW9pemUgc3RhdHMgcHJlZGljYXRlIGVhZ2VyX2FnZ3JlZ2F0ZQogCiAjIGV2ZW50X3RyaWdn ZXIgZGVwZW5kcyBvbiBjcmVhdGVfYW0gYW5kIGNhbm5vdCBydW4gY29uY3VycmVudGx5IHdpdGgK ICMgYW55IHRlc3QgdGhhdCBydW5zIERETApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvZWFnZXJfYWdncmVnYXRlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2VyX2FnZ3Jl Z2F0ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDA1MGU0ZGY0 NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2VyX2FnZ3JlZ2F0 ZS5zcWwKQEAgLTAsMCArMSwxOTIgQEAKKy0tCistLSBFQUdFUiBBR0dSRUdBVElPTgorLS0gVGVz dCB3ZSBjYW4gcHVzaCBhZ2dyZWdhdGlvbiBkb3duIGJlbG93IGpvaW4KKy0tCisKKy0tIEVuYWJs ZSBlYWdlciBhZ2dyZWdhdGlvbiwgd2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBl bmFibGVfZWFnZXJfYWdncmVnYXRlIFRPIG9uOworCitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3Qx IChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJf YWdnX3QyIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUg ZWFnZXJfYWdnX3QzIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CisKK0lOU0VS VCBJTlRPIGVhZ2VyX2FnZ190MSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAxMDAwKWk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDIgU0VMRUNUIGksIGklMTAsIGkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClpOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3QzIFNF TEVDVCBpJTEwLCBpJTEwLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApaTsKKworQU5B TFlaRSBlYWdlcl9hZ2dfdDE7CitBTkFMWVpFIGVhZ2VyX2FnZ190MjsKK0FOQUxZWkUgZWFnZXJf YWdnX3QzOworCisKKy0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgYmFzZSByZWwK Ky0tCisKKy0tIFBlcmZvcm0gc2NhbiBvZiBhIHRhYmxlLCBhZ2dyZWdhdGUgdGhlIHJlc3VsdCwg am9pbiBpdCB0byB0aGUgb3RoZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUgYWdncmVnYXRp b24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMp IEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5i IEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJP TSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JP VVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworCistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBzb3J0 aW5nIGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOworCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdn X3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEg T1JERVIgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEg dDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRF UiBCWSB0MS5hOworCitSRVNFVCBlbmFibGVfaGFzaGFnZzsKKworCistLQorLS0gVGVzdCBlYWdl ciBhZ2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCistLQorCistLSBQZXJmb3JtIGpvaW4gb2YgdGFi bGVzLCBhZ2dyZWdhdGUgdGhlIHJlc3VsdCwgam9pbiBpdCB0byB0aGUgb3RoZXIgdGFibGUKKy0t IGFuZCBmaW5hbGl6ZSB0aGUgYWdncmVnYXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBK T0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBP TiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwg YXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0 MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9V UCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRp bmcgYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CisKK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFn ZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFn ZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsK K1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4g ZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQy LmEgPSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKworUkVTRVQgZW5hYmxlX2hh c2hhZ2c7CisKKworLS0KKy0tIFRlc3QgdGhhdCBlYWdlciBhZ2dyZWdhdGlvbiB3b3JrcyBmb3Ig b3V0ZXIgam9pbgorLS0KKworLS0gRW5zdXJlIGFnZ3JlZ2F0aW9uIGNhbiBiZSBwdXNoZWQgZG93 biB0byB0aGUgbm9uLW51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgUklHSFQgSk9JTiBl YWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5h OworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBSSUdIVCBKT0lO IGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQx LmE7CisKKy0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW5ub3QgYmUgcHVzaGVkIGRvd24gdG8gdGhl IG51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0Mi5i LCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2FnZ190MiB0 MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7CitTRUxFQ1QgdDIu YiwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIExFRlQgSk9JTiBlYWdlcl9hZ2dfdDIg dDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDIuYiBPUkRFUiBCWSB0Mi5iOworCisKKy0tCist LSBUZXN0IHRoYXQgZWFnZXIgYWdncmVnYXRpb24gd29ya3MgZm9yIHBhcmFsbGVsIHBsYW5zCist LQorCitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdD0wOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q9 MDsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplPTA7CitTRVQgbWF4X3BhcmFsbGVs X3dvcmtlcnNfcGVyX2dhdGhlcj00OworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdn X3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKK1NFTEVD VCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIg dDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworCitSRVNFVCBw YXJhbGxlbF9zZXR1cF9jb3N0OworUkVTRVQgcGFyYWxsZWxfdHVwbGVfY29zdDsKK1JFU0VUIG1p bl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19w ZXJfZ2F0aGVyOworCisKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3QxOworRFJPUCBUQUJMRSBlYWdl cl9hZ2dfdDI7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MzsKKworCistLQorLS0gVGVzdCBlYWdl ciBhZ2dyZWdhdGlvbiBmb3IgcGFydGl0aW9ud2lzZSBqb2luCistLQorCistLSBFbmFibGUgcGFy dGl0aW9ud2lzZSBhZ2dyZWdhdGUsIHdoaWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJsZWQuCitTRVQg ZW5hYmxlX3BhcnRpdGlvbndpc2VfYWdncmVnYXRlIFRPIHRydWU7CistLSBFbmFibGUgcGFydGl0 aW9ud2lzZSBqb2luLCB3aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9w YXJ0aXRpb253aXNlX2pvaW4gVE8gdHJ1ZTsKKworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIx KHggaW50LCB5IGludCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2Vy X2FnZ190YWIxX3AxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMSBGT1IgVkFMVUVTIEZST00g KDApIFRPICgxMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDIgUEFSVElUSU9OIE9G IGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7CitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3RhYjFfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxV RVMgRlJPTSAoMjApIFRPICgzMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjIoeCBpbnQs IHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeSk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3Rh YjJfcDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIyIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8g KDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMiBQQVJUSVRJT04gT0YgZWFnZXJf YWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdl cl9hZ2dfdGFiMl9wMyBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9N ICgyMCkgVE8gKDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIxIFNFTEVDVCBpICUgMzAs IGkgJSAyMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLCAyOTksIDIpIGk7CitJTlNFUlQgSU5UTyBl YWdlcl9hZ2dfdGFiMiBTRUxFQ1QgaSAlIDIwLCBpICUgMzAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MCwgMjk5LCAzKSBpOworCitBTkFMWVpFIGVhZ2VyX2FnZ190YWIxOworQU5BTFlaRSBlYWdlcl9h Z2dfdGFiMjsKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdh dGlvbiBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHQxLngsIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkg dDEueCBPUkRFUiBCWSB0MS54OworU0VMRUNUIHQxLngsIHN1bSh0MS55KSwgY291bnQoKikgRlJP TSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkg R1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworCistLSBHUk9VUCBCWSBoYXZpbmcgb3RoZXIg bWF0Y2hpbmcga2V5CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIueSwg c3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFi MiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi55IE9SREVSIEJZIHQyLnk7CitTRUxF Q1QgdDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdl cl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi55IE9SREVSIEJZIHQy Lnk7CisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIGRvZXMgbm90IG1hdGNoOyBwYXJ0aWFsIGFn Z3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKSBGUk9NIGVh Z2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9V UCBCWSB0Mi54IEhBVklORyBhdmcodDEueCkgPiAxMCBPUkRFUiBCWSB0Mi54OworU0VMRUNUIHQy LngsIHN1bSh0MS54KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdn X3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueCBIQVZJTkcgYXZnKHQxLngp ID4gMTAgT1JERVIgQlkgdDIueDsKKworLS0gQ2hlY2sgd2l0aCBlYWdlciBhZ2dyZWdhdGlvbiBv dmVyIGpvaW4gcmVsCistLSBmdWxsIGFnZ3JlZ2F0aW9uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIx IHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2df dGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CitTRUxF Q1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFn ZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0 Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisKKy0tIHBhcnRpYWwgYWdn cmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpCitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190 YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9h Z2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CitT RUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4g ZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBP TiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CitSRVNFVCBlbmFibGVf aGFzaGFnZzsKKworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdGFiMTsKK0RST1AgVEFCTEUgZWFnZXJf YWdnX3RhYjI7CisKKworLS0KKy0tIFRlc3Qgd2l0aCBtdWx0aS1sZXZlbCBwYXJ0aXRpb25pbmcg c2NoZW1lCistLQorQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWwoeCBpbnQsIHkgaW50KSBQ QVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMSBQ QVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7 CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdn X3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApIFBBUlRJVElPTiBCWSBSQU5HRSh4 KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MxIFBBUlRJVElPTiBPRiBlYWdl cl9hZ2dfdGFiX21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSk7CitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9w MiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190 YWJfbWxfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgy MCkgVE8gKDMwKSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdn X3RhYl9tbF9wM19zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMyBGT1IgVkFMVUVT IEZST00gKDIwKSBUTyAoMjUpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDNfczIg UEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBGUk9NICgyNSkgVE8g KDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWJfbWwgU0VMRUNUIGkgJSAzMCwgaSAlIDMw IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CisKK0FOQUxZWkUgZWFnZXJfYWdnX3Rh Yl9tbDsKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlv biBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKQorU0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2df dGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBC WSB0MS54IE9SREVSIEJZIHQxLng7CitTRUxFQ1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBG Uk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLngg PSB0Mi54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKworLS0gV2hlbiBHUk9VUCBCWSBj bGF1c2UgZG9lcyBub3QgbWF0Y2g7IHBhcnRpYWwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZv ciBlYWNoIHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0 MS55LCBzdW0odDIueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVh Z2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueSBPUkRFUiBCWSB0 MS55OworU0VMRUNUIHQxLnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFi X21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0 MS55IE9SREVSIEJZIHQxLnk7CisKKy0tIENoZWNrIHdpdGggZWFnZXIgYWdncmVnYXRpb24gb3Zl ciBqb2luIHJlbAorLS0gZnVsbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKQorU0VMRUNUIHQxLngsIHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJf YWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9J TiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQxLnggT1JERVIg QlkgdDEueDsKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVh Z2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54 IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9S REVSIEJZIHQxLng7CisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9N IGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0 Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55 IE9SREVSIEJZIHQzLnk7CitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikg RlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54 ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkg dDMueSBPUkRFUiBCWSB0My55OworCitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWw7CmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGNlMzNlNTViZjEuLmRkZDY2OWI0NjcgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC00MSw2ICs0MSw3IEBAIEFmdGVyVHJpZ2dlcnNUYWJsZURh dGEKIEFmdGVyVHJpZ2dlcnNUcmFuc0RhdGEKIEFnZwogQWdnQ2xhdXNlQ29zdHMKK0FnZ0NsYXVz ZUluZm8KIEFnZ0luZm8KIEFnZ1BhdGgKIEFnZ1NwbGl0CkBAIC0xMDY0LDYgKzEwNjUsNyBAQCBH cmFudFRhcmdldFR5cGUKIEdyb3VwCiBHcm91cEJ5T3JkZXJpbmcKIEdyb3VwQ2xhdXNlCitHcm91 cEV4cHJJbmZvCiBHcm91cFBhdGgKIEdyb3VwUGF0aEV4dHJhRGF0YQogR3JvdXBSZXN1bHRQYXRo CkBAIC0xMjk2LDcgKzEyOTgsNiBAQCBKb2luCiBKb2luQ29zdFdvcmtzcGFjZQogSm9pbkRvbWFp bgogSm9pbkV4cHIKLUpvaW5IYXNoRW50cnkKIEpvaW5QYXRoCiBKb2luUGF0aEV4dHJhRGF0YQog Sm9pblN0YXRlCkBAIC0yMzc5LDEzICsyMzgwLDE3IEBAIFJlaW5kZXhPYmplY3RUeXBlCiBSZWlu ZGV4UGFyYW1zCiBSZWluZGV4U3RtdAogUmVpbmRleFR5cGUKK1JlbEFnZ0luZm8KIFJlbEZpbGVM b2NhdG9yCiBSZWxGaWxlTG9jYXRvckJhY2tlbmQKIFJlbEZpbGVOdW1iZXIKK1JlbEhhc2hFbnRy eQogUmVsSWRDYWNoZUVudAogUmVsSWRUb1R5cGVJZENhY2hlRW50cnkKIFJlbEluZm8KIFJlbElu Zm9BcnIKK1JlbEluZm9MaXN0CitSZWxJbmZvTGlzdEluZm8KIFJlbE1hcEZpbGUKIFJlbE1hcHBp bmcKIFJlbE9wdEluZm8KLS0gCjIuNDMuMAoK --000000000000b7adec06296f1647--