Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iv9po-00070C-CN for pgsql-hackers@arkaria.postgresql.org; Sat, 25 Jan 2020 01:02:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1iv9pl-0000Yc-QE for pgsql-hackers@arkaria.postgresql.org; Sat, 25 Jan 2020 01:01:57 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iv9pk-0000YV-Hy for pgsql-hackers@lists.postgresql.org; Sat, 25 Jan 2020 01:01:57 +0000 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1iv9pd-00036X-HQ for pgsql-hackers@postgresql.org; Sat, 25 Jan 2020 01:01:55 +0000 Received: by mail-pj1-x102c.google.com with SMTP id d15so551167pjw.1 for ; Fri, 24 Jan 2020 17:01:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=kJeXISScUWQg5nTN4/EzvCfhBMHvdgMCeEo3+biCoSA=; b=yZunzGVIvc5GkdiPQ/hfE4XpzX2tSQDaxgThz/Er0tCdmICndNrXqahuYHiE432ylf ce70J7UpR0vLxxVUGPzYGFG5B5ujvaF9uI3+3CyM6KC/jvNO4OkBBh2/XbiYft0iDZlg vKoAkqfkTN0gjJV8Ug0D3y1mJgt07azAk/pUsvf9sdf9oqDga9MpEqriH3hF4Oectnmc nzix+VZwk96TcO8Ax56p7HE4++jDL1+U9ewkWP9CYDTrkboLj0vGKH7LNGzgbsTP+2WI 0uilzga1L4njHbwcByN7Q1Ewq82IBC0EzLiB3r7zrJbZgRn4nGkBiLFK9ypMqd8iENiL VrSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=kJeXISScUWQg5nTN4/EzvCfhBMHvdgMCeEo3+biCoSA=; b=dH7aPyh3WZ0d5p6Xj4gbccjAzsBufioKnx5NTvdWFDrUDTttmV1Vn/750aPqSJ5xc1 ZdavYQ40Lt3ytL9Gb9Jp4x+or54B8xSaVIVNdxvQdAqzWZS3m7aF6iEPN9b0nxxBbUxF HngWk7tjDJTgu2cvlnVB64QV0yGdktdqzb2S46u2IDsQUyv5YVTG/ynT4k7YKfL1yW8J DJOJM1nHK7ZpSmBs/hxMhjQk5Vpd/7ppDIw7kvKCp7vqpsmF278sQgmC90yAL5q95uzR z6Q+M7HIxa/1UIuGN/R7ZIRKrrSwuJUcVZ2CNsym3/KfWmwa50g7uLREUVbgm1T9ak2x viUw== X-Gm-Message-State: APjAAAVno4SGty9yRuPrtt2m37SEOAyfF41yWPSI2fiN9mA3TFt1/qNF gX8Plb9JA/T0oquop/4s5X6bVg== X-Google-Smtp-Source: APXvYqxPT7n32/eUCw6vBeqSkNZ2AgF+JK2NvFmv/sSFcFnrDgjFQ4EBnrxGc/ijC7NZoHFreeaLaA== X-Received: by 2002:a17:902:221:: with SMTP id 30mr6493438plc.70.1579914108073; Fri, 24 Jan 2020 17:01:48 -0800 (PST) Received: from jdavis ([2600:1010:b068:3da8:6458:80b:898f:69bc]) by smtp.gmail.com with ESMTPSA id c19sm7955307pfc.144.2020.01.24.17.01.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 24 Jan 2020 17:01:46 -0800 (PST) Message-ID: Subject: Re: Memory-Bounded Hash Aggregation From: Jeff Davis To: Heikki Linnakangas , Tomas Vondra Cc: Taylor Vesely , Adam Lee , Melanie Plageman , pgsql-hackers@postgresql.org Date: Fri, 24 Jan 2020 17:01:35 -0800 In-Reply-To: <775d754c-9a61-5363-6998-f87d15f1b592@iki.fi> References: <507ac540ec7c20136364b5272acbcd4574aa76ef.camel@j-davis.com> <20190703001753.s5e5cme3ucjgeu6c@development> <20190711155520.zqipi23o3yybx7ym@development> <9be86fc1adc315f69b8af4b379087ab451008d8a.camel@j-davis.com> <20190802064405.GA94036@mars.local> <617fea8258ba3df7bc8b21cd7f3afc219f2383d9.camel@j-davis.com> <20190802152123.ichmacgx3y3x7dc3@development> <20191214173225.3kzsbncr6brpxdll@development> <775d754c-9a61-5363-6998-f87d15f1b592@iki.fi> Content-Type: multipart/mixed; boundary="=-2bzg4PDaL7GXuYmVOQTX" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-2bzg4PDaL7GXuYmVOQTX Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Wed, 2020-01-08 at 12:38 +0200, Heikki Linnakangas wrote: > This makes the assumption that all Aggrefs or GroupingFuncs are at > the > top of the TargetEntry. That's not true, e.g.: > > select 0+sum(a) from foo group by b; > > I think find_aggregated_cols() and find_unaggregated_cols() should > be > merged into one function that scans the targetlist once, and returns > two > Bitmapsets. They're always used together, anyway. I cut the projection out for now, because there's some work in that area in another thread[1]. If that work doesn't pan out, I can reintroduce the projection logic to this one. New patch attached. It now uses logtape.c (thanks Adam for prototyping this work) instead of buffile.c. This gives better control over the number of files and the memory consumed for buffers, and reduces waste. It requires two changes to logtape.c though: * add API to extend the number of tapes * lazily allocate buffers for reading (buffers for writing were already allocated lazily) so that the total number of buffers needed at any time is bounded Unfortunately, I'm seeing some bad behavior (at least in some cases) with logtape.c, where it's spending a lot of time qsorting the list of free blocks. Adam, did you also see this during your perf tests? It seems to be worst with lower work_mem settings and a large number of input groups (perhaps there are just too many small tapes?). It also has some pretty major refactoring that hopefully makes it simpler to understand and reason about, and hopefully I didn't introduce too many bugs/regressions. A list of other changes: * added test that involves rescan * tweaked some details and tunables so that I think memory usage tracking and reporting (EXPLAIN ANALYZE) is better, especially for smaller work_mem * simplified quite a few function signatures Regards, Jeff Davis [1] https://postgr.es/m/CAAKRu_Yj=Q_ZxiGX+pgstNWMbUJApEJX-imvAEwryCk5SLUebg@mail.gmail.com --=-2bzg4PDaL7GXuYmVOQTX Content-Disposition: attachment; filename="hashagg-20200124.patch" Content-Type: text/x-patch; name="hashagg-20200124.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAppbmRleCBlMDdkYzAxZTgwMi4uZmRlNTM1Nzk3MDkgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTE3 NTEsNiArMTc1MSwyMyBAQCBpbmNsdWRlX2RpciAnY29uZi5kJwogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWhhc2hh Z2ctbWVtLW92ZXJmbG93IiB4cmVmbGFiZWw9Imhhc2hhZ2dfbWVtX292ZXJmbG93Ij4KKyAgICAg IDx0ZXJtPjx2YXJuYW1lPmhhc2hhZ2dfbWVtX292ZXJmbG93PC92YXJuYW1lPiAoPHR5cGU+Ym9v bGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1l Pmhhc2hhZ2dfbWVtX292ZXJmbG93PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwv cHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3Rp dGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICAgSWYgaGFzaCBhZ2dyZWdhdGlvbiBleGNlZWRz IDx2YXJuYW1lPndvcmtfbWVtPC92YXJuYW1lPiBhdCBxdWVyeQorICAgICAgICAgZXhlY3V0aW9u IHRpbWUsIGFuZCA8dmFybmFtZT5oYXNoYWdnX21lbV9vdmVyZmxvdzwvdmFybmFtZT4gaXMgc2V0 CisgICAgICAgICB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIGNvbnRpbnVlIGNvbnN1bWluZyBt b3JlIG1lbW9yeSByYXRoZXIgdGhhbgorICAgICAgICAgcGVyZm9ybWluZyBkaXNrLWJhc2VkIGhh c2ggYWdncmVnYXRpb24uIFRoZSBkZWZhdWx0CisgICAgICAgICBpcyA8bGl0ZXJhbD5vZmY8L2xp dGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtc3RhY2stZGVwdGgiIHhy ZWZsYWJlbD0ibWF4X3N0YWNrX2RlcHRoIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPm1heF9zdGFj a19kZXB0aDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAgICAgPGluZGV4dGVy bT4KQEAgLTQ0NzEsNiArNDQ4OCwyNCBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAg PC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBp ZD0iZ3VjLWVuYWJsZS1oYXNoYWdnLXNwaWxsIiB4cmVmbGFiZWw9ImVuYWJsZV9oYXNoYWdnX3Nw aWxsIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9oYXNoYWdnX3NwaWxsPC92YXJuYW1l PiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmlt YXJ5Pjx2YXJuYW1lPmVuYWJsZV9oYXNoYWdnX3NwaWxsPC92YXJuYW1lPiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgor ICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2Fi bGVzIHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNlIG9mIGhhc2hlZCBhZ2dyZWdhdGlvbiBwbGFuCisg ICAgICAgIHR5cGVzIHdoZW4gdGhlIG1lbW9yeSB1c2FnZSBpcyBleHBlY3RlZCB0bworICAgICAg ICBleGNlZWQgPHZhcm5hbWU+d29ya19tZW08L3Zhcm5hbWU+LiBUaGlzIG9ubHkgYWZmZWN0cyB0 aGUgcGxhbm5lcgorICAgICAgICBjaG9pY2U7IGFjdHVhbCBiZWhhdmlvciBhdCBleGVjdXRpb24g dGltZSBpcyBkaWN0YXRlZCBieQorICAgICAgICA8eHJlZiBsaW5rZW5kPSJndWMtaGFzaGFnZy1t ZW0tb3ZlcmZsb3ciLz4uIFRoZSBkZWZhdWx0CisgICAgICAgIGlzIDxsaXRlcmFsPm9uPC9saXRl cmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3Rl bnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLWhhc2hqb2luIiB4cmVm bGFiZWw9ImVuYWJsZV9oYXNoam9pbiI+CiAgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfaGFz aGpvaW48L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAgICAgIDxpbmRleHRlcm0+ CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggZDE4OWI4ZDU3M2EuLmQzY2U1NTExODI2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMDIsNiArMTAyLDcgQEAgc3RhdGljIHZvaWQgc2hvd190 YWJsZXNhbXBsZShUYWJsZVNhbXBsZUNsYXVzZSAqdHNjLCBQbGFuU3RhdGUgKnBsYW5zdGF0ZSwK IAkJCQkJCQkgTGlzdCAqYW5jZXN0b3JzLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lk IHNob3dfc29ydF9pbmZvKFNvcnRTdGF0ZSAqc29ydHN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsK IHN0YXRpYyB2b2lkIHNob3dfaGFzaF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWlu U3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICpoYXNo c3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5m byhCaXRtYXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAq ZXMpOwogc3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hhciAq cWxhYmVsLCBpbnQgd2hpY2gsCkBAIC0xODQzLDYgKzE4NDQsOCBAQCBFeHBsYWluTm9kZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQljYXNlIFRfQWdnOgogCQkJc2hv d19hZ2dfa2V5cyhjYXN0Tm9kZShBZ2dTdGF0ZSwgcGxhbnN0YXRlKSwgYW5jZXN0b3JzLCBlcyk7 CiAJCQlzaG93X3VwcGVyX3F1YWwocGxhbi0+cXVhbCwgIkZpbHRlciIsIHBsYW5zdGF0ZSwgYW5j ZXN0b3JzLCBlcyk7CisJCQlpZiAoZXMtPmFuYWx5emUpCisJCQkJc2hvd19oYXNoYWdnX2luZm8o KEFnZ1N0YXRlICopIHBsYW5zdGF0ZSwgZXMpOwogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hv d19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJ CQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwpAQCAtMjc0MSw2ICsyNzQ0LDU2IEBAIHNob3dfaGFz aF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCX0KIH0KIAor LyoKKyAqIElmIEVYUExBSU4gQU5BTFlaRSwgc2hvdyBpbmZvcm1hdGlvbiBvbiBoYXNoIGFnZ3Jl Z2F0ZSBtZW1vcnkgdXNhZ2UgYW5kCisgKiBiYXRjaGVzLgorICovCitzdGF0aWMgdm9pZAorc2hv d19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQorewor CUFnZwkJKmFnZwkgICA9IChBZ2cgKilhZ2dzdGF0ZS0+c3MucHMucGxhbjsKKwlsb25nCSBtZW1Q ZWFrS2IgPSAoYWdnc3RhdGUtPmhhc2hfbWVtX3BlYWsgKyAxMDIzKSAvIDEwMjQ7CisJbG9uZwkg ZGlza0tiICAgID0gKGFnZ3N0YXRlLT5oYXNoX2Rpc2tfdXNlZCArIDEwMjMpIC8gMTAyNDsKKwor CisJQXNzZXJ0KElzQShhZ2dzdGF0ZSwgQWdnU3RhdGUpKTsKKworCWlmIChhZ2ctPmFnZ3N0cmF0 ZWd5ICE9IEFHR19IQVNIRUQgJiYKKwkJYWdnLT5hZ2dzdHJhdGVneSAhPSBBR0dfTUlYRUQpCisJ CXJldHVybjsKKworCWlmIChlcy0+Zm9ybWF0ID09IEVYUExBSU5fRk9STUFUX1RFWFQpCisJewor CQlhcHBlbmRTdHJpbmdJbmZvU3BhY2VzKGVzLT5zdHIsIGVzLT5pbmRlbnQgKiAyKTsKKwkJYXBw ZW5kU3RyaW5nSW5mbygKKwkJCWVzLT5zdHIsCisJCQkiTWVtb3J5IFVzYWdlOiAlbGRrQiIsCisJ CQltZW1QZWFrS2IpOworCisJCWlmIChhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzX3VzZWQgPiAwKQor CQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKAorCQkJCWVzLT5zdHIsCisJCQkJIiAgQmF0Y2hlczog JWQgIERpc2s6ICVsZGtCIiwKKwkJCQlhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzX3VzZWQsIGRpc2tL Yik7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvKAorCQkJZXMtPnN0ciwKKwkJCSJcbiIpOwor CX0KKwllbHNlCisJeworCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJQZWFrIE1lbW9yeSBVc2Fn ZSIsICJrQiIsIG1lbVBlYWtLYiwgZXMpOworCQlpZiAoYWdnc3RhdGUtPmhhc2hfYmF0Y2hlc191 c2VkID4gMCkKKwkJeworCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiSGFzaEFnZyBCYXRjaGVz IiwgTlVMTCwKKwkJCQkJCQkJICAgYWdnc3RhdGUtPmhhc2hfYmF0Y2hlc191c2VkLCBlcyk7CisJ CQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJEaXNrIFVzYWdlIiwgImtCIiwgZGlza0tiLCBlcyk7 CisJCX0KKwl9Cit9CisKIC8qCiAgKiBJZiBpdCdzIEVYUExBSU4gQU5BTFlaRSwgc2hvdyBleGFj dC9sb3NzeSBwYWdlcyBmb3IgYSBCaXRtYXBIZWFwU2NhbiBub2RlCiAgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwci5jCmluZGV4IDg2MTkyNDZjOGUwLi42ZjY0YTJhYmQyZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwci5jCkBAIC03OSw3ICs3OSw4IEBAIHN0YXRpYyB2b2lkIEV4ZWNJbml0Q29lcmNlVG9E b21haW4oRXhwckV2YWxTdGVwICpzY3JhdGNoLCBDb2VyY2VUb0RvbWFpbiAqY3Rlc3QsCiBzdGF0 aWMgdm9pZCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUg KmFnZ3N0YXRlLAogCQkJCQkJCQkgIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwKIAkJCQkJCQkJICBG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywKLQkJCQkJ CQkJICBpbnQgdHJhbnNubywgaW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCk7CisJ CQkJCQkJCSAgaW50IHRyYW5zbm8sIGludCBzZXRubywgaW50IHNldG9mZiwgYm9vbCBpc2hhc2gs CisJCQkJCQkJCSAgYm9vbCBzcGlsbGVkKTsKIAogCiAvKgpAQCAtMjkyNyw3ICsyOTI4LDcgQEAg RXhlY0luaXRDb2VyY2VUb0RvbWFpbihFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsIENvZXJjZVRvRG9t YWluICpjdGVzdCwKICAqLwogRXhwclN0YXRlICoKIEV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRl ICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJQaGFzZSBwaGFzZSwKLQkJCQkgIGJvb2wgZG9Tb3J0LCBi b29sIGRvSGFzaCkKKwkJCQkgIGJvb2wgZG9Tb3J0LCBib29sIGRvSGFzaCwgYm9vbCBzcGlsbGVk KQogewogCUV4cHJTdGF0ZSAgKnN0YXRlID0gbWFrZU5vZGUoRXhwclN0YXRlKTsKIAlQbGFuU3Rh dGUgICpwYXJlbnQgPSAmYWdnc3RhdGUtPnNzLnBzOwpAQCAtMzE2MCw3ICszMTYxLDggQEAgRXhl Y0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUgKmFnZ3N0YXRlLCBBZ2dTdGF0ZVBlclBoYXNlIHBoYXNl LAogCQkJZm9yIChzZXRubyA9IDA7IHNldG5vIDwgcHJvY2Vzc0dyb3VwaW5nU2V0czsgc2V0bm8r KykKIAkJCXsKIAkJCQlFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoc3RhdGUsIGFnZ3N0YXRlLCAmc2Ny YXRjaCwgdHJhbnNfZmNpbmZvLAotCQkJCQkJCQkJICBwZXJ0cmFucywgdHJhbnNubywgc2V0bm8s IHNldG9mZiwgZmFsc2UpOworCQkJCQkJCQkJICBwZXJ0cmFucywgdHJhbnNubywgc2V0bm8sIHNl dG9mZiwgZmFsc2UsCisJCQkJCQkJCQkgIHNwaWxsZWQpOwogCQkJCXNldG9mZisrOwogCQkJfQog CQl9CkBAIC0zMTc4LDcgKzMxODAsOCBAQCBFeGVjQnVpbGRBZ2dUcmFucyhBZ2dTdGF0ZSAqYWdn c3RhdGUsIEFnZ1N0YXRlUGVyUGhhc2UgcGhhc2UsCiAJCQlmb3IgKHNldG5vID0gMDsgc2V0bm8g PCBudW1IYXNoZXM7IHNldG5vKyspCiAJCQl7CiAJCQkJRXhlY0J1aWxkQWdnVHJhbnNDYWxsKHN0 YXRlLCBhZ2dzdGF0ZSwgJnNjcmF0Y2gsIHRyYW5zX2ZjaW5mbywKLQkJCQkJCQkJCSAgcGVydHJh bnMsIHRyYW5zbm8sIHNldG5vLCBzZXRvZmYsIHRydWUpOworCQkJCQkJCQkJICBwZXJ0cmFucywg dHJhbnNubywgc2V0bm8sIHNldG9mZiwgdHJ1ZSwKKwkJCQkJCQkJCSAgc3BpbGxlZCk7CiAJCQkJ c2V0b2ZmKys7CiAJCQl9CiAJCX0KQEAgLTMyMjYsNyArMzIyOSw4IEBAIHN0YXRpYyB2b2lkCiBF eGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUgKmFnZ3N0YXRl LAogCQkJCQkgIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwKIAkJCQkJICBGdW5jdGlvbkNhbGxJbmZv IGZjaW5mbywgQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywKLQkJCQkJICBpbnQgdHJhbnNubywg aW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCkKKwkJCQkJICBpbnQgdHJhbnNubywg aW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCwKKwkJCQkJICBib29sIHNwaWxsZWQp CiB7CiAJaW50CQkJYWRqdXN0X2luaXRfanVtcG51bGwgPSAtMTsKIAlpbnQJCQlhZGp1c3Rfc3Ry aWN0X2p1bXBudWxsID0gLTE7CkBAIC0zMjQ4LDcgKzMyNTIsOCBAQCBFeGVjQnVpbGRBZ2dUcmFu c0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUgKmFnZ3N0YXRlLAogCQlmY2luZm8tPmZs aW5mby0+Zm5fc3RyaWN0ICYmCiAJCXBlcnRyYW5zLT5pbml0VmFsdWVJc051bGwpCiAJewotCQlz Y3JhdGNoLT5vcGNvZGUgPSBFRU9QX0FHR19JTklUX1RSQU5TOworCQlzY3JhdGNoLT5vcGNvZGUg PSBzcGlsbGVkID8KKwkJCUVFT1BfQUdHX0lOSVRfVFJBTlNfU1BJTExFRCA6IEVFT1BfQUdHX0lO SVRfVFJBTlM7CiAJCXNjcmF0Y2gtPmQuYWdnX2luaXRfdHJhbnMuYWdnc3RhdGUgPSBhZ2dzdGF0 ZTsKIAkJc2NyYXRjaC0+ZC5hZ2dfaW5pdF90cmFucy5wZXJ0cmFucyA9IHBlcnRyYW5zOwogCQlz Y3JhdGNoLT5kLmFnZ19pbml0X3RyYW5zLnNldG5vID0gc2V0bm87CkBAIC0zMjY1LDcgKzMyNzAs OCBAQCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUgKmFn Z3N0YXRlLAogCWlmIChwZXJ0cmFucy0+bnVtU29ydENvbHMgPT0gMCAmJgogCQlmY2luZm8tPmZs aW5mby0+Zm5fc3RyaWN0KQogCXsKLQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9BR0dfU1RSSUNU X1RSQU5TX0NIRUNLOworCQlzY3JhdGNoLT5vcGNvZGUgPSBzcGlsbGVkID8KKwkJCUVFT1BfQUdH X1NUUklDVF9UUkFOU19DSEVDS19TUElMTEVEIDogRUVPUF9BR0dfU1RSSUNUX1RSQU5TX0NIRUNL OwogCQlzY3JhdGNoLT5kLmFnZ19zdHJpY3RfdHJhbnNfY2hlY2suYWdnc3RhdGUgPSBhZ2dzdGF0 ZTsKIAkJc2NyYXRjaC0+ZC5hZ2dfc3RyaWN0X3RyYW5zX2NoZWNrLnNldG5vID0gc2V0bm87CiAJ CXNjcmF0Y2gtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5zZXRvZmYgPSBzZXRvZmY7CkBAIC0z MjgzLDkgKzMyODksMTEgQEAgRXhlY0J1aWxkQWdnVHJhbnNDYWxsKEV4cHJTdGF0ZSAqc3RhdGUs IEFnZ1N0YXRlICphZ2dzdGF0ZSwKIAogCS8qIGludm9rZSBhcHByb3ByaWF0ZSB0cmFuc2l0aW9u IGltcGxlbWVudGF0aW9uICovCiAJaWYgKHBlcnRyYW5zLT5udW1Tb3J0Q29scyA9PSAwICYmIHBl cnRyYW5zLT50cmFuc3R5cGVCeVZhbCkKLQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9BR0dfUExB SU5fVFJBTlNfQllWQUw7CisJCXNjcmF0Y2gtPm9wY29kZSA9IHNwaWxsZWQgPworCQkJRUVPUF9B R0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExFRCA6IEVFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFM OwogCWVsc2UgaWYgKHBlcnRyYW5zLT5udW1Tb3J0Q29scyA9PSAwKQotCQlzY3JhdGNoLT5vcGNv ZGUgPSBFRU9QX0FHR19QTEFJTl9UUkFOUzsKKwkJc2NyYXRjaC0+b3Bjb2RlID0gc3BpbGxlZCA/ CisJCQlFRU9QX0FHR19QTEFJTl9UUkFOU19TUElMTEVEIDogRUVPUF9BR0dfUExBSU5fVFJBTlM7 CiAJZWxzZSBpZiAocGVydHJhbnMtPm51bUlucHV0cyA9PSAxKQogCQlzY3JhdGNoLT5vcGNvZGUg PSBFRU9QX0FHR19PUkRFUkVEX1RSQU5TX0RBVFVNOwogCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwckludGVycC5jCmluZGV4IGY5MDFiYWYxZWQzLi5lMDNiZThiYjZiNyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCkBAIC00MzAsOSArNDMwLDEzIEBAIEV4ZWNJbnRl cnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNu dWxsKQogCQkmJkNBU0VfRUVPUF9BR0dfU1RSSUNUX0lOUFVUX0NIRUNLX0FSR1MsCiAJCSYmQ0FT RV9FRU9QX0FHR19TVFJJQ1RfSU5QVVRfQ0hFQ0tfTlVMTFMsCiAJCSYmQ0FTRV9FRU9QX0FHR19J TklUX1RSQU5TLAorCQkmJkNBU0VfRUVPUF9BR0dfSU5JVF9UUkFOU19TUElMTEVELAogCQkmJkNB U0VfRUVPUF9BR0dfU1RSSUNUX1RSQU5TX0NIRUNLLAorCQkmJkNBU0VfRUVPUF9BR0dfU1RSSUNU X1RSQU5TX0NIRUNLX1NQSUxMRUQsCiAJCSYmQ0FTRV9FRU9QX0FHR19QTEFJTl9UUkFOU19CWVZB TCwKKwkJJiZDQVNFX0VFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMX1NQSUxMRUQsCiAJCSYmQ0FT RV9FRU9QX0FHR19QTEFJTl9UUkFOUywKKwkJJiZDQVNFX0VFT1BfQUdHX1BMQUlOX1RSQU5TX1NQ SUxMRUQsCiAJCSYmQ0FTRV9FRU9QX0FHR19PUkRFUkVEX1RSQU5TX0RBVFVNLAogCQkmJkNBU0Vf RUVPUF9BR0dfT1JERVJFRF9UUkFOU19UVVBMRSwKIAkJJiZDQVNFX0VFT1BfTEFTVApAQCAtMTYy NSw2ICsxNjI5LDM2IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250 ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCiAJCQlFRU9fTkVYVCgpOwogCQl9CisJCUVF T19DQVNFKEVFT1BfQUdHX0lOSVRfVFJBTlNfU1BJTExFRCkKKwkJeworCQkJQWdnU3RhdGUgICAq YWdnc3RhdGU7CisJCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwOworCQkJQWdnU3RhdGVQZXJH cm91cCBwZXJncm91cF9hbGxhZ2dzOworCisJCQlhZ2dzdGF0ZSA9IG9wLT5kLmFnZ19pbml0X3Ry YW5zLmFnZ3N0YXRlOworCQkJcGVyZ3JvdXBfYWxsYWdncyA9IGFnZ3N0YXRlLT5hbGxfcGVyZ3Jv dXBzW29wLT5kLmFnZ19pbml0X3RyYW5zLnNldG9mZl07CisKKwkJCWlmIChwZXJncm91cF9hbGxh Z2dzID09IE5VTEwpCisJCQkJRUVPX05FWFQoKTsKKworCQkJcGVyZ3JvdXAgPSAmcGVyZ3JvdXBf YWxsYWdnc1tvcC0+ZC5hZ2dfaW5pdF90cmFucy50cmFuc25vXTsKKworCQkJLyogSWYgdHJhbnNW YWx1ZSBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLCBkbyBzbyBub3cuICovCisJCQlpZiAo cGVyZ3JvdXAtPm5vVHJhbnNWYWx1ZSkKKwkJCXsKKwkJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRy YW5zID0gb3AtPmQuYWdnX2luaXRfdHJhbnMucGVydHJhbnM7CisKKwkJCQlhZ2dzdGF0ZS0+Y3Vy YWdnY29udGV4dCA9IG9wLT5kLmFnZ19pbml0X3RyYW5zLmFnZ2NvbnRleHQ7CisJCQkJYWdnc3Rh dGUtPmN1cnJlbnRfc2V0ID0gb3AtPmQuYWdnX2luaXRfdHJhbnMuc2V0bm87CisKKwkJCQlFeGVj QWdnSW5pdEdyb3VwKGFnZ3N0YXRlLCBwZXJ0cmFucywgcGVyZ3JvdXApOworCisJCQkJLyogY29w aWVkIHRyYW5zIHZhbHVlIGZyb20gaW5wdXQsIGRvbmUgdGhpcyByb3VuZCAqLworCQkJCUVFT19K VU1QKG9wLT5kLmFnZ19pbml0X3RyYW5zLmp1bXBudWxsKTsKKwkJCX0KKworCQkJRUVPX05FWFQo KTsKKwkJfQogCiAJCS8qIGNoZWNrIHRoYXQgYSBzdHJpY3QgYWdncmVnYXRlJ3MgaW5wdXQgaXNu J3QgTlVMTCAqLwogCQlFRU9fQ0FTRShFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0spCkBAIC0x NjQyLDYgKzE2NzYsMjUgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNv bnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAKIAkJCUVFT19ORVhUKCk7CiAJCX0KKwkJ RUVPX0NBU0UoRUVPUF9BR0dfU1RSSUNUX1RSQU5TX0NIRUNLX1NQSUxMRUQpCisJCXsKKwkJCUFn Z1N0YXRlICAgKmFnZ3N0YXRlOworCQkJQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cDsKKwkJCUFn Z1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXBfYWxsYWdnczsKKworCQkJYWdnc3RhdGUgPSBvcC0+ZC5h Z2dfc3RyaWN0X3RyYW5zX2NoZWNrLmFnZ3N0YXRlOworCQkJcGVyZ3JvdXBfYWxsYWdncyA9IGFn Z3N0YXRlLT5hbGxfcGVyZ3JvdXBzW29wLT5kLmFnZ19zdHJpY3RfdHJhbnNfY2hlY2suc2V0b2Zm XTsKKworCQkJaWYgKHBlcmdyb3VwX2FsbGFnZ3MgPT0gTlVMTCkKKwkJCQlFRU9fTkVYVCgpOwor CisJCQlwZXJncm91cCA9ICZwZXJncm91cF9hbGxhZ2dzW29wLT5kLmFnZ19zdHJpY3RfdHJhbnNf Y2hlY2sudHJhbnNub107CisKKwkJCWlmICh1bmxpa2VseShwZXJncm91cC0+dHJhbnNWYWx1ZUlz TnVsbCkpCisJCQkJRUVPX0pVTVAob3AtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5qdW1wbnVs bCk7CisKKwkJCUVFT19ORVhUKCk7CisJCX0KIAogCQkvKgogCQkgKiBFdmFsdWF0ZSBhZ2dyZWdh dGUgdHJhbnNpdGlvbiAvIGNvbWJpbmUgZnVuY3Rpb24gdGhhdCBoYXMgYQpAQCAtMTY5MSw2ICsx NzQ0LDUyIEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICpl Y29udGV4dCwgYm9vbCAqaXNudWxsKQogCiAJCQlFRU9fTkVYVCgpOwogCQl9CisJCUVFT19DQVNF KEVFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMX1NQSUxMRUQpCisJCXsKKwkJCUFnZ1N0YXRlICAg KmFnZ3N0YXRlOworCQkJQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFuczsKKwkJCUFnZ1N0YXRlUGVy R3JvdXAgcGVyZ3JvdXA7CisJCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwX2FsbGFnZ3M7CisJ CQlGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbzsKKwkJCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsK KwkJCURhdHVtCQluZXdWYWw7CisKKwkJCWFnZ3N0YXRlID0gb3AtPmQuYWdnX3RyYW5zLmFnZ3N0 YXRlOworCQkJcGVydHJhbnMgPSBvcC0+ZC5hZ2dfdHJhbnMucGVydHJhbnM7CisKKwkJCXBlcmdy b3VwX2FsbGFnZ3MgPSBhZ2dzdGF0ZS0+YWxsX3Blcmdyb3Vwc1tvcC0+ZC5hZ2dfdHJhbnMuc2V0 b2ZmXTsKKwkJCXBlcmdyb3VwID0gJnBlcmdyb3VwX2FsbGFnZ3Nbb3AtPmQuYWdnX3RyYW5zLnRy YW5zbm9dOworCisJCQlpZiAocGVyZ3JvdXBfYWxsYWdncyA9PSBOVUxMKQorCQkJCUVFT19ORVhU KCk7CisKKwkJCUFzc2VydChwZXJ0cmFucy0+dHJhbnN0eXBlQnlWYWwpOworCisJCQlmY2luZm8g PSBwZXJ0cmFucy0+dHJhbnNmbl9mY2luZm87CisKKwkJCS8qIGNmLiBzZWxlY3RfY3VycmVudF9z ZXQoKSAqLworCQkJYWdnc3RhdGUtPmN1cmFnZ2NvbnRleHQgPSBvcC0+ZC5hZ2dfdHJhbnMuYWdn Y29udGV4dDsKKwkJCWFnZ3N0YXRlLT5jdXJyZW50X3NldCA9IG9wLT5kLmFnZ190cmFucy5zZXRu bzsKKworCQkJLyogc2V0IHVwIGFnZ3N0YXRlLT5jdXJwZXJ0cmFucyBmb3IgQWdnR2V0QWdncmVm KCkgKi8KKwkJCWFnZ3N0YXRlLT5jdXJwZXJ0cmFucyA9IHBlcnRyYW5zOworCisJCQkvKiBpbnZv a2UgdHJhbnNpdGlvbiBmdW5jdGlvbiBpbiBwZXItdHVwbGUgY29udGV4dCAqLworCQkJb2xkQ29u dGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9w ZXJfdHVwbGVfbWVtb3J5KTsKKworCQkJZmNpbmZvLT5hcmdzWzBdLnZhbHVlID0gcGVyZ3JvdXAt PnRyYW5zVmFsdWU7CisJCQlmY2luZm8tPmFyZ3NbMF0uaXNudWxsID0gcGVyZ3JvdXAtPnRyYW5z VmFsdWVJc051bGw7CisJCQlmY2luZm8tPmlzbnVsbCA9IGZhbHNlOyAvKiBqdXN0IGluIGNhc2Ug dHJhbnNmbiBkb2Vzbid0IHNldCBpdCAqLworCisJCQluZXdWYWwgPSBGdW5jdGlvbkNhbGxJbnZv a2UoZmNpbmZvKTsKKworCQkJcGVyZ3JvdXAtPnRyYW5zVmFsdWUgPSBuZXdWYWw7CisJCQlwZXJn cm91cC0+dHJhbnNWYWx1ZUlzTnVsbCA9IGZjaW5mby0+aXNudWxsOworCisJCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisKKwkJCUVFT19ORVhUKCk7CisJCX0KIAogCQkvKgog CQkgKiBFdmFsdWF0ZSBhZ2dyZWdhdGUgdHJhbnNpdGlvbiAvIGNvbWJpbmUgZnVuY3Rpb24gdGhh dCBoYXMgYQpAQCAtMTczNSw2ICsxODM0LDY3IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAq c3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCiAJCQluZXdWYWwg PSBGdW5jdGlvbkNhbGxJbnZva2UoZmNpbmZvKTsKIAorCQkJLyoKKwkJCSAqIEZvciBwYXNzLWJ5 LXJlZiBkYXRhdHlwZSwgbXVzdCBjb3B5IHRoZSBuZXcgdmFsdWUgaW50bworCQkJICogYWdnY29u dGV4dCBhbmQgZnJlZSB0aGUgcHJpb3IgdHJhbnNWYWx1ZS4gIEJ1dCBpZiB0cmFuc2ZuCisJCQkg KiByZXR1cm5lZCBhIHBvaW50ZXIgdG8gaXRzIGZpcnN0IGlucHV0LCB3ZSBkb24ndCBuZWVkIHRv IGRvCisJCQkgKiBhbnl0aGluZy4gIEFsc28sIGlmIHRyYW5zZm4gcmV0dXJuZWQgYSBwb2ludGVy IHRvIGEgUi9XCisJCQkgKiBleHBhbmRlZCBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGEgY2hpbGQg b2YgdGhlIGFnZ2NvbnRleHQsCisJCQkgKiBhc3N1bWUgd2UgY2FuIGFkb3B0IHRoYXQgdmFsdWUg d2l0aG91dCBjb3B5aW5nIGl0LgorCQkJICovCisJCQlpZiAoRGF0dW1HZXRQb2ludGVyKG5ld1Zh bCkgIT0gRGF0dW1HZXRQb2ludGVyKHBlcmdyb3VwLT50cmFuc1ZhbHVlKSkKKwkJCQluZXdWYWwg PSBFeGVjQWdnVHJhbnNSZXBhcmVudChhZ2dzdGF0ZSwgcGVydHJhbnMsCisJCQkJCQkJCQkJCSAg bmV3VmFsLCBmY2luZm8tPmlzbnVsbCwKKwkJCQkJCQkJCQkJICBwZXJncm91cC0+dHJhbnNWYWx1 ZSwKKwkJCQkJCQkJCQkJICBwZXJncm91cC0+dHJhbnNWYWx1ZUlzTnVsbCk7CisKKwkJCXBlcmdy b3VwLT50cmFuc1ZhbHVlID0gbmV3VmFsOworCQkJcGVyZ3JvdXAtPnRyYW5zVmFsdWVJc051bGwg PSBmY2luZm8tPmlzbnVsbDsKKworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQp OworCisJCQlFRU9fTkVYVCgpOworCQl9CisJCUVFT19DQVNFKEVFT1BfQUdHX1BMQUlOX1RSQU5T X1NQSUxMRUQpCisJCXsKKwkJCUFnZ1N0YXRlICAgKmFnZ3N0YXRlOworCQkJQWdnU3RhdGVQZXJU cmFucyBwZXJ0cmFuczsKKwkJCUFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXA7CisJCQlBZ2dTdGF0 ZVBlckdyb3VwIHBlcmdyb3VwX2FsbGFnZ3M7CisJCQlGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbzsK KwkJCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsKKwkJCURhdHVtCQluZXdWYWw7CisKKwkJCWFn Z3N0YXRlID0gb3AtPmQuYWdnX3RyYW5zLmFnZ3N0YXRlOworCQkJcGVydHJhbnMgPSBvcC0+ZC5h Z2dfdHJhbnMucGVydHJhbnM7CisKKwkJCXBlcmdyb3VwX2FsbGFnZ3MgPSBhZ2dzdGF0ZS0+YWxs X3Blcmdyb3Vwc1tvcC0+ZC5hZ2dfdHJhbnMuc2V0b2ZmXTsKKworCQkJaWYgKHBlcmdyb3VwX2Fs bGFnZ3MgPT0gTlVMTCkKKwkJCQlFRU9fTkVYVCgpOworCisJCQlwZXJncm91cCA9ICZwZXJncm91 cF9hbGxhZ2dzW29wLT5kLmFnZ190cmFucy50cmFuc25vXTsKKworCQkJQXNzZXJ0KCFwZXJ0cmFu cy0+dHJhbnN0eXBlQnlWYWwpOworCisJCQlmY2luZm8gPSBwZXJ0cmFucy0+dHJhbnNmbl9mY2lu Zm87CisKKwkJCS8qIGNmLiBzZWxlY3RfY3VycmVudF9zZXQoKSAqLworCQkJYWdnc3RhdGUtPmN1 cmFnZ2NvbnRleHQgPSBvcC0+ZC5hZ2dfdHJhbnMuYWdnY29udGV4dDsKKwkJCWFnZ3N0YXRlLT5j dXJyZW50X3NldCA9IG9wLT5kLmFnZ190cmFucy5zZXRubzsKKworCQkJLyogc2V0IHVwIGFnZ3N0 YXRlLT5jdXJwZXJ0cmFucyBmb3IgQWdnR2V0QWdncmVmKCkgKi8KKwkJCWFnZ3N0YXRlLT5jdXJw ZXJ0cmFucyA9IHBlcnRyYW5zOworCisJCQkvKiBpbnZva2UgdHJhbnNpdGlvbiBmdW5jdGlvbiBp biBwZXItdHVwbGUgY29udGV4dCAqLworCQkJb2xkQ29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5KTsKKworCQkJ ZmNpbmZvLT5hcmdzWzBdLnZhbHVlID0gcGVyZ3JvdXAtPnRyYW5zVmFsdWU7CisJCQlmY2luZm8t PmFyZ3NbMF0uaXNudWxsID0gcGVyZ3JvdXAtPnRyYW5zVmFsdWVJc051bGw7CisJCQlmY2luZm8t PmlzbnVsbCA9IGZhbHNlOyAvKiBqdXN0IGluIGNhc2UgdHJhbnNmbiBkb2Vzbid0IHNldCBpdCAq LworCisJCQluZXdWYWwgPSBGdW5jdGlvbkNhbGxJbnZva2UoZmNpbmZvKTsKKwogCQkJLyoKIAkJ CSAqIEZvciBwYXNzLWJ5LXJlZiBkYXRhdHlwZSwgbXVzdCBjb3B5IHRoZSBuZXcgdmFsdWUgaW50 bwogCQkJICogYWdnY29udGV4dCBhbmQgZnJlZSB0aGUgcHJpb3IgdHJhbnNWYWx1ZS4gIEJ1dCBp ZiB0cmFuc2ZuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjR3JvdXBpbmcu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNHcm91cGluZy5jCmluZGV4IDM2MDNjNThiNjNl Li5iMzkwN2UwNmVkMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0dyb3Vw aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0dyb3VwaW5nLmMKQEAgLTI1LDgg KzI1LDkgQEAKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9t ZW11dGlscy5oIgogCi1zdGF0aWMgdWludDMyIFR1cGxlSGFzaFRhYmxlSGFzaChzdHJ1Y3QgdHVw bGVoYXNoX2hhc2ggKnRiLCBjb25zdCBNaW5pbWFsVHVwbGUgdHVwbGUpOwogc3RhdGljIGludAlU dXBsZUhhc2hUYWJsZU1hdGNoKHN0cnVjdCB0dXBsZWhhc2hfaGFzaCAqdGIsIGNvbnN0IE1pbmlt YWxUdXBsZSB0dXBsZTEsIGNvbnN0IE1pbmltYWxUdXBsZSB0dXBsZTIpOworc3RhdGljIFR1cGxl SGFzaEVudHJ5IExvb2t1cFR1cGxlSGFzaEVudHJ5X2ludGVybmFsKAorCVR1cGxlSGFzaFRhYmxl IGhhc2h0YWJsZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmlzbmV3LCB1aW50MzIgaGFz aCk7CiAKIC8qCiAgKiBEZWZpbmUgcGFyYW1ldGVycyBmb3IgdHVwbGUgaGFzaCB0YWJsZSBjb2Rl IGdlbmVyYXRpb24uIFRoZSBpbnRlcmZhY2UgaXMKQEAgLTI4NCw2ICsyODUsMTcgQEAgUmVzZXRU dXBsZUhhc2hUYWJsZShUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUpCiAJdHVwbGVoYXNoX3Jlc2V0 KGhhc2h0YWJsZS0+aGFzaHRhYik7CiB9CiAKKy8qCisgKiBEZXN0cm95IHRoZSBoYXNoIHRhYmxl LiBOb3RlIHRoYXQgdGhlIHRhYmxlY3h0IHBhc3NlZCB0bworICogQnVpbGRUdXBsZUhhc2hUYWJs ZUV4dCgpIHNob3VsZCBhbHNvIGJlIHJlc2V0LCBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZQorICog bGVha3MuCisgKi8KK3ZvaWQKK0Rlc3Ryb3lUdXBsZUhhc2hUYWJsZShUdXBsZUhhc2hUYWJsZSBo YXNodGFibGUpCit7CisJdHVwbGVoYXNoX2Rlc3Ryb3koaGFzaHRhYmxlLT5oYXNodGFiKTsKK30K KwogLyoKICAqIEZpbmQgb3IgY3JlYXRlIGEgaGFzaHRhYmxlIGVudHJ5IGZvciB0aGUgdHVwbGUg Z3JvdXAgY29udGFpbmluZyB0aGUKICAqIGdpdmVuIHR1cGxlLiAgVGhlIHR1cGxlIG11c3QgYmUg dGhlIHNhbWUgdHlwZSBhcyB0aGUgaGFzaHRhYmxlIGVudHJpZXMuCkBAIC0zMDAsMTAgKzMxMiw5 IEBAIFR1cGxlSGFzaEVudHJ5CiBMb29rdXBUdXBsZUhhc2hFbnRyeShUdXBsZUhhc2hUYWJsZSBo YXNodGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkgYm9vbCAqaXNuZXcpCiB7Ci0J VHVwbGVIYXNoRW50cnlEYXRhICplbnRyeTsKLQlNZW1vcnlDb250ZXh0IG9sZENvbnRleHQ7Ci0J Ym9vbAkJZm91bmQ7Ci0JTWluaW1hbFR1cGxlIGtleTsKKwlUdXBsZUhhc2hFbnRyeQllbnRyeTsK KwlNZW1vcnlDb250ZXh0CW9sZENvbnRleHQ7CisJdWludDMyCQkJaGFzaDsKIAogCS8qIE5lZWQg dG8gcnVuIHRoZSBoYXNoIGZ1bmN0aW9ucyBpbiBzaG9ydC1saXZlZCBjb250ZXh0ICovCiAJb2xk Q29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhoYXNodGFibGUtPnRlbXBjeHQpOwpAQCAt MzEzLDMyICszMjQsMjkgQEAgTG9va3VwVHVwbGVIYXNoRW50cnkoVHVwbGVIYXNoVGFibGUgaGFz aHRhYmxlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAloYXNodGFibGUtPmluX2hhc2hfZnVuY3Mg PSBoYXNodGFibGUtPnRhYl9oYXNoX2Z1bmNzOwogCWhhc2h0YWJsZS0+Y3VyX2VxX2Z1bmMgPSBo YXNodGFibGUtPnRhYl9lcV9mdW5jOwogCi0Ja2V5ID0gTlVMTDsJCQkJCS8qIGZsYWcgdG8gcmVm ZXJlbmNlIGlucHV0c2xvdCAqLworCWhhc2ggPSBUdXBsZUhhc2hUYWJsZUhhc2goaGFzaHRhYmxl LT5oYXNodGFiLCBOVUxMKTsKKwllbnRyeSA9IExvb2t1cFR1cGxlSGFzaEVudHJ5X2ludGVybmFs KGhhc2h0YWJsZSwgc2xvdCwgaXNuZXcsIGhhc2gpOwogCi0JaWYgKGlzbmV3KQotCXsKLQkJZW50 cnkgPSB0dXBsZWhhc2hfaW5zZXJ0KGhhc2h0YWJsZS0+aGFzaHRhYiwga2V5LCAmZm91bmQpOwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDb250ZXh0KTsKIAotCQlpZiAoZm91bmQpCi0JCXsK LQkJCS8qIGZvdW5kIHByZS1leGlzdGluZyBlbnRyeSAqLwotCQkJKmlzbmV3ID0gZmFsc2U7Ci0J CX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBjcmVhdGVkIG5ldyBlbnRyeSAqLwotCQkJKmlzbmV3ID0g dHJ1ZTsKLQkJCS8qIHplcm8gY2FsbGVyIGRhdGEgKi8KLQkJCWVudHJ5LT5hZGRpdGlvbmFsID0g TlVMTDsKLQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhoYXNodGFibGUtPnRhYmxlY3h0KTsKLQkJ CS8qIENvcHkgdGhlIGZpcnN0IHR1cGxlIGludG8gdGhlIHRhYmxlIGNvbnRleHQgKi8KLQkJCWVu dHJ5LT5maXJzdFR1cGxlID0gRXhlY0NvcHlTbG90TWluaW1hbFR1cGxlKHNsb3QpOwotCQl9Ci0J fQotCWVsc2UKLQl7Ci0JCWVudHJ5ID0gdHVwbGVoYXNoX2xvb2t1cChoYXNodGFibGUtPmhhc2h0 YWIsIGtleSk7Ci0JfQorCXJldHVybiBlbnRyeTsKK30KKworLyoKKyAqIEEgdmFyaWFudCBvZiBM b29rdXBUdXBsZUhhc2hFbnRyeSBmb3IgY2FsbGVycyB0aGF0IGhhdmUgYWxyZWFkeSBjb21wdXRl ZAorICogdGhlIGhhc2ggdmFsdWUuCisgKi8KK1R1cGxlSGFzaEVudHJ5CitMb29rdXBUdXBsZUhh c2hFbnRyeUhhc2goVHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCwKKwkJCQkJCSBib29sICppc25ldywgdWludDMyIGhhc2gpCit7CisJVHVwbGVIYXNoRW50cnkJ ZW50cnk7CisJTWVtb3J5Q29udGV4dAlvbGRDb250ZXh0OworCisJLyogTmVlZCB0byBydW4gdGhl IGhhc2ggZnVuY3Rpb25zIGluIHNob3J0LWxpdmVkIGNvbnRleHQgKi8KKwlvbGRDb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKGhhc2h0YWJsZS0+dGVtcGN4dCk7CisKKwllbnRyeSA9IExv b2t1cFR1cGxlSGFzaEVudHJ5X2ludGVybmFsKGhhc2h0YWJsZSwgc2xvdCwgaXNuZXcsIGhhc2gp OwogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOwogCkBAIC0zODksNyArMzk3 LDcgQEAgRmluZFR1cGxlSGFzaEVudHJ5KFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwgVHVwbGVU YWJsZVNsb3QgKnNsb3QsCiAgKiBBbHNvLCB0aGUgY2FsbGVyIG11c3Qgc2VsZWN0IGFuIGFwcHJv cHJpYXRlIG1lbW9yeSBjb250ZXh0IGZvciBydW5uaW5nCiAgKiB0aGUgaGFzaCBmdW5jdGlvbnMu IChkeW5haGFzaC5jIGRvZXNuJ3QgY2hhbmdlIEN1cnJlbnRNZW1vcnlDb250ZXh0LikKICAqLwot c3RhdGljIHVpbnQzMgordWludDMyCiBUdXBsZUhhc2hUYWJsZUhhc2goc3RydWN0IHR1cGxlaGFz aF9oYXNoICp0YiwgY29uc3QgTWluaW1hbFR1cGxlIHR1cGxlKQogewogCVR1cGxlSGFzaFRhYmxl IGhhc2h0YWJsZSA9IChUdXBsZUhhc2hUYWJsZSkgdGItPnByaXZhdGVfZGF0YTsKQEAgLTQ1MCw2 ICs0NTgsNTQgQEAgVHVwbGVIYXNoVGFibGVIYXNoKHN0cnVjdCB0dXBsZWhhc2hfaGFzaCAqdGIs IGNvbnN0IE1pbmltYWxUdXBsZSB0dXBsZSkKIAlyZXR1cm4gbXVybXVyaGFzaDMyKGhhc2hrZXkp OwogfQogCisvKgorICogRG9lcyB0aGUgd29yayBvZiBMb29rdXBUdXBsZUhhc2hFbnRyeSBhbmQg TG9va3VwVHVwbGVIYXNoRW50cnlIYXNoLiBVc2VmdWwKKyAqIHNvIHRoYXQgd2UgY2FuIGF2b2lk IHN3aXRjaGluZyB0aGUgbWVtb3J5IGNvbnRleHQgbXVsdGlwbGUgdGltZXMgZm9yCisgKiBMb29r dXBUdXBsZUhhc2hFbnRyeS4KKyAqLworc3RhdGljIFR1cGxlSGFzaEVudHJ5CitMb29rdXBUdXBs ZUhhc2hFbnRyeV9pbnRlcm5hbChUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUsIFR1cGxlVGFibGVT bG90ICpzbG90LAorCQkJCQkJCSAgYm9vbCAqaXNuZXcsIHVpbnQzMiBoYXNoKQoreworCVR1cGxl SGFzaEVudHJ5RGF0YSAqZW50cnk7CisJYm9vbAkJZm91bmQ7CisJTWluaW1hbFR1cGxlIGtleTsK KworCS8qIHNldCB1cCBkYXRhIG5lZWRlZCBieSBoYXNoIGFuZCBtYXRjaCBmdW5jdGlvbnMgKi8K KwloYXNodGFibGUtPmlucHV0c2xvdCA9IHNsb3Q7CisJaGFzaHRhYmxlLT5pbl9oYXNoX2Z1bmNz ID0gaGFzaHRhYmxlLT50YWJfaGFzaF9mdW5jczsKKwloYXNodGFibGUtPmN1cl9lcV9mdW5jID0g aGFzaHRhYmxlLT50YWJfZXFfZnVuYzsKKworCWtleSA9IE5VTEw7CQkJCQkvKiBmbGFnIHRvIHJl ZmVyZW5jZSBpbnB1dHNsb3QgKi8KKworCWlmIChpc25ldykKKwl7CisJCWVudHJ5ID0gdHVwbGVo YXNoX2luc2VydF9oYXNoKGhhc2h0YWJsZS0+aGFzaHRhYiwga2V5LCBoYXNoLCAmZm91bmQpOwor CisJCWlmIChmb3VuZCkKKwkJeworCQkJLyogZm91bmQgcHJlLWV4aXN0aW5nIGVudHJ5ICovCisJ CQkqaXNuZXcgPSBmYWxzZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGNyZWF0ZWQgbmV3IGVu dHJ5ICovCisJCQkqaXNuZXcgPSB0cnVlOworCQkJLyogemVybyBjYWxsZXIgZGF0YSAqLworCQkJ ZW50cnktPmFkZGl0aW9uYWwgPSBOVUxMOworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhhc2h0 YWJsZS0+dGFibGVjeHQpOworCQkJLyogQ29weSB0aGUgZmlyc3QgdHVwbGUgaW50byB0aGUgdGFi bGUgY29udGV4dCAqLworCQkJZW50cnktPmZpcnN0VHVwbGUgPSBFeGVjQ29weVNsb3RNaW5pbWFs VHVwbGUoc2xvdCk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJZW50cnkgPSB0dXBsZWhhc2hfbG9v a3VwX2hhc2goaGFzaHRhYmxlLT5oYXNodGFiLCBrZXksIGhhc2gpOworCX0KKworCXJldHVybiBl bnRyeTsKK30KKwogLyoKICAqIFNlZSB3aGV0aGVyIHR3byB0dXBsZXMgKHByZXN1bWFibHkgb2Yg dGhlIHNhbWUgaGFzaCB2YWx1ZSkgbWF0Y2gKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUFnZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jCmluZGV4 IDdiOGNiOTFmMDRkLi44ODdlNWI5OWU2NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUFnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYwpAQCAtMTk0 LDYgKzE5NCwyNCBAQAogICoJICB0cmFuc2l0aW9uIHZhbHVlcy4gIGhhc2hjb250ZXh0IGlzIHRo ZSBzaW5nbGUgY29udGV4dCBjcmVhdGVkIHRvIHN1cHBvcnQKICAqCSAgYWxsIGhhc2ggdGFibGVz LgogICoKKyAqCSAgU3BpbGxpbmcgVG8gRGlzaworICoKKyAqCSAgV2hlbiB0aGUgaGFzaCB0YWJs ZSBtZW1vcnkgZXhjZWVkcyB3b3JrX21lbSwgd2UgYWR2YW5jZSB0aGUgdHJhbnNpdGlvbgorICoJ ICBzdGF0ZXMgb25seSBmb3IgZ3JvdXBzIGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUuIEZvciB0 dXBsZXMgdGhhdCB3b3VsZAorICoJICBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBoYXNoIHRhYmxlIGVu dHJpZXMgKGFuZCBpbml0aWFsaXplIG5ldyB0cmFuc2l0aW9uCisgKgkgIHN0YXRlcyksIHdlIHNw aWxsIHRoZW0gdG8gZGlzayB0byBiZSBwcm9jZXNzZWQgbGF0ZXIuIFRoZSB0dXBsZXMgYXJlCisg KgkgIHNwaWxsZWQgaW4gYSBwYXJ0aXRpb25lZCBtYW5uZXIsIHNvIHRoYXQgc3Vic2VxdWVudCBi YXRjaGVzIGFyZSBzbWFsbGVyCisgKgkgIGFuZCBsZXNzIGxpa2VseSB0byBleGNlZWQgd29ya19t ZW0gKGlmIGEgYmF0Y2ggZG9lcyBleGNlZWQgd29ya19tZW0sIGl0CisgKgkgIG11c3QgYmUgc3Bp bGxlZCByZWN1cnNpdmVseSkuCisgKgorICoJICBTcGlsbGVkIGRhdGEgaXMgd3JpdHRlbiB0byBs b2dpY2FsIHRhcGVzLiBUaGVzZSBwcm92aWRlIGJldHRlciBjb250cm9sCisgKgkgIG92ZXIgbWVt b3J5IHVzYWdlLCBkaXNrIHNwYWNlLCBhbmQgdGhlIG51bWJlciBvZiBmaWxlcyB0aGFuIGlmIHdl IHdlcmUKKyAqCSAgdG8gdXNlIGEgQnVmRmlsZSBmb3IgZWFjaCBzcGlsbC4KKyAqCisgKgkgIE5v dGUgdGhhdCBpdCdzIHBvc3NpYmxlIGZvciB0cmFuc2l0aW9uIHN0YXRlcyB0byBzdGFydCBzbWFs bCBidXQgdGhlbgorICoJICBncm93IHZlcnkgbGFyZ2U7IGZvciBpbnN0YW5jZSBpbiB0aGUgY2Fz ZSBvZiBBUlJBWV9BR0cuIEluIHN1Y2ggY2FzZXMsCisgKgkgIGl0J3Mgc3RpbGwgcG9zc2libGUg dG8gc2lnbmlmaWNhbnRseSBleGNlZWQgd29ya19tZW0uCisgKgogICogICAgVHJhbnNpdGlvbiAv IENvbWJpbmUgZnVuY3Rpb24gaW52b2NhdGlvbjoKICAqCiAgKiAgICBGb3IgcGVyZm9ybWFuY2Ug cmVhc29ucyB0cmFuc2l0aW9uIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGNvbWJpbmUKQEAgLTIzMywx MiArMjUxLDk4IEBACiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0aWxzL2R5bmFo YXNoLmgiCiAjaW5jbHVkZSAidXRpbHMvZXhwYW5kZWRkYXR1bS5oIgorI2luY2x1ZGUgInV0aWxz L2xvZ3RhcGUuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvdHVwbGVzb3J0LmgiCiAKKy8qCisgKiBDb250cm9sIGhvdyBtYW55IHBhcnRpdGlvbnMgYXJl IGNyZWF0ZWQgd2hlbiBzcGlsbGluZyBIYXNoQWdnIHRvCisgKiBkaXNrLgorICoKKyAqIEhBU0hB R0dfUEFSVElUSU9OX0ZBQ1RPUiBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBlc3RpbWF0ZWQgbnVtYmVy IG9mCisgKiBwYXJ0aXRpb25zIG5lZWRlZCBzdWNoIHRoYXQgZWFjaCBwYXJ0aXRpb24gd2lsbCBm aXQgaW4gbWVtb3J5LiBUaGUgZmFjdG9yCisgKiBpcyBzZXQgaGlnaGVyIHRoYW4gb25lIGJlY2F1 c2UgdGhlcmUncyBub3QgYSBoaWdoIGNvc3QgdG8gaGF2aW5nIGEgZmV3IHRvbworICogbWFueSBw YXJ0aXRpb25zLCBhbmQgaXQgbWFrZXMgaXQgbGVzcyBsaWtlbHkgdGhhdCBhIHBhcnRpdGlvbiB3 aWxsIG5lZWQgdG8KKyAqIGJlIHNwaWxsZWQgcmVjdXJzaXZlbHkuIEFub3RoZXIgYmVuZWZpdCBv ZiBoYXZpbmcgbW9yZSwgc21hbGxlciBwYXJ0aXRpb25zCisgKiBpcyB0aGF0IHNtYWxsIGhhc2gg dGFibGVzIG1heSBwZXJmb3JtIGJldHRlciB0aGFuIGxhcmdlIG9uZXMgZHVlIHRvIG1lbW9yeQor ICogY2FjaGluZyBlZmZlY3RzLgorICoKKyAqIFdlIGFsc28gc3BlY2lmeSBhIG1pbiBhbmQgbWF4 IG51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBzcGlsbC4gVG9vIGZldyBtaWdodAorICogbWVhbiBh IGxvdCBvZiB3YXN0ZWQgSS9PIGZyb20gcmVwZWF0ZWQgc3BpbGxpbmcgb2YgdGhlIHNhbWUgdHVw bGVzLiBUb28KKyAqIG1hbnkgd2lsbCByZXN1bHQgaW4gbG90cyBvZiBtZW1vcnkgd2FzdGVkIGJ1 ZmZlcmluZyB0aGUgc3BpbGwgZmlsZXMgKGFuZAorICogcG9zc2libHkgcHVzaGluZyBoaWRkZW4g Y29zdHMgdG8gdGhlIE9TIGZvciBtYW5hZ2luZyBtb3JlIGZpbGVzKS4KKyAqCisgKiBGb3IgcmVh ZGluZyBmcm9tIHRhcGVzLCB0aGUgYnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mCisg KiBCTENLU1ouIExhcmdlciB2YWx1ZXMgaGVscCB3aGVuIHJlYWRpbmcgZnJvbSBtdWx0aXBsZSB0 YXBlcyBjb25jdXJyZW50bHksCisgKiBidXQgdGhhdCBkb2Vzbid0IGhhcHBlbiBpbiBIYXNoQWdn LCBzbyB3ZSBzaW1wbHkgdXNlIEJMQ0tTWi4gV3JpdGluZyB0byBhCisgKiB0YXBlIGFsd2F5cyB1 c2VzIGEgYnVmZmVyIG9mIHNpemUgQkxDS1NaLgorICovCisjZGVmaW5lIEhBU0hBR0dfUEFSVElU SU9OX0ZBQ1RPUiAxLjUwCisjZGVmaW5lIEhBU0hBR0dfTUlOX1BBUlRJVElPTlMgNAorI2RlZmlu ZSBIQVNIQUdHX1JFQURfQlVGRkVSX1NJWkUgQkxDS1NaCisjZGVmaW5lIEhBU0hBR0dfV1JJVEVf QlVGRkVSX1NJWkUgQkxDS1NaCisKKy8qCisgKiBUcmFjayBhbGwgdGFwZXMgbmVlZGVkIGZvciBh IEhhc2hBZ2cgdGhhdCBzcGlsbHMuIFdlIGRvbid0IGtub3cgdGhlIG1heGltdW0KKyAqIG51bWJl ciBvZiB0YXBlcyBuZWVkZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBhbGdvcml0aG0gKGJlY2F1c2Ug aXQgY2FuCisgKiByZWN1cnNlKSwgc28gb25lIHRhcGUgc2V0IGlzIGFsbG9jYXRlZCBhbmQgZXh0 ZW5kZWQgYXMgbmVlZGVkIGZvciBuZXcKKyAqIHRhcGVzLiBXaGVuIGEgcGFydGljdWxhciB0YXBl IGlzIGFscmVhZHkgcmVhZCwgcmV3aW5kIGl0IGZvciB3cml0ZSBtb2RlIGFuZAorICogcHV0IGl0 IGluIHRoZSBmcmVlIGxpc3QuCisgKgorICogVGFwZXMnIGJ1ZmZlcnMgY2FuIHRha2UgdXAgc3Vi c3RhbnRpYWwgbWVtb3J5IHdoZW4gbWFueSB0YXBlcyBhcmUgb3BlbiBhdAorICogb25jZS4gV2Ug b25seSBuZWVkIG9uZSB0YXBlIG9wZW4gYXQgYSB0aW1lIGluIHJlYWQgbW9kZSAodXNpbmcgYSBi dWZmZXIKKyAqIHRoYXQncyBhIG11bHRpcGxlIG9mIEJMQ0tTWik7IGJ1dCB3ZSBuZWVkIHVwIHRv IEhBU0hBR0dfTUFYX1BBUlRJVElPTlMKKyAqIHRhcGVzIG9wZW4gaW4gd3JpdGUgbW9kZSAoZWFj aCByZXF1aXJpbmcgYSBidWZmZXIgb2Ygc2l6ZSBCTENLU1opLgorICovCit0eXBlZGVmIHN0cnVj dCBIYXNoVGFwZUluZm8KK3sKKwlMb2dpY2FsVGFwZVNldAkqdGFwZXNldDsKKwlpbnQJCQkJIG50 YXBlczsKKwlpbnQJCQkJKmZyZWV0YXBlczsKKwlpbnQJCQkJIG5mcmVldGFwZXM7Cit9IEhhc2hU YXBlSW5mbzsKKworLyoKKyAqIFJlcHJlc2VudHMgcGFydGl0aW9uZWQgc3BpbGwgZGF0YSBmb3Ig YSBzaW5nbGUgaGFzaHRhYmxlLiBDb250YWlucyB0aGUKKyAqIG5lY2Vzc2FyeSBpbmZvcm1hdGlv biB0byByb3V0ZSB0dXBsZXMgdG8gdGhlIGNvcnJlY3QgcGFydGl0aW9uLCBhbmQgdG8KKyAqIHRy YW5zZm9ybSB0aGUgc3BpbGxlZCBkYXRhIGludG8gbmV3IGJhdGNoZXMuCisgKgorICogVGhlIGhp Z2ggYml0cyBhcmUgdXNlZCBmb3IgcGFydGl0aW9uIHNlbGVjdGlvbiAod2hlbiByZWN1cnNpbmcs IHdlIGlnbm9yZQorICogdGhlIGJpdHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiB1c2VkIGZvciBw YXJ0aXRpb24gc2VsZWN0aW9uIGF0IGFuIGVhcmxpZXIKKyAqIGxldmVsKS4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgSGFzaEFnZ1NwaWxsCit7CisJTG9naWNhbFRhcGVTZXQgKnRhcGVzZXQ7CS8qIGJv cnJvd2VkIHJlZmVyZW5jZSB0byB0YXBlIHNldCAqLworCWludAkJIG5wYXJ0aXRpb25zOwkJLyog bnVtYmVyIG9mIHBhcnRpdGlvbnMgKi8KKwlpbnQJCSpwYXJ0aXRpb25zOwkJLyogc3BpbGwgcGFy dGl0aW9uIHRhcGUgbnVtYmVycyAqLworCWludDY0ICAgKm50dXBsZXM7CQkJLyogbnVtYmVyIG9m IHR1cGxlcyBpbiBlYWNoIHBhcnRpdGlvbiAqLworCXVpbnQzMiAgIG1hc2s7CQkJCS8qIG1hc2sg dG8gZmluZCBwYXJ0aXRpb24gZnJvbSBoYXNoIHZhbHVlICovCisJaW50ICAgICAgc2hpZnQ7CQkJ CS8qIGFmdGVyIG1hc2tpbmcsIHNoaWZ0IGJ5IHRoaXMgYW1vdW50ICovCit9IEhhc2hBZ2dTcGls bDsKKworLyoKKyAqIFJlcHJlc2VudHMgd29yayB0byBiZSBkb25lIGZvciBvbmUgcGFzcyBvZiBo YXNoIGFnZ3JlZ2F0aW9uICh3aXRoIG9ubHkgb25lCisgKiBncm91cGluZyBzZXQpLgorICoKKyAq IEFsc28gdHJhY2tzIHRoZSBiaXRzIG9mIHRoZSBoYXNoIGFscmVhZHkgdXNlZCBmb3IgcGFydGl0 aW9uIHNlbGVjdGlvbiBieQorICogZWFybGllciBpdGVyYXRpb25zLCBzbyB0aGF0IHRoaXMgYmF0 Y2ggY2FuIHVzZSBuZXcgYml0cy4gSWYgYWxsIGJpdHMgaGF2ZQorICogYWxyZWFkeSBiZWVuIHVz ZWQsIG5vIHBhcnRpdGlvbmluZyB3aWxsIGJlIGRvbmUgKGFueSBzcGlsbGVkIGRhdGEgd2lsbCBn bworICogdG8gYSBzaW5nbGUgb3V0cHV0IHRhcGUpLgorICovCit0eXBlZGVmIHN0cnVjdCBIYXNo QWdnQmF0Y2gKK3sKKwlpbnQJCQkJIHNldG5vOwkJCS8qIGdyb3VwaW5nIHNldCAqLworCWludAkJ CQkgdXNlZF9iaXRzOwkJLyogbnVtYmVyIG9mIGJpdHMgb2YgaGFzaCBhbHJlYWR5IHVzZWQgKi8K KwlMb2dpY2FsVGFwZVNldAkqdGFwZXNldDsJCS8qIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0YXBl IHNldCAqLworCWludAkJCQkgaW5wdXRfdGFwZW51bTsJLyogaW5wdXQgcGFydGl0aW9uIHRhcGUg Ki8KKwlpbnQ2NAkJCSBpbnB1dF90dXBsZXM7CS8qIG51bWJlciBvZiB0dXBsZXMgaW4gdGhpcyBi YXRjaCAqLworfSBIYXNoQWdnQmF0Y2g7CisKIHN0YXRpYyB2b2lkIHNlbGVjdF9jdXJyZW50X3Nl dChBZ2dTdGF0ZSAqYWdnc3RhdGUsIGludCBzZXRubywgYm9vbCBpc19oYXNoKTsKIHN0YXRpYyB2 b2lkIGluaXRpYWxpemVfcGhhc2UoQWdnU3RhdGUgKmFnZ3N0YXRlLCBpbnQgbmV3cGhhc2UpOwog c3RhdGljIFR1cGxlVGFibGVTbG90ICpmZXRjaF9pbnB1dF90dXBsZShBZ2dTdGF0ZSAqYWdnc3Rh dGUpOwpAQCAtMjY5LDE1ICszNzMsNTMgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9wcm9qZWN0aW9u X3Nsb3QoQWdnU3RhdGUgKmFnZ3N0YXRlLAogc3RhdGljIHZvaWQgZmluYWxpemVfYWdncmVnYXRl cyhBZ2dTdGF0ZSAqYWdnc3RhdGUsCiAJCQkJCQkJCUFnZ1N0YXRlUGVyQWdnIHBlcmFnZywKIAkJ CQkJCQkJQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cCk7Ci1zdGF0aWMgVHVwbGVUYWJsZVNsb3Qg KnByb2plY3RfYWdncmVnYXRlcyhBZ2dTdGF0ZSAqYWdnc3RhdGUpOwotc3RhdGljIEJpdG1hcHNl dCAqZmluZF91bmFnZ3JlZ2F0ZWRfY29scyhBZ2dTdGF0ZSAqYWdnc3RhdGUpOwotc3RhdGljIGJv b2wgZmluZF91bmFnZ3JlZ2F0ZWRfY29sc193YWxrZXIoTm9kZSAqbm9kZSwgQml0bWFwc2V0ICoq Y29sbm9zKTsKLXN0YXRpYyB2b2lkIGJ1aWxkX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRl KTsKLXN0YXRpYyBUdXBsZUhhc2hFbnRyeURhdGEgKmxvb2t1cF9oYXNoX2VudHJ5KEFnZ1N0YXRl ICphZ2dzdGF0ZSk7CitzdGF0aWMgdm9pZCBidWlsZF9oYXNoX3RhYmxlcyhBZ2dTdGF0ZSAqYWdn c3RhdGUpOworc3RhdGljIHZvaWQgYnVpbGRfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUs IGludCBzZXRubywKKwkJCQkJCQkgaW50NjQgbmdyb3Vwc19lc3RpbWF0ZSk7CitzdGF0aWMgdm9p ZCBwcmVwYXJlX2hhc2hfc2xvdChBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3RhdGljIHZvaWQgaGFz aGFnZ19yZWNvbXBpbGVfZXhwcmVzc2lvbnMoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyB1 aW50MzIgY2FsY3VsYXRlX2hhc2goQWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyBsb25nIGhh c2hfY2hvb3NlX251bV9idWNrZXRzKEFnZ1N0YXRlICphZ2dzdGF0ZSwKKwkJCQkJCQkJCWxvbmcg ZXN0aW1hdGVkX25idWNrZXRzLAorCQkJCQkJCQkJU2l6ZSBtZW1vcnkpOworc3RhdGljIGludCBo YXNoX2Nob29zZV9udW1fcGFydGl0aW9ucyh1aW50NjQgaW5wdXRfZ3JvdXBzLAorCQkJCQkJCQkJ ICBkb3VibGUgaGFzaGVudHJ5c2l6ZSwKKwkJCQkJCQkJCSAgaW50IHVzZWRfYml0cywKKwkJCQkJ CQkJCSAgaW50ICpsb2cyX25wYXJ0aXR0aW9ucyk7CitzdGF0aWMgQWdnU3RhdGVQZXJHcm91cCBs b29rdXBfaGFzaF9lbnRyeShBZ2dTdGF0ZSAqYWdnc3RhdGUsIHVpbnQzMiBoYXNoKTsKIHN0YXRp YyB2b2lkIGxvb2t1cF9oYXNoX2VudHJpZXMoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKIHN0YXRpYyBU dXBsZVRhYmxlU2xvdCAqYWdnX3JldHJpZXZlX2RpcmVjdChBZ2dTdGF0ZSAqYWdnc3RhdGUpOwog c3RhdGljIHZvaWQgYWdnX2ZpbGxfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3Rh dGljIGJvb2wgYWdnX3JlZmlsbF9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CiBzdGF0 aWMgVHVwbGVUYWJsZVNsb3QgKmFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dz dGF0ZSk7CitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKmFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlX2lu X21lbW9yeShBZ2dTdGF0ZSAqYWdnc3RhdGUpOworCisvKiBIYXNoIEFnZ3JlZ2F0aW9uIGhlbHBl cnMgKi8KK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqcHJvamVjdF9hZ2dyZWdhdGVzKEFnZ1N0YXRl ICphZ2dzdGF0ZSk7CitzdGF0aWMgQml0bWFwc2V0ICpmaW5kX3VuYWdncmVnYXRlZF9jb2xzKEFn Z1N0YXRlICphZ2dzdGF0ZSk7CitzdGF0aWMgYm9vbCBmaW5kX3VuYWdncmVnYXRlZF9jb2xzX3dh bGtlcihOb2RlICpub2RlLCBCaXRtYXBzZXQgKipjb2xub3MpOworc3RhdGljIHZvaWQgaGFzaGFn Z19zZXRfbGltaXRzKEFnZ1N0YXRlICphZ2dzdGF0ZSwgdWludDY0IGlucHV0X2dyb3VwcywKKwkJ CQkJCQkgICBpbnQgdXNlZF9iaXRzKTsKK3N0YXRpYyB2b2lkIGhhc2hhZ2dfY2hlY2tfbGltaXRz KEFnZ1N0YXRlICphZ2dzdGF0ZSk7CitzdGF0aWMgdm9pZCBoYXNoYWdnX2ZpbmlzaF9pbml0aWFs X3NwaWxscyhBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3RhdGljIHZvaWQgaGFzaGFnZ19yZXNldF9z cGlsbF9zdGF0ZShBZ2dTdGF0ZSAqYWdnc3RhdGUpOworCisvKiBTdHJ1Y3R1cmUgQVBJcyAqLwor c3RhdGljIEhhc2hBZ2dCYXRjaCAqaGFzaGFnZ19iYXRjaF9uZXcoTG9naWNhbFRhcGVTZXQgKnRh cGVzZXQsCisJCQkJCQkJCQkgICBpbnQgaW5wdXRfdGFwZW51bSwgaW50IHNldG5vLAorCQkJCQkJ CQkJICAgaW50NjQgaW5wdXRfdHVwbGVzLCBpbnQgdXNlZF9iaXRzKTsKK3N0YXRpYyBNaW5pbWFs VHVwbGUgaGFzaGFnZ19iYXRjaF9yZWFkKEhhc2hBZ2dCYXRjaCAqYmF0Y2gsIHVpbnQzMiAqaGFz aHApOworc3RhdGljIHZvaWQgaGFzaGFnZ19zcGlsbF9pbml0KEhhc2hBZ2dTcGlsbCAqc3BpbGws IEhhc2hUYXBlSW5mbyAqdGFwZWluZm8sCisJCQkJCQkJICAgaW50IHVzZWRfYml0cywgdWludDY0 IGlucHV0X3R1cGxlcywKKwkJCQkJCQkgICBkb3VibGUgaGFzaGVudHJ5c2l6ZSk7CitzdGF0aWMg U2l6ZSBoYXNoYWdnX3NwaWxsX3R1cGxlKEhhc2hBZ2dTcGlsbCAqc3BpbGwsIFR1cGxlVGFibGVT bG90ICpzbG90LAorCQkJCQkJCQl1aW50MzIgaGFzaCk7CitzdGF0aWMgdm9pZCBoYXNoYWdnX3Nw aWxsX2ZpbmlzaChBZ2dTdGF0ZSAqYWdnc3RhdGUsIEhhc2hBZ2dTcGlsbCAqc3BpbGwsCisJCQkJ CQkJCSBpbnQgc2V0bm8pOworc3RhdGljIHZvaWQgaGFzaGFnZ190YXBlaW5mb19hc3NpZ24oSGFz aFRhcGVJbmZvICp0YXBlaW5mbywgaW50ICpkZXN0LAorCQkJCQkJCQkJaW50IG5kZXN0KTsKK3N0 YXRpYyB2b2lkIGhhc2hhZ2dfdGFwZWluZm9fcmVsZWFzZShIYXNoVGFwZUluZm8gKnRhcGVpbmZv LCBpbnQgdGFwZW51bSk7CisKIHN0YXRpYyBEYXR1bSBHZXRBZ2dJbml0VmFsKERhdHVtIHRleHRJ bml0VmFsLCBPaWQgdHJhbnN0eXBlKTsKIHN0YXRpYyB2b2lkIGJ1aWxkX3BlcnRyYW5zX2Zvcl9h Z2dyZWYoQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywKIAkJCQkJCQkJCSAgQWdnU3RhdGUgKmFn Z3N0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKQEAgLTEyMzUsNyArMTM3Nyw3IEBAIGZpbmRfdW5hZ2dy ZWdhdGVkX2NvbHNfd2Fsa2VyKE5vZGUgKm5vZGUsIEJpdG1hcHNldCAqKmNvbG5vcykKIH0KIAog LyoKLSAqIChSZS0paW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZShzKSB0byBlbXB0eS4KKyAqIElu aXRpYWxpemUgdGhlIGhhc2ggdGFibGUocykuCiAgKgogICogVG8gaW1wbGVtZW50IGhhc2hlZCBh Z2dyZWdhdGlvbiwgd2UgbmVlZCBhIGhhc2h0YWJsZSB0aGF0IHN0b3JlcyBhCiAgKiByZXByZXNl bnRhdGl2ZSB0dXBsZSBhbmQgYW4gYXJyYXkgb2YgQWdnU3RhdGVQZXJHcm91cCBzdHJ1Y3RzIGZv ciBlYWNoCkBAIC0xMjQ2LDQ0ICsxMzg4LDc5IEBAIGZpbmRfdW5hZ2dyZWdhdGVkX2NvbHNfd2Fs a2VyKE5vZGUgKm5vZGUsIEJpdG1hcHNldCAqKmNvbG5vcykKICAqIFdlIGhhdmUgYSBzZXBhcmF0 ZSBoYXNodGFibGUgYW5kIGFzc29jaWF0ZWQgcGVyaGFzaCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFj aAogICogZ3JvdXBpbmcgc2V0IGZvciB3aGljaCB3ZSdyZSBkb2luZyBoYXNoaW5nLgogICoKLSAq IFRoZSBjb250ZW50cyBvZiB0aGUgaGFzaCB0YWJsZXMgYWx3YXlzIGxpdmUgaW4gdGhlIGhhc2hj b250ZXh0J3MgcGVyLXR1cGxlCi0gKiBtZW1vcnkgY29udGV4dCAodGhlcmUgaXMgb25seSBvbmUg b2YgdGhlc2UgZm9yIGFsbCB0YWJsZXMgdG9nZXRoZXIsIHNpbmNlCi0gKiB0aGV5IGFyZSBhbGwg cmVzZXQgYXQgdGhlIHNhbWUgdGltZSkuCisgKiBUaGUgaGFzaCB0YWJsZXMgYW5kIHRoZWlyIGNv bnRlbnRzIGFsd2F5cyBsaXZlIGluIHRoZSBoYXNoY29udGV4dCdzCisgKiBwZXItdHVwbGUgbWVt b3J5IGNvbnRleHQgKHRoZXJlIGlzIG9ubHkgb25lIG9mIHRoZXNlIGZvciBhbGwgdGFibGVzCisg KiB0b2dldGhlciwgc2luY2UgdGhleSBhcmUgYWxsIHJlc2V0IGF0IHRoZSBzYW1lIHRpbWUpLgog ICovCiBzdGF0aWMgdm9pZAotYnVpbGRfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiti dWlsZF9oYXNoX3RhYmxlcyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiB7Ci0JTWVtb3J5Q29udGV4dCB0 bXBtZW0gPSBhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5OwotCVNp emUJCWFkZGl0aW9uYWxzaXplOwotCWludAkJCWk7Ci0KLQlBc3NlcnQoYWdnc3RhdGUtPmFnZ3N0 cmF0ZWd5ID09IEFHR19IQVNIRUQgfHwgYWdnc3RhdGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhF RCk7Ci0KLQlhZGRpdGlvbmFsc2l6ZSA9IGFnZ3N0YXRlLT5udW10cmFucyAqIHNpemVvZihBZ2dT dGF0ZVBlckdyb3VwRGF0YSk7CisJaW50CQkJCXNldG5vOwogCi0JZm9yIChpID0gMDsgaSA8IGFn Z3N0YXRlLT5udW1faGFzaGVzOyArK2kpCisJZm9yIChzZXRubyA9IDA7IHNldG5vIDwgYWdnc3Rh dGUtPm51bV9oYXNoZXM7ICsrc2V0bm8pCiAJewotCQlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9 ICZhZ2dzdGF0ZS0+cGVyaGFzaFtpXTsKKwkJQWdnU3RhdGVQZXJIYXNoIHBlcmhhc2ggPSAmYWdn c3RhdGUtPnBlcmhhc2hbc2V0bm9dOworCQlsb25nCQkJbmJ1Y2tldHM7CisJCVNpemUJCQltZW1v cnk7CiAKIAkJQXNzZXJ0KHBlcmhhc2gtPmFnZ25vZGUtPm51bUdyb3VwcyA+IDApOwogCi0JCWlm IChwZXJoYXNoLT5oYXNodGFibGUpCi0JCQlSZXNldFR1cGxlSGFzaFRhYmxlKHBlcmhhc2gtPmhh c2h0YWJsZSk7Ci0JCWVsc2UKLQkJCXBlcmhhc2gtPmhhc2h0YWJsZSA9IEJ1aWxkVHVwbGVIYXNo VGFibGVFeHQoJmFnZ3N0YXRlLT5zcy5wcywKLQkJCQkJCQkJCQkJCQkJcGVyaGFzaC0+aGFzaHNs b3QtPnR0c190dXBsZURlc2NyaXB0b3IsCi0JCQkJCQkJCQkJCQkJCXBlcmhhc2gtPm51bUNvbHMs Ci0JCQkJCQkJCQkJCQkJCXBlcmhhc2gtPmhhc2hHcnBDb2xJZHhIYXNoLAotCQkJCQkJCQkJCQkJ CQlwZXJoYXNoLT5lcWZ1bmNvaWRzLAotCQkJCQkJCQkJCQkJCQlwZXJoYXNoLT5oYXNoZnVuY3Rp b25zLAotCQkJCQkJCQkJCQkJCQlwZXJoYXNoLT5hZ2dub2RlLT5ncnBDb2xsYXRpb25zLAotCQkJ CQkJCQkJCQkJCQlwZXJoYXNoLT5hZ2dub2RlLT5udW1Hcm91cHMsCi0JCQkJCQkJCQkJCQkJCWFk ZGl0aW9uYWxzaXplLAotCQkJCQkJCQkJCQkJCQlhZ2dzdGF0ZS0+c3MucHMuc3RhdGUtPmVzX3F1 ZXJ5X2N4dCwKLQkJCQkJCQkJCQkJCQkJYWdnc3RhdGUtPmhhc2hjb250ZXh0LT5lY3h0X3Blcl90 dXBsZV9tZW1vcnksCi0JCQkJCQkJCQkJCQkJCXRtcG1lbSwKLQkJCQkJCQkJCQkJCQkJRE9fQUdH U1BMSVRfU0tJUEZJTkFMKGFnZ3N0YXRlLT5hZ2dzcGxpdCkpOworCQltZW1vcnkgPSBhZ2dzdGF0 ZS0+aGFzaF9tZW1fbGltaXQgLyBhZ2dzdGF0ZS0+bnVtX2hhc2hlczsKKworCQkvKiBjaG9vc2Ug cmVhc29uYWJsZSBudW1iZXIgb2YgYnVja2V0cyBwZXIgaGFzaHRhYmxlICovCisJCW5idWNrZXRz ID0gaGFzaF9jaG9vc2VfbnVtX2J1Y2tldHMoCisJCQlhZ2dzdGF0ZSwgcGVyaGFzaC0+YWdnbm9k ZS0+bnVtR3JvdXBzLCBtZW1vcnkpOworCisJCWJ1aWxkX2hhc2hfdGFibGUoYWdnc3RhdGUsIHNl dG5vLCBuYnVja2V0cyk7CiAJfQorCisJYWdnc3RhdGUtPmhhc2hfYWxsb2NfY3VycmVudCA9IE1l bW9yeUNvbnRleHRNZW1BbGxvY2F0ZWQoCisJCWFnZ3N0YXRlLT5oYXNoY29udGV4dC0+ZWN4dF9w ZXJfdHVwbGVfbWVtb3J5LCB0cnVlKTsKKwlhZ2dzdGF0ZS0+aGFzaF9hbGxvY19sYXN0ID0gYWdn c3RhdGUtPmhhc2hfYWxsb2NfY3VycmVudDsKKwlhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJl bnQgPSAwOworfQorCisvKgorICogQnVpbGQgYSBzaW5nbGUgaGFzaHRhYmxlIGZvciB0aGlzIGdy b3VwaW5nIHNldC4gUGFzcyB0aGUgaGFzaCBtZW1vcnkKKyAqIGNvbnRleHQgYXMgYm90aCBtZXRh Y3h0IGFuZCB0YWJsZWN4dCwgc28gdGhhdCByZXNldHRpbmcgdGhlIGhhc2hjb250ZXh0CisgKiB3 aWxsIGZyZWUgYWxsIG1lbW9yeSBpbmNsdWRpbmcgbWV0YWRhdGEuIFRoYXQgbWVhbnMgdGhhdCB3 ZSBjYW5ub3QgcmVzZXQKKyAqIHRoZSBoYXNoIHRhYmxlIHRvIGVtcHR5IGFuZCByZXVzZSBpdCwg dGhvdWdoIChzZWUgZXhlY0dyb3VwaW5nLmMpLgorICovCitzdGF0aWMgdm9pZAorYnVpbGRfaGFz aF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUsIGludCBzZXRubywgbG9uZyBuYnVja2V0cykKK3sK KwlUdXBsZUhhc2hUYWJsZQl0YWJsZTsKKwlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9ICZhZ2dz dGF0ZS0+cGVyaGFzaFtzZXRub107CisJTWVtb3J5Q29udGV4dAloYXNobWVtID0gYWdnc3RhdGUt Pmhhc2hjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnk7CisJTWVtb3J5Q29udGV4dAl0bXBt ZW0JPSBhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5OworCVNpemUg ICAgICAgICAgICBhZGRpdGlvbmFsc2l6ZTsKKworCUFzc2VydChhZ2dzdGF0ZS0+YWdnc3RyYXRl Z3kgPT0gQUdHX0hBU0hFRCB8fAorCQkgICBhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX01J WEVEKTsKKworCS8qCisJICogVXNlZCB0byBtYWtlIHN1cmUgaW5pdGlhbCBoYXNoIHRhYmxlIGFs bG9jYXRpb24gZG9lcyBub3QgZXhjZWVkCisJICogd29ya19tZW0uIE5vdGUgdGhhdCB0aGUgZXN0 aW1hdGUgZG9lcyBub3QgaW5jbHVkZSBzcGFjZSBmb3IKKwkgKiBwYXNzLWJ5LXJlZmVyZW5jZSB0 cmFuc2l0aW9uIGRhdGEgdmFsdWVzLCBub3IgZm9yIHRoZSByZXByZXNlbnRhdGl2ZQorCSAqIHR1 cGxlIG9mIGVhY2ggZ3JvdXAuCisJICovCisJYWRkaXRpb25hbHNpemUgPSBhZ2dzdGF0ZS0+bnVt dHJhbnMgKiBzaXplb2YoQWdnU3RhdGVQZXJHcm91cERhdGEpOworCisJdGFibGUgPSBCdWlsZFR1 cGxlSGFzaFRhYmxlRXh0KCZhZ2dzdGF0ZS0+c3MucHMsCisJCQkJCQkJCSAgIHBlcmhhc2gtPmhh c2hzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLAorCQkJCQkJCQkgICBwZXJoYXNoLT5udW1Db2xz LAorCQkJCQkJCQkgICBwZXJoYXNoLT5oYXNoR3JwQ29sSWR4SGFzaCwKKwkJCQkJCQkJICAgcGVy aGFzaC0+ZXFmdW5jb2lkcywKKwkJCQkJCQkJICAgcGVyaGFzaC0+aGFzaGZ1bmN0aW9ucywKKwkJ CQkJCQkJICAgcGVyaGFzaC0+YWdnbm9kZS0+Z3JwQ29sbGF0aW9ucywKKwkJCQkJCQkJICAgbmJ1 Y2tldHMsCisJCQkJCQkJCSAgIGFkZGl0aW9uYWxzaXplLAorCQkJCQkJCQkgICBoYXNobWVtLAor CQkJCQkJCQkgICBoYXNobWVtLAorCQkJCQkJCQkgICB0bXBtZW0sCisJCQkJCQkJCSAgIERPX0FH R1NQTElUX1NLSVBGSU5BTChhZ2dzdGF0ZS0+YWdnc3BsaXQpKTsKKworCXBlcmhhc2gtPmhhc2h0 YWJsZSA9IHRhYmxlOwogfQogCiAvKgpAQCAtMTQyNSw0MiArMTYwMiwzMSBAQCBmaW5kX2hhc2hf Y29sdW1ucyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAKIC8qCiAgKiBFc3RpbWF0ZSBwZXItaGFzaC10 YWJsZS1lbnRyeSBvdmVyaGVhZCBmb3IgdGhlIHBsYW5uZXIuCi0gKgotICogTm90ZSB0aGF0IHRo ZSBlc3RpbWF0ZSBkb2VzIG5vdCBpbmNsdWRlIHNwYWNlIGZvciBwYXNzLWJ5LXJlZmVyZW5jZQot ICogdHJhbnNpdGlvbiBkYXRhIHZhbHVlcywgbm9yIGZvciB0aGUgcmVwcmVzZW50YXRpdmUgdHVw bGUgb2YgZWFjaCBncm91cC4KLSAqIE5vciBkb2VzIHRoaXMgYWNjb3VudCBvZiB0aGUgdGFyZ2V0 IGZpbGwtZmFjdG9yIGFuZCBncm93dGggcG9saWN5IG9mIHRoZQotICogaGFzaCB0YWJsZS4KICAq LwogU2l6ZQotaGFzaF9hZ2dfZW50cnlfc2l6ZShpbnQgbnVtQWdncykKK2hhc2hfYWdnX2VudHJ5 X3NpemUoaW50IG51bUFnZ3MsIFNpemUgdHVwbGVXaWR0aCwgU2l6ZSB0cmFuc2l0aW9uU3BhY2Up CiB7Ci0JU2l6ZQkJZW50cnlzaXplOwotCi0JLyogVGhpcyBtdXN0IG1hdGNoIGJ1aWxkX2hhc2hf dGFibGUgKi8KLQllbnRyeXNpemUgPSBzaXplb2YoVHVwbGVIYXNoRW50cnlEYXRhKSArCi0JCW51 bUFnZ3MgKiBzaXplb2YoQWdnU3RhdGVQZXJHcm91cERhdGEpOwotCWVudHJ5c2l6ZSA9IE1BWEFM SUdOKGVudHJ5c2l6ZSk7Ci0KLQlyZXR1cm4gZW50cnlzaXplOworCXJldHVybgorCQkvKiBrZXkg Ki8KKwkJTUFYQUxJR04oU2l6ZW9mTWluaW1hbFR1cGxlSGVhZGVyKSArCisJCU1BWEFMSUdOKHR1 cGxlV2lkdGgpICsKKwkJLyogZGF0YSAqLworCQlNQVhBTElHTihzaXplb2YoVHVwbGVIYXNoRW50 cnlEYXRhKSArCisJCQkJIG51bUFnZ3MgKiBzaXplb2YoQWdnU3RhdGVQZXJHcm91cERhdGEpKSAr CisJCXRyYW5zaXRpb25TcGFjZTsKIH0KIAogLyoKLSAqIEZpbmQgb3IgY3JlYXRlIGEgaGFzaHRh YmxlIGVudHJ5IGZvciB0aGUgdHVwbGUgZ3JvdXAgY29udGFpbmluZyB0aGUgY3VycmVudAotICog dHVwbGUgKGFscmVhZHkgc2V0IGluIHRtcGNvbnRleHQncyBvdXRlcnR1cGxlIHNsb3QpLCBpbiB0 aGUgY3VycmVudCBncm91cGluZwotICogc2V0ICh3aGljaCB0aGUgY2FsbGVyIG11c3QgaGF2ZSBz ZWxlY3RlZCAtIG5vdGUgdGhhdCBpbml0aWFsaXplX2FnZ3JlZ2F0ZQotICogZGVwZW5kcyBvbiB0 aGlzKS4KLSAqCi0gKiBXaGVuIGNhbGxlZCwgQ3VycmVudE1lbW9yeUNvbnRleHQgc2hvdWxkIGJl IHRoZSBwZXItcXVlcnkgY29udGV4dC4KKyAqIEV4dHJhY3QgdGhlIGF0dHJpYnV0ZXMgdGhhdCBt YWtlIHVwIHRoZSBncm91cGluZyBrZXkgaW50byB0aGUKKyAqIGhhc2hzbG90LiBUaGlzIGlzIG5l Y2Vzc2FyeSB0byBjb21wdXRlIHRoZSBoYXNoIG9mIHRoZSBncm91cGluZyBrZXkuCiAgKi8KLXN0 YXRpYyBUdXBsZUhhc2hFbnRyeURhdGEgKgotbG9va3VwX2hhc2hfZW50cnkoQWdnU3RhdGUgKmFn Z3N0YXRlKQorc3RhdGljIHZvaWQKK3ByZXBhcmVfaGFzaF9zbG90KEFnZ1N0YXRlICphZ2dzdGF0 ZSkKIHsKLQlUdXBsZVRhYmxlU2xvdCAqaW5wdXRzbG90ID0gYWdnc3RhdGUtPnRtcGNvbnRleHQt PmVjeHRfb3V0ZXJ0dXBsZTsKLQlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9ICZhZ2dzdGF0ZS0+ cGVyaGFzaFthZ2dzdGF0ZS0+Y3VycmVudF9zZXRdOwotCVR1cGxlVGFibGVTbG90ICpoYXNoc2xv dCA9IHBlcmhhc2gtPmhhc2hzbG90OwotCVR1cGxlSGFzaEVudHJ5RGF0YSAqZW50cnk7Ci0JYm9v bAkJaXNuZXc7Ci0JaW50CQkJaTsKKwlUdXBsZVRhYmxlU2xvdAkqaW5wdXRzbG90ID0gYWdnc3Rh dGUtPnRtcGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsKKwlBZ2dTdGF0ZVBlckhhc2gJIHBlcmhh c2ggICA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFthZ2dzdGF0ZS0+Y3VycmVudF9zZXRdOworCVR1cGxl VGFibGVTbG90CSpoYXNoc2xvdCAgPSBwZXJoYXNoLT5oYXNoc2xvdDsKKwlpbnQJCQkJIGk7CiAK IAkvKiB0cmFuc2ZlciBqdXN0IHRoZSBuZWVkZWQgY29sdW1ucyBpbnRvIGhhc2hzbG90ICovCiAJ c2xvdF9nZXRzb21lYXR0cnMoaW5wdXRzbG90LCBwZXJoYXNoLT5sYXJnZXN0R3JwQ29sSWR4KTsK QEAgLTE0NzQsMTQgKzE2NDAsMzE1IEBAIGxvb2t1cF9oYXNoX2VudHJ5KEFnZ1N0YXRlICphZ2dz dGF0ZSkKIAkJaGFzaHNsb3QtPnR0c19pc251bGxbaV0gPSBpbnB1dHNsb3QtPnR0c19pc251bGxb dmFyTnVtYmVyXTsKIAl9CiAJRXhlY1N0b3JlVmlydHVhbFR1cGxlKGhhc2hzbG90KTsKK30KKwor LyoKKyAqIFJlY29tcGlsZSB0aGUgZXhwcmVzc2lvbnMgZm9yIGFkdmFuY2luZyBhZ2dyZWdhdGVz IHdoaWxlIGhhc2hpbmcuIFRoaXMgaXMKKyAqIG5lY2Vzc2FyeSBmb3IgY2VydGFpbiBraW5kcyBv ZiBzdGF0ZSBjaGFuZ2VzIHRoYXQgYWZmZWN0IHRoZSByZXN1bHRpbmcKKyAqIGV4cHJlc3Npb24u IEZvciBpbnN0YW5jZSwgY2hhbmdpbmcgYWdnc3RhdGUtPmhhc2hfZXZlcl9zcGlsbGVkIG9yCisg KiBhZ2dzdGF0ZS0+c3MucHMub3V0ZXJvcHMgcmVxdWlyZXMgcmVjb21waWxhdGlvbi4KKyAqCisg KiBBIGNvbXBpbGVkIGV4cHJlc3Npb24gd2hlcmUgaGFzaF9ldmVyX3NwaWxsZWQgaXMgdHJ1ZSB3 aWxsIHdvcmsgZXZlbiB3aGVuCisgKiBoYXNoX3NwaWxsX21vZGUgaXMgZmFsc2UsIGJlY2F1c2Ug aXQgbWVyZWx5IGludHJvZHVjZXMgYWRkaXRpb25hbCBicmFuY2hlcworICogdGhhdCBhcmUgdW5u ZWNlc3Nhcnkgd2hlbiBoYXNoX3NwaWxsX21vZGUgaXMgZmFsc2UuIFRoYXQgYWxsb3dzIHVzIHRv IG9ubHkKKyAqIHJlY29tcGlsZSB3aGVuIGhhc2hfZXZlcl9zcGlsbGVkIGNoYW5nZXMsIHJhdGhl ciB0aGFuIGV2ZXJ5IHRpbWUKKyAqIGhhc2hfc3BpbGxfbW9kZSBjaGFuZ2VzLgorICovCitzdGF0 aWMgdm9pZAoraGFzaGFnZ19yZWNvbXBpbGVfZXhwcmVzc2lvbnMoQWdnU3RhdGUgKmFnZ3N0YXRl KQoreworCUFnZ1N0YXRlUGVyUGhhc2UgcGhhc2U7CisKKwlBc3NlcnQoYWdnc3RhdGUtPmFnZ3N0 cmF0ZWd5ID09IEFHR19IQVNIRUQgfHwKKwkJICAgYWdnc3RhdGUtPmFnZ3N0cmF0ZWd5ID09IEFH R19NSVhFRCk7CisKKwlpZiAoYWdnc3RhdGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19IQVNIRUQpCisJ CXBoYXNlID0gJmFnZ3N0YXRlLT5waGFzZXNbMF07CisJZWxzZSAvKiBBR0dfTUlYRUQgKi8KKwkJ cGhhc2UgPSAmYWdnc3RhdGUtPnBoYXNlc1sxXTsKKworCXBoYXNlLT5ldmFsdHJhbnMgPSBFeGVj QnVpbGRBZ2dUcmFucygKKwkJYWdnc3RhdGUsIHBoYXNlLAorCQlhZ2dzdGF0ZS0+YWdnc3RyYXRl Z3kgPT0gQUdHX01JWEVEID8gdHJ1ZSA6IGZhbHNlLCAvKiBkb3NvcnQgKi8KKwkJdHJ1ZSwgLyog ZG9oYXNoICovCisJCWFnZ3N0YXRlLT5oYXNoX2V2ZXJfc3BpbGxlZCk7Cit9CisKKy8qCisgKiBD YWxjdWxhdGUgdGhlIGhhc2ggdmFsdWUgZm9yIGEgdHVwbGUuIEl0J3MgdXNlZnVsIHRvIGRvIHRo aXMgb3V0c2lkZSBvZiB0aGUKKyAqIGhhc2ggdGFibGUgc28gdGhhdCB3ZSBjYW4gcmV1c2Ugc2F2 ZWQgaGFzaCB2YWx1ZXMgcmF0aGVyIHRoYW4gcmVjb21wdXRpbmcuCisgKi8KK3N0YXRpYyB1aW50 MzIKK2NhbGN1bGF0ZV9oYXNoKEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwlBZ2dTdGF0ZVBlckhh c2gJIHBlcmhhc2ggICA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFthZ2dzdGF0ZS0+Y3VycmVudF9zZXRd OworCVR1cGxlSGFzaFRhYmxlCSBoYXNodGFibGUgPSBwZXJoYXNoLT5oYXNodGFibGU7CisJTWVt b3J5Q29udGV4dAkgb2xkQ29udGV4dDsKKwl1aW50MzIJCQkgaGFzaDsKKworCS8qIHNldCB1cCBk YXRhIG5lZWRlZCBieSBoYXNoIGFuZCBtYXRjaCBmdW5jdGlvbnMgKi8KKwloYXNodGFibGUtPmlu cHV0c2xvdCA9IHBlcmhhc2gtPmhhc2hzbG90OworCWhhc2h0YWJsZS0+aW5faGFzaF9mdW5jcyA9 IGhhc2h0YWJsZS0+dGFiX2hhc2hfZnVuY3M7CisJaGFzaHRhYmxlLT5jdXJfZXFfZnVuYyA9IGhh c2h0YWJsZS0+dGFiX2VxX2Z1bmM7CisKKwkvKiBOZWVkIHRvIHJ1biB0aGUgaGFzaCBmdW5jdGlv bnMgaW4gc2hvcnQtbGl2ZWQgY29udGV4dCAqLworCW9sZENvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oaGFzaHRhYmxlLT50ZW1wY3h0KTsKKworCWhhc2ggPSBUdXBsZUhhc2hUYWJsZUhh c2goaGFzaHRhYmxlLT5oYXNodGFiLCBOVUxMKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRDb250ZXh0KTsKKworCXJldHVybiBoYXNoOworfQorCisvKgorICogU2V0IGxpbWl0cyB0aGF0 IHRyaWdnZXIgc3BpbGxpbmcgdG8gYXZvaWQgZXhjZWVkaW5nIHdvcmtfbWVtLiBDb25zaWRlciB0 aGUKKyAqIG51bWJlciBvZiBwYXJ0aXRpb25zIHdlIGV4cGVjdCB0byBjcmVhdGUgKGlmIHdlIGRv IHNwaWxsKS4KKyAqCisgKiBUaGVyZSBhcmUgdHdvIGxpbWl0czogYSBtZW1vcnkgbGltaXQsIGFu ZCBhbHNvIGFuIG5ncm91cHMgbGltaXQuIFRoZQorICogbmdyb3VwcyBsaW1pdCBiZWNvbWVzIGlt cG9ydGFudCB3aGVuIHdlIGV4cGVjdCB0cmFuc2l0aW9uIHZhbHVlcyB0byBncm93CisgKiBzdWJz dGFudGlhbGx5IGxhcmdlciB0aGFuIHRoZSBpbml0aWFsIHZhbHVlLgorICovCitzdGF0aWMgdm9p ZAoraGFzaGFnZ19zZXRfbGltaXRzKEFnZ1N0YXRlICphZ2dzdGF0ZSwgdWludDY0IGlucHV0X2dy b3VwcywgaW50IHVzZWRfYml0cykKK3sKKwlpbnQgbnBhcnRpdGlvbnM7CisJU2l6ZSBwYXJ0aXRp b25fbWVtOworCisJLyogbm8gYXR0ZW1wdCB0byBvYmV5IHdvcmtfbWVtICovCisJaWYgKGhhc2hh Z2dfbWVtX292ZXJmbG93KQorCXsKKwkJYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0ID0gU0laRV9N QVg7CisJCWFnZ3N0YXRlLT5oYXNoX25ncm91cHNfbGltaXQgPSBMT05HX01BWDsKKwkJcmV0dXJu OworCX0KKworCS8qIGlmIG5vdCBleHBlY3RlZCB0byBzcGlsbCwgdXNlIGFsbCBvZiB3b3JrX21l bSAqLworCWlmIChpbnB1dF9ncm91cHMgKiBhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6ZSA8IHdvcmtf bWVtICogMTAyNEwpCisJeworCQlhZ2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQgPSB3b3JrX21lbSAq IDEwMjRMOworCQlhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2xpbWl0ID0KKwkJCWFnZ3N0YXRlLT5o YXNoX21lbV9saW1pdCAvIGFnZ3N0YXRlLT5oYXNoZW50cnlzaXplOworCQlyZXR1cm47CisJfQor CisJLyoKKwkgKiBDYWxjdWxhdGUgZXhwZWN0ZWQgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3Igc3Bp bGxpbmcsIHdoaWNoIGlzIHRoZSBzaXplCisJICogb2YgdGhlIGJ1ZmZlcnMgbmVlZGVkIGZvciBh bGwgdGhlIHRhcGVzIHRoYXQgbmVlZCB0byBiZSBvcGVuIGF0CisJICogb25jZS4gVGhlbiwgc3Vi dHJhY3QgdGhhdCBmcm9tIHRoZSBtZW1vcnkgYXZhaWxhYmxlIGZvciBob2xkaW5nIGhhc2gKKwkg KiB0YWJsZXMuCisJICovCisJbnBhcnRpdGlvbnMgPSBoYXNoX2Nob29zZV9udW1fcGFydGl0aW9u cyhpbnB1dF9ncm91cHMsCisJCQkJCQkJCQkJCSBhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6ZSwKKwkJ CQkJCQkJCQkJIHVzZWRfYml0cywKKwkJCQkJCQkJCQkJIE5VTEwpOworCXBhcnRpdGlvbl9tZW0g PQorCQlIQVNIQUdHX1JFQURfQlVGRkVSX1NJWkUgKworCQlIQVNIQUdHX1dSSVRFX0JVRkZFUl9T SVpFICogbnBhcnRpdGlvbnM7CisKKwkvKgorCSAqIERvbid0IHNldCB0aGUgbGltaXQgYmVsb3cg My80IG9mIHdvcmtfbWVtLiBJbiB0aGF0IGNhc2UsIHdlIGFyZSBhdCB0aGUKKwkgKiBtaW5pbXVt IG51bWJlciBvZiBwYXJ0aXRpb25zLCBzbyB3ZSBhcmVuJ3QgZ29pbmcgdG8gZHJhbWF0aWNhbGx5 IGV4Y2VlZAorCSAqIHdvcmsgbWVtIGFueXdheS4KKwkgKi8KKwlpZiAod29ya19tZW0gKiAxMDI0 TCA+IDQgKiBwYXJ0aXRpb25fbWVtKQorCQlhZ2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQgPSB3b3Jr X21lbSAqIDEwMjRMIC0gcGFydGl0aW9uX21lbTsKKwllbHNlCisJCWFnZ3N0YXRlLT5oYXNoX21l bV9saW1pdCA9IHdvcmtfbWVtICogMTAyNEwgKiAwLjc1OworCisJaWYgKGFnZ3N0YXRlLT5oYXNo X21lbV9saW1pdCA+IGFnZ3N0YXRlLT5oYXNoZW50cnlzaXplKQorCQlhZ2dzdGF0ZS0+aGFzaF9u Z3JvdXBzX2xpbWl0ID0KKwkJCQlhZ2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQgLyBhZ2dzdGF0ZS0+ aGFzaGVudHJ5c2l6ZTsKKwllbHNlCisJCWFnZ3N0YXRlLT5oYXNoX25ncm91cHNfbGltaXQgPSAx OworfQorCisvKgorICogaGFzaGFnZ19jaGVja19saW1pdHMKKyAqCisgKiBBZnRlciBhZGRpbmcg YSBuZXcgZ3JvdXAgdG8gdGhlIGhhc2ggdGFibGUsIGNoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBl bnRlcgorICogc3BpbGwgbW9kZS4gQWxsb2NhdGlvbnMgbWF5IGhhcHBlbiB3aXRob3V0IGFkZGlu ZyBuZXcgZ3JvdXBzIChmb3IgaW5zdGFuY2UsCisgKiBpZiB0aGUgdHJhbnNpdGlvbiBzdGF0ZSBz aXplIGdyb3dzKSwgc28gdGhpcyBjaGVjayBpcyBpbXBlcmZlY3QuCisgKgorICogTWVtb3J5IHVz YWdlIGlzIHRyYWNrZWQgYnkgaG93IG11Y2ggaXMgYWxsb2NhdGVkIHRvIHRoZSB1bmRlcmx5aW5n IG1lbW9yeQorICogY29udGV4dCwgbm90IGluZGl2aWR1YWwgY2h1bmtzLiBUaGlzIGlzIG1vcmUg YWNjdXJhdGUgYmVjYXVzZSBpdCBhY2NvdW50cworICogZm9yIGFsbCBtZW1vcnkgaW4gdGhlIGNv bnRleHQsIGFuZCBhbHNvIGFjY291bnRzIGZvciBmcmFnbWVudGF0aW9uIGFuZAorICogb3RoZXIg Zm9ybXMgb2Ygb3ZlcmhlYWQgYW5kIHdhc3RlIHRoYXQgY2FuIGJlIGRpZmZpY3VsdCB0byBlc3Rp bWF0ZS4gSXQncworICogYWxzbyBjaGVhcGVyIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byB0cmFj ayBlYWNoIGNodW5rLgorICoKKyAqIFRvIG1lYXN1cmUgdGhlIG1lbW9yeSB1c2FnZSBieSBsb29r aW5nIGF0IHRoZSBhbGxvY2F0aW9ucyB0byB0aGUgdW5kZXJseWluZworICogY29udGV4dCwgd2Ug Y2hlY2sgaWYgdGhlIGFsbG9jYXRlZCBzaXplIGhhcyBncm93biBzaW5jZSB0aGUgbGFzdCB0aW1l IHdlCisgKiBvYnNlcnZlZCBpdC4gSWYgc28sIHdlIHJlbWVtYmVyIHRoZSBsYXN0IGFsbG9jYXRl ZCBzaXplIG9mIHRoZSBtZW1vcnkKKyAqIGNvbnRleHQsIGFuZCB1c2UgdGhhdCBhcyB0aGUgdmFs dWUgZm9yIHRoZSBjdXJyZW50IG1lbW9yeSB1c2FnZSB0bworICogZGV0ZXJtaW5lIHdoZXRoZXIg dG8gZW50ZXIgc3BpbGwgbW9kZSBvciBub3QuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX2No ZWNrX2xpbWl0cyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJU2l6ZSBhbGxvY2F0aW9uOworCisJ LyoKKwkgKiBFdmVuIGlmIGFscmVhZHkgaW4gc3BpbGwgbW9kZSwgaXQncyBwb3NzaWJsZSBmb3Ig bWVtb3J5IHVzYWdlIHRvIGdyb3csCisJICogYW5kIHdlIHNob3VsZCBzdGlsbCB0cmFjayBpdCBm b3IgdGhlIHB1cnBvc2VzIG9mIEVYUExBSU4gQU5BTFlaRS4KKwkgKi8KKwlhbGxvY2F0aW9uID0g TWVtb3J5Q29udGV4dE1lbUFsbG9jYXRlZCgKKwkJYWdnc3RhdGUtPmhhc2hjb250ZXh0LT5lY3h0 X3Blcl90dXBsZV9tZW1vcnksIHRydWUpOworCisJLyogaGFzIGFsbG9jYXRpb24gZ3Jvd24gc2lu Y2UgdGhlIGxhc3Qgb2JzZXJ2YXRpb24/ICovCisJaWYgKGFsbG9jYXRpb24gPiBhZ2dzdGF0ZS0+ aGFzaF9hbGxvY19jdXJyZW50KQorCXsKKwkJYWdnc3RhdGUtPmhhc2hfYWxsb2NfbGFzdCA9IGFn Z3N0YXRlLT5oYXNoX2FsbG9jX2N1cnJlbnQ7CisJCWFnZ3N0YXRlLT5oYXNoX2FsbG9jX2N1cnJl bnQgPSBhbGxvY2F0aW9uOworCX0KKworCWlmIChhZ2dzdGF0ZS0+aGFzaF9hbGxvY19sYXN0ID4g YWdnc3RhdGUtPmhhc2hfbWVtX3BlYWspCisJCWFnZ3N0YXRlLT5oYXNoX21lbV9wZWFrID0gYWdn c3RhdGUtPmhhc2hfYWxsb2NfbGFzdDsKKworCS8qCisJICogRG9uJ3Qgc3BpbGwgdW5sZXNzIHRo ZXJlJ3MgYXQgbGVhc3Qgb25lIGdyb3VwIGluIHRoZSBoYXNoIHRhYmxlIHNvIHdlCisJICogY2Fu IGJlIHN1cmUgdG8gbWFrZSBwcm9ncmVzcyBldmVuIGluIGVkZ2UgY2FzZXMuCisJICovCisJaWYg KGFnZ3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudCA+IDAgJiYKKwkJKGFnZ3N0YXRlLT5oYXNo X2FsbG9jX2xhc3QgICAgICA+IGFnZ3N0YXRlLT5oYXNoX21lbV9saW1pdCB8fAorCQkgYWdnc3Rh dGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50ID4gYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19saW1pdCkp CisJeworCQlhZ2dzdGF0ZS0+aGFzaF9zcGlsbF9tb2RlID0gdHJ1ZTsKKworCQlpZiAoIWFnZ3N0 YXRlLT5oYXNoX2V2ZXJfc3BpbGxlZCkKKwkJeworCQkJYWdnc3RhdGUtPmhhc2hfZXZlcl9zcGls bGVkID0gdHJ1ZTsKKwkJCWFnZ3N0YXRlLT5oYXNoX3NwaWxscyA9IHBhbGxvYzAoCisJCQkJc2l6 ZW9mKEhhc2hBZ2dTcGlsbCkgKiBhZ2dzdGF0ZS0+bnVtX2hhc2hlcyk7CisJCQlhZ2dzdGF0ZS0+ aGFzaF90YXBlaW5mbyA9IHBhbGxvYzAoc2l6ZW9mKEhhc2hUYXBlSW5mbykpOworCQkJaGFzaGFn Z19yZWNvbXBpbGVfZXhwcmVzc2lvbnMoYWdnc3RhdGUpOworCQl9CisJfQorfQorCisvKgorICog Q2hvb3NlIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgYnVja2V0cyBmb3IgdGhlIGluaXRpYWwgaGFz aCB0YWJsZSBzaXplLgorICovCitzdGF0aWMgbG9uZworaGFzaF9jaG9vc2VfbnVtX2J1Y2tldHMo QWdnU3RhdGUgKmFnZ3N0YXRlLCBsb25nIG5ncm91cHMsIFNpemUgbWVtb3J5KQoreworCWxvbmcJ bWF4X25idWNrZXRzOworCWludAkJbG9nMl9uZ3JvdXBzOworCWxvbmcJbmJ1Y2tldHM7CisKKwlt YXhfbmJ1Y2tldHMgPSBtZW1vcnkgLyBhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6ZTsKKworCS8qCisJ ICogTGVhdmUgcm9vbSBmb3Igc2xvcCB0byBhdm9pZCBhIGNhc2Ugd2hlcmUgdGhlIGluaXRpYWwg aGFzaCB0YWJsZSBzaXplCisJICogZXhjZWVkcyB0aGUgbWVtb3J5IGxpbWl0ICh0aG91Z2ggdGhh dCBtYXkgc3RpbGwgaGFwcGVuIGluIGVkZ2UgY2FzZXMpLgorCSAqLworCW1heF9uYnVja2V0cyAq PSAwLjc1OworCisJLyoKKwkgKiBMb3dlc3QgcG93ZXIgb2YgdHdvIGdyZWF0ZXIgdGhhbiBuZ3Jv dXBzLCB3aXRob3V0IGV4Y2VlZGluZworCSAqIG1heF9uYnVja2V0cy4KKwkgKi8KKwlmb3IgKGxv ZzJfbmdyb3VwcyA9IDEsIG5idWNrZXRzID0gMjsKKwkJIG5idWNrZXRzIDwgbmdyb3VwcyAmJiBu YnVja2V0cyA8IG1heF9uYnVja2V0czsKKwkJIGxvZzJfbmdyb3VwcysrLCBuYnVja2V0cyA8PD0g MSk7CisKKwlpZiAobmJ1Y2tldHMgPiBtYXhfbmJ1Y2tldHMgJiYgbmJ1Y2tldHMgPiAyKQorCQlu YnVja2V0cyA+Pj0gMTsKKworCXJldHVybiBuYnVja2V0czsKK30KKworLyoKKyAqIERldGVybWlu ZSB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgdG8gY3JlYXRlIHdoZW4gc3BpbGxpbmcsIHdoaWNo IHdpbGwKKyAqIGFsd2F5cyBiZSBhIHBvd2VyIG9mIHR3by4gSWYgbG9nMl9ucGFydGl0aW9ucyBp cyBub24tTlVMTCwgc2V0CisgKiAqbG9nMl9ucGFydGl0aW9ucyB0byB0aGUgbG9nMigpIG9mIHRo ZSBudW1iZXIgb2YgcGFydGl0aW9ucy4KKyAqLworc3RhdGljIGludAoraGFzaF9jaG9vc2VfbnVt X3BhcnRpdGlvbnModWludDY0IGlucHV0X2dyb3VwcywgZG91YmxlIGhhc2hlbnRyeXNpemUsCisJ CQkJCQkgICBpbnQgdXNlZF9iaXRzLCBpbnQgKmxvZzJfbnBhcnRpdGlvbnMpCit7CisJU2l6ZQlt ZW1fd2FudGVkOworCWludAkJcGFydGl0aW9uX2xpbWl0OworCWludAkJbnBhcnRpdGlvbnM7CisJ aW50CQlwYXJ0aXRpb25fYml0czsKKworCS8qCisJICogQXZvaWQgY3JlYXRpbmcgc28gbWFueSBw YXJ0aXRpb25zIHRoYXQgdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgb2YgdGhlCisJICogb3BlbiBw YXJ0aXRpb24gZmlsZXMgKGVzdGltYXRlZCBhdCBCTENLU1ogZm9yIGJ1ZmZlcmluZykgYXJlIGdy ZWF0ZXIKKwkgKiB0aGFuIDEvNCBvZiB3b3JrX21lbS4KKwkgKi8KKwlwYXJ0aXRpb25fbGltaXQg PQorCQkod29ya19tZW0gKiAxMDI0TCAqIDAuMjUgLSBIQVNIQUdHX1JFQURfQlVGRkVSX1NJWkUp IC8KKwkJSEFTSEFHR19XUklURV9CVUZGRVJfU0laRTsKKworCS8qIHBlc3NpbWlzdGljYWxseSBl c3RpbWF0ZSB0aGF0IGVhY2ggaW5wdXQgdHVwbGUgY3JlYXRlcyBhIG5ldyBncm91cCAqLworCW1l bV93YW50ZWQgPSBIQVNIQUdHX1BBUlRJVElPTl9GQUNUT1IgKiBpbnB1dF9ncm91cHMgKiBoYXNo ZW50cnlzaXplOworCisJLyogbWFrZSBlbm91Z2ggcGFydGl0aW9ucyBzbyB0aGF0IGVhY2ggb25l IGlzIGxpa2VseSB0byBmaXQgaW4gbWVtb3J5ICovCisJbnBhcnRpdGlvbnMgPSAxICsgKG1lbV93 YW50ZWQgLyAod29ya19tZW0gKiAxMDI0TCkpOworCisJaWYgKG5wYXJ0aXRpb25zID4gcGFydGl0 aW9uX2xpbWl0KQorCQlucGFydGl0aW9ucyA9IHBhcnRpdGlvbl9saW1pdDsKKworCWlmIChucGFy dGl0aW9ucyA8IEhBU0hBR0dfTUlOX1BBUlRJVElPTlMpCisJCW5wYXJ0aXRpb25zID0gSEFTSEFH R19NSU5fUEFSVElUSU9OUzsKKwlpZiAobnBhcnRpdGlvbnMgPiBIQVNIQUdHX01BWF9QQVJUSVRJ T05TKQorCQlucGFydGl0aW9ucyA9IEhBU0hBR0dfTUFYX1BBUlRJVElPTlM7CisKKwkvKiBjZWls KGxvZzIobnBhcnRpdGlvbnMpKSAqLworCXBhcnRpdGlvbl9iaXRzID0gbXlfbG9nMihucGFydGl0 aW9ucyk7CisKKwkvKiBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBleGhhdXN0IHRoZSBoYXNoIGJp dHMgKi8KKwlpZiAocGFydGl0aW9uX2JpdHMgKyB1c2VkX2JpdHMgPj0gMzIpCisJCXBhcnRpdGlv bl9iaXRzID0gMzIgLSB1c2VkX2JpdHM7CisKKwlpZiAobG9nMl9ucGFydGl0aW9ucyAhPSBOVUxM KQorCQkqbG9nMl9ucGFydGl0aW9ucyA9IHBhcnRpdGlvbl9iaXRzOworCisJLyogbnVtYmVyIG9m IHBhcnRpdGlvbnMgd2lsbCBiZSBhIHBvd2VyIG9mIHR3byAqLworCW5wYXJ0aXRpb25zID0gMUwg PDwgcGFydGl0aW9uX2JpdHM7CisKKwlyZXR1cm4gbnBhcnRpdGlvbnM7Cit9CisKKy8qCisgKiBG aW5kIG9yIGNyZWF0ZSBhIGhhc2h0YWJsZSBlbnRyeSBmb3IgdGhlIHR1cGxlIGdyb3VwIGNvbnRh aW5pbmcgdGhlIGN1cnJlbnQKKyAqIHR1cGxlIChhbHJlYWR5IHNldCBpbiB0bXBjb250ZXh0J3Mg b3V0ZXJ0dXBsZSBzbG90KSwgaW4gdGhlIGN1cnJlbnQgZ3JvdXBpbmcKKyAqIHNldCAod2hpY2gg dGhlIGNhbGxlciBtdXN0IGhhdmUgc2VsZWN0ZWQgLSBub3RlIHRoYXQgaW5pdGlhbGl6ZV9hZ2dy ZWdhdGUKKyAqIGRlcGVuZHMgb24gdGhpcykuCisgKgorICogV2hlbiBjYWxsZWQsIEN1cnJlbnRN ZW1vcnlDb250ZXh0IHNob3VsZCBiZSB0aGUgcGVyLXF1ZXJ5IGNvbnRleHQuCisgKgorICogSWYg dGhlIGhhc2ggdGFibGUgaXMgYXQgdGhlIG1lbW9yeSBsaW1pdCwgdGhlbiBvbmx5IGZpbmQgZXhp c3RpbmcgaGFzaHRhYmxlCisgKiBlbnRyaWVzOyBkb24ndCBjcmVhdGUgbmV3IG9uZXMuIElmIGEg dHVwbGUncyBncm91cCBpcyBub3QgYWxyZWFkeSBwcmVzZW50CisgKiBpbiB0aGUgaGFzaCB0YWJs ZSBmb3IgdGhlIGN1cnJlbnQgZ3JvdXBpbmcgc2V0LCByZXR1cm4gTlVMTCBhbmQgdGhlIGNhbGxl cgorICogd2lsbCBzcGlsbCBpdCB0byBkaXNrLgorICovCitzdGF0aWMgQWdnU3RhdGVQZXJHcm91 cAorbG9va3VwX2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0YXRlLCB1aW50MzIgaGFzaCkKK3sK KwlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFthZ2dzdGF0ZS0+ Y3VycmVudF9zZXRdOworCVR1cGxlVGFibGVTbG90ICpoYXNoc2xvdCA9IHBlcmhhc2gtPmhhc2hz bG90OworCVR1cGxlSGFzaEVudHJ5RGF0YSAqZW50cnk7CisJYm9vbAkJaXNuZXcgPSBmYWxzZTsK Kwlib29sCSAgICpwX2lzbmV3OworCisJLyogaWYgaGFzaCB0YWJsZSBhbHJlYWR5IHNwaWxsZWQs IGRvbid0IGNyZWF0ZSBuZXcgZW50cmllcyAqLworCXBfaXNuZXcgPSBhZ2dzdGF0ZS0+aGFzaF9z cGlsbF9tb2RlID8gTlVMTCA6ICZpc25ldzsKIAogCS8qIGZpbmQgb3IgY3JlYXRlIHRoZSBoYXNo dGFibGUgZW50cnkgdXNpbmcgdGhlIGZpbHRlcmVkIHR1cGxlICovCi0JZW50cnkgPSBMb29rdXBU dXBsZUhhc2hFbnRyeShwZXJoYXNoLT5oYXNodGFibGUsIGhhc2hzbG90LCAmaXNuZXcpOworCWVu dHJ5ID0gTG9va3VwVHVwbGVIYXNoRW50cnlIYXNoKHBlcmhhc2gtPmhhc2h0YWJsZSwgaGFzaHNs b3QsIHBfaXNuZXcsCisJCQkJCQkJCQkgaGFzaCk7CisKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJ cmV0dXJuIE5VTEw7CiAKIAlpZiAoaXNuZXcpCiAJewotCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdy b3VwOwotCQlpbnQJCQl0cmFuc25vOworCQlBZ2dTdGF0ZVBlckdyb3VwCXBlcmdyb3VwOworCQlp bnQJCQkJCXRyYW5zbm87CisKKwkJYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50Kys7CisJ CWhhc2hhZ2dfY2hlY2tfbGltaXRzKGFnZ3N0YXRlKTsKIAogCQlwZXJncm91cCA9IChBZ2dTdGF0 ZVBlckdyb3VwKQogCQkJTWVtb3J5Q29udGV4dEFsbG9jKHBlcmhhc2gtPmhhc2h0YWJsZS0+dGFi bGVjeHQsCkBAIC0xNTAxLDcgKzE5NjgsNyBAQCBsb29rdXBfaGFzaF9lbnRyeShBZ2dTdGF0ZSAq YWdnc3RhdGUpCiAJCX0KIAl9CiAKLQlyZXR1cm4gZW50cnk7CisJcmV0dXJuIGVudHJ5LT5hZGRp dGlvbmFsOwogfQogCiAvKgpAQCAtMTUwOSwxOCArMTk3Niw0OSBAQCBsb29rdXBfaGFzaF9lbnRy eShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAgKiByZXR1cm5pbmcgYW4gYXJyYXkgb2YgcGVyZ3JvdXAg cG9pbnRlcnMgc3VpdGFibGUgZm9yIGFkdmFuY2VfYWdncmVnYXRlcy4KICAqCiAgKiBCZSBhd2Fy ZSB0aGF0IGxvb2t1cF9oYXNoX2VudHJ5IGNhbiByZXNldCB0aGUgdG1wY29udGV4dC4KKyAqCisg KiBTb21lIGVudHJpZXMgbWF5IGJlIGxlZnQgTlVMTCBpZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGxp bWl0IGFuZCBoYXZlIGJlZ3VuCisgKiB0byBzcGlsbC4gVGhlIHNhbWUgdHVwbGUgd2lsbCBiZWxv bmcgdG8gZGlmZmVyZW50IGdyb3VwcyBmb3IgZWFjaCBzZXQsIHNvCisgKiBtYXkgbWF0Y2ggYSBn cm91cCBhbHJlYWR5IGluIG1lbW9yeSBmb3Igb25lIHNldCBhbmQgbWF0Y2ggYSBncm91cCBub3Qg aW4KKyAqIG1lbW9yeSBmb3IgYW5vdGhlciBzZXQuIElmIHdlIGhhdmUgYmVndW4gdG8gc3BpbGwg YW5kIGEgdHVwbGUgZG9lc24ndCBtYXRjaAorICogYSBncm91cCBpbiBtZW1vcnkgZm9yIGEgcGFy dGljdWxhciBzZXQsIGl0IHdpbGwgYmUgc3BpbGxlZC4KKyAqCisgKiBOQjogSXQncyBwb3NzaWJs ZSB0byBzcGlsbCB0aGUgc2FtZSB0dXBsZSBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgZ3JvdXBpbmcK KyAqIHNldHMuIFRoaXMgbWF5IHNlZW0gd2FzdGVmdWwsIGJ1dCBpdCdzIGFjdHVhbGx5IGEgdHJh ZGUtb2ZmOiBpZiB3ZSBzcGlsbAorICogdGhlIHR1cGxlIG11bHRpcGxlIHRpbWVzIGZvciBtdWx0 aXBsZSBncm91cGluZyBzZXRzLCBpdCBjYW4gYmUgcGFydGl0aW9uZWQKKyAqIGZvciBlYWNoIGdy b3VwaW5nIHNldCwgbWFraW5nIHRoZSByZWZpbGxpbmcgb2YgdGhlIGhhc2ggdGFibGUgdmVyeQor ICogZWZmaWNpZW50LgogICovCiBzdGF0aWMgdm9pZAogbG9va3VwX2hhc2hfZW50cmllcyhBZ2dT dGF0ZSAqYWdnc3RhdGUpCiB7Ci0JaW50CQkJbnVtSGFzaGVzID0gYWdnc3RhdGUtPm51bV9oYXNo ZXM7CiAJQWdnU3RhdGVQZXJHcm91cCAqcGVyZ3JvdXAgPSBhZ2dzdGF0ZS0+aGFzaF9wZXJncm91 cDsKIAlpbnQJCQlzZXRubzsKIAotCWZvciAoc2V0bm8gPSAwOyBzZXRubyA8IG51bUhhc2hlczsg c2V0bm8rKykKKwlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBhZ2dzdGF0ZS0+bnVtX2hhc2hlczsg c2V0bm8rKykKIAl7CisJCXVpbnQzMgkJCWhhc2g7CisKIAkJc2VsZWN0X2N1cnJlbnRfc2V0KGFn Z3N0YXRlLCBzZXRubywgdHJ1ZSk7Ci0JCXBlcmdyb3VwW3NldG5vXSA9IGxvb2t1cF9oYXNoX2Vu dHJ5KGFnZ3N0YXRlKS0+YWRkaXRpb25hbDsKKwkJcHJlcGFyZV9oYXNoX3Nsb3QoYWdnc3RhdGUp OworCQloYXNoID0gY2FsY3VsYXRlX2hhc2goYWdnc3RhdGUpOworCQlwZXJncm91cFtzZXRub10g PSBsb29rdXBfaGFzaF9lbnRyeShhZ2dzdGF0ZSwgaGFzaCk7CisKKwkJLyogY2hlY2sgdG8gc2Vl IGlmIHdlIG5lZWQgdG8gc3BpbGwgdGhlIHR1cGxlIGZvciB0aGlzIGdyb3VwaW5nIHNldCAqLwor CQlpZiAocGVyZ3JvdXBbc2V0bm9dID09IE5VTEwpCisJCXsKKwkJCUFnZ1N0YXRlUGVySGFzaAkg cGVyaGFzaCA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFtzZXRub107CisJCQlIYXNoQWdnU3BpbGwJKnNw aWxsCSA9ICZhZ2dzdGF0ZS0+aGFzaF9zcGlsbHNbc2V0bm9dOworCQkJVHVwbGVUYWJsZVNsb3QJ KnNsb3QJID0gYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsKKworCQkJaWYg KHNwaWxsLT5wYXJ0aXRpb25zID09IE5VTEwpCisJCQkJaGFzaGFnZ19zcGlsbF9pbml0KHNwaWxs LCBhZ2dzdGF0ZS0+aGFzaF90YXBlaW5mbywgMCwKKwkJCQkJCQkJICAgcGVyaGFzaC0+YWdnbm9k ZS0+bnVtR3JvdXBzLAorCQkJCQkJCQkgICBhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6ZSk7CisKKwkJ CWFnZ3N0YXRlLT5oYXNoX2Rpc2tfdXNlZCArPSBoYXNoYWdnX3NwaWxsX3R1cGxlKAorCQkJCXNw aWxsLCBzbG90LCBoYXNoKTsKKwkJfQogCX0KIH0KIApAQCAtMTg0Myw2ICsyMzQxLDEyIEBAIGFn Z19yZXRyaWV2ZV9kaXJlY3QoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCQkJCQlpZiAoVHVwSXNOdWxs KG91dGVyc2xvdCkpCiAJCQkJCXsKIAkJCQkJCS8qIG5vIG1vcmUgb3V0ZXItcGxhbiB0dXBsZXMg YXZhaWxhYmxlICovCisKKwkJCQkJCS8qIGlmIHdlIGJ1aWx0IGhhc2ggdGFibGVzLCBmaW5hbGl6 ZSBhbnkgc3BpbGxzICovCisJCQkJCQlpZiAoYWdnc3RhdGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19N SVhFRCAmJgorCQkJCQkJCWFnZ3N0YXRlLT5jdXJyZW50X3BoYXNlID09IDEpCisJCQkJCQkJaGFz aGFnZ19maW5pc2hfaW5pdGlhbF9zcGlsbHMoYWdnc3RhdGUpOworCiAJCQkJCQlpZiAoaGFzR3Jv dXBpbmdTZXRzKQogCQkJCQkJewogCQkJCQkJCWFnZ3N0YXRlLT5pbnB1dF9kb25lID0gdHJ1ZTsK QEAgLTE5NDUsNiArMjQ0OSw5IEBAIGFnZ19maWxsX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0 YXRlKQogCQlSZXNldEV4cHJDb250ZXh0KGFnZ3N0YXRlLT50bXBjb250ZXh0KTsKIAl9CiAKKwkv KiBmaW5hbGl6ZSBzcGlsbHMsIGlmIGFueSAqLworCWhhc2hhZ2dfZmluaXNoX2luaXRpYWxfc3Bp bGxzKGFnZ3N0YXRlKTsKKwogCWFnZ3N0YXRlLT50YWJsZV9maWxsZWQgPSB0cnVlOwogCS8qIElu aXRpYWxpemUgdG8gd2FsayB0aGUgZmlyc3QgaGFzaCB0YWJsZSAqLwogCXNlbGVjdF9jdXJyZW50 X3NldChhZ2dzdGF0ZSwgMCwgdHJ1ZSk7CkBAIC0xOTUyLDExICsyNDU5LDE5MCBAQCBhZ2dfZmls bF9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJCQkJCSAgICZhZ2dzdGF0ZS0+cGVy aGFzaFswXS5oYXNoaXRlcik7CiB9CiAKKy8qCisgKiBJZiBhbnkgZGF0YSB3YXMgc3BpbGxlZCBk dXJpbmcgaGFzaCBhZ2dyZWdhdGlvbiwgcmVzZXQgdGhlIGhhc2ggdGFibGUgYW5kCisgKiByZXBy b2Nlc3Mgb25lIGJhdGNoIG9mIHNwaWxsZWQgZGF0YS4gQWZ0ZXIgcmVwcm9jZXNzaW5nIGEgYmF0 Y2gsIHRoZSBoYXNoCisgKiB0YWJsZSB3aWxsIGFnYWluIGNvbnRhaW4gZGF0YSwgcmVhZHkgdG8g YmUgY29uc3VtZWQgYnkKKyAqIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlX2luX21lbW9yeSgpLgor ICoKKyAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhbGwgaW4gbWVtb3J5IGhhc2ggdGFi bGUgZW50cmllcyBoYXZlIGJlZW4KKyAqIGNvbnN1bWVkLgorICoKKyAqIFJldHVybiBmYWxzZSB3 aGVuIGlucHV0IGlzIGV4aGF1c3RlZCBhbmQgdGhlcmUncyBubyBtb3JlIHdvcmsgdG8gYmUgZG9u ZTsKKyAqIG90aGVyd2lzZSByZXR1cm4gdHJ1ZS4KKyAqLworc3RhdGljIGJvb2wKK2FnZ19yZWZp bGxfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJSGFzaEFnZ0JhdGNoCSpiYXRj aDsKKwlIYXNoQWdnU3BpbGwJIHNwaWxsOworCUhhc2hUYXBlSW5mbwkqdGFwZWluZm8gPSBhZ2dz dGF0ZS0+aGFzaF90YXBlaW5mbzsKKwlMb2dpY2FsVGFwZVNldAkqdGFwZXNldDsKKwlsb25nCQkJ IG5idWNrZXRzOworCisJaWYgKGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMgPT0gTklMKQorCQlyZXR1 cm4gZmFsc2U7CisKKwl0YXBlc2V0ID0gdGFwZWluZm8tPnRhcGVzZXQ7CisJc3BpbGwubnBhcnRp dGlvbnMgPSAwOworCXNwaWxsLnBhcnRpdGlvbnMgPSBOVUxMOworCS8qCisJICogRWFjaCBzcGls bCBmaWxlIGNvbnRhaW5zIHNwaWxsZWQgZGF0YSBmb3Igb25seSBhIHNpbmdsZSBncm91cGluZwor CSAqIHNldC4gV2Ugd2FudCB0byBpZ25vcmUgYWxsIG90aGVycywgd2hpY2ggaXMgZG9uZSBieSBz ZXR0aW5nIHRoZSBvdGhlcgorCSAqIHBlcmdyb3VwcyB0byBOVUxMLgorCSAqLworCW1lbXNldChh Z2dzdGF0ZS0+YWxsX3Blcmdyb3VwcywgMCwKKwkJICAgc2l6ZW9mKEFnZ1N0YXRlUGVyR3JvdXAp ICoKKwkJICAgKGFnZ3N0YXRlLT5tYXhzZXRzICsgYWdnc3RhdGUtPm51bV9oYXNoZXMpKTsKKwor CWJhdGNoID0gbGluaXRpYWwoYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyk7CisJYWdnc3RhdGUtPmhh c2hfYmF0Y2hlcyA9IGxpc3RfZGVsZXRlX2ZpcnN0KGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMpOwor CisJaGFzaGFnZ19zZXRfbGltaXRzKGFnZ3N0YXRlLCBiYXRjaC0+aW5wdXRfdHVwbGVzLCBiYXRj aC0+dXNlZF9iaXRzKTsKKworCS8qCisJICogRnJlZSBtZW1vcnkgYW5kIHJlYnVpbGQgYSBzaW5n bGUgaGFzaCB0YWJsZSBmb3IgdGhpcyBiYXRjaCdzIGdyb3VwaW5nCisJICogc2V0LiBFc3RpbWF0 ZSB0aGUgbnVtYmVyIG9mIGdyb3VwcyB0byBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IHR1cGxlcyBp bgorCSAqIHRoaXMgYmF0Y2guCisJICovCisJUmVTY2FuRXhwckNvbnRleHQoYWdnc3RhdGUtPmhh c2hjb250ZXh0KTsKKworCW5idWNrZXRzID0gaGFzaF9jaG9vc2VfbnVtX2J1Y2tldHMoCisJCWFn Z3N0YXRlLCBiYXRjaC0+aW5wdXRfdHVwbGVzLCBhZ2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQpOwor CWJ1aWxkX2hhc2hfdGFibGUoYWdnc3RhdGUsIGJhdGNoLT5zZXRubywgbmJ1Y2tldHMpOworCWFn Z3N0YXRlLT5oYXNoX2FsbG9jX2N1cnJlbnQgPSBNZW1vcnlDb250ZXh0TWVtQWxsb2NhdGVkKAor CQlhZ2dzdGF0ZS0+aGFzaGNvbnRleHQtPmVjeHRfcGVyX3R1cGxlX21lbW9yeSwgdHJ1ZSk7CisJ YWdnc3RhdGUtPmhhc2hfYWxsb2NfbGFzdCA9IGFnZ3N0YXRlLT5oYXNoX2FsbG9jX2N1cnJlbnQ7 CisJYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50ID0gMDsKKworCUFzc2VydChhZ2dzdGF0 ZS0+Y3VycmVudF9waGFzZSA9PSAwKTsKKworCWlmIChhZ2dzdGF0ZS0+cGhhc2UtPmFnZ3N0cmF0 ZWd5ID09IEFHR19NSVhFRCkKKwl7CisJCWFnZ3N0YXRlLT5jdXJyZW50X3BoYXNlID0gMTsKKwkJ YWdnc3RhdGUtPnBoYXNlID0gJmFnZ3N0YXRlLT5waGFzZXNbYWdnc3RhdGUtPmN1cnJlbnRfcGhh c2VdOworCX0KKworCS8qCisJICogVGhlIGZpcnN0IHBhc3MgKGFnZ19maWxsX2hhc2hfdGFibGUp IHJlYWRzIHdoYXRldmVyIGtpbmQgb2Ygc2xvdCBjb21lcworCSAqIGZyb20gdGhlIG91dGVyIHBs YW4sIGFuZCBjb25zaWRlcnMgdGhlIHNsb3QgZml4ZWQuIEJ1dCBzcGlsbGVkIHR1cGxlcworCSAq IGFyZSBhbHdheXMgTWluaW1hbFR1cGxlcywgc28gaWYgdGhhdCdzIGRpZmZlcmVudCBmcm9tIHRo ZSBvdXRlciBwbGFuIHdlCisJICogbmVlZCB0byBjaGFuZ2UgaXQgYW5kIHJlY29tcGlsZSB0aGUg YWdncmVnYXRlIGV4cHJlc3Npb25zLgorCSAqLworCWlmIChhZ2dzdGF0ZS0+c3MucHMub3V0ZXJv cHMgIT0gJlRUU09wc01pbmltYWxUdXBsZSkKKwl7CisJCWFnZ3N0YXRlLT5zcy5wcy5vdXRlcm9w cyA9ICZUVFNPcHNNaW5pbWFsVHVwbGU7CisJCWhhc2hhZ2dfcmVjb21waWxlX2V4cHJlc3Npb25z KGFnZ3N0YXRlKTsKKwl9CisKKwlMb2dpY2FsVGFwZVJld2luZEZvclJlYWQodGFwZXNldCwgYmF0 Y2gtPmlucHV0X3RhcGVudW0sIEhBU0hBR0dfUkVBRF9CVUZGRVJfU0laRSk7CisJZm9yICg7Oykg eworCQlUdXBsZVRhYmxlU2xvdAkqc2xvdCA9IGFnZ3N0YXRlLT5oYXNoX3NwaWxsX3Nsb3Q7CisJ CU1pbmltYWxUdXBsZQkgdHVwbGU7CisJCXVpbnQzMgkJCSBoYXNoOworCisJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7CisKKwkJdHVwbGUgPSBoYXNoYWdnX2JhdGNoX3JlYWQoYmF0Y2gsICZoYXNo KTsKKwkJaWYgKHR1cGxlID09IE5VTEwpCisJCQlicmVhazsKKworCQlFeGVjU3RvcmVNaW5pbWFs VHVwbGUodHVwbGUsIHNsb3QsIHRydWUpOworCQlhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9v dXRlcnR1cGxlID0gc2xvdDsKKworCQlzZWxlY3RfY3VycmVudF9zZXQoYWdnc3RhdGUsIGJhdGNo LT5zZXRubywgdHJ1ZSk7CisJCXByZXBhcmVfaGFzaF9zbG90KGFnZ3N0YXRlKTsKKwkJYWdnc3Rh dGUtPmhhc2hfcGVyZ3JvdXBbYmF0Y2gtPnNldG5vXSA9IGxvb2t1cF9oYXNoX2VudHJ5KGFnZ3N0 YXRlLCBoYXNoKTsKKworCQkvKiBpZiB0aGVyZSdzIG5vIG1lbW9yeSBmb3IgYSBuZXcgZ3JvdXAs IHNwaWxsICovCisJCWlmIChhZ2dzdGF0ZS0+aGFzaF9wZXJncm91cFtiYXRjaC0+c2V0bm9dID09 IE5VTEwpCisJCXsKKwkJCS8qCisJCQkgKiBFc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGdyb3VwcyBm b3IgdGhpcyBiYXRjaCBhcyB0aGUgdG90YWwKKwkJCSAqIG51bWJlciBvZiB0dXBsZXMgaW4gaXRz IGlucHV0IGZpbGUuIEFsdGhvdWdoIHRoYXQncyBhIHdvcnN0CisJCQkgKiBjYXNlLCBpdCdzIG5v dCBiYWQgaGVyZSBmb3IgdHdvIHJlYXNvbnM6ICgxKSBvdmVyZXN0aW1hdGluZworCQkJICogaXMg YmV0dGVyIHRoYW4gdW5kZXJlc3RpbWF0aW5nOyBhbmQgKDIpIHdlJ3ZlIGFscmVhZHkKKwkJCSAq IHNjYW5uZWQgdGhlIHJlbGF0aW9uIG9uY2UsIHNvIGl0J3MgbGlrZWx5IHRoYXQgd2UndmUKKwkJ CSAqIGFscmVhZHkgZmluYWxpemVkIG1hbnkgb2YgdGhlIGNvbW1vbiB2YWx1ZXMuCisJCQkgKi8K KwkJCWlmIChzcGlsbC5wYXJ0aXRpb25zID09IE5VTEwpCisJCQkJaGFzaGFnZ19zcGlsbF9pbml0 KCZzcGlsbCwgdGFwZWluZm8sIGJhdGNoLT51c2VkX2JpdHMsCisJCQkJCQkJCSAgIGJhdGNoLT5p bnB1dF90dXBsZXMsCisJCQkJCQkJCSAgIGFnZ3N0YXRlLT5oYXNoZW50cnlzaXplKTsKKworCQkJ YWdnc3RhdGUtPmhhc2hfZGlza191c2VkICs9IGhhc2hhZ2dfc3BpbGxfdHVwbGUoCisJCQkJJnNw aWxsLCBzbG90LCBoYXNoKTsKKwkJfQorCisJCS8qIEFkdmFuY2UgdGhlIGFnZ3JlZ2F0ZXMgKG9y IGNvbWJpbmUgZnVuY3Rpb25zKSAqLworCQlhZHZhbmNlX2FnZ3JlZ2F0ZXMoYWdnc3RhdGUpOwor CisJCS8qCisJCSAqIFJlc2V0IHBlci1pbnB1dC10dXBsZSBjb250ZXh0IGFmdGVyIGVhY2ggdHVw bGUsIGJ1dCBub3RlIHRoYXQgdGhlCisJCSAqIGhhc2ggbG9va3VwcyBkbyB0aGlzIHRvbworCQkg Ki8KKwkJUmVzZXRFeHByQ29udGV4dChhZ2dzdGF0ZS0+dG1wY29udGV4dCk7CisJfQorCisJaGFz aGFnZ190YXBlaW5mb19yZWxlYXNlKHRhcGVpbmZvLCBiYXRjaC0+aW5wdXRfdGFwZW51bSk7CisK KwlhZ2dzdGF0ZS0+Y3VycmVudF9waGFzZSA9IDA7CisJYWdnc3RhdGUtPnBoYXNlID0gJmFnZ3N0 YXRlLT5waGFzZXNbYWdnc3RhdGUtPmN1cnJlbnRfcGhhc2VdOworCisJLyogdXBkYXRlIGhhc2hl bnRyeXNpemUgZXN0aW1hdGUgYmFzZWQgb24gY29udGVudHMgKi8KKwlpZiAoYWdnc3RhdGUtPmhh c2hfbmdyb3Vwc19jdXJyZW50ID4gMCkKKwl7CisJCWFnZ3N0YXRlLT5oYXNoZW50cnlzaXplID0g KGRvdWJsZSlhZ2dzdGF0ZS0+aGFzaF9hbGxvY19sYXN0IC8KKwkJCShkb3VibGUpYWdnc3RhdGUt Pmhhc2hfbmdyb3Vwc19jdXJyZW50OworCX0KKworCWhhc2hhZ2dfc3BpbGxfZmluaXNoKGFnZ3N0 YXRlLCAmc3BpbGwsIGJhdGNoLT5zZXRubyk7CisJYWdnc3RhdGUtPmhhc2hfc3BpbGxfbW9kZSA9 IGZhbHNlOworCisJcGZyZWUoYmF0Y2gpOworCisJLyogSW5pdGlhbGl6ZSB0byB3YWxrIHRoZSBm aXJzdCBoYXNoIHRhYmxlICovCisJc2VsZWN0X2N1cnJlbnRfc2V0KGFnZ3N0YXRlLCAwLCB0cnVl KTsKKwlSZXNldFR1cGxlSGFzaEl0ZXJhdG9yKGFnZ3N0YXRlLT5wZXJoYXNoWzBdLmhhc2h0YWJs ZSwKKwkJCQkJCSAgICZhZ2dzdGF0ZS0+cGVyaGFzaFswXS5oYXNoaXRlcik7CisKKwlyZXR1cm4g dHJ1ZTsKK30KKwogLyoKICAqIEV4ZWNBZ2cgZm9yIGhhc2hlZCBjYXNlOiByZXRyaWV2aW5nIGdy b3VwcyBmcm9tIGhhc2ggdGFibGUKKyAqCisgKiBBZnRlciBleGhhdXN0aW5nIGluLW1lbW9yeSB0 dXBsZXMsIGFsc28gdHJ5IHJlZmlsbGluZyB0aGUgaGFzaCB0YWJsZSB1c2luZworICogcHJldmlv dXNseS1zcGlsbGVkIHR1cGxlcy4gT25seSByZXR1cm5zIE5VTEwgYWZ0ZXIgYWxsIGluLW1lbW9y eSBhbmQKKyAqIHNwaWxsZWQgdHVwbGVzIGFyZSBleGhhdXN0ZWQuCiAgKi8KIHN0YXRpYyBUdXBs ZVRhYmxlU2xvdCAqCiBhZ2dfcmV0cmlldmVfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUp Cit7CisJVHVwbGVUYWJsZVNsb3QgKnJlc3VsdCA9IE5VTEw7CisKKwl3aGlsZSAocmVzdWx0ID09 IE5VTEwpCisJeworCQlyZXN1bHQgPSBhZ2dfcmV0cmlldmVfaGFzaF90YWJsZV9pbl9tZW1vcnko YWdnc3RhdGUpOworCQlpZiAocmVzdWx0ID09IE5VTEwpCisJCXsKKwkJCWlmICghYWdnX3JlZmls bF9oYXNoX3RhYmxlKGFnZ3N0YXRlKSkKKwkJCXsKKwkJCQlhZ2dzdGF0ZS0+YWdnX2RvbmUgPSB0 cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwor LyoKKyAqIFJldHJpZXZlIHRoZSBncm91cHMgZnJvbSB0aGUgaW4tbWVtb3J5IGhhc2ggdGFibGVz IHdpdGhvdXQgY29uc2lkZXJpbmcgYW55CisgKiBzcGlsbGVkIHR1cGxlcy4KKyAqLworc3RhdGlj IFR1cGxlVGFibGVTbG90ICoKK2FnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlX2luX21lbW9yeShBZ2dT dGF0ZSAqYWdnc3RhdGUpCiB7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0OwogCUFnZ1N0YXRlUGVy QWdnIHBlcmFnZzsKQEAgLTE5ODUsNyArMjY3MSw3IEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxl KEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkgKiBXZSBsb29wIHJldHJpZXZpbmcgZ3JvdXBzIHVudGls IHdlIGZpbmQgb25lIHNhdGlzZnlpbmcKIAkgKiBhZ2dzdGF0ZS0+c3MucHMucXVhbAogCSAqLwot CXdoaWxlICghYWdnc3RhdGUtPmFnZ19kb25lKQorCWZvciAoOzspCiAJewogCQlUdXBsZVRhYmxl U2xvdCAqaGFzaHNsb3QgPSBwZXJoYXNoLT5oYXNoc2xvdDsKIAkJaW50CQkJaTsKQEAgLTIwMTYs OCArMjcwMiw2IEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSkK IAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQkvKiBObyBtb3JlIGhhc2h0YWJsZXMsIHNvIGRvbmUg Ki8KLQkJCQlhZ2dzdGF0ZS0+YWdnX2RvbmUgPSB0cnVlOwogCQkJCXJldHVybiBOVUxMOwogCQkJ fQogCQl9CkBAIC0yMDc0LDYgKzI3NTgsMjkzIEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFn Z1N0YXRlICphZ2dzdGF0ZSkKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIEFzc2lnbiB1bnVz ZWQgdGFwZXMgdG8gc3BpbGwgcGFydGl0aW9ucywgZXh0ZW5kaW5nIHRoZSB0YXBlIHNldCBpZgor ICogbmVjZXNzYXJ5LgorICovCitzdGF0aWMgdm9pZAoraGFzaGFnZ190YXBlaW5mb19hc3NpZ24o SGFzaFRhcGVJbmZvICp0YXBlaW5mbywgaW50ICpwYXJ0aXRpb25zLAorCQkJCQkJaW50IG5wYXJ0 aXRpb25zKQoreworCWludCBwYXJ0aWR4ID0gMDsKKworCS8qIHVzZSBmcmVlIHRhcGVzIGlmIGF2 YWlsYWJsZSAqLworCXdoaWxlIChwYXJ0aWR4IDwgbnBhcnRpdGlvbnMgJiYgdGFwZWluZm8tPm5m cmVldGFwZXMgPiAwKQorCQlwYXJ0aXRpb25zW3BhcnRpZHgrK10gPSB0YXBlaW5mby0+ZnJlZXRh cGVzWy0tdGFwZWluZm8tPm5mcmVldGFwZXNdOworCisJaWYgKHRhcGVpbmZvLT50YXBlc2V0ID09 IE5VTEwpCisJCXRhcGVpbmZvLT50YXBlc2V0ID0gTG9naWNhbFRhcGVTZXRDcmVhdGUobnBhcnRp dGlvbnMsIE5VTEwsIE5VTEwsIC0xKTsKKwllbHNlIGlmIChwYXJ0aWR4IDwgbnBhcnRpdGlvbnMp CisJCUxvZ2ljYWxUYXBlU2V0RXh0ZW5kKHRhcGVpbmZvLT50YXBlc2V0LCBucGFydGl0aW9ucyAt IHBhcnRpZHgpOworCisJd2hpbGUgKHBhcnRpZHggPCBucGFydGl0aW9ucykKKwkJcGFydGl0aW9u c1twYXJ0aWR4KytdID0gdGFwZWluZm8tPm50YXBlcysrOworfQorCisvKgorICogQWZ0ZXIgYSB0 YXBlIGhhcyBhbHJlYWR5IGJlZW4gd3JpdHRlbiB0byBhbmQgdGhlbiByZWFkLCB0aGlzIGZ1bmN0 aW9uCisgKiByZXdpbmRzIGl0IGZvciB3cml0aW5nIGFuZCBhZGRzIGl0IHRvIHRoZSBmcmVlIGxp c3QuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX3RhcGVpbmZvX3JlbGVhc2UoSGFzaFRhcGVJ bmZvICp0YXBlaW5mbywgaW50IHRhcGVudW0pCit7CisJTG9naWNhbFRhcGVSZXdpbmRGb3JXcml0 ZSh0YXBlaW5mby0+dGFwZXNldCwgdGFwZW51bSk7CisJaWYgKHRhcGVpbmZvLT5mcmVldGFwZXMg PT0gTlVMTCkKKwkJdGFwZWluZm8tPmZyZWV0YXBlcyA9IHBhbGxvYyhzaXplb2YoaW50KSk7CisJ ZWxzZQorCQl0YXBlaW5mby0+ZnJlZXRhcGVzID0gcmVwYWxsb2MoCisJCQl0YXBlaW5mby0+ZnJl ZXRhcGVzLCBzaXplb2YoaW50KSAqICh0YXBlaW5mby0+bmZyZWV0YXBlcyArIDEpKTsKKwl0YXBl aW5mby0+ZnJlZXRhcGVzW3RhcGVpbmZvLT5uZnJlZXRhcGVzKytdID0gdGFwZW51bTsKK30KKwor LyoKKyAqIGhhc2hhZ2dfc3BpbGxfaW5pdAorICoKKyAqIENhbGxlZCBhZnRlciB3ZSBkZXRlcm1p bmVkIHRoYXQgc3BpbGxpbmcgaXMgbmVjZXNzYXJ5LiBDaG9vc2VzIHRoZSBudW1iZXIKKyAqIG9m IHBhcnRpdGlvbnMgdG8gY3JlYXRlLCBhbmQgaW5pdGlhbGl6ZXMgdGhlbS4KKyAqLworc3RhdGlj IHZvaWQKK2hhc2hhZ2dfc3BpbGxfaW5pdChIYXNoQWdnU3BpbGwgKnNwaWxsLCBIYXNoVGFwZUlu Zm8gKnRhcGVpbmZvLCBpbnQgdXNlZF9iaXRzLAorCQkJCSAgIHVpbnQ2NCBpbnB1dF9ncm91cHMs IGRvdWJsZSBoYXNoZW50cnlzaXplKQoreworCWludAkJbnBhcnRpdGlvbnM7CisJaW50ICAgICBw YXJ0aXRpb25fYml0czsKKworCW5wYXJ0aXRpb25zID0gaGFzaF9jaG9vc2VfbnVtX3BhcnRpdGlv bnMoCisJCWlucHV0X2dyb3VwcywgaGFzaGVudHJ5c2l6ZSwgdXNlZF9iaXRzLCAmcGFydGl0aW9u X2JpdHMpOworCisJc3BpbGwtPnBhcnRpdGlvbnMgPSBwYWxsb2MwKHNpemVvZihpbnQpICogbnBh cnRpdGlvbnMpOworCXNwaWxsLT5udHVwbGVzID0gcGFsbG9jMChzaXplb2YoaW50NjQpICogbnBh cnRpdGlvbnMpOworCisJaGFzaGFnZ190YXBlaW5mb19hc3NpZ24odGFwZWluZm8sIHNwaWxsLT5w YXJ0aXRpb25zLCBucGFydGl0aW9ucyk7CisKKwlzcGlsbC0+dGFwZXNldCA9IHRhcGVpbmZvLT50 YXBlc2V0OworCXNwaWxsLT5zaGlmdCA9IDMyIC0gdXNlZF9iaXRzIC0gcGFydGl0aW9uX2JpdHM7 CisJc3BpbGwtPm1hc2sgPSAobnBhcnRpdGlvbnMgLSAxKSA8PCBzcGlsbC0+c2hpZnQ7CisJc3Bp bGwtPm5wYXJ0aXRpb25zID0gbnBhcnRpdGlvbnM7Cit9CisKKy8qCisgKiBoYXNoYWdnX3NwaWxs X3R1cGxlCisgKgorICogTm8gcm9vbSBmb3IgbmV3IGdyb3VwcyBpbiB0aGUgaGFzaCB0YWJsZS4g U2F2ZSBmb3IgbGF0ZXIgaW4gdGhlIGFwcHJvcHJpYXRlCisgKiBwYXJ0aXRpb24uCisgKi8KK3N0 YXRpYyBTaXplCitoYXNoYWdnX3NwaWxsX3R1cGxlKEhhc2hBZ2dTcGlsbCAqc3BpbGwsIFR1cGxl VGFibGVTbG90ICpzbG90LCB1aW50MzIgaGFzaCkKK3sKKwlMb2dpY2FsVGFwZVNldAkJKnRhcGVz ZXQgPSBzcGlsbC0+dGFwZXNldDsKKwlpbnQJCQkJCSBwYXJ0aXRpb247CisJTWluaW1hbFR1cGxl CQkgdHVwbGU7CisJaW50CQkJCQkgdGFwZW51bTsKKwlpbnQJCQkJCSB0b3RhbF93cml0dGVuID0g MDsKKwlib29sCQkJCSBzaG91bGRGcmVlOworCisJQXNzZXJ0KHNwaWxsLT5wYXJ0aXRpb25zICE9 IE5VTEwpOworCisJLyogbWF5IGNvbnRhaW4gdW5uZWNlc3NhcnkgYXR0cmlidXRlcywgY29uc2lk ZXIgcHJvamVjdGluZz8gKi8KKwl0dXBsZSA9IEV4ZWNGZXRjaFNsb3RNaW5pbWFsVHVwbGUoc2xv dCwgJnNob3VsZEZyZWUpOworCisJcGFydGl0aW9uID0gKGhhc2ggJiBzcGlsbC0+bWFzaykgPj4g c3BpbGwtPnNoaWZ0OworCXNwaWxsLT5udHVwbGVzW3BhcnRpdGlvbl0rKzsKKworCXRhcGVudW0g PSBzcGlsbC0+cGFydGl0aW9uc1twYXJ0aXRpb25dOworCisJTG9naWNhbFRhcGVXcml0ZSh0YXBl c2V0LCB0YXBlbnVtLCAodm9pZCAqKSAmaGFzaCwgc2l6ZW9mKHVpbnQzMikpOworCXRvdGFsX3dy aXR0ZW4gKz0gc2l6ZW9mKHVpbnQzMik7CisKKwlMb2dpY2FsVGFwZVdyaXRlKHRhcGVzZXQsIHRh cGVudW0sICh2b2lkICopIHR1cGxlLCB0dXBsZS0+dF9sZW4pOworCXRvdGFsX3dyaXR0ZW4gKz0g dHVwbGUtPnRfbGVuOworCisJaWYgKHNob3VsZEZyZWUpCisJCXBmcmVlKHR1cGxlKTsKKworCXJl dHVybiB0b3RhbF93cml0dGVuOworfQorCisvKgorICogcmVhZF9zcGlsbGVkX3R1cGxlCisgKiAJ CXJlYWQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIGJhdGNoIGZpbGUuICBSZXR1cm4gTlVMTCBpZiBu byBtb3JlLgorICovCitzdGF0aWMgTWluaW1hbFR1cGxlCitoYXNoYWdnX2JhdGNoX3JlYWQoSGFz aEFnZ0JhdGNoICpiYXRjaCwgdWludDMyICpoYXNocCkKK3sKKwlMb2dpY2FsVGFwZVNldCAqdGFw ZXNldCA9IGJhdGNoLT50YXBlc2V0OworCWludAkJCQl0YXBlbnVtID0gYmF0Y2gtPmlucHV0X3Rh cGVudW07CisJTWluaW1hbFR1cGxlCXR1cGxlOworCXVpbnQzMgkJCXRfbGVuOworCXNpemVfdAkJ CW5yZWFkOworCXVpbnQzMgkJCWhhc2g7CisKKwlucmVhZCA9IExvZ2ljYWxUYXBlUmVhZCh0YXBl c2V0LCB0YXBlbnVtLCAmaGFzaCwgc2l6ZW9mKHVpbnQzMikpOworCWlmIChucmVhZCA9PSAwKQor CQlyZXR1cm4gTlVMTDsKKwlpZiAobnJlYWQgIT0gc2l6ZW9mKHVpbnQzMikpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygidW5l eHBlY3RlZCBFT0YgZm9yIHRhcGUgJWQ6IHJlcXVlc3RlZCAlenUgYnl0ZXMsIHJlYWQgJXp1IGJ5 dGVzIiwKKwkJCQkJCXRhcGVudW0sIHNpemVvZih1aW50MzIpLCBucmVhZCkpKTsKKwlpZiAoaGFz aHAgIT0gTlVMTCkKKwkJKmhhc2hwID0gaGFzaDsKKworCW5yZWFkID0gTG9naWNhbFRhcGVSZWFk KHRhcGVzZXQsIHRhcGVudW0sICZ0X2xlbiwgc2l6ZW9mKHRfbGVuKSk7CisJaWYgKG5yZWFkICE9 IHNpemVvZih1aW50MzIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxl X2FjY2VzcygpLAorCQkJCSBlcnJtc2coInVuZXhwZWN0ZWQgRU9GIGZvciB0YXBlICVkOiByZXF1 ZXN0ZWQgJXp1IGJ5dGVzLCByZWFkICV6dSBieXRlcyIsCisJCQkJCQl0YXBlbnVtLCBzaXplb2Yo dWludDMyKSwgbnJlYWQpKSk7CisKKwl0dXBsZSA9IChNaW5pbWFsVHVwbGUpIHBhbGxvYyh0X2xl bik7CisJdHVwbGUtPnRfbGVuID0gdF9sZW47CisKKwlucmVhZCA9IExvZ2ljYWxUYXBlUmVhZCh0 YXBlc2V0LCB0YXBlbnVtLAorCQkJCQkJCSh2b2lkICopKChjaGFyICopdHVwbGUgKyBzaXplb2Yo dWludDMyKSksCisJCQkJCQkJdF9sZW4gLSBzaXplb2YodWludDMyKSk7CisJaWYgKG5yZWFkICE9 IHRfbGVuIC0gc2l6ZW9mKHVpbnQzMikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygidW5leHBlY3RlZCBFT0YgZm9yIHRhcGUg JWQ6IHJlcXVlc3RlZCAlenUgYnl0ZXMsIHJlYWQgJXp1IGJ5dGVzIiwKKwkJCQkJCXRhcGVudW0s IHRfbGVuIC0gc2l6ZW9mKHVpbnQzMiksIG5yZWFkKSkpOworCisJcmV0dXJuIHR1cGxlOworfQor CisvKgorICogbmV3X2hhc2hhZ2dfYmF0Y2gKKyAqCisgKiBDb25zdHJ1Y3QgYSBIYXNoQWdnQmF0 Y2ggaXRlbSwgd2hpY2ggcmVwcmVzZW50cyBvbmUgaXRlcmF0aW9uIG9mIEhhc2hBZ2cgdG8KKyAq IGJlIGRvbmUuIFNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIGFnZ3JlZ2F0ZSdzIG1lbW9yeSBjb250 ZXh0LgorICovCitzdGF0aWMgSGFzaEFnZ0JhdGNoICoKK2hhc2hhZ2dfYmF0Y2hfbmV3KExvZ2lj YWxUYXBlU2V0ICp0YXBlc2V0LCBpbnQgdGFwZW51bSwgaW50IHNldG5vLAorCQkJCSAgaW50NjQg aW5wdXRfdHVwbGVzLCBpbnQgdXNlZF9iaXRzKQoreworCUhhc2hBZ2dCYXRjaCAqYmF0Y2ggPSBw YWxsb2MwKHNpemVvZihIYXNoQWdnQmF0Y2gpKTsKKworCWJhdGNoLT5zZXRubyA9IHNldG5vOwor CWJhdGNoLT51c2VkX2JpdHMgPSB1c2VkX2JpdHM7CisJYmF0Y2gtPnRhcGVzZXQgPSB0YXBlc2V0 OworCWJhdGNoLT5pbnB1dF90YXBlbnVtID0gdGFwZW51bTsKKwliYXRjaC0+aW5wdXRfdHVwbGVz ID0gaW5wdXRfdHVwbGVzOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogaGFzaGFnZ19m aW5pc2hfaW5pdGlhbF9zcGlsbHMKKyAqCisgKiBBZnRlciBhIEhhc2hBZ2dCYXRjaCBoYXMgYmVl biBwcm9jZXNzZWQsIGl0IG1heSBoYXZlIHNwaWxsZWQgdHVwbGVzIHRvCisgKiBkaXNrLiBJZiBz bywgdHVybiB0aGUgc3BpbGxlZCBwYXJ0aXRpb25zIGludG8gbmV3IGJhdGNoZXMgdGhhdCBtdXN0 IGxhdGVyCisgKiBiZSBleGVjdXRlZC4KKyAqLworc3RhdGljIHZvaWQKK2hhc2hhZ2dfZmluaXNo X2luaXRpYWxfc3BpbGxzKEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwlpbnQgc2V0bm87CisKKwlp ZiAoYWdnc3RhdGUtPmhhc2hfc3BpbGxzID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIHVwZGF0 ZSBoYXNoZW50cnlzaXplIGVzdGltYXRlIGJhc2VkIG9uIGNvbnRlbnRzICovCisJQXNzZXJ0KGFn Z3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudCA+IDApOworCWFnZ3N0YXRlLT5oYXNoZW50cnlz aXplID0gKGRvdWJsZSlhZ2dzdGF0ZS0+aGFzaF9hbGxvY19sYXN0IC8KKwkJKGRvdWJsZSlhZ2dz dGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJlbnQ7CisKKwlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBh Z2dzdGF0ZS0+bnVtX2hhc2hlczsgc2V0bm8rKykKKwkJaGFzaGFnZ19zcGlsbF9maW5pc2goYWdn c3RhdGUsICZhZ2dzdGF0ZS0+aGFzaF9zcGlsbHNbc2V0bm9dLCBzZXRubyk7CisKKwlhZ2dzdGF0 ZS0+aGFzaF9zcGlsbF9tb2RlID0gZmFsc2U7CisKKwkvKgorCSAqIFdlJ3JlIG5vdCBwcm9jZXNz aW5nIHR1cGxlcyBmcm9tIG91dGVyIHBsYW4gYW55IG1vcmU7IG9ubHkgcHJvY2Vzc2luZworCSAq IGJhdGNoZXMgb2Ygc3BpbGxlZCB0dXBsZXMuIFRoZSBpbml0aWFsIHNwaWxsIHN0cnVjdHVyZXMg YXJlIG5vIGxvbmdlcgorCSAqIG5lZWRlZC4KKwkgKi8KKwlwZnJlZShhZ2dzdGF0ZS0+aGFzaF9z cGlsbHMpOworCWFnZ3N0YXRlLT5oYXNoX3NwaWxscyA9IE5VTEw7Cit9CisKKy8qCisgKiBoYXNo YWdnX3NwaWxsX2ZpbmlzaAorICoKKyAqIFRyYW5zZm9ybSBzcGlsbCBwYXJ0aXRpb25zIGludG8g bmV3IGJhdGNoZXMuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX3NwaWxsX2ZpbmlzaChBZ2dT dGF0ZSAqYWdnc3RhdGUsIEhhc2hBZ2dTcGlsbCAqc3BpbGwsIGludCBzZXRubykKK3sKKwlpbnQg aTsKKwlpbnQgdXNlZF9iaXRzID0gMzIgLSBzcGlsbC0+c2hpZnQ7CisKKwlpZiAoc3BpbGwtPm5w YXJ0aXRpb25zID09IDApCisJCXJldHVybjsJLyogZGlkbid0IHNwaWxsICovCisKKwlmb3IgKGkg PSAwOyBpIDwgc3BpbGwtPm5wYXJ0aXRpb25zOyBpKyspCisJeworCQlpbnQJCQkJIHRhcGVudW0g PSBzcGlsbC0+cGFydGl0aW9uc1tpXTsKKwkJTWVtb3J5Q29udGV4dCAgICBvbGRDb250ZXh0Owor CQlIYXNoQWdnQmF0Y2ggICAgKm5ld19iYXRjaDsKKworCQlvbGRDb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGFnZ3N0YXRlLT5zcy5wcy5zdGF0ZS0+ZXNfcXVlcnlfY3h0KTsKKwkJbmV3 X2JhdGNoID0gaGFzaGFnZ19iYXRjaF9uZXcoYWdnc3RhdGUtPmhhc2hfdGFwZWluZm8tPnRhcGVz ZXQsCisJCQkJCQkJCQkgIHRhcGVudW0sIHNldG5vLCBzcGlsbC0+bnR1cGxlc1tpXSwKKwkJCQkJ CQkJCSAgdXNlZF9iaXRzKTsKKwkJYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyA9IGxjb25zKG5ld19i YXRjaCwgYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyk7CisJCWFnZ3N0YXRlLT5oYXNoX2JhdGNoZXNf dXNlZCsrOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisJfQorCisJcGZy ZWUoc3BpbGwtPm50dXBsZXMpOworCXBmcmVlKHNwaWxsLT5wYXJ0aXRpb25zKTsKK30KKworLyoK KyAqIEZyZWUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gYSBzcGlsbGVkIEhhc2hBZ2cuCisgKi8KK3N0 YXRpYyB2b2lkCitoYXNoYWdnX3Jlc2V0X3NwaWxsX3N0YXRlKEFnZ1N0YXRlICphZ2dzdGF0ZSkK K3sKKwlMaXN0Q2VsbCAqbGM7CisKKwkvKiBmcmVlIHNwaWxscyBmcm9tIGluaXRpYWwgcGFzcyAq LworCWlmIChhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMgIT0gTlVMTCkKKwl7CisJCWludCBzZXRubzsK KworCQlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBhZ2dzdGF0ZS0+bnVtX2hhc2hlczsgc2V0bm8r KykKKwkJeworCQkJSGFzaEFnZ1NwaWxsICpzcGlsbCA9ICZhZ2dzdGF0ZS0+aGFzaF9zcGlsbHNb c2V0bm9dOworCQkJaWYgKHNwaWxsLT5udHVwbGVzICE9IE5VTEwpCisJCQkJcGZyZWUoc3BpbGwt Pm50dXBsZXMpOworCQkJaWYgKHNwaWxsLT5wYXJ0aXRpb25zICE9IE5VTEwpCisJCQkJcGZyZWUo c3BpbGwtPnBhcnRpdGlvbnMpOworCQl9CisJCXBmcmVlKGFnZ3N0YXRlLT5oYXNoX3NwaWxscyk7 CisJCWFnZ3N0YXRlLT5oYXNoX3NwaWxscyA9IE5VTEw7CisJfQorCisJLyogZnJlZSBiYXRjaGVz ICovCisJZm9yZWFjaChsYywgYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcykKKwl7CisJCUhhc2hBZ2dC YXRjaCAqYmF0Y2ggPSAoSGFzaEFnZ0JhdGNoKikgbGZpcnN0KGxjKTsKKwkJcGZyZWUoYmF0Y2gp OworCX0KKwlsaXN0X2ZyZWUoYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyk7CisJYWdnc3RhdGUtPmhh c2hfYmF0Y2hlcyA9IE5JTDsKKworCS8qIGNsb3NlIHRhcGUgc2V0ICovCisJaWYgKGFnZ3N0YXRl LT5oYXNoX3RhcGVpbmZvICE9IE5VTEwpCisJeworCQlIYXNoVGFwZUluZm8gKnRhcGVpbmZvID0g YWdnc3RhdGUtPmhhc2hfdGFwZWluZm87CisJCWlmICh0YXBlaW5mby0+dGFwZXNldCAhPSBOVUxM KQorCQkJTG9naWNhbFRhcGVTZXRDbG9zZSh0YXBlaW5mby0+dGFwZXNldCk7CisJCWlmICh0YXBl aW5mby0+ZnJlZXRhcGVzICE9IE5VTEwpCisJCQlwZnJlZSh0YXBlaW5mby0+ZnJlZXRhcGVzKTsK KwkJcGZyZWUodGFwZWluZm8pOworCQlhZ2dzdGF0ZS0+aGFzaF90YXBlaW5mbyA9IE5VTEw7CisJ fQorfQorCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tCiAgKiBFeGVjSW5pdEFnZwogICoKQEAgLTIy NTgsNiArMzIyOSwxMCBAQCBFeGVjSW5pdEFnZyhBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCQkJYWdnc3RhdGUtPnNzLnBzLm91dGVyb3BzZml4ZWQgPSBmYWxzZTsKIAl9 CiAKKwlpZiAodXNlX2hhc2hpbmcpCisJCWFnZ3N0YXRlLT5oYXNoX3NwaWxsX3Nsb3QgPSBFeGVj SW5pdEV4dHJhVHVwbGVTbG90KGVzdGF0ZSwgc2NhbkRlc2MsCisJCQkJCQkJCQkJCQkJCSAgICZU VFNPcHNNaW5pbWFsVHVwbGUpOworCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlc3VsdCB0eXBlLCBz bG90IGFuZCBwcm9qZWN0aW9uLgogCSAqLwpAQCAtMjQ4MywxMSArMzQ1OCwyMiBAQCBFeGVjSW5p dEFnZyhBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqLwogCWlmICh1 c2VfaGFzaGluZykKIAl7CisJCVBsYW4gICAqb3V0ZXJwbGFuID0gb3V0ZXJQbGFuKG5vZGUpOwor CQlsb25nCXRvdGFsR3JvdXBzID0gMDsKKwkJaW50IAlpOworCiAJCS8qIHRoaXMgaXMgYW4gYXJy YXkgb2YgcG9pbnRlcnMsIG5vdCBzdHJ1Y3R1cmVzICovCiAJCWFnZ3N0YXRlLT5oYXNoX3Blcmdy b3VwID0gcGVyZ3JvdXBzOwogCisJCWFnZ3N0YXRlLT5oYXNoZW50cnlzaXplID0gaGFzaF9hZ2df ZW50cnlfc2l6ZSgKKwkJCWFnZ3N0YXRlLT5udW10cmFucywgb3V0ZXJwbGFuLT5wbGFuX3dpZHRo LCBub2RlLT50cmFuc2l0aW9uU3BhY2UpOworCisJCWZvciAoaSA9IDA7IGkgPCBhZ2dzdGF0ZS0+ bnVtX2hhc2hlczsgaSsrKQorCQkJdG90YWxHcm91cHMgPSBhZ2dzdGF0ZS0+cGVyaGFzaFtpXS5h Z2dub2RlLT5udW1Hcm91cHM7CisKKwkJaGFzaGFnZ19zZXRfbGltaXRzKGFnZ3N0YXRlLCB0b3Rh bEdyb3VwcywgMCk7CiAJCWZpbmRfaGFzaF9jb2x1bW5zKGFnZ3N0YXRlKTsKLQkJYnVpbGRfaGFz aF90YWJsZShhZ2dzdGF0ZSk7CisJCWJ1aWxkX2hhc2hfdGFibGVzKGFnZ3N0YXRlKTsKIAkJYWdn c3RhdGUtPnRhYmxlX2ZpbGxlZCA9IGZhbHNlOwogCX0KIApAQCAtMjg5Myw3ICszODc5LDcgQEAg RXhlY0luaXRBZ2coQWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJZWxz ZQogCQkJQXNzZXJ0KGZhbHNlKTsKIAotCQlwaGFzZS0+ZXZhbHRyYW5zID0gRXhlY0J1aWxkQWdn VHJhbnMoYWdnc3RhdGUsIHBoYXNlLCBkb3NvcnQsIGRvaGFzaCk7CisJCXBoYXNlLT5ldmFsdHJh bnMgPSBFeGVjQnVpbGRBZ2dUcmFucyhhZ2dzdGF0ZSwgcGhhc2UsIGRvc29ydCwgZG9oYXNoLCBm YWxzZSk7CiAKIAl9CiAKQEAgLTMzODgsNiArNDM3NCw4IEBAIEV4ZWNFbmRBZ2coQWdnU3RhdGUg Km5vZGUpCiAJaWYgKG5vZGUtPnNvcnRfb3V0KQogCQl0dXBsZXNvcnRfZW5kKG5vZGUtPnNvcnRf b3V0KTsKIAorCWhhc2hhZ2dfcmVzZXRfc3BpbGxfc3RhdGUobm9kZSk7CisKIAlmb3IgKHRyYW5z bm8gPSAwOyB0cmFuc25vIDwgbm9kZS0+bnVtdHJhbnM7IHRyYW5zbm8rKykKIAl7CiAJCUFnZ1N0 YXRlUGVyVHJhbnMgcGVydHJhbnMgPSAmbm9kZS0+cGVydHJhbnNbdHJhbnNub107CkBAIC0zNDQz LDEyICs0NDMxLDEzIEBAIEV4ZWNSZVNjYW5BZ2coQWdnU3RhdGUgKm5vZGUpCiAJCQlyZXR1cm47 CiAKIAkJLyoKLQkJICogSWYgd2UgZG8gaGF2ZSB0aGUgaGFzaCB0YWJsZSwgYW5kIHRoZSBzdWJw bGFuIGRvZXMgbm90IGhhdmUgYW55Ci0JCSAqIHBhcmFtZXRlciBjaGFuZ2VzLCBhbmQgbm9uZSBv ZiBvdXIgb3duIHBhcmFtZXRlciBjaGFuZ2VzIGFmZmVjdAotCQkgKiBpbnB1dCBleHByZXNzaW9u cyBvZiB0aGUgYWdncmVnYXRlZCBmdW5jdGlvbnMsIHRoZW4gd2UgY2FuIGp1c3QKLQkJICogcmVz Y2FuIHRoZSBleGlzdGluZyBoYXNoIHRhYmxlOyBubyBuZWVkIHRvIGJ1aWxkIGl0IGFnYWluLgor CQkgKiBJZiB3ZSBkbyBoYXZlIHRoZSBoYXNoIHRhYmxlLCBhbmQgaXQgbmV2ZXIgc3BpbGxlZCwg YW5kIHRoZSBzdWJwbGFuCisJCSAqIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlciBjaGFuZ2Vz LCBhbmQgbm9uZSBvZiBvdXIgb3duIHBhcmFtZXRlcgorCQkgKiBjaGFuZ2VzIGFmZmVjdCBpbnB1 dCBleHByZXNzaW9ucyBvZiB0aGUgYWdncmVnYXRlZCBmdW5jdGlvbnMsIHRoZW4KKwkJICogd2Ug Y2FuIGp1c3QgcmVzY2FuIHRoZSBleGlzdGluZyBoYXNoIHRhYmxlOyBubyBuZWVkIHRvIGJ1aWxk IGl0CisJCSAqIGFnYWluLgogCQkgKi8KLQkJaWYgKG91dGVyUGxhbi0+Y2hnUGFyYW0gPT0gTlVM TCAmJgorCQlpZiAob3V0ZXJQbGFuLT5jaGdQYXJhbSA9PSBOVUxMICYmICFub2RlLT5oYXNoX2V2 ZXJfc3BpbGxlZCAmJgogCQkJIWJtc19vdmVybGFwKG5vZGUtPnNzLnBzLmNoZ1BhcmFtLCBhZ2du b2RlLT5hZ2dQYXJhbXMpKQogCQl7CiAJCQlSZXNldFR1cGxlSGFzaEl0ZXJhdG9yKG5vZGUtPnBl cmhhc2hbMF0uaGFzaHRhYmxlLApAQCAtMzUwNSwxMSArNDQ5NCwyOSBAQCBFeGVjUmVTY2FuQWdn KEFnZ1N0YXRlICpub2RlKQogCSAqLwogCWlmIChub2RlLT5hZ2dzdHJhdGVneSA9PSBBR0dfSEFT SEVEIHx8IG5vZGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCkKIAl7CisJCWhhc2hhZ2dfcmVz ZXRfc3BpbGxfc3RhdGUobm9kZSk7CisKKwkJbm9kZS0+aGFzaF9ldmVyX3NwaWxsZWQgPSBmYWxz ZTsKKwkJbm9kZS0+aGFzaF9zcGlsbF9tb2RlID0gZmFsc2U7CisJCW5vZGUtPmhhc2hfYWxsb2Nf bGFzdCA9IDA7CisJCW5vZGUtPmhhc2hfYWxsb2NfY3VycmVudCA9IDA7CisJCW5vZGUtPmhhc2hf bmdyb3Vwc19jdXJyZW50ID0gMDsKKworCQkvKiByZXNldCBzdGF0cyAqLworCQlub2RlLT5oYXNo X21lbV9wZWFrID0gMDsKKwkJbm9kZS0+aGFzaF9kaXNrX3VzZWQgPSAwOworCQlub2RlLT5oYXNo X2JhdGNoZXNfdXNlZCA9IDA7CisKIAkJUmVTY2FuRXhwckNvbnRleHQobm9kZS0+aGFzaGNvbnRl eHQpOwogCQkvKiBSZWJ1aWxkIGFuIGVtcHR5IGhhc2ggdGFibGUgKi8KLQkJYnVpbGRfaGFzaF90 YWJsZShub2RlKTsKKwkJYnVpbGRfaGFzaF90YWJsZXMobm9kZSk7CiAJCW5vZGUtPnRhYmxlX2Zp bGxlZCA9IGZhbHNlOwogCQkvKiBpdGVyYXRvciB3aWxsIGJlIHJlc2V0IHdoZW4gdGhlIHRhYmxl IGlzIGZpbGxlZCAqLworCisJCW5vZGUtPnNzLnBzLm91dGVyb3BzID0KKwkJCUV4ZWNHZXRSZXN1 bHRTbG90T3BzKG91dGVyUGxhblN0YXRlKCZub2RlLT5zcyksCisJCQkJCQkJCSAmbm9kZS0+c3Mu cHMub3V0ZXJvcHNmaXhlZCk7CisJCWhhc2hhZ2dfcmVjb21waWxlX2V4cHJlc3Npb25zKG5vZGUp OwogCX0KIAogCWlmIChub2RlLT5hZ2dzdHJhdGVneSAhPSBBR0dfSEFTSEVEKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgYi9zcmMvYmFja2VuZC9qaXQv bGx2bS9sbHZtaml0X2V4cHIuYwppbmRleCAyMWE1Y2E0YjQwNC4uNmZhNTU1YWRhODggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCisrKyBiL3NyYy9iYWNr ZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCkBAIC0yMDgyLDYgKzIwODIsNyBAQCBsbHZtX2Nv bXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCX0KIAogCQkJY2FzZSBFRU9QX0FHR19J TklUX1RSQU5TOgorCQkJY2FzZSBFRU9QX0FHR19JTklUX1RSQU5TX1NQSUxMRUQ6CiAJCQkJewog CQkJCQlBZ2dTdGF0ZSAgICphZ2dzdGF0ZTsKIAkJCQkJQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFu czsKQEAgLTIwOTIsNiArMjA5Myw3IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3Rh dGUpCiAJCQkJCUxMVk1WYWx1ZVJlZiB2X2FsbHBlcmdyb3Vwc3A7CiAKIAkJCQkJTExWTVZhbHVl UmVmIHZfcGVyZ3JvdXBwOworCQkJCQlMTFZNVmFsdWVSZWYgdl9wZXJncm91cF9hbGxhZ2dzOwog CiAJCQkJCUxMVk1WYWx1ZVJlZiB2X3NldG9mZiwKIAkJCQkJCQkJdl90cmFuc25vOwpAQCAtMjEx OSwxMSArMjEyMSwzMiBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJ CQkJCQkJCSAgImFnZ3N0YXRlLmFsbF9wZXJncm91cHMiKTsKIAkJCQkJdl9zZXRvZmYgPSBsX2lu dDMyX2NvbnN0KG9wLT5kLmFnZ19pbml0X3RyYW5zLnNldG9mZik7CiAJCQkJCXZfdHJhbnNubyA9 IGxfaW50MzJfY29uc3Qob3AtPmQuYWdnX2luaXRfdHJhbnMudHJhbnNubyk7Ci0JCQkJCXZfcGVy Z3JvdXBwID0KLQkJCQkJCUxMVk1CdWlsZEdFUChiLAotCQkJCQkJCQkJIGxfbG9hZF9nZXAxKGIs IHZfYWxscGVyZ3JvdXBzcCwgdl9zZXRvZmYsICIiKSwKLQkJCQkJCQkJCSAmdl90cmFuc25vLCAx LCAiIik7CisJCQkJCXZfcGVyZ3JvdXBfYWxsYWdncyA9IGxfbG9hZF9nZXAxKGIsIHZfYWxscGVy Z3JvdXBzcCwgdl9zZXRvZmYsICIiKTsKIAorCQkJCQkvKgorCQkJCQkgKiBXaGVuIG5vIHR1cGxl cyBhdCBhbGwgaGF2ZSBzcGlsbGVkLCB3ZSBhdm9pZCBhZGRpbmcgdGhpcworCQkJCQkgKiBleHRy YSBicmFuY2guIEJ1dCBhZnRlciBzb21lIHR1cGxlcyBoYXZlIHNwaWxsZWQsIHRoaXMKKwkJCQkJ ICogYnJhbmNoIGlzIG5lY2Vzc2FyeSwgc28gd2UgcmVjb21waWxlIHRoZSBleHByZXNzaW9uCisJ CQkJCSAqIHVzaW5nIGEgbmV3IG9wY29kZS4KKwkJCQkJICovCisJCQkJCWlmIChvcGNvZGUgPT0g RUVPUF9BR0dfSU5JVF9UUkFOU19TUElMTEVEKQorCQkJCQl7CisJCQkJCQlMTFZNQmFzaWNCbG9j a1JlZiBiX2NoZWNrX25vdHJhbnN2YWx1ZSA9IGxfYmJfYmVmb3JlX3YoCisJCQkJCQkJb3BibG9j a3NbaSArIDFdLCAib3AuJWQuY2hlY2tfbm90cmFuc3ZhbHVlIiwgaSk7CisKKwkJCQkJCUxMVk1C dWlsZENvbmRCcigKKwkJCQkJCQliLAorCQkJCQkJCUxMVk1CdWlsZElDbXAoYiwgTExWTUludEVR LAorCQkJCQkJCQkJCSAgTExWTUJ1aWxkUHRyVG9JbnQoCisJCQkJCQkJCQkJCSAgYiwgdl9wZXJn cm91cF9hbGxhZ2dzLCBUeXBlU2l6ZVQsICIiKSwKKwkJCQkJCQkJCQkgIGxfc2l6ZXRfY29uc3Qo MCksICIiKSwKKwkJCQkJCQlvcGJsb2Nrc1tpICsgMV0sCisJCQkJCQkJYl9jaGVja19ub3RyYW5z dmFsdWUpOworCisJCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9jaGVja19ub3Ry YW5zdmFsdWUpOworCQkJCQl9CisKKwkJCQkJdl9wZXJncm91cHAgPSBMTFZNQnVpbGRHRVAoYiwg dl9wZXJncm91cF9hbGxhZ2dzLCAmdl90cmFuc25vLCAxLCAiIik7CiAJCQkJCXZfbm90cmFuc3Zh bHVlID0KIAkJCQkJCWxfbG9hZF9zdHJ1Y3RfZ2VwKGIsIHZfcGVyZ3JvdXBwLAogCQkJCQkJCQkJ CSAgRklFTEROT19BR0dTVEFURVBFUkdST1VQREFUQV9OT1RSQU5TVkFMVUUsCkBAIC0yMTgwLDYg KzIyMDMsNyBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCX0KIAog CQkJY2FzZSBFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0s6CisJCQljYXNlIEVFT1BfQUdHX1NU UklDVF9UUkFOU19DSEVDS19TUElMTEVEOgogCQkJCXsKIAkJCQkJQWdnU3RhdGUgICAqYWdnc3Rh dGU7CiAJCQkJCUxMVk1WYWx1ZVJlZiB2X3NldG9mZiwKQEAgLTIxOTAsNiArMjIxNCw3IEBAIGxs dm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAKIAkJCQkJTExWTVZhbHVlUmVmIHZf dHJhbnNudWxsOwogCQkJCQlMTFZNVmFsdWVSZWYgdl9wZXJncm91cHA7CisJCQkJCUxMVk1WYWx1 ZVJlZiB2X3Blcmdyb3VwX2FsbGFnZ3M7CiAKIAkJCQkJaW50CQkJanVtcG51bGwgPSBvcC0+ZC5h Z2dfc3RyaWN0X3RyYW5zX2NoZWNrLmp1bXBudWxsOwogCkBAIC0yMjA5LDExICsyMjM0LDMyIEBA IGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJCQlsX2ludDMyX2NvbnN0 KG9wLT5kLmFnZ19zdHJpY3RfdHJhbnNfY2hlY2suc2V0b2ZmKTsKIAkJCQkJdl90cmFuc25vID0K IAkJCQkJCWxfaW50MzJfY29uc3Qob3AtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay50cmFuc25v KTsKLQkJCQkJdl9wZXJncm91cHAgPQotCQkJCQkJTExWTUJ1aWxkR0VQKGIsCi0JCQkJCQkJCQkg bF9sb2FkX2dlcDEoYiwgdl9hbGxwZXJncm91cHNwLCB2X3NldG9mZiwgIiIpLAotCQkJCQkJCQkJ ICZ2X3RyYW5zbm8sIDEsICIiKTsKKwkJCQkJdl9wZXJncm91cF9hbGxhZ2dzID0gbF9sb2FkX2dl cDEoYiwgdl9hbGxwZXJncm91cHNwLCB2X3NldG9mZiwgIiIpOworCisJCQkJCS8qCisJCQkJCSAq IFdoZW4gbm8gdHVwbGVzIGF0IGFsbCBoYXZlIHNwaWxsZWQsIHdlIGF2b2lkIGFkZGluZyB0aGlz CisJCQkJCSAqIGV4dHJhIGJyYW5jaC4gQnV0IGFmdGVyIHNvbWUgdHVwbGVzIGhhdmUgc3BpbGxl ZCwgdGhpcworCQkJCQkgKiBicmFuY2ggaXMgbmVjZXNzYXJ5LCBzbyB3ZSByZWNvbXBpbGUgdGhl IGV4cHJlc3Npb24KKwkJCQkJICogdXNpbmcgYSBuZXcgb3Bjb2RlLgorCQkJCQkgKi8KKwkJCQkJ aWYgKG9wY29kZSA9PSBFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0tfU1BJTExFRCkKKwkJCQkJ eworCQkJCQkJTExWTUJhc2ljQmxvY2tSZWYgYl9jaGVja190cmFuc251bGwgPSBsX2JiX2JlZm9y ZV92KAorCQkJCQkJCW9wYmxvY2tzW2kgKyAxXSwgIm9wLiVkLmNoZWNrX3RyYW5zbnVsbCIsIGkp OworCisJCQkJCQlMTFZNQnVpbGRDb25kQnIoCisJCQkJCQkJYiwKKwkJCQkJCQlMTFZNQnVpbGRJ Q21wKGIsIExMVk1JbnRFUSwKKwkJCQkJCQkJCQkgIExMVk1CdWlsZFB0clRvSW50KGIsIHZfcGVy Z3JvdXBfYWxsYWdncywKKwkJCQkJCQkJCQkJCQkJCVR5cGVTaXplVCwgIiIpLAorCQkJCQkJCQkJ CSAgbF9zaXpldF9jb25zdCgwKSwgIiIpLAorCQkJCQkJCW9wYmxvY2tzW2p1bXBudWxsXSwKKwkJ CQkJCQliX2NoZWNrX3RyYW5zbnVsbCk7CisKKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVu ZChiLCBiX2NoZWNrX3RyYW5zbnVsbCk7CisJCQkJCX0KIAorCQkJCQl2X3Blcmdyb3VwcCA9IExM Vk1CdWlsZEdFUChiLCB2X3Blcmdyb3VwX2FsbGFnZ3MsICZ2X3RyYW5zbm8sIDEsICIiKTsKIAkJ CQkJdl90cmFuc251bGwgPQogCQkJCQkJbF9sb2FkX3N0cnVjdF9nZXAoYiwgdl9wZXJncm91cHAs CiAJCQkJCQkJCQkJICBGSUVMRE5PX0FHR1NUQVRFUEVSR1JPVVBEQVRBX1RSQU5TVkFMVUVJU05V TEwsCkBAIC0yMjI5LDcgKzIyNzUsOSBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0 YXRlKQogCQkJCX0KIAogCQkJY2FzZSBFRU9QX0FHR19QTEFJTl9UUkFOU19CWVZBTDoKKwkJCWNh c2UgRUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExFRDoKIAkJCWNhc2UgRUVPUF9BR0df UExBSU5fVFJBTlM6CisJCQljYXNlIEVFT1BfQUdHX1BMQUlOX1RSQU5TX1NQSUxMRUQ6CiAJCQkJ ewogCQkJCQlBZ2dTdGF0ZSAgICphZ2dzdGF0ZTsKIAkJCQkJQWdnU3RhdGVQZXJUcmFucyBwZXJ0 cmFuczsKQEAgLTIyNTUsNiArMjMwMyw3IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAq c3RhdGUpCiAJCQkJCUxMVk1WYWx1ZVJlZiB2X3BlcnRyYW5zcDsKIAogCQkJCQlMTFZNVmFsdWVS ZWYgdl9wZXJncm91cHA7CisJCQkJCUxMVk1WYWx1ZVJlZiB2X3Blcmdyb3VwX2FsbGFnZ3M7CiAK IAkJCQkJTExWTVZhbHVlUmVmIHZfcmV0dmFsOwogCkBAIC0yMjgyLDEwICsyMzMxLDMzIEBAIGxs dm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJCQkJCQkJICAiYWdnc3RhdGUu YWxsX3Blcmdyb3VwcyIpOwogCQkJCQl2X3NldG9mZiA9IGxfaW50MzJfY29uc3Qob3AtPmQuYWdn X3RyYW5zLnNldG9mZik7CiAJCQkJCXZfdHJhbnNubyA9IGxfaW50MzJfY29uc3Qob3AtPmQuYWdn X3RyYW5zLnRyYW5zbm8pOwotCQkJCQl2X3Blcmdyb3VwcCA9Ci0JCQkJCQlMTFZNQnVpbGRHRVAo YiwKLQkJCQkJCQkJCSBsX2xvYWRfZ2VwMShiLCB2X2FsbHBlcmdyb3Vwc3AsIHZfc2V0b2ZmLCAi IiksCi0JCQkJCQkJCQkgJnZfdHJhbnNubywgMSwgIiIpOworCQkJCQl2X3Blcmdyb3VwX2FsbGFn Z3MgPSBsX2xvYWRfZ2VwMShiLCB2X2FsbHBlcmdyb3Vwc3AsIHZfc2V0b2ZmLCAiIik7CisKKwkJ CQkJLyoKKwkJCQkJICogV2hlbiBubyB0dXBsZXMgYXQgYWxsIGhhdmUgc3BpbGxlZCwgd2UgYXZv aWQgYWRkaW5nIHRoaXMKKwkJCQkJICogZXh0cmEgYnJhbmNoLiBCdXQgYWZ0ZXIgc29tZSB0dXBs ZXMgaGF2ZSBzcGlsbGVkLCB0aGlzCisJCQkJCSAqIGJyYW5jaCBpcyBuZWNlc3NhcnksIHNvIHdl IHJlY29tcGlsZSB0aGUgZXhwcmVzc2lvbgorCQkJCQkgKiB1c2luZyBhIG5ldyBvcGNvZGUuCisJ CQkJCSAqLworCQkJCQlpZiAob3Bjb2RlID09IEVFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMX1NQ SUxMRUQgfHwKKwkJCQkJCW9wY29kZSA9PSBFRU9QX0FHR19QTEFJTl9UUkFOU19TUElMTEVEKQor CQkJCQl7CisJCQkJCQlMTFZNQmFzaWNCbG9ja1JlZiBiX2FkdmFuY2VfdHJhbnN2YWwgPSBsX2Ji X2JlZm9yZV92KAorCQkJCQkJCW9wYmxvY2tzW2kgKyAxXSwgIm9wLiVkLmFkdmFuY2VfdHJhbnN2 YWwiLCBpKTsKKworCQkJCQkJTExWTUJ1aWxkQ29uZEJyKAorCQkJCQkJCWIsCisJCQkJCQkJTExW TUJ1aWxkSUNtcChiLCBMTFZNSW50RVEsCisJCQkJCQkJCQkJICBMTFZNQnVpbGRQdHJUb0ludChi LCB2X3Blcmdyb3VwX2FsbGFnZ3MsCisJCQkJCQkJCQkJCQkJCQlUeXBlU2l6ZVQsICIiKSwKKwkJ CQkJCQkJCQkgIGxfc2l6ZXRfY29uc3QoMCksICIiKSwKKwkJCQkJCQlvcGJsb2Nrc1tpICsgMV0s CisJCQkJCQkJYl9hZHZhbmNlX3RyYW5zdmFsKTsKKworCQkJCQkJTExWTVBvc2l0aW9uQnVpbGRl ckF0RW5kKGIsIGJfYWR2YW5jZV90cmFuc3ZhbCk7CisJCQkJCX0KKworCQkJCQl2X3Blcmdyb3Vw cCA9IExMVk1CdWlsZEdFUChiLCB2X3Blcmdyb3VwX2FsbGFnZ3MsICZ2X3RyYW5zbm8sIDEsICIi KTsKIAogCQkJCQl2X2ZjaW5mbyA9IGxfcHRyX2NvbnN0KGZjaW5mbywKIAkJCQkJCQkJCQkgICBs X3B0cihTdHJ1Y3RGdW5jdGlvbkNhbGxJbmZvRGF0YSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2Nvc3RzaXplLmMKaW5kZXggYjVhMDAzMzcyMWYuLjk1NzU0Njk4MDBiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTc3LDYgKzc3LDcgQEAKICNpbmNsdWRlICJhY2Nl c3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RzbWFwaS5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFnZy5oIgogI2lu Y2x1ZGUgImV4ZWN1dG9yL25vZGVIYXNoLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCkBAIC0xMjgsNiArMTI5LDcgQEAgYm9vbAkJZW5hYmxl X2JpdG1hcHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3RpZHNjYW4gPSB0cnVlOwogYm9vbAkJ ZW5hYmxlX3NvcnQgPSB0cnVlOwogYm9vbAkJZW5hYmxlX2hhc2hhZ2cgPSB0cnVlOworYm9vbAkJ ZW5hYmxlX2hhc2hhZ2dfc3BpbGwgPSB0cnVlOwogYm9vbAkJZW5hYmxlX25lc3Rsb29wID0gdHJ1 ZTsKIGJvb2wJCWVuYWJsZV9tYXRlcmlhbCA9IHRydWU7CiBib29sCQllbmFibGVfbWVyZ2Vqb2lu ID0gdHJ1ZTsKQEAgLTIxNTMsNyArMjE1NSw3IEBAIGNvc3RfYWdnKFBhdGggKnBhdGgsIFBsYW5u ZXJJbmZvICpyb290LAogCQkgaW50IG51bUdyb3VwQ29scywgZG91YmxlIG51bUdyb3VwcywKIAkJ IExpc3QgKnF1YWxzLAogCQkgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5wdXRfdG90 YWxfY29zdCwKLQkJIGRvdWJsZSBpbnB1dF90dXBsZXMpCisJCSBkb3VibGUgaW5wdXRfdHVwbGVz LCBkb3VibGUgaW5wdXRfd2lkdGgpCiB7CiAJZG91YmxlCQlvdXRwdXRfdHVwbGVzOwogCUNvc3QJ CXN0YXJ0dXBfY29zdDsKQEAgLTIyMTksMjAgKzIyMjEsNjkgQEAgY29zdF9hZ2coUGF0aCAqcGF0 aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCXRvdGFsX2Nvc3QgKz0gYWdnY29zdHMtPmZpbmFsQ29z dC5wZXJfdHVwbGUgKiBudW1Hcm91cHM7CiAJCXRvdGFsX2Nvc3QgKz0gY3B1X3R1cGxlX2Nvc3Qg KiBudW1Hcm91cHM7CiAJCW91dHB1dF90dXBsZXMgPSBudW1Hcm91cHM7CisKKwkJLyoKKwkJICog V2UgZG9uJ3QgbmVlZCB0byBjb21wdXRlIHRoZSBkaXNrIGNvc3RzIG9mIGhhc2ggYWdncmVnYXRp b24gaGVyZSwKKwkJICogYmVjYXVzZSB0aGUgcGxhbm5lciBkb2VzIG5vdCBjaG9vc2UgaGFzaCBh Z2dyZWdhdGlvbiBmb3IgZ3JvdXBpbmcKKwkJICogc2V0cyB0aGF0IGl0IGRvZXNuJ3QgZXhwZWN0 IHRvIGZpdCBpbiBtZW1vcnkuCisJCSAqLwogCX0KIAllbHNlCiAJeworCQlkb3VibGUgaGFzaGVu dHJ5c2l6ZSA9IGhhc2hfYWdnX2VudHJ5X3NpemUoCisJCQkJYWdnY29zdHMtPm51bUFnZ3MsIGlu cHV0X3dpZHRoLCBhZ2djb3N0cy0+dHJhbnNpdGlvblNwYWNlKTsKKwkJZG91YmxlCW5iYXRjaGVz CSA9CisJCQkobnVtR3JvdXBzICogaGFzaGVudHJ5c2l6ZSkgLyAod29ya19tZW0gKiAxMDI0TCk7 CisJCWRvdWJsZQlwYWdlc193cml0dGVuID0gMC4wOworCQlkb3VibGUJcGFnZXNfcmVhZCA9IDAu MDsKKwogCQkvKiBtdXN0IGJlIEFHR19IQVNIRUQgKi8KIAkJc3RhcnR1cF9jb3N0ID0gaW5wdXRf dG90YWxfY29zdDsKIAkJaWYgKCFlbmFibGVfaGFzaGFnZykKIAkJCXN0YXJ0dXBfY29zdCArPSBk aXNhYmxlX2Nvc3Q7CiAJCXN0YXJ0dXBfY29zdCArPSBhZ2djb3N0cy0+dHJhbnNDb3N0LnN0YXJ0 dXA7CiAJCXN0YXJ0dXBfY29zdCArPSBhZ2djb3N0cy0+dHJhbnNDb3N0LnBlcl90dXBsZSAqIGlu cHV0X3R1cGxlczsKKwkJLyogY29zdCBvZiBjb21wdXRpbmcgaGFzaCB2YWx1ZSAqLwogCQlzdGFy dHVwX2Nvc3QgKz0gKGNwdV9vcGVyYXRvcl9jb3N0ICogbnVtR3JvdXBDb2xzKSAqIGlucHV0X3R1 cGxlczsKIAkJc3RhcnR1cF9jb3N0ICs9IGFnZ2Nvc3RzLT5maW5hbENvc3Quc3RhcnR1cDsKKwor CQkvKgorCQkgKiBBZGQgdGhlIGRpc2sgY29zdHMgb2YgaGFzaCBhZ2dyZWdhdGlvbiB0aGF0IHNw aWxscyB0byBkaXNrLgorCQkgKgorCQkgKiBHcm91cHMgdGhhdCBnbyBpbnRvIHRoZSBoYXNoIHRh YmxlIHN0YXkgaW4gbWVtb3J5IHVudGlsIGZpbmFsaXplZCwKKwkJICogc28gc3BpbGxpbmcgYW5k IHJlcHJvY2Vzc2luZyB0dXBsZXMgZG9lc24ndCBpbmN1ciBhZGRpdGlvbmFsCisJCSAqIGludm9j YXRpb25zIG9mIHRyYW5zQ29zdCBvciBmaW5hbENvc3QuIEZ1cnRoZXJtb3JlLCB0aGUgY29tcHV0 ZWQKKwkJICogaGFzaCB2YWx1ZSBpcyBzdG9yZWQgd2l0aCB0aGUgc3BpbGxlZCB0dXBsZXMsIHNv IHdlIGRvbid0IGluY3VyCisJCSAqIGV4dHJhIGludm9jYXRpb25zIG9mIHRoZSBoYXNoIGZ1bmN0 aW9uLgorCQkgKgorCQkgKiBUaGUgZGlzayBjb3N0IGRlcGVuZHMgb24gdGhlIGRlcHRoIG9mIHJl Y3Vyc2lvbjsgZWFjaCBsZXZlbAorCQkgKiByZXF1aXJpbmcgb25lIGFkZGl0aW9uYWwgd3JpdGUg YW5kIHRoZW4gcmVhZCBvZiBhIHR1cGxlLiBXcml0ZXMgYXJlCisJCSAqIHJhbmRvbSBhbmQgcmVh ZHMgYXJlIHNlcXVlbnRpYWwsIHNvIHdlIGFzc3VtZSAxLzIgcmFuZG9tIGFuZCBoYWxmCisJCSAq IHNlcXVlbnRpYWwuCisJCSAqCisJCSAqIEhhc2ggQWdnIGJlZ2lucyByZXR1cm5pbmcgdHVwbGVz IGFmdGVyIHRoZSBmaXJzdCBiYXRjaCBpcworCQkgKiBjb21wbGV0ZS4gQWNjcnVlIHdyaXRlcyAo c3BpbGxlZCB0dXBsZXMpIHRvIHN0YXJ0dXBfY29zdCBhbmQgcmVhZHMKKwkJICogb25seSB0byB0 b3RhbF9jb3N0LiBUaGlzIGlzIG5vdCBwZXJmZWN0OyBpdCBwZW5hbGl6ZXMgc3RhcnR1cF9jb3N0 CisJCSAqIGluIHRoZSBjYXNlIG9mIHJlY3Vyc2l2ZSBzcGlsbHMuIEFsc28sIHRyYW5zQ29zdCBp cyBlbnRpcmVseQorCQkgKiBjb3VudGVkIGluIHN0YXJ0dXBfY29zdDsgYnV0IHNvbWUgb2YgdGhh dCBjb3N0IGNvdWxkIGJlIGNvdW50ZWQKKwkJICogb25seSBhZ2FpbnN0IHRvdGFsX2Nvc3QuCisJ CSAqLworCQlpZiAoIWhhc2hhZ2dfbWVtX292ZXJmbG93ICYmIG5iYXRjaGVzID4gMS4wKQorCQl7 CisJCQlkb3VibGUgZGVwdGg7CisJCQlkb3VibGUgcGFnZXM7CisKKwkJCXBhZ2VzID0gcmVsYXRp b25fYnl0ZV9zaXplKGlucHV0X3R1cGxlcywgaW5wdXRfd2lkdGgpIC8gQkxDS1NaOworCQkJZGVw dGggPSBjZWlsKCBsb2cobmJhdGNoZXMgLSAxKSAvIGxvZyhIQVNIQUdHX01BWF9QQVJUSVRJT05T KSApOworCQkJcGFnZXNfd3JpdHRlbiA9IHBhZ2VzX3JlYWQgPSBwYWdlcyAqIGRlcHRoOworCQkJ c3RhcnR1cF9jb3N0ICs9IHBhZ2VzX3dyaXR0ZW4gKiByYW5kb21fcGFnZV9jb3N0OworCQl9CisK IAkJdG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAkJdG90YWxfY29zdCArPSBhZ2djb3N0cy0+ ZmluYWxDb3N0LnBlcl90dXBsZSAqIG51bUdyb3VwczsKKwkJLyogY29zdCBvZiByZXRyaWV2aW5n IGZyb20gaGFzaCB0YWJsZSAqLwogCQl0b3RhbF9jb3N0ICs9IGNwdV90dXBsZV9jb3N0ICogbnVt R3JvdXBzOworCQl0b3RhbF9jb3N0ICs9IHBhZ2VzX3JlYWQgKiBzZXFfcGFnZV9jb3N0OwogCQlv dXRwdXRfdHVwbGVzID0gbnVtR3JvdXBzOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jCmluZGV4IGRmZjgyNmE4MjgwLi5kMjY5OWRiYzIzYyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTY0NCw2ICsxNjQ0LDcgQEAgY3JlYXRl X3VuaXF1ZV9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBVbmlxdWVQYXRoICpiZXN0X3BhdGgsIGlu dCBmbGFncykKIAkJCQkJCQkJIE5JTCwKIAkJCQkJCQkJIE5JTCwKIAkJCQkJCQkJIGJlc3RfcGF0 aC0+cGF0aC5yb3dzLAorCQkJCQkJCQkgMCwKIAkJCQkJCQkJIHN1YnBsYW4pOwogCX0KIAllbHNl CkBAIC0yMDk2LDYgKzIwOTcsNyBAQCBjcmVhdGVfYWdnX3BsYW4oUGxhbm5lckluZm8gKnJvb3Qs IEFnZ1BhdGggKmJlc3RfcGF0aCkKIAkJCQkJTklMLAogCQkJCQlOSUwsCiAJCQkJCWJlc3RfcGF0 aC0+bnVtR3JvdXBzLAorCQkJCQliZXN0X3BhdGgtPnRyYW5zaXRpb25TcGFjZSwKIAkJCQkJc3Vi cGxhbik7CiAKIAljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5wbGFuLCAoUGF0aCAqKSBi ZXN0X3BhdGgpOwpAQCAtMjI1Nyw2ICsyMjU5LDcgQEAgY3JlYXRlX2dyb3VwaW5nc2V0c19wbGFu KFBsYW5uZXJJbmZvICpyb290LCBHcm91cGluZ1NldHNQYXRoICpiZXN0X3BhdGgpCiAJCQkJCQkJ CQkJIHJvbGx1cC0+Z3NldHMsCiAJCQkJCQkJCQkJIE5JTCwKIAkJCQkJCQkJCQkgcm9sbHVwLT5u dW1Hcm91cHMsCisJCQkJCQkJCQkJIGJlc3RfcGF0aC0+dHJhbnNpdGlvblNwYWNlLAogCQkJCQkJ CQkJCSBzb3J0X3BsYW4pOwogCiAJCQkvKgpAQCAtMjI5NSw2ICsyMjk4LDcgQEAgY3JlYXRlX2dy b3VwaW5nc2V0c19wbGFuKFBsYW5uZXJJbmZvICpyb290LCBHcm91cGluZ1NldHNQYXRoICpiZXN0 X3BhdGgpCiAJCQkJCQlyb2xsdXAtPmdzZXRzLAogCQkJCQkJY2hhaW4sCiAJCQkJCQlyb2xsdXAt Pm51bUdyb3VwcywKKwkJCQkJCWJlc3RfcGF0aC0+dHJhbnNpdGlvblNwYWNlLAogCQkJCQkJc3Vi cGxhbik7CiAKIAkJLyogQ29weSBjb3N0IGRhdGEgZnJvbSBQYXRoIHRvIFBsYW4gKi8KQEAgLTYx OTQsOCArNjE5OCw4IEBAIEFnZyAqCiBtYWtlX2FnZyhMaXN0ICp0bGlzdCwgTGlzdCAqcXVhbCwK IAkJIEFnZ1N0cmF0ZWd5IGFnZ3N0cmF0ZWd5LCBBZ2dTcGxpdCBhZ2dzcGxpdCwKIAkJIGludCBu dW1Hcm91cENvbHMsIEF0dHJOdW1iZXIgKmdycENvbElkeCwgT2lkICpncnBPcGVyYXRvcnMsIE9p ZCAqZ3JwQ29sbGF0aW9ucywKLQkJIExpc3QgKmdyb3VwaW5nU2V0cywgTGlzdCAqY2hhaW4sCi0J CSBkb3VibGUgZE51bUdyb3VwcywgUGxhbiAqbGVmdHRyZWUpCisJCSBMaXN0ICpncm91cGluZ1Nl dHMsIExpc3QgKmNoYWluLCBkb3VibGUgZE51bUdyb3VwcywKKwkJIGludDMyIHRyYW5zaXRpb25T cGFjZSwgUGxhbiAqbGVmdHRyZWUpCiB7CiAJQWdnCQkgICAqbm9kZSA9IG1ha2VOb2RlKEFnZyk7 CiAJUGxhbgkgICAqcGxhbiA9ICZub2RlLT5wbGFuOwpAQCAtNjIxMSw2ICs2MjE1LDcgQEAgbWFr ZV9hZ2coTGlzdCAqdGxpc3QsIExpc3QgKnF1YWwsCiAJbm9kZS0+Z3JwT3BlcmF0b3JzID0gZ3Jw T3BlcmF0b3JzOwogCW5vZGUtPmdycENvbGxhdGlvbnMgPSBncnBDb2xsYXRpb25zOwogCW5vZGUt Pm51bUdyb3VwcyA9IG51bUdyb3VwczsKKwlub2RlLT50cmFuc2l0aW9uU3BhY2UgPSB0cmFuc2l0 aW9uU3BhY2U7CiAJbm9kZS0+YWdnUGFyYW1zID0gTlVMTDsJCS8qIFNTX2ZpbmFsaXplX3BsYW4o KSB3aWxsIGZpbGwgdGhpcyAqLwogCW5vZGUtPmdyb3VwaW5nU2V0cyA9IGdyb3VwaW5nU2V0czsK IAlub2RlLT5jaGFpbiA9IGNoYWluOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmlu ZGV4IGQ2ZjIxNTM1OTM3Li45MTNhZDkzMzVlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYwpAQCAtNDg2NywxMyArNDg2Nyw4IEBAIGNyZWF0ZV9kaXN0aW5jdF9wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwKIAkJYWxsb3dfaGFzaCA9IGZhbHNlOwkJLyogcG9saWN5LWJhc2VkIGRl Y2lzaW9uIG5vdCB0byBoYXNoICovCiAJZWxzZQogCXsKLQkJU2l6ZQkJaGFzaGVudHJ5c2l6ZTsK LQotCQkvKiBFc3RpbWF0ZSBwZXItaGFzaC1lbnRyeSBzcGFjZSBhdCB0dXBsZSB3aWR0aC4uLiAq LwotCQloYXNoZW50cnlzaXplID0gTUFYQUxJR04oY2hlYXBlc3RfaW5wdXRfcGF0aC0+cGF0aHRh cmdldC0+d2lkdGgpICsKLQkJCU1BWEFMSUdOKFNpemVvZk1pbmltYWxUdXBsZUhlYWRlcik7Ci0J CS8qIHBsdXMgdGhlIHBlci1oYXNoLWVudHJ5IG92ZXJoZWFkICovCi0JCWhhc2hlbnRyeXNpemUg Kz0gaGFzaF9hZ2dfZW50cnlfc2l6ZSgwKTsKKwkJU2l6ZQkJaGFzaGVudHJ5c2l6ZSA9IGhhc2hf YWdnX2VudHJ5X3NpemUoCisJCQkwLCBjaGVhcGVzdF9pbnB1dF9wYXRoLT5wYXRodGFyZ2V0LT53 aWR0aCwgMCk7CiAKIAkJLyogQWxsb3cgaGFzaGluZyBvbmx5IGlmIGhhc2h0YWJsZSBpcyBwcmVk aWN0ZWQgdG8gZml0IGluIHdvcmtfbWVtICovCiAJCWFsbG93X2hhc2ggPSAoaGFzaGVudHJ5c2l6 ZSAqIG51bURpc3RpbmN0Um93cyA8PSB3b3JrX21lbSAqIDEwMjRMKTsKQEAgLTY1MzMsNyArNjUy OCw4IEBAIGFkZF9wYXRoc190b19ncm91cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKmlucHV0X3JlbCwKIAkJCSAqIHdlcmUgdW5hYmxlIHRvIHNvcnQgYWJvdmUsIHRoZW4g d2UnZCBiZXR0ZXIgZ2VuZXJhdGUgYSBQYXRoLCBzbwogCQkJICogdGhhdCB3ZSBhdCBsZWFzdCBo YXZlIG9uZS4KIAkJCSAqLwotCQkJaWYgKGhhc2hhZ2d0YWJsZXNpemUgPCB3b3JrX21lbSAqIDEw MjRMIHx8CisJCQlpZiAoZW5hYmxlX2hhc2hhZ2dfc3BpbGwgfHwKKwkJCQloYXNoYWdndGFibGVz aXplIDwgd29ya19tZW0gKiAxMDI0TCB8fAogCQkJCWdyb3VwZWRfcmVsLT5wYXRobGlzdCA9PSBO SUwpCiAJCQl7CiAJCQkJLyoKQEAgLTY1NjYsNyArNjU2Miw4IEBAIGFkZF9wYXRoc190b19ncm91 cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJ CQkJCQkJCQkJICBhZ2dfZmluYWxfY29zdHMsCiAJCQkJCQkJCQkJCQkJCSAgZE51bUdyb3Vwcyk7 CiAKLQkJCWlmIChoYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0gKiAxMDI0TCkKKwkJCWlmIChl bmFibGVfaGFzaGFnZ19zcGlsbCB8fAorCQkJCWhhc2hhZ2d0YWJsZXNpemUgPCB3b3JrX21lbSAq IDEwMjRMKQogCQkJCWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAqKQogCQkJCQkJIGNyZWF0 ZV9hZ2dfcGF0aChyb290LAogCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKQEAgLTY4MzUsNyArNjgz Miw3IEBAIGNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAog CQkgKiBUZW50YXRpdmVseSBwcm9kdWNlIGEgcGFydGlhbCBIYXNoQWdnIFBhdGgsIGRlcGVuZGlu ZyBvbiBpZiBpdAogCQkgKiBsb29rcyBhcyBpZiB0aGUgaGFzaCB0YWJsZSB3aWxsIGZpdCBpbiB3 b3JrX21lbS4KIAkJICovCi0JCWlmIChoYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0gKiAxMDI0 TCAmJgorCQlpZiAoKGVuYWJsZV9oYXNoYWdnX3NwaWxsIHx8IGhhc2hhZ2d0YWJsZXNpemUgPCB3 b3JrX21lbSAqIDEwMjRMKSAmJgogCQkJY2hlYXBlc3RfdG90YWxfcGF0aCAhPSBOVUxMKQogCQl7 CiAJCQlhZGRfcGF0aChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQYXRoICopCkBAIC02ODYyLDcg KzY4NTksNyBAQCBjcmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJCSAgIGROdW1QYXJ0aWFsUGFydGlhbEdyb3Vwcyk7CiAKIAkJLyogRG8gdGhl IHNhbWUgZm9yIHBhcnRpYWwgcGF0aHMuICovCi0JCWlmIChoYXNoYWdndGFibGVzaXplIDwgd29y a19tZW0gKiAxMDI0TCAmJgorCQlpZiAoKGVuYWJsZV9oYXNoYWdnX3NwaWxsIHx8IGhhc2hhZ2d0 YWJsZXNpemUgPCB3b3JrX21lbSAqIDEwMjRMKSAmJgogCQkJY2hlYXBlc3RfcGFydGlhbF9wYXRo ICE9IE5VTEwpCiAJCXsKIAkJCWFkZF9wYXJ0aWFsX3BhdGgocGFydGlhbGx5X2dyb3VwZWRfcmVs LCAoUGF0aCAqKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVu aW9uLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwppbmRleCAxYTIz ZTE4OTcwZC4uOTUxYWVkODBlN2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w cmVwL3ByZXB1bmlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlv bi5jCkBAIC0xMDcyLDcgKzEwNzIsNyBAQCBjaG9vc2VfaGFzaGVkX3NldG9wKFBsYW5uZXJJbmZv ICpyb290LCBMaXN0ICpncm91cENsYXVzZXMsCiAJCQkgbnVtR3JvdXBDb2xzLCBkTnVtR3JvdXBz LAogCQkJIE5JTCwKIAkJCSBpbnB1dF9wYXRoLT5zdGFydHVwX2Nvc3QsIGlucHV0X3BhdGgtPnRv dGFsX2Nvc3QsCi0JCQkgaW5wdXRfcGF0aC0+cm93cyk7CisJCQkgaW5wdXRfcGF0aC0+cm93cywg aW5wdXRfcGF0aC0+cGF0aHRhcmdldC0+d2lkdGgpOwogCiAJLyoKIAkgKiBOb3cgZm9yIHRoZSBz b3J0ZWQgY2FzZS4gIE5vdGUgdGhhdCB0aGUgaW5wdXQgaXMgKmFsd2F5cyogdW5zb3J0ZWQsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCBlNmQwOGFlZGU1Ni4uOGJhODEy MmVlMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtMTcwNCw3ICsx NzA0LDggQEAgY3JlYXRlX3VuaXF1ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsIFBhdGggKnN1YnBhdGgsCiAJCQkJCSBOSUwsCiAJCQkJCSBzdWJwYXRoLT5zdGFydHVw X2Nvc3QsCiAJCQkJCSBzdWJwYXRoLT50b3RhbF9jb3N0LAotCQkJCQkgcmVsLT5yb3dzKTsKKwkJ CQkJIHJlbC0+cm93cywKKwkJCQkJIHN1YnBhdGgtPnBhdGh0YXJnZXQtPndpZHRoKTsKIAl9CiAK IAlpZiAoc2ppbmZvLT5zZW1pX2Nhbl9idHJlZSAmJiBzamluZm8tPnNlbWlfY2FuX2hhc2gpCkBA IC0yOTQ5LDYgKzI5NTAsNyBAQCBjcmVhdGVfYWdnX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJ cGF0aG5vZGUtPmFnZ3N0cmF0ZWd5ID0gYWdnc3RyYXRlZ3k7CiAJcGF0aG5vZGUtPmFnZ3NwbGl0 ID0gYWdnc3BsaXQ7CiAJcGF0aG5vZGUtPm51bUdyb3VwcyA9IG51bUdyb3VwczsKKwlwYXRobm9k ZS0+dHJhbnNpdGlvblNwYWNlID0gYWdnY29zdHMgPyBhZ2djb3N0cy0+dHJhbnNpdGlvblNwYWNl IDogMDsKIAlwYXRobm9kZS0+Z3JvdXBDbGF1c2UgPSBncm91cENsYXVzZTsKIAlwYXRobm9kZS0+ cXVhbCA9IHF1YWw7CiAKQEAgLTI5NTcsNyArMjk1OSw3IEBAIGNyZWF0ZV9hZ2dfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAkJCSBsaXN0X2xlbmd0aChncm91cENsYXVzZSksIG51bUdyb3VwcywK IAkJCSBxdWFsLAogCQkJIHN1YnBhdGgtPnN0YXJ0dXBfY29zdCwgc3VicGF0aC0+dG90YWxfY29z dCwKLQkJCSBzdWJwYXRoLT5yb3dzKTsKKwkJCSBzdWJwYXRoLT5yb3dzLCBzdWJwYXRoLT5wYXRo dGFyZ2V0LT53aWR0aCk7CiAKIAkvKiBhZGQgdGxpc3QgZXZhbCBjb3N0IGZvciBlYWNoIG91dHB1 dCByb3cgKi8KIAlwYXRobm9kZS0+cGF0aC5zdGFydHVwX2Nvc3QgKz0gdGFyZ2V0LT5jb3N0LnN0 YXJ0dXA7CkBAIC0zMDM2LDYgKzMwMzgsNyBAQCBjcmVhdGVfZ3JvdXBpbmdzZXRzX3BhdGgoUGxh bm5lckluZm8gKnJvb3QsCiAJcGF0aG5vZGUtPmFnZ3N0cmF0ZWd5ID0gYWdnc3RyYXRlZ3k7CiAJ cGF0aG5vZGUtPnJvbGx1cHMgPSByb2xsdXBzOwogCXBhdGhub2RlLT5xdWFsID0gaGF2aW5nX3F1 YWw7CisJcGF0aG5vZGUtPnRyYW5zaXRpb25TcGFjZSA9IGFnZ19jb3N0cyA/IGFnZ19jb3N0cy0+ dHJhbnNpdGlvblNwYWNlIDogMDsKIAogCUFzc2VydChyb2xsdXBzICE9IE5JTCk7CiAJQXNzZXJ0 KGFnZ3N0cmF0ZWd5ICE9IEFHR19QTEFJTiB8fCBsaXN0X2xlbmd0aChyb2xsdXBzKSA9PSAxKTsK QEAgLTMwNjcsNyArMzA3MCw4IEBAIGNyZWF0ZV9ncm91cGluZ3NldHNfcGF0aChQbGFubmVySW5m byAqcm9vdCwKIAkJCQkJIGhhdmluZ19xdWFsLAogCQkJCQkgc3VicGF0aC0+c3RhcnR1cF9jb3N0 LAogCQkJCQkgc3VicGF0aC0+dG90YWxfY29zdCwKLQkJCQkJIHN1YnBhdGgtPnJvd3MpOworCQkJ CQkgc3VicGF0aC0+cm93cywKKwkJCQkJIHN1YnBhdGgtPnBhdGh0YXJnZXQtPndpZHRoKTsKIAkJ CWlzX2ZpcnN0ID0gZmFsc2U7CiAJCQlpZiAoIXJvbGx1cC0+aXNfaGFzaGVkKQogCQkJCWlzX2Zp cnN0X3NvcnQgPSBmYWxzZTsKQEAgLTMwOTAsNyArMzA5NCw4IEBAIGNyZWF0ZV9ncm91cGluZ3Nl dHNfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCSByb2xsdXAtPm51bUdyb3VwcywKIAkJ CQkJCSBoYXZpbmdfcXVhbCwKIAkJCQkJCSAwLjAsIDAuMCwKLQkJCQkJCSBzdWJwYXRoLT5yb3dz KTsKKwkJCQkJCSBzdWJwYXRoLT5yb3dzLAorCQkJCQkJIHN1YnBhdGgtPnBhdGh0YXJnZXQtPndp ZHRoKTsKIAkJCQlpZiAoIXJvbGx1cC0+aXNfaGFzaGVkKQogCQkJCQlpc19maXJzdF9zb3J0ID0g ZmFsc2U7CiAJCQl9CkBAIC0zMTE1LDcgKzMxMjAsOCBAQCBjcmVhdGVfZ3JvdXBpbmdzZXRzX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkgaGF2aW5nX3F1YWwsCiAJCQkJCQkgc29ydF9w YXRoLnN0YXJ0dXBfY29zdCwKIAkJCQkJCSBzb3J0X3BhdGgudG90YWxfY29zdCwKLQkJCQkJCSBz b3J0X3BhdGgucm93cyk7CisJCQkJCQkgc29ydF9wYXRoLnJvd3MsCisJCQkJCQkgc3VicGF0aC0+ cGF0aHRhcmdldC0+d2lkdGgpOwogCQkJfQogCiAJCQlwYXRobm9kZS0+cGF0aC50b3RhbF9jb3N0 ICs9IGFnZ19wYXRoLnRvdGFsX2Nvc3Q7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IDdj NmYwNTc0YjM3Li4wYmUyNmZlMDM3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTM1 MjYsMTYgKzM1MjYsOCBAQCBkb3VibGUKIGVzdGltYXRlX2hhc2hhZ2dfdGFibGVzaXplKFBhdGgg KnBhdGgsIGNvbnN0IEFnZ0NsYXVzZUNvc3RzICphZ2dfY29zdHMsCiAJCQkJCQkgICBkb3VibGUg ZE51bUdyb3VwcykKIHsKLQlTaXplCQloYXNoZW50cnlzaXplOwotCi0JLyogRXN0aW1hdGUgcGVy LWhhc2gtZW50cnkgc3BhY2UgYXQgdHVwbGUgd2lkdGguLi4gKi8KLQloYXNoZW50cnlzaXplID0g TUFYQUxJR04ocGF0aC0+cGF0aHRhcmdldC0+d2lkdGgpICsKLQkJTUFYQUxJR04oU2l6ZW9mTWlu aW1hbFR1cGxlSGVhZGVyKTsKLQotCS8qIHBsdXMgc3BhY2UgZm9yIHBhc3MtYnktcmVmIHRyYW5z aXRpb24gdmFsdWVzLi4uICovCi0JaGFzaGVudHJ5c2l6ZSArPSBhZ2dfY29zdHMtPnRyYW5zaXRp b25TcGFjZTsKLQkvKiBwbHVzIHRoZSBwZXItaGFzaC1lbnRyeSBvdmVyaGVhZCAqLwotCWhhc2hl bnRyeXNpemUgKz0gaGFzaF9hZ2dfZW50cnlfc2l6ZShhZ2dfY29zdHMtPm51bUFnZ3MpOworCVNp emUJCWhhc2hlbnRyeXNpemUgPSBoYXNoX2FnZ19lbnRyeV9zaXplKAorCQlhZ2dfY29zdHMtPm51 bUFnZ3MsIHBhdGgtPnBhdGh0YXJnZXQtPndpZHRoLCBhZ2dfY29zdHMtPnRyYW5zaXRpb25TcGFj ZSk7CiAKIAkvKgogCSAqIE5vdGUgdGhhdCB0aGlzIGRpc3JlZ2FyZHMgdGhlIGVmZmVjdCBvZiBm aWxsLWZhY3RvciBhbmQgZ3Jvd3RoIHBvbGljeQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRl eCBiMWY2MjkxYjk5ZS4uZGFhZmYwOGNlZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBA IC0xMjAsNiArMTIwLDcgQEAgYm9vbAkJZW5hYmxlRnN5bmMgPSB0cnVlOwogYm9vbAkJYWxsb3dT eXN0ZW1UYWJsZU1vZHMgPSBmYWxzZTsKIGludAkJCXdvcmtfbWVtID0gMTAyNDsKIGludAkJCW1h aW50ZW5hbmNlX3dvcmtfbWVtID0gMTYzODQ7Citib29sCQloYXNoYWdnX21lbV9vdmVyZmxvdyA9 IGZhbHNlOwogaW50CQkJbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMgPSAyOwogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjLmMKaW5kZXggOWYxNzlhOTEyOTUuLjczYTA1MmFiOWQ1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjLmMKQEAgLTk2Myw2ICs5NjMsMjYgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfYm9v bCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9 LAorCXsKKwkJeyJlbmFibGVfaGFzaGFnZ19zcGlsbCIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5J TkdfTUVUSE9ELAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHRoZSBwbGFubmVyJ3MgdXNlIG9m IGhhc2hlZCBhZ2dyZWdhdGlvbiBwbGFucyB0aGF0IGFyZSBleHBlY3RlZCB0byBleGNlZWQgd29y a19tZW0uIiksCisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4KKwkJfSwKKwkJJmVuYWJsZV9oYXNo YWdnX3NwaWxsLAorCQl0cnVlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwl7CisJCXsiaGFz aGFnZ19tZW1fb3ZlcmZsb3ciLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKKwkJ CWdldHRleHRfbm9vcCgiRW5hYmxlcyBoYXNoZWQgYWdncmVnYXRpb24gdG8gb3ZlcmZsb3cgd29y a19tZW0gYXQgZXhlY3V0aW9uIHRpbWUuIiksCisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4KKwkJ fSwKKwkJJmhhc2hhZ2dfbWVtX292ZXJmbG93LAorCQlmYWxzZSwKKwkJTlVMTCwgTlVMTCwgTlVM TAorCX0sCiAJewogCQl7ImVuYWJsZV9tYXRlcmlhbCIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5J TkdfTUVUSE9ELAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHRoZSBwbGFubmVyJ3MgdXNlIG9m IG1hdGVyaWFsaXphdGlvbi4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQv bG9ndGFwZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9sb2d0YXBlLmMKaW5kZXggNDJjZmIx ZjlmOTguLjVhMTJiYTYyM2M2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L2xv Z3RhcGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYwpAQCAtMjAyLDcg KzIwMiw3IEBAIHN0cnVjdCBMb2dpY2FsVGFwZVNldAogCiAJLyogVGhlIGFycmF5IG9mIGxvZ2lj YWwgdGFwZXMuICovCiAJaW50CQkJblRhcGVzOwkJCS8qICMgb2YgbG9naWNhbCB0YXBlcyBpbiBz ZXQgKi8KLQlMb2dpY2FsVGFwZSB0YXBlc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwkvKiBoYXMg blRhcGVzIG5lbnRyaWVzICovCisJTG9naWNhbFRhcGUJKnRhcGVzOwkvKiBoYXMgblRhcGVzIG5l bnRyaWVzICovCiB9OwogCiBzdGF0aWMgdm9pZCBsdHNXcml0ZUJsb2NrKExvZ2ljYWxUYXBlU2V0 ICpsdHMsIGxvbmcgYmxvY2tudW0sIHZvaWQgKmJ1ZmZlcik7CkBAIC0yMTEsNiArMjExLDcgQEAg c3RhdGljIGxvbmcgbHRzR2V0RnJlZUJsb2NrKExvZ2ljYWxUYXBlU2V0ICpsdHMpOwogc3RhdGlj IHZvaWQgbHRzUmVsZWFzZUJsb2NrKExvZ2ljYWxUYXBlU2V0ICpsdHMsIGxvbmcgYmxvY2tudW0p Owogc3RhdGljIHZvaWQgbHRzQ29uY2F0V29ya2VyVGFwZXMoTG9naWNhbFRhcGVTZXQgKmx0cywg VGFwZVNoYXJlICpzaGFyZWQsCiAJCQkJCQkJCSBTaGFyZWRGaWxlU2V0ICpmaWxlc2V0KTsKK3N0 YXRpYyB2b2lkIGx0c0luaXRUYXBlKExvZ2ljYWxUYXBlICpsdCk7CiAKIAogLyoKQEAgLTQ4Niw2 ICs0ODcsMzAgQEAgbHRzQ29uY2F0V29ya2VyVGFwZXMoTG9naWNhbFRhcGVTZXQgKmx0cywgVGFw ZVNoYXJlICpzaGFyZWQsCiAJbHRzLT5uSG9sZUJsb2NrcyA9IGx0cy0+bkJsb2Nrc0FsbG9jYXRl ZCAtIG5waHlzaWNhbGJsb2NrczsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgcGVyLXRhcGUgc3Ry dWN0LiAgTm90ZSB3ZSBhbGxvY2F0ZSB0aGUgSS9PIGJ1ZmZlciBhbmQgdGhlIGZpcnN0CisgKiBi bG9jayBmb3IgYSB0YXBlIG9ubHkgd2hlbiBpdCBpcyBmaXJzdCBhY3R1YWxseSB3cml0dGVuIHRv LiAgVGhpcyBhdm9pZHMKKyAqIHdhc3RpbmcgbWVtb3J5IHNwYWNlIHdoZW4gdHVwbGVzb3J0LmMg b3ZlcmVzdGltYXRlcyB0aGUgbnVtYmVyIG9mIHRhcGVzCisgKiBuZWVkZWQuCisgKi8KK3N0YXRp YyB2b2lkCitsdHNJbml0VGFwZShMb2dpY2FsVGFwZSAqbHQpCit7CisJbHQtPndyaXRpbmcgICAg ICAgICAgID0gdHJ1ZTsKKwlsdC0+ZnJvemVuICAgICAgICAgICAgPSBmYWxzZTsKKwlsdC0+ZGly dHkgICAgICAgICAgICAgPSBmYWxzZTsKKwlsdC0+Zmlyc3RCbG9ja051bWJlciAgPSAtMUw7CisJ bHQtPmN1ckJsb2NrTnVtYmVyICAgID0gLTFMOworCWx0LT5uZXh0QmxvY2tOdW1iZXIgICA9IC0x TDsKKwlsdC0+b2Zmc2V0QmxvY2tOdW1iZXIgPSAwTDsKKwlsdC0+YnVmZmVyICAgICAgICAgICAg PSBOVUxMOworCWx0LT5idWZmZXJfc2l6ZSAgICAgICA9IDA7CisJLyogcGFsbG9jKCkgbGFyZ2Vy IHRoYW4gTWF4QWxsb2NTaXplIHdvdWxkIGZhaWwgKi8KKwlsdC0+bWF4X3NpemUgICAgICAgICAg PSBNYXhBbGxvY1NpemU7CisJbHQtPnBvcyAgICAgICAgICAgICAgID0gMDsKKwlsdC0+bmJ5dGVz ICAgICAgICAgICAgPSAwOworfQorCiAvKgogICogQ3JlYXRlIGEgc2V0IG9mIGxvZ2ljYWwgdGFw ZXMgaW4gYSB0ZW1wb3JhcnkgdW5kZXJseWluZyBmaWxlLgogICoKQEAgLTUxMSwxNSArNTM2LDEz IEBAIExvZ2ljYWxUYXBlU2V0Q3JlYXRlKGludCBudGFwZXMsIFRhcGVTaGFyZSAqc2hhcmVkLCBT aGFyZWRGaWxlU2V0ICpmaWxlc2V0LAogCQkJCQkgaW50IHdvcmtlcikKIHsKIAlMb2dpY2FsVGFw ZVNldCAqbHRzOwotCUxvZ2ljYWxUYXBlICpsdDsKIAlpbnQJCQlpOwogCiAJLyoKIAkgKiBDcmVh dGUgdG9wLWxldmVsIHN0cnVjdCBpbmNsdWRpbmcgcGVyLXRhcGUgTG9naWNhbFRhcGUgc3RydWN0 cy4KIAkgKi8KIAlBc3NlcnQobnRhcGVzID4gMCk7Ci0JbHRzID0gKExvZ2ljYWxUYXBlU2V0ICop IHBhbGxvYyhvZmZzZXRvZihMb2dpY2FsVGFwZVNldCwgdGFwZXMpICsKLQkJCQkJCQkJCW50YXBl cyAqIHNpemVvZihMb2dpY2FsVGFwZSkpOworCWx0cyA9IChMb2dpY2FsVGFwZVNldCAqKSBwYWxs b2Moc2l6ZW9mKExvZ2ljYWxUYXBlU2V0KSk7CiAJbHRzLT5uQmxvY2tzQWxsb2NhdGVkID0gMEw7 CiAJbHRzLT5uQmxvY2tzV3JpdHRlbiA9IDBMOwogCWx0cy0+bkhvbGVCbG9ja3MgPSAwTDsKQEAg LTUyOSwzMCArNTUyLDEwIEBAIExvZ2ljYWxUYXBlU2V0Q3JlYXRlKGludCBudGFwZXMsIFRhcGVT aGFyZSAqc2hhcmVkLCBTaGFyZWRGaWxlU2V0ICpmaWxlc2V0LAogCWx0cy0+ZnJlZUJsb2NrcyA9 IChsb25nICopIHBhbGxvYyhsdHMtPmZyZWVCbG9ja3NMZW4gKiBzaXplb2YobG9uZykpOwogCWx0 cy0+bkZyZWVCbG9ja3MgPSAwOwogCWx0cy0+blRhcGVzID0gbnRhcGVzOworCWx0cy0+dGFwZXMg PSAoTG9naWNhbFRhcGUgKikgcGFsbG9jKG50YXBlcyAqIHNpemVvZihMb2dpY2FsVGFwZSkpOwog Ci0JLyoKLQkgKiBJbml0aWFsaXplIHBlci10YXBlIHN0cnVjdHMuICBOb3RlIHdlIGFsbG9jYXRl IHRoZSBJL08gYnVmZmVyIGFuZCB0aGUKLQkgKiBmaXJzdCBibG9jayBmb3IgYSB0YXBlIG9ubHkg d2hlbiBpdCBpcyBmaXJzdCBhY3R1YWxseSB3cml0dGVuIHRvLiAgVGhpcwotCSAqIGF2b2lkcyB3 YXN0aW5nIG1lbW9yeSBzcGFjZSB3aGVuIHR1cGxlc29ydC5jIG92ZXJlc3RpbWF0ZXMgdGhlIG51 bWJlcgotCSAqIG9mIHRhcGVzIG5lZWRlZC4KLQkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnRhcGVz OyBpKyspCi0JewotCQlsdCA9ICZsdHMtPnRhcGVzW2ldOwotCQlsdC0+d3JpdGluZyA9IHRydWU7 Ci0JCWx0LT5mcm96ZW4gPSBmYWxzZTsKLQkJbHQtPmRpcnR5ID0gZmFsc2U7Ci0JCWx0LT5maXJz dEJsb2NrTnVtYmVyID0gLTFMOwotCQlsdC0+Y3VyQmxvY2tOdW1iZXIgPSAtMUw7Ci0JCWx0LT5u ZXh0QmxvY2tOdW1iZXIgPSAtMUw7Ci0JCWx0LT5vZmZzZXRCbG9ja051bWJlciA9IDBMOwotCQls dC0+YnVmZmVyID0gTlVMTDsKLQkJbHQtPmJ1ZmZlcl9zaXplID0gMDsKLQkJLyogcGFsbG9jKCkg bGFyZ2VyIHRoYW4gTWF4QWxsb2NTaXplIHdvdWxkIGZhaWwgKi8KLQkJbHQtPm1heF9zaXplID0g TWF4QWxsb2NTaXplOwotCQlsdC0+cG9zID0gMDsKLQkJbHQtPm5ieXRlcyA9IDA7Ci0JfQorCQls dHNJbml0VGFwZSgmbHRzLT50YXBlc1tpXSk7CiAKIAkvKgogCSAqIENyZWF0ZSB0ZW1wIEJ1ZkZp bGUgc3RvcmFnZSBhcyByZXF1aXJlZC4KQEAgLTc3MywxNSArNzc2LDEyIEBAIExvZ2ljYWxUYXBl UmV3aW5kRm9yUmVhZChMb2dpY2FsVGFwZVNldCAqbHRzLCBpbnQgdGFwZW51bSwgc2l6ZV90IGJ1 ZmZlcl9zaXplKQogCWx0LT5idWZmZXJfc2l6ZSA9IDA7CiAJaWYgKGx0LT5maXJzdEJsb2NrTnVt YmVyICE9IC0xTCkKIAl7Ci0JCWx0LT5idWZmZXIgPSBwYWxsb2MoYnVmZmVyX3NpemUpOworCQkv KgorCQkgKiBUaGUgYnVmZmVyIGlzIGxhemlseSBhbGxvY2F0ZWQgaW4gTG9naWNhbFRhcGVSZWFk KCksIGJ1dCB3ZSBzZXQgdGhlCisJCSAqIHNpemUgaGVyZS4KKwkJICovCiAJCWx0LT5idWZmZXJf c2l6ZSA9IGJ1ZmZlcl9zaXplOwogCX0KLQotCS8qIFJlYWQgdGhlIGZpcnN0IGJsb2NrLCBvciBy ZXNldCBpZiB0YXBlIGlzIGVtcHR5ICovCi0JbHQtPm5leHRCbG9ja051bWJlciA9IGx0LT5maXJz dEJsb2NrTnVtYmVyOwotCWx0LT5wb3MgPSAwOwotCWx0LT5uYnl0ZXMgPSAwOwotCWx0c1JlYWRG aWxsQnVmZmVyKGx0cywgbHQpOwogfQogCiAvKgpAQCAtODMwLDYgKzgzMCwyMiBAQCBMb2dpY2Fs VGFwZVJlYWQoTG9naWNhbFRhcGVTZXQgKmx0cywgaW50IHRhcGVudW0sCiAJbHQgPSAmbHRzLT50 YXBlc1t0YXBlbnVtXTsKIAlBc3NlcnQoIWx0LT53cml0aW5nKTsKIAorCWlmIChsdC0+YnVmZmVy ID09IE5VTEwpCisJeworCQkvKiBsYXppbHkgYWxsb2NhdGUgYnVmZmVyICovCisJCWlmIChsdC0+ Zmlyc3RCbG9ja051bWJlciAhPSAtMUwpCisJCXsKKwkJCUFzc2VydChsdC0+YnVmZmVyX3NpemUg PiAwKTsKKwkJCWx0LT5idWZmZXIgPSBwYWxsb2MobHQtPmJ1ZmZlcl9zaXplKTsKKwkJfQorCisJ CS8qIFJlYWQgdGhlIGZpcnN0IGJsb2NrLCBvciByZXNldCBpZiB0YXBlIGlzIGVtcHR5ICovCisJ CWx0LT5uZXh0QmxvY2tOdW1iZXIgPSBsdC0+Zmlyc3RCbG9ja051bWJlcjsKKwkJbHQtPnBvcyA9 IDA7CisJCWx0LT5uYnl0ZXMgPSAwOworCQlsdHNSZWFkRmlsbEJ1ZmZlcihsdHMsIGx0KTsKKwl9 CisKIAl3aGlsZSAoc2l6ZSA+IDApCiAJewogCQlpZiAobHQtPnBvcyA+PSBsdC0+bmJ5dGVzKQpA QCAtOTQzLDYgKzk1OSwyNSBAQCBMb2dpY2FsVGFwZUZyZWV6ZShMb2dpY2FsVGFwZVNldCAqbHRz LCBpbnQgdGFwZW51bSwgVGFwZVNoYXJlICpzaGFyZSkKIAl9CiB9CiAKKy8qCisgKiBBZGQgYWRk aXRpb25hbCB0YXBlcyB0byB0aGlzIHRhcGUgc2V0LgorICovCitMb2dpY2FsVGFwZVNldCAqCitM b2dpY2FsVGFwZVNldEV4dGVuZChMb2dpY2FsVGFwZVNldCAqbHRzLCBpbnQgbnRvZXh0ZW5kKQor eworCWludCAgICAgICAgICAgIGk7CisKKwlBc3NlcnQobnRvZXh0ZW5kID4gMCk7CisJbHRzLT50 YXBlcyA9IChMb2dpY2FsVGFwZSAqKSByZXBhbGxvYygKKwkJbHRzLT50YXBlcywgKGx0cy0+blRh cGVzICsgbnRvZXh0ZW5kKSAqIHNpemVvZihMb2dpY2FsVGFwZSkpOworCWx0cy0+blRhcGVzICAg ICAgICAgICA9IGx0cy0+blRhcGVzICsgbnRvZXh0ZW5kOworCisJZm9yIChpID0gbHRzLT5uVGFw ZXMgLSBudG9leHRlbmQ7IGkgPCBsdHMtPm5UYXBlczsgaSsrKQorCQlsdHNJbml0VGFwZSgmbHRz LT50YXBlc1tpXSk7CisKKwlyZXR1cm4gbHRzOworfQorCiAvKgogICogQmFja3NwYWNlIHRoZSB0 YXBlIGEgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLiAgKFdlIGFsc28gc3VwcG9ydCBhIG1vcmUKICAq IGdlbmVyYWwgc2VlayBpbnRlcmZhY2UsIHNlZSBiZWxvdy4pCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjRXhwci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIu aAppbmRleCA3MTEyNTU4MzYzZi4uMjM2NWY1YmRhZmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNFeHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIu aApAQCAtMjI2LDkgKzIyNiwxMyBAQCB0eXBlZGVmIGVudW0gRXhwckV2YWxPcAogCUVFT1BfQUdH X1NUUklDVF9JTlBVVF9DSEVDS19BUkdTLAogCUVFT1BfQUdHX1NUUklDVF9JTlBVVF9DSEVDS19O VUxMUywKIAlFRU9QX0FHR19JTklUX1RSQU5TLAorCUVFT1BfQUdHX0lOSVRfVFJBTlNfU1BJTExF RCwKIAlFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0ssCisJRUVPUF9BR0dfU1RSSUNUX1RSQU5T X0NIRUNLX1NQSUxMRUQsCiAJRUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUwsCisJRUVPUF9BR0df UExBSU5fVFJBTlNfQllWQUxfU1BJTExFRCwKIAlFRU9QX0FHR19QTEFJTl9UUkFOUywKKwlFRU9Q X0FHR19QTEFJTl9UUkFOU19TUElMTEVELAogCUVFT1BfQUdHX09SREVSRURfVFJBTlNfREFUVU0s CiAJRUVPUF9BR0dfT1JERVJFRF9UUkFOU19UVVBMRSwKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgK aW5kZXggNmVmM2UxZmUwNjkuLmUyMTEzOGI1ZjdjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgK QEAgLTE0MCwxMSArMTQwLDE3IEBAIGV4dGVybiBUdXBsZUhhc2hUYWJsZSBCdWlsZFR1cGxlSGFz aFRhYmxlRXh0KFBsYW5TdGF0ZSAqcGFyZW50LAogZXh0ZXJuIFR1cGxlSGFzaEVudHJ5IExvb2t1 cFR1cGxlSGFzaEVudHJ5KFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwKIAkJCQkJCQkJCQkgICBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkJCQkgICBib29sICppc25ldyk7CitleHRlcm4g VHVwbGVIYXNoRW50cnkgTG9va3VwVHVwbGVIYXNoRW50cnlIYXNoKFR1cGxlSGFzaFRhYmxlIGhh c2h0YWJsZSwKKwkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJ CSAgIGJvb2wgKmlzbmV3LCB1aW50MzIgaGFzaCk7CiBleHRlcm4gVHVwbGVIYXNoRW50cnkgRmlu ZFR1cGxlSGFzaEVudHJ5KFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwKIAkJCQkJCQkJCQkgVHVw bGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkJIEV4cHJTdGF0ZSAqZXFjb21wLAogCQkJCQkJ CQkJCSBGbWdySW5mbyAqaGFzaGZ1bmN0aW9ucyk7CitleHRlcm4gdWludDMyIFR1cGxlSGFzaFRh YmxlSGFzaChzdHJ1Y3QgdHVwbGVoYXNoX2hhc2ggKnRiLAorCQkJCQkJCQkgY29uc3QgTWluaW1h bFR1cGxlIHR1cGxlKTsKIGV4dGVybiB2b2lkIFJlc2V0VHVwbGVIYXNoVGFibGUoVHVwbGVIYXNo VGFibGUgaGFzaHRhYmxlKTsKK2V4dGVybiB2b2lkIERlc3Ryb3lUdXBsZUhhc2hUYWJsZShUdXBs ZUhhc2hUYWJsZSBoYXNodGFibGUpOwogCiAvKgogICogcHJvdG90eXBlcyBmcm9tIGZ1bmN0aW9u cyBpbiBleGVjSnVuay5jCkBAIC0yNTAsNyArMjU2LDcgQEAgZXh0ZXJuIEV4cHJTdGF0ZSAqRXhl Y0luaXRRdWFsKExpc3QgKnF1YWwsIFBsYW5TdGF0ZSAqcGFyZW50KTsKIGV4dGVybiBFeHByU3Rh dGUgKkV4ZWNJbml0Q2hlY2soTGlzdCAqcXVhbCwgUGxhblN0YXRlICpwYXJlbnQpOwogZXh0ZXJu IExpc3QgKkV4ZWNJbml0RXhwckxpc3QoTGlzdCAqbm9kZXMsIFBsYW5TdGF0ZSAqcGFyZW50KTsK IGV4dGVybiBFeHByU3RhdGUgKkV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSwg c3RydWN0IEFnZ1N0YXRlUGVyUGhhc2VEYXRhICpwaGFzZSwKLQkJCQkJCQkJCWJvb2wgZG9Tb3J0 LCBib29sIGRvSGFzaCk7CisJCQkJCQkJCQlib29sIGRvU29ydCwgYm9vbCBkb0hhc2gsIGJvb2wg c3BpbGxlZCk7CiBleHRlcm4gRXhwclN0YXRlICpFeGVjQnVpbGRHcm91cGluZ0VxdWFsKFR1cGxl RGVzYyBsZGVzYywgVHVwbGVEZXNjIHJkZXNjLAogCQkJCQkJCQkJCSBjb25zdCBUdXBsZVRhYmxl U2xvdE9wcyAqbG9wcywgY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKnJvcHMsCiAJCQkJCQkJCQkJ IGludCBudW1Db2xzLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5o IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oCmluZGV4IDJmZTgyZGE2ZmY3Li5hZTlm ZTA1YWJjNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oCisrKyBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVBZ2cuaApAQCAtMzA0LDExICszMDQsMTMgQEAgdHlw ZWRlZiBzdHJ1Y3QgQWdnU3RhdGVQZXJIYXNoRGF0YQogCUFnZwkJICAgKmFnZ25vZGU7CQkvKiBv cmlnaW5hbCBBZ2cgbm9kZSwgZm9yIG51bUdyb3VwcyBldGMuICovCiB9CQkJQWdnU3RhdGVQZXJI YXNoRGF0YTsKIAorI2RlZmluZSBIQVNIQUdHX01BWF9QQVJUSVRJT05TIDI1NgogCiBleHRlcm4g QWdnU3RhdGUgKkV4ZWNJbml0QWdnKEFnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxh Z3MpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZEFnZyhBZ2dTdGF0ZSAqbm9kZSk7CiBleHRlcm4gdm9p ZCBFeGVjUmVTY2FuQWdnKEFnZ1N0YXRlICpub2RlKTsKIAotZXh0ZXJuIFNpemUgaGFzaF9hZ2df ZW50cnlfc2l6ZShpbnQgbnVtQWdncyk7CitleHRlcm4gU2l6ZSBoYXNoX2FnZ19lbnRyeV9zaXpl KGludCBudW1BZ2dzLCBTaXplIHR1cGxlV2lkdGgsCisJCQkJCQkJCVNpemUgdHJhbnNpdGlvblNw YWNlKTsKIAogI2VuZGlmCQkJCQkJCS8qIE5PREVBR0dfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCA2MmQ2NGFh MGExNC4uMjg4NzY0OTI5Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisr KyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC0yNDQsNiArMjQ0LDcgQEAgZXh0ZXJuIGJv b2wgZW5hYmxlRnN5bmM7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBhbGxvd1N5c3RlbVRhYmxl TW9kczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgd29ya19tZW07CiBleHRlcm4gUEdETExJTVBP UlQgaW50IG1haW50ZW5hbmNlX3dvcmtfbWVtOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgaGFz aGFnZ19tZW1fb3ZlcmZsb3c7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF9t YWludGVuYW5jZV93b3JrZXJzOwogCiBleHRlcm4gaW50CVZhY3V1bUNvc3RQYWdlSGl0OwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAppbmRleCAxZjZmNWJiYzIwNy4uNjI4OGI1ZjM4YTkgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oCkBAIC0yMDc0LDEzICsyMDc0LDMyIEBAIHR5cGVkZWYgc3RydWN0IEFnZ1N0YXRl CiAJSGVhcFR1cGxlCWdycF9maXJzdFR1cGxlOyAvKiBjb3B5IG9mIGZpcnN0IHR1cGxlIG9mIGN1 cnJlbnQgZ3JvdXAgKi8KIAkvKiB0aGVzZSBmaWVsZHMgYXJlIHVzZWQgaW4gQUdHX0hBU0hFRCBh bmQgQUdHX01JWEVEIG1vZGVzOiAqLwogCWJvb2wJCXRhYmxlX2ZpbGxlZDsJLyogaGFzaCB0YWJs ZSBmaWxsZWQgeWV0PyAqLwotCWludAkJCW51bV9oYXNoZXM7CisJaW50CQkJbnVtX2hhc2hlczsJ CS8qIG51bWJlciBvZiBoYXNoIHRhYmxlcyBhY3RpdmUgYXQgb25jZSAqLworCWRvdWJsZQkJaGFz aGVudHJ5c2l6ZTsJLyogZXN0aW1hdGUgcmV2aXNlZCBkdXJpbmcgZXhlY3V0aW9uICovCisJc3Ry dWN0IEhhc2hUYXBlSW5mbyAqaGFzaF90YXBlaW5mbzsgLyogbWV0YWRhdGEgZm9yIHNwaWxsIHRh cGVzICovCisJc3RydWN0IEhhc2hBZ2dTcGlsbCAqaGFzaF9zcGlsbHM7IC8qIEhhc2hBZ2dTcGls bCBmb3IgZWFjaCBoYXNoIHRhYmxlLAorCQkJCQkJCQkJCSBleGlzdHMgb25seSBkdXJpbmcgZmly c3QgcGFzcyBpZiBzcGlsbGVkICovCisJVHVwbGVUYWJsZVNsb3QgKmhhc2hfc3BpbGxfc2xvdDsg Lyogc2xvdCBmb3IgcmVhZGluZyBmcm9tIHNwaWxsIGZpbGVzICovCisJYm9vbAkJaGFzaF9ldmVy X3NwaWxsZWQ7CS8qIGV2ZXIgc3BpbGxlZCBkdXJpbmcgdGhpcyBleGVjdXRpb24/ICovCisJYm9v bAkJaGFzaF9zcGlsbF9tb2RlOwkvKiB3ZSBoaXQgYSBsaW1pdCBkdXJpbmcgdGhlIGN1cnJlbnQg YmF0Y2gKKwkJCQkJCQkJCSAgIGFuZCB3ZSBtdXN0IG5vdCBjcmVhdGUgbmV3IGdyb3VwcyAqLwor CVNpemUJCWhhc2hfYWxsb2NfbGFzdDsgICAgLyogcHJldmlvdXMgdG90YWwgbWVtb3J5IGFsbG9j YXRpb24gKi8KKwlTaXplCQloYXNoX2FsbG9jX2N1cnJlbnQ7IC8qIGN1cnJlbnQgdG90YWwgbWVt b3J5IGFsbG9jYXRpb24gKi8KKwlTaXplCQloYXNoX21lbV9saW1pdDsJLyogbGltaXQgYmVmb3Jl IHNwaWxsaW5nIGhhc2ggdGFibGUgKi8KKwlTaXplCQloYXNoX21lbV9wZWFrOwkvKiBwZWFrIGhh c2ggdGFibGUgbWVtb3J5IHVzYWdlICovCisJbG9uZwkJaGFzaF9uZ3JvdXBzX2N1cnJlbnQ7CS8q IG51bWJlciBvZiBncm91cHMgY3VycmVudGx5IGluCisJCQkJCQkJCQkJICAgbWVtb3J5IGluIGFs bCBoYXNoIHRhYmxlcyAqLworCWxvbmcJCWhhc2hfbmdyb3Vwc19saW1pdDsJLyogbGltaXQgYmVm b3JlIHNwaWxsaW5nIGhhc2ggdGFibGUgKi8KKwl1aW50NjQJCWhhc2hfZGlza191c2VkOyAvKiBi eXRlcyBvZiBkaXNrIHNwYWNlIHVzZWQgKi8KKwlpbnQJCQloYXNoX2JhdGNoZXNfdXNlZDsJLyog YmF0Y2hlcyB1c2VkIGR1cmluZyBlbnRpcmUgZXhlY3V0aW9uICovCisJTGlzdAkgICAqaGFzaF9i YXRjaGVzOwkvKiBoYXNoIGJhdGNoZXMgcmVtYWluaW5nIHRvIGJlIHByb2Nlc3NlZCAqLworCiAJ QWdnU3RhdGVQZXJIYXNoIHBlcmhhc2g7CS8qIGFycmF5IG9mIHBlci1oYXNodGFibGUgZGF0YSAq LwogCUFnZ1N0YXRlUGVyR3JvdXAgKmhhc2hfcGVyZ3JvdXA7CS8qIGdyb3VwaW5nIHNldCBpbmRl eGVkIGFycmF5IG9mCiAJCQkJCQkJCQkJICogcGVyLWdyb3VwIHBvaW50ZXJzICovCiAKIAkvKiBz dXBwb3J0IGZvciBldmFsdWF0aW9uIG9mIGFnZyBpbnB1dCBleHByZXNzaW9uczogKi8KLSNkZWZp bmUgRklFTEROT19BR0dTVEFURV9BTExfUEVSR1JPVVBTIDM0CisjZGVmaW5lIEZJRUxETk9fQUdH U1RBVEVfQUxMX1BFUkdST1VQUyA0OQogCUFnZ1N0YXRlUGVyR3JvdXAgKmFsbF9wZXJncm91cHM7 CS8qIGFycmF5IG9mIGZpcnN0IC0+cGVyZ3JvdXBzLCB0aGFuCiAJCQkJCQkJCQkJICogLT5oYXNo X3Blcmdyb3VwICovCiAJUHJvamVjdGlvbkluZm8gKmNvbWJpbmVkcHJvajsJLyogcHJvamVjdGlv biBtYWNoaW5lcnkgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggM2QzYmUxOTdlMGUuLmJlNTky ZDBmZWU0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTY2Myw2ICsxNjYzLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgQWdnUGF0aAogCUFnZ1N0cmF0ZWd5IGFnZ3N0cmF0ZWd5OwkvKiBiYXNpYyBzdHJh dGVneSwgc2VlIG5vZGVzLmggKi8KIAlBZ2dTcGxpdAlhZ2dzcGxpdDsJCS8qIGFnZy1zcGxpdHRp bmcgbW9kZSwgc2VlIG5vZGVzLmggKi8KIAlkb3VibGUJCW51bUdyb3VwczsJCS8qIGVzdGltYXRl ZCBudW1iZXIgb2YgZ3JvdXBzIGluIGlucHV0ICovCisJaW50MzIJCXRyYW5zaXRpb25TcGFjZTsJ LyogZXN0aW1hdGVkIHRyYW5zaXRpb24gc3RhdGUgc2l6ZSAqLwogCUxpc3QJICAgKmdyb3VwQ2xh dXNlOwkvKiBhIGxpc3Qgb2YgU29ydEdyb3VwQ2xhdXNlJ3MgKi8KIAlMaXN0CSAgICpxdWFsOwkJ CS8qIHF1YWxzIChIQVZJTkcgcXVhbHMpLCBpZiBhbnkgKi8KIH0gQWdnUGF0aDsKQEAgLTE3MDAs NiArMTcwMSw3IEBAIHR5cGVkZWYgc3RydWN0IEdyb3VwaW5nU2V0c1BhdGgKIAlBZ2dTdHJhdGVn eSBhZ2dzdHJhdGVneTsJLyogYmFzaWMgc3RyYXRlZ3kgKi8KIAlMaXN0CSAgICpyb2xsdXBzOwkJ LyogbGlzdCBvZiBSb2xsdXBEYXRhICovCiAJTGlzdAkgICAqcXVhbDsJCQkvKiBxdWFscyAoSEFW SU5HIHF1YWxzKSwgaWYgYW55ICovCisJaW50MzIJCXRyYW5zaXRpb25TcGFjZTsJLyogZXN0aW1h dGVkIHRyYW5zaXRpb24gc3RhdGUgc2l6ZSAqLwogfSBHcm91cGluZ1NldHNQYXRoOwogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wbGFubm9kZXMuaAppbmRleCAzMmMwZDg3ZjgwZS4uZjQxODNlMWVmYTUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3BsYW5ub2Rlcy5oCkBAIC04MTMsNiArODEzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQWdnCiAJT2lk CQkgICAqZ3JwT3BlcmF0b3JzOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRo ICovCiAJT2lkCQkgICAqZ3JwQ29sbGF0aW9uczsKIAlsb25nCQludW1Hcm91cHM7CQkvKiBlc3Rp bWF0ZWQgbnVtYmVyIG9mIGdyb3VwcyBpbiBpbnB1dCAqLworCWludDMyCQl0cmFuc2l0aW9uU3Bh Y2U7CS8qIGVzdGltYXRlZCB0cmFuc2l0aW9uIHN0YXRlIHNpemUgKi8KIAlCaXRtYXBzZXQgICph Z2dQYXJhbXM7CQkvKiBJRHMgb2YgUGFyYW1zIHVzZWQgaW4gQWdncmVmIGlucHV0cyAqLwogCS8q IE5vdGU6IHBsYW5uZXIgcHJvdmlkZXMgbnVtR3JvdXBzICYgYWdnUGFyYW1zIG9ubHkgaW4gSEFT SEVEL01JWEVEIGNhc2UgKi8KIAlMaXN0CSAgICpncm91cGluZ1NldHM7CS8qIGdyb3VwaW5nIHNl dHMgdG8gdXNlICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIv c3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRleCBjYjAxMmJhMTk4MC4uNjU3MmRjMjQ2 OTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtNTQsNiArNTQsNyBAQCBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJs ZV90aWRzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3NvcnQ7CiBleHRlcm4g UEdETExJTVBPUlQgYm9vbCBlbmFibGVfaGFzaGFnZzsKK2V4dGVybiBQR0RMTElNUE9SVCBib29s IGVuYWJsZV9oYXNoYWdnX3NwaWxsOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX25l c3Rsb29wOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX21hdGVyaWFsOwogZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX21lcmdlam9pbjsKQEAgLTExNCw3ICsxMTUsNyBAQCBl eHRlcm4gdm9pZCBjb3N0X2FnZyhQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJ IGludCBudW1Hcm91cENvbHMsIGRvdWJsZSBudW1Hcm91cHMsCiAJCQkJCSBMaXN0ICpxdWFscywK IAkJCQkJIENvc3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nvc3QsCi0J CQkJCSBkb3VibGUgaW5wdXRfdHVwbGVzKTsKKwkJCQkJIGRvdWJsZSBpbnB1dF90dXBsZXMsIGRv dWJsZSBpbnB1dF93aWR0aCk7CiBleHRlcm4gdm9pZCBjb3N0X3dpbmRvd2FnZyhQYXRoICpwYXRo LCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCSAgIExpc3QgKndpbmRvd0Z1bmNzLCBpbnQgbnVt UGFydENvbHMsIGludCBudW1PcmRlckNvbHMsCiAJCQkJCQkgICBDb3N0IGlucHV0X3N0YXJ0dXBf Y29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BsYW5tYWluLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAppbmRl eCBlYWI0ODZhNjIxNC4uYzdiZGEyYjA5MTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9wbGFubWFpbi5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oCkBA IC01NCw4ICs1NCw4IEBAIGV4dGVybiBTb3J0ICptYWtlX3NvcnRfZnJvbV9zb3J0Y2xhdXNlcyhM aXN0ICpzb3J0Y2xzLCBQbGFuICpsZWZ0dHJlZSk7CiBleHRlcm4gQWdnICptYWtlX2FnZyhMaXN0 ICp0bGlzdCwgTGlzdCAqcXVhbCwKIAkJCQkJIEFnZ1N0cmF0ZWd5IGFnZ3N0cmF0ZWd5LCBBZ2dT cGxpdCBhZ2dzcGxpdCwKIAkJCQkJIGludCBudW1Hcm91cENvbHMsIEF0dHJOdW1iZXIgKmdycENv bElkeCwgT2lkICpncnBPcGVyYXRvcnMsIE9pZCAqZ3JwQ29sbGF0aW9ucywKLQkJCQkJIExpc3Qg Kmdyb3VwaW5nU2V0cywgTGlzdCAqY2hhaW4sCi0JCQkJCSBkb3VibGUgZE51bUdyb3VwcywgUGxh biAqbGVmdHRyZWUpOworCQkJCQkgTGlzdCAqZ3JvdXBpbmdTZXRzLCBMaXN0ICpjaGFpbiwgZG91 YmxlIGROdW1Hcm91cHMsCisJCQkJCSBpbnQzMiB0cmFuc2l0aW9uU3BhY2UsIFBsYW4gKmxlZnR0 cmVlKTsKIGV4dGVybiBMaW1pdCAqbWFrZV9saW1pdChQbGFuICpsZWZ0dHJlZSwgTm9kZSAqbGlt aXRPZmZzZXQsIE5vZGUgKmxpbWl0Q291bnQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvbG9ndGFwZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvbG9ndGFwZS5oCmluZGV4IDY5 NWQyYzAwZWU0Li4zNDY3YjUyYzdmNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvbG9n dGFwZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2xvZ3RhcGUuaApAQCAtNjcsNiArNjcsOCBA QCBleHRlcm4gdm9pZCBMb2dpY2FsVGFwZVJld2luZEZvclJlYWQoTG9naWNhbFRhcGVTZXQgKmx0 cywgaW50IHRhcGVudW0sCiBleHRlcm4gdm9pZCBMb2dpY2FsVGFwZVJld2luZEZvcldyaXRlKExv Z2ljYWxUYXBlU2V0ICpsdHMsIGludCB0YXBlbnVtKTsKIGV4dGVybiB2b2lkIExvZ2ljYWxUYXBl RnJlZXplKExvZ2ljYWxUYXBlU2V0ICpsdHMsIGludCB0YXBlbnVtLAogCQkJCQkJCSAgVGFwZVNo YXJlICpzaGFyZSk7CitleHRlcm4gTG9naWNhbFRhcGVTZXQgKkxvZ2ljYWxUYXBlU2V0RXh0ZW5k KExvZ2ljYWxUYXBlU2V0ICpsdHMsCisJCQkJCQkJCQkJCWludCBudG9leHRlbmQpOwogZXh0ZXJu IHNpemVfdCBMb2dpY2FsVGFwZUJhY2tzcGFjZShMb2dpY2FsVGFwZVNldCAqbHRzLCBpbnQgdGFw ZW51bSwKIAkJCQkJCQkJICAgc2l6ZV90IHNpemUpOwogZXh0ZXJuIHZvaWQgTG9naWNhbFRhcGVT ZWVrKExvZ2ljYWxUYXBlU2V0ICpsdHMsIGludCB0YXBlbnVtLApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvYWdncmVnYXRlcy5vdXQKaW5kZXggZjQ1N2I1YjE1MGYuLjdlZWVhYWE1ZTRhIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKQEAgLTIzNTcsMyArMjM1Nywx MjQgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKQogICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IG9uZWsKICg4IHJvd3MpCiAKKy0tCistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFucyB1 c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlvbi4gRm9yY2Ug c3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4KKy0tCitzZXQg d29ya19tZW09JzY0a0InOworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZy4KK3NldCBl bmFibGVfaGFzaGFnZyA9IGZhbHNlOworc2V0IGppdF9hYm92ZV9jb3N0ID0gMDsKK2V4cGxhaW4g KGNvc3RzIG9mZikKK3NlbGVjdCBnJTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51bWVyaWMpIGFzIGMy LCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5OTkpIGcKKyAg Z3JvdXAgYnkgZyUxMDAwMDA7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6ICgoZyAlIDEwMDAwMCkpCisgICAt PiAgU29ydAorICAgICAgICAgU29ydCBLZXk6ICgoZyAlIDEwMDAwMCkpCisgICAgICAgICAtPiAg RnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworKDUgcm93cykKKworY3JlYXRlIHRh YmxlIGFnZ19ncm91cF8xIGFzCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShnOjpudW1lcmlj KSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OTk5 KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworY3JlYXRlIHRhYmxlIGFnZ19ncm91cF8yIGFzCitz ZWxlY3QgKiBmcm9tCisgICh2YWx1ZXMgKDEwMCksICgzMDApLCAoNTAwKSkgYXMgcihhKSwKKyAg bGF0ZXJhbCAoCisgICAgc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLAorICAgICAgICAgICBh cnJheV9hZ2coZzo6bnVtZXJpYykgYXMgYzIsCisJICAgY291bnQoKikgYXMgYzMKKyAgICBmcm9t IGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgICAgd2hlcmUgZyA8IHIuYQorICAgIGdyb3Vw IGJ5IGcvMikgYXMgczsKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworY3JlYXRlIHRh YmxlIGFnZ19ncm91cF8zIGFzCitzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIHN1bSg3Ojpp bnQ0KSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5 OSkgZworICBncm91cCBieSBnLzI7CitjcmVhdGUgdGFibGUgYWdnX2dyb3VwXzQgYXMKK3NlbGVj dCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgYXJyYXlfYWdnKGc6Om51bWVyaWMpIGFzIGMyLCBjb3Vu dCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgIGdyb3VwIGJ5 IGcvMjsKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24KK3NldCBlbmFi bGVfaGFzaGFnZyA9IHRydWU7CitzZXQgZW5hYmxlX3NvcnQgPSBmYWxzZTsKK3NldCBqaXRfYWJv dmVfY29zdCA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEs IHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBIYXNoQWdncmVnYXRlCisgICBHcm91cCBLZXk6IChnICUgMTAwMDAw KQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKygzIHJvd3MpCisK K2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF8xIGFzCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShn OjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworY3JlYXRlIHRhYmxlIGFnZ19oYXNo XzIgYXMKK3NlbGVjdCAqIGZyb20KKyAgKHZhbHVlcyAoMTAwKSwgKDMwMCksICg1MDApKSBhcyBy KGEpLAorICBsYXRlcmFsICgKKyAgICBzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsCisgICAg ICAgICAgIGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBjMiwKKwkgICBjb3VudCgqKSBhcyBjMwor ICAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTkpIGcKKyAgICB3aGVyZSBnIDwgci5hCisg ICAgZ3JvdXAgYnkgZy8yKSBhcyBzOworc2V0IGppdF9hYm92ZV9jb3N0IHRvIGRlZmF1bHQ7Citj cmVhdGUgdGFibGUgYWdnX2hhc2hfMyBhcworc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLCBz dW0oNzo6aW50NCkgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDAsIDE5OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOworY3JlYXRlIHRhYmxlIGFnZ19oYXNoXzQgYXMK K3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgYXJyYXlfYWdnKGc6Om51bWVyaWMpIGFzIGMy LCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgIGdy b3VwIGJ5IGcvMjsKK3NldCBlbmFibGVfc29ydCA9IHRydWU7CitzZXQgd29ya19tZW0gdG8gZGVm YXVsdDsKKy0tIENvbXBhcmUgZ3JvdXAgYWdncmVnYXRpb24gcmVzdWx0cyB0byBoYXNoIGFnZ3Jl Z2F0aW9uIHJlc3VsdHMKKyhzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzEgZXhjZXB0IHNlbGVjdCAq IGZyb20gYWdnX2dyb3VwXzEpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gYWdnX2dyb3Vw XzEgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMSk7CisgYzEgfCBjMiB8IGMzIAorLS0t LSstLS0tKy0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzIgZXhjZXB0 IHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzIpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20g YWdnX2dyb3VwXzIgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMik7CisgYSB8IGMxIHwg YzIgfCBjMyAKKy0tLSstLS0tKy0tLS0rLS0tLQorKDAgcm93cykKKworKHNlbGVjdCAqIGZyb20g YWdnX2hhc2hfMyBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMykKKyAgdW5pb24gYWxs Cisoc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMyBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFz aF8zKTsKKyBjMSB8IGMyIHwgYzMgCistLS0tKy0tLS0rLS0tLQorKDAgcm93cykKKworKHNlbGVj dCAqIGZyb20gYWdnX2hhc2hfNCBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfNCkKKyAg dW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfNCBleGNlcHQgc2VsZWN0ICogZnJv bSBhZ2dfaGFzaF80KTsKKyBjMSB8IGMyIHwgYzMgCistLS0tKy0tLS0rLS0tLQorKDAgcm93cykK KworZHJvcCB0YWJsZSBhZ2dfZ3JvdXBfMTsKK2Ryb3AgdGFibGUgYWdnX2dyb3VwXzI7Citkcm9w IHRhYmxlIGFnZ19ncm91cF8zOworZHJvcCB0YWJsZSBhZ2dfZ3JvdXBfNDsKK2Ryb3AgdGFibGUg YWdnX2hhc2hfMTsKK2Ryb3AgdGFibGUgYWdnX2hhc2hfMjsKK2Ryb3AgdGFibGUgYWdnX2hhc2hf MzsKK2Ryb3AgdGFibGUgYWdnX2hhc2hfNDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZ3JvdXBpbmdzZXRzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3Jv dXBpbmdzZXRzLm91dAppbmRleCBjMWY4MDJjODhhNy4uNzY3ZjYwYTk2YzcgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JvdXBpbmdzZXRzLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2dyb3VwaW5nc2V0cy5vdXQKQEAgLTE2MzMsNCArMTYzMywxMjcg QEAgc2VsZWN0IHZ8fCdhJywgY2FzZSB3aGVuIGdyb3VwaW5nKHZ8fCdhJykgPSAxIHRoZW4gMSBl bHNlIDAgZW5kLCBjb3VudCgqKQogICAgICAgICAgIHwgICAgMSB8ICAgICAyCiAoNCByb3dzKQog CistLQorLS0gQ29tcGFyZSByZXN1bHRzIGJldHdlZW4gcGxhbnMgdXNpbmcgc29ydGluZyBhbmQg cGxhbnMgdXNpbmcgaGFzaAorLS0gYWdncmVnYXRpb24uIEZvcmNlIHNwaWxsaW5nIGluIGJvdGgg Y2FzZXMgYnkgc2V0dGluZyB3b3JrX21lbSBsb3cuCistLQorU0VUIHdvcmtfbWVtPSc2NGtCJzsK Ky0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcuCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSBm YWxzZTsKK3NldCBqaXRfYWJvdmVfY29zdCA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRl eHQpIGZyb20KKyAgKHNlbGVjdCBnJTEwMDAgYXMgZzEwMDAsIGclMTAwIGFzIGcxMDAsIGclMTAg YXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5OSkgZykgcworZ3JvdXAg YnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0 ZQorICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwMDApKSwgKChnLmcgJSAxMDApKSwgKChnLmcgJSAx MCkpCisgICBHcm91cCBLZXk6ICgoZy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpCisgICBHcm91 cCBLZXk6ICgoZy5nICUgMTAwMCkpCisgICBHcm91cCBLZXk6ICgpCisgICBTb3J0IEtleTogKChn LmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisgICAgIEdyb3VwIEtleTogKChnLmcgJSAxMDApKSwg KChnLmcgJSAxMCkpCisgICAgIEdyb3VwIEtleTogKChnLmcgJSAxMDApKQorICAgU29ydCBLZXk6 ICgoZy5nICUgMTApKSwgKChnLmcgJSAxMDAwKSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEw KSksICgoZy5nICUgMTAwMCkpCisgICAgIEdyb3VwIEtleTogKChnLmcgJSAxMCkpCisgICAtPiAg U29ydAorICAgICAgICAgU29ydCBLZXk6ICgoZy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpLCAo KGcuZyAlIDEwKSkKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3Nlcmll cyBnCisoMTQgcm93cykKKworY3JlYXRlIHRhYmxlIGdzX2dyb3VwXzEgYXMKK3NlbGVjdCBnMTAw MCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJv bQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAs IGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJl IChnMTAwMCxnMTAwLGcxMCk7CitzZXQgaml0X2Fib3ZlX2Nvc3QgdG8gZGVmYXVsdDsKK2NyZWF0 ZSB0YWJsZSBnc19ncm91cF8yIGFzCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51 bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnLzIwIGFzIGcx MDAwLCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3Nl cmllcygwLDE5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CitjcmVh dGUgdGFibGUgZ3NfZ3JvdXBfMyBhcworc2VsZWN0IGcxMDAsIGcxMCwgYXJyYXlfYWdnKGcpIGFz IGEsIGNvdW50KCopIGFzIGMsIG1heChnOjp0ZXh0KSBhcyBtIGZyb20KKyAgKHNlbGVjdCBnLzIw MCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5 OTk5KSBnKSBzCitncm91cCBieSBncm91cGluZyBzZXRzIChnMTAwLGcxMCk7CistLSBQcm9kdWNl IHJlc3VsdHMgd2l0aCBoYXNoIGFnZ3JlZ2F0aW9uLgorc2V0IGVuYWJsZV9oYXNoYWdnID0gdHJ1 ZTsKK3NldCBlbmFibGVfc29ydCA9IGZhbHNlOworc2V0IHdvcmtfbWVtPSc2NGtCJzsKK3NldCBq aXRfYWJvdmVfY29zdCA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZzEwMDAsIGcx MDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAg KHNlbGVjdCBnJTEwMDAgYXMgZzEwMDAsIGclMTAwIGFzIGcxMDAsIGclMTAgYXMgZzEwLCBnCisg ICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEw MDAsZzEwMCxnMTApOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAg S2V5OiAoKGcuZyAlIDEwMDApKSwgKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisgICBHcm91 cCBLZXk6ICgoZy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpCisgICBHcm91cCBLZXk6ICgoZy5n ICUgMTAwMCkpCisgICBHcm91cCBLZXk6ICgpCisgICBTb3J0IEtleTogKChnLmcgJSAxMDApKSwg KChnLmcgJSAxMCkpCisgICAgIEdyb3VwIEtleTogKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkp CisgICAgIEdyb3VwIEtleTogKChnLmcgJSAxMDApKQorICAgU29ydCBLZXk6ICgoZy5nICUgMTAp KSwgKChnLmcgJSAxMDAwKSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwKSksICgoZy5nICUg MTAwMCkpCisgICAgIEdyb3VwIEtleTogKChnLmcgJSAxMCkpCisgICAtPiAgU29ydAorICAgICAg ICAgU29ydCBLZXk6ICgoZy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkK KyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisoMTQgcm93 cykKKworY3JlYXRlIHRhYmxlIGdzX2hhc2hfMSBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAs IHN1bShnOjpudW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3Qg ZyUxMDAwIGFzIGcxMDAwLCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAs ZzEwKTsKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworY3JlYXRlIHRhYmxlIGdzX2hh c2hfMiBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQo KiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZy8yMCBhcyBnMTAwMCwgZy8yMDAgYXMg ZzEwMCwgZy8yMDAwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OSkg ZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOworY3JlYXRlIHRhYmxlIGdzX2hh c2hfMyBhcworc2VsZWN0IGcxMDAsIGcxMCwgYXJyYXlfYWdnKGcpIGFzIGEsIGNvdW50KCopIGFz IGMsIG1heChnOjp0ZXh0KSBhcyBtIGZyb20KKyAgKHNlbGVjdCBnLzIwMCBhcyBnMTAwLCBnLzIw MDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91 cCBieSBncm91cGluZyBzZXRzIChnMTAwLGcxMCk7CitzZXQgZW5hYmxlX3NvcnQgPSB0cnVlOwor c2V0IHdvcmtfbWVtIHRvIGRlZmF1bHQ7CistLSBDb21wYXJlIHJlc3VsdHMKKyhzZWxlY3QgKiBm cm9tIGdzX2hhc2hfMSBleGNlcHQgc2VsZWN0ICogZnJvbSBnc19ncm91cF8xKQorICB1bmlvbiBh bGwKKyhzZWxlY3QgKiBmcm9tIGdzX2dyb3VwXzEgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfaGFz aF8xKTsKKyBnMTAwMCB8IGcxMDAgfCBnMTAgfCBzdW0gfCBjb3VudCB8IG1heCAKKy0tLS0tLS0r LS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgKiBm cm9tIGdzX2hhc2hfMiBleGNlcHQgc2VsZWN0ICogZnJvbSBnc19ncm91cF8yKQorICB1bmlvbiBh bGwKKyhzZWxlY3QgKiBmcm9tIGdzX2dyb3VwXzIgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfaGFz aF8yKTsKKyBnMTAwMCB8IGcxMDAgfCBnMTAgfCBzdW0gfCBjb3VudCB8IG1heCAKKy0tLS0tLS0r LS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgZzEw MCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9tIGdzX2hhc2hfMyBleGNlcHQKKyAgc2VsZWN0IGcxMDAs ZzEwLHVubmVzdChhKSxjLG0gZnJvbSBnc19ncm91cF8zKQorICAgIHVuaW9uIGFsbAorKHNlbGVj dCBnMTAwLGcxMCx1bm5lc3QoYSksYyxtIGZyb20gZ3NfZ3JvdXBfMyBleGNlcHQKKyAgc2VsZWN0 IGcxMDAsZzEwLHVubmVzdChhKSxjLG0gZnJvbSBnc19oYXNoXzMpOworIGcxMDAgfCBnMTAgfCB1 bm5lc3QgfCBjIHwgbSAKKy0tLS0tLSstLS0tLSstLS0tLS0tLSstLS0rLS0tCisoMCByb3dzKQor Citkcm9wIHRhYmxlIGdzX2dyb3VwXzE7Citkcm9wIHRhYmxlIGdzX2dyb3VwXzI7Citkcm9wIHRh YmxlIGdzX2dyb3VwXzM7Citkcm9wIHRhYmxlIGdzX2hhc2hfMTsKK2Ryb3AgdGFibGUgZ3NfaGFz aF8yOworZHJvcCB0YWJsZSBnc19oYXNoXzM7CiAtLSBlbmQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dAppbmRleCBmMzY5NmM2ZDFkZS4uMTFjNmY1MGZi ZmEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9kaXN0aW5jdC5vdXQK QEAgLTE0OCw2ICsxNDgsNjggQEAgU0VMRUNUIGNvdW50KCopIEZST00KICAgICAgNAogKDEgcm93 KQogCistLQorLS0gQ29tcGFyZSByZXN1bHRzIGJldHdlZW4gcGxhbnMgdXNpbmcgc29ydGluZyBh bmQgcGxhbnMgdXNpbmcgaGFzaAorLS0gYWdncmVnYXRpb24uIEZvcmNlIHNwaWxsaW5nIGluIGJv dGggY2FzZXMgYnkgc2V0dGluZyB3b3JrX21lbSBsb3cuCistLQorU0VUIHdvcmtfbWVtPSc2NGtC JzsKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcuCitTRVQgZW5hYmxlX2hhc2hhZ2c9 RkFMU0U7CitTRVQgaml0X2Fib3ZlX2Nvc3Q9MDsKK0VYUExBSU4gKGNvc3RzIG9mZikKK1NFTEVD VCBESVNUSU5DVCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVbmlxdWUKKyAgIC0+ICBTb3J0 CisgICAgICAgICBTb3J0IEtleTogKChnICUgMTAwMCkpCisgICAgICAgICAtPiAgRnVuY3Rpb24g U2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworKDQgcm93cykKKworQ1JFQVRFIFRBQkxFIGRpc3Rp bmN0X2dyb3VwXzEgQVMKK1NFTEVDVCBESVNUSU5DVCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMCw5OTk5KSBnOworU0VUIGppdF9hYm92ZV9jb3N0IFRPIERFRkFVTFQ7CitDUkVBVEUgVEFC TEUgZGlzdGluY3RfZ3JvdXBfMiBBUworU0VMRUNUIERJU1RJTkNUIChnJTEwMDApOjp0ZXh0IEZS T00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKK1NFVCBlbmFibGVfaGFzaGFnZz1UUlVFOwor LS0gUHJvZHVjZSByZXN1bHRzIHdpdGggaGFzaCBhZ2dyZWdhdGlvbi4KK1NFVCBlbmFibGVfc29y dD1GQUxTRTsKK1NFVCBqaXRfYWJvdmVfY29zdD0wOworRVhQTEFJTiAoY29zdHMgb2ZmKQorU0VM RUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CisgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTog KGcgJSAxMDAwKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKygz IHJvd3MpCisKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9oYXNoXzEgQVMKK1NFTEVDVCBESVNUSU5D VCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworU0VUIGppdF9hYm92ZV9j b3N0IFRPIERFRkFVTFQ7CitDUkVBVEUgVEFCTEUgZGlzdGluY3RfaGFzaF8yIEFTCitTRUxFQ1Qg RElTVElOQ1QgKGclMTAwMCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOwor U0VUIGVuYWJsZV9zb3J0PVRSVUU7CitTRVQgd29ya19tZW0gVE8gREVGQVVMVDsKKy0tIENvbXBh cmUgcmVzdWx0cworKFNFTEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xIEVYQ0VQVCBTRUxFQ1Qg KiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEpCisgIFVOSU9OIEFMTAorKFNFTEVDVCAqIEZST00gZGlz dGluY3RfZ3JvdXBfMSBFWENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNoXzEpOworID9j b2x1bW4/IAorLS0tLS0tLS0tLQorKDAgcm93cykKKworKFNFTEVDVCAqIEZST00gZGlzdGluY3Rf aGFzaF8xIEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEpCisgIFVOSU9OIEFM TAorKFNFTEVDVCAqIEZST00gZGlzdGluY3RfZ3JvdXBfMSBFWENFUFQgU0VMRUNUICogRlJPTSBk aXN0aW5jdF9oYXNoXzEpOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorKDAgcm93cykKKworRFJP UCBUQUJMRSBkaXN0aW5jdF9oYXNoXzE7CitEUk9QIFRBQkxFIGRpc3RpbmN0X2hhc2hfMjsKK0RS T1AgVEFCTEUgZGlzdGluY3RfZ3JvdXBfMTsKK0RST1AgVEFCTEUgZGlzdGluY3RfZ3JvdXBfMjsK IC0tCiAtLSBBbHNvLCBzb21lIHRlc3RzIG9mIElTIERJU1RJTkNUIEZST00sIHdoaWNoIGRvZXNu J3QgcXVpdGUgZGVzZXJ2ZSBpdHMKIC0tIHZlcnkgb3duIHJlZ3Jlc3Npb24gZmlsZS4KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggYTFjOTBlYjkwNTcuLmM0MGJmNmMx NmViIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtNzUsNiArNzUs NyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlr ZSAnZW5hYmxlJSc7CiAgZW5hYmxlX2JpdG1hcHNjYW4gICAgICAgICAgICAgIHwgb24KICBlbmFi bGVfZ2F0aGVybWVyZ2UgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9oYXNoYWdnICAgICAgICAg ICAgICAgICB8IG9uCisgZW5hYmxlX2hhc2hhZ2dfc3BpbGwgICAgICAgICAgIHwgb24KICBlbmFi bGVfaGFzaGpvaW4gICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleG9ubHlzY2FuICAg ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAgICAgIHwgb24KQEAgLTg5 LDcgKzkwLDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBu YW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9u CiAgZW5hYmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAg ICAgICAgICAgICAgICAgfCBvbgotKDE3IHJvd3MpCisoMTggcm93cykKIAogLS0gVGVzdCB0aGF0 IHRoZSBwZ190aW1lem9uZV9uYW1lcyBhbmQgcGdfdGltZXpvbmVfYWJicmV2cyB2aWV3cyBhcmUK IC0tIG1vcmUtb3ItbGVzcyB3b3JraW5nLiAgV2UgY2FuJ3QgdGVzdCB0aGVpciBjb250ZW50cyBp biBhbnkgZ3JlYXQgZGV0YWlsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dy ZWdhdGVzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCmluZGV4IDNl NTkzZjJkNjE1Li5hNGQ0NzZjNGJiMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv YWdncmVnYXRlcy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwK QEAgLTEwMzIsMyArMTAzMiwxMTkgQEAgc2VsZWN0IHZ8fCdhJywgY2FzZSB3aGVuIHZ8fCdhJyA9 ICdhYScgdGhlbiAxIGVsc2UgMCBlbmQsIGNvdW50KCopCiBleHBsYWluIChjb3N0cyBvZmYpCiAg IHNlbGVjdCAxIGZyb20gdGVuazEKICAgIHdoZXJlIChodW5kcmVkLCB0aG91c2FuZCkgaW4gKHNl bGVjdCB0d290aG91c2FuZCwgdHdvdGhvdXNhbmQgZnJvbSBvbmVrKTsKKworLS0KKy0tIENvbXBh cmUgcmVzdWx0cyBiZXR3ZWVuIHBsYW5zIHVzaW5nIHNvcnRpbmcgYW5kIHBsYW5zIHVzaW5nIGhh c2gKKy0tIGFnZ3JlZ2F0aW9uLiBGb3JjZSBzcGlsbGluZyBpbiBib3RoIGNhc2VzIGJ5IHNldHRp bmcgd29ya19tZW0gbG93LgorLS0KKworc2V0IHdvcmtfbWVtPSc2NGtCJzsKKworLS0gUHJvZHVj ZSByZXN1bHRzIHdpdGggc29ydGluZy4KKworc2V0IGVuYWJsZV9oYXNoYWdnID0gZmFsc2U7CisK K3NldCBqaXRfYWJvdmVfY29zdCA9IDA7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBn JTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51bWVyaWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBm cm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5OTkpIGcKKyAgZ3JvdXAgYnkgZyUxMDAwMDA7CisK K2NyZWF0ZSB0YWJsZSBhZ2dfZ3JvdXBfMSBhcworc2VsZWN0IGclMTAwMDAwIGFzIGMxLCBzdW0o Zzo6bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDAsIDE5OTk5OSkgZworICBncm91cCBieSBnJTEwMDAwMDsKKworY3JlYXRlIHRhYmxlIGFnZ19n cm91cF8yIGFzCitzZWxlY3QgKiBmcm9tCisgICh2YWx1ZXMgKDEwMCksICgzMDApLCAoNTAwKSkg YXMgcihhKSwKKyAgbGF0ZXJhbCAoCisgICAgc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLAor ICAgICAgICAgICBhcnJheV9hZ2coZzo6bnVtZXJpYykgYXMgYzIsCisJICAgY291bnQoKikgYXMg YzMKKyAgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgICAgd2hlcmUgZyA8IHIu YQorICAgIGdyb3VwIGJ5IGcvMikgYXMgczsKKworc2V0IGppdF9hYm92ZV9jb3N0IHRvIGRlZmF1 bHQ7CisKK2NyZWF0ZSB0YWJsZSBhZ2dfZ3JvdXBfMyBhcworc2VsZWN0IChnLzIpOjpudW1lcmlj IGFzIGMxLCBzdW0oNzo6aW50NCkgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJh dGVfc2VyaWVzKDAsIDE5OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOworCitjcmVhdGUgdGFibGUgYWdn X2dyb3VwXzQgYXMKK3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgYXJyYXlfYWdnKGc6Om51 bWVyaWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAx OTk5KSBnCisgIGdyb3VwIGJ5IGcvMjsKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggaGFzaCBh Z2dyZWdhdGlvbgorCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSB0cnVlOworc2V0IGVuYWJsZV9zb3J0 ID0gZmFsc2U7CisKK3NldCBqaXRfYWJvdmVfY29zdCA9IDA7CisKK2V4cGxhaW4gKGNvc3RzIG9m ZikKK3NlbGVjdCBnJTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51bWVyaWMpIGFzIGMyLCBjb3VudCgq KSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5OTkpIGcKKyAgZ3JvdXAgYnkg ZyUxMDAwMDA7CisKK2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF8xIGFzCitzZWxlY3QgZyUxMDAwMDAg YXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworCitjcmVhdGUg dGFibGUgYWdnX2hhc2hfMiBhcworc2VsZWN0ICogZnJvbQorICAodmFsdWVzICgxMDApLCAoMzAw KSwgKDUwMCkpIGFzIHIoYSksCisgIGxhdGVyYWwgKAorICAgIHNlbGVjdCAoZy8yKTo6bnVtZXJp YyBhcyBjMSwKKyAgICAgICAgICAgYXJyYXlfYWdnKGc6Om51bWVyaWMpIGFzIGMyLAorCSAgIGNv dW50KCopIGFzIGMzCisgICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICAgIHdo ZXJlIGcgPCByLmEKKyAgICBncm91cCBieSBnLzIpIGFzIHM7CisKK3NldCBqaXRfYWJvdmVfY29z dCB0byBkZWZhdWx0OworCitjcmVhdGUgdGFibGUgYWdnX2hhc2hfMyBhcworc2VsZWN0IChnLzIp OjpudW1lcmljIGFzIGMxLCBzdW0oNzo6aW50NCkgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZy b20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOworCitjcmVhdGUg dGFibGUgYWdnX2hhc2hfNCBhcworc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLCBhcnJheV9h Z2coZzo6bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2Vy aWVzKDAsIDE5OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOworCitzZXQgZW5hYmxlX3NvcnQgPSB0cnVl Oworc2V0IHdvcmtfbWVtIHRvIGRlZmF1bHQ7CisKKy0tIENvbXBhcmUgZ3JvdXAgYWdncmVnYXRp b24gcmVzdWx0cyB0byBoYXNoIGFnZ3JlZ2F0aW9uIHJlc3VsdHMKKworKHNlbGVjdCAqIGZyb20g YWdnX2hhc2hfMSBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMSkKKyAgdW5pb24gYWxs Cisoc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMSBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFz aF8xKTsKKworKHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMiBleGNlcHQgc2VsZWN0ICogZnJvbSBh Z2dfZ3JvdXBfMikKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMiBleGNl cHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8yKTsKKworKHNlbGVjdCAqIGZyb20gYWdnX2hhc2hf MyBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMykKKyAgdW5pb24gYWxsCisoc2VsZWN0 ICogZnJvbSBhZ2dfZ3JvdXBfMyBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8zKTsKKwor KHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfNCBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBf NCkKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfNCBleGNlcHQgc2VsZWN0 ICogZnJvbSBhZ2dfaGFzaF80KTsKKworZHJvcCB0YWJsZSBhZ2dfZ3JvdXBfMTsKK2Ryb3AgdGFi bGUgYWdnX2dyb3VwXzI7Citkcm9wIHRhYmxlIGFnZ19ncm91cF8zOworZHJvcCB0YWJsZSBhZ2df Z3JvdXBfNDsKK2Ryb3AgdGFibGUgYWdnX2hhc2hfMTsKK2Ryb3AgdGFibGUgYWdnX2hhc2hfMjsK K2Ryb3AgdGFibGUgYWdnX2hhc2hfMzsKK2Ryb3AgdGFibGUgYWdnX2hhc2hfNDsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyb3VwaW5nc2V0cy5zcWwgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9ncm91cGluZ3NldHMuc3FsCmluZGV4IDk1YWMzZmI1MmY2Li5iZjhiY2U2ZWQzMSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JvdXBpbmdzZXRzLnNxbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9ncm91cGluZ3NldHMuc3FsCkBAIC00NDEsNCArNDQxLDEwMyBA QCBzZWxlY3Qgdnx8J2EnLCBjYXNlIHdoZW4gZ3JvdXBpbmcodnx8J2EnKSA9IDEgdGhlbiAxIGVs c2UgMCBlbmQsIGNvdW50KCopCiAgIGZyb20gdW5uZXN0KGFycmF5WzEsMV0sIGFycmF5WydhJywn YiddKSB1KGksdikKICBncm91cCBieSByb2xsdXAoaSwgdnx8J2EnKSBvcmRlciBieSAxLDM7CiAK Ky0tCistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBw bGFucyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBj YXNlcyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4KKy0tCisKK1NFVCB3b3JrX21lbT0nNjRrQic7 CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcuCisKK3NldCBlbmFibGVfaGFzaGFn ZyA9IGZhbHNlOworCitzZXQgaml0X2Fib3ZlX2Nvc3QgPSAwOworCitleHBsYWluIChjb3N0cyBv ZmYpCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwg bWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnJTEwMDAgYXMgZzEwMDAsIGclMTAwIGFzIGcx MDAsIGclMTAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5OSkgZykg cworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOworCitjcmVhdGUgdGFibGUgZ3NfZ3Jv dXBfMSBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQo KiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZyUxMDAwIGFzIGcxMDAwLCBnJTEwMCBh cyBnMTAwLCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OTkp IGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKKworc2V0IGppdF9hYm92ZV9j b3N0IHRvIGRlZmF1bHQ7CisKK2NyZWF0ZSB0YWJsZSBnc19ncm91cF8yIGFzCitzZWxlY3QgZzEw MDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZy b20KKyAgKHNlbGVjdCBnLzIwIGFzIGcxMDAwLCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEw LCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91cCBieSBjdWJl IChnMTAwMCxnMTAwLGcxMCk7CisKK2NyZWF0ZSB0YWJsZSBnc19ncm91cF8zIGFzCitzZWxlY3Qg ZzEwMCwgZzEwLCBhcnJheV9hZ2coZykgYXMgYSwgY291bnQoKikgYXMgYywgbWF4KGc6OnRleHQp IGFzIG0gZnJvbQorICAoc2VsZWN0IGcvMjAwIGFzIGcxMDAsIGcvMjAwMCBhcyBnMTAsIGcKKyAg IGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGdyb3VwaW5nIHNl dHMgKGcxMDAsZzEwKTsKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggaGFzaCBhZ2dyZWdhdGlv bi4KKworc2V0IGVuYWJsZV9oYXNoYWdnID0gdHJ1ZTsKK3NldCBlbmFibGVfc29ydCA9IGZhbHNl Oworc2V0IHdvcmtfbWVtPSc2NGtCJzsKKworc2V0IGppdF9hYm92ZV9jb3N0ID0gMDsKKworZXhw bGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1lcmlj KSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZyUxMDAwIGFzIGcxMDAw LCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKKworY3JlYXRl IHRhYmxlIGdzX2hhc2hfMSBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1l cmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZyUxMDAwIGFzIGcx MDAwLCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJp ZXMoMCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKKworc2V0 IGppdF9hYm92ZV9jb3N0IHRvIGRlZmF1bHQ7CisKK2NyZWF0ZSB0YWJsZSBnc19oYXNoXzIgYXMK K3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgo Zzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGcvMjAgYXMgZzEwMDAsIGcvMjAwIGFzIGcxMDAsIGcv MjAwMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTkpIGcpIHMKK2dy b3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKKworY3JlYXRlIHRhYmxlIGdzX2hhc2hfMyBh cworc2VsZWN0IGcxMDAsIGcxMCwgYXJyYXlfYWdnKGcpIGFzIGEsIGNvdW50KCopIGFzIGMsIG1h eChnOjp0ZXh0KSBhcyBtIGZyb20KKyAgKHNlbGVjdCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMg ZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91cCBieSBn cm91cGluZyBzZXRzIChnMTAwLGcxMCk7CisKK3NldCBlbmFibGVfc29ydCA9IHRydWU7CitzZXQg d29ya19tZW0gdG8gZGVmYXVsdDsKKworLS0gQ29tcGFyZSByZXN1bHRzCisKKyhzZWxlY3QgKiBm cm9tIGdzX2hhc2hfMSBleGNlcHQgc2VsZWN0ICogZnJvbSBnc19ncm91cF8xKQorICB1bmlvbiBh bGwKKyhzZWxlY3QgKiBmcm9tIGdzX2dyb3VwXzEgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfaGFz aF8xKTsKKworKHNlbGVjdCAqIGZyb20gZ3NfaGFzaF8yIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGdz X2dyb3VwXzIpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gZ3NfZ3JvdXBfMiBleGNlcHQg c2VsZWN0ICogZnJvbSBnc19oYXNoXzIpOworCisoc2VsZWN0IGcxMDAsZzEwLHVubmVzdChhKSxj LG0gZnJvbSBnc19oYXNoXzMgZXhjZXB0CisgIHNlbGVjdCBnMTAwLGcxMCx1bm5lc3QoYSksYyxt IGZyb20gZ3NfZ3JvdXBfMykKKyAgICB1bmlvbiBhbGwKKyhzZWxlY3QgZzEwMCxnMTAsdW5uZXN0 KGEpLGMsbSBmcm9tIGdzX2dyb3VwXzMgZXhjZXB0CisgIHNlbGVjdCBnMTAwLGcxMCx1bm5lc3Qo YSksYyxtIGZyb20gZ3NfaGFzaF8zKTsKKworZHJvcCB0YWJsZSBnc19ncm91cF8xOworZHJvcCB0 YWJsZSBnc19ncm91cF8yOworZHJvcCB0YWJsZSBnc19ncm91cF8zOworZHJvcCB0YWJsZSBnc19o YXNoXzE7Citkcm9wIHRhYmxlIGdzX2hhc2hfMjsKK2Ryb3AgdGFibGUgZ3NfaGFzaF8zOworCiAt LSBlbmQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9kaXN0aW5jdC5z cWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfZGlzdGluY3Quc3FsCmluZGV4IGE2MDVl ODY0NDllLi4zMzEwMjc0NGViZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2Vs ZWN0X2Rpc3RpbmN0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfZGlzdGlu Y3Quc3FsCkBAIC00NSw2ICs0NSw2OCBAQCBTRUxFQ1QgY291bnQoKikgRlJPTQogU0VMRUNUIGNv dW50KCopIEZST00KICAgKFNFTEVDVCBESVNUSU5DVCB0d28sIGZvdXIsIHR3byBGUk9NIHRlbmsx KSBzczsKIAorLS0KKy0tIENvbXBhcmUgcmVzdWx0cyBiZXR3ZWVuIHBsYW5zIHVzaW5nIHNvcnRp bmcgYW5kIHBsYW5zIHVzaW5nIGhhc2gKKy0tIGFnZ3JlZ2F0aW9uLiBGb3JjZSBzcGlsbGluZyBp biBib3RoIGNhc2VzIGJ5IHNldHRpbmcgd29ya19tZW0gbG93LgorLS0KKworU0VUIHdvcmtfbWVt PSc2NGtCJzsKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZy4KKworU0VUIGVuYWJs ZV9oYXNoYWdnPUZBTFNFOworCitTRVQgaml0X2Fib3ZlX2Nvc3Q9MDsKKworRVhQTEFJTiAoY29z dHMgb2ZmKQorU0VMRUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5 OTkpIGc7CisKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9ncm91cF8xIEFTCitTRUxFQ1QgRElTVElO Q1QgZyUxMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKworU0VUIGppdF9hYm92 ZV9jb3N0IFRPIERFRkFVTFQ7CisKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9ncm91cF8yIEFTCitT RUxFQ1QgRElTVElOQ1QgKGclMTAwMCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5 KSBnOworCitTRVQgZW5hYmxlX2hhc2hhZ2c9VFJVRTsKKworLS0gUHJvZHVjZSByZXN1bHRzIHdp dGggaGFzaCBhZ2dyZWdhdGlvbi4KKworU0VUIGVuYWJsZV9zb3J0PUZBTFNFOworCitTRVQgaml0 X2Fib3ZlX2Nvc3Q9MDsKKworRVhQTEFJTiAoY29zdHMgb2ZmKQorU0VMRUNUIERJU1RJTkNUIGcl MTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CisKK0NSRUFURSBUQUJMRSBkaXN0 aW5jdF9oYXNoXzEgQVMKK1NFTEVDVCBESVNUSU5DVCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMCw5OTk5KSBnOworCitTRVQgaml0X2Fib3ZlX2Nvc3QgVE8gREVGQVVMVDsKKworQ1JFQVRF IFRBQkxFIGRpc3RpbmN0X2hhc2hfMiBBUworU0VMRUNUIERJU1RJTkNUIChnJTEwMDApOjp0ZXh0 IEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKworU0VUIGVuYWJsZV9zb3J0PVRSVUU7 CisKK1NFVCB3b3JrX21lbSBUTyBERUZBVUxUOworCistLSBDb21wYXJlIHJlc3VsdHMKKworKFNF TEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xIEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0 X2dyb3VwXzEpCisgIFVOSU9OIEFMTAorKFNFTEVDVCAqIEZST00gZGlzdGluY3RfZ3JvdXBfMSBF WENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNoXzEpOworCisoU0VMRUNUICogRlJPTSBk aXN0aW5jdF9oYXNoXzEgRVhDRVBUIFNFTEVDVCAqIEZST00gZGlzdGluY3RfZ3JvdXBfMSkKKyAg VU5JT04gQUxMCisoU0VMRUNUICogRlJPTSBkaXN0aW5jdF9ncm91cF8xIEVYQ0VQVCBTRUxFQ1Qg KiBGUk9NIGRpc3RpbmN0X2hhc2hfMSk7CisKK0RST1AgVEFCTEUgZGlzdGluY3RfaGFzaF8xOwor RFJPUCBUQUJMRSBkaXN0aW5jdF9oYXNoXzI7CitEUk9QIFRBQkxFIGRpc3RpbmN0X2dyb3VwXzE7 CitEUk9QIFRBQkxFIGRpc3RpbmN0X2dyb3VwXzI7CisKIC0tCiAtLSBBbHNvLCBzb21lIHRlc3Rz IG9mIElTIERJU1RJTkNUIEZST00sIHdoaWNoIGRvZXNuJ3QgcXVpdGUgZGVzZXJ2ZSBpdHMKIC0t IHZlcnkgb3duIHJlZ3Jlc3Npb24gZmlsZS4K --=-2bzg4PDaL7GXuYmVOQTX--