Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o8iWA-0000y4-MU for pgsql-hackers@arkaria.postgresql.org; Tue, 05 Jul 2022 13:23:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1o8iW9-0000VD-F0 for pgsql-hackers@arkaria.postgresql.org; Tue, 05 Jul 2022 13:23:05 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o8iW8-0000Td-RT for pgsql-hackers@lists.postgresql.org; Tue, 05 Jul 2022 13:23:05 +0000 Received: from mail-4322.protonmail.ch ([185.70.43.22]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o8iW2-0003PS-MI for pgsql-hackers@lists.postgresql.org; Tue, 05 Jul 2022 13:23:04 +0000 Date: Tue, 05 Jul 2022 13:22:47 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1657027372; x=1657286572; bh=WwRQfLhH6wZKbOoMykTdWRr7un+dqMHG2z7KnIJrcX4=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:Feedback-ID:From:To:Cc:Date:Subject:Reply-To: Feedback-ID:Message-ID; b=QWM3RIeIRK9ScKT6t9SmajD7KR5x+sHgz+69FSSb6ugjc8Gs3Q+pWoq+SsvXH60SZ vLabcyogqP4wDotcdISW+AkpdjYi4RaqO/3sBbTRqnJ821IWhOLLVbHr1QGoDS00um D9Av+CpWlnVPA7xyQclbolJQz83SDZOTjQYVc4lST+auNeuxn0cOpfX6bhiKgRrG+v FwyeTLm+aVYvEXdVjBCSNL0UWTaUCKqPFwFeF4viBh5UsH0lget/WObGHFeCwmUaJs DxPnYBdEc8oV3VTJme+onxubvlxzOSVMqGiqTLYbE9/wtxasDK1gGUUqAkxC32xbQr ZB3uWkjl/zCZg== To: Justin Pryzby From: gkokolatos@pm.me Cc: pgsql-hackers@lists.postgresql.org, Rachel Heaton , Michael Paquier Reply-To: gkokolatos@pm.me Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: <20220626155532.GA9311@telsasoft.com> References: <20220626155532.GA9311@telsasoft.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_5IGcN7m7GJLa221lhJtyGUwkm8rhXEBA0IBs9sbZM" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --b1_5IGcN7m7GJLa221lhJtyGUwkm8rhXEBA0IBs9sbZM Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Sunday, June 26th, 2022 at 5:55 PM, Justin Pryzby = wrote: > > Hi, > > Will you be able to send a rebased patch for the next CF ? Please find a rebased and heavily refactored patchset. Since parts of this patchset were already committed, I restarted numbering. I am not certain if this is the preferred way. This makes alignment with previous comments a bi= t harder > If you update for the review comments I sent in March, I'll plan to do an= other > round of review. I have updated for "some" of the comments. This is not an unwillingness to incorporate those specific comments. Simply this patchset had started to di= vert heavily already based on comments from Mr. Paquier who had already requeste= d for the APIs to be refactored to use function pointers. This is happening in 00= 02 of the patchset. 0001 of the patchset is using the new compression.h under com= mon. This patchset should be considered a late draft, as commentary, documentati= on, and some finer details are not yet finalized; because I am expecting the pr= oposed refactor to receive a wealth of comments. It would be helpful to understand= if the proposed direction is something worth to be worked upon, before moving = to the finer details. For what is worth, I am the sole author of the current patchset. Cheers, //Georgios > On Sat, Mar 26, 2022 at 11:21:56AM -0500, Justin Pryzby wrote: > > > LZ4F_HEADER_SIZE_MAX isn't defined in old LZ4. > > > > I ran into that on an ubuntu LTS, so I don't think it's so old that it > > shouldn't be handled more gracefully. LZ4 should either have an explici= t > > version check, or else shouldn't depend on that feature (or should defi= ne a > > safe fallback version if the library header doesn't define it). > > > > https://packages.ubuntu.com/liblz4-1 > > > > 0003: typo: of legacy =3D> or legacy > > > > There are a large number of ifdefs being added here - it'd be nice to m= inimize > > that. basebackup was organized to use separate files, which is one way. > > > > $ git grep -c 'ifdef .*LZ4' src/bin/pg_dump/compress_io.c > > src/bin/pg_dump/compress_io.c:19 > > > > In last year's CF entry, I had made a union within CompressorState. LZ4 > > doesn't need z_streamp (and ztsd will need ZSTD_outBuffer, ZSTD_inBuffe= r, > > ZSTD_CStream). > > > > 0002: I wonder if you're able to re-use any of the basebackup parsing s= tuff > > from commit ffd53659c. You're passing both the compression method and l= evel. > > I think there should be a structure which includes both. In the future,= that > > can also handle additional options. I hope to re-use these same things = for > > wal_compression=3Dmethod:level. > > > > You renamed this: > > > > |- COMPR_ALG_LIBZ > > |-} CompressionAlgorithm; > > |+ COMPRESSION_GZIP, > > |+} CompressionMethod; > > > > ..But I don't think that's an improvement. If you were to change it, it= should > > say something like PGDUMP_COMPRESS_ZLIB, since there are other compress= ion > > structs and typedefs. zlib is not idential to gzip, which uses a differ= ent > > header, so in WriteDataToArchive(), LIBZ is correct, and GZIP is incorr= ect. > > > > The cf* changes in pg_backup_archiver could be split out into a separat= e > > commit. It's strictly a code simplification - not just preparation for = more > > compression algorithms. The commit message should "See also: > > bf9aa490db24b2334b3595ee33653bf2fe39208c". > > > > The changes in 0002 for cfopen_write seem insufficient: > > |+ if (compressionMethod =3D=3D COMPRESSION_NONE) > > |+ fp =3D cfopen(path, mode, compressionMethod, 0); > > | else > > | { > > | #ifdef HAVE_LIBZ > > | char *fname; > > | > > | fname =3D psprintf("%s.gz", path); > > |- fp =3D cfopen(fname, mode, compression); > > |+ fp =3D cfopen(fname, mode, compressionMethod, compressionLevel); > > | free_keep_errno(fname); > > | #else > > > > The only difference between the LIBZ and uncompressed case is the file > > extension, and it'll be the only difference with LZ4 too. So I suggest = to > > first handle the file extension, and the rest of the code path is not > > conditional on the compression method. I don't think cfopen_write even = needs > > HAVE_LIBZ - can't you handle that in cfopen_internal() ? > > > > This patch rejects -Z0, which ought to be accepted: > > ./src/bin/pg_dump/pg_dump -h /tmp regression -Fc -Z0 |wc > > pg_dump: error: can only specify -Z/--compress [LEVEL] when method is s= et > > > > Your 0003 patch shouldn't reference LZ4: > > +#ifndef HAVE_LIBLZ4 > > + if (*compressionMethod =3D=3D COMPRESSION_LZ4) > > + supports_compression =3D false; > > +#endif > > > > The 0004 patch renames zlibOutSize to outsize - I think the patch serie= s should > > be constructed such as to minimize the size of the method-specific patc= hes. I > > say this anticipating also adding support for zstd. The preliminary pat= ches > > should have all the boring stuff. It would help for reviewing to keep t= he > > patches split up, or to enumerate all the boring things that are being = renamed > > (like change OutputContext to cfp, rename zlibOutSize, ...). > > > > 0004: The include should use and not "lz4.h" > > > > freebsd/cfbot is failing. > > > > I suggested off-list to add an 0099 patch to change LZ4 to the default,= to > > exercise it more on CI. > > > On Sat, Mar 26, 2022 at 01:33:36PM -0500, Justin Pryzby wrote: > > > On Sat, Mar 26, 2022 at 11:21:56AM -0500, Justin Pryzby wrote: > > > > > You're passing both the compression method and level. I think there s= hould > > > be a structure which includes both. In the future, that can also hand= le > > > additional options. > > > > I'm not sure if there's anything worth saving, but I did that last year= with > > 0003-Support-multiple-compression-algs-levels-opts.patch > > I sent a rebased copy off-list. > > https://www.postgresql.org/message-id/flat/20210104025321.GA9712@telsas= oft.com#ca1b9f9d3552c87fa874731cad9d8391 > > > > | fatal("not built with LZ4 support"); > > | fatal("not built with lz4 support"); > > > > Please use consistent capitalization of "lz4" - then the compiler can o= ptimize > > away duplicate strings. > > > > > 0004: The include should use and not "lz4.h" > > > > Also, use USE_LZ4 rather than HAVE_LIBLZ4, per 75eae0908. > > --b1_5IGcN7m7GJLa221lhJtyGUwkm8rhXEBA0IBs9sbZM Content-Type: text/x-patch; name=v7-0002-Introduce-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v7-0002-Introduce-Compressor-API-in-pg_dump.patch RnJvbSBiOGUxYjdmZTAyYTg5ODMyNmM4YWRhYjlkY2M2N2Q5ZTRjMjgxNjIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgNSBKdWwgMjAyMiAxMjozMzo1MiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjcg Mi8zXSBJbnRyb2R1Y2UgQ29tcHJlc3NvciBBUEkgaW4gcGdfZHVtcAoKVGhlIHB1cnBvc2Ugb2Yg dGhpcyBBUEkgaXMgdG8gYWxsb3cgZm9yIGVhc2llciBhZGRpdGlvbiBvZiBuZXcgY29tcHJlc3Np b24KbWV0aG9kcy4gQ29tcHJlc3NGaWxlSGFuZGxlIGlzIHN1YnN0aXR1dGluZyB0aGUgY2ZwKiBm YW1pbHkgb2YgZnVuY3Rpb25zIHVuZGVyIGEKc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGZv ciBvcGVuaW5nLCB3cml0aW5nLCBldGMuIFRoZSBpbXBsZW1lbnRvciBvZiBhIG5ldwpjb21wcmVz c2lvbiBtZXRob2QgaXMgbm93IGFibGUgdG8gInNpbXBseSIganVzdCBhZGQgdGhvc2UgZGVmaW5p dGlvbnMuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMSAr CiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jICAgICAgIHwgMzkwICsrKysrKysrKysr Kwogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCAgICAgICB8ICAgOSArCiBzcmMvYmlu L3BnX2R1bXAvY29tcHJlc3NfaW8uYyAgICAgICAgIHwgODE3ICsrKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCAgICAgICAgIHwgIDY5ICsrLQog c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jICB8ICA0MCArLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyAgICB8ICAyMyArLQogc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9kaXJlY3RvcnkuYyB8ICA4NSArLS0KIDggZmlsZXMgY2hhbmdlZCwgNzMwIGluc2Vy dGlvbnMoKyksIDcwNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfZ3ppcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2d6aXAuaAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSBi L3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCAyZjUyNGIwOWJmLi4yZDc3N2VjMjEzIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlCkBAIC0yMyw2ICsyMyw3IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwkKHRvcF9i dWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQogCiBPQkpT ID0gXAogCSQoV0lOMzJSRVMpIFwKKwljb21wcmVzc19nemlwLm8gXAogCWNvbXByZXNzX2lvLm8g XAogCWR1bXB1dGlscy5vIFwKIAlwYXJhbGxlbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19nemlwLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmJjNmQxYWJjNzcKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCkBAIC0wLDAgKzEsMzkw IEBACisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMu aCIKKworI2luY2x1ZGUgImNvbXByZXNzX2d6aXAuaCIKKworI2lmZGVmIEhBVkVfTElCWgorI2lu Y2x1ZGUgInpsaWIuaCIKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3NvciBB UEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVmIHN0cnVjdCBHemlwQ29t cHJlc3NvclN0YXRlCit7CisJaW50CQkJY29tcHJlc3Npb25MZXZlbDsKKwl6X3N0cmVhbXAJenA7 CisKKwl2b2lkCSAgICpvdXRidWY7CisJc2l6ZV90CQlvdXRzaXplOworfQkJCUd6aXBDb21wcmVz c29yU3RhdGU7CisKKy8qIFByaXZhdGUgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6aXAgY29tcHJl c3NlZCBkYXRhIEkvTyAqLworc3RhdGljIHZvaWQKK0RlZmxhdGVDb21wcmVzc29yR3ppcChBcmNo aXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywgYm9vbCBmbHVzaCkKK3sKKwlHemlw Q29tcHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJp dmF0ZTsKKwl6X3N0cmVhbXAJenAgPSBnemlwY3MtPnpwOworCXZvaWQJICAgKm91dCA9IGd6aXBj cy0+b3V0YnVmOworCWludAkJCXJlcyA9IFpfT0s7CisKKwl3aGlsZSAoZ3ppcGNzLT56cC0+YXZh aWxfaW4gIT0gMCB8fCBmbHVzaCkKKwl7CisJCXJlcyA9IGRlZmxhdGUoenAsIGZsdXNoID8gWl9G SU5JU0ggOiBaX05PX0ZMVVNIKTsKKwkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FUlJPUikKKwkJCXBn X2ZhdGFsKCJjb3VsZCBub3QgY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKKwkJaWYgKChm bHVzaCAmJiAoenAtPmF2YWlsX291dCA8IGd6aXBjcy0+b3V0c2l6ZSkpCisJCQl8fCAoenAtPmF2 YWlsX291dCA9PSAwKQorCQkJfHwgKHpwLT5hdmFpbF9pbiAhPSAwKQorCQkJKQorCQl7CisJCQkv KgorCQkJICogRXh0cmEgcGFyYW5vaWE6IGF2b2lkIHplcm8tbGVuZ3RoIGNodW5rcywgc2luY2Ug YSB6ZXJvIGxlbmd0aAorCQkJICogY2h1bmsgaXMgdGhlIEVPRiBtYXJrZXIgaW4gdGhlIGN1c3Rv bSBmb3JtYXQuIFRoaXMgc2hvdWxkIG5ldmVyCisJCQkgKiBoYXBwZW4gYnV0Li4uCisJCQkgKi8K KwkJCWlmICh6cC0+YXZhaWxfb3V0IDwgZ3ppcGNzLT5vdXRzaXplKQorCQkJeworCQkJCS8qCisJ CQkJICogQW55IHdyaXRlIGZ1bmN0aW9uIHNob3VsZCBkbyBpdHMgb3duIGVycm9yIGNoZWNraW5n IGJ1dCB0bworCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkbyBhIGNoZWNrIGhlcmUgYXMgd2VsbC4uLgor CQkJCSAqLworCQkJCXNpemVfdAkJbGVuID0gZ3ppcGNzLT5vdXRzaXplIC0genAtPmF2YWlsX291 dDsKKworCQkJCWNzLT53cml0ZUYoQUgsIChjaGFyICopIG91dCwgbGVuKTsKKwkJCX0KKwkJCXpw LT5uZXh0X291dCA9IG91dDsKKwkJCXpwLT5hdmFpbF9vdXQgPSBnemlwY3MtPm91dHNpemU7CisJ CX0KKworCQlpZiAocmVzID09IFpfU1RSRUFNX0VORCkKKwkJCWJyZWFrOworCX0KK30KKworc3Rh dGljIHZvaWQKK0VuZENvbXByZXNzb3JHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29y U3RhdGUgKmNzKQoreworCUd6aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjcyA9IChHemlwQ29tcHJl c3NvclN0YXRlICopIGNzLT5wcml2YXRlOworCXpfc3RyZWFtcAl6cDsKKworCWlmIChnemlwY3Mt PnpwKQorCXsKKwkJenAgPSBnemlwY3MtPnpwOworCQl6cC0+bmV4dF9pbiA9IE5VTEw7CisJCXpw LT5hdmFpbF9pbiA9IDA7CisKKwkJLyogRmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGZyb20gemxp YiBidWZmZXIgKi8KKwkJRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFILCBjcywgdHJ1ZSk7CisKKwkJ aWYgKGRlZmxhdGVFbmQoenApICE9IFpfT0spCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3Nl IGNvbXByZXNzaW9uIHN0cmVhbTogJXMiLCB6cC0+bXNnKTsKKworCQlwZ19mcmVlKGd6aXBjcy0+ b3V0YnVmKTsKKwkJcGdfZnJlZShnemlwY3MtPnpwKTsKKwl9CisKKwlwZ19mcmVlKGd6aXBjcyk7 CisJY3MtPnByaXZhdGUgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorV3JpdGVEYXRhVG9BcmNo aXZlR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJICAg Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCit7CisJR3ppcENvbXByZXNzb3JTdGF0ZSAq Z3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGU7CisJel9zdHJlYW1w CXpwOworCisJaWYgKCFnemlwY3MtPnpwKQorCXsKKwkJenAgPSBnemlwY3MtPnpwID0gKHpfc3Ry ZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOworCQl6cC0+emFsbG9jID0gWl9OVUxM OworCQl6cC0+emZyZWUgPSBaX05VTEw7CisJCXpwLT5vcGFxdWUgPSBaX05VTEw7CisKKwkJLyoK KwkJICogb3V0c2l6ZSBpcyB0aGUgYnVmZmVyIHNpemUgd2UgdGVsbCB6bGliIGl0IGNhbiBvdXRw dXQgdG8uICBXZQorCQkgKiBhY3R1YWxseSBhbGxvY2F0ZSBvbmUgZXh0cmEgYnl0ZSBiZWNhdXNl IHNvbWUgcm91dGluZXMgd2FudCB0bworCQkgKiBhcHBlbmQgYSB0cmFpbGluZyB6ZXJvIGJ5dGUg dG8gdGhlIHpsaWIgb3V0cHV0LgorCQkgKi8KKwkJZ3ppcGNzLT5vdXRidWYgPSBwZ19tYWxsb2Mo WkxJQl9PVVRfU0laRSArIDEpOworCQlnemlwY3MtPm91dHNpemUgPSBaTElCX09VVF9TSVpFOwor CisJCWlmIChkZWZsYXRlSW5pdCh6cCwgZ3ppcGNzLT5jb21wcmVzc2lvbkxldmVsKSAhPSBaX09L KQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJhcnk6 ICVzIiwgenAtPm1zZyk7CisKKwkJLyogSnVzdCBiZSBwYXJhbm9pZCAtIG1heWJlIEVuZCBpcyBj YWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8KKwkJenAtPm5leHRfb3V0ID0gZ3pp cGNzLT5vdXRidWY7CisJCXpwLT5hdmFpbF9vdXQgPSBnemlwY3MtPm91dHNpemU7CisJfQorCisJ Z3ppcGNzLT56cC0+bmV4dF9pbiA9ICh2b2lkICopIHVuY29uc3RpZnkodm9pZCAqLCBkYXRhKTsK KwlnemlwY3MtPnpwLT5hdmFpbF9pbiA9IGRMZW47CisJRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFI LCBjcywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZUd6aXAo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJel9zdHJlYW1wCXpw OworCWNoYXIJICAgKm91dDsKKwlpbnQJCQlyZXMgPSBaX09LOworCXNpemVfdAkJY250OworCWNo YXIJICAgKmJ1ZjsKKwlzaXplX3QJCWJ1ZmxlbjsKKworCXpwID0gKHpfc3RyZWFtcCkgcGdfbWFs bG9jKHNpemVvZih6X3N0cmVhbSkpOworCXpwLT56YWxsb2MgPSBaX05VTEw7CisJenAtPnpmcmVl ID0gWl9OVUxMOworCXpwLT5vcGFxdWUgPSBaX05VTEw7CisKKwlidWYgPSBwZ19tYWxsb2MoWkxJ Ql9JTl9TSVpFKTsKKwlidWZsZW4gPSBaTElCX0lOX1NJWkU7CisKKwlvdXQgPSBwZ19tYWxsb2Mo WkxJQl9PVVRfU0laRSArIDEpOworCisJaWYgKGluZmxhdGVJbml0KHpwKSAhPSBaX09LKQorCQlw Z19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFyeTogJXMiLAor CQkJCSB6cC0+bXNnKTsKKworCS8qIG5vIG1pbmltYWwgY2h1bmsgc2l6ZSBmb3IgemxpYiAqLwor CXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQl6cC0+ bmV4dF9pbiA9ICh2b2lkICopIGJ1ZjsKKwkJenAtPmF2YWlsX2luID0gY250OworCisJCXdoaWxl ICh6cC0+YXZhaWxfaW4gPiAwKQorCQl7CisJCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7 CisJCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKworCQkJcmVzID0gaW5mbGF0ZSh6 cCwgMCk7CisJCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKKwkJCQlw Z19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKKworCQkJ b3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCQlhaHdyaXRlKG91 dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKKwkJfQorCX0KKworCXpw LT5uZXh0X2luID0gTlVMTDsKKwl6cC0+YXZhaWxfaW4gPSAwOworCXdoaWxlIChyZXMgIT0gWl9T VFJFQU1fRU5EKQorCXsKKwkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OworCQl6cC0+YXZh aWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKwkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7CisJCWlmIChy ZXMgIT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQorCQkJcGdfZmF0YWwoImNvdWxkIG5v dCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisKKwkJb3V0W1pMSUJfT1VUX1NJWkUg LSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCWFod3JpdGUob3V0LCAxLCBaTElCX09VVF9TSVpF IC0genAtPmF2YWlsX291dCwgQUgpOworCX0KKworCWlmIChpbmZsYXRlRW5kKHpwKSAhPSBaX09L KQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwg enAtPm1zZyk7CisKKwlmcmVlKGJ1Zik7CisJZnJlZShvdXQpOworCWZyZWUoenApOworfQorCisv KiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6aXAgY29tcHJlc3NlZCBkYXRhIEkvTyAq Lwordm9pZAorSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JTdGF0ZSAqY3MsIGludCBjb21w cmVzc2lvbkxldmVsKQoreworCUd6aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjczsKKworCWNzLT5y ZWFkRGF0YSA9IFJlYWREYXRhRnJvbUFyY2hpdmVHemlwOworCWNzLT53cml0ZURhdGEgPSBXcml0 ZURhdGFUb0FyY2hpdmVHemlwOworCWNzLT5lbmQgPSBFbmRDb21wcmVzc29yR3ppcDsKKworCWd6 aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxvYzAoc2l6ZW9mKEd6aXBDb21w cmVzc29yU3RhdGUpKTsKKwlnemlwY3MtPmNvbXByZXNzaW9uTGV2ZWwgPSBjb21wcmVzc2lvbkxl dmVsOworCisJY3MtPnByaXZhdGUgPSBnemlwY3M7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKwordHlwZWRlZiBzdHJ1Y3QgR3ppcERhdGEKK3sKKwlnekZpbGUJCWZwOworCWludAkJCWNv bXByZXNzaW9uTGV2ZWw7Cit9CQkJR3ppcERhdGE7CisKK3N0YXRpYyBzaXplX3QKK0d6aXBfcmVh ZCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJ R3ppcERhdGEgICAqZ2QgPSAoR3ppcERhdGEgKikgQ0ZILT5wcml2YXRlOworCXNpemVfdAkJcmV0 OworCisJcmV0ID0gZ3pyZWFkKGdkLT5mcCwgcHRyLCBzaXplKTsKKwlpZiAocmV0ICE9IHNpemUg JiYgIWd6ZW9mKGdkLT5mcCkpCisJeworCQlpbnQJCQllcnJudW07CisJCWNvbnN0IGNoYXIgKmVy cm1zZyA9IGd6ZXJyb3IoZ2QtPmZwLCAmZXJybnVtKTsKKworCQlwZ19mYXRhbCgiY291bGQgbm90 IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIGVycm51bSA9PSBaX0VSUk5PID8gc3Ry ZXJyb3IoZXJybm8pIDogZXJybXNnKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg c2l6ZV90CitHemlwX3dyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNz RmlsZUhhbmRsZSAqIENGSCkKK3sKKwlHemlwRGF0YSAgICpnZCA9IChHemlwRGF0YSAqKSBDRkgt PnByaXZhdGU7CisKKwlyZXR1cm4gZ3p3cml0ZShnZC0+ZnAsIHB0ciwgc2l6ZSk7Cit9CisKK3N0 YXRpYyBpbnQKK0d6aXBfZ2V0YyhDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJR3ppcERh dGEgICAqZ2QgPSAoR3ppcERhdGEgKikgQ0ZILT5wcml2YXRlOworCWludAkJCXJldDsKKworCWVy cm5vID0gMDsKKwlyZXQgPSBnemdldGMoZ2QtPmZwKTsKKwlpZiAocmV0ID09IEVPRikKKwl7CisJ CWlmICghZ3plb2YoZ2QtPmZwKSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlu cHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqCitHemlwX2dldHMoY2hhciAqcHRyLCBpbnQgc2l6 ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQoreworCUd6aXBEYXRhICAgKmdkID0gKEd6aXBE YXRhICopIENGSC0+cHJpdmF0ZTsKKworCXJldHVybiBnemdldHMoZ2QtPmZwLCBwdHIsIHNpemUp OworfQorCitzdGF0aWMgaW50CitHemlwX2Nsb3NlKENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkK K3sKKwlHemlwRGF0YSAgICpnZCA9IChHemlwRGF0YSAqKSBDRkgtPnByaXZhdGU7CisJaW50CQkJ c2F2ZV9lcnJubzsKKwlpbnQJCQlyZXQ7CisKKwlDRkgtPnByaXZhdGUgPSBOVUxMOworCisJcmV0 ID0gZ3pjbG9zZShnZC0+ZnApOworCisJc2F2ZV9lcnJubyA9IGVycm5vOworCWZyZWUoZ2QpOwor CWVycm5vID0gc2F2ZV9lcnJubzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK0d6 aXBfZW9mKENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKK3sKKwlHemlwRGF0YSAgICpnZCA9IChH emlwRGF0YSAqKSBDRkgtPnByaXZhdGU7CisKKwlyZXR1cm4gZ3plb2YoZ2QtPmZwKTsKK30KKwor c3RhdGljIGNvbnN0IGNoYXIgKgorR3ppcF9nZXRfZXJyb3IoQ29tcHJlc3NGaWxlSGFuZGxlICog Q0ZIKQoreworCUd6aXBEYXRhICAgKmdkID0gKEd6aXBEYXRhICopIENGSC0+cHJpdmF0ZTsKKwlj b25zdCBjaGFyICplcnJtc2c7CisJaW50CQkJZXJybnVtOworCisJZXJybXNnID0gZ3plcnJvcihn ZC0+ZnAsICZlcnJudW0pOworCWlmIChlcnJudW0gPT0gWl9FUlJOTykKKwkJZXJybXNnID0gc3Ry ZXJyb3IoZXJybm8pOworCisJcmV0dXJuIGVycm1zZzsKK30KKworc3RhdGljIGludAorR3ppcF9v cGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NG aWxlSGFuZGxlICogQ0ZIKQoreworCUd6aXBEYXRhICAgKmdkID0gKEd6aXBEYXRhICopIENGSC0+ cHJpdmF0ZTsKKwljaGFyCQltb2RlX2NvbXByZXNzaW9uWzMyXTsKKworCWlmIChnZC0+Y29tcHJl c3Npb25MZXZlbCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pCisJeworCQkvKgorCQkgKiB1c2Vy IGhhcyBzcGVjaWZpZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZSBp dAorCQkgKi8KKwkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwgc2l6ZW9mKG1vZGVfY29tcHJl c3Npb24pLCAiJXMlZCIsCisJCQkJIG1vZGUsIGdkLT5jb21wcmVzc2lvbkxldmVsKTsKKwl9CisJ ZWxzZQorCQlzdHJjcHkobW9kZV9jb21wcmVzc2lvbiwgbW9kZSk7CisKKwlpZiAoZmQgPj0gMCkK KwkJZ2QtPmZwID0gZ3pkb3BlbihkdXAoZmQpLCBtb2RlX2NvbXByZXNzaW9uKTsKKwllbHNlCisJ CWdkLT5mcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKKworCWlmIChnZC0+ZnAg PT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorR3pp cF9vcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNz RmlsZUhhbmRsZSAqIENGSCkKK3sKKwljaGFyCSAgICpmbmFtZTsKKwlpbnQJCQlyZXQ7CisJaW50 CQkJc2F2ZV9lcnJubzsKKworCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7CisJcmV0 ID0gQ0ZILT5vcGVuKGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKTsKKworCXNhdmVfZXJybm8gPSBlcnJu bzsKKwlwZ19mcmVlKGZuYW1lKTsKKwllcnJubyA9IHNhdmVfZXJybm87CisKKwlyZXR1cm4gcmV0 OworfQorCit2b2lkCitJbml0Q29tcHJlc3NHemlwKENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCwg aW50IGNvbXByZXNzaW9uTGV2ZWwpCit7CisJR3ppcERhdGEgICAqZ2Q7CisKKwlDRkgtPm9wZW4g PSBHemlwX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlID0gR3ppcF9vcGVuX3dyaXRlOworCUNGSC0+ cmVhZCA9IEd6aXBfcmVhZDsKKwlDRkgtPndyaXRlID0gR3ppcF93cml0ZTsKKwlDRkgtPmdldHMg PSBHemlwX2dldHM7CisJQ0ZILT5nZXRjID0gR3ppcF9nZXRjOworCUNGSC0+Y2xvc2UgPSBHemlw X2Nsb3NlOworCUNGSC0+ZW9mID0gR3ppcF9lb2Y7CisJQ0ZILT5nZXRfZXJyb3IgPSBHemlwX2dl dF9lcnJvcjsKKworCWdkID0gcGdfbWFsbG9jMChzaXplb2YoR3ppcERhdGEpKTsKKwlnZC0+Y29t cHJlc3Npb25MZXZlbCA9IGNvbXByZXNzaW9uTGV2ZWw7CisKKwlDRkgtPnByaXZhdGUgPSBnZDsK K30KKyNlbHNlCQkJCQkJCS8qIEhBVkVfTElCWiAqLwordm9pZAorSW5pdENvbXByZXNzb3JHemlw KENvbXByZXNzb3JTdGF0ZSAqY3MsIGludCBjb21wcmVzc2lvbkxldmVsKQoreworCXBnX2ZhdGFs KCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKK30KKwordm9pZAorSW5pdENvbXByZXNz R3ppcChDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgsIGludCBjb21wcmVzc2lvbkxldmVsKQorewor CXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKK30KKyNlbmRpZgkJCQkJ CQkvKiBIQVZFX0xJQlogKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19n emlwLmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLmFiMDM2MmMxZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfQ09N UFJFU1NfR1pJUF9IXworI2RlZmluZSBfQ09NUFJFU1NfR1pJUF9IXworCisjaW5jbHVkZSAiY29t cHJlc3NfaW8uaCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JT dGF0ZSAqY3MsIGludCBjb21wcmVzc2lvbkxldmVsKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVz c0d6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZILCBpbnQgY29tcHJlc3Npb25MZXZlbCk7CisK KyNlbmRpZgkJCQkJCQkvKiBfQ09NUFJFU1NfR1pJUF9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpp bmRleCAxNDYzOTYxNzJiLi4xOTQ4ZWUzZDU3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTEs OSArNTEsMTIgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLworI2luY2x1ZGUgPHN5cy9z dGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAog I2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgogI2lu Y2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg LTYxLDExMyArNjQsNzMgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLS8qIHR5 cGVkZWYgYXBwZWFycyBpbiBjb21wcmVzc19pby5oICovCi1zdHJ1Y3QgQ29tcHJlc3NvclN0YXRl CisvKiBQcml2YXRlIHJvdXRpbmVzIHRoYXQgc3VwcG9ydCB1bmNvbXByZXNzZWQgZGF0YSBJL08g Ki8KK3N0YXRpYyB2b2lkCitSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NvclN0YXRlICpjcykKIHsKLQlwZ19jb21wcmVzc19hbGdvcml0aG0gY29tcHJl c3NfYWxnb3JpdGhtOwotCVdyaXRlRnVuYwl3cml0ZUY7CisJc2l6ZV90CQljbnQ7CisJY2hhcgkg ICAqYnVmOworCXNpemVfdAkJYnVmbGVuOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0Jel9zdHJlYW1w CXpwOwotCWNoYXIJICAgKnpsaWJPdXQ7Ci0Jc2l6ZV90CQl6bGliT3V0U2l6ZTsKLSNlbmRpZgot fTsKKwlidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSk7CisJYnVmbGVuID0gWkxJQl9PVVRf U0laRTsKIAotLyogUm91dGluZXMgdGhhdCBzdXBwb3J0IHpsaWIgY29tcHJlc3NlZCBkYXRhIEkv TyAqLwotI2lmZGVmIEhBVkVfTElCWgotc3RhdGljIHZvaWQgSW5pdENvbXByZXNzb3JabGliKENv bXByZXNzb3JTdGF0ZSAqY3MsIGludCBsZXZlbCk7Ci1zdGF0aWMgdm9pZCBEZWZsYXRlQ29tcHJl c3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCQkJ CSAgYm9vbCBmbHVzaCk7Ci1zdGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBcmNo aXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpOwotc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9B cmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJ CQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pOwotc3RhdGljIHZvaWQgRW5kQ29t cHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOwotI2Vu ZGlmCisJd2hpbGUgKChjbnQgPSBjcy0+cmVhZEYoQUgsICZidWYsICZidWZsZW4pKSkKKwl7CisJ CWFod3JpdGUoYnVmLCAxLCBjbnQsIEFIKTsKKwl9CiAKLS8qIFJvdXRpbmVzIHRoYXQgc3VwcG9y dCB1bmNvbXByZXNzZWQgZGF0YSBJL08gKi8KLXN0YXRpYyB2b2lkIFJlYWREYXRhRnJvbUFyY2hp dmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7Ci1zdGF0aWMgdm9pZCBX cml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzLAotCQkJCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExlbik7CisJZnJlZShi dWYpOworfQorCitzdGF0aWMgdm9pZAorV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwg c2l6ZV90IGRMZW4pCit7CisJY3MtPndyaXRlRihBSCwgZGF0YSwgZExlbik7Cit9CisKK3N0YXRp YyB2b2lkCitFbmRDb21wcmVzc29yTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcykKK3sKKwkvKiBubyBvcCAqLworfQorCitzdGF0aWMgdm9pZAorSW5pdENvbXByZXNz b3JOb25lKENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJY3MtPnJlYWREYXRhID0gUmVhZERhdGFG cm9tQXJjaGl2ZU5vbmU7CisJY3MtPndyaXRlRGF0YSA9IFdyaXRlRGF0YVRvQXJjaGl2ZU5vbmU7 CisJY3MtPmVuZCA9IEVuZENvbXByZXNzb3JOb25lOworfQogCiAvKiBQdWJsaWMgaW50ZXJmYWNl IHJvdXRpbmVzICovCiAKIC8qIEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IgKi8KIENvbXByZXNz b3JTdGF0ZSAqCiBBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc19zcGVjLAotCQkJCSAgIFdyaXRlRnVuYyB3cml0ZUYpCisJCQkJICAgUmVh ZEZ1bmMgcmVhZEYsIFdyaXRlRnVuYyB3cml0ZUYpCiB7CiAJQ29tcHJlc3NvclN0YXRlICpjczsK IAotI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPT0gUEdf Q09NUFJFU1NJT05fR1pJUCkKLQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9y dCIpOwotI2VuZGlmCi0KIAljcyA9IChDb21wcmVzc29yU3RhdGUgKikgcGdfbWFsbG9jMChzaXpl b2YoQ29tcHJlc3NvclN0YXRlKSk7CisJY3MtPnJlYWRGID0gcmVhZEY7CiAJY3MtPndyaXRlRiA9 IHdyaXRlRjsKLQljcy0+Y29tcHJlc3NfYWxnb3JpdGhtID0gY29tcHJlc3Nfc3BlYy5hbGdvcml0 aG07Ci0KLQkvKgotCSAqIFBlcmZvcm0gY29tcHJlc3Npb24gYWxnb3JpdGhtIHNwZWNpZmljIGlu aXRpYWxpemF0aW9uLgotCSAqLwotI2lmZGVmIEhBVkVfTElCWgotCWlmIChjcy0+Y29tcHJlc3Nf YWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCUluaXRDb21wcmVzc29yWmxpYihj cywgY29tcHJlc3Nfc3BlYy5sZXZlbCk7Ci0jZW5kaWYKIAotCXJldHVybiBjczsKLX0KLQotLyoK LSAqIFJlYWQgYWxsIGNvbXByZXNzZWQgZGF0YSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gKHZpYSBy ZWFkRikgYW5kIHByaW50IGl0Ci0gKiBvdXQgd2l0aCBhaHdyaXRlKCkuCi0gKi8KLXZvaWQKLVJl YWREYXRhRnJvbUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Nfc3BlYywKLQkJCQkJUmVhZEZ1bmMgcmVhZEYpCi17CiAJc3dpdGNoIChj b21wcmVzc19zcGVjLmFsZ29yaXRobSkKIAl7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToK LQkJCVJlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFILCByZWFkRik7CisJCQlJbml0Q29tcHJlc3Nv ck5vbmUoY3MpOwogCQkJYnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRl ZiBIQVZFX0xJQloKLQkJCVJlYWREYXRhRnJvbUFyY2hpdmVabGliKEFILCByZWFkRik7Ci0jZWxz ZQotCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwotI2VuZGlmCisJ CQlJbml0Q29tcHJlc3Nvckd6aXAoY3MsIGNvbXByZXNzX3NwZWMubGV2ZWwpOwogCQkJYnJlYWs7 CiAJCWRlZmF1bHQ6CiAJCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsK IAkJCWJyZWFrOwogCX0KLX0KIAotLyoKLSAqIENvbXByZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRo ZSBvdXRwdXQgc3RyZWFtICh2aWEgd3JpdGVGKS4KLSAqLwotdm9pZAotV3JpdGVEYXRhVG9BcmNo aXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCSAgIGNvbnN0 IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQotewotCXN3aXRjaCAoY3MtPmNvbXByZXNzX2FsZ29y aXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRlZiBIQVZFX0xJQloK LQkJCVdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQUgsIGNzLCBkYXRhLCBkTGVuKTsKLSNlbHNlCi0J CQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7Ci0jZW5kaWYKLQkJCWJy ZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlXcml0ZURhdGFUb0FyY2hpdmVO b25lKEFILCBjcywgZGF0YSwgZExlbik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBnX2Zh dGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOwotCQkJYnJlYWs7Ci0JfQorCXJldHVy biBjczsKIH0KIAogLyoKQEAgLTE3NiwyNDMgKzEzOSwyOCBAQCBXcml0ZURhdGFUb0FyY2hpdmUo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCiB2b2lkCiBFbmRDb21wcmVz c29yKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQogewotCXN3aXRjaCAo Y3MtPmNvbXByZXNzX2FsZ29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoK LSNpZmRlZiBIQVZFX0xJQloKLQkJCUVuZENvbXByZXNzb3JabGliKEFILCBjcyk7Ci0jZWxzZQot CQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwotI2VuZGlmCi0JCQli cmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJZnJlZShjcyk7Ci0JCQlicmVh azsKLQotCQlkZWZhdWx0OgotCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9k Iik7Ci0JCQlicmVhazsKLQl9Ci19Ci0KLS8qIFByaXZhdGUgcm91dGluZXMsIHNwZWNpZmljIHRv IGVhY2ggY29tcHJlc3Npb24gbWV0aG9kLiAqLwotCi0jaWZkZWYgSEFWRV9MSUJaCi0vKgotICog RnVuY3Rpb25zIGZvciB6bGliIGNvbXByZXNzZWQgb3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lk Ci1Jbml0Q29tcHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKQotewot CXpfc3RyZWFtcAl6cDsKLQotCXpwID0gY3MtPnpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNp emVvZih6X3N0cmVhbSkpOwotCXpwLT56YWxsb2MgPSBaX05VTEw7Ci0JenAtPnpmcmVlID0gWl9O VUxMOwotCXpwLT5vcGFxdWUgPSBaX05VTEw7Ci0KLQkvKgotCSAqIHpsaWJPdXRTaXplIGlzIHRo ZSBidWZmZXIgc2l6ZSB3ZSB0ZWxsIHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdlCi0JICogYWN0 dWFsbHkgYWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUgYmVjYXVzZSBzb21lIHJvdXRpbmVzIHdhbnQg dG8gYXBwZW5kIGEKLQkgKiB0cmFpbGluZyB6ZXJvIGJ5dGUgdG8gdGhlIHpsaWIgb3V0cHV0Lgot CSAqLwotCWNzLT56bGliT3V0ID0gKGNoYXIgKikgcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAx KTsKLQljcy0+emxpYk91dFNpemUgPSBaTElCX09VVF9TSVpFOwotCi0JaWYgKGRlZmxhdGVJbml0 KHpwLCBsZXZlbCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNv bXByZXNzaW9uIGxpYnJhcnk6ICVzIiwKLQkJCQkgenAtPm1zZyk7Ci0KLQkvKiBKdXN0IGJlIHBh cmFub2lkIC0gbWF5YmUgRW5kIGlzIGNhbGxlZCBhZnRlciBTdGFydCwgd2l0aCBubyBXcml0ZSAq LwotCXpwLT5uZXh0X291dCA9ICh2b2lkICopIGNzLT56bGliT3V0OwotCXpwLT5hdmFpbF9vdXQg PSBjcy0+emxpYk91dFNpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1FbmRDb21wcmVzc29yWmxpYihB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKLXsKLQl6X3N0cmVhbXAJenAg PSBjcy0+enA7Ci0KLQl6cC0+bmV4dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQot CS8qIEZsdXNoIGFueSByZW1haW5pbmcgZGF0YSBmcm9tIHpsaWIgYnVmZmVyICovCi0JRGVmbGF0 ZUNvbXByZXNzb3JabGliKEFILCBjcywgdHJ1ZSk7Ci0KLQlpZiAoZGVmbGF0ZUVuZCh6cCkgIT0g Wl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBzdHJlYW06ICVz IiwgenAtPm1zZyk7Ci0KLQlmcmVlKGNzLT56bGliT3V0KTsKLQlmcmVlKGNzLT56cCk7CisJY3Mt PmVuZChBSCwgY3MpOworCXBnX2ZyZWUoY3MpOwogfQogCi1zdGF0aWMgdm9pZAotRGVmbGF0ZUNv bXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLCBib29s IGZsdXNoKQotewotCXpfc3RyZWFtcAl6cCA9IGNzLT56cDsKLQljaGFyCSAgICpvdXQgPSBjcy0+ emxpYk91dDsKLQlpbnQJCQlyZXMgPSBaX09LOwotCi0Jd2hpbGUgKGNzLT56cC0+YXZhaWxfaW4g IT0gMCB8fCBmbHVzaCkKLQl7Ci0JCXJlcyA9IGRlZmxhdGUoenAsIGZsdXNoID8gWl9GSU5JU0gg OiBaX05PX0ZMVVNIKTsKLQkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FUlJPUikKLQkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKLQkJaWYgKChmbHVzaCAm JiAoenAtPmF2YWlsX291dCA8IGNzLT56bGliT3V0U2l6ZSkpCi0JCQl8fCAoenAtPmF2YWlsX291 dCA9PSAwKQotCQkJfHwgKHpwLT5hdmFpbF9pbiAhPSAwKQotCQkJKQotCQl7Ci0JCQkvKgotCQkJ ICogRXh0cmEgcGFyYW5vaWE6IGF2b2lkIHplcm8tbGVuZ3RoIGNodW5rcywgc2luY2UgYSB6ZXJv IGxlbmd0aAotCQkJICogY2h1bmsgaXMgdGhlIEVPRiBtYXJrZXIgaW4gdGhlIGN1c3RvbSBmb3Jt YXQuIFRoaXMgc2hvdWxkIG5ldmVyCi0JCQkgKiBoYXBwZW4gYnV0Li4uCi0JCQkgKi8KLQkJCWlm ICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRTaXplKQotCQkJewotCQkJCS8qCi0JCQkJICog QW55IHdyaXRlIGZ1bmN0aW9uIHNob3VsZCBkbyBpdHMgb3duIGVycm9yIGNoZWNraW5nIGJ1dCB0 bwotCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkbyBhIGNoZWNrIGhlcmUgYXMgd2VsbC4uLgotCQkJCSAq LwotCQkJCXNpemVfdAkJbGVuID0gY3MtPnpsaWJPdXRTaXplIC0genAtPmF2YWlsX291dDsKLQot CQkJCWNzLT53cml0ZUYoQUgsIG91dCwgbGVuKTsKLQkJCX0KLQkJCXpwLT5uZXh0X291dCA9ICh2 b2lkICopIG91dDsKLQkJCXpwLT5hdmFpbF9vdXQgPSBjcy0+emxpYk91dFNpemU7Ci0JCX0KLQot CQlpZiAocmVzID09IFpfU1RSRUFNX0VORCkKLQkJCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZv aWQKLVdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKQotewotCWNz LT56cC0+bmV4dF9pbiA9ICh2b2lkICopIHVuY29uc3RpZnkoY2hhciAqLCBkYXRhKTsKLQljcy0+ enAtPmF2YWlsX2luID0gZExlbjsKLQlEZWZsYXRlQ29tcHJlc3NvclpsaWIoQUgsIGNzLCBmYWxz ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBcmNoaXZlSGFu ZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpCi17Ci0Jel9zdHJlYW1wCXpwOwotCWNoYXIJICAgKm91 dDsKLQlpbnQJCQlyZXMgPSBaX09LOwotCXNpemVfdAkJY250OwotCWNoYXIJICAgKmJ1ZjsKLQlz aXplX3QJCWJ1ZmxlbjsKLQotCXpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0 cmVhbSkpOwotCXpwLT56YWxsb2MgPSBaX05VTEw7Ci0JenAtPnpmcmVlID0gWl9OVUxMOwotCXpw LT5vcGFxdWUgPSBaX05VTEw7Ci0KLQlidWYgPSBwZ19tYWxsb2MoWkxJQl9JTl9TSVpFKTsKLQli dWZsZW4gPSBaTElCX0lOX1NJWkU7Ci0KLQlvdXQgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSAr IDEpOwotCi0JaWYgKGluZmxhdGVJbml0KHpwKSAhPSBaX09LKQotCQlwZ19mYXRhbCgiY291bGQg bm90IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFyeTogJXMiLAotCQkJCSB6cC0+bXNnKTsK LQotCS8qIG5vIG1pbmltYWwgY2h1bmsgc2l6ZSBmb3IgemxpYiAqLwotCXdoaWxlICgoY250ID0g cmVhZEYoQUgsICZidWYsICZidWZsZW4pKSkKLQl7Ci0JCXpwLT5uZXh0X2luID0gKHZvaWQgKikg YnVmOwotCQl6cC0+YXZhaWxfaW4gPSBjbnQ7Ci0KLQkJd2hpbGUgKHpwLT5hdmFpbF9pbiA+IDAp Ci0JCXsKLQkJCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJCXpwLT5hdmFpbF9vdXQg PSBaTElCX09VVF9TSVpFOwotCi0JCQlyZXMgPSBpbmZsYXRlKHpwLCAwKTsKLQkJCWlmIChyZXMg IT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg dW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCi0JCQlvdXRbWkxJQl9PVVRfU0laRSAt IHpwLT5hdmFpbF9vdXRdID0gJ1wwJzsKLQkJCWFod3JpdGUob3V0LCAxLCBaTElCX09VVF9TSVpF IC0genAtPmF2YWlsX291dCwgQUgpOwotCQl9Ci0JfQotCi0JenAtPm5leHRfaW4gPSBOVUxMOwot CXpwLT5hdmFpbF9pbiA9IDA7Ci0Jd2hpbGUgKHJlcyAhPSBaX1NUUkVBTV9FTkQpCi0JewotCQl6 cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7Ci0JCXpwLT5hdmFpbF9vdXQgPSBaTElCX09VVF9T SVpFOwotCQlyZXMgPSBpbmZsYXRlKHpwLCAwKTsKLQkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAh PSBaX1NUUkVBTV9FTkQpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0YTog JXMiLCB6cC0+bXNnKTsKLQotCQlvdXRbWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXRdID0g J1wwJzsKLQkJYWh3cml0ZShvdXQsIDEsIFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBB SCk7Ci0JfQotCi0JaWYgKGluZmxhdGVFbmQoenApICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgY2xvc2UgY29tcHJlc3Npb24gbGlicmFyeTogJXMiLCB6cC0+bXNnKTsKLQotCWZyZWUo YnVmKTsKLQlmcmVlKG91dCk7Ci0JZnJlZSh6cCk7Ci19Ci0jZW5kaWYJCQkJCQkJLyogSEFWRV9M SUJaICovCi0KLQotLyoKLSAqIEZ1bmN0aW9ucyBmb3IgdW5jb21wcmVzc2VkIG91dHB1dC4KLSAq LwotCi1zdGF0aWMgdm9pZAotUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAq QUgsIFJlYWRGdW5jIHJlYWRGKQotewotCXNpemVfdAkJY250OwotCWNoYXIJICAgKmJ1ZjsKLQlz aXplX3QJCWJ1ZmxlbjsKLQotCWJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFKTsKLQlidWZs ZW4gPSBaTElCX09VVF9TSVpFOwotCi0Jd2hpbGUgKChjbnQgPSByZWFkRihBSCwgJmJ1ZiwgJmJ1 ZmxlbikpKQotCXsKLQkJYWh3cml0ZShidWYsIDEsIGNudCwgQUgpOwotCX0KLQotCWZyZWUoYnVm KTsKLX0KLQotc3RhdGljIHZvaWQKLVdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRs ZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNp emVfdCBkTGVuKQotewotCWNzLT53cml0ZUYoQUgsIGRhdGEsIGRMZW4pOwotfQotCi0KIC8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ29tcHJlc3NlZCBzdHJlYW0gQVBJCiAgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqLwogCi0vKgotICogY2ZwIHJlcHJlc2VudHMgYW4gb3BlbiBzdHJl YW0sIHdyYXBwaW5nIHRoZSB1bmRlcmx5aW5nIEZJTEUgb3IgZ3pGaWxlCi0gKiBwb2ludGVyLiBU aGlzIGlzIG9wYXF1ZSB0byB0aGUgY2FsbGVycy4KLSAqLwotc3RydWN0IGNmcAorc3RhdGljIGlu dAoraGFzU3VmZml4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpzdWZmaXgpCiB7 Ci0JcGdfY29tcHJlc3NfYWxnb3JpdGhtIGNvbXByZXNzX2FsZ29yaXRobTsKLQl2b2lkCSAgICpm cDsKLX07CisJaW50CQkJZmlsZW5hbWVsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOworCWludAkJCXN1 ZmZpeGxlbiA9IHN0cmxlbihzdWZmaXgpOwogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50 CWhhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3VmZml4KTsKLSNl bmRpZgorCWlmIChmaWxlbmFtZWxlbiA8IHN1ZmZpeGxlbikKKwkJcmV0dXJuIDA7CisKKwlyZXR1 cm4gbWVtY21wKCZmaWxlbmFtZVtmaWxlbmFtZWxlbiAtIHN1ZmZpeGxlbl0sCisJCQkJICBzdWZm aXgsCisJCQkJICBzdWZmaXhsZW4pID09IDA7Cit9CiAKIC8qIGZyZWUoKSB3aXRob3V0IGNoYW5n aW5nIGVycm5vOyB1c2VmdWwgaW4gc2V2ZXJhbCBwbGFjZXMgYmVsb3cgKi8KIHN0YXRpYyB2b2lk CkBAIC00MjUsMzkyICsxNzMsMjE5IEBAIGZyZWVfa2VlcF9lcnJubyh2b2lkICpwKQogfQogCiAv KgotICogT3BlbiBhIGZpbGUgZm9yIHJlYWRpbmcuICdwYXRoJyBpcyB0aGUgZmlsZSB0byBvcGVu LCBhbmQgJ21vZGUnIHNob3VsZAotICogYmUgZWl0aGVyICJyIiBvciAicmIiLgotICoKLSAqIElm IHRoZSBmaWxlIGF0ICdwYXRoJyBkb2VzIG5vdCBleGlzdCwgd2UgYXBwZW5kIHRoZSAiLmd6IiBz dWZmaXggKGlmICdwYXRoJwotICogZG9lc24ndCBhbHJlYWR5IGhhdmUgaXQpIGFuZCB0cnkgYWdh aW4uIFNvIGlmIHlvdSBwYXNzICJmb28iIGFzICdwYXRoJywKLSAqIHRoaXMgd2lsbCBvcGVuIGVp dGhlciAiZm9vIiBvciAiZm9vLmd6Ii4KLSAqCi0gKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3 aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCisgKiBDb21wcmVzc2lvbiBOb25lIGltcGxlbWVu dGF0aW9uCiAgKi8KLWNmcCAqCi1jZm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBj aGFyICptb2RlKQorc3RhdGljIHNpemVfdAorX3JlYWQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwg Q29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQogewotCWNmcAkJICAgKmZwOwotCXBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYyA9IHswfTsKKwlGSUxFCSAgICpmcCA9IChGSUxF ICopIENGSC0+cHJpdmF0ZTsKKwlzaXplX3QJCXJldDsKIAotCWNvbXByZXNzX3NwZWMuYWxnb3Jp dGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoaGFzU3Vm Zml4KHBhdGgsICIuZ3oiKSkKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Nfc3Bl Yyk7Ci0JZWxzZQotI2VuZGlmCi0JewotCQljb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NP TVBSRVNTSU9OX05PTkU7Ci0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNvbXByZXNzX3NwZWMp OwotI2lmZGVmIEhBVkVfTElCWgotCQlpZiAoZnAgPT0gTlVMTCkKLQkJewotCQkJY2hhcgkgICAq Zm5hbWU7Ci0KLQkJCWNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJ UDsKLQkJCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7Ci0JCQlmcCA9IGNmb3Blbihm bmFtZSwgbW9kZSwgY29tcHJlc3Nfc3BlYyk7Ci0JCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOwot CQl9Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIGZwOwotfQorCWlmIChzaXplID09IDApCisJCXJldHVy biAwOwogCi0vKgotICogT3BlbiBhIGZpbGUgZm9yIHdyaXRpbmcuICdwYXRoJyBpbmRpY2F0ZXMg dGhlIHBhdGggbmFtZSwgYW5kICdtb2RlJyBtdXN0Ci0gKiBiZSBhIGZpbGVtb2RlIGFzIGFjY2Vw dGVkIGJ5IGZvcGVuKCkgYW5kIGd6b3BlbigpIHRoYXQgaW5kaWNhdGVzIHdyaXRpbmcKLSAqICgi dyIsICJ3YiIsICJhIiwgb3IgImFiIikuCi0gKgotICogSWYgJ2NvbXByZXNzX3NwZWMuYWxnb3Jp dGhtJyBpcyBHWklQLCBhIGd6aXAgY29tcHJlc3NlZCBzdHJlYW0gaXMgb3BlbmVkLAotICogYW5k ICdjb21wcmVzc19zcGVjLmxldmVsJyB1c2VkLiBUaGUgIi5neiIgc3VmZml4IGlzIGF1dG9tYXRp Y2FsbHkgYWRkZWQgdG8KLSAqICdwYXRoJyBpbiB0aGF0IGNhc2UuCi0gKgotICogT24gZmFpbHVy ZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgotICovCi1jZnAgKgot Y2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQotewotCWNmcAkJICAg KmZwOworCXJldCA9IGZyZWFkKHB0ciwgMSwgc2l6ZSwgZnApOworCWlmIChyZXQgIT0gc2l6ZSAm JiAhZmVvZihmcCkpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6 ICVzIiwKKwkJCQkgc3RyZXJyb3IoZXJybm8pKTsKIAotCWlmIChjb21wcmVzc19zcGVjLmFsZ29y aXRobSA9PSBQR19DT01QUkVTU0lPTl9OT05FKQotCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBj b21wcmVzc19zcGVjKTsKLQllbHNlCi0JewotI2lmZGVmIEhBVkVfTElCWgotCQljaGFyCSAgICpm bmFtZTsKLQotCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwotCQlmcCA9IGNmb3Bl bihmbmFtZSwgbW9kZSwgY29tcHJlc3Nfc3BlYyk7Ci0JCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7 Ci0jZWxzZQotCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7Ci0JCWZw ID0gTlVMTDsJCQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwotI2VuZGlmCi0JfQotCXJldHVy biBmcDsKKwlyZXR1cm4gcmV0OwogfQogCi0vKgotICogVGhpcyBpcyB0aGUgd29ya2hvcnNlIGZv ciBjZm9wZW4oKSBvciBjZmRvcGVuKCkuIEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9yCi0gKiBhc3Nv Y2lhdGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAn bW9kZScuIFRoZQotICogZGVzY3JpcHRvciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBpcyB0aGUgY2Fs bGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZG8gc28uCi0gKiBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5 IHRoYXQgdGhlICdjb21wcmVzc19hbGdvcml0aG0nIGlzIHN1cHBvcnRlZCBieSB0aGUKLSAqIGN1 cnJlbnQgYnVpbGQuCi0gKgotICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJv ciBjb2RlIGluIGVycm5vLgotICovCi1zdGF0aWMgY2ZwICoKLWNmb3Blbl9pbnRlcm5hbChjb25z dCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJcGdfY29tcHJlc3Nf YWxnb3JpdGhtIGNvbXByZXNzX2FsZ29yaXRobSwgaW50IGNvbXByZXNzaW9uTGV2ZWwpCitzdGF0 aWMgc2l6ZV90Citfd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NG aWxlSGFuZGxlICogQ0ZIKQogewotCWNmcAkJICAgKmZwID0gcGdfbWFsbG9jKHNpemVvZihjZnAp KTsKLQotCWZwLT5jb21wcmVzc19hbGdvcml0aG0gPSBjb21wcmVzc19hbGdvcml0aG07Ci0KLQlz d2l0Y2ggKGNvbXByZXNzX2FsZ29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9O RToKLQkJCWlmIChmZCA+PSAwKQotCQkJCWZwLT5mcCA9IGZkb3BlbihmZCwgbW9kZSk7Ci0JCQll bHNlCi0JCQkJZnAtPmZwID0gZm9wZW4ocGF0aCwgbW9kZSk7Ci0JCQlpZiAoZnAtPmZwID09IE5V TEwpCi0JCQl7Ci0JCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCQlmcCA9IE5VTEw7Ci0JCQl9 Ci0KLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9M SUJaCi0JCQlpZiAoY29tcHJlc3Npb25MZXZlbCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pCi0J CQl7Ci0JCQkJLyoKLQkJCQkgKiB1c2VyIGhhcyBzcGVjaWZpZWQgYSBjb21wcmVzc2lvbiBsZXZl bCwgc28gdGVsbCB6bGliIHRvIHVzZQotCQkJCSAqIGl0Ci0JCQkJICovCi0JCQkJY2hhcgkJbW9k ZV9jb21wcmVzc2lvblszMl07Ci0KLQkJCQlzbnByaW50Zihtb2RlX2NvbXByZXNzaW9uLCBzaXpl b2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKLQkJCQkJCSBtb2RlLCBjb21wcmVzc2lvbkxl dmVsKTsKLQkJCQlpZiAoZmQgPj0gMCkKLQkJCQkJZnAtPmZwID0gZ3pkb3BlbihmZCwgbW9kZV9j b21wcmVzc2lvbik7Ci0JCQkJZWxzZQotCQkJCQlmcC0+ZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9j b21wcmVzc2lvbik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogZG9uJ3Qgc3BlY2lmeSBh IGxldmVsLCBqdXN0IHVzZSB0aGUgemxpYiBkZWZhdWx0ICovCi0JCQkJaWYgKGZkID49IDApCi0J CQkJCWZwLT5mcCA9IGd6ZG9wZW4oZmQsIG1vZGUpOwotCQkJCWVsc2UKLQkJCQkJZnAtPmZwID0g Z3pvcGVuKHBhdGgsIG1vZGUpOwotCQkJfQotCi0JCQlpZiAoZnAtPmZwID09IE5VTEwpCi0JCQl7 Ci0JCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCQlmcCA9IE5VTEw7Ci0JCQl9Ci0jZWxzZQot CQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwotI2VuZGlmCi0JCQli cmVhazsKLQkJZGVmYXVsdDoKLQkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhv ZCIpOwotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGZwOworCXJldHVybiBmd3JpdGUocHRyLCAx LCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGUpOwogfQogCi1jZnAgKgotY2ZvcGVuKGNvbnN0 IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JICAgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQorc3RhdGljIGNvbnN0IGNoYXIgKgorX2dldF9lcnJv cihDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCiB7Ci0JcmV0dXJuIGNmb3Blbl9pbnRlcm5hbChw YXRoLCAtMSwgbW9kZSwKLQkJCQkJCSAgIGNvbXByZXNzX3NwZWMuYWxnb3JpdGhtLAotCQkJCQkJ ICAgY29tcHJlc3Nfc3BlYy5sZXZlbCk7CisJcmV0dXJuIHN0cmVycm9yKGVycm5vKTsKIH0KIAot Y2ZwICoKLWNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQljb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpCitzdGF0aWMgY2hhciAqCitfZ2V0cyhj aGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCiB7Ci0JcmV0dXJu IGNmb3Blbl9pbnRlcm5hbChOVUxMLCBmZCwgbW9kZSwKLQkJCQkJCSAgIGNvbXByZXNzX3NwZWMu YWxnb3JpdGhtLAotCQkJCQkJICAgY29tcHJlc3Nfc3BlYy5sZXZlbCk7CisJcmV0dXJuIGZnZXRz KHB0ciwgc2l6ZSwgKEZJTEUgKikgQ0ZILT5wcml2YXRlKTsKIH0KIAotaW50Ci1jZnJlYWQodm9p ZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKK3N0YXRpYyBpbnQKK19nZXRjKENvbXByZXNzRmls ZUhhbmRsZSAqIENGSCkKIHsKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZTsK IAlpbnQJCQlyZXQ7CiAKLQlpZiAoc2l6ZSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCXN3aXRjaCAo ZnAtPmNvbXByZXNzX2FsZ29yaXRobSkKKwlyZXQgPSBmZ2V0YyhmcCk7CisJaWYgKHJldCA9PSBF T0YpCiAJewotCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlyZXQgPSBmcmVhZChwdHIs IDEsIHNpemUsIGZwLT5mcCk7Ci0JCQlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2YoZnAtPmZwKSkK LQkJCQlSRUFEX0VSUk9SX0VYSVQoZnAtPmZwKTsKLQotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09N UFJFU1NJT05fR1pJUDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCXJldCA9IGd6cmVhZChmcC0+ZnAs IHB0ciwgc2l6ZSk7Ci0JCQlpZiAocmV0ICE9IHNpemUgJiYgIWd6ZW9mKGZwLT5mcCkpCi0JCQl7 Ci0JCQkJaW50CQkJZXJybnVtOwotCQkJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAt PmZwLCAmZXJybnVtKTsKLQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0 IGZpbGU6ICVzIiwKLQkJCQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6 IGVycm1zZyk7Ci0JCQl9Ci0jZWxzZQotCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIg c3VwcG9ydCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcGdfZmF0YWwo ImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7Ci0JCQlicmVhazsKKwkJaWYgKCFmZW9mKGZw KSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3Ry ZXJyb3IoZXJybm8pKTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20g aW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQK LWNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKK3N0YXRpYyBpbnQK K19jbG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCiB7CisJRklMRQkgICAqZnAgPSAoRklM RSAqKSBDRkgtPnByaXZhdGU7CiAJaW50CQkJcmV0ID0gMDsKIAotCXN3aXRjaCAoZnAtPmNvbXBy ZXNzX2FsZ29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9 IGZ3cml0ZShwdHIsIDEsIHNpemUsIGZwLT5mcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01Q UkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJcmV0ID0gZ3p3cml0ZShmcC0+ZnAs IHB0ciwgc2l6ZSk7Ci0jZWxzZQotCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3Vw cG9ydCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBnX2ZhdGFsKCJpbnZh bGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOwotCQkJYnJlYWs7Ci0JfQorCUNGSC0+cHJpdmF0ZSA9 IE5VTEw7CisKKwlpZiAoZnApCisJCXJldCA9IGZjbG9zZShmcCk7CiAKIAlyZXR1cm4gcmV0Owog fQogCi1pbnQKLWNmZ2V0YyhjZnAgKmZwKQorc3RhdGljIGludAorX2VvZihDb21wcmVzc0ZpbGVI YW5kbGUgKiBDRkgpCiB7Ci0JaW50CQkJcmV0OworCXJldHVybiBmZW9mKChGSUxFICopIENGSC0+ cHJpdmF0ZSk7Cit9CiAKLQlzd2l0Y2ggKGZwLT5jb21wcmVzc19hbGdvcml0aG0pCi0JewotCQlj YXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlyZXQgPSBmZ2V0YyhmcC0+ZnApOwotCQkJaWYg KHJldCA9PSBFT0YpCi0JCQkJUkVBRF9FUlJPUl9FWElUKGZwLT5mcCk7CitzdGF0aWMgaW50Citf b3Blbihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNz RmlsZUhhbmRsZSAqIENGSCkKK3sKKwlBc3NlcnQoQ0ZILT5wcml2YXRlID09IE5VTEwpOwogCi0J CQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgot CQkJcmV0ID0gZ3pnZXRjKChnekZpbGUpIGZwLT5mcCk7Ci0JCQlpZiAocmV0ID09IEVPRikKLQkJ CXsKLQkJCQlpZiAoIWd6ZW9mKGZwLT5mcCkpCi0JCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVh ZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCQllbHNlCi0JCQkJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7 Ci0JCQl9Ci0jZWxzZQotCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIp OwotI2VuZGlmCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNv bXByZXNzaW9uIG1ldGhvZCIpOwotCQkJYnJlYWs7Ci0JfQorCWlmIChmZCA+PSAwKQorCQlDRkgt PnByaXZhdGUgPSBmZG9wZW4oZHVwKGZkKSwgbW9kZSk7CisJZWxzZQorCQlDRkgtPnByaXZhdGUg PSBmb3BlbihwYXRoLCBtb2RlKTsKIAotCXJldHVybiByZXQ7CisJaWYgKENGSC0+cHJpdmF0ZSA9 PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOwogfQogCi1jaGFyICoKLWNmZ2V0cyhj ZnAgKmZwLCBjaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgaW50Citfb3Blbl93cml0ZShjb25z dCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgp CiB7Ci0JY2hhcgkgICAqcmV0OworCUFzc2VydChDRkgtPnByaXZhdGUgPT0gTlVMTCk7CiAKLQlz d2l0Y2ggKGZwLT5jb21wcmVzc19hbGdvcml0aG0pCi0JewotCQljYXNlIFBHX0NPTVBSRVNTSU9O X05PTkU6Ci0JCQlyZXQgPSBmZ2V0cyhidWYsIGxlbiwgZnAtPmZwKTsKKwlDRkgtPnByaXZhdGUg PSBmb3BlbihwYXRoLCBtb2RlKTsKKwlpZiAoQ0ZILT5wcml2YXRlID09IE5VTEwpCisJCXJldHVy biAxOwogCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhB VkVfTElCWgotCQkJcmV0ID0gZ3pnZXRzKGZwLT5mcCwgYnVmLCBsZW4pOwotI2Vsc2UKLQkJCXBn X2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKLSNlbmRpZgotCQkJYnJlYWs7 Ci0JCWRlZmF1bHQ6Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsK LQkJCWJyZWFrOwotCX0KKwlyZXR1cm4gMDsKK30KIAotCXJldHVybiByZXQ7CitzdGF0aWMgdm9p ZAorSW5pdENvbXByZXNzTm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJQ0ZILT5v cGVuID0gX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlID0gX29wZW5fd3JpdGU7CisJQ0ZILT5yZWFk ID0gX3JlYWQ7CisJQ0ZILT53cml0ZSA9IF93cml0ZTsKKwlDRkgtPmdldHMgPSBfZ2V0czsKKwlD RkgtPmdldGMgPSBfZ2V0YzsKKwlDRkgtPmNsb3NlID0gX2Nsb3NlOworCUNGSC0+ZW9mID0gX2Vv ZjsKKwlDRkgtPmdldF9lcnJvciA9IF9nZXRfZXJyb3I7CisKKwlDRkgtPnByaXZhdGUgPSBOVUxM OwogfQogCi1pbnQKLWNmY2xvc2UoY2ZwICpmcCkKKy8qCisgKiBQdWJsaWMgaW50ZXJmYWNlCisg Ki8KK0NvbXByZXNzRmlsZUhhbmRsZSAqCitJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IHBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYykKIHsKLQlpbnQJCQlyZXQ7CisJ Q29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAKLQlpZiAoZnAgPT0gTlVMTCkKLQl7Ci0JCWVycm5v ID0gRUJBREY7Ci0JCXJldHVybiBFT0Y7Ci0JfQorCUNGSCA9IHBnX21hbGxvYzAoc2l6ZW9mKENv bXByZXNzRmlsZUhhbmRsZSkpOwogCi0Jc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtKQor CXN3aXRjaCAoY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0pCiAJewogCQljYXNlIFBHX0NPTVBSRVNT SU9OX05PTkU6Ci0JCQlyZXQgPSBmY2xvc2UoZnAtPmZwKTsKLQkJCWZwLT5mcCA9IE5VTEw7Ci0K KwkJCUluaXRDb21wcmVzc05vbmUoQ0ZIKTsKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNT SU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQgPSBnemNsb3NlKGZwLT5mcCk7Ci0J CQlmcC0+ZnAgPSBOVUxMOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGli IHN1cHBvcnQiKTsKLSNlbmRpZgorCQkJSW5pdENvbXByZXNzR3ppcChDRkgsIGNvbXByZXNzX3Nw ZWMubGV2ZWwpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwZ19mYXRhbCgiaW52YWxpZCBj b21wcmVzc2lvbiBtZXRob2QiKTsKIAkJCWJyZWFrOwogCX0KIAotCWZyZWVfa2VlcF9lcnJubyhm cCk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBDRkg7CiB9CiAKLWludAotY2Zlb2YoY2ZwICpm cCkKKy8qCisgKiBPcGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3BhdGgnIGlzIHRoZSBmaWxlIHRv IG9wZW4sIGFuZCAnbW9kZScgc2hvdWxkCisgKiBiZSBlaXRoZXIgInIiIG9yICJyYiIuCisgKgor ICogSWYgdGhlIGZpbGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBlbmQgdGhlICIu Z3oiIHN1ZmZpeCAoaWYKKyAqICdwYXRoJyBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdCkgYW5kIHRy eSBhZ2Fpbi4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMKKyAqICdwYXRoJywgdGhpcyB3aWxsIG9w ZW4gZWl0aGVyICJmb28iIG9yICJmb28uZ3oiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4KKyAqCisg KiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCisg KgorICovCitDb21wcmVzc0ZpbGVIYW5kbGUgKgorSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFu ZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiB7Ci0JaW50CQkJcmV0Owor CUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFy CSAgICpmbmFtZTsKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMgPSB7 MH07CiAKLQlzd2l0Y2ggKGZwLT5jb21wcmVzc19hbGdvcml0aG0pCi0JewotCQljYXNlIFBHX0NP TVBSRVNTSU9OX05PTkU6Ci0JCQlyZXQgPSBmZW9mKGZwLT5mcCk7CisJY29tcHJlc3Nfc3BlYy5h bGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwogCi0JCQlicmVhazsKLQkJY2FzZSBQR19D T01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJcmV0ID0gZ3plb2YoZnAtPmZw KTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7Ci0j ZW5kaWYKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJl c3Npb24gbWV0aG9kIik7Ci0JCQlicmVhazsKLQl9CisJQXNzZXJ0KHN0cmNtcChtb2RlLCAiciIp ID09IDAgfHwgc3RyY21wKG1vZGUsICJyYiIpID09IDApOwogCi0JcmV0dXJuIHJldDsKLX0KKwlm bmFtZSA9IHN0cmR1cChwYXRoKTsKIAotY29uc3QgY2hhciAqCi1nZXRfY2ZwX2Vycm9yKGNmcCAq ZnApCi17Ci0JaWYgKGZwLT5jb21wcmVzc19hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJ UCkKKwlpZiAoaGFzU3VmZml4KGZuYW1lLCAiLmd6IikpCisJCWNvbXByZXNzX3NwZWMuYWxnb3Jp dGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKKwllbHNlCiAJeworCQlib29sCQlleGlzdHM7CisK KwkJZXhpc3RzID0gKHN0YXQocGF0aCwgJnN0KSA9PSAwKTsKKwkJLyogYXZvaWQgdW51c2VkIHdh cm5pbmcgaWYgaXQgaXMgbm90IGJ1aWxkIHdpdGggY29tcHJlc3Npb24gKi8KKwkJaWYgKGV4aXN0 cykKKwkJCWNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKICNp ZmRlZiBIQVZFX0xJQloKLQkJaW50CQkJZXJybnVtOwotCQljb25zdCBjaGFyICplcnJtc2cgPSBn emVycm9yKGZwLT5mcCwgJmVycm51bSk7CisJCWlmICghZXhpc3RzKQorCQl7CisJCQlmcmVlX2tl ZXBfZXJybm8oZm5hbWUpOworCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKKwkJ CWV4aXN0cyA9IChzdGF0KGZuYW1lLCAmc3QpID09IDApOwogCi0JCWlmIChlcnJudW0gIT0gWl9F UlJOTykKLQkJCXJldHVybiBlcnJtc2c7Ci0jZWxzZQotCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdp dGggemxpYiBzdXBwb3J0Iik7CisJCQlpZiAoZXhpc3RzKQorCQkJCWNvbXByZXNzX3NwZWMuYWxn b3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKKwkJfQogI2VuZGlmCiAJfQogCi0JcmV0dXJu IHN0cmVycm9yKGVycm5vKTsKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNz X3NwZWMpOworCWlmIChDRkgtPm9wZW4oZm5hbWUsIC0xLCBtb2RlLCBDRkgpKQorCXsKKwkJZnJl ZV9rZWVwX2Vycm5vKENGSCk7CisJCUNGSCA9IE5VTEw7CisJfQorCWZyZWVfa2VlcF9lcnJubyhm bmFtZSk7CisKKwlyZXR1cm4gQ0ZIOwogfQogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50 Ci1oYXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK2lu dAorRGVzdHJveUNvbXByZXNzRmlsZUhhbmRsZShDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCiB7 Ci0JaW50CQkJZmlsZW5hbWVsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOwotCWludAkJCXN1ZmZpeGxl biA9IHN0cmxlbihzdWZmaXgpOworCWludAkJCXJldCA9IDA7CiAKLQlpZiAoZmlsZW5hbWVsZW4g PCBzdWZmaXhsZW4pCi0JCXJldHVybiAwOworCWlmIChDRkgtPnByaXZhdGUpCisJCXJldCA9IENG SC0+Y2xvc2UoQ0ZIKTsKIAotCXJldHVybiBtZW1jbXAoJmZpbGVuYW1lW2ZpbGVuYW1lbGVuIC0g c3VmZml4bGVuXSwKLQkJCQkgIHN1ZmZpeCwKLQkJCQkgIHN1ZmZpeGxlbikgPT0gMDsKLX0KKwlm cmVlX2tlZXBfZXJybm8oQ0ZIKTsKIAotI2VuZGlmCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmgKaW5kZXggMmI0MmYwMzBhOC4uZWMxMzM3NGE1MiAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lv LmgKQEAgLTUyLDM0ICs1Miw2MSBAQCB0eXBlZGVmIHZvaWQgKCpXcml0ZUZ1bmMpIChBcmNoaXZl SGFuZGxlICpBSCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKICAqLwogdHlwZWRlZiBz aXplX3QgKCpSZWFkRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjaGFyICoqYnVmLCBzaXplX3Qg KmJ1Zmxlbik7CiAKLS8qIHN0cnVjdCBkZWZpbml0aW9uIGFwcGVhcnMgaW4gY29tcHJlc3NfaW8u YyAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29tcHJlc3NvclN0YXRlIENvbXByZXNzb3JTdGF0ZTsKK3N0 cnVjdCBDb21wcmVzc29yU3RhdGUKK3sKKwkvKgorCSAqIFJlYWQgYWxsIGNvbXByZXNzZWQgZGF0 YSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gKHZpYSByZWFkRikgYW5kIHByaW50IGl0CisJICogb3V0 IHdpdGggYWh3cml0ZSgpLgorCSAqLworCXZvaWQJCSgqcmVhZERhdGEpIChBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CisKKwkvKgorCSAqIENvbXByZXNzIGFuZCB3cml0 ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtICh2aWEgd3JpdGVGKS4KKwkgKi8KKwl2b2lkCQko KndyaXRlRGF0YSkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJ CQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pOworCXZvaWQJCSgqZW5kKSAoQXJj aGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOworCisJUmVhZEZ1bmMJcmVhZEY7 CisJV3JpdGVGdW5jCXdyaXRlRjsKKworCXZvaWQJICAgKnByaXZhdGU7Cit9OwogCiBleHRlcm4g Q29tcHJlc3NvclN0YXRlICpBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc19zcGVjLAorCQkJCQkJCQkJCSAgIFJlYWRGdW5jIHJlYWRGLAog CQkJCQkJCQkJCSAgIFdyaXRlRnVuYyB3cml0ZUYpOwotZXh0ZXJuIHZvaWQgUmVhZERhdGFGcm9t QXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwKLQkJCQkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc19zcGVjLAotCQkJCQkJCQlSZWFkRnVuYyByZWFkRik7Ci1leHRl cm4gdm9pZCBXcml0ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsCi0JCQkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pOwogZXh0 ZXJuIHZvaWQgRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcyk7CiAKKy8qCisgKiBDb21wcmVzcyBGaWxlIEhhbmRsZQorICovCit0eXBlZGVmIHN0cnVj dCBDb21wcmVzc0ZpbGVIYW5kbGUgQ29tcHJlc3NGaWxlSGFuZGxlOworCitzdHJ1Y3QgQ29tcHJl c3NGaWxlSGFuZGxlCit7CisJaW50CQkJKCpvcGVuKSAoY29uc3QgY2hhciAqcGF0aCwgaW50IGZk LCBjb25zdCBjaGFyICptb2RlLAorCQkJCQkJIENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCk7CisJ aW50CQkJKCpvcGVuX3dyaXRlKSAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwK KwkJCQkJCQkgICBDb21wcmVzc0ZpbGVIYW5kbGUgKiBjeHQpOworCXNpemVfdAkJKCpyZWFkKSAo dm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKTsKKwlzaXpl X3QJCSgqd3JpdGUpIChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAorCQkJCQkJICBzdHJ1 Y3QgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCWNoYXIJICAgKigqZ2V0cykgKGNoYXIgKnMs IGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpOworCWludAkJCSgqZ2V0YykgKENv bXByZXNzRmlsZUhhbmRsZSAqIENGSCk7CisJaW50CQkJKCplb2YpIChDb21wcmVzc0ZpbGVIYW5k bGUgKiBDRkgpOworCWludAkJCSgqY2xvc2UpIChDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpOwor CWNvbnN0IGNoYXIgKigqZ2V0X2Vycm9yKSAoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKTsKKwor CXZvaWQJICAgKnByaXZhdGU7Cit9OworCiAKLXR5cGVkZWYgc3RydWN0IGNmcCBjZnA7CitleHRl cm4gQ29tcHJlc3NGaWxlSGFuZGxlICogSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb25zdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpOwogCi1leHRlcm4gY2ZwICpjZm9w ZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQkgICBjb25zdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpOwotZXh0ZXJuIGNmcCAqY2Zkb3Bl bihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Nfc3BlYyk7Ci1leHRlcm4gY2ZwICpjZm9wZW5fcmVhZChjb25zdCBjaGFyICpw YXRoLCBjb25zdCBjaGFyICptb2RlKTsKLWV4dGVybiBjZnAgKmNmb3Blbl93cml0ZShjb25zdCBj aGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCQkJCQkJIGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYyk7Ci1leHRlcm4gaW50CWNmcmVhZCh2b2lkICpwdHIs IGludCBzaXplLCBjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2Z3cml0ZShjb25zdCB2b2lkICpwdHIs IGludCBzaXplLCBjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2ZnZXRjKGNmcCAqZnApOwotZXh0ZXJu IGNoYXIgKmNmZ2V0cyhjZnAgKmZwLCBjaGFyICpidWYsIGludCBsZW4pOwotZXh0ZXJuIGludAlj ZmNsb3NlKGNmcCAqZnApOwotZXh0ZXJuIGludAljZmVvZihjZnAgKmZwKTsKLWV4dGVybiBjb25z dCBjaGFyICpnZXRfY2ZwX2Vycm9yKGNmcCAqZnApOworZXh0ZXJuIENvbXByZXNzRmlsZUhhbmRs ZSAqIEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRoLAorCQkJ CQkJCQkJCQkJCQkgICBjb25zdCBjaGFyICptb2RlKTsKIAorZXh0ZXJuIGludAlEZXN0cm95Q29t cHJlc3NGaWxlSGFuZGxlKENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCk7CiAjZW5kaWYKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCBmYTg0YzMxZWNiLi4xODY1MTBjMjM1IDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC05NSw4ICs5NSw4IEBAIHN0YXRp YyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBU aW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRpbSk7 CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZp bGVuYW1lLAogCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nf c3BlYyk7Ci1zdGF0aWMgY2ZwICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKLXN0YXRp YyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQp Oworc3RhdGljIENvbXByZXNzRmlsZUhhbmRsZSAqIFNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgpOworc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJl c3NGaWxlSGFuZGxlICogc2F2ZWRPdXRwdXQpOwogCiBzdGF0aWMgaW50CXJlc3RvcmVfdG9jX2Vu dHJ5KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIGJvb2wgaXNfcGFyYWxsZWwpOwog c3RhdGljIHZvaWQgcmVzdG9yZV90b2NfZW50cmllc19wcmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFI LApAQCAtMjcyLDcgKzI3Miw3IEBAIENsb3NlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAKIAkvKiBD bG9zZSB0aGUgb3V0cHV0ICovCiAJZXJybm8gPSAwOwotCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsK KwlyZXMgPSBEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKEFILT5PRik7CiAKIAlpZiAocmVzICE9 IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0z NTQsNyArMzU0LDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCVJlc3RvcmVPcHRp b25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwogCWJvb2wJCXBhcmFsbGVsX21vZGU7CiAJVG9j RW50cnkgICAqdGU7Ci0JY2ZwCQkgICAqc2F2OworCUNvbXByZXNzRmlsZUhhbmRsZSAqc2F2Owog CiAJQUgtPnN0YWdlID0gU1RBR0VfSU5JVElBTElaSU5HOwogCkBAIC0xMTE5LDcgKzExMTksNyBA QCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCVRvY0VudHJ5ICAgKnRlOwogCXBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gb3V0X2NvbXByZXNzX3NwZWM7CiAJdGVTZWN0aW9uCWN1clNl Y3Rpb247Ci0JY2ZwCQkgICAqc2F2OworCUNvbXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCWNvbnN0 IGNoYXIgKmZtdE5hbWU7CiAJY2hhcgkJc3RhbXBfc3RyWzY0XTsKIApAQCAtMTQ5NSw2ICsxNDk1 LDcgQEAgc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hh ciAqZmlsZW5hbWUsCiAJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c19zcGVjKQogeworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7 CiAJaW50CQkJZm4gPSAtMTsKIApAQCAtMTUxNywzMyArMTUxOCwzMiBAQCBTZXRPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCWVsc2UKIAkJbW9kZSA9IFBH X0JJTkFSWV9XOwogCi0JaWYgKGZuID49IDApCi0JCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZuKSwg bW9kZSwgY29tcHJlc3Nfc3BlYyk7Ci0JZWxzZQotCQlBSC0+T0YgPSBjZm9wZW4oZmlsZW5hbWUs IG1vZGUsIGNvbXByZXNzX3NwZWMpOworCUNGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29t cHJlc3Nfc3BlYyk7CiAKLQlpZiAoIUFILT5PRikKKwlpZiAoQ0ZILT5vcGVuKGZpbGVuYW1lLCBm biwgbW9kZSwgQ0ZIKSkKIAl7CiAJCWlmIChmaWxlbmFtZSkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCQllbHNlCiAJCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGU6ICVtIik7CiAJfQorCisJQUgtPk9G ID0gQ0ZIOwogfQogCi1zdGF0aWMgY2ZwICoKK3N0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKgog U2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlyZXR1cm4gKGNmcCAqKSBBSC0+T0Y7 CisJcmV0dXJuIChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9GOwogfQogCiBzdGF0aWMgdm9p ZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCkKK1Jl c3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqIHNhdmVk T3V0cHV0KQogewogCWludAkJCXJlczsKIAogCWVycm5vID0gMDsKLQlyZXMgPSBjZmNsb3NlKEFI LT5PRik7CisJcmVzID0gRGVzdHJveUNvbXByZXNzRmlsZUhhbmRsZShBSC0+T0YpOwogCiAJaWYg KHJlcyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIp OwpAQCAtMTY4Miw3ICsxNjgyLDExIEBAIGFod3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qg c2l6ZSwgc2l6ZV90IG5tZW1iLCBBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlIGlmIChSZXN0b3Jp bmdUb0RCKEFIKSkKIAkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+ cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7CiAJZWxzZQotCQlieXRl c193cml0dGVuID0gY2Z3cml0ZShwdHIsIHNpemUgKiBubWVtYiwgQUgtPk9GKTsKKwl7CisJCUNv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gKENvbXByZXNzRmlsZUhhbmRsZSAqKSBBSC0+T0Y7CisK KwkJYnl0ZXNfd3JpdHRlbiA9IENGSC0+d3JpdGUocHRyLCBzaXplICogbm1lbWIsIENGSCk7CisJ fQogCiAJaWYgKGJ5dGVzX3dyaXR0ZW4gIT0gc2l6ZSAqIG5tZW1iKQogCQlXUklURV9FUlJPUl9F WElUOwpAQCAtMjE3MSw2ICsyMTc1LDcgQEAgX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNwZWMs IGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCQkgU2V0dXBXb3JrZXJQdHJUeXBlIHNldHVwV29y a2VyUHRyKQogewogCUFyY2hpdmVIYW5kbGUgKkFIOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI OwogCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gb3V0X2NvbXByZXNzX3NwZWMgPSB7MH07CiAK IAlwZ19sb2dfZGVidWcoImFsbG9jYXRpbmcgQUggZm9yICVzLCBmb3JtYXQgJWQiLApAQCAtMjIy Niw3ICsyMjMxLDEwIEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNo aXZlRm9ybWF0IGZtdCwKIAogCS8qIE9wZW4gc3Rkb3V0IHdpdGggbm8gY29tcHJlc3Npb24gZm9y IEFIIG91dHB1dCBoYW5kbGUgKi8KIAlvdXRfY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19D T01QUkVTU0lPTl9OT05FOwotCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZpbGVubyhzdGRvdXQpKSwg UEdfQklOQVJZX0EsIG91dF9jb21wcmVzc19zcGVjKTsKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxl SGFuZGxlKG91dF9jb21wcmVzc19zcGVjKTsKKwlpZiAoQ0ZILT5vcGVuKE5VTEwsIGZpbGVubyhz dGRvdXQpLCBQR19CSU5BUllfQSwgQ0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIHN0 ZG91dCBmb3IgYXBwZW5kaW5nOiAlbSIpOworCUFILT5PRiA9IENGSDsKIAogCS8qCiAJICogT24g V2luZG93cywgd2UgbmVlZCB0byB1c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBub24tdGV4 dCBmaWxlcywKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jCmluZGV4IDQzY2NiZTEzMzkuLmU4 ZjhjNGMwZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYwpAQCAtMjk4LDcgKzI5OCw5 IEBAIF9TdGFydERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlfV3JpdGVC eXRlKEFILCBCTEtfREFUQSk7CS8qIEJsb2NrIHR5cGUgKi8KIAlXcml0ZUludChBSCwgdGUtPmR1 bXBJZCk7CS8qIEZvciBzYW5pdHkgY2hlY2sgKi8KIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXBy ZXNzb3IoQUgtPmNvbXByZXNzX3NwZWMsIF9DdXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBB bGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzX3NwZWMsCisJCQkJCQkJCSBOVUxMLAorCQkJ CQkJCQkgX0N1c3RvbVdyaXRlRnVuYyk7CiB9CiAKIC8qCkBAIC0zMTcsMTUgKzMxOSwxNSBAQCBf V3JpdGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExl bikKIAlDb21wcmVzc29yU3RhdGUgKmNzID0gY3R4LT5jczsKIAogCWlmIChkTGVuID4gMCkKLQkJ LyogV3JpdGVEYXRhVG9BcmNoaXZlKCkgaW50ZXJuYWxseSB0aHJvd3Mgd3JpdGUgZXJyb3JzICov Ci0JCVdyaXRlRGF0YVRvQXJjaGl2ZShBSCwgY3MsIGRhdGEsIGRMZW4pOworCQkvKiB3cml0ZURh dGEoKSBpbnRlcm5hbGx5IHRocm93cyB3cml0ZSBlcnJvcnMgKi8KKwkJY3MtPndyaXRlRGF0YShB SCwgY3MsIGRhdGEsIGRMZW4pOwogfQogCiAvKgogICogQ2FsbGVkIGJ5IHRoZSBhcmNoaXZlciB3 aGVuIGEgZHVtcGVyJ3MgJ0RhdGFEdW1wZXInIHJvdXRpbmUgaGFzCiAgKiBmaW5pc2hlZC4KICAq Ci0gKiBPcHRpb25hbC4KKyAqIE1hbmRhdG9yeS4KICAqLwogc3RhdGljIHZvaWQKIF9FbmREYXRh KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCkBAIC0zMzMsNiArMzM1LDggQEAgX0Vu ZERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlsY2xDb250ZXh0ICpjdHgg PSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKIAogCUVuZENvbXByZXNzb3IoQUgsIGN0 eC0+Y3MpOworCWN0eC0+Y3MgPSBOVUxMOworCiAJLyogU2VuZCB0aGUgZW5kIG1hcmtlciAqLwog CVdyaXRlSW50KEFILCAwKTsKIH0KQEAgLTM3Nyw3ICszODEsOSBAQCBfU3RhcnRCbG9iKEFyY2hp dmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlXcml0ZUludChBSCwgb2lk KTsKIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzX3NwZWMsIF9D dXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXBy ZXNzX3NwZWMsCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgX0N1c3RvbVdyaXRlRnVuYyk7CiB9 CiAKIC8qCkBAIC01NjYsNyArNTcyLDEyIEBAIF9QcmludFRvY0RhdGEoQXJjaGl2ZUhhbmRsZSAq QUgsIFRvY0VudHJ5ICp0ZSkKIHN0YXRpYyB2b2lkCiBfUHJpbnREYXRhKEFyY2hpdmVIYW5kbGUg KkFIKQogewotCVJlYWREYXRhRnJvbUFyY2hpdmUoQUgsIEFILT5jb21wcmVzc19zcGVjLCBfQ3Vz dG9tUmVhZEZ1bmMpOworCUNvbXByZXNzb3JTdGF0ZSAqY3M7CisKKwljcyA9IEFsbG9jYXRlQ29t cHJlc3NvcihBSC0+Y29tcHJlc3Nfc3BlYywKKwkJCQkJCQlfQ3VzdG9tUmVhZEZ1bmMsIE5VTEwp OworCWNzLT5yZWFkRGF0YShBSCwgY3MpOworCUVuZENvbXByZXNzb3IoQUgsIGNzKTsKIH0KIAog c3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0 b3J5LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCmluZGV4IDE3Yzcx MzBjNzUuLjNmMzViYzk4MTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf ZGlyZWN0b3J5LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYwpA QCAtNTAsOSArNTAsOSBAQCB0eXBlZGVmIHN0cnVjdAogCSAqLwogCWNoYXIJICAgKmRpcmVjdG9y eTsKIAotCWNmcAkJICAgKmRhdGFGSDsJCQkvKiBjdXJyZW50bHkgb3BlbiBkYXRhIGZpbGUgKi8K KwlDb21wcmVzc0ZpbGVIYW5kbGUgKmRhdGFGSDsgLyogY3VycmVudGx5IG9wZW4gZGF0YSBmaWxl ICovCiAKLQljZnAJCSAgICpibG9ic1RvY0ZIOwkJLyogZmlsZSBoYW5kbGUgZm9yIGJsb2JzLnRv YyAqLworCUNvbXByZXNzRmlsZUhhbmRsZSAqYmxvYnNUb2NGSDsgLyogZmlsZSBoYW5kbGUgZm9y IGJsb2JzLnRvYyAqLwogCVBhcmFsbGVsU3RhdGUgKnBzdGF0ZTsJCS8qIGZvciBwYXJhbGxlbCBi YWNrdXAgLyByZXN0b3JlICovCiB9IGxjbENvbnRleHQ7CiAKQEAgLTE5OCwxMSArMTk4LDExIEBA IEluaXRBcmNoaXZlRm10X0RpcmVjdG9yeShBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlCiAJewkJ CQkJCQkvKiBSZWFkIE1vZGUgKi8KIAkJY2hhcgkJZm5hbWVbTUFYUEdQQVRIXTsKLQkJY2ZwCQkg ICAqdG9jRkg7CisJCUNvbXByZXNzRmlsZUhhbmRsZSAqdG9jRkg7CiAKIAkJc2V0RmlsZVBhdGgo QUgsIGZuYW1lLCAidG9jLmRhdCIpOwogCi0JCXRvY0ZIID0gY2ZvcGVuX3JlYWQoZm5hbWUsIFBH X0JJTkFSWV9SKTsKKwkJdG9jRkggPSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoZm5h bWUsIFBHX0JJTkFSWV9SKTsKIAkJaWYgKHRvY0ZIID09IE5VTEwpCiAJCQlwZ19mYXRhbCgiY291 bGQgbm90IG9wZW4gaW5wdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogCkBAIC0yMTgsNyAr MjE4LDcgQEAgSW5pdEFyY2hpdmVGbXRfRGlyZWN0b3J5KEFyY2hpdmVIYW5kbGUgKkFIKQogCQlS ZWFkVG9jKEFIKTsKIAogCQkvKiBOb3RoaW5nIGVsc2UgaW4gdGhlIGZpbGUsIHNvIGNsb3NlIGl0 IGFnYWluLi4uICovCi0JCWlmIChjZmNsb3NlKHRvY0ZIKSAhPSAwKQorCQlpZiAoRGVzdHJveUNv bXByZXNzRmlsZUhhbmRsZSh0b2NGSCkgIT0gMCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xv c2UgVE9DIGZpbGU6ICVtIik7CiAJCWN0eC0+ZGF0YUZIID0gTlVMTDsKIAl9CkBAIC0zMjcsOSAr MzI3LDkgQEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCiAJ c2V0RmlsZVBhdGgoQUgsIGZuYW1lLCB0Y3R4LT5maWxlbmFtZSk7CiAKLQljdHgtPmRhdGFGSCA9 IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csCi0JCQkJCQkJICAgQUgtPmNvbXByZXNz X3NwZWMpOwotCWlmIChjdHgtPmRhdGFGSCA9PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0gSW5pdENv bXByZXNzRmlsZUhhbmRsZShBSC0+Y29tcHJlc3Nfc3BlYyk7CisKKwlpZiAoY3R4LT5kYXRhRkgt Pm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBjdHgtPmRhdGFGSCkpCiAJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBA IC0zNDYsMTUgKzM0NiwxNiBAQCBzdGF0aWMgdm9pZAogX1dyaXRlRGF0YShBcmNoaXZlSGFuZGxl ICpBSCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCiB7CiAJbGNsQ29udGV4dCAqY3R4 ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpD RkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5vID0gMDsKLQlpZiAoZExlbiA+IDAgJiYgY2Z3cml0 ZShkYXRhLCBkTGVuLCBjdHgtPmRhdGFGSCkgIT0gZExlbikKKwlpZiAoZExlbiA+IDAgJiYgQ0ZI LT53cml0ZShkYXRhLCBkTGVuLCBDRkgpICE9IGRMZW4pCiAJewogCQkvKiBpZiB3cml0ZSBkaWRu J3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBkaXNrIHNwYWNlICovCiAJCWlmIChl cnJubyA9PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3Jp dGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgtPmRhdGFGSCkp OworCQkJCSBDRkgtPmdldF9lcnJvcihDRkgpKTsKIAl9CiB9CiAKQEAgLTM3MCw3ICszNzEsNyBA QCBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENvbnRleHQg KmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCiAJLyogQ2xvc2UgdGhlIGZp bGUgKi8KLQlpZiAoY2ZjbG9zZShjdHgtPmRhdGFGSCkgIT0gMCkKKwlpZiAoRGVzdHJveUNvbXBy ZXNzRmlsZUhhbmRsZShjdHgtPmRhdGFGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBj bG9zZSBkYXRhIGZpbGU6ICVtIik7CiAKIAljdHgtPmRhdGFGSCA9IE5VTEw7CkBAIC0zODUsMjYg KzM4NiwyNSBAQCBfUHJpbnRGaWxlRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgY2hhciAqZmlsZW5h bWUpCiAJc2l6ZV90CQljbnQ7CiAJY2hhcgkgICAqYnVmOwogCXNpemVfdAkJYnVmbGVuOwotCWNm cAkJICAgKmNmcDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAogCWlmICghZmlsZW5hbWUp CiAJCXJldHVybjsKIAotCWNmcCA9IGNmb3Blbl9yZWFkKGZpbGVuYW1lLCBQR19CSU5BUllfUik7 Ci0KLQlpZiAoIWNmcCkKKwlDRkggPSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoZmls ZW5hbWUsIFBHX0JJTkFSWV9SKTsKKwlpZiAoIUNGSCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBv cGVuIGlucHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKIAogCWJ1ZiA9IHBnX21hbGxv YyhaTElCX09VVF9TSVpFKTsKIAlidWZsZW4gPSBaTElCX09VVF9TSVpFOwogCi0Jd2hpbGUgKChj bnQgPSBjZnJlYWQoYnVmLCBidWZsZW4sIGNmcCkpKQorCXdoaWxlICgoY250ID0gQ0ZILT5yZWFk KGJ1ZiwgYnVmbGVuLCBDRkgpKSkKIAl7CiAJCWFod3JpdGUoYnVmLCAxLCBjbnQsIEFIKTsKIAl9 CiAKIAlmcmVlKGJ1Zik7Ci0JaWYgKGNmY2xvc2UoY2ZwKSAhPSAwKQorCWlmIChEZXN0cm95Q29t cHJlc3NGaWxlSGFuZGxlKENGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBk YXRhIGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKIH0KIApAQCAtNDM1LDYgKzQzNSw3IEBA IF9Mb2FkQmxvYnMoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CiAJT2lkCQkJb2lkOwogCWxjbENvbnRl eHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIOwogCWNoYXIJCXRvY2ZuYW1lW01BWFBHUEFUSF07CiAJY2hhcgkJbGluZVtNQVhQ R1BBVEhdOwogCkBAIC00NDIsMTQgKzQ0MywxNCBAQCBfTG9hZEJsb2JzKEFyY2hpdmVIYW5kbGUg KkFIKQogCiAJc2V0RmlsZVBhdGgoQUgsIHRvY2ZuYW1lLCAiYmxvYnMudG9jIik7CiAKLQljdHgt PmJsb2JzVG9jRkggPSBjZm9wZW5fcmVhZCh0b2NmbmFtZSwgUEdfQklOQVJZX1IpOworCUNGSCA9 IGN0eC0+YmxvYnNUb2NGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZSh0b2NmbmFt ZSwgUEdfQklOQVJZX1IpOwogCiAJaWYgKGN0eC0+YmxvYnNUb2NGSCA9PSBOVUxMKQogCQlwZ19m YXRhbCgiY291bGQgbm90IG9wZW4gbGFyZ2Ugb2JqZWN0IFRPQyBmaWxlIFwiJXNcIiBmb3IgaW5w dXQ6ICVtIiwKIAkJCQkgdG9jZm5hbWUpOwogCiAJLyogUmVhZCB0aGUgYmxvYnMgVE9DIGZpbGUg bGluZS1ieS1saW5lLCBhbmQgcHJvY2VzcyBlYWNoIGJsb2IgKi8KLQl3aGlsZSAoKGNmZ2V0cyhj dHgtPmJsb2JzVG9jRkgsIGxpbmUsIE1BWFBHUEFUSCkpICE9IE5VTEwpCisJd2hpbGUgKChDRkgt PmdldHMobGluZSwgTUFYUEdQQVRILCBDRkgpKSAhPSBOVUxMKQogCXsKIAkJY2hhcgkJYmxvYmZu YW1lW01BWFBHUEFUSCArIDFdOwogCQljaGFyCQlwYXRoW01BWFBHUEFUSF07CkBAIC00NjQsMTEg KzQ2NSwxMSBAQCBfTG9hZEJsb2JzKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlfUHJpbnRGaWxlRGF0 YShBSCwgcGF0aCk7CiAJCUVuZFJlc3RvcmVCbG9iKEFILCBvaWQpOwogCX0KLQlpZiAoIWNmZW9m KGN0eC0+YmxvYnNUb2NGSCkpCisJaWYgKCFDRkgtPmVvZihDRkgpKQogCQlwZ19mYXRhbCgiZXJy b3IgcmVhZGluZyBsYXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiIiwKIAkJCQkgdG9jZm5hbWUp OwogCi0JaWYgKGNmY2xvc2UoY3R4LT5ibG9ic1RvY0ZIKSAhPSAwKQorCWlmIChEZXN0cm95Q29t cHJlc3NGaWxlSGFuZGxlKGN0eC0+YmxvYnNUb2NGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxk IG5vdCBjbG9zZSBsYXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiOiAlbSIsCiAJCQkJIHRvY2Zu YW1lKTsKIApAQCAtNDg4LDE1ICs0ODksMTYgQEAgX1dyaXRlQnl0ZShBcmNoaXZlSGFuZGxlICpB SCwgY29uc3QgaW50IGkpCiB7CiAJdW5zaWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpIGk7 CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29t cHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5vID0gMDsKLQlpZiAo Y2Z3cml0ZSgmYywgMSwgY3R4LT5kYXRhRkgpICE9IDEpCisJaWYgKENGSC0+d3JpdGUoJmMsIDEs IENGSCkgIT0gMSkKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBw cm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJCQllcnJubyA9 IEVOT1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZTogJXMi LAotCQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vycm9y KENGSCkpOwogCX0KIAogCXJldHVybiAxOwpAQCAtNTEyLDggKzUxNCw5IEBAIHN0YXRpYyBpbnQK IF9SZWFkQnl0ZShBcmNoaXZlSGFuZGxlICpBSCkKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNs Q29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0 eC0+ZGF0YUZIOwogCi0JcmV0dXJuIGNmZ2V0YyhjdHgtPmRhdGFGSCk7CisJcmV0dXJuIENGSC0+ Z2V0YyhDRkgpOwogfQogCiAvKgpAQCAtNTI0LDE1ICs1MjcsMTYgQEAgc3RhdGljIHZvaWQKIF9X cml0ZUJ1ZihBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQog ewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYg KGNmd3JpdGUoYnVmLCBsZW4sIGN0eC0+ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+d3JpdGUo YnVmLCBsZW4sIENGSCkgIT0gbGVuKQogCXsKIAkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJu bywgYXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAoZXJybm8gPT0gMCkK IAkJCWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIG91dHB1 dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJCQkgQ0ZI LT5nZXRfZXJyb3IoQ0ZIKSk7CiAJfQogfQogCkBAIC01NDUsMTIgKzU0OSwxMyBAQCBzdGF0aWMg dm9pZAogX1JlYWRCdWYoQXJjaGl2ZUhhbmRsZSAqQUgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikK IHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJLyoKLQkgKiBJZiB0aGVy ZSB3YXMgYW4gSS9PIGVycm9yLCB3ZSBhbHJlYWR5IGV4aXRlZCBpbiBjZnJlYWQoKSwgc28gaGVy ZSB3ZQorCSAqIElmIHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhpdGVkIGlu IHJlYWRGKCksIHNvIGhlcmUgd2UKIAkgKiBleGl0IG9uIHNob3J0IHJlYWRzLgogCSAqLwotCWlm IChjZnJlYWQoYnVmLCBsZW4sIGN0eC0+ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+cmVhZChi dWYsIGxlbiwgQ0ZIKSAhPSBsZW4pCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlu cHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CiB9CiAKQEAgLTU3Myw3ICs1NzgsNyBAQCBfQ2xvc2VB cmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlV3Jp dGUpCiAJewotCQljZnAJCSAgICp0b2NGSDsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICp0b2NGSDsK IAkJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjOwogCQljaGFyCQlmbmFt ZVtNQVhQR1BBVEhdOwogCkBAIC01ODQsOCArNTg5LDggQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZl SGFuZGxlICpBSCkKIAogCQkvKiBUaGUgVE9DIGlzIGFsd2F5cyBjcmVhdGVkIHVuY29tcHJlc3Nl ZCAqLwogCQljb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0J CXRvY0ZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgY29tcHJlc3Nfc3BlYyk7 Ci0JCWlmICh0b2NGSCA9PSBOVUxMKQorCQl0b2NGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUo Y29tcHJlc3Nfc3BlYyk7CisJCWlmICh0b2NGSC0+b3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZ X1csIHRvY0ZIKSkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVz XCI6ICVtIiwgZm5hbWUpOwogCQljdHgtPmRhdGFGSCA9IHRvY0ZIOwogCkBAIC01OTgsNyArNjAz LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJV3JpdGVIZWFkKEFIKTsK IAkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CiAJCVdyaXRlVG9jKEFIKTsKLQkJaWYgKGNm Y2xvc2UodG9jRkgpICE9IDApCisJCWlmIChEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKHRvY0ZI KSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBUT0MgZmlsZTogJW0iKTsKIAkJ V3JpdGVEYXRhQ2h1bmtzKEFILCBjdHgtPnBzdGF0ZSk7CiAKQEAgLTY0OSw4ICs2NTQsOCBAQCBf U3RhcnRCbG9icyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCiAJLyogVGhlIGJs b2IgVE9DIGZpbGUgaXMgbmV2ZXIgY29tcHJlc3NlZCAqLwogCWNvbXByZXNzX3NwZWMuYWxnb3Jp dGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQljdHgtPmJsb2JzVG9jRkggPSBjZm9wZW5fd3Jp dGUoZm5hbWUsICJhYiIsIGNvbXByZXNzX3NwZWMpOwotCWlmIChjdHgtPmJsb2JzVG9jRkggPT0g TlVMTCkKKwljdHgtPmJsb2JzVG9jRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNz X3NwZWMpOworCWlmIChjdHgtPmJsb2JzVG9jRkgtPm9wZW5fd3JpdGUoZm5hbWUsICJhYiIsIGN0 eC0+YmxvYnNUb2NGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBc IiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC02NjcsOSArNjcyLDggQEAgX1N0YXJ0QmxvYihB cmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogCiAJc25wcmludGYoZm5h bWUsIE1BWFBHUEFUSCwgIiVzL2Jsb2JfJXUuZGF0IiwgY3R4LT5kaXJlY3RvcnksIG9pZCk7CiAK LQljdHgtPmRhdGFGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csIEFILT5jb21w cmVzc19zcGVjKTsKLQotCWlmIChjdHgtPmRhdGFGSCA9PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0g SW5pdENvbXByZXNzRmlsZUhhbmRsZShBSC0+Y29tcHJlc3Nfc3BlYyk7CisJaWYgKGN0eC0+ZGF0 YUZILT5vcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgY3R4LT5kYXRhRkgpKQogCQlwZ19m YXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0K IApAQCAtNjgyLDE3ICs2ODYsMTggQEAgc3RhdGljIHZvaWQKIF9FbmRCbG9iKEFyY2hpdmVIYW5k bGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxj bENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBj dHgtPmJsb2JzVG9jRkg7CiAJY2hhcgkJYnVmWzUwXTsKIAlpbnQJCQlsZW47CiAKIAkvKiBDbG9z ZSB0aGUgQkxPQiBkYXRhIGZpbGUgaXRzZWxmICovCi0JaWYgKGNmY2xvc2UoY3R4LT5kYXRhRkgp ICE9IDApCisJaWYgKERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5kYXRhRkgpICE9IDAp CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYmxvYiBkYXRhIGZpbGU6ICVtIik7CiAJY3R4 LT5kYXRhRkggPSBOVUxMOwogCiAJLyogcmVnaXN0ZXIgdGhlIGJsb2IgaW4gYmxvYnMudG9jICov CiAJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1IGJsb2JfJXUuZGF0XG4iLCBv aWQsIG9pZCk7Ci0JaWYgKGNmd3JpdGUoYnVmLCBsZW4sIGN0eC0+YmxvYnNUb2NGSCkgIT0gbGVu KQorCWlmIChDRkgtPndyaXRlKGJ1ZiwgbGVuLCBDRkgpICE9IGxlbikKIAkJcGdfZmF0YWwoImNv dWxkIG5vdCB3cml0ZSB0byBibG9icyBUT0MgZmlsZSIpOwogfQogCkBAIC03MDYsNyArNzExLDcg QEAgX0VuZEJsb2JzKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiB7CiAJbGNsQ29u dGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAKLQlpZiAoY2ZjbG9z ZShjdHgtPmJsb2JzVG9jRkgpICE9IDApCisJaWYgKERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUo Y3R4LT5ibG9ic1RvY0ZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGJsb2Jz IFRPQyBmaWxlOiAlbSIpOwogCWN0eC0+YmxvYnNUb2NGSCA9IE5VTEw7CiB9Ci0tIAoyLjM0LjEK Cg== --b1_5IGcN7m7GJLa221lhJtyGUwkm8rhXEBA0IBs9sbZM Content-Type: text/x-patch; name=v7-0001-Prepare-pg_dump-for-additional-compression-method.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v7-0001-Prepare-pg_dump-for-additional-compression-method.patch RnJvbSBiZjVkZWI4ZTNhNzcwZTI2ZGE4NzZiMjI2ODgzMmFiMWEwN2JiYjg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgNSBKdWwgMjAyMiAxMjozMzoyOCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjcg MS8zXSBQcmVwYXJlIHBnX2R1bXAgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Npb24gbWV0aG9kcwoK VGhpcyBjb21tbWl0IGRvZXMgc29tZSBvZiB0aGUgaGVhdnkgbGlmdGluZyByZXF1aXJlZCBmb3Ig YWRkaXRpb25hbCBjb21wcmVzc2lvbgptZXRob2RzLgoKRmlyc3QgaXQgaXMgdGVhY2hpbmcgcGdf ZHVtcC5jIGFib3V0IHRoZSBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlcyBmb3VuZCBpbgpjb21t b24vY29tcHJlc3Npb24uaC4gVGhlbiBpdCBpcyBwcm9wYWdhdGluZyB0aG9zZSB0aHJvdWdob3V0 IHRoZSBjb2RlLgoKQ29tbWl0ICBiZjlhYTQ5MGRiIGludHJvZHVjZWQgY2ZwIGluIGNvbXByZXNz X2lvLntjLGh9IHdpdGggdGhlIGludGVudCBvZgp1bmlmeWluZyBjb21wcmVzc2lvbiByZWxhdGVk IGNvZGUgYW5kIGFsbG93IGZvciB0aGUgaW50cm9kdWN0aW9uIG9mCmFkZGl0aW9uYWwgYXJjaGl2 ZSBmb3JtYXRzLiBIb3dldmVyLCBwZ19iYWNrdXBfYXJjaGl2ZXIuYyB3YXMgbm90IHVzaW5nIHRo YXQKQVBJLiBUaGlzIGNvbW1pdCB0ZWFjaGVzIHBnX2JhY2t1cF9hcmNoaXZlci5jIGFib3V0IGNm cCBhbmQgaXMgdXNpbmcgaXQgdGhyb3VnaApvdXQuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19k dW1wLnNnbWwgICAgICAgICB8ICAzMCArLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMg ICAgICAgICB8IDQyNyArKysrKysrKysrKysrKysrLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2lvLmggICAgICAgICB8ICAzNSArKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaCAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYyAgfCAxNzggKysrKystLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuaCAgfCAgMzcgKy0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jICAgIHwg ICA2ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jIHwgIDEzICstCiBz cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAgIHwgIDEyICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgIHwgMTUxICsrKysrKystLQogc3JjL2Jpbi9wZ19k dW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgICB8ICAxMCArCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJf cGdfZHVtcC5wbCAgICAgIHwgICAyICstCiAxMiBmaWxlcyBjaGFuZ2VkLCA1NTIgaW5zZXJ0aW9u cygrKSwgMzU2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKaW5kZXggNWVmYjQ0MmI0 NC4uOTQ4ODVkMDgxMiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKQEAgLTY0NCwxNyArNjQ0LDMxIEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICA8 dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+PG9wdGlvbj4tWiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+MC4uOTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgotICAgICAgPHRl cm0+PG9wdGlvbj4tLWNvbXByZXNzPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj4wLi45 PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi1aIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5sZXZlbDwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tWiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+bWV0aG9kPC9yZXBsYWNlYWJsZT48L29wdGlvbj5bOjxyZXBsYWNlYWJsZT5sZXZlbDwv cmVwbGFjZWFibGU+XTwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1jb21wcmVzcz08cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bGV2ZWw8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwv dGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1jb21wcmVzcz08cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bWV0aG9kPC9yZXBsYWNlYWJsZT48L29wdGlvbj5bOjxyZXBsYWNlYWJsZT5s ZXZlbDwvcmVwbGFjZWFibGU+XTwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KICAgICAgICA8cGFy YT4KLSAgICAgICAgU3BlY2lmeSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgdG8gdXNlLiAgWmVybyBt ZWFucyBubyBjb21wcmVzc2lvbi4KKyAgICAgICAgU3BlY2lmeSB0aGUgY29tcHJlc3Npb24gbWV0 aG9kIGFuZC9vciB0aGUgY29tcHJlc3Npb24gbGV2ZWwgdG8gdXNlLgorICAgICAgICBUaGUgY29t cHJlc3Npb24gbWV0aG9kIGNhbiBiZSBzZXQgdG8gPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4gb3IK KyAgICAgICAgPGxpdGVyYWw+bm9uZTwvbGl0ZXJhbD4gZm9yIG5vIGNvbXByZXNzaW9uLiBBIGNv bXByZXNzaW9uIGxldmVsIGNhbgorICAgICAgICBiZSBvcHRpb25hbGx5IHNwZWNpZmllZCwgYnkg YXBwZW5kaW5nIHRoZSBsZXZlbCBudW1iZXIgYWZ0ZXIgYSBjb2xvbgorICAgICAgICAoPGxpdGVy YWw+OjwvbGl0ZXJhbD4pLiBJZiBubyBsZXZlbCBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGNv bXByZXNzaW9uCisgICAgICAgIGxldmVsIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHNwZWNpZmllZCBt ZXRob2QuIElmIG9ubHkgYSBsZXZlbCBpcworICAgICAgICBzcGVjaWZpZWQgd2l0aG91dCBtZW50 aW9uaW5nIGEgbWV0aG9kLCA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBjb21wcmVzc2lvbgorICAg ICAgICB3aWxsIGJlIHVzZWQuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CiAgICAg ICAgIEZvciB0aGUgY3VzdG9tIGFuZCBkaXJlY3RvcnkgYXJjaGl2ZSBmb3JtYXRzLCB0aGlzIHNw ZWNpZmllcyBjb21wcmVzc2lvbiBvZgotICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEgc2Vn bWVudHMsIGFuZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcwotICAgICAgICBhdCBhIG1vZGVy YXRlIGxldmVsLgotICAgICAgICBGb3IgcGxhaW4gdGV4dCBvdXRwdXQsIHNldHRpbmcgYSBub256 ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNhdXNlcwotICAgICAgICB0aGUgZW50aXJlIG91dHB1dCBm aWxlIHRvIGJlIGNvbXByZXNzZWQsIGFzIHRob3VnaCBpdCBoYWQgYmVlbgotICAgICAgICBmZWQg dGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+OyBidXQgdGhlIGRlZmF1bHQg aXMgbm90IHRvIGNvbXByZXNzLgorICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEgc2VnbWVu dHMsIGFuZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcyB1c2luZworICAgICAgICA8bGl0ZXJh bD5nemlwPC9saXRlcmFsPiBhdCBhIG1vZGVyYXRlIGxldmVsLiBGb3IgcGxhaW4gdGV4dCBvdXRw dXQsCisgICAgICAgIHNldHRpbmcgYSBub256ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNhdXNlcyB0 aGUgZW50aXJlIG91dHB1dCBmaWxlIHRvIGJlIGNvbXByZXNzZWQsCisgICAgICAgIGFzIHRob3Vn aCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+ OyBidXQgdGhlIGRlZmF1bHQKKyAgICAgICAgaXMgbm90IHRvIGNvbXByZXNzLgorICAgICAgIDwv cGFyYT4KKyAgICAgICA8cGFyYT4KICAgICAgICAgVGhlIHRhciBhcmNoaXZlIGZvcm1hdCBjdXJy ZW50bHkgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiBhdCBhbGwuCiAgICAgICAgPC9wYXJh PgogICAgICAgPC9saXN0aXRlbT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKaW5kZXggNjJmOTQwZmY3YS4u MTQ2Mzk2MTcyYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTY0LDcgKzY0LDcgQEAKIC8qIHR5 cGVkZWYgYXBwZWFycyBpbiBjb21wcmVzc19pby5oICovCiBzdHJ1Y3QgQ29tcHJlc3NvclN0YXRl CiB7Ci0JQ29tcHJlc3Npb25BbGdvcml0aG0gY29tcHJBbGc7CisJcGdfY29tcHJlc3NfYWxnb3Jp dGhtIGNvbXByZXNzX2FsZ29yaXRobTsKIAlXcml0ZUZ1bmMJd3JpdGVGOwogCiAjaWZkZWYgSEFW RV9MSUJaCkBAIC03NCw5ICs3NCw2IEBAIHN0cnVjdCBDb21wcmVzc29yU3RhdGUKICNlbmRpZgog fTsKIAotc3RhdGljIHZvaWQgUGFyc2VDb21wcmVzc2lvbk9wdGlvbihpbnQgY29tcHJlc3Npb24s IENvbXByZXNzaW9uQWxnb3JpdGhtICphbGcsCi0JCQkJCQkJCSAgIGludCAqbGV2ZWwpOwotCiAv KiBSb3V0aW5lcyB0aGF0IHN1cHBvcnQgemxpYiBjb21wcmVzc2VkIGRhdGEgSS9PICovCiAjaWZk ZWYgSEFWRV9MSUJaCiBzdGF0aWMgdm9pZCBJbml0Q29tcHJlc3NvclpsaWIoQ29tcHJlc3NvclN0 YXRlICpjcywgaW50IGxldmVsKTsKQEAgLTkzLDU3ICs5MCwzMCBAQCBzdGF0aWMgdm9pZCBSZWFk RGF0YUZyb21BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpOwog c3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcywKIAkJCQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRM ZW4pOwogCi0vKgotICogSW50ZXJwcmV0cyBhIG51bWVyaWMgJ2NvbXByZXNzaW9uJyB2YWx1ZS4g VGhlIGFsZ29yaXRobSBpbXBsaWVkIGJ5IHRoZQotICogdmFsdWUgKHpsaWIgb3Igbm9uZSBhdCB0 aGUgbW9tZW50KSwgaXMgcmV0dXJuZWQgaW4gKmFsZywgYW5kIHRoZQotICogemxpYiBjb21wcmVz c2lvbiBsZXZlbCBpbiAqbGV2ZWwuCi0gKi8KLXN0YXRpYyB2b2lkCi1QYXJzZUNvbXByZXNzaW9u T3B0aW9uKGludCBjb21wcmVzc2lvbiwgQ29tcHJlc3Npb25BbGdvcml0aG0gKmFsZywgaW50ICps ZXZlbCkKLXsKLQlpZiAoY29tcHJlc3Npb24gPT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OIHx8Ci0J CShjb21wcmVzc2lvbiA+IDAgJiYgY29tcHJlc3Npb24gPD0gOSkpCi0JCSphbGcgPSBDT01QUl9B TEdfTElCWjsKLQllbHNlIGlmIChjb21wcmVzc2lvbiA9PSAwKQotCQkqYWxnID0gQ09NUFJfQUxH X05PTkU7Ci0JZWxzZQotCXsKLQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gY29kZTog JWQiLCBjb21wcmVzc2lvbik7Ci0JCSphbGcgPSBDT01QUl9BTEdfTk9ORTsJLyoga2VlcCBjb21w aWxlciBxdWlldCAqLwotCX0KLQotCS8qIFRoZSBsZXZlbCBpcyBqdXN0IHRoZSBwYXNzZWQtaW4g dmFsdWUuICovCi0JaWYgKGxldmVsKQotCQkqbGV2ZWwgPSBjb21wcmVzc2lvbjsKLX0KLQogLyog UHVibGljIGludGVyZmFjZSByb3V0aW5lcyAqLwogCiAvKiBBbGxvY2F0ZSBhIG5ldyBjb21wcmVz c29yICovCiBDb21wcmVzc29yU3RhdGUgKgotQWxsb2NhdGVDb21wcmVzc29yKGludCBjb21wcmVz c2lvbiwgV3JpdGVGdW5jIHdyaXRlRikKK0FsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMsCisJCQkJICAgV3JpdGVGdW5jIHdyaXRl RikKIHsKIAlDb21wcmVzc29yU3RhdGUgKmNzOwotCUNvbXByZXNzaW9uQWxnb3JpdGhtIGFsZzsK LQlpbnQJCQlsZXZlbDsKLQotCVBhcnNlQ29tcHJlc3Npb25PcHRpb24oY29tcHJlc3Npb24sICZh bGcsICZsZXZlbCk7CiAKICNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKGFsZyA9PSBDT01QUl9BTEdf TElCWikKKwlpZiAoY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJ UCkKIAkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2VuZGlmCiAK IAljcyA9IChDb21wcmVzc29yU3RhdGUgKikgcGdfbWFsbG9jMChzaXplb2YoQ29tcHJlc3NvclN0 YXRlKSk7CiAJY3MtPndyaXRlRiA9IHdyaXRlRjsKLQljcy0+Y29tcHJBbGcgPSBhbGc7CisJY3Mt PmNvbXByZXNzX2FsZ29yaXRobSA9IGNvbXByZXNzX3NwZWMuYWxnb3JpdGhtOwogCiAJLyoKIAkg KiBQZXJmb3JtIGNvbXByZXNzaW9uIGFsZ29yaXRobSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4K IAkgKi8KICNpZmRlZiBIQVZFX0xJQloKLQlpZiAoYWxnID09IENPTVBSX0FMR19MSUJaKQotCQlJ bml0Q29tcHJlc3NvclpsaWIoY3MsIGxldmVsKTsKKwlpZiAoY3MtPmNvbXByZXNzX2FsZ29yaXRo bSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQorCQlJbml0Q29tcHJlc3NvclpsaWIoY3MsIGNvbXBy ZXNzX3NwZWMubGV2ZWwpOwogI2VuZGlmCiAKIAlyZXR1cm4gY3M7CkBAIC0xNTQsMjEgKzEyNCwy NCBAQCBBbGxvY2F0ZUNvbXByZXNzb3IoaW50IGNvbXByZXNzaW9uLCBXcml0ZUZ1bmMgd3JpdGVG KQogICogb3V0IHdpdGggYWh3cml0ZSgpLgogICovCiB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZl KEFyY2hpdmVIYW5kbGUgKkFILCBpbnQgY29tcHJlc3Npb24sIFJlYWRGdW5jIHJlYWRGKQorUmVh ZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc19zcGVjLAorCQkJCQlSZWFkRnVuYyByZWFkRikKIHsKLQlDb21wcmVzc2lv bkFsZ29yaXRobSBhbGc7Ci0KLQlQYXJzZUNvbXByZXNzaW9uT3B0aW9uKGNvbXByZXNzaW9uLCAm YWxnLCBOVUxMKTsKLQotCWlmIChhbGcgPT0gQ09NUFJfQUxHX05PTkUpCi0JCVJlYWREYXRhRnJv bUFyY2hpdmVOb25lKEFILCByZWFkRik7Ci0JaWYgKGFsZyA9PSBDT01QUl9BTEdfTElCWikKKwlz d2l0Y2ggKGNvbXByZXNzX3NwZWMuYWxnb3JpdGhtKQogCXsKKwkJY2FzZSBQR19DT01QUkVTU0lP Tl9OT05FOgorCQkJUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQUgsIHJlYWRGKTsKKwkJCWJyZWFr OworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJaCi0JCVJlYWRE YXRhRnJvbUFyY2hpdmVabGliKEFILCByZWFkRik7CisJCQlSZWFkRGF0YUZyb21BcmNoaXZlWmxp YihBSCwgcmVhZEYpOwogI2Vsc2UKLQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3Vw cG9ydCIpOworCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2Vu ZGlmCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNz aW9uIG1ldGhvZCIpOworCQkJYnJlYWs7CiAJfQogfQogCkBAIC0xNzksMTggKzE1MiwyMSBAQCB2 b2lkCiBXcml0ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0 ZSAqY3MsCiAJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCiB7Ci0Jc3dpdGNo IChjcy0+Y29tcHJBbGcpCisJc3dpdGNoIChjcy0+Y29tcHJlc3NfYWxnb3JpdGhtKQogCXsKLQkJ Y2FzZSBDT01QUl9BTEdfTElCWjoKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogI2lmZGVm IEhBVkVfTElCWgogCQkJV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBSCwgY3MsIGRhdGEsIGRMZW4p OwogI2Vsc2UKIAkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKICNl bmRpZgogCQkJYnJlYWs7Ci0JCWNhc2UgQ09NUFJfQUxHX05PTkU6CisJCWNhc2UgUEdfQ09NUFJF U1NJT05fTk9ORToKIAkJCVdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQUgsIGNzLCBkYXRhLCBkTGVu KTsKIAkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Np b24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CiB9CiAKQEAgLTIwMCwxMSArMTc2LDIzIEBAIFdy aXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywK IHZvaWQKIEVuZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MpCiB7CisJc3dpdGNoIChjcy0+Y29tcHJlc3NfYWxnb3JpdGhtKQorCXsKKwkJY2FzZSBQR19D T01QUkVTU0lPTl9HWklQOgogI2lmZGVmIEhBVkVfTElCWgotCWlmIChjcy0+Y29tcHJBbGcgPT0g Q09NUFJfQUxHX0xJQlopCi0JCUVuZENvbXByZXNzb3JabGliKEFILCBjcyk7CisJCQlFbmRDb21w cmVzc29yWmxpYihBSCwgY3MpOworI2Vsc2UKKwkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6 bGliIHN1cHBvcnQiKTsKICNlbmRpZgotCWZyZWUoY3MpOworCQkJYnJlYWs7CisJCWNhc2UgUEdf Q09NUFJFU1NJT05fTk9ORToKKwkJCWZyZWUoY3MpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoK KwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOworCQkJYnJlYWs7CisJ fQogfQogCiAvKiBQcml2YXRlIHJvdXRpbmVzLCBzcGVjaWZpYyB0byBlYWNoIGNvbXByZXNzaW9u IG1ldGhvZC4gKi8KQEAgLTQxOCwxMCArNDA2LDggQEAgV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKICAqLwogc3RydWN0IGNmcAog ewotCUZJTEUJICAgKnVuY29tcHJlc3NlZGZwOwotI2lmZGVmIEhBVkVfTElCWgotCWd6RmlsZQkJ Y29tcHJlc3NlZGZwOwotI2VuZGlmCisJcGdfY29tcHJlc3NfYWxnb3JpdGhtIGNvbXByZXNzX2Fs Z29yaXRobTsKKwl2b2lkCSAgICpmcDsKIH07CiAKICNpZmRlZiBIQVZFX0xJQloKQEAgLTQ1Miwy MSArNDM4LDI1IEBAIGNmcCAqCiBjZm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBj aGFyICptb2RlKQogewogCWNmcAkJICAgKmZwOworCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24g Y29tcHJlc3Nfc3BlYyA9IHswfTsKIAorCWNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09N UFJFU1NJT05fR1pJUDsKICNpZmRlZiBIQVZFX0xJQloKIAlpZiAoaGFzU3VmZml4KHBhdGgsICIu Z3oiKSkKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgMSk7CisJCWZwID0gY2ZvcGVuKHBhdGgs IG1vZGUsIGNvbXByZXNzX3NwZWMpOwogCWVsc2UKICNlbmRpZgogCXsKLQkJZnAgPSBjZm9wZW4o cGF0aCwgbW9kZSwgMCk7CisJCWNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJ T05fTk9ORTsKKwkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Nfc3BlYyk7CiAjaWZk ZWYgSEFWRV9MSUJaCiAJCWlmIChmcCA9PSBOVUxMKQogCQl7CiAJCQljaGFyCSAgICpmbmFtZTsK IAorCQkJY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogCQkJ Zm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKLQkJCWZwID0gY2ZvcGVuKGZuYW1lLCBt b2RlLCAxKTsKKwkJCWZwID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVzc19zcGVjKTsKIAkJ CWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CiAJCX0KICNlbmRpZgpAQCAtNDc5LDI2ICs0NjksMjcg QEAgY2ZvcGVuX3JlYWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKICAqIGJl IGEgZmlsZW1vZGUgYXMgYWNjZXB0ZWQgYnkgZm9wZW4oKSBhbmQgZ3pvcGVuKCkgdGhhdCBpbmRp Y2F0ZXMgd3JpdGluZwogICogKCJ3IiwgIndiIiwgImEiLCBvciAiYWIiKS4KICAqCi0gKiBJZiAn Y29tcHJlc3Npb24nIGlzIG5vbi16ZXJvLCBhIGd6aXAgY29tcHJlc3NlZCBzdHJlYW0gaXMgb3Bl bmVkLCBhbmQKLSAqICdjb21wcmVzc2lvbicgaW5kaWNhdGVzIHRoZSBjb21wcmVzc2lvbiBsZXZl bCB1c2VkLiBUaGUgIi5neiIgc3VmZml4Ci0gKiBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvICdw YXRoJyBpbiB0aGF0IGNhc2UuCisgKiBJZiAnY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0nIGlzIEda SVAsIGEgZ3ppcCBjb21wcmVzc2VkIHN0cmVhbSBpcyBvcGVuZWQsCisgKiBhbmQgJ2NvbXByZXNz X3NwZWMubGV2ZWwnIHVzZWQuIFRoZSAiLmd6IiBzdWZmaXggaXMgYXV0b21hdGljYWxseSBhZGRl ZCB0bworICogJ3BhdGgnIGluIHRoYXQgY2FzZS4KICAqCiAgKiBPbiBmYWlsdXJlLCByZXR1cm4g TlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCiAgKi8KIGNmcCAqCi1jZm9wZW5fd3Jp dGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50IGNvbXByZXNzaW9uKQor Y2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQogewogCWNmcAkJICAg KmZwOwogCi0JaWYgKGNvbXByZXNzaW9uID09IDApCi0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUs IDApOworCWlmIChjb21wcmVzc19zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9OT05F KQorCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBjb21wcmVzc19zcGVjKTsKIAllbHNlCiAJewog I2lmZGVmIEhBVkVfTElCWgogCQljaGFyCSAgICpmbmFtZTsKIAogCQlmbmFtZSA9IHBzcHJpbnRm KCIlcy5neiIsIHBhdGgpOwotCQlmcCA9IGNmb3BlbihmbmFtZSwgbW9kZSwgY29tcHJlc3Npb24p OworCQlmcCA9IGNmb3BlbihmbmFtZSwgbW9kZSwgY29tcHJlc3Nfc3BlYyk7CiAJCWZyZWVfa2Vl cF9lcnJubyhmbmFtZSk7CiAjZWxzZQogCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBz dXBwb3J0Iik7CkBAIC01MDksNjAgKzUwMCw5NiBAQCBjZm9wZW5fd3JpdGUoY29uc3QgY2hhciAq cGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50IGNvbXByZXNzaW9uKQogfQogCiAvKgotICogT3Bl bnMgZmlsZSAncGF0aCcgaW4gJ21vZGUnLiBJZiAnY29tcHJlc3Npb24nIGlzIG5vbi16ZXJvLCB0 aGUgZmlsZQotICogaXMgb3BlbmVkIHdpdGggbGlieiBnem9wZW4oKSwgb3RoZXJ3aXNlIHdpdGgg cGxhaW4gZm9wZW4oKS4KKyAqIFRoaXMgaXMgdGhlIHdvcmtob3JzZSBmb3IgY2ZvcGVuKCkgb3Ig Y2Zkb3BlbigpLiBJdCBvcGVucyBmaWxlICdwYXRoJyBvcgorICogYXNzb2NpYXRlcyBhIHN0cmVh bSAnZmQnLCBpZiAnZmQnIGlzIGEgdmFsaWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnLiBUaGUKKyAq IGRlc2NyaXB0b3IgaXMgbm90IGR1cCdlZCBhbmQgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNp YmlsaXR5IHRvIGRvIHNvLgorICogVGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRoZSAnY29t cHJlc3NfYWxnb3JpdGhtJyBpcyBzdXBwb3J0ZWQgYnkgdGhlCisgKiBjdXJyZW50IGJ1aWxkLgog ICoKICAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJu by4KICAqLwotY2ZwICoKLWNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2Rl LCBpbnQgY29tcHJlc3Npb24pCitzdGF0aWMgY2ZwICoKK2Nmb3Blbl9pbnRlcm5hbChjb25zdCBj aGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJcGdfY29tcHJlc3NfYWxn b3JpdGhtIGNvbXByZXNzX2FsZ29yaXRobSwgaW50IGNvbXByZXNzaW9uTGV2ZWwpCiB7CiAJY2Zw CQkgICAqZnAgPSBwZ19tYWxsb2Moc2l6ZW9mKGNmcCkpOwogCi0JaWYgKGNvbXByZXNzaW9uICE9 IDApCisJZnAtPmNvbXByZXNzX2FsZ29yaXRobSA9IGNvbXByZXNzX2FsZ29yaXRobTsKKworCXN3 aXRjaCAoY29tcHJlc3NfYWxnb3JpdGhtKQogCXsKLSNpZmRlZiBIQVZFX0xJQloKLQkJaWYgKGNv bXByZXNzaW9uICE9IFpfREVGQVVMVF9DT01QUkVTU0lPTikKLQkJewotCQkJLyogdXNlciBoYXMg c3BlY2lmaWVkIGEgY29tcHJlc3Npb24gbGV2ZWwsIHNvIHRlbGwgemxpYiB0byB1c2UgaXQgKi8K LQkJCWNoYXIJCW1vZGVfY29tcHJlc3Npb25bMzJdOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX05P TkU6CisJCQlpZiAoZmQgPj0gMCkKKwkJCQlmcC0+ZnAgPSBmZG9wZW4oZmQsIG1vZGUpOworCQkJ ZWxzZQorCQkJCWZwLT5mcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCQkJaWYgKGZwLT5mcCA9PSBO VUxMKQorCQkJeworCQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7CisJCQkJZnAgPSBOVUxMOworCQkJ fQogCi0JCQlzbnByaW50Zihtb2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lv biksICIlcyVkIiwKLQkJCQkJIG1vZGUsIGNvbXByZXNzaW9uKTsKLQkJCWZwLT5jb21wcmVzc2Vk ZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lvbik7Ci0JCX0KLQkJZWxzZQotCQl7Ci0J CQkvKiBkb24ndCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3QgdXNlIHRoZSB6bGliIGRlZmF1bHQgKi8K LQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9kZSk7Ci0JCX0KKwkJCWJyZWFr OworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CisjaWZkZWYgSEFWRV9MSUJaCisJCQlpZiAo Y29tcHJlc3Npb25MZXZlbCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pCisJCQl7CisJCQkJLyoK KwkJCQkgKiB1c2VyIGhhcyBzcGVjaWZpZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6 bGliIHRvIHVzZQorCQkJCSAqIGl0CisJCQkJICovCisJCQkJY2hhcgkJbW9kZV9jb21wcmVzc2lv blszMl07CisKKwkJCQlzbnByaW50Zihtb2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21w cmVzc2lvbiksICIlcyVkIiwKKwkJCQkJCSBtb2RlLCBjb21wcmVzc2lvbkxldmVsKTsKKwkJCQlp ZiAoZmQgPj0gMCkKKwkJCQkJZnAtPmZwID0gZ3pkb3BlbihmZCwgbW9kZV9jb21wcmVzc2lvbik7 CisJCQkJZWxzZQorCQkJCQlmcC0+ZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lvbik7 CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0 IHVzZSB0aGUgemxpYiBkZWZhdWx0ICovCisJCQkJaWYgKGZkID49IDApCisJCQkJCWZwLT5mcCA9 IGd6ZG9wZW4oZmQsIG1vZGUpOworCQkJCWVsc2UKKwkJCQkJZnAtPmZwID0gZ3pvcGVuKHBhdGgs IG1vZGUpOworCQkJfQogCi0JCWZwLT51bmNvbXByZXNzZWRmcCA9IE5VTEw7Ci0JCWlmIChmcC0+ Y29tcHJlc3NlZGZwID09IE5VTEwpCi0JCXsKLQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQlm cCA9IE5VTEw7Ci0JCX0KKwkJCWlmIChmcC0+ZnAgPT0gTlVMTCkKKwkJCXsKKwkJCQlmcmVlX2tl ZXBfZXJybm8oZnApOworCQkJCWZwID0gTlVMTDsKKwkJCX0KICNlbHNlCi0JCXBnX2ZhdGFsKCJu b3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKLSNlbmRpZgotCX0KLQllbHNlCi0JewotI2lm ZGVmIEhBVkVfTElCWgotCQlmcC0+Y29tcHJlc3NlZGZwID0gTlVMTDsKKwkJCXBnX2ZhdGFsKCJu b3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKICNlbmRpZgotCQlmcC0+dW5jb21wcmVzc2Vk ZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKLQkJaWYgKGZwLT51bmNvbXByZXNzZWRmcCA9PSBOVUxM KQotCQl7Ci0JCQlmcmVlX2tlZXBfZXJybm8oZnApOwotCQkJZnAgPSBOVUxMOwotCQl9CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhv ZCIpOworCQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIGZwOwogfQogCitjZnAgKgorY2ZvcGVuKGNv bnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQoreworCXJldHVybiBjZm9wZW5faW50ZXJuYWwo cGF0aCwgLTEsIG1vZGUsCisJCQkJCQkgICBjb21wcmVzc19zcGVjLmFsZ29yaXRobSwKKwkJCQkJ CSAgIGNvbXByZXNzX3NwZWMubGV2ZWwpOworfQorCitjZnAgKgorY2Zkb3BlbihpbnQgZmQsIGNv bnN0IGNoYXIgKm1vZGUsCisJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Nfc3BlYykKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKE5VTEwsIGZkLCBtb2RlLAorCQkJ CQkJICAgY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0sCisJCQkJCQkgICBjb21wcmVzc19zcGVjLmxl dmVsKTsKK30KIAogaW50CiBjZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKQEAg LTU3MiwzOCArNTk5LDYxIEBAIGNmcmVhZCh2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZwKQog CWlmIChzaXplID09IDApCiAJCXJldHVybiAwOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZw LT5jb21wcmVzc2VkZnApCisJc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtKQogCXsKLQkJ cmV0ID0gZ3pyZWFkKGZwLT5jb21wcmVzc2VkZnAsIHB0ciwgc2l6ZSk7Ci0JCWlmIChyZXQgIT0g c2l6ZSAmJiAhZ3plb2YoZnAtPmNvbXByZXNzZWRmcCkpCi0JCXsKLQkJCWludAkJCWVycm51bTsK LQkJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmNvbXByZXNzZWRmcCwgJmVycm51 bSk7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9IGZyZWFkKHB0ciwgMSwg c2l6ZSwgZnAtPmZwKTsKKwkJCWlmIChyZXQgIT0gc2l6ZSAmJiAhZmVvZihmcC0+ZnApKQorCQkJ CVJFQURfRVJST1JfRVhJVChmcC0+ZnApOwogCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQg ZnJvbSBpbnB1dCBmaWxlOiAlcyIsCi0JCQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9y KGVycm5vKSA6IGVycm1zZyk7Ci0JCX0KLQl9Ci0JZWxzZQorCQkJYnJlYWs7CisJCWNhc2UgUEdf Q09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCXJldCA9IGd6cmVhZChmcC0+ ZnAsIHB0ciwgc2l6ZSk7CisJCQlpZiAocmV0ICE9IHNpemUgJiYgIWd6ZW9mKGZwLT5mcCkpCisJ CQl7CisJCQkJaW50CQkJZXJybnVtOworCQkJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3Io ZnAtPmZwLCAmZXJybnVtKTsKKworCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlu cHV0IGZpbGU6ICVzIiwKKwkJCQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5v KSA6IGVycm1zZyk7CisJCQl9CisjZWxzZQorCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHps aWIgc3VwcG9ydCIpOwogI2VuZGlmCi0JewotCQlyZXQgPSBmcmVhZChwdHIsIDEsIHNpemUsIGZw LT51bmNvbXByZXNzZWRmcCk7Ci0JCWlmIChyZXQgIT0gc2l6ZSAmJiAhZmVvZihmcC0+dW5jb21w cmVzc2VkZnApKQotCQkJUkVBRF9FUlJPUl9FWElUKGZwLT51bmNvbXByZXNzZWRmcCk7CisJCQli cmVhazsKKworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0 aG9kIik7CisJCQlicmVhazsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmd3JpdGUo Y29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKIHsKKwlpbnQJCQlyZXQgPSAwOwor CisJc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtKQorCXsKKwkJY2FzZSBQR19DT01QUkVT U0lPTl9OT05FOgorCQkJcmV0ID0gZndyaXRlKHB0ciwgMSwgc2l6ZSwgZnAtPmZwKTsKKwkJCWJy ZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJaCi0JaWYg KGZwLT5jb21wcmVzc2VkZnApCi0JCXJldHVybiBnendyaXRlKGZwLT5jb21wcmVzc2VkZnAsIHB0 ciwgc2l6ZSk7Ci0JZWxzZQorCQkJcmV0ID0gZ3p3cml0ZShmcC0+ZnAsIHB0ciwgc2l6ZSk7Cisj ZWxzZQorCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2VuZGlm Ci0JCXJldHVybiBmd3JpdGUocHRyLCAxLCBzaXplLCBmcC0+dW5jb21wcmVzc2VkZnApOworCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRo b2QiKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIGludApAQCAtNjExLDI0 ICs2NjEsMzEgQEAgY2ZnZXRjKGNmcCAqZnApCiB7CiAJaW50CQkJcmV0OwogCi0jaWZkZWYgSEFW RV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnApCisJc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxn b3JpdGhtKQogCXsKLQkJcmV0ID0gZ3pnZXRjKGZwLT5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0 ID09IEVPRikKLQkJewotCQkJaWYgKCFnemVvZihmcC0+Y29tcHJlc3NlZGZwKSkKLQkJCQlwZ19m YXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5v KSk7Ci0JCQllbHNlCi0JCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmls ZTogZW5kIG9mIGZpbGUiKTsKLQkJfQotCX0KLQllbHNlCisJCWNhc2UgUEdfQ09NUFJFU1NJT05f Tk9ORToKKwkJCXJldCA9IGZnZXRjKGZwLT5mcCk7CisJCQlpZiAocmV0ID09IEVPRikKKwkJCQlS RUFEX0VSUk9SX0VYSVQoZnAtPmZwKTsKKworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJ T05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCXJldCA9IGd6Z2V0YygoZ3pGaWxlKSBmcC0+ ZnApOworCQkJaWYgKHJldCA9PSBFT0YpCisJCQl7CisJCQkJaWYgKCFnemVvZihmcC0+ZnApKQor CQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVy cm9yKGVycm5vKSk7CisJCQkJZWxzZQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJv bSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCQkJfQorI2Vsc2UKKwkJCXBnX2ZhdGFsKCJu b3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKICNlbmRpZgotCXsKLQkJcmV0ID0gZmdldGMo ZnAtPnVuY29tcHJlc3NlZGZwKTsKLQkJaWYgKHJldCA9PSBFT0YpCi0JCQlSRUFEX0VSUk9SX0VY SVQoZnAtPnVuY29tcHJlc3NlZGZwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGdfZmF0 YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CiAKIAlyZXR1 cm4gcmV0OwpAQCAtNjM3LDY1ICs2OTQsMTA3IEBAIGNmZ2V0YyhjZnAgKmZwKQogY2hhciAqCiBj ZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKQogeworCWNoYXIJICAgKnJldDsKKwor CXN3aXRjaCAoZnAtPmNvbXByZXNzX2FsZ29yaXRobSkKKwl7CisJCWNhc2UgUEdfQ09NUFJFU1NJ T05fTk9ORToKKwkJCXJldCA9IGZnZXRzKGJ1ZiwgbGVuLCBmcC0+ZnApOworCisJCQlicmVhazsK KwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+ Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3pnZXRzKGZwLT5jb21wcmVzc2VkZnAsIGJ1ZiwgbGVu KTsKLQllbHNlCisJCQlyZXQgPSBnemdldHMoZnAtPmZwLCBidWYsIGxlbik7CisjZWxzZQorCQkJ cGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2VuZGlmCi0JCXJldHVy biBmZ2V0cyhidWYsIGxlbiwgZnAtPnVuY29tcHJlc3NlZGZwKTsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVh azsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmY2xvc2UoY2ZwICpmcCkKIHsKLQlp bnQJCQlyZXN1bHQ7CisJaW50CQkJcmV0OwogCiAJaWYgKGZwID09IE5VTEwpCiAJewogCQllcnJu byA9IEVCQURGOwogCQlyZXR1cm4gRU9GOwogCX0KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAt PmNvbXByZXNzZWRmcCkKKworCXN3aXRjaCAoZnAtPmNvbXByZXNzX2FsZ29yaXRobSkKIAl7Ci0J CXJlc3VsdCA9IGd6Y2xvc2UoZnAtPmNvbXByZXNzZWRmcCk7Ci0JCWZwLT5jb21wcmVzc2VkZnAg PSBOVUxMOwotCX0KLQllbHNlCisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9 IGZjbG9zZShmcC0+ZnApOworCQkJZnAtPmZwID0gTlVMTDsKKworCQkJYnJlYWs7CisJCWNhc2Ug UEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCXJldCA9IGd6Y2xvc2Uo ZnAtPmZwKTsKKwkJCWZwLT5mcCA9IE5VTEw7CisjZWxzZQorCQkJcGdfZmF0YWwoIm5vdCBidWls dCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2VuZGlmCi0JewotCQlyZXN1bHQgPSBmY2xvc2UoZnAt PnVuY29tcHJlc3NlZGZwKTsKLQkJZnAtPnVuY29tcHJlc3NlZGZwID0gTlVMTDsKKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7 CisJCQlicmVhazsKIAl9CisKIAlmcmVlX2tlZXBfZXJybm8oZnApOwogCi0JcmV0dXJuIHJlc3Vs dDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmZW9mKGNmcCAqZnApCiB7CisJaW50CQkJcmV0 OworCisJc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtKQorCXsKKwkJY2FzZSBQR19DT01Q UkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZmVvZihmcC0+ZnApOworCisJCQlicmVhazsKKwkJY2Fz ZSBQR19DT01QUkVTU0lPTl9HWklQOgogI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJl c3NlZGZwKQotCQlyZXR1cm4gZ3plb2YoZnAtPmNvbXByZXNzZWRmcCk7Ci0JZWxzZQorCQkJcmV0 ID0gZ3plb2YoZnAtPmZwKTsKKyNlbHNlCisJCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxp YiBzdXBwb3J0Iik7CiAjZW5kaWYKLQkJcmV0dXJuIGZlb2YoZnAtPnVuY29tcHJlc3NlZGZwKTsK KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24g bWV0aG9kIik7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBjb25zdCBjaGFy ICoKIGdldF9jZnBfZXJyb3IoY2ZwICpmcCkKIHsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAt PmNvbXByZXNzZWRmcCkKKwlpZiAoZnAtPmNvbXByZXNzX2FsZ29yaXRobSA9PSBQR19DT01QUkVT U0lPTl9HWklQKQogCXsKKyNpZmRlZiBIQVZFX0xJQloKIAkJaW50CQkJZXJybnVtOwotCQljb25z dCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5jb21wcmVzc2VkZnAsICZlcnJudW0pOworCQlj b25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5mcCwgJmVycm51bSk7CiAKIAkJaWYgKGVy cm51bSAhPSBaX0VSUk5PKQogCQkJcmV0dXJuIGVycm1zZzsKLQl9CisjZWxzZQorCQlwZ19mYXRh bCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CiAjZW5kaWYKKwl9CisKIAlyZXR1cm4g c3RyZXJyb3IoZXJybm8pOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfaW8uaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCmluZGV4IGY2MzU3ODc2OTIu LjJiNDJmMDMwYTggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCkBAIC0xNywxNiArMTcsMjUgQEAKIAog I2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogCisjaWZkZWYgSEFWRV9MSUJaCisjaW5j bHVkZSA8emxpYi5oPgorI2RlZmluZSBHWkNMT1NFKGZoKSBnemNsb3NlKGZoKQorI2RlZmluZSBH WldSSVRFKHAsIHMsIG4sIGZoKSBnendyaXRlKGZoLCBwLCAobikgKiAocykpCisjZGVmaW5lIEda UkVBRChwLCBzLCBuLCBmaCkgZ3pyZWFkKGZoLCBwLCAobikgKiAocykpCisjZGVmaW5lIEdaRU9G KGZoKQlnemVvZihmaCkKKyNlbHNlCisjZGVmaW5lIEdaQ0xPU0UoZmgpIGZjbG9zZShmaCkKKyNk ZWZpbmUgR1pXUklURShwLCBzLCBuLCBmaCkgKGZ3cml0ZShwLCBzLCBuLCBmaCkgKiAocykpCisj ZGVmaW5lIEdaUkVBRChwLCBzLCBuLCBmaCkgZnJlYWQocCwgcywgbiwgZmgpCisjZGVmaW5lIEda RU9GKGZoKQlmZW9mKGZoKQorLyogdGhpcyBpcyBqdXN0IHRoZSByZWRlZmluaXRpb24gb2YgYSBs aWJ6IGNvbnN0YW50ICovCisjZGVmaW5lIFpfREVGQVVMVF9DT01QUkVTU0lPTiAoLTEpCisjZW5k aWYKKwogLyogSW5pdGlhbCBidWZmZXIgc2l6ZXMgdXNlZCBpbiB6bGliIGNvbXByZXNzaW9uLiAq LwogI2RlZmluZSBaTElCX09VVF9TSVpFCTQwOTYKICNkZWZpbmUgWkxJQl9JTl9TSVpFCTQwOTYK IAotdHlwZWRlZiBlbnVtCi17Ci0JQ09NUFJfQUxHX05PTkUsCi0JQ09NUFJfQUxHX0xJQloKLX0g Q29tcHJlc3Npb25BbGdvcml0aG07Ci0KIC8qIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rp b24gdG8gV3JpdGVEYXRhVG9BcmNoaXZlKCkgKi8KIHR5cGVkZWYgdm9pZCAoKldyaXRlRnVuYykg KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwogCkBAIC00 Niw4ICs1NSwxMCBAQCB0eXBlZGVmIHNpemVfdCAoKlJlYWRGdW5jKSAoQXJjaGl2ZUhhbmRsZSAq QUgsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKIC8qIHN0cnVjdCBkZWZpbml0aW9uIGFw cGVhcnMgaW4gY29tcHJlc3NfaW8uYyAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29tcHJlc3NvclN0YXRl IENvbXByZXNzb3JTdGF0ZTsKIAotZXh0ZXJuIENvbXByZXNzb3JTdGF0ZSAqQWxsb2NhdGVDb21w cmVzc29yKGludCBjb21wcmVzc2lvbiwgV3JpdGVGdW5jIHdyaXRlRik7Ci1leHRlcm4gdm9pZCBS ZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBpbnQgY29tcHJlc3Npb24sCitl eHRlcm4gQ29tcHJlc3NvclN0YXRlICpBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjLAorCQkJCQkJCQkJCSAgIFdyaXRlRnVuYyB3 cml0ZUYpOworZXh0ZXJuIHZvaWQgUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpB SCwKKwkJCQkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVj LAogCQkJCQkJCQlSZWFkRnVuYyByZWFkRik7CiBleHRlcm4gdm9pZCBXcml0ZURhdGFUb0FyY2hp dmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCiAJCQkJCQkJICAgY29u c3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pOwpAQCAtNTYsOSArNjcsMTMgQEAgZXh0ZXJuIHZv aWQgRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7 CiAKIHR5cGVkZWYgc3RydWN0IGNmcCBjZnA7CiAKLWV4dGVybiBjZnAgKmNmb3Blbihjb25zdCBj aGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBpbnQgY29tcHJlc3Npb24pOworZXh0ZXJuIGNm cCAqY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJICAgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKTsKK2V4dGVybiBjZnAg KmNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAorCQkJCQlwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpOwogZXh0ZXJuIGNmcCAqY2ZvcGVuX3JlYWQoY29uc3Qg Y2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7Ci1leHRlcm4gY2ZwICpjZm9wZW5fd3JpdGUo Y29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50IGNvbXByZXNzaW9uKTsKK2V4 dGVybiBjZnAgKmNmb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2Rl LAorCQkJCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYyk7 CiBleHRlcm4gaW50CWNmcmVhZCh2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZwKTsKIGV4dGVy biBpbnQJY2Z3cml0ZShjb25zdCB2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZwKTsKIGV4dGVy biBpbnQJY2ZnZXRjKGNmcCAqZnApOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IGZjYzVmNmJkMDUuLmNm OWZhZDQ3MDYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAorKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAgLTIzLDYgKzIzLDcgQEAKICNpZm5kZWYgUEdf QkFDS1VQX0gKICNkZWZpbmUgUEdfQkFDS1VQX0gKIAorI2luY2x1ZGUgImNvbW1vbi9jb21wcmVz c2lvbi5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3NpbXBsZV9saXN0LmgiCiAjaW5jbHVkZSAibGli cHEtZmUuaCIKIApAQCAtMTQzLDcgKzE0NCw4IEBAIHR5cGVkZWYgc3RydWN0IF9yZXN0b3JlT3B0 aW9ucwogCiAJaW50CQkJbm9EYXRhRm9yRmFpbGVkVGFibGVzOwogCWludAkJCWV4aXRfb25fZXJy b3I7Ci0JaW50CQkJY29tcHJlc3Npb247CisJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc19zcGVjOwkvKiBTcGVjaWZpY2F0aW9uIGZvcgorCQkJCQkJCQkJCQkJICogY29tcHJlc3Np b24gKi8KIAlpbnQJCQlzdXBwcmVzc0R1bXBXYXJuaW5nczsJLyogU3VwcHJlc3Mgb3V0cHV0IG9m IFdBUk5JTkcgZW50cmllcwogCQkJCQkJCQkJCSAqIHRvIHN0ZGVyciAqLwogCWJvb2wJCXNpbmds ZV90eG47CkBAIC0zMDMsNyArMzA1LDggQEAgZXh0ZXJuIEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNv bnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCk7CiAKIC8qIENyZWF0 ZSBhIG5ldyBhcmNoaXZlICovCiBleHRlcm4gQXJjaGl2ZSAqQ3JlYXRlQXJjaGl2ZShjb25zdCBj aGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCi0JCQkJCQkJICBjb25zdCBp bnQgY29tcHJlc3Npb24sIGJvb2wgZG9zeW5jLCBBcmNoaXZlTW9kZSBtb2RlLAorCQkJCQkJCSAg Y29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjLAorCQkJCQkJCSAg Ym9vbCBkb3N5bmMsIEFyY2hpdmVNb2RlIG1vZGUsCiAJCQkJCQkJICBTZXR1cFdvcmtlclB0clR5 cGUgc2V0dXBEdW1wV29ya2VyKTsKIAogLyogVGhlIC0tbGlzdCBvcHRpb24gKi8KZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCAyMzMxOThhZmMwLi5mYTg0YzMxZWNiIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC0zMSw2ICszMSw3IEBACiAjZW5kaWYK IAogI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21wcmVzc19pby5oIgog I2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5o IgogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCkBAIC00MywxMyArNDQsNiBAQAogI2RlZmlu ZSBURVhUX0RVTVBfSEVBREVSICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1wXG4tLVxu XG4iCiAjZGVmaW5lIFRFWFRfRFVNUEFMTF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFi YXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIgogCi0vKiBzdGF0ZSBuZWVkZWQgdG8gc2F2ZS9yZXN0 b3JlIGFuIGFyY2hpdmUncyBvdXRwdXQgdGFyZ2V0ICovCi10eXBlZGVmIHN0cnVjdCBfb3V0cHV0 Q29udGV4dAotewotCXZvaWQJICAgKk9GOwotCWludAkJCWd6T3V0OwotfSBPdXRwdXRDb250ZXh0 OwotCiAvKgogICogU3RhdGUgZm9yIHRyYWNraW5nIFRvY0VudHJ5cyB0aGF0IGFyZSByZWFkeSB0 byBwcm9jZXNzIGR1cmluZyBhIHBhcmFsbGVsCiAgKiByZXN0b3JlLiAgKFRoaXMgdXNlZCB0byBi ZSBhIGxpc3QsIGFuZCB3ZSBzdGlsbCBjYWxsIGl0IHRoYXQsIHRob3VnaCBub3cKQEAgLTcwLDcg KzY0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX3BhcmFsbGVsUmVhZHlMaXN0CiAKIAogc3RhdGljIEFy Y2hpdmVIYW5kbGUgKl9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZl Rm9ybWF0IGZtdCwKLQkJCQkJCQkgICBjb25zdCBpbnQgY29tcHJlc3Npb24sIGJvb2wgZG9zeW5j LCBBcmNoaXZlTW9kZSBtb2RlLAorCQkJCQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Nfc3BlYywKKwkJCQkJCQkgICBib29sIGRvc3luYywgQXJjaGl2ZU1vZGUg bW9kZSwKIAkJCQkJCQkgICBTZXR1cFdvcmtlclB0clR5cGUgc2V0dXBXb3JrZXJQdHIpOwogc3Rh dGljIHZvaWQgX2dldE9iamVjdERlc2NyaXB0aW9uKFBRRXhwQnVmZmVyIGJ1ZiwgVG9jRW50cnkg KnRlKTsKIHN0YXRpYyB2b2lkIF9wcmludFRvY0VudHJ5KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqdGUsIGJvb2wgaXNEYXRhKTsKQEAgLTk4LDkgKzkzLDEwIEBAIHN0YXRpYyBpbnQJX2Rp c2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgaW50CVJlc3Rv cmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcF9sb19idWYoQXJj aGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFuZGxl ICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsKLXN0YXRpYyB2b2lkIFNldE91dHB1 dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjb21wcmVzc2lv bik7Ci1zdGF0aWMgT3V0cHV0Q29udGV4dCBTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsK LXN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIE91dHB1dENvbnRl eHQgc2F2ZWRDb250ZXh0KTsKK3N0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpB SCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc19zcGVjKTsKK3N0YXRpYyBjZnAgKlNhdmVPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgpOworc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwg Y2ZwICpzYXZlZE91dHB1dCk7CiAKIHN0YXRpYyBpbnQJcmVzdG9yZV90b2NfZW50cnkoQXJjaGl2 ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBpc19wYXJhbGxlbCk7CiBzdGF0aWMgdm9p ZCByZXN0b3JlX3RvY19lbnRyaWVzX3ByZWZvcmsoQXJjaGl2ZUhhbmRsZSAqQUgsCkBAIC0yMzks MTIgKzIzNSwxMyBAQCBzZXR1cFJlc3RvcmVXb3JrZXIoQXJjaGl2ZSAqQUhYKQogLyogUHVibGlj ICovCiBBcmNoaXZlICoKIENyZWF0ZUFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0 IEFyY2hpdmVGb3JtYXQgZm10LAotCQkJICBjb25zdCBpbnQgY29tcHJlc3Npb24sIGJvb2wgZG9z eW5jLCBBcmNoaXZlTW9kZSBtb2RlLAorCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzX3NwZWMsCisJCQkgIGJvb2wgZG9zeW5jLCBBcmNoaXZlTW9kZSBtb2RlLAog CQkJICBTZXR1cFdvcmtlclB0clR5cGUgc2V0dXBEdW1wV29ya2VyKQogCiB7Ci0JQXJjaGl2ZUhh bmRsZSAqQUggPSBfYWxsb2NBSChGaWxlU3BlYywgZm10LCBjb21wcmVzc2lvbiwgZG9zeW5jLAot CQkJCQkJCQkgbW9kZSwgc2V0dXBEdW1wV29ya2VyKTsKKwlBcmNoaXZlSGFuZGxlICpBSCA9IF9h bGxvY0FIKEZpbGVTcGVjLCBmbXQsIGNvbXByZXNzX3NwZWMsCisJCQkJCQkJCSBkb3N5bmMsIG1v ZGUsIHNldHVwRHVtcFdvcmtlcik7CiAKIAlyZXR1cm4gKEFyY2hpdmUgKikgQUg7CiB9CkBAIC0y NTQsNyArMjUxLDEyIEBAIENyZWF0ZUFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0 IEFyY2hpdmVGb3JtYXQgZm10LAogQXJjaGl2ZSAqCiBPcGVuQXJjaGl2ZShjb25zdCBjaGFyICpG aWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQpCiB7Ci0JQXJjaGl2ZUhhbmRsZSAqQUgg PSBfYWxsb2NBSChGaWxlU3BlYywgZm10LCAwLCB0cnVlLCBhcmNoTW9kZVJlYWQsIHNldHVwUmVz dG9yZVdvcmtlcik7CisJQXJjaGl2ZUhhbmRsZSAqQUg7CisJcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc19zcGVjOworCisJY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01Q UkVTU0lPTl9OT05FOworCUFIID0gX2FsbG9jQUgoRmlsZVNwZWMsIGZtdCwgY29tcHJlc3Nfc3Bl YywgdHJ1ZSwKKwkJCQkgIGFyY2hNb2RlUmVhZCwgc2V0dXBSZXN0b3JlV29ya2VyKTsKIAogCXJl dHVybiAoQXJjaGl2ZSAqKSBBSDsKIH0KQEAgLTI2OSwxMSArMjcxLDggQEAgQ2xvc2VBcmNoaXZl KEFyY2hpdmUgKkFIWCkKIAlBSC0+Q2xvc2VQdHIoQUgpOwogCiAJLyogQ2xvc2UgdGhlIG91dHB1 dCAqLwotCWVycm5vID0gMDsJCQkJCS8qIGluIGNhc2UgZ3pjbG9zZSgpIGRvZXNuJ3Qgc2V0IGl0 ICovCi0JaWYgKEFILT5nek91dCkKLQkJcmVzID0gR1pDTE9TRShBSC0+T0YpOwotCWVsc2UgaWYg KEFILT5PRiAhPSBzdGRvdXQpCi0JCXJlcyA9IGZjbG9zZShBSC0+T0YpOworCWVycm5vID0gMDsK KwlyZXMgPSBjZmNsb3NlKEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJj b3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0zNTUsNyArMzU0LDcgQEAgUmVz dG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1 YmxpYy5yb3B0OwogCWJvb2wJCXBhcmFsbGVsX21vZGU7CiAJVG9jRW50cnkgICAqdGU7Ci0JT3V0 cHV0Q29udGV4dCBzYXY7CisJY2ZwCQkgICAqc2F2OwogCiAJQUgtPnN0YWdlID0gU1RBR0VfSU5J VElBTElaSU5HOwogCkBAIC0zODQsNyArMzgzLDggQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAq QUhYKQogCSAqIE1ha2Ugc3VyZSB3ZSB3b24ndCBuZWVkIChkZSljb21wcmVzc2lvbiB3ZSBoYXZl bid0IGdvdAogCSAqLwogI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoQUgtPmNvbXByZXNzaW9uICE9 IDAgJiYgQUgtPlByaW50VG9jRGF0YVB0ciAhPSBOVUxMKQorCWlmIChBSC0+Y29tcHJlc3Nfc3Bl Yy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCAmJgorCQlBSC0+UHJpbnRUb2NEYXRh UHRyICE9IE5VTEwpCiAJewogCQlmb3IgKHRlID0gQUgtPnRvYy0+bmV4dDsgdGUgIT0gQUgtPnRv YzsgdGUgPSB0ZS0+bmV4dCkKIAkJewpAQCAtNDU5LDggKzQ1OSw4IEBAIFJlc3RvcmVBcmNoaXZl KEFyY2hpdmUgKkFIWCkKIAkgKiBTZXR1cCB0aGUgb3V0cHV0IGZpbGUgaWYgbmVjZXNzYXJ5Lgog CSAqLwogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwotCWlmIChyb3B0LT5maWxlbmFtZSB8fCByb3B0 LT5jb21wcmVzc2lvbikKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29t cHJlc3Npb24pOworCWlmIChyb3B0LT5maWxlbmFtZSB8fCByb3B0LT5jb21wcmVzc19zcGVjLmFs Z29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FKQorCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZp bGVuYW1lLCByb3B0LT5jb21wcmVzc19zcGVjKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBv c3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTczOSw3ICs3MzksNyBAQCBS ZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJICovCiAJQUgtPnN0YWdlID0gU1RBR0VfRklO QUxJWklORzsKIAotCWlmIChyb3B0LT5maWxlbmFtZSB8fCByb3B0LT5jb21wcmVzc2lvbikKKwlp ZiAocm9wdC0+ZmlsZW5hbWUgfHwgcm9wdC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gIT0gUEdf Q09NUFJFU1NJT05fTk9ORSkKIAkJUmVzdG9yZU91dHB1dChBSCwgc2F2KTsKIAogCWlmIChyb3B0 LT51c2VEQikKQEAgLTk2OSw2ICs5NjksOCBAQCBOZXdSZXN0b3JlT3B0aW9ucyh2b2lkKQogCW9w dHMtPmZvcm1hdCA9IGFyY2hVbmtub3duOwogCW9wdHMtPmNwYXJhbXMucHJvbXB0UGFzc3dvcmQg PSBUUklfREVGQVVMVDsKIAlvcHRzLT5kdW1wU2VjdGlvbnMgPSBEVU1QX1VOU0VDVElPTkVEOwor CW9wdHMtPmNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKKwlv cHRzLT5jb21wcmVzc19zcGVjLmxldmVsID0gSU5UX01JTjsKIAogCXJldHVybiBvcHRzOwogfQpA QCAtMTExNSwyMyArMTExNywyOCBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCUFy Y2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25z ICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwogCVRvY0VudHJ5ICAgKnRlOworCXBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gb3V0X2NvbXByZXNzX3NwZWM7CiAJdGVTZWN0aW9uCWN1clNlY3Rpb247 Ci0JT3V0cHV0Q29udGV4dCBzYXY7CisJY2ZwCQkgICAqc2F2OwogCWNvbnN0IGNoYXIgKmZtdE5h bWU7CiAJY2hhcgkJc3RhbXBfc3RyWzY0XTsKIAorCS8qIFRPQyBpcyBhbHdheXMgdW5jb21wcmVz c2VkICovCisJb3V0X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9O RTsKKwogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFtZSkKLQkJU2V0 T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgMCAvKiBubyBjb21wcmVzc2lvbiAqLyApOworCQlT ZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Nfc3BlYyk7CiAKIAlpZiAo c3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1QX1NUUkZUSU1FX0ZN VCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09IDApCiAJCXN0cmNweShzdGFt cF9zdHIsICJbdW5rbm93bl0iKTsKIAogCWFocHJpbnRmKEFILCAiO1xuOyBBcmNoaXZlIGNyZWF0 ZWQgYXQgJXNcbiIsIHN0YW1wX3N0cik7Ci0JYWhwcmludGYoQUgsICI7ICAgICBkYm5hbWU6ICVz XG47ICAgICBUT0MgRW50cmllczogJWRcbjsgICAgIENvbXByZXNzaW9uOiAlZFxuIiwKKwlhaHBy aW50ZihBSCwgIjsgICAgIGRibmFtZTogJXNcbjsgICAgIFRPQyBFbnRyaWVzOiAlZFxuOyAgICAg Q29tcHJlc3Npb246ICVzXG4iLAogCQkJIHNhbml0aXplX2xpbmUoQUgtPmFyY2hkYm5hbWUsIGZh bHNlKSwKLQkJCSBBSC0+dG9jQ291bnQsIEFILT5jb21wcmVzc2lvbik7CisJCQkgQUgtPnRvY0Nv dW50LAorCQkJIGdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShBSC0+Y29tcHJlc3Nfc3BlYy5h bGdvcml0aG0pKTsKIAogCXN3aXRjaCAoQUgtPmZvcm1hdCkKIAl7CkBAIC0xNDg1LDYwICsxNDky LDM1IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQKLVNldE91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjb21wcmVzc2lvbikK K1NldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCSAg Y29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQogewotCWludAkJ CWZuOworCWNvbnN0IGNoYXIgKm1vZGU7CisJaW50CQkJZm4gPSAtMTsKIAogCWlmIChmaWxlbmFt ZSkKIAl7CiAJCWlmIChzdHJjbXAoZmlsZW5hbWUsICItIikgPT0gMCkKIAkJCWZuID0gZmlsZW5v KHN0ZG91dCk7Ci0JCWVsc2UKLQkJCWZuID0gLTE7CiAJfQogCWVsc2UgaWYgKEFILT5GSCkKIAkJ Zm4gPSBmaWxlbm8oQUgtPkZIKTsKIAllbHNlIGlmIChBSC0+ZlNwZWMpCiAJewotCQlmbiA9IC0x OwogCQlmaWxlbmFtZSA9IEFILT5mU3BlYzsKIAl9CiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRv dXQpOwogCi0JLyogSWYgY29tcHJlc3Npb24gZXhwbGljaXRseSByZXF1ZXN0ZWQsIHVzZSBnem9w ZW4gKi8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Npb24gIT0gMCkKLQl7Ci0JCWNo YXIJCWZtb2RlWzE0XTsKKwlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJCW1vZGUg PSBQR19CSU5BUllfQTsKKwllbHNlCisJCW1vZGUgPSBQR19CSU5BUllfVzsKIAotCQkvKiBEb24n dCB1c2UgUEdfQklOQVJZX3ggc2luY2UgdGhpcyBpcyB6bGliICovCi0JCXNwcmludGYoZm1vZGUs ICJ3YiVkIiwgY29tcHJlc3Npb24pOwotCQlpZiAoZm4gPj0gMCkKLQkJCUFILT5PRiA9IGd6ZG9w ZW4oZHVwKGZuKSwgZm1vZGUpOwotCQllbHNlCi0JCQlBSC0+T0YgPSBnem9wZW4oZmlsZW5hbWUs IGZtb2RlKTsKLQkJQUgtPmd6T3V0ID0gMTsKLQl9CisJaWYgKGZuID49IDApCisJCUFILT5PRiA9 IGNmZG9wZW4oZHVwKGZuKSwgbW9kZSwgY29tcHJlc3Nfc3BlYyk7CiAJZWxzZQotI2VuZGlmCi0J ewkJCQkJCQkvKiBVc2UgZm9wZW4gKi8KLQkJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5k KQotCQl7Ci0JCQlpZiAoZm4gPj0gMCkKLQkJCQlBSC0+T0YgPSBmZG9wZW4oZHVwKGZuKSwgUEdf QklOQVJZX0EpOwotCQkJZWxzZQotCQkJCUFILT5PRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5B UllfQSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlpZiAoZm4gPj0gMCkKLQkJCQlBSC0+T0YgPSBm ZG9wZW4oZHVwKGZuKSwgUEdfQklOQVJZX1cpOwotCQkJZWxzZQotCQkJCUFILT5PRiA9IGZvcGVu KGZpbGVuYW1lLCBQR19CSU5BUllfVyk7Ci0JCX0KLQkJQUgtPmd6T3V0ID0gMDsKLQl9CisJCUFI LT5PRiA9IGNmb3BlbihmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3Nfc3BlYyk7CiAKIAlpZiAoIUFI LT5PRikKIAl7CkBAIC0xNTQ5LDMzICsxNTMxLDI0IEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxl ICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjb21wcmVzc2lvbikKIAl9CiB9CiAKLXN0 YXRpYyBPdXRwdXRDb250ZXh0CitzdGF0aWMgY2ZwICoKIFNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgpCiB7Ci0JT3V0cHV0Q29udGV4dCBzYXY7Ci0KLQlzYXYuT0YgPSBBSC0+T0Y7Ci0Jc2F2 Lmd6T3V0ID0gQUgtPmd6T3V0OwotCi0JcmV0dXJuIHNhdjsKKwlyZXR1cm4gKGNmcCAqKSBBSC0+ T0Y7CiB9CiAKIHN0YXRpYyB2b2lkCi1SZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBP dXRwdXRDb250ZXh0IHNhdmVkQ29udGV4dCkKK1Jlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgsIGNmcCAqc2F2ZWRPdXRwdXQpCiB7CiAJaW50CQkJcmVzOwogCi0JZXJybm8gPSAwOwkJCQkJ LyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24ndCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQot CQlyZXMgPSBHWkNMT1NFKEFILT5PRik7Ci0JZWxzZQotCQlyZXMgPSBmY2xvc2UoQUgtPk9GKTsK KwllcnJubyA9IDA7CisJcmVzID0gY2ZjbG9zZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAwKQog CQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIpOwogCi0JQUgtPmd6 T3V0ID0gc2F2ZWRDb250ZXh0Lmd6T3V0OwotCUFILT5PRiA9IHNhdmVkQ29udGV4dC5PRjsKKwlB SC0+T0YgPSBzYXZlZE91dHB1dDsKIH0KIAogCkBAIC0xNjk5LDIyICsxNjcyLDE3IEBAIGFod3Jp dGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCBBcmNoaXZlSGFu ZGxlICpBSCkKIAogCQlieXRlc193cml0dGVuID0gc2l6ZSAqIG5tZW1iOwogCX0KLQllbHNlIGlm IChBSC0+Z3pPdXQpCi0JCWJ5dGVzX3dyaXR0ZW4gPSBHWldSSVRFKHB0ciwgc2l6ZSwgbm1lbWIs IEFILT5PRik7CiAJZWxzZSBpZiAoQUgtPkN1c3RvbU91dFB0cikKIAkJYnl0ZXNfd3JpdHRlbiA9 IEFILT5DdXN0b21PdXRQdHIoQUgsIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAorCS8qCisJICogSWYg d2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBkaXJlY3QgdG8gREIsIGFuZCB3ZSdyZSBj b25uZWN0ZWQKKwkgKiB0aGVuIHNlbmQgaXQgdG8gdGhlIERCLgorCSAqLworCWVsc2UgaWYgKFJl c3RvcmluZ1RvREIoQUgpKQorCQlieXRlc193cml0dGVuID0gRXhlY3V0ZVNxbENvbW1hbmRCdWYo JkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAllbHNlCi0J ewotCQkvKgotCQkgKiBJZiB3ZSdyZSBkb2luZyBhIHJlc3RvcmUsIGFuZCBpdCdzIGRpcmVjdCB0 byBEQiwgYW5kIHdlJ3JlCi0JCSAqIGNvbm5lY3RlZCB0aGVuIHNlbmQgaXQgdG8gdGhlIERCLgot CQkgKi8KLQkJaWYgKFJlc3RvcmluZ1RvREIoQUgpKQotCQkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1 dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBu bWVtYik7Ci0JCWVsc2UKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBmd3JpdGUocHRyLCBzaXplLCBubWVt YiwgQUgtPk9GKSAqIHNpemU7Ci0JfQorCQlieXRlc193cml0dGVuID0gY2Z3cml0ZShwdHIsIHNp emUgKiBubWVtYiwgQUgtPk9GKTsKIAogCWlmIChieXRlc193cml0dGVuICE9IHNpemUgKiBubWVt YikKIAkJV1JJVEVfRVJST1JfRVhJVDsKQEAgLTIxOTgsMTAgKzIxNjYsMTIgQEAgX2Rpc2NvdmVy QXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkKICAqLwogc3RhdGljIEFyY2hpdmVIYW5k bGUgKgogX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQg Zm10LAotCQkgY29uc3QgaW50IGNvbXByZXNzaW9uLCBib29sIGRvc3luYywgQXJjaGl2ZU1vZGUg bW9kZSwKKwkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYywK KwkJIGJvb2wgZG9zeW5jLCBBcmNoaXZlTW9kZSBtb2RlLAogCQkgU2V0dXBXb3JrZXJQdHJUeXBl IHNldHVwV29ya2VyUHRyKQogewogCUFyY2hpdmVIYW5kbGUgKkFIOworCXBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gb3V0X2NvbXByZXNzX3NwZWMgPSB7MH07CiAKIAlwZ19sb2dfZGVidWcoImFs bG9jYXRpbmcgQUggZm9yICVzLCBmb3JtYXQgJWQiLAogCQkJCSBGaWxlU3BlYyA/IEZpbGVTcGVj IDogIihzdGRpbykiLCBmbXQpOwpAQCAtMjI0OSwxNCArMjIxOSwxNCBAQCBfYWxsb2NBSChjb25z dCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJQUgtPnRvYy0+cHJl diA9IEFILT50b2M7CiAKIAlBSC0+bW9kZSA9IG1vZGU7Ci0JQUgtPmNvbXByZXNzaW9uID0gY29t cHJlc3Npb247CisJQUgtPmNvbXByZXNzX3NwZWMgPSBjb21wcmVzc19zcGVjOwogCUFILT5kb3N5 bmMgPSBkb3N5bmM7CiAKIAltZW1zZXQoJihBSC0+c3FscGFyc2UpLCAwLCBzaXplb2YoQUgtPnNx bHBhcnNlKSk7CiAKIAkvKiBPcGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBv dXRwdXQgaGFuZGxlICovCi0JQUgtPmd6T3V0ID0gMDsKLQlBSC0+T0YgPSBzdGRvdXQ7CisJb3V0 X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKKwlBSC0+T0Yg PSBjZmRvcGVuKGR1cChmaWxlbm8oc3Rkb3V0KSksIFBHX0JJTkFSWV9BLCBvdXRfY29tcHJlc3Nf c3BlYyk7CiAKIAkvKgogCSAqIE9uIFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJpbmFyeSBtb2Rl IHRvIHJlYWQvd3JpdGUgbm9uLXRleHQgZmlsZXMsCkBAIC0yMjY0LDcgKzIyMzQsNyBAQCBfYWxs b2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJICog Rm9yY2Ugc3RkaW4vc3Rkb3V0IGludG8gYmluYXJ5IG1vZGUgaWYgdGhhdCBpcyB3aGF0IHdlIGFy ZSB1c2luZy4KIAkgKi8KICNpZmRlZiBXSU4zMgotCWlmICgoZm10ICE9IGFyY2hOdWxsIHx8IGNv bXByZXNzaW9uICE9IDApICYmCisJaWYgKChmbXQgIT0gYXJjaE51bGwgfHwgY29tcHJlc3Nfc3Bl Yy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSkgJiYKIAkJKEFILT5mU3BlYyA9PSBO VUxMIHx8IHN0cmNtcChBSC0+ZlNwZWMsICIiKSA9PSAwKSkKIAl7CiAJCWlmIChtb2RlID09IGFy Y2hNb2RlV3JpdGUpCkBAIC0zNzA1LDcgKzM2NzUsNyBAQCBXcml0ZUhlYWQoQXJjaGl2ZUhhbmRs ZSAqQUgpCiAJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmludFNpemUpOwogCUFILT5Xcml0ZUJ5 dGVQdHIoQUgsIEFILT5vZmZTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Zm9ybWF0 KTsKLQlXcml0ZUludChBSCwgQUgtPmNvbXByZXNzaW9uKTsKKwlXcml0ZUludChBSCwgQUgtPmNv bXByZXNzX3NwZWMubGV2ZWwpOwogCWNydG0gPSAqbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSk7 CiAJV3JpdGVJbnQoQUgsIGNydG0udG1fc2VjKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9taW4p OwpAQCAtMzc3NiwyMSArMzc0NiwyNSBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAkJ cGdfZmF0YWwoImV4cGVjdGVkIGZvcm1hdCAoJWQpIGRpZmZlcnMgZnJvbSBmb3JtYXQgZm91bmQg aW4gZmlsZSAoJWQpIiwKIAkJCQkgQUgtPmZvcm1hdCwgZm10KTsKIAorCUFILT5jb21wcmVzc19z cGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CiAJaWYgKEFILT52ZXJzaW9uID49 IEtfVkVSU18xXzIpCiAJewogCQlpZiAoQUgtPnZlcnNpb24gPCBLX1ZFUlNfMV80KQotCQkJQUgt PmNvbXByZXNzaW9uID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKKwkJCUFILT5jb21wcmVzc19zcGVj LmxldmVsID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKIAkJZWxzZQotCQkJQUgtPmNvbXByZXNzaW9u ID0gUmVhZEludChBSCk7CisJCQlBSC0+Y29tcHJlc3Nfc3BlYy5sZXZlbCA9IFJlYWRJbnQoQUgp OwogCX0KIAllbHNlCi0JCUFILT5jb21wcmVzc2lvbiA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsK KwkJQUgtPmNvbXByZXNzX3NwZWMubGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CiAKKwlp ZiAoQUgtPmNvbXByZXNzX3NwZWMubGV2ZWwgIT0gSU5UX01JTikKICNpZm5kZWYgSEFWRV9MSUJa Ci0JaWYgKEFILT5jb21wcmVzc2lvbiAhPSAwKQogCQlwZ19sb2dfd2FybmluZygiYXJjaGl2ZSBp cyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBjb21w cmVzc2lvbiAtLSBubyBkYXRhIHdpbGwgYmUgYXZhaWxhYmxlIik7CisjZWxzZQorCQlBSC0+Y29t cHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogI2VuZGlmCiAKKwog CWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV80KQogCXsKIAkJc3RydWN0IHRtCWNydG07CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggMDg0Y2Q4N2U4ZC4uMzQxZDQwNjUx NSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtMzIsMzAgKzMyLDYgQEAK IAogI2RlZmluZSBMT0JCVUZTSVpFIDE2Mzg0CiAKLSNpZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRl IDx6bGliLmg+Ci0jZGVmaW5lIEdaQ0xPU0UoZmgpIGd6Y2xvc2UoZmgpCi0jZGVmaW5lIEdaV1JJ VEUocCwgcywgbiwgZmgpIGd6d3JpdGUoZmgsIHAsIChuKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFE KHAsIHMsIG4sIGZoKSBnenJlYWQoZmgsIHAsIChuKSAqIChzKSkKLSNkZWZpbmUgR1pFT0YoZmgp CWd6ZW9mKGZoKQotI2Vsc2UKLSNkZWZpbmUgR1pDTE9TRShmaCkgZmNsb3NlKGZoKQotI2RlZmlu ZSBHWldSSVRFKHAsIHMsIG4sIGZoKSAoZndyaXRlKHAsIHMsIG4sIGZoKSAqIChzKSkKLSNkZWZp bmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBmcmVhZChwLCBzLCBuLCBmaCkKLSNkZWZpbmUgR1pFT0Yo ZmgpCWZlb2YoZmgpCi0vKiB0aGlzIGlzIGp1c3QgdGhlIHJlZGVmaW5pdGlvbiBvZiBhIGxpYnog Y29uc3RhbnQgKi8KLSNkZWZpbmUgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICgtMSkKLQotdHlwZWRl ZiBzdHJ1Y3QgX3pfc3RyZWFtCi17Ci0Jdm9pZAkgICAqbmV4dF9pbjsKLQl2b2lkCSAgICpuZXh0 X291dDsKLQlzaXplX3QJCWF2YWlsX2luOwotCXNpemVfdAkJYXZhaWxfb3V0OwotfSB6X3N0cmVh bTsKLXR5cGVkZWYgel9zdHJlYW0gKnpfc3RyZWFtcDsKLSNlbmRpZgotCiAvKiBEYXRhIGJsb2Nr IHR5cGVzICovCiAjZGVmaW5lIEJMS19EQVRBIDEKICNkZWZpbmUgQkxLX0JMT0JTIDMKQEAgLTMx OSw4ICsyOTUsNyBAQCBzdHJ1Y3QgX2FyY2hpdmVIYW5kbGUKIAogCWNoYXIJICAgKmZTcGVjOwkJ CS8qIEFyY2hpdmUgRmlsZSBTcGVjICovCiAJRklMRQkgICAqRkg7CQkJCS8qIEdlbmVyYWwgcHVy cG9zZSBmaWxlIGhhbmRsZSAqLwotCXZvaWQJICAgKk9GOwotCWludAkJCWd6T3V0OwkJCS8qIE91 dHB1dCBmaWxlICovCisJdm9pZAkgICAqT0Y7CQkJCS8qIE91dHB1dCBmaWxlICovCiAKIAlzdHJ1 Y3QgX3RvY0VudHJ5ICp0b2M7CQkvKiBIZWFkZXIgb2YgY2lyY3VsYXIgbGlzdCBvZiBUT0MgZW50 cmllcyAqLwogCWludAkJCXRvY0NvdW50OwkJLyogTnVtYmVyIG9mIFRPQyBlbnRyaWVzICovCkBA IC0zMzEsMTQgKzMwNiw4IEBAIHN0cnVjdCBfYXJjaGl2ZUhhbmRsZQogCUR1bXBJZAkgICAqdGFi bGVEYXRhSWQ7CS8qIFRBQkxFIERBVEEgaWRzLCBpbmRleGVkIGJ5IHRhYmxlIGR1bXBJZCAqLwog CiAJc3RydWN0IF90b2NFbnRyeSAqY3VyclRvYzsJLyogVXNlZCB3aGVuIGR1bXBpbmcgZGF0YSAq LwotCWludAkJCWNvbXByZXNzaW9uOwkvKi0tLS0tLS0tLQotCQkJCQkJCQkgKiBDb21wcmVzc2lv biByZXF1ZXN0ZWQgb24gb3BlbigpLgotCQkJCQkJCQkgKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIGNv bXByZXNzaW9uOgotCQkJCQkJCQkgKiAtMQlaX0RFRkFVTFRfQ09NUFJFU1NJT04KLQkJCQkJCQkJ ICogIDAJQ09NUFJFU1NJT05fTk9ORQotCQkJCQkJCQkgKiAxLTkgbGV2ZWxzIGZvciBnemlwIGNv bXByZXNzaW9uCi0JCQkJCQkJCSAqLS0tLS0tLS0tCi0JCQkJCQkJCSAqLworCXBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYzsJLyogUmVxdWVzdGVkIHNwZWNpZmljYXRpb24g Zm9yCisJCQkJCQkJCQkJCQkgKiBjb21wcmVzc2lvbiAqLwogCWJvb2wJCWRvc3luYzsJCQkvKiBk YXRhIHJlcXVlc3RlZCB0byBiZSBzeW5jZWQgb24gc2lnaHQgKi8KIAlBcmNoaXZlTW9kZSBtb2Rl OwkJCS8qIEZpbGUgbW9kZSAtIHIgb3IgdyAqLwogCXZvaWQJICAgKmZvcm1hdERhdGE7CQkvKiBI ZWFkZXIgZGF0YSBzcGVjaWZpYyB0byBmaWxlIGZvcm1hdCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf Y3VzdG9tLmMKaW5kZXggMTAyM2ZlYTAxYi4uNDNjY2JlMTMzOSAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2N1c3RvbS5jCkBAIC0yOTgsNyArMjk4LDcgQEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFuZGxl ICpBSCwgVG9jRW50cnkgKnRlKQogCV9Xcml0ZUJ5dGUoQUgsIEJMS19EQVRBKTsJLyogQmxvY2sg dHlwZSAqLwogCVdyaXRlSW50KEFILCB0ZS0+ZHVtcElkKTsJLyogRm9yIHNhbml0eSBjaGVjayAq LwogCi0JY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb24sIF9DdXN0 b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNz X3NwZWMsIF9DdXN0b21Xcml0ZUZ1bmMpOwogfQogCiAvKgpAQCAtMzc3LDcgKzM3Nyw3IEBAIF9T dGFydEJsb2IoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIAogCVdy aXRlSW50KEFILCBvaWQpOwogCi0JY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29t cHJlc3Npb24sIF9DdXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNz b3IoQUgtPmNvbXByZXNzX3NwZWMsIF9DdXN0b21Xcml0ZUZ1bmMpOwogfQogCiAvKgpAQCAtNTY2 LDcgKzU2Niw3IEBAIF9QcmludFRvY0RhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0 ZSkKIHN0YXRpYyB2b2lkCiBfUHJpbnREYXRhKEFyY2hpdmVIYW5kbGUgKkFIKQogewotCVJlYWRE YXRhRnJvbUFyY2hpdmUoQUgsIEFILT5jb21wcmVzc2lvbiwgX0N1c3RvbVJlYWRGdW5jKTsKKwlS ZWFkRGF0YUZyb21BcmNoaXZlKEFILCBBSC0+Y29tcHJlc3Nfc3BlYywgX0N1c3RvbVJlYWRGdW5j KTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfZGlyZWN0b3J5LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCmlu ZGV4IDNmNDZmNzk4OGEuLjE3YzcxMzBjNzUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfZGlyZWN0b3J5LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJl Y3RvcnkuYwpAQCAtMzI3LDcgKzMyNyw4IEBAIF9TdGFydERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgs IFRvY0VudHJ5ICp0ZSkKIAogCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgdGN0eC0+ZmlsZW5hbWUp OwogCi0JY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBBSC0+ Y29tcHJlc3Npb24pOworCWN0eC0+ZGF0YUZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5B UllfVywKKwkJCQkJCQkgICBBSC0+Y29tcHJlc3Nfc3BlYyk7CiAJaWYgKGN0eC0+ZGF0YUZIID09 IE5VTEwpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVt IiwgZm5hbWUpOwogfQpAQCAtNTczLDYgKzU3NCw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhh bmRsZSAqQUgpCiAJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlV3JpdGUpCiAJewogCQljZnAJCSAg ICp0b2NGSDsKKwkJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjOwogCQlj aGFyCQlmbmFtZVtNQVhQR1BBVEhdOwogCiAJCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgInRvYy5k YXQiKTsKQEAgLTU4MSw3ICs1ODMsOCBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI KQogCQljdHgtPnBzdGF0ZSA9IFBhcmFsbGVsQmFja3VwU3RhcnQoQUgpOwogCiAJCS8qIFRoZSBU T0MgaXMgYWx3YXlzIGNyZWF0ZWQgdW5jb21wcmVzc2VkICovCi0JCXRvY0ZIID0gY2ZvcGVuX3dy aXRlKGZuYW1lLCBQR19CSU5BUllfVywgMCk7CisJCWNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0g UEdfQ09NUFJFU1NJT05fTk9ORTsKKwkJdG9jRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJ TkFSWV9XLCBjb21wcmVzc19zcGVjKTsKIAkJaWYgKHRvY0ZIID09IE5VTEwpCiAJCQlwZ19mYXRh bCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIAkJY3R4 LT5kYXRhRkggPSB0b2NGSDsKQEAgLTYzOSwxMiArNjQyLDE0IEBAIHN0YXRpYyB2b2lkCiBfU3Rh cnRCbG9icyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogewogCWxjbENvbnRleHQg KmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCXBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Nfc3BlYzsKIAljaGFyCQlmbmFtZVtNQVhQR1BBVEhdOwogCiAJc2V0 RmlsZVBhdGgoQUgsIGZuYW1lLCAiYmxvYnMudG9jIik7CiAKIAkvKiBUaGUgYmxvYiBUT0MgZmls ZSBpcyBuZXZlciBjb21wcmVzc2VkICovCi0JY3R4LT5ibG9ic1RvY0ZIID0gY2ZvcGVuX3dyaXRl KGZuYW1lLCAiYWIiLCAwKTsKKwljb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNT SU9OX05PTkU7CisJY3R4LT5ibG9ic1RvY0ZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCAiYWIiLCBj b21wcmVzc19zcGVjKTsKIAlpZiAoY3R4LT5ibG9ic1RvY0ZIID09IE5VTEwpCiAJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQpAQCAt NjYyLDcgKzY2Nyw3IEBAIF9TdGFydEJsb2IoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0 ZSwgT2lkIG9pZCkKIAogCXNucHJpbnRmKGZuYW1lLCBNQVhQR1BBVEgsICIlcy9ibG9iXyV1LmRh dCIsIGN0eC0+ZGlyZWN0b3J5LCBvaWQpOwogCi0JY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUo Zm5hbWUsIFBHX0JJTkFSWV9XLCBBSC0+Y29tcHJlc3Npb24pOworCWN0eC0+ZGF0YUZIID0gY2Zv cGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgQUgtPmNvbXByZXNzX3NwZWMpOwogCiAJaWYg KGN0eC0+ZGF0YUZIID09IE5VTEwpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQg ZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKaW5kZXggYmZj NDliNjZkMi4uMDg1ZjVjN2YyMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF90YXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCkBAIC0zNSw2ICsz NSw3IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJjb21tb24vZmlsZV91dGls cy5oIgorI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5n X3V0aWxzLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAjaW5jbHVkZSAicGdf YmFja3VwX3Rhci5oIgpAQCAtMTk0LDcgKzE5NSw3IEBAIEluaXRBcmNoaXZlRm10X1RhcihBcmNo aXZlSGFuZGxlICpBSCkKIAkJICogcG9zc2libGUgc2luY2UgZ3pkb3BlbiB1c2VzIGJ1ZmZlcmVk IElPIHdoaWNoIHRvdGFsbHkgc2NyZXdzIGZpbGUKIAkJICogcG9zaXRpb25pbmcuCiAJCSAqLwot CQlpZiAoQUgtPmNvbXByZXNzaW9uICE9IDApCisJCWlmIChBSC0+Y29tcHJlc3Nfc3BlYy5hbGdv cml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKIAkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiBp cyBub3Qgc3VwcG9ydGVkIGJ5IHRhciBhcmNoaXZlIGZvcm1hdCIpOwogCX0KIAllbHNlCkBAIC0z MjgsNyArMzI5LDcgQEAgdGFyT3BlbihBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmls ZW5hbWUsIGNoYXIgbW9kZSkKIAkJCX0KIAkJfQogCi0JCWlmIChBSC0+Y29tcHJlc3Npb24gPT0g MCkKKwkJaWYgKEFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9O T05FKQogCQkJdG0tPm5GSCA9IGN0eC0+dGFyRkg7CiAJCWVsc2UKIAkJCXBnX2ZhdGFsKCJjb21w cmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRhciBhcmNoaXZlIGZvcm1hdCIpOwpAQCAtMzgz LDcgKzM4NCw3IEBAIHRhck9wZW4oQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVu YW1lLCBjaGFyIG1vZGUpCiAKIAkJdW1hc2sob2xkX3VtYXNrKTsKIAotCQlpZiAoQUgtPmNvbXBy ZXNzaW9uID09IDApCisJCWlmIChBSC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09N UFJFU1NJT05fTk9ORSkKIAkJCXRtLT5uRkggPSB0bS0+dG1wRkg7CiAJCWVsc2UKIAkJCXBnX2Zh dGFsKCJjb21wcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRhciBhcmNoaXZlIGZvcm1hdCIp OwpAQCAtNDAxLDcgKzQwMiw3IEBAIHRhck9wZW4oQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBjaGFyIG1vZGUpCiBzdGF0aWMgdm9pZAogdGFyQ2xvc2UoQXJjaGl2ZUhh bmRsZSAqQUgsIFRBUl9NRU1CRVIgKnRoKQogewotCWlmIChBSC0+Y29tcHJlc3Npb24gIT0gMCkK KwlpZiAoQUgtPmNvbXByZXNzX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUp CiAJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRhciBhcmNoaXZl IGZvcm1hdCIpOwogCiAJaWYgKHRoLT5tb2RlID09ICd3JykKQEAgLTgwMCw3ICs4MDEsNiBAQCBf Q2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQltZW1jcHkocm9wdCwgQUgtPnB1Ymxp Yy5yb3B0LCBzaXplb2YoUmVzdG9yZU9wdGlvbnMpKTsKIAkJcm9wdC0+ZmlsZW5hbWUgPSBOVUxM OwogCQlyb3B0LT5kcm9wU2NoZW1hID0gMTsKLQkJcm9wdC0+Y29tcHJlc3Npb24gPSAwOwogCQly b3B0LT5zdXBlcnVzZXIgPSBOVUxMOwogCQlyb3B0LT5zdXBwcmVzc0R1bXBXYXJuaW5ncyA9IHRy dWU7CiAKQEAgLTg4OCw3ICs4ODgsNyBAQCBfU3RhcnRCbG9iKEFyY2hpdmVIYW5kbGUgKkFILCBU b2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAJaWYgKG9pZCA9PSAwKQogCQlwZ19mYXRhbCgiaW52YWxp ZCBPSUQgZm9yIGxhcmdlIG9iamVjdCAoJXUpIiwgb2lkKTsKIAotCWlmIChBSC0+Y29tcHJlc3Np b24gIT0gMCkKKwlpZiAoQUgtPmNvbXByZXNzX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNT SU9OX05PTkUpCiAJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRh ciBhcmNoaXZlIGZvcm1hdCIpOwogCiAJc3ByaW50ZihmbmFtZSwgImJsb2JfJXUuZGF0Iiwgb2lk KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jCmluZGV4IGM4NzFjYjcyN2QuLmRkMjE0ZTc2NzAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpA QCAtNTQsNyArNTQsOSBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyX2QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGVfZC5oIgorI2luY2x1ZGUgImNvbW1vbi9jb21wcmVzc2lvbi5oIgogI2luY2x1ZGUgImNvbW1v bi9jb25uZWN0LmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJkdW1wdXRp bHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKICNpbmNsdWRlICJmZV91 dGlscy9zdHJpbmdfdXRpbHMuaCIKQEAgLTE2Myw2ICsxNjUsOCBAQCBzdGF0aWMgdm9pZCBzZXR1 cF9jb25uZWN0aW9uKEFyY2hpdmUgKkFILAogCQkJCQkJCSBjb25zdCBjaGFyICpkdW1wZW5jb2Rp bmcsIGNvbnN0IGNoYXIgKmR1bXBzbmFwc2hvdCwKIAkJCQkJCQkgY2hhciAqdXNlX3JvbGUpOwog c3RhdGljIEFyY2hpdmVGb3JtYXQgcGFyc2VBcmNoaXZlRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1h dCwgQXJjaGl2ZU1vZGUgKm1vZGUpOworc3RhdGljIGJvb2wgcGFyc2VfY29tcHJlc3Npb25fb3B0 aW9uKGNvbnN0IGNoYXIgKm9wdCwKKwkJCQkJCQkJCSBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u ICpjb21wcmVzc19zcGVjKTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9zY2hlbWFfbmFtZV9wYXR0ZXJu cyhBcmNoaXZlICpmb3V0LAogCQkJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAog CQkJCQkJCQkJCVNpbXBsZU9pZExpc3QgKm9pZHMsCkBAIC0zMzksOCArMzQzLDkgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJY29uc3QgY2hhciAqZHVtcHNuYXBzaG90ID0gTlVMTDsK IAljaGFyCSAgICp1c2Vfcm9sZSA9IE5VTEw7CiAJaW50CQkJbnVtV29ya2VycyA9IDE7Ci0JaW50 CQkJY29tcHJlc3NMZXZlbCA9IC0xOwogCWludAkJCXBsYWluVGV4dCA9IDA7CisJcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjID0gezB9OworCWJvb2wJCXVzZXJfY29tcHJl c3Npb25fZGVmaW5lZCA9IGZhbHNlOwogCUFyY2hpdmVGb3JtYXQgYXJjaGl2ZUZvcm1hdCA9IGFy Y2hVbmtub3duOwogCUFyY2hpdmVNb2RlIGFyY2hpdmVNb2RlOwogCkBAIC01NjAsMTAgKzU2NSwx MCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlkb3B0LmFjbHNTa2lwID0gdHJ1 ZTsKIAkJCQlicmVhazsKIAotCQkJY2FzZSAnWic6CQkJLyogQ29tcHJlc3Npb24gTGV2ZWwgKi8K LQkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLVovLS1jb21wcmVzcyIsIDAsIDks Ci0JCQkJCQkJCQkgICZjb21wcmVzc0xldmVsKSkKKwkJCWNhc2UgJ1onOgkJCS8qIENvbXByZXNz aW9uICovCisJCQkJaWYgKCFwYXJzZV9jb21wcmVzc2lvbl9vcHRpb24ob3B0YXJnLCAmY29tcHJl c3Nfc3BlYykpCiAJCQkJCWV4aXRfbmljZWx5KDEpOworCQkJCXVzZXJfY29tcHJlc3Npb25fZGVm aW5lZCA9IHRydWU7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgMDoKQEAgLTY4NiwyMyArNjkxLDIz IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmIChhcmNoaXZlRm9ybWF0ID09IGFy Y2hOdWxsKQogCQlwbGFpblRleHQgPSAxOwogCi0JLyogQ3VzdG9tIGFuZCBkaXJlY3RvcnkgZm9y bWF0cyBhcmUgY29tcHJlc3NlZCBieSBkZWZhdWx0LCBvdGhlcnMgbm90ICovCi0JaWYgKGNvbXBy ZXNzTGV2ZWwgPT0gLTEpCisJLyoKKwkgKiBDdXN0b20gYW5kIGRpcmVjdG9yeSBmb3JtYXRzIGFy ZSBjb21wcmVzc2VkIGJ5IGRlZmF1bHQgKHpsaWIpLCBvdGhlcnMKKwkgKiBub3QKKwkgKi8KKwlp ZiAodXNlcl9jb21wcmVzc2lvbl9kZWZpbmVkID09IGZhbHNlKQogCXsKKwkJY29tcHJlc3Nfc3Bl Yy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOworCQljb21wcmVzc19zcGVjLmxldmVs ID0gSU5UX01JTjsKICNpZmRlZiBIQVZFX0xJQloKIAkJaWYgKGFyY2hpdmVGb3JtYXQgPT0gYXJj aEN1c3RvbSB8fCBhcmNoaXZlRm9ybWF0ID09IGFyY2hEaXJlY3RvcnkpCi0JCQljb21wcmVzc0xl dmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwotCQllbHNlCisJCXsKKwkJCWNvbXByZXNzX3Nw ZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKKwkJCWNvbXByZXNzX3NwZWMubGV2 ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisJCX0KICNlbmRpZgotCQkJY29tcHJlc3NMZXZl bCA9IDA7CiAJfQogCi0jaWZuZGVmIEhBVkVfTElCWgotCWlmIChjb21wcmVzc0xldmVsICE9IDAp Ci0JCXBnX2xvZ193YXJuaW5nKCJyZXF1ZXN0ZWQgY29tcHJlc3Npb24gbm90IGF2YWlsYWJsZSBp biB0aGlzIGluc3RhbGxhdGlvbiAtLSBhcmNoaXZlIHdpbGwgYmUgdW5jb21wcmVzc2VkIik7Ci0J Y29tcHJlc3NMZXZlbCA9IDA7Ci0jZW5kaWYKLQogCS8qCiAJICogSWYgZW1pdHRpbmcgYW4gYXJj aGl2ZSBmb3JtYXQsIHdlIGFsd2F5cyB3YW50IHRvIGVtaXQgYSBEQVRBQkFTRSBpdGVtLAogCSAq IGluIGNhc2UgLS1jcmVhdGUgaXMgc3BlY2lmaWVkIGF0IHBnX3Jlc3RvcmUgdGltZS4KQEAgLTcx NSw4ICs3MjAsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcGdfZmF0YWwoInBh cmFsbGVsIGJhY2t1cCBvbmx5IHN1cHBvcnRlZCBieSB0aGUgZGlyZWN0b3J5IGZvcm1hdCIpOwog CiAJLyogT3BlbiB0aGUgb3V0cHV0IGZpbGUgKi8KLQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShmaWxl bmFtZSwgYXJjaGl2ZUZvcm1hdCwgY29tcHJlc3NMZXZlbCwgZG9zeW5jLAotCQkJCQkJIGFyY2hp dmVNb2RlLCBzZXR1cER1bXBXb3JrZXIpOworCWZvdXQgPSBDcmVhdGVBcmNoaXZlKGZpbGVuYW1l LCBhcmNoaXZlRm9ybWF0LCBjb21wcmVzc19zcGVjLAorCQkJCQkJIGRvc3luYywgYXJjaGl2ZU1v ZGUsIHNldHVwRHVtcFdvcmtlcik7CiAKIAkvKiBNYWtlIGR1bXAgb3B0aW9ucyBhY2Nlc3NpYmxl IHJpZ2h0IGF3YXkgKi8KIAlTZXRBcmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwgTlVMTCk7CkBA IC05NDcsMTAgKzk1Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXJvcHQtPnNl cXVlbmNlX2RhdGEgPSBkb3B0LnNlcXVlbmNlX2RhdGE7CiAJcm9wdC0+YmluYXJ5X3VwZ3JhZGUg PSBkb3B0LmJpbmFyeV91cGdyYWRlOwogCi0JaWYgKGNvbXByZXNzTGV2ZWwgPT0gLTEpCi0JCXJv cHQtPmNvbXByZXNzaW9uID0gMDsKLQllbHNlCi0JCXJvcHQtPmNvbXByZXNzaW9uID0gY29tcHJl c3NMZXZlbDsKKwlyb3B0LT5jb21wcmVzc19zcGVjID0gY29tcHJlc3Nfc3BlYzsKIAogCXJvcHQt PnN1cHByZXNzRHVtcFdhcm5pbmdzID0gdHJ1ZTsJLyogV2UndmUgYWxyZWFkeSBzaG93biB0aGVt ICovCiAKQEAgLTk5Nyw3ICs5OTksOCBAQCBoZWxwKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXBy aW50ZihfKCIgIC1qLCAtLWpvYnM9TlVNICAgICAgICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJh bGxlbCBqb2JzIHRvIGR1bXBcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAg ICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24g ICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikp OwotCXByaW50ZihfKCIgIC1aLCAtLWNvbXByZXNzPTAtOSAgICAgICAgICAgY29tcHJlc3Npb24g bGV2ZWwgZm9yIGNvbXByZXNzZWQgZm9ybWF0c1xuIikpOworCXByaW50ZihfKCIgIC1aLCAtLWNv bXByZXNzPU1FVEhPRFs6TEVWRUxdXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb21wcmVzcyBhcyBzcGVjaWZpZWRcbiIpKTsKIAlwcmludGYoXygiICAtLWxvY2std2Fp dC10aW1lb3V0PVRJTUVPVVQgIGZhaWwgYWZ0ZXIgd2FpdGluZyBUSU1FT1VUIGZvciBhIHRhYmxl IGxvY2tcbiIpKTsKIAlwcmludGYoXygiICAtLW5vLXN5bmMgICAgICAgICAgICAgICAgICAgIGRv IG5vdCB3YWl0IGZvciBjaGFuZ2VzIHRvIGJlIHdyaXR0ZW4gc2FmZWx5IHRvIGRpc2tcbiIpKTsK IAlwcmludGYoXygiICAtPywgLS1oZWxwICAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxw LCB0aGVuIGV4aXRcbiIpKTsKQEAgLTEyNTcsNiArMTI2MCwxMTAgQEAgZ2V0X3N5bmNocm9uaXpl ZF9zbmFwc2hvdChBcmNoaXZlICpmb3V0KQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBJ bnRlcnByZXRzIGEgY29tcHJlc3Npb24gb3B0aW9uIG9mIHRoZSBmb3JtYXQgJ21ldGhvZFs6TEVW RUxdJyBvZiBsZWdhY3kganVzdAorICogJ1tMRVZFTF0nLiBJbiB0aGUgbGF0ZXIgZm9ybWF0LCBn emlwIGlzIGltcGxpZWQuIFRoZSBwYXJzZWQgbWV0aG9kIGFuZCBsZXZlbAorICogYXJlIHJldHVy bmVkIGluIHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24uIEluIGNhc2Ugb2YgZXJyb3IsIHRoZSBm dW5jdGlvbgorICogcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGJvb2wKK3BhcnNlX2NvbXBy ZXNzaW9uX29wdGlvbihjb25zdCBjaGFyICpvcHQsCisJCQkJCQkgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiAqY29tcHJlc3Nfc3BlYykKK3sKKwljaGFyCSAgICptZXRob2Q7CisJY29uc3QgY2hh ciAqc2VwOworCWludAkJCW1ldGhvZGxlbjsKKwlib29sCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9 IHRydWU7CisJYm9vbAkJcmVzID0gdHJ1ZTsKKworCS8qIHNldCBkZWZhdWx0cyAqLworCWNvbXBy ZXNzX3NwZWMtPmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CisJY29tcHJlc3Nfc3Bl Yy0+bGV2ZWwgPSBJTlRfTUlOOworCisJLyogZmluZCB0aGUgc2VwYXJhdG9yIGlmIGV4aXN0cyAq LworCXNlcCA9IHN0cmNocihvcHQsICc6Jyk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIHNl cGFyYXRvciwgdGhlbiBpdCBpcyBlaXRoZXIgYSBsZWdhY3kgZm9ybWF0LCBvciBvbmx5CisJICog dGhlIG1ldGhvZCBoYXMgYmVlbiBwYXNzZWQuCisJICovCisJaWYgKCFzZXApCisJeworCQlpZiAo c3Ryc3BuKG9wdCwgIi0wMTIzNDU2Nzg5IikgPT0gc3RybGVuKG9wdCkpCisJCXsKKwkJCXJlcyA9 IG9wdGlvbl9wYXJzZV9pbnQob3B0LCAiLVovLS1jb21wcmVzcyIsIDAsIDksCisJCQkJCQkJCSAg ICYoY29tcHJlc3Nfc3BlYy0+bGV2ZWwpKTsKKwkJCWNvbXByZXNzX3NwZWMtPmFsZ29yaXRobSA9 IChjb21wcmVzc19zcGVjLT5sZXZlbCA+IDApID8KKwkJCQlQR19DT01QUkVTU0lPTl9HWklQIDoK KwkJCQlQR19DT01QUkVTU0lPTl9OT05FOworCQl9CisJCWVsc2UKKwkJeworCQkJbWV0aG9kID0g cGdfc3RyZHVwKG9wdCk7CisJCQlyZXMgPSBwYXJzZV9jb21wcmVzc19hbGdvcml0aG0obWV0aG9k LAorCQkJCQkJCQkJCSAgICZjb21wcmVzc19zcGVjLT5hbGdvcml0aG0pOworCQkJaWYgKCFyZXMp CisJCQkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCBcIiVzXCIgKGd6 aXAsIG5vbmUpIiwKKwkJCQkJCQkgbWV0aG9kKTsKKworCQkJcGdfZnJlZShtZXRob2QpOworCQl9 CisJfQorCWVsc2UKKwl7CisJCS8qIG90aGVyd2lzZSwgaXQgc2hvdWxkIGJlIG1ldGhvZDpMRVZF TCAqLworCQltZXRob2RsZW4gPSBzZXAgLSBvcHQgKyAxOworCQltZXRob2QgPSBwZ19tYWxsb2Mw KG1ldGhvZGxlbik7CisJCXNucHJpbnRmKG1ldGhvZCwgbWV0aG9kbGVuLCAiJS4qcyIsIG1ldGhv ZGxlbiAtIDEsIG9wdCk7CisKKwkJcmVzID0gcGFyc2VfY29tcHJlc3NfYWxnb3JpdGhtKG1ldGhv ZCwgJmNvbXByZXNzX3NwZWMtPmFsZ29yaXRobSk7CisJCWlmIChyZXMpCisJCXsKKwkJCWNoYXIJ ICAgKmVycm9yX2RldGFpbCA9IE5VTEw7CisJCQljaGFyCSAgICpkZXRhaWw7CisKKwkJCXNlcCsr OworCQkJZGV0YWlsID0gcGdfc3RyZHVwKHNlcCk7CisJCQlwYXJzZV9jb21wcmVzc19zcGVjaWZp Y2F0aW9uKGNvbXByZXNzX3NwZWMtPmFsZ29yaXRobSwKKwkJCQkJCQkJCQkgZGV0YWlsLAorCQkJ CQkJCQkJCSBjb21wcmVzc19zcGVjKTsKKwkJCWVycm9yX2RldGFpbCA9IHZhbGlkYXRlX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24oY29tcHJlc3Nfc3BlYyk7CisJCQlpZiAoZXJyb3JfZGV0YWlsICE9 IE5VTEwpCisJCQl7CisJCQkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGNvbXByZXNzaW9uIHNwZWNp ZmljYXRpb246ICVzIiwgZXJyb3JfZGV0YWlsKTsKKwkJCQlyZXMgPSBmYWxzZTsKKwkJCX0KKwor CQkJcGdfZnJlZShkZXRhaWwpOworCQl9CisKKwkJcGdfZnJlZShtZXRob2QpOworCX0KKworCS8q IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciB3aGVuIGFuIGVycm9yIGlzIGFscmVh ZHkgZGV0ZWN0ZWQgKi8KKwlpZiAoIXJlcykKKwkJcmV0dXJuIGZhbHNlOworCisJLyogdmVyaWZ5 IHRoYXQgdGhlIHJlcXVlc3RlZCBjb21wcmVzc2lvbiBpcyBzdXBwb3J0ZWQgKi8KKworCWlmIChj b21wcmVzc19zcGVjLT5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSAmJgorCQljb21w cmVzc19zcGVjLT5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJc3VwcG9ydHNf Y29tcHJlc3Npb24gPSBmYWxzZTsKKworI2lmbmRlZiBIQVZFX0xJQloKKwlpZiAoY29tcHJlc3Nf c3BlYy0+YWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCXN1cHBvcnRzX2NvbXBy ZXNzaW9uID0gZmFsc2U7CisjZW5kaWYKKworCWlmICghc3VwcG9ydHNfY29tcHJlc3Npb24pCisJ eworCQlwZ19sb2dfd2FybmluZygicmVxdWVzdGVkIGNvbXByZXNzaW9uIG5vdCBhdmFpbGFibGUg aW4gdGhpcyBpbnN0YWxsYXRpb24gLS0gYXJjaGl2ZSB3aWxsIGJlIHVuY29tcHJlc3NlZCIpOwor CQljb21wcmVzc19zcGVjLT5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOworCX0KKwor CXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgQXJjaGl2ZUZvcm1hdAogcGFyc2VBcmNoaXZlRm9y bWF0KGNvbnN0IGNoYXIgKmZvcm1hdCwgQXJjaGl2ZU1vZGUgKm1vZGUpCiB7CmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFf YmFzaWMucGwKaW5kZXggYTU4M2M4YTZkMi4uZTFmMWE4ODAxYyAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNp Yy5wbApAQCAtMTIwLDYgKzEyMCwxNiBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJcXIvXFFwZ19y ZXN0b3JlOiBlcnJvcjogY2Fubm90IHNwZWNpZnkgYm90aCAtLXNpbmdsZS10cmFuc2FjdGlvbiBh bmQgbXVsdGlwbGUgam9ic1xFLywKIAkncGdfcmVzdG9yZTogY2Fubm90IHNwZWNpZnkgYm90aCAt LXNpbmdsZS10cmFuc2FjdGlvbiBhbmQgbXVsdGlwbGUgam9icycpOwogCitjb21tYW5kX2ZhaWxz X2xpa2UoCisJWyAncGdfZHVtcCcsICctLWNvbXByZXNzJywgJ2dhcmJhZ2UnIF0sCisJcXIvXFFw Z19kdW1wOiBlcnJvcjogaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgImdhcmJhZ2UiIChnemlw LCBub25lKVxFLywKKwkncGdfZHVtcDogaW52YWxpZCAtLWNvbXByZXNzJyk7CisKK2NvbW1hbmRf ZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wJywgJy0tY29tcHJlc3MnLCAnbm9uZToxJyBdLAorCXFy L1xRcGdfZHVtcDogZXJyb3I6IGludmFsaWQgY29tcHJlc3Npb24gc3BlY2lmaWNhdGlvbjogY29t cHJlc3Npb24gYWxnb3JpdGhtICJub25lIiBkb2VzIG5vdCBhY2NlcHQgYSBjb21wcmVzc2lvbiBs ZXZlbFxFLywKKwkncGdfZHVtcDogaW52YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uOiBj b21wcmVzc2lvbiBhbGdvcml0aG0gIm5vbmUiIGRvZXMgbm90IGFjY2VwdCBhIGNvbXByZXNzaW9u IGxldmVsJyk7CisKIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlbICdwZ19kdW1wJywgJy1aJywgJy0x JyBdLAogCXFyL1xRcGdfZHVtcDogZXJyb3I6IC1aXC8tLWNvbXByZXNzIG11c3QgYmUgaW4gcmFu Z2UgMC4uOVxFLywKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs IGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggMWYwODcxNmY2OS4uYTAy YjU3ODc1MCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTg3LDcgKzg3LDcgQEAgbXkg JXBnZHVtcF9ydW5zID0gKAogCQljb21waWxlX29wdGlvbiA9PiAnZ3ppcCcsCiAJCWR1bXBfY21k ICAgICAgID0+IFsKIAkJCSdwZ19kdW1wJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn LS1qb2JzPTInLAotCQkJJy0tZm9ybWF0PWRpcmVjdG9yeScsICAgICAgICAgICAgICAgICAgICct LWNvbXByZXNzPTEnLAorCQkJJy0tZm9ybWF0PWRpcmVjdG9yeScsICAgICAgICAgICAgICAgICAg ICctLWNvbXByZXNzPWd6aXA6MScsCiAJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6 aXBfZGlyIiwgJ3Bvc3RncmVzJywKIAkJXSwKIAkJIyBHaXZlIGNvdmVyYWdlIGZvciBtYW51YWxs eSBjb21wcmVzc2VkIGJsb2IudG9jIGZpbGVzIGR1cmluZwotLSAKMi4zNC4xCgo= --b1_5IGcN7m7GJLa221lhJtyGUwkm8rhXEBA0IBs9sbZM Content-Type: text/x-patch; name=v7-0003-Add-LZ4-compression-in-pg_-dump-restore.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v7-0003-Add-LZ4-compression-in-pg_-dump-restore.patch RnJvbSA4ZjA3NDQzZTA0ZDJlNjEwNDE0ZDAyM2U4YWE0NDNkOGFhNzg1ZGZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgNSBKdWwgMjAyMiAxMjozNDowOCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjcg My8zXSBBZGQgTFo0IGNvbXByZXNzaW9uIGluIHBnX3tkdW1wfHJlc3RvcmV9CgpXaXRoaW4gY29t cHJlc3NfbHo0LntjLGh9IHRoZSBzdHJlYW1pbmcgQVBJIGFuZCBhIGZpbGUgQVBJIGNvbXByZXNz aW9uIGlzCmltcGxlbWVudGVkLi4gVGhlIGZpcnN0IG9uZSwgaXMgYWltZWQgYXQgaW5saW5lZCB1 c2UgY2FzZXMgYW5kIHRodXMgc2ltcGxlCmx6NC5oIGNhbGxzIGNhbiBiZSB1c2VkIGRpcmVjdGx5 LiBUaGUgc2Vjb25kIG9uZSBpcyBnZW5lcmF0aW5nIG91dHB1dCwgb3IgaXMKcGFyc2luZyBpbnB1 dCwgd2hpY2ggY2FuIGJlIHJlYWQvZ2VuZXJhdGVkIHZpYSB0aGUgbHo0IHV0aWxpdHkuCgpXaGVy ZXZlciB0aGUgTFo0RiBhcGkgZG9lcyBub3QgaW1wbGVtZW50IGFsbCB0aGUgZnVuY3Rpb25hbGl0 eSBjb3JyZXNwb25kaW5nIHRvCmZyZWFkKCksIGZ3cml0ZSgpLCBmZ2V0cygpLCBmZ2V0YygpLCBm ZW9mKCksIGFuZCBmY2xvc2UoKSwgaXQgaGFzIGJlZW4KaW1wbGVtZW50ZWQgbG9jYWx5LgoKQ3Vz dG9tIGNvbXByZXNzZWQgYXJjaGl2ZXMgbmVlZCB0byBub3cgc3RvcmUgdGhlIGNvbXByZXNzaW9u IG1ldGhvZCBpbiB0aGVpcgpoZWFkZXIuIFRoaXMgcmVxdWlyZXMgYSBidW1wIGluIHRoZSB2ZXJz aW9uIG51bWJlci4gVGhlIGxldmVsIG9mIGNvbXByZXNzaW9uIGlzCnN0aWxsIHN0b3JlZCBpbiB0 aGUgZHVtcCwgdGhvdWdoIGFkbWl0dGVkbHkgaXMgb2Ygbm8gYXBwYXJlbnQgdXNlLgotLS0KIGRv Yy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sICAgICAgICB8ICAyMyArLQogc3JjL2Jpbi9wZ19k dW1wL01ha2VmaWxlICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5jICAgICAgICB8ICA0MSArLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jICAg ICAgIHwgNTkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2x6NC5oICAgICAgIHwgICA5ICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuYyB8ICA3MyArKy0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgg fCAgIDQgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgOCArLQog c3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgICAyICstCiBzcmMvYmluL3Bn X2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgfCAgNjkgKysrLQogMTAgZmlsZXMgY2hhbmdlZCwg NzY5IGluc2VydGlvbnMoKyksIDU1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19sejQuaAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKaW5kZXggOTQ4ODVkMDgx Mi4uMTA5NzQ4OGI4MyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKQEAgLTMyOCw5ICszMjgsMTAgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgICAgIG1hY2hpbmUtcmVhZGFibGUgZm9y bWF0IHRoYXQgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPgogICAgICAgICAg ICBjYW4gcmVhZC4gQSBkaXJlY3RvcnkgZm9ybWF0IGFyY2hpdmUgY2FuIGJlIG1hbmlwdWxhdGVk IHdpdGgKICAgICAgICAgICAgc3RhbmRhcmQgVW5peCB0b29sczsgZm9yIGV4YW1wbGUsIGZpbGVz IGluIGFuIHVuY29tcHJlc3NlZCBhcmNoaXZlCi0gICAgICAgICAgIGNhbiBiZSBjb21wcmVzc2Vk IHdpdGggdGhlIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNhdGlvbj4gdG9vbC4KLSAgICAgICAg ICAgVGhpcyBmb3JtYXQgaXMgY29tcHJlc3NlZCBieSBkZWZhdWx0IGFuZCBhbHNvIHN1cHBvcnRz IHBhcmFsbGVsCi0gICAgICAgICAgIGR1bXBzLgorICAgICAgICAgICBjYW4gYmUgY29tcHJlc3Nl ZCB3aXRoIHRoZSA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+IG9yCisgICAgICAgICAg IDxhcHBsaWNhdGlvbj5sejQ8L2FwcGxpY2F0aW9uPnRvb2wuCisgICAgICAgICAgIFRoaXMgZm9y bWF0IGlzIGNvbXByZXNzZWQgYnkgZGVmYXVsdCB1c2luZyA8bGl0ZXJhbD5nemlwPC9saXRlcmFs PgorICAgICAgICAgICBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4KICAgICAgICAg ICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICA8L3Zhcmxpc3RlbnRyeT4K QEAgLTY1MiwxMiArNjUzLDEyIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxw YXJhPgogICAgICAgICBTcGVjaWZ5IHRoZSBjb21wcmVzc2lvbiBtZXRob2QgYW5kL29yIHRoZSBj b21wcmVzc2lvbiBsZXZlbCB0byB1c2UuCiAgICAgICAgIFRoZSBjb21wcmVzc2lvbiBtZXRob2Qg Y2FuIGJlIHNldCB0byA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBvcgotICAgICAgICA8bGl0ZXJh bD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uIEEgY29tcHJlc3Npb24gbGV2ZWwg Y2FuCi0gICAgICAgIGJlIG9wdGlvbmFsbHkgc3BlY2lmaWVkLCBieSBhcHBlbmRpbmcgdGhlIGxl dmVsIG51bWJlciBhZnRlciBhIGNvbG9uCi0gICAgICAgICg8bGl0ZXJhbD46PC9saXRlcmFsPiku IElmIG5vIGxldmVsIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24KLSAgICAg ICAgbGV2ZWwgd2lsbCBiZSB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIG1ldGhvZC4gSWYgb25seSBh IGxldmVsIGlzCi0gICAgICAgIHNwZWNpZmllZCB3aXRob3V0IG1lbnRpb25pbmcgYSBtZXRob2Qs IDxsaXRlcmFsPmd6aXA8L2xpdGVyYWw+IGNvbXByZXNzaW9uCi0gICAgICAgIHdpbGwgYmUgdXNl ZC4KKyAgICAgICAgPGxpdGVyYWw+bHo0PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5ub25lPC9saXRl cmFsPiBmb3Igbm8gY29tcHJlc3Npb24uIEEKKyAgICAgICAgY29tcHJlc3Npb24gbGV2ZWwgY2Fu IGJlIG9wdGlvbmFsbHkgc3BlY2lmaWVkLCBieSBhcHBlbmRpbmcgdGhlIGxldmVsCisgICAgICAg IG51bWJlciBhZnRlciBhIGNvbG9uICg8bGl0ZXJhbD46PC9saXRlcmFsPikuIElmIG5vIGxldmVs IGlzIHNwZWNpZmllZCwKKyAgICAgICAgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwgd2ls bCBiZSB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIG1ldGhvZC4gSWYKKyAgICAgICAgb25seSBhIGxl dmVsIGlzIHNwZWNpZmllZCB3aXRob3V0IG1lbnRpb25pbmcgYSBtZXRob2QsCisgICAgICAgIDxs aXRlcmFsPmd6aXA8L2xpdGVyYWw+IGNvbXByZXNzaW9uIHdpbGxiZSB1c2VkLgogICAgICAgIDwv cGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAtNjY1LDggKzY2Niw4IEBAIFBvc3RncmVTUUwgZG9j dW1lbnRhdGlvbgogICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEgc2VnbWVudHMsIGFuZCB0 aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcyB1c2luZwogICAgICAgICA8bGl0ZXJhbD5nemlwPC9s aXRlcmFsPiBhdCBhIG1vZGVyYXRlIGxldmVsLiBGb3IgcGxhaW4gdGV4dCBvdXRwdXQsCiAgICAg ICAgIHNldHRpbmcgYSBub256ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNhdXNlcyB0aGUgZW50aXJl IG91dHB1dCBmaWxlIHRvIGJlIGNvbXByZXNzZWQsCi0gICAgICAgIGFzIHRob3VnaCBpdCBoYWQg YmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+OyBidXQgdGhl IGRlZmF1bHQKLSAgICAgICAgaXMgbm90IHRvIGNvbXByZXNzLgorICAgICAgICBhcyB0aG91Z2gg aXQgaGFkIGJlZW4gZmVkIHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiBv cgorICAgICAgICA8YXBwbGljYXRpb24+bHo0PC9hcHBsaWNhdGlvbj47IGJ1dCB0aGUgZGVmYXVs dCBpcyBub3QgdG8gY29tcHJlc3MuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAg ICAgICBUaGUgdGFyIGFyY2hpdmUgZm9ybWF0IGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IGNv bXByZXNzaW9uIGF0IGFsbC4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSBi L3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCAyZDc3N2VjMjEzLi4xZjdmZDhkMWYwIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIGV4cG9ydCBHWklQX1BS T0dSQU09JChHWklQKQorZXhwb3J0IExaNAogCiBvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQobGli cHFfc3JjZGlyKSAkKENQUEZMQUdTKQogTERGTEFHU19JTlRFUk5BTCArPSAtTCQodG9wX2J1aWxk ZGlyKS9zcmMvZmVfdXRpbHMgLWxwZ2ZldXRpbHMgJChsaWJwcV9wZ3BvcnQpCkBAIC0yNCw2ICsy NSw3IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwkKHRvcF9idWlsZGRpcikvc3JjL2ZlX3V0aWxz IC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQogT0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBcCiAJ Y29tcHJlc3NfZ3ppcC5vIFwKKwljb21wcmVzc19sejQubyBcCiAJY29tcHJlc3NfaW8ubyBcCiAJ ZHVtcHV0aWxzLm8gXAogCXBhcmFsbGVsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRleCAxOTQ4 ZWUzZDU3Li40ZWYxY2I1MjkxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtMzgsMTMgKzM4LDE1 IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICoJVGhlIGNvbXByZXNzZWQgc3Ry ZWFtIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBDIHN0YW5kYXJkIGZvcGVuKCkgYW5kCi0g KglsaWJ6J3MgZ3pvcGVuKCkgQVBJcy4gSXQgYWxsb3dzIHlvdSB0byB1c2UgdGhlIHNhbWUgZnVu Y3Rpb25zIGZvcgotICoJY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIHN0cmVhbXMuIGNmb3Bl bl9yZWFkKCkgZmlyc3QgdHJpZXMgdG8gb3BlbgotICoJdGhlIGZpbGUgd2l0aCBnaXZlbiBuYW1l LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRvIG9wZW4gdGhlIHNhbWUKLSAqCWZpbGUgd2l0 aCB0aGUgLmd6IHN1ZmZpeC4gY2ZvcGVuX3dyaXRlKCkgb3BlbnMgYSBmaWxlIGZvciB3cml0aW5n LCBhbgotICoJZXh0cmEgYXJndW1lbnQgc3BlY2lmaWVzIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBj b21wcmVzc2VkLCBhbmQgYWRkcyB0aGUKLSAqCS5neiBzdWZmaXggdG8gdGhlIGZpbGVuYW1lIGlm IHNvLiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGhhbmRsZSBib3RoCi0gKgljb21wcmVzc2Vk IGFuZCB1bmNvbXByZXNzZWQgZmlsZXMuCisgKglsaWJ6J3MgZ3pvcGVuKCkgQVBJcyBhbmQgY3Vz dG9tIExaNCBjYWxscyB3aGljaCBwcm92aWRlIHNpbWlsYXIKKyAqCWZ1bmN0aW9uYWxpdHkuIEl0 IGFsbG93cyB5b3UgdG8gdXNlIHRoZSBzYW1lIGZ1bmN0aW9ucyBmb3IgY29tcHJlc3NlZCBhbmQK KyAqCXVuY29tcHJlc3NlZCBzdHJlYW1zLiBjZm9wZW5fcmVhZCgpIGZpcnN0IHRyaWVzIHRvIG9w ZW4gdGhlIGZpbGUgd2l0aCBnaXZlbgorICoJbmFtZSwgYW5kIGlmIGl0IGZhaWxzLCBpdCB0cmll cyB0byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0aCB0aGUgLmd6IHN1ZmZpeCwKKyAqCWZhaWxpbmcg dGhhdCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0aCB0aGUgLmx6NCBzdWZmaXgu CisgKgljZm9wZW5fd3JpdGUoKSBvcGVucyBhIGZpbGUgZm9yIHdyaXRpbmcsIGFuIGV4dHJhIGFy Z3VtZW50IHNwZWNpZmllcyB0aGUKKyAqCW1ldGhvZCB0byB1c2Ugc2hvdWxkIHRoZSBmaWxlIGJl IGNvbXByZXNzZWQsIGFuZCBhZGRzIHRoZSBhcHByb3ByaWF0ZQorICoJc3VmZml4LCAuZ3ogb3Ig Lmx6NCwgdG8gdGhlIGZpbGVuYW1lIGlmIHNvLiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGhh bmRsZQorICoJYm90aCBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgZmlsZXMuCiAgKgogICog SURFTlRJRklDQVRJT04KICAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01 Nyw2ICs1OSw3IEBACiAKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgogI2luY2x1ZGUgImNvbXBy ZXNzX2d6aXAuaCIKKyNpbmNsdWRlICJjb21wcmVzc19sejQuaCIKICNpbmNsdWRlICJwZ19iYWNr dXBfdXRpbHMuaCIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjUsNiArMTI4LDkg QEAgQWxsb2NhdGVDb21wcmVzc29yKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Nfc3BlYywKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogCQkJSW5pdENvbXByZXNz b3JHemlwKGNzLCBjb21wcmVzc19zcGVjLmxldmVsKTsKIAkJCWJyZWFrOworCQljYXNlIFBHX0NP TVBSRVNTSU9OX0xaNDoKKwkJCUluaXRDb21wcmVzc29yTFo0KGNzLCBjb21wcmVzc19zcGVjLmxl dmVsKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJl c3Npb24gbWV0aG9kIik7CiAJCQlicmVhazsKQEAgLTE3NSw2ICsxODEsNyBAQCBmcmVlX2tlZXBf ZXJybm8odm9pZCAqcCkKIC8qCiAgKiBDb21wcmVzc2lvbiBOb25lIGltcGxlbWVudGF0aW9uCiAg Ki8KKwogc3RhdGljIHNpemVfdAogX3JlYWQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJl c3NGaWxlSGFuZGxlICogQ0ZIKQogewpAQCAtMzEwLDYgKzMxNyw5IEBAIEluaXRDb21wcmVzc0Zp bGVIYW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQog CQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAJCQlJbml0Q29tcHJlc3NHemlwKENGSCwgY29t cHJlc3Nfc3BlYy5sZXZlbCk7CiAJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6 CisJCQlJbml0Q29tcHJlc3NMWjQoQ0ZILCBjb21wcmVzc19zcGVjLmxldmVsKTsKKwkJCWJyZWFr OwogCQlkZWZhdWx0OgogCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7 CiAJCQlicmVhazsKQEAgLTMyMiwxMiArMzMyLDEyIEBAIEluaXRDb21wcmVzc0ZpbGVIYW5kbGUo Y29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQogICogT3BlbiBh IGZpbGUgZm9yIHJlYWRpbmcuICdwYXRoJyBpcyB0aGUgZmlsZSB0byBvcGVuLCBhbmQgJ21vZGUn IHNob3VsZAogICogYmUgZWl0aGVyICJyIiBvciAicmIiLgogICoKLSAqIElmIHRoZSBmaWxlIGF0 ICdwYXRoJyBkb2VzIG5vdCBleGlzdCwgd2UgYXBwZW5kIHRoZSAiLmd6IiBzdWZmaXggKGlmCisg KiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9lcyBub3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUgInsu Z3osLmx6NH0iIHN1ZmZpeCAoaQogICogJ3BhdGgnIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0KSBh bmQgdHJ5IGFnYWluLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcwotICogJ3BhdGgnLCB0aGlzIHdp bGwgb3BlbiBlaXRoZXIgImZvbyIgb3IgImZvby5neiIsIHRyeWluZyBpbiB0aGF0IG9yZGVyLgor ICogJ3BhdGgnLCB0aGlzIHdpbGwgb3BlbiBlaXRoZXIgImZvbyIgb3IgImZvby5neiIgb3IgImZv by5sejQiLCB0cnlpbmcgaW4gdGhhdAorICogb3JkZXIuCiAgKgogICogT24gZmFpbHVyZSwgcmV0 dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgotICoKICAqLwogQ29tcHJlc3NG aWxlSGFuZGxlICoKIEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpw YXRoLCBjb25zdCBjaGFyICptb2RlKQpAQCAtMzYzLDYgKzM3MywxNyBAQCBJbml0RGlzY292ZXJD b21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKIAkJ CWlmIChleGlzdHMpCiAJCQkJY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lP Tl9HWklQOwogCQl9CisjZW5kaWYKKyNpZmRlZiBVU0VfTFo0CisJCWlmICghZXhpc3RzKQorCQl7 CisJCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOworCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMubHo0 IiwgcGF0aCk7CisJCQlleGlzdHMgPSAoc3RhdChmbmFtZSwgJnN0KSA9PSAwKTsKKworCQkJaWYg KGV4aXN0cykKKwkJCQljb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0xa NDsKKwkJfQogI2VuZGlmCiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfbHo0LmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmY0NjgwYzM0NAotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuYwpAQCAtMCwwICsxLDU5MyBAQAorI2luY2x1ZGUg InBvc3RncmVzX2ZlLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCisKKyNpbmNsdWRl ICJjb21wcmVzc19sejQuaCIKKworI2lmZGVmIFVTRV9MWjQKKyNpbmNsdWRlIDxsejQuaD4KKyNp bmNsdWRlIDxsejRmcmFtZS5oPgorCisjZGVmaW5lIExaNF9PVVRfU0laRQkoNCAqIDEwMjQpCisj ZGVmaW5lIExaNF9JTl9TSVpFCQkoMTYgKiAxMDI0KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit0 eXBlZGVmIHN0cnVjdCBMWjRDb21wcmVzc29yU3RhdGUKK3sKKwljaGFyCSAgICpvdXRidWY7CisJ c2l6ZV90CQlvdXRzaXplOworfQkJCUxaNENvbXByZXNzb3JTdGF0ZTsKKworLyogUHJpdmF0ZSBy b3V0aW5lcyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2 b2lkIFJlYWREYXRhRnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MpOworc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5k bGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEs IHNpemVfdCBkTGVuKTsKK3N0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JMWjQoQXJjaGl2ZUhhbmRs ZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOworCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9t QXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlM WjRfc3RyZWFtRGVjb2RlX3QgbHo0U3RyZWFtRGVjb2RlOworCWNoYXIJICAgKmJ1ZjsKKwljaGFy CSAgICpkZWNidWY7CisJc2l6ZV90CQlidWZsZW47CisJc2l6ZV90CQljbnQ7CisKKwlidWZsZW4g PSBMWjRfSU5fU0laRTsKKwlidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKwlkZWNidWYgPSBwZ19t YWxsb2MoYnVmbGVuKTsKKworCUxaNF9zZXRTdHJlYW1EZWNvZGUoJmx6NFN0cmVhbURlY29kZSwg TlVMTCwgMCk7CisKKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1Zmxlbikp KQorCXsKKwkJaW50CQkJZGVjQnl0ZXMgPSBMWjRfZGVjb21wcmVzc19zYWZlX2NvbnRpbnVlKCZs ejRTdHJlYW1EZWNvZGUsCisJCQkJCQkJCQkJCQkJCQlidWYsIGRlY2J1ZiwKKwkJCQkJCQkJCQkJ CQkJCWNudCwgYnVmbGVuKTsKKworCQlhaHdyaXRlKGRlY2J1ZiwgMSwgZGVjQnl0ZXMsIEFIKTsK Kwl9CisKKwlwZ19mcmVlKGJ1Zik7CisJcGdfZnJlZShkZWNidWYpOworfQorCitzdGF0aWMgdm9p ZAorV3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzLAorCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCUxaNENv bXByZXNzb3JTdGF0ZSAqTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRl OworCXNpemVfdAkJY29tcHJlc3NlZDsKKwlzaXplX3QJCXJlcXVpcmVkc2l6ZSA9IExaNF9jb21w cmVzc0JvdW5kKGRMZW4pOworCisJaWYgKHJlcXVpcmVkc2l6ZSA+IExaNGNzLT5vdXRzaXplKQor CXsKKwkJTFo0Y3MtPm91dGJ1ZiA9IHBnX3JlYWxsb2MoTFo0Y3MtPm91dGJ1ZiwgcmVxdWlyZWRz aXplKTsKKwkJTFo0Y3MtPm91dHNpemUgPSByZXF1aXJlZHNpemU7CisJfQorCisJY29tcHJlc3Nl ZCA9IExaNF9jb21wcmVzc19kZWZhdWx0KGRhdGEsIExaNGNzLT5vdXRidWYsCisJCQkJCQkJCQkg IGRMZW4sIExaNGNzLT5vdXRzaXplKTsKKworCWlmIChjb21wcmVzc2VkIDw9IDApCisJCXBnX2Zh dGFsKCJmYWlsZWQgdG8gTFo0IGNvbXByZXNzIGRhdGEiKTsKKworCWNzLT53cml0ZUYoQUgsIExa NGNzLT5vdXRidWYsIGNvbXByZXNzZWQpOworfQorCitzdGF0aWMgdm9pZAorRW5kQ29tcHJlc3Nv ckxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlMWjRDb21w cmVzc29yU3RhdGUgKkxaNGNzOworCisJTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNz LT5wcml2YXRlOworCWlmIChMWjRjcykKKwl7CisJCXBnX2ZyZWUoTFo0Y3MtPm91dGJ1Zik7CisJ CXBnX2ZyZWUoTFo0Y3MpOworCQljcy0+cHJpdmF0ZSA9IE5VTEw7CisJfQorfQorCisKKy8qIFB1 YmxpYyByb3V0aW5lcyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3Zv aWQKK0luaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3MsIGludCBjb21wcmVzc2lv bkxldmVsKQoreworCWNzLT5yZWFkRGF0YSA9IFJlYWREYXRhRnJvbUFyY2hpdmVMWjQ7CisJY3Mt PndyaXRlRGF0YSA9IFdyaXRlRGF0YVRvQXJjaGl2ZUxaNDsKKwljcy0+ZW5kID0gRW5kQ29tcHJl c3NvckxaNDsKKworCS8qIFdpbGwgYmUgbGF6eSBpbml0J2QgKi8KKwljcy0+cHJpdmF0ZSA9IHBn X21hbGxvYzAoc2l6ZW9mKExaNENvbXByZXNzb3JTdGF0ZSkpOworfQorCisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqIENvbXByZXNzIEZpbGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworCisvKgorICogU3RhdGUgbmVlZGVkIGZvciBMWjQgKGRlKWNvbXByZXNzaW9uIHVz aW5nIHRoZSBDb21wcmVzc0ZpbGVIYW5kbGUgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBMWjRG aWxlCit7CisJRklMRQkgICAqZnA7CisKKwlMWjRGX3ByZWZlcmVuY2VzX3QgcHJlZnM7CisKKwlM WjRGX2NvbXByZXNzaW9uQ29udGV4dF90IGN0eDsKKwlMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0 X3QgZHR4OworCisJYm9vbAkJaW5pdGVkOworCWJvb2wJCWNvbXByZXNzaW5nOworCisJc2l6ZV90 CQlidWZsZW47CisJY2hhcgkgICAqYnVmZmVyOworCisJc2l6ZV90CQlvdmVyZmxvd2FsbG9jbGVu OworCXNpemVfdAkJb3ZlcmZsb3dsZW47CisJY2hhcgkgICAqb3ZlcmZsb3didWY7CisKKwlzaXpl X3QJCWVycmNvZGU7Cit9CQkJTFo0RmlsZTsKKworLyoKKyAqIExaNCBlcXVpdmFsZW50IHRvIGZl b2YoKSBvciBnemVvZigpLiBUaGUgZW5kIG9mIGZpbGUKKyAqIGlzIHJlYWNoZWQgaWYgdGhlcmUg aXMgbm8gZGVjb21wcmVzc2VkIG91dHB1dCBpbiB0aGUKKyAqIG92ZXJmbG93IGJ1ZmZlciBhbmQg dGhlIGVuZCBvZiB0aGUgZmlsZSBpcyByZWFjaGVkLgorICovCitzdGF0aWMgaW50CitMWjRGaWxl X2VvZihDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0 RmlsZSAqKSBDRkgtPnByaXZhdGU7CisKKwlyZXR1cm4gZnMtPm92ZXJmbG93bGVuID09IDAgJiYg ZmVvZihmcy0+ZnApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitMWjRGaWxlX2dldF9lcnJv cihDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0Rmls ZSAqKSBDRkgtPnByaXZhdGU7CisJY29uc3QgY2hhciAqZXJybXNnOworCisJaWYgKExaNEZfaXNF cnJvcihmcy0+ZXJyY29kZSkpCisJCWVycm1zZyA9IExaNEZfZ2V0RXJyb3JOYW1lKGZzLT5lcnJj b2RlKTsKKwllbHNlCisJCWVycm1zZyA9IHN0cmVycm9yKGVycm5vKTsKKworCXJldHVybiBlcnJt c2c7Cit9CisKKy8qCisgKiBQcmVwYXJlIGFuIGFscmVhZHkgYWxsb2MnZWQgTFo0RmlsZSBzdHJ1 Y3QgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCisgKgorICogSXQgY3JlYXRlcyB0aGUgbmVzc2FyeSBj b250ZXh0cyBmb3IgdGhlIG9wZXJhdGlvbnMuIFdoZW4gY29tcHJlc3NpbmcsCisgKiBpdCBhZGRp dGlvbmFsbHkgd3JpdGVzIHRoZSBMWjQgaGVhZGVyIGluIHRoZSBvdXRwdXQgc3RyZWFtLgorICov CitzdGF0aWMgaW50CitMWjRGaWxlX2luaXQoTFo0RmlsZSAqIGZzLCBpbnQgc2l6ZSwgYm9vbCBj b21wcmVzc2luZykKK3sKKwlzaXplX3QJCXN0YXR1czsKKworCWlmIChmcy0+aW5pdGVkKQorCQly ZXR1cm4gMDsKKworCWZzLT5jb21wcmVzc2luZyA9IGNvbXByZXNzaW5nOworCWZzLT5pbml0ZWQg PSB0cnVlOworCisJaWYgKGZzLT5jb21wcmVzc2luZykKKwl7CisJCWZzLT5idWZsZW4gPSBMWjRG X2NvbXByZXNzQm91bmQoTFo0X0lOX1NJWkUsICZmcy0+cHJlZnMpOworCQlpZiAoZnMtPmJ1Zmxl biA8IExaNEZfSEVBREVSX1NJWkVfTUFYKQorCQkJZnMtPmJ1ZmxlbiA9IExaNEZfSEVBREVSX1NJ WkVfTUFYOworCisJCXN0YXR1cyA9IExaNEZfY3JlYXRlQ29tcHJlc3Npb25Db250ZXh0KCZmcy0+ Y3R4LCBMWjRGX1ZFUlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJ CWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlmcy0+YnVmZmVy ID0gcGdfbWFsbG9jKGZzLT5idWZsZW4pOworCQlzdGF0dXMgPSBMWjRGX2NvbXByZXNzQmVnaW4o ZnMtPmN0eCwgZnMtPmJ1ZmZlciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSZmcy0+cHJlZnMpOwor CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0 dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3Rh dHVzLCBmcy0+ZnApICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSBlcnJubyA/IDogRU5PU1BD OworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJc3RhdHVzID0gTFo0Rl9jcmVh dGVEZWNvbXByZXNzaW9uQ29udGV4dCgmZnMtPmR0eCwgTFo0Rl9WRVJTSU9OKTsKKwkJaWYgKExa NEZfaXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCXJl dHVybiAxOworCQl9CisKKwkJZnMtPmJ1ZmxlbiA9IHNpemUgPiBMWjRfT1VUX1NJWkUgPyBzaXpl IDogTFo0X09VVF9TSVpFOworCQlmcy0+YnVmZmVyID0gcGdfbWFsbG9jKGZzLT5idWZsZW4pOwor CisJCWZzLT5vdmVyZmxvd2FsbG9jbGVuID0gZnMtPmJ1ZmxlbjsKKwkJZnMtPm92ZXJmbG93YnVm ID0gcGdfbWFsbG9jKGZzLT5vdmVyZmxvd2FsbG9jbGVuKTsKKwkJZnMtPm92ZXJmbG93bGVuID0g MDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgYWxyZWFkeSBkZWNvbXByZXNz ZWQgY29udGVudCBmcm9tIHRoZSBvdmVyZmxvdyBidWZmZXIgaW50byAncHRyJyB1cCB0bworICog J3NpemUnIGJ5dGVzLCBpZiBhdmFpbGFibGUuIElmIHRoZSBlb2xfZmxhZyBpcyBzZXQsIHRoZW4g c3RvcCBhdCB0aGUgZmlyc3QKKyAqIG9jY3VyYW5jZSBvZiB0aGUgbmV3IGxpbmUgY2hhciBwcmlv ciB0byAnc2l6ZScgYnl0ZXMuCisgKgorICogQW55IHVucmVhZCBjb250ZW50IGluIHRoZSBvdmVy ZmxvdyBidWZmZXIsIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcuCisgKi8KK3N0YXRpYyBpbnQK K0xaNEZpbGVfcmVhZF9vdmVyZmxvdyhMWjRGaWxlICogZnMsIHZvaWQgKnB0ciwgaW50IHNpemUs IGJvb2wgZW9sX2ZsYWcpCit7CisJY2hhcgkgICAqcDsKKwlpbnQJCQlyZWFkbGVuID0gMDsKKwor CWlmIChmcy0+b3ZlcmZsb3dsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnMtPm92ZXJm bG93bGVuID49IHNpemUpCisJCXJlYWRsZW4gPSBzaXplOworCWVsc2UKKwkJcmVhZGxlbiA9IGZz LT5vdmVyZmxvd2xlbjsKKworCWlmIChlb2xfZmxhZyAmJiAocCA9IG1lbWNocihmcy0+b3ZlcmZs b3didWYsICdcbicsIHJlYWRsZW4pKSkKKwkJLyogSW5jbHVkZSB0aGUgbGluZSB0ZXJtaW5hdGlu ZyBjaGFyICovCisJCXJlYWRsZW4gPSBwIC0gZnMtPm92ZXJmbG93YnVmICsgMTsKKworCW1lbWNw eShwdHIsIGZzLT5vdmVyZmxvd2J1ZiwgcmVhZGxlbik7CisJZnMtPm92ZXJmbG93bGVuIC09IHJl YWRsZW47CisKKwlpZiAoZnMtPm92ZXJmbG93bGVuID4gMCkKKwkJbWVtbW92ZShmcy0+b3ZlcmZs b3didWYsIGZzLT5vdmVyZmxvd2J1ZiArIHJlYWRsZW4sIGZzLT5vdmVyZmxvd2xlbik7CisKKwly ZXR1cm4gcmVhZGxlbjsKK30KKworLyoKKyAqIFRoZSB3b3JraG9yc2UgZm9yIHJlYWRpbmcgZGVj b21wcmVzc2VkIGNvbnRlbnQgb3V0IG9mIGFuIExaNCBjb21wcmVzc2VkCisgKiBzdHJlYW0uCisg KgorICogSXQgd2lsbCByZWFkIHVwIHRvICdwdHJzaXplJyBkZWNvbXByZXNzZWQgY29udGVudCwg b3IgdXAgdG8gdGhlIG5ldyBsaW5lIGNoYXIKKyAqIGlmIGZvdW5kIGZpcnN0IHdoZW4gdGhlIGVv bF9mbGFnIGlzIHNldC4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZGVjb21wcmVzc2VkCisgKiBv dXRwdXQgZ2VuZXJhdGVkIGJ5IHJlYWRpbmcgYW55IGNvbXByZXNzZWQgaW5wdXQgdmlhIHRoZSBM WjRGIEFQSSwgZXhjZWVkcworICogJ3B0cnNpemUnLiBBbnkgZXhjZWVkaW5nIGRlY29tcHJlc3Nl ZCBjb250ZW50IGlzIHN0b3JlZCBhdCBhbiBvdmVyZmxvdworICogYnVmZmVyIHdpdGhpbiBMWjRG aWxlLiBPZiBjb3Vyc2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgd2lsbCBmaXJz dAorICogdHJ5IHRvIGNvbnN1bWUgYW55IGRlY29tcHJlc3NlZCBjb250ZW50IGFscmVhZHkgcHJl c2VudCBpbiB0aGUgb3ZlcmZsb3cKKyAqIGJ1ZmZlciwgYmVmb3JlIGRlY29tcHJlc3NpbmcgbmV3 IGNvbnRlbnQuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfcmVhZF9pbnRlcm5hbChMWjRGaWxl ICogZnMsIHZvaWQgKnB0ciwgaW50IHB0cnNpemUsIGJvb2wgZW9sX2ZsYWcpCit7CisJc2l6ZV90 CQlkc2l6ZSA9IDA7CisJc2l6ZV90CQlyc2l6ZTsKKwlzaXplX3QJCXNpemUgPSBwdHJzaXplOwor CWJvb2wJCWVvbF9mb3VuZCA9IGZhbHNlOworCisJdm9pZAkgICAqcmVhZGJ1ZjsKKworCS8qIExh enkgaW5pdCAqLworCWlmICghZnMtPmluaXRlZCAmJiBMWjRGaWxlX2luaXQoZnMsIHNpemUsIGZh bHNlIC8qIGRlY29tcHJlc3NpbmcgKi8gKSkKKwkJcmV0dXJuIC0xOworCisJLyogVmVyZml5IHRo YXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBvdXRidWYgKi8KKwlpZiAoc2l6ZSA+IGZz LT5idWZsZW4pCisJeworCQlmcy0+YnVmbGVuID0gc2l6ZTsKKwkJZnMtPmJ1ZmZlciA9IHBnX3Jl YWxsb2MoZnMtPmJ1ZmZlciwgc2l6ZSk7CisJfQorCisJLyogdXNlIGFscmVhZHkgZGVjb21wcmVz c2VkIGNvbnRlbnQgaWYgYXZhaWxhYmxlICovCisJZHNpemUgPSBMWjRGaWxlX3JlYWRfb3ZlcmZs b3coZnMsIHB0ciwgc2l6ZSwgZW9sX2ZsYWcpOworCWlmIChkc2l6ZSA9PSBzaXplIHx8IChlb2xf ZmxhZyAmJiBtZW1jaHIocHRyLCAnXG4nLCBkc2l6ZSkpKQorCQlyZXR1cm4gZHNpemU7CisKKwly ZWFkYnVmID0gcGdfbWFsbG9jKHNpemUpOworCisJZG8KKwl7CisJCWNoYXIJICAgKnJwOworCQlj aGFyCSAgICpyZW5kOworCisJCXJzaXplID0gZnJlYWQocmVhZGJ1ZiwgMSwgc2l6ZSwgZnMtPmZw KTsKKwkJaWYgKHJzaXplIDwgc2l6ZSAmJiAhZmVvZihmcy0+ZnApKQorCQkJcmV0dXJuIC0xOwor CisJCXJwID0gKGNoYXIgKikgcmVhZGJ1ZjsKKwkJcmVuZCA9IChjaGFyICopIHJlYWRidWYgKyBy c2l6ZTsKKworCQl3aGlsZSAocnAgPCByZW5kKQorCQl7CisJCQlzaXplX3QJCXN0YXR1czsKKwkJ CXNpemVfdAkJb3V0bGVuID0gZnMtPmJ1ZmxlbjsKKwkJCXNpemVfdAkJcmVhZF9yZW1haW4gPSBy ZW5kIC0gcnA7CisKKwkJCW1lbXNldChmcy0+YnVmZmVyLCAwLCBvdXRsZW4pOworCQkJc3RhdHVz ID0gTFo0Rl9kZWNvbXByZXNzKGZzLT5kdHgsIGZzLT5idWZmZXIsICZvdXRsZW4sCisJCQkJCQkJ CQkgcnAsICZyZWFkX3JlbWFpbiwgTlVMTCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykp CisJCQl7CisJCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQkJcmV0dXJuIC0xOworCQkJfQor CisJCQlycCArPSByZWFkX3JlbWFpbjsKKworCQkJLyoKKwkJCSAqIGZpbGwgaW4gd2hhdCBzcGFj ZSBpcyBhdmFpbGFibGUgaW4gcHRyIGlmIHRoZSBlb2wgZmxhZyBpcyBzZXQsCisJCQkgKiBlaXRo ZXIgc2tpcCBpZiBvbmUgYWxyZWFkeSBmb3VuZCBvciBmaWxsIHVwIHRvIEVPTCBpZiBwcmVzZW50 CisJCQkgKiBpbiB0aGUgb3V0YnVmCisJCQkgKi8KKwkJCWlmIChvdXRsZW4gPiAwICYmIGRzaXpl IDwgc2l6ZSAmJiBlb2xfZm91bmQgPT0gZmFsc2UpCisJCQl7CisJCQkJY2hhcgkgICAqcDsKKwkJ CQlzaXplX3QJCWxpYiA9IChlb2xfZmxhZyA9PSAwKSA/IHNpemUgLSBkc2l6ZSA6IHNpemUgLSAx IC0gZHNpemU7CisJCQkJc2l6ZV90CQlsZW4gPSBvdXRsZW4gPCBsaWIgPyBvdXRsZW4gOiBsaWI7 CisKKwkJCQlpZiAoZW9sX2ZsYWcgPT0gdHJ1ZSAmJgorCQkJCQkocCA9IG1lbWNocihmcy0+YnVm ZmVyLCAnXG4nLCBvdXRsZW4pKSAmJgorCQkJCQkoc2l6ZV90KSAocCAtIGZzLT5idWZmZXIgKyAx KSA8PSBsZW4pCisJCQkJeworCQkJCQlsZW4gPSBwIC0gZnMtPmJ1ZmZlciArIDE7CisJCQkJCWVv bF9mb3VuZCA9IHRydWU7CisJCQkJfQorCisJCQkJbWVtY3B5KChjaGFyICopIHB0ciArIGRzaXpl LCBmcy0+YnVmZmVyLCBsZW4pOworCQkJCWRzaXplICs9IGxlbjsKKworCQkJCS8qIG1vdmUgd2hh dCBkaWQgbm90IGZpdCwgaWYgYW55LCBhdCB0aGUgYmVnaW5pbmcgb2YgdGhlIGJ1ZiAqLworCQkJ CWlmIChsZW4gPCBvdXRsZW4pCisJCQkJCW1lbW1vdmUoZnMtPmJ1ZmZlciwgZnMtPmJ1ZmZlciAr IGxlbiwgb3V0bGVuIC0gbGVuKTsKKwkJCQlvdXRsZW4gLT0gbGVuOworCQkJfQorCisJCQkvKiBp ZiB0aGVyZSBpcyBhdmFpbGFibGUgb3V0cHV0LCBzYXZlIGl0ICovCisJCQlpZiAob3V0bGVuID4g MCkKKwkJCXsKKwkJCQl3aGlsZSAoZnMtPm92ZXJmbG93bGVuICsgb3V0bGVuID4gZnMtPm92ZXJm bG93YWxsb2NsZW4pCisJCQkJeworCQkJCQlmcy0+b3ZlcmZsb3dhbGxvY2xlbiAqPSAyOworCQkJ CQlmcy0+b3ZlcmZsb3didWYgPSBwZ19yZWFsbG9jKGZzLT5vdmVyZmxvd2J1ZiwKKwkJCQkJCQkJ CQkJCSBmcy0+b3ZlcmZsb3dhbGxvY2xlbik7CisJCQkJfQorCisJCQkJbWVtY3B5KGZzLT5vdmVy Zmxvd2J1ZiArIGZzLT5vdmVyZmxvd2xlbiwgZnMtPmJ1ZmZlciwgb3V0bGVuKTsKKwkJCQlmcy0+ b3ZlcmZsb3dsZW4gKz0gb3V0bGVuOworCQkJfQorCQl9CisJfSB3aGlsZSAocnNpemUgPT0gc2l6 ZSAmJiBkc2l6ZSA8IHNpemUgJiYgZW9sX2ZvdW5kID09IDApOworCisJcGdfZnJlZShyZWFkYnVm KTsKKworCXJldHVybiAoaW50KSBkc2l6ZTsKK30KKworLyoKKyAqIENvbXByZXNzIHNpemUgYnl0 ZXMgZnJvbSBwdHIgYW5kIHdyaXRlIHRoZW0gdG8gdGhlIHN0cmVhbS4KKyAqLworc3RhdGljIHNp emVfdAorTFo0RmlsZV93cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVz c0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgt PnByaXZhdGU7CisJc2l6ZV90CQlzdGF0dXM7CisJaW50CQkJcmVtYWluaW5nID0gc2l6ZTsKKwor CWlmICghZnMtPmluaXRlZCAmJiBMWjRGaWxlX2luaXQoZnMsIHNpemUsIHRydWUpKQorCQlyZXR1 cm4gLTE7CisKKwl3aGlsZSAocmVtYWluaW5nID4gMCkKKwl7CisJCWludAkJCWNodW5rID0gcmVt YWluaW5nIDwgTFo0X0lOX1NJWkUgPyByZW1haW5pbmcgOiBMWjRfSU5fU0laRTsKKworCQlyZW1h aW5pbmcgLT0gY2h1bms7CisKKwkJc3RhdHVzID0gTFo0Rl9jb21wcmVzc1VwZGF0ZShmcy0+Y3R4 LCBmcy0+YnVmZmVyLCBmcy0+YnVmbGVuLAorCQkJCQkJCQkJIHB0ciwgY2h1bmssIE5VTEwpOwor CQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVz OworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0 dXMsIGZzLT5mcCkgIT0gc3RhdHVzKQorCQl7CisJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7 CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiBzaXplOworfQorCisvKgorICogZnJl YWQoKSBlcXVpdmFsZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4K KyAqLworc3RhdGljIHNpemVfdAorTFo0RmlsZV9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUs IENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxl ICopIENGSC0+cHJpdmF0ZTsKKwlpbnQJCQlyZXQ7CisKKwlyZXQgPSBMWjRGaWxlX3JlYWRfaW50 ZXJuYWwoZnMsIHB0ciwgc2l6ZSwgZmFsc2UpOworCWlmIChyZXQgIT0gc2l6ZSAmJiAhTFo0Rmls ZV9lb2YoQ0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTog JXMiLCBMWjRGaWxlX2dldF9lcnJvcihDRkgpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBmZ2V0YygpIGVxdWl2YWxlbnQgaW1wbGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVzc2VkIGZp bGVzLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX2dldGMoQ29tcHJlc3NGaWxlSGFuZGxlICog Q0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlOworCXVu c2lnbmVkIGNoYXIgYzsKKworCWlmIChMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsICZjLCAxLCBm YWxzZSkgIT0gMSkKKwl7CisJCWlmICghTFo0RmlsZV9lb2YoQ0ZIKSkKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0RmlsZV9nZXRfZXJyb3IoQ0ZI KSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6 IGVuZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBmZ2V0cygpIGVx dWl2YWxlbnQgaW1wbGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVzc2VkIGZpbGVzLgorICovCitz dGF0aWMgY2hhciAqCitMWjRGaWxlX2dldHMoY2hhciAqcHRyLCBpbnQgc2l6ZSwgQ29tcHJlc3NG aWxlSGFuZGxlICogQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5w cml2YXRlOworCXNpemVfdAkJZHNpemU7CisKKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9pbnRlcm5h bChmcywgcHRyLCBzaXplLCB0cnVlKTsKKwlpZiAoZHNpemUgPCAwKQorCQlwZ19mYXRhbCgiY291 bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0X2Vycm9yKENGSCkp OworCisJLyogRG9uZSByZWFkaW5nICovCisJaWYgKGRzaXplID09IDApCisJCXJldHVybiBOVUxM OworCisJcmV0dXJuIHB0cjsKK30KKworLyoKKyAqIEZpbmFsaXplIChkZSljb21wcmVzc2lvbiBv ZiBhIHN0cmVhbS4gV2hlbiBjb21wcmVzc2luZyBpdCB3aWxsIHdyaXRlIGFueQorICogcmVtYWlu aW5nIGNvbnRlbnQgYW5kL29yIGdlbmVyYXRlZCBmb290ZXIgZnJvbSB0aGUgTFo0IEFQSS4KKyAq Lworc3RhdGljIGludAorTFo0RmlsZV9jbG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7 CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZh dGU7CisJc2l6ZV90CQlzdGF0dXM7CisJaW50CQkJcmV0OworCisJZnAgPSBmcy0+ZnA7CisJaWYg KGZzLT5pbml0ZWQpCisJeworCQlpZiAoZnMtPmNvbXByZXNzaW5nKQorCQl7CisJCQlzdGF0dXMg PSBMWjRGX2NvbXByZXNzRW5kKGZzLT5jdHgsIGZzLT5idWZmZXIsIGZzLT5idWZsZW4sIE5VTEwp OworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBnX2ZhdGFsKCJmYWlsZWQgdG8g ZW5kIGNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7 CisJCQllbHNlIGlmICgocmV0ID0gZndyaXRlKGZzLT5idWZmZXIsIDEsIHN0YXR1cywgZnMtPmZw KSkgIT0gc3RhdHVzKQorCQkJeworCQkJCWVycm5vID0gZXJybm8gPyA6IEVOT1NQQzsKKwkJCQlX UklURV9FUlJPUl9FWElUOworCQkJfQorCisJCQlzdGF0dXMgPSBMWjRGX2ZyZWVDb21wcmVzc2lv bkNvbnRleHQoZnMtPmN0eCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQkJcGdf ZmF0YWwoImZhaWxlZCB0byBlbmQgY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBMWjRGX2dldEVy cm9yTmFtZShzdGF0dXMpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXN0YXR1cyA9IExaNEZfZnJl ZURlY29tcHJlc3Npb25Db250ZXh0KGZzLT5kdHgpOworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0 dXMpKQorCQkJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGRlY29tcHJlc3Npb246ICVzIiwKKwkJ CQkJCSBMWjRGX2dldEVycm9yTmFtZShzdGF0dXMpKTsKKwkJCXBnX2ZyZWUoZnMtPm92ZXJmbG93 YnVmKTsKKwkJfQorCisJCXBnX2ZyZWUoZnMtPmJ1ZmZlcik7CisJfQorCisJcGdfZnJlZShmcyk7 CisKKwlyZXR1cm4gZmNsb3NlKGZwKTsKK30KKworc3RhdGljIGludAorTFo0RmlsZV9vcGVuKGNv bnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJCSBDb21wcmVzc0Zp bGVIYW5kbGUgKiBDRkgpCit7CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqbHo0ZnAgPSAo TFo0RmlsZSAqKSBDRkgtPnByaXZhdGU7CisKKwlpZiAoZmQgPj0gMCkKKwkJZnAgPSBmZG9wZW4o ZmQsIG1vZGUpOworCWVsc2UKKwkJZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKKwlpZiAoZnAgPT0g TlVMTCkKKwl7CisJCWx6NGZwLT5lcnJjb2RlID0gZXJybm87CisJCXJldHVybiAxOworCX0KKwor CWx6NGZwLT5mcCA9IGZwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVf b3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0Zp bGVIYW5kbGUgKiBDRkgpCit7CisJY2hhcgkgICAqZm5hbWU7CisJaW50CQkJcmV0OworCisJZm5h bWUgPSBwc3ByaW50ZigiJXMubHo0IiwgcGF0aCk7CisJcmV0ID0gQ0ZILT5vcGVuKGZuYW1lLCAt MSwgbW9kZSwgQ0ZIKTsKKwlwZ19mcmVlKGZuYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKK3Zv aWQKK0luaXRDb21wcmVzc0xaNChDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgsIGludCBjb21wcmVz c2lvbkxldmVsKQoreworCUxaNEZpbGUgICAgKmx6NGZwOworCisJQ0ZILT5vcGVuID0gTFo0Rmls ZV9vcGVuOworCUNGSC0+b3Blbl93cml0ZSA9IExaNEZpbGVfb3Blbl93cml0ZTsKKwlDRkgtPnJl YWQgPSBMWjRGaWxlX3JlYWQ7CisJQ0ZILT53cml0ZSA9IExaNEZpbGVfd3JpdGU7CisJQ0ZILT5n ZXRzID0gTFo0RmlsZV9nZXRzOworCUNGSC0+Z2V0YyA9IExaNEZpbGVfZ2V0YzsKKwlDRkgtPmVv ZiA9IExaNEZpbGVfZW9mOworCUNGSC0+Y2xvc2UgPSBMWjRGaWxlX2Nsb3NlOworCUNGSC0+Z2V0 X2Vycm9yID0gTFo0RmlsZV9nZXRfZXJyb3I7CisKKwlsejRmcCA9IHBnX21hbGxvYzAoc2l6ZW9m KCpsejRmcCkpOworCWlmIChjb21wcmVzc2lvbkxldmVsID49IDApCisJCWx6NGZwLT5wcmVmcy5j b21wcmVzc2lvbkxldmVsID0gY29tcHJlc3Npb25MZXZlbDsKKworCUNGSC0+cHJpdmF0ZSA9IGx6 NGZwOworfQorI2Vsc2UJCQkJCQkJLyogVVNFX0xaNCAqLwordm9pZAorSW5pdENvbXByZXNzb3JM WjQoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGNvbXByZXNzaW9uTGV2ZWwpCit7CisJcGdfZmF0 YWwoIm5vdCBidWlsdCB3aXRoIExaNCBzdXBwb3J0Iik7Cit9CisKK3ZvaWQKK0luaXRDb21wcmVz c0xaNChDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgsIGludCBjb21wcmVzc2lvbkxldmVsKQorewor CXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCBMWjQgc3VwcG9ydCIpOworfQorI2VuZGlmCQkJCQkJ CS8qIFVTRV9MWjQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQu aCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi5mYmVjOWE1MDhkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2x6NC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfQ09NUFJFU1Nf TFo0X0hfCisjZGVmaW5lIF9DT01QUkVTU19MWjRfSF8KKworI2luY2x1ZGUgImNvbXByZXNzX2lv LmgiCisKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3Ms IGludCBjb21wcmVzc2lvbkxldmVsKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0xaNChDb21w cmVzc0ZpbGVIYW5kbGUgKiBDRkgsIGludCBjb21wcmVzc2lvbkxldmVsKTsKKworI2VuZGlmCQkJ CQkJCS8qIF9DT01QUkVTU19MWjRfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YwppbmRleCAxODY1MTBjMjM1Li4yMjVjMjI2YTZlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jCkBAIC0zNTMsNiArMzUzLDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhY KQogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVP cHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwogCWJvb2wJCXBhcmFsbGVsX21vZGU7CisJ Ym9vbAkJc3VwcG9ydHNfY29tcHJlc3Npb247CiAJVG9jRW50cnkgICAqdGU7CiAJQ29tcHJlc3NG aWxlSGFuZGxlICpzYXY7CiAKQEAgLTM4MiwxNyArMzgzLDI4IEBAIFJlc3RvcmVBcmNoaXZlKEFy Y2hpdmUgKkFIWCkKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSB3b24ndCBuZWVkIChkZSljb21wcmVz c2lvbiB3ZSBoYXZlbid0IGdvdAogCSAqLwotI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoQUgtPmNv bXByZXNzX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVAgJiYKKwlzdXBwb3J0 c19jb21wcmVzc2lvbiA9IHRydWU7CisJaWYgKChBSC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fR1pJUCB8fAorCQkgQUgtPmNvbXByZXNzX3NwZWMuYWxnb3JpdGht ID09IFBHX0NPTVBSRVNTSU9OX0xaNCkgJiYKIAkJQUgtPlByaW50VG9jRGF0YVB0ciAhPSBOVUxM KQogCXsKIAkJZm9yICh0ZSA9IEFILT50b2MtPm5leHQ7IHRlICE9IEFILT50b2M7IHRlID0gdGUt Pm5leHQpCiAJCXsKIAkJCWlmICh0ZS0+aGFkRHVtcGVyICYmICh0ZS0+cmVxcyAmIFJFUV9EQVRB KSAhPSAwKQotCQkJCXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9tIGNvbXByZXNzZWQgYXJj aGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGluc3RhbGxhdGlvbikiKTsK KwkJCXsKKyNpZm5kZWYgSEFWRV9MSUJaCisJCQkJaWYgKEFILT5jb21wcmVzc19hbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJCQkJc3VwcG9ydHNfY29tcHJlc3Npb24gPSBmYWxz ZTsKKyNlbmRpZgorI2lmbmRlZiBVU0VfTFo0CisJCQkJaWYgKEFILT5jb21wcmVzc19hbGdvcml0 aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQkJCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZh bHNlOworI2VuZGlmCisJCQkJaWYgKHN1cHBvcnRzX2NvbXByZXNzaW9uID09IGZhbHNlKQorCQkJ CQlwZ19mYXRhbCgiY2Fubm90IHJlc3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXBy ZXNzaW9uIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CisJCQl9CiAJCX0K IAl9Ci0jZW5kaWYKIAogCS8qCiAJICogUHJlcGFyZSBpbmRleCBhcnJheXMsIHNvIHdlIGNhbiBh c3N1bWUgd2UgaGF2ZSB0aGVtIHRocm91Z2hvdXQgcmVzdG9yZS4KQEAgLTIwMjgsNiArMjA0MCwx OCBAQCBSZWFkU3RyKEFyY2hpdmVIYW5kbGUgKkFIKQogCXJldHVybiBidWY7CiB9CiAKK3N0YXRp YyBib29sCitfZmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hh ciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhcgkJYnVmW01BWFBHUEFUSF07 CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUp ID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVz XCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Qu c3RfbW9kZSkpOworfQorCiBzdGF0aWMgaW50CiBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hp dmVIYW5kbGUgKkFIKQogewpAQCAtMjA1NCwzMCArMjA3OCwyMCBAQCBfZGlzY292ZXJBcmNoaXZl Rm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCS8qCiAJCSAqIENoZWNrIGlmIHRoZSBzcGVj aWZpZWQgYXJjaGl2ZSBpcyBhIGRpcmVjdG9yeS4gSWYgc28sIGNoZWNrIGlmCi0JCSAqIHRoZXJl J3MgYSAidG9jLmRhdCIgKG9yICJ0b2MuZGF0Lmd6IikgZmlsZSBpbiBpdC4KKwkJICogdGhlcmUn cyBhICJ0b2MuZGF0IiAob3IgInRvYy5kYXQue2d6LGx6NH0iKSBmaWxlIGluIGl0LgogCQkgKi8K IAkJaWYgKHN0YXQoQUgtPmZTcGVjLCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkK IAkJewotCQkJY2hhcgkJYnVmW01BWFBHUEFUSF07Ci0KLQkJCWlmIChzbnByaW50ZihidWYsIE1B WFBHUEFUSCwgIiVzL3RvYy5kYXQiLCBBSC0+ZlNwZWMpID49IE1BWFBHUEFUSCkKLQkJCQlwZ19m YXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsCi0JCQkJCQkgQUgtPmZTcGVj KTsKLQkJCWlmIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCi0J CQl7Ci0JCQkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJCQlBSC0+Zm9ybWF0ID0gYXJj aERpcmVjdG9yeTsKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRv Yy5kYXQiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKLQkJCX0KLQogI2lmZGVmIEhBVkVfTElC WgotCQkJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvdG9jLmRhdC5neiIsIEFILT5m U3BlYykgPj0gTUFYUEdQQVRIKQotCQkJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9u ZzogXCIlc1wiIiwKLQkJCQkJCSBBSC0+ZlNwZWMpOwotCQkJaWYgKHN0YXQoYnVmLCAmc3QpID09 IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJCXsKLQkJCQlBSC0+Zm9ybWF0ID0gYXJjaERp cmVjdG9yeTsKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5k YXQuZ3oiKSkKKwkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKKyNlbmRpZgorI2lmZGVmIFVTRV9MWjQK KwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQubHo0Iikp CiAJCQkJcmV0dXJuIEFILT5mb3JtYXQ7Ci0JCQl9CiAjZW5kaWYKIAkJCXBnX2ZhdGFsKCJkaXJl Y3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIGFyY2hpdmUgKFwidG9j LmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJCQkJCSBBSC0+ZlNwZWMpOwpAQCAtMzY4NCw2ICsz Njk4LDcgQEAgV3JpdGVIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCUFILT5Xcml0ZUJ5dGVQdHIo QUgsIEFILT5vZmZTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Zm9ybWF0KTsKIAlX cml0ZUludChBSCwgQUgtPmNvbXByZXNzX3NwZWMubGV2ZWwpOworCUFILT5Xcml0ZUJ5dGVQdHIo QUgsIEFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSk7CiAJY3J0bSA9ICpsb2NhbHRpbWUoJkFI LT5jcmVhdGVEYXRlKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9zZWMpOwogCVdyaXRlSW50KEFI LCBjcnRtLnRtX21pbik7CkBAIC0zNzY1LDE0ICszNzgwLDIwIEBAIFJlYWRIZWFkKEFyY2hpdmVI YW5kbGUgKkFIKQogCWVsc2UKIAkJQUgtPmNvbXByZXNzX3NwZWMubGV2ZWwgPSBaX0RFRkFVTFRf Q09NUFJFU1NJT047CiAKLQlpZiAoQUgtPmNvbXByZXNzX3NwZWMubGV2ZWwgIT0gSU5UX01JTikK KwlpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFfMTUpCisJCUFILT5jb21wcmVzc19zcGVjLmFs Z29yaXRobSA9IEFILT5SZWFkQnl0ZVB0cihBSCk7CisJZWxzZSBpZiAoQUgtPmNvbXByZXNzX3Nw ZWMubGV2ZWwgIT0gSU5UX01JTikKKwkJQUgtPmNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdf Q09NUFJFU1NJT05fR1pJUDsKKwogI2lmbmRlZiBIQVZFX0xJQloKKwlpZiAoQUgtPmNvbXByZXNz X3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJewogCQlwZ19sb2dfd2Fy bmluZygiYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24gZG9lcyBu b3Qgc3VwcG9ydCBjb21wcmVzc2lvbiAtLSBubyBkYXRhIHdpbGwgYmUgYXZhaWxhYmxlIik7Ci0j ZWxzZQotCQlBSC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQ OworCQlBSC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwor CQlBSC0+Y29tcHJlc3Nfc3BlYy5sZXZlbCA9IDA7CisJfQogI2VuZGlmCiAKLQogCWlmIChBSC0+ dmVyc2lvbiA+PSBLX1ZFUlNfMV80KQogCXsKIAkJc3RydWN0IHRtCWNydG07CmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggMzQxZDQwNjUxNS4uZjU3N2U4ZmM2MSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtNjUsMTAgKzY1LDEyIEBACiAjZGVmaW5l IEtfVkVSU18xXzEzIE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDEzLCAwKQkvKiBjaGFuZ2Ugc2Vh cmNoX3BhdGgKIAkJCQkJCQkJCQkJCQkgKiBiZWhhdmlvciAqLwogI2RlZmluZSBLX1ZFUlNfMV8x NCBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxNCwgMCkJLyogYWRkIHRhYmxlYW0gKi8KKyNkZWZp bmUgS19WRVJTXzFfMTUgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTUsIDApCS8qIGFkZCBjb21w cmVzc2lvbk1ldGhvZAorCQkJCQkJCQkJCQkJCSAqIGluIGhlYWRlciAqLwogCiAvKiBDdXJyZW50 IGFyY2hpdmUgdmVyc2lvbiBudW1iZXIgKHRoZSBmb3JtYXQgd2UgY2FuIG91dHB1dCkgKi8KICNk ZWZpbmUgS19WRVJTX01BSk9SIDEKLSNkZWZpbmUgS19WRVJTX01JTk9SIDE0CisjZGVmaW5lIEtf VkVSU19NSU5PUiAxNQogI2RlZmluZSBLX1ZFUlNfUkVWIDAKICNkZWZpbmUgS19WRVJTX1NFTEYg TUFLRV9BUkNISVZFX1ZFUlNJT04oS19WRVJTX01BSk9SLCBLX1ZFUlNfTUlOT1IsIEtfVkVSU19S RVYpCiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCmluZGV4IGRkMjE0ZTc2NzAuLmUxMjUzZjcyOTEgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu YwpAQCAtMTMwMyw3ICsxMzAzLDcgQEAgcGFyc2VfY29tcHJlc3Npb25fb3B0aW9uKGNvbnN0IGNo YXIgKm9wdCwKIAkJCXJlcyA9IHBhcnNlX2NvbXByZXNzX2FsZ29yaXRobShtZXRob2QsCiAJCQkJ CQkJCQkJICAgJmNvbXByZXNzX3NwZWMtPmFsZ29yaXRobSk7CiAJCQlpZiAoIXJlcykKLQkJCQlw Z19sb2dfZXJyb3IoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIFwiJXNcIiAoZ3ppcCwgbm9u ZSkiLAorCQkJCXBnX2xvZ19lcnJvcigiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgXCIlc1wi IChnemlwLCBsejQsIG5vbmUpIiwKIAkJCQkJCQkgbWV0aG9kKTsKIAogCQkJcGdfZnJlZShtZXRo b2QpOwpAQCAtMTM0NSw4ICsxMzQ1LDggQEAgcGFyc2VfY29tcHJlc3Npb25fb3B0aW9uKGNvbnN0 IGNoYXIgKm9wdCwKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogdmVyaWZ5IHRoYXQgdGhlIHJlcXVl c3RlZCBjb21wcmVzc2lvbiBpcyBzdXBwb3J0ZWQgKi8KLQogCWlmIChjb21wcmVzc19zcGVjLT5h bGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSAmJgorCQljb21wcmVzc19zcGVjLT5hbGdv cml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTFo0ICYmCiAJCWNvbXByZXNzX3NwZWMtPmFsZ29yaXRo bSAhPSBQR19DT01QUkVTU0lPTl9HWklQKQogCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZhbHNl OwogCkBAIC0xMzU0LDYgKzEzNTQsMTAgQEAgcGFyc2VfY29tcHJlc3Npb25fb3B0aW9uKGNvbnN0 IGNoYXIgKm9wdCwKIAlpZiAoY29tcHJlc3Nfc3BlYy0+YWxnb3JpdGhtID09IFBHX0NPTVBSRVNT SU9OX0daSVApCiAJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7CiAjZW5kaWYKKyNpZm5k ZWYgVVNFX0xaNAorCWlmIChjb21wcmVzc2lvbl9zcGVjLT5hbGdvcml0aG0gPT0gUEdfQ09NUFJF U1NJT05fTFo0KQorCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZhbHNlOworI2VuZGlmCiAKIAlp ZiAoIXN1cHBvcnRzX2NvbXByZXNzaW9uKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAppbmRleCBl MWYxYTg4MDFjLi4zODAzMzcwMzUwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFf YmFzaWMucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0xMjIsNyAr MTIyLDcgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCiBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJWyAn cGdfZHVtcCcsICctLWNvbXByZXNzJywgJ2dhcmJhZ2UnIF0sCi0JcXIvXFFwZ19kdW1wOiBlcnJv cjogaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgImdhcmJhZ2UiIChnemlwLCBub25lKVxFLywK Kwlxci9cUXBnX2R1bXA6IGVycm9yOiBpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAiZ2FyYmFn ZSIgKGd6aXAsIGx6NCwgbm9uZSlcRS8sCiAJJ3BnX2R1bXA6IGludmFsaWQgLS1jb21wcmVzcycp OwogCiBjb21tYW5kX2ZhaWxzX2xpa2UoCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8w MDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGEw MmI1Nzg3NTAuLjkxMDlkNzJmOGEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9w Z19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC0xMTYs NiArMTE2LDY3IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWFyZ3MgICAgPT4gWyAnLWQnLCAi JHRlbXBkaXIvY29tcHJlc3Npb25fZ3ppcF9wbGFpbi5zcWwuZ3oiLCBdLAogCQl9LAogCX0sCisK KwkjIERvIG5vdCB1c2UgLS1uby1zeW5jIHRvIGdpdmUgdGVzdCBjb3ZlcmFnZSBmb3IgZGF0YSBz eW5jLgorCWNvbXByZXNzaW9uX2x6NF9jdXN0b20gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAn Y29tcHJlc3Npb24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAg ICAgPT4gWworCQkJJ3BnX2R1bXAnLCAgICAgICctLWZvcm1hdD1jdXN0b20nLAorCQkJJy0tY29t cHJlc3M9MScsICItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1wIiwK KwkJCSdwb3N0Z3JlcycsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3Jl JywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5zcWwiLAorCQkJ IiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b20uZHVtcCIsCisJCV0sCisJfSwKKworCSMg RG8gbm90IHVzZSAtLW5vLXN5bmMgdG8gZ2l2ZSB0ZXN0IGNvdmVyYWdlIGZvciBkYXRhIHN5bmMu CisJY29tcHJlc3Npb25fbHo0X2RpciA9PiB7CisJCXRlc3Rfa2V5ICAgICAgID0+ICdjb21wcmVz c2lvbicsCisJCWNvbXBpbGVfb3B0aW9uID0+ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9PiBb CisJCQkncGdfZHVtcCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tam9icz0yJywK KwkJCSctLWZvcm1hdD1kaXJlY3RvcnknLCAgICAgICAgICAgICAgICAgICAnLS1jb21wcmVzcz1s ejQ6MScsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLCAncG9zdGdy ZXMnLAorCQldLAorCQkjIEdpdmUgY292ZXJhZ2UgZm9yIG1hbnVhbGx5IGNvbXByZXNzZWQgYmxv Yi50b2MgZmlsZXMgZHVyaW5nCisJCSMgcmVzdG9yZS4KKwkJY29tcHJlc3NfY21kID0+IHsKKwkJ CXByb2dyYW0gPT4gJEVOVnsnTFo0J30sCisJCQlhcmdzICAgID0+IFsKKwkJCQknLXonLCAnLWYn LCAnLS1ybScsCisJCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvYmxvYnMudG9jIiwK KwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci9ibG9icy50b2MubHo0IiwKKwkJCV0s CisJCX0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy0tam9icz0yJywK KwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci5zcWwiLAorCQkJIiR0ZW1w ZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLAorCQldLAorCX0sCisKKwljb21wcmVzc2lvbl9sejRf cGxhaW4gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29tcHJlc3Npb24nLAorCQljb21waWxl X29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAgPT4gWworCQkJJ3BnX2R1bXAnLCAn LS1mb3JtYXQ9cGxhaW4nLCAnLS1jb21wcmVzcz1sejQnLAorCQkJIi0tZmlsZT0kdGVtcGRpci9j b21wcmVzc2lvbl9sejRfcGxhaW4uc3FsLmx6NCIsICdwb3N0Z3JlcycsCisJCV0sCisJCSMgRGVj b21wcmVzcyB0aGUgZ2VuZXJhdGVkIGZpbGUgdG8gcnVuIHRocm91Z2ggdGhlIHRlc3RzLgorCQlj b21wcmVzc19jbWQgPT4geworCQkJcHJvZ3JhbSA9PiAkRU5WeydMWjQnfSwKKwkJCWFyZ3MgICAg PT4gWworCQkJCSctZCcsICctZicsCisJCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9wbGFp bi5zcWwubHo0IiwKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X3BsYWluLnNxbCIsCisJ CQldLAorCQl9LAorCX0sCisKIAljbGVhbiA9PiB7CiAJCWR1bXBfY21kID0+IFsKIAkJCSdwZ19k dW1wJywKQEAgLTQwNTcsMTEgKzQxMTgsMTEgQEAgZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMg JXBnZHVtcF9ydW5zKQogCW15ICRydW5fZGIgICA9ICdwb3N0Z3Jlcyc7CiAKIAkjIFNraXAgY29t bWFuZC1sZXZlbCB0ZXN0cyBmb3IgZ3ppcCBpZiB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBpdC4K LQlpZiAoICAgZGVmaW5lZCgkcGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0pCi0J CSYmICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBlcSAnZ3ppcCcKLQkJJiYg ISRzdXBwb3J0c19nemlwKQorCWlmICgkcGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlv bn0gJiYKKwkJKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBlcSAnZ3ppcCcg JiYgISRzdXBwb3J0c19nemlwKSB8fAorCQkoJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9v cHRpb259IGVxICdsejQnICYmICEkc3VwcG9ydHNfbHo0KSkKIAl7Ci0JCW5vdGUgIiRydW46IHNr aXBwZWQgZHVlIHRvIG5vIGd6aXAgc3VwcG9ydCI7CisJCW5vdGUgIiRydW46IHNraXBwZWQgZHVl IHRvIG5vICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBzdXBwb3J0IjsKIAkJ bmV4dDsKIAl9CiAKLS0gCjIuMzQuMQoK --b1_5IGcN7m7GJLa221lhJtyGUwkm8rhXEBA0IBs9sbZM--