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.96) (envelope-from ) id 1vsDsD-00Be8x-0n for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Feb 2026 05:43:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vsDsB-008CHJ-2p for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Feb 2026 05:43:48 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vsDsA-008CGo-2w for pgsql-hackers@lists.postgresql.org; Tue, 17 Feb 2026 05:43:47 +0000 Received: from mail-yx1-xb134.google.com ([2607:f8b0:4864:20::b134]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vsDs7-000000010YA-3TAK for pgsql-hackers@lists.postgresql.org; Tue, 17 Feb 2026 05:43:46 +0000 Received: by mail-yx1-xb134.google.com with SMTP id 956f58d0204a3-649e97f1e1eso3067771d50.1 for ; Mon, 16 Feb 2026 21:43:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771307024; cv=none; d=google.com; s=arc-20240605; b=cZHJrBnJHNKN/50igaTsvbSPH6NSvVgRDrxwOMvN5GzlMAqJXWMRwjyLmhzUgSok7I fL6pAxAb6slmVwIln47QVf3nTUAGpL7SxX02XZ2mIt2Tnm764TZQXr7v8H/kXjTjTVby dXxTeyubmRqhXVw0dMLYs1A9R9oL6rr/7h0bljavRkL9f40Ms/N0fEs7+kts00aZjmex wtvppEKcU1fWyURh0SNmWaiaLbK9CUmd8kFCbwSZ6xpdQduox7MlyEFD0fvmXgIrBO5/ J7Lhwj2CP9XRBi+ZmY/UuCk8IvMEwSbgOVbfHFblP3C4e4uFmEbUvJyS/vKbdNBkwn4l mo8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=eE5FEhqzgxokkxz+RN8tFiO5gKMNn8Rs5lrQuNGn97k=; fh=RSHe0z1bfZn037queSZRMAHqBr8xxefTsvvZNVeSGxc=; b=J2IRsDdJPylS9YxLzWy8gnnqB6hxfC9/5Rxm7MJDovKQKz4vwd21cwOpDSORfF1rV0 W9vCSIaGU/e3KL1f6memWWtWX8ia3aQH08qpKCRWMfm6o1uQP1PDijOkCljGjAG/equg /wI9CpHD6Xufo/Fh/QNGIuv1rQof74Orx1gUjlPyvHpPe7DwH/+ounk+ZPxBOuvC6Lu/ sFIBBr23OfsHeW6Fak+nk9EUTrLzkMX6xaKYhoGIwTVoZ6NQe61sjrb3gLIp6v6KdxN5 lrPoZs0kGToEJ6zDfxOcC+GHjmWxpseM+9v9jPEiWmnQEfxviIgiJWyBCcYIW8lmrGLV HZ3g==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771307024; x=1771911824; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=eE5FEhqzgxokkxz+RN8tFiO5gKMNn8Rs5lrQuNGn97k=; b=SK4mMp5V6hNIRM293GxWVzbg1m0BqJdwxxJfl2ET4W/jFMeJEM8ZcoznnqO/a46mRv pAPJcyNIJsNmW0SDmbg1scTBWhUO3uCkE0752mnZbOSul5+tozVyA/AMdzwDBwvEho+i Iccak5AMZTg+zKH8P0tfgLk8lr5Yd4wpVgFrt9q88whfAwyqIZirvFPq4k/NxzlMjtn+ DGHfHHQcVaTqFpO6K9XIan+/D1g1VUcffpZe3cQsaGB4MbTarf08R2amErDDMQjmlBES VTvHhBDAHXucDKelbXds9gw54n+Vbu2dCrES9xFjJ0UmXoDNAsAd149mjkCZoyujfmp5 +rEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771307024; x=1771911824; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=eE5FEhqzgxokkxz+RN8tFiO5gKMNn8Rs5lrQuNGn97k=; b=sYkK+9ybVnJeN6aasnSMqjnFDyC7M6nhZZJemqSuhka188BQy8EF3bjOhI6Jxy091m b6OTvariQdFafy0kh5yQFoZPk2scrBNHk7Kq9i6oatYJw24rSj2ydmV9/smeFb42XbW4 KsdPf5REGqTggZyjxXBQ8E7Ln6nH4GNW+ysLarpNPrJcqN5a5afhDeRbu6YkzkGDmCBR trqbEVu0vMmAsU3s6sk///kEpxSm4+SOHEXJahdBUScIUOXbMIgWNsvvMJRWB1q6BIx/ 0EPwk5gTv1lCHMpLp38EeDPs9jdbi6g/kjjEU9EIT+o8TRT3jh7CAwebXKipnndu+abK FX/w== X-Forwarded-Encrypted: i=1; AJvYcCUjXnt/nk7TUDnv+47VB6tmiZxAnDvCl7tbSsvrQmIL2nnqmwXAlBlgAZLkZLcwJCizlynPjhT8zlcR3eoa@lists.postgresql.org X-Gm-Message-State: AOJu0YygG/oAVbVmZ98N1gjJ2tGxS4L9N0QdvDShbxuI3aQxoeu3Z327 GHNfWzCVNdu+sSo4Ulq906lb2+oe4mNc8we2bDaQNUnNZNwwmbhPb9Vt7jf44LnR8+bh+y5867P MU5FcqigrB7pCDVanIhFWZWuLpFhEZFc= X-Gm-Gg: AZuq6aJim3XyxN8rvCLbPYDkD4DWAiq/RQyBhVDIh9VC060Qdqd127mCXt0j0C57KPM 4XecP1FF3MP2UxiiYx5m7b9OJF8W2vS8xfpF2RkcYrI75bMl5Uuzof6NI2Ps3XxiwRWM6JC9HY5 6B6Hjetxe3JqvKZt9BV9dS9jG7+sRYINCMlWDLwkuuwZD3IebWOBNIxulrV3i3BJZAXjFARCLxO wnw7/VD9OdOYx9KEjOP1adlXie717I+cuCnZDmpwz5Z+rSka160JK0ku/32jlgDOofqnPt5kfgn f/rUGjU= X-Received: by 2002:a53:d018:0:b0:649:ed08:1a01 with SMTP id 956f58d0204a3-64c14b7e8e2mr10417448d50.35.1771307023581; Mon, 16 Feb 2026 21:43:43 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: vignesh C Date: Tue, 17 Feb 2026 11:13:32 +0530 X-Gm-Features: AaiRm530L32Ui4ynlM8lAqr0tL_HOnXQEBCX7Pp2F48O7YJq2NYR6U68LJMn5a0 Message-ID: Subject: Re: Skipping schema changes in publication To: shveta malik Cc: "David G. Johnston" , Dilip Kumar , Shlok Kyal , Amit Kapila , Peter Smith , "Zhijie Hou (Fujitsu)" , YeXiu <1518981153@qq.com>, Ian Lawrence Barwick , Bharath Rupireddy , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000ee2354064afe8dc3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ee2354064afe8dc3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 16 Feb 2026 at 12:45, shveta malik wrote: > > On Mon, Feb 16, 2026 at 11:55=E2=80=AFAM David G. Johnston > wrote: > > > > On Sunday, February 15, 2026, Dilip Kumar wrote= : > >> > >> On Mon, Feb 16, 2026 at 8:50=E2=80=AFAM vignesh C wrote: > >> > > >> I started looking into the patch, I have a few comments/questions > >> > >> 1. > >> + > >> + Similarly, if another publication includes the same table with = a row > >> + filter, but it is also covered by a > >> + FOR ALL TABLES ... EXCEPT publication, the t= able is > >> + published without applying the row filter, since row filters ca= nnot be > >> + specified for FOR ALL TABLES ... EXCEPT publ= ications > >> + and such publications are therefore treated as having no row fi= lter. > >> + > >> > >> I did not understand what this paragraph is trying to explain? what > >> do you mean by it is covered by FOR ALL TABLES ... EXCEPT, does it > >> mean the relation is not excluded by EXCEPT? > > > > > > I concur the wording is tough to parse. =E2=80=9CCovered=E2=80=9D is p= robably not a good word to use. Stick with either included or excluded. I= n this case, the point being communicated is if two publications include a = table and one doesn=E2=80=99t have a where clause a combining subscription = will consider the where clause to be a constant true when combining the whe= re clauses using OR. > > > > This wording basically already exists in create subscription. > > --yes, it exists already in doc ([1]) in the row-filter page. > > > This paragraph and the preceding one, which discuss =E2=80=9Cif another= publication exists=E2=80=9D, seems out of place in the create publication = documentation. This page should be restricted to only those behaviors that= manifest when dealing with a single publication, detailing what it produce= s. > > If we want to mention it in brief, I still feel CREATE-PUBLICATION > page is a good place. SImilar to how we mention in > 'publish_via_partition_root' section. See 'There can be a case where a > subscription combines multiple publications.' in [2]. > > Overall, I think this complete paragraph could be removed from > CREATE-PUBLICATION. I find it over-detailed. > > + > + When a partition is listed in the EXCEPT clause= of a > + FOR ALL TABLES publication with > + publish_via_partition_root set to > + true, the root partitioned table remains includ= ed in > + the publication. If that partition is explicitly included by anoth= er > + publication with publish_via_partition_root set= to > + false, its changes are still replicated. In thi= s > + case, the changes are published using the identity of the root > + partitioned table, since it is the top-most ancestor included in t= he > + FOR ALL TABLES publication, thereby ensuring > + consistent routing of changes within the partition hierarchy. > + > + > + Similarly, if another publication includes the same table with a r= ow > + filter, but it is also covered by a > + FOR ALL TABLES ... EXCEPT publication, the tabl= e is > + published without applying the row filter, since row filters canno= t be > + specified for FOR ALL TABLES ... EXCEPT publica= tions > + and such publications are therefore treated as having no row filte= r. > + > > Instead we can have something like below: > > There can be a case where a subscription includes multiple > publications. In such a case, a table or partition that is included in > one publication and listed in the EXCEPT TABLE clause of another is > considered included for replication. Subscribing to multiple > publications with different EXCEPT TABLE lists is currently not > supported. Updated > ~~ > > I feel it is unnecessary to mention row filters or column lists > specifically in the context of the EXCEPT TABLE clause because IIUC: > > --They do not apply to FOR ALL TABLES publications, which is where > EXCEPT TABLE is relevant. > --In the case of multiple publications, the behavior of row filters > and column lists remains unchanged from the HEAD behavior. The EXCEPT > clause simply excludes the specified table; rest of the behaviour > remains the same. > > Thoughts? Agree, removed these > ~~ > > > Few other comments on doc: > > 1) > catalogs.sgml: > prexcept: > + True if the relation is excluded from the publication. > > We shall use the term 'table' instead of 'relation' to refer clearly > that it is a table and not a sequence. Modified > 2) > logical-replication.sgml: > + . When a publication= is > + created with FOR ALL TABLES, tables can be explici= tly > + excluded from publication using the > + EXCEPT > TABLE > + clause. > > Suggestion: > 'tables can be explicitly' --> 'a table or set of tables can be explicitl= y' Modified > 3) > create_publication.sgml: > > + For inherited tables, if ONLY is specified befo= re the > + table name, only that table is excluded from the publication. If > + ONLY is not specified, the table and all its > descendant > + tables (if any) are excluded. Optionally, * can= be > + specified after the table name to explicitly indicate that descend= ant > + tables are excluded. > + > + > + For partitioned tables, when a table is specified in EXCEPT TABLE,= then > + changes to that table and all of its partitions (that is, the enti= re > + partition subtree rooted at that table) are not replicated. This b= ehavior > + is the same regardless of whether > + publish_via_partition_root is set to > + true or false. The > + publish_via_partition_root setting only determi= nes > + which relation is used as the publishing relation for replicated c= hanges, > + and does not affect exclusion semantics. > > a) > Can we make the tone of both paragraphs the same? Suggestion: > For partitioned tables, if a table is specified in EXCEPT TABLE, that > table and all of its partitions (that is, the entire partition subtree > rooted at that table) are excluded from the publication. > > b) > This behavior > + is the same regardless of whether > + publish_via_partition_root is set to > + true or false. The > + publish_via_partition_root setting only determi= nes > + which relation is used as the publishing relation for replicated c= hanges, > + and does not affect exclusion semantics. > > I think there is no need to explicitly mention the > 'publish_via_partition_root' thing here, unless others think > otherwise. Removed Thanks for the comments. The attached v45 version patch has the changes for the same. Regards, Vignesh --000000000000ee2354064afe8dc3 Content-Type: application/octet-stream; name="v45-0002-Extended-tests-for-EXCEPT-TABLE-patch.patch" Content-Disposition: attachment; filename="v45-0002-Extended-tests-for-EXCEPT-TABLE-patch.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlq6ggwy1 RnJvbSA4NDBjZDk2Mzk3ODI4NDc5NTRjY2QyNjJmYTkyZjBkYTdiMThmOTlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNCBGZWIgMjAyNiAxMjoyNzo1NyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjQ1 IDIvMl0gRXh0ZW5kZWQgdGVzdHMgZm9yIEVYQ0VQVCBUQUJMRSBwYXRjaAoKVGhpcyBwYXRjaCBj b250YWlucyBleHRyYSB0ZXN0cyBmb3IgRVhDRVBUIFRBQkxFIHBhdGNoLiBQdXJwb3NlIG9mIHRo aXMKdGVzdHMgdG8ga2VlcCB0cmFjayBvZiB0ZXN0cyB3aGljaCBvbmNlIGJyb2tlIHRoZSBwYXRj aC4KCkJhc2VkIG9uIGRpc2N1c3Npb24gaW4gZnV0dXJlIHdlIG1heSBwaWNrIHVwIHNvbWUgdGVz dCB0byBpbmNsdWRlIGluCnRoZSBtYWluIHBhdGNoLgotLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzEwMV90ZXN0LnBsIHwgMTM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmls ZSBjaGFuZ2VkLCAxMzYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3N1YnNjcmlwdGlvbi90LzEwMV90ZXN0LnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMTAxX3Rlc3QucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8xMDFfdGVzdC5w bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmU0ZGZjM2E3MTMKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8xMDFfdGVzdC5wbApAQCAt MCwwICsxLDEzNiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisjCisjIEV4dGVuZGVkIHRlc3QgZm9yIEVYQ0VQVCBUQUJMRQorCit1 c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0 OjpNb3JlOworCisjIC0tLS0tLS0tCisjIFB1Ymxpc2hlcgorIyAtLS0tLS0tLQorbXkgJHB1Ymxp c2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiskcHVi bGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRwdWJsaXNoZXIt PmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxKAord2FsX2xldmVsID0gbG9naWNh bAorbG9nX21pbl9tZXNzYWdlcyA9IElORk8KK2xvZ19zdGF0ZW1lbnQgPSBhbGwKK3dhbF9yZWNl aXZlcl90aW1lb3V0ID0gMAord2FsX3NlbmRlcl90aW1lb3V0ID0gMAorKSk7CiskcHVibGlzaGVy LT5zdGFydDsKKworIyBDcmVhdGUgYSBwYXJ0aXRpb24gc3RydWN0dXJlOgorIyBzYzEudDEKKyMg ICAtIHNjMS5jaGlsZDEKKyMgICAgICAgLSBzYzEuY2hpbGQxXzEKKyMgICAgICAgLSBzYzEuY2hp bGQxXzIKKyMgICAtIHNjMS5jaGlsZDIKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLCBxKAorCUNSRUFURSBTQ0hFTUEgc2MxOworCUNSRUFURSBUQUJMRSBzYzEudDEoaWQgaW50 KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworCUNSRUFURSBUQUJMRSBzYzEuY2hpbGQxKGlkIGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKKwlDUkVBVEUgVEFCTEUgc2MxLmNoaWxkMiBQQVJU SVRJT04gT0Ygc2MxLnQxIEZPUiBWQUxVRVMgRlJPTSAoMTAxKSBUTyAoMjAwKTsKKwlDUkVBVEUg VEFCTEUgc2MxLmNoaWxkMV8xIFBBUlRJVElPTiBPRiBzYzEuY2hpbGQxIEZPUiBWQUxVRVMgRlJP TSAoMCkgVE8gKDUwKTsKKwlDUkVBVEUgVEFCTEUgc2MxLmNoaWxkMV8yIFBBUlRJVElPTiBPRiBz YzEuY2hpbGQxIEZPUiBWQUxVRVMgRlJPTSAoNTEpIFRPICgxMDApOworCUFMVEVSIFRBQkxFIHNj MS50MSBBVFRBQ0ggUEFSVElUSU9OIHNjMS5jaGlsZDEgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo MTAwKTsKKykpOworCisjIC0tLS0tLS0tLS0KKyMgU3Vic2NyaWJlcgorIyAtLS0tLS0tLS0tCitt eSAkY29ubnN0ciA9ICRwdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Citt eSAkc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJl cicpOworJHN1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwor JHN1YnNjcmliZXItPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxKAord2FsX2xl dmVsID0gbG9naWNhbAorbG9nX21pbl9tZXNzYWdlcyA9IElORk8KK2xvZ19zdGF0ZW1lbnQgPSBh bGwKK3dhbF9yZWNlaXZlcl90aW1lb3V0ID0gMAord2FsX3NlbmRlcl90aW1lb3V0ID0gMAorKSk7 Ciskc3Vic2NyaWJlci0+c3RhcnQ7CisKKyRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3Rn cmVzJywgcSgKKwlDUkVBVEUgU0NIRU1BIHNjMTsKKwlDUkVBVEUgVEFCTEUgc2MxLnQxKGlkIGlu dCk7CisJQ1JFQVRFIFRBQkxFIHNjMS5jaGlsZDEoaWQgaW50KTsKKwlDUkVBVEUgVEFCTEUgc2Mx LmNoaWxkMV8xKGlkIGludCk7CisJQ1JFQVRFIFRBQkxFIHNjMS5jaGlsZDFfMihpZCBpbnQpOwor CUNSRUFURSBUQUJMRSBzYzEuY2hpbGQyKGlkIGludCk7CispKTsKKworIyBUZXN0IDE6CisjIENy ZWF0ZSB0d28gcHVibGljYXRpb25zLCBvbmUgd2l0aCAiQUxMIFRBQkxFUyBFWENFUFQiLCBvdGhl ciB3aXRoICJGT1IgVEFCTEUiCisjIFRhYmxlcyBzcGVjaWZpZWQgaW4gIkVYQ0VQVCIgYW5kICJG T1IgVEFCTEUiIGFyZSBwYXJ0IG9mIHNhbWUgcGFydGl0aW9uIHRyZWUKKyRwdWJsaXNoZXItPnNh ZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCUlOU0VSVCBJTlRPIHNjMS50MSBWQUxVRVMgKDEp LCAoNTEpLCAoMTAxKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgQUxMIFRBQkxFUyBF WENFUFQgVEFCTEUgKHNjMS5jaGlsZDIpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gdHJ1ZSk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFIHNjMS5jaGlsZDFf MSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworKSk7Ciskc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMSBD T05ORUNUSU9OICckY29ubnN0cicgUFVCTElDQVRJT04gcHViMSwgcHViMjsiKTsKKworIyBDaGVj ayBmb3IgdGFibGVzeW5jCiskc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMo JHB1Ymxpc2hlciwgJ3N1YjEnKTsKK215ICRyZXN1bHQgPQorICAkc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjMS50MSBPUkRFUiBCWSBpZCIpOworaXMo ICRyZXN1bHQsIHFxKDEKKzUxKSwgJ2NoZWNrIGRhdGEgYWZ0ZXIgdGFibGVzeW5jJyk7CisKKyMg Q2hlY2sgZm9yIGluY3JlbWVudGFsIHN5bmMKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJJTlNFUlQgSU5UTyBzYzEudDEgVkFMVUVTICgxKSwgKDUxKSwgKDEwMSkiKTsKKyRz dWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHVibGlzaGVyLCAnc3ViMScp OworJHJlc3VsdCA9CisgICRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCAqIEZST00gc2MxLnQxIE9SREVSIEJZIGlkIik7CitpcyggJHJlc3VsdCwgcXEoMQorMQorNTEK KzUxKSwgJ2NoZWNrIGRhdGEgYWZ0ZXIgaW5jcmVtZW50YWwgc3luYycpOworCisjIGNsZWFudXAK KyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCURST1AgUFVCTElDQVRJ T04gcHViMSwgcHViMjsKKwlUUlVOQ0FURSBzYzEudDE7CispKTsKKyRzdWJzY3JpYmVyLT5zYWZl X3BzcWwoCisJJ3Bvc3RncmVzJywgcSgKKwlEUk9QIFNVQlNDUklQVElPTiBzdWIxOworCVRSVU5D QVRFIHNjMS50MTsKKykpOworCisjIFRlc3QgMjogQ3JlYXRlIHB1YmxpY2F0aW9uIHdpdGggRVhD RVBUIFRBQkxFIGxpc3QgaGF2aW5nIGFsbCBwYXJ0aXRpb25zIG9mCisjIHBhcnRpY3VsYXIgbGV2 ZWwKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCUlOU0VSVCBJTlRP IHNjMS50MSBWQUxVRVMgKDEpLCAoNTEpLCAoMTAxKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHVi MSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjMS5jaGlsZDIsIHNjMS5jaGlsZDEpIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CispKTsKKyRzdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIxIENPTk5F Q1RJT04gJyRjb25uc3RyJyBQVUJMSUNBVElPTiBwdWIxOyIpOworCisjIENoZWNrIGZvciB0YWJs ZXN5bmMKKyRzdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHVibGlzaGVy LCAnc3ViMScpOworJHJlc3VsdCA9CisgICRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCAqIEZST00gc2MxLnQxIE9SREVSIEJZIGlkIik7CitpcygkcmVzdWx0LCBxcSgp LCAnY2hlY2sgZGF0YSBhZnRlciB0YWJsZXN5bmMnKTsKKworIyBDaGVjayBmb3IgaW5jcmVtZW50 YWwgc3luYworJHB1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRP IHNjMS50MSBWQUxVRVMgKDEpLCAoNTEpLCAoMTAxKSIpOworJHN1YnNjcmliZXItPndhaXRfZm9y X3N1YnNjcmlwdGlvbl9zeW5jKCRwdWJsaXNoZXIsICdzdWIxJyk7CiskcmVzdWx0ID0KKyAgJHN1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzYzEudDEgT1JE RVIgQlkgaWQiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayBkYXRhIGFmdGVyIGluY3JlbWVu dGFsIHN5bmMnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQzLjAKCg== --000000000000ee2354064afe8dc3 Content-Type: application/octet-stream; name="v45-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Disposition: attachment; filename="v45-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlq6ggwk0 RnJvbSBjZGE3YWYyOTZjNjRkYjFjNmU1YzE0OTA2N2E5ODkzNTVlN2FmOTIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjggSmFuIDIwMjYgMTA6NDc6MDIgKzA1MzAKU3ViamVjdDogW1BBVENIIHY0NSAxLzJd IFNraXAgcHVibGlzaGluZyB0aGUgdGFibGVzIHNwZWNpZmllZCBpbiBFWENFUFQgVEFCTEUuCgpB IG5ldyAiRVhDRVBUIFRBQkxFIiBjbGF1c2UgZm9yIENSRUFURSBQVUJMSUNBVElPTiBhbGxvd3Mg b25lIG9yIG1vcmUKdGFibGVzIHRvIGJlIGV4Y2x1ZGVkLiBUaGUgcHVibGlzaGVyIHdpbGwgbm90 IHNlbmQgdGhlIGRhdGEgb2YgZXhjbHVkZWQKdGFibGVzIHRvIHRoZSBzdWJzY3JpYmVyLgoKVGhl IG5ldyBzeW50YXggYWxsb3dzIHNwZWNpZnlpbmcgZXhjbHVkZWQgcmVsYXRpb25zIHdoZW4gY3Jl YXRpbmcgYQpwdWJsaWNhdGlvbi4gRm9yIGV4YW1wbGU6CkNSRUFURSBQVUJMSUNBVElPTiBwdWIx IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodDEsdDIpOwoKQSBuZXcgY29sdW1uICJwcmV4 Y2VwdCIgaXMgYWRkZWQgdG8gdGFibGUgInBnX3B1YmxpY2F0aW9uX3JlbCIsIHRvIGZsYWcKdGhl IHJlbGF0aW9ucyB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgcHVibGlj YXRpb25zLgoKRm9yIEVYQ0VQVCBUQUJMRSBvbiBwYXJ0aXRpb24gdGFibGVzLCBleHRlbmRlZCBm ZXRjaF9yZW1vdGVfdGFibGVfaW5mbygpIHRvCmNvbXB1dGUgdGhlIGVmZmVjdGl2ZSBzZXQgb2Yg cmVsYXRpb25zIHVzZWQgZm9yIHRoZSBpbml0aWFsIENPUFkuIFdoZW4KZXhjbHVzaW9ucyBhcmUg cHJlc2VudCwgdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgY2FuIG5vIGxvbmdlciBiZSB1c2Vk CmRpcmVjdGx5OyBpbnN0ZWFkLCBkZXJpdmUgdGhlIGxpc3Qgb2Ygbm9uLWV4Y2x1ZGVkIGxlYWYg cGFydGl0aW9ucyBhbmQKY29tYmluZSB0aGVtIHdpdGggVU5JT04gQUxMLiBXaGVuIG5vIGV4Y2x1 c2lvbnMgZXhpc3QsIHJldGFpbiB0aGUgZXhpc3RpbmcKYmVoYXZpb3IgYW5kIGNvcHkgZnJvbSB0 aGUgcm9vdCByZWxhdGlvbiBhcyBiZWZvcmUuCkFsc28gdXBkYXRlZCB0aGUgYmVoYXZpb3VyIG9m IGluY3JlbWVudGFsIHN5bmMgZm9yIHBhcnRpdGlvbiB0YWJsZXMgYXMKcGVyIGFwcHJvYWNoIDEu CkFwcHJvYWNoIDEgaXMgZGlzY3Vzc2VkIGF0OgpodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9t ZXNzYWdlLWlkL0NBSnB5MHVEODFIUnJNWXI3Uy02QVY0VzJQdGJHS00tbmYyRDg5enNvTUhKOWpa c3NVZ0BtYWlsLmdtYWlsLmNvbQoKcGdfZHVtcCBpcyB1cGRhdGVkIGZvciB0aGUgbmV3IEVYQ0VQ VCBUQUJMRSBzeW50YXguCgpUaGUgcHNxbCBcZCBmYW1pbHkgb2YgY29tbWFuZHMgY2FuIG5vdyBk aXNwbGF5IGV4Y2x1ZGVkIHRhYmxlcy4KCkJ1bXAgY2F0YWxvZyB2ZXJzaW9uLgotLS0KIGRvYy9z cmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAxMCArCiBkb2Mvc3Jj L3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAgICAgICAgfCAgIDYgKy0KIGRvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwgICAgICB8ICA1OSArLQogZG9jL3NyYy9z Z21sL3JlZi9wc3FsLXJlZi5zZ21sICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgICAgfCA1NjAgKysrKysrKysrKysrKysr KystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgfCAxMDkg KystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jICAgICAgIHwgIDgz ICsrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgICA0 ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgICAgfCAgNDIg Ky0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgICB8IDE1MCAr KysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgIHwgMjAw ICsrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICB8 ICAyMSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgIHwg IDY4ICsrKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgICAgICAgICB8ICAz MCArCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgODcg KystCiBzcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgICAgICAgICAgICAgICAgfCAgMTIg Ky0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgNyAr CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggICAgICAgICAgfCAgMTcgKy0K IHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmggICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oICAgICB8ICAgNiArCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgICAgfCAgOTMgKystCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgICAgICAgICAgfCAgMzcgKy0KIHNyYy90 ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMSArCiAuLi4vdC8w MzdfcmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsICAgICAgICAgfCAzNTkgKysrKysrKysrKysK IHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiAy NyBmaWxlcyBjaGFuZ2VkLCAxODI3IGluc2VydGlvbnMoKyksIDE0NyBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdfcmVwX2NoYW5nZXNf ZXhjZXB0X3RhYmxlLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAppbmRleCAzMzIxOTM1NjVlMi4uNjAwZmVkOWY0 YzAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9jYXRhbG9ncy5zZ21sCkBAIC02NTcyLDYgKzY1NzIsMTYgQEAgU0NSQU0tU0hBLTI1NiQ8 cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFj ZWFibGU+JmwKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8cm93 PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNv bHVtbl9kZWZpbml0aW9uIj4KKyAgICAgIDxzdHJ1Y3RmaWVsZD5wcmV4Y2VwdDwvc3RydWN0Zmll bGQ+IDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAg ICBUcnVlIGlmIHRoZSB0YWJsZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBwdWJsaWNhdGlvbi4gU2Vl CisgICAgICAgPGxpbmsgbGlua2VuZD0ic3FsLWNyZWF0ZXB1YmxpY2F0aW9uLXBhcmFtcy1mb3It ZXhjZXB0LXRhYmxlIj48bGl0ZXJhbD5FWENFUFQgVEFCTEU8L2xpdGVyYWw+PC9saW5rPi4KKyAg ICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKwogICAgICA8cm93PgogICAgICAgPGVu dHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0 aW9uIj4KICAgICAgIDxzdHJ1Y3RmaWVsZD5wcnF1YWw8L3N0cnVjdGZpZWxkPiA8dHlwZT5wZ19u b2RlX3RyZWU8L3R5cGU+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNh dGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCA1 MDI4ZmU5YWYwOS4uYmNiNDczYzA3OGIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2Fs LXJlcGxpY2F0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24u c2dtbApAQCAtMTE2LDcgKzExNiwxMSBAQAogICAgPGxpdGVyYWw+Rk9SIFRBQkxFUyBJTiBTQ0hF TUE8L2xpdGVyYWw+LCA8bGl0ZXJhbD5GT1IgQUxMIFRBQkxFUzwvbGl0ZXJhbD4sCiAgICBvciA8 bGl0ZXJhbD5GT1IgQUxMIFNFUVVFTkNFUzwvbGl0ZXJhbD4uIFVubGlrZSB0YWJsZXMsIHNlcXVl bmNlcyBjYW4gYmUKICAgIHN5bmNocm9uaXplZCBhdCBhbnkgdGltZS4gRm9yIG1vcmUgaW5mb3Jt YXRpb24sIHNlZQotICAgPHhyZWYgbGlua2VuZD0ibG9naWNhbC1yZXBsaWNhdGlvbi1zZXF1ZW5j ZXMiLz4uCisgICA8eHJlZiBsaW5rZW5kPSJsb2dpY2FsLXJlcGxpY2F0aW9uLXNlcXVlbmNlcyIv Pi4gV2hlbiBhIHB1YmxpY2F0aW9uIGlzCisgICBjcmVhdGVkIHdpdGggPGxpdGVyYWw+Rk9SIEFM TCBUQUJMRVM8L2xpdGVyYWw+LCBhIHRhYmxlIG9yIHNldCBvZiB0YWJsZXMgY2FuCisgICBiZSBl eHBsaWNpdGx5IGV4Y2x1ZGVkIGZyb20gcHVibGljYXRpb24gdXNpbmcgdGhlCisgICA8bGluayBs aW5rZW5kPSJzcWwtY3JlYXRlcHVibGljYXRpb24tcGFyYW1zLWZvci1leGNlcHQtdGFibGUiPjxs aXRlcmFsPkVYQ0VQVCBUQUJMRTwvbGl0ZXJhbD48L2xpbms+CisgICBjbGF1c2UuCiAgIDwvcGFy YT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1Ymxp Y2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCmlu ZGV4IDZlZmJiOTE1Y2VjLi40MzZlN2Q2OTRhMyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Jl Zi9jcmVhdGVfcHVibGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9w dWJsaWNhdGlvbi5zZ21sCkBAIC0zMiwxMiArMzIsMTYgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4KIAogPHBocmFz ZT5hbmQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX2FsbF9vYmpl Y3Q8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CiAKLSAgICBBTEwgVEFCTEVTCisg ICAgQUxMIFRBQkxFUyBbIEVYQ0VQVCBbIFRBQkxFIF0gKCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+ZXhjZXB0X3RhYmxlX29iamVjdDwvcmVwbGFjZWFibGU+IFssIC4uLiBdICkgXQog ICAgIEFMTCBTRVFVRU5DRVMKIAogPHBocmFzZT5hbmQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPnRhYmxlX2FuZF9jb2x1bW5zPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CiAKICAg ICBbIE9OTFkgXSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVw bGFjZWFibGU+IFsgKiBdIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1u X25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApIF0gWyBXSEVSRSAoIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gKSBdCisKKzxwaHJhc2U+ YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leGNlcHRfdGFibGVfb2JqZWN0PC9y ZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisKKyAgICBbIE9OTFkgXSA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdCiA8L3N5bm9wc2lz PgogIDwvcmVmc3lub3BzaXNkaXY+CiAKQEAgLTE2NCw3ICsxNjgsOCBAQCBDUkVBVEUgUFVCTElD QVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgog ICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CiAgICAgICBNYXJrcyB0aGUgcHVibGljYXRpb24g YXMgb25lIHRoYXQgcmVwbGljYXRlcyBjaGFuZ2VzIGZvciBhbGwgdGFibGVzIGluCi0gICAgICB0 aGUgZGF0YWJhc2UsIGluY2x1ZGluZyB0YWJsZXMgY3JlYXRlZCBpbiB0aGUgZnV0dXJlLgorICAg ICAgdGhlIGRhdGFiYXNlLCBpbmNsdWRpbmcgdGFibGVzIGNyZWF0ZWQgaW4gdGhlIGZ1dHVyZS4g VGFibGVzIGxpc3RlZCBpbgorICAgICAgRVhDRVBUIFRBQkxFIGFyZSBleGNsdWRlZCBmcm9tIHRo ZSBwdWJsaWNhdGlvbi4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxp c3RlbnRyeT4KQEAgLTE4NCw2ICsxODksMzkgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4KICAgICA8L2xpc3RpdGVt PgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9InNxbC1jcmVhdGVw dWJsaWNhdGlvbi1wYXJhbXMtZm9yLWV4Y2VwdC10YWJsZSI+CisgICAgPHRlcm0+PGxpdGVyYWw+ RVhDRVBUIFRBQkxFPC9saXRlcmFsPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJh PgorICAgICAgVGhpcyBjbGF1c2Ugc3BlY2lmaWVzIGEgbGlzdCBvZiB0YWJsZXMgdG8gYmUgZXhj bHVkZWQgZnJvbSB0aGUKKyAgICAgIHB1YmxpY2F0aW9uLgorICAgICA8L3BhcmE+CisgICAgIDxw YXJhPgorICAgICAgRm9yIGluaGVyaXRlZCB0YWJsZXMsIGlmIDxsaXRlcmFsPk9OTFk8L2xpdGVy YWw+IGlzIHNwZWNpZmllZCBiZWZvcmUgdGhlCisgICAgICB0YWJsZSBuYW1lLCBvbmx5IHRoYXQg dGFibGUgaXMgZXhjbHVkZWQgZnJvbSB0aGUgcHVibGljYXRpb24uIElmCisgICAgICA8bGl0ZXJh bD5PTkxZPC9saXRlcmFsPiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgdGFibGUgYW5kIGFsbCBpdHMg ZGVzY2VuZGFudAorICAgICAgdGFibGVzIChpZiBhbnkpIGFyZSBleGNsdWRlZC4gT3B0aW9uYWxs eSwgPGxpdGVyYWw+KjwvbGl0ZXJhbD4gY2FuIGJlCisgICAgICBzcGVjaWZpZWQgYWZ0ZXIgdGhl IHRhYmxlIG5hbWUgdG8gZXhwbGljaXRseSBpbmRpY2F0ZSB0aGF0IGRlc2NlbmRhbnQKKyAgICAg IHRhYmxlcyBhcmUgZXhjbHVkZWQuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBG b3IgcGFydGl0aW9uZWQgdGFibGVzLCBpZiBhIHRhYmxlIGlzIHNwZWNpZmllZCBpbiBFWENFUFQg VEFCTEUsIHRoYXQKKyAgICAgIHRhYmxlIGFuZCBhbGwgb2YgaXRzIHBhcnRpdGlvbnMgKHRoYXQg aXMsIHRoZSBlbnRpcmUgcGFydGl0aW9uIHN1YnRyZWUKKyAgICAgIHJvb3RlZCBhdCB0aGF0IHRh YmxlKSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgcHVibGljYXRpb24uCisgICAgIDwvcGFyYT4KKyAg ICAgPHBhcmE+CisgICAgICBUaGVyZSBjYW4gYmUgYSBjYXNlIHdoZXJlIGEgc3Vic2NyaXB0aW9u IGluY2x1ZGVzIG11bHRpcGxlIHB1YmxpY2F0aW9ucy4KKyAgICAgIEluIHN1Y2ggYSBjYXNlLCBh IHRhYmxlIG9yIHBhcnRpdGlvbiB0aGF0IGlzIGluY2x1ZGVkIGluIG9uZSBwdWJsaWNhdGlvbgor ICAgICAgYW5kIGxpc3RlZCBpbiB0aGUgPGxpdGVyYWw+RVhDRVBUIFRBQkxFPC9saXRlcmFsPiBj bGF1c2Ugb2YgYW5vdGhlciBpcworICAgICAgY29uc2lkZXJlZCBpbmNsdWRlZCBmb3IgcmVwbGlj YXRpb24uCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBTdWJzY3JpYmluZyB0byBt dWx0aXBsZSBwdWJsaWNhdGlvbnMgd2l0aCBkaWZmZXJlbnQKKyAgICAgIDxsaXRlcmFsPkVYQ0VQ VCBUQUJMRTwvbGl0ZXJhbD4gbGlzdHMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJs aXN0ZW50cnkgaWQ9InNxbC1jcmVhdGVwdWJsaWNhdGlvbi1wYXJhbXMtd2l0aCI+CiAgICAgPHRl cm0+PGxpdGVyYWw+V0lUSCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNh dGlvbl9wYXJhbWV0ZXI8L3JlcGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKTwvbGl0ZXJhbD48L3Rlcm0+CiAg ICAgPGxpc3RpdGVtPgpAQCAtNDg5LDYgKzUyNywyMyBAQCBDUkVBVEUgUFVCTElDQVRJT04gYWxs X3NlcXVlbmNlcyBGT1IgQUxMIFNFUVVFTkNFUzsKICAgIGFsbCBzZXF1ZW5jZXMgZm9yIHN5bmNo cm9uaXphdGlvbjoKIDxwcm9ncmFtbGlzdGluZz4KIENSRUFURSBQVUJMSUNBVElPTiBhbGxfdGFi bGVzX3NlcXVlbmNlcyBGT1IgQUxMIFRBQkxFUywgQUxMIFNFUVVFTkNFUzsKKzwvcHJvZ3JhbWxp c3Rpbmc+CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIENyZWF0ZSBhIHB1YmxpY2F0aW9uIHRo YXQgcHVibGlzaGVzIGFsbCBjaGFuZ2VzIGluIGFsbCB0YWJsZXMgZXhjZXB0CisgICA8c3RydWN0 bmFtZT51c2Vyczwvc3RydWN0bmFtZT4gYW5kIDxzdHJ1Y3RuYW1lPmRlcGFydG1lbnRzPC9zdHJ1 Y3RuYW1lPjoKKzxwcm9ncmFtbGlzdGluZz4KK0NSRUFURSBQVUJMSUNBVElPTiBhbGxfdGFibGVz X2V4Y2VwdCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKHVzZXJzLCBkZXBhcnRtZW50cyk7Cis8L3By b2dyYW1saXN0aW5nPgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBDcmVhdGUgYSBwdWJsaWNh dGlvbiB0aGF0IHB1Ymxpc2hlcyBhbGwgc2VxdWVuY2VzIGZvciBzeW5jaHJvbml6YXRpb24sIGFu ZAorICAgYWxsIGNoYW5nZXMgaW4gYWxsIHRhYmxlcyBleGNlcHQgPHN0cnVjdG5hbWU+dXNlcnM8 L3N0cnVjdG5hbWU+IGFuZAorICAgPHN0cnVjdG5hbWU+ZGVwYXJ0bWVudHM8L3N0cnVjdG5hbWU+ OgorPHByb2dyYW1saXN0aW5nPgorQ1JFQVRFIFBVQkxJQ0FUSU9OIGFsbF9zZXF1ZW5jZXNfdGFi bGVzX2V4Y2VwdCBGT1IgQUxMIFNFUVVFTkNFUywgQUxMIFRBQkxFUyBFWENFUFQgKHVzZXJzLCBk ZXBhcnRtZW50cyk7CiA8L3Byb2dyYW1saXN0aW5nPgogICA8L3BhcmE+CiAgPC9yZWZzZWN0MT4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvcHNxbC1yZWYuc2dtbAppbmRleCA4YjFkOTQ4YmEwNS4uMTA0NWJjNmEwMmMgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL3BzcWwtcmVmLnNnbWwKQEAgLTIxMDMsOCArMjEwMyw5IEBAIFNFTEVDVCAkMSBccGFyc2Ug c3RtdDEKICAgICAgICAgbGlzdGVkLgogICAgICAgICBJZiA8bGl0ZXJhbD54PC9saXRlcmFsPiBp cyBhcHBlbmRlZCB0byB0aGUgY29tbWFuZCBuYW1lLCB0aGUgcmVzdWx0cwogICAgICAgICBhcmUg ZGlzcGxheWVkIGluIGV4cGFuZGVkIG1vZGUuCi0gICAgICAgIElmIDxsaXRlcmFsPis8L2xpdGVy YWw+IGlzIGFwcGVuZGVkIHRvIHRoZSBjb21tYW5kIG5hbWUsIHRoZSB0YWJsZXMgYW5kCi0gICAg ICAgIHNjaGVtYXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggcHVibGljYXRpb24gYXJlIHNob3duIGFz IHdlbGwuCisgICAgICAgIElmIDxsaXRlcmFsPis8L2xpdGVyYWw+IGlzIGFwcGVuZGVkIHRvIHRo ZSBjb21tYW5kIG5hbWUsIHRoZSB0YWJsZXMsCisgICAgICAgIGV4Y2x1ZGVkIHRhYmxlcywgYW5k IHNjaGVtYXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggcHVibGljYXRpb24gYXJlIHNob3duCisgICAg ICAgIGFzIHdlbGwuCiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4KICAgICAg IDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmluZGV4IDlh NDc5MWM1NzNlLi5kYTc0NmIyMTQ2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24u YwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRpb24uaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uX25hbWVzcGFjZS5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJz Y3JpcHRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21t YW5kcy9wdWJsaWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCkBAIC0zNjYsOSAr MzY3LDExIEBAIEdldFRvcE1vc3RBbmNlc3RvckluUHVibGljYXRpb24oT2lkIHB1Ym9pZCwgTGlz dCAqYW5jZXN0b3JzLCBpbnQgKmFuY2VzdG9yX2xldmVsCiAJZm9yZWFjaChsYywgYW5jZXN0b3Jz KQogCXsKIAkJT2lkCQkJYW5jZXN0b3IgPSBsZmlyc3Rfb2lkKGxjKTsKLQkJTGlzdAkgICAqYXB1 YmlkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yKTsKKwkJTGlzdAkgICAqYXB1 YmlkcyA9IE5JTDsKIAkJTGlzdAkgICAqYXNjaGVtYVB1YmlkcyA9IE5JTDsKIAorCQlHZXRSZWxh dGlvblB1YmxpY2F0aW9ucyhhbmNlc3RvciwgJmFwdWJpZHMsIE5VTEwpOworCiAJCWxldmVsKys7 CiAKIAkJaWYgKGxpc3RfbWVtYmVyX29pZChhcHViaWRzLCBwdWJvaWQpKQpAQCAtNDgyLDYgKzQ4 NSw4IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0aW9uUmVs SW5mbyAqcHJpLAogCQlPYmplY3RJZEdldERhdHVtKHB1YmlkKTsKIAl2YWx1ZXNbQW51bV9wZ19w dWJsaWNhdGlvbl9yZWxfcHJyZWxpZCAtIDFdID0KIAkJT2JqZWN0SWRHZXREYXR1bShyZWxpZCk7 CisJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3ByZXhjZXB0IC0gMV0gPQorCQlCb29s R2V0RGF0dW0ocHJpLT5leGNlcHQpOwogCiAJLyogQWRkIHF1YWxpZmljYXRpb25zLCBpZiBhdmFp bGFibGUgKi8KIAlpZiAocHJpLT53aGVyZUNsYXVzZSAhPSBOVUxMKQpAQCAtNzQ5LDM4ICs3NTQs NTggQEAgcHVibGljYXRpb25fYWRkX3NjaGVtYShPaWQgcHViaWQsIE9pZCBzY2hlbWFpZCwgYm9v bCBpZl9ub3RfZXhpc3RzKQogCXJldHVybiBteXNlbGY7CiB9CiAKLS8qIEdldHMgbGlzdCBvZiBw dWJsaWNhdGlvbiBvaWRzIGZvciBhIHJlbGF0aW9uICovCi1MaXN0ICoKLUdldFJlbGF0aW9uUHVi bGljYXRpb25zKE9pZCByZWxpZCkKKy8qCisgKiBHZXQgdGhlIGxpc3Qgb2YgcHVibGljYXRpb24g b2lkcyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpZWQgcmVsYXRpb24uCisgKgorICogUGFyYW1l dGVyICdwdWJpZHMnIHJldHVybnMgdGhlIE9pZHMgb2YgdGhlIHB1YmxpY2F0aW9ucyB0aGUgcmVs YXRpb24gaXMgcGFydAorICogb2YuIFBhcmFtZXRlciAnZXhjZXB0X3B1YmlkcycgcmV0dXJucyB0 aGUgT2lkcyBvZiBwdWJsaWNhdGlvbnMgdGhlIHJlbGF0aW9uCisgKiBpcyBleGNsdWRlZCBmcm9t LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZSByZWxhdGlvbiBpcyBw YXJ0IG9mIGFueSBwdWJsaWNhdGlvbi4KKyAqLworYm9vbAorR2V0UmVsYXRpb25QdWJsaWNhdGlv bnMoT2lkIHJlbGlkLCBMaXN0ICoqcHViaWRzLCBMaXN0ICoqZXhjZXB0X3B1YmlkcykKIHsKLQlM aXN0CSAgICpyZXN1bHQgPSBOSUw7CiAJQ2F0Q0xpc3QgICAqcHVicmVsbGlzdDsKLQlpbnQJCQlp OworCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAKIAkvKiBGaW5kIGFsbCBwdWJsaWNhdGlvbnMgYXNz b2NpYXRlZCB3aXRoIHRoZSByZWxhdGlvbi4gKi8KIAlwdWJyZWxsaXN0ID0gU2VhcmNoU3lzQ2Fj aGVMaXN0MShQVUJMSUNBVElPTlJFTE1BUCwKIAkJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKHJl bGlkKSk7Ci0JZm9yIChpID0gMDsgaSA8IHB1YnJlbGxpc3QtPm5fbWVtYmVyczsgaSsrKQorCWZv ciAoaW50IGkgPSAwOyBpIDwgcHVicmVsbGlzdC0+bl9tZW1iZXJzOyBpKyspCiAJewogCQlIZWFw VHVwbGUJdHVwID0gJnB1YnJlbGxpc3QtPm1lbWJlcnNbaV0tPnR1cGxlOwotCQlPaWQJCQlwdWJp ZCA9ICgoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApKS0+cHJwdWJpZDsK KwkJRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwgcHVicmVsID0gKEZvcm1fcGdfcHVibGljYXRpb25f cmVsKSBHRVRTVFJVQ1QodHVwKTsKKwkJT2lkCQkJcHViaWQgPSBwdWJyZWwtPnBycHViaWQ7CiAK LQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCBwdWJpZCk7CisJCWlmIChwdWJyZWwtPnBy ZXhjZXB0KQorCQl7CisJCQlpZiAoZXhjZXB0X3B1YmlkcykKKwkJCQkqZXhjZXB0X3B1YmlkcyA9 IGxhcHBlbmRfb2lkKCpleGNlcHRfcHViaWRzLCBwdWJpZCk7CisJCX0KKwkJZWxzZQorCQl7CisJ CQlpZiAocHViaWRzKQorCQkJCSpwdWJpZHMgPSBsYXBwZW5kX29pZCgqcHViaWRzLCBwdWJpZCk7 CisJCQlmb3VuZCA9IHRydWU7CisJCX0KIAl9CiAKIAlSZWxlYXNlU3lzQ2FjaGVMaXN0KHB1YnJl bGxpc3QpOwogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gZm91bmQ7CiB9CiAKIC8qCi0gKiBH ZXRzIGxpc3Qgb2YgcmVsYXRpb24gb2lkcyBmb3IgYSBwdWJsaWNhdGlvbi4KKyAqIEludGVybmFs IGZ1bmN0aW9uIHRvIGdldCB0aGUgbGlzdCBvZiByZWxhdGlvbiBPaWRzIGZvciBhIHB1YmxpY2F0 aW9uLgogICoKLSAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBGT1IgVEFCTEUgcHVibGljYXRp b25zLCB0aGUgRk9SIEFMTCBUQUJMRVMvU0VRVUVOQ0VTCi0gKiBzaG91bGQgdXNlIEdldEFsbFB1 YmxpY2F0aW9uUmVsYXRpb25zKCkuCisgKiBJZiBleGNlcHRfZmxhZyBpcyB0cnVlLCByZXR1cm5z IHRoZSBsaXN0IG9mIHJlbGF0aW9ucyBzcGVjaWZpZWQgaW4gdGhlCisgKiBFWENFUFQgY2xhdXNl IG9mIHRoZSBwdWJsaWNhdGlvbjsgb3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBsaXN0IG9mIHJlbGF0 aW9ucworICogaW5jbHVkZWQgaW4gdGhlIHB1YmxpY2F0aW9uLgogICovCi1MaXN0ICoKLUdldFB1 YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0 b3B0KQorc3RhdGljIExpc3QgKgorZ2V0X3B1YmxpY2F0aW9uX3JlbGF0aW9ucyhPaWQgcHViaWQs IFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKKwkJCQkJCSAgYm9vbCBleGNlcHRfZmxh ZykKIHsKIAlMaXN0CSAgICpyZXN1bHQ7CiAJUmVsYXRpb24JcHVicmVsc3JlbDsKQEAgLTgwNSw4 ICs4MzAsMTAgQEAgR2V0UHVibGljYXRpb25SZWxhdGlvbnMoT2lkIHB1YmlkLCBQdWJsaWNhdGlv blBhcnRPcHQgcHViX3BhcnRvcHQpCiAJCUZvcm1fcGdfcHVibGljYXRpb25fcmVsIHB1YnJlbDsK IAogCQlwdWJyZWwgPSAoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApOwot CQlyZXN1bHQgPSBHZXRQdWJQYXJ0aXRpb25PcHRpb25SZWxhdGlvbnMocmVzdWx0LCBwdWJfcGFy dG9wdCwKLQkJCQkJCQkJCQkJCXB1YnJlbC0+cHJyZWxpZCk7CisKKwkJaWYgKGV4Y2VwdF9mbGFn ID09IHB1YnJlbC0+cHJleGNlcHQpCisJCQlyZXN1bHQgPSBHZXRQdWJQYXJ0aXRpb25PcHRpb25S ZWxhdGlvbnMocmVzdWx0LCBwdWJfcGFydG9wdCwKKwkJCQkJCQkJCQkJCQlwdWJyZWwtPnBycmVs aWQpOwogCX0KIAogCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CkBAIC04MTksNiArODQ2LDI0IEBA IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1 Yl9wYXJ0b3B0KQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBSZXR1cm4gdGhlIGxpc3Qg b2YgcmVsYXRpb24gT2lkcyBmb3IgYSBwdWJsaWNhdGlvbi4KKyAqCisgKiBGb3IgYSBGT1IgVEFC TEUgcHVibGljYXRpb24sIHRoaXMgcmV0dXJucyB0aGUgbGlzdCBvZiByZWxhdGlvbnMgZXhwbGlj aXRseQorICogaW5jbHVkZWQgaW4gdGhlIHB1YmxpY2F0aW9uLgorICoKKyAqIFB1YmxpY2F0aW9u cyBkZWNsYXJlZCB3aXRoIEZPUiBBTEwgVEFCTEVTIHNob3VsZCB1c2UKKyAqIEdldEFsbFB1Ymxp Y2F0aW9uUmVsYXRpb25zKCkgdG8gb2J0YWluIHRoZSBjb21wbGV0ZSBzZXQgb2YgdGFibGVzIGNv dmVyZWQgYnkKKyAqIHRoZSBwdWJsaWNhdGlvbi4KKyAqLworTGlzdCAqCitHZXRQdWJsaWNhdGlv bkluY2x1ZGVkUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0 b3B0KQoreworCUFzc2VydCghR2V0UHVibGljYXRpb24ocHViaWQpLT5hbGx0YWJsZXMpOworCisJ cmV0dXJuIGdldF9wdWJsaWNhdGlvbl9yZWxhdGlvbnMocHViaWQsIHB1Yl9wYXJ0b3B0LCBmYWxz ZSk7Cit9CisKIC8qCiAgKiBHZXRzIGxpc3Qgb2YgcHVibGljYXRpb24gb2lkcyBmb3IgcHVibGlj YXRpb25zIG1hcmtlZCBhcyBGT1IgQUxMIFRBQkxFUy4KICAqLwpAQCAtODU2LDYgKzkwMSw0NSBA QCBHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnModm9pZCkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisv KgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwYXJ0aXRpb25lZCB0YWJsZSBpcyBlZmZl Y3RpdmVseSBleGNsdWRlZAorICogYnkgdGhlIEVYQ0VQVCBsaXN0LgorICoKKyAqIEEgcmVsYXRp b24gaXMgY29uc2lkZXJlZCBleGNsdWRlZCBpZjoKKyAqICAxKSBJdCBpcyBleHBsaWNpdGx5IHBy ZXNlbnQgaW4gZXhjZXB0bGlzdCwgb3IKKyAqICAyKSBBbGwgb2YgaXRzIGxlYWYgcGFydGl0aW9u cyBhcmUgcHJlc2VudCBpbiBleGNlcHRsaXN0LgorICovCitzdGF0aWMgYm9vbAorcmVsYXRpb25f aXNfZWZmZWN0aXZlbHlfZXhjbHVkZWQoT2lkIHJlbGlkLCBMaXN0ICpleGNlcHRsaXN0KQorewor CUxpc3QJICAgKmxlYWZ0YWJsZXMgPSBOSUw7CisKKwlpZiAoZXhjZXB0bGlzdCA9PSBOSUwpCisJ CXJldHVybiBmYWxzZTsKKworCS8qIEV4cGxpY2l0bHkgZXhjbHVkZWQgKi8KKwlpZiAobGlzdF9t ZW1iZXJfb2lkKGV4Y2VwdGxpc3QsIHJlbGlkKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBHZXQg YWxsIGxlYWYgcGFydGl0aW9ucyBvZiByZWxpZCAqLworCWxlYWZ0YWJsZXMgPSBHZXRQdWJQYXJ0 aXRpb25PcHRpb25SZWxhdGlvbnMobGVhZnRhYmxlcywKKwkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9O X1BBUlRfTEVBRiwKKwkJCQkJCQkJCQkJCXJlbGlkKTsKKworCS8qCisJICogSWYgYW55IGxlYWYg aXMgTk9UIHByZXNlbnQgaW4gZXhjZXB0bGlzdCwgdGhlbiB0aGUgcmVsYXRpb24gaXMgbm90CisJ ICogZnVsbHkgZXhjbHVkZWQuCisJICovCisJZm9yZWFjaF9vaWQobGVhZnJlbGlkLCBsZWFmdGFi bGVzKQorCXsKKwkJaWYgKCFsaXN0X21lbWJlcl9vaWQoZXhjZXB0bGlzdCwgbGVhZnJlbGlkKSkK KwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBBbGwgbGVhdmVzIGFyZSBleGNsdWRlZCAqLwor CXJldHVybiB0cnVlOworfQorCiAvKgogICogR2V0cyBsaXN0IG9mIGFsbCByZWxhdGlvbnMgcHVi bGlzaGVkIGJ5IEZPUiBBTEwgVEFCTEVTL1NFUVVFTkNFUwogICogcHVibGljYXRpb24ocykuCkBA IC04NjQsMTggKzk0OCwyOSBAQCBHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnModm9pZCkKICAqIHBh cnRpdGlvbmVkIHRhYmxlcywgd2UgbXVzdCBleGNsdWRlIHBhcnRpdGlvbnMgaW4gZmF2b3Igb2Yg aW5jbHVkaW5nIHRoZQogICogcm9vdCBwYXJ0aXRpb25lZCB0YWJsZXMuIFRoaXMgaXMgbm90IGFw cGxpY2FibGUgdG8gRk9SIEFMTCBTRVFVRU5DRVMKICAqIHB1YmxpY2F0aW9uLgorICoKKyAqIEZv ciBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uLCB0aGUgcmV0dXJuZWQgbGlzdCBleGNsdWRl cyB0YWJsZXMgbWVudGlvbmVkCisgKiBpbiBFWENFUFQgVEFCTEUgY2xhdXNlLgogICovCiBMaXN0 ICoKLUdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKGNoYXIgcmVsa2luZCwgYm9vbCBwdWJ2aWFy b290KQorR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoUHVibGljYXRpb24gKnB1YiwgY2hhciBy ZWxraW5kKQogewogCVJlbGF0aW9uCWNsYXNzUmVsOwogCVNjYW5LZXlEYXRhIGtleVsxXTsKIAlU YWJsZVNjYW5EZXNjIHNjYW47CiAJSGVhcFR1cGxlCXR1cGxlOwogCUxpc3QJICAgKnJlc3VsdCA9 IE5JTDsKKwlMaXN0CSAgICpleGNlcHRsaXN0ID0gTklMOworCWJvb2wJCXB1YnZpYXJvb3QgPSBw dWItPnB1YnZpYXJvb3Q7CisJT2lkCQkJcHViaWQgPSBwdWItPm9pZDsKIAogCUFzc2VydCghKHJl bGtpbmQgPT0gUkVMS0lORF9TRVFVRU5DRSAmJiBwdWJ2aWFyb290KSk7CiAKKwlpZiAocmVsa2lu ZCA9PSBSRUxLSU5EX1JFTEFUSU9OKQorCQlleGNlcHRsaXN0ID0gZ2V0X3B1YmxpY2F0aW9uX3Jl bGF0aW9ucyhwdWJpZCwgcHVidmlhcm9vdCA/CisJCQkJCQkJCQkJCSAgIFBVQkxJQ0FUSU9OX1BB UlRfQUxMIDoKKwkJCQkJCQkJCQkJICAgUFVCTElDQVRJT05fUEFSVF9MRUFGLCB0cnVlKTsKKwog CWNsYXNzUmVsID0gdGFibGVfb3BlbihSZWxhdGlvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CiAKIAlTY2FuS2V5SW5pdCgma2V5WzBdLApAQCAtODkxLDcgKzk4Niw4IEBAIEdldEFsbFB1 YmxpY2F0aW9uUmVsYXRpb25zKGNoYXIgcmVsa2luZCwgYm9vbCBwdWJ2aWFyb290KQogCQlPaWQJ CQlyZWxpZCA9IHJlbEZvcm0tPm9pZDsKIAogCQlpZiAoaXNfcHVibGlzaGFibGVfY2xhc3MocmVs aWQsIHJlbEZvcm0pICYmCi0JCQkhKHJlbEZvcm0tPnJlbGlzcGFydGl0aW9uICYmIHB1YnZpYXJv b3QpKQorCQkJIShyZWxGb3JtLT5yZWxpc3BhcnRpdGlvbiAmJiBwdWJ2aWFyb290KSAmJgorCQkJ IWxpc3RfbWVtYmVyX29pZChleGNlcHRsaXN0LCByZWxpZCkpCiAJCQlyZXN1bHQgPSBsYXBwZW5k X29pZChyZXN1bHQsIHJlbGlkKTsKIAl9CiAKQEAgLTkxMiw3ICsxMDA4LDggQEAgR2V0QWxsUHVi bGljYXRpb25SZWxhdGlvbnMoY2hhciByZWxraW5kLCBib29sIHB1YnZpYXJvb3QpCiAJCQlPaWQJ CQlyZWxpZCA9IHJlbEZvcm0tPm9pZDsKIAogCQkJaWYgKGlzX3B1Ymxpc2hhYmxlX2NsYXNzKHJl bGlkLCByZWxGb3JtKSAmJgotCQkJCSFyZWxGb3JtLT5yZWxpc3BhcnRpdGlvbikKKwkJCQkhcmVs Rm9ybS0+cmVsaXNwYXJ0aXRpb24gJiYKKwkJCQkhcmVsYXRpb25faXNfZWZmZWN0aXZlbHlfZXhj bHVkZWQocmVsaWQsIGV4Y2VwdGxpc3QpKQogCQkJCXJlc3VsdCA9IGxhcHBlbmRfb2lkKHJlc3Vs dCwgcmVsaWQpOwogCQl9CiAKQEAgLTExMTYsNiArMTIxMyw0MTUgQEAgR2V0UHVibGljYXRpb25C eU5hbWUoY29uc3QgY2hhciAqcHVibmFtZSwgYm9vbCBtaXNzaW5nX29rKQogCXJldHVybiBPaWRJ c1ZhbGlkKG9pZCkgPyBHZXRQdWJsaWNhdGlvbihvaWQpIDogTlVMTDsKIH0KIAorLyogSGVscGVy OiBDaGVjayBzeXNjYWNoZSBmb3IgcHJleGNlcHQgZmxhZyAqLworYm9vbAoraXNfcmVsYXRpb25f ZXhjbHVkZWQoT2lkIHJlbGlkLCBPaWQgcHViaWQpCit7CisJSGVhcFR1cGxlCXR1cDsKKwlib29s CQlyZXN1bHQgPSBmYWxzZTsKKworCXR1cCA9IFNlYXJjaFN5c0NhY2hlMihQVUJMSUNBVElPTlJF TE1BUCwgT2JqZWN0SWRHZXREYXR1bShyZWxpZCksIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsK KwlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCXsKKwkJRm9ybV9wZ19wdWJsaWNhdGlvbl9y ZWwgcHJmb3JtID0gKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKKwor CQlyZXN1bHQgPSBwcmZvcm0tPnByZXhjZXB0OworCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwl9 CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2hhc19hbnlfZXhjZXB0 aW9uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwdWJsaWNhdGlvbiBPSUQgaGFz IGF0IGxlYXN0IG9uZSBlbnRyeSBpbgorICogcGdfcHVibGljYXRpb25fcmVsIG1hcmtlZCBhcyBh biBleGNlcHRpb24gKHByZXhjZXB0ID0gdHJ1ZSkuCisgKi8KK2Jvb2wKK3B1YmxpY2F0aW9uX2hh c19hbnlfZXhjZXB0aW9uKE9pZCBwdWJpZCkKK3sKKwlSZWxhdGlvbglwdWJSZWw7CisJU2Nhbktl eURhdGEgc2tleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXA7CisJYm9vbAkJ Zm91bmQgPSBmYWxzZTsKKworCS8qIE9wZW4gcGdfcHVibGljYXRpb25fcmVsIHdpdGggQWNjZXNz U2hhcmVMb2NrICovCisJcHViUmVsID0gdGFibGVfb3BlbihQdWJsaWNhdGlvblJlbFJlbGF0aW9u SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIExvb2sgdXAgYnkgcHVibGljYXRpb24g T0lELiBVc2luZyB0aGUgaW5kZXggb24gKHBycHViaWQpIGlzIGhpZ2hseQorCSAqIGVmZmljaWVu dC4KKwkgKi8KKwlTY2FuS2V5SW5pdCgmc2tleSwKKwkJCQlBbnVtX3BnX3B1YmxpY2F0aW9uX3Jl bF9wcnB1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmpl Y3RJZEdldERhdHVtKHB1YmlkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHB1YlJl bCwKKwkJCQkJCQkgIFB1YmxpY2F0aW9uUmVsUHJyZWxpZFBycHViaWRJbmRleElkLAorCQkJCQkJ CSAgdHJ1ZSwgTlVMTCwgMSwgJnNrZXkpOworCisJLyogV2Ugb25seSBuZWVkIHRvIGZpbmQgdGhl IGZpcnN0IG9jY3VycmVuY2Ugb2YgcHJleGNlcHQgPSB0cnVlICovCisJd2hpbGUgKEhlYXBUdXBs ZUlzVmFsaWQodHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlGb3JtX3BnX3B1 YmxpY2F0aW9uX3JlbCBwdWJyZWxmb3JtID0gKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRT VFJVQ1QodHVwKTsKKworCQlpZiAocHVicmVsZm9ybS0+cHJleGNlcHQpCisJCXsKKwkJCWZvdW5k ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsK Kwl0YWJsZV9jbG9zZShwdWJSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZm91bmQ7 Cit9CisKKy8qCisgKiBpc19yZWxpZF9wdWJsaXNoZWRfZXhwbGljaXRseQorICoKKyAqIENoZWNr cyBpZiB0aGUgZ2l2ZW4gcmVsYXRpb24gT0lEIGlzIGV4cGxpY2l0bHkgcGFydCBvZiB0aGUgcHVi bGljYXRpb24uCisgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSAnRk9SIFRBQkxFJyBzeW50YXgu CisgKi8KK3N0YXRpYyBib29sCitpc19yZWxpZF9wdWJsaXNoZWRfZXhwbGljaXRseShPaWQgcmVs aWQsIE9pZCBwdWJpZCkKK3sKKwkvKgorCSAqIFNlYXJjaCB0aGUgc3lzY2FjaGUgZm9yIHBnX3B1 YmxpY2F0aW9uX3JlbCB1c2luZyB0aGUgKHJlbGlkLCBwdWJpZCkKKwkgKiBpbmRleC4KKwkgKi8K KwlyZXR1cm4gU2VhcmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJ CQkgT2JqZWN0SWRHZXREYXR1bShyZWxpZCksCisJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKHB1 YmlkKSk7Cit9CisKKy8qCisgKiBpc19zY2hlbWFfcHVibGlzaGVkCisgKgorICogQ2hlY2tzIGlm IHRoZSBnaXZlbiBuYW1lc3BhY2UgT0lEIGlzIHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uJ3MKKyAq IHNjaGVtYSBsaXN0LiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSAnRk9SIFRBQkxFUyBJTiBTQ0hF TUEnIHN5bnRheC4KKyAqLworc3RhdGljIGJvb2wKK2lzX3NjaGVtYV9wdWJsaXNoZWQoT2lkIG5z cGlkLCBPaWQgcHViaWQpCit7CisJLyoKKwkgKiBTZWFyY2ggdGhlIHN5c2NhY2hlIGZvciBwZ19w dWJsaWNhdGlvbl9uYW1lc3BhY2UgdXNpbmcgdGhlIChuc3BpZCwKKwkgKiBwdWJpZCkgaW5kZXgu CisJICovCisJcmV0dXJuIFNlYXJjaFN5c0NhY2hlRXhpc3RzMihQVUJMSUNBVElPTk5BTUVTUEFD RU1BUCwKKwkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0obnNwaWQpLAorCQkJCQkJCQkgT2JqZWN0 SWRHZXREYXR1bShwdWJpZCkpOworfQorCisvKgorICogaXNfcmVsYXRpb25fb3JfYW5jZXN0b3Jf ZXhjbHVkZWQKKyAqCisgKiBDaGVjayBpZiB0aGUgcmVsYXRpb24gJ3JlbGlkJyBvciBhbnkgb2Yg aXRzIHBhcnRpdGlvbiBhbmNlc3RvcnMgYXJlCisgKiBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiB0 aGUgRVhDRVBUIGNsYXVzZSBvZiB0aGUgZ2l2ZW4gcHVibGljYXRpb24uCisgKi8KK3N0YXRpYyBi b29sCitpc19yZWxhdGlvbl9vcl9hbmNlc3Rvcl9leGNsdWRlZChPaWQgcmVsaWQsIE9pZCBwdWJp ZCkKK3sKKwlMaXN0CSAgICphbmNlc3RvcnM7CisJTGlzdENlbGwgICAqbGM7CisJYm9vbAkJaW5f ZXhjZXB0ID0gZmFsc2U7CisKKwkvKiBDaGVjayB0aGUgcmVsYXRpb24gaXRzZWxmIGZpcnN0ICov CisJaWYgKGlzX3JlbGF0aW9uX2V4Y2x1ZGVkKHJlbGlkLCBwdWJpZCkpCisJCXJldHVybiB0cnVl OworCisJLyogQ2hlY2sgdGhlIGluaGVyaXRhbmNlIGNoYWluICovCisJYW5jZXN0b3JzID0gZ2V0 X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOworCisJZm9yZWFjaChsYywgYW5jZXN0b3JzKQor CXsKKwkJT2lkCQkJYW5jZXN0b3IgPSBsZmlyc3Rfb2lkKGxjKTsKKworCQlpZiAoaXNfcmVsYXRp b25fZXhjbHVkZWQoYW5jZXN0b3IsIHB1YmlkKSkKKwkJeworCQkJaW5fZXhjZXB0ID0gdHJ1ZTsK KwkJCWJyZWFrOworCQl9CisJfQorCisJbGlzdF9mcmVlKGFuY2VzdG9ycyk7CisKKwlyZXR1cm4g aW5fZXhjZXB0OworfQorCisvKgorICogcGdfZ2V0X3B1YmxpY2F0aW9uX2VmZmVjdGl2ZV90YWJs ZXMKKyAqCisgKiBHaXZlbiBhIHJvb3QgcmVsYXRpb24gYW5kIGEgbGlzdCBvZiBwdWJsaWNhdGlv bnMsIGNhbGN1bGF0ZSB0aGUgc2V0IG9mCisgKiByZWxhdGlvbnMgdGhhdCBhcmUgZWZmZWN0aXZl bHkgcHVibGlzaGVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IKKyAqICJGT1IgQUxMIFRBQkxFUyIg cHVibGljYXRpb25zIHRoYXQgdXNlICJFWENFUFQgVEFCTEUiIGZpbHRlcnMuCisgKgorICogVGhl IGZ1bmN0aW9uIHJlc29sdmVzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBzZXQgb2YgYW5jZXN0b3Jz IHRoYXQgY292ZXIKKyAqIGFsbCBub24tZXhjbHVkZWQgbGVhZiBwYXJ0aXRpb25zLgorICovCitE YXR1bQorcGdfZ2V0X3B1YmxpY2F0aW9uX2VmZmVjdGl2ZV90YWJsZXMoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJTGlzdAkgICAqcmVzdWx0czsKKwor CWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlPaWQJCQlyb290X3JlbGlkID0gUEdfR0VU QVJHX09JRCgwKTsKKwkJQXJyYXlUeXBlICAqcHViX25hbWVzX2FycmF5ID0gUEdfR0VUQVJHX0FS UkFZVFlQRV9QKDEpOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJCUxpc3QJICAgKnB1 Yl9vaWRzID0gTklMOworCQlEYXR1bQkgICAqcHViX2RhdHVtczsKKwkJYm9vbAkgICAqcHViX251 bGxzOworCQlpbnQJCQlwdWJfY291bnQ7CisJCVR1cGxlRGVzYwl0dXBkZXNjOworCQlMaXN0CSAg ICpmaW5hbF9vdXRwdXQgPSBOSUw7CisJCWJvb2wJCWhhc19jbGVhbl9hbGxfdGFibGVzX3B1YiA9 IGZhbHNlOworCQlib29sCQloYXNfYW55X2V4Y2VwdCA9IGZhbHNlOworCQlMaXN0CSAgICpleGNl cHRfcHViX25hbWVzID0gTklMOworCQlPaWQJCQlleGNlcHRfcHViX2lkOworCisJCWZ1bmNjdHgg PSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKworCQlkZWNvbnN0cnVjdF9hcnJheShwdWJfbmFtZXNf YXJyYXksIFRFWFRPSUQsIC0xLCBmYWxzZSwgJ2knLAorCQkJCQkJICAmcHViX2RhdHVtcywgJnB1 Yl9udWxscywgJnB1Yl9jb3VudCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcHViX2NvdW50OyBp KyspCisJCXsKKwkJCWlmICghcHViX251bGxzW2ldKQorCQkJeworCQkJCWNoYXIJICAgKnB1Ym5h bWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHB1Yl9kYXR1bXNbaV0pOworCisJCQkJcHViX29pZHMg PSBsYXBwZW5kX29pZChwdWJfb2lkcywgZ2V0X3B1YmxpY2F0aW9uX29pZChwdWJuYW1lLCBmYWxz ZSkpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGV4cGVu c2l2ZSBleHBhbnNpb24gc3RlcCBjYW4gYmUgc2tpcHBlZC4gSWYKKwkJICogYW55IHB1YmxpY2F0 aW9uIGlzIGEgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24gd2l0aG91dCBhbiBFWENFUFQKKwkJ ICogY2xhdXNlLCBvciBpZiBub25lIG9mIHRoZSBwdWJsaWNhdGlvbnMgZGVmaW5lIGV4Y2VwdGlv bnMsIHRoZSByb290CisJCSAqIHJlbGF0aW9uIGFsb25lIGlzIHN1ZmZpY2llbnQgYXMgdGhlIHJl c3VsdC4KKwkJICovCisJCWZvcmVhY2hfb2lkKHB1Ym9pZCwgcHViX29pZHMpCisJCXsKKwkJCUhl YXBUdXBsZQlwdWJUdXA7CisJCQlGb3JtX3BnX3B1YmxpY2F0aW9uIHB1YmZvcm07CisKKwkJCXB1 YlR1cCA9IFNlYXJjaFN5c0NhY2hlMShQVUJMSUNBVElPTk9JRCwgT2JqZWN0SWRHZXREYXR1bShw dWJvaWQpKTsKKwkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwdWJUdXApKQorCQkJCWNvbnRpbnVl OworCisJCQlwdWJmb3JtID0gKEZvcm1fcGdfcHVibGljYXRpb24pIEdFVFNUUlVDVChwdWJUdXAp OworCQkJaWYgKHB1YmZvcm0tPnB1YmFsbHRhYmxlcykKKwkJCXsKKwkJCQkvKiBDaGVjayB3aGV0 aGVyIHRoaXMgcHVibGljYXRpb24gZGVmaW5lcyBhbnkgRVhDRVBUIGVudHJpZXMgKi8KKwkJCQlp ZiAocHVibGljYXRpb25faGFzX2FueV9leGNlcHRpb24ocHVib2lkKSkKKwkJCQl7CisJCQkJCWV4 Y2VwdF9wdWJfbmFtZXMgPSBsYXBwZW5kKGV4Y2VwdF9wdWJfbmFtZXMsCisJCQkJCQkJCQkJCSAg IG1ha2VTdHJpbmcocHViZm9ybS0+cHVibmFtZS5kYXRhKSk7CisJCQkJCWhhc19hbnlfZXhjZXB0 ID0gdHJ1ZTsKKwkJCQkJZXhjZXB0X3B1Yl9pZCA9IHB1YmZvcm0tPm9pZDsKKwkJCQl9CisJCQkJ ZWxzZQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVGhpcyBwdWJsaWNhdGlvbiBpbmNsdWRlcyBh bGwgdGFibGVzIHdpdGhvdXQgZXhjZXB0LgorCQkJCQkgKi8KKwkJCQkJaGFzX2NsZWFuX2FsbF90 YWJsZXNfcHViID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisKKwkJCVJlbGVhc2VTeXNDYWNoZShwdWJU dXApOworCQl9CisKKwkJaWYgKGxpc3RfbGVuZ3RoKGV4Y2VwdF9wdWJfbmFtZXMpID4gMSkKKwkJ eworCQkJU3RyaW5nSW5mbwlwdWJfbmFtZXMgPSBtYWtlU3RyaW5nSW5mbygpOworCisJCQlHZXRQ dWJsaWNhdGlvbnNTdHIoZXhjZXB0X3B1Yl9uYW1lcywgcHViX25hbWVzLCB0cnVlKTsKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAorCQkJCQllcnJtc2coImNhbm5vdCB1c2UgbXVsdGlwbGUgcHVibGljYXRpb25zIHdpdGggRVhD RVBUIFRBQkxFIGxpc3RzIiksCisJCQkJCWVycmRldGFpbCgiVGhlIGZvbGxvd2luZyBwdWJsaWNh dGlvbnMgaGF2ZSBleGNlcHRpb25zOiAlcy4iLAorCQkJCQkJCSAgcHViX25hbWVzLT5kYXRhKSk7 CisJCX0KKworCQkvKiBSZXR1cm4gcm9vdCBpbW1lZGlhdGVseSBpZiBubyBmaWx0ZXJpbmcgbG9n aWMgaXMgbmVlZGVkICovCisJCWlmIChoYXNfY2xlYW5fYWxsX3RhYmxlc19wdWIgfHwgIWhhc19h bnlfZXhjZXB0KQorCQl7CisJCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1 bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisJCQlmaW5hbF9vdXRwdXQgPSBsaXN0X21h a2UxX29pZChyb290X3JlbGlkKTsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxpc3QJICAgKmFsbF90YWJsZXM7CisJCQlMaXN0CSAg ICphbGxfbGVhdmVzID0gTklMOworCQkJTGlzdAkgICAqZXhjZXB0X2xlYXZlcyA9IE5JTDsKKwkJ CUxpc3QJICAgKmFsbG93ZWRfbGVhdmVzID0gTklMOworCQkJTGlzdAkgICAqY2FuZGlkYXRlX2xp c3QgPSBOSUw7CisKKwkJCS8qIEdldCBhbGwgdGhlIGxlYWYgcmVsYXRpb25zICovCisJCQlhbGxf bGVhdmVzID0gR2V0UHViUGFydGl0aW9uT3B0aW9uUmVsYXRpb25zKGFsbF9sZWF2ZXMsCisJCQkJ CQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfTEVBRiwKKwkJCQkJCQkJCQkJCQkJcm9vdF9yZWxp ZCk7CisJCQlmb3JlYWNoX29pZChjdXJyX3JlbGlkLCBhbGxfbGVhdmVzKQorCQkJeworCQkJCS8q CisJCQkJICogQSBsZWFmIHRhYmxlIGlzIGNvbnNpZGVyZWQgZXhjbHVkZWQgaWYgaXQsIG9yIGFu eSBvZiBpdHMKKwkJCQkgKiBhbmNlc3RvcnMsIGlzIGxpc3RlZCBpbiB0aGUgRVhDRVBUIGNsYXVz ZSBvZiB0aGUKKwkJCQkgKiBwdWJsaWNhdGlvbi4gT3RoZXJ3aXNlLCBpdCByZW1haW5zIHBhcnQg b2YgdGhlIGVmZmVjdGl2ZQorCQkJCSAqIHB1YmxpY2F0aW9uIHNldC4KKwkJCQkgKi8KKwkJCQlp ZiAoaXNfcmVsYXRpb25fb3JfYW5jZXN0b3JfZXhjbHVkZWQoY3Vycl9yZWxpZCwgZXhjZXB0X3B1 Yl9pZCkpCisJCQkJCWV4Y2VwdF9sZWF2ZXMgPSBsYXBwZW5kX29pZChleGNlcHRfbGVhdmVzLCBj dXJyX3JlbGlkKTsKKwkJCQllbHNlCisJCQkJCWFsbG93ZWRfbGVhdmVzID0gbGFwcGVuZF9vaWQo YWxsb3dlZF9sZWF2ZXMsIGN1cnJfcmVsaWQpOworCQkJfQorCisJCQkvKgorCQkJICogQSB0YWJs ZSBleGNsdWRlZCBieSB0aGUgRVhDRVBUIGNsYXVzZSBvZiBvbmUgcHVibGljYXRpb24gbWF5CisJ CQkgKiBzdGlsbCBiZSBpbmNsdWRlZCBpZiBpdCBpcyBleHBsaWNpdGx5IHB1Ymxpc2hlZCwgb3Ig cHVibGlzaGVkCisJCQkgKiB2aWEgaXRzIHNjaGVtYSBvciBhbnkgb2YgaXRzIGFuY2VzdG9ycywg aW4gYW5vdGhlciBwdWJsaWNhdGlvbi4KKwkJCSAqLworCQkJZm9yZWFjaF9vaWQoY3Vycl9yZWxp ZCwgZXhjZXB0X2xlYXZlcykKKwkJCXsKKwkJCQlmb3JlYWNoX29pZChwdWJpZCwgcHViX29pZHMp CisJCQkJeworCQkJCQkvKiBTa2lwIHRoZSBwdWJsaWNhdGlvbiB0aGF0IGV4Y2x1ZGVkIHRoaXMg cmVsYXRpb24uICovCisJCQkJCWlmIChwdWJpZCA9PSBleGNlcHRfcHViX2lkKQorCQkJCQkJY29u dGludWU7CisKKwkJCQkJLyoKKwkJCQkJICogQ2hlY2sgd2hldGhlciB0aGUgdGFibGUgaXRzZWxm IG9yIGl0cyBzY2hlbWEgaXMKKwkJCQkJICogaW5jbHVkZWQgaW4gdGhpcyBwdWJsaWNhdGlvbi4K KwkJCQkJICovCisJCQkJCWlmIChpc19yZWxpZF9wdWJsaXNoZWRfZXhwbGljaXRseShjdXJyX3Jl bGlkLCBwdWJpZCkgfHwKKwkJCQkJCWlzX3NjaGVtYV9wdWJsaXNoZWQoZ2V0X3JlbF9uYW1lc3Bh Y2UoY3Vycl9yZWxpZCksIHB1YmlkKSkKKwkJCQkJeworCQkJCQkJYWxsb3dlZF9sZWF2ZXMgPSBs YXBwZW5kX29pZChhbGxvd2VkX2xlYXZlcywgY3Vycl9yZWxpZCk7CisJCQkJCX0KKwkJCQkJZWxz ZQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICphbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2Vz dG9ycyhjdXJyX3JlbGlkKTsKKworCQkJCQkJLyoKKwkJCQkJCSAqIENoZWNrIHdoZXRoZXIgYW55 IGFuY2VzdG9yLCBvciBpdHMgc2NoZW1hLCBpcworCQkJCQkJICogaW5jbHVkZWQgaW4gdGhpcyBw dWJsaWNhdGlvbi4KKwkJCQkJCSAqLworCQkJCQkJZm9yZWFjaF9vaWQoYW5jX29pZCwgYW5jZXN0 b3JzKQorCQkJCQkJeworCQkJCQkJCWlmIChpc19yZWxpZF9wdWJsaXNoZWRfZXhwbGljaXRseShh bmNfb2lkLCBwdWJpZCkgfHwKKwkJCQkJCQkJaXNfc2NoZW1hX3B1Ymxpc2hlZChnZXRfcmVsX25h bWVzcGFjZShhbmNfb2lkKSwgcHViaWQpKQorCQkJCQkJCQlhbGxvd2VkX2xlYXZlcyA9IGxhcHBl bmRfb2lkKGFsbG93ZWRfbGVhdmVzLCBjdXJyX3JlbGlkKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJ CX0KKwkJCX0KKworCQkJLyogQm90dG9tLVVwIENvbGxhcHNlLiBDaGVjayBpZiBwYXJlbnRzIGNh biByZXByZXNlbnQgY2hpbGRyZW4gKi8KKwkJCWFsbF90YWJsZXMgPSBmaW5kX2FsbF9pbmhlcml0 b3JzKHJvb3RfcmVsaWQsIEFjY2Vzc1NoYXJlTG9jaywgTlVMTCk7CisJCQljYW5kaWRhdGVfbGlz dCA9IGxpc3RfY29weShhbGxvd2VkX2xlYXZlcyk7CisJCQlmb3JlYWNoX29pZChjdXJyX3JlbGlk LCBhbGxfdGFibGVzKQorCQkJeworCQkJCUxpc3QJICAgKmJyYW5jaF9sZWF2ZXMgPSBOSUw7CisJ CQkJYm9vbAkJYWxsX2FsbG93ZWQgPSB0cnVlOworCisJCQkJLyogT25seSBjb25zaWRlciBwYXJ0 aXRpb25lZCB0YWJsZXMgYXMgY29sbGFwc2UgY2FuZGlkYXRlcyAqLworCQkJCWlmIChnZXRfcmVs X3JlbGtpbmQoY3Vycl9yZWxpZCkgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQkJ Y29udGludWU7CisKKwkJCQlicmFuY2hfbGVhdmVzID0gR2V0UHViUGFydGl0aW9uT3B0aW9uUmVs YXRpb25zKGJyYW5jaF9sZWF2ZXMsCisJCQkJCQkJCQkJCQkJCQkgICBQVUJMSUNBVElPTl9QQVJU X0xFQUYsCisJCQkJCQkJCQkJCQkJCQkgICBjdXJyX3JlbGlkKTsKKwkJCQlpZiAoYnJhbmNoX2xl YXZlcyA9PSBOSUwpCisJCQkJCWNvbnRpbnVlOworCisJCQkJZm9yZWFjaF9vaWQobGNiX29pZCwg YnJhbmNoX2xlYXZlcykKKwkJCQl7CisJCQkJCWlmICghbGlzdF9tZW1iZXJfb2lkKGFsbG93ZWRf bGVhdmVzLCBsY2Jfb2lkKSkKKwkJCQkJeworCQkJCQkJYWxsX2FsbG93ZWQgPSBmYWxzZTsKKwkJ CQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKGFsbF9hbGxvd2VkKQorCQkJCQlj YW5kaWRhdGVfbGlzdCA9IGxpc3RfYXBwZW5kX3VuaXF1ZV9vaWQoY2FuZGlkYXRlX2xpc3QsCisJ CQkJCQkJCQkJCQkJCQljdXJyX3JlbGlkKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIERlZHVwbGlj YXRlOiBGaWx0ZXIgb3V0IGFueSByZWxhdGlvbiB3aG9zZSBhbmNlc3RvciBpcyBhbHJlYWR5CisJ CQkgKiBwcmVzZW50IGluIHRoZSBjYW5kaWRhdGUgbGlzdC4gVGhpcyBlbnN1cmVzIHdlIG9ubHkg cmV0dXJuIHRoZQorCQkJICogImhpZ2hlc3QiIHJlcHJlc2VudGF0aXZlIGZvciBlYWNoIGJyYW5j aC4KKwkJCSAqLworCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4 LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJCQlmb3JlYWNoX29pZChjdXJyX3JlbGlkLCBj YW5kaWRhdGVfbGlzdCkKKwkJCXsKKwkJCQlMaXN0CSAgICphbmNlc3RvcnMgPSBnZXRfcGFydGl0 aW9uX2FuY2VzdG9ycyhjdXJyX3JlbGlkKTsKKwkJCQlib29sCQlhbmNlc3Rvcl9hbHJlYWR5X2lu Y2x1ZGVkID0gZmFsc2U7CisKKwkJCQkvKgorCQkJCSAqIENoZWNrIGlmIGFueSBhbmNlc3RvciBv ZiB0aGUgY3VycmVudCByZWxhdGlvbiBleGlzdHMgaW4gdGhlCisJCQkJICogY2FuZGlkYXRlIGxp c3QuIElmIHNvLCB0aGlzIHJlbGF0aW9uIGlzIHJlZHVuZGFudC4KKwkJCQkgKi8KKwkJCQlmb3Jl YWNoX29pZChhbmNlc3Rvcl9yZWxpZCwgYW5jZXN0b3JzKQorCQkJCXsKKwkJCQkJaWYgKGxpc3Rf bWVtYmVyX29pZChjYW5kaWRhdGVfbGlzdCwgYW5jZXN0b3JfcmVsaWQpKQorCQkJCQl7CisJCQkJ CQlhbmNlc3Rvcl9hbHJlYWR5X2luY2x1ZGVkID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9 CisJCQkJfQorCisJCQkJaWYgKCFhbmNlc3Rvcl9hbHJlYWR5X2luY2x1ZGVkKQorCQkJCQlmaW5h bF9vdXRwdXQgPSBsYXBwZW5kX29pZChmaW5hbF9vdXRwdXQsIGN1cnJfcmVsaWQpOworCisJCQkJ bGlzdF9mcmVlKGFuY2VzdG9ycyk7CisJCQl9CisKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKKwkJfQorCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o ZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKwkJLyogQ29uc3RydWN0IGEgdHVwbGUg ZGVzY3JpcHRvciBmb3IgdGhlIHJlc3VsdCByb3dzLiAqLworCQl0dXBkZXNjID0gQ3JlYXRlVGVt cGxhdGVUdXBsZURlc2MoMik7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51 bWJlcikgMSwgInNjaGVtYW5hbWUiLAorCQkJCQkJICAgVEVYVE9JRCwgLTEsIDApOworCQlUdXBs ZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJyZWxuYW1lIiwKKwkJCQkJ CSAgIFRFWFRPSUQsIC0xLCAwKTsKKworCQlmdW5jY3R4LT50dXBsZV9kZXNjID0gQmxlc3NUdXBs ZURlc2ModHVwZGVzYyk7CisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IGZpbmFsX291dHB1dDsKKwor CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQorCisJLyogU1JGIFBlci1j YWxsIFJlc3VtZSAqLworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCXJlc3VsdHMg PSAoTGlzdCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CisKKwlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRy IDwgbGlzdF9sZW5ndGgocmVzdWx0cykpCisJeworCQlPaWQJCQljdXJyZW50X3JlbGlkID0gbGlz dF9udGhfb2lkKHJlc3VsdHMsIChpbnQpIGZ1bmNjdHgtPmNhbGxfY250cik7CisJCUhlYXBUdXBs ZQlyZXR0dXBsZTsKKwkJRGF0dW0JCXZhbHVlc1syXTsKKwkJYm9vbAkJbnVsbHNbMl0gPSB7ZmFs c2UsIGZhbHNlfTsKKworCQl2YWx1ZXNbMF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGdldF9uYW1l c3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShjdXJyZW50X3JlbGlkKSkpOworCQl2YWx1ZXNb MV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGdldF9yZWxfbmFtZShjdXJyZW50X3JlbGlkKSk7CisK KwkJcmV0dHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUoZnVuY2N0eC0+dHVwbGVfZGVzYywgdmFsdWVz LCBudWxscyk7CisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBIZWFwVHVwbGVHZXREYXR1bShy ZXR0dXBsZSkpOworCX0KKworCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKK30KKwogLyoKICAq IEdldCBpbmZvcm1hdGlvbiBvZiB0aGUgdGFibGVzIGluIHRoZSBnaXZlbiBwdWJsaWNhdGlvbiBh cnJheS4KICAqCkBAIC0xMTY4LDE3ICsxNjc0LDE3IEBAIHBnX2dldF9wdWJsaWNhdGlvbl90YWJs ZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCSAqIHRob3NlLiBPdGhlcndpc2UsIGdldCB0aGUgcGFy dGl0aW9uZWQgdGFibGUgaXRzZWxmLgogCQkJICovCiAJCQlpZiAocHViX2VsZW0tPmFsbHRhYmxl cykKLQkJCQlwdWJfZWxlbV90YWJsZXMgPSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucyhSRUxL SU5EX1JFTEFUSU9OLAotCQkJCQkJCQkJCQkJCQkJIHB1Yl9lbGVtLT5wdWJ2aWFyb290KTsKKwkJ CQlwdWJfZWxlbV90YWJsZXMgPSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbSwK KwkJCQkJCQkJCQkJCQkJCSBSRUxLSU5EX1JFTEFUSU9OKTsKIAkJCWVsc2UKIAkJCXsKIAkJCQlM aXN0CSAgICpyZWxpZHMsCiAJCQkJCQkgICAqc2NoZW1hcmVsaWRzOwogCi0JCQkJcmVsaWRzID0g R2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKLQkJCQkJCQkJCQkJCSBwdWJf ZWxlbS0+cHVidmlhcm9vdCA/Ci0JCQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFSVF9ST09UIDoK LQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0xFQUYpOworCQkJCXJlbGlkcyA9IEdldFB1 YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKKwkJCQkJCQkJCQkJCQkJ IHB1Yl9lbGVtLT5wdWJ2aWFyb290ID8KKwkJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRf Uk9PVCA6CisJCQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0xFQUYpOwogCQkJCXNjaGVt YXJlbGlkcyA9IEdldEFsbFNjaGVtYVB1YmxpY2F0aW9uUmVsYXRpb25zKHB1Yl9lbGVtLT5vaWQs CiAJCQkJCQkJCQkJCQkJCQkJcHViX2VsZW0tPnB1YnZpYXJvb3QgPwogCQkJCQkJCQkJCQkJCQkJ CVBVQkxJQ0FUSU9OX1BBUlRfUk9PVCA6CkBAIC0xMzY3LDcgKzE4NzMsNyBAQCBwZ19nZXRfcHVi bGljYXRpb25fc2VxdWVuY2VzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXB1YmxpY2F0aW9uID0gR2V0 UHVibGljYXRpb25CeU5hbWUocHVibmFtZSwgZmFsc2UpOwogCiAJCWlmIChwdWJsaWNhdGlvbi0+ YWxsc2VxdWVuY2VzKQotCQkJc2VxdWVuY2VzID0gR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMo UkVMS0lORF9TRVFVRU5DRSwgZmFsc2UpOworCQkJc2VxdWVuY2VzID0gR2V0QWxsUHVibGljYXRp b25SZWxhdGlvbnMocHVibGljYXRpb24sIFJFTEtJTkRfU0VRVUVOQ0UpOwogCiAJCWZ1bmNjdHgt PnVzZXJfZmN0eCA9IHNlcXVlbmNlczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNt ZHMuYwppbmRleCBmYzNhNGMxOWU2NS4uNmJiODE2YjIxOWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xOTgsNyArMTk4LDEyIEBAIE9iamVjdHNJblB1YmxpY2F0 aW9uVG9PaWRzKExpc3QgKnB1Ym9ianNwZWNfbGlzdCwgUGFyc2VTdGF0ZSAqcHN0YXRlLAogCiAJ CXN3aXRjaCAocHVib2JqLT5wdWJvYmp0eXBlKQogCQl7CisJCQljYXNlIFBVQkxJQ0FUSU9OT0JK X0VYQ0VQVF9UQUJMRToKKwkJCQlwdWJvYmotPnB1YnRhYmxlLT5leGNlcHQgPSB0cnVlOworCQkJ CSpyZWxzID0gbGFwcGVuZCgqcmVscywgcHVib2JqLT5wdWJ0YWJsZSk7CisJCQkJYnJlYWs7CiAJ CQljYXNlIFBVQkxJQ0FUSU9OT0JKX1RBQkxFOgorCQkJCXB1Ym9iai0+cHVidGFibGUtPmV4Y2Vw dCA9IGZhbHNlOwogCQkJCSpyZWxzID0gbGFwcGVuZCgqcmVscywgcHVib2JqLT5wdWJ0YWJsZSk7 CiAJCQkJYnJlYWs7CiAJCQljYXNlIFBVQkxJQ0FUSU9OT0JKX1RBQkxFU19JTl9TQ0hFTUE6CkBA IC01MTksOCArNTI0LDggQEAgSW52YWxpZGF0ZVB1YlJlbFN5bmNDYWNoZShPaWQgcHViaWQsIGJv b2wgcHViYWxsdGFibGVzKQogCQkgKiBhIHRhcmdldC4gSG93ZXZlciwgV0FMIHJlY29yZHMgZm9y IFRSVU5DQVRFIHNwZWNpZnkgYm90aCBhIHJvb3QgYW5kCiAJCSAqIGl0cyBsZWF2ZXMuCiAJCSAq LwotCQlyZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJpZCwKLQkJCQkJCQkJCQkg UFVCTElDQVRJT05fUEFSVF9BTEwpOworCQlyZWxpZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVk UmVsYXRpb25zKHB1YmlkLAorCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfQUxMKTsKIAkJ c2NoZW1hcmVsaWRzID0gR2V0QWxsU2NoZW1hUHVibGljYXRpb25SZWxhdGlvbnMocHViaWQsCiAJ CQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfQUxMKTsKIApAQCAtOTI5LDU1ICs5MzQsNjEg QEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlv blN0bXQgKnN0bXQpCiAJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKIAogCS8qIEFzc29jaWF0 ZSBvYmplY3RzIHdpdGggdGhlIHB1YmxpY2F0aW9uLiAqLwotCWlmIChzdG10LT5mb3JfYWxsX3Rh YmxlcykKKwlPYmplY3RzSW5QdWJsaWNhdGlvblRvT2lkcyhzdG10LT5wdWJvYmplY3RzLCBwc3Rh dGUsICZyZWxhdGlvbnMsCisJCQkJCQkJICAgJnNjaGVtYWlkbGlzdCk7CisKKwkvKiBGT1IgVEFC TEVTIElOIFNDSEVNQSByZXF1aXJlcyBzdXBlcnVzZXIgKi8KKwlpZiAoc2NoZW1haWRsaXN0ICE9 IE5JTCAmJiAhc3VwZXJ1c2VyKCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJD T0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAorCQkJCWVycm1zZygibXVzdCBiZSBzdXBlcnVz ZXIgdG8gY3JlYXRlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1YmxpY2F0aW9uIikpOworCisJLyog QWRkIHJlbGF0aW9ucyAodGFibGVzKSB0byB0aGUgcHVibGljYXRpb24uICovCisJaWYgKHJlbGF0 aW9ucyAhPSBOSUwpCiAJewogCQkvKgotCQkgKiBJbnZhbGlkYXRlIHJlbGNhY2hlIHNvIHRoYXQg cHVibGljYXRpb24gaW5mbyBpcyByZWJ1aWx0LiBTZXF1ZW5jZXMKLQkJICogcHVibGljYXRpb24g ZG9lc24ndCByZXF1aXJlIGludmFsaWRhdGlvbiwgYXMgcmVwbGljYSBpZGVudGl0eQotCQkgKiBj aGVja3MgZG9uJ3QgYXBwbHkgdG8gdGhlbS4KKwkJICogVGhlICdyZWxhdGlvbnMnIGxpc3QgY2Fu IGJlIG5vbi1lbXB0eSBpbiBvbmx5IHR3byBjYXNlczoKKwkJICoKKwkJICogMS4gQ1JFQVRFIFBV QkxJQ0FUSU9OIC4uLiBGT1IgVEFCTEUgSW4gdGhpcyBjYXNlLCAncmVsYXRpb25zJworCQkgKiBj b250YWlucyB0aGUgbGlzdCBvZiBzcGVjaWZpZWQgdGFibGVzLgorCQkgKgorCQkgKiAyLiBDUkVB VEUgUFVCTElDQVRJT04gLi4uIEZPUiBBTEwgVEFCTEVTIEluIHRoaXMgY2FzZSwgJ3JlbGF0aW9u cycKKwkJICogY29udGFpbnMgdGhlIGxpc3Qgb2YgdGFibGVzIHNwZWNpZmllZCBpbiB0aGUgRVhD RVBUIFRBQkxFIGNsYXVzZS4KKwkJICogRHVyaW5nIHBhcnNpbmcsIHRoZSAnZXhjZXB0JyBmbGFn IGlzIHNldCBmb3IgdGhlIGFzc29jaWF0ZWQKKwkJICogUHVibGljYXRpb25SZWxJbmZvIG9iamVj dHMuCiAJCSAqLwotCQlDYWNoZUludmFsaWRhdGVSZWxjYWNoZUFsbCgpOwotCX0KLQllbHNlIGlm ICghc3RtdC0+Zm9yX2FsbF9zZXF1ZW5jZXMpCi0JewotCQlPYmplY3RzSW5QdWJsaWNhdGlvblRv T2lkcyhzdG10LT5wdWJvYmplY3RzLCBwc3RhdGUsICZyZWxhdGlvbnMsCi0JCQkJCQkJCSAgICZz Y2hlbWFpZGxpc3QpOworCQlMaXN0CSAgICpyZWxzOwogCi0JCS8qIEZPUiBUQUJMRVMgSU4gU0NI RU1BIHJlcXVpcmVzIHN1cGVydXNlciAqLwotCQlpZiAoc2NoZW1haWRsaXN0ICE9IE5JTCAmJiAh c3VwZXJ1c2VyKCkpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQllcnJjb2RlKEVSUkNPREVfSU5T VUZGSUNJRU5UX1BSSVZJTEVHRSksCi0JCQkJCWVycm1zZygibXVzdCBiZSBzdXBlcnVzZXIgdG8g Y3JlYXRlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1YmxpY2F0aW9uIikpOwotCi0JCWlmIChyZWxh dGlvbnMgIT0gTklMKQotCQl7Ci0JCQlMaXN0CSAgICpyZWxzOworCQlyZWxzID0gT3BlblRhYmxl TGlzdChyZWxhdGlvbnMpOworCQlUcmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMocmVscywgcHN0YXRl LT5wX3NvdXJjZXRleHQsCisJCQkJCQkJCSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAK LQkJCXJlbHMgPSBPcGVuVGFibGVMaXN0KHJlbGF0aW9ucyk7Ci0JCQlUcmFuc2Zvcm1QdWJXaGVy ZUNsYXVzZXMocmVscywgcHN0YXRlLT5wX3NvdXJjZXRleHQsCi0JCQkJCQkJCQkgcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QpOworCQlDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlzdChzdG10LT5w dWJuYW1lLCByZWxzLAorCQkJCQkJCQkgICBzY2hlbWFpZGxpc3QgIT0gTklMLAorCQkJCQkJCQkg ICBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKLQkJCUNoZWNrUHViUmVsYXRpb25Db2x1 bW5MaXN0KHN0bXQtPnB1Ym5hbWUsIHJlbHMsCi0JCQkJCQkJCQkgICBzY2hlbWFpZGxpc3QgIT0g TklMLAotCQkJCQkJCQkJICAgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwotCi0JCQlQdWJs aWNhdGlvbkFkZFRhYmxlcyhwdWJvaWQsIHJlbHMsIHRydWUsIE5VTEwpOwotCQkJQ2xvc2VUYWJs ZUxpc3QocmVscyk7Ci0JCX0KKwkJUHVibGljYXRpb25BZGRUYWJsZXMocHVib2lkLCByZWxzLCB0 cnVlLCBOVUxMKTsKKwkJQ2xvc2VUYWJsZUxpc3QocmVscyk7CisJfQogCi0JCWlmIChzY2hlbWFp ZGxpc3QgIT0gTklMKQotCQl7Ci0JCQkvKgotCQkJICogU2NoZW1hIGxvY2sgaXMgaGVsZCB1bnRp bCB0aGUgcHVibGljYXRpb24gaXMgY3JlYXRlZCB0byBwcmV2ZW50Ci0JCQkgKiBjb25jdXJyZW50 IHNjaGVtYSBkZWxldGlvbi4KLQkJCSAqLwotCQkJTG9ja1NjaGVtYUxpc3Qoc2NoZW1haWRsaXN0 KTsKLQkJCVB1YmxpY2F0aW9uQWRkU2NoZW1hcyhwdWJvaWQsIHNjaGVtYWlkbGlzdCwgdHJ1ZSwg TlVMTCk7Ci0JCX0KKwlpZiAoc2NoZW1haWRsaXN0ICE9IE5JTCkKKwl7CisJCS8qCisJCSAqIFNj aGVtYSBsb2NrIGlzIGhlbGQgdW50aWwgdGhlIHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQgdG8gcHJl dmVudAorCQkgKiBjb25jdXJyZW50IHNjaGVtYSBkZWxldGlvbi4KKwkJICovCisJCUxvY2tTY2hl bWFMaXN0KHNjaGVtYWlkbGlzdCk7CisJCVB1YmxpY2F0aW9uQWRkU2NoZW1hcyhwdWJvaWQsIHNj aGVtYWlkbGlzdCwgdHJ1ZSwgTlVMTCk7CiAJfQogCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNs dXNpdmVMb2NrKTsKIAorCWlmIChzdG10LT5mb3JfYWxsX3RhYmxlcykKKwl7CisJCS8qIEludmFs aWRhdGUgcmVsY2FjaGUgc28gdGhhdCBwdWJsaWNhdGlvbiBpbmZvIGlzIHJlYnVpbHQuICovCisJ CUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQWxsKCk7CisJfQorCiAJSW52b2tlT2JqZWN0UG9zdENy ZWF0ZUhvb2soUHVibGljYXRpb25SZWxhdGlvbklkLCBwdWJvaWQsIDApOwogCiAJLyoKQEAgLTEw NTAsOCArMTA2MSw4IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCUxvY2tEYXRhYmFzZU9iamVjdChQdWJs aWNhdGlvblJlbGF0aW9uSWQsIHB1YmZvcm0tPm9pZCwgMCwKIAkJCQkJCSAgIEFjY2Vzc1NoYXJl TG9jayk7CiAKLQkJcm9vdF9yZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJmb3Jt LT5vaWQsCi0JCQkJCQkJCQkJCSAgUFVCTElDQVRJT05fUEFSVF9ST09UKTsKKwkJcm9vdF9yZWxp ZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKHB1YmZvcm0tPm9pZCwKKwkJCQkJ CQkJCQkJCQkgIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CiAKIAkJZm9yZWFjaChsYywgcm9vdF9y ZWxpZHMpCiAJCXsKQEAgLTExNzAsOCArMTE4MSw4IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25z KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCSAqIHRy ZWVzLCBub3QganVzdCB0aG9zZSBleHBsaWNpdGx5IG1lbnRpb25lZCBpbiB0aGUgcHVibGljYXRp b24uCiAJCSAqLwogCQlpZiAocm9vdF9yZWxpZHMgPT0gTklMKQotCQkJcmVsaWRzID0gR2V0UHVi bGljYXRpb25SZWxhdGlvbnMocHViZm9ybS0+b2lkLAotCQkJCQkJCQkJCQkgUFVCTElDQVRJT05f UEFSVF9BTEwpOworCQkJcmVsaWRzID0gR2V0UHVibGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucyhw dWJmb3JtLT5vaWQsCisJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfQUxMKTsKIAkJZWxz ZQogCQl7CiAJCQkvKgpAQCAtMTI1Niw4ICsxMjY3LDggQEAgQWx0ZXJQdWJsaWNhdGlvblRhYmxl cyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAkJUHVibGljYXRp b25Ecm9wVGFibGVzKHB1YmlkLCByZWxzLCBmYWxzZSk7CiAJZWxzZQkJCQkJCS8qIEFQX1NldE9i amVjdHMgKi8KIAl7Ci0JCUxpc3QJICAgKm9sZHJlbGlkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRp b25zKHB1YmlkLAotCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX1JPT1QpOworCQlMaXN0 CSAgICpvbGRyZWxpZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKHB1YmlkLAor CQkJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CiAJCUxpc3QJICAgKmRlbHJl bHMgPSBOSUw7CiAJCUxpc3RDZWxsICAgKm9sZGxjOwogCkBAIC0xMzU4LDYgKzEzNjksNyBAQCBB bHRlclB1YmxpY2F0aW9uVGFibGVzKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBIZWFwVHVw bGUgdHVwLAogCQkJCW9sZHJlbCA9IHBhbGxvY19vYmplY3QoUHVibGljYXRpb25SZWxJbmZvKTsK IAkJCQlvbGRyZWwtPndoZXJlQ2xhdXNlID0gTlVMTDsKIAkJCQlvbGRyZWwtPmNvbHVtbnMgPSBO SUw7CisJCQkJb2xkcmVsLT5leGNlcHQgPSBmYWxzZTsKIAkJCQlvbGRyZWwtPnJlbGF0aW9uID0g dGFibGVfb3BlbihvbGRyZWxpZCwKIAkJCQkJCQkJCQkJICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxv Y2spOwogCQkJCWRlbHJlbHMgPSBsYXBwZW5kKGRlbHJlbHMsIG9sZHJlbCk7CkBAIC0xNDA4LDcg KzE0MjAsOCBAQCBBbHRlclB1YmxpY2F0aW9uU2NoZW1hcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAq c3RtdCwKIAkJTGlzdENlbGwgICAqbGM7CiAJCUxpc3QJICAgKnJlbG9pZHM7CiAKLQkJcmVsb2lk cyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmZvcm0tPm9pZCwgUFVCTElDQVRJT05fUEFS VF9ST09UKTsKKwkJcmVsb2lkcyA9IEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMocHVi Zm9ybS0+b2lkLAorCQkJCQkJCQkJCQkJICBQVUJMSUNBVElPTl9QQVJUX1JPT1QpOwogCiAJCWZv cmVhY2gobGMsIHJlbG9pZHMpCiAJCXsKQEAgLTE3NzEsNiArMTc4NCw3IEBAIE9wZW5UYWJsZUxp c3QoTGlzdCAqdGFibGVzKQogCQlwdWJfcmVsLT5yZWxhdGlvbiA9IHJlbDsKIAkJcHViX3JlbC0+ d2hlcmVDbGF1c2UgPSB0LT53aGVyZUNsYXVzZTsKIAkJcHViX3JlbC0+Y29sdW1ucyA9IHQtPmNv bHVtbnM7CisJCXB1Yl9yZWwtPmV4Y2VwdCA9IHQtPmV4Y2VwdDsKIAkJcmVscyA9IGxhcHBlbmQo cmVscywgcHViX3JlbCk7CiAJCXJlbGlkcyA9IGxhcHBlbmRfb2lkKHJlbGlkcywgbXlyZWxpZCk7 CiAKQEAgLTE4NDMsNiArMTg1Nyw3IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCiAJ CQkJLyogY2hpbGQgaW5oZXJpdHMgY29sdW1uIGxpc3QgZnJvbSBwYXJlbnQgKi8KIAkJCQlwdWJf cmVsLT5jb2x1bW5zID0gdC0+Y29sdW1uczsKKwkJCQlwdWJfcmVsLT5leGNlcHQgPSB0LT5leGNl cHQ7CiAJCQkJcmVscyA9IGxhcHBlbmQocmVscywgcHViX3JlbCk7CiAJCQkJcmVsaWRzID0gbGFw cGVuZF9vaWQocmVsaWRzLCBjaGlsZHJlbGlkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2Ny aXB0aW9uY21kcy5jCmluZGV4IDBiM2M4NDk5YjQ5Li5iZGM2ZmU3MzNlYiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpAQCAtNTQ5LDYgKzU0OSw4NCBAQCBjaGVja19w dWJsaWNhdGlvbnMoV2FsUmVjZWl2ZXJDb25uICp3cmNvbm4sIExpc3QgKnB1YmxpY2F0aW9ucykK IAl9CiB9CiAKKy8qCisgKiBUaHJvd3MgYW4gRVJST1IgaWYgbXVsdGlwbGUgcHVibGljYXRpb25z IHdpdGggZXhjZXB0IGNsYXVzZXMgYXJlIGZvdW5kLgorICoKKyAqIFRoaXMgY2hlY2sgaXMgbWFu ZGF0b3J5IGJlY2F1c2UgbG9naWNhbCByZXBsaWNhdGlvbiBjdXJyZW50bHkgZG9lcyBub3QKKyAq IHN1cHBvcnQgc3Vic2NyaWJpbmcgdG8gbXVsdGlwbGUgcHVibGljYXRpb25zIGlmIG1vcmUgdGhh biBvbmUgb2YgdGhlbQorICogdXNlcyBhbiBleGNsdXNpb24gbGlzdC4KKyAqCisgKiBDb21iaW5p bmcgZGlmZmVyZW50IGV4Y2x1c2lvbiBsaXN0cyB3aXRoIHZhcnlpbmcgc2V0dGluZ3MgZm9yCisg KiAncHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QnIGNhbiByZXN1bHQgaW4gYW1iaWd1b3VzIHB1 YmxpY2F0aW9uCisgKiBpZGVudGl0aWVzLiBUbyBlbnN1cmUgcHJlZGljdGFibGUgcmVwbGljYXRp b24gYmVoYXZpb3IsIGEgc2luZ2xlCisgKiBzdWJzY3JpcHRpb24gbWF5IG9ubHkgaW5jbHVkZSBv bmUgJ0ZPUiBBTEwgVEFCTEVTJyBwdWJsaWNhdGlvbiB0aGF0CisgKiBzcGVjaWZpZXMgYW4gRVhD RVBUIGNsYXVzZS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3B1YmxpY2F0aW9uc19leGNlcHRf bGlzdChXYWxSZWNlaXZlckNvbm4gKndyY29ubiwgTGlzdCAqcHVibGljYXRpb25zKQoreworCUxp c3QJICAgKmV4Y2VwdF9wdWJsaWNhdGlvbnMgPSBOSUw7CisJV2FsUmN2RXhlY1Jlc3VsdCAqcmVz OworCVN0cmluZ0luZm9EYXRhIGNtZDsKKwlTdHJpbmdJbmZvRGF0YSBwdWJuYW1lczsKKwlUdXBs ZVRhYmxlU2xvdCAqc2xvdDsKKwlPaWQJCQl0YWJsZVJvd1sxXSA9IHtURVhUT0lEfTsKKworCWlm IChsaXN0X2xlbmd0aChwdWJsaWNhdGlvbnMpIDw9IDEpCisJCXJldHVybjsKKworCWluaXRTdHJp bmdJbmZvKCZjbWQpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwKKwkJCQkJCQkiU0VM RUNUIHAucHVibmFtZVxuIgorCQkJCQkJCSIgRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9u IHBcbiIKKwkJCQkJCQkiIFdIRVJFIHAucHVibmFtZSBJTiAoIik7CisKKwlHZXRQdWJsaWNhdGlv bnNTdHIocHVibGljYXRpb25zLCAmY21kLCB0cnVlKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmNtZCwKKwkJCQkJCQkiKVxuIgorCQkJCQkJCSIgICBBTkQgRVhJU1RTIChTRUxFQ1QgMVxu IgorCQkJCQkJCSIgICAgICAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlv bl9yZWwgcHJcbiIKKwkJCQkJCQkiICAgICAgICAgICAgICAgIFdIRVJFIHByLnBycHViaWQgPSBw Lm9pZFxuIgorCQkJCQkJCSIgICAgICAgICAgICAgICAgICBBTkQgcHIucHJleGNlcHQgSVMgVFJV RSkiKTsKKworCXJlcyA9IHdhbHJjdl9leGVjKHdyY29ubiwgY21kLmRhdGEsIDEsIHRhYmxlUm93 KTsKKwlwZnJlZShjbWQuZGF0YSk7CisKKwlpZiAocmVzLT5zdGF0dXMgIT0gV0FMUkNWX09LX1RV UExFUykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJtc2coImNvdWxkIG5vdCByZWNlaXZlIGxp c3Qgb2YgcHVibGljYXRpb25zIGZyb20gdGhlIHB1Ymxpc2hlcjogJXMiLAorCQkJCQkJcmVzLT5l cnIpKTsKKworCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QocmVzLT50dXBsZWRlc2Ms ICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChy ZXMtPnR1cGxlc3RvcmUsIHRydWUsIGZhbHNlLCBzbG90KSkKKwl7CisJCWNoYXIJICAgKnB1Ym5h bWU7CisJCWJvb2wJCWlzbnVsbDsKKworCQlwdWJuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhz bG90X2dldGF0dHIoc2xvdCwgMSwgJmlzbnVsbCkpOworCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJ ZXhjZXB0X3B1YmxpY2F0aW9ucyA9IGxhcHBlbmQoZXhjZXB0X3B1YmxpY2F0aW9ucywgbWFrZVN0 cmluZyhwdWJuYW1lKSk7CisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCX0KKworCUV4ZWNEcm9w U2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisKKwl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7 CisKKwlpZiAobGlzdF9sZW5ndGgoZXhjZXB0X3B1YmxpY2F0aW9ucykgPD0gMSkKKwkJcmV0dXJu OworCisJaW5pdFN0cmluZ0luZm8oJnB1Ym5hbWVzKTsKKwlHZXRQdWJsaWNhdGlvbnNTdHIoZXhj ZXB0X3B1YmxpY2F0aW9ucywgJnB1Ym5hbWVzLCBmYWxzZSk7CisKKwllcmVwb3J0KEVSUk9SLAor CQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJ CWVycm1zZygicHVibGljYXRpb25zICVzIGFyZSBkZWZpbmVkIHdpdGggRVhDRVBUIFRBQkxFIiwg cHVibmFtZXMuZGF0YSksCisJCQllcnJoaW50KCJTdWJzY3JpcHRpb24gY2Fubm90IGJlIGNyZWF0 ZWQgdXNpbmcgbXVsdGlwbGUgcHVibGljYXRpb25zIHRoYXQgc3BlY2lmeSBFWENFUFQgVEFCTEUu IikpOworfQorCiAvKgogICogQXV4aWxpYXJ5IGZ1bmN0aW9uIHRvIGJ1aWxkIGEgdGV4dCBhcnJh eSBvdXQgb2YgYSBsaXN0IG9mIFN0cmluZyBub2Rlcy4KICAqLwpAQCAtNzk1LDYgKzg3Myw3IEBA IENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlv blN0bXQgKnN0bXQsCiAJCQljaGFyCQlyZWxhdGlvbl9zdGF0ZTsKIAogCQkJY2hlY2tfcHVibGlj YXRpb25zKHdyY29ubiwgcHVibGljYXRpb25zKTsKKwkJCWNoZWNrX3B1YmxpY2F0aW9uc19leGNl cHRfbGlzdCh3cmNvbm4sIHB1YmxpY2F0aW9ucyk7CiAJCQljaGVja19wdWJsaWNhdGlvbnNfb3Jp Z2luX3RhYmxlcyh3cmNvbm4sIHB1YmxpY2F0aW9ucywKIAkJCQkJCQkJCQkJIG9wdHMuY29weV9k YXRhLAogCQkJCQkJCQkJCQkgb3B0cy5yZXRhaW5kZWFkdHVwbGVzLCBvcHRzLm9yaWdpbiwKQEAg LTk1OSw2ICsxMDM4LDggQEAgQWx0ZXJTdWJzY3JpcHRpb25fcmVmcmVzaChTdWJzY3JpcHRpb24g KnN1YiwgYm9vbCBjb3B5X2RhdGEsCiAJCWlmICh2YWxpZGF0ZV9wdWJsaWNhdGlvbnMpCiAJCQlj aGVja19wdWJsaWNhdGlvbnMod3Jjb25uLCB2YWxpZGF0ZV9wdWJsaWNhdGlvbnMpOwogCisJCWNo ZWNrX3B1YmxpY2F0aW9uc19leGNlcHRfbGlzdCh3cmNvbm4sIHN1Yi0+cHVibGljYXRpb25zKTsK KwogCQkvKiBHZXQgdGhlIHJlbGF0aW9uIGxpc3QgZnJvbSBwdWJsaXNoZXIuICovCiAJCXB1YnJl bHMgPSBmZXRjaF9yZWxhdGlvbl9saXN0KHdyY29ubiwgc3ViLT5wdWJsaWNhdGlvbnMpOwogCkBA IC0yOTQwLDYgKzMwMjEsOCBAQCBmZXRjaF9yZWxhdGlvbl9saXN0KFdhbFJlY2VpdmVyQ29ubiAq d3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMpCiAJCQkJCQkgcHViX25hbWVzLmRhdGEpOwogCX0K IAorCWVsb2coTE9HLCAiZmV0Y2hfcmVsYXRpb25fbGlzdDogZXhlY3V0aW5nIHF1ZXJ5IHRvIGZl dGNoIGVmZmVjdGl2ZXJlbGF0aW9uczogXG4lcyIsCisJCSBjbWQuZGF0YSk7CiAJcGZyZWUocHVi X25hbWVzLmRhdGEpOwogCiAJcmVzID0gd2FscmN2X2V4ZWMod3Jjb25uLCBjbWQuZGF0YSwgY29s dW1uX2NvdW50LCB0YWJsZVJvdyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90 YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IGY5NzZj MGU1YzdlLi5hNTM1MWZjNTljNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTg2ODgs NyArODY4OCw3IEBAIEFURXhlY1NldEV4cHJlc3Npb24oQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBS ZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsCiAJICogZXhwcmVzc2lvbnMuCiAJICov CiAJaWYgKGF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwgJiYKLQkJ R2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoUmVsYXRpb25HZXRSZWxpZChyZWwpKSAhPSBOSUwpCisJ CUdldFJlbGF0aW9uUHVibGljYXRpb25zKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgTlVMTCwgTlVM TCkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAogCQkJCSBlcnJtc2coIkFMVEVSIFRBQkxFIC8gU0VUIEVYUFJFU1NJT04gaXMg bm90IHN1cHBvcnRlZCBmb3IgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBpbiB0YWJsZXMgdGhh dCBhcmUgcGFydCBvZiBhIHB1YmxpY2F0aW9uIiksCkBAIC0xODg4NCw3ICsxODg4NCw3IEBAIEFU UHJlcENoYW5nZVBlcnNpc3RlbmNlKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVs LCBib29sIHRvTG9nZ2VkKQogCSAqIFVOTE9HR0VELCBhcyBVTkxPR0dFRCB0YWJsZXMgY2FuJ3Qg YmUgcHVibGlzaGVkLgogCSAqLwogCWlmICghdG9Mb2dnZWQgJiYKLQkJR2V0UmVsYXRpb25QdWJs aWNhdGlvbnMoUmVsYXRpb25HZXRSZWxpZChyZWwpKSAhPSBOSUwpCisJCUdldFJlbGF0aW9uUHVi bGljYXRpb25zKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgTlVMTCwgTlVMTCkpCiAJCWVyZXBvcnQo RVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9T VEFURSksCiAJCQkJIGVycm1zZygiY2Fubm90IGNoYW5nZSB0YWJsZSBcIiVzXCIgdG8gdW5sb2dn ZWQgYmVjYXVzZSBpdCBpcyBwYXJ0IG9mIGEgcHVibGljYXRpb24iLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXgg YzU2NzI1MmFjYzQuLmEyZTM2NzEzNWU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIv Z3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTIwMyw2ICsyMDMsNyBA QCBzdGF0aWMgdm9pZCBwcm9jZXNzQ0FTYml0cyhpbnQgY2FzX2JpdHMsIGludCBsb2NhdGlvbiwg Y29uc3QgY2hhciAqY29uc3RyVHlwZSwKIHN0YXRpYyBQYXJ0aXRpb25TdHJhdGVneSBwYXJzZVBh cnRpdGlvblN0cmF0ZWd5KGNoYXIgKnN0cmF0ZWd5LCBpbnQgbG9jYXRpb24sCiAJCQkJCQkJCQkJ CQljb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgdm9pZCBwcmVwcm9jZXNzX3B1Yl9h bGxfb2JqdHlwZV9saXN0KExpc3QgKmFsbF9vYmplY3RzX2xpc3QsCisJCQkJCQkJCQkJCUxpc3Qg KipwdWJvYmplY3RzLAogCQkJCQkJCQkJCQlib29sICphbGxfdGFibGVzLAogCQkJCQkJCQkJCQli b29sICphbGxfc2VxdWVuY2VzLAogCQkJCQkJCQkJCQljb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcik7 CkBAIC00NTUsNiArNDU2LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0 KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAkJCQlUcmlnZ2Vy VHJhbnNpdGlvbnMgVHJpZ2dlclJlZmVyZW5jaW5nCiAJCQkJdmFjdXVtX3JlbGF0aW9uX2xpc3Qg b3B0X3ZhY3V1bV9yZWxhdGlvbl9saXN0CiAJCQkJZHJvcF9vcHRpb25fbGlzdCBwdWJfb2JqX2xp c3QgcHViX2FsbF9vYmpfdHlwZV9saXN0CisJCQkJcHViX2V4Y2VwdF9vYmpfbGlzdCBvcHRfcHVi X2V4Y2VwdF9jbGF1c2UKIAogJXR5cGUgPHJldGNsYXVzZT4gcmV0dXJuaW5nX2NsYXVzZQogJXR5 cGUgPG5vZGU+CXJldHVybmluZ19vcHRpb24KQEAgLTU5Miw2ICs1OTQsNyBAQCBzdGF0aWMgTm9k ZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywg Tm9kZSAqcXVlcnkpOwogJXR5cGUgPG5vZGU+CXZhcl92YWx1ZSB6b25lX3ZhbHVlCiAldHlwZSA8 cm9sZXNwZWM+IGF1dGhfaWRlbnQgUm9sZVNwZWMgb3B0X2dyYW50ZWRfYnkKICV0eXBlIDxwdWJs aWNhdGlvbm9iamVjdHNwZWM+IFB1YmxpY2F0aW9uT2JqU3BlYworJXR5cGUgPHB1YmxpY2F0aW9u b2JqZWN0c3BlYz4gUHVibGljYXRpb25FeGNlcHRPYmpTcGVjCiAldHlwZSA8cHVibGljYXRpb25h bGxvYmplY3RzcGVjPiBQdWJsaWNhdGlvbkFsbE9ialNwZWMKIAogJXR5cGUgPGtleXdvcmQ+IHVu cmVzZXJ2ZWRfa2V5d29yZCB0eXBlX2Z1bmNfbmFtZV9rZXl3b3JkCkBAIC0xMDc5Miw3ICsxMDc5 NSw3IEBAIEFsdGVyT3duZXJTdG10OiBBTFRFUiBBR0dSRUdBVEUgYWdncmVnYXRlX3dpdGhfYXJn dHlwZXMgT1dORVIgVE8gUm9sZVNwZWMKICAqCiAgKiBwdWJfYWxsX29ial90eXBlIGlzIG9uZSBv ZjoKICAqCi0gKgkJVEFCTEVTCisgKgkJVEFCTEVTIFtFWENFUFQgW1RBQkxFXSAoIHRhYmxlIFss IC4uLl0gKV0KICAqCQlTRVFVRU5DRVMKICAqCiAgKiBDUkVBVEUgUFVCTElDQVRJT04gRk9SIHB1 Yl9vYmogWywgLi4uXSBbV0lUSCBvcHRpb25zXQpAQCAtMTA4MTgsNyArMTA4MjEsOCBAQCBDcmVh dGVQdWJsaWNhdGlvblN0bXQ6CiAJCQkJCUNyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqbiA9IG1ha2VO b2RlKENyZWF0ZVB1YmxpY2F0aW9uU3RtdCk7CiAKIAkJCQkJbi0+cHVibmFtZSA9ICQzOwotCQkJ CQlwcmVwcm9jZXNzX3B1Yl9hbGxfb2JqdHlwZV9saXN0KCQ1LCAmbi0+Zm9yX2FsbF90YWJsZXMs CisJCQkJCXByZXByb2Nlc3NfcHViX2FsbF9vYmp0eXBlX2xpc3QoJDUsICZuLT5wdWJvYmplY3Rz LAorCQkJCQkJCQkJCQkJCSZuLT5mb3JfYWxsX3RhYmxlcywKIAkJCQkJCQkJCQkJCQkmbi0+Zm9y X2FsbF9zZXF1ZW5jZXMsCiAJCQkJCQkJCQkJCQkJeXlzY2FubmVyKTsKIAkJCQkJbi0+b3B0aW9u cyA9ICQ2OwpAQCAtMTA4NTgsNiArMTA4NjIsNyBAQCBQdWJsaWNhdGlvbk9ialNwZWM6CiAJCQkJ CSQkLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSAkMjsKIAkJCQkJJCQtPnB1YnRhYmxlLT5jb2x1bW5z ID0gJDM7CiAJCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2UgPSAkNDsKKwkJCQkJJCQtPmxv Y2F0aW9uID0gQDE7CiAJCQkJfQogCQkJfCBUQUJMRVMgSU5fUCBTQ0hFTUEgQ29sSWQKIAkJCQl7 CkBAIC0xMDkzMywxMSArMTA5MzgsMTkgQEAgcHViX29ial9saXN0OglQdWJsaWNhdGlvbk9ialNw ZWMKIAkJCQkJeyAkJCA9IGxhcHBlbmQoJDEsICQzKTsgfQogCTsKIAorb3B0X3B1Yl9leGNlcHRf Y2xhdXNlOgorCQkJRVhDRVBUIG9wdF90YWJsZSAnKCcgcHViX2V4Y2VwdF9vYmpfbGlzdCAnKScJ eyAkJCA9ICQ0OyB9CisJCQl8IC8qRU1QVFkqLwkJCQkJCQkJCQl7ICQkID0gTklMOyB9CisJCTsK KwogUHVibGljYXRpb25BbGxPYmpTcGVjOgotCQkJCUFMTCBUQUJMRVMKKwkJCQlBTEwgVEFCTEVT IG9wdF9wdWJfZXhjZXB0X2NsYXVzZQogCQkJCQl7CiAJCQkJCQkkJCA9IG1ha2VOb2RlKFB1Ymxp Y2F0aW9uQWxsT2JqU3BlYyk7CiAJCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OX0FM TF9UQUJMRVM7CisJCQkJCQkkJC0+ZXhjZXB0X3RhYmxlcyA9ICQzOworCQkJCQkJaWYoJCQtPmV4 Y2VwdF90YWJsZXMgIT0gTlVMTCkKKwkJCQkJCQlwcmVwcm9jZXNzX3B1Ym9ial9saXN0KCQkLT5l eGNlcHRfdGFibGVzLCB5eXNjYW5uZXIpOwogCQkJCQkJJCQtPmxvY2F0aW9uID0gQDE7CiAJCQkJ CX0KIAkJCQl8IEFMTCBTRVFVRU5DRVMKQEAgLTEwOTU0LDYgKzEwOTY3LDIzIEBAIHB1Yl9hbGxf b2JqX3R5cGVfbGlzdDoJUHVibGljYXRpb25BbGxPYmpTcGVjCiAJCQkJCXsgJCQgPSBsYXBwZW5k KCQxLCAkMyk7IH0KIAk7CiAKK1B1YmxpY2F0aW9uRXhjZXB0T2JqU3BlYzoKKwkJCSByZWxhdGlv bl9leHByCisJCQkJeworCQkJCQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CisJ CQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfRVhDRVBUX1RBQkxFOworCQkJCQkk JC0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKKwkJCQkJJCQtPnB1YnRh YmxlLT5leGNlcHQgPSB0cnVlOworCQkJCQkkJC0+cHVidGFibGUtPnJlbGF0aW9uID0gJDE7CisJ CQkJCSQkLT5sb2NhdGlvbiA9IEAxOworCQkJCX0KKwk7CisKK3B1Yl9leGNlcHRfb2JqX2xpc3Q6 IFB1YmxpY2F0aW9uRXhjZXB0T2JqU3BlYworCQkJCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0K KwkJCXwgcHViX2V4Y2VwdF9vYmpfbGlzdCAnLCcgUHVibGljYXRpb25FeGNlcHRPYmpTcGVjCisJ CQkJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KKwk7CiAKIC8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgogICoKQEAgLTE5ODEyLDggKzE5ODQyLDkgQEAgcGFyc2VQYXJ0aXRpb25TdHJhdGVneShjaGFy ICpzdHJhdGVneSwgaW50IGxvY2F0aW9uLCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKICAqIEFs c28sIGNoZWNrcyBpZiB0aGUgcHViX29iamVjdF90eXBlIGhhcyBiZWVuIHNwZWNpZmllZCBtb3Jl IHRoYW4gb25jZS4KICAqLwogc3RhdGljIHZvaWQKLXByZXByb2Nlc3NfcHViX2FsbF9vYmp0eXBl X2xpc3QoTGlzdCAqYWxsX29iamVjdHNfbGlzdCwgYm9vbCAqYWxsX3RhYmxlcywKLQkJCQkJCQkJ Ym9vbCAqYWxsX3NlcXVlbmNlcywgY29yZV95eXNjYW5fdCB5eXNjYW5uZXIpCitwcmVwcm9jZXNz X3B1Yl9hbGxfb2JqdHlwZV9saXN0KExpc3QgKmFsbF9vYmplY3RzX2xpc3QsIExpc3QgKipwdWJv YmplY3RzLAorCQkJCQkJCQlib29sICphbGxfdGFibGVzLCBib29sICphbGxfc2VxdWVuY2VzLAor CQkJCQkJCQljb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKIHsKIAlpZiAoIWFsbF9vYmplY3RzX2xp c3QpCiAJCXJldHVybjsKQEAgLTE5ODMzLDYgKzE5ODY0LDcgQEAgcHJlcHJvY2Vzc19wdWJfYWxs X29ianR5cGVfbGlzdChMaXN0ICphbGxfb2JqZWN0c19saXN0LCBib29sICphbGxfdGFibGVzLAog CQkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKG9iai0+bG9jYXRpb24pKTsKIAogCQkJKmFsbF90YWJs ZXMgPSB0cnVlOworCQkJKnB1Ym9iamVjdHMgPSBsaXN0X2NvbmNhdCgqcHVib2JqZWN0cywgb2Jq LT5leGNlcHRfdGFibGVzKTsKIAkJfQogCQllbHNlIGlmIChvYmotPnB1Ym9ianR5cGUgPT0gUFVC TElDQVRJT05fQUxMX1NFUVVFTkNFUykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvdGFibGVzeW5jLmMKaW5kZXggMTlhM2MyMWE4NjMuLjM1YmI0NDU5NDNjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTcxNiwyMSArNzE2 LDI4IEBAIGNvcHlfcmVhZF9kYXRhKHZvaWQgKm91dGJ1ZiwgaW50IG1pbnJlYWQsIGludCBtYXhy ZWFkKQogICogbWVzc2FnZSBwcm92aWRlcyBkdXJpbmcgcmVwbGljYXRpb24uCiAgKgogICogVGhp cyBmdW5jdGlvbiBhbHNvIHJldHVybnMgKGEpIHRoZSByZWxhdGlvbiBxdWFsaWZpY2F0aW9ucyB0 byBiZSB1c2VkIGluCi0gKiB0aGUgQ09QWSBjb21tYW5kLCBhbmQgKGIpIHdoZXRoZXIgdGhlIHJl bW90ZSByZWxhdGlvbiBoYXMgcHVibGlzaGVkIGFueQotICogZ2VuZXJhdGVkIGNvbHVtbi4KKyAq IHRoZSBDT1BZIGNvbW1hbmQsIChiKSB3aGV0aGVyIHRoZSByZW1vdGUgcmVsYXRpb24gaGFzIHB1 Ymxpc2hlZCBhbnkKKyAqIGdlbmVyYXRlZCBjb2x1bW4sIGFuZCAoYykgY29tcHV0ZXMgdGhlIGVm ZmVjdGl2ZSBzZXQgb2YgcmVsYXRpb25zIHRvIGJlIHVzZWQKKyAqIGFzIENPUFkgc291cmNlcyB3 aGVuIGV4Y2x1c2lvbnMgYXJlIHByZXNlbnQuIFdoZW4gbm8gZXhjbHVzaW9ucyBleGlzdCwgdGhl CisgKiBsaXN0IHJlbWFpbnMgZW1wdHkgYW5kIHRoZSByb290IHJlbGF0aW9uIGlzIHVzZWQgYXMt aXMuIFdoZW4gZXhjbHVzaW9ucworICogZXhpc3QsIHRoZSBsaXN0IGNvbnRhaW5zIGxlYWYgcmVs YXRpb25zIHRoYXQgYXJlIG5vdCBleGNsdWRlZCBhbmQgbXVzdCBiZQorICogY29tYmluZWQgdXNp bmcgVU5JT04gQUxMLgogICovCiBzdGF0aWMgdm9pZAogZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8o Y2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwgTG9naWNhbFJlcFJlbGF0aW9uICpscmVsLAot CQkJCQkJTGlzdCAqKnF1YWwsIGJvb2wgKmdlbmNvbF9wdWJsaXNoZWQpCisJCQkJCQlMaXN0ICoq cXVhbCwgYm9vbCAqZ2VuY29sX3B1Ymxpc2hlZCwKKwkJCQkJCUxpc3QgKiplZmZlY3RpdmVfcmVs YXRpb25zKQogewogCVdhbFJjdkV4ZWNSZXN1bHQgKnJlczsKIAlTdHJpbmdJbmZvRGF0YSBjbWQ7 CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JT2lkCQkJdGFibGVSb3dbXSA9IHtPSURPSUQsIENI QVJPSUQsIENIQVJPSUR9OworCU9pZAkJCXRhYmxlUm93W10gPSB7T0lET0lELCBDSEFST0lELCBD SEFST0lELCBCT09MT0lEfTsKIAlPaWQJCQlhdHRyUm93W10gPSB7SU5UMk9JRCwgVEVYVE9JRCwg T0lET0lELCBCT09MT0lELCBCT09MT0lEfTsKIAlPaWQJCQlxdWFsUm93W10gPSB7VEVYVE9JRH07 CisJT2lkCQkJZmlsdGVydGFibGVSb3dbXSA9IHtURVhUT0lELCBURVhUT0lEfTsKIAlib29sCQlp c251bGw7CiAJaW50CQkJbmF0dDsKKwlib29sCQlpc19wYXJ0aXRpb247CiAJU3RyaW5nSW5mbwlw dWJfbmFtZXMgPSBOVUxMOwogCUJpdG1hcHNldCAgKmluY2x1ZGVkX2NvbHMgPSBOVUxMOwogCWlu dAkJCXNlcnZlcl92ZXJzaW9uID0gd2FscmN2X3NlcnZlcl92ZXJzaW9uKExvZ1JlcFdvcmtlcldh bFJjdkNvbm4pOwpAQCAtNzQwLDcgKzc0Nyw3IEBAIGZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGNo YXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsIExvZ2ljYWxSZXBSZWxhdGlvbiAqbHJlbCwKIAog CS8qIEZpcnN0IGZldGNoIE9pZCBhbmQgcmVwbGljYSBpZGVudGl0eS4gKi8KIAlpbml0U3RyaW5n SW5mbygmY21kKTsKLQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJTRUxFQ1QgYy5vaWQsIGMucmVs cmVwbGlkZW50LCBjLnJlbGtpbmQiCisJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiU0VMRUNUIGMu b2lkLCBjLnJlbHJlcGxpZGVudCwgYy5yZWxraW5kLCBjLnJlbGlzcGFydGl0aW9uIgogCQkJCQkg IiAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGMiCiAJCQkJCSAiICBJTk5FUiBKT0lOIHBnX2Nh dGFsb2cucGdfbmFtZXNwYWNlIG4iCiAJCQkJCSAiICAgICAgICBPTiAoYy5yZWxuYW1lc3BhY2Ug PSBuLm9pZCkiCkBAIC03NzAsNiArNzc3LDggQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hh ciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwgTG9naWNhbFJlcFJlbGF0aW9uICpscmVsLAogCUFz c2VydCghaXNudWxsKTsKIAlscmVsLT5yZWxraW5kID0gRGF0dW1HZXRDaGFyKHNsb3RfZ2V0YXR0 cihzbG90LCAzLCAmaXNudWxsKSk7CiAJQXNzZXJ0KCFpc251bGwpOworCWlzX3BhcnRpdGlvbiA9 IERhdHVtR2V0Qm9vbChzbG90X2dldGF0dHIoc2xvdCwgNCwgJmlzbnVsbCkpOworCUFzc2VydCgh aXNudWxsKTsKIAogCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CiAJd2FscmN2 X2NsZWFyX3Jlc3VsdChyZXMpOwpAQCAtOTU0LDYgKzk2Myw3NSBAQCBmZXRjaF9yZW1vdGVfdGFi bGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVsYXRpb24g KmxyZWwsCiAKIAl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7CiAKKwlpZiAoc2VydmVyX3ZlcnNp b24gPj0gMTkwMDAwICYmICFpc19wYXJ0aXRpb24gJiYKKwkJbHJlbC0+cmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJcmVzZXRTdHJpbmdJbmZvKCZjbWQpOworCisJ CS8qCisJCSAqIFRoaXMgcXVlcnkgcmVjdXJzaXZlbHkgdHJhdmVyc2VzIHRoZSBpbmhlcml0YW5j ZSAocGFydGl0aW9uKSB0cmVlCisJCSAqIHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIHRhYmxlIE9J RCBhbmQgZGV0ZXJtaW5lcyB3aGljaCBsZWFmCisJCSAqIHJlbGF0aW9ucyBzaG91bGQgYmUgaW5j bHVkZWQgZm9yIHJlcGxpY2F0aW9uLiBFeGNsdXNpb24gcHJvcGFnYXRlcworCQkgKiBmcm9tIHBh cmVudCB0byBjaGlsZCwgYW5kIGEgcmVsYXRpb24gaXMgYWxzbyB0cmVhdGVkIGFzIGV4Y2x1ZGVk IGlmCisJCSAqIGl0IGlzIGV4cGxpY2l0bHkgbWFya2VkIHdpdGggcHJleGNlcHQgPSB0cnVlIGlu IHBnX3B1YmxpY2F0aW9uX3JlbAorCQkgKiBmb3IgdGhlIHNwZWNpZmllZCBwdWJsaWNhdGlvbnMu IFRoZSBmaW5hbCByZXN1bHQgcmV0dXJucyBvbmx5CisJCSAqIG5vbiBleGNsdWRlZCBsZWFmIHJl bGF0aW9ucy4KKwkJICovCisJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIlNFTEVDVCBzY2hlbWFu YW1lLCByZWxuYW1lIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX2VmZmVjdGl2ZV90YWJsZXMoJXUs IEFSUkFZWyVzXSk7IiwKKwkJCQkJCSBscmVsLT5yZW1vdGVpZCwKKwkJCQkJCSBwdWJfbmFtZXMt PmRhdGEpOworCisJCWVsb2coTE9HLCAiRXhlY3V0aW5nIHF1ZXJ5IHRvIGdldCB0aGUgdGFibGVz OlxuJXMiLCBjbWQuZGF0YSk7CisJCXJlcyA9IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldhbFJj dkNvbm4sIGNtZC5kYXRhLAorCQkJCQkJICBsZW5ndGhvZihmaWx0ZXJ0YWJsZVJvdyksIGZpbHRl cnRhYmxlUm93KTsKKworCQlpZiAocmVzLT5zdGF0dXMgIT0gV0FMUkNWX09LX1RVUExFUykKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUp LAorCQkJCQllcnJtc2coImNvdWxkIG5vdCBnZXQgZWZmZWN0aXZlIGluY2x1ZGVkIHRhYmxlIGxp c3QgZm9yIHRhYmxlIFwiJXMuJXNcIiBmcm9tIHB1Ymxpc2hlcjogJXMiLAorCQkJCQkJCW5zcG5h bWUsIHJlbG5hbWUsIHJlcy0+ZXJyKSk7CisKKwkJLyoKKwkJICogU3RvcmUgdGhlIHRhYmxlcyBh cyBhIGxpc3Qgb2Ygc2NoZW1hbmFtZSBhbmQgdGFibGVuYW1lLgorCQkgKi8KKwkJc2xvdCA9IE1h a2VTaW5nbGVUdXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVzYywgJlRUU09wc01pbmltYWxUdXBs ZSk7CisJCXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChyZXMtPnR1cGxlc3RvcmUsIHRy dWUsIGZhbHNlLCBzbG90KSkKKwkJeworCQkJUXVhbGlmaWVkUmVsYXRpb25OYW1lICpyZWxpbmZv ID0gcGFsbG9jX29iamVjdChRdWFsaWZpZWRSZWxhdGlvbk5hbWUpOworCisJCQlyZWxpbmZvLT5z Y2hlbWFuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dldGF0dHIoc2xvdCwgMSwgJmlz bnVsbCkpOworCQkJQXNzZXJ0KCFpc251bGwpOworCQkJcmVsaW5mby0+cmVsbmFtZSA9IFRleHRE YXR1bUdldENTdHJpbmcoc2xvdF9nZXRhdHRyKHNsb3QsIDIsICZpc251bGwpKTsKKwkJCUFzc2Vy dCghaXNudWxsKTsKKworCQkJKmVmZmVjdGl2ZV9yZWxhdGlvbnMgPSBsYXBwZW5kKCplZmZlY3Rp dmVfcmVsYXRpb25zLCByZWxpbmZvKTsKKworCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCX0K KworCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCisJCS8qCisJCSAqIElm IHRoZXJlIGlzIGV4YWN0bHkgb25lIGl0ZW0gaW4gdGhlIGVmZmVjdGl2ZV9yZWxhdGlvbnMgbGlz dCBhbmQgaXQKKwkJICogZXF1YWxzIHRoZSB0YWJsZSBiZWluZyBwcm9jZXNzZWQsIHRoYXQgbWVh bnMgbm8gYWN0dWFsIGV4Y2x1c2lvbgorCQkgKiBvY2N1cnJlZC4KKwkJICovCisJCWlmIChsaXN0 X2xlbmd0aCgqZWZmZWN0aXZlX3JlbGF0aW9ucykgPT0gMSkKKwkJeworCQkJUXVhbGlmaWVkUmVs YXRpb25OYW1lICpyZWxpbmZvOworCisJCQlyZWxpbmZvID0gbGluaXRpYWwoKmVmZmVjdGl2ZV9y ZWxhdGlvbnMpOworCQkJaWYgKHN0cmNtcChuc3BuYW1lLCByZWxpbmZvLT5zY2hlbWFuYW1lKSA9 PSAwICYmCisJCQkJc3RyY21wKHJlbG5hbWUsIHJlbGluZm8tPnJlbG5hbWUpID09IDApCisJCQl7 CisJCQkJcGZyZWUocmVsaW5mby0+c2NoZW1hbmFtZSk7CisJCQkJcGZyZWUocmVsaW5mby0+cmVs bmFtZSk7CisJCQkJbGlzdF9mcmVlX2RlZXAoKmVmZmVjdGl2ZV9yZWxhdGlvbnMpOworCQkJCSpl ZmZlY3RpdmVfcmVsYXRpb25zID0gTklMOworCQkJfQorCQl9CisJfQorCiAJLyoKIAkgKiBHZXQg cmVsYXRpb24ncyByb3cgZmlsdGVyIGV4cHJlc3Npb25zLiBESVNUSU5DVCBhdm9pZHMgdGhlIHNh bWUKIAkgKiBleHByZXNzaW9uIG9mIGEgdGFibGUgaW4gbXVsdGlwbGUgcHVibGljYXRpb25zIGZy b20gYmVpbmcgaW5jbHVkZWQKQEAgLTEwNDMsNiArMTEyMSw3IEBAIGNvcHlfdGFibGUoUmVsYXRp b24gcmVsKQogCUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsbWFwZW50cnk7CiAJTG9naWNhbFJl cFJlbGF0aW9uIGxyZWw7CiAJTGlzdAkgICAqcXVhbCA9IE5JTDsKKwlMaXN0CSAgICplZmZlY3Rp dmVfcmVsYXRpb25zID0gTklMOwogCVdhbFJjdkV4ZWNSZXN1bHQgKnJlczsKIAlTdHJpbmdJbmZv RGF0YSBjbWQ7CiAJQ29weUZyb21TdGF0ZSBjc3RhdGU7CkBAIC0xMDU0LDcgKzExMzMsNyBAQCBj b3B5X3RhYmxlKFJlbGF0aW9uIHJlbCkKIAkvKiBHZXQgdGhlIHB1Ymxpc2hlciByZWxhdGlvbiBp bmZvLiAqLwogCWZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGdldF9uYW1lc3BhY2VfbmFtZShSZWxh dGlvbkdldE5hbWVzcGFjZShyZWwpKSwKIAkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpLCAmbHJlbCwgJnF1YWwsCi0JCQkJCQkJJmdlbmNvbF9wdWJsaXNoZWQpOworCQkJCQkJCSZn ZW5jb2xfcHVibGlzaGVkLCAmZWZmZWN0aXZlX3JlbGF0aW9ucyk7CiAKIAkvKiBQdXQgdGhlIHJl bGF0aW9uIGludG8gcmVsbWFwLiAqLwogCWxvZ2ljYWxyZXBfcmVsbWFwX3VwZGF0ZSgmbHJlbCk7 CkBAIC0xMDY2LDEyICsxMTQ1LDY0IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQogCS8qIFN0 YXJ0IGNvcHkgb24gdGhlIHB1Ymxpc2hlci4gKi8KIAlpbml0U3RyaW5nSW5mbygmY21kKTsKIAor CisJaWYgKGVmZmVjdGl2ZV9yZWxhdGlvbnMgJiYgbGlzdF9sZW5ndGgoZWZmZWN0aXZlX3JlbGF0 aW9ucykpCisJeworCQlib29sIGZpcnN0ID0gdHJ1ZTsKKworCQkvKgorCQkgKiBCdWlsZCBhIHNp bmdsZSBDT1BZIGNvbW1hbmQgdG8gc3luY2hyb25pemUgYWxsIHJlc29sdmVkIHJlbGF0aW9ucwor CQkgKiBpbnRvIHRoZSByb290IHRhYmxlLgorCQkgKgorCQkgKiBUaGUgYXJyYXkgJ2VmZmVjdGl2 ZV9yZWxhdGlvbnMnIGNvbnRhaW5zIHRoZSBsZWFmIHRhYmxlcyBvZgorCQkgKiBwYXJ0aXRpb24g aGllcmFyY2hpZXMsIHdpdGggZXhjbHVkZWQgc3VidHJlZXMgcmVtb3ZlZCBhY2NvcmRpbmcgdG8K KwkJICogdGhlIEVYQ0VQVCBjbGF1c2VzLiBUaGlzIGFwcGxpZXMgb25seSB3aGVuCisJCSAqICdw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCcgaXMgZW5hYmxlZCwgc2luY2UgdGhlIGluaXRpYWwg c3luYyBtdXN0CisJCSAqIHJvdXRlIGFsbCBjaGFuZ2VzIHRvIHRoZSByb290IHRhYmxlLgorCQkg KgorCQkgKiBXZSBjb25zdHJ1Y3QgYSBVTklPTiBBTEwgcXVlcnkgdGhhdCBjb21iaW5lcyBkYXRh IGZyb20gbXVsdGlwbGUgbGVhZgorCQkgKiByZWxhdGlvbnMgaW50byBvbmUgc3ViLUNPUFkgc3Rh dGVtZW50LCBlbnN1cmluZyBhbGwgcm93cyBhcmUgY29waWVkCisJCSAqIGNvbnNpc3RlbnRseSBp bnRvIHRoZSByb290IHRhYmxlLgorCQkgKi8KKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21k LCAiQ09QWSAoXG4iKTsKKwkJZm9yZWFjaF9wdHIoUXVhbGlmaWVkUmVsYXRpb25OYW1lLCByZWxp bmZvLCBlZmZlY3RpdmVfcmVsYXRpb25zKQorCQl7CisJCQlpZiAoIWZpcnN0KQorCQkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIlVOSU9OIEFMTFxuIik7CisKKwkJCWZpcnN0ID0gZmFs c2U7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIlNFTEVDVCAiKTsKKworCQkJ LyogSWYgdGhlIHRhYmxlIGhhcyBjb2x1bW5zLCB0aGVuIHNwZWNpZnkgdGhlIGNvbHVtbnMgKi8K KwkJCWlmIChscmVsLm5hdHRzKQorCQkJeworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbHJlbC5u YXR0czsgaSsrKQorCQkJCXsKKwkJCQkJaWYgKGkgPiAwKQorCQkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmY21kLCAiLCAiKTsKKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQs IHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkpOworCQkJCX0KKwkJCX0KKwkJCWVs c2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIgKiAiKTsKKworCQkJYXBwZW5k U3RyaW5nSW5mbygmY21kLCAiIEZST00gICVzXG4iLAorCQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRf aWRlbnRpZmllcihyZWxpbmZvLT5zY2hlbWFuYW1lLAorCQkJCQkJCQkJCQkJCQlyZWxpbmZvLT5y ZWxuYW1lKSk7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIpXG4iKTsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiVE8gU1RET1VUIik7CisJfQogCS8qIFJl Z3VsYXIgb3IgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBubyByb3cgZmlsdGVyIG9yIGdlbmVyYXRl ZCBjb2x1bW5zICovCi0JaWYgKChscmVsLnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiB8fCBs cmVsLnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKLQkJJiYgcXVhbCA9PSBO SUwgJiYgIWdlbmNvbF9wdWJsaXNoZWQpCisJZWxzZSBpZiAoKGxyZWwucmVsa2luZCA9PSBSRUxL SU5EX1JFTEFUSU9OIHx8CisJCQkgIGxyZWwucmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVE X1RBQkxFKSAmJgorCQkJIHF1YWwgPT0gTklMICYmICFnZW5jb2xfcHVibGlzaGVkKQogCXsKIAkJ YXBwZW5kU3RyaW5nSW5mbygmY21kLCAiQ09QWSAlcyIsCi0JCQkJCQkgcXVvdGVfcXVhbGlmaWVk X2lkZW50aWZpZXIobHJlbC5uc3BuYW1lLCBscmVsLnJlbG5hbWUpKTsKKwkJCQkJCXF1b3RlX3F1 YWxpZmllZF9pZGVudGlmaWVyKGxyZWwubnNwbmFtZSwgbHJlbC5yZWxuYW1lKSk7CiAKIAkJLyog SWYgdGhlIHRhYmxlIGhhcyBjb2x1bW5zLCB0aGVuIHNwZWNpZnkgdGhlIGNvbHVtbnMgKi8KIAkJ aWYgKGxyZWwubmF0dHMpCkBAIC0xMTU3LDYgKzEyODgsNyBAQCBjb3B5X3RhYmxlKFJlbGF0aW9u IHJlbCkKIAl9CiAKIAlyZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBj bWQuZGF0YSwgMCwgTlVMTCk7CisJZWxvZyhMT0csICJUYWJsZXN5bmMgd29ya2VyOiBFeGVjdXRp bmcgcXVlcnkgdG8gZ2V0IHRoZSBpbml0aWFsIHN5bmMgZGF0YTpcbiVzIiwgY21kLmRhdGEpOwog CXBmcmVlKGNtZC5kYXRhKTsKIAlpZiAocmVzLT5zdGF0dXMgIT0gV0FMUkNWX09LX0NPUFlfT1VU KQogCQllcmVwb3J0KEVSUk9SLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v cGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bn b3V0cHV0LmMKaW5kZXggZTAxNmY2NGUwYjMuLjEyMTBhMTU4YzcxIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTE3OTcsMTIgKzE3OTcsMTcgQEAg cGdvdXRwdXRfc2h1dGRvd24oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4KQogICogdG8gc2ls ZW50bHkgY29udGludWUgdGhlIHJlcGxpY2F0aW9uIGluIHRoZSBhYnNlbmNlIG9mIGEgbWlzc2lu ZyBwdWJsaWNhdGlvbi4KICAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSB3ZSBhbGxvdyB0aGUg dXNlcnMgdG8gY3JlYXRlIHB1YmxpY2F0aW9ucyBhZnRlciB0aGV5CiAgKiBoYXZlIHNwZWNpZmll ZCB0aGUgcmVxdWlyZWQgcHVibGljYXRpb25zIGF0IHRoZSB0aW1lIG9mIHJlcGxpY2F0aW9uIHN0 YXJ0LgorICogV2UgYWxzbyBlbmZvcmNlIHRoYXQgbm8gbW9yZSB0aGFuIG9uZSBwdWJsaWNhdGlv biBpbiB0aGUgbGlzdCBtYXkgY29udGFpbgorICogYW4gRVhDRVBUIFRBQkxFIGNsYXVzZS4gVXNp bmcgbXVsdGlwbGUgcHVibGljYXRpb25zIHdpdGggZXhjZXB0aW9ucyBpcworICogY3VycmVudGx5 IHVuc3VwcG9ydGVkIHRvIHByZXZlbnQgbm9uLWRldGVybWluaXN0aWMgZmlsdGVyaW5nIGJlaGF2 aW9yCisgKiBhY3Jvc3Mgb3ZlcmxhcHBpbmcgcHVibGljYXRpb24gc2V0cy4KICAqLwogc3RhdGlj IExpc3QgKgogTG9hZFB1YmxpY2F0aW9ucyhMaXN0ICpwdWJuYW1lcykKIHsKIAlMaXN0CSAgICpy ZXN1bHQgPSBOSUw7CiAJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqZXhjZXB0X3B1Yl9uYW1l cyA9IE5JTDsKIAogCWZvcmVhY2gobGMsIHB1Ym5hbWVzKQogCXsKQEAgLTE4MTAsNyArMTgxNSwx MyBAQCBMb2FkUHVibGljYXRpb25zKExpc3QgKnB1Ym5hbWVzKQogCQlQdWJsaWNhdGlvbiAqcHVi ID0gR2V0UHVibGljYXRpb25CeU5hbWUocHVibmFtZSwgdHJ1ZSk7CiAKIAkJaWYgKHB1YikKKwkJ ewogCQkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIHB1Yik7CisKKwkJCS8qIENoZWNrIGlmIHRo aXMgcHVibGljYXRpb24gaGFzIGFuIEVYQ0VQVCBUQUJMRSBsaXN0LiAqLworCQkJaWYgKHB1Ymxp Y2F0aW9uX2hhc19hbnlfZXhjZXB0aW9uKHB1Yi0+b2lkKSkKKwkJCQlleGNlcHRfcHViX25hbWVz ID0gbGFwcGVuZChleGNlcHRfcHViX25hbWVzLCBwc3RyZHVwKHB1Ym5hbWUpKTsKKwkJfQogCQll bHNlCiAJCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJCWVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9U X0lOX1BSRVJFUVVJU0lURV9TVEFURSksCkBAIC0xODE5LDYgKzE4MzAsMzQgQEAgTG9hZFB1Ymxp Y2F0aW9ucyhMaXN0ICpwdWJuYW1lcykKIAkJCQkJZXJyaGludCgiQ3JlYXRlIHRoZSBwdWJsaWNh dGlvbiBpZiBpdCBkb2VzIG5vdCBleGlzdC4iKSk7CiAJfQogCisJLyoKKwkgKiBJZiBtb3JlIHRo YW4gb25lIHB1YmxpY2F0aW9uIGhhcyBhbiBFWENFUFQgbGlzdCwgdGhyb3cgYW4gZXJyb3IgbGlz dGluZworCSAqIGFsbCB0aGUgcHJvYmxlbWF0aWMgcHVibGljYXRpb25zLgorCSAqLworCWlmIChs aXN0X2xlbmd0aChleGNlcHRfcHViX25hbWVzKSA+IDEpCisJeworCQlTdHJpbmdJbmZvRGF0YSBw dWJfbmFtZXNfc3RyOworCQlib29sCQlmaXJzdCA9IHRydWU7CisKKwkJaW5pdFN0cmluZ0luZm8o JnB1Yl9uYW1lc19zdHIpOworCisJCWZvcmVhY2hfcHRyKGNoYXIsIG5hbWUsIGV4Y2VwdF9wdWJf bmFtZXMpCisJCXsKKwkJCWlmICghZmlyc3QpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm cHViX25hbWVzX3N0ciwgIiwgIik7CisKKwkJCWFwcGVuZFN0cmluZ0luZm8oJnB1Yl9uYW1lc19z dHIsICJcIiVzXCIiLCBuYW1lKTsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0KKworCQllcmVwb3J0 KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJ CWVycm1zZygiY2Fubm90IHVzZSBtdWx0aXBsZSBwdWJsaWNhdGlvbnMgd2l0aCBFWENFUFQgVEFC TEUgbGlzdHMiKSwKKwkJCQllcnJkZXRhaWwoIlRoZSBmb2xsb3dpbmcgcHVibGljYXRpb25zIGhh dmUgZXhjZXB0aW9uczogJXMuIiwKKwkJCQkJCSAgcHViX25hbWVzX3N0ci5kYXRhKSk7CisJfQor CisJbGlzdF9mcmVlX2RlZXAoZXhjZXB0X3B1Yl9uYW1lcyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0K IApAQCAtMjA0MSw2ICsyMDgwLDY1IEBAIHNldF9zY2hlbWFfc2VudF9pbl9zdHJlYW1lZF90eG4o UmVsYXRpb25TeW5jRW50cnkgKmVudHJ5LCBUcmFuc2FjdGlvbklkIHhpZCkKIAlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3R4KTsKIH0KIAorLyoKKyAqIHB1YmxpY2F0aW9uX2hhc19lZmZlY3Rp dmVfdGFibGVzCisgKgorICogQ2hlY2tzIGlmIHRoZSBwdWJsaWNhdGlvbiBoYXMgYW55IGVmZmVj dGl2ZSBkYXRhIGluIGEgcGFydGl0aW9uIHRyZWUuCisgKiBSZXR1cm5zIHRydWUgaWYgYXQgbGVh c3Qgb25lIGxlYWYgaXMgTk9UIGV4Y2x1ZGVkLgorICovCitzdGF0aWMgYm9vbAorcHVibGljYXRp b25faGFzX2VmZmVjdGl2ZV90YWJsZXMoT2lkIHJvb3RfcmVsaWQsIE9pZCBwdWJpZCkKK3sKKwlM aXN0CSAgICphbGxfbGVhdmVzID0gTklMOworCWJvb2wJCWF0X2xlYXN0X29uZV9hbGxvd2VkID0g ZmFsc2U7CisKKwkvKiBHZXQgYWxsIGxlYWYgcmVsYXRpb25zIGluIHRoZSBoaWVyYXJjaHkgKi8K KwlhbGxfbGVhdmVzID0gR2V0UHViUGFydGl0aW9uT3B0aW9uUmVsYXRpb25zKE5JTCwKKwkJCQkJ CQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfTEVBRiwKKwkJCQkJCQkJCQkJCXJvb3RfcmVsaWQpOwor CisJLyoKKwkgKiBUcmF2ZXJzZSBsZWF2ZXMuIElmIHdlIGZpbmQgZXZlbiBPTkUgbGVhZiB0aGF0 IGlzIG5vdCBleGNsdWRlZCBieSB0aGUKKwkgKiBwdWJsaWNhdGlvbidzIEVYQ0VQVCBsaXN0LCB0 aGUgdHJlZSBpcyBlZmZlY3RpdmUuCisJICovCisJZm9yZWFjaF9vaWQoY3Vycl9yZWxpZCwgYWxs X2xlYXZlcykKKwl7CisJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0 b3JzKGN1cnJfcmVsaWQpOworCQlib29sCQlyZWxhdGlvbl9pbl9leGNlcHQgPSBmYWxzZTsKKwor CQkvKiAxLiBDaGVjayBpZiB0aGUgbGVhZiBpdHNlbGYgaXMgYW4gZXhjZXB0aW9uICovCisJCWlm IChpc19yZWxhdGlvbl9leGNsdWRlZChjdXJyX3JlbGlkLCBwdWJpZCkpCisJCQlyZWxhdGlvbl9p bl9leGNlcHQgPSB0cnVlOworCQllbHNlCisJCXsKKwkJCS8qIENoZWNrIGlmIGFueSBhbmNlc3Rv ciBpcyBhbiBleGNlcHRpb24gKi8KKwkJCWZvcmVhY2hfb2lkKGFuY2VzdG9yLCBhbmNlc3RvcnMp CisJCQl7CisJCQkJaWYgKGlzX3JlbGF0aW9uX2V4Y2x1ZGVkKGFuY2VzdG9yLCBwdWJpZCkpCisJ CQkJeworCQkJCQlyZWxhdGlvbl9pbl9leGNlcHQgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9 CisJCQl9CisJCX0KKworCQlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsKKworCQkvKgorCQkgKiBJZiB0 aGlzIGxlYWYgaXMgbm90IGxpc3RlZCBpbiB0aGUgRVhDRVBUIGNsYXVzZSwgdGhlIHB1YmxpY2F0 aW9uCisJCSAqIGVmZmVjdGl2ZWx5IGluY2x1ZGVzIGRhdGEgZnJvbSB0aGlzIHBhcnRpdGlvbiB0 cmVlLgorCQkgKi8KKwkJaWYgKCFyZWxhdGlvbl9pbl9leGNlcHQpCisJCXsKKwkJCWF0X2xlYXN0 X29uZV9hbGxvd2VkID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbGlzdF9mcmVlKGFs bF9sZWF2ZXMpOworCXJldHVybiBhdF9sZWFzdF9vbmVfYWxsb3dlZDsKK30KKwogLyoKICAqIEZp bmQgb3IgY3JlYXRlIGVudHJ5IGluIHRoZSByZWxhdGlvbiBzY2hlbWEgY2FjaGUuCiAgKgpAQCAt MjA4OCw3ICsyMTg2LDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwg UmVsYXRpb24gcmVsYXRpb24pCiAJaWYgKCFlbnRyeS0+cmVwbGljYXRlX3ZhbGlkKQogCXsKIAkJ T2lkCQkJc2NoZW1hSWQgPSBnZXRfcmVsX25hbWVzcGFjZShyZWxpZCk7Ci0JCUxpc3QJICAgKnB1 YmlkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbGlkKTsKKwkJTGlzdAkgICAqcHViaWRz ID0gTklMOwogCiAJCS8qCiAJCSAqIFdlIGRvbid0IGFjcXVpcmUgYSBsb2NrIG9uIHRoZSBuYW1l c3BhY2Ugc3lzdGVtIHRhYmxlIGFzIHdlIGJ1aWxkCkBAIC0yMTAyLDYgKzIyMDAsMTEgQEAgZ2V0 X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJ CWJvb2wJCWFtX3BhcnRpdGlvbiA9IGdldF9yZWxfcmVsaXNwYXJ0aXRpb24ocmVsaWQpOwogCQlj aGFyCQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHJlbGlkKTsKIAkJTGlzdAkgICAqcmVsX3B1 YmxpY2F0aW9ucyA9IE5JTDsKKwkJYm9vbAkJcm9vdF9wdWJsaXNoZWRfdmlhX2FsbHRhYmxlcyA9 IGZhbHNlOworCQlPaWQJCQlyb290X2FuY2VzdG9yID0gSW52YWxpZE9pZDsKKwkJTGlzdAkgICAq YW5jZXN0b3JzID0gTklMOworCisJCUdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbGlkLCAmcHVi aWRzLCBOVUxMKTsKIAogCQkvKiBSZWxvYWQgcHVibGljYXRpb25zIGlmIG5lZWRlZCBiZWZvcmUg dXNlLiAqLwogCQlpZiAoIXB1YmxpY2F0aW9uc192YWxpZCkKQEAgLTIxODAsNiArMjI4MywzNCBA QCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlv bikKIAkJZW50cnktPmVzdGF0ZSA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAw LCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkpOwogCisJCS8qCisJCSAqIEZvciBwYXJ0aXRpb25z LCBwcmUtZGV0ZXJtaW5lIGlmIHRoZSB0b3AtbW9zdCBhbmNlc3RvciBpcyBjb3ZlcmVkCisJCSAq IGJ5IGFueSAnRk9SIEFMTCBUQUJMRVMnIHB1YmxpY2F0aW9uIHRoYXQgdXNlcworCQkgKiAncHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QnIGFuZCBhbiAnRVhDRVBUJyBjbGF1c2UuCisJCSAqCisJ CSAqIFRoaXMgcHJlLWNhbGN1bGF0aW9uIGlzIHZpdGFsIGZvciByZXNvbHZpbmcgb3ZlcmxhcCBj b25mbGljdHM6IGlmIGEKKwkJICogcGFydGl0aW9uIGlzIGV4Y2x1ZGVkIGdsb2JhbGx5IHZpYSBh biBFWENFUFQgY2xhdXNlIGJ1dCBpbmNsdWRlZAorCQkgKiBleHBsaWNpdGx5IGVsc2V3aGVyZSAo dGFibGUvc2NoZW1hIGxldmVsKSwgaXQgbXVzdCBzdGlsbCBiZSByb3V0ZWQKKwkJICogdmlhIHRo ZSByb290IGlkZW50aXR5IGlmIHRoYXQgcm9vdCBpcyBwdWJsaXNoZWQuCisJCSAqLworCQlpZiAo YW1fcGFydGl0aW9uKQorCQl7CisJCQlhbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9y cyhyZWxpZCk7CisJCQlyb290X2FuY2VzdG9yID0gbGxhc3Rfb2lkKGFuY2VzdG9ycyk7CisKKwkJ CWZvcmVhY2hfcHRyKFB1YmxpY2F0aW9uLCBwdWJpbmZvLCBkYXRhLT5wdWJsaWNhdGlvbnMpCisJ CQl7CisJCQkJaWYgKHB1YmluZm8tPmFsbHRhYmxlcyAmJiBwdWJpbmZvLT5wdWJ2aWFyb290ICYm CisJCQkJCXB1YmxpY2F0aW9uX2hhc19hbnlfZXhjZXB0aW9uKHB1YmluZm8tPm9pZCkgJiYKKwkJ CQkJcHVibGljYXRpb25faGFzX2VmZmVjdGl2ZV90YWJsZXMocm9vdF9hbmNlc3RvciwKKwkJCQkJ CQkJCQkJCQkgcHViaW5mby0+b2lkKSkKKwkJCQl7CisJCQkJCXJvb3RfcHVibGlzaGVkX3ZpYV9h bGx0YWJsZXMgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwogCQkvKgog CQkgKiBCdWlsZCBwdWJsaWNhdGlvbiBjYWNoZS4gV2UgY2FuJ3QgdXNlIG9uZSBwcm92aWRlZCBi eSByZWxjYWNoZSBhcwogCQkgKiByZWxjYWNoZSBjb25zaWRlcnMgYWxsIHB1YmxpY2F0aW9ucyB0 aGF0IHRoZSBnaXZlbiByZWxhdGlvbiBpcyBpbiwKQEAgLTIyMDIsMjAgKzIzMzMsNDIgQEAgZ2V0 X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJ CQkvKgogCQkJICogSWYgdGhpcyBpcyBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uLCBwaWNr IHRoZSBwYXJ0aXRpb24KIAkJCSAqIHJvb3QgYW5kIHNldCB0aGUgYW5jZXN0b3IgbGV2ZWwgYWNj b3JkaW5nbHkuCisJCQkgKgorCQkJICogSWYgdGhpcyBpcyBhIEZPUiBBTEwgVEFCTEVTIHB1Ymxp Y2F0aW9uIGFuZCBpdCBoYXMgYW4gRVhDRVBUCisJCQkgKiBUQUJMRSBsaXN0OgorCQkJICoKKwkJ CSAqIElmIHRoZSByZWxhdGlvbiBpcyBhIHBhcnRpdGlvbiwgY2hlY2sgd2hldGhlciB0aGUgY3Vy cmVudAorCQkJICogcmVsYXRpb24gb3IgYW55IG9mIHRoZSBhbmNlc3RvcnMgaXMgaW5jbHVkZWQg aW4gdGhlIEVYQ0VQVAorCQkJICogVEFCTEUgbGlzdC4gSWYgc28sIGRvIG5vdCBwdWJsaXNoIHRo ZSBjaGFuZ2UuCisJCQkgKgorCQkJICogIkRvIG5vdCBwdWJsaXNoIHRoZSBjaGFuZ2UiIGlzIGFj aGlldmVkIGJ5IGtlZXBpbmcgdGhlIHZhcmlhYmxlCisJCQkgKiAicHVibGlzaCIgc2V0IHRvIGZh bHNlLiBBbmQgZXZlbnR1YWxseSwgZW50cnktPnB1YmFjdGlvbnMgd2lsbAorCQkJICogcmVtYWlu IGFsbCBmYWxzZSBmb3IgdGhpcyBwdWJsaWNhdGlvbi4KIAkJCSAqLwogCQkJaWYgKHB1Yi0+YWxs dGFibGVzKQogCQkJewotCQkJCXB1Ymxpc2ggPSB0cnVlOwotCQkJCWlmIChwdWItPnB1YnZpYXJv b3QgJiYgYW1fcGFydGl0aW9uKQorCQkJCUxpc3QJICAgKmV4Y2VwdHB1YmlkcyA9IE5JTDsKKwor CQkJCWlmIChhbV9wYXJ0aXRpb24pCiAJCQkJewotCQkJCQlMaXN0CSAgICphbmNlc3RvcnMgPSBn ZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxpZCk7CisJCQkJCWZvcmVhY2hfb2lkKGFuY2VzdG9y LCBhbmNlc3RvcnMpCisJCQkJCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNlc3RvciwgTlVM TCwgJmV4Y2VwdHB1Ymlkcyk7CiAKLQkJCQkJcHViX3JlbGlkID0gbGxhc3Rfb2lkKGFuY2VzdG9y cyk7Ci0JCQkJCWFuY2VzdG9yX2xldmVsID0gbGlzdF9sZW5ndGgoYW5jZXN0b3JzKTsKKwkJCQkJ aWYgKHB1Yi0+cHVidmlhcm9vdCkKKwkJCQkJeworCQkJCQkJcHViX3JlbGlkID0gcm9vdF9hbmNl c3RvcjsKKwkJCQkJCWFuY2VzdG9yX2xldmVsID0gbGlzdF9sZW5ndGgoYW5jZXN0b3JzKTsKKwkJ CQkJfQogCQkJCX0KLQkJCX0KIAotCQkJaWYgKCFwdWJsaXNoKQorCQkJCUdldFJlbGF0aW9uUHVi bGljYXRpb25zKHJlbGlkLCBOVUxMLCAmZXhjZXB0cHViaWRzKTsKKworCQkJCWlmICghbGlzdF9t ZW1iZXJfb2lkKGV4Y2VwdHB1YmlkcywgcHViLT5vaWQpKQorCQkJCQlwdWJsaXNoID0gdHJ1ZTsK KworCQkJCWxpc3RfZnJlZShleGNlcHRwdWJpZHMpOworCQkJfQorCQkJZWxzZSBpZiAoIXB1Ymxp c2gpCiAJCQl7CiAJCQkJYm9vbAkJYW5jZXN0b3JfcHVibGlzaGVkID0gZmFsc2U7CiAKQEAgLTIy MjksMTIgKzIzODIsMTAgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwg UmVsYXRpb24gcmVsYXRpb24pCiAJCQkJewogCQkJCQlPaWQJCQlhbmNlc3RvcjsKIAkJCQkJaW50 CQkJbGV2ZWw7Ci0JCQkJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0 b3JzKHJlbGlkKTsKIAogCQkJCQlhbmNlc3RvciA9IEdldFRvcE1vc3RBbmNlc3RvckluUHVibGlj YXRpb24ocHViLT5vaWQsCiAJCQkJCQkJCQkJCQkJCQkgICBhbmNlc3RvcnMsCiAJCQkJCQkJCQkJ CQkJCQkgICAmbGV2ZWwpOwotCiAJCQkJCWlmIChhbmNlc3RvciAhPSBJbnZhbGlkT2lkKQogCQkJ CQl7CiAJCQkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQgPSB0cnVlOwpAQCAtMjI0OSw3ICsyNDAwLDI1 IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0 aW9uKQogCQkJCWlmIChsaXN0X21lbWJlcl9vaWQocHViaWRzLCBwdWItPm9pZCkgfHwKIAkJCQkJ bGlzdF9tZW1iZXJfb2lkKHNjaGVtYVB1YmlkcywgcHViLT5vaWQpIHx8CiAJCQkJCWFuY2VzdG9y X3B1Ymxpc2hlZCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSByb290IGFuY2VzdG9y IGlzIGVmZmVjdGl2ZWx5IHB1Ymxpc2hlZCBieSBhbgorCQkJCQkgKiBBTEwgVEFCTEVTIHB1Ymxp Y2F0aW9uIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QsCisJCQkJCSAqIHRoZW4gY2hh bmdlcyBmb3IgaXRzIHBhcnRpdGlvbnMgbXVzdCBiZSBwdWJsaXNoZWQKKwkJCQkJICogdXNpbmcg dGhlIHJvb3QgaWRlbnRpdHkuCisJCQkJCSAqCisJCQkJCSAqIFRoaXMgYXBwbGllcyBldmVuIGlm IG90aGVyIHB1YmxpY2F0aW9ucyBkbyBub3Qgc3BlY2lmeQorCQkJCQkgKiBwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCwgcHJvdmlkZWQgdGhlIHJvb3QgaXMgbm90CisJCQkJCSAqIGV4Y2x1ZGVk IGZyb20gdGhhdCBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uLgorCQkJCQkgKi8KKwkJCQkJaWYgKHJv b3RfcHVibGlzaGVkX3ZpYV9hbGx0YWJsZXMpCisJCQkJCXsKKwkJCQkJCXB1Yl9yZWxpZCA9IHJv b3RfYW5jZXN0b3I7CisJCQkJCQlhbmNlc3Rvcl9sZXZlbCA9IGxpc3RfbGVuZ3RoKGFuY2VzdG9y cyk7CisJCQkJCX0KKwogCQkJCQlwdWJsaXNoID0gdHJ1ZTsKKwkJCQl9CiAJCQl9CiAKIAkJCS8q CkBAIC0yMjk3LDYgKzI0NjYsMTcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAq ZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJCUFzc2VydChwdWJsaXNoX2FzX3JlbGlkID09 IHB1Yl9yZWxpZCk7CiAJCQkJfQogCisJCQkJLyoKKwkJCQkgKiBQYXJ0aXRpb25zIHdob3NlIHRv cC1tb3N0IGFuY2VzdG9yIGlzIGJlaW5nIHB1Ymxpc2hlZCB2aWEgYW4KKwkJCQkgKiAnQUxMIFRB QkxFUycgcHVibGljYXRpb24gbmVlZCBub3QgYmUgaW5kaXZpZHVhbGx5IHB1Ymxpc2hlZAorCQkJ CSAqIHZpYSBhbnkgb3RoZXIgcHVibGljYXRpb24uIFJlcGVhdGVkIG9jY3VycmVuY2VzIG9mIGEK KwkJCQkgKiBwYXJ0aXRpb24gdGFrZSB0aGUgbGVhc3QgcmVzdHJpY3RlZCBkZWZpbml0aW9uLCB3 aGljaCB0aGUKKwkJCQkgKiAnQUxMIFRBQkxFUycgcHVibGljYXRpb24gYWx3YXlzIHByb3ZpZGVz LiBJLmUuLCBhbGwgY29sdW1ucworCQkJCSAqICBhbmQgYWxsIHJvd3MuCisJCQkJICovCisJCQkJ aWYgKHJvb3RfcHVibGlzaGVkX3ZpYV9hbGx0YWJsZXMpCisJCQkJCWNvbnRpbnVlOworCiAJCQkJ LyogVHJhY2sgcHVibGljYXRpb25zIGZvciB0aGlzIGFuY2VzdG9yLiAqLwogCQkJCXJlbF9wdWJs aWNhdGlvbnMgPSBsYXBwZW5kKHJlbF9wdWJsaWNhdGlvbnMsIHB1Yik7CiAJCQl9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCA2YjYzNGM5ZmZmMS4uZGMwMjFkYmI2Y2QgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNTc4OCw3ICs1Nzg4LDkgQEAgUmVsYXRpb25H ZXRFeGNsdXNpb25JbmZvKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiB2b2lkCiBSZWxhdGlvbkJ1 aWxkUHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1 YmRlc2MpCiB7Ci0JTGlzdAkgICAqcHVib2lkczsKKwlMaXN0CSAgICpwdWJvaWRzID0gTklMOwor CUxpc3QJICAgKmV4Y2VwdHB1Ym9pZHMgPSBOSUw7CisJTGlzdAkgICAqYWxsdGFibGVzcHVib2lk czsKIAlMaXN0Q2VsbCAgICpsYzsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlPaWQJCQlzY2hl bWFpZDsKQEAgLTU4MjYsNyArNTgyOCw3IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2Mo UmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAlwdWJkZXNjLT5n ZW5jb2xzX3ZhbGlkX2Zvcl9kZWxldGUgPSB0cnVlOwogCiAJLyogRmV0Y2ggdGhlIHB1YmxpY2F0 aW9uIG1lbWJlcnNoaXAgaW5mby4gKi8KLQlwdWJvaWRzID0gR2V0UmVsYXRpb25QdWJsaWNhdGlv bnMocmVsaWQpOworCUdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbGlkLCAmcHVib2lkcywgJmV4 Y2VwdHB1Ym9pZHMpOwogCXNjaGVtYWlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24p OwogCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsIEdldFNjaGVtYVB1 YmxpY2F0aW9ucyhzY2hlbWFpZCkpOwogCkBAIC01ODM4LDE2ICs1ODQwLDI1IEBAIFJlbGF0aW9u QnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0aW9uRGVzYyAq cHViZGVzYykKIAkJZm9yZWFjaChsYywgYW5jZXN0b3JzKQogCQl7CiAJCQlPaWQJCQlhbmNlc3Rv ciA9IGxmaXJzdF9vaWQobGMpOworCQkJTGlzdAkgICAqYW5jZXN0b3JfcHVib2lkcyA9IE5JTDsK KwkJCUxpc3QJICAgKmFuY2VzdG9yX2V4Y2VwdHB1Ym9pZHMgPSBOSUw7CiAKLQkJCXB1Ym9pZHMg PSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsCi0JCQkJCQkJCQkJCSBHZXRSZWxhdGlv blB1YmxpY2F0aW9ucyhhbmNlc3RvcikpOworCQkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoYW5j ZXN0b3IsICZhbmNlc3Rvcl9wdWJvaWRzLAorCQkJCQkJCQkJJmFuY2VzdG9yX2V4Y2VwdHB1Ym9p ZHMpOworCisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLCBhbmNl c3Rvcl9wdWJvaWRzKTsKIAkJCXNjaGVtYWlkID0gZ2V0X3JlbF9uYW1lc3BhY2UoYW5jZXN0b3Ip OwogCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywKIAkJCQkJCQkJ CQkJIEdldFNjaGVtYVB1YmxpY2F0aW9ucyhzY2hlbWFpZCkpOworCQkJZXhjZXB0cHVib2lkcyA9 IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQoZXhjZXB0cHVib2lkcywKKwkJCQkJCQkJCQkJCSAgIGFu Y2VzdG9yX2V4Y2VwdHB1Ym9pZHMpOwogCQl9CiAJfQotCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91 bmlxdWVfb2lkKHB1Ym9pZHMsIEdldEFsbFRhYmxlc1B1YmxpY2F0aW9ucygpKTsKIAorCWFsbHRh Ymxlc3B1Ym9pZHMgPSBHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnMoKTsKKwlwdWJvaWRzID0gbGlz dF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAorCQkJCQkJCQkJIGxpc3RfZGlmZmVyZW5jZV9v aWQoYWxsdGFibGVzcHVib2lkcywKKwkJCQkJCQkJCQkJCQkJIGV4Y2VwdHB1Ym9pZHMpKTsKIAlm b3JlYWNoKGxjLCBwdWJvaWRzKQogCXsKIAkJT2lkCQkJcHViaWQgPSBsZmlyc3Rfb2lkKGxjKTsK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jCmluZGV4IDQ5NTk4MzA0MzM1Li4xMTEyYzRlMTI0ZCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBA IC00NjIzLDkgKzQ2MjMsNTUgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQpCiAJCQko c3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwogCQlw dWJpbmZvW2ldLnB1YmdlbmNvbHNfdHlwZSA9CiAJCQkqKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1 YmdlbmNvbHMpKTsKKwkJcHViaW5mb1tpXS5leGNlcHRfdGFibGVzID0gKFNpbXBsZVB0ckxpc3Qp CisJCXsKKwkJCU5VTEwsIE5VTEwKKwkJfTsKIAogCQkvKiBEZWNpZGUgd2hldGhlciB3ZSB3YW50 IHRvIGR1bXAgaXQgKi8KIAkJc2VsZWN0RHVtcGFibGVPYmplY3QoJihwdWJpbmZvW2ldLmRvYmop LCBmb3V0KTsKKworCQkvKgorCQkgKiBHZXQgdGhlIGxpc3Qgb2YgdGFibGVzIGZvciBwdWJsaWNh dGlvbnMgc3BlY2lmaWVkIHdpdGggdGhlIEVYQ0VQVAorCQkgKiBUQUJMRSBjbGF1c2UuIFRoaXMg aXMgaW50cm9kdWNlZCBpbiBQb3N0Z3JlU1FMIDE5LgorCQkgKgorCQkgKiBFWENFUFQgVEFCTEVT IGlzIHByb2Nlc3NlZCBoZXJlIGFuZCBvdXRwdXQgZGlyZWN0bHkgYnkKKwkJICogZHVtcFB1Ymxp Y2F0aW9uKCkuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBhcHByb2FjaCB1c2VkIGluCisJCSAqIGR1 bXBQdWJsaWNhdGlvblRhYmxlKCkgYW5kIGR1bXBQdWJsaWNhdGlvbk5hbWVzcGFjZSgpLCBzaW5j ZSB0aGF0CisJCSAqIGFwcHJvYWNoIHdvdWxkIHJlcXVpcmUgRVhDRVBUIFRBQkxFIHN1cHBvcnQg Zm9yIEFMVEVSIFBVQkxJQ0FUSU9OLAorCQkgKiB3aGljaCBpcyBub3QgY3VycmVudGx5IHN1cHBv cnRlZC4KKwkJICovCisJCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE5MDAwMCkKKwkJewor CQkJaW50CQkJbnRibHM7CisJCQlQR3Jlc3VsdCAgICpyZXNfdGJsczsKKworCQkJcmVzZXRQUUV4 cEJ1ZmZlcihxdWVyeSk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwKKwkJCQkJCQkgICJT RUxFQ1QgcHJyZWxpZFxuIgorCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlv bl9yZWxcbiIKKwkJCQkJCQkgICJXSEVSRSBwcnB1YmlkID0gJXUgYW5kIHByZXhjZXB0IiwKKwkJ CQkJCQkgIHB1YmluZm9baV0uZG9iai5jYXRJZC5vaWQpOworCisJCQlyZXNfdGJscyA9IEV4ZWN1 dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNfVFVQTEVTX09LKTsKKworCQkJbnRi bHMgPSBQUW50dXBsZXMocmVzX3RibHMpOworCisJCQlmb3IgKGludCBqID0gMDsgaiA8IG50Ymxz OyBqKyspCisJCQl7CisJCQkJT2lkCQkJcHJyZWxpZDsKKwkJCQlUYWJsZUluZm8gICp0YmluZm87 CisKKwkJCQlwcnJlbGlkID0gYXRvb2lkKFBRZ2V0dmFsdWUocmVzX3RibHMsIGosIDApKTsKKwor CQkJCXRiaW5mbyA9IGZpbmRUYWJsZUJ5T2lkKHBycmVsaWQpOworCisJCQkJaWYgKHRiaW5mbyAh PSBOVUxMKQorCQkJCQlzaW1wbGVfcHRyX2xpc3RfYXBwZW5kKCZwdWJpbmZvW2ldLmV4Y2VwdF90 YWJsZXMsIHRiaW5mbyk7CisJCQl9CisKKwkJCVBRY2xlYXIocmVzX3RibHMpOworCQl9CiAJfQog CiBjbGVhbnVwOgpAQCAtNDY2NSw3ICs0NzExLDI1IEBAIGR1bXBQdWJsaWNhdGlvbihBcmNoaXZl ICpmb3V0LCBjb25zdCBQdWJsaWNhdGlvbkluZm8gKnB1YmluZm8pCiAJaWYgKHB1YmluZm8tPnB1 YmFsbHRhYmxlcyAmJiBwdWJpbmZvLT5wdWJhbGxzZXF1ZW5jZXMpCiAJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKHF1ZXJ5LCAiIEZPUiBBTEwgVEFCTEVTLCBBTEwgU0VRVUVOQ0VTIik7CiAJZWxzZSBp ZiAocHViaW5mby0+cHViYWxsdGFibGVzKQorCXsKKwkJaW50CQkJbl9leGNlcHQgPSAwOworCiAJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIEZPUiBBTEwgVEFCTEVTIik7CisKKwkJLyog SW5jbHVkZSBFWENFUFQgVEFCTEUgY2xhdXNlIGlmIHRoZXJlIGFyZSBleGNlcHRfdGFibGVzLiAq LworCQlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpjZWxsID0gcHViaW5mby0+ZXhjZXB0X3RhYmxl cy5oZWFkOyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dCkKKwkJeworCQkJVGFibGVJbmZvICAqdGJp bmZvID0gKFRhYmxlSW5mbyAqKSBjZWxsLT5wdHI7CisKKwkJCWlmICgrK25fZXhjZXB0ID09IDEp CisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgRVhDRVBUIFRBQkxFICgiKTsKKwkJ CWVsc2UKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgIik7CisJCQlhcHBlbmRQ UUV4cEJ1ZmZlcihxdWVyeSwgIk9OTFkgJXMiLCBmbXRRdWFsaWZpZWREdW1wYWJsZSh0YmluZm8p KTsKKwkJfQorCQlpZiAobl9leGNlcHQgPiAwKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksICIpIik7CisJfQogCWVsc2UgaWYgKHB1YmluZm8tPnB1YmFsbHNlcXVlbmNlcykKIAkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgRk9SIEFMTCBTRVFVRU5DRVMiKTsKIApAQCAtNDg0 NSw2ICs0OTA5LDcgQEAgZ2V0UHVibGljYXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJ bmZvIHRibGluZm9bXSwgaW50IG51bVRhYmxlcykKIAogCS8qIENvbGxlY3QgYWxsIHB1YmxpY2F0 aW9uIG1lbWJlcnNoaXAgaW5mby4gKi8KIAlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNTAw MDApCisJewogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCB0 YWJsZW9pZCwgb2lkLCBwcnB1YmlkLCBwcnJlbGlkLCAiCiAJCQkJCQkJICJwZ19jYXRhbG9nLnBn X2dldF9leHByKHBycXVhbCwgcHJyZWxpZCkgQVMgcHJyZWxxdWFsLCAiCkBAIC00ODU3LDYgKzQ5 MjIsOSBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUluZm8gdGJs aW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCQkJCQkJCSAiICAgICAgV0hFUkUgYXR0cmVsaWQgPSBw ci5wcnJlbGlkIEFORCBhdHRudW0gPSBwcmF0dHJzW3NdKVxuIgogCQkJCQkJCSAiICBFTFNFIE5V TEwgRU5EKSBwcmF0dHJzICIKIAkJCQkJCQkgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlv bl9yZWwgcHIiKTsKKwkJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTkwMDAwKQorCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgV0hFUkUgTk9UIHByLnByZXhjZXB0Iik7CisJfQog CWVsc2UKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgdGFi bGVvaWQsIG9pZCwgcHJwdWJpZCwgcHJyZWxpZCwgIgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggNGM0YjE0ZTVm YzcuLmQxNDFlYjY2ZDE3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTY3Niw2ICs2NzYsNyBAQCB0eXBlZGVm IHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9vbAkJcHVidHJ1bmNhdGU7CiAJYm9vbAkJcHVi dmlhcm9vdDsKIAlQdWJsaXNoR2VuY29sc1R5cGUgcHViZ2VuY29sc190eXBlOworCVNpbXBsZVB0 ckxpc3QgZXhjZXB0X3RhYmxlczsKIH0gUHVibGljYXRpb25JbmZvOwogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8w MDJfcGdfZHVtcC5wbAppbmRleCBhOGRjYzJiNWM3NS4uNTRlYWU1NzdjOTEgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90 LzAwMl9wZ19kdW1wLnBsCkBAIC0zMTcwLDYgKzMxNzAsMzYgQEAgbXkgJXRlc3RzID0gKAogCQls aWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwKIAl9LAogCisJ J0NSRUFURSBQVUJMSUNBVElPTiBwdWI4JyA9PiB7CisJCWNyZWF0ZV9vcmRlciA9PiA1MCwKKwkJ Y3JlYXRlX3NxbCA9PgorCQkgICdDUkVBVEUgUFVCTElDQVRJT04gcHViOCBGT1IgQUxMIFRBQkxF UyBFWENFUFQgKGR1bXBfdGVzdC50ZXN0X3RhYmxlKTsnLAorCQlyZWdleHAgPT4gcXIvXgorCQkJ XFFDUkVBVEUgUFVCTElDQVRJT04gcHViOCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKE9O TFkgZHVtcF90ZXN0LnRlc3RfdGFibGUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUs IGRlbGV0ZSwgdHJ1bmNhdGUnKTtcRQorCQkJL3htLAorCQlsaWtlID0+IHsgJWZ1bGxfcnVucywg c2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwKKwl9LAorCisJJ0NSRUFURSBQVUJMSUNBVElPTiBw dWI5JyA9PiB7CisJCWNyZWF0ZV9vcmRlciA9PiA1MCwKKwkJY3JlYXRlX3NxbCA9PgorCQkgICdD UkVBVEUgUFVCTElDQVRJT04gcHViOSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKGR1bXBf dGVzdC50ZXN0X3RhYmxlLCBkdW1wX3Rlc3QudGVzdF9zZWNvbmRfdGFibGUpOycsCisJCXJlZ2V4 cCA9PiBxci9eCisJCQlcUUNSRUFURSBQVUJMSUNBVElPTiBwdWI5IEZPUiBBTEwgVEFCTEVTIEVY Q0VQVCBUQUJMRSAoT05MWSBkdW1wX3Rlc3QudGVzdF90YWJsZSwgT05MWSBkdW1wX3Rlc3QudGVz dF9zZWNvbmRfdGFibGUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwg dHJ1bmNhdGUnKTtcRQorCQkJL3htLAorCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9w b3N0X2RhdGEgPT4gMSwgfSwKKwl9LAorCisJJ0NSRUFURSBQVUJMSUNBVElPTiBwdWIxMCcgPT4g eworCQljcmVhdGVfb3JkZXIgPT4gOTIsCisJCWNyZWF0ZV9zcWwgPT4KKwkJICAnQ1JFQVRFIFBV QkxJQ0FUSU9OIHB1YjEwIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoZHVtcF90ZXN0LnRl c3RfaW5oZXJpdGFuY2VfcGFyZW50KTsnLAorCQlyZWdleHAgPT4gcXIvXgorCQkJXFFDUkVBVEUg UFVCTElDQVRJT04gcHViMTAgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChPTkxZIGR1bXBf dGVzdC50ZXN0X2luaGVyaXRhbmNlX3BhcmVudCwgT05MWSBkdW1wX3Rlc3QudGVzdF9pbmhlcml0 YW5jZV9jaGlsZCkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlLCB0cnVu Y2F0ZScpO1xFCisJCQkveG0sCisJCWxpa2UgPT4geyAlZnVsbF9ydW5zLCBzZWN0aW9uX3Bvc3Rf ZGF0YSA9PiAxLCB9LAorCX0sCisKIAknQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIxJyA9PiB7CiAJ CWNyZWF0ZV9vcmRlciA9PiA1MCwKIAkJY3JlYXRlX3NxbCA9PiAnQ1JFQVRFIFNVQlNDUklQVElP TiBzdWIxCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNx bC9kZXNjcmliZS5jCmluZGV4IDM1ODRjNGUxNDI4Li42NGIxYjZlZmViZSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAg LTMwNzMsMTcgKzMwNzMsMzQgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAq c2NoZW1hbmFtZSwKIAkJCQkJCQkJICAiICAgICAgICAgIFdIRVJFIGF0dHJlbGlkID0gcHIucHJy ZWxpZCBBTkQgYXR0bnVtID0gcHJhdHRyc1tzXSlcbiIKIAkJCQkJCQkJICAiICAgICAgICBFTFNF IE5VTEwgRU5EKSAiCiAJCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBw XG4iCi0JCQkJCQkJCSAgIiAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBw ciBPTiBwLm9pZCA9IHByLnBycHViaWRcbiIKLQkJCQkJCQkJICAiICAgICBKT0lOIHBnX2NhdGFs b2cucGdfY2xhc3MgYyBPTiBjLm9pZCA9IHByLnBycmVsaWRcbiIKLQkJCQkJCQkJICAiV0hFUkUg cHIucHJyZWxpZCA9ICclcydcbiIKKwkJCQkJCQkJICAiCQlKT0lOIHBnX2NhdGFsb2cucGdfcHVi bGljYXRpb25fcmVsIHByIE9OIHAub2lkID0gcHIucHJwdWJpZFxuIgorCQkJCQkJCQkgICIJCUpP SU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMub2lkID0gcHIucHJyZWxpZFxuIgorCQkJCQkJ CQkgICJXSEVSRSBwci5wcnJlbGlkID0gJyVzJ1xuIiwKKwkJCQkJCQkJICBvaWQsIG9pZCwgb2lk KTsKKworCQkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJCQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoJmJ1ZiwgIiBBTkQgTk9UIHByLnByZXhjZXB0XG4iKTsKKworCQkJCWFwcGVuZFBR RXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJCSAgIlVOSU9OXG4iCiAJCQkJCQkJCSAgIlNFTEVDVCBw dWJuYW1lXG4iCi0JCQkJCQkJCSAgIiAgICAgLCBOVUxMXG4iCi0JCQkJCQkJCSAgIiAgICAgLCBO VUxMXG4iCisJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCisJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCiAJ CQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCi0JCQkJCQkJCSAg IldIRVJFIHAucHViYWxsdGFibGVzIEFORCBwZ19jYXRhbG9nLnBnX3JlbGF0aW9uX2lzX3B1Ymxp c2hhYmxlKCclcycpXG4iCi0JCQkJCQkJCSAgIk9SREVSIEJZIDE7IiwKLQkJCQkJCQkJICBvaWQs IG9pZCwgb2lkLCBvaWQpOworCQkJCQkJCQkgICJXSEVSRSBwLnB1YmFsbHRhYmxlcyBBTkQgcGdf Y2F0YWxvZy5wZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZSgnJXMnKVxuIiwKKwkJCQkJCQkJICBv aWQpOworCisJCQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTkwMDAwKQorCQkJCQlhcHBlbmRQUUV4 cEJ1ZmZlcigmYnVmLAorCQkJCQkJCQkJICAiICAgICBBTkQgTk9UIEVYSVNUUyAoXG4iCisJCQkJ CQkJCQkgICIJCVNFTEVDVCAxXG4iCisJCQkJCQkJCQkgICIJCUZST00gcGdfY2F0YWxvZy5wZ19w dWJsaWNhdGlvbl9yZWwgcHJcbiIKKwkJCQkJCQkJCSAgIgkJSk9JTiBwZ19jYXRhbG9nLnBnX2Ns YXNzIHBjXG4iCisJCQkJCQkJCQkgICIJCU9OIHByLnBycmVsaWQgPSBwYy5vaWRcbiIKKwkJCQkJ CQkJCSAgIgkJV0hFUkUgcHIucHJyZWxpZCA9ICclcycgQU5EIHByLnBycHViaWQgPSBwLm9pZClc biIsCisJCQkJCQkJCQkgIG9pZCk7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAi T1JERVIgQlkgMTsiKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTMxMzQsNiArMzE1MSwzNSBA QCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJUFFj bGVhcihyZXN1bHQpOwogCQl9CiAKKwkJLyogUHJpbnQgcHVibGljYXRpb25zIHdoZXJlIHRoZSB0 YWJsZSBpcyBpbiB0aGUgRVhDRVBUIGNsYXVzZSAqLworCQlpZiAocHNldC5zdmVyc2lvbiA+PSAx OTAwMDApCisJCXsKKwkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkJICAiU0VMRUNU IHB1Ym5hbWVcbiIKKwkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxu IgorCQkJCQkJCSAgIkpPSU4gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHIgT04gcC5v aWQgPSBwci5wcnB1YmlkXG4iCisJCQkJCQkJICAiV0hFUkUgcHIucHJyZWxpZCA9ICclcydcbiBB TkQgcHIucHJleGNlcHRcbiIKKwkJCQkJCQkgICJPUkRFUiBCWSAxOyIsIG9pZCk7CisKKwkJCXJl c3VsdCA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKwkJCWlmICghcmVzdWx0KQorCQkJCWdvdG8gZXJy b3JfcmV0dXJuOworCQkJZWxzZQorCQkJCXR1cGxlcyA9IFBRbnR1cGxlcyhyZXN1bHQpOworCisJ CQlpZiAodHVwbGVzID4gMCkKKwkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250LCBfKCJFeGNl cHQgUHVibGljYXRpb25zOiIpKTsKKworCQkJLyogTWlnaHQgYmUgYW4gZW1wdHkgc2V0IC0gdGhh dCdzIG9rICovCisJCQlmb3IgKGkgPSAwOyBpIDwgdHVwbGVzOyBpKyspCisJCQl7CisJCQkJcHJp bnRmUFFFeHBCdWZmZXIoJmJ1ZiwgIiAgICBcIiVzXCIiLCBQUWdldHZhbHVlKHJlc3VsdCwgaSwg MCkpOworCisJCQkJcHJpbnRUYWJsZUFkZEZvb3RlcigmY29udCwgYnVmLmRhdGEpOworCQkJfQor CQkJUFFjbGVhcihyZXN1bHQpOworCQl9CisKIAkJLyoKIAkJICogSWYgdmVyYm9zZSwgcHJpbnQg Tk9UIE5VTEwgY29uc3RyYWludHMuCiAJCSAqLwpAQCAtNjc1Myw4ICs2Nzk5LDEyIEBAIGRlc2Ny aWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQkJCQkJICAiICAgICBwZ19j YXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwclxuIgogCQkJCQkJCSAgIldIRVJFIGMucmVsbmFt ZXNwYWNlID0gbi5vaWRcbiIKIAkJCQkJCQkgICIgIEFORCBjLm9pZCA9IHByLnBycmVsaWRcbiIK LQkJCQkJCQkgICIgIEFORCBwci5wcnB1YmlkID0gJyVzJ1xuIgotCQkJCQkJCSAgIk9SREVSIEJZ IDEsMiIsIHB1YmlkKTsKKwkJCQkJCQkgICIgIEFORCBwci5wcnB1YmlkID0gJyVzJ1xuIiwgcHVi aWQpOworCisJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxOTAwMDApCisJCQkJYXBwZW5kUFFFeHBC dWZmZXIoJmJ1ZiwgIiAgQU5EIE5PVCBwci5wcmV4Y2VwdFxuIik7CisKKwkJCWFwcGVuZFBRRXhw QnVmZmVyKCZidWYsICJPUkRFUiBCWSAxLDIiKTsKIAkJCWlmICghYWRkRm9vdGVyVG9QdWJsaWNh dGlvbkRlc2MoJmJ1ZiwgXygiVGFibGVzOiIpLCBmYWxzZSwgJmNvbnQpKQogCQkJCWdvdG8gZXJy b3JfcmV0dXJuOwogCkBAIC02NzcyLDYgKzY4MjIsMjMgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMo Y29uc3QgY2hhciAqcGF0dGVybikKIAkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQl9CiAJCX0K KwkJZWxzZQorCQl7CisJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxOTAwMDApCisJCQl7CisJCQkJ LyogR2V0IHRhYmxlcyBpbiB0aGUgRVhDRVBUIGNsYXVzZSBmb3IgdGhpcyBwdWJsaWNhdGlvbiAq LworCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkJCSAgIlNFTEVDVCBjb25jYXQo Yy5yZWxuYW1lc3BhY2U6OnJlZ25hbWVzcGFjZSwgJy4nLCBjLnJlbG5hbWUpXG4iCisJCQkJCQkJ CSAgIkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4iCisJCQkJCQkJCSAgIiAgICAgSk9JTiBw Z19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwciBPTiBjLm9pZCA9IHByLnBycmVsaWRcbiIK KwkJCQkJCQkJICAiV0hFUkUgcHIucHJwdWJpZCA9ICclcydcbiIKKwkJCQkJCQkJICAiICBBTkQg cHIucHJleGNlcHRcbiIKKwkJCQkJCQkJICAiT1JERVIgQlkgMSIsIHB1YmlkKTsKKwkJCQlpZiAo IWFkZEZvb3RlclRvUHVibGljYXRpb25EZXNjKCZidWYsIF8oIkV4Y2VwdCB0YWJsZXM6IiksCisJ CQkJCQkJCQkJCQl0cnVlLCAmY29udCkpCisJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJfQor CQl9CiAKIAkJcHJpbnRUYWJsZSgmY29udCwgcHNldC5xdWVyeUZvdXQsIGZhbHNlLCBwc2V0Lmxv Z2ZpbGUpOwogCQlwcmludFRhYmxlQ2xlYW51cCgmY29udCk7CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMK aW5kZXggOGI5MWJjMDAwNjIuLjM5NDA0ZWEwZjY5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwv dGFiLWNvbXBsZXRlLmluLmMKKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCkBA IC0zNjY5LDcgKzM2NjksMTcgQEAgbWF0Y2hfcHJldmlvdXNfd29yZHMoaW50IHBhdHRlcm5faWQs CiAJZWxzZSBpZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJG T1IiLCAiQUxMIikpCiAJCUNPTVBMRVRFX1dJVEgoIlRBQkxFUyIsICJTRVFVRU5DRVMiKTsKIAll bHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIs ICJBTEwiLCAiVEFCTEVTIikpCi0JCUNPTVBMRVRFX1dJVEgoIldJVEggKCIpOworCQlDT01QTEVU RV9XSVRIKCJFWENFUFQgVEFCTEUgKCIsICJXSVRIICgiKTsKKwllbHNlIGlmIChNYXRjaGVzKCJD UkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwiLCAiVEFCTEVTIiwg IkVYQ0VQVCIpKQorCQlDT01QTEVURV9XSVRIKCJUQUJMRSAoIik7CisJZWxzZSBpZiAoTWF0Y2hl cygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiQUxMIiwgIlRBQkxF UyIsICJFWENFUFQiLCAiVEFCTEUiKSkKKwkJQ09NUExFVEVfV0lUSCgiKCIpOworCWVsc2UgaWYg KE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIkFMTCIs ICJUQUJMRVMiLCAiRVhDRVBUIiwgIlRBQkxFIiwgIigiKSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hF TUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfdGFibGVzKTsKKwllbHNlIGlmIChNYXRjaGVzKCJD UkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwiLCAiVEFCTEVTIiwg IkVYQ0VQVCIsICJUQUJMRSIsICIoIiwgTWF0Y2hBbnlOKSAmJiBlbmRzX3dpdGgocHJldl93ZCwg JywnKSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfdGFi bGVzKTsKKwllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFu eSwgIkZPUiIsICJBTEwiLCAiVEFCTEVTIiwgIkVYQ0VQVCIsICJUQUJMRSIsICIoIiwgTWF0Y2hB bnlOKSAmJiAhZW5kc193aXRoKHByZXZfd2QsICcsJykpCisJCUNPTVBMRVRFX1dJVEgoIikiKTsK IAllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZP UiIsICJUQUJMRVMiKSkKIAkJQ09NUExFVEVfV0lUSCgiSU4gU0NIRU1BIik7CiAJZWxzZSBpZiAo TWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiVEFCTEUi LCBNYXRjaEFueSkgJiYgIWVuZHNfd2l0aChwcmV2X3dkLCAnLCcpKQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKaW5kZXggODNmNjUwMWRmMzguLmI2ZGEyMDBmZmVlIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKQEAgLTEyMzM2LDYgKzEyMzM2LDEzIEBACiAgIHByb25hbWUgPT4gJ3BnX3JlbGF0aW9u X2lzX3B1Ymxpc2hhYmxlJywgcHJvdm9sYXRpbGUgPT4gJ3MnLAogICBwcm9yZXR0eXBlID0+ICdi b29sJywgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzJywKICAgcHJvc3JjID0+ICdwZ19yZWxhdGlv bl9pc19wdWJsaXNoYWJsZScgfSwKK3sgb2lkID0+ICc5MDAyJywgZGVzY3IgPT4gJ2dldCBlZmZl Y3RpdmUgdGFibGVzIGZvciBwdWJsaWNhdGlvbicsCisgIHByb25hbWUgPT4gJ3BnX2dldF9wdWJs aWNhdGlvbl9lZmZlY3RpdmVfdGFibGVzJywgIHByb3Jvd3MgPT4gJzEwMDAnLAorICBwcm9yZXRz ZXQgPT4gJ3QnLCBwcm92b2xhdGlsZSA9PiAncycsCisgIHByb3JldHR5cGUgPT4gJ3JlY29yZCcs IHByb2FyZ3R5cGVzID0+ICdvaWQgX3RleHQnLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne29pZCxf dGV4dCx0ZXh0LHRleHR9JywgcHJvYXJnbW9kZXMgPT4gJ3tpLGksbyxvfScsCisgIHByb2FyZ25h bWVzID0+ICd7cm9vdF9yZWxpZCxwdWJfbmFtZXMsc2NoZW1hbmFtZSxyZWxuYW1lfScsCisgIHBy b3NyYyA9PiAncGdfZ2V0X3B1YmxpY2F0aW9uX2VmZmVjdGl2ZV90YWJsZXMnIH0sCiAKICMgcmxz CiB7IG9pZCA9PiAnMzI5OCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXgg MzY4YmVjY2E4OTkuLjI5NGMxZWViOTVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oCkBAIC0xNDYsMTYgKzE0NiwxOCBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvblJlbElu Zm8KIAlSZWxhdGlvbglyZWxhdGlvbjsKIAlOb2RlCSAgICp3aGVyZUNsYXVzZTsKIAlMaXN0CSAg ICpjb2x1bW5zOworCWJvb2wJCWV4Y2VwdDsKIH0gUHVibGljYXRpb25SZWxJbmZvOwogCiBleHRl cm4gUHVibGljYXRpb24gKkdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCk7CiBleHRlcm4gUHVibGlj YXRpb24gKkdldFB1YmxpY2F0aW9uQnlOYW1lKGNvbnN0IGNoYXIgKnB1Ym5hbWUsIGJvb2wgbWlz c2luZ19vayk7Ci1leHRlcm4gTGlzdCAqR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoT2lkIHJlbGlk KTsKK2V4dGVybiBib29sIEdldFJlbGF0aW9uUHVibGljYXRpb25zKE9pZCByZWxpZCwgTGlzdCAq KnB1YmlkcywgTGlzdCAqKmV4Y2VwdF9wdWJpZHMpOwogCiAvKi0tLS0tLS0tLQotICogRXhwZWN0 ZWQgdmFsdWVzIGZvciBwdWJfcGFydG9wdCBwYXJhbWV0ZXIgb2YgR2V0UHVibGljYXRpb25SZWxh dGlvbnMoKSwKLSAqIHdoaWNoIGFsbG93cyBjYWxsZXJzIHRvIHNwZWNpZnkgd2hpY2ggcGFydGl0 aW9ucyBvZiBwYXJ0aXRpb25lZCB0YWJsZXMKLSAqIG1lbnRpb25lZCBpbiB0aGUgcHVibGljYXRp b24gdGhleSBleHBlY3QgdG8gc2VlLgorICogRXhwZWN0ZWQgdmFsdWVzIGZvciBwdWJfcGFydG9w dCBwYXJhbWV0ZXIgb2YKKyAqIEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMoKSwgd2hp Y2ggYWxsb3dzIGNhbGxlcnMgdG8gc3BlY2lmeSB3aGljaAorICogcGFydGl0aW9ucyBvZiBwYXJ0 aXRpb25lZCB0YWJsZXMgbWVudGlvbmVkIGluIHRoZSBwdWJsaWNhdGlvbiB0aGV5IGV4cGVjdCB0 bworICogc2VlLgogICoKICAqCVJPT1Q6CW9ubHkgdGhlIHRhYmxlIGV4cGxpY2l0bHkgbWVudGlv bmVkIGluIHRoZSBwdWJsaWNhdGlvbgogICoJTEVBRjoJb25seSBsZWFmIHBhcnRpdGlvbnMgaW4g Z2l2ZW4gdHJlZQpAQCAtMTY4LDkgKzE3MCwxMCBAQCB0eXBlZGVmIGVudW0gUHVibGljYXRpb25Q YXJ0T3B0CiAJUFVCTElDQVRJT05fUEFSVF9BTEwsCiB9IFB1YmxpY2F0aW9uUGFydE9wdDsKIAot ZXh0ZXJuIExpc3QgKkdldFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRp b25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KTsKK2V4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlvbkluY2x1 ZGVkUmVsYXRpb25zKE9pZCBwdWJpZCwKKwkJCQkJCQkJCQkJIFB1YmxpY2F0aW9uUGFydE9wdCBw dWJfcGFydG9wdCk7CiBleHRlcm4gTGlzdCAqR2V0QWxsVGFibGVzUHVibGljYXRpb25zKHZvaWQp OwotZXh0ZXJuIExpc3QgKkdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKGNoYXIgcmVsa2luZCwg Ym9vbCBwdWJ2aWFyb290KTsKK2V4dGVybiBMaXN0ICpHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9u cyhQdWJsaWNhdGlvbiAqcHViLCBjaGFyIHJlbGtpbmQpOwogZXh0ZXJuIExpc3QgKkdldFB1Ymxp Y2F0aW9uU2NoZW1hcyhPaWQgcHViaWQpOwogZXh0ZXJuIExpc3QgKkdldFNjaGVtYVB1YmxpY2F0 aW9ucyhPaWQgc2NoZW1haWQpOwogZXh0ZXJuIExpc3QgKkdldFNjaGVtYVB1YmxpY2F0aW9uUmVs YXRpb25zKE9pZCBzY2hlbWFpZCwKQEAgLTE4NSw2ICsxODgsOCBAQCBleHRlcm4gT2lkCUdldFRv cE1vc3RBbmNlc3RvckluUHVibGljYXRpb24oT2lkIHB1Ym9pZCwgTGlzdCAqYW5jZXN0b3JzLAog CiBleHRlcm4gYm9vbCBpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihSZWxhdGlvbiByZWwpOwogZXh0 ZXJuIGJvb2wgaXNfc2NoZW1hX3B1YmxpY2F0aW9uKE9pZCBwdWJpZCk7CitleHRlcm4gYm9vbCBp c19yZWxhdGlvbl9leGNsdWRlZChPaWQgcmVsaWQsIE9pZCBwdWJpZCk7CitleHRlcm4gYm9vbCBw dWJsaWNhdGlvbl9oYXNfYW55X2V4Y2VwdGlvbihPaWQgcHViaWQpOwogZXh0ZXJuIGJvb2wgY2hl Y2tfYW5kX2ZldGNoX2NvbHVtbl9saXN0KFB1YmxpY2F0aW9uICpwdWIsIE9pZCByZWxpZCwKIAkJ CQkJCQkJCQlNZW1vcnlDb250ZXh0IG1jeHQsIEJpdG1hcHNldCAqKmNvbHMpOwogZXh0ZXJuIE9i amVjdEFkZHJlc3MgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRp b25SZWxJbmZvICpwcmksCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uX3JlbC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaApp bmRleCAzYTg3OTBlODQ4Mi4uODAyYThmNTc2YzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbl9yZWwuaApAQCAtMzEsNiArMzEsNyBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9u X3JlbCw2MTA2LFB1YmxpY2F0aW9uUmVsUmVsYXRpb25JZCkKIAlPaWQJCQlvaWQ7CQkJLyogb2lk ICovCiAJT2lkCQkJcHJwdWJpZCBCS0lfTE9PS1VQKHBnX3B1YmxpY2F0aW9uKTsgLyogT2lkIG9m IHRoZSBwdWJsaWNhdGlvbiAqLwogCU9pZAkJCXBycmVsaWQgQktJX0xPT0tVUChwZ19jbGFzcyk7 CS8qIE9pZCBvZiB0aGUgcmVsYXRpb24gKi8KKwlib29sCQlwcmV4Y2VwdCBCS0lfREVGQVVMVChm KTsJLyogcmVsYXRpb24gaXMgbm90IHB1Ymxpc2hlZCAqLwogCiAjaWZkZWYJQ0FUQUxPR19WQVJM RU4JCQkvKiB2YXJpYWJsZS1sZW5ndGggZmllbGRzIHN0YXJ0IGhlcmUgKi8KIAlwZ19ub2RlX3Ry ZWUgcHJxdWFsOwkJLyogcXVhbGlmaWNhdGlvbnMgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRl eCAwYWVjNDliZGQyMi4uYjFkZTM1ZGMzZTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTQy OTksOSArNDI5OSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBBbHRlclRTQ29uZmlndXJhdGlvblN0bXQK IHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uVGFibGUKIHsKIAlOb2RlVGFnCQl0eXBlOwotCVJh bmdlVmFyICAgKnJlbGF0aW9uOwkJLyogcmVsYXRpb24gdG8gYmUgcHVibGlzaGVkICovCisJUmFu Z2VWYXIgICAqcmVsYXRpb247CQkvKiBwdWJsaWNhdGlvbiByZWxhdGlvbiAqLwogCU5vZGUJICAg KndoZXJlQ2xhdXNlOwkvKiBxdWFsaWZpY2F0aW9ucyAqLwogCUxpc3QJICAgKmNvbHVtbnM7CQkv KiBMaXN0IG9mIGNvbHVtbnMgaW4gYSBwdWJsaWNhdGlvbiB0YWJsZSAqLworCWJvb2wJCWV4Y2Vw dDsJCQkvKiBUcnVlIGlmIGxpc3RlZCBpbiB0aGUgRVhDRVBUIGNsYXVzZSAqLwogfSBQdWJsaWNh dGlvblRhYmxlOwogCiAvKgpAQCAtNDMxMCw2ICs0MzExLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVi bGljYXRpb25UYWJsZQogdHlwZWRlZiBlbnVtIFB1YmxpY2F0aW9uT2JqU3BlY1R5cGUKIHsKIAlQ VUJMSUNBVElPTk9CSl9UQUJMRSwJCS8qIEEgdGFibGUgKi8KKwlQVUJMSUNBVElPTk9CSl9FWENF UFRfVEFCTEUsCS8qIEEgdGFibGUgaW4gdGhlIEVYQ0VQVCBjbGF1c2UgKi8KIAlQVUJMSUNBVElP Tk9CSl9UQUJMRVNfSU5fU0NIRU1BLAkvKiBBbGwgdGFibGVzIGluIHNjaGVtYSAqLwogCVBVQkxJ Q0FUSU9OT0JKX1RBQkxFU19JTl9DVVJfU0NIRU1BLAkvKiBBbGwgdGFibGVzIGluIGZpcnN0IGVs ZW1lbnQgb2YKIAkJCQkJCQkJCQkJICogc2VhcmNoX3BhdGggKi8KQEAgLTQzMzgsNiArNDM0MCw3 IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uQWxsT2JqU3BlYwogewogCU5vZGVUYWcJCXR5 cGU7CiAJUHVibGljYXRpb25BbGxPYmpUeXBlIHB1Ym9ianR5cGU7CS8qIHR5cGUgb2YgdGhpcyBw dWJsaWNhdGlvbiBvYmplY3QgKi8KKwlMaXN0CSAgICpleGNlcHRfdGFibGVzOwkvKiB0YWJsZXMg c3BlY2lmaWVkIGluIHRoZSBFWENFUFQgY2xhdXNlICovCiAJUGFyc2VMb2MJbG9jYXRpb247CQkv KiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwogfSBQdWJsaWNhdGlvbkFsbE9i alNwZWM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRl cm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKaW5kZXgg YzEyODVmZGQxYmMuLmNhYjk3NTMxMjc2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3Jr ZXJfaW50ZXJuYWwuaApAQCAtMjM0LDYgKzIzNCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxl bEFwcGx5V29ya2VySW5mbwogCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJlZDsKIH0g UGFyYWxsZWxBcHBseVdvcmtlckluZm87CiAKK3R5cGVkZWYgc3RydWN0IFF1YWxpZmllZFJlbGF0 aW9uTmFtZQoreworCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJY2hhcgkgICAqcmVsbmFtZTsKK30g UXVhbGlmaWVkUmVsYXRpb25OYW1lOworCiAvKiBNYWluIG1lbW9yeSBjb250ZXh0IGZvciBhcHBs eSB3b3JrZXIuIFBlcm1hbmVudCBkdXJpbmcgd29ya2VyIGxpZmV0aW1lLiAqLwogZXh0ZXJuIFBH RExMSU1QT1JUIE1lbW9yeUNvbnRleHQgQXBwbHlDb250ZXh0OwogCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDdmYjQ5YWFmMjliLi43NzExMjJjMTljYyAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTIxMywzMyAr MjEzLDEwNCBAQCBOb3QtbnVsbCBjb25zdHJhaW50czoKICByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgogKDEgcm93KQogCi1EUk9Q IFRBQkxFIHRlc3RwdWJfdGJsMjsKLURST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJs ZXMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9yc2NoZW1hLCB0ZXN0cHViX2Zvcl90Ymxf c2NoZW1hOwotQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsMyAoYSBpbnQpOwotQ1JFQVRFIFRBQkxF IHRlc3RwdWJfdGJsM2EgKGIgdGV4dCkgSU5IRVJJVFMgKHRlc3RwdWJfdGJsMyk7CiBTRVQgY2xp ZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7Ci1DUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMg Rk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKLUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1Ig VEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CistLSBTcGVjaWZ5IHRhYmxlbGlzdCBpbiB0aGUgRVhD RVBUIGNsYXVzZSBvZiBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uCitDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUgRk9SIEFMTCBUQUJMRVMgRVhD RVBUIFRBQkxFICh0ZXN0cHViX3RibDEsIHRlc3RwdWJfdGJsMik7CitcZFJwKyB0ZXN0cHViX2Zv cmFsbHRhYmxlc19leGNlcHR0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5z IHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IHQgICAgICAgICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVzOgorICAg ICJwdWJsaWMudGVzdHB1Yl90YmwxIgorICAgICJwdWJsaWMudGVzdHB1Yl90YmwyIgorCistLSBT cGVjaWZ5IHRhYmxlIGluIHRoZSBFWENFUFQgY2xhdXNlIG9mIGEgRk9SIEFMTCBUQUJMRVMgcHVi bGljYXRpb24KK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0 YWJsZTEgRk9SIEFMTCBUQUJMRVMgRVhDRVBUICh0ZXN0cHViX3RibDEpOworXGRScCsgdGVzdHB1 Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxl MQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2Vz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNv bHVtbnMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYKK0V4Y2VwdCB0YWJsZXM6 CisgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCisKKy0tIENoZWNrIHRoYXQgdGhlIHRhYmxlIGRl c2NyaXB0aW9uIHNob3dzIHRoZSBwdWJsaWNhdGlvbnMgd2hlcmUgaXQgaXMgbGlzdGVkCistLSBp biB0aGUgRVhDRVBUIGNsYXVzZQorXGQgdGVzdHB1Yl90YmwxCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVGFibGUgInB1YmxpYy50ZXN0cHViX3RibDEiCisgQ29sdW1uIHwgIFR5cGUgICB8 IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgICAgICAgICAgICAgICAgIERlZmF1bHQgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGlkICAgICB8IGludGVnZXIg fCAgICAgICAgICAgfCBub3QgbnVsbCB8IG5leHR2YWwoJ3Rlc3RwdWJfdGJsMV9pZF9zZXEnOjpy ZWdjbGFzcykKKyBkYXRhICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKK0lu ZGV4ZXM6CisgICAgInRlc3RwdWJfdGJsMV9wa2V5IiBQUklNQVJZIEtFWSwgYnRyZWUgKGlkKQor UHVibGljYXRpb25zOgorICAgICJ0ZXN0cHViX2ZvcmFsbHRhYmxlcyIKK0V4Y2VwdCBQdWJsaWNh dGlvbnM6CisgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlIgorICAgICJ0ZXN0 cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEiCisKIFJFU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXM7CitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMjsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3JhbGx0YWJsZXMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9yc2NoZW1hLCB0ZXN0cHVi X2Zvcl90Ymxfc2NoZW1hLCB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZSwgdGVzdHB1 Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUxOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX3Bh cmVudCAoYSBpbnQpOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2NoaWxkIChiIHRleHQpIElO SEVSSVRTICh0ZXN0cHViX3RibF9wYXJlbnQpOworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAn RVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzIEZPUiBUQUJMRSB0ZXN0cHViX3Ri bF9wYXJlbnQ7CiBcZFJwKyB0ZXN0cHViMwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKICAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJv b3QgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQogIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmCiBUYWJsZXM6Ci0gICAgInB1YmxpYy50ZXN0cHVi X3RibDMiCi0gICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgorICAgICJwdWJsaWMudGVzdHB1Yl90 YmxfY2hpbGQiCisgICAgInB1YmxpYy50ZXN0cHViX3RibF9wYXJlbnQiCiAKK0NSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibF9wYXJlbnQ7CiBcZFJw KyB0ZXN0cHViNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKICAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJvb3QgCiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQogIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgbm9uZSAgICAg ICAgICAgICAgfCBmCiBUYWJsZXM6Ci0gICAgInB1YmxpYy50ZXN0cHViX3RibDMiCisgICAgInB1 YmxpYy50ZXN0cHViX3RibF9wYXJlbnQiCiAKLURST1AgVEFCTEUgdGVzdHB1Yl90YmwzLCB0ZXN0 cHViX3RibDNhOwotRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViMywgdGVzdHB1YjQ7CistLSBMaXN0 IHRoZSBwYXJlbnQgdGFibGUgaW4gdGhlIEVYQ0VQVCBjbGF1c2UgKHdpdGhvdXQgT05MWSBvciAn KicpCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRB QkxFICh0ZXN0cHViX3RibF9wYXJlbnQpOworXGRScCsgdGVzdHB1YjUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5j ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQg Y29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgorRXhjZXB0IHRhYmxl czoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX2NoaWxkIgorICAgICJwdWJsaWMudGVzdHB1Yl90 YmxfcGFyZW50IgorCistLSBFWENFUFQgd2l0aCAnKic6IGxpc3QgdGhlIHRhYmxlIGFuZCBhbGwg aXRzIGRlc2NlbmRhbnRzIGluIHRoZSBFWENFUFQgY2xhdXNlCitDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1YjYgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0ZXN0cHViX3RibF9wYXJlbnQg Kik7CitcZFJwKyB0ZXN0cHViNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJvb3QgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCBm ICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg bm9uZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVzOgorICAgICJwdWJsaWMudGVzdHB1 Yl90YmxfY2hpbGQiCisgICAgInB1YmxpYy50ZXN0cHViX3RibF9wYXJlbnQiCisKKy0tIEVYQ0VQ VCB3aXRoIE9OTFk6IGxpc3QgdGhlIHRhYmxlIGluIHRoZSBFWENFUFQgY2xhdXNlLCBidXQgbm90 IGl0cyBkZXNjZW5kYW50cworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI3IEZPUiBBTEwgVEFC TEVTIEVYQ0VQVCBUQUJMRSAoT05MWSB0ZXN0cHViX3RibF9wYXJlbnQpOworXGRScCsgdGVzdHB1 YjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI3CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAg IHwgZgorRXhjZXB0IHRhYmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKKwor UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0RST1AgVEFCTEUgdGVzdHB1Yl90YmxfcGFyZW50 LCB0ZXN0cHViX3RibF9jaGlsZDsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1YjMsIHRlc3RwdWI0 LCB0ZXN0cHViNSwgdGVzdHB1YjYsIHRlc3RwdWI3OwogLS0tIFRlc3RzIGZvciBwdWJsaWNhdGlv bnMgd2l0aCBTRVFVRU5DRVMKIENSRUFURSBTRVFVRU5DRSByZWdyZXNzX3B1Yl9zZXEwOwogQ1JF QVRFIFNFUVVFTkNFIHB1Yl90ZXN0LnJlZ3Jlc3NfcHViX3NlcTE7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9w dWJsaWNhdGlvbi5zcWwKaW5kZXggODViMDBiZDY3YzguLjYyYmM4OWVmNTIzIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcHVibGljYXRpb24uc3FsCkBAIC0xMDUsMjAgKzEwNSw0MSBAQCBTRUxFQ1QgcHVi bmFtZSwgcHViYWxsdGFibGVzIEZST00gcGdfcHVibGljYXRpb24gV0hFUkUgcHVibmFtZSA9ICd0 ZXN0cHViX2ZvcmFsbAogXGQrIHRlc3RwdWJfdGJsMgogXGRScCsgdGVzdHB1Yl9mb3JhbGx0YWJs ZXMKIAorU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworLS0gU3BlY2lmeSB0YWJs ZWxpc3QgaW4gdGhlIEVYQ0VQVCBjbGF1c2Ugb2YgYSBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlv bgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlIEZP UiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmwxLCB0ZXN0cHViX3RibDIpOwor XGRScCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUKKy0tIFNwZWNpZnkgdGFibGUg aW4gdGhlIEVYQ0VQVCBjbGF1c2Ugb2YgYSBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbgorQ1JF QVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlMSBGT1IgQUxM IFRBQkxFUyBFWENFUFQgKHRlc3RwdWJfdGJsMSk7CitcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxl c19leGNlcHR0YWJsZTEKKy0tIENoZWNrIHRoYXQgdGhlIHRhYmxlIGRlc2NyaXB0aW9uIHNob3dz IHRoZSBwdWJsaWNhdGlvbnMgd2hlcmUgaXQgaXMgbGlzdGVkCistLSBpbiB0aGUgRVhDRVBUIGNs YXVzZQorXGQgdGVzdHB1Yl90YmwxCisKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBEUk9Q IFRBQkxFIHRlc3RwdWJfdGJsMjsKLURST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJs ZXMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9yc2NoZW1hLCB0ZXN0cHViX2Zvcl90Ymxf c2NoZW1hOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlcywgdGVzdHB1Yl9m b3J0YWJsZSwgdGVzdHB1Yl9mb3JzY2hlbWEsIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEsIHRlc3Rw dWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlLCB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0 YWJsZTE7CiAKLUNSRUFURSBUQUJMRSB0ZXN0cHViX3RibDMgKGEgaW50KTsKLUNSRUFURSBUQUJM RSB0ZXN0cHViX3RibDNhIChiIHRleHQpIElOSEVSSVRTICh0ZXN0cHViX3RibDMpOworQ1JFQVRF IFRBQkxFIHRlc3RwdWJfdGJsX3BhcmVudCAoYSBpbnQpOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJf dGJsX2NoaWxkIChiIHRleHQpIElOSEVSSVRTICh0ZXN0cHViX3RibF9wYXJlbnQpOwogU0VUIGNs aWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwotQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIz IEZPUiBUQUJMRSB0ZXN0cHViX3RibDM7Ci1DUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjQgRk9S IFRBQkxFIE9OTFkgdGVzdHB1Yl90YmwzOwotUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0NS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmxfcGFyZW50Owog XGRScCsgdGVzdHB1YjMKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05M WSB0ZXN0cHViX3RibF9wYXJlbnQ7CiBcZFJwKyB0ZXN0cHViNAorLS0gTGlzdCB0aGUgcGFyZW50 IHRhYmxlIGluIHRoZSBFWENFUFQgY2xhdXNlICh3aXRob3V0IE9OTFkgb3IgJyonKQorQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1 Yl90YmxfcGFyZW50KTsKK1xkUnArIHRlc3RwdWI1CistLSBFWENFUFQgd2l0aCAnKic6IGxpc3Qg dGhlIHRhYmxlIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzIGluIHRoZSBFWENFUFQgY2xhdXNlCitD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjYgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0 ZXN0cHViX3RibF9wYXJlbnQgKik7CitcZFJwKyB0ZXN0cHViNgorLS0gRVhDRVBUIHdpdGggT05M WTogbGlzdCB0aGUgdGFibGUgaW4gdGhlIEVYQ0VQVCBjbGF1c2UsIGJ1dCBub3QgaXRzIGRlc2Nl bmRhbnRzCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjcgRk9SIEFMTCBUQUJMRVMgRVhDRVBU IFRBQkxFIChPTkxZIHRlc3RwdWJfdGJsX3BhcmVudCk7CitcZFJwKyB0ZXN0cHViNwogCi1EUk9Q IFRBQkxFIHRlc3RwdWJfdGJsMywgdGVzdHB1Yl90YmwzYTsKLURST1AgUFVCTElDQVRJT04gdGVz dHB1YjMsIHRlc3RwdWI0OworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0RST1AgVEFCTEUg dGVzdHB1Yl90YmxfcGFyZW50LCB0ZXN0cHViX3RibF9jaGlsZDsKK0RST1AgUFVCTElDQVRJT04g dGVzdHB1YjMsIHRlc3RwdWI0LCB0ZXN0cHViNSwgdGVzdHB1YjYsIHRlc3RwdWI3OwogCiAtLS0g VGVzdHMgZm9yIHB1YmxpY2F0aW9ucyB3aXRoIFNFUVVFTkNFUwogQ1JFQVRFIFNFUVVFTkNFIHJl Z3Jlc3NfcHViX3NlcTA7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24u YnVpbGQgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQKaW5kZXggYTRjN2RiYWZm NTkuLjA3MjgyYWEzYzE4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24u YnVpbGQKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCkBAIC00Niw2ICs0 Niw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAzNF90ZW1wb3JhbC5wbCcsCiAgICAgICAndC8w MzVfY29uZmxpY3RzLnBsJywKICAgICAgICd0LzAzNl9zZXF1ZW5jZXMucGwnLAorICAgICAgJ3Qv MDM3X3JlcF9jaGFuZ2VzX2V4Y2VwdF90YWJsZS5wbCcsCiAgICAgICAndC8xMDBfYnVncy5wbCcs CiAgICAgXSwKICAgfSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzN19y ZXBfY2hhbmdlc19leGNlcHRfdGFibGUucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdf cmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi43NjI1NjEwYzNkNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAzN19yZXBfY2hhbmdlc19leGNlcHRfdGFibGUucGwKQEAgLTAsMCArMSwzNTkg QEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKworIyBMb2dpY2FsIHJlcGxpY2F0aW9uIHRlc3RzIGZvciBFWENFUFQgVEFC TEUgcHVibGljYXRpb25zCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVz dDo6TW9yZTsKKworIyBJbml0aWFsaXplIHB1Ymxpc2hlciBub2RlCitteSAkbm9kZV9wdWJsaXNo ZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVf cHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1 Ymxpc2hlci0+c3RhcnQ7CisKKyMgSW5pdGlhbGl6ZSBzdWJzY3JpYmVyIG5vZGUKK215ICRub2Rl X3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXIn KTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcp OworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKyMgRVhDRVBUIFRBQkxFIHRlc3QgY2FzZXMgZm9yIG5vcm1h bCB0YWJsZXMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KyMgQ3JlYXRlIHNjaGVtYXMgYW5kIHRhYmxlcyBvbiBwdWJsaXNoZXIKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBTQ0hFTUEgc2NoMTsKKwlD UkVBVEUgVEFCTEUgc2NoMS50YWIxIEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgQVMg YTsKKykpOworCisjIENyZWF0ZSBzY2hlbWFzIGFuZCB0YWJsZXMgb24gc3Vic2NyaWJlcgorJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBTQ0hF TUEgc2NoMTsKKwlDUkVBVEUgVEFCTEUgc2NoMS50YWIxIChhIGludCk7CispKTsKKworIyBTZXR1 cCBsb2dpY2FsIHJlcGxpY2F0aW9uLCBhbmQgY3JlYXRlIGEgbG9naWNhbCByZXBsaWNhdGlvbiBz bG90IHRvIGhlbHAgd2l0aAorIyBsYXRlciB0ZXN0cy4KK215ICRwdWJsaXNoZXJfY29ubnN0ciA9 ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBf cHViX3NjaGVtYSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEudGFiMSkiCispOwor Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfY3Jl YXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdCgndGVzdF9zbG90JywgJ3Bnb3V0cHV0JykiKTsK KworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJT Q1JJUFRJT04gdGFwX3N1Yl9zY2hlbWEgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQ VUJMSUNBVElPTiB0YXBfcHViX3NjaGVtYSIKKyk7CisKKyMgV2FpdCBmb3IgaW5pdGlhbCB0YWJs ZSBzeW5jIHRvIGZpbmlzaAorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9u X3N5bmMoJG5vZGVfcHVibGlzaGVyLAorCSd0YXBfc3ViX3NjaGVtYScpOworCisjIENoZWNrIHRo ZSB0YWJsZSBkYXRhIGRvZXMgbm90IHN5bmMgZm9yIHRoZSB0YWJsZXMgc3BlY2lmaWVkIGluIEVY Q0VQVCBjbGF1c2UKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCopLCBtaW4oYSksIG1heChhKSBGUk9NIHNjaDEudGFi MSIpOworaXMoJHJlc3VsdCwgcXEoMHx8KSwKKwknY2hlY2sgdGhlcmUgaXMgbm8gaW5pdGlhbCBk YXRhIGNvcGllZCBmb3IgdGhlIHRhYmxlcyBzcGVjaWZpZWQgaW4gdGhlIGV4Y2VwdCBjbGF1c2Un KTsKKworIyBJbnNlcnQgc29tZSBkYXRhIGludG8gdGhlIHRhYmxlIGxpc3RlZCBpbiB0aGUgRVhD RVBUIGNsYXVzZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5T RVJUIElOVE8gc2NoMS50YWIxIFZBTFVFUyhnZW5lcmF0ZV9zZXJpZXMoMTEsMjApKSIpOworCisj IFZlcmlmeSB0aGF0IGRhdGEgaW5zZXJ0ZWQgaW50byBhIHRhYmxlIGxpc3RlZCBpbiB0aGUgRVhD RVBUIGNsYXVzZSBpcyBub3QKKyMgcHVibGlzaGVkLgorJHJlc3VsdCA9ICRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBjb3VudCgqKSA9IDAgRlJPTSBwZ19s b2dpY2FsX3Nsb3RfZ2V0X2JpbmFyeV9jaGFuZ2VzKCd0ZXN0X3Nsb3QnLCBOVUxMLCBOVUxMLCAn cHJvdG9fdmVyc2lvbicsICcxJywgJ3B1YmxpY2F0aW9uX25hbWVzJywgJ3RhcF9zdWJfc2NoZW1h JykiCispOworaXMoJHJlc3VsdCwgcXEodCksICd2ZXJpZnkgbm8gY2hhbmdlcyBmb3IgdGFibGUg bGlzdGVkIGluIHRoZSBFWENFUFQgY2xhdXNlIGFyZSBwcmVzZW50IGluIHRoZSByZXBsaWNhdGlv biBzbG90Jyk7CisKKyMgVmVyaWZ5IHRoYXQgZGF0YSBpbnNlcnRlZCBpbnRvIGEgdGFibGUgbGlz dGVkIGluIHRoZSBFWENFUFQgY2xhdXNlIGlzIG5vdAorIyByZXBsaWNhdGVkLgorJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3NjaGVtYScpOworCiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBjb3VudCgq KSwgbWluKGEpLCBtYXgoYSkgRlJPTSBzY2gxLnRhYjEiKTsKK2lzKCRyZXN1bHQsIHFxKDB8fCks ICdjaGVjayByZXBsaWNhdGVkIGluc2VydHMgb24gc3Vic2NyaWJlcicpOworCisjIGNsZWFudXAK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJ T04gdGFwX3N1Yl9zY2hlbWEiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0 Z3JlcycsIHFxKAorCURST1AgUFVCTElDQVRJT04gdGFwX3B1Yl9zY2hlbWE7CisJVFJVTkNBVEUg VEFCTEUgc2NoMS50YWIxOworKSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlRSVU5DQVRFIFRBQkxFIHNjaDEudGFiMSIpOworCisjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEVYQ0VQVCBUQUJMRSB0ZXN0IGNhc2VzIGZv ciBwYXJ0aXRpb25lZCB0YWJsZXMKKyMgQ2hlY2sgYmVoYXZpb3Igb2YgRVhDRVBUIFRBQkxFIHdp dGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qgb24gYQorIyBwYXJ0aXRpb25lZCB0YWJsZSBh bmQgaXRzIHBhcnRpdGlvbnMuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisjIFNldHVwIHBhcnRpdGlvbmVkIHRhYmxlIGFuZCBwYXJ0aXRpb25zIG9uIHRo ZSBwdWJsaXNoZXIgdGhhdCBtYXAgdG8gbm9ybWFsCisjIHRhYmxlcyBvbiB0aGUgc3Vic2NyaWJl cgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRF IFRBQkxFIHNjaDEudDEoYSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShhKTsKKwlDUkVBVEUgVEFC TEUgc2NoMS5wYXJ0MSBQQVJUSVRJT04gT0Ygc2NoMS50MSBGT1IgVkFMVUVTIEZST00gKDApIFRP ICgxMDApOworCUNSRUFURSBUQUJMRSBzY2gxLnBhcnQyKGEgaW50KSBQQVJUSVRJT04gQlkgUkFO R0UoYSk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDJfMSBQQVJUSVRJT04gT0Ygc2NoMS5wYXJ0 MiBGT1IgVkFMVUVTIEZST00gKDEwMSkgVE8gKDE1MCk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFy dDJfMiBQQVJUSVRJT04gT0Ygc2NoMS5wYXJ0MiBGT1IgVkFMVUVTIEZST00gKDE1MSkgVE8gKDIw MCk7CisJQUxURVIgVEFCTEUgc2NoMS50MSBBVFRBQ0ggUEFSVElUSU9OIHNjaDEucGFydDIgRk9S IFZBTFVFUyBGUk9NICgxMDEpIFRPICgyMDApOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgc2NoMS50MShhIGludCk7 CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDEoYSBpbnQpOworCUNSRUFURSBUQUJMRSBzY2gxLnBh cnQyKGEgaW50KTsKKwlDUkVBVEUgVEFCTEUgc2NoMS5wYXJ0Ml8xKGEgaW50KTsKKwlDUkVBVEUg VEFCTEUgc2NoMS5wYXJ0Ml8yKGEgaW50KTsKKykpOworCisjIFdoZW4gdGhlIHJvb3QgcGFydGl0 aW9uZWQgdGFibGUgaXMgbGlzdGVkIGluIHRoZSBFWENFUFQgY2xhdXNlLAorIyBhbGwgaXRzIHBh cnRpdGlvbnMgYXJlIG5vdCBwdWJsaXNoZWQgd2hlbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IGZhbHNlLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEo CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydCBGT1IgQUxMIFRBQkxFUyBFWENFUFQg VEFCTEUgKHNjaDEudDEpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2Up OworCUlOU0VSVCBJTlRPIHNjaDEudDEgVkFMVUVTICgxKSwgKDEwMSksICgxNTEpOworKSk7Cisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQ VElPTiB0YXBfc3ViX3BhcnQgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNB VElPTiB0YXBfcHViX3BhcnQiCispOworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2Ny aXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1Yl9wYXJ0Jyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2xvdF9uYW1lIEZST00gcGdf cmVwbGljYXRpb25fc2xvdF9hZHZhbmNlKCd0ZXN0X3Nsb3QnLCBwZ19jdXJyZW50X3dhbF9sc24o KSk7IgorKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VS VCBJTlRPIHNjaDEudDEgVkFMVUVTICgyKSwgKDEwMiksICgxNTIpIik7CisKKyMgVmVyaWZ5IHRo YXQgZGF0YSBpbnNlcnRlZCBpbnRvIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBpcyBub3QgcHVibGlz aGVkIHdoZW4gaXQKKyMgaXMgaW4gdGhlIEVYQ0VQVCBjbGF1c2Ugd2l0aCBwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IHRydWUuCiskcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCopID0gMCBGUk9NIHBnX2xvZ2ljYWxfc2xv dF9nZXRfYmluYXJ5X2NoYW5nZXMoJ3Rlc3Rfc2xvdCcsIE5VTEwsIE5VTEwsICdwcm90b192ZXJz aW9uJywgJzEnLCAncHVibGljYXRpb25fbmFtZXMnLCAndGFwX3B1Yl9wYXJ0JykiCispOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKKworIyBDaGVj ayB0aGF0IG5vIHJvd3MgYXJlIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlcgorJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gx LnQxIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiByb290IHRhYmxlJyk7CisK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCAqIEZST00gc2NoMS5wYXJ0MSIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24g dGFibGUgc2NoMS5wYXJ0MScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDIiKTsKK2lzKCRyZXN1bHQs IHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDInKTsKKworJHJlc3VsdCA9Cisg ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBz Y2gxLnBhcnQyXzEiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNj aDEucGFydDJfMScpOworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDJfMiIpOworaXMoJHJlc3VsdCwg cXEoKSwgJ2NoZWNrIHJvd3Mgb24gdGFibGUgc2NoMS5wYXJ0Ml8yJyk7CisKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9w YXJ0Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJM SUNBVElPTiB0YXBfcHViX3BhcnQ7Iik7CisKKyMgV2hlbiB0aGUgcm9vdCBwYXJ0aXRpb25lZCB0 YWJsZSBpcyBsaXN0ZWQgaW4gdGhlIEVYQ0VQVCBjbGF1c2UsCisjIGFsbCBpdHMgcGFydGl0aW9u cyBhcmUgbm90IHB1Ymxpc2hlZCB3aGVuIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1 ZS4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCUNSRUFU RSBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChz Y2gxLnQxKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworKSk7Cisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQ VElPTiB0YXBfc3ViX3BhcnQgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNB VElPTiB0YXBfcHViX3BhcnQiCispOworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2Ny aXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1Yl9wYXJ0Jyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2xvdF9uYW1lIEZST00gcGdf cmVwbGljYXRpb25fc2xvdF9hZHZhbmNlKCd0ZXN0X3Nsb3QnLCBwZ19jdXJyZW50X3dhbF9sc24o KSk7IgorKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VS VCBJTlRPIHNjaDEudDEgVkFMVUVTICgzKSwgKDEwMyksICgxNTMpOyIpOworCisjIFZlcmlmeSB0 aGF0IGRhdGEgaW5zZXJ0ZWQgaW50byB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXMgbm90IHB1Ymxp c2hlZCB3aGVuIGl0CisjIGlzIGluIHRoZSBFWENFUFQgY2xhdXNlIHdpdGggcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QgPSB0cnVlLgorJHJlc3VsdCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBjb3VudCgqKSA9IDAgRlJPTSBwZ19sb2dpY2FsX3Ns b3RfZ2V0X2JpbmFyeV9jaGFuZ2VzKCd0ZXN0X3Nsb3QnLCBOVUxMLCBOVUxMLCAncHJvdG9fdmVy c2lvbicsICcxJywgJ3B1YmxpY2F0aW9uX25hbWVzJywgJ3RhcF9wdWJfcGFydCcpIgorKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgndGFwX3N1Yl9wYXJ0Jyk7CisKKyMgQ2hl Y2sgdGhhdCBubyByb3dzIGFyZSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2No MS50MSIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gcm9vdCB0YWJsZScpOwor CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgKiBGUk9NIHNjaDEucGFydDEiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9u IHRhYmxlIHNjaDEucGFydDEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyIik7CitpcygkcmVzdWx0 LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gxLnBhcnQyJyk7CisKKyRyZXN1bHQgPQor ICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00g c2NoMS5wYXJ0Ml8xIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBz Y2gxLnBhcnQyXzEnKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyXzIiKTsKK2lzKCRyZXN1bHQs IHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDJfMicpOworCiskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgU1VCU0NSSVBUSU9OIHRhcF9zdWJf cGFydCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgUFVC TElDQVRJT04gdGFwX3B1Yl9wYXJ0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIHNsb3RfbmFtZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2 YW5jZSgndGVzdF9zbG90JywgcGdfY3VycmVudF93YWxfbHNuKCkpOyIKKyk7CisKKyMgV2hlbiBh IGNoaWxkIHBhcnRpdGlvbiBpcyBsaXN0ZWQgaW4gdGhlIEVYQ0VQVCBjbGF1c2Ugd2l0aAorIyBw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUsIHRoZSByZW1haW5pbmcgcGFydGl0aW9u cyBzaG91bGQgc3RpbGwgYmUKKyMgcmVwbGljYXRlZC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCVRSVU5DQVRFIHNjaDEudDE7CisJSU5TRVJUIElOVE8g c2NoMS50MSBWQUxVRVMgKDMpLCAoMTAzKSwgKDE1Myk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRh cF9wdWJfcGFydCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEucGFydDIpIFdJVEgg KHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CispKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlUUlVOQ0FURSBzY2gxLnQxOworCUNS RUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0IENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29u bnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0OworKSk7Ciskbm9kZV9zdWJzY3JpYmVyLT53 YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9wdWJsaXNoZXIsICd0YXBfc3ViX3BhcnQn KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBzbG90 X25hbWUgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoJ3Rlc3Rfc2xvdCcsIHBnX2N1 cnJlbnRfd2FsX2xzbigpKTsiCispOworCisjIFZlcmlmeSB0aGF0IGRhdGEgaW5zZXJ0ZWQgaW50 byB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXMgbm90IHB1Ymxpc2hlZCB3aGVuIGl0CisjIGlzIGlu IHRoZSBFWENFUFQgY2xhdXNlIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVl LgorJHJlc3VsdCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBjb3VudCgqKSA9IDAgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2JpbmFyeV9jaGFuZ2Vz KCd0ZXN0X3Nsb3QnLCBOVUxMLCBOVUxMLCAncHJvdG9fdmVyc2lvbicsICcxJywgJ3B1YmxpY2F0 aW9uX25hbWVzJywgJ3RhcF9wdWJfcGFydCcpIgorKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgndGFwX3N1Yl9wYXJ0Jyk7CisKKyMgQ2hlY2sgdGhhdCB0YWJsZSBkYXRhIDEw MyBhbmQgMTUzIHdoaWNoIGlzIHByZXNlbnQgaW4gc2NoMS5zY2gxLnBhcnQyIHNob3VsZAorIyBu b3QgYmUgcmVwbGljYXRlZC4KKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS50MSIpOworaXMoJHJlc3VsdCwgcXEoMyks ICdjaGVjayByb3dzIG9uIHJvb3QgdGFibGUnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQxIik7Citp cygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gxLnBhcnQxJyk7CisKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAq IEZST00gc2NoMS5wYXJ0MiIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gdGFi bGUgc2NoMS5wYXJ0MicpOworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDJfMSIpOworaXMoJHJlc3Vs dCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gdGFibGUgc2NoMS5wYXJ0Ml8xJyk7CisKKyRyZXN1bHQg PQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZS T00gc2NoMS5wYXJ0Ml8yIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJs ZSBzY2gxLnBhcnQyXzInKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydDsiKTsK KworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUZXN0 IHdoZW4gYSBzdWJzY3JpcHRpb24gaXMgc3Vic2NyaWJpbmcgdG8gbXVsdGlwbGUgcHVibGljYXRp b25zCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIE11 bHRpcGxlIHB1YmxpY2F0aW9ucyB3aXRoIEVYQ0VQVCBsaXN0cyBzaG91bGQgdGhyb3cgYW4gZXJy b3IKK215ICgkc3Rkb3V0LCAkc3RkZXJyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo CisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIxIEZPUiBBTEwg VEFCTEVTIEVYQ0VQVCAoc2NoMS50YWIxKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YjIg Rk9SIEFMTCBUQUJMRVMgRVhDRVBUIChzY2gxLnQxKTsKKykpOworCisoJHJlc3VsdCwgJHN0ZG91 dCwgJHN0ZGVycikgPSAkbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFU RSBTVUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBV QkxJQ0FUSU9OIHRhcF9wdWIxLCB0YXBfcHViMiIKKyk7CitsaWtlKAorCSRzdGRlcnIsCisJcXIv RVJST1I6ICBwdWJsaWNhdGlvbnMgInRhcF9wdWIxIiwgInRhcF9wdWIyIiBhcmUgZGVmaW5lZCB3 aXRoIEVYQ0VQVCBUQUJMRS8sCisJJ3N1YnNjcmlwdGlvbiB3aXRoIG11bHRpcGxlIEVYQ0VQVCBU QUJMRSBwdWJsaWNhdGlvbicpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAnRFJPUCBQVUJMSUNBVElPTiB0YXBfcHViMicpOworCisjIEEgdGFibGUgaXMgaW4gdGhl IEVYQ0VQVCBjbGF1c2Ugb2YgYSBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbiwgYnV0IGlzCisj IGluY2x1ZGVkIGJ5IGEgRk9SIFRBQkxFIHB1YmxpY2F0aW9uLgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIy IEZPUiBUQUJMRSBzY2gxLnRhYjE7CisJSU5TRVJUIElOVE8gc2NoMS50YWIxIFZBTFVFUygxKTsK KykpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NS SVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElP TiB0YXBfcHViMSwgdGFwX3B1YjIiCispOworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vi c2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1YicpOworCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcShJTlNFUlQgSU5UTyBzY2gxLnRhYjEgVkFM VUVTKDIpKSk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWInKTsK KworJHJlc3VsdCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCAqIEZST00gc2NoMS50YWIxIE9SREVSIEJZIGEiKTsKK2lzKCAkcmVzdWx0LCBxcSgxCisy KSwKKwkiY2hlY2sgcmVwbGljYXRpb24gb2YgYSB0YWJsZSBpbiB0aGUgRVhDRVBUIGNsYXVzZSBv ZiBvbmUgcHVibGljYXRpb24gYnV0IGluY2x1ZGVkIGJ5IGFub3RoZXIiCispOworCisjIEFsdGVy IHN1YnNjcmlwdGlvbiByZWZyZXNoIHRocm93cyBlcnJvciB3aGVuIHN1YnNjcmlwdGlvbiBoYXMg bXVsdGlwbGUKKyMgcHVibGljYXRpb25zIHdpdGggRVhDRVBUIFRBQkxFCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlEUk9QIFBVQkxJQ0FUSU9OIHRhcF9w dWIyOworCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViMiBGT1IgQUxMIFRBQkxFUyBFWENFUFQg KHNjaDEudDEpOworKSk7CisKKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIg UkVGUkVTSCBQVUJMSUNBVElPTiIpOworbGlrZSgKKwkkc3RkZXJyLAorCXFyL0VSUk9SOiAgcHVi bGljYXRpb25zICJ0YXBfcHViMSIsICJ0YXBfcHViMiIgYXJlIGRlZmluZWQgd2l0aCBFWENFUFQg VEFCTEUvLAorCSdzdWJzY3JpcHRpb24gd2l0aCBtdWx0aXBsZSBFWENFUFQgVEFCTEUgcHVibGlj YXRpb24nKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdEUk9Q IFNVQlNDUklQVElPTiB0YXBfc3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAnRFJPUCBQVUJMSUNBVElPTiB0YXBfcHViMScpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0RST1AgUFVCTElDQVRJT04gdGFwX3B1YjInKTsKKworIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUZXN0IG11bHRp LXB1YmxpY2F0aW9uIHN1YnNjcmlwdGlvbiB3aGVyZSBhIHRhYmxlIGxpc3RlZCBpbiB0aGUKKyMg RVhDRVBUIGNsYXVzZSBvZiBvbmUgcHVibGljYXRpb24gaXMgaW5jbHVkZWQgYnkgYW5vdGhlciBw dWJsaWNhdGlvbgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJVFJVTkNB VEUgVEFCTEUgc2NoMS50MTsKKwlDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0MSBGT1Ig QUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEucGFydDJfMSkgV0lUSCAocHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0 MiBGT1IgVEFCTEUgc2NoMS5wYXJ0Ml8xIFdIRVJFIChhID4gMTEwKSBXSVRIIChwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworCUlOU0VSVCBJTlRPIHNjaDEudDEgVkFMVUVTICgx MSksICgxMTEpLCAoMTYxKTsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdw b3N0Z3JlcycsIHFxKAorCVRSVU5DQVRFIFRBQkxFIHNjaDEudDEsIHNjaDEucGFydDEsIHNjaDEu cGFydDIsIHNjaDEucGFydDJfMSwgc2NoMS5wYXJ0Ml8yOworCUNSRUFURSBTVUJTQ1JJUFRJT04g dGFwX3N1Yl9wYXJ0IENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04g dGFwX3B1Yl9wYXJ0MSwgdGFwX3B1Yl9wYXJ0MjsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+d2Fp dF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1Yl9wYXJ0Jyk7 CisKKyMgVmVyaWZ5IHRoYXQgcm93cyBmb3Igc2NoMS5wYXJ0Ml8xIGFyZSByZXBsaWNhdGVkIGJl Y2F1c2UgdGhlIHRhYmxlLCBhbHRob3VnaAorIyBsaXN0ZWQgaW4gdGhlIEVYQ0VQVCBjbGF1c2Ug b2YgdGFwX3B1Yl9wYXJ0MSwgaXMgaW5jbHVkZWQgYnkgdGFwX3B1Yl9wYXJ0Mi4KKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00g c2NoMS50MSBPUkRFUiBCWSAxIik7CitpcygkcmVzdWx0LCBxcSgxMQorMTExCisxNjEpLCAnaW5p dGlhbCByb3dzIHJlcGxpY2F0ZWQgdG8gcm9vdCB0YWJsZScpOworCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVFUyAoMTIp LCAoMTEyKSwgKDE2Mik7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn dGFwX3N1Yl9wYXJ0Jyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS50MSBPUkRFUiBCWSAxIik7CitpcygkcmVz dWx0LCBxcSgxMQorMTIKKzExMQorMTEyCisxNjEKKzE2MiksICdzdWJzZXF1ZW50IHJvd3MgcmVw bGljYXRlZCB0byByb290IHRhYmxlJyk7CisKKyRub2RlX3B1Ymxpc2hlci0+c3RvcCgnZmFzdCcp OworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMjQxOTQ1 NzM0ZWMuLjljNTc2ZTNjMjY3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjQyMSw2 ICsyNDIxLDcgQEAgUVROb2RlCiBRVUVSWVRZUEUKIFF1YWxDb3N0CiBRdWFsSXRlbQorUXVhbGlm aWVkUmVsYXRpb25OYW1lCiBRdWVyeQogUXVlcnlDb21wbGV0aW9uCiBRdWVyeURlc2MKLS0gCjIu NDMuMAoK --000000000000ee2354064afe8dc3--