Re: [GNU Bison 3.8.2] testsuite: 764 failed
Michael Daniels <[email protected]> Wed, 24 Dec 2025 17:16:52 -0500
| Newsgroups | gmane.comp.parsers.bison.bugs |
|---|---|
| Message-ID | <CAFK2qPQT+1S0HvKJPdW4ZyFsMvou2CT2wy-RwyO7x_WreTjzYg@mail.gmail.com> |
--0000000000002d3a0d0646ba051b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable It seems that Gmail believes that the executable glr-regr16 (which I had included in the tarball in my original message), and the dsym folder are viruses. Please see the attached files, which are all of the other contents of the 764 folder. On Wed, Dec 24, 2025 at 5:05=E2=80=AFPM Michael Daniels <mdaniels5757@gmail= .com> wrote: > > Hi, > > It seems that the unit test #764 is failing on MacOS. > > I've attached tests/testsuite.log, along with tests/testsuite.dir/764. > > Best, > Michael Daniels --0000000000002d3a0d0646ba051b Content-Type: text/x-c-code; charset="US-ASCII"; name="glr-regr16.cc" Content-Disposition: attachment; filename="glr-regr16.cc" Content-Transfer-Encoding: base64 Content-ID: <f_mjkkk35i1> X-Attachment-Id: f_mjkkk35i1 Ly8gQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuOC4yLgoKLy8gU2tlbGV0b24g aW1wbGVtZW50YXRpb24gZm9yIEJpc29uIEdMUiBwYXJzZXJzIGluIEMKCi8vIENvcHlyaWdodCAo QykgMjAwMi0yMDE1LCAyMDE4LTIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCgov LyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQovLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQovLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgovLyAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgoKLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi8vIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLy8gR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCi8vIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi8v IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KCi8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRl IGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwovLyBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24g cGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawovLyB1bmRlciB0ZXJtcyBv ZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLy8gcGFy c2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRo ZXJlb2YKLy8gYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9k aWZ5IG9yIHJlZGlzdHJpYnV0ZQovLyB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1h eSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi8vIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGlj aCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZwovLyBCaXNvbiBvdXRw dXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwovLyBM aWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KCi8vIFRoaXMgc3BlY2lhbCBl eGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KLy8g dmVyc2lvbiAyLjIgb2YgQmlzb24uCgovLyBDKysgR0xSIHBhcnNlciBza2VsZXRvbiB3cml0dGVu IGJ5IFZhbGVudGluIFRvbG1lci4KCi8vIERPIE5PVCBSRUxZIE9OIEZFQVRVUkVTIFRIQVQgQVJF IE5PVCBET0NVTUVOVEVEIGluIHRoZSBtYW51YWwsCi8vIGVzcGVjaWFsbHkgdGhvc2Ugd2hvc2Ug bmFtZSBzdGFydCB3aXRoIFlZXyBvciB5eV8uICBUaGV5IGFyZQovLyBwcml2YXRlIGltcGxlbWVu dGF0aW9uIGRldGFpbHMgdGhhdCBjYW4gYmUgY2hhbmdlZCBvciByZW1vdmVkLgoKLyogSWRlbnRp ZnkgQmlzb24gb3V0cHV0LCBhbmQgQmlzb24gdmVyc2lvbi4gICovCiNkZWZpbmUgWVlCSVNPTiAz MDgwMgoKLyogQmlzb24gdmVyc2lvbiBzdHJpbmcuICAqLwojZGVmaW5lIFlZQklTT05fVkVSU0lP TiAiMy44LjIiCgovKiBTa2VsZXRvbiBuYW1lLiAgKi8KI2RlZmluZSBZWVNLRUxFVE9OX05BTUUg ImdscjIuY2MiCgoKLy8gIiVjb2RlIHRvcCIgYmxvY2tzLgojbGluZSAxICJnbHItcmVncjE2Lnki CiAvKiAtKi0gYysrIC0qLSAqLwovKiBBZGp1c3QgdG8gdGhlIGNvbXBpbGVyLgogIFdlIHVzZWQg dG8gZG8gaXQgaGVyZSwgYnV0IGVhY2ggdGltZSB3ZSBhZGQgYSBuZXcgbGluZSwKICB3ZSBoYXZl IHRvIGFkanVzdCBhbGwgdGhlIGxpbmUgbnVtYmVycyBpbiBlcnJvciBtZXNzYWdlcy4KICBJdCdz IHNpbXBsZXIgdG8gdXNlIGEgY29uc3RhbnQgaW5jbHVkZSB0byBhIHZhcnlpbmcgZmlsZS4gICov CiNpbmNsdWRlIDx0ZXN0c3VpdGUuaD4KCiNsaW5lIDU5ICJnbHItcmVncjE2LmNjIgoKCgoKCiMg aWZuZGVmIFlZX05VTExQVFIKIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cwojICAgaWYgMjAxMTAz TCA8PSBfX2NwbHVzcGx1cwojICAgIGRlZmluZSBZWV9OVUxMUFRSIG51bGxwdHIKIyAgIGVsc2UK IyAgICBkZWZpbmUgWVlfTlVMTFBUUiAwCiMgICBlbmRpZgojICBlbHNlCiMgICBkZWZpbmUgWVlf TlVMTFBUUiAoKHZvaWQqKTApCiMgIGVuZGlmCiMgZW5kaWYKCgojaW5jbHVkZSA8YWxnb3JpdGht PgojaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gcHRyZGlmZl90CiNpbmNsdWRlIDxjc3RyaW5nPiAvLyBt ZW1jcHkKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGxp bWl0cz4KI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KI2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8 c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKIyBkZWZp bmUgWVlfQ1BMVVNQTFVTIF9fY3BsdXNwbHVzCiNlbHNlCiMgZGVmaW5lIFlZX0NQTFVTUExVUyAx OTk3MTFMCiNlbmRpZgoKLy8gU3VwcG9ydCBtb3ZlIHNlbWFudGljcyB3aGVuIHBvc3NpYmxlLgoj aWYgMjAxMTAzTCA8PSBZWV9DUExVU1BMVVMKIyBkZWZpbmUgWVlfTU9WRSAgICAgICAgICAgc3Rk Ojptb3ZlCiMgZGVmaW5lIFlZX01PVkVfT1JfQ09QWSAgIG1vdmUKIyBkZWZpbmUgWVlfTU9WRV9S RUYoVHlwZSkgVHlwZSYmCiMgZGVmaW5lIFlZX1JWUkVGKFR5cGUpICAgIFR5cGUmJgojIGRlZmlu ZSBZWV9DT1BZKFR5cGUpICAgICBUeXBlCiNlbHNlCiMgZGVmaW5lIFlZX01PVkUKIyBkZWZpbmUg WVlfTU9WRV9PUl9DT1BZICAgY29weQojIGRlZmluZSBZWV9NT1ZFX1JFRihUeXBlKSBUeXBlJgoj IGRlZmluZSBZWV9SVlJFRihUeXBlKSAgICBjb25zdCBUeXBlJgojIGRlZmluZSBZWV9DT1BZKFR5 cGUpICAgICBjb25zdCBUeXBlJgojZW5kaWYKCi8vIFN1cHBvcnQgbm9leGNlcHQgd2hlbiBwb3Nz aWJsZS4KI2lmIDIwMTEwM0wgPD0gWVlfQ1BMVVNQTFVTCiMgZGVmaW5lIFlZX05PRVhDRVBUIG5v ZXhjZXB0CiMgZGVmaW5lIFlZX05PVEhST1cKI2Vsc2UKIyBkZWZpbmUgWVlfTk9FWENFUFQKIyBk ZWZpbmUgWVlfTk9USFJPVyB0aHJvdyAoKQojZW5kaWYKCi8vIFN1cHBvcnQgY29uc3RleHByIHdo ZW4gcG9zc2libGUuCiNpZiAyMDE3MDMgPD0gWVlfQ1BMVVNQTFVTCiMgZGVmaW5lIFlZX0NPTlNU RVhQUiBjb25zdGV4cHIKI2Vsc2UKIyBkZWZpbmUgWVlfQ09OU1RFWFBSCiNlbmRpZgoKCgovKiBE ZWJ1ZyB0cmFjZXMuICAqLwojaWZuZGVmIFlZREVCVUcKIyBkZWZpbmUgWVlERUJVRyAxCiNlbmRp ZgoKbmFtZXNwYWNlIHl5IHsKI2xpbmUgMTM0ICJnbHItcmVncjE2LmNjIgoKCgoKICAvLy8gQSBC aXNvbiBwYXJzZXIuCiAgY2xhc3MgcGFyc2VyCiAgewogIHB1YmxpYzoKICAgIC8vLyBTeW1ib2wg c2VtYW50aWMgdmFsdWVzLgogICAgdHlwZWRlZiBpbnQgdmFsdWVfdHlwZTsKCiAgICAvLy8gU3lu dGF4IGVycm9ycyB0aHJvd24gZnJvbSB1c2VyIGFjdGlvbnMuCiAgICBzdHJ1Y3Qgc3ludGF4X2Vy cm9yIDogc3RkOjpydW50aW1lX2Vycm9yCiAgICB7CiAgICAgIHN5bnRheF9lcnJvciAoY29uc3Qg c3RkOjpzdHJpbmcmIG0pCiAgICAgICAgOiBzdGQ6OnJ1bnRpbWVfZXJyb3IgKG0pCiAgICAgIHt9 CgogICAgICBzeW50YXhfZXJyb3IgKGNvbnN0IHN5bnRheF9lcnJvciYgcykKICAgICAgICA6IHN0 ZDo6cnVudGltZV9lcnJvciAocy53aGF0ICgpKQogICAgICB7fQoKICAgICAgfnN5bnRheF9lcnJv ciAoKSBZWV9OT0VYQ0VQVCBZWV9OT1RIUk9XOwogICAgfTsKCiAgICAvLy8gVG9rZW4ga2luZHMu CiAgICBzdHJ1Y3QgdG9rZW4KICAgIHsKICAgICAgZW51bSB0b2tlbl9raW5kX3R5cGUKICAgICAg ewogICAgICAgIFlZRU1QVFkgPSAtMiwKICAgIFlZRU9GID0gMCwgICAgICAgICAgICAgICAgICAg ICAvLyAiZW5kIG9mIGZpbGUiCiAgICBZWWVycm9yID0gMjU2LCAgICAgICAgICAgICAgICAgLy8g ZXJyb3IKICAgIFlZVU5ERUYgPSAyNTcgICAgICAgICAgICAgICAgICAvLyAiaW52YWxpZCB0b2tl biIKICAgICAgfTsKICAgIH07CgogICAgLy8vIFRva2VuIGtpbmQsIGFzIHJldHVybmVkIGJ5IHl5 bGV4LgogICAgdHlwZWRlZiB0b2tlbjo6dG9rZW5fa2luZF90eXBlIHRva2VuX2tpbmRfdHlwZTsK CiAgICAvLy8gU3ltYm9sIGtpbmRzLgogICAgc3RydWN0IHN5bWJvbF9raW5kCiAgICB7CiAgICAg IGVudW0gc3ltYm9sX2tpbmRfdHlwZQogICAgICB7CiAgICAgICAgWVlOVE9LRU5TID0gNSwgLy8v PCBOdW1iZXIgb2YgdG9rZW5zLgogICAgICAgIFNfWVlFTVBUWSA9IC0yLAogICAgICAgIFNfWVlF T0YgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gImVuZCBvZiBmaWxlIgogICAg ICAgIFNfWVllcnJvciA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IKICAg ICAgICBTX1lZVU5ERUYgPSAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICJpbnZhbGlk IHRva2VuIgogICAgICAgIFNfM19iXyA9IDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gJ2InCiAgICAgICAgU180X2FfID0gNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv LyAnYScKICAgICAgICBTX1lZQUNDRVBUID0gNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8v ICRhY2NlcHQKICAgICAgICBTX3N0YXJ0ID0gNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIHN0YXJ0CiAgICAgICAgU19hbHQxID0gNywgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBhbHQxCiAgICAgICAgU19hbHQyID0gOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBhbHQyCiAgICAgIH07CiAgICB9OwoKICAgIC8vLyAoSW50ZXJuYWwpIHN5bWJvbCBraW5k LgogICAgdHlwZWRlZiBzeW1ib2xfa2luZDo6c3ltYm9sX2tpbmRfdHlwZSBzeW1ib2xfa2luZF90 eXBlOwoKICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRva2Vucy4KICAgIHN0YXRpYyBjb25zdCBzeW1i b2xfa2luZF90eXBlIFlZTlRPS0VOUyA9IHN5bWJvbF9raW5kOjpZWU5UT0tFTlM7CgogICAgLy8v IEEgY29tcGxldGUgc3ltYm9sLgogICAgLy8vCiAgICAvLy8gRXhwZWN0cyBpdHMgQmFzZSB0eXBl IHRvIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBzeW1ib2wga2luZAogICAgLy8vIHZpYSBraW5kICgp LgogICAgLy8vCiAgICAvLy8gUHJvdmlkZSBhY2Nlc3MgdG8gc2VtYW50aWMgdmFsdWUuCiAgICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgQmFzZT4KICAgIHN0cnVjdCBiYXNpY19zeW1ib2wgOiBCYXNlCiAg ICB7CiAgICAgIC8vLyBBbGlhcyB0byBCYXNlLgogICAgICB0eXBlZGVmIEJhc2Ugc3VwZXJfdHlw ZTsKCiAgICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgogICAgICBiYXNpY19zeW1ib2wgKCkg WVlfTk9FWENFUFQKICAgICAgICA6IHZhbHVlICgpCiAgICAgIHt9CgojaWYgMjAxMTAzTCA8PSBZ WV9DUExVU1BMVVMKICAgICAgLy8vIE1vdmUgY29uc3RydWN0b3IuCiAgICAgIGJhc2ljX3N5bWJv bCAoYmFzaWNfc3ltYm9sJiYgdGhhdCkKICAgICAgICA6IEJhc2UgKHN0ZDo6bW92ZSAodGhhdCkp CiAgICAgICAgLCB2YWx1ZSAoc3RkOjptb3ZlICh0aGF0LnZhbHVlKSkKICAgICAge30KI2VuZGlm CgogICAgICAvLy8gQ29weSBjb25zdHJ1Y3Rvci4KICAgICAgYmFzaWNfc3ltYm9sIChjb25zdCBi YXNpY19zeW1ib2wmIHRoYXQpOwogICAgICAvLy8gQ29uc3RydWN0b3IgZm9yIHZhbHVlbGVzcyBz eW1ib2xzLgogICAgICBiYXNpY19zeW1ib2wgKHR5cGVuYW1lIEJhc2U6OmtpbmRfdHlwZSB0KTsK CiAgICAgIC8vLyBDb25zdHJ1Y3RvciBmb3Igc3ltYm9scyB3aXRoIHNlbWFudGljIHZhbHVlLgog ICAgICBiYXNpY19zeW1ib2wgKHR5cGVuYW1lIEJhc2U6OmtpbmRfdHlwZSB0LAogICAgICAgICAg ICAgICAgICAgIFlZX1JWUkVGICh2YWx1ZV90eXBlKSB2KTsKCiAgICAgIC8vLyBEZXN0cm95IHRo ZSBzeW1ib2wuCiAgICAgIH5iYXNpY19zeW1ib2wgKCkKICAgICAgewogICAgICAgIGNsZWFyICgp OwogICAgICB9CgoKICAgICAgLy8vIENvcHkgYXNzaWdubWVudC4KICAgICAgYmFzaWNfc3ltYm9s JiBvcGVyYXRvcj0gKGNvbnN0IGJhc2ljX3N5bWJvbCYgdGhhdCkKICAgICAgewogICAgICAgIEJh c2U6Om9wZXJhdG9yPSAodGhhdCk7CiAgICAgICAgdmFsdWUgPSB0aGF0LnZhbHVlOwogICAgICAg IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgLy8vIE1vdmUgYXNzaWdubWVudC4KICAgICAg YmFzaWNfc3ltYm9sJiBvcGVyYXRvcj0gKGJhc2ljX3N5bWJvbCYmIHRoYXQpCiAgICAgIHsKICAg ICAgICBCYXNlOjpvcGVyYXRvcj0gKHN0ZDo6bW92ZSAodGhhdCkpOwogICAgICAgIHZhbHVlID0g c3RkOjptb3ZlICh0aGF0LnZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgog ICAgICAvLy8gRGVzdHJveSBjb250ZW50cywgYW5kIHJlY29yZCB0aGF0IGlzIGVtcHR5LgogICAg ICB2b2lkIGNsZWFyICgpIFlZX05PRVhDRVBUCiAgICAgIHsKICAgICAgICBCYXNlOjpjbGVhciAo KTsKICAgICAgfQoKI2lmIFlZREVCVUcgfHwgMAogICAgICAvLy8gVGhlIHVzZXItZmFjaW5nIG5h bWUgb2YgdGhpcyBzeW1ib2wuCiAgICAgIGNvbnN0IGNoYXIgKm5hbWUgKCkgY29uc3QgWVlfTk9F WENFUFQKICAgICAgewogICAgICAgIHJldHVybiBwYXJzZXI6OnN5bWJvbF9uYW1lICh0aGlzLT5r aW5kICgpKTsKICAgICAgfQojZW5kaWYgLy8gI2lmIFlZREVCVUcgfHwgMAoKCiAgICAgIC8vLyBX aGV0aGVyIGVtcHR5LgogICAgICBib29sIGVtcHR5ICgpIGNvbnN0IFlZX05PRVhDRVBUOwoKICAg ICAgLy8vIERlc3RydWN0aXZlIG1vdmUsIFxhIHMgaXMgZW1wdGllZCBpbnRvIHRoaXMuCiAgICAg IHZvaWQgbW92ZSAoYmFzaWNfc3ltYm9sJiBzKTsKCiAgICAgIC8vLyBUaGUgc2VtYW50aWMgdmFs dWUuCiAgICAgIHZhbHVlX3R5cGUgdmFsdWU7CgogICAgcHJpdmF0ZToKI2lmIFlZX0NQTFVTUExV UyA8IDIwMTEwM0wKICAgICAgLy8vIEFzc2lnbm1lbnQgb3BlcmF0b3IuCiAgICAgIGJhc2ljX3N5 bWJvbCYgb3BlcmF0b3I9IChjb25zdCBiYXNpY19zeW1ib2wmIHRoYXQpOwojZW5kaWYKICAgIH07 CgogICAgLy8vIFR5cGUgYWNjZXNzIHByb3ZpZGVyIGZvciB0b2tlbiAoZW51bSkgYmFzZWQgc3lt Ym9scy4KICAgIHN0cnVjdCBieV9raW5kCiAgICB7CiAgICAgIC8vLyBUaGUgc3ltYm9sIGtpbmQg YXMgbmVlZGVkIGJ5IHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgdHlwZWRlZiB0b2tlbl9raW5kX3R5 cGUga2luZF90eXBlOwoKICAgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IuCiAgICAgIGJ5X2tp bmQgKCkgWVlfTk9FWENFUFQ7CgojaWYgMjAxMTAzTCA8PSBZWV9DUExVU1BMVVMKICAgICAgLy8v IE1vdmUgY29uc3RydWN0b3IuCiAgICAgIGJ5X2tpbmQgKGJ5X2tpbmQmJiB0aGF0KSBZWV9OT0VY Q0VQVDsKI2VuZGlmCgogICAgICAvLy8gQ29weSBjb25zdHJ1Y3Rvci4KICAgICAgYnlfa2luZCAo Y29uc3QgYnlfa2luZCYgdGhhdCkgWVlfTk9FWENFUFQ7CgogICAgICAvLy8gQ29uc3RydWN0b3Ig ZnJvbSAoZXh0ZXJuYWwpIHRva2VuIG51bWJlcnMuCiAgICAgIGJ5X2tpbmQgKGtpbmRfdHlwZSB0 KSBZWV9OT0VYQ0VQVDsKCgogICAgICAvLy8gQ29weSBhc3NpZ25tZW50LgogICAgICBieV9raW5k JiBvcGVyYXRvcj0gKGNvbnN0IGJ5X2tpbmQmIHRoYXQpOwoKICAgICAgLy8vIE1vdmUgYXNzaWdu bWVudC4KICAgICAgYnlfa2luZCYgb3BlcmF0b3I9IChieV9raW5kJiYgdGhhdCk7CgoKICAgICAg Ly8vIFJlY29yZCB0aGF0IHRoaXMgc3ltYm9sIGlzIGVtcHR5LgogICAgICB2b2lkIGNsZWFyICgp IFlZX05PRVhDRVBUOwoKICAgICAgLy8vIFN0ZWFsIHRoZSBzeW1ib2wga2luZCBmcm9tIFxhIHRo YXQuCiAgICAgIHZvaWQgbW92ZSAoYnlfa2luZCYgdGhhdCk7CgogICAgICAvLy8gVGhlIChpbnRl cm5hbCkgdHlwZSBudW1iZXIgKGNvcnJlc3BvbmRpbmcgdG8gXGEgdHlwZSkuCiAgICAgIC8vLyBc YSBlbXB0eSB3aGVuIGVtcHR5LgogICAgICBzeW1ib2xfa2luZF90eXBlIGtpbmQgKCkgY29uc3Qg WVlfTk9FWENFUFQ7CgogICAgICAvLy8gVGhlIHN5bWJvbCBraW5kLgogICAgICAvLy8gXGEgU19Z WUVNUFRZIHdoZW4gZW1wdHkuCiAgICAgIHN5bWJvbF9raW5kX3R5cGUga2luZF87CiAgICB9OwoK ICAgIC8vLyAiRXh0ZXJuYWwiIHN5bWJvbHM6IHJldHVybmVkIGJ5IHRoZSBzY2FubmVyLgogICAg c3RydWN0IHN5bWJvbF90eXBlIDogYmFzaWNfc3ltYm9sPGJ5X2tpbmQ+CiAgICB7fTsKCgogICAg Ly8gRklYTUU6IHNob3VsZCBiZSBwcml2YXRlIGV2ZW50dWFsbHkuCiAgICBjbGFzcyBnbHJfc3Rh Y2s7CiAgICBjbGFzcyBnbHJfc3RhdGU7CgogICAgLy8vIEJ1aWxkIGEgcGFyc2VyIG9iamVjdC4K ICAgIHBhcnNlciAoKTsKICAgIH5wYXJzZXIgKCk7CgogICAgLy8vIFBhcnNlLiAgQW4gYWxpYXMg Zm9yIHBhcnNlICgpLgogICAgLy8vIFxyZXR1cm5zICAwIGlmZiBwYXJzaW5nIHN1Y2NlZWRlZC4K ICAgIGludCBvcGVyYXRvcigpICgpOwoKICAgIC8vLyBQYXJzZS4KICAgIC8vLyBccmV0dXJucyAg MCBpZmYgcGFyc2luZyBzdWNjZWVkZWQuCiAgICBpbnQgcGFyc2UgKCk7CgojaWYgWVlERUJVRwog ICAgLy8vIFRoZSBjdXJyZW50IGRlYnVnZ2luZyBzdHJlYW0uCiAgICBzdGQ6Om9zdHJlYW0mIGRl YnVnX3N0cmVhbSAoKSBjb25zdDsKICAgIC8vLyBTZXQgdGhlIGN1cnJlbnQgZGVidWdnaW5nIHN0 cmVhbS4KICAgIHZvaWQgc2V0X2RlYnVnX3N0cmVhbSAoc3RkOjpvc3RyZWFtICYpOwoKICAgIC8v LyBUeXBlIGZvciBkZWJ1Z2dpbmcgbGV2ZWxzLgogICAgdXNpbmcgZGVidWdfbGV2ZWxfdHlwZSA9 IGludDsKICAgIC8vLyBUaGUgY3VycmVudCBkZWJ1Z2dpbmcgbGV2ZWwuCiAgICBkZWJ1Z19sZXZl bF90eXBlIGRlYnVnX2xldmVsICgpIGNvbnN0OwogICAgLy8vIFNldCB0aGUgY3VycmVudCBkZWJ1 Z2dpbmcgbGV2ZWwuCiAgICB2b2lkIHNldF9kZWJ1Z19sZXZlbCAoZGVidWdfbGV2ZWxfdHlwZSBs KTsKI2VuZGlmCgogICAgLy8vIFJlcG9ydCBhIHN5bnRheCBlcnJvci4KICAgIC8vLyBccGFyYW0g bXNnICAgIGEgZGVzY3JpcHRpb24gb2YgdGhlIHN5bnRheCBlcnJvci4KICAgIHZvaWQgZXJyb3Ig KGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpOwoKI2lmIFlZREVCVUcgfHwgMAogICAgLy8vIFRoZSB1 c2VyLWZhY2luZyBuYW1lIG9mIHRoZSBzeW1ib2wgd2hvc2UgKGludGVybmFsKSBudW1iZXIgaXMK ICAgIC8vLyBZWVNZTUJPTC4gIE5vIGJvdW5kcyBjaGVja2luZy4KICAgIHN0YXRpYyBjb25zdCBj aGFyICpzeW1ib2xfbmFtZSAoc3ltYm9sX2tpbmRfdHlwZSB5eXN5bWJvbCk7CiNlbmRpZiAvLyAj aWYgWVlERUJVRyB8fCAwCgoKCgojIGlmIFlZREVCVUcKICBwdWJsaWM6CiAgICAvLy8gXGJyaWVm IFJlcG9ydCBhIHN5bWJvbCB2YWx1ZSBvbiB0aGUgZGVidWcgc3RyZWFtLgogICAgLy8vIFxwYXJh bSB5eWtpbmQgICBUaGUgc3ltYm9sIGtpbmQuCiAgICAvLy8gXHBhcmFtIHl5dmFsICAgIEl0cyBz ZW1hbnRpYyB2YWx1ZS4KICAgIHZvaWQgeXlfc3ltYm9sX3ZhbHVlX3ByaW50XyAoc3ltYm9sX2tp bmRfdHlwZSB5eWtpbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZh bHVlX3R5cGUmIHl5dmFsKSBjb25zdDsKICAgIC8vLyBcYnJpZWYgUmVwb3J0IGEgc3ltYm9sIG9u IHRoZSBkZWJ1ZyBzdHJlYW0uCiAgICAvLy8gXHBhcmFtIHl5a2luZCAgIFRoZSBzeW1ib2wga2lu ZC4KICAgIC8vLyBccGFyYW0geXl2YWwgICAgSXRzIHNlbWFudGljIHZhbHVlLgogICAgdm9pZCB5 eV9zeW1ib2xfcHJpbnRfIChzeW1ib2xfa2luZF90eXBlIHl5a2luZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdmFsdWVfdHlwZSYgeXl2YWwpIGNvbnN0OwogIHByaXZhdGU6CiAg ICAvLy8gRGVidWcgc3RyZWFtLgogICAgc3RkOjpvc3RyZWFtKiB5eWNkZWJ1Z187CiNlbmRpZgoK CgogICAgLy8vIENvbnZlcnQgYSBzY2FubmVyIHRva2VuIGtpbmQgXGEgdCB0byBhIHN5bWJvbCBr aW5kLgogICAgLy8vIEluIHRoZW9yeSBcYSB0IHNob3VsZCBiZSBhIHRva2VuX2tpbmRfdHlwZSwg YnV0IGNoYXJhY3RlciBsaXRlcmFscwogICAgLy8vIGFyZSB2YWxpZCwgeWV0IG5vdCBtZW1iZXJz IG9mIHRoZSB0b2tlbl9raW5kX3R5cGUgZW51bS4KICAgIHN0YXRpYyBzeW1ib2xfa2luZF90eXBl IHl5dHJhbnNsYXRlXyAoaW50IHQpIFlZX05PRVhDRVBUOwoKI2lmIFlZREVCVUcgfHwgMAogICAg Ly8vIEZvciBhIHN5bWJvbCwgaXRzIG5hbWUgaW4gY2xlYXIuCiAgICBzdGF0aWMgY29uc3QgY2hh ciogY29uc3QgeXl0bmFtZV9bXTsKI2VuZGlmIC8vICNpZiBZWURFQlVHIHx8IDAKCgogICAgLy8v IFxicmllZiBSZWNsYWltIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byBhIHN5bWJvbC4KICAgIC8v LyBccGFyYW0geXltc2cgICAgIFdoeSB0aGlzIHRva2VuIGlzIHJlY2xhaW1lZC4KICAgIC8vLyAg ICAgICAgICAgICAgICAgIElmIG51bGwsIHByaW50IG5vdGhpbmcuCiAgICAvLy8gXHBhcmFtIHl5 a2luZCAgICBUaGUgc3ltYm9sIGtpbmQuCiAgICB2b2lkIHl5X2Rlc3Ryb3lfIChjb25zdCBjaGFy KiB5eW1zZywgc3ltYm9sX2tpbmRfdHlwZSB5eWtpbmQsCiAgICAgICAgICAgICAgICAgICAgICB2 YWx1ZV90eXBlJiB5eXZhbCk7CgoKICAgIC8vIE5lZWRzIGFjY2VzcyB0byB5eV9kZXN0cm95Xywg cmVwb3J0X3N5bnRheF9lcnJvciwgZXRjLgogICAgZnJpZW5kIGdscl9zdGFjazsKICB9OwoKCn0g Ly8geXkKI2xpbmUgNDI0ICJnbHItcmVncjE2LmNjIgoKCgoKCm5hbWVzcGFjZQp7CiAgLyogRGVm YXVsdCAoY29uc3RhbnQpIHZhbHVlIHVzZWQgZm9yIGluaXRpYWxpemF0aW9uIGZvciBudWxsCiAg ICAgcmlnaHQtaGFuZCBzaWRlcy4gIFVubGlrZSB0aGUgc3RhbmRhcmQgeWFjYy5jIHRlbXBsYXRl LCBoZXJlIHdlIHNldAogICAgIHRoZSBkZWZhdWx0IHZhbHVlIG9mICQkIHRvIGEgemVyb2VkLW91 dCB2YWx1ZS4gIFNpbmNlIHRoZSBkZWZhdWx0CiAgICAgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGlz IGJlaGF2aW9yIGlzIHRlY2huaWNhbGx5IGNvcnJlY3QuICAqLwogIHl5OjpwYXJzZXI6OnZhbHVl X3R5cGUgeXl2YWxfZGVmYXVsdDsKfQoKCi8vIFVucXVhbGlmaWVkICVjb2RlIGJsb2Nrcy4KI2xp bmUgMTkgImdsci1yZWdyMTYueSIKCiMgaW5jbHVkZSA8YXNzZXJ0Lmg+CgogIHN0YXRpYyBpbnQg eXlsZXggKHl5OjpwYXJzZXI6OnZhbHVlX3R5cGUgKmx2YWxwKTsKICBzdGF0aWMgaW50IGxvb2th aGVhZF92YWx1ZSA9IDA7CiMgZGVmaW5lIFVTRSh2YWwpCgojbGluZSA0NDkgImdsci1yZWdyMTYu Y2MiCgoKI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CgojaWZuZGVmIFlZXwoj IGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUwojICBpZiBFTkFCTEVfTkxT CiMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug Ki8KIyAgIGRlZmluZSBZWV8oTXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIE1zZ2lk KQojICBlbmRpZgojIGVuZGlmCiMgaWZuZGVmIFlZXwojICBkZWZpbmUgWVlfKE1zZ2lkKSBNc2dp ZAojIGVuZGlmCiNlbmRpZgoKLy8gV2hldGhlciB3ZSBhcmUgY29tcGlsZWQgd2l0aCBleGNlcHRp b24gc3VwcG9ydC4KI2lmbmRlZiBZWV9FWENFUFRJT05TCiMgaWYgZGVmaW5lZCBfX0dOVUNfXyAm JiAhZGVmaW5lZCBfX0VYQ0VQVElPTlMKIyAgZGVmaW5lIFlZX0VYQ0VQVElPTlMgMAojIGVsc2UK IyAgZGVmaW5lIFlZX0VYQ0VQVElPTlMgMQojIGVuZGlmCiNlbmRpZgoKI2lmbmRlZiBZWUZSRUUK IyBkZWZpbmUgWVlGUkVFIGZyZWUKI2VuZGlmCiNpZm5kZWYgWVlNQUxMT0MKIyBkZWZpbmUgWVlN QUxMT0MgbWFsbG9jCiNlbmRpZgoKI2lmbmRlZiBZWVNFVEpNUAojIGluY2x1ZGUgPHNldGptcC5o PgojIGRlZmluZSBZWUpNUF9CVUYgam1wX2J1ZgojIGRlZmluZSBZWVNFVEpNUChFbnYpIHNldGpt cCAoRW52KQovKiBQYWNpZnkgQ2xhbmcgYW5kIElDQy4gICovCiMgZGVmaW5lIFlZTE9OR0pNUChF bnYsIFZhbCkgICAgICAgICAgICAgICAgICAgIFwKIGRvIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAogICBsb25nam1wIChFbnYsIFZhbCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICBcCiAgIFlZQVNTRVJUICgwKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKIH0gd2hpbGUgKGZhbHNlKQojZW5kaWYKCiNpZm5kZWYgWVlfQVRUUklCVVRFX1BV UkUKIyBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDIgPCBfX0dOVUNfXyArICg5NiA8PSBfX0dOVUNf TUlOT1JfXykKIyAgZGVmaW5lIFlZX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpCiMgZWxzZQojICBkZWZpbmUgWVlfQVRUUklCVVRFX1BVUkUKIyBlbmRpZgojZW5kaWYK CiNpZm5kZWYgWVlfQVRUUklCVVRFX1VOVVNFRAojIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMiA8 IF9fR05VQ19fICsgKDcgPD0gX19HTlVDX01JTk9SX18pCiMgIGRlZmluZSBZWV9BVFRSSUJVVEVf VU5VU0VEIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKIyBlbHNlCiMgIGRlZmluZSBZWV9B VFRSSUJVVEVfVU5VU0VECiMgZW5kaWYKI2VuZGlmCgovKiBUaGUgX05vcmV0dXJuIGtleXdvcmQg b2YgQzExLiAgKi8KI2lmbmRlZiBfTm9yZXR1cm4KIyBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyBc CiAgICAgICYmICgoMjAxMTAzIDw9IF9fY3BsdXNwbHVzICYmICEoX19HTlVDX18gPT0gNCAmJiBf X0dOVUNfTUlOT1JfXyA9PSA3KSkgXAogICAgICAgICAgfHwgKGRlZmluZWQgX01TQ19WRVIgJiYg MTkwMCA8PSBfTVNDX1ZFUikpKQojICBkZWZpbmUgX05vcmV0dXJuIFtbbm9yZXR1cm5dXQojIGVs aWYgKCghZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fY2xhbmdfXykgXAogICAgICAg ICYmICgyMDExMTIgPD0gKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyA/IF9fU1REQ19WRVJTSU9O X18gOiAwKSBcCiAgICAgICAgICAgIHx8ICghZGVmaW5lZCBfX1NUUklDVF9BTlNJX18gXAogICAg ICAgICAgICAgICAgJiYgKDQgPCBfX0dOVUNfXyArICg3IDw9IF9fR05VQ19NSU5PUl9fKSBcCiAg ICAgICAgICAgICAgICAgICAgfHwgKGRlZmluZWQgX19hcHBsZV9idWlsZF92ZXJzaW9uX18gXAog ICAgICAgICAgICAgICAgICAgICAgICA/IDYwMDAwMDAgPD0gX19hcHBsZV9idWlsZF92ZXJzaW9u X18gXAogICAgICAgICAgICAgICAgICAgICAgICA6IDMgPCBfX2NsYW5nX21ham9yX18gKyAoNSA8 PSBfX2NsYW5nX21pbm9yX18pKSkpKSkKICAgLyogX05vcmV0dXJuIHdvcmtzIGFzLWlzLiAgKi8K IyBlbGlmICgyIDwgX19HTlVDX18gKyAoOCA8PSBfX0dOVUNfTUlOT1JfXykgfHwgZGVmaW5lZCBf X2NsYW5nX18gXAogICAgICAgIHx8IDB4NTExMCA8PSBfX1NVTlBST19DKQojICBkZWZpbmUgX05v cmV0dXJuIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQojIGVsaWYgMTIwMCA8PSAoZGVm aW5lZCBfTVNDX1ZFUiA/IF9NU0NfVkVSIDogMCkKIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xz cGVjIChub3JldHVybikKIyBlbHNlCiMgIGRlZmluZSBfTm9yZXR1cm4KIyBlbmRpZgojZW5kaWYK Ci8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwoj aWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXwojIGRlZmluZSBZWV9VU0UoRSkg KCh2b2lkKSAoRSkpCiNlbHNlCiMgZGVmaW5lIFlZX1VTRShFKSAvKiBlbXB0eSAqLwojZW5kaWYK Ci8qIFN1cHByZXNzIGFuIGluY29ycmVjdCBkaWFnbm9zdGljIGFib3V0IHl5bHZhbCBiZWluZyB1 bmluaXRpYWxpemVkLiAgKi8KI2lmIGRlZmluZWQgX19HTlVDX18gJiYgISBkZWZpbmVkIF9fSUND ICYmIDQwNiA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fCiMgaWYgX19HTlVDX18g KiAxMDAgKyBfX0dOVUNfTUlOT1JfXyA8IDQwNwojICBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VO SU5JVElBTElaRURfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBfUHJhZ21h ICgiR0NDIGRpYWdub3N0aWMgcHVzaCIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bmluaXRpYWxp emVkXCIiKQojIGVsc2UKIyAgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JF R0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9z dGljIHB1c2giKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBfUHJh Z21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW5pbml0aWFsaXplZFwiIikgICAgICAg ICAgICAgIFwKICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtYXliZS11 bmluaXRpYWxpemVkXCIiKQojIGVuZGlmCiMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJ QUxJWkVEX0VORCAgICAgIFwKICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQojZWxz ZQojIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSBWYWx1ZQojZW5kaWYKI2lmbmRlZiBZ WV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgojIGRlZmluZSBZWV9JR05PUkVfTUFZ QkVfVU5JTklUSUFMSVpFRF9CRUdJTgojIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFM SVpFRF9FTkQKI2VuZGlmCiNpZm5kZWYgWVlfSU5JVElBTF9WQUxVRQojIGRlZmluZSBZWV9JTklU SUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLwojZW5kaWYKCiNpZiBkZWZpbmVkIF9fY3Bs dXNwbHVzICYmIGRlZmluZWQgX19HTlVDX18gJiYgISBkZWZpbmVkIF9fSUNDICYmIDYgPD0gX19H TlVDX18KIyBkZWZpbmUgWVlfSUdOT1JFX1VTRUxFU1NfQ0FTVF9CRUdJTiAgICAgICAgICAgICAg ICAgICAgICAgICAgXAogICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCiAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3Jl ZCBcIi1XdXNlbGVzcy1jYXN0XCIiKQojIGRlZmluZSBZWV9JR05PUkVfVVNFTEVTU19DQVNUX0VO RCAgICAgICAgICAgIFwKICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQojZW5kaWYK I2lmbmRlZiBZWV9JR05PUkVfVVNFTEVTU19DQVNUX0JFR0lOCiMgZGVmaW5lIFlZX0lHTk9SRV9V U0VMRVNTX0NBU1RfQkVHSU4KIyBkZWZpbmUgWVlfSUdOT1JFX1VTRUxFU1NfQ0FTVF9FTkQKI2Vu ZGlmCgoKI2lmIGRlZmluZWQgX19HTlVDX18gJiYgISBkZWZpbmVkIF9fSUNDICYmIDYgPD0gX19H TlVDX18KIyBkZWZpbmUgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfQkVHSU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAogIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgX1ByYWdtYSAoIkdDQyBk aWFnbm9zdGljIGlnbm9yZWQgXCItV251bGwtZGVyZWZlcmVuY2VcIiIpCiMgZGVmaW5lIFlZX0lH Tk9SRV9OVUxMX0RFUkVGRVJFTkNFX0VORCAgICAgICAgIFwKICBfUHJhZ21hICgiR0NDIGRpYWdu b3N0aWMgcG9wIikKI2Vsc2UKIyBkZWZpbmUgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfQkVH SU4KIyBkZWZpbmUgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfRU5ECiNlbmRpZgoKIyBpZm5k ZWYgWVlfTlVMTFBUUgojICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCiMgICBpZiAyMDExMDNMIDw9 IF9fY3BsdXNwbHVzCiMgICAgZGVmaW5lIFlZX05VTExQVFIgbnVsbHB0cgojICAgZWxzZQojICAg IGRlZmluZSBZWV9OVUxMUFRSIDAKIyAgIGVuZGlmCiMgIGVsc2UKIyAgIGRlZmluZSBZWV9OVUxM UFRSICgodm9pZCopMCkKIyAgZW5kaWYKIyBlbmRpZgojIGlmbmRlZiBZWV9DQVNUCiMgIGlmZGVm IF9fY3BsdXNwbHVzCiMgICBkZWZpbmUgWVlfQ0FTVChUeXBlLCBWYWwpIHN0YXRpY19jYXN0PFR5 cGU+IChWYWwpCiMgICBkZWZpbmUgWVlfUkVJTlRFUlBSRVRfQ0FTVChUeXBlLCBWYWwpIHJlaW50 ZXJwcmV0X2Nhc3Q8VHlwZT4gKFZhbCkKIyAgZWxzZQojICAgZGVmaW5lIFlZX0NBU1QoVHlwZSwg VmFsKSAoKFR5cGUpIChWYWwpKQojICAgZGVmaW5lIFlZX1JFSU5URVJQUkVUX0NBU1QoVHlwZSwg VmFsKSAoKFR5cGUpIChWYWwpKQojICBlbmRpZgojIGVuZGlmCgovLyBGSVhNRTogVXNlIHRoZSBz YW1lIGNvbnZlbnRpb25zIGFzIGxhbHIxLmNjLgoKI2lmbmRlZiBZWUFTU0VSVAojIGRlZmluZSBZ WUFTU0VSVChDb25kaXRpb24pICgodm9pZCkgKChDb25kaXRpb24pIHx8IChhYm9ydCAoKSwgMCkp KQojZW5kaWYKCiNpZmRlZiBZWURFQlVHCiMgZGVmaW5lIFlZREFTU0VSVChDb25kaXRpb24pIFlZ QVNTRVJUKENvbmRpdGlvbikKI2Vsc2UKIyBkZWZpbmUgWVlEQVNTRVJUKENvbmRpdGlvbikKI2Vu ZGlmCgovKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUu ICAqLwojZGVmaW5lIFlZRklOQUwgIDQKLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJM RS4gICovCiNkZWZpbmUgWVlMQVNUICAgMwoKLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJt aW5hbHMuICAqLwojZGVmaW5lIFlZTlRPS0VOUyAgNQovKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5v bnRlcm1pbmFscy4gICovCiNkZWZpbmUgWVlOTlRTICA0Ci8qIFlZTlJVTEVTIC0tIE51bWJlciBv ZiBydWxlcy4gICovCiNkZWZpbmUgWVlOUlVMRVMgIDUKLyogWVlOU1RBVEVTIC0tIE51bWJlciBv ZiBzdGF0ZXMuICAqLwojZGVmaW5lIFlZTlNUQVRFUyAgNwovKiBZWU1BWFJIUyAtLSBNYXhpbXVt IG51bWJlciBvZiBzeW1ib2xzIG9uIHJpZ2h0LWhhbmQgc2lkZSBvZiBydWxlLiAgKi8KI2RlZmlu ZSBZWU1BWFJIUyAyCi8qIFlZTUFYTEVGVCAtLSBNYXhpbXVtIG51bWJlciBvZiBzeW1ib2xzIHRv IHRoZSBsZWZ0IG9mIGEgaGFuZGxlCiAgIGFjY2Vzc2VkIGJ5ICQwLCAkLTEsIGV0Yy4sIGluIGFu eSBydWxlLiAgKi8KI2RlZmluZSBZWU1BWExFRlQgMAoKbmFtZXNwYWNlCnsKI2lmIFlZREVCVUcK ICAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdh cyBkZWZpbmVkLiAgKi8KICBjb25zdCBzaWduZWQgY2hhciB5eXJsaW5lW10gPQogIHsKICAgICAg IDAsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDMwLCAgICAzMQogIH07CiNlbmRpZgoKI2RlZmlu ZSBZWVBBQ1RfTklORiAtNQojZGVmaW5lIFlZVEFCTEVfTklORiAtNQoKICAvLyBZWVBBQ1RbU1RB VEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKLy8g U1RBVEUtTlVNLgogIGNvbnN0IHNpZ25lZCBjaGFyIHl5cGFjdFtdID0KICB7CiAgICAgIC00LCAg ICAgMSwgICAgLTIsICAgIC0xLCAgICAtNSwgICAgLTUsICAgIC01CiAgfTsKCiAgLy8gWVlERUZB Q1RbU1RBVEUtTlVNXSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUt TlVNLgovLyBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXMgbm90IHNwZWNpZnkgc29tZXRoaW5n IGVsc2UgdG8gZG8uICBaZXJvCi8vIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLgogIGNv bnN0IHNpZ25lZCBjaGFyIHl5ZGVmYWN0W10gPQogIHsKICAgICAgIDQsICAgICAwLCAgICAgMCwg ICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMKICB9OwoKICAvLyBZWVBHT1RPW05URVJNLU5VTV0u CiAgY29uc3Qgc2lnbmVkIGNoYXIgeXlwZ290b1tdID0KICB7CiAgICAgIC01LCAgICAtNSwgICAg LTUsICAgIC01CiAgfTsKCiAgLy8gWVlERUZHT1RPW05URVJNLU5VTV0uCiAgY29uc3Qgc2lnbmVk IGNoYXIgeXlkZWZnb3RvW10gPQogIHsKICAgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMKICB9 OwoKICAvLyBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXSAtLSBXaGF0IHRvIGRvIGluIHN0YXRl IFNUQVRFLU5VTS4gIElmCi8vIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRp dmUsIHJlZHVjZSB0aGUgcnVsZSB3aG9zZQovLyBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYg WVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuCiAgY29uc3Qgc2lnbmVkIGNoYXIgeXl0YWJsZVtd ID0KICB7CiAgICAgIC00LCAgICAgNCwgICAgIDUsICAgICA2CiAgfTsKCiAgY29uc3Qgc2lnbmVk IGNoYXIgeXljaGVja1tdID0KICB7CiAgICAgICA0LCAgICAgMCwgICAgIDQsICAgICA0CiAgfTsK CiAgLy8gWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIHN5bWJvbCBraW5kIG9mIHRoZSBhY2Nlc3Np bmcgc3ltYm9sIG9mCi8vIHN0YXRlIFNUQVRFLU5VTS4KICBjb25zdCBzaWduZWQgY2hhciB5eXN0 b3NbXSA9CiAgewogICAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDAsICAgICA0LCAg ICAgNAogIH07CgogIC8vIFlZUjFbUlVMRS1OVU1dIC0tIFN5bWJvbCBraW5kIG9mIHRoZSBsZWZ0 LWhhbmQgc2lkZSBvZiBydWxlIFJVTEUtTlVNLgogIGNvbnN0IHNpZ25lZCBjaGFyIHl5cjFbXSA9 CiAgewogICAgICAgMCwgICAgIDUsICAgICA2LCAgICAgNiwgICAgIDcsICAgICA4CiAgfTsKCiAg Ly8gWVlSMltSVUxFLU5VTV0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIHJpZ2h0LWhhbmQg c2lkZSBvZiBydWxlIFJVTEUtTlVNLgogIGNvbnN0IHNpZ25lZCBjaGFyIHl5cjJbXSA9CiAgewog ICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAwCiAgfTsKCgogIC8qIFlZ RFBSRUNbUlVMRS1OVU1dIC0tIER5bmFtaWMgcHJlY2VkZW5jZSBvZiBydWxlICNSVUxFLU5VTSAo MCBpZiBub25lKS4gICovCiAgY29uc3Qgc2lnbmVkIGNoYXIgeXlkcHJlY1tdID0KICB7CiAgICAg ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAKICB9OwoKICAvKiBZWU1FUkdF UltSVUxFLU5VTV0gLS0gSW5kZXggb2YgbWVyZ2luZyBmdW5jdGlvbiBmb3IgcnVsZSAjUlVMRS1O VU0uICAqLwogIGNvbnN0IHNpZ25lZCBjaGFyIHl5bWVyZ2VyW10gPQogIHsKICAgICAgIDAsICAg ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMAogIH07CgogIC8qIFlZSU1NRURJQVRFW1JV TEUtTlVNXSAtLSBUcnVlIGlmZiBydWxlICNSVUxFLU5VTSBpcyBub3QgdG8gYmUgZGVmZXJyZWQs IGFzCiAgICAgaW4gdGhlIGNhc2Ugb2YgcHJlZGljYXRlcy4gICovCiAgY29uc3QgYm9vbCB5eWlt bWVkaWF0ZVtdID0KICB7CiAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg IDAKICB9OwoKICAvKiBZWUNPTkZMUFtZWVBBQ1RbU1RBVEUtTlVNXV0gLS0gUG9pbnRlciBpbnRv IFlZQ09ORkwgb2Ygc3RhcnQgb2YKICAgICBsaXN0IG9mIGNvbmZsaWN0aW5nIHJlZHVjdGlvbnMg Y29ycmVzcG9uZGluZyB0byBhY3Rpb24gZW50cnkgZm9yCiAgICAgc3RhdGUgU1RBVEUtTlVNIGlu IHl5dGFibGUuICAwIG1lYW5zIG5vIGNvbmZsaWN0cy4gIFRoZSBsaXN0IGluCiAgICAgeXljb25m bCBpcyB0ZXJtaW5hdGVkIGJ5IGEgcnVsZSBudW1iZXIgb2YgMC4gICovCiAgY29uc3Qgc2lnbmVk IGNoYXIgeXljb25mbHBbXSA9CiAgewogICAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMAogIH07 CgogIC8qIFlZQ09ORkxbSV0gLS0gbGlzdHMgb2YgY29uZmxpY3RpbmcgcnVsZSBudW1iZXJzLCBl YWNoIHRlcm1pbmF0ZWQgYnkKICAgICAwLCBwb2ludGVkIGludG8gYnkgWVlDT05GTFAuICAqLwog ICAgICAgIGNvbnN0IHNob3J0IHl5Y29uZmxbXSA9CiAgewogICAgICAgMCwgICAgIDUsICAgICAw CiAgfTsKfSAvLyBuYW1lc3BhY2UKCgovKiBFcnJvciB0b2tlbiBudW1iZXIgKi8KI2RlZmluZSBZ WVRFUlJPUiAxCgoKCmVudW0gWVlSRVNVTFRUQUcgeyB5eW9rLCB5eWFjY2VwdCwgeXlhYm9ydCwg eXllcnIgfTsKCiNkZWZpbmUgWVlDSEsoWVlFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg WVlSRVNVTFRUQUcgeXljaGtfZmxhZyA9IFlZRTsgICAgICAgICAgICAgICBcCiAgICBpZiAoeXlj aGtfZmxhZyAhPSB5eW9rKSAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgcmV0dXJuIHl5Y2hr X2ZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgXAogIH0gd2hpbGUgKGZhbHNlKQoKI2lmIFlZ REVCVUcKCiNkZWZpbmUgWVlDREVCVUcgaWYgKCF5eWRlYnVnKSB7fSBlbHNlIHN0ZDo6Y2VycgoK IyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBLaW5kLCBWYWx1ZSwgTG9jYXRpb24pICAg ICAgICAgICAgICAgICAgXAogIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBpZiAoeXlkZWJ1ZykgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAogICAgICAgIHN0ZDo6Y2VyciA8PCBUaXRsZSA8PCAnICc7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgeXlwYXJzZXIueXlfc3ltYm9sX3By aW50XyAoS2luZCwgVmFsdWUpOyBcCiAgICAgICAgc3RkOjpjZXJyIDw8ICdcbic7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog IH0gd2hpbGUgKGZhbHNlKQoKIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKEFyZ3MpICAgICAgICAg ICAgICAgICAgXAogIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCiAgICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg ICAgeXlzdGF0ZVN0YWNrLnl5X3JlZHVjZV9wcmludCBBcmdzOyAgICAgICAgXAogIH0gd2hpbGUg KGZhbHNlKQoKLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQg dW5pbml0aWFsaXplZCBzbyB0aGF0CiAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAq LwppbnQgeXlkZWJ1ZzsKCm5hbWVzcGFjZQp7CiAgdXNpbmcgZ2xyX3N0YWNrID0geXk6OnBhcnNl cjo6Z2xyX3N0YWNrOwogIHVzaW5nIGdscl9zdGF0ZSA9IHl5OjpwYXJzZXI6Omdscl9zdGF0ZTsK CiAgdm9pZCB5eXBzdGFjayAoY29uc3QgZ2xyX3N0YWNrJiB5eXN0YWNrLCBzaXplX3QgeXlrKQog ICAgWVlfQVRUUklCVVRFX1VOVVNFRDsKICB2b2lkIHl5cGR1bXBzdGFjayAoY29uc3QgZ2xyX3N0 YWNrJiB5eXN0YWNrKQogICAgWVlfQVRUUklCVVRFX1VOVVNFRDsKfQoKI2Vsc2UgLyogIVlZREVC VUcgKi8KCiMgZGVmaW5lIFlZQ0RFQlVHIGlmICh0cnVlKSB7fSBlbHNlIHN0ZDo6Y2VycgojIGRl ZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIEtpbmQsIFZhbHVlLCBMb2NhdGlvbikge30KIyBk ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKEFyZ3MpIHt9CgojZW5kaWYgLyogIVlZREVCVUcgKi8KCi8q IFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8K I2lmbmRlZiBZWUlOSVRERVBUSAojIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKI2VuZGlmCgovKiBZ WU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3Rp dmUgb25seQogICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2Vk KS4KCiAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUg dW5kZWZpbmVkIGlmCiAgIFNJWkVfTUFYIDwgWVlNQVhERVBUSCAqIHNpemVvZiAoR0xSU3RhY2tJ dGVtKQogICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1l dGljLiAgKi8KCiNpZm5kZWYgWVlNQVhERVBUSAojIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCiNl bmRpZgoKLyogTWluaW11bSBudW1iZXIgb2YgZnJlZSBpdGVtcyBvbiB0aGUgc3RhY2sgYWxsb3dl ZCBhZnRlciBhbgogICBhbGxvY2F0aW9uLiAgVGhpcyBpcyB0byBhbGxvdyBhbGxvY2F0aW9uIGFu ZCBpbml0aWFsaXphdGlvbgogICB0byBiZSBjb21wbGV0ZWQgYnkgZnVuY3Rpb25zIHRoYXQgY2Fs bCB5eWV4cGFuZEdMUlN0YWNrIGJlZm9yZSB0aGUKICAgc3RhY2sgaXMgZXhwYW5kZWQsIHRodXMg aW5zdXJpbmcgdGhhdCBhbGwgbmVjZXNzYXJ5IHBvaW50ZXJzIGdldAogICBwcm9wZXJseSByZWRp cmVjdGVkIHRvIG5ldyBkYXRhLiAgKi8KI2RlZmluZSBZWUhFQURST09NIDIKCiNpZm5kZWYgWVlT VEFDS0VYUEFOREFCTEUKIyBkZWZpbmUgWVlTVEFDS0VYUEFOREFCTEUgMQojZW5kaWYKCm5hbWVz cGFjZQp7CiAgdGVtcGxhdGUgPHR5cGVuYW1lIFBhcmFtZXRlcj4KICBjbGFzcyBzdHJvbmdfaW5k ZXhfYWxpYXMKICB7CiAgcHVibGljOgogICAgc3RhdGljIHN0cm9uZ19pbmRleF9hbGlhcyBjcmVh dGUgKHN0ZDo6cHRyZGlmZl90IHZhbHVlKQogICAgewogICAgICBzdHJvbmdfaW5kZXhfYWxpYXMg cmVzdWx0OwogICAgICByZXN1bHQudmFsdWVfID0gdmFsdWU7CiAgICAgIHJldHVybiByZXN1bHQ7 CiAgICB9CgogICAgc3RkOjpwdHJkaWZmX3QgY29uc3QmIGdldCAoKSBjb25zdCB7IHJldHVybiB2 YWx1ZV87IH0KCiAgICBzaXplX3QgdWdldCAoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxz aXplX3Q+ICh2YWx1ZV8pOyB9CgogICAgc3Ryb25nX2luZGV4X2FsaWFzIG9wZXJhdG9yKyAoc3Rk OjpwdHJkaWZmX3Qgb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiBzdHJvbmdfaW5kZXhf YWxpYXMgKGdldCAoKSArIG90aGVyKTsKICAgIH0KCiAgICB2b2lkIG9wZXJhdG9yKz0gKHN0ZDo6 cHRyZGlmZl90IG90aGVyKQogICAgewogICAgICB2YWx1ZV8gKz0gb3RoZXI7CiAgICB9CgogICAg c3Ryb25nX2luZGV4X2FsaWFzIG9wZXJhdG9yLSAoc3RkOjpwdHJkaWZmX3Qgb3RoZXIpCiAgICB7 CiAgICAgIHJldHVybiBzdHJvbmdfaW5kZXhfYWxpYXMgKGdldCAoKSAtIG90aGVyKTsKICAgIH0K CiAgICB2b2lkIG9wZXJhdG9yLT0gKHN0ZDo6cHRyZGlmZl90IG90aGVyKQogICAgewogICAgICB2 YWx1ZV8gLT0gb3RoZXI7CiAgICB9CgogICAgc2l6ZV90IG9wZXJhdG9yLSAoc3Ryb25nX2luZGV4 X2FsaWFzIG90aGVyKQogICAgewogICAgICByZXR1cm4gc3Ryb25nX2luZGV4X2FsaWFzIChnZXQg KCkgLSBvdGhlci5nZXQgKCkpOwogICAgfQoKICAgIHN0cm9uZ19pbmRleF9hbGlhcyYgb3BlcmF0 b3IrKyAoKQogICAgewogICAgICArK3ZhbHVlXzsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICAgIGJvb2wgaXNWYWxpZCAoKSBjb25zdAogICAgewogICAgICByZXR1cm4gdmFsdWVfICE9IElO VkFMSURfSU5ERVg7CiAgICB9CgogICAgdm9pZCBzZXRJbnZhbGlkKCkKICAgIHsKICAgICAgdmFs dWVfID0gSU5WQUxJRF9JTkRFWDsKICAgIH0KCiAgICBib29sIG9wZXJhdG9yPT0gKHN0cm9uZ19p bmRleF9hbGlhcyBvdGhlcikKICAgIHsKICAgICAgcmV0dXJuIGdldCAoKSA9PSBvdGhlci5nZXQg KCk7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvciE9IChzdHJvbmdfaW5kZXhfYWxpYXMgb3RoZXIp CiAgICB7CiAgICAgIHJldHVybiBnZXQgKCkgIT0gb3RoZXIuZ2V0ICgpOwogICAgfQoKICAgIGJv b2wgb3BlcmF0b3I8IChzdHJvbmdfaW5kZXhfYWxpYXMgb3RoZXIpCiAgICB7CiAgICAgIHJldHVy biBnZXQgKCkgPCBvdGhlci5nZXQgKCk7CiAgICB9CgogIHByaXZhdGU6CiAgICBzdGF0aWMgY29u c3Qgc3RkOjpwdHJkaWZmX3QgSU5WQUxJRF9JTkRFWDsKCiAgICAvLyBXQVJOSU5HOiAwLWluaXRp YWxpemVkLgogICAgc3RkOjpwdHJkaWZmX3QgdmFsdWVfOwogIH07IC8vIGNsYXNzIHN0cm9uZ19p bmRleF9hbGlhcwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogIGNvbnN0IHN0ZDo6cHRyZGlmZl90 IHN0cm9uZ19pbmRleF9hbGlhczxUPjo6SU5WQUxJRF9JTkRFWCA9CiAgICBzdGQ6Om51bWVyaWNf bGltaXRzPHN0ZDo6cHRyZGlmZl90Pjo6bWF4ICgpOwoKICB1c2luZyBzdGF0ZV9zZXRfaW5kZXgg PSBzdHJvbmdfaW5kZXhfYWxpYXM8c3RydWN0IGdscl9zdGF0ZV9zZXRfdGFnPjsKCiAgc3RhdGVf c2V0X2luZGV4IGNyZWF0ZV9zdGF0ZV9zZXRfaW5kZXggKHN0ZDo6cHRyZGlmZl90IHZhbHVlKQog IHsKICAgIHJldHVybiBzdGF0ZV9zZXRfaW5kZXg6OmNyZWF0ZSAodmFsdWUpOwogIH0KCiAgLyoq IFN0YXRlIG51bWJlcnMsIGFzIGluIExBTFIoMSkgbWFjaGluZSAqLwogIHVzaW5nIHN0YXRlX251 bSA9IGludDsKCiAgLyoqIFJ1bGUgbnVtYmVycywgYXMgaW4gTEFMUigxKSBtYWNoaW5lICovCiAg dXNpbmcgcnVsZV9udW0gPSBpbnQ7CgogIHVzaW5nIHBhcnNlcl90eXBlID0geXk6OnBhcnNlcjsK ICB1c2luZyBnbHJfc3RhdGUgPSBwYXJzZXJfdHlwZTo6Z2xyX3N0YXRlOwogIHVzaW5nIHN5bWJv bF9raW5kID0gcGFyc2VyX3R5cGU6OnN5bWJvbF9raW5kOwogIHVzaW5nIHN5bWJvbF9raW5kX3R5 cGUgPSBwYXJzZXJfdHlwZTo6c3ltYm9sX2tpbmRfdHlwZTsKICB1c2luZyBzeW1ib2xfdHlwZSA9 IHBhcnNlcl90eXBlOjpzeW1ib2xfdHlwZTsKICB1c2luZyB2YWx1ZV90eXBlID0gcGFyc2VyX3R5 cGU6OnZhbHVlX3R5cGU7CgogIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgogIGNsYXNzIGdscl9z dGFja19pdGVtOwogIGNsYXNzIHNlbWFudGljX29wdGlvbjsKfSAvLyBuYW1lc3BhY2UKCm5hbWVz cGFjZQp7CiAgLyoqIEFjY2Vzc2luZyBzeW1ib2wgb2Ygc3RhdGUgWVlTVEFURS4gICovCiAgaW5s aW5lIHN5bWJvbF9raW5kX3R5cGUKICB5eV9hY2Nlc3Npbmdfc3ltYm9sIChzdGF0ZV9udW0geXlz dGF0ZSkKICB7CiAgICByZXR1cm4gWVlfQ0FTVCAoc3ltYm9sX2tpbmRfdHlwZSwgeXlzdG9zW3l5 c3RhdGVdKTsKICB9CgogIC8qKiBMZWZ0LWhhbmQtc2lkZSBzeW1ib2wgZm9yIHJ1bGUgI1lZUlVM RS4gICovCiAgaW5saW5lIHN5bWJvbF9raW5kX3R5cGUKICB5eWxoc05vbnRlcm0gKHJ1bGVfbnVt IHl5cnVsZSkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c3ltYm9sX2tpbmRfdHlwZT4oeXly MVt5eXJ1bGVdKTsKICB9CgogIC8qKiBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgdGhlIHJp Z2h0IGhhbmQgc2lkZSBvZiBydWxlICNSVUxFLiAgKi8KICBpbmxpbmUgaW50CiAgeXlyaHNMZW5n dGggKHJ1bGVfbnVtIHl5cnVsZSkKICB7CiAgICByZXR1cm4geXlyMlt5eXJ1bGVdOwogIH0KfQoK bmFtZXNwYWNlIHl5CnsKICBjbGFzcyBwYXJzZXI6Omdscl9zdGF0ZQogIHsKICBwdWJsaWM6CiAg ICBnbHJfc3RhdGUgKCkKICAgICAgOiB5eXJlc29sdmVkIChmYWxzZSkKICAgICAgLCB5eWxyU3Rh dGUgKDApCiAgICAgICwgeXlwb3NuICgwKQogICAgICAsIHl5cHJlZCAoMCkKICAgICAgLCB5eWZp cnN0VmFsICgwKQogICAgICAsIG1hZ2ljXyAoTUFHSUMpCiAgICB7fQoKICAgIC8vLyBCdWlsZCB3 aXRoIGEgc2VtYW50aWMgdmFsdWUuCiAgICBnbHJfc3RhdGUgKHN0YXRlX251bSBsclN0YXRlLCBz aXplX3QgcG9zbiwgY29uc3QgdmFsdWVfdHlwZSYgdmFsKQogICAgICA6IHl5cmVzb2x2ZWQgKHRy dWUpCiAgICAgICwgeXlsclN0YXRlIChsclN0YXRlKQogICAgICAsIHl5cG9zbiAocG9zbikKICAg ICAgLCB5eXByZWQgKDApCiAgICAgICwgeXl2YWwgKHZhbCkKICAgICAgLCBtYWdpY18gKE1BR0lD KQogICAge30KCiAgICAvLy8gQnVpbGQgd2l0aCBhIHNlbWFudGljIG9wdGlvbi4KICAgIGdscl9z dGF0ZSAoc3RhdGVfbnVtIGxyU3RhdGUsIHNpemVfdCBwb3NuKQogICAgICA6IHl5cmVzb2x2ZWQg KGZhbHNlKQogICAgICAsIHl5bHJTdGF0ZSAobHJTdGF0ZSkKICAgICAgLCB5eXBvc24gKHBvc24p CiAgICAgICwgeXlwcmVkICgwKQogICAgICAsIHl5Zmlyc3RWYWwgKDApCiAgICAgICwgbWFnaWNf IChNQUdJQykKICAgIHt9CgogICAgZ2xyX3N0YXRlIChjb25zdCBnbHJfc3RhdGUmIG90aGVyKQog ICAgICA6IHl5cmVzb2x2ZWQgKG90aGVyLnl5cmVzb2x2ZWQpCiAgICAgICwgeXlsclN0YXRlIChv dGhlci55eWxyU3RhdGUpCiAgICAgICwgeXlwb3NuIChvdGhlci55eXBvc24pCiAgICAgICwgeXlw cmVkICgwKQogICAgICAsIG1hZ2ljXyAoTUFHSUMpCiAgICB7CiAgICAgIHNldFByZWQgKG90aGVy LnByZWQgKCkpOwogICAgICBpZiAob3RoZXIueXlyZXNvbHZlZCkKICAgICAgICBuZXcgKCZ5eXZh bCkgdmFsdWVfdHlwZSAob3RoZXIudmFsdWUgKCkpOwogICAgICBlbHNlCiAgICAgICAgewogICAg ICAgICAgeXlmaXJzdFZhbCA9IDA7CiAgICAgICAgICBzZXRGaXJzdFZhbCAob3RoZXIuZmlyc3RW YWwgKCkpOwogICAgICAgIH0KICAgICAgY2hlY2tfKCk7CiAgICB9CgogICAgfmdscl9zdGF0ZSAo KQogICAgewogICAgICBjaGVja18gKCk7CiAgICAgIGlmICh5eXJlc29sdmVkKQogICAgICAgIHsK ICAgICAgICAgIHl5dmFsLn52YWx1ZV90eXBlICgpOwogICAgICAgIH0KICAgICAgbWFnaWNfID0g MDsKICAgIH0KCiAgICBnbHJfc3RhdGUmIG9wZXJhdG9yPSAoY29uc3QgZ2xyX3N0YXRlJiBvdGhl cikKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAgICBvdGhlci5jaGVja18gKCk7CiAgICAgIGlm ICgheXlyZXNvbHZlZCAmJiBvdGhlci55eXJlc29sdmVkKQogICAgICAgIG5ldyAoJnl5dmFsKSB2 YWx1ZV90eXBlOwogICAgICB5eXJlc29sdmVkID0gb3RoZXIueXlyZXNvbHZlZDsKICAgICAgeXls clN0YXRlID0gb3RoZXIueXlsclN0YXRlOwogICAgICB5eXBvc24gPSBvdGhlci55eXBvc247CiAg ICAgIHNldFByZWQgKG90aGVyLnByZWQgKCkpOwogICAgICBpZiAob3RoZXIueXlyZXNvbHZlZCkK ICAgICAgICB2YWx1ZSAoKSA9IG90aGVyLnZhbHVlICgpOwogICAgICBlbHNlCiAgICAgICAgc2V0 Rmlyc3RWYWwgKG90aGVyLmZpcnN0VmFsICgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICAgIC8qKiBUeXBlIHRhZyBmb3IgdGhlIHNlbWFudGljIHZhbHVlLiAgSWYgdHJ1ZSwgeXl2YWwg YXBwbGllcywgb3RoZXJ3aXNlCiAgICAgKiAgeXlmaXJzdFZhbCBhcHBsaWVzLiAgKi8KICAgIGJv b2wgeXlyZXNvbHZlZDsKICAgIC8qKiBOdW1iZXIgb2YgY29ycmVzcG9uZGluZyBMQUxSKDEpIG1h Y2hpbmUgc3RhdGUuICAqLwogICAgc3RhdGVfbnVtIHl5bHJTdGF0ZTsKICAgIC8qKiBTb3VyY2Ug cG9zaXRpb24gb2YgdGhlIGxhc3QgdG9rZW4gcHJvZHVjZWQgYnkgbXkgc3ltYm9sICovCiAgICBz aXplX3QgeXlwb3NuOwoKICAgIC8vLyBPbmx5IGNhbGwgcHJlZCgpIGFuZCBzZXRQcmVkKCkgb24g b2JqZWN0cyBpbiB5eWl0ZW1zLCBub3QgdGVtcG9yYXJpZXMuCiAgICBnbHJfc3RhdGUqIHByZWQg KCk7CiAgICBjb25zdCBnbHJfc3RhdGUqIHByZWQgKCkgY29uc3Q7CiAgICB2b2lkIHNldFByZWQg KGNvbnN0IGdscl9zdGF0ZSogc3RhdGUpOwoKICAgIC8vLyBPbmx5IGNhbGwgZmlyc3RWYWwoKSBh bmQgc2V0Rmlyc3RWYWwoKSBvbiBvYmplY3RzIGluIHl5aXRlbXMsIG5vdAogICAgLy8vIHRlbXBv cmFyaWVzLgogICAgc2VtYW50aWNfb3B0aW9uKiBmaXJzdFZhbCAoKTsKICAgIGNvbnN0IHNlbWFu dGljX29wdGlvbiogZmlyc3RWYWwgKCkgY29uc3Q7CiAgICB2b2lkIHNldEZpcnN0VmFsIChjb25z dCBzZW1hbnRpY19vcHRpb24qIG9wdGlvbik7CgogICAgdmFsdWVfdHlwZSYgdmFsdWUgKCkKICAg IHsKICAgICAgY2hlY2tfICgpOwogICAgICByZXR1cm4geXl2YWw7CiAgICB9CgogICAgY29uc3Qg dmFsdWVfdHlwZSYgdmFsdWUgKCkgY29uc3QKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAgICBy ZXR1cm4geXl2YWw7CiAgICB9CgogICAgdm9pZAogICAgZGVzdHJveSAoY2hhciBjb25zdCAqeXlt c2csIHl5OjpwYXJzZXImIHl5cGFyc2VyKTsKCiAgICAvKiBERUJVR0dJTkcgT05MWSAqLwogICNp ZiBZWURFQlVHCiAgICB2b2lkIHl5X3l5cHN0YWNrICgpIGNvbnN0CiAgICB7CiAgICAgIGNoZWNr XyAoKTsKICAgICAgaWYgKHByZWQgKCkgIT0gWVlfTlVMTFBUUikKICAgICAgICB7CiAgICAgICAg ICBwcmVkICgpLT55eV95eXBzdGFjayAoKTsKICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiIC0+ICI7 CiAgICAgICAgfQogICAgICBzdGQ6OmNlcnIgPDwgeXlsclN0YXRlIDw8ICJAIiA8PCB5eXBvc247 CiAgICB9CiAgI2VuZGlmCgogICAgc3RkOjpwdHJkaWZmX3QgaW5kZXhJbiAoY29uc3QgZ2xyX3N0 YWNrX2l0ZW0qIGFycmF5KSBjb25zdCBZWV9BVFRSSUJVVEVfVU5VU0VEOwoKICAgIGdscl9zdGFj a19pdGVtKiBhc0l0ZW0gKCkKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAgICByZXR1cm4gYXNJ dGVtKHRoaXMpOwogICAgfQoKICAgIGNvbnN0IGdscl9zdGFja19pdGVtKiBhc0l0ZW0gKCkgY29u c3QKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAgICByZXR1cm4gYXNJdGVtICh0aGlzKTsKICAg IH0KCiAgcHJpdmF0ZToKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgc3RhdGljIGNvbnN0 IGdscl9zdGFja19pdGVtKiBhc0l0ZW0gKGNvbnN0IFQqIHN0YXRlKQogICAgewogICAgICByZXR1 cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBnbHJfc3RhY2tfaXRlbSo+KHN0YXRlKTsKICAgIH0K ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgc3RhdGljIGdscl9zdGFja19pdGVtKiBhc0l0 ZW0gKFQqIHN0YXRlKQogICAgewogICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnbHJfc3Rh Y2tfaXRlbSo+IChzdGF0ZSk7CiAgICB9CiAgICBzdGF0aWMgY29uc3QgY2hhciAqYXNfcG9pbnRl cl8gKGNvbnN0IGdscl9zdGF0ZSAqc3RhdGUpCiAgICB7CiAgICAgIHJldHVybiByZWludGVycHJl dF9jYXN0PGNvbnN0IGNoYXIgKj4gKHN0YXRlKTsKICAgIH0KICAgIHN0YXRpYyBjaGFyICphc19w b2ludGVyXyAoZ2xyX3N0YXRlICpzdGF0ZSkKICAgIHsKICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0 X2Nhc3Q8Y2hhciAqPiAoc3RhdGUpOwogICAgfQogICAgLyoqIFByZWNlZGluZyBzdGF0ZSBpbiB0 aGlzIHN0YWNrICovCiAgICBzdGQ6OnB0cmRpZmZfdCB5eXByZWQ7CiAgICB1bmlvbiB7CiAgICAg IC8qKiBGaXJzdCBpbiBhIGNoYWluIG9mIGFsdGVybmF0aXZlIHJlZHVjdGlvbnMgcHJvZHVjaW5n IHRoZQogICAgICAgKiAgbm9udGVybWluYWwgY29ycmVzcG9uZGluZyB0byB0aGlzIHN0YXRlLCB0 aHJlYWRlZCB0aHJvdWdoCiAgICAgICAqICB5eWZpcnN0VmFsLiAgVmFsdWUgIjAiIG1lYW5zIGVt cHR5LiAgKi8KICAgICAgc3RkOjpwdHJkaWZmX3QgeXlmaXJzdFZhbDsKICAgICAgLyoqIFNlbWFu dGljIHZhbHVlIGZvciB0aGlzIHN0YXRlLiAgKi8KICAgICAgdmFsdWVfdHlwZSB5eXZhbDsKICAg IH07CgoKICBwdWJsaWM6CiAgICAvLyBDaGVjayBpbnZhcmlhbnRzLgogICAgdm9pZCBjaGVja18g KCkgY29uc3QKICAgIHsKICAgICAgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfQkVHSU4KICAg ICAgWVlBU1NFUlQgKHRoaXMtPm1hZ2ljXyA9PSBNQUdJQyk7CiAgICAgIFlZX0lHTk9SRV9OVUxM X0RFUkVGRVJFTkNFX0VORAogICAgfQoKICAgIC8vIEEgbWFnaWMgbnVtYmVyIHRvIGNoZWNrIG91 ciBwb2ludGVyIGFyaXRobWV0aWMgaXMgc2FuZS4KICAgIGVudW0geyBNQUdJQyA9IDcxMzcwNSB9 OwogICAgdW5zaWduZWQgaW50IG1hZ2ljXzsKICB9OyAvLyBjbGFzcyBwYXJzZXI6Omdscl9zdGF0 ZQp9IC8vIG5hbWVzcGFjZSB5eQoKCm5hbWVzcGFjZQp7CiAgLyoqIEEgc3RhY2sgb2YgR0xSU3Rh dGUgcmVwcmVzZW50aW5nIHRoZSBkaWZmZXJlbnQgaGVhZHMgZHVyaW5nCiAgICAqIG5vbmRldGVy bWluaXN0aWMgZXZhbHVhdGlvbi4gKi8KICBjbGFzcyBnbHJfc3RhdGVfc2V0CiAgewogIHB1Ymxp YzoKICAgIC8qKiBJbml0aWFsaXplIFlZU0VUIHRvIGEgc2luZ2xldG9uIHNldCBjb250YWluaW5n IGFuIGVtcHR5IHN0YWNrLiAgKi8KICAgIGdscl9zdGF0ZV9zZXQgKCkKICAgICAgOiB5eWxhc3RE ZWxldGVkIChZWV9OVUxMUFRSKQogICAgewogICAgICB5eXN0YXRlcy5wdXNoX2JhY2sgKFlZX05V TExQVFIpOwogICAgICB5eWxvb2thaGVhZE5lZWRzLnB1c2hfYmFjayAoZmFsc2UpOwogICAgfQoK ICAgIC8vIEJlaGF2ZSBsaWtlIGEgdmVjdG9yIG9mIHN0YXRlcy4KICAgIGdscl9zdGF0ZSomIG9w ZXJhdG9yW10gKHN0YXRlX3NldF9pbmRleCBpbmRleCkKICAgIHsKICAgICAgcmV0dXJuIHl5c3Rh dGVzW2luZGV4LnVnZXQoKV07CiAgICB9CgogICAgZ2xyX3N0YXRlKiBvcGVyYXRvcltdIChzdGF0 ZV9zZXRfaW5kZXggaW5kZXgpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiB5eXN0YXRlc1tpbmRl eC51Z2V0KCldOwogICAgfQoKICAgIHNpemVfdCBzaXplICgpIGNvbnN0CiAgICB7CiAgICAgIHJl dHVybiB5eXN0YXRlcy5zaXplICgpOwogICAgfQoKICAgIHN0ZDo6dmVjdG9yPGdscl9zdGF0ZSo+ OjppdGVyYXRvciBiZWdpbiAoKQogICAgewogICAgICByZXR1cm4geXlzdGF0ZXMuYmVnaW4gKCk7 CiAgICB9CgogICAgc3RkOjp2ZWN0b3I8Z2xyX3N0YXRlKj46Oml0ZXJhdG9yIGVuZCAoKQogICAg ewogICAgICByZXR1cm4geXlzdGF0ZXMuZW5kICgpOwogICAgfQoKICAgIGJvb2wgbG9va2FoZWFk TmVlZHMgKHN0YXRlX3NldF9pbmRleCBpbmRleCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHl5 bG9va2FoZWFkTmVlZHNbaW5kZXgudWdldCAoKV07CiAgICB9CgogICAgYm9vbCBzZXRMb29rYWhl YWROZWVkcyAoc3RhdGVfc2V0X2luZGV4IGluZGV4LCBib29sIHZhbHVlKQogICAgewogICAgICBy ZXR1cm4geXlsb29rYWhlYWROZWVkc1tpbmRleC51Z2V0ICgpXSA9IHZhbHVlOwogICAgfQoKICAg IC8qKiBJbnZhbGlkYXRlIHN0YWNrICNZWUsuICAqLwogICAgdm9pZAogICAgeXltYXJrU3RhY2tE ZWxldGVkIChzdGF0ZV9zZXRfaW5kZXggeXlrKQogICAgewogICAgICBzaXplX3QgayA9IHl5ay51 Z2V0ICgpOwogICAgICBpZiAoeXlzdGF0ZXNba10gIT0gWVlfTlVMTFBUUikKICAgICAgICB5eWxh c3REZWxldGVkID0geXlzdGF0ZXNba107CiAgICAgIHl5c3RhdGVzW2tdID0gWVlfTlVMTFBUUjsK ICAgIH0KCiAgICAvKiogVW5kZWxldGUgdGhlIGxhc3Qgc3RhY2sgaW4gKnRoaXMgdGhhdCB3YXMg bWFya2VkIGFzIGRlbGV0ZWQuICBDYW4KICAgICAgICBvbmx5IGJlIGRvbmUgb25jZSBhZnRlciBh IGRlbGV0aW9uLCBhbmQgb25seSB3aGVuIGFsbCBvdGhlciBzdGFja3MgaGF2ZQogICAgICAgIGJl ZW4gZGVsZXRlZC4gICovCiAgICB2b2lkCiAgICB5eXVuZGVsZXRlTGFzdFN0YWNrICgpCiAgICB7 CiAgICAgIGlmICh5eWxhc3REZWxldGVkID09IFlZX05VTExQVFIgfHwgIXl5c3RhdGVzLmVtcHR5 ICgpKQogICAgICAgIHJldHVybjsKICAgICAgeXlzdGF0ZXMucHVzaF9iYWNrICh5eWxhc3REZWxl dGVkKTsKICAgICAgWVlDREVCVUcgPDwgIlJlc3RvcmluZyBsYXN0IGRlbGV0ZWQgc3RhY2sgYXMg c3RhY2sgIzAuXG4iOwogICAgICBjbGVhckxhc3REZWxldGVkICgpOwogICAgfQoKICAgIC8qKiBS ZW1vdmUgdGhlIGRlYWQgc3RhY2tzICh5eXN0YXRlc1tpXSA9PSBZWV9OVUxMUFRSKSBhbmQgc2hp ZnQgdGhlIGxhdGVyCiAgICAgKiBvbmVzLiAgKi8KICAgIHZvaWQKICAgIHl5cmVtb3ZlRGVsZXRl cyAoKQogICAgewogICAgICBzaXplX3QgbmV3c2l6ZSA9IHl5c3RhdGVzLnNpemUgKCk7CiAgICAg IC8qIGogaXMgdGhlIG51bWJlciBvZiBsaXZlIHN0YWNrcyB3ZSBoYXZlIHNlZW4uICAqLwogICAg ICBmb3IgKHNpemVfdCBpID0gMCwgaiA9IDA7IGogPCBuZXdzaXplOyArK2kpCiAgICAgICAgewog ICAgICAgICAgaWYgKHl5c3RhdGVzW2ldID09IFlZX05VTExQVFIpCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBpZiAoaSA9PSBqKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICBZWUNERUJVRyA8PCAiUmVtb3ZpbmcgZGVhZCBzdGFja3MuXG4iOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIG5ld3NpemUgLT0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxz ZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgeXlzdGF0ZXNbal0gPSB5eXN0YXRlc1tpXTsK ICAgICAgICAgICAgICAvKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgaXQncyB1bm5l Y2Vzc2FyeSB0byBjb3B5CiAgICAgICAgICAgICAgICAgeXlsb29rYWhlYWROZWVkc1tpXSBzaW5j ZSwgYWZ0ZXIKICAgICAgICAgICAgICAgICB5eXJlbW92ZURlbGV0ZXMgcmV0dXJucywgdGhlIHBh cnNlciBpbW1lZGlhdGVseSBlaXRoZXIgZW50ZXJzCiAgICAgICAgICAgICAgICAgZGV0ZXJtaW5p c3RpYyBvcGVyYXRpb24gb3Igc2hpZnRzIGEgdG9rZW4uICBIb3dldmVyLCBpdCBkb2Vzbid0CiAg ICAgICAgICAgICAgICAgaHVydCwgYW5kIHRoZSBjb2RlIG1pZ2h0IGV2b2x2ZSB0byBuZWVkIGl0 LiAgKi8KICAgICAgICAgICAgICB5eWxvb2thaGVhZE5lZWRzW2pdID0geXlsb29rYWhlYWROZWVk c1tpXTsKICAgICAgICAgICAgICBpZiAoaiAhPSBpKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBZWUNERUJVRyA8PCAiUmVuYW1lIHN0YWNrICIgPDwgaSA8PCAiIC0+ICIgPDwg aiA8PCAiLlxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBqICs9IDE7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHl5c3RhdGVzLnJlc2l6ZSAobmV3c2l6ZSk7CiAgICAg IHl5bG9va2FoZWFkTmVlZHMucmVzaXplIChuZXdzaXplKTsKICAgIH0KCgogICAgc3RhdGVfc2V0 X2luZGV4CiAgICB5eXNwbGl0U3RhY2sgKHN0YXRlX3NldF9pbmRleCB5eWspCiAgICB7CiAgICAg IGNvbnN0IHNpemVfdCBrID0geXlrLnVnZXQgKCk7CiAgICAgIHl5c3RhdGVzLnB1c2hfYmFjayAo eXlzdGF0ZXNba10pOwogICAgICB5eWxvb2thaGVhZE5lZWRzLnB1c2hfYmFjayAoeXlsb29rYWhl YWROZWVkc1trXSk7CiAgICAgIHJldHVybiBjcmVhdGVfc3RhdGVfc2V0X2luZGV4IChzdGF0aWNf Y2FzdDxzdGQ6OnB0cmRpZmZfdD4gKHl5c3RhdGVzLnNpemUgKCkgLSAxKSk7CiAgICB9CgogICAg dm9pZCBjbGVhckxhc3REZWxldGVkICgpCiAgICB7CiAgICAgIHl5bGFzdERlbGV0ZWQgPSBZWV9O VUxMUFRSOwogICAgfQoKICBwcml2YXRlOgoKICAgIHN0ZDo6dmVjdG9yPGdscl9zdGF0ZSo+IHl5 c3RhdGVzOwogICAgLyoqIER1cmluZyBub25kZXRlcm1pbmlzdGljIG9wZXJhdGlvbiwgeXlsb29r YWhlYWROZWVkcyB0cmFja3Mgd2hpY2gKICAgICAqICBzdGFja3MgaGF2ZSBhY3R1YWxseSBuZWVk ZWQgdGhlIGN1cnJlbnQgbG9va2FoZWFkLiAgRHVyaW5nIGRldGVybWluaXN0aWMKICAgICAqICBv cGVyYXRpb24sIHl5bG9va2FoZWFkTmVlZHNbMF0gaXMgbm90IG1haW50YWluZWQgc2luY2UgaXQg d291bGQgbWVyZWx5CiAgICAgKiAgZHVwbGljYXRlICF5eWxhLmVtcHR5ICgpLiAgKi8KICAgIHN0 ZDo6dmVjdG9yPGJvb2w+IHl5bG9va2FoZWFkTmVlZHM7CgogICAgLyoqIFRoZSBsYXN0IHN0YWNr IHdlIGludmFsaWRhdGVkLiAgKi8KICAgIGdscl9zdGF0ZSogeXlsYXN0RGVsZXRlZDsKICB9OyAv LyBjbGFzcyBnbHJfc3RhdGVfc2V0Cn0gLy8gbmFtZXNwYWNlCgpuYW1lc3BhY2UKewogIGNsYXNz IHNlbWFudGljX29wdGlvbgogIHsKICBwdWJsaWM6CiAgICBzZW1hbnRpY19vcHRpb24gKCkKICAg ICAgOiB5eXJ1bGUgKDApCiAgICAgICwgeXlzdGF0ZSAoMCkKICAgICAgLCB5eW5leHQgKDApCiAg ICAgICwgeXlsYSAoKQogICAgICAsIG1hZ2ljXyAoTUFHSUMpCiAgICB7fQoKICAgIHNlbWFudGlj X29wdGlvbiAocnVsZV9udW0gcnVsZSkKICAgICAgOiB5eXJ1bGUgKHJ1bGUpCiAgICAgICwgeXlz dGF0ZSAoMCkKICAgICAgLCB5eW5leHQgKDApCiAgICAgICwgeXlsYSAoKQogICAgICAsIG1hZ2lj XyAoTUFHSUMpCiAgICB7fQoKICAgIHNlbWFudGljX29wdGlvbiAoY29uc3Qgc2VtYW50aWNfb3B0 aW9uJiB0aGF0KQogICAgICA6IHl5cnVsZSAodGhhdC55eXJ1bGUpCiAgICAgICwgeXlzdGF0ZSAo dGhhdC55eXN0YXRlKQogICAgICAsIHl5bmV4dCAodGhhdC55eW5leHQpCiAgICAgICwgeXlsYSAo dGhhdC55eWxhKQogICAgICAsIG1hZ2ljXyAoTUFHSUMpCiAgICB7CiAgICAgIHRoYXQuY2hlY2tf ICgpOwogICAgfQoKICAgIC8vIE5lZWRlZCBmb3IgdGhlIGFzc2lnbm1lbnQgaW4geXluZXdTZW1h bnRpY09wdGlvbi4KICAgIHNlbWFudGljX29wdGlvbiYgb3BlcmF0b3I9IChjb25zdCBzZW1hbnRp Y19vcHRpb24mIHRoYXQpCiAgICB7CiAgICAgIGNoZWNrXyAoKTsKICAgICAgdGhhdC5jaGVja18g KCk7CiAgICAgIHl5cnVsZSA9IHRoYXQueXlydWxlOwogICAgICB5eXN0YXRlID0gdGhhdC55eXN0 YXRlOwogICAgICB5eW5leHQgPSB0aGF0Lnl5bmV4dDsKICAgICAgeXlsYSA9IHRoYXQueXlsYTsK ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIC8vLyBPbmx5IGNhbGwgc3RhdGUoKSBhbmQg c2V0U3RhdGUoKSBvbiBvYmplY3RzIGluIHl5aXRlbXMsIG5vdCB0ZW1wb3Jhcmllcy4KICAgIGds cl9zdGF0ZSogc3RhdGUoKTsKICAgIGNvbnN0IGdscl9zdGF0ZSogc3RhdGUoKSBjb25zdDsKICAg IHZvaWQgc2V0U3RhdGUoY29uc3QgZ2xyX3N0YXRlKiBzKTsKCiAgICBjb25zdCBzZW1hbnRpY19v cHRpb24qIG5leHQgKCkgY29uc3QgWVlfQVRUUklCVVRFX1VOVVNFRDsKICAgIHNlbWFudGljX29w dGlvbiogbmV4dCAoKTsKICAgIHZvaWQgc2V0TmV4dCAoY29uc3Qgc2VtYW50aWNfb3B0aW9uKiBz KTsKCiAgICBzdGQ6OnB0cmRpZmZfdCBpbmRleEluIChjb25zdCBnbHJfc3RhY2tfaXRlbSogYXJy YXkpIGNvbnN0IFlZX0FUVFJJQlVURV9VTlVTRUQ7CgogICAgLyoqIFRydWUgaWZmIFlZWTAgYW5k IFlZWTEgcmVwcmVzZW50IGlkZW50aWNhbCBvcHRpb25zIGF0IHRoZSB0b3AgbGV2ZWwuCiAgICAg KiAgVGhhdCBpcywgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgcnVsZSBhcHBsaWVkIHRvIFJIUyBz eW1ib2xzCiAgICAgKiAgdGhhdCBwcm9kdWNlIHRoZSBzYW1lIHRlcm1pbmFsIHN5bWJvbHMuICAq LwogICAgYm9vbAogICAgaXNJZGVudGljYWxUbyAoY29uc3Qgc2VtYW50aWNfb3B0aW9uJiB5eXkx KSBjb25zdAogICAgewogICAgICBjaGVja18gKCk7CiAgICAgIHl5eTEuY2hlY2tfICgpOwogICAg ICBpZiAodGhpcy0+eXlydWxlID09IHl5eTEueXlydWxlKQogICAgICAgIHsKICAgICAgICAgIGNv bnN0IGdscl9zdGF0ZSAqeXlzMCwgKnl5czE7CiAgICAgICAgICBpbnQgeXluOwogICAgICAgICAg Zm9yICh5eXMwID0gdGhpcy0+c3RhdGUoKSwKICAgICAgICAgICAgICAgeXlzMSA9IHl5eTEuc3Rh dGUoKSwKICAgICAgICAgICAgICAgeXluID0geXlyaHNMZW5ndGggKHRoaXMtPnl5cnVsZSk7CiAg ICAgICAgICAgICAgIHl5biA+IDA7CiAgICAgICAgICAgICAgIHl5czAgPSB5eXMwLT5wcmVkKCks CiAgICAgICAgICAgICAgIHl5czEgPSB5eXMxLT5wcmVkKCksIHl5biAtPSAxKQogICAgICAgICAg ICBpZiAoeXlzMC0+eXlwb3NuICE9IHl5czEtPnl5cG9zbikKICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg ICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqIEFzc3VtaW5nIGlkZW50aWNhbE9wdGlvbnMg KFlZWTAsWVlZMSksIGRlc3RydWN0aXZlbHkgbWVyZ2UgdGhlCiAgICAgKiAgYWx0ZXJuYXRpdmUg c2VtYW50aWMgdmFsdWVzIGZvciB0aGUgUkhTLXN5bWJvbHMgb2YgWVlZMSBhbmQgWVlZMC4gICov CiAgICB2b2lkCiAgICBtZXJnZVdpdGggKHNlbWFudGljX29wdGlvbiYgeXl5MSkKICAgIHsKICAg ICAgY2hlY2tfICgpOwogICAgICB5eXkxLmNoZWNrXyAoKTsKICAgICAgZ2xyX3N0YXRlICp5eXMw ID0gdGhpcy0+c3RhdGUgKCk7CiAgICAgIGdscl9zdGF0ZSAqeXlzMSA9IHl5eTEuc3RhdGUgKCk7 CiAgICAgIGZvciAoaW50IHl5biA9IHl5cmhzTGVuZ3RoICh0aGlzLT55eXJ1bGUpOwogICAgICAg ICAgIHl5biA+IDA7CiAgICAgICAgICAgeXluIC09IDEsIHl5czAgPSB5eXMwLT5wcmVkICgpLCB5 eXMxID0geXlzMS0+cHJlZCAoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoeXlzMCA9PSB5eXMx KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGVsc2UgaWYgKHl5czAtPnl5cmVzb2x2ZWQp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB5eXMxLT55eXJlc29sdmVkID0gdHJ1ZTsKICAg ICAgICAgICAgICB5eXMxLT52YWx1ZSAoKSA9IHl5czAtPnZhbHVlICgpOwogICAgICAgICAgICB9 CiAgICAgICAgICBlbHNlIGlmICh5eXMxLT55eXJlc29sdmVkKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgeXlzMC0+eXlyZXNvbHZlZCA9IHRydWU7CiAgICAgICAgICAgICAgeXlzMC0+dmFs dWUgKCkgPSB5eXMxLT52YWx1ZSAoKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgc2VtYW50aWNfb3B0aW9uKiB5eXowcHJldiA9IFlZX05V TExQVFI7CiAgICAgICAgICAgICAgc2VtYW50aWNfb3B0aW9uKiB5eXowID0geXlzMC0+Zmlyc3RW YWwoKTsKICAgICAgICAgICAgICBzZW1hbnRpY19vcHRpb24qIHl5ejEgPSB5eXMxLT5maXJzdFZh bCgpOwogICAgICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBpZiAoeXl6MSA9PSB5eXowIHx8IHl5ejEgPT0gWVlfTlVMTFBUUikKICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeXl6MCA9PSBZ WV9OVUxMUFRSKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlm ICh5eXowcHJldiAhPSBZWV9OVUxMUFRSKQogICAgICAgICAgICAgICAgICAgICAgICB5eXowcHJl di0+c2V0TmV4dCAoeXl6MSk7CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgICAgIHl5czAtPnNldEZpcnN0VmFsICh5eXoxKTsKICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAoeXl6MCA8IHl5ejEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgc2VtYW50aWNfb3B0aW9uKiB5eXogPSB5eXowOwogICAgICAgICAgICAgICAgICAgICAgaWYg KHl5ejBwcmV2ICE9IFlZX05VTExQVFIpCiAgICAgICAgICAgICAgICAgICAgICAgIHl5ejBwcmV2 LT5zZXROZXh0KHl5ejEpOwogICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgICAgICAgICB5eXMwLT5zZXRGaXJzdFZhbCh5eXoxKTsKICAgICAgICAgICAgICAgICAgICAg IHl5ejEgPSB5eXoxLT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgICB5eXowLT5zZXROZXh0 KHl5eik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB5eXowcHJldiA9 IHl5ejA7CiAgICAgICAgICAgICAgICAgIHl5ejAgPSB5eXowLT5uZXh0KCk7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgeXlzMS0+c2V0Rmlyc3RWYWwoeXlzMC0+Zmlyc3RWYWwoKSk7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgojaWYgWVlERUJVRwogICAgdm9pZCB5eXJl cG9ydFRyZWUgKHNpemVfdCB5eWluZGVudCA9IDIpIGNvbnN0CiAgICB7CiAgICAgIGNoZWNrXyAo KTsKICAgICAgaW50IHl5bnJocyA9IHl5cmhzTGVuZ3RoICh0aGlzLT55eXJ1bGUpOwogICAgICBj b25zdCBnbHJfc3RhdGUqIHl5c3RhdGVzWzEgKyBZWU1BWFJIU107CiAgICAgIGdscl9zdGF0ZSB5 eWxlZnRtb3N0X3N0YXRlOwoKICAgICAgewogICAgICAgIGNvbnN0IGdscl9zdGF0ZSogeXlzID0g dGhpcy0+c3RhdGUoKTsKICAgICAgICBmb3IgKGludCB5eWkgPSB5eW5yaHM7IDAgPCB5eWk7IHl5 aSAtPSAxKQogICAgICAgICAgewogICAgICAgICAgICB5eXN0YXRlc1t5eWldID0geXlzOwogICAg ICAgICAgICB5eXMgPSB5eXMtPnByZWQoKTsKICAgICAgICAgIH0KICAgICAgICBpZiAoeXlzID09 IFlZX05VTExQVFIpCiAgICAgICAgICB7CiAgICAgICAgICAgIHl5bGVmdG1vc3Rfc3RhdGUueXlw b3NuID0gMDsKICAgICAgICAgICAgeXlzdGF0ZXNbMF0gPSAmeXlsZWZ0bW9zdF9zdGF0ZTsKICAg ICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICB5eXN0YXRlc1swXSA9IHl5czsKICAgICAg fQoKICAgICAgc3RkOjpzdHJpbmcgeXlsaHMgPSB5eTo6cGFyc2VyOjpzeW1ib2xfbmFtZSAoeXls aHNOb250ZXJtICh0aGlzLT55eXJ1bGUpKTsKICAgICAgWVlBU1NFUlQodGhpcy0+c3RhdGUoKSk7 CiAgICAgIGlmICh0aGlzLT5zdGF0ZSgpLT55eXBvc24gPCB5eXN0YXRlc1swXS0+eXlwb3NuICsg MSkKICAgICAgICBzdGQ6OmNlcnIgPDwgc3RkOjpzdHJpbmcoeXlpbmRlbnQsICcgJykgPDwgeXls aHMgPDwgIiAtPiA8UnVsZSAiCiAgICAgICAgICAgICAgICAgIDw8IHRoaXMtPnl5cnVsZSAtIDEg PDwgIiwgZW1wdHk+XG4iOwogICAgICBlbHNlCiAgICAgICAgc3RkOjpjZXJyIDw8IHN0ZDo6c3Ry aW5nKHl5aW5kZW50LCAnICcpIDw8IHl5bGhzIDw8ICIgLT4gPFJ1bGUgIgogICAgICAgICAgICAg ICAgICA8PCB0aGlzLT55eXJ1bGUgLSAxIDw8ICIsIHRva2VucyAiCiAgICAgICAgICAgICAgICAg IDw8IHl5c3RhdGVzWzBdLT55eXBvc24gKyAxIDw8ICIgLi4gIgogICAgICAgICAgICAgICAgICA8 PCB0aGlzLT5zdGF0ZSgpLT55eXBvc24gPDwgIj5cbiI7CiAgICAgIGZvciAoaW50IHl5aSA9IDE7 IHl5aSA8PSB5eW5yaHM7IHl5aSArPSAxKQogICAgICAgIHsKICAgICAgICAgIGlmICh5eXN0YXRl c1t5eWldLT55eXJlc29sdmVkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RkOjpzdHJp bmcgeXlzeW0gPSB5eTo6cGFyc2VyOjpzeW1ib2xfbmFtZSAoeXlfYWNjZXNzaW5nX3N5bWJvbCAo eXlzdGF0ZXNbeXlpXS0+eXlsclN0YXRlKSk7CiAgICAgICAgICAgICAgaWYgKHl5c3RhdGVzW3l5 aS0xXS0+eXlwb3NuKzEgPiB5eXN0YXRlc1t5eWldLT55eXBvc24pCiAgICAgICAgICAgICAgICBz dGQ6OmNlcnIgPDwgc3RkOjpzdHJpbmcoeXlpbmRlbnQgKyAyLCAnICcpIDw8IHl5c3ltCiAgICAg ICAgICAgICAgICAgICAgICAgICAgPDwgIiA8ZW1wdHk+XG4iOwogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCBzdGQ6OnN0cmluZyh5eWluZGVudCArIDIsICcg JykgPDwgeXlzeW0KICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIDx0b2tlbnMgIiA8PCB5 eXN0YXRlc1t5eWktMV0tPnl5cG9zbiArIDEKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAi IC4uICIgPDwgeXlzdGF0ZXNbeXlpXS0+eXlwb3NuIDw8ICI+XG4iOwogICAgICAgICAgICB9CiAg ICAgICAgICBlbHNlCiAgICAgICAgICAgIHl5c3RhdGVzW3l5aV0tPmZpcnN0VmFsICgpLT55eXJl cG9ydFRyZWUgKHl5aW5kZW50KzIpOwogICAgICAgIH0KICAgIH0KI2VuZGlmCgogICAgLyoqIFJ1 bGUgbnVtYmVyIGZvciB0aGlzIHJlZHVjdGlvbiAqLwogICAgcnVsZV9udW0geXlydWxlOwoKICBw cml2YXRlOgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBzdGF0aWMgY29uc3QgZ2xyX3N0 YWNrX2l0ZW0qIGFzSXRlbShjb25zdCBUKiBzdGF0ZSkKICAgIHsKICAgICAgcmV0dXJuIHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgZ2xyX3N0YWNrX2l0ZW0qPihzdGF0ZSk7CiAgICB9CiAgICB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KICAgIHN0YXRpYyBnbHJfc3RhY2tfaXRlbSogYXNJdGVtKFQqIHN0 YXRlKQogICAgewogICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnbHJfc3RhY2tfaXRlbSo+ KHN0YXRlKTsKICAgIH0KICAgIC8qKiBUaGUgbGFzdCBSSFMgc3RhdGUgaW4gdGhlIGxpc3Qgb2Yg c3RhdGVzIHRvIGJlIHJlZHVjZWQuICAqLwogICAgc3RkOjpwdHJkaWZmX3QgeXlzdGF0ZTsKICAg IC8qKiBOZXh0IHNpYmxpbmcgaW4gY2hhaW4gb2Ygb3B0aW9ucy4gIFRvIGZhY2lsaXRhdGUgbWVy Z2luZywKICAgICAqICBvcHRpb25zIGFyZSBjaGFpbmVkIGluIGRlY3JlYXNpbmcgb3JkZXIgYnkg YWRkcmVzcy4gICovCiAgICBzdGQ6OnB0cmRpZmZfdCB5eW5leHQ7CgogIHB1YmxpYzoKICAgIC8q KiBUaGUgbG9va2FoZWFkIGZvciB0aGlzIHJlZHVjdGlvbi4gICovCiAgICBzeW1ib2xfdHlwZSB5 eWxhOwoKCiAgcHVibGljOgogICAgLy8gQ2hlY2sgaW52YXJpYW50cy4KICAgIHZvaWQgY2hlY2tf ICgpIGNvbnN0CiAgICB7CiAgICAgIFlZX0lHTk9SRV9OVUxMX0RFUkVGRVJFTkNFX0JFR0lOCiAg ICAgIFlZQVNTRVJUICh0aGlzLT5tYWdpY18gPT0gTUFHSUMpOwogICAgICBZWV9JR05PUkVfTlVM TF9ERVJFRkVSRU5DRV9FTkQKICAgIH0KCiAgICAvLyBBIG1hZ2ljIG51bWJlciB0byBjaGVjayBv dXIgcG9pbnRlciBhcml0aG1ldGljIGlzIHNhbmUuCiAgICBlbnVtIHsgTUFHSUMgPSAweGVmZjFj YWNlIH07CiAgICB1bnNpZ25lZCBpbnQgbWFnaWNfOwogIH07IC8vIGNsYXNzIHNlbWFudGljX29w dGlvbgp9IC8vIG5hbWVzcGFjZQoKbmFtZXNwYWNlCnsKICAvKiogVHlwZSBvZiB0aGUgaXRlbXMg aW4gdGhlIEdMUiBzdGFjay4KICAgKiAgSXQgY2FuIGJlIGVpdGhlciBhIGdscl9zdGF0ZSBvciBh IHNlbWFudGljX29wdGlvbi4gVGhlIGlzX3N0YXRlXyBmaWVsZAogICAqICBpbmRpY2F0ZXMgd2hp Y2ggaXRlbSBvZiB0aGUgdW5pb24gaXMgdmFsaWQuICAqLwogIGNsYXNzIGdscl9zdGFja19pdGVt CiAgewogIHB1YmxpYzoKICAgIGdscl9zdGFja19pdGVtIChib29sIHN0YXRlID0gdHJ1ZSkKICAg ICAgOiBpc19zdGF0ZV8gKHN0YXRlKQogICAgICAsIG1hZ2ljXyAoTUFHSUMpCiAgICB7CiAgICAg IGlmIChpc19zdGF0ZV8pCiAgICAgICAgbmV3ICgmcmF3XykgZ2xyX3N0YXRlOwogICAgICBlbHNl CiAgICAgICAgbmV3ICgmcmF3Xykgc2VtYW50aWNfb3B0aW9uOwogICAgfQoKICAgIGdscl9zdGFj a19pdGVtIChjb25zdCBnbHJfc3RhY2tfaXRlbSYgb3RoZXIpIFlZX05PRVhDRVBUIFlZX05PVEhS T1cKICAgICAgOiBpc19zdGF0ZV8gKG90aGVyLmlzX3N0YXRlXykKICAgICAgLCBtYWdpY18gKE1B R0lDKQogICAgewogICAgICBvdGhlci5jaGVja18gKCk7CiAgICAgIHN0ZDo6bWVtY3B5IChyYXdf LCBvdGhlci5yYXdfLCB1bmlvbl9zaXplKTsKICAgIH0KCiAgICBnbHJfc3RhY2tfaXRlbSYgb3Bl cmF0b3I9IChnbHJfc3RhY2tfaXRlbSBvdGhlcikKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAg ICBvdGhlci5jaGVja18gKCk7CiAgICAgIHN0ZDo6c3dhcCAoaXNfc3RhdGVfLCBvdGhlci5pc19z dGF0ZV8pOwogICAgICBzdGQ6OnN3YXAgKHJhd18sIG90aGVyLnJhd18pOwogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogICAgfmdscl9zdGFja19pdGVtICgpCiAgICB7CiAgICAgIGNoZWNrXyAo KTsKICAgICAgaWYgKGlzX3N0YXRlICgpKQogICAgICAgIGdldFN0YXRlICgpLn5nbHJfc3RhdGUg KCk7CiAgICAgIGVsc2UKICAgICAgICBnZXRPcHRpb24gKCkufnNlbWFudGljX29wdGlvbiAoKTsK ICAgIH0KCiAgICB2b2lkIHNldFN0YXRlIChjb25zdCBnbHJfc3RhdGUgJnN0YXRlKQogICAgewog ICAgICBjaGVja18gKCk7CiAgICAgIHN0YXRlLmNoZWNrXyAoKTsKICAgICAgaWYgKHRoaXMgIT0g c3RhdGUuYXNJdGVtICgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChpc19zdGF0ZV8pCiAgICAg ICAgICAgIGdldFN0YXRlICgpLn5nbHJfc3RhdGUgKCk7CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIGdldE9wdGlvbiAoKS5+c2VtYW50aWNfb3B0aW9uICgpOwogICAgICAgICAgbmV3ICgmcmF3 XykgZ2xyX3N0YXRlIChzdGF0ZSk7CiAgICAgICAgICBpc19zdGF0ZV8gPSB0cnVlOwogICAgICAg IH0KICAgIH0KCiAgICBnbHJfc3RhdGUmIGdldFN0YXRlICgpCiAgICB7CiAgICAgIGNoZWNrXyAo KTsKICAgICAgWVlEQVNTRVJUIChpc19zdGF0ZSAoKSk7CiAgICAgIHZvaWQgKnl5cCA9IHJhd187 CiAgICAgIGdscl9zdGF0ZSYgcmVzID0gKnN0YXRpY19jYXN0PGdscl9zdGF0ZSo+ICh5eXApOwog ICAgICByZXMuY2hlY2tfICgpOwogICAgICByZXR1cm4gcmVzOwogICAgfQoKICAgIGNvbnN0IGds cl9zdGF0ZSYgZ2V0U3RhdGUgKCkgY29uc3QKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAgICBZ WURBU1NFUlQgKGlzX3N0YXRlICgpKTsKICAgICAgY29uc3Qgdm9pZCAqeXlwID0gcmF3XzsKICAg ICAgY29uc3QgZ2xyX3N0YXRlJiByZXMgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgZ2xyX3N0YXRlKj4g KHl5cCk7CiAgICAgIHJlcy5jaGVja18gKCk7CiAgICAgIHJldHVybiByZXM7CiAgICB9CgogICAg c2VtYW50aWNfb3B0aW9uJiBnZXRPcHRpb24gKCkKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAg ICBZWURBU1NFUlQgKCFpc19zdGF0ZSAoKSk7CiAgICAgIHZvaWQgKnl5cCA9IHJhd187CiAgICAg IHJldHVybiAqc3RhdGljX2Nhc3Q8c2VtYW50aWNfb3B0aW9uKj4gKHl5cCk7CiAgICB9CiAgICBj b25zdCBzZW1hbnRpY19vcHRpb24mIGdldE9wdGlvbiAoKSBjb25zdAogICAgewogICAgICBjaGVj a18gKCk7CiAgICAgIFlZREFTU0VSVCAoIWlzX3N0YXRlICgpKTsKICAgICAgY29uc3Qgdm9pZCAq eXlwID0gcmF3XzsKICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBzZW1hbnRpY19vcHRp b24qPiAoeXlwKTsKICAgIH0KICAgIGJvb2wgaXNfc3RhdGUgKCkgY29uc3QKICAgIHsKICAgICAg Y2hlY2tfICgpOwogICAgICByZXR1cm4gaXNfc3RhdGVfOwogICAgfQoKICBwcml2YXRlOgogICAg Ly8vIFRoZSBwb3NzaWJsZSBjb250ZW50cyBvZiByYXdfLiBTaW5jZSB0aGV5IGhhdmUgY29uc3Ry dWN0b3JzLCB0aGV5IGNhbm5vdAogICAgLy8vIGJlIGRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSB1 bmlvbi4KICAgIHVuaW9uIGNvbnRlbnRzCiAgICB7CiAgICAgIGNoYXIgeXlzdGF0ZVtzaXplb2Yg KGdscl9zdGF0ZSldOwogICAgICBjaGFyIHl5b3B0aW9uW3NpemVvZiAoc2VtYW50aWNfb3B0aW9u KV07CiAgICB9OwogICAgZW51bSB7IHVuaW9uX3NpemUgPSBzaXplb2YgKGNvbnRlbnRzKSB9Owog ICAgdW5pb24gewogICAgICAvLy8gU3Ryb25nZXN0IGFsaWdubWVudCBjb25zdHJhaW50cy4KICAg ICAgbG9uZyBkb3VibGUgeXlhbGlnbl9tZTsKICAgICAgLy8vIEEgYnVmZmVyIGxhcmdlIGVub3Vn aCB0byBzdG9yZSB0aGUgY29udGVudHMuCiAgICAgIGNoYXIgcmF3X1t1bmlvbl9zaXplXTsKICAg IH07CiAgICAvKiogVHlwZSB0YWcgZm9yIHRoZSB1bmlvbi4gKi8KICAgIGJvb2wgaXNfc3RhdGVf OwoKICBwdWJsaWM6CiAgICAvLyBDaGVjayBpbnZhcmlhbnRzLgogICAgdm9pZCBjaGVja18gKCkg Y29uc3QKICAgIHsKICAgICAgWVlBU1NFUlQgKHRoaXMtPm1hZ2ljXyA9PSBNQUdJQyk7CiAgICAg IFlZQVNTRVJUICh0aGlzLT5pc19zdGF0ZV8gPT0gZmFsc2UgfHwgdGhpcy0+aXNfc3RhdGVfID09 IHRydWUpOwogICAgfQogICAgLy8gQSBtYWdpYyBudW1iZXIgdG8gY2hlY2sgb3VyIHBvaW50ZXIg YXJpdGhtZXRpYyBpcyBzYW5lLgogICAgZW51bSB7IE1BR0lDID0gMHhERUFEMUFDQyB9OyAvLyAz NzM1ODg2NTQwLgogICAgY29uc3QgdW5zaWduZWQgaW50IG1hZ2ljXzsKICB9OyAvLyBjbGFzcyBn bHJfc3RhY2tfaXRlbQp9IC8vIG5hbWVzcGFjZQoKZ2xyX3N0YXRlKiBnbHJfc3RhdGU6OnByZWQg KCkKewogIGNoZWNrXyAoKTsKICBZWV9JR05PUkVfTlVMTF9ERVJFRkVSRU5DRV9CRUdJTgogIHJl dHVybiB5eXByZWQgPyAmYXNJdGVtIChhc19wb2ludGVyXyAodGhpcykgLSB5eXByZWQpLT5nZXRT dGF0ZSAoKSA6IFlZX05VTExQVFI7CiAgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfRU5ECn0K CmNvbnN0IGdscl9zdGF0ZSogZ2xyX3N0YXRlOjpwcmVkICgpIGNvbnN0CnsKICBjaGVja18gKCk7 CiAgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfQkVHSU4KICByZXR1cm4geXlwcmVkID8gJmFz SXRlbSAoYXNfcG9pbnRlcl8gKHRoaXMpIC0geXlwcmVkKS0+Z2V0U3RhdGUgKCkgOiBZWV9OVUxM UFRSOwogIFlZX0lHTk9SRV9OVUxMX0RFUkVGRVJFTkNFX0VORAp9Cgp2b2lkIGdscl9zdGF0ZTo6 c2V0UHJlZCAoY29uc3QgZ2xyX3N0YXRlKiBzdGF0ZSkKewogIGNoZWNrXyAoKTsKICBpZiAoc3Rh dGUpCiAgICBzdGF0ZS0+Y2hlY2tfICgpOwogIHl5cHJlZCA9IHN0YXRlID8gYXNfcG9pbnRlcl8g KHRoaXMpIC0gYXNfcG9pbnRlcl8gKHN0YXRlKSA6IDA7Cn0KCnNlbWFudGljX29wdGlvbiogZ2xy X3N0YXRlOjpmaXJzdFZhbCAoKQp7CiAgY2hlY2tfICgpOwogIHJldHVybiB5eWZpcnN0VmFsID8g Jihhc0l0ZW0odGhpcykgLSB5eWZpcnN0VmFsKS0+Z2V0T3B0aW9uKCkgOiBZWV9OVUxMUFRSOwp9 Cgpjb25zdCBzZW1hbnRpY19vcHRpb24qIGdscl9zdGF0ZTo6Zmlyc3RWYWwgKCkgY29uc3QKewog IGNoZWNrXyAoKTsKICByZXR1cm4geXlmaXJzdFZhbCA/ICYoYXNJdGVtKHRoaXMpIC0geXlmaXJz dFZhbCktPmdldE9wdGlvbigpIDogWVlfTlVMTFBUUjsKfQoKdm9pZCBnbHJfc3RhdGU6OnNldEZp cnN0VmFsIChjb25zdCBzZW1hbnRpY19vcHRpb24qIG9wdGlvbikKewogIGNoZWNrXyAoKTsKICB5 eWZpcnN0VmFsID0gb3B0aW9uID8gYXNJdGVtKHRoaXMpIC0gYXNJdGVtKG9wdGlvbikgOiAwOwp9 CgpzdGQ6OnB0cmRpZmZfdCBnbHJfc3RhdGU6OmluZGV4SW4gKGNvbnN0IGdscl9zdGFja19pdGVt KiBhcnJheSkgY29uc3QKewogIGNoZWNrXyAoKTsKICByZXR1cm4gYXNJdGVtKHRoaXMpIC0gYXJy YXk7Cn0KCnN0ZDo6cHRyZGlmZl90IHNlbWFudGljX29wdGlvbjo6aW5kZXhJbiAoY29uc3QgZ2xy X3N0YWNrX2l0ZW0qIGFycmF5KSBjb25zdAp7CiAgcmV0dXJuIGFzSXRlbSh0aGlzKSAtIGFycmF5 Owp9CgpnbHJfc3RhdGUqIHNlbWFudGljX29wdGlvbjo6c3RhdGUgKCkKewogIFlZX0lHTk9SRV9O VUxMX0RFUkVGRVJFTkNFX0JFR0lOCiAgcmV0dXJuIHl5c3RhdGUgPyAmKGFzSXRlbSh0aGlzKSAt IHl5c3RhdGUpLT5nZXRTdGF0ZSgpIDogWVlfTlVMTFBUUjsKICBZWV9JR05PUkVfTlVMTF9ERVJF RkVSRU5DRV9FTkQKfQoKY29uc3QgZ2xyX3N0YXRlKiBzZW1hbnRpY19vcHRpb246OnN0YXRlICgp IGNvbnN0CnsKICByZXR1cm4geXlzdGF0ZSA/ICYoYXNJdGVtKHRoaXMpIC0geXlzdGF0ZSktPmdl dFN0YXRlKCkgOiBZWV9OVUxMUFRSOwp9Cgp2b2lkIHNlbWFudGljX29wdGlvbjo6c2V0U3RhdGUg KGNvbnN0IGdscl9zdGF0ZSogcykKewogIHl5c3RhdGUgPSBzID8gYXNJdGVtKHRoaXMpIC0gYXNJ dGVtKHMpIDogMDsKfQoKY29uc3Qgc2VtYW50aWNfb3B0aW9uKiBzZW1hbnRpY19vcHRpb246Om5l eHQgKCkgY29uc3QKewogIHJldHVybiB5eW5leHQgPyAmKGFzSXRlbSh0aGlzKSAtIHl5bmV4dCkt PmdldE9wdGlvbigpIDogWVlfTlVMTFBUUjsKfQoKc2VtYW50aWNfb3B0aW9uKiBzZW1hbnRpY19v cHRpb246Om5leHQgKCkKewogIHJldHVybiB5eW5leHQgPyAmKGFzSXRlbSh0aGlzKSAtIHl5bmV4 dCktPmdldE9wdGlvbigpIDogWVlfTlVMTFBUUjsKfQoKdm9pZCBzZW1hbnRpY19vcHRpb246OnNl dE5leHQgKGNvbnN0IHNlbWFudGljX29wdGlvbiogcykKewogIHl5bmV4dCA9IHMgPyBhc0l0ZW0o dGhpcykgLSBhc0l0ZW0ocykgOiAwOwp9Cgp2b2lkIGdscl9zdGF0ZTo6ZGVzdHJveSAoY2hhciBj b25zdCogeXltc2csIHl5OjpwYXJzZXImIHl5cGFyc2VyKQp7CiAgY2hlY2tfICgpOwogIGlmICh5 eXJlc29sdmVkKQogICAgeXlwYXJzZXIueXlfZGVzdHJveV8gKHl5bXNnLCB5eV9hY2Nlc3Npbmdf c3ltYm9sKHl5bHJTdGF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKCkpOwog IGVsc2UKICAgIHsKI2lmIFlZREVCVUcKICAgICAgWVlDREVCVUcgPDwgeXltc2cKICAgICAgICAg ICAgICAgPDwgKGZpcnN0VmFsKCkgPyAiIHVucmVzb2x2ZWQgIiA6ICIgaW5jb21wbGV0ZSAiKQog ICAgICAgICAgICAgICA8PCAoeXlfYWNjZXNzaW5nX3N5bWJvbCAoeXlsclN0YXRlKSA8IFlZTlRP S0VOUyA/ICJ0b2tlbiIgOiAibnRlcm0iKQogICAgICAgICAgICAgICA8PCAnICcgPDwgeXlwYXJz ZXIuc3ltYm9sX25hbWUgKHl5X2FjY2Vzc2luZ19zeW1ib2wgKHl5bHJTdGF0ZSkpCiAgICAgICAg ICAgICAgIDw8ICIgKCIKICAgICAgICAgICAgICAgPDwgIilcbiI7CiNlbmRpZgogICAgICBpZiAo Zmlyc3RWYWwoKSAhPSBZWV9OVUxMUFRSKQogICAgICAgIHsKICAgICAgICAgIHNlbWFudGljX29w dGlvbiYgeXlvcHRpb24gPSAqZmlyc3RWYWwgKCk7CiAgICAgICAgICBnbHJfc3RhdGUgKnl5cmgg PSB5eW9wdGlvbi5zdGF0ZSAoKTsKICAgICAgICAgIGZvciAoaW50IHl5biA9IHl5cmhzTGVuZ3Ro ICh5eW9wdGlvbi55eXJ1bGUpOyB5eW4gPiAwOyB5eW4gLT0gMSkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIHl5cmgtPmRlc3Ryb3kgKHl5bXNnLCB5eXBhcnNlcik7CiAgICAgICAgICAgICAg eXlyaCA9IHl5cmgtPnByZWQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKCiN1 bmRlZiBZWUZJTEwKI2RlZmluZSBZWUZJTEwoTikgeXlmaWxsICh5eXZzcCwgeXlsb3csIChOKSwg eXlub3JtYWwpCgpuYW1lc3BhY2UKewogIGNsYXNzIHN0YXRlX3N0YWNrCiAgewogIHB1YmxpYzoK ICAgIHVzaW5nIHBhcnNlcl90eXBlID0geXk6OnBhcnNlcjsKICAgIHVzaW5nIHN5bWJvbF9raW5k ID0gcGFyc2VyX3R5cGU6OnN5bWJvbF9raW5kOwogICAgdXNpbmcgdmFsdWVfdHlwZSA9IHBhcnNl cl90eXBlOjp2YWx1ZV90eXBlOwoKICAgIC8qKiBJbml0aWFsaXplIHRvIGEgc2luZ2xlIGVtcHR5 IHN0YWNrLCB3aXRoIHRvdGFsIG1heGltdW0KICAgICAqICBjYXBhY2l0eSBmb3IgYWxsIHN0YWNr cyBvZiBZWVNJWkUuICAqLwogICAgc3RhdGVfc3RhY2sgKHNpemVfdCB5eXNpemUpCiAgICAgIDog eXlzcGxpdFBvaW50IChZWV9OVUxMUFRSKQogICAgewogICAgICB5eWl0ZW1zLnJlc2VydmUgKHl5 c2l6ZSk7CiAgICB9CgojaWYgWVlTVEFDS0VYUEFOREFCTEUKICAgIC8qKiBSZXR1cm5zIGZhbHNl IGlmIGl0IHRyaWVkIHRvIGV4cGFuZCBidXQgY291bGQgbm90LiAqLwogICAgYm9vbAogICAgeXll eHBhbmRHTFJTdGFja0lmTmVlZGVkICgpCiAgICB7CiAgICAgIHJldHVybiBZWUhFQURST09NIDw9 IHNwYWNlTGVmdCAoKSB8fCB5eWV4cGFuZEdMUlN0YWNrICgpOwogICAgfQoKICBwcml2YXRlOgog ICAgLyoqIElmICp0aGlzIGlzIGV4cGFuZGFibGUsIGV4dGVuZCBpdC4gIFdBUk5JTkc6IFBvaW50 ZXJzIGludG8gdGhlCiAgICAgICAgc3RhY2sgZnJvbSBvdXRzaWRlIHNob3VsZCBiZSBjb25zaWRl cmVkIGludmFsaWQgYWZ0ZXIgdGhpcyBjYWxsLgogICAgICAgIFdlIGFsd2F5cyBleHBhbmQgd2hl biB0aGVyZSBhcmUgMSBvciBmZXdlciBpdGVtcyBsZWZ0IEFGVEVSIGFuCiAgICAgICAgYWxsb2Nh dGlvbiwgc28gdGhhdCB3ZSBjYW4gYXZvaWQgaGF2aW5nIGV4dGVybmFsIHBvaW50ZXJzIGV4aXN0 CiAgICAgICAgYWNyb3NzIGFuIGFsbG9jYXRpb24uICAqLwogICAgYm9vbAogICAgeXlleHBhbmRH TFJTdGFjayAoKQogICAgewogICAgICBjb25zdCBzaXplX3Qgb2xkc2l6ZSA9IHl5aXRlbXMuc2l6 ZSgpOwogICAgICBpZiAoWVlNQVhERVBUSCAtIFlZSEVBRFJPT00gPCBvbGRzaXplKQogICAgICAg IHJldHVybiBmYWxzZTsKICAgICAgY29uc3Qgc2l6ZV90IHl5bmV3U2l6ZSA9IFlZTUFYREVQVEgg PCAyICogb2xkc2l6ZSA/IFlZTUFYREVQVEggOiAyICogb2xkc2l6ZTsKICAgICAgY29uc3QgZ2xy X3N0YWNrX2l0ZW0gKm9sZGJhc2UgPSAmeXlpdGVtc1swXTsKCiAgICAgIHl5aXRlbXMucmVzZXJ2 ZSAoeXluZXdTaXplKTsKICAgICAgY29uc3QgZ2xyX3N0YWNrX2l0ZW0gKm5ld2Jhc2UgPSAmeXlp dGVtc1swXTsKCiAgICAgIC8vIEFkanVzdCB0aGUgcG9pbnRlcnMuICBQZXJmb3JtIHJhdyBwb2lu dGVyIGFyaXRobWV0aWMsIGFzIHRoZXJlCiAgICAgIC8vIGlzIG5vIHJlYXNvbiBmb3Igb2JqZWN0 cyB0byBiZSBhbGlnbmVkIG9uIHRoZWlyIHNpemUuCiAgICAgIGNvbnN0IHB0cmRpZmZfdCBkaXNw CiAgICAgICAgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPiAobmV3YmFzZSkgLSByZWlu dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPiAob2xkYmFzZSk7CiAgICAgIGlmICh5eXNwbGl0UG9p bnQpCiAgICAgICAgY29uc3RfY2FzdDxnbHJfc3RhdGUqJj4gKHl5c3BsaXRQb2ludCkKICAgICAg ICAgID0gcmVpbnRlcnByZXRfY2FzdDxnbHJfc3RhdGUqPiAocmVpbnRlcnByZXRfY2FzdDxjaGFy Kj4gKGNvbnN0X2Nhc3Q8Z2xyX3N0YXRlKj4gKHl5c3BsaXRQb2ludCkpICsgZGlzcCk7CgogICAg ICBmb3IgKHN0ZDo6dmVjdG9yPGdscl9zdGF0ZSo+OjppdGVyYXRvcgogICAgICAgICAgICAgaSA9 IHl5dG9wcy5iZWdpbiAoKSwKICAgICAgICAgICAgIHl5ZW5kID0geXl0b3BzLmVuZCAoKTsKICAg ICAgICAgICBpICE9IHl5ZW5kOyArK2kpCiAgICAgICAgaWYgKGdscl9zdGF0ZV9ub3RfbnVsbCAo KmkpKQogICAgICAgICAgKmkgPSByZWludGVycHJldF9jYXN0PGdscl9zdGF0ZSo+KHJlaW50ZXJw cmV0X2Nhc3Q8Y2hhcio+KCppKSArIGRpc3ApOwoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cgog IHB1YmxpYzoKI2Vsc2UKICAgIGJvb2wgeXlleHBhbmRHTFJTdGFja0lmTmVlZGVkICgpCiAgICB7 CiAgICAgIHJldHVybiBZWUhFQURST09NIDw9IHNwYWNlTGVmdCAoKTsKICAgIH0KI2VuZGlmCiN1 bmRlZiBZWVNUQUNLRVhQQU5EQUJMRQoKICAgIHN0YXRpYyBib29sIGdscl9zdGF0ZV9ub3RfbnVs bCAoZ2xyX3N0YXRlKiBzKQogICAgewogICAgICByZXR1cm4gcyAhPSBZWV9OVUxMUFRSOwogICAg fQoKICAgIGJvb2wKICAgIHJlZHVjZVRvT25lU3RhY2sgKCkKICAgIHsKICAgICAgdXNpbmcgaXRl cmF0b3IgPSBzdGQ6OnZlY3RvcjxnbHJfc3RhdGUqPjo6aXRlcmF0b3I7CiAgICAgIGNvbnN0IGl0 ZXJhdG9yIHl5YmVnaW4gPSB5eXRvcHMuYmVnaW4oKTsKICAgICAgY29uc3QgaXRlcmF0b3IgeXll bmQgPSB5eXRvcHMuZW5kKCk7CiAgICAgIGNvbnN0IGl0ZXJhdG9yIHl5aXQgPSBzdGQ6OmZpbmRf aWYoeXliZWdpbiwgeXllbmQsIGdscl9zdGF0ZV9ub3RfbnVsbCk7CiAgICAgIGlmICh5eWl0ID09 IHl5ZW5kKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChzdGF0ZV9zZXRfaW5kZXgg eXlrID0gY3JlYXRlX3N0YXRlX3NldF9pbmRleCh5eWl0ICsgMSAtIHl5YmVnaW4pOwogICAgICAg ICAgIHl5ay51Z2V0KCkgIT0gbnVtVG9wcygpOyArK3l5aykKICAgICAgICB5eXRvcHMueXltYXJr U3RhY2tEZWxldGVkICh5eWspOwogICAgICB5eXRvcHMueXlyZW1vdmVEZWxldGVzICgpOwogICAg ICB5eWNvbXByZXNzU3RhY2sgKCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKiBD YWxsZWQgd2hlbiByZXR1cm5pbmcgdG8gZGV0ZXJtaW5pc3RpYyBvcGVyYXRpb24gdG8gY2xlYW4g dXAgdGhlIGV4dHJhCiAgICAgKiBzdGFja3MuICovCiAgICB2b2lkCiAgICB5eWNvbXByZXNzU3Rh Y2sgKCkKICAgIHsKICAgICAgaWYgKHl5dG9wcy5zaXplKCkgIT0gMSB8fCAhaXNTcGxpdCgpKQog ICAgICAgIHJldHVybjsKCiAgICAgIC8vIHl5ciBpcyB0aGUgc3RhdGUgYWZ0ZXIgdGhlIHNwbGl0 IHBvaW50LgogICAgICBnbHJfc3RhdGUqIHl5ciA9IFlZX05VTExQVFI7CiAgICAgIGZvciAoZ2xy X3N0YXRlICp5eXAgPSBmaXJzdFRvcCgpLCAqeXlxID0geXlwLT5wcmVkKCk7CiAgICAgICAgICAg eXlwICE9IHl5c3BsaXRQb2ludDsKICAgICAgICAgICB5eXIgPSB5eXAsIHl5cCA9IHl5cSwgeXlx ID0geXlwLT5wcmVkKCkpCiAgICAgICAgeXlwLT5zZXRQcmVkKHl5cik7CgogICAgICAvLyBUaGlz IGNvbnN0X2Nhc3QgaXMgb2theSwgc2luY2UgYW55d2F5IHdlIGhhdmUgYWNjZXNzIHRvIHRoZSBt dXRhYmxlCiAgICAgIC8vIHl5aXRlbXMgaW50byB3aGljaCB5eXNwbGl0UG9pbnQgcG9pbnRzLgog ICAgICBnbHJfc3RhY2tfaXRlbSogbmV4dEZyZWVJdGVtCiAgICAgICAgPSBjb25zdF9jYXN0PGds cl9zdGF0ZSo+ICh5eXNwbGl0UG9pbnQpLT5hc0l0ZW0gKCkgKyAxOwogICAgICB5eXNwbGl0UG9p bnQgPSBZWV9OVUxMUFRSOwogICAgICB5eXRvcHMuY2xlYXJMYXN0RGVsZXRlZCAoKTsKCiAgICAg IHdoaWxlICh5eXIgIT0gWVlfTlVMTFBUUikKICAgICAgICB7CiAgICAgICAgICBuZXh0RnJlZUl0 ZW0tPnNldFN0YXRlICgqeXlyKTsKICAgICAgICAgIGdscl9zdGF0ZSYgbmV4dEZyZWVTdGF0ZSA9 IG5leHRGcmVlSXRlbS0+Z2V0U3RhdGUoKTsKICAgICAgICAgIHl5ciA9IHl5ci0+cHJlZCgpOwog ICAgICAgICAgbmV4dEZyZWVTdGF0ZS5zZXRQcmVkKCYobmV4dEZyZWVJdGVtIC0gMSktPmdldFN0 YXRlKCkpOwogICAgICAgICAgc2V0Rmlyc3RUb3AgKCZuZXh0RnJlZVN0YXRlKTsKICAgICAgICAg ICsrbmV4dEZyZWVJdGVtOwogICAgICAgIH0KICAgICAgeXlpdGVtcy5yZXNpemUoc3RhdGljX2Nh c3Q8c2l6ZV90PihuZXh0RnJlZUl0ZW0gLSB5eWl0ZW1zLmRhdGEoKSkpOwogICAgfQoKICAgIGJv b2wgaXNTcGxpdCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIHl5c3BsaXRQb2ludCAhPSBZWV9OVUxM UFRSOwogICAgfQoKICAgIC8vIFByZXNlbnQgdGhlIGludGVyZmFjZSBvZiBhIHZlY3RvciBvZiBn bHJfc3RhY2tfaXRlbS4KICAgIHN0ZDo6dmVjdG9yPGdscl9zdGFja19pdGVtPjo6Y29uc3RfaXRl cmF0b3IgYmVnaW4gKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHl5aXRlbXMuYmVnaW4gKCk7 CiAgICB9CgogICAgc3RkOjp2ZWN0b3I8Z2xyX3N0YWNrX2l0ZW0+Ojpjb25zdF9pdGVyYXRvciBl bmQgKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHl5aXRlbXMuZW5kICgpOwogICAgfQoKICAg IHNpemVfdCBzaXplKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHl5aXRlbXMuc2l6ZSAoKTsK ICAgIH0KCiAgICBnbHJfc3RhY2tfaXRlbSYgb3BlcmF0b3JbXSAoc2l6ZV90IGkpCiAgICB7CiAg ICAgIHJldHVybiB5eWl0ZW1zW2ldOwogICAgfQoKICAgIGdscl9zdGFja19pdGVtJiBzdGFja0l0 ZW1BdCAoc2l6ZV90IGluZGV4KQogICAgewogICAgICByZXR1cm4geXlpdGVtc1tpbmRleF07CiAg ICB9CgogICAgc2l6ZV90IG51bVRvcHMgKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHl5dG9w cy5zaXplICgpOwogICAgfQoKICAgIGdscl9zdGF0ZSogZmlyc3RUb3AgKCkgY29uc3QKICAgIHsK ICAgICAgcmV0dXJuIHl5dG9wc1tjcmVhdGVfc3RhdGVfc2V0X2luZGV4ICgwKV07CiAgICB9Cgog ICAgZ2xyX3N0YXRlKiB0b3BBdCAoc3RhdGVfc2V0X2luZGV4IGkpIGNvbnN0CiAgICB7CiAgICAg IHJldHVybiB5eXRvcHNbaV07CiAgICB9CgogICAgdm9pZCBzZXRGaXJzdFRvcCAoZ2xyX3N0YXRl KiB2YWx1ZSkKICAgIHsKICAgICAgeXl0b3BzW2NyZWF0ZV9zdGF0ZV9zZXRfaW5kZXggKDApXSA9 IHZhbHVlOwogICAgfQoKICAgIHZvaWQgc2V0VG9wQXQgKHN0YXRlX3NldF9pbmRleCBpLCBnbHJf c3RhdGUqIHZhbHVlKQogICAgewogICAgICB5eXRvcHNbaV0gPSB2YWx1ZTsKICAgIH0KCiAgICB2 b2lkIHBvcF9iYWNrICgpCiAgICB7CiAgICAgIHl5aXRlbXMucG9wX2JhY2sgKCk7CiAgICB9Cgog ICAgdm9pZCBwb3BfYmFjayAoc2l6ZV90IG4pCiAgICB7CiAgICAgIHl5aXRlbXMucmVzaXplICh5 eWl0ZW1zLnNpemUgKCkgLSBuKTsKICAgIH0KCiAgICBzdGF0ZV9zZXRfaW5kZXgKICAgIHl5c3Bs aXRTdGFjayAoc3RhdGVfc2V0X2luZGV4IHl5aykKICAgIHsKICAgICAgaWYgKCFpc1NwbGl0ICgp KQogICAgICAgIHsKICAgICAgICAgIFlZQVNTRVJUICh5eWsuZ2V0ICgpID09IDApOwogICAgICAg ICAgeXlzcGxpdFBvaW50ID0gdG9wQXQgKHl5ayk7CiAgICAgICAgfQogICAgICByZXR1cm4geXl0 b3BzLnl5c3BsaXRTdGFjayAoeXlrKTsKICAgIH0KCiAgICAvKiogQXNzdW1pbmcgdGhhdCBZWVMg aXMgYSBHTFJTdGF0ZSBzb21ld2hlcmUgb24gKnRoaXMsIHVwZGF0ZSB0aGUKICAgICAqICBzcGxp dHBvaW50IG9mICp0aGlzLCBpZiBuZWVkZWQsIHNvIHRoYXQgaXQgaXMgYXQgbGVhc3QgYXMgZGVl cCBhcwogICAgICogIFlZUy4gICovCiAgICB2b2lkCiAgICB5eXVwZGF0ZVNwbGl0IChnbHJfc3Rh dGUmIHl5cykKICAgIHsKICAgICAgaWYgKGlzU3BsaXQoKSAmJiAmeXlzIDwgeXlzcGxpdFBvaW50 KQogICAgICAgIHl5c3BsaXRQb2ludCA9ICZ5eXM7CiAgICB9CgogICAgLyoqIFJldHVybiBhIGZy ZXNoIEdMUlN0YXRlLgogICAgICogQ2FsbGVycyBzaG91bGQgY2FsbCB5eXJlc2VydmVTdGFjayBh ZnRlcndhcmRzIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcwogICAgICogc3VmZmljaWVudCBoZWFkcm9v bS4gICovCiAgICBnbHJfc3RhdGUmIHl5bmV3R0xSU3RhdGUgKGNvbnN0IGdscl9zdGF0ZSYgbmV3 U3RhdGUpCiAgICB7CiAgICAgIGdscl9zdGF0ZSYgc3RhdGUgPSB5eWl0ZW1zW3l5bmV3R0xSU3Rh Y2tJdGVtICh0cnVlKV0uZ2V0U3RhdGUgKCk7CiNpZiBmYWxzZSAmJiAyMDExMDNMIDw9IFlZX0NQ TFVTUExVUwogICAgICBzdGF0ZSA9IHN0ZDo6bW92ZSAobmV3U3RhdGUpOwojZWxzZQogICAgICBz dGF0ZSA9IG5ld1N0YXRlOwojZW5kaWYKICAgICAgcmV0dXJuIHN0YXRlOwogICAgfQoKICAgIC8q KiBSZXR1cm4gYSBmcmVzaCBTZW1hbnRpY09wdGlvbi4KICAgICAqIENhbGxlcnMgc2hvdWxkIGNh bGwgeXlyZXNlcnZlU3RhY2sgYWZ0ZXJ3YXJkcyB0byBtYWtlIHN1cmUgdGhlcmUgaXMKICAgICAq IHN1ZmZpY2llbnQgaGVhZHJvb20uICAqLwogICAgc2VtYW50aWNfb3B0aW9uJiB5eW5ld1NlbWFu dGljT3B0aW9uIChzZW1hbnRpY19vcHRpb24gbmV3T3B0aW9uKQogICAgewogICAgICBzZW1hbnRp Y19vcHRpb24mIG9wdGlvbiA9IHl5aXRlbXNbeXluZXdHTFJTdGFja0l0ZW0gKGZhbHNlKV0uZ2V0 T3B0aW9uICgpOwogICAgICBvcHRpb24gPSBzdGQ6Om1vdmUgKG5ld09wdGlvbik7CiAgICAgIHJl dHVybiBvcHRpb247CiAgICB9CgogICAgLyogRG8gbm90aGluZyBpZiBZWU5PUk1BTCBvciBpZiAq WVlMT1cgPD0gWVlMT1cxLiAgT3RoZXJ3aXNlLCBmaWxsIGluCiAgICAgKiBZWVZTUFtZWUxPVzEg Li4gKllZTE9XLTFdIGFzIGluIHl5ZmlsbGluIGFuZCBzZXQgKllZTE9XID0gWVlMT1cxLgogICAg ICogRm9yIGNvbnZlbmllbmNlLCBhbHdheXMgcmV0dXJuIFlZTE9XMS4gICovCiAgICBpbnQKICAg IHl5ZmlsbCAoZ2xyX3N0YWNrX2l0ZW0gKnl5dnNwLCBpbnQgJnl5bG93LCBpbnQgeXlsb3cxLCBi b29sIHl5bm9ybWFsKQogICAgewogICAgICBpZiAoIXl5bm9ybWFsICYmIHl5bG93MSA8IHl5bG93 KQogICAgICAgIHsKICAgICAgICAgIHl5ZmlsbGluICh5eXZzcCwgeXlsb3csIHl5bG93MSk7CiAg ICAgICAgICB5eWxvdyA9IHl5bG93MTsKICAgICAgICB9CiAgICAgIHJldHVybiB5eWxvdzE7CiAg ICB9CgogICAgLyoqIEZpbGwgaW4gWVlWU1BbWVlMT1cxIC4uIFlZTE9XMC0xXSBmcm9tIHRoZSBj aGFpbiBvZiBzdGF0ZXMgc3RhcnRpbmcKICAgICAqICBhdCBZWVZTUFtZWUxPVzBdLmdldFN0YXRl KCkucHJlZCgpLiAgTGVhdmVzIFlZVlNQW1lZTE9XMV0uZ2V0U3RhdGUoKS5wcmVkKCkKICAgICAq ICBjb250YWluaW5nIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IHN0YXRlIGluIHRoZSBjaGFpbi4g ICovCiAgICB2b2lkCiAgICB5eWZpbGxpbiAoZ2xyX3N0YWNrX2l0ZW0gKnl5dnNwLCBpbnQgeXls b3cwLCBpbnQgeXlsb3cxKQogICAgewogICAgICBnbHJfc3RhdGUqIHMgPSB5eXZzcFt5eWxvdzBd LmdldFN0YXRlKCkucHJlZCgpOwogICAgICBZWUFTU0VSVChzICE9IFlZX05VTExQVFIpOwogICAg ICBmb3IgKGludCBpID0geXlsb3cwLTE7IGkgPj0geXlsb3cxOyBpIC09IDEsIHMgPSBzLT5wcmVk KCkpCiAgICAgICAgewogICAgICAgICAgZ2xyX3N0YXRlJiB5eXMgPSB5eXZzcFtpXS5nZXRTdGF0 ZSgpOwojaWYgWVlERUJVRwogICAgICAgICAgeXlzLnl5bHJTdGF0ZSA9IHMtPnl5bHJTdGF0ZTsK I2VuZGlmCiAgICAgICAgICB5eXMueXlyZXNvbHZlZCA9IHMtPnl5cmVzb2x2ZWQ7CiAgICAgICAg ICBpZiAocy0+eXlyZXNvbHZlZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5ldyAoJnl5 cy52YWx1ZSAoKSkgdmFsdWVfdHlwZSAocy0+dmFsdWUgKCkpOwogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIC8qIFRoZSBlZmZlY3Qgb2YgdXNpbmcgeXl2YWwgb3IgeXls b2MgKGluIGFuIGltbWVkaWF0ZQogICAgICAgICAgICAgKiBydWxlKSBpcyB1bmRlZmluZWQuICAq LwogICAgICAgICAgICB5eXMuc2V0Rmlyc3RWYWwgKFlZX05VTExQVFIpOwogICAgICAgICAgeXlz LnNldFByZWQocy0+cHJlZCgpKTsKICAgICAgICB9CiAgICB9CgojaWYgWVlERUJVRwoKICAgIC8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS4KICAgIHwgUmVwb3J0IHRoYXQgc3RhY2sgI1lZSyBvZiAqWVlTVEFDS1Ag aXMgZ29pbmcgdG8gYmUgcmVkdWNlZCBieSBZWVJVTEUuIHwKICAgIGAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K CiAgICB2b2lkCiAgICB5eV9yZWR1Y2VfcHJpbnQgKGJvb2wgeXlub3JtYWwsIGdscl9zdGFja19p dGVtKiB5eXZzcCwgc3RhdGVfc2V0X2luZGV4IHl5aywKICAgICAgICAgICAgICAgICAgICAgcnVs ZV9udW0geXlydWxlLCBwYXJzZXJfdHlwZSYgeXlwYXJzZXIpCiAgICB7CiAgICAgIGludCB5eW5y aHMgPSB5eXJoc0xlbmd0aCAoeXlydWxlKTsKICAgICAgaW50IHl5aTsKICAgICAgc3RkOjpjZXJy IDw8ICJSZWR1Y2luZyBzdGFjayAiIDw8IHl5ay5nZXQoKSA8PCAiIGJ5IHJ1bGUgIiA8PCB5eXJ1 bGUgLSAxCiAgICAgICAgICAgICAgICA8PCAiIChsaW5lICIgPDwgaW50ICh5eXJsaW5lW3l5cnVs ZV0pIDw8ICIpOlxuIjsKICAgICAgaWYgKCEgeXlub3JtYWwpCiAgICAgICAgeXlmaWxsaW4gKHl5 dnNwLCAxLCAteXlucmhzKTsKICAgICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICov CiAgICAgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKICAgICAgICB7CiAgICAg ICAgICBzdGQ6OmNlcnIgPDwgIiAgICQiIDw8IHl5aSArIDEgPDwgIiA9ICI7CiAgICAgICAgICB5 eXBhcnNlci55eV9zeW1ib2xfcHJpbnRfCiAgICAgICAgICAgICh5eV9hY2Nlc3Npbmdfc3ltYm9s ICh5eXZzcFt5eWkgLSB5eW5yaHMgKyAxXS5nZXRTdGF0ZSgpLnl5bHJTdGF0ZSksCiAgICAgICAg ICAgICB5eXZzcFt5eWkgLSB5eW5yaHMgKyAxXS5nZXRTdGF0ZSgpLnZhbHVlICgpKTsKICAgICAg ICAgIGlmICgheXl2c3BbeXlpIC0geXlucmhzICsgMV0uZ2V0U3RhdGUoKS55eXJlc29sdmVkKQog ICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAodW5yZXNvbHZlZCkiOwogICAgICAgICAgc3RkOjpj ZXJyIDw8ICdcbic7CiAgICAgICAgfQogICAgfQoKCiNkZWZpbmUgWVlJTkRFWChZWVgpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg ICAoKFlZWCkgPT0gWVlfTlVMTFBUUiA/IC0xIDogKFlZWCktPmluZGV4SW4gKHl5aXRlbXMuZGF0 YSAoKSkpCgogICAgdm9pZAogICAgZHVtcFN0YWNrICgpIGNvbnN0CiAgICB7CiAgICAgIGZvciAo c2l6ZV90IHl5aSA9IDA7IHl5aSA8IHNpemUoKTsgKyt5eWkpCiAgICAgICAgewogICAgICAgICAg Y29uc3QgZ2xyX3N0YWNrX2l0ZW0mIGl0ZW0gPSB5eWl0ZW1zW3l5aV07CiAgICAgICAgICBzdGQ6 OmNlcnIgPDwgc3RkOjpzZXR3KDMpIDw8IHl5aSA8PCAiLiAiOwogICAgICAgICAgaWYgKGl0ZW0u aXNfc3RhdGUoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiUmVz OiAiIDw8IGl0ZW0uZ2V0U3RhdGUoKS55eXJlc29sdmVkCiAgICAgICAgICAgICAgICAgICAgICAg IDw8ICIsIExSIFN0YXRlOiAiIDw8IGl0ZW0uZ2V0U3RhdGUoKS55eWxyU3RhdGUKICAgICAgICAg ICAgICAgICAgICAgICAgPDwgIiwgcG9zbjogIiA8PCBpdGVtLmdldFN0YXRlKCkueXlwb3NuCiAg ICAgICAgICAgICAgICAgICAgICAgIDw8ICIsIHByZWQ6ICIgPDwgWVlJTkRFWChpdGVtLmdldFN0 YXRlKCkucHJlZCgpKTsKICAgICAgICAgICAgICBpZiAoISBpdGVtLmdldFN0YXRlKCkueXlyZXNv bHZlZCkKICAgICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiLCBmaXJzdFZhbDogIgogICAgICAg ICAgICAgICAgICAgICAgICAgIDw8IFlZSU5ERVgoaXRlbS5nZXRTdGF0ZSgpLmZpcnN0VmFsKCkp OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBzdGQ6OmNlcnIgPDwgIk9wdGlvbi4gcnVsZTogIiA8PCBpdGVtLmdldE9wdGlvbigpLnl5cnVs ZSAtIDEKICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiwgc3RhdGU6ICIgPDwgWVlJTkRFWChp dGVtLmdldE9wdGlvbigpLnN0YXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIsIG5l eHQ6ICIgPDwgWVlJTkRFWChpdGVtLmdldE9wdGlvbigpLm5leHQoKSk7CiAgICAgICAgICAgIH0K ICAgICAgICAgIHN0ZDo6Y2VyciA8PCAnXG4nOwogICAgICAgIH0KICAgICAgc3RkOjpjZXJyIDw8 ICJUb3BzOiI7CiAgICAgIGZvciAoc3RhdGVfc2V0X2luZGV4IHl5aSA9IGNyZWF0ZV9zdGF0ZV9z ZXRfaW5kZXgoMCk7IHl5aS51Z2V0KCkgPCBudW1Ub3BzKCk7ICsreXlpKSB7CiAgICAgICAgc3Rk OjpjZXJyIDw8IHl5aS5nZXQoKSA8PCAiOiAiIDw8IFlZSU5ERVgodG9wQXQoeXlpKSkgPDwgIjsg IjsKICAgICAgfQogICAgICBzdGQ6OmNlcnIgPDwgJ1xuJzsKICAgIH0KCiN1bmRlZiBZWUlOREVY CiNlbmRpZgoKICAgIFlZUkVTVUxUVEFHCiAgICB5eXJlcG9ydEFtYmlndWl0eSAoY29uc3Qgc2Vt YW50aWNfb3B0aW9uJiB5eXgwLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbWFudGlj X29wdGlvbiYgeXl4MSwgcGFyc2VyX3R5cGUmIHl5cGFyc2VyKQogICAgewogICAgICBZWV9VU0Ug KHl5eDApOwogICAgICBZWV9VU0UgKHl5eDEpOwoKI2lmIFlZREVCVUcKICAgICAgc3RkOjpjZXJy IDw8ICJBbWJpZ3VpdHkgZGV0ZWN0ZWQuXG4iCiAgICAgICAgIk9wdGlvbiAxLFxuIjsKICAgICAg eXl4MC55eXJlcG9ydFRyZWUgKCk7CiAgICAgIHN0ZDo6Y2VyciA8PCAiXG5PcHRpb24gMixcbiI7 CiAgICAgIHl5eDEueXlyZXBvcnRUcmVlICgpOwogICAgICBzdGQ6OmNlcnIgPDwgJ1xuJzsKI2Vu ZGlmCgogICAgICB5eXBhcnNlci5lcnJvciAoWVlfKCJzeW50YXggaXMgYW1iaWd1b3VzIikpOwog ICAgICByZXR1cm4geXlhYm9ydDsKICAgIH0KCiNpZiBZWURFQlVHCiAgICAvKiBQcmludCBZWVMg KHBvc3NpYmx5IE5VTEwpIGFuZCBpdHMgcHJlZGVjZXNzb3JzLiAqLwogICAgdm9pZAogICAgeXlw c3RhdGVzIChjb25zdCBnbHJfc3RhdGUqIHl5cykgY29uc3QKICAgIHsKICAgICAgaWYgKHl5cyAh PSBZWV9OVUxMUFRSKQogICAgICAgIHl5cy0+eXlfeXlwc3RhY2soKTsKICAgICAgZWxzZQogICAg ICAgIHN0ZDo6Y2VyciA8PCAiPG51bGw+IjsKICAgICAgc3RkOjpjZXJyIDw8ICdcbic7CiAgICB9 CiNlbmRpZgoKICBwcml2YXRlOgogICAgc2l6ZV90IHNwYWNlTGVmdCgpIGNvbnN0CiAgICB7CiAg ICAgIHJldHVybiB5eWl0ZW1zLmNhcGFjaXR5KCkgLSB5eWl0ZW1zLnNpemUoKTsKICAgIH0KCiAg ICAvKiogUmV0dXJuIGEgZnJlc2ggR0xSU3RhY2tJdGVtIGluIHRoaXMuICBUaGUgaXRlbSBpcyBh biBMUiBzdGF0ZQogICAgICogIGlmIFlZSVNfU1RBVEUsIGFuZCBvdGhlcndpc2UgYSBzZW1hbnRp YyBvcHRpb24uICBDYWxsZXJzIHNob3VsZCBjYWxsCiAgICAgKiAgeXlyZXNlcnZlU3RhY2sgYWZ0 ZXJ3YXJkcyB0byBtYWtlIHN1cmUgdGhlcmUgaXMgc3VmZmljaWVudAogICAgICogIGhlYWRyb29t LiAgKi8KICAgIHNpemVfdAogICAgeXluZXdHTFJTdGFja0l0ZW0gKGJvb2wgeXlpc19zdGF0ZSkK ICAgIHsKICAgICAgWVlEQVNTRVJUKHl5aXRlbXMuc2l6ZSgpIDwgeXlpdGVtcy5jYXBhY2l0eSgp KTsKICAgICAgeXlpdGVtcy5wdXNoX2JhY2soZ2xyX3N0YWNrX2l0ZW0oeXlpc19zdGF0ZSkpOwog ICAgICByZXR1cm4geXlpdGVtcy5zaXplKCkgLSAxOwogICAgfQoKCiAgcHVibGljOgogICAgc3Rk Ojp2ZWN0b3I8Z2xyX3N0YWNrX2l0ZW0+IHl5aXRlbXM7CiAgICAvLyBXaGVyZSB0aGUgc3RhY2sg c3BsaXRzLiBBbnl0aGluZyBiZWxvdyB0aGlzIGFkZHJlc3MgaXMgZGV0ZXJtaW5pc3RpYy4KICAg IGNvbnN0IGdscl9zdGF0ZSogeXlzcGxpdFBvaW50OwogICAgZ2xyX3N0YXRlX3NldCB5eXRvcHM7 CiAgfTsgLy8gY2xhc3Mgc3RhdGVfc3RhY2sKfSAvLyBuYW1lc3BhY2UKCiN1bmRlZiBZWUZJTEwK I2RlZmluZSBZWUZJTEwoTikgeXlzdGF0ZVN0YWNrLnl5ZmlsbCAoeXl2c3AsIHl5bG93LCAoTiks IHl5bm9ybWFsKQoKbmFtZXNwYWNlIHl5CnsKICBjbGFzcyBwYXJzZXI6Omdscl9zdGFjawogIHsK ICBwdWJsaWM6CgoKICAgIGdscl9zdGFjayAoc2l6ZV90IHl5c2l6ZSwgcGFyc2VyX3R5cGUmIHl5 cGFyc2VyX3l5YXJnKQogICAgICA6IHl5ZXJyU3RhdGUgKDApCiAgICAgICwgeXlzdGF0ZVN0YWNr ICh5eXNpemUpCiAgICAgICwgeXllcnJjbnQgKDApCiAgICAgICwgeXlsYSAoKQogICAgICAsIHl5 cGFyc2VyICh5eXBhcnNlcl95eWFyZykKICAgIHt9CgogICAgfmdscl9zdGFjayAoKQogICAgewog ICAgICBpZiAoIXRoaXMtPnl5bGEuZW1wdHkgKCkpCiAgICAgICAgeXlwYXJzZXIueXlfZGVzdHJv eV8gKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoaXMtPnl5bGEua2luZCAoKSwgdGhpcy0+eXlsYS52YWx1ZSk7CiAgICAgIHBv cGFsbF8gKCk7CiAgICB9CgogICAgaW50IHl5ZXJyU3RhdGU7CgogICAgc3RhdGVfc3RhY2sgeXlz dGF0ZVN0YWNrOwogICAgaW50IHl5ZXJyY250OwogICAgc3ltYm9sX3R5cGUgeXlsYTsKICAgIFlZ Sk1QX0JVRiB5eWV4Y2VwdGlvbl9idWZmZXI7CiAgICBwYXJzZXJfdHlwZSYgeXlwYXJzZXI7Cgog ICNkZWZpbmUgWVlDSEsxKFlZRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAogICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICBzd2l0 Y2ggKFlZRSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAogICAgICBjYXNlIHl5b2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIGJyZWFrOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAogICAgICBjYXNlIHl5YWJvcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIGdvdG8geXlhYm9ydGxhYjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg ICBjYXNlIHl5YWNjZXB0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAogICAgICAgIGdvdG8geXlhY2NlcHRsYWI7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICBjYXNlIHl5 ZXJyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAogICAgICAgIGdvdG8geXl1c2VyX2Vycm9yOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICBkZWZhdWx0OiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAogICAgICAgIGdvdG8geXlidWdsYWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfSB3 aGlsZSAoZmFsc2UpCgogICAgaW50CiAgICBwYXJzZSAoKQogICAgewogICAgICBpbnQgeXlyZXN1 bHQ7CiAgICAgIHNpemVfdCB5eXBvc247CgogICAgICBZWUNERUJVRyA8PCAiU3RhcnRpbmcgcGFy c2VcbiI7CgogICAgICB0aGlzLT55eWxhLmNsZWFyICgpOwoKICAgICAgc3dpdGNoIChZWVNFVEpN UCAodGhpcy0+eXlleGNlcHRpb25fYnVmZmVyKSkKICAgICAgICB7CiAgICAgICAgY2FzZSAwOiBi cmVhazsKICAgICAgICBjYXNlIDE6IGdvdG8geXlhYm9ydGxhYjsKICAgICAgICBjYXNlIDI6IGdv dG8geXlleGhhdXN0ZWRsYWI7CiAgICAgICAgZGVmYXVsdDogZ290byB5eWJ1Z2xhYjsKICAgICAg ICB9CiAgICAgIHRoaXMtPnl5Z2xyU2hpZnQgKGNyZWF0ZV9zdGF0ZV9zZXRfaW5kZXgoMCksIDAs IDAsIHRoaXMtPnl5bGEudmFsdWUpOwogICAgICB5eXBvc24gPSAwOwoKICAgICAgd2hpbGUgKHRy dWUpCiAgICAgICAgewogICAgICAgICAgLyogRm9yIGVmZmljaWVuY3ksIHdlIGhhdmUgdHdvIGxv b3BzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggaXMKICAgICAgICAgICAgIHNwZWNpYWxpemVkIHRvIGRl dGVybWluaXN0aWMgb3BlcmF0aW9uIChzaW5nbGUgc3RhY2ssIG5vCiAgICAgICAgICAgICBwb3Rl bnRpYWwgYW1iaWd1aXR5KS4gICovCiAgICAgICAgICAvKiBTdGFuZGFyZCBtb2RlICovCiAgICAg ICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IHN0YXRl X251bSB5eXN0YXRlID0gdGhpcy0+Zmlyc3RUb3BTdGF0ZSgpLT55eWxyU3RhdGU7CiAgICAgICAg ICAgICAgWVlDREVCVUcgPDwgIkVudGVyaW5nIHN0YXRlICIgPDwgeXlzdGF0ZSA8PCAnXG4nOwog ICAgICAgICAgICAgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCiAgICAgICAgICAgICAgICBnb3Rv IHl5YWNjZXB0bGFiOwogICAgICAgICAgICAgIGlmICh5eV9pc19kZWZhdWx0ZWRfc3RhdGUgKHl5 c3RhdGUpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBydWxlX251 bSB5eXJ1bGUgPSB5eV9kZWZhdWx0X2FjdGlvbiAoeXlzdGF0ZSk7CiAgICAgICAgICAgICAgICAg IGlmICh5eXJ1bGUgPT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICB0aGlzLT55eXJlcG9ydFN5bnRheEVycm9yICgpOwogICAgICAgICAgICAgICAgICAgICAg Z290byB5eXVzZXJfZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICBZWUNISzEgKHRoaXMtPnl5Z2xyUmVkdWNlIChjcmVhdGVfc3RhdGVfc2V0X2luZGV4KDApLCB5 eXJ1bGUsIHRydWUpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHl5Z2V0X3Rva2VuICgpOwogICAgICAgICAg ICAgICAgICBjb25zdCBzaG9ydCogeXljb25mbGljdHM7CiAgICAgICAgICAgICAgICAgIGNvbnN0 IGludCB5eWFjdGlvbiA9IHl5Z2V0TFJBY3Rpb25zICh5eXN0YXRlLCB0aGlzLT55eWxhLmtpbmQg KCksIHl5Y29uZmxpY3RzKTsKICAgICAgICAgICAgICAgICAgaWYgKCp5eWNvbmZsaWN0cyAhPSAw KQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICBpZiAoeXlfaXNf c2hpZnRfYWN0aW9uICh5eWFjdGlvbikpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB0aGlzLT55eWxhLmtpbmQg KCksIHRoaXMtPnl5bGEudmFsdWUsIHRoaXMtPnl5bGEubG9jYXRpb24pOwogICAgICAgICAgICAg ICAgICAgICAgeXlwb3NuICs9IDE7CiAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ug c2hvdWxkIG1vdmUgeXlsdmFsLgogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+eXlnbHJTaGlm dCAoY3JlYXRlX3N0YXRlX3NldF9pbmRleCgwKSwgeXlhY3Rpb24sIHl5cG9zbiwgdGhpcy0+eXls YS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICB5eWxhLmNsZWFyICgpOwogICAgICAgICAg ICAgICAgICAgICAgaWYgKDAgPCB0aGlzLT55eWVyclN0YXRlKQogICAgICAgICAgICAgICAgICAg ICAgICB0aGlzLT55eWVyclN0YXRlIC09IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICBlbHNlIGlmICh5eV9pc19lcnJvcl9hY3Rpb24gKHl5YWN0aW9uKSkKICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBpc3N1ZSBhbiBl cnJvciBtZXNzYWdlIGFnYWluIGZvciBleGNlcHRpb25zCiAgICAgICAgICAgICAgICAgICAgICAg ICB0aHJvd24gZnJvbSB0aGUgc2Nhbm5lci4gICovCiAgICAgICAgICAgICAgICAgICAgICBpZiAo dGhpcy0+eXlsYS5raW5kICgpICE9IHN5bWJvbF9raW5kOjpTX1lZZXJyb3IpCiAgICAgICAgICAg ICAgICAgICAgICAgIHRoaXMtPnl5cmVwb3J0U3ludGF4RXJyb3IgKCk7CiAgICAgICAgICAgICAg ICAgICAgICBnb3RvIHl5dXNlcl9lcnJvcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBZWUNISzEgKHRoaXMtPnl5Z2xyUmVk dWNlIChjcmVhdGVfc3RhdGVfc2V0X2luZGV4KDApLCAteXlhY3Rpb24sIHRydWUpKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgZm9yIChzdGF0ZV9zZXRfaW5kZXggeXlzID0gY3JlYXRlX3N0 YXRlX3NldF9pbmRleCgwKTsgeXlzLnVnZXQoKSA8IHRoaXMtPnl5c3RhdGVTdGFjay5udW1Ub3Bz KCk7ICsreXlzKQogICAgICAgICAgICAgICAgdGhpcy0+eXlzdGF0ZVN0YWNrLnl5dG9wcy5zZXRM b29rYWhlYWROZWVkcyh5eXMsICF0aGlzLT55eWxhLmVtcHR5ICgpKTsKCiAgICAgICAgICAgICAg LyogeXlwcm9jZXNzT25lU3RhY2sgcmV0dXJucyBvbmUgb2YgdGhyZWUgdGhpbmdzOgoKICAgICAg ICAgICAgICAgICAgLSBBbiBlcnJvciBmbGFnLiAgSWYgdGhlIGNhbGxlciBpcyB5eXByb2Nlc3NP bmVTdGFjaywgaXQKICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseSByZXR1cm5zIGFzIHdl bGwuICBXaGVuIHRoZSBjYWxsZXIgaXMgZmluYWxseQogICAgICAgICAgICAgICAgICAgIHl5cGFy c2UsIGl0IGp1bXBzIHRvIGFuIGVycm9yIGxhYmVsIHZpYSBZWUNISzEuCgogICAgICAgICAgICAg ICAgICAtIHl5b2ssIGJ1dCB5eXByb2Nlc3NPbmVTdGFjayBoYXMgaW52b2tlZCB5eW1hcmtTdGFj a0RlbGV0ZWQKICAgICAgICAgICAgICAgICAgICAoeXlzKSwgd2hpY2ggc2V0cyB0aGUgdG9wIHN0 YXRlIG9mIHl5cyB0byBOVUxMLiAgVGh1cywKICAgICAgICAgICAgICAgICAgICB5eXBhcnNlJ3Mg Zm9sbG93aW5nIGludm9jYXRpb24gb2YgeXlyZW1vdmVEZWxldGVzIHdpbGwgcmVtb3ZlCiAgICAg ICAgICAgICAgICAgICAgdGhlIHN0YWNrLgoKICAgICAgICAgICAgICAgICAgLSB5eW9rLCB3aGVu IHJlYWR5IHRvIHNoaWZ0IGEgdG9rZW4uCgogICAgICAgICAgICAgICAgIEV4Y2VwdCBpbiB0aGUg Zmlyc3QgY2FzZSwgeXlwYXJzZSB3aWxsIGludm9rZSB5eXJlbW92ZURlbGV0ZXMgYW5kCiAgICAg ICAgICAgICAgICAgdGhlbiBzaGlmdCB0aGUgbmV4dCB0b2tlbiBvbnRvIGFsbCByZW1haW5pbmcg c3RhY2tzLiAgVGhpcwogICAgICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgc2hp ZnQgKHRoYXQgaXMsIGFmdGVyIGFsbCBwcmVjZWRpbmcKICAgICAgICAgICAgICAgICByZWR1Y3Rp b25zIG9uIGFsbCBzdGFja3MpIGhlbHBzIHByZXZlbnQgZG91YmxlIGRlc3RydWN0b3IgY2FsbHMK ICAgICAgICAgICAgICAgICBvbiB5eWx2YWwgaW4gdGhlIGV2ZW50IG9mIG1lbW9yeSBleGhhdXN0 aW9uLiAgKi8KCiAgICAgICAgICAgICAgZm9yIChzdGF0ZV9zZXRfaW5kZXggeXlzID0gY3JlYXRl X3N0YXRlX3NldF9pbmRleCAoMCk7IHl5cy51Z2V0ICgpIDwgdGhpcy0+eXlzdGF0ZVN0YWNrLm51 bVRvcHMgKCk7ICsreXlzKQogICAgICAgICAgICAgICAgWVlDSEsxICh0aGlzLT55eXByb2Nlc3NP bmVTdGFjayAoeXlzLCB5eXBvc24pKTsKICAgICAgICAgICAgICB0aGlzLT55eXN0YXRlU3RhY2su eXl0b3BzLnl5cmVtb3ZlRGVsZXRlcyAoKTsKICAgICAgICAgICAgICBpZiAodGhpcy0+eXlzdGF0 ZVN0YWNrLnl5dG9wcy5zaXplKCkgPT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgdGhpcy0+eXlzdGF0ZVN0YWNrLnl5dG9wcy55eXVuZGVsZXRlTGFzdFN0YWNrICgpOwog ICAgICAgICAgICAgICAgICBpZiAodGhpcy0+eXlzdGF0ZVN0YWNrLnl5dG9wcy5zaXplKCkgPT0g MCkKICAgICAgICAgICAgICAgICAgICB0aGlzLT55eUZhaWwgKFlZXygic3ludGF4IGVycm9yIikp OwogICAgICAgICAgICAgICAgICBZWUNISzEgKHRoaXMtPnl5cmVzb2x2ZVN0YWNrICgpKTsKICAg ICAgICAgICAgICAgICAgWVlDREVCVUcgPDwgIlJldHVybmluZyB0byBkZXRlcm1pbmlzdGljIG9w ZXJhdGlvbi5cbiI7CiAgICAgICAgICAgICAgICAgIHRoaXMtPnl5cmVwb3J0U3ludGF4RXJyb3Ig KCk7CiAgICAgICAgICAgICAgICAgIGdvdG8geXl1c2VyX2Vycm9yOwogICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAvKiBJZiBhbnkgeXlnbHJTaGlmdCBjYWxsIGZhaWxzLCBpdCB3aWxs IGZhaWwgYWZ0ZXIgc2hpZnRpbmcuICBUaHVzLAogICAgICAgICAgICAgICAgIGEgY29weSBvZiB5 eWx2YWwgd2lsbCBhbHJlYWR5IGJlIG9uIHN0YWNrIDAgaW4gdGhlIGV2ZW50IG9mIGEKICAgICAg ICAgICAgICAgICBmYWlsdXJlIGluIHRoZSBmb2xsb3dpbmcgbG9vcC4gIFRodXMsIHl5bGEgaXMg ZW1wdGllZAogICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgbG9vcCB0byBtYWtlIHN1cmUgdGhl IHVzZXIgZGVzdHJ1Y3RvciBmb3IgeXlsdmFsIGlzbid0CiAgICAgICAgICAgICAgICAgY2FsbGVk IHR3aWNlLiAgKi8KICAgICAgICAgICAgICBzeW1ib2xfa2luZF90eXBlIHl5dG9rZW5fdG9fc2hp ZnQgPSB0aGlzLT55eWxhLmtpbmQgKCk7CiAgICAgICAgICAgICAgdGhpcy0+eXlsYS5raW5kXyA9 IHN5bWJvbF9raW5kOjpTX1lZRU1QVFk7CiAgICAgICAgICAgICAgeXlwb3NuICs9IDE7CiAgICAg ICAgICAgICAgZm9yIChzdGF0ZV9zZXRfaW5kZXggeXlzID0gY3JlYXRlX3N0YXRlX3NldF9pbmRl eCAoMCk7IHl5cy51Z2V0ICgpIDwgdGhpcy0+eXlzdGF0ZVN0YWNrLm51bVRvcHMgKCk7ICsreXlz KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZV9udW0geXlz dGF0ZSA9IHRoaXMtPnRvcFN0YXRlICh5eXMpLT55eWxyU3RhdGU7CiAgICAgICAgICAgICAgICAg IGNvbnN0IHNob3J0KiB5eWNvbmZsaWN0czsKICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHl5 YWN0aW9uID0geXlnZXRMUkFjdGlvbnMgKHl5c3RhdGUsIHl5dG9rZW5fdG9fc2hpZnQsIHl5Y29u ZmxpY3RzKTsKICAgICAgICAgICAgICAgICAgLyogTm90ZSB0aGF0IHl5Y29uZmxpY3RzIHdlcmUg aGFuZGxlZCBieSB5eXByb2Nlc3NPbmVTdGFjay4gICovCiAgICAgICAgICAgICAgICAgIFlZQ0RF QlVHIDw8ICJPbiBzdGFjayAiIDw8IHl5cy5nZXQoKSA8PCAiLCAiOwogICAgICAgICAgICAgICAg ICBZWV9TWU1CT0xfUFJJTlQgKCJzaGlmdGluZyIsIHl5dG9rZW5fdG9fc2hpZnQsIHRoaXMtPnl5 bGEudmFsdWUsIHRoaXMtPnl5bGEubG9jYXRpb24pOwogICAgICAgICAgICAgICAgICB0aGlzLT55 eWdsclNoaWZ0ICh5eXMsIHl5YWN0aW9uLCB5eXBvc24sIHRoaXMtPnl5bGEudmFsdWUpOwogICAg ICAgICAgICAgICAgICBZWUNERUJVRyA8PCAiU3RhY2sgIiA8PCB5eXMuZ2V0KCkgPDwgIiBub3cg aW4gc3RhdGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB0aGlzLT50b3BTdGF0ZSh5 eXMpLT55eWxyU3RhdGUgPDwgJ1xuJzsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAg IGlmICh0aGlzLT55eXN0YXRlU3RhY2sueXl0b3BzLnNpemUgKCkgPT0gMSkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgWVlDSEsxICh0aGlzLT55eXJlc29sdmVTdGFjayAoKSk7 CiAgICAgICAgICAgICAgICAgIFlZQ0RFQlVHIDw8ICJSZXR1cm5pbmcgdG8gZGV0ZXJtaW5pc3Rp YyBvcGVyYXRpb24uXG4iOwogICAgICAgICAgICAgICAgICB0aGlzLT55eXN0YXRlU3RhY2sueXlj b21wcmVzc1N0YWNrICgpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgICAgY29udGludWU7CiAgICAgICAgeXl1c2VyX2Vycm9y OgogICAgICAgICAgdGhpcy0+eXlyZWNvdmVyU3ludGF4RXJyb3IgKCk7CiAgICAgICAgICB5eXBv c24gPSB0aGlzLT5maXJzdFRvcFN0YXRlKCktPnl5cG9zbjsKICAgICAgICB9CgogICAgeXlhY2Nl cHRsYWI6CiAgICAgIHl5cmVzdWx0ID0gMDsKICAgICAgZ290byB5eXJldHVybjsKCiAgICB5eWJ1 Z2xhYjoKICAgICAgWVlBU1NFUlQgKGZhbHNlKTsKICAgICAgZ290byB5eWFib3J0bGFiOwoKICAg IHl5YWJvcnRsYWI6CiAgICAgIHl5cmVzdWx0ID0gMTsKICAgICAgZ290byB5eXJldHVybjsKCiAg ICB5eWV4aGF1c3RlZGxhYjoKICAgICAgeXlwYXJzZXIuZXJyb3IgKFlZXygibWVtb3J5IGV4aGF1 c3RlZCIpKTsKICAgICAgeXlyZXN1bHQgPSAyOwogICAgICBnb3RvIHl5cmV0dXJuOwoKICAgIHl5 cmV0dXJuOgogICAgICByZXR1cm4geXlyZXN1bHQ7CiAgICB9CiAgI3VuZGVmIFlZQ0hLMQoKICAg IHZvaWQgeXlyZXNlcnZlR2xyU3RhY2sgKCkKICAgIHsKICAgICAgaWYgKCF5eXN0YXRlU3RhY2su eXlleHBhbmRHTFJTdGFja0lmTmVlZGVkICgpKQogICAgICAgIHl5TWVtb3J5RXhoYXVzdGVkICgp OwogICAgfQoKICAgIF9Ob3JldHVybiB2b2lkCiAgICB5eU1lbW9yeUV4aGF1c3RlZCAoKQogICAg ewogICAgICBZWUxPTkdKTVAgKHl5ZXhjZXB0aW9uX2J1ZmZlciwgMik7CiAgICB9CgogICAgX05v cmV0dXJuIHZvaWQKICAgIHl5RmFpbCAoY29uc3QgY2hhciogeXltc2cpCiAgICB7CiAgICAgIGlm ICh5eW1zZyAhPSBZWV9OVUxMUFRSKQogICAgICAgIHl5cGFyc2VyLmVycm9yICh5eW1zZyk7CiAg ICAgIFlZTE9OR0pNUCAoeXlleGNlcHRpb25fYnVmZmVyLCAxKTsKICAgIH0KCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBHTFJTdGF0ZXMgKi8KCgogICAgLyoqIEFkZCBhIG5l dyBzZW1hbnRpYyBhY3Rpb24gdGhhdCB3aWxsIGV4ZWN1dGUgdGhlIGFjdGlvbiBmb3IgcnVsZQog ICAgICogIFlZUlVMRSBvbiB0aGUgc2VtYW50aWMgdmFsdWVzIGluIFlZUkhTIHRvIHRoZSBsaXN0 IG9mCiAgICAgKiAgYWx0ZXJuYXRpdmUgYWN0aW9ucyBmb3IgWVlTVEFURS4gIEFzc3VtZXMgdGhh dCBZWVJIUyBjb21lcyBmcm9tCiAgICAgKiAgc3RhY2sgI1lZSyBvZiAqdGhpcy4gKi8KICAgIHZv aWQKICAgIHl5YWRkRGVmZXJyZWRBY3Rpb24gKHN0YXRlX3NldF9pbmRleCB5eWssIGdscl9zdGF0 ZSogeXlzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGdscl9zdGF0ZSogeXlyaHMsIHJ1 bGVfbnVtIHl5cnVsZSkKICAgIHsKICAgICAgc2VtYW50aWNfb3B0aW9uJiB5eW9wdCA9IHl5c3Rh dGVTdGFjay55eW5ld1NlbWFudGljT3B0aW9uIChzZW1hbnRpY19vcHRpb24gKHl5cnVsZSkpOwog ICAgICB5eW9wdC5zZXRTdGF0ZSAoeXlyaHMpOwogICAgICB5eW9wdC5zZXROZXh0ICh5eXN0YXRl LT5maXJzdFZhbCAoKSk7CiAgICAgIGlmICh5eXN0YXRlU3RhY2sueXl0b3BzLmxvb2thaGVhZE5l ZWRzICh5eWspKQogICAgICAgIHl5b3B0Lnl5bGEgPSB0aGlzLT55eWxhOwogICAgICB5eXN0YXRl LT5zZXRGaXJzdFZhbCAoJnl5b3B0KTsKCiAgICAgIHl5cmVzZXJ2ZUdsclN0YWNrICgpOwogICAg fQoKICAjaWYgWVlERUJVRwogICAgdm9pZCB5eXBkdW1wc3RhY2sgKCkgY29uc3QKICAgIHsKICAg ICAgeXlzdGF0ZVN0YWNrLmR1bXBTdGFjaygpOwogICAgfQogICNlbmRpZgoKICAgIHZvaWQKICAg IHl5cmVwb3J0U3ludGF4RXJyb3IgKCkKICAgIHsKICAgICAgaWYgKHl5ZXJyU3RhdGUgIT0gMCkK ICAgICAgICByZXR1cm47CgogICAgICBzdGQ6OnN0cmluZyBtc2cgPSBZWV8oInN5bnRheCBlcnJv ciIpOwogICAgICB5eXBhcnNlci5lcnJvciAoWVlfTU9WRSAobXNnKSk7CiAgICAgIHl5ZXJyY250 ICs9IDE7CiAgICB9CgogICAgLyogUmVjb3ZlciBmcm9tIGEgc3ludGF4IGVycm9yIG9uIHRoaXMs IGFzc3VtaW5nIHRoYXQgeXl0b2tlbiwKICAgICAgIHl5bHZhbCwgYW5kIHl5bGxvYyBhcmUgdGhl IHN5bnRhY3RpYyBjYXRlZ29yeSwgc2VtYW50aWMgdmFsdWUsIGFuZCBsb2NhdGlvbgogICAgICAg b2YgdGhlIGxvb2thaGVhZC4gICovCiAgICB2b2lkCiAgICB5eXJlY292ZXJTeW50YXhFcnJvciAo KQogICAgewogICAgICBpZiAoeXllcnJTdGF0ZSA9PSAzKQogICAgICAgIC8qIFdlIGp1c3Qgc2hp ZnRlZCB0aGUgZXJyb3IgdG9rZW4gYW5kIChwZXJoYXBzKSB0b29rIHNvbWUKICAgICAgICAgICBy ZWR1Y3Rpb25zLiAgU2tpcCB0b2tlbnMgdW50aWwgd2UgY2FuIHByb2NlZWQuICAqLwogICAgICAg IHdoaWxlICh0cnVlKQogICAgICAgICAgewogICAgICAgICAgICBpZiAodGhpcy0+eXlsYS5raW5k ICgpID09IHN5bWJvbF9raW5kOjpTX1lZRU9GKQogICAgICAgICAgICAgIHl5RmFpbCAoWVlfTlVM TFBUUik7CiAgICAgICAgICAgIGlmICh0aGlzLT55eWxhLmtpbmQgKCkgIT0gc3ltYm9sX2tpbmQ6 OlNfWVlFTVBUWSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB5eXBhcnNlci55eV9k ZXN0cm95XyAoIkVycm9yOiBkaXNjYXJkaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aGlzLT55eWxhLmtpbmQgKCksIHRoaXMtPnl5bGEudmFsdWUpOwogICAgICAg ICAgICAgICAgdGhpcy0+eXlsYS5raW5kXyA9IHN5bWJvbF9raW5kOjpTX1lZRU1QVFk7CiAgICAg ICAgICAgICAgfQogICAgICAgICAgICB5eWdldF90b2tlbiAoKTsKICAgICAgICAgICAgaW50IHl5 aiA9IHl5cGFjdFtmaXJzdFRvcFN0YXRlKCktPnl5bHJTdGF0ZV07CiAgICAgICAgICAgIGlmICh5 eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXlqKSkKICAgICAgICAgICAgICByZXR1cm47CiAgICAg ICAgICAgIHl5aiArPSB0aGlzLT55eWxhLmtpbmQgKCk7CiAgICAgICAgICAgIGlmICh5eWogPCAw IHx8IFlZTEFTVCA8IHl5aiB8fCB5eWNoZWNrW3l5al0gIT0gdGhpcy0+eXlsYS5raW5kICgpKQog ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICh5eWRlZmFjdFtmaXJzdFRvcFN0YXRl KCktPnl5bHJTdGF0ZV0gIT0gMCkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg ICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoISB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eXRh YmxlW3l5al0pKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgIGlmICgh eXlzdGF0ZVN0YWNrLnJlZHVjZVRvT25lU3RhY2soKSkKICAgICAgICB5eUZhaWwgKFlZX05VTExQ VFIpOwoKICAgICAgLyogTm93IHBvcCBzdGFjayB1bnRpbCB3ZSBmaW5kIGEgc3RhdGUgdGhhdCBz aGlmdHMgdGhlIGVycm9yIHRva2VuLiAgKi8KICAgICAgeXllcnJTdGF0ZSA9IDM7CiAgICAgIHdo aWxlIChmaXJzdFRvcFN0YXRlICgpICE9IFlZX05VTExQVFIpCiAgICAgICAgewogICAgICAgICAg Z2xyX3N0YXRlICp5eXMgPSBmaXJzdFRvcFN0YXRlICgpOwogICAgICAgICAgaW50IHl5aiA9IHl5 cGFjdFt5eXMtPnl5bHJTdGF0ZV07CiAgICAgICAgICBpZiAoISB5eXBhY3RfdmFsdWVfaXNfZGVm YXVsdCAoeXlqKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHl5aiArPSBZWVRFUlJPUjsK ICAgICAgICAgICAgICBpZiAoMCA8PSB5eWogJiYgeXlqIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5 al0gPT0gWVlURVJST1IKICAgICAgICAgICAgICAgICAgJiYgeXlfaXNfc2hpZnRfYWN0aW9uICh5 eXRhYmxlW3l5al0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAvKiBTaGlm dCB0aGUgZXJyb3IgdG9rZW4uICAqLwogICAgICAgICAgICAgICAgICBZWV9TWU1CT0xfUFJJTlQg KCJTaGlmdGluZyIsIHl5X2FjY2Vzc2luZ19zeW1ib2wgKHl5dGFibGVbeXlqXSksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+eXlsYS52YWx1ZSwgeXllcnJsb2MpOwog ICAgICAgICAgICAgICAgICB5eWdsclNoaWZ0IChjcmVhdGVfc3RhdGVfc2V0X2luZGV4KDApLCB5 eXRhYmxlW3l5al0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5cy0+eXlwb3NuLCB5 eWxhLnZhbHVlKTsKICAgICAgICAgICAgICAgICAgeXlzID0gZmlyc3RUb3BTdGF0ZSgpOwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg ICAgICAgaWYgKHl5cy0+cHJlZCgpICE9IFlZX05VTExQVFIpCiAgICAgICAgICAgIHl5cy0+ZGVz dHJveSAoIkVycm9yOiBwb3BwaW5nIiwgeXlwYXJzZXIpOwogICAgICAgICAgeXlzdGF0ZVN0YWNr LnNldEZpcnN0VG9wKHl5cy0+cHJlZCgpKTsKICAgICAgICAgIHl5c3RhdGVTdGFjay5wb3BfYmFj aygpOwogICAgICAgIH0KICAgICAgaWYgKGZpcnN0VG9wU3RhdGUoKSA9PSBZWV9OVUxMUFRSKQog ICAgICAgIHl5RmFpbCAoWVlfTlVMTFBUUik7CiAgICB9CgogICAgWVlSRVNVTFRUQUcKICAgIHl5 cHJvY2Vzc09uZVN0YWNrIChzdGF0ZV9zZXRfaW5kZXggeXlrLAogICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCB5eXBvc24pCiAgICB7CiAgICAgIHdoaWxlICh5eXN0YXRlU3RhY2sudG9wQXQo eXlrKSAhPSBZWV9OVUxMUFRSKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IHN0YXRlX251bSB5 eXN0YXRlID0gdG9wU3RhdGUoeXlrKS0+eXlsclN0YXRlOwogICAgICAgICAgWVlDREVCVUcgPDwg IlN0YWNrICIgPDwgeXlrLmdldCgpCiAgICAgICAgICAgICAgICAgICA8PCAiIEVudGVyaW5nIHN0 YXRlICIgPDwgeXlzdGF0ZSA8PCAnXG4nOwoKICAgICAgICAgIFlZQVNTRVJUICh5eXN0YXRlICE9 IFlZRklOQUwpOwoKICAgICAgICAgIGlmICh5eV9pc19kZWZhdWx0ZWRfc3RhdGUgKHl5c3RhdGUp KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgcnVsZV9udW0geXlydWxlID0geXlf ZGVmYXVsdF9hY3Rpb24gKHl5c3RhdGUpOwogICAgICAgICAgICAgIGlmICh5eXJ1bGUgPT0gMCkK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgWVlDREVCVUcgPDwgIlN0YWNrICIg PDwgeXlrLmdldCgpIDw8ICIgZGllcy5cbiI7CiAgICAgICAgICAgICAgICAgIHl5c3RhdGVTdGFj ay55eXRvcHMueXltYXJrU3RhY2tEZWxldGVkICh5eWspOwogICAgICAgICAgICAgICAgICByZXR1 cm4geXlvazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjb25zdCBZWVJFU1VMVFRB RyB5eWZsYWcKICAgICAgICAgICAgICAgID0geXlnbHJSZWR1Y2UgKHl5aywgeXlydWxlLCB5eWlt bWVkaWF0ZVt5eXJ1bGVdKTsKICAgICAgICAgICAgICBpZiAoeXlmbGFnID09IHl5ZXJyKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBZWUNERUJVRyA8PCAiU3RhY2sgIiA8PCB5 eWsuZ2V0KCkgPDwgIiBkaWVzIgogICAgICAgICAgICAgICAgICAgICIgKHByZWRpY2F0ZSBmYWls dXJlIG9yIGV4cGxpY2l0IHVzZXIgZXJyb3IpLlxuIjsKICAgICAgICAgICAgICAgICAgeXlzdGF0 ZVN0YWNrLnl5dG9wcy55eW1hcmtTdGFja0RlbGV0ZWQgKHl5ayk7CiAgICAgICAgICAgICAgICAg IHJldHVybiB5eW9rOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh5eWZsYWcg IT0geXlvaykKICAgICAgICAgICAgICAgIHJldHVybiB5eWZsYWc7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIHl5c3RhdGVTdGFjay55eXRv cHMuc2V0TG9va2FoZWFkTmVlZHMoeXlrLCB0cnVlKTsKICAgICAgICAgICAgICB5eWdldF90b2tl biAoKTsKICAgICAgICAgICAgICBjb25zdCBzaG9ydCogeXljb25mbGljdHM7CiAgICAgICAgICAg ICAgY29uc3QgaW50IHl5YWN0aW9uID0geXlnZXRMUkFjdGlvbnMgKHl5c3RhdGUsIHRoaXMtPnl5 bGEua2luZCAoKSwgeXljb25mbGljdHMpOwoKICAgICAgICAgICAgICBmb3IgKDsgKnl5Y29uZmxp Y3RzICE9IDA7ICsreXljb25mbGljdHMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgIHN0YXRlX3NldF9pbmRleCB5eW5ld1N0YWNrID0geXlzdGF0ZVN0YWNrLnl5c3BsaXRTdGFj ayAoeXlrKTsKICAgICAgICAgICAgICAgICAgWVlDREVCVUcgPDwgIlNwbGl0dGluZyBvZmYgc3Rh Y2sgIiA8PCB5eW5ld1N0YWNrLmdldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIg ZnJvbSAiIDw8IHl5ay5nZXQoKSA8PCAiLlxuIjsKICAgICAgICAgICAgICAgICAgWVlSRVNVTFRU QUcgeXlmbGFnID0KICAgICAgICAgICAgICAgICAgICB5eWdsclJlZHVjZSAoeXluZXdTdGFjaywg Knl5Y29uZmxpY3RzLCB5eWltbWVkaWF0ZVsqeXljb25mbGljdHNdKTsKICAgICAgICAgICAgICAg ICAgaWYgKHl5ZmxhZyA9PSB5eW9rKQogICAgICAgICAgICAgICAgICAgIFlZQ0hLICh5eXByb2Nl c3NPbmVTdGFjayAoeXluZXdTdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHl5cG9zbikpOwogICAgICAgICAgICAgICAgICBlbHNlIGlmICh5eWZsYWcg PT0geXllcnIpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgWVlD REVCVUcgPDwgIlN0YWNrICIgPDwgeXluZXdTdGFjay5nZXQoKSA8PCAiIGRpZXMuXG4iOwogICAg ICAgICAgICAgICAgICAgICAgeXlzdGF0ZVN0YWNrLnl5dG9wcy55eW1hcmtTdGFja0RlbGV0ZWQg KHl5bmV3U3RhY2spOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgIHJldHVybiB5eWZsYWc7CiAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgIGlmICh5eV9pc19zaGlmdF9hY3Rpb24gKHl5YWN0aW9uKSkKICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGVsc2UgaWYgKHl5X2lzX2Vycm9yX2FjdGlvbiAo eXlhY3Rpb24pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBZWUNERUJVRyA8 PCAiU3RhY2sgIiA8PCB5eWsuZ2V0KCkgPDwgIiBkaWVzLlxuIjsKICAgICAgICAgICAgICAgICAg eXlzdGF0ZVN0YWNrLnl5dG9wcy55eW1hcmtTdGFja0RlbGV0ZWQgKHl5ayk7CiAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgWVlSRVNVTFRUQUcgeXlmbGFnCiAgICAgICAg ICAgICAgICAgICAgPSB5eWdsclJlZHVjZSAoeXlrLCAteXlhY3Rpb24sIHl5aW1tZWRpYXRlWy15 eWFjdGlvbl0pOwogICAgICAgICAgICAgICAgICBpZiAoeXlmbGFnID09IHl5ZXJyKQogICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIFlZQ0RFQlVHIDw8ICJTdGFjayAi IDw8IHl5ay5nZXQoKSA8PCAiIGRpZXMiCiAgICAgICAgICAgICAgICAgICAgICAgICIgKHByZWRp Y2F0ZSBmYWlsdXJlIG9yIGV4cGxpY2l0IHVzZXIgZXJyb3IpLlxuIjsKICAgICAgICAgICAgICAg ICAgICAgIHl5c3RhdGVTdGFjay55eXRvcHMueXltYXJrU3RhY2tEZWxldGVkICh5eWspOwogICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICBlbHNlIGlmICh5eWZsYWcgIT0geXlvaykKICAgICAgICAgICAgICAgICAgICByZXR1 cm4geXlmbGFnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4geXlvazsKICAgIH0KCiAgICAvKiogUGVyZm9ybSB1c2VyIGFjdGlvbiBmb3IgcnVs ZSBudW1iZXIgWVlOLCB3aXRoIFJIUyBsZW5ndGggWVlSSFNMRU4sCiAgICAgKiAgYW5kIHRvcCBz dGFjayBpdGVtIFlZVlNQLiAgWVlWQUxQIHBvaW50cyB0byBwbGFjZSB0byBwdXQgc2VtYW50aWMK ICAgICAqICB2YWx1ZSAoJCQpLCBhbmQgeXlsb2NwIHBvaW50cyB0byBwbGFjZSBmb3IgbG9jYXRp b24gaW5mb3JtYXRpb24KICAgICAqICAoQCQpLiAgUmV0dXJucyB5eW9rIGZvciBub3JtYWwgcmV0 dXJuLCB5eWFjY2VwdCBmb3IgWVlBQ0NFUFQsCiAgICAgKiAgeXllcnIgZm9yIFlZRVJST1IsIHl5 YWJvcnQgZm9yIFlZQUJPUlQuICAqLwogICAgWVlSRVNVTFRUQUcKICAgIHl5dXNlckFjdGlvbiAo cnVsZV9udW0geXlydWxlLCBpbnQgeXlyaHNsZW4sIGdscl9zdGFja19pdGVtKiB5eXZzcCwgc3Rh dGVfc2V0X2luZGV4IHl5aywKICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZSogeXl2YWxwKQog ICAgewogICAgICBib29sIHl5bm9ybWFsIFlZX0FUVFJJQlVURV9VTlVTRUQgPSAheXlzdGF0ZVN0 YWNrLmlzU3BsaXQoKTsKICAgICAgaW50IHl5bG93ID0gMTsKICBZWV9VU0UgKHl5dmFscCk7CiAg ICAgIFlZX1VTRSAoeXlrKTsKICAgICAgWVlfVVNFICh5eXJoc2xlbik7CiAgICAjIHVuZGVmIHl5 ZXJyb2sKICAgICMgZGVmaW5lIHl5ZXJyb2sgKHl5ZXJyU3RhdGUgPSAwKQogICAgIyB1bmRlZiBZ WUFDQ0VQVAogICAgIyBkZWZpbmUgWVlBQ0NFUFQgcmV0dXJuIHl5YWNjZXB0CiAgICAjIHVuZGVm IFlZQUJPUlQKICAgICMgZGVmaW5lIFlZQUJPUlQgcmV0dXJuIHl5YWJvcnQKICAgICMgdW5kZWYg WVlFUlJPUgogICAgIyBkZWZpbmUgWVlFUlJPUiByZXR1cm4geXllcnJvaywgeXllcnIKICAgICMg dW5kZWYgWVlSRUNPVkVSSU5HCiAgICAjIGRlZmluZSBZWVJFQ09WRVJJTkcoKSAoeXllcnJTdGF0 ZSAhPSAwKQogICAgIyB1bmRlZiB5eXRva2VuCiAgICAjIGRlZmluZSB5eXRva2VuIHRoaXMtPnl5 bGEua2luZF8KICAgICMgdW5kZWYgeXljbGVhcmluCiAgICAjIGRlZmluZSB5eWNsZWFyaW4gKHl5 dG9rZW4gPSBzeW1ib2xfa2luZDo6U19ZWUVNUFRZKQogICAgIyB1bmRlZiBZWUJBQ0tVUAogICAg IyBkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCiAgICAgIHJldHVybiB5eXBhcnNlci5lcnJvciAoWVlfKCJz eW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpLCAgICAgXAogICAgICAgICAgICAgeXllcnJv aywgeXllcnIKCgogICAgICBpZiAoeXlyaHNsZW4gPT0gMCkKICAgICAgICAqeXl2YWxwID0geXl2 YWxfZGVmYXVsdDsKICAgICAgZWxzZQogICAgICAgICp5eXZhbHAgPSB5eXZzcFtZWUZJTEwgKDEt eXlyaHNsZW4pXS5nZXRTdGF0ZSgpLnZhbHVlICgpOwogICAgLyogSWYgeXlrID09IC0xLCB3ZSBh cmUgcnVubmluZyBhIGRlZmVycmVkIGFjdGlvbiBvbiBhIHRlbXBvcmFyeQogICAgICAgc3RhY2su ICBJbiB0aGF0IGNhc2UsIFlZX1JFRFVDRV9QUklOVCBtdXN0IG5vdCBwbGF5IHdpdGggWVlGSUxM LAogICAgICAgc28gcHJldGVuZCB0aGUgc3RhY2sgaXMgIm5vcm1hbCIuICovCiAgICBZWV9SRURV Q0VfUFJJTlQgKCh5eW5vcm1hbCB8fCB5eWsgPT0gY3JlYXRlX3N0YXRlX3NldF9pbmRleCAoLTEp LCB5eXZzcCwgeXlrLCB5eXJ1bGUsIHl5cGFyc2VyKSk7CiAgICAjaWYgWVlfRVhDRVBUSU9OUwog ICAgICB0cnkKICAgICAgewogICAgI2VuZGlmIC8vIFlZX0VYQ0VQVElPTlMKICAgICAgc3dpdGNo ICh5eXJ1bGUpCiAgICAgICAgewogICAgCiNsaW5lIDI2NjIgImdsci1yZWdyMTYuY2MiCgogICAg ICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgfQogICAgI2lmIFlZX0VYQ0VQVElPTlMKICAg ICAgfQogICAgICBjYXRjaCAoY29uc3Qgc3ludGF4X2Vycm9yJiB5eWV4YykKICAgICAgICB7CiAg ICAgICAgICBZWUNERUJVRyA8PCAiQ2F1Z2h0IGV4Y2VwdGlvbjogIiA8PCB5eWV4Yy53aGF0KCkg PDwgJ1xuJzsKICAgICAgICAgIHl5cGFyc2VyLmVycm9yICh5eWV4Yy53aGF0ICgpKTsKICAgICAg ICAgIFlZRVJST1I7CiAgICAgICAgfQogICAgI2VuZGlmIC8vIFlZX0VYQ0VQVElPTlMKICAgIFlZ X1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eWxoc05vbnRlcm0gKHl5cnVsZSksICp5eXZhbHAs ICp5eWxvY3ApOwoKICAgICAgcmV0dXJuIHl5b2s7CiAgICAjIHVuZGVmIHl5ZXJyb2sKICAgICMg dW5kZWYgWVlBQk9SVAogICAgIyB1bmRlZiBZWUFDQ0VQVAogICAgIyB1bmRlZiBZWUVSUk9SCiAg ICAjIHVuZGVmIFlZQkFDS1VQCiAgICAjIHVuZGVmIHl5dG9rZW4KICAgICMgdW5kZWYgeXljbGVh cmluCiAgICAjIHVuZGVmIFlZUkVDT1ZFUklORwogICAgfQoKICAgIFlZUkVTVUxUVEFHCiAgICB5 eXJlc29sdmVTdGFjayAoKQogICAgewogICAgICBpZiAoeXlzdGF0ZVN0YWNrLmlzU3BsaXQgKCkp CiAgICAgICAgewogICAgICAgICAgaW50IHl5biA9IDA7CiAgICAgICAgICBmb3IgKGdscl9zdGF0 ZSogeXlzID0gZmlyc3RUb3BTdGF0ZSAoKTsKICAgICAgICAgICAgICAgeXlzICE9IHl5c3RhdGVT dGFjay55eXNwbGl0UG9pbnQ7CiAgICAgICAgICAgICAgIHl5cyA9IHl5cy0+cHJlZCAoKSkKICAg ICAgICAgICAgeXluICs9IDE7CiAgICAgICAgICBZWUNISyAoeXlyZXNvbHZlU3RhdGVzICgqZmly c3RUb3BTdGF0ZSAoKSwgeXluKSk7CiAgICAgICAgfQogICAgICByZXR1cm4geXlvazsKICAgIH0K CiAgICAvKiogUG9wIHRoZSBzeW1ib2xzIGNvbnN1bWVkIGJ5IHJlZHVjdGlvbiAjWVlSVUxFIGZy b20gdGhlIHRvcCBvZiBzdGFjawogICAgICogICNZWUsgb2YgKllZU1RBQ0tQLCBhbmQgcGVyZm9y bSB0aGUgYXBwcm9wcmlhdGUgc2VtYW50aWMgYWN0aW9uIG9uIHRoZWlyCiAgICAgKiAgc2VtYW50 aWMgdmFsdWVzLiAgQXNzdW1lcyB0aGF0IGFsbCBhbWJpZ3VpdGllcyBpbiBzZW1hbnRpYyB2YWx1 ZXMKICAgICAqICBoYXZlIGJlZW4gcHJldmlvdXNseSByZXNvbHZlZC4gIFNldCAqWVlWQUxQIHRv IHRoZSByZXN1bHRpbmcgdmFsdWUsCiAgICAgKiAgYW5kICpZWUxPQ1AgdG8gdGhlIGNvbXB1dGVk IGxvY2F0aW9uIChpZiBhbnkpLiAgUmV0dXJuIHZhbHVlIGlzIGFzCiAgICAgKiAgZm9yIHVzZXJB Y3Rpb24uICAqLwogICAgWVlSRVNVTFRUQUcKICAgIHl5ZG9BY3Rpb24gKHN0YXRlX3NldF9pbmRl eCB5eWssIHJ1bGVfbnVtIHl5cnVsZSwKICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUqIHl5dmFs cCkKICAgIHsKICAgICAgY29uc3QgaW50IHl5bnJocyA9IHl5cmhzTGVuZ3RoICh5eXJ1bGUpOwoK ICAgICAgaWYgKCF5eXN0YXRlU3RhY2suaXNTcGxpdCgpKQogICAgICAgIHsKICAgICAgICAgIC8q IFN0YW5kYXJkIHNwZWNpYWwgY2FzZTogc2luZ2xlIHN0YWNrLiAgKi8KICAgICAgICAgIFlZQVNT RVJUICh5eWsuZ2V0KCkgPT0gMCk7CiAgICAgICAgICBnbHJfc3RhY2tfaXRlbSogeXlyaHMgPSB5 eXN0YXRlU3RhY2suZmlyc3RUb3AoKS0+YXNJdGVtKCk7CiAgICAgICAgICBjb25zdCBZWVJFU1VM VFRBRyByZXMKICAgICAgICAgICAgPSB5eXVzZXJBY3Rpb24gKHl5cnVsZSwgeXlucmhzLCB5eXJo cywgeXlrLCB5eXZhbHApOwogICAgICAgICAgeXlzdGF0ZVN0YWNrLnBvcF9iYWNrKHN0YXRpY19j YXN0PHNpemVfdD4oeXlucmhzKSk7CiAgICAgICAgICB5eXN0YXRlU3RhY2suc2V0Rmlyc3RUb3Ao Jnl5c3RhdGVTdGFja1t5eXN0YXRlU3RhY2suc2l6ZSgpIC0gMV0uZ2V0U3RhdGUoKSk7CiAgICAg ICAgICByZXR1cm4gcmVzOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg IGdscl9zdGFja19pdGVtIHl5cmhzVmFsc1tZWU1BWFJIUyArIFlZTUFYTEVGVCArIDFdOwogICAg ICAgICAgZ2xyX3N0YXRlKiB5eXMgPSB5eXN0YXRlU3RhY2sudG9wQXQoeXlrKTsKICAgICAgICAg IHl5cmhzVmFsc1tZWU1BWFJIUyArIFlZTUFYTEVGVF0uZ2V0U3RhdGUoKS5zZXRQcmVkKHl5cyk7 CiAgICAgICAgICBmb3IgKGludCB5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSArPSAxKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgeXlzID0geXlzLT5wcmVkKCk7CiAgICAgICAgICAgICAg WVlBU1NFUlQgKHl5cyAhPSBZWV9OVUxMUFRSKTsKICAgICAgICAgICAgfQogICAgICAgICAgeXlz dGF0ZVN0YWNrLnl5dXBkYXRlU3BsaXQgKCp5eXMpOwogICAgICAgICAgeXlzdGF0ZVN0YWNrLnNl dFRvcEF0KHl5aywgeXlzKTsKICAgICAgICAgIHJldHVybiB5eXVzZXJBY3Rpb24gKHl5cnVsZSwg eXlucmhzLCB5eXJoc1ZhbHMgKyBZWU1BWFJIUyArIFlZTUFYTEVGVCAtIDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB5eWssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5 eXZhbHApOwogICAgICAgIH0KICAgIH0KCiAgICAvKiogUG9wIGl0ZW1zIG9mZiBzdGFjayAjWVlL IG9mICpZWVNUQUNLUCBhY2NvcmRpbmcgdG8gZ3JhbW1hciBydWxlIFlZUlVMRSwKICAgICAqICBh bmQgcHVzaCBiYWNrIG9uIHRoZSByZXN1bHRpbmcgbm9udGVybWluYWwgc3ltYm9sLiAgUGVyZm9y bSB0aGUKICAgICAqICBzZW1hbnRpYyBhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIFlZUlVMRSBhbmQg c3RvcmUgaXRzIHZhbHVlIHdpdGggdGhlCiAgICAgKiAgbmV3bHkgcHVzaGVkIHN0YXRlLCBpZiBZ WUZPUkNFRVZBTCBvciBpZiAqWVlTVEFDS1AgaXMgY3VycmVudGx5CiAgICAgKiAgdW5hbWJpZ3Vv dXMuICBPdGhlcndpc2UsIHN0b3JlIHRoZSBkZWZlcnJlZCBzZW1hbnRpYyBhY3Rpb24gd2l0aAog ICAgICogIHRoZSBuZXcgc3RhdGUuICBJZiB0aGUgbmV3IHN0YXRlIHdvdWxkIGhhdmUgYW4gaWRl bnRpY2FsIGlucHV0CiAgICAgKiAgcG9zaXRpb24sIExSIHN0YXRlLCBhbmQgcHJlZGVjZXNzb3Ig dG8gYW4gZXhpc3Rpbmcgc3RhdGUgb24gdGhlIHN0YWNrLAogICAgICogIGl0IGlzIGlkZW50aWZp ZWQgd2l0aCB0aGF0IGV4aXN0aW5nIHN0YXRlLCBlbGltaW5hdGluZyBzdGFjayAjWVlLIGZyb20K ICAgICAqICAqWVlTVEFDS1AuICBJbiB0aGlzIGNhc2UsIHRoZSBzZW1hbnRpYyB2YWx1ZSBpcwog ICAgICogIGFkZGVkIHRvIHRoZSBvcHRpb25zIGZvciB0aGUgZXhpc3Rpbmcgc3RhdGUncyBzZW1h bnRpYyB2YWx1ZS4KICAgICAqLwogICAgWVlSRVNVTFRUQUcKICAgIHl5Z2xyUmVkdWNlIChzdGF0 ZV9zZXRfaW5kZXggeXlrLCBydWxlX251bSB5eXJ1bGUsIGJvb2wgeXlmb3JjZUV2YWwpCiAgICB7 CiAgICAgIHNpemVfdCB5eXBvc24gPSB0b3BTdGF0ZSh5eWspLT55eXBvc247CgogICAgICBpZiAo eXlmb3JjZUV2YWwgfHwgIXl5c3RhdGVTdGFjay5pc1NwbGl0KCkpCiAgICAgICAgewogICAgICAg ICAgdmFsdWVfdHlwZSB2YWw7CgogICAgICAgICAgWVlSRVNVTFRUQUcgeXlmbGFnID0geXlkb0Fj dGlvbiAoeXlrLCB5eXJ1bGUsICZ2YWwpOwogICAgICAgICAgaWYgKHl5ZmxhZyA9PSB5eWVyciAm JiB5eXN0YXRlU3RhY2suaXNTcGxpdCgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgWVlD REVCVUcgPDwgIlBhcnNlIG9uIHN0YWNrICIgPDwgeXlrLmdldCAoKQogICAgICAgICAgICAgICAg ICAgICAgIDw8ICIgcmVqZWN0ZWQgYnkgcnVsZSAiIDw8IHl5cnVsZSAtIDEKICAgICAgICAgICAg ICAgICAgICAgICA8PCAiIChsaW5lICIgPDwgaW50ICh5eXJsaW5lW3l5cnVsZV0pIDw8ICIpLlxu IjsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKHl5ZmxhZyAhPSB5eW9rKQogICAgICAgICAg ICByZXR1cm4geXlmbGFnOwogICAgICAgICAgeXlnbHJTaGlmdCAoeXlrLAogICAgICAgICAgICAg ICAgICAgICAgeXlMUmdvdG9TdGF0ZSAodG9wU3RhdGUoeXlrKS0+eXlsclN0YXRlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlsaHNOb250ZXJtICh5eXJ1bGUpKSwKICAg ICAgICAgICAgICAgICAgICAgIHl5cG9zbiwgdmFsKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICBnbHJfc3RhdGUgKnl5cyA9IHl5c3RhdGVTdGFjay50b3BBdCh5eWsp OwogICAgICAgICAgZ2xyX3N0YXRlICp5eXMwID0geXlzOwogICAgICAgICAgZm9yIChpbnQgeXlu ID0geXlyaHNMZW5ndGggKHl5cnVsZSk7IDAgPCB5eW47IHl5biAtPSAxKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgeXlzID0geXlzLT5wcmVkKCk7CiAgICAgICAgICAgICAgWVlBU1NFUlQg KHl5cyAhPSBZWV9OVUxMUFRSKTsKICAgICAgICAgICAgfQogICAgICAgICAgeXlzdGF0ZVN0YWNr Lnl5dXBkYXRlU3BsaXQgKCp5eXMpOwogICAgICAgICAgc3RhdGVfbnVtIHl5bmV3TFJTdGF0ZSA9 IHl5TFJnb3RvU3RhdGUgKHl5cy0+eXlsclN0YXRlLCB5eWxoc05vbnRlcm0gKHl5cnVsZSkpOwog ICAgICAgICAgWVlDREVCVUcgPDwgIlJlZHVjZWQgc3RhY2sgIiA8PCB5eWsuZ2V0ICgpCiAgICAg ICAgICAgICAgICAgICA8PCAiIGJ5IHJ1bGUgIiA8PCB5eXJ1bGUgLSAxIDw8ICIgKGxpbmUgIiA8 PCBpbnQgKHl5cmxpbmVbeXlydWxlXSkKICAgICAgICAgICAgICAgICAgIDw8ICIpOyBhY3Rpb24g ZGVmZXJyZWQuICBOb3cgaW4gc3RhdGUgIiA8PCB5eW5ld0xSU3RhdGUKICAgICAgICAgICAgICAg ICAgIDw8ICIuXG4iOwogICAgICAgICAgZm9yIChzdGF0ZV9zZXRfaW5kZXggeXlpID0gY3JlYXRl X3N0YXRlX3NldF9pbmRleCgwKTsgeXlpLnVnZXQoKSA8IHl5c3RhdGVTdGFjay5udW1Ub3BzKCk7 ICsreXlpKQogICAgICAgICAgICBpZiAoeXlpICE9IHl5ayAmJiB5eXN0YXRlU3RhY2sudG9wQXQo eXlpKSAhPSBZWV9OVUxMUFRSKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbnN0 IGdscl9zdGF0ZSogeXlzcGxpdCA9IHl5c3RhdGVTdGFjay55eXNwbGl0UG9pbnQ7CiAgICAgICAg ICAgICAgICBnbHJfc3RhdGUqIHl5cCA9IHl5c3RhdGVTdGFjay50b3BBdCh5eWkpOwogICAgICAg ICAgICAgICAgd2hpbGUgKHl5cCAhPSB5eXMgJiYgeXlwICE9IHl5c3BsaXQKICAgICAgICAgICAg ICAgICAgICAgICAmJiB5eXAtPnl5cG9zbiA+PSB5eXBvc24pCiAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICBpZiAoeXlwLT55eWxyU3RhdGUgPT0geXluZXdMUlN0YXRlCiAg ICAgICAgICAgICAgICAgICAgICAgICYmIHl5cC0+cHJlZCgpID09IHl5cykKICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgeXlhZGREZWZlcnJlZEFjdGlvbiAo eXlrLCB5eXAsIHl5czAsIHl5cnVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHl5c3RhdGVT dGFjay55eXRvcHMueXltYXJrU3RhY2tEZWxldGVkICh5eWspOwogICAgICAgICAgICAgICAgICAg ICAgICBZWUNERUJVRyA8PCAiTWVyZ2luZyBzdGFjayAiIDw8IHl5ay5nZXQgKCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBpbnRvIHN0YWNrICIgPDwgeXlpLmdldCAoKSA8 PCAiLlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHl5b2s7CiAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgeXlwID0geXlwLT5wcmVkKCk7CiAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICB5eXN0YXRlU3RhY2suc2V0 VG9wQXQoeXlrLCB5eXMpOwogICAgICAgICAgeXlnbHJTaGlmdERlZmVyICh5eWssIHl5bmV3TFJT dGF0ZSwgeXlwb3NuLCB5eXMwLCB5eXJ1bGUpOwogICAgICAgIH0KICAgICAgcmV0dXJuIHl5b2s7 CiAgICB9CgogICAgLyoqIFNoaWZ0IHN0YWNrICNZWUsgb2YgKllZU1RBQ0tQLCB0byBhIG5ldyBz dGF0ZSBjb3JyZXNwb25kaW5nIHRvIExSCiAgICAgKiAgc3RhdGUgWVlMUlNUQVRFLCBhdCBpbnB1 dCBwb3NpdGlvbiBZWVBPU04sIHdpdGggdGhlICh1bnJlc29sdmVkKQogICAgICogIHNlbWFudGlj IHZhbHVlIG9mIFlZUkhTIHVuZGVyIHRoZSBhY3Rpb24gZm9yIFlZUlVMRS4gICovCiAgICB2b2lk CiAgICB5eWdsclNoaWZ0RGVmZXIgKHN0YXRlX3NldF9pbmRleCB5eWssIHN0YXRlX251bSB5eWxy U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB5eXBvc24sIGdscl9zdGF0ZSogeXly aHMsIHJ1bGVfbnVtIHl5cnVsZSkKICAgIHsKICAgICAgZ2xyX3N0YXRlJiB5eW5ld1N0YXRlID0g eXlzdGF0ZVN0YWNrLnl5bmV3R0xSU3RhdGUgKAogICAgICAgIGdscl9zdGF0ZSAoeXlsclN0YXRl LCB5eXBvc24pKTsKICAgICAgeXluZXdTdGF0ZS5zZXRQcmVkICh5eXN0YXRlU3RhY2sudG9wQXQg KHl5aykpOwogICAgICB5eXN0YXRlU3RhY2suc2V0VG9wQXQgKHl5aywgJnl5bmV3U3RhdGUpOwoK ICAgICAgLyogSW52b2tlcyB5eXJlc2VydmVTdGFjay4gICovCiAgICAgIHl5YWRkRGVmZXJyZWRB Y3Rpb24gKHl5aywgJnl5bmV3U3RhdGUsIHl5cmhzLCB5eXJ1bGUpOwogICAgfQoKICAgIC8qKiBT aGlmdCB0byBhIG5ldyBzdGF0ZSBvbiBzdGFjayAjWVlLIG9mICpZWVNUQUNLUCwgY29ycmVzcG9u ZGluZyB0byBMUgogICAgICogc3RhdGUgWVlMUlNUQVRFLCBhdCBpbnB1dCBwb3NpdGlvbiBZWVBP U04sIHdpdGggKHJlc29sdmVkKSBzZW1hbnRpYwogICAgICogdmFsdWUgWVlWQUxfQVJHIGFuZCBz b3VyY2UgbG9jYXRpb24gWVlMT0NfQVJHLiAgKi8KICAgIHZvaWQKICAgIHl5Z2xyU2hpZnQgKHN0 YXRlX3NldF9pbmRleCB5eWssIHN0YXRlX251bSB5eWxyU3RhdGUsCiAgICAgICAgICAgICAgICBz aXplX3QgeXlwb3NuLAogICAgICAgICAgICAgICAgY29uc3QgdmFsdWVfdHlwZSYgeXl2YWxfYXJn KQogICAgewogICAgICBnbHJfc3RhdGUmIHl5bmV3U3RhdGUgPSB5eXN0YXRlU3RhY2sueXluZXdH TFJTdGF0ZSAoCiAgICAgICAgZ2xyX3N0YXRlICh5eWxyU3RhdGUsIHl5cG9zbiwgeXl2YWxfYXJn KSk7CiAgICAgIHl5bmV3U3RhdGUuc2V0UHJlZCAoeXlzdGF0ZVN0YWNrLnRvcEF0KHl5aykpOwog ICAgICB5eXN0YXRlU3RhY2suc2V0VG9wQXQgKHl5aywgJnl5bmV3U3RhdGUpOwogICAgICB5eXJl c2VydmVHbHJTdGFjayAoKTsKICAgIH0KCiNpZiBZWURFQlVHCiAgICB2b2lkCiAgICB5eXBzdGFj ayAoc3RhdGVfc2V0X2luZGV4IHl5aykgY29uc3QKICAgIHsKICAgICAgeXlzdGF0ZVN0YWNrLnl5 cHN0YXRlcyAoeXlzdGF0ZVN0YWNrLnRvcEF0ICh5eWspKTsKICAgIH0KI2VuZGlmCgogICAgZ2xy X3N0YXRlKiB0b3BTdGF0ZShzdGF0ZV9zZXRfaW5kZXggaSkgewogICAgICByZXR1cm4geXlzdGF0 ZVN0YWNrLnRvcEF0KGkpOwogICAgfQoKICAgIGdscl9zdGF0ZSogZmlyc3RUb3BTdGF0ZSgpIHsK ICAgICAgcmV0dXJuIHl5c3RhdGVTdGFjay5maXJzdFRvcCgpOwogICAgfQoKICBwcml2YXRlOgoK ICAgIHZvaWQgcG9wYWxsXyAoKQogICAgewogICAgICAvKiBJZiB0aGUgc3RhY2sgaXMgd2VsbC1m b3JtZWQsIHBvcCB0aGUgc3RhY2sgdW50aWwgaXQgaXMgZW1wdHksCiAgICAgICAgIGRlc3Ryb3lp bmcgaXRzIGVudHJpZXMgYXMgd2UgZ28uICBCdXQgZnJlZSB0aGUgc3RhY2sgcmVnYXJkbGVzcwog ICAgICAgICBvZiB3aGV0aGVyIGl0IGlzIHdlbGwtZm9ybWVkLiAgKi8KICAgICAgZm9yIChzdGF0 ZV9zZXRfaW5kZXggayA9IGNyZWF0ZV9zdGF0ZV9zZXRfaW5kZXgoMCk7IGsudWdldCgpIDwgeXlz dGF0ZVN0YWNrLm51bVRvcHMoKTsgayArPSAxKQogICAgICAgIGlmICh5eXN0YXRlU3RhY2sudG9w QXQoaykgIT0gWVlfTlVMTFBUUikKICAgICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKHl5c3Rh dGVTdGFjay50b3BBdChrKSAhPSBZWV9OVUxMUFRSKQogICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgIGdscl9zdGF0ZSogc3RhdGUgPSB0b3BTdGF0ZShrKTsKICAgICAgICAgICAgICAgIGlm IChzdGF0ZS0+cHJlZCgpICE9IFlZX05VTExQVFIpCiAgICAgICAgICAgICAgICAgIHN0YXRlLT5k ZXN0cm95ICgiQ2xlYW51cDogcG9wcGluZyIsIHl5cGFyc2VyKTsKICAgICAgICAgICAgICAgIHl5 c3RhdGVTdGFjay5zZXRUb3BBdChrLCBzdGF0ZS0+cHJlZCgpKTsKICAgICAgICAgICAgICAgIHl5 c3RhdGVTdGFjay5wb3BfYmFjaygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgIH0KICAgIH0KCiAgICAvKiogUmVzb2x2ZSB0aGUgcHJldmlvdXMgWVlOIHN0 YXRlcyBzdGFydGluZyBhdCBhbmQgaW5jbHVkaW5nIHN0YXRlIFlZUwogICAgICogIG9uICpZWVNU QUNLUC4gSWYgcmVzdWx0ICE9IHl5b2ssIHNvbWUgc3RhdGVzIG1heSBoYXZlIGJlZW4gbGVmdAog ICAgICogIHVucmVzb2x2ZWQgcG9zc2libHkgd2l0aCBlbXB0eSBzZW1hbnRpYyBvcHRpb24gY2hh aW5zLiAgUmVnYXJkbGVzcwogICAgICogIG9mIHdoZXRoZXIgcmVzdWx0ID0geXlvaywgZWFjaCBz dGF0ZSBoYXMgYmVlbiBsZWZ0IHdpdGggY29uc2lzdGVudAogICAgICogIGRhdGEgc28gdGhhdCBk ZXN0cm95IGNhbiBiZSBpbnZva2VkIGlmIG5lY2Vzc2FyeS4gICovCiAgICBZWVJFU1VMVFRBRwog ICAgeXlyZXNvbHZlU3RhdGVzIChnbHJfc3RhdGUmIHl5cywgaW50IHl5bikKICAgIHsKICAgICAg aWYgKDAgPCB5eW4pCiAgICAgICAgewogICAgICAgICAgWVlBU1NFUlQgKHl5cy5wcmVkKCkgIT0g WVlfTlVMTFBUUik7CiAgICAgICAgICBZWUNISyAoeXlyZXNvbHZlU3RhdGVzICgqeXlzLnByZWQo KSwgeXluLTEpKTsKICAgICAgICAgIGlmICghIHl5cy55eXJlc29sdmVkKQogICAgICAgICAgICBZ WUNISyAoeXlyZXNvbHZlVmFsdWUgKHl5cykpOwogICAgICAgIH0KICAgICAgcmV0dXJuIHl5b2s7 CiAgICB9CgogICAgc3RhdGljIHZvaWQKICAgIHl5dXNlck1lcmdlIChpbnQgeXluLCB2YWx1ZV90 eXBlJiB5eTAsIHZhbHVlX3R5cGUmIHl5MSkKICAgIHsKICAgICAgWVlfVVNFICh5eTApOwogICAg ICBZWV9VU0UgKHl5MSk7CgogICAgICBzd2l0Y2ggKHl5bikKICAgICAgICB7CgogICAgICAgICAg ZGVmYXVsdDogYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIC8qKiBSZXNvbHZlIHRoZSBhbWJp Z3VpdHkgcmVwcmVzZW50ZWQgaW4gc3RhdGUgWVlTIGluICpZWVNUQUNLUCwKICAgICAqICBwZXJm b3JtIHRoZSBpbmRpY2F0ZWQgYWN0aW9ucywgYW5kIHNldCB0aGUgc2VtYW50aWMgdmFsdWUgb2Yg WVlTLgogICAgICogIElmIHJlc3VsdCAhPSB5eW9rLCB0aGUgY2hhaW4gb2Ygc2VtYW50aWMgb3B0 aW9ucyBpbiBZWVMgaGFzIGJlZW4KICAgICAqICBjbGVhcmVkIGluc3RlYWQgb3IgaXQgaGFzIGJl ZW4gbGVmdCB1bm1vZGlmaWVkIGV4Y2VwdCB0aGF0CiAgICAgKiAgcmVkdW5kYW50IG9wdGlvbnMg bWF5IGhhdmUgYmVlbiByZW1vdmVkLiAgUmVnYXJkbGVzcyBvZiB3aGV0aGVyCiAgICAgKiAgcmVz dWx0ID0geXlvaywgWVlTIGhhcyBiZWVuIGxlZnQgd2l0aCBjb25zaXN0ZW50IGRhdGEgc28gdGhh dAogICAgICogIGRlc3Ryb3kgY2FuIGJlIGludm9rZWQgaWYgbmVjZXNzYXJ5LiAgKi8KICAgIFlZ UkVTVUxUVEFHCiAgICB5eXJlc29sdmVWYWx1ZSAoZ2xyX3N0YXRlJiB5eXMpCiAgICB7CiAgICAg IHNlbWFudGljX29wdGlvbiogeXliZXN0ID0geXlzLmZpcnN0VmFsKCk7CiAgICAgIFlZQVNTRVJU KHl5YmVzdCAhPSBZWV9OVUxMUFRSKTsKICAgICAgYm9vbCB5eW1lcmdlID0gZmFsc2U7CiAgICAg IFlZUkVTVUxUVEFHIHl5ZmxhZzsKCiAgICAgIHNlbWFudGljX29wdGlvbiogeXlwUHJldiA9IHl5 YmVzdDsKICAgICAgZm9yIChzZW1hbnRpY19vcHRpb24qIHl5cCA9IHl5YmVzdC0+bmV4dCgpOwog ICAgICAgICAgIHl5cCAhPSBZWV9OVUxMUFRSOyApCiAgICAgICAgewogICAgICAgICAgaWYgKHl5 YmVzdC0+aXNJZGVudGljYWxUbyAoKnl5cCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB5 eWJlc3QtPm1lcmdlV2l0aCAoKnl5cCk7CiAgICAgICAgICAgICAgeXlwUHJldi0+c2V0TmV4dCh5 eXAtPm5leHQoKSk7CiAgICAgICAgICAgICAgeXlwID0geXlwUHJldi0+bmV4dCgpOwogICAgICAg ICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzd2l0Y2gg KHl5cHJlZmVyZW5jZSAoKnl5YmVzdCwgKnl5cCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgIHJldHVybiB5eXN0YXRlU3RhY2sueXly ZXBvcnRBbWJpZ3VpdHkgKCp5eWJlc3QsICp5eXAsIHl5cGFyc2VyKTsKICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgIHl5bWVy Z2UgPSB0cnVlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug MjoKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAg ICAgICAgICAgICAgIHl5YmVzdCA9IHl5cDsKICAgICAgICAgICAgICAgICAgeXltZXJnZSA9IGZh bHNlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg ICAgICAgICAgICAgICAgIC8qIFRoaXMgY2Fubm90IGhhcHBlbiBzbyBpdCBpcyBub3Qgd29ydGgg YSBZWUFTU0VSVCAoZmFsc2UpLAogICAgICAgICAgICAgICAgICAgICBidXQgc29tZSBjb21waWxl cnMgY29tcGxhaW4gaWYgdGhlIGRlZmF1bHQgY2FzZSBpcwogICAgICAgICAgICAgICAgICAgICBv bWl0dGVkLiAgKi8KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgeXlwUHJldiA9IHl5cDsKICAgICAgICAgICAgICB5eXAgPSB5eXAtPm5leHQo KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIHZhbHVlX3R5cGUgdmFsOwogICAgICBp ZiAoeXltZXJnZSkKICAgICAgICB7CiAgICAgICAgICBpbnQgeXlwcmVjID0geXlkcHJlY1t5eWJl c3QtPnl5cnVsZV07CiAgICAgICAgICB5eWZsYWcgPSB5eXJlc29sdmVBY3Rpb24gKCp5eWJlc3Qs ICZ2YWwpOwogICAgICAgICAgaWYgKHl5ZmxhZyA9PSB5eW9rKQogICAgICAgICAgICBmb3IgKHNl bWFudGljX29wdGlvbiogeXlwID0geXliZXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgeXlw ICE9IFlZX05VTExQVFI7CiAgICAgICAgICAgICAgICAgeXlwID0geXlwLT5uZXh0KCkpCiAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHl5cHJlYyA9PSB5eWRwcmVjW3l5cC0+eXly dWxlXSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUg eXl2YWxfb3RoZXI7CiAgICAgICAgICAgICAgICAgICAgeXlmbGFnID0geXlyZXNvbHZlQWN0aW9u ICgqeXlwLCAmeXl2YWxfb3RoZXIpOwogICAgICAgICAgICAgICAgICAgIGlmICh5eWZsYWcgIT0g eXlvaykKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgeXlw YXJzZXIueXlfZGVzdHJveV8gKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGluY29tcGxldGVseSBtZXJn ZWQgdmFsdWUgZm9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHl5X2FjY2Vzc2luZ19zeW1ib2wgKHl5cy55eWxyU3RhdGUpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+eXlsYS52YWx1ZSk7CiAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgIHl5dXNlck1lcmdlICh5eW1lcmdlclt5eXAtPnl5cnVsZV0sIHZhbCwgeXl2YWxf b3RoZXIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgZWxzZQogICAgICAgIHl5ZmxhZyA9IHl5cmVzb2x2ZUFjdGlvbiAoKnl5YmVzdCwgJnZhbCk7 CgogICAgICBpZiAoeXlmbGFnID09IHl5b2spCiAgICAgICAgewogICAgICAgICAgeXlzLnl5cmVz b2x2ZWQgPSB0cnVlOwogICAgICAgICAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVH SU4KICAgICAgICAgIG5ldyAoJnl5cy52YWx1ZSAoKSkgdmFsdWVfdHlwZSAodmFsKTsKCiAgICAg ICAgICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKICAgICAgICB9CiAgICAgIGVs c2UKICAgICAgICB5eXMuc2V0Rmlyc3RWYWwoWVlfTlVMTFBUUik7CgogICAgICByZXR1cm4geXlm bGFnOwogICAgfQoKICAgIC8qKiBSZXNvbHZlIHRoZSBzdGF0ZXMgZm9yIHRoZSBSSFMgb2YgWVlP UFQgb24gKllZU1RBQ0tQLCBwZXJmb3JtIGl0cwogICAgICogIHVzZXIgYWN0aW9uLCBhbmQgcmV0 dXJuIHRoZSBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gaW4gKllZVkFMUAogICAgICogIGFu ZCAqWVlMT0NQLiAgUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHJlc3VsdCA9IHl5b2ssIGFsbCBSSFMg c3RhdGVzCiAgICAgKiAgaGF2ZSBiZWVuIGRlc3Ryb3llZCAoYXNzdW1pbmcgdGhlIHVzZXIgYWN0 aW9uIGRlc3Ryb3lzIGFsbCBSSFMKICAgICAqICBzZW1hbnRpYyB2YWx1ZXMgaWYgaW52b2tlZCku ICAqLwogICAgWVlSRVNVTFRUQUcKICAgIHl5cmVzb2x2ZUFjdGlvbiAoc2VtYW50aWNfb3B0aW9u JiB5eW9wdCwgdmFsdWVfdHlwZSogeXl2YWxwKQogICAgewogICAgICBnbHJfc3RhdGUqIHl5b3B0 U3RhdGUgPSB5eW9wdC5zdGF0ZSgpOwogICAgICBZWUFTU0VSVCh5eW9wdFN0YXRlICE9IFlZX05V TExQVFIpOwogICAgICBpbnQgeXlucmhzID0geXlyaHNMZW5ndGggKHl5b3B0Lnl5cnVsZSk7CiAg ICAgIFlZUkVTVUxUVEFHIHl5ZmxhZyA9IHl5cmVzb2x2ZVN0YXRlcyAoKnl5b3B0U3RhdGUsIHl5 bnJocyk7CiAgICAgIGlmICh5eWZsYWcgIT0geXlvaykKICAgICAgICB7CiAgICAgICAgICBmb3Ig KGdscl9zdGF0ZSAqeXlzID0geXlvcHRTdGF0ZTsgeXlucmhzID4gMDsgeXlzID0geXlzLT5wcmVk KCksIHl5bnJocyAtPSAxKQogICAgICAgICAgICB5eXMtPmRlc3Ryb3kgKCJDbGVhbnVwOiBwb3Bw aW5nIiwgeXlwYXJzZXIpOwogICAgICAgICAgcmV0dXJuIHl5ZmxhZzsKICAgICAgICB9CgogICAg ICBnbHJfc3RhY2tfaXRlbSB5eXJoc1ZhbHNbWVlNQVhSSFMgKyBZWU1BWExFRlQgKyAxXTsKICAg ICAgeXlyaHNWYWxzW1lZTUFYUkhTICsgWVlNQVhMRUZUXS5nZXRTdGF0ZSgpLnNldFByZWQoeXlv cHQuc3RhdGUoKSk7CiAgICAgIHsKICAgICAgICBzeW1ib2xfdHlwZSB5eWxhX2N1cnJlbnQgPSBz dGQ6Om1vdmUgKHRoaXMtPnl5bGEpOwogICAgICAgIHRoaXMtPnl5bGEgPSBzdGQ6Om1vdmUgKHl5 b3B0Lnl5bGEpOwogICAgICAgIHl5ZmxhZyA9IHl5dXNlckFjdGlvbiAoeXlvcHQueXlydWxlLCB5 eW5yaHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXJoc1ZhbHMgKyBZWU1BWFJI UyArIFlZTUFYTEVGVCAtIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVf c3RhdGVfc2V0X2luZGV4ICgtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXZh bHApOwogICAgICAgIHRoaXMtPnl5bGEgPSBzdGQ6Om1vdmUgKHl5bGFfY3VycmVudCk7CiAgICAg IH0KICAgICAgcmV0dXJuIHl5ZmxhZzsKICAgIH0KCiAgICAvKiogSWYgeXl0b2tlbiBpcyBlbXB0 eSwgZmV0Y2ggdGhlIG5leHQgdG9rZW4uICAqLwogICAgdm9pZAogICAgeXlnZXRfdG9rZW4gKCkK ICAgIHsKICAgICAgaWYgKHRoaXMtPnl5bGEuZW1wdHkgKCkpCiAgICAgICAgewogICAgICAgICAg WVlDREVCVUcgPDwgIlJlYWRpbmcgYSB0b2tlblxuIjsKI2lmIFlZX0VYQ0VQVElPTlMKICAgICAg ICAgIHRyeQojZW5kaWYgLy8gWVlfRVhDRVBUSU9OUwogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgeXlsYS5raW5kXyA9IHl5cGFyc2VyLnl5dHJhbnNsYXRlXyAoeXlsZXggKCZ0aGlzLT55eWxh LnZhbHVlKSk7CiAgICAgICAgICAgIH0KI2lmIFlZX0VYQ0VQVElPTlMKICAgICAgICAgIGNhdGNo IChjb25zdCBwYXJzZXJfdHlwZTo6c3ludGF4X2Vycm9yJiB5eWV4YykKICAgICAgICAgICAgewog ICAgICAgICAgICAgIFlZQ0RFQlVHIDw8ICJDYXVnaHQgZXhjZXB0aW9uOiAiIDw8IHl5ZXhjLndo YXQgKCkgPDwgJ1xuJzsKICAgICAgICAgICAgICB5eXBhcnNlci5lcnJvciAoeXlleGMud2hhdCAo KSk7CiAgICAgICAgICAgICAgLy8gTWFwIGVycm9ycyBjYXVnaHQgaW4gdGhlIHNjYW5uZXIgdG8g dGhlIGVycm9yIHRva2VuLCBzbyB0aGF0IGVycm9yCiAgICAgICAgICAgICAgLy8gaGFuZGxpbmcg aXMgc3RhcnRlZC4KICAgICAgICAgICAgICB0aGlzLT55eWxhLmtpbmRfID0gc3ltYm9sX2tpbmQ6 OlNfWVllcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KI2VuZGlmIC8vIFlZX0VYQ0VQVElP TlMKICAgICAgaWYgKHRoaXMtPnl5bGEua2luZCAoKSA9PSBzeW1ib2xfa2luZDo6U19ZWUVPRikK ICAgICAgICBZWUNERUJVRyA8PCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiI7CiAgICAgIGVsc2UK ICAgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgdGhpcy0+eXlsYS5raW5k ICgpLCB0aGlzLT55eWxhLnZhbHVlLCB0aGlzLT55eWxhLmxvY2F0aW9uKTsKICAgIH0KCgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJpc29uIGdyYW1tYXItdGFibGUgbWFuaXB1 bGF0aW9uLiAgKi8KCiAgICAvKiogVGhlIGFjdGlvbiB0byB0YWtlIGluIFlZU1RBVEUgb24gc2Vl aW5nIFlZVE9LRU4uCiAgICAgKiAgUmVzdWx0IFIgbWVhbnMKICAgICAqICAgIFIgPCAwOiAgUmVk dWNlIG9uIHJ1bGUgLVIuCiAgICAgKiAgICBSID0gMDogIEVycm9yLgogICAgICogICAgUiA+IDA6 ICBTaGlmdCB0byBzdGF0ZSBSLgogICAgICogIFNldCAqWVlDT05GTElDVFMgdG8gYSBwb2ludGVy IGludG8geXljb25mbCB0byBhIDAtdGVybWluYXRlZCBsaXN0CiAgICAgKiAgb2YgY29uZmxpY3Rp bmcgcmVkdWN0aW9ucy4KICAgICAqLwogICAgc3RhdGljIGludAogICAgeXlnZXRMUkFjdGlvbnMg KHN0YXRlX251bSB5eXN0YXRlLCBzeW1ib2xfa2luZF90eXBlIHl5dG9rZW4sIGNvbnN0IHNob3J0 KiYgeXljb25mbGljdHMpCiAgICB7CiAgICAgIGludCB5eWluZGV4ID0geXlwYWN0W3l5c3RhdGVd ICsgeXl0b2tlbjsKICAgICAgaWYgKHl5dG9rZW4gPT0gc3ltYm9sX2tpbmQ6OlNfWVllcnJvcikK ICAgICAgICB7CiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBlcnJvciB0b2tlbi4KICAgICAgICAg IHl5Y29uZmxpY3RzID0geXljb25mbDsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAg ICAgZWxzZSBpZiAoeXlfaXNfZGVmYXVsdGVkX3N0YXRlICh5eXN0YXRlKQogICAgICAgICAgICAg ICB8fCB5eWluZGV4IDwgMCB8fCBZWUxBU1QgPCB5eWluZGV4IHx8IHl5Y2hlY2tbeXlpbmRleF0g IT0geXl0b2tlbikKICAgICAgICB7CiAgICAgICAgICB5eWNvbmZsaWN0cyA9IHl5Y29uZmw7CiAg ICAgICAgICByZXR1cm4gLXl5ZGVmYWN0W3l5c3RhdGVdOwogICAgICAgIH0KICAgICAgZWxzZSBp ZiAoISB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eXRhYmxlW3l5aW5kZXhdKSkKICAgICAgICB7 CiAgICAgICAgICB5eWNvbmZsaWN0cyA9IHl5Y29uZmwgKyB5eWNvbmZscFt5eWluZGV4XTsKICAg ICAgICAgIHJldHVybiB5eXRhYmxlW3l5aW5kZXhdOwogICAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIHl5Y29uZmxpY3RzID0geXljb25mbCArIHl5Y29uZmxwW3l5aW5kZXhd OwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQoKICAgIC8qKiBDb21wdXRlIHBv c3QtcmVkdWN0aW9uIHN0YXRlLgogICAgICogXHBhcmFtIHl5c3RhdGUgICB0aGUgY3VycmVudCBz dGF0ZQogICAgICogXHBhcmFtIHl5c3ltICAgICB0aGUgbm9udGVybWluYWwgdG8gcHVzaCBvbiB0 aGUgc3RhY2sKICAgICAqLwogICAgc3RhdGljIHN0YXRlX251bQogICAgeXlMUmdvdG9TdGF0ZSAo c3RhdGVfbnVtIHl5c3RhdGUsIHN5bWJvbF9raW5kX3R5cGUgeXlzeW0pCiAgICB7CiAgICAgIGNv bnN0IGludCB5eXIgPSB5eXBnb3RvW3l5c3ltIC0gWVlOVE9LRU5TXSArIHl5c3RhdGU7CiAgICAg IGlmICgwIDw9IHl5ciAmJiB5eXIgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlyXSA9PSB5eXN0YXRl KQogICAgICAgIHJldHVybiB5eXRhYmxlW3l5cl07CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4g eXlkZWZnb3RvW3l5c3ltIC0gWVlOVE9LRU5TXTsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAg eXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHN0YXRlX251bSB5eXN0YXRlKQogICAgewogICAgICBy ZXR1cm4gKCh5eXN0YXRlKSA9PSBZWVBBQ1RfTklORik7CiAgICB9CgogICAgc3RhdGljIGJvb2wK ICAgIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKGludCB5eXRhYmxlX3ZhbHVlIFlZX0FUVFJJQlVU RV9VTlVTRUQpCiAgICB7CiAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHN0YXRpYyBib29sCiAg ICB5eV9pc19zaGlmdF9hY3Rpb24gKGludCB5eWFjdGlvbikgWVlfTk9FWENFUFQKICAgIHsKICAg ICAgcmV0dXJuIDAgPCB5eWFjdGlvbjsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAgeXlfaXNf ZXJyb3JfYWN0aW9uIChpbnQgeXlhY3Rpb24pIFlZX05PRVhDRVBUCiAgICB7CiAgICAgIHJldHVy biB5eWFjdGlvbiA9PSAwOwogICAgfQoKICAgIC8qKiBXaGV0aGVyIExSIHN0YXRlIFlZU1RBVEUg aGFzIG9ubHkgYSBkZWZhdWx0IHJlZHVjdGlvbgogICAgICogIChyZWdhcmRsZXNzIG9mIHRva2Vu KS4gICovCiAgICBzdGF0aWMgYm9vbAogICAgeXlfaXNfZGVmYXVsdGVkX3N0YXRlIChzdGF0ZV9u dW0geXlzdGF0ZSkKICAgIHsKICAgICAgcmV0dXJuIHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5 eXBhY3RbeXlzdGF0ZV0pOwogICAgfQoKICAgIC8qKiBUaGUgZGVmYXVsdCByZWR1Y3Rpb24gZm9y IFlZU1RBVEUsIGFzc3VtaW5nIGl0IGhhcyBvbmUuICAqLwogICAgc3RhdGljIHJ1bGVfbnVtCiAg ICB5eV9kZWZhdWx0X2FjdGlvbiAoc3RhdGVfbnVtIHl5c3RhdGUpCiAgICB7CiAgICAgIHJldHVy biB5eWRlZmFjdFt5eXN0YXRlXTsKICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEdMUlN0YWNrcyAqLwoKICAgIC8qKiBZMCBhbmQgWTEgcmVwcmVzZW50IHR3byBw b3NzaWJsZSBhY3Rpb25zIHRvIHRha2UgaW4gYSBnaXZlbgogICAgICogIHBhcnNpbmcgc3RhdGU7 IHJldHVybiAwIGlmIG5vIGNvbWJpbmF0aW9uIGlzIHBvc3NpYmxlLAogICAgICogIDEgaWYgdXNl ci1tZXJnZWFibGUsIDIgaWYgWTAgaXMgcHJlZmVycmVkLCAzIGlmIFkxIGlzIHByZWZlcnJlZC4g ICovCiAgICBzdGF0aWMgaW50CiAgICB5eXByZWZlcmVuY2UgKGNvbnN0IHNlbWFudGljX29wdGlv biYgeTAsIGNvbnN0IHNlbWFudGljX29wdGlvbiYgeTEpCiAgICB7CiAgICAgIGNvbnN0IHJ1bGVf bnVtIHIwID0geTAueXlydWxlLCByMSA9IHkxLnl5cnVsZTsKICAgICAgY29uc3QgaW50IHAwID0g eXlkcHJlY1tyMF0sIHAxID0geXlkcHJlY1tyMV07CgogICAgICBpZiAocDAgPT0gcDEpCiAgICAg ICAgewogICAgICAgICAgaWYgKHl5bWVyZ2VyW3IwXSA9PSAwIHx8IHl5bWVyZ2VyW3IwXSAhPSB5 eW1lcmdlcltyMV0pCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgZWxzZQogICAgICAg ICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKHAwID09IDAgfHwgcDEgPT0g MCkKICAgICAgICByZXR1cm4gMDsKICAgICAgZWxzZSBpZiAocDAgPCBwMSkKICAgICAgICByZXR1 cm4gMzsKICAgICAgZWxzZSBpZiAocDEgPCBwMCkKICAgICAgICByZXR1cm4gMjsKICAgICAgZWxz ZQogICAgICAgIHJldHVybiAwOwogICAgfQoKCiAgfTsgLy8gY2xhc3MgcGFyc2VyOjpnbHJfc3Rh Y2sKfSAvLyBuYW1lc3BhY2UgeXkKCgojaWYgWVlERUJVRwpuYW1lc3BhY2UKewogIHZvaWQKICB5 eXBzdGFjayAoY29uc3QgZ2xyX3N0YWNrJiB5eXN0YWNrLCBzaXplX3QgeXlrKQogIHsKICAgIHl5 c3RhY2sueXlwc3RhY2sgKGNyZWF0ZV9zdGF0ZV9zZXRfaW5kZXggKHN0YXRpY19jYXN0PHN0ZDo6 cHRyZGlmZl90PiAoeXlrKSkpOwogIH0KCiAgdm9pZAogIHl5cGR1bXBzdGFjayAoY29uc3QgZ2xy X3N0YWNrJiB5eXN0YWNrKQogIHsKICAgIHl5c3RhY2sueXlwZHVtcHN0YWNrICgpOwogIH0KfQoj ZW5kaWYKCm5hbWVzcGFjZSB5eSB7CiNsaW5lIDMyMTkgImdsci1yZWdyMTYuY2MiCgogIC8vLyBC dWlsZCBhIHBhcnNlciBvYmplY3QuCiAgcGFyc2VyOjpwYXJzZXIgKCkKI2lmIFlZREVCVUcKICAg ICA6eXljZGVidWdfICgmc3RkOjpjZXJyKQojZW5kaWYKICB7fQoKICBwYXJzZXI6On5wYXJzZXIg KCkKICB7fQoKICBwYXJzZXI6OnN5bnRheF9lcnJvcjo6fnN5bnRheF9lcnJvciAoKSBZWV9OT0VY Q0VQVCBZWV9OT1RIUk9XCiAge30KCiAgaW50CiAgcGFyc2VyOjpvcGVyYXRvcigpICgpCiAgewog ICAgcmV0dXJuIHBhcnNlICgpOwogIH0KCiAgaW50CiAgcGFyc2VyOjpwYXJzZSAoKQogIHsKICAg IGdscl9zdGFjayB5eXN0YWNrKFlZSU5JVERFUFRILCAqdGhpcyk7CiAgICByZXR1cm4geXlzdGFj ay5wYXJzZSAoKTsKICB9CgojaWYgWVlERUJVRyB8fCAwCiAgY29uc3QgY2hhciAqCiAgcGFyc2Vy OjpzeW1ib2xfbmFtZSAoc3ltYm9sX2tpbmRfdHlwZSB5eXN5bWJvbCkKICB7CiAgICByZXR1cm4g eXl0bmFtZV9beXlzeW1ib2xdOwogIH0KI2VuZGlmIC8vICNpZiBZWURFQlVHIHx8IDAKCgojaWYg WVlERUJVRwogIC8vIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5 bWJvbCBTWU1CT0wtTlVNLgogIC8vIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGlu ZyBhdCBcYSBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4KICBjb25zdCBjaGFyKgogIGNvbnN0IHBh cnNlcjo6eXl0bmFtZV9bXSA9CiAgewogICJcImVuZCBvZiBmaWxlXCIiLCAiZXJyb3IiLCAiXCJp bnZhbGlkIHRva2VuXCIiLCAiJ2InIiwgIidhJyIsCiAgIiRhY2NlcHQiLCAic3RhcnQiLCAiYWx0 MSIsICJhbHQyIiwgWVlfTlVMTFBUUgogIH07CiNlbmRpZgoKCgoKCgogIHZvaWQKICBwYXJzZXI6 Onl5X2Rlc3Ryb3lfIChjb25zdCBjaGFyKiB5eW1zZywgc3ltYm9sX2tpbmRfdHlwZSB5eWtpbmQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUmIHl5dmFsKQogIHsKICAgIFlZ X1VTRSAoeXl2YWwpOwogICAgaWYgKCF5eW1zZykKICAgICAgeXltc2cgPSAiRGVsZXRpbmciOwog ICAgcGFyc2VyJiB5eXBhcnNlciA9ICp0aGlzOwogICAgWVlfVVNFICh5eXBhcnNlcik7CiAgICBZ WV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eWtpbmQsIHl5dmFsLCB5eWxvYyk7CgogICAgWVlfSUdO T1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KICAgIHN3aXRjaCAoeXlraW5kKQogICAgewog ICAgICBjYXNlIHN5bWJvbF9raW5kOjpTXzNfYl86IC8vICdiJwojbGluZSAxNyAiZ2xyLXJlZ3Ix Ni55IgogICAgICAgICAgICAgICAgICAgIHsgbG9va2FoZWFkX3ZhbHVlID0gMDsgfQojbGluZSAz Mjg5ICJnbHItcmVncjE2LmNjIgogICAgICAgIGJyZWFrOwoKICAgICAgZGVmYXVsdDoKICAgICAg ICBicmVhazsKICAgIH0KICAgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAogIH0K CiNpZiBZWURFQlVHCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS4KICB8IFByaW50IHRoaXMgc3lt Ym9sLiAgfAogIGAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogIHZvaWQKICBwYXJzZXI6Onl5X3N5 bWJvbF92YWx1ZV9wcmludF8gKHN5bWJvbF9raW5kX3R5cGUgeXlraW5kLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB2YWx1ZV90eXBlJiB5eXZhbCkgY29uc3QKICB7CiAgICBZWV9V U0UgKHl5dmFsKTsKICAgIHN0ZDo6b3N0cmVhbSYgeXlvID0gZGVidWdfc3RyZWFtICgpOwogICAg WVlfVVNFICh5eW8pOwogICAgWVlfVVNFICh5eWtpbmQpOwogIH0KCiAgdm9pZAogIHBhcnNlcjo6 eXlfc3ltYm9sX3ByaW50XyAoc3ltYm9sX2tpbmRfdHlwZSB5eWtpbmQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHZhbHVlX3R5cGUmIHl5dmFsKSBjb25zdAogIHsKICAgICp5eWNk ZWJ1Z18gPDwgKHl5a2luZCA8IFlZTlRPS0VOUyA/ICJ0b2tlbiIgOiAibnRlcm0iKQogICAgICAg ICAgICAgICA8PCAnICcgPDwgc3ltYm9sX25hbWUgKHl5a2luZCkgPDwgIiAoIjsKICAgIHl5X3N5 bWJvbF92YWx1ZV9wcmludF8gKHl5a2luZCwgeXl2YWwpOwogICAgKnl5Y2RlYnVnXyA8PCAnKSc7 CiAgfQoKICBzdGQ6Om9zdHJlYW0mCiAgcGFyc2VyOjpkZWJ1Z19zdHJlYW0gKCkgY29uc3QKICB7 CiAgICByZXR1cm4gKnl5Y2RlYnVnXzsKICB9CgogIHZvaWQKICBwYXJzZXI6OnNldF9kZWJ1Z19z dHJlYW0gKHN0ZDo6b3N0cmVhbSYgbykKICB7CiAgICB5eWNkZWJ1Z18gPSAmbzsKICB9CgoKICBw YXJzZXI6OmRlYnVnX2xldmVsX3R5cGUKICBwYXJzZXI6OmRlYnVnX2xldmVsICgpIGNvbnN0CiAg ewogICAgcmV0dXJuIHl5ZGVidWc7CiAgfQoKICB2b2lkCiAgcGFyc2VyOjpzZXRfZGVidWdfbGV2 ZWwgKGRlYnVnX2xldmVsX3R5cGUgbCkKICB7CiAgICAvLyBBY3R1YWxseSwgaXQgaXMgeXlkZWJ1 ZyB3aGljaCBpcyByZWFsbHkgdXNlZC4KICAgIHl5ZGVidWcgPSBsOwogIH0KI2VuZGlmIC8vIFlZ REVCVUcKCiAgcGFyc2VyOjpzeW1ib2xfa2luZF90eXBlCiAgcGFyc2VyOjp5eXRyYW5zbGF0ZV8g KGludCB0KSBZWV9OT0VYQ0VQVAogIHsKICAgIC8vIFlZVFJBTlNMQVRFW1RPS0VOLU5VTV0gLS0g U3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCiAgICAvLyBUT0tFTi1OVU0gYXMgcmV0dXJu ZWQgYnkgeXlsZXguCiAgICBzdGF0aWMKICAgIGNvbnN0IHNpZ25lZCBjaGFyCiAgICB0cmFuc2xh dGVfdGFibGVbXSA9CiAgICB7CiAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAy LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAg IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg MiwgICAgIDIsCiAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgIDIsICAgICAy LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs CiAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg MiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgIDIsICAgICAyLCAgICAgMiwg ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAy LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDMs ICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg MiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAyLCAgICAgMiwg ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAog ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs ICAgICAyLCAgICAgMiwKICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAyLCAgICAgMiwgICAgIDIsICAg ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwg ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg ICAgMiwKICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs ICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAg ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAg ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg ICAgMiwgICAgIDIsCiAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgIDIsICAg ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg IDIsCiAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg ICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs ICAgICAyLCAgICAgMSwgICAgIDIKICAgIH07CiAgICAvLyBMYXN0IHZhbGlkIHRva2VuIGtpbmQu CiAgICBjb25zdCBpbnQgY29kZV9tYXggPSAyNTc7CgogICAgaWYgKHQgPD0gMCkKICAgICAgcmV0 dXJuIHN5bWJvbF9raW5kOjpTX1lZRU9GOwogICAgZWxzZSBpZiAodCA8PSBjb2RlX21heCkKICAg ICAgcmV0dXJuIHN0YXRpY19jYXN0IDxzeW1ib2xfa2luZF90eXBlPiAodHJhbnNsYXRlX3RhYmxl W3RdKTsKICAgIGVsc2UKICAgICAgcmV0dXJuIHN5bWJvbF9raW5kOjpTX1lZVU5ERUY7CiAgfQoK CgogIC8qLS0tLS0tLS0tLgogIHwgc3ltYm9sLiAgfAogIGAtLS0tLS0tLS0qLwogIC8vIGJhc2lj X3N5bWJvbC4KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFzZT4KICBwYXJzZXI6OmJhc2ljX3N5bWJv bDxCYXNlPjo6YmFzaWNfc3ltYm9sIChjb25zdCBiYXNpY19zeW1ib2wmIHRoYXQpCiAgICA6IEJh c2UgKHRoYXQpCiAgICAsIHZhbHVlICh0aGF0LnZhbHVlKQogIHt9CgoKICAvLy8gQ29uc3RydWN0 b3IgZm9yIHZhbHVlbGVzcyBzeW1ib2xzLgogIHRlbXBsYXRlIDx0eXBlbmFtZSBCYXNlPgogIHBh cnNlcjo6YmFzaWNfc3ltYm9sPEJhc2U+OjpiYXNpY19zeW1ib2wgKHR5cGVuYW1lIEJhc2U6Omtp bmRfdHlwZSB0KQogICAgOiBCYXNlICh0KQogICAgLCB2YWx1ZSAoKQogIHt9CgogIHRlbXBsYXRl IDx0eXBlbmFtZSBCYXNlPgogIHBhcnNlcjo6YmFzaWNfc3ltYm9sPEJhc2U+OjpiYXNpY19zeW1i b2wgKHR5cGVuYW1lIEJhc2U6OmtpbmRfdHlwZSB0LCBZWV9SVlJFRiAodmFsdWVfdHlwZSkgdikK ICAgIDogQmFzZSAodCkKICAgICwgdmFsdWUgKFlZX01PVkUgKHYpKQogIHt9CgoKCiAgdGVtcGxh dGUgPHR5cGVuYW1lIEJhc2U+CiAgYm9vbAogIHBhcnNlcjo6YmFzaWNfc3ltYm9sPEJhc2U+Ojpl bXB0eSAoKSBjb25zdCBZWV9OT0VYQ0VQVAogIHsKICAgIHJldHVybiB0aGlzLT5raW5kICgpID09 IHN5bWJvbF9raW5kOjpTX1lZRU1QVFk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFzZT4K ICB2b2lkCiAgcGFyc2VyOjpiYXNpY19zeW1ib2w8QmFzZT46Om1vdmUgKGJhc2ljX3N5bWJvbCYg cykKICB7CiAgICBzdXBlcl90eXBlOjptb3ZlIChzKTsKICAgIHZhbHVlID0gWVlfTU9WRSAocy52 YWx1ZSk7CiAgfQoKICAvLyBieV9raW5kLgogIHBhcnNlcjo6Ynlfa2luZDo6Ynlfa2luZCAoKSBZ WV9OT0VYQ0VQVAogICAgOiBraW5kXyAoc3ltYm9sX2tpbmQ6OlNfWVlFTVBUWSkKICB7fQoKI2lm IDIwMTEwM0wgPD0gWVlfQ1BMVVNQTFVTCiAgcGFyc2VyOjpieV9raW5kOjpieV9raW5kIChieV9r aW5kJiYgdGhhdCkgWVlfTk9FWENFUFQKICAgIDoga2luZF8gKHRoYXQua2luZF8pCiAgewogICAg dGhhdC5jbGVhciAoKTsKICB9CiNlbmRpZgoKICBwYXJzZXI6OmJ5X2tpbmQ6OmJ5X2tpbmQgKGNv bnN0IGJ5X2tpbmQmIHRoYXQpIFlZX05PRVhDRVBUCiAgICA6IGtpbmRfICh0aGF0LmtpbmRfKQog IHt9CgogIHBhcnNlcjo6Ynlfa2luZDo6Ynlfa2luZCAodG9rZW5fa2luZF90eXBlIHQpIFlZX05P RVhDRVBUCiAgICA6IGtpbmRfICh5eXRyYW5zbGF0ZV8gKHQpKQogIHt9CgoKICBwYXJzZXI6OmJ5 X2tpbmQmCiAgcGFyc2VyOjpieV9raW5kOjpieV9raW5kOjpvcGVyYXRvcj0gKGNvbnN0IGJ5X2tp bmQmIHRoYXQpCiAgewogICAga2luZF8gPSB0aGF0LmtpbmRfOwogICAgcmV0dXJuICp0aGlzOwog IH0KCiAgcGFyc2VyOjpieV9raW5kJgogIHBhcnNlcjo6Ynlfa2luZDo6Ynlfa2luZDo6b3BlcmF0 b3I9IChieV9raW5kJiYgdGhhdCkKICB7CiAgICBraW5kXyA9IHRoYXQua2luZF87CiAgICB0aGF0 LmNsZWFyICgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCgogIHZvaWQKICBwYXJzZXI6OmJ5X2tp bmQ6OmNsZWFyICgpIFlZX05PRVhDRVBUCiAgewogICAga2luZF8gPSBzeW1ib2xfa2luZDo6U19Z WUVNUFRZOwogIH0KCiAgdm9pZAogIHBhcnNlcjo6Ynlfa2luZDo6bW92ZSAoYnlfa2luZCYgdGhh dCkKICB7CiAgICBraW5kXyA9IHRoYXQua2luZF87CiAgICB0aGF0LmNsZWFyICgpOwogIH0KCiAg cGFyc2VyOjpzeW1ib2xfa2luZF90eXBlCiAgcGFyc2VyOjpieV9raW5kOjpraW5kICgpIGNvbnN0 IFlZX05PRVhDRVBUCiAgewogICAgcmV0dXJuIGtpbmRfOwogIH0KCgoKfSAvLyB5eQojbGluZSAz NTAwICJnbHItcmVncjE2LmNjIgojbGluZSAzMyAiZ2xyLXJlZ3IxNi55IgoKCi8qIEEgQysrIGVy cm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCnZvaWQKeXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0 IHN0ZDo6c3RyaW5nJiBtKQp7CiAgc3RkOjpjZXJyIDw8IG0gPDwgJ1xuJzsKfQoKc3RhdGljIGlu dAp5eXBhcnNlICgpCnsKICB5eTo6cGFyc2VyIHA7CiAgcmV0dXJuIHAucGFyc2UgKCk7Cn0KCiNp bmNsdWRlIDxhc3NlcnQuaD4Kc3RhdGljCmludCB5eWxleCAoeXk6OnBhcnNlcjo6dmFsdWVfdHlw ZSAqbHZhbHApCnsKICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gImFiIjsKICBzdGF0aWMg aW50IHRva251bSA9IDA7CiAgaW50IHJlczsKICAodm9pZCkgbHZhbHA7CiAgZW51bSB7IGlucHV0 X2VsdHMgPSBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0gfTsKICAodm9pZCkgaW5wdXRf ZWx0czsKICBhc3NlcnQgKDAgPD0gdG9rbnVtICYmIHRva251bSA8IGlucHV0X2VsdHMpOwogIHJl cyA9IGlucHV0W3Rva251bSsrXTsKICBpZiAocmVzID09ICdiJykKICAgIGxvb2thaGVhZF92YWx1 ZSA9IDE7CgogIHJldHVybiByZXM7Cn0KCmludAptYWluICh2b2lkKQp7CiAgaW50IHN0YXR1czsK ICBpZiAoZ2V0ZW52ICgiWVlERUJVRyIpKQogICAgeXlkZWJ1ZyA9IDE7CiAgc3RhdHVzID0geXlw YXJzZSAoKSAhPSAxOwogIGlmIChsb29rYWhlYWRfdmFsdWUpCiAgICB7CiAgICAgIGZwcmludGYg KHN0ZGVyciwgIkxvb2thaGVhZCBkZXN0cnVjdG9yIG5vdCBjYWxsZWQuXG4iKTsKICAgICAgc3Rh dHVzID0gMTsKICAgIH0KICByZXR1cm4gc3RhdHVzOwp9Cg== --0000000000002d3a0d0646ba051b Content-Type: application/octet-stream; name=run Content-Disposition: attachment; filename=run Content-Transfer-Encoding: base64 Content-ID: <f_mjkkk35r4> X-Attachment-Id: f_mjkkk35r4 IyEgL2Jpbi9zaAp0ZXN0ICR7WlNIX1ZFUlNJT04reX0gJiYgYWxpYXMgLWcgJyR7MSsiJEAifSc9 JyIkQCInCmNkICcvbml4L3Zhci9uaXgvYnVpbGRzL25peC0zMzE1Mi00NzQ3ODQ1MjMvYmlzb24t My44LjIvdGVzdHMnCmV4ZWMgJHtDT05GSUdfU0hFTEwtL25peC9zdG9yZS9jdjZqdjhoOXJidjZn eDhrNGhhcWJpcXY3MnhiM2Ewcy1iYXNoLTUuM3AzL2Jpbi9iYXNofSAiL25peC92YXIvbml4L2J1 aWxkcy9uaXgtMzMxNTItNDc0Nzg0NTIzL2Jpc29uLTMuOC4yLy4vdGVzdHMvdGVzdHN1aXRlIiAt diAtZCAgQVVUT1RFU1RfUEFUSD0nL25peC9zdG9yZS85amw0OWlhYmttM3psYjM0ZjN4cWpka3Nh dmtybGd6bC1iaXNvbi0zLjguMi9iaW4nIDc2NCAkezErIiRAIn0KZXhpdCAxCg== --0000000000002d3a0d0646ba051b Content-Type: application/octet-stream; name="glr-regr16.output" Content-Disposition: attachment; filename="glr-regr16.output" Content-Transfer-Encoding: base64 Content-ID: <f_mjkkk35l2> X-Attachment-Id: f_mjkkk35l2 VGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyCgogICAgJ2InCgoKU3RhdGUgMCBjb25mbGljdHM6 IDEgcmVkdWNlL3JlZHVjZQoKCkdyYW1tYXIKCiAgICAwICRhY2NlcHQ6IHN0YXJ0ICRlbmQKCiAg ICAxIHN0YXJ0OiBhbHQxICdhJwogICAgMiAgICAgIHwgYWx0MiAnYScKCiAgICAzIGFsdDE6ICVl bXB0eQoKICAgIDQgYWx0MjogJWVtcHR5CgoKVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRo ZXkgYXBwZWFyCgogICAgJGVuZCAoMCkgMAogICAgJ2EnICg5NykgMSAyCiAgICAnYicgKDk4KQog ICAgZXJyb3IgKDI1NikKCgpOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBl YXIKCiAgICAkYWNjZXB0ICg1KQogICAgICAgIG9uIGxlZnQ6IDAKICAgIHN0YXJ0ICg2KQogICAg ICAgIG9uIGxlZnQ6IDEgMgogICAgICAgIG9uIHJpZ2h0OiAwCiAgICBhbHQxICg3KQogICAgICAg IG9uIGxlZnQ6IDMKICAgICAgICBvbiByaWdodDogMQogICAgYWx0MiAoOCkKICAgICAgICBvbiBs ZWZ0OiA0CiAgICAgICAgb24gcmlnaHQ6IDIKCgpTdGF0ZSAwCgogICAgMCAkYWNjZXB0OiAuIHN0 YXJ0ICRlbmQKICAgIDEgc3RhcnQ6IC4gYWx0MSAnYScKICAgIDIgICAgICB8IC4gYWx0MiAnYScK ICAgIDMgYWx0MTogJWVtcHR5IC4gIFsnYSddCiAgICA0IGFsdDI6ICVlbXB0eSAuICBbJ2EnXQoK ICAgICdhJyAgICAgICByZWR1Y2UgdXNpbmcgcnVsZSAzIChhbHQxKQogICAgJ2EnICAgICAgIFty ZWR1Y2UgdXNpbmcgcnVsZSA0IChhbHQyKV0KICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVs ZSAzIChhbHQxKQoKICAgIHN0YXJ0ICBnbyB0byBzdGF0ZSAxCiAgICBhbHQxICAgZ28gdG8gc3Rh dGUgMgogICAgYWx0MiAgIGdvIHRvIHN0YXRlIDMKCiAgICByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0 IG9uIHRva2VuICdhJzoKICAgICAgICAzIGFsdDE6ICVlbXB0eSAuCiAgICAgICAgNCBhbHQyOiAl ZW1wdHkgLgogICAgICBFeGFtcGxlOiAuICdhJwogICAgICBGaXJzdCByZWR1Y2UgZGVyaXZhdGlv bgogICAgICAgIHN0YXJ0CiAgICAgICAgYC0+IDE6IGFsdDEgICAgICAgICAgICAnYScKICAgICAg ICAgICAgICAgYC0+IDM6ICVlbXB0eSAuCiAgICAgIFNlY29uZCByZWR1Y2UgZGVyaXZhdGlvbgog ICAgICAgIHN0YXJ0CiAgICAgICAgYC0+IDI6IGFsdDIgICAgICAgICAgICAnYScKICAgICAgICAg ICAgICAgYC0+IDQ6ICVlbXB0eSAuCgoKClN0YXRlIDEKCiAgICAwICRhY2NlcHQ6IHN0YXJ0IC4g JGVuZAoKICAgICRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNAoKClN0YXRlIDIKCiAgICAx IHN0YXJ0OiBhbHQxIC4gJ2EnCgogICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKCgpT dGF0ZSAzCgogICAgMiBzdGFydDogYWx0MiAuICdhJwoKICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0 byBzdGF0ZSA2CgoKU3RhdGUgNAoKICAgIDAgJGFjY2VwdDogc3RhcnQgJGVuZCAuCgogICAgJGRl ZmF1bHQgIGFjY2VwdAoKClN0YXRlIDUKCiAgICAxIHN0YXJ0OiBhbHQxICdhJyAuCgogICAgJGRl ZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEgKHN0YXJ0KQoKClN0YXRlIDYKCiAgICAyIHN0YXJ0 OiBhbHQyICdhJyAuCgogICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKHN0YXJ0KQo= --0000000000002d3a0d0646ba051b Content-Type: application/octet-stream; name="glr-regr16.y" Content-Disposition: attachment; filename="glr-regr16.y" Content-Transfer-Encoding: base64 Content-ID: <f_mjkkk35o3> X-Attachment-Id: f_mjkkk35o3 JWNvZGUgdG9wIHsgLyogLSotIGMrKyAtKi0gKi8KLyogQWRqdXN0IHRvIHRoZSBjb21waWxlci4K ICBXZSB1c2VkIHRvIGRvIGl0IGhlcmUsIGJ1dCBlYWNoIHRpbWUgd2UgYWRkIGEgbmV3IGxpbmUs CiAgd2UgaGF2ZSB0byBhZGp1c3QgYWxsIHRoZSBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2Fn ZXMuCiAgSXQncyBzaW1wbGVyIHRvIHVzZSBhIGNvbnN0YW50IGluY2x1ZGUgdG8gYSB2YXJ5aW5n IGZpbGUuICAqLwojaW5jbHVkZSA8dGVzdHN1aXRlLmg+Cn0KCgolZGVmaW5lIHBhcnNlLmFzc2Vy dAolZGVmaW5lIHBhcnNlLnRyYWNlCiVnbHItcGFyc2VyCiVleHBlY3QgMAolZXhwZWN0LXJyIDEK JXNrZWxldG9uICJnbHIyLmNjIgoKJWRlc3RydWN0b3IgeyBsb29rYWhlYWRfdmFsdWUgPSAwOyB9 ICdiJwoKJWNvZGUgewojIGluY2x1ZGUgPGFzc2VydC5oPgoKICBzdGF0aWMgaW50IHl5bGV4ICh5 eTo6cGFyc2VyOjp2YWx1ZV90eXBlICpsdmFscCk7CiAgc3RhdGljIGludCBsb29rYWhlYWRfdmFs dWUgPSAwOwojIGRlZmluZSBVU0UodmFsKQp9CgolJQoKc3RhcnQ6IGFsdDEgJ2EnIHwgYWx0MiAn YScgOwphbHQxOiA7CmFsdDI6IDsKCiUlCgovKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rp b24uICAqLwp2b2lkCnl5OjpwYXJzZXI6OmVycm9yIChjb25zdCBzdGQ6OnN0cmluZyYgbSkKewog IHN0ZDo6Y2VyciA8PCBtIDw8ICdcbic7Cn0KCnN0YXRpYyBpbnQKeXlwYXJzZSAoKQp7CiAgeXk6 OnBhcnNlciBwOwogIHJldHVybiBwLnBhcnNlICgpOwp9CgojaW5jbHVkZSA8YXNzZXJ0Lmg+CnN0 YXRpYwppbnQgeXlsZXggKHl5OjpwYXJzZXI6OnZhbHVlX3R5cGUgKmx2YWxwKQp7CiAgc3RhdGlj IGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhYiI7CiAgc3RhdGljIGludCB0b2tudW0gPSAwOwogIGlu dCByZXM7CiAgKHZvaWQpIGx2YWxwOwogIGVudW0geyBpbnB1dF9lbHRzID0gc2l6ZW9mIGlucHV0 IC8gc2l6ZW9mIGlucHV0WzBdIH07CiAgKHZvaWQpIGlucHV0X2VsdHM7CiAgYXNzZXJ0ICgwIDw9 IHRva251bSAmJiB0b2tudW0gPCBpbnB1dF9lbHRzKTsKICByZXMgPSBpbnB1dFt0b2tudW0rK107 CiAgaWYgKHJlcyA9PSAnYicpCiAgICBsb29rYWhlYWRfdmFsdWUgPSAxOwoKICByZXR1cm4gcmVz Owp9CgppbnQKbWFpbiAodm9pZCkKewogIGludCBzdGF0dXM7CiAgaWYgKGdldGVudiAoIllZREVC VUciKSkKICAgIHl5ZGVidWcgPSAxOwogIHN0YXR1cyA9IHl5cGFyc2UgKCkgIT0gMTsKICBpZiAo bG9va2FoZWFkX3ZhbHVlKQogICAgewogICAgICBmcHJpbnRmIChzdGRlcnIsICJMb29rYWhlYWQg ZGVzdHJ1Y3RvciBub3QgY2FsbGVkLlxuIik7CiAgICAgIHN0YXR1cyA9IDE7CiAgICB9CiAgcmV0 dXJuIHN0YXR1czsKfQo= --0000000000002d3a0d0646ba051b Content-Type: application/octet-stream; name=stderr Content-Disposition: attachment; filename=stderr Content-Transfer-Encoding: base64 Content-ID: <f_mjkkk35u5> X-Attachment-Id: f_mjkkk35u5 c3ludGF4IGVycm9yCg== --0000000000002d3a0d0646ba051b Content-Type: application/octet-stream; name="testsuite.log" Content-Disposition: attachment; filename="testsuite.log" Content-Transfer-Encoding: base64 Content-ID: <f_mjkkk35y6> X-Attachment-Id: f_mjkkk35y6 IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIGNvbXBpbGF0aW9uIC0qLQo3NjQuIGds ci1yZWdyZXNzaW9uLmF0OjE4NjI6IHRlc3RpbmcgTGVha2VkIGxvb2thaGVhZCBhZnRlciBub25k ZXRlcm1pbmlzdGljIHBhcnNlIHN5bnRheCBlcnJvcjogZ2xyMi5jYyAuLi4KLi9nbHItcmVncmVz c2lvbi5hdDoxODYyOiBDT0xVTU5TPTEwMDA7IGV4cG9ydCBDT0xVTU5TOyBOT19URVJNX0hZUEVS TElOS1M9MTsgZXhwb3J0IE5PX1RFUk1fSFlQRVJMSU5LUzsgIGJpc29uIC0tY29sb3I9bm8gLWZu by1jYXJldCAtcmFsbCAtbyBnbHItcmVncjE2LmNjIGdsci1yZWdyMTYueQouL2dsci1yZWdyZXNz aW9uLmF0OjE4NjI6ICRDWFggJENQUEZMQUdTICRDWFgxMV9DWFhGTEFHUyAkQ1hYRkxBR1MgJExE RkxBR1MgLW8gZ2xyLXJlZ3IxNiBnbHItcmVncjE2LmNjICRMSUJTCnN0ZGVycjoKc3Rkb3V0Ogou L2dsci1yZWdyZXNzaW9uLmF0OjE4NjI6ICAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxNgovbml4L3Zh ci9uaXgvYnVpbGRzL25peC0zMzE1Mi00NzQ3ODQ1MjMvYmlzb24tMy44LjIvdGVzdHMvdGVzdHN1 aXRlLmRpci9hdC1ncm91cHMvNzY0L3Rlc3Qtc291cmNlOiBsaW5lIDI1MTogMjE4NzMgVHJhY2Uv QlBUIHRyYXA6IDUgICAgICAgICAgKCAkYXRfY2hlY2tfdHJhY2U7ICRQUkVQQVJTRVIgLi9nbHIt cmVncjE2ICkgPj4gIiRhdF9zdGRvdXQiIDI+PiAiJGF0X3N0ZGVyciIgNT4mLQpzdGRlcnI6CnN5 bnRheCBlcnJvcgouL2dsci1yZWdyZXNzaW9uLmF0OjE4NjI6IGV4aXQgY29kZSB3YXMgMTMzLCBl eHBlY3RlZCAwCjc2NC4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTg2MjogNzY0LiBMZWFrZWQgbG9va2Fo ZWFkIGFmdGVyIG5vbmRldGVybWluaXN0aWMgcGFyc2Ugc3ludGF4IGVycm9yOiBnbHIyLmNjIChn bHItcmVncmVzc2lvbi5hdDoxODYyKTogRkFJTEVEIChnbHItcmVncmVzc2lvbi5hdDoxODYyKQo= --0000000000002d3a0d0646ba051b--