From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22247 invoked by alias); 6 Dec 2008 03:54:13 -0000 Received: (qmail 22232 invoked by uid 22791); 6 Dec 2008 03:54:07 -0000 X-Spam-Check-By: sourceware.org Received: from yw-out-1718.google.com (HELO yw-out-1718.google.com) (74.125.46.152) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 06 Dec 2008 03:52:54 +0000 Received: by yw-out-1718.google.com with SMTP id 9so229741ywk.48 for ; Fri, 05 Dec 2008 19:52:51 -0800 (PST) Received: by 10.150.139.8 with SMTP id m8mr3010686ybd.37.1228535570791; Fri, 05 Dec 2008 19:52:50 -0800 (PST) Received: by 10.150.189.5 with HTTP; Fri, 5 Dec 2008 19:52:50 -0800 (PST) Message-ID: <4a00655d0812051952iaff975ao78122dc0dfa2241b@mail.gmail.com> Date: Thu, 11 Dec 2008 15:18:00 -0000 From: "Rhys Ulerich" To: "Brian Gough" , "Patrick Alken" Subject: Re: [Help-gsl] Submitted patch to add bspline derivative capabilities Cc: gsl-discuss@sourceware.org In-Reply-To: <4a00655d0812051440v46865adbsfcc10bb7dce28d98@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_14807_26069739.1228535570796" References: <4a00655d0811191412t371982eev1bb77325719860f7@mail.gmail.com> <20081119235047.GA18604@hippogriff.homeunix.org> <20081124175854.GA994@hippogriff.homeunix.org> <20081129214241.GA15002@hippogriff.homeunix.org> <20081205191058.GA11218@hippogriff.homeunix.org> <4a00655d0812051440v46865adbsfcc10bb7dce28d98@mail.gmail.com> 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: 2008-q4/txt/msg00043.txt.bz2 ------=_Part_14807_26069739.1228535570796 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 2343 Hi Brian and Patrick, The attached patch moves the derivative functionality into a separate workspace. Users allocate a gsl_bspline_workspace then a gsl_bspline_deriv_workspace if they need the new capabilities. All the derivative-related functions are named like gsl_bspline_deriv_* to help make the separation clear. The patch includes updates to doc/bspline.texi. Applies cleanly to savannah and Brian's bspline-compat branch. Brian, I'm not sure if I missed running a specific compatibility test in your branch or not... If you had one in there, I missed it and haven't run it. - Rhys On Fri, Dec 5, 2008 at 4:40 PM, Rhys Ulerich wrote: > I'll break out the bspline derivative workspace and get back to you guys > with a patch. > > FYI, the derivative workspace storage is O(order^2) in contrast to the > evaluation workspace being only O(order). Leading constant on the > derivative storage term is small, but I could see where later joining the > workspaces is a disadvantage for someone needing only evaluation > capabilities. > > - Rhys > > On Fri, Dec 5, 2008 at 1:10 PM, Patrick Alken > wrote: >> >> Ah I hadn't considered this issue. If there are other areas of >> GSL which have the same issues maybe we should keep a list so >> when there is a major new release like 2.0 we could integrate >> these "extra" workspaces? Of course one problem with that is >> if we have a separate workspace for bspline derivatives it may >> never be convenient to integrate it with the normal bspline >> workspace. >> >> On Fri, Dec 05, 2008 at 06:56:15PM +0000, Brian Gough wrote: >> > I noticed a problem when preparing the new release. The extra entries >> > in the bspline derivatives workspace break binary compatibility. >> > >> > This isn't necessarily a huge problem, but it seems undesirable to >> > force an upgrade of all applications just for those two struct >> > entries. If we're going to break binary compatibility we may as well >> > do it for all other functions that need it at the same time. >> > >> > So I'd propose using a separate workspace for the derivative functions >> > in this release. >> > >> > See e.g. branch bspline-compat at >> > http://src.network-theory.com/gsl.git/ >> > which is basically finished, I just need to add some error checking. > > ------=_Part_14807_26069739.1228535570796 Content-Type: text/x-diff; name=move-bspline-derivative-data-i.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fodq7a0e0 Content-Disposition: attachment; filename=move-bspline-derivative-data-i.patch Content-length: 65628 TW92ZSBic3BsaW5lIGRlcml2YXRpdmUgZGF0YSBpbnRvIHNlcGFyYXRlIHdv cmtzcGFjZS4KCkZyb206IFJoeXMgVWxlcmljaCA8cmh5cy51bGVyaWNoQGdt YWlsLmNvbT4KClJlcXVpcmVkIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eSB3 aXRoIGV4aXN0aW5nIGNvZGUuCi0tLQoKIGJzcGxpbmUvVE9ETyAgICAgICAg ICB8ICAgIDMgCiBic3BsaW5lL2JzcGxpbmUuYyAgICAgfCAgNTU4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IGJzcGxpbmUvZ3NsX2JzcGxpbmUuaCB8ICAgNjYgKysrKy0tCiBic3BsaW5l L3Rlc3QuYyAgICAgICAgfCAgIDIwICstCiBkb2MvYnNwbGluZS50ZXhpICAg ICAgfCAgIDIxICsrCiA1IGZpbGVzIGNoYW5nZWQsIDM4OSBpbnNlcnRpb25z KCspLCAyNzkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYnNwbGluZS9U T0RPIGIvYnNwbGluZS9UT0RPCmluZGV4IDQxZTliZjAuLjM3YTUyYzMgMTAw NjQ0Ci0tLSBhL2JzcGxpbmUvVE9ETworKysgYi9ic3BsaW5lL1RPRE8KQEAg LTEsNSArMSw4IEBACiBBZGQgZnVuY3Rpb25zOgogCithZGQgYnNwbGluZSBk ZXJpdmF0dmUgY29kZSB0byBleGFtcGxlcy9ic3BsaW5lLmMgb3IgcHJvZHVj ZSBhIAorZGVyaXZhdGl2ZS1yZWxhdGVkIGV4YW1wbGUuCisKIGdzbF9ic3Bs aW5lX3Ntb290aCB0byBmaXQgc21vb3RoaW5nIHNwbGluZXMgdG8gZGF0YSBt b3JlIGVmZmljaWVudGx5CiB0aGFuIHRoZSBzdGFuZGFyZCBsZWFzdCBzcXVh cmVzIGludmVyc2lvbiAoc2VlIHBwcGFjayBsMmFwcHIgYW5kCiBzbW9vdGgu c3BsaW5lKCkgZnJvbSBHTlUgUikKZGlmZiAtLWdpdCBhL2JzcGxpbmUvYnNw bGluZS5jIGIvYnNwbGluZS9ic3BsaW5lLmMKaW5kZXggNDViZDYyOC4uZjI4 NjcwNyAxMDA2NDQKLS0tIGEvYnNwbGluZS9ic3BsaW5lLmMKKysrIGIvYnNw bGluZS9ic3BsaW5lLmMKQEAgLTM2LDEyICszNiwxMiBAQAogICoKICAqLwog CitzdGF0aWMgaW5saW5lIHNpemVfdAorYnNwbGluZV9maW5kX2ludGVydmFs KGNvbnN0IGRvdWJsZSB4LCBpbnQgKmZsYWcsIGdzbF9ic3BsaW5lX3dvcmtz cGFjZSAqdyk7CiAKLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGJzcGxpbmVfZmlu ZF9pbnRlcnZhbChjb25zdCBkb3VibGUgeCwgaW50ICpmbGFnLAotICAgIGdz bF9ic3BsaW5lX3dvcmtzcGFjZSAqdyk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50 IGJzcGxpbmVfcHJvY2Vzc19pbnRlcnZhbF9mb3JfZXZhbCgKLSAgY29uc3Qg ZG91YmxlIHgsIHNpemVfdCAqaSwgaW50IGZsYWcsIGdzbF9ic3BsaW5lX3dv cmtzcGFjZSAqdyk7CitzdGF0aWMgaW5saW5lIGludAorYnNwbGluZV9wcm9j ZXNzX2ludGVydmFsX2Zvcl9ldmFsKGNvbnN0IGRvdWJsZSB4LCBzaXplX3Qg KmksIGludCBmbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdzbF9ic3BsaW5lX3dvcmtzcGFjZSAqdyk7CiAKIHN0YXRpYyB2b2lk CiBic3BsaW5lX3BwcGFja19ic3BsdmIoY29uc3QgZ3NsX3ZlY3RvciAqdCwK QEAgLTY4LDcgKzY4LDcgQEAgYnNwbGluZV9wcHBhY2tfYnNwbHZkKGNvbnN0 IGdzbF92ZWN0b3IgKnQsCiAvKgogZ3NsX2JzcGxpbmVfYWxsb2MoKQogICBB bGxvY2F0ZSBzcGFjZSBmb3IgYSBic3BsaW5lIHdvcmtzcGFjZS4gVGhlIHNp emUgb2YgdGhlCi13b3Jrc3BhY2UgaXMgTyg1ayArIG5icmVhayArIDJrXjIp Cit3b3Jrc3BhY2UgaXMgTyg1ayArIG5icmVhaykKIAogSW5wdXRzOiBrICAg ICAgLSBzcGxpbmUgb3JkZXIgKGN1YmljID0gNCkKICAgICAgICAgbmJyZWFr IC0gbnVtYmVyIG9mIGJyZWFrcG9pbnRzCkBAIC05MSw4ICs5MSw3IEBAIGdz bF9ic3BsaW5lX2FsbG9jKGNvbnN0IHNpemVfdCBrLCBjb25zdCBzaXplX3Qg bmJyZWFrKQogICAgIHsKICAgICAgIGdzbF9ic3BsaW5lX3dvcmtzcGFjZSAq dzsKIAotICAgICAgdyA9IChnc2xfYnNwbGluZV93b3Jrc3BhY2UgKikKLSAg ICAgICAgICBjYWxsb2MoMSwgc2l6ZW9mKGdzbF9ic3BsaW5lX3dvcmtzcGFj ZSkpOworICAgICAgdyA9IChnc2xfYnNwbGluZV93b3Jrc3BhY2UgKikgY2Fs bG9jKDEsIHNpemVvZihnc2xfYnNwbGluZV93b3Jrc3BhY2UpKTsKICAgICAg IGlmICh3ID09IDApCiAgICAgICAgIHsKICAgICAgICAgICBHU0xfRVJST1Jf TlVMTCgiZmFpbGVkIHRvIGFsbG9jYXRlIHNwYWNlIGZvciB3b3Jrc3BhY2Ui LCBHU0xfRU5PTUVNKTsKQEAgLTEwOCw3ICsxMDcsOCBAQCBnc2xfYnNwbGlu ZV9hbGxvYyhjb25zdCBzaXplX3QgaywgY29uc3Qgc2l6ZV90IG5icmVhaykK ICAgICAgIGlmICh3LT5rbm90cyA9PSAwKQogICAgICAgICB7CiAgICAgICAg ICAgZ3NsX2JzcGxpbmVfZnJlZSh3KTsKLSAgICAgICAgICBHU0xfRVJST1Jf TlVMTCgiZmFpbGVkIHRvIGFsbG9jYXRlIHNwYWNlIGZvciBrbm90cyB2ZWN0 b3IiLCBHU0xfRU5PTUVNKTsKKyAgICAgICAgICBHU0xfRVJST1JfTlVMTCgi ZmFpbGVkIHRvIGFsbG9jYXRlIHNwYWNlIGZvciBrbm90cyB2ZWN0b3IiLAor ICAgICAgICAgICAgICAgICAgICAgICAgIEdTTF9FTk9NRU0pOwogICAgICAg ICB9CiAKICAgICAgIHctPmRlbHRhbCA9IGdzbF92ZWN0b3JfYWxsb2Moayk7 CkBAIC0xMTYsNTggKzExNiwxMjAgQEAgZ3NsX2JzcGxpbmVfYWxsb2MoY29u c3Qgc2l6ZV90IGssIGNvbnN0IHNpemVfdCBuYnJlYWspCiAgICAgICBpZiAo IXctPmRlbHRhbCB8fCAhdy0+ZGVsdGFyKQogICAgICAgICB7CiAgICAgICAg ICAgZ3NsX2JzcGxpbmVfZnJlZSh3KTsKLSAgICAgICAgICBHU0xfRVJST1Jf TlVMTCgiZmFpbGVkIHRvIGFsbG9jYXRlIHNwYWNlIGZvciBkZWx0YSB2ZWN0 b3JzIiwgR1NMX0VOT01FTSk7CisgICAgICAgICAgR1NMX0VSUk9SX05VTEwo ImZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgZGVsdGEgdmVjdG9ycyIs CisgICAgICAgICAgICAgICAgICAgICAgICAgR1NMX0VOT01FTSk7CiAgICAg ICAgIH0KIAogICAgICAgdy0+QSA9IGdzbF9tYXRyaXhfYWxsb2Moaywgayk7 CiAgICAgICBpZiAody0+QSA9PSAwKQogICAgICAgICB7CiAgICAgICAgICAg Z3NsX2JzcGxpbmVfZnJlZSh3KTsKLSAgICAgICAgICBHU0xfRVJST1JfTlVM TCgiZmFpbGVkIHRvIGFsbG9jYXRlIHNwYWNlIGZvciBkZXJpdmF0aXZlIHdv cmsgbWF0cml4IiwgR1NMX0VOT01FTSk7CisgICAgICAgICAgR1NMX0VSUk9S X05VTEwoImZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgZGVyaXZhdGl2 ZSB3b3JrIG1hdHJpeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR1NM X0VOT01FTSk7CiAgICAgICAgIH0KIAogICAgICAgdy0+QiA9IGdzbF92ZWN0 b3JfYWxsb2Moayk7CiAgICAgICBpZiAody0+QiA9PSAwKQogICAgICAgICB7 CiAgICAgICAgICAgZ3NsX2JzcGxpbmVfZnJlZSh3KTsKLSAgICAgICAgICBH U0xfRVJST1JfTlVMTCgiZmFpbGVkIHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0 ZW1wb3Jhcnkgc3BsaW5lIHZlY3RvciIsIEdTTF9FTk9NRU0pOworICAgICAg ICAgIEdTTF9FUlJPUl9OVUxMKAorICAgICAgICAgICAgImZhaWxlZCB0byBh bGxvY2F0ZSBzcGFjZSBmb3IgdGVtcG9yYXJ5IHNwbGluZSB2ZWN0b3IiLAor ICAgICAgICAgICAgR1NMX0VOT01FTSk7CiAgICAgICAgIH0KIAogICAgICAg dy0+ZEIgPSBnc2xfbWF0cml4X2FsbG9jKGssIGsgKyAxKTsKICAgICAgIGlm ICh3LT5kQiA9PSAwKQogICAgICAgICB7CiAgICAgICAgICAgZ3NsX2JzcGxp bmVfZnJlZSh3KTsKLSAgICAgICAgICBHU0xfRVJST1JfTlVMTCgiZmFpbGVk IHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0ZW1wb3JhcnkgZGVyaXZhdGl2ZSBt YXRyaXgiLCBHU0xfRU5PTUVNKTsKKyAgICAgICAgICBHU0xfRVJST1JfTlVM TCgKKyAgICAgICAgICAgICJmYWlsZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9y IHRlbXBvcmFyeSBkZXJpdmF0aXZlIG1hdHJpeCIsCisgICAgICAgICAgICBH U0xfRU5PTUVNKTsKICAgICAgICAgfQogCi0KICAgICAgIHJldHVybiAodyk7 CiAgICAgfQogfSAvKiBnc2xfYnNwbGluZV9hbGxvYygpICovCiAKKy8qCitn c2xfYnNwbGluZV9kZXJpdl9hbGxvYygpCisgIEFsbG9jYXRlIHNwYWNlIGZv ciBhIGJzcGxpbmUgZGVyaXZhdGl2ZSB3b3Jrc3BhY2UuIFRoZSBzaXplIG9m IHRoZQord29ya3NwYWNlIGlzIE8oMmteMikKKworSW5wdXRzOiBic3BsaW5l IC0gZ3NsX2JzcGxpbmVfd29ya3NwYWNlIG9mIHRoZSBhc3NvY2lhdGVkIGJz cGxpbmUKKworUmV0dXJuOiBwb2ludGVyIHRvIHdvcmtzcGFjZQorKi8KKwor Z3NsX2JzcGxpbmVfZGVyaXZfd29ya3NwYWNlICoKK2dzbF9ic3BsaW5lX2Rl cml2X2FsbG9jKGdzbF9ic3BsaW5lX3dvcmtzcGFjZSAqIGJzcGxpbmUpCit7 CisgIGlmIChic3BsaW5lID09IDApCisgICAgeworICAgICAgR1NMX0VSUk9S X05VTEwoImJzcGxpbmUgbXVzdCBub3QgYmUgbnVsbCIsIEdTTF9FSU5WQUwp OworICAgIH0KKyAgZWxzZSBpZiAoYnNwbGluZS0+ayA9PSAwKQorICAgIHsK KyAgICAgIC8qIE5vdCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBhIHNhbml0 eSBjaGVjayBvbiB0aGUgYnNwbGluZSAqLworICAgICAgR1NMX0VSUk9SX05V TEwoImsgbXVzdCBiZSBhdCBsZWFzdCAxIiwgR1NMX0VJTlZBTCk7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgZ3NsX2JzcGxpbmVfZGVyaXZfd29y a3NwYWNlICp3OworCisgICAgICB3ID0gKGdzbF9ic3BsaW5lX2Rlcml2X3dv cmtzcGFjZSAqKSBjYWxsb2MoMSwKKyAgICAgICAgICBzaXplb2YoZ3NsX2Jz cGxpbmVfZGVyaXZfd29ya3NwYWNlKSk7CisgICAgICBpZiAodyA9PSAwKQor ICAgICAgICB7CisgICAgICAgICAgR1NMX0VSUk9SX05VTEwoImZhaWxlZCB0 byBhbGxvY2F0ZSBzcGFjZSBmb3Igd29ya3NwYWNlIiwgR1NMX0VOT01FTSk7 CisgICAgICAgIH0KKworICAgICAgdy0+QSA9IGdzbF9tYXRyaXhfYWxsb2Mo YnNwbGluZS0+aywgYnNwbGluZS0+ayk7CisgICAgICBpZiAody0+QSA9PSAw KQorICAgICAgICB7CisgICAgICAgICAgZ3NsX2JzcGxpbmVfZGVyaXZfZnJl ZSh3KTsKKyAgICAgICAgICBHU0xfRVJST1JfTlVMTCgiZmFpbGVkIHRvIGFs bG9jYXRlIHNwYWNlIGZvciBkZXJpdmF0aXZlIHdvcmsgbWF0cml4IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBHU0xfRU5PTUVNKTsKKyAgICAgICAg fQorCisgICAgICB3LT5kQiA9IGdzbF9tYXRyaXhfYWxsb2MoYnNwbGluZS0+ aywgYnNwbGluZS0+ayArIDEpOworICAgICAgaWYgKHctPmRCID09IDApCisg ICAgICAgIHsKKyAgICAgICAgICBnc2xfYnNwbGluZV9kZXJpdl9mcmVlKHcp OworICAgICAgICAgIEdTTF9FUlJPUl9OVUxMKAorICAgICAgICAgICAgImZh aWxlZCB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgdGVtcG9yYXJ5IGRlcml2YXRp dmUgbWF0cml4IiwKKyAgICAgICAgICAgIEdTTF9FTk9NRU0pOworICAgICAg ICB9CisKKyAgICAgIHctPmJzcGxpbmUgPSBic3BsaW5lOworCisgICAgICBy ZXR1cm4gKHcpOworICAgIH0KK30gLyogZ3NsX2JzcGxpbmVfZGVyaXZfYWxs b2MoKSAqLworCiAvKiBSZXR1cm4gbnVtYmVyIG9mIGNvZWZmaWNpZW50cyAq Lwogc2l6ZV90Ci1nc2xfYnNwbGluZV9uY29lZmZzIChnc2xfYnNwbGluZV93 b3Jrc3BhY2UgKiB3KQorZ3NsX2JzcGxpbmVfbmNvZWZmcyhnc2xfYnNwbGlu ZV93b3Jrc3BhY2UgKiB3KQogewogICByZXR1cm4gdy0+bjsKIH0KIAogLyog UmV0dXJuIG9yZGVyICovCiBzaXplX3QKLWdzbF9ic3BsaW5lX29yZGVyIChn c2xfYnNwbGluZV93b3Jrc3BhY2UgKiB3KQorZ3NsX2JzcGxpbmVfb3JkZXIo Z3NsX2JzcGxpbmVfd29ya3NwYWNlICogdykKIHsKICAgcmV0dXJuIHctPms7 CiB9CiAKIC8qIFJldHVybiBudW1iZXIgb2YgYnJlYWtwb2ludHMgKi8KIHNp emVfdAotZ3NsX2JzcGxpbmVfbmJyZWFrIChnc2xfYnNwbGluZV93b3Jrc3Bh Y2UgKiB3KQorZ3NsX2JzcGxpbmVfbmJyZWFrKGdzbF9ic3BsaW5lX3dvcmtz cGFjZSAqIHcpCiB7CiAgIHJldHVybiB3LT5uYnJlYWs7CiB9CiAKKy8qIFJl dHVybiB0aGUgbG9jYXRpb24gb2YgdGhlIGktdGggYnJlYWtwb2ludCovCiBk b3VibGUKLWdzbF9ic3BsaW5lX2JyZWFrcG9pbnQgKHNpemVfdCBpLCBnc2xf YnNwbGluZV93b3Jrc3BhY2UgKiB3KQorZ3NsX2JzcGxpbmVfYnJlYWtwb2lu dChzaXplX3QgaSwgZ3NsX2JzcGxpbmVfd29ya3NwYWNlICogdykKIHsKICAg c2l6ZV90IGogPSBpICsgdy0+ayAtIDE7CiAgIHJldHVybiBnc2xfdmVjdG9y X2dldCh3LT5rbm90cywgaik7CkBAIC0xNzUsNyArMjM3LDggQEAgZ3NsX2Jz cGxpbmVfYnJlYWtwb2ludCAoc2l6ZV90IGksIGdzbF9ic3BsaW5lX3dvcmtz cGFjZSAqIHcpCiAKIC8qCiBnc2xfYnNwbGluZV9mcmVlKCkKLSAgRnJlZSBh IGJzcGxpbmUgd29ya3NwYWNlCisgIEZyZWUgYSBnc2xfYnNwbGluZV93b3Jr c3BhY2UuCitBbnkgYXNzb2NpYXRlZCBnc2xfYnNwbGluZV9kZXJpdl93b3Jr c3BhY2Ugc2hvdWxkIGJlIGZyZWVkIGJlZm9yZWhhbmQuCiAKIElucHV0czog dyAtIHdvcmtzcGFjZSB0byBmcmVlCiAKQEAgLTE5NCwyOCArMjU3LDQ2IEBA IGdzbF9ic3BsaW5lX2ZyZWUoZ3NsX2JzcGxpbmVfd29ya3NwYWNlICp3KQog ICBpZiAody0+ZGVsdGFyKQogICAgIGdzbF92ZWN0b3JfZnJlZSh3LT5kZWx0 YXIpOwogCi0gIGlmICh3LT5BKQotICAgIGdzbF9tYXRyaXhfZnJlZSh3LT5B KTsKLQogICBpZiAody0+QikKICAgICBnc2xfdmVjdG9yX2ZyZWUody0+Qik7 CiAKKyAgZnJlZSh3KTsKK30gLyogZ3NsX2JzcGxpbmVfZnJlZSgpICovCisK Ky8qCitnc2xfYnNwbGluZV9kZXJpdl9mcmVlKCkKKyAgRnJlZSBhIGdzbF9i c3BsaW5lX2Rlcml2X3dvcmtzcGFjZS4KK1RoZSBhc3NvY2lhdGVkIGdzbF9i c3BsaW5lX3dvcmtzcGFjZSBzaG91bGQgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy4K KworSW5wdXRzOiB3IC0gd29ya3NwYWNlIHRvIGZyZWUKKworUmV0dXJuOiBu b25lCisqLworCit2b2lkCitnc2xfYnNwbGluZV9kZXJpdl9mcmVlKGdzbF9i c3BsaW5lX2Rlcml2X3dvcmtzcGFjZSAqdykKK3sKKyAgdy0+YnNwbGluZSA9 IDA7CisKKyAgaWYgKHctPkEpCisgICAgZ3NsX21hdHJpeF9mcmVlKHctPkEp OworCiAgIGlmICh3LT5kQikKICAgICBnc2xfbWF0cml4X2ZyZWUody0+ZEIp OwogCiAgIGZyZWUodyk7Ci19IC8qIGdzbF9ic3BsaW5lX2ZyZWUoKSAqLwor fSAvKiBnc2xfYnNwbGluZV9kZXJpdl9mcmVlKCkgKi8KIAogLyoKIGdzbF9i c3BsaW5lX2tub3RzKCkKICAgQ29tcHV0ZSB0aGUga25vdHMgZnJvbSB0aGUg Z2l2ZW4gYnJlYWtwb2ludHM6CiAKLWtub3RzKDE6aykgPSBicmVha3B0cygx KQota25vdHMoaysxOmsrbC0xKSA9IGJyZWFrcHRzKGkpLCBpID0gMiAuLiBs Ci1rbm90cyhuKzE6bitrKSA9IGJyZWFrcHRzKGwgKyAxKQorICAga25vdHMo MTprKSA9IGJyZWFrcHRzKDEpCisgICBrbm90cyhrKzE6aytsLTEpID0gYnJl YWtwdHMoaSksIGkgPSAyIC4uIGwKKyAgIGtub3RzKG4rMTpuK2spID0gYnJl YWtwdHMobCArIDEpCiAKIHdoZXJlIGwgaXMgdGhlIG51bWJlciBvZiBwb2x5 bm9taWFsIHBpZWNlcyAobCA9IG5icmVhayAtIDEpIGFuZAotbiA9IGsgKyBs IC0gMQorICAgbiA9IGsgKyBsIC0gMQogKHVzaW5nIG1hdGxhYiBzeW50YXgg Zm9yIHRoZSBhcnJheXMpCiAKIFRoZSByZXBlYXRlZCBrbm90cyBhdCB0aGUg YmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludGVydmFsCkBAIC0yNDQsOCAr MzI1LDcgQEAgZ3NsX2JzcGxpbmVfa25vdHMoY29uc3QgZ3NsX3ZlY3RvciAq YnJlYWtwdHMsIGdzbF9ic3BsaW5lX3dvcmtzcGFjZSAqdykKIAogICAgICAg Zm9yIChpID0gMTsgaSA8IHctPmw7ICsraSkKICAgICAgICAgewotICAgICAg ICAgIGdzbF92ZWN0b3Jfc2V0KHctPmtub3RzLCB3LT5rIC0gMSArIGksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgZ3NsX3ZlY3Rvcl9nZXQoYnJlYWtw dHMsIGkpKTsKKyAgICAgICAgICBnc2xfdmVjdG9yX3NldCh3LT5rbm90cywg dy0+ayAtIDEgKyBpLCBnc2xfdmVjdG9yX2dldChicmVha3B0cywgaSkpOwog ICAgICAgICB9CiAKICAgICAgIGZvciAoaSA9IHctPm47IGkgPCB3LT5uICsg dy0+azsgKytpKQpAQCAtMzIzLDggKzQwMyw3IEBAIE5vdGVzOiBUaGUgdy0+ a25vdHMgdmVjdG9yIG11c3QgYmUgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gY2Fs bGluZwogKi8KIAogaW50Ci1nc2xfYnNwbGluZV9ldmFsKGNvbnN0IGRvdWJs ZSB4LCBnc2xfdmVjdG9yICpCLAotICAgICAgICAgICAgICAgICBnc2xfYnNw bGluZV93b3Jrc3BhY2UgKncpCitnc2xfYnNwbGluZV9ldmFsKGNvbnN0IGRv dWJsZSB4LCBnc2xfdmVjdG9yICpCLCBnc2xfYnNwbGluZV93b3Jrc3BhY2Ug KncpCiB7CiAgIGlmIChCLT5zaXplICE9IHctPm4pCiAgICAgewpAQCAtMzU4 LDcgKzQzNyw2IEBAIGdzbF9ic3BsaW5lX2V2YWwoY29uc3QgZG91YmxlIHgs IGdzbF92ZWN0b3IgKkIsCiAgICAgfQogfSAvKiBnc2xfYnNwbGluZV9ldmFs KCkgKi8KIAotCiAvKgogZ3NsX2JzcGxpbmVfZXZhbF9ub256ZXJvKCkKICAg RXZhbHVhdGUgYWxsIG5vbi16ZXJvIEItc3BsaW5lIGZ1bmN0aW9ucyBhdCBw b2ludCB4LgpAQCAtMzY4LDcgKzQ0Niw3IEBAIEFsd2F5cyBCX2koeCkgPSAw IGZvciBpIDwgaXN0YXJ0IGFuZCBmb3IgaSA+IGllbmQuCiBJbnB1dHM6IHgg ICAgICAtIHBvaW50IGF0IHdoaWNoIHRvIGV2YWx1YXRlIHNwbGluZXMKICAg ICAgICAgQmsgICAgIC0gKG91dHB1dCkgd2hlcmUgdG8gc3RvcmUgQi1zcGxp bmUgdmFsdWVzIChsZW5ndGggaykKICAgICAgICAgaXN0YXJ0IC0gKG91dHB1 dCkgQi1zcGxpbmUgZnVuY3Rpb24gaW5kZXggb2YKLSAgICAgICAgICAgICAg ICAgICAgZmlyc3Qgbm9uLXplcm8gYmFzaXMgZm9yIGdpdmVuIHgKKyAgICAg ICAgICAgICAgICAgZmlyc3Qgbm9uLXplcm8gYmFzaXMgZm9yIGdpdmVuIHgK ICAgICAgICAgaWVuZCAgIC0gKG91dHB1dCkgQi1zcGxpbmUgZnVuY3Rpb24g aW5kZXggb2YKICAgICAgICAgICAgICAgICAgbGFzdCBub24temVybyBiYXNp cyBmb3IgZ2l2ZW4geC4KICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhbHNv IHRoZSBrbm90IGluZGV4IGNvcnJlc3BvbmRpbmcgdG8geC4KQEAgLTM4MSwx OCArNDU5LDE1IEBAIE5vdGVzOiAxKSB0aGUgdy0+a25vdHMgdmVjdG9yIG11 c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcKIAogICAgICAgIDIp IE9uIG91dHB1dCwgQiBjb250YWlucwogCi0gICAgICAgICAgICAgIFtCX3tp c3RhcnQsa30sIEJfe2lzdGFydCsxLGt9LAotICAgICAgICAgICAgICAgLi4u LCBCX3tpZW5kLTEsa30sIEJfe2llbmQsa31dCisgICAgICAgICAgICAgW0Jf e2lzdGFydCxrfSwgQl97aXN0YXJ0KzEsa30sCisgICAgICAgICAgICAgLi4u LCBCX3tpZW5kLTEsa30sIEJfe2llbmQsa31dCiAKICAgICAgICAgICBldmFs dWF0ZWQgYXQgdGhlIGdpdmVuIHguCiAqLwogCiBpbnQKLWdzbF9ic3BsaW5l X2V2YWxfbm9uemVybyhjb25zdCBkb3VibGUgeCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICBnc2xfdmVjdG9yICpCaywKLSAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgKmlzdGFydCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgKmllbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg Z3NsX2JzcGxpbmVfd29ya3NwYWNlICp3KQorZ3NsX2JzcGxpbmVfZXZhbF9u b256ZXJvKGNvbnN0IGRvdWJsZSB4LCBnc2xfdmVjdG9yICpCaywgc2l6ZV90 ICppc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpp ZW5kLCBnc2xfYnNwbGluZV93b3Jrc3BhY2UgKncpCiB7CiAgIGlmIChCay0+ c2l6ZSAhPSB3LT5rKQogICAgIHsKQEAgLTQwMCw5ICs0NzUsOSBAQCBnc2xf YnNwbGluZV9ldmFsX25vbnplcm8oY29uc3QgZG91YmxlIHgsCiAgICAgfQog ICBlbHNlCiAgICAgewotICAgICAgc2l6ZV90IGk7ICAvKiBzcGxpbmUgaW5k ZXggKi8KLSAgICAgIHNpemVfdCBqOyAgLyogbG9vcGluZyAqLwotICAgICAg aW50IGZsYWcgID0gMDsgLyogaW50ZXJ2YWwgc2VhcmNoIGZsYWcgKi8KKyAg ICAgIHNpemVfdCBpOyAgICAgIC8qIHNwbGluZSBpbmRleCAqLworICAgICAg c2l6ZV90IGo7ICAgICAgLyogbG9vcGluZyAqLworICAgICAgaW50IGZsYWcg PSAwOyAgLyogaW50ZXJ2YWwgc2VhcmNoIGZsYWcgKi8KICAgICAgIGludCBl cnJvciA9IDA7IC8qIGVycm9yIGZsYWcgKi8KIAogICAgICAgaSA9IGJzcGxp bmVfZmluZF9pbnRlcnZhbCh4LCAmZmxhZywgdyk7CkBAIC00MTUsMjcgKzQ5 MCwyNiBAQCBnc2xfYnNwbGluZV9ldmFsX25vbnplcm8oY29uc3QgZG91Ymxl IHgsCiAgICAgICAqaXN0YXJ0ID0gaSAtIHctPmsgKyAxOwogICAgICAgKmll bmQgPSBpOwogCi0gICAgICBic3BsaW5lX3BwcGFja19ic3BsdmIody0+a25v dHMsIHctPmssIDEsIHgsICppZW5kLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZqLCB3LT5kZWx0YWwsIHctPmRlbHRhciwgQmspOworICAgICAg YnNwbGluZV9wcHBhY2tfYnNwbHZiKHctPmtub3RzLCB3LT5rLCAxLCB4LCAq aWVuZCwgJmosIHctPmRlbHRhbCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3LT5kZWx0YXIsIEJrKTsKIAogICAgICAgcmV0dXJuIEdTTF9TVUND RVNTOwogICAgIH0KIH0gLyogZ3NsX2JzcGxpbmVfZXZhbF9ub256ZXJvKCkg Ki8KIAogLyoKLWdzbF9ic3BsaW5lX2V2YWxfZGVyaXYoKQorZ3NsX2JzcGxp bmVfZGVyaXZfZXZhbCgpCiAgIEV2YWx1YXRlIGReai9keF5qIEJfaSh4KSBm b3IgYWxsIGksIDAgPD0gaiA8PSBuZGVyaXYuCi1UaGlzIGlzIGEgd3JhcHBl ciBmdW5jdGlvbiBmb3IgZ3NsX2JzcGxpbmVfZXZhbF9kZXJpdl9ub256ZXJv KCkKK1RoaXMgaXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBnc2xfYnNwbGlu ZV9kZXJpdl9ldmFsX25vbnplcm8oKQogd2hpY2ggZm9ybWF0cyB0aGUgb3V0 cHV0IGluIGEgbmljZSB3YXkuCiAKIElucHV0czogeCAgICAgIC0gcG9pbnQg Zm9yIGV2YWx1YXRpb24KLSAgICAgICAgbmRlcml2IC0gbnVtYmVyIG9mIGRl cml2YXRpdmVzIHRvIGNvbXB1dGUsCi0gICAgICAgICAgICAgICAgIGluY2x1 c2l2ZS4KKyAgICAgICAgbmRlcml2IC0gbnVtYmVyIG9mIGRlcml2YXRpdmVz IHRvIGNvbXB1dGUsIGluY2x1c2l2ZS4KICAgICAgICAgZEIgICAgIC0gKG91 dHB1dCkgd2hlcmUgdG8gc3RvcmUgZF5qL2R4XmogQl9pKHgpCiAgICAgICAg ICAgICAgICAgIHZhbHVlcy4gdGhlIHNpemUgb2YgdGhpcyBtYXRyaXggaXMK ICAgICAgICAgICAgICAgICAgKG4gPSBuYnJlYWsgKyBrIC0gMiA9IGwgKyBr IC0gMSA9IHctPm4pCiAgICAgICAgICAgICAgICAgIGJ5IChuZGVyaXYgKyAx KQotICAgICAgICB3ICAgICAgLSBic3BsaW5lIHdvcmtzcGFjZQorICAgICAg ICB3ICAgICAgLSBic3BsaW5lIGRlcml2YXRpdmUgd29ya3NwYWNlCiAKIFJl dHVybjogc3VjY2VzcyBvciBlcnJvcgogCkBAIC00NDYsMzAgKzUyMCwyOSBA QCBOb3RlczogMSkgVGhlIHctPmtub3RzIHZlY3RvciBtdXN0IGJlIGluaXRp YWxpemVkIHByaW9yIHRvIGNhbGxpbmcKICovCiAKIGludAotZ3NsX2JzcGxp bmVfZXZhbF9kZXJpdihjb25zdCBkb3VibGUgeCwKLSAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc2l6ZV90IG5kZXJpdiwKLSAgICAgICAgICAgICAg ICAgICAgICAgZ3NsX21hdHJpeCAqZEIsCi0gICAgICAgICAgICAgICAgICAg ICAgIGdzbF9ic3BsaW5lX3dvcmtzcGFjZSAqdykKK2dzbF9ic3BsaW5lX2Rl cml2X2V2YWwoY29uc3QgZG91YmxlIHgsIGNvbnN0IHNpemVfdCBuZGVyaXYs IGdzbF9tYXRyaXggKmRCLAorICAgICAgICAgICAgICAgICAgICAgICBnc2xf YnNwbGluZV9kZXJpdl93b3Jrc3BhY2UgKncpCiB7Ci0gIGlmIChkQi0+c2l6 ZTEgIT0gdy0+bikKKyAgaWYgKGRCLT5zaXplMSAhPSB3LT5ic3BsaW5lLT5u KQogICAgIHsKICAgICAgIEdTTF9FUlJPUigiZEIgbWF0cml4IGZpcnN0IGRp bWVuc2lvbiBub3Qgb2YgbGVuZ3RoIG4iLCBHU0xfRUJBRExFTik7CiAgICAg fQotICBlbHNlIGlmIChkQi0+c2l6ZTIgPCBuZGVyaXYrMSkKKyAgZWxzZSBp ZiAoZEItPnNpemUyIDwgbmRlcml2ICsgMSkKICAgICB7Ci0gICAgICBHU0xf RVJST1IoImRCIG1hdHJpeCBzZWNvbmQgZGltZW5zaW9uIG11c3QgYmUgYXQg bGVhc3QgbGVuZ3RoIG5kZXJpdisxIiwgR1NMX0VCQURMRU4pOworICAgICAg R1NMX0VSUk9SKCJkQiBtYXRyaXggc2Vjb25kIGRpbWVuc2lvbiBtdXN0IGJl IGF0IGxlYXN0IGxlbmd0aCBuZGVyaXYrMSIsCisgICAgICAgICAgICAgICAg R1NMX0VCQURMRU4pOwogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIHNp emVfdCBpOyAgICAgICAgIC8qIGxvb3BpbmcgKi8KLSAgICAgIHNpemVfdCBq OyAgICAgICAgIC8qIGxvb3BpbmcgKi8KLSAgICAgIHNpemVfdCBpc3RhcnQ7 ICAgIC8qIGZpcnN0IG5vbi16ZXJvIHNwbGluZSBmb3IgeCAqLwotICAgICAg c2l6ZV90IGllbmQ7ICAgICAgLyogbGFzdCBub24temVybyBzcGxpbmUgZm9y IHgsIGtub3QgZm9yIHgqLwotICAgICAgaW50IGVycm9yOyAgICAgICAgLyog ZXJyb3IgaGFuZGxpbmcgKi8KKyAgICAgIHNpemVfdCBpOyAgICAgIC8qIGxv b3BpbmcgKi8KKyAgICAgIHNpemVfdCBqOyAgICAgIC8qIGxvb3BpbmcgKi8K KyAgICAgIHNpemVfdCBpc3RhcnQ7IC8qIGZpcnN0IG5vbi16ZXJvIHNwbGlu ZSBmb3IgeCAqLworICAgICAgc2l6ZV90IGllbmQ7ICAgLyogbGFzdCBub24t emVybyBzcGxpbmUgZm9yIHgsIGtub3QgZm9yIHgqLworICAgICAgaW50IGVy cm9yOyAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KIAogICAgICAgLyogZmlu ZCBhbGwgbm9uLXplcm8gZF5qL2R4XmogQl9pKHgpIHZhbHVlcyAqLwotICAg ICAgZXJyb3IgPSBnc2xfYnNwbGluZV9ldmFsX2Rlcml2X25vbnplcm8oCi0g ICAgICAgICAgICAgICAgeCwgbmRlcml2LCB3LT5kQiwgJmlzdGFydCwgJmll bmQsIHcpOworICAgICAgZXJyb3IgPSBnc2xfYnNwbGluZV9kZXJpdl9ldmFs X25vbnplcm8oeCwgbmRlcml2LCB3LT5kQiwgJmlzdGFydCwgJmllbmQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 KTsKICAgICAgIGlmIChlcnJvcikKICAgICAgICAgewogICAgICAgICAgIHJl dHVybiBlcnJvcjsKQEAgLTQ4NCwxNiArNTU3LDE2IEBAIGdzbF9ic3BsaW5l X2V2YWxfZGVyaXYoY29uc3QgZG91YmxlIHgsCiAgICAgICAgICAgZm9yIChp ID0gaXN0YXJ0OyBpIDw9IGllbmQ7ICsraSkKICAgICAgICAgICAgIGdzbF9t YXRyaXhfc2V0KGRCLCBpLCBqLCBnc2xfbWF0cml4X2dldCh3LT5kQiwgaSAt IGlzdGFydCwgaikpOwogCi0gICAgICAgICAgZm9yIChpID0gaWVuZCArIDE7 IGkgPCB3LT5uOyArK2kpCisgICAgICAgICAgZm9yIChpID0gaWVuZCArIDE7 IGkgPCB3LT5ic3BsaW5lLT5uOyArK2kpCiAgICAgICAgICAgICBnc2xfbWF0 cml4X3NldChkQiwgaSwgaiwgMC4wKTsKICAgICAgICAgfQogCiAgICAgICBy ZXR1cm4gR1NMX1NVQ0NFU1M7CiAgICAgfQotfSAvKiBnc2xfYnNwbGluZV9l dmFsX2Rlcml2KCkgKi8KK30gLyogZ3NsX2JzcGxpbmVfZGVyaXZfZXZhbCgp ICovCiAKIC8qCi1nc2xfYnNwbGluZV9ldmFsX2Rlcml2X25vbnplcm8oKQor Z3NsX2JzcGxpbmVfZGVyaXZfZXZhbF9ub256ZXJvKCkKICAgQXQgcG9pbnQg eCBldmFsdWF0ZSBhbGwgcmVxdWVzdGVkLCBub24temVybyBCLXNwbGluZSBm dW5jdGlvbgogZGVyaXZhdGl2ZXMgYW5kIHN0b3JlIHRoZW0gaW4gZEIuICBU aGVzZSBhcmUgdGhlCiBkXmovZHheaiBCX2koeCkgd2l0aCBpIGluIFtpc3Rh cnQsIGllbmRdIGFuZCBqIGluIFswLCBuZGVyaXZdLgpAQCAtNTA4LDcgKzU4 MSw3IEBAIElucHV0czogeCAgICAgIC0gcG9pbnQgYXQgd2hpY2ggdG8gZXZh bHVhdGUgc3BsaW5lcwogICAgICAgICBpZW5kICAgLSAob3V0cHV0KSBCLXNw bGluZSBmdW5jdGlvbiBpbmRleCBvZgogICAgICAgICAgICAgICAgICBsYXN0 IG5vbi16ZXJvIGJhc2lzIGZvciBnaXZlbiB4LgogICAgICAgICAgICAgICAg ICBUaGlzIGlzIGFsc28gdGhlIGtub3QgaW5kZXggY29ycmVzcG9uZGluZyB0 byB4LgotICAgICAgICB3ICAgICAgLSBic3BsaW5lIHdvcmtzcGFjZQorICAg ICAgICB3ICAgICAgLSBic3BsaW5lIGRlcml2YXRpdmUgd29ya3NwYWNlCiAK IFJldHVybjogc3VjY2VzcyBvciBlcnJvcgogCkBAIC01MTcsMTQgKzU5MCwx NCBAQCBOb3RlczogMSkgdGhlIHctPmtub3RzIHZlY3RvciBtdXN0IGJlIGlu aXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nCiAKICAgICAgICAyKSBPbiBvdXRw dXQsIGRCIGNvbnRhaW5zCiAKLSAgICAgICBbW0Jfe2lzdGFydCwgIGt9LCAu Li4sIGRebmRlcml2L2R4Xm5kZXJpdiBCX3tpc3RhcnQgICxrfV0sCi0gICAg ICAgIFtCX3tpc3RhcnQrMSxrfSwgLi4uLCBkXm5kZXJpdi9keF5uZGVyaXYg Ql97aXN0YXJ0KzEsa31dLAotICAgICAgICAuLi4KLSAgICAgICAgW0Jfe2ll bmQtMSwgIGt9LCAuLi4sIGRebmRlcml2L2R4Xm5kZXJpdiBCX3tpZW5kLTEs ICBrfV0sCi0gICAgICAgIFtCX3tpZW5kLCAgICBrfSwgLi4uLCBkXm5kZXJp di9keF5uZGVyaXYgQl97aWVuZCwgICAga31dXQorICAgICAgICAgICAgW1tC X3tpc3RhcnQsICBrfSwgLi4uLCBkXm5kZXJpdi9keF5uZGVyaXYgQl97aXN0 YXJ0ICAsa31dLAorICAgICAgICAgICAgIFtCX3tpc3RhcnQrMSxrfSwgLi4u LCBkXm5kZXJpdi9keF5uZGVyaXYgQl97aXN0YXJ0KzEsa31dLAorICAgICAg ICAgICAgIC4uLgorICAgICAgICAgICAgIFtCX3tpZW5kLTEsICBrfSwgLi4u LCBkXm5kZXJpdi9keF5uZGVyaXYgQl97aWVuZC0xLCAga31dLAorICAgICAg ICAgICAgIFtCX3tpZW5kLCAgICBrfSwgLi4uLCBkXm5kZXJpdi9keF5uZGVy aXYgQl97aWVuZCwgICAga31dXQogCi0gICAgICAgIGV2YWx1YXRlZCBhdCB4 LiAgQl97aXN0YXJ0LCBrfSBpcyBzdG9yZWQgaW4gZEIoMCwwKS4KLSAgICAg ICAgRWFjaCBhZGRpdGlvbmFsIGNvbHVtbiBjb250YWlucyBhbiBhZGRpdGlv bmFsIGRlcml2YXRpdmUuCisgICAgICAgICAgZXZhbHVhdGVkIGF0IHguICBC X3tpc3RhcnQsIGt9IGlzIHN0b3JlZCBpbiBkQigwLDApLgorICAgICAgICAg IEVhY2ggYWRkaXRpb25hbCBjb2x1bW4gY29udGFpbnMgYW4gYWRkaXRpb25h bCBkZXJpdmF0aXZlLgogCiAgICAgICAgMykgTm90ZSB0aGF0IHRoZSB6ZXJv LXRoIGNvbHVtbiBvZiB0aGUgcmVzdWx0IGNvbnRhaW5zIHRoZQogICAgICAg ICAgIDB0aCBkZXJpdmF0aXZlLCB3aGljaCBpcyBzaW1wbHkgYSBmdW5jdGlv biBldmFsdWF0aW9uLgpAQCAtNTMzLDQ4ICs2MDYsNDYgQEAgTm90ZXM6IDEp IHRoZSB3LT5rbm90cyB2ZWN0b3IgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZv cmUgY2FsbGluZwogKi8KIAogaW50Ci1nc2xfYnNwbGluZV9ldmFsX2Rlcml2 X25vbnplcm8oY29uc3QgZG91YmxlIHgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG5kZXJpdiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnc2xfbWF0cml4ICpkQiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlzdGFydCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmllbmQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NsX2JzcGxpbmVfd29ya3Nw YWNlICp3KQorZ3NsX2JzcGxpbmVfZGVyaXZfZXZhbF9ub256ZXJvKGNvbnN0 IGRvdWJsZSB4LCBjb25zdCBzaXplX3QgbmRlcml2LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdzbF9tYXRyaXggKmRCLCBzaXplX3QgKmlz dGFydCwgc2l6ZV90ICppZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdzbF9ic3BsaW5lX2Rlcml2X3dvcmtzcGFjZSAqdykKIHsKLSAg aWYgKGRCLT5zaXplMSAhPSB3LT5rKQorICBpZiAoZEItPnNpemUxICE9IHct PmJzcGxpbmUtPmspCiAgICAgewogICAgICAgR1NMX0VSUk9SKCJkQiBtYXRy aXggZmlyc3QgZGltZW5zaW9uIG5vdCBvZiBsZW5ndGggayIsIEdTTF9FQkFE TEVOKTsKICAgICB9Ci0gIGVsc2UgaWYgKGRCLT5zaXplMiA8IG5kZXJpdisx KQorICBlbHNlIGlmIChkQi0+c2l6ZTIgPCBuZGVyaXYgKyAxKQogICAgIHsK LSAgICAgIEdTTF9FUlJPUigiZEIgbWF0cml4IHNlY29uZCBkaW1lbnNpb24g bXVzdCBiZSBhdCBsZWFzdCBsZW5ndGggbmRlcml2KzEiLCBHU0xfRUJBRExF Tik7CisgICAgICBHU0xfRVJST1IoImRCIG1hdHJpeCBzZWNvbmQgZGltZW5z aW9uIG11c3QgYmUgYXQgbGVhc3QgbGVuZ3RoIG5kZXJpdisxIiwKKyAgICAg ICAgICAgICAgICBHU0xfRUJBRExFTik7CiAgICAgfQogICBlbHNlCiAgICAg ewogICAgICAgc2l6ZV90IGk7ICAgICAgLyogc3BsaW5lIGluZGV4ICovCiAg ICAgICBzaXplX3QgajsgICAgICAvKiBsb29waW5nICovCi0gICAgICBpbnQg ZmxhZyAgPSAwOyAvKiBpbnRlcnZhbCBzZWFyY2ggZmxhZyAqLworICAgICAg aW50IGZsYWcgPSAwOyAgLyogaW50ZXJ2YWwgc2VhcmNoIGZsYWcgKi8KICAg ICAgIGludCBlcnJvciA9IDA7IC8qIGVycm9yIGZsYWcgKi8KICAgICAgIHNp emVfdCBtaW5fbmRlcml2azsKIAotICAgICAgaSA9IGJzcGxpbmVfZmluZF9p bnRlcnZhbCh4LCAmZmxhZywgdyk7Ci0gICAgICBlcnJvciA9IGJzcGxpbmVf cHJvY2Vzc19pbnRlcnZhbF9mb3JfZXZhbCh4LCAmaSwgZmxhZywgdyk7Cisg ICAgICBpID0gYnNwbGluZV9maW5kX2ludGVydmFsKHgsICZmbGFnLCB3LT5i c3BsaW5lKTsKKyAgICAgIGVycm9yID0gYnNwbGluZV9wcm9jZXNzX2ludGVy dmFsX2Zvcl9ldmFsKHgsICZpLCBmbGFnLCB3LT5ic3BsaW5lKTsKICAgICAg IGlmIChlcnJvcikKICAgICAgICAgewogICAgICAgICAgIHJldHVybiBlcnJv cjsKICAgICAgICAgfQogCi0gICAgICAqaXN0YXJ0ID0gaSAtIHctPmsgKyAx OworICAgICAgKmlzdGFydCA9IGkgLSB3LT5ic3BsaW5lLT5rICsgMTsKICAg ICAgICppZW5kID0gaTsKIAotICAgICAgYnNwbGluZV9wcHBhY2tfYnNwbHZk KHctPmtub3RzLCB3LT5rLCB4LCAqaWVuZCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3LT5kZWx0YWwsIHctPmRlbHRhciwgdy0+QSwgZEIsIG5k ZXJpdik7CisgICAgICBic3BsaW5lX3BwcGFja19ic3BsdmQody0+YnNwbGlu ZS0+a25vdHMsIHctPmJzcGxpbmUtPmssIHgsICppZW5kLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHctPmJzcGxpbmUtPmRlbHRhbCwgdy0+YnNw bGluZS0+ZGVsdGFyLCB3LT5BLCBkQiwgbmRlcml2KTsKIAogICAgICAgLyog QW4gb3JkZXIgayBiLXNwbGluZSBoYXMgYXQgbW9zdCBrLTEgbm9uemVybyBk ZXJpdmF0aXZlcwotICAgICAgICAgc28gd2UgbmVlZCB0byB6ZXJvIGFsbCBy ZXF1ZXN0ZWQgaGlnaGVyIG9yZGVyIGRlcml2YXRpdmVzICovCi0gICAgICBt aW5fbmRlcml2ayA9IEdTTF9NSU5fSU5UKG5kZXJpdiwgdy0+ayAtIDEpOwor ICAgICAgIHNvIHdlIG5lZWQgdG8gemVybyBhbGwgcmVxdWVzdGVkIGhpZ2hl ciBvcmRlciBkZXJpdmF0aXZlcyAqLworICAgICAgbWluX25kZXJpdmsgPSBH U0xfTUlOX0lOVChuZGVyaXYsIHctPmJzcGxpbmUtPmsgLSAxKTsKICAgICAg IGZvciAoaiA9IG1pbl9uZGVyaXZrICsgMTsgaiA8PSBuZGVyaXY7ICsraikK ICAgICAgICAgewotICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3LT5rOyAr K2kpCisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHctPmJzcGxpbmUtPms7 ICsraSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZ3NsX21hdHJp eF9zZXQoZEIsIGksIGosIDAuMCk7CiAgICAgICAgICAgICB9CkBAIC01ODIs OCArNjUzLDcgQEAgZ3NsX2JzcGxpbmVfZXZhbF9kZXJpdl9ub256ZXJvKGNv bnN0IGRvdWJsZSB4LAogCiAgICAgICByZXR1cm4gR1NMX1NVQ0NFU1M7CiAg ICAgfQotfSAvKiBnc2xfYnNwbGluZV9ldmFsX2Rlcml2X25vbnplcm8oKSAq LwotCit9IC8qIGdzbF9ic3BsaW5lX2Rlcml2X2V2YWxfbm9uemVybygpICov CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CiAgKiAgICAgICAgICBJTlRFUk5BTCBST1VUSU5FUyAgICAgICAgICAgKgpA QCAtNTkxLDEwICs2NjEsNyBAQCBnc2xfYnNwbGluZV9ldmFsX2Rlcml2X25v bnplcm8oY29uc3QgZG91YmxlIHgsCiAKIC8qCiBic3BsaW5lX2ZpbmRfaW50 ZXJ2YWwoKQotICBGaW5kIGtub3QgaW50ZXJ2YWwgc3VjaCB0aGF0Ci0KLSAg dF9pIDw9IHggPCB0X3tpICsgMX0KLQorICBGaW5kIGtub3QgaW50ZXJ2YWwg c3VjaCB0aGF0IHRfaSA8PSB4IDwgdF97aSArIDF9CiB3aGVyZSB0aGUgdF9p IGFyZSBrbm90IHZhbHVlcy4KIAogSW5wdXRzOiB4ICAgIC0geCB2YWx1ZQpA QCAtNjA1LDE3ICs2NzIsMTYgQEAgUmV0dXJuOiBpIChpbmRleCBpbiB3LT5r bm90cyBjb3JyZXNwb25kaW5nIHRvIGxlZnQgbGltaXQgb2YgaW50ZXJ2YWwp CiAKIE5vdGVzOiBUaGUgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQg YXMgZm9sbG93czoKIAotQ29uZGl0aW9uICAgICAgICAgICAgICAgICAgICAg ICAgUmV0dXJuIHZhbHVlICAgICAgICBGbGFnCi0tLS0tLS0tLS0gICAgICAg ICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0gICAgICAgIC0tLS0KLXgg PCB0XzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAg ICAgICAgIC0xCi10X2kgPD0geCA8IHRfe2krMX0gICAgICAgICAgICAgICAg ICAgIGkgICAgICAgICAgICAgICAgMAotdF9pIDwgeCA9IHRfe2krMX0gPSB0 X3tuK2stMX0gICAgICAgICBpICAgICAgICAgICAgICAgIDAKLXRfe24ray0x fSA8IHggICAgICAgICAgICAgICAgICAgICAgIGwray0xICAgICAgICAgICAg ICsxCisgICAgICAgQ29uZGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAg UmV0dXJuIHZhbHVlICAgICAgICBGbGFnCisgICAgICAgLS0tLS0tLS0tICAg ICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tICAgICAgICAtLS0t CisgICAgICAgeCA8IHRfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwICAgICAgICAgICAgICAgLTEKKyAgICAgICB0X2kgPD0geCA8IHRfe2kr MX0gICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgICAgICAgMAorICAg ICAgIHRfaSA8IHggPSB0X3tpKzF9ID0gdF97bitrLTF9ICAgICAgICAgaSAg ICAgICAgICAgICAgICAwCisgICAgICAgdF97bitrLTF9IDwgeCAgICAgICAg ICAgICAgICAgICAgICAgbCtrLTEgICAgICAgICAgICAgKzEKICovCiAKIHN0 YXRpYyBpbmxpbmUgc2l6ZV90Ci1ic3BsaW5lX2ZpbmRfaW50ZXJ2YWwoY29u c3QgZG91YmxlIHgsIGludCAqZmxhZywKLSAgICAgICAgICAgICAgICAgICAg ICBnc2xfYnNwbGluZV93b3Jrc3BhY2UgKncpCitic3BsaW5lX2ZpbmRfaW50 ZXJ2YWwoY29uc3QgZG91YmxlIHgsIGludCAqZmxhZywgZ3NsX2JzcGxpbmVf d29ya3NwYWNlICp3KQogewogICBzaXplX3QgaTsKIApAQCAtNjM5LDggKzcw NSw4IEBAIGJzcGxpbmVfZmluZF9pbnRlcnZhbChjb25zdCBkb3VibGUgeCwg aW50ICpmbGFnLAogICAgICAgaWYgKHRpIDw9IHggJiYgeCA8IHRpcDEpCiAg ICAgICAgIGJyZWFrOwogCi0gICAgICBpZiAodGkgPCB4ICYmIHggPT0gdGlw MSAmJgotICAgICAgICAgIHRpcDEgPT0gZ3NsX3ZlY3Rvcl9nZXQody0+a25v dHMsIHctPmsgKyB3LT5sIC0gMSkpCisgICAgICBpZiAodGkgPCB4ICYmIHgg PT0gdGlwMSAmJiB0aXAxID09IGdzbF92ZWN0b3JfZ2V0KHctPmtub3RzLCB3 LT5rICsgdy0+bAorICAgICAgICAgIC0gMSkpCiAgICAgICAgIGJyZWFrOwog ICAgIH0KIApAQCAtNjUyLDE3ICs3MTgsMTYgQEAgYnNwbGluZV9maW5kX2lu dGVydmFsKGNvbnN0IGRvdWJsZSB4LCBpbnQgKmZsYWcsCiAgIHJldHVybiBp OwogfSAvKiBic3BsaW5lX2ZpbmRfaW50ZXJ2YWwoKSAqLwogCi0KIC8qCiBi c3BsaW5lX3Byb2Nlc3NfaW50ZXJ2YWxfZm9yX2V2YWwoKQotICAgIENvbnN1 bWVzIGFuIHggbG9jYXRpb24sIGxlZnQga25vdCBmcm9tIGJzcGxpbmVfZmlu ZF9pbnRlcnZhbCwgZmxhZworICBDb25zdW1lcyBhbiB4IGxvY2F0aW9uLCBs ZWZ0IGtub3QgZnJvbSBic3BsaW5lX2ZpbmRfaW50ZXJ2YWwsIGZsYWcKIGZy b20gYnNwbGluZV9maW5kX2ludGVydmFsLCBhbmQgYSB3b3Jrc3BhY2UuICBD aGVja3MgdGhhdCB4IGxpZXMgd2l0aGluCiB0aGUgc3BsaW5lcycga25vdHMs IGVuZm9yY2VzIHNvbWUgZW5kcG9pbnQgY29udGludWl0eSByZXF1aXJlbWVu dHMsIGFuZAogYXZvaWRzIGRpdmlkZSBieSB6ZXJvIGVycm9ycyBpbiB0aGUg dW5kZXJseWluZyBic3BsaW5lX3BwcGFja18qIGZ1bmN0aW9ucy4KLSAqLwot c3RhdGljIGlubGluZSBpbnQgYnNwbGluZV9wcm9jZXNzX2ludGVydmFsX2Zv cl9ldmFsKAotICBjb25zdCBkb3VibGUgeCwgc2l6ZV90ICppLCBjb25zdCBp bnQgZmxhZywgZ3NsX2JzcGxpbmVfd29ya3NwYWNlCi0gICp3KQorKi8KK3N0 YXRpYyBpbmxpbmUgaW50Citic3BsaW5lX3Byb2Nlc3NfaW50ZXJ2YWxfZm9y X2V2YWwoY29uc3QgZG91YmxlIHgsIHNpemVfdCAqaSwgY29uc3QgaW50IGZs YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NsX2Jz cGxpbmVfd29ya3NwYWNlICp3KQogewogICBpZiAoZmxhZyA9PSAtMSkKICAg ICB7CkBAIC02ODksNyArNzU0LDYgQEAgc3RhdGljIGlubGluZSBpbnQgYnNw bGluZV9wcm9jZXNzX2ludGVydmFsX2Zvcl9ldmFsKAogICByZXR1cm4gR1NM X1NVQ0NFU1M7CiB9IC8qIGJzcGxpbmVfcHJvY2Vzc19pbnRlcnZhbF9mb3Jf ZXZhbCAqLwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUFBQ QUNLIFJPVVRJTkVTCiAgKgpAQCAtNzA1LDY2ICs3NjksNzEgQEAgYnNwbGlu ZV9wcHBhY2tfYnNwbHZiKCkKIGpvdXQgPSBtYXgoIGpoaWdoICwgKGorMSkq KGluZGV4LTEpICkgd2l0aCBrbm90IHNlcXVlbmNlIHQuCiAKIFBhcmFtZXRl cnM6Ci0gICAgICAgIHQgICAgICAtIGtub3Qgc2VxdWVuY2UsIG9mIGxlbmd0 aCBsZWZ0ICsgam91dCAsIGFzc3VtZWQgdG8gYmUKLSAgICAgICAgICAgICAg ICAgbm9uZGVjcmVhc2luZy4gIGFzc3VtcHRpb24gdChsZWZ0KS5sdC50KGxl ZnQgKyAxKS4KLSAgICAgICAgICAgICAgICAgZGl2aXNpb24gYnkgemVybyAg d2lsbCByZXN1bHQgaWYgdChsZWZ0KSA9IHQobGVmdCsxKQotICAgICAgICBq aGlnaCAgLQotICAgICAgICBpbmRleCAgLSBpbnRlZ2VycyB3aGljaCBkZXRl cm1pbmUgdGhlIG9yZGVyIGpvdXQgPSBtYXgoamhpZ2gsCi0gICAgICAgICAg ICAgICAgIChqKzEpKihpbmRleC0xKSkgIG9mIHRoZSBiLXNwbGluZXMgd2hv c2UgdmFsdWVzIGF0IHgKLSAgICAgICAgICAgICAgICAgYXJlIHRvIGJlIHJl dHVybmVkLiAgaW5kZXggIGlzIHVzZWQgdG8gYXZvaWQKLSAgICAgICAgICAg ICAgICAgcmVjYWxjdWxhdGlvbnMgd2hlbiBzZXZlcmFsIGNvbHVtbnMgb2Yg dGhlIHRyaWFuZ3VsYXIKLSAgICAgICAgICAgICAgICAgYXJyYXkgb2YgYi1z cGxpbmUgdmFsdWVzIGFyZSBuZWVkZWQgKGUuZy4sIGluICBic3BscHAKLSAg ICAgICAgICAgICAgICAgb3IgaW4gIGJzcGx2ZCApLgotICAgICAgICAgICAg ICAgICBwcmVjaXNlbHksIGlmICBpbmRleCA9IDEgLAotICAgICAgICAgICAg ICAgICAgIHRoZSBjYWxjdWxhdGlvbiBzdGFydHMgZnJvbSBzY3JhdGNoIGFu ZCB0aGUgZW50aXJlCi0gICAgICAgICAgICAgICAgICAgdHJpYW5ndWxhciBh cnJheSBvZiBiLXNwbGluZSB2YWx1ZXMgb2Ygb3JkZXJzCi0gICAgICAgICAg ICAgICAgICAgMSwyLC4uLixqaGlnaCAgaXMgZ2VuZXJhdGVkIG9yZGVyIGJ5 IG9yZGVyICwgaS5lLiwKLSAgICAgICAgICAgICAgICAgICBjb2x1bW4gYnkg Y29sdW1uIC4KLSAgICAgICAgICAgICAgICAgaWYgIGluZGV4ID0gMiAsCi0g ICAgICAgICAgICAgICAgICAgb25seSB0aGUgYi1zcGxpbmUgdmFsdWVzIG9m IG9yZGVyIGorMSwgaisyLCAuLi4sIGpvdXQKLSAgICAgICAgICAgICAgICAg ICBhcmUgZ2VuZXJhdGVkLCB0aGUgYXNzdW1wdGlvbiBiZWluZyB0aGF0IGJp YXR4LCBqLAotICAgICAgICAgICAgICAgICAgIGRlbHRhbCwgZGVsdGFyIGFy ZSwgb24gZW50cnksIGFzIHRoZXkgd2VyZSBvbiBleGl0Ci0gICAgICAgICAg ICAgICAgICAgYXQgdGhlIHByZXZpb3VzIGNhbGwuCi0gICAgICAgICAgICAg ICAgICAgaW4gcGFydGljdWxhciwgaWYgamhpZ2ggPSAwLCB0aGVuIGpvdXQg PSBqKzEsIGkuZS4sCi0gICAgICAgICAgICAgICAgICAganVzdCB0aGUgbmV4 dCBjb2x1bW4gb2YgYi1zcGxpbmUgdmFsdWVzIGlzIGdlbmVyYXRlZC4KLSAg ICAgICAgeCAgICAgIC0gdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBiLXNwbGlu ZXMgYXJlIHRvIGJlIGV2YWx1YXRlZC4KLSAgICAgICAgbGVmdCAgIC0gYW4g aW50ZWdlciBjaG9zZW4gKHVzdWFsbHkpIHNvIHRoYXQKLSAgICAgICAgICAg ICAgICAgdChsZWZ0KSAubGUuIHggLmxlLiB0KGxlZnQrMSkuCi0gICAgICAg IGogICAgICAtIChvdXRwdXQpIGEgd29ya2luZyBzY2FsYXIgZm9yIGluZGV4 aW5nCi0gICAgICAgIGRlbHRhbCAtIChvdXRwdXQpIGEgd29ya2luZyBhcmVh IHdoaWNoIG11c3QgYmUgb2YgbGVuZ3RoIGF0Ci0gICAgICAgICAgICAgICAg IGxlYXN0IGpvdXQKLSAgICAgICAgZGVsdGFyIC0gKG91dHB1dCkgYSB3b3Jr aW5nIGFyZWEgd2hpY2ggbXVzdCBiZSBvZiBsZW5ndGggYXQKLSAgICAgICAg ICAgICAgICAgbGVhc3Qgam91dAotICAgICAgICBiaWF0eCAgLSAob3V0cHV0 KSBhcnJheSBvZiBsZW5ndGggam91dCwgd2l0aCAgYmlhdHgoaSkKLSAgICAg ICAgICAgICAgICAgY29udGFpbmluZyB0aGUgdmFsdWUgYXQgIHggIG9mIHRo ZSBwb2x5bm9taWFsIG9mIG9yZGVyCi0gICAgICAgICAgICAgICAgIGpvdXQg d2hpY2ggYWdyZWVzIHdpdGggdGhlIGItc3BsaW5lIGIobGVmdC1qb3V0K2ks am91dCx0KQotICAgICAgICAgICAgICAgICBvbiB0aGUgaW50ZXJ2YWwgKHQo bGVmdCksIHQobGVmdCsxKSkgLgorICAgdCAgICAgIC0ga25vdCBzZXF1ZW5j ZSwgb2YgbGVuZ3RoIGxlZnQgKyBqb3V0ICwgYXNzdW1lZCB0byBiZQorICAg ICAgICAgICAgbm9uZGVjcmVhc2luZy4gIGFzc3VtcHRpb24gdChsZWZ0KS5s dC50KGxlZnQgKyAxKS4KKyAgICAgICAgICAgIGRpdmlzaW9uIGJ5IHplcm8g IHdpbGwgcmVzdWx0IGlmIHQobGVmdCkgPSB0KGxlZnQrMSkKKyAgIGpoaWdo ICAtCisgICBpbmRleCAgLSBpbnRlZ2VycyB3aGljaCBkZXRlcm1pbmUgdGhl IG9yZGVyIGpvdXQgPSBtYXgoamhpZ2gsCisgICAgICAgICAgICAoaisxKSoo aW5kZXgtMSkpICBvZiB0aGUgYi1zcGxpbmVzIHdob3NlIHZhbHVlcyBhdCB4 CisgICAgICAgICAgICBhcmUgdG8gYmUgcmV0dXJuZWQuICBpbmRleCAgaXMg dXNlZCB0byBhdm9pZAorICAgICAgICAgICAgcmVjYWxjdWxhdGlvbnMgd2hl biBzZXZlcmFsIGNvbHVtbnMgb2YgdGhlIHRyaWFuZ3VsYXIKKyAgICAgICAg ICAgIGFycmF5IG9mIGItc3BsaW5lIHZhbHVlcyBhcmUgbmVlZGVkIChlLmcu LCBpbiAgYnNwbHBwCisgICAgICAgICAgICBvciBpbiAgYnNwbHZkICkuICBw cmVjaXNlbHksCisKKyAgICAgICAgICAgIGlmICBpbmRleCA9IDEgLAorICAg ICAgICAgICAgICAgdGhlIGNhbGN1bGF0aW9uIHN0YXJ0cyBmcm9tIHNjcmF0 Y2ggYW5kIHRoZSBlbnRpcmUKKyAgICAgICAgICAgICAgIHRyaWFuZ3VsYXIg YXJyYXkgb2YgYi1zcGxpbmUgdmFsdWVzIG9mIG9yZGVycworICAgICAgICAg ICAgICAgMSwyLC4uLixqaGlnaCAgaXMgZ2VuZXJhdGVkIG9yZGVyIGJ5IG9y ZGVyICwgaS5lLiwKKyAgICAgICAgICAgICAgIGNvbHVtbiBieSBjb2x1bW4g LgorCisgICAgICAgICAgICBpZiAgaW5kZXggPSAyICwKKyAgICAgICAgICAg ICAgIG9ubHkgdGhlIGItc3BsaW5lIHZhbHVlcyBvZiBvcmRlciBqKzEsIGor MiwgLi4uLCBqb3V0CisgICAgICAgICAgICAgICBhcmUgZ2VuZXJhdGVkLCB0 aGUgYXNzdW1wdGlvbiBiZWluZyB0aGF0IGJpYXR4LCBqLAorICAgICAgICAg ICAgICAgZGVsdGFsLCBkZWx0YXIgYXJlLCBvbiBlbnRyeSwgYXMgdGhleSB3 ZXJlIG9uIGV4aXQKKyAgICAgICAgICAgICAgIGF0IHRoZSBwcmV2aW91cyBj YWxsLgorCisgICAgICAgICAgICBpbiBwYXJ0aWN1bGFyLCBpZiBqaGlnaCA9 IDAsIHRoZW4gam91dCA9IGorMSwgaS5lLiwKKyAgICAgICAgICAgIGp1c3Qg dGhlIG5leHQgY29sdW1uIG9mIGItc3BsaW5lIHZhbHVlcyBpcyBnZW5lcmF0 ZWQuCisgICB4ICAgICAgLSB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIGItc3Bs aW5lcyBhcmUgdG8gYmUgZXZhbHVhdGVkLgorICAgbGVmdCAgIC0gYW4gaW50 ZWdlciBjaG9zZW4gKHVzdWFsbHkpIHNvIHRoYXQKKyAgICAgICAgICAgIHQo bGVmdCkgLmxlLiB4IC5sZS4gdChsZWZ0KzEpLgorICAgaiAgICAgIC0gKG91 dHB1dCkgYSB3b3JraW5nIHNjYWxhciBmb3IgaW5kZXhpbmcKKyAgIGRlbHRh bCAtIChvdXRwdXQpIGEgd29ya2luZyBhcmVhIHdoaWNoIG11c3QgYmUgb2Yg bGVuZ3RoIGF0IGxlYXN0IGpvdXQKKyAgIGRlbHRhciAtIChvdXRwdXQpIGEg d29ya2luZyBhcmVhIHdoaWNoIG11c3QgYmUgb2YgbGVuZ3RoIGF0IGxlYXN0 IGpvdXQKKyAgIGJpYXR4ICAtIChvdXRwdXQpIGFycmF5IG9mIGxlbmd0aCBq b3V0LCB3aXRoICBiaWF0eChpKQorICAgICAgICAgICAgY29udGFpbmluZyB0 aGUgdmFsdWUgYXQgIHggIG9mIHRoZSBwb2x5bm9taWFsIG9mIG9yZGVyCisg ICAgICAgICAgICBqb3V0IHdoaWNoIGFncmVlcyB3aXRoIHRoZSBiLXNwbGlu ZSBiKGxlZnQtam91dCtpLGpvdXQsdCkKKyAgICAgICAgICAgIG9uIHRoZSBp bnRlcnZhbCAodChsZWZ0KSwgdChsZWZ0KzEpKSAuCiAKIE1ldGhvZDoKLSAg ICAgIHRoZSByZWN1cnJlbmNlIHJlbGF0aW9uCi0KLSAgICAgICAgICAgICAg ICAgICAgICAgIHggLSB0KGkpICAgICAgICAgICAgICB0KGkraisxKSAtIHgK LSAgICAgICAgYihpLGorMSkoeCkgPSAtLS0tLS0tLS0tLWIoaSxqKSh4KSAr IC0tLS0tLS0tLS0tLS0tLWIoaSsxLGopKHgpCi0gICAgICAgICAgICAgICAg ICAgICAgdChpK2opLXQoaSkgICAgICAgICAgICB0KGkraisxKS10KGkrMSkK LQotICAgICAgaXMgdXNlZCAocmVwZWF0ZWRseSkgdG8gZ2VuZXJhdGUgdGhl IChqKzEpLXZlY3RvciAgYihsZWZ0LWosaisxKSh4KSwKLSAgICAgIC4uLixi KGxlZnQsaisxKSh4KSAgZnJvbSB0aGUgai12ZWN0b3IgIGIobGVmdC1qKzEs aikoeCksLi4uLAotICAgICAgYihsZWZ0LGopKHgpLCBzdG9yaW5nIHRoZSBu ZXcgdmFsdWVzIGluICBiaWF0eCAgb3ZlciB0aGUgb2xkLiB0aGUKLSAgICAg IGZhY3RzIHRoYXQKLSAgICAgICAgICAgICAgICBiKGksMSkgPSAxICBpZiAg dChpKSAubGUuIHggLmx0LiB0KGkrMSkKLSAgICAgIGFuZCB0aGF0Ci0gICAg ICAgICAgICAgICAgYihpLGopKHgpID0gMCAgdW5sZXNzICB0KGkpIC5sZS4g eCAubHQuIHQoaStqKQotICAgICAgYXJlIHVzZWQuIHRoZSBwYXJ0aWN1bGFy IG9yZ2FuaXphdGlvbiBvZiB0aGUgY2FsY3VsYXRpb25zIGZvbGxvd3MKLSAg ICAgIGFsZ29yaXRobSAoOCkgaW4gY2hhcHRlciB4IG9mIFsxXS4KKyAgIHRo ZSByZWN1cnJlbmNlIHJlbGF0aW9uCisKKyAgICAgICAgICAgICAgICAgICAg ICB4IC0gdChpKSAgICAgICAgICAgICAgdChpK2orMSkgLSB4CisgICAgICBi KGksaisxKSh4KSA9IC0tLS0tLS0tLS0tYihpLGopKHgpICsgLS0tLS0tLS0t LS0tLS0tYihpKzEsaikoeCkKKyAgICAgICAgICAgICAgICAgICAgdChpK2op LXQoaSkgICAgICAgICAgICB0KGkraisxKS10KGkrMSkKKworICAgaXMgdXNl ZCAocmVwZWF0ZWRseSkgdG8gZ2VuZXJhdGUgdGhlIChqKzEpLXZlY3RvciAg YihsZWZ0LWosaisxKSh4KSwKKyAgIC4uLixiKGxlZnQsaisxKSh4KSAgZnJv bSB0aGUgai12ZWN0b3IgIGIobGVmdC1qKzEsaikoeCksLi4uLAorICAgYihs ZWZ0LGopKHgpLCBzdG9yaW5nIHRoZSBuZXcgdmFsdWVzIGluICBiaWF0eCAg b3ZlciB0aGUgb2xkLiB0aGUKKyAgIGZhY3RzIHRoYXQKKworICAgICAgYihp LDEpID0gMSAgaWYgIHQoaSkgLmxlLiB4IC5sdC4gdChpKzEpCisKKyAgIGFu ZCB0aGF0CisKKyAgICAgIGIoaSxqKSh4KSA9IDAgIHVubGVzcyAgdChpKSAu bGUuIHggLmx0LiB0KGkraikKKworICAgYXJlIHVzZWQuIHRoZSBwYXJ0aWN1 bGFyIG9yZ2FuaXphdGlvbiBvZiB0aGUgY2FsY3VsYXRpb25zIGZvbGxvd3MK KyAgIGFsZ29yaXRobSAoOCkgaW4gY2hhcHRlciB4IG9mIFsxXS4KIAogTm90 ZXM6CiAKLSAgICAoMSkgVGhpcyBpcyBhIGRpcmVjdCB0cmFuc2xhdGlvbiBv ZiBQUFBBQ0sncyBic3BsdmIgcm91dGluZSB3aXRoCi0gICAgICAgIGosIGRl bHRhbCwgZGVsdGFyIHJld3JpdHRlbiBhcyBpbnB1dCBwYXJhbWV0ZXJzIGFu ZAotICAgICAgICB1dGlsaXppbmcgemVyby1iYXNlZCBpbmRleGluZy4KKyAg ICgxKSBUaGlzIGlzIGEgZGlyZWN0IHRyYW5zbGF0aW9uIG9mIFBQUEFDSydz IGJzcGx2YiByb3V0aW5lIHdpdGgKKyAgICAgICBqLCBkZWx0YWwsIGRlbHRh ciByZXdyaXR0ZW4gYXMgaW5wdXQgcGFyYW1ldGVycyBhbmQKKyAgICAgICB1 dGlsaXppbmcgemVyby1iYXNlZCBpbmRleGluZy4KIAotICAgICgyKSBUaGlz IHJvdXRpbmUgY29udGFpbnMgbm8gZXJyb3IgY2hlY2tpbmcuICBQbGVhc2Ug dXNlIHJvdXRpbmVzCi0gICAgICAgIGxpa2UgZ3NsX2JzcGxpbmVfZXZhbCgp LgorICAgKDIpIFRoaXMgcm91dGluZSBjb250YWlucyBubyBlcnJvciBjaGVj a2luZy4gIFBsZWFzZSB1c2Ugcm91dGluZXMKKyAgICAgICBsaWtlIGdzbF9i c3BsaW5lX2V2YWwoKS4KICovCiAKIHN0YXRpYyB2b2lkCkBAIC03NzgsNyAr ODQ3LDcgQEAgYnNwbGluZV9wcHBhY2tfYnNwbHZiKGNvbnN0IGdzbF92ZWN0 b3IgKnQsCiAgICAgICAgICAgICAgICAgICAgICAgZ3NsX3ZlY3RvciAqZGVs dGFyLAogICAgICAgICAgICAgICAgICAgICAgIGdzbF92ZWN0b3IgKmJpYXR4 KQogewotICBzaXplX3QgaTsgICAvKiBsb29waW5nICovCisgIHNpemVfdCBp OyAvKiBsb29waW5nICovCiAgIGRvdWJsZSBzYXZlZDsKICAgZG91YmxlIHRl cm07CiAKQEAgLTc5NywxMiArODY2LDEwIEBAIGJzcGxpbmVfcHBwYWNrX2Jz cGx2Yihjb25zdCBnc2xfdmVjdG9yICp0LAogCiAgICAgICBmb3IgKGkgPSAw OyBpIDw9ICpqOyArK2kpCiAgICAgICAgIHsKLSAgICAgICAgICB0ZXJtID0g Z3NsX3ZlY3Rvcl9nZXQoYmlhdHgsIGkpIC8KLSAgICAgICAgICAgICAgICAg KGdzbF92ZWN0b3JfZ2V0KGRlbHRhciwgaSkgKwotICAgICAgICAgICAgICAg ICAgZ3NsX3ZlY3Rvcl9nZXQoZGVsdGFsLCAqaiAtIGkpKTsKKyAgICAgICAg ICB0ZXJtID0gZ3NsX3ZlY3Rvcl9nZXQoYmlhdHgsIGkpIC8gKGdzbF92ZWN0 b3JfZ2V0KGRlbHRhciwgaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsgZ3NsX3ZlY3Rvcl9nZXQoZGVsdGFsLCAq aiAtIGkpKTsKIAotICAgICAgICAgIGdzbF92ZWN0b3Jfc2V0KGJpYXR4LCBp LAotICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkICsgZ3NsX3ZlY3Rv cl9nZXQoZGVsdGFyLCBpKSAqIHRlcm0pOworICAgICAgICAgIGdzbF92ZWN0 b3Jfc2V0KGJpYXR4LCBpLCBzYXZlZCArIGdzbF92ZWN0b3JfZ2V0KGRlbHRh ciwgaSkgKiB0ZXJtKTsKIAogICAgICAgICAgIHNhdmVkID0gZ3NsX3ZlY3Rv cl9nZXQoZGVsdGFsLCAqaiAtIGkpICogdGVybTsKICAgICAgICAgfQpAQCAt ODE1LDQ4ICs4ODIsNDcgQEAgYnNwbGluZV9wcHBhY2tfYnNwbHZiKGNvbnN0 IGdzbF92ZWN0b3IgKnQsCiAKIC8qCiBic3BsaW5lX3BwcGFja19ic3BsdmQo KQotY2FsY3VsYXRlcyB2YWx1ZSBhbmQgZGVyaXZzIG9mIGFsbCBiLXNwbGlu ZXMgd2hpY2ggZG8gbm90IHZhbmlzaCBhdCB4CisgIGNhbGN1bGF0ZXMgdmFs dWUgYW5kIGRlcml2cyBvZiBhbGwgYi1zcGxpbmVzIHdoaWNoIGRvIG5vdCB2 YW5pc2ggYXQgeAogCiBQYXJhbWV0ZXJzOgotICAgICAgICB0ICAgICAgLSB0 aGUga25vdCBhcnJheSwgb2YgbGVuZ3RoIGxlZnQrayAoYXQgbGVhc3QpCi0g ICAgICAgIGsgICAgICAtIHRoZSBvcmRlciBvZiB0aGUgYi1zcGxpbmVzIHRv IGJlIGV2YWx1YXRlZAotICAgICAgICB4ICAgICAgLSB0aGUgcG9pbnQgYXQg d2hpY2ggdGhlc2UgdmFsdWVzIGFyZSBzb3VnaHQKLSAgICAgICAgbGVmdCAg IC0gYW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBsZWZ0IGVuZHBvaW50IG9m IHRoZSBpbnRlcnZhbAotICAgICAgICAgICAgICAgICBvZiBpbnRlcmVzdC4g dGhlIGsgYi1zcGxpbmVzIHdob3NlIHN1cHBvcnQgY29udGFpbnMgdGhlCi0g ICAgICAgICAgICAgICAgIGludGVydmFsICh0KGxlZnQpLCB0KGxlZnQrMSkp IGFyZSB0byBiZSBjb25zaWRlcmVkLgotICAgICAgICAgICAgICAgICBpdCBp cyBhc3N1bWVkIHRoYXQgdChsZWZ0KSAubHQuIHQobGVmdCsxKQotICAgICAg ICAgICAgICAgICBkaXZpc2lvbiBieSB6ZXJvIHdpbGwgcmVzdWx0IG90aGVy d2lzZSAoaW4gIGJzcGx2YikuCi0gICAgICAgICAgICAgICAgIGFsc28sIHRo ZSBvdXRwdXQgaXMgYXMgYWR2ZXJ0aXNlZCBvbmx5IGlmCi0gICAgICAgICAg ICAgICAgIHQobGVmdCkgLmxlLiB4IC5sZS4gdChsZWZ0KzEpIC4KLSAgICAg ICAgZGVsdGFsIC0gYSB3b3JraW5nIGFyZWEgd2hpY2ggbXVzdCBiZSBvZiBs ZW5ndGggYXQgbGVhc3QgawotICAgICAgICBkZWx0YXIgLSBhIHdvcmtpbmcg YXJlYSB3aGljaCBtdXN0IGJlIG9mIGxlbmd0aCBhdCBsZWFzdCBrCi0gICAg ICAgIGEgICAgICAtIGFuIGFycmF5IG9mIG9yZGVyIChrLGspLCB0byBjb250 YWluIGItY29lZmZzIG9mIHRoZQotICAgICAgICAgICAgICAgICBkZXJpdmF0 aXZlcyBvZiBhIGNlcnRhaW4gb3JkZXIgb2YgdGhlIGsgYi1zcGxpbmVzCi0g ICAgICAgICAgICAgICAgIG9mIGludGVyZXN0LgotICAgICAgICBkYmlhdHgg LSBhbiBhcnJheSBvZiBvcmRlciAoayxuZGVyaXYpLiBpdHMgZW50cnkgKGks bSkgY29udGFpbnMKLSAgICAgICAgICAgICAgICAgdmFsdWUgb2YgKG0pdGgg ZGVyaXZhdGl2ZSBvZiAobGVmdC1rK2kpLXRoIGItc3BsaW5lCi0gICAgICAg ICAgICAgICAgIG9mIG9yZGVyIGsgZm9yIGtub3Qgc2VxdWVuY2UgIHQsIGk9 MSwuLi4saywKLSAgICAgICAgICAgICAgICAgbT0wLC4uLixuZGVyaXYuCi0g ICAgICAgIG5kZXJpdiAtIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGF0IHZh bHVlcyBvZiBiLXNwbGluZXMgYW5kCi0gICAgICAgICAgICAgICAgIHRoZWly IGRlcml2YXRpdmVzIHVwIHRvIEFORCBJTkNMVURJTkcgdGhlIG5kZXJpdi10 aAotICAgICAgICAgICAgICAgICBhcmUgYXNrZWQgZm9yLiAobmRlcml2IGlz IHJlcGxhY2VkIGludGVybmFsbHkgYnkgdGhlCi0gICAgICAgICAgICAgICAg IGludGVnZXIgbWhpZ2ggaW4gKDEsaykgY2xvc2VzdCB0byBpdC4pCisgICB0 ICAgICAgLSB0aGUga25vdCBhcnJheSwgb2YgbGVuZ3RoIGxlZnQrayAoYXQg bGVhc3QpCisgICBrICAgICAgLSB0aGUgb3JkZXIgb2YgdGhlIGItc3BsaW5l cyB0byBiZSBldmFsdWF0ZWQKKyAgIHggICAgICAtIHRoZSBwb2ludCBhdCB3 aGljaCB0aGVzZSB2YWx1ZXMgYXJlIHNvdWdodAorICAgbGVmdCAgIC0gYW4g aW50ZWdlciBpbmRpY2F0aW5nIHRoZSBsZWZ0IGVuZHBvaW50IG9mIHRoZSBp bnRlcnZhbAorICAgICAgICAgICAgb2YgaW50ZXJlc3QuIHRoZSBrIGItc3Bs aW5lcyB3aG9zZSBzdXBwb3J0IGNvbnRhaW5zIHRoZQorICAgICAgICAgICAg aW50ZXJ2YWwgKHQobGVmdCksIHQobGVmdCsxKSkgYXJlIHRvIGJlIGNvbnNp ZGVyZWQuCisgICAgICAgICAgICBpdCBpcyBhc3N1bWVkIHRoYXQgdChsZWZ0 KSAubHQuIHQobGVmdCsxKQorICAgICAgICAgICAgZGl2aXNpb24gYnkgemVy byB3aWxsIHJlc3VsdCBvdGhlcndpc2UgKGluICBic3BsdmIpLgorICAgICAg ICAgICAgYWxzbywgdGhlIG91dHB1dCBpcyBhcyBhZHZlcnRpc2VkIG9ubHkg aWYKKyAgICAgICAgICAgIHQobGVmdCkgLmxlLiB4IC5sZS4gdChsZWZ0KzEp IC4KKyAgIGRlbHRhbCAtIGEgd29ya2luZyBhcmVhIHdoaWNoIG11c3QgYmUg b2YgbGVuZ3RoIGF0IGxlYXN0IGsKKyAgIGRlbHRhciAtIGEgd29ya2luZyBh cmVhIHdoaWNoIG11c3QgYmUgb2YgbGVuZ3RoIGF0IGxlYXN0IGsKKyAgIGEg ICAgICAtIGFuIGFycmF5IG9mIG9yZGVyIChrLGspLCB0byBjb250YWluIGIt Y29lZmZzIG9mIHRoZQorICAgICAgICAgICAgZGVyaXZhdGl2ZXMgb2YgYSBj ZXJ0YWluIG9yZGVyIG9mIHRoZSBrIGItc3BsaW5lcworICAgICAgICAgICAg b2YgaW50ZXJlc3QuCisgICBkYmlhdHggLSBhbiBhcnJheSBvZiBvcmRlciAo ayxuZGVyaXYpLiBpdHMgZW50cnkgKGksbSkgY29udGFpbnMKKyAgICAgICAg ICAgIHZhbHVlIG9mIChtKXRoIGRlcml2YXRpdmUgb2YgKGxlZnQtaytpKS10 aCBiLXNwbGluZQorICAgICAgICAgICAgb2Ygb3JkZXIgayBmb3Iga25vdCBz ZXF1ZW5jZSAgdCwgaT0xLC4uLixrLCBtPTAsLi4uLG5kZXJpdi4KKyAgIG5k ZXJpdiAtIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGF0IHZhbHVlcyBvZiBi LXNwbGluZXMgYW5kCisgICAgICAgICAgICB0aGVpciBkZXJpdmF0aXZlcyB1 cCB0byBBTkQgSU5DTFVESU5HIHRoZSBuZGVyaXYtdGgKKyAgICAgICAgICAg IGFyZSBhc2tlZCBmb3IuIChuZGVyaXYgaXMgcmVwbGFjZWQgaW50ZXJuYWxs eSBieSB0aGUKKyAgICAgICAgICAgIGludGVnZXIgbWhpZ2ggaW4gKDEsaykg Y2xvc2VzdCB0byBpdC4pCiAKIE1ldGhvZDoKLSAgdmFsdWVzIGF0IHggb2Yg YWxsIHRoZSByZWxldmFudCBiLXNwbGluZXMgb2Ygb3JkZXIgayxrLTEsLi4u LCBrKzEtbmRlcml2Ci0gIGFyZSBnZW5lcmF0ZWQgdmlhIGJzcGx2YiBhbmQg c3RvcmVkIHRlbXBvcmFyaWx5IGluIGRiaWF0eC4gIHRoZW4sIHRoZQotICBi LWNvZWZmcyBvZiB0aGUgcmVxdWlyZWQgZGVyaXZhdGl2ZXMgb2YgdGhlIGIt c3BsaW5lcyBvZiBpbnRlcmVzdCBhcmUKLSAgZ2VuZXJhdGVkIGJ5IGRpZmZl cmVuY2luZywgZWFjaCBmcm9tIHRoZSBwcmVjZWVkaW5nIG9uZSBvZiBsb3dl ciBvcmRlciwKLSAgYW5kIGNvbWJpbmVkIHdpdGggdGhlIHZhbHVlcyBvZiBi LXNwbGluZXMgb2YgY29ycmVzcG9uZGluZyBvcmRlciBpbgotICBkYmlhdHgg IHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgdmFsdWVzIC4KKyAgIHZhbHVlcyBh dCB4IG9mIGFsbCB0aGUgcmVsZXZhbnQgYi1zcGxpbmVzIG9mIG9yZGVyIGss ay0xLC4uLiwgaysxLW5kZXJpdgorICAgYXJlIGdlbmVyYXRlZCB2aWEgYnNw bHZiIGFuZCBzdG9yZWQgdGVtcG9yYXJpbHkgaW4gZGJpYXR4LiAgdGhlbiwg dGhlCisgICBiLWNvZWZmcyBvZiB0aGUgcmVxdWlyZWQgZGVyaXZhdGl2ZXMg b2YgdGhlIGItc3BsaW5lcyBvZiBpbnRlcmVzdCBhcmUKKyAgIGdlbmVyYXRl ZCBieSBkaWZmZXJlbmNpbmcsIGVhY2ggZnJvbSB0aGUgcHJlY2VlZGluZyBv bmUgb2YgbG93ZXIgb3JkZXIsCisgICBhbmQgY29tYmluZWQgd2l0aCB0aGUg dmFsdWVzIG9mIGItc3BsaW5lcyBvZiBjb3JyZXNwb25kaW5nIG9yZGVyIGlu CisgICBkYmlhdHggIHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgdmFsdWVzIC4K IAogTm90ZXM6CiAKLSAgICAoMSkgVGhpcyBpcyBhIGRpcmVjdCB0cmFuc2xh dGlvbiBvZiBQUFBBQ0sncyBic3BsdmQgcm91dGluZSB3aXRoCi0gICAgICAg IGRlbHRhbCwgZGVsdGFyIHJld3JpdHRlbiBhcyBpbnB1dCBwYXJhbWV0ZXJz ICh0byBsYXRlciBmZWVkIHRoZW0KLSAgICAgICAgdG8gYnNwbGluZV9wcHBh Y2tfYnNwbHZiKSBhbmQgdXRpbGl6aW5nIHplcm8tYmFzZWQgaW5kZXhpbmcu CisgICAoMSkgVGhpcyBpcyBhIGRpcmVjdCB0cmFuc2xhdGlvbiBvZiBQUFBB Q0sncyBic3BsdmQgcm91dGluZSB3aXRoCisgICAgICAgZGVsdGFsLCBkZWx0 YXIgcmV3cml0dGVuIGFzIGlucHV0IHBhcmFtZXRlcnMgKHRvIGxhdGVyIGZl ZWQgdGhlbQorICAgICAgIHRvIGJzcGxpbmVfcHBwYWNrX2JzcGx2YikgYW5k IHV0aWxpemluZyB6ZXJvLWJhc2VkIGluZGV4aW5nLgogCi0gICAgKDIpIFRo aXMgcm91dGluZSBjb250YWlucyBubyBlcnJvciBjaGVja2luZy4KKyAgICgy KSBUaGlzIHJvdXRpbmUgY29udGFpbnMgbm8gZXJyb3IgY2hlY2tpbmcuCiAq LwogCiBzdGF0aWMgdm9pZApAQCAtODc3LDM2ICs5NDMsMzYgQEAgYnNwbGlu ZV9wcHBhY2tfYnNwbHZkKGNvbnN0IGdzbF92ZWN0b3IgKnQsCiAgIGdzbF92 ZWN0b3JfdmlldyBkYmNvbCA9IGdzbF9tYXRyaXhfY29sdW1uKGRiaWF0eCwg MCk7CiAKICAgbWhpZ2ggPSBHU0xfTUlOX0lOVChuZGVyaXYsIGsgLSAxKTsK LSAgYnNwbGluZV9wcHBhY2tfYnNwbHZiKHQsIGstbWhpZ2gsIDEsIHgsIGxl ZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAmYnNwbHZiX2osIGRlbHRh bCwgZGVsdGFyLCAmZGJjb2wudmVjdG9yKTsKKyAgYnNwbGluZV9wcHBhY2tf YnNwbHZiKHQsIGsgLSBtaGlnaCwgMSwgeCwgbGVmdCwgJmJzcGx2Yl9qLCBk ZWx0YWwsIGRlbHRhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkYmNv bC52ZWN0b3IpOwogICBpZiAobWhpZ2ggPiAwKQogICAgIHsKICAgICAgIC8q IHRoZSBmaXJzdCBjb2x1bW4gb2YgZGJpYXR4IGFsd2F5cyBjb250YWlucyB0 aGUgYi1zcGxpbmUKLSAgICAgICAgIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQg b3JkZXIuIHRoZXNlIGFyZSBzdG9yZWQgaW4gY29sdW1uCi0gICAgICAgICBr LWN1cnJlbnQgb3JkZXIgYmVmb3JlIGJzcGx2YiBpcyBjYWxsZWQgdG8gcHV0 IHZhbHVlcwotICAgICAgICAgZm9yIHRoZSBuZXh0IGhpZ2hlciBvcmRlciBv biB0b3Agb2YgaXQuICAqLworICAgICAgIHZhbHVlcyBmb3IgdGhlIGN1cnJl bnQgb3JkZXIuIHRoZXNlIGFyZSBzdG9yZWQgaW4gY29sdW1uCisgICAgICAg ay1jdXJyZW50IG9yZGVyIGJlZm9yZSBic3BsdmIgaXMgY2FsbGVkIHRvIHB1 dCB2YWx1ZXMKKyAgICAgICBmb3IgdGhlIG5leHQgaGlnaGVyIG9yZGVyIG9u IHRvcCBvZiBpdC4gICovCiAgICAgICBpZGVyaXYgPSBtaGlnaDsKICAgICAg IGZvciAobSA9IDE7IG0gPD0gbWhpZ2g7ICsrbSkKICAgICAgICAgewotICAg ICAgICAgIGZvciAoaiA9IGlkZXJpdiwganAxbWlkID0gMDsgaiA8IChpbnQp azsgKytqLCArK2pwMW1pZCkKKyAgICAgICAgICBmb3IgKGogPSBpZGVyaXYs IGpwMW1pZCA9IDA7IGogPCAoaW50KSBrOyArK2osICsranAxbWlkKQogICAg ICAgICAgICAgewotICAgICAgICAgICAgICBnc2xfbWF0cml4X3NldChkYmlh dHgsIGosIGlkZXJpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3NsX21hdHJpeF9nZXQoZGJpYXR4LCBqcDFtaWQsIDApKTsKKyAgICAgICAg ICAgICAgZ3NsX21hdHJpeF9zZXQoZGJpYXR4LCBqLCBpZGVyaXYsIGdzbF9t YXRyaXhfZ2V0KGRiaWF0eCwganAxbWlkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgLS1p ZGVyaXY7Ci0gICAgICAgICAgYnNwbGluZV9wcHBhY2tfYnNwbHZiKHQsIGst aWRlcml2LCAyLCB4LCBsZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmYnNwbHZiX2osIGRlbHRhbCwgZGVsdGFyLCAmZGJjb2wudmVj dG9yKTsKKyAgICAgICAgICBic3BsaW5lX3BwcGFja19ic3BsdmIodCwgayAt IGlkZXJpdiwgMiwgeCwgbGVmdCwgJmJzcGx2Yl9qLCBkZWx0YWwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhciwgJmRiY29sLnZl Y3Rvcik7CiAgICAgICAgIH0KIAogICAgICAgLyogYXQgdGhpcyBwb2ludCwg IGIobGVmdC1rK2ksIGsrMS1qKSh4KSBpcyBpbiAgZGJpYXR4KGksaikKLSAg ICAgICAgIGZvciBpPWosLi4uLGstMSBhbmQgaj0wLC4uLixtaGlnaC4gaW4g cGFydGljdWxhciwgdGhlCi0gICAgICAgICBmaXJzdCBjb2x1bW4gb2YgZGJp YXR4IGlzIGFscmVhZHkgaW4gZmluYWwgZm9ybS4gdG8gb2J0YWluCi0gICAg ICAgICBjb3JyZXNwb25kaW5nIGRlcml2YXRpdmVzIG9mIGItc3BsaW5lcyBp biBzdWJzZXF1ZW50IGNvbHVtbnMsCi0gICAgICAgICBnZW5lcmF0ZSB0aGVp ciBiLXJlcHIuIGJ5IGRpZmZlcmVuY2luZywgdGhlbiBldmFsdWF0ZSBhdCB4 LiAqLworICAgICAgIGZvciBpPWosLi4uLGstMSBhbmQgaj0wLC4uLixtaGln aC4gaW4gcGFydGljdWxhciwgdGhlCisgICAgICAgZmlyc3QgY29sdW1uIG9m IGRiaWF0eCBpcyBhbHJlYWR5IGluIGZpbmFsIGZvcm0uIHRvIG9idGFpbgor ICAgICAgIGNvcnJlc3BvbmRpbmcgZGVyaXZhdGl2ZXMgb2YgYi1zcGxpbmVz IGluIHN1YnNlcXVlbnQgY29sdW1ucywKKyAgICAgICBnZW5lcmF0ZSB0aGVp ciBiLXJlcHIuIGJ5IGRpZmZlcmVuY2luZywgdGhlbiBldmFsdWF0ZSBhdCB4 LiAqLwogICAgICAgamxvdyA9IDA7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwg KGludClrOyArK2kpCisgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgazsg KytpKQogICAgICAgICB7Ci0gICAgICAgICAgZm9yIChqID0gamxvdzsgaiA8 IChpbnQpazsgKytqKQorICAgICAgICAgIGZvciAoaiA9IGpsb3c7IGogPCAo aW50KSBrOyArK2opCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGdz bF9tYXRyaXhfc2V0KGEsIGosIGksIDAuMCk7CiAgICAgICAgICAgICB9CkBA IC05MTUsNyArOTgxLDcgQEAgYnNwbGluZV9wcHBhY2tfYnNwbHZkKGNvbnN0 IGdzbF92ZWN0b3IgKnQsCiAgICAgICAgIH0KIAogICAgICAgLyogYXQgdGhp cyBwb2ludCwgYSguLGopIGNvbnRhaW5zIHRoZSBiLWNvZWZmcyBmb3IgdGhl IGotdGggb2YgdGhlCi0gICAgICAgICBrIGItc3BsaW5lcyBvZiBpbnRlcmVz dCBoZXJlLiAqLworICAgICAgIGsgYi1zcGxpbmVzIG9mIGludGVyZXN0IGhl cmUuICovCiAgICAgICBmb3IgKG0gPSAxOyBtIDw9IG1oaWdoOyArK20pCiAg ICAgICAgIHsKICAgICAgICAgICBrbW0gPSBrIC0gbTsKQEAgLTkyNCw0MCAr OTkwLDM4IEBAIGJzcGxpbmVfcHBwYWNrX2JzcGx2ZChjb25zdCBnc2xfdmVj dG9yICp0LAogICAgICAgICAgIGkgPSBrIC0gMTsKIAogICAgICAgICAgIC8q IGZvciBqPTEsLi4uLGssIGNvbnN0cnVjdCBiLWNvZWZmcyBvZiAobSl0aCAg ZGVyaXZhdGl2ZQotICAgICAgICAgICAgIG9mIGItc3BsaW5lcyBmcm9tIHRo b3NlIGZvciBwcmVjZWRpbmcgZGVyaXZhdGl2ZSBieQotICAgICAgICAgICAg IGRpZmZlcmVuY2luZyBhbmQgc3RvcmUgYWdhaW4gaW4gIGEoLixqKSAuIHRo ZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICBhKGksaikgPSAwICBmb3IgaSAu bHQuIGogIGlzIHVzZWQuICovCisgICAgICAgICAgIG9mIGItc3BsaW5lcyBm cm9tIHRob3NlIGZvciBwcmVjZWRpbmcgZGVyaXZhdGl2ZSBieQorICAgICAg ICAgICBkaWZmZXJlbmNpbmcgYW5kIHN0b3JlIGFnYWluIGluICBhKC4saikg LiB0aGUgZmFjdCB0aGF0CisgICAgICAgICAgIGEoaSxqKSA9IDAgIGZvciBp IC5sdC4gaiAgaXMgdXNlZC4gKi8KICAgICAgICAgICBmb3IgKGxkdW1teSA9 IDA7IGxkdW1teSA8IGttbTsgKytsZHVtbXkpCiAgICAgICAgICAgICB7Ci0g ICAgICAgICAgICAgIGZhY3RvciA9IGZrbW0vKAotICAgICAgICAgICAgICAg ICAgICAgICAgIGdzbF92ZWN0b3JfZ2V0KHQsIGlsICsga21tKSAtIGdzbF92 ZWN0b3JfZ2V0KHQsIGlsKQotICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgICBmYWN0b3IgPSBma21tIC8gKGdzbF92ZWN0b3JfZ2V0 KHQsIGlsICsga21tKSAtIGdzbF92ZWN0b3JfZ2V0KHQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWwpKTsKICAgICAgICAgICAgICAgLyog dGhlIGFzc3VtcHRpb24gdGhhdCB0KGxlZnQpLmx0LnQobGVmdCsxKSBtYWtl cwotICAgICAgICAgICAgICAgICBkZW5vbWluYXRvciBpbiBmYWN0b3Igbm9u emVyby4gKi8KLSAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8PWk7ICsr aikKKyAgICAgICAgICAgICAgIGRlbm9taW5hdG9yIGluIGZhY3RvciBub256 ZXJvLiAqLworICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDw9IGk7ICsr aikKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBnc2xf bWF0cml4X3NldChhLCBpLCBqLCBmYWN0b3IqKAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnc2xfbWF0cml4X2dldChhLCBpLCBqKSAt IGdzbF9tYXRyaXhfZ2V0KGEsIGktMSwgaikpKTsKKyAgICAgICAgICAgICAg ICAgIGdzbF9tYXRyaXhfc2V0KGEsIGksIGosIGZhY3RvciAqIChnc2xfbWF0 cml4X2dldChhLCBpLCBqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0gZ3NsX21hdHJpeF9nZXQoYSwg aSAtIDEsIGopKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAtLWlsOwogICAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICB9CiAK ICAgICAgICAgICAvKiBmb3IgaT0xLC4uLixrLCBjb21iaW5lIGItY29lZmZz IGEoLixpKSB3aXRoIGItc3BsaW5lIHZhbHVlcwotICAgICAgICAgICAgIHN0 b3JlZCBpbiBkYmlhdHgoLixtKSB0byBnZXQgdmFsdWUgb2YgKG0pdGggIGRl cml2YXRpdmUKLSAgICAgICAgICAgICBvZiBpLXRoIGItc3BsaW5lIChvZiBp bnRlcmVzdCBoZXJlKSBhdCB4LCBhbmQgc3RvcmUgaW4KLSAgICAgICAgICAg ICBkYmlhdHgoaSxtKS4gc3RvcmFnZSBvZiB0aGlzIHZhbHVlIG92ZXIgdGhl IHZhbHVlIG9mIGEKLSAgICAgICAgICAgICBiLXNwbGluZSBvZiBvcmRlciBt IHRoZXJlIGlzIHNhZmUgc2luY2UgdGhlIHJlbWFpbmluZwotICAgICAgICAg ICAgIGItc3BsaW5lIGRlcml2YXRpdmVzIG9mIHRoZSBzYW1lIG9yZGVyIGRv IG5vdCB1c2UgdGhpcwotICAgICAgICAgICAgIHZhbHVlIGR1ZSB0byB0aGUg ZmFjdCB0aGF0IGEoaixpKSA9IDAgZm9yIGogLmx0LiBpIC4gKi8KLSAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgKGludClrOyArK2kpCisgICAgICAgICAg IHN0b3JlZCBpbiBkYmlhdHgoLixtKSB0byBnZXQgdmFsdWUgb2YgKG0pdGgg IGRlcml2YXRpdmUKKyAgICAgICAgICAgb2YgaS10aCBiLXNwbGluZSAob2Yg aW50ZXJlc3QgaGVyZSkgYXQgeCwgYW5kIHN0b3JlIGluCisgICAgICAgICAg IGRiaWF0eChpLG0pLiBzdG9yYWdlIG9mIHRoaXMgdmFsdWUgb3ZlciB0aGUg dmFsdWUgb2YgYQorICAgICAgICAgICBiLXNwbGluZSBvZiBvcmRlciBtIHRo ZXJlIGlzIHNhZmUgc2luY2UgdGhlIHJlbWFpbmluZworICAgICAgICAgICBi LXNwbGluZSBkZXJpdmF0aXZlcyBvZiB0aGUgc2FtZSBvcmRlciBkbyBub3Qg dXNlIHRoaXMKKyAgICAgICAgICAgdmFsdWUgZHVlIHRvIHRoZSBmYWN0IHRo YXQgYShqLGkpID0gMCBmb3IgaiAubHQuIGkgLiAqLworICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCAoaW50KSBrOyArK2kpCiAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgIHN1bSA9IDA7CiAgICAgICAgICAgICAgIGpsb3cgPSBH U0xfTUFYX0lOVChpLCBtKTsKLSAgICAgICAgICAgICAgZm9yIChqID0gamxv dzsgaiA8IChpbnQpazsgKytqKQorICAgICAgICAgICAgICBmb3IgKGogPSBq bG93OyBqIDwgKGludCkgazsgKytqKQogICAgICAgICAgICAgICAgIHsKLSAg ICAgICAgICAgICAgICAgIHN1bSArPSBnc2xfbWF0cml4X2dldChhLCBqLCBp KQotICAgICAgICAgICAgICAgICAgICAgICAgICogZ3NsX21hdHJpeF9nZXQo ZGJpYXR4LCBqLCBtKTsKKyAgICAgICAgICAgICAgICAgIHN1bSArPSBnc2xf bWF0cml4X2dldChhLCBqLCBpKSAqIGdzbF9tYXRyaXhfZ2V0KGRiaWF0eCwg aiwgbSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBnc2xf bWF0cml4X3NldChkYmlhdHgsIGksIG0sIHN1bSk7CiAgICAgICAgICAgICB9 CmRpZmYgLS1naXQgYS9ic3BsaW5lL2dzbF9ic3BsaW5lLmggYi9ic3BsaW5l L2dzbF9ic3BsaW5lLmgKaW5kZXggOGEyZmZjNS4uZjdmODE3NSAxMDA2NDQK LS0tIGEvYnNwbGluZS9nc2xfYnNwbGluZS5oCisrKyBiL2JzcGxpbmUvZ3Ns X2JzcGxpbmUuaApAQCAtMzksNDEgKzM5LDUzIEBACiBfX0JFR0lOX0RFQ0xT CiAKIHR5cGVkZWYgc3RydWN0Ci0gIHsKLSAgICBzaXplX3QgazsgICAgICAv KiBzcGxpbmUgb3JkZXIgKi8KLSAgICBzaXplX3Qga20xOyAgICAvKiBrIC0g MSAocG9seW5vbWlhbCBvcmRlcikgKi8KLSAgICBzaXplX3QgbDsgICAgICAv KiBudW1iZXIgb2YgcG9seW5vbWlhbCBwaWVjZXMgb24gaW50ZXJ2YWwgKi8K K3sKKyAgICBzaXplX3QgazsgLyogc3BsaW5lIG9yZGVyICovCisgICAgc2l6 ZV90IGttMTsgLyogayAtIDEgKHBvbHlub21pYWwgb3JkZXIpICovCisgICAg c2l6ZV90IGw7IC8qIG51bWJlciBvZiBwb2x5bm9taWFsIHBpZWNlcyBvbiBp bnRlcnZhbCAqLwogICAgIHNpemVfdCBuYnJlYWs7IC8qIG51bWJlciBvZiBi cmVha3BvaW50cyAobCArIDEpICovCi0gICAgc2l6ZV90IG47ICAgICAgLyog bnVtYmVyIG9mIGJzcGxpbmUgYmFzaXMgZnVuY3Rpb25zIChsICsgayAtIDEp ICovCisgICAgc2l6ZV90IG47IC8qIG51bWJlciBvZiBic3BsaW5lIGJhc2lz IGZ1bmN0aW9ucyAobCArIGsgLSAxKSAqLwogCi0gICAgZ3NsX3ZlY3RvciAq a25vdHM7ICAvKiBrbm90cyB2ZWN0b3IgKi8KKyAgICBnc2xfdmVjdG9yICpr bm90czsgLyoga25vdHMgdmVjdG9yICovCiAgICAgZ3NsX3ZlY3RvciAqZGVs dGFsOyAvKiBsZWZ0IGRlbHRhICovCiAgICAgZ3NsX3ZlY3RvciAqZGVsdGFy OyAvKiByaWdodCBkZWx0YSAqLwotICAgIGdzbF9tYXRyaXggKkE7ICAgICAg Lyogd29yayBtYXRyaXggKi8KLSAgICBnc2xfdmVjdG9yICpCOyAgICAgIC8q IHRlbXBvcmFyeSBzcGxpbmUgcmVzdWx0cyAqLwotICAgIGdzbF9tYXRyaXgg KmRCOyAgICAgLyogdGVtcG9yYXJ5IGRlcml2YXRpdmUgcmVzdWx0cyAqLwot ICB9IGdzbF9ic3BsaW5lX3dvcmtzcGFjZTsKKyAgICBnc2xfbWF0cml4ICpB OyAvKiB3b3JrIG1hdHJpeCAqLworICAgIGdzbF92ZWN0b3IgKkI7IC8qIHRl bXBvcmFyeSBzcGxpbmUgcmVzdWx0cyAqLworICAgIGdzbF9tYXRyaXggKmRC OyAvKiB0ZW1wb3JhcnkgZGVyaXZhdGl2ZSByZXN1bHRzICovCit9IGdzbF9i c3BsaW5lX3dvcmtzcGFjZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBn c2xfYnNwbGluZV93b3Jrc3BhY2UgKmJzcGxpbmU7IC8qIGFzc29jaWF0ZWQg YnNwbGluZSAqLworICAgIGdzbF9tYXRyaXggKkE7IC8qIHdvcmsgbWF0cml4 ICovCisgICAgZ3NsX21hdHJpeCAqZEI7IC8qIHRlbXBvcmFyeSBkZXJpdmF0 aXZlIHJlc3VsdHMgKi8KK30gZ3NsX2JzcGxpbmVfZGVyaXZfd29ya3NwYWNl OwogCiBnc2xfYnNwbGluZV93b3Jrc3BhY2UgKgogZ3NsX2JzcGxpbmVfYWxs b2MoY29uc3Qgc2l6ZV90IGssIGNvbnN0IHNpemVfdCBuYnJlYWspOwogCi12 b2lkIGdzbF9ic3BsaW5lX2ZyZWUoZ3NsX2JzcGxpbmVfd29ya3NwYWNlICp3 KTsKK3ZvaWQKK2dzbF9ic3BsaW5lX2ZyZWUoZ3NsX2JzcGxpbmVfd29ya3Nw YWNlICp3KTsKIAotc2l6ZV90IGdzbF9ic3BsaW5lX25jb2VmZnMgKGdzbF9i c3BsaW5lX3dvcmtzcGFjZSAqIHcpOwotc2l6ZV90IGdzbF9ic3BsaW5lX29y ZGVyIChnc2xfYnNwbGluZV93b3Jrc3BhY2UgKiB3KTsKLXNpemVfdCBnc2xf YnNwbGluZV9uYnJlYWsgKGdzbF9ic3BsaW5lX3dvcmtzcGFjZSAqIHcpOwot ZG91YmxlIGdzbF9ic3BsaW5lX2JyZWFrcG9pbnQgKHNpemVfdCBpLCBnc2xf YnNwbGluZV93b3Jrc3BhY2UgKiB3KTsKK3NpemVfdAorZ3NsX2JzcGxpbmVf bmNvZWZmcyhnc2xfYnNwbGluZV93b3Jrc3BhY2UgKiB3KTsKK3NpemVfdAor Z3NsX2JzcGxpbmVfb3JkZXIoZ3NsX2JzcGxpbmVfd29ya3NwYWNlICogdyk7 CitzaXplX3QKK2dzbF9ic3BsaW5lX25icmVhayhnc2xfYnNwbGluZV93b3Jr c3BhY2UgKiB3KTsKK2RvdWJsZQorZ3NsX2JzcGxpbmVfYnJlYWtwb2ludChz aXplX3QgaSwgZ3NsX2JzcGxpbmVfd29ya3NwYWNlICogdyk7CiAKIGludAog Z3NsX2JzcGxpbmVfa25vdHMoY29uc3QgZ3NsX3ZlY3RvciAqYnJlYWtwdHMs IGdzbF9ic3BsaW5lX3dvcmtzcGFjZSAqdyk7CiAKLWludCBnc2xfYnNwbGlu ZV9rbm90c191bmlmb3JtKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBkb3VibGUg YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzbF9ic3BsaW5l X3dvcmtzcGFjZSAqdyk7CitpbnQKK2dzbF9ic3BsaW5lX2tub3RzX3VuaWZv cm0oY29uc3QgZG91YmxlIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGRvdWJsZSBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBn c2xfYnNwbGluZV93b3Jrc3BhY2UgKncpOwogCiBpbnQKLWdzbF9ic3BsaW5l X2V2YWwoY29uc3QgZG91YmxlIHgsCi0gICAgICAgICAgICAgICAgIGdzbF92 ZWN0b3IgKkIsCi0gICAgICAgICAgICAgICAgIGdzbF9ic3BsaW5lX3dvcmtz cGFjZSAqdyk7Citnc2xfYnNwbGluZV9ldmFsKGNvbnN0IGRvdWJsZSB4LCBn c2xfdmVjdG9yICpCLCBnc2xfYnNwbGluZV93b3Jrc3BhY2UgKncpOwogCiBp bnQKIGdzbF9ic3BsaW5lX2V2YWxfbm9uemVybyhjb25zdCBkb3VibGUgeCwK QEAgLTgyLDE5ICs5NCwyNSBAQCBnc2xfYnNwbGluZV9ldmFsX25vbnplcm8o Y29uc3QgZG91YmxlIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICppZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdzbF9ic3Bs aW5lX3dvcmtzcGFjZSAqdyk7CiAKK2dzbF9ic3BsaW5lX2Rlcml2X3dvcmtz cGFjZSAqCitnc2xfYnNwbGluZV9kZXJpdl9hbGxvYyhnc2xfYnNwbGluZV93 b3Jrc3BhY2UgKiBic3BsaW5lKTsKKwordm9pZAorZ3NsX2JzcGxpbmVfZGVy aXZfZnJlZShnc2xfYnNwbGluZV9kZXJpdl93b3Jrc3BhY2UgKncpOworCiBp bnQKLWdzbF9ic3BsaW5lX2V2YWxfZGVyaXYoY29uc3QgZG91YmxlIHgsCitn c2xfYnNwbGluZV9kZXJpdl9ldmFsKGNvbnN0IGRvdWJsZSB4LAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbmRlcml2LAogICAgICAg ICAgICAgICAgICAgICAgICBnc2xfbWF0cml4ICpkQiwKLSAgICAgICAgICAg ICAgICAgICAgICAgZ3NsX2JzcGxpbmVfd29ya3NwYWNlICp3KTsKKyAgICAg ICAgICAgICAgICAgICAgICAgZ3NsX2JzcGxpbmVfZGVyaXZfd29ya3NwYWNl ICp3KTsKIAogaW50Ci1nc2xfYnNwbGluZV9ldmFsX2Rlcml2X25vbnplcm8o Y29uc3QgZG91YmxlIHgsCitnc2xfYnNwbGluZV9kZXJpdl9ldmFsX25vbnpl cm8oY29uc3QgZG91YmxlIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc2l6ZV90IG5kZXJpdiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnc2xfbWF0cml4ICpkQiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgKmlzdGFydCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmllbmQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ3NsX2JzcGxpbmVfd29ya3NwYWNlICp3 KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2xfYnNwbGlu ZV9kZXJpdl93b3Jrc3BhY2UgKncpOwogCiBfX0VORF9ERUNMUwogCmRpZmYg LS1naXQgYS9ic3BsaW5lL3Rlc3QuYyBiL2JzcGxpbmUvdGVzdC5jCmluZGV4 IDM5M2ZiZjMuLjViNTExZDMgMTAwNjQ0Ci0tLSBhL2JzcGxpbmUvdGVzdC5j CisrKyBiL2JzcGxpbmUvdGVzdC5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5j bHVkZSA8Z3NsL2dzbF9uYW4uaD4KIAogdm9pZAotdGVzdF9ic3BsaW5lKGdz bF9ic3BsaW5lX3dvcmtzcGFjZSAqIGJ3KQordGVzdF9ic3BsaW5lKGdzbF9i c3BsaW5lX3dvcmtzcGFjZSAqIGJ3LCBnc2xfYnNwbGluZV9kZXJpdl93b3Jr c3BhY2UgKiBkYncpCiB7CiAgIGdzbF92ZWN0b3IgKkI7CiAgIGdzbF9tYXRy aXggKmRCOwpAQCAtNjgsNyArNjgsNyBAQCB0ZXN0X2JzcGxpbmUoZ3NsX2Jz cGxpbmVfd29ya3NwYWNlICogYncpCiAgICAgewogICAgICAgZG91YmxlIHhp ID0gYSArIChiIC0gYSkgKiAoaSAvIChuIC0gMS4wKSk7CiAgICAgICBnc2xf YnNwbGluZV9ldmFsKHhpLCBCLCBidyk7Ci0gICAgICBnc2xfYnNwbGluZV9l dmFsX2Rlcml2KHhpLCAwLCBkQiwgYncpOworICAgICAgZ3NsX2JzcGxpbmVf ZGVyaXZfZXZhbCh4aSwgMCwgZEIsIGRidyk7CiAKICAgICAgIGZvciAoaiA9 IDA7IGogPCBuY29lZmZzOyBqKyspCiAgICAgICAgIHsKQEAgLTEwMCw4ICsx MDAsMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAg IHsKICAgICAgICAgICBkb3VibGUgYSA9IC0xLjIzICogb3JkZXIsIGIgPSA0 NS42ICogb3JkZXI7CiAgICAgICAgICAgZ3NsX2JzcGxpbmVfd29ya3NwYWNl ICpidyA9IGdzbF9ic3BsaW5lX2FsbG9jKG9yZGVyLCBicmVha3BvaW50cyk7 CisgICAgICAgICAgZ3NsX2JzcGxpbmVfZGVyaXZfd29ya3NwYWNlICpkYncg PSBnc2xfYnNwbGluZV9kZXJpdl9hbGxvYyhidyk7CiAgICAgICAgICAgZ3Ns X2JzcGxpbmVfa25vdHNfdW5pZm9ybShhLCBiLCBidyk7Ci0gICAgICAgICAg dGVzdF9ic3BsaW5lKGJ3KTsKKyAgICAgICAgICB0ZXN0X2JzcGxpbmUoYncs IGRidyk7CisgICAgICAgICAgZ3NsX2JzcGxpbmVfZGVyaXZfZnJlZShkYncp OwogICAgICAgICAgIGdzbF9ic3BsaW5lX2ZyZWUoYncpOwogICAgICAgICB9 CiAgICAgfQpAQCAtMTEzLDYgKzExNSw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogICAgICAgICB7CiAgICAgICAgICAgZG91YmxlIGEgPSAt MS4yMyAqIG9yZGVyLCBiID0gNDUuNiAqIG9yZGVyOwogICAgICAgICAgIGdz bF9ic3BsaW5lX3dvcmtzcGFjZSAqYncgPSBnc2xfYnNwbGluZV9hbGxvYyhv cmRlciwgYnJlYWtwb2ludHMpOworICAgICAgICAgIGdzbF9ic3BsaW5lX2Rl cml2X3dvcmtzcGFjZSAqZGJ3ID0gZ3NsX2JzcGxpbmVfZGVyaXZfYWxsb2Mo YncpOwogICAgICAgICAgIGdzbF92ZWN0b3IgKmsgPSBnc2xfdmVjdG9yX2Fs bG9jKGJyZWFrcG9pbnRzKTsKICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg YnJlYWtwb2ludHM7IGkrKykKICAgICAgICAgICAgIHsKQEAgLTEyMiw4ICsx MjUsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAg ICAgICAgZ3NsX3ZlY3Rvcl9zZXQoaywgaSwgeCk7CiAgICAgICAgICAgICB9 OwogICAgICAgICAgIGdzbF9ic3BsaW5lX2tub3RzKGssIGJ3KTsKLSAgICAg ICAgICB0ZXN0X2JzcGxpbmUoYncpOworICAgICAgICAgIHRlc3RfYnNwbGlu ZShidywgZGJ3KTsKICAgICAgICAgICBnc2xfdmVjdG9yX2ZyZWUoayk7Cisg ICAgICAgICAgZ3NsX2JzcGxpbmVfZGVyaXZfZnJlZShkYncpOwogICAgICAg ICAgIGdzbF9ic3BsaW5lX2ZyZWUoYncpOwogICAgICAgICB9CiAgICAgfQpA QCAtMTQzLDYgKzE0Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogICAgIH07CiAKICAgICBnc2xfYnNwbGluZV93b3Jrc3BhY2UgKmJ3ID0g Z3NsX2JzcGxpbmVfYWxsb2MoMiwgMyk7CisgICAgZ3NsX2JzcGxpbmVfZGVy aXZfd29ya3NwYWNlICpkYncgPSBnc2xfYnNwbGluZV9kZXJpdl9hbGxvYyhi dyk7CiAgICAgZ3NsX21hdHJpeCAqZEIgPSBnc2xfbWF0cml4X2FsbG9jKGdz bF9ic3BsaW5lX25jb2VmZnMoYncpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnc2xfYnNwbGluZV9vcmRlcihidykgKyAxKTsK IApAQCAtMTU4LDcgKzE2Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogICAgICAgICAvKiBJbml0aWFsaXplIGRCIHdpdGggcG9pc29uIHRv IGVuc3VyZSB3ZSBvdmVyd3JpdGUgaXQgKi8KICAgICAgICAgZ3NsX21hdHJp eF9zZXRfYWxsKGRCLCBHU0xfTkFOKTsKIAotICAgICAgICBnc2xfYnNwbGlu ZV9ldmFsX2Rlcml2KHhsb2NbaV0sIGdzbF9ic3BsaW5lX29yZGVyKGJ3KSwg ZEIsIGJ3KTsKKyAgICAgICAgZ3NsX2JzcGxpbmVfZGVyaXZfZXZhbCh4bG9j W2ldLCBnc2xfYnNwbGluZV9vcmRlcihidyksIGRCLCBkYncpOwogICAgICAg ICBmb3IgKGogPSAwOyBqIDwgZ3NsX2JzcGxpbmVfbmNvZWZmcyhidykgOyAr K2opCiAgICAgICAgICAgewogICAgICAgICAgICAgLyogY2hlY2sgYmFzaXMg ZnVuY3Rpb24gMXN0IGRlcml2ICovCkBAIC0xNzgsNiArMTgzLDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICB9CiAKICAgICBnc2xf bWF0cml4X2ZyZWUoZEIpOworICAgIGdzbF9ic3BsaW5lX2Rlcml2X2ZyZWUo ZGJ3KTsKICAgICBnc2xfYnNwbGluZV9mcmVlKGJ3KTsKICAgICBnc2xfdmVj dG9yX2ZyZWUoYnJlYWtwdHMpOwogICB9CkBAIC0yMTMsNiArMjE5LDcgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgfTsKIAogICAgIGdz bF9ic3BsaW5lX3dvcmtzcGFjZSAqYncgPSBnc2xfYnNwbGluZV9hbGxvYygz LCA1KTsKKyAgICBnc2xfYnNwbGluZV9kZXJpdl93b3Jrc3BhY2UgKmRidyA9 IGdzbF9ic3BsaW5lX2Rlcml2X2FsbG9jKGJ3KTsKIAogICAgIGdzbF9tYXRy aXggKmRCID0gZ3NsX21hdHJpeF9hbGxvYyhnc2xfYnNwbGluZV9uY29lZmZz KGJ3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3NsX2JzcGxpbmVfb3JkZXIoYncpICsgMSk7CkBAIC0yMjksNyArMjM2LDcg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICB7CiAgICAg ICAgIC8qIEluaXRpYWxpemUgZEIgd2l0aCBwb2lzb24gdG8gZW5zdXJlIHdl IG92ZXJ3cml0ZSBpdCAqLwogICAgICAgICBnc2xfbWF0cml4X3NldF9hbGwo ZEIsIEdTTF9OQU4pOwotICAgICAgICBnc2xfYnNwbGluZV9ldmFsX2Rlcml2 KHhsb2NbaV0sIGdzbF9ic3BsaW5lX29yZGVyKGJ3KSwgZEIsIGJ3KTsKKyAg ICAgICAgZ3NsX2JzcGxpbmVfZGVyaXZfZXZhbCh4bG9jW2ldLCBnc2xfYnNw bGluZV9vcmRlcihidyksIGRCLCBkYncpOwogCiAgICAgICAgIC8qIGNoZWNr IGJhc2lzIGZ1bmN0aW9uIGV2YWx1YXRpb24gKi8KICAgICAgICAgZm9yIChq ID0gMDsgaiA8IGdzbF9ic3BsaW5lX25jb2VmZnMoYncpOyArK2opCkBAIC0y NTUsNiArMjYyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAg ICAgICB9CiAKICAgICBnc2xfbWF0cml4X2ZyZWUoZEIpOworICAgIGdzbF9i c3BsaW5lX2Rlcml2X2ZyZWUoZGJ3KTsKICAgICBnc2xfYnNwbGluZV9mcmVl KGJ3KTsKICAgICBnc2xfdmVjdG9yX2ZyZWUoYnJlYWtwdHMpOwogICB9CmRp ZmYgLS1naXQgYS9kb2MvYnNwbGluZS50ZXhpIGIvZG9jL2JzcGxpbmUudGV4 aQppbmRleCAzNmIzZGNlLi5iMmNkYjFiIDEwMDY0NAotLS0gYS9kb2MvYnNw bGluZS50ZXhpCisrKyBiL2RvYy9ic3BsaW5lLnRleGkKQEAgLTc4LDYgKzc4 LDggQEAgYmUgcmVhZGlseSBvYnRhaW5lZCBmcm9tIGEgbGVhc3Qtc3F1YXJl cyBmaXQuCiBAc2VjdGlvbiBJbml0aWFsaXppbmcgdGhlIEItc3BsaW5lcyBz b2x2ZXIKIEBjaW5kZXggYmFzaXMgc3BsaW5lcywgaW5pdGlhbGl6aW5nCiAK K1VzaW5nIEItc3BsaW5lcyByZXF1aXJlcyBhIGdzbF9ic3BsaW5lX3dvcmtz cGFjZToKKwogQGRlZnR5cGVmdW4ge2dzbF9ic3BsaW5lX3dvcmtzcGFjZSAq fSBnc2xfYnNwbGluZV9hbGxvYyAoY29uc3Qgc2l6ZV90IEB2YXJ7a30sIGNv bnN0IHNpemVfdCBAdmFye25icmVha30pCiBUaGlzIGZ1bmN0aW9uIGFsbG9j YXRlcyBhIHdvcmtzcGFjZSBmb3IgY29tcHV0aW5nIEItc3BsaW5lcyBvZiBv cmRlcgogQHZhcntrfS4gVGhlIG51bWJlciBvZiBicmVha3BvaW50cyBpcyBn aXZlbiBieSBAdmFye25icmVha30uIFRoaXMKQEAgLTg4LDYgKzkwLDIxIEBA IGFyZSBzcGVjaWZpZWQgYnkgQG1hdGh7ayA9IDR9LiBUaGUgc2l6ZSBvZiB0 aGUgd29ya3NwYWNlIGlzCiAKIEBkZWZ0eXBlZnVuIHZvaWQgZ3NsX2JzcGxp bmVfZnJlZSAoZ3NsX2JzcGxpbmVfd29ya3NwYWNlICogQHZhcnt3fSkKIFRo aXMgZnVuY3Rpb24gZnJlZXMgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGgg dGhlIHdvcmtzcGFjZSBAdmFye3d9LgorQW55IGFzc29jaWF0ZWQgZ3NsX2Jz cGxpbmVfZGVyaXZfd29ya3NwYWNlIHNob3VsZCBiZSBmcmVlZCBiZWZvcmVo YW5kLgorQGVuZCBkZWZ0eXBlZnVuCisKK0V2YWx1YXRpb24gb2YgQi1zcGxp bmUgYmFzaXMgZnVuY3Rpb24gZGVyaXZhdGl2ZXMgYWRkaXRpb25hbGx5IHJl cXVpcmVzCithIGdzbF9ic3BsaW5lX2Rlcml2X3dvcmtzcGFjZToKKworQGRl ZnR5cGVmdW4ge2dzbF9ic3BsaW5lX2Rlcml2X3dvcmtzcGFjZSAqfSBnc2xf YnNwbGluZV9kZXJpdl9hbGxvYyAoZ3NsX2JzcGxpbmVfd29ya3NwYWNlICog YnNwbGluZSkKK1RoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEgd29ya3NwYWNl IGZvciBjb21wdXRpbmcgdGhlIEItc3BsaW5lIGJhc2lzCitmdW5jdGlvbiBk ZXJpdmF0aXZlcyBmb3IgQHZhcntic3BsaW5lfS4gIFRoZSBzaXplIG9mIHRo ZSB3b3Jrc3BhY2UgaXMKK0BtYXRoe08oMmteMil9LgorQGVuZCBkZWZ0eXBl ZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ3NsX2JzcGxpbmVfZGVyaXZfZnJl ZSAoZ3NsX2JzcGxpbmVfZGVyaXZfd29ya3NwYWNlICogQHZhcnt3fSkKK1Ro aXMgZnVuY3Rpb24gZnJlZXMgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGgg dGhlIHdvcmtzcGFjZSBAdmFye3d9LgorVGhlIGFzc29jaWF0ZWQgZ3NsX2Jz cGxpbmVfd29ya3NwYWNlIHNob3VsZCBiZSBmcmVlZCBhZnRlcndhcmRzLgog QGVuZCBkZWZ0eXBlZnVuCiAKIEBub2RlIENvbnN0cnVjdGluZyB0aGUga25v dHMgdmVjdG9yCkBAIC0xNDAsNyArMTU3LDcgQEAgVGhpcyBmdW5jdGlvbiBy ZXR1cm5zIHRoZSBudW1iZXIgb2YgQi1zcGxpbmUgY29lZmZpY2llbnRzIGdp dmVuIGJ5CiBAc2VjdGlvbiBFdmFsdWF0aW9uIG9mIEItc3BsaW5lIGRlcml2 YXRpdmVzCiBAY2luZGV4IGJhc2lzIHNwbGluZXMsIGRlcml2YXRpdmVzCiAK LUBkZWZ0eXBlZnVuIGludCBnc2xfYnNwbGluZV9ldmFsX2Rlcml2IChjb25z dCBkb3VibGUgQHZhcnt4fSwgY29uc3Qgc2l6ZV90IEB2YXJ7bmRlcml2fSwg Z3NsX21hdHJpeCAqIEB2YXJ7ZEJ9LCBnc2xfYnNwbGluZV93b3Jrc3BhY2Ug KiBAdmFye3d9KQorQGRlZnR5cGVmdW4gaW50IGdzbF9ic3BsaW5lX2Rlcml2 X2V2YWwgKGNvbnN0IGRvdWJsZSBAdmFye3h9LCBjb25zdCBzaXplX3QgQHZh cntuZGVyaXZ9LCBnc2xfbWF0cml4ICogQHZhcntkQn0sIGdzbF9ic3BsaW5l X3dvcmtzcGFjZSAqIEB2YXJ7d30pCiBUaGlzIGZ1bmN0aW9uIGV2YWx1YXRl cyBhbGwgQi1zcGxpbmUgYmFzaXMgZnVuY3Rpb24gZGVyaXZhdGl2ZXMgb2Yg b3JkZXJzCiBAbWF0aHswfSB0aHJvdWdoIEBtYXRoe25kZXJpdn0gKGluY2x1 c2l2ZSkgYXQgdGhlIHBvc2l0aW9uIEB2YXJ7eH0KIGFuZCBzdG9yZXMgdGhl bSBpbiBAdmFye2RCfS4gIFRoZSBAbWF0aHsoaSxqKX10aCBlbGVtZW50IG9m IEB2YXJ7ZEJ9CkBAIC0xNTMsNyArMTcwLDcgQEAgYXQgb25jZSB0aGFuIHRv IGNvbXB1dGUgdGhlbSBpbmRpdmlkdWFsbHksIGR1ZSB0byB0aGUgbmF0dXJl IG9mIHRoZQogZGVmaW5pbmcgcmVjdXJyZW5jZSByZWxhdGlvbi4KIEBlbmQg ZGVmdHlwZWZ1bgogCi1AZGVmdHlwZWZ1biBpbnQgZ3NsX2JzcGxpbmVfZXZh bF9kZXJpdl9ub256ZXJvIChjb25zdCBkb3VibGUgQHZhcnt4fSwgY29uc3Qg c2l6ZV90IEB2YXJ7bmRlcml2fSwgZ3NsX21hdHJpeCAqIEB2YXJ7ZEJ9LCBz aXplX3QgKiBAdmFye2lzdGFydH0sIHNpemVfdCAqIEB2YXJ7aWVuZH0sIGdz bF9ic3BsaW5lX3dvcmtzcGFjZSAqIEB2YXJ7d30pCitAZGVmdHlwZWZ1biBp bnQgZ3NsX2JzcGxpbmVfZGVyaXZfZXZhbF9ub256ZXJvIChjb25zdCBkb3Vi bGUgQHZhcnt4fSwgY29uc3Qgc2l6ZV90IEB2YXJ7bmRlcml2fSwgZ3NsX21h dHJpeCAqIEB2YXJ7ZEJ9LCBzaXplX3QgKiBAdmFye2lzdGFydH0sIHNpemVf dCAqIEB2YXJ7aWVuZH0sIGdzbF9ic3BsaW5lX3dvcmtzcGFjZSAqIEB2YXJ7 d30pCiBUaGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyBhbGwgcG90ZW50aWFsbHkg bm9uemVybyBCLXNwbGluZSBiYXNpcyBmdW5jdGlvbgogZGVyaXZhdGl2ZXMg b2Ygb3JkZXJzIEBtYXRoezB9IHRocm91Z2ggQG1hdGh7bmRlcml2fSAoaW5j bHVzaXZlKSBhdAogdGhlIHBvc2l0aW9uIEB2YXJ7eH0gYW5kIHN0b3JlcyB0 aGVtIGluIEB2YXJ7ZEJ9LiAgVGhlIEBtYXRoeyhpLGopfXRoCg== ------=_Part_14807_26069739.1228535570796--