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 1vsZul-0085Mk-13 for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Feb 2026 05:15:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vsZuk-00E1sa-22 for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Feb 2026 05:15:54 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vsZuk-00E1sL-0V for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 05:15:54 +0000 Received: from mail-qv1-xf32.google.com ([2607:f8b0:4864:20::f32]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vsZuh-00000001JFQ-2s3J for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 05:15:54 +0000 Received: by mail-qv1-xf32.google.com with SMTP id 6a1803df08f44-896f9397ecdso52651716d6.3 for ; Tue, 17 Feb 2026 21:15:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771391749; cv=none; d=google.com; s=arc-20240605; b=AN6rcbsMmZ55/Z33ClyGY9GUApkJnTu/P3q+gDXL90CzR6SRTZkp27b0uSGS7kZN4E mq2GQqTpkjZs97TMmt/4AoMgmjStFPH9nr3e0kswseeSjq50raWwhm7T8nN/vjaU7FXY sVosz79o0G/aHt6eA1/fVycK/8QhxwUIYMMe0ENBWh1++c36useenPRzXdlfMDCHvA6Y XGRxN0Da+Vn9aWrAY+6Ol8UDGqfUGYps/tdYT71kvVCEvmb/QKSsc3SkaA7Qntbq1bK6 SAq3PS2DFFv2BDyJw3sRUh9m7vW09G40+fDRGIDWP2OdwkvWk/NQgJkgyDPPbHnCmRDF bBrg== 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=58DCp0o1wP1QWTEFUyg6lQYDsBKepF6EITp9kly8s+0=; fh=zeVtrOnrO8YEH6uDajGnAKRhXWFbYAw/XZILIbAKVFM=; b=ASQZG2pySaHtaUAYZHv/F2/FI4Zd98W+sew51JnG5hhAcBlWPkHzuHGkFh5+5rMVlW o9k7uxksR99146l1+E6k1oDGtLPVyyg5z1xOzwriA9QS8ukOAHVDOfx+3bqGFSJUNnd/ /JTThV3U9RoSwS6QdEYpbfeSoTsjmqepjJAa+w3Ng+g675igMzyN5YT3ybnn5bBjwZLE Xv663Izid3Q7mMCzNCV+u551PPYM7w6gEeGeGbI24CdctlWRnZ6A+OjBWs6Vip9+7gYh pBMInGw3bbcvl1cIbpEb7h9OKziq1yQ5iTl+q0IXQSTI+APs6STJrMDKMmh4uhTM5OBh kVmA==; 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=1771391749; x=1771996549; 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=58DCp0o1wP1QWTEFUyg6lQYDsBKepF6EITp9kly8s+0=; b=PjLXv+uPuFCjUdC9iiTYMoqrYN+mDiA+EHwsn7JqnAsDt7XXFJF8pqepAY3vADmM1x 55F9qD+zA+4WMhUZ52QieakaZuB3NgrJtwgyEZHQif9LKTeoZ5xk1fgymiwkdoCX6L48 ZRiTST2S4PUss2wZFKDfYfJSTZcw0SQ/8mYtePsavqenbhPpUiWVfTVnlp1aCIg32PRU mmZW75ujl/caIhB3H568ehFj4I9ViRQPcMmKh++XNhsY/vaM3nxuwwOTmXNSWDEsRfM1 JIOMgv53e+VRqB7fzCg3EdwvXaqtJfnlZVl7CIaYOcWD2q8ie5kPiL/a34ffG1+M9XR/ 8Aog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771391749; x=1771996549; 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=58DCp0o1wP1QWTEFUyg6lQYDsBKepF6EITp9kly8s+0=; b=awuvaFnOZ6TJqBX/lkcVwSUblNd0sSDb9BNCryUZLQmYaz/KIj+TDnVcFdHcmeExpW OsrMnS4sRh+EGpVvLKdUPrBXuP5OQW808qCkruiUFYySGe3Y6MgViG+IvzPU/uc7fWNo fQE0TP/y23EaBvy/nSN9MAQdn+rVLxdqVKeZgx1vrrcEds9fhmmleHPyMcoJLNOvBIUK Mej4NOEE2Sir42w+9dbdjKI6FUQA3sV/rbH6oJzE9N+JXla9ojt7n660+y+wRrZDOh4W VIH+gYU73pifBjD+i5VNkOXDlMxoaOvwbsybepEtBE8gve2SSEBlLg2iXtMNNaFKhAjA QZtA== X-Forwarded-Encrypted: i=1; AJvYcCWgqRZ2L9U0bpIJpBndpmLGOCPxivFCxmAQizgO/izSFnDsSyx0mF4EWxSGVAjPGMEkaVBwpPNSaFlaPW3R@lists.postgresql.org X-Gm-Message-State: AOJu0Yyfd0CtPIA0F1sTJ1DUQFJzTu0Ley4g1Vbq4juBjzmClnOZW/gM 03IUjUDRdUeMMI+sfaLkCwm51zhfWwESX4o8MXvtDNJyzJGiXtFpl4iSTR6mmxOCqyAjvYKIWYN QwdUfOvZXLwri+zp2xaItp9mj7rGZOrQ= X-Gm-Gg: AZuq6aJ0QUD59Bj8cSTwaBh5I3H75xFfxEbfTmiZZFzz4behucTFRwSCWEHBLsdaH51 q738u2afPsmzN+wEbfGz5yRRvPakkZiMC1LNYVgI6zG5QzJUrt+Kb0JUl/1B6F2KucspqsVWTji tjP6xvIQJ1FgRhxvaT0HLqYRreYnWcthiuzEQGgFhD0HUQt3IYHr6JhR2DRYyWtyMnmRs0tE5O5 Z4nfC3sA0lTa2v/Pd6MFscH76DcseS8UHihdBvK26j+nJ4gpKPp0mS2dOON7vC0Mtr7BIE8L8RF qYGRLg3tRO0Lz8S3vU4L X-Received: by 2002:ad4:5c41:0:b0:895:4c45:a617 with SMTP id 6a1803df08f44-899580482f0mr10648846d6.36.1771391749477; Tue, 17 Feb 2026 21:15:49 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> <17555e46-4fb2-4265-90e0-95cb8ed584a6@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Wed, 18 Feb 2026 10:45:36 +0530 X-Gm-Features: AaiRm53thXgi-5fz4l0cuJYS6yuiytklX9x8TsHHvin-nr-6J1OqNeyDE82NaeI Message-ID: Subject: Re: Non-text mode for pg_dumpall To: tushar Cc: jian he , Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000fc91c4064b124734" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fc91c4064b124734 Content-Type: multipart/alternative; boundary="000000000000fc91c4064b124732" --000000000000fc91c4064b124732 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 28 Jan 2026 at 13:04, tushar wrote: > > > > On Tue, Jan 27, 2026 at 9:11=E2=80=AFPM Mahendra Singh Thalor wrote: >> >> On Fri, 23 Jan 2026 at 19:07, tushar wrote: >> > >> > >> > >> > On Fri, Jan 23, 2026 at 12:21=E2=80=AFPM tushar wrote: >> >> >> >> >> >> Thanks Mahendra, a minor observation - The pg_restore output shows a double slash in the map.dat path (e.g., abc.tar//map.dat). >> >> While it doesn't break the restore, we may want to clean up the path joining logic. >> >> >> >> [edb@1a1c15437e7c bin]$ ./pg_restore -Ft -C abc.tar/ -d postgres -p 9011 -U ed -v >> >> pg_restore: found database "template1 >> >> " (OID: 1) in file "abc.tar//map.dat" >> >> pg_restore: found database "postgres >> >> " (OID: 5) in file "abc.tar//map.dat" >> >> >> >> >> > >> > Please refer to this scenario where - Objects created under template1 and the postgres database by a specific user are failing during a cross-cluster restore. >> > When restoring to a new cluster as a different superuser, pg_restore throws the error: ERROR: role "edb" does not exist. >> > It appears the restore is attempting to preserve the original ownership of template1 objects even when the target environment lacks those specific roles. >> > >> > Steps to reproduce: >> > initdb ( ./initdb -U edb -D data) , start the server , connect to postgres and template1 database one by one and create >> > this table ( create table test(n int); ) >> > perform pg_dumpall operation ( ./pg_dumpall -Ft -f abc.tar) >> > initdb (./initdb -U xyz) , start the server , create a database ( create database abc;) >> > perform pg_restore operation ( ./pg_restore -Ft -C abc.tar/ -d postgres -p 9033 -U xyz) >> > --getting an error, table 'test' will be created on 'template1' database but failed to create on an another database ( in this case - 'abc' database) >> > >> > regards, >> >> Hi, >> Here I am attaching an updated patch for the review and testing. >> Thanks Jian for the reporting rebase issue. >> > > Thanks Mahendra, getting a regression error during the restore process after applying this patch. > > [edb@1a1c15437e7c bin]$ ./pg_restore -Ft -C abc1.tar/ -d postgres -p 900= 0 > pg_restore: error: could not execute query: ERROR: non-standard string literals are not supported > Command was: SET standard_conforming_strings =3D off; > pg_restore: warning: errors ignored on restore: 1 > > in earlier patches - this was not coming. > > regards, > Thanks Andrew for some design related feedback. Thanks Jian for the offline discussions, reviews, testing and delta patches= . Thanks Tushar for the detailed testing. *Brief about this patch:* new option to pg_dumpall: --format=3Dd/t/c/p directory/tar/custam/plain If the user gives a non-text format with pg_dumpall command, then the full cluster will be dumped and global objects (roles. tablespaces, databases) will be dumped into toc.glo file in custom format with drop commands and databases will be dumped into a given archive format one by one with oid.tar/oid.dmp/oid files/dir. When restoring, if the user gives -g(globals-only) option, then creating commands of only global users/tablespaces/databases will be restored. (no drop commands will be executed) toc.glo will be executed with -e(exit-on-error=3Dfalse) and --transaction-size=3D0 as some user already created. If the user wants = to restore a single database, they can restore it by a single dump file. For --clean and -g(globals-only), we added some error cases so that roles/databases/tablespaces will not be dropped. Here, I am attaching an updated patch for the review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000fc91c4064b124732 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Wed, 28 Jan 2026 at 13:04, tushar <= tushar.a= huja@enterprisedb.com> wrote:
>
>
>
> On Tue= , Jan 27, 2026 at 9:11=E2=80=AFPM Mahendra Singh Thalor <mahi6run@gmail.com> wrote:<= br>>>
>> On Fri, 23 Jan 2026 at 19:07, tushar <tushar.ahuja@enter= prisedb.com> wrote:
>> >
>> >
>> &g= t;
>> > On Fri, Jan 23, 2026 at 12:21=E2=80=AFPM tushar <tushar.ahuj= a@enterprisedb.com> wrote:
>> >>
>> >>=
>> >> Thanks Mahendra, a minor =C2=A0observation - =C2=A0Th= e pg_restore output shows a double slash in the map.dat path (e.g., abc.tar= //map.dat).
>> >> While it doesn't break the restore, we= may want to clean up the path joining logic.
>> >>
>&= gt; >> [edb@1a1c15437e7c bin]$ ./pg_restore -Ft -C abc.tar/ -d postgr= es -p 9011 =C2=A0-U =C2=A0ed -v
>> >> pg_restore: found data= base "template1
>> >> " (OID: 1) in file "abc= .tar//map.dat"
>> >> pg_restore: found database "p= ostgres
>> >> " (OID: 5) in file "abc.tar//map.dat= "
>> >>
>> >>
>> >
>&g= t; > Please refer to this scenario where - Objects =C2=A0created under t= emplate1 and the postgres database by a specific user are failing during a = cross-cluster restore.
>> > When restoring to a new cluster as = a different superuser, pg_restore throws the error: ERROR: role "edb&q= uot; does not exist.
>> > It appears the restore is attempting = to preserve the original ownership of template1 objects even when the targe= t environment lacks those specific roles.
>> >
>> >= Steps to reproduce:
>> > initdb ( ./initdb -U edb -D data) , s= tart the server , connect to postgres and =C2=A0template1 database one by o= ne and =C2=A0create
>> > this table ( create table test(n int);= )
>> > perform pg_dumpall operation ( ./pg_dumpall -Ft -f abc.= tar)
>> > initdb (./initdb -U xyz) , start the server , create = a database ( create database abc;)
>> > perform pg_restore oper= ation ( ./pg_restore -Ft -C abc.tar/ -d postgres -p 9033 -U xyz)
>>= ; > --getting an error, =C2=A0table 'test' will be created on &#= 39;template1' database but failed to create on an another database ( in= this case - 'abc' database)
>> >
>> > rega= rds,
>>
>> Hi,
>> Here I am attaching an updated= patch for the review and testing.
>> Thanks Jian for the reportin= g rebase issue.
>>
>
> Thanks Mahendra, getting a regr= ession error during the restore process after applying this patch.
><= br>> =C2=A0[edb@1a1c15437e7c bin]$ ./pg_restore -Ft -C abc1.tar/ -d post= gres -p 9000
> pg_restore: error: could not execute query: ERROR: =C2= =A0non-standard string literals are not supported
> Command was: SET = standard_conforming_strings =3D off;
> pg_restore: warning: errors ig= nored on restore: 1
>
> in earlier patches - this was not comi= ng.
>
> regards,
>

Thanks Andrew for some design = related feedback.

Thanks Jian for the offline discussions, reviews,= testing and delta patches.

Thanks Tushar for the detail= ed testing.

Brief about this patch:
new option to pg_dumpall: --format=3Dd/t/c/p directory/tar/custam/plain<= /div>

If the user gives a non-text format with pg_dumpal= l command, then the full cluster will be dumped and global objects (roles. = tablespaces, databases) will be dumped into toc.glo file in custom format w= ith drop commands and databases will be dumped into a given archive format = one by one with oid.tar/oid.dmp/oid files/dir.
When restoring, if= the user gives -g(globals-only) option, then creating commands of=C2=A0 on= ly global users/tablespaces/databases will be restored. (no drop commands w= ill be executed)
toc.glo will be executed with -e(exit-on-error= =3Dfalse) and=C2=A0--transaction-size=3D0 as some user already created. If = the user wants to restore a single database, they can restore it by a singl= e dump file. For --clean and -g(globals-only), we added some error cases so= that roles/databases/tablespaces will not be dropped.
=C2=A0
Here, I am attaching an updated patch for the review and testin= g.

--
Thanks and Regards
Mahendra Singh ThalorEnterpriseDB: h= ttp://www.enterprisedb.com
--000000000000fc91c4064b124732-- --000000000000fc91c4064b124734 Content-Type: application/octet-stream; name="v16_18022026-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v16_18022026-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlrkwah00 RnJvbSAwY2FjMjI3ZDljNWQ3NTg5OWMwNTUwMzlhMDg2MWNlNzFmNzM0YjJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAxNyBGZWIgMjAyNiAxNTozNjoyMCArMDUzMApTdWJqZWN0OiBbUEFU Q0hdIE5vbiB0ZXh0IG1vZGVzIGZvciBwZ19kdW1wYWxsLCBjb3JyZXNwb25kaW5nbHkgY2hhbmdl IAogcGdfcmVzdG9yZQoKICAgIHBnX2R1bXBhbGwgYWNxdWlyZXMgYSBuZXcgLUYvLS1mb3JtYXQg b3B0aW9uLCB3aXRoIHRoZSBzYW1lIG1lYW5pbmdzIGFzCiAgICBwZ19kdW1wLiBUaGUgZGVmYXVs dCBpcyBwLCBtZWFuaW5nIHBsYWluIHRleHQuIEZvciBhbnkgb3RoZXIgdmFsdWUsIGEKICAgIGRp cmVjdG9yeSBpcyBjcmVhdGVkIGNvbnRhaW5pbmcgdHdvIGZpbGVzLCB0b2MuZ2xvIGFuZCBtYXAu ZGF0LiBUaGUKICAgIGZpcnN0IGNvbnRhaW5zIGNvbW1hbmRzIHJlc3RvcmluZyB0aGUgZ2xvYmFs IGRhdGEgaW4gY3VzdG9tIGZvcm1hdCwgYW5kIHRoZSBzZWNvbmQKICAgIGNvbnRhaW5zIGEgbWFw IGZyb20gb2lkcyB0byBkYXRhYmFzZSBuYW1lcyBpbiB0ZXh0IGZvcm1hdC4gSXQgd2lsbCBhbHNv IGNvbnRhaW4gYQogICAgc3ViZGlyZWN0b3J5IGNhbGxlZCBkYXRhYmFzZXMsIGluc2lkZSB3aGlj aCBpdCB3aWxsIGNyZWF0ZSBhcmNoaXZlcyBpbgogICAgdGhlIHNwZWNpZmllZCBmb3JtYXQsIG5h bWVkIHVzaW5nIHRoZSBkYXRhYmFzZSBvaWRzLgoKICAgIEluIHRoZXNlIGNhc2VzcyB0aGUgLWYg YXJndW1lbnQgaXMgcmVxdWlyZWQuCgogICAgSWYgcGdfcmVzdG9yZSBlbmNvdW50ZXJzIGEgZGly ZWN0b3J5IGNvbnRhaW5pbmcgbWFwLmRhdCBhbmQgdG9jLmdsbywKICAgIGl0IHJlc3RvcmVzIHRo ZSBnbG9iYWwgc2V0dGluZ3MgZnJvbSB0b2MuZ2xvIGlmIGV4aXN0LCBhbmQgdGhlbgogICAgcmVz dG9yZXMgZWFjaCBkYXRhYmFzZS4KCiAgICBwZ19yZXN0b3JlIGFjcXVpcmVzIHR3byBuZXcgb3B0 aW9uczogLWcvLS1nbG9iYWxzLW9ubHkgd2hpY2ggc3VwcHJlc3NlcwogICAgcmVzdG9yYXRpb24g b2YgYW55IGRhdGFiYXNlcywgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSB3aGljaCBpbmhpYml0cwog ICAgcmVzdG9yYXRpb24gb2YgcGFydGljdWFsciBkYXRhYmFzZShzKSBpbiB0aGUgc2FtZSB3YXkg dGhlIHNhbWUgb3B0aW9uCiAgICB3b3JrcyBpbiBwZ19kdW1wYWxsLgoKdjIzIGludGVybmFsIDEK LS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbCAgICAgfCAxMDkgKysrKy0KIGRv Yy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICB8ICA2OCArKy0KIHNyYy9iaW4vcGdf ZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGFyYWxs ZWwuYyAgICAgICAgICAgfCAgMTAgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oICAgICAg ICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgfCAgNjMg KystCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggfCAgIDEgKwogc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxs LmMgICAgICAgICB8IDY4OCArKysrKysrKysrKysrKysrKysrKystLS0tLQogc3JjL2Jpbi9wZ19k dW1wL3BnX3Jlc3RvcmUuYyAgICAgICAgIHwgNjkxICsrKysrKysrKysrKysrKysrKysrKysrKysr LQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgIDUwICsrCiBzcmMvYmlu L3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCAgfCA0MzIgKysrKysrKysrKysrKysrKysKIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICB8ICAgMSArCiAxNCBmaWxlcyBjaGFu Z2VkLCAxOTYxIGluc2VydGlvbnMoKyksIDE1OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbAoKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1w YWxsLnNnbWwKaW5kZXggODgzNGI3ZWMxNDEuLjFlNDY3ODMzNGZhIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1 bXBhbGwuc2dtbApAQCAtMTYsNyArMTYsMTAgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAK ICA8cmVmbmFtZWRpdj4KICAgPHJlZm5hbWU+cGdfZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1 cnBvc2U+ZXh0cmFjdCBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0 YWJhc2UgY2x1c3RlciBpbnRvIGEgc2NyaXB0IGZpbGU8L3JlZnB1cnBvc2U+CisKKyAgPHJlZnB1 cnBvc2U+CisgICBleHBvcnQgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ IGRhdGFiYXNlIGNsdXN0ZXIgYXMgYW4gU1FMIHNjcmlwdCBvciB0byBvdGhlciBmb3JtYXRzCisg IDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVkaXY+CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0z Myw3ICszNiw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cGFyYT4KICAgIDxhcHBs aWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciB3cml0aW5n IG91dAogICAgKDxxdW90ZT5kdW1waW5nPC9xdW90ZT4pIGFsbCA8cHJvZHVjdG5hbWU+UG9zdGdy ZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcwotICAgb2YgYSBjbHVzdGVyIGludG8gb25lIHNj cmlwdCBmaWxlLiAgVGhlIHNjcmlwdCBmaWxlIGNvbnRhaW5zCisgICBvZiBhIGNsdXN0ZXIgaW50 byBhbiBTUUwgc2NyaXB0IGZpbGUgb3IgYW4gYXJjaGl2ZS4gIFRoZSBvdXRwdXQgY29udGFpbnMK ICAgIDxhY3JvbnltPlNRTDwvYWNyb255bT4gY29tbWFuZHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBp bnB1dCB0byA8eHJlZgogICAgbGlua2VuZD0iYXBwLXBzcWwiLz4gdG8gcmVzdG9yZSB0aGUgZGF0 YWJhc2VzLiAgSXQgZG9lcyB0aGlzIGJ5CiAgICBjYWxsaW5nIDx4cmVmIGxpbmtlbmQ9ImFwcC1w Z2R1bXAiLz4gZm9yIGVhY2ggZGF0YWJhc2UgaW4gdGhlIGNsdXN0ZXIuCkBAIC01MiwxMSArNTUs MTYgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAg IFRoZSBTUUwgc2NyaXB0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAg VXNlIHRoZQorICAgUGxhaW4gdGV4dCBTUUwgc2NyaXB0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhl IHN0YW5kYXJkIG91dHB1dC4gIFVzZSB0aGUKICAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlv bj4tLWZpbGU8L29wdGlvbj4gb3B0aW9uIG9yIHNoZWxsIG9wZXJhdG9ycyB0bwogICAgcmVkaXJl Y3QgaXQgaW50byBhIGZpbGUuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEFyY2hpdmVzIGlu IG90aGVyIGZvcm1hdHMgd2lsbCBiZSBwbGFjZWQgaW4gYSBkaXJlY3RvcnkgbmFtZWQgdXNpbmcg dGhlCisgICA8b3B0aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+LCB3aGlj aCBpcyByZXF1aXJlZCBpbiB0aGlzIGNhc2UuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgPGFw cGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiBuZWVkcyB0byBjb25uZWN0IHNldmVy YWwKICAgdGltZXMgdG8gdGhlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g c2VydmVyIChvbmNlIHBlcgpAQCAtMTMxLDE2ICsxMzksOTMgQEAgUG9zdGdyZVNRTCBkb2N1bWVu dGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZp ZWQgZmlsZS4gIElmIHRoaXMgaXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0YW5kYXJkIG91dHB1 dCBpcyB1c2VkLgorICAgICAgICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4gb25seSBiZSBvbWl0dGVk IHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBwbGFpbgogICAgICAgIDwvcGFyYT4K ICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0 ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxv cHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVw bGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBTcGVjaWZ5IHRoZSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIEluIHBsYWluIGZv cm1hdCwgYWxsIHRoZSBkdW1wIGRhdGEgaXMKKyAgICAgICAgc2VudCBpbiBhIHNpbmdsZSB0ZXh0 IHN0cmVhbS4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICAgICBJbiBhbGwgb3RoZXIgbW9k ZXMsIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gZmlyc3QgY3JlYXRlcyB0 d28gZmlsZXM6CisgICAgICAgIDxmaWxlbmFtZT50b2MuZ2xvPC9maWxlbmFtZT4gYW5kIDxmaWxl bmFtZT5tYXAuZGF0PC9maWxlbmFtZT4sIGluIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgc3BlY2lm aWVkIGJ5IDxvcHRpb24+LS1maWxlPC9vcHRpb24+LgorICAgICAgICBUaGUgZmlyc3QgZmlsZSBj b250YWlucyBnbG9iYWwgZGF0YSwgc3VjaCBhcyByb2xlcyBhbmQgdGFibGVzcGFjZXMgaW4gY3Vz dG9tIGZvcm1hdC4gVGhlIHNlY29uZAorICAgICAgICBjb250YWlucyBhIG1hcHBpbmcgYmV0d2Vl biBkYXRhYmFzZSBvaWRzIGFuZCBuYW1lcy4gVGhlc2UgZmlsZXMgYXJlIHVzZWQgYnkKKyAgICAg ICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPi4gRGF0YSBmb3IgaW5kaXZp ZHVhbCBkYXRhYmFzZXMgaXMgcGxhY2VkIGluCisgICAgICAgIDxmaWxlbmFtZT5kYXRhYmFzZXM8 L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnksIG5hbWVkIHVzaW5nIHRoZSBkYXRhYmFzZSdzIDx0eXBl Pm9pZDwvdHlwZT4uCisKKyAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVu dHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAg ICA8dGVybT48bGl0ZXJhbD5kaXJlY3Rvcnk8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxp c3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgZGlyZWN0b3J5LWZv cm1hdCBhcmNoaXZlcyBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9y IGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGRpcmVjdG9yeQorICAgICAgICAgICB3aWxsIGhh dmUgZGF0YWJhc2UgPHR5cGU+b2lkPC90eXBlPiBhcyBpdHMgbmFtZS4KKyAgICAgICAgICA8L3Bh cmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cDwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0ZXJhbD48L3Rlcm0+Cisg ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBh IHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0aGUgZGVmYXVsdCkuCisgICAgICAgICAgPC9w YXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAg ICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmM8L2xpdGVyYWw+ PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9saXRlcmFsPjwvdGVybT4K KyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0 IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAgICBz dWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAg ICB3aWxsIGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9pZC5kbXA8L2ZpbGVuYW1lPiB3aGVyZSA8dHlw ZT5kYm9pZDwvdHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhl IGRhdGFiYXNlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+dDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJh bD50YXI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxw YXJhPgorICAgICAgICAgICBPdXRwdXQgYSB0YXItZm9ybWF0IGFyY2hpdmUgZm9yIGVhY2ggZGF0 YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRo ZSBhcmNoaXZlCisgICAgICAgICAgIHdpbGwgYmUgbmFtZWQgPGZpbGVuYW1lPmRib2lkLnRhcjwv ZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90eXBlPiBpcyB0aGUKKyAgICAgICAgICAgPHR5 cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgPC9wYXJhPgorICAgICAg ICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPC92YXJp YWJsZWxpc3Q+CisKKyAgICAgICBOb3RlOiBzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIv PiBmb3IgZGV0YWlscworICAgICAgIG9mIGhvdyB0aGUgdmFyaW91cyBub24gcGxhaW4gdGV4dCBh cmNoaXZlcyB3b3JrLgorCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAg IDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0 aW9uPi1nPC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25s eTwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KICAgICAgICA8cGFyYT4KICAgICAg ICAgRHVtcCBvbmx5IGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBk YXRhYmFzZXMuCisgICAgICAgIE5vdGU6IDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29w dGlvbj48L3Rlcm0+IGNhbiBub3QgYmUgdXNlZCB3aXRoCisgICAgICAgIDx0ZXJtPjxvcHRpb24+ LS1jbGVhbjwvb3B0aW9uPjwvdGVybT4gd2l0aCBub24tdGV4dCBkdW1wIGZvcm1hdC4KICAgICAg ICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTkz Nyw5ICsxMDIyLDE2IEBAIGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPlBBVFRFUk48L3JlcGxhY2VhYmxlPgogICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgog ICA8cGFyYT4KICAgIFRvIGR1bXAgYWxsIGRhdGFiYXNlczoKLQorICAgSWYgZm9ybWF0IGlzIGdp dmVuLCB0aGVuIGR1bXAgd2lsbCBiZSBiYXNlZCBvbiBmb3JtYXQsIGRlZmF1bHQgcGxhaW4uCiA8 c2NyZWVuPgogPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAmZ3Q7IGRi Lm91dDwvdXNlcmlucHV0PgorPC9zY3JlZW4+CisKKzxzY3JlZW4+Cis8cHJvbXB0PiQ8L3Byb21w dD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtZiBkYi5vdXQ8L3Vz ZXJpbnB1dD4KKzxwcm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwgLS1mb3Jt YXQ9Y3VzdG9tIC1mIGRiLm91dDwvdXNlcmlucHV0PgorPHByb21wdD4kPC9wcm9tcHQ+IDx1c2Vy aW5wdXQ+cGdfZHVtcGFsbCAtLWZvcm1hdD10YXIgLWYgZGIub3V0PC91c2VyaW5wdXQ+Cis8cHJv bXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PXBsYWluIC1mIGRi Lm91dDwvdXNlcmlucHV0PgogPC9zY3JlZW4+CiAgIDwvcGFyYT4KIApAQCAtOTU2LDYgKzEwNDgs MTUgQEAgZXhjbHVkZSBkYXRhYmFzZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+UEFU VEVSTjwvcmVwbGFjZWFibGU+CiAgICB0aGUgc2NyaXB0IHdpbGwgYXR0ZW1wdCB0byBkcm9wIG90 aGVyIGRhdGFiYXNlcyBpbW1lZGlhdGVseSwgYW5kIHRoYXQKICAgIHdpbGwgZmFpbCBmb3IgdGhl IGRhdGFiYXNlIHlvdSBhcmUgY29ubmVjdGVkIHRvLgogICA8L3BhcmE+CisKKyAgPHBhcmE+Cisg ICAgSWYgZHVtcCB3YXMgdGFrZW4gaW4gbm9uLXRleHQgZm9ybWF0LCB0aGVuIHVzZSBwZ19yZXN0 b3JlIHRvIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4KKzxzY3JlZW4+Cis8cHJvbXB0PiQ8L3Byb21w dD4gPHVzZXJpbnB1dD5wZ19yZXN0b3JlIGRiLm91dCAtZCBwb3N0Z3JlcyAtQzwvdXNlcmlucHV0 PgorPC9zY3JlZW4+CisgICBUaGlzIHdpbGwgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcy4gSWYg dXNlciBkb24ndCB3YW50IHRvIHJlc3RvcmUgc29tZSBkYXRhYmFzZXMsIHRoZW4gdXNlCisgICAt LWV4Y2x1ZGUtcGF0dGVybiB0byBza2lwIHRob3NlLgorPC9wYXJhPgogIDwvcmVmc2VjdDE+CiAK ICA8cmVmc2VjdDE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCmluZGV4IDQyMGEzMDhhN2M3Li5j NGY1OTE4NzA0OCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKQEAgLTE4LDggKzE4LDkgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgIDxyZWZuYW1lPnBnX3Jlc3RvcmU8L3JlZm5hbWU+ CiAKICAgPHJlZnB1cnBvc2U+Ci0gICByZXN0b3JlIGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8 L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuCi0gICBhcmNoaXZlIGZpbGUgY3JlYXRlZCBi eSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+CisgICByZXN0b3JlIDxwcm9kdWN0 bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2VzIGZyb20gYXJjaGl2ZXMKKyAg IGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFw cGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9y ZWZuYW1lZGl2PgogCkBAIC0zOCwxMyArMzksMTQgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAKICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlz IGEgdXRpbGl0eSBmb3IgcmVzdG9yaW5nIGEKLSAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlCi0gICBjcmVhdGVkIGJ5IDx4cmVm IGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAorICAg PHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBvciBjbHVzdGVy IGZyb20gYW4gYXJjaGl2ZQorICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1w Ii8+IG9yCisgICA8eHJlZiBsaW5rZW5kPSJhcHAtcGctZHVtcGFsbCIvPiBpbiBvbmUgb2YgdGhl IG5vbi1wbGFpbi10ZXh0CiAgICBmb3JtYXRzLiAgSXQgd2lsbCBpc3N1ZSB0aGUgY29tbWFuZHMg bmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0IHRoZQotICAgZGF0YWJhc2UgdG8gdGhlIHN0YXRlIGl0 IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMgc2F2ZWQuICBUaGUKLSAgIGFyY2hpdmUgZmlsZXMg YWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IHRvCisgICBk YXRhYmFzZSBvciBjbHVzdGVyIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQg d2FzIHNhdmVkLiBUaGUKKyAgIGFyY2hpdmVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jl c3RvcmU8L2FwcGxpY2F0aW9uPiB0bwogICAgYmUgc2VsZWN0aXZlIGFib3V0IHdoYXQgaXMgcmVz dG9yZWQsIG9yIGV2ZW4gdG8gcmVvcmRlciB0aGUgaXRlbXMKLSAgIHByaW9yIHRvIGJlaW5nIHJl c3RvcmVkLiBUaGUgYXJjaGl2ZSBmaWxlcyBhcmUgZGVzaWduZWQgdG8gYmUKKyAgIHByaW9yIHRv IGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2ZSBmb3JtYXRzIGFyZSBkZXNpZ25lZCB0byBiZQog ICAgcG9ydGFibGUgYWNyb3NzIGFyY2hpdGVjdHVyZXMuCiAgIDwvcGFyYT4KIApAQCAtNTIsMTAg KzU0LDE3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgPGFwcGxpY2F0aW9uPnBnX3Jl c3RvcmU8L2FwcGxpY2F0aW9uPiBjYW4gb3BlcmF0ZSBpbiB0d28gbW9kZXMuCiAgICBJZiBhIGRh dGFiYXNlIG5hbWUgaXMgc3BlY2lmaWVkLCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGlj YXRpb24+CiAgICBjb25uZWN0cyB0byB0aGF0IGRhdGFiYXNlIGFuZCByZXN0b3JlcyBhcmNoaXZl IGNvbnRlbnRzIGRpcmVjdGx5IGludG8KLSAgIHRoZSBkYXRhYmFzZS4gIE90aGVyd2lzZSwgYSBz Y3JpcHQgY29udGFpbmluZyB0aGUgU1FMCi0gICBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVidWls ZCB0aGUgZGF0YWJhc2UgaXMgY3JlYXRlZCBhbmQgd3JpdHRlbgorICAgdGhlIGRhdGFiYXNlLgor ICAgV2hlbiByZXN0b3JpbmcgZnJvbSBhIGR1bXAgbWFkZSBieSA8YXBwbGljYXRpb24+cGdfZHVt cGFsbDwvYXBwbGljYXRpb24+LAorICAgZWFjaCBkYXRhYmFzZSB3aWxsIGJlIGNyZWF0ZWQgYW5k IHRoZW4gdGhlIHJlc3RvcmF0aW9uIHdpbGwgYmUgcnVuIGluIHRoYXQKKyAgIGRhdGFiYXNlLgor CisgICBPdGhlcndpc2UsIHdoZW4gYSBkYXRhYmFzZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGEg c2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAorICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVp bGQgdGhlIGRhdGFiYXNlIG9yIGNsdXN0ZXIgaXMgY3JlYXRlZCBhbmQgd3JpdHRlbgogICAgdG8g YSBmaWxlIG9yIHN0YW5kYXJkIG91dHB1dC4gIFRoaXMgc2NyaXB0IG91dHB1dCBpcyBlcXVpdmFs ZW50IHRvCi0gICB0aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5w Z19kdW1wPC9hcHBsaWNhdGlvbj4uCisgICB0aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9m IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5w Z19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisKICAgIFNvbWUgb2YgdGhlIG9wdGlvbnMgY29udHJv bGxpbmcgdGhlIG91dHB1dCBhcmUgdGhlcmVmb3JlIGFuYWxvZ291cyB0bwogICAgPGFwcGxpY2F0 aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcHRpb25zLgogICA8L3BhcmE+CkBAIC0xNTIsNiAr MTYxLDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgIGNvbW1hbmRzIHRoYXQg bWVudGlvbiB0aGlzIGRhdGFiYXNlLgogICAgICAgICBBY2Nlc3MgcHJpdmlsZWdlcyBmb3IgdGhl IGRhdGFiYXNlIGl0c2VsZiBhcmUgYWxzbyByZXN0b3JlZCwKICAgICAgICAgdW5sZXNzIDxvcHRp b24+LS1uby1hY2w8L29wdGlvbj4gaXMgc3BlY2lmaWVkLgorICAgICAgICA8b3B0aW9uPi0tY3Jl YXRlPC9vcHRpb24+IGlzIHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNl cworICAgICAgICBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVt cGFsbDwvYXBwbGljYXRpb24+LgogICAgICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAt MjQ3LDYgKzI1OCwyMSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8 dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWds b2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVz cGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAg ICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYW4g YXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4u CisgICAgICAgIE5vdGU6IDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rl cm0+IGNhbiBub3QgYmUgdXNlZCB3aXRoIDx0ZXJtPjxvcHRpb24+LS1leGl0LW9uLWVycm9yPC9v cHRpb24+PC90ZXJtPiwKKyAgICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLXNpbmdsZS10cmFu c2FjdGlvbjwvb3B0aW9uPjwvdGVybT4sIDx0ZXJtPjxvcHRpb24+LS1jbGVhbjwvb3B0aW9uPjwv dGVybT4gYW5kIDx0ZXJtPjxvcHRpb24+LS10cmFuc2FjdGlvbi1zaXplPU48L29wdGlvbj48L3Rl cm0+CisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50 cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rl cm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CkBAIC01ODEsNiArNjA3 LDI4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAg PC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRp b24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0 ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgPHBhcmE+CisgICAgICAgIERvIG5vdCByZXN0b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1h dGNoZXMKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3Jl cGxhY2VhYmxlPi4KKyAgICAgICAgTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5 IHdyaXRpbmcgbXVsdGlwbGUKKyAgICAgICAgPG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29w dGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0 ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyB1c2VkIGJ5CisgICAg ICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJh bD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJu cyIvPiksCisgICAgICAgIHNvIG11bHRpcGxlIGRhdGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRl ZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4u ICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUgY2FyZWZ1bCB0bworICAgICAgICBxdW90ZSB0aGUg cGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVudCBzaGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5 IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBs aWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAg PC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4K ICAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWx0ZXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0 ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKaW5kZXggNzliZDUwMzY4NDEuLjdjOWE0NzU5NjNiIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21l c29uLmJ1aWxkCkBAIC0xMDMsNiArMTAzLDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDA0X3Bn X2R1bXBfcGFyYWxsZWwucGwnLAogICAgICAgJ3QvMDA1X3BnX2R1bXBfZmlsdGVyZmlsZS5wbCcs CiAgICAgICAndC8wMDZfcGdfZHVtcF9jb21wcmVzcy5wbCcsCisJICAndC8wMDdfcGdfZHVtcGFs bC5wbCcsCiAgICAgICAndC8wMTBfZHVtcF9jb25uc3RyLnBsJywKICAgICBdLAogICB9LApkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGFy YWxsZWwuYwppbmRleCA1NmNiMmMxZjMyZC4uMjlmYTIxYTFjYzAgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wYXJhbGxlbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBA IC0zMzMsNiArMzMzLDE2IEBAIG9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJ b25fZXhpdF9uaWNlbHkoYXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbyk7 CiB9CiAKKy8qCisgKiBXaGVuIHBnX3Jlc3RvcmUgcmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJhc2Vz LCB0aGVuIHVwZGF0ZSBhbHJlYWR5IGFkZGVkIGVudHJ5CisgKiBpbnRvIGFycmF5IGZvciBjbGVh bnVwLgorICovCit2b2lkCityZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpB SFgpCit7CisJc2h1dGRvd25faW5mby5BSFggPSBBSFg7Cit9CisKIC8qCiAgKiBvbl9leGl0X25p Y2VseSBoYW5kbGVyIGZvciBzaHV0dGluZyBkb3duIGRhdGFiYXNlIGNvbm5lY3Rpb25zIGFuZAog ICogd29ya2VyIHByb2Nlc3NlcyBjbGVhbmx5LgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IDJmOGQ5Nzk5 YzMwLi5mZGE5MTJiYTBhOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5o CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzEzLDcgKzMxMyw3IEBAIGV4 dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBEdW1wT3B0aW9ucyAqZG9w dCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nlc3NBcmNoaXZlUmVzdG9y ZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJj aGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9v bCBhcHBlbmRfZGF0YSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJu IEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZl Rm9ybWF0IGZtdCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggN2FmY2Mw ODU5YzguLmZhYTA4Y2VkYWE1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBA IC04Niw3ICs4Niw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpB SCk7CiBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMg dm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRp bWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25z dCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWMpOworCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NG aWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJl c3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRP dXRwdXQpOwogCkBAIC0zMzksOSArMzM5LDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlv bnMoQXJjaGl2ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJs aWMgKi8KKy8qCisgKiBSZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNl dCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisg KiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCisg Ki8KIHZvaWQKLVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFy Y2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChB cmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMu cm9wdDsKQEAgLTQ1OCw3ICs0NjMsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJ ICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQt PmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVNl dE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMpOworCQlT ZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLCBhcHBl bmRfZGF0YSk7CiAKIAlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1 bXBcbi0tXG5cbiIpOwogCkBAIC03NjEsNiArNzY2LDE1IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hp dmUgKkFIWCkKIAkJCWlmICgodGUtPnJlcXMgJiAoUkVRX1NDSEVNQSB8IFJFUV9EQVRBIHwgUkVR X1NUQVRTKSkgPT0gMCkKIAkJCQljb250aW51ZTsJCS8qIGlnbm9yZSBpZiBub3QgdG8gYmUgZHVt cGVkIGF0IGFsbCAqLwogCisJCQkvKiBTa2lwIGlmIG5vLXRhYmxlc3BhY2UgaXMgZ2l2ZW4uICov CisJCQlpZiAocm9wdC0+bm9UYWJsZXNwYWNlICYmIHRlICYmIHRlLT5kZXNjICYmCisJCQkJKHN0 cmNtcCh0ZS0+ZGVzYywgIlRBQkxFU1BBQ0UiKSA9PSAwKSkKKwkJCQljb250aW51ZTsKKworCQkJ LyogU2tpcCBEUk9QIERBVEFCQVNFL1JPTEVTL1RBQkxFU1BBQ0UgaWYgd2UgZGlkbid0IHNwZWNp ZnkgLS1jbGVhbiAqLworCQkJaWYgKCFyb3B0LT5kcm9wU2NoZW1hICYmIHRlICYmIHRlLT50YWcg JiYgKHN0cmNtcCh0ZS0+dGFnLCAiRFJPUF9HTE9CQUwiKSA9PSAwKSkKKwkJCQljb250aW51ZTsK KwogCQkJc3dpdGNoIChfdG9jRW50cnlSZXN0b3JlUGFzcyh0ZSkpCiAJCQl7CiAJCQkJY2FzZSBS RVNUT1JFX1BBU1NfTUFJTjoKQEAgLTEzMTYsNyArMTMzMCw3IEBAIFByaW50VE9DU3VtbWFyeShB cmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5h bWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVj KTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMs IGZhbHNlKTsKIAogCWlmIChzdHJmdGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQ R0RVTVBfU1RSRlRJTUVfRk1ULAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0g MCkKQEAgLTE2OTEsMTEgKzE3MDUsMTUgQEAgYXJjaHByaW50ZihBcmNoaXZlICpBSCwgY29uc3Qg Y2hhciAqZm10LC4uLikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFN0 dWZmIGJlbG93IGhlcmUgc2hvdWxkIGJlICdwcml2YXRlJyB0byB0aGUgYXJjaGl2ZXIgcm91dGlu ZXMKKyAqCisgKiBJZiBhcHBlbmRfZGF0YSBpcyBzZXQsIHRoZW4gYXBwZW5kIGRhdGEgaW50byBm aWxlIGFzIHdlIGFyZSByZXN0b3JpbmcgZHVtcAorICogb2YgbXVsdGlwbGUgZGF0YWJhc2VzIHdo aWNoIHdhcyB0YWtlbiBieSBwZ19kdW1wYWxsLgogICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCiAKIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0 IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Npb25fc3BlYykKKwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwpAQCAtMTcxNSw3ICsxNzMzLDcgQEAgU2V0T3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCWZu ID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJ aWYgKGFwcGVuZF9kYXRhIHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQogCQltb2RlID0g UEdfQklOQVJZX0E7CiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CkBAIC0yMzkxLDcgKzI0 MDksNyBAQCBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1h dCBmbXQsCiAKIAkvKiBpbml0aWFsaXplIGZvciBiYWNrd2FyZHMgY29tcGF0aWJsZSBzdHJpbmcg cHJvY2Vzc2luZyAqLwogCUFILT5wdWJsaWMuZW5jb2RpbmcgPSAwOwkvKiBQR19TUUxfQVNDSUkg Ki8KLQlBSC0+cHVibGljLnN0ZF9zdHJpbmdzID0gZmFsc2U7CisJQUgtPnB1YmxpYy5zdGRfc3Ry aW5ncyA9IHRydWU7CiAKIAkvKiBzcWwgZXJyb3IgaGFuZGxpbmcgKi8KIAlBSC0+cHVibGljLmV4 aXRfb25fZXJyb3IgPSB0cnVlOwpAQCAtMzAyNyw2ICszMDQ1LDE2IEBAIF90b2NFbnRyeVJlcXVp cmVkKFRvY0VudHJ5ICp0ZSwgdGVTZWN0aW9uIGN1clNlY3Rpb24sIEFyY2hpdmVIYW5kbGUgKkFI KQogCQkJcmV0dXJuIDA7CiAJfQogCisJLyoKKwkgKiBHbG9iYWwgb2JqZWN0IFRPQyBlbnRyaWVz IChlLmcuLCBST0xFcyBvciBUQUJMRVNQQUNFcykgbXVzdCBub3QgYmUKKwkgKiBpZ25vcmVkLgor CSAqLworCWlmIChzdHJjbXAodGUtPmRlc2MsICJST0xFIikgPT0gMCB8fAorCQlzdHJjbXAodGUt PmRlc2MsICJST0xFIFBST1BFUlRJRVMiKSA9PSAwIHx8CisJCXN0cmNtcCh0ZS0+ZGVzYywgIlRB QkxFU1BBQ0UiKSA9PSAwIHx8CisJCXN0cmNtcCh0ZS0+ZGVzYywgIkRST1BfR0xPQkFMIikgPT0g MCkKKwkJcmV0dXJuIFJFUV9TQ0hFTUE7CisKIAkvKgogCSAqIFByb2Nlc3MgZXhjbHVzaW9ucyB0 aGF0IGFmZmVjdCBjZXJ0YWluIGNsYXNzZXMgb2YgVE9DIGVudHJpZXMuCiAJICovCkBAIC0zMDYy LDYgKzMwOTAsMTQgQEAgX3RvY0VudHJ5UmVxdWlyZWQoVG9jRW50cnkgKnRlLCB0ZVNlY3Rpb24g Y3VyU2VjdGlvbiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCWlmIChyb3B0LT5ub19zdWJzY3JpcHRp b25zICYmCiAJCQlzdHJuY21wKHRlLT50YWcsICJTVUJTQ1JJUFRJT04iLCBzdHJsZW4oIlNVQlND UklQVElPTiIpKSA9PSAwKQogCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogR2xvYmFsIG9iamVj dCBUT0MgZW50cmllcyAoZS5nLiwgUk9MRXMgb3IgVEFCTEVTUEFDRXMpIGFyZSB0cmVhdGVkIGFz CisJCSAqIFJFUV9TQ0hFTUE7IGZvbGxvdyB0aGlzIGNvbnZlbnRpb24gZm9yIHRoZWlyIGFzc29j aWF0ZWQgY29tbWVudHMuCisJCSAqLworCQlpZiAoc3RybmNtcCh0ZS0+ZGVzYywgIlJPTEUiLCBz dHJsZW4oIlJPTEUiKSkgPT0gMCB8fAorCQkJc3RybmNtcCh0ZS0+ZGVzYywgIlRBQkxFU1BBQ0Ui LCBzdHJsZW4oIlRBQkxFU1BBQ0UiKSkgPT0gMCkKKwkJCXJldHVybiBSRVFfU0NIRU1BOwogCX0K IAogCS8qCkBAIC0zMDkxLDYgKzMxMjcsMTQgQEAgX3RvY0VudHJ5UmVxdWlyZWQoVG9jRW50cnkg KnRlLCB0ZVNlY3Rpb24gY3VyU2VjdGlvbiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCWlmIChyb3B0 LT5ub19zdWJzY3JpcHRpb25zICYmCiAJCQlzdHJuY21wKHRlLT50YWcsICJTVUJTQ1JJUFRJT04i LCBzdHJsZW4oIlNVQlNDUklQVElPTiIpKSA9PSAwKQogCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJ ICogR2xvYmFsIG9iamVjdCBUT0MgZW50cmllcyAoZS5nLiwgUk9MRXMgb3IgVEFCTEVTUEFDRXMp IGFyZSB0cmVhdGVkIGFzCisJCSAqIFJFUV9TQ0hFTUE7IGZvbGxvdyB0aGlzIGNvbnZlbnRpb24g Zm9yIHRoZWlyIGFzc29jaWF0ZWQgU0VDVVJJVFkgTEFCRUxzLgorCQkgKi8KKwkJaWYgKHN0cm5j bXAodGUtPnRhZywgIlJPTEUiLCBzdHJsZW4oIlJPTEUiKSkgPT0gMCB8fAorCQkJc3RybmNtcCh0 ZS0+dGFnLCAiVEFCTEVTUEFDRSIsIHN0cmxlbigiVEFCTEVTUEFDRSIpKSA9PSAwKQorCQkJcmV0 dXJuIFJFUV9TQ0hFTUE7CiAJfQogCiAJLyogSWYgaXQncyBhIHN1YnNjcmlwdGlvbiwgbWF5YmUg aWdub3JlIGl0ICovCkBAIC0zODY1LDYgKzM5MDksOSBAQCBfZ2V0T2JqZWN0RGVzY3JpcHRpb24o UFFFeHBCdWZmZXIgYnVmLCBjb25zdCBUb2NFbnRyeSAqdGUpCiAJZWxzZSBpZiAoc3RyY21wKHR5 cGUsICJDQVNUIikgPT0gMCB8fAogCQkJIHN0cmNtcCh0eXBlLCAiQ0hFQ0sgQ09OU1RSQUlOVCIp ID09IDAgfHwKIAkJCSBzdHJjbXAodHlwZSwgIkNPTlNUUkFJTlQiKSA9PSAwIHx8CisJCQkgc3Ry Y21wKHR5cGUsICJEUk9QX0dMT0JBTCIpID09IDAgfHwKKwkJCSBzdHJjbXAodHlwZSwgIlJPTEUg UFJPUEVSVElFUyIpID09IDAgfHwKKwkJCSBzdHJjbXAodHlwZSwgIlJPTEUiKSA9PSAwIHx8CiAJ CQkgc3RyY21wKHR5cGUsICJEQVRBQkFTRSBQUk9QRVJUSUVTIikgPT0gMCB8fAogCQkJIHN0cmNt cCh0eXBlLCAiREVGQVVMVCIpID09IDAgfHwKIAkJCSBzdHJjbXAodHlwZSwgIkZLIENPTlNUUkFJ TlQiKSA9PSAwIHx8CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggMzI1YjUz ZmM5YmQuLjM2NTA3M2IzZWFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBA IC0zOTQsNiArMzk0LDcgQEAgc3RydWN0IF90b2NFbnRyeQogCiBleHRlcm4gaW50CXBhcmFsbGVs X3Jlc3RvcmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBleHRlcm4gdm9pZCBv bl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vf b25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCk7CiAKIGV4dGVybiB2b2lkIHdhcm5f b3JfZXhpdF9ob3JyaWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikg cGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKaW5kZXgg YjViYTNiNDZkZDkuLmQ5NGQwZGUyYTVkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKQEAgLTgy Niw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlzYXZWZXJi b3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAwOwogCi0J CVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoKEFyY2hp dmUgKikgQUgsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJjaGl2ZSAqKSBBSCwg c2F2RG9wdCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDQ5NTk4MzA0MzM1Li5kM2QwY2Fj OThkZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0xMjkyLDcgKzEyOTIsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkgKiByaWdodCBub3cuCiAJICovCiAJaWYgKHBsYWluVGV4dCkKLQkJUmVz dG9yZUFyY2hpdmUoZm91dCk7CisJCVJlc3RvcmVBcmNoaXZlKGZvdXQsIGZhbHNlKTsKIAogCUNs b3NlQXJjaGl2ZShmb3V0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBh bGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggOTgzODlkMjAzNGMuLmVj NmZkYWE4MjJjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl ICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRl ICJnZXRvcHRfbG9uZy5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogCiAvKiB2 ZXJzaW9uIHN0cmluZyB3ZSBleHBlY3QgYmFjayBmcm9tIHBnX2R1bXAgKi8KICNkZWZpbmUgUEdE VU1QX1ZFUlNJT05TVFIgInBnX2R1bXAgKFBvc3RncmVTUUwpICIgUEdfVkVSU0lPTiAiXG4iCkBA IC02Nyw3ICs2OCw3IEBAIHN0YXRpYyB2b2lkIGRyb3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRp YyB2b2lkIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUp Owogc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQg ZHVtcFRpbWVzdGFtcChjb25zdCBjaGFyICptc2cpOwotc3RhdGljIGludAlydW5QZ0R1bXAoY29u c3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cyk7CitzdGF0aWMgaW50CXJ1 blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFy ICpkYmZpbGUpOwogc3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJ CQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBj b25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLApAQCAtNzYsNiArNzcsOCBA QCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1 ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBT aW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAq bmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmls ZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3RhdGljIEFyY2hpdmVGb3JtYXQg cGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CitzdGF0aWMgaW50CWNyZWF0ZUR1 bXBJZCh2b2lkKTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRIXTsKIHN0YXRp YyBQUUV4cEJ1ZmZlciBwZ2R1bXBvcHRzOwpAQCAtMTIzLDYgKzEyNiwxMSBAQCBzdGF0aWMgU2lt cGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9Owog c3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyA9IHtOVUxMLCBO VUxMfTsKIAogc3RhdGljIGNoYXIgKnJlc3RyaWN0X2tleTsKK3N0YXRpYyBBcmNoaXZlICpmb3V0 ID0gTlVMTDsKK3N0YXRpYyBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMgPSB7MH07CitzdGF0aWMgaW50CWR1bXBJZFZhbCA9IDA7CitzdGF0aWMgQXJjaGl2ZUZvcm1h dCBhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworc3RhdGljIGNvbnN0IENhdGFsb2dJZCBuaWxD YXRhbG9nSWQgPSB7MCwgMH07CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQpA QCAtMTQ4LDYgKzE1Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyJwYXNz d29yZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAogCQl7Im5vLXByaXZpbGVnZXMiLCBub19h cmd1bWVudCwgTlVMTCwgJ3gnfSwKIAkJeyJuby1hY2wiLCBub19hcmd1bWVudCwgTlVMTCwgJ3gn fSwKKwkJeyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0YnfSwKIAogCQkvKgog CQkgKiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZG9uJ3QgaGF2ZSBhbiBlcXVpdmFsZW50IHNob3J0 IG9wdGlvbiBsZXR0ZXIKQEAgLTE5Nyw2ICsyMDYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7CiAJY2hhcgkgICAqdXNlX3JvbGUgPSBOVUxM OwogCWNvbnN0IGNoYXIgKmR1bXBlbmNvZGluZyA9IE5VTEw7CisJY29uc3QgY2hhciAqZm9ybWF0 X25hbWUgPSAicCI7CiAJdHJpdmFsdWUJcHJvbXB0X3Bhc3N3b3JkID0gVFJJX0RFRkFVTFQ7CiAJ Ym9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CkBA IC0yMDcsNiArMjE3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWludAkJCWMs CiAJCQkJcmV0OwogCWludAkJCW9wdGluZGV4OworCUR1bXBPcHRpb25zIGRvcHQ7CiAKIAlwZ19s b2dnaW5nX2luaXQoYXJndlswXSk7CiAJcGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dBUk5J TkcpOwpAQCAtMjQ0LDggKzI1NSw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl9 CiAKIAlwZ2R1bXBvcHRzID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlJbml0RHVtcE9wdGlvbnMo JmRvcHQpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6 Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJ d2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJz Uzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRj aCAoYykKIAkJewpAQCAtMjczLDcgKzI4NSw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFw cGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJ Y2FzZSAnRic6CisJCQkJZm9ybWF0X25hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVh azsKIAkJCWNhc2UgJ2cnOgogCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CiAJCQkJYnJlYWs7CkBA IC0zMTMsNiArMzI3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCQljYXNl ICdVJzoKIAkJCQlwZ3VzZXIgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlkb3B0LmNwYXJhbXMu dXNlcm5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAndic6 CkBAIC00MzQsNiArNDQ5LDMyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhp dF9uaWNlbHkoMSk7CiAJfQogCisJLyogR2V0IGZvcm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNoRHVt cEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1hdChmb3JtYXRfbmFtZSk7CisKKwkvKgorCSAqIElmIGEg bm9uLXBsYWluIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGEgZmlsZSBuYW1lIGlzIGFsc28gcmVxdWly ZWQgYXMgdGhlCisJICogcGF0aCB0byB0aGUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmCisJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVu YW1lLCAiIikgPT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAlcz1kfGN8dCByZXF1 aXJlcyBvcHRpb24gJXMiLAorCQkJCQkgIi1GLy0tZm9ybWF0IiwgIi1mLy0tZmlsZSIpOworCQlw Z19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24u IiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKKwkvKiByZXN0cmljdC1rZXkg aXMgb25seSBzdXBwb3J0ZWQgd2l0aCAtLWZvcm1hdD1wbGFpbiAqLworCWlmIChhcmNoRHVtcEZv cm1hdCAhPSBhcmNoTnVsbCAmJiByZXN0cmljdF9rZXkpCisJCXBnX2ZhdGFsKCJvcHRpb24gJXMg Y2FuIG9ubHkgYmUgdXNlZCB3aXRoICVzPXBsYWluIiwKKwkJCQkgIi0tcmVzdHJpY3Qta2V5Iiwg Ii0tZm9ybWF0Iik7CisKKwkvKiAtLWNsZWFuIGFuZCAtZy8tLWdsb2JhbHMtb25seSBjYW5ub3Qg YmUgdXNlZCB0b2dldGhlciBpbiBub24tdGV4dCBkdW1wICovCisJaWYgKGFyY2hEdW1wRm9ybWF0 ICE9IGFyY2hOdWxsICYmIG91dHB1dF9jbGVhbiAmJiBnbG9iYWxzX29ubHkpCisJCXBnX2ZhdGFs KCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciBpbiBub24tdGV4dCBk dW1wIiwKKwkJCQkgIi0tY2xlYW4iLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwogCS8qCiAJICog SWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3QgcmVxdWlyZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0 byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNoIGlzIGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUg bGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVkCkBAIC00OTQsNiArNTM1LDI3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAoc2VxdWVuY2VfZGF0YSkKIAkJYXBwZW5kUFFFeHBC dWZmZXJTdHIocGdkdW1wb3B0cywgIiAtLXNlcXVlbmNlLWRhdGEiKTsKIAorCS8qCisJICogT3Bl biB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYg cmVxdWlyZWQsCisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJj aER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlBc3NlcnQoZmlsZW5hbWUpOworCisJCS8q IENyZWF0ZSBuZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0 b3J5LiAqLworCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCX0KKwllbHNlIGlmIChm aWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7CisJCWlm ICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjog JW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9QRiA9IHN0ZG91dDsKKwogCS8q CiAJICogSWYgeW91IGRvbid0IHByb3ZpZGUgYSByZXN0cmljdCBrZXksIG9uZSB3aWxsIGJlIGFw cG9pbnRlZCBmb3IgeW91LgogCSAqLwpAQCAtNTQzLDE5ICs2MDUsNiBAQCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhjb25uLCAmZGF0YWJhc2Vf ZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25hbWVzKTsKIAot CS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ug c3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1lKQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUs IFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFPUEYpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4g b3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJ T1BGID0gc3Rkb3V0OwotCiAJLyoKIAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1 ZXN0ZWQuCiAJICovCkBAIC01OTMsMzUgKzY0MiwxMTEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCWlmIChxdW90ZV9hbGxfaWRlbnRpZmllcnMpCiAJCWV4ZWN1dGVDb21tYW5kKGNv bm4sICJTRVQgcXVvdGVfYWxsX2lkZW50aWZpZXJzID0gdHJ1ZSIpOwogCi0JZnByaW50ZihPUEYs ICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIpOwotCWlm ICh2ZXJib3NlKQotCQlkdW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7CisJLyogY3JlYXRlIGEg YXJjaGl2ZSBmaWxlIGZvciBnbG9iYWwgY29tbWFuZHMuICovCisJaWYgKGFyY2hEdW1wRm9ybWF0 ICE9IGFyY2hOdWxsKQorCXsKKwkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIo KTsKKwkJY2hhciAgICAgICAgICAgIGdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisJCWNvbnN0IGNo YXIgKmVuY25hbWU7CisKKwkJLyogU2V0IGZpbGUgcGF0aCBmb3IgZ2xvYmFsIHNxbCBjb21tYW5k cy4gKi8KKwkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy5nbG8iLCBm aWxlbmFtZSk7CiAKLQkvKgotCSAqIEVudGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkg dW5leHBlY3RlZCBwc3FsIG1ldGEtY29tbWFuZHMuICBBCi0JICogbWFsaWNpb3VzIHNvdXJjZSBt aWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JICogcmVz cG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMg ZnJvbQotCSAqIGFmZmVjdGluZyB0aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBj YW4gYmxvY2sgcHNxbAotCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hp bmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUgZHVtcAotCSAqIG91dHB1dCByZW1haW5zIHVuYWZm ZWN0ZWQuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0 X2tleSk7CisJCS8qIE9wZW4gdGhlIG91dHB1dCBmaWxlICovCisJCWZvdXQgPSBDcmVhdGVBcmNo aXZlKGdsb2JhbF9wYXRoLCBhcmNoQ3VzdG9tLCBjb21wcmVzc2lvbl9zcGVjLAorCQkJCWRvc3lu YywgYXJjaE1vZGVXcml0ZSwgTlVMTCwgREFUQV9ESVJfU1lOQ19NRVRIT0RfRlNZTkMpOwogCi0J LyoKLQkgKiBXZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRoYXQg c2VydmVkIG5vIHB1cnBvc2UKLQkgKiBvdGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncyBmb3IgaW5z dGFsbGF0aW9ucyB3aXRob3V0IGEgcG9zdGdyZXMKLQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcg d2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgotCSAqIGRhdGFi YXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50IGlzIGZpbmUuCi0JICovCisJCS8q IE1ha2UgZHVtcCBvcHRpb25zIGFjY2Vzc2libGUgcmlnaHQgYXdheSAqLworCQlTZXRBcmNoaXZl T3B0aW9ucyhmb3V0LCAmZG9wdCwgTlVMTCk7CiAKLQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0byB3 cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KLQlmcHJpbnRmKE9QRiwgIlNFVCBkZWZhdWx0 X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZjtcblxuIik7CisJCSgoQXJjaGl2ZUhhbmRsZSAq KSBmb3V0KS0+Y29ubmVjdGlvbiA9IGNvbm47CisJCSgoQXJjaGl2ZUhhbmRsZSAqKSBmb3V0KS0+ cHVibGljLm51bVdvcmtlcnMgPSAxOwogCi0JLyogUmVwbGljYXRlIGVuY29kaW5nIGFuZCBzdGFu ZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgaW4gb3V0cHV0ICovCi0JZnByaW50ZihPUEYsICJTRVQg Y2xpZW50X2VuY29kaW5nID0gJyVzJztcbiIsCisJCS8qIFJlZ2lzdGVyIHRoZSBjbGVhbnVwIGhv b2sgKi8KKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKGZvdXQpOworCisJCS8qIExldCB0aGUgYXJj aGl2ZXIga25vdyBob3cgbm9pc3kgdG8gYmUgKi8KKwkJZm91dC0+dmVyYm9zZSA9IHZlcmJvc2U7 CisKKwkJLyoKKwkJICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5k IHVwIHRvIGFueSBtaW5vciByZWxlYXNlCisJCSAqIG9mIG91ciBvd24gbWFqb3IgdmVyc2lvbi4g IChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGluCisJCSAqIHBnX2R1bXBhbGwuYy4pCisJCSAqLwor CQlmb3V0LT5taW5SZW1vdGVWZXJzaW9uID0gOTAyMDA7CisJCWZvdXQtPm1heFJlbW90ZVZlcnNp b24gPSAoUEdfVkVSU0lPTl9OVU0gLyAxMDApICogMTAwICsgOTk7CisJCWZvdXQtPm51bVdvcmtl cnMgPSAxOworCisJCS8qIER1bXAgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkuICovCisJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRf b25seSA9IG9mZjtcblxuIik7CisJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkgbmlsQ2F0YWxv Z0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAq LworCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSAiZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29u bHkiLAorCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRf b25seSIsCisJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkg IC5jcmVhdGVTdG10ID0gcXJ5LT5kYXRhKSk7CisJCXJlc2V0UFFFeHBCdWZmZXIocXJ5KTsKKwor CQkvKiBQdXQgdGhlIGNvcnJlY3QgZW5jb2RpbmcgaW50byB0aGUgYXJjaGl2ZSAqLworCQllbmNu YW1lID0gcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZyk7CisKKwkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXJ5LCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICIpOworCQlhcHBlbmRTdHJpbmdMaXRl cmFsQUgocXJ5LCBlbmNuYW1lLCBmb3V0KTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXJ5LCAi O1xuIik7CisJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRh bG9nIElEICovCisJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkgQVJD SElWRV9PUFRTKC50YWcgPSAiY2xpZW50X2VuY29kaW5nIiwKKwkJCQkJCQkJICAuZGVzY3JpcHRp b24gPSAiY2xpZW50X2VuY29kaW5nIiwKKwkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJF X0RBVEEsCisJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBxcnktPmRhdGEpKTsKKwkJcmVzZXRQUUV4 cEJ1ZmZlcihxcnkpOworCisJCS8qIFB1dCB0aGUgY29ycmVjdCBlc2NhcGUgc3RyaW5nIGJlaGF2 aW9yIGludG8gdGhlIGFyY2hpdmUuICovCisJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIlNFVCBz dGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAnb24nO1xuIik7CisJCQlBcmNoaXZlRW50cnko Zm91dCwKKwkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCSBjcmVh dGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gInN0 YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyIsCisJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJz dGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MiLAorCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJ T05fUFJFX0RBVEEsCisJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gcXJ5LT5kYXRhKSk7CisJCWRl c3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCX0KKwllbHNlCisJeworCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIik7CisKKwkJaWYg KHZlcmJvc2UpCisJCQlkdW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7CisKKwkJLyoKKwkJICog RW50ZXIgcmVzdHJpY3RlZCBtb2RlIHRvIGJsb2NrIGFueSB1bmV4cGVjdGVkIHBzcWwgbWV0YS1j b21tYW5kcy4gIEEKKwkJICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEg dmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCisJCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAg V2hpbGUgd2UgY2Fubm90IHByZXZlbnQgc3VjaCBzb3VyY2VzIGZyb20KKwkJICogYWZmZWN0aW5n IHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUsIHdlIGNhbiBibG9jayBwc3FsCisJCSAq IG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwg d2l0aCB0aGUgZHVtcAorCQkgKiBvdXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgorCQkgKi8KKwkJ ZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisKKwkJLyoK KwkJICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNl cnZlZCBubyBwdXJwb3NlCisJCSAqIG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZvciBpbnN0 YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3JlcworCQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcg d2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgorCQkgKiBkYXRh YmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgorCQkgKi8KKwor CQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8K KwkJZnByaW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7 XG5cbiIpOworCisJCS8qIFJlcGxpY2F0ZSBlbmNvZGluZyBhbmQgc3RhbmRhcmRfY29uZm9ybWlu Z19zdHJpbmdzIGluIG91dHB1dCAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBjbGllbnRfZW5jb2Rp bmcgPSAnJXMnO1xuIiwKIAkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpKTsKLQlmcHJp bnRmKE9QRiwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSBvbjtcbiIpOwotCWZw cmludGYoT1BGLCAiXG4iKTsKKwkJZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWlu Z19zdHJpbmdzID0gb247XG4iKTsKKwkJZnByaW50ZihPUEYsICJcbiIpOworCX0KIAogCWlmICgh ZGF0YV9vbmx5ICYmICFzdGF0aXN0aWNzX29ubHkgJiYgIW5vX3NjaGVtYSkKIAl7CkBAIC02MzAs OCArNzU1LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICogZGVwZW5kZW5j eSBhbmFseXNpcyBiZWNhdXNlIGRhdGFiYXNlcyBuZXZlciBkZXBlbmQgb24gZWFjaCBvdGhlciwK IAkJICogYW5kIHRhYmxlc3BhY2VzIG5ldmVyIGRlcGVuZCBvbiBlYWNoIG90aGVyLiAgUm9sZXMg Y291bGQgaGF2ZQogCQkgKiBncmFudHMgdG8gZWFjaCBvdGhlciwgYnV0IERST1AgUk9MRSB3aWxs IGNsZWFuIHRob3NlIHVwIHNpbGVudGx5LgorCQkgKgorCQkgKiBGb3Igbm9uLXRleHQgZm9ybWF0 cywgcGdfZHVtcGFsbCB1bmNvbmRpdGlvbmFsbHkgcHJvY2VzcyAtLWNsZWFuCisJCSAqIG9wdGlv bi4gSW4gY29udHJhc3QsIHBnX3Jlc3RvcmUgb25seSBhcHBsaWVzIGl0IGlmIHRoZSB1c2VyCisJ CSAqIGV4cGxpY2l0bHkgcHJvdmlkZXMgdGhlIGZsYWcuICBUaGlzIGRpc2NyZXBhbmN5IHJlc29s dmVzIGNvcm5lciBjYXNlcworCQkgKiB3aGVyZSBwZ19yZXN0b3JlIHJlcXVpcmVzIGNsZWFudXAg aW5zdHJ1Y3Rpb25zIHRoYXQgbWF5IGJlIG1pc3NpbmcKKwkJICogZnJvbSBhIHN0YW5kYXJkIHBn X2R1bXBhbGwgb3V0cHV0LgogCQkgKi8KLQkJaWYgKG91dHB1dF9jbGVhbikKKwkJaWYgKG91dHB1 dF9jbGVhbiB8fCBhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKIAkJewogCQkJaWYgKCFnbG9i YWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCiAJCQkJZHJvcERC cyhjb25uKTsKQEAgLTY2NSwyOCArNzk2LDQ1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJCWR1bXBUYWJsZXNwYWNlcyhjb25uKTsKIAl9CiAKLQkvKgotCSAqIEV4aXQgcmVzdHJp Y3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAgd2ls bAotCSAqIGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVkIG1vZGUgYWdhaW4gYXMgYXBwcm9wcmlh dGUuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rf a2V5KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJeworCQkvKgorCQkgKiBF eGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJlZm9yZSBkdW1waW5nIHRoZSBkYXRhYmFzZXMuICBw Z19kdW1wCisJCSAqIHdpbGwgaGFuZGxlIGVudGVyaW5nIHJlc3RyaWN0ZWQgbW9kZSBhZ2FpbiBh cyBhcHByb3ByaWF0ZS4KKwkJICovCisJCWZwcmludGYoT1BGLCAiXFx1bnJlc3RyaWN0ICVzXG5c biIsIHJlc3RyaWN0X2tleSk7CisJfQogCiAJaWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29u bHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCiAJCWR1bXBEYXRhYmFzZXMoY29ubik7CiAKLQlQUWZp bmlzaChjb25uKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJeworCQlQUWZp bmlzaChjb25uKTsKIAotCWlmICh2ZXJib3NlKQotCQlkdW1wVGltZXN0YW1wKCJDb21wbGV0ZWQg b24iKTsKLQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIg ZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CisJCWlmICh2ZXJib3NlKQorCQkJZHVtcFRpbWVzdGFt cCgiQ29tcGxldGVkIG9uIik7CisJCWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0 YWJhc2UgY2x1c3RlciBkdW1wIGNvbXBsZXRlXG4tLVxuXG4iKTsKIAotCWlmIChmaWxlbmFtZSkK KwkJaWYgKGZpbGVuYW1lKQorCQl7CisJCQlmY2xvc2UoT1BGKTsKKworCQkJLyogc3luYyB0aGUg cmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCisJCQlpZiAoZG9zeW5jICYm IChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCisJCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZp bGVuYW1lLCBmYWxzZSk7CisJCX0KKwl9CisJZWxzZQogCXsKLQkJZmNsb3NlKE9QRik7CisJCVJl c3RvcmVPcHRpb25zICpyb3B0OwogCi0JCS8qIHN5bmMgdGhlIHJlc3VsdGluZyBmaWxlLCBlcnJv cnMgYXJlIG5vdCBmYXRhbCAqLwotCQlpZiAoZG9zeW5jKQotCQkJKHZvaWQpIGZzeW5jX2ZuYW1l KGZpbGVuYW1lLCBmYWxzZSk7CisJCXJvcHQgPSBOZXdSZXN0b3JlT3B0aW9ucygpOworCQlTZXRB cmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwgcm9wdCk7CisKKwkJLyogTWFyayB3aGljaCBlbnRy aWVzIHNob3VsZCBiZSBvdXRwdXQgKi8KKwkJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhm b3V0KTsKKwkJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCX0KIAogCWV4aXRfbmljZWx5KDApOwpAQCAt Njk2LDEyICs4NDQsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGljIHZv aWQKIGhlbHAodm9pZCkKIHsKLQlwcmludGYoXygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwgZGF0 YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0LlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50 ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNRTCBz Y3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cy5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygi VXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7 CiAKIAlwcmludGYoXygiXG5HZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYs IC0tZmlsZT1GSUxFTkFNRSAgICAgICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRm KF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1 c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJi b3NlICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAt LXZlcnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4g ZXhpdFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFp bCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtNzk2LDI0 ICs5NDYsNDUgQEAgZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIAogCWlfcm9sbmFtZSA9IFBRZm51 bWJlcihyZXMsICJyb2xuYW1lIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQ UW50dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmlu dGYoT1BGLCAiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8 IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljb25zdCBjaGFyICpyb2xlbmFtZTsKKwkJUFFF eHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCQlyb2xlbmFtZSA9IFBR Z2V0dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBST0xF ICVzJXM7XG4iLAotCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAotCQkJCWZtdElk KHJvbGVuYW1lKSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJeworCQkJ YXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQkJCQlpZl9l eGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKKwkJCQkJZm10SWQocm9sZW5hbWUpKTsKKwkJCWZw cmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRhdGEpOworCQl9CisJCWVsc2UKKwkJeworCQkJYXBw ZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBST0xFIElGIEVYSVNUUyAlcztcbiIsCisJCQkJ CWZtdElkKHJvbGVuYW1lKSk7CisKKwkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQluaWxDYXRh bG9nSWQsICAvKiBjYXRhbG9nIElEICovCisJCQkJCWNyZWF0ZUR1bXBJZCgpLCAgICAgICAgLyog ZHVtcCBJRCAqLworCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJEUk9QX0dMT0JBTCIsCisJCQkJ CQkuZGVzY3JpcHRpb24gPSAiRFJPUF9HTE9CQUwiLAorCQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9O X1BSRV9EQVRBLAorCQkJCQkJLmNyZWF0ZVN0bXQgPSBkZWxRcnktPmRhdGEpKTsKKwkJfQorCisJ CWRlc3Ryb3lQUUV4cEJ1ZmZlcihkZWxRcnkpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAlkZXN0 cm95UFFFeHBCdWZmZXIoYnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIC8q CkBAIC04MjMsNiArOTk0LDggQEAgc3RhdGljIHZvaWQKIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4p CiB7CiAJUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQUUV4cEJ1ZmZl ciBjb21tZW50X2J1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgc2VjbGFi ZWxfYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJ aV9vaWQsCiAJCQkJaV9yb2xuYW1lLApAQCAtODk0LDcgKzEwNjcsNyBAQCBkdW1wUm9sZXMoUEdj b25uICpjb25uKQogCWlfcm9sY29tbWVudCA9IFBRZm51bWJlcihyZXMsICJyb2xjb21tZW50Iik7 CiAJaV9pc19jdXJyZW50X3VzZXIgPSBQUWZudW1iZXIocmVzLCAiaXNfY3VycmVudF91c2VyIik7 CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYg YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGVz XG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQpAQCAt OTEzLDYgKzEwODYsOCBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCQl9CiAKIAkJcmVzZXRQ UUV4cEJ1ZmZlcihidWYpOworCQlyZXNldFBRRXhwQnVmZmVyKGNvbW1lbnRfYnVmKTsKKwkJcmVz ZXRQUUV4cEJ1ZmZlcihzZWNsYWJlbF9idWYpOwogCiAJCWlmIChiaW5hcnlfdXBncmFkZSkKIAkJ ewpAQCAtOTg5LDE3ICsxMTY0LDUzIEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAKIAkJaWYg KCFub19jb21tZW50cyAmJiAhUFFnZXRpc251bGwocmVzLCBpLCBpX3JvbGNvbW1lbnQpKQogCQl7 Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICJDT01NRU5UIE9OIFJPTEUgJXMgSVMgIiwgZm10 SWQocm9sZW5hbWUpKTsKLQkJCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKGJ1ZiwgUFFnZXR2YWx1 ZShyZXMsIGksIGlfcm9sY29tbWVudCksIGNvbm4pOwotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo YnVmLCAiO1xuIik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjb21tZW50X2J1ZiwgIkNPTU1FTlQg T04gUk9MRSAlcyBJUyAiLCBmbXRJZChyb2xlbmFtZSkpOworCQkJYXBwZW5kU3RyaW5nTGl0ZXJh bENvbm4oY29tbWVudF9idWYsIFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbGNvbW1lbnQpLCBjb25u KTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGNvbW1lbnRfYnVmLCAiO1xuIik7CiAJCX0KIAog CQlpZiAoIW5vX3NlY3VyaXR5X2xhYmVscykKIAkJCWJ1aWxkU2hTZWNMYWJlbHMoY29ubiwgInBn X2F1dGhpZCIsIGF1dGhfb2lkLAogCQkJCQkJCSAiUk9MRSIsIHJvbGVuYW1lLAotCQkJCQkJCSBi dWYpOworCQkJCQkJCSBzZWNsYWJlbF9idWYpOwogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYt PmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCXsKKwkJCWZwcmlu dGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQkJZnByaW50ZihPUEYsICIlcyIsIGNvbW1lbnRf YnVmLT5kYXRhKTsKKworCQkJaWYgKHNlY2xhYmVsX2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJ CWZwcmludGYoT1BGLCAiJXMiLCBzZWNsYWJlbF9idWYtPmRhdGEpOworCQl9CisJCWVsc2UKKwkJ eworCQkJY2hhcgkgICAqdGFnID0gcHNwcmludGYoIiVzICVzIiwgIlJPTEUiLCBmbXRJZChyb2xl bmFtZSkpOworCisJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCSBuaWxDYXRhbG9nSWQsCS8q IGNhdGFsb2cgSUQgKi8KKwkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJ CQkJIEFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAorCQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAi Uk9MRSIsCisJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJ CSAgLmNyZWF0ZVN0bXQgPSBidWYtPmRhdGEpKTsKKwkJCWlmIChjb21tZW50X2J1Zi0+ZGF0YVsw XSAhPSAnXDAnKQorCQkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJCSBuaWxDYXRhbG9nSWQs CS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8K KwkJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSB0YWcsCisJCQkJCQkJCQkJICAuZGVzY3JpcHRp b24gPSAiQ09NTUVOVCIsCisJCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEs CisJCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IGNvbW1lbnRfYnVmLT5kYXRhKSk7CisKKwkJCWlm IChzZWNsYWJlbF9idWYtPmRhdGFbMF0gIT0gJ1wwJykKKwkJCQlBcmNoaXZlRW50cnkoZm91dCwK KwkJCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCQkJIGNyZWF0ZUR1 bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAor CQkJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIlNFQ1VSSVRZIExBQkVMIiwKKwkJCQkJCQkJCQkg IC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0g c2VjbGFiZWxfYnVmLT5kYXRhKSk7CisJCX0KIAl9CiAKIAkvKgpAQCAtMTAwNyw3ICsxMjE4LDcg QEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkgKiBXZSBkbyBpdCB0aGlzIHdheSBiZWNhdXNl IGNvbmZpZyBzZXR0aW5ncyBmb3Igcm9sZXMgY291bGQgbWVudGlvbiB0aGUKIAkgKiBuYW1lcyBv ZiBvdGhlciByb2xlcy4KIAkgKi8KLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50 dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYo T1BGLCAiXG4tLVxuLS0gVXNlciBDb25maWd1cmF0aW9uc1xuLS1cbiIpOwogCiAJZm9yIChpID0g MDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCkBAIC0xMDE1LDkgKzEyMjYsMTIgQEAgZHVtcFJv bGVzKFBHY29ubiAqY29ubikKIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAiXG5c biIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJc blxuIik7CiAKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKKwlkZXN0cm95UFFFeHBCdWZmZXIo Y29tbWVudF9idWYpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihzZWNsYWJlbF9idWYpOwogfQogCiAK QEAgLTEwMzEsNiArMTI0NSw3IEBAIHN0YXRpYyB2b2lkCiBkdW1wUm9sZU1lbWJlcnNoaXAoUEdj b25uICpjb25uKQogewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJ UFFFeHBCdWZmZXIgcXVyeWJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJUFFFeHBCdWZmZXIg b3B0YnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJ c3RhcnQgPSAwLApAQCAtMTA5Myw3ICsxMzA4LDcgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29u biAqY29ubikKIAlpX2luaGVyaXRfb3B0aW9uID0gUFFmbnVtYmVyKHJlcywgImluaGVyaXRfb3B0 aW9uIik7CiAJaV9zZXRfb3B0aW9uID0gUFFmbnVtYmVyKHJlcywgInNldF9vcHRpb24iKTsKIAot CWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBtZW1i ZXJzaGlwc1xuLS1cblxuIik7CiAKIAkvKgpAQCAtMTIyOSw4ICsxNDQ0LDkgQEAgZHVtcFJvbGVN ZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAogCQkJCS8qIEdlbmVyYXRlIHRoZSBhY3R1YWwgR1JB TlQgc3RhdGVtZW50LiAqLwogCQkJCXJlc2V0UFFFeHBCdWZmZXIob3B0YnVmKTsKLQkJCQlmcHJp bnRmKE9QRiwgIkdSQU5UICVzIiwgZm10SWQocm9sZSkpOwotCQkJCWZwcmludGYoT1BGLCAiIFRP ICVzIiwgZm10SWQobWVtYmVyKSk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdXJ5YnVmKTsKKwkJ CQlhcHBlbmRQUUV4cEJ1ZmZlcihxdXJ5YnVmLCAiR1JBTlQgJXMiLCBmbXRJZChyb2xlKSk7CisJ CQkJYXBwZW5kUFFFeHBCdWZmZXIocXVyeWJ1ZiwgIiBUTyAlcyIsIGZtdElkKG1lbWJlcikpOwog CQkJCWlmICgqYWRtaW5fb3B0aW9uID09ICd0JykKIAkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo b3B0YnVmLCAiQURNSU4gT1BUSU9OIik7CiAJCQkJaWYgKGR1bXBfZ3JhbnRfb3B0aW9ucykKQEAg LTEyNTEsMTAgKzE0NjcsMjEgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAkJ CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAiU0VUIEZBTFNFIik7CiAJCQkJfQogCQkJ CWlmIChvcHRidWYtPmRhdGFbMF0gIT0gJ1wwJykKLQkJCQkJZnByaW50ZihPUEYsICIgV0lUSCAl cyIsIG9wdGJ1Zi0+ZGF0YSk7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1cnlidWYsICIgV0lU SCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CiAJCQkJaWYgKGR1bXBfZ3JhbnRvcnMpCi0JCQkJCWZwcmlu dGYoT1BGLCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7Ci0JCQkJZnByaW50ZihP UEYsICI7XG4iKTsKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIocXVyeWJ1ZiwgIiBHUkFOVEVEIEJZ ICVzIiwgZm10SWQoZ3JhbnRvcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1cnlidWYsICI7 XG4iKTsKKworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCQkJZnByaW50 ZihPUEYsICIlcyIsIHF1cnlidWYtPmRhdGEpOworCQkJCWVsc2UKKwkJCQkJQXJjaGl2ZUVudHJ5 KGZvdXQsCisJCQkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCQkJ IGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkJCSBBUkNISVZFX09QVFMoLnRh ZyA9IGZtdElkKHJvbGUpLAorCQkJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJST0xFIFBST1BF UlRJRVMiLAorCQkJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJ CQkJCQkJICAuY3JlYXRlU3RtdCA9IHF1cnlidWYtPmRhdGEpKTsKIAkJCX0KIAkJfQogCkBAIC0x MjY1LDggKzE0OTIsMTAgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAogCVBR Y2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKKwlkZXN0cm95UFFFeHBCdWZm ZXIob3B0YnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTI5Myw3 ICsxNTIyLDcgQEAgZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJGUk9N IHBnX2NhdGFsb2cucGdfcGFyYW1ldGVyX2FjbCAiCiAJCQkJCSAgICJPUkRFUiBCWSAxIik7CiAK LQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgcHJp dmlsZWdlcyBvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0tXG5cbiIpOwogCiAJZm9yIChp ID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCkBAIC0xMzE4LDE0ICsxNTQ3LDI1IEBAIGR1 bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQogCQkJZXhpdF9uaWNlbHkoMSk7CiAJCX0KIAot CQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJ CUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAq LworCQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkgQVJDSElWRV9P UFRTKC50YWcgPSBmbXRJZChwYXJvd25lciksCisJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJS T0xFIFBST1BFUlRJRVMiLAorCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEs CisJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gYnVmLT5kYXRhKSk7CiAKIAkJZnJlZShmcGFybmFt ZSk7CiAJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKLQlm cHJpbnRmKE9QRiwgIlxuXG4iKTsKKworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK KwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTM0NywyMSArMTU4Nyw0NSBAQCBk cm9wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCQkJCQkgICAiV0hFUkUgc3BjbmFtZSAhfiAn XnBnXycgIgogCQkJCQkgICAiT1JERVIgQlkgMSIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4g MCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIHRhYmxlc3BhY2VzXG4tLVxuXG4iKTsKIAog CWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqc3Bj bmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKKwkJUFFFeHBCdWZmZXIJZGVsUXJ5ID0gY3Jl YXRlUFFFeHBCdWZmZXIoKTsKIAotCQlmcHJpbnRmKE9QRiwgIkRST1AgVEFCTEVTUEFDRSAlcyVz O1xuIiwKKwkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBUQUJMRVNQQUNFICVzJXM7 XG4iLAogCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAogCQkJCWZtdElkKHNwY25h bWUpKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCXsKKwkJCWFwcGVu ZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKKwkJCQkJaWZf ZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCisJCQkJCWZtdElkKHNwY25hbWUpKTsKKwkJCWZw cmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRhdGEpOworCQl9CisJCWVsc2UKKwkJeworCQkJYXBw ZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBUQUJMRVNQQUNFIElGIEVYSVNUUyAlcztcbiIs CisJCQkJCWZtdElkKHNwY25hbWUpKTsKKwkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQluaWxD YXRhbG9nSWQsICAvKiBjYXRhbG9nIElEICovCisJCQkJCWNyZWF0ZUR1bXBJZCgpLCAgICAgICAg LyogZHVtcCBJRCAqLworCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJEUk9QX0dMT0JBTCIsCisJ CQkJCQkuZGVzY3JpcHRpb24gPSAiRFJPUF9HTE9CQUwiLAorCQkJCQkJLnNlY3Rpb24gPSBTRUNU SU9OX1BSRV9EQVRBLAorCQkJCQkJLmNyZWF0ZVN0bXQgPSBkZWxRcnktPmRhdGEpKTsKKwkJfQor CisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihkZWxRcnkpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAot CWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK KwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC0xMzcxLDYgKzE2MzUsOCBAQCBz dGF0aWMgdm9pZAogZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIHsKIAlQR3Jlc3VsdCAg ICpyZXM7CisJUFFFeHBCdWZmZXIgY29tbWVudF9idWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwor CVBRRXhwQnVmZmVyIHNlY2xhYmVsX2J1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJaW50CQkJ aTsKIAogCS8qCkBAIC0xMzg3LDcgKzE2NTMsNyBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpj b25uKQogCQkJCQkgICAiV0hFUkUgc3BjbmFtZSAhfiAnXnBnXycgIgogCQkJCQkgICAiT1JERVIg QlkgMSIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykg PiAwICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4t LSBUYWJsZXNwYWNlc1xuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJl cyk7IGkrKykKQEAgLTE0MDYsNiArMTY3Miw5IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNv bm4pCiAJCS8qIG5lZWRlZCBmb3IgYnVpbGRBQ0xDb21tYW5kcygpICovCiAJCWZzcGNuYW1lID0g cGdfc3RyZHVwKGZtdElkKHNwY25hbWUpKTsKIAorCQlyZXNldFBRRXhwQnVmZmVyKGNvbW1lbnRf YnVmKTsKKwkJcmVzZXRQUUV4cEJ1ZmZlcihzZWNsYWJlbF9idWYpOworCiAJCWlmIChiaW5hcnlf dXBncmFkZSkKIAkJewogCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYnVmLCAiXG4tLSBGb3IgYmlu YXJ5IHVwZ3JhZGUsIG11c3QgcHJlc2VydmUgcGdfdGFibGVzcGFjZSBvaWRcbiIpOwpAQCAtMTQ0 NywyNCArMTcxNiw2NyBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCiAJCWlmICgh bm9fY29tbWVudHMgJiYgc3BjY29tbWVudCAmJiBzcGNjb21tZW50WzBdICE9ICdcMCcpCiAJCXsK LQkJCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIkNPTU1FTlQgT04gVEFCTEVTUEFDRSAlcyBJUyAi LCBmc3BjbmFtZSk7Ci0JCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubihidWYsIHNwY2NvbW1lbnQs IGNvbm4pOwotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYnVmLCAiO1xuIik7CisJCQlhcHBlbmRQ UUV4cEJ1ZmZlcihjb21tZW50X2J1ZiwgIkNPTU1FTlQgT04gVEFCTEVTUEFDRSAlcyBJUyAiLCBm c3BjbmFtZSk7CisJCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubihjb21tZW50X2J1Ziwgc3BjY29t bWVudCwgY29ubik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihjb21tZW50X2J1ZiwgIjtcbiIp OwogCQl9CiAKIAkJaWYgKCFub19zZWN1cml0eV9sYWJlbHMpCiAJCQlidWlsZFNoU2VjTGFiZWxz KGNvbm4sICJwZ190YWJsZXNwYWNlIiwgc3Bjb2lkLAogCQkJCQkJCSAiVEFCTEVTUEFDRSIsIHNw Y25hbWUsCi0JCQkJCQkJIGJ1Zik7CisJCQkJCQkJIHNlY2xhYmVsX2J1Zik7CiAKLQkJZnByaW50 ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJeworCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisKKwkJCWlmIChjb21t ZW50X2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJCWZwcmludGYoT1BGLCAiJXMiLCBjb21tZW50 X2J1Zi0+ZGF0YSk7CisKKwkJCWlmIChzZWNsYWJlbF9idWYtPmRhdGFbMF0gIT0gJ1wwJykKKwkJ CQlmcHJpbnRmKE9QRiwgIiVzIiwgc2VjbGFiZWxfYnVmLT5kYXRhKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCWNoYXIJICAgKnRhZyA9IHBzcHJpbnRmKCIlcyAlcyIsICJUQUJMRVNQQUNFIiwgZm10 SWQoZnNwY25hbWUpKTsKKworCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCQkgbmlsQ2F0YWxv Z0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQg Ki8KKwkJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHRhZywKKwkJCQkJCQkJCSAgLmRlc2NyaXB0 aW9uID0gIlRBQkxFU1BBQ0UiLAorCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RB VEEsCisJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gYnVmLT5kYXRhKSk7CisKKwkJCWlmIChjb21t ZW50X2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJ CSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCQkgY3JlYXRlRHVtcElkKCks CS8qIGR1bXAgSUQgKi8KKwkJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSB0YWcsCisJCQkJCQkJ CQkJICAuZGVzY3JpcHRpb24gPSAiQ09NTUVOVCIsCisJCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNF Q1RJT05fUFJFX0RBVEEsCisJCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IGNvbW1lbnRfYnVmLT5k YXRhKSk7CisKKwkJCWlmIChzZWNsYWJlbF9idWYtPmRhdGFbMF0gIT0gJ1wwJykKKwkJCQlBcmNo aXZlRW50cnkoZm91dCwKKwkJCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJ CQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkJIEFSQ0hJVkVfT1BU UygudGFnID0gdGFnLAorCQkJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIlNFQ1VSSVRZIExBQkVM IiwKKwkJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCQkg IC5jcmVhdGVTdG10ID0gc2VjbGFiZWxfYnVmLT5kYXRhKSk7CisJCX0KIAogCQlmcmVlKGZzcGNu YW1lKTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwot CWZwcmludGYoT1BGLCAiXG5cbiIpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihjb21tZW50X2J1Zik7 CisJZGVzdHJveVBRRXhwQnVmZmVyKHNlY2xhYmVsX2J1Zik7CisKKwlpZiAoYXJjaER1bXBGb3Jt YXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTE0ODcs MTIgKzE3OTksMTMgQEAgZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJXSEVSRSBkYXRh bGxvd2Nvbm4gQU5EIGRhdGNvbm5saW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRFUiBCWSBkYXRu YW1lIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+ IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0t IERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9zdGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIp OwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAg ICpkYm5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CisJCVBRRXhwQnVmZmVyIGRlbFFyeSA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAkJLyoKIAkJICogU2tpcCAicG9zdGdyZXMiIGFuZCAi dGVtcGxhdGUxIjsgZHVtcERhdGFiYXNlcygpIHdpbGwgZGVhbCB3aXRoCkBAIC0xNTAzLDE1ICsx ODE2LDM1IEBAIGRyb3BEQnMoUEdjb25uICpjb25uKQogCQkJc3RyY21wKGRibmFtZSwgInRlbXBs YXRlMCIpICE9IDAgJiYKIAkJCXN0cmNtcChkYm5hbWUsICJwb3N0Z3JlcyIpICE9IDApCiAJCXsK LQkJCWZwcmludGYoT1BGLCAiRFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKLQkJCQkJaWZfZXhpc3Rz ID8gIklGIEVYSVNUUyAiIDogIiIsCi0JCQkJCWZtdElkKGRibmFtZSkpOworCQkJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJeworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFy eSwgIkRST1AgREFUQUJBU0UgJXMlcztcbiIsCisJCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RT ICIgOiAiIiwKKwkJCQkJCWZtdElkKGRibmFtZSkpOworCQkJCWZwcmludGYoT1BGLCAiJXMiLCBk ZWxRcnktPmRhdGEpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWFwcGVuZFBRRXhwQnVmZmVy KGRlbFFyeSwgIkRST1AgREFUQUJBU0UgSUYgRVhJU1RTICVzO1xuIiwKKwkJCQkJCWZtdElkKGRi bmFtZSkpOworCisJCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCQluaWxDYXRhbG9nSWQsICAv KiBjYXRhbG9nIElEICovCisJCQkJCQljcmVhdGVEdW1wSWQoKSwgICAgICAgIC8qIGR1bXAgSUQg Ki8KKwkJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0gIkRST1BfR0xPQkFMIiwKKwkJCQkJCQkuZGVz Y3JpcHRpb24gPSAiRFJPUF9HTE9CQUwiLAorCQkJCQkJCS5zZWN0aW9uID0gU0VDVElPTl9QUkVf REFUQSwKKwkJCQkJCQkuY3JlYXRlU3RtdCA9IGRlbFFyeS0+ZGF0YSkpOworCQkJfQorCisJCQlk ZXN0cm95UFFFeHBCdWZmZXIoZGVsUXJ5KTsKIAkJfQogCX0KIAogCVBRY2xlYXIocmVzKTsKIAot CWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK KwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTUzMyw3ICsxODY2LDcgQEAgZHVt cFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSkKIAogCXJlcyA9 IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4g MCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQogCXsKIAkJY2hhcgkgICAqc2FuaXRpemVkOwogCkBAIC0xNTQ4LDcgKzE4ODEsMTcgQEAgZHVt cFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSkKIAkJbWFrZUFs dGVyQ29uZmlnQ29tbWFuZChjb25uLCBQUWdldHZhbHVlKHJlcywgaSwgMCksCiAJCQkJCQkJICAg IlJPTEUiLCB1c2VybmFtZSwgTlVMTCwgTlVMTCwKIAkJCQkJCQkgICBidWYpOwotCQlmcHJpbnRm KE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51 bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJQXJjaGl2 ZUVudHJ5KGZvdXQsCisJCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJ CQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJCSBBUkNISVZFX09QVFMoLnRh ZyA9IHVzZXJuYW1lLAorCQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiUk9MRSBQUk9QRVJUSUVT IiwKKwkJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJICAu Y3JlYXRlU3RtdCA9IGJ1Zi0+ZGF0YSkpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKQEAgLTE2MTgs NiArMTk2MSw5IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogewogCVBHcmVzdWx0ICAg KnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNoYXIJCWRi ZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFCSAgICptYXBfZmlsZSA9IE5VTEw7CiAKIAkvKgog CSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5jZSB3ZSdkIGJl IHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNjMxLDE5ICsxOTc3LDQzIEBAIGR1bXBEYXRhYmFzZXMo UEdjb25uICpjb25uKQogCSAqIGRvZXNuJ3QgaGF2ZSBzb21lIGZhaWx1cmUgbW9kZSB3aXRoIC0t Y2xlYW4uCiAJICovCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0JCQkJCSAgICJTRUxFQ1Qg ZGF0bmFtZSAiCisJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSwgb2lkICIKIAkJCQkJICAgIkZST00g cGdfZGF0YWJhc2UgZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5s aW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRFUiBCWSAoZGF0bmFtZSA8PiAndGVtcGxhdGUxJyks IGRhdG5hbWUiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhy ZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnByaW50ZihPUEYsICIt LVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0b3J5L3Rhci9j dXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCwgY3JlYXRlIGEgc3ViZGlyZWN0b3J5CisJICogdW5k ZXIgdGhlIG1haW4gZGlyZWN0b3J5IGFuZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSBvciBzdWJk aXJlY3RvcnkKKwkgKiB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhhdCBzdWJkaXJlY3RvcnkgYnkgcGdf ZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFy CQltYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisKKwkJc25wcmludGYoZGJfc3ViZGlyLCBNQVhQ R1BBVEgsICIlcy9kYXRhYmFzZXMiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgc3ViZGly ZWN0b3J5IHdpdGggJ2RhdGFiYXNlcycgbmFtZSB1bmRlciBtYWluIGRpcmVjdG9yeS4gKi8KKwkJ aWYgKG1rZGlyKGRiX3N1YmRpciwgcGdfZGlyX2NyZWF0ZV9tb2RlKSAhPSAwKQorCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkYl9zdWJkaXIpOwor CisJCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBmaWxl bmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgbWFwIGZpbGUgKHRvIHN0b3JlIGRib2lkIGFuZCBkYm5h bWUpICovCisJCW1hcF9maWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1cpOwor CQlpZiAoIW1hcF9maWxlKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wi OiAlbSIsIG1hcF9maWxlX3BhdGgpOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMo cmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDAp OwogCQljaGFyCSAgICpzYW5pdGl6ZWQ7Ci0JCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOworCQlj aGFyCSAgICpvaWQgPSBQUWdldHZhbHVlKHJlcywgaSwgMSk7CisJCWNvbnN0IGNoYXIgKmNyZWF0 ZV9vcHRzID0gIiI7CiAJCWludAkJCXJldDsKIAogCQkvKiBTa2lwIHRlbXBsYXRlMCwgZXZlbiBp ZiBpdCdzIG5vdCBtYXJrZWQgIWRhdGFsbG93Y29ubi4gKi8KQEAgLTE2NjAsNyArMjAzMCwxMCBA QCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0 YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKGRi bmFtZSwgdHJ1ZSk7Ci0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1w XG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4i LCBzYW5pdGl6ZWQpOworCiAJCWZyZWUoc2FuaXRpemVkKTsKIAogCQkvKgpAQCAtMTY3NSwyNCAr MjA0OCw0MCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJewogCQkJaWYgKG91dHB1 dF9jbGVhbikKIAkJCQljcmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKKwkJCS8qIFNp bmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KKwkJ CWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCWZwcmludGYoT1BGLCAi XFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CiAJCQllbHNlCi0JCQl7CiAJCQkJY3JlYXRlX29w dHMgPSAiIjsKLQkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21t YW5kLCB3ZSBtdXN0ICovCi0JCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJu YW1lKTsKLQkJCX0KIAkJfQogCQllbHNlCiAJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7CiAK LQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVh dGVfb3B0cyk7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1bXAs IHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5kYXQgZmlsZS4K KwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJeworCQkJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFY UEdQQVRILCAiXCIlc1wiL1wiJXNcIi5kbXAiLCBkYl9zdWJkaXIsIG9pZCk7CisJCQllbHNlIGlm IChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1B WFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIudGFyIiwgZGJfc3ViZGlyLCBvaWQpOworCQkJZWxzZQor CQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIiLCBkYl9z dWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBmb3IgZGJvaWQgYW5kIGRi bmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lk LCBkYm5hbWUpOworCQl9CisKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMs IGRiZmlsZXBhdGgpOwogCQlpZiAocmV0ICE9IDApCiAJCQlwZ19mYXRhbCgicGdfZHVtcCBmYWls ZWQgb24gZGF0YWJhc2UgXCIlc1wiLCBleGl0aW5nIiwgZGJuYW1lKTsKIAotCQlpZiAoZmlsZW5h bWUpCisJCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJewog CQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BGKQpAQCAt MTcwMSw2ICsyMDkwLDEwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl9CiAJfQog CisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwp CisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFyKHJlcyk7CiB9CiAKQEAgLTE3MTAsNyAr MjEwMyw3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogICogUnVuIHBnX2R1bXAgb24g ZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgogICovCiBzdGF0aWMgaW50Ci1ydW5QZ0R1 bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKK3J1blBnRHVt cChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFyICpkYmZp bGUpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRhIGNt ZDsKQEAgLTE3MTksMTcgKzIxMTIsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwg Y29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVmKTsK IAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIl c1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRl X29wdHMpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1 bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMgaXMg bm90IGEgcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGZpbGUgbmFtZSBhbmQgZHVtcAor CSAqIGZvcm1hdCB0byB0aGUgcGdfZHVtcCBjb21tYW5kIHRvIGdldCBhcmNoaXZlIGR1bXAuCiAJ ICovCi0JaWYgKGZpbGVuYW1lKQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAi KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlwcmludGZQUUV4cEJ1 ZmZlcigmY21kLCAiXCIlc1wiICVzIC1mICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIHBn ZHVtcG9wdHMtPmRhdGEsIGRiZmlsZSwgY3JlYXRlX29wdHMpOworCisJCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoRGlyZWN0b3J5KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAg LS1mb3JtYXQ9ZGlyZWN0b3J5ICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNo Q3VzdG9tKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9Y3VzdG9t ICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9dGFyICIpOworCX0KIAllbHNlCi0JCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIo JmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBwZ2R1bXBvcHRzLT5k YXRhLCBjcmVhdGVfb3B0cyk7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1 c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAorCQkgKiBmb3JtYXQuCisJ CSAqLworCQlpZiAoZmlsZW5hbWUpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1G YSAiKTsKKwkJZWxzZQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJ fQogCiAJLyoKIAkgKiBBcHBlbmQgdGhlIGRhdGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29u c3RydWN0ZWQgc3RlbSBvZiBjb25uZWN0aW9uCkBAIC0xODc0LDMgKzIyODYsNDcgQEAgcmVhZF9k dW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBh dHRlcm4pCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIHBhcnNlRHVtcEZv cm1hdAorICoKKyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCisgKi8KK3N0YXRp YyBBcmNoaXZlRm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQorewor CUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQ7CisKKwlpZiAocGdfc3RyY2FzZWNtcChmb3Jt YXQsICJjIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQg PSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZCIpID09IDAp CisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNl Y21wKGZvcm1hdCwgImRpcmVjdG9yeSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERp cmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInAiKSA9PSAwKQorCQlh cmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0 LCAicGxhaW4iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJj aFRhcjsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInRhciIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQg b3V0cHV0IGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIs IG9yIFwidFwiIiwKKwkJCQkgZm9ybWF0KTsKKworCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKK30K KworLyoKKyAqIGNyZWF0ZUR1bXBJZAorICoKKyAqIFRoaXMgd2lsbCByZXR1cm4gbmV4dCBsYXN0 IHVzZWQgb2lkLgorICovCitzdGF0aWMgaW50CitjcmVhdGVEdW1wSWQodm9pZCkKK3sKKwlyZXR1 cm4gKytkdW1wSWRWYWw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9y ZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwppbmRleCA4NGI4ZDQxMGM5ZS4uYTUz NTQ1YzQ3ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBwZ19y ZXN0b3JlLmMKICAqCXBnX3Jlc3RvcmUgaXMgYW4gdXRpbGl0eSBleHRyYWN0aW5nIHBvc3RncmVz IGRhdGFiYXNlIGRlZmluaXRpb25zCi0gKglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBi eSBwZ19kdW1wIHVzaW5nIHRoZSBhcmNoaXZlcgorICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNy ZWF0ZWQgYnkgcGdfZHVtcC9wZ19kdW1wYWxsIHVzaW5nIHRoZSBhcmNoaXZlcgogICoJaW50ZXJm YWNlLgogICoKICAqCXBnX3Jlc3RvcmUgd2lsbCByZWFkIHRoZSBiYWNrdXAgYXJjaGl2ZSBhbmQK QEAgLTQxLDEyICs0MSwxNiBAQAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNpbmNsdWRl IDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaWZkZWYgSEFWRV9URVJNSU9TX0gK ICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcu aCIKKyNpbmNsdWRlICJjb25uZWN0ZGIuaCIKICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNs dWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdf dXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgog I2luY2x1ZGUgInBhcmFsbGVsLmgiCkBAIC01NCwxOCArNTgsNDEgQEAKIAogc3RhdGljIHZvaWQg dXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3JlX2Zp bHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKTsKK3N0YXRp YyBib29sIGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNo YXIgKmZpbGVuYW1lKTsKK3N0YXRpYyBpbnQJcmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3QgY2hh ciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCQkJCSBpbnQgbnVt V29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSk7CitzdGF0aWMgaW50CXJlc3RvcmVfZ2xvYmFsX29i amVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOwor CitzdGF0aWMgaW50CXJlc3RvcmVfYWxsX2RhdGFiYXNlcyhjb25zdCBjaGFyICppbnB1dEZpbGVT cGVjLAorCQkJCQkJCQkgIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVz dG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFt ZXNfbGlzdF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQlTaW1wbGVQdHJMaXN0 ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRl X3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNo YXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAgIFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRf bGlzdCk7CisKKy8qCisgKiBTdG9yZXMgYSBkYXRhYmFzZSBPSUQgYW5kIHRoZSBjb3JyZXNwb25k aW5nIG5hbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0IERiT2lkTmFtZQoreworCU9pZAkJCW9pZDsK KwljaGFyCQlzdHJbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsgLyogbnVsbC10ZXJtaW5hdGVkIHN0 cmluZyBoZXJlICovCit9CQkJRGJPaWROYW1lOworCiAKIGludAogbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiB7CiAJUmVzdG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50CQkJYzsKLQlpbnQJCQll eGl0X2NvZGU7CiAJaW50CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2ZSAgICAqQUg7CiAJY2hh cgkgICAqaW5wdXRGaWxlU3BlYzsKLQlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKKwlib29sIAkJ ZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQlu X2Vycm9ycyA9IDA7CisJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5n TGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlz YWJsZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsK IAlzdGF0aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBAIC04OSw2ICsxMTYsNyBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRl IiwgMCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imds b2JhbHMtb25seSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwK IAkJeyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIs IDEsIE5VTEwsICdOJ30sCkBAIC0xNDIsNiArMTcwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29u bHksIDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKIAkJeyJy ZXN0cmljdC1rZXkiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNn0sCisJCXsiZXhjbHVkZS1k YXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA3fSwKIAogCQl7TlVMTCwgMCwgTlVM TCwgMH0KIAl9OwpAQCAtMTcwLDcgKzE5OSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6 ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdl dG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0 OlQ6VTp2d1d4MSIsCiAJCQkJCQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNo IChjKQpAQCAtMTk3LDExICsyMjYsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ CQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19z dHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUg b25seSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CisJ CQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJ CQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsK LQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAqLwogCQkJCWlmICgh b3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAogCQkJCQkJCQkJICBQR19N QVhfSk9CUywKQEAgLTMyMSw2ICszNTMsMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCQkJb3B0cy0+cmVzdHJpY3Rfa2V5ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7 CiAKKwkJCWNhc2UgNzoJCQkJLyogZGF0YWJhc2UgcGF0dGVybnMgdG8gc2tpcCAqLworCQkJCXNp bXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJ CQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0 dGVkIGEgY29tcGxhaW50ICovCiAJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVs cFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKQEAgLTM0Nyw2ICszODMsMTQg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKCFvcHRzLT5jcGFyYW1zLmRibmFt ZSAmJiAhb3B0cy0+ZmlsZW5hbWUgJiYgIW9wdHMtPnRvY1N1bW1hcnkpCiAJCXBnX2ZhdGFsKCJv bmUgb2YgLWQvLS1kYm5hbWUgYW5kIC1mLy0tZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogCisJ aWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMICYmIGdsb2JhbHNfb25seSkKKwl7 CisJCXBnX2xvZ19lcnJvcigib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgg JXMiLAorCQkJCQkgIi0tZXhjbHVkZS1kYXRhYmFzZSIsICItZy8tLWdsb2JhbHMtb25seSIpOwor CQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRp b24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91bGQgZ2V0 IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICovCiAJaWYg KG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQyMCw2ICs0NjQsMzEgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3Qg YmUgdXNlZCB0b2dldGhlciIsCiAJCQkJICItMS8tLXNpbmdsZS10cmFuc2FjdGlvbiIsICItLXRy YW5zYWN0aW9uLXNpemUiKTsKIAorCWlmIChvcHRzLT5zaW5nbGVfdHhuICYmIGdsb2JhbHNfb25s eSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVy IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQki LS1zaW5nbGUtdHJhbnNhY3Rpb24iLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKworCWlmIChvcHRz LT50eG5fc2l6ZSAmJiBnbG9iYWxzX29ubHkpCisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAl cyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0 ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJIi0tdHJhbnNhY3Rpb24tc2l6ZSIsICItZy8tLWdsb2Jh bHMtb25seSIpOworCisJaWYgKG9wdHMtPmV4aXRfb25fZXJyb3IgJiYgZ2xvYmFsc19vbmx5KQor CQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2hl biByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCSItLWV4 aXQtb24tZXJyb3IiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKworCWlmIChkYXRhX29ubHkgJiYg Z2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVz ZWQgdG9nZXRoZXIiLAorCQkJCSAiLWEvLS1kYXRhLW9ubHkiLCAiLWcvLS1nbG9iYWxzLW9ubHki KTsKKwlpZiAoc2NoZW1hX29ubHkgJiYgZ2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9u cyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJCSAiLXMvLS1zY2hlbWEt b25seSIsICItZy8tLWdsb2JhbHMtb25seSIpOworCWlmIChzdGF0aXN0aWNzX29ubHkgJiYgZ2xv YmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQg dG9nZXRoZXIiLAorCQkJCSAiLS1zdGF0aXN0aWNzLW9ubHkiLCAiLWcvLS1nbG9iYWxzLW9ubHki KTsKKwlpZiAod2l0aF9zdGF0aXN0aWNzICYmIGdsb2JhbHNfb25seSkKKwkJcGdfZmF0YWwoIm9w dGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkgIi0tc3RhdGlz dGljcyIsICItZy8tLWdsb2JhbHMtb25seSIpOworCiAJLyoKIAkgKiAtQyBpcyBub3QgY29tcGF0 aWJsZSB3aXRoIC0xLCBiZWNhdXNlIHdlIGNhbid0IGNyZWF0ZSBhIGRhdGFiYXNlIGluc2lkZQog CSAqIGEgdHJhbnNhY3Rpb24gYmxvY2suCkBAIC00ODUsNiArNTU0LDE3NiBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMtPmZvcm1hdE5hbWUpOwogCX0KIAorCS8qCisJ ICogSWYgdG9jLmdsbyBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhlIGRhdGFi YXNlcyBmcm9tCisJICogbWFwLmRhdCwgYnV0IHNraXAgcmVzdG9yaW5nIHRob3NlIG1hdGNoaW5n IC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlpZiAoaW5wdXRGaWxlU3BlYyAh PSBOVUxMICYmCisJCShmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRv Yy5nbG8iKSkpCisJeworCQljaGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCQlSZXN0b3Jl T3B0aW9ucyAqdG1wb3B0cyA9IChSZXN0b3JlT3B0aW9ucyAqKSBwZ19tYWxsb2MwKHNpemVvZihS ZXN0b3JlT3B0aW9ucykpOworCisJCW9wdHMtPmZvcm1hdCA9IGFyY2hVbmtub3duOworCisJCW1l bWNweSh0bXBvcHRzLCBvcHRzLCBzaXplb2YoUmVzdG9yZU9wdGlvbnMpKTsKKworCQkvKgorCQkg KiBDYW4gb25seSB1c2UgLS1saXN0IG9yIC0tdXNlLWxpc3Qgb3B0aW9ucyB3aXRoIGEgc2luZ2xl IGRhdGFiYXNlCisJCSAqIGR1bXAuCisJCSAqLworCQlpZiAob3B0cy0+dG9jU3VtbWFyeSkKKwkJ CXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJj aGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi1sLy0tbGlzdCIpOworCQlpZiAo b3B0cy0+dG9jRmlsZSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGJlIHVzZWQgd2hl biByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi1M Ly0tdXNlLWxpc3QiKTsKKworCQlpZiAob3B0cy0+c3RyaWN0X25hbWVzKQorCQkJcGdfZmF0YWwo Im9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0 ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJCSItLXN0cmljdC1uYW1lcyIpOworCQlpZiAoZ2xvYmFs c19vbmx5ICYmIG9wdHMtPmRyb3BTY2hlbWEpCisJCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQg JXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVh dGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkiLS1jbGVhbiIsICItZy8tLWdsb2JhbHMtb25seSIp OworCisJCWlmIChub19zY2hlbWEpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbm5vdCBiZSB1 c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJ CQkJICItLW5vLXNjaGVubWEiKTsKKworCQlpZiAoZGF0YV9vbmx5KQorCQkJcGdfZmF0YWwoIm9w dGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQg YnkgcGdfZHVtcGFsbCIsCisJCQkJCSAiLWEvLS1kYXRhLW9ubHkiKTsKKworCQlpZiAoc3RhdGlz dGljc19vbmx5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB3aGVuIHJl c3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJCSAiLS1zdGF0 aXN0aWNzLW9ubHkiKTsKKworCQlpZiAoIShvcHRzLT5kdW1wU2VjdGlvbnMgJiBEVU1QX1BSRV9E QVRBKSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGV4Y2x1ZGUgJXMgd2hlbiByZXN0 b3JpbmcgYSBwZ19kdW1wYWxsIGFyY2hpdmUiLAorCQkJCQkgIi0tc2VjdGlvbiIsICItLXByZS1k YXRhIik7CisKKwkJLyoKKwkJICogVG8gcmVzdG9yZSBmcm9tIGEgcGdfZHVtcGFsbCBhcmNoaXZl LCAtQyAoY3JlYXRlIGRhdGFiYXNlKSBvcHRpb24KKwkJICogbXVzdCBiZSBzcGVjaWZpZWQgdW5s ZXNzIHdlIGFyZSBvbmx5IHJlc3RvcmluZyBnbG9iYWxzLgorCQkgKi8KKwkJaWYgKCFnbG9iYWxz X29ubHkgJiYgb3B0cy0+Y3JlYXRlREIgIT0gMSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJvcHRp b24gJXMgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVk IGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkJICItQy8tLWNyZWF0ZSIpOworCQkJcGdfbG9nX2Vycm9y X2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1l KTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50KCJJbmRpdmlkdWFsIGRhdGFiYXNlcyBjYW4gYmUgcmVz dG9yZWQgdXNpbmcgdGhlaXIgc3BlY2lmaWMgYXJjaGl2ZXMuIik7CisJCQlleGl0X25pY2VseSgx KTsKKwkJfQorCisJCS8qCisJCSAqIEFsd2F5cyByZXN0b3JlIGdsb2JhbCBvYmplY3RzLCBldmVu IGlmIC0tZXhjbHVkZS1kYXRhYmFzZSByZXN1bHRzIGluCisJCSAqIHplcm8gZGF0YWJhc2VzIHRv IHByb2Nlc3MuIElmICdnbG9iYWxzLW9ubHknIGlzIHNldCwgZXhpdAorCQkgKiBpbW1lZGlhdGVs eS4KKwkJICovCisJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZ2xv IiwgaW5wdXRGaWxlU3BlYyk7CisKKwkJbl9lcnJvcnMgPSByZXN0b3JlX2dsb2JhbF9vYmplY3Rz KGdsb2JhbF9wYXRoLCB0bXBvcHRzKTsKKworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQkJcGdfbG9n X2luZm8oImRhdGFiYXNlIHJlc3RvcmluZyBza2lwcGVkIGJlY2F1c2Ugb3B0aW9uICVzIHdhcyBz cGVjaWZpZWQiLAorCQkJCQkJIi1nLy0tZ2xvYmFscy1vbmx5Iik7CisJCWVsc2UKKwkJeworCQkJ LyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0ICovCisJCQluX2Vy cm9ycyA9IG5fZXJyb3JzICsgcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGlucHV0RmlsZVNwZWMsIGRi X2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJCQkJCQkJCSBvcHRzLCBudW1Xb3JrZXJzKTsKKwkJfQor CisJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVz dHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisJfQorCWVsc2UKKwl7CisJCWlmIChkYl9leGNs dWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwkJeworCQkJc2ltcGxlX3N0cmluZ19saXN0X2Rl c3Ryb3koJmRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW4g YmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1w YWxsIiwKKwkJCQkJICItLWV4Y2x1ZGUtZGF0YWJhc2UiKTsKKwkJfQorCisJCWlmIChnbG9iYWxz X29ubHkpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0 b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi1nLy0tZ2xv YmFscy1vbmx5Iik7CisKKwkJLyogUHJvY2VzcyBpZiB0b2MuZ2xvIGZpbGUgZG9lcyBub3QgZXhp c3QuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRGaWxlU3BlYywg b3B0cywgbnVtV29ya2VycywgZmFsc2UpOworCX0KKworCS8qIERvbmUsIHByaW50IGEgc3VtbWFy eSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgcmVzdG9yZS4gKi8KKwlpZiAobl9lcnJvcnMpCisJ eworCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBuX2Vy cm9ycyk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcmVzdG9y ZV9nbG9iYWxfb2JqZWN0cworICoKKyAqIFRoaXMgcmVzdG9yZSBhbGwgZ2xvYmFsIG9iamVjdHMu CisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5w dXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMpCit7CisJQXJjaGl2ZSAgICAqQUg7CisJ aW50CQkJbmVycm9yID0gMDsKKworCS8qIFNldCBmb3JtYXQgYXMgY3VzdG9tIHNvIHRoYXQgdG9j LmdsbyBmaWxlIGNhbiBiZSByZWFkLiAqLworCW9wdHMtPmZvcm1hdCA9IGFyY2hDdXN0b207CisJ b3B0cy0+dHhuX3NpemUgPSAwOworCisJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBv cHRzLT5mb3JtYXQpOworCisJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMpOworCisJ b25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKworCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBo b3cgbm9pc3kgdG8gYmUgKi8KKwlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CisKKwkvKgor CSAqIFdlJ3JlIHRhbGtpbmcgdG8gdGhlIERCIGRpcmVjdGx5LCBkb24ndCBzZW5kIGNvbW1lbnRz IHNpbmNlIHRoZXkKKwkgKiBvYnNjdXJlIFNRTCB3aGVuIGRpc3BsYXlpbmcgZXJyb3JzCisJICov CisJKChBcmNoaXZlSGFuZGxlICopIEFIKS0+bm9Ub2NDb21tZW50cyA9IDA7CisKKwlBSC0+ZXhp dF9vbl9lcnJvciA9IGZhbHNlOworCisJLyogUGFyYWxsZWwgZXhlY3V0aW9uIGlzIG5vdCBzdXBw b3J0ZWQgZm9yIGdsb2JhbCBvYmplY3QgcmVzdG9yYXRpb24uICovCisJQUgtPm51bVdvcmtlcnMg PSAxOworCisJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBSCk7CisJUmVzdG9yZUFyY2hp dmUoQUgsIGZhbHNlKTsKKworCW5lcnJvciA9IEFILT5uX2Vycm9yczsKKworCS8qIEFIIG1heSBi ZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCisJQ2xvc2VBcmNoaXZlKEFIKTsKKworCXJldHVy biBuZXJyb3I7Cit9CisKKy8qCisgKiByZXN0b3JlX29uZV9kYXRhYmFzZQorICoKKyAqIFRoaXMg d2lsbCByZXN0b3JlIG9uZSBkYXRhYmFzZSB1c2luZyB0b2MuZGF0IGZpbGUuCisgKgorICogcmV0 dXJucyB0aGUgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0 aWMgaW50CityZXN0b3JlX29uZV9kYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBS ZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9k YXRhKQoreworCUFyY2hpdmUgICAgKkFIOworCWludAkJCW5fZXJyb3JzOworCiAJQUggPSBPcGVu QXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlv bnMoQUgsIE5VTEwsIG9wdHMpOwpAQCAtNDkyLDEzICs3MzEsMjUgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIGEgY29ubmVjdGlvbiB5ZXQgYnV0 IHRoYXQgZG9lc24ndCBtYXR0ZXIuIFRoZSBjb25uZWN0aW9uCiAJICogaXMgaW5pdGlhbGl6ZWQg dG8gTlVMTCBhbmQgaWYgd2UgdGVybWluYXRlIHRocm91Z2ggZXhpdF9uaWNlbHkoKSB3aGlsZQot CSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJlIGEg bm8tb3AuCisJICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGp1 c3QgYmUgYSBuby1vcC4gSWYgd2UgYXJlCisJICogcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNl cywgdGhlbiBvbmx5IHVwZGF0ZSBBWCBoYW5kbGUgZm9yIGNsZWFudXAgYXMKKwkgKiB0aGUgcHJl dmlvdXMgZW50cnkgd2FzIGFscmVhZHkgaW4gdGhlIGFycmF5IGFuZCB3ZSBoYWQgY2xvc2VkIHBy ZXZpb3VzCisJICogY29ubmVjdGlvbiwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBhcnJheSBzbG90 LgogCSAqLwotCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJaWYgKCFhcHBlbmRfZGF0YSkK KwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJCXJlcGxhY2Vfb25fZXhpdF9j bG9zZV9hcmNoaXZlKEFIKTsKIAogCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kg dG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CiAKKwkvKgorCSAqIFdlJ3Jl IHRhbGtpbmcgdG8gdGhlIERCIGRpcmVjdGx5LCBkb24ndCBzZW5kIGNvbW1lbnRzIHNpbmNlIHRo ZXkKKwkgKiBvYnNjdXJlIFNRTCB3aGVuIGRpc3BsYXlpbmcgZXJyb3JzCisJICovCisJKChBcmNo aXZlSGFuZGxlICopIEFIKS0+bm9Ub2NDb21tZW50cyA9IDA7CisKIAkvKgogCSAqIFdoZXRoZXIg dG8ga2VlcCBzdWJtaXR0aW5nIHNxbCBjb21tYW5kcyBhcyAicGdfcmVzdG9yZSAuLi4gfCBwc3Fs IC4uLiAiCiAJICovCkBAIC01MTQsMjUgKzc2NSwyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAllbHNlCiAJewogCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJ UmVzdG9yZUFyY2hpdmUoQUgpOworCQlSZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEpOwog CX0KIAotCS8qIGRvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyAqLwotCWlm IChBSC0+bl9lcnJvcnMpCi0JCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0 b3JlOiAlZCIsIEFILT5uX2Vycm9ycyk7CisJbl9lcnJvcnMgPSBBSC0+bl9lcnJvcnM7CiAKIAkv KiBBSCBtYXkgYmUgZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLwotCWV4aXRfY29kZSA9IEFILT5u X2Vycm9ycyA/IDEgOiAwOwotCiAJQ2xvc2VBcmNoaXZlKEFIKTsKIAotCXJldHVybiBleGl0X2Nv ZGU7CisJcmV0dXJuIG5fZXJyb3JzOwogfQogCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29uc3QgY2hh ciAqcHJvZ25hbWUpCiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdyZVNRTCBkYXRh YmFzZSBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuXG4iKSwgcHJvZ25hbWUp OworCXByaW50ZihfKCIlcyByZXN0b3JlcyBQb3N0Z3JlU1FMIGRhdGFiYXNlcyBmcm9tIGFyY2hp dmVzIGNyZWF0ZWQgYnkgcGdfZHVtcCBvciBwZ19kdW1wYWxsLlxuXG4iKSwgcHJvZ25hbWUpOwog CXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLiBbRklM RV1cbiIpLCBwcm9nbmFtZSk7CiAKQEAgLTU1MCw2ICs3OTcsNyBAQCB1c2FnZShjb25zdCBjaGFy ICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAgICAgICAgICAgICAgICAgIGNs ZWFuIChkcm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0aW5nXG4iKSk7CiAJcHJp bnRmKF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIHRhcmdldCBk YXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQtb24tZXJyb3IgICAgICAgICAg ZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxuIikpOworCXByaW50ZihfKCIg IC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3Rz LCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwgLS1pbmRleD1OQU1FICAgICAg ICAgICAgIHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmludGYoXygiICAtaiwgLS1qb2Jz PU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwgam9icyB0byByZXN0b3Jl XG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5BTUUgICAgICB1c2UgdGFi bGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBAIC01NjYsNiArODE0LDcgQEAg dXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLTEsIC0tc2luZ2xlLXRy YW5zYWN0aW9uICAgICByZXN0b3JlIGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4iKSk7CiAJcHJp bnRmKF8oIiAgLS1kaXNhYmxlLXRyaWdnZXJzICAgICAgICAgICBkaXNhYmxlIHRyaWdnZXJzIGR1 cmluZyBkYXRhLW9ubHkgcmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC0tZW5hYmxlLXJvdy1z ZWN1cml0eSAgICAgICAgZW5hYmxlIHJvdyBzZWN1cml0eVxuIikpOworCXByaW50ZihfKCIgIC0t ZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOICAgZG8gbm90IHJlc3RvcmUgdGhlIHNwZWNpZmllZCBk YXRhYmFzZShzKVxuIikpOwogCXByaW50ZihfKCIgIC0tZmlsdGVyPUZJTEVOQU1FICAgICAgICAg ICAgcmVzdG9yZSBvciBza2lwIG9iamVjdHMgYmFzZWQgb24gZXhwcmVzc2lvbnNcbiIKIAkJCSAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEZJTEVOQU1FXG4iKSk7CiAJcHJpbnRm KF8oIiAgLS1pZi1leGlzdHMgICAgICAgICAgICAgICAgICB1c2UgSUYgRVhJU1RTIHdoZW4gZHJv cHBpbmcgb2JqZWN0c1xuIikpOwpAQCAtNjAxLDggKzg1MCw4IEBAIHVzYWdlKGNvbnN0IGNoYXIg KnByb2duYW1lKQogCXByaW50ZihfKCIgIC0tcm9sZT1ST0xFTkFNRSAgICAgICAgICBkbyBTRVQg Uk9MRSBiZWZvcmUgcmVzdG9yZVxuIikpOwogCiAJcHJpbnRmKF8oIlxuIgotCQkJICJUaGUgb3B0 aW9ucyAtSSwgLW4sIC1OLCAtUCwgLXQsIC1ULCBhbmQgLS1zZWN0aW9uIGNhbiBiZSBjb21iaW5l ZCBhbmQgc3BlY2lmaWVkXG4iCi0JCQkgIm11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBs ZSBvYmplY3RzLlxuIikpOworCQkJICJUaGUgb3B0aW9ucyAtSSwgLW4sIC1OLCAtUCwgLXQsIC1U LCAtLXNlY3Rpb24sIGFuZCAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlXG4iCisJCQkgImNvbWJp bmVkIGFuZCBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVj dHMuXG4iKSk7CiAJcHJpbnRmKF8oIlxuSWYgbm8gaW5wdXQgZmlsZSBuYW1lIGlzIHN1cHBsaWVk LCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuXG5cbiIpKTsKIAlwcmludGYoXygiUmVwb3J0 IGJ1Z3MgdG8gPCVzPi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CiAJcHJpbnRmKF8oIiVzIGhv bWUgcGFnZTogPCVzPlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9VUkwpOwpAQCAtNzA3LDMg Kzk1Niw0MDkgQEAgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJl c3RvcmVPcHRpb25zICpvcHRzKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisg KiBmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZp bGUgZXhpc3RzIGluIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisgKi8KK3N0YXRpYyBib29sCitmaWxl X2V4aXN0c19pbl9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFt ZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChz bnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQ QVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7 CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7 Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUKKyAqCisgKiBUaGlzIHdp bGwgbWFyayBmb3Igc2tpcHBpbmcgYW55IGVudHJpZXMgZnJvbSBkYm5hbWVfb2lkX2xpc3QgdGhh dCBwYXR0ZXJuIG1hdGNoIGFuCisgKiBlbnRyeSBpbiB0aGUgZGJfZXhjbHVkZV9wYXR0ZXJucyBs aXN0LgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXRhYmFzZSB0byBiZSByZXN0b3Jl ZC4KKyAqCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nv bm4gKmNvbm4sCisJCQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJ CVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykKK3sKKwlpbnQJCQljb3VudF9k YiA9IDA7CisJUFFFeHBCdWZmZXIgcXVlcnk7CisJUFFFeHBCdWZmZXIgZGJfbGl0OworCVBHcmVz dWx0ICAgKnJlczsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlkYl9saXQgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCisJLyoKKwkgKiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRi bmFtZXMgYW5kIGlmIHNwZWNpZmllZCB0byBza2lwIHJlc3RvcmluZywgdGhlbgorCSAqIHJlbW92 ZSBkYm5hbWUgZnJvbSBsaXN0LgorCSAqLworCWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2Nl bGwgPSBkYm5hbWVfb2lkX2xpc3QtPmhlYWQ7CisJCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2Vs bC0+bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9j ZWxsLT5wdHI7CisJCWJvb2wgICAgICAgICAgICBza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKwor CQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwkJcmVzZXRQUUV4cEJ1ZmZlcihkYl9saXQpOwor CisJCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKGRiX2xpdCwgZGJpZG5hbWUtPnN0ciwgY29ubik7 CisKKwkJZm9yIChTaW1wbGVTdHJpbmdMaXN0Q2VsbCAqcGF0X2NlbGwgPSBkYl9leGNsdWRlX3Bh dHRlcm5zLmhlYWQ7IHBhdF9jZWxsOyBwYXRfY2VsbCA9IHBhdF9jZWxsLT5uZXh0KQorCQl7CisJ CQkvKgorCQkJICogSWYgdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2ggdGhlbiB3ZSBkb24ndCBuZWVk IHRvIHRyeSBhIHBhdHRlcm4KKwkJCSAqIG1hdGNoCisJCQkgKi8KKwkJCWlmIChwZ19zdHJjYXNl Y21wKGRiaWRuYW1lLT5zdHIsIHBhdF9jZWxsLT52YWwpID09IDApCisJCQkJc2tpcF9kYl9yZXN0 b3JlID0gdHJ1ZTsKKwkJCS8qIE90aGVyd2lzZSwgdHJ5IGEgcGF0dGVybiBtYXRjaCBpZiB0aGVy ZSBpcyBhIGNvbm5lY3Rpb24gKi8KKwkJCWVsc2UKKwkJCXsKKwkJCQlpbnQJCQlkb3RjbnQ7CisK KwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOworCQkJCXByb2Nl c3NTUUxOYW1lUGF0dGVybihjb25uLCBxdWVyeSwgcGF0X2NlbGwtPnZhbCwgZmFsc2UsCisJCQkJ CQkJCQkgIGZhbHNlLCBOVUxMLCBkYl9saXQtPmRhdGEsCisJCQkJCQkJCQkgIE5VTEwsIE5VTEws IE5VTEwsICZkb3RjbnQpOworCisJCQkJaWYgKGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19s b2dfZXJyb3IoImltcHJvcGVyIHF1YWxpZmllZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMp OiAlcyIsCisJCQkJCQkJCSBkYmlkbmFtZS0+c3RyKTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJ CQkJCWV4aXRfbmljZWx5KDEpOworCQkJCX0KKworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25u LCBxdWVyeS0+ZGF0YSk7CisKKwkJCQlpZiAoUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlz a2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgbmFtZSBc IiVzXCIgbWF0Y2hlcyAtLWV4Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybiBcIiVzXCIiLCBkYmlkbmFt ZS0+c3RyLCBwYXRfY2VsbC0+dmFsKTsKKwkJCQl9CisKKwkJCQlQUWNsZWFyKHJlcyk7CisJCQkJ cmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlmIChza2lwX2RiX3Jlc3RvcmUp CisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBNYXJrIGRiIHRvIGJlIHNraXBwZWQgb3Ig aW5jcmVtZW50IHRoZSBjb3VudGVyIG9mIGRicyB0byBiZQorCQkgKiByZXN0b3JlZAorCQkgKi8K KwkJaWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdfbG9nX2luZm8oImV4Y2x1ZGluZyBk YXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKKwkJCWRiaWRuYW1lLT5vaWQgPSBJbnZh bGlkT2lkOworCQl9CisJCWVsc2UKKwkJCWNvdW50X2RiKys7CisJfQorCisJZGVzdHJveVBRRXhw QnVmZmVyKHF1ZXJ5KTsKKwlkZXN0cm95UFFFeHBCdWZmZXIoZGJfbGl0KTsKKworCXJldHVybiBj b3VudF9kYjsKK30KKworLyoKKyAqIGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZQorICoK KyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCByZWFkIGxpbmUgYnkgbGluZSBhbmQgdGhlbiBwcmVw YXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICogbmFtZXMgYW5kIGNvcnJlc3BvbmRpbmcgZGJfb2lk LgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJlciBvZiBkYXRhYmFzZSBuYW1lcyBpbiBtYXAu ZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmls ZShjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0KQorewor CVN0cmluZ0luZm9EYXRhIGxpbmVidWY7CisJRklMRQkgICAqcGZpbGU7CisJY2hhcgkJbWFwX2Zp bGVfcGF0aFtNQVhQR1BBVEhdOworCWludAkJCWNvdW50ID0gMDsKKwlpbnQJCQlsZW47CisKKwor CS8qCisJICogSWYgdGhlcmUgaXMgbm8gbWFwLmRhdCBmaWxlIGluIGR1bXAsIHRoZW4gcmV0dXJu IGZyb20gaGVyZSBhcyB0aGVyZSBpcworCSAqIG5vIGRhdGFiYXNlIHRvIHJlc3RvcmUuCisJICov CisJaWYgKCFmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoZHVtcGRpcnBhdGgsICJtYXAuZGF0Iikp CisJeworCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIGlzIHNraXBwZWQgYmVjYXVz ZSBmaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCBpbiBkaXJlY3RvcnkgXCIlc1wiIiwgIm1hcC5k YXQiLCBkdW1wZGlycGF0aCk7CisJCXJldHVybiAwOworCX0KKworCWxlbiA9IHN0cmxlbihkdW1w ZGlycGF0aCk7CisKKwkvKiBUcmltIHNsYXNoIGZyb20gZGlyZWN0cnkgbmFtZS4gKi8KKwl3aGls ZSAobGVuID4gMSAmJiBkdW1wZGlycGF0aFtsZW4gLSAxXSA9PSAnLycpCisJeworCQlkdW1wZGly cGF0aFtsZW4gLSAxXSA9ICdcMCc7CisJCWxlbi0tOworCX0KKworCXNucHJpbnRmKG1hcF9maWxl X3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBPcGVu IG1hcC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFS WV9SKTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4g ZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2ZpbGVfcGF0aCk7CisKKwlpbml0U3RyaW5nSW5mbygmbGlu ZWJ1Zik7CisKKwkvKiBBcHBlbmQgYWxsIHRoZSBkYm5hbWUvZGJfb2lkIGNvbWJpbmF0aW9ucyB0 byB0aGUgbGlzdC4gKi8KKwl3aGlsZSAocGdfZ2V0X2xpbmVfYnVmKHBmaWxlLCAmbGluZWJ1Zikp CisJeworCQlPaWQJCQlkYl9vaWQgPSBJbnZhbGlkT2lkOworCQljaGFyCSAgICpkYm5hbWU7CisJ CURiT2lkTmFtZSAgKmRiaWRuYW1lOworCQlpbnQJCQluYW1lbGVuOworCQljaGFyCSAgICpwID0g bGluZWJ1Zi5kYXRhOworCisJCS8qIEV4dHJhY3QgZGJvaWQuICovCisJCXdoaWxlIChpc2RpZ2l0 KCh1bnNpZ25lZCBjaGFyKSAqcCkpCisJCQlwKys7CisJCWlmIChwID4gbGluZWJ1Zi5kYXRhICYm ICpwID09ICcgJykKKwkJeworCQkJc3NjYW5mKGxpbmVidWYuZGF0YSwgIiV1IiwgJmRiX29pZCk7 CisJCQlwKys7CisJCX0KKworCQkvKiBkYm5hbWUgaXMgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKi8K KwkJZGJuYW1lID0gcDsKKwkJbmFtZWxlbiA9IHN0cmxlbihkYm5hbWUpOworCisJCS8qIFJlcG9y dCBlcnJvciBhbmQgZXhpdCBpZiB0aGUgZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAqLwor CQlpZiAoIU9pZElzVmFsaWQoZGJfb2lkKSB8fCBuYW1lbGVuIDw9IDEpCisJCQlwZ19mYXRhbCgi aW52YWxpZCBlbnRyeSBpbiBmaWxlIFwiJXNcIiBvbiBsaW5lICVkIiwgbWFwX2ZpbGVfcGF0aCwK KwkJCQkJIGNvdW50ICsgMSk7CisKKwkJZGJpZG5hbWUgPSBwZ19tYWxsb2Mob2Zmc2V0b2YoRGJP aWROYW1lLCBzdHIpICsgbmFtZWxlbiArIDEpOworCQlkYmlkbmFtZS0+b2lkID0gZGJfb2lkOwor CQlzdHJsY3B5KGRiaWRuYW1lLT5zdHIsIGRibmFtZSwgbmFtZWxlbik7CisKKwkJcGdfbG9nX2lu Zm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAoT0lEOiAldSkgaW4gZmlsZSBcIiVzXCIiLAorCQkJ CQlkYmlkbmFtZS0+c3RyLCBkYl9vaWQsIG1hcF9maWxlX3BhdGgpOworCisJCXNpbXBsZV9wdHJf bGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYmlkbmFtZSk7CisJCWNvdW50Kys7CisJfQor CisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4g Y291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlX2FsbF9kYXRhYmFzZXMKKyAqCisgKiBUaGlzIHdp bGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNlbnQgaW4KKyAqIGRpcmVj dG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAqCisgKiBUaGlzIHdpbGwgc2tp cCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZpZWQgd2l0aAorICogZXhj bHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJucywgbnVtYmVyIG9mIGVycm9ycyB3 aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlX2FsbF9kYXRhYmFz ZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJICBTaW1wbGVTdHJpbmdMaXN0IGRi X2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkgIGludCBudW1X b3JrZXJzKQoreworCVNpbXBsZVB0ckxpc3QgZGJuYW1lX29pZF9saXN0ID0ge05VTEwsIE5VTEx9 OworCWludAkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJCQludW1fdG90YWxfZGI7CisJaW50 CQkJbl9lcnJvcnNfdG90YWwgPSAwOworCWNoYXIJICAgKmNvbm5lY3RlZF9kYiA9IE5VTEw7CisJ UEdjb25uCSAgICpjb25uID0gTlVMTDsKKwlSZXN0b3JlT3B0aW9ucyAqb3JpZ2luYWxfb3B0cyA9 IChSZXN0b3JlT3B0aW9ucyAqKSBwZ19tYWxsb2MwKHNpemVvZihSZXN0b3JlT3B0aW9ucykpOwor CVJlc3RvcmVPcHRpb25zICp0bXBvcHRzID0gKFJlc3RvcmVPcHRpb25zICopIHBnX21hbGxvYzAo c2l6ZW9mKFJlc3RvcmVPcHRpb25zKSk7CisKKwltZW1jcHkob3JpZ2luYWxfb3B0cywgb3B0cywg c2l6ZW9mKFJlc3RvcmVPcHRpb25zKSk7CisKKwkvKiBTYXZlIGRiIG5hbWUgdG8gcmV1c2UgaXQg Zm9yIGFsbCB0aGUgZGF0YWJhc2UuICovCisJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQlj b25uZWN0ZWRfZGIgPSBvcHRzLT5jcGFyYW1zLmRibmFtZTsKKworCW51bV90b3RhbF9kYiA9IGdl dF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZSgoY2hhciopIGlucHV0RmlsZVNwZWMsICZkYm5h bWVfb2lkX2xpc3QpOworCisJcGdfbG9nX2luZm8obmdldHRleHQoImZvdW5kICVkIGRhdGFiYXNl IG5hbWUgaW4gXCIlc1wiIiwKKwkJCQkJCSAiZm91bmQgJWQgZGF0YWJhc2UgbmFtZXMgaW4gXCIl c1wiIiwKKwkJCQkJCSBudW1fdG90YWxfZGIpLAorCQkJCW51bV90b3RhbF9kYiwgIm1hcC5kYXQi KTsKKworCS8qCisJICogSWYgZXhjbHVkZS1wYXR0ZXJucyBpcyBnaXZlbiwgdGhlbiBjb25uZWN0 IHRvIHRoZSBkYXRhYmFzZSB0byBwcm9jZXNzCisJICogaXQuCisJICovCisJaWYgKGRiX2V4Y2x1 ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCXsKKwkJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1l KQorCQl7CisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKG9wdHMtPmNwYXJhbXMuZGJuYW1lLCBO VUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3Bv cnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCQkgICBmYWxz ZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCQlpZiAoIWNvbm4pCisJ CQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9wdHMt PmNwYXJhbXMuZGJuYW1lKTsKKwkJfQorCisJCWlmICghY29ubikKKwkJeworCQkJcGdfbG9nX2lu Zm8oInRyeWluZyB0byBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsICJwb3N0Z3JlcyIpOwor CisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJh bXMucGdob3N0LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFt cy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJ CWlmICghY29ubikKKwkJCXsKKwkJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdG8g ZGF0YWJhc2UgXCIlc1wiIiwgInRlbXBsYXRlMSIpOworCisJCQkJY29ubiA9IENvbm5lY3REYXRh YmFzZSgidGVtcGxhdGUxIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCQkg ICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFV TFQsCisJCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwp OworCQkJCWlmICghY29ubikKKwkJCQl7CisJCQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNv bm5lY3QgdG8gZGF0YWJhc2VzIFwicG9zdGdyZXNcIiBvciBcInRlbXBsYXRlMVwiXG4iCisJCQkJ CQkJCSAiUGxlYXNlIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUgZGF0YWJhc2UuIik7CisJCQkJCXBn X2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4i LCBwcm9nbmFtZSk7CisJCQkJCWV4aXRfbmljZWx5KDEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0K KworCS8qCisJICogZmlsdGVyIHRoZSBkYiBsaXN0IGFjY29yZGluZyB0byB0aGUgZXhjbHVkZSBw YXR0ZXJucworCSAqLworCW51bV9kYl9yZXN0b3JlID0gZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0 b3JlKGNvbm4sICZkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJCQkgZGJfZXhjbHVkZV9wYXR0 ZXJucyk7CisKKwkvKiBDbG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3ZSBhcmUgZG9uZSB3aXRo IGV4Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybnMuICovCisJUFFmaW5pc2goY29ubik7CisKKwkvKiBF eGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChudW1fZGJfcmVzdG9y ZSA9PSAwKQorCXsKKwkJcGdfbG9nX2luZm8obmdldHRleHQoIm5vIGRhdGFiYXNlIG5lZWRzIHJl c3RvcmluZyBvdXQgb2YgJWQgZGF0YWJhc2UiLAorCQkJCQkJCSAibm8gZGF0YWJhc2UgbmVlZHMg cmVzdG9yaW5nIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIpLAorCQkJCQludW1f dG90YWxfZGIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZCB0byByZXN0 b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51 bV90b3RhbF9kYik7CisKKwkvKgorCSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRhdGFiYXNlcyB0byBy ZXN0b3JlIGFmdGVyIHByb2Nlc3NpbmcgdGhlCisJICogZXhjbHVkZS1kYXRhYmFzZSBzd2l0Y2go ZXMpLiAgTm93IHdlIGNhbiByZXN0b3JlIHRoZW0gb25lIGJ5IG9uZS4KKwkgKi8KKwlmb3IgKFNp bXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7CisJCSBkYl9j ZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1l ID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQ QVRIXTsKKwkJY2hhcgkJc3ViZGlyZGJwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCWRiZmlsZW5h bWVbTUFYUEdQQVRIXTsKKwkJaW50CQkJbl9lcnJvcnM7CisKKwkJLyogaWdub3JlIGRicyBtYXJr ZWQgZm9yIHNraXBwaW5nICovCisJCWlmIChkYmlkbmFtZS0+b2lkID09IEludmFsaWRPaWQpCisJ CQljb250aW51ZTsKKworCQkvKgorCQkgKiBTaW5jZSBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBtYXkg bW9kaWZ5IFJlc3RvcmVPcHRpb25zIGR1cmluZyB0aGUKKwkJICogcHJldmlvdXMgcmVzdG9yZSwg d2UgbXVzdCBwcm92aWRlIGEgZnJlc2ggY29weSBvZiB0aGUgb3JpZ2luYWwKKwkJICogIm9wdHMi IGZvciBlYWNoIGNhbGwgdG8gcmVzdG9yZV9vbmVfZGF0YWJhc2UuCisJCSAqLworCQltZW1jcHko dG1wb3B0cywgb3JpZ2luYWxfb3B0cywgc2l6ZW9mKFJlc3RvcmVPcHRpb25zKSk7CisKKwkJLyoK KwkJICogV2UgbmVlZCB0byByZXNldCBvdmVycmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNh biBiZSByZXN0b3JlZAorCQkgKiBpbnRvIGFuIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVz ZWQgd2l0aCAtZC8tLWRibmFtZSBvcHRpb24pCisJCSAqLworCQlpZiAodG1wb3B0cy0+Y3BhcmFt cy5vdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJCXBmcmVlKHRtcG9wdHMtPmNwYXJhbXMub3ZlcnJp ZGVfZGJuYW1lKTsKKwkJCXRtcG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0gTlVMTDsK KwkJfQorCisJCXNucHJpbnRmKHN1YmRpcmRicGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2Vz IiwgaW5wdXRGaWxlU3BlYyk7CisKKwkJLyoKKwkJICogTG9vayBmb3IgdGhlIGRhdGFiYXNlIGR1 bXAgZmlsZS9kaXIuIElmIHRoZXJlIGlzIGFuIHtvaWR9LnRhciBvcgorCQkgKiB7b2lkfS5kbXAg ZmlsZSwgdXNlIGl0LiBPdGhlcndpc2UgdHJ5IHRvIHVzZSBhIGRpcmVjdG9yeSBjYWxsZWQKKwkJ ICoge29pZH0KKwkJICovCisJCXNucHJpbnRmKGRiZmlsZW5hbWUsIE1BWFBHUEFUSCwgIiV1LnRh ciIsIGRiaWRuYW1lLT5vaWQpOworCQlpZiAoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KHN1YmRp cmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgs ICIlcy9kYXRhYmFzZXMvJXUudGFyIiwgaW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJ CWVsc2UKKwkJeworCQkJc25wcmludGYoZGJmaWxlbmFtZSwgTUFYUEdQQVRILCAiJXUuZG1wIiwg ZGJpZG5hbWUtPm9pZCk7CisKKwkJCWlmIChmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnkoc3ViZGly ZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgs ICIlcy9kYXRhYmFzZXMvJXUuZG1wIiwgaW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJ CQllbHNlCisJCQkJc25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2Vz LyV1IiwgaW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCX0KKworCQlwZ19sb2dfaW5m bygicmVzdG9yaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRiaWRuYW1lLT5zdHIpOworCisJCS8qIElm IGRhdGFiYXNlIGlzIGFscmVhZHkgY3JlYXRlZCwgdGhlbiBkb24ndCBzZXQgY3JlYXRlREIgZmxh Zy4gKi8KKwkJaWYgKHRtcG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQl7CisJCQlQR2Nvbm4JICAg KnRlc3RfY29ubjsKKworCQkJdGVzdF9jb25uID0gQ29ubmVjdERhdGFiYXNlKGRiaWRuYW1lLT5z dHIsIE5VTEwsIHRtcG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkJCXRtcG9wdHMtPmNw YXJhbXMucGdwb3J0LCB0bXBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJ CQkJCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJaWYg KHRlc3RfY29ubikKKwkJCXsKKwkJCQlQUWZpbmlzaCh0ZXN0X2Nvbm4pOworCisJCQkJLyogVXNl IGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZSBmb3IgY29ubmVjdGlvbi4gKi8KKwkJCQl0bXBvcHRz LT5jcmVhdGVEQiA9IDA7CisJCQkJdG1wb3B0cy0+Y3BhcmFtcy5kYm5hbWUgPSBkYmlkbmFtZS0+ c3RyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIFdlJ2xsIGhhdmUgdG8gY3JlYXRlIGl0 ICovCisJCQkJdG1wb3B0cy0+Y3JlYXRlREIgPSAxOworCQkJCXRtcG9wdHMtPmNwYXJhbXMuZGJu YW1lID0gY29ubmVjdGVkX2RiOworCQkJfQorCQl9CisKKwkJLyogUmVzdG9yZSB0aGUgc2luZ2xl IGRhdGFiYXNlLiAqLworCQluX2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFiYXNlKHN1YmRpcnBh dGgsIHRtcG9wdHMsIG51bVdvcmtlcnMsIHRydWUpOworCisJCW5fZXJyb3JzX3RvdGFsICs9IG5f ZXJyb3JzOworCisJCS8qIFByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcg c2luZ2xlIGRhdGFiYXNlIHJlc3RvcmUuICovCisJCWlmIChuX2Vycm9ycykKKwkJCXBnX2xvZ193 YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBk YmlkbmFtZS0+c3RyLCBuX2Vycm9ycyk7CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNz ZWQgZGF0YWJhc2VzLiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJh c2VzIGlzICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5hbWUgYW5kIGRib2lk IGxpc3QuICovCisJc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRibmFtZV9vaWRfbGlzdCk7CisK KwlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv dC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKaW5kZXggYWI5 MzEwZWI0MmIuLmY0MjdmZGJmYTI0IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFf YmFzaWMucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0yNDQsNCAr MjQ0LDU0IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkncGdfZHVtcGFsbDogb3B0aW9uIC0tZXhj bHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1v bmx5JwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3Jt YXQnLCAneCcgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiB1bnJlY29nbml6ZWQgb3V0cHV0 IGZvcm1hdCAieCI7XEUvLAorCSdwZ19kdW1wYWxsOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1h dCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcs ICdkJywgJy0tcmVzdHJpY3Qta2V5PXV1JywgJy1mIGR1bXBmaWxlJyBdLAorCXFyL1xRcGdfZHVt cGFsbDogZXJyb3I6IG9wdGlvbiAtLXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGgg LS1mb3JtYXQ9cGxhaW5cRS8sCisJJ3BnX2R1bXBhbGw6IC0tcmVzdHJpY3Qta2V5IGNhbiBvbmx5 IGJlIHVzZWQgd2l0aCBwbGFpbiBkdW1wIGZvcm1hdCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2Uo CisgICAgICAgIFsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAnZCcsICctLWdsb2JhbHMtb25s eScsICctLWNsZWFuJywgJy1mIGR1bXBmaWxlJyBdLAorICAgICAgICBxci9cUXBnX2R1bXBhbGw6 IGVycm9yOiBvcHRpb25zIC0tY2xlYW4gYW5kIC1nXC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUg dXNlZCB0b2dldGhlciBpbiBub24tdGV4dCBkdW1wXEUvLAorICAgICAgICAncGdfZHVtcGFsbDog LS1jbGVhbiBhbmQgLWcvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgaW4g bm9uLXRleHQgZHVtcCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScs ICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcg XSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNh bm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19y ZXN0b3JlOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVy IHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCispOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAn cGdfcmVzdG9yZScsICctLWRhdGEtb25seScsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgn IF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtYVwvLS1kYXRhLW9ubHkgYW5k IC1nXC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKKwkncGdfcmVz dG9yZTogZXJyb3I6IG9wdGlvbnMgLWEvLS1kYXRhLW9ubHkgYW5kIC1nLy0tZ2xvYmFscy1vbmx5 IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJworKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsg J3BnX3Jlc3RvcmUnLCAnLS1zY2hlbWEtb25seScsICctLWdsb2JhbHMtb25seScsICctZCcsICd4 eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtc1wvLS1zY2hlbWEtb25s eSBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyXEUvLAorCSdw Z19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtcy8tLXNjaGVtYS1vbmx5IGFuZCAtZy8tLWdsb2Jh bHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicKKyk7CisKK2NvbW1hbmRfZmFpbHNfbGlr ZSgKKwlbICdwZ19yZXN0b3JlJywgJy0tc3RhdGlzdGljcy1vbmx5JywgJy0tZ2xvYmFscy1vbmx5 JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb25zIC0tc3Rh dGlzdGljcy1vbmx5IGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRo ZXJcRS8sCisJJ3BnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb25zIC0tc3RhdGlzdGljcy1vbmx5IGFu ZCAtZy8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicKKyk7CisKK2NvbW1h bmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywgJy0tZXhjbHVkZS1kYXRhYmFzZT1mb28n LCAnLWQnLCAneHh4JywgJ2R1bXBkaXInIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0 aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFu IGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIG9wdGlvbiAtLWV4Y2x1 ZGUtZGF0YWJhc2UgaXMgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wJwor KTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1nbG9iYWxzLW9u bHknLCAnLWQnLCAneHh4JywgJ2R1bXBkaXInIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjog b3B0aW9uIC1nXC8tLWdsb2JhbHMtb25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5n IGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIG9wdGlvbiAtLWds b2JhbHMtb25seSBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCB0aGUgZHVtcCBvZiBwZ19kdW1w JworKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDA3 X3BnX2R1bXBhbGwucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDc1NGE4MGZhNjAKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbApAQCAtMCwwICsx LDQzMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxs JzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJHRlbXBkaXIgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczo6dGVtcGRpcjsKK215ICRydW5fZGIgPSAncG9zdGdyZXMnOworbXkgJHNlcCA9 ICR3aW5kb3dzX29zID8gIlxcIiA6ICIvIjsKKworIyBUYWJsZXNwYWNlIGxvY2F0aW9ucyB1c2Vk IGJ5ICJyZXN0b3JlX3RhYmxlc3BhY2UiIHRlc3QgY2FzZS4KK215ICR0YWJsZXNwYWNlMSA9ICIk e3RlbXBkaXJ9JHtzZXB9dGJsMSI7CitteSAkdGFibGVzcGFjZTIgPSAiJHt0ZW1wZGlyfSR7c2Vw fXRibDIiOworbWtkaXIoJHRhYmxlc3BhY2UxKSB8fCBkaWUgIm1rZGlyICR0YWJsZXNwYWNlMSAk ISI7Citta2RpcigkdGFibGVzcGFjZTIpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2UyICQhIjsK KworIyBTY2FwZSB0YWJsZXNwYWNlIGxvY2F0aW9ucyBvbiBXaW5kb3dzLgorJHRhYmxlc3BhY2Ux ID0gJHdpbmRvd3Nfb3MgPyAoJHRhYmxlc3BhY2UxID1+IHMvXFwvXFxcXC9ncikgOiAkdGFibGVz cGFjZTE7CiskdGFibGVzcGFjZTIgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFjZTIgPX4gcy9c XC9cXFxcL2dyKSA6ICR0YWJsZXNwYWNlMjsKKworIyBXaGVyZSBwZ19kdW1wYWxsIHdpbGwgYmUg ZXhlY3V0ZWQuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9k ZScpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmluaXRp b24gb2YgdGhlIHBnX2R1bXBhbGwgdGVzdCBjYXNlcyB0byBydW4uCisjCisjIEVhY2ggb2YgdGhl c2UgdGVzdCBjYXNlcyBhcmUgbmFtZWQgYW5kIHRob3NlIG5hbWVzIGFyZSB1c2VkIGZvciBmYWls CisjIHJlcG9ydGluZyBhbmQgYWxzbyB0byBzYXZlIHRoZSBkdW1wIGFuZCByZXN0b3JlIGluZm9y bWF0aW9uIG5lZWRlZCBmb3IgdGhlCisjIHRlc3QgdG8gYXNzZXJ0LgorIworIyBUaGUgInNldHVw X3NxbCIgaXMgYSBwc3FsIHZhbGlkIHNjcmlwdCB0aGF0IGNvbnRhaW5zIFNRTCBjb21tYW5kcyB0 byBleGVjdXRlCisjIGJlZm9yZSBvZiBhY3R1YWxseSBleGVjdXRlIHRoZSB0ZXN0cy4gVGhlIHNl dHVwcyBhcmUgYWxsIGV4ZWN1dGVkIGJlZm9yZSBvZgorIyBhbnkgdGVzdCBleGVjdXRpb24uCisj CisjIFRoZSAiZHVtcF9jbWQiIGFuZCAicmVzdG9yZV9jbWQiIGFyZSB0aGUgY29tbWFuZHMgdGhh dCB3aWxsIGJlIGV4ZWN1dGVkLiBUaGUKKyMgInJlc3RvcmVfY21kIiBtdXN0IGhhdmUgdGhlIC0t ZmlsZSBmbGFnIHRvIHNhdmUgdGhlIHJlc3RvcmUgb3V0cHV0IHNvIHRoYXQgd2UKKyMgY2FuIGFz c2VydCBvbiBpdC4KKyMKKyMgVGhlICJsaWtlIiBhbmQgInVubGlrZSIgaXMgYSByZWdleHAgdGhh dCBpcyB1c2VkIHRvIG1hdGNoIHRoZSBwZ19yZXN0b3JlCisjIG91dHB1dC4gSXQgbXVzdCBoYXZl IGF0IGxlYXN0IG9uZSBvZiB0aGVuIGZpbGxlZCBwZXIgdGVzdCBjYXNlcyBidXQgaXQgYWxzbwor IyBjYW4gaGF2ZSBib3RoLiBTZWUgImV4Y2x1ZGluZ19kYXRhYmFzZXMiIHRlc3QgY2FzZSBmb3Ig ZXhhbXBsZS4KK215ICVwZ2R1bXBhbGxfcnVucyA9ICgKKwlyZXN0b3JlX3JvbGVzID0+IHsKKwkJ c2V0dXBfc3FsID0+ICcKKwkJQ1JFQVRFIFJPTEUgZHVtcGFsbCBXSVRIIEVOQ1JZUFRFRCBQQVNT V09SRCBcJ2FkbWluXCcgU1VQRVJVU0VSOworCQlDUkVBVEUgUk9MRSBkdW1wYWxsMiBXSVRIIFJF UExJQ0FUSU9OIENPTk5FQ1RJT04gTElNSVQgMTA7JywKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3Bn X2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJ J3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSct LWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVz dG9yZV9yb2xlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisJCQlccypcUUNSRUFURSBST0xFIGR1 bXBhbGwyO1xFCisJCQlccypcUUFMVEVSIFJPTEUgZHVtcGFsbDIgV0lUSCBOT1NVUEVSVVNFUiBJ TkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NSRUFURURCIE5PTE9HSU4gUkVQTElDQVRJT04gTk9CWVBB U1NSTFMgQ09OTkVDVElPTiBMSU1JVCAxMDtcRQorCQkveG0KKwl9LAorCisJcmVzdG9yZV90YWJs ZXNwYWNlID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJQ1JFQVRFIFJPTEUgdGFwOworCQlDUkVB VEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBMT0NBVElPTiAnJHRhYmxlc3BhY2UxJzsKKwkJ Q1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAgTE9DQVRJT04gJyR0YWJsZXNwYWNlMicg V0lUSCAoc2VxX3BhZ2VfY29zdD0xLjApOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1w YWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJ J3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSct LWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2Uuc3FsIiwKKwkJCSIkdGVtcGRp ci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQkjIE1hdGNoICJFIiBhcyBvcHRpb25hbCBz aW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NBVElPTiB3aGVuIHJ1bm5pbmcgb24KKwkJIyBXaW5kb3dz LgorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9XTkVSIHRh cCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNlMic7XEUKKwkJCVxuXFFBTFRFUiBUQUJM RVNQQUNFIHRibDIgU0VUIChzZXFfcGFnZV9jb3N0PTEuMCk7XEUKKwkJL3htLAorCX0sCisKKwly ZXN0b3JlX2dyYW50cyA9PiB7CisJCXNldHVwX3NxbCA9PiAiCisJCUNSRUFURSBEQVRBQkFTRSB0 YXBncmFudHNkYjsKKwkJQ1JFQVRFIFNDSEVNQSBwcml2YXRlOworCQlDUkVBVEUgU0VRVUVOQ0Ug c2VyaWFsIFNUQVJUIDEwMTsKKwkJQ1JFQVRFIEZVTkNUSU9OIGZuKCkgUkVUVVJOUyB2b2lkIEFT IFwkXCQKKwkJQkVHSU4KKwkJRU5EOworCQlcJFwkIExBTkdVQUdFIHBscGdzcWw7CisJCUNSRUFU RSBST0xFIHN1cGVyOworCQlDUkVBVEUgUk9MRSBncmFudDE7CisJCUNSRUFURSBST0xFIGdyYW50 MjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQzOworCQlDUkVBVEUgUk9MRSBncmFudDQ7CisJCUNSRUFU RSBST0xFIGdyYW50NTsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ2OworCQlDUkVBVEUgUk9MRSBncmFu dDc7CisJCUNSRUFURSBST0xFIGdyYW50ODsKKworCQlDUkVBVEUgVEFCTEUgdCAoaWQgaW50KTsK KwkJSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUdSQU5UIFNF TEVDVCBPTiBUQUJMRSB0IFRPIGdyYW50MTsKKwkJR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHQgVE8g Z3JhbnQyOworCQlHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBUQUJMRSB0IHRvIGdyYW50MzsKKwkJ R1JBTlQgQ09OTkVDVCwgQ1JFQVRFIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDsK KwkJR1JBTlQgVVNBR0UsIENSRUFURSBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7CisJCUdS QU5UIFVTQUdFLCBTRUxFQ1QsIFVQREFURSBPTiBTRVFVRU5DRSBzZXJpYWwgVE8gZ3JhbnQ2Owor CQlHUkFOVCBzdXBlciBUTyBncmFudDc7CisJCUdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gZm4o KSBUTyBncmFudDg7CisJCSIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJ CSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVz dG9yZV9ncmFudHMiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScs ICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0 ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMi LAorCQldLAorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFHUkFOVCBBTEwgT04gU0NIRU1BIHByaXZh dGUgVE8gZ3JhbnQ1O1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIEZVTkNUSU9O IHB1YmxpYy5mbigpIFRPIGdyYW50ODtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBP TiBTRVFVRU5DRSBwdWJsaWMuc2VyaWFsIFRPIGdyYW50NjtcRQorCQkJKC4qXG4pKgorCQkJXG5c UUdSQU5UIFNFTEVDVCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDE7XEUKKwkJCVxuXFFHUkFO VCBJTlNFUlQgT04gVEFCTEUgcHVibGljLnQgVE8gZ3JhbnQyO1xFCisJCQlcblxRR1JBTlQgQUxM IE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50MztcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5U IENSRUFURSxDT05ORUNUIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDtcRQorCQkv eG0sCisJfSwKKworCWV4Y2x1ZGluZ19kYXRhYmFzZXMgPT4geworCQlzZXR1cF9zcWwgPT4gJ0NS RUFURSBEQVRBQkFTRSBkYjE7CisJCVxjIGRiMQorCQlDUkVBVEUgVEFCTEUgdDEgKGlkIGludCk7 CisJCUlOU0VSVCBJTlRPIHQxIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBU QUJMRSB0MiAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDIgVkFMVUVTICgxKSwgKDIpLCAoMyks ICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGIyOworCQlcYyBkYjIKKwkJQ1JFQVRFIFRBQkxF IHQzIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MyBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQp OworCQlDUkVBVEUgVEFCTEUgdDQgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ0IFZBTFVFUyAo MSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiZXgzOworCQlcYyBkYmV4 MworCQlDUkVBVEUgVEFCTEUgdDUgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ1IFZBTFVFUyAo MSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0NiAoaWQgaW50KTsKKwkJSU5TRVJU IElOVE8gdDYgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0Ug ZGJleDQ7CisJCVxjIGRiZXg0CisJCUNSRUFURSBUQUJMRSB0NyAoaWQgaW50KTsKKwkJSU5TRVJU IElOVE8gdDcgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ4IChp ZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0OCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJ CUNSRUFURSBEQVRBQkFTRSBkYjU7CisJCVxjIGRiNQorCQlDUkVBVEUgVEFCTEUgdDkgKGlkIGlu dCk7CisJCUlOU0VSVCBJTlRPIHQ5IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFU RSBUQUJMRSB0MTAgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQxMCBWQUxVRVMgKDEpLCAoMiks ICgzKSwgKDQpOworCQknLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQkn LS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4Y2x1 ZGluZ19kYXRhYmFzZXMiLAorCQkJJy0tZXhjbHVkZS1kYXRhYmFzZScgPT4gJ2RiZXgqJywKKwkJ XSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9y bWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdf ZGF0YWJhc2VzLnNxbCIsCisJCQknLS1leGNsdWRlLWRhdGFiYXNlJyA9PiAnZGI1JywKKwkJCSIk dGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eCisJCQlc blxRQ1JFQVRFIERBVEFCQVNFIGRiMVxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxF IHB1YmxpYy50MSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQy IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjJcRQorCQkJKC4qXG4p KgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDMgKFxFCisJCQkoLipcbikqCisJCQlcblxR Q1JFQVRFIFRBQkxFIHB1YmxpYy50NCAoL3htLAorCQl1bmxpa2UgPT4gcXIvXgorCQkJXG5cUUNS RUFURSBEQVRBQkFTRSBkYjNcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJs aWMudDUgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NiAoXEUK KwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGI0XEUKKwkJCSguKlxuKSoKKwkJ CVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ3IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFU RSBUQUJMRSBwdWJsaWMudDggKFxFCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiNVxFCisJCQko LipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50OSAoXEUKKwkJCSguKlxuKSoKKwkJ CVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQxMCAoXEUKKwkJL3htLAorCX0sCisKKwlmb3JtYXRf ZGlyZWN0b3J5ID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcmVj dG9yeShhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGly ZWN0b3J5IFZBTFVFUyAoMSwgdHJ1ZSwgJ25hbWUxJyksICgyLCBmYWxzZSwgJ25hbWUyJyk7IiwK KwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGly ZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5IiwKKwkJ XSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9y bWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfZGly ZWN0b3J5LnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCWxp a2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfZGlyZWN0b3J5IChhLCBiLCBjKSBGUk9N IHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRfdGFyID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVB VEUgVEFCTEUgZm9ybWF0X3RhcihhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQg SU5UTyBmb3JtYXRfdGFyIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lMycpLCAoMiwgdHJ1ZSwgJ25h bWU0Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0 JyA9PiAndGFyJywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfdGFyIiwKKwkJXSwK KwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0 JyA9PiAndGFyJywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfdGFyLnNxbCIsCisJ CQkiJHRlbXBkaXIvZm9ybWF0X3RhciIsCisJCV0sCisJCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1 YmxpYy5mb3JtYXRfdGFyIChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRf Y3VzdG9tID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2N1c3RvbShh IGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfY3VzdG9tIFZB TFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9j bWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJ CSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJXSwKKwkJcmVzdG9yZV9j bWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9t JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfY3VzdG9tLnNxbCIsCisJCQkiJHRl bXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCV0sCisJCWxpa2UgPT4gcXIvXiBcblxRQ09QWSBwdWJs aWMuZm9ybWF0X2N1c3RvbSAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZHVtcF9n bG9iYWxzX29ubHkgPT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfZGly KGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9kaXIgVkFM VUVTICgxLCBmYWxzZSwgJ25hbWU1JyksICgyLCB0cnVlLCAnbmFtZTYnKTsiLAorCQlkdW1wX2Nt ZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAor CQkJJy0tZ2xvYmFscy1vbmx5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9kdW1wX2dsb2Jh bHNfb25seSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1D JywgJy0tZ2xvYmFscy1vbmx5JywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkuc3FsIiwKKwkJCSIkdGVtcGRp ci9kdW1wX2dsb2JhbHNfb25seSIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisgICAgICAgICAgICBe XHMqXFFDUkVBVEUgUk9MRSBkdW1wYWxsO1xFXHMqXG4KKwkJCS94bQorCX0sKTsKKworIyBGaXJz dCBleGVjdXRlIHRoZSBzZXR1cF9zcWwKK2ZvcmVhY2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1 bXBhbGxfcnVucykKK3sKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57c2V0dXBfc3FsfSkK Kwl7CisJCSRub2RlLT5zYWZlX3BzcWwoJHJ1bl9kYiwgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57 c2V0dXBfc3FsfSk7CisJfQorfQorCisjIEV4ZWN1dGUgdGhlIHRlc3RzCitmb3JlYWNoIG15ICRy dW4gKHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1bnMpCit7CisJIyBDcmVhdGUgYSBuZXcgdGFyZ2V0 IGNsdXN0ZXIgdG8gcGdfcmVzdG9yZSBlYWNoIHRlc3QgY2FzZSBydW4gc28gdGhhdCB3ZQorCSMg ZG9uJ3QgbmVlZCB0byB0YWtlIGNhcmUgb2YgdGhlIGNsZWFudXAgZnJvbSB0aGUgdGFyZ2V0IGNs dXN0ZXIgYWZ0ZXIgZWFjaAorCSMgcnVuLgorCW15ICR0YXJnZXRfbm9kZSA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygidGFyZ2V0XyRydW4iKTsKKwkkdGFyZ2V0X25vZGUtPmluaXQ7 CisJJHRhcmdldF9ub2RlLT5zdGFydDsKKworCSMgRHVtcGFsbCBmcm9tIG5vZGUgY2x1c3Rlci4K Kwkkbm9kZS0+Y29tbWFuZF9vayhcQHsgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57ZHVtcF9jbWR9 IH0sCisJCSIkcnVuOiBwZ19kdW1wYWxsIHJ1bnMiKTsKKworCSMgUmVzdG9yZSB0aGUgZHVtcCBv biAidGFyZ2V0X25vZGUiIGNsdXN0ZXIuCisJbXkgQHJlc3RvcmVfY21kID0gKAorCQlAeyAkcGdk dW1wYWxsX3J1bnN7JHJ1bn0tPntyZXN0b3JlX2NtZH0gfSwKKwkJJy0taG9zdCcsICR0YXJnZXRf bm9kZS0+aG9zdCwgJy0tcG9ydCcsICR0YXJnZXRfbm9kZS0+cG9ydCk7CisKKwlteSAoJHN0ZG91 dCwgJHN0ZGVycikgPSBydW5fY29tbWFuZChcQHJlc3RvcmVfY21kKTsKKworCSMgcGdfcmVzdG9y ZSAtLWZpbGUgb3V0cHV0IGZpbGUuCisJbXkgJG91dHB1dF9maWxlID0gc2x1cnBfZmlsZSgiJHRl bXBkaXIvJHtydW59LnNxbCIpOworCisJaWYgKCAgICEoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57 bGlrZX0pCisJCSYmICEoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSkpCisJeworCQlk aWUgIm1pc3NpbmcgXCJsaWtlXCIgb3IgXCJ1bmxpa2VcIiBpbiB0ZXN0IFwiJHJ1blwiIjsKKwl9 CisKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0pCisJeworCQlsaWtlKCRvdXRw dXRfZmlsZSwgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0sICJzaG91bGQgZHVtcCAkcnVu Iik7CisJfQorCisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0pCisJeworCQl1 bmxpa2UoCisJCQkkb3V0cHV0X2ZpbGUsCisJCQkkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxp a2V9LAorCQkJInNob3VsZCBub3QgZHVtcCAkcnVuIik7CisJfQorfQorCisjIFNvbWUgbmVnYXRp dmUgdGVzdCBjYXNlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsIGFuZCByZXN0b3JlIHVzaW5nIHBn X3Jlc3RvcmUKKyMgdGVzdCBjYXNlIDE6IHJlcG9ydCBhbiBlcnJvciB3aGVuIC1DIGlzIG5vdCB1 c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5k X2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3Vz dG9tIiwKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGly L2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAt Q1wvLS1jcmVhdGUgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBj cmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLUMgaXMgbm90IHVzZWQgaW4gcGdfcmVz dG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHRlc3QgY2FzZSAyOiByZXBvcnQg YW4gZXJyb3Igd2hlbiBcbC8tLWxpc3Qgb3B0aW9uIGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1 bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJ CSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9t JywKKwkJJy0tbGlzdCcsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIs CisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLWxcLy0tbGlzdCBjYW5ub3Qg YmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxF LywKKwknV2hlbiAtLWxpc3QgaXMgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19k dW1wYWxsJyk7CisKKyMgdGVzdCBjYXNlIDM6IHJlcG9ydCBhbiBlcnJvciB3aGVuIC1MLy0tdXNl LWxpc3Qgb3B0aW9uIGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21t YW5kX2ZhaWxzX2xpa2UoCisgICAgICAgIFsKKyAgICAgICAgICAgICAgICAncGdfcmVzdG9yZScs CisgICAgICAgICAgICAgICAgIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorICAgICAg ICAgICAgICAgICctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisgICAgICAgICAgICAgICAgJy0tdXNl LWxpc3QnID0+ICd1c2UnLAorICAgICAgICAgICAgICAgICctLWZpbGUnID0+ICIkdGVtcGRpci9l cnJvcl90ZXN0LnNxbCIsCisgICAgICAgIF0sCisgICAgICAgIHFyL1xRcGdfcmVzdG9yZTogZXJy b3I6IG9wdGlvbiAtTFwvLS11c2UtbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBh biBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKyAgICAgICAgJ1doZW4gLUwvLS11 c2UtbGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsK KworIyB0ZXN0IGNhc2UgNDogcmVwb3J0IGFuIGVycm9yIHdoZW4gLS1zdHJpY3QtbmFtZXMgb3B0 aW9uIGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxz X2xpa2UoCisgICAgICAgIFsKKyAgICAgICAgICAgICAgICAncGdfcmVzdG9yZScsCisgICAgICAg ICAgICAgICAgIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorICAgICAgICAgICAgICAg ICctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisgICAgICAgICAgICAgICAgJy0tc3RyaWN0LW5hbWVz JywKKyAgICAgICAgICAgICAgICAnLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwi LAorICAgICAgICBdLAorICAgICAgICBxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1z dHJpY3QtbmFtZXMgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVh dGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisgICAgICAgICdXaGVuIC0tc3RyaWN0LW5hbWVzIGlzIHVz ZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHRlc3QgY2Fz ZSA1OiByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWNsZWFuIGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkg YXJlIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNv bW1hbmRfZmFpbHNfbGlrZSgKKyAgICAgICAgWworICAgICAgICAgICAgICAgICdwZ19yZXN0b3Jl JywKKyAgICAgICAgICAgICAgICAiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisgICAg ICAgICAgICAgICAgJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKyAgICAgICAgICAgICAgICAnLS1j bGVhbicsCisJCSctLWdsb2JhbHMtb25seScsCisgICAgICAgICAgICAgICAgJy0tZmlsZScgPT4g IiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKyAgICAgICAgXSwKKyAgICAgICAgcXIvXFFwZ19y ZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtLWNsZWFuIGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fu bm90IGJlIHVzZWQgdG9nZXRoZXIgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5 IHBnX2R1bXBhbGxcRS8sCisgICAgICAgICdXaGVuIC0tY2xlYW4gYW5kIC1nXC8tLWdsb2JhbHMt b25seSBhcmUgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisK KyMgdGVzdCBjYXNlIDY6IHJlcG9ydCBhbiBlcnJvciB3aGVuIG5vbi1leGlzdCBkYXRhYmFzZSBp cyBnaXZlbiB3aXRoIC1kIG9wdGlvbgorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJ CSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1m b3JtYXQnID0+ICdjdXN0b20nLAorCQknLWQnID0+ICdkYnBxJywKKwldLAorCXFyL1xRRkFUQUw6 ICBkYXRhYmFzZSAiZGJwcSIgZG9lcyBub3QgZXhpc3RcRS8sCisJJ1doZW4gbm9uLWV4aXN0ZW50 IGRhdGFiYXNlIGlzIGdpdmVuIHdpdGggLWQgb3B0aW9uIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1w IG9mIHBnX2R1bXBhbGwnCispOworCisKKyRub2RlLT5zdG9wKCdmYXN0Jyk7CisKK2RvbmVfdGVz dGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAyNDE5NDU3MzRlYy4uMWE4OWVm OTRiZWMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC02MDAsNiArNjAwLDcgQEAgQ3Vz dG9tU2Nhbk1ldGhvZHMKIEN1c3RvbVNjYW5TdGF0ZQogQ3ljbGVDdHIKIERCU3RhdGUKK0RiT2lk TmFtZQogRENIQ2FjaGVFbnRyeQogREVBRExPQ0tfSU5GTwogREVDb3VudEl0ZW0KLS0gCjIuNTIu MAoK --000000000000fc91c4064b124734--