From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16990 invoked by alias); 13 Dec 2009 23:49:57 -0000 Received: (qmail 16981 invoked by uid 22791); 13 Dec 2009 23:49:56 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-bw0-f219.google.com (HELO mail-bw0-f219.google.com) (209.85.218.219) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 13 Dec 2009 23:49:52 +0000 Received: by bwz19 with SMTP id 19so1891598bwz.8 for ; Sun, 13 Dec 2009 15:49:49 -0800 (PST) MIME-Version: 1.0 Received: by 10.204.24.17 with SMTP id t17mr2358788bkb.142.1260748189327; Sun, 13 Dec 2009 15:49:49 -0800 (PST) In-Reply-To: References: <4a00655d0908201247g7d7bd9a1t466f4a66f08df4@mail.gmail.com> <4a00655d0911291536t5a11752fp27ab9c274148f822@mail.gmail.com> <4a00655d0911291538y9f29830v984d1a796fdd5d1@mail.gmail.com> From: Rhys Ulerich Date: Sun, 13 Dec 2009 23:49:00 -0000 Message-ID: <4a00655d0912131549w19638273nb51d723e9ddd9273@mail.gmail.com> Subject: Re: Where a generalized Richardson extrapolation routine would fit in GSL? To: Brian Gough Cc: gsl-discuss@sourceware.org Content-Type: multipart/mixed; boundary=000325555b5ef9e1c0047aa4cf2a Mailing-List: contact gsl-discuss-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gsl-discuss-owner@sourceware.org X-SW-Source: 2009-q4/txt/msg00060.txt.bz2 --000325555b5ef9e1c0047aa4cf2a Content-Type: text/plain; charset=ISO-8859-1 Content-length: 494 Attached is a patch adding Richardson extrapolation routines, tests, documentation, and an example. Please let me know if I can answer any questions. > The closest routines are in sum/ but that's not an ideal name so we > can just create a new extrap/ directory for it. The routines sit in gsl_extrap.h and build under extrap/. I included the documentation under sum.texi as part of the Series Acceleration chapter. The technique's math fits there more closely than anywhere else. - Rhys --000325555b5ef9e1c0047aa4cf2a Content-Type: application/octet-stream; name="0001-Added-Richardson-extrapolation-tests-and-docs.patch" Content-Disposition: attachment; filename="0001-Added-Richardson-extrapolation-tests-and-docs.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g36gtqqq0 Content-length: 74953 RnJvbSBmOGYxOTFmYzA2ZGRiYzJhM2Y5NTE1NjhhMTNiZWIzZjk3NWZhNDFi IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSaHlzIFVsZXJpY2gg PHJoeXMudWxlcmljaEBnbWFpbC5jb20+CkRhdGU6IFN1biwgMTMgRGVjIDIw MDkgMTc6NDU6MDUgLTA2MDAKU3ViamVjdDogW1BBVENIXSBBZGRlZCBSaWNo YXJkc29uIGV4dHJhcG9sYXRpb24sIHRlc3RzLCBhbmQgZG9jcwoKQ3JlYXRl ZCBidWlsZCBkaXJlY3RvcnkgZXh0cmFwLwpBZGRlZCBSaWNoYXJkc29uIGV4 dHJhcG9sYXRpb24gaGVhZGVyLCByb3V0aW5lcywgYW5kIHRlc3QgY2FzZXMK QWRkZWQgZG9jdW1lbnRhdGlvbiB0byBzdW0udGV4aSwgaW5jbHVkaW5nIGV4 YW1wbGUgY29kZQotLS0KIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICB8 ICAgIDQgKy0KIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICB8ICAgIDIg Ky0KIGRvYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICB8ICAgIDQgKy0KIGRv Yy9leGFtcGxlcy9yaWNoYXJkc29uLmMgICB8ICAgODQgKysrKysrKysKIGRv Yy9leGFtcGxlcy9yaWNoYXJkc29uLm91dCB8ICAgMTcgKysKIGRvYy9zdW0u dGV4aSAgICAgICAgICAgICAgICB8ICAxNzkgKysrKysrKysrKysrKysrLS0K IGV4dHJhcC9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDMgKwogZXh0cmFw L01ha2VmaWxlLmFtICAgICAgICAgIHwgICAyMCArKwogZXh0cmFwL2RlbW9f cmljaGFyZHNvbi5jICAgIHwgICA4NCArKysrKysrKwogZXh0cmFwL2dzbF9l eHRyYXAuaCAgICAgICAgIHwgICA1NiArKysrKwogZXh0cmFwL3JpY2hhcmRz b24uYyAgICAgICAgIHwgIDE4NCArKysrKysrKysrKysrKysrKwogZXh0cmFw L3Rlc3RfcmljaGFyZHNvbi5jICAgIHwgIDQ3NCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxMiBmaWxlcyBjaGFuZ2Vk LCAxMDg3IGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRvYy9leGFtcGxlcy9yaWNoYXJkc29uLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkb2MvZXhhbXBsZXMvcmljaGFyZHNvbi5vdXQKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBleHRyYXAvQ2hhbmdlTG9nCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZXh0cmFwL01ha2VmaWxlLmFtCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZXh0cmFwL2RlbW9fcmljaGFyZHNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZXh0cmFwL2dzbF9leHRyYXAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4 dHJhcC9yaWNoYXJkc29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHRyYXAv dGVzdF9yaWNoYXJkc29uLmMKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBi L01ha2VmaWxlLmFtCmluZGV4IDQ1YjdjMTUuLmE1MTI2MDQgMTAwNjQ0Ci0t LSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2VmaWxlLmFtCkBAIC0yLDkgKzIs OSBAQAogCiAjIEFVVE9NQUtFX09QVElPTlMgPSByZWFkbWUtYWxwaGEKIAot U1VCRElSUyA9IGdzbCB1dGlscyBzeXMgdGVzdCBlcnIgY29uc3QgY29tcGxl eCBjaGViIGJsb2NrIHZlY3RvciBtYXRyaXggcGVybXV0YXRpb24gY29tYmlu YXRpb24gbXVsdGlzZXQgc29ydCBpZWVlLXV0aWxzIGNibGFzIGJsYXMgbGlu YWxnIGVpZ2VuIHNwZWNmdW5jIGRodCBxcm5nIHJuZyByYW5kaXN0IGZmdCBw b2x5IGZpdCBtdWx0aWZpdCBzdGF0aXN0aWNzIHNpbWFuIHN1bSBpbnRlZ3Jh dGlvbiBpbnRlcnBvbGF0aW9uIGhpc3RvZ3JhbSBvZGUtaW5pdHZhbCByb290 cyBtdWx0aXJvb3RzIG1pbiBtdWx0aW1pbiBtb250ZSBudHVwbGUgZGlmZiBk ZXJpdiBjZGYgd2F2ZWxldCBic3BsaW5lIGRvYworU1VCRElSUyA9IGdzbCB1 dGlscyBzeXMgdGVzdCBlcnIgY29uc3QgY29tcGxleCBjaGViIGJsb2NrIHZl Y3RvciBtYXRyaXggcGVybXV0YXRpb24gY29tYmluYXRpb24gbXVsdGlzZXQg c29ydCBpZWVlLXV0aWxzIGNibGFzIGJsYXMgbGluYWxnIGVpZ2VuIHNwZWNm dW5jIGRodCBxcm5nIHJuZyByYW5kaXN0IGZmdCBwb2x5IGZpdCBtdWx0aWZp dCBzdGF0aXN0aWNzIHNpbWFuIHN1bSBpbnRlZ3JhdGlvbiBpbnRlcnBvbGF0 aW9uIGhpc3RvZ3JhbSBvZGUtaW5pdHZhbCByb290cyBtdWx0aXJvb3RzIG1p biBtdWx0aW1pbiBtb250ZSBudHVwbGUgZGlmZiBkZXJpdiBjZGYgd2F2ZWxl dCBic3BsaW5lIGV4dHJhcCBkb2MKIAotU1VCTElCUyA9IGJsb2NrL2xpYmdz bGJsb2NrLmxhIGJsYXMvbGliZ3NsYmxhcy5sYSBic3BsaW5lL2xpYmdzbGJz cGxpbmUubGEgY29tcGxleC9saWJnc2xjb21wbGV4LmxhIGNoZWIvbGliZ3Ns Y2hlYi5sYSBkaHQvbGliZ3NsZGh0LmxhIGRpZmYvbGliZ3NsZGlmZi5sYSBk ZXJpdi9saWJnc2xkZXJpdi5sYSBlaWdlbi9saWJnc2xlaWdlbi5sYSBlcnIv bGliZ3NsZXJyLmxhIGZmdC9saWJnc2xmZnQubGEgZml0L2xpYmdzbGZpdC5s YSBoaXN0b2dyYW0vbGliZ3NsaGlzdG9ncmFtLmxhIGllZWUtdXRpbHMvbGli Z3NsaWVlZXV0aWxzLmxhIGludGVncmF0aW9uL2xpYmdzbGludGVncmF0aW9u LmxhIGludGVycG9sYXRpb24vbGliZ3NsaW50ZXJwb2xhdGlvbi5sYSBsaW5h bGcvbGliZ3NsbGluYWxnLmxhIG1hdHJpeC9saWJnc2xtYXRyaXgubGEgbWlu L2xpYmdzbG1pbi5sYSBtb250ZS9saWJnc2xtb250ZS5sYSBtdWx0aWZpdC9s aWJnc2xtdWx0aWZpdC5sYSBtdWx0aW1pbi9saWJnc2xtdWx0aW1pbi5sYSBt dWx0aXJvb3RzL2xpYmdzbG11bHRpcm9vdHMubGEgbnR1cGxlL2xpYmdzbG50 dXBsZS5sYSBvZGUtaW5pdHZhbC9saWJnc2xvZGVpdi5sYSBwZXJtdXRhdGlv bi9saWJnc2xwZXJtdXRhdGlvbi5sYSBjb21iaW5hdGlvbi9saWJnc2xjb21i aW5hdGlvbi5sYSBtdWx0aXNldC9saWJnc2xtdWx0aXNldC5sYSBwb2x5L2xp YmdzbHBvbHkubGEgcXJuZy9saWJnc2xxcm5nLmxhIHJhbmRpc3QvbGliZ3Ns cmFuZGlzdC5sYSBybmcvbGliZ3Nscm5nLmxhIHJvb3RzL2xpYmdzbHJvb3Rz LmxhIHNpbWFuL2xpYmdzbHNpbWFuLmxhIHNvcnQvbGliZ3Nsc29ydC5sYSBz cGVjZnVuYy9saWJnc2xzcGVjZnVuYy5sYSBzdGF0aXN0aWNzL2xpYmdzbHN0 YXRpc3RpY3MubGEgc3VtL2xpYmdzbHN1bS5sYSBzeXMvbGliZ3Nsc3lzLmxh IHRlc3QvbGliZ3NsdGVzdC5sYSB1dGlscy9saWJ1dGlscy5sYSB2ZWN0b3Iv bGliZ3NsdmVjdG9yLmxhIGNkZi9saWJnc2xjZGYubGEgd2F2ZWxldC9saWJn c2x3YXZlbGV0LmxhCitTVUJMSUJTID0gYmxvY2svbGliZ3NsYmxvY2subGEg Ymxhcy9saWJnc2xibGFzLmxhIGJzcGxpbmUvbGliZ3NsYnNwbGluZS5sYSBj b21wbGV4L2xpYmdzbGNvbXBsZXgubGEgY2hlYi9saWJnc2xjaGViLmxhIGRo dC9saWJnc2xkaHQubGEgZGlmZi9saWJnc2xkaWZmLmxhIGRlcml2L2xpYmdz bGRlcml2LmxhIGVpZ2VuL2xpYmdzbGVpZ2VuLmxhIGVyci9saWJnc2xlcnIu bGEgZmZ0L2xpYmdzbGZmdC5sYSBmaXQvbGliZ3NsZml0LmxhIGhpc3RvZ3Jh bS9saWJnc2xoaXN0b2dyYW0ubGEgaWVlZS11dGlscy9saWJnc2xpZWVldXRp bHMubGEgaW50ZWdyYXRpb24vbGliZ3NsaW50ZWdyYXRpb24ubGEgaW50ZXJw b2xhdGlvbi9saWJnc2xpbnRlcnBvbGF0aW9uLmxhIGxpbmFsZy9saWJnc2xs aW5hbGcubGEgbWF0cml4L2xpYmdzbG1hdHJpeC5sYSBtaW4vbGliZ3NsbWlu LmxhIG1vbnRlL2xpYmdzbG1vbnRlLmxhIG11bHRpZml0L2xpYmdzbG11bHRp Zml0LmxhIG11bHRpbWluL2xpYmdzbG11bHRpbWluLmxhIG11bHRpcm9vdHMv bGliZ3NsbXVsdGlyb290cy5sYSBudHVwbGUvbGliZ3NsbnR1cGxlLmxhIG9k ZS1pbml0dmFsL2xpYmdzbG9kZWl2LmxhIHBlcm11dGF0aW9uL2xpYmdzbHBl cm11dGF0aW9uLmxhIGNvbWJpbmF0aW9uL2xpYmdzbGNvbWJpbmF0aW9uLmxh IG11bHRpc2V0L2xpYmdzbG11bHRpc2V0LmxhIHBvbHkvbGliZ3NscG9seS5s YSBxcm5nL2xpYmdzbHFybmcubGEgcmFuZGlzdC9saWJnc2xyYW5kaXN0Lmxh IHJuZy9saWJnc2xybmcubGEgcm9vdHMvbGliZ3Nscm9vdHMubGEgc2ltYW4v bGliZ3Nsc2ltYW4ubGEgc29ydC9saWJnc2xzb3J0LmxhIHNwZWNmdW5jL2xp YmdzbHNwZWNmdW5jLmxhIHN0YXRpc3RpY3MvbGliZ3Nsc3RhdGlzdGljcy5s YSBzdW0vbGliZ3Nsc3VtLmxhIHN5cy9saWJnc2xzeXMubGEgdGVzdC9saWJn c2x0ZXN0LmxhIHV0aWxzL2xpYnV0aWxzLmxhIHZlY3Rvci9saWJnc2x2ZWN0 b3IubGEgY2RmL2xpYmdzbGNkZi5sYSB3YXZlbGV0L2xpYmdzbHdhdmVsZXQu bGEgZXh0cmFwL2xpYmdzbGV4dHJhcC5sYQogCiBwa2dpbmNsdWRlX0hFQURF UlMgPSBnc2xfbWF0aC5oIGdzbF9wb3dfaW50LmggZ3NsX25hbi5oIGdzbF9t YWNoaW5lLmggZ3NsX21vZGUuaCBnc2xfcHJlY2lzaW9uLmggZ3NsX3R5cGVz LmggZ3NsX3ZlcnNpb24uaCBnc2xfbWlubWF4LmggZ3NsX2lubGluZS5oCiAK ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRl eCBmOWY1YjA0Li42OTE1ZGVhIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMK KysrIGIvY29uZmlndXJlLmFjCkBAIC01NDMsNSArNTQzLDUgQEAgQUhfVkVS QkFUSU0oW0dTTF9ESVNBQkxFX0RFUFJFQ0FURURdLAogI2RlZmluZSBHU0xf RElTQUJMRV9ERVBSRUNBVEVEIDFdKQogCiBkbmwKLUFDX0NPTkZJR19GSUxF UyhbZ3NsX3ZlcnNpb24uaCBnc2wuc3BlYyBnc2wvTWFrZWZpbGUgdGVzdC9N YWtlZmlsZSBlcnIvTWFrZWZpbGUgc3lzL01ha2VmaWxlIHV0aWxzL01ha2Vm aWxlIGNvbnN0L01ha2VmaWxlIG1pbi9NYWtlZmlsZSBtdWx0aW1pbi9NYWtl ZmlsZSBpZWVlLXV0aWxzL01ha2VmaWxlIGZmdC9NYWtlZmlsZSBzcGVjZnVu Yy9NYWtlZmlsZSBkaHQvTWFrZWZpbGUgZml0L01ha2VmaWxlIG11bHRpZml0 L01ha2VmaWxlIGJzcGxpbmUvTWFrZWZpbGUgc3RhdGlzdGljcy9NYWtlZmls ZSBzdW0vTWFrZWZpbGUgcm9vdHMvTWFrZWZpbGUgbXVsdGlyb290cy9NYWtl ZmlsZSBudHVwbGUvTWFrZWZpbGUgcG9seS9NYWtlZmlsZSBxcm5nL01ha2Vm aWxlIHJuZy9NYWtlZmlsZSByYW5kaXN0L01ha2VmaWxlIHNpbWFuL01ha2Vm aWxlIGludGVncmF0aW9uL01ha2VmaWxlIGludGVycG9sYXRpb24vTWFrZWZp bGUgZG9jL01ha2VmaWxlIGJsb2NrL01ha2VmaWxlIHZlY3Rvci9NYWtlZmls ZSBtYXRyaXgvTWFrZWZpbGUgaGlzdG9ncmFtL01ha2VmaWxlIG1vbnRlL01h a2VmaWxlIG9kZS1pbml0dmFsL01ha2VmaWxlIGNibGFzL01ha2VmaWxlIGJs YXMvTWFrZWZpbGUgbGluYWxnL01ha2VmaWxlIGVpZ2VuL01ha2VmaWxlIHBl cm11dGF0aW9uL01ha2VmaWxlIGNvbWJpbmF0aW9uL01ha2VmaWxlIG11bHRp c2V0L01ha2VmaWxlIHNvcnQvTWFrZWZpbGUgY29tcGxleC9NYWtlZmlsZSBk aWZmL01ha2VmaWxlIGRlcml2L01ha2VmaWxlIGNoZWIvTWFrZWZpbGUgY2Rm L01ha2VmaWxlIHdhdmVsZXQvTWFrZWZpbGUgTWFrZWZpbGVdKQorQUNfQ09O RklHX0ZJTEVTKFtnc2xfdmVyc2lvbi5oIGdzbC5zcGVjIGdzbC9NYWtlZmls ZSB0ZXN0L01ha2VmaWxlIGVyci9NYWtlZmlsZSBzeXMvTWFrZWZpbGUgdXRp bHMvTWFrZWZpbGUgY29uc3QvTWFrZWZpbGUgbWluL01ha2VmaWxlIG11bHRp bWluL01ha2VmaWxlIGllZWUtdXRpbHMvTWFrZWZpbGUgZmZ0L01ha2VmaWxl IHNwZWNmdW5jL01ha2VmaWxlIGRodC9NYWtlZmlsZSBmaXQvTWFrZWZpbGUg bXVsdGlmaXQvTWFrZWZpbGUgYnNwbGluZS9NYWtlZmlsZSBzdGF0aXN0aWNz L01ha2VmaWxlIHN1bS9NYWtlZmlsZSByb290cy9NYWtlZmlsZSBtdWx0aXJv b3RzL01ha2VmaWxlIG50dXBsZS9NYWtlZmlsZSBwb2x5L01ha2VmaWxlIHFy bmcvTWFrZWZpbGUgcm5nL01ha2VmaWxlIHJhbmRpc3QvTWFrZWZpbGUgc2lt YW4vTWFrZWZpbGUgaW50ZWdyYXRpb24vTWFrZWZpbGUgaW50ZXJwb2xhdGlv bi9NYWtlZmlsZSBkb2MvTWFrZWZpbGUgYmxvY2svTWFrZWZpbGUgdmVjdG9y L01ha2VmaWxlIG1hdHJpeC9NYWtlZmlsZSBoaXN0b2dyYW0vTWFrZWZpbGUg bW9udGUvTWFrZWZpbGUgb2RlLWluaXR2YWwvTWFrZWZpbGUgY2JsYXMvTWFr ZWZpbGUgYmxhcy9NYWtlZmlsZSBsaW5hbGcvTWFrZWZpbGUgZWlnZW4vTWFr ZWZpbGUgcGVybXV0YXRpb24vTWFrZWZpbGUgY29tYmluYXRpb24vTWFrZWZp bGUgbXVsdGlzZXQvTWFrZWZpbGUgc29ydC9NYWtlZmlsZSBjb21wbGV4L01h a2VmaWxlIGRpZmYvTWFrZWZpbGUgZGVyaXYvTWFrZWZpbGUgY2hlYi9NYWtl ZmlsZSBjZGYvTWFrZWZpbGUgd2F2ZWxldC9NYWtlZmlsZSBleHRyYXAvTWFr ZWZpbGUgTWFrZWZpbGVdKQogQUNfT1VUUFVUCmRpZmYgLS1naXQgYS9kb2Mv TWFrZWZpbGUuYW0gYi9kb2MvTWFrZWZpbGUuYW0KaW5kZXggYzE3MjI1MC4u YTIwYzExMSAxMDA2NDQKLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKyBiL2Rv Yy9NYWtlZmlsZS5hbQpAQCAtOCw5ICs4LDkgQEAgbWFuX01BTlMgPSBnc2wu MyBnc2wtY29uZmlnLjEgZ3NsLXJhbmRpc3QuMSBnc2wtaGlzdG9ncmFtLjEK IAogZmlndXJlcyA9IG11bHRpbWluLmVwcyBzaW1hbi10ZXN0LmVwcyBzaW1h bi1lbmVyZ3kuZXBzIDEyLWNpdGllcy5lcHMgaW5pdGlhbC1yb3V0ZS5lcHMg ZmluYWwtcm91dGUuZXBzIGZmdC1jb21wbGV4LXJhZGl4Mi1mLmVwcyBmZnQt Y29tcGxleC1yYWRpeDItdC5lcHMgZmZ0LWNvbXBsZXgtcmFkaXgyLmVwcyBm ZnQtcmVhbC1taXhlZHJhZGl4LmVwcyByb290cy1iaXNlY3Rpb24uZXBzIHJv b3RzLWZhbHNlLXBvc2l0aW9uLmVwcyByb290cy1uZXd0b25zLW1ldGhvZC5l cHMgcm9vdHMtc2VjYW50LW1ldGhvZC5lcHMgaGlzdG9ncmFtLmVwcyBoaXN0 b2dyYW0yZC5lcHMgbWluLWludGVydmFsLmVwcyBmaXQtd2xpbmVhci5lcHMg Zml0LXdsaW5lYXIyLmVwcyBmaXQtZXhwLmVwcyBudHVwbGUuZXBzIHFybmcu ZXBzIGNoZWIuZXBzIHZkcC5lcHMgaW50ZXJwMi5lcHMgcmFuZC1iZXRhLnRl eCByYW5kLWJpbm9taWFsLnRleCByYW5kLWNhdWNoeS50ZXggcmFuZC1jaGlz cS50ZXggcmFuZC1lcmxhbmcudGV4IHJhbmQtZXhwb25lbnRpYWwudGV4IHJh bmQtZmRpc3QudGV4IHJhbmQtZmxhdC50ZXggcmFuZC1nYW1tYS50ZXggcmFu ZC1nYXVzc2lhbi50ZXggcmFuZC1nZW9tZXRyaWMudGV4IHJhbmQtbGFwbGFj ZS50ZXggcmFuZC1sb2dhcml0aG1pYy50ZXggcmFuZC1sb2dpc3RpYy50ZXgg cmFuZC1sb2dub3JtYWwudGV4IHJhbmQtcGFyZXRvLnRleCByYW5kLXBvaXNz b24udGV4IHJhbmQtaHlwZXJnZW9tZXRyaWMudGV4IHJhbmQtbmJpbm9taWFs LnRleCByYW5kLXBhc2NhbC50ZXggcmFuZC1iaXZhcmlhdGUtZ2F1c3NpYW4u dGV4IHJhbmQtcmF5bGVpZ2gudGV4IHJhbmQtcmF5bGVpZ2gtdGFpbC50ZXgg cmFuZC10ZGlzdC50ZXggcmFuZC13ZWlidWxsLnRleCByYW5kb20td2Fsay50 ZXggcmFuZHBsb3RzLmducCByYW5kLWV4cHBvdy50ZXggcmFuZC1sZXZ5LnRl eCByYW5kLWxldnlza2V3LnRleCByYW5kLWd1bWJlbC50ZXggcmFuZC1iZXJu b3VsbGkudGV4IHJhbmQtZ2F1c3NpYW4tdGFpbC50ZXggcmFuZC1ndW1iZWwx LnRleCByYW5kLWd1bWJlbDIudGV4IGxhbmRhdS5kYXQgcmFuZC1sYW5kYXUu dGV4IGR3dC1vcmlnLmVwcyBkd3Qtc2FtcC5lcHMgaW50ZXJwcDIuZXBzIGJz cGxpbmUuZXBzCiAKLWV4YW1wbGVzX3NyYyA9IGV4YW1wbGVzL2JsYXMuYyBl eGFtcGxlcy9ibG9jay5jIGV4YW1wbGVzL2NibGFzLmMgZXhhbXBsZXMvY2Rm LmMgZXhhbXBsZXMvY2hlYi5jIGV4YW1wbGVzL2NvbWJpbmF0aW9uLmMgZXhh bXBsZXMvbXVsdGlzZXQuYyBleGFtcGxlcy9jb25zdC5jIGV4YW1wbGVzL2Rl bW9fZm4uYyBleGFtcGxlcy9kaWZmLmMgZXhhbXBsZXMvZWlnZW4uYyBleGFt cGxlcy9mZnQuYyBleGFtcGxlcy9mZnRtci5jIGV4YW1wbGVzL2ZmdHJlYWwu YyBleGFtcGxlcy9maXR0aW5nLmMgZXhhbXBsZXMvZml0dGluZzIuYyBleGFt cGxlcy9maXR0aW5nMy5jIGV4YW1wbGVzL2hpc3RvZ3JhbS5jIGV4YW1wbGVz L2hpc3RvZ3JhbTJkLmMgZXhhbXBsZXMvaWVlZS5jIGV4YW1wbGVzL2llZWVy b3VuZC5jIGV4YW1wbGVzL2ludGVncmF0aW9uLmMgZXhhbXBsZXMvaW50ZXJw LmMgZXhhbXBsZXMvaW50cm8uYyBleGFtcGxlcy9saW5hbGdsdS5jIGV4YW1w bGVzL21hdHJpeC5jIGV4YW1wbGVzL21hdHJpeHcuYyBleGFtcGxlcy9taW4u YyBleGFtcGxlcy9tb250ZS5jIGV4YW1wbGVzL250dXBsZXIuYyBleGFtcGxl cy9udHVwbGV3LmMgZXhhbXBsZXMvb2RlLWluaXR2YWwuYyBleGFtcGxlcy9v ZGVmaXhlZC5jIGV4YW1wbGVzL3Blcm1zZXEuYyBleGFtcGxlcy9wZXJtc2h1 ZmZsZS5jIGV4YW1wbGVzL3BvbHlyb290cy5jIGV4YW1wbGVzL3FybmcuYyBl eGFtcGxlcy9yYW5kcG9pc3Nvbi5jIGV4YW1wbGVzL3JhbmR3YWxrLmMgZXhh bXBsZXMvcm5nLmMgZXhhbXBsZXMvcm5ndW5pZi5jIGV4YW1wbGVzL3Jvb3Ru ZXd0LmMgZXhhbXBsZXMvcm9vdHMuYyBleGFtcGxlcy9zaW1hbi5jIGV4YW1w bGVzL3NvcnRzbWFsbC5jIGV4YW1wbGVzL3NwZWNmdW4uYyBleGFtcGxlcy9z cGVjZnVuX2UuYyBleGFtcGxlcy9zdGF0LmMgZXhhbXBsZXMvc3RhdHNvcnQu YyBleGFtcGxlcy9zdW0uYyBleGFtcGxlcy92ZWN0b3IuYyBleGFtcGxlcy92 ZWN0b3JyLmMgZXhhbXBsZXMvdmVjdG9ydmlldy5jIGV4YW1wbGVzL3ZlY3Rv cncuYyBleGFtcGxlcy9kZW1vX2ZuLmggZXhhbXBsZXMvZHd0LmMgZXhhbXBs ZXMvZXhwZml0LmMgZXhhbXBsZXMvbmxmaXQuYyBleGFtcGxlcy9pbnRlcnBw LmMgZXhhbXBsZXMvZWlnZW5fbm9uc3ltbS5jIGV4YW1wbGVzL2JzcGxpbmUu YyBleGFtcGxlcy9tdWx0aW1pbi5jIGV4YW1wbGVzL211bHRpbWluZm4uYyBl eGFtcGxlcy9ubXNpbXBsZXguYworZXhhbXBsZXNfc3JjID0gZXhhbXBsZXMv Ymxhcy5jIGV4YW1wbGVzL2Jsb2NrLmMgZXhhbXBsZXMvY2JsYXMuYyBleGFt cGxlcy9jZGYuYyBleGFtcGxlcy9jaGViLmMgZXhhbXBsZXMvY29tYmluYXRp b24uYyBleGFtcGxlcy9tdWx0aXNldC5jIGV4YW1wbGVzL2NvbnN0LmMgZXhh bXBsZXMvZGVtb19mbi5jIGV4YW1wbGVzL2RpZmYuYyBleGFtcGxlcy9laWdl bi5jIGV4YW1wbGVzL2ZmdC5jIGV4YW1wbGVzL2ZmdG1yLmMgZXhhbXBsZXMv ZmZ0cmVhbC5jIGV4YW1wbGVzL2ZpdHRpbmcuYyBleGFtcGxlcy9maXR0aW5n Mi5jIGV4YW1wbGVzL2ZpdHRpbmczLmMgZXhhbXBsZXMvaGlzdG9ncmFtLmMg ZXhhbXBsZXMvaGlzdG9ncmFtMmQuYyBleGFtcGxlcy9pZWVlLmMgZXhhbXBs ZXMvaWVlZXJvdW5kLmMgZXhhbXBsZXMvaW50ZWdyYXRpb24uYyBleGFtcGxl cy9pbnRlcnAuYyBleGFtcGxlcy9pbnRyby5jIGV4YW1wbGVzL2xpbmFsZ2x1 LmMgZXhhbXBsZXMvbWF0cml4LmMgZXhhbXBsZXMvbWF0cml4dy5jIGV4YW1w bGVzL21pbi5jIGV4YW1wbGVzL21vbnRlLmMgZXhhbXBsZXMvbnR1cGxlci5j IGV4YW1wbGVzL250dXBsZXcuYyBleGFtcGxlcy9vZGUtaW5pdHZhbC5jIGV4 YW1wbGVzL29kZWZpeGVkLmMgZXhhbXBsZXMvcGVybXNlcS5jIGV4YW1wbGVz L3Blcm1zaHVmZmxlLmMgZXhhbXBsZXMvcG9seXJvb3RzLmMgZXhhbXBsZXMv cXJuZy5jIGV4YW1wbGVzL3JhbmRwb2lzc29uLmMgZXhhbXBsZXMvcmFuZHdh bGsuYyBleGFtcGxlcy9ybmcuYyBleGFtcGxlcy9ybmd1bmlmLmMgZXhhbXBs ZXMvcm9vdG5ld3QuYyBleGFtcGxlcy9yb290cy5jIGV4YW1wbGVzL3NpbWFu LmMgZXhhbXBsZXMvc29ydHNtYWxsLmMgZXhhbXBsZXMvc3BlY2Z1bi5jIGV4 YW1wbGVzL3NwZWNmdW5fZS5jIGV4YW1wbGVzL3N0YXQuYyBleGFtcGxlcy9z dGF0c29ydC5jIGV4YW1wbGVzL3N1bS5jIGV4YW1wbGVzL3ZlY3Rvci5jIGV4 YW1wbGVzL3ZlY3RvcnIuYyBleGFtcGxlcy92ZWN0b3J2aWV3LmMgZXhhbXBs ZXMvdmVjdG9ydy5jIGV4YW1wbGVzL2RlbW9fZm4uaCBleGFtcGxlcy9kd3Qu YyBleGFtcGxlcy9leHBmaXQuYyBleGFtcGxlcy9ubGZpdC5jIGV4YW1wbGVz L2ludGVycHAuYyBleGFtcGxlcy9laWdlbl9ub25zeW1tLmMgZXhhbXBsZXMv YnNwbGluZS5jIGV4YW1wbGVzL211bHRpbWluLmMgZXhhbXBsZXMvbXVsdGlt aW5mbi5jIGV4YW1wbGVzL25tc2ltcGxleC5jIGV4YW1wbGVzL3JpY2hhcmRz b24uYwogCi1leGFtcGxlc19vdXQgPSBleGFtcGxlcy9ibGFzLm91dCBleGFt cGxlcy9ibG9jay5vdXQgZXhhbXBsZXMvY2JsYXMub3V0IGV4YW1wbGVzL2Nk Zi5vdXQgZXhhbXBsZXMvY29tYmluYXRpb24ub3V0IGV4YW1wbGVzL211bHRp c2V0Lm91dCBleGFtcGxlcy9jb25zdC5vdXQgZXhhbXBsZXMvZGlmZi5vdXQg ZXhhbXBsZXMvaW50ZWdyYXRpb24ub3V0IGV4YW1wbGVzL2ludHJvLm91dCBl eGFtcGxlcy9saW5hbGdsdS5vdXQgZXhhbXBsZXMvbWluLm91dCBleGFtcGxl cy9wb2x5cm9vdHMub3V0IGV4YW1wbGVzL3JhbmRwb2lzc29uLjIub3V0IGV4 YW1wbGVzL3JhbmRwb2lzc29uLm91dCBleGFtcGxlcy9ybmcub3V0IGV4YW1w bGVzL3JuZ3VuaWYuMi5vdXQgZXhhbXBsZXMvcm5ndW5pZi5vdXQgZXhhbXBs ZXMvc29ydHNtYWxsLm91dCBleGFtcGxlcy9zcGVjZnVuLm91dCBleGFtcGxl cy9zcGVjZnVuX2Uub3V0IGV4YW1wbGVzL3N0YXQub3V0IGV4YW1wbGVzL3N0 YXRzb3J0Lm91dCBleGFtcGxlcy9zdW0ub3V0IGV4YW1wbGVzL3ZlY3RvcnZp ZXcub3V0IGV4YW1wbGVzL2VjZy5kYXQgZXhhbXBsZXMvZHd0LmRhdCBleGFt cGxlcy9tdWx0aW1pbi5vdXQgZXhhbXBsZXMvbm1zaW1wbGV4Lm91dAorZXhh bXBsZXNfb3V0ID0gZXhhbXBsZXMvYmxhcy5vdXQgZXhhbXBsZXMvYmxvY2su b3V0IGV4YW1wbGVzL2NibGFzLm91dCBleGFtcGxlcy9jZGYub3V0IGV4YW1w bGVzL2NvbWJpbmF0aW9uLm91dCBleGFtcGxlcy9tdWx0aXNldC5vdXQgZXhh bXBsZXMvY29uc3Qub3V0IGV4YW1wbGVzL2RpZmYub3V0IGV4YW1wbGVzL2lu dGVncmF0aW9uLm91dCBleGFtcGxlcy9pbnRyby5vdXQgZXhhbXBsZXMvbGlu YWxnbHUub3V0IGV4YW1wbGVzL21pbi5vdXQgZXhhbXBsZXMvcG9seXJvb3Rz Lm91dCBleGFtcGxlcy9yYW5kcG9pc3Nvbi4yLm91dCBleGFtcGxlcy9yYW5k cG9pc3Nvbi5vdXQgZXhhbXBsZXMvcm5nLm91dCBleGFtcGxlcy9ybmd1bmlm LjIub3V0IGV4YW1wbGVzL3JuZ3VuaWYub3V0IGV4YW1wbGVzL3NvcnRzbWFs bC5vdXQgZXhhbXBsZXMvc3BlY2Z1bi5vdXQgZXhhbXBsZXMvc3BlY2Z1bl9l Lm91dCBleGFtcGxlcy9zdGF0Lm91dCBleGFtcGxlcy9zdGF0c29ydC5vdXQg ZXhhbXBsZXMvc3VtLm91dCBleGFtcGxlcy92ZWN0b3J2aWV3Lm91dCBleGFt cGxlcy9lY2cuZGF0IGV4YW1wbGVzL2R3dC5kYXQgZXhhbXBsZXMvbXVsdGlt aW4ub3V0IGV4YW1wbGVzL25tc2ltcGxleC5vdXQgZXhhbXBsZXMvcmljaGFy ZHNvbi5vdXQKIAogbm9pbnN0X0RBVEEgPSAkKGV4YW1wbGVzX3NyYykgJChl eGFtcGxlc19vdXQpICQoZmlndXJlcykKIApkaWZmIC0tZ2l0IGEvZG9jL2V4 YW1wbGVzL3JpY2hhcmRzb24uYyBiL2RvYy9leGFtcGxlcy9yaWNoYXJkc29u LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhNzZi YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9leGFtcGxlcy9yaWNoYXJkc29u LmMKQEAgLTAsMCArMSw4NCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j bHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGdzbC9nc2xfdmVjdG9yLmg+Cisj aW5jbHVkZSA8Z3NsL2dzbF9tYXRyaXguaD4KKyNpbmNsdWRlIDxnc2wvZ3Ns X2V4dHJhcC5oPgorCitjb25zdCBkb3VibGUgaCA9IDAuNDsKK2NvbnN0IGRv dWJsZSB0ID0gMi4wMDsKK2NvbnN0IGRvdWJsZSB4ID0gMC43NTsKKworLyog TWV0aG9kIGhhcyB0cnVuY2F0aW9uIGVycm9yIGxpa2UgTyhoXjIpICsgTyho XjQpICsgLi4uICovCitkb3VibGUgZXN0aW1hdGUoZG91YmxlIGgpCit7Cisg IHJldHVybiAoc2luKHggKyBoKSAtIHNpbih4IC0gaCkpIC8gKDIqaCk7Cit9 CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcHJpbnRmKCJcblBlcmZvcm1p bmcgYSBzaW5nbGUgUmljaGFyZHNvbiBleHRyYXBvbGF0aW9uIHN0ZXAuLi5c biIpOworICB7CisgICAgZ3NsX3ZlY3RvciAqQWggID0gZ3NsX3ZlY3Rvcl9h bGxvYygxKTsKKyAgICBnc2xfdmVjdG9yICpBaHQgPSBnc2xfdmVjdG9yX2Fs bG9jKDEpOworCisgICAgZ3NsX3ZlY3Rvcl9zZXQoQWgsICAwLCBlc3RpbWF0 ZShoKSk7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoQWh0LCAwLCBlc3RpbWF0ZSho IC8gdCkpOworCisgICAgcHJpbnRmKCJFeGFjdCB2YWx1ZSBmb3IgKGQvZHgp IHNpbiglNGYpID0gICUxNC4xMmZcbiIsIHgsIGNvcyh4KSk7CisgICAgcHJp bnRmKCJBcHByb3hpbWF0ZSB2YWx1ZSBmb3IgaCAgID0gJTRmIGlzICUxNC4x MmYgd2l0aCBlcnJvciAlMTRlXG4iLAorICAgICAgICAgICBoLCBnc2xfdmVj dG9yX2dldChBaCwgMCksIGZhYnMoY29zKHgpIC0gZ3NsX3ZlY3Rvcl9nZXQo QWgsIDApKSk7CisgICAgcHJpbnRmKCJBcHByb3hpbWF0ZSB2YWx1ZSBmb3Ig aC90ID0gJTRmIGlzICUxNC4xMmYgd2l0aCBlcnJvciAlMTRlXG4iLAorICAg ICAgICAgICBoIC8gdCwgZ3NsX3ZlY3Rvcl9nZXQoQWh0LCAwKSwgZmFicyhj b3MoeCkgLSBnc2xfdmVjdG9yX2dldChBaHQsIDApKSk7CisKKyAgICBnc2xf ZXh0cmFwX3JpY2hhcmRzb25fc3RlcChBaCwgQWh0LCB0LCAyLjApOworCisg ICAgcHJpbnRmKCJBZnRlciBvbmUgZXh0cmFwb2xhdGlvbiBzdGVwIHZhbHVl IGlzICAgJTE0LjEyZiB3aXRoIGVycm9yICUxNGVcbiIsCisgICAgICAgICAg IGdzbF92ZWN0b3JfZ2V0KEFoLCAwKSwgZmFicyhjb3MoeCkgLSBnc2xfdmVj dG9yX2dldChBaCwgMCkpKTsKKworICAgIGdzbF92ZWN0b3JfZnJlZShBaHQp OworICAgIGdzbF92ZWN0b3JfZnJlZShBaCk7CisgIH0KKworICBwcmludGYo IlxuUGVyZm9ybWluZyBpdGVyYXRlZCBSaWNoYXJkc29uIGV4dHJhcG9sYXRp b24uLi5cbiIpOworICB7CisgICAgZ3NsX21hdHJpeCAqQSAgICAgICAgID0g Z3NsX21hdHJpeF9hbGxvYygxLCA0KTsKKyAgICBnc2xfdmVjdG9yICprICAg ICAgICAgPSBnc2xfdmVjdG9yX2FsbG9jKDIpOworICAgIGdzbF9tYXRyaXgg Km5vcm10YWJsZSA9IGdzbF9tYXRyaXhfYWxsb2MoQS0+c2l6ZTIsIEEtPnNp emUyKTsKKyAgICBnc2xfdmVjdG9yICpleGFjdCAgICAgPSBnc2xfdmVjdG9y X2FsbG9jKDEpOworICAgIGludCBpLCBqOworCisgICAgZ3NsX3ZlY3Rvcl9z ZXQoZXhhY3QsIDAsIGNvcyh4KSk7CisKKyAgICBwcmludGYoIkNvbXB1dGlu ZyAlZCBpbml0aWFsIGVzdGltYXRlcyBvZiAoZC9keCkgc2luKCVmKVxuIiwK KyAgICAgICAgICAgKGludCkgQS0+c2l6ZTIsIHgpOworICAgIGZvciAoaSA9 IDA7IGkgPCBBLT5zaXplMjsgKytpKQorICAgICAgeworICAgICAgICBnc2xf bWF0cml4X3NldChBLCAwLCBpLCBlc3RpbWF0ZShoIC8gcG93KHQsIGkpKSk7 CisgICAgICB9CisKKyAgICBwcmludGYoIlVzaW5nIGxlYWRpbmcgZXJyb3Ig dGVybXMgbGlrZSBPKGheMiksIE8oaF40KSwgTyhoXjYpLCBPKGheOCkuLi5c biIpOworICAgIGdzbF92ZWN0b3Jfc2V0KGssIDAsIDIpOworICAgIGdzbF92 ZWN0b3Jfc2V0KGssIDEsIDQpOworCisgICAgZ3NsX2V4dHJhcF9yaWNoYXJk c29uKEEsIHQsIGssIG5vcm10YWJsZSwgZXhhY3QpOworCisgICAgcHJpbnRm KCJUaGUgbF8yIGVycm9yIGFmdGVyIGVhY2ggaXRlcmF0ZWQgZXh0cmFwb2xh dGlvbiBzdGVwIGlzOlxuIik7CisgICAgZm9yIChpID0gMDsgaSA8IEEtPnNp emUyOyArK2kpCisgICAgICB7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBB LT5zaXplMjsgKytqKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50 ZigiICUxNmUiLCBnc2xfbWF0cml4X2dldChub3JtdGFibGUsIGksIGopKTsK KyAgICAgICAgICB9CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgIH0K KyAgICBwcmludGYoIlxuVGhlIGZpbmFsIGVzdGltYXRlIGlzICUxNC4xMmZc biIsIGdzbF9tYXRyaXhfZ2V0KEEsIDAsIDApKTsKKworICAgIGdzbF92ZWN0 b3JfZnJlZShleGFjdCk7CisgICAgZ3NsX21hdHJpeF9mcmVlKG5vcm10YWJs ZSk7CisgICAgZ3NsX3ZlY3Rvcl9mcmVlKGspOworICAgIGdzbF9tYXRyaXhf ZnJlZShBKTsKKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv ZG9jL2V4YW1wbGVzL3JpY2hhcmRzb24ub3V0IGIvZG9jL2V4YW1wbGVzL3Jp Y2hhcmRzb24ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmIwNTVmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZXhhbXBsZXMv cmljaGFyZHNvbi5vdXQKQEAgLTAsMCArMSwxNyBAQAorCitQZXJmb3JtaW5n IGEgc2luZ2xlIFJpY2hhcmRzb24gZXh0cmFwb2xhdGlvbiBzdGVwLi4uCitF eGFjdCB2YWx1ZSBmb3IgKGQvZHgpIHNpbigwLjc1MDAwMCkgPSAgMC43MzE2 ODg4Njg4NzQKK0FwcHJveGltYXRlIHZhbHVlIGZvciBoICAgPSAwLjQwMDAw MCBpcyAwLjcxMjMzMjY2NjAwNiB3aXRoIGVycm9yICAgMS45MzU2MjBlLTAy CitBcHByb3hpbWF0ZSB2YWx1ZSBmb3IgaC90ID0gMC4yMDAwMDAgaXMgMC43 MjY4MjA2ODk2NDcgd2l0aCBlcnJvciAgIDQuODY4MTc5ZS0wMworQWZ0ZXIg b25lIGV4dHJhcG9sYXRpb24gc3RlcCB2YWx1ZSBpcyAgIDAuNzMxNjUwMDMw ODYwIHdpdGggZXJyb3IgICAzLjg4MzgwMWUtMDUKKworUGVyZm9ybWluZyBp dGVyYXRlZCBSaWNoYXJkc29uIGV4dHJhcG9sYXRpb24uLi4KK0NvbXB1dGlu ZyA0IGluaXRpYWwgZXN0aW1hdGVzIG9mIChkL2R4KSBzaW4oMC43NTAwMDAp CitVc2luZyBsZWFkaW5nIGVycm9yIHRlcm1zIGxpa2UgTyhoXjIpLCBPKGhe NCksIE8oaF42KSwgTyhoXjgpLi4uCitUaGUgbF8yIGVycm9yIGFmdGVyIGVh Y2ggaXRlcmF0ZWQgZXh0cmFwb2xhdGlvbiBzdGVwIGlzOgorICAgICAxLjkz NTYyMGUtMDIgICAgICAgICAgICAgIG5hbiAgICAgICAgICAgICAgbmFuICAg ICAgICAgICAgICBuYW4KKyAgICAgNC44NjgxNzllLTAzICAgICAzLjg4Mzgw MWUtMDUgICAgICAgICAgICAgIG5hbiAgICAgICAgICAgICAgbmFuCisgICAg IDEuMjE4ODcyZS0wMyAgICAgMi40MzYwNjFlLTA2ICAgICA5LjI2NDIyOWUt MDkgICAgICAgICAgICAgIG5hbgorICAgICAzLjA0ODMyM2UtMDQgICAgIDEu NTIzODk4ZS0wNyAgICAgMS40NTA2OTdlLTEwICAgICAzLjIxMTg3NWUtMTMK KworVGhlIGZpbmFsIGVzdGltYXRlIGlzIDAuNzMxNjg4ODY4ODczCmRpZmYg LS1naXQgYS9kb2Mvc3VtLnRleGkgYi9kb2Mvc3VtLnRleGkKaW5kZXggZjA2 ZGM0NC4uNGM5MjBiMyAxMDA2NDQKLS0tIGEvZG9jL3N1bS50ZXhpCisrKyBi L2RvYy9zdW0udGV4aQpAQCAtNCwyMSArNCwzNCBAQAogQGNpbmRleCB1LXRy YW5zZm9ybSBmb3Igc2VyaWVzCiBAY2luZGV4IExldmluIHUtdHJhbnNmb3Jt CiBAY2luZGV4IGNvbnZlcmdlbmNlLCBhY2NlbGVyYXRpbmcgYSBzZXJpZXMK K0BjaW5kZXggZXh0cmFwb2xhdGlvbiwgUmljaGFyZHNvbgorQGNpbmRleCBS aWNoYXJkc29uIGV4dHJhcG9sYXRpb24KIAotVGhlIGZ1bmN0aW9ucyBkZXNj cmliZWQgaW4gdGhpcyBjaGFwdGVyIGFjY2VsZXJhdGUgdGhlIGNvbnZlcmdl bmNlIG9mIGEKLXNlcmllcyB1c2luZyB0aGUgTGV2aW4gQG1hdGh7dX0tdHJh bnNmb3JtLiAgVGhpcyBtZXRob2QgdGFrZXMgYSBzbWFsbCBudW1iZXIgb2YK LXRlcm1zIGZyb20gdGhlIHN0YXJ0IG9mIGEgc2VyaWVzIGFuZCB1c2VzIGEg c3lzdGVtYXRpYyBhcHByb3hpbWF0aW9uIHRvCi1jb21wdXRlIGFuIGV4dHJh cG9sYXRlZCB2YWx1ZSBhbmQgYW4gZXN0aW1hdGUgb2YgaXRzIGVycm9yLiAg VGhlCitUaGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiB0aGlzIGNoYXB0ZXIg YWNjZWxlcmF0ZSB0aGUgY29udmVyZ2VuY2Ugb2YgYSBzZXJpZXMuCitUd28g bWV0aG9kcyBhcmUgcHJvdmlkZWQuCisKK1RoZSBmaXJzdCBtZXRob2QgdXNl cyB0aGUgTGV2aW4gQG1hdGh7dX0tdHJhbnNmb3JtLiAgVGhpcyBtZXRob2Qg dGFrZXMgYSBzbWFsbAorbnVtYmVyIG9mIHRlcm1zIGZyb20gdGhlIHN0YXJ0 IG9mIGEgc2VyaWVzIGFuZCB1c2VzIGEgc3lzdGVtYXRpYyBhcHByb3hpbWF0 aW9uCit0byBjb21wdXRlIGFuIGV4dHJhcG9sYXRlZCB2YWx1ZSBhbmQgYW4g ZXN0aW1hdGUgb2YgaXRzIGVycm9yLiAgVGhlCiBAbWF0aHt1fS10cmFuc2Zv cm0gd29ya3MgZm9yIGJvdGggY29udmVyZ2VudCBhbmQgZGl2ZXJnZW50IHNl cmllcywgaW5jbHVkaW5nCiBhc3ltcHRvdGljIHNlcmllcy4KIAotVGhlc2Ug ZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBpbiB0aGUgaGVhZGVyIGZpbGUgQGZp bGV7Z3NsX3N1bS5ofS4KK1RoZSBzZWNvbmQgbWV0aG9kIGlzIFJpY2hhcmRz b24gZXh0cmFwb2xhdGlvbi4gIFRoaXMgbWV0aG9kIGNvbWJpbmVzIGVzdGlt YXRlcword2l0aCBrbm93biBsZWFkaW5nIG9yZGVyIGVycm9ycyB0byBwcm9k dWNlIGEgcmVzdWx0IHdpdGggaGlnaGVyIG9yZGVyIGFjY3VyYWN5Cit0aGFu IGFueSBvZiB0aGUgZXN0aW1hdGVzLiAgSXQgaXMgd2VsbCBzdWl0ZWQgdG8g cHJvYmxlbXMgd2hlcmUgVGF5bG9yCitleHBhbnNpb24tYmFzZWQgZXJyb3Ig ZXN0aW1hdGVzIGFyZSBhdmFpbGFibGUsIGZvciBleGFtcGxlLCBmaW5pdGUg ZGlmZmVyZW5jZQordGVjaG5pcXVlcy4KKworVGhlc2UgZnVuY3Rpb25zIGFy ZSBkZWNsYXJlZCBpbiB0aGUgaGVhZGVyIGZpbGVzIEBmaWxle2dzbF9zdW0u aH0gYW5kCitAZmlsZXtnc2xfZXh0cmFwLmh9LgogCiBAbWVudQotKiBBY2Nl bGVyYXRpb24gZnVuY3Rpb25zOjogICAgICAKLSogQWNjZWxlcmF0aW9uIGZ1 bmN0aW9ucyB3aXRob3V0IGVycm9yIGVzdGltYXRpb246OiAgCi0qIEV4YW1w bGUgb2YgYWNjZWxlcmF0aW5nIGEgc2VyaWVzOjogIAotKiBTZXJpZXMgQWNj ZWxlcmF0aW9uIFJlZmVyZW5jZXM6OiAgCisqIEFjY2VsZXJhdGlvbiBmdW5j dGlvbnM6OgorKiBBY2NlbGVyYXRpb24gZnVuY3Rpb25zIHdpdGhvdXQgZXJy b3IgZXN0aW1hdGlvbjo6CisqIEV4YW1wbGUgb2YgYWNjZWxlcmF0aW5nIGEg c2VyaWVzOjoKKyogUmljaGFyZHNvbiBleHRyYXBvbGF0aW9uOjoKKyogRXhh bXBsZSBvZiBSaWNoYXJkc29uIGV4dHJhcG9sYXRpb246OgorKiBTZXJpZXMg QWNjZWxlcmF0aW9uIFJlZmVyZW5jZXM6OgogQGVuZCBtZW51CiAKIEBub2Rl IEFjY2VsZXJhdGlvbiBmdW5jdGlvbnMKQEAgLTI2LDcgKzM5LDcgQEAgVGhl c2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBpbiB0aGUgaGVhZGVyIGZpbGUg QGZpbGV7Z3NsX3N1bS5ofS4KIAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMg Y29tcHV0ZSB0aGUgZnVsbCBMZXZpbiBAbWF0aHt1fS10cmFuc2Zvcm0gb2Yg YSBzZXJpZXMKIHdpdGggaXRzIGVycm9yIGVzdGltYXRlLiAgVGhlIGVycm9y IGVzdGltYXRlIGlzIGNvbXB1dGVkIGJ5IHByb3BhZ2F0aW5nCi1yb3VuZGlu ZyBlcnJvcnMgZnJvbSBlYWNoIHRlcm0gdGhyb3VnaCB0byB0aGUgZmluYWwg ZXh0cmFwb2xhdGlvbi4gCityb3VuZGluZyBlcnJvcnMgZnJvbSBlYWNoIHRl cm0gdGhyb3VnaCB0byB0aGUgZmluYWwgZXh0cmFwb2xhdGlvbi4KIAogVGhl c2UgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCBmb3Igc3VtbWluZyBhbmFseXRp YyBzZXJpZXMgd2hlcmUgZWFjaCB0ZXJtCiBpcyBrbm93biB0byBoaWdoIGFj Y3VyYWN5LCBhbmQgdGhlIHJvdW5kaW5nIGVycm9ycyBhcmUgYXNzdW1lZCB0 bwpAQCAtNjAsNyArNzMsNyBAQCBlc3RpbWF0ZSBvZiB0aGUgYWJzb2x1dGUg ZXJyb3Igc3RvcmVkIGluIEB2YXJ7YWJzZXJyfS4gIFRoZSBhY3R1YWwKIHRl cm0tYnktdGVybSBzdW0gaXMgcmV0dXJuZWQgaW4gQGNvZGV7dy0+c3VtX3Bs YWlufS4gVGhlIGFsZ29yaXRobQogY2FsY3VsYXRlcyB0aGUgdHJ1bmNhdGlv biBlcnJvciAodGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gc3VjY2Vzc2l2 ZQogZXh0cmFwb2xhdGlvbnMpIGFuZCByb3VuZC1vZmYgZXJyb3IgKHByb3Bh Z2F0ZWQgZnJvbSB0aGUgaW5kaXZpZHVhbAotdGVybXMpIHRvIGNob29zZSBh biBvcHRpbWFsIG51bWJlciBvZiB0ZXJtcyBmb3IgdGhlIGV4dHJhcG9sYXRp b24uICAKK3Rlcm1zKSB0byBjaG9vc2UgYW4gb3B0aW1hbCBudW1iZXIgb2Yg dGVybXMgZm9yIHRoZSBleHRyYXBvbGF0aW9uLgogQWxsIHRoZSB0ZXJtcyBv ZiB0aGUgc2VyaWVzIHBhc3NlZCBpbiB0aHJvdWdoIEB2YXJ7YXJyYXl9IHNo b3VsZCBiZSBub24temVyby4KIEBlbmQgZGVmdHlwZWZ1bgogCkBAIC0xMTEs NyArMTI0LDcgQEAgdHJ1bmNhdGlvbiBlcnJvciwgc21vb3RoaW5nIG91dCBh bnkgZmx1Y3R1YXRpb25zLgogCiAKIEBub2RlIEV4YW1wbGUgb2YgYWNjZWxl cmF0aW5nIGEgc2VyaWVzCi1Ac2VjdGlvbiBFeGFtcGxlcworQHNlY3Rpb24g RXhhbXBsZSBvZiBhY2NlbGVyYXRpbmcgYSBzZXJpZXMKIAogVGhlIGZvbGxv d2luZyBjb2RlIGNhbGN1bGF0ZXMgYW4gZXN0aW1hdGUgb2YgQG1hdGh7XHpl dGEoMikgPSBccGleMiAvIDZ9CiB1c2luZyB0aGUgc2VyaWVzLApAQCAtMTM4 LDI4ICsxNTEsMTIwIEBAIHN1bW1hdGlvbiBvZiB0aGUgc2VyaWVzIGNvbnZl cmdlIHNsb3dseS4KIEBlbmQgZXhhbXBsZQogCiBAbm9pbmRlbnQKLVRoZSBv dXRwdXQgYmVsb3cgc2hvd3MgdGhhdCB0aGUgTGV2aW4gQG1hdGh7dX0tdHJh bnNmb3JtIGlzIGFibGUgdG8gb2J0YWluIGFuIAotZXN0aW1hdGUgb2YgdGhl IHN1bSB0byAxIHBhcnQgaW4gCitUaGUgb3V0cHV0IGJlbG93IHNob3dzIHRo YXQgdGhlIExldmluIEBtYXRoe3V9LXRyYW5zZm9ybSBpcyBhYmxlIHRvIG9i dGFpbiBhbgorZXN0aW1hdGUgb2YgdGhlIHN1bSB0byAxIHBhcnQgaW4KIEBj eyQxMF57MTB9JH0KIEBtYXRoezEwXjEwfSB1c2luZyB0aGUgZmlyc3QgZWxl dmVuIHRlcm1zIG9mIHRoZSBzZXJpZXMuICBUaGUKIGVycm9yIGVzdGltYXRl IHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbiBpcyBhbHNvIGFjY3VyYXRlLCBn aXZpbmcKLXRoZSBjb3JyZWN0IG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdp dHMuIAordGhlIGNvcnJlY3QgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0 cy4KIAogQGV4YW1wbGUKLSQgLi9hLm91dCAKKyQgLi9hLm91dAogQHZlcmJh dGltaW5jbHVkZSBleGFtcGxlcy9zdW0ub3V0CiBAZW5kIGV4YW1wbGUKIAog QG5vaW5kZW50Ci1Ob3RlIHRoYXQgYSBkaXJlY3Qgc3VtbWF0aW9uIG9mIHRo aXMgc2VyaWVzIHdvdWxkIHJlcXVpcmUgCitOb3RlIHRoYXQgYSBkaXJlY3Qg c3VtbWF0aW9uIG9mIHRoaXMgc2VyaWVzIHdvdWxkIHJlcXVpcmUKIEBjeyQx MF57MTB9JH0KLUBtYXRoezEwXjEwfSB0ZXJtcyB0byBhY2hpZXZlIHRoZSBz YW1lIHByZWNpc2lvbiBhcyB0aGUgYWNjZWxlcmF0ZWQgCitAbWF0aHsxMF4x MH0gdGVybXMgdG8gYWNoaWV2ZSB0aGUgc2FtZSBwcmVjaXNpb24gYXMgdGhl IGFjY2VsZXJhdGVkCiBzdW0gZG9lcyBpbiAxMyB0ZXJtcy4KIAorQG5vZGUg UmljaGFyZHNvbiBleHRyYXBvbGF0aW9uCitAc2VjdGlvbiBSaWNoYXJkc29u IGV4dHJhcG9sYXRpb24KKworUmljaGFyZHNvbiBleHRyYXBvbGF0aW9uIGVz dGltYXRlcyBzb21lIHZhbHVlIEBtYXRoe0EgPSBsaW0gQShoKX0gdGhlb3Jl dGljYWxseQorb2J0YWluYWJsZSBhcyBAbWF0aHtofSBnb2VzIHRvIEBtYXRo ezB9LiAgSGVyZSBAbWF0aHtBKGgpfSBpcyBhbiBlc3RpbWF0ZSBvZgorb3Jk ZXIgQG1hdGh7aF57a19pfX0gc3VjaCB0aGF0IEBtYXRoe0EgLSBBKGgpID0g YV9pKmheKGtfaSkgKyBPKGheKGtfKGkrMSkpKX0KK3doZXJlIEBtYXRoe2Ff aX0gaXMgbm9uemVybyBhbmQgQG1hdGh7bSA+IG59LiAgICBQcmFjdGljYWxs eSwgb25lIG1heSBub3QgYmUKK2FibGUgdG8gY29tcHV0ZSB0aGlzIGxpbWl0 IGRpcmVjdGx5IGJlY2F1c2UgaXQgZWl0aGVyIHJlcXVpcmVzIGxhcmdlCitj b21wdXRhdGlvbmFsIGNvc3Qgb3IgYmVjYXVzZSBudW1lcmljYWwgdHJ1bmNh dGlvbiBlcnJvciBkb21pbmF0ZXMgYXMgQG1hdGh7aH0KK2JlY29tZXMgc21h bGwuICBUaGUgdGVjaG5pcXVlIHBlcmZvcm1zIHNlcmllcyBhY2NlbGVyYXRp b24gaW4gdGhlIHNlbnNlIHRoYXQKK2Zyb20gYXBwcm94aW1hdGlvbnMgQG1h dGh7QV9pKGgpfSwgQG1hdGh7QV9pKGgvdCl9LCBAbWF0aHtBX2koaC90XjIp fSwKK0BtYXRoey4uLn0gb25lIG1heSBvYnRhaW4gYW4gZXN0aW1hdGUgb2Yg aGlnaGVyIG9yZGVyIHRoYW4gYW55IGtub3duIGVzdGltYXRlCitpbiB0aGUg c2VxdWVuY2UuCisKK0luIGEgUmljaGFyZHNvbiBleHRyYXBvbGF0aW9uIHN0 ZXAgdHdvIGVzdGltYXRlcyBAbWF0aHtBX2koaCl9IGFuZAorQG1hdGh7QV9p KGgvdCl9IGFyZSBjb21iaW5lZCB0byBmaW5kIGFuIGVzdGltYXRlIG9mIG9y ZGVyIEBtYXRoe2hee2tfKGkrMSl9fQorYWNjb3JkaW5nIHRvIEBtYXRoe0Ff KGkrMSkoaCkgPSBBX2koaC90KSArICh0Xm4gLSAxKV4oLTEpKihBX2koaC90 KSAtIEFfaShoKSl9LgorTm90ZSB0aGF0IHRoaXMgZGlkIG5vdCByZXF1aXJl IGtub3dpbmcgdGhlIGxlYWRpbmcgY29lZmZpY2llbnQgQG1hdGh7YV9pfSwg b25seQordGhlIGxlYWRpbmcgZXJyb3Igb3JkZXIgQG1hdGh7a19pfS4gIE9u ZSBzdWNoIHN0ZXAgbWF5IGJlIGNvbXB1dGVkIHVzaW5nCitAY29kZXtnc2xf ZXh0cmFwX3JpY2hhcmRzb25fc3RlcH0uICBUaGUgcHJvY2VzcyBjYW4gYmUg aXRlcmF0ZWQgdG8gY29tYmluZQorQG1hdGh7QV8oaSsxKShoKX0gYW5kIEBt YXRoe0FfKGkrMSkoaC90KX0gdG8gb2J0YWluIEBtYXRoe0FfKGkrMikoaCl9 LiAgVGhlCitpdGVyYXRlZCBwcm9jZXNzLCBhcyB3ZWxsIGFzIGNvbnZlbmll bmNlIG1lY2hhbmlzbSB0byBjb21wdXRlIGVycm9yIG5vcm1zIGdpdmVuCith IGtub3duIHNvbHV0aW9uLCBjYW4gYmUgcGVyZm9ybWVkIHVzaW5nIHVzaW5n IEBjb2Rle2dzbF9leHRyYXBfcmljaGFyZHNvbn0uCisKK0BkZWZ0eXBlZnVu IHtpbnR9IGdzbF9leHRyYXBfcmljaGFyZHNvbl9zdGVwICggZ3NsX3ZlY3Rv ciAqIEB2YXJ7QWh9LCBjb25zdCBnc2xfdmVjdG9yICogQHZhcntBaHR9LCBj b25zdCBkb3VibGUgQHZhcnt0fSwgY29uc3QgZG91YmxlIEB2YXJ7a2l9KQor R2l2ZW4gQG1hdGh7QV9pKGgpfSwgYW4gYXBwcm94aW1hdGlvbiBvZiBAbWF0 aHtBfSBzdWNoIHRoYXQgQG1hdGh7QSAtIEEoaCkgPQorYV9pKmhea19pICsg YV8oaSsxKSpoXmtfKGkrMSkgKyAuLi59IHVzZSBSaWNoYXJkc29uIGV4dHJh cG9sYXRpb24gdG8KK2ZpbmQgYW4gYXBwcm94aW1hdGlvbiB0byBsZWFkaW5n IG9yZGVyIEBtYXRoe2tfKGkrMSl9IGZyb20gZXZhbHVhdGlvbnMgYXQKK0Bt YXRoe0FfaShoKX0gYW5kIEBtYXRoe0FfaShoL3QpfSBmb3IgQG1hdGh7dCA+ IDB9LgorCitPbiBlbnRyeSwgQHZhcntBaH0gY29udGFpbnMgdGhlIGNvYXJz ZXIgYXBwcm94aW1hdGlvbiBAbWF0aHtBX2koaCl9IGFuZAorQHZhcntBaHR9 IGNvbnRhaW5zIHRoZSBmaW5lciBhcHByb3hpbWF0aW9uIEBtYXRoe0FfaSho L3QpfS4gIEB2YXJ7a2l9IGlzCitAbWF0aHtrX2l9LCB0aGUgbGVhZGluZyB0 ZXJtIG9yZGVyIGluIHRoZSBUYXlvciBleHBhbnNpb24sIGFuZCBAdmFye3R9 IGlzIHRoZQorcmVmaW5lbWVudCBmYWN0b3IgYmV0d2VlbiB0aGUgdHdvIGFw cHJveGltYXRpb25zLgorCitPbiBzdWNjZXNzLCB0aGUgbWV0aG9kIHJldHVy bnMgQGNvZGV7R1NMX1NVQ0NFU1N9LiAgT24gc3VjY2Vzc2Z1bCBleGl0LAor QHZhcntBaH0gY29udGFpbnMgdGhlIGV4dHJhcG9sYXRlZCBhcHByb3hpbWF0 aW9uIEBtYXRoe0FfKGkrMSkoaCl9LiAgT24gZXJyb3IsCit0aGUgbWV0aG9k IGNhbGxzIEBjb2Rle2dzbF9lcnJvcn0gYW5kIHJldHVybnMgb24gb2YgR1NM J3MgZXJyb3IgY29uc3RhbnRzLiAgVGhlCitwYXJhbWV0ZXIgQHZhcntBaH0g d2lsbCBiZSBpbiBhbiB1bmRlZmluZWQgc3RhdGUgYWZ0ZXIgYW55IGVycm9y LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHtpbnR9IGdzbF9l eHRyYXBfcmljaGFyZHNvbiAoIGdzbF9tYXRyaXggKiBjb25zdCBAdmFye0F9 LCBjb25zdCBkb3VibGUgQHZhcnt0fSwgY29uc3QgZ3NsX3ZlY3RvciAqIEB2 YXJ7a30sIGdzbF9tYXRyaXggKiBAdmFye25vcm10YWJsZX0sIGNvbnN0IGdz bF92ZWN0b3IgKiBjb25zdCBAdmFye2V4YWN0fSkKK1BlcmZvcm0gUmljaGFy ZHNvbiBleHRyYXBvbGF0aW9uIG9uIGEgc2VxdWVuY2Ugb2YgcmVmaW5lZCBh cHByb3hpbWF0aW9ucy4KK1RoZSByb3V0aW5lIGNhbiBwZXJmb3JtIG11bHRp cGxlIHN0ZXAgZXh0cmFwb2xhdGlvbiwgZS5nLiB1c2luZworQG1hdGh7QV8w KGgpfSwgQG1hdGh7QV8wKGgvMil9LCBhbmQgQG1hdGh7QV8wKGgvNCl9IHRv IGNvbXB1dGUgQG1hdGh7QV8yKGgpfS4KK1NlZSBAY29kZXtnc2xfZXh0cmFw X3JpY2hhcmRzb25fc3RlcH0gZm9yIHRoZSB0ZXJtaW5vbG9neSBpbiB1c2Uu CisKK09uIGVudHJ5LCBjb2x1bW4gQG1hdGh7aX0gb2YgQHZhcntBfSBjb250 YWlucyBAbWF0aHtBXzAoaC90XmkpfSB3aGlsZSBAdmFye3R9Citjb250YWlu cyB0aGUgcmVmaW5lbWVudCBmYWN0b3IgYmV0d2VlbiBlYWNoIHBhaXIgb2Yg YXBwcm94aW1hdGlvbnMuICBUaGUKK3JlZmluZW1lbnQgZmFjdG9yIG11c3Qg YmUgZml4ZWQgZm9yIGFsbCBjb2x1bW5zLiAgVGhlIGxlYWRpbmcgZXJyb3Ig dGVybSBvcmRlcnMKK2FyZSBwcm92aWRlZCBpbiBAdmFye2t9LiAgVGhleSBh cmUgYXNzdW1lZCB0byBzdGFydCBhdCAxIGlmIEB2YXJ7a30gaXMKK0Bjb2Rl e05VTEx9LiAgVGhleSBhcmUgYXNzdW1lZCB0byBpbmNyZW1lbnQgYnkgMSBp ZiBubyBzZWNvbmQgZWxlbWVudCBpcworcHJvdmlkZWQuICBJZiB0aGUgdmVj dG9yIEB2YXJ7a30gaXMgc2hvcnRlciB0aGFuIEBjb2Rle0EtPnNpemUyfSwg YW55Cit1bnNwZWNpZmllZCBoaWdoZXIgaW5kZXggZW50cmllcyBhcmUgYXNz dW1lZCB0byBncm93IGJ5CitAY29kZXtnc2xfdmVjdG9yX2dldChrLGstPnNp emUtMSkgLSBnc2xfdmVjdG9yX2dldChrLGstPnNpemUtMil9LgorCitJZiBA dmFye25vcm10YWJsZX0gaXMgbm9uLUBjb2Rle05VTEx9IG9uIGVudHJ5LCB0 aGUgcm91dGluZSBwcm9kdWNlcyBpbgorQHZhcntub3JtdGFibGV9IGEgdGFi bGUgc2hvd2luZyB0aGUgQG1hdGh7bF8yfSBlcnJvciBhdCBlYWNoIHN0ZXAg aW4gdGhlCitleHRyYXBvbGF0aW9uIHByb2Nlc3MgY2FsY3VsYXRlZCBhZ2Fp bnN0IHRoZSBwcm92aWRlZCBleGFjdCBzb2x1dGlvbiBpbgorQHZhcntleGFj dH0uICBJZiBAdmFye2V4YWN0fSBpcyBAY29kZXtOVUxMfSB0aGVuIGl0IGlz IHRyZWF0ZWQgYXMgYXMgdGhlIHplcm8KK3ZlY3RvciBhbmQgdGhlIHJlc3Vs dGluZyBAdmFye25vcm10YWJsZX0gc2ltcGx5IGNvbnRhaW5zIHRoZSBAbWF0 aHtsXzJ9IG5vcm0gb2YKK2VhY2ggZXh0cmFwb2xhdGlvbiBzdGVwLgorCitP biBzdWNjZXNzLCB0aGUgbWV0aG9kIHJldHVybnMgQGNvZGV7R1NMX1NVQ0NF U1N9LiAgT24gc3VjY2Vzc2Z1bCBleGl0LCBjb2x1bW4KKzAgb2YgQHZhcntB fSBjb250YWlucyBAbWF0aHtBXyhBLT5zaXplMikoaCl9IGFuZCBhbGwgb3Ro ZXIgY29sdW1ucyB3aWxsIGhhdmUKK2JlZW4gb3ZlcndyaXR0ZW4gd2l0aCB0 ZW1wb3JhcnkgcmVzdWx0cy4gIElmIHByb3ZpZGVkLCBAdmFye25vcm10YWJs ZX0gd2lsbCBiZQorbW9kaWZpZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiAgT24g ZXJyb3IgdGhlIG1ldGhvZCBjYWxscyBAY29kZXtnc2xfZXJyb3J9IGFuZAor cmV0dXJucyBvbmUgb2YgR1NMJ3MgZXJyb3IgY29kZXMuICBUaGUgcGFyYW1l dGVycyBAdmFye0F9IGFuZCBAdmFye25vcm10YWJsZX0KK3dpbGwgYmUgaW4g YW4gdW5kZWZpbmVkIHN0YXRlIGFmdGVyIGFueSBlcnJvci4KK0BlbmQgZGVm dHlwZWZ1bgorCitAbm9kZSBFeGFtcGxlIG9mIFJpY2hhcmRzb24gZXh0cmFw b2xhdGlvbgorQHNlY3Rpb24gRXhhbXBsZSBvZiBSaWNoYXJkc29uIGV4dHJh cG9sYXRpb24KKworU3VwcG9zZSwgaHlwb3RoZXRpY2FsbHksIHlvdSB3YW50 ZWQgdG8gY29tcHV0ZSB0aGUgZGVyaXZhdGl2ZSBvZiBAbWF0aHtzaW4oeCl9 CithY2N1cmF0ZSB0byBhIGhpZ2ggb3JkZXIgYnV0IHlvdSBvbmx5IGtuZXcg dGhlIGNlbnRyYWwgZGlmZmVyZW5jZSBmb3JtdWxhCitAbWF0aHtmJyh4KSA9 IChmKHgraCkgLSBmKHgtaCkpLygyKmgpICsgTyhoXjIpICsgTyhoXjQpICsg Li4ufS4gIFVzaW5nCitldmFsdWF0aW9ucyBmb3IgQG1hdGh7aH0sIEBtYXRo e2gvMn0sIEBtYXRoe2gvMl4yfSwgQG1hdGh7Li4ufSB5b3UgY2FuIG9idGFp biBhCittdWNoIGhpZ2hlciBvcmRlciBlc3RpbWF0ZSBvZiB0aGUgZGVyaXZh dGl2ZToKKworQGV4YW1wbGUKK0B2ZXJiYXRpbWluY2x1ZGUgZXhhbXBsZXMv cmljaGFyZHNvbi5jCitAZW5kIGV4YW1wbGUKKworVGhlIGZvbGxvd2luZyBv dXRwdXQgaXMgcHJvZHVjZWQ6CisKK0BleGFtcGxlCiskIC4vYS5vdXQKK0B2 ZXJiYXRpbWluY2x1ZGUgZXhhbXBsZXMvcmljaGFyZHNvbi5vdXQKK0BlbmQg ZXhhbXBsZQorCiBAbm9kZSBTZXJpZXMgQWNjZWxlcmF0aW9uIFJlZmVyZW5j ZXMKIEBzZWN0aW9uIFJlZmVyZW5jZXMgYW5kIEZ1cnRoZXIgUmVhZGluZwog Ci1UaGUgYWxnb3JpdGhtcyB1c2VkIGJ5IHRoZXNlIGZ1bmN0aW9ucyBhcmUg ZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgcGFwZXJzLAorVGhlIGFsZ29y aXRobXMgdXNlZCBieSB0aGUgQG1hdGh7dX0tdHJhbnNmb3JtIGZ1bmN0aW9u cyBhcmUgZGVzY3JpYmVkIGluCit0aGUgZm9sbG93aW5nIHBhcGVycywKIAog QGl0ZW1pemUgQGFzaXMKIEBpdGVtCkBAIC0xODYsMyArMjkxLDM5IEBAIEEg cmV2aWV3IHBhcGVyIG9uIHRoZSBMZXZpbiBUcmFuc2Zvcm0gaXMgYXZhaWxh YmxlIG9ubGluZSwKIEhlcmJlcnQgSC4gSC4gSG9tZWllciwgU2NhbGFyIExl dmluLVR5cGUgU2VxdWVuY2UgVHJhbnNmb3JtYXRpb25zLAogQHVyZWZ7aHR0 cDovL2FyeGl2Lm9yZy9hYnMvbWF0aC8wMDA1MjA5fS4KIEBlbmQgaXRlbWl6 ZQorCitAbm9pbmRlbnQKK0luZm9ybWF0aW9uIG9uIFJpY2hhcmRzb24gZXh0 cmFwb2xhdGlvbiBjYW4gYmUgZm91bmQgaW4gbmVhcmx5IGFueQoraW50cm9k dWN0b3J5IG51bWVyaWNhbCBhbmFseXNpcyB0ZXh0IG9yIG9ubGluZS4KK09u ZSB0ZXh0IHByb3ZpZGluZyBpbmZvcm1hdGlvbiBpcworQGl0ZW1pemUgYXNp cworQGl0ZW0KK0RhdmlkIEtpbmNhaWQgYW5kIFdhcmQgQ2hlbmV5LCBAY2l0 ZXtOdW1lcmljYWwgQW5hbHlzaXM6IE1hdGhlbWF0aWNzIG9mCitTY2llbnRp ZmljIENvbXB1dGluZ30gKDIwMDkpLCBBTVMsIElTQk4gOTc4MDgyMTg0Nzg4 Ni4KK0BlbmQgaXRlbWl6ZQorCitAbm9pbmRlbnQKK1RoZSBicmllZiBpbnRy b2R1Y3Rpb24gZ2l2ZW4gaW4gdGhpcyBtYW51YWwgdXNlcwordGhlIGZvbGxv d2luZyBXaWtpcGVkaWEgYm90aCBmb3IgY29udGVudCBhbmQgdG8gZml4IG5v dGF0aW9uOgorQGl0ZW1pemUgYXNpcworQGl0ZW0KK1dpa2lwZWRpYTogUmlj aGFyZHNvbiBleHRyYXBvbGF0aW9uLAorQHVyZWZ7aHR0cDovL2VuLndpa2lw ZWRpYS5vcmcvd2lraS9SaWNoYXJkc29uX2V4dHJhcG9sYXRpb259LgorQGVu ZCBpdGVtaXplCisKK0Bub2luZGVudAorVGhlIG9yaWdpbmFsIHdvcmsgYnkg UmljaGFyZHNvbiBhcHBlYXJlZCBpbgorQGl0ZW1pemUgYXNpcworQGl0ZW0K K1JpY2hhcmRzb24sIEwuIEYuLAorIlRoZSBhcHByb3hpbWF0ZSBhcml0aG1l dGljYWwgc29sdXRpb24gYnkgZmluaXRlIGRpZmZlcmVuY2VzIG9mIHBoeXNp Y2FsIHByb2JsZW1zIGluY2x1ZGluZyBkaWZmZXJlbnRpYWwgZXF1YXRpb25z LCB3aXRoIGFuIGFwcGxpY2F0aW9uIHRvIHRoZSBzdHJlc3NlcyBpbiBhIG1h c29ucnkgZGFtIiwKK0BjaXRle1BoaWxvc29waGljYWwgVHJhbnNhY3Rpb25z IG9mIHRoZSBSb3lhbCBTb2NpZXR5IG9mIExvbmRvbn0sCitTZXJpZXMgQSAy MTA6IDMwNy0tMzU3LCAxOTExLAorQHVyZWZ7ZG9pOjEwLjEwOTgvcnN0YS4x OTExLjAwMDl9LgorQGl0ZW0KK1JpY2hhcmRzb24sIEwuIEYuLAorIlRoZSBk ZWZlcnJlZCBhcHByb2FjaCB0byB0aGUgbGltaXQiLAorQGNpdGV7UGhpbG9z b3BoaWNhbCBUcmFuc2FjdGlvbnMgb2YgdGhlIFJveWFsIFNvY2lldHkgb2Yg TG9uZG9ufSwKK1NlcmllcyBBIDIyNjogMjk5LS0zNDksIDE5MjcsCitAdXJl Zntkb2k6MTAuMTA5OC9yc3RhLjE5MjcuMDAwOH0uCitAZW5kIGl0ZW1pemUK ZGlmZiAtLWdpdCBhL2V4dHJhcC9DaGFuZ2VMb2cgYi9leHRyYXAvQ2hhbmdl TG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODNh YjQKLS0tIC9kZXYvbnVsbAorKysgYi9leHRyYXAvQ2hhbmdlTG9nCkBAIC0w LDAgKzEsMyBAQAorMjAwOS0xMi0xMyAgUmh5cyBVbGVyaWNoICA8cmh5cy51 bGVyaWNoQGdtYWlsLmNvbT4KKworCSogYWRkZWQgYnVpbGQgc3RydWN0dXJl IGFuZCBSaWNoYXJkc29uIGV4dHJhcG9sYXRpb24KZGlmZiAtLWdpdCBhL2V4 dHJhcC9NYWtlZmlsZS5hbSBiL2V4dHJhcC9NYWtlZmlsZS5hbQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTU4ODBkCi0tLSAvZGV2 L251bGwKKysrIGIvZXh0cmFwL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjAg QEAKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYmdzbGV4dHJhcC5sYQorCitw a2dpbmNsdWRlX0hFQURFUlMgPSBnc2xfZXh0cmFwLmgKKworSU5DTFVERVMg PSAtSSQodG9wX3NyY2RpcikKKworbGliZ3NsZXh0cmFwX2xhX1NPVVJDRVMg PSByaWNoYXJkc29uLmMKKworbm9pbnN0X0hFQURFUlMgPQorCitURVNUUyA9 ICQoY2hlY2tfUFJPR1JBTVMpCitjaGVja19QUk9HUkFNUyA9ICMgQXBwZW5k IGJlbG93CisKK2NoZWNrX1BST0dSQU1TICs9IHRlc3RfcmljaGFyZHNvbgor dGVzdF9yaWNoYXJkc29uX1NPVVJDRVMgPSB0ZXN0X3JpY2hhcmRzb24uYwor dGVzdF9yaWNoYXJkc29uX0xEQUREID0gbGliZ3NsZXh0cmFwLmxhIC4uL3Zl Y3Rvci9saWJnc2x2ZWN0b3IubGEgIC4uL21hdHJpeC9saWJnc2xtYXRyaXgu bGEgIC4uL2Jsb2NrL2xpYmdzbGJsb2NrLmxhIC4uL2llZWUtdXRpbHMvbGli Z3NsaWVlZXV0aWxzLmxhIC4uL2Vyci9saWJnc2xlcnIubGEgLi4vYmxhcy9s aWJnc2xibGFzLmxhIC4uL2NibGFzL2xpYmdzbGNibGFzLmxhIC4uL3Rlc3Qv bGliZ3NsdGVzdC5sYSAuLi9zeXMvbGliZ3Nsc3lzLmxhCisKK25vaW5zdF9Q Uk9HUkFNUyA9IGRlbW9fcmljaGFyZHNvbgorZGVtb19yaWNoYXJkc29uX1NP VVJDRVMgPSBkZW1vX3JpY2hhcmRzb24uYworZGVtb19yaWNoYXJkc29uX0xE QUREID0gbGliZ3NsZXh0cmFwLmxhIC4uL3ZlY3Rvci9saWJnc2x2ZWN0b3Iu bGEgIC4uL21hdHJpeC9saWJnc2xtYXRyaXgubGEgIC4uL2Jsb2NrL2xpYmdz bGJsb2NrLmxhIC4uL2llZWUtdXRpbHMvbGliZ3NsaWVlZXV0aWxzLmxhIC4u L2Vyci9saWJnc2xlcnIubGEgLi4vYmxhcy9saWJnc2xibGFzLmxhIC4uL2Ni bGFzL2xpYmdzbGNibGFzLmxhIC4uL3Rlc3QvbGliZ3NsdGVzdC5sYSAuLi9z eXMvbGliZ3Nsc3lzLmxhCmRpZmYgLS1naXQgYS9leHRyYXAvZGVtb19yaWNo YXJkc29uLmMgYi9leHRyYXAvZGVtb19yaWNoYXJkc29uLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhNzZiYwotLS0gL2Rldi9u dWxsCisrKyBiL2V4dHJhcC9kZW1vX3JpY2hhcmRzb24uYwpAQCAtMCwwICsx LDg0IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+ CisjaW5jbHVkZSA8Z3NsL2dzbF92ZWN0b3IuaD4KKyNpbmNsdWRlIDxnc2wv Z3NsX21hdHJpeC5oPgorI2luY2x1ZGUgPGdzbC9nc2xfZXh0cmFwLmg+CisK K2NvbnN0IGRvdWJsZSBoID0gMC40OworY29uc3QgZG91YmxlIHQgPSAyLjAw OworY29uc3QgZG91YmxlIHggPSAwLjc1OworCisvKiBNZXRob2QgaGFzIHRy dW5jYXRpb24gZXJyb3IgbGlrZSBPKGheMikgKyBPKGheNCkgKyAuLi4gKi8K K2RvdWJsZSBlc3RpbWF0ZShkb3VibGUgaCkKK3sKKyAgcmV0dXJuIChzaW4o eCArIGgpIC0gc2luKHggLSBoKSkgLyAoMipoKTsKK30KKworaW50CittYWlu ICh2b2lkKQoreworICBwcmludGYoIlxuUGVyZm9ybWluZyBhIHNpbmdsZSBS aWNoYXJkc29uIGV4dHJhcG9sYXRpb24gc3RlcC4uLlxuIik7CisgIHsKKyAg ICBnc2xfdmVjdG9yICpBaCAgPSBnc2xfdmVjdG9yX2FsbG9jKDEpOworICAg IGdzbF92ZWN0b3IgKkFodCA9IGdzbF92ZWN0b3JfYWxsb2MoMSk7CisKKyAg ICBnc2xfdmVjdG9yX3NldChBaCwgIDAsIGVzdGltYXRlKGgpKTsKKyAgICBn c2xfdmVjdG9yX3NldChBaHQsIDAsIGVzdGltYXRlKGggLyB0KSk7CisKKyAg ICBwcmludGYoIkV4YWN0IHZhbHVlIGZvciAoZC9keCkgc2luKCU0ZikgPSAg JTE0LjEyZlxuIiwgeCwgY29zKHgpKTsKKyAgICBwcmludGYoIkFwcHJveGlt YXRlIHZhbHVlIGZvciBoICAgPSAlNGYgaXMgJTE0LjEyZiB3aXRoIGVycm9y ICUxNGVcbiIsCisgICAgICAgICAgIGgsIGdzbF92ZWN0b3JfZ2V0KEFoLCAw KSwgZmFicyhjb3MoeCkgLSBnc2xfdmVjdG9yX2dldChBaCwgMCkpKTsKKyAg ICBwcmludGYoIkFwcHJveGltYXRlIHZhbHVlIGZvciBoL3QgPSAlNGYgaXMg JTE0LjEyZiB3aXRoIGVycm9yICUxNGVcbiIsCisgICAgICAgICAgIGggLyB0 LCBnc2xfdmVjdG9yX2dldChBaHQsIDApLCBmYWJzKGNvcyh4KSAtIGdzbF92 ZWN0b3JfZ2V0KEFodCwgMCkpKTsKKworICAgIGdzbF9leHRyYXBfcmljaGFy ZHNvbl9zdGVwKEFoLCBBaHQsIHQsIDIuMCk7CisKKyAgICBwcmludGYoIkFm dGVyIG9uZSBleHRyYXBvbGF0aW9uIHN0ZXAgdmFsdWUgaXMgICAlMTQuMTJm IHdpdGggZXJyb3IgJTE0ZVxuIiwKKyAgICAgICAgICAgZ3NsX3ZlY3Rvcl9n ZXQoQWgsIDApLCBmYWJzKGNvcyh4KSAtIGdzbF92ZWN0b3JfZ2V0KEFoLCAw KSkpOworCisgICAgZ3NsX3ZlY3Rvcl9mcmVlKEFodCk7CisgICAgZ3NsX3Zl Y3Rvcl9mcmVlKEFoKTsKKyAgfQorCisgIHByaW50ZigiXG5QZXJmb3JtaW5n IGl0ZXJhdGVkIFJpY2hhcmRzb24gZXh0cmFwb2xhdGlvbi4uLlxuIik7Cisg IHsKKyAgICBnc2xfbWF0cml4ICpBICAgICAgICAgPSBnc2xfbWF0cml4X2Fs bG9jKDEsIDQpOworICAgIGdzbF92ZWN0b3IgKmsgICAgICAgICA9IGdzbF92 ZWN0b3JfYWxsb2MoMik7CisgICAgZ3NsX21hdHJpeCAqbm9ybXRhYmxlID0g Z3NsX21hdHJpeF9hbGxvYyhBLT5zaXplMiwgQS0+c2l6ZTIpOworICAgIGdz bF92ZWN0b3IgKmV4YWN0ICAgICA9IGdzbF92ZWN0b3JfYWxsb2MoMSk7Cisg ICAgaW50IGksIGo7CisKKyAgICBnc2xfdmVjdG9yX3NldChleGFjdCwgMCwg Y29zKHgpKTsKKworICAgIHByaW50ZigiQ29tcHV0aW5nICVkIGluaXRpYWwg ZXN0aW1hdGVzIG9mIChkL2R4KSBzaW4oJWYpXG4iLAorICAgICAgICAgICAo aW50KSBBLT5zaXplMiwgeCk7CisgICAgZm9yIChpID0gMDsgaSA8IEEtPnNp emUyOyArK2kpCisgICAgICB7CisgICAgICAgIGdzbF9tYXRyaXhfc2V0KEEs IDAsIGksIGVzdGltYXRlKGggLyBwb3codCwgaSkpKTsKKyAgICAgIH0KKwor ICAgIHByaW50ZigiVXNpbmcgbGVhZGluZyBlcnJvciB0ZXJtcyBsaWtlIE8o aF4yKSwgTyhoXjQpLCBPKGheNiksIE8oaF44KS4uLlxuIik7CisgICAgZ3Ns X3ZlY3Rvcl9zZXQoaywgMCwgMik7CisgICAgZ3NsX3ZlY3Rvcl9zZXQoaywg MSwgNCk7CisKKyAgICBnc2xfZXh0cmFwX3JpY2hhcmRzb24oQSwgdCwgaywg bm9ybXRhYmxlLCBleGFjdCk7CisKKyAgICBwcmludGYoIlRoZSBsXzIgZXJy b3IgYWZ0ZXIgZWFjaCBpdGVyYXRlZCBleHRyYXBvbGF0aW9uIHN0ZXAgaXM6 XG4iKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgQS0+c2l6ZTI7ICsraSkKKyAg ICAgIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IEEtPnNpemUyOyArK2op CisgICAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIgJTE2ZSIsIGdz bF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgaSwgaikpOworICAgICAgICAgIH0K KyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgfQorICAgIHByaW50Zigi XG5UaGUgZmluYWwgZXN0aW1hdGUgaXMgJTE0LjEyZlxuIiwgZ3NsX21hdHJp eF9nZXQoQSwgMCwgMCkpOworCisgICAgZ3NsX3ZlY3Rvcl9mcmVlKGV4YWN0 KTsKKyAgICBnc2xfbWF0cml4X2ZyZWUobm9ybXRhYmxlKTsKKyAgICBnc2xf dmVjdG9yX2ZyZWUoayk7CisgICAgZ3NsX21hdHJpeF9mcmVlKEEpOworICB9 CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9leHRyYXAvZ3NsX2V4 dHJhcC5oIGIvZXh0cmFwL2dzbF9leHRyYXAuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5iMTVlOTdlCi0tLSAvZGV2L251bGwKKysr IGIvZXh0cmFwL2dzbF9leHRyYXAuaApAQCAtMCwwICsxLDU2IEBACisvKiBl eHRyYXAvZ3NsX2V4dHJhcC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5 IFJoeXMgVWxlcmljaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg X19HU0xfRVhUUkFQX0hfXworI2RlZmluZSBfX0dTTF9FWFRSQVBfSF9fCisK KyNpbmNsdWRlIDxnc2wvZ3NsX21hdHJpeF9kb3VibGUuaD4KKyNpbmNsdWRl IDxnc2wvZ3NsX3ZlY3Rvcl9kb3VibGUuaD4KKworI3VuZGVmIF9fQkVHSU5f REVDTFMKKyN1bmRlZiBfX0VORF9ERUNMUworI2lmZGVmIF9fY3BsdXNwbHVz CisjIGRlZmluZSBfX0JFR0lOX0RFQ0xTIGV4dGVybiAiQyIgeworIyBkZWZp bmUgX19FTkRfREVDTFMgfQorI2Vsc2UKKyMgZGVmaW5lIF9fQkVHSU5fREVD TFMgLyogZW1wdHkgKi8KKyMgZGVmaW5lIF9fRU5EX0RFQ0xTIC8qIGVtcHR5 ICovCisjZW5kaWYKKworX19CRUdJTl9ERUNMUworCitpbnQKK2dzbF9leHRy YXBfcmljaGFyZHNvbl9zdGVwKAorICAgICAgICBnc2xfdmVjdG9yICogQWgs CisgICAgICAgIGNvbnN0IGdzbF92ZWN0b3IgKiBBaHQsCisgICAgICAgIGNv bnN0IGRvdWJsZSB0LAorICAgICAgICBjb25zdCBkb3VibGUga2kpOworCitp bnQKK2dzbF9leHRyYXBfcmljaGFyZHNvbigKKyAgICAgICAgZ3NsX21hdHJp eCAqIGNvbnN0IEEsCisgICAgICAgIGNvbnN0IGRvdWJsZSB0LAorICAgICAg ICBjb25zdCBnc2xfdmVjdG9yICogaywKKyAgICAgICAgZ3NsX21hdHJpeCAq IG5vcm10YWJsZSwKKyAgICAgICAgY29uc3QgZ3NsX3ZlY3RvciAqIGNvbnN0 IGV4YWN0KTsKKworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU0xf RVhUUkFQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0cmFwL3JpY2hhcmRzb24u YyBiL2V4dHJhcC9yaWNoYXJkc29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNGIyMDdjYgotLS0gL2Rldi9udWxsCisrKyBiL2V4 dHJhcC9yaWNoYXJkc29uLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qIGV4dHJh cC9nc2xfZXh0cmFwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmh5 cyBVbGVyaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdz bC9nc2xfYmxhcy5oPgorI2luY2x1ZGUgPGdzbC9nc2xfbWF0aC5oPgorI2lu Y2x1ZGUgPGdzbC9nc2xfbmFuLmg+CisjaW5jbHVkZSA8Z3NsL2dzbF9lcnJu by5oPgorI2luY2x1ZGUgPGdzbC9nc2xfZXh0cmFwLmg+CisjaW5jbHVkZSA8 Z3NsL2dzbF9tYXRyaXhfZG91YmxlLmg+CisjaW5jbHVkZSA8Z3NsL2dzbF92 ZWN0b3JfZG91YmxlLmg+CisKK2ludAorZ3NsX2V4dHJhcF9yaWNoYXJkc29u X3N0ZXAoCisgIGdzbF92ZWN0b3IgKiBBaCwKKyAgY29uc3QgZ3NsX3ZlY3Rv ciAqIEFodCwKKyAgY29uc3QgZG91YmxlIHQsCisgIGNvbnN0IGRvdWJsZSBr aSkKK3sKKyAgaWYgKGtpID09IDAuMCkKKyAgICB7CisgICAgICBHU0xfRVJS T1IoImtpID09IDAgaW52YWxpZCBhcyBpdCB3aWxsIGNhdXNlIGEgZGl2aXNp b24tYnktemVybyIsCisgICAgICAgICAgICAgICAgR1NMX0VET00pOworICAg IH0KKworICBjb25zdCBkb3VibGUgdGtpICAgICAgID0gcG93KHQsIGtpKTsK KyAgY29uc3QgZG91YmxlIGludl90a2ltMSA9IDEuMCAvICh0a2kgLSAxLjAp OworCisgIGdzbF9ibGFzX2RzY2FsKC1pbnZfdGtpbTEsIEFoKTsKKworICBp bnQgZXJyb3IgPSBnc2xfYmxhc19kYXhweSh0a2kgKiBpbnZfdGtpbTEsIEFo dCwgQWgpOworICBpZiAoZXJyb3IpIHJldHVybiBlcnJvcjsKKworICByZXR1 cm4gR1NMX1NVQ0NFU1M7Cit9CisKK2ludAorZ3NsX2V4dHJhcF9yaWNoYXJk c29uKAorICBnc2xfbWF0cml4ICogY29uc3QgQSwKKyAgY29uc3QgZG91Ymxl IHQsCisgIGNvbnN0IGdzbF92ZWN0b3IgKiBrLAorICBnc2xfbWF0cml4ICog bm9ybXRhYmxlLAorICBjb25zdCBnc2xfdmVjdG9yICogY29uc3QgZXhhY3Qp Cit7CisgIGdzbF92ZWN0b3IgKiBzY3JhdGNoID0gTlVMTDsKKyAgY29uc3Qg c2l6ZV90IGtfc2l6ZSA9IChrKSA/IGstPnNpemUgOiAwOworICBpbnQgaSwg ajsKKworICBpZiAoZXhhY3QpCisgICAgeworICAgICAgaWYgKCFub3JtdGFi bGUpCisgICAgICAgIHsKKyAgICAgICAgICBHU0xfRVJST1IoImV4YWN0IHBy b3ZpZGVkIGJ1dCBub3JtdGFibGUgd2FzIG5vdCIsCisgICAgICAgICAgICAg ICAgICAgIEdTTF9FSU5WQUwpOworICAgICAgICB9CisgICAgICBpZiAoZXhh Y3QtPnNpemUgIT0gQS0+c2l6ZTEpCisgICAgICAgIHsKKyAgICAgICAgICBH U0xfRVJST1IoImV4YWN0LT5zaXplIGRvZXMgbm90IG1hdGNoIEEtPnNpemUx IiwKKyAgICAgICAgICAgICAgICAgICAgR1NMX0VJTlZBTCk7CisgICAgICAg IH0KKyAgICB9CisKKyAgaWYgKG5vcm10YWJsZSkKKyAgICB7CisgICAgICBp ZiAobm9ybXRhYmxlLT5zaXplMSAhPSBBLT5zaXplMikKKyAgICAgICAgewor ICAgICAgICAgIEdTTF9FUlJPUigibm9ybXRhYmxlLT5zaXplMSBkb2VzIG5v dCBtYXRjaCBBLT5zaXplMiIsCisgICAgICAgICAgICAgICAgICAgIEdTTF9F SU5WQUwpOworICAgICAgICB9CisgICAgICBpZiAobm9ybXRhYmxlLT5zaXpl MiAhPSBBLT5zaXplMikKKyAgICAgICAgeworICAgICAgICAgIEdTTF9FUlJP Uigibm9ybXRhYmxlLT5zaXplMiBkb2VzIG5vdCBtYXRjaCBBLT5zaXplMiIs CisgICAgICAgICAgICAgICAgICAgIEdTTF9FSU5WQUwpOworICAgICAgICB9 CisKKyAgICAgIGdzbF9tYXRyaXhfc2V0X2FsbChub3JtdGFibGUsIEdTTF9O QU4pOworCisgICAgICAvKiBDb21wdXRlIHRoZSBmaXJzdCBjb2x1bW4gaW4g dGhlIG5vcm0gdGFibGUgKi8KKyAgICAgIGlmIChleGFjdCkKKyAgICAgICAg eworICAgICAgICAgIHNjcmF0Y2ggPSBnc2xfdmVjdG9yX2FsbG9jKEEtPnNp emUxKTsKKyAgICAgICAgfQorICAgICAgZm9yIChpID0gMDsgaSA8IG5vcm10 YWJsZS0+c2l6ZTI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgIGRvdWJs ZSBub3JtOworICAgICAgICAgIGlmIChleGFjdCkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgZ3NsX21hdHJpeF9nZXRfY29sKHNjcmF0Y2gsIEEs IGkpOworICAgICAgICAgICAgICBnc2xfYmxhc19kYXhweSgtMS4wLCBleGFj dCwgc2NyYXRjaCk7CisgICAgICAgICAgICAgIG5vcm0gPSBnc2xfYmxhc19k bnJtMihzY3JhdGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNl CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGdzbF92ZWN0b3Jfdmll dyBBaSA9IGdzbF9tYXRyaXhfY29sdW1uKEEsIGkpOworICAgICAgICAgICAg ICBub3JtID0gZ3NsX2JsYXNfZG5ybTIoJkFpLnZlY3Rvcik7CisgICAgICAg ICAgICB9CisgICAgICAgICAgZ3NsX21hdHJpeF9zZXQobm9ybXRhYmxlLCBp LCAwLCBub3JtKTsKKyAgICAgICAgfQorICAgIH0KKworICBmb3IgKGkgPSAw OyBpIDwgQS0+c2l6ZTI7ICsraSkKKyAgICB7CisKKyAgICAgIC8qIFByb3Zp ZGUgYXV0b21hZ2ljIGFyb3VuZCB0aGUgayBwYXJhbWV0ZXIgKi8KKyAgICAg IGRvdWJsZSBraTsKKyAgICAgIGlmIChrX3NpemUpCisgICAgICAgIHsKKyAg ICAgICAgICBpZiAoaSA8IGtfc2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAga2kgPSBnc2xfdmVjdG9yX2dldChrLCBpKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChrX3NpemUgPT0gMSkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAga2kgPSBnc2xfdmVjdG9yX2dldChr LCAwKSArIGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBkb3VibGUgbGFzdF9r aSA9IGdzbF92ZWN0b3JfZ2V0KGssIGtfc2l6ZSAtIDEpOworICAgICAgICAg ICAgICBjb25zdCBkb3VibGUgaW5jcmVtZW50ID0gbGFzdF9raSAtIGdzbF92 ZWN0b3JfZ2V0KGssIGtfc2l6ZSAtIDIpOworICAgICAgICAgICAgICBraSA9 IGxhc3Rfa2kgKyAoaSAtIChrX3NpemUgLSAxKSkgKiBpbmNyZW1lbnQ7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAg eworICAgICAgICAgIGtpID0gaSArIDE7CisgICAgICAgIH0KKworICAgICAg LyogUGVyZm9ybSB0aGUgZXh0cmFwb2xhdGlvbiB1c2luZyBsZWFkaW5nIHRl cm0gb3JkZXIga2kgKi8KKyAgICAgIGZvciAoaiA9IDA7IGogPCBBLT5zaXpl MiAtIGkgLSAxOyArK2opCisgICAgICAgIHsKKyAgICAgICAgICBnc2xfdmVj dG9yX3ZpZXcgQWloICA9IGdzbF9tYXRyaXhfY29sdW1uKEEsIGopOworICAg ICAgICAgIGdzbF92ZWN0b3JfdmlldyBBaWh0ID0gZ3NsX21hdHJpeF9jb2x1 bW4oQSwgaiArIDEpOworCisgICAgICAgICAgY29uc3QgaW50IGVycm9yID0g Z3NsX2V4dHJhcF9yaWNoYXJkc29uX3N0ZXAoCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmQWloLnZlY3RvciwgJkFpaHQudmVjdG9yLCB0LCBr aSk7CisgICAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICBpZiAoc2NyYXRjaCkKKyAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICBnc2xfdmVjdG9yX2ZyZWUoc2NyYXRjaCk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7 CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAobm9ybXRhYmxlKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBkb3VibGUgbm9ybTsKKyAg ICAgICAgICAgICAgaWYgKGV4YWN0KQorICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgIGdzbF92ZWN0b3JfbWVtY3B5KHNjcmF0Y2gsICZB aWgudmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgIGdzbF9ibGFzX2RheHB5 KC0xLjAsIGV4YWN0LCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICAgIG5v cm0gPSBnc2xfYmxhc19kbnJtMihzY3JhdGNoKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICBub3JtID0gZ3NsX2JsYXNfZG5ybTIoJkFpaC52 ZWN0b3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZ3Ns X21hdHJpeF9zZXQobm9ybXRhYmxlLCBpICsgaiArIDEsIGkgKyAxLCBub3Jt KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICBpZiAo c2NyYXRjaCkKKyAgICB7CisgICAgICBnc2xfdmVjdG9yX2ZyZWUoc2NyYXRj aCk7CisgICAgfQorCisgIHJldHVybiBHU0xfU1VDQ0VTUzsKK30KZGlmZiAt LWdpdCBhL2V4dHJhcC90ZXN0X3JpY2hhcmRzb24uYyBiL2V4dHJhcC90ZXN0 X3JpY2hhcmRzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi45MDNjY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvZXh0cmFwL3Rlc3Rf cmljaGFyZHNvbi5jCkBAIC0wLDAgKzEsNDc0IEBACisjaW5jbHVkZSA8Z3Ns L2dzbF9leHRyYXAuaD4KKyNpbmNsdWRlIDxnc2wvZ3NsX2llZWVfdXRpbHMu aD4KKyNpbmNsdWRlIDxnc2wvZ3NsX21hY2hpbmUuaD4KKyNpbmNsdWRlIDxn c2wvZ3NsX3N5cy5oPgorI2luY2x1ZGUgPGdzbC9nc2xfdGVzdC5oPgorCit2 b2lkCit0ZXN0X3JpY2hhcmRzb25fZXh0cmFwb2xhdGlvbl9zdGVwKCkKK3sK KyAgICBjb25zdCBpbnQgICAga2kgICAgICAgICAgID0gMTsKKyAgICBjb25z dCBzaXplX3QgbiAgICAgICAgICAgID0gMTsKKyAgICBnc2xfdmVjdG9yICpB aCAgID0gZ3NsX3ZlY3Rvcl9hbGxvYyhuKTsKKyAgICBnc2xfdmVjdG9yICpB aHQgID0gZ3NsX3ZlY3Rvcl9hbGxvYyhuKTsKKworICAgIHsKKyAgICAgICAg Y29uc3QgZG91YmxlIHQgPSAyLjA7CisgICAgICAgIGdzbF92ZWN0b3Jfc2V0 KEFoLCAgMCwgMS4wKTsKKyAgICAgICAgZ3NsX3ZlY3Rvcl9zZXQoQWh0LCAw LCAyLjApOworICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRz b25fc3RlcChBaCwgQWh0LCB0LCBraSksCisgICAgICAgICAgICAgICAgIlVu ZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMgZm9yIHQ9JWYiLCBfX2Z1 bmNfXywgdCk7CisgICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfdmVjdG9yX2dl dChBaCwgMCksIDMuMCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAg ICAgICJFeHRyYXBvbGF0aW9uIGluICVzIGZvciBraT0lZCwgdD0lZiIsIF9f ZnVuY19fLCBraSwgdCk7CisgICAgfQorCisgICAgeworICAgICAgICBjb25z dCBkb3VibGUgdCA9IDMuMDsKKyAgICAgICAgZ3NsX3ZlY3Rvcl9zZXQoQWgs ICAwLCAxLjApOworICAgICAgICBnc2xfdmVjdG9yX3NldChBaHQsIDAsIDIu MCk7CisgICAgICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbl9z dGVwKEFoLCBBaHQsIHQsIGtpKSwKKyAgICAgICAgICAgICAgICAiVW5leHBl Y3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyBmb3IgdD0lZiIsIF9fZnVuY19f LCB0KTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF92ZWN0b3JfZ2V0KEFo LCAwKSwgNS4wLzIuMCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAg ICAgICJFeHRyYXBvbGF0aW9uIGluICVzIGZvciBraT0lZCwgdD0lZiIsIF9f ZnVuY19fLCBraSwgdCk7CisgICAgfQorCisgICAgZ3NsX3ZlY3Rvcl9mcmVl KEFodCk7CisgICAgZ3NsX3ZlY3Rvcl9mcmVlKEFoKTsKK30KKwordm9pZAor dGVzdF9yaWNoYXJkc29uX2V4dHJhcG9sYXRpb25fZGVmYXVsdHMoKQorewor ICAgIGdzbF9tYXRyaXggKiBkYXRhMSA9IGdzbF9tYXRyaXhfYWxsb2MoMSwg Mik7CisgICAgZ3NsX21hdHJpeCAqIGRhdGEyID0gZ3NsX21hdHJpeF9hbGxv YyhkYXRhMS0+c2l6ZTEsIGRhdGExLT5zaXplMik7CisgICAgeworICAgICAg ICBnc2xfbWF0cml4X3NldChkYXRhMSwgMCwgMCwgMS4wKTsKKyAgICAgICAg Z3NsX21hdHJpeF9zZXQoZGF0YTEsIDAsIDEsIDIuMCk7CisKKyAgICAgICAg Z3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uKGRhdGExLCAyLCBOVUxM LCBOVUxMLCBOVUxMKSwKKyAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBl cnJvciByZXBvcnRlZCBpbiAlcyIpOworICAgICAgICBnc2xfdGVzdF9hYnMo Z3NsX21hdHJpeF9nZXQoZGF0YTEsIDAsIDApLCAzLjAsIEdTTF9EQkxfRVBT SUxPTiwKKyAgICAgICAgICAgICAgICAiJXMgc2NhbGFyIGNvcnJlY3QgcmVz dWx0IiwgX19mdW5jX18pOworICAgIH0KKworICAgIHsKKyAgICAgICAgZ3Ns X21hdHJpeF9zZXQoZGF0YTEsIDAsIDAsIDEuMCk7CisgICAgICAgIGdzbF9t YXRyaXhfc2V0KGRhdGExLCAwLCAxLCAyLjApOworCisgICAgICAgIGdzbF90 ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRhMSwgMywgTlVMTCwgTlVM TCwgTlVMTCksCisgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3Ig cmVwb3J0ZWQgaW4gJXMiKTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9t YXRyaXhfZ2V0KGRhdGExLCAwLCAwKSwgNS4wLzIuMCwgR1NMX0RCTF9FUFNJ TE9OLAorICAgICAgICAgICAgICAgICIlcyBzY2FsYXIgY29ycmVjdCByZXN1 bHQiLCBfX2Z1bmNfXyk7CisgICAgfQorCisgICAgeworICAgICAgICBnc2xf bWF0cml4X3NldChkYXRhMSwgMCwgMCwgMS4wKTsKKyAgICAgICAgZ3NsX21h dHJpeF9zZXQoZGF0YTEsIDAsIDEsIDIuMCk7CisgICAgICAgIGdzbF9tYXRy aXhfbWVtY3B5KGRhdGEyLCBkYXRhMSk7CisKKyAgICAgICAgZ3NsX3Rlc3Qo Z3NsX2V4dHJhcF9yaWNoYXJkc29uKGRhdGExLCAyLCBOVUxMLCBOVUxMLCBO VUxMKSwKKyAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciByZXBv cnRlZCBpbiAlcyIpOworICAgICAgICBjb25zdCBkb3VibGUgcmVzdWx0MSA9 IGdzbF9tYXRyaXhfZ2V0KGRhdGExLCAwLCAwKTsKKworICAgICAgICBnc2xf dGVzdF9hYnMocmVzdWx0MSwgMy4wLCBHU0xfREJMX0VQU0lMT04sCisgICAg ICAgICAgICAgICAgIiVzIHNjYWxhciBjb3JyZWN0IHJlc3VsdCIsIF9fZnVu Y19fKTsKKworICAgICAgICBnc2xfdmVjdG9yICogayA9IGdzbF92ZWN0b3Jf YWxsb2MoMSk7CisgICAgICAgIGdzbF92ZWN0b3Jfc2V0KGssIDAsIDEpOwor ICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTIs IDIsIGssIE5VTEwsIE5VTEwpLAorICAgICAgICAgICAgICAgICJVbmV4cGVj dGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7CisgICAgICAgIGdzbF92ZWN0 b3JfZnJlZShrKTsKKyAgICAgICAgY29uc3QgZG91YmxlIHJlc3VsdDIgPSBn c2xfbWF0cml4X2dldChkYXRhMiwgMCwgMCk7CisKKyAgICAgICAgZ3NsX3Rl c3RfYWJzKHJlc3VsdDEsIHJlc3VsdDIsIEdTTF9EQkxfRVBTSUxPTiwKKyAg ICAgICAgICAgICAgICAiJXMgd2l0aCBrID09IE5VTEwiLCBfX2Z1bmNfXyk7 CisgICAgfQorCisgICAgeworICAgICAgICBpbnQgaSwgajsKKyAgICAgICAg Z3NsX21hdHJpeF9zZXQoZGF0YTEsIDAsIDAsIDEuMCk7CisgICAgICAgIGdz bF9tYXRyaXhfc2V0KGRhdGExLCAwLCAxLCAyLjApOworICAgICAgICBnc2xf bWF0cml4X21lbWNweShkYXRhMiwgZGF0YTEpOworCisgICAgICAgIGdzbF9t YXRyaXggKiBub3JtdGFibGUxID0gZ3NsX21hdHJpeF9hbGxvYyhkYXRhMS0+ c2l6ZTIsIGRhdGExLT5zaXplMik7CisgICAgICAgIGdzbF9tYXRyaXggKiBu b3JtdGFibGUyID0gZ3NsX21hdHJpeF9hbGxvYyhkYXRhMS0+c2l6ZTIsIGRh dGExLT5zaXplMik7CisKKyAgICAgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9y aWNoYXJkc29uKAorICAgICAgICAgICAgICAgICAgICBkYXRhMSwgMiwgTlVM TCwgbm9ybXRhYmxlMSwgTlVMTCksCisgICAgICAgICAgICAgICAgIlVuZXhw ZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICAgICAgY29uc3Qg ZG91YmxlIHJlc3VsdDEgPSBnc2xfbWF0cml4X2dldChkYXRhMSwgMCwgMCk7 CisKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKHJlc3VsdDEsIDMuMCwgR1NMX0RC TF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICIlcyBjb3JyZWN0IGV4dHJh cG9sYXRpb24gYW5zd2VyIik7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IG5vcm10YWJsZTEtPnNpemUxIC0gMTsgKytpKSB7CisgICAgICAgICAgICBm b3IgKGogPSBpKzE7IGogPCBub3JtdGFibGUxLT5zaXplMjsgKytqKSB7Cisg ICAgICAgICAgICAgICAgZ3NsX3Rlc3QoIWdzbF9pc25hbihnc2xfbWF0cml4 X2dldChub3JtdGFibGUxLCBpLCBqKSksCisgICAgICAgICAgICAgICAgICAg ICAgICAiJXMgZXhwZWN0ZWQgTkFOIGluIG5vcm10YWJsZTEgYXQgKCVkLCAl ZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGksIGop OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZ3NsX3Rl c3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZTEsIDAsIDApLCAxLjAs IEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAiJXMgbm9ybXRh YmxlMSAoMCwwKSB2YWx1ZSIsIF9fZnVuY19fKTsKKyAgICAgICAgZ3NsX3Rl c3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZTEsIDEsIDApLCAyLjAs IEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAiJXMgbm9ybXRh YmxlMSAoMSwwKSB2YWx1ZSIsIF9fZnVuY19fKTsKKyAgICAgICAgZ3NsX3Rl c3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZTEsIDEsIDEpLCAzLjAs IEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAiJXMgbm9ybXRh YmxlMSAoMSwxKSB2YWx1ZSIsIF9fZnVuY19fKTsKKworICAgICAgICBnc2xf dmVjdG9yICogZXhhY3QgPSBnc2xfdmVjdG9yX2FsbG9jKDEpOworICAgICAg ICBnc2xfdmVjdG9yX3NldF96ZXJvKGV4YWN0KTsKKyAgICAgICAgZ3NsX3Rl c3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uKAorICAgICAgICAgICAgICAgICAg ICBkYXRhMiwgMi4wLCBOVUxMLCBub3JtdGFibGUyLCBleGFjdCksCisgICAg ICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMi KTsKKyAgICAgICAgZ3NsX3ZlY3Rvcl9mcmVlKGV4YWN0KTsKKyAgICAgICAg Y29uc3QgZG91YmxlIHJlc3VsdDIgPSBnc2xfbWF0cml4X2dldChkYXRhMiwg MCwgMCk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5vcm10YWJsZTIt PnNpemUxIC0gMTsgKytpKSB7CisgICAgICAgICAgICBmb3IgKGogPSBpKzE7 IGogPCBub3JtdGFibGUyLT5zaXplMjsgKytqKSB7CisgICAgICAgICAgICAg ICAgZ3NsX3Rlc3QoIWdzbF9pc25hbihnc2xfbWF0cml4X2dldChub3JtdGFi bGUyLCBpLCBqKSksCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMgZXhw ZWN0ZWQgTkFOIGluIG5vcm10YWJsZTIgYXQgKCVkLCAlZCkiLAorICAgICAg ICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGksIGopOworICAgICAgICAg ICAgfQorICAgICAgICB9CisKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKHJlc3Vs dDEsIHJlc3VsdDIsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAg ICAiJXMgd2l0aCBleGFjdCA9PSBOVUxMIiwgX19mdW5jX18pOworCisgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBub3JtdGFibGUxLT5zaXplMTsgKytpKSB7 CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaSArIDE7ICsraikgewor ICAgICAgICAgICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dldChu b3JtdGFibGUxLCBpLCBqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlMiwgaSwgaiksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGlkZW50aWNhbCBub3JtdGFi bGUgcmVzdWx0cyBhdCAoJWQsICVkKSIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fZnVuY19fLCBpLCBqKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorCisgICAgICAgIGdzbF9tYXRyaXhfZnJlZShub3JtdGFibGUy KTsKKyAgICAgICAgZ3NsX21hdHJpeF9mcmVlKG5vcm10YWJsZTEpOworICAg IH0KKworICAgIGdzbF9tYXRyaXhfZnJlZShkYXRhMik7CisgICAgZ3NsX21h dHJpeF9mcmVlKGRhdGExKTsKK30KKwordm9pZAordGVzdF9yaWNoYXJkc29u X2V4dHJhcG9sYXRpb25fdHdvbGV2ZWxzKCkKK3sKKyAgICBnc2xfbWF0cml4 ICogZGF0YTIgPSBnc2xfbWF0cml4X2FsbG9jKDEsIDIpOworICAgIGdzbF9t YXRyaXggKiBkYXRhMyA9IGdzbF9tYXRyaXhfYWxsb2MoMSwgMyk7CisgICAg Z3NsX3ZlY3RvciAqIGsxID0gZ3NsX3ZlY3Rvcl9hbGxvYygxKTsKKyAgICBn c2xfdmVjdG9yICogazIgPSBnc2xfdmVjdG9yX2FsbG9jKDIpOworCisgICAg eworICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMiwgMCwgMCwgMS4wKTsK KyAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDEsIDIuMCk7Cisg ICAgICAgIGdzbF92ZWN0b3Jfc2V0KGsxLCAwLCAxKTsKKworICAgICAgICBn c2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTIsIDIsIGsxLCBO VUxMLCBOVUxMKSwKKyAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJv ciByZXBvcnRlZCBpbiAlcyIpOworICAgICAgICBnc2xfdGVzdF9hYnMoZ3Ns X21hdHJpeF9nZXQoZGF0YTIsIDAsIDApLCAzLjAsIEdTTF9EQkxfRVBTSUxP TiwKKyAgICAgICAgICAgICAgICAiJXMgc2NhbGFyIGNvcnJlY3QgcmVzdWx0 IGF0ICVzOiVkIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgX19GSUxF X18sIF9fTElORV9fKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGdzbF9t YXRyaXhfc2V0KGRhdGEyLCAwLCAwLCAyLjApOworICAgICAgICBnc2xfbWF0 cml4X3NldChkYXRhMiwgMCwgMSwgMy4wKTsKKyAgICAgICAgZ3NsX3ZlY3Rv cl9zZXQoazEsIDAsIDEpOworCisgICAgICAgIGdzbF90ZXN0KGdzbF9leHRy YXBfcmljaGFyZHNvbihkYXRhMiwgMiwgazEsIE5VTEwsIE5VTEwpLAorICAg ICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGluICVz Iik7CisgICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dldChkYXRh MiwgMCwgMCksIDQuMCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAg ICAgICIlcyBzY2FsYXIgY29ycmVjdCByZXN1bHQgYXQgJXM6JWQiLAorICAg ICAgICAgICAgICAgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOwor ICAgIH0KKworICAgIHsKKyAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIs IDAsIDAsIDMuMCk7CisgICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEyLCAw LCAxLCA0LjApOworICAgICAgICBnc2xfdmVjdG9yX3NldChrMSwgMCwgMik7 CisKKyAgICAgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uKGRh dGEyLCAyLCBrMSwgTlVMTCwgTlVMTCksCisgICAgICAgICAgICAgICAgIlVu ZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICAgICAgZ3Ns X3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KGRhdGEyLCAwLCAwKSwgMTMuMC8z LjAsIEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAiJXMgc2Nh bGFyIGNvcnJlY3QgcmVzdWx0IGF0ICVzOiVkIiwKKyAgICAgICAgICAgICAg ICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICB9CisKKyAg ICB7CisgICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAwLCAwLCAxLjAp OworICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMywgMCwgMSwgMi4wKTsK KyAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTMsIDAsIDIsIDMuMCk7Cisg ICAgICAgIGdzbF92ZWN0b3Jfc2V0KGsxLCAwLCAxKTsKKworICAgICAgICBn c2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTMsIDIsIGsxLCBO VUxMLCBOVUxMKSwKKyAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJv ciByZXBvcnRlZCBpbiAlcyIpOworICAgICAgICBnc2xfdGVzdF9hYnMoZ3Ns X21hdHJpeF9nZXQoZGF0YTMsIDAsIDApLCAxMy4wLzMuMCwgR1NMX0RCTF9F UFNJTE9OLAorICAgICAgICAgICAgICAgICIlcyBzY2FsYXIgY29ycmVjdCBy ZXN1bHQgYXQgJXM6JWQiLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBf X0ZJTEVfXywgX19MSU5FX18pOworICAgIH0KKworICAgIHsKKyAgICAgICAg aW50IGksIGo7CisgICAgICAgIGdzbF9tYXRyaXggKiBub3JtdGFibGUgPSBn c2xfbWF0cml4X2FsbG9jKGRhdGEzLT5zaXplMiwgZGF0YTMtPnNpemUyKTsK KworICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMywgMCwgMCwgMS4wKTsK KyAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTMsIDAsIDEsIDIuMCk7Cisg ICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAwLCAyLCAzLjApOworICAg ICAgICBnc2xfdmVjdG9yX3NldChrMiwgMCwgMSk7CisgICAgICAgIGdzbF92 ZWN0b3Jfc2V0KGsyLCAxLCAyKTsKKworICAgICAgICBnc2xfdGVzdChnc2xf ZXh0cmFwX3JpY2hhcmRzb24oZGF0YTMsIDIsIGsyLCBub3JtdGFibGUsIE5V TEwpLAorICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9y dGVkIGluICVzIik7CisgICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4 X2dldChkYXRhMywgMCwgMCksIDEzLjAvMy4wLCBHU0xfREJMX0VQU0lMT04s CisgICAgICAgICAgICAgICAgIiVzIHNjYWxhciBjb3JyZWN0IHJlc3VsdCBh dCAlczolZCIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIF9fRklMRV9f LCBfX0xJTkVfXyk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5vcm10 YWJsZS0+c2l6ZTEgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoaiA9 IGkrMTsgaiA8IG5vcm10YWJsZS0+c2l6ZTI7ICsraikgeworICAgICAgICAg ICAgICAgIGdzbF90ZXN0KCFnc2xfaXNuYW4oZ3NsX21hdHJpeF9nZXQobm9y bXRhYmxlLCBpLCBqKSksCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMg ZXhwZWN0ZWQgTkFOIGluIG5vcm10YWJsZSBhdCAoJWQsICVkKSIsCisgICAg ICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgaSwgaik7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBnc2xfdGVzdF9hYnMoZ3Ns X21hdHJpeF9nZXQobm9ybXRhYmxlLCAwLCAwKSwgMS4wLCBHU0xfREJMX0VQ U0lMT04sCisgICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMCwwKSB2 YWx1ZSIsIF9fZnVuY19fKTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9t YXRyaXhfZ2V0KG5vcm10YWJsZSwgMSwgMCksIDIuMCwgR1NMX0RCTF9FUFNJ TE9OLAorICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDEsMCkgdmFs dWUiLCBfX2Z1bmNfXyk7CisgICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0 cml4X2dldChub3JtdGFibGUsIDIsIDApLCAzLjAsIEdTTF9EQkxfRVBTSUxP TiwKKyAgICAgICAgICAgICAgICAiJXMgbm9ybXRhYmxlICgyLDApIHZhbHVl IiwgX19mdW5jX18pOworICAgICAgICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJp eF9nZXQobm9ybXRhYmxlLCAxLCAxKSwgMy4wLCBHU0xfREJMX0VQU0lMT04s CisgICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMSwxKSB2YWx1ZSIs IF9fZnVuY19fKTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhf Z2V0KG5vcm10YWJsZSwgMiwgMSksIDQuMCwgR1NMX0RCTF9FUFNJTE9OLAor ICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDIsMSkgdmFsdWUiLCBf X2Z1bmNfXyk7CisgICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dl dChub3JtdGFibGUsIDIsIDIpLCAxMy4wLzMuMCwgR1NMX0RCTF9FUFNJTE9O LAorICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUgKDIsMikgdmFsdWUi LCBfX2Z1bmNfXyk7CisKKyAgICAgICAgZ3NsX21hdHJpeF9mcmVlKG5vcm10 YWJsZSk7CisgICAgfQorCisgICAgeworICAgICAgICBnc2xfbWF0cml4X3Nl dChkYXRhMywgMCwgMCwgMS4wKTsKKyAgICAgICAgZ3NsX21hdHJpeF9zZXQo ZGF0YTMsIDAsIDEsIDIuMCk7CisgICAgICAgIGdzbF9tYXRyaXhfc2V0KGRh dGEzLCAwLCAyLCAzLjApOworICAgICAgICBnc2xfdmVjdG9yX3NldChrMiwg MCwgMik7CisgICAgICAgIGdzbF92ZWN0b3Jfc2V0KGsyLCAxLCAzKTsKKwor ICAgICAgICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTMs IDIsIGsyLCBOVUxMLCBOVUxMKSwKKyAgICAgICAgICAgICAgICAiVW5leHBl Y3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOworICAgICAgICBnc2xfdGVz dF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0YTMsIDAsIDApLCA3My4wLzIxLjAs IEdTTF9EQkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAiJXMgc2NhbGFy IGNvcnJlY3QgcmVzdWx0IGF0ICVzOiVkIiwKKyAgICAgICAgICAgICAgICBf X2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICB9CisKKyAgICB7 CisgICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEzLCAwLCAwLCAxLjApOwor ICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMywgMCwgMSwgMi4wKTsKKyAg ICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTMsIDAsIDIsIDMuMCk7CisgICAg ICAgIGdzbF92ZWN0b3Jfc2V0KGsxLCAwLCAyKTsKKworICAgICAgICBnc2xf dGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTMsIDIsIGsxLCBOVUxM LCBOVUxMKSwKKyAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciBy ZXBvcnRlZCBpbiAlcyIpOworICAgICAgICBnc2xfdGVzdF9hYnMoZ3NsX21h dHJpeF9nZXQoZGF0YTMsIDAsIDApLCA3My4wLzIxLjAsIEdTTF9EQkxfRVBT SUxPTiwKKyAgICAgICAgICAgICAgICAiJXMgc2NhbGFyIGNvcnJlY3QgcmVz dWx0IGF0ICVzOiVkIiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgX19G SUxFX18sIF9fTElORV9fKTsKKyAgICB9CisKKworICAgIGdzbF92ZWN0b3Jf ZnJlZShrMik7CisgICAgZ3NsX3ZlY3Rvcl9mcmVlKGsxKTsKKyAgICBnc2xf bWF0cml4X2ZyZWUoZGF0YTMpOworICAgIGdzbF9tYXRyaXhfZnJlZShkYXRh Mik7CisKK30KKwordm9pZAordGVzdF9yaWNoYXJkc29uX2V4dHJhcG9sYXRp b25fbXVsdGlwbGVsZXZlbHMoKQoreworICAgIGdzbF9tYXRyaXggKiBkYXRh MiA9IGdzbF9tYXRyaXhfYWxsb2MoMSwgMik7CisgICAgZ3NsX21hdHJpeCAq IGRhdGE0ID0gZ3NsX21hdHJpeF9hbGxvYygxLCA0KTsKKyAgICBnc2xfdmVj dG9yICogazEgPSBnc2xfdmVjdG9yX2FsbG9jKDEpOworICAgIGdzbF92ZWN0 b3IgKiBrMiA9IGdzbF92ZWN0b3JfYWxsb2MoMik7CisgICAgZ3NsX3ZlY3Rv ciAqIGszID0gZ3NsX3ZlY3Rvcl9hbGxvYygzKTsKKworICAgIHsKKyAgICAg ICAgaW50IGksIGo7CisgICAgICAgIGdzbF92ZWN0b3Jfc2V0KGsxLCAwLCAz KTsKKworICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMiwgMCwgMCwgMS4w KTsKKyAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDEsIDIuMCk7 CisgICAgICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRh MiwgMiwgazEsIE5VTEwsIE5VTEwpLAorICAgICAgICAgICAgICAgICJVbmV4 cGVjdGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7CisgICAgICAgIGNvbnN0 IGRvdWJsZSB4eCA9IGdzbF9tYXRyaXhfZ2V0KGRhdGEyLCAwLCAwKTsKKwor ICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhMiwgMCwgMCwgMi4wKTsKKyAg ICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDEsIDMuMCk7CisgICAg ICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRhMiwgMiwg azEsIE5VTEwsIE5VTEwpLAorICAgICAgICAgICAgICAgICJVbmV4cGVjdGVk IGVycm9yIHJlcG9ydGVkIGluICVzIik7CisgICAgICAgIGNvbnN0IGRvdWJs ZSB4eSA9IGdzbF9tYXRyaXhfZ2V0KGRhdGEyLCAwLCAwKTsKKworICAgICAg ICBnc2xfbWF0cml4X3NldChkYXRhMiwgMCwgMCwgMy4wKTsKKyAgICAgICAg Z3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDEsIDQuMCk7CisgICAgICAgIGdz bF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRhMiwgMiwgazEsIE5V TEwsIE5VTEwpLAorICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9y IHJlcG9ydGVkIGluICVzIik7CisgICAgICAgIGNvbnN0IGRvdWJsZSB4eiA9 IGdzbF9tYXRyaXhfZ2V0KGRhdGEyLCAwLCAwKTsKKworICAgICAgICBnc2xf dmVjdG9yX3NldChrMSwgMCwgNik7CisKKyAgICAgICAgZ3NsX21hdHJpeF9z ZXQoZGF0YTIsIDAsIDAsIHh4KTsKKyAgICAgICAgZ3NsX21hdHJpeF9zZXQo ZGF0YTIsIDAsIDEsIHh5KTsKKyAgICAgICAgZ3NsX3Rlc3QoZ3NsX2V4dHJh cF9yaWNoYXJkc29uKGRhdGEyLCAyLCBrMSwgTlVMTCwgTlVMTCksCisgICAg ICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3IgcmVwb3J0ZWQgaW4gJXMi KTsKKyAgICAgICAgY29uc3QgZG91YmxlIHl4ID0gZ3NsX21hdHJpeF9nZXQo ZGF0YTIsIDAsIDApOworCisgICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEy LCAwLCAwLCB4eSk7CisgICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGEyLCAw LCAxLCB4eik7CisgICAgICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFy ZHNvbihkYXRhMiwgMiwgazEsIE5VTEwsIE5VTEwpLAorICAgICAgICAgICAg ICAgICJVbmV4cGVjdGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7CisgICAg ICAgIGNvbnN0IGRvdWJsZSB5eSA9IGdzbF9tYXRyaXhfZ2V0KGRhdGEyLCAw LCAwKTsKKworICAgICAgICBnc2xfdmVjdG9yX3NldChrMSwgMCwgOSk7CisK KyAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDAsIHl4KTsKKyAg ICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTIsIDAsIDEsIHl5KTsKKyAgICAg ICAgZ3NsX3Rlc3QoZ3NsX2V4dHJhcF9yaWNoYXJkc29uKGRhdGEyLCAyLCBr MSwgTlVMTCwgTlVMTCksCisgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQg ZXJyb3IgcmVwb3J0ZWQgaW4gJXMiKTsKKyAgICAgICAgY29uc3QgZG91Ymxl IHp4ID0gZ3NsX21hdHJpeF9nZXQoZGF0YTIsIDAsIDApOworCisgICAgICAg IGdzbF92ZWN0b3Jfc2V0KGszLCAwLCAzKTsKKyAgICAgICAgZ3NsX3ZlY3Rv cl9zZXQoazMsIDEsIDYpOworICAgICAgICBnc2xfdmVjdG9yX3NldChrMywg MiwgOSk7CisKKyAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTQsIDAsIDAs IDEuMCk7CisgICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGE0LCAwLCAxLCAy LjApOworICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhNCwgMCwgMiwgMy4w KTsKKyAgICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTQsIDAsIDMsIDQuMCk7 CisgICAgICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihkYXRh NCwgMiwgazMsIE5VTEwsIE5VTEwpLAorICAgICAgICAgICAgICAgICJVbmV4 cGVjdGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7CisgICAgICAgIGdzbF90 ZXN0X2Ficyhnc2xfbWF0cml4X2dldChkYXRhNCwgMCwgMCksIHp4LCBHU0xf REJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgIiVzIHNjYWxhciBjb3Jy ZWN0IHJlc3VsdCBhdCAlczolZCIsCisgICAgICAgICAgICAgICAgX19mdW5j X18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKyAgICAgICAgZ3NsX21hdHJp eCAqIG5vcm10YWJsZSA9IGdzbF9tYXRyaXhfYWxsb2MoZGF0YTQtPnNpemUy LCBkYXRhNC0+c2l6ZTIpOworCisgICAgICAgIGdzbF92ZWN0b3Jfc2V0KGsy LCAwLCAzKTsKKyAgICAgICAgZ3NsX3ZlY3Rvcl9zZXQoazIsIDEsIDYpOwor CisgICAgICAgIGdzbF9tYXRyaXhfc2V0KGRhdGE0LCAwLCAwLCAxLjApOwor ICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhNCwgMCwgMSwgMi4wKTsKKyAg ICAgICAgZ3NsX21hdHJpeF9zZXQoZGF0YTQsIDAsIDIsIDMuMCk7CisgICAg ICAgIGdzbF9tYXRyaXhfc2V0KGRhdGE0LCAwLCAzLCA0LjApOworICAgICAg ICBnc2xfdGVzdChnc2xfZXh0cmFwX3JpY2hhcmRzb24oZGF0YTQsIDIsIGsy LCBub3JtdGFibGUsIE5VTEwpLAorICAgICAgICAgICAgICAgICJVbmV4cGVj dGVkIGVycm9yIHJlcG9ydGVkIGluICVzIik7CisgICAgICAgIGdzbF90ZXN0 X2Ficyhnc2xfbWF0cml4X2dldChkYXRhNCwgMCwgMCksIHp4LCBHU0xfREJM X0VQU0lMT04sCisgICAgICAgICAgICAgICAgIiVzIHNjYWxhciBjb3JyZWN0 IHJlc3VsdCBhdCAlczolZCIsCisgICAgICAgICAgICAgICAgX19mdW5jX18s IF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKyAgICAgICAgZm9yIChpID0gMDsg aSA8IG5vcm10YWJsZS0+c2l6ZTEgLSAxOyArK2kpIHsKKyAgICAgICAgICAg IGZvciAoaiA9IGkrMTsgaiA8IG5vcm10YWJsZS0+c2l6ZTI7ICsraikgewor ICAgICAgICAgICAgICAgIGdzbF90ZXN0KCFnc2xfaXNuYW4oZ3NsX21hdHJp eF9nZXQobm9ybXRhYmxlLCBpLCBqKSksCisgICAgICAgICAgICAgICAgICAg ICAgICAiJXMgZXhwZWN0ZWQgTkFOIGluIG5vcm10YWJsZSBhdCAoJWQsICVk KSIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgaSwgaik7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBnc2xfdGVz dF9hYnMoZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlLCAwLCAwKSwgMS4wLCBH U0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgIiVzIG5vcm10YWJs ZSAoMCwwKSB2YWx1ZSIsIF9fZnVuY19fKTsKKyAgICAgICAgZ3NsX3Rlc3Rf YWJzKGdzbF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMSwgMCksIDIuMCwgR1NM X0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICIlcyBub3JtdGFibGUg KDEsMCkgdmFsdWUiLCBfX2Z1bmNfXyk7CisgICAgICAgIGdzbF90ZXN0X2Fi cyhnc2xfbWF0cml4X2dldChub3JtdGFibGUsIDIsIDApLCAzLjAsIEdTTF9E QkxfRVBTSUxPTiwKKyAgICAgICAgICAgICAgICAiJXMgbm9ybXRhYmxlICgy LDApIHZhbHVlIiwgX19mdW5jX18pOworICAgICAgICBnc2xfdGVzdF9hYnMo Z3NsX21hdHJpeF9nZXQobm9ybXRhYmxlLCAzLCAwKSwgNC4wLCBHU0xfREJM X0VQU0lMT04sCisgICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMyww KSB2YWx1ZSIsIF9fZnVuY19fKTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdz bF9tYXRyaXhfZ2V0KG5vcm10YWJsZSwgMSwgMSksIHh4LCBHU0xfREJMX0VQ U0lMT04sCisgICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMSwxKSB2 YWx1ZSIsIF9fZnVuY19fKTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9t YXRyaXhfZ2V0KG5vcm10YWJsZSwgMiwgMSksIHh5LCBHU0xfREJMX0VQU0lM T04sCisgICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMiwxKSB2YWx1 ZSIsIF9fZnVuY19fKTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRy aXhfZ2V0KG5vcm10YWJsZSwgMywgMSksIHh6LCBHU0xfREJMX0VQU0lMT04s CisgICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMywxKSB2YWx1ZSIs IF9fZnVuY19fKTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhf Z2V0KG5vcm10YWJsZSwgMiwgMiksIHl4LCBHU0xfREJMX0VQU0lMT04sCisg ICAgICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMiwyKSB2YWx1ZSIsIF9f ZnVuY19fKTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0 KG5vcm10YWJsZSwgMywgMiksIHl5LCBHU0xfREJMX0VQU0lMT04sCisgICAg ICAgICAgICAgICAgIiVzIG5vcm10YWJsZSAoMywyKSB2YWx1ZSIsIF9fZnVu Y19fKTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhfZ2V0KG5v cm10YWJsZSwgMywgMyksIHp4LCBHU0xfREJMX0VQU0lMT04sCisgICAgICAg ICAgICAgICAgIiVzIG5vcm10YWJsZSAoMywzKSB2YWx1ZSIsIF9fZnVuY19f KTsKKworICAgICAgICBnc2xfbWF0cml4X2ZyZWUobm9ybXRhYmxlKTsKKyAg ICB9CisKKyAgICBnc2xfdmVjdG9yX2ZyZWUoazMpOworICAgIGdzbF92ZWN0 b3JfZnJlZShrMik7CisgICAgZ3NsX3ZlY3Rvcl9mcmVlKGsxKTsKKyAgICBn c2xfbWF0cml4X2ZyZWUoZGF0YTQpOworICAgIGdzbF9tYXRyaXhfZnJlZShk YXRhMik7Cit9CisKK3ZvaWQKK3Rlc3RfcmljaGFyZHNvbl9leHRyYXBvbGF0 aW9uX3ZlY3RvcmlucHV0cygpCit7CisgICAgeworICAgICAgICBnc2xfbWF0 cml4ICogZGF0YSA9IGdzbF9tYXRyaXhfYWxsb2MoMiwyKTsKKyAgICAgICAg Z3NsX21hdHJpeF9zZXQoZGF0YSwgMCwgMCwgMS4wKTsKKyAgICAgICAgZ3Ns X21hdHJpeF9zZXQoZGF0YSwgMCwgMSwgMi4wKTsKKyAgICAgICAgZ3NsX21h dHJpeF9zZXQoZGF0YSwgMSwgMCwgMi4wKTsKKyAgICAgICAgZ3NsX21hdHJp eF9zZXQoZGF0YSwgMSwgMSwgMy4wKTsKKworICAgICAgICBnc2xfbWF0cml4 ICogbm9ybXRhYmxlID0gZ3NsX21hdHJpeF9hbGxvYyhkYXRhLT5zaXplMiwg ZGF0YS0+c2l6ZTIpOworCisgICAgICAgIGdzbF92ZWN0b3IgKiBleGFjdCA9 IGdzbF92ZWN0b3JfYWxsb2MoZGF0YS0+c2l6ZTIpOworICAgICAgICBnc2xf dmVjdG9yX3NldChleGFjdCwgMCwgMy4wKTsKKyAgICAgICAgZ3NsX3ZlY3Rv cl9zZXQoZXhhY3QsIDEsIDQuMCk7CisKKyAgICAgICAgZ3NsX3Rlc3QoZ3Ns X2V4dHJhcF9yaWNoYXJkc29uKAorICAgICAgICAgICAgICAgICAgICBkYXRh LCAyLCBOVUxMLCBub3JtdGFibGUsIGV4YWN0KSwKKyAgICAgICAgICAgICAg ICAiVW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOworICAgICAg ICBnc2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0YSwgMCwgMCksIDMu MCwgR1NMX0RCTF9FUFNJTE9OLAorICAgICAgICAgICAgICAgICIlcyBkYXRh ICgwLDApIHZhbHVlIGF0ICVzOiVkIiwgX19mdW5jX18sIF9fRklMRV9fLCBf X0xJTkVfXyk7CisgICAgICAgIGdzbF90ZXN0X2Ficyhnc2xfbWF0cml4X2dl dChkYXRhLCAxLCAwKSwgNC4wLCBHU0xfREJMX0VQU0lMT04sCisgICAgICAg ICAgICAgICAgIiVzIGRhdGEgKDEsMCkgdmFsdWUgYXQgJXM6JWQiLCBfX2Z1 bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsKKworICAgICAgICBnc2xfdGVz dF9hYnMoZ3NsX21hdHJpeF9nZXQobm9ybXRhYmxlLCAxLCAxKSwgMC4wLCBH U0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgIiVzIG5vcm10YWJs ZSAoMSwxKSB2YWx1ZSBhdCAlczolZCIsCisgICAgICAgICAgICAgICAgX19m dW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKyAgICAgICAgZ3NsX3Zl Y3Rvcl9mcmVlKGV4YWN0KTsKKyAgICAgICAgZ3NsX21hdHJpeF9mcmVlKG5v cm10YWJsZSk7CisgICAgICAgIGdzbF9tYXRyaXhfZnJlZShkYXRhKTsKKyAg ICB9CisKKyAgICB7CisgICAgICAgIGdzbF9tYXRyaXggKiBkYXRhID0gZ3Ns X21hdHJpeF9hbGxvYygyLDMpOworICAgICAgICBnc2xfbWF0cml4X3NldChk YXRhLCAwLCAwLCAxLjApOworICAgICAgICBnc2xfbWF0cml4X3NldChkYXRh LCAwLCAxLCAyLjApOworICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhLCAw LCAyLCAzLjApOworICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhLCAxLCAw LCAyLjApOworICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhLCAxLCAxLCAz LjApOworICAgICAgICBnc2xfbWF0cml4X3NldChkYXRhLCAxLCAyLCA0LjAp OworCisgICAgICAgIGdzbF90ZXN0KGdzbF9leHRyYXBfcmljaGFyZHNvbihk YXRhLCAyLCBOVUxMLCBOVUxMLCBOVUxMKSwKKyAgICAgICAgICAgICAgICAi VW5leHBlY3RlZCBlcnJvciByZXBvcnRlZCBpbiAlcyIpOworICAgICAgICBn c2xfdGVzdF9hYnMoZ3NsX21hdHJpeF9nZXQoZGF0YSwgMCwgMCksIDEzLjAv My4wLCBHU0xfREJMX0VQU0lMT04sCisgICAgICAgICAgICAgICAgIiVzIGRh dGEgKDAsMCkgdmFsdWUgYXQgJXM6JWQiLCBfX2Z1bmNfXywgX19GSUxFX18s IF9fTElORV9fKTsKKyAgICAgICAgZ3NsX3Rlc3RfYWJzKGdzbF9tYXRyaXhf Z2V0KGRhdGEsIDEsIDApLCAxNi4wLzMuMCwgR1NMX0RCTF9FUFNJTE9OLAor ICAgICAgICAgICAgICAgICIlcyBkYXRhICgxLDApIHZhbHVlIGF0ICVzOiVk IiwgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKyAgICAgICAg Z3NsX21hdHJpeF9mcmVlKGRhdGEpOworICAgIH0KK30KKworaW50CittYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBnc2xfaWVlZV9lbnZf c2V0dXAoKTsKKworICAgIHRlc3RfcmljaGFyZHNvbl9leHRyYXBvbGF0aW9u X3N0ZXAoKTsKKyAgICB0ZXN0X3JpY2hhcmRzb25fZXh0cmFwb2xhdGlvbl9k ZWZhdWx0cygpOworICAgIHRlc3RfcmljaGFyZHNvbl9leHRyYXBvbGF0aW9u X3R3b2xldmVscygpOworICAgIHRlc3RfcmljaGFyZHNvbl9leHRyYXBvbGF0 aW9uX211bHRpcGxlbGV2ZWxzKCk7CisgICAgdGVzdF9yaWNoYXJkc29uX2V4 dHJhcG9sYXRpb25fdmVjdG9yaW5wdXRzKCk7CisKKyAgICBleGl0KGdzbF90 ZXN0X3N1bW1hcnkoKSk7Cit9Ci0tIAoxLjYuMy4zCgo= --000325555b5ef9e1c0047aa4cf2a--