ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGQ2NWZmZTUuLjI5OTMzNDggMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTg4MCw2ICsxODgwLDEzIEBACiBTOiBELTkxMDgwIFV0dGVucmV1dGgKIFM6IEdlcm1hbnkKIAorTjogSmF5YSBLdW1hcgorRTogamF5YWxrQGludHdvcmtzLmJpegorVzogaHR0cDovL3d3dy5pbnR3b3Jrcy5iaXoKK0Q6IEFyYyBtb25vY2hyb21lIExDRCBmcmFtZWJ1ZmZlciBkcml2ZXIsIHg4NiByZWJvb3QgZml4dXBzCitTOiBHdXJnYW9uLCBJbmRpYQorUzogS3VhbGEgTHVtcHVyLCBNYWxheXNpYQorCiBOOiBHYWJvciBLdXRpCiBNOiBzZWFzb25zQGZhbGNvbi5zY2guYm1lLmh1CiBNOiBzZWFzb25zQG1ha29zdGVzenRhLnNvdGUuaHUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvaW50ZWxmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2ludGVsZmIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMmQzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL2ludGVsZmIudHh0CkBAIC0wLDAgKzEsMTM1IEBACitJbnRlbCA4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHIEZyYW1lYnVmZmVyIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBLiBJbnRyb2R1Y3Rpb24KKwlUaGlzIGlzIGEgZnJhbWVidWZmZXIgZHJpdmVyIGZvciB2YXJpb3VzIEludGVsIDgxMC84MTUgY29tcGF0aWJsZQorZ3JhcGhpY3MgZGV2aWNlcy4gIFRoZXNlIHdvdWxkIGluY2x1ZGU6CisKKwlJbnRlbCA4MzBNCisJSW50ZWwgODEwRTg0NUcKKwlJbnRlbCA4NTJHTQorCUludGVsIDg1NUdNCisJSW50ZWwgODY1RworCUludGVsIDkxNUcKKworQi4gIExpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMKKworICAgYS4gInZpZGVvPWludGVsZmIiCisJZW5hYmxlcyB0aGUgaW50ZWxmYiBkcml2ZXIKKworCVJlY29tbWVuZGF0aW9uOiByZXF1aXJlZAorCisgICBiLiAibW9kZT08eHJlcz54PHlyZXM+Wy08YnBwPl1bQDxyZWZyZXNoPl0iCisJc2VsZWN0IG1vZGUKKworCVJlY29tbWVuZGF0aW9uOiB1c2VyIHByZWZlcmVuY2UKKwkoZGVmYXVsdCA9IDEwMjR4NzY4LTMyQDcwKQorCisgICBjLiAidnJhbT08dmFsdWU+IgorCXNlbGVjdCBhbW91bnQgb2Ygc3lzdGVtIFJBTSBpbiBNQiB0byBhbGxvY2F0ZSBmb3IgdGhlIHZpZGVvIG1lbW9yeQorCWlmIG5vdCBlbm91Z2ggUkFNIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCBieSB0aGUgQklPUy4KKworCVJlY29tbWVuZGF0aW9uOiAxIC0gNCBNQi4KKwkoZGVmYXVsdCA9IDQgTUIpCisKKyAgIGQuICJ2b2Zmc2V0PTx2YWx1ZT4iCisgICAgICAgIHNlbGVjdCBhdCB3aGF0IG9mZnNldCBpbiBNQiBvZiB0aGUgbG9naWNhbCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlCisJZnJhbWVidWZmZXIgbWVtb3J5LiAgVGhlIGludGVudCBpcyB0byBhdm9pZCB0aGUgbWVtb3J5IGJsb2NrcworCXVzZWQgYnkgc3RhbmRhcmQgZ3JhcGhpY3MgYXBwbGljYXRpb25zIChYRnJlZTg2KS4gRGVwZW5kaW5nIG9uIHlvdXIKKyAgICAgICAgdXNhZ2UsIGFkanVzdCB0aGUgdmFsdWUgdXAgb3IgZG93biwgKDAgZm9yIG1heGltdW0gdXNhZ2UsIDYzLzEyNyBNQgorICAgICAgICBmb3IgdGhlIGxlYXN0IGFtb3VudCkuICBOb3RlLCBhbiBhcmJpdHJhcnkgc2V0dGluZyBtYXkgY29uZmxpY3QKKyAgICAgICAgd2l0aCBYRnJlZTg2LgorCisJUmVjb21tZW5kYXRpb246IGRvIG5vdCBzZXQKKwkoZGVmYXVsdCA9IDQ4IE1CKQorCisgICBlLiAiYWNjZWwiCisJZW5hYmxlIHRleHQgYWNjZWxlcmF0aW9uLiAgVGhpcyBjYW4gYmUgZW5hYmxlZC9yZWVuYWJsZWQgYW55dGltZQorCWJ5IHVzaW5nICdmYnNldCAtYWNjZWwgdHJ1ZS9mYWxzZScuCisKKwlSZWNvbW1lbmRhdGlvbjogZW5hYmxlCisJKGRlZmF1bHQgPSBzZXQpCisKKyAgIGYuICJod2N1cnNvciIKKwllbmFibGUgY3Vyc29yIGFjY2VsZXJhdGlvbi4KKworCVJlY29tbWVuZGF0aW9uOiBlbmFibGUKKwkoZGVmYXVsdCA9IHNldCkKKworICAgZy4gIm10cnIiCisJZW5hYmxlIE1UUlIuICBUaGlzIGFsbG93cyBkYXRhIHRyYW5zZmVycyB0byB0aGUgZnJhbWVidWZmZXIgbWVtb3J5CisJdG8gb2NjdXIgaW4gYnVyc3RzIHdoaWNoIGNhbiBzaWduaWZpY2FudGx5IGluY3JlYXNlIHBlcmZvcm1hbmNlLgorCU5vdCB2ZXJ5IGhlbHBmdWwgd2l0aCB0aGUgaW50ZWwgY2hpcHMgYmVjYXVzZSBvZiAnc2hhcmVkIG1lbW9yeScuCisKKwlSZWNvbW1lbmRhdGlvbjogc2V0CisJKGRlZmF1bHQgPSBzZXQpCisKKyAgIGguICJmaXhlZCIKKwlkaXNhYmxlIG1vZGUgc3dpdGNoaW5nLgorCisJUmVjb21tZW5kYXRpb246IGRvIG5vdCBzZXQKKwkoZGVmYXVsdCA9IG5vdCBzZXQpCisKKyAgIFRoZSBiaW5hcnkgcGFyYW1ldGVycyBjYW4gYmUgdW5zZXQgd2l0aCBhICJubyIgcHJlZml4LCBleGFtcGxlICJub2FjY2VsIi4KKyAgIFRoZSBkZWZhdWx0IHBhcmFtZXRlciAobm90IG5hbWVkKSBpcyB0aGUgbW9kZS4KKworQy4gS2VybmVsIGJvb3RpbmcKKworU2VwYXJhdGUgZWFjaCBvcHRpb24vb3B0aW9uLXBhaXIgYnkgY29tbWFzICgsKSBhbmQgdGhlIG9wdGlvbiBmcm9tIGl0cyB2YWx1ZQord2l0aCBhbiBlcXVhbHMgc2lnbiAoPSkgYXMgaW4gdGhlIGZvbGxvd2luZzoKKwordmlkZW89aTgxMGZiOm9wdGlvbjEsb3B0aW9uMj12YWx1ZTIKKworU2FtcGxlIFVzYWdlCistLS0tLS0tLS0tLS0KKworSW4gL2V0Yy9saWxvLmNvbmYsIGFkZCB0aGUgbGluZToKKworYXBwZW5kPSJ2aWRlbz1pbnRlbGZiOjgwMHg2MDAtMzJANzUsYWNjZWwsaHdjdXJzb3IsdnJhbT04IgorCitUaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgdG8gODAweDYwMCBhdCAzMmJwcCBhbmQgNzVIei4gVGhlCitmcmFtZWJ1ZmZlciB3aWxsIHVzZSA4IE1CIG9mIFN5c3RlbSBSQU0uIGh3IGFjY2VsZXJhdGlvbiBvZiB0ZXh0IGFuZCBjdXJzb3IKK3dpbGwgYmUgZW5hYmxlZC4KKworRC4gIE1vZHVsZSBvcHRpb25zCisKKwlUaGUgbW9kdWxlIHBhcmFtZXRlcnMgYXJlIGVzc2VudGlhbGx5IHNpbWlsYXIgdG8gdGhlIGtlcm5lbAorcGFyYW1ldGVycy4gVGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IHlvdSBuZWVkIHRvIGluY2x1ZGUgYSBCb29sZWFuIHZhbHVlCisoMSBmb3IgVFJVRSwgYW5kIDAgZm9yIEZBTFNFKSBmb3IgdGhvc2Ugb3B0aW9ucyB3aGljaCBkb24ndCBuZWVkIGEgdmFsdWUuCisKK0V4YW1wbGUsIHRvIGVuYWJsZSBNVFJSLCBpbmNsdWRlICJtdHJyPTEiLgorCitTYW1wbGUgVXNhZ2UKKy0tLS0tLS0tLS0tLQorCitVc2luZyB0aGUgc2FtZSBzZXR1cCBhcyBkZXNjcmliZWQgYWJvdmUsIGxvYWQgdGhlIG1vZHVsZSBsaWtlIHRoaXM6CisKKwltb2Rwcm9iZSBpbnRlbGZiIG1vZGU9ODAweDYwMC0zMkA3NSB2cmFtPTggYWNjZWw9MSBod2N1cnNvcj0xCisKK09yIGp1c3QgYWRkIHRoZSBmb2xsb3dpbmcgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mCisKKwlvcHRpb25zIGludGVsZmIgbW9kZT04MDB4NjAwLTMyQDc1IHZyYW09OCBhY2NlbD0xIGh3Y3Vyc29yPTEKKworYW5kIGp1c3QgZG8gYQorCisJbW9kcHJvYmUgaW50ZWxmYgorCisKK0UuICBBY2tub3dsZWRnbWVudDoKKworCTEuICBHZWVydCBVeXR0ZXJob2V2ZW4gLSBoaXMgZXhjZWxsZW50IGhvd3RvIGFuZCB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgZHJpdmVyIGNvZGUgbWFkZSB0aGlzIHBvc3NpYmxlLgorCisJMi4gIEplZmYgSGFydG1hbm4gZm9yIGhpcyBhZ3BnYXJ0IGNvZGUuCisKKwkzLiAgRGF2aWQgRGF3ZXMgZm9yIGhpcyBvcmlnaW5hbCBrZXJuZWwgMi40IGNvZGUuCisKKwk0LiAgVGhlIFggZGV2ZWxvcGVycy4gIEluc2lnaHRzIHdlcmUgcHJvdmlkZWQganVzdCBieSByZWFkaW5nIHRoZQorCSAgICBYRnJlZTg2IHNvdXJjZSBjb2RlLgorCisJNS4gIEFudG9uaW5vIEEuIERhcGxhcyBmb3IgaGlzIGluc3BpcmluZyBpODEwZmIgZHJpdmVyLgorCisJNi4gIEFuZHJldyBNb3J0b24gZm9yIGhpcyBrZXJuZWwgcGF0Y2hlcyBtYWludGVuYW5jZS4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitTeWx2YWluCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lzb2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaXNvZnMudHh0CmluZGV4IGY2NGExMDUuLjQyNDU4NWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaXNvZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaXNvZnMudHh0CkBAIC0yNiw3ICsyNiwxMSBAQAogICBtb2RlPXh4eCAgICAgIFNldHMgdGhlIHBlcm1pc3Npb25zIG9uIGZpbGVzIHRvIHh4eAogICBub2pvbGlldCAgICAgIElnbm9yZSBKb2xpZXQgZXh0ZW5zaW9ucyBpZiB0aGV5IGFyZSBwcmVzZW50LgogICBub3JvY2sgICAgICAgIElnbm9yZSBSb2NrIFJpZGdlIGV4dGVuc2lvbnMgaWYgdGhleSBhcmUgcHJlc2VudC4KLSAgdW5oaWRlICAgICAgICBTaG93IGhpZGRlbiBmaWxlcy4KKyAgaGlkZQkJQ29tcGxldGVseSBzdHJpcCBoaWRkZW4gZmlsZXMgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uCisgIHNob3dhc3NvYwlTaG93IGZpbGVzIG1hcmtlZCB3aXRoIHRoZSAnYXNzb2NpYXRlZCcgYml0CisgIHVuaGlkZQlEZXByZWNhdGVkOyBzaG93aW5nIGhpZGRlbiBmaWxlcyBpcyBub3cgZGVmYXVsdDsKKwkJSWYgZ2l2ZW4sIGl0IGlzIGEgc3lub255bSBmb3IgJ3Nob3dhc3NvYycgd2hpY2ggd2lsbAorCQlyZWNyZWF0ZSBwcmV2aW91cyB1bmhpZGUgYmVoYXZpb3IKICAgc2Vzc2lvbj14ICAgICBTZWxlY3QgbnVtYmVyIG9mIHNlc3Npb24gb24gbXVsdGlzZXNzaW9uIENECiAgIHNic2VjdG9yPXh4eCAgU2Vzc2lvbiBiZWdpbnMgZnJvbSBzZWN0b3IgeHh4CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy50eHQKaW5kZXggNDE3ZTMwOS4uMGQ3ODNjNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy50eHQKQEAgLTcxLDggKzcxLDggQEAKIHRvIGxpbWl0IHRoaXMgdG1wZnMgaW5zdGFuY2UgdG8gdGhhdCBwZXJjZW50YWdlIG9mIHlvdXIgcGh5c2ljYWwgUkFNOgogdGhlIGRlZmF1bHQsIHdoZW4gbmVpdGhlciBzaXplIG5vciBucl9ibG9ja3MgaXMgc3BlY2lmaWVkLCBpcyBzaXplPTUwJQogCi1JZiBib3RoIG5yX2Jsb2NrcyAob3Igc2l6ZSkgYW5kIG5yX2lub2RlcyBhcmUgc2V0IHRvIDAsIG5laXRoZXIgYmxvY2tzCi1ub3IgaW5vZGVzIHdpbGwgYmUgbGltaXRlZCBpbiB0aGF0IGluc3RhbmNlLiAgSXQgaXMgZ2VuZXJhbGx5IHVud2lzZSB0bworSWYgbnJfYmxvY2tzPTAgKG9yIHNpemU9MCksIGJsb2NrcyB3aWxsIG5vdCBiZSBsaW1pdGVkIGluIHRoYXQgaW5zdGFuY2U7CitpZiBucl9pbm9kZXM9MCwgaW5vZGVzIHdpbGwgbm90IGJlIGxpbWl0ZWQuICBJdCBpcyBnZW5lcmFsbHkgdW53aXNlIHRvCiBtb3VudCB3aXRoIHN1Y2ggb3B0aW9ucywgc2luY2UgaXQgYWxsb3dzIGFueSB1c2VyIHdpdGggd3JpdGUgYWNjZXNzIHRvCiB1c2UgdXAgYWxsIHRoZSBtZW1vcnkgb24gdGhlIG1hY2hpbmU7IGJ1dCBlbmhhbmNlcyB0aGUgc2NhbGFiaWxpdHkgb2YKIHRoYXQgaW5zdGFuY2UgaW4gYSBzeXN0ZW0gd2l0aCBtYW55IGNwdXMgbWFraW5nIGludGVuc2l2ZSB1c2Ugb2YgaXQuCkBAIC05Nyw0ICs5Nyw0IEBACiBBdXRob3I6CiAgICBDaHJpc3RvcGggUm9obGFuZCA8Y3JAc2FwLmNvbT4sIDEuMTIuMDEKIFVwZGF0ZWQ6Ci0gICBIdWdoIERpY2tpbnMgPGh1Z2hAdmVyaXRhcy5jb20+LCAwMSBTZXB0ZW1iZXIgMjAwNAorICAgSHVnaCBEaWNraW5zIDxodWdoQHZlcml0YXMuY29tPiwgMTMgTWFyY2ggMjAwNQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPIGIvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPCmluZGV4IGE4MzFkOWEuLjU5ZDExNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTworKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8KQEAgLTMwLDcgKzMwLDcgQEAKICAgZGV2aWNlIG51bWJlcnMgKDB4YWJjZCBvciBhYmNkLCBmb3IgMi40IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgogICBZb3UgY2FuIHVzZSB0aGUgJ2FsbCcga2V5d29yZCB0byBpZ25vcmUgYWxsIGRldmljZXMuCiAgIFRoZSAnIScgb3BlcmF0b3Igd2lsbCBjYXVzZSB0aGUgSS9PLWxheWVyIHRvIF9ub3RfIGlnbm9yZSBhIGRldmljZS4KLSAgVGhlIG9yZGVyIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgbm90IGltcG9ydGFudC4KKyAgVGhlIGNvbW1hbmQgbGluZSBpcyBwYXJzZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LgogCiAgIEZvciBleGFtcGxlLCAKIAljaW9faWdub3JlPTAuMC4wMDIzLTAuMC4wMDQyLDAuMC40NzExCkBAIC03MiwxMyArNzIsMTQgQEAKICAgL3Byb2MvY2lvX2lnbm9yZTsgImFkZCA8ZGV2aWNlIHJhbmdlPiwgPGRldmljZSByYW5nZT4sIC4uLiIgd2lsbCBpZ25vcmUgdGhlCiAgIHNwZWNpZmllZCBkZXZpY2VzLgogCi0gIE5vdGU6IEFscmVhZHkga25vd24gZGV2aWNlcyBjYW5ub3QgYmUgaWdub3JlZC4KKyAgTm90ZTogV2hpbGUgYWxyZWFkeSBrbm93biBkZXZpY2VzIGNhbiBiZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBkZXZpY2VzIHRvIGJlCisgICAgICAgIGlnbm9yZWQsIHRoZXJlIHdpbGwgYmUgbm8gZWZmZWN0IG9uIHRoZW4uIEhvd2V2ZXIsIGlmIHN1Y2ggYSBkZXZpY2UKKyAgICAgICAgZGlzYXBwZWFycyBhbmQgdGhlbiByZWFwcGVhcmVzLCBpdCB3aWxsIHRoZW4gYmUgaWdub3JlZC4KIAotICBGb3IgZXhhbXBsZSwgaWYgZGV2aWNlIDAuMC5hYmNkIGlzIGFscmVhZHkga25vd24gYW5kIGFsbCBvdGhlciBkZXZpY2VzCi0gIDAuMC5hMDAwLTAuMC5hZmZmIGFyZSBub3Qga25vd24sCisgIEZvciBleGFtcGxlLAogCSJlY2hvIGFkZCAwLjAuYTAwMC0wLjAuYWNjYywgMC4wLmFmMDAtMC4wLmFmZmYgPiAvcHJvYy9jaW9faWdub3JlIgotICB3aWxsIGFkZCAwLjAuYTAwMC0wLjAuYWJjYywgMC4wLmFiY2UtMC4wLmFjY2MgYW5kIDAuMC5hZjAwLTAuMC5hZmZmIHRvIHRoZQotICBsaXN0IG9mIGlnbm9yZWQgZGV2aWNlcyBhbmQgc2tpcCAwLjAuYWJjZC4KKyAgd2lsbCBhZGQgMC4wLmEwMDAtMC4wLmFjY2MgYW5kIDAuMC5hZjAwLTAuMC5hZmZmIHRvIHRoZSBsaXN0IG9mIGlnbm9yZWQKKyAgZGV2aWNlcy4KIAogICBUaGUgZGV2aWNlcyBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciBieSBidXMgaWQgKDAuMC5hYmNkKSBvciwgZm9yIDIuNCBiYWNrd2FyZAogICBjb21wYXRpYmlsdHksIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGluIGhleGFkZWNpbWFsICgweGFiY2Qgb3IgYWJjZCkuCkBAIC05OCw3ICs5OSw4IEBACiAKICAgLSAvcHJvYy9zMzkwZGJmL2Npb190cmFjZS9oZXhfYXNjaWkKICAgICBMb2dzIHRoZSBjYWxsaW5nIG9mIGZ1bmN0aW9ucyBpbiB0aGUgY29tbW9uIEkvTy1sYXllciBhbmQsIGlmIGFwcGxpY2FibGUsIAotICAgIHdoaWNoIHN1YmNoYW5uZWwgdGhleSB3ZXJlIGNhbGxlZCBmb3IuCisgICAgd2hpY2ggc3ViY2hhbm5lbCB0aGV5IHdlcmUgY2FsbGVkIGZvciwgYXMgd2VsbCBhcyBkdW1wcyBvZiBzb21lIGRhdGEKKyAgICBzdHJ1Y3R1cmVzIChsaWtlIGlyYiBpbiBhbiBlcnJvciBjYXNlKS4KIAogICBUaGUgbGV2ZWwgb2YgbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCB0byBiZSBtb3JlIG9yIGxlc3MgdmVyYm9zZSBieSBwaXBpbmcgdG8gCiAgIC9wcm9jL3MzOTBkYmYvY2lvXyovbGV2ZWwgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA2OyBzZWUgdGhlIGRvY3VtZW50YXRpb24gb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2dpLWlvYzQudHh0IGIvRG9jdW1lbnRhdGlvbi9zZ2ktaW9jNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2Yzk2YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2dpLWlvYzQudHh0CkBAIC0wLDAgKzEsNDUgQEAKK1RoZSBTR0kgSU9DNCBQQ0kgZGV2aWNlIGlzIGEgYml0IG9mIGEgc3RyYW5nZSBiZWFzdCwgc28gc29tZSBub3RlcyBvbgoraXQgYXJlIGluIG9yZGVyLgorCitGaXJzdCwgZXZlbiB0aG91Z2ggdGhlIElPQzQgcGVyZm9ybXMgbXVsdGlwbGUgZnVuY3Rpb25zLCBzdWNoIGFzIGFuCitJREUgY29udHJvbGxlciwgYSBzZXJpYWwgY29udHJvbGxlciwgYSBQUy8yIGtleWJvYXJkL21vdXNlIGNvbnRyb2xsZXIsCithbmQgYW4gZXh0ZXJuYWwgaW50ZXJydXB0IG1lY2hhbmlzbSwgaXQncyBub3QgaW1wbGVtZW50ZWQgYXMgYQorbXVsdGlmdW5jdGlvbiBkZXZpY2UuICBUaGUgY29uc2VxdWVuY2Ugb2YgdGhpcyBmcm9tIGEgc29mdHdhcmUKK3N0YW5kcG9pbnQgaXMgdGhhdCBhbGwgdGhlc2UgZnVuY3Rpb25zIHNoYXJlIGEgc2luZ2xlIElSUSwgYW5kCit0aGV5IGNhbid0IGFsbCByZWdpc3RlciB0byBvd24gdGhlIHNhbWUgUENJIGRldmljZSBJRC4gIFRvIG1ha2UKK21hdHRlcnMgYSBiaXQgd29yc2UsIHNvbWUgb2YgdGhlIHJlZ2lzdGVyIGJsb2NrcyAoYW5kIGV2ZW4gcmVnaXN0ZXJzCit0aGVtc2VsdmVzKSBwcmVzZW50IGluIElPQzQgYXJlIG1peGVkLXB1cnBvc2UgYmV0d2VlbiB0aGVzZSBzZXZlcmFsCitmdW5jdGlvbnMsIG1lYW5pbmcgdGhhdCB0aGVyZSdzIG5vIGNsZWFyICJvd25pbmciIGRldmljZSBkcml2ZXIuCisKK1RoZSBzb2x1dGlvbiBpcyB0byBvcmdhbml6ZSB0aGUgSU9DNCBkcml2ZXIgaW50byBzZXZlcmFsIGluZGVwZW5kZW50Citkcml2ZXJzLCAiaW9jNCIsICJzZ2lpb2M0IiwgYW5kICJpb2M0X3NlcmlhbCIuICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8KK1BTLzIgY29udHJvbGxlciBkcml2ZXIgYXMgdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyBuZXZlciBiZWVuIHdpcmVkIHVwCitvbiBhIHNoaXBwaW5nIElPIGNhcmQuCisKK2lvYzQKKz09PT0KK1RoaXMgaXMgdGhlIGNvcmUgKG9yIHNoaW0pIGRyaXZlciBmb3IgSU9DNC4gIEl0IGlzIHJlc3BvbnNpYmxlIGZvcgoraW5pdGlhbGl6aW5nIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjaGlwLCBhbmQgYWxsb2NhdGluZwordGhlIFBDSSByZXNvdXJjZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIElPQzQgZnVuY3Rpb25zLgorCitUaGlzIGRyaXZlciBhbHNvIHByb3ZpZGVzIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgdGhhdCB0aGUgb3RoZXIKK0lPQzQgZHJpdmVycyBjYW4gY2FsbCB0byBtYWtlIHRoZWlyIHByZXNlbmNlIGtub3duLiAgRWFjaCBkcml2ZXIKK25lZWRzIHRvIHByb3ZpZGUgYSBwcm9iZSBhbmQgcmVtb3ZlIGZ1bmN0aW9uLCB3aGljaCBhcmUgaW52b2tlZAorYnkgdGhlIGNvcmUgZHJpdmVyIGF0IGFwcHJvcHJpYXRlIHRpbWVzLiAgVGhlIGludGVyZmFjZSBvZiB0aGVzZQorSU9DNCBmdW5jdGlvbiBwcm9iZSBhbmQgcmVtb3ZlIG9wZXJhdGlvbnMgaXNuJ3QgcHJlY2lzZWx5IHRoZSBzYW1lCithcyBQQ0kgZGV2aWNlIHByb2JlIGFuZCByZW1vdmUgb3BlcmF0aW9ucywgYnV0IGlzIGxvZ2ljYWxseSB0aGUKK3NhbWUgb3BlcmF0aW9uLgorCitzZ2lpb2M0Cis9PT09PT09CitUaGlzIGlzIHRoZSBJREUgZHJpdmVyIGZvciBJT0M0LiAgSXRzIG5hbWUgaXNuJ3QgdmVyeSBkZXNjcmlwdGl2ZQorc2ltcGx5IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMgKGl0IHVzZWQgdG8gYmUgdGhlIG9ubHkgSU9DNCBkcml2ZXIKK2NvbXBvbmVudCkuICBUaGVyZSdzIG5vdCBtdWNoIHRvIHNheSBhYm91dCBpdCBvdGhlciB0aGFuIGl0IGhvb2tzCit1cCB0byB0aGUgaW9jNCBkcml2ZXIgdmlhIHRoZSBhcHByb3ByaWF0ZSByZWdpc3RyYXRpb24sIHByb2JlLCBhbmQKK3JlbW92ZSBmdW5jdGlvbnMuCisKK2lvYzRfc2VyaWFsCis9PT09PT09PT09PQorVGhpcyBpcyB0aGUgc2VyaWFsIGRyaXZlciBmb3IgSU9DNC4gIFRoZXJlJ3Mgbm90IG11Y2ggdG8gc2F5IGFib3V0IGl0CitvdGhlciB0aGFuIGl0IGhvb2tzIHVwIHRvIHRoZSBpb2M0IGRyaXZlciB2aWEgdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdHJhdGlvbiwKK3Byb2JlLCBhbmQgcmVtb3ZlIGZ1bmN0aW9ucy4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZTNmMGYzZi4uMGY4OGE3MCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTI2NSw2ICsyNjUsMTEgQEAKIE06CWFjbWVAY29uZWN0aXZhLmNvbS5icgogUzoJTWFpbnRhaW5lZAogCitBUkMgRlJBTUVCVUZGRVIgRFJJVkVSCitQOglKYXlhIEt1bWFyCitNOglqYXlhbGtAaW50d29ya3MuYml6CitTOglNYWludGFpbmVkCisKIEFSTTI2IEFSQ0hJVEVDVFVSRQogUDoJSWFuIE1vbHRvbgogTToJc3B5cm9AZjJzLmNvbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW1hcC5jIGIvYXJjaC9hcm0vbW0vbW1hcC5jCmluZGV4IDMyYzRiMGUuLjNkZTdmODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tYXAuYworKysgYi9hcmNoL2FybS9tbS9tbWFwLmMKQEAgLTczLDcgKzczLDEyIEBACiAJCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpKQogCQkJcmV0dXJuIGFkZHI7CiAJfQotCXN0YXJ0X2FkZHIgPSBhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKKwlpZiAobGVuID4gbW0tPmNhY2hlZF9ob2xlX3NpemUpIHsKKwkgICAgICAgIHN0YXJ0X2FkZHIgPSBhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKKwl9IGVsc2UgeworCSAgICAgICAgc3RhcnRfYWRkciA9IGFkZHIgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJICAgICAgICBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CisJfQogCiBmdWxsX3NlYXJjaDoKIAlpZiAoZG9fYWxpZ24pCkBAIC05MCw2ICs5NSw3IEBACiAJCQkgKi8KIAkJCWlmIChzdGFydF9hZGRyICE9IFRBU0tfVU5NQVBQRURfQkFTRSkgewogCQkJCXN0YXJ0X2FkZHIgPSBhZGRyID0gVEFTS19VTk1BUFBFRF9CQVNFOworCQkJCW1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKIAkJCQlnb3RvIGZ1bGxfc2VhcmNoOwogCQkJfQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDEsNiArMTA3LDggQEAKIAkJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBhZGRyICsgbGVuOwogCQkJcmV0dXJuIGFkZHI7CiAJCX0KKwkJaWYgKGFkZHIgKyBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA8IHZtYS0+dm1fc3RhcnQpCisJCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB2bWEtPnZtX3N0YXJ0IC0gYWRkcjsKIAkJYWRkciA9IHZtYS0+dm1fZW5kOwogCQlpZiAoZG9fYWxpZ24pCiAJCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21tL2luaXQuYyBiL2FyY2gvZnJ2L21tL2luaXQuYwppbmRleCA0MTk1OGY1Li43OTQzMzE1IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tbS9pbml0LmMKKysrIGIvYXJjaC9mcnYvbW0vaW5pdC5jCkBAIC0xNjksNyArMTY5LDYgQEAKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSAmbWVtX21hcFtwZm5dOwogCiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfYml0KFBHX2hpZ2htZW0sICZwYWdlLT5mbGFncyk7CiAJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwogCQlfX2ZyZWVfcGFnZShwYWdlKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9ib290L01ha2VmaWxlIGIvYXJjaC9pMzg2L2Jvb3QvTWFrZWZpbGUKaW5kZXggYWE3MDY0YS4uNDNjZDYyMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9pMzg2L2Jvb3QvTWFrZWZpbGUKQEAgLTQ4LDcgKzQ4LDcgQEAKICQob2JqKS96SW1hZ2UgJChvYmopL2J6SW1hZ2U6ICQob2JqKS9ib290c2VjdCAkKG9iaikvc2V0dXAgXAogCQkJICAgICAgJChvYmopL3ZtbGludXguYmluICQob2JqKS90b29scy9idWlsZCBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGltYWdlKQotCUBlY2hvICdLZXJuZWw6ICRAIGlzIHJlYWR5JworCUBlY2hvICdLZXJuZWw6ICRAIGlzIHJlYWR5JyAnICgjJ2BjYXQgLnZlcnNpb25gJyknCiAKICQob2JqKS92bWxpbnV4LmJpbjogJChvYmopL2NvbXByZXNzZWQvdm1saW51eCBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IDZjZDFlZDMuLmQ0MDhhZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0yNTEsNyArMjUxLDcgQEAKIAkubG9uZyBzeXNfaW9fc3VibWl0CiAJLmxvbmcgc3lzX2lvX2NhbmNlbAogCS5sb25nIHN5c19mYWR2aXNlNjQJLyogMjUwICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwKKwkubG9uZyBzeXNfc2V0X3pvbmVfcmVjbGFpbQogCS5sb25nIHN5c19leGl0X2dyb3VwCiAJLmxvbmcgc3lzX2xvb2t1cF9kY29va2llCiAJLmxvbmcgc3lzX2Vwb2xsX2NyZWF0ZQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCmluZGV4IDAwYzYzNDEuLjgzYzU3OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKQEAgLTMwNiw3ICszMDYsNyBAQAogCX07CiAJc3RhdGljIGludCBkaWVfY291bnRlcjsKIAotCWlmIChkaWUubG9ja19vd25lciAhPSBfc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJaWYgKGRpZS5sb2NrX293bmVyICE9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpIHsKIAkJY29uc29sZV92ZXJib3NlKCk7CiAJCXNwaW5fbG9ja19pcnEoJmRpZS5sb2NrKTsKIAkJZGllLmxvY2tfb3duZXIgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbGliL2RlbGF5LmMgYi9hcmNoL2kzODYvbGliL2RlbGF5LmMKaW5kZXggMDgwNjM5Zi4uZWIwY2RmZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2xpYi9kZWxheS5jCisrKyBiL2FyY2gvaTM4Ni9saWIvZGVsYXkuYwpAQCAtMzQsNyArMzQsNyBAQAogCXhsb29wcyAqPSA0OwogCV9fYXNtX18oIm11bGwgJTAiCiAJCToiPWQiICh4bG9vcHMpLCAiPSZhIiAoZDApCi0JCToiMSIgKHhsb29wcyksIjAiIChjcHVfZGF0YVtfc21wX3Byb2Nlc3Nvcl9pZCgpXS5sb29wc19wZXJfamlmZnkgKiAoSFovNCkpKTsKKwkJOiIxIiAoeGxvb3BzKSwiMCIgKGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldLmxvb3BzX3Blcl9qaWZmeSAqIChIWi80KSkpOwogICAgICAgICBfX2RlbGF5KCsreGxvb3BzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2kzODYvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCAxNzFmYzkyLi4zYjA5OWYzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL2kzODYvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAotc3RhdGljIHB0ZV90ICpodWdlX3B0ZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQorcHRlX3QgKmh1Z2VfcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcGdkX3QgKnBnZDsKIAlwdWRfdCAqcHVkOwpAQCAtMzAsNyArMzAsNyBAQAogCXJldHVybiAocHRlX3QgKikgcG1kOwogfQogCi1zdGF0aWMgcHRlX3QgKmh1Z2VfcHRlX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQorcHRlX3QgKmh1Z2VfcHRlX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXBnZF90ICpwZ2Q7CiAJcHVkX3QgKnB1ZDsKQEAgLTQyLDIxICs0Miw2IEBACiAJcmV0dXJuIChwdGVfdCAqKSBwbWQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9odWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLCBwdGVfdCAqIHBhZ2VfdGFibGUsIGludCB3cml0ZV9hY2Nlc3MpCi17Ci0JcHRlX3QgZW50cnk7Ci0KLQlhZGRfbW1fY291bnRlcihtbSwgcnNzLCBIUEFHRV9TSVpFIC8gUEFHRV9TSVpFKTsKLQlpZiAod3JpdGVfYWNjZXNzKSB7Ci0JCWVudHJ5ID0KLQkJICAgIHB0ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCkpKTsKLQl9IGVsc2UKLQkJZW50cnkgPSBwdGVfd3Jwcm90ZWN0KG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCkpOwotCWVudHJ5ID0gcHRlX21reW91bmcoZW50cnkpOwotCW1rX3B0ZV9odWdlKGVudHJ5KTsKLQlzZXRfcHRlKHBhZ2VfdGFibGUsIGVudHJ5KTsKLX0KLQogLyoKICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBwcm9wZXIgYWxpZ25tZW50IG9mIGlucHV0IGFkZHIgYW5kIGxlbiBwYXJhbWV0ZXJzLgogICovCkBAIC02OSw3NyArNTQsNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsCi0JCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlwdGVfdCAqc3JjX3B0ZSwgKmRzdF9wdGUsIGVudHJ5OwotCXN0cnVjdCBwYWdlICpwdGVwYWdlOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSB2bWEtPnZtX2VuZDsKLQotCXdoaWxlIChhZGRyIDwgZW5kKSB7Ci0JCWRzdF9wdGUgPSBodWdlX3B0ZV9hbGxvYyhkc3QsIGFkZHIpOwotCQlpZiAoIWRzdF9wdGUpCi0JCQlnb3RvIG5vbWVtOwotCQlzcmNfcHRlID0gaHVnZV9wdGVfb2Zmc2V0KHNyYywgYWRkcik7Ci0JCWVudHJ5ID0gKnNyY19wdGU7Ci0JCXB0ZXBhZ2UgPSBwdGVfcGFnZShlbnRyeSk7Ci0JCWdldF9wYWdlKHB0ZXBhZ2UpOwotCQlzZXRfcHRlKGRzdF9wdGUsIGVudHJ5KTsKLQkJYWRkX21tX2NvdW50ZXIoZHN0LCByc3MsIEhQQUdFX1NJWkUgLyBQQUdFX1NJWkUpOwotCQlhZGRyICs9IEhQQUdFX1NJWkU7Ci0JfQotCXJldHVybiAwOwotCi1ub21lbToKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotaW50Ci1mb2xsb3dfaHVnZXRsYl9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMsCi0JCSAgICB1bnNpZ25lZCBsb25nICpwb3NpdGlvbiwgaW50ICpsZW5ndGgsIGludCBpKQotewotCXVuc2lnbmVkIGxvbmcgdnBmbiwgdmFkZHIgPSAqcG9zaXRpb247Ci0JaW50IHJlbWFpbmRlciA9ICpsZW5ndGg7Ci0KLQlXQVJOX09OKCFpc192bV9odWdldGxiX3BhZ2Uodm1hKSk7Ci0KLQl2cGZuID0gdmFkZHIvUEFHRV9TSVpFOwotCXdoaWxlICh2YWRkciA8IHZtYS0+dm1fZW5kICYmIHJlbWFpbmRlcikgewotCi0JCWlmIChwYWdlcykgewotCQkJcHRlX3QgKnB0ZTsKLQkJCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCQlwdGUgPSBodWdlX3B0ZV9vZmZzZXQobW0sIHZhZGRyKTsKLQotCQkJLyogaHVnZXRsYiBzaG91bGQgYmUgbG9ja2VkLCBhbmQgaGVuY2UsIHByZWZhdWx0ZWQgKi8KLQkJCVdBUk5fT04oIXB0ZSB8fCBwdGVfbm9uZSgqcHRlKSk7Ci0KLQkJCXBhZ2UgPSAmcHRlX3BhZ2UoKnB0ZSlbdnBmbiAlIChIUEFHRV9TSVpFL1BBR0VfU0laRSldOwotCi0JCQlXQVJOX09OKCFQYWdlQ29tcG91bmQocGFnZSkpOwotCi0JCQlnZXRfcGFnZShwYWdlKTsKLQkJCXBhZ2VzW2ldID0gcGFnZTsKLQkJfQotCi0JCWlmICh2bWFzKQotCQkJdm1hc1tpXSA9IHZtYTsKLQotCQl2YWRkciArPSBQQUdFX1NJWkU7Ci0JCSsrdnBmbjsKLQkJLS1yZW1haW5kZXI7Ci0JCSsraTsKLQl9Ci0KLQkqbGVuZ3RoID0gcmVtYWluZGVyOwotCSpwb3NpdGlvbiA9IHZhZGRyOwotCi0JcmV0dXJuIGk7Ci19Ci0KICNpZiAwCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyAqLwogc3RydWN0IHBhZ2UgKgogZm9sbG93X2h1Z2VfYWRkcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGUpCkBAIC0yMDQsODMgKzExOCwxNSBAQAogfQogI2VuZGlmCiAKLXZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQordm9pZCBodWdldGxiX2NsZWFuX3N0YWxlX3BndGFibGUocHRlX3QgKnB0ZSkKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXB0ZV90IHB0ZSwgKnB0ZXA7CisJcG1kX3QgKnBtZCA9IChwbWRfdCAqKSBwdGU7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlCVUdfT04oc3RhcnQgJiAoSFBBR0VfU0laRSAtIDEpKTsKLQlCVUdfT04oZW5kICYgKEhQQUdFX1NJWkUgLSAxKSk7Ci0KLQlmb3IgKGFkZHJlc3MgPSBzdGFydDsgYWRkcmVzcyA8IGVuZDsgYWRkcmVzcyArPSBIUEFHRV9TSVpFKSB7Ci0JCXB0ZXAgPSBodWdlX3B0ZV9vZmZzZXQobW0sIGFkZHJlc3MpOwotCQlpZiAoIXB0ZXApCi0JCQljb250aW51ZTsKLQkJcHRlID0gcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyZXNzLCBwdGVwKTsKLQkJaWYgKHB0ZV9ub25lKHB0ZSkpCi0JCQljb250aW51ZTsKLQkJcGFnZSA9IHB0ZV9wYWdlKHB0ZSk7Ci0JCXB1dF9wYWdlKHBhZ2UpOwotCX0KLQlhZGRfbW1fY291bnRlcihtbSAscnNzLCAtKChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCkpOwotCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOwotfQotCi1pbnQgaHVnZXRsYl9wcmVmYXVsdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JaW50IHJldCA9IDA7Ci0KLQlCVUdfT04odm1hLT52bV9zdGFydCAmIH5IUEFHRV9NQVNLKTsKLQlCVUdfT04odm1hLT52bV9lbmQgJiB+SFBBR0VfTUFTSyk7Ci0KLQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwotCWZvciAoYWRkciA9IHZtYS0+dm1fc3RhcnQ7IGFkZHIgPCB2bWEtPnZtX2VuZDsgYWRkciArPSBIUEFHRV9TSVpFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaWR4OwotCQlwdGVfdCAqcHRlID0gaHVnZV9wdGVfYWxsb2MobW0sIGFkZHIpOwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQlpZiAoIXB0ZSkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJaWYgKCFwdGVfbm9uZSgqcHRlKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlkeCA9ICgoYWRkciAtIHZtYS0+dm1fc3RhcnQpID4+IEhQQUdFX1NISUZUKQotCQkJKyAodm1hLT52bV9wZ29mZiA+PiAoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKSk7Ci0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGlkeCk7Ci0JCWlmICghcGFnZSkgewotCQkJLyogY2hhcmdlIHRoZSBmcyBxdW90YSBmaXJzdCAqLwotCQkJaWYgKGh1Z2V0bGJfZ2V0X3F1b3RhKG1hcHBpbmcpKSB7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXBhZ2UgPSBhbGxvY19odWdlX3BhZ2UoKTsKLQkJCWlmICghcGFnZSkgewotCQkJCWh1Z2V0bGJfcHV0X3F1b3RhKG1hcHBpbmcpOwotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBtYXBwaW5nLCBpZHgsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCEgcmV0KSB7Ci0JCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQl9IGVsc2UgewotCQkJCWh1Z2V0bGJfcHV0X3F1b3RhKG1hcHBpbmcpOwotCQkJCWZyZWVfaHVnZV9wYWdlKHBhZ2UpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JCXNldF9odWdlX3B0ZShtbSwgdm1hLCBwYWdlLCBwdGUsIHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSk7Ci0JfQotb3V0OgotCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKLQlyZXR1cm4gcmV0OworCXBhZ2UgPSBwbWRfcGFnZSgqcG1kKTsKKwlwbWRfY2xlYXIocG1kKTsKKwlkZWNfcGFnZV9zdGF0ZShucl9wYWdlX3RhYmxlX3BhZ2VzKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiB9CiAKIC8qIHg4Nl82NCBhbHNvIHVzZXMgdGhpcyBmaWxlICovCkBAIC0yOTQsNyArMTQwLDEyIEBACiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyOwogCi0Jc3RhcnRfYWRkciA9IG1tLT5mcmVlX2FyZWFfY2FjaGU7CisJaWYgKGxlbiA+IG1tLT5jYWNoZWRfaG9sZV9zaXplKSB7CisJICAgICAgICBzdGFydF9hZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKKwl9IGVsc2UgeworCSAgICAgICAgc3RhcnRfYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKKwl9CiAKIGZ1bGxfc2VhcmNoOgogCWFkZHIgPSBBTElHTihzdGFydF9hZGRyLCBIUEFHRV9TSVpFKTsKQEAgLTMwOCw2ICsxNTksNyBAQAogCQkJICovCiAJCQlpZiAoc3RhcnRfYWRkciAhPSBUQVNLX1VOTUFQUEVEX0JBU0UpIHsKIAkJCQlzdGFydF9hZGRyID0gVEFTS19VTk1BUFBFRF9CQVNFOworCQkJCW1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKIAkJCQlnb3RvIGZ1bGxfc2VhcmNoOwogCQkJfQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMTYsNiArMTY4LDggQEAKIAkJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBhZGRyICsgbGVuOwogCQkJcmV0dXJuIGFkZHI7CiAJCX0KKwkJaWYgKGFkZHIgKyBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA8IHZtYS0+dm1fc3RhcnQpCisJCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB2bWEtPnZtX3N0YXJ0IC0gYWRkcjsKIAkJYWRkciA9IEFMSUdOKHZtYS0+dm1fZW5kLCBIUEFHRV9TSVpFKTsKIAl9CiB9CkBAIC0zMjcsMTIgKzE4MSwxNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2X3ZtYTsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBtbS0+bW1hcF9iYXNlLCBhZGRyID0gYWRkcjA7CisJdW5zaWduZWQgbG9uZyBsYXJnZXN0X2hvbGUgPSBtbS0+Y2FjaGVkX2hvbGVfc2l6ZTsKIAlpbnQgZmlyc3RfdGltZSA9IDE7CiAKIAkvKiBkb24ndCBhbGxvdyBhbGxvY2F0aW9ucyBhYm92ZSBjdXJyZW50IGJhc2UgKi8KIAlpZiAobW0tPmZyZWVfYXJlYV9jYWNoZSA+IGJhc2UpCiAJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBiYXNlOwogCisJaWYgKGxlbiA8PSBsYXJnZXN0X2hvbGUpIHsKKwkgICAgICAgIGxhcmdlc3RfaG9sZSA9IDA7CisJCW1tLT5mcmVlX2FyZWFfY2FjaGUgID0gYmFzZTsKKwl9CiB0cnlfYWdhaW46CiAJLyogbWFrZSBzdXJlIGl0IGNhbiBmaXQgaW4gdGhlIHJlbWFpbmluZyBhZGRyZXNzIHNwYWNlICovCiAJaWYgKG1tLT5mcmVlX2FyZWFfY2FjaGUgPCBsZW4pCkBAIC0zNTMsMTMgKzIxMiwyMSBAQAogCQkgKiB2bWEtPnZtX3N0YXJ0LCB1c2UgaXQ6CiAJCSAqLwogCQlpZiAoYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0ICYmCi0JCQkJKCFwcmV2X3ZtYSB8fCAoYWRkciA+PSBwcmV2X3ZtYS0+dm1fZW5kKSkpCisJCSAgICAgICAgICAgICghcHJldl92bWEgfHwgKGFkZHIgPj0gcHJldl92bWEtPnZtX2VuZCkpKSB7CiAJCQkvKiByZW1lbWJlciB0aGUgYWRkcmVzcyBhcyBhIGhpbnQgZm9yIG5leHQgdGltZSAqLwotCQkJcmV0dXJuIChtbS0+ZnJlZV9hcmVhX2NhY2hlID0gYWRkcik7Ci0JCWVsc2UKKwkJICAgICAgICBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IGxhcmdlc3RfaG9sZTsKKwkJICAgICAgICByZXR1cm4gKG1tLT5mcmVlX2FyZWFfY2FjaGUgPSBhZGRyKTsKKwkJfSBlbHNlIHsKIAkJCS8qIHB1bGwgZnJlZV9hcmVhX2NhY2hlIGRvd24gdG8gdGhlIGZpcnN0IGhvbGUgKi8KLQkJCWlmIChtbS0+ZnJlZV9hcmVhX2NhY2hlID09IHZtYS0+dm1fZW5kKQorCQkgICAgICAgIGlmIChtbS0+ZnJlZV9hcmVhX2NhY2hlID09IHZtYS0+dm1fZW5kKSB7CiAJCQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IHZtYS0+dm1fc3RhcnQ7CisJCQkJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSBsYXJnZXN0X2hvbGU7CisJCQl9CisJCX0KKworCQkvKiByZW1lbWJlciB0aGUgbGFyZ2VzdCBob2xlIHdlIHNhdyBzbyBmYXIgKi8KKwkJaWYgKGFkZHIgKyBsYXJnZXN0X2hvbGUgPCB2bWEtPnZtX3N0YXJ0KQorCQkgICAgICAgIGxhcmdlc3RfaG9sZSA9IHZtYS0+dm1fc3RhcnQgLSBhZGRyOwogCiAJCS8qIHRyeSBqdXN0IGJlbG93IHRoZSBjdXJyZW50IHZtYS0+dm1fc3RhcnQgKi8KIAkJYWRkciA9ICh2bWEtPnZtX3N0YXJ0IC0gbGVuKSAmIEhQQUdFX01BU0s7CkBAIC0zNzIsNiArMjM5LDcgQEAKIAkgKi8KIAlpZiAoZmlyc3RfdGltZSkgewogCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFzZTsKKwkJbGFyZ2VzdF9ob2xlID0gMDsKIAkJZmlyc3RfdGltZSA9IDA7CiAJCWdvdG8gdHJ5X2FnYWluOwogCX0KQEAgLTM4Miw2ICsyNTAsNyBAQAogCSAqIGFsbG9jYXRpb25zLgogCSAqLwogCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB+MFVMOwogCWFkZHIgPSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhX2JvdHRvbXVwKGZpbGUsIGFkZHIwLAogCQkJbGVuLCBwZ29mZiwgZmxhZ3MpOwogCkBAIC0zODksNiArMjU4LDcgQEAKIAkgKiBSZXN0b3JlIHRoZSB0b3Bkb3duIGJhc2U6CiAJICovCiAJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGJhc2U7CisJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB+MFVMOwogCiAJcmV0dXJuIGFkZHI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vaW5pdC5jIGIvYXJjaC9pMzg2L21tL2luaXQuYwppbmRleCA3YTdlYTM3Li44NzY2Yzc3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vaW5pdC5jCisrKyBiL2FyY2gvaTM4Ni9tbS9pbml0LmMKQEAgLTI2OSw3ICsyNjksNiBAQAogewogCWlmIChwYWdlX2lzX3JhbShwZm4pICYmICEoYmFkX3Bwcm8gJiYgcGFnZV9raWxsc19wcHJvKHBmbikpKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfYml0KFBHX2hpZ2htZW0sICZwYWdlLT5mbGFncyk7CiAJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwogCQlfX2ZyZWVfcGFnZShwYWdlKTsKIAkJdG90YWxoaWdoX3BhZ2VzKys7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IDNhZDJjNGEuLjM0ZTYwM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC01MCw2ICs1MCwxMCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIElBNjRfVU5DQUNIRURfQUxMT0NBVE9SCisJYm9vbAorCXNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUgorCiBjaG9pY2UKIAlwcm9tcHQgIlN5c3RlbSB0eXBlIgogCWRlZmF1bHQgSUE2NF9HRU5FUklDCkBAIC0yMjMsNyArMjI3LDcgQEAKIAogY29uZmlnIElBNjRfU0dJX1NOX1hQCiAJdHJpc3RhdGUgIlN1cHBvcnQgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIFNHSSBTU0lzIgotCWRlcGVuZHMgb24gTVNQRUMKKwlzZWxlY3QgSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IKIAloZWxwCiAJICBBbiBTR0kgbWFjaGluZSBjYW4gYmUgZGl2aWRlZCBpbnRvIG11bHRpcGxlIFNpbmdsZSBTeXN0ZW0KIAkgIEltYWdlcyB3aGljaCBhY3QgaW5kZXBlbmRlbnRseSBvZiBlYWNoIG90aGVyIGFuZCBoYXZlCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3Mvc24yX2RlZmNvbmZpZwppbmRleCA2ZmY3MTA3Li5hMDFiYjAyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3NuMl9kZWZjb25maWcKQEAgLTU4OCw2ICs1ODgsNyBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfU0dJX0wxX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9TR0lfSU9DND15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNzg4LDYgKzc4OSwxMSBAQAogIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRyBpcyBub3Qgc2V0CiAKICMKKyMgU04gRGV2aWNlcworIworQ09ORklHX1NHSV9JT0M0PXkKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9kZWZjb25maWcgYi9hcmNoL2lhNjQvZGVmY29uZmlnCmluZGV4IDc1MzllODMuLjk5OTdlZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2RlZmNvbmZpZwpAQCAtNjM4LDYgKzYzOCw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9TR0lfTDFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX1NHSV9JT0M0PXkKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC05NDMsNiArOTQ0LDExIEBACiAjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHIGlzIG5vdCBzZXQKIAogIworIyBTTiBEZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9eQorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYzFhMDJiYi4uNGM3M2Q4YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC0yMCw2ICsyMCw3IEBACiBvYmotJChDT05GSUdfUEVSRk1PTikJCSs9IHBlcmZtb25fZGVmYXVsdF9zbXBsLm8KIG9iai0kKENPTkZJR19JQTY0X0NZQ0xPTkUpCSs9IGN5Y2xvbmUubwogb2JqLSQoQ09ORklHX0lBNjRfTUNBX1JFQ09WRVJZKQkrPSBtY2FfcmVjb3Zlcnkubworb2JqLSQoQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SKQkrPSB1bmNhY2hlZC5vCiBtY2FfcmVjb3ZlcnkteQkJCSs9IG1jYV9kcnYubyBtY2FfZHJ2X2FzbS5vCiAKICMgVGhlIGdhdGUgRFNPIGltYWdlIGlzIGJ1aWx0IHVzaW5nIGEgc3BlY2lhbCBsaW5rZXIgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKaW5kZXggNGEzYjFhYS4uMTc5ZjIzMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCkBAIC00MTAsNiArNDEwLDM4IEBACiB9CiAKIC8qCisgKiBXYWxrIHRoZSBFRkkgbWVtb3J5IG1hcCB0byBwdWxsIG91dCBsZWZ0b3ZlciBwYWdlcyBpbiB0aGUgbG93ZXIKKyAqIG1lbW9yeSByZWdpb25zIHdoaWNoIGRvIG5vdCBlbmQgdXAgaW4gdGhlIHJlZ3VsYXIgbWVtb3J5IG1hcCBhbmQKKyAqIHN0aWNrIHRoZW0gaW50byB0aGUgdW5jYWNoZWQgYWxsb2NhdG9yCisgKgorICogVGhlIHJlZ3VsYXIgd2FsayBmdW5jdGlvbiBpcyBzaWduaWZpY2FudGx5IG1vcmUgY29tcGxleCB0aGFuIHRoZQorICogdW5jYWNoZWQgd2FsayB3aGljaCBtZWFucyBpdCByZWFsbHkgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHRyeSBhbmQKKyAqIG1hcmdlIHRoZSB0d28uCisgKi8KK3ZvaWQgX19pbml0CitlZmlfbWVtbWFwX3dhbGtfdWMgKGVmaV9mcmVlbWVtX2NhbGxiYWNrX3QgY2FsbGJhY2spCit7CisJdm9pZCAqZWZpX21hcF9zdGFydCwgKmVmaV9tYXBfZW5kLCAqcDsKKwllZmlfbWVtb3J5X2Rlc2NfdCAqbWQ7CisJdTY0IGVmaV9kZXNjX3NpemUsIHN0YXJ0LCBlbmQ7CisKKwllZmlfbWFwX3N0YXJ0ID0gX192YShpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1tYXApOworCWVmaV9tYXBfZW5kID0gZWZpX21hcF9zdGFydCArIGlhNjRfYm9vdF9wYXJhbS0+ZWZpX21lbW1hcF9zaXplOworCWVmaV9kZXNjX3NpemUgPSBpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1kZXNjX3NpemU7CisKKwlmb3IgKHAgPSBlZmlfbWFwX3N0YXJ0OyBwIDwgZWZpX21hcF9lbmQ7IHAgKz0gZWZpX2Rlc2Nfc2l6ZSkgeworCQltZCA9IHA7CisJCWlmIChtZC0+YXR0cmlidXRlID09IEVGSV9NRU1PUllfVUMpIHsKKwkJCXN0YXJ0ID0gUEFHRV9BTElHTihtZC0+cGh5c19hZGRyKTsKKwkJCWVuZCA9IFBBR0VfQUxJR04oKG1kLT5waHlzX2FkZHIrKG1kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQpKSAmIFBBR0VfTUFTSyk7CisJCQlpZiAoKCpjYWxsYmFjaykoc3RhcnQsIGVuZCwgTlVMTCkgPCAwKQorCQkJCXJldHVybjsKKwkJfQorCX0KK30KKworCisvKgogICogTG9vayBmb3IgdGhlIFBBTF9DT0RFIHJlZ2lvbiByZXBvcnRlZCBieSBFRkkgYW5kIG1hcHMgaXQgdXNpbmcgYW4KICAqIElUUiB0byBlbmFibGUgc2FmZSBQQUwgY2FsbHMgaW4gdmlydHVhbCBtb2RlLiAgU2VlIElBLTY0IFByb2Nlc3NvcgogICogQWJzdHJhY3Rpb24gTGF5ZXIgY2hhcHRlciAxMSBpbiBBREFHCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggZDk5MzE2Yy4uYjFkNWQzZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTU3OSw3ICsxNTc5LDcgQEAKIAlkYXRhOCBzeXNfa2V5Y3RsCiAJZGF0YTggc3lzX25pX3N5c2NhbGwKIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJCS8vIDEyNzUKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAorCWRhdGE4IHN5c19zZXRfem9uZV9yZWNsYWltCiAJZGF0YTggc3lzX25pX3N5c2NhbGwKIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAogCWRhdGE4IHN5c19uaV9zeXNjYWxsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3VuY2FjaGVkLmMgYi9hcmNoL2lhNjQva2VybmVsL3VuY2FjaGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwZGZjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdW5jYWNoZWQuYwpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBBIHNpbXBsZSB1bmNhY2hlZCBwYWdlIGFsbG9jYXRvciB1c2luZyB0aGUgZ2VuZXJpYyBhbGxvY2F0b3IuIFRoaXMKKyAqIGFsbG9jYXRvciBmaXJzdCB1dGlsaXplcyB0aGUgc3BhcmUgKHNwaWxsKSBwYWdlcyBmb3VuZCBpbiB0aGUgRUZJCisgKiBtZW1tYXAgYW5kIHdpbGwgdGhlbiBzdGFydCBjb252ZXJ0aW5nIGNhY2hlZCBwYWdlcyB0byB1bmNhY2hlZCBvbmVzCisgKiBhdCBhIGdyYW51bGUgYXQgYSB0aW1lLiBOb2RlIGF3YXJlbmVzcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZpbmcgYQorICogcG9vbCBvZiBwYWdlcyBwZXIgbm9kZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZWZpLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWwuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KKworI2RlZmluZSBERUJVRwkwCisKKyNpZiBERUJVRworI2RlZmluZSBkcHJpbnRrCQkJcHJpbnRrCisjZWxzZQorI2RlZmluZSBkcHJpbnRrKHguLi4pCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwordm9pZCBfX2luaXQgZWZpX21lbW1hcF93YWxrX3VjIChlZmlfZnJlZW1lbV9jYWxsYmFja190IGNhbGxiYWNrKTsKKworI2RlZmluZSBNQVhfVU5DQUNIRURfR1JBTlVMRVMJNQorc3RhdGljIGludCBhbGxvY2F0ZWRfZ3JhbnVsZXM7CisKK3N0cnVjdCBnZW5fcG9vbCAqdW5jYWNoZWRfcG9vbFtNQVhfTlVNTk9ERVNdOworCisKK3N0YXRpYyB2b2lkIHVuY2FjaGVkX2lwaV92aXNpYmlsaXR5KHZvaWQgKmRhdGEpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGlhNjRfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkoUEFMX1ZJU0lCSUxJVFlfUEhZU0lDQUwpOworCWlmICgoc3RhdHVzICE9IFBBTF9WSVNJQklMSVRZX09LKSAmJgorCSAgICAoc3RhdHVzICE9IFBBTF9WSVNJQklMSVRZX09LX1JFTU9URV9ORUVERUQpKQorCQlwcmludGsoS0VSTl9ERUJVRyAicGFsX3ByZWZldGNoX3Zpc2liaWxpdHkoKSByZXR1cm5zICVpIG9uICIKKwkJICAgICAgICJDUFUgJWlcbiIsIHN0YXR1cywgZ2V0X2NwdSgpKTsKK30KKworCitzdGF0aWMgdm9pZCB1bmNhY2hlZF9pcGlfbWNfZHJhaW4odm9pZCAqZGF0YSkKK3sKKwlpbnQgc3RhdHVzOworCXN0YXR1cyA9IGlhNjRfcGFsX21jX2RyYWluKCk7CisJaWYgKHN0YXR1cykKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWE2NF9wYWxfbWNfZHJhaW4oKSBmYWlsZWQgd2l0aCAlaSBvbiAiCisJCSAgICAgICAiQ1BVICVpXG4iLCBzdGF0dXMsIGdldF9jcHUoKSk7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGxvbmcKK3VuY2FjaGVkX2dldF9uZXdfY2h1bmsoc3RydWN0IGdlbl9wb29sICpwb29scCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl2b2lkICp0bXA7CisJaW50IHN0YXR1cywgaTsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIG5vZGU7CisKKwlpZiAoYWxsb2NhdGVkX2dyYW51bGVzID49IE1BWF9VTkNBQ0hFRF9HUkFOVUxFUykKKwkJcmV0dXJuIDA7CisKKwlub2RlID0gcG9vbHAtPnByaXZhdGU7CisJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sCisJCQkJSUE2NF9HUkFOVUxFX1NISUZULVBBR0VfU0hJRlQpOworCisJZHByaW50ayhLRVJOX0lORk8gImdldF9uZXdfY2h1bmsgcGFnZSAlcCwgYWRkciAlbHhcbiIsCisJCXBhZ2UsICh1bnNpZ25lZCBsb25nKShwYWdlLXZtZW1fbWFwKSA8PCBQQUdFX1NISUZUKTsKKworCS8qCisJICogRG8gbWFnaWMgaWYgbm8gbWVtIG9uIGxvY2FsIG5vZGUhIFhYWAorCSAqLworCWlmICghcGFnZSkKKwkJcmV0dXJuIDA7CisJdG1wID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCisJLyoKKwkgKiBUaGVyZSdzIGEgc21hbGwgcmFjZSBoZXJlIHdoZXJlIGl0J3MgcG9zc2libGUgZm9yIHNvbWVvbmUgdG8KKwkgKiBhY2Nlc3MgdGhlIHBhZ2UgdGhyb3VnaCAvZGV2L21lbSBoYWxmd2F5IHRocm91Z2ggdGhlIGNvbnZlcnNpb24KKwkgKiB0byB1bmNhY2hlZCAtIG5vdCBzdXJlIGl0J3MgcmVhbGx5IHdvcnRoIGJvdGhlcmluZyBhYm91dAorCSAqLworCWZvciAoaSA9IDA7IGkgPCAoSUE2NF9HUkFOVUxFX1NJWkUgLyBQQUdFX1NJWkUpOyBpKyspCisJCVNldFBhZ2VVbmNhY2hlZCgmcGFnZVtpXSk7CisKKwlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHRtcCwgdG1wICsgSUE2NF9HUkFOVUxFX1NJWkUpOworCisJc3RhdHVzID0gaWE2NF9wYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eShQQUxfVklTSUJJTElUWV9QSFlTSUNBTCk7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAicGFsX3ByZWZldGNoX3Zpc2liaWxpdHkoKSByZXR1cm5zICVpIG9uIGNwdSAlaVxuIiwKKwkJc3RhdHVzLCBnZXRfY3B1KCkpOworCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gc21wX2NhbGxfZnVuY3Rpb24odW5jYWNoZWRfaXBpX3Zpc2liaWxpdHksIE5VTEwsIDAsIDEpOworCQlpZiAoc3RhdHVzKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic21wX2NhbGxfZnVuY3Rpb24gZmFpbGVkIGZvciAiCisJCQkgICAgICAgInVuY2FjaGVkX2lwaV92aXNpYmlsaXR5ISAoJWkpXG4iLCBzdGF0dXMpOworCX0KKworCWlmIChpYTY0X3BsYXRmb3JtX2lzKCJzbjIiKSkKKwkJc25fZmx1c2hfYWxsX2NhY2hlcygodW5zaWduZWQgbG9uZyl0bXAsIElBNjRfR1JBTlVMRV9TSVpFKTsKKwllbHNlCisJCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyl0bXAsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcpdG1wK0lBNjRfR1JBTlVMRV9TSVpFKTsKKworCWlhNjRfcGFsX21jX2RyYWluKCk7CisJc3RhdHVzID0gc21wX2NhbGxfZnVuY3Rpb24odW5jYWNoZWRfaXBpX21jX2RyYWluLCBOVUxMLCAwLCAxKTsKKwlpZiAoc3RhdHVzKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJzbXBfY2FsbF9mdW5jdGlvbiBmYWlsZWQgZm9yICIKKwkJICAgICAgICJ1bmNhY2hlZF9pcGlfbWNfZHJhaW4hICglaSlcbiIsIHN0YXR1cyk7CisKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpdG1wIC0gUEFHRV9PRkZTRVQgKyBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOworCisJYWxsb2NhdGVkX2dyYW51bGVzKys7CisJcmV0dXJuIGFkZHI7Cit9CisKKworLyoKKyAqIHVuY2FjaGVkX2FsbG9jX3BhZ2UKKyAqCisgKiBBbGxvY2F0ZSAxIHVuY2FjaGVkIHBhZ2UuIEFsbG9jYXRlcyBvbiB0aGUgcmVxdWVzdGVkIG5vZGUuIElmIG5vCisgKiB1bmNhY2hlZCBwYWdlcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSByZXF1ZXN0ZWQgbm9kZSwgcm91bmRyb2JpbiBzdGFydGluZworICogd2l0aCBoaWdoZXIgbm9kZXMuCisgKi8KK3Vuc2lnbmVkIGxvbmcKK3VuY2FjaGVkX2FsbG9jX3BhZ2UoaW50IG5pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1hZGRyOworCisJbWFkZHIgPSBnZW5fcG9vbF9hbGxvYyh1bmNhY2hlZF9wb29sW25pZF0sIFBBR0VfU0laRSk7CisKKwlkcHJpbnRrKEtFUk5fREVCVUcgInVuY2FjaGVkX2FsbG9jX3BhZ2UgcmV0dXJucyAlbHggb24gbm9kZSAlaVxuIiwKKwkJbWFkZHIsIG5pZCk7CisKKwkvKgorCSAqIElmIG5vIG1lbW9yeSBpcyBhdmFpbGJsZSBvbiBvdXIgbG9jYWwgbm9kZSwgdHJ5IHRoZQorCSAqIHJlbWFpbmluZyBub2RlcyBpbiB0aGUgc3lzdGVtLgorCSAqLworCWlmICghbWFkZHIpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gTUFYX05VTU5PREVTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJCWlmIChpID09IG5pZCB8fCAhbm9kZV9vbmxpbmUoaSkpCisJCQkJY29udGludWU7CisJCQltYWRkciA9IGdlbl9wb29sX2FsbG9jKHVuY2FjaGVkX3Bvb2xbaV0sIFBBR0VfU0laRSk7CisJCQlkcHJpbnRrKEtFUk5fREVCVUcgInVuY2FjaGVkX2FsbG9jX3BhZ2UgYWx0ZXJuYXRlIHNlYXJjaCAiCisJCQkJInJldHVybnMgJWx4IG9uIG5vZGUgJWlcbiIsIG1hZGRyLCBpKTsKKwkJCWlmIChtYWRkcikgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIG1hZGRyOworfQorRVhQT1JUX1NZTUJPTCh1bmNhY2hlZF9hbGxvY19wYWdlKTsKKworCisvKgorICogdW5jYWNoZWRfZnJlZV9wYWdlCisgKgorICogRnJlZSBhIHNpbmdsZSB1bmNhY2hlZCBwYWdlLgorICovCit2b2lkCit1bmNhY2hlZF9mcmVlX3BhZ2UodW5zaWduZWQgbG9uZyBtYWRkcikKK3sKKwlpbnQgbm9kZTsKKworCW5vZGUgPSBuYXNpZF90b19jbm9kZWlkKE5BU0lEX0dFVChtYWRkcikpOworCisJZHByaW50ayhLRVJOX0RFQlVHICJ1bmNhY2hlZF9mcmVlX3BhZ2UoJWx4KSBvbiBub2RlICVpXG4iLCBtYWRkciwgbm9kZSk7CisKKwlpZiAoKG1hZGRyICYgKDBYRlVMIDw8IDYwKSkgIT0gX19JQTY0X1VOQ0FDSEVEX09GRlNFVCkKKwkJcGFuaWMoInVuY2FjaGVkX2ZyZWVfcGFnZSBpbnZhbGlkIGFkZHJlc3MgJWx4XG4iLCBtYWRkcik7CisKKwlnZW5fcG9vbF9mcmVlKHVuY2FjaGVkX3Bvb2xbbm9kZV0sIG1hZGRyLCBQQUdFX1NJWkUpOworfQorRVhQT1JUX1NZTUJPTCh1bmNhY2hlZF9mcmVlX3BhZ2UpOworCisKKy8qCisgKiB1bmNhY2hlZF9idWlsZF9tZW1tYXAsCisgKgorICogQ2FsbGVkIGF0IGJvb3QgdGltZSB0byBidWlsZCBhIG1hcCBvZiBwYWdlcyB0aGF0IGNhbiBiZSB1c2VkIGZvcgorICogbWVtb3J5IHNwZWNpYWwgb3BlcmF0aW9ucy4KKyAqLworc3RhdGljIGludCBfX2luaXQKK3VuY2FjaGVkX2J1aWxkX21lbW1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdm9pZCAqYXJnKQoreworCWxvbmcgbGVuZ3RoOworCXVuc2lnbmVkIGxvbmcgdnN0YXJ0LCB2ZW5kOworCWludCBub2RlOworCisJbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CisJdnN0YXJ0ID0gc3RhcnQgKyBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOworCXZlbmQgPSBlbmQgKyBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOworCisJZHByaW50ayhLRVJOX0VSUiAidW5jYWNoZWRfYnVpbGRfbWVtbWFwKCVseCAlbHgpXG4iLCBzdGFydCwgZW5kKTsKKworCW1lbXNldCgoY2hhciAqKXZzdGFydCwgMCwgbGVuZ3RoKTsKKworCW5vZGUgPSBuYXNpZF90b19jbm9kZWlkKE5BU0lEX0dFVChzdGFydCkpOworCisJZm9yICg7IHZzdGFydCA8IHZlbmQgOyB2c3RhcnQgKz0gUEFHRV9TSVpFKSB7CisJCWRwcmludGsoS0VSTl9JTkZPICJzdGlja2luZyAlbHggaW50byB0aGUgcG9vbCFcbiIsIHZzdGFydCk7CisJCWdlbl9wb29sX2ZyZWUodW5jYWNoZWRfcG9vbFtub2RlXSwgdnN0YXJ0LCBQQUdFX1NJWkUpOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IHVuY2FjaGVkX2luaXQodm9pZCkgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKSB7CisJCWlmICghbm9kZV9vbmxpbmUoaSkpCisJCQljb250aW51ZTsKKwkJdW5jYWNoZWRfcG9vbFtpXSA9IGdlbl9wb29sX2NyZWF0ZSgwLCBJQTY0X0dSQU5VTEVfU0hJRlQsCisJCQkJCQkgICAmdW5jYWNoZWRfZ2V0X25ld19jaHVuaywgaSk7CisJfQorCisJZWZpX21lbW1hcF93YWxrX3VjKHVuY2FjaGVkX2J1aWxkX21lbW1hcCk7CisKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbCh1bmNhY2hlZF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9pYTY0L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggZGYwOGFlNy4uZTBhNzc2YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9pYTY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogdW5zaWduZWQgaW50IGhwYWdlX3NoaWZ0PUhQQUdFX1NISUZUX0RFRkFVTFQ7CiAKLXN0YXRpYyBwdGVfdCAqCitwdGVfdCAqCiBodWdlX3B0ZV9hbGxvYyAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHRhZGRyID0gaHRsYnBhZ2VfdG9fcGFnZShhZGRyKTsKQEAgLTQzLDcgKzQzLDcgQEAKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMgcHRlX3QgKgorcHRlX3QgKgogaHVnZV9wdGVfb2Zmc2V0IChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXVuc2lnbmVkIGxvbmcgdGFkZHIgPSBodGxicGFnZV90b19wYWdlKGFkZHIpOwpAQCAtNjcsMjMgKzY3LDYgQEAKIAogI2RlZmluZSBta19wdGVfaHVnZShlbnRyeSkgeyBwdGVfdmFsKGVudHJ5KSB8PSBfUEFHRV9QOyB9CiAKLXN0YXRpYyB2b2lkCi1zZXRfaHVnZV9wdGUgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgcHRlX3QgKiBwYWdlX3RhYmxlLCBpbnQgd3JpdGVfYWNjZXNzKQotewotCXB0ZV90IGVudHJ5OwotCi0JYWRkX21tX2NvdW50ZXIobW0sIHJzcywgSFBBR0VfU0laRSAvIFBBR0VfU0laRSk7Ci0JaWYgKHdyaXRlX2FjY2VzcykgewotCQllbnRyeSA9Ci0JCSAgICBwdGVfbWt3cml0ZShwdGVfbWtkaXJ0eShta19wdGUocGFnZSwgdm1hLT52bV9wYWdlX3Byb3QpKSk7Ci0JfSBlbHNlCi0JCWVudHJ5ID0gcHRlX3dycHJvdGVjdChta19wdGUocGFnZSwgdm1hLT52bV9wYWdlX3Byb3QpKTsKLQllbnRyeSA9IHB0ZV9ta3lvdW5nKGVudHJ5KTsKLQlta19wdGVfaHVnZShlbnRyeSk7Ci0Jc2V0X3B0ZShwYWdlX3RhYmxlLCBlbnRyeSk7Ci0JcmV0dXJuOwotfQogLyoKICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBwcm9wZXIgYWxpZ25tZW50IG9mIGlucHV0IGFkZHIgYW5kIGxlbiBwYXJhbWV0ZXJzLgogICovCkBAIC05OSw2OCArODIsNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsCi0JCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlwdGVfdCAqc3JjX3B0ZSwgKmRzdF9wdGUsIGVudHJ5OwotCXN0cnVjdCBwYWdlICpwdGVwYWdlOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSB2bWEtPnZtX2VuZDsKLQotCXdoaWxlIChhZGRyIDwgZW5kKSB7Ci0JCWRzdF9wdGUgPSBodWdlX3B0ZV9hbGxvYyhkc3QsIGFkZHIpOwotCQlpZiAoIWRzdF9wdGUpCi0JCQlnb3RvIG5vbWVtOwotCQlzcmNfcHRlID0gaHVnZV9wdGVfb2Zmc2V0KHNyYywgYWRkcik7Ci0JCWVudHJ5ID0gKnNyY19wdGU7Ci0JCXB0ZXBhZ2UgPSBwdGVfcGFnZShlbnRyeSk7Ci0JCWdldF9wYWdlKHB0ZXBhZ2UpOwotCQlzZXRfcHRlKGRzdF9wdGUsIGVudHJ5KTsKLQkJYWRkX21tX2NvdW50ZXIoZHN0LCByc3MsIEhQQUdFX1NJWkUgLyBQQUdFX1NJWkUpOwotCQlhZGRyICs9IEhQQUdFX1NJWkU7Ci0JfQotCXJldHVybiAwOwotbm9tZW06Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLWludAotZm9sbG93X2h1Z2V0bGJfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCSAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzLAotCQkgICAgdW5zaWduZWQgbG9uZyAqc3QsIGludCAqbGVuZ3RoLCBpbnQgaSkKLXsKLQlwdGVfdCAqcHRlcCwgcHRlOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAqc3Q7Ci0JdW5zaWduZWQgbG9uZyBwc3RhcnQ7Ci0JaW50IGxlbiA9ICpsZW5ndGg7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQlkbyB7Ci0JCXBzdGFydCA9IHN0YXJ0ICYgSFBBR0VfTUFTSzsKLQkJcHRlcCA9IGh1Z2VfcHRlX29mZnNldChtbSwgc3RhcnQpOwotCQlwdGUgPSAqcHRlcDsKLQotYmFjazE6Ci0JCXBhZ2UgPSBwdGVfcGFnZShwdGUpOwotCQlpZiAocGFnZXMpIHsKLQkJCXBhZ2UgKz0gKChzdGFydCAmIH5IUEFHRV9NQVNLKSA+PiBQQUdFX1NISUZUKTsKLQkJCWdldF9wYWdlKHBhZ2UpOwotCQkJcGFnZXNbaV0gPSBwYWdlOwotCQl9Ci0JCWlmICh2bWFzKQotCQkJdm1hc1tpXSA9IHZtYTsKLQkJaSsrOwotCQlsZW4tLTsKLQkJc3RhcnQgKz0gUEFHRV9TSVpFOwotCQlpZiAoKChzdGFydCAmIEhQQUdFX01BU0spID09IHBzdGFydCkgJiYgbGVuICYmCi0JCQkJKHN0YXJ0IDwgdm1hLT52bV9lbmQpKQotCQkJZ290byBiYWNrMTsKLQl9IHdoaWxlIChsZW4gJiYgc3RhcnQgPCB2bWEtPnZtX2VuZCk7Ci0JKmxlbmd0aCA9IGxlbjsKLQkqc3QgPSBzdGFydDsKLQlyZXR1cm4gaTsKLX0KLQogc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX2FkZHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHdyaXRlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtMjEyLDgxICsxMzMsNiBAQAogCWZyZWVfcGdkX3JhbmdlKHRsYiwgYWRkciwgZW5kLCBmbG9vciwgY2VpbGluZyk7CiB9CiAKLXZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Ci0JcHRlX3QgKnB0ZTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCUJVR19PTihzdGFydCAmIChIUEFHRV9TSVpFIC0gMSkpOwotCUJVR19PTihlbmQgJiAoSFBBR0VfU0laRSAtIDEpKTsKLQotCWZvciAoYWRkcmVzcyA9IHN0YXJ0OyBhZGRyZXNzIDwgZW5kOyBhZGRyZXNzICs9IEhQQUdFX1NJWkUpIHsKLQkJcHRlID0gaHVnZV9wdGVfb2Zmc2V0KG1tLCBhZGRyZXNzKTsKLQkJaWYgKHB0ZV9ub25lKCpwdGUpKQotCQkJY29udGludWU7Ci0JCXBhZ2UgPSBwdGVfcGFnZSgqcHRlKTsKLQkJcHV0X3BhZ2UocGFnZSk7Ci0JCXB0ZV9jbGVhcihtbSwgYWRkcmVzcywgcHRlKTsKLQl9Ci0JYWRkX21tX2NvdW50ZXIobW0sIHJzcywgLSAoKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKSk7Ci0JZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7Ci19Ci0KLWludCBodWdldGxiX3ByZWZhdWx0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQlpbnQgcmV0ID0gMDsKLQotCUJVR19PTih2bWEtPnZtX3N0YXJ0ICYgfkhQQUdFX01BU0spOwotCUJVR19PTih2bWEtPnZtX2VuZCAmIH5IUEFHRV9NQVNLKTsKLQotCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JZm9yIChhZGRyID0gdm1hLT52bV9zdGFydDsgYWRkciA8IHZtYS0+dm1fZW5kOyBhZGRyICs9IEhQQUdFX1NJWkUpIHsKLQkJdW5zaWduZWQgbG9uZyBpZHg7Ci0JCXB0ZV90ICpwdGUgPSBodWdlX3B0ZV9hbGxvYyhtbSwgYWRkcik7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCWlmICghcHRlKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKCFwdGVfbm9uZSgqcHRlKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlkeCA9ICgoYWRkciAtIHZtYS0+dm1fc3RhcnQpID4+IEhQQUdFX1NISUZUKQotCQkJKyAodm1hLT52bV9wZ29mZiA+PiAoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKSk7Ci0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGlkeCk7Ci0JCWlmICghcGFnZSkgewotCQkJLyogY2hhcmdlIHRoZSBmcyBxdW90YSBmaXJzdCAqLwotCQkJaWYgKGh1Z2V0bGJfZ2V0X3F1b3RhKG1hcHBpbmcpKSB7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXBhZ2UgPSBhbGxvY19odWdlX3BhZ2UoKTsKLQkJCWlmICghcGFnZSkgewotCQkJCWh1Z2V0bGJfcHV0X3F1b3RhKG1hcHBpbmcpOwotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBtYXBwaW5nLCBpZHgsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCEgcmV0KSB7Ci0JCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQl9IGVsc2UgewotCQkJCWh1Z2V0bGJfcHV0X3F1b3RhKG1hcHBpbmcpOwotCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCQlzZXRfaHVnZV9wdGUobW0sIHZtYSwgcGFnZSwgcHRlLCB2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpOwotCX0KLW91dDoKLQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQogdW5zaWduZWQgbG9uZyBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQl1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwppbmRleCAyYzNjNGE4Li5jZDdlZDczIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KKyNpbmNsdWRlIDxhc20vdW5jYWNoZWQuaD4KICNpbmNsdWRlIDxhc20vc24vYnRlLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2ludHIuaD4KICNpbmNsdWRlIDxhc20vc24vc25fc2FsLmg+CkBAIC0xODMsNyArMTg0LDcgQEAKIAkgKiBtZW1vcnkgcHJvdGVjdGlvbnMgYXJlIG5ldmVyIHJlc3RyaWN0ZWQuCiAJICovCiAJaWYgKChhbW9zX3BhZ2UgPSB4cGNfdmFycy0+YW1vc19wYWdlKSA9PSBOVUxMKSB7Ci0JCWFtb3NfcGFnZSA9IChBTU9fdCAqKSBtc3BlY19rYWxsb2NfcGFnZSgwKTsKKwkJYW1vc19wYWdlID0gKEFNT190ICopIFRPX0FNTyh1bmNhY2hlZF9hbGxvY19wYWdlKDApKTsKIAkJaWYgKGFtb3NfcGFnZSA9PSBOVUxMKSB7CiAJCQlkZXZfZXJyKHhwY19wYXJ0LCAiY2FuJ3QgYWxsb2NhdGUgcGFnZSBvZiBBTU9zXG4iKTsKIAkJCXJldHVybiBOVUxMOwpAQCAtMjAwLDcgKzIwMSw4IEBACiAJCQlpZiAocmV0ICE9IDApIHsKIAkJCQlkZXZfZXJyKHhwY19wYXJ0LCAiY2FuJ3QgY2hhbmdlIG1lbW9yeSAiCiAJCQkJCSJwcm90ZWN0aW9uc1xuIik7Ci0JCQkJbXNwZWNfa2ZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYW1vc19wYWdlKTsKKwkJCQl1bmNhY2hlZF9mcmVlX3BhZ2UoX19JQTY0X1VOQ0FDSEVEX09GRlNFVCB8CisJCQkJCQkgICBUT19QSFlTKCh1NjQpIGFtb3NfcGFnZSkpOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvS2NvbmZpZyBiL2FyY2gvbTMyci9LY29uZmlnCmluZGV4IDBkOTBlYTUuLjY0YzEzMzM0IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtNzgsNiArNzgsOSBAQAogY29uZmlnIFBMQVRfTUFQUEkyCiAgICAgICAgYm9vbCAiTWFwcGktSUkoTTNBLVpBMzYvTTNBLVpBNTIpIgogCitjb25maWcgUExBVF9NQVBQSTMKKyAgICAgICBib29sICJNYXBwaS1JSUkoTTNBLTIxNzApIgorCiBlbmRjaG9pY2UKIAogY2hvaWNlCkBAIC0xMzQsNiArMTM3LDcgQEAKIAlpbnQgIkJ1cyBDbG9jayBbSHpdIChpbnRlZ2VyKSIKIAlkZWZhdWx0ICI3MDAwMDAwMCIgaWYgUExBVF9NQVBQSQogCWRlZmF1bHQgIjI1MDAwMDAwIiBpZiBQTEFUX1VTUlYKKwlkZWZhdWx0ICI1MDAwMDAwMCIgaWYgUExBVF9NQVBQSTMKIAlkZWZhdWx0ICI1MDAwMDAwMCIgaWYgUExBVF9NMzI3MDBVVAogCWRlZmF1bHQgIjUwMDAwMDAwIiBpZiBQTEFUX09QU1BVVAogCWRlZmF1bHQgIjMzMzMzMzMzIiBpZiBQTEFUX09BS1MzMlIKQEAgLTE0OSw3ICsxNTMsNyBAQAogCiBjb25maWcgTUVNT1JZX1NUQVJUCiAJaGV4ICJQaHlzaWNhbCBtZW1vcnkgc3RhcnQgYWRkcmVzcyAoaGV4KSIKLQlkZWZhdWx0ICIwODAwMDAwMCIgaWYgUExBVF9NQVBQSSB8fCBQTEFUX01BUFBJMgorCWRlZmF1bHQgIjA4MDAwMDAwIiBpZiBQTEFUX01BUFBJIHx8IFBMQVRfTUFQUEkyIHx8IFBMQVRfTUFQUEkzCiAJZGVmYXVsdCAiMDgwMDAwMDAiIGlmIFBMQVRfVVNSVgogCWRlZmF1bHQgIjA4MDAwMDAwIiBpZiBQTEFUX00zMjcwMFVUCiAJZGVmYXVsdCAiMDgwMDAwMDAiIGlmIFBMQVRfT1BTUFVUCkBAIC0xNTcsNiArMTYxLDcgQEAKIAogY29uZmlnIE1FTU9SWV9TSVpFCiAJaGV4ICJQaHlzaWNhbCBtZW1vcnkgc2l6ZSAoaGV4KSIKKwlkZWZhdWx0ICIwODAwMDAwMCIgaWYgUExBVF9NQVBQSTMKIAlkZWZhdWx0ICIwNDAwMDAwMCIgaWYgUExBVF9NQVBQSSB8fCBQTEFUX01BUFBJMgogCWRlZmF1bHQgIjAyMDAwMDAwIiBpZiBQTEFUX1VTUlYKIAlkZWZhdWx0ICIwMTAwMDAwMCIgaWYgUExBVF9NMzI3MDBVVApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9tMzJyX3Npby5jIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9tMzJyX3Npby5jCmluZGV4IGJhZDU0NzUuLjhmOWE1NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbTMycl9zaW8uYworKysgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL20zMnJfc2lvLmMKQEAgLTYsNiArNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogc3RhdGljIHZvaWQgcHV0YyhjaGFyIGMpOwogCkBAIC0zOCwxNiArMzksMTcgQEAKIAogc3RhdGljIHZvaWQgcHV0YyhjaGFyIGMpCiB7Ci0KLQl3aGlsZSAoKCpCT09UX1NJTzBTVFMgJiAweDMpICE9IDB4MykgOworCXdoaWxlICgoKkJPT1RfU0lPMFNUUyAmIDB4MykgIT0gMHgzKQorCQljcHVfcmVsYXgoKTsKIAlpZiAoYyA9PSAnXG4nKSB7CiAJCSpCT09UX1NJTzBUWEIgPSAnXHInOwotCQl3aGlsZSAoKCpCT09UX1NJTzBTVFMgJiAweDMpICE9IDB4MykgOworCQl3aGlsZSAoKCpCT09UX1NJTzBTVFMgJiAweDMpICE9IDB4MykKKwkJCWNwdV9yZWxheCgpOwogCX0KIAkqQk9PVF9TSU8wVFhCID0gYzsKIH0KLSNlbHNlIC8qIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVRfQWxwaGEpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVQpICovCi0jaWZkZWYgQ09ORklHX01NVQorI2Vsc2UgLyogIShDT05GSUdfUExBVF9NMzI3MDBVVF9BbHBoYSkgJiYgIShDT05GSUdfUExBVF9NMzI3MDBVVCkgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJMikKICNkZWZpbmUgU0lPMFNUUwkodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhhMGVmZDAwMCArIDE0KQogI2RlZmluZSBTSU8wVFhCCSh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweGEwZWZkMDAwICsgMzApCiAjZWxzZQpAQCAtNTcsMTEgKzU5LDEyIEBACiAKIHN0YXRpYyB2b2lkIHB1dGMoY2hhciBjKQogewotCi0Jd2hpbGUgKCgqU0lPMFNUUyAmIDB4MSkgPT0gMCkgOworCXdoaWxlICgoKlNJTzBTVFMgJiAweDEpID09IDApCisJCWNwdV9yZWxheCgpOwogCWlmIChjID09ICdcbicpIHsKIAkJKlNJTzBUWEIgPSAnXHInOwotCQl3aGlsZSAoKCpTSU8wU1RTICYgMHgxKSA9PSAwKSA7CisJCXdoaWxlICgoKlNJTzBTVFMgJiAweDEpID09IDApCisJCQljcHVfcmVsYXgoKTsKIAl9CiAJKlNJTzBUWEIgPSBjOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2RlZmNvbmZpZyBiL2FyY2gvbTMyci9kZWZjb25maWcKaW5kZXggNDE3Yzk1Yi4uODUzMDkzMCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2RlZmNvbmZpZworKysgYi9hcmNoL20zMnIvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjExLXJjNAotIyBXZWQgRmViIDE2IDIxOjEwOjQ0IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzUKKyMgRnJpIEp1biAgMyAxNjoyMDoxMSAyMDA1CiAjCiBDT05GSUdfTTMyUj15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CkBAIC0xNiw2ICsxNiw3IEBACiBDT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTI4LDEzICsyOSwxNSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogQ09ORklHX0lLQ09ORklHPXkKICMgQ09ORklHX0lLQ09ORklHX1BST0MgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfQkFTRV9GVUxMPXkKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTQ0LDYgKzQ3LDcgQEAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTY1LDYgKzY5LDcgQEAKICMgQ09ORklHX1BMQVRfT1BTUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BMQVRfT0FLUzMyUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTEFUX01BUFBJMiBpcyBub3Qgc2V0CisjIENPTkZJR19QTEFUX01BUFBJMyBpcyBub3Qgc2V0CiBDT05GSUdfQ0hJUF9NMzI3MDA9eQogIyBDT05GSUdfQ0hJUF9NMzIxMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ0hJUF9WREVDMiBpcyBub3Qgc2V0CkBAIC0yNjgsNyArMjczLDYgQEAKICMKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0zOTMsMTggKzM5Nyw2IEBACiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKLSMgSW5wdXQgSS9PIGRyaXZlcnMKLSMKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0KLSMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKQEAgLTQxNCw2ICs0MDYsMTcgQEAKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKQEAgLTQ2NSw2ICs0NjgsMTAgQEAKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIFRQTSBkZXZpY2VzCisjCisKKyMKICMgSTJDIHN1cHBvcnQKICMKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CkBAIC01MDgsOCArNTE1LDE0IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKIENPTkZJR19GQj15CisjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU09GVF9DVVJTT1IgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtNTQzLDEwICs1NTYsNiBAQAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotCi0jCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC03MTksOCArNzI4LDkgQEAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbTMyci9rZXJuZWwvTWFrZWZpbGUKaW5kZXggY2ZkNjkwYi4uNmM2YjZjMyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL20zMnIva2VybmVsL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBACiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8gc21wYm9vdC5vCiBvYmotJChDT05GSUdfUExBVF9NQVBQSSkJKz0gc2V0dXBfbWFwcGkubyBpb19tYXBwaS5vCiBvYmotJChDT05GSUdfUExBVF9NQVBQSTIpCSs9IHNldHVwX21hcHBpMi5vIGlvX21hcHBpMi5vCitvYmotJChDT05GSUdfUExBVF9NQVBQSTMpCSs9IHNldHVwX21hcHBpMy5vIGlvX21hcHBpMy5vCiBvYmotJChDT05GSUdfUExBVF9VU1JWKQkJKz0gc2V0dXBfdXNydi5vIGlvX3VzcnYubwogb2JqLSQoQ09ORklHX1BMQVRfTTMyNzAwVVQpCSs9IHNldHVwX20zMjcwMHV0Lm8gaW9fbTMyNzAwdXQubwogb2JqLSQoQ09ORklHX1BMQVRfT1BTUFVUKQkrPSBzZXR1cF9vcHNwdXQubyBpb19vcHNwdXQubwpAQCAtMTcsNCArMTgsMyBAQAogb2JqLSQoQ09ORklHX1BMQVRfT0FLUzMyUikJKz0gc2V0dXBfb2FrczMyci5vIGlvX29ha3MzMnIubwogCiBFWFRSQV9BRkxBR1MJOj0gLXRyYWRpdGlvbmFsCi0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvaW9fbTMyNzAwdXQuYyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fbTMyNzAwdXQuYwppbmRleCAzNzFiYTkwNC4uZTU0NWIwNiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pb19tMzI3MDB1dC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fbTMyNzAwdXQuYwpAQCAtMyw4ICszLDggQEAKICAqCiAgKiAgVHlwaWNhbCBJL08gcm91dGluZXMgZm9yIE0zMjcwMFVUIGJvYXJkLgogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIgIEhpcm95dWtpIEtvbmRvLCBIaXJva2F6dSBUYWthdGEsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvLCBUYWtlbyBUYWthaGFzaGkKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSAgSGlyb3l1a2kgS29uZG8sIEhpcm9rYXp1IFRha2F0YSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0b3NoaSBZYW1hbW90bywgVGFrZW8gVGFrYWhhc2hpCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKICAqICBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKQEAgLTE3Miw2NCArMTcyLDIxIEBACiAKIHVuc2lnbmVkIGNoYXIgX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQl1bnNpZ25lZCBjaGFyICB2OwotCi0JaWYgKHBvcnQgPj0gTEFOX0lPU1RBUlQgJiYgcG9ydCA8IExBTl9JT0VORCkKLQkJdiA9IF9uZV9pbmIoUE9SVDJBRERSX05FKHBvcnQpKTsKLQllbHNlCi0jaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCi0JaWYgKChwb3J0ID49IDB4MWYwICYmIHBvcnQgPD0weDFmNykgfHwgcG9ydCA9PSAweDNmNikgewotCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopX19wb3J0MmFkZHJfYXRhKHBvcnQpOwotCX0gZWxzZQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBKSAmJiBkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKLQlpZiAocG9ydCA+PSBNMzJSX1BDQ19JT1NUQVJUMCAmJiBwb3J0IDw9IE0zMlJfUENDX0lPRU5EMCkgewotCQl1bnNpZ25lZCBjaGFyIGI7Ci0JCXBjY19pb3JlYWRfYnl0ZSgwLCBwb3J0LCAmYiwgc2l6ZW9mKGIpLCAxLCAwKTsKLQkJcmV0dXJuIGI7Ci0JfSBlbHNlCi0jZW5kaWYKLQkJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBPUlQyQUREUihwb3J0KTsKLQorCXVuc2lnbmVkIGNoYXIgdiA9IF9pbmIocG9ydCk7CiAJZGVsYXkoKTsKIAlyZXR1cm4gKHYpOwogfQogCiB1bnNpZ25lZCBzaG9ydCBfaW53X3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIHNob3J0ICB2OwotCi0JaWYgKHBvcnQgPj0gTEFOX0lPU1RBUlQgJiYgcG9ydCA8IExBTl9JT0VORCkKLQkJdiA9IF9uZV9pbncoUE9SVDJBRERSX05FKHBvcnQpKTsKLQllbHNlCi0jaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCi0JaWYgKChwb3J0ID49IDB4MWYwICYmIHBvcnQgPD0weDFmNykgfHwgcG9ydCA9PSAweDNmNikgewotCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKV9fcG9ydDJhZGRyX2F0YShwb3J0KTsKLQl9IGVsc2UKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1VTQikKLQlpZihwb3J0ID49IDB4MzQwICYmIHBvcnQgPCAweDNhMCkKLQkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQT1JUMkFERFJfVVNCKHBvcnQpOwotCWVsc2UKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCi0JaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKLQkJdW5zaWduZWQgc2hvcnQgdzsKLQkJcGNjX2lvcmVhZF93b3JkKDAsIHBvcnQsICZ3LCBzaXplb2YodyksIDEsIDApOwotCQlyZXR1cm4gdzsKLQl9IGVsc2UKLSNlbmRpZgotCQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBPUlQyQUREUihwb3J0KTsKLQorCXVuc2lnbmVkIHNob3J0IHYgPSBfaW53KHBvcnQpOwogCWRlbGF5KCk7CiAJcmV0dXJuICh2KTsKIH0KIAogdW5zaWduZWQgbG9uZyBfaW5sX3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIGxvbmcgIHY7Ci0KLQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopUE9SVDJBRERSKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgdiA9IF9pbmwocG9ydCk7CiAJZGVsYXkoKTsKIAlyZXR1cm4gKHYpOwogfQpAQCAtMjg3LDUyICsyNDQsMTkgQEAKIAogdm9pZCBfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCWlmIChwb3J0ID49IExBTl9JT1NUQVJUICYmIHBvcnQgPCBMQU5fSU9FTkQpCi0JCV9uZV9vdXRiKGIsIFBPUlQyQUREUl9ORShwb3J0KSk7Ci0JZWxzZQotI2lmIGRlZmluZWQoQ09ORklHX0lERSkgJiYgIWRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQotCWlmICgocG9ydCA+PSAweDFmMCAmJiBwb3J0IDw9MHgxZjcpIHx8IHBvcnQgPT0gMHgzZjYpIHsKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopX19wb3J0MmFkZHJfYXRhKHBvcnQpID0gYjsKLQl9IGVsc2UKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCi0JaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKLQkJcGNjX2lvd3JpdGVfYnl0ZSgwLCBwb3J0LCAmYiwgc2l6ZW9mKGIpLCAxLCAwKTsKLQl9IGVsc2UKLSNlbmRpZgotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQT1JUMkFERFIocG9ydCkgPSBiOwotCisJX291dGIoYiwgcG9ydCk7CiAJZGVsYXkoKTsKIH0KIAogdm9pZCBfb3V0d19wKHVuc2lnbmVkIHNob3J0IHcsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlpZiAocG9ydCA+PSBMQU5fSU9TVEFSVCAmJiBwb3J0IDwgTEFOX0lPRU5EKQotCQlfbmVfb3V0dyh3LCBQT1JUMkFERFJfTkUocG9ydCkpOwotCWVsc2UKLSNpZiBkZWZpbmVkKENPTkZJR19JREUpICYmICFkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKLQlpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7Ci0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilfX3BvcnQyYWRkcl9hdGEocG9ydCkgPSB3OwotCX0gZWxzZQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCKQotCWlmKHBvcnQgPj0gMHgzNDAgJiYgcG9ydCA8IDB4M2EwKQotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUE9SVDJBRERSX1VTQihwb3J0KSA9IHc7Ci0JZWxzZQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBKSAmJiBkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKLQlpZiAocG9ydCA+PSBNMzJSX1BDQ19JT1NUQVJUMCAmJiBwb3J0IDw9IE0zMlJfUENDX0lPRU5EMCkgewotCQlwY2NfaW93cml0ZV93b3JkKDAsIHBvcnQsICZ3LCBzaXplb2YodyksIDEsIDApOwotCX0gZWxzZQotI2VuZGlmCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQT1JUMkFERFIocG9ydCkgPSB3OwotCisJX291dHcodywgcG9ydCk7CiAJZGVsYXkoKTsKIH0KIAogdm9pZCBfb3V0bF9wKHVuc2lnbmVkIGxvbmcgbCwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVBPUlQyQUREUihwb3J0KSA9IGw7CisJX291dGwobCwgcG9ydCk7CiAJZGVsYXkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaS5jCmluZGV4IDg1Njg4ZmYuLjc4MDMzMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaW9fbWFwcGkuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lvX21hcHBpLmMKQEAgLTMsOCArMyw4IEBACiAgKgogICogIFR5cGljYWwgSS9PIHJvdXRpbmVzIGZvciBNYXBwaSBib2FyZC4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0b3NoaSBZYW1hbW90bworICogIENvcHlyaWdodCAoYykgMjAwMS0yMDA1ICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTMwLDU3ICsxMzAsMjEgQEAKIAogdW5zaWduZWQgY2hhciBfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIGNoYXIgIHY7Ci0KLQlpZiAocG9ydCA+PSAweDMwMCAmJiBwb3J0IDwgMHgzMjApCi0JCXYgPSBfbmVfaW5iKFBPUlQyQUREUl9ORShwb3J0KSk7Ci0JZWxzZQotI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9QQ0MpCi0JaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKLQkJdW5zaWduZWQgY2hhciBiOwotCQlwY2NfaW9yZWFkKDAsIHBvcnQsICZiLCBzaXplb2YoYiksIDEsIDApOwotCQlyZXR1cm4gYjsKLQl9IGVsc2UgCWlmIChwb3J0ID49IE0zMlJfUENDX0lPU1RBUlQxICYmIHBvcnQgPD0gTTMyUl9QQ0NfSU9FTkQxKSB7Ci0JCXVuc2lnbmVkIGNoYXIgYjsKLQkJcGNjX2lvcmVhZCgxLCBwb3J0LCAmYiwgc2l6ZW9mKGIpLCAxLCAwKTsKLQkJcmV0dXJuIGI7Ci0JfSBlbHNlCi0jZW5kaWYKLQkJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBPUlQyQUREUihwb3J0KTsKLQorCXVuc2lnbmVkIGNoYXIgdiA9IF9pbmIocG9ydCk7CiAJZGVsYXkoKTsKIAlyZXR1cm4gKHYpOwogfQogCiB1bnNpZ25lZCBzaG9ydCBfaW53X3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIHNob3J0ICB2OwotCi0JaWYgKHBvcnQgPj0gMHgzMDAgJiYgcG9ydCA8IDB4MzIwKQotCQl2ID0gX25lX2ludyhQT1JUMkFERFJfTkUocG9ydCkpOwotCWVsc2UKLSNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfUENDKQotCWlmIChwb3J0ID49IE0zMlJfUENDX0lPU1RBUlQwICYmIHBvcnQgPD0gTTMyUl9QQ0NfSU9FTkQwKSB7Ci0JCXVuc2lnbmVkIHNob3J0IHc7Ci0JCXBjY19pb3JlYWQoMCwgcG9ydCwgJncsIHNpemVvZih3KSwgMSwgMCk7Ci0JCXJldHVybiB3OwotCX0gZWxzZSAJaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDEgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDEpIHsKLQkJdW5zaWduZWQgc2hvcnQgdzsKLQkJcGNjX2lvcmVhZCgxLCBwb3J0LCAmdywgc2l6ZW9mKHcpLCAxLCAwKTsKLQkJcmV0dXJuIHc7Ci0JfSBlbHNlCi0jZW5kaWYKLQkJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQT1JUMkFERFIocG9ydCk7Ci0KKwl1bnNpZ25lZCBzaG9ydCB2ID0gX2ludyhwb3J0KTsKIAlkZWxheSgpOwogCXJldHVybiAodik7CiB9CiAKIHVuc2lnbmVkIGxvbmcgX2lubF9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQl1bnNpZ25lZCBsb25nICB2OwotCi0JdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVBPUlQyQUREUihwb3J0KTsKKwl1bnNpZ25lZCBsb25nIHYgPSBfaW5sKHBvcnQpOwogCWRlbGF5KCk7CiAJcmV0dXJuICh2KTsKIH0KQEAgLTIyOSw0MSArMTkzLDE5IEBACiAKIHZvaWQgX291dGJfcCh1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlpZiAocG9ydCA+PSAweDMwMCAmJiBwb3J0IDwgMHgzMjApCi0JCV9uZV9vdXRiKGIsIFBPUlQyQUREUl9ORShwb3J0KSk7Ci0JZWxzZQotI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9QQ0MpCi0JaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKLQkJcGNjX2lvd3JpdGUoMCwgcG9ydCwgJmIsIHNpemVvZihiKSwgMSwgMCk7Ci0JfSBlbHNlIAlpZiAocG9ydCA+PSBNMzJSX1BDQ19JT1NUQVJUMSAmJiBwb3J0IDw9IE0zMlJfUENDX0lPRU5EMSkgewotCQlwY2NfaW93cml0ZSgxLCBwb3J0LCAmYiwgc2l6ZW9mKGIpLCAxLCAwKTsKLQl9IGVsc2UKLSNlbmRpZgotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQT1JUMkFERFIocG9ydCkgPSBiOwotCisJX291dGIoYiwgcG9ydCk7CiAJZGVsYXkoKTsKIH0KIAogdm9pZCBfb3V0d19wKHVuc2lnbmVkIHNob3J0IHcsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlpZiAocG9ydCA+PSAweDMwMCAmJiBwb3J0IDwgMHgzMjApCi0JCV9uZV9vdXR3KHcsIFBPUlQyQUREUl9ORShwb3J0KSk7Ci0JZWxzZQotI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9QQ0MpCi0JaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKLQkJcGNjX2lvd3JpdGUoMCwgcG9ydCwgJncsIHNpemVvZih3KSwgMSwgMCk7Ci0JfSBlbHNlIAlpZiAocG9ydCA+PSBNMzJSX1BDQ19JT1NUQVJUMSAmJiBwb3J0IDw9IE0zMlJfUENDX0lPRU5EMSkgewotCQlwY2NfaW93cml0ZSgxLCBwb3J0LCAmdywgc2l6ZW9mKHcpLCAxLCAwKTsKLQl9IGVsc2UKLSNlbmRpZgotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUE9SVDJBRERSKHBvcnQpID0gdzsKLQorCV9vdXR3KHcsIHBvcnQpOwogCWRlbGF5KCk7CiB9CiAKIHZvaWQgX291dGxfcCh1bnNpZ25lZCBsb25nIGwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilQT1JUMkFERFIocG9ydCkgPSBsOworCV9vdXRsKGwsIHBvcnQpOwogCWRlbGF5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvaW9fbWFwcGkyLmMgYi9hcmNoL20zMnIva2VybmVsL2lvX21hcHBpMi5jCmluZGV4IDQxODJjZDQuLjVjMDM1MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaW9fbWFwcGkyLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaTIuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgVHlwaWNhbCBJL08gcm91dGluZXMgZm9yIE1hcHBpMiBib2FyZC4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDMgIEhpcm95dWtpIEtvbmRvLCBIaXJva2F6dSBUYWthdGEsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgIEhpcm95dWtpIEtvbmRvLCBIaXJva2F6dSBUYWthdGEsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdG9zaGkgWWFtYW1vdG8sIE1hbW9ydSBTYWt1Z2F3YQogICovCiAKQEAgLTI1LDcgKzI1LDcgQEAKIGV4dGVybiB2b2lkIHBjY19pb3JlYWRfd29yZChpbnQsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGludCk7CiBleHRlcm4gdm9pZCBwY2NfaW93cml0ZV9ieXRlKGludCwgdW5zaWduZWQgbG9uZywgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgaW50KTsKIGV4dGVybiB2b2lkIHBjY19pb3dyaXRlX3dvcmQoaW50LCB1bnNpZ25lZCBsb25nLCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBpbnQpOwotI2VuZGlmIC8qIENPTkZJR19QQ01DSUEgJiYgQ09ORklHX01BUFBJMl9DRkMgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENNQ0lBICYmIENPTkZJR19NMzJSX0NGQyAqLwogCiAjZGVmaW5lIFBPUlQyQUREUihwb3J0KSAgICAgIF9wb3J0MmFkZHIocG9ydCkKICNkZWZpbmUgUE9SVDJBRERSX05FKHBvcnQpICAgX3BvcnQyYWRkcl9uZShwb3J0KQpAQCAtMTY5LDY0ICsxNjksMjEgQEAKIAogdW5zaWduZWQgY2hhciBfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIGNoYXIgIHY7Ci0KLQlpZiAocG9ydCA+PSBMQU5fSU9TVEFSVCAmJiBwb3J0IDwgTEFOX0lPRU5EKQotCQl2ID0gX25lX2luYihQT1JUMkFERFJfTkUocG9ydCkpOwotCWVsc2UKLSNpZiBkZWZpbmVkKENPTkZJR19JREUpICYmICFkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKLQlpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7Ci0JCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilfX3BvcnQyYWRkcl9hdGEocG9ydCk7Ci0JfSBlbHNlCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQotCWlmIChwb3J0ID49IE0zMlJfUENDX0lPU1RBUlQwICYmIHBvcnQgPD0gTTMyUl9QQ0NfSU9FTkQwKSB7Ci0JCXVuc2lnbmVkIGNoYXIgYjsKLQkJcGNjX2lvcmVhZF9ieXRlKDAsIHBvcnQsICZiLCBzaXplb2YoYiksIDEsIDApOwotCQlyZXR1cm4gYjsKLQl9IGVsc2UKLSNlbmRpZgotCQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUE9SVDJBRERSKHBvcnQpOwotCisJdW5zaWduZWQgY2hhciB2ID0gX2luYihwb3J0KTsKIAlkZWxheSgpOwogCXJldHVybiAodik7CiB9CiAKIHVuc2lnbmVkIHNob3J0IF9pbndfcCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JdW5zaWduZWQgc2hvcnQgIHY7Ci0KLQlpZiAocG9ydCA+PSBMQU5fSU9TVEFSVCAmJiBwb3J0IDwgTEFOX0lPRU5EKQotCQl2ID0gX25lX2ludyhQT1JUMkFERFJfTkUocG9ydCkpOwotCWVsc2UKLSNpZiBkZWZpbmVkKENPTkZJR19JREUpICYmICFkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKLQlpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7Ci0JCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopX19wb3J0MmFkZHJfYXRhKHBvcnQpOwotCX0gZWxzZQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCKQotCWlmIChwb3J0ID49IDB4MzQwICYmIHBvcnQgPCAweDNhMCkKLQkJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQT1JUMkFERFJfVVNCKHBvcnQpOwotCWVsc2UKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCi0JaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKLQkJdW5zaWduZWQgc2hvcnQgdzsKLQkJcGNjX2lvcmVhZF93b3JkKDAsIHBvcnQsICZ3LCBzaXplb2YodyksIDEsIDApOwotCQlyZXR1cm4gdzsKLQl9IGVsc2UKLSNlbmRpZgotCQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBPUlQyQUREUihwb3J0KTsKLQorCXVuc2lnbmVkIHNob3J0IHYgPSBfaW53KHBvcnQpOwogCWRlbGF5KCk7CiAJcmV0dXJuICh2KTsKIH0KIAogdW5zaWduZWQgbG9uZyBfaW5sX3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIGxvbmcgIHY7Ci0KLQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopUE9SVDJBRERSKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgdiA9IF9pbmwocG9ydCk7CiAJZGVsYXkoKTsKIAlyZXR1cm4gKHYpOwogfQpAQCAtMjg0LDUyICsyNDEsMTkgQEAKIAogdm9pZCBfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCWlmIChwb3J0ID49IExBTl9JT1NUQVJUICYmIHBvcnQgPCBMQU5fSU9FTkQpCi0JCV9uZV9vdXRiKGIsIFBPUlQyQUREUl9ORShwb3J0KSk7Ci0JZWxzZQotI2lmIGRlZmluZWQoQ09ORklHX0lERSkgJiYgIWRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQotCWlmICgocG9ydCA+PSAweDFmMCAmJiBwb3J0IDw9MHgxZjcpIHx8IHBvcnQgPT0gMHgzZjYpIHsKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopX19wb3J0MmFkZHJfYXRhKHBvcnQpID0gYjsKLQl9IGVsc2UKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCi0JaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKLQkJcGNjX2lvd3JpdGVfYnl0ZSgwLCBwb3J0LCAmYiwgc2l6ZW9mKGIpLCAxLCAwKTsKLQl9IGVsc2UKLSNlbmRpZgotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQT1JUMkFERFIocG9ydCkgPSBiOwotCisJX291dGIoYiwgcG9ydCk7CiAJZGVsYXkoKTsKIH0KIAogdm9pZCBfb3V0d19wKHVuc2lnbmVkIHNob3J0IHcsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlpZiAocG9ydCA+PSBMQU5fSU9TVEFSVCAmJiBwb3J0IDwgTEFOX0lPRU5EKQotCQlfbmVfb3V0dyh3LCBQT1JUMkFERFJfTkUocG9ydCkpOwotCWVsc2UKLSNpZiBkZWZpbmVkKENPTkZJR19JREUpICYmICFkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKLQlpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7Ci0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilfX3BvcnQyYWRkcl9hdGEocG9ydCkgPSB3OwotCX0gZWxzZQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCKQotCSAgaWYgKHBvcnQgPj0gMHgzNDAgJiYgcG9ydCA8IDB4M2EwKQotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUE9SVDJBRERSX1VTQihwb3J0KSA9IHc7Ci0JZWxzZQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBKSAmJiBkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKLQlpZiAocG9ydCA+PSBNMzJSX1BDQ19JT1NUQVJUMCAmJiBwb3J0IDw9IE0zMlJfUENDX0lPRU5EMCkgewotCQlwY2NfaW93cml0ZV93b3JkKDAsIHBvcnQsICZ3LCBzaXplb2YodyksIDEsIDApOwotCX0gZWxzZQotI2VuZGlmCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQT1JUMkFERFIocG9ydCkgPSB3OwotCisJX291dHcodywgcG9ydCk7CiAJZGVsYXkoKTsKIH0KIAogdm9pZCBfb3V0bF9wKHVuc2lnbmVkIGxvbmcgbCwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVBPUlQyQUREUihwb3J0KSA9IGw7CisJX291dGwobCwgcG9ydCk7CiAJZGVsYXkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaTMuYyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fbWFwcGkzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwYmRlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fbWFwcGkzLmMKQEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiAgbGludXgvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaTMuYworICoKKyAqICBUeXBpY2FsIEkvTyByb3V0aW5lcyBmb3IgTWFwcGkzIGJvYXJkLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSAgSGlyb3l1a2kgS29uZG8sIEhpcm9rYXp1IFRha2F0YSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0b3NoaSBZYW1hbW90bywgTWFtb3J1IFNha3VnYXdhCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tMzJyLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTTMyUl9QQ0NfSU9NQVBfU0laRSAweDEwMDAKKworI2RlZmluZSBNMzJSX1BDQ19JT1NUQVJUMCAweDEwMDAKKyNkZWZpbmUgTTMyUl9QQ0NfSU9FTkQwICAgKE0zMlJfUENDX0lPU1RBUlQwICsgTTMyUl9QQ0NfSU9NQVBfU0laRSAtIDEpCisKK2V4dGVybiB2b2lkIHBjY19pb3JlYWRfYnl0ZShpbnQsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGludCk7CitleHRlcm4gdm9pZCBwY2NfaW9yZWFkX3dvcmQoaW50LCB1bnNpZ25lZCBsb25nLCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHZvaWQgcGNjX2lvd3JpdGVfYnl0ZShpbnQsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGludCk7CitleHRlcm4gdm9pZCBwY2NfaW93cml0ZV93b3JkKGludCwgdW5zaWduZWQgbG9uZywgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgaW50KTsKKyNlbmRpZiAvKiBDT05GSUdfUENNQ0lBICYmIENPTkZJR19NMzJSX0NGQyAqLworCisjZGVmaW5lIFBPUlQyQUREUihwb3J0KSAgICAgIF9wb3J0MmFkZHIocG9ydCkKKyNkZWZpbmUgUE9SVDJBRERSX05FKHBvcnQpICAgX3BvcnQyYWRkcl9uZShwb3J0KQorI2RlZmluZSBQT1JUMkFERFJfVVNCKHBvcnQpICBfcG9ydDJhZGRyX3VzYihwb3J0KQorCitzdGF0aWMgaW5saW5lIHZvaWQgKl9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiAodm9pZCAqKShwb3J0ICsgTk9OQ0FDSEVfT0ZGU0VUKTsKK30KKworI2RlZmluZSBMQU5fSU9TVEFSVAkweDMwMAorI2RlZmluZSBMQU5fSU9FTkQJMHgzMjAKKworI2lmIGRlZmluZWQoQ09ORklHX0lERSkgJiYgIWRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQorc3RhdGljIGlubGluZSB2b2lkICpfX3BvcnQyYWRkcl9hdGEodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXN0YXRpYyBpbnQJZHVtbXlfcmVnOworCisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSAweDFmMDoJcmV0dXJuICh2b2lkICopMHhiNDAwMjAwMDsKKwljYXNlIDB4MWYxOglyZXR1cm4gKHZvaWQgKikweGI0MDEyODAwOworCWNhc2UgMHgxZjI6CXJldHVybiAodm9pZCAqKTB4YjQwMTIwMDI7CisJY2FzZSAweDFmMzoJcmV0dXJuICh2b2lkICopMHhiNDAxMjgwMjsKKwljYXNlIDB4MWY0OglyZXR1cm4gKHZvaWQgKikweGI0MDEyMDA0OworCWNhc2UgMHgxZjU6CXJldHVybiAodm9pZCAqKTB4YjQwMTI4MDQ7CisJY2FzZSAweDFmNjoJcmV0dXJuICh2b2lkICopMHhiNDAxMjAwNjsKKwljYXNlIDB4MWY3OglyZXR1cm4gKHZvaWQgKikweGI0MDEyODA2OworCWNhc2UgMHgzZjY6CXJldHVybiAodm9pZCAqKTB4YjQwMTIwMGU7CisJZGVmYXVsdDogCXJldHVybiAodm9pZCAqKSZkdW1teV9yZWc7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX3BvcnQyYWRkcl9uZSh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJcmV0dXJuICh2b2lkICopKHBvcnQgKyBOT05DQUNIRV9PRkZTRVQgKyAweDEwMDAwMDAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpfcG9ydDJhZGRyX3VzYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJcmV0dXJuICh2b2lkICopKHBvcnQgKyBOT05DQUNIRV9PRkZTRVQgKyAweDEyMDAwMDAwKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgicHVzaCByMDsgXG5cdCBwb3AgcjA7IiA6IDogOiJtZW1vcnkiKTsKK30KKworLyoKKyAqIE5JQyBJL08gZnVuY3Rpb24KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgX25lX2luYih2b2lkICpwb3J0cCkKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGNoYXIpICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnRwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IF9uZV9pbncodm9pZCAqcG9ydHApCit7CisJcmV0dXJuICh1bnNpZ25lZCBzaG9ydClsZTE2X3RvX2NwdSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydHApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX25lX2luc2Iodm9pZCAqcG9ydHAsIHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGFkZHI7CisKKwl3aGlsZSAoY291bnQtLSkKKwkJKmJ1ZisrID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcG9ydHA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfbmVfb3V0Yih1bnNpZ25lZCBjaGFyIGIsIHZvaWQgKnBvcnRwKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnRwID0gKHVuc2lnbmVkIGNoYXIpYjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9uZV9vdXR3KHVuc2lnbmVkIHNob3J0IHcsIHZvaWQgKnBvcnRwKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0cCA9IGNwdV90b19sZTE2KHcpOworfQorCit1bnNpZ25lZCBjaGFyIF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlmIChwb3J0ID49IExBTl9JT1NUQVJUICYmIHBvcnQgPCBMQU5fSU9FTkQpCisJCXJldHVybiBfbmVfaW5iKFBPUlQyQUREUl9ORShwb3J0KSk7CisjaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJZWxzZSBpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7CisJCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilfX3BvcnQyYWRkcl9hdGEocG9ydCk7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBKSAmJiBkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKKwllbHNlIGlmIChwb3J0ID49IE0zMlJfUENDX0lPU1RBUlQwICYmIHBvcnQgPD0gTTMyUl9QQ0NfSU9FTkQwKSB7CisJCXVuc2lnbmVkIGNoYXIgYjsKKwkJcGNjX2lvcmVhZF9ieXRlKDAsIHBvcnQsICZiLCBzaXplb2YoYiksIDEsIDApOworCQlyZXR1cm4gYjsKKwl9IGVsc2UKKyNlbmRpZgorCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQT1JUMkFERFIocG9ydCk7Cit9CisKK3Vuc2lnbmVkIHNob3J0IF9pbncodW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlmIChwb3J0ID49IExBTl9JT1NUQVJUICYmIHBvcnQgPCBMQU5fSU9FTkQpCisJCXJldHVybiBfbmVfaW53KFBPUlQyQUREUl9ORShwb3J0KSk7CisjaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJZWxzZSBpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7CisJCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopX19wb3J0MmFkZHJfYXRhKHBvcnQpOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1VTQikKKwllbHNlIGlmIChwb3J0ID49IDB4MzQwICYmIHBvcnQgPCAweDNhMCkKKwkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQT1JUMkFERFJfVVNCKHBvcnQpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQorCWVsc2UgaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKKwkJdW5zaWduZWQgc2hvcnQgdzsKKwkJcGNjX2lvcmVhZF93b3JkKDAsIHBvcnQsICZ3LCBzaXplb2YodyksIDEsIDApOworCQlyZXR1cm4gdzsKKwl9IGVsc2UKKyNlbmRpZgorCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUE9SVDJBRERSKHBvcnQpOworfQorCit1bnNpZ25lZCBsb25nIF9pbmwodW5zaWduZWQgbG9uZyBwb3J0KQoreworI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKKwkJdW5zaWduZWQgbG9uZyBsOworCQlwY2NfaW9yZWFkX3dvcmQoMCwgcG9ydCwgJmwsIHNpemVvZihsKSwgMSwgMCk7CisJCXJldHVybiBsOworCX0gZWxzZQorI2VuZGlmCisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVBPUlQyQUREUihwb3J0KTsKK30KKwordW5zaWduZWQgY2hhciBfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVuc2lnbmVkIGNoYXIgdiA9IF9pbmIocG9ydCk7CisJZGVsYXkoKTsKKwlyZXR1cm4gKHYpOworfQorCit1bnNpZ25lZCBzaG9ydCBfaW53X3AodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVuc2lnbmVkIHNob3J0IHYgPSBfaW53KHBvcnQpOworCWRlbGF5KCk7CisJcmV0dXJuICh2KTsKK30KKwordW5zaWduZWQgbG9uZyBfaW5sX3AodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgdiA9IF9pbmwocG9ydCk7CisJZGVsYXkoKTsKKwlyZXR1cm4gKHYpOworfQorCit2b2lkIF9vdXRiKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlmIChwb3J0ID49IExBTl9JT1NUQVJUICYmIHBvcnQgPCBMQU5fSU9FTkQpCisJCV9uZV9vdXRiKGIsIFBPUlQyQUREUl9ORShwb3J0KSk7CisJZWxzZQorI2lmIGRlZmluZWQoQ09ORklHX0lERSkgJiYgIWRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQorCWlmICgocG9ydCA+PSAweDFmMCAmJiBwb3J0IDw9MHgxZjcpIHx8IHBvcnQgPT0gMHgzZjYpIHsKKwkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopX19wb3J0MmFkZHJfYXRhKHBvcnQpID0gYjsKKwl9IGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKKwkJcGNjX2lvd3JpdGVfYnl0ZSgwLCBwb3J0LCAmYiwgc2l6ZW9mKGIpLCAxLCAwKTsKKwl9IGVsc2UKKyNlbmRpZgorCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQT1JUMkFERFIocG9ydCkgPSBiOworfQorCit2b2lkIF9vdXR3KHVuc2lnbmVkIHNob3J0IHcsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlpZiAocG9ydCA+PSBMQU5fSU9TVEFSVCAmJiBwb3J0IDwgTEFOX0lPRU5EKQorCQlfbmVfb3V0dyh3LCBQT1JUMkFERFJfTkUocG9ydCkpOworCWVsc2UKKyNpZiBkZWZpbmVkKENPTkZJR19JREUpICYmICFkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKKwlpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7CisJCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilfX3BvcnQyYWRkcl9hdGEocG9ydCkgPSB3OworCX0gZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCKQorCWlmIChwb3J0ID49IDB4MzQwICYmIHBvcnQgPCAweDNhMCkKKwkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBPUlQyQUREUl9VU0IocG9ydCkgPSB3OworCWVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKKwkJcGNjX2lvd3JpdGVfd29yZCgwLCBwb3J0LCAmdywgc2l6ZW9mKHcpLCAxLCAwKTsKKwl9IGVsc2UKKyNlbmRpZgorCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUE9SVDJBRERSKHBvcnQpID0gdzsKK30KKwordm9pZCBfb3V0bCh1bnNpZ25lZCBsb25nIGwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQorCWlmIChwb3J0ID49IE0zMlJfUENDX0lPU1RBUlQwICYmIHBvcnQgPD0gTTMyUl9QQ0NfSU9FTkQwKSB7CisJCXBjY19pb3dyaXRlX3dvcmQoMCwgcG9ydCwgJmwsIHNpemVvZihsKSwgMSwgMCk7CisJfSBlbHNlCisjZW5kaWYKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilQT1JUMkFERFIocG9ydCkgPSBsOworfQorCit2b2lkIF9vdXRiX3AodW5zaWduZWQgY2hhciBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJX291dGIoYiwgcG9ydCk7CisJZGVsYXkoKTsKK30KKwordm9pZCBfb3V0d19wKHVuc2lnbmVkIHNob3J0IHcsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlfb3V0dyh3LCBwb3J0KTsKKwlkZWxheSgpOworfQorCit2b2lkIF9vdXRsX3AodW5zaWduZWQgbG9uZyBsLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJX291dGwobCwgcG9ydCk7CisJZGVsYXkoKTsKK30KKwordm9pZCBfaW5zYih1bnNpZ25lZCBpbnQgcG9ydCwgdm9pZCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJaWYgKHBvcnQgPj0gTEFOX0lPU1RBUlQgJiYgcG9ydCA8IExBTl9JT0VORCkKKwkJX25lX2luc2IoUE9SVDJBRERSX05FKHBvcnQpLCBhZGRyLCBjb3VudCk7CisjaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJZWxzZSBpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7CisJCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGFkZHI7CisJCXVuc2lnbmVkIGNoYXIgKnBvcnRwID0gX19wb3J0MmFkZHJfYXRhKHBvcnQpOworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpidWYrKyA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnRwOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJZWxzZSBpZiAocG9ydCA+PSBNMzJSX1BDQ19JT1NUQVJUMCAmJiBwb3J0IDw9IE0zMlJfUENDX0lPRU5EMCkgeworCQlwY2NfaW9yZWFkX2J5dGUoMCwgcG9ydCwgKHZvaWQgKilhZGRyLCBzaXplb2YodW5zaWduZWQgY2hhciksCisJCQkJY291bnQsIDEpOworCX0KKyNlbmRpZgorCWVsc2UgeworCQl1bnNpZ25lZCBjaGFyICpidWYgPSBhZGRyOworCQl1bnNpZ25lZCBjaGFyICpwb3J0cCA9IFBPUlQyQUREUihwb3J0KTsKKwkJd2hpbGUgKGNvdW50LS0pCisJCQkqYnVmKysgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0cDsKKwl9Cit9CisKK3ZvaWQgX2luc3codW5zaWduZWQgaW50IHBvcnQsIHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXVuc2lnbmVkIHNob3J0ICpidWYgPSBhZGRyOworCXVuc2lnbmVkIHNob3J0ICpwb3J0cDsKKworCWlmIChwb3J0ID49IExBTl9JT1NUQVJUICYmIHBvcnQgPCBMQU5fSU9FTkQpIHsKKwkJcG9ydHAgPSBQT1JUMkFERFJfTkUocG9ydCk7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKmJ1ZisrID0gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnRwOworI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJfSBlbHNlIGlmIChwb3J0ID49IE0zMlJfUENDX0lPU1RBUlQwICYmIHBvcnQgPD0gTTMyUl9QQ0NfSU9FTkQwKSB7CisJCXBjY19pb3JlYWRfd29yZCg5LCBwb3J0LCAodm9pZCAqKWFkZHIsIHNpemVvZih1bnNpZ25lZCBzaG9ydCksCisJCQkJY291bnQsIDEpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJfSBlbHNlIGlmICgocG9ydCA+PSAweDFmMCAmJiBwb3J0IDw9MHgxZjcpIHx8IHBvcnQgPT0gMHgzZjYpIHsKKwkJcG9ydHAgPSBfX3BvcnQyYWRkcl9hdGEocG9ydCk7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKmJ1ZisrID0gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnRwOworI2VuZGlmCisJfSBlbHNlIHsKKwkJcG9ydHAgPSBQT1JUMkFERFIocG9ydCk7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKmJ1ZisrID0gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnRwOworCX0KK30KKwordm9pZCBfaW5zbCh1bnNpZ25lZCBpbnQgcG9ydCwgdm9pZCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyAqYnVmID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nICpwb3J0cDsKKworCXBvcnRwID0gUE9SVDJBRERSKHBvcnQpOworCXdoaWxlIChjb3VudC0tKQorCQkqYnVmKysgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilwb3J0cDsKK30KKwordm9pZCBfb3V0c2IodW5zaWduZWQgaW50IHBvcnQsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGFkZHI7CisJdW5zaWduZWQgY2hhciAqcG9ydHA7CisKKwlpZiAocG9ydCA+PSBMQU5fSU9TVEFSVCAmJiBwb3J0IDwgTEFOX0lPRU5EKSB7CisJCXBvcnRwID0gUE9SVDJBRERSX05FKHBvcnQpOworCQl3aGlsZSAoY291bnQtLSkKKwkJCV9uZV9vdXRiKCpidWYrKywgcG9ydHApOworI2lmIGRlZmluZWQoQ09ORklHX0lERSkgJiYgIWRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQorCX0gZWxzZSBpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7CisJCXBvcnRwID0gX19wb3J0MmFkZHJfYXRhKHBvcnQpOworCQl3aGlsZSAoY291bnQtLSkKKwkJCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnRwID0gKmJ1ZisrOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBKSAmJiBkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKKwl9IGVsc2UgaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKKwkJcGNjX2lvd3JpdGVfYnl0ZSgwLCBwb3J0LCAodm9pZCAqKWFkZHIsIHNpemVvZih1bnNpZ25lZCBjaGFyKSwKKwkJCQkgY291bnQsIDEpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJcG9ydHAgPSBQT1JUMkFERFIocG9ydCk7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcG9ydHAgPSAqYnVmKys7CisJfQorfQorCit2b2lkIF9vdXRzdyh1bnNpZ25lZCBpbnQgcG9ydCwgY29uc3Qgdm9pZCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgKmJ1ZiA9IGFkZHI7CisJdW5zaWduZWQgc2hvcnQgKnBvcnRwOworCisJaWYgKHBvcnQgPj0gTEFOX0lPU1RBUlQgJiYgcG9ydCA8IExBTl9JT0VORCkgeworCQlwb3J0cCA9IFBPUlQyQUREUl9ORShwb3J0KTsKKwkJd2hpbGUgKGNvdW50LS0pCisJCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydHAgPSAqYnVmKys7CisjaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJfSBlbHNlIGlmICgocG9ydCA+PSAweDFmMCAmJiBwb3J0IDw9MHgxZjcpIHx8IHBvcnQgPT0gMHgzZjYpIHsKKwkJcG9ydHAgPSBfX3BvcnQyYWRkcl9hdGEocG9ydCk7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnRwID0gKmJ1ZisrOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBKSAmJiBkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKKwl9IGVsc2UgaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKKwkJcGNjX2lvd3JpdGVfd29yZCg5LCBwb3J0LCAodm9pZCAqKWFkZHIsIHNpemVvZih1bnNpZ25lZCBzaG9ydCksCisJCQkJIGNvdW50LCAxKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCXBvcnRwID0gUE9SVDJBRERSKHBvcnQpOworCQl3aGlsZSAoY291bnQtLSkKKwkJCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0cCA9ICpidWYrKzsKKwl9Cit9CisKK3ZvaWQgX291dHNsKHVuc2lnbmVkIGludCBwb3J0LCBjb25zdCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICpidWYgPSBhZGRyOworCXVuc2lnbmVkIGNoYXIgKnBvcnRwOworCisJcG9ydHAgPSBQT1JUMkFERFIocG9ydCk7CisJd2hpbGUgKGNvdW50LS0pCisJCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXBvcnRwID0gKmJ1ZisrOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pb19vYWtzMzJyLmMgYi9hcmNoL20zMnIva2VybmVsL2lvX29ha3MzMnIuYwppbmRleCAyODY5NjQ3Li45OTk3ZGRkIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2lvX29ha3MzMnIuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lvX29ha3MzMnIuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgVHlwaWNhbCBJL08gcm91dGluZXMgZm9yIE9BS1MzMlIgYm9hcmQuCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwMS0yMDA0ICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLAorICogIENvcHlyaWdodCAoYykgMjAwMS0yMDA1ICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvLCBNYW1vcnUgU2FrdWdhd2EKICAqLwogCkBAIC05MCwzNSArOTAsMjEgQEAKIAogdW5zaWduZWQgY2hhciBfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIGNoYXIgIHY7Ci0KLQlpZiAocG9ydCA+PSAweDMwMCAmJiBwb3J0IDwgMHgzMjApCi0JCXYgPSBfbmVfaW5iKFBPUlQyQUREUl9ORShwb3J0KSk7Ci0JZWxzZQotCQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUE9SVDJBRERSKHBvcnQpOwotCisJdW5zaWduZWQgY2hhciB2ID0gX2luYihwb3J0KTsKIAlkZWxheSgpOwogCXJldHVybiAodik7CiB9CiAKIHVuc2lnbmVkIHNob3J0IF9pbndfcCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JdW5zaWduZWQgc2hvcnQgIHY7Ci0KLQlpZiAocG9ydCA+PSAweDMwMCAmJiBwb3J0IDwgMHgzMjApCi0JCXYgPSBfbmVfaW53KFBPUlQyQUREUl9ORShwb3J0KSk7Ci0JZWxzZQotCQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBPUlQyQUREUihwb3J0KTsKLQorCXVuc2lnbmVkIHNob3J0IHYgPSBfaW53KHBvcnQpOwogCWRlbGF5KCk7CiAJcmV0dXJuICh2KTsKIH0KIAogdW5zaWduZWQgbG9uZyBfaW5sX3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIGxvbmcgIHY7Ci0KLQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopUE9SVDJBRERSKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgdiA9IF9pbmwocG9ydCk7CiAJZGVsYXkoKTsKIAlyZXR1cm4gKHYpOwogfQpAQCAtMTQ2LDI3ICsxMzIsMTkgQEAKIAogdm9pZCBfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCWlmIChwb3J0ID49IDB4MzAwICYmIHBvcnQgPCAweDMyMCkKLQkJX25lX291dGIoYiwgUE9SVDJBRERSX05FKHBvcnQpKTsKLQllbHNlCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBPUlQyQUREUihwb3J0KSA9IGI7Ci0KKwlfb3V0YihiLCBwb3J0KTsKIAlkZWxheSgpOwogfQogCiB2b2lkIF9vdXR3X3AodW5zaWduZWQgc2hvcnQgdywgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCWlmIChwb3J0ID49IDB4MzAwICYmIHBvcnQgPCAweDMyMCkKLQkJX25lX291dHcodywgUE9SVDJBRERSX05FKHBvcnQpKTsKLQllbHNlCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQT1JUMkFERFIocG9ydCkgPSB3OwotCisJX291dHcodywgcG9ydCk7CiAJZGVsYXkoKTsKIH0KIAogdm9pZCBfb3V0bF9wKHVuc2lnbmVkIGxvbmcgbCwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVBPUlQyQUREUihwb3J0KSA9IGw7CisJX291dGwobCwgcG9ydCk7CiAJZGVsYXkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pb19vcHNwdXQuYyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fb3BzcHV0LmMKaW5kZXggYWFmNDJmOS4uZTM0OTUxZSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pb19vcHNwdXQuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lvX29wc3B1dC5jCkBAIC0xLDEwICsxLDEwIEBACiAvKgotICogIGxpbnV4L2FyY2gvbTMyci9rZXJuZWwvaW9fbWFwcGkuYworICogIGxpbnV4L2FyY2gvbTMyci9rZXJuZWwvaW9fb3BzcHV0LmMKICAqCiAgKiAgVHlwaWNhbCBJL08gcm91dGluZXMgZm9yIE9QU1BVVCBib2FyZC4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0b3NoaSBZYW1hbW90bywgVGFrZW8gVGFrYWhhc2hpCisgKiAgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgIEhpcm95dWtpIEtvbmRvLCBIaXJva2F6dSBUYWthdGEsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdG9zaGkgWWFtYW1vdG8sIFRha2VvIFRha2FoYXNoaQogICoKICAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCiAgKiAgUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCkBAIC05OCw3ICs5OCw2IEBACiB7CiAJaWYgKHBvcnQgPj0gTEFOX0lPU1RBUlQgJiYgcG9ydCA8IExBTl9JT0VORCkKIAkJcmV0dXJuIF9uZV9pbmIoUE9SVDJBRERSX05FKHBvcnQpKTsKLQogI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCiAJZWxzZSBpZiAocG9ydCA+PSBNMzJSX1BDQ19JT1NUQVJUMCAmJiBwb3J0IDw9IE0zMlJfUENDX0lPRU5EMCkgewogCQl1bnNpZ25lZCBjaGFyIGI7CkBAIC0xMTgsNyArMTE3LDYgQEAKIAllbHNlIGlmKHBvcnQgPj0gMHgzNDAgJiYgcG9ydCA8IDB4M2EwKQogCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBPUlQyQUREUl9VU0IocG9ydCk7CiAjZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCiAJZWxzZSBpZiAocG9ydCA+PSBNMzJSX1BDQ19JT1NUQVJUMCAmJiBwb3J0IDw9IE0zMlJfUENDX0lPRU5EMCkgewogCQl1bnNpZ25lZCBzaG9ydCB3OwpAQCAtMTQzLDU1ICsxNDEsMjEgQEAKIAogdW5zaWduZWQgY2hhciBfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIGNoYXIgIHY7Ci0KLQlpZiAocG9ydCA+PSBMQU5fSU9TVEFSVCAmJiBwb3J0IDwgTEFOX0lPRU5EKQotCQl2ID0gX25lX2luYihQT1JUMkFERFJfTkUocG9ydCkpOwotCWVsc2UKLSNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQotCWlmIChwb3J0ID49IE0zMlJfUENDX0lPU1RBUlQwICYmIHBvcnQgPD0gTTMyUl9QQ0NfSU9FTkQwKSB7Ci0JCXVuc2lnbmVkIGNoYXIgYjsKLQkJcGNjX2lvcmVhZF9ieXRlKDAsIHBvcnQsICZiLCBzaXplb2YoYiksIDEsIDApOwotCQlyZXR1cm4gYjsKLQl9IGVsc2UKLSNlbmRpZgotCQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUE9SVDJBRERSKHBvcnQpOwotCisJdW5zaWduZWQgY2hhciB2ID0gX2luYihwb3J0KTsKIAlkZWxheSgpOwogCXJldHVybiAodik7CiB9CiAKIHVuc2lnbmVkIHNob3J0IF9pbndfcCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JdW5zaWduZWQgc2hvcnQgIHY7Ci0KLQlpZiAocG9ydCA+PSBMQU5fSU9TVEFSVCAmJiBwb3J0IDwgTEFOX0lPRU5EKQotCQl2ID0gX25lX2ludyhQT1JUMkFERFJfTkUocG9ydCkpOwotCWVsc2UKLSNpZiBkZWZpbmVkKENPTkZJR19VU0IpCi0JaWYocG9ydCA+PSAweDM0MCAmJiBwb3J0IDwgMHgzYTApCi0JCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUE9SVDJBRERSX1VTQihwb3J0KTsKLQllbHNlCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCi0JaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKLQkJdW5zaWduZWQgc2hvcnQgdzsKLQkJcGNjX2lvcmVhZF93b3JkKDAsIHBvcnQsICZ3LCBzaXplb2YodyksIDEsIDApOwotCQlyZXR1cm4gdzsKLQl9IGVsc2UKLSNlbmRpZgotCQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBPUlQyQUREUihwb3J0KTsKLQorCXVuc2lnbmVkIHNob3J0IHYgPSBfaW53KHBvcnQpOwogCWRlbGF5KCk7CiAJcmV0dXJuICh2KTsKIH0KIAogdW5zaWduZWQgbG9uZyBfaW5sX3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIGxvbmcgIHY7Ci0KLQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopUE9SVDJBRERSKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgdiA9IF9pbmwocG9ydCk7CiAJZGVsYXkoKTsKIAlyZXR1cm4gKHYpOwogfQpAQCAtMjE5LDcgKzE4Myw2IEBACiAJCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQT1JUMkFERFJfVVNCKHBvcnQpID0gdzsKIAllbHNlCiAjZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCiAJaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKIAkJcGNjX2lvd3JpdGVfd29yZCgwLCBwb3J0LCAmdywgc2l6ZW9mKHcpLCAxLCAwKTsKQEAgLTI0MCw0MyArMjAzLDE5IEBACiAKIHZvaWQgX291dGJfcCh1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlpZiAocG9ydCA+PSBMQU5fSU9TVEFSVCAmJiBwb3J0IDwgTEFOX0lPRU5EKQotCQlfbmVfb3V0YihiLCBQT1JUMkFERFJfTkUocG9ydCkpOwotCWVsc2UKLSNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQotCWlmIChwb3J0ID49IE0zMlJfUENDX0lPU1RBUlQwICYmIHBvcnQgPD0gTTMyUl9QQ0NfSU9FTkQwKSB7Ci0JCXBjY19pb3dyaXRlX2J5dGUoMCwgcG9ydCwgJmIsIHNpemVvZihiKSwgMSwgMCk7Ci0JfSBlbHNlCi0jZW5kaWYKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUE9SVDJBRERSKHBvcnQpID0gYjsKLQorCV9vdXRiKGIsIHBvcnQpOwogCWRlbGF5KCk7CiB9CiAKIHZvaWQgX291dHdfcCh1bnNpZ25lZCBzaG9ydCB3LCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JaWYgKHBvcnQgPj0gTEFOX0lPU1RBUlQgJiYgcG9ydCA8IExBTl9JT0VORCkKLQkJX25lX291dHcodywgUE9SVDJBRERSX05FKHBvcnQpKTsKLQllbHNlCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCKQotCWlmKHBvcnQgPj0gMHgzNDAgJiYgcG9ydCA8IDB4M2EwKQotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUE9SVDJBRERSX1VTQihwb3J0KSA9IHc7Ci0JZWxzZQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQotCWlmIChwb3J0ID49IE0zMlJfUENDX0lPU1RBUlQwICYmIHBvcnQgPD0gTTMyUl9QQ0NfSU9FTkQwKSB7Ci0JCXBjY19pb3dyaXRlX3dvcmQoMCwgcG9ydCwgJncsIHNpemVvZih3KSwgMSwgMCk7Ci0JfSBlbHNlCi0jZW5kaWYKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBPUlQyQUREUihwb3J0KSA9IHc7Ci0KKwlfb3V0dyh3LCBwb3J0KTsKIAlkZWxheSgpOwogfQogCiB2b2lkIF9vdXRsX3AodW5zaWduZWQgbG9uZyBsLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopUE9SVDJBRERSKHBvcnQpID0gbDsKKwlfb3V0bChsLCBwb3J0KTsKIAlkZWxheSgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2lvX3VzcnYuYyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fdXNydi5jCmluZGV4IDI3OTI4YTAuLjllYjE2MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaW9fdXNydi5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fdXNydi5jCkBAIC0zLDggKzMsOCBAQAogICoKICAqICBUeXBpY2FsIEkvTyByb3V0aW5lcyBmb3IgdVNlcnZlciBib2FyZC4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAxIC0gMjAwMyAgSGlyb3l1a2kgS29uZG8sIEhpcm9rYXp1IFRha2F0YSwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvLCBUYWtlbyBUYWthaGFzaGkKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSAgSGlyb3l1a2kgS29uZG8sIEhpcm9rYXp1IFRha2F0YSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0b3NoaSBZYW1hbW90bywgVGFrZW8gVGFrYWhhc2hpCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKICAqICBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKQEAgLTM5LDcgKzM5LDcgQEAKIAogI2RlZmluZSBQT1JUMkFERFIocG9ydCkJX3BvcnQyYWRkcihwb3J0KQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkICpfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKIAlpZiAocG9ydCA+PSBVQVJUMF9JT1NUQVJUICYmIHBvcnQgPD0gVUFSVDBfSU9FTkQpCkBAIC01MCw3ICs1MCw3IEBACiAJcmV0dXJuICh2b2lkICopKHBvcnQgKyBOT05DQUNIRV9PRkZTRVQpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRlbGF5KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgZGVsYXkodm9pZCkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInB1c2ggcjA7IFxuXHQgcG9wIHIwOyIgOiA6IDoibWVtb3J5Iik7CiB9CkBAIC04NywzOSArODcsMjIgQEAKIAogdW5zaWduZWQgY2hhciBfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXVuc2lnbmVkIGNoYXIgYjsKLQotCWlmIChwb3J0ID49IENGQ19JT1NUQVJUICYmIHBvcnQgPD0gQ0ZDX0lPRU5EKSB7Ci0JCXBjY19pb3JlYWRfYnl0ZSgwLCBwb3J0LCAmYiwgc2l6ZW9mKGIpLCAxLCAwKTsKLQkJcmV0dXJuIGI7Ci0JfSBlbHNlIHsKLQkJYiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBPUlQyQUREUihwb3J0KTsKLQkJZGVsYXkoKTsKLQkJcmV0dXJuIGI7Ci0JfQorCXVuc2lnbmVkIGNoYXIgdiA9IF9pbmIocG9ydCk7CisJZGVsYXkoKTsKKwlyZXR1cm4gdjsKIH0KIAogdW5zaWduZWQgc2hvcnQgX2lud19wKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQl1bnNpZ25lZCBzaG9ydCB3OwotCi0JaWYgKHBvcnQgPj0gQ0ZDX0lPU1RBUlQgJiYgcG9ydCA8PSBDRkNfSU9FTkQpIHsKLQkJcGNjX2lvcmVhZF93b3JkKDAsIHBvcnQsICZ3LCBzaXplb2YodyksIDEsIDApOwotCQlyZXR1cm4gdzsKLQl9IGVsc2UgewotCQl3ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBPUlQyQUREUihwb3J0KTsKLQkJZGVsYXkoKTsKLQkJcmV0dXJuIHc7Ci0JfQorCXVuc2lnbmVkIHNob3J0IHYgPSBfaW53KHBvcnQpOworCWRlbGF5KCk7CisJcmV0dXJuIHY7CiB9CiAKIHVuc2lnbmVkIGxvbmcgX2lubF9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQl1bnNpZ25lZCBsb25nIHY7Ci0KLQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopUE9SVDJBRERSKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgdiA9IF9pbmwocG9ydCk7CiAJZGVsYXkoKTsKLQogCXJldHVybiB2OwogfQogCkBAIC0xNDksMjUgKzEzMiwxOSBAQAogCiB2b2lkIF9vdXRiX3AodW5zaWduZWQgY2hhciBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JaWYgKHBvcnQgPj0gQ0ZDX0lPU1RBUlQgJiYgcG9ydCA8PSBDRkNfSU9FTkQpCi0JCXBjY19pb3dyaXRlX2J5dGUoMCwgcG9ydCwgJmIsIHNpemVvZihiKSwgMSwgMCk7Ci0JZWxzZQotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQT1JUMkFERFIocG9ydCkgPSBiOworCV9vdXRiKGIsIHBvcnQpOwogCWRlbGF5KCk7CiB9CiAKIHZvaWQgX291dHdfcCh1bnNpZ25lZCBzaG9ydCB3LCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JaWYgKHBvcnQgPj0gQ0ZDX0lPU1RBUlQgJiYgcG9ydCA8PSBDRkNfSU9FTkQpCi0JCXBjY19pb3dyaXRlX3dvcmQoMCwgcG9ydCwgJncsIHNpemVvZih3KSwgMSwgMCk7Ci0JZWxzZQotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUE9SVDJBRERSKHBvcnQpID0gdzsKKwlfb3V0dyh3LCBwb3J0KTsKIAlkZWxheSgpOwogfQogCiB2b2lkIF9vdXRsX3AodW5zaWduZWQgbG9uZyBsLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopUE9SVDJBRERSKHBvcnQpID0gbDsKKwlfb3V0bChsLCBwb3J0KTsKIAlkZWxheSgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwLmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwLmMKaW5kZXggNDgyNmNkNi4uZWM1Njc0NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwLmMKQEAgLTMzMCw2ICszMzAsOCBAQAogCXNlcV9wcmludGYobSwgIk1hY2hpbmVcdFx0OiBNYXBwaSBFdmFsdWF0aW9uIGJvYXJkXG4iKTsKICNlbGlmIENPTkZJR19QTEFUX01BUFBJMgogCXNlcV9wcmludGYobSwgIk1hY2hpbmVcdFx0OiBNYXBwaS1JSSBFdmFsdWF0aW9uIGJvYXJkXG4iKTsKKyNlbGlmIENPTkZJR19QTEFUX01BUFBJMworCXNlcV9wcmludGYobSwgIk1hY2hpbmVcdFx0OiBNYXBwaS1JSUkgRXZhbHVhdGlvbiBib2FyZFxuIik7CiAjZWxpZiAgQ09ORklHX1BMQVRfTTMyNzAwVVQKIAlzZXFfcHJpbnRmKG0sICJNYWNoaW5lXHRcdDogTTMyNzAwVVQgRXZhbHVhdGlvbiBib2FyZFxuIik7CiAjZWxpZiAgQ09ORklHX1BMQVRfT1BTUFVUCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwX20zMjcwMHV0LmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX20zMjcwMHV0LmMKaW5kZXggNDg4YWE4Ny4uYjAxNGUyYyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tMzI3MDB1dC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbTMyNzAwdXQuYwpAQCAtNzgsMTMgKzc4LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgbTMyNzAwdXRfaXJxX3R5cGUgPQogewotCSJNMzI3MDBVVC1JUlEiLAotCXN0YXJ0dXBfbTMyNzAwdXRfaXJxLAotCXNodXRkb3duX20zMjcwMHV0X2lycSwKLQllbmFibGVfbTMyNzAwdXRfaXJxLAotCWRpc2FibGVfbTMyNzAwdXRfaXJxLAotCW1hc2tfYW5kX2Fja19tMzI3MDB1dCwKLQllbmRfbTMyNzAwdXRfaXJxCisJLnR5cGVuYW1lID0gIk0zMjcwMFVULUlSUSIsCisJLnN0YXJ0dXAgPSBzdGFydHVwX20zMjcwMHV0X2lycSwKKwkuc2h1dGRvd24gPSBzaHV0ZG93bl9tMzI3MDB1dF9pcnEsCisJLmVuYWJsZSA9IGVuYWJsZV9tMzI3MDB1dF9pcnEsCisJLmRpc2FibGUgPSBkaXNhYmxlX20zMjcwMHV0X2lycSwKKwkuYWNrID0gbWFza19hbmRfYWNrX20zMjcwMHV0LAorCS5lbmQgPSBlbmRfbTMyNzAwdXRfaXJxCiB9OwogCiAvKgpAQCAtMTU1LDEzICsxNTUsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBtMzI3MDB1dF9wbGRfaXJxX3R5cGUgPQogewotCSJNMzI3MDBVVC1QTEQtSVJRIiwKLQlzdGFydHVwX20zMjcwMHV0X3BsZF9pcnEsCi0Jc2h1dGRvd25fbTMyNzAwdXRfcGxkX2lycSwKLQllbmFibGVfbTMyNzAwdXRfcGxkX2lycSwKLQlkaXNhYmxlX20zMjcwMHV0X3BsZF9pcnEsCi0JbWFza19hbmRfYWNrX20zMjcwMHV0X3BsZCwKLQllbmRfbTMyNzAwdXRfcGxkX2lycQorCS50eXBlbmFtZSA9ICJNMzI3MDBVVC1QTEQtSVJRIiwKKwkuc3RhcnR1cCA9IHN0YXJ0dXBfbTMyNzAwdXRfcGxkX2lycSwKKwkuc2h1dGRvd24gPSBzaHV0ZG93bl9tMzI3MDB1dF9wbGRfaXJxLAorCS5lbmFibGUgPSBlbmFibGVfbTMyNzAwdXRfcGxkX2lycSwKKwkuZGlzYWJsZSA9IGRpc2FibGVfbTMyNzAwdXRfcGxkX2lycSwKKwkuYWNrID0gbWFza19hbmRfYWNrX20zMjcwMHV0X3BsZCwKKwkuZW5kID0gZW5kX20zMjcwMHV0X3BsZF9pcnEKIH07CiAKIC8qCkBAIC0yMjQsMTMgKzIyNCwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIG0zMjcwMHV0X2xhbnBsZF9pcnFfdHlwZSA9CiB7Ci0JIk0zMjcwMFVULVBMRC1MQU4tSVJRIiwKLQlzdGFydHVwX20zMjcwMHV0X2xhbnBsZF9pcnEsCi0Jc2h1dGRvd25fbTMyNzAwdXRfbGFucGxkX2lycSwKLQllbmFibGVfbTMyNzAwdXRfbGFucGxkX2lycSwKLQlkaXNhYmxlX20zMjcwMHV0X2xhbnBsZF9pcnEsCi0JbWFza19hbmRfYWNrX20zMjcwMHV0X2xhbnBsZCwKLQllbmRfbTMyNzAwdXRfbGFucGxkX2lycQorCS50eXBlbmFtZSA9ICJNMzI3MDBVVC1QTEQtTEFOLUlSUSIsCisJLnN0YXJ0dXAgPSBzdGFydHVwX20zMjcwMHV0X2xhbnBsZF9pcnEsCisJLnNodXRkb3duID0gc2h1dGRvd25fbTMyNzAwdXRfbGFucGxkX2lycSwKKwkuZW5hYmxlID0gZW5hYmxlX20zMjcwMHV0X2xhbnBsZF9pcnEsCisJLmRpc2FibGUgPSBkaXNhYmxlX20zMjcwMHV0X2xhbnBsZF9pcnEsCisJLmFjayA9IG1hc2tfYW5kX2Fja19tMzI3MDB1dF9sYW5wbGQsCisJLmVuZCA9IGVuZF9tMzI3MDB1dF9sYW5wbGRfaXJxCiB9OwogCiAvKgpAQCAtMjkzLDEzICsyOTMsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBtMzI3MDB1dF9sY2RwbGRfaXJxX3R5cGUgPQogewotCSJNMzI3MDBVVC1QTEQtTENELUlSUSIsCi0Jc3RhcnR1cF9tMzI3MDB1dF9sY2RwbGRfaXJxLAotCXNodXRkb3duX20zMjcwMHV0X2xjZHBsZF9pcnEsCi0JZW5hYmxlX20zMjcwMHV0X2xjZHBsZF9pcnEsCi0JZGlzYWJsZV9tMzI3MDB1dF9sY2RwbGRfaXJxLAotCW1hc2tfYW5kX2Fja19tMzI3MDB1dF9sY2RwbGQsCi0JZW5kX20zMjcwMHV0X2xjZHBsZF9pcnEKKwkudHlwZW5hbWUgPSAiTTMyNzAwVVQtUExELUxDRC1JUlEiLAorCS5zdGFydHVwID0gc3RhcnR1cF9tMzI3MDB1dF9sY2RwbGRfaXJxLAorCS5zaHV0ZG93biA9IHNodXRkb3duX20zMjcwMHV0X2xjZHBsZF9pcnEsCisJLmVuYWJsZSA9IGVuYWJsZV9tMzI3MDB1dF9sY2RwbGRfaXJxLAorCS5kaXNhYmxlID0gZGlzYWJsZV9tMzI3MDB1dF9sY2RwbGRfaXJxLAorCS5hY2sgPSBtYXNrX2FuZF9hY2tfbTMyNzAwdXRfbGNkcGxkLAorCS5lbmQgPSBlbmRfbTMyNzAwdXRfbGNkcGxkX2lycQogfTsKIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkuYwppbmRleCAxZTc0MTEwLi5hYWY4ZTU2IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaS5jCkBAIC03MCwxMyArNzAsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBtYXBwaV9pcnFfdHlwZSA9CiB7Ci0JIk1BUFBJLUlSUSIsCi0Jc3RhcnR1cF9tYXBwaV9pcnEsCi0Jc2h1dGRvd25fbWFwcGlfaXJxLAotCWVuYWJsZV9tYXBwaV9pcnEsCi0JZGlzYWJsZV9tYXBwaV9pcnEsCi0JbWFza19hbmRfYWNrX21hcHBpLAotCWVuZF9tYXBwaV9pcnEKKwkudHlwZW5hbWUgPSAiTUFQUEktSVJRIiwKKwkuc3RhcnR1cCA9IHN0YXJ0dXBfbWFwcGlfaXJxLAorCS5zaHV0ZG93biA9IHNodXRkb3duX21hcHBpX2lycSwKKwkuZW5hYmxlID0gZW5hYmxlX21hcHBpX2lycSwKKwkuZGlzYWJsZSA9IGRpc2FibGVfbWFwcGlfaXJxLAorCS5hY2sgPSBtYXNrX2FuZF9hY2tfbWFwcGksCisJLmVuZCA9IGVuZF9tYXBwaV9pcnEKIH07CiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpMi5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaTIuYwppbmRleCAxOTA0ZDQ2Li4zOGQ1ZTlhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpMi5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogIGxpbnV4L2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkuYworICogIGxpbnV4L2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkyLmMKICAqCiAgKiAgU2V0dXAgcm91dGluZXMgZm9yIFJlbmVzYXMgTUFQUEktSUkoTTNBLVpBMzYpIEJvYXJkCiAgKgpAQCAtNzksMTMgKzc5LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgbWFwcGkyX2lycV90eXBlID0KIHsKLQkiTUFQUEkyLUlSUSIsCi0Jc3RhcnR1cF9tYXBwaTJfaXJxLAotCXNodXRkb3duX21hcHBpMl9pcnEsCi0JZW5hYmxlX21hcHBpMl9pcnEsCi0JZGlzYWJsZV9tYXBwaTJfaXJxLAotCW1hc2tfYW5kX2Fja19tYXBwaTIsCi0JZW5kX21hcHBpMl9pcnEKKwkudHlwZW5hbWUgPSAiTUFQUEkyLUlSUSIsCisJLnN0YXJ0dXAgPSBzdGFydHVwX21hcHBpMl9pcnEsCisJLnNodXRkb3duID0gc2h1dGRvd25fbWFwcGkyX2lycSwKKwkuZW5hYmxlID0gZW5hYmxlX21hcHBpMl9pcnEsCisJLmRpc2FibGUgPSBkaXNhYmxlX21hcHBpMl9pcnEsCisJLmFjayA9IG1hc2tfYW5kX2Fja19tYXBwaTIsCisJLmVuZCA9IGVuZF9tYXBwaTJfaXJxCiB9OwogCiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQpAQCAtMTU2LDcgKzE1Niw2IEBACiAJaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmhhbmRsZXIgPSAmbWFwcGkyX2lycV90eXBlOwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLwotLy8JaWN1X2RhdGFbUExEX0lSUV9DRklSRVFdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDAwOwogCWljdV9kYXRhW1BMRF9JUlFfQ0ZJUkVRXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QwMTsKIAlkaXNhYmxlX21hcHBpMl9pcnEoUExEX0lSUV9DRklSRVEpOwogCkBAIC0xNjcsNyArMTY2LDYgQEAKIAlpcnFfZGVzY1tQTERfSVJRX0NGQ19JTlNFUlRdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLwogCWljdV9kYXRhW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTnxNMzJSX0lDVUNSX0lTTU9EMDA7Ci0vLwlpY3VfZGF0YVtQTERfSVJRX0NGQ19JTlNFUlRdLmljdWNyID0gMDsKIAlkaXNhYmxlX21hcHBpMl9pcnEoUExEX0lSUV9DRkNfSU5TRVJUKTsKIAogCS8qIElDVUNSNDI6IENGQyBFamVjdCAqLwpAQCAtMTc2LDkgKzE3NCw3IEBACiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCiAJaWN1X2RhdGFbUExEX0lSUV9DRkNfRUpFQ1RdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDEwOwotLy8JaWN1X2RhdGFbUExEX0lSUV9DRkNfRUpFQ1RdLmljdWNyID0gMDsKIAlkaXNhYmxlX21hcHBpMl9pcnEoUExEX0lSUV9DRkNfRUpFQ1QpOwotCiAjZW5kaWYgLyogQ09ORklHX01BUFBJMl9DRkMgKi8KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaTMuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q2MGE4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkzLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiAgbGludXgvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaTMuYworICoKKyAqICBTZXR1cCByb3V0aW5lcyBmb3IgUmVuZXNhcyBNQVBQSS1JSUkoTTNBLTIxNzApIEJvYXJkCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMS0yMDA1ICAgSGlyb3l1a2kgS29uZG8sIEhpcm9rYXp1IFRha2F0YSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdG9zaGkgWWFtYW1vdG8sIE1hbW9ydSBTYWt1Z2F3YQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL20zMnIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBpcnEycG9ydCh4KSAoTTMyUl9JQ1VfQ1IxX1BPUlRMICsgKCh4IC0gMSkgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKQorCisjaWZuZGVmIENPTkZJR19TTVAKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGljdWNyOyAgLyogSUNVIENvbnRyb2wgUmVnaXN0ZXIgKi8KK30gaWN1X2RhdGFfdDsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK2ljdV9kYXRhX3QgaWN1X2RhdGFbTlJfSVJRU107CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfbWFwcGkzX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgcG9ydCwgZGF0YTsKKworCWlmICgoaXJxID09IDApIHx8KGlycSA+PSBOUl9JUlFTKSkgIHsKKwkJcHJpbnRrKCJiYWQgaXJxIDB4JTA4eFxuIiwgaXJxKTsKKwkJcmV0dXJuOworCX0KKwlwb3J0ID0gaXJxMnBvcnQoaXJxKTsKKwlkYXRhID0gaWN1X2RhdGFbaXJxXS5pY3VjcnxNMzJSX0lDVUNSX0lMRVZFTDc7CisJb3V0bChkYXRhLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX21hcHBpM19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIHBvcnQsIGRhdGE7CisKKwlpZiAoKGlycSA9PSAwKSB8fChpcnEgPj0gTlJfSVJRUykpICB7CisJCXByaW50aygiYmFkIGlycSAweCUwOHhcbiIsIGlycSk7CisJCXJldHVybjsKKwl9CisJcG9ydCA9IGlycTJwb3J0KGlycSk7CisJZGF0YSA9IGljdV9kYXRhW2lycV0uaWN1Y3J8TTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JTEVWRUw2OworCW91dGwoZGF0YSwgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19tYXBwaTModW5zaWduZWQgaW50IGlycSkKK3sKKwlkaXNhYmxlX21hcHBpM19pcnEoaXJxKTsKK30KKworc3RhdGljIHZvaWQgZW5kX21hcHBpM19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwllbmFibGVfbWFwcGkzX2lycShpcnEpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfbWFwcGkzX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWVuYWJsZV9tYXBwaTNfaXJxKGlycSk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQgc2h1dGRvd25fbWFwcGkzX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgcG9ydDsKKworCXBvcnQgPSBpcnEycG9ydChpcnEpOworCW91dGwoTTMyUl9JQ1VDUl9JTEVWRUw3LCBwb3J0KTsKK30KKworc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBtYXBwaTNfaXJxX3R5cGUgPQoreworCS50eXBlbmFtZSA9ICJNQVBQSTMtSVJRIiwKKwkuc3RhcnR1cCA9IHN0YXJ0dXBfbWFwcGkzX2lycSwKKwkuc2h1dGRvd24gPSBzaHV0ZG93bl9tYXBwaTNfaXJxLAorCS5lbmFibGUgPSBlbmFibGVfbWFwcGkzX2lycSwKKwkuZGlzYWJsZSA9IGRpc2FibGVfbWFwcGkzX2lycSwKKwkuYWNrID0gbWFza19hbmRfYWNrX21hcHBpMywKKwkuZW5kID0gZW5kX21hcHBpM19pcnEKK307CisKK3ZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKQorCS8qIElOVDAgOiBMQU4gY29udHJvbGxlciAoU01DOTExMTEpICovCisJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOworCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmhhbmRsZXIgPSAmbWFwcGkzX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmFjdGlvbiA9IDA7CisJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uZGVwdGggPSAxOworCWljdV9kYXRhW00zMlJfSVJRX0lOVDBdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDEwOworCWRpc2FibGVfbWFwcGkzX2lycShNMzJSX0lSUV9JTlQwKTsKKyNlbmRpZiAgLyogQ09ORklHX1NNQzkxWCAqLworCisJLyogTUZUMiA6IHN5c3RlbSB0aW1lciAqLworCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5oYW5kbGVyID0gJm1hcHBpM19pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5hY3Rpb24gPSAwOworCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmRlcHRoID0gMTsKKwlpY3VfZGF0YVtNMzJSX0lSUV9NRlQyXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOOworCWRpc2FibGVfbWFwcGkzX2lycShNMzJSX0lSUV9NRlQyKTsKKworI2lmZGVmIENPTkZJR19TRVJJQUxfTTMyUl9TSU8KKwkvKiBTSU8wX1IgOiB1YXJ0IHJlY2VpdmUgZGF0YSAqLworCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uaGFuZGxlciA9ICZtYXBwaTNfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5hY3Rpb24gPSAwOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uZGVwdGggPSAxOworCWljdV9kYXRhW00zMlJfSVJRX1NJTzBfUl0uaWN1Y3IgPSAwOworCWRpc2FibGVfbWFwcGkzX2lycShNMzJSX0lSUV9TSU8wX1IpOworCisJLyogU0lPMF9TIDogdWFydCBzZW5kIGRhdGEgKi8KKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmhhbmRsZXIgPSAmbWFwcGkzX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uYWN0aW9uID0gMDsKKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmRlcHRoID0gMTsKKwlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1NdLmljdWNyID0gMDsKKwlkaXNhYmxlX21hcHBpM19pcnEoTTMyUl9JUlFfU0lPMF9TKTsKKwkvKiBTSU8xX1IgOiB1YXJ0IHJlY2VpdmUgZGF0YSAqLworCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uaGFuZGxlciA9ICZtYXBwaTNfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5hY3Rpb24gPSAwOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uZGVwdGggPSAxOworCWljdV9kYXRhW00zMlJfSVJRX1NJTzFfUl0uaWN1Y3IgPSAwOworCWRpc2FibGVfbWFwcGkzX2lycShNMzJSX0lSUV9TSU8xX1IpOworCisJLyogU0lPMV9TIDogdWFydCBzZW5kIGRhdGEgKi8KKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmhhbmRsZXIgPSAmbWFwcGkzX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uYWN0aW9uID0gMDsKKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmRlcHRoID0gMTsKKwlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1NdLmljdWNyID0gMDsKKwlkaXNhYmxlX21hcHBpM19pcnEoTTMyUl9JUlFfU0lPMV9TKTsKKyNlbmRpZiAgLyogQ09ORklHX00zMlJfVVNFX0RCR19DT05TT0xFICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0IpCisJLyogSU5UMSA6IFVTQiBIb3N0IGNvbnRyb2xsZXIgaW50ZXJydXB0ICovCisJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOworCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLmhhbmRsZXIgPSAmbWFwcGkzX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLmFjdGlvbiA9IDA7CisJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMV0uZGVwdGggPSAxOworCWljdV9kYXRhW00zMlJfSVJRX0lOVDFdLmljdWNyID0gTTMyUl9JQ1VDUl9JU01PRDAxOworCWRpc2FibGVfbWFwcGkzX2lycShNMzJSX0lSUV9JTlQxKTsKKyNlbmRpZiAvKiBDT05GSUdfVVNCICovCisKKwkvKiBJQ1VDUjQwOiBDRkMgSVJFUSAqLworCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CisJaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmhhbmRsZXIgPSAmbWFwcGkzX2lycV90eXBlOworCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5hY3Rpb24gPSAwOworCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLworCWljdV9kYXRhW1BMRF9JUlFfQ0ZJUkVRXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QwMTsKKwlkaXNhYmxlX21hcHBpM19pcnEoUExEX0lSUV9DRklSRVEpOworCisjaWYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJLyogSUNVQ1I0MTogQ0ZDIEluc2VydCAqLworCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOworCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uaGFuZGxlciA9ICZtYXBwaTNfaXJxX3R5cGU7CisJaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5hY3Rpb24gPSAwOworCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KKwlpY3VfZGF0YVtQTERfSVJRX0NGQ19JTlNFUlRdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDAwOworCWRpc2FibGVfbWFwcGkzX2lycShQTERfSVJRX0NGQ19JTlNFUlQpOworCisJLyogSUNVQ1I0MjogQ0ZDIEVqZWN0ICovCisJaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwlpcnFfZGVzY1tQTERfSVJRX0NGQ19FSkVDVF0uaGFuZGxlciA9ICZtYXBwaTNfaXJxX3R5cGU7CisJaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmFjdGlvbiA9IDA7CisJaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCisJaWN1X2RhdGFbUExEX0lSUV9DRkNfRUpFQ1RdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDEwOworCWRpc2FibGVfbWFwcGkzX2lycShQTERfSVJRX0NGQ19FSkVDVCk7CisjZW5kaWYgLyogQ09ORklHX00zMlJfQ0ZDICovCit9CisKKyNkZWZpbmUgTEFOX0lPU1RBUlQgICAgIDB4MzAwCisjZGVmaW5lIExBTl9JT0VORCAgICAgICAweDMyMAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgID0gKExBTl9JT1NUQVJUKSwKKwkJLmVuZCAgICA9IChMQU5fSU9FTkQpLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSBNMzJSX0lSUV9JTlQwLAorCQkuZW5kICAgID0gTTMyUl9JUlFfSU5UMCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSBzbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdGZvcm1faW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21jOTF4X2RldmljZSk7CisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHBsYXRmb3JtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9vYWtzMzJyLmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX29ha3MzMnIuYwppbmRleCBiMDQ4MzQ1Li5kNjU2NjQwIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX29ha3MzMnIuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX29ha3MzMnIuYwpAQCAtNzAsMTMgKzcwLDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgb2FrczMycl9pcnFfdHlwZSA9CiB7Ci0JIk9BS1MzMlItSVJRIiwKLQlzdGFydHVwX29ha3MzMnJfaXJxLAotCXNodXRkb3duX29ha3MzMnJfaXJxLAotCWVuYWJsZV9vYWtzMzJyX2lycSwKLQlkaXNhYmxlX29ha3MzMnJfaXJxLAotCW1hc2tfYW5kX2Fja19tYXBwaSwKLQllbmRfb2FrczMycl9pcnEKKwkudHlwZW5hbWUgPSAiT0FLUzMyUi1JUlEiLAorCS5zdGFydHVwID0gc3RhcnR1cF9vYWtzMzJyX2lycSwKKwkuc2h1dGRvd24gPSBzaHV0ZG93bl9vYWtzMzJyX2lycSwKKwkuZW5hYmxlID0gZW5hYmxlX29ha3MzMnJfaXJxLAorCS5kaXNhYmxlID0gZGlzYWJsZV9vYWtzMzJyX2lycSwKKwkuYWNrID0gbWFza19hbmRfYWNrX21hcHBpLAorCS5lbmQgPSBlbmRfb2FrczMycl9pcnEKIH07CiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwX29wc3B1dC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9vcHNwdXQuYwppbmRleCA4NDMxNWUzLi44NmY0Y2YyIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX29wc3B1dC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfb3BzcHV0LmMKQEAgLTc5LDEzICs3OSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIG9wc3B1dF9pcnFfdHlwZSA9CiB7Ci0JIk9QU1BVVC1JUlEiLAotCXN0YXJ0dXBfb3BzcHV0X2lycSwKLQlzaHV0ZG93bl9vcHNwdXRfaXJxLAotCWVuYWJsZV9vcHNwdXRfaXJxLAotCWRpc2FibGVfb3BzcHV0X2lycSwKLQltYXNrX2FuZF9hY2tfb3BzcHV0LAotCWVuZF9vcHNwdXRfaXJxCisJLnR5cGVuYW1lID0gIk9QU1BVVC1JUlEiLAorCS5zdGFydHVwID0gc3RhcnR1cF9vcHNwdXRfaXJxLAorCS5zaHV0ZG93biA9IHNodXRkb3duX29wc3B1dF9pcnEsCisJLmVuYWJsZSA9IGVuYWJsZV9vcHNwdXRfaXJxLAorCS5kaXNhYmxlID0gZGlzYWJsZV9vcHNwdXRfaXJxLAorCS5hY2sgPSBtYXNrX2FuZF9hY2tfb3BzcHV0LAorCS5lbmQgPSBlbmRfb3BzcHV0X2lycQogfTsKIAogLyoKQEAgLTE1NiwxMyArMTU2LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgb3BzcHV0X3BsZF9pcnFfdHlwZSA9CiB7Ci0JIk9QU1BVVC1QTEQtSVJRIiwKLQlzdGFydHVwX29wc3B1dF9wbGRfaXJxLAotCXNodXRkb3duX29wc3B1dF9wbGRfaXJxLAotCWVuYWJsZV9vcHNwdXRfcGxkX2lycSwKLQlkaXNhYmxlX29wc3B1dF9wbGRfaXJxLAotCW1hc2tfYW5kX2Fja19vcHNwdXRfcGxkLAotCWVuZF9vcHNwdXRfcGxkX2lycQorCS50eXBlbmFtZSA9ICJPUFNQVVQtUExELUlSUSIsCisJLnN0YXJ0dXAgPSBzdGFydHVwX29wc3B1dF9wbGRfaXJxLAorCS5zaHV0ZG93biA9IHNodXRkb3duX29wc3B1dF9wbGRfaXJxLAorCS5lbmFibGUgPSBlbmFibGVfb3BzcHV0X3BsZF9pcnEsCisJLmRpc2FibGUgPSBkaXNhYmxlX29wc3B1dF9wbGRfaXJxLAorCS5hY2sgPSBtYXNrX2FuZF9hY2tfb3BzcHV0X3BsZCwKKwkuZW5kID0gZW5kX29wc3B1dF9wbGRfaXJxCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF91c3J2LmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX3VzcnYuYwppbmRleCBmZTQxN2JlLi42MzQ3NDFiIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX3VzcnYuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX3VzcnYuYwpAQCAtNzAsMTMgKzcwLDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgbWFwcGlfaXJxX3R5cGUgPQogewotCSJNMzI3MDAtSVJRIiwKLQlzdGFydHVwX21hcHBpX2lycSwKLQlzaHV0ZG93bl9tYXBwaV9pcnEsCi0JZW5hYmxlX21hcHBpX2lycSwKLQlkaXNhYmxlX21hcHBpX2lycSwKLQltYXNrX2FuZF9hY2tfbWFwcGksCi0JZW5kX21hcHBpX2lycQorCS50eXBlbmFtZSA9ICJNMzI3MDAtSVJRIiwKKwkuc3RhcnR1cCA9IHN0YXJ0dXBfbWFwcGlfaXJxLAorCS5zaHV0ZG93biA9IHNodXRkb3duX21hcHBpX2lycSwKKwkuZW5hYmxlID0gZW5hYmxlX21hcHBpX2lycSwKKwkuZGlzYWJsZSA9IGRpc2FibGVfbWFwcGlfaXJxLAorCS5hY2sgPSBtYXNrX2FuZF9hY2tfbWFwcGksCisJLmVuZCA9IGVuZF9tYXBwaV9pcnEKIH07CiAKIC8qCkBAIC0xNDMsMTMgKzE0MywxMyBAQAogCiBzdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIG0zMjcwMHV0X3BsZF9pcnFfdHlwZSA9CiB7Ci0JIlVTUlYtUExELUlSUSIsCi0Jc3RhcnR1cF9tMzI3MDB1dF9wbGRfaXJxLAotCXNodXRkb3duX20zMjcwMHV0X3BsZF9pcnEsCi0JZW5hYmxlX20zMjcwMHV0X3BsZF9pcnEsCi0JZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxLAotCW1hc2tfYW5kX2Fja19tMzI3MDB1dF9wbGQsCi0JZW5kX20zMjcwMHV0X3BsZF9pcnEKKwkudHlwZW5hbWUgPSAiVVNSVi1QTEQtSVJRIiwKKwkuc3RhcnR1cCA9IHN0YXJ0dXBfbTMyNzAwdXRfcGxkX2lycSwKKwkuc2h1dGRvd24gPSBzaHV0ZG93bl9tMzI3MDB1dF9wbGRfaXJxLAorCS5lbmFibGUgPSBlbmFibGVfbTMyNzAwdXRfcGxkX2lycSwKKwkuZGlzYWJsZSA9IGRpc2FibGVfbTMyNzAwdXRfcGxkX2lycSwKKwkuYWNrID0gbWFza19hbmRfYWNrX20zMjcwMHV0X3BsZCwKKwkuZW5kID0gZW5kX20zMjcwMHV0X3BsZF9pcnEKIH07CiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbTMyNzAwdXQvZGVmY29uZmlnLm0zMjcwMHV0LnNtcCBiL2FyY2gvbTMyci9tMzI3MDB1dC9kZWZjb25maWcubTMyNzAwdXQuc21wCmluZGV4IDFjMDAyMTguLjNlNjA3ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tMzI3MDB1dC9kZWZjb25maWcubTMyNzAwdXQuc21wCisrKyBiL2FyY2gvbTMyci9tMzI3MDB1dC9kZWZjb25maWcubTMyNzAwdXQuc21wCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjExLXJjNAotIyBXZWQgRmViIDE2IDIxOjEwOjUwIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzUKKyMgRnJpIEp1biAgMyAxNjoyMDo1OCAyMDA1CiAjCiBDT05GSUdfTTMyUj15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CkBAIC0xNSw2ICsxNSw3IEBACiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMjcsMTMgKzI4LDE2IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC00Myw2ICs0Nyw3IEBACiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC02NSw2ICs3MCw3IEBACiAjIENPTkZJR19QTEFUX09QU1BVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTEFUX09BS1MzMlIgaXMgbm90IHNldAogIyBDT05GSUdfUExBVF9NQVBQSTIgaXMgbm90IHNldAorIyBDT05GSUdfUExBVF9NQVBQSTMgaXMgbm90IHNldAogQ09ORklHX0NISVBfTTMyNzAwPXkKICMgQ09ORklHX0NISVBfTTMyMTAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NISVBfVkRFQzIgaXMgbm90IHNldApAQCAtMjcxLDcgKzI3Nyw2IEBACiAjCiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtMzk2LDE4ICs0MDEsNiBAQAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotCi0jCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDEwLDE3IEBACiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CisjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CkBAIC00NjgsNiArNDcyLDEwIEBACiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBUUE0gZGV2aWNlcworIworCisjCiAjIEkyQyBzdXBwb3J0CiAjCiAjIENPTkZJR19JMkMgaXMgbm90IHNldApAQCAtNTExLDggKzUxOSwxNCBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiBDT05GSUdfRkI9eQorIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NPRlRfQ1VSU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTU0NiwxMCArNTYwLDYgQEAKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLQotIwogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtNzIyLDggKzczMiw5IEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tMzI3MDB1dC9kZWZjb25maWcubTMyNzAwdXQudXAgYi9hcmNoL20zMnIvbTMyNzAwdXQvZGVmY29uZmlnLm0zMjcwMHV0LnVwCmluZGV4IDgwNTM1N2YuLjJkM2U3Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tMzI3MDB1dC9kZWZjb25maWcubTMyNzAwdXQudXAKKysrIGIvYXJjaC9tMzJyL20zMjcwMHV0L2RlZmNvbmZpZy5tMzI3MDB1dC51cApAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMS1yYzQKLSMgV2VkIEZlYiAxNiAyMToxMDo1NCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmM1CisjIEZyaSBKdW4gIDMgMTY6MjE6MzQgMjAwNQogIwogQ09ORklHX00zMlI9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldApAQCAtMTYsNiArMTYsNyBAQAogQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0yOCwxMyArMjksMTUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiAjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC00NCw2ICs0Nyw3IEBACiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC02NSw2ICs2OSw3IEBACiAjIENPTkZJR19QTEFUX09QU1BVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTEFUX09BS1MzMlIgaXMgbm90IHNldAogIyBDT05GSUdfUExBVF9NQVBQSTIgaXMgbm90IHNldAorIyBDT05GSUdfUExBVF9NQVBQSTMgaXMgbm90IHNldAogQ09ORklHX0NISVBfTTMyNzAwPXkKICMgQ09ORklHX0NISVBfTTMyMTAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NISVBfVkRFQzIgaXMgbm90IHNldApAQCAtMjY4LDcgKzI3Myw2IEBACiAjCiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtMzkzLDE4ICszOTcsNiBAQAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotCi0jCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CkBAIC00MTQsNiArNDA2LDE3IEBACiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CisjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CkBAIC00NjUsNiArNDY4LDEwIEBACiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBUUE0gZGV2aWNlcworIworCisjCiAjIEkyQyBzdXBwb3J0CiAjCiAjIENPTkZJR19JMkMgaXMgbm90IHNldApAQCAtNTA4LDggKzUxNSwxNCBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiBDT05GSUdfRkI9eQorIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NPRlRfQ1VSU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTU0MywxMCArNTU2LDYgQEAKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLQotIwogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtNzE5LDggKzcyOCw5IEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tYXBwaS9kZWZjb25maWcubm9tbXUgYi9hcmNoL20zMnIvbWFwcGkvZGVmY29uZmlnLm5vbW11CmluZGV4IDcxNGFhNmUuLmE4NDI1ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tYXBwaS9kZWZjb25maWcubm9tbXUKKysrIGIvYXJjaC9tMzJyL21hcHBpL2RlZmNvbmZpZy5ub21tdQpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMS1yYzQKLSMgV2VkIEZlYiAxNiAyMToxMDo1NyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmM1CisjIEZyaSBKdW4gIDMgMTY6MjE6NDYgMjAwNQogIwogQ09ORklHX00zMlI9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldApAQCAtMTYsNiArMTYsNyBAQAogQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0yNiwxMyArMjcsMTUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiAjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC00MSw2ICs0NCw3IEBACiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19USU5ZX1NITUVNPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtNjIsNiArNjYsNyBAQAogIyBDT05GSUdfUExBVF9PUFNQVVQgaXMgbm90IHNldAogIyBDT05GSUdfUExBVF9PQUtTMzJSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BMQVRfTUFQUEkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMQVRfTUFQUEkzIGlzIG5vdCBzZXQKIENPTkZJR19DSElQX00zMjcwMD15CiAjIENPTkZJR19DSElQX00zMjEwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSElQX1ZERUMyIGlzIG5vdCBzZXQKQEAgLTIwMiw3ICsyMDcsNiBAQAogIwogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTMyNSwxOCArMzI5LDYgQEAKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwotIyBJbnB1dCBJL08gZHJpdmVycwotIwotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLQotIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldApAQCAtMzQ2LDYgKzMzOCwxNyBAQAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC0zOTQsNiArMzk3LDEwIEBACiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBUUE0gZGV2aWNlcworIworCisjCiAjIEkyQyBzdXBwb3J0CiAjCiAjIENPTkZJR19JMkMgaXMgbm90IHNldApAQCAtNDM0LDEwICs0NDEsNiBAQAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotCi0jCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC01OTUsOCArNTk4LDkgQEAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21hcHBpL2RlZmNvbmZpZy5zbXAgYi9hcmNoL20zMnIvbWFwcGkvZGVmY29uZmlnLnNtcAppbmRleCA5NTZhOGUyLi4xYTdmM2NkIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbWFwcGkvZGVmY29uZmlnLnNtcAorKysgYi9hcmNoL20zMnIvbWFwcGkvZGVmY29uZmlnLnNtcApAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMS1yYzQKLSMgV2VkIEZlYiAxNiAyMToxMTowMiAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmM1CisjIEZyaSBKdW4gIDMgMTY6MjE6NTIgMjAwNQogIwogQ09ORklHX00zMlI9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldApAQCAtMTcsNiArMTcsNyBAQAogQ09ORklHX0JST0tFTj15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTI4LDEzICsyOSwxNiBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE1CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKKyMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfQkFTRV9GVUxMPXkKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTQ0LDYgKzQ4LDcgQEAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTY2LDYgKzcxLDcgQEAKICMgQ09ORklHX1BMQVRfT1BTUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BMQVRfT0FLUzMyUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTEFUX01BUFBJMiBpcyBub3Qgc2V0CisjIENPTkZJR19QTEFUX01BUFBJMyBpcyBub3Qgc2V0CiBDT05GSUdfQ0hJUF9NMzI3MDA9eQogIyBDT05GSUdfQ0hJUF9NMzIxMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ0hJUF9WREVDMiBpcyBub3Qgc2V0CkBAIC0xMzksOCArMTQ1LDggQEAKICMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldApAQCAtMjk0LDcgKzMwMCw2IEBACiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwogIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNDIwLDE4ICs0MjUsNiBAQAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0KLSMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKQEAgLTQ0MSw2ICs0MzQsMTcgQEAKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC00ODksNiArNDkzLDEwIEBACiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBUUE0gZGV2aWNlcworIworCisjCiAjIEkyQyBzdXBwb3J0CiAjCiAjIENPTkZJR19JMkMgaXMgbm90IHNldApAQCAtNTI5LDEwICs1MzcsNiBAQAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotCi0jCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC03MDgsOCArNzEyLDkgQEAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNQogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21hcHBpL2RlZmNvbmZpZy51cCBiL2FyY2gvbTMyci9tYXBwaS9kZWZjb25maWcudXAKaW5kZXggYzkyNTNlOS4uMzg5MTBmYiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21hcHBpL2RlZmNvbmZpZy51cAorKysgYi9hcmNoL20zMnIvbWFwcGkvZGVmY29uZmlnLnVwCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjExLXJjNAotIyBXZWQgRmViIDE2IDIxOjExOjA3IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzUKKyMgRnJpIEp1biAgMyAxNjoyMTo1OSAyMDA1CiAjCiBDT05GSUdfTTMyUj15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CkBAIC0xNyw2ICsxNyw3IEBACiBDT05GSUdfQlJPS0VOPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMjgsMTMgKzI5LDE1IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfQkFTRV9GVUxMPXkKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTQ0LDYgKzQ3LDcgQEAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTY1LDYgKzY5LDcgQEAKICMgQ09ORklHX1BMQVRfT1BTUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BMQVRfT0FLUzMyUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTEFUX01BUFBJMiBpcyBub3Qgc2V0CisjIENPTkZJR19QTEFUX01BUFBJMyBpcyBub3Qgc2V0CiBDT05GSUdfQ0hJUF9NMzI3MDA9eQogIyBDT05GSUdfQ0hJUF9NMzIxMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ0hJUF9WREVDMiBpcyBub3Qgc2V0CkBAIC0xMzUsOCArMTQwLDggQEAKICMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldApAQCAtMjkwLDcgKzI5NSw2IEBACiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwogIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNDE2LDE4ICs0MjAsNiBAQAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0KLSMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKQEAgLTQzNyw2ICs0MjksMTcgQEAKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC00ODUsNiArNDg4LDEwIEBACiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBUUE0gZGV2aWNlcworIworCisjCiAjIEkyQyBzdXBwb3J0CiAjCiAjIENPTkZJR19JMkMgaXMgbm90IHNldApAQCAtNTI1LDEwICs1MzIsNiBAQAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotCi0jCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC03MDQsOCArNzA3LDkgQEAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21hcHBpMi9kZWZjb25maWcudmRlYzIgYi9hcmNoL20zMnIvbWFwcGkyL2RlZmNvbmZpZy52ZGVjMgppbmRleCBjMTQ3OTFkLi41NmYyODdiIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbWFwcGkyL2RlZmNvbmZpZy52ZGVjMgorKysgYi9hcmNoL20zMnIvbWFwcGkyL2RlZmNvbmZpZy52ZGVjMgpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMS1yYzQKLSMgV2VkIEZlYiAxNiAyMToxMToxMCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmM1CisjIEZyaSBKdW4gIDMgMTY6MjI6MDIgMjAwNQogIwogQ09ORklHX00zMlI9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldApAQCAtMTYsNiArMTYsNyBAQAogQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0yOCwxMyArMjksMTUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiAjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC00NCw2ICs0Nyw3IEBACiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC02NSw2ICs2OSw3IEBACiAjIENPTkZJR19QTEFUX09QU1BVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTEFUX09BS1MzMlIgaXMgbm90IHNldAogQ09ORklHX1BMQVRfTUFQUEkyPXkKKyMgQ09ORklHX1BMQVRfTUFQUEkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NISVBfTTMyNzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NISVBfTTMyMTAyIGlzIG5vdCBzZXQKIENPTkZJR19DSElQX1ZERUMyPXkKQEAgLTI2NCw3ICsyNjksNiBAQAogIwogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTM4OSwxOCArMzkzLDYgQEAKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwotIyBJbnB1dCBJL08gZHJpdmVycwotIwotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLQotIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldApAQCAtNDEwLDYgKzQwMiwxNyBAQAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorCisjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQpAQCAtNDYwLDYgKzQ2MywxMCBAQAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgVFBNIGRldmljZXMKKyMKKworIwogIyBJMkMgc3VwcG9ydAogIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKQEAgLTUyMSwxMCArNTI4LDYgQEAKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLQotIwogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtNjk3LDggKzcwMCw5IEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tYXBwaTMvZGVmY29uZmlnLnNtcCBiL2FyY2gvbTMyci9tYXBwaTMvZGVmY29uZmlnLnNtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWViZTc1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTMyci9tYXBwaTMvZGVmY29uZmlnLnNtcApAQCAtMCwwICsxLDc1MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjNQorIyBUdWUgTWF5IDMxIDE3OjU1OjM0IDIwMDUKKyMKK0NPTkZJR19NMzJSPXkKKyMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorIyBDT05GSUdfQ0xFQU5fQ09NUElMRSBpcyBub3Qgc2V0CitDT05GSUdfQlJPS0VOPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKKyMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfQkFTRV9GVUxMPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX1NUT1BfTUFDSElORT15CisKKyMKKyMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCisjCisjIENPTkZJR19QTEFUX01BUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMQVRfVVNSViBpcyBub3Qgc2V0CisjIENPTkZJR19QTEFUX00zMjcwMFVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMQVRfT1BTUFVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMQVRfT0FLUzMyUiBpcyBub3Qgc2V0CisjIENPTkZJR19QTEFUX01BUFBJMiBpcyBub3Qgc2V0CitDT05GSUdfUExBVF9NQVBQSTM9eQorQ09ORklHX0NISVBfTTMyNzAwPXkKKyMgQ09ORklHX0NISVBfTTMyMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NISVBfVkRFQzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0hJUF9PUFNQIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX1RMQl9FTlRSSUVTPTMyCitDT05GSUdfSVNBX00zMlIyPXkKK0NPTkZJR19JU0FfRFNQX0xFVkVMMj15CitDT05GSUdfSVNBX0RVQUxfSVNTVUU9eQorQ09ORklHX0JVU19DTE9DSz0xMDAwMDAwMAorQ09ORklHX1RJTUVSX0RJVklERT0xMjgKKyMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKK0NPTkZJR19OT0hJR0hNRU09eQorQ09ORklHX0RJU0NPTlRJR01FTT15CitDT05GSUdfSVJBTV9TVEFSVD0weDAwZjAwMDAwCitDT05GSUdfSVJBTV9TSVpFPTB4MDAwODAwMDAKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19IQVZFX0RFQ19MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19TTVA9eQorIyBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxIGlzIG5vdCBzZXQKK0NPTkZJR19OUl9DUFVTPTIKKyMgQ09ORklHX05VTUEgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgTUNBLCBJU0EpCisjCisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSVNBIGlzIG5vdCBzZXQKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKyMgQ09ORklHX1RDSUMgaXMgbm90IHNldAorIyBDT05GSUdfTTMyUl9QQ0MgaXMgbm90IHNldAorIyBDT05GSUdfTTMyUl9DRkMgaXMgbm90IHNldAorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPW0KKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9UQ1BESUFHPXkKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ORTIwMDAgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CisjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX00zMlJfU0lPPXkKK0NPTkZJR19TRVJJQUxfTTMyUl9TSU9fQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTTMyUl9QTERTSU8gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBYRlMgc3VwcG9ydAorIworIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19GUz15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorIyBDT05GSUdfSk9MSUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19ERVZGU19GUz15CitDT05GSUdfREVWRlNfTU9VTlQ9eQorIyBDT05GSUdfREVWRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGU19GUz15CitDT05GSUdfSkZGU19GU19WRVJCT1NFPTAKK0NPTkZJR19KRkZTX1BST0NfRlM9eQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE1CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbWFwcGkzL2RvdC5nZGJpbml0IGIvYXJjaC9tMzJyL21hcHBpMy9kb3QuZ2RiaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWMyMjE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tMzJyL21hcHBpMy9kb3QuZ2RiaW5pdApAQCAtMCwwICsxLDIyNCBAQAorIyAuZ2RiaW5pdCBmaWxlCisjICRJZDogZG90LmdkYmluaXQsdiAxLjEgMjAwNS8wNC8xMSAwMjoyMTowOCBzYWt1Z2F3YSBFeHAgJAorCisjIHNldHRpbmcKK3NldCB3aWR0aCAwZDcwCitzZXQgcmFkaXggMGQxNgordXNlX2RlYnVnX2RtYQorCisjIEluaXRpYWxpemUgU0RSQU0gY29udHJvbGxlciBmb3IgTWFwcGkKK2RlZmluZSBzZHJhbV9pbml0CisgICMgU0RJUjAKKyAgc2V0ICoodW5zaWduZWQgbG9uZyAqKTB4MDBlZjYwMDggPSAweDAwMDAwMTgyCisgICMgU0RJUjEKKyAgc2V0ICoodW5zaWduZWQgbG9uZyAqKTB4MDBlZjYwMGMgPSAweDAwMDAwMDAxCisgICMgSW5pdGlhbGl6ZSB3YWl0CisgIHNoZWxsIHNsZWVwIDAuMQorICAjIE1PRAorICBzZXQgKih1bnNpZ25lZCBsb25nICopMHgwMGVmNjAyYyA9IDB4MDAwMDAwMjAKKyAgc2V0ICoodW5zaWduZWQgbG9uZyAqKTB4MDBlZjYwNGMgPSAweDAwMDAwMDIwCisgICMgVFIKKyAgc2V0ICoodW5zaWduZWQgbG9uZyAqKTB4MDBlZjYwMjggPSAweDAwMDUxNTAyCisgIHNldCAqKHVuc2lnbmVkIGxvbmcgKikweDAwZWY2MDQ4ID0gMHgwMDA1MTUwMgorICAjIEFEUgorICBzZXQgKih1bnNpZ25lZCBsb25nICopMHgwMGVmNjAyMCA9IDB4MDgwMDAwMDQKKyAgc2V0ICoodW5zaWduZWQgbG9uZyAqKTB4MDBlZjYwNDAgPSAweDBjMDAwMDA0CisgICMgQXV0b1JlZiBPbgorICBzZXQgKih1bnNpZ25lZCBsb25nICopMHgwMGVmNjAwNCA9IDB4MDAwMTA1MTcKKyAgIyBBY2Nlc3MgZW5hYmxlCisgIHNldCAqKHVuc2lnbmVkIGxvbmcgKikweDAwZWY2MDI0ID0gMHgwMDAwMDAwMQorICBzZXQgKih1bnNpZ25lZCBsb25nICopMHgwMGVmNjA0NCA9IDB4MDAwMDAwMDEKK2VuZAorCisjIEluaXRpYWxpemUgTEFOIGNvbnRyb2xsZXIgZm9yIE1hcHBpCitkZWZpbmUgbGFuY19pbml0CisgICMgU2V0IEJTRUw0CisgICNzZXQgKih1bnNpZ25lZCBsb25nICopMHgwMGVmNTAwNCA9IDB4MGZmZjMzMGYKKyAgI3NldCAqKHVuc2lnbmVkIGxvbmcgKikweDAwZWY1MDA0ID0gMHgwMTExMzMwMQorCisjICBzZXQgKih1bnNpZ25lZCBsb25nICopMHgwMGVmNTAwNCA9IDB4MDIwMTExMDEKKyMgIHNldCAqKHVuc2lnbmVkIGxvbmcgKikweDAwZWY1MDA0ID0gMHgwNDQ0MTEwNAorZW5kCisKK2RlZmluZSBjbG9ja19pbml0CisgIHNldCAqKHVuc2lnbmVkIGxvbmcgKikweDAwZWY0MDEwID0gMgorICBzZXQgKih1bnNpZ25lZCBsb25nICopMHgwMGVmNDAxNCA9IDIKKyAgc2V0ICoodW5zaWduZWQgbG9uZyAqKTB4MDBlZjQwMjAgPSAzCisgIHNldCAqKHVuc2lnbmVkIGxvbmcgKikweDAwZWY0MDI0ID0gMworICBzZXQgKih1bnNpZ25lZCBsb25nICopMHgwMGVmNDAwNCA9IDB4NworIyAgc2hlbGwgc2xlZXAgMC4xCisjICBzZXQgKih1bnNpZ25lZCBsb25nICopMHgwMGVmNDAwNCA9IDB4NQorICBzaGVsbCBzbGVlcCAwLjEKKyAgc2V0ICoodW5zaWduZWQgbG9uZyAqKTB4MDBlZjQwMDggPSAweDAyMDAKK2VuZAorCitkZWZpbmUgcG9ydF9pbml0CisgIHNldCAkc2ZyYmFzZSA9IDB4MDBlZjAwMDAKKyAgc2V0ICoodW5zaWduZWQgc2hvcnQgKikweDAwZWYxMDYwID0gMHg1NTU1CisgIHNldCAqKHVuc2lnbmVkIHNob3J0ICopMHgwMGVmMTA2MiA9IDB4NTU1NQorICBzZXQgKih1bnNpZ25lZCBzaG9ydCAqKTB4MDBlZjEwNjQgPSAweDU1NTUKKyAgc2V0ICoodW5zaWduZWQgc2hvcnQgKikweDAwZWYxMDY2ID0gMHg1NTU1CisgIHNldCAqKHVuc2lnbmVkIHNob3J0ICopMHgwMGVmMTA2OCA9IDB4NTU1NQorICBzZXQgKih1bnNpZ25lZCBzaG9ydCAqKTB4MDBlZjEwNmEgPSAweDAwMDAKKyAgc2V0ICoodW5zaWduZWQgc2hvcnQgKikweDAwZWYxMDZlID0gMHg1NTU1CisgIHNldCAqKHVuc2lnbmVkIHNob3J0ICopMHgwMGVmMTA3MCA9IDB4NTU1NQorZW5kCisKKyMgTU1VIGVuYWJsZQorZGVmaW5lIG1tdV9lbmFibGUKKyAgc2V0ICRldmI9MHg4ODAwMDAwMAorICBzZXQgKih1bnNpZ25lZCBsb25nICopMHhmZmZmMDAyND0xCitlbmQKKworIyBNTVUgZGlzYWJsZQorZGVmaW5lIG1tdV9kaXNhYmxlCisgIHNldCAkZXZiPTAKKyAgc2V0ICoodW5zaWduZWQgbG9uZyAqKTB4ZmZmZjAwMjQ9MAorZW5kCisKKyMgU2hvdyBUTEIgZW50cmllcworZGVmaW5lIHNob3dfdGxiX2VudHJpZXMKKyAgc2V0ICRpID0gMAorICBzZXQgJGFkZHIgPSAkYXJnMAorICB3aGlsZSAoJGkgPCAwZDE2ICkKKyAgICBzZXQgJHRsYl90YWcgPSAqKHVuc2lnbmVkIGxvbmcqKSRhZGRyCisgICAgc2V0ICR0bGJfZGF0YSA9ICoodW5zaWduZWQgbG9uZyopKCRhZGRyICsgNCkKKyAgICBwcmludGYgIiBbJTJkXSAweCUwOGx4IDogMHglMDhseCAtIDB4JTA4bHhcbiIsICRpLCAkYWRkciwgJHRsYl90YWcsICR0bGJfZGF0YQorICAgIHNldCAkaSA9ICRpICsgMQorICAgIHNldCAkYWRkciA9ICRhZGRyICsgOAorICBlbmQKK2VuZAorZGVmaW5lIGl0bGIKKyAgc2V0ICRpdGxiPTB4ZmUwMDAwMDAKKyAgc2hvd190bGJfZW50cmllcyAkaXRsYgorZW5kCitkZWZpbmUgZHRsYgorICBzZXQgJGR0bGI9MHhmZTAwMDgwMAorICBzaG93X3RsYl9lbnRyaWVzICRkdGxiCitlbmQKKworIyBDYWNoZSBPTgorZGVmaW5lIHNldF9jYWNoZV90eXBlCisgIHNldCAkbWN0eXBlID0gKHZvaWQqKTB4ZmZmZmZmZjgKKyMgY2hhb3MKKyMgc2V0ICoodW5zaWduZWQgbG9uZyAqKSgkbWN0eXBlKSA9IDB4MDAwMGMwMDAKKyMgbTMyMTAyIGktY2FjaGUgb25seQorICBzZXQgKih1bnNpZ25lZCBsb25nICopKCRtY3R5cGUpID0gMHgwMDAwODAwMAorIyBtMzIxMDIgZC1jYWNoZSBvbmx5CisjICBzZXQgKih1bnNpZ25lZCBsb25nICopKCRtY3R5cGUpID0gMHgwMDAwNDAwMAorZW5kCitkZWZpbmUgY2FjaGVfb24KKyAgc2V0ICRwYXJhbSA9ICh2b2lkKikweDA4MDAxMDAwCisgIHNldCAqKHVuc2lnbmVkIGxvbmcgKikoJHBhcmFtKSA9IDB4NjBmZjYxMDIKK2VuZAorCisKKyMgU2hvdyBjdXJyZW50IHRhc2sgc3RydWN0dXJlCitkZWZpbmUgc2hvd19jdXJyZW50CisgIHNldCAkY3VycmVudCA9ICRzcGkgJiAweGZmZmZlMDAwCisgIHByaW50ZiAiJGN1cnJlbnQ9MHglMDhsWFxuIiwkY3VycmVudAorICBwcmludCAqKHN0cnVjdCB0YXNrX3N0cnVjdCAqKSRjdXJyZW50CitlbmQKKworIyBTaG93IHVzZXIgYXNzaWduZWQgdGFzayBzdHJ1Y3R1cmUKK2RlZmluZSBzaG93X3Rhc2sKKyAgc2V0ICR0YXNrID0gJGFyZzAgJiAweGZmZmZlMDAwCisgIHByaW50ZiAiJHRhc2s9MHglMDhsWFxuIiwkdGFzaworICBwcmludCAqKHN0cnVjdCB0YXNrX3N0cnVjdCAqKSR0YXNrCitlbmQKK2RvY3VtZW50IHNob3dfdGFzaworICBTaG93IHVzZXIgYXNzaWduZWQgdGFzayBzdHJ1Y3R1cmUKKyAgYXJnMCA6IHRhc2sgc3RydWN0dXJlIGFkZHJlc3MKK2VuZAorCisjIFNob3cgTTMyUiByZWdpc3RlcnMKK2RlZmluZSBzaG93X3JlZ3MKKyAgcHJpbnRmICIgUjBbMHglMDhsWF0gICBSMVsweCUwOGxYXSAgIFIyWzB4JTA4bFhdICAgUjNbMHglMDhsWF1cbiIsJHIwLCRyMSwkcjIsJHIzCisgIHByaW50ZiAiIFI0WzB4JTA4bFhdICAgUjVbMHglMDhsWF0gICBSNlsweCUwOGxYXSAgIFI3WzB4JTA4bFhdXG4iLCRyNCwkcjUsJHI2LCRyNworICBwcmludGYgIiBSOFsweCUwOGxYXSAgIFI5WzB4JTA4bFhdICBSMTBbMHglMDhsWF0gIFIxMVsweCUwOGxYXVxuIiwkcjgsJHI5LCRyMTAsJHIxMQorICBwcmludGYgIlIxMlsweCUwOGxYXSAgIEZQWzB4JTA4bFhdICAgTFJbMHglMDhsWF0gICBTUFsweCUwOGxYXVxuIiwkcjEyLCRmcCwkbHIsJHNwCisgIHByaW50ZiAiUFNXWzB4JTA4bFhdICBDQlJbMHglMDhsWF0gIFNQSVsweCUwOGxYXSAgU1BVWzB4JTA4bFhdXG4iLCRwc3csJGNiciwkc3BpLCRzcHUKKyAgcHJpbnRmICJCUENbMHglMDhsWF0gICBQQ1sweCUwOGxYXSBBQ0NMWzB4JTA4bFhdIEFDQ0hbMHglMDhsWF1cbiIsJGJwYywkcGMsJGFjY2wsJGFjY2gKKyAgcHJpbnRmICJFVkJbMHglMDhsWF1cbiIsJGV2YgorCisgIHNldCAkbWVzdHMgPSAqKHVuc2lnbmVkIGxvbmcgKikweGZmZmYwMDBjCisgIHNldCAkbWRldmEgPSAqKHVuc2lnbmVkIGxvbmcgKikweGZmZmYwMDEwCisgIHByaW50ZiAiTUVTVFNbMHglMDhsWF0gTURFVkFbMHglMDhsWF1cbiIsJG1lc3RzLCRtZGV2YQorZW5kCisKKworIyBTZXR1cCBhbGwKK2RlZmluZSBzZXR1cAorICBjbG9ja19pbml0CisgIHNoZWxsIHNsZWVwIDAuMQorICBwb3J0X2luaXQKKyAgc2RyYW1faW5pdAorIyAgbGFuY19pbml0CisjICBkaXNwY19pbml0CisjICBzZXQgJGV2Yj0weDA4MDAwMDAwCitlbmQKKworIyBMb2FkIG1vZHVsZXMKK2RlZmluZSBsb2FkX21vZHVsZXMKKyAgdXNlX2RlYnVnX2RtYQorICBsb2FkCisjICBsb2FkIGJ1c3lib3gubW90CitlbmQKKworIyBTZXQga2VybmVsIHBhcmFtZXRlcnMKK2RlZmluZSBzZXRfa2VybmVsX3BhcmFtZXRlcnMKKyAgc2V0ICRwYXJhbSA9ICh2b2lkKikweDA4MDAxMDAwCisKKyAgIyMgTU9VTlRfUk9PVF9SRE9OTFkKKyAgc2V0IHtsb25nfSgkcGFyYW0rMHgwMCk9MAorICAjIyBSQU1ESVNLX0ZMQUdTCisgICNzZXQge2xvbmd9KCRwYXJhbSsweDA0KT0wCisgICMjIE9SSUdfUk9PVF9ERVYKKyAgI3NldCB7bG9uZ30oJHBhcmFtKzB4MDgpPTB4MDAwMDAxMDAKKyAgIyMgTE9BREVSX1RZUEUKKyAgI3NldCB7bG9uZ30oJHBhcmFtKzB4MEMpPTAKKyAgIyMgSU5JVFJEX1NUQVJUCisgIHNldCB7bG9uZ30oJHBhcmFtKzB4MTApPTB4MDgyYTAwMDAKKyAgIyMgSU5JVFJEX1NJWkUKKyAgc2V0IHtsb25nfSgkcGFyYW0rMHgxNCk9MGQ2MjAwMDAwCisKKyAgIyBNMzJSX0NQVUNMSworICBzZXQgKih1bnNpZ25lZCBsb25nICopKCRwYXJhbSArIDB4MDAxOCkgPSAwZDEwMDAwMDAwMAorICAjIE0zMlJfQlVTQ0xLCisgIHNldCAqKHVuc2lnbmVkIGxvbmcgKikoJHBhcmFtICsgMHgwMDFjKSA9IDBkNTAwMDAwMDAKKyAgIyBNMzJSX1RJTUVSX0RJVklERQorICBzZXQgKih1bnNpZ25lZCBsb25nICopKCRwYXJhbSArIDB4MDAyMCkgPSAwZDEyOAorCisKKyBzZXQge2NoYXJbMHgyMDBdfSgkcGFyYW0gKyAweDEwMCkgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuOHggcm9vdD0vZGV2L25mc3Jvb3QgbmZzcm9vdD0xOTIuMTY4LjAuMTovcHJvamVjdC9tMzJyLWxpbnV4L2V4cG9ydC9yb290LjIuNl8wNCBuZnNhZGRycz0xOTIuMTY4LjAuMTAyOjE5Mi4xNjguMC4xOjE5Mi4xNjguMC4xOjI1NS4yNTUuMjU1LjA6bWFwcGk6IFwwIgorCisKK2VuZAorCisjIEJvb3QKK2RlZmluZSBib290CisgIHNldF9rZXJuZWxfcGFyYW1ldGVycworICBkZWJ1Z19jaGFvcworICBzZXQgKih1bnNpZ25lZCBsb25nICopMHgwMGYwMDAwMD0weDA4MDAyMDAwCisgIHNldCAkcGM9MHgwODAwMjAwMAorICBzZXQgJGZwPTAKKyAgZGVsIGIKKyAgc2kKK2VuZAorCisjIFJlc3RhcnQKK2RlZmluZSByZXN0YXJ0CisgIHNkaXJlc2V0CisgIHNkaXJlc2V0CisgIHNldHVwCisgIGxvYWRfbW9kdWxlcworICBib290CitlbmQKKworc2RpcmVzZXQKK3NkaXJlc2V0CitmaWxlIHZtbGludXgKK3RhcmdldCBtMzJyc2RpCisKK3Jlc3RhcnQKK2Jvb3QKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9leHRhYmxlLmMgYi9hcmNoL20zMnIvbW0vZXh0YWJsZS5jCmluZGV4IDlhOTczNjMuLjE3NDNmMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9leHRhYmxlLmMKKysrIGIvYXJjaC9tMzJyL21tL2V4dGFibGUuYwpAQCAtMSwxMCArMSw4IEBACiAvKgotICogbGludXgvYXJjaC9pMzg2L21tL2V4dGFibGUuYworICogbGludXgvYXJjaC9tMzJyL21tL2V4dGFibGUuYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIGludCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0xOSw0ICsxNywzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL29ha3MzMnIvZGVmY29uZmlnLm5vbW11IGIvYXJjaC9tMzJyL29ha3MzMnIvZGVmY29uZmlnLm5vbW11CmluZGV4IGYyZGE5YmUuLjNmOWZlNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9vYWtzMzJyL2RlZmNvbmZpZy5ub21tdQorKysgYi9hcmNoL20zMnIvb2FrczMyci9kZWZjb25maWcubm9tbXUKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTEtcmM0Ci0jIFdlZCBGZWIgMTYgMjE6MTE6MTMgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjNQorIyBGcmkgSnVuICAzIDE2OjIyOjA0IDIwMDUKICMKIENPTkZJR19NMzJSPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKQEAgLTE2LDYgKzE2LDcgQEAKIENPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMjYsMTIgKzI3LDE0IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApAQCAtNDAsNiArNDMsNyBAQAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfQkFTRV9TTUFMTD0wCiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTYxLDYgKzY1LDcgQEAKICMgQ09ORklHX1BMQVRfT1BTUFVUIGlzIG5vdCBzZXQKIENPTkZJR19QTEFUX09BS1MzMlI9eQogIyBDT05GSUdfUExBVF9NQVBQSTIgaXMgbm90IHNldAorIyBDT05GSUdfUExBVF9NQVBQSTMgaXMgbm90IHNldAogIyBDT05GSUdfQ0hJUF9NMzI3MDAgaXMgbm90IHNldAogQ09ORklHX0NISVBfTTMyMTAyPXkKICMgQ09ORklHX0NISVBfVkRFQzIgaXMgbm90IHNldApAQCAtOTIsMTAgKzk3LDYgQEAKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCi0KLSMKICMgUENJIEhvdHBsdWcgU3VwcG9ydAogIwogCkBAIC0xOTMsNyArMTk0LDYgQEAKICMKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0zMTEsMTggKzMxMSw2IEBACiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKLSMgSW5wdXQgSS9PIGRyaXZlcnMKLSMKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0KLSMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKQEAgLTMzMiw2ICszMjAsMTcgQEAKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogIyBDT05GSUdfVlQgaXMgbm90IHNldApAQCAtMzc1LDYgKzM3NCwxMCBAQAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgVFBNIGRldmljZXMKKyMKKworIwogIyBJMkMgc3VwcG9ydAogIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKQEAgLTQxNSwxMCArNDE4LDYgQEAKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLQotIwogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtNTc0LDggKzU3Myw5IEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9vcHNwdXQvZGVmY29uZmlnLm9wc3B1dCBiL2FyY2gvbTMyci9vcHNwdXQvZGVmY29uZmlnLm9wc3B1dAppbmRleCBhODdlMWVhLi42NmFkZWM2IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvb3BzcHV0L2RlZmNvbmZpZy5vcHNwdXQKKysrIGIvYXJjaC9tMzJyL29wc3B1dC9kZWZjb25maWcub3BzcHV0CkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjExLXJjNAotIyBXZWQgRmViIDE2IDIxOjExOjQxIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzUKKyMgRnJpIEp1biAgMyAxNjoyMjowNiAyMDA1CiAjCiBDT05GSUdfTTMyUj15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CkBAIC0xNSw2ICsxNSw3IEBACiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0yNywxMyArMjgsMTUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiAjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC00Myw2ICs0Niw3IEBACiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC02NCw2ICs2OCw3IEBACiBDT05GSUdfUExBVF9PUFNQVVQ9eQogIyBDT05GSUdfUExBVF9PQUtTMzJSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BMQVRfTUFQUEkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMQVRfTUFQUEkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NISVBfTTMyNzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NISVBfTTMyMTAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NISVBfVkRFQzIgaXMgbm90IHNldApAQCAtMjQzLDcgKzI0OCw2IEBACiAjCiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtMzY4LDE4ICszNzIsNiBAQAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotCi0jCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CkBAIC0zODksNiArMzgxLDE3IEBACiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CisjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CisKKyMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKQEAgLTQzOCw2ICs0NDEsMTAgQEAKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIFRQTSBkZXZpY2VzCisjCisKKyMKICMgSTJDIHN1cHBvcnQKICMKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CkBAIC00NzgsMTAgKzQ4NSw2IEBACiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi0KLSMKICMgVVNCIEdhZGdldCBTdXBwb3J0CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTY1NCw4ICs2NTcsMTAgQEAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCBiMDI3Y2U3Li43Mzg0M2M1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTIzMiw3ICsyMzIsNiBAQAogI2lmZGVmIENPTkZJR19MSU1JVEVEX0RNQQogCQlzZXRfcGFnZV9hZGRyZXNzKHBhZ2UsIGxvd21lbV9wYWdlX2FkZHJlc3MocGFnZSkpOwogI2VuZGlmCi0JCXNldF9iaXQoUEdfaGlnaG1lbSwgJnBhZ2UtPmZsYWdzKTsKIAkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiAJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCQl0b3RhbGhpZ2hfcGFnZXMrKzsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL0tjb25maWcgYi9hcmNoL3BwYy9LY29uZmlnCmluZGV4IDU0Y2U2ZGEuLjEwMTYyYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL0tjb25maWcKKysrIGIvYXJjaC9wcGMvS2NvbmZpZwpAQCAtODI2LDExICs4MjYsNiBAQAogCWRlcGVuZHMgb24gUENPUkUgfHwgUE9XRVJQTUMyNTAgfHwgTE9QRUMgfHwgU0FORFBPSU5UCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBGU0xfT0NQCi0JYm9vbAotCWRlcGVuZHMgb24gTVBDMTBYX0JSSURHRQotCWRlZmF1bHQgeQotCiBjb25maWcgTVBDMTBYX09QRU5QSUMKIAlib29sCiAJZGVwZW5kcyBvbiBQT1dFUlBNQzI1MCB8fCBMT1BFQyB8fCBTQU5EUE9JTlQKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3QvbGQuc2NyaXB0IGIvYXJjaC9wcGMvYm9vdC9sZC5zY3JpcHQKaW5kZXggNmVlNjAyZC4uOTM2MjE5MyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9sZC5zY3JpcHQKKysrIGIvYXJjaC9wcGMvYm9vdC9sZC5zY3JpcHQKQEAgLTU4LDkgKzU4LDYgQEAKICAgICAqKC5yYW1kaXNrKQogICAgIF9fcmFtZGlza19lbmQgPSAuOwogICAgIC4gPSBBTElHTig0MDk2KTsKLSAgICBfX3N5c21hcF9iZWdpbiA9IC47Ci0gICAgKiguc3lzbWFwKQotICAgIF9fc3lzbWFwX2VuZCA9IC47CiAgICAgQ09OU1RSVUNUT1JTCiAgIH0KICAgX2VkYXRhICA9ICAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9vcGVuZmlybXdhcmUvTWFrZWZpbGUgYi9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9NYWtlZmlsZQppbmRleCA0ZWFjYmQ4Li4wMzQxNTIzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9NYWtlZmlsZQpAQCAtNTQsMTMgKzU0LDEwIEBACiAJQGVjaG8gJyAgICAgICAgICBSQU0gZGlzayBpbWFnZSBtdXN0IGJlIHByb3ZpZGVkIHNlcGFyYXRlbHknCiAJQC9iaW4vZmFsc2UKIAotb2JqY3B4bW9uLSQoQ09ORklHX1hNT04pIDo9IC0tYWRkLXNlY3Rpb249LnN5c21hcD1TeXN0ZW0ubWFwIFwKLQktLXNldC1zZWN0aW9uLWZsYWdzPS5zeXNtYXA9Y29udGVudHMsYWxsb2MsbG9hZCxyZWFkb25seSxkYXRhCiBxdWlldF9jbWRfZ2VuaW1hZ2UgPSBHRU4gICAgICRACiAgICAgICBjbWRfZ2VuaW1hZ2UgPSAkKE9CSkNPUFkpIC1SIC5jb21tZW50ICAgICAgIFwKIAktLWFkZC1zZWN0aW9uPS5pbWFnZT0kKGltYWdlcykvdm1saW51eC5neiBcCi0JLS1zZXQtc2VjdGlvbi1mbGFncz0uaW1hZ2U9Y29udGVudHMsYWxsb2MsbG9hZCxyZWFkb25seSxkYXRhIFwKLQkkKG9iamNweG1vbi15KSAkPCAkQAorCS0tc2V0LXNlY3Rpb24tZmxhZ3M9LmltYWdlPWNvbnRlbnRzLGFsbG9jLGxvYWQscmVhZG9ubHksZGF0YSAkPCAkQAogCiB0YXJnZXRzICs9IGltYWdlLm8KICQob2JqKS9pbWFnZS5vOiAkKG9iaikvZHVtbXkubyAkKGltYWdlcykvdm1saW51eC5neiBGT1JDRQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9vcGVuZmlybXdhcmUvY29tbW9uLmMgYi9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9jb21tb24uYwppbmRleCA5ZTY5NTI3Li4wZjQ2NzU2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9jb21tb24uYworKysgYi9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9jb21tb24uYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qIEluZm9ybWF0aW9uIGZyb20gdGhlIGxpbmtlciAqLwotZXh0ZXJuIGNoYXIgX19zeXNtYXBfYmVnaW4sIF9fc3lzbWFwX2VuZDsKIAogZXh0ZXJuIGludCBzdHJjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKIGV4dGVybiBjaGFyICphdmFpbF9yYW0sICphdmFpbF9oaWdoOwpAQCAtMTE2LDE0ICsxMTUsOCBAQAogdm9pZCBtYWtlX2JpX3JlY3ModW5zaWduZWQgbG9uZyBhZGRyLCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbWFjaCwKIAkJdW5zaWduZWQgbG9uZyBwcm9nZW5kKQogewotCXVuc2lnbmVkIGxvbmcgc3lzbWFwX3NpemU7CiAJc3RydWN0IGJpX3JlY29yZCAqcmVjOwogCi0JLyogRmlndXJlIG91dCB0aGUgc2l6ZSBvZiBhIHBvc3NpYmxlIFN5c3RlbS5tYXAgd2UncmUgZ29pbmcgdG8KLQkgKiBwYXNzIGFsb25nLgotCSAqICovCi0Jc3lzbWFwX3NpemUgPSAodW5zaWduZWQgbG9uZykoJl9fc3lzbWFwX2VuZCkgLQotCQkodW5zaWduZWQgbG9uZykoJl9fc3lzbWFwX2JlZ2luKTsKIAogCS8qIGxlYXZlIGEgMU1CIGdhcCB0aGVuIGFsaWduIHRvIHRoZSBuZXh0IDFNQiBib3VuZGFyeSAqLwogCWFkZHIgPSBfQUxJR04oYWRkcisgKDE8PDIwKSAtIDEsICgxPDwyMCkpOwpAQCAtMTQ3LDE1ICsxNDAsNiBAQAogCXJlYy0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmlfcmVjb3JkKSArIDIgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CiAJcmVjID0gKHN0cnVjdCBiaV9yZWNvcmQgKikoKHVuc2lnbmVkIGxvbmcpcmVjICsgcmVjLT5zaXplKTsKIAotCWlmIChzeXNtYXBfc2l6ZSkgewotCQlyZWMtPnRhZyA9IEJJX1NZU01BUDsKLQkJcmVjLT5kYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpKCZfX3N5c21hcF9iZWdpbik7Ci0JCXJlYy0+ZGF0YVsxXSA9IHN5c21hcF9zaXplOwotCQlyZWMtPnNpemUgPSBzaXplb2Yoc3RydWN0IGJpX3JlY29yZCkgKyAyICoKLQkJCXNpemVvZih1bnNpZ25lZCBsb25nKTsKLQkJcmVjID0gKHN0cnVjdCBiaV9yZWNvcmQgKikoKHVuc2lnbmVkIGxvbmcpcmVjICsgcmVjLT5zaXplKTsKLQl9Ci0KIAlyZWMtPnRhZyA9IEJJX0xBU1Q7CiAJcmVjLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBiaV9yZWNvcmQpOwogCXJlYyA9IChzdHJ1Y3QgYmlfcmVjb3JkICopKCh1bnNpZ25lZCBsb25nKXJlYyArIHJlYy0+c2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9NYWtlZmlsZSBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL01ha2VmaWxlCmluZGV4IGMyODA2MWEuLjk5MWI0Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL01ha2VmaWxlCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJJChvYmopL2R1bW15Lm8gJChvYmopL2ltYWdlLm8KIAkkKExEKSAkKExEX0FSR1MpIC1vICRAICQoT0JKUykgJChvYmopL2ltYWdlLm8gJChMSUJTKQogCSQoT0JKQ09QWSkgJChPQkpDT1BZX0FSR1MpICRAICRAIC1SIC5jb21tZW50IC1SIC5zdGFiIFwKLQkJLVIgLnN0YWJzdHIgLVIgLnJhbWRpc2sgLVIgLnN5c21hcAorCQktUiAuc3RhYnN0ciAtUiAucmFtZGlzawogCiAkKG9iaikvenZtbGludXguaW5pdHJkOiAkKE9CSlMpICQoTElCUykgJChzcmN0cmVlKS8kKGJvb3QpL2xkLnNjcmlwdCBcCiAJCSQoaW1hZ2VzKS92bWxpbnV4Lmd6ICQob2JqKS9kdW1teS5vCkBAIC0yMTUsNyArMjE1LDcgQEAKIAkJJChvYmopL2R1bW15Lm8gJChvYmopL2ltYWdlLm8KIAkkKExEKSAkKExEX0FSR1MpIC1vICRAICQoT0JKUykgJChvYmopL2ltYWdlLm8gJChMSUJTKQogCSQoT0JKQ09QWSkgJChPQkpDT1BZX0FSR1MpICRAICRAIC1SIC5jb21tZW50IC1SIC5zdGFiIFwKLQkJLVIgLnN0YWJzdHIgLVIgLnN5c21hcAorCQktUiAuc3RhYnN0cgogCiAjIFNvcnQtb2YgZHVtbXkgcnVsZXMsIHRoYXQgbGV0IHVzIGZvcm1hdCB0aGUgaW1hZ2Ugd2Ugd2FudC4KIHpJbWFnZTogJChpbWFnZXMpLyQoemltYWdlLXkpICQob2JqKS96dm1saW51eApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC91dGlscy9hZGRTeXN0ZW1NYXAuYyBiL2FyY2gvcHBjL2Jvb3QvdXRpbHMvYWRkU3lzdGVtTWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NTRmODkuLjAwMDAwMDAKLS0tIGEvYXJjaC9wcGMvYm9vdC91dGlscy9hZGRTeXN0ZW1NYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxieXRlc3dhcC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0KLXZvaWQgeGxhdGUoIGNoYXIgKiBpbmIsIGNoYXIgKiB0cmIsIHVuc2lnbmVkIGxlbiApCi17Ci0gICAgdW5zaWduZWQgaTsKLSAgICBmb3IgKCAgaT0wOyBpPGxlbjsgKytpICkgewotCWNoYXIgYyA9ICppbmIrKzsKLQljaGFyIGMxID0gYyA+PiA0OwotCWNoYXIgYzIgPSBjICYgMHhmOwotCWlmICggYzEgPiA5ICkKLQkgICAgYzEgPSBjMSArICdBJyAtIDEwOwotCWVsc2UKLQkgICAgYzEgPSBjMSArICcwJzsKLQlpZiAoIGMyID4gOSApCi0JICAgIGMyID0gYzIgKyAnQScgLSAxMDsKLQllbHNlCi0JICAgIGMyID0gYzIgKyAnMCc7Ci0JKnRyYisrID0gYzE7Ci0JKnRyYisrID0gYzI7Ci0gICAgfQotICAgICp0cmIgPSAwOwotfQotCi0jZGVmaW5lIEVsZkhlYWRlclNpemUgICg2NCAqIDEwMjQpCi0jZGVmaW5lIEVsZlBhZ2VzICAoRWxmSGVhZGVyU2l6ZSAvIDQwOTYpCi0jZGVmaW5lIEtFUk5FTEJBU0UgKDB4YzAwMDAwMDApCi0KLXZvaWQgZ2V0NGsoIC8qaXN0cmVhbSAqaW5mKi9GSUxFICpmaWxlLCBjaGFyICpidWYgKQotewotICAgIHVuc2lnbmVkIGo7Ci0gICAgdW5zaWduZWQgbnVtID0gZnJlYWQoYnVmLCAxLCA0MDk2LCBmaWxlKTsKLSAgICBmb3IgKCAgaj1udW07IGo8NDA5NjsgKytqICkKLQlidWZbal0gPSAwOwotfQotCi12b2lkIHB1dDRrKCAvKm9zdHJlYW0gKm91dGYqL0ZJTEUgKmZpbGUsIGNoYXIgKmJ1ZiApCi17Ci0gICAgZndyaXRlKGJ1ZiwgMSwgNDA5NiwgZmlsZSk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBjaGFyIGluYnVmWzQwOTZdOwotICAgIEZJTEUgKnJhbURpc2sgPSBOVUxMOwotICAgIEZJTEUgKmlucHV0Vm1saW51eCA9IE5VTEw7Ci0gICAgRklMRSAqb3V0cHV0Vm1saW51eCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyByYW1GaWxlTGVuID0gMDsKLSAgICB1bnNpZ25lZCBsb25nIHJhbUxlbiA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyByb3VuZFIgPSAwOwotICAgIHVuc2lnbmVkIGxvbmcga2VybmVsTGVuID0gMDsKLSAgICB1bnNpZ25lZCBsb25nIGFjdHVhbEtlcm5lbExlbiA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyByb3VuZCA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyByb3VuZGVkS2VybmVsTGVuID0gMDsKLSAgICB1bnNpZ25lZCBsb25nIHJhbVN0YXJ0T2ZmcyA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyByYW1QYWdlcyA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyByb3VuZGVkS2VybmVsUGFnZXMgPSAwOwotICAgIGlmICggYXJnYyA8IDIgKSB7Ci0JcHJpbnRmKCJOYW1lIG9mIFN5c3RlbSBNYXAgZmlsZSBtaXNzaW5nLlxuIik7Ci0JZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBpZiAoIGFyZ2MgPCAzICkgewotCXByaW50ZigiTmFtZSBvZiB2bWxpbnV4IGZpbGUgbWlzc2luZy5cbiIpOwotCWV4aXQoMSk7Ci0gICAgfQotCi0gICAgaWYgKCBhcmdjIDwgNCApIHsKLQlwcmludGYoIk5hbWUgb2Ygdm1saW51eCBvdXRwdXQgZmlsZSBtaXNzaW5nLlxuIik7Ci0JZXhpdCgxKTsKLSAgICB9Ci0KLSAgICByYW1EaXNrID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSAgICBpZiAoICEgcmFtRGlzayApIHsKLQlwcmludGYoIlN5c3RlbSBNYXAgZmlsZSBcIiVzXCIgZmFpbGVkIHRvIG9wZW4uXG4iLCBhcmd2WzFdKTsKLQlleGl0KDEpOwotICAgIH0KLSAgICBpbnB1dFZtbGludXggPSBmb3Blbihhcmd2WzJdLCAiciIpOwotICAgIGlmICggISBpbnB1dFZtbGludXggKSB7Ci0JcHJpbnRmKCJ2bWxpbnV4IGZpbGUgXCIlc1wiIGZhaWxlZCB0byBvcGVuLlxuIiwgYXJndlsyXSk7Ci0JZXhpdCgxKTsKLSAgICB9Ci0gICAgb3V0cHV0Vm1saW51eCA9IGZvcGVuKGFyZ3ZbM10sICJ3Iik7Ci0gICAgaWYgKCAhIG91dHB1dFZtbGludXggKSB7Ci0JcHJpbnRmKCJvdXRwdXQgdm1saW51eCBmaWxlIFwiJXNcIiBmYWlsZWQgdG8gb3Blbi5cbiIsIGFyZ3ZbM10pOwotCWV4aXQoMSk7Ci0gICAgfQotICAgIGZzZWVrKHJhbURpc2ssIDAsIFNFRUtfRU5EKTsKLSAgICByYW1GaWxlTGVuID0gZnRlbGwocmFtRGlzayk7Ci0gICAgZnNlZWsocmFtRGlzaywgMCwgU0VFS19TRVQpOwotICAgIHByaW50ZigiJXMgZmlsZSBzaXplID0gJWxkXG4iLCBhcmd2WzFdLCByYW1GaWxlTGVuKTsKLQotICAgIHJhbUxlbiA9IHJhbUZpbGVMZW47Ci0KLSAgICByb3VuZFIgPSA0MDk2IC0gKHJhbUxlbiAlIDQwOTYpOwotICAgIGlmICggcm91bmRSICkgewotCXByaW50ZigiUm91bmRpbmcgU3lzdGVtIE1hcCBmaWxlIHVwIHRvIGEgbXVsdGlwbGUgb2YgNDA5NiwgYWRkaW5nICVsZFxuIiwgcm91bmRSKTsKLQlyYW1MZW4gKz0gcm91bmRSOwotICAgIH0KLQotICAgIHByaW50ZigiUm91bmRlZCBTeXN0ZW0gTWFwIHNpemUgaXMgJWxkXG4iLCByYW1MZW4pOwotICAgIGZzZWVrKGlucHV0Vm1saW51eCwgMCwgU0VFS19FTkQpOwotICAgIGtlcm5lbExlbiA9IGZ0ZWxsKGlucHV0Vm1saW51eCk7Ci0gICAgZnNlZWsoaW5wdXRWbWxpbnV4LCAwLCBTRUVLX1NFVCk7Ci0gICAgcHJpbnRmKCJrZXJuZWwgZmlsZSBzaXplID0gJWxkXG4iLCBrZXJuZWxMZW4pOwotICAgIGlmICgga2VybmVsTGVuID09IDAgKSB7Ci0JcHJpbnRmKCJZb3UgbXVzdCBoYXZlIGEgbGludXgga2VybmVsIHNwZWNpZmllZCBhcyBhcmd2WzJdXG4iKTsKLQlleGl0KDEpOwotICAgIH0KLQotICAgIGFjdHVhbEtlcm5lbExlbiA9IGtlcm5lbExlbiAtIEVsZkhlYWRlclNpemU7Ci0KLSAgICBwcmludGYoImFjdHVhbCBrZXJuZWwgbGVuZ3RoIChtaW51cyBFTEYgaGVhZGVyKSA9ICVsZFxuIiwgYWN0dWFsS2VybmVsTGVuKTsKLQotICAgIHJvdW5kID0gYWN0dWFsS2VybmVsTGVuICUgNDA5NjsKLSAgICByb3VuZGVkS2VybmVsTGVuID0gYWN0dWFsS2VybmVsTGVuOwotICAgIGlmICggcm91bmQgKQotCXJvdW5kZWRLZXJuZWxMZW4gKz0gKDQwOTYgLSByb3VuZCk7Ci0KLSAgICBwcmludGYoImFjdHVhbCBrZXJuZWwgbGVuZ3RoIHJvdW5kZWQgdXAgdG8gYSA0ayBtdWx0aXBsZSA9ICVsZFxuIiwgcm91bmRlZEtlcm5lbExlbik7Ci0KLSAgICByYW1TdGFydE9mZnMgPSByb3VuZGVkS2VybmVsTGVuOwotICAgIHJhbVBhZ2VzID0gcmFtTGVuIC8gNDA5NjsKLQotICAgIHByaW50ZigiU3lzdGVtIG1hcCBwYWdlcyB0byBjb3B5ID0gJWxkXG4iLCByYW1QYWdlcyk7Ci0KLSAgICAvLyBDb3B5IDY0SyBFTEYgaGVhZGVyCi0gICAgICBmb3IgKGk9MDsgaTwoRWxmUGFnZXMpOyArK2kpIHsKLQkgIGdldDRrKCBpbnB1dFZtbGludXgsIGluYnVmICk7Ci0JICBwdXQ0ayggb3V0cHV0Vm1saW51eCwgaW5idWYgKTsKLSAgICAgIH0KLQotCi0KLSAgICByb3VuZGVkS2VybmVsUGFnZXMgPSByb3VuZGVkS2VybmVsTGVuIC8gNDA5NjsKLQotICAgIGZzZWVrKGlucHV0Vm1saW51eCwgRWxmSGVhZGVyU2l6ZSwgU0VFS19TRVQpOwotCi0gICAgewotCWZvciAoIGk9MDsgaTxyb3VuZGVkS2VybmVsUGFnZXM7ICsraSApIHsKLQkgICAgZ2V0NGsoIGlucHV0Vm1saW51eCwgaW5idWYgKTsKLQkgICAgaWYgKCBpID09IDAgKSB7Ci0JCXVuc2lnbmVkIGxvbmcgKiBwOwotCQlwcmludGYoIlN0b3JpbmcgZW1iZWRkZWRfc3lzbWFwX3N0YXJ0IGF0IDB4M2NcbiIpOwotCQlwID0gKHVuc2lnbmVkIGxvbmcgKikoaW5idWYgKyAweDNjKTsKLQotI2lmIChCWVRFX09SREVSID09IF9fQklHX0VORElBTikKLQkJKnAgPSByYW1TdGFydE9mZnM7Ci0jZWxzZQotCQkqcCA9IGJzd2FwXzMyKHJhbVN0YXJ0T2Zmcyk7Ci0jZW5kaWYKLQotCQlwcmludGYoIlN0b3JpbmcgZW1iZWRkZWRfc3lzbWFwX2VuZCBhdCAweDQ0XG4iKTsKLQkJcCA9ICh1bnNpZ25lZCBsb25nICopKGluYnVmICsgMHg0NCk7Ci0jaWYgKEJZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOKQotCQkqcCA9IHJhbVN0YXJ0T2ZmcyArIHJhbUZpbGVMZW47Ci0jZWxzZQotCQkqcCA9IGJzd2FwXzMyKHJhbVN0YXJ0T2ZmcyArIHJhbUZpbGVMZW4pOwotI2VuZGlmCi0JICAgIH0KLQkgICAgcHV0NGsoIG91dHB1dFZtbGludXgsIGluYnVmICk7Ci0JfQotICAgIH0KLQotICAgIHsKLQlmb3IgKCBpPTA7IGk8cmFtUGFnZXM7ICsraSApIHsKLQkgICAgZ2V0NGsoIHJhbURpc2ssIGluYnVmICk7Ci0JICAgIHB1dDRrKCBvdXRwdXRWbWxpbnV4LCBpbmJ1ZiApOwotCX0KLSAgICB9Ci0KLQotICAgIGZjbG9zZShyYW1EaXNrKTsKLSAgICBmY2xvc2UoaW5wdXRWbWxpbnV4KTsKLSAgICBmY2xvc2Uob3V0cHV0Vm1saW51eCk7Ci0gICAgLyogU2V0IHBlcm1pc3Npb24gdG8gZXhlY3V0YWJsZSAqLwotICAgIGNobW9kKGFyZ3ZbM10sIFNfSVJVU1J8U19JV1VTUnxTX0lYVVNSfFNfSVJHUlB8U19JWEdSUHxTX0lST1RIfFNfSVhPVEgpOwotCi0gICAgcmV0dXJuIDA7Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvY29uZmlncy9tcGM4NTQ4X2Nkc19kZWZjb25maWcgYi9hcmNoL3BwYy9jb25maWdzL21wYzg1NDhfY2RzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmUwMzRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wcGMvY29uZmlncy9tcGM4NTQ4X2Nkc19kZWZjb25maWcKQEAgLTAsMCArMSw2NTkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzQKKyMgVHVlIE1heSAyNCAyMjozNjoyNyAyMDA1CisjCitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0hBVkVfREVDX0xPQ0s9eQorQ09ORklHX1BQQz15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSMyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUjQgaXMgbm90IHNldAorIyBDT05GSUdfOHh4IGlzIG5vdCBzZXQKK0NPTkZJR19FNTAwPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1NQRT15CitDT05GSUdfTUFUSF9FTVVMQVRJT049eQorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHXzg1eHg9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0lfQkU9eQorCisjCisjIEZyZWVzY2FsZSA4NXh4IG9wdGlvbnMKKyMKKyMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NTQ4X0NEUz15CisjIENPTkZJR19NUEM4NTU1X0NEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAorQ09ORklHX01QQzg1NDg9eQorCisjCisjIFBsYXRmb3JtIG9wdGlvbnMKKyMKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4ODAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfVENQRElBRz15CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0dGQVJfTkFQST15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9eQorIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfU0VOU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorCisjCisjIFhGUyBzdXBwb3J0CisjCisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcHBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IGQ0NGI3ZGMuLjAxYzIyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC05MTgsNiArOTE4LDIwIEBACiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAogCX0sCisJeyAJLyogZTUwMHYyICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLAorCQkucHZyX3ZhbHVlCQk9IDB4ODAyMTAwMDAsCisJCS5jcHVfbmFtZQkJPSAiZTUwMHYyIiwKKwkJLyogeHh4IC0gZ2FsYWs6IGFkZCBDUFVfRlRSX01BWUJFX0NBTl9ET1pFICovCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8CisJCQlDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfQklHX1BIWVMsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IFBQQ19GRUFUVVJFXzMyIHwKKwkJCVBQQ19GRUFUVVJFX0hBU19NTVUgfCBQUENfRkVBVFVSRV9TUEVfQ09NUCB8CisJCQlQUENfRkVBVFVSRV9IQVNfRUZQX1NJTkdMRSB8IFBQQ19GRUFUVVJFX0hBU19FRlBfRE9VQkxFLAorCQkuaWNhY2hlX2JzaXplCQk9IDMyLAorCQkuZGNhY2hlX2JzaXplCQk9IDMyLAorCQkubnVtX3BtY3MJCT0gNCwKKwl9LAogI2VuZGlmCiAjaWYgIUNMQVNTSUNfUFBDCiAJewkvKiBkZWZhdWx0IG1hdGNoICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDY2MTUyMzcuLjgzNzdiNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCkBAIC00NiwyNiArNDYsMjMgQEAKIAogI2lmZGVmIENPTkZJR19CT09LRQogI2luY2x1ZGUgImhlYWRfYm9va2UuaCIKKyNkZWZpbmUgVFJBTlNGRVJfVE9fSEFORExFUl9FWENfTEVWRUwoZXhjX2xldmVsKQlcCisJbXRzcHIJZXhjX2xldmVsIyNfU1BSRyxyODsJCQlcCisJQk9PS0VfTE9BRF9FWENfTEVWRUxfU1RBQ0soZXhjX2xldmVsKTsJCVwKKwlsd3oJcjAsR1BSMTAtSU5UX0ZSQU1FX1NJWkUocjgpOwkJXAorCXN0dwlyMCxHUFIxMChyMTEpOwkJCQlcCisJbHd6CXIwLEdQUjExLUlOVF9GUkFNRV9TSVpFKHI4KTsJCVwKKwlzdHcJcjAsR1BSMTEocjExKTsJCQkJXAorCW1mc3ByCXI4LGV4Y19sZXZlbCMjX1NQUkcKKwogCS5nbG9ibAltY2hlY2tfdHJhbnNmZXJfdG9faGFuZGxlcgogbWNoZWNrX3RyYW5zZmVyX3RvX2hhbmRsZXI6Ci0JbXRzcHIJTUNIRUNLX1NQUkcscjgKLQlCT09LRV9MT0FEX01DSEVDS19TVEFDSwotCWx3eglyMCxHUFIxMC1JTlRfRlJBTUVfU0laRShyOCkKLQlzdHcJcjAsR1BSMTAocjExKQotCWx3eglyMCxHUFIxMS1JTlRfRlJBTUVfU0laRShyOCkKLQlzdHcJcjAsR1BSMTEocjExKQotCW1mc3ByCXI4LE1DSEVDS19TUFJHCisJVFJBTlNGRVJfVE9fSEFORExFUl9FWENfTEVWRUwoTUNIRUNLKQogCWIJdHJhbnNmZXJfdG9faGFuZGxlcl9mdWxsCiAKIAkuZ2xvYmwJY3JpdF90cmFuc2Zlcl90b19oYW5kbGVyCiBjcml0X3RyYW5zZmVyX3RvX2hhbmRsZXI6Ci0JbXRzcHIJQ1JJVF9TUFJHLHI4Ci0JQk9PS0VfTE9BRF9DUklUX1NUQUNLCi0JbHd6CXIwLEdQUjEwLUlOVF9GUkFNRV9TSVpFKHI4KQotCXN0dwlyMCxHUFIxMChyMTEpCi0JbHd6CXIwLEdQUjExLUlOVF9GUkFNRV9TSVpFKHI4KQotCXN0dwlyMCxHUFIxMShyMTEpCi0JbWZzcHIJcjgsQ1JJVF9TUFJHCisJVFJBTlNGRVJfVE9fSEFORExFUl9FWENfTEVWRUwoQ1JJVCkKIAkvKiBmYWxsIHRocm91Z2ggKi8KICNlbmRpZgogCkBAIC03ODMsOTkgKzc4MCw2NCBAQAogICogdGltZSBvZiB0aGUgY3JpdGljYWwgaW50ZXJydXB0LgogICoKICAqLworI2lmZGVmIENPTkZJR180MHgKKyNkZWZpbmUgUFBDXzQweF9UVVJOX09GRl9NU1JfRFIJCQkJCQkgICAgXAorCS8qIGF2b2lkIGFueSBwb3NzaWJsZSBUTEIgbWlzc2VzIGhlcmUgYnkgdHVybmluZyBvZmYgTVNSLkRSLCB3ZQkgICAgXAorCSAqIGFzc3VtZSB0aGUgaW5zdHJ1Y3Rpb25zIGhlcmUgYXJlIG1hcHBlZCBieSBhIHBpbm5lZCBUTEIgZW50cnkgKi8gXAorCWxpCXIxMCxNU1JfSVI7CQkJCQkJICAgIFwKKwltdG1zcglyMTA7CQkJCQkJCSAgICBcCisJaXN5bmM7CQkJCQkJCQkgICAgXAorCXRvcGh5cyhyMSwgcjEpOworI2Vsc2UKKyNkZWZpbmUgUFBDXzQweF9UVVJOX09GRl9NU1JfRFIKKyNlbmRpZgorCisjZGVmaW5lIFJFVF9GUk9NX0VYQ19MRVZFTChleGNfbHZsX3NycjAsIGV4Y19sdmxfc3JyMSwgZXhjX2x2bF9yZmkpCVwKKwlSRVNUX05WR1BSUyhyMSk7CQkJCQkJXAorCWx3eglyMyxfTVNSKHIxKTsJCQkJCQlcCisJYW5kaS4JcjMscjMsTVNSX1BSOwkJCQkJCVwKKwlMT0FEX01TUl9LRVJORUwocjEwLE1TUl9LRVJORUwpOwkJCQlcCisJYm5lCXVzZXJfZXhjX3JldHVybjsJCQkJCVwKKwlsd3oJcjAsR1BSMChyMSk7CQkJCQkJXAorCWx3eglyMixHUFIyKHIxKTsJCQkJCQlcCisJUkVTVF80R1BSUygzLCByMSk7CQkJCQkJXAorCVJFU1RfMkdQUlMoNywgcjEpOwkJCQkJCVwKKwlsd3oJcjEwLF9YRVIocjEpOwkJCQkJCVwKKwlsd3oJcjExLF9DVFIocjEpOwkJCQkJCVwKKwltdHNwcglTUFJOX1hFUixyMTA7CQkJCQkJXAorCW10Y3RyCXIxMTsJCQkJCQkJXAorCVBQQzQwNV9FUlI3NygwLHIxKTsJCQkJCQlcCisJc3R3Y3guCXIwLDAscjE7CQkvKiB0byBjbGVhciB0aGUgcmVzZXJ2YXRpb24gKi8JXAorCWx3eglyMTEsX0xJTksocjEpOwkJCQkJCVwKKwltdGxyCXIxMTsJCQkJCQkJXAorCWx3eglyMTAsX0NDUihyMSk7CQkJCQkJXAorCW10Y3JmCTB4ZmYscjEwOwkJCQkJCVwKKwlQUENfNDB4X1RVUk5fT0ZGX01TUl9EUjsJCQkJCVwKKwlsd3oJcjksX0RFQVIocjEpOwkJCQkJCVwKKwlsd3oJcjEwLF9FU1IocjEpOwkJCQkJCVwKKwltdHNwcglTUFJOX0RFQVIscjk7CQkJCQkJXAorCW10c3ByCVNQUk5fRVNSLHIxMDsJCQkJCQlcCisJbHd6CXIxMSxfTklQKHIxKTsJCQkJCQlcCisJbHd6CXIxMixfTVNSKHIxKTsJCQkJCQlcCisJbXRzcHIJZXhjX2x2bF9zcnIwLHIxMTsJCQkJCVwKKwltdHNwcglleGNfbHZsX3NycjEscjEyOwkJCQkJXAorCWx3eglyOSxHUFI5KHIxKTsJCQkJCQlcCisJbHd6CXIxMixHUFIxMihyMSk7CQkJCQkJXAorCWx3eglyMTAsR1BSMTAocjEpOwkJCQkJCVwKKwlsd3oJcjExLEdQUjExKHIxKTsJCQkJCQlcCisJbHd6CXIxLEdQUjEocjEpOwkJCQkJCVwKKwlQUEM0MDVfRVJSNzdfU1lOQzsJCQkJCQlcCisJZXhjX2x2bF9yZmk7CQkJCQkJCVwKKwliCS47CQkvKiBwcmV2ZW50IHByZWZldGNoIHBhc3QgZXhjX2x2bF9yZmkgKi8KKwogCS5nbG9ibAlyZXRfZnJvbV9jcml0X2V4YwogcmV0X2Zyb21fY3JpdF9leGM6Ci0JUkVTVF9OVkdQUlMocjEpCi0JbHd6CXIzLF9NU1IocjEpCi0JYW5kaS4JcjMscjMsTVNSX1BSCi0JTE9BRF9NU1JfS0VSTkVMKHIxMCxNU1JfS0VSTkVMKQotCWJuZQl1c2VyX2V4Y19yZXR1cm4KLQotCWx3eglyMCxHUFIwKHIxKQotCWx3eglyMixHUFIyKHIxKQotCVJFU1RfNEdQUlMoMywgcjEpCi0JUkVTVF8yR1BSUyg3LCByMSkKLQotCWx3eglyMTAsX1hFUihyMSkKLQlsd3oJcjExLF9DVFIocjEpCi0JbXRzcHIJU1BSTl9YRVIscjEwCi0JbXRjdHIJcjExCi0KLQlQUEM0MDVfRVJSNzcoMCxyMSkKLQlzdHdjeC4JcjAsMCxyMQkJCS8qIHRvIGNsZWFyIHRoZSByZXNlcnZhdGlvbiAqLwotCi0JbHd6CXIxMSxfTElOSyhyMSkKLQltdGxyCXIxMQotCWx3eglyMTAsX0NDUihyMSkKLQltdGNyZgkweGZmLHIxMAotI2lmZGVmIENPTkZJR180MHgKLQkvKiBhdm9pZCBhbnkgcG9zc2libGUgVExCIG1pc3NlcyBoZXJlIGJ5IHR1cm5pbmcgb2ZmIE1TUi5EUiwgd2UKLQkgKiBhc3N1bWUgdGhlIGluc3RydWN0aW9ucyBoZXJlIGFyZSBtYXBwZWQgYnkgYSBwaW5uZWQgVExCIGVudHJ5ICovCi0JbGkJcjEwLE1TUl9JUgotCW10bXNyCXIxMAotCWlzeW5jCi0JdG9waHlzKHIxLCByMSkKLSNlbmRpZgotCWx3eglyOSxfREVBUihyMSkKLQlsd3oJcjEwLF9FU1IocjEpCi0JbXRzcHIJU1BSTl9ERUFSLHI5Ci0JbXRzcHIJU1BSTl9FU1IscjEwCi0JbHd6CXIxMSxfTklQKHIxKQotCWx3eglyMTIsX01TUihyMSkKLQltdHNwcglTUFJOX0NTUlIwLHIxMQotCW10c3ByCVNQUk5fQ1NSUjEscjEyCi0JbHd6CXI5LEdQUjkocjEpCi0JbHd6CXIxMixHUFIxMihyMSkKLQlsd3oJcjEwLEdQUjEwKHIxKQotCWx3eglyMTEsR1BSMTEocjEpCi0JbHd6CXIxLEdQUjEocjEpCi0JUFBDNDA1X0VSUjc3X1NZTkMKLQlyZmNpCi0JYgkuCQkvKiBwcmV2ZW50IHByZWZldGNoIHBhc3QgcmZjaSAqLworCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0NTUlIwLCBTUFJOX0NTUlIxLCBSRkNJKQogCiAjaWZkZWYgQ09ORklHX0JPT0tFCi0vKgotICogUmV0dXJuIGZyb20gYSBtYWNoaW5lIGNoZWNrIGludGVycnVwdCwgc2ltaWxhciB0byBhIGNyaXRpY2FsCi0gKiBpbnRlcnJ1cHQuCi0gKi8KIAkuZ2xvYmwJcmV0X2Zyb21fbWNoZWNrX2V4YwogcmV0X2Zyb21fbWNoZWNrX2V4YzoKLQlSRVNUX05WR1BSUyhyMSkKLQlsd3oJcjMsX01TUihyMSkKLQlhbmRpLglyMyxyMyxNU1JfUFIKLQlMT0FEX01TUl9LRVJORUwocjEwLE1TUl9LRVJORUwpCi0JYm5lCXVzZXJfZXhjX3JldHVybgotCi0JbHd6CXIwLEdQUjAocjEpCi0JbHd6CXIyLEdQUjIocjEpCi0JUkVTVF80R1BSUygzLCByMSkKLQlSRVNUXzJHUFJTKDcsIHIxKQotCi0JbHd6CXIxMCxfWEVSKHIxKQotCWx3eglyMTEsX0NUUihyMSkKLQltdHNwcglTUFJOX1hFUixyMTAKLQltdGN0cglyMTEKLQotCXN0d2N4LglyMCwwLHIxCQkJLyogdG8gY2xlYXIgdGhlIHJlc2VydmF0aW9uICovCi0KLQlsd3oJcjExLF9MSU5LKHIxKQotCW10bHIJcjExCi0JbHd6CXIxMCxfQ0NSKHIxKQotCW10Y3JmCTB4ZmYscjEwCi0JbHd6CXI5LF9ERUFSKHIxKQotCWx3eglyMTAsX0VTUihyMSkKLQltdHNwcglTUFJOX0RFQVIscjkKLQltdHNwcglTUFJOX0VTUixyMTAKLQlsd3oJcjExLF9OSVAocjEpCi0JbHd6CXIxMixfTVNSKHIxKQotCW10c3ByCVNQUk5fTUNTUlIwLHIxMQotCW10c3ByCVNQUk5fTUNTUlIxLHIxMgotCWx3eglyOSxHUFI5KHIxKQotCWx3eglyMTIsR1BSMTIocjEpCi0JbHd6CXIxMCxHUFIxMChyMSkKLQlsd3oJcjExLEdQUjExKHIxKQotCWx3eglyMSxHUFIxKHIxKQotCVJGTUNJCisJUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fTUNTUlIwLCBTUFJOX01DU1JSMSwgUkZNQ0kpCiAjZW5kaWYgLyogQ09ORklHX0JPT0tFICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF80eHguUyBiL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzR4eC5TCmluZGV4IDZmNWQzODAuLjIzZmI1MTggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzR4eC5TCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzR4eC5TCkBAIC0yOTEsOCArMjkxLDkgQEAKIAkvKiBJZiB3ZSBhcmUgZmF1bHRpbmcgYSBrZXJuZWwgYWRkcmVzcywgd2UgaGF2ZSB0byB1c2UgdGhlCiAJICoga2VybmVsIHBhZ2UgdGFibGVzLgogCSAqLwotCWFuZGlzLglyMTEsIHIxMCwgMHg4MDAwCi0JYmVxCTNmCisJbGlzCXIxMSwgVEFTS19TSVpFQGgKKwljbXBsdwlyMTAsIHIxMQorCWJsdCsJM2YKIAlsaXMJcjExLCBzd2FwcGVyX3BnX2RpckBoCiAJb3JpCXIxMSwgcjExLCBzd2FwcGVyX3BnX2RpckBsCiAJbGkJcjksIDAKQEAgLTQ3OSw4ICs0ODAsOSBAQAogCS8qIElmIHdlIGFyZSBmYXVsdGluZyBhIGtlcm5lbCBhZGRyZXNzLCB3ZSBoYXZlIHRvIHVzZSB0aGUKIAkgKiBrZXJuZWwgcGFnZSB0YWJsZXMuCiAJICovCi0JYW5kaXMuCXIxMSwgcjEwLCAweDgwMDAKLQliZXEJM2YKKwlsaXMJcjExLCBUQVNLX1NJWkVAaAorCWNtcGx3CXIxMCwgcjExCisJYmx0KwkzZgogCWxpcwlyMTEsIHN3YXBwZXJfcGdfZGlyQGgKIAlvcmkJcjExLCByMTEsIHN3YXBwZXJfcGdfZGlyQGwKIAlsaQlyOSwgMApAQCAtNTc4LDggKzU4MCw5IEBACiAJLyogSWYgd2UgYXJlIGZhdWx0aW5nIGEga2VybmVsIGFkZHJlc3MsIHdlIGhhdmUgdG8gdXNlIHRoZQogCSAqIGtlcm5lbCBwYWdlIHRhYmxlcy4KIAkgKi8KLQlhbmRpcy4JcjExLCByMTAsIDB4ODAwMAotCWJlcQkzZgorCWxpcwlyMTEsIFRBU0tfU0laRUBoCisJY21wbHcJcjEwLCByMTEKKwlibHQrCTNmCiAJbGlzCXIxMSwgc3dhcHBlcl9wZ19kaXJAaAogCW9yaQlyMTEsIHIxMSwgc3dhcHBlcl9wZ19kaXJAbAogCWxpCXI5LCAwCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfYm9va2UuaAppbmRleCBmMjEzZDEyLi45YzUwZjlkIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmgKQEAgLTY3LDQ2ICs2NywzNiBAQAogI2RlZmluZSBDUklUX1NUQUNLX1RPUAkJKGV4Y2VwdGlvbl9zdGFja190b3ApCiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIEJPT0tFX0xPQURfQ1JJVF9TVEFDSwkJCQlcCisjZGVmaW5lIEJPT0tFX0xPQURfRVhDX0xFVkVMX1NUQUNLKGxldmVsKQkJXAogCW1mc3ByCXI4LFNQUk5fUElSOwkJCQlcCiAJbXVsbGkJcjgscjgsQk9PS0VfRVhDRVBUSU9OX1NUQUNLX1NJWkU7CVwKIAluZWcJcjgscjg7CQkJCQlcCi0JYWRkaXMJcjgscjgsQ1JJVF9TVEFDS19UT1BAaGE7CQlcCi0JYWRkaQlyOCxyOCxDUklUX1NUQUNLX1RPUEBsCi0jZGVmaW5lIEJPT0tFX0xPQURfTUNIRUNLX1NUQUNLCQkJCVwKLQltZnNwcglyOCxTUFJOX1BJUjsJCQkJXAotCW11bGxpCXI4LHI4LEJPT0tFX0VYQ0VQVElPTl9TVEFDS19TSVpFOwlcCi0JbmVnCXI4LHI4OwkJCQkJXAotCWFkZGlzCXI4LHI4LE1DSEVDS19TVEFDS19UT1BAaGE7CQlcCi0JYWRkaQlyOCxyOCxNQ0hFQ0tfU1RBQ0tfVE9QQGwKKwlhZGRpcwlyOCxyOCxsZXZlbCMjX1NUQUNLX1RPUEBoYTsJCVwKKwlhZGRpCXI4LHI4LGxldmVsIyNfU1RBQ0tfVE9QQGwKICNlbHNlCi0jZGVmaW5lIEJPT0tFX0xPQURfQ1JJVF9TVEFDSwkJCQlcCi0JbGlzCXI4LENSSVRfU1RBQ0tfVE9QQGg7CQkJXAotCW9yaQlyOCxyOCxDUklUX1NUQUNLX1RPUEBsCi0jZGVmaW5lIEJPT0tFX0xPQURfTUNIRUNLX1NUQUNLCQkJCVwKLQlsaXMJcjgsTUNIRUNLX1NUQUNLX1RPUEBoOwkJCVwKLQlvcmkJcjgscjgsTUNIRUNLX1NUQUNLX1RPUEBsCisjZGVmaW5lIEJPT0tFX0xPQURfRVhDX0xFVkVMX1NUQUNLKGxldmVsKQkJXAorCWxpcwlyOCxsZXZlbCMjX1NUQUNLX1RPUEBoOwkJCVwKKwlvcmkJcjgscjgsbGV2ZWwjI19TVEFDS19UT1BAbAogI2VuZGlmCiAKIC8qCi0gKiBFeGNlcHRpb24gcHJvbG9nIGZvciBjcml0aWNhbCBleGNlcHRpb25zLiAgVGhpcyBpcyBhIGxpdHRsZSBkaWZmZXJlbnQKLSAqIGZyb20gdGhlIG5vcm1hbCBleGNlcHRpb24gcHJvbG9nIGFib3ZlIHNpbmNlIGEgY3JpdGljYWwgZXhjZXB0aW9uCi0gKiBjYW4gcG90ZW50aWFsbHkgb2NjdXIgYXQgYW55IHBvaW50IGR1cmluZyBub3JtYWwgZXhjZXB0aW9uIHByb2Nlc3NpbmcuCi0gKiBUaHVzIHdlIGNhbm5vdCB1c2UgdGhlIHNhbWUgU1BSRyByZWdpc3RlcnMgYXMgdGhlIG5vcm1hbCBwcm9sb2cgYWJvdmUuCi0gKiBJbnN0ZWFkIHdlIHVzZSBhIHBvcnRpb24gb2YgdGhlIGNyaXRpY2FsIGV4Y2VwdGlvbiBzdGFjayBhdCBsb3cgcGh5c2ljYWwKLSAqIGFkZHJlc3Nlcy4KKyAqIEV4Y2VwdGlvbiBwcm9sb2cgZm9yIGNyaXRpY2FsL21hY2hpbmUgY2hlY2sgZXhjZXB0aW9ucy4gIFRoaXMgaXMgYQorICogbGl0dGxlIGRpZmZlcmVudCBmcm9tIHRoZSBub3JtYWwgZXhjZXB0aW9uIHByb2xvZyBhYm92ZSBzaW5jZSBhCisgKiBjcml0aWNhbC9tYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBjYW4gcG90ZW50aWFsbHkgb2NjdXIgYXQgYW55IHBvaW50CisgKiBkdXJpbmcgbm9ybWFsIGV4Y2VwdGlvbiBwcm9jZXNzaW5nLiBUaHVzIHdlIGNhbm5vdCB1c2UgdGhlIHNhbWUgU1BSRworICogcmVnaXN0ZXJzIGFzIHRoZSBub3JtYWwgcHJvbG9nIGFib3ZlLiBJbnN0ZWFkIHdlIHVzZSBhIHBvcnRpb24gb2YgdGhlCisgKiBjcml0aWNhbC9tYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBzdGFjayBhdCBsb3cgcGh5c2ljYWwgYWRkcmVzc2VzLgogICovCi0KLSNkZWZpbmUgQ1JJVElDQUxfRVhDRVBUSU9OX1BST0xPRwkJCQkJICAgICBcCi0JbXRzcHIJQ1JJVF9TUFJHLHI4OwkJCQkJCSAgICAgXAotCUJPT0tFX0xPQURfQ1JJVF9TVEFDSzsJCS8qIHI4IHBvaW50cyB0byB0aGUgY3JpdCBzdGFjayAqLyAgICBcCisjZGVmaW5lIEVYQ19MRVZFTF9FWENFUFRJT05fUFJPTE9HKGV4Y19sZXZlbCwgZXhjX2xldmVsX3NycjAsIGV4Y19sZXZlbF9zcnIxKSBcCisJbXRzcHIJZXhjX2xldmVsIyNfU1BSRyxyODsJCQkJCSAgICAgXAorCUJPT0tFX0xPQURfRVhDX0xFVkVMX1NUQUNLKGV4Y19sZXZlbCk7LyogcjggcG9pbnRzIHRvIHRoZSBleGNfbGV2ZWwgc3RhY2sqLyBcCiAJc3R3CXIxMCxHUFIxMC1JTlRfRlJBTUVfU0laRShyOCk7CQkJCSAgICAgXAogCXN0dwlyMTEsR1BSMTEtSU5UX0ZSQU1FX1NJWkUocjgpOwkJCQkgICAgIFwKIAltZmNyCXIxMDsJCQkvKiBzYXZlIENSIGluIHIxMCBmb3Igbm93CSAgICovXAotCW1mc3ByCXIxMSxTUFJOX0NTUlIxOwkJLyogY2hlY2sgd2hldGhlciB1c2VyIG9yIGtlcm5lbCAgICAqL1wKKwltZnNwcglyMTEsZXhjX2xldmVsX3NycjE7CS8qIGNoZWNrIHdoZXRoZXIgdXNlciBvciBrZXJuZWwgICAgKi9cCiAJYW5kaS4JcjExLHIxMSxNU1JfUFI7CQkJCQkJICAgICBcCiAJbXIJcjExLHI4OwkJCQkJCQkgICAgIFwKLQltZnNwcglyOCxDUklUX1NQUkc7CQkJCQkJICAgICBcCisJbWZzcHIJcjgsZXhjX2xldmVsIyNfU1BSRzsJCQkJCSAgICAgXAogCWJlcQkxZjsJCQkJCQkJICAgICBcCiAJLyogQ09NSU5HIEZST00gVVNFUiBNT0RFICovCQkJCQkgICAgIFwKIAltZnNwcglyMTEsU1BSTl9TUFJHMzsJCS8qIGlmIGZyb20gdXNlciwgc3RhcnQgYXQgdG9wIG9mICAgKi9cCkBAIC0xMjIsOSArMTEyLDkgQEAKIAlzdHcJcjEyLF9ERUFSKHIxMSk7CQkvKiBzaW5jZSB0aGV5IG1heSBoYXZlIGhhZCBzdHVmZiAgICovXAogCW1mc3ByCXI5LFNQUk5fRVNSOwkJLyogaW4gdGhlbSBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlICAqL1wKIAlzdHcJcjksX0VTUihyMTEpOwkJLyogZXhjZXB0aW9uIHdhcyB0YWtlbgkJICAgKi9cCi0JbWZzcHIJcjEyLFNQUk5fQ1NSUjA7CQkJCQkJICAgICBcCisJbWZzcHIJcjEyLGV4Y19sZXZlbF9zcnIwOwkJCQkJICAgICBcCiAJc3R3CXIxLEdQUjEocjExKTsJCQkJCQkgICAgIFwKLQltZnNwcglyOSxTUFJOX0NTUlIxOwkJCQkJCSAgICAgXAorCW1mc3ByCXI5LGV4Y19sZXZlbF9zcnIxOwkJCQkJICAgICBcCiAJc3R3CXIxLDAocjExKTsJCQkJCQkgICAgIFwKIAltcglyMSxyMTE7CQkJCQkJCSAgICAgXAogCXJsd2lubQlyOSxyOSwwLDE0LDEyOwkJLyogY2xlYXIgTVNSX1dFIChuZWNlc3Nhcnk/KQkgICAqL1wKQEAgLTEzMiw0NSArMTIyLDEwIEBACiAJU0FWRV80R1BSUygzLCByMTEpOwkJCQkJCSAgICAgXAogCVNBVkVfMkdQUlMoNywgcjExKQogCi0vKgotICogRXhjZXB0aW9uIHByb2xvZyBmb3IgbWFjaGluZSBjaGVjayBleGNlcHRpb25zLiAgVGhpcyBpcyBzaW1pbGFyIHRvCi0gKiB0aGUgY3JpdGljYWwgZXhjZXB0aW9uIHByb2xvZywgZXhjZXB0IHRoYXQgbWFjaGluZSBjaGVjayBleGNlcHRpb25zCi0gKiBoYXZlIHRoZWlyIHN0YWNrLgotICovCi0jZGVmaW5lIE1DSEVDS19FWENFUFRJT05fUFJPTE9HCQkJCQkgICAgIFwKLQltdHNwcglNQ0hFQ0tfU1BSRyxyODsJCQkJCQkgICAgIFwKLQlCT09LRV9MT0FEX01DSEVDS19TVEFDSzsJLyogcjggcG9pbnRzIHRvIHRoZSBtY2hlY2sgc3RhY2sgICAqL1wKLQlzdHcJcjEwLEdQUjEwLUlOVF9GUkFNRV9TSVpFKHI4KTsJCQkJICAgICBcCi0Jc3R3CXIxMSxHUFIxMS1JTlRfRlJBTUVfU0laRShyOCk7CQkJCSAgICAgXAotCW1mY3IJcjEwOwkJCS8qIHNhdmUgQ1IgaW4gcjEwIGZvciBub3cJICAgKi9cCi0JbWZzcHIJcjExLFNQUk5fTUNTUlIxOwkvKiBjaGVjayB3aGV0aGVyIHVzZXIgb3Iga2VybmVsICAgICovXAotCWFuZGkuCXIxMSxyMTEsTVNSX1BSOwkJCQkJCSAgICAgXAotCW1yCXIxMSxyODsJCQkJCQkJICAgICBcCi0JbWZzcHIJcjgsTUNIRUNLX1NQUkc7CQkJCQkJICAgICBcCi0JYmVxCTFmOwkJCQkJCQkgICAgIFwKLQkvKiBDT01JTkcgRlJPTSBVU0VSIE1PREUgKi8JCQkJCSAgICAgXAotCW1mc3ByCXIxMSxTUFJOX1NQUkczOwkJLyogaWYgZnJvbSB1c2VyLCBzdGFydCBhdCB0b3Agb2YgICAqL1wKLQlsd3oJcjExLFRIUkVBRF9JTkZPLVRIUkVBRChyMTEpOyAvKiB0aGlzIHRocmVhZCdzIGtlcm5lbCBzdGFjayAqL1wKLQlhZGRpCXIxMSxyMTEsVEhSRUFEX1NJWkU7CQkJCQkgICAgIFwKLTE6CXN1YmkJcjExLHIxMSxJTlRfRlJBTUVfU0laRTsJLyogQWxsb2NhdGUgYW4gZXhjZXB0aW9uIGZyYW1lICAgICAqL1wKLQlzdHcJcjEwLF9DQ1IocjExKTsgICAgICAgICAgLyogc2F2ZSB2YXJpb3VzIHJlZ2lzdGVycwkgICAqL1wKLQlzdHcJcjEyLEdQUjEyKHIxMSk7CQkJCQkJICAgICBcCi0Jc3R3CXI5LEdQUjkocjExKTsJCQkJCQkgICAgIFwKLQltZmxyCXIxMDsJCQkJCQkJICAgICBcCi0Jc3R3CXIxMCxfTElOSyhyMTEpOwkJCQkJCSAgICAgXAotCW1mc3ByCXIxMixTUFJOX0RFQVI7CQkvKiBzYXZlIERFQVIgYW5kIEVTUiBpbiB0aGUgZnJhbWUgICovXAotCXN0dwlyMTIsX0RFQVIocjExKTsJCS8qIHNpbmNlIHRoZXkgbWF5IGhhdmUgaGFkIHN0dWZmICAgKi9cCi0JbWZzcHIJcjksU1BSTl9FU1I7CQkvKiBpbiB0aGVtIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgICovXAotCXN0dwlyOSxfRVNSKHIxMSk7CQkvKiBleGNlcHRpb24gd2FzIHRha2VuCQkgICAqL1wKLQltZnNwcglyMTIsU1BSTl9NQ1NSUjA7CQkJCQkgICAgIFwKLQlzdHcJcjEsR1BSMShyMTEpOwkJCQkJCSAgICAgXAotCW1mc3ByCXI5LFNQUk5fTUNTUlIxOwkJCQkJCSAgICAgXAotCXN0dwlyMSwwKHIxMSk7CQkJCQkJICAgICBcCi0JbXIJcjEscjExOwkJCQkJCQkgICAgIFwKLQlybHdpbm0JcjkscjksMCwxNCwxMjsJCS8qIGNsZWFyIE1TUl9XRSAobmVjZXNzYXJ5PykJICAgKi9cCi0Jc3R3CXIwLEdQUjAocjExKTsJCQkJCQkgICAgIFwKLQlTQVZFXzRHUFJTKDMsIHIxMSk7CQkJCQkJICAgICBcCi0JU0FWRV8yR1BSUyg3LCByMTEpCisjZGVmaW5lIENSSVRJQ0FMX0VYQ0VQVElPTl9QUk9MT0cgXAorCQlFWENfTEVWRUxfRVhDRVBUSU9OX1BST0xPRyhDUklULCBTUFJOX0NTUlIwLCBTUFJOX0NTUlIxKQorI2RlZmluZSBNQ0hFQ0tfRVhDRVBUSU9OX1BST0xPRyBcCisJCUVYQ19MRVZFTF9FWENFUFRJT05fUFJPTE9HKE1DSEVDSywgU1BSTl9NQ1NSUjAsIFNQUk5fTUNTUlIxKQogCiAvKgogICogRXhjZXB0aW9uIHZlY3RvcnMuCkBAIC0yMzcsNyArMTkyLDYgQEAKIAlFWENfWEZFUl9URU1QTEFURShoZGxyLCBuKzEsIE1TUl9LRVJORUwsIENPUFlfRUUsIHRyYW5zZmVyX3RvX2hhbmRsZXIsIFwKIAkJCSAgcmV0X2Zyb21fZXhjZXB0KQogCi0KIC8qIENoZWNrIGZvciBhIHNpbmdsZSBzdGVwIGRlYnVnIGV4Y2VwdGlvbiB3aGlsZSBpbiBhbiBleGNlcHRpb24KICAqIGhhbmRsZXIgYmVmb3JlIHN0YXRlIGhhcyBiZWVuIHNhdmVkLiAgVGhpcyBpcyB0byBjYXRjaCB0aGUgY2FzZQogICogd2hlcmUgYW4gaW5zdHJ1Y3Rpb24gdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIHNpbmdsZSBzdGVwIGNhdXNlcwpAQCAtMjkxLDcgKzI0NSw3IEBACiAJbHd6CXI5LEdQUjkocjExKTsJCQkJCQkgICAgICBcCiAJbHd6CXIxMixHUFIxMihyMTEpOwkJCQkJCSAgICAgIFwKIAltdHNwcglDUklUX1NQUkcscjg7CQkJCQkJICAgICAgXAotCUJPT0tFX0xPQURfQ1JJVF9TVEFDSzsJCS8qIHI4IHBvaW50cyB0byB0aGUgY3JpdCBzdGFjayAqLyAgICAgXAorCUJPT0tFX0xPQURfRVhDX0xFVkVMX1NUQUNLKENSSVQpOyAvKiByOCBwb2ludHMgdG8gdGhlIGRlYnVnIHN0YWNrICovICBcCiAJbHd6CXIxMCxHUFIxMC1JTlRfRlJBTUVfU0laRShyOCk7CQkJCSAgICAgIFwKIAlsd3oJcjExLEdQUjExLUlOVF9GUkFNRV9TSVpFKHI4KTsJCQkJICAgICAgXAogCW1mc3ByCXI4LENSSVRfU1BSRzsJCQkJCQkgICAgICBcCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCmluZGV4IDVjMjAyNjYuLmM0MmY3NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vb2NwLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR184NXh4KSB8fCBkZWZpbmVkKENPTkZJR184M3h4KQorI2lmIGRlZmluZWQoQ09ORklHXzg1eHgpIHx8IGRlZmluZWQoQ09ORklHXzgzeHgpIHx8IGRlZmluZWQoQ09ORklHX01QQzEwWF9CUklER0UpCiAjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KICNlbmRpZgogCkBAIC02MSw4ICs2MSw2IEBACiAKIGV4dGVybiBib290X2luZm9zX3QgKmJvb3RfaW5mb3M7CiBzdHJ1Y3QgaWRlX21hY2hkZXBfY2FsbHMgcHBjX2lkZV9tZDsKLWNoYXIgKnN5c21hcDsKLXVuc2lnbmVkIGxvbmcgc3lzbWFwX3NpemU7CiAKIC8qIFVzZWQgd2l0aCB0aGUgQklfTUVNU0laRSBib290aW5mbyBwYXJhbWV0ZXIgdG8gc3RvcmUgdGhlIG1lbW9yeQogICAgc2l6ZSB2YWx1ZSByZXBvcnRlZCBieSB0aGUgYm9vdCBsb2FkZXIuICovCkBAIC0yNDksNyArMjQ3LDcgQEAKIAlzZXFfcHJpbnRmKG0sICJib2dvbWlwc1x0OiAlbHUuJTAybHVcbiIsCiAJCSAgIGxwaiAvICg1MDAwMDAvSFopLCAobHBqIC8gKDUwMDAvSFopKSAlIDEwMCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR184NXh4KSB8fCBkZWZpbmVkKENPTkZJR184M3h4KQorI2lmIGRlZmluZWQoQ09ORklHXzg1eHgpIHx8IGRlZmluZWQoQ09ORklHXzgzeHgpIHx8IGRlZmluZWQoQ09ORklHX01QQzEwWF9CUklER0UpCiAJaWYgKGN1cl9wcGNfc3lzX3NwZWMtPnBwY19zeXNfbmFtZSkKIAkJc2VxX3ByaW50ZihtLCAiY2hpcHNldFx0XHQ6ICVzXG4iLAogCQkJY3VyX3BwY19zeXNfc3BlYy0+cHBjX3N5c19uYW1lKTsKQEAgLTU3OCwxMSArNTc2LDYgQEAKIAkJY2FzZSBCSV9DTURfTElORToKIAkJCXN0cmxjcHkoY21kX2xpbmUsICh2b2lkICopZGF0YSwgc2l6ZW9mKGNtZF9saW5lKSk7CiAJCQlicmVhazsKLQkJY2FzZSBCSV9TWVNNQVA6Ci0JCQlzeXNtYXAgPSAoY2hhciAqKSgoZGF0YVswXSA+PSAoS0VSTkVMQkFTRSkpID8gZGF0YVswXSA6Ci0JCQkJCSAgKGRhdGFbMF0rS0VSTkVMQkFTRSkpOwotCQkJc3lzbWFwX3NpemUgPSBkYXRhWzFdOwotCQkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJCWNhc2UgQklfSU5JVFJEOgogCQkJaW5pdHJkX3N0YXJ0ID0gZGF0YVswXSArIEtFUk5FTEJBU0U7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCmluZGV4IGM2NTczMWUuLjJjYThlY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCkBAIC04MSw4ICs4MSwxMCBAQAogCWNvbnNvbGVfdmVyYm9zZSgpOwogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKICNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQlzZXRfYmFja2xpZ2h0X2VuYWJsZSgxKTsKLQlzZXRfYmFja2xpZ2h0X2xldmVsKEJBQ0tMSUdIVF9NQVgpOworCWlmIChfbWFjaGluZSA9PSBfTUFDSF9QbWFjKSB7CisJCXNldF9iYWNrbGlnaHRfZW5hYmxlKDEpOworCQlzZXRfYmFja2xpZ2h0X2xldmVsKEJBQ0tMSUdIVF9NQVgpOworCX0KICNlbmRpZgogCXByaW50aygiT29wczogJXMsIHNpZzogJWxkIFsjJWRdXG4iLCBzdHIsIGVyciwgKytkaWVfY291bnRlcik7CiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2xpYi9sb2Nrcy5jIGIvYXJjaC9wcGMvbGliL2xvY2tzLmMKaW5kZXggNjk0MTYzZC4uYzQ1MGRjNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbGliL2xvY2tzLmMKKysrIGIvYXJjaC9wcGMvbGliL2xvY2tzLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCQl3aGlsZSAoIXJlYWRfY2FuX2xvY2socncpKSB7CiAJCQlpZiAoLS1zdHVjayA9PSAwKSB7CiAJCQkJcHJpbnRrKCJfcmVhZF9sb2NrKCVwKSBDUFUjJWQgbG9jayAlZFxuIiwKLQkJCQkgICAgICAgcncsIF9zbXBfcHJvY2Vzc29yX2lkKCksIHJ3LT5sb2NrKTsKKwkJCQkgICAgICAgcncsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIHJ3LT5sb2NrKTsKIAkJCQlzdHVjayA9IElOSVRfU1RVQ0s7CiAJCQl9CiAJCX0KQEAgLTE1OCw3ICsxNTgsNyBAQAogCQl3aGlsZSAoIXdyaXRlX2Nhbl9sb2NrKHJ3KSkgewogCQkJaWYgKC0tc3R1Y2sgPT0gMCkgewogCQkJCXByaW50aygid3JpdGVfbG9jayglcCkgQ1BVIyVkIGxvY2sgJWQpXG4iLAotCQkJCSAgICAgICBydywgX3NtcF9wcm9jZXNzb3JfaWQoKSwgcnctPmxvY2spOworCQkJCSAgICAgICBydywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgcnctPmxvY2spOwogCQkJCXN0dWNrID0gSU5JVF9TVFVDSzsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbW0vZnNsX2Jvb2tlX21tdS5jIGIvYXJjaC9wcGMvbW0vZnNsX2Jvb2tlX21tdS5jCmluZGV4IDM2MjMzYmQuLmUwNzk5MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL21tL2ZzbF9ib29rZV9tbXUuYworKysgYi9hcmNoL3BwYy9tbS9mc2xfYm9va2VfbW11LmMKQEAgLTY0LDYgKzY0LDggQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fbWF4X2xvd19tZW1vcnk7CiAjZGVmaW5lIE1BWF9MT1dfTUVNCUNPTkZJR19MT1dNRU1fU0laRQogCisjZGVmaW5lIE5VTV9UTEJDQU1TCSgxNikKKwogc3RydWN0IHRsYmNhbSB7CiAgICAJdTMyCU1BUzA7CiAJdTMyCU1BUzE7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9tbS9pbml0LmMgYi9hcmNoL3BwYy9tbS9pbml0LmMKaW5kZXggMzYzYzE1Ny4uMzM0ZWY0MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vaW5pdC5jCisrKyBiL2FyY2gvcHBjL21tL2luaXQuYwpAQCAtOTYsOSArOTYsNiBAQAogY2hhciAqa2xpbWl0ID0gX2VuZDsKIHN0cnVjdCBtZW1fcGllY2VzIHBoeXNfYXZhaWw7CiAKLWV4dGVybiBjaGFyICpzeXNtYXA7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzeXNtYXBfc2l6ZTsKLQogLyoKICAqIHRoaXMgdGVsbHMgdGhlIHN5c3RlbSB0byBtYXAgYWxsIG9mIHJhbSB3aXRoIHRoZSBzZWdyZWdzCiAgKiAoaS5lLiBwYWdlIHRhYmxlcykgaW5zdGVhZCBvZiB0aGUgYmF0cy4KQEAgLTQ0MiwxMiArNDM5LDYgQEAKIAlpZiAoYWdwX3NwZWNpYWxfcGFnZSkKIAkJU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZ3Bfc3BlY2lhbF9wYWdlKSk7CiAjZW5kaWYKLQlpZiAoIHN5c21hcCApCi0JCWZvciAoYWRkciA9ICh1bnNpZ25lZCBsb25nKXN5c21hcDsKLQkJICAgICBhZGRyIDwgUEFHRV9BTElHTigodW5zaWduZWQgbG9uZylzeXNtYXArc3lzbWFwX3NpemUpIDsKLQkJICAgICBhZGRyICs9IFBBR0VfU0laRSkKLQkJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwotCiAJZm9yIChhZGRyID0gUEFHRV9PRkZTRVQ7IGFkZHIgPCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeTsKIAkgICAgIGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCWlmICghUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSkpCkBAIC00NjksNyArNDYwLDYgQEAKIAkJCXN0cnVjdCBwYWdlICpwYWdlID0gbWVtX21hcCArIHBmbjsKIAogCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JCQlzZXRfYml0KFBHX2hpZ2htZW0sICZwYWdlLT5mbGFncyk7CiAJCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKIAkJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCQkJdG90YWxoaWdoX3BhZ2VzKys7CkBAIC00ODMsOSArNDczLDcgQEAKIAkgICAgICAgY29kZXBhZ2VzPDwgKFBBR0VfU0hJRlQtMTApLCBkYXRhcGFnZXM8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIGluaXRwYWdlczw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcpICh0b3RhbGhpZ2hfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKSk7Ci0JaWYgKHN5c21hcCkKLQkJcHJpbnRrKCJTeXN0ZW0ubWFwIGxvYWRlZCBhdCAweCUwOHggZm9yIGRlYnVnZ2VyLCBzaXplOiAlbGQgYnl0ZXNcbiIsCi0JCQkodW5zaWduZWQgaW50KXN5c21hcCwgc3lzbWFwX3NpemUpOworCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJaWYgKGFncF9zcGVjaWFsX3BhZ2UpCiAJCXByaW50ayhLRVJOX0lORk8gIkFHUCBzcGVjaWFsIHBhZ2U6IDB4JTA4bHhcbiIsIGFncF9zcGVjaWFsX3BhZ2UpOwpAQCAtNTM1LDkgKzUyMyw2IEBACiAJaWYgKHJ0YXNfZGF0YSkKIAkJbWVtX3BpZWNlc19yZW1vdmUoJnBoeXNfYXZhaWwsIHJ0YXNfZGF0YSwgcnRhc19zaXplLCAxKTsKICNlbmRpZgotCS8qIHJlbW92ZSB0aGUgc3lzbWFwIHBhZ2VzIGZyb20gdGhlIGF2YWlsYWJsZSBtZW1vcnkgKi8KLQlpZiAoc3lzbWFwKQotCQltZW1fcGllY2VzX3JlbW92ZSgmcGh5c19hdmFpbCwgX19wYShzeXNtYXApLCBzeXNtYXBfc2l6ZSwgMSk7CiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJLyogQmVjYXVzZSBvZiBzb21lIHVuaW5vcnRoIHdlaXJkbmVzcywgd2UgbmVlZCBhIHBhZ2Ugb2YKIAkgKiBtZW1vcnkgYXMgaGlnaCBhcyBwb3NzaWJsZSAoaXQgbXVzdCBiZSBvdXRzaWRlIG9mIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbW0vbW11X2RlY2wuaCBiL2FyY2gvcHBjL21tL21tdV9kZWNsLmgKaW5kZXggZmZjZGI0Ni4uNTQwZjMyOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vbW11X2RlY2wuaAorKysgYi9hcmNoL3BwYy9tbS9tbXVfZGVjbC5oCkBAIC00Myw2ICs0Myw4IEBACiBleHRlcm4gUFRFICpIYXNoLCAqSGFzaF9lbmQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBIYXNoX3NpemUsIEhhc2hfbWFzazsKIAorZXh0ZXJuIHVuc2lnbmVkIGludCBudW1fdGxiY2FtX2VudHJpZXM7CisKIC8qIC4uLmFuZCBub3cgdGhvc2UgdGhpbmdzIHRoYXQgbWF5IGJlIHNsaWdodGx5IGRpZmZlcmVudCBiZXR3ZWVuIHByb2Nlc3NvcgogICogYXJjaGl0ZWN0dXJlcy4gIC0tIERhbgogICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9tbS9wZ3RhYmxlLmMgYi9hcmNoL3BwYy9tbS9wZ3RhYmxlLmMKaW5kZXggNWQyZjNmNi4uODFhM2Q3NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvcHBjL21tL3BndGFibGUuYwpAQCAtNjYsNyArNjYsNiBAQAogCiAjaWZkZWYgSEFWRV9UTEJDQU0KIGV4dGVybiB1bnNpZ25lZCBpbnQgdGxiY2FtX2luZGV4OwotZXh0ZXJuIHVuc2lnbmVkIGludCBudW1fdGxiY2FtX2VudHJpZXM7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB2X21hcHBlZF9ieV90bGJjYW0odW5zaWduZWQgbG9uZyB2YSk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwX21hcHBlZF9ieV90bGJjYW0odW5zaWduZWQgbG9uZyBwYSk7CiAjZWxzZSAvKiAhSEFWRV9UTEJDQU0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5jCmluZGV4IGU2MzQ4YjUuLjg2Y2E1Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9pcGljLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCmluZGV4IGZmOTJlMzguLmM1YmMyODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwpAQCAtMjEsNiArMjEsMTEgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEMgODU0MCBBRFMgZXZhbHVhdGlvbiBib2FyZC4KIAorY29uZmlnIE1QQzg1NDhfQ0RTCisJYm9vbCAiRnJlZXNjYWxlIE1QQzg1NDggQ0RTIgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXNlIHN1cHBvcnQgZm9yIHRoZSBNUEM4NTQ4IENEUyBldmFsdWF0aW9uIGJvYXJkLgorCiBjb25maWcgTVBDODU1NV9DRFMKIAlib29sICJGcmVlc2NhbGUgTVBDODU1NSBDRFMiCiAJaGVscApAQCAtNTMsNiArNTgsMTEgQEAKIAlkZXBlbmRzIG9uIE1QQzg1NDBfQURTCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBNUEM4NTQ4CisJYm9vbAorCWRlcGVuZHMgb24gTVBDODU0OF9DRFMKKwlkZWZhdWx0IHkKKwogY29uZmlnIE1QQzg1NTUKIAlib29sCiAJZGVwZW5kcyBvbiBNUEM4NTU1X0NEUwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQppbmRleCA4NTRmYmQyLi5lZmRmODEzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQpAQCAtMiw2ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBQb3dlclBDIDg1eHggbGludXgga2VybmVsLgogIwogb2JqLSQoQ09ORklHX01QQzg1NDBfQURTKQkrPSBtcGM4NXh4X2Fkc19jb21tb24ubyBtcGM4NTQwX2Fkcy5vCitvYmotJChDT05GSUdfTVBDODU0OF9DRFMpCSs9IG1wYzg1eHhfY2RzX2NvbW1vbi5vCiBvYmotJChDT05GSUdfTVBDODU1NV9DRFMpCSs9IG1wYzg1eHhfY2RzX2NvbW1vbi5vCiBvYmotJChDT05GSUdfTVBDODU2MF9BRFMpCSs9IG1wYzg1eHhfYWRzX2NvbW1vbi5vIG1wYzg1NjBfYWRzLm8KIG9iai0kKENPTkZJR19TQkM4NTYwKQkJKz0gc2JjODV4eC5vIHNiYzg1NjAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmMKaW5kZXggNTgzODM4YS4uYTJlZDYxMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQwX2Fkcy5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL29wZW5fcGljLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KQEAgLTg4LDcgKzg3LDcgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMX1RFWFRfREVCVUcKIAkvKiBJbnZhbGlkYXRlIHRoZSBlbnRyeSB3ZSBzdG9sZSBlYXJsaWVyIHRoZSBzZXJpYWwgcG9ydHMKIAkgKiBzaG91bGQgYmUgcHJvcGVybHkgbWFwcGVkICovCi0JaW52YWxpZGF0ZV90bGJjYW1fZW50cnkoTlVNX1RMQkNBTVMgLSAxKTsKKwlpbnZhbGlkYXRlX3RsYmNhbV9lbnRyeShudW1fdGxiY2FtX2VudHJpZXMgLSAxKTsKICNlbmRpZgogCiAJLyogc2V0dXAgdGhlIGJvYXJkIHJlbGF0ZWQgaW5mb3JtYXRpb24gZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXJzICovCkBAIC0xNTAsNyArMTQ5LDcgQEAKIAkJc3RydWN0IHVhcnRfcG9ydCBwOwogCiAJCS8qIFVzZSB0aGUgbGFzdCBUTEIgZW50cnkgdG8gbWFwIENDU1JCQVIgdG8gYWxsb3cgYWNjZXNzIHRvIERVQVJUIHJlZ3MgKi8KLQkJc2V0dGxiY2FtKE5VTV9UTEJDQU1TIC0gMSwgYmluZm8tPmJpX2ltbXJfYmFzZSwKKwkJc2V0dGxiY2FtKG51bV90bGJjYW1fZW50cmllcyAtIDEsIGJpbmZvLT5iaV9pbW1yX2Jhc2UsCiAJCQkgIGJpbmZvLT5iaV9pbW1yX2Jhc2UsIE1QQzg1eHhfQ0NTUkJBUl9TSVpFLCBfUEFHRV9JTywgMCk7CiAKIAkJbWVtc2V0KCZwLCAwLCBzaXplb2YgKHApKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjBfYWRzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTYwX2Fkcy5jCmluZGV4IDc2MWI4YzcuLmQ4N2RmZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjBfYWRzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9vcGVuX3BpYy5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzX2NvbW1vbi5jCmluZGV4IGJhOWY5ZjUuLjE4ZTk1MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzX2NvbW1vbi5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzX2NvbW1vbi5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL29wZW5fcGljLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KQEAgLTU5LDQwICs1OCw4IEBACiB1bnNpZ25lZCBjaGFyIF9fcmVzW3NpemVvZiAoYmRfdCldOwogCiAvKiBJbnRlcm5hbCBpbnRlcnJ1cHRzIGFyZSBhbGwgTGV2ZWwgU2Vuc2l0aXZlLCBhbmQgUG9zaXRpdmUgUG9sYXJpdHkgKi8KLQogc3RhdGljIHVfY2hhciBtcGM4NXh4X2Fkc19vcGVucGljX2luaXRzZW5zZXNbXSBfX2luaXRkYXRhID0gewotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgMDogTDIgQ2FjaGUgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDE6IEVDTSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgMjogRERSIERSQU0gKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDM6IExCSVUgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDQ6IERNQSAwICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA1OiBETUEgMSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgNjogRE1BIDIgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDc6IERNQSAzICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA4OiBQQ0kvUENJLVggKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDk6IFJJTyBJbmJvdW5kIFBvcnQgV3JpdGUgRXJyb3IgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTA6IFJJTyBEb29yYmVsbCBJbmJvdW5kICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDExOiBSSU8gT3V0Ym91bmQgTWVzc2FnZSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxMjogUklPIEluYm91bmQgTWVzc2FnZSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxMzogVFNFQyAwIFRyYW5zbWl0ICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE0OiBUU0VDIDAgUmVjZWl2ZSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxNTogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE2OiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTc6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxODogVFNFQyAwIFJlY2VpdmUvVHJhbnNtaXQgRXJyb3IgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTk6IFRTRUMgMSBUcmFuc21pdCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyMDogVFNFQyAxIFJlY2VpdmUgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjE6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyMjogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDIzOiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjQ6IFRTRUMgMSBSZWNlaXZlL1RyYW5zbWl0IEVycm9yICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI1OiBGYXN0IEV0aGVybmV0ICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI2OiBEVUFSVCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyNzogSTJDICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI4OiBQZXJmb3JtYW5jZSBNb25pdG9yICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI5OiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzA6IENQTSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAzMTogVW51c2VkICovCisJTVBDODVYWF9JTlRFUk5BTF9JUlFfU0VOU0VTLAogCTB4MCwJCQkJCQkvKiBFeHRlcm5hbCAgMDogKi8KICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCiAJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIEV4dGVybmFsIDE6IFBDSSBzbG90IDAgKi8KQEAgLTE1OSw3ICsxMjYsNyBAQAogCS8qIFNraXAgcmVzZXJ2ZWQgc3BhY2UgYW5kIGludGVybmFsIHNvdXJjZXMgKi8KIAlvcGVucGljX3NldF9zb3VyY2VzKDAsIDMyLCBPcGVuUElDX0FkZHIgKyAweDEwMjAwKTsKIAkvKiBNYXAgUElDIElSUXMgMC0xMSAqLwotCW9wZW5waWNfc2V0X3NvdXJjZXMoMzIsIDEyLCBPcGVuUElDX0FkZHIgKyAweDEwMDAwKTsKKwlvcGVucGljX3NldF9zb3VyY2VzKDQ4LCAxMiwgT3BlblBJQ19BZGRyICsgMHgxMDAwMCk7CiAKIAkvKiB3ZSBsZXQgb3BlbnBpYyBpbnRlcnJ1cHRzIHN0YXJ0aW5nIGZyb20gYW4gb2Zmc2V0LCB0bwogCSAqIGxlYXZlIHNwYWNlIGZvciBjYXNjYWRpbmcgaW50ZXJydXB0cyB1bmRlcm5lYXRoLgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkc19jb21tb24uYwppbmRleCBlN2NmYTQ5Li4yMDNiMmNhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkc19jb21tb24uYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkc19jb21tb24uYwpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPGFzbS90b2RjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9vcGVuX3BpYy5oPgogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgpAQCAtNzMsNDAgKzcyLDggQEAKIHN0YXRpYyB2b2xhdGlsZSB1OCAqIGNhZG11czsKIAogLyogSW50ZXJuYWwgaW50ZXJydXB0cyBhcmUgYWxsIExldmVsIFNlbnNpdGl2ZSwgYW5kIFBvc2l0aXZlIFBvbGFyaXR5ICovCi0KIHN0YXRpYyB1X2NoYXIgbXBjODV4eF9jZHNfb3BlbnBpY19pbml0c2Vuc2VzW10gX19pbml0ZGF0YSA9IHsKLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDA6IEwyIENhY2hlICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICAxOiBFQ00gKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDI6IEREUiBEUkFNICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICAzOiBMQklVICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA0OiBETUEgMCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgNTogRE1BIDEgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDY6IERNQSAyICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA3OiBETUEgMyAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgODogUENJL1BDSS1YICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA5OiBSSU8gSW5ib3VuZCBQb3J0IFdyaXRlIEVycm9yICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDEwOiBSSU8gRG9vcmJlbGwgSW5ib3VuZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxMTogUklPIE91dGJvdW5kIE1lc3NhZ2UgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTI6IFJJTyBJbmJvdW5kIE1lc3NhZ2UgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTM6IFRTRUMgMCBUcmFuc21pdCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxNDogVFNFQyAwIFJlY2VpdmUgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTU6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxNjogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE3OiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTg6IFRTRUMgMCBSZWNlaXZlL1RyYW5zbWl0IEVycm9yICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE5OiBUU0VDIDEgVHJhbnNtaXQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjA6IFRTRUMgMSBSZWNlaXZlICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDIxOiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjI6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyMzogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI0OiBUU0VDIDEgUmVjZWl2ZS9UcmFuc21pdCBFcnJvciAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyNTogRmFzdCBFdGhlcm5ldCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyNjogRFVBUlQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjc6IEkyQyAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyODogUGVyZm9ybWFuY2UgTW9uaXRvciAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyOTogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDMwOiBDUE0gKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzE6IFVudXNlZCAqLworCU1QQzg1WFhfSU5URVJOQUxfSVJRX1NFTlNFUywKICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCiAJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIEV4dGVybmFsIDA6IFBDSTEgc2xvdCAqLwogCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkUpLAkvKiBFeHRlcm5hbCAxOiBQQ0kxIHNsb3QgKi8KQEAgLTE4Miw3ICsxNDksNiBAQAogbXBjODV4eF9jZHNfaW5pdF9JUlEodm9pZCkKIHsKIAliZF90ICpiaW5mbyA9IChiZF90ICopIF9fcmVzOwotCWludCBpOwogCiAJLyogRGV0ZXJtaW5lIHRoZSBQaHlzaWNhbCBBZGRyZXNzIG9mIHRoZSBPcGVuUElDIHJlZ3MgKi8KIAlwaHlzX2FkZHJfdCBPcGVuUElDX1BBZGRyID0gYmluZm8tPmJpX2ltbXJfYmFzZSArIE1QQzg1eHhfT1BFTlBJQ19PRkZTRVQ7CkBAIC0xOTEsOSArMTU3LDEzIEBACiAJT3BlblBJQ19OdW1Jbml0U2Vuc2VzID0gc2l6ZW9mIChtcGM4NXh4X2Nkc19vcGVucGljX2luaXRzZW5zZXMpOwogCiAJLyogU2tpcCByZXNlcnZlZCBzcGFjZSBhbmQgaW50ZXJuYWwgc291cmNlcyAqLworI2lmZGVmIENPTkZJR19NUEM4NTQ4CisJb3BlbnBpY19zZXRfc291cmNlcygwLCA0OCwgT3BlblBJQ19BZGRyICsgMHgxMDIwMCk7CisjZWxzZQogCW9wZW5waWNfc2V0X3NvdXJjZXMoMCwgMzIsIE9wZW5QSUNfQWRkciArIDB4MTAyMDApOworI2VuZGlmCiAJLyogTWFwIFBJQyBJUlFzIDAtMTEgKi8KLQlvcGVucGljX3NldF9zb3VyY2VzKDMyLCAxMiwgT3BlblBJQ19BZGRyICsgMHgxMDAwMCk7CisJb3BlbnBpY19zZXRfc291cmNlcyg0OCwgMTIsIE9wZW5QSUNfQWRkciArIDB4MTAwMDApOwogCiAJLyogd2UgbGV0IG9wZW5waWMgaW50ZXJydXB0cyBzdGFydGluZyBmcm9tIGFuIG9mZnNldCwgdG8KIAkgKiBsZWF2ZSBzcGFjZSBmb3IgY2FzY2FkaW5nIGludGVycnVwdHMgdW5kZXJuZWF0aC4KQEAgLTQ3NSwyNiArNDQ1LDUyIEBACiAjaWZkZWYgQ09ORklHX1NFUklBTF9URVhUX0RFQlVHCiAJLyogSW52YWxpZGF0ZSB0aGUgZW50cnkgd2Ugc3RvbGUgZWFybGllciB0aGUgc2VyaWFsIHBvcnRzCiAJICogc2hvdWxkIGJlIHByb3Blcmx5IG1hcHBlZCAqLwotCWludmFsaWRhdGVfdGxiY2FtX2VudHJ5KE5VTV9UTEJDQU1TIC0gMSk7CisJaW52YWxpZGF0ZV90bGJjYW1fZW50cnkobnVtX3RsYmNhbV9lbnRyaWVzIC0gMSk7CiAjZW5kaWYKIAogCS8qIHNldHVwIHRoZSBib2FyZCByZWxhdGVkIGluZm9ybWF0aW9uIGZvciB0aGUgZW5ldCBjb250cm9sbGVycyAqLwogCXBkYXRhID0gKHN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgKikgcHBjX3N5c19nZXRfcGRhdGEoTVBDODV4eF9UU0VDMSk7Ci0JcGRhdGEtPmJvYXJkX2ZsYWdzID0gRlNMX0dJQU5GQVJfQlJEX0hBU19QSFlfSU5UUjsKLQlwZGF0YS0+aW50ZXJydXB0UEhZID0gTVBDODV4eF9JUlFfRVhUNTsKLQlwZGF0YS0+cGh5aWQgPSAwOwotCS8qIGZpeHVwIHBoeSBhZGRyZXNzICovCi0JcGRhdGEtPnBoeV9yZWdfYWRkciArPSBiaW5mby0+YmlfaW1tcl9iYXNlOwotCW1lbWNweShwZGF0YS0+bWFjX2FkZHIsIGJpbmZvLT5iaV9lbmV0YWRkciwgNik7CisJaWYgKHBkYXRhKSB7CisJCXBkYXRhLT5ib2FyZF9mbGFncyA9IEZTTF9HSUFORkFSX0JSRF9IQVNfUEhZX0lOVFI7CisJCXBkYXRhLT5pbnRlcnJ1cHRQSFkgPSBNUEM4NXh4X0lSUV9FWFQ1OworCQlwZGF0YS0+cGh5aWQgPSAwOworCQkvKiBmaXh1cCBwaHkgYWRkcmVzcyAqLworCQlwZGF0YS0+cGh5X3JlZ19hZGRyICs9IGJpbmZvLT5iaV9pbW1yX2Jhc2U7CisJCW1lbWNweShwZGF0YS0+bWFjX2FkZHIsIGJpbmZvLT5iaV9lbmV0YWRkciwgNik7CisJfQogCiAJcGRhdGEgPSAoc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSAqKSBwcGNfc3lzX2dldF9wZGF0YShNUEM4NXh4X1RTRUMyKTsKLQlwZGF0YS0+Ym9hcmRfZmxhZ3MgPSBGU0xfR0lBTkZBUl9CUkRfSEFTX1BIWV9JTlRSOwotCXBkYXRhLT5pbnRlcnJ1cHRQSFkgPSBNUEM4NXh4X0lSUV9FWFQ1OwotCXBkYXRhLT5waHlpZCA9IDE7Ci0JLyogZml4dXAgcGh5IGFkZHJlc3MgKi8KLQlwZGF0YS0+cGh5X3JlZ19hZGRyICs9IGJpbmZvLT5iaV9pbW1yX2Jhc2U7Ci0JbWVtY3B5KHBkYXRhLT5tYWNfYWRkciwgYmluZm8tPmJpX2VuZXQxYWRkciwgNik7CisJaWYgKHBkYXRhKSB7CisJCXBkYXRhLT5ib2FyZF9mbGFncyA9IEZTTF9HSUFORkFSX0JSRF9IQVNfUEhZX0lOVFI7CisJCXBkYXRhLT5pbnRlcnJ1cHRQSFkgPSBNUEM4NXh4X0lSUV9FWFQ1OworCQlwZGF0YS0+cGh5aWQgPSAxOworCQkvKiBmaXh1cCBwaHkgYWRkcmVzcyAqLworCQlwZGF0YS0+cGh5X3JlZ19hZGRyICs9IGJpbmZvLT5iaV9pbW1yX2Jhc2U7CisJCW1lbWNweShwZGF0YS0+bWFjX2FkZHIsIGJpbmZvLT5iaV9lbmV0MWFkZHIsIDYpOworCX0KIAorCXBkYXRhID0gKHN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgKikgcHBjX3N5c19nZXRfcGRhdGEoTVBDODV4eF9lVFNFQzEpOworCWlmIChwZGF0YSkgeworCQlwZGF0YS0+Ym9hcmRfZmxhZ3MgPSBGU0xfR0lBTkZBUl9CUkRfSEFTX1BIWV9JTlRSOworCQlwZGF0YS0+aW50ZXJydXB0UEhZID0gTVBDODV4eF9JUlFfRVhUNTsKKwkJcGRhdGEtPnBoeWlkID0gMDsKKwkJLyogZml4dXAgcGh5IGFkZHJlc3MgKi8KKwkJcGRhdGEtPnBoeV9yZWdfYWRkciArPSBiaW5mby0+YmlfaW1tcl9iYXNlOworCQltZW1jcHkocGRhdGEtPm1hY19hZGRyLCBiaW5mby0+YmlfZW5ldGFkZHIsIDYpOworCX0KKworCXBkYXRhID0gKHN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgKikgcHBjX3N5c19nZXRfcGRhdGEoTVBDODV4eF9lVFNFQzIpOworCWlmIChwZGF0YSkgeworCQlwZGF0YS0+Ym9hcmRfZmxhZ3MgPSBGU0xfR0lBTkZBUl9CUkRfSEFTX1BIWV9JTlRSOworCQlwZGF0YS0+aW50ZXJydXB0UEhZID0gTVBDODV4eF9JUlFfRVhUNTsKKwkJcGRhdGEtPnBoeWlkID0gMTsKKwkJLyogZml4dXAgcGh5IGFkZHJlc3MgKi8KKwkJcGRhdGEtPnBoeV9yZWdfYWRkciArPSBiaW5mby0+YmlfaW1tcl9iYXNlOworCQltZW1jcHkocGRhdGEtPm1hY19hZGRyLCBiaW5mby0+YmlfZW5ldDFhZGRyLCA2KTsKKwl9CisKKwlwcGNfc3lzX2RldmljZV9yZW1vdmUoTVBDODV4eF9lVFNFQzMpOworCXBwY19zeXNfZGV2aWNlX3JlbW92ZShNUEM4NXh4X2VUU0VDNCk7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAlpZiAoaW5pdHJkX3N0YXJ0KQpAQCAtNTMxLDcgKzUyNyw3IEBACiAJCXN0cnVjdCB1YXJ0X3BvcnQgcDsKIAogCQkvKiBVc2UgdGhlIGxhc3QgVExCIGVudHJ5IHRvIG1hcCBDQ1NSQkFSIHRvIGFsbG93IGFjY2VzcyB0byBEVUFSVCByZWdzICovCi0JCXNldHRsYmNhbShOVU1fVExCQ0FNUyAtIDEsIGJpbmZvLT5iaV9pbW1yX2Jhc2UsCisJCXNldHRsYmNhbShudW1fdGxiY2FtX2VudHJpZXMgLSAxLCBiaW5mby0+YmlfaW1tcl9iYXNlLAogCQkJCWJpbmZvLT5iaV9pbW1yX2Jhc2UsIE1QQzg1eHhfQ0NTUkJBUl9TSVpFLCBfUEFHRV9JTywgMCk7CiAKIAkJbWVtc2V0KCZwLCAwLCBzaXplb2YgKHApKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYwppbmRleCA3YjllMTU0Li4zZGJkZDczIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL29wZW5fcGljLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KQEAgLTEyNSw3ICsxMjQsNyBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfVEVYVF9ERUJVRwogCS8qIEludmFsaWRhdGUgdGhlIGVudHJ5IHdlIHN0b2xlIGVhcmxpZXIgdGhlIHNlcmlhbCBwb3J0cwogCSAqIHNob3VsZCBiZSBwcm9wZXJseSBtYXBwZWQgKi8gCi0JaW52YWxpZGF0ZV90bGJjYW1fZW50cnkoTlVNX1RMQkNBTVMgLSAxKTsKKwlpbnZhbGlkYXRlX3RsYmNhbV9lbnRyeShudW1fdGxiY2FtX2VudHJpZXMgLSAxKTsKICNlbmRpZgogCiAJLyogc2V0dXAgdGhlIGJvYXJkIHJlbGF0ZWQgaW5mb3JtYXRpb24gZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXJzICovCkBAIC0xNzYsNyArMTc1LDcgQEAKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfVEVYVF9ERUJVRwogCS8qIFVzZSB0aGUgbGFzdCBUTEIgZW50cnkgdG8gbWFwIENDU1JCQVIgdG8gYWxsb3cgYWNjZXNzIHRvIERVQVJUIHJlZ3MgKi8KLQlzZXR0bGJjYW0oTlVNX1RMQkNBTVMgLSAxLCBVQVJUQV9BRERSLAorCXNldHRsYmNhbShudW1fdGxiY2FtX2VudHJpZXMgLSAxLCBVQVJUQV9BRERSLAogCQkgIFVBUlRBX0FERFIsIDB4MTAwMCwgX1BBR0VfSU8sIDApOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguYwppbmRleCAyZDYzOGMxLi40ZjZkMWRkIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NXh4LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODV4eC5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL29wZW5fcGljLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KQEAgLTU5LDQwICs1OCw4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbF9tZW1vcnk7CS8qIGluIG1tL2luaXQgKi8KIAogLyogSW50ZXJuYWwgaW50ZXJydXB0cyBhcmUgYWxsIExldmVsIFNlbnNpdGl2ZSwgYW5kIFBvc2l0aXZlIFBvbGFyaXR5ICovCi0KIHN0YXRpYyB1X2NoYXIgc2JjODU2MF9vcGVucGljX2luaXRzZW5zZXNbXSBfX2luaXRkYXRhID0gewotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgMDogTDIgQ2FjaGUgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDE6IEVDTSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgMjogRERSIERSQU0gKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDM6IExCSVUgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDQ6IERNQSAwICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA1OiBETUEgMSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgNjogRE1BIDIgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDc6IERNQSAzICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA4OiBQQ0kvUENJLVggKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDk6IFJJTyBJbmJvdW5kIFBvcnQgV3JpdGUgRXJyb3IgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTA6IFJJTyBEb29yYmVsbCBJbmJvdW5kICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDExOiBSSU8gT3V0Ym91bmQgTWVzc2FnZSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxMjogUklPIEluYm91bmQgTWVzc2FnZSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxMzogVFNFQyAwIFRyYW5zbWl0ICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE0OiBUU0VDIDAgUmVjZWl2ZSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxNTogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE2OiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTc6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxODogVFNFQyAwIFJlY2VpdmUvVHJhbnNtaXQgRXJyb3IgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTk6IFRTRUMgMSBUcmFuc21pdCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyMDogVFNFQyAxIFJlY2VpdmUgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjE6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyMjogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDIzOiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjQ6IFRTRUMgMSBSZWNlaXZlL1RyYW5zbWl0IEVycm9yICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI1OiBGYXN0IEV0aGVybmV0ICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI2OiBEVUFSVCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyNzogSTJDICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI4OiBQZXJmb3JtYW5jZSBNb25pdG9yICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI5OiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzA6IENQTSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAzMTogVW51c2VkICovCisJTVBDODVYWF9JTlRFUk5BTF9JUlFfU0VOU0VTLAogCTB4MCwJCQkJLyogRXh0ZXJuYWwgIDA6ICovCiAJMHgwLAkJCQkvKiBFeHRlcm5hbCAgMTogKi8KICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCkBAIC0xNTksNyArMTI2LDcgQEAKIAkvKiBTa2lwIHJlc2VydmVkIHNwYWNlIGFuZCBpbnRlcm5hbCBzb3VyY2VzICovCiAJb3BlbnBpY19zZXRfc291cmNlcygwLCAzMiwgT3BlblBJQ19BZGRyICsgMHgxMDIwMCk7CiAJLyogTWFwIFBJQyBJUlFzIDAtMTEgKi8KLQlvcGVucGljX3NldF9zb3VyY2VzKDMyLCAxMiwgT3BlblBJQ19BZGRyICsgMHgxMDAwMCk7CisJb3BlbnBpY19zZXRfc291cmNlcyg0OCwgMTIsIE9wZW5QSUNfQWRkciArIDB4MTAwMDApOwogCiAJLyogd2UgbGV0IG9wZW5waWMgaW50ZXJydXB0cyBzdGFydGluZyBmcm9tIGFuIG9mZnNldCwgdG8gCiAJICogbGVhdmUgc3BhY2UgZm9yIGNhc2NhZGluZyBpbnRlcnJ1cHRzIHVuZGVybmVhdGguCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKaW5kZXggYmM5NTgzNi4uOTQ1NWJiNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9vcGVuX3BpYy5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CkBAIC03MiwzOCArNzEsNyBAQAogCiAvKiBJbnRlcm5hbCBpbnRlcnJ1cHRzIGFyZSBhbGwgTGV2ZWwgU2Vuc2l0aXZlLCBhbmQgUG9zaXRpdmUgUG9sYXJpdHkgKi8KIHN0YXRpYyB1OCBncDNfb3BlbnBpY19pbml0c2Vuc2VzW10gX19pbml0ZGF0YSA9IHsKLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDA6IEwyIENhY2hlICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICAxOiBFQ00gKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDI6IEREUiBEUkFNICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICAzOiBMQklVICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA0OiBETUEgMCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgNTogRE1BIDEgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDY6IERNQSAyICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA3OiBETUEgMyAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgODogUENJL1BDSS1YICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA5OiBSSU8gSW5ib3VuZCBQb3J0IFdyaXRlIEVycm9yICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDEwOiBSSU8gRG9vcmJlbGwgSW5ib3VuZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxMTogUklPIE91dGJvdW5kIE1lc3NhZ2UgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTI6IFJJTyBJbmJvdW5kIE1lc3NhZ2UgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTM6IFRTRUMgMCBUcmFuc21pdCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxNDogVFNFQyAwIFJlY2VpdmUgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTU6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxNjogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE3OiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTg6IFRTRUMgMCBSZWNlaXZlL1RyYW5zbWl0IEVycm9yICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE5OiBUU0VDIDEgVHJhbnNtaXQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjA6IFRTRUMgMSBSZWNlaXZlICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDIxOiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjI6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyMzogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI0OiBUU0VDIDEgUmVjZWl2ZS9UcmFuc21pdCBFcnJvciAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyNTogRmFzdCBFdGhlcm5ldCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyNjogRFVBUlQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjc6IEkyQyAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyODogUGVyZm9ybWFuY2UgTW9uaXRvciAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyOTogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDMwOiBDUE0gKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzE6IFVudXNlZCAqLworCU1QQzg1WFhfSU5URVJOQUxfSVJRX1NFTlNFUywKIAkweDAsCQkJCQkJLyogRXh0ZXJuYWwgIDA6ICovCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkUpLAkvKiBFeHRlcm5hbCAxOiBQQ0kgc2xvdCAwICovCkBAIC0yMDAsNyArMTY4LDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdAogZ3AzX2luaXRfSVJRKHZvaWQpCiB7Ci0JaW50IGk7CiAJYmRfdCAqYmluZm8gPSAoYmRfdCAqKSBfX3JlczsKIAogCS8qCkBAIC0yMTgsNyArMTg1LDcgQEAKIAlvcGVucGljX3NldF9zb3VyY2VzKDAsIDMyLCBPcGVuUElDX0FkZHIgKyAweDEwMjAwKTsKIAogCS8qIE1hcCBQSUMgSVJRcyAwLTExICovCi0Jb3BlbnBpY19zZXRfc291cmNlcygzMiwgMTIsIE9wZW5QSUNfQWRkciArIDB4MTAwMDApOworCW9wZW5waWNfc2V0X3NvdXJjZXMoNDgsIDEyLCBPcGVuUElDX0FkZHIgKyAweDEwMDAwKTsKIAogCS8qCiAJICogTGV0IG9wZW5waWMgaW50ZXJydXB0cyBzdGFydGluZyBmcm9tIGFuIG9mZnNldCwgdG8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuYwppbmRleCA1MzFiZmEwLi43MGU1OGY0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvc2FuZHBvaW50LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3NhbmRwb2ludC5jCkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CS8qIGZvciBsaW51eC9zZXJpYWxfY29yZS5oICovCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC05OSw2ICsxMDAsNyBAQAogI2luY2x1ZGUgPGFzbS9tcGMxMHguaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgogI2luY2x1ZGUgPGFzbS9rZ2RiLmg+CisjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KIAogI2luY2x1ZGUgInNhbmRwb2ludC5oIgogCkBAIC0zMDUsNiArMzA3LDI0IEBACiAJLyogTG9va3VwIFBDSSBob3N0IGJyaWRnZXMgKi8KIAlzYW5kcG9pbnRfZmluZF9icmlkZ2VzKCk7CiAKKwlpZiAoc3RybmNtcCAoY3VyX3BwY19zeXNfc3BlYy0+cHBjX3N5c19uYW1lLCAiODI0NSIsIDQpID09IDApCisJeworCQliZF90ICpicCA9IChiZF90ICopX19yZXM7CisJCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcGRhdGE7CisJCXBkYXRhID0gKHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqKSBwcGNfc3lzX2dldF9wZGF0YShNUEMxMFhfRFVBUlQpOworCisJCWlmIChwZGF0YSkKKwkJeworCQkJcGRhdGFbMF0udWFydGNsayA9IGJwLT5iaV9idXNmcmVxOworCQkJcGRhdGFbMF0ubWVtYmFzZSA9IGlvcmVtYXAocGRhdGFbMF0ubWFwYmFzZSwgMHgxMDApOworCisJCQkvKiB0aGlzIGRpc2FibGVzIHRoZSAybmQgc2VyaWFsIHBvcnQgb24gdGhlIERVQVJUCisJCQkgKiBzaW5jZSB0aGUgc2FuZHBvaW50IGRvZXMgbm90IGhhdmUgaXQgY29ubmVjdGVkICovCisJCQlwZGF0YVsxXS51YXJ0Y2xrID0gMDsKKwkJCXBkYXRhWzFdLmlycSA9IDA7CisJCQlwZGF0YVsxXS5tYXBiYXNlID0gMDsKKwkJfQorCiAJcHJpbnRrKEtFUk5fSU5GTyAiTW90b3JvbGEgU1BTIFNhbmRwb2ludCBUZXN0IFBsYXRmb3JtXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPICJQb3J0IGJ5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gKHNvdXJjZUBtdmlzdGEuY29tKVxuIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZSBiL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZQppbmRleCA5NmFjZjg1Li5kZWM1YmY0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlCkBAIC05Miw3ICs5Miw3IEBACiBvYmotJChDT05GSUdfU0VSSUFMX1RFWFRfREVCVUcpCSs9IG12NjR4NjBfZGJnLm8KIGVuZGlmCiBvYmotJChDT05GSUdfQk9PVFhfVEVYVCkJKz0gYnRleHQubwotb2JqLSQoQ09ORklHX01QQzEwWF9CUklER0UpICAgICArPSBtcGMxMHhfY29tbW9uLm8gaW5kaXJlY3RfcGNpLm8KK29iai0kKENPTkZJR19NUEMxMFhfQlJJREdFKQkrPSBtcGMxMHhfY29tbW9uLm8gaW5kaXJlY3RfcGNpLm8gcHBjX3N5cy5vCiBvYmotJChDT05GSUdfTVBDMTBYX09QRU5QSUMpCSs9IG9wZW5fcGljLm8KIG9iai0kKENPTkZJR180MHgpCQkrPSBkY3Iubwogb2JqLSQoQ09ORklHX0JPT0tFKQkJKz0gZGNyLm8KQEAgLTEwNyw2ICsxMDcsNyBAQAogaWZlcSAoJChDT05GSUdfODN4eCkseSkKIG9iai0kKENPTkZJR19QQ0kpCQkrPSBpbmRpcmVjdF9wY2kubyBwY2lfYXV0by5vCiBlbmRpZgorb2JqLSQoQ09ORklHX01QQzg1NDhfQ0RTKQkrPSB0b2RjX3RpbWUubwogb2JqLSQoQ09ORklHX01QQzg1NTVfQ0RTKQkrPSB0b2RjX3RpbWUubwogb2JqLSQoQ09ORklHX1BQQ19NUEM1Mnh4KQkrPSBtcGM1Mnh4X3NldHVwLm8gbXBjNTJ4eF9waWMubyBcCiAJCQkJCW1wYzUyeHhfc3lzLm8gbXBjNTJ4eF9kZXZpY2VzLm8gcHBjX3N5cy5vCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjMTB4X2NvbW1vbi5jIGIvYXJjaC9wcGMvc3lzbGliL21wYzEweF9jb21tb24uYwppbmRleCBmZDkzYWRmLi44ZmM1ZjQxIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjMTB4X2NvbW1vbi5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGMxMHhfY29tbW9uLmMKQEAgLTIxLDYgKzIxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTMwLDE2ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KICNpbmNsdWRlIDxhc20vb3Blbl9waWMuaD4KICNpbmNsdWRlIDxhc20vbXBjMTB4Lmg+Ci0jaW5jbHVkZSA8YXNtL29jcC5oPgotCi0vKiBUaGUgT0NQIHN0cnVjdHVyZSBpcyBmaXhlZCBieSBjb2RlIGJlbG93LCBiZWZvcmUgT0NQIGluaXRpYWxpc2VzLgotICAgcGFkZHIgZGVwZW5kcyBvbiB3aGVyZSB0aGUgYm9hcmQgcGxhY2VzIHRoZSBFVU1CLgotICAgIC0gZml4ZWQgaW4gbXBjMTB4X2JyaWRnZV9pbml0KCkuCi0gICBpcnEgZGVwZW5kcyBvbiB0d28gdGhpbmdzOgotICAgID4gZG9lcyB0aGUgYm9hcmQgdXNlIHRoZSBFUElDIGF0IGFsbD8gKFBDT1JFIGRvZXMgbm90KS4KLSAgICA+IGlzIHRoZSBFUElDIGluIHNlcmlhbCBvciBwYXJhbGxlbCBtb2RlPwotICAgIC0gZml4ZWQgaW4gbXBjMTB4X3NldF9vcGVucGljKCkuCi0qLworI2luY2x1ZGUgPGFzbS9wcGNfc3lzLmg+CiAKICNpZmRlZiBDT05GSUdfTVBDMTBYX09QRU5QSUMKICNpZmRlZiBDT05GSUdfRVBJQ19TRVJJQUxfTU9ERQpAQCAtNTAsMzUgKzQ0LDE0MCBAQAogI2RlZmluZSBNUEMxMFhfSTJDX0lSUSAoRVBJQ19JUlFfQkFTRSArIE5VTV84MjU5X0lOVEVSUlVQVFMpCiAjZGVmaW5lIE1QQzEwWF9ETUEwX0lSUSAoRVBJQ19JUlFfQkFTRSArIDEgKyBOVU1fODI1OV9JTlRFUlJVUFRTKQogI2RlZmluZSBNUEMxMFhfRE1BMV9JUlEgKEVQSUNfSVJRX0JBU0UgKyAyICsgTlVNXzgyNTlfSU5URVJSVVBUUykKKyNkZWZpbmUgTVBDMTBYX1VBUlQwX0lSUSAoRVBJQ19JUlFfQkFTRSArIDQgKyBOVU1fODI1OV9JTlRFUlJVUFRTKQogI2Vsc2UKLSNkZWZpbmUgTVBDMTBYX0kyQ19JUlEgT0NQX0lSUV9OQQotI2RlZmluZSBNUEMxMFhfRE1BMF9JUlEgT0NQX0lSUV9OQQotI2RlZmluZSBNUEMxMFhfRE1BMV9JUlEgT0NQX0lSUV9OQQorI2RlZmluZSBNUEMxMFhfSTJDX0lSUSAtMQorI2RlZmluZSBNUEMxMFhfRE1BMF9JUlEgLTEKKyNkZWZpbmUgTVBDMTBYX0RNQTFfSVJRIC0xCisjZGVmaW5lIE1QQzEwWF9VQVJUMF9JUlEgLTEKICNlbmRpZgogCi0KLXN0cnVjdCBvY3BfZGVmIGNvcmVfb2NwW10gPSB7Ci0JeyAudmVuZG9yCT0gT0NQX1ZFTkRPUl9JTlZBTElECi0JfQorc3RhdGljIHN0cnVjdCBmc2xfaTJjX3BsYXRmb3JtX2RhdGEgbXBjMTB4X2kyY19wZGF0YSA9IHsKKwkuZGV2aWNlX2ZsYWdzCQk9IDAsCiB9OwogCi1zdGF0aWMgc3RydWN0IG9jcF9mc19pMmNfZGF0YSBtcGMxMHhfaTJjX2RhdGEgPSB7Ci0JLmZsYWdzCQk9IDAKLX07Ci1zdGF0aWMgc3RydWN0IG9jcF9kZWYgbXBjMTB4X2kyY19vY3AgPSB7Ci0JLnZlbmRvcgkJPSBPQ1BfVkVORE9SX01PVE9ST0xBLAotCS5mdW5jdGlvbgk9IE9DUF9GVU5DX0lJQywKLQkuaW5kZXgJCT0gMCwKLQkuYWRkaXRpb25zCT0gJm1wYzEweF9pMmNfZGF0YQorc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworCVswXSA9IHsKKwkJLm1hcGJhc2UJPSAweDQ1MDAsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCisJfSwKKwlbMV0gPSB7CisJCS5tYXBiYXNlCT0gMHg0NjAwLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCX0sCisJeyB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBvY3BfZGVmIG1wYzEweF9kbWFfb2NwWzJdID0gewotewkudmVuZG9yCQk9IE9DUF9WRU5ET1JfTU9UT1JPTEEsCi0JLmZ1bmN0aW9uCT0gT0NQX0ZVTkNfRE1BLAotCS5pbmRleAkJPSAwIH0sCi17CS52ZW5kb3IJCT0gT0NQX1ZFTkRPUl9NT1RPUk9MQSwKLQkuZnVuY3Rpb24JPSBPQ1BfRlVOQ19ETUEsCi0JLmluZGV4CQk9IDEgfQorc3RydWN0IHBsYXRmb3JtX2RldmljZSBwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbXSA9IHsKKwlbTVBDMTBYX0lJQzFdID0geworCQkubmFtZSAJPSAiZnNsLWkyYyIsCisJCS5pZAk9IDEsCisJCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZtcGMxMHhfaTJjX3BkYXRhLAorCQkubnVtX3Jlc291cmNlcyA9IDIsCisJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgeworCQkJeworCQkJCS5zdGFydCAJPSBNUEMxMFhfRVVNQl9JMkNfT0ZGU0VULAorCQkJCS5lbmQJPSBNUEMxMFhfRVVNQl9JMkNfT0ZGU0VUICsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QQzEwWF9FVU1CX0kyQ19TSVpFIC0gMSwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLmZsYWdzIAk9IElPUkVTT1VSQ0VfSVJRCisJCQl9LAorCQl9LAorCX0sCisJW01QQzEwWF9ETUEwXSA9IHsKKwkJLm5hbWUJPSAiZnNsLWRtYSIsCisJCS5pZAk9IDAsCisJCS5udW1fcmVzb3VyY2VzID0gMiwKKwkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CisJCQl7CisJCQkJLnN0YXJ0IAk9IE1QQzEwWF9FVU1CX0RNQV9PRkZTRVQgKyAweDEwLAorCQkJCS5lbmQJPSBNUEMxMFhfRVVNQl9ETUFfT0ZGU0VUICsgMHgxZiwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCQl9LAorCQl9LAorCX0sCisJW01QQzEwWF9ETUExXSA9IHsKKwkJLm5hbWUJPSAiZnNsLWRtYSIsCisJCS5pZAk9IDEsCisJCS5udW1fcmVzb3VyY2VzID0gMiwKKwkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CisJCQl7CisJCQkJLnN0YXJ0CT0gTVBDMTBYX0VVTUJfRE1BX09GRlNFVCArIDB4MjAsCisJCQkJLmVuZAk9IE1QQzEwWF9FVU1CX0RNQV9PRkZTRVQgKyAweDJmLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKwkJCXsKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKKwlbTVBDMTBYX0RNQTFdID0geworCQkubmFtZQk9ICJmc2wtZG1hIiwKKwkJLmlkCT0gMSwKKwkJLm51bV9yZXNvdXJjZXMgPSAyLAorCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKKwkJCXsKKwkJCQkuc3RhcnQJPSBNUEMxMFhfRVVNQl9ETUFfT0ZGU0VUICsgMHgyMCwKKwkJCQkuZW5kCT0gTVBDMTBYX0VVTUJfRE1BX09GRlNFVCArIDB4MmYsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCQl9LAorCQkJeworCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwkJfSwKKwl9LAorCVtNUEMxMFhfRFVBUlRdID0geworCQkubmFtZSA9ICJzZXJpYWw4MjUwIiwKKwkJLmlkCT0gMCwKKwkJLmRldi5wbGF0Zm9ybV9kYXRhID0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKKy8qIFdlIHVzZSB0aGUgUENJIElEIHRvIG1hdGNoIG9uICovCitzdHJ1Y3QgcHBjX3N5c19zcGVjICpjdXJfcHBjX3N5c19zcGVjOworc3RydWN0IHBwY19zeXNfc3BlYyBwcGNfc3lzX3NwZWNzW10gPSB7CisJeworCQkucHBjX3N5c19uYW1lIAk9ICI4MjQ1IiwKKwkJLm1hc2sJCT0gMHhGRkZGRkZGRiwKKwkJLnZhbHVlCQk9IE1QQzEwWF9CUklER0VfODI0NSwKKwkJLm51bV9kZXZpY2VzCT0gNCwKKwkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCisJCXsKKwkJCU1QQzEwWF9JSUMxLCBNUEMxMFhfRE1BMCwgTVBDMTBYX0RNQTEsIE1QQzEwWF9EVUFSVCwKKwkJfSwKKwl9LAorCXsKKwkJLnBwY19zeXNfbmFtZSAJPSAiODI0MCIsCisJCS5tYXNrCQk9IDB4RkZGRkZGRkYsCisJCS52YWx1ZQkJPSBNUEMxMFhfQlJJREdFXzgyNDAsCisJCS5udW1fZGV2aWNlcwk9IDMsCisJCS5kZXZpY2VfbGlzdAk9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQorCQl7CisJCQlNUEMxMFhfSUlDMSwgTVBDMTBYX0RNQTAsIE1QQzEwWF9ETUExLAorCQl9LAorCX0sCisJeworCQkucHBjX3N5c19uYW1lCT0gIjEwNyIsCisJCS5tYXNrCQk9IDB4RkZGRkZGRkYsCisJCS52YWx1ZQkJPSBNUEMxMFhfQlJJREdFXzEwNywKKwkJLm51bV9kZXZpY2VzCT0gMywKKwkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCisJCXsKKwkJCU1QQzEwWF9JSUMxLCBNUEMxMFhfRE1BMCwgTVBDMTBYX0RNQTEsCisJCX0sCisJfSwKKwl7ICAgICAgIC8qIGRlZmF1bHQgbWF0Y2ggKi8KKwkJLnBwY19zeXNfbmFtZSAgID0gIiIsCisJCS5tYXNrICAgICAgICAgICA9IDB4MDAwMDAwMDAsCisJCS52YWx1ZSAgICAgICAgICA9IDB4MDAwMDAwMDAsCisJfSwKIH07CiAKIC8qIFNldCByZXNvdXJjZXMgdG8gbWF0Y2ggYnJpZGdlIG1lbW9yeSBtYXAgKi8KQEAgLTEzMiw3ICsyMzEsNyBAQAogCQkgICB1aW50IG5ld19tYXAsCiAJCSAgIHVpbnQgcGh5c19ldW1iX2Jhc2UpCiB7Ci0JaW50CWhvc3RfYnJpZGdlLCBwaWNyMSwgcGljcjFfYml0OworCWludAlob3N0X2JyaWRnZSwgcGljcjEsIHBpY3IxX2JpdCwgaTsKIAl1bG9uZwlwY2lfY29uZmlnX2FkZHIsIHBjaV9jb25maWdfZGF0YTsKIAl1X2NoYXIJcGlyLCBieXRlOwogCkBAIC0yNzMsNyArMzcyLDcgQEAKIAkJCXByaW50aygiSG9zdCBicmlkZ2UgaW4gQWdlbnQgbW9kZVxuIik7CiAJCQkvKiBSZWFkIG9yIFNldCBMTUJBUiAmIFBDU1JCQVI/ICovCiAJCX0KLQkJCisKIAkJLyogU2V0IGJhc2UgYWRkciBvZiB0aGUgODI0MC8xMDcgRVVNQi4gICovCiAJCWVhcmx5X3dyaXRlX2NvbmZpZ19kd29yZChob3NlLAogCQkJCQkgMCwKQEAgLTI4NywxNyArMzg2LDYgQEAKIAkJCWlvcmVtYXAocGh5c19ldW1iX2Jhc2UgKyBNUEMxMFhfRVVNQl9FUElDX09GRlNFVCwKIAkJCQlNUEMxMFhfRVVNQl9FUElDX1NJWkUpOwogI2VuZGlmCi0JCW1wYzEweF9pMmNfb2NwLnBhZGRyID0gcGh5c19ldW1iX2Jhc2UgKyBNUEMxMFhfRVVNQl9JMkNfT0ZGU0VUOwotCQltcGMxMHhfaTJjX29jcC5pcnEgPSBNUEMxMFhfSTJDX0lSUTsKLQkJb2NwX2FkZF9vbmVfZGV2aWNlKCZtcGMxMHhfaTJjX29jcCk7Ci0JCW1wYzEweF9kbWFfb2NwWzBdLnBhZGRyID0gcGh5c19ldW1iX2Jhc2UgKwotCQkJCQlNUEMxMFhfRVVNQl9ETUFfT0ZGU0VUICsgMHgxMDA7Ci0JCW1wYzEweF9kbWFfb2NwWzBdLmlycSA9IE1QQzEwWF9ETUEwX0lSUTsKLQkJb2NwX2FkZF9vbmVfZGV2aWNlKCZtcGMxMHhfZG1hX29jcFswXSk7Ci0JCW1wYzEweF9kbWFfb2NwWzFdLnBhZGRyID0gcGh5c19ldW1iX2Jhc2UgKwotCQkJCQlNUEMxMFhfRVVNQl9ETUFfT0ZGU0VUICsgMHgyMDA7Ci0JCW1wYzEweF9kbWFfb2NwWzFdLmlycSA9IE1QQzEwWF9ETUExX0lSUTsKLQkJb2NwX2FkZF9vbmVfZGV2aWNlKCZtcGMxMHhfZG1hX29jcFsxXSk7CiAJfQogCiAjaWZkZWYgQ09ORklHX01QQzEwWF9TVE9SRV9HQVRIRVJJTkcKQEAgLTMwNiw2ICszOTQsMjkgQEAKIAltcGMxMHhfZGlzYWJsZV9zdG9yZV9nYXRoZXJpbmcoaG9zZSk7CiAjZW5kaWYKIAorCS8qIHNldHVwIHBsYXRmb3JtIGRldmljZXMgZm9yIE1QQzEweCBicmlkZ2VzICovCisJaWRlbnRpZnlfcHBjX3N5c19ieV9pZCAoaG9zdF9icmlkZ2UpOworCisJZm9yIChpID0gMDsgaSA8IGN1cl9wcGNfc3lzX3NwZWMtPm51bV9kZXZpY2VzOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGRldl9pZCA9IGN1cl9wcGNfc3lzX3NwZWMtPmRldmljZV9saXN0W2ldOworCQlwcGNfc3lzX2ZpeHVwX21lbV9yZXNvdXJjZSgmcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW2Rldl9pZF0sCisJCQlwaHlzX2V1bWJfYmFzZSk7CisJfQorCisJLyogSVJRJ3MgYXJlIGRldGVybWluZWQgYXQgcnVudGltZSAqLworCXBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tNUEMxMFhfSUlDMV0ucmVzb3VyY2VbMV0uc3RhcnQgPSBNUEMxMFhfSTJDX0lSUTsKKwlwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbTVBDMTBYX0lJQzFdLnJlc291cmNlWzFdLmVuZCA9IE1QQzEwWF9JMkNfSVJROworCXBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tNUEMxMFhfRE1BMF0ucmVzb3VyY2VbMV0uc3RhcnQgPSBNUEMxMFhfRE1BMF9JUlE7CisJcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW01QQzEwWF9ETUEwXS5yZXNvdXJjZVsxXS5lbmQgPSBNUEMxMFhfRE1BMF9JUlE7CisJcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW01QQzEwWF9ETUExXS5yZXNvdXJjZVsxXS5zdGFydCA9IE1QQzEwWF9ETUExX0lSUTsKKwlwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbTVBDMTBYX0RNQTFdLnJlc291cmNlWzFdLmVuZCA9IE1QQzEwWF9ETUExX0lSUTsKKworCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzBdLm1hcGJhc2UgKz0gcGh5c19ldW1iX2Jhc2U7CisJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0uaXJxID0gTVBDMTBYX1VBUlQwX0lSUTsKKworCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzFdLm1hcGJhc2UgKz0gcGh5c19ldW1iX2Jhc2U7CisJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0uaXJxID0gTVBDMTBYX1VBUlQwX0lSUSArIDE7CisKIAkvKgogCSAqIDgyNDAgZXJyYXR1bSAyNiwgODI0MS84MjQ1IGVycmF0dW0gMjksIDEwNyBlcnJhdHVtIDIzOiBzcGVjdWxhdGl2ZQogCSAqIFBDSSByZWFkcyBtYXkgcmV0dXJuIHN0YWxlIGRhdGEgc28gdHVybiBvZmYuCkBAIC0zMzAsNyArNDQxLDcgQEAKIAkgKiA4MjQ1IChSZXYgMi4sIGRhdGVkIDEwLzIwMDMpIHNheXMgUElDUjJbMF0gaXMgcmVzZXJ2ZXJkLgogCSAqLwogCWlmIChob3N0X2JyaWRnZSA9PSBNUEMxMFhfQlJJREdFXzgyNDUpIHsKLQkJdWxvbmcJcGljcjI7CisJCXUzMglwaWNyMjsKIAogCQllYXJseV9yZWFkX2NvbmZpZ19kd29yZChob3NlLCAwLCBQQ0lfREVWRk4oMCwwKSwKIAkJCU1QQzEwWF9DRkdfUElDUjJfUkVHLCAmcGljcjIpOwpAQCAtNTA0LDYgKzYxNSw4IEBACiAJb3BlbnBpY19zZXRfc291cmNlcyhFUElDX0lSUV9CQVNFLCAzLCBPcGVuUElDX0FkZHIgKyAweDExMDIwKTsKIAkvKiBTa2lwIHJlc2VydmVkIHNwYWNlIGFuZCBtYXAgTWVzc2FnZSBVbml0IEludGVycnVwdCAoSTJPKSAqLwogCW9wZW5waWNfc2V0X3NvdXJjZXMoRVBJQ19JUlFfQkFTRSArIDMsIDEsIE9wZW5QSUNfQWRkciArIDB4MTEwQzApOworCS8qIFNraXAgcmVzZXJ2ZWQgc3BhY2UgYW5kIG1hcCBTZXJpYWwgSW50ZXJ1cHRzICovCisJb3BlbnBpY19zZXRfc291cmNlcyhFUElDX0lSUV9CQVNFICsgNCwgMiwgT3BlblBJQ19BZGRyICsgMHgxMTEyMCk7CiAKIAlvcGVucGljX2luaXQoTlVNXzgyNTlfSU5URVJSVVBUUyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjODV4eF9kZXZpY2VzLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjODV4eF9kZXZpY2VzLmMKaW5kZXggMWU2NThlZi4uOGFmMzIyZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzg1eHhfZGV2aWNlcy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4NXh4X2RldmljZXMuYwpAQCAtNDAsNiArNDAsNDIgQEAKIAkucGh5X3JlZ19hZGRyID0gTVBDODV4eF9FTkVUMV9PRkZTRVQsCiB9OwogCitzdGF0aWMgc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSBtcGM4NXh4X2V0c2VjMV9wZGF0YSA9IHsKKwkuZGV2aWNlX2ZsYWdzID0gRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUIHwKKwkgICAgRlNMX0dJQU5GQVJfREVWX0hBU19DT0FMRVNDRSB8IEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSB8IEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSCwKKwkucGh5X3JlZ19hZGRyID0gTVBDODV4eF9FTkVUMV9PRkZTRVQsCit9OworCitzdGF0aWMgc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSBtcGM4NXh4X2V0c2VjMl9wZGF0YSA9IHsKKwkuZGV2aWNlX2ZsYWdzID0gRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUIHwKKwkgICAgRlNMX0dJQU5GQVJfREVWX0hBU19DT0FMRVNDRSB8IEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSB8IEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSCwKKwkucGh5X3JlZ19hZGRyID0gTVBDODV4eF9FTkVUMV9PRkZTRVQsCit9OworCitzdGF0aWMgc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSBtcGM4NXh4X2V0c2VjM19wZGF0YSA9IHsKKwkuZGV2aWNlX2ZsYWdzID0gRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUIHwKKwkgICAgRlNMX0dJQU5GQVJfREVWX0hBU19DT0FMRVNDRSB8IEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSB8IEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSCwKKwkucGh5X3JlZ19hZGRyID0gTVBDODV4eF9FTkVUMV9PRkZTRVQsCit9OworCitzdGF0aWMgc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSBtcGM4NXh4X2V0c2VjNF9wZGF0YSA9IHsKKwkuZGV2aWNlX2ZsYWdzID0gRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUIHwKKwkgICAgRlNMX0dJQU5GQVJfREVWX0hBU19DT0FMRVNDRSB8IEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSB8IEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTiB8CisJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSCwKKwkucGh5X3JlZ19hZGRyID0gTVBDODV4eF9FTkVUMV9PRkZTRVQsCit9OworCiBzdGF0aWMgc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSBtcGM4NXh4X2ZlY19wZGF0YSA9IHsKIAkucGh5X3JlZ19hZGRyID0gTVBDODV4eF9FTkVUMV9PRkZTRVQsCiB9OwpAQCAtNDgsNiArODQsMTAgQEAKIAkuZGV2aWNlX2ZsYWdzID0gRlNMX0kyQ19ERVZfU0VQQVJBVEVfREZTUlIsCiB9OwogCitzdGF0aWMgc3RydWN0IGZzbF9pMmNfcGxhdGZvcm1fZGF0YSBtcGM4NXh4X2ZzbF9pMmMyX3BkYXRhID0geworCS5kZXZpY2VfZmxhZ3MgPSBGU0xfSTJDX0RFVl9TRVBBUkFURV9ERlNSUiwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAlbMF0gPSB7CiAJCS5tYXBiYXNlCT0gMHg0NTAwLApAQCAtMjgxLDcgKzMyMSw2IEBACiAJCQl9LAogCQl9LAogCX0sCi0jaWZkZWYgQ09ORklHX0NQTTIKIAlbTVBDODV4eF9DUE1fRkNDMV0gPSB7CiAJCS5uYW1lID0gImZzbC1jcG0tZmNjIiwKIAkJLmlkCT0gMSwKQEAgLTUzNSw3ICs1NzQsMTUxIEBACiAJCQl9LAogCQl9LAogCX0sCi0jZW5kaWYgLyogQ09ORklHX0NQTTIgKi8KKwlbTVBDODV4eF9lVFNFQzFdID0geworCQkubmFtZSA9ICJmc2wtZ2lhbmZhciIsCisJCS5pZAk9IDEsCisJCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZtcGM4NXh4X2V0c2VjMV9wZGF0YSwKKwkJLm51bV9yZXNvdXJjZXMJID0gNCwKKwkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CisJCQl7CisJCQkJLnN0YXJ0CT0gTVBDODV4eF9FTkVUMV9PRkZTRVQsCisJCQkJLmVuZAk9IE1QQzg1eHhfRU5FVDFfT0ZGU0VUICsKKwkJCQkJCU1QQzg1eHhfRU5FVDFfU0laRSAtIDEsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lCT0gInR4IiwKKwkJCQkuc3RhcnQJPSBNUEM4NXh4X0lSUV9UU0VDMV9UWCwKKwkJCQkuZW5kCT0gTVBDODV4eF9JUlFfVFNFQzFfVFgsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCQl9LAorCQkJeworCQkJCS5uYW1lCT0gInJ4IiwKKwkJCQkuc3RhcnQJPSBNUEM4NXh4X0lSUV9UU0VDMV9SWCwKKwkJCQkuZW5kCT0gTVBDODV4eF9JUlFfVFNFQzFfUlgsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCQl9LAorCQkJeworCQkJCS5uYW1lCT0gImVycm9yIiwKKwkJCQkuc3RhcnQJPSBNUEM4NXh4X0lSUV9UU0VDMV9FUlJPUiwKKwkJCQkuZW5kCT0gTVBDODV4eF9JUlFfVFNFQzFfRVJST1IsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCQl9LAorCQl9LAorCX0sCisJW01QQzg1eHhfZVRTRUMyXSA9IHsKKwkJLm5hbWUgPSAiZnNsLWdpYW5mYXIiLAorCQkuaWQJPSAyLAorCQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmbXBjODV4eF9ldHNlYzJfcGRhdGEsCisJCS5udW1fcmVzb3VyY2VzCSA9IDQsCisJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgeworCQkJeworCQkJCS5zdGFydAk9IE1QQzg1eHhfRU5FVDJfT0ZGU0VULAorCQkJCS5lbmQJPSBNUEM4NXh4X0VORVQyX09GRlNFVCArCisJCQkJCQlNUEM4NXh4X0VORVQyX1NJWkUgLSAxLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZQk9ICJ0eCIsCisJCQkJLnN0YXJ0CT0gTVBDODV4eF9JUlFfVFNFQzJfVFgsCisJCQkJLmVuZAk9IE1QQzg1eHhfSVJRX1RTRUMyX1RYLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZQk9ICJyeCIsCisJCQkJLnN0YXJ0CT0gTVBDODV4eF9JUlFfVFNFQzJfUlgsCisJCQkJLmVuZAk9IE1QQzg1eHhfSVJRX1RTRUMyX1JYLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZQk9ICJlcnJvciIsCisJCQkJLnN0YXJ0CT0gTVBDODV4eF9JUlFfVFNFQzJfRVJST1IsCisJCQkJLmVuZAk9IE1QQzg1eHhfSVJRX1RTRUMyX0VSUk9SLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwkJfSwKKwl9LAorCVtNUEM4NXh4X2VUU0VDM10gPSB7CisJCS5uYW1lID0gImZzbC1naWFuZmFyIiwKKwkJLmlkCT0gMywKKwkJLmRldi5wbGF0Zm9ybV9kYXRhID0gJm1wYzg1eHhfZXRzZWMzX3BkYXRhLAorCQkubnVtX3Jlc291cmNlcwkgPSA0LAorCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKKwkJCXsKKwkJCQkuc3RhcnQJPSBNUEM4NXh4X0VORVQzX09GRlNFVCwKKwkJCQkuZW5kCT0gTVBDODV4eF9FTkVUM19PRkZTRVQgKworCQkJCQkJTVBDODV4eF9FTkVUM19TSVpFIC0gMSwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAidHgiLAorCQkJCS5zdGFydAk9IE1QQzg1eHhfSVJRX1RTRUMzX1RYLAorCQkJCS5lbmQJPSBNUEM4NXh4X0lSUV9UU0VDM19UWCwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAicngiLAorCQkJCS5zdGFydAk9IE1QQzg1eHhfSVJRX1RTRUMzX1JYLAorCQkJCS5lbmQJPSBNUEM4NXh4X0lSUV9UU0VDM19SWCwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAiZXJyb3IiLAorCQkJCS5zdGFydAk9IE1QQzg1eHhfSVJRX1RTRUMzX0VSUk9SLAorCQkJCS5lbmQJPSBNUEM4NXh4X0lSUV9UU0VDM19FUlJPUiwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKKwlbTVBDODV4eF9lVFNFQzRdID0geworCQkubmFtZSA9ICJmc2wtZ2lhbmZhciIsCisJCS5pZAk9IDQsCisJCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZtcGM4NXh4X2V0c2VjNF9wZGF0YSwKKwkJLm51bV9yZXNvdXJjZXMJID0gNCwKKwkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CisJCQl7CisJCQkJLnN0YXJ0CT0gMHgyNzAwMCwKKwkJCQkuZW5kCT0gMHgyN2ZmZiwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAidHgiLAorCQkJCS5zdGFydAk9IE1QQzg1eHhfSVJRX1RTRUM0X1RYLAorCQkJCS5lbmQJPSBNUEM4NXh4X0lSUV9UU0VDNF9UWCwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAicngiLAorCQkJCS5zdGFydAk9IE1QQzg1eHhfSVJRX1RTRUM0X1JYLAorCQkJCS5lbmQJPSBNUEM4NXh4X0lSUV9UU0VDNF9SWCwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAiZXJyb3IiLAorCQkJCS5zdGFydAk9IE1QQzg1eHhfSVJRX1RTRUM0X0VSUk9SLAorCQkJCS5lbmQJPSBNUEM4NXh4X0lSUV9UU0VDNF9FUlJPUiwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKKwlbTVBDODV4eF9JSUMyXSA9IHsKKwkJLm5hbWUgPSAiZnNsLWkyYyIsCisJCS5pZAk9IDIsCisJCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZtcGM4NXh4X2ZzbF9pMmMyX3BkYXRhLAorCQkubnVtX3Jlc291cmNlcwkgPSAyLAorCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKKwkJCXsKKwkJCQkuc3RhcnQJPSAweDAzMTAwLAorCQkJCS5lbmQJPSAweDAzMWZmLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKwkJCXsKKwkJCQkuc3RhcnQJPSBNUEM4NXh4X0lSUV9JSUMxLAorCQkJCS5lbmQJPSBNUEM4NXh4X0lSUV9JSUMxLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwkJfSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjaF9tcGM4NXh4X2ZpeHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjODV4eF9zeXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4NXh4X3N5cy5jCmluZGV4IGQ4MDZhOTIuLjZlMzE4NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4NXh4X3N5cy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4NXh4X3N5cy5jCkBAIC0xMTAsNiArMTEwLDExMSBAQAogCQkJTVBDODV4eF9DUE1fVVNCLAogCQl9LAogCX0sCisJLyogU1ZScyBvbiA4NTQ4IHJldjEuMCBtYXRjaGVzIGZvciA4NTQ4Lzg1NDcvODU0NSAqLworCXsKKwkJLnBwY19zeXNfbmFtZQk9ICI4NTQ4RSIsCisJCS5tYXNrIAkJPSAweEZGRkYwMEYwLAorCQkudmFsdWUgCQk9IDB4ODAzOTAwMTAsCisJCS5udW1fZGV2aWNlcwk9IDEzLAorCQkuZGV2aWNlX2xpc3QJPSAoZW51bSBwcGNfc3lzX2RldmljZXNbXSkKKwkJeworCQkJTVBDODV4eF9lVFNFQzEsIE1QQzg1eHhfZVRTRUMyLCBNUEM4NXh4X2VUU0VDMywKKwkJCU1QQzg1eHhfZVRTRUM0LCBNUEM4NXh4X0lJQzEsIE1QQzg1eHhfSUlDMiwKKwkJCU1QQzg1eHhfRE1BMCwgTVBDODV4eF9ETUExLCBNUEM4NXh4X0RNQTIsIE1QQzg1eHhfRE1BMywKKwkJCU1QQzg1eHhfUEVSRk1PTiwgTVBDODV4eF9EVUFSVCwgTVBDODV4eF9TRUMyLAorCQl9LAorCX0sCisJeworCQkucHBjX3N5c19uYW1lCT0gIjg1NDgiLAorCQkubWFzayAJCT0gMHhGRkZGMDBGMCwKKwkJLnZhbHVlIAkJPSAweDgwMzEwMDEwLAorCQkubnVtX2RldmljZXMJPSAxMiwKKwkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCisJCXsKKwkJCU1QQzg1eHhfZVRTRUMxLCBNUEM4NXh4X2VUU0VDMiwgTVBDODV4eF9lVFNFQzMsCisJCQlNUEM4NXh4X2VUU0VDNCwgTVBDODV4eF9JSUMxLCBNUEM4NXh4X0lJQzIsCisJCQlNUEM4NXh4X0RNQTAsIE1QQzg1eHhfRE1BMSwgTVBDODV4eF9ETUEyLCBNUEM4NXh4X0RNQTMsCisJCQlNUEM4NXh4X1BFUkZNT04sIE1QQzg1eHhfRFVBUlQsCisJCX0sCisJfSwKKwl7CisJCS5wcGNfc3lzX25hbWUJPSAiODU0N0UiLAorCQkubWFzayAJCT0gMHhGRkZGMDBGMCwKKwkJLnZhbHVlIAkJPSAweDgwMzkwMDEwLAorCQkubnVtX2RldmljZXMJPSAxMywKKwkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCisJCXsKKwkJCU1QQzg1eHhfZVRTRUMxLCBNUEM4NXh4X2VUU0VDMiwgTVBDODV4eF9lVFNFQzMsCisJCQlNUEM4NXh4X2VUU0VDNCwgTVBDODV4eF9JSUMxLCBNUEM4NXh4X0lJQzIsCisJCQlNUEM4NXh4X0RNQTAsIE1QQzg1eHhfRE1BMSwgTVBDODV4eF9ETUEyLCBNUEM4NXh4X0RNQTMsCisJCQlNUEM4NXh4X1BFUkZNT04sIE1QQzg1eHhfRFVBUlQsIE1QQzg1eHhfU0VDMiwKKwkJfSwKKwl9LAorCXsKKwkJLnBwY19zeXNfbmFtZQk9ICI4NTQ3IiwKKwkJLm1hc2sgCQk9IDB4RkZGRjAwRjAsCisJCS52YWx1ZSAJCT0gMHg4MDMxMDAxMCwKKwkJLm51bV9kZXZpY2VzCT0gMTIsCisJCS5kZXZpY2VfbGlzdAk9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQorCQl7CisJCQlNUEM4NXh4X2VUU0VDMSwgTVBDODV4eF9lVFNFQzIsIE1QQzg1eHhfZVRTRUMzLAorCQkJTVBDODV4eF9lVFNFQzQsIE1QQzg1eHhfSUlDMSwgTVBDODV4eF9JSUMyLAorCQkJTVBDODV4eF9ETUEwLCBNUEM4NXh4X0RNQTEsIE1QQzg1eHhfRE1BMiwgTVBDODV4eF9ETUEzLAorCQkJTVBDODV4eF9QRVJGTU9OLCBNUEM4NXh4X0RVQVJULAorCQl9LAorCX0sCisJeworCQkucHBjX3N5c19uYW1lCT0gIjg1NDVFIiwKKwkJLm1hc2sgCQk9IDB4RkZGRjAwRjAsCisJCS52YWx1ZSAJCT0gMHg4MDM5MDAxMCwKKwkJLm51bV9kZXZpY2VzCT0gMTEsCisJCS5kZXZpY2VfbGlzdAk9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQorCQl7CisJCQlNUEM4NXh4X2VUU0VDMSwgTVBDODV4eF9lVFNFQzIsCisJCQlNUEM4NXh4X0lJQzEsIE1QQzg1eHhfSUlDMiwKKwkJCU1QQzg1eHhfRE1BMCwgTVBDODV4eF9ETUExLCBNUEM4NXh4X0RNQTIsIE1QQzg1eHhfRE1BMywKKwkJCU1QQzg1eHhfUEVSRk1PTiwgTVBDODV4eF9EVUFSVCwgTVBDODV4eF9TRUMyLAorCQl9LAorCX0sCisJeworCQkucHBjX3N5c19uYW1lCT0gIjg1NDUiLAorCQkubWFzayAJCT0gMHhGRkZGMDBGMCwKKwkJLnZhbHVlIAkJPSAweDgwMzEwMDEwLAorCQkubnVtX2RldmljZXMJPSAxMCwKKwkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCisJCXsKKwkJCU1QQzg1eHhfZVRTRUMxLCBNUEM4NXh4X2VUU0VDMiwKKwkJCU1QQzg1eHhfSUlDMSwgTVBDODV4eF9JSUMyLAorCQkJTVBDODV4eF9ETUEwLCBNUEM4NXh4X0RNQTEsIE1QQzg1eHhfRE1BMiwgTVBDODV4eF9ETUEzLAorCQkJTVBDODV4eF9QRVJGTU9OLCBNUEM4NXh4X0RVQVJULAorCQl9LAorCX0sCisJeworCQkucHBjX3N5c19uYW1lCT0gIjg1NDNFIiwKKwkJLm1hc2sgCQk9IDB4RkZGRjAwRjAsCisJCS52YWx1ZSAJCT0gMHg4MDNBMDAxMCwKKwkJLm51bV9kZXZpY2VzCT0gMTEsCisJCS5kZXZpY2VfbGlzdAk9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQorCQl7CisJCQlNUEM4NXh4X2VUU0VDMSwgTVBDODV4eF9lVFNFQzIsCisJCQlNUEM4NXh4X0lJQzEsIE1QQzg1eHhfSUlDMiwKKwkJCU1QQzg1eHhfRE1BMCwgTVBDODV4eF9ETUExLCBNUEM4NXh4X0RNQTIsIE1QQzg1eHhfRE1BMywKKwkJCU1QQzg1eHhfUEVSRk1PTiwgTVBDODV4eF9EVUFSVCwgTVBDODV4eF9TRUMyLAorCQl9LAorCX0sCisJeworCQkucHBjX3N5c19uYW1lCT0gIjg1NDMiLAorCQkubWFzayAJCT0gMHhGRkZGMDBGMCwKKwkJLnZhbHVlIAkJPSAweDgwMzIwMDEwLAorCQkubnVtX2RldmljZXMJPSAxMCwKKwkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCisJCXsKKwkJCU1QQzg1eHhfZVRTRUMxLCBNUEM4NXh4X2VUU0VDMiwKKwkJCU1QQzg1eHhfSUlDMSwgTVBDODV4eF9JSUMyLAorCQkJTVBDODV4eF9ETUEwLCBNUEM4NXh4X0RNQTEsIE1QQzg1eHhfRE1BMiwgTVBDODV4eF9ETUEzLAorCQkJTVBDODV4eF9QRVJGTU9OLCBNUEM4NXh4X0RVQVJULAorCQl9LAorCX0sCiAJewkvKiBkZWZhdWx0IG1hdGNoICovCiAJCS5wcGNfc3lzX25hbWUJPSAiIiwKIAkJLm1hc2sgCQk9IDB4MDAwMDAwMDAsCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMuYyBiL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYy5jCmluZGV4IDAwMGJhNDdjLi5iNDVkODI2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vb3Blbl9waWMuaD4KICNpbmNsdWRlIDxhc20vaTgyNTkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYzIuYyBiL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYzIuYwppbmRleCBlYTI2ZGEwLi43ZTI3MmM1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMyLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljMi5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9vcGVuX3BpYy5oPgogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9rZ2RiLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X2tnZGIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU4NjY4Yi4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X2tnZGIuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaWJtNHh4Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLQotCi0jZGVmaW5lIExTUl9EUgkJMHgwMSAvKiBEYXRhIHJlYWR5ICovCi0jZGVmaW5lIExTUl9PRQkJMHgwMiAvKiBPdmVycnVuICovCi0jZGVmaW5lIExTUl9QRQkJMHgwNCAvKiBQYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgTFNSX0ZFCQkweDA4IC8qIEZyYW1pbmcgZXJyb3IgKi8KLSNkZWZpbmUgTFNSX0JJCQkweDEwIC8qIEJyZWFrICovCi0jZGVmaW5lIExTUl9USFJFCTB4MjAgLyogWG1pdCBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5ICovCi0jZGVmaW5lIExTUl9URU1UCTB4NDAgLyogWG1pdHRlciBlbXB0eSAqLwotI2RlZmluZSBMU1JfRVJSCQkweDgwIC8qIEVycm9yICovCi0KLSNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L2libV9vY3AuaD4KLQotZXh0ZXJuIHN0cnVjdCBOUzE2NTUwKiBDT01fUE9SVFNbXTsKLSNpZm5kZWYgTlVMTAotI2RlZmluZSBOVUxMIDB4MDAKLSNlbmRpZgotCi1zdGF0aWMgdm9sYXRpbGUgc3RydWN0IE5TMTY1NTAgKmtnZGJfZGVidWdwb3J0ID0gTlVMTDsKLQotdm9sYXRpbGUgc3RydWN0IE5TMTY1NTAgKgotTlMxNjU1MF9pbml0KGludCBjaGFuKQotewotCXZvbGF0aWxlIHN0cnVjdCBOUzE2NTUwICpjb21fcG9ydDsKLQlpbnQgcXVvdDsKLSNpZmRlZiBCQVNFX0JBVUQKLQlxdW90ID0gQkFTRV9CQVVEIC8gOTYwMDsKLSNlbHNlCi0JcXVvdCA9IDB4MDAwYzsgLyogMHhjID0gOTYwMCBiYXVkIChvbiBhIHBjKSAqLwotI2VuZGlmCi0KLQljb21fcG9ydCA9IChzdHJ1Y3QgTlMxNjU1MCAqKSBDT01fUE9SVFNbY2hhbl07Ci0KLQljb21fcG9ydC0+bGNyID0gMHgwMDsKLQljb21fcG9ydC0+aWVyID0gMHhGRjsKLQljb21fcG9ydC0+aWVyID0gMHgwMDsKLQljb21fcG9ydC0+bGNyID0gY29tX3BvcnQtPmxjciB8IDB4ODA7IC8qIEFjY2VzcyBiYXVkIHJhdGUgKi8KLQljb21fcG9ydC0+ZGxsID0gKCBxdW90ICYgMHgwMGZmICk7IC8qIDB4YyA9IDk2MDAgYmF1ZCAqLwotCWNvbV9wb3J0LT5kbG0gPSAoIHF1b3QgJiAweGZmMDAgKSA+PiA4OwotCWNvbV9wb3J0LT5sY3IgPSAweDAzOyAvKiA4IGRhdGEsIDEgc3RvcCwgbm8gcGFyaXR5ICovCi0JY29tX3BvcnQtPm1jciA9IDB4MDA7IC8qIFJUUy9EVFIgKi8KLQljb21fcG9ydC0+ZmNyID0gMHgwNzsgLyogQ2xlYXIgJiBlbmFibGUgRklGT3MgKi8KLQotCXJldHVybiggY29tX3BvcnQgKTsKLX0KLQotCi12b2lkCi1OUzE2NTUwX3B1dGModm9sYXRpbGUgc3RydWN0IE5TMTY1NTAgKmNvbV9wb3J0LCB1bnNpZ25lZCBjaGFyIGMpCi17Ci0Jd2hpbGUgKChjb21fcG9ydC0+bHNyICYgTFNSX1RIUkUpID09IDApCi0JCTsKLQljb21fcG9ydC0+dGhyID0gYzsKLQlyZXR1cm47Ci19Ci0KLXVuc2lnbmVkIGNoYXIKLU5TMTY1NTBfZ2V0Yyh2b2xhdGlsZSBzdHJ1Y3QgTlMxNjU1MCAqY29tX3BvcnQpCi17Ci0Jd2hpbGUgKChjb21fcG9ydC0+bHNyICYgTFNSX0RSKSA9PSAwKQotCQk7Ci0JcmV0dXJuIChjb21fcG9ydC0+cmJyKTsKLX0KLQotdW5zaWduZWQgY2hhcgotTlMxNjU1MF90c3RjKHZvbGF0aWxlIHN0cnVjdCBOUzE2NTUwICpjb21fcG9ydCkKLXsKLQlyZXR1cm4gKChjb21fcG9ydC0+bHNyICYgTFNSX0RSKSAhPSAwKTsKLX0KLQotCi0jaWYgZGVmaW5lZChDT05GSUdfS0dEQl9UVFlTMCkKLSNkZWZpbmUgS0dEQl9QT1JUIDAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0tHREJfVFRZUzEpCi0jZGVmaW5lIEtHREJfUE9SVCAxCi0jZWxpZiBkZWZpbmVkKENPTkZJR19LR0RCX1RUWVMyKQotI2RlZmluZSBLR0RCX1BPUlQgMgotI2VsaWYgZGVmaW5lZChDT05GSUdfS0dEQl9UVFlTMykKLSNkZWZpbmUgS0dEQl9QT1JUIDMKLSNlbHNlCi0jZXJyb3IgImludmFsaWQga2dkYl90dHkgcG9ydCIKLSNlbmRpZgotCi12b2lkIHB1dERlYnVnQ2hhciggdW5zaWduZWQgY2hhciBjICkKLXsKLQlpZiAoIGtnZGJfZGVidWdwb3J0ID09IE5VTEwgKQotCQlrZ2RiX2RlYnVncG9ydCA9IE5TMTY1NTBfaW5pdChLR0RCX1BPUlQpOwotCU5TMTY1NTBfcHV0Yygga2dkYl9kZWJ1Z3BvcnQsIGMgKTsKLX0KLQotaW50IGdldERlYnVnQ2hhciggdm9pZCApCi17Ci0JaWYgKGtnZGJfZGVidWdwb3J0ID09IE5VTEwpCi0JCWtnZGJfZGVidWdwb3J0ID0gTlMxNjU1MF9pbml0KEtHREJfUE9SVCk7Ci0KLQlyZXR1cm4oTlMxNjU1MF9nZXRjKGtnZGJfZGVidWdwb3J0KSk7Ci19Ci0KLXZvaWQga2dkYl9pbnRlcnJ1cHRpYmxlKGludCBlbmFibGUpCi17Ci0JcmV0dXJuOwotfQotCi12b2lkIHB1dERlYnVnU3RyaW5nKGNoYXIqIHN0cikKLXsKLQl3aGlsZSAoKnN0ciAhPSAnXDAnKSB7Ci0JCXB1dERlYnVnQ2hhcigqc3RyKTsKLQkJc3RyKys7Ci0JfQotCXB1dERlYnVnQ2hhcignXHInKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQKLWtnZGJfbWFwX3NjYyh2b2lkKQotewotCXByaW50aygia2dkYiBpbml0IFxuIik7Ci0Ja2dkYl9kZWJ1Z3BvcnQgPSBOUzE2NTUwX2luaXQoS0dEQl9QT1JUKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4M3h4X3NldHVwLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjODN4eF9zZXR1cC5jCmluZGV4IDg0M2NmODguLjYwMmE4NjggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4M3h4X3NldHVwLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BwYzgzeHhfc2V0dXAuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KIAotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbXBjODN4eC5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3NldHVwLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5jCmluZGV4IGYzMjc3ZjQuLmNhOTVkNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3NldHVwLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfc2V0dXAuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KIAotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbXBjODV4eC5oPgogI2luY2x1ZGUgPGFzbS9pbW1hcF84NXh4Lmg+CkBAIC0zMyw2ICszMiw4IEBACiAKICNpbmNsdWRlIDxzeXNsaWIvcHBjODV4eF9zZXR1cC5oPgogCitleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKKwogLyogUmV0dXJuIHRoZSBhbW91bnQgb2YgbWVtb3J5ICovCiB1bnNpZ25lZCBsb25nIF9faW5pdAogbXBjODV4eF9maW5kX2VuZF9vZl9tZW1vcnkodm9pZCkKQEAgLTEzMyw3ICsxMzQsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BDSQogCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDODU1NV9DRFMpCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODU1NV9DRFMpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NDhfQ0RTKQogZXh0ZXJuIHZvaWQgbXBjODV4eF9jZHNfZW5hYmxlX3ZpYShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOwogZXh0ZXJuIHZvaWQgbXBjODV4eF9jZHNfZml4dXBfdmlhKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSk7CiAjZW5kaWYKQEAgLTMwOCwxNCArMzA5LDE0IEBACiAKIAlwcGNfbWQucGNpX2V4Y2x1ZGVfZGV2aWNlID0gbXBjODV4eF9leGNsdWRlX2RldmljZTsKIAotI2lmIGRlZmluZWQoQ09ORklHX01QQzg1NTVfQ0RTKQorI2lmIGRlZmluZWQoQ09ORklHX01QQzg1NTVfQ0RTKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTQ4X0NEUykKIAkvKiBQcmUgcGNpYXV0b19idXNfc2NhbiBWSUEgaW5pdCAqLwogCW1wYzg1eHhfY2RzX2VuYWJsZV92aWEoaG9zZV9hKTsKICNlbmRpZgogCiAJaG9zZV9hLT5sYXN0X2J1c25vID0gcGNpYXV0b19idXNfc2Nhbihob3NlX2EsIGhvc2VfYS0+Zmlyc3RfYnVzbm8pOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDODU1NV9DRFMpCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODU1NV9DRFMpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NDhfQ0RTKQogCS8qIFBvc3QgcGNpYXV0b19idXNfc2NhbiBWSUEgZml4dXAgKi8KIAltcGM4NXh4X2Nkc19maXh1cF92aWEoaG9zZV9hKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMveG1vbi94bW9uLmMgYi9hcmNoL3BwYy94bW9uL3htb24uYwppbmRleCA4NTY1ZjQ5Li5iZTc4NjllIDEwMDY0NAotLS0gYS9hcmNoL3BwYy94bW9uL3htb24uYworKysgYi9hcmNoL3BwYy94bW9uL3htb24uYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTkzLDggKzk0LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCByZWFkX3NwcihpbnQpOwogc3RhdGljIHZvaWQgd3JpdGVfc3ByKGludCwgdW5zaWduZWQpOwogc3RhdGljIHZvaWQgc3VwZXJfcmVncyh2b2lkKTsKLXN0YXRpYyB2b2lkIHByaW50X3N5c21hcCh2b2lkKTsKLXN0YXRpYyB2b2lkIHN5c21hcF9sb29rdXAodm9pZCk7CitzdGF0aWMgdm9pZCBzeW1ib2xfbG9va3VwKHZvaWQpOwogc3RhdGljIHZvaWQgcmVtb3ZlX2JwdHModm9pZCk7CiBzdGF0aWMgdm9pZCBpbnNlcnRfYnB0cyh2b2lkKTsKIHN0YXRpYyBzdHJ1Y3QgYnB0ICphdF9icmVha3BvaW50KHVuc2lnbmVkIHBjKTsKQEAgLTEwMyw3ICsxMDMsNiBAQAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyB2b2lkIGNwdV9jbWQodm9pZCk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwotc3RhdGljIGludCBwcmV0dHlfcHJpbnRfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpOwogc3RhdGljIHZvaWQgY3N1bSh2b2lkKTsKICNpZmRlZiBDT05GSUdfQk9PVFhfVEVYVAogc3RhdGljIHZvaWQgdmlkY21kcyh2b2lkKTsKQEAgLTEyMCw4ICsxMTksNiBAQAogCiBleHRlcm4gdm9pZCB4bW9uX2VudGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgeG1vbl9sZWF2ZSh2b2lkKTsKLWV4dGVybiBjaGFyKiB4bW9uX2ZpbmRfc3ltYm9sKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyogc2FkZHIpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeG1vbl9zeW1ib2xfdG9fYWRkcihjaGFyKiBzeW1ib2wpOwogCiBzdGF0aWMgdW5zaWduZWQgc3RhcnRfdGJbTlJfQ1BVU11bMl07CiBzdGF0aWMgdW5zaWduZWQgc3RvcF90YltOUl9DUFVTXVsyXTsKQEAgLTE0OCw3ICsxNDUsNiBAQAogICBtbQltb3ZlIGEgYmxvY2sgb2YgbWVtb3J5XG5cCiAgIG1zCXNldCBhIGJsb2NrIG9mIG1lbW9yeVxuXAogICBtZAljb21wYXJlIHR3byBibG9ja3Mgb2YgbWVtb3J5XG5cCi0gIE0JcHJpbnQgU3lzdGVtLm1hcFxuXAogICByCXByaW50IHJlZ2lzdGVyc1xuXAogICBTCXByaW50IHNwZWNpYWwgcmVnaXN0ZXJzXG5cCiAgIHQJcHJpbnQgYmFja3RyYWNlXG5cCkBAIC0xNzUsNiArMTcxLDM1IEBACiAJCQkJICAgICAiciIgKGxvb3BzKSA6ICJjdHIiKTsKIH0KIAorLyogUHJpbnQgYW4gYWRkcmVzcyBpbiBudW1lcmljIGFuZCBzeW1ib2xpYyBmb3JtIChpZiBwb3NzaWJsZSkgKi8KK3N0YXRpYyB2b2lkIHhtb25fcHJpbnRfc3ltYm9sKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgY29uc3QgY2hhciAqbWlkLAorCQkJICAgICAgY29uc3QgY2hhciAqYWZ0ZXIpCit7CisJY2hhciAqbW9kbmFtZTsKKwljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTsKKwlzdGF0aWMgY2hhciB0bXBzdHJbMTI4XTsKKworCXByaW50ZigiJS44bHgiLCBhZGRyZXNzKTsKKwlpZiAoc2V0am1wKGJ1c19lcnJvcl9qbXApID09IDApIHsKKwkJZGVidWdnZXJfZmF1bHRfaGFuZGxlciA9IGhhbmRsZV9mYXVsdDsKKwkJc3luYygpOworCQluYW1lID0ga2FsbHN5bXNfbG9va3VwKGFkZHJlc3MsICZzaXplLCAmb2Zmc2V0LCAmbW9kbmFtZSwKKwkJCQkgICAgICAgdG1wc3RyKTsKKwkJc3luYygpOworCQkvKiB3YWl0IGEgbGl0dGxlIHdoaWxlIHRvIHNlZSBpZiB3ZSBnZXQgYSBtYWNoaW5lIGNoZWNrICovCisJCV9fZGVsYXkoMjAwKTsKKwl9CisJZGVidWdnZXJfZmF1bHRfaGFuZGxlciA9IE5VTEw7CisKKwlpZiAobmFtZSkgeworCQlwcmludGYoIiVzJXMrJSNseC8lI2x4IiwgbWlkLCBuYW1lLCBvZmZzZXQsIHNpemUpOworCQlpZiAobW9kbmFtZSkKKwkJCXByaW50ZigiIFslc10iLCBtb2RuYW1lKTsKKwl9CisJcHJpbnRmKCIlcyIsIGFmdGVyKTsKK30KKwogc3RhdGljIHZvaWQgZ2V0X3RiKHVuc2lnbmVkICpwKQogewogCXVuc2lnbmVkIGhpLCBsbywgaGlhZ2FpbjsKQEAgLTQ1NCw3ICs0NzksNyBAQAogCQkJZHVtcCgpOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2wnOgotCQkJc3lzbWFwX2xvb2t1cCgpOworCQkJc3ltYm9sX2xvb2t1cCgpOwogCQkJYnJlYWs7CiAJCWNhc2UgJ3InOgogCQkJaWYgKGV4Y3AgIT0gTlVMTCkKQEAgLTQ2Niw5ICs0OTEsNiBAQAogCQkJZWxzZQogCQkJCWV4Y3ByaW50KGV4Y3ApOwogCQkJYnJlYWs7Ci0JCWNhc2UgJ00nOgotCQkJcHJpbnRfc3lzbWFwKCk7Ci0JCQlicmVhazsKIAkJY2FzZSAnUyc6CiAJCQlzdXBlcl9yZWdzKCk7CiAJCQlicmVhazsKQEAgLTgyNSwyMCArODQ3LDE5IEBACiAJZm9yICg7IHNwICE9IDA7IHNwID0gc3RhY2tbMF0pIHsKIAkJaWYgKG1yZWFkKHNwLCBzdGFjaywgc2l6ZW9mKHN0YWNrKSkgIT0gc2l6ZW9mKHN0YWNrKSkKIAkJCWJyZWFrOwotCQlwcmV0dHlfcHJpbnRfYWRkcihzdGFja1sxXSk7Ci0JCXByaW50ZigiICIpOworCQlwcmludGYoIlslLjhseF0gIiwgc3RhY2spOworCQl4bW9uX3ByaW50X3N5bWJvbChzdGFja1sxXSwgIiAiLCAiXG4iKTsKIAkJaWYgKHN0YWNrWzFdID09ICh1bnNpZ25lZCkgJnJldF9mcm9tX2V4Y2VwdAogCQkgICAgfHwgc3RhY2tbMV0gPT0gKHVuc2lnbmVkKSAmcmV0X2Zyb21fZXhjZXB0X2Z1bGwKIAkJICAgIHx8IHN0YWNrWzFdID09ICh1bnNpZ25lZCkgJnJldF9mcm9tX3N5c2NhbGwpIHsKIAkJCWlmIChtcmVhZChzcCsxNiwgJnJlZ3MsIHNpemVvZihyZWdzKSkgIT0gc2l6ZW9mKHJlZ3MpKQogCQkJCWJyZWFrOwotCQkJcHJpbnRmKCJcbmV4Y2VwdGlvbjoleCBbJXhdICV4ICIsIHJlZ3MudHJhcCwgc3ArMTYsCisJCQlwcmludGYoImV4Y2VwdGlvbjoleCBbJXhdICV4XG4iLCByZWdzLnRyYXAsIHNwKzE2LAogCQkJICAgICAgIHJlZ3MubmlwKTsKIAkJCXNwID0gcmVncy5ncHJbMV07CiAJCQlpZiAobXJlYWQoc3AsIHN0YWNrLCBzaXplb2Yoc3RhY2spKSAhPSBzaXplb2Yoc3RhY2spKQogCQkJCWJyZWFrOwogCQl9Ci0JCXByaW50ZigiXG4iKTsKIAl9CiB9CiAKQEAgLTg1OSwxMSArODgwLDEwIEBACiAjaWZkZWYgQ09ORklHX1NNUAogCXByaW50ZigiY3B1ICVkOiAiLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQlwcmludGYoInZlY3RvcjogJXggYXQgcGMgPSAiLCBmcC0+dHJhcCk7Ci0JcHJldHR5X3ByaW50X2FkZHIoZnAtPm5pcCk7Ci0JcHJpbnRmKCIsIGxyID0gIik7Ci0JcHJldHR5X3ByaW50X2FkZHIoZnAtPmxpbmspOwotCXByaW50ZigiXG5tc3IgPSAleCwgc3AgPSAleCBbJXhdXG4iLCBmcC0+bXNyLCBmcC0+Z3ByWzFdLCBmcCk7CisJcHJpbnRmKCJ2ZWN0b3I6ICV4IGF0IHBjPSIsIGZwLT50cmFwKTsKKwl4bW9uX3ByaW50X3N5bWJvbChmcC0+bmlwLCAiOiAiLCAiLCBscj0iKTsKKwl4bW9uX3ByaW50X3N5bWJvbChmcC0+bGluaywgIjogIiwgIlxuIik7CisJcHJpbnRmKCJtc3IgPSAleCwgc3AgPSAleCBbJXhdXG4iLCBmcC0+bXNyLCBmcC0+Z3ByWzFdLCBmcCk7CiAJdHJhcCA9IFRSQVAoZnApOwogCWlmICh0cmFwID09IDB4MzAwIHx8IHRyYXAgPT0gMHg2MDApCiAJCXByaW50ZigiZGFyID0gJXgsIGRzaXNyID0gJXhcbiIsIGZwLT5kYXIsIGZwLT5kc2lzcik7CkBAIC05NTEsMjQgKzk3MSw2IEBACiBleHRlcm4gY2hhciBkZWNfZXhjOwogCiB2b2lkCi1wcmludF9zeXNtYXAodm9pZCkKLXsKLQlleHRlcm4gY2hhciAqc3lzbWFwOwotCWlmICggc3lzbWFwICkgewotCQlwcmludGYoIlN5c3RlbS5tYXA6IFxuIik7Ci0JCWlmKCBzZXRqbXAoYnVzX2Vycm9yX2ptcCkgPT0gMCApIHsKLQkJCWRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIgPSBoYW5kbGVfZmF1bHQ7Ci0JCQlzeW5jKCk7Ci0JCQl4bW9uX3B1dHMoc3lzbWFwKTsKLQkJCXN5bmMoKTsKLQkJfQotCQlkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyID0gTlVMTDsKLQl9Ci0JZWxzZQotCQlwcmludGYoIk5vIFN5c3RlbS5tYXBcbiIpOwotfQotCi12b2lkCiBzdXBlcl9yZWdzKHZvaWQpCiB7CiAJaW50IGksIGNtZDsKQEAgLTE3MzgsNyArMTc0MCw3IEBACiAJCXByaW50ZigiaW52YWxpZCByZWdpc3RlciBuYW1lICclJSVzJ1xuIiwgcmVnbmFtZSk7CiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoYyA9PSAnJCcpIHsKLQkJc3RhdGljIGNoYXIgc3ltbmFtZVs2NF07CisJCXN0YXRpYyBjaGFyIHN5bW5hbWVbMTI4XTsKIAkJaW50IGk7CiAJCWZvciAoaT0wOyBpPDYzOyBpKyspIHsKIAkJCWMgPSBpbmNoYXIoKTsKQEAgLTE3NDksNyArMTc1MSwxNCBAQAogCQkJc3ltbmFtZVtpXSA9IGM7CiAJCX0KIAkJc3ltbmFtZVtpKytdID0gMDsKLQkJKnZwID0geG1vbl9zeW1ib2xfdG9fYWRkcihzeW1uYW1lKTsKKwkJKnZwID0gMDsKKwkJaWYgKHNldGptcChidXNfZXJyb3Jfam1wKSA9PSAwKSB7CisJCQlkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyID0gaGFuZGxlX2ZhdWx0OworCQkJc3luYygpOworCQkJKnZwID0ga2FsbHN5bXNfbG9va3VwX25hbWUoc3ltbmFtZSk7CisJCQlzeW5jKCk7CisJCX0KKwkJZGVidWdnZXJfZmF1bHRfaGFuZGxlciA9IE5VTEw7CiAJCWlmICghKCp2cCkpIHsKIAkJCXByaW50ZigidW5rbm93biBzeW1ib2xcbiIpOwogCQkJcmV0dXJuIDA7CkBAIC0xODQwLDE2OSArMTg0OSwzNCBAQAogCWxpbmVwdHIgPSBzdHI7CiB9CiAKLXZvaWQKLXN5c21hcF9sb29rdXAodm9pZCkKK3N0YXRpYyB2b2lkCitzeW1ib2xfbG9va3VwKHZvaWQpCiB7CiAJaW50IHR5cGUgPSBpbmNoYXIoKTsKIAl1bnNpZ25lZCBhZGRyOwotCXN0YXRpYyBjaGFyIHRtcFs2NF07Ci0JY2hhciogY3VyOworCXN0YXRpYyBjaGFyIHRtcFsxMjhdOwogCi0JZXh0ZXJuIGNoYXIgKnN5c21hcDsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNtYXBfc2l6ZTsKLQlpZiAoICFzeXNtYXAgfHwgIXN5c21hcF9zaXplICkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoKHR5cGUpIHsKLQkJY2FzZSAnYSc6Ci0JCQlpZiAoc2NhbmhleCgmYWRkcikpIHsKLQkJCQlwcmV0dHlfcHJpbnRfYWRkcihhZGRyKTsKLQkJCQlwcmludGYoIlxuIik7Ci0JCQl9Ci0JCQl0ZXJtY2ggPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ3MnOgotCQkJZ2V0c3RyaW5nKHRtcCwgNjQpOwotCQkJaWYoIHNldGptcChidXNfZXJyb3Jfam1wKSA9PSAwICkgewotCQkJCWRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIgPSBoYW5kbGVfZmF1bHQ7Ci0JCQkJc3luYygpOwotCQkJCWN1ciA9IHN5c21hcDsKLQkJCQlkbyB7Ci0JCQkJCWN1ciA9IHN0cnN0cihjdXIsIHRtcCk7Ci0JCQkJCWlmIChjdXIpIHsKLQkJCQkJCXN0YXRpYyBjaGFyIHJlc1s2NF07Ci0JCQkJCQljaGFyICpwLCAqZDsKLQkJCQkJCXAgPSBjdXI7Ci0JCQkJCQl3aGlsZShwID4gc3lzbWFwICYmICpwICE9IDEwKQotCQkJCQkJCXAtLTsKLQkJCQkJCWlmICgqcCA9PSAxMCkgcCsrOwotCQkJCQkJZCA9IHJlczsKLQkJCQkJCXdoaWxlKCpwICYmIHAgPCAoc3lzbWFwICsgc3lzbWFwX3NpemUpICYmICpwICE9IDEwKQotCQkJCQkJCSooZCsrKSA9ICoocCsrKTsKLQkJCQkJCSooZCsrKSA9IDA7Ci0JCQkJCQlwcmludGYoIiVzXG4iLCByZXMpOwotCQkJCQkJY3VyKys7Ci0JCQkJCX0KLQkJCQl9IHdoaWxlIChjdXIpOwotCQkJCXN5bmMoKTsKLQkJCX0KLQkJCWRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIgPSBOVUxMOwotCQkJdGVybWNoID0gMDsKLQkJCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludAotcHJldHR5X3ByaW50X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKQotewotCWNoYXIgKnN5bTsKLQl1bnNpZ25lZCBsb25nIHNhZGRyOwotCQotCXByaW50ZigiJTA4eCIsIGFkZHIpOwotCXN5bSA9IHhtb25fZmluZF9zeW1ib2woYWRkciwgJnNhZGRyKTsKLQlpZiAoc3ltKQotCQlwcmludGYoIiAoJXMrMHgleCkiLCBzeW0sIGFkZHItc2FkZHIpOwotCXJldHVybiAoc3ltICE9IDApOwotfQotCi1jaGFyKgoteG1vbl9maW5kX3N5bWJvbCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcqIHNhZGRyKQotewotCXN0YXRpYyBjaGFyIHJidWZmZXJbNjRdOwotCWNoYXIgKnAsICplcCwgKmxpbWl0OwotCXVuc2lnbmVkIGxvbmcgcHJldiwgbmV4dDsKLQljaGFyKiBwc3ltOwotCi0JZXh0ZXJuIGNoYXIgKnN5c21hcDsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNtYXBfc2l6ZTsKLQlpZiAoICFzeXNtYXAgfHwgIXN5c21hcF9zaXplICkKLQkJcmV0dXJuIE5VTEw7Ci0JCi0JcHJldiA9IDA7Ci0JcHN5bSA9IE5VTEw7Ci0JcCA9IHN5c21hcDsKLQlsaW1pdCA9IHAgKyBzeXNtYXBfc2l6ZTsKLQlpZiggc2V0am1wKGJ1c19lcnJvcl9qbXApID09IDAgKSB7Ci0JCWRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIgPSBoYW5kbGVfZmF1bHQ7Ci0JCXN5bmMoKTsKLQkJZG8gewotCQkJbmV4dCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAxNik7Ci0JCQlpZiAobmV4dCA+IGFkZHIgJiYgcHJldiA8PSBhZGRyKSB7Ci0JCQkJaWYgKCFwc3ltKQotCQkJCQlnb3RvIGJhaWw7Ci0JCQkJZXAgPSByYnVmZmVyOwotCQkJCXAgPSBwc3ltOwotCQkJCXdoaWxlKCpwICYmIHAgPCBsaW1pdCAmJiAqcCA9PSAzMikKLQkJCQkJcCsrOwotCQkJCXdoaWxlKCpwICYmIHAgPCBsaW1pdCAmJiAqcCAhPSAxMCAmJiAoZXAgLSByYnVmZmVyKSA8IDYzKQotCQkJCQkqKGVwKyspID0gKihwKyspOwotCQkJCSooZXArKykgPSAwOwotCQkJCWlmIChzYWRkcikKLQkJCQkJKnNhZGRyID0gcHJldjsKLQkJCQlkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyID0gTlVMTDsKLQkJCQlyZXR1cm4gcmJ1ZmZlcjsKLQkJCX0KLQkJCXByZXYgPSBuZXh0OwotCQkJcHN5bSA9IHA7Ci0JCQl3aGlsZSgqcCAmJiBwIDwgbGltaXQgJiYgKnAgIT0gMTApCi0JCQkJcCsrOwotCQkJaWYgKCpwKSBwKys7Ci0JCX0gd2hpbGUoKnAgJiYgcCA8IGxpbWl0ICYmIG5leHQpOwotYmFpbDoKLQkJc3luYygpOwotCX0KLQlkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyID0gTlVMTDsKLQlyZXR1cm4gTlVMTDsKLX0KLQotdW5zaWduZWQgbG9uZwoteG1vbl9zeW1ib2xfdG9fYWRkcihjaGFyKiBzeW1ib2wpCi17Ci0JY2hhciAqcCwgKmN1cjsKLQljaGFyICptYXRjaCA9IE5VTEw7Ci0JaW50IGdvb2RuZXNzID0gMDsKLQlpbnQgcmVzdWx0ID0gMDsKLQkKLQlleHRlcm4gY2hhciAqc3lzbWFwOwotCWV4dGVybiB1bnNpZ25lZCBsb25nIHN5c21hcF9zaXplOwotCWlmICggIXN5c21hcCB8fCAhc3lzbWFwX3NpemUgKQotCQlyZXR1cm4gMDsKLQotCWlmKCBzZXRqbXAoYnVzX2Vycm9yX2ptcCkgPT0gMCApIHsKLQkJZGVidWdnZXJfZmF1bHRfaGFuZGxlciA9IGhhbmRsZV9mYXVsdDsKLQkJc3luYygpOwotCQljdXIgPSBzeXNtYXA7Ci0JCXdoaWxlKGN1cikgewotCQkJY3VyID0gc3Ryc3RyKGN1ciwgc3ltYm9sKTsKLQkJCWlmIChjdXIpIHsKLQkJCQlpbnQgZ2QgPSAxOwotCi0JCQkJLyogYmVzdCBtYXRjaCBpZiBlcXVhbCwgYmV0dGVyIG1hdGNoIGlmCi0JCQkJICogYmVnaW5zIHdpdGgKLQkJCQkgKi8KLQkJCQlpZiAoY3VyID09IHN5c21hcCB8fCAqKGN1ci0xKSA9PSAnICcpIHsKLQkJCQkJZ2QrKzsKLQkJCQkJaWYgKGN1cltzdHJsZW4oc3ltYm9sKV0gPT0gMTApCi0JCQkJCQlnZCsrOwotCQkJCX0KLQkJCQlpZiAoZ2QgPiBnb29kbmVzcykgewotCQkJCQltYXRjaCA9IGN1cjsKLQkJCQkJZ29vZG5lc3MgPSBnZDsKLQkJCQkJaWYgKGdkID09IDMpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJY3VyKys7Ci0JCQl9Ci0JCX0JCi0JCWlmIChnb29kbmVzcykgewotCQkJcCA9IG1hdGNoOwotCQkJd2hpbGUocCA+IHN5c21hcCAmJiAqcCAhPSAxMCkKLQkJCQlwLS07Ci0JCQlpZiAoKnAgPT0gMTApIHArKzsKLQkJCXJlc3VsdCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAxNik7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSAnYSc6CisJCWlmIChzY2FuaGV4KCZhZGRyKSkKKwkJCXhtb25fcHJpbnRfc3ltYm9sKGFkZHIsICI6ICIsICJcbiIpOworCQl0ZXJtY2ggPSAwOworCQlicmVhazsKKwljYXNlICdzJzoKKwkJZ2V0c3RyaW5nKHRtcCwgNjQpOworCQlpZiAoc2V0am1wKGJ1c19lcnJvcl9qbXApID09IDApIHsKKwkJCWRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIgPSBoYW5kbGVfZmF1bHQ7CisJCQlzeW5jKCk7CisJCQlhZGRyID0ga2FsbHN5bXNfbG9va3VwX25hbWUodG1wKTsKKwkJCWlmIChhZGRyKQorCQkJCXByaW50ZigiJXM6ICVseFxuIiwgdG1wLCBhZGRyKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIlN5bWJvbCAnJXMnIG5vdCBmb3VuZC5cbiIsIHRtcCk7CisJCQlzeW5jKCk7CiAJCX0KLQkJc3luYygpOworCQlkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyID0gTlVMTDsKKwkJdGVybWNoID0gMDsKKwkJYnJlYWs7CiAJfQotCWRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIgPSBOVUxMOwotCXJldHVybiByZXN1bHQ7Ci19CQkKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9LY29uZmlnIGIvYXJjaC9wcGM2NC9LY29uZmlnCmluZGV4IDVjYjM0MzguLjBmMWZhMjggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvS2NvbmZpZworKysgYi9hcmNoL3BwYzY0L0tjb25maWcKQEAgLTMyMyw3ICszMjMsNyBAQAogCWJvb2wKIAogY29uZmlnIFBDSQotCWJvb2wKKwlib29sICJzdXBwb3J0IGZvciBQQ0kgZGV2aWNlcyIgaWYgKEVNQkVEREVEICYmIFBQQ19JU0VSSUVTKQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIEZpbmQgb3V0IHdoZXRoZXIgeW91ciBzeXN0ZW0gaW5jbHVkZXMgYSBQQ0kgYnVzLiBQQ0kgaXMgdGhlIG5hbWUgb2YKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvTWFrZWZpbGUgYi9hcmNoL3BwYzY0L01ha2VmaWxlCmluZGV4IDY5MWYzMDAuLjMzYzc1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGM2NC9NYWtlZmlsZQpAQCAtMzUsOSArMzUsOSBAQAogQ1JPU1MzMkxECTo9ICQoTEQpIC1tIGVsZjMycHBjCiBDUk9TUzMyT0JKQ09QWQk6PSAkKE9CSkNPUFkpCiBlbmRpZgotQVMgICAgICAgICAgICAgIDo9ICQoQVMpIC1hNjQKLUxEICAgICAgICAgICAgICA6PSAkKExEKSAtbSBlbGY2NHBwYwotQ0MJCTo9ICQoQ0MpIC1tNjQKK292ZXJyaWRlIEFTCSs9IC1hNjQKK292ZXJyaWRlIExECSs9IC1tIGVsZjY0cHBjCitvdmVycmlkZSBDQwkrPSAtbTY0CiBlbmRpZgogCiBleHBvcnQgQ1JPU1MzMkNDIENST1NTMzJBUyBDUk9TUzMyTEQgQ1JPU1MzMk9CSkNPUFkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL0h2THBFdmVudC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvSHZMcEV2ZW50LmMKaW5kZXggZjhmMTk2My4uOTAwMzJiMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvSHZMcEV2ZW50LmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvSHZMcEV2ZW50LmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZMcEV2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsRXZlbnQuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9McGFyRGF0YS5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0l0THBOYWNhLmg+CiAKIC8qIEFycmF5IG9mIExwRXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgKi8KIExwRXZlbnRIYW5kbGVyIGxwRXZlbnRIYW5kbGVyW0h2THBFdmVudF9UeXBlX051bVR5cGVzXTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL0l0THBRdWV1ZS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvSXRMcFF1ZXVlLmMKaW5kZXggYzkyM2E4MS4uY2RlYTAwZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvSXRMcFF1ZXVlLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvSXRMcFF1ZXVlLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxhc20vaVNlcmllcy9JdExwUXVldWUuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkxwRXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxFdmVudC5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0xwYXJEYXRhLmg+CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBzZXRfaW5Vc2UoIHN0cnVjdCBJdExwUXVldWUgKiBscFF1ZXVlICkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wcGM2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggOTZkOTBiMC4uYjVlMTY3YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTE2LDE0ICsxNiwxMyBAQAogCiBvYmotJChDT05GSUdfUFBDX09GKSArPQlvZl9kZXZpY2UubwogCi1wY2ktb2JqLSQoQ09ORklHX1BQQ19JU0VSSUVTKQkrPSBpU2VyaWVzX3BjaS5vIGlTZXJpZXNfcGNpX3Jlc2V0Lm8KK3BjaS1vYmotJChDT05GSUdfUFBDX0lTRVJJRVMpCSs9IGlTZXJpZXNfcGNpLm8gaVNlcmllc19pcnEubyBcCisJCQkJaVNlcmllc19WcGRJbmZvLm8KIHBjaS1vYmotJChDT05GSUdfUFBDX01VTFRJUExBVEZPUk0pCSs9IHBjaV9kbi5vIHBjaV9kaXJlY3RfaW9tbXUubwogCiBvYmotJChDT05GSUdfUENJKQkrPSBwY2kubyBwY2lfaW9tbXUubyBpb21hcC5vICQocGNpLW9iai15KQogCi1vYmotJChDT05GSUdfUFBDX0lTRVJJRVMpICs9IGlTZXJpZXNfaXJxLm8gXAotCQkJICAgICBpU2VyaWVzX1ZwZEluZm8ubyBYbVBjaUxwRXZlbnQubyBcCi0JCQkgICAgIEh2Q2FsbC5vIEh2THBDb25maWcubyBMcGFyRGF0YS5vIFwKK29iai0kKENPTkZJR19QUENfSVNFUklFUykgKz0gSHZDYWxsLm8gSHZMcENvbmZpZy5vIExwYXJEYXRhLm8gXAogCQkJICAgICBpU2VyaWVzX3NldHVwLm8gSXRMcFF1ZXVlLm8gaHZDYWxsLm8gXAogCQkJICAgICBtZi5vIEh2THBFdmVudC5vIGlTZXJpZXNfcHJvYy5vIGlTZXJpZXNfaHRhYi5vIFwKIAkJCSAgICAgaVNlcmllc19pb21tdS5vCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9YbVBjaUxwRXZlbnQuYyBiL2FyY2gvcHBjNjQva2VybmVsL1htUGNpTHBFdmVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDljOWJjLi4wMDAwMDAwCi0tLSBhL2FyY2gvcHBjNjQva2VybmVsL1htUGNpTHBFdmVudC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiBGaWxlIFhtUGNpTHBFdmVudC5oIGNyZWF0ZWQgYnkgV2F5bmUgSG9sbSBvbiBNb24gSmFuIDE1IDIwMDEuCi0gKgotICogVGhpcyBtb2R1bGUgaGFuZGxlcyBQQ0kgaW50ZXJydXB0IGV2ZW50cyBzZW50IGJ5IHRoZSBpU2VyaWVzIEh5cGVydmlzb3IuCi0qLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLQotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2VHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkxwRXZlbnQuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxQY2kuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9YbVBjaUxwRXZlbnQuaD4KLSNpbmNsdWRlIDxhc20vcHBjZGVidWcuaD4KLQotc3RhdGljIGxvbmcgUGNpX0ludGVycnVwdF9Db3VudDsKLXN0YXRpYyBsb25nIFBjaV9FdmVudF9Db3VudDsKLQotZW51bSBYbVBjaUxwRXZlbnRfU3VidHlwZSB7Ci0JWG1QY2lMcEV2ZW50X0J1c0NyZWF0ZWQJICAgPSAwLAkJLy8gUEhCIGhhcyBiZWVuIGNyZWF0ZWQKLQlYbVBjaUxwRXZlbnRfQnVzRXJyb3IJICAgPSAxLAkJLy8gUEhCIGhhcyBmYWlsZWQKLQlYbVBjaUxwRXZlbnRfQnVzRmFpbGVkCSAgID0gMiwJCS8vIE1zZyB0byBTZWNvbmRhcnksIFByaW1hcnkgZmFpbGVkIGJ1cwotCVhtUGNpTHBFdmVudF9Ob2RlRmFpbGVkCSAgID0gNCwJCS8vIE11bHRpLWFkYXB0ZXIgYnJpZGdlIGhhcyBmYWlsZWQKLQlYbVBjaUxwRXZlbnRfTm9kZVJlY292ZXJlZCA9IDUsCQkvLyBNdWx0aS1hZGFwdGVyIGJyaWRnZSBoYXMgcmVjb3ZlcmVkCi0JWG1QY2lMcEV2ZW50X0J1c1JlY292ZXJlZCAgPSAxMiwJLy8gUEhCIGhhcyBiZWVuIHJlY292ZXJlZAotCVhtUGNpTHBFdmVudF9VblF1aWVzY2VCdXMgID0gMTgsCS8vIFNlY29uZGFyeSBidXMgdW5xaWVzY2luZwotCVhtUGNpTHBFdmVudF9CcmlkZ2VFcnJvciAgID0gMjEsCS8vIEJyaWRnZSBFcnJvcgotCVhtUGNpTHBFdmVudF9TbG90SW50ZXJydXB0ID0gMjIJCS8vIFNsb3QgaW50ZXJydXB0Ci19OwotCi1zdHJ1Y3QgWG1QY2lMcEV2ZW50X0J1c0ludGVycnVwdCB7Ci0JSHZCdXNOdW1iZXIJYnVzTnVtYmVyOwotCUh2U3ViQnVzTnVtYmVyCXN1YkJ1c051bWJlcjsKLX07Ci0KLXN0cnVjdCBYbVBjaUxwRXZlbnRfTm9kZUludGVycnVwdCB7Ci0JSHZCdXNOdW1iZXIJYnVzTnVtYmVyOwotCUh2U3ViQnVzTnVtYmVyCXN1YkJ1c051bWJlcjsKLQlIdkFnZW50SWQJZGV2aWNlSWQ7Ci19OwotCi1zdHJ1Y3QgWG1QY2lMcEV2ZW50IHsKLQlzdHJ1Y3QgSHZMcEV2ZW50IGh2THBFdmVudDsKLQotCXVuaW9uIHsKLQkJdTY0IGFsaWduRGF0YTsJCQkvLyBBbGlnbiBvbiBhbiA4LWJ5dGUgYm91bmRhcnkKLQotCQlzdHJ1Y3QgewotCQkJdTMyCQlmaXNyOwotCQkJSHZCdXNOdW1iZXIJYnVzTnVtYmVyOwotCQkJSHZTdWJCdXNOdW1iZXIJc3ViQnVzTnVtYmVyOwotCQkJSHZBZ2VudElkCWRldmljZUlkOwotCQl9IHNsb3RJbnRlcnJ1cHQ7Ci0KLQkJc3RydWN0IFhtUGNpTHBFdmVudF9CdXNJbnRlcnJ1cHQgYnVzRmFpbGVkOwotCQlzdHJ1Y3QgWG1QY2lMcEV2ZW50X0J1c0ludGVycnVwdCBidXNSZWNvdmVyZWQ7Ci0JCXN0cnVjdCBYbVBjaUxwRXZlbnRfQnVzSW50ZXJydXB0IGJ1c0NyZWF0ZWQ7Ci0KLQkJc3RydWN0IFhtUGNpTHBFdmVudF9Ob2RlSW50ZXJydXB0IG5vZGVGYWlsZWQ7Ci0JCXN0cnVjdCBYbVBjaUxwRXZlbnRfTm9kZUludGVycnVwdCBub2RlUmVjb3ZlcmVkOwotCi0JfSBldmVudERhdGE7Ci0KLX07Ci0KLXN0YXRpYyB2b2lkIGludFJlY2VpdmVkKHN0cnVjdCBYbVBjaUxwRXZlbnQgKmV2ZW50UGFybSwKLQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3NQYXJtKTsKLQotc3RhdGljIHZvaWQgWG1QY2lMcEV2ZW50X2hhbmRsZXIoc3RydWN0IEh2THBFdmVudCAqZXZlbnRQYXJtLAotCQlzdHJ1Y3QgcHRfcmVncyAqcmVnc1Bhcm0pCi17Ci0jaWZkZWYgQ09ORklHX1BDSQotI2lmIDAKLQlQUENEQkcoUFBDREJHX0JVU1dBTEssICJYbVBjaUxwRXZlbnRfaGFuZGxlciwgdHlwZSAweCV4XG4iLAotCQkJZXZlbnRQYXJtLT54VHlwZSk7Ci0jZW5kaWYKLQkrK1BjaV9FdmVudF9Db3VudDsKLQotCWlmIChldmVudFBhcm0gJiYgKGV2ZW50UGFybS0+eFR5cGUgPT0gSHZMcEV2ZW50X1R5cGVfUGNpSW8pKSB7Ci0JCXN3aXRjaCAoZXZlbnRQYXJtLT54RmxhZ3MueEZ1bmN0aW9uKSB7Ci0JCWNhc2UgSHZMcEV2ZW50X0Z1bmN0aW9uX0ludDoKLQkJCWludFJlY2VpdmVkKChzdHJ1Y3QgWG1QY2lMcEV2ZW50ICopZXZlbnRQYXJtLCByZWdzUGFybSk7Ci0JCQlicmVhazsKLQkJY2FzZSBIdkxwRXZlbnRfRnVuY3Rpb25fQWNrOgotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJIlhtUGNpTHBFdmVudC5jOiB1bmV4cGVjdGVkIGFjayByZWNlaXZlZFxuIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSJYbVBjaUxwRXZlbnQuYzogdW5leHBlY3RlZCBldmVudCBmdW5jdGlvbiAlZFxuIiwKLQkJCQkoaW50KWV2ZW50UGFybS0+eEZsYWdzLnhGdW5jdGlvbik7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSBpZiAoZXZlbnRQYXJtKQotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJYbVBjaUxwRXZlbnQuYzogVW5yZWNvZ25pemVkIFBDSSBldmVudCB0eXBlIDB4JXhcbiIsCi0JCQkoaW50KWV2ZW50UGFybS0+eFR5cGUpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJYbVBjaUxwRXZlbnQuYzogTlVMTCBldmVudCByZWNlaXZlZFxuIik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgaW50UmVjZWl2ZWQoc3RydWN0IFhtUGNpTHBFdmVudCAqZXZlbnRQYXJtLAotCQlzdHJ1Y3QgcHRfcmVncyAqcmVnc1Bhcm0pCi17Ci0JaW50IGlycTsKLQotCSsrUGNpX0ludGVycnVwdF9Db3VudDsKLSNpZiAwCi0JUFBDREJHKFBQQ0RCR19CVVNXQUxLLCAiUENJOiBYbVBjaUxwRXZlbnQuYzogaW50UmVjZWl2ZWRcbiIpOwotI2VuZGlmCi0KLQlzd2l0Y2ggKGV2ZW50UGFybS0+aHZMcEV2ZW50LnhTdWJ0eXBlKSB7Ci0JY2FzZSBYbVBjaUxwRXZlbnRfU2xvdEludGVycnVwdDoKLQkJaXJxID0gZXZlbnRQYXJtLT5odkxwRXZlbnQueENvcnJlbGF0aW9uVG9rZW47Ci0JCS8qIERpc3BhdGNoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIHRoaXMgaXJxICovCi0JCXBwY19pcnFfZGlzcGF0Y2hfaGFuZGxlcihyZWdzUGFybSwgaXJxKTsKLQkJSHZDYWxsUGNpX2VvaShldmVudFBhcm0tPmV2ZW50RGF0YS5zbG90SW50ZXJydXB0LmJ1c051bWJlciwKLQkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLnNsb3RJbnRlcnJ1cHQuc3ViQnVzTnVtYmVyLAotCQkJZXZlbnRQYXJtLT5ldmVudERhdGEuc2xvdEludGVycnVwdC5kZXZpY2VJZCk7Ci0JCWJyZWFrOwotCQkvKiBJZ25vcmUgZXJyb3IgcmVjb3ZlcnkgZXZlbnRzIGZvciBub3cgKi8KLQljYXNlIFhtUGNpTHBFdmVudF9CdXNDcmVhdGVkOgotCQlwcmludGsoS0VSTl9JTkZPICJYbVBjaUxwRXZlbnQuYzogc3lzdGVtIGJ1cyAlZCBjcmVhdGVkXG4iLAotCQkJZXZlbnRQYXJtLT5ldmVudERhdGEuYnVzQ3JlYXRlZC5idXNOdW1iZXIpOwotCQlicmVhazsKLQljYXNlIFhtUGNpTHBFdmVudF9CdXNFcnJvcjoKLQljYXNlIFhtUGNpTHBFdmVudF9CdXNGYWlsZWQ6Ci0JCXByaW50ayhLRVJOX0lORk8gIlhtUGNpTHBFdmVudC5jOiBzeXN0ZW0gYnVzICVkIGZhaWxlZFxuIiwKLQkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLmJ1c0ZhaWxlZC5idXNOdW1iZXIpOwotCQlicmVhazsKLQljYXNlIFhtUGNpTHBFdmVudF9CdXNSZWNvdmVyZWQ6Ci0JY2FzZSBYbVBjaUxwRXZlbnRfVW5RdWllc2NlQnVzOgotCQlwcmludGsoS0VSTl9JTkZPICJYbVBjaUxwRXZlbnQuYzogc3lzdGVtIGJ1cyAlZCByZWNvdmVyZWRcbiIsCi0JCQlldmVudFBhcm0tPmV2ZW50RGF0YS5idXNSZWNvdmVyZWQuYnVzTnVtYmVyKTsKLQkJYnJlYWs7Ci0JY2FzZSBYbVBjaUxwRXZlbnRfTm9kZUZhaWxlZDoKLQljYXNlIFhtUGNpTHBFdmVudF9CcmlkZ2VFcnJvcjoKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIlhtUGNpTHBFdmVudC5jOiBtdWx0aS1hZGFwdGVyIGJyaWRnZSAlZC8lZC8lZCBmYWlsZWRcbiIsCi0JCQlldmVudFBhcm0tPmV2ZW50RGF0YS5ub2RlRmFpbGVkLmJ1c051bWJlciwKLQkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLm5vZGVGYWlsZWQuc3ViQnVzTnVtYmVyLAotCQkJZXZlbnRQYXJtLT5ldmVudERhdGEubm9kZUZhaWxlZC5kZXZpY2VJZCk7Ci0JCWJyZWFrOwotCWNhc2UgWG1QY2lMcEV2ZW50X05vZGVSZWNvdmVyZWQ6Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSJYbVBjaUxwRXZlbnQuYzogbXVsdGktYWRhcHRlciBicmlkZ2UgJWQvJWQvJWQgcmVjb3ZlcmVkXG4iLAotCQkJZXZlbnRQYXJtLT5ldmVudERhdGEubm9kZVJlY292ZXJlZC5idXNOdW1iZXIsCi0JCQlldmVudFBhcm0tPmV2ZW50RGF0YS5ub2RlUmVjb3ZlcmVkLnN1YkJ1c051bWJlciwKLQkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLm5vZGVSZWNvdmVyZWQuZGV2aWNlSWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJYbVBjaUxwRXZlbnQuYzogdW5yZWNvZ25pemVkIGV2ZW50IHN1YnR5cGUgMHgleFxuIiwKLQkJCWV2ZW50UGFybS0+aHZMcEV2ZW50LnhTdWJ0eXBlKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0KLS8qIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBzb21ldGltZSBwcmlvciB0byBidXN3YWxrIChpbml0X0lSUSB3b3VsZCBiZSBnb29kKSAqLwotaW50IFhtUGNpTHBFdmVudF9pbml0KCkKLXsKLQlpbnQgeFJjOwotCi0JUFBDREJHKFBQQ0RCR19CVVNXQUxLLAotCQkJIlhtUGNpTHBFdmVudF9pbml0LCBSZWdpc3RlciBFdmVudCB0eXBlIDB4JTA0WFxuIiwKLQkJCUh2THBFdmVudF9UeXBlX1BjaUlvKTsKLQotCXhSYyA9IEh2THBFdmVudF9yZWdpc3RlckhhbmRsZXIoSHZMcEV2ZW50X1R5cGVfUGNpSW8sCi0JCQkmWG1QY2lMcEV2ZW50X2hhbmRsZXIpOwotCWlmICh4UmMgPT0gMCkgewotCQl4UmMgPSBIdkxwRXZlbnRfb3BlblBhdGgoSHZMcEV2ZW50X1R5cGVfUGNpSW8sIDApOwotCQlpZiAoeFJjICE9IDApCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCQkiWG1QY2lMcEV2ZW50LmM6IG9wZW4gZXZlbnQgcGF0aCBmYWlsZWQgd2l0aCByYyAweCV4XG4iLAotCQkJCXhSYyk7Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0VSUgotCQkJIlhtUGNpTHBFdmVudC5jOiByZWdpc3RlciBoYW5kbGVyIGZhaWxlZCB3aXRoIHJjIDB4JXhcbiIsCi0JCQl4UmMpOwotCXJldHVybiB4UmM7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCAwMDk0YWM3Li5hYmI5ZTViIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0l0THBRdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2THBFdmVudC5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9kbWEuYyBiL2FyY2gvcHBjNjQva2VybmVsL2RtYS5jCmluZGV4IGNlNzE0YzkuLjRkYThlMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2RtYS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2RtYS5jCkBAIC0xNSw4ICsxNSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2KQogeworI2lmZGVmIENPTkZJR19QQ0kKIAlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKIAkJcmV0dXJuICZwY2lfZG1hX29wczsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19JQk1WSU8KIAlpZiAoZGV2LT5idXMgPT0gJnZpb19idXNfdHlwZSkKIAkJcmV0dXJuICZ2aW9fZG1hX29wczsKQEAgLTM3LDggKzM5LDEwIEBACiAKIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCiB7CisjaWZkZWYgQ09ORklHX1BDSQogCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQogCQlyZXR1cm4gcGNpX3NldF9kbWFfbWFzayh0b19wY2lfZGV2KGRldiksIGRtYV9tYXNrKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19JQk1WSU8KIAlpZiAoZGV2LT5idXMgPT0gJnZpb19idXNfdHlwZSkKIAkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9lZWguYyBiL2FyY2gvcHBjNjQva2VybmVsL2VlaC5jCmluZGV4IGQ2M2Q0MWYuLmFmNTI3MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2VlaC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2VlaC5jCkBAIC01MDUsNyArNTA1LDcgQEAKIAlwdGVfdCAqcHRlcDsKIAl1bnNpZ25lZCBsb25nIHBhOwogCi0JcHRlcCA9IGZpbmRfbGludXhfcHRlKGlvcmVtYXBfbW0ucGdkLCB0b2tlbik7CisJcHRlcCA9IGZpbmRfbGludXhfcHRlKGluaXRfbW0ucGdkLCB0b2tlbik7CiAJaWYgKCFwdGVwKQogCQlyZXR1cm4gdG9rZW47CiAJcGEgPSBwdGVfcGZuKCpwdGVwKSA8PCBQQUdFX1NISUZUOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TCmluZGV4IDM0NmRiZjYuLjAyYzhmNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9oZWFkLlMKQEAgLTIxMjEsMTAgKzIxMjEsNiBAQAogc3dhcHBlcl9wZ19kaXI6CiAJLnNwYWNlCTQwOTYKIAotCS5nbG9ibAlpb3JlbWFwX2RpcgotaW9yZW1hcF9kaXI6Ci0JLnNwYWNlCTQwOTYKLQogI2lmZGVmIENPTkZJR19TTVAKIC8qIDEgcGFnZSBzZWdtZW50IHRhYmxlIHBlciBjcHUgKG1heCA0OCwgY3B1MCBhbGxvY2F0ZWQgYXQgU1RBQjBfUEhZU19BRERSKSAqLwogCS5nbG9ibAlzdGFiX2FycmF5CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX1ZwZEluZm8uYyBiL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfVnBkSW5mby5jCmluZGV4IGE2ZjBmZjIuLmQxMWM3MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfVnBkSW5mby5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfVnBkSW5mby5jCkBAIC0xLDMxICsxLDMxIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRmlsZSBpU2VyaWVzX3ZwZEluZm8uYyBjcmVhdGVkIGJ5IEFsbGFuIFRyYXV0bWFuIG9uIEZyaSBGZWIgIDIgMjAwMS4gKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBUaGlzIGNvZGUgZ2V0cyB0aGUgY2FyZCBsb2NhdGlvbiBvZiB0aGUgaGFyZHdhcmUgICAgICAgICAgICAgICAgICAgICAqLwotLyogQ29weXJpZ2h0IChDKSAyMHl5ICA8QWxsYW4gSCBUcmF1dG1hbj4gPElCTSBDb3JwPiAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAqLwotLyogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgKi8KLS8qIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICovCi0vKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICovIAotLyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgKi8KLS8qIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICovCi0vKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICovIAotLyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlOiAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotLyogNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCi0vKiBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIENoYW5nZSBBY3Rpdml0eTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIENyZWF0ZWQsIEZlYiAyLCAyMDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBQb3J0ZWQgdG8gcHBjNjQsIEF1Z3VzdCAyMCwgMjAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEVuZCBDaGFuZ2UgQWN0aXZpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorLyoKKyAqIEZpbGUgaVNlcmllc192cGRJbmZvLmMgY3JlYXRlZCBieSBBbGxhbiBUcmF1dG1hbiBvbiBGcmkgRmViICAyIDIwMDEuCisgKgorICogVGhpcyBjb2RlIGdldHMgdGhlIGNhcmQgbG9jYXRpb24gb2YgdGhlIGhhcmR3YXJlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIDxBbGxhbiBIIFRyYXV0bWFuPiA8SUJNIENvcnA+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgIFN0ZXBoZW4gUm90aHdlbCwgSUJNIENvcnAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZToKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogQ2hhbmdlIEFjdGl2aXR5OgorICogICBDcmVhdGVkLCBGZWIgMiwgMjAwMQorICogICBQb3J0ZWQgdG8gcHBjNjQsIEF1Z3VzdCAyMCwgMjAwMQorICogRW5kIENoYW5nZSBBY3Rpdml0eQorICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMzQsMzAgKzM0LDI1IEBACiAKICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxQY2kuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvbWYuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9McGFyRGF0YS5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL2lTZXJpZXNfcGNpLmg+Ci0jaW5jbHVkZSAicGNpLmgiCiAKIC8qCiAgKiBTaXplIG9mIEJ1cyBWUEQgZGF0YQogICovCiAjZGVmaW5lIEJVU19WUERTSVpFICAgICAgMTAyNAorCiAvKgogICogQnVzIFZwZCBUYWdzCiAgKi8KLSNkZWZpbmUgIFZwZEVuZE9mRGF0YVRhZyAgIDB4NzgKICNkZWZpbmUgIFZwZEVuZE9mQXJlYVRhZyAgIDB4NzkKICNkZWZpbmUgIFZwZElkU3RyaW5nVGFnICAgIDB4ODIKICNkZWZpbmUgIFZwZFZlbmRvckFyZWFUYWcgIDB4ODQKKwogLyoKICAqIE1mZyBBcmVhIFRhZ3MKICAqLwotI2RlZmluZSAgVnBkRnJ1RmxhZyAgICAgICAweDQ2NDcgICAgIC8vICJGRyIKICNkZWZpbmUgIFZwZEZydUZyYW1lSWQgICAgMHg0NjQ5ICAgICAvLyAiRkkiCiAjZGVmaW5lICBWcGRTbG90TWFwRm9ybWF0IDB4NEQ0NiAgICAgLy8gIk1GIgotI2RlZmluZSAgVnBkQXNtUGFydE51bWJlciAweDUwNEUgICAgIC8vICJQTiIKLSNkZWZpbmUgIFZwZEZydVNlcmlhbCAgICAgMHg1MzRFICAgICAvLyAiU04iCiAjZGVmaW5lICBWcGRTbG90TWFwICAgICAgIDB4NTM0RCAgICAgLy8gIlNNIgogCiAvKgpAQCAtNzksNzQgKzc0LDMzIEBACiAJY2hhciBDYXJkTG9jYXRpb25bM107CiAJY2hhciBQYXJtc1s4XTsKIAljaGFyIFJlc2VydmVkWzJdOwotfTsgCit9OwogdHlwZWRlZiBzdHJ1Y3QgU2xvdE1hcFN0cnVjdCBTbG90TWFwOwogI2RlZmluZSBTTE9UX0VOVFJZX1NJWkUgICAxNgogCiAvKgotICogRm9ybWF0cyB0aGUgZGV2aWNlIGluZm9ybWF0aW9uLgotICogLSBQYXNzIGluIHBjaV9kZXYqIHBvaW50ZXIgdG8gdGhlIGRldmljZS4KLSAqIC0gUGFzcyBpbiBidWZmZXIgdG8gcGxhY2UgdGhlIGRhdGEuICBEYW5nZXIgaGVyZSBpcyB0aGUgYnVmZmVyIG11c3QKLSAqICAgYmUgYXMgYmlnIGFzIHRoZSBjbGllbnQgc2F5cyBpdCBpcy4gICBTaG91bGQgYmUgYXQgbGVhc3QgMTI4IGJ5dGVzLgotICogUmV0dXJuIHdpbGwgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGRhdGEgcHV0IGluIHRoZSBidWZmZXIuCi0gKiBGb3JtYXQ6Ci0gKiBQQ0k6IEJ1cyAgMCwgRGV2aWNlIDI2LCBWZW5kb3IgMHgxMkFFICBGcmFtZSAgMSwgQ2FyZCAgQzEwICBFdGhlcm5ldAotICogY29udHJvbGxlcgotICovCi1pbnQgaVNlcmllc19EZXZpY2VfSW5mb3JtYXRpb24oc3RydWN0IHBjaV9kZXYgKlBjaURldiwgY2hhciAqYnVmZmVyLAotCQlpbnQgQnVmZmVyU2l6ZSkKLXsKLQlzdHJ1Y3QgaVNlcmllc19EZXZpY2VfTm9kZSAqRGV2Tm9kZSA9Ci0JCShzdHJ1Y3QgaVNlcmllc19EZXZpY2VfTm9kZSAqKVBjaURldi0+c3lzZGF0YTsKLQlpbnQgbGVuOwotCi0JaWYgKERldk5vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIHNwcmludGYoYnVmZmVyLAotCQkJCSJQQ0k6IGlTZXJpZXNfRGV2aWNlX0luZm9ybWF0aW9uIERldk5vZGUgaXMgTlVMTCIpOwotCi0JaWYgKEJ1ZmZlclNpemUgPCAxMjgpCi0JCXJldHVybiAwOwotCi0JbGVuID0gc3ByaW50ZihidWZmZXIsICJQQ0k6IEJ1cyUzZCwgRGV2aWNlJTNkLCBWZW5kb3IgJTA0WCAiLAotCQkJSVNFUklFU19CVVMoRGV2Tm9kZSksIFBDSV9TTE9UKFBjaURldi0+ZGV2Zm4pLAotCQkJUGNpRGV2LT52ZW5kb3IpOwotCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgIkZyYW1lJTNkLCBDYXJkICU0cyAgIiwKLQkJCURldk5vZGUtPkZyYW1lSWQsIERldk5vZGUtPkNhcmRMb2NhdGlvbik7Ci0jaWZkZWYgQ09ORklHX1BDSQotCWlmIChwY2lfY2xhc3NfbmFtZShQY2lEZXYtPmNsYXNzID4+IDgpID09IDApCi0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgIjB4JTA0WCAgIiwKLQkJCQkoaW50KShQY2lEZXYtPmNsYXNzID4+IDgpKTsKLQllbHNlCi0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgIiVzIiwKLQkJCQlwY2lfY2xhc3NfbmFtZShQY2lEZXYtPmNsYXNzID4+IDgpKTsKLSNlbmRpZgotCXJldHVybiBsZW47Ci19Ci0KLS8qCiAgKiBQYXJzZSB0aGUgU2xvdCBBcmVhCiAgKi8KLXZvaWQgaVNlcmllc19QYXJzZV9TbG90QXJlYShTbG90TWFwICpNYXBQdHIsIGludCBNYXBMZW4sCi0JCXN0cnVjdCBpU2VyaWVzX0RldmljZV9Ob2RlICpEZXZOb2RlKQorc3RhdGljIHZvaWQgX19pbml0IGlTZXJpZXNfUGFyc2VfU2xvdEFyZWEoU2xvdE1hcCAqTWFwUHRyLCBpbnQgTWFwTGVuLAorCQlIdkFnZW50SWQgYWdlbnQsIHU4ICpQaGJJZCwgY2hhciBjYXJkWzRdKQogewogCWludCBTbG90TWFwTGVuID0gTWFwTGVuOwogCVNsb3RNYXAgKlNsb3RNYXBQdHIgPSBNYXBQdHI7CiAKIAkvKgotCSAqIFBhcnNlIFNsb3QgbGFiZWwgdW50aWwgd2UgZmluZCB0aGUgb25lIHJlcXVyZXN0ZWQKKwkgKiBQYXJzZSBTbG90IGxhYmVsIHVudGlsIHdlIGZpbmQgdGhlIG9uZSByZXF1ZXN0ZWQKIAkgKi8KIAl3aGlsZSAoU2xvdE1hcExlbiA+IDApIHsKLQkJaWYgKFNsb3RNYXBQdHItPkFnZW50SWQgPT0gRGV2Tm9kZS0+QWdlbnRJZCApIHsKKwkJaWYgKFNsb3RNYXBQdHItPkFnZW50SWQgPT0gYWdlbnQpIHsKIAkJCS8qCiAJCQkgKiBJZiBQaGIgd2Fzbid0IGZvdW5kLCBncmFiIHRoZSBlbnRyeSBmaXJzdCBvbmUgZm91bmQuCiAJCQkgKi8KLQkJCWlmIChEZXZOb2RlLT5QaGJJZCA9PSAweGZmKQotCQkJCURldk5vZGUtPlBoYklkID0gU2xvdE1hcFB0ci0+UGhiSWQ7IAorCQkJaWYgKCpQaGJJZCA9PSAweGZmKQorCQkJCSpQaGJJZCA9IFNsb3RNYXBQdHItPlBoYklkOwogCQkJLyogRm91bmQgaXQsIGV4dHJhY3QgdGhlIGRhdGEuICovCi0JCQlpZiAoU2xvdE1hcFB0ci0+UGhiSWQgPT0gRGV2Tm9kZS0+UGhiSWQgKSB7Ci0JICAgICAgICAJCW1lbWNweSgmRGV2Tm9kZS0+Q2FyZExvY2F0aW9uLAotCQkJCQkJJlNsb3RNYXBQdHItPkNhcmRMb2NhdGlvbiwgMyk7Ci0JCQkJRGV2Tm9kZS0+Q2FyZExvY2F0aW9uWzNdICA9IDA7CisJCQlpZiAoU2xvdE1hcFB0ci0+UGhiSWQgPT0gKlBoYklkKSB7CisJCQkJbWVtY3B5KGNhcmQsICZTbG90TWFwUHRyLT5DYXJkTG9jYXRpb24sIDMpOworCQkJCWNhcmRbM10gID0gMDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTU5LDggKzExMyw5IEBACiAvKgogICogUGFyc2UgdGhlIE1mZyBBcmVhCiAgKi8KLXN0YXRpYyB2b2lkIGlTZXJpZXNfUGFyc2VfTWZnQXJlYSh1OCAqQXJlYURhdGEsIGludCBBcmVhTGVuLAotCQlzdHJ1Y3QgaVNlcmllc19EZXZpY2VfTm9kZSAqRGV2Tm9kZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBpU2VyaWVzX1BhcnNlX01mZ0FyZWEodTggKkFyZWFEYXRhLCBpbnQgQXJlYUxlbiwKKwkJSHZBZ2VudElkIGFnZW50LCB1OCAqUGhiSWQsCisJCXU4ICpmcmFtZSwgY2hhciBjYXJkWzRdKQogewogCU1mZ0FyZWEgKk1mZ0FyZWFQdHIgPSAoTWZnQXJlYSAqKUFyZWFEYXRhOwogCWludCBNZmdBcmVhTGVuID0gQXJlYUxlbjsKQEAgLTE3MSw3ICsxMjYsNyBAQAogCQlpbnQgTWZnVGFnTGVuID0gTWZnQXJlYVB0ci0+VGFnTGVuZ3RoOwogCQkvKiBGcmFtZSBJRCAgICAgICAgIChGSSA0NjQ5MDIwMzEwICkgKi8KIAkJaWYgKE1mZ0FyZWFQdHItPlRhZyA9PSBWcGRGcnVGcmFtZUlkKQkJLyogRkkgICovCi0JCQlEZXZOb2RlLT5GcmFtZUlkID0gTWZnQXJlYVB0ci0+QXJlYURhdGExOworCQkJKmZyYW1lID0gTWZnQXJlYVB0ci0+QXJlYURhdGExOwogCQkvKiBTbG90IE1hcCBGb3JtYXQgIChNRiA0RDQ2MDIwMDA0ICkgKi8KIAkJZWxzZSBpZiAoTWZnQXJlYVB0ci0+VGFnID09IFZwZFNsb3RNYXBGb3JtYXQpCS8qIE1GICAqLwogCQkJU2xvdE1hcEZtdCA9IChNZmdBcmVhUHRyLT5BcmVhRGF0YTEgKiAyNTYpCkBAIC0xODMsMTAgKzEzOCwxMSBAQAogCQkJaWYgKFNsb3RNYXBGbXQgPT0gMHgxMDA0KQogCQkJCVNsb3RNYXBQdHIgPSAoU2xvdE1hcCAqKSgoY2hhciAqKU1mZ0FyZWFQdHIKIAkJCQkJCSsgTUZHX0VOVFJZX1NJWkUgKyAxKTsKLSAJICAgIAkJZWxzZQorCQkJZWxzZQogCQkJCVNsb3RNYXBQdHIgPSAoU2xvdE1hcCAqKSgoY2hhciAqKU1mZ0FyZWFQdHIKIAkJCQkJCSsgTUZHX0VOVFJZX1NJWkUpOwotCSAgICAJCWlTZXJpZXNfUGFyc2VfU2xvdEFyZWEoU2xvdE1hcFB0ciwgTWZnVGFnTGVuLCBEZXZOb2RlKTsKKwkJCWlTZXJpZXNfUGFyc2VfU2xvdEFyZWEoU2xvdE1hcFB0ciwgTWZnVGFnTGVuLAorCQkJCQlhZ2VudCwgUGhiSWQsIGNhcmQpOwogCQl9CiAJCS8qCiAJCSAqIFBvaW50IHRvIHRoZSBuZXh0IE1mZyBBcmVhCkBAIC0xOTQsMTkgKzE1MCwxOSBAQAogCQkgKi8KIAkJTWZnQXJlYVB0ciA9IChNZmdBcmVhICopKChjaGFyICopTWZnQXJlYVB0ciArIE1mZ1RhZ0xlbgogCQkJCSsgTUZHX0VOVFJZX1NJWkUpOwotCQlNZmdBcmVhTGVuIC09IChNZmdUYWdMZW4gKyBNRkdfRU5UUllfU0laRSk7IAotCX0JCisJCU1mZ0FyZWFMZW4gLT0gKE1mZ1RhZ0xlbiArIE1GR19FTlRSWV9TSVpFKTsKKwl9CiB9CiAKIC8qCiAgKiBMb29rIGZvciAiQlVTIi4uIERhdGEgaXMgbm90IE51bGwgdGVybWluYXRlZC4KICAqIFBIQklEIG9mIDB4RkYgaW5kaWNhdGVzIFBIQiB3YXMgbm90IGZvdW5kIGluIFZQRCBEYXRhLgogICovCi1zdGF0aWMgaW50IGlTZXJpZXNfUGFyc2VfUGhiSWQodTggKkFyZWFQdHIsIGludCBBcmVhTGVuZ3RoKQorc3RhdGljIGludCBfX2luaXQgaVNlcmllc19QYXJzZV9QaGJJZCh1OCAqQXJlYVB0ciwgaW50IEFyZWFMZW5ndGgpCiB7CiAJdTggKlBoYlB0ciA9IEFyZWFQdHI7CiAJaW50IERhdGFMZW4gPSBBcmVhTGVuZ3RoOwotCWNoYXIgUGhiSWQgPSAweEZGOyAgICAgICAgICAgICAgICAgICAKKwljaGFyIFBoYklkID0gMHhGRjsKIAogCXdoaWxlIChEYXRhTGVuID4gMCkgewogCQlpZiAoKCpQaGJQdHIgPT0gJ0InKSAmJiAoKihQaGJQdHIgKyAxKSA9PSAnVScpCkBAIC0yMTYsNyArMTcyLDcgQEAKIAkJCQkrK1BoYlB0cjsKIAkJCVBoYklkID0gKCpQaGJQdHIgJiAweDBGKTsKIAkJCWJyZWFrOwotICAgICAgICAJfQorCQl9CiAJCSsrUGhiUHRyOwogCQktLURhdGFMZW47CiAJfQpAQCAtMjI2LDUyICsxODIsOTAgQEAKIC8qCiAgKiBQYXJzZSBvdXQgdGhlIFZQRCBBcmVhcwogICovCi1zdGF0aWMgdm9pZCBpU2VyaWVzX1BhcnNlX1ZwZCh1OCAqVnBkRGF0YSwgaW50IFZwZERhdGFMZW4sCi0JCXN0cnVjdCBpU2VyaWVzX0RldmljZV9Ob2RlICpEZXZOb2RlKQorc3RhdGljIHZvaWQgX19pbml0IGlTZXJpZXNfUGFyc2VfVnBkKHU4ICpWcGREYXRhLCBpbnQgVnBkRGF0YUxlbiwKKwkJSHZBZ2VudElkIGFnZW50LCB1OCAqZnJhbWUsIGNoYXIgY2FyZFs0XSkKIHsKIAl1OCAqVGFnUHRyID0gVnBkRGF0YTsKIAlpbnQgRGF0YUxlbiA9IFZwZERhdGFMZW4gLSAzOworCXU4IFBoYklkOwogCiAJd2hpbGUgKCgqVGFnUHRyICE9IFZwZEVuZE9mQXJlYVRhZykgJiYgKERhdGFMZW4gPiAwKSkgewotCQlpbnQgQXJlYUxlbiA9ICooVGFnUHRyICsgMSkgKyAoKihUYWdQdHIgKyAyKSAqIDI1Nik7CQorCQlpbnQgQXJlYUxlbiA9ICooVGFnUHRyICsgMSkgKyAoKihUYWdQdHIgKyAyKSAqIDI1Nik7CiAJCXU4ICpBcmVhRGF0YSAgPSBUYWdQdHIgKyAzOwogCiAJCWlmICgqVGFnUHRyID09IFZwZElkU3RyaW5nVGFnKQotCQkJRGV2Tm9kZS0+UGhiSWQgPSBpU2VyaWVzX1BhcnNlX1BoYklkKEFyZWFEYXRhLCBBcmVhTGVuKTsKKwkJCVBoYklkID0gaVNlcmllc19QYXJzZV9QaGJJZChBcmVhRGF0YSwgQXJlYUxlbik7CiAJCWVsc2UgaWYgKCpUYWdQdHIgPT0gVnBkVmVuZG9yQXJlYVRhZykKLQkgICAgCQlpU2VyaWVzX1BhcnNlX01mZ0FyZWEoQXJlYURhdGEsIEFyZWFMZW4sIERldk5vZGUpOworCQkJaVNlcmllc19QYXJzZV9NZmdBcmVhKEFyZWFEYXRhLCBBcmVhTGVuLAorCQkJCQlhZ2VudCwgJlBoYklkLCBmcmFtZSwgY2FyZCk7CiAJCS8qIFBvaW50IHRvIG5leHQgQXJlYS4gKi8KIAkJVGFnUHRyICA9IEFyZWFEYXRhICsgQXJlYUxlbjsKIAkJRGF0YUxlbiAtPSBBcmVhTGVuOwogCX0KLX0gICAgCit9CiAKLXZvaWQgaVNlcmllc19HZXRfTG9jYXRpb25fQ29kZShzdHJ1Y3QgaVNlcmllc19EZXZpY2VfTm9kZSAqRGV2Tm9kZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBpU2VyaWVzX0dldF9Mb2NhdGlvbl9Db2RlKHUxNiBidXMsIEh2QWdlbnRJZCBhZ2VudCwKKwkJdTggKmZyYW1lLCBjaGFyIGNhcmRbNF0pCiB7CiAJaW50IEJ1c1ZwZExlbiA9IDA7Ci0JdTggKkJ1c1ZwZFB0ciA9ICh1OCAqKWttYWxsb2MoQlVTX1ZQRFNJWkUsIEdGUF9LRVJORUwpOworCXU4ICpCdXNWcGRQdHIgPSBrbWFsbG9jKEJVU19WUERTSVpFLCBHRlBfS0VSTkVMKTsKIAogCWlmIChCdXNWcGRQdHIgPT0gTlVMTCkgewogCQlwcmludGsoIlBDSTogQnVzIFZQRCBCdWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIik7CiAJCXJldHVybjsKIAl9Ci0JQnVzVnBkTGVuID0gSHZDYWxsUGNpX2dldEJ1c1ZwZChJU0VSSUVTX0JVUyhEZXZOb2RlKSwKLQkJCQkJSVNFUklFU19IVl9BRERSKEJ1c1ZwZFB0ciksCisJQnVzVnBkTGVuID0gSHZDYWxsUGNpX2dldEJ1c1ZwZChidXMsIElTRVJJRVNfSFZfQUREUihCdXNWcGRQdHIpLAogCQkJCQlCVVNfVlBEU0laRSk7CiAJaWYgKEJ1c1ZwZExlbiA9PSAwKSB7Ci0JCWtmcmVlKEJ1c1ZwZFB0cik7CiAJCXByaW50aygiUENJOiBCdXMgVlBEIEJ1ZmZlciB6ZXJvIGxlbmd0aC5cbiIpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCS8qIHByaW50aygiUENJOiBCdXNWcGRQdHI6ICVwLCAlZFxuIixCdXNWcGRQdHIsIEJ1c1ZwZExlbik7ICovCiAJLyogTWFrZSBzdXJlIHRoaXMgaXMgd2hhdCBJIHRoaW5rIGl0IGlzICovCiAJaWYgKCpCdXNWcGRQdHIgIT0gVnBkSWRTdHJpbmdUYWcpIHsJLyogMHg4MiAqLwogCQlwcmludGsoIlBDSTogQnVzIFZQRCBCdWZmZXIgbWlzc2luZyBzdGFydGluZyB0YWcuXG4iKTsKLQkJa2ZyZWUoQnVzVnBkUHRyKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisJaVNlcmllc19QYXJzZV9WcGQoQnVzVnBkUHRyLCBCdXNWcGRMZW4sIGFnZW50LCBmcmFtZSwgY2FyZCk7CitvdXRfZnJlZToKKwlrZnJlZShCdXNWcGRQdHIpOworfQorCisvKgorICogUHJpbnRzIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24uCisgKiAtIFBhc3MgaW4gcGNpX2RldiogcG9pbnRlciB0byB0aGUgZGV2aWNlLgorICogLSBQYXNzIGluIHRoZSBkZXZpY2UgY291bnQKKyAqCisgKiBGb3JtYXQ6CisgKiBQQ0k6IEJ1cyAgMCwgRGV2aWNlIDI2LCBWZW5kb3IgMHgxMkFFICBGcmFtZSAgMSwgQ2FyZCAgQzEwICBFdGhlcm5ldAorICogY29udHJvbGxlcgorICovCit2b2lkIF9faW5pdCBpU2VyaWVzX0RldmljZV9JbmZvcm1hdGlvbihzdHJ1Y3QgcGNpX2RldiAqUGNpRGV2LCBpbnQgY291bnQpCit7CisJc3RydWN0IGlTZXJpZXNfRGV2aWNlX05vZGUgKkRldk5vZGUgPSBQY2lEZXYtPnN5c2RhdGE7CisJdTE2IGJ1czsKKwl1OCBmcmFtZTsKKwljaGFyIGNhcmRbNF07CisJSHZTdWJCdXNOdW1iZXIgc3ViYnVzOworCUh2QWdlbnRJZCBhZ2VudDsKKworCWlmIChEZXZOb2RlID09IE5VTEwpIHsKKwkJcHJpbnRrKCIlZC4gUENJOiBpU2VyaWVzX0RldmljZV9JbmZvcm1hdGlvbiBEZXZOb2RlIGlzIE5VTExcbiIsCisJCQkJY291bnQpOwogCQlyZXR1cm47CiAJfQotCWlTZXJpZXNfUGFyc2VfVnBkKEJ1c1ZwZFB0cixCdXNWcGRMZW4sIERldk5vZGUpOwotCXNwcmludGYoRGV2Tm9kZS0+TG9jYXRpb24sICJGcmFtZSUzZCwgQ2FyZCAlLTRzIiwgRGV2Tm9kZS0+RnJhbWVJZCwKLQkJCURldk5vZGUtPkNhcmRMb2NhdGlvbik7Ci0Ja2ZyZWUoQnVzVnBkUHRyKTsKKworCWJ1cyA9IElTRVJJRVNfQlVTKERldk5vZGUpOworCXN1YmJ1cyA9IElTRVJJRVNfU1VCQlVTKERldk5vZGUpOworCWFnZW50ID0gSVNFUklFU19QQ0lfQUdFTlRJRChJU0VSSUVTX0dFVF9ERVZJQ0VfRlJPTV9TVUJCVVMoc3ViYnVzKSwKKwkJCUlTRVJJRVNfR0VUX0ZVTkNUSU9OX0ZST01fU1VCQlVTKHN1YmJ1cykpOworCWlTZXJpZXNfR2V0X0xvY2F0aW9uX0NvZGUoYnVzLCBhZ2VudCwgJmZyYW1lLCBjYXJkKTsKKworCXByaW50aygiJWQuIFBDSTogQnVzJTNkLCBEZXZpY2UlM2QsIFZlbmRvciAlMDRYIEZyYW1lJTNkLCBDYXJkICU0cyAgIiwKKwkJCWNvdW50LCBidXMsIFBDSV9TTE9UKFBjaURldi0+ZGV2Zm4pLCBQY2lEZXYtPnZlbmRvciwKKwkJCWZyYW1lLCBjYXJkKTsKKwlpZiAocGNpX2NsYXNzX25hbWUoUGNpRGV2LT5jbGFzcyA+PiA4KSA9PSAwKQorCQlwcmludGsoIjB4JTA0WFxuIiwgKGludCkoUGNpRGV2LT5jbGFzcyA+PiA4KSk7CisJZWxzZQorCQlwcmludGsoIiVzXG4iLCBwY2lfY2xhc3NfbmFtZShQY2lEZXYtPmNsYXNzID4+IDgpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfaW9tbXUuYyBiL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfaW9tbXUuYwppbmRleCA0ZTFhNDdjLi5mOGZmMWJiIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX2lvbW11LmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19pb21tdS5jCkBAIC04Myw3ICs4Myw3IEBACiAJfQogfQogCi0KKyNpZmRlZiBDT05GSUdfUENJCiAvKgogICogVGhpcyBmdW5jdGlvbiBjb21wYXJlcyB0aGUga25vd24gdGFibGVzIHRvIGZpbmQgYW4gaW9tbXVfdGFibGUKICAqIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBidWlsdCBmb3IgaGFyZHdhcmUgVENFcy4KQEAgLTE1OSw2ICsxNTksNyBAQAogCWVsc2UKIAkJa2ZyZWUodGJsKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBpb21tdV9kZXZfc2V0dXBfaVNlcmllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IH0KIHN0YXRpYyB2b2lkIGlvbW11X2J1c19zZXR1cF9pU2VyaWVzKHN0cnVjdCBwY2lfYnVzICpidXMpIHsgfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19pcnEuYyBiL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfaXJxLmMKaW5kZXggZjgzMWQyNS4uNzczNzZjMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19pcnEuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX2lycS5jCkBAIC0xLDI3ICsxLDI5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGlTZXJpZXMgUENJIGJ1cyBpbnRlcnJ1cHQgaGFuZGxpbmcgICAgICAgICAgKi8KLS8qIENvcHlyaWdodCAoQykgMjB5eSAgPFJvYmVydCBMIEhvbHRvcmY+IDxJQk0gQ29ycD4gICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgKi8KLS8qIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICovCi0vKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAqLwotLyogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAqLyAKLS8qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICovCi0vKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAqLwotLyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAqLyAKLS8qIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZTogICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLS8qIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotLyogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBDaGFuZ2UgQWN0aXZpdHk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBDcmVhdGVkLCBEZWNlbWJlciAxMywgMjAwMCBieSBXYXluZSBIb2xtICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCi0vKiBFbmQgQ2hhbmdlIEFjdGl2aXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgaVNlcmllcyBQQ0kgYnVzIGludGVycnVwdCBoYW5kbGluZworICogQ29weXJpZ2h0IChDKSAyMHl5ICA8Um9iZXJ0IEwgSG9sdG9yZj4gPElCTSBDb3JwPgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGU6CisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIENoYW5nZSBBY3Rpdml0eToKKyAqICAgQ3JlYXRlZCwgRGVjZW1iZXIgMTMsIDIwMDAgYnkgV2F5bmUgSG9sbQorICogRW5kIENoYW5nZSBBY3Rpdml0eQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KQEAgLTMwLDMwICszMiwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLQogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BwY2RlYnVnLmg+CiAKKyNpbmNsdWRlIDxhc20vcHBjZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZMcEV2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsUGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsWG0uaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9pU2VyaWVzX2lycS5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL1htUGNpTHBFdmVudC5oPgotCi1zdGF0aWMgdW5zaWduZWQgaW50IGlTZXJpZXNfc3RhcnR1cF9JUlEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCBpU2VyaWVzX3NodXRkb3duX0lSUSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIGlTZXJpZXNfZW5hYmxlX0lSUSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIGlTZXJpZXNfZGlzYWJsZV9JUlEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCBpU2VyaWVzX2VuZF9JUlEodW5zaWduZWQgaW50IGlycSk7Ci0KLXN0YXRpYyBod19pcnFfY29udHJvbGxlciBpU2VyaWVzX0lSUV9oYW5kbGVyID0gewotCS50eXBlbmFtZSA9ICJpU2VyaWVzIGlycSBjb250cm9sbGVyIiwKLQkuc3RhcnR1cCA9IGlTZXJpZXNfc3RhcnR1cF9JUlEsCi0JLnNodXRkb3duID0gaVNlcmllc19zaHV0ZG93bl9JUlEsCi0JLmVuYWJsZSA9IGlTZXJpZXNfZW5hYmxlX0lSUSwKLQkuZGlzYWJsZSA9IGlTZXJpZXNfZGlzYWJsZV9JUlEsCi0JLmVuZCA9IGlTZXJpZXNfZW5kX0lSUQotfTsKIAogLyogVGhpcyBtYXBzIHZpcnR1YWwgaXJxIG51bWJlcnMgdG8gcmVhbCBpcnFzICovCiB1bnNpZ25lZCBpbnQgdmlydF9pcnFfdG9fcmVhbF9tYXBbTlJfSVJRU107CkBAIC02MiwzNyArNDksMTg3IEBACiAvKiBOb3RlOiB0aGUgcGNuZXQzMiBkcml2ZXIgYXNzdW1lcyBpcnEgbnVtYmVycyA8IDIgYXJlbid0IHZhbGlkLiA6KCAqLwogc3RhdGljIGludCBuZXh0X3ZpcnR1YWxfaXJxID0gMjsKIAotLyogVGhpcyBpcyBjYWxsZWQgYnkgaW5pdF9JUlEuICBzZXQgaW4gcHBjX21kLmluaXRfSVJRIGJ5IGlTZXJpZXNfc2V0dXAuYyAqLwotdm9pZCBfX2luaXQgaVNlcmllc19pbml0X0lSUSh2b2lkKQorc3RhdGljIGxvbmcgUGNpX0ludGVycnVwdF9Db3VudDsKK3N0YXRpYyBsb25nIFBjaV9FdmVudF9Db3VudDsKKworZW51bSBYbVBjaUxwRXZlbnRfU3VidHlwZSB7CisJWG1QY2lMcEV2ZW50X0J1c0NyZWF0ZWQJCT0gMCwJLy8gUEhCIGhhcyBiZWVuIGNyZWF0ZWQKKwlYbVBjaUxwRXZlbnRfQnVzRXJyb3IJCT0gMSwJLy8gUEhCIGhhcyBmYWlsZWQKKwlYbVBjaUxwRXZlbnRfQnVzRmFpbGVkCQk9IDIsCS8vIE1zZyB0byBTZWNvbmRhcnksIFByaW1hcnkgZmFpbGVkIGJ1cworCVhtUGNpTHBFdmVudF9Ob2RlRmFpbGVkCQk9IDQsCS8vIE11bHRpLWFkYXB0ZXIgYnJpZGdlIGhhcyBmYWlsZWQKKwlYbVBjaUxwRXZlbnRfTm9kZVJlY292ZXJlZAk9IDUsCS8vIE11bHRpLWFkYXB0ZXIgYnJpZGdlIGhhcyByZWNvdmVyZWQKKwlYbVBjaUxwRXZlbnRfQnVzUmVjb3ZlcmVkCT0gMTIsCS8vIFBIQiBoYXMgYmVlbiByZWNvdmVyZWQKKwlYbVBjaUxwRXZlbnRfVW5RdWllc2NlQnVzCT0gMTgsCS8vIFNlY29uZGFyeSBidXMgdW5xaWVzY2luZworCVhtUGNpTHBFdmVudF9CcmlkZ2VFcnJvcgk9IDIxLAkvLyBCcmlkZ2UgRXJyb3IKKwlYbVBjaUxwRXZlbnRfU2xvdEludGVycnVwdAk9IDIyCS8vIFNsb3QgaW50ZXJydXB0Cit9OworCitzdHJ1Y3QgWG1QY2lMcEV2ZW50X0J1c0ludGVycnVwdCB7CisJSHZCdXNOdW1iZXIJYnVzTnVtYmVyOworCUh2U3ViQnVzTnVtYmVyCXN1YkJ1c051bWJlcjsKK307CisKK3N0cnVjdCBYbVBjaUxwRXZlbnRfTm9kZUludGVycnVwdCB7CisJSHZCdXNOdW1iZXIJYnVzTnVtYmVyOworCUh2U3ViQnVzTnVtYmVyCXN1YkJ1c051bWJlcjsKKwlIdkFnZW50SWQJZGV2aWNlSWQ7Cit9OworCitzdHJ1Y3QgWG1QY2lMcEV2ZW50IHsKKwlzdHJ1Y3QgSHZMcEV2ZW50IGh2THBFdmVudDsKKworCXVuaW9uIHsKKwkJdTY0IGFsaWduRGF0YTsJCQkvLyBBbGlnbiBvbiBhbiA4LWJ5dGUgYm91bmRhcnkKKworCQlzdHJ1Y3QgeworCQkJdTMyCQlmaXNyOworCQkJSHZCdXNOdW1iZXIJYnVzTnVtYmVyOworCQkJSHZTdWJCdXNOdW1iZXIJc3ViQnVzTnVtYmVyOworCQkJSHZBZ2VudElkCWRldmljZUlkOworCQl9IHNsb3RJbnRlcnJ1cHQ7CisKKwkJc3RydWN0IFhtUGNpTHBFdmVudF9CdXNJbnRlcnJ1cHQgYnVzRmFpbGVkOworCQlzdHJ1Y3QgWG1QY2lMcEV2ZW50X0J1c0ludGVycnVwdCBidXNSZWNvdmVyZWQ7CisJCXN0cnVjdCBYbVBjaUxwRXZlbnRfQnVzSW50ZXJydXB0IGJ1c0NyZWF0ZWQ7CisKKwkJc3RydWN0IFhtUGNpTHBFdmVudF9Ob2RlSW50ZXJydXB0IG5vZGVGYWlsZWQ7CisJCXN0cnVjdCBYbVBjaUxwRXZlbnRfTm9kZUludGVycnVwdCBub2RlUmVjb3ZlcmVkOworCisJfSBldmVudERhdGE7CisKK307CisKK3N0YXRpYyB2b2lkIGludFJlY2VpdmVkKHN0cnVjdCBYbVBjaUxwRXZlbnQgKmV2ZW50UGFybSwKKwkJc3RydWN0IHB0X3JlZ3MgKnJlZ3NQYXJtKQogewotCS8qIFJlZ2lzdGVyIFBDSSBldmVudCBoYW5kbGVyIGFuZCBvcGVuIGFuIGV2ZW50IHBhdGggKi8KLQlYbVBjaUxwRXZlbnRfaW5pdCgpOworCWludCBpcnE7CisKKwkrK1BjaV9JbnRlcnJ1cHRfQ291bnQ7CisKKwlzd2l0Y2ggKGV2ZW50UGFybS0+aHZMcEV2ZW50LnhTdWJ0eXBlKSB7CisJY2FzZSBYbVBjaUxwRXZlbnRfU2xvdEludGVycnVwdDoKKwkJaXJxID0gZXZlbnRQYXJtLT5odkxwRXZlbnQueENvcnJlbGF0aW9uVG9rZW47CisJCS8qIERpc3BhdGNoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIHRoaXMgaXJxICovCisJCXBwY19pcnFfZGlzcGF0Y2hfaGFuZGxlcihyZWdzUGFybSwgaXJxKTsKKwkJSHZDYWxsUGNpX2VvaShldmVudFBhcm0tPmV2ZW50RGF0YS5zbG90SW50ZXJydXB0LmJ1c051bWJlciwKKwkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLnNsb3RJbnRlcnJ1cHQuc3ViQnVzTnVtYmVyLAorCQkJZXZlbnRQYXJtLT5ldmVudERhdGEuc2xvdEludGVycnVwdC5kZXZpY2VJZCk7CisJCWJyZWFrOworCQkvKiBJZ25vcmUgZXJyb3IgcmVjb3ZlcnkgZXZlbnRzIGZvciBub3cgKi8KKwljYXNlIFhtUGNpTHBFdmVudF9CdXNDcmVhdGVkOgorCQlwcmludGsoS0VSTl9JTkZPICJpbnRSZWNlaXZlZDogc3lzdGVtIGJ1cyAlZCBjcmVhdGVkXG4iLAorCQkJZXZlbnRQYXJtLT5ldmVudERhdGEuYnVzQ3JlYXRlZC5idXNOdW1iZXIpOworCQlicmVhazsKKwljYXNlIFhtUGNpTHBFdmVudF9CdXNFcnJvcjoKKwljYXNlIFhtUGNpTHBFdmVudF9CdXNGYWlsZWQ6CisJCXByaW50ayhLRVJOX0lORk8gImludFJlY2VpdmVkOiBzeXN0ZW0gYnVzICVkIGZhaWxlZFxuIiwKKwkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLmJ1c0ZhaWxlZC5idXNOdW1iZXIpOworCQlicmVhazsKKwljYXNlIFhtUGNpTHBFdmVudF9CdXNSZWNvdmVyZWQ6CisJY2FzZSBYbVBjaUxwRXZlbnRfVW5RdWllc2NlQnVzOgorCQlwcmludGsoS0VSTl9JTkZPICJpbnRSZWNlaXZlZDogc3lzdGVtIGJ1cyAlZCByZWNvdmVyZWRcbiIsCisJCQlldmVudFBhcm0tPmV2ZW50RGF0YS5idXNSZWNvdmVyZWQuYnVzTnVtYmVyKTsKKwkJYnJlYWs7CisJY2FzZSBYbVBjaUxwRXZlbnRfTm9kZUZhaWxlZDoKKwljYXNlIFhtUGNpTHBFdmVudF9CcmlkZ2VFcnJvcjoKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJImludFJlY2VpdmVkOiBtdWx0aS1hZGFwdGVyIGJyaWRnZSAlZC8lZC8lZCBmYWlsZWRcbiIsCisJCQlldmVudFBhcm0tPmV2ZW50RGF0YS5ub2RlRmFpbGVkLmJ1c051bWJlciwKKwkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLm5vZGVGYWlsZWQuc3ViQnVzTnVtYmVyLAorCQkJZXZlbnRQYXJtLT5ldmVudERhdGEubm9kZUZhaWxlZC5kZXZpY2VJZCk7CisJCWJyZWFrOworCWNhc2UgWG1QY2lMcEV2ZW50X05vZGVSZWNvdmVyZWQ6CisJCXByaW50ayhLRVJOX0lORk8KKwkJCSJpbnRSZWNlaXZlZDogbXVsdGktYWRhcHRlciBicmlkZ2UgJWQvJWQvJWQgcmVjb3ZlcmVkXG4iLAorCQkJZXZlbnRQYXJtLT5ldmVudERhdGEubm9kZVJlY292ZXJlZC5idXNOdW1iZXIsCisJCQlldmVudFBhcm0tPmV2ZW50RGF0YS5ub2RlUmVjb3ZlcmVkLnN1YkJ1c051bWJlciwKKwkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLm5vZGVSZWNvdmVyZWQuZGV2aWNlSWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJCSJpbnRSZWNlaXZlZDogdW5yZWNvZ25pemVkIGV2ZW50IHN1YnR5cGUgMHgleFxuIiwKKwkJCWV2ZW50UGFybS0+aHZMcEV2ZW50LnhTdWJ0eXBlKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBYbVBjaUxwRXZlbnRfaGFuZGxlcihzdHJ1Y3QgSHZMcEV2ZW50ICpldmVudFBhcm0sCisJCXN0cnVjdCBwdF9yZWdzICpyZWdzUGFybSkKK3sKKyNpZmRlZiBDT05GSUdfUENJCisJKytQY2lfRXZlbnRfQ291bnQ7CisKKwlpZiAoZXZlbnRQYXJtICYmIChldmVudFBhcm0tPnhUeXBlID09IEh2THBFdmVudF9UeXBlX1BjaUlvKSkgeworCQlzd2l0Y2ggKGV2ZW50UGFybS0+eEZsYWdzLnhGdW5jdGlvbikgeworCQljYXNlIEh2THBFdmVudF9GdW5jdGlvbl9JbnQ6CisJCQlpbnRSZWNlaXZlZCgoc3RydWN0IFhtUGNpTHBFdmVudCAqKWV2ZW50UGFybSwgcmVnc1Bhcm0pOworCQkJYnJlYWs7CisJCWNhc2UgSHZMcEV2ZW50X0Z1bmN0aW9uX0FjazoKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJYbVBjaUxwRXZlbnRfaGFuZGxlcjogdW5leHBlY3RlZCBhY2sgcmVjZWl2ZWRcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiWG1QY2lMcEV2ZW50X2hhbmRsZXI6IHVuZXhwZWN0ZWQgZXZlbnQgZnVuY3Rpb24gJWRcbiIsCisJCQkJKGludClldmVudFBhcm0tPnhGbGFncy54RnVuY3Rpb24pOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKGV2ZW50UGFybSkKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiWG1QY2lMcEV2ZW50X2hhbmRsZXI6IFVucmVjb2duaXplZCBQQ0kgZXZlbnQgdHlwZSAweCV4XG4iLAorCQkJKGludClldmVudFBhcm0tPnhUeXBlKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiWG1QY2lMcEV2ZW50X2hhbmRsZXI6IE5VTEwgZXZlbnQgcmVjZWl2ZWRcbiIpOworI2VuZGlmCiB9CiAKIC8qCi0gKiBUaGlzIGlzIGNhbGxlZCBvdXQgb2YgaVNlcmllc19zY2FuX3Nsb3QgdG8gYWxsb2NhdGUgYW4gSVJRIGZvciBhbiBFQURTIHNsb3QKLSAqIEl0IGNhbGN1bGF0ZXMgdGhlIGlycSB2YWx1ZSBmb3IgdGhlIHNsb3QuCi0gKiBOb3RlIHRoYXQgc3ViQnVzTnVtYmVyIGlzIGFsd2F5cyAwIChhdCB0aGUgbW9tZW50IGF0IGxlYXN0KS4KKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IGluaXRfSVJRLiAgc2V0IGluIHBwY19tZC5pbml0X0lSUSBieSBpU2VyaWVzX3NldHVwLmMKKyAqIEl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgYnVzIHdhbGsuCiAgKi8KLWludCBfX2luaXQgaVNlcmllc19hbGxvY2F0ZV9JUlEoSHZCdXNOdW1iZXIgYnVzTnVtYmVyLAotCQlIdlN1YkJ1c051bWJlciBzdWJCdXNOdW1iZXIsIEh2QWdlbnRJZCBkZXZpY2VJZCkKK3ZvaWQgX19pbml0IGlTZXJpZXNfaW5pdF9JUlEodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgcmVhbGlycSwgdmlydGlycTsKLQl1OCBpZHNlbCA9IChkZXZpY2VJZCA+PiA0KTsKLQl1OCBmdW5jdGlvbiA9IGRldmljZUlkICYgNzsKKwkvKiBSZWdpc3RlciBQQ0kgZXZlbnQgaGFuZGxlciBhbmQgb3BlbiBhbiBldmVudCBwYXRoICovCisJaW50IHhSYzsKIAotCXZpcnRpcnEgPSBuZXh0X3ZpcnR1YWxfaXJxKys7Ci0JcmVhbGlycSA9ICgoYnVzTnVtYmVyIC0gMSkgPDwgNikgKyAoKGlkc2VsIC0gMSkgPDwgMykgKyBmdW5jdGlvbjsKLQl2aXJ0X2lycV90b19yZWFsX21hcFt2aXJ0aXJxXSA9IHJlYWxpcnE7Ci0KLQlpcnFfZGVzY1t2aXJ0aXJxXS5oYW5kbGVyID0gJmlTZXJpZXNfSVJRX2hhbmRsZXI7Ci0JcmV0dXJuIHZpcnRpcnE7CisJeFJjID0gSHZMcEV2ZW50X3JlZ2lzdGVySGFuZGxlcihIdkxwRXZlbnRfVHlwZV9QY2lJbywKKwkJCSZYbVBjaUxwRXZlbnRfaGFuZGxlcik7CisJaWYgKHhSYyA9PSAwKSB7CisJCXhSYyA9IEh2THBFdmVudF9vcGVuUGF0aChIdkxwRXZlbnRfVHlwZV9QY2lJbywgMCk7CisJCWlmICh4UmMgIT0gMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiaVNlcmllc19pbml0X0lSUTogb3BlbiBldmVudCBwYXRoICIKKwkJCQkJImZhaWxlZCB3aXRoIHJjIDB4JXhcbiIsIHhSYyk7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0VSUiAiaVNlcmllc19pbml0X0lSUTogcmVnaXN0ZXIgaGFuZGxlciAiCisJCQkJImZhaWxlZCB3aXRoIHJjIDB4JXhcbiIsIHhSYyk7CiB9CiAKICNkZWZpbmUgUkVBTF9JUlFfVE9fQlVTKGlycSkJKCgoKGlycSkgPj4gNikgJiAweGZmKSArIDEpCiAjZGVmaW5lIFJFQUxfSVJRX1RPX0lEU0VMKGlycSkJKCgoKGlycSkgPj4gMykgJiA3KSArIDEpCiAjZGVmaW5lIFJFQUxfSVJRX1RPX0ZVTkMoaXJxKQkoKGlycSkgJiA3KQogCisvKgorICogVGhpcyB3aWxsIGJlIGNhbGxlZCBieSBkZXZpY2UgZHJpdmVycyAodmlhIGVuYWJsZV9JUlEpCisgKiB0byBlbmFibGUgSU5UQSBpbiB0aGUgYnJpZGdlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGlTZXJpZXNfZW5hYmxlX0lSUSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiBidXMsIGRldmljZUlkLCBmdW5jdGlvbiwgbWFzazsKKwljb25zdCB1MzIgc3ViQnVzID0gMDsKKwl1bnNpZ25lZCBpbnQgcmlycSA9IHZpcnRfaXJxX3RvX3JlYWxfbWFwW2lycV07CisKKwkvKiBUaGUgSVJRIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGJ5IHRoZSBjYWxsZXIgKi8KKwlidXMgPSBSRUFMX0lSUV9UT19CVVMocmlycSk7CisJZnVuY3Rpb24gPSBSRUFMX0lSUV9UT19GVU5DKHJpcnEpOworCWRldmljZUlkID0gKFJFQUxfSVJRX1RPX0lEU0VMKHJpcnEpIDw8IDQpICsgZnVuY3Rpb247CisKKwkvKiBVbm1hc2sgc2Vjb25kYXJ5IElOVEEgKi8KKwltYXNrID0gMHg4MDAwMDAwMDsKKwlIdkNhbGxQY2lfdW5tYXNrSW50ZXJydXB0cyhidXMsIHN1YkJ1cywgZGV2aWNlSWQsIG1hc2spOworCVBQQ0RCRyhQUENEQkdfQlVTV0FMSywgImlTZXJpZXNfZW5hYmxlX0lSUSAweCUwMlguJTAyWC4lMDJYIDB4JTA0WFxuIiwKKwkJCWJ1cywgc3ViQnVzLCBkZXZpY2VJZCwgaXJxKTsKK30KKwogLyogVGhpcyBpcyBjYWxsZWQgYnkgaVNlcmllc19hY3RpdmF0ZV9JUlFzICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGlTZXJpZXNfc3RhcnR1cF9JUlEodW5zaWduZWQgaW50IGlycSkKIHsKQEAgLTEzMSw3ICsyNjgsNyBAQAogCQkJZGVzYy0+aGFuZGxlci0+c3RhcnR1cChpcnEpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCQl9Ci0gICAgCX0KKwl9CiB9CiAKIC8qICB0aGlzIGlzIG5vdCBjYWxsZWQgYW55d2hlcmUgY3VycmVudGx5ICovCkBAIC0xNzMsMjkgKzMxMCw3IEBACiAJbWFzayA9IDB4ODAwMDAwMDA7CiAJSHZDYWxsUGNpX21hc2tJbnRlcnJ1cHRzKGJ1cywgc3ViQnVzLCBkZXZpY2VJZCwgbWFzayk7CiAJUFBDREJHKFBQQ0RCR19CVVNXQUxLLCAiaVNlcmllc19kaXNhYmxlX0lSUSAweCUwMlguJTAyWC4lMDJYIDB4JTA0WFxuIiwKLQkgICAgICAgYnVzLCBzdWJCdXMsIGRldmljZUlkLCBpcnEpOwotfQotCi0vKgotICogVGhpcyB3aWxsIGJlIGNhbGxlZCBieSBkZXZpY2UgZHJpdmVycyAodmlhIGVuYWJsZV9JUlEpCi0gKiB0byBlbmFibGUgSU5UQSBpbiB0aGUgYnJpZGdlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGlTZXJpZXNfZW5hYmxlX0lSUSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXUzMiBidXMsIGRldmljZUlkLCBmdW5jdGlvbiwgbWFzazsKLQljb25zdCB1MzIgc3ViQnVzID0gMDsKLQl1bnNpZ25lZCBpbnQgcmlycSA9IHZpcnRfaXJxX3RvX3JlYWxfbWFwW2lycV07Ci0KLQkvKiBUaGUgSVJRIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGJ5IHRoZSBjYWxsZXIgKi8KLQlidXMgPSBSRUFMX0lSUV9UT19CVVMocmlycSk7Ci0JZnVuY3Rpb24gPSBSRUFMX0lSUV9UT19GVU5DKHJpcnEpOwotCWRldmljZUlkID0gKFJFQUxfSVJRX1RPX0lEU0VMKHJpcnEpIDw8IDQpICsgZnVuY3Rpb247Ci0KLQkvKiBVbm1hc2sgc2Vjb25kYXJ5IElOVEEgKi8KLQltYXNrID0gMHg4MDAwMDAwMDsKLQlIdkNhbGxQY2lfdW5tYXNrSW50ZXJydXB0cyhidXMsIHN1YkJ1cywgZGV2aWNlSWQsIG1hc2spOwotCVBQQ0RCRyhQUENEQkdfQlVTV0FMSywgImlTZXJpZXNfZW5hYmxlX0lSUSAweCUwMlguJTAyWC4lMDJYIDB4JTA0WFxuIiwKLQkgICAgICAgYnVzLCBzdWJCdXMsIGRldmljZUlkLCBpcnEpOworCQkJYnVzLCBzdWJCdXMsIGRldmljZUlkLCBpcnEpOwogfQogCiAvKgpAQCAtMjA3LDMgKzMyMiwzMiBAQAogc3RhdGljIHZvaWQgaVNlcmllc19lbmRfSVJRKHVuc2lnbmVkIGludCBpcnEpCiB7CiB9CisKK3N0YXRpYyBod19pcnFfY29udHJvbGxlciBpU2VyaWVzX0lSUV9oYW5kbGVyID0geworCS50eXBlbmFtZSA9ICJpU2VyaWVzIGlycSBjb250cm9sbGVyIiwKKwkuc3RhcnR1cCA9IGlTZXJpZXNfc3RhcnR1cF9JUlEsCisJLnNodXRkb3duID0gaVNlcmllc19zaHV0ZG93bl9JUlEsCisJLmVuYWJsZSA9IGlTZXJpZXNfZW5hYmxlX0lSUSwKKwkuZGlzYWJsZSA9IGlTZXJpZXNfZGlzYWJsZV9JUlEsCisJLmVuZCA9IGlTZXJpZXNfZW5kX0lSUQorfTsKKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIG91dCBvZiBpU2VyaWVzX3NjYW5fc2xvdCB0byBhbGxvY2F0ZSBhbiBJUlEgZm9yIGFuIEVBRFMgc2xvdAorICogSXQgY2FsY3VsYXRlcyB0aGUgaXJxIHZhbHVlIGZvciB0aGUgc2xvdC4KKyAqIE5vdGUgdGhhdCBzdWJCdXNOdW1iZXIgaXMgYWx3YXlzIDAgKGF0IHRoZSBtb21lbnQgYXQgbGVhc3QpLgorICovCitpbnQgX19pbml0IGlTZXJpZXNfYWxsb2NhdGVfSVJRKEh2QnVzTnVtYmVyIGJ1c051bWJlciwKKwkJSHZTdWJCdXNOdW1iZXIgc3ViQnVzTnVtYmVyLCBIdkFnZW50SWQgZGV2aWNlSWQpCit7CisJdW5zaWduZWQgaW50IHJlYWxpcnEsIHZpcnRpcnE7CisJdTggaWRzZWwgPSAoZGV2aWNlSWQgPj4gNCk7CisJdTggZnVuY3Rpb24gPSBkZXZpY2VJZCAmIDc7CisKKwl2aXJ0aXJxID0gbmV4dF92aXJ0dWFsX2lycSsrOworCXJlYWxpcnEgPSAoKGJ1c051bWJlciAtIDEpIDw8IDYpICsgKChpZHNlbCAtIDEpIDw8IDMpICsgZnVuY3Rpb247CisJdmlydF9pcnFfdG9fcmVhbF9tYXBbdmlydGlycV0gPSByZWFsaXJxOworCisJaXJxX2Rlc2NbdmlydGlycV0uaGFuZGxlciA9ICZpU2VyaWVzX0lSUV9oYW5kbGVyOworCXJldHVybiB2aXJ0aXJxOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19wY2kuYyBiL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfcGNpLmMKaW5kZXggYmQ0YzI1NS4uMzU2ZTRmZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19wY2kuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX3BjaS5jCkBAIC0zOCw5ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAKICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxQY2kuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxTbS5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbFhtLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvTHBhckRhdGEuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9pU2VyaWVzX2lycS5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL2lTZXJpZXNfcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvbWYuaD4KQEAgLTIyNSwxMCArMjIzLDcgQEAKIAlub2RlLT5Ec2FBZGRyLkRzYS5idXNOdW1iZXIgPSBCdXM7CiAJbm9kZS0+RHNhQWRkci5Ec2Euc3ViQnVzTnVtYmVyID0gU3ViQnVzOwogCW5vZGUtPkRzYUFkZHIuRHNhLmRldmljZUlkID0gMHgxMDsKLQlub2RlLT5BZ2VudElkID0gQWdlbnRJZDsKIAlub2RlLT5EZXZGbiA9IFBDSV9ERVZGTihJU0VSSUVTX0VOQ09ERV9ERVZJQ0UoQWdlbnRJZCksIEZ1bmN0aW9uKTsKLQlub2RlLT5Jb1JldHJ5ID0gMDsKLQlpU2VyaWVzX0dldF9Mb2NhdGlvbl9Db2RlKG5vZGUpOwogCXJldHVybiBub2RlOwogfQogCkBAIC0zMDIsNyArMjk3LDYgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CiAJc3RydWN0IGlTZXJpZXNfRGV2aWNlX05vZGUgKm5vZGU7Ci0JY2hhciBCdWZmZXJbMjU2XTsKICAgICAJaW50IERldmljZUNvdW50ID0gMDsKIAogCVBQQ0RCRyhQUENEQkdfQlVTV0FMSywgImlTZXJpZXNfcGNpYmlvc19maXh1cCBFbnRyeS5cbiIpOyAKQEAgLTMyNCw5ICszMTgsNyBAQAogCQkJCQkicGRldiAweCVwIDw9PT4gRGV2Tm9kZSAweCVwXG4iLAogCQkJCQlwZGV2LCBub2RlKTsKIAkJCWFsbG9jYXRlX2RldmljZV9iYXJzKHBkZXYpOwotCQkJaVNlcmllc19EZXZpY2VfSW5mb3JtYXRpb24ocGRldiwgQnVmZmVyLAotCQkJCQlzaXplb2YoQnVmZmVyKSk7Ci0JCQlwcmludGsoIiVkLiAlc1xuIiwgRGV2aWNlQ291bnQsIEJ1ZmZlcik7CisJCQlpU2VyaWVzX0RldmljZV9JbmZvcm1hdGlvbihwZGV2LCBEZXZpY2VDb3VudCk7CiAJCQlpb21tdV9kZXZub2RlX2luaXRfaVNlcmllcyhub2RlKTsKIAkJfSBlbHNlCiAJCQlwcmludGsoIlBDSTogRGV2aWNlIFRyZWUgbm90IGZvdW5kIGZvciAweCUwMTZsWFxuIiwKQEAgLTQ5OSw3ICs0OTEsNiBAQAogCiAJCQkrK0RldmljZUNvdW50OwogCQkJbm9kZSA9IGJ1aWxkX2RldmljZV9ub2RlKEJ1cywgU3ViQnVzLCBFQURzSWRTZWwsIEZ1bmN0aW9uKTsKLQkJCW5vZGUtPlZlbmRvciA9IFZlbmRvcklkOwogCQkJbm9kZS0+SXJxID0gSXJxOwogCQkJbm9kZS0+TG9naWNhbFNsb3QgPSBCcmlkZ2VJbmZvLT5sb2dpY2FsU2xvdE51bWJlcjsKIApAQCAtNjYxLDM4ICs2NTIsMzQgQEAKICAqIENoZWNrIFJldHVybiBDb2RlCiAgKiAtPiBPbiBGYWlsdXJlLCBwcmludCBhbmQgbG9nIGluZm9ybWF0aW9uLgogICogICAgSW5jcmVtZW50IFJldHJ5IENvdW50LCBpZiBleGNlZWRzIG1heCwgcGFuaWMgcGFydGl0aW9uLgotICogLT4gSWYgaW4gcmV0cnksIHByaW50IGFuZCBsb2cgc3VjY2VzcyAKICAqCiAgKiBQQ0k6IERldmljZSAyMy45MCBSZWFkTCBJL08gRXJyb3IoIDApOiAweDEyMzQKICAqIFBDSTogRGV2aWNlIDIzLjkwIFJlYWRMIFJldHJ5KCAxKQogICogUENJOiBEZXZpY2UgMjMuOTAgUmVhZEwgUmV0cnkgU3VjY2Vzc2Z1bCgxKQogICovCiBzdGF0aWMgaW50IENoZWNrUmV0dXJuQ29kZShjaGFyICpUZXh0SGRyLCBzdHJ1Y3QgaVNlcmllc19EZXZpY2VfTm9kZSAqRGV2Tm9kZSwKLQkJdTY0IHJldCkKKwkJaW50ICpyZXRyeSwgdTY0IHJldCkKIHsKIAlpZiAocmV0ICE9IDApICB7CiAJCSsrUGNpX0Vycm9yX0NvdW50OwotCQkrK0Rldk5vZGUtPklvUmV0cnk7CisJCSgqcmV0cnkpKys7CiAJCXByaW50aygiUENJOiAlczogRGV2aWNlIDB4JTA0WDolMDJYICBJL08gRXJyb3IoJTJkKTogMHglMDRYXG4iLAogCQkJCVRleHRIZHIsIERldk5vZGUtPkRzYUFkZHIuRHNhLmJ1c051bWJlciwgRGV2Tm9kZS0+RGV2Rm4sCi0JCQkJRGV2Tm9kZS0+SW9SZXRyeSwgKGludClyZXQpOworCQkJCSpyZXRyeSwgKGludClyZXQpOwogCQkvKgogCQkgKiBCdW1wIHRoZSByZXRyeSBhbmQgY2hlY2sgZm9yIHJldHJ5IGNvdW50IGV4Y2VlZGVkLgogCQkgKiBJZiwgRXhjZWVkZWQsIHBhbmljIHRoZSBzeXN0ZW0uCiAJCSAqLwotCQlpZiAoKERldk5vZGUtPklvUmV0cnkgPiBQY2lfUmV0cnlfTWF4KSAmJgorCQlpZiAoKCgqcmV0cnkpID4gUGNpX1JldHJ5X01heCkgJiYKIAkJCQkoUGNpX0Vycm9yX0ZsYWcgPiAwKSkgewogCQkJbWZfZGlzcGxheV9zcmMoMHhCNjAwMDEwMyk7Ci0JCQlwYW5pY190aW1lb3V0ID0gMDsgCisJCQlwYW5pY190aW1lb3V0ID0gMDsKIAkJCXBhbmljKCJQQ0k6IEhhcmR3YXJlIEkvTyBFcnJvciwgU1JDIEI2MDAwMTAzLCAiCiAJCQkJCSJBdXRvbWF0aWMgUmVib290IERpc2FibGVkLlxuIik7CiAJCX0KIAkJcmV0dXJuIC0xOwkvKiBSZXRyeSBUcnkgKi8KIAl9Ci0JLyogSWYgcmV0cnkgd2FzIGluIHByb2dyZXNzLCBsb2cgc3VjY2VzcyBhbmQgcmVzdCByZXRyeSBjb3VudCAqLwotCWlmIChEZXZOb2RlLT5Jb1JldHJ5ID4gMCkKLQkJRGV2Tm9kZS0+SW9SZXRyeSA9IDA7Ci0JcmV0dXJuIDA7IAorCXJldHVybiAwOwogfQogCiAvKgpAQCAtNzM4LDYgKzcyNSw3IEBACiB7CiAJdTY0IEJhck9mZnNldDsKIAl1NjQgZHNhOworCWludCByZXRyeSA9IDA7CiAJc3RydWN0IEh2Q2FsbFBjaV9Mb2FkUmV0dXJuIHJldDsKIAlzdHJ1Y3QgaVNlcmllc19EZXZpY2VfTm9kZSAqRGV2Tm9kZSA9CiAJCXhsYXRlX2lvbW1fYWRkcmVzcyhJb0FkZHJlc3MsICZkc2EsICZCYXJPZmZzZXQpOwpAQCAtNzU3LDcgKzc0NSw3IEBACiAJZG8gewogCQkrK1BjaV9Jb19SZWFkX0NvdW50OwogCQlIdkNhbGwzUmV0MTYoSHZDYWxsUGNpQmFyTG9hZDgsICZyZXQsIGRzYSwgQmFyT2Zmc2V0LCAwKTsKLQl9IHdoaWxlIChDaGVja1JldHVybkNvZGUoIlJEQiIsIERldk5vZGUsIHJldC5yYykgIT0gMCk7CisJfSB3aGlsZSAoQ2hlY2tSZXR1cm5Db2RlKCJSREIiLCBEZXZOb2RlLCAmcmV0cnksIHJldC5yYykgIT0gMCk7CiAKIAlyZXR1cm4gKHU4KXJldC52YWx1ZTsKIH0KQEAgLTc2Nyw2ICs3NTUsNyBAQAogewogCXU2NCBCYXJPZmZzZXQ7CiAJdTY0IGRzYTsKKwlpbnQgcmV0cnkgPSAwOwogCXN0cnVjdCBIdkNhbGxQY2lfTG9hZFJldHVybiByZXQ7CiAJc3RydWN0IGlTZXJpZXNfRGV2aWNlX05vZGUgKkRldk5vZGUgPQogCQl4bGF0ZV9pb21tX2FkZHJlc3MoSW9BZGRyZXNzLCAmZHNhLCAmQmFyT2Zmc2V0KTsKQEAgLTc4Nyw3ICs3NzYsNyBAQAogCQkrK1BjaV9Jb19SZWFkX0NvdW50OwogCQlIdkNhbGwzUmV0MTYoSHZDYWxsUGNpQmFyTG9hZDE2LCAmcmV0LCBkc2EsCiAJCQkJQmFyT2Zmc2V0LCAwKTsKLQl9IHdoaWxlIChDaGVja1JldHVybkNvZGUoIlJEVyIsIERldk5vZGUsIHJldC5yYykgIT0gMCk7CisJfSB3aGlsZSAoQ2hlY2tSZXR1cm5Db2RlKCJSRFciLCBEZXZOb2RlLCAmcmV0cnksIHJldC5yYykgIT0gMCk7CiAKIAlyZXR1cm4gc3dhYjE2KCh1MTYpcmV0LnZhbHVlKTsKIH0KQEAgLTc5Nyw2ICs3ODYsNyBAQAogewogCXU2NCBCYXJPZmZzZXQ7CiAJdTY0IGRzYTsKKwlpbnQgcmV0cnkgPSAwOwogCXN0cnVjdCBIdkNhbGxQY2lfTG9hZFJldHVybiByZXQ7CiAJc3RydWN0IGlTZXJpZXNfRGV2aWNlX05vZGUgKkRldk5vZGUgPQogCQl4bGF0ZV9pb21tX2FkZHJlc3MoSW9BZGRyZXNzLCAmZHNhLCAmQmFyT2Zmc2V0KTsKQEAgLTgxNyw3ICs4MDcsNyBAQAogCQkrK1BjaV9Jb19SZWFkX0NvdW50OwogCQlIdkNhbGwzUmV0MTYoSHZDYWxsUGNpQmFyTG9hZDMyLCAmcmV0LCBkc2EsCiAJCQkJQmFyT2Zmc2V0LCAwKTsKLQl9IHdoaWxlIChDaGVja1JldHVybkNvZGUoIlJETCIsIERldk5vZGUsIHJldC5yYykgIT0gMCk7CisJfSB3aGlsZSAoQ2hlY2tSZXR1cm5Db2RlKCJSREwiLCBEZXZOb2RlLCAmcmV0cnksIHJldC5yYykgIT0gMCk7CiAKIAlyZXR1cm4gc3dhYjMyKCh1MzIpcmV0LnZhbHVlKTsKIH0KQEAgLTgzNCw2ICs4MjQsNyBAQAogewogCXU2NCBCYXJPZmZzZXQ7CiAJdTY0IGRzYTsKKwlpbnQgcmV0cnkgPSAwOwogCXU2NCByYzsKIAlzdHJ1Y3QgaVNlcmllc19EZXZpY2VfTm9kZSAqRGV2Tm9kZSA9CiAJCXhsYXRlX2lvbW1fYWRkcmVzcyhJb0FkZHJlc3MsICZkc2EsICZCYXJPZmZzZXQpOwpAQCAtODUzLDcgKzg0NCw3IEBACiAJZG8gewogCQkrK1BjaV9Jb19Xcml0ZV9Db3VudDsKIAkJcmMgPSBIdkNhbGw0KEh2Q2FsbFBjaUJhclN0b3JlOCwgZHNhLCBCYXJPZmZzZXQsIGRhdGEsIDApOwotCX0gd2hpbGUgKENoZWNrUmV0dXJuQ29kZSgiV1dCIiwgRGV2Tm9kZSwgcmMpICE9IDApOworCX0gd2hpbGUgKENoZWNrUmV0dXJuQ29kZSgiV1dCIiwgRGV2Tm9kZSwgJnJldHJ5LCByYykgIT0gMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGlTZXJpZXNfV3JpdGVfQnl0ZSk7CiAKQEAgLTg2MSw2ICs4NTIsNyBAQAogewogCXU2NCBCYXJPZmZzZXQ7CiAJdTY0IGRzYTsKKwlpbnQgcmV0cnkgPSAwOwogCXU2NCByYzsKIAlzdHJ1Y3QgaVNlcmllc19EZXZpY2VfTm9kZSAqRGV2Tm9kZSA9CiAJCXhsYXRlX2lvbW1fYWRkcmVzcyhJb0FkZHJlc3MsICZkc2EsICZCYXJPZmZzZXQpOwpAQCAtODgwLDcgKzg3Miw3IEBACiAJZG8gewogCQkrK1BjaV9Jb19Xcml0ZV9Db3VudDsKIAkJcmMgPSBIdkNhbGw0KEh2Q2FsbFBjaUJhclN0b3JlMTYsIGRzYSwgQmFyT2Zmc2V0LCBzd2FiMTYoZGF0YSksIDApOwotCX0gd2hpbGUgKENoZWNrUmV0dXJuQ29kZSgiV1dXIiwgRGV2Tm9kZSwgcmMpICE9IDApOworCX0gd2hpbGUgKENoZWNrUmV0dXJuQ29kZSgiV1dXIiwgRGV2Tm9kZSwgJnJldHJ5LCByYykgIT0gMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGlTZXJpZXNfV3JpdGVfV29yZCk7CiAKQEAgLTg4OCw2ICs4ODAsNyBAQAogewogCXU2NCBCYXJPZmZzZXQ7CiAJdTY0IGRzYTsKKwlpbnQgcmV0cnkgPSAwOwogCXU2NCByYzsKIAlzdHJ1Y3QgaVNlcmllc19EZXZpY2VfTm9kZSAqRGV2Tm9kZSA9CiAJCXhsYXRlX2lvbW1fYWRkcmVzcyhJb0FkZHJlc3MsICZkc2EsICZCYXJPZmZzZXQpOwpAQCAtOTA3LDYgKzkwMCw2IEBACiAJZG8gewogCQkrK1BjaV9Jb19Xcml0ZV9Db3VudDsKIAkJcmMgPSBIdkNhbGw0KEh2Q2FsbFBjaUJhclN0b3JlMzIsIGRzYSwgQmFyT2Zmc2V0LCBzd2FiMzIoZGF0YSksIDApOwotCX0gd2hpbGUgKENoZWNrUmV0dXJuQ29kZSgiV1dMIiwgRGV2Tm9kZSwgcmMpICE9IDApOworCX0gd2hpbGUgKENoZWNrUmV0dXJuQ29kZSgiV1dMIiwgRGV2Tm9kZSwgJnJldHJ5LCByYykgIT0gMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGlTZXJpZXNfV3JpdGVfTG9uZyk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX3BjaV9yZXNldC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19wY2lfcmVzZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY3ODVlNC4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX3BjaV9yZXNldC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLSNkZWZpbmUgUENJRlIoLi4uKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEZpbGUgaVNlcmllc19wY2lfcmVzZXQuYyBjcmVhdGVkIGJ5IEFsbGFuIFRyYXV0bWFuIG9uIE1hciAyMSAyMDAxLiAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogVGhpcyBjb2RlIHN1cHBvcnRzIHRoZSBwY2kgaW50ZXJmYWNlIG9uIHRoZSBJQk0gaVNlcmllcyBzeXN0ZW1zLiAgICAgKi8KLS8qIENvcHlyaWdodCAoQykgMjB5eSAgPEFsbGFuIEggVHJhdXRtYW4+IDxJQk0gQ29ycD4gICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgKi8KLS8qIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICovCi0vKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAqLwotLyogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAqLyAKLS8qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICovCi0vKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAqLwotLyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAqLyAKLS8qIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZTogICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLS8qIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotLyogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBDaGFuZ2UgQWN0aXZpdHk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBDcmVhdGVkLCBNYXJjaCAyMCwgMjAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgQXByaWwgMzAsIDIwMDEsIEFkZGVkIHJldHVybiBjb2RlcyBvbiBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICovCi0vKiAgIFNlcHRlbWJlciAxMCwgMjAwMSwgUG9ydGVkIHRvIHBwYzY0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogRW5kIENoYW5nZSBBY3Rpdml0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxQY2kuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvbWYuaD4KLSNpbmNsdWRlIDxhc20vcGNpLmg+Ci0KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9pU2VyaWVzX3BjaS5oPgotI2luY2x1ZGUgInBjaS5oIgotCi0vKgotICogSW50ZXJmYWNlIHRvIHRvZ2dsZSB0aGUgcmVzZXQgbGluZQotICogVGltZSBpcyBpbiAuMSBzZWNvbmRzLCBuZWVkIGZvciBzZWNvbmRzLgotICovCi1pbnQgaVNlcmllc19EZXZpY2VfVG9nZ2xlUmVzZXQoc3RydWN0IHBjaV9kZXYgKlBjaURldiwgaW50IEFzc2VydFRpbWUsCi0JCWludCBEZWxheVRpbWUpCi17Ci0JdW5zaWduZWQgaW50IEFzc2VydERlbGF5LCBXYWl0RGVsYXk7Ci0Jc3RydWN0IGlTZXJpZXNfRGV2aWNlX05vZGUgKkRldmljZU5vZGUgPQotCQkoc3RydWN0IGlTZXJpZXNfRGV2aWNlX05vZGUgKilQY2lEZXYtPnN5c2RhdGE7Ci0KLSAJaWYgKERldmljZU5vZGUgPT0gTlVMTCkgeyAKLQkJcHJpbnRrKCJQQ0k6IFBjaSBSZXNldCBGYWlsZWQsIERldmljZSBOb2RlIG5vdCBmb3VuZCBmb3IgcGNpX2RldiAlcFxuIiwKLQkJCQlQY2lEZXYpOwotCQlyZXR1cm4gLTE7Ci0JfQotCS8qCi0JICogU2V0IGRlZmF1bHRzLCBBc3NlcnQgaXMgLjUgc2Vjb25kLCBXYWl0IGlzIDMgc2Vjb25kcy4KLQkgKi8KLQlpZiAoQXNzZXJ0VGltZSA9PSAwKQotCQlBc3NlcnREZWxheSA9IDUwMDsKLQllbHNlCi0JCUFzc2VydERlbGF5ID0gQXNzZXJ0VGltZSAqIDEwMDsKLQotCWlmIChEZWxheVRpbWUgPT0gMCkKLQkJV2FpdERlbGF5ID0gMzAwMDsKLQllbHNlCi0JCVdhaXREZWxheSA9IERlbGF5VGltZSAqIDEwMDsKLQotCS8qCi0JICogQXNzZXJ0IHJlc2V0Ci0JICovCi0JRGV2aWNlTm9kZS0+UmV0dXJuQ29kZSA9IEh2Q2FsbFBjaV9zZXRTbG90UmVzZXQoSVNFUklFU19CVVMoRGV2aWNlTm9kZSksCi0JCQkweDAwLCBEZXZpY2VOb2RlLT5BZ2VudElkLCAxKTsKLQlpZiAoRGV2aWNlTm9kZS0+UmV0dXJuQ29kZSA9PSAwKSB7Ci0JCW1zbGVlcChBc3NlcnREZWxheSk7CQkJLyogU2xlZXAgZm9yIHRoZSB0aW1lICovCi0JCURldmljZU5vZGUtPlJldHVybkNvZGUgPQotCQkJSHZDYWxsUGNpX3NldFNsb3RSZXNldChJU0VSSUVTX0JVUyhEZXZpY2VOb2RlKSwKLQkJCQkJMHgwMCwgRGV2aWNlTm9kZS0+QWdlbnRJZCwgMCk7Ci0KLQkJLyoKLSAgIAkJICogV2FpdCBmb3IgZGV2aWNlIHRvIHJlc2V0Ci0JCSAqLwotCQltc2xlZXAoV2FpdERlbGF5KTsKLQl9Ci0JaWYgKERldmljZU5vZGUtPlJldHVybkNvZGUgPT0gMCkKLQkJUENJRlIoIlNsb3QgMHglMDRYLiUwMiBSZXNldFxuIiwgSVNFUklFU19CVVMoRGV2aWNlTm9kZSksCi0JCQkJRGV2aWNlTm9kZS0+QWdlbnRJZCk7Ci0JZWxzZSB7Ci0JCXByaW50aygiUENJOiBTbG90IDB4JTA0WC4lMDJYIFJlc2V0IEZhaWxlZCwgUkNvZGU6ICUwNFhcbiIsCi0JCQkJSVNFUklFU19CVVMoRGV2aWNlTm9kZSksIERldmljZU5vZGUtPkFnZW50SWQsCi0JCQkJRGV2aWNlTm9kZS0+UmV0dXJuQ29kZSk7Ci0JCVBDSUZSKCJTbG90IDB4JTA0WC4lMDJYIFJlc2V0IEZhaWxlZCwgUkNvZGU6ICUwNFhcbiIsCi0JCQkJSVNFUklFU19CVVMoRGV2aWNlTm9kZSksIERldmljZU5vZGUtPkFnZW50SWQsCi0JCQkJRGV2aWNlTm9kZS0+UmV0dXJuQ29kZSk7Ci0JfQotCXJldHVybiBEZXZpY2VOb2RlLT5SZXR1cm5Db2RlOwotfQotRVhQT1JUX1NZTUJPTChpU2VyaWVzX0RldmljZV9Ub2dnbGVSZXNldCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX3Byb2MuYyBiL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfcHJvYy5jCmluZGV4IDBjYzU4ZGQuLjM1NmJkOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfcHJvYy5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfcHJvYy5jCkBAIC0yOCw4ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSXRMcFF1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsWG0uaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9Jb0hyaU1haW5TdG9yZS5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0xwYXJEYXRhLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvaVNlcmllc19wcm9jLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSW9IcmlQcm9jZXNzb3JWcGQuaD4KIAogc3RhdGljIGludCBfX2luaXQgaXNlcmllc19wcm9jX2NyZWF0ZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19zZXR1cC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19zZXR1cC5jCmluZGV4IDZkMDZlYjUuLmIzMTk2MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfc2V0dXAuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX3NldHVwLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0xwYXJEYXRhLmg+CisjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsSHB0Lmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZMcENvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbEV2ZW50Lmg+CkBAIC01NSwxMCArNTUsMTIgQEAKICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxYbS5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0l0THBRdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0lvSHJpTWFpblN0b3JlLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvaVNlcmllc19wcm9jLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvbWYuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkxwRXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9pU2VyaWVzX2lycS5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0lvSHJpUHJvY2Vzc29yVnBkLmg+CisjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSXRWcGRBcmVhcy5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0xwYXJNYXAuaD4KIAogZXh0ZXJuIHZvaWQgaHZsb2coY2hhciAqZm10LCAuLi4pOwogCkBAIC03NCw3ICs3NiwxMSBAQAogc3RhdGljIHZvaWQgYnVpbGRfaVNlcmllc19NZW1vcnlfTWFwKHZvaWQpOwogc3RhdGljIHZvaWQgc2V0dXBfaVNlcmllc19jYWNoZV9zaXplcyh2b2lkKTsKIHN0YXRpYyB2b2lkIGlTZXJpZXNfYm9sdF9rZXJuZWwodW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBlYWRkcik7CisjaWZkZWYgQ09ORklHX1BDSQogZXh0ZXJuIHZvaWQgaVNlcmllc19wY2lfZmluYWxfZml4dXAodm9pZCk7CisjZWxzZQorc3RhdGljIHZvaWQgaVNlcmllc19wY2lfZmluYWxfZml4dXAodm9pZCkgeyB9CisjZW5kaWYKIAogLyogR2xvYmFsIFZhcmlhYmxlcyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJvY0ZyZXFIejsKQEAgLTg3NCw2ICs4ODAsMTAgQEAKIH0KIF9fc2V0dXAoInNwcmVhZF9scGV2ZW50cz0iLCBzZXRfc3ByZWFkX2xwZXZlbnRzKTsKIAorI2lmbmRlZiBDT05GSUdfUENJCit2b2lkIF9faW5pdCBpU2VyaWVzX2luaXRfSVJRKHZvaWQpIHsgfQorI2VuZGlmCisKIHZvaWQgX19pbml0IGlTZXJpZXNfZWFybHlfc2V0dXAodm9pZCkKIHsKIAlpU2VyaWVzX2ZpeHVwX2tsaW1pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19zbXAuYyBiL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfc21wLmMKaW5kZXggYmExZjA4NC4uZjc0Mzg2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19zbXAuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9pU2VyaWVzX3NtcC5jCkBAIC0zOCw5ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvTHBhckRhdGEuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGwuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxDZmcuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9wcGNkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pZGxlLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9pZGxlLmMKaW5kZXggZjI0Y2UyYi4uYmRmMTNiNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2lkbGUuYwpAQCAtNDIsNiArNDIsMTEgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heFlpZWxkVGltZSA9IDA7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW5ZaWVsZFRpbWUgPSAweGZmZmZmZmZmZmZmZmZmZmZVTDsKIAorc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NfaVNlcmllc19ldmVudHModm9pZCkKK3sKKwlhc20gdm9sYXRpbGUgKCJsaSAwLDB4NTU1NTsgc2MiIDogOiA6ICJyMCIsICJyMyIpOworfQorCiBzdGF0aWMgdm9pZCB5aWVsZF9zaGFyZWRfcHJvY2Vzc29yKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0YjsKQEAgLTI5Miw3ICsyOTcsNyBAQAogCQlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCQlzY2hlZHVsZSgpOwogCi0JCWlmIChjcHVfaXNfb2ZmbGluZShfc21wX3Byb2Nlc3Nvcl9pZCgpKSAmJgorCQlpZiAoY3B1X2lzX29mZmxpbmUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgJiYKIAkJICAgIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykKIAkJCWNwdV9kaWUoKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvcHBjNjQva2VybmVsL2lycS5jCmluZGV4IDRmZDdmMjAuLmQ4NjA0NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2lycS5jCkBAIC01Miw3ICs1Miw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvTHBhckRhdGEuaD4KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9JdExwUXVldWUuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2xwYXJjZmcuYyBiL2FyY2gvcHBjNjQva2VybmVsL2xwYXJjZmcuYwppbmRleCBhOGZkMzJkLi4zODc5MjNmIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvbHBhcmNmZy5jCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2THBDb25maWcuaD4KICNpbmNsdWRlIDxhc20vbHBwYWNhLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvTHBhckRhdGEuaD4KICNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9JdEV4dFZwZFBhbmVsLmg+CiAKICNkZWZpbmUgTU9EVUxFX1ZFUlMgIjEuNiIKICNkZWZpbmUgTU9EVUxFX05BTUUgImxwYXJjZmciCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9tZi5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvbWYuYwppbmRleCA1YWNhN2U4Li5kOThiZWJmIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9tZi5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL21mLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxhc20vaVNlcmllcy92aW8uaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9tZi5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2THBDb25maWcuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9JdFNwQ29tbUFyZWEuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9JdExwUXVldWUuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCBjZGZlY2JlLi5hYmE4OTU1IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC01OCwxNCArNTgsNiBAQAogc3RydWN0IHRhc2tfc3RydWN0ICpsYXN0X3Rhc2tfdXNlZF9hbHRpdmVjID0gTlVMTDsKICNlbmRpZgogCi1zdHJ1Y3QgbW1fc3RydWN0IGlvcmVtYXBfbW0gPSB7Ci0JLnBnZAkJPSBpb3JlbWFwX2RpciwKLQkubW1fdXNlcnMJPSBBVE9NSUNfSU5JVCgyKSwKLQkubW1fY291bnQJPSBBVE9NSUNfSU5JVCgxKSwKLQkuY3B1X3ZtX21hc2sJPSBDUFVfTUFTS19BTEwsCi0JLnBhZ2VfdGFibGVfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCwKLX07Ci0KIC8qCiAgKiBNYWtlIHN1cmUgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHN0YXRlIGluIHRoZQogICogdGhlIHRocmVhZF9zdHJ1Y3QgaXMgdXAgdG8gZGF0ZSBmb3IgdGFzayB0c2suCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMKaW5kZXggZWI2NTM4Yi4uNDc3MjdhNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb20uYwpAQCAtODg0LDYgKzg4NCw3IEBACiB7CiAJY2hhciAqdHlwZSA9IGdldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7CiAJdTMyICpwcm9wOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAogCS8qIFdlIGFyZSBzY2FubmluZyAiY3B1IiBub2RlcyBvbmx5ICovCiAJaWYgKHR5cGUgPT0gTlVMTCB8fCBzdHJjbXAodHlwZSwgImNwdSIpICE9IDApCkBAIC05MjksNiArOTMwLDE3IEBACiAJCWN1cl9jcHVfc3BlYy0+Y3B1X3VzZXJfZmVhdHVyZXMgfD0gUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUM7CiAJfQogCisJLyoKKwkgKiBDaGVjayBmb3IgYW4gU01UIGNhcGFibGUgQ1BVIGFuZCBzZXQgdGhlIENQVSBmZWF0dXJlLiBXZSBkbworCSAqIHRoaXMgYnkgbG9va2luZyBhdCB0aGUgc2l6ZSBvZiB0aGUgaWJtLHBwYy1pbnRlcnJ1cHQtc2VydmVyI3MKKwkgKiBwcm9wZXJ0eQorCSAqLworCXByb3AgPSAodTMyICopZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLHBwYy1pbnRlcnJ1cHQtc2VydmVyI3MiLAorCQkJCSAgICAgICAmc2l6ZSk7CisJY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJj0gfkNQVV9GVFJfU01UOworCWlmIChwcm9wICYmICgoc2l6ZSAvIHNpemVvZih1MzIpKSA+IDEpKQorCQljdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyB8PSBDUFVfRlRSX1NNVDsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9yYXMuYyBiL2FyY2gvcHBjNjQva2VybmVsL3Jhcy5jCmluZGV4IDFjNGM3OTYuLjNjMDBmN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Jhcy5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Jhcy5jCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvTHBhckRhdGEuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAjaW5jbHVkZSA8YXNtL3BwY2RlYnVnLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9ydGMuYyBiL2FyY2gvcHBjNjQva2VybmVsL3J0Yy5jCmluZGV4IDY3OTg5MDUuLmRlMDJhZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3J0Yy5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3J0Yy5jCkBAIC00MiwxMCArNDIsOCBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KIAotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0xwYXJEYXRhLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvbWYuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0l0U3BDb21tQXJlYS5oPgogCiBleHRlcm4gaW50IHBpcmFuaGFfc2ltdWxhdG9yOwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvc2V0dXAuYwppbmRleCBkY2UxOThkLi44ZTQzOWE4IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3NldHVwLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvTHBhckRhdGEuaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9wcGNkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CkBAIC01Nyw2ICs1Niw4IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL2xtYi5oPgorI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0l0THBOYWNhLmg+CiAKICNpZmRlZiBERUJVRwogI2RlZmluZSBEQkcoZm10Li4uKSB1ZGJnX3ByaW50ZihmbXQpCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9zeXNfcHBjMzIuYyBiL2FyY2gvcHBjNjQva2VybmVsL3N5c19wcGMzMi5jCmluZGV4IDljOGUzMTcuLjExODQzNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3N5c19wcGMzMi5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3N5c19wcGMzMi5jCkBAIC03NDEsNiArNzQxLDcgQEAKIAogYXNtbGlua2FnZSBpbnQgc3lzMzJfcGNpY29uZmlnX2lvYmFzZSh1MzIgd2hpY2gsIHUzMiBpbl9idXMsIHUzMiBpbl9kZXZmbikKIHsKKyNpZmRlZiBDT05GSUdfUENJCiAJc3RydWN0IHBjaV9jb250cm9sbGVyKiBob3NlOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxuOwogCXN0cnVjdCBwY2lfYnVzICpidXMgPSBOVUxMOwpAQCAtNzg2LDcgKzc4Nyw3IEBACiAJY2FzZSBJT0JBU0VfSVNBX01FTToKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCisjZW5kaWYJLyogQ09ORklHX1BDSSAqLwogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmlvLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC92aW8uYwppbmRleCA3OWYyZGM3Li4wYzBiYTcxIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92aW8uYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC92aW8uYwpAQCAtNDEsMjAgKzQxLDI1IEBACiBzdGF0aWMgc3RydWN0IGlvbW11X3RhYmxlICp2aW9fYnVpbGRfaW9tbXVfdGFibGUoc3RydWN0IHZpb19kZXYgKik7CiBzdGF0aWMgaW50IHZpb19udW1fYWRkcmVzc19jZWxsczsKICNlbmRpZgotc3RhdGljIHN0cnVjdCB2aW9fZGV2ICp2aW9fYnVzX2RldmljZTsgLyogZmFrZSAicGFyZW50IiBkZXZpY2UgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKK3N0YXRpYyBzdHJ1Y3QgaW9tbXVfdGFibGUgdmV0aF9pb21tdV90YWJsZTsKK3N0YXRpYyBzdHJ1Y3QgaW9tbXVfdGFibGUgdmlvX2lvbW11X3RhYmxlOworI2VuZGlmCitzdGF0aWMgc3RydWN0IHZpb19kZXYgdmlvX2J1c19kZXZpY2UgID0geyAvKiBmYWtlICJwYXJlbnQiIGRldmljZSAqLworCS5uYW1lID0gdmlvX2J1c19kZXZpY2UuZGV2LmJ1c19pZCwKKwkudHlwZSA9ICIiLAorI2lmZGVmIENPTkZJR19QUENfSVNFUklFUworCS5pb21tdV90YWJsZSA9ICZ2aW9faW9tbXVfdGFibGUsCisjZW5kaWYKKwkuZGV2LmJ1c19pZCA9ICJ2aW8iLAorCS5kZXYuYnVzID0gJnZpb19idXNfdHlwZSwKK307CiAKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIHN0YXRpYyBzdHJ1Y3QgdmlvX2RldiAqX19pbml0IHZpb19yZWdpc3Rlcl9kZXZpY2VfaXNlcmllcyhjaGFyICp0eXBlLAogCQl1aW50MzJfdCB1bml0X251bSk7CiAKLXN0YXRpYyBzdHJ1Y3QgaW9tbXVfdGFibGUgdmV0aF9pb21tdV90YWJsZTsKLXN0YXRpYyBzdHJ1Y3QgaW9tbXVfdGFibGUgdmlvX2lvbW11X3RhYmxlOwotCi1zdGF0aWMgc3RydWN0IHZpb19kZXYgX3Zpb19kZXYgID0gewotCS5pb21tdV90YWJsZSA9ICZ2aW9faW9tbXVfdGFibGUsCi0JLmRldi5idXMgPSAmdmlvX2J1c190eXBlCi19Owotc3RydWN0IGRldmljZSAqaVNlcmllc192aW9fZGV2ID0gJl92aW9fZGV2LmRldjsKK3N0cnVjdCBkZXZpY2UgKmlTZXJpZXNfdmlvX2RldiA9ICZ2aW9fYnVzX2RldmljZS5kZXY7CiBFWFBPUlRfU1lNQk9MKGlTZXJpZXNfdmlvX2Rldik7CiAKICNkZWZpbmUgZGV2aWNlX2lzX2NvbXBhdGlibGUoYSwgYikJMQpAQCAtMjYwLDE4ICsyNjUsMTAgQEAKIAl9CiAKIAkvKiB0aGUgZmFrZSBwYXJlbnQgb2YgYWxsIHZpbyBkZXZpY2VzLCBqdXN0IHRvIGdpdmUgdXMgYSBuaWNlIGRpcmVjdG9yeSAqLwotCXZpb19idXNfZGV2aWNlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpb19kZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXZpb19idXNfZGV2aWNlKSB7Ci0JCXJldHVybiAxOwotCX0KLQltZW1zZXQodmlvX2J1c19kZXZpY2UsIDAsIHNpemVvZihzdHJ1Y3QgdmlvX2RldikpOwotCXN0cmNweSh2aW9fYnVzX2RldmljZS0+ZGV2LmJ1c19pZCwgInZpbyIpOwotCi0JZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZ2aW9fYnVzX2RldmljZS0+ZGV2KTsKKwllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJnZpb19idXNfZGV2aWNlLmRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZGV2aWNlX3JlZ2lzdGVyIHJldHVybmVkICVpXG4iLCBfX0ZVTkNUSU9OX18sCiAJCQllcnIpOwotCQlrZnJlZSh2aW9fYnVzX2RldmljZSk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0zMjYsNyArMzIzLDcgQEAKIAl2aW9kZXYtPnVuaXRfYWRkcmVzcyA9IHVuaXRfYWRkcmVzczsKIAl2aW9kZXYtPmlvbW11X3RhYmxlID0gaW9tbXVfdGFibGU7CiAJLyogaW5pdCBnZW5lcmljICdzdHJ1Y3QgZGV2aWNlJyBmaWVsZHM6ICovCi0JdmlvZGV2LT5kZXYucGFyZW50ID0gJnZpb19idXNfZGV2aWNlLT5kZXY7CisJdmlvZGV2LT5kZXYucGFyZW50ID0gJnZpb19idXNfZGV2aWNlLmRldjsKIAl2aW9kZXYtPmRldi5idXMgPSAmdmlvX2J1c190eXBlOwogCXZpb2Rldi0+ZGV2LnJlbGVhc2UgPSB2aW9fZGV2X3JlbGVhc2U7CiAKQEAgLTYzNiw1ICs2MzMsMyBAQAogCS5uYW1lID0gInZpbyIsCiAJLm1hdGNoID0gdmlvX2J1c19tYXRjaCwKIH07Ci0KLUVYUE9SVF9TWU1CT0wodmlvX2J1c190eXBlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zpb3BhdGguYyBiL2FyY2gvcHBjNjQva2VybmVsL3Zpb3BhdGguYwppbmRleCAyZWQ4ZWUwLi4yYTZjNGYwIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92aW9wYXRoLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmlvcGF0aC5jCkBAIC00MywxMiArNDMsMTAgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvTHBhckRhdGEuaD4KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9JdEV4dFZwZFBhbmVsLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZMcEV2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZMcENvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbENmZy5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL21mLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvaVNlcmllc19wcm9jLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvdmlvLmg+CiAKIC8qIFN0YXR1cyBvZiB0aGUgcGF0aCB0byBlYWNoIG90aGVyIHBhcnRpdGlvbiBpbiB0aGUgc3lzdGVtLgpAQCAtMzY1LDcgKzM2Myw3IEBACiAJICogd2hpbGUgd2UncmUgYWN0aXZlCiAJICovCiAJdmlvcGF0aF9vdXJMcCA9IEh2THBDb25maWdfZ2V0THBJbmRleCgpOwotCXZpb3BhdGhfaG9zdExwID0gSHZDYWxsQ2ZnX2dldEhvc3RpbmdMcEluZGV4KHZpb3BhdGhfb3VyTHApOworCXZpb3BhdGhfaG9zdExwID0gSHZMcENvbmZpZ19nZXRIb3N0aW5nTHBJbmRleCh2aW9wYXRoX291ckxwKTsKIAogCWlmICh2aW9wYXRoX2hvc3RMcCAhPSBIdkxwSW5kZXhJbnZhbGlkKQogCQl2aW9fc2V0SGFuZGxlcih2aW9tYWpvcnN1YnR5cGVfY29uZmlnLCBoYW5kbGVDb25maWcpOwpAQCAtNDg3LDcgKzQ4NSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdGVtcE51bUFsbG9jYXRlZDsKIAotCWlmICgocmVtb3RlTHAgPj0gSHZNYXhBcmNoaXRlY3RlZExwcykgfHwgKHJlbW90ZUxwID09IEh2THBJbmRleEludmFsaWQpKQorCWlmICgocmVtb3RlTHAgPj0gSFZNQVhBUkNISVRFQ1RFRExQUykgfHwgKHJlbW90ZUxwID09IEh2THBJbmRleEludmFsaWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN1YnR5cGUgPSBzdWJ0eXBlID4+IFZJT01BSk9SX1NVQlRZUEVfU0hJRlQ7CkBAIC01NTgsNyArNTU2LDcgQEAKIAlpbnQgbnVtT3BlbjsKIAlzdHJ1Y3QgYWxsb2NfcGFybXMgcGFybXM7CiAKLQlpZiAoKHJlbW90ZUxwID49IEh2TWF4QXJjaGl0ZWN0ZWRMcHMpIHx8IChyZW1vdGVMcCA9PSBIdkxwSW5kZXhJbnZhbGlkKSkKKwlpZiAoKHJlbW90ZUxwID49IEhWTUFYQVJDSElURUNURURMUFMpIHx8IChyZW1vdGVMcCA9PSBIdkxwSW5kZXhJbnZhbGlkKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzdWJ0eXBlID0gc3VidHlwZSA+PiBWSU9NQUpPUl9TVUJUWVBFX1NISUZUOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9saWIvTWFrZWZpbGUgYi9hcmNoL3BwYzY0L2xpYi9NYWtlZmlsZQppbmRleCBiZjdiNWJiLi43NmZiZmE5IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3BwYzY0L2xpYi9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogCiAjIGUyYSBwcm92aWRlcyBFQkNESUMgdG8gQVNDSUkgY29udmVyc2lvbnMuCiBpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLW9iai0kKENPTkZJR19QQ0kpCSs9IGUyYS5vCitvYmoteSArPSBlMmEubwogZW5kaWYKIAogbGliLSQoQ09ORklHX0RFQlVHX0tFUk5FTCkgKz0gc3N0ZXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9oYXNoX3V0aWxzLmMgYi9hcmNoL3BwYzY0L21tL2hhc2hfdXRpbHMuYwppbmRleCAwYTBmOTcwLi4xNjQ3YjFjIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L21tL2hhc2hfdXRpbHMuYworKysgYi9hcmNoL3BwYzY0L21tL2hhc2hfdXRpbHMuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJCW1lbXNldCgodm9pZCAqKXRhYmxlLCAwLCBodGFiX3NpemVfYnl0ZXMpOwogCX0KIAotCW1vZGVfcncgPSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0NPSEVSRU5UIHwgUFBfUldYWDsKKwltb2RlX3J3ID0gX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0NPSEVSRU5UIHwgUFBfUldYWDsKIAogCS8qIE9uIFUzIGJhc2VkIG1hY2hpbmVzLCB3ZSBuZWVkIHRvIHJlc2VydmUgdGhlIERBUlQgYXJlYSBhbmQKIAkgKiBfTk9UXyBtYXAgaXQgdG8gYXZvaWQgY2FjaGUgcGFyYWRveGVzIGFzIGl0J3MgcmVtYXBwZWQgbm9uCkBAIC0zMTAsMTAgKzMxMCw2IEBACiAKIAkJdnNpZCA9IGdldF92c2lkKG1tLT5jb250ZXh0LmlkLCBlYSk7CiAJCWJyZWFrOwotCWNhc2UgSU9fUkVHSU9OX0lEOgotCQltbSA9ICZpb3JlbWFwX21tOwotCQl2c2lkID0gZ2V0X2tlcm5lbF92c2lkKGVhKTsKLQkJYnJlYWs7CiAJY2FzZSBWTUFMTE9DX1JFR0lPTl9JRDoKIAkJbW0gPSAmaW5pdF9tbTsKIAkJdnNpZCA9IGdldF9rZXJuZWxfdnNpZChlYSk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3BwYzY0L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggZDNiZjg2YS4uZmRjZmU5NyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvcHBjNjQvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJcmV0dXJuIGh1Z2VwdGVfb2Zmc2V0KGRpciwgYWRkcik7CiB9CiAKLXN0YXRpYyBwdGVfdCAqaHVnZV9wdGVfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCitwdGVfdCAqaHVnZV9wdGVfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcHVkX3QgKnB1ZDsKIApAQCAtMTM0LDcgKzEzNCw3IEBACiAJcmV0dXJuIGh1Z2VwdGVfb2Zmc2V0KHB1ZCwgYWRkcik7CiB9CiAKLXN0YXRpYyBwdGVfdCAqaHVnZV9wdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3B0ZV90ICpodWdlX3B0ZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXB1ZF90ICpwdWQ7CiAKQEAgLTE0NywyNSArMTQ3LDYgQEAKIAlyZXR1cm4gaHVnZXB0ZV9hbGxvYyhtbSwgcHVkLCBhZGRyKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X2h1Z2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJIHB0ZV90ICpwdGVwLCBpbnQgd3JpdGVfYWNjZXNzKQotewotCXB0ZV90IGVudHJ5OwotCi0JYWRkX21tX2NvdW50ZXIobW0sIHJzcywgSFBBR0VfU0laRSAvIFBBR0VfU0laRSk7Ci0JaWYgKHdyaXRlX2FjY2VzcykgewotCQllbnRyeSA9Ci0JCSAgICBwdGVfbWt3cml0ZShwdGVfbWtkaXJ0eShta19wdGUocGFnZSwgdm1hLT52bV9wYWdlX3Byb3QpKSk7Ci0JfSBlbHNlIHsKLQkJZW50cnkgPSBwdGVfd3Jwcm90ZWN0KG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCkpOwotCX0KLQllbnRyeSA9IHB0ZV9ta3lvdW5nKGVudHJ5KTsKLQllbnRyeSA9IHB0ZV9ta2h1Z2UoZW50cnkpOwotCi0Jc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgZW50cnkpOwotfQotCiAvKgogICogVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHByb3BlciBhbGlnbm1lbnQgb2YgaW5wdXQgYWRkciBhbmQgbGVuIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTI1OSw4MCArMjQwLDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotaW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLAotCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JcHRlX3QgKnNyY19wdGUsICpkc3RfcHRlLCBlbnRyeTsKLQlzdHJ1Y3QgcGFnZSAqcHRlcGFnZTsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSB2bWEtPnZtX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgZW5kID0gdm1hLT52bV9lbmQ7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQl3aGlsZSAoYWRkciA8IGVuZCkgewotCQlkc3RfcHRlID0gaHVnZV9wdGVfYWxsb2MoZHN0LCBhZGRyKTsKLQkJaWYgKCFkc3RfcHRlKQotCQkJZ290byBvdXQ7Ci0KLQkJc3JjX3B0ZSA9IGh1Z2VfcHRlX29mZnNldChzcmMsIGFkZHIpOwotCQllbnRyeSA9ICpzcmNfcHRlOwotCQkKLQkJcHRlcGFnZSA9IHB0ZV9wYWdlKGVudHJ5KTsKLQkJZ2V0X3BhZ2UocHRlcGFnZSk7Ci0JCWFkZF9tbV9jb3VudGVyKGRzdCwgcnNzLCBIUEFHRV9TSVpFIC8gUEFHRV9TSVpFKTsKLQkJc2V0X3B0ZV9hdChkc3QsIGFkZHIsIGRzdF9wdGUsIGVudHJ5KTsKLQotCQlhZGRyICs9IEhQQUdFX1NJWkU7Ci0JfQotCi0JZXJyID0gMDsKLSBvdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50Ci1mb2xsb3dfaHVnZXRsYl9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMsCi0JCSAgICB1bnNpZ25lZCBsb25nICpwb3NpdGlvbiwgaW50ICpsZW5ndGgsIGludCBpKQotewotCXVuc2lnbmVkIGxvbmcgdnBmbiwgdmFkZHIgPSAqcG9zaXRpb247Ci0JaW50IHJlbWFpbmRlciA9ICpsZW5ndGg7Ci0KLQlXQVJOX09OKCFpc192bV9odWdldGxiX3BhZ2Uodm1hKSk7Ci0KLQl2cGZuID0gdmFkZHIvUEFHRV9TSVpFOwotCXdoaWxlICh2YWRkciA8IHZtYS0+dm1fZW5kICYmIHJlbWFpbmRlcikgewotCQlpZiAocGFnZXMpIHsKLQkJCXB0ZV90ICpwdGU7Ci0JCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQkJcHRlID0gaHVnZV9wdGVfb2Zmc2V0KG1tLCB2YWRkcik7Ci0KLQkJCS8qIGh1Z2V0bGIgc2hvdWxkIGJlIGxvY2tlZCwgYW5kIGhlbmNlLCBwcmVmYXVsdGVkICovCi0JCQlXQVJOX09OKCFwdGUgfHwgcHRlX25vbmUoKnB0ZSkpOwotCi0JCQlwYWdlID0gJnB0ZV9wYWdlKCpwdGUpW3ZwZm4gJSAoSFBBR0VfU0laRS9QQUdFX1NJWkUpXTsKLQotCQkJV0FSTl9PTighUGFnZUNvbXBvdW5kKHBhZ2UpKTsKLQotCQkJZ2V0X3BhZ2UocGFnZSk7Ci0JCQlwYWdlc1tpXSA9IHBhZ2U7Ci0JCX0KLQotCQlpZiAodm1hcykKLQkJCXZtYXNbaV0gPSB2bWE7Ci0KLQkJdmFkZHIgKz0gUEFHRV9TSVpFOwotCQkrK3ZwZm47Ci0JCS0tcmVtYWluZGVyOwotCQkrK2k7Ci0JfQotCi0JKmxlbmd0aCA9IHJlbWFpbmRlcjsKLQkqcG9zaXRpb24gPSB2YWRkcjsKLQotCXJldHVybiBpOwotfQotCiBzdHJ1Y3QgcGFnZSAqCiBmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0ZSkKIHsKQEAgLTM2Myw4OSArMjcwLDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQlwdGVfdCAqcHRlcDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCVdBUk5fT04oIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTsKLQlCVUdfT04oKHN0YXJ0ICUgSFBBR0VfU0laRSkgIT0gMCk7Ci0JQlVHX09OKChlbmQgJSBIUEFHRV9TSVpFKSAhPSAwKTsKLQotCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IEhQQUdFX1NJWkUpIHsKLQkJcHRlX3QgcHRlOwotCi0JCXB0ZXAgPSBodWdlX3B0ZV9vZmZzZXQobW0sIGFkZHIpOwotCQlpZiAoIXB0ZXAgfHwgcHRlX25vbmUoKnB0ZXApKQotCQkJY29udGludWU7Ci0KLQkJcHRlID0gKnB0ZXA7Ci0JCXBhZ2UgPSBwdGVfcGFnZShwdGUpOwotCQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwotCi0JCXB1dF9wYWdlKHBhZ2UpOwotCX0KLQlhZGRfbW1fY291bnRlcihtbSwgcnNzLCAtKChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCkpOwotCWZsdXNoX3RsYl9wZW5kaW5nKCk7Ci19Ci0KLWludCBodWdldGxiX3ByZWZhdWx0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQlpbnQgcmV0ID0gMDsKLQotCVdBUk5fT04oIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTsKLQlCVUdfT04oKHZtYS0+dm1fc3RhcnQgJSBIUEFHRV9TSVpFKSAhPSAwKTsKLQlCVUdfT04oKHZtYS0+dm1fZW5kICUgSFBBR0VfU0laRSkgIT0gMCk7Ci0KLQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwotCWZvciAoYWRkciA9IHZtYS0+dm1fc3RhcnQ7IGFkZHIgPCB2bWEtPnZtX2VuZDsgYWRkciArPSBIUEFHRV9TSVpFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaWR4OwotCQlwdGVfdCAqcHRlID0gaHVnZV9wdGVfYWxsb2MobW0sIGFkZHIpOwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQlpZiAoIXB0ZSkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmICghIHB0ZV9ub25lKCpwdGUpKQotCQkJY29udGludWU7Ci0KLQkJaWR4ID0gKChhZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gSFBBR0VfU0hJRlQpCi0JCQkrICh2bWEtPnZtX3Bnb2ZmID4+IChIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpKTsKLQkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaWR4KTsKLQkJaWYgKCFwYWdlKSB7Ci0JCQkvKiBjaGFyZ2UgdGhlIGZzIHF1b3RhIGZpcnN0ICovCi0JCQlpZiAoaHVnZXRsYl9nZXRfcXVvdGEobWFwcGluZykpIHsKLQkJCQlyZXQgPSAtRU5PTUVNOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcGFnZSA9IGFsbG9jX2h1Z2VfcGFnZSgpOwotCQkJaWYgKCFwYWdlKSB7Ci0JCQkJaHVnZXRsYl9wdXRfcXVvdGEobWFwcGluZyk7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKHBhZ2UsIG1hcHBpbmcsIGlkeCwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoISByZXQpIHsKLQkJCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaHVnZXRsYl9wdXRfcXVvdGEobWFwcGluZyk7Ci0JCQkJZnJlZV9odWdlX3BhZ2UocGFnZSk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQkJc2V0X2h1Z2VfcHRlKG1tLCB2bWEsIGFkZHIsIHBhZ2UsIHB0ZSwgdm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKTsKLQl9Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KIC8qIEJlY2F1c2Ugd2UgaGF2ZSBhbiBleGNsdXNpdmUgaHVnZXBhZ2UgcmVnaW9uIHdoaWNoIGxpZXMgd2l0aGluIHRoZQogICogbm9ybWFsIHVzZXIgYWRkcmVzcyBzcGFjZSwgd2UgaGF2ZSB0byB0YWtlIHNwZWNpYWwgbWVhc3VyZXMgdG8gbWFrZQogICogbm9uLWh1Z2UgbW1hcCgpcyBldmFkZSB0aGUgaHVnZXBhZ2UgcmVzZXJ2ZWQgcmVnaW9ucy4gKi8KQEAgLTQ2OCw3ICsyOTIsMTIgQEAKIAkJICAgICYmICFpc19odWdlcGFnZV9vbmx5X3JhbmdlKG1tLCBhZGRyLGxlbikpCiAJCQlyZXR1cm4gYWRkcjsKIAl9Ci0Jc3RhcnRfYWRkciA9IGFkZHIgPSBtbS0+ZnJlZV9hcmVhX2NhY2hlOworCWlmIChsZW4gPiBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSkgeworCSAgICAgICAgc3RhcnRfYWRkciA9IGFkZHIgPSBtbS0+ZnJlZV9hcmVhX2NhY2hlOworCX0gZWxzZSB7CisJICAgICAgICBzdGFydF9hZGRyID0gYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKKwl9CiAKIGZ1bGxfc2VhcmNoOgogCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKQEAgLTQ5Miw2ICszMjEsOCBAQAogCQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHIgKyBsZW47CiAJCQlyZXR1cm4gYWRkcjsKIAkJfQorCQlpZiAoYWRkciArIG1tLT5jYWNoZWRfaG9sZV9zaXplIDwgdm1hLT52bV9zdGFydCkKKwkJICAgICAgICBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IHZtYS0+dm1fc3RhcnQgLSBhZGRyOwogCQlhZGRyID0gdm1hLT52bV9lbmQ7CiAJCXZtYSA9IHZtYS0+dm1fbmV4dDsKIAl9CkBAIC00OTksNiArMzMwLDcgQEAKIAkvKiBNYWtlIHN1cmUgd2UgZGlkbid0IG1pc3MgYW55IGhvbGVzICovCiAJaWYgKHN0YXJ0X2FkZHIgIT0gVEFTS19VTk1BUFBFRF9CQVNFKSB7CiAJCXN0YXJ0X2FkZHIgPSBhZGRyID0gVEFTS19VTk1BUFBFRF9CQVNFOworCQltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CiAJCWdvdG8gZnVsbF9zZWFyY2g7CiAJfQogCXJldHVybiAtRU5PTUVNOwpAQCAtNTIwLDYgKzM1Miw3IEBACiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2X3ZtYTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5tbWFwX2Jhc2UsIGFkZHIgPSBhZGRyMDsKKwl1bnNpZ25lZCBsb25nIGxhcmdlc3RfaG9sZSA9IG1tLT5jYWNoZWRfaG9sZV9zaXplOwogCWludCBmaXJzdF90aW1lID0gMTsKIAogCS8qIHJlcXVlc3RlZCBsZW5ndGggdG9vIGJpZyBmb3IgZW50aXJlIGFkZHJlc3Mgc3BhY2UgKi8KQEAgLTU0MCw2ICszNzMsMTAgQEAKIAkJCXJldHVybiBhZGRyOwogCX0KIAorCWlmIChsZW4gPD0gbGFyZ2VzdF9ob2xlKSB7CisJICAgICAgICBsYXJnZXN0X2hvbGUgPSAwOworCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFzZTsKKwl9CiB0cnlfYWdhaW46CiAJLyogbWFrZSBzdXJlIGl0IGNhbiBmaXQgaW4gdGhlIHJlbWFpbmluZyBhZGRyZXNzIHNwYWNlICovCiAJaWYgKG1tLT5mcmVlX2FyZWFfY2FjaGUgPCBsZW4pCkBAIC01NjgsMTMgKzQwNSwyMSBAQAogCQkgKiB2bWEtPnZtX3N0YXJ0LCB1c2UgaXQ6CiAJCSAqLwogCQlpZiAoYWRkcitsZW4gPD0gdm1hLT52bV9zdGFydCAmJgotCQkJCSghcHJldl92bWEgfHwgKGFkZHIgPj0gcHJldl92bWEtPnZtX2VuZCkpKQorCQkgICAgICAgICAgKCFwcmV2X3ZtYSB8fCAoYWRkciA+PSBwcmV2X3ZtYS0+dm1fZW5kKSkpIHsKIAkJCS8qIHJlbWVtYmVyIHRoZSBhZGRyZXNzIGFzIGEgaGludCBmb3IgbmV4dCB0aW1lICovCi0JCQlyZXR1cm4gKG1tLT5mcmVlX2FyZWFfY2FjaGUgPSBhZGRyKTsKLQkJZWxzZQorCQkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gbGFyZ2VzdF9ob2xlOworCQkgICAgICAgIHJldHVybiAobW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHIpOworCQl9IGVsc2UgewogCQkJLyogcHVsbCBmcmVlX2FyZWFfY2FjaGUgZG93biB0byB0aGUgZmlyc3QgaG9sZSAqLwotCQkJaWYgKG1tLT5mcmVlX2FyZWFfY2FjaGUgPT0gdm1hLT52bV9lbmQpCisJCSAgICAgICAgaWYgKG1tLT5mcmVlX2FyZWFfY2FjaGUgPT0gdm1hLT52bV9lbmQpIHsKIAkJCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gdm1hLT52bV9zdGFydDsKKwkJCQltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IGxhcmdlc3RfaG9sZTsKKwkJCX0KKwkJfQorCisJCS8qIHJlbWVtYmVyIHRoZSBsYXJnZXN0IGhvbGUgd2Ugc2F3IHNvIGZhciAqLworCQlpZiAoYWRkciArIGxhcmdlc3RfaG9sZSA8IHZtYS0+dm1fc3RhcnQpCisJCSAgICAgICAgbGFyZ2VzdF9ob2xlID0gdm1hLT52bV9zdGFydCAtIGFkZHI7CiAKIAkJLyogdHJ5IGp1c3QgYmVsb3cgdGhlIGN1cnJlbnQgdm1hLT52bV9zdGFydCAqLwogCQlhZGRyID0gdm1hLT52bV9zdGFydC1sZW47CkBAIC01ODcsNiArNDMyLDcgQEAKIAkgKi8KIAlpZiAoZmlyc3RfdGltZSkgewogCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFzZTsKKwkJbGFyZ2VzdF9ob2xlID0gMDsKIAkJZmlyc3RfdGltZSA9IDA7CiAJCWdvdG8gdHJ5X2FnYWluOwogCX0KQEAgLTU5NywxMSArNDQzLDEzIEBACiAJICogYWxsb2NhdGlvbnMuCiAJICovCiAJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7CiAJYWRkciA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzKTsKIAkvKgogCSAqIFJlc3RvcmUgdGhlIHRvcGRvd24gYmFzZToKIAkgKi8KIAltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFzZTsKKwltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7CiAKIAlyZXR1cm4gYWRkcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvbW0vaW1hbGxvYy5jIGIvYXJjaC9wcGM2NC9tbS9pbWFsbG9jLmMKaW5kZXggY2I4NzI3Zi4uYjZlNzViOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9tbS9pbWFsbG9jLmMKKysrIGIvYXJjaC9wcGM2NC9tbS9pbWFsbG9jLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vaW1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKIHN0YXRpYyBERUNMQVJFX01VVEVYKGltbGlzdF9zZW0pOwogc3RydWN0IHZtX3N0cnVjdCAqIGltbGlzdCA9IE5VTEw7CkBAIC0yODUsMjkgKzI4NiwzMiBAQAogCXJldHVybiBhcmVhOwogfQogCi11bnNpZ25lZCBsb25nIGltX2ZyZWUodm9pZCAqIGFkZHIpCit2b2lkIGltX2ZyZWUodm9pZCAqIGFkZHIpCiB7CiAJc3RydWN0IHZtX3N0cnVjdCAqKnAsICp0bXA7Ci0JdW5zaWduZWQgbG9uZyByZXRfc2l6ZSA9IDA7CiAgIAogCWlmICghYWRkcikKLQkJcmV0dXJuIHJldF9zaXplOwotCWlmICgoUEFHRV9TSVpFLTEpICYgKHVuc2lnbmVkIGxvbmcpIGFkZHIpIHsKKwkJcmV0dXJuOworCWlmICgodW5zaWduZWQgbG9uZykgYWRkciAmIH5QQUdFX01BU0spIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gJXMgYmFkIGFkZHJlc3MgKCVwKVxuIiwgX19GVU5DVElPTl9fLAkJCWFkZHIpOwotCQlyZXR1cm4gcmV0X3NpemU7CisJCXJldHVybjsKIAl9CiAJZG93bigmaW1saXN0X3NlbSk7CiAJZm9yIChwID0gJmltbGlzdCA7ICh0bXAgPSAqcCkgOyBwID0gJnRtcC0+bmV4dCkgewogCQlpZiAodG1wLT5hZGRyID09IGFkZHIpIHsKLQkJCXJldF9zaXplID0gdG1wLT5zaXplOwogCQkJKnAgPSB0bXAtPm5leHQ7CisKKwkJCS8qIFhYWDogZG8gd2UgbmVlZCB0aGUgbG9jaz8gKi8KKwkJCXNwaW5fbG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOworCQkJdW5tYXBfdm1fYXJlYSh0bXApOworCQkJc3Bpbl91bmxvY2soJmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKKwogCQkJa2ZyZWUodG1wKTsKIAkJCXVwKCZpbWxpc3Rfc2VtKTsKLQkJCXJldHVybiByZXRfc2l6ZTsKKwkJCXJldHVybjsKIAkJfQogCX0KIAl1cCgmaW1saXN0X3NlbSk7CiAJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gJXMgbm9uZXhpc3RlbnQgYXJlYSAoJXApXG4iLCBfX0ZVTkNUSU9OX18sCiAJCQlhZGRyKTsKLQlyZXR1cm4gcmV0X3NpemU7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L21tL2luaXQuYyBiL2FyY2gvcHBjNjQvbW0vaW5pdC5jCmluZGV4IDRiNDJhZmYuLjZmYTFlNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvcHBjNjQvbW0vaW5pdC5jCkBAIC03Myw5ICs3Myw2IEBACiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbXTsKIGV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfc2V0W05SX0NQVVNdOwogCi1leHRlcm4gcGdkX3QgaW9yZW1hcF9kaXJbXTsKLXBnZF90ICogaW9yZW1hcF9wZ2QgPSAocGdkX3QgKikmaW9yZW1hcF9kaXI7Ci0KIHVuc2lnbmVkIGxvbmcga2xpbWl0ID0gKHVuc2lnbmVkIGxvbmcpX2VuZDsKIAogdW5zaWduZWQgbG9uZyBfU0RSMT0wOwpAQCAtMTM3LDY5ICsxMzQsNiBAQAogCiAjZWxzZQogCi1zdGF0aWMgdm9pZCB1bm1hcF9pbV9hcmVhX3B0ZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlwdGVfdCAqcHRlOwotCi0JcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKLQlkbyB7Ci0JCXB0ZV90IHB0ZW50ID0gcHRlcF9nZXRfYW5kX2NsZWFyKCZpb3JlbWFwX21tLCBhZGRyLCBwdGUpOwotCQlXQVJOX09OKCFwdGVfbm9uZShwdGVudCkgJiYgIXB0ZV9wcmVzZW50KHB0ZW50KSk7Ci0JfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bm1hcF9pbV9hcmVhX3BtZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlwbWRfdCAqcG1kOwotCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQotCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKLQlkbyB7Ci0JCW5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKHBtZF9ub25lX29yX2NsZWFyX2JhZChwbWQpKQotCQkJY29udGludWU7Ci0JCXVubWFwX2ltX2FyZWFfcHRlKHBtZCwgYWRkciwgbmV4dCk7Ci0JfSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bm1hcF9pbV9hcmVhX3B1ZChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlwdWRfdCAqcHVkOwotCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQotCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKLQlkbyB7Ci0JCW5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKHB1ZF9ub25lX29yX2NsZWFyX2JhZChwdWQpKQotCQkJY29udGludWU7Ci0JCXVubWFwX2ltX2FyZWFfcG1kKHB1ZCwgYWRkciwgbmV4dCk7Ci0JfSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFwX2ltX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9ICZpb3JlbWFwX21tOwotCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQlwZ2RfdCAqcGdkOwotCi0Jc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKLQotCXBnZCA9IHBnZF9vZmZzZXRfaShhZGRyKTsKLQlmbHVzaF9jYWNoZV92dW5tYXAoYWRkciwgZW5kKTsKLQlkbyB7Ci0JCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2QpKQotCQkJY29udGludWU7Ci0JCXVubWFwX2ltX2FyZWFfcHVkKHBnZCwgYWRkciwgbmV4dCk7Ci0JfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci0JZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTsKLQotCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKLX0KLQogLyoKICAqIG1hcF9pb19wYWdlIGN1cnJlbnRseSBvbmx5IGNhbGxlZCBieSBfX2lvcmVtYXAKICAqIG1hcF9pb19wYWdlIGFkZHMgYW4gZW50cnkgdG8gdGhlIGlvcmVtYXAgcGFnZSB0YWJsZQpAQCAtMjE0LDIxICsxNDgsMjEgQEAKIAl1bnNpZ25lZCBsb25nIHZzaWQ7CiAKIAlpZiAobWVtX2luaXRfZG9uZSkgewotCQlzcGluX2xvY2soJmlvcmVtYXBfbW0ucGFnZV90YWJsZV9sb2NrKTsKLQkJcGdkcCA9IHBnZF9vZmZzZXRfaShlYSk7Ci0JCXB1ZHAgPSBwdWRfYWxsb2MoJmlvcmVtYXBfbW0sIHBnZHAsIGVhKTsKKwkJc3Bpbl9sb2NrKCZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7CisJCXBnZHAgPSBwZ2Rfb2Zmc2V0X2soZWEpOworCQlwdWRwID0gcHVkX2FsbG9jKCZpbml0X21tLCBwZ2RwLCBlYSk7CiAJCWlmICghcHVkcCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlwbWRwID0gcG1kX2FsbG9jKCZpb3JlbWFwX21tLCBwdWRwLCBlYSk7CisJCXBtZHAgPSBwbWRfYWxsb2MoJmluaXRfbW0sIHB1ZHAsIGVhKTsKIAkJaWYgKCFwbWRwKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXB0ZXAgPSBwdGVfYWxsb2Nfa2VybmVsKCZpb3JlbWFwX21tLCBwbWRwLCBlYSk7CisJCXB0ZXAgPSBwdGVfYWxsb2Nfa2VybmVsKCZpbml0X21tLCBwbWRwLCBlYSk7CiAJCWlmICghcHRlcCkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlwYSA9IGFic190b19waHlzKHBhKTsKLQkJc2V0X3B0ZV9hdCgmaW9yZW1hcF9tbSwgZWEsIHB0ZXAsIHBmbl9wdGUocGEgPj4gUEFHRV9TSElGVCwKKwkJc2V0X3B0ZV9hdCgmaW5pdF9tbSwgZWEsIHB0ZXAsIHBmbl9wdGUocGEgPj4gUEFHRV9TSElGVCwKIAkJCQkJCQkgIF9fcGdwcm90KGZsYWdzKSkpOwotCQlzcGluX3VubG9jaygmaW9yZW1hcF9tbS5wYWdlX3RhYmxlX2xvY2spOworCQlzcGluX3VubG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgdmEsIHZwbiwgaGFzaCwgaHB0ZWc7CiAKQEAgLTI2NywxMyArMjAxLDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IFBBR0VfU0laRSkKIAkJaWYgKG1hcF9pb19wYWdlKGVhK2ksIHBhK2ksIGZsYWdzKSkKLQkJCWdvdG8gZmFpbHVyZTsKKwkJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgKGVhICsgKGFkZHIgJiB+UEFHRV9NQVNLKSk7Ci0gZmFpbHVyZToKLQlpZiAobWVtX2luaXRfZG9uZSkKLQkJdW5tYXBfaW1fYXJlYShlYSwgZWEgKyBzaXplKTsKLQlyZXR1cm4gTlVMTDsKIH0KIAogCkBAIC0zODEsMTkgKzMxMSwxNCBAQAogICovCiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0b2tlbikKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHNpemU7CiAJdm9pZCAqYWRkcjsKIAogCWlmICghbWVtX2luaXRfZG9uZSkKIAkJcmV0dXJuOwogCQogCWFkZHIgPSAodm9pZCAqKSAoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSkgdG9rZW4gJiBQQUdFX01BU0spOwotCQotCWlmICgoc2l6ZSA9IGltX2ZyZWUoYWRkcikpID09IDApCi0JCXJldHVybjsKIAotCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylhZGRyOyAKLQl1bm1hcF9pbV9hcmVhKGFkZHJlc3MsIGFkZHJlc3MgKyBzaXplKTsKKwlpbV9mcmVlKGFkZHIpOwogfQogCiBzdGF0aWMgaW50IGlvdW5tYXBfc3Vic2V0X3JlZ2lvbnModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L3htb24veG1vbi5jIGIvYXJjaC9wcGM2NC94bW9uL3htb24uYwppbmRleCAzYzBjY2IyLi43ZjZlMTNhIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L3htb24veG1vbi5jCisrKyBiL2FyY2gvcHBjNjQveG1vbi94bW9uLmMKQEAgLTIyNDcsNyArMjI0NywxNCBAQAogCQkJdG1wc3RyW2ldID0gYzsKIAkJfQogCQl0bXBzdHJbaSsrXSA9IDA7Ci0JCSp2cCA9IGthbGxzeW1zX2xvb2t1cF9uYW1lKHRtcHN0cik7CisJCSp2cCA9IDA7CisJCWlmIChzZXRqbXAoYnVzX2Vycm9yX2ptcCkgPT0gMCkgeworCQkJY2F0Y2hfbWVtb3J5X2Vycm9ycyA9IDE7CisJCQlzeW5jKCk7CisJCQkqdnAgPSBrYWxsc3ltc19sb29rdXBfbmFtZSh0bXBzdHIpOworCQkJc3luYygpOworCQl9CisJCWNhdGNoX21lbW9yeV9lcnJvcnMgPSAwOwogCQlpZiAoISgqdnApKSB7CiAJCQlwcmludGYoInVua25vd24gc3ltYm9sICclcydcbiIsIHRtcHN0cik7CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2lvY3RsLmMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9pb2N0bC5jCmluZGV4IDAzZDAzYzYuLjI0YTFlOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2lvY3RsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfaW9jdGwuYwpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgIi4uLy4uLy4uL2ZzL2NvbXBhdF9pb2N0bC5jIgogCiAvKiBzMzkwIG9ubHkgaW9jdGxzICovCi0jaWYgZGVmaW5lZChDT05GSUdfREFTRCkgfHwgZGVmaW5lZChDT05GSUdfREFTRF9NT0RVTEUpCiBDT01QQVRJQkxFX0lPQ1RMKERBU0RBUElWRVIpCiBDT01QQVRJQkxFX0lPQ1RMKEJJT0RBU0RESVNBQkxFKQogQ09NUEFUSUJMRV9JT0NUTChCSU9EQVNERU5BQkxFKQpAQCAtNTksMTYgKzU4LDExIEBACiBDT01QQVRJQkxFX0lPQ1RMKEJJT0RBU0RQU1JEKQogQ09NUEFUSUJMRV9JT0NUTChCSU9EQVNER0FUVFIpCiBDT01QQVRJQkxFX0lPQ1RMKEJJT0RBU0RTQVRUUikKLSNpZiBkZWZpbmVkKENPTkZJR19EQVNEX0NNQikgfHwgZGVmaW5lZChDT05GSUdfREFTRF9DTUJfTU9EVUxFKQogQ09NUEFUSUJMRV9JT0NUTChCSU9EQVNEQ01GRU5BQkxFKQogQ09NUEFUSUJMRV9JT0NUTChCSU9EQVNEQ01GRElTQUJMRSkKIENPTVBBVElCTEVfSU9DVEwoQklPREFTRFJFQURBTExDTUIpCi0jZW5kaWYKLSNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfUzM5MF9UQVBFKSB8fCBkZWZpbmVkKENPTkZJR19TMzkwX1RBUEVfTU9EVUxFKQogQ09NUEFUSUJMRV9JT0NUTChUQVBFMzkwX0RJU1BMQVkpCi0jZW5kaWYKIAogLyogczM5MCBkb2Vzbid0IG5lZWQgaGFuZGxlcnMgaGVyZSAqLwogQ09NUEFUSUJMRV9JT0NUTChUSU9DR1NFUklBTCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggYjgwNGM1NS4uZmM4YmY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTM0NSwxMCArMzQ1LDI1IEBACiAJYm5vICAgLkxub3Jlc2V0CiAgICAgICAgIGxhICAgICVyMiwuTHJlc2V0ICAgICAgICAgICAgICAKICAgICAgICAgbGhpICAgJXIzLDI2Ci0gICAgICAgIC5sb25nIDB4ODMyMzAwMDgKKwlkaWFnICAlcjIsJXIzLDgKKwltdmMgICAweDc4KDgpLC5McmRybmV3cHN3ICAgICAgICAgICAgICAjIHNldCB1cCBJTyBpbnRlcnJ1cHQgcHN3CisuTHdhaXRyZHJpcnE6CisJbHBzdyAgLkxyZHJ3YWl0cHN3CisuTHJkcmludDoKKwljICAgICAlcjEsMHhiOCAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbXBhcmUgc3ViY2hhbm5lbCBudW1iZXIKKwlibmUgICAuTHdhaXRyZHJpcnEKKwlsYSAgICAlcjUsLkxpcmIKKwl0c2NoICAwKCVyNSkKIC5Mbm9yZXNldDoKKyAgICAgICAgYiAgICAgLkxub2xvYWQKKworCS5hbGlnbiA4CisuTHJkcm5ld3BzdzoKKwkubG9uZyAgMHgwMDA4MDAwMCwweDgwMDAwMDAwKy5McmRyaW50CisuTHJkcndhaXRwc3c6CisJLmxvbmcgIDB4MDIwYTAwMDAsMHg4MDAwMDAwMCsuTHJkcmludAogI2VuZGlmCi0JCisKICMKICMgZXZlcnl0aGluZyBsb2FkZWQsIGdvIGZvciBpdAogIwpAQCAtNTE3LDEwICs1MzIsMTAgQEAKIAlsICAgICAlcjIsIC5McmNwMi0uTFBHMSglcjEzKQkjIHRyeSB3aXRoIFJlYWQgU0NQCiAJYiAgICAgLkxzZXJ2aWNlY2FsbC0uTFBHMSglcjEzKQogLkxwcm9jc2NjYjoKLQlsaCAgICAlcjEsLkxzY3BpbmNyMS1QQVJNQVJFQSglcjQpICMgdXNlIHRoaXMgb25lIGlmICE9IDAKLQljaGkgICAlcjEsMHgwMAotCWpuZSAgIC5Mc2NuZAotCWwgICAgICVyMSwuTHNjcGluY3IyLVBBUk1BUkVBKCVyNCkgIyBvdGhlcndpc2UgdXNlIHRoaXMgb25lCisJbGhpICAgJXIxLDAKKwlpY20gICAlcjEsMywuTHNjcGluY3IxLVBBUk1BUkVBKCVyNCkgIyB1c2UgdGhpcyBvbmUgaWYgIT0gMAorCWpueiAgIC5Mc2NuZAorCWwgICAgICVyMSwuTHNjcGluY3IyLVBBUk1BUkVBKzQoJXI0KSAjIG90aGVyd2lzZSB1c2UgdGhpcyBvbmUKIC5Mc2NuZDoKIAl4ciAgICAlcjMsJXIzCQkJIyBzYW1lIGxvZ2ljCiAJaWMgICAgJXIzLC5Mc2NwYTEtUEFSTUFSRUEoJXI0KQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKaW5kZXggODM2Njc5My4uZjUyNWMwYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCkBAIC0zNDQsMTAgKzM0NCwyNSBAQAogCWJubyAgIC5Mbm9yZXNldAogICAgICAgICBsYSAgICAlcjIsLkxyZXNldCAgICAgICAgICAgICAgCiAgICAgICAgIGxoaSAgICVyMywyNgotICAgICAgICAubG9uZyAweDgzMjMwMDA4CisJZGlhZyAgJXIyLCVyMyw4CisJbXZjICAgMHg3OCg4KSwuTHJkcm5ld3BzdwkgICAgICAgIyBzZXQgdXAgSU8gaW50ZXJydXB0IHBzdworLkx3YWl0cmRyaXJxOgorCWxwc3cgIC5McmRyd2FpdHBzdworLkxyZHJpbnQ6CisJYyAgICAgJXIxLDB4YjgJCQkgICAgICAgIyBjb21wYXJlIHN1YmNoYW5uZWwgbnVtYmVyCisJYm5lICAgLkx3YWl0cmRyaXJxCisJbGEgICAgJXI1LC5MaXJiCisJdHNjaCAgMCglcjUpCiAuTG5vcmVzZXQ6CisJYiAgICAgLkxub2xvYWQKKworCS5hbGlnbiA4CisuTHJkcm5ld3BzdzoKKwkubG9uZyAgMHgwMDA4MDAwMCwweDgwMDAwMDAwKy5McmRyaW50CisuTHJkcndhaXRwc3c6CisJLmxvbmcgIDB4MDIwYTAwMDAsMHg4MDAwMDAwMCsuTHJkcmludAogI2VuZGlmCi0JCisKICMKICMgZXZlcnl0aGluZyBsb2FkZWQsIGdvIGZvciBpdAogIwpAQCAtNTE4LDkgKzUzMyw5IEBACiAJbCAgICAgJXIyLC5McmNwMi0uTFBHMSglcjEzKQkjIHRyeSB3aXRoIFJlYWQgU0NQCiAJYiAgICAgLkxzZXJ2aWNlY2FsbC0uTFBHMSglcjEzKQogLkxwcm9jc2NjYjoKLQlsaCAgICAlcjEsLkxzY3BpbmNyMS1QQVJNQVJFQSglcjQpICMgdXNlIHRoaXMgb25lIGlmICE9IDAKLQljaGkgICAlcjEsMHgwMAotCWpuZSAgIC5Mc2NuZAorCWxnaGkgICVyMSwwCisJaWNtICAgJXIxLDMsLkxzY3BpbmNyMS1QQVJNQVJFQSglcjQpICMgdXNlIHRoaXMgb25lIGlmICE9IDAKKwlqbnogICAuTHNjbmQKIAlsZyAgICAlcjEsLkxzY3BpbmNyMi1QQVJNQVJFQSglcjQpICMgb3RoZXJ3aXNlIHVzZSB0aGlzIG9uZQogLkxzY25kOgogCXhyICAgICVyMywlcjMJCQkjIHNhbWUgbG9naWMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCA4YjkwZTk1Li5jYTM0YjZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC02NjgsNyArNjY4LDEwIEBACiAKIGFzbWxpbmthZ2Ugdm9pZCBrZXJuZWxfc3RhY2tfb3ZlcmZsb3coc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewotCWRpZSgiS2VybmVsIHN0YWNrIG92ZXJmbG93IiwgcmVncywgMCk7CisJYnVzdF9zcGlubG9ja3MoMSk7CisJcHJpbnRrKCJLZXJuZWwgc3RhY2sgb3ZlcmZsb3cuXG4iKTsKKwlzaG93X3JlZ3MocmVncyk7CisJYnVzdF9zcGlubG9ja3MoMCk7CiAJcGFuaWMoIkNvcnJ1cHQga2VybmVsIHN0YWNrLCBjYW4ndCBjb250aW51ZS4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2NtbS5jIGIvYXJjaC9zMzkwL21tL2NtbS5jCmluZGV4IGY1YTViYzAuLjJkNWNiMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9jbW0uYworKysgYi9hcmNoL3MzOTAvbW0vY21tLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBzdGF0aWMgY2hhciAqc2VuZGVyID0gIlZNUk1TVk0iOwotbW9kdWxlX3BhcmFtKHNlbmRlciwgY2hhcnAsIDApOworbW9kdWxlX3BhcmFtKHNlbmRlciwgY2hhcnAsIDA0MDApOwogTU9EVUxFX1BBUk1fREVTQyhzZW5kZXIsCiAJCSAiR3Vlc3QgbmFtZSB0aGF0IG1heSBzZW5kIFNNU0cgbWVzc2FnZXMgKGRlZmF1bHQgVk1STVNWTSkiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMgYi9hcmNoL3NoL2tlcm5lbC9zeXNfc2guYwppbmRleCBkZjVhYzI5Li45MTdiMmYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNfc2guYworKysgYi9hcmNoL3NoL2tlcm5lbC9zeXNfc2guYwpAQCAtNzksNiArNzksMTAgQEAKIAkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkpCiAJCQlyZXR1cm4gYWRkcjsKIAl9CisJaWYgKGxlbiA8PSBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSkgeworCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOworCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gVEFTS19VTk1BUFBFRF9CQVNFOworCX0KIAlpZiAoZmxhZ3MgJiBNQVBfUFJJVkFURSkKIAkJYWRkciA9IFBBR0VfQUxJR04obW0tPmZyZWVfYXJlYV9jYWNoZSk7CiAJZWxzZQpAQCAtOTUsNiArOTksNyBAQAogCQkJICovCiAJCQlpZiAoc3RhcnRfYWRkciAhPSBUQVNLX1VOTUFQUEVEX0JBU0UpIHsKIAkJCQlzdGFydF9hZGRyID0gYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwkJCQltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CiAJCQkJZ290byBmdWxsX3NlYXJjaDsKIAkJCX0KIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMTA2LDYgKzExMSw5IEBACiAJCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYWRkciArIGxlbjsKIAkJCXJldHVybiBhZGRyOwogCQl9CisJCWlmIChhZGRyICsgbW0tPmNhY2hlZF9ob2xlX3NpemUgPCB2bWEtPnZtX3N0YXJ0KQorCQkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gdm1hLT52bV9zdGFydCAtIGFkZHI7CisKIAkJYWRkciA9IHZtYS0+dm1fZW5kOwogCQlpZiAoIShmbGFncyAmIE1BUF9QUklWQVRFKSkKIAkJCWFkZHIgPSBDT0xPVVJfQUxJR04oYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2xpYi9kZWxheS5jIGIvYXJjaC9zaC9saWIvZGVsYXkuYwppbmRleCA1MGIzNjAzLi4zNTE3MTQ2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2xpYi9kZWxheS5jCisrKyBiL2FyY2gvc2gvbGliL2RlbGF5LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAlfX2FzbV9fKCJkbXVsdS5sCSUwLCAlMlxuXHQiCiAJCSJzdHMJbWFjaCwgJTAiCiAJCTogIj1yIiAoeGxvb3BzKQotCQk6ICIwIiAoeGxvb3BzKSwgInIiIChjcHVfZGF0YVtfc21wX3Byb2Nlc3Nvcl9pZCgpXS5sb29wc19wZXJfamlmZnkpCisJCTogIjAiICh4bG9vcHMpLCAiciIgKGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldLmxvb3BzX3Blcl9qaWZmeSkKIAkJOiAibWFjbCIsICJtYWNoIik7CiAJX19kZWxheSh4bG9vcHMgKiBIWik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3NoL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggMWY4OTdiYS4uOTViYjFhNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvc2gvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLXN0YXRpYyBwdGVfdCAqaHVnZV9wdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3B0ZV90ICpodWdlX3B0ZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXBnZF90ICpwZ2Q7CiAJcG1kX3QgKnBtZDsKQEAgLTM5LDcgKzM5LDcgQEAKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMgcHRlX3QgKmh1Z2VfcHRlX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQorcHRlX3QgKmh1Z2VfcHRlX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXBnZF90ICpwZ2Q7CiAJcG1kX3QgKnBtZDsKQEAgLTU2LDMwICs1NiwzNiBAQAogCiAjZGVmaW5lIG1rX3B0ZV9odWdlKGVudHJ5KSBkbyB7IHB0ZV92YWwoZW50cnkpIHw9IF9QQUdFX1NaSFVHRTsgfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgc2V0X2h1Z2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSwgcHRlX3QgKiBwYWdlX3RhYmxlLCBpbnQgd3JpdGVfYWNjZXNzKQordm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnkpCiB7Ci0JdW5zaWduZWQgbG9uZyBpOwotCXB0ZV90IGVudHJ5OwotCi0JYWRkX21tX2NvdW50ZXIobW0sIHJzcywgSFBBR0VfU0laRSAvIFBBR0VfU0laRSk7Ci0KLQlpZiAod3JpdGVfYWNjZXNzKQotCQllbnRyeSA9IHB0ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KG1rX3B0ZShwYWdlLAotCQkJCQkJICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkpOwotCWVsc2UKLQkJZW50cnkgPSBwdGVfd3Jwcm90ZWN0KG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCkpOwotCWVudHJ5ID0gcHRlX21reW91bmcoZW50cnkpOwotCW1rX3B0ZV9odWdlKGVudHJ5KTsKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBIVUdFVExCX1BBR0VfT1JERVIpOyBpKyspIHsKLQkJc2V0X3B0ZShwYWdlX3RhYmxlLCBlbnRyeSk7Ci0JCXBhZ2VfdGFibGUrKzsKLQorCQlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSk7CisJCXB0ZXArKzsKKwkJYWRkciArPSBQQUdFX1NJWkU7CiAJCXB0ZV92YWwoZW50cnkpICs9IFBBR0VfU0laRTsKIAl9CiB9CiAKK3B0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgICBwdGVfdCAqcHRlcCkKK3sKKwlwdGVfdCBlbnRyeTsKKwlpbnQgaTsKKworCWVudHJ5ID0gKnB0ZXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgSFVHRVRMQl9QQUdFX09SREVSKTsgaSsrKSB7CisJCXB0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCk7CisJCWFkZHIgKz0gUEFHRV9TSVpFOworCQlwdGVwKys7CisJfQorCisJcmV0dXJuIGVudHJ5OworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHByb3BlciBhbGlnbm1lbnQgb2YgaW5wdXQgYWRkciBhbmQgbGVuIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTkyLDc5ICs5OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYywKLQkJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlwdGVfdCAqc3JjX3B0ZSwgKmRzdF9wdGUsIGVudHJ5OwotCXN0cnVjdCBwYWdlICpwdGVwYWdlOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSB2bWEtPnZtX2VuZDsKLQlpbnQgaTsKLQotCXdoaWxlIChhZGRyIDwgZW5kKSB7Ci0JCWRzdF9wdGUgPSBodWdlX3B0ZV9hbGxvYyhkc3QsIGFkZHIpOwotCQlpZiAoIWRzdF9wdGUpCi0JCQlnb3RvIG5vbWVtOwotCQlzcmNfcHRlID0gaHVnZV9wdGVfb2Zmc2V0KHNyYywgYWRkcik7Ci0JCUJVR19PTighc3JjX3B0ZSB8fCBwdGVfbm9uZSgqc3JjX3B0ZSkpOwotCQllbnRyeSA9ICpzcmNfcHRlOwotCQlwdGVwYWdlID0gcHRlX3BhZ2UoZW50cnkpOwotCQlnZXRfcGFnZShwdGVwYWdlKTsKLQkJZm9yIChpID0gMDsgaSA8ICgxIDw8IEhVR0VUTEJfUEFHRV9PUkRFUik7IGkrKykgewotCQkJc2V0X3B0ZShkc3RfcHRlLCBlbnRyeSk7Ci0JCQlwdGVfdmFsKGVudHJ5KSArPSBQQUdFX1NJWkU7Ci0JCQlkc3RfcHRlKys7Ci0JCX0KLQkJYWRkX21tX2NvdW50ZXIoZHN0LCByc3MsIEhQQUdFX1NJWkUgLyBQQUdFX1NJWkUpOwotCQlhZGRyICs9IEhQQUdFX1NJWkU7Ci0JfQotCXJldHVybiAwOwotCi1ub21lbToKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotaW50IGZvbGxvd19odWdldGxiX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcywKLQkJCXVuc2lnbmVkIGxvbmcgKnBvc2l0aW9uLCBpbnQgKmxlbmd0aCwgaW50IGkpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWRkciA9ICpwb3NpdGlvbjsKLQlpbnQgcmVtYWluZGVyID0gKmxlbmd0aDsKLQotCVdBUk5fT04oIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTsKLQotCXdoaWxlICh2YWRkciA8IHZtYS0+dm1fZW5kICYmIHJlbWFpbmRlcikgewotCQlpZiAocGFnZXMpIHsKLQkJCXB0ZV90ICpwdGU7Ci0JCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQkJcHRlID0gaHVnZV9wdGVfb2Zmc2V0KG1tLCB2YWRkcik7Ci0KLQkJCS8qIGh1Z2V0bGIgc2hvdWxkIGJlIGxvY2tlZCwgYW5kIGhlbmNlLCBwcmVmYXVsdGVkICovCi0JCQlCVUdfT04oIXB0ZSB8fCBwdGVfbm9uZSgqcHRlKSk7Ci0KLQkJCXBhZ2UgPSBwdGVfcGFnZSgqcHRlKTsKLQotCQkJV0FSTl9PTighUGFnZUNvbXBvdW5kKHBhZ2UpKTsKLQotCQkJZ2V0X3BhZ2UocGFnZSk7Ci0JCQlwYWdlc1tpXSA9IHBhZ2U7Ci0JCX0KLQotCQlpZiAodm1hcykKLQkJCXZtYXNbaV0gPSB2bWE7Ci0KLQkJdmFkZHIgKz0gUEFHRV9TSVpFOwotCQktLXJlbWFpbmRlcjsKLQkJKytpOwotCX0KLQotCSpsZW5ndGggPSByZW1haW5kZXI7Ci0JKnBvc2l0aW9uID0gdmFkZHI7Ci0KLQlyZXR1cm4gaTsKLX0KLQogc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX2FkZHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0ZSkKIHsKQEAgLTE4MSw4NCArMTE0LDMgQEAKIHsKIAlyZXR1cm4gTlVMTDsKIH0KLQotdm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKLQlwdGVfdCAqcHRlOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBpOwotCi0JQlVHX09OKHN0YXJ0ICYgKEhQQUdFX1NJWkUgLSAxKSk7Ci0JQlVHX09OKGVuZCAmIChIUEFHRV9TSVpFIC0gMSkpOwotCi0JZm9yIChhZGRyZXNzID0gc3RhcnQ7IGFkZHJlc3MgPCBlbmQ7IGFkZHJlc3MgKz0gSFBBR0VfU0laRSkgewotCQlwdGUgPSBodWdlX3B0ZV9vZmZzZXQobW0sIGFkZHJlc3MpOwotCQlCVUdfT04oIXB0ZSk7Ci0JCWlmIChwdGVfbm9uZSgqcHRlKSkKLQkJCWNvbnRpbnVlOwotCQlwYWdlID0gcHRlX3BhZ2UoKnB0ZSk7Ci0JCXB1dF9wYWdlKHBhZ2UpOwotCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgSFVHRVRMQl9QQUdFX09SREVSKTsgaSsrKSB7Ci0JCQlwdGVfY2xlYXIobW0sIGFkZHJlc3MrKGkqUEFHRV9TSVpFKSwgcHRlKTsKLQkJCXB0ZSsrOwotCQl9Ci0JfQotCWFkZF9tbV9jb3VudGVyKG1tLCByc3MsIC0oKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKSk7Ci0JZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7Ci19Ci0KLWludCBodWdldGxiX3ByZWZhdWx0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQlpbnQgcmV0ID0gMDsKLQotCUJVR19PTih2bWEtPnZtX3N0YXJ0ICYgfkhQQUdFX01BU0spOwotCUJVR19PTih2bWEtPnZtX2VuZCAmIH5IUEFHRV9NQVNLKTsKLQotCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JZm9yIChhZGRyID0gdm1hLT52bV9zdGFydDsgYWRkciA8IHZtYS0+dm1fZW5kOyBhZGRyICs9IEhQQUdFX1NJWkUpIHsKLQkJdW5zaWduZWQgbG9uZyBpZHg7Ci0JCXB0ZV90ICpwdGUgPSBodWdlX3B0ZV9hbGxvYyhtbSwgYWRkcik7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCWlmICghcHRlKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKCFwdGVfbm9uZSgqcHRlKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlkeCA9ICgoYWRkciAtIHZtYS0+dm1fc3RhcnQpID4+IEhQQUdFX1NISUZUKQotCQkJKyAodm1hLT52bV9wZ29mZiA+PiAoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKSk7Ci0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGlkeCk7Ci0JCWlmICghcGFnZSkgewotCQkJLyogY2hhcmdlIHRoZSBmcyBxdW90YSBmaXJzdCAqLwotCQkJaWYgKGh1Z2V0bGJfZ2V0X3F1b3RhKG1hcHBpbmcpKSB7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXBhZ2UgPSBhbGxvY19odWdlX3BhZ2UoKTsKLQkJCWlmICghcGFnZSkgewotCQkJCWh1Z2V0bGJfcHV0X3F1b3RhKG1hcHBpbmcpOwotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBtYXBwaW5nLCBpZHgsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCEgcmV0KSB7Ci0JCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQl9IGVsc2UgewotCQkJCWh1Z2V0bGJfcHV0X3F1b3RhKG1hcHBpbmcpOwotCQkJCWZyZWVfaHVnZV9wYWdlKHBhZ2UpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JCXNldF9odWdlX3B0ZShtbSwgdm1hLCBwYWdlLCBwdGUsIHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSk7Ci0JfQotb3V0OgotCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3NoNjQvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCBiY2FkMmFlLi5kY2Q5YzhhIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3NoNjQvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLXN0YXRpYyBwdGVfdCAqaHVnZV9wdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3B0ZV90ICpodWdlX3B0ZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXBnZF90ICpwZ2Q7CiAJcG1kX3QgKnBtZDsKQEAgLTM5LDcgKzM5LDcgQEAKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMgcHRlX3QgKmh1Z2VfcHRlX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQorcHRlX3QgKmh1Z2VfcHRlX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXBnZF90ICpwZ2Q7CiAJcG1kX3QgKnBtZDsKQEAgLTgwLDYgKzgwLDIwIEBACiAJfQogfQogCitwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihwdGVfdCAqcHRlcCkKK3sKKwlwdGVfdCBlbnRyeTsKKworCWVudHJ5ID0gKnB0ZXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgSFVHRVRMQl9QQUdFX09SREVSKTsgaSsrKSB7CisJCXB0ZV9jbGVhcihwdGUpOworCQlwdGUrKzsKKwl9CisKKwlyZXR1cm4gZW50cnk7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgcHJvcGVyIGFsaWdubWVudCBvZiBpbnB1dCBhZGRyIGFuZCBsZW4gcGFyYW1ldGVycy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pbml0LmMgYi9hcmNoL3NwYXJjL21tL2luaXQuYwppbmRleCBhMmRlYTY5Li5lYzJlMDUwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2luaXQuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXQuYwpAQCAtMzg0LDcgKzM4NCw2IEBACiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UodG1wKTsKIAogCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQkJc2V0X2JpdChQR19oaWdobWVtLCAmcGFnZS0+ZmxhZ3MpOwogCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJCXRvdGFsaGlnaF9wYWdlcysrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMKaW5kZXggMDA3N2YwMi4uNWY4YzgyMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jCkBAIC04NCw2ICs4NCwxMCBAQAogCQkJcmV0dXJuIGFkZHI7CiAJfQogCisJaWYgKGxlbiA8PSBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSkgeworCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOworCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gVEFTS19VTk1BUFBFRF9CQVNFOworCX0KIAlzdGFydF9hZGRyID0gYWRkciA9IG1tLT5mcmVlX2FyZWFfY2FjaGU7CiAKIAl0YXNrX3NpemUgLT0gbGVuOwpAQCAtMTAzLDYgKzEwNyw3IEBACiAJCWlmICh0YXNrX3NpemUgPCBhZGRyKSB7CiAJCQlpZiAoc3RhcnRfYWRkciAhPSBUQVNLX1VOTUFQUEVEX0JBU0UpIHsKIAkJCQlzdGFydF9hZGRyID0gYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwkJCQltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CiAJCQkJZ290byBmdWxsX3NlYXJjaDsKIAkJCX0KIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMTE0LDYgKzExOSw5IEBACiAJCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYWRkciArIGxlbjsKIAkJCXJldHVybiBhZGRyOwogCQl9CisJCWlmIChhZGRyICsgbW0tPmNhY2hlZF9ob2xlX3NpemUgPCB2bWEtPnZtX3N0YXJ0KQorCQkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gdm1hLT52bV9zdGFydCAtIGFkZHI7CisKIAkJYWRkciA9IHZtYS0+dm1fZW5kOwogCQlpZiAoZG9fY29sb3JfYWxpZ24pCiAJCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvZGVsYXkuYyBiL2FyY2gvc3BhcmM2NC9saWIvZGVsYXkuYwppbmRleCBmNmI0Yzc4Li5lODgwODcyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9kZWxheS5jCkBAIC0zMSw3ICszMSw3IEBACiB7CiAJbiAqPSA0OwogCi0JbiAqPSAoY3B1X2RhdGEoX3NtcF9wcm9jZXNzb3JfaWQoKSkudWRlbGF5X3ZhbCAqIChIWi80KSk7CisJbiAqPSAoY3B1X2RhdGEocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkudWRlbGF5X3ZhbCAqIChIWi80KSk7CiAJbiA+Pj0gMzI7CiAKIAlfX2RlbGF5KG4gKyAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggNWExZjgzMS4uNjI1Y2JiMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCi1zdGF0aWMgcHRlX3QgKmh1Z2VfcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCitwdGVfdCAqaHVnZV9wdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGdkOwogCXB1ZF90ICpwdWQ7CkBAIC00MSw3ICs0MSw3IEBACiAJcmV0dXJuIHB0ZTsKIH0KIAotc3RhdGljIHB0ZV90ICpodWdlX3B0ZV9vZmZzZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3B0ZV90ICpodWdlX3B0ZV9vZmZzZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGdkOwogCXB1ZF90ICpwdWQ7CkBAIC02MiwzMiArNjIsMzYgQEAKIAogI2RlZmluZSBta19wdGVfaHVnZShlbnRyeSkgZG8geyBwdGVfdmFsKGVudHJ5KSB8PSBfUEFHRV9TWkhVR0U7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIHNldF9odWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJIHN0cnVjdCBwYWdlICpwYWdlLCBwdGVfdCAqIHBhZ2VfdGFibGUsIGludCB3cml0ZV9hY2Nlc3MpCit2b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSkKIHsKLQl1bnNpZ25lZCBsb25nIGk7Ci0JcHRlX3QgZW50cnk7Ci0KLQlhZGRfbW1fY291bnRlcihtbSwgcnNzLCBIUEFHRV9TSVpFIC8gUEFHRV9TSVpFKTsKLQotCWlmICh3cml0ZV9hY2Nlc3MpCi0JCWVudHJ5ID0gcHRlX21rd3JpdGUocHRlX21rZGlydHkobWtfcHRlKHBhZ2UsCi0JCQkJCQkgICAgICAgdm1hLT52bV9wYWdlX3Byb3QpKSk7Ci0JZWxzZQotCQllbnRyeSA9IHB0ZV93cnByb3RlY3QobWtfcHRlKHBhZ2UsIHZtYS0+dm1fcGFnZV9wcm90KSk7Ci0JZW50cnkgPSBwdGVfbWt5b3VuZyhlbnRyeSk7Ci0JbWtfcHRlX2h1Z2UoZW50cnkpOworCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8ICgxIDw8IEhVR0VUTEJfUEFHRV9PUkRFUik7IGkrKykgewotCQlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwYWdlX3RhYmxlLCBlbnRyeSk7Ci0JCXBhZ2VfdGFibGUrKzsKKwkJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgZW50cnkpOworCQlwdGVwKys7CiAJCWFkZHIgKz0gUEFHRV9TSVpFOwotCiAJCXB0ZV92YWwoZW50cnkpICs9IFBBR0VfU0laRTsKIAl9CiB9CiAKK3B0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgICBwdGVfdCAqcHRlcCkKK3sKKwlwdGVfdCBlbnRyeTsKKwlpbnQgaTsKKworCWVudHJ5ID0gKnB0ZXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgSFVHRVRMQl9QQUdFX09SREVSKTsgaSsrKSB7CisJCXB0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCk7CisJCWFkZHIgKz0gUEFHRV9TSVpFOworCQlwdGVwKys7CisJfQorCisJcmV0dXJuIGVudHJ5OworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHByb3BlciBhbGlnbm1lbnQgb2YgaW5wdXQgYWRkciBhbmQgbGVuIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTEwMCw3OSArMTA0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLAotCQkJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXB0ZV90ICpzcmNfcHRlLCAqZHN0X3B0ZSwgZW50cnk7Ci0Jc3RydWN0IHBhZ2UgKnB0ZXBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gdm1hLT52bV9zdGFydDsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IHZtYS0+dm1fZW5kOwotCWludCBpOwotCi0Jd2hpbGUgKGFkZHIgPCBlbmQpIHsKLQkJZHN0X3B0ZSA9IGh1Z2VfcHRlX2FsbG9jKGRzdCwgYWRkcik7Ci0JCWlmICghZHN0X3B0ZSkKLQkJCWdvdG8gbm9tZW07Ci0JCXNyY19wdGUgPSBodWdlX3B0ZV9vZmZzZXQoc3JjLCBhZGRyKTsKLQkJQlVHX09OKCFzcmNfcHRlIHx8IHB0ZV9ub25lKCpzcmNfcHRlKSk7Ci0JCWVudHJ5ID0gKnNyY19wdGU7Ci0JCXB0ZXBhZ2UgPSBwdGVfcGFnZShlbnRyeSk7Ci0JCWdldF9wYWdlKHB0ZXBhZ2UpOwotCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgSFVHRVRMQl9QQUdFX09SREVSKTsgaSsrKSB7Ci0JCQlzZXRfcHRlX2F0KGRzdCwgYWRkciwgZHN0X3B0ZSwgZW50cnkpOwotCQkJcHRlX3ZhbChlbnRyeSkgKz0gUEFHRV9TSVpFOwotCQkJZHN0X3B0ZSsrOwotCQkJYWRkciArPSBQQUdFX1NJWkU7Ci0JCX0KLQkJYWRkX21tX2NvdW50ZXIoZHN0LCByc3MsIEhQQUdFX1NJWkUgLyBQQUdFX1NJWkUpOwotCX0KLQlyZXR1cm4gMDsKLQotbm9tZW06Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLWludCBmb2xsb3dfaHVnZXRsYl9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMsCi0JCQl1bnNpZ25lZCBsb25nICpwb3NpdGlvbiwgaW50ICpsZW5ndGgsIGludCBpKQotewotCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAqcG9zaXRpb247Ci0JaW50IHJlbWFpbmRlciA9ICpsZW5ndGg7Ci0KLQlXQVJOX09OKCFpc192bV9odWdldGxiX3BhZ2Uodm1hKSk7Ci0KLQl3aGlsZSAodmFkZHIgPCB2bWEtPnZtX2VuZCAmJiByZW1haW5kZXIpIHsKLQkJaWYgKHBhZ2VzKSB7Ci0JCQlwdGVfdCAqcHRlOwotCQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkJCXB0ZSA9IGh1Z2VfcHRlX29mZnNldChtbSwgdmFkZHIpOwotCi0JCQkvKiBodWdldGxiIHNob3VsZCBiZSBsb2NrZWQsIGFuZCBoZW5jZSwgcHJlZmF1bHRlZCAqLwotCQkJQlVHX09OKCFwdGUgfHwgcHRlX25vbmUoKnB0ZSkpOwotCi0JCQlwYWdlID0gcHRlX3BhZ2UoKnB0ZSk7Ci0KLQkJCVdBUk5fT04oIVBhZ2VDb21wb3VuZChwYWdlKSk7Ci0KLQkJCWdldF9wYWdlKHBhZ2UpOwotCQkJcGFnZXNbaV0gPSBwYWdlOwotCQl9Ci0KLQkJaWYgKHZtYXMpCi0JCQl2bWFzW2ldID0gdm1hOwotCi0JCXZhZGRyICs9IFBBR0VfU0laRTsKLQkJLS1yZW1haW5kZXI7Ci0JCSsraTsKLQl9Ci0KLQkqbGVuZ3RoID0gcmVtYWluZGVyOwotCSpwb3NpdGlvbiA9IHZhZGRyOwotCi0JcmV0dXJuIGk7Ci19Ci0KIHN0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGUpCiB7CkBAIC0xOTAsMzQgKzEyMSw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Ci0JcHRlX3QgKnB0ZTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgaTsKLQotCUJVR19PTihzdGFydCAmIChIUEFHRV9TSVpFIC0gMSkpOwotCUJVR19PTihlbmQgJiAoSFBBR0VfU0laRSAtIDEpKTsKLQotCWZvciAoYWRkcmVzcyA9IHN0YXJ0OyBhZGRyZXNzIDwgZW5kOyBhZGRyZXNzICs9IEhQQUdFX1NJWkUpIHsKLQkJcHRlID0gaHVnZV9wdGVfb2Zmc2V0KG1tLCBhZGRyZXNzKTsKLQkJQlVHX09OKCFwdGUpOwotCQlpZiAocHRlX25vbmUoKnB0ZSkpCi0JCQljb250aW51ZTsKLQkJcGFnZSA9IHB0ZV9wYWdlKCpwdGUpOwotCQlwdXRfcGFnZShwYWdlKTsKLQkJZm9yIChpID0gMDsgaSA8ICgxIDw8IEhVR0VUTEJfUEFHRV9PUkRFUik7IGkrKykgewotCQkJcHRlX2NsZWFyKG1tLCBhZGRyZXNzKyhpKlBBR0VfU0laRSksIHB0ZSk7Ci0JCQlwdGUrKzsKLQkJfQotCX0KLQlhZGRfbW1fY291bnRlcihtbSwgcnNzLCAtKChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCkpOwotCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOwotfQotCiBzdGF0aWMgdm9pZCBjb250ZXh0X3JlbG9hZCh2b2lkICpfX2RhdGEpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBfX2RhdGE7CkBAIC0yMjYsMTIgKzEyOSw4IEBACiAJCWxvYWRfc2Vjb25kYXJ5X2NvbnRleHQobW0pOwogfQogCi1pbnQgaHVnZXRsYl9wcmVmYXVsdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit2b2lkIGh1Z2V0bGJfcHJlZmF1bHRfYXJjaF9ob29rKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCWludCByZXQgPSAwOwotCiAJLyogT24gVWx0cmFTUEFSQy1JSUkrIGFuZCBsYXRlciwgY29uZmlndXJlIHRoZSBzZWNvbmQgaGFsZiBvZgogCSAqIHRoZSBEYXRhLVRMQiBmb3IgaHVnZSBwYWdlcy4KIAkgKi8KQEAgLTI2MSw1MCArMTYwLDQgQEAKIAkJfQogCQlzcGluX3VubG9jaygmY3R4X2FsbG9jX2xvY2spOwogCX0KLQotCUJVR19PTih2bWEtPnZtX3N0YXJ0ICYgfkhQQUdFX01BU0spOwotCUJVR19PTih2bWEtPnZtX2VuZCAmIH5IUEFHRV9NQVNLKTsKLQotCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JZm9yIChhZGRyID0gdm1hLT52bV9zdGFydDsgYWRkciA8IHZtYS0+dm1fZW5kOyBhZGRyICs9IEhQQUdFX1NJWkUpIHsKLQkJdW5zaWduZWQgbG9uZyBpZHg7Ci0JCXB0ZV90ICpwdGUgPSBodWdlX3B0ZV9hbGxvYyhtbSwgYWRkcik7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCWlmICghcHRlKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKCFwdGVfbm9uZSgqcHRlKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlkeCA9ICgoYWRkciAtIHZtYS0+dm1fc3RhcnQpID4+IEhQQUdFX1NISUZUKQotCQkJKyAodm1hLT52bV9wZ29mZiA+PiAoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKSk7Ci0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGlkeCk7Ci0JCWlmICghcGFnZSkgewotCQkJLyogY2hhcmdlIHRoZSBmcyBxdW90YSBmaXJzdCAqLwotCQkJaWYgKGh1Z2V0bGJfZ2V0X3F1b3RhKG1hcHBpbmcpKSB7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXBhZ2UgPSBhbGxvY19odWdlX3BhZ2UoKTsKLQkJCWlmICghcGFnZSkgewotCQkJCWh1Z2V0bGJfcHV0X3F1b3RhKG1hcHBpbmcpOwotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBtYXBwaW5nLCBpZHgsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCEgcmV0KSB7Ci0JCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQl9IGVsc2UgewotCQkJCWh1Z2V0bGJfcHV0X3F1b3RhKG1hcHBpbmcpOwotCQkJCWZyZWVfaHVnZV9wYWdlKHBhZ2UpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JCXNldF9odWdlX3B0ZShtbSwgdm1hLCBhZGRyLCBwYWdlLCBwdGUsIHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSk7Ci0JfQotb3V0OgotCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKLQlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja2V0LmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2NrZXQuYwppbmRleCBlYzhlMDc0Li4wNjc0MDU4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2NrZXQuYworKysgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2NrZXQuYwpAQCAtMzE3LDggKzMxNywxMCBAQAogCQl1bnNpZ25lZCBsb25nICprY21zZzsKIAkJY29tcGF0X3NpemVfdCBjbWxlbjsKIAotCQlpZihrZXJuX21zZy5tc2dfY29udHJvbGxlbiA+IHNpemVvZihjdGwpICYmCi0JCSAgIGtlcm5fbXNnLm1zZ19jb250cm9sbGVuIDw9IDI1NikgeworCQlpZiAoa2Vybl9tc2cubXNnX2NvbnRyb2xsZW4gPD0gc2l6ZW9mKGNvbXBhdF9zaXplX3QpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYoa2Vybl9tc2cubXNnX2NvbnRyb2xsZW4gPiBzaXplb2YoY3RsKSkgewogCQkJZXJyID0gLUVOT0JVRlM7CiAJCQljdGxfYnVmID0ga21hbGxvYyhrZXJuX21zZy5tc2dfY29udHJvbGxlbiwgR0ZQX0tFUk5FTCk7CiAJCQlpZighY3RsX2J1ZikKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZwppbmRleCBjNTI5MjE4Li5iOGU5NTJjIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcKKysrIGIvYXJjaC91bS9LY29uZmlnCkBAIC0zNSw2ICszNSwxMSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorIyBVc2VkIGluIGtlcm5lbC9pcnEvbWFuYWdlLmMgYW5kIGluY2x1ZGUvbGludXgvaXJxLmgKK2NvbmZpZyBJUlFfUkVMRUFTRV9NRVRIT0QKKwlib29sCisJZGVmYXVsdCB5CisKIG1lbnUgIlVNTC1zcGVjaWZpYyBvcHRpb25zIgogCiBjb25maWcgTU9ERV9UVApkaWZmIC0tZ2l0IGEvYXJjaC91bS9NYWtlZmlsZSBiL2FyY2gvdW0vTWFrZWZpbGUKaW5kZXggZjJhMGM0MC4uM2YwNzM5MCAxMDA2NDQKLS0tIGEvYXJjaC91bS9NYWtlZmlsZQorKysgYi9hcmNoL3VtL01ha2VmaWxlCkBAIC0xMjIsNyArMTIyLDcgQEAKIENQUEZMQUdTX3ZtbGludXgubGRzID0gJChzaGVsbCBlY2hvIC1VJChTVUJBUkNIKSBcCiAJLURTVEFSVD0kKFNUQVJUKSAtREVMRl9BUkNIPSQoRUxGX0FSQ0gpIFwKIAktREVMRl9GT1JNQVQ9XCIkKEVMRl9GT1JNQVQpXCIgJChDUFBfTU9ERS15KSBcCi0JLURLRVJORUxfU1RBQ0tfU0laRT0kKFNUQUNLX1NJWkUpKQorCS1ES0VSTkVMX1NUQUNLX1NJWkU9JChTVEFDS19TSVpFKSAtRFNVQkFSQ0g9JChTVUJBUkNIKSkKIAogI1RoZSB3cmFwcGVycyB3aWxsIHNlbGVjdCB3aGV0aGVyIHVzaW5nICJtYWxsb2MiIG9yIHRoZSBrZXJuZWwgYWxsb2NhdG9yLgogTElOS19XUkFQUyA9IC1XbCwtLXdyYXAsbWFsbG9jIC1XbCwtLXdyYXAsZnJlZSAtV2wsLS13cmFwLGNhbGxvYwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKaW5kZXggMDI1ZDNiZS4uMGY1OTczNiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCkBAIC00MDYsMTQgKzQwNiwxMiBAQAogCWlmKGxpbmUtPmRyaXZlci0+cmVhZF9pcnEgPT0gY3VycmVudF9pcnEpCiAJCWZyZWVfaXJxX2xhdGVyKGxpbmUtPmRyaXZlci0+cmVhZF9pcnEsIHR0eSk7CiAJZWxzZSB7Ci0JCWZyZWVfaXJxX2J5X2lycV9hbmRfZGV2KGxpbmUtPmRyaXZlci0+cmVhZF9pcnEsIHR0eSk7CiAJCWZyZWVfaXJxKGxpbmUtPmRyaXZlci0+cmVhZF9pcnEsIHR0eSk7CiAJfQogCiAJaWYobGluZS0+ZHJpdmVyLT53cml0ZV9pcnEgPT0gY3VycmVudF9pcnEpCiAJCWZyZWVfaXJxX2xhdGVyKGxpbmUtPmRyaXZlci0+d3JpdGVfaXJxLCB0dHkpOwogCWVsc2UgewotCQlmcmVlX2lycV9ieV9pcnFfYW5kX2RldihsaW5lLT5kcml2ZXItPndyaXRlX2lycSwgdHR5KTsKIAkJZnJlZV9pcnEobGluZS0+ZHJpdmVyLT53cml0ZV9pcnEsIHR0eSk7CiAJfQogCkBAIC03NTgsNyArNzU2LDYgQEAKICAgICAgICAgaWYod2luY2gtPnBpZCAhPSAtMSkKICAgICAgICAgICAgICAgICBvc19raWxsX3Byb2Nlc3Mod2luY2gtPnBpZCwgMSk7CiAKLSAgICAgICAgZnJlZV9pcnFfYnlfaXJxX2FuZF9kZXYoV0lOQ0hfSVJRLCB3aW5jaCk7CiAgICAgICAgIGZyZWVfaXJxKFdJTkNIX0lSUSwgd2luY2gpOwogICAgICAgICBsaXN0X2RlbCgmd2luY2gtPmxpc3QpOwogICAgICAgICBrZnJlZSh3aW5jaCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCmluZGV4IDRlZWFmODguLjUzODhhNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCkBAIC0xNDYsNyArMTQ2LDYgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJc3Bpbl9sb2NrKCZscC0+bG9jayk7CiAKLQlmcmVlX2lycV9ieV9pcnFfYW5kX2RldihkZXYtPmlycSwgZGV2KTsKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAlpZihscC0+Y2xvc2UgIT0gTlVMTCkKIAkJKCpscC0+Y2xvc2UpKGxwLT5mZCwgJmxwLT51c2VyKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9wb3J0X2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9wb3J0X2tlcm4uYwppbmRleCBiNWVlMDc0Li5jNDFlZmQyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3BvcnRfa2Vybi5jCkBAIC0yNTcsNyArMjU3LDYgQEAKIAkJICogY29ubmVjdGlvbi4gIFRoZW4gd2UgbG9vcCBoZXJlIHRocm93aW5nIG91dCBmYWlsZWQgCiAJCSAqIGNvbm5lY3Rpb25zIHVudGlsIGEgZ29vZCBvbmUgaXMgZm91bmQuCiAJCSAqLwotCQlmcmVlX2lycV9ieV9pcnFfYW5kX2RldihURUxORVREX0lSUSwgY29ubik7CiAJCWZyZWVfaXJxKFRFTE5FVERfSVJRLCBjb25uKTsKIAogCQlpZihjb25uLT5mZCA+PSAwKSBicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy94dGVybV9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMveHRlcm1fa2Vybi5jCmluZGV4IGE0ZmRmMzUuLmQyNjlhODAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy94dGVybV9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3h0ZXJtX2tlcm4uYwpAQCAtNjksNyArNjksNiBAQAogCSAqIGlzbid0IHNldCkgdGhpcyB3aWxsIGhhbmcuLi4gKi8KIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkYXRhLT5yZWFkeSk7CiAKLQlmcmVlX2lycV9ieV9pcnFfYW5kX2RldihYVEVSTV9JUlEsIGRhdGEpOwogCWZyZWVfaXJxKFhURVJNX0lSUSwgZGF0YSk7CiAKIAlyZXQgPSBkYXRhLT5uZXdfZmQ7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9pcnEuYyBiL2FyY2gvdW0va2VybmVsL2lycS5jCmluZGV4IGQ0NGZiNTIuLjlmMTgwNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvdW0va2VybmVsL2lycS5jCkBAIC0xMjQsMTQgKzEyNCwxNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9zcGlubG9jaywgZmxhZ3MpOwogfQogCi0vKiAgcHJlc2VudGx5IGh3X2ludGVycnVwdF90eXBlIG11c3QgZGVmaW5lIChzdGFydHVwIHx8IGVuYWJsZSkgJiYKLSAqICBkaXNhYmxlICYmIGVuZCAqLworLyogaHdfaW50ZXJydXB0X3R5cGUgbXVzdCBkZWZpbmUgKHN0YXJ0dXAgfHwgZW5hYmxlKSAmJgorICogKHNodXRkb3duIHx8IGRpc2FibGUpICYmIGVuZCAqLwogc3RhdGljIHZvaWQgZHVtbXkodW5zaWduZWQgaW50IGlycSkKIHsKIH0KIAotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBTSUdJT19pcnFfdHlwZSA9IHsKKy8qIFRoaXMgaXMgdXNlZCBmb3IgZXZlcnl0aGluZyBlbHNlIHRoYW4gdGhlIHRpbWVyLiAqLworc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBub3JtYWxfaXJxX3R5cGUgPSB7CiAJLnR5cGVuYW1lID0gIlNJR0lPIiwKKwkucmVsZWFzZSA9IGZyZWVfaXJxX2J5X2lycV9hbmRfZGV2LAogCS5kaXNhYmxlID0gZHVtbXksCiAJLmVuYWJsZSA9IGR1bW15LAogCS5hY2sgPSBkdW1teSwKQEAgLTE0MCw2ICsxNDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIFNJR1ZUQUxSTV9pcnFfdHlwZSA9IHsKIAkudHlwZW5hbWUgPSAiU0lHVlRBTFJNIiwKKwkucmVsZWFzZSA9IGZyZWVfaXJxX2J5X2lycV9hbmRfZGV2LAogCS5zaHV0ZG93biA9IGR1bW15LCAvKiBuZXZlciBjYWxsZWQgKi8KIAkuZGlzYWJsZSA9IGR1bW15LAogCS5lbmFibGUgPSBkdW1teSwKQEAgLTE2MCw3ICsxNjMsNyBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IE5VTEw7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZTSUdJT19pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZub3JtYWxfaXJxX3R5cGU7CiAJCWVuYWJsZV9pcnEoaSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvaXJxX3VzZXIuYyBiL2FyY2gvdW0va2VybmVsL2lycV91c2VyLmMKaW5kZXggYjMwNzRjYi4uYzNjY2FmMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvaXJxX3VzZXIuYworKysgYi9hcmNoL3VtL2tlcm5lbC9pcnFfdXNlci5jCkBAIC04NSw4ICs4NSw2IEBACiAJCQkJbmV4dCA9IGlycV9mZC0+bmV4dDsKIAkJCQlpZihpcnFfZmQtPmZyZWVkKXsKIAkJCQkJZnJlZV9pcnEoaXJxX2ZkLT5pcnEsIGlycV9mZC0+aWQpOwotCQkJCQlmcmVlX2lycV9ieV9pcnFfYW5kX2RldihpcnFfZmQtPmlycSwKLQkJCQkJCQkJaXJxX2ZkLT5pZCk7CiAJCQkJfQogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9tZW0uYyBiL2FyY2gvdW0va2VybmVsL21lbS5jCmluZGV4IGMyMjgyNWYuLjU1OTdiZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL21lbS5jCisrKyBiL2FyY2gvdW0va2VybmVsL21lbS5jCkBAIC01Myw3ICs1Myw2IEBACiAJZm9yKGkgPSAwOyBpIDwgaGlnaG1lbV9sZW4gPj4gUEFHRV9TSElGVDsgaSsrKXsKIAkJcGFnZSA9ICZtZW1fbWFwW2hpZ2htZW1fcGZuICsgaV07CiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfYml0KFBHX2hpZ2htZW0sICZwYWdlLT5mbGFncyk7CiAJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwogCQlfX2ZyZWVfcGFnZShwYWdlKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90dC9NYWtlZmlsZSBiL2FyY2gvdW0va2VybmVsL3R0L01ha2VmaWxlCmluZGV4IGMzZmFlYTIuLjNmZDI1NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3R0L01ha2VmaWxlCisrKyBiL2FyY2gvdW0va2VybmVsL3R0L01ha2VmaWxlCkBAIC0zLDEwICszLDYgQEAKICMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogIwogCi1leHRyYS15IDo9IHVubWFwX2Zpbi5vCi10YXJnZXRzIDo9IHVubWFwLm8KLWNsZWFuLWZpbGVzIDo9IHVubWFwX3RtcC5vCi0KIG9iai15ID0gZXhlY19rZXJuLm8gZXhlY191c2VyLm8gZ2RiLm8ga3N5bXMubyBtZW0ubyBtZW1fdXNlci5vIHByb2Nlc3Nfa2Vybi5vIFwKIAlzeXNjYWxsX2tlcm4ubyBzeXNjYWxsX3VzZXIubyB0aW1lLm8gdGxiLm8gdHJhY2VyLm8gdHJhcF91c2VyLm8gXAogCXVhY2Nlc3MubyB1YWNjZXNzX3VzZXIubwpAQCAtMTYsMTQgKzEyLDMgQEAKIFVTRVJfT0JKUyA6PSBnZGIubyB0aW1lLm8gdHJhY2VyLm8KIAogaW5jbHVkZSBhcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKLQotVU5NQVBfQ0ZMQUdTIDo9ICQocGF0c3Vic3QgLXBnIC1EUFJPRklMSU5HLCwkKFVTRVJfQ0ZMQUdTKSkKLVVOTUFQX0NGTEFHUyA6PSAkKHBhdHN1YnN0IC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSwsJChVTk1BUF9DRkxBR1MpKQotCi0jWFhYOiBwYXJ0aWFsbHkgY29waWVkIGZyb20gYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCi0kKG9iaikvdW5tYXAubzogY19mbGFncyA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKFVOTUFQX0NGTEFHUykKLQotJChvYmopL3VubWFwX2Zpbi5vIDogJChvYmopL3VubWFwLm8KLQkkKExEKSAtciAtbyAkKG9iaikvdW5tYXBfdG1wLm8gJDwgJChzaGVsbCAkKENDKSAtcHJpbnQtZmlsZS1uYW1lPWxpYmMuYSkKLQkkKE9CSkNPUFkpICQob2JqKS91bm1hcF90bXAubyAkQCAtRyBzd2l0Y2hlcm9vCi0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3R0L3VubWFwLmMgYi9hcmNoL3VtL2tlcm5lbC90dC91bm1hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjdhZWNkLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0va2VybmVsL3R0L3VubWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMCBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLWludCBzd2l0Y2hlcm9vKGludCBmZCwgaW50IHByb3QsIHZvaWQgKmZyb20sIHZvaWQgKnRvLCBpbnQgc2l6ZSkKLXsKLQlpZihtdW5tYXAodG8sIHNpemUpIDwgMCl7Ci0JCXJldHVybigtMSk7Ci0JfQotCWlmKG1tYXAodG8sIHNpemUsIHByb3QsCU1BUF9TSEFSRUQgfCBNQVBfRklYRUQsIGZkLCAwKSAhPSB0byl7Ci0JCXJldHVybigtMSk7Ci0JfQotCWlmKG11bm1hcChmcm9tLCBzaXplKSA8IDApewotCQlyZXR1cm4oLTEpOwotCX0KLQlyZXR1cm4oMCk7Ci19Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMgYi9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMKaW5kZXggZGQ1MzU1NS4uNjFkZmQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TCisrKyBiL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUwpAQCAtMTQsMTkgKzE0LDEwIEBACiAgIC8qIFVzZWQgaW4gYXJjaC91bS9rZXJuZWwvbWVtLmMuIEFueSBtZW1vcnkgYmV0d2VlbiBTVEFSVCBhbmQgX19iaW5hcnlfc3RhcnQKICAgICogaXMgcmVtYXBwZWQuKi8KICAgX19iaW5hcnlfc3RhcnQgPSAuOwotI2lmZGVmIE1PREVfVFQKLSAgLnRocmVhZF9wcml2YXRlIDogewotICAgIF9fc3RhcnRfdGhyZWFkX3ByaXZhdGUgPSAuOwotICAgIGVycm5vID0gLjsKLSAgICAuICs9IDQ7Ci0gICAgYXJjaC91bS9rZXJuZWwvdHQvdW5tYXBfZmluLm8gKC5kYXRhKQotICAgIF9fZW5kX3RocmVhZF9wcml2YXRlID0gLjsKLSAgfQotICAuID0gQUxJR04oNDA5Nik7Ci0gIC5yZW1hcCA6IHsgYXJjaC91bS9rZXJuZWwvdHQvdW5tYXBfZmluLm8gKC50ZXh0KSB9CiAKLSAgLyogV2Ugd2FudCBpdCBvbmx5IGlmIHdlIGFyZSBpbiBNT0RFX1RULiBJbiBib3RoIGNhc2VzLCBob3dldmVyLCB3aGVuIE1PREVfVFQKLSAgICogaXMgb2ZmIHRoZSByZXN1bHRpbmcgYmluYXJ5IHNlZ2ZhdWx0cy4qLworI2lmZGVmIE1PREVfVFQKKyAgLnJlbWFwX2RhdGEgOiB7IGFyY2gvdW0vc3lzLVNVQkFSQ0gvdW5tYXBfZmluLm8gKC5kYXRhIC5ic3MpIH0KKyAgLnJlbWFwIDogeyBhcmNoL3VtL3N5cy1TVUJBUkNIL3VubWFwX2Zpbi5vICgudGV4dCkgfQogCiAgIC4gPSBBTElHTig0MDk2KTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMgYi9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKaW5kZXggOTgzNDZjNy4uNzQ1OWQwOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCisrKyBiL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwpAQCAtMTAsNiArMTAsMTIgQEAKICQoVVNFUl9PQkpTKSA6IGNfZmxhZ3MgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChVU0VSX0NGTEFHUykgXAogCSQoQ0ZMQUdTXyQobm90ZGlyICRAKSkKIAorIyBUaGUgc3R1YnMgYW5kIHVubWFwLm8gY2FuJ3QgdHJ5IHRvIGNhbGwgbWNvdW50IG9yIHVwZGF0ZSBiYXNpYyBibG9jayBkYXRhCitkZWZpbmUgdW5wcm9maWxlCisJJChwYXRzdWJzdCAtcGcsLCQocGF0c3Vic3QgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlLCwkKDEpKSkKK2VuZGVmCisKKwogcXVpZXRfY21kX21ha2VfbGluayA9IFNZTUxJTksgJEAKIGNtZF9tYWtlX2xpbmsgICAgICAgPSBsbiAtc2YgJChzcmN0cmVlKS9hcmNoLyQoU1VCQVJDSCkvJCgkKG5vdGRpciAkQCktZGlyKS8kKG5vdGRpciAkQCkgJEAKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnVubWFwIGIvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnVubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YThmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUudW5tYXAKQEAgLTAsMCArMSwyMiBAQAorY2xlYW4tZmlsZXMgKz0gdW5tYXBfdG1wLm8gdW5tYXBfZmluLm8gdW5tYXAubworCitpZmRlZiBDT05GSUdfTU9ERV9UVAorCisjQWx3YXlzIGJ1aWxkIHVubWFwX2Zpbi5vCitleHRyYS15ICs9IHVubWFwX2Zpbi5vCisjRG8gZGVwZW5kZW5jeSB0cmFja2luZyBmb3IgdW5tYXAubyAoaXQgd2lsbCBiZSBhbHdheXMgYnVpbHQsIGJ1dCB3b24ndCBnZXQgdGhlIHRyYWNraW5nIHVubGVzcyB3ZSB1c2UgdGhpcykuCit0YXJnZXRzICs9IHVubWFwLm8KKworI1hYWDogcGFydGlhbGx5IGNvcGllZCBmcm9tIGFyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcworJChvYmopL3VubWFwLm86IF9jX2ZsYWdzID0gJChjYWxsIHVucHJvZmlsZSwkKENGTEFHUykpCisKK3F1aWV0X2NtZF93cmFwbGQgPSBMRCAgICAgICRACitkZWZpbmUgY21kX3dyYXBsZAorCSQoTEQpIC1yIC1vICQob2JqKS91bm1hcF90bXAubyAkPCAkKHNoZWxsICQoQ0MpIC1wcmludC1maWxlLW5hbWU9bGliYy5hKTsgXAorCSQoT0JKQ09QWSkgJChvYmopL3VubWFwX3RtcC5vICRAIC1HIHN3aXRjaGVyb28KK2VuZGVmCisKKyQob2JqKS91bm1hcF9maW4ubyA6ICQob2JqKS91bm1hcC5vIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsd3JhcGxkKQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZSBiL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKaW5kZXggNDM1MWU1Ni4uMDk1YmNkYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCkBAIC0xNywzICsxNyw1IEBACiBtb2R1bGUuYy1kaXIgPSBrZXJuZWwKIAogc3ViZGlyLSA6PSB1dGlsCisKK2luY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnVubWFwCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3VubWFwLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3VubWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2ODc1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvdW5tYXAuYwpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworc3RhdGljIGludCBlcnJubzsKKworc3RhdGljIGlubGluZSBfc3lzY2FsbDIoaW50LG11bm1hcCx2b2lkICosc3RhcnQsc2l6ZV90LGxlbikKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGw2KHZvaWQgKixtbWFwMix2b2lkICosYWRkcixzaXplX3QsbGVuLGludCxwcm90LGludCxmbGFncyxpbnQsZmQsb2ZmX3Qsb2Zmc2V0KQoraW50IHN3aXRjaGVyb28oaW50IGZkLCBpbnQgcHJvdCwgdm9pZCAqZnJvbSwgdm9pZCAqdG8sIGludCBzaXplKQoreworCWlmKG11bm1hcCh0bywgc2l6ZSkgPCAwKXsKKwkJcmV0dXJuKC0xKTsKKwl9CisJaWYobW1hcDIodG8sIHNpemUsIHByb3QsIE1BUF9TSEFSRUQgfCBNQVBfRklYRUQsIGZkLCAwKSAhPSB0byl7CisJCXJldHVybigtMSk7CisJfQorCWlmKG11bm1hcChmcm9tLCBzaXplKSA8IDApeworCQlyZXR1cm4oLTEpOworCX0KKwlyZXR1cm4oMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKaW5kZXggNjA4NDY2YS4uMmJjNmY2OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQpAQCAtMjksMyArMjksNSBAQAogbW9kdWxlLmMtZGlyID0ga2VybmVsCiAKIHN1YmRpci0gOj0gdXRpbAorCitpbmNsdWRlIGFyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS51bm1hcApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3VubWFwLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvdW5tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzcwOTRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3VubWFwLmMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKK3N0YXRpYyBpbnQgZXJybm87CisKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwyKGludCxtdW5tYXAsdm9pZCAqLHN0YXJ0LHNpemVfdCxsZW4pCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsNih2b2lkICosbW1hcCx2b2lkICosYWRkcixzaXplX3QsbGVuLGludCxwcm90LGludCxmbGFncyxpbnQsZmQsb2ZmX3Qsb2Zmc2V0KQoraW50IHN3aXRjaGVyb28oaW50IGZkLCBpbnQgcHJvdCwgdm9pZCAqZnJvbSwgdm9pZCAqdG8sIGludCBzaXplKQoreworCWlmKG11bm1hcCh0bywgc2l6ZSkgPCAwKXsKKwkJcmV0dXJuKC0xKTsKKwl9CisJaWYobW1hcCh0bywgc2l6ZSwgcHJvdCwgTUFQX1NIQVJFRCB8IE1BUF9GSVhFRCwgZmQsIDApICE9IHRvKXsKKwkJcmV0dXJuKC0xKTsKKwl9CisJaWYobXVubWFwKGZyb20sIHNpemUpIDwgMCl7CisJCXJldHVybigtMSk7CisJfQorCXJldHVybigwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9hb3V0LmMgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYW91dC5jCmluZGV4IDE5NjVlZmMuLmMxMmVkZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9hb3V0LmMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2FvdXQuYwpAQCAtMzEyLDYgKzMxMiw3IEBACiAJY3VycmVudC0+bW0tPmJyayA9IGV4LmFfYnNzICsKIAkJKGN1cnJlbnQtPm1tLT5zdGFydF9icmsgPSBOX0JTU0FERFIoZXgpKTsKIAljdXJyZW50LT5tbS0+ZnJlZV9hcmVhX2NhY2hlID0gVEFTS19VTk1BUFBFRF9CQVNFOworCWN1cnJlbnQtPm1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKIAogCXNldF9tbV9jb3VudGVyKGN1cnJlbnQtPm1tLCByc3MsIDApOwogCWN1cnJlbnQtPm1tLT5tbWFwID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9iaW5mbXQuYyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9iaW5mbXQuYwppbmRleCA5OWI1MjIwLi5jODEzMWYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jCkBAIC00Niw3ICs0Niw3IEBACiAKICNkZWZpbmUgSUEzMl9FTVVMQVRPUiAxCiAKLSNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFCQkoVEFTS19VTk1BUFBFRF8zMiArIDB4MTAwMDAwMCkKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFCQkoVEFTS19VTk1BUFBFRF9CQVNFICsgMHgxMDAwMDAwKQogCiAjdW5kZWYgRUxGX0FSQ0gKICNkZWZpbmUgRUxGX0FSQ0ggRU1fMzg2CkBAIC0zMDcsOSArMzA3LDYgQEAKIAogI2RlZmluZSBlbGZfYWRkcl90IF9fdTMyCiAKLSN1bmRlZiBUQVNLX1NJWkUKLSNkZWZpbmUgVEFTS19TSVpFIDB4ZmZmZmZmZmYKLQogc3RhdGljIHZvaWQgZWxmMzJfaW5pdChzdHJ1Y3QgcHRfcmVncyAqKTsKIAogI2RlZmluZSBBUkNIX0hBU19TRVRVUF9BRERJVElPTkFMX1BBR0VTIDEKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDc2MWI2ZDMuLmRjZThiYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtNjU2LDcgKzY1Niw3IEBACiAKIAlzd2l0Y2ggKGNvZGUpIHsgCiAJY2FzZSBBUkNIX1NFVF9HUzoKLQkJaWYgKGFkZHIgPj0gVEFTS19TSVpFKSAKKwkJaWYgKGFkZHIgPj0gVEFTS19TSVpFX09GKHRhc2spKQogCQkJcmV0dXJuIC1FUEVSTTsgCiAJCWNwdSA9IGdldF9jcHUoKTsKIAkJLyogaGFuZGxlIHNtYWxsIGJhc2VzIHZpYSB0aGUgR0RUIGJlY2F1c2UgdGhhdCdzIGZhc3RlciB0byAKQEAgLTY4Miw3ICs2ODIsNyBAQAogCWNhc2UgQVJDSF9TRVRfRlM6CiAJCS8qIE5vdCBzdHJpY3RseSBuZWVkZWQgZm9yIGZzLCBidXQgZG8gaXQgZm9yIHN5bW1ldHJ5CiAJCSAgIHdpdGggZ3MgKi8KLQkJaWYgKGFkZHIgPj0gVEFTS19TSVpFKQorCQlpZiAoYWRkciA+PSBUQVNLX1NJWkVfT0YodGFzaykpCiAJCQlyZXR1cm4gLUVQRVJNOyAKIAkJY3B1ID0gZ2V0X2NwdSgpOwogCQkvKiBoYW5kbGUgc21hbGwgYmFzZXMgdmlhIHRoZSBHRFQgYmVjYXVzZSB0aGF0J3MgZmFzdGVyIHRvIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IDUyNWY2YTEuLmJiZjY0YjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTI1NywxMiArMjU3LDEyIEBACiAJCQl2YWx1ZSAmPSAweGZmZmY7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCxmc19iYXNlKToKLQkJCWlmICh2YWx1ZSA+PSBUQVNLX1NJWkUpCisJCQlpZiAodmFsdWUgPj0gVEFTS19TSVpFX09GKGNoaWxkKSkKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCWNoaWxkLT50aHJlYWQuZnMgPSB2YWx1ZTsKIAkJCXJldHVybiAwOwogCQljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0LGdzX2Jhc2UpOgotCQkJaWYgKHZhbHVlID49IFRBU0tfU0laRSkKKwkJCWlmICh2YWx1ZSA+PSBUQVNLX1NJWkVfT0YoY2hpbGQpKQogCQkJCXJldHVybiAtRUlPOwogCQkJY2hpbGQtPnRocmVhZC5ncyA9IHZhbHVlOwogCQkJcmV0dXJuIDA7CkBAIC0yNzksNyArMjc5LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0LCByaXApOgogCQkJLyogQ2hlY2sgaWYgdGhlIG5ldyBSSVAgYWRkcmVzcyBpcyBjYW5vbmljYWwgKi8KLQkJCWlmICh2YWx1ZSA+PSBUQVNLX1NJWkUpCisJCQlpZiAodmFsdWUgPj0gVEFTS19TSVpFX09GKGNoaWxkKSkKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCWJyZWFrOwogCX0KQEAgLTQxOSw2ICs0MTksOCBAQAogCQlicmVhazsKIAogCWNhc2UgUFRSQUNFX1BPS0VVU1I6IC8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgaW4gdGhlIFVTRVIgYXJlYSAqLworCXsKKwkJaW50IGRzaXplID0gdGVzdF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9JQTMyKSA/IDMgOiA3OwogCQlyZXQgPSAtRUlPOwogCQlpZiAoKGFkZHIgJiA3KSB8fAogCQkgICAgYWRkciA+IHNpemVvZihzdHJ1Y3QgdXNlcikgLSA3KQpAQCAtNDMwLDIyICs0MzIsMjIgQEAKIAkJCWJyZWFrOwogCQkvKiBEaXNhbGxvd3MgdG8gc2V0IGEgYnJlYWtwb2ludCBpbnRvIHRoZSB2c3lzY2FsbCAqLwogCQljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyLCB1X2RlYnVncmVnWzBdKToKLQkJCWlmIChkYXRhID49IFRBU0tfU0laRS03KSBicmVhazsKKwkJCWlmIChkYXRhID49IFRBU0tfU0laRV9PRihjaGlsZCkgLSBkc2l6ZSkgYnJlYWs7CiAJCQljaGlsZC0+dGhyZWFkLmRlYnVncmVnMCA9IGRhdGE7CiAJCQlyZXQgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVzZXIsIHVfZGVidWdyZWdbMV0pOgotCQkJaWYgKGRhdGEgPj0gVEFTS19TSVpFLTcpIGJyZWFrOworCQkJaWYgKGRhdGEgPj0gVEFTS19TSVpFX09GKGNoaWxkKSAtIGRzaXplKSBicmVhazsKIAkJCWNoaWxkLT50aHJlYWQuZGVidWdyZWcxID0gZGF0YTsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgdXNlciwgdV9kZWJ1Z3JlZ1syXSk6Ci0JCQlpZiAoZGF0YSA+PSBUQVNLX1NJWkUtNykgYnJlYWs7CisJCQlpZiAoZGF0YSA+PSBUQVNLX1NJWkVfT0YoY2hpbGQpIC0gZHNpemUpIGJyZWFrOwogCQkJY2hpbGQtPnRocmVhZC5kZWJ1Z3JlZzIgPSBkYXRhOwogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyLCB1X2RlYnVncmVnWzNdKToKLQkJCWlmIChkYXRhID49IFRBU0tfU0laRS03KSBicmVhazsKKwkJCWlmIChkYXRhID49IFRBU0tfU0laRV9PRihjaGlsZCkgLSBkc2l6ZSkgYnJlYWs7CiAJCQljaGlsZC0+dGhyZWFkLmRlYnVncmVnMyA9IGRhdGE7CiAJCQlyZXQgPSAwOwogCQkJYnJlYWs7CkBAIC00NjksNiArNDcxLDcgQEAKIAkJICBicmVhazsKIAkJfQogCQlicmVhazsKKwl9CiAJY2FzZSBQVFJBQ0VfU1lTQ0FMTDogLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAljYXNlIFBUUkFDRV9DT05UOiAgICAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3N5c194ODZfNjQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zeXNfeDg2XzY0LmMKaW5kZXggZGJlYmQ1Yy4uY2M3ODIxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3N5c194ODZfNjQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3lzX3g4Nl82NC5jCkBAIC02OCwxMyArNjgsNyBAQAogc3RhdGljIHZvaWQgZmluZF9zdGFydF9lbmQodW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyAqYmVnaW4sCiAJCQkgICB1bnNpZ25lZCBsb25nICplbmQpCiB7Ci0jaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCi0JaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpKSB7IAotCQkqYmVnaW4gPSBUQVNLX1VOTUFQUEVEXzMyOwotCQkqZW5kID0gSUEzMl9QQUdFX09GRlNFVDsgCi0JfSBlbHNlIAotI2VuZGlmCi0JaWYgKGZsYWdzICYgTUFQXzMyQklUKSB7IAorCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikgJiYgKGZsYWdzICYgTUFQXzMyQklUKSkgewogCQkvKiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBuZWVkZWQgdG8gbWFwIGNvZGUgaW4gc21hbGwKIAkJICAgbW9kZWwsIHNvIGl0IG5lZWRzIHRvIGJlIGluIHRoZSBmaXJzdCAzMWJpdC4gTGltaXQKIAkJICAgaXQgdG8gdGhhdC4gIFRoaXMgbWVhbnMgd2UgbmVlZCB0byBtb3ZlIHRoZQpAQCAtODQsMTAgKzc4LDEwIEBACiAJCSAgIG9mIHBsYXlncm91bmQgZm9yIG5vdy4gLUFLICovIAogCQkqYmVnaW4gPSAweDQwMDAwMDAwOyAKIAkJKmVuZCA9IDB4ODAwMDAwMDA7CQkKLQl9IGVsc2UgeyAKLQkJKmJlZ2luID0gVEFTS19VTk1BUFBFRF82NDsgCisJfSBlbHNlIHsKKwkJKmJlZ2luID0gVEFTS19VTk1BUFBFRF9CQVNFOwogCQkqZW5kID0gVEFTS19TSVpFOyAKLQkJfQorCX0KIH0gCiAKIHVuc2lnbmVkIGxvbmcKQEAgLTExMSw2ICsxMDUsMTEgQEAKIAkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkpCiAJCQlyZXR1cm4gYWRkcjsKIAl9CisJaWYgKCgoZmxhZ3MgJiBNQVBfMzJCSVQpIHx8IHRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpKQorCSAgICAmJiBsZW4gPD0gbW0tPmNhY2hlZF9ob2xlX3NpemUpIHsKKwkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKKwkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGJlZ2luOworCX0KIAlhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKIAlpZiAoYWRkciA8IGJlZ2luKSAKIAkJYWRkciA9IGJlZ2luOyAKQEAgLTEyNiw2ICsxMjUsNyBAQAogCQkJICovCiAJCQlpZiAoc3RhcnRfYWRkciAhPSBiZWdpbikgewogCQkJCXN0YXJ0X2FkZHIgPSBhZGRyID0gYmVnaW47CisJCQkJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOwogCQkJCWdvdG8gZnVsbF9zZWFyY2g7CiAJCQl9CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEzNyw2ICsxMzcsOSBAQAogCQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHIgKyBsZW47CiAJCQlyZXR1cm4gYWRkcjsKIAkJfQorCQlpZiAoYWRkciArIG1tLT5jYWNoZWRfaG9sZV9zaXplIDwgdm1hLT52bV9zdGFydCkKKwkJICAgICAgICBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IHZtYS0+dm1fc3RhcnQgLSBhZGRyOworCiAJCWFkZHIgPSB2bWEtPnZtX2VuZDsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9saWIvZGVsYXkuYyBiL2FyY2gveDg2XzY0L2xpYi9kZWxheS5jCmluZGV4IDZlMmQ2NjQuLmFlZDYxYTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2xpYi9kZWxheS5jCisrKyBiL2FyY2gveDg2XzY0L2xpYi9kZWxheS5jCkBAIC0zNCw3ICszNCw3IEBACiAKIGlubGluZSB2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcgeGxvb3BzKQogewotCV9fZGVsYXkoKCh4bG9vcHMgKiBjcHVfZGF0YVtfc21wX3Byb2Nlc3Nvcl9pZCgpXS5sb29wc19wZXJfamlmZnkpID4+IDMyKSAqIEhaKTsKKwlfX2RlbGF5KCgoeGxvb3BzICogY3B1X2RhdGFbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0ubG9vcHNfcGVyX2ppZmZ5KSA+PiAzMikgKiBIWik7CiB9CiAKIHZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjcykKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL2ZhdWx0LmMgYi9hcmNoL3g4Nl82NC9tbS9mYXVsdC5jCmluZGV4IDVkNmIyMTEuLjU3ZDNhYjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL2ZhdWx0LmMKKysrIGIvYXJjaC94ODZfNjQvbW0vZmF1bHQuYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJICogKGVycm9yX2NvZGUgJiA0KSA9PSAwLCBhbmQgdGhhdCB0aGUgZmF1bHQgd2FzIG5vdCBhCiAJICogcHJvdGVjdGlvbiBlcnJvciAoZXJyb3JfY29kZSAmIDEpID09IDAuCiAJICovCi0JaWYgKHVubGlrZWx5KGFkZHJlc3MgPj0gVEFTS19TSVpFKSkgeworCWlmICh1bmxpa2VseShhZGRyZXNzID49IFRBU0tfU0laRTY0KSkgewogCQlpZiAoIShlcnJvcl9jb2RlICYgNSkgJiYKIAkJICAgICAgKChhZGRyZXNzID49IFZNQUxMT0NfU1RBUlQgJiYgYWRkcmVzcyA8IFZNQUxMT0NfRU5EKSB8fAogCQkgICAgICAgKGFkZHJlc3MgPj0gTU9EVUxFU19WQUREUiAmJiBhZGRyZXNzIDwgTU9EVUxFU19FTkQpKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IGVkNDFkOTAuLmFlZDRhOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTU4LDQgKzU4LDYgQEAKIAogc291cmNlICJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3NuL0tjb25maWciCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDE1NjgxZGUuLjMxNjdiZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtNjEsNiArNjEsNiBAQAogb2JqLSQoQ09ORklHX0NQVV9GUkVRKQkJKz0gY3B1ZnJlcS8KIG9iai0kKENPTkZJR19NTUMpCQkrPSBtbWMvCiBvYmotJChDT05GSUdfSU5GSU5JQkFORCkJKz0gaW5maW5pYmFuZC8KLW9iai0kKENPTkZJR19CTEtfREVWX1NHSUlPQzQpCSs9IHNuLworb2JqLSQoQ09ORklHX1NHSV9JT0M0KQkJKz0gc24vCiBvYmoteQkJCQkrPSBmaXJtd2FyZS8KIG9iai0kKENPTkZJR19DUllQVE8pCQkrPSBjcnlwdG8vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCmluZGV4IGZmNjRkMzMuLmM5ZDY3MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAlpbnQJCQlzbGVlcF90aWNrcyA9IDA7CiAJdTMyCQkJdDEsIHQyID0gMDsKIAotCXByID0gcHJvY2Vzc29yc1tfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlwciA9IHByb2Nlc3NvcnNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJaWYgKCFwcikKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCA1ZDQ1MTdjLi45MDRiMjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKIAkJc3RydWN0IHpvbmUgKnogPSAmcGctPm5vZGVfem9uZXNbaV07CiAJCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKLQkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzID0gJnotPnBhZ2VzZXRbY3B1XTsKKwkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzID0gem9uZV9wY3AoeixjcHUpOwogCQkJbnVtYV9oaXQgKz0gcHMtPm51bWFfaGl0OwogCQkJbnVtYV9taXNzICs9IHBzLT5udW1hX21pc3M7CiAJCQludW1hX2ZvcmVpZ24gKz0gcHMtPm51bWFfZm9yZWlnbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggNWVkNjUxNS4uN2NjZjg3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTkyOSw2ICs5MjksMTAgQEAKIAogCSAgSWYgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHNjeDIwMF9ncGlvLgogCitjb25maWcgR1BJT19WUjQxWFgKKwl0cmlzdGF0ZSAiTkVDIFZSNDEwMCBzZXJpZXMgR2VuZXJhbC1wdXJwb3NlIEkvTyBVbml0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDUFVfVlI0MVhYCisKIGNvbmZpZyBSQVdfRFJJVkVSCiAJdHJpc3RhdGUgIlJBVyBkcml2ZXIgKC9kZXYvcmF3L3Jhd04pIChPQlNPTEVURSkiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IGUzZjVjMzIuLjFhZmY4MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKQEAgLTgwLDYgKzgwLDcgQEAKIG9iai0kKENPTkZJR19OV0JVVFRPTikgKz0gbndidXR0b24ubwogb2JqLSQoQ09ORklHX05XRkxBU0gpICs9IG53Zmxhc2gubwogb2JqLSQoQ09ORklHX1NDeDIwMF9HUElPKSArPSBzY3gyMDBfZ3Bpby5vCitvYmotJChDT05GSUdfR1BJT19WUjQxWFgpICs9IHZyNDF4eF9naXUubwogb2JqLSQoQ09ORklHX1RBTkJBQ19UQjAyMTkpICs9IHRiMDIxOS5vCiAKIG9iai0kKENPTkZJR19XQVRDSERPRykJKz0gd2F0Y2hkb2cvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IGQ3ZmI0NTIuLjBjODE2NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC02NDEsNyArNjQxLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkb3duX3JlYWQoJmludGVyZmFjZXNfc2VtKTsKLQlpZiAoKGlmX251bSA+IE1BWF9JUE1JX0lOVEVSRkFDRVMpIHx8IGlwbWlfaW50ZXJmYWNlc1tpZl9udW1dID09IE5VTEwpCisJaWYgKChpZl9udW0gPj0gTUFYX0lQTUlfSU5URVJGQUNFUykgfHwgaXBtaV9pbnRlcmZhY2VzW2lmX251bV0gPT0gTlVMTCkKIAl7CiAJCXJ2ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IDI1N2I4ZWUuLmUzMDg1YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTQ4NCw3ICs0ODQsNyBAQAogIAlyZXR1cm4gdmlydHIgKyB3cm90ZTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgfHwgIWRlZmluZWQoX19tYzY4MDAwX18pCisjaWYgKGRlZmluZWQoQ09ORklHX0lTQSkgfHwgIWRlZmluZWQoX19tYzY4MDAwX18pKSAmJiAoIWRlZmluZWQoQ09ORklHX1BQQ19JU0VSSUVTKSB8fCBkZWZpbmVkKENPTkZJR19QQ0kpKQogc3RhdGljIHNzaXplX3QgcmVhZF9wb3J0KHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC03NDQsNyArNzQ0LDcgQEAKIAkud3JpdGUJCT0gd3JpdGVfbnVsbCwKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JU0EpIHx8ICFkZWZpbmVkKF9fbWM2ODAwMF9fKQorI2lmIChkZWZpbmVkKENPTkZJR19JU0EpIHx8ICFkZWZpbmVkKF9fbWM2ODAwMF9fKSkgJiYgKCFkZWZpbmVkKENPTkZJR19QUENfSVNFUklFUykgfHwgZGVmaW5lZChDT05GSUdfUENJKSkKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHsKIAkubGxzZWVrCQk9IG1lbW9yeV9sc2VlaywKIAkucmVhZAkJPSByZWFkX3BvcnQsCkBAIC04MDQsNyArODA0LDcgQEAKIAkJY2FzZSAzOgogCQkJZmlscC0+Zl9vcCA9ICZudWxsX2ZvcHM7CiAJCQlicmVhazsKLSNpZiBkZWZpbmVkKENPTkZJR19JU0EpIHx8ICFkZWZpbmVkKF9fbWM2ODAwMF9fKQorI2lmIChkZWZpbmVkKENPTkZJR19JU0EpIHx8ICFkZWZpbmVkKF9fbWM2ODAwMF9fKSkgJiYgKCFkZWZpbmVkKENPTkZJR19QUENfSVNFUklFUykgfHwgZGVmaW5lZChDT05GSUdfUENJKSkKIAkJY2FzZSA0OgogCQkJZmlscC0+Zl9vcCA9ICZwb3J0X2ZvcHM7CiAJCQlicmVhazsKQEAgLTg0Niw3ICs4NDYsNyBAQAogCXsxLCAibWVtIiwgICAgIFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCwgJm1lbV9mb3BzfSwKIAl7MiwgImttZW0iLCAgICBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAsICZrbWVtX2ZvcHN9LAogCXszLCAibnVsbCIsICAgIFNfSVJVR08gfCBTX0lXVUdPLCAgICAgICAgICAgJm51bGxfZm9wc30sCi0jaWYgZGVmaW5lZChDT05GSUdfSVNBKSB8fCAhZGVmaW5lZChfX21jNjgwMDBfXykKKyNpZiAoZGVmaW5lZChDT05GSUdfSVNBKSB8fCAhZGVmaW5lZChfX21jNjgwMDBfXykpICYmICghZGVmaW5lZChDT05GSUdfUFBDX0lTRVJJRVMpIHx8IGRlZmluZWQoQ09ORklHX1BDSSkpCiAJezQsICJwb3J0IiwgICAgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQLCAmcG9ydF9mb3BzfSwKICNlbmRpZgogCXs1LCAiemVybyIsICAgIFNfSVJVR08gfCBTX0lXVUdPLCAgICAgICAgICAgJnplcm9fZm9wc30sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODMyNzhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwpAQCAtMCwwICsxLDc0MyBAQAorLyoKKyAqICBEcml2ZXIgZm9yIE5FQyBWUjQxMDAgc2VyaWVzIEdlbmVyYWwtcHVycG9zZSBJL08gVW5pdC4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoJQXV0aG9yOiBZb2ljaGkgWXVhc2EgPHl5dWFzYUBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA1ICBZb2ljaGkgWXVhc2EgPHl1YXNhQGhoLmlpajR1Lm9yLmpwPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3ZyNDF4eC9naXUuaD4KKyNpbmNsdWRlIDxhc20vdnI0MXh4L3ZyNDF4eC5oPgorCitNT0RVTEVfQVVUSE9SKCJZb2ljaGkgWXVhc2EgPHl1YXNhQGhoLmlpajR1Lm9yLmpwPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJORUMgVlI0MTAwIHNlcmllcyBHZW5lcmFsLXB1cnBvc2UgSS9PIFVuaXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgbWFqb3I7CS8qIGRlZmF1bHQgaXMgZHluYW1pYyBtYWpvciBkZXZpY2UgbnVtYmVyICovCittb2R1bGVfcGFyYW0obWFqb3IsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1ham9yLCAiTWFqb3IgZGV2aWNlIG51bWJlciIpOworCisjZGVmaW5lIEdJVV9UWVBFMV9TVEFSVAkJMHgwYjAwMDEwMFVMCisjZGVmaW5lIEdJVV9UWVBFMV9TSVpFCQkweDIwVUwKKworI2RlZmluZSBHSVVfVFlQRTJfU1RBUlQJCTB4MGYwMDAxNDBVTAorI2RlZmluZSBHSVVfVFlQRTJfU0laRQkJMHgyMFVMCisKKyNkZWZpbmUgR0lVX1RZUEUzX1NUQVJUCQkweDBmMDAwMTQwVUwKKyNkZWZpbmUgR0lVX1RZUEUzX1NJWkUJCTB4MjhVTAorCisjZGVmaW5lIEdJVV9QVUxMVVBET1dOX1NUQVJUCTB4MGIwMDAyZTBVTAorI2RlZmluZSBHSVVfUFVMTFVQRE9XTl9TSVpFCTB4MDRVTAorCisjZGVmaW5lIEdJVUlPU0VMTAkweDAwCisjZGVmaW5lIEdJVUlPU0VMSAkweDAyCisjZGVmaW5lIEdJVVBJT0RMCTB4MDQKKyNkZWZpbmUgR0lVUElPREgJMHgwNgorI2RlZmluZSBHSVVJTlRTVEFUTAkweDA4CisjZGVmaW5lIEdJVUlOVFNUQVRICTB4MGEKKyNkZWZpbmUgR0lVSU5URU5MCTB4MGMKKyNkZWZpbmUgR0lVSU5URU5ICTB4MGUKKyNkZWZpbmUgR0lVSU5UVFlQTAkweDEwCisjZGVmaW5lIEdJVUlOVFRZUEgJMHgxMgorI2RlZmluZSBHSVVJTlRBTFNFTEwJMHgxNAorI2RlZmluZSBHSVVJTlRBTFNFTEgJMHgxNgorI2RlZmluZSBHSVVJTlRIVFNFTEwJMHgxOAorI2RlZmluZSBHSVVJTlRIVFNFTEgJMHgxYQorI2RlZmluZSBHSVVQT0RBVEwJMHgxYworI2RlZmluZSBHSVVQT0RBVEVOCTB4MWMKKyNkZWZpbmUgR0lVUE9EQVRICTB4MWUKKyAjZGVmaW5lIFBJT0VOMAkJMHgwMTAwCisgI2RlZmluZSBQSU9FTjEJCTB4MDIwMAorI2RlZmluZSBHSVVQT0RBVAkweDFlCisjZGVmaW5lIEdJVUZFREdFSU5ITAkweDIwCisjZGVmaW5lIEdJVUZFREdFSU5ISAkweDIyCisjZGVmaW5lIEdJVVJFREdFSU5ITAkweDI0CisjZGVmaW5lIEdJVVJFREdFSU5ISAkweDI2CisKKyNkZWZpbmUgR0lVVVNFVVBETgkweDFlMAorI2RlZmluZSBHSVVURVJNVVBETgkweDFlMgorCisjZGVmaW5lIEdQSU9fSEFTX1BVTExVUERPV05fSU8JCTB4MDAwMQorI2RlZmluZSBHUElPX0hBU19PVVRQVVRfRU5BQkxFCQkweDAwMDIKKyNkZWZpbmUgR1BJT19IQVNfSU5URVJSVVBUX0VER0VfU0VMRUNUCTB4MDEwMAorCitzdGF0aWMgc3BpbmxvY2tfdCBnaXVfbG9jazsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmdpdV9yZXNvdXJjZTE7CitzdGF0aWMgc3RydWN0IHJlc291cmNlICpnaXVfcmVzb3VyY2UyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2l1X2ZsYWdzOworc3RhdGljIHVuc2lnbmVkIGludCBnaXVfbnJfcGluczsKKworc3RhdGljIHZvaWQgX19pb21lbSAqZ2l1X2Jhc2U7CisKKyNkZWZpbmUgZ2l1X3JlYWQob2Zmc2V0KQkJcmVhZHcoZ2l1X2Jhc2UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgZ2l1X3dyaXRlKG9mZnNldCwgdmFsdWUpCXdyaXRldygodmFsdWUpLCBnaXVfYmFzZSArIChvZmZzZXQpKQorCisjZGVmaW5lIEdQSU9fUElOX09GX0lSUShpcnEpCSgoaXJxKSAtIEdJVV9JUlFfQkFTRSkKKyNkZWZpbmUgR0lVSU5UX0hJR0hfT0ZGU0VUCTE2CisjZGVmaW5lIEdJVUlOVF9ISUdIX01BWAkJMzIKKworc3RhdGljIGlubGluZSB1aW50MTZfdCBnaXVfc2V0KHVpbnQxNl90IG9mZnNldCwgdWludDE2X3Qgc2V0KQoreworCXVpbnQxNl90IGRhdGE7CisKKwlkYXRhID0gZ2l1X3JlYWQob2Zmc2V0KTsKKwlkYXRhIHw9IHNldDsKKwlnaXVfd3JpdGUob2Zmc2V0LCBkYXRhKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGdpdV9jbGVhcih1aW50MTZfdCBvZmZzZXQsIHVpbnQxNl90IGNsZWFyKQoreworCXVpbnQxNl90IGRhdGE7CisKKwlkYXRhID0gZ2l1X3JlYWQob2Zmc2V0KTsKKwlkYXRhICY9IH5jbGVhcjsKKwlnaXVfd3JpdGUob2Zmc2V0LCBkYXRhKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfZ2l1aW50X2xvd19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgcGluOworCisJcGluID0gR1BJT19QSU5fT0ZfSVJRKGlycSk7CisJZ2l1X3dyaXRlKEdJVUlOVFNUQVRMLCAxIDw8IHBpbik7CisJZ2l1X3NldChHSVVJTlRFTkwsIDEgPDwgcGluKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9naXVpbnRfbG93X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWdpdV9jbGVhcihHSVVJTlRFTkwsIDEgPDwgR1BJT19QSU5fT0ZfSVJRKGlycSkpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfZ2l1aW50X2xvd19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlnaXVfc2V0KEdJVUlOVEVOTCwgMSA8PCBHUElPX1BJTl9PRl9JUlEoaXJxKSk7Cit9CisKKyNkZWZpbmUgZGlzYWJsZV9naXVpbnRfbG93X2lycQlzaHV0ZG93bl9naXVpbnRfbG93X2lycQorCitzdGF0aWMgdm9pZCBhY2tfZ2l1aW50X2xvd19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgcGluOworCisJcGluID0gR1BJT19QSU5fT0ZfSVJRKGlycSk7CisJZ2l1X2NsZWFyKEdJVUlOVEVOTCwgMSA8PCBwaW4pOworCWdpdV93cml0ZShHSVVJTlRTVEFUTCwgMSA8PCBwaW4pOworfQorCitzdGF0aWMgdm9pZCBlbmRfZ2l1aW50X2xvd19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUykpKQorCQlnaXVfc2V0KEdJVUlOVEVOTCwgMSA8PCBHUElPX1BJTl9PRl9JUlEoaXJxKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgZ2l1aW50X2xvd19pcnFfdHlwZSA9IHsKKwkudHlwZW5hbWUJPSAiR0lVSU5UTCIsCisJLnN0YXJ0dXAJPSBzdGFydHVwX2dpdWludF9sb3dfaXJxLAorCS5zaHV0ZG93bgk9IHNodXRkb3duX2dpdWludF9sb3dfaXJxLAorCS5lbmFibGUJCT0gZW5hYmxlX2dpdWludF9sb3dfaXJxLAorCS5kaXNhYmxlCT0gZGlzYWJsZV9naXVpbnRfbG93X2lycSwKKwkuYWNrCQk9IGFja19naXVpbnRfbG93X2lycSwKKwkuZW5kCQk9IGVuZF9naXVpbnRfbG93X2lycSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9naXVpbnRfaGlnaF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgcGluOworCisJcGluID0gR1BJT19QSU5fT0ZfSVJRKGlycSkgLSBHSVVJTlRfSElHSF9PRkZTRVQ7CisJZ2l1X3dyaXRlKEdJVUlOVFNUQVRILCAxIDw8IHBpbik7CisJZ2l1X3NldChHSVVJTlRFTkgsIDEgPDwgcGluKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9naXVpbnRfaGlnaF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlnaXVfY2xlYXIoR0lVSU5URU5ILCAxIDw8IChHUElPX1BJTl9PRl9JUlEoaXJxKSAtIEdJVUlOVF9ISUdIX09GRlNFVCkpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfZ2l1aW50X2hpZ2hfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJZ2l1X3NldChHSVVJTlRFTkgsIDEgPDwgKEdQSU9fUElOX09GX0lSUShpcnEpIC0gR0lVSU5UX0hJR0hfT0ZGU0VUKSk7Cit9CisKKyNkZWZpbmUgZGlzYWJsZV9naXVpbnRfaGlnaF9pcnEJc2h1dGRvd25fZ2l1aW50X2hpZ2hfaXJxCisKK3N0YXRpYyB2b2lkIGFja19naXVpbnRfaGlnaF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgcGluOworCisJcGluID0gR1BJT19QSU5fT0ZfSVJRKGlycSkgLSBHSVVJTlRfSElHSF9PRkZTRVQ7CisJZ2l1X2NsZWFyKEdJVUlOVEVOSCwgMSA8PCBwaW4pOworCWdpdV93cml0ZShHSVVJTlRTVEFUSCwgMSA8PCBwaW4pOworfQorCitzdGF0aWMgdm9pZCBlbmRfZ2l1aW50X2hpZ2hfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKKwkJZ2l1X3NldChHSVVJTlRFTkgsIDEgPDwgKEdQSU9fUElOX09GX0lSUShpcnEpIC0gR0lVSU5UX0hJR0hfT0ZGU0VUKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgZ2l1aW50X2hpZ2hfaXJxX3R5cGUgPSB7CisJLnR5cGVuYW1lCT0gIkdJVUlOVEgiLAorCS5zdGFydHVwCT0gc3RhcnR1cF9naXVpbnRfaGlnaF9pcnEsCisJLnNodXRkb3duCT0gc2h1dGRvd25fZ2l1aW50X2hpZ2hfaXJxLAorCS5lbmFibGUJCT0gZW5hYmxlX2dpdWludF9oaWdoX2lycSwKKwkuZGlzYWJsZQk9IGRpc2FibGVfZ2l1aW50X2hpZ2hfaXJxLAorCS5hY2sJCT0gYWNrX2dpdWludF9oaWdoX2lycSwKKwkuZW5kCQk9IGVuZF9naXVpbnRfaGlnaF9pcnEsCit9OworCitzdGF0aWMgaW50IGdpdV9nZXRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVpbnQxNl90IHBlbmRsLCBwZW5kaCwgbWFza2wsIG1hc2toOworCWludCBpOworCisJcGVuZGwgPSBnaXVfcmVhZChHSVVJTlRTVEFUTCk7CisJcGVuZGggPSBnaXVfcmVhZChHSVVJTlRTVEFUSCk7CisJbWFza2wgPSBnaXVfcmVhZChHSVVJTlRFTkwpOworCW1hc2toID0gZ2l1X3JlYWQoR0lVSU5URU5IKTsKKworCW1hc2tsICY9IHBlbmRsOworCW1hc2toICY9IHBlbmRoOworCisJaWYgKG1hc2tsKSB7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQlpZiAobWFza2wgJiAoMSA8PCBpKSkKKwkJCQlyZXR1cm4gR0lVX0lSUShpKTsKKwkJfQorCX0gZWxzZSBpZiAobWFza2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJCWlmIChtYXNraCAmICgxIDw8IGkpKQorCQkJCXJldHVybiBHSVVfSVJRKGkgKyBHSVVJTlRfSElHSF9PRkZTRVQpOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICJzcHVyaW91cyBHSVUgaW50ZXJydXB0OiAlMDR4KCUwNHgpLCUwNHgoJTA0eClcbiIsCisJICAgICAgIG1hc2tsLCBwZW5kbCwgbWFza2gsIHBlbmRoKTsKKworCWF0b21pY19pbmMoJmlycV9lcnJfY291bnQpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3ZvaWQgdnI0MXh4X3NldF9pcnFfdHJpZ2dlcih1bnNpZ25lZCBpbnQgcGluLCBpcnFfdHJpZ2dlcl90IHRyaWdnZXIsIGlycV9zaWduYWxfdCBzaWduYWwpCit7CisJdWludDE2X3QgbWFzazsKKworCWlmIChwaW4gPCBHSVVJTlRfSElHSF9PRkZTRVQpIHsKKwkJbWFzayA9IDEgPDwgcGluOworCQlpZiAodHJpZ2dlciAhPSBJUlFfVFJJR0dFUl9MRVZFTCkgeworICAgICAgICAJCWdpdV9zZXQoR0lVSU5UVFlQTCwgbWFzayk7CisJCQlpZiAoc2lnbmFsID09IElSUV9TSUdOQUxfSE9MRCkKKwkJCQlnaXVfc2V0KEdJVUlOVEhUU0VMTCwgbWFzayk7CisJCQllbHNlCisJCQkJZ2l1X2NsZWFyKEdJVUlOVEhUU0VMTCwgbWFzayk7CisJCQlpZiAoY3VycmVudF9jcHVfZGF0YS5jcHV0eXBlID09IENQVV9WUjQxMzMpIHsKKwkJCQlzd2l0Y2ggKHRyaWdnZXIpIHsKKwkJCQljYXNlIElSUV9UUklHR0VSX0VER0VfRkFMTElORzoKKwkJCQkJZ2l1X3NldChHSVVGRURHRUlOSEwsIG1hc2spOworCQkJCQlnaXVfY2xlYXIoR0lVUkVER0VJTkhMLCBtYXNrKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBJUlFfVFJJR0dFUl9FREdFX1JJU0lORzoKKwkJCQkJZ2l1X2NsZWFyKEdJVUZFREdFSU5ITCwgbWFzayk7CisJCQkJCWdpdV9zZXQoR0lVUkVER0VJTkhMLCBtYXNrKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZ2l1X3NldChHSVVGRURHRUlOSEwsIG1hc2spOworCQkJCQlnaXVfc2V0KEdJVVJFREdFSU5ITCwgbWFzayk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWdpdV9jbGVhcihHSVVJTlRUWVBMLCBtYXNrKTsKKwkJCWdpdV9jbGVhcihHSVVJTlRIVFNFTEwsIG1hc2spOworCQl9CisJCWdpdV93cml0ZShHSVVJTlRTVEFUTCwgbWFzayk7CisJfSBlbHNlIGlmIChwaW4gPCBHSVVJTlRfSElHSF9NQVgpIHsKKwkJbWFzayA9IDEgPDwgKHBpbiAtIEdJVUlOVF9ISUdIX09GRlNFVCk7CisJCWlmICh0cmlnZ2VyICE9IElSUV9UUklHR0VSX0xFVkVMKSB7CisJCQlnaXVfc2V0KEdJVUlOVFRZUEgsIG1hc2spOworCQkJaWYgKHNpZ25hbCA9PSBJUlFfU0lHTkFMX0hPTEQpCisJCQkJZ2l1X3NldChHSVVJTlRIVFNFTEgsIG1hc2spOworCQkJZWxzZQorCQkJCWdpdV9jbGVhcihHSVVJTlRIVFNFTEgsIG1hc2spOworCQkJaWYgKGN1cnJlbnRfY3B1X2RhdGEuY3B1dHlwZSA9PSBDUFVfVlI0MTMzKSB7CisJCQkJc3dpdGNoICh0cmlnZ2VyKSB7CisJCQkJY2FzZSBJUlFfVFJJR0dFUl9FREdFX0ZBTExJTkc6CisJCQkJCWdpdV9zZXQoR0lVRkVER0VJTkhILCBtYXNrKTsKKwkJCQkJZ2l1X2NsZWFyKEdJVVJFREdFSU5ISCwgbWFzayk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgSVJRX1RSSUdHRVJfRURHRV9SSVNJTkc6CisJCQkJCWdpdV9jbGVhcihHSVVGRURHRUlOSEgsIG1hc2spOworCQkJCQlnaXVfc2V0KEdJVVJFREdFSU5ISCwgbWFzayk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWdpdV9zZXQoR0lVRkVER0VJTkhILCBtYXNrKTsKKwkJCQkJZ2l1X3NldChHSVVSRURHRUlOSEgsIG1hc2spOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlnaXVfY2xlYXIoR0lVSU5UVFlQSCwgbWFzayk7CisJCQlnaXVfY2xlYXIoR0lVSU5USFRTRUxILCBtYXNrKTsKKwkJfQorCQlnaXVfd3JpdGUoR0lVSU5UU1RBVEgsIG1hc2spOworCX0KK30KKworRVhQT1JUX1NZTUJPTF9HUEwodnI0MXh4X3NldF9pcnFfdHJpZ2dlcik7CisKK3ZvaWQgdnI0MXh4X3NldF9pcnFfbGV2ZWwodW5zaWduZWQgaW50IHBpbiwgaXJxX2xldmVsX3QgbGV2ZWwpCit7CisJdWludDE2X3QgbWFzazsKKworCWlmIChwaW4gPCBHSVVJTlRfSElHSF9PRkZTRVQpIHsKKwkJbWFzayA9IDEgPDwgcGluOworCQlpZiAobGV2ZWwgPT0gSVJRX0xFVkVMX0hJR0gpCisJCQlnaXVfc2V0KEdJVUlOVEFMU0VMTCwgbWFzayk7CisJCWVsc2UKKwkJCWdpdV9jbGVhcihHSVVJTlRBTFNFTEwsIG1hc2spOworCQlnaXVfd3JpdGUoR0lVSU5UU1RBVEwsIG1hc2spOworCX0gZWxzZSBpZiAocGluIDwgR0lVSU5UX0hJR0hfTUFYKSB7CisJCW1hc2sgPSAxIDw8IChwaW4gLSBHSVVJTlRfSElHSF9PRkZTRVQpOworCQlpZiAobGV2ZWwgPT0gSVJRX0xFVkVMX0hJR0gpCisJCQlnaXVfc2V0KEdJVUlOVEFMU0VMSCwgbWFzayk7CisJCWVsc2UKKwkJCWdpdV9jbGVhcihHSVVJTlRBTFNFTEgsIG1hc2spOworCQlnaXVfd3JpdGUoR0lVSU5UU1RBVEgsIG1hc2spOworCX0KK30KKworRVhQT1JUX1NZTUJPTF9HUEwodnI0MXh4X3NldF9pcnFfbGV2ZWwpOworCitncGlvX2RhdGFfdCB2cjQxeHhfZ3Bpb19nZXRfcGluKHVuc2lnbmVkIGludCBwaW4pCit7CisJdWludDE2X3QgcmVnLCBtYXNrOworCisJaWYgKHBpbiA+PSBnaXVfbnJfcGlucykKKwkJcmV0dXJuIEdQSU9fREFUQV9JTlZBTDsKKworCWlmIChwaW4gPCAxNikgeworCQlyZWcgPSBnaXVfcmVhZChHSVVQSU9ETCk7CisJCW1hc2sgPSAodWludDE2X3QpMSA8PCBwaW47CisJfSBlbHNlIGlmIChwaW4gPCAzMikgeworCQlyZWcgPSBnaXVfcmVhZChHSVVQSU9ESCk7CisJCW1hc2sgPSAodWludDE2X3QpMSA8PCAocGluIC0gMTYpOworCX0gZWxzZSBpZiAocGluIDwgNDgpIHsKKwkJcmVnID0gZ2l1X3JlYWQoR0lVUE9EQVRMKTsKKwkJbWFzayA9ICh1aW50MTZfdCkxIDw8IChwaW4gLSAzMik7CisJfSBlbHNlIHsKKwkJcmVnID0gZ2l1X3JlYWQoR0lVUE9EQVRIKTsKKwkJbWFzayA9ICh1aW50MTZfdCkxIDw8IChwaW4gLSA0OCk7CisJfQorCisJaWYgKHJlZyAmIG1hc2spCisJCXJldHVybiBHUElPX0RBVEFfSElHSDsKKworCXJldHVybiBHUElPX0RBVEFfTE9XOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh2cjQxeHhfZ3Bpb19nZXRfcGluKTsKKworaW50IHZyNDF4eF9ncGlvX3NldF9waW4odW5zaWduZWQgaW50IHBpbiwgZ3Bpb19kYXRhX3QgZGF0YSkKK3sKKwl1aW50MTZfdCBvZmZzZXQsIG1hc2ssIHJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHBpbiA+PSBnaXVfbnJfcGlucykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGluIDwgMTYpIHsKKwkJb2Zmc2V0ID0gR0lVUElPREw7CisJCW1hc2sgPSAodWludDE2X3QpMSA8PCBwaW47CisJfSBlbHNlIGlmIChwaW4gPCAzMikgeworCQlvZmZzZXQgPSBHSVVQSU9ESDsKKwkJbWFzayA9ICh1aW50MTZfdCkxIDw8IChwaW4gLSAxNik7CisJfSBlbHNlIGlmIChwaW4gPCA0OCkgeworCQlvZmZzZXQgPSBHSVVQT0RBVEw7CisJCW1hc2sgPSAodWludDE2X3QpMSA8PCAocGluIC0gMzIpOworCX0gZWxzZSB7CisJCW9mZnNldCA9IEdJVVBPREFUSDsKKwkJbWFzayA9ICh1aW50MTZfdCkxIDw8IChwaW4gLSA0OCk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdpdV9sb2NrLCBmbGFncyk7CisKKwlyZWcgPSBnaXVfcmVhZChvZmZzZXQpOworCWlmIChkYXRhID09IEdQSU9fREFUQV9ISUdIKQorCQlyZWcgfD0gbWFzazsKKwllbHNlCisJCXJlZyAmPSB+bWFzazsKKwlnaXVfd3JpdGUob2Zmc2V0LCByZWcpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2l1X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh2cjQxeHhfZ3Bpb19zZXRfcGluKTsKKworaW50IHZyNDF4eF9ncGlvX3NldF9kaXJlY3Rpb24odW5zaWduZWQgaW50IHBpbiwgZ3Bpb19kaXJlY3Rpb25fdCBkaXIpCit7CisJdWludDE2X3Qgb2Zmc2V0LCBtYXNrLCByZWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChwaW4gPj0gZ2l1X25yX3BpbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBpbiA8IDE2KSB7CisJCW9mZnNldCA9IEdJVUlPU0VMTDsKKwkJbWFzayA9ICh1aW50MTZfdCkxIDw8IHBpbjsKKwl9IGVsc2UgaWYgKHBpbiA8IDMyKSB7CisJCW9mZnNldCA9IEdJVUlPU0VMSDsKKwkJbWFzayA9ICh1aW50MTZfdCkxIDw8IChwaW4gLSAxNik7CisJfSBlbHNlIHsKKwkJaWYgKGdpdV9mbGFncyAmIEdQSU9fSEFTX09VVFBVVF9FTkFCTEUpIHsKKwkJCW9mZnNldCA9IEdJVVBPREFURU47CisJCQltYXNrID0gKHVpbnQxNl90KTEgPDwgKHBpbiAtIDMyKTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAocGluKSB7CisJCQljYXNlIDQ4OgorCQkJCW9mZnNldCA9IEdJVVBPREFUSDsKKwkJCQltYXNrID0gUElPRU4wOworCQkJCWJyZWFrOworCQkJY2FzZSA0OToKKwkJCQlvZmZzZXQgPSBHSVVQT0RBVEg7CisJCQkJbWFzayA9IFBJT0VOMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2l1X2xvY2ssIGZsYWdzKTsKKworCXJlZyA9IGdpdV9yZWFkKG9mZnNldCk7CisJaWYgKGRpciA9PSBHUElPX09VVFBVVCkKKwkJcmVnIHw9IG1hc2s7CisJZWxzZQorCQlyZWcgJj0gfm1hc2s7CisJZ2l1X3dyaXRlKG9mZnNldCwgcmVnKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdpdV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodnI0MXh4X2dwaW9fc2V0X2RpcmVjdGlvbik7CisKK2ludCB2cjQxeHhfZ3Bpb19wdWxsdXBkb3duKHVuc2lnbmVkIGludCBwaW4sIGdwaW9fcHVsbF90IHB1bGwpCit7CisJdWludDE2X3QgcmVnLCBtYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoKGdpdV9mbGFncyAmIEdQSU9fSEFTX1BVTExVUERPV05fSU8pICE9IEdQSU9fSEFTX1BVTExVUERPV05fSU8pCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAocGluID49IDE1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1hc2sgPSAodWludDE2X3QpMSA8PCBwaW47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2l1X2xvY2ssIGZsYWdzKTsKKworCWlmIChwdWxsID09IEdQSU9fUFVMTF9VUCB8fCBwdWxsID09IEdQSU9fUFVMTF9ET1dOKSB7CisJCXJlZyA9IGdpdV9yZWFkKEdJVVRFUk1VUEROKTsKKwkJaWYgKHB1bGwgPT0gR1BJT19QVUxMX1VQKQorCQkJcmVnIHw9IG1hc2s7CisJCWVsc2UKKwkJCXJlZyAmPSB+bWFzazsKKwkJZ2l1X3dyaXRlKEdJVVRFUk1VUEROLCByZWcpOworCisJCXJlZyA9IGdpdV9yZWFkKEdJVVVTRVVQRE4pOworCQlyZWcgfD0gbWFzazsKKwkJZ2l1X3dyaXRlKEdJVVVTRVVQRE4sIHJlZyk7CisJfSBlbHNlIHsKKwkJcmVnID0gZ2l1X3JlYWQoR0lVVVNFVVBETik7CisJCXJlZyAmPSB+bWFzazsKKwkJZ2l1X3dyaXRlKEdJVVVTRVVQRE4sIHJlZyk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2l1X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh2cjQxeHhfZ3Bpb19wdWxsdXBkb3duKTsKKworc3RhdGljIHNzaXplX3QgZ3Bpb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwl1bnNpZ25lZCBpbnQgcGluOworCWNoYXIgdmFsdWUgPSAnMCc7CisKKwlwaW4gPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWlmIChwaW4gPj0gZ2l1X25yX3BpbnMpCisJCXJldHVybiAtRUJBREY7CisKKwlpZiAodnI0MXh4X2dwaW9fZ2V0X3BpbihwaW4pID09IEdQSU9fREFUQV9ISUdIKQorCQl2YWx1ZSA9ICcxJzsKKworCWlmIChsZW4gPD0gMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAocHV0X3VzZXIodmFsdWUsIGJ1ZikpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGdwaW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCit7CisJdW5zaWduZWQgaW50IHBpbjsKKwlzaXplX3QgaTsKKwljaGFyIGM7CisJaW50IHJldHZhbCA9IDA7CisKKwlwaW4gPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWlmIChwaW4gPj0gZ2l1X25yX3BpbnMpCisJCXJldHVybiAtRUJBREY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGdldF91c2VyKGMsIGRhdGEgKyBpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXN3aXRjaCAoYykgeworCQljYXNlICcwJzoKKwkJCXJldHZhbCA9IHZyNDF4eF9ncGlvX3NldF9waW4ocGluLCBHUElPX0RBVEFfTE9XKTsKKwkJCWJyZWFrOworCQljYXNlICcxJzoKKwkJCXJldHZhbCA9IHZyNDF4eF9ncGlvX3NldF9waW4ocGluLCBHUElPX0RBVEFfSElHSCk7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlwcmludGsoS0VSTl9JTkZPICJHUElPJWQ6IHB1bGwgZG93blxuIiwgcGluKTsKKwkJCXJldHZhbCA9IHZyNDF4eF9ncGlvX3B1bGx1cGRvd24ocGluLCBHUElPX1BVTExfRE9XTik7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlwcmludGsoS0VSTl9JTkZPICJHUElPJWQ6IHB1bGwgdXAvZG93biBkaXNhYmxlXG4iLCBwaW4pOworCQkJcmV0dmFsID0gdnI0MXh4X2dwaW9fcHVsbHVwZG93bihwaW4sIEdQSU9fUFVMTF9ESVNBQkxFKTsKKwkJCWJyZWFrOworCQljYXNlICdJJzoKKwkJCXByaW50ayhLRVJOX0lORk8gIkdQSU8lZDogaW5wdXRcbiIsIHBpbik7CisJCQlyZXR2YWwgPSB2cjQxeHhfZ3Bpb19zZXRfZGlyZWN0aW9uKHBpbiwgR1BJT19JTlBVVCk7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQlwcmludGsoS0VSTl9JTkZPICJHUElPJWQ6IG91dHB1dFxuIiwgcGluKTsKKwkJCXJldHZhbCA9IHZyNDF4eF9ncGlvX3NldF9kaXJlY3Rpb24ocGluLCBHUElPX09VVFBVVCk7CisJCQlicmVhazsKKwkJY2FzZSAnbyc6CisJCQlwcmludGsoS0VSTl9JTkZPICJHUElPJWQ6IG91dHB1dCBkaXNhYmxlXG4iLCBwaW4pOworCQkJcmV0dmFsID0gdnI0MXh4X2dwaW9fc2V0X2RpcmVjdGlvbihwaW4sIEdQSU9fT1VUUFVUX0RJU0FCTEUpOworCQkJYnJlYWs7CisJCWNhc2UgJ1AnOgorCQkJcHJpbnRrKEtFUk5fSU5GTyAiR1BJTyVkOiBwdWxsIHVwXG4iLCBwaW4pOworCQkJcmV0dmFsID0gdnI0MXh4X2dwaW9fcHVsbHVwZG93bihwaW4sIEdQSU9fUFVMTF9VUCk7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlwcmludGsoS0VSTl9JTkZPICJHUElPJWQ6IHB1bGwgdXAvZG93biBkaXNhYmxlXG4iLCBwaW4pOworCQkJcmV0dmFsID0gdnI0MXh4X2dwaW9fcHVsbHVwZG93bihwaW4sIEdQSU9fUFVMTF9ESVNBQkxFKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGdwaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgcGluOworCisJcGluID0gaW1pbm9yKGlub2RlKTsKKwlpZiAocGluID49IGdpdV9ucl9waW5zKQorCQlyZXR1cm4gLUVCQURGOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IGdwaW9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgcGluOworCisJcGluID0gaW1pbm9yKGlub2RlKTsKKwlpZiAocGluID49IGdpdV9ucl9waW5zKQorCQlyZXR1cm4gLUVCQURGOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCT0gZ3Bpb19yZWFkLAorCS53cml0ZQkJPSBncGlvX3dyaXRlLAorCS5vcGVuCQk9IGdwaW9fb3BlbiwKKwkucmVsZWFzZQk9IGdwaW9fcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgZ2l1X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplLCBmbGFncyA9IDA7CisJdW5zaWduZWQgaW50IG5yX3BpbnMgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzMSwgKnJlczIgPSBOVUxMOworCXZvaWQgKmJhc2U7CisJaW50IHJldHZhbCwgaTsKKworCXN3aXRjaCAoY3VycmVudF9jcHVfZGF0YS5jcHV0eXBlKSB7CisJY2FzZSBDUFVfVlI0MTExOgorCWNhc2UgQ1BVX1ZSNDEyMToKKwkJc3RhcnQgPSBHSVVfVFlQRTFfU1RBUlQ7CisJCXNpemUgPSBHSVVfVFlQRTFfU0laRTsKKwkJZmxhZ3MgPSBHUElPX0hBU19QVUxMVVBET1dOX0lPOworCQlucl9waW5zID0gNTA7CisJCWJyZWFrOworCWNhc2UgQ1BVX1ZSNDEyMjoKKwljYXNlIENQVV9WUjQxMzE6CisJCXN0YXJ0ID0gR0lVX1RZUEUyX1NUQVJUOworCQlzaXplID0gR0lVX1RZUEUyX1NJWkU7CisJCW5yX3BpbnMgPSAzNjsKKwkJYnJlYWs7CisJY2FzZSBDUFVfVlI0MTMzOgorCQlzdGFydCA9IEdJVV9UWVBFM19TVEFSVDsKKwkJc2l6ZSA9IEdJVV9UWVBFM19TSVpFOworCQlmbGFncyA9IEdQSU9fSEFTX0lOVEVSUlVQVF9FREdFX1NFTEVDVDsKKwkJbnJfcGlucyA9IDQ4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXMxID0gcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBzaXplLCAiR0lVIik7CisJaWYgKHJlczEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWJhc2UgPSBpb3JlbWFwKHN0YXJ0LCBzaXplKTsKKwlpZiAoYmFzZSA9PSBOVUxMKSB7CisJCXJlbGVhc2VfcmVzb3VyY2UocmVzMSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChmbGFncyAmIEdQSU9fSEFTX1BVTExVUERPV05fSU8pIHsKKwkJcmVzMiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihHSVVfUFVMTFVQRE9XTl9TVEFSVCwgR0lVX1BVTExVUERPV05fU0laRSwgIkdJVSIpOworCQlpZiAocmVzMiA9PSBOVUxMKSB7CisJCQlpb3VubWFwKGJhc2UpOworCQkJcmVsZWFzZV9yZXNvdXJjZShyZXMxKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlyZXR2YWwgPSByZWdpc3Rlcl9jaHJkZXYobWFqb3IsICJHSVUiLCAmZ3Bpb19mb3BzKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlpb3VubWFwKGJhc2UpOworCQlyZWxlYXNlX3Jlc291cmNlKHJlczEpOworCQlyZWxlYXNlX3Jlc291cmNlKHJlczIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmIChtYWpvciA9PSAwKSB7CisJCW1ham9yID0gcmV0dmFsOworCQlwcmludGsoS0VSTl9JTkZPICJHSVU6IG1ham9yIG51bWJlciAlZFxuIiwgbWFqb3IpOworCX0KKworCXNwaW5fbG9ja19pbml0KCZnaXVfbG9jayk7CisJZ2l1X2Jhc2UgPSBiYXNlOworCWdpdV9yZXNvdXJjZTEgPSByZXMxOworCWdpdV9yZXNvdXJjZTIgPSByZXMyOworCWdpdV9mbGFncyA9IGZsYWdzOworCWdpdV9ucl9waW5zID0gbnJfcGluczsKKworCWdpdV93cml0ZShHSVVJTlRFTkwsIDApOworCWdpdV93cml0ZShHSVVJTlRFTkgsIDApOworCisJZm9yIChpID0gR0lVX0lSUV9CQVNFOyBpIDw9IEdJVV9JUlFfTEFTVDsgaSsrKSB7CisJCWlmIChpIDwgR0lVX0lSUShHSVVJTlRfSElHSF9PRkZTRVQpKQorCQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZnaXVpbnRfbG93X2lycV90eXBlOworCQllbHNlCisJCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmdpdWludF9oaWdoX2lycV90eXBlOworCX0KKworCXJldHVybiBjYXNjYWRlX2lycShHSVVJTlRfSVJRLCBnaXVfZ2V0X2lycSk7Cit9CisKK3N0YXRpYyBpbnQgZ2l1X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW91bm1hcChnaXVfYmFzZSk7CisKKwlyZWxlYXNlX3Jlc291cmNlKGdpdV9yZXNvdXJjZTEpOworCWlmIChnaXVfZmxhZ3MgJiBHUElPX0hBU19QVUxMVVBET1dOX0lPKQorCQlyZWxlYXNlX3Jlc291cmNlKGdpdV9yZXNvdXJjZTIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnaXVfcGxhdGZvcm1fZGV2aWNlOworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZ2l1X2RldmljZV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gIkdJVSIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IGdpdV9wcm9iZSwKKwkucmVtb3ZlCQk9IGdpdV9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2cjQxeHhfZ2l1X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJZ2l1X3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIkdJVSIsIC0xLCBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKGdpdV9wbGF0Zm9ybV9kZXZpY2UpKQorCQlyZXR1cm4gUFRSX0VSUihnaXVfcGxhdGZvcm1fZGV2aWNlKTsKKworCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmZ2l1X2RldmljZV9kcml2ZXIpOworCWlmIChyZXR2YWwgPCAwKQorCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihnaXVfcGxhdGZvcm1fZGV2aWNlKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2cjQxeHhfZ2l1X2V4aXQodm9pZCkKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZ2l1X2RldmljZV9kcml2ZXIpOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2l1X3BsYXRmb3JtX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHZyNDF4eF9naXVfaW5pdCk7Cittb2R1bGVfZXhpdCh2cjQxeHhfZ2l1X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvS2NvbmZpZyBiL2RyaXZlcnMvaWRlL0tjb25maWcKaW5kZXggM2FjMGE1My4uMDI3M2YxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lkZS9LY29uZmlnCkBAIC02NzIsOCArNjcyLDggQEAKIAkgIGNoaXBzZXRzLgogCiBjb25maWcgQkxLX0RFVl9TR0lJT0M0Ci0JdHJpc3RhdGUgIlNpbGljb24gR3JhcGhpY3MgSU9DNCBjaGlwc2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDCisJdHJpc3RhdGUgIlNpbGljb24gR3JhcGhpY3MgSU9DNCBjaGlwc2V0IEFUQS9BVEFQSSBzdXBwb3J0IgorCWRlcGVuZHMgb24gKElBNjRfU0dJX1NOMiB8fCBJQTY0X0dFTkVSSUMpICYmIFNHSV9JT0M0CiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyBQSU8gJiBNdWx0aU1vZGUgRE1BLTIgc3VwcG9ydCBmb3IgdGhlIFNHSSBJT0M0CiAJICBjaGlwc2V0LCB3aGljaCBoYXMgb25lIGNoYW5uZWwgYW5kIGNhbiBzdXBwb3J0IHR3byBkZXZpY2VzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKaW5kZXggNDY1MWEyMi4uYWY1MjZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2M0X2NvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvYzQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgpAQCAtNzE1LDE0ICs3MTUsMzQgQEAKIH07CiAKIGludAotaW9jNF9pZGVfYXR0YWNoX29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCitpb2M0X2lkZV9hdHRhY2hfb25lKHN0cnVjdCBpb2M0X2RyaXZlcl9kYXRhICppZGQpCiB7Ci0JcmV0dXJuIHBjaV9pbml0X3NnaWlvYzQoZGV2LCAmc2dpaW9jNF9jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdKTsKKwlyZXR1cm4gcGNpX2luaXRfc2dpaW9jNChpZGQtPmlkZF9wZGV2LAorCQkJCSZzZ2lpb2M0X2NoaXBzZXRzW2lkZC0+aWRkX3BjaV9pZC0+ZHJpdmVyX2RhdGFdKTsKIH0KIAorc3RhdGljIHN0cnVjdCBpb2M0X3N1Ym1vZHVsZSBpb2M0X2lkZV9zdWJtb2R1bGUgPSB7CisJLmlzX25hbWUgPSAiSU9DNF9pZGUiLAorCS5pc19vd25lciA9IFRISVNfTU9EVUxFLAorCS5pc19wcm9iZSA9IGlvYzRfaWRlX2F0dGFjaF9vbmUsCisvKgkuaXNfcmVtb3ZlID0gaW9jNF9pZGVfcmVtb3ZlX29uZSwJKi8KK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0Citpb2M0X2lkZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGlvYzRfcmVnaXN0ZXJfc3VibW9kdWxlKCZpb2M0X2lkZV9zdWJtb2R1bGUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK2lvYzRfaWRlX2V4aXQodm9pZCkKK3sKKwlpb2M0X3VucmVnaXN0ZXJfc3VibW9kdWxlKCZpb2M0X2lkZV9zdWJtb2R1bGUpOworfQorCittb2R1bGVfaW5pdChpb2M0X2lkZV9pbml0KTsKK21vZHVsZV9leGl0KGlvYzRfaWRlX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJBbmlrZXQgTWFsYXRwdXJlIC0gU2lsaWNvbiBHcmFwaGljcyBJbmMuIChTR0kpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklERSBQQ0kgZHJpdmVyIG1vZHVsZSBmb3IgU0dJIElPQzQgQmFzZS1JTyBDYXJkIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUVYUE9SVF9TWU1CT0woaW9jNF9pZGVfYXR0YWNoX29uZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKaW5kZXggOWI4ZmYzOS4uZTE1MmQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJfQogCiAJZ2FtZXBvcnRfY2xvc2UoZ2FtZXBvcnQpOwotCXJldHVybiAoY3B1X2RhdGFbX3NtcF9wcm9jZXNzb3JfaWQoKV0ubG9vcHNfcGVyX2ppZmZ5ICogKHVuc2lnbmVkIGxvbmcpSFogLyAoMTAwMCAvIDUwKSkgLyAodHggPCAxID8gMSA6IHR4KTsKKwlyZXR1cm4gKGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldLmxvb3BzX3Blcl9qaWZmeSAqICh1bnNpZ25lZCBsb25nKUhaIC8gKDEwMDAgLyA1MCkpIC8gKHR4IDwgMSA/IDEgOiB0eCk7CiAKICNlbHNlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvTWFrZWZpbGUgYi9kcml2ZXJzL21kL01ha2VmaWxlCmluZGV4IDkwZGU5YzEuLmQzZWZlZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIGRtLW11bHRpcGF0aC1vYmpzIDo9IGRtLWh3LWhhbmRsZXIubyBkbS1wYXRoLXNlbGVjdG9yLm8gZG0tbXBhdGgubwogZG0tc25hcHNob3Qtb2JqcyA6PSBkbS1zbmFwLm8gZG0tZXhjZXB0aW9uLXN0b3JlLm8KIGRtLW1pcnJvci1vYmpzCTo9IGRtLWxvZy5vIGRtLXJhaWQxLm8KK21kLW1vZC1vYmpzICAgICA6PSBtZC5vIGJpdG1hcC5vCiByYWlkNi1vYmpzCTo9IHJhaWQ2bWFpbi5vIHJhaWQ2YWxnb3MubyByYWlkNnJlY292Lm8gcmFpZDZ0YWJsZXMubyBcCiAJCSAgIHJhaWQ2aW50MS5vIHJhaWQ2aW50Mi5vIHJhaWQ2aW50NC5vIFwKIAkJICAgcmFpZDZpbnQ4Lm8gcmFpZDZpbnQxNi5vIHJhaWQ2aW50MzIubyBcCkBAIC0yOCw3ICsyOSw3IEBACiBvYmotJChDT05GSUdfTURfUkFJRDYpCQkrPSByYWlkNi5vIHhvci5vCiBvYmotJChDT05GSUdfTURfTVVMVElQQVRIKQkrPSBtdWx0aXBhdGgubwogb2JqLSQoQ09ORklHX01EX0ZBVUxUWSkJCSs9IGZhdWx0eS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9NRCkJKz0gbWQubworb2JqLSQoQ09ORklHX0JMS19ERVZfTUQpCSs9IG1kLW1vZC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9ETSkJKz0gZG0tbW9kLm8KIG9iai0kKENPTkZJR19ETV9DUllQVCkJCSs9IGRtLWNyeXB0Lm8KIG9iai0kKENPTkZJR19ETV9NVUxUSVBBVEgpCSs9IGRtLW11bHRpcGF0aC5vIGRtLXJvdW5kLXJvYmluLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvYml0bWFwLmMgYi9kcml2ZXJzL21kL2JpdG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OTgwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21kL2JpdG1hcC5jCkBAIC0wLDAgKzEsMTU4NiBAQAorLyoKKyAqIGJpdG1hcC5jIHR3by1sZXZlbCBiaXRtYXAgKEMpIFBldGVyIFQuIEJyZXVlciAocHRiQG90LnVjM20uZXMpIDIwMDMKKyAqCisgKiBiaXRtYXBfY3JlYXRlICAtIHNldHMgdXAgdGhlIGJpdG1hcCBzdHJ1Y3R1cmUKKyAqIGJpdG1hcF9kZXN0cm95IC0gZGVzdHJveXMgdGhlIGJpdG1hcCBzdHJ1Y3R1cmUKKyAqCisgKiBhZGRpdGlvbnMsIENvcHlyaWdodCAoQykgMjAwMy0yMDA0LCBQYXVsIENsZW1lbnRzLCBTdGVlbEV5ZSBUZWNobm9sb2d5LCBJbmMuOgorICogLSBhZGRlZCBkaXNrIHN0b3JhZ2UgZm9yIGJpdG1hcAorICogLSBjaGFuZ2VzIHRvIGFsbG93IHZhcmlvdXMgYml0bWFwIGNodW5rIHNpemVzCisgKiAtIGFkZGVkIGJpdG1hcCBkYWVtb24gKHRvIGFzeW5jaHJvbm91c2x5IGNsZWFyIGJpdG1hcCBiaXRzIGZyb20gZGlzaykKKyAqLworCisvKgorICogU3RpbGwgdG8gZG86CisgKgorICogZmx1c2ggYWZ0ZXIgcGVyY2VudCBzZXQgcmF0aGVyIHRoYW4ganVzdCB0aW1lIGJhc2VkLiAobWF5YmUgYm90aCkuCisgKiB3YWl0IGlmIGNvdW50IGdldHMgdG9vIGhpZ2gsIHdha2Ugd2hlbiBpdCBkcm9wcyB0byBoYWxmLgorICogYWxsb3cgYml0bWFwIHRvIGJlIG1pcnJvcmVkIHdpdGggc3VwZXJibG9jayAoYmVmb3JlIG9yIGFmdGVyLi4uKQorICogYWxsb3cgaG90LWFkZCB0byByZS1pbnN0YXRlIGEgY3VycmVudCBkZXZpY2UuCisgKiBhbGxvdyBob3QtYWRkIG9mIGJpdG1hcCBhZnRlciBxdWllc3NpbmcgZGV2aWNlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWlkL2JpdG1hcC5oPgorCisvKiBkZWJ1ZyBtYWNyb3MgKi8KKworI2RlZmluZSBERUJVRyAwCisKKyNpZiBERUJVRworLyogdGhlc2UgYXJlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seSEgKi8KKworLyogZGVmaW5lIG9uZSBhbmQgb25seSBvbmUgb2YgdGhlc2UgKi8KKyNkZWZpbmUgSU5KRUNUX0ZBVUxUU18xIDAgLyogY2F1c2UgYml0bWFwX2FsbG9jX3BhZ2UgdG8gZmFpbCBhbHdheXMgKi8KKyNkZWZpbmUgSU5KRUNUX0ZBVUxUU18yIDAgLyogY2F1c2UgYml0bWFwIGZpbGUgdG8gYmUga2lja2VkIHdoZW4gZmlyc3QgYml0IHNldCovCisjZGVmaW5lIElOSkVDVF9GQVVMVFNfMyAwIC8qIHRyZWF0IGJpdG1hcCBmaWxlIGFzIGtpY2tlZCBhdCBpbml0IHRpbWUgKi8KKyNkZWZpbmUgSU5KRUNUX0ZBVUxUU180IDAgLyogdW5kZWYgKi8KKyNkZWZpbmUgSU5KRUNUX0ZBVUxUU181IDAgLyogdW5kZWYgKi8KKyNkZWZpbmUgSU5KRUNUX0ZBVUxUU182IDAKKworLyogaWYgdGhlc2UgYXJlIGRlZmluZWQsIHRoZSBkcml2ZXIgd2lsbCBmYWlsISBkZWJ1ZyBvbmx5ICovCisjZGVmaW5lIElOSkVDVF9GQVRBTF9GQVVMVF8xIDAgLyogZmFpbCBrbWFsbG9jLCBjYXVzaW5nIGJpdG1hcF9jcmVhdGUgdG8gZmFpbCAqLworI2RlZmluZSBJTkpFQ1RfRkFUQUxfRkFVTFRfMiAwIC8qIHVuZGVmICovCisjZGVmaW5lIElOSkVDVF9GQVRBTF9GQVVMVF8zIDAgLyogdW5kZWYgKi8KKyNlbmRpZgorCisvLyNkZWZpbmUgRFBSSU5USyBQUklOVEsgLyogc2V0IHRoaXMgTlVMTCB0byBhdm9pZCB2ZXJib3NlIGRlYnVnIG91dHB1dCAqLworI2RlZmluZSBEUFJJTlRLKHguLi4pIGRvIHsgfSB3aGlsZSgwKQorCisjaWZuZGVmIFBSSU5USworIyAgaWYgREVCVUcgPiAwCisjICAgIGRlZmluZSBQUklOVEsoeC4uLikgcHJpbnRrKEtFUk5fREVCVUcgeCkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFBSSU5USyh4Li4uKQorIyAgZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGNoYXIgKiBibW5hbWUoc3RydWN0IGJpdG1hcCAqYml0bWFwKQoreworCXJldHVybiBiaXRtYXAtPm1kZGV2ID8gbWRuYW1lKGJpdG1hcC0+bWRkZXYpIDogIm1kWCI7Cit9CisKKworLyoKKyAqIHRlc3QgaWYgdGhlIGJpdG1hcCBpcyBhY3RpdmUKKyAqLworaW50IGJpdG1hcF9hY3RpdmUoc3RydWN0IGJpdG1hcCAqYml0bWFwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoIWJpdG1hcCkKKwkJcmV0dXJuIHJlczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJcmVzID0gYml0bWFwLT5mbGFncyAmIEJJVE1BUF9BQ1RJVkU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBXUklURV9QT09MX1NJWkUgMjU2CisvKiBtZW1wb29sIGZvciBxdWV1ZWluZyBwZW5kaW5nIHdyaXRlcyBvbiB0aGUgYml0bWFwIGZpbGUgKi8KK3N0YXRpYyB2b2lkICp3cml0ZV9wb29sX2FsbG9jKHVuc2lnbmVkIGludCBnZnBfZmxhZ3MsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlX2xpc3QpLCBnZnBfZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9wb29sX2ZyZWUodm9pZCAqcHRyLCB2b2lkICpkYXRhKQoreworCWtmcmVlKHB0cik7Cit9CisKKy8qCisgKiBqdXN0IGEgcGxhY2Vob2xkZXIgLSBjYWxscyBrbWFsbG9jIGZvciBiaXRtYXAgcGFnZXMKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmJpdG1hcF9hbGxvY19wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKK3sKKwl1bnNpZ25lZCBjaGFyICpwYWdlOworCisjaWYgSU5KRUNUX0ZBVUxUU18xCisJcGFnZSA9IE5VTEw7CisjZWxzZQorCXBhZ2UgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX05PSU8pOworI2VuZGlmCisJaWYgKCFwYWdlKQorCQlwcmludGsoIiVzOiBiaXRtYXBfYWxsb2NfcGFnZSBGQUlMRURcbiIsIGJtbmFtZShiaXRtYXApKTsKKwllbHNlCisJCVBSSU5USygiJXM6IGJpdG1hcF9hbGxvY19wYWdlOiBhbGxvY2F0ZWQgcGFnZSBhdCAlcFxuIiwKKwkJCWJtbmFtZShiaXRtYXApLCBwYWdlKTsKKwlyZXR1cm4gcGFnZTsKK30KKworLyoKKyAqIGZvciBub3cganVzdCBhIHBsYWNlaG9sZGVyIC0tIGp1c3QgY2FsbHMga2ZyZWUgZm9yIGJpdG1hcCBwYWdlcworICovCitzdGF0aWMgdm9pZCBiaXRtYXBfZnJlZV9wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgdW5zaWduZWQgY2hhciAqcGFnZSkKK3sKKwlQUklOVEsoIiVzOiBiaXRtYXBfZnJlZV9wYWdlOiBmcmVlIHBhZ2UgJXBcbiIsIGJtbmFtZShiaXRtYXApLCBwYWdlKTsKKwlrZnJlZShwYWdlKTsKK30KKworLyoKKyAqIGNoZWNrIGEgcGFnZSBhbmQsIGlmIG5lY2Vzc2FyeSwgYWxsb2NhdGUgaXQgKG9yIGhpamFjayBpdCBpZiB0aGUgYWxsb2MgZmFpbHMpCisgKgorICogMSkgY2hlY2sgdG8gc2VlIGlmIHRoaXMgcGFnZSBpcyBhbGxvY2F0ZWQsIGlmIGl0J3Mgbm90IHRoZW4gdHJ5IHRvIGFsbG9jCisgKiAyKSBpZiB0aGUgYWxsb2MgZmFpbHMsIHNldCB0aGUgcGFnZSdzIGhpamFja2VkIGZsYWcgc28gd2UnbGwgdXNlIHRoZQorICogICAgcGFnZSBwb2ludGVyIGRpcmVjdGx5IGFzIGEgY291bnRlcgorICoKKyAqIGlmIHdlIGZpbmQgb3VyIHBhZ2UsIHdlIGluY3JlbWVudCB0aGUgcGFnZSdzIHJlZmNvdW50IHNvIHRoYXQgaXQgc3RheXMKKyAqIGFsbG9jYXRlZCB3aGlsZSB3ZSdyZSB1c2luZyBpdAorICovCitzdGF0aWMgaW50IGJpdG1hcF9jaGVja3BhZ2Uoc3RydWN0IGJpdG1hcCAqYml0bWFwLCB1bnNpZ25lZCBsb25nIHBhZ2UsIGludCBjcmVhdGUpCit7CisJdW5zaWduZWQgY2hhciAqbWFwcGFnZTsKKworCWlmIChwYWdlID49IGJpdG1hcC0+cGFnZXMpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQKKwkJCSIlczogaW52YWxpZCBiaXRtYXAgcGFnZSByZXF1ZXN0OiAlbHUgKD4gJWx1KVxuIiwKKwkJCWJtbmFtZShiaXRtYXApLCBwYWdlLCBiaXRtYXAtPnBhZ2VzLTEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKworCWlmIChiaXRtYXAtPmJwW3BhZ2VdLmhpamFja2VkKSAvKiBpdCdzIGhpamFja2VkLCBkb24ndCB0cnkgdG8gYWxsb2MgKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoYml0bWFwLT5icFtwYWdlXS5tYXApIC8qIHBhZ2UgaXMgYWxyZWFkeSBhbGxvY2F0ZWQsIGp1c3QgcmV0dXJuICovCisJCXJldHVybiAwOworCisJaWYgKCFjcmVhdGUpCisJCXJldHVybiAtRU5PRU5UOworCisJc3Bpbl91bmxvY2tfaXJxKCZiaXRtYXAtPmxvY2spOworCisJLyogdGhpcyBwYWdlIGhhcyBub3QgYmVlbiBhbGxvY2F0ZWQgeWV0ICovCisKKwlpZiAoKG1hcHBhZ2UgPSBiaXRtYXBfYWxsb2NfcGFnZShiaXRtYXApKSA9PSBOVUxMKSB7CisJCVBSSU5USygiJXM6IGJpdG1hcCBtYXAgcGFnZSBhbGxvY2F0aW9uIGZhaWxlZCwgaGlqYWNraW5nXG4iLAorCQkJYm1uYW1lKGJpdG1hcCkpOworCQkvKiBmYWlsZWQgLSBzZXQgdGhlIGhpamFja2VkIGZsYWcgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZQorCQkgKiBwb2ludGVyIGFzIGEgY291bnRlciAqLworCQlzcGluX2xvY2tfaXJxKCZiaXRtYXAtPmxvY2spOworCQlpZiAoIWJpdG1hcC0+YnBbcGFnZV0ubWFwKQorCQkJYml0bWFwLT5icFtwYWdlXS5oaWphY2tlZCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGdvdCBhIHBhZ2UgKi8KKworCXNwaW5fbG9ja19pcnEoJmJpdG1hcC0+bG9jayk7CisKKwkvKiByZWNoZWNrIHRoZSBwYWdlICovCisKKwlpZiAoYml0bWFwLT5icFtwYWdlXS5tYXAgfHwgYml0bWFwLT5icFtwYWdlXS5oaWphY2tlZCkgeworCQkvKiBzb21lYm9keSBiZWF0IHVzIHRvIGdldHRpbmcgdGhlIHBhZ2UgKi8KKwkJYml0bWFwX2ZyZWVfcGFnZShiaXRtYXAsIG1hcHBhZ2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBubyBwYWdlIHdhcyBpbiBwbGFjZSBhbmQgd2UgaGF2ZSBvbmUsIHNvIGluc3RhbGwgaXQgKi8KKworCW1lbXNldChtYXBwYWdlLCAwLCBQQUdFX1NJWkUpOworCWJpdG1hcC0+YnBbcGFnZV0ubWFwID0gbWFwcGFnZTsKKwliaXRtYXAtPm1pc3NpbmdfcGFnZXMtLTsKK291dDoKKwlyZXR1cm4gMDsKK30KKworCisvKiBpZiBwYWdlIGlzIGNvbXBsZXRlbHkgZW1wdHksIHB1dCBpdCBiYWNrIG9uIHRoZSBmcmVlIGxpc3QsIG9yIGRlYWxsb2MgaXQgKi8KKy8qIGlmIHBhZ2Ugd2FzIGhpamFja2VkLCB1bm1hcmsgdGhlIGZsYWcgc28gaXQgbWlnaHQgZ2V0IGFsbG9jZWQgbmV4dCB0aW1lICovCisvKiBOb3RlOiBsb2NrIHNob3VsZCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzICovCitzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NoZWNrZnJlZShzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwljaGFyICpwdHI7CisKKwlpZiAoYml0bWFwLT5icFtwYWdlXS5jb3VudCkgLyogcGFnZSBpcyBzdGlsbCBidXN5ICovCisJCXJldHVybjsKKworCS8qIHBhZ2UgaXMgbm8gbG9uZ2VyIGluIHVzZSwgaXQgY2FuIGJlIHJlbGVhc2VkICovCisKKwlpZiAoYml0bWFwLT5icFtwYWdlXS5oaWphY2tlZCkgeyAvKiBwYWdlIHdhcyBoaWphY2tlZCwgdW5kbyB0aGlzIG5vdyAqLworCQliaXRtYXAtPmJwW3BhZ2VdLmhpamFja2VkID0gMDsKKwkJYml0bWFwLT5icFtwYWdlXS5tYXAgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJLyogbm9ybWFsIGNhc2UsIGZyZWUgdGhlIHBhZ2UgKi8KKworI2lmIDAKKy8qIGFjdHVhbGx5IC4uLiBsZXQncyBub3QuICBXZSB3aWxsIHByb2JhYmx5IG5lZWQgdGhlIHBhZ2UgYWdhaW4gZXhhY3RseSB3aGVuCisgKiBtZW1vcnkgaXMgdGlnaHQgYW5kIHdlIGFyZSBmbHVzaW5nIHRvIGRpc2sKKyAqLworCXJldHVybjsKKyNlbHNlCisJcHRyID0gYml0bWFwLT5icFtwYWdlXS5tYXA7CisJYml0bWFwLT5icFtwYWdlXS5tYXAgPSBOVUxMOworCWJpdG1hcC0+bWlzc2luZ19wYWdlcysrOworCWJpdG1hcF9mcmVlX3BhZ2UoYml0bWFwLCBwdHIpOworCXJldHVybjsKKyNlbmRpZgorfQorCisKKy8qCisgKiBiaXRtYXAgZmlsZSBoYW5kbGluZyAtIHJlYWQgYW5kIHdyaXRlIHRoZSBiaXRtYXAgZmlsZSBhbmQgaXRzIHN1cGVyYmxvY2sKKyAqLworCisvKiBjb3B5IHRoZSBwYXRobmFtZSBvZiBhIGZpbGUgdG8gYSBidWZmZXIgKi8KK2NoYXIgKmZpbGVfcGF0aChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IGRlbnRyeSAqZDsKKwlzdHJ1Y3QgdmZzbW91bnQgKnY7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisKKwlkID0gZmlsZS0+Zl9kZW50cnk7CisJdiA9IGZpbGUtPmZfdmZzbW50OworCisJYnVmID0gZF9wYXRoKGQsIHYsIGJ1ZiwgY291bnQpOworCisJcmV0dXJuIElTX0VSUihidWYpID8gTlVMTCA6IGJ1ZjsKK30KKworLyoKKyAqIGJhc2ljIHBhZ2UgSS9PIG9wZXJhdGlvbnMKKyAqLworCisvKiBJTyBvcGVyYXRpb25zIHdoZW4gYml0bWFwIGlzIHN0b3JlZCBuZWFyIGFsbCBzdXBlcmJsb2NrcyAqLworc3RhdGljIHN0cnVjdCBwYWdlICpyZWFkX3NiX3BhZ2UobWRkZXZfdCAqbWRkZXYsIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGluZGV4KQoreworCS8qIGNob29zZSBhIGdvb2QgcmRldiBhbmQgcmVhZCB0aGUgcGFnZSBmcm9tIHRoZXJlICovCisKKwltZGtfcmRldl90ICpyZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJc2VjdG9yX3QgdGFyZ2V0OworCisJaWYgKCFwYWdlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlkbyB7CisJCUlURVJBVEVfUkRFVihtZGRldiwgcmRldiwgdG1wKQorCQkJaWYgKHJkZXYtPmluX3N5bmMgJiYgIXJkZXYtPmZhdWx0eSkKKwkJCQlnb3RvIGZvdW5kOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKworCWZvdW5kOgorCQl0YXJnZXQgPSAocmRldi0+c2Jfb2Zmc2V0IDw8IDEpICsgb2Zmc2V0ICsgaW5kZXggKiAoUEFHRV9TSVpFLzUxMik7CisKKwl9IHdoaWxlICghc3luY19wYWdlX2lvKHJkZXYtPmJkZXYsIHRhcmdldCwgUEFHRV9TSVpFLCBwYWdlLCBSRUFEKSk7CisKKwlwYWdlLT5pbmRleCA9IGluZGV4OworCXJldHVybiBwYWdlOworfQorCitzdGF0aWMgaW50IHdyaXRlX3NiX3BhZ2UobWRkZXZfdCAqbWRkZXYsIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHdhaXQpCit7CisJbWRrX3JkZXZfdCAqcmRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisKKwlJVEVSQVRFX1JERVYobWRkZXYsIHJkZXYsIHRtcCkKKwkJaWYgKHJkZXYtPmluX3N5bmMgJiYgIXJkZXYtPmZhdWx0eSkKKwkJCW1kX3N1cGVyX3dyaXRlKG1kZGV2LCByZGV2LAorCQkJCSAgICAgICAocmRldi0+c2Jfb2Zmc2V0PDwxKSArIG9mZnNldAorCQkJCSAgICAgICArIHBhZ2UtPmluZGV4ICogKFBBR0VfU0laRS81MTIpLAorCQkJCSAgICAgICBQQUdFX1NJWkUsCisJCQkJICAgICAgIHBhZ2UpOworCisJaWYgKHdhaXQpCisJCXdhaXRfZXZlbnQobWRkZXYtPnNiX3dhaXQsIGF0b21pY19yZWFkKCZtZGRldi0+cGVuZGluZ193cml0ZXMpPT0wKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHdyaXRlIG91dCBhIHBhZ2UgdG8gYSBmaWxlCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfcGFnZShzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgd2FpdCkKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWlmIChiaXRtYXAtPmZpbGUgPT0gTlVMTCkKKwkJcmV0dXJuIHdyaXRlX3NiX3BhZ2UoYml0bWFwLT5tZGRldiwgYml0bWFwLT5vZmZzZXQsIHBhZ2UsIHdhaXQpOworCisJaWYgKHdhaXQpCisJCWxvY2tfcGFnZShwYWdlKTsKKwllbHNlIHsKKwkJaWYgKFRlc3RTZXRQYWdlTG9ja2VkKHBhZ2UpKQorCQkJcmV0dXJuIC1FQUdBSU47IC8qIGFscmVhZHkgbG9ja2VkICovCisJCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpKSB7CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJfQorCisJcmV0ID0gcGFnZS0+bWFwcGluZy0+YV9vcHMtPnByZXBhcmVfd3JpdGUoTlVMTCwgcGFnZSwgMCwgUEFHRV9TSVpFKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcGFnZS0+bWFwcGluZy0+YV9vcHMtPmNvbW1pdF93cml0ZShOVUxMLCBwYWdlLCAwLAorCQkJUEFHRV9TSVpFKTsKKwlpZiAocmV0KSB7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNldF9wYWdlX2RpcnR5KHBhZ2UpOyAvKiBmb3JjZSBpdCB0byBiZSB3cml0dGVuIG91dCAqLworCisJaWYgKCF3YWl0KSB7CisJCS8qIGFkZCB0byBsaXN0IHRvIGJlIHdhaXRlZCBmb3IgYnkgZGFlbW9uICovCisJCXN0cnVjdCBwYWdlX2xpc3QgKml0ZW0gPSBtZW1wb29sX2FsbG9jKGJpdG1hcC0+d3JpdGVfcG9vbCwgR0ZQX05PSU8pOworCQlpdGVtLT5wYWdlID0gcGFnZTsKKwkJcGFnZV9jYWNoZV9nZXQocGFnZSk7CisJCXNwaW5fbG9jaygmYml0bWFwLT53cml0ZV9sb2NrKTsKKwkJbGlzdF9hZGQoJml0ZW0tPmxpc3QsICZiaXRtYXAtPmNvbXBsZXRlX3BhZ2VzKTsKKwkJc3Bpbl91bmxvY2soJmJpdG1hcC0+d3JpdGVfbG9jayk7CisJCW1kX3dha2V1cF90aHJlYWQoYml0bWFwLT53cml0ZWJhY2tfZGFlbW9uKTsKKwl9CisJcmV0dXJuIHdyaXRlX29uZV9wYWdlKHBhZ2UsIHdhaXQpOworfQorCisvKiByZWFkIGEgcGFnZSBmcm9tIGEgZmlsZSwgcGlubmluZyBpdCBpbnRvIGNhY2hlLCBhbmQgcmV0dXJuIGJ5dGVzX3JlYWQgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqcmVhZF9wYWdlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJCQl1bnNpZ25lZCBsb25nICpieXRlc19yZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOworCWxvZmZfdCBpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwl1bnNpZ25lZCBsb25nIGVuZF9pbmRleCA9IGlzaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisKKwlQUklOVEsoInJlYWQgYml0bWFwIGZpbGUgKCVkQiBAICVMdSlcbiIsIChpbnQpUEFHRV9DQUNIRV9TSVpFLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKTsKKworCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5kZXgsCisJCQkoZmlsbGVyX3QgKilpbm9kZS0+aV9tYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2UsIGZpbGUpOworCWlmIChJU19FUlIocGFnZSkpCisJCWdvdG8gb3V0OworCXdhaXRfb25fcGFnZV9sb2NrZWQocGFnZSk7CisJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkgfHwgUGFnZUVycm9yKHBhZ2UpKSB7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJcGFnZSA9IEVSUl9QVFIoLUVJTyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpbmRleCA+IGVuZF9pbmRleCkgLyogd2UgaGF2ZSByZWFkIGJleW9uZCBFT0YgKi8KKwkJKmJ5dGVzX3JlYWQgPSAwOworCWVsc2UgaWYgKGluZGV4ID09IGVuZF9pbmRleCkgLyogcG9zc2libGUgc2hvcnQgcmVhZCAqLworCQkqYnl0ZXNfcmVhZCA9IGlzaXplICYgflBBR0VfQ0FDSEVfTUFTSzsKKwllbHNlCisJCSpieXRlc19yZWFkID0gUEFHRV9DQUNIRV9TSVpFOyAvKiBnb3QgYSBmdWxsIHBhZ2UgKi8KK291dDoKKwlpZiAoSVNfRVJSKHBhZ2UpKQorCQlwcmludGsoS0VSTl9BTEVSVCAibWQ6IGJpdG1hcCByZWFkIGVycm9yOiAoJWRCIEAgJUx1KTogJWxkXG4iLAorCQkJKGludClQQUdFX0NBQ0hFX1NJWkUsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQsCisJCQlQVFJfRVJSKHBhZ2UpKTsKKwlyZXR1cm4gcGFnZTsKK30KKworLyoKKyAqIGJpdG1hcCBmaWxlIHN1cGVyYmxvY2sgb3BlcmF0aW9ucworICovCisKKy8qIHVwZGF0ZSB0aGUgZXZlbnQgY291bnRlciBhbmQgc3luYyB0aGUgc3VwZXJibG9jayB0byBkaXNrICovCitpbnQgYml0bWFwX3VwZGF0ZV9zYihzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJYml0bWFwX3N1cGVyX3QgKnNiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWJpdG1hcCB8fCAhYml0bWFwLT5tZGRldikgLyogbm8gYml0bWFwIGZvciB0aGlzIGFycmF5ICovCisJCXJldHVybiAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWJpdG1hcC0+c2JfcGFnZSkgeyAvKiBubyBzdXBlcmJsb2NrICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJc2IgPSAoYml0bWFwX3N1cGVyX3QgKilrbWFwKGJpdG1hcC0+c2JfcGFnZSk7CisJc2ItPmV2ZW50cyA9IGNwdV90b19sZTY0KGJpdG1hcC0+bWRkZXYtPmV2ZW50cyk7CisJaWYgKCFiaXRtYXAtPm1kZGV2LT5kZWdyYWRlZCkKKwkJc2ItPmV2ZW50c19jbGVhcmVkID0gY3B1X3RvX2xlNjQoYml0bWFwLT5tZGRldi0+ZXZlbnRzKTsKKwlrdW5tYXAoYml0bWFwLT5zYl9wYWdlKTsKKwlyZXR1cm4gd3JpdGVfcGFnZShiaXRtYXAsIGJpdG1hcC0+c2JfcGFnZSwgMSk7Cit9CisKKy8qIHByaW50IG91dCB0aGUgYml0bWFwIGZpbGUgc3VwZXJibG9jayAqLwordm9pZCBiaXRtYXBfcHJpbnRfc2Ioc3RydWN0IGJpdG1hcCAqYml0bWFwKQoreworCWJpdG1hcF9zdXBlcl90ICpzYjsKKworCWlmICghYml0bWFwIHx8ICFiaXRtYXAtPnNiX3BhZ2UpCisJCXJldHVybjsKKwlzYiA9IChiaXRtYXBfc3VwZXJfdCAqKWttYXAoYml0bWFwLT5zYl9wYWdlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJpdG1hcCBmaWxlIHN1cGVyYmxvY2s6XG4iLCBibW5hbWUoYml0bWFwKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICAgIG1hZ2ljOiAlMDh4XG4iLCBsZTMyX3RvX2NwdShzYi0+bWFnaWMpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICAgICAgIHZlcnNpb246ICVkXG4iLCBsZTMyX3RvX2NwdShzYi0+dmVyc2lvbikpOworCXByaW50ayhLRVJOX0RFQlVHICIgICAgICAgICAgdXVpZDogJTA4eC4lMDh4LiUwOHguJTA4eFxuIiwKKwkJCQkJKihfX3UzMiAqKShzYi0+dXVpZCswKSwKKwkJCQkJKihfX3UzMiAqKShzYi0+dXVpZCs0KSwKKwkJCQkJKihfX3UzMiAqKShzYi0+dXVpZCs4KSwKKwkJCQkJKihfX3UzMiAqKShzYi0+dXVpZCsxMikpOworCXByaW50ayhLRVJOX0RFQlVHICIgICAgICAgIGV2ZW50czogJWxsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KHNiLT5ldmVudHMpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiZXZlbnRzIGNsZWFyZWQ6ICVsbHVcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShzYi0+ZXZlbnRzX2NsZWFyZWQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICAgICAgICAgc3RhdGU6ICUwOHhcbiIsIGxlMzJfdG9fY3B1KHNiLT5zdGF0ZSkpOworCXByaW50ayhLRVJOX0RFQlVHICIgICAgIGNodW5rc2l6ZTogJWQgQlxuIiwgbGUzMl90b19jcHUoc2ItPmNodW5rc2l6ZSkpOworCXByaW50ayhLRVJOX0RFQlVHICIgIGRhZW1vbiBzbGVlcDogJWRzXG4iLCBsZTMyX3RvX2NwdShzYi0+ZGFlbW9uX3NsZWVwKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgc3luYyBzaXplOiAlbGx1IEtCXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShzYi0+c3luY19zaXplKS8yKTsKKwlrdW5tYXAoYml0bWFwLT5zYl9wYWdlKTsKK30KKworLyogcmVhZCB0aGUgc3VwZXJibG9jayBmcm9tIHRoZSBiaXRtYXAgZmlsZSBhbmQgaW5pdGlhbGl6ZSBzb21lIGJpdG1hcCBmaWVsZHMgKi8KK3N0YXRpYyBpbnQgYml0bWFwX3JlYWRfc2Ioc3RydWN0IGJpdG1hcCAqYml0bWFwKQoreworCWNoYXIgKnJlYXNvbiA9IE5VTEw7CisJYml0bWFwX3N1cGVyX3QgKnNiOworCXVuc2lnbmVkIGxvbmcgY2h1bmtzaXplLCBkYWVtb25fc2xlZXA7CisJdW5zaWduZWQgbG9uZyBieXRlc19yZWFkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBldmVudHM7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwkvKiBwYWdlIDAgaXMgdGhlIHN1cGVyYmxvY2ssIHJlYWQgaXQuLi4gKi8KKwlpZiAoYml0bWFwLT5maWxlKQorCQliaXRtYXAtPnNiX3BhZ2UgPSByZWFkX3BhZ2UoYml0bWFwLT5maWxlLCAwLCAmYnl0ZXNfcmVhZCk7CisJZWxzZSB7CisJCWJpdG1hcC0+c2JfcGFnZSA9IHJlYWRfc2JfcGFnZShiaXRtYXAtPm1kZGV2LCBiaXRtYXAtPm9mZnNldCwgMCk7CisJCWJ5dGVzX3JlYWQgPSBQQUdFX1NJWkU7CisJfQorCWlmIChJU19FUlIoYml0bWFwLT5zYl9wYWdlKSkgeworCQllcnIgPSBQVFJfRVJSKGJpdG1hcC0+c2JfcGFnZSk7CisJCWJpdG1hcC0+c2JfcGFnZSA9IE5VTEw7CisJCXJldHVybiBlcnI7CisJfQorCisJc2IgPSAoYml0bWFwX3N1cGVyX3QgKilrbWFwKGJpdG1hcC0+c2JfcGFnZSk7CisKKwlpZiAoYnl0ZXNfcmVhZCA8IHNpemVvZigqc2IpKSB7IC8qIHNob3J0IHJlYWQgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGJpdG1hcCBmaWxlIHN1cGVyYmxvY2sgdHJ1bmNhdGVkXG4iLAorCQkJYm1uYW1lKGJpdG1hcCkpOworCQllcnIgPSAtRU5PU1BDOworCQlnb3RvIG91dDsKKwl9CisKKwljaHVua3NpemUgPSBsZTMyX3RvX2NwdShzYi0+Y2h1bmtzaXplKTsKKwlkYWVtb25fc2xlZXAgPSBsZTMyX3RvX2NwdShzYi0+ZGFlbW9uX3NsZWVwKTsKKworCS8qIHZlcmlmeSB0aGF0IHRoZSBiaXRtYXAtc3BlY2lmaWMgZmllbGRzIGFyZSB2YWxpZCAqLworCWlmIChzYi0+bWFnaWMgIT0gY3B1X3RvX2xlMzIoQklUTUFQX01BR0lDKSkKKwkJcmVhc29uID0gImJhZCBtYWdpYyI7CisJZWxzZSBpZiAoc2ItPnZlcnNpb24gIT0gY3B1X3RvX2xlMzIoQklUTUFQX01BSk9SKSkKKwkJcmVhc29uID0gInVucmVjb2duaXplZCBzdXBlcmJsb2NrIHZlcnNpb24iOworCWVsc2UgaWYgKGNodW5rc2l6ZSA8IDUxMiB8fCBjaHVua3NpemUgPiAoMTAyNCAqIDEwMjQgKiA0KSkKKwkJcmVhc29uID0gImJpdG1hcCBjaHVua3NpemUgb3V0IG9mIHJhbmdlICg1MTJCIC0gNE1CKSI7CisJZWxzZSBpZiAoKDEgPDwgZmZ6KH5jaHVua3NpemUpKSAhPSBjaHVua3NpemUpCisJCXJlYXNvbiA9ICJiaXRtYXAgY2h1bmtzaXplIG5vdCBhIHBvd2VyIG9mIDIiOworCWVsc2UgaWYgKGRhZW1vbl9zbGVlcCA8IDEgfHwgZGFlbW9uX3NsZWVwID4gMTUpCisJCXJlYXNvbiA9ICJkYWVtb24gc2xlZXAgcGVyaW9kIG91dCBvZiByYW5nZSI7CisJaWYgKHJlYXNvbikgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBiaXRtYXAgZmlsZSBzdXBlcmJsb2NrOiAlc1xuIiwKKwkJCWJtbmFtZShiaXRtYXApLCByZWFzb24pOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBrZWVwIHRoZSBhcnJheSBzaXplIGZpZWxkIG9mIHRoZSBiaXRtYXAgc3VwZXJibG9jayB1cCB0byBkYXRlICovCisJc2ItPnN5bmNfc2l6ZSA9IGNwdV90b19sZTY0KGJpdG1hcC0+bWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyk7CisKKwlpZiAoIWJpdG1hcC0+bWRkZXYtPnBlcnNpc3RlbnQpCisJCWdvdG8gc3VjY2VzczsKKworCS8qCisJICogaWYgd2UgaGF2ZSBhIHBlcnNpc3RlbnQgYXJyYXkgc3VwZXJibG9jaywgY29tcGFyZSB0aGUKKwkgKiBiaXRtYXAncyBVVUlEIGFuZCBldmVudCBjb3VudGVyIHRvIHRoZSBtZGRldidzCisJICovCisJaWYgKG1lbWNtcChzYi0+dXVpZCwgYml0bWFwLT5tZGRldi0+dXVpZCwgMTYpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBiaXRtYXAgc3VwZXJibG9jayBVVUlEIG1pc21hdGNoXG4iLAorCQkJYm1uYW1lKGJpdG1hcCkpOworCQlnb3RvIG91dDsKKwl9CisJZXZlbnRzID0gbGU2NF90b19jcHUoc2ItPmV2ZW50cyk7CisJaWYgKGV2ZW50cyA8IGJpdG1hcC0+bWRkZXYtPmV2ZW50cykgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogYml0bWFwIGZpbGUgaXMgb3V0IG9mIGRhdGUgKCVsbHUgPCAlbGx1KSAiCisJCQkiLS0gZm9yY2luZyBmdWxsIHJlY292ZXJ5XG4iLCBibW5hbWUoYml0bWFwKSwgZXZlbnRzLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgYml0bWFwLT5tZGRldi0+ZXZlbnRzKTsKKwkJc2ItPnN0YXRlIHw9IEJJVE1BUF9TVEFMRTsKKwl9CitzdWNjZXNzOgorCS8qIGFzc2lnbiBmaWVsZHMgdXNpbmcgdmFsdWVzIGZyb20gc3VwZXJibG9jayAqLworCWJpdG1hcC0+Y2h1bmtzaXplID0gY2h1bmtzaXplOworCWJpdG1hcC0+ZGFlbW9uX3NsZWVwID0gZGFlbW9uX3NsZWVwOworCWJpdG1hcC0+ZmxhZ3MgfD0gc2ItPnN0YXRlOworCWJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPSBsZTY0X3RvX2NwdShzYi0+ZXZlbnRzX2NsZWFyZWQpOworCWVyciA9IDA7CitvdXQ6CisJa3VubWFwKGJpdG1hcC0+c2JfcGFnZSk7CisJaWYgKGVycikKKwkJYml0bWFwX3ByaW50X3NiKGJpdG1hcCk7CisJcmV0dXJuIGVycjsKK30KKworZW51bSBiaXRtYXBfbWFza19vcCB7CisJTUFTS19TRVQsCisJTUFTS19VTlNFVAorfTsKKworLyogcmVjb3JkIHRoZSBzdGF0ZSBvZiB0aGUgYml0bWFwIGluIHRoZSBzdXBlcmJsb2NrICovCitzdGF0aWMgdm9pZCBiaXRtYXBfbWFza19zdGF0ZShzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIGVudW0gYml0bWFwX3N0YXRlIGJpdHMsCisJCQkJZW51bSBiaXRtYXBfbWFza19vcCBvcCkKK3sKKwliaXRtYXBfc3VwZXJfdCAqc2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWJpdG1hcCB8fCAhYml0bWFwLT5zYl9wYWdlKSB7IC8qIGNhbid0IHNldCB0aGUgc3RhdGUgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJcGFnZV9jYWNoZV9nZXQoYml0bWFwLT5zYl9wYWdlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwlzYiA9IChiaXRtYXBfc3VwZXJfdCAqKWttYXAoYml0bWFwLT5zYl9wYWdlKTsKKwlzd2l0Y2ggKG9wKSB7CisJCWNhc2UgTUFTS19TRVQ6IHNiLT5zdGF0ZSB8PSBiaXRzOworCQkJCWJyZWFrOworCQljYXNlIE1BU0tfVU5TRVQ6IHNiLT5zdGF0ZSAmPSB+Yml0czsKKwkJCQlicmVhazsKKwkJZGVmYXVsdDogQlVHKCk7CisJfQorCWt1bm1hcChiaXRtYXAtPnNiX3BhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShiaXRtYXAtPnNiX3BhZ2UpOworfQorCisvKgorICogZ2VuZXJhbCBiaXRtYXAgZmlsZSBvcGVyYXRpb25zCisgKi8KKworLyogY2FsY3VsYXRlIHRoZSBpbmRleCBvZiB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIHRoaXMgYml0ICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmlsZV9wYWdlX2luZGV4KHVuc2lnbmVkIGxvbmcgY2h1bmspCit7CisJcmV0dXJuIENIVU5LX0JJVF9PRkZTRVQoY2h1bmspID4+IFBBR0VfQklUX1NISUZUOworfQorCisvKiBjYWxjdWxhdGUgdGhlIChiaXQpIG9mZnNldCBvZiB0aGlzIGJpdCB3aXRoaW4gYSBwYWdlICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmlsZV9wYWdlX29mZnNldCh1bnNpZ25lZCBsb25nIGNodW5rKQoreworCXJldHVybiBDSFVOS19CSVRfT0ZGU0VUKGNodW5rKSAmIChQQUdFX0JJVFMgLSAxKTsKK30KKworLyoKKyAqIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHBhZ2UgaW4gdGhlIGZpbGVtYXAgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gYml0CisgKgorICogdGhpcyBsb29rdXAgaXMgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUgYml0bWFwIHNiIG1pZ2h0IGJlIGV4YWN0bHkKKyAqIDEgcGFnZSAoZS5nLiwgeDg2KSBvciBsZXNzIHRoYW4gMSBwYWdlIC0tIHNvIHRoZSBiaXRtYXAgbWlnaHQgc3RhcnQgb24gcGFnZQorICogMCBvciBwYWdlIDEKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZmlsZW1hcF9nZXRfcGFnZShzdHJ1Y3QgYml0bWFwICpiaXRtYXAsCisJCQkJCXVuc2lnbmVkIGxvbmcgY2h1bmspCit7CisJcmV0dXJuIGJpdG1hcC0+ZmlsZW1hcFtmaWxlX3BhZ2VfaW5kZXgoY2h1bmspIC0gZmlsZV9wYWdlX2luZGV4KDApXTsKK30KKworCitzdGF0aWMgdm9pZCBiaXRtYXBfZmlsZV91bm1hcChzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJc3RydWN0IHBhZ2UgKiptYXAsICpzYl9wYWdlOworCXVuc2lnbmVkIGxvbmcgKmF0dHI7CisJaW50IHBhZ2VzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJbWFwID0gYml0bWFwLT5maWxlbWFwOworCWJpdG1hcC0+ZmlsZW1hcCA9IE5VTEw7CisJYXR0ciA9IGJpdG1hcC0+ZmlsZW1hcF9hdHRyOworCWJpdG1hcC0+ZmlsZW1hcF9hdHRyID0gTlVMTDsKKwlwYWdlcyA9IGJpdG1hcC0+ZmlsZV9wYWdlczsKKwliaXRtYXAtPmZpbGVfcGFnZXMgPSAwOworCXNiX3BhZ2UgPSBiaXRtYXAtPnNiX3BhZ2U7CisJYml0bWFwLT5zYl9wYWdlID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKworCXdoaWxlIChwYWdlcy0tKQorCQlpZiAobWFwW3BhZ2VzXS0+aW5kZXggIT0gMCkgLyogMCBpcyBzYl9wYWdlLCByZWxlYXNlIGl0IGJlbG93ICovCisJCQlwYWdlX2NhY2hlX3JlbGVhc2UobWFwW3BhZ2VzXSk7CisJa2ZyZWUobWFwKTsKKwlrZnJlZShhdHRyKTsKKworCWlmIChzYl9wYWdlKQorCQlwYWdlX2NhY2hlX3JlbGVhc2Uoc2JfcGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJpdG1hcF9zdG9wX2RhZW1vbnMoc3RydWN0IGJpdG1hcCAqYml0bWFwKTsKKworLyogZGVxdWV1ZSB0aGUgbmV4dCBpdGVtIGluIGEgcGFnZSBsaXN0IC0tIGRvbid0IGNhbGwgZnJvbSBpcnEgY29udGV4dCAqLworc3RhdGljIHN0cnVjdCBwYWdlX2xpc3QgKmRlcXVldWVfcGFnZShzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJc3RydWN0IHBhZ2VfbGlzdCAqaXRlbSA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZiaXRtYXAtPmNvbXBsZXRlX3BhZ2VzOworCisJc3Bpbl9sb2NrKCZiaXRtYXAtPndyaXRlX2xvY2spOworCWlmIChsaXN0X2VtcHR5KGhlYWQpKQorCQlnb3RvIG91dDsKKwlpdGVtID0gbGlzdF9lbnRyeShoZWFkLT5wcmV2LCBzdHJ1Y3QgcGFnZV9saXN0LCBsaXN0KTsKKwlsaXN0X2RlbChoZWFkLT5wcmV2KTsKK291dDoKKwlzcGluX3VubG9jaygmYml0bWFwLT53cml0ZV9sb2NrKTsKKwlyZXR1cm4gaXRlbTsKK30KKworc3RhdGljIHZvaWQgZHJhaW5fd3JpdGVfcXVldWVzKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKK3sKKwlzdHJ1Y3QgcGFnZV9saXN0ICppdGVtOworCisJd2hpbGUgKChpdGVtID0gZGVxdWV1ZV9wYWdlKGJpdG1hcCkpKSB7CisJCS8qIGRvbid0IGJvdGhlciB0byB3YWl0ICovCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShpdGVtLT5wYWdlKTsKKwkJbWVtcG9vbF9mcmVlKGl0ZW0sIGJpdG1hcC0+d3JpdGVfcG9vbCk7CisJfQorCisJd2FrZV91cCgmYml0bWFwLT53cml0ZV93YWl0KTsKK30KKworc3RhdGljIHZvaWQgYml0bWFwX2ZpbGVfcHV0KHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJZmlsZSA9IGJpdG1hcC0+ZmlsZTsKKwliaXRtYXAtPmZpbGUgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworCisJYml0bWFwX3N0b3BfZGFlbW9ucyhiaXRtYXApOworCisJZHJhaW5fd3JpdGVfcXVldWVzKGJpdG1hcCk7CisKKwliaXRtYXBfZmlsZV91bm1hcChiaXRtYXApOworCisJaWYgKGZpbGUpIHsKKwkJaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWF0b21pY19zZXQoJmlub2RlLT5pX3dyaXRlY291bnQsIDEpOyAvKiBhbGxvdyB3cml0ZXMgYWdhaW4gKi8KKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCQlmcHV0KGZpbGUpOworCX0KK30KKworCisvKgorICogYml0bWFwX2ZpbGVfa2ljayAtIGlmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBtYW5pcHVsYXRpbmcgdGhlIGJpdG1hcCBmaWxlCisgKiB0aGVuIGl0IGlzIG5vIGxvbmdlciByZWxpYWJsZSwgc28gd2Ugc3RvcCB1c2luZyBpdCBhbmQgd2UgbWFyayB0aGUgZmlsZQorICogYXMgZmFpbGVkIGluIHRoZSBzdXBlcmJsb2NrCisgKi8KK3N0YXRpYyB2b2lkIGJpdG1hcF9maWxlX2tpY2soc3RydWN0IGJpdG1hcCAqYml0bWFwKQoreworCWNoYXIgKnBhdGgsICpwdHIgPSBOVUxMOworCisJYml0bWFwX21hc2tfc3RhdGUoYml0bWFwLCBCSVRNQVBfU1RBTEUsIE1BU0tfU0VUKTsKKwliaXRtYXBfdXBkYXRlX3NiKGJpdG1hcCk7CisKKwlpZiAoYml0bWFwLT5maWxlKSB7CisJCXBhdGggPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmIChwYXRoKQorCQkJcHRyID0gZmlsZV9wYXRoKGJpdG1hcC0+ZmlsZSwgcGF0aCwgUEFHRV9TSVpFKTsKKworCQlwcmludGsoS0VSTl9BTEVSVCAiJXM6IGtpY2tpbmcgZmFpbGVkIGJpdG1hcCBmaWxlICVzIGZyb20gYXJyYXkhXG4iLAorCQkgICAgICAgYm1uYW1lKGJpdG1hcCksIHB0ciA/IHB0ciA6ICIiKTsKKworCQlrZnJlZShwYXRoKTsKKwl9CisKKwliaXRtYXBfZmlsZV9wdXQoYml0bWFwKTsKKworCXJldHVybjsKK30KKworZW51bSBiaXRtYXBfcGFnZV9hdHRyIHsKKwlCSVRNQVBfUEFHRV9ESVJUWSA9IDEsIC8vIHRoZXJlIGFyZSBzZXQgYml0cyB0aGF0IG5lZWQgdG8gYmUgc3luY2VkCisJQklUTUFQX1BBR0VfQ0xFQU4gPSAyLCAvLyB0aGVyZSBhcmUgYml0cyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgY2xlYXJlZAorCUJJVE1BUF9QQUdFX05FRURXUklURT00LCAvLyB0aGVyZSBhcmUgY2xlYXJlZCBiaXRzIHRoYXQgbmVlZCB0byBiZSBzeW5jZWQKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9hdHRyKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJZW51bSBiaXRtYXBfcGFnZV9hdHRyIGF0dHIpCit7CisJYml0bWFwLT5maWxlbWFwX2F0dHJbcGFnZS0+aW5kZXhdIHw9IGF0dHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wYWdlX2F0dHIoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQllbnVtIGJpdG1hcF9wYWdlX2F0dHIgYXR0cikKK3sKKwliaXRtYXAtPmZpbGVtYXBfYXR0cltwYWdlLT5pbmRleF0gJj0gfmF0dHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfcGFnZV9hdHRyKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIGJpdG1hcC0+ZmlsZW1hcF9hdHRyW3BhZ2UtPmluZGV4XTsKK30KKworLyoKKyAqIGJpdG1hcF9maWxlX3NldF9iaXQgLS0gY2FsbGVkIGJlZm9yZSBwZXJmb3JtaW5nIGEgd3JpdGUgdG8gdGhlIG1kIGRldmljZQorICogdG8gc2V0IChhbmQgZXZlbnR1YWxseSBzeW5jKSBhIHBhcnRpY3VsYXIgYml0IGluIHRoZSBiaXRtYXAgZmlsZQorICoKKyAqIHdlIHNldCB0aGUgYml0IGltbWVkaWF0ZWx5LCB0aGVuIHdlIHJlY29yZCB0aGUgcGFnZSBudW1iZXIgc28gdGhhdAorICogd2hlbiBhbiB1bnBsdWcgb2NjdXJzLCB3ZSBjYW4gZmx1c2ggdGhlIGRpcnR5IHBhZ2VzIG91dCB0byBkaXNrCisgKi8KK3N0YXRpYyB2b2lkIGJpdG1hcF9maWxlX3NldF9iaXQoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBibG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIGJpdDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl2b2lkICprYWRkcjsKKwl1bnNpZ25lZCBsb25nIGNodW5rID0gYmxvY2sgPj4gQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKTsKKworCWlmICghYml0bWFwLT5maWxlbWFwKSB7CisJCXJldHVybjsKKwl9CisKKwlwYWdlID0gZmlsZW1hcF9nZXRfcGFnZShiaXRtYXAsIGNodW5rKTsKKwliaXQgPSBmaWxlX3BhZ2Vfb2Zmc2V0KGNodW5rKTsKKworCisJLyogbWFrZSBzdXJlIHRoZSBwYWdlIHN0YXlzIGNhY2hlZCB1bnRpbCBpdCBnZXRzIHdyaXR0ZW4gb3V0ICovCisJaWYgKCEgKGdldF9wYWdlX2F0dHIoYml0bWFwLCBwYWdlKSAmIEJJVE1BUF9QQUdFX0RJUlRZKSkKKwkJcGFnZV9jYWNoZV9nZXQocGFnZSk7CisKKyAJLyogc2V0IHRoZSBiaXQgKi8KKwlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlzZXRfYml0KGJpdCwga2FkZHIpOworCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwlQUklOVEsoInNldCBmaWxlIGJpdCAlbHUgcGFnZSAlbHVcbiIsIGJpdCwgcGFnZS0+aW5kZXgpOworCisJLyogcmVjb3JkIHBhZ2UgbnVtYmVyIHNvIGl0IGdldHMgZmx1c2hlZCB0byBkaXNrIHdoZW4gdW5wbHVnIG9jY3VycyAqLworCXNldF9wYWdlX2F0dHIoYml0bWFwLCBwYWdlLCBCSVRNQVBfUEFHRV9ESVJUWSk7CisKK30KKworLyogdGhpcyBnZXRzIGNhbGxlZCB3aGVuIHRoZSBtZCBkZXZpY2UgaXMgcmVhZHkgdG8gdW5wbHVnIGl0cyB1bmRlcmx5aW5nCisgKiAoc2xhdmUpIGRldmljZSBxdWV1ZXMgLS0gYmVmb3JlIHdlIGxldCBhbnkgd3JpdGVzIGdvIGRvd24sIHdlIG5lZWQgdG8KKyAqIHN5bmMgdGhlIGRpcnR5IHBhZ2VzIG9mIHRoZSBiaXRtYXAgZmlsZSB0byBkaXNrICovCitpbnQgYml0bWFwX3VucGx1ZyhzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJdW5zaWduZWQgbG9uZyBpLCBhdHRyLCBmbGFnczsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgd2FpdCA9IDA7CisJaW50IGVycjsKKworCWlmICghYml0bWFwKQorCQlyZXR1cm4gMDsKKworCS8qIGxvb2sgYXQgZWFjaCBwYWdlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldCBiaXRzIHRoYXQgbmVlZCB0byBiZQorCSAqIGZsdXNoZWQgb3V0IHRvIGRpc2sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYml0bWFwLT5maWxlX3BhZ2VzOyBpKyspIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworCQlpZiAoIWJpdG1hcC0+ZmlsZW1hcCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlwYWdlID0gYml0bWFwLT5maWxlbWFwW2ldOworCQlhdHRyID0gZ2V0X3BhZ2VfYXR0cihiaXRtYXAsIHBhZ2UpOworCQljbGVhcl9wYWdlX2F0dHIoYml0bWFwLCBwYWdlLCBCSVRNQVBfUEFHRV9ESVJUWSk7CisJCWNsZWFyX3BhZ2VfYXR0cihiaXRtYXAsIHBhZ2UsIEJJVE1BUF9QQUdFX05FRURXUklURSk7CisJCWlmICgoYXR0ciAmIEJJVE1BUF9QQUdFX0RJUlRZKSkKKwkJCXdhaXQgPSAxOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoYXR0ciAmIChCSVRNQVBfUEFHRV9ESVJUWSB8IEJJVE1BUF9QQUdFX05FRURXUklURSkpIHsKKwkJCWVyciA9IHdyaXRlX3BhZ2UoYml0bWFwLCBwYWdlLCAwKTsKKwkJCWlmIChlcnIgPT0gLUVBR0FJTikgeworCQkJCWlmIChhdHRyICYgQklUTUFQX1BBR0VfRElSVFkpCisJCQkJCWVyciA9IHdyaXRlX3BhZ2UoYml0bWFwLCBwYWdlLCAxKTsKKwkJCQllbHNlCisJCQkJCWVyciA9IDA7CisJCQl9CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiAxOworCQl9CisJfQorCWlmICh3YWl0KSB7IC8qIGlmIGFueSB3cml0ZXMgd2VyZSBwZXJmb3JtZWQsIHdlIG5lZWQgdG8gd2FpdCBvbiB0aGVtICovCisJCWlmIChiaXRtYXAtPmZpbGUpIHsKKwkJCXNwaW5fbG9ja19pcnEoJmJpdG1hcC0+d3JpdGVfbG9jayk7CisJCQl3YWl0X2V2ZW50X2xvY2tfaXJxKGJpdG1hcC0+d3JpdGVfd2FpdCwKKwkJCQkJICAgIGxpc3RfZW1wdHkoJmJpdG1hcC0+Y29tcGxldGVfcGFnZXMpLCBiaXRtYXAtPndyaXRlX2xvY2ssCisJCQkJCSAgICB3YWtlX3VwX3Byb2Nlc3MoYml0bWFwLT53cml0ZWJhY2tfZGFlbW9uLT50c2spKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmYml0bWFwLT53cml0ZV9sb2NrKTsKKwkJfSBlbHNlCisJCQl3YWl0X2V2ZW50KGJpdG1hcC0+bWRkZXYtPnNiX3dhaXQsCisJCQkJICAgYXRvbWljX3JlYWQoJmJpdG1hcC0+bWRkZXYtPnBlbmRpbmdfd3JpdGVzKT09MCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBiaXRtYXBfc2V0X21lbW9yeV9iaXRzKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc2VjdG9yX3Qgb2Zmc2V0LAorCXVuc2lnbmVkIGxvbmcgc2VjdG9ycywgaW50IGluX3N5bmMpOworLyogKiBiaXRtYXBfaW5pdF9mcm9tX2Rpc2sgLS0gY2FsbGVkIGF0IGJpdG1hcF9jcmVhdGUgdGltZSB0byBpbml0aWFsaXplCisgKiB0aGUgaW4tbWVtb3J5IGJpdG1hcCBmcm9tIHRoZSBvbi1kaXNrIGJpdG1hcCAtLSBhbHNvLCBzZXRzIHVwIHRoZQorICogbWVtb3J5IG1hcHBpbmcgb2YgdGhlIGJpdG1hcCBmaWxlCisgKiBTcGVjaWFsIGNhc2VzOgorICogICBpZiB0aGVyZSdzIG5vIGJpdG1hcCBmaWxlLCBvciBpZiB0aGUgYml0bWFwIGZpbGUgaGFkIGJlZW4KKyAqICAgcHJldmlvdXNseSBraWNrZWQgZnJvbSB0aGUgYXJyYXksIHdlIG1hcmsgYWxsIHRoZSBiaXRzIGFzCisgKiAgIDEncyBpbiBvcmRlciB0byBjYXVzZSBhIGZ1bGwgcmVzeW5jLgorICovCitzdGF0aWMgaW50IGJpdG1hcF9pbml0X2Zyb21fZGlzayhzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIGludCBpbl9zeW5jKQoreworCXVuc2lnbmVkIGxvbmcgaSwgY2h1bmtzLCBpbmRleCwgb2xkaW5kZXgsIGJpdDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEwsICpvbGRwYWdlID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIG51bV9wYWdlcywgYml0X2NudCA9IDA7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJdW5zaWduZWQgbG9uZyBieXRlcywgb2Zmc2V0LCBkdW1teTsKKwlpbnQgb3V0b2ZkYXRlOworCWludCByZXQgPSAtRU5PU1BDOworCisJY2h1bmtzID0gYml0bWFwLT5jaHVua3M7CisJZmlsZSA9IGJpdG1hcC0+ZmlsZTsKKworCUJVR19PTighZmlsZSAmJiAhYml0bWFwLT5vZmZzZXQpOworCisjaWYgSU5KRUNUX0ZBVUxUU18zCisJb3V0b2ZkYXRlID0gMTsKKyNlbHNlCisJb3V0b2ZkYXRlID0gYml0bWFwLT5mbGFncyAmIEJJVE1BUF9TVEFMRTsKKyNlbmRpZgorCWlmIChvdXRvZmRhdGUpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBiaXRtYXAgZmlsZSBpcyBvdXQgb2YgZGF0ZSwgZG9pbmcgZnVsbCAiCisJCQkicmVjb3ZlcnlcbiIsIGJtbmFtZShiaXRtYXApKTsKKworCWJ5dGVzID0gKGNodW5rcyArIDcpIC8gODsKKworCW51bV9wYWdlcyA9IChieXRlcyArIHNpemVvZihiaXRtYXBfc3VwZXJfdCkgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKKworCWlmIChmaWxlICYmIGlfc2l6ZV9yZWFkKGZpbGUtPmZfbWFwcGluZy0+aG9zdCkgPCBieXRlcyArIHNpemVvZihiaXRtYXBfc3VwZXJfdCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGJpdG1hcCBmaWxlIHRvbyBzaG9ydCAlbHUgPCAlbHVcbiIsCisJCQlibW5hbWUoYml0bWFwKSwKKwkJCSh1bnNpZ25lZCBsb25nKSBpX3NpemVfcmVhZChmaWxlLT5mX21hcHBpbmctPmhvc3QpLAorCQkJYnl0ZXMgKyBzaXplb2YoYml0bWFwX3N1cGVyX3QpKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gLUVOT01FTTsKKworCWJpdG1hcC0+ZmlsZW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnVtX3BhZ2VzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJpdG1hcC0+ZmlsZW1hcCkKKwkJZ290byBvdXQ7CisKKwliaXRtYXAtPmZpbGVtYXBfYXR0ciA9IGttYWxsb2Moc2l6ZW9mKGxvbmcpICogbnVtX3BhZ2VzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJpdG1hcC0+ZmlsZW1hcF9hdHRyKQorCQlnb3RvIG91dDsKKworCW1lbXNldChiaXRtYXAtPmZpbGVtYXBfYXR0ciwgMCwgc2l6ZW9mKGxvbmcpICogbnVtX3BhZ2VzKTsKKworCW9sZGluZGV4ID0gfjBMOworCisJZm9yIChpID0gMDsgaSA8IGNodW5rczsgaSsrKSB7CisJCWluZGV4ID0gZmlsZV9wYWdlX2luZGV4KGkpOworCQliaXQgPSBmaWxlX3BhZ2Vfb2Zmc2V0KGkpOworCQlpZiAoaW5kZXggIT0gb2xkaW5kZXgpIHsgLyogdGhpcyBpcyBhIG5ldyBwYWdlLCByZWFkIGl0IGluICovCisJCQkvKiB1bm1hcCB0aGUgb2xkIHBhZ2UsIHdlJ3JlIGRvbmUgd2l0aCBpdCAqLworCQkJaWYgKG9sZHBhZ2UgIT0gTlVMTCkKKwkJCQlrdW5tYXAob2xkcGFnZSk7CisJCQlpZiAoaW5kZXggPT0gMCkgeworCQkJCS8qCisJCQkJICogaWYgd2UncmUgaGVyZSB0aGVuIHRoZSBzdXBlcmJsb2NrIHBhZ2UKKwkJCQkgKiBjb250YWlucyBzb21lIGJpdHMgKFBBR0VfU0laRSAhPSBzaXplb2Ygc2IpCisJCQkJICogd2UndmUgYWxyZWFkeSByZWFkIGl0IGluLCBzbyBqdXN0IHVzZSBpdAorCQkJCSAqLworCQkJCXBhZ2UgPSBiaXRtYXAtPnNiX3BhZ2U7CisJCQkJb2Zmc2V0ID0gc2l6ZW9mKGJpdG1hcF9zdXBlcl90KTsKKwkJCX0gZWxzZSBpZiAoZmlsZSkgeworCQkJCXBhZ2UgPSByZWFkX3BhZ2UoZmlsZSwgaW5kZXgsICZkdW1teSk7CisJCQkJb2Zmc2V0ID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJcGFnZSA9IHJlYWRfc2JfcGFnZShiaXRtYXAtPm1kZGV2LCBiaXRtYXAtPm9mZnNldCwgaW5kZXgpOworCQkJCW9mZnNldCA9IDA7CisJCQl9CisJCQlpZiAoSVNfRVJSKHBhZ2UpKSB7IC8qIHJlYWQgZXJyb3IgKi8KKwkJCQlyZXQgPSBQVFJfRVJSKHBhZ2UpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlvbGRpbmRleCA9IGluZGV4OworCQkJb2xkcGFnZSA9IHBhZ2U7CisJCQlrbWFwKHBhZ2UpOworCisJCQlpZiAob3V0b2ZkYXRlKSB7CisJCQkJLyoKKwkJCQkgKiBpZiBiaXRtYXAgaXMgb3V0IG9mIGRhdGUsIGRpcnR5IHRoZQorCQkJIAkgKiB3aG9sZSBwYWdlIGFuZCB3cml0ZSBpdCBvdXQKKwkJCQkgKi8KKwkJCQltZW1zZXQocGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCAweGZmLAorCQkJCQlQQUdFX1NJWkUgLSBvZmZzZXQpOworCQkJCXJldCA9IHdyaXRlX3BhZ2UoYml0bWFwLCBwYWdlLCAxKTsKKwkJCQlpZiAocmV0KSB7CisJCQkJCWt1bm1hcChwYWdlKTsKKwkJCQkJLyogcmVsZWFzZSwgcGFnZSBub3QgaW4gZmlsZW1hcCB5ZXQgKi8KKwkJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQl9CisKKwkJCWJpdG1hcC0+ZmlsZW1hcFtiaXRtYXAtPmZpbGVfcGFnZXMrK10gPSBwYWdlOworCQl9CisJCWlmICh0ZXN0X2JpdChiaXQsIHBhZ2VfYWRkcmVzcyhwYWdlKSkpIHsKKwkJCS8qIGlmIHRoZSBkaXNrIGJpdCBpcyBzZXQsIHNldCB0aGUgbWVtb3J5IGJpdCAqLworCQkJYml0bWFwX3NldF9tZW1vcnlfYml0cyhiaXRtYXAsCisJCQkJCWkgPDwgQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSwgMSwgaW5fc3luYyk7CisJCQliaXRfY250Kys7CisJCX0KKwl9CisKKyAJLyogZXZlcnl0aGluZyB3ZW50IE9LICovCisJcmV0ID0gMDsKKwliaXRtYXBfbWFza19zdGF0ZShiaXRtYXAsIEJJVE1BUF9TVEFMRSwgTUFTS19VTlNFVCk7CisKKwlpZiAocGFnZSkgLyogdW5tYXAgdGhlIGxhc3QgcGFnZSAqLworCQlrdW5tYXAocGFnZSk7CisKKwlpZiAoYml0X2NudCkgeyAvKiBLaWNrIHJlY292ZXJ5IGlmIGFueSBiaXRzIHdlcmUgc2V0ICovCisJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmYml0bWFwLT5tZGRldi0+cmVjb3ZlcnkpOworCQltZF93YWtldXBfdGhyZWFkKGJpdG1hcC0+bWRkZXYtPnRocmVhZCk7CisJfQorCitvdXQ6CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGJpdG1hcCBpbml0aWFsaXplZCBmcm9tIGRpc2s6ICIKKwkJInJlYWQgJWx1LyVsdSBwYWdlcywgc2V0ICVsdSBiaXRzLCBzdGF0dXM6ICVkXG4iLAorCQlibW5hbWUoYml0bWFwKSwgYml0bWFwLT5maWxlX3BhZ2VzLCBudW1fcGFnZXMsIGJpdF9jbnQsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGJpdG1hcF93cml0ZV9hbGwoc3RydWN0IGJpdG1hcCAqYml0bWFwKQoreworCS8qIFdlIGRvbid0IGFjdHVhbGx5IHdyaXRlIGFsbCBiaXRtYXAgYmxvY2tzIGhlcmUsCisJICoganVzdCBmbGFnIHRoZW0gYXMgbmVlZGluZyB0byBiZSB3cml0dGVuCisJICovCisKKwl1bnNpZ25lZCBsb25nIGNodW5rcyA9IGJpdG1hcC0+Y2h1bmtzOworCXVuc2lnbmVkIGxvbmcgYnl0ZXMgPSAoY2h1bmtzKzcpLzggKyBzaXplb2YoYml0bWFwX3N1cGVyX3QpOworCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gKGJ5dGVzICsgUEFHRV9TSVpFLTEpIC8gUEFHRV9TSVpFOworCXdoaWxlIChudW1fcGFnZXMtLSkKKwkJYml0bWFwLT5maWxlbWFwX2F0dHJbbnVtX3BhZ2VzXSB8PSBCSVRNQVBfUEFHRV9ORUVEV1JJVEU7Cit9CisKKworc3RhdGljIHZvaWQgYml0bWFwX2NvdW50X3BhZ2Uoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIGludCBpbmMpCit7CisJc2VjdG9yX3QgY2h1bmsgPSBvZmZzZXQgPj4gQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKTsKKwl1bnNpZ25lZCBsb25nIHBhZ2UgPSBjaHVuayA+PiBQQUdFX0NPVU5URVJfU0hJRlQ7CisJYml0bWFwLT5icFtwYWdlXS5jb3VudCArPSBpbmM7CisvKgorCWlmIChwYWdlID09IDApIHByaW50aygiY291bnQgcGFnZSAwLCBvZmZzZXQgJWxsdTogJWQgZ2l2ZXMgJWRcbiIsCisJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCwgaW5jLCBiaXRtYXAtPmJwW3BhZ2VdLmNvdW50KTsKKyovCisJYml0bWFwX2NoZWNrZnJlZShiaXRtYXAsIHBhZ2UpOworfQorc3RhdGljIGJpdG1hcF9jb3VudGVyX3QgKmJpdG1hcF9nZXRfY291bnRlcihzdHJ1Y3QgYml0bWFwICpiaXRtYXAsCisJCQkJCSAgICBzZWN0b3JfdCBvZmZzZXQsIGludCAqYmxvY2tzLAorCQkJCQkgICAgaW50IGNyZWF0ZSk7CisKKy8qCisgKiBiaXRtYXAgZGFlbW9uIC0tIHBlcmlvZGljYWxseSB3YWtlcyB1cCB0byBjbGVhbiBiaXRzIGFuZCBmbHVzaCBwYWdlcworICoJCQlvdXQgdG8gZGlzaworICovCisKK2ludCBiaXRtYXBfZGFlbW9uX3dvcmsoc3RydWN0IGJpdG1hcCAqYml0bWFwKQoreworCXVuc2lnbmVkIGxvbmcgajsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTCwgKmxhc3RwYWdlID0gTlVMTDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgYmxvY2tzOworCWludCBhdHRyOworCisJaWYgKGJpdG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgYml0bWFwLT5kYWVtb25fbGFzdHJ1biArIGJpdG1hcC0+ZGFlbW9uX3NsZWVwKkhaKSkKKwkJcmV0dXJuIDA7CisJYml0bWFwLT5kYWVtb25fbGFzdHJ1biA9IGppZmZpZXM7CisKKwlmb3IgKGogPSAwOyBqIDwgYml0bWFwLT5jaHVua3M7IGorKykgeworCQliaXRtYXBfY291bnRlcl90ICpibWM7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFiaXRtYXAtPmZpbGVtYXApIHsKKwkJCS8qIGVycm9yIG9yIHNodXRkb3duICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcGFnZSA9IGZpbGVtYXBfZ2V0X3BhZ2UoYml0bWFwLCBqKTsKKworCQlpZiAocGFnZSAhPSBsYXN0cGFnZSkgeworCQkJLyogc2tpcCB0aGlzIHBhZ2UgdW5sZXNzIGl0J3MgbWFya2VkIGFzIG5lZWRpbmcgY2xlYW5pbmcgKi8KKwkJCWlmICghKChhdHRyPWdldF9wYWdlX2F0dHIoYml0bWFwLCBwYWdlKSkgJiBCSVRNQVBfUEFHRV9DTEVBTikpIHsKKwkJCQlpZiAoYXR0ciAmIEJJVE1BUF9QQUdFX05FRURXUklURSkgeworCQkJCQlwYWdlX2NhY2hlX2dldChwYWdlKTsKKwkJCQkJY2xlYXJfcGFnZV9hdHRyKGJpdG1hcCwgcGFnZSwgQklUTUFQX1BBR0VfTkVFRFdSSVRFKTsKKwkJCQl9CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJCQkJaWYgKGF0dHIgJiBCSVRNQVBfUEFHRV9ORUVEV1JJVEUpIHsKKwkJCQkJc3dpdGNoICh3cml0ZV9wYWdlKGJpdG1hcCwgcGFnZSwgMCkpIHsKKwkJCQkJY2FzZSAtRUFHQUlOOgorCQkJCQkJc2V0X3BhZ2VfYXR0cihiaXRtYXAsIHBhZ2UsIEJJVE1BUF9QQUdFX05FRURXUklURSk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAwOgorCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQliaXRtYXBfZmlsZV9raWNrKGJpdG1hcCk7CisJCQkJCX0KKwkJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogZ3JhYiB0aGUgbmV3IHBhZ2UsIHN5bmMgYW5kIHJlbGVhc2UgdGhlIG9sZCAqLworCQkJcGFnZV9jYWNoZV9nZXQocGFnZSk7CisJCQlpZiAobGFzdHBhZ2UgIT0gTlVMTCkgeworCQkJCWlmIChnZXRfcGFnZV9hdHRyKGJpdG1hcCwgbGFzdHBhZ2UpICYgQklUTUFQX1BBR0VfTkVFRFdSSVRFKSB7CisJCQkJCWNsZWFyX3BhZ2VfYXR0cihiaXRtYXAsIGxhc3RwYWdlLCBCSVRNQVBfUEFHRV9ORUVEV1JJVEUpOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwkJCQkJZXJyID0gd3JpdGVfcGFnZShiaXRtYXAsIGxhc3RwYWdlLCAwKTsKKwkJCQkJaWYgKGVyciA9PSAtRUFHQUlOKSB7CisJCQkJCQllcnIgPSAwOworCQkJCQkJc2V0X3BhZ2VfYXR0cihiaXRtYXAsIGxhc3RwYWdlLCBCSVRNQVBfUEFHRV9ORUVEV1JJVEUpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJc2V0X3BhZ2VfYXR0cihiaXRtYXAsIGxhc3RwYWdlLCBCSVRNQVBfUEFHRV9ORUVEV1JJVEUpOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwkJCQl9CisJCQkJa3VubWFwKGxhc3RwYWdlKTsKKwkJCQlwYWdlX2NhY2hlX3JlbGVhc2UobGFzdHBhZ2UpOworCQkJCWlmIChlcnIpCisJCQkJCWJpdG1hcF9maWxlX2tpY2soYml0bWFwKTsKKwkJCX0gZWxzZQorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworCQkJbGFzdHBhZ2UgPSBwYWdlOworCQkJa21hcChwYWdlKTsKKy8qCisJCQlwcmludGsoImJpdG1hcCBjbGVhbiBhdCBwYWdlICVsdVxuIiwgaik7CisqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworCQkJY2xlYXJfcGFnZV9hdHRyKGJpdG1hcCwgcGFnZSwgQklUTUFQX1BBR0VfQ0xFQU4pOworCQl9CisJCWJtYyA9IGJpdG1hcF9nZXRfY291bnRlcihiaXRtYXAsIGogPDwgQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSwKKwkJCQkJJmJsb2NrcywgMCk7CisJCWlmIChibWMpIHsKKy8qCisgIGlmIChqIDwgMTAwKSBwcmludGsoImJpdG1hcDogaj0lbHUsICpibWMgPSAweCV4XG4iLCBqLCAqYm1jKTsKKyovCisJCQlpZiAoKmJtYyA9PSAyKSB7CisJCQkJKmJtYz0xOyAvKiBtYXliZSBjbGVhciB0aGUgYml0IG5leHQgdGltZSAqLworCQkJCXNldF9wYWdlX2F0dHIoYml0bWFwLCBwYWdlLCBCSVRNQVBfUEFHRV9DTEVBTik7CisJCQl9IGVsc2UgaWYgKCpibWMgPT0gMSkgeworCQkJCS8qIHdlIGNhbiBjbGVhciB0aGUgYml0ICovCisJCQkJKmJtYyA9IDA7CisJCQkJYml0bWFwX2NvdW50X3BhZ2UoYml0bWFwLCBqIDw8IENIVU5LX0JMT0NLX1NISUZUKGJpdG1hcCksCisJCQkJCQkgIC0xKTsKKworCQkJCS8qIGNsZWFyIHRoZSBiaXQgKi8KKwkJCQljbGVhcl9iaXQoZmlsZV9wYWdlX29mZnNldChqKSwgcGFnZV9hZGRyZXNzKHBhZ2UpKTsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBub3cgc3luYyB0aGUgZmluYWwgcGFnZSAqLworCWlmIChsYXN0cGFnZSAhPSBOVUxMKSB7CisJCWt1bm1hcChsYXN0cGFnZSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGdldF9wYWdlX2F0dHIoYml0bWFwLCBsYXN0cGFnZSkgJkJJVE1BUF9QQUdFX05FRURXUklURSkgeworCQkJY2xlYXJfcGFnZV9hdHRyKGJpdG1hcCwgbGFzdHBhZ2UsIEJJVE1BUF9QQUdFX05FRURXUklURSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwkJCWVyciA9IHdyaXRlX3BhZ2UoYml0bWFwLCBsYXN0cGFnZSwgMCk7CisJCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKKwkJCQlzZXRfcGFnZV9hdHRyKGJpdG1hcCwgbGFzdHBhZ2UsIEJJVE1BUF9QQUdFX05FRURXUklURSk7CisJCQkJZXJyID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNldF9wYWdlX2F0dHIoYml0bWFwLCBsYXN0cGFnZSwgQklUTUFQX1BBR0VfTkVFRFdSSVRFKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworCQl9CisKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKGxhc3RwYWdlKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBkYWVtb25fZXhpdChzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIG1ka190aHJlYWRfdCAqKmRhZW1vbikKK3sKKwltZGtfdGhyZWFkX3QgKmRtbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogaWYgbm8gb25lIGlzIHdhaXRpbmcgb24gdXMsIHdlJ2xsIGZyZWUgdGhlIG1kIHRocmVhZCBzdHJ1Y3QKKwkgKiBhbmQgZXhpdCwgb3RoZXJ3aXNlIHdlIGxldCB0aGUgd2FpdGVyIGNsZWFuIHRoaW5ncyB1cCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwlpZiAoKGRtbiA9ICpkYWVtb24pKSB7IC8qIG5vIG9uZSBpcyB3YWl0aW5nLCBjbGVhbnVwIGFuZCBleGl0ICovCisJCSpkYWVtb24gPSBOVUxMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwkJa2ZyZWUoZG1uKTsKKwkJY29tcGxldGVfYW5kX2V4aXQoTlVMTCwgMCk7IC8qIGRvX2V4aXQgbm90IGV4cG9ydGVkICovCisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBiaXRtYXBfd3JpdGViYWNrX2RhZW1vbihtZGRldl90ICptZGRldikKK3sKKwlzdHJ1Y3QgYml0bWFwICpiaXRtYXAgPSBtZGRldi0+Yml0bWFwOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBwYWdlX2xpc3QgKml0ZW07CisJaW50IGVyciA9IDA7CisKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIiVzOiBiaXRtYXAgd3JpdGViYWNrIGRhZW1vbiBnb3Qgc2lnbmFsLCBleGl0aW5nLi4uXG4iLAorCQkgICAgICAgYm1uYW1lKGJpdG1hcCkpOworCQllcnIgPSAtRUlOVFI7CisJCWdvdG8gb3V0OworCX0KKworCVBSSU5USygiJXM6IGJpdG1hcCB3cml0ZWJhY2sgZGFlbW9uIHdva2UgdXAuLi5cbiIsIGJtbmFtZShiaXRtYXApKTsKKwkvKiB3YWl0IG9uIGJpdG1hcCBwYWdlIHdyaXRlYmFja3MgKi8KKwl3aGlsZSAoKGl0ZW0gPSBkZXF1ZXVlX3BhZ2UoYml0bWFwKSkpIHsKKwkJcGFnZSA9IGl0ZW0tPnBhZ2U7CisJCW1lbXBvb2xfZnJlZShpdGVtLCBiaXRtYXAtPndyaXRlX3Bvb2wpOworCQlQUklOVEsoIndhaXQgb24gcGFnZSB3cml0ZWJhY2s6ICVwXG4iLCBwYWdlKTsKKwkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwkJUFJJTlRLKCJmaW5pc2hlZCBwYWdlIHdyaXRlYmFjazogJXBcbiIsIHBhZ2UpOworCisJCWVyciA9IFBhZ2VFcnJvcihwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYml0bWFwIGZpbGUgd3JpdGViYWNrICIKKwkJCSAgICAgICAiZmFpbGVkIChwYWdlICVsdSk6ICVkXG4iLAorCQkJICAgICAgIGJtbmFtZShiaXRtYXApLCBwYWdlLT5pbmRleCwgZXJyKTsKKwkJCWJpdG1hcF9maWxlX2tpY2soYml0bWFwKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorIG91dDoKKwl3YWtlX3VwKCZiaXRtYXAtPndyaXRlX3dhaXQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGJpdG1hcCB3cml0ZWJhY2sgZGFlbW9uIGV4aXRpbmcgKCVkKVxuIiwKKwkJICAgICAgIGJtbmFtZShiaXRtYXApLCBlcnIpOworCQlkYWVtb25fZXhpdChiaXRtYXAsICZiaXRtYXAtPndyaXRlYmFja19kYWVtb24pOworCX0KK30KKworc3RhdGljIGludCBiaXRtYXBfc3RhcnRfZGFlbW9uKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgbWRrX3RocmVhZF90ICoqcHRyLAorCQkJCXZvaWQgKCpmdW5jKShtZGRldl90ICopLCBjaGFyICpuYW1lKQoreworCW1ka190aHJlYWRfdCAqZGFlbW9uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciBuYW1lYnVmWzMyXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwkqcHRyID0gTlVMTDsKKworCWlmICghYml0bWFwLT5maWxlKSAvKiBubyBuZWVkIGZvciBkYWVtb24gaWYgdGhlcmUncyBubyBiYWNraW5nIGZpbGUgKi8KKwkJZ290byBvdXRfdW5sb2NrOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisKKyNpZiBJTkpFQ1RfRkFUQUxfRkFVTFRfMgorCWRhZW1vbiA9IE5VTEw7CisjZWxzZQorCXNwcmludGYobmFtZWJ1ZiwgIiUlc18lcyIsIG5hbWUpOworCWRhZW1vbiA9IG1kX3JlZ2lzdGVyX3RocmVhZChmdW5jLCBiaXRtYXAtPm1kZGV2LCBuYW1lYnVmKTsKKyNlbmRpZgorCWlmICghZGFlbW9uKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBzdGFydCBiaXRtYXAgZGFlbW9uXG4iLAorCQkJYm1uYW1lKGJpdG1hcCkpOworCQlyZXR1cm4gLUVDSElMRDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJKnB0ciA9IGRhZW1vbjsKKworCW1kX3dha2V1cF90aHJlYWQoZGFlbW9uKTsgLyogc3RhcnQgaXQgcnVubmluZyAqLworCisJUFJJTlRLKCIlczogJXMgZGFlbW9uIChwaWQgJWQpIHN0YXJ0ZWQuLi5cbiIsCisJCWJtbmFtZShiaXRtYXApLCBuYW1lLCBkYWVtb24tPnRzay0+cGlkKTsKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYml0bWFwX3N0YXJ0X2RhZW1vbnMoc3RydWN0IGJpdG1hcCAqYml0bWFwKQoreworCWludCBlcnIgPSBiaXRtYXBfc3RhcnRfZGFlbW9uKGJpdG1hcCwgJmJpdG1hcC0+d3JpdGViYWNrX2RhZW1vbiwKKwkJCQkJYml0bWFwX3dyaXRlYmFja19kYWVtb24sICJiaXRtYXBfd2IiKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBiaXRtYXBfc3RvcF9kYWVtb24oc3RydWN0IGJpdG1hcCAqYml0bWFwLCBtZGtfdGhyZWFkX3QgKipwdHIpCit7CisJbWRrX3RocmVhZF90ICpkYWVtb247CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwlkYWVtb24gPSAqcHRyOworCSpwdHIgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworCWlmIChkYWVtb24pCisJCW1kX3VucmVnaXN0ZXJfdGhyZWFkKGRhZW1vbik7IC8qIGRlc3Ryb3kgdGhlIHRocmVhZCAqLworfQorCitzdGF0aWMgdm9pZCBiaXRtYXBfc3RvcF9kYWVtb25zKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKK3sKKwkvKiB0aGUgZGFlbW9ucyBjYW4ndCBzdG9wIHRoZW1zZWx2ZXMuLi4gdGhleSdsbCBqdXN0IGV4aXQgaW5zdGVhZC4uLiAqLworCWlmIChiaXRtYXAtPndyaXRlYmFja19kYWVtb24gJiYKKwkgICAgY3VycmVudC0+cGlkICE9IGJpdG1hcC0+d3JpdGViYWNrX2RhZW1vbi0+dHNrLT5waWQpCisJCWJpdG1hcF9zdG9wX2RhZW1vbihiaXRtYXAsICZiaXRtYXAtPndyaXRlYmFja19kYWVtb24pOworfQorCitzdGF0aWMgYml0bWFwX2NvdW50ZXJfdCAqYml0bWFwX2dldF9jb3VudGVyKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwKKwkJCQkJICAgIHNlY3Rvcl90IG9mZnNldCwgaW50ICpibG9ja3MsCisJCQkJCSAgICBpbnQgY3JlYXRlKQoreworCS8qIElmICdjcmVhdGUnLCB3ZSBtaWdodCByZWxlYXNlIHRoZSBsb2NrIGFuZCByZWNsYWltIGl0LgorCSAqIFRoZSBsb2NrIG11c3QgaGF2ZSBiZWVuIHRha2VuIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLgorCSAqIElmICFjcmVhdGUsIHdlIGRvbid0IHJlbGVhc2UgdGhlIGxvY2suCisJICovCisJc2VjdG9yX3QgY2h1bmsgPSBvZmZzZXQgPj4gQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKTsKKwl1bnNpZ25lZCBsb25nIHBhZ2UgPSBjaHVuayA+PiBQQUdFX0NPVU5URVJfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBwYWdlb2ZmID0gKGNodW5rICYgUEFHRV9DT1VOVEVSX01BU0spIDw8IENPVU5URVJfQllURV9TSElGVDsKKwlzZWN0b3JfdCBjc2l6ZTsKKworCWlmIChiaXRtYXBfY2hlY2twYWdlKGJpdG1hcCwgcGFnZSwgY3JlYXRlKSA8IDApIHsKKwkJY3NpemUgPSAoKHNlY3Rvcl90KTEpIDw8IChDSFVOS19CTE9DS19TSElGVChiaXRtYXApKTsKKwkJKmJsb2NrcyA9IGNzaXplIC0gKG9mZnNldCAmIChjc2l6ZS0gMSkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJLyogbm93IGxvY2tlZCAuLi4gKi8KKworCWlmIChiaXRtYXAtPmJwW3BhZ2VdLmhpamFja2VkKSB7IC8qIGhpamFja2VkIHBvaW50ZXIgKi8KKwkJLyogc2hvdWxkIHdlIHVzZSB0aGUgZmlyc3Qgb3Igc2Vjb25kIGNvdW50ZXIgZmllbGQKKwkJICogb2YgdGhlIGhpamFja2VkIHBvaW50ZXI/ICovCisJCWludCBoaSA9IChwYWdlb2ZmID4gUEFHRV9DT1VOVEVSX01BU0spOworCQljc2l6ZSA9ICgoc2VjdG9yX3QpMSkgPDwgKENIVU5LX0JMT0NLX1NISUZUKGJpdG1hcCkgKworCQkJCQkgIFBBR0VfQ09VTlRFUl9TSElGVCAtIDEpOworCQkqYmxvY2tzID0gY3NpemUgLSAob2Zmc2V0ICYgKGNzaXplLSAxKSk7CisJCXJldHVybiAgJigoYml0bWFwX2NvdW50ZXJfdCAqKQorCQkJICAmYml0bWFwLT5icFtwYWdlXS5tYXApW2hpXTsKKwl9IGVsc2UgeyAvKiBwYWdlIGlzIGFsbG9jYXRlZCAqLworCQljc2l6ZSA9ICgoc2VjdG9yX3QpMSkgPDwgKENIVU5LX0JMT0NLX1NISUZUKGJpdG1hcCkpOworCQkqYmxvY2tzID0gY3NpemUgLSAob2Zmc2V0ICYgKGNzaXplLSAxKSk7CisJCXJldHVybiAoYml0bWFwX2NvdW50ZXJfdCAqKQorCQkJJihiaXRtYXAtPmJwW3BhZ2VdLm1hcFtwYWdlb2ZmXSk7CisJfQorfQorCitpbnQgYml0bWFwX3N0YXJ0d3JpdGUoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2VjdG9ycykKK3sKKwlpZiAoIWJpdG1hcCkgcmV0dXJuIDA7CisJd2hpbGUgKHNlY3RvcnMpIHsKKwkJaW50IGJsb2NrczsKKwkJYml0bWFwX2NvdW50ZXJfdCAqYm1jOworCisJCXNwaW5fbG9ja19pcnEoJmJpdG1hcC0+bG9jayk7CisJCWJtYyA9IGJpdG1hcF9nZXRfY291bnRlcihiaXRtYXAsIG9mZnNldCwgJmJsb2NrcywgMSk7CisJCWlmICghYm1jKSB7CisJCQlzcGluX3VubG9ja19pcnEoJmJpdG1hcC0+bG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXN3aXRjaCgqYm1jKSB7CisJCWNhc2UgMDoKKwkJCWJpdG1hcF9maWxlX3NldF9iaXQoYml0bWFwLCBvZmZzZXQpOworCQkJYml0bWFwX2NvdW50X3BhZ2UoYml0bWFwLG9mZnNldCwgMSk7CisJCQlibGtfcGx1Z19kZXZpY2UoYml0bWFwLT5tZGRldi0+cXVldWUpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgMToKKwkJCSpibWMgPSAyOworCQl9CisJCWlmICgoKmJtYyAmIENPVU5URVJfTUFYKSA9PSBDT1VOVEVSX01BWCkgQlVHKCk7CisJCSgqYm1jKSsrOworCisJCXNwaW5fdW5sb2NrX2lycSgmYml0bWFwLT5sb2NrKTsKKworCQlvZmZzZXQgKz0gYmxvY2tzOworCQlpZiAoc2VjdG9ycyA+IGJsb2NrcykKKwkJCXNlY3RvcnMgLT0gYmxvY2tzOworCQllbHNlIHNlY3RvcnMgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBiaXRtYXBfZW5kd3JpdGUoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2VjdG9ycywKKwkJICAgICBpbnQgc3VjY2VzcykKK3sKKwlpZiAoIWJpdG1hcCkgcmV0dXJuOworCXdoaWxlIChzZWN0b3JzKSB7CisJCWludCBibG9ja3M7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWJpdG1hcF9jb3VudGVyX3QgKmJtYzsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJCWJtYyA9IGJpdG1hcF9nZXRfY291bnRlcihiaXRtYXAsIG9mZnNldCwgJmJsb2NrcywgMCk7CisJCWlmICghYm1jKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmICghc3VjY2VzcyAmJiAhICgqYm1jICYgTkVFREVEX01BU0spKQorCQkJKmJtYyB8PSBORUVERURfTUFTSzsKKworCQkoKmJtYyktLTsKKwkJaWYgKCpibWMgPD0gMikgeworCQkJc2V0X3BhZ2VfYXR0cihiaXRtYXAsCisJCQkJICAgICAgZmlsZW1hcF9nZXRfcGFnZShiaXRtYXAsIG9mZnNldCA+PiBDSFVOS19CTE9DS19TSElGVChiaXRtYXApKSwKKwkJCQkgICAgICBCSVRNQVBfUEFHRV9DTEVBTik7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CisJCW9mZnNldCArPSBibG9ja3M7CisJCWlmIChzZWN0b3JzID4gYmxvY2tzKQorCQkJc2VjdG9ycyAtPSBibG9ja3M7CisJCWVsc2Ugc2VjdG9ycyA9IDA7CisJfQorfQorCitpbnQgYml0bWFwX3N0YXJ0X3N5bmMoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIGludCAqYmxvY2tzKQoreworCWJpdG1hcF9jb3VudGVyX3QgKmJtYzsKKwlpbnQgcnY7CisJaWYgKGJpdG1hcCA9PSBOVUxMKSB7LyogRklYTUUgb3IgYml0bWFwIHNldCBhcyAnZmFpbGVkJyAqLworCQkqYmxvY2tzID0gMTAyNDsKKwkJcmV0dXJuIDE7IC8qIGFsd2F5cyByZXN5bmMgaWYgbm8gYml0bWFwICovCisJfQorCXNwaW5fbG9ja19pcnEoJmJpdG1hcC0+bG9jayk7CisJYm1jID0gYml0bWFwX2dldF9jb3VudGVyKGJpdG1hcCwgb2Zmc2V0LCBibG9ja3MsIDApOworCXJ2ID0gMDsKKwlpZiAoYm1jKSB7CisJCS8qIGxvY2tlZCAqLworCQlpZiAoUkVTWU5DKCpibWMpKQorCQkJcnYgPSAxOworCQllbHNlIGlmIChORUVERUQoKmJtYykpIHsKKwkJCXJ2ID0gMTsKKwkJCSpibWMgfD0gUkVTWU5DX01BU0s7CisJCQkqYm1jICY9IH5ORUVERURfTUFTSzsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEoJmJpdG1hcC0+bG9jayk7CisJcmV0dXJuIHJ2OworfQorCit2b2lkIGJpdG1hcF9lbmRfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IG9mZnNldCwgaW50ICpibG9ja3MsIGludCBhYm9ydGVkKQoreworCWJpdG1hcF9jb3VudGVyX3QgKmJtYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworLyoKKwlpZiAob2Zmc2V0ID09IDApIHByaW50aygiYml0bWFwX2VuZF9zeW5jIDAgKCVkKVxuIiwgYWJvcnRlZCk7CisqLwlpZiAoYml0bWFwID09IE5VTEwpIHsKKwkJKmJsb2NrcyA9IDEwMjQ7CisJCXJldHVybjsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworCWJtYyA9IGJpdG1hcF9nZXRfY291bnRlcihiaXRtYXAsIG9mZnNldCwgYmxvY2tzLCAwKTsKKwlpZiAoYm1jID09IE5VTEwpCisJCWdvdG8gdW5sb2NrOworCS8qIGxvY2tlZCAqLworLyoKKwlpZiAob2Zmc2V0ID09IDApIHByaW50aygiYml0bWFwX2VuZCBzeW5jIGZvdW5kIDB4JXgsIGJsb2NrcyAlZFxuIiwgKmJtYywgKmJsb2Nrcyk7CisqLworCWlmIChSRVNZTkMoKmJtYykpIHsKKwkJKmJtYyAmPSB+UkVTWU5DX01BU0s7CisKKwkJaWYgKCFORUVERUQoKmJtYykgJiYgYWJvcnRlZCkKKwkJCSpibWMgfD0gTkVFREVEX01BU0s7CisJCWVsc2UgeworCQkJaWYgKCpibWMgPD0gMikgeworCQkJCXNldF9wYWdlX2F0dHIoYml0bWFwLAorCQkJCQkgICAgICBmaWxlbWFwX2dldF9wYWdlKGJpdG1hcCwgb2Zmc2V0ID4+IENIVU5LX0JMT0NLX1NISUZUKGJpdG1hcCkpLAorCQkJCQkgICAgICBCSVRNQVBfUEFHRV9DTEVBTik7CisJCQl9CisJCX0KKwl9CisgdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIGJpdG1hcF9jbG9zZV9zeW5jKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKK3sKKwkvKiBTeW5jIGhhcyBmaW5pc2hlZCwgYW5kIGFueSBiaXRtYXAgY2h1bmtzIHRoYXQgd2VyZW4ndCBzeW5jZWQKKwkgKiBwcm9wZXJseSBoYXZlIGJlZW4gYWJvcnRlZC4gIEl0IHJlbWFpbnMgdG8gdXMgdG8gY2xlYXIgdGhlCisJICogUkVTWU5DIGJpdCB3aGVyZXZlciBpdCBpcyBzdGlsbCBvbgorCSAqLworCXNlY3Rvcl90IHNlY3RvciA9IDA7CisJaW50IGJsb2NrczsKKwlpZiAoIWJpdG1hcCkgcmV0dXJuOworCXdoaWxlIChzZWN0b3IgPCBiaXRtYXAtPm1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMpIHsKKwkJYml0bWFwX2VuZF9zeW5jKGJpdG1hcCwgc2VjdG9yLCAmYmxvY2tzLCAwKTsKKy8qCisJCWlmIChzZWN0b3IgPCA1MDApIHByaW50aygiYml0bWFwX2Nsb3NlX3N5bmM6IHNlYyAlbGx1IGJsa3MgJWRcbiIsCisJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXNlY3RvciwgYmxvY2tzKTsKKyovCQlzZWN0b3IgKz0gYmxvY2tzOworCX0KK30KKworc3RhdGljIHZvaWQgYml0bWFwX3NldF9tZW1vcnlfYml0cyhzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IG9mZnNldCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHNlY3RvcnMsIGludCBpbl9zeW5jKQoreworCS8qIEZvciBlYWNoIGNodW5rIGNvdmVyZWQgYnkgYW55IG9mIHRoZXNlIHNlY3RvcnMsIHNldCB0aGUKKwkgKiBjb3VudGVyIHRvIDEgYW5kIHNldCByZXN5bmNfbmVlZGVkIHVubGVzcyBpbl9zeW5jLiAgVGhleSBzaG91bGQgYWxsCisJICogYmUgMCBhdCB0aGlzIHBvaW50CisJICovCisJd2hpbGUgKHNlY3RvcnMpIHsKKwkJaW50IHNlY3M7CisJCWJpdG1hcF9jb3VudGVyX3QgKmJtYzsKKwkJc3Bpbl9sb2NrX2lycSgmYml0bWFwLT5sb2NrKTsKKwkJYm1jID0gYml0bWFwX2dldF9jb3VudGVyKGJpdG1hcCwgb2Zmc2V0LCAmc2VjcywgMSk7CisJCWlmICghYm1jKSB7CisJCQlzcGluX3VubG9ja19pcnEoJmJpdG1hcC0+bG9jayk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKCEgKmJtYykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCQkqYm1jID0gMSB8IChpbl9zeW5jPyAwIDogTkVFREVEX01BU0spOworCQkJYml0bWFwX2NvdW50X3BhZ2UoYml0bWFwLCBvZmZzZXQsIDEpOworCQkJcGFnZSA9IGZpbGVtYXBfZ2V0X3BhZ2UoYml0bWFwLCBvZmZzZXQgPj4gQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSk7CisJCQlzZXRfcGFnZV9hdHRyKGJpdG1hcCwgcGFnZSwgQklUTUFQX1BBR0VfQ0xFQU4pOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmYml0bWFwLT5sb2NrKTsKKwkJaWYgKHNlY3RvcnMgPiBzZWNzKQorCQkJc2VjdG9ycyAtPSBzZWNzOworCQllbHNlCisJCQlzZWN0b3JzID0gMDsKKwl9Cit9CisKKy8qCisgKiBmcmVlIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAqLwordm9pZCBiaXRtYXBfZGVzdHJveShtZGRldl90ICptZGRldikKK3sKKwl1bnNpZ25lZCBsb25nIGssIHBhZ2VzOworCXN0cnVjdCBiaXRtYXBfcGFnZSAqYnA7CisJc3RydWN0IGJpdG1hcCAqYml0bWFwID0gbWRkZXYtPmJpdG1hcDsKKworCWlmICghYml0bWFwKSAvKiB0aGVyZSB3YXMgbm8gYml0bWFwICovCisJCXJldHVybjsKKworCW1kZGV2LT5iaXRtYXAgPSBOVUxMOyAvKiBkaXNjb25uZWN0IGZyb20gdGhlIG1kIGRldmljZSAqLworCisJLyogcmVsZWFzZSB0aGUgYml0bWFwIGZpbGUgYW5kIGtpbGwgdGhlIGRhZW1vbiAqLworCWJpdG1hcF9maWxlX3B1dChiaXRtYXApOworCisJYnAgPSBiaXRtYXAtPmJwOworCXBhZ2VzID0gYml0bWFwLT5wYWdlczsKKworCS8qIGZyZWUgYWxsIGFsbG9jYXRlZCBtZW1vcnkgKi8KKworCW1lbXBvb2xfZGVzdHJveShiaXRtYXAtPndyaXRlX3Bvb2wpOworCisJaWYgKGJwKSAvKiBkZWFsbG9jYXRlIHRoZSBwYWdlIG1lbW9yeSAqLworCQlmb3IgKGsgPSAwOyBrIDwgcGFnZXM7IGsrKykKKwkJCWlmIChicFtrXS5tYXAgJiYgIWJwW2tdLmhpamFja2VkKQorCQkJCWtmcmVlKGJwW2tdLm1hcCk7CisJa2ZyZWUoYnApOworCWtmcmVlKGJpdG1hcCk7Cit9CisKKy8qCisgKiBpbml0aWFsaXplIHRoZSBiaXRtYXAgc3RydWN0dXJlCisgKiBpZiB0aGlzIHJldHVybnMgYW4gZXJyb3IsIGJpdG1hcF9kZXN0cm95IG11c3QgYmUgY2FsbGVkIHRvIGRvIGNsZWFuIHVwCisgKi8KK2ludCBiaXRtYXBfY3JlYXRlKG1kZGV2X3QgKm1kZGV2KQoreworCXN0cnVjdCBiaXRtYXAgKmJpdG1hcDsKKwl1bnNpZ25lZCBsb25nIGJsb2NrcyA9IG1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnM7CisJdW5zaWduZWQgbG9uZyBjaHVua3M7CisJdW5zaWduZWQgbG9uZyBwYWdlczsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IG1kZGV2LT5iaXRtYXBfZmlsZTsKKwlpbnQgZXJyOworCisJQlVHX09OKHNpemVvZihiaXRtYXBfc3VwZXJfdCkgIT0gMjU2KTsKKworCWlmICghZmlsZSAmJiAhbWRkZXYtPmJpdG1hcF9vZmZzZXQpIC8qIGJpdG1hcCBkaXNhYmxlZCwgbm90aGluZyB0byBkbyAqLworCQlyZXR1cm4gMDsKKworCUJVR19PTihmaWxlICYmIG1kZGV2LT5iaXRtYXBfb2Zmc2V0KTsKKworCWJpdG1hcCA9IGttYWxsb2Moc2l6ZW9mKCpiaXRtYXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJpdG1hcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoYml0bWFwLCAwLCBzaXplb2YoKmJpdG1hcCkpOworCisJc3Bpbl9sb2NrX2luaXQoJmJpdG1hcC0+bG9jayk7CisJYml0bWFwLT5tZGRldiA9IG1kZGV2OworCW1kZGV2LT5iaXRtYXAgPSBiaXRtYXA7CisKKwlzcGluX2xvY2tfaW5pdCgmYml0bWFwLT53cml0ZV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmYml0bWFwLT5jb21wbGV0ZV9wYWdlcyk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYml0bWFwLT53cml0ZV93YWl0KTsKKwliaXRtYXAtPndyaXRlX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZShXUklURV9QT09MX1NJWkUsIHdyaXRlX3Bvb2xfYWxsb2MsCisJCQkJd3JpdGVfcG9vbF9mcmVlLCBOVUxMKTsKKwlpZiAoIWJpdG1hcC0+d3JpdGVfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwliaXRtYXAtPmZpbGUgPSBmaWxlOworCWJpdG1hcC0+b2Zmc2V0ID0gbWRkZXYtPmJpdG1hcF9vZmZzZXQ7CisJaWYgKGZpbGUpIGdldF9maWxlKGZpbGUpOworCS8qIHJlYWQgc3VwZXJibG9jayBmcm9tIGJpdG1hcCBmaWxlICh0aGlzIHNldHMgYml0bWFwLT5jaHVua3NpemUpICovCisJZXJyID0gYml0bWFwX3JlYWRfc2IoYml0bWFwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJYml0bWFwLT5jaHVua3NoaWZ0ID0gZmluZF9maXJzdF9iaXQoJmJpdG1hcC0+Y2h1bmtzaXplLAorCQkJCQlzaXplb2YoYml0bWFwLT5jaHVua3NpemUpKTsKKworCS8qIG5vdyB0aGF0IGNodW5rc2l6ZSBhbmQgY2h1bmtzaGlmdCBhcmUgc2V0LCB3ZSBjYW4gdXNlIHRoZXNlIG1hY3JvcyAqLworIAljaHVua3MgPSAoYmxvY2tzICsgQ0hVTktfQkxPQ0tfUkFUSU8oYml0bWFwKSAtIDEpIC8KKwkJCUNIVU5LX0JMT0NLX1JBVElPKGJpdG1hcCk7CisgCXBhZ2VzID0gKGNodW5rcyArIFBBR0VfQ09VTlRFUl9SQVRJTyAtIDEpIC8gUEFHRV9DT1VOVEVSX1JBVElPOworCisJQlVHX09OKCFwYWdlcyk7CisKKwliaXRtYXAtPmNodW5rcyA9IGNodW5rczsKKwliaXRtYXAtPnBhZ2VzID0gcGFnZXM7CisJYml0bWFwLT5taXNzaW5nX3BhZ2VzID0gcGFnZXM7CisJYml0bWFwLT5jb3VudGVyX2JpdHMgPSBDT1VOVEVSX0JJVFM7CisKKwliaXRtYXAtPnN5bmNjaHVuayA9IH4wVUw7CisKKyNpZiBJTkpFQ1RfRkFUQUxfRkFVTFRfMQorCWJpdG1hcC0+YnAgPSBOVUxMOworI2Vsc2UKKwliaXRtYXAtPmJwID0ga21hbGxvYyhwYWdlcyAqIHNpemVvZigqYml0bWFwLT5icCksIEdGUF9LRVJORUwpOworI2VuZGlmCisJaWYgKCFiaXRtYXAtPmJwKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoYml0bWFwLT5icCwgMCwgcGFnZXMgKiBzaXplb2YoKmJpdG1hcC0+YnApKTsKKworCWJpdG1hcC0+ZmxhZ3MgfD0gQklUTUFQX0FDVElWRTsKKworCS8qIG5vdyB0aGF0IHdlIGhhdmUgc29tZSBwYWdlcyBhdmFpbGFibGUsIGluaXRpYWxpemUgdGhlIGluLW1lbW9yeQorCSAqIGJpdG1hcCBmcm9tIHRoZSBvbi1kaXNrIGJpdG1hcCAqLworCWVyciA9IGJpdG1hcF9pbml0X2Zyb21fZGlzayhiaXRtYXAsIG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlwcmludGsoS0VSTl9JTkZPICJjcmVhdGVkIGJpdG1hcCAoJWx1IHBhZ2VzKSBmb3IgZGV2aWNlICVzXG4iLAorCQlwYWdlcywgYm1uYW1lKGJpdG1hcCkpOworCisJLyoga2ljayBvZmYgdGhlIGJpdG1hcCBkYWVtb25zICovCisJZXJyID0gYml0bWFwX3N0YXJ0X2RhZW1vbnMoYml0bWFwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiBiaXRtYXBfdXBkYXRlX3NiKGJpdG1hcCk7Cit9CisKKy8qIHRoZSBiaXRtYXAgQVBJIC0tIGZvciByYWlkIHBlcnNvbmFsaXRpZXMgKi8KK0VYUE9SVF9TWU1CT0woYml0bWFwX3N0YXJ0d3JpdGUpOworRVhQT1JUX1NZTUJPTChiaXRtYXBfZW5kd3JpdGUpOworRVhQT1JUX1NZTUJPTChiaXRtYXBfc3RhcnRfc3luYyk7CitFWFBPUlRfU1lNQk9MKGJpdG1hcF9lbmRfc3luYyk7CitFWFBPUlRfU1lNQk9MKGJpdG1hcF91bnBsdWcpOworRVhQT1JUX1NZTUJPTChiaXRtYXBfY2xvc2Vfc3luYyk7CitFWFBPUlRfU1lNQk9MKGJpdG1hcF9kYWVtb25fd29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggMGRkNmMyYi4uZDBhNGJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtNzA0LDggKzcwNCw3IEBACiAJbWVtcG9vbF9kZXN0cm95KGNjLT5wYWdlX3Bvb2wpOwogCW1lbXBvb2xfZGVzdHJveShjYy0+aW9fcG9vbCk7CiAKLQlpZiAoY2MtPml2X21vZGUpCi0JCWtmcmVlKGNjLT5pdl9tb2RlKTsKKwlrZnJlZShjYy0+aXZfbW9kZSk7CiAJaWYgKGNjLT5pdl9nZW5fb3BzICYmIGNjLT5pdl9nZW5fb3BzLT5kdHIpCiAJCWNjLT5pdl9nZW5fb3BzLT5kdHIoY2MpOwogCWNyeXB0b19mcmVlX3RmbShjYy0+dGZtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbGluZWFyLmMgYi9kcml2ZXJzL21kL2xpbmVhci5jCmluZGV4IGIxOTQxYjguLjhkNzQwMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbGluZWFyLmMKKysrIGIvZHJpdmVycy9tZC9saW5lYXIuYwpAQCAtMjE3LDggKzIxNyw3IEBACiAJcmV0dXJuIDA7CiAKIG91dDoKLQlpZiAoY29uZikKLQkJa2ZyZWUoY29uZik7CisJa2ZyZWUoY29uZik7CiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBkODk5MjA0Li4wYzZiNWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0xOSw2ICsxOSw5IEBACiAKICAgICAgTmVpbCBCcm93biA8bmVpbGJAY3NlLnVuc3cuZWR1LmF1Pi4KIAorICAgLSBwZXJzaXN0ZW50IGJpdG1hcCBjb2RlCisgICAgIENvcHlyaWdodCAoQykgMjAwMy0yMDA0LCBQYXVsIENsZW1lbnRzLCBTdGVlbEV5ZSBUZWNobm9sb2d5LCBJbmMuCisKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQpAQCAtMzMsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPiAvKiBmb3IgaW52YWxpZGF0ZV9iZGV2ICovCkBAIC00MCw2ICs0NCw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisKICNpZmRlZiBDT05GSUdfS01PRAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNlbmRpZgpAQCAtMTg5LDggKzE5NSw3IEBACiAJCWlmIChtZGRldi0+dW5pdCA9PSB1bml0KSB7CiAJCQltZGRldl9nZXQobWRkZXYpOwogCQkJc3Bpbl91bmxvY2soJmFsbF9tZGRldnNfbG9jayk7Ci0JCQlpZiAobmV3KQotCQkJCWtmcmVlKG5ldyk7CisJCQlrZnJlZShuZXcpOwogCQkJcmV0dXJuIG1kZGV2OwogCQl9CiAKQEAgLTIxOCw2ICsyMjMsOCBAQAogCUlOSVRfTElTVF9IRUFEKCZuZXctPmFsbF9tZGRldnMpOwogCWluaXRfdGltZXIoJm5ldy0+c2FmZW1vZGVfdGltZXIpOwogCWF0b21pY19zZXQoJm5ldy0+YWN0aXZlLCAxKTsKKwlzcGluX2xvY2tfaW5pdCgmbmV3LT53cml0ZV9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuZXctPnNiX3dhaXQpOwogCiAJbmV3LT5xdWV1ZSA9IGJsa19hbGxvY19xdWV1ZShHRlBfS0VSTkVMKTsKIAlpZiAoIW5ldy0+cXVldWUpIHsKQEAgLTMyMCw2ICszMjcsNDAgQEAKIH0KIAogCitzdGF0aWMgaW50IHN1cGVyX3dyaXR0ZW4oc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9yKQoreworCW1ka19yZGV2X3QgKnJkZXYgPSBiaW8tPmJpX3ByaXZhdGU7CisJaWYgKGJpby0+Ymlfc2l6ZSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoZXJyb3IgfHwgIXRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpKQorCQltZF9lcnJvcihyZGV2LT5tZGRldiwgcmRldik7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmRldi0+bWRkZXYtPnBlbmRpbmdfd3JpdGVzKSkKKwkJd2FrZV91cCgmcmRldi0+bWRkZXYtPnNiX3dhaXQpOworCXJldHVybiAwOworfQorCit2b2lkIG1kX3N1cGVyX3dyaXRlKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2LAorCQkgICBzZWN0b3JfdCBzZWN0b3IsIGludCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwkvKiB3cml0ZSBmaXJzdCBzaXplIGJ5dGVzIG9mIHBhZ2UgdG8gc2VjdG9yIG9mIHJkZXYKKwkgKiBJbmNyZW1lbnQgbWRkZXYtPnBlbmRpbmdfd3JpdGVzIGJlZm9yZSByZXR1cm5pbmcKKwkgKiBhbmQgZGVjcmVtZW50IGl0IG9uIGNvbXBsZXRpb24sIHdha2luZyB1cCBzYl93YWl0CisJICogaWYgemVybyBpcyByZWFjaGVkLgorCSAqIElmIGFuIGVycm9yIG9jY3VycmVkLCBjYWxsIG1kX2Vycm9yCisJICovCisJc3RydWN0IGJpbyAqYmlvID0gYmlvX2FsbG9jKEdGUF9OT0lPLCAxKTsKKworCWJpby0+YmlfYmRldiA9IHJkZXYtPmJkZXY7CisJYmlvLT5iaV9zZWN0b3IgPSBzZWN0b3I7CisJYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgc2l6ZSwgMCk7CisJYmlvLT5iaV9wcml2YXRlID0gcmRldjsKKwliaW8tPmJpX2VuZF9pbyA9IHN1cGVyX3dyaXR0ZW47CisJYXRvbWljX2luYygmbWRkZXYtPnBlbmRpbmdfd3JpdGVzKTsKKwlzdWJtaXRfYmlvKCgxPDxCSU9fUlcpfCgxPDxCSU9fUldfU1lOQyksIGJpbyk7Cit9CisKIHN0YXRpYyBpbnQgYmlfY29tcGxldGUoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9yKQogewogCWlmIChiaW8tPmJpX3NpemUpCkBAIC0zMjksNyArMzcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzeW5jX3BhZ2VfaW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgc2l6ZSwKK2ludCBzeW5jX3BhZ2VfaW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgc2l6ZSwKIAkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBydykKIHsKIAlzdHJ1Y3QgYmlvICpiaW8gPSBiaW9fYWxsb2MoR0ZQX05PSU8sIDEpOwpAQCAtNDE2LDExICs0NTcsOCBAQAogCQlyZXQgPSAxOwogCiBhYm9ydDoKLQlpZiAodG1wMSkKLQkJa2ZyZWUodG1wMSk7Ci0JaWYgKHRtcDIpCi0JCWtmcmVlKHRtcDIpOwotCisJa2ZyZWUodG1wMSk7CisJa2ZyZWUodG1wMik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTY5LDYgKzYwNyw4IEBACiAJbWRwX2Rpc2tfdCAqZGVzYzsKIAltZHBfc3VwZXJfdCAqc2IgPSAobWRwX3N1cGVyX3QgKilwYWdlX2FkZHJlc3MocmRldi0+c2JfcGFnZSk7CiAKKwlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKKwlyZGV2LT5pbl9zeW5jID0gMDsKIAlpZiAobWRkZXYtPnJhaWRfZGlza3MgPT0gMCkgewogCQltZGRldi0+bWFqb3JfdmVyc2lvbiA9IDA7CiAJCW1kZGV2LT5taW5vcl92ZXJzaW9uID0gc2ItPm1pbm9yX3ZlcnNpb247CkBAIC01OTksMTYgKzYzOSwzNSBAQAogCQltZW1jcHkobWRkZXYtPnV1aWQrMTIsJnNiLT5zZXRfdXVpZDMsIDQpOwogCiAJCW1kZGV2LT5tYXhfZGlza3MgPSBNRF9TQl9ESVNLUzsKLQl9IGVsc2UgewotCQlfX3U2NCBldjE7Ci0JCWV2MSA9IG1kX2V2ZW50KHNiKTsKKworCQlpZiAoc2ItPnN0YXRlICYgKDE8PE1EX1NCX0JJVE1BUF9QUkVTRU5UKSAmJgorCQkgICAgbWRkZXYtPmJpdG1hcF9maWxlID09IE5VTEwpIHsKKwkJCWlmIChtZGRldi0+bGV2ZWwgIT0gMSkgeworCQkJCS8qIEZJWE1FIHVzZSBhIGJldHRlciB0ZXN0ICovCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWQ6IGJpdG1hcHMgb25seSBzdXBwb3J0IGZvciByYWlkMVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQltZGRldi0+Yml0bWFwX29mZnNldCA9IChNRF9TQl9CWVRFUyA+PiA5KTsKKwkJfQorCisJfSBlbHNlIGlmIChtZGRldi0+cGVycyA9PSBOVUxMKSB7CisJCS8qIEluc2lzdCBvbiBnb29kIGV2ZW50IGNvdW50ZXIgd2hpbGUgYXNzZW1ibGluZyAqLworCQlfX3U2NCBldjEgPSBtZF9ldmVudChzYik7CiAJCSsrZXYxOwogCQlpZiAoZXYxIDwgbWRkZXYtPmV2ZW50cykgCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJfSBlbHNlIGlmIChtZGRldi0+Yml0bWFwKSB7CisJCS8qIGlmIGFkZGluZyB0byBhcnJheSB3aXRoIGEgYml0bWFwLCB0aGVuIHdlIGNhbiBhY2NlcHQgYW4KKwkJICogb2xkZXIgZGV2aWNlIC4uLiBidXQgbm90IHRvbyBvbGQuCisJCSAqLworCQlfX3U2NCBldjEgPSBtZF9ldmVudChzYik7CisJCWlmIChldjEgPCBtZGRldi0+Yml0bWFwLT5ldmVudHNfY2xlYXJlZCkKKwkJCXJldHVybiAwOworCX0gZWxzZSAvKiBqdXN0IGEgaG90LWFkZCBvZiBhIG5ldyBkZXZpY2UsIGxlYXZlIHJhaWRfZGlzayBhdCAtMSAqLworCQlyZXR1cm4gMDsKKwogCWlmIChtZGRldi0+bGV2ZWwgIT0gTEVWRUxfTVVMVElQQVRIKSB7Ci0JCXJkZXYtPnJhaWRfZGlzayA9IC0xOwotCQlyZGV2LT5pbl9zeW5jID0gcmRldi0+ZmF1bHR5ID0gMDsKKwkJcmRldi0+ZmF1bHR5ID0gMDsKIAkJZGVzYyA9IHNiLT5kaXNrcyArIHJkZXYtPmRlc2NfbnI7CiAKIAkJaWYgKGRlc2MtPnN0YXRlICYgKDE8PE1EX0RJU0tfRkFVTFRZKSkKQEAgLTYxOCw3ICs2NzcsOCBAQAogCQkJcmRldi0+aW5fc3luYyA9IDE7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSBkZXNjLT5yYWlkX2Rpc2s7CiAJCX0KLQl9CisJfSBlbHNlIC8qIE1VTFRJUEFUSCBhcmUgYWx3YXlzIGluc3luYyAqLworCQlyZGV2LT5pbl9zeW5jID0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjgzLDYgKzc0Myw5IEBACiAJc2ItPmxheW91dCA9IG1kZGV2LT5sYXlvdXQ7CiAJc2ItPmNodW5rX3NpemUgPSBtZGRldi0+Y2h1bmtfc2l6ZTsKIAorCWlmIChtZGRldi0+Yml0bWFwICYmIG1kZGV2LT5iaXRtYXBfZmlsZSA9PSBOVUxMKQorCQlzYi0+c3RhdGUgfD0gKDE8PE1EX1NCX0JJVE1BUF9QUkVTRU5UKTsKKwogCXNiLT5kaXNrc1swXS5zdGF0ZSA9ICgxPDxNRF9ESVNLX1JFTU9WRUQpOwogCUlURVJBVEVfUkRFVihtZGRldixyZGV2Mix0bXApIHsKIAkJbWRwX2Rpc2tfdCAqZDsKQEAgLTc4MCw3ICs4NDMsNyBAQAogCWNhc2UgMDoKIAkJc2Jfb2Zmc2V0ID0gcmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5OwogCQlzYl9vZmZzZXQgLT0gOCoyOwotCQlzYl9vZmZzZXQgJj0gfig0KjItMSk7CisJCXNiX29mZnNldCAmPSB+KHNlY3Rvcl90KSg0KjItMSk7CiAJCS8qIGNvbnZlcnQgZnJvbSBzZWN0b3JzIHRvIEsgKi8KIAkJc2Jfb2Zmc2V0IC89IDI7CiAJCWJyZWFrOwpAQCAtODYwLDYgKzkyMyw4IEBACiB7CiAJc3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiID0gKHN0cnVjdCBtZHBfc3VwZXJibG9ja18xKilwYWdlX2FkZHJlc3MocmRldi0+c2JfcGFnZSk7CiAKKwlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKKwlyZGV2LT5pbl9zeW5jID0gMDsKIAlpZiAobWRkZXYtPnJhaWRfZGlza3MgPT0gMCkgewogCQltZGRldi0+bWFqb3JfdmVyc2lvbiA9IDE7CiAJCW1kZGV2LT5wYXRjaF92ZXJzaW9uID0gMDsKQEAgLTg3NywxMyArOTQyLDMwIEBACiAJCW1lbWNweShtZGRldi0+dXVpZCwgc2ItPnNldF91dWlkLCAxNik7CiAKIAkJbWRkZXYtPm1heF9kaXNrcyA9ICAoNDA5Ni0yNTYpLzI7Ci0JfSBlbHNlIHsKLQkJX191NjQgZXYxOwotCQlldjEgPSBsZTY0X3RvX2NwdShzYi0+ZXZlbnRzKTsKKworCQlpZiAoKGxlMzJfdG9fY3B1KHNiLT5mZWF0dXJlX21hcCkgJiAxKSAmJgorCQkgICAgbWRkZXYtPmJpdG1hcF9maWxlID09IE5VTEwgKSB7CisJCQlpZiAobWRkZXYtPmxldmVsICE9IDEpIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZDogYml0bWFwcyBvbmx5IHN1cHBvcnRlZCBmb3IgcmFpZDFcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJbWRkZXYtPmJpdG1hcF9vZmZzZXQgPSAoX19zMzIpbGUzMl90b19jcHUoc2ItPmJpdG1hcF9vZmZzZXQpOworCQl9CisJfSBlbHNlIGlmIChtZGRldi0+cGVycyA9PSBOVUxMKSB7CisJCS8qIEluc2lzdCBvZiBnb29kIGV2ZW50IGNvdW50ZXIgd2hpbGUgYXNzZW1ibGluZyAqLworCQlfX3U2NCBldjEgPSBsZTY0X3RvX2NwdShzYi0+ZXZlbnRzKTsKIAkJKytldjE7CiAJCWlmIChldjEgPCBtZGRldi0+ZXZlbnRzKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCX0gZWxzZSBpZiAobWRkZXYtPmJpdG1hcCkgeworCQkvKiBJZiBhZGRpbmcgdG8gYXJyYXkgd2l0aCBhIGJpdG1hcCwgdGhlbiB3ZSBjYW4gYWNjZXB0IGFuCisJCSAqIG9sZGVyIGRldmljZSwgYnV0IG5vdCB0b28gb2xkLgorCQkgKi8KKwkJX191NjQgZXYxID0gbGU2NF90b19jcHUoc2ItPmV2ZW50cyk7CisJCWlmIChldjEgPCBtZGRldi0+Yml0bWFwLT5ldmVudHNfY2xlYXJlZCkKKwkJCXJldHVybiAwOworCX0gZWxzZSAvKiBqdXN0IGEgaG90LWFkZCBvZiBhIG5ldyBkZXZpY2UsIGxlYXZlIHJhaWRfZGlzayBhdCAtMSAqLworCQlyZXR1cm4gMDsKIAogCWlmIChtZGRldi0+bGV2ZWwgIT0gTEVWRUxfTVVMVElQQVRIKSB7CiAJCWludCByb2xlOwpAQCAtODkxLDE0ICs5NzMsMTAgQEAKIAkJcm9sZSA9IGxlMTZfdG9fY3B1KHNiLT5kZXZfcm9sZXNbcmRldi0+ZGVzY19ucl0pOwogCQlzd2l0Y2gocm9sZSkgewogCQljYXNlIDB4ZmZmZjogLyogc3BhcmUgKi8KLQkJCXJkZXYtPmluX3N5bmMgPSAwOwogCQkJcmRldi0+ZmF1bHR5ID0gMDsKLQkJCXJkZXYtPnJhaWRfZGlzayA9IC0xOwogCQkJYnJlYWs7CiAJCWNhc2UgMHhmZmZlOiAvKiBmYXVsdHkgKi8KLQkJCXJkZXYtPmluX3N5bmMgPSAwOwogCQkJcmRldi0+ZmF1bHR5ID0gMTsKLQkJCXJkZXYtPnJhaWRfZGlzayA9IC0xOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZGV2LT5pbl9zeW5jID0gMTsKQEAgLTkwNiw3ICs5ODQsOSBAQAogCQkJcmRldi0+cmFpZF9kaXNrID0gcm9sZTsKIAkJCWJyZWFrOwogCQl9Ci0JfQorCX0gZWxzZSAvKiBNVUxUSVBBVEggYXJlIGFsd2F5cyBpbnN5bmMgKi8KKwkJcmRldi0+aW5fc3luYyA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTMzLDYgKzEwMTMsMTEgQEAKIAllbHNlCiAJCXNiLT5yZXN5bmNfb2Zmc2V0ID0gY3B1X3RvX2xlNjQoMCk7CiAKKwlpZiAobWRkZXYtPmJpdG1hcCAmJiBtZGRldi0+Yml0bWFwX2ZpbGUgPT0gTlVMTCkgeworCQlzYi0+Yml0bWFwX29mZnNldCA9IGNwdV90b19sZTMyKChfX3UzMiltZGRldi0+Yml0bWFwX29mZnNldCk7CisJCXNiLT5mZWF0dXJlX21hcCA9IGNwdV90b19sZTMyKDEpOworCX0KKwogCW1heF9kZXYgPSAwOwogCUlURVJBVEVfUkRFVihtZGRldixyZGV2Mix0bXApCiAJCWlmIChyZGV2Mi0+ZGVzY19ucisxID4gbWF4X2RldikKQEAgLTExOTYsOCArMTI4MSwxMSBAQAogCXByaW50aygibWQ6CSogPENPTVBMRVRFIFJBSUQgU1RBVEUgUFJJTlRPVVQ+ICpcbiIpOwogCXByaW50aygibWQ6CSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwogCUlURVJBVEVfTURERVYobWRkZXYsdG1wKSB7Ci0JCXByaW50aygiJXM6ICIsIG1kbmFtZShtZGRldikpOwogCisJCWlmIChtZGRldi0+Yml0bWFwKQorCQkJYml0bWFwX3ByaW50X3NiKG1kZGV2LT5iaXRtYXApOworCQllbHNlCisJCQlwcmludGsoIiVzOiAiLCBtZG5hbWUobWRkZXYpKTsKIAkJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wMikKIAkJCXByaW50aygiPCVzPiIsIGJkZXZuYW1lKHJkZXYtPmJkZXYsYikpOwogCQlwcmludGsoIlxuIik7CkBAIC0xMjEwLDMwICsxMjk4LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IHdyaXRlX2Rpc2tfc2IobWRrX3JkZXZfdCAqIHJkZXYpCi17Ci0JY2hhciBiW0JERVZOQU1FX1NJWkVdOwotCWlmICghcmRldi0+c2JfbG9hZGVkKSB7Ci0JCU1EX0JVRygpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKHJkZXYtPmZhdWx0eSkgewotCQlNRF9CVUcoKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JZHByaW50ayhLRVJOX0lORk8gIih3cml0ZSkgJXMncyBzYiBvZmZzZXQ6ICVsbHVcbiIsCi0JCWJkZXZuYW1lKHJkZXYtPmJkZXYsYiksCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2Jfb2Zmc2V0KTsKLSAgCi0JaWYgKHN5bmNfcGFnZV9pbyhyZGV2LT5iZGV2LCByZGV2LT5zYl9vZmZzZXQ8PDEsIE1EX1NCX0JZVEVTLCByZGV2LT5zYl9wYWdlLCBXUklURSkpCi0JCXJldHVybiAwOwotCi0JcHJpbnRrKCJtZDogd3JpdGVfZGlza19zYiBmYWlsZWQgZm9yIGRldmljZSAlc1xuIiwgCi0JCWJkZXZuYW1lKHJkZXYtPmJkZXYsYikpOwotCXJldHVybiAxOwotfQotCiBzdGF0aWMgdm9pZCBzeW5jX3NicyhtZGRldl90ICogbWRkZXYpCiB7CiAJbWRrX3JkZXZfdCAqcmRldjsKQEAgLTEyNDgsMTIgKzEzMTIsMTQgQEAKIAogc3RhdGljIHZvaWQgbWRfdXBkYXRlX3NiKG1kZGV2X3QgKiBtZGRldikKIHsKLQlpbnQgZXJyLCBjb3VudCA9IDEwMDsKKwlpbnQgZXJyOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAltZGtfcmRldl90ICpyZGV2OworCWludCBzeW5jX3JlcTsKIAotCW1kZGV2LT5zYl9kaXJ0eSA9IDA7CiByZXBlYXQ6CisJc3Bpbl9sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisJc3luY19yZXEgPSBtZGRldi0+aW5fc3luYzsKIAltZGRldi0+dXRpbWUgPSBnZXRfc2Vjb25kcygpOwogCW1kZGV2LT5ldmVudHMgKys7CiAKQEAgLTEyNjYsMjAgKzEzMzIsMjYgQEAKIAkJTURfQlVHKCk7CiAJCW1kZGV2LT5ldmVudHMgLS07CiAJfQorCW1kZGV2LT5zYl9kaXJ0eSA9IDI7CiAJc3luY19zYnMobWRkZXYpOwogCiAJLyoKIAkgKiBkbyBub3Qgd3JpdGUgYW55dGhpbmcgdG8gZGlzayBpZiB1c2luZwogCSAqIG5vbnBlcnNpc3RlbnQgc3VwZXJibG9ja3MKIAkgKi8KLQlpZiAoIW1kZGV2LT5wZXJzaXN0ZW50KQorCWlmICghbWRkZXYtPnBlcnNpc3RlbnQpIHsKKwkJbWRkZXYtPnNiX2RpcnR5ID0gMDsKKwkJc3Bpbl91bmxvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKKwkJd2FrZV91cCgmbWRkZXYtPnNiX3dhaXQpOwogCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CiAKIAlkcHJpbnRrKEtFUk5fSU5GTyAKIAkJIm1kOiB1cGRhdGluZyAlcyBSQUlEIHN1cGVyYmxvY2sgb24gZGV2aWNlIChpbiBzeW5jICVkKVxuIiwKIAkJbWRuYW1lKG1kZGV2KSxtZGRldi0+aW5fc3luYyk7CiAKLQllcnIgPSAwOworCWVyciA9IGJpdG1hcF91cGRhdGVfc2IobWRkZXYtPmJpdG1hcCk7CiAJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wKSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAkJZHByaW50ayhLRVJOX0lORk8gIm1kOiAiKTsKQEAgLTEyODgsMjIgKzEzNjAsMzIgQEAKIAogCQlkcHJpbnRrKCIlcyAiLCBiZGV2bmFtZShyZGV2LT5iZGV2LGIpKTsKIAkJaWYgKCFyZGV2LT5mYXVsdHkpIHsKLQkJCWVyciArPSB3cml0ZV9kaXNrX3NiKHJkZXYpOworCQkJbWRfc3VwZXJfd3JpdGUobWRkZXYscmRldiwKKwkJCQkgICAgICAgcmRldi0+c2Jfb2Zmc2V0PDwxLCBNRF9TQl9CWVRFUywKKwkJCQkgICAgICAgcmRldi0+c2JfcGFnZSk7CisJCQlkcHJpbnRrKEtFUk5fSU5GTyAiKHdyaXRlKSAlcydzIHNiIG9mZnNldDogJWxsdVxuIiwKKwkJCQliZGV2bmFtZShyZGV2LT5iZGV2LGIpLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2Jfb2Zmc2V0KTsKKwogCQl9IGVsc2UKIAkJCWRwcmludGsoIilcbiIpOwotCQlpZiAoIWVyciAmJiBtZGRldi0+bGV2ZWwgPT0gTEVWRUxfTVVMVElQQVRIKQorCQlpZiAobWRkZXYtPmxldmVsID09IExFVkVMX01VTFRJUEFUSCkKIAkJCS8qIG9ubHkgbmVlZCB0byB3cml0ZSBvbmUgc3VwZXJibG9jay4uLiAqLwogCQkJYnJlYWs7CiAJfQotCWlmIChlcnIpIHsKLQkJaWYgKC0tY291bnQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibWQ6IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgc3VwZXJibG9jayIKLQkJCQkiIHVwZGF0ZSwgcmVwZWF0aW5nXG4iKTsKLQkJCWdvdG8gcmVwZWF0OwotCQl9Ci0JCXByaW50ayhLRVJOX0VSUiBcCi0JCQkibWQ6IGV4Y2Vzc2l2ZSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHN1cGVyYmxvY2sgdXBkYXRlLCBleGl0aW5nXG4iKTsKKwl3YWl0X2V2ZW50KG1kZGV2LT5zYl93YWl0LCBhdG9taWNfcmVhZCgmbWRkZXYtPnBlbmRpbmdfd3JpdGVzKT09MCk7CisJLyogaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSwgc2JfZGlydHkgd2FzIHNldCB0byAxLCBhbmQgd2UgcmUtd3JpdGUgc3VwZXIgKi8KKworCXNwaW5fbG9jaygmbWRkZXYtPndyaXRlX2xvY2spOworCWlmIChtZGRldi0+aW5fc3luYyAhPSBzeW5jX3JlcXx8IG1kZGV2LT5zYl9kaXJ0eSA9PSAxKSB7CisJCS8qIGhhdmUgdG8gd3JpdGUgaXQgb3V0IGFnYWluICovCisJCXNwaW5fdW5sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisJCWdvdG8gcmVwZWF0OwogCX0KKwltZGRldi0+c2JfZGlydHkgPSAwOworCXNwaW5fdW5sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisJd2FrZV91cCgmbWRkZXYtPnNiX3dhaXQpOworCiB9CiAKIC8qCkBAIC0xNjA3LDEyICsxNjg5LDE5IEBACiAKIAltZGRldi0+cmVzeW5jX21heF9zZWN0b3JzID0gbWRkZXYtPnNpemUgPDwgMTsgLyogbWF5IGJlIG92ZXItcmlkZGVuIGJ5IHBlcnNvbmFsaXR5ICovCiAKLQllcnIgPSBtZGRldi0+cGVycy0+cnVuKG1kZGV2KTsKKwkvKiBiZWZvcmUgd2Ugc3RhcnQgdGhlIGFycmF5IHJ1bm5pbmcsIGluaXRpYWxpc2UgdGhlIGJpdG1hcCAqLworCWVyciA9IGJpdG1hcF9jcmVhdGUobWRkZXYpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjcmVhdGUgYml0bWFwICglZClcbiIsCisJCQltZG5hbWUobWRkZXYpLCBlcnIpOworCWVsc2UKKwkJZXJyID0gbWRkZXYtPnBlcnMtPnJ1bihtZGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIm1kOiBwZXJzLT5ydW4oKSBmYWlsZWQgLi4uXG4iKTsKIAkJbW9kdWxlX3B1dChtZGRldi0+cGVycy0+b3duZXIpOwogCQltZGRldi0+cGVycyA9IE5VTEw7Ci0JCXJldHVybiAtRUlOVkFMOworCQliaXRtYXBfZGVzdHJveShtZGRldik7CisJCXJldHVybiBlcnI7CiAJfQogIAlhdG9taWNfc2V0KCZtZGRldi0+d3JpdGVzX3BlbmRpbmcsMCk7CiAJbWRkZXYtPnNhZmVtb2RlID0gMDsKQEAgLTE3MjUsNiArMTgxNCwxNCBAQAogCQlpZiAocm8pCiAJCQlzZXRfZGlza19ybyhkaXNrLCAxKTsKIAl9CisKKwliaXRtYXBfZGVzdHJveShtZGRldik7CisJaWYgKG1kZGV2LT5iaXRtYXBfZmlsZSkgeworCQlhdG9taWNfc2V0KCZtZGRldi0+Yml0bWFwX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3dyaXRlY291bnQsIDEpOworCQlmcHV0KG1kZGV2LT5iaXRtYXBfZmlsZSk7CisJCW1kZGV2LT5iaXRtYXBfZmlsZSA9IE5VTEw7CisJfQorCiAJLyoKIAkgKiBGcmVlIHJlc291cmNlcyBpZiBmaW5hbCBzdG9wCiAJICovCkBAIC0xOTgzLDYgKzIwODAsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnZXRfYml0bWFwX2ZpbGUobWRkZXZfdCAqIG1kZGV2LCB2b2lkICogYXJnKQoreworCW1kdV9iaXRtYXBfZmlsZV90ICpmaWxlID0gTlVMTDsgLyogdG9vIGJpZyBmb3Igc3RhY2sgYWxsb2NhdGlvbiAqLworCWNoYXIgKnB0ciwgKmJ1ZiA9IE5VTEw7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlmaWxlID0ga21hbGxvYyhzaXplb2YoKmZpbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZpbGUpCisJCWdvdG8gb3V0OworCisJLyogYml0bWFwIGRpc2FibGVkLCB6ZXJvIHRoZSBmaXJzdCBieXRlIGFuZCBjb3B5IG91dCAqLworCWlmICghbWRkZXYtPmJpdG1hcCB8fCAhbWRkZXYtPmJpdG1hcC0+ZmlsZSkgeworCQlmaWxlLT5wYXRobmFtZVswXSA9ICdcMCc7CisJCWdvdG8gY29weV9vdXQ7CisJfQorCisJYnVmID0ga21hbGxvYyhzaXplb2YoZmlsZS0+cGF0aG5hbWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQ7CisKKwlwdHIgPSBmaWxlX3BhdGgobWRkZXYtPmJpdG1hcC0+ZmlsZSwgYnVmLCBzaXplb2YoZmlsZS0+cGF0aG5hbWUpKTsKKwlpZiAoIXB0cikKKwkJZ290byBvdXQ7CisKKwlzdHJjcHkoZmlsZS0+cGF0aG5hbWUsIHB0cik7CisKK2NvcHlfb3V0OgorCWVyciA9IDA7CisJaWYgKGNvcHlfdG9fdXNlcihhcmcsIGZpbGUsIHNpemVvZigqZmlsZSkpKQorCQllcnIgPSAtRUZBVUxUOworb3V0OgorCWtmcmVlKGJ1Zik7CisJa2ZyZWUoZmlsZSk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBnZXRfZGlza19pbmZvKG1kZGV2X3QgKiBtZGRldiwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7CiAJbWR1X2Rpc2tfaW5mb190IGluZm87CkBAIC0yMDc4LDExICsyMjExLDI1IEBACiAJCQkJUFRSX0VSUihyZGV2KSk7CiAJCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKIAkJfQorCQkvKiBzZXQgc2F2ZV9yYWlkX2Rpc2sgaWYgYXBwcm9wcmlhdGUgKi8KKwkJaWYgKCFtZGRldi0+cGVyc2lzdGVudCkgeworCQkJaWYgKGluZm8tPnN0YXRlICYgKDE8PE1EX0RJU0tfU1lOQykgICYmCisJCQkgICAgaW5mby0+cmFpZF9kaXNrIDwgbWRkZXYtPnJhaWRfZGlza3MpCisJCQkJcmRldi0+cmFpZF9kaXNrID0gaW5mby0+cmFpZF9kaXNrOworCQkJZWxzZQorCQkJCXJkZXYtPnJhaWRfZGlzayA9IC0xOworCQl9IGVsc2UKKwkJCXN1cGVyX3R5cGVzW21kZGV2LT5tYWpvcl92ZXJzaW9uXS4KKwkJCQl2YWxpZGF0ZV9zdXBlcihtZGRldiwgcmRldik7CisJCXJkZXYtPnNhdmVkX3JhaWRfZGlzayA9IHJkZXYtPnJhaWRfZGlzazsKKwogCQlyZGV2LT5pbl9zeW5jID0gMDsgLyoganVzdCB0byBiZSBzdXJlICovCiAJCXJkZXYtPnJhaWRfZGlzayA9IC0xOwogCQllcnIgPSBiaW5kX3JkZXZfdG9fYXJyYXkocmRldiwgbWRkZXYpOwogCQlpZiAoZXJyKQogCQkJZXhwb3J0X3JkZXYocmRldik7CisKKwkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCQlpZiAobWRkZXYtPnRocmVhZCkKIAkJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJCXJldHVybiBlcnI7CkBAIC0yMjU2LDYgKzI0MDMsNDkgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKiBzaW1pbGFyIHRvIGRlbnlfd3JpdGVfYWNjZXNzLCBidXQgYWNjb3VudHMgZm9yIG91ciBob2xkaW5nIGEgcmVmZXJlbmNlCisgKiB0byB0aGUgZmlsZSBvdXJzZWx2ZXMgKi8KK3N0YXRpYyBpbnQgZGVueV9iaXRtYXBfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICogZmlsZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OworCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpID4gMSkgeworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCXJldHVybiAtRVRYVEJTWTsKKwl9CisJYXRvbWljX3NldCgmaW5vZGUtPmlfd3JpdGVjb3VudCwgLTEpOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9iaXRtYXBfZmlsZShtZGRldl90ICptZGRldiwgaW50IGZkKQoreworCWludCBlcnI7CisKKwlpZiAobWRkZXYtPnBlcnMpCisJCXJldHVybiAtRUJVU1k7CisKKwltZGRldi0+Yml0bWFwX2ZpbGUgPSBmZ2V0KGZkKTsKKworCWlmIChtZGRldi0+Yml0bWFwX2ZpbGUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvcjogZmFpbGVkIHRvIGdldCBiaXRtYXAgZmlsZVxuIiwKKwkJCW1kbmFtZShtZGRldikpOworCQlyZXR1cm4gLUVCQURGOworCX0KKworCWVyciA9IGRlbnlfYml0bWFwX3dyaXRlX2FjY2VzcyhtZGRldi0+Yml0bWFwX2ZpbGUpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3I6IGJpdG1hcCBmaWxlIGlzIGFscmVhZHkgaW4gdXNlXG4iLAorCQkJbWRuYW1lKG1kZGV2KSk7CisJCWZwdXQobWRkZXYtPmJpdG1hcF9maWxlKTsKKwkJbWRkZXYtPmJpdG1hcF9maWxlID0gTlVMTDsKKwl9IGVsc2UKKwkJbWRkZXYtPmJpdG1hcF9vZmZzZXQgPSAwOyAvKiBmaWxlIG92ZXJyaWRlcyBvZmZzZXQgKi8KKwlyZXR1cm4gZXJyOworfQorCiAvKgogICogc2V0X2FycmF5X2luZm8gaXMgdXNlZCB0d28gZGlmZmVyZW50IHdheXMKICAqIFRoZSBvcmlnaW5hbCB1c2FnZSBpcyB3aGVuIGNyZWF0aW5nIGEgbmV3IGFycmF5LgpAQCAtMjU2Nyw4ICsyNzU3LDEwIEBACiAJLyoKIAkgKiBDb21tYW5kcyBxdWVyeWluZy9jb25maWd1cmluZyBhbiBleGlzdGluZyBhcnJheToKIAkgKi8KLQkvKiBpZiB3ZSBhcmUgaW5pdGlhbGlzZWQgeWV0LCBvbmx5IEFERF9ORVdfRElTSyBvciBTVE9QX0FSUkFZIGlzIGFsbG93ZWQgKi8KLQlpZiAoIW1kZGV2LT5yYWlkX2Rpc2tzICYmIGNtZCAhPSBBRERfTkVXX0RJU0sgJiYgY21kICE9IFNUT1BfQVJSQVkgJiYgY21kICE9IFJVTl9BUlJBWSkgeworCS8qIGlmIHdlIGFyZSBub3QgaW5pdGlhbGlzZWQgeWV0LCBvbmx5IEFERF9ORVdfRElTSywgU1RPUF9BUlJBWSwKKwkgKiBSVU5fQVJSQVksIGFuZCBTRVRfQklUTUFQX0ZJTEUgYXJlIGFsbG93ZWQgKi8KKwlpZiAoIW1kZGV2LT5yYWlkX2Rpc2tzICYmIGNtZCAhPSBBRERfTkVXX0RJU0sgJiYgY21kICE9IFNUT1BfQVJSQVkKKwkJCSYmIGNtZCAhPSBSVU5fQVJSQVkgJiYgY21kICE9IFNFVF9CSVRNQVBfRklMRSkgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGFib3J0X3VubG9jazsKIAl9CkBAIC0yNTgyLDYgKzI3NzQsMTAgQEAKIAkJCWVyciA9IGdldF9hcnJheV9pbmZvKG1kZGV2LCBhcmdwKTsKIAkJCWdvdG8gZG9uZV91bmxvY2s7CiAKKwkJY2FzZSBHRVRfQklUTUFQX0ZJTEU6CisJCQllcnIgPSBnZXRfYml0bWFwX2ZpbGUobWRkZXYsICh2b2lkICopYXJnKTsKKwkJCWdvdG8gZG9uZV91bmxvY2s7CisKIAkJY2FzZSBHRVRfRElTS19JTkZPOgogCQkJZXJyID0gZ2V0X2Rpc2tfaW5mbyhtZGRldiwgYXJncCk7CiAJCQlnb3RvIGRvbmVfdW5sb2NrOwpAQCAtMjY2Miw2ICsyODU4LDEwIEBACiAJCQllcnIgPSBkb19tZF9ydW4gKG1kZGV2KTsKIAkJCWdvdG8gZG9uZV91bmxvY2s7CiAKKwkJY2FzZSBTRVRfQklUTUFQX0ZJTEU6CisJCQllcnIgPSBzZXRfYml0bWFwX2ZpbGUobWRkZXYsIChpbnQpYXJnKTsKKwkJCWdvdG8gZG9uZV91bmxvY2s7CisKIAkJZGVmYXVsdDoKIAkJCWlmIChfSU9DX1RZUEUoY21kKSA9PSBNRF9NQUpPUikKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZDogJXMocGlkICVkKSB1c2VkIgpAQCAtMjc3Myw4ICsyOTczLDkgQEAKIAl3aGlsZSAodGhyZWFkLT5ydW4pIHsKIAkJdm9pZCAoKnJ1bikobWRkZXZfdCAqKTsKIAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodGhyZWFkLT53cXVldWUsCi0JCQkJCSB0ZXN0X2JpdChUSFJFQURfV0FLRVVQLCAmdGhyZWFkLT5mbGFncykpOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh0aHJlYWQtPndxdWV1ZSwKKwkJCQkJCSB0ZXN0X2JpdChUSFJFQURfV0FLRVVQLCAmdGhyZWFkLT5mbGFncyksCisJCQkJCQkgdGhyZWFkLT50aW1lb3V0KTsKIAkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfRlJFRVpFKQogCQkJcmVmcmlnZXJhdG9yKFBGX0ZSRUVaRSk7CiAKQEAgLTI4MjAsNiArMzAyMSw3IEBACiAJdGhyZWFkLT5ydW4gPSBydW47CiAJdGhyZWFkLT5tZGRldiA9IG1kZGV2OwogCXRocmVhZC0+bmFtZSA9IG5hbWU7CisJdGhyZWFkLT50aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CiAJcmV0ID0ga2VybmVsX3RocmVhZChtZF90aHJlYWQsIHRocmVhZCwgMCk7CiAJaWYgKHJldCA8IDApIHsKIAkJa2ZyZWUodGhyZWFkKTsKQEAgLTI4NTgsMTMgKzMwNjAsMTMgQEAKIAogCWlmICghcmRldiB8fCByZGV2LT5mYXVsdHkpCiAJCXJldHVybjsKLQorLyoKIAlkcHJpbnRrKCJtZF9lcnJvciBkZXY6JXMsIHJkZXY6KCVkOiVkKSwgKGNhbGxlcjogJXAsJXAsJXAsJXApLlxuIiwKIAkJbWRuYW1lKG1kZGV2KSwKIAkJTUFKT1IocmRldi0+YmRldi0+YmRfZGV2KSwgTUlOT1IocmRldi0+YmRldi0+YmRfZGV2KSwKIAkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygxKSwKIAkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDIpLF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygzKSk7Ci0KKyovCiAJaWYgKCFtZGRldi0+cGVycy0+ZXJyb3JfaGFuZGxlcikKIAkJcmV0dXJuOwogCW1kZGV2LT5wZXJzLT5lcnJvcl9oYW5kbGVyKG1kZGV2LHJkZXYpOwpAQCAtMzAxOCw2ICszMjIwLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAyOwogCW1ka19yZGV2X3QgKnJkZXY7CiAJaW50IGk7CisJc3RydWN0IGJpdG1hcCAqYml0bWFwOwogCiAJaWYgKHYgPT0gKHZvaWQqKTEpIHsKIAkJc2VxX3ByaW50ZihzZXEsICJQZXJzb25hbGl0aWVzIDogIik7CkBAIC0zMDcwLDEwICszMjczLDM1IEBACiAJCWlmIChtZGRldi0+cGVycykgewogCQkJbWRkZXYtPnBlcnMtPnN0YXR1cyAoc2VxLCBtZGRldik7CiAJIAkJc2VxX3ByaW50ZihzZXEsICJcbiAgICAgICIpOwotCQkJaWYgKG1kZGV2LT5jdXJyX3Jlc3luYyA+IDIpCisJCQlpZiAobWRkZXYtPmN1cnJfcmVzeW5jID4gMikgewogCQkJCXN0YXR1c19yZXN5bmMgKHNlcSwgbWRkZXYpOwotCQkJZWxzZSBpZiAobWRkZXYtPmN1cnJfcmVzeW5jID09IDEgfHwgbWRkZXYtPmN1cnJfcmVzeW5jID09IDIpCi0JCQkJc2VxX3ByaW50ZihzZXEsICIJcmVzeW5jPURFTEFZRUQiKTsKKwkJCQlzZXFfcHJpbnRmKHNlcSwgIlxuICAgICAgIik7CisJCQl9IGVsc2UgaWYgKG1kZGV2LT5jdXJyX3Jlc3luYyA9PSAxIHx8IG1kZGV2LT5jdXJyX3Jlc3luYyA9PSAyKQorCQkJCXNlcV9wcmludGYoc2VxLCAiCXJlc3luYz1ERUxBWUVEXG4gICAgICAiKTsKKwkJfSBlbHNlCisJCQlzZXFfcHJpbnRmKHNlcSwgIlxuICAgICAgICIpOworCisJCWlmICgoYml0bWFwID0gbWRkZXYtPmJpdG1hcCkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgY2h1bmtfa2I7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOworCQkJY2h1bmtfa2IgPSBiaXRtYXAtPmNodW5rc2l6ZSA+PiAxMDsKKwkJCXNlcV9wcmludGYoc2VxLCAiYml0bWFwOiAlbHUvJWx1IHBhZ2VzIFslbHVLQl0sICIKKwkJCQkiJWx1JXMgY2h1bmsiLAorCQkJCWJpdG1hcC0+cGFnZXMgLSBiaXRtYXAtPm1pc3NpbmdfcGFnZXMsCisJCQkJYml0bWFwLT5wYWdlcywKKwkJCQkoYml0bWFwLT5wYWdlcyAtIGJpdG1hcC0+bWlzc2luZ19wYWdlcykKKwkJCQkJPDwgKFBBR0VfU0hJRlQgLSAxMCksCisJCQkJY2h1bmtfa2IgPyBjaHVua19rYiA6IGJpdG1hcC0+Y2h1bmtzaXplLAorCQkJCWNodW5rX2tiID8gIktCIiA6ICJCIik7CisJCQlpZiAoYml0bWFwLT5maWxlKSB7CisJCQkJc2VxX3ByaW50ZihzZXEsICIsIGZpbGU6ICIpOworCQkJCXNlcV9wYXRoKHNlcSwgYml0bWFwLT5maWxlLT5mX3Zmc21udCwKKwkJCQkJIGJpdG1hcC0+ZmlsZS0+Zl9kZW50cnksIiBcdFxuIik7CisJCQl9CisKKwkJCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOwogCQl9CiAKIAkJc2VxX3ByaW50ZihzZXEsICJcbiIpOwpAQCAtMzE3NiwxOSArMzQwNCwyOCBAQAogfQogCiAKLXZvaWQgbWRfd3JpdGVfc3RhcnQobWRkZXZfdCAqbWRkZXYpCisvKiBtZF93cml0ZV9zdGFydChtZGRldiwgYmkpCisgKiBJZiB3ZSBuZWVkIHRvIHVwZGF0ZSBzb21lIGFycmF5IG1ldGFkYXRhIChlLmcuICdhY3RpdmUnIGZsYWcKKyAqIGluIHN1cGVyYmxvY2spIGJlZm9yZSB3cml0aW5nLCBzY2hlZHVsZSBhIHN1cGVyYmxvY2sgdXBkYXRlCisgKiBhbmQgd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuCisgKi8KK3ZvaWQgbWRfd3JpdGVfc3RhcnQobWRkZXZfdCAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpKQogewotCWlmICghYXRvbWljX3JlYWQoJm1kZGV2LT53cml0ZXNfcGVuZGluZykpIHsKLQkJbWRkZXZfbG9ja191bmludGVycnVwdGlibGUobWRkZXYpOworCURFRklORV9XQUlUKHcpOworCWlmIChiaW9fZGF0YV9kaXIoYmkpICE9IFdSSVRFKQorCQlyZXR1cm47CisKKwlhdG9taWNfaW5jKCZtZGRldi0+d3JpdGVzX3BlbmRpbmcpOworCWlmIChtZGRldi0+aW5fc3luYykgeworCQlzcGluX2xvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKIAkJaWYgKG1kZGV2LT5pbl9zeW5jKSB7CiAJCQltZGRldi0+aW5fc3luYyA9IDA7Ci0gCQkJZGVsX3RpbWVyKCZtZGRldi0+c2FmZW1vZGVfdGltZXIpOwotCQkJbWRfdXBkYXRlX3NiKG1kZGV2KTsKKwkJCW1kZGV2LT5zYl9kaXJ0eSA9IDE7CisJCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCQl9Ci0JCWF0b21pY19pbmMoJm1kZGV2LT53cml0ZXNfcGVuZGluZyk7Ci0JCW1kZGV2X3VubG9jayhtZGRldik7Ci0JfSBlbHNlCi0JCWF0b21pY19pbmMoJm1kZGV2LT53cml0ZXNfcGVuZGluZyk7CisJCXNwaW5fdW5sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisJfQorCXdhaXRfZXZlbnQobWRkZXYtPnNiX3dhaXQsIG1kZGV2LT5zYl9kaXJ0eT09MCk7CiB9CiAKIHZvaWQgbWRfd3JpdGVfZW5kKG1kZGV2X3QgKm1kZGV2KQpAQCAtMzIwMSwzNyArMzQzOCw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWRfZW50ZXJfc2FmZW1vZGUobWRkZXZfdCAqbWRkZXYpCi17Ci0JaWYgKCFtZGRldi0+c2FmZW1vZGUpIHJldHVybjsKLQlpZiAobWRkZXYtPnNhZmVtb2RlID09IDIgJiYKLQkgICAgKGF0b21pY19yZWFkKCZtZGRldi0+d3JpdGVzX3BlbmRpbmcpIHx8IG1kZGV2LT5pbl9zeW5jIHx8Ci0JCSAgICBtZGRldi0+cmVjb3ZlcnlfY3AgIT0gTWF4U2VjdG9yKSkKLQkJcmV0dXJuOyAvKiBhdm9pZCB0aGUgbG9jayAqLwotCW1kZGV2X2xvY2tfdW5pbnRlcnJ1cHRpYmxlKG1kZGV2KTsKLQlpZiAobWRkZXYtPnNhZmVtb2RlICYmICFhdG9taWNfcmVhZCgmbWRkZXYtPndyaXRlc19wZW5kaW5nKSAmJgotCSAgICAhbWRkZXYtPmluX3N5bmMgJiYgbWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvcikgewotCQltZGRldi0+aW5fc3luYyA9IDE7Ci0JCW1kX3VwZGF0ZV9zYihtZGRldik7Ci0JfQotCW1kZGV2X3VubG9jayhtZGRldik7Ci0KLQlpZiAobWRkZXYtPnNhZmVtb2RlID09IDEpCi0JCW1kZGV2LT5zYWZlbW9kZSA9IDA7Ci19Ci0KLXZvaWQgbWRfaGFuZGxlX3NhZmVtb2RlKG1kZGV2X3QgKm1kZGV2KQotewotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQlwcmludGsoS0VSTl9JTkZPICJtZDogJXMgaW4gaW1tZWRpYXRlIHNhZmUgbW9kZVxuIiwKLQkJCW1kbmFtZShtZGRldikpOwotCQltZGRldi0+c2FmZW1vZGUgPSAyOwotCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOwotCX0KLQltZF9lbnRlcl9zYWZlbW9kZShtZGRldik7Ci19Ci0KLQogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJlc3luY193YWl0KTsKIAogI2RlZmluZSBTWU5DX01BUktTCTEwCkBAIC0zMjQxLDEyICszNDQ3LDEzIEBACiAJbWRkZXZfdCAqbWRkZXYyOwogCXVuc2lnbmVkIGludCBjdXJyc3BlZWQgPSAwLAogCQkgd2luZG93OwotCXNlY3Rvcl90IG1heF9zZWN0b3JzLGo7CisJc2VjdG9yX3QgbWF4X3NlY3RvcnMsaiwgaW9fc2VjdG9yczsKIAl1bnNpZ25lZCBsb25nIG1hcmtbU1lOQ19NQVJLU107CiAJc2VjdG9yX3QgbWFya19jbnRbU1lOQ19NQVJLU107CiAJaW50IGxhc3RfbWFyayxtOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAlzZWN0b3JfdCBsYXN0X2NoZWNrOworCWludCBza2lwcGVkID0gMDsKIAogCS8qIGp1c3QgaW5jYXNlIHRocmVhZCByZXN0YXJ0cy4uLiAqLwogCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KSkKQEAgLTMzMTIsNyArMzUxOSw3IEBACiAKIAlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCS8qIHJlc3luYyBmb2xsb3dzIHRoZSBzaXplIHJlcXVlc3RlZCBieSB0aGUgcGVyc29uYWxpdHksCi0JCSAqIHdoaWNoIGRlZmF1bHQgdG8gcGh5c2ljYWwgc2l6ZSwgYnV0IGNhbiBiZSB2aXJ0dWFsIHNpemUKKwkJICogd2hpY2ggZGVmYXVsdHMgdG8gcGh5c2ljYWwgc2l6ZSwgYnV0IGNhbiBiZSB2aXJ0dWFsIHNpemUKIAkJICovCiAJCW1heF9zZWN0b3JzID0gbWRkZXYtPnJlc3luY19tYXhfc2VjdG9yczsKIAllbHNlCkBAIC0zMzI3LDEzICszNTM0LDE1IEBACiAJICAgICAgIHN5c2N0bF9zcGVlZF9saW1pdF9tYXgpOwogCiAJaXNfbWRkZXZfaWRsZShtZGRldik7IC8qIHRoaXMgYWxzbyBpbml0aWFsaXplcyBJTyBldmVudCBjb3VudGVycyAqLwotCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkKKwkvKiB3ZSBkb24ndCB1c2UgdGhlIGNoZWNrcG9pbnQgaWYgdGhlcmUncyBhIGJpdG1hcCAqLworCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSAmJiAhbWRkZXYtPmJpdG1hcCkKIAkJaiA9IG1kZGV2LT5yZWNvdmVyeV9jcDsKIAllbHNlCiAJCWogPSAwOworCWlvX3NlY3RvcnMgPSAwOwogCWZvciAobSA9IDA7IG0gPCBTWU5DX01BUktTOyBtKyspIHsKIAkJbWFya1ttXSA9IGppZmZpZXM7Ci0JCW1hcmtfY250W21dID0gajsKKwkJbWFya19jbnRbbV0gPSBpb19zZWN0b3JzOwogCX0KIAlsYXN0X21hcmsgPSAwOwogCW1kZGV2LT5yZXN5bmNfbWFyayA9IG1hcmtbbGFzdF9tYXJrXTsKQEAgLTMzNTgsMjEgKzM1NjcsMjkgQEAKIAl9CiAKIAl3aGlsZSAoaiA8IG1heF9zZWN0b3JzKSB7Ci0JCWludCBzZWN0b3JzOworCQlzZWN0b3JfdCBzZWN0b3JzOwogCi0JCXNlY3RvcnMgPSBtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KG1kZGV2LCBqLCBjdXJyc3BlZWQgPCBzeXNjdGxfc3BlZWRfbGltaXRfbWluKTsKLQkJaWYgKHNlY3RvcnMgPCAwKSB7CisJCXNraXBwZWQgPSAwOworCQlzZWN0b3JzID0gbWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdChtZGRldiwgaiwgJnNraXBwZWQsCisJCQkJCSAgICBjdXJyc3BlZWQgPCBzeXNjdGxfc3BlZWRfbGltaXRfbWluKTsKKwkJaWYgKHNlY3RvcnMgPT0gMCkgewogCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9FUlIsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJYXRvbWljX2FkZChzZWN0b3JzLCAmbWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSk7CisKKwkJaWYgKCFza2lwcGVkKSB7IC8qIGFjdHVhbCBJTyByZXF1ZXN0ZWQgKi8KKwkJCWlvX3NlY3RvcnMgKz0gc2VjdG9yczsKKwkJCWF0b21pY19hZGQoc2VjdG9ycywgJm1kZGV2LT5yZWNvdmVyeV9hY3RpdmUpOworCQl9CisKIAkJaiArPSBzZWN0b3JzOwogCQlpZiAoaj4xKSBtZGRldi0+Y3Vycl9yZXN5bmMgPSBqOwogCi0JCWlmIChsYXN0X2NoZWNrICsgd2luZG93ID4gaiB8fCBqID09IG1heF9zZWN0b3JzKQorCisJCWlmIChsYXN0X2NoZWNrICsgd2luZG93ID4gaW9fc2VjdG9ycyB8fCBqID09IG1heF9zZWN0b3JzKQogCQkJY29udGludWU7CiAKLQkJbGFzdF9jaGVjayA9IGo7CisJCWxhc3RfY2hlY2sgPSBpb19zZWN0b3JzOwogCiAJCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KSB8fAogCQkgICAgdGVzdF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYtPnJlY292ZXJ5KSkKQEAgLTMzODYsNyArMzYwMyw3IEBACiAJCQltZGRldi0+cmVzeW5jX21hcmsgPSBtYXJrW25leHRdOwogCQkJbWRkZXYtPnJlc3luY19tYXJrX2NudCA9IG1hcmtfY250W25leHRdOwogCQkJbWFya1tuZXh0XSA9IGppZmZpZXM7Ci0JCQltYXJrX2NudFtuZXh0XSA9IGogLSBhdG9taWNfcmVhZCgmbWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSk7CisJCQltYXJrX2NudFtuZXh0XSA9IGlvX3NlY3RvcnMgLSBhdG9taWNfcmVhZCgmbWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSk7CiAJCQlsYXN0X21hcmsgPSBuZXh0OwogCQl9CiAKQEAgLTM0MTMsNyArMzYzMCw4IEBACiAJCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuKG1kZGV2LT5xdWV1ZSk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCi0JCWN1cnJzcGVlZCA9ICgodW5zaWduZWQgbG9uZykoai1tZGRldi0+cmVzeW5jX21hcmtfY250KSkvMi8oKGppZmZpZXMtbWRkZXYtPnJlc3luY19tYXJrKS9IWiArMSkgKzE7CisJCWN1cnJzcGVlZCA9ICgodW5zaWduZWQgbG9uZykoaW9fc2VjdG9ycy1tZGRldi0+cmVzeW5jX21hcmtfY250KSkvMgorCQkJLygoamlmZmllcy1tZGRldi0+cmVzeW5jX21hcmspL0haICsxKSArMTsKIAogCQlpZiAoY3VycnNwZWVkID4gc3lzY3RsX3NwZWVkX2xpbWl0X21pbikgewogCQkJaWYgKChjdXJyc3BlZWQgPiBzeXNjdGxfc3BlZWRfbGltaXRfbWF4KSB8fApAQCAtMzQzMyw3ICszNjUxLDcgQEAKIAl3YWl0X2V2ZW50KG1kZGV2LT5yZWNvdmVyeV93YWl0LCAhYXRvbWljX3JlYWQoJm1kZGV2LT5yZWNvdmVyeV9hY3RpdmUpKTsKIAogCS8qIHRlbGwgcGVyc29uYWxpdHkgdGhhdCB3ZSBhcmUgZmluaXNoZWQgKi8KLQltZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KG1kZGV2LCBtYXhfc2VjdG9ycywgMSk7CisJbWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdChtZGRldiwgbWF4X3NlY3RvcnMsICZza2lwcGVkLCAxKTsKIAogCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYtPnJlY292ZXJ5KSAmJgogCSAgICBtZGRldi0+Y3Vycl9yZXN5bmMgPiAyICYmCkBAIC0zNDQ3LDcgKzM2NjUsNiBAQAogCQkJbWRkZXYtPnJlY292ZXJ5X2NwID0gTWF4U2VjdG9yOwogCX0KIAotCW1kX2VudGVyX3NhZmVtb2RlKG1kZGV2KTsKICBza2lwOgogCW1kZGV2LT5jdXJyX3Jlc3luYyA9IDA7CiAJd2FrZV91cCgmcmVzeW5jX3dhaXQpOwpAQCAtMzQ4NCwyMCArMzcwMSw0OCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKnJ0bXA7CiAKIAotCWRwcmludGsoS0VSTl9JTkZPICJtZDogcmVjb3ZlcnkgdGhyZWFkIGdvdCB3b2tlbiB1cCAuLi5cbiIpOworCWlmIChtZGRldi0+Yml0bWFwKQorCQliaXRtYXBfZGFlbW9uX3dvcmsobWRkZXYtPmJpdG1hcCk7CiAKIAlpZiAobWRkZXYtPnJvKQogCQlyZXR1cm47CisKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJaWYgKG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIm1kOiAlcyBpbiBpbW1lZGlhdGUgc2FmZSBtb2RlXG4iLAorCQkJICAgICAgIG1kbmFtZShtZGRldikpOworCQkJbWRkZXYtPnNhZmVtb2RlID0gMjsKKwkJfQorCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOworCX0KKwogCWlmICggISAoCiAJCW1kZGV2LT5zYl9kaXJ0eSB8fAogCQl0ZXN0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpIHx8Ci0JCXRlc3RfYml0KE1EX1JFQ09WRVJZX0RPTkUsICZtZGRldi0+cmVjb3ZlcnkpCisJCXRlc3RfYml0KE1EX1JFQ09WRVJZX0RPTkUsICZtZGRldi0+cmVjb3ZlcnkpIHx8CisJCShtZGRldi0+c2FmZW1vZGUgPT0gMSkgfHwKKwkJKG1kZGV2LT5zYWZlbW9kZSA9PSAyICYmICEgYXRvbWljX3JlYWQoJm1kZGV2LT53cml0ZXNfcGVuZGluZykKKwkJICYmICFtZGRldi0+aW5fc3luYyAmJiBtZGRldi0+cmVjb3ZlcnlfY3AgPT0gTWF4U2VjdG9yKQogCQkpKQogCQlyZXR1cm47CisKIAlpZiAobWRkZXZfdHJ5bG9jayhtZGRldik9PTApIHsKIAkJaW50IHNwYXJlcyA9MDsKKworCQlzcGluX2xvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKKwkJaWYgKG1kZGV2LT5zYWZlbW9kZSAmJiAhYXRvbWljX3JlYWQoJm1kZGV2LT53cml0ZXNfcGVuZGluZykgJiYKKwkJICAgICFtZGRldi0+aW5fc3luYyAmJiBtZGRldi0+cmVjb3ZlcnlfY3AgPT0gTWF4U2VjdG9yKSB7CisJCQltZGRldi0+aW5fc3luYyA9IDE7CisJCQltZGRldi0+c2JfZGlydHkgPSAxOworCQl9CisJCWlmIChtZGRldi0+c2FmZW1vZGUgPT0gMSkKKwkJCW1kZGV2LT5zYWZlbW9kZSA9IDA7CisJCXNwaW5fdW5sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisKIAkJaWYgKG1kZGV2LT5zYl9kaXJ0eSkKIAkJCW1kX3VwZGF0ZV9zYihtZGRldik7CisKKwogCQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSkgJiYKIAkJICAgICF0ZXN0X2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KSkgewogCQkJLyogcmVzeW5jL3JlY292ZXJ5IHN0aWxsIGhhcHBlbmluZyAqLwpAQCAtMzUxNSw2ICszNzYwLDE0IEBACiAJCQkJbWRkZXYtPnBlcnMtPnNwYXJlX2FjdGl2ZShtZGRldik7CiAJCQl9CiAJCQltZF91cGRhdGVfc2IobWRkZXYpOworCisJCQkvKiBpZiBhcnJheSBpcyBuby1sb25nZXIgZGVncmFkZWQsIHRoZW4gYW55IHNhdmVkX3JhaWRfZGlzaworCQkJICogaW5mb3JtYXRpb24gbXVzdCBiZSBzY3JhcHBlZAorCQkJICovCisJCQlpZiAoIW1kZGV2LT5kZWdyYWRlZCkKKwkJCQlJVEVSQVRFX1JERVYobWRkZXYscmRldixydG1wKQorCQkJCQlyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgPSAtMTsKKwogCQkJbWRkZXYtPnJlY292ZXJ5ID0gMDsKIAkJCS8qIGZsYWcgcmVjb3ZlcnkgbmVlZGVkIGp1c3QgdG8gZG91YmxlIGNoZWNrICovCiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CkBAIC0zNTU3LDYgKzM4MTAsMTMgQEAKIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCQlpZiAoIXNwYXJlcykKIAkJCQlzZXRfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpOworCQkJaWYgKHNwYXJlcyAmJiBtZGRldi0+Yml0bWFwICYmICEgbWRkZXYtPmJpdG1hcC0+ZmlsZSkgeworCQkJCS8qIFdlIGFyZSBhZGRpbmcgYSBkZXZpY2Ugb3IgZGV2aWNlcyB0byBhbiBhcnJheQorCQkJCSAqIHdoaWNoIGhhcyB0aGUgYml0bWFwIHN0b3JlZCBvbiBhbGwgZGV2aWNlcy4KKwkJCQkgKiBTbyBtYWtlIHN1cmUgYWxsIGJpdG1hcCBwYWdlcyBnZXQgd3JpdHRlbgorCQkJCSAqLworCQkJCWJpdG1hcF93cml0ZV9hbGwobWRkZXYtPmJpdG1hcCk7CisJCQl9CiAJCQltZGRldi0+c3luY190aHJlYWQgPSBtZF9yZWdpc3Rlcl90aHJlYWQobWRfZG9fc3luYywKIAkJCQkJCQkJbWRkZXYsCiAJCQkJCQkJCSIlc19yZXN5bmMiKTsKQEAgLTM2MjQsNiArMzg4NCw4IEBACiAJCQkiIE1EX1NCX0RJU0tTPSVkXG4iLAogCQkJTURfTUFKT1JfVkVSU0lPTiwgTURfTUlOT1JfVkVSU0lPTiwKIAkJCU1EX1BBVENITEVWRUxfVkVSU0lPTiwgTUFYX01EX0RFVlMsIE1EX1NCX0RJU0tTKTsKKwlwcmludGsoS0VSTl9JTkZPICJtZDogYml0bWFwIHZlcnNpb24gJWQuJWRcbiIsIEJJVE1BUF9NQUpPUiwKKwkJCUJJVE1BUF9NSU5PUik7CiAKIAlpZiAocmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SLCAibWQiKSkKIAkJcmV0dXJuIC0xOwpAQCAtMzczOSw3ICs0MDAxLDYgQEAKIEVYUE9SVF9TWU1CT0wobWRfZG9uZV9zeW5jKTsKIEVYUE9SVF9TWU1CT0wobWRfd3JpdGVfc3RhcnQpOwogRVhQT1JUX1NZTUJPTChtZF93cml0ZV9lbmQpOwotRVhQT1JUX1NZTUJPTChtZF9oYW5kbGVfc2FmZW1vZGUpOwogRVhQT1JUX1NZTUJPTChtZF9yZWdpc3Rlcl90aHJlYWQpOwogRVhQT1JUX1NZTUJPTChtZF91bnJlZ2lzdGVyX3RocmVhZCk7CiBFWFBPUlRfU1lNQk9MKG1kX3dha2V1cF90aHJlYWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKaW5kZXggMmFlMmQ3MC4uMmQyY2E3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYworKysgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCkBAIC01MzMsOCArNTMzLDcgQEAKIG91dF9mcmVlX2NvbmY6CiAJaWYgKGNvbmYtPnBvb2wpCiAJCW1lbXBvb2xfZGVzdHJveShjb25mLT5wb29sKTsKLQlpZiAoY29uZi0+bXVsdGlwYXRocykKLQkJa2ZyZWUoY29uZi0+bXVsdGlwYXRocyk7CisJa2ZyZWUoY29uZi0+bXVsdGlwYXRocyk7CiAJa2ZyZWUoY29uZik7CiAJbWRkZXYtPnByaXZhdGUgPSBOVUxMOwogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMC5jIGIvZHJpdmVycy9tZC9yYWlkMC5jCmluZGV4IGU3ZDkzNGUuLmUxMWRkMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDAuYworKysgYi9kcml2ZXJzL21kL3JhaWQwLmMKQEAgLTM3MSwxMCArMzcxLDggQEAKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWVfY29uZjoKLQlpZiAoY29uZi0+c3RyaXBfem9uZSkKLQkJa2ZyZWUoY29uZi0+c3RyaXBfem9uZSk7Ci0JaWYgKGNvbmYtPmRldmxpc3QpCi0JCWtmcmVlIChjb25mLT5kZXZsaXN0KTsKKwlrZnJlZShjb25mLT5zdHJpcF96b25lKTsKKwlrZnJlZShjb25mLT5kZXZsaXN0KTsKIAlrZnJlZShjb25mKTsKIAltZGRldi0+cHJpdmF0ZSA9IE5VTEw7CiBvdXQ6CkBAIC0zODYsMTEgKzM4NCwxMSBAQAogCXJhaWQwX2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwogCiAJYmxrX3N5bmNfcXVldWUobWRkZXYtPnF1ZXVlKTsgLyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovCi0Ja2ZyZWUgKGNvbmYtPmhhc2hfdGFibGUpOworCWtmcmVlKGNvbmYtPmhhc2hfdGFibGUpOwogCWNvbmYtPmhhc2hfdGFibGUgPSBOVUxMOwotCWtmcmVlIChjb25mLT5zdHJpcF96b25lKTsKKwlrZnJlZShjb25mLT5zdHJpcF96b25lKTsKIAljb25mLT5zdHJpcF96b25lID0gTlVMTDsKLQlrZnJlZSAoY29uZik7CisJa2ZyZWUoY29uZik7CiAJbWRkZXYtPnByaXZhdGUgPSBOVUxMOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggMWRiNWRlNS4uZmYxZGJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtMTIsNiArMTIsMTUgQEAKICAqIEZpeGVzIHRvIHJlY29uc3RydWN0aW9uIGJ5IEpha29iINhzdGVyZ2FhcmQiIDxqYWtvYkBvc3RlbmZlbGQuZGs+CiAgKiBWYXJpb3VzIGZpeGVzIGJ5IE5laWwgQnJvd24gPG5laWxiQGNzZS51bnN3LmVkdS5hdT4KICAqCisgKiBDaGFuZ2VzIGJ5IFBldGVyIFQuIEJyZXVlciA8cHRiQGl0LnVjM20uZXM+IDMxLzEvMjAwMyB0byBzdXBwb3J0CisgKiBiaXRtYXBwZWQgaW50ZWxsaWdlbmNlIGluIHJlc3luYzoKKyAqCisgKiAgICAgIC0gYml0bWFwIG1hcmtlZCBkdXJpbmcgbm9ybWFsIGkvbworICogICAgICAtIGJpdG1hcCB1c2VkIHRvIHNraXAgbm9uZGlydHkgYmxvY2tzIGR1cmluZyBzeW5jCisgKgorICogQWRkaXRpb25zIHRvIGJpdG1hcCBjb2RlLCAoQykgMjAwMy0yMDA0IFBhdWwgQ2xlbWVudHMsIFN0ZWVsRXllIFRlY2hub2xvZ3k6CisgKiAtIHBlcnNpc3RlbnQgYml0bWFwIGNvZGUKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKQEAgLTIyLDcgKzMxLDE2IEBACiAgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKICNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQxLmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KKworI2RlZmluZSBERUJVRyAwCisjaWYgREVCVUcKKyNkZWZpbmUgUFJJTlRLKHguLi4pIHByaW50ayh4KQorI2Vsc2UKKyNkZWZpbmUgUFJJTlRLKHguLi4pCisjZW5kaWYKIAogLyoKICAqIE51bWJlciBvZiBndWFyYW50ZWVkIHIxYmlvcyBpbiBjYXNlIG9mIGV4dHJlbWUgVk0gbG9hZDoKQEAgLTI4Nyw5ICszMDUsMTEgQEAKIAkvKgogCSAqIHRoaXMgYnJhbmNoIGlzIG91ciAnb25lIG1pcnJvciBJTyBoYXMgZmluaXNoZWQnIGV2ZW50IGhhbmRsZXI6CiAJICovCi0JaWYgKCF1cHRvZGF0ZSkKKwlpZiAoIXVwdG9kYXRlKSB7CiAJCW1kX2Vycm9yKHIxX2Jpby0+bWRkZXYsIGNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2KTsKLQllbHNlCisJCS8qIGFuIEkvTyBmYWlsZWQsIHdlIGNhbid0IGNsZWFyIHRoZSBiaXRtYXAgKi8KKwkJc2V0X2JpdChSMUJJT19EZWdyYWRlZCwgJnIxX2Jpby0+c3RhdGUpOworCX0gZWxzZQogCQkvKgogCQkgKiBTZXQgUjFCSU9fVXB0b2RhdGUgaW4gb3VyIG1hc3RlciBiaW8sIHNvIHRoYXQKIAkJICogd2Ugd2lsbCByZXR1cm4gYSBnb29kIGVycm9yIGNvZGUgZm9yIHRvIHRoZSBoaWdoZXIKQEAgLTMwOSw2ICszMjksMTAgQEAKIAkgKiBhbHJlYWR5LgogCSAqLwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyMV9iaW8tPnJlbWFpbmluZykpIHsKKwkJLyogY2xlYXIgdGhlIGJpdG1hcCBpZiBhbGwgd3JpdGVzIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSAqLworCQliaXRtYXBfZW5kd3JpdGUocjFfYmlvLT5tZGRldi0+Yml0bWFwLCByMV9iaW8tPnNlY3RvciwKKwkJCQlyMV9iaW8tPnNlY3RvcnMsCisJCQkJIXRlc3RfYml0KFIxQklPX0RlZ3JhZGVkLCAmcjFfYmlvLT5zdGF0ZSkpOwogCQltZF93cml0ZV9lbmQocjFfYmlvLT5tZGRldik7CiAJCXJhaWRfZW5kX2Jpb19pbyhyMV9iaW8pOwogCX0KQEAgLTQ1OCw3ICs0ODIsMTAgQEAKIAogc3RhdGljIHZvaWQgcmFpZDFfdW5wbHVnKHJlcXVlc3RfcXVldWVfdCAqcSkKIHsKLQl1bnBsdWdfc2xhdmVzKHEtPnF1ZXVlZGF0YSk7CisJbWRkZXZfdCAqbWRkZXYgPSBxLT5xdWV1ZWRhdGE7CisKKwl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKKwltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogfQogCiBzdGF0aWMgaW50IHJhaWQxX2lzc3VlX2ZsdXNoKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCkBAIC01MDEsMTYgKzUyOCwxNiBAQAogewogCXNwaW5fbG9ja19pcnEoJmNvbmYtPnJlc3luY19sb2NrKTsKIAl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfaWRsZSwgIXdhaXRxdWV1ZV9hY3RpdmUoJmNvbmYtPndhaXRfcmVzdW1lKSwKLQkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywgdW5wbHVnX3NsYXZlcyhjb25mLT5tZGRldikpOworCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCByYWlkMV91bnBsdWcoY29uZi0+bWRkZXYtPnF1ZXVlKSk7CiAJCiAJaWYgKCFjb25mLT5iYXJyaWVyKyspIHsKIAkJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2lkbGUsICFjb25mLT5ucl9wZW5kaW5nLAotCQkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywgdW5wbHVnX3NsYXZlcyhjb25mLT5tZGRldikpOworCQkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywgcmFpZDFfdW5wbHVnKGNvbmYtPm1kZGV2LT5xdWV1ZSkpOwogCQlpZiAoY29uZi0+bnJfcGVuZGluZykKIAkJCUJVRygpOwogCX0KIAl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfcmVzdW1lLCBjb25mLT5iYXJyaWVyIDwgUkVTWU5DX0RFUFRILAotCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCB1bnBsdWdfc2xhdmVzKGNvbmYtPm1kZGV2KSk7CisJCQkgICAgY29uZi0+cmVzeW5jX2xvY2ssIHJhaWQxX3VucGx1Zyhjb25mLT5tZGRldi0+cXVldWUpKTsKIAljb25mLT5uZXh0X3Jlc3luYyA9IHNlY3Q7CiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiB9CkBAIC01MjIsMTQgKzU0OSwyMCBAQAogCW1pcnJvcl9pbmZvX3QgKm1pcnJvcjsKIAlyMWJpb190ICpyMV9iaW87CiAJc3RydWN0IGJpbyAqcmVhZF9iaW87Ci0JaW50IGksIGRpc2tzOworCWludCBpLCB0YXJnZXRzID0gMCwgZGlza3M7CiAJbWRrX3JkZXZfdCAqcmRldjsKKwlzdHJ1Y3QgYml0bWFwICpiaXRtYXAgPSBtZGRldi0+Yml0bWFwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGJpb19saXN0IGJsOworCiAKIAkvKgogCSAqIFJlZ2lzdGVyIHRoZSBuZXcgcmVxdWVzdCBhbmQgd2FpdCBpZiB0aGUgcmVjb25zdHJ1Y3Rpb24KIAkgKiB0aHJlYWQgaGFzIHB1dCB1cCBhIGJhciBmb3IgbmV3IHJlcXVlc3RzLgogCSAqIENvbnRpbnVlIGltbWVkaWF0ZWx5IGlmIG5vIHJlc3luYyBpcyBhY3RpdmUgY3VycmVudGx5LgogCSAqLworCW1kX3dyaXRlX3N0YXJ0KG1kZGV2LCBiaW8pOyAvKiB3YWl0IG9uIHN1cGVyYmxvY2sgdXBkYXRlIGVhcmx5ICovCisKIAlzcGluX2xvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X3Jlc3VtZSwgIWNvbmYtPmJhcnJpZXIsIGNvbmYtPnJlc3luY19sb2NrLCApOwogCWNvbmYtPm5yX3BlbmRpbmcrKzsKQEAgLTU1Miw3ICs1ODUsNyBAQAogCiAJcjFfYmlvLT5tYXN0ZXJfYmlvID0gYmlvOwogCXIxX2Jpby0+c2VjdG9ycyA9IGJpby0+Ymlfc2l6ZSA+PiA5OwotCisJcjFfYmlvLT5zdGF0ZSA9IDA7CiAJcjFfYmlvLT5tZGRldiA9IG1kZGV2OwogCXIxX2Jpby0+c2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7CiAKQEAgLTU5NSw2ICs2MjgsMTMgQEAKIAkgKiBiaW9zW3hdIHRvIGJpbwogCSAqLwogCWRpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKKyNpZiAwCisJeyBzdGF0aWMgaW50IGZpcnN0PTE7CisJaWYgKGZpcnN0KSBwcmludGsoIkZpcnN0IFdyaXRlIHNlY3RvciAlbGx1IGRpc2tzICVkXG4iLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKXIxX2Jpby0+c2VjdG9yLCBkaXNrcyk7CisJZmlyc3QgPSAwOworCX0KKyNlbmRpZgogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyAgaSA8IGRpc2tzOyBpKyspIHsKIAkJaWYgKChyZGV2PWNvbmYtPm1pcnJvcnNbaV0ucmRldikgIT0gTlVMTCAmJgpAQCAtNjA1LDEzICs2NDUsMjEgQEAKIAkJCQlyMV9iaW8tPmJpb3NbaV0gPSBOVUxMOwogCQkJfSBlbHNlCiAJCQkJcjFfYmlvLT5iaW9zW2ldID0gYmlvOworCQkJdGFyZ2V0cysrOwogCQl9IGVsc2UKIAkJCXIxX2Jpby0+Ymlvc1tpXSA9IE5VTEw7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JYXRvbWljX3NldCgmcjFfYmlvLT5yZW1haW5pbmcsIDEpOwotCW1kX3dyaXRlX3N0YXJ0KG1kZGV2KTsKKwlpZiAodGFyZ2V0cyA8IGNvbmYtPnJhaWRfZGlza3MpIHsKKwkJLyogYXJyYXkgaXMgZGVncmFkZWQsIHdlIHdpbGwgbm90IGNsZWFyIHRoZSBiaXRtYXAKKwkJICogb24gSS9PIGNvbXBsZXRpb24gKHNlZSByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdCkgKi8KKwkJc2V0X2JpdChSMUJJT19EZWdyYWRlZCwgJnIxX2Jpby0+c3RhdGUpOworCX0KKworCWF0b21pY19zZXQoJnIxX2Jpby0+cmVtYWluaW5nLCAwKTsKKworCWJpb19saXN0X2luaXQoJmJsKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykgewogCQlzdHJ1Y3QgYmlvICptYmlvOwogCQlpZiAoIXIxX2Jpby0+Ymlvc1tpXSkKQEAgLTYyNywxMyArNjc1LDIyIEBACiAJCW1iaW8tPmJpX3ByaXZhdGUgPSByMV9iaW87CiAKIAkJYXRvbWljX2luYygmcjFfYmlvLT5yZW1haW5pbmcpOwotCQlnZW5lcmljX21ha2VfcmVxdWVzdChtYmlvKTsKKworCQliaW9fbGlzdF9hZGQoJmJsLCBtYmlvKTsKIAl9CiAKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcjFfYmlvLT5yZW1haW5pbmcpKSB7Ci0JCW1kX3dyaXRlX2VuZChtZGRldik7Ci0JCXJhaWRfZW5kX2Jpb19pbyhyMV9iaW8pOwotCX0KKwliaXRtYXBfc3RhcnR3cml0ZShiaXRtYXAsIGJpby0+Ymlfc2VjdG9yLCByMV9iaW8tPnNlY3RvcnMpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOworCWJpb19saXN0X21lcmdlKCZjb25mLT5wZW5kaW5nX2Jpb19saXN0LCAmYmwpOworCWJpb19saXN0X2luaXQoJmJsKTsKKworCWJsa19wbHVnX2RldmljZShtZGRldi0+cXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CisKKyNpZiAwCisJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmJsKSkgIT0gTlVMTCkKKwkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKKyNlbmRpZgogCiAJcmV0dXJuIDA7CiB9CkBAIC03MTQsNyArNzcxLDcgQEAKIHsKIAlzcGluX2xvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X3Jlc3VtZSwgIWNvbmYtPmJhcnJpZXIsCi0JCQkgICAgY29uZi0+cmVzeW5jX2xvY2ssIAl1bnBsdWdfc2xhdmVzKGNvbmYtPm1kZGV2KSk7CisJCQkgICAgY29uZi0+cmVzeW5jX2xvY2ssIAlyYWlkMV91bnBsdWcoY29uZi0+bWRkZXYtPnF1ZXVlKSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiAKIAlpZiAoY29uZi0+YmFycmllcikgQlVHKCk7CkBAIC03NTQsOSArODExLDEyIEBACiB7CiAJY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGZvdW5kID0gMDsKLQlpbnQgbWlycm9yOworCWludCBtaXJyb3IgPSAwOwogCW1pcnJvcl9pbmZvX3QgKnA7CiAKKwlpZiAocmRldi0+c2F2ZWRfcmFpZF9kaXNrID49IDAgJiYKKwkgICAgY29uZi0+bWlycm9yc1tyZGV2LT5zYXZlZF9yYWlkX2Rpc2tdLnJkZXYgPT0gTlVMTCkKKwkJbWlycm9yID0gcmRldi0+c2F2ZWRfcmFpZF9kaXNrOwogCWZvciAobWlycm9yPTA7IG1pcnJvciA8IG1kZGV2LT5yYWlkX2Rpc2tzOyBtaXJyb3IrKykKIAkJaWYgKCAhKHA9Y29uZi0+bWlycm9ycyttaXJyb3IpLT5yZGV2KSB7CiAKQEAgLTc3Myw2ICs4MzMsOCBAQAogCQkJcC0+aGVhZF9wb3NpdGlvbiA9IDA7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSBtaXJyb3I7CiAJCQlmb3VuZCA9IDE7CisJCQlpZiAocmRldi0+c2F2ZWRfcmFpZF9kaXNrICE9IG1pcnJvcikKKwkJCQljb25mLT5mdWxsc3luYyA9IDE7CiAJCQlwLT5yZGV2ID0gcmRldjsKIAkJCWJyZWFrOwogCQl9CkBAIC04MjgsMTAgKzg5MCwxMSBAQAogCSAqIG9yIHJlLXJlYWQgaWYgdGhlIHJlYWQgZmFpbGVkLgogCSAqIFdlIGRvbid0IGRvIG11Y2ggaGVyZSwganVzdCBzY2hlZHVsZSBoYW5kbGluZyBieSByYWlkMWQKIAkgKi8KLQlpZiAoIXVwdG9kYXRlKQorCWlmICghdXB0b2RhdGUpIHsKIAkJbWRfZXJyb3IocjFfYmlvLT5tZGRldiwKIAkJCSBjb25mLT5taXJyb3JzW3IxX2Jpby0+cmVhZF9kaXNrXS5yZGV2KTsKLQllbHNlCisJCXNldF9iaXQoUjFCSU9fRGVncmFkZWQsICZyMV9iaW8tPnN0YXRlKTsKKwl9IGVsc2UKIAkJc2V0X2JpdChSMUJJT19VcHRvZGF0ZSwgJnIxX2Jpby0+c3RhdGUpOwogCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1tyMV9iaW8tPnJlYWRfZGlza10ucmRldiwgY29uZi0+bWRkZXYpOwogCXJlc2NoZWR1bGVfcmV0cnkocjFfYmlvKTsKQEAgLTg1NSw4ICs5MTgsMTAgQEAKIAkJCW1pcnJvciA9IGk7CiAJCQlicmVhazsKIAkJfQotCWlmICghdXB0b2RhdGUpCisJaWYgKCF1cHRvZGF0ZSkgewogCQltZF9lcnJvcihtZGRldiwgY29uZi0+bWlycm9yc1ttaXJyb3JdLnJkZXYpOworCQlzZXRfYml0KFIxQklPX0RlZ3JhZGVkLCAmcjFfYmlvLT5zdGF0ZSk7CisJfQogCXVwZGF0ZV9oZWFkX3BvcyhtaXJyb3IsIHIxX2Jpbyk7CiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcjFfYmlvLT5yZW1haW5pbmcpKSB7CkBAIC04NzYsNiArOTQxLDkgQEAKIAogCWJpbyA9IHIxX2Jpby0+Ymlvc1tyMV9iaW8tPnJlYWRfZGlza107CiAKKy8qCisJaWYgKHIxX2Jpby0+c2VjdG9yID09IDApIHByaW50aygiRmlyc3Qgc3luYyB3cml0ZSBzdGFydHNzXG4iKTsKKyovCiAJLyoKIAkgKiBzY2hlZHVsZSB3cml0ZXMKIAkgKi8KQEAgLTkwMywxMCArOTcxLDEyIEBACiAJCWF0b21pY19pbmMoJmNvbmYtPm1pcnJvcnNbaV0ucmRldi0+bnJfcGVuZGluZyk7CiAJCWF0b21pY19pbmMoJnIxX2Jpby0+cmVtYWluaW5nKTsKIAkJbWRfc3luY19hY2N0KGNvbmYtPm1pcnJvcnNbaV0ucmRldi0+YmRldiwgd2Jpby0+Ymlfc2l6ZSA+PiA5KTsKKwogCQlnZW5lcmljX21ha2VfcmVxdWVzdCh3YmlvKTsKIAl9CiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcjFfYmlvLT5yZW1haW5pbmcpKSB7CisJCS8qIGlmIHdlJ3JlIGhlcmUsIGFsbCB3cml0ZShzKSBoYXZlIGNvbXBsZXRlZCwgc28gY2xlYW4gdXAgKi8KIAkJbWRfZG9uZV9zeW5jKG1kZGV2LCByMV9iaW8tPnNlY3RvcnMsIDEpOwogCQlwdXRfYnVmKHIxX2Jpbyk7CiAJfQpAQCAtOTMxLDExICsxMDAxLDMwIEBACiAJbWRrX3JkZXZfdCAqcmRldjsKIAogCW1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2KTsKLQltZF9oYW5kbGVfc2FmZW1vZGUobWRkZXYpOwogCQogCWZvciAoOzspIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoY29uZi0+cGVuZGluZ19iaW9fbGlzdC5oZWFkKSB7CisJCQliaW8gPSBiaW9fbGlzdF9nZXQoJmNvbmYtPnBlbmRpbmdfYmlvX2xpc3QpOworCQkJYmxrX3JlbW92ZV9wbHVnKG1kZGV2LT5xdWV1ZSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOworCQkJLyogZmx1c2ggYW55IHBlbmRpbmcgYml0bWFwIHdyaXRlcyB0byBkaXNrIGJlZm9yZSBwcm9jZWVkaW5nIHcvIEkvTyAqLworCQkJaWYgKGJpdG1hcF91bnBsdWcobWRkZXYtPmJpdG1hcCkgIT0gMCkKKwkJCQlwcmludGsoIiVzOiBiaXRtYXAgZmlsZSB3cml0ZSBmYWlsZWQhXG4iLCBtZG5hbWUobWRkZXYpKTsKKworCQkJd2hpbGUgKGJpbykgeyAvKiBzdWJtaXQgcGVuZGluZyB3cml0ZXMgKi8KKwkJCQlzdHJ1Y3QgYmlvICpuZXh0ID0gYmlvLT5iaV9uZXh0OworCQkJCWJpby0+YmlfbmV4dCA9IE5VTEw7CisJCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKKwkJCQliaW8gPSBuZXh0OworCQkJfQorCQkJdW5wbHVnID0gMTsKKworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAobGlzdF9lbXB0eShoZWFkKSkKIAkJCWJyZWFrOwogCQlyMV9iaW8gPSBsaXN0X2VudHJ5KGhlYWQtPnByZXYsIHIxYmlvX3QsIHJldHJ5X2xpc3QpOwpAQCAtMTAwOSw3ICsxMDk4LDcgQEAKICAqIHRoYXQgY2FuIGJlIGluc3RhbGxlZCB0byBleGNsdWRlIG5vcm1hbCBJTyByZXF1ZXN0cy4KICAqLwogCi1zdGF0aWMgaW50IHN5bmNfcmVxdWVzdChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgZ29fZmFzdGVyKQorc3RhdGljIHNlY3Rvcl90IHN5bmNfcmVxdWVzdChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgKnNraXBwZWQsIGludCBnb19mYXN0ZXIpCiB7CiAJY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CiAJbWlycm9yX2luZm9fdCAqbWlycm9yOwpAQCAtMTAxOSwxNyArMTEwOCw0MyBAQAogCWludCBkaXNrOwogCWludCBpOwogCWludCB3cml0ZV90YXJnZXRzID0gMDsKKwlpbnQgc3luY19ibG9ja3M7CiAKIAlpZiAoIWNvbmYtPnIxYnVmX3Bvb2wpCisJeworLyoKKwkJcHJpbnRrKCJzeW5jIHN0YXJ0IC0gYml0bWFwICVwXG4iLCBtZGRldi0+Yml0bWFwKTsKKyovCiAJCWlmIChpbml0X3Jlc3luYyhjb25mKSkKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIDA7CisJfQogCiAJbWF4X3NlY3RvciA9IG1kZGV2LT5zaXplIDw8IDE7CiAJaWYgKHNlY3Rvcl9uciA+PSBtYXhfc2VjdG9yKSB7CisJCS8qIElmIHdlIGFib3J0ZWQsIHdlIG5lZWQgdG8gYWJvcnQgdGhlCisJCSAqIHN5bmMgb24gdGhlICdjdXJyZW50JyBiaXRtYXAgY2h1bmsgKHRoZXJlIHdpbGwKKwkJICogb25seSBiZSBvbmUgaW4gcmFpZDEgcmVzeW5jLgorCQkgKiBXZSBjYW4gZmluZCB0aGUgY3VycmVudCBhZGRlc3MgaW4gbWRkZXYtPmN1cnJfcmVzeW5jCisJCSAqLworCQlpZiAoIWNvbmYtPmZ1bGxzeW5jKSB7CisJCQlpZiAobWRkZXYtPmN1cnJfcmVzeW5jIDwgbWF4X3NlY3RvcikKKwkJCQliaXRtYXBfZW5kX3N5bmMobWRkZXYtPmJpdG1hcCwKKwkJCQkJCW1kZGV2LT5jdXJyX3Jlc3luYywKKwkJCQkJCSZzeW5jX2Jsb2NrcywgMSk7CisJCQliaXRtYXBfY2xvc2Vfc3luYyhtZGRldi0+Yml0bWFwKTsKKwkJfQorCQlpZiAobWRkZXYtPmN1cnJfcmVzeW5jID49IG1heF9zZWN0b3IpCisJCQljb25mLT5mdWxsc3luYyA9IDA7CiAJCWNsb3NlX3N5bmMoY29uZik7CiAJCXJldHVybiAwOwogCX0KIAorCWlmICghY29uZi0+ZnVsbHN5bmMgJiYKKwkgICAgIWJpdG1hcF9zdGFydF9zeW5jKG1kZGV2LT5iaXRtYXAsIHNlY3Rvcl9uciwgJnN5bmNfYmxvY2tzKSkgeworCQkvKiBXZSBjYW4gc2tpcCB0aGlzIGJsb2NrLCBhbmQgcHJvYmFibHkgc2V2ZXJhbCBtb3JlICovCisJCSpza2lwcGVkID0gMTsKKwkJcmV0dXJuIHN5bmNfYmxvY2tzOworCX0KIAkvKgogCSAqIElmIHRoZXJlIGlzIG5vbi1yZXN5bmMgYWN0aXZpdHkgd2FpdGluZyBmb3IgdXMgdGhlbgogCSAqIHB1dCBpbiBhIGRlbGF5IHRvIHRocm90dGxlIHJlc3luYy4KQEAgLTEwNjgsNiArMTE4Myw3IEBACiAKIAlyMV9iaW8tPm1kZGV2ID0gbWRkZXY7CiAJcjFfYmlvLT5zZWN0b3IgPSBzZWN0b3JfbnI7CisJcjFfYmlvLT5zdGF0ZSA9IDA7CiAJc2V0X2JpdChSMUJJT19Jc1N5bmMsICZyMV9iaW8tPnN0YXRlKTsKIAlyMV9iaW8tPnJlYWRfZGlzayA9IGRpc2s7CiAKQEAgLTExMDIsMTggKzEyMTgsMjQgQEAKIAkJYmlvLT5iaV9iZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2LT5iZGV2OwogCQliaW8tPmJpX3ByaXZhdGUgPSByMV9iaW87CiAJfQorCisJaWYgKHdyaXRlX3RhcmdldHMgKyAxIDwgY29uZi0+cmFpZF9kaXNrcykKKwkJLyogYXJyYXkgZGVncmFkZWQsIGNhbid0IGNsZWFyIGJpdG1hcCAqLworCQlzZXRfYml0KFIxQklPX0RlZ3JhZGVkLCAmcjFfYmlvLT5zdGF0ZSk7CisKIAlpZiAod3JpdGVfdGFyZ2V0cyA9PSAwKSB7CiAJCS8qIFRoZXJlIGlzIG5vd2hlcmUgdG8gd3JpdGUsIHNvIGFsbCBub24tc3luYwogCQkgKiBkcml2ZXMgbXVzdCBiZSBmYWlsZWQgLSBzbyB3ZSBhcmUgZmluaXNoZWQKIAkJICovCi0JCWludCBydiA9IG1heF9zZWN0b3IgLSBzZWN0b3JfbnI7Ci0JCW1kX2RvbmVfc3luYyhtZGRldiwgcnYsIDEpOworCQlzZWN0b3JfdCBydiA9IG1heF9zZWN0b3IgLSBzZWN0b3JfbnI7CisJCSpza2lwcGVkID0gMTsKIAkJcHV0X2J1ZihyMV9iaW8pOwogCQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbZGlza10ucmRldiwgbWRkZXYpOwogCQlyZXR1cm4gcnY7CiAJfQogCiAJbnJfc2VjdG9ycyA9IDA7CisJc3luY19ibG9ja3MgPSAwOwogCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCWludCBsZW4gPSBQQUdFX1NJWkU7CkBAIC0xMTIxLDYgKzEyNDMsMTcgQEAKIAkJCWxlbiA9IChtYXhfc2VjdG9yIC0gc2VjdG9yX25yKSA8PCA5OwogCQlpZiAobGVuID09IDApCiAJCQlicmVhazsKKwkJaWYgKCFjb25mLT5mdWxsc3luYykgeworCQkJaWYgKHN5bmNfYmxvY2tzID09IDApIHsKKwkJCQlpZiAoIWJpdG1hcF9zdGFydF9zeW5jKG1kZGV2LT5iaXRtYXAsCisJCQkJCQkgICAgICAgc2VjdG9yX25yLCAmc3luY19ibG9ja3MpKQorCQkJCQlicmVhazsKKwkJCQlpZiAoc3luY19ibG9ja3MgPCAoUEFHRV9TSVpFPj45KSkKKwkJCQkJQlVHKCk7CisJCQkJaWYgKGxlbiA+IChzeW5jX2Jsb2Nrczw8OSkpIGxlbiA9IHN5bmNfYmxvY2tzPDw5OworCQkJfQorCQl9CisKIAkJZm9yIChpPTAgOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7CiAJCQliaW8gPSByMV9iaW8tPmJpb3NbaV07CiAJCQlpZiAoYmlvLT5iaV9lbmRfaW8pIHsKQEAgLTExNDMsNiArMTI3Niw3IEBACiAJCX0KIAkJbnJfc2VjdG9ycyArPSBsZW4+Pjk7CiAJCXNlY3Rvcl9uciArPSBsZW4+Pjk7CisJCXN5bmNfYmxvY2tzIC09IChsZW4+PjkpOwogCX0gd2hpbGUgKHIxX2Jpby0+Ymlvc1tkaXNrXS0+YmlfdmNudCA8IFJFU1lOQ19QQUdFUyk7CiAgYmlvX2Z1bGw6CiAJYmlvID0gcjFfYmlvLT5iaW9zW2Rpc2tdOwpAQCAtMTIzMSw2ICsxMzY1LDkgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb25mLT53YWl0X2lkbGUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfcmVzdW1lKTsKIAorCWJpb19saXN0X2luaXQoJmNvbmYtPnBlbmRpbmdfYmlvX2xpc3QpOworCWJpb19saXN0X2luaXQoJmNvbmYtPmZsdXNoaW5nX2Jpb19saXN0KTsKKwogCWlmICghY29uZi0+d29ya2luZ19kaXNrcykgewogCQlwcmludGsoS0VSTl9FUlIgInJhaWQxOiBubyBvcGVyYXRpb25hbCBtaXJyb3JzIGZvciAlc1xuIiwKIAkJCW1kbmFtZShtZGRldikpOwpAQCAtMTI1OSwxNiArMTM5NiwxNSBAQAogCWNvbmYtPmxhc3RfdXNlZCA9IGo7CiAKIAotCi0JewotCQltZGRldi0+dGhyZWFkID0gbWRfcmVnaXN0ZXJfdGhyZWFkKHJhaWQxZCwgbWRkZXYsICIlc19yYWlkMSIpOwotCQlpZiAoIW1kZGV2LT50aHJlYWQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAKLQkJCQkicmFpZDE6IGNvdWxkbid0IGFsbG9jYXRlIHRocmVhZCBmb3IgJXNcbiIsIAotCQkJCW1kbmFtZShtZGRldikpOwotCQkJZ290byBvdXRfZnJlZV9jb25mOwotCQl9CisJbWRkZXYtPnRocmVhZCA9IG1kX3JlZ2lzdGVyX3RocmVhZChyYWlkMWQsIG1kZGV2LCAiJXNfcmFpZDEiKTsKKwlpZiAoIW1kZGV2LT50aHJlYWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAicmFpZDE6IGNvdWxkbid0IGFsbG9jYXRlIHRocmVhZCBmb3IgJXNcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKKwkJZ290byBvdXRfZnJlZV9jb25mOwogCX0KKwlpZiAobWRkZXYtPmJpdG1hcCkgbWRkZXYtPnRocmVhZC0+dGltZW91dCA9IG1kZGV2LT5iaXRtYXAtPmRhZW1vbl9zbGVlcCAqIEhaOworCiAJcHJpbnRrKEtFUk5fSU5GTyAKIAkJInJhaWQxOiByYWlkIHNldCAlcyBhY3RpdmUgd2l0aCAlZCBvdXQgb2YgJWQgbWlycm9yc1xuIiwKIAkJbWRuYW1lKG1kZGV2KSwgbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVncmFkZWQsIApAQCAtMTI5MSwxMCArMTQyNyw4IEBACiAJaWYgKGNvbmYpIHsKIAkJaWYgKGNvbmYtPnIxYmlvX3Bvb2wpCiAJCQltZW1wb29sX2Rlc3Ryb3koY29uZi0+cjFiaW9fcG9vbCk7Ci0JCWlmIChjb25mLT5taXJyb3JzKQotCQkJa2ZyZWUoY29uZi0+bWlycm9ycyk7Ci0JCWlmIChjb25mLT5wb29saW5mbykKLQkJCWtmcmVlKGNvbmYtPnBvb2xpbmZvKTsKKwkJa2ZyZWUoY29uZi0+bWlycm9ycyk7CisJCWtmcmVlKGNvbmYtPnBvb2xpbmZvKTsKIAkJa2ZyZWUoY29uZik7CiAJCW1kZGV2LT5wcml2YXRlID0gTlVMTDsKIAl9CkBAIC0xMzExLDEwICsxNDQ1LDggQEAKIAlibGtfc3luY19xdWV1ZShtZGRldi0+cXVldWUpOyAvKiB0aGUgdW5wbHVnIGZuIHJlZmVyZW5jZXMgJ2NvbmYnKi8KIAlpZiAoY29uZi0+cjFiaW9fcG9vbCkKIAkJbWVtcG9vbF9kZXN0cm95KGNvbmYtPnIxYmlvX3Bvb2wpOwotCWlmIChjb25mLT5taXJyb3JzKQotCQlrZnJlZShjb25mLT5taXJyb3JzKTsKLQlpZiAoY29uZi0+cG9vbGluZm8pCi0JCWtmcmVlKGNvbmYtPnBvb2xpbmZvKTsKKwlrZnJlZShjb25mLT5taXJyb3JzKTsKKwlrZnJlZShjb25mLT5wb29saW5mbyk7CiAJa2ZyZWUoY29uZik7CiAJbWRkZXYtPnByaXZhdGUgPSBOVUxMOwogCXJldHVybiAwOwpAQCAtMTM0OSwxNyArMTQ4MSwyNiBAQAogCSAqIFdlIGFsbG9jYXRlIGEgbmV3IHIxYmlvX3Bvb2wgaWYgd2UgY2FuLgogCSAqIFRoZW4gcmFpc2UgYSBkZXZpY2UgYmFycmllciBhbmQgd2FpdCB1bnRpbCBhbGwgSU8gc3RvcHMuCiAJICogVGhlbiByZXNpemUgY29uZi0+bWlycm9ycyBhbmQgc3dhcCBpbiB0aGUgbmV3IHIxYmlvIHBvb2wuCisJICoKKwkgKiBBdCB0aGUgc2FtZSB0aW1lLCB3ZSAicGFjayIgdGhlIGRldmljZXMgc28gdGhhdCBhbGwgdGhlIG1pc3NpbmcKKwkgKiBkZXZpY2VzIGhhdmUgdGhlIGhpZ2hlciByYWlkX2Rpc2sgbnVtYmVycy4KIAkgKi8KIAltZW1wb29sX3QgKm5ld3Bvb2wsICpvbGRwb29sOwogCXN0cnVjdCBwb29sX2luZm8gKm5ld3Bvb2xpbmZvOwogCW1pcnJvcl9pbmZvX3QgKm5ld21pcnJvcnM7CiAJY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CisJaW50IGNudDsKIAotCWludCBkOworCWludCBkLCBkMjsKIAotCWZvciAoZD0gcmFpZF9kaXNrczsgZCA8IGNvbmYtPnJhaWRfZGlza3M7IGQrKykKLQkJaWYgKGNvbmYtPm1pcnJvcnNbZF0ucmRldikKKwlpZiAocmFpZF9kaXNrcyA8IGNvbmYtPnJhaWRfZGlza3MpIHsKKwkJY250PTA7CisJCWZvciAoZD0gMDsgZCA8IGNvbmYtPnJhaWRfZGlza3M7IGQrKykKKwkJCWlmIChjb25mLT5taXJyb3JzW2RdLnJkZXYpCisJCQkJY250Kys7CisJCWlmIChjbnQgPiByYWlkX2Rpc2tzKQogCQkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKIAluZXdwb29saW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpuZXdwb29saW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghbmV3cG9vbGluZm8pCkBAIC0xMzg0LDE0ICsxNTI1LDE4IEBACiAJc3Bpbl9sb2NrX2lycSgmY29uZi0+cmVzeW5jX2xvY2spOwogCWNvbmYtPmJhcnJpZXIrKzsKIAl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfaWRsZSwgIWNvbmYtPm5yX3BlbmRpbmcsCi0JCQkgICAgY29uZi0+cmVzeW5jX2xvY2ssIHVucGx1Z19zbGF2ZXMobWRkZXYpKTsKKwkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywgcmFpZDFfdW5wbHVnKG1kZGV2LT5xdWV1ZSkpOwogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+cmVzeW5jX2xvY2spOwogCiAJLyogb2ssIGV2ZXJ5dGhpbmcgaXMgc3RvcHBlZCAqLwogCW9sZHBvb2wgPSBjb25mLT5yMWJpb19wb29sOwogCWNvbmYtPnIxYmlvX3Bvb2wgPSBuZXdwb29sOwotCWZvciAoZD0wOyBkIDwgcmFpZF9kaXNrcyAmJiBkIDwgY29uZi0+cmFpZF9kaXNrczsgZCsrKQotCQluZXdtaXJyb3JzW2RdID0gY29uZi0+bWlycm9yc1tkXTsKKworCWZvciAoZD1kMj0wOyBkIDwgY29uZi0+cmFpZF9kaXNrczsgZCsrKQorCQlpZiAoY29uZi0+bWlycm9yc1tkXS5yZGV2KSB7CisJCQljb25mLT5taXJyb3JzW2RdLnJkZXYtPnJhaWRfZGlzayA9IGQyOworCQkJbmV3bWlycm9yc1tkMisrXS5yZGV2ID0gY29uZi0+bWlycm9yc1tkXS5yZGV2OworCQl9CiAJa2ZyZWUoY29uZi0+bWlycm9ycyk7CiAJY29uZi0+bWlycm9ycyA9IG5ld21pcnJvcnM7CiAJa2ZyZWUoY29uZi0+cG9vbGluZm8pOwpAQCAtMTQwMCw2ICsxNTQ1LDcgQEAKIAltZGRldi0+ZGVncmFkZWQgKz0gKHJhaWRfZGlza3MgLSBjb25mLT5yYWlkX2Rpc2tzKTsKIAljb25mLT5yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgPSByYWlkX2Rpc2tzOwogCisJY29uZi0+bGFzdF91c2VkID0gMDsgLyoganVzdCBtYWtlIHN1cmUgaXQgaXMgaW4tcmFuZ2UgKi8KIAlzcGluX2xvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiAJY29uZi0+YmFycmllci0tOwogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+cmVzeW5jX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKaW5kZXggM2MzN2JlNi4uNjJlYmIxYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtNzAwLDYgKzcwMCw4IEBACiAJCXJldHVybiAwOwogCX0KIAorCW1kX3dyaXRlX3N0YXJ0KG1kZGV2LCBiaW8pOworCiAJLyoKIAkgKiBSZWdpc3RlciB0aGUgbmV3IHJlcXVlc3QgYW5kIHdhaXQgaWYgdGhlIHJlY29uc3RydWN0aW9uCiAJICogdGhyZWFkIGhhcyBwdXQgdXAgYSBiYXIgZm9yIG5ldyByZXF1ZXN0cy4KQEAgLTc3NCw3ICs3NzYsNyBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJYXRvbWljX3NldCgmcjEwX2Jpby0+cmVtYWluaW5nLCAxKTsKLQltZF93cml0ZV9zdGFydChtZGRldik7CisKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+Y29waWVzOyBpKyspIHsKIAkJc3RydWN0IGJpbyAqbWJpbzsKIAkJaW50IGQgPSByMTBfYmlvLT5kZXZzW2ldLmRldm51bTsKQEAgLTEyMTYsNyArMTIxOCw2IEBACiAJbWRrX3JkZXZfdCAqcmRldjsKIAogCW1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2KTsKLQltZF9oYW5kbGVfc2FmZW1vZGUobWRkZXYpOwogCiAJZm9yICg7OykgewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CkBAIC0xMzE5LDcgKzEzMjAsNyBAQAogICoKICAqLwogCi1zdGF0aWMgaW50IHN5bmNfcmVxdWVzdChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgZ29fZmFzdGVyKQorc3RhdGljIHNlY3Rvcl90IHN5bmNfcmVxdWVzdChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgKnNraXBwZWQsIGludCBnb19mYXN0ZXIpCiB7CiAJY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CiAJcjEwYmlvX3QgKnIxMF9iaW87CkBAIC0xMzMzLDcgKzEzMzQsNyBAQAogCiAJaWYgKCFjb25mLT5yMTBidWZfcG9vbCkKIAkJaWYgKGluaXRfcmVzeW5jKGNvbmYpKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR1cm4gMDsKIAogIHNraXBwZWQ6CiAJbWF4X3NlY3RvciA9IG1kZGV2LT5zaXplIDw8IDE7CkBAIC0xMzQxLDE1ICsxMzQyLDE1IEBACiAJCW1heF9zZWN0b3IgPSBtZGRldi0+cmVzeW5jX21heF9zZWN0b3JzOwogCWlmIChzZWN0b3JfbnIgPj0gbWF4X3NlY3RvcikgewogCQljbG9zZV9zeW5jKGNvbmYpOworCQkqc2tpcHBlZCA9IDE7CiAJCXJldHVybiBzZWN0b3JzX3NraXBwZWQ7CiAJfQogCWlmIChjaHVua3Nfc2tpcHBlZCA+PSBjb25mLT5yYWlkX2Rpc2tzKSB7CiAJCS8qIGlmIHRoZXJlIGhhcyBiZWVuIG5vdGhpbmcgdG8gZG8gb24gYW55IGRyaXZlLAogCQkgKiB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gYXQgYWxsLi4KIAkJICovCi0JCXNlY3Rvcl90IHNlYyA9IG1heF9zZWN0b3IgLSBzZWN0b3JfbnI7Ci0JCW1kX2RvbmVfc3luYyhtZGRldiwgc2VjLCAxKTsKLQkJcmV0dXJuIHNlYyArIHNlY3RvcnNfc2tpcHBlZDsKKwkJKnNraXBwZWQgPSAxOworCQlyZXR1cm4gKG1heF9zZWN0b3IgLSBzZWN0b3JfbnIpICsgc2VjdG9yc19za2lwcGVkOwogCX0KIAogCS8qIG1ha2Ugc3VyZSB3aG9sZSByZXF1ZXN0IHdpbGwgZml0IGluIGEgY2h1bmsgLSBpZiBjaHVua3MKQEAgLTE1NjMsMTcgKzE1NjQsMjIgQEAKIAkJfQogCX0KIAorCWlmIChzZWN0b3JzX3NraXBwZWQpCisJCS8qIHByZXRlbmQgdGhleSB3ZXJlbid0IHNraXBwZWQsIGl0IG1ha2VzCisJCSAqIG5vIGltcG9ydGFudCBkaWZmZXJlbmNlIGluIHRoaXMgY2FzZQorCQkgKi8KKwkJbWRfZG9uZV9zeW5jKG1kZGV2LCBzZWN0b3JzX3NraXBwZWQsIDEpOworCiAJcmV0dXJuIHNlY3RvcnNfc2tpcHBlZCArIG5yX3NlY3RvcnM7CiAgZ2l2ZXVwOgogCS8qIFRoZXJlIGlzIG5vd2hlcmUgdG8gd3JpdGUsIHNvIGFsbCBub24tc3luYwogCSAqIGRyaXZlcyBtdXN0IGJlIGZhaWxlZCwgc28gdHJ5IHRoZSBuZXh0IGNodW5rLi4uCiAJICovCiAJewotCWludCBzZWMgPSBtYXhfc2VjdG9yIC0gc2VjdG9yX25yOworCXNlY3Rvcl90IHNlYyA9IG1heF9zZWN0b3IgLSBzZWN0b3JfbnI7CiAJc2VjdG9yc19za2lwcGVkICs9IHNlYzsKIAljaHVua3Nfc2tpcHBlZCArKzsKIAlzZWN0b3JfbnIgPSBtYXhfc2VjdG9yOwotCW1kX2RvbmVfc3luYyhtZGRldiwgc2VjLCAxKTsKIAlnb3RvIHNraXBwZWQ7CiAJfQogfQpAQCAtMTczMSw4ICsxNzM3LDcgQEAKIG91dF9mcmVlX2NvbmY6CiAJaWYgKGNvbmYtPnIxMGJpb19wb29sKQogCQltZW1wb29sX2Rlc3Ryb3koY29uZi0+cjEwYmlvX3Bvb2wpOwotCWlmIChjb25mLT5taXJyb3JzKQotCQlrZnJlZShjb25mLT5taXJyb3JzKTsKKwlrZnJlZShjb25mLT5taXJyb3JzKTsKIAlrZnJlZShjb25mKTsKIAltZGRldi0+cHJpdmF0ZSA9IE5VTEw7CiBvdXQ6CkBAIC0xNzQ4LDggKzE3NTMsNyBAQAogCWJsa19zeW5jX3F1ZXVlKG1kZGV2LT5xdWV1ZSk7IC8qIHRoZSB1bnBsdWcgZm4gcmVmZXJlbmNlcyAnY29uZicqLwogCWlmIChjb25mLT5yMTBiaW9fcG9vbCkKIAkJbWVtcG9vbF9kZXN0cm95KGNvbmYtPnIxMGJpb19wb29sKTsKLQlpZiAoY29uZi0+bWlycm9ycykKLQkJa2ZyZWUoY29uZi0+bWlycm9ycyk7CisJa2ZyZWUoY29uZi0+bWlycm9ycyk7CiAJa2ZyZWUoY29uZik7CiAJbWRkZXYtPnByaXZhdGUgPSBOVUxMOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IDNjYjExYWMuLjkzYTk3MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTE0MTEsNiArMTQxMSw4IEBACiAJc2VjdG9yX3QgbG9naWNhbF9zZWN0b3IsIGxhc3Rfc2VjdG9yOwogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CiAKKwltZF93cml0ZV9zdGFydChtZGRldiwgYmkpOworCiAJaWYgKGJpb19kYXRhX2RpcihiaSk9PVdSSVRFKSB7CiAJCWRpc2tfc3RhdF9pbmMobWRkZXYtPmdlbmRpc2ssIHdyaXRlcyk7CiAJCWRpc2tfc3RhdF9hZGQobWRkZXYtPmdlbmRpc2ssIHdyaXRlX3NlY3RvcnMsIGJpb19zZWN0b3JzKGJpKSk7CkBAIC0xNDIzLDggKzE0MjUsNyBAQAogCWxhc3Rfc2VjdG9yID0gYmktPmJpX3NlY3RvciArIChiaS0+Ymlfc2l6ZT4+OSk7CiAJYmktPmJpX25leHQgPSBOVUxMOwogCWJpLT5iaV9waHlzX3NlZ21lbnRzID0gMTsJLyogb3Zlci1sb2FkZWQgdG8gY291bnQgYWN0aXZlIHN0cmlwZXMgKi8KLQlpZiAoIGJpb19kYXRhX2RpcihiaSkgPT0gV1JJVEUgKQotCQltZF93cml0ZV9zdGFydChtZGRldik7CisKIAlmb3IgKDtsb2dpY2FsX3NlY3RvciA8IGxhc3Rfc2VjdG9yOyBsb2dpY2FsX3NlY3RvciArPSBTVFJJUEVfU0VDVE9SUykgewogCQlERUZJTkVfV0FJVCh3KTsKIAkJCkBAIC0xNDc1LDcgKzE0NzYsNyBAQAogfQogCiAvKiBGSVhNRSBnb19mYXN0ZXIgaXNuJ3QgdXNlZCAqLwotc3RhdGljIGludCBzeW5jX3JlcXVlc3QgKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsIGludCBnb19mYXN0ZXIpCitzdGF0aWMgc2VjdG9yX3Qgc3luY19yZXF1ZXN0KG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsIGludCAqc2tpcHBlZCwgaW50IGdvX2Zhc3RlcikKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSAocmFpZDVfY29uZl90ICopIG1kZGV2LT5wcml2YXRlOwogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CkBAIC0xNDk4LDggKzE0OTksOCBAQAogCSAqIG5vdGhpbmcgd2UgY2FuIGRvLgogCSAqLwogCWlmIChtZGRldi0+ZGVncmFkZWQgPj0gMSAmJiB0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkgewotCQlpbnQgcnYgPSAobWRkZXYtPnNpemUgPDwgMSkgLSBzZWN0b3JfbnI7Ci0JCW1kX2RvbmVfc3luYyhtZGRldiwgcnYsIDEpOworCQlzZWN0b3JfdCBydiA9IChtZGRldi0+c2l6ZSA8PCAxKSAtIHNlY3Rvcl9ucjsKKwkJKnNraXBwZWQgPSAxOwogCQlyZXR1cm4gcnY7CiAJfQogCkBAIC0xNTQ2LDcgKzE1NDcsNiBAQAogCVBSSU5USygiKysrIHJhaWQ1ZCBhY3RpdmVcbiIpOwogCiAJbWRfY2hlY2tfcmVjb3ZlcnkobWRkZXYpOwotCW1kX2hhbmRsZV9zYWZlbW9kZShtZGRldik7CiAKIAloYW5kbGVkID0gMDsKIAlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2bWFpbi5jIGIvZHJpdmVycy9tZC9yYWlkNm1haW4uYwppbmRleCA5MDhlZGQ3Li5mNjJlYTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2bWFpbi5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZtYWluLmMKQEAgLTE1NzAsNiArMTU3MCw4IEBACiAJc2VjdG9yX3QgbG9naWNhbF9zZWN0b3IsIGxhc3Rfc2VjdG9yOwogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CiAKKwltZF93cml0ZV9zdGFydChtZGRldiwgYmkpOworCiAJaWYgKGJpb19kYXRhX2RpcihiaSk9PVdSSVRFKSB7CiAJCWRpc2tfc3RhdF9pbmMobWRkZXYtPmdlbmRpc2ssIHdyaXRlcyk7CiAJCWRpc2tfc3RhdF9hZGQobWRkZXYtPmdlbmRpc2ssIHdyaXRlX3NlY3RvcnMsIGJpb19zZWN0b3JzKGJpKSk7CkBAIC0xNTgzLDggKzE1ODUsNyBAQAogCiAJYmktPmJpX25leHQgPSBOVUxMOwogCWJpLT5iaV9waHlzX3NlZ21lbnRzID0gMTsJLyogb3Zlci1sb2FkZWQgdG8gY291bnQgYWN0aXZlIHN0cmlwZXMgKi8KLQlpZiAoIGJpb19kYXRhX2RpcihiaSkgPT0gV1JJVEUgKQotCQltZF93cml0ZV9zdGFydChtZGRldik7CisKIAlmb3IgKDtsb2dpY2FsX3NlY3RvciA8IGxhc3Rfc2VjdG9yOyBsb2dpY2FsX3NlY3RvciArPSBTVFJJUEVfU0VDVE9SUykgewogCQlERUZJTkVfV0FJVCh3KTsKIApAQCAtMTYzNCw3ICsxNjM1LDcgQEAKIH0KIAogLyogRklYTUUgZ29fZmFzdGVyIGlzbid0IHVzZWQgKi8KLXN0YXRpYyBpbnQgc3luY19yZXF1ZXN0IChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgZ29fZmFzdGVyKQorc3RhdGljIHNlY3Rvcl90IHN5bmNfcmVxdWVzdChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgKnNraXBwZWQsIGludCBnb19mYXN0ZXIpCiB7CiAJcmFpZDZfY29uZl90ICpjb25mID0gKHJhaWQ2X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOwpAQCAtMTY1Nyw4ICsxNjU4LDggQEAKIAkgKiBub3RoaW5nIHdlIGNhbiBkby4KIAkgKi8KIAlpZiAobWRkZXYtPmRlZ3JhZGVkID49IDIgJiYgdGVzdF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSkpIHsKLQkJaW50IHJ2ID0gKG1kZGV2LT5zaXplIDw8IDEpIC0gc2VjdG9yX25yOwotCQltZF9kb25lX3N5bmMobWRkZXYsIHJ2LCAxKTsKKwkJc2VjdG9yX3QgcnYgPSAobWRkZXYtPnNpemUgPDwgMSkgLSBzZWN0b3JfbnI7CisJCSpza2lwcGVkID0gMTsKIAkJcmV0dXJuIHJ2OwogCX0KIApAQCAtMTcwNSw3ICsxNzA2LDYgQEAKIAlQUklOVEsoIisrKyByYWlkNmQgYWN0aXZlXG4iKTsKIAogCW1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2KTsKLQltZF9oYW5kbGVfc2FmZW1vZGUobWRkZXYpOwogCiAJaGFuZGxlZCA9IDA7CiAJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9jb21tYW5kLmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYwppbmRleCAyNDViMDA1Li4wN2EwODVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYwpAQCAtMjMsNiArMjMsNyBAQAogICovCiAKICNpbmNsdWRlICJpYm1hc20uaCIKKyNpbmNsdWRlICJsb3dsZXZlbC5oIgogCiBzdGF0aWMgdm9pZCBleGVjX25leHRfY29tbWFuZChzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwKTsKIHN0YXRpYyB2b2lkIGZyZWVfY29tbWFuZChzdHJ1Y3Qga29iamVjdCAqa29iaik7CkBAIC0zMSw4ICszMiw5IEBACiAJLnJlbGVhc2UgPSBmcmVlX2NvbW1hbmQsCiB9OwogCitzdGF0aWMgYXRvbWljX3QgY29tbWFuZF9jb3VudCA9IEFUT01JQ19JTklUKDApOwogCi1zdHJ1Y3QgY29tbWFuZCAqaWJtYXNtX25ld19jb21tYW5kKHNpemVfdCBidWZmZXJfc2l6ZSkKK3N0cnVjdCBjb21tYW5kICppYm1hc21fbmV3X2NvbW1hbmQoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCwgc2l6ZV90IGJ1ZmZlcl9zaXplKQogewogCXN0cnVjdCBjb21tYW5kICpjbWQ7CiAKQEAgLTU1LDExICs1NywxNSBAQAogCiAJa29iamVjdF9pbml0KCZjbWQtPmtvYmopOwogCWNtZC0+a29iai5rdHlwZSA9ICZpYm1hc21fY21kX2tvYmpfdHlwZTsKKwljbWQtPmxvY2sgPSAmc3AtPmxvY2s7CiAKIAljbWQtPnN0YXR1cyA9IElCTUFTTV9DTURfUEVORElORzsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjbWQtPndhaXQpOwogCUlOSVRfTElTVF9IRUFEKCZjbWQtPnF1ZXVlX25vZGUpOwogCisJYXRvbWljX2luYygmY29tbWFuZF9jb3VudCk7CisJZGJnKCJjb21tYW5kIGNvdW50OiAlZFxuIiwgYXRvbWljX3JlYWQoJmNvbW1hbmRfY291bnQpKTsKKwogCXJldHVybiBjbWQ7CiB9CiAKQEAgLTY4LDYgKzc0LDggQEAKIAlzdHJ1Y3QgY29tbWFuZCAqY21kID0gdG9fY29tbWFuZChrb2JqKTsKICAKIAlsaXN0X2RlbCgmY21kLT5xdWV1ZV9ub2RlKTsKKwlhdG9taWNfZGVjKCZjb21tYW5kX2NvdW50KTsKKwlkYmcoImNvbW1hbmQgY291bnQ6ICVkXG4iLCBhdG9taWNfcmVhZCgmY29tbWFuZF9jb3VudCkpOwogCWtmcmVlKGNtZC0+YnVmZmVyKTsKIAlrZnJlZShjbWQpOwogfQpAQCAtOTQsOCArMTAyLDE0IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb19leGVjX2NvbW1hbmQoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCkKIHsKKwljaGFyIHRzYnVmWzMyXTsKKworCWRiZygiJXM6JWQgYXQgJXNcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIGdldF90aW1lc3RhbXAodHNidWYpKTsKKwogCWlmIChpYm1hc21fc2VuZF9pMm9fbWVzc2FnZShzcCkpIHsKIAkJc3AtPmN1cnJlbnRfY29tbWFuZC0+c3RhdHVzID0gSUJNQVNNX0NNRF9GQUlMRUQ7CisJCXdha2VfdXAoJnNwLT5jdXJyZW50X2NvbW1hbmQtPndhaXQpOworCQljb21tYW5kX3B1dChzcC0+Y3VycmVudF9jb21tYW5kKTsKIAkJZXhlY19uZXh0X2NvbW1hbmQoc3ApOwogCX0KIH0KQEAgLTExMSwxNCArMTI1LDE2IEBACiB2b2lkIGlibWFzbV9leGVjX2NvbW1hbmQoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCwgc3RydWN0IGNvbW1hbmQgKmNtZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgdHNidWZbMzJdOworCisJZGJnKCIlczolZCBhdCAlc1xuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgZ2V0X3RpbWVzdGFtcCh0c2J1ZikpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNwLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXNwLT5jdXJyZW50X2NvbW1hbmQpIHsKLQkJY29tbWFuZF9nZXQoY21kKTsKIAkJc3AtPmN1cnJlbnRfY29tbWFuZCA9IGNtZDsKKwkJY29tbWFuZF9nZXQoc3AtPmN1cnJlbnRfY29tbWFuZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwLT5sb2NrLCBmbGFncyk7Ci0KIAkJZG9fZXhlY19jb21tYW5kKHNwKTsKIAl9IGVsc2UgewogCQllbnF1ZXVlX2NvbW1hbmQoc3AsIGNtZCk7CkBAIC0xMjksOSArMTQ1LDkgQEAKIHN0YXRpYyB2b2lkIGV4ZWNfbmV4dF9jb21tYW5kKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3ApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyIHRzYnVmWzMyXTsKIAotCXdha2VfdXAoJnNwLT5jdXJyZW50X2NvbW1hbmQtPndhaXQpOwotCWNvbW1hbmRfcHV0KHNwLT5jdXJyZW50X2NvbW1hbmQpOworCWRiZygiJXM6JWQgYXQgJXNcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIGdldF90aW1lc3RhbXAodHNidWYpKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzcC0+bG9jaywgZmxhZ3MpOwogCXNwLT5jdXJyZW50X2NvbW1hbmQgPSBkZXF1ZXVlX2NvbW1hbmQoc3ApOwpAQCAtMTY5LDcgKzE4NSw5IEBACiAJaWYgKCFzcC0+Y3VycmVudF9jb21tYW5kKSAKIAkJcmV0dXJuOyAKIAotCW1lbWNweShjbWQtPmJ1ZmZlciwgcmVzcG9uc2UsIG1pbihzaXplLCBjbWQtPmJ1ZmZlcl9zaXplKSk7CisJbWVtY3B5X2Zyb21pbyhjbWQtPmJ1ZmZlciwgcmVzcG9uc2UsIG1pbihzaXplLCBjbWQtPmJ1ZmZlcl9zaXplKSk7CiAJY21kLT5zdGF0dXMgPSBJQk1BU01fQ01EX0NPTVBMRVRFOworCXdha2VfdXAoJnNwLT5jdXJyZW50X2NvbW1hbmQtPndhaXQpOworCWNvbW1hbmRfcHV0KHNwLT5jdXJyZW50X2NvbW1hbmQpOwogCWV4ZWNfbmV4dF9jb21tYW5kKHNwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vZG90X2NvbW1hbmQuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vZG90X2NvbW1hbmQuYwppbmRleCA0NzhhOGQ4Li4xM2M1MmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2RvdF9jb21tYW5kLmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9kb3RfY29tbWFuZC5jCkBAIC0zMyw3ICszMywxMyBAQAogCXUzMiBzaXplOwogCXN0cnVjdCBkb3RfY29tbWFuZF9oZWFkZXIgKmhlYWRlciA9IChzdHJ1Y3QgZG90X2NvbW1hbmRfaGVhZGVyICopbWVzc2FnZTsKIAorCWlmIChtZXNzYWdlX3NpemUgPT0gMCkKKwkJcmV0dXJuOworCiAJc2l6ZSA9IGdldF9kb3RfY29tbWFuZF9zaXplKG1lc3NhZ2UpOworCWlmIChzaXplID09IDApCisJCXJldHVybjsKKwogCWlmIChzaXplID4gbWVzc2FnZV9zaXplKQogCQlzaXplID0gbWVzc2FnZV9zaXplOwogCkBAIC02Nyw3ICs3Myw3IEBACiAJdTggKnZwZF9kYXRhOwogCWludCByZXN1bHQgPSAwOwogCi0JY29tbWFuZCA9IGlibWFzbV9uZXdfY29tbWFuZChJTklUX0JVRkZFUl9TSVpFKTsKKwljb21tYW5kID0gaWJtYXNtX25ld19jb21tYW5kKHNwLCBJTklUX0JVRkZFUl9TSVpFKTsKIAlpZiAoY29tbWFuZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTIxLDcgKzEyNyw3IEBACiAJc3RydWN0IG9zX3N0YXRlX2NvbW1hbmQgKm9zX3N0YXRlX2NtZDsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCWNtZCA9IGlibWFzbV9uZXdfY29tbWFuZChzaXplb2Yoc3RydWN0IG9zX3N0YXRlX2NvbW1hbmQpKTsKKwljbWQgPSBpYm1hc21fbmV3X2NvbW1hbmQoc3AsIHNpemVvZihzdHJ1Y3Qgb3Nfc3RhdGVfY29tbWFuZCkpOwogCWlmIChjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vZXZlbnQuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vZXZlbnQuYwppbmRleCBlMTAwZjM0Li5mZTFlODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2V2ZW50LmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9ldmVudC5jCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImlibWFzbS5oIgorI2luY2x1ZGUgImxvd2xldmVsLmgiCiAKIC8qCiAgKiBBU00gc2VydmljZSBwcm9jZXNzb3IgZXZlbnQgaGFuZGxpbmcgcm91dGluZXMuCkBAIC0zNCw3ICszNSw2IEBACiAgKiBjaXJjdWxhciBidWZmZXIuCiAgKi8KIAotCiBzdGF0aWMgdm9pZCB3YWtlX3VwX2V2ZW50X3JlYWRlcnMoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCkKIHsKIAlzdHJ1Y3QgZXZlbnRfcmVhZGVyICpyZWFkZXI7CkBAIC02Myw3ICs2Myw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNwLT5sb2NrLCBmbGFncyk7CiAJLyogY29weSB0aGUgZXZlbnQgaW50byB0aGUgbmV4dCBzbG90IGluIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KIAlldmVudCA9ICZidWZmZXItPmV2ZW50c1tidWZmZXItPm5leHRfaW5kZXhdOwotCW1lbWNweShldmVudC0+ZGF0YSwgZGF0YSwgZGF0YV9zaXplKTsKKwltZW1jcHlfZnJvbWlvKGV2ZW50LT5kYXRhLCBkYXRhLCBkYXRhX3NpemUpOwogCWV2ZW50LT5kYXRhX3NpemUgPSBkYXRhX3NpemU7CiAJZXZlbnQtPnNlcmlhbF9udW1iZXIgPSBidWZmZXItPm5leHRfc2VyaWFsX251bWJlcjsKIApAQCAtOTMsNyArOTMsMTAgQEAKIAl1bnNpZ25lZCBpbnQgaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocmVhZGVyLT53YWl0LCBldmVudF9hdmFpbGFibGUoYnVmZmVyLCByZWFkZXIpKSkKKwlyZWFkZXItPmNhbmNlbGxlZCA9IDA7CisKKwlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJlYWRlci0+d2FpdCwKKwkJCWV2ZW50X2F2YWlsYWJsZShidWZmZXIsIHJlYWRlcikgfHwgcmVhZGVyLT5jYW5jZWxsZWQpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKCFldmVudF9hdmFpbGFibGUoYnVmZmVyLCByZWFkZXIpKQpAQCAtMTE2LDYgKzExOSwxMiBAQAogCXJldHVybiBldmVudC0+ZGF0YV9zaXplOwogfQogCit2b2lkIGlibWFzbV9jYW5jZWxfbmV4dF9ldmVudChzdHJ1Y3QgZXZlbnRfcmVhZGVyICpyZWFkZXIpCit7CisgICAgICAgIHJlYWRlci0+Y2FuY2VsbGVkID0gMTsKKyAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZyZWFkZXItPndhaXQpOworfQorCiB2b2lkIGlibWFzbV9ldmVudF9yZWFkZXJfcmVnaXN0ZXIoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCwgc3RydWN0IGV2ZW50X3JlYWRlciAqcmVhZGVyKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMzEsOCArMTQwLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZyZWFkZXItPndhaXQpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNwLT5sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWwoJnJlYWRlci0+bm9kZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3AtPmxvY2ssIGZsYWdzKTsKQEAgLTE2NCw2ICsxNzEsNSBAQAogCiB2b2lkIGlibWFzbV9ldmVudF9idWZmZXJfZXhpdChzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwKQogewotCXdha2VfdXBfZXZlbnRfcmVhZGVycyhzcCk7CiAJa2ZyZWUoc3AtPmV2ZW50X2J1ZmZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL2hlYXJ0YmVhdC5jIGIvZHJpdmVycy9taXNjL2libWFzbS9oZWFydGJlYXQuYwppbmRleCBjZTA5MzA5Li5mMjk1NDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2hlYXJ0YmVhdC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vaGVhcnRiZWF0LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgImlibWFzbS5oIgogI2luY2x1ZGUgImRvdF9jb21tYW5kLmgiCisjaW5jbHVkZSAibG93bGV2ZWwuaCIKIAogc3RhdGljIGludCBzdXNwZW5kX2hlYXJ0YmVhdHMgPSAwOwogCkBAIC02Miw3ICs2Myw3IEBACiAKIGludCBpYm1hc21faGVhcnRiZWF0X2luaXQoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCkKIHsKLQlzcC0+aGVhcnRiZWF0ID0gaWJtYXNtX25ld19jb21tYW5kKEhFQVJUQkVBVF9CVUZGRVJfU0laRSk7CisJc3AtPmhlYXJ0YmVhdCA9IGlibWFzbV9uZXdfY29tbWFuZChzcCwgSEVBUlRCRUFUX0JVRkZFUl9TSVpFKTsKIAlpZiAoc3AtPmhlYXJ0YmVhdCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzEsNiArNzIsMTIgQEAKIAogdm9pZCBpYm1hc21faGVhcnRiZWF0X2V4aXQoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCkKIHsKKwljaGFyIHRzYnVmWzMyXTsKKworCWRiZygiJXM6JWQgYXQgJXNcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIGdldF90aW1lc3RhbXAodHNidWYpKTsKKwlpYm1hc21fd2FpdF9mb3JfcmVzcG9uc2Uoc3AtPmhlYXJ0YmVhdCwgSUJNQVNNX0NNRF9USU1FT1VUX05PUk1BTCk7CisJZGJnKCIlczolZCBhdCAlc1xuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgZ2V0X3RpbWVzdGFtcCh0c2J1ZikpOworCXN1c3BlbmRfaGVhcnRiZWF0cyA9IDE7CiAJY29tbWFuZF9wdXQoc3AtPmhlYXJ0YmVhdCk7CiB9CiAKQEAgLTc4LDE0ICs4NSwxNiBAQAogewogCXN0cnVjdCBjb21tYW5kICpjbWQgPSBzcC0+aGVhcnRiZWF0OwogCXN0cnVjdCBkb3RfY29tbWFuZF9oZWFkZXIgKmhlYWRlciA9IChzdHJ1Y3QgZG90X2NvbW1hbmRfaGVhZGVyICopY21kLT5idWZmZXI7CisJY2hhciB0c2J1ZlszMl07CiAKKwlkYmcoIiVzOiVkIGF0ICVzXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBnZXRfdGltZXN0YW1wKHRzYnVmKSk7CiAJaWYgKHN1c3BlbmRfaGVhcnRiZWF0cykKIAkJcmV0dXJuOwogCiAJLyogcmV0dXJuIHRoZSByZWNlaXZlZCBkb3QgY29tbWFuZCB0byBzZW5kZXIgKi8KIAljbWQtPnN0YXR1cyA9IElCTUFTTV9DTURfUEVORElORzsKIAlzaXplID0gbWluKHNpemUsIGNtZC0+YnVmZmVyX3NpemUpOwotCW1lbWNweShjbWQtPmJ1ZmZlciwgbWVzc2FnZSwgc2l6ZSk7CisJbWVtY3B5X2Zyb21pbyhjbWQtPmJ1ZmZlciwgbWVzc2FnZSwgc2l6ZSk7CiAJaGVhZGVyLT50eXBlID0gc3Bfd3JpdGU7CiAJaWJtYXNtX2V4ZWNfY29tbWFuZChzcCwgY21kKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtLmggYi9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbS5oCmluZGV4IDZmZWM3ZmQuLmVjY2U0ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtLmgKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc20uaApAQCAtMzQsMTYgKzM0LDMxIEBACiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAKIC8qIERyaXZlciBpZGVudGlmaWNhdGlvbiAqLwogI2RlZmluZSBEUklWRVJfTkFNRQkiaWJtYXNtIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAgIjAuNCIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgICJNYXggQXNib2NrIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAgIjEuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgICJNYXggQXNib2NrIDxtYXNib2NrQHVzLmlibS5jb20+LCBWZXJub24gTWF1ZXJ5IDx2ZXJudXhAdXMuaWJtLmNvbT4iCiAjZGVmaW5lIERSSVZFUl9ERVNDICAgICAiSUJNIEFTTSBTZXJ2aWNlIFByb2Nlc3NvciBEcml2ZXIiCiAKICNkZWZpbmUgZXJyKG1zZykgcHJpbnRrKEtFUk5fRVJSICIlczogIiBtc2cgIlxuIiwgRFJJVkVSX05BTUUpCiAjZGVmaW5lIGluZm8obXNnKSBwcmludGsoS0VSTl9JTkZPICIlczogIiBtc2cgIlxuIiwgRFJJVkVSX05BTUUpCiAKK2V4dGVybiBpbnQgaWJtYXNtX2RlYnVnOworI2RlZmluZSBkYmcoU1RSLCBBUkdTLi4uKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoaWJtYXNtX2RlYnVnKQkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyBTVFIgLCAjI0FSR1MpOwlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBjaGFyICpnZXRfdGltZXN0YW1wKGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJZG9fZ2V0dGltZW9mZGF5KCZub3cpOworCXNwcmludGYoYnVmLCAiJWx1LiVsdSIsIG5vdy50dl9zZWMsIG5vdy50dl91c2VjKTsKKwlyZXR1cm4gYnVmOworfQogCiAjZGVmaW5lIElCTUFTTV9DTURfUEVORElORwkwCQogI2RlZmluZSBJQk1BU01fQ01EX0NPTVBMRVRFCTEJCkBAIC01Miw3ICs2Nyw3IEBACiAjZGVmaW5lIElCTUFTTV9DTURfVElNRU9VVF9OT1JNQUwJNDUKICNkZWZpbmUgSUJNQVNNX0NNRF9USU1FT1VUX0VYVFJBCTI0MAogCi0jZGVmaW5lIElCTUFTTV9DTURfTUFYX0JVRkZFUl9TSVpFCTB4NDAwMAorI2RlZmluZSBJQk1BU01fQ01EX01BWF9CVUZGRVJfU0laRQkweDgwMDAKIAogI2RlZmluZSBSRVZFUlNFX0hFQVJUQkVBVF9USU1FT1VUCTEyMAogCkBAIC04MCwxMiArOTUsMTcgQEAKIAlzaXplX3QJCQlidWZmZXJfc2l6ZTsKIAlpbnQJCQlzdGF0dXM7CiAJc3RydWN0IGtvYmplY3QJCWtvYmo7CisJc3BpbmxvY2tfdAkJKmxvY2s7CiB9OwogI2RlZmluZSB0b19jb21tYW5kKGMpIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgY29tbWFuZCwga29iaikKIAogc3RhdGljIGlubGluZSB2b2lkIGNvbW1hbmRfcHV0KHN0cnVjdCBjb21tYW5kICpjbWQpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKGNtZC0+bG9jaywgZmxhZ3MpOwogICAgICAgICBrb2JqZWN0X3B1dCgmY21kLT5rb2JqKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNtZC0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29tbWFuZF9nZXQoc3RydWN0IGNvbW1hbmQgKmNtZCkKQEAgLTEwOCw2ICsxMjgsNyBAQAogfTsKIAogc3RydWN0IGV2ZW50X3JlYWRlciB7CisJaW50CQkJY2FuY2VsbGVkOwogCXVuc2lnbmVkIGludAkJbmV4dF9zZXJpYWxfbnVtYmVyOwogCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwpAQCAtMTIwLDQxICsxNDEsMTEgQEAKIAl1bnNpZ25lZCBpbnQJCXN0b3BwZWQ7CiB9OwogCi0KLS8qIHJlbW90ZSBjb25zb2xlIGV2ZW50cyAqLwotc3RydWN0IG1vdXNlX2V2ZW50IHsKLQlsb25nCQl4OwotCWxvbmcJCXk7Ci0JdW5zaWduZWQgY2hhcglidXR0b25zOwotCXVuc2lnbmVkIGNoYXIJdHJhbnNpdGlvbnM7CitzdHJ1Y3QgaWJtYXNtX3JlbW90ZSB7CisJc3RydWN0IGlucHV0X2RldiBrZXliZF9kZXY7CisJc3RydWN0IGlucHV0X2RldiBtb3VzZV9kZXY7CiB9OwogCi1zdHJ1Y3Qga2V5Ym9hcmRfZXZlbnQgewotCXVuc2lnbmVkIGxvbmcJa2V5X2NvZGU7Ci0JdW5zaWduZWQgY2hhcglrZXlfZG93bjsKLX07Ci0KLXN0cnVjdCByZW1vdGVfZXZlbnQgewotCXVuc2lnbmVkIGxvbmcJdHlwZTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBtb3VzZV9ldmVudAltb3VzZTsKLQkJc3RydWN0IGtleWJvYXJkX2V2ZW50CWtleWJvYXJkOwotCX0gZGF0YTsKLX07Ci0KLSNkZWZpbmUgRFJJVkVSX1JFTU9URV9RVUVVRV9TSVpFIDI0MAotCi1zdHJ1Y3QgcmVtb3RlX3F1ZXVlIHsKLQlzdHJ1Y3QgcmVtb3RlX2V2ZW50CSpzdGFydDsKLQlzdHJ1Y3QgcmVtb3RlX2V2ZW50CSplbmQ7Ci0Jc3RydWN0IHJlbW90ZV9ldmVudAkqcmVhZGVyOwotCXN0cnVjdCByZW1vdGVfZXZlbnQJKndyaXRlcjsKLQl1bnNpZ25lZCBpbnQJCXNpemU7Ci0JaW50CQkJb3BlbjsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwotfTsKLQotCiBzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgewogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIAlzcGlubG9ja190CQlsb2NrOwpAQCAtMTY3LDEzICsxNTgsMTMgQEAKIAljaGFyCQkJZGlybmFtZVtJQk1BU01fTkFNRV9TSVpFXTsKIAljaGFyCQkJZGV2bmFtZVtJQk1BU01fTkFNRV9TSVpFXTsKIAl1bnNpZ25lZCBpbnQJCW51bWJlcjsKLQlzdHJ1Y3QgcmVtb3RlX3F1ZXVlCXJlbW90ZV9xdWV1ZTsKKwlzdHJ1Y3QgaWJtYXNtX3JlbW90ZQkqcmVtb3RlOwogCWludAkJCXNlcmlhbF9saW5lOwogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiB9OwogCiAvKiBjb21tYW5kIHByb2Nlc3NpbmcgKi8KLWV4dGVybiBzdHJ1Y3QgY29tbWFuZCAqaWJtYXNtX25ld19jb21tYW5kKHNpemVfdCBidWZmZXJfc2l6ZSk7CitleHRlcm4gc3RydWN0IGNvbW1hbmQgKmlibWFzbV9uZXdfY29tbWFuZChzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwLCBzaXplX3QgYnVmZmVyX3NpemUpOwogZXh0ZXJuIHZvaWQgaWJtYXNtX2V4ZWNfY29tbWFuZChzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwLCBzdHJ1Y3QgY29tbWFuZCAqY21kKTsKIGV4dGVybiB2b2lkIGlibWFzbV93YWl0X2Zvcl9yZXNwb25zZShzdHJ1Y3QgY29tbWFuZCAqY21kLCBpbnQgdGltZW91dCk7CiBleHRlcm4gdm9pZCBpYm1hc21fcmVjZWl2ZV9jb21tYW5kX3Jlc3BvbnNlKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3AsIHZvaWQgKnJlc3BvbnNlLCAgc2l6ZV90IHNpemUpOwpAQCAtMTg1LDYgKzE3Niw3IEBACiBleHRlcm4gdm9pZCBpYm1hc21fZXZlbnRfcmVhZGVyX3JlZ2lzdGVyKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3AsIHN0cnVjdCBldmVudF9yZWFkZXIgKnJlYWRlcik7CiBleHRlcm4gdm9pZCBpYm1hc21fZXZlbnRfcmVhZGVyX3VucmVnaXN0ZXIoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCwgc3RydWN0IGV2ZW50X3JlYWRlciAqcmVhZGVyKTsKIGV4dGVybiBpbnQgaWJtYXNtX2dldF9uZXh0X2V2ZW50KHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3AsIHN0cnVjdCBldmVudF9yZWFkZXIgKnJlYWRlcik7CitleHRlcm4gdm9pZCBpYm1hc21fY2FuY2VsX25leHRfZXZlbnQoc3RydWN0IGV2ZW50X3JlYWRlciAqcmVhZGVyKTsKIAogLyogaGVhcnRiZWF0IC0gZnJvbSBTUCB0byBPUyAqLwogZXh0ZXJuIHZvaWQgaWJtYXNtX3JlZ2lzdGVyX3BhbmljX25vdGlmaWVyKHZvaWQpOwpAQCAtMjA4LDExICsyMDAsOSBAQAogZXh0ZXJuIGlycXJldHVybl90IGlibWFzbV9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICogZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIC8qIHJlbW90ZSBjb25zb2xlICovCi1leHRlcm4gdm9pZCBpYm1hc21faGFuZGxlX21vdXNlX2ludGVycnVwdChzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwKTsKLWV4dGVybiBpbnQgaWJtYXNtX2luaXRfcmVtb3RlX3F1ZXVlKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3ApOwotZXh0ZXJuIHZvaWQgaWJtYXNtX2ZyZWVfcmVtb3RlX3F1ZXVlKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3ApOwotZXh0ZXJuIHZvaWQgaWJtYXNtX2FkdmFuY2VfcmVhZGVyKHN0cnVjdCByZW1vdGVfcXVldWUgKnEsIHVuc2lnbmVkIGludCBuKTsKLWV4dGVybiBzaXplX3QgaWJtYXNtX2V2ZW50c19hdmFpbGFibGUoc3RydWN0IHJlbW90ZV9xdWV1ZSAqcSk7CitleHRlcm4gdm9pZCBpYm1hc21faGFuZGxlX21vdXNlX2ludGVycnVwdChzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50IGlibWFzbV9pbml0X3JlbW90ZV9pbnB1dF9kZXYoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCk7CitleHRlcm4gdm9pZCBpYm1hc21fZnJlZV9yZW1vdGVfaW5wdXRfZGV2KHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3ApOwogCiAvKiBmaWxlIHN5c3RlbSAqLwogZXh0ZXJuIGludCBpYm1hc21mc19yZWdpc3Rlcih2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtZnMuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtZnMuYwppbmRleCA4NjZlODY3Li41YzU1MGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbWZzLmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc21mcy5jCkBAIC0zNyw5ICszNyw3IEBACiAgKiAgICB8ICAgfC0tIGV2ZW50CiAgKiAgICB8ICAgfC0tIHJldmVyc2VfaGVhcnRiZWF0CiAgKiAgICB8ICAgYC0tIHJlbW90ZV92aWRlbwotICogICAgfCAgICAgICB8LS0gY29ubmVjdGVkCiAgKiAgICB8ICAgICAgIHwtLSBkZXB0aAotICogICAgfCAgICAgICB8LS0gZXZlbnRzCiAgKiAgICB8ICAgICAgIHwtLSBoZWlnaHQKICAqICAgIHwgICAgICAgYC0tIHdpZHRoCiAgKiAgICAuCkBAIC01MCw5ICs0OCw3IEBACiAgKiAgICAgICAgfC0tIGV2ZW50CiAgKiAgICAgICAgfC0tIHJldmVyc2VfaGVhcnRiZWF0CiAgKiAgICAgICAgYC0tIHJlbW90ZV92aWRlbwotICogICAgICAgICAgICB8LS0gY29ubmVjdGVkCiAgKiAgICAgICAgICAgIHwtLSBkZXB0aAotICogICAgICAgICAgICB8LS0gZXZlbnRzCiAgKiAgICAgICAgICAgIHwtLSBoZWlnaHQKICAqICAgICAgICAgICAgYC0tIHdpZHRoCiAgKgpAQCAtNzUsMTQgKzcxLDYgQEAKICAqIHJlbW90ZV92aWRlby93aWR0aDogY29udHJvbCByZW1vdGUgZGlzcGxheSBzZXR0aW5ncwogICogCXdyaXRlOiBzZXQgdmFsdWUKICAqIAlyZWFkOiByZWFkIHZhbHVlCi0gKgotICogcmVtb3RlX3ZpZGVvL2Nvbm5lY3RlZAotICogCXJlYWQ6IHJldHVybiAiMSIgaWYgd2ViIGJyb3dzZXIgVk5DIGphdmEgYXBwbGV0IGlzIGNvbm5lY3RlZCwgCi0gKiAJCSIwIiBvdGhlcndpc2UKLSAqCi0gKiByZW1vdGVfdmlkZW8vZXZlbnRzCi0gKiAJcmVhZDogc2xlZXAgdW50aWwgYSByZW1vdGUgbW91c2Ugb3Iga2V5Ym9hcmQgZXZlbnQgb2NjdXJzLCB0aGVuIHJldHVybgotICogCQl0aGVuIGV2ZW50LgogICovCiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMzMzLDcgKzMyMSw3IEBACiAJaWYgKGNvbW1hbmRfZGF0YS0+Y29tbWFuZCkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQljbWQgPSBpYm1hc21fbmV3X2NvbW1hbmQoY291bnQpOworCWNtZCA9IGlibWFzbV9uZXdfY29tbWFuZChjb21tYW5kX2RhdGEtPnNwLCBjb3VudCk7CiAJaWYgKCFjbWQpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zNzQsNiArMzYyLDcgQEAKIAlpYm1hc21fZXZlbnRfcmVhZGVyX3JlZ2lzdGVyKHNwLCAmZXZlbnRfZGF0YS0+cmVhZGVyKTsKIAogCWV2ZW50X2RhdGEtPnNwID0gc3A7CisJZXZlbnRfZGF0YS0+YWN0aXZlID0gMDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBldmVudF9kYXRhOwogCXJldHVybiAwOwogfQpAQCAtMzkxLDcgKzM4MCw5IEBACiB7CiAJc3RydWN0IGlibWFzbWZzX2V2ZW50X2RhdGEgKmV2ZW50X2RhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGV2ZW50X3JlYWRlciAqcmVhZGVyID0gJmV2ZW50X2RhdGEtPnJlYWRlcjsKKwlzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwID0gZXZlbnRfZGF0YS0+c3A7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCpvZmZzZXQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQwMCwxNyArMzkxLDMyIEBACiAJaWYgKCpvZmZzZXQgIT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBpYm1hc21fZ2V0X25leHRfZXZlbnQoZXZlbnRfZGF0YS0+c3AsIHJlYWRlcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNwLT5sb2NrLCBmbGFncyk7CisJaWYgKGV2ZW50X2RhdGEtPmFjdGl2ZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlldmVudF9kYXRhLT5hY3RpdmUgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwLT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBpYm1hc21fZ2V0X25leHRfZXZlbnQoc3AsIHJlYWRlcik7CiAJaWYgKHJldCA8PSAwKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAotCWlmIChjb3VudCA8IHJlYWRlci0+ZGF0YV9zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY291bnQgPCByZWFkZXItPmRhdGFfc2l6ZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CiAKLSAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihidWYsIHJlYWRlci0+ZGF0YSwgcmVhZGVyLT5kYXRhX3NpemUpKQotCQlyZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihidWYsIHJlYWRlci0+ZGF0YSwgcmVhZGVyLT5kYXRhX3NpemUpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSByZWFkZXItPmRhdGFfc2l6ZTsKIAotCXJldHVybiByZWFkZXItPmRhdGFfc2l6ZTsKK291dDoKKwlldmVudF9kYXRhLT5hY3RpdmUgPSAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGV2ZW50X2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCkBAIC00MjQsNyArNDMwLDcgQEAKIAlpZiAoKm9mZnNldCAhPSAwKQogCQlyZXR1cm4gMDsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZXZlbnRfZGF0YS0+cmVhZGVyLndhaXQpOworCWlibWFzbV9jYW5jZWxfbmV4dF9ldmVudCgmZXZlbnRfZGF0YS0+cmVhZGVyKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTc1LDc1ICs1ODEsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCByZW1vdGVfZXZlbnRfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3A7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmVtb3RlX3F1ZXVlICpxOwotCQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT51LmdlbmVyaWNfaXA7Ci0Jc3AgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JcSA9ICZzcC0+cmVtb3RlX3F1ZXVlOwotCi0JLyogYWxsb3cgb25seSBvbmUgZXZlbnQgcmVhZGVyICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNwLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHEtPm9wZW4pIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3AtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JcS0+b3BlbiA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3AtPmxvY2ssIGZsYWdzKTsKLQotCWVuYWJsZV9tb3VzZV9pbnRlcnJ1cHRzKHNwKTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByZW1vdGVfZXZlbnRfZmlsZV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JZGlzYWJsZV9tb3VzZV9pbnRlcnJ1cHRzKHNwKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNwLT5yZW1vdGVfcXVldWUud2FpdCk7Ci0Jc3AtPnJlbW90ZV9xdWV1ZS5vcGVuID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCByZW1vdGVfZXZlbnRfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQotewotCXN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3AgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHJlbW90ZV9xdWV1ZSAqcSA9ICZzcC0+cmVtb3RlX3F1ZXVlOwotCXNpemVfdCBkYXRhX3NpemU7Ci0Jc3RydWN0IHJlbW90ZV9ldmVudCAqcmVhZGVyID0gcS0+cmVhZGVyOwotCXNpemVfdCBudW1fZXZlbnRzOwotCi0JaWYgKCpvZmZzZXQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY291bnQgPT0gMCB8fCBjb3VudCA+IDEwMjQpCi0JCXJldHVybiAwOwotCWlmICgqb2Zmc2V0ICE9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShxLT53YWl0LCBxLT5yZWFkZXIgIT0gcS0+d3JpdGVyKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCS8qIG9ubHkgZ2V0IG11bHRpcGxlcyBvZiBzdHJ1Y3QgcmVtb3RlX2V2ZW50ICovCi0JbnVtX2V2ZW50cyA9IG1pbigoY291bnQvc2l6ZW9mKHN0cnVjdCByZW1vdGVfZXZlbnQpKSwgaWJtYXNtX2V2ZW50c19hdmFpbGFibGUocSkpOwotCWlmICghbnVtX2V2ZW50cykKLQkJcmV0dXJuIDA7Ci0KLQlkYXRhX3NpemUgPSBudW1fZXZlbnRzICogc2l6ZW9mKHN0cnVjdCByZW1vdGVfZXZlbnQpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIHJlYWRlciwgZGF0YV9zaXplKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpYm1hc21fYWR2YW5jZV9yZWFkZXIocSwgbnVtX2V2ZW50cyk7Ci0KLQlyZXR1cm4gZGF0YV9zaXplOwotfQotCi0KIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbW1hbmRfZm9wcyA9IHsKIAkub3BlbiA9CQljb21tYW5kX2ZpbGVfb3BlbiwKIAkucmVsZWFzZSA9CWNvbW1hbmRfZmlsZV9jbG9zZSwKQEAgLTY3MiwxMiArNjA5LDYgQEAKIAkud3JpdGUgPQlyZW1vdGVfc2V0dGluZ3NfZmlsZV93cml0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlbW90ZV9ldmVudF9mb3BzID0gewotCS5vcGVuID0JCXJlbW90ZV9ldmVudF9maWxlX29wZW4sCi0JLnJlbGVhc2UgPQlyZW1vdGVfZXZlbnRfZmlsZV9jbG9zZSwKLQkucmVhZCA9CQlyZW1vdGVfZXZlbnRfZmlsZV9yZWFkLAotfTsKLQogCiBzdGF0aWMgdm9pZCBpYm1hc21mc19jcmVhdGVfZmlsZXMgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKnJvb3QpCiB7CkBAIC03MDMsNyArNjM0LDUgQEAKIAkJaWJtYXNtZnNfY3JlYXRlX2ZpbGUoc2IsIHJlbW90ZV9kaXIsICJ3aWR0aCIsICZyZW1vdGVfc2V0dGluZ3NfZm9wcywgKHZvaWQgKilkaXNwbGF5X3dpZHRoKHNwKSwgU19JUlVTUnxTX0lXVVNSKTsKIAkJaWJtYXNtZnNfY3JlYXRlX2ZpbGUoc2IsIHJlbW90ZV9kaXIsICJoZWlnaHQiLCAmcmVtb3RlX3NldHRpbmdzX2ZvcHMsICh2b2lkICopZGlzcGxheV9oZWlnaHQoc3ApLCBTX0lSVVNSfFNfSVdVU1IpOwogCQlpYm1hc21mc19jcmVhdGVfZmlsZShzYiwgcmVtb3RlX2RpciwgImRlcHRoIiwgJnJlbW90ZV9zZXR0aW5nc19mb3BzLCAodm9pZCAqKWRpc3BsYXlfZGVwdGgoc3ApLCBTX0lSVVNSfFNfSVdVU1IpOwotCQlpYm1hc21mc19jcmVhdGVfZmlsZShzYiwgcmVtb3RlX2RpciwgImNvbm5lY3RlZCIsICZyZW1vdGVfc2V0dGluZ3NfZm9wcywgKHZvaWQgKil2bmNfc3RhdHVzKHNwKSwgU19JUlVTUik7Ci0JCWlibWFzbWZzX2NyZWF0ZV9maWxlKHNiLCByZW1vdGVfZGlyLCAiZXZlbnRzIiwgJnJlbW90ZV9ldmVudF9mb3BzLCAodm9pZCAqKXNwLCBTX0lSVVNSKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL2xvd2xldmVsLmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2xvd2xldmVsLmMKaW5kZXggNTE1NmRlMi4uNDc5NDlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9sb3dsZXZlbC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vbG93bGV2ZWwuYwpAQCAtNDYsOCArNDYsOCBAQAogCiAJbWVzc2FnZSA9IGdldF9pMm9fbWVzc2FnZShzcC0+YmFzZV9hZGRyZXNzLCBtZmEpOwogCi0JbWVtY3B5KCZtZXNzYWdlLT5oZWFkZXIsICZoZWFkZXIsIHNpemVvZihzdHJ1Y3QgaTJvX2hlYWRlcikpOwotCW1lbWNweSgmbWVzc2FnZS0+ZGF0YSwgY29tbWFuZC0+YnVmZmVyLCBjb21tYW5kX3NpemUpOworCW1lbWNweV90b2lvKCZtZXNzYWdlLT5oZWFkZXIsICZoZWFkZXIsIHNpemVvZihzdHJ1Y3QgaTJvX2hlYWRlcikpOworCW1lbWNweV90b2lvKCZtZXNzYWdlLT5kYXRhLCBjb21tYW5kLT5idWZmZXIsIGNvbW1hbmRfc2l6ZSk7CiAKIAlzZXRfbWZhX2luYm91bmQoc3AtPmJhc2VfYWRkcmVzcywgbWZhKTsKIApAQCAtNTksMjMgKzU5LDI3IEBACiAJdTMyCW1mYTsKIAlzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwID0gKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqKWRldl9pZDsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcyA9IHNwLT5iYXNlX2FkZHJlc3M7CisJY2hhciB0c2J1ZlszMl07CiAKIAlpZiAoIXNwX2ludGVycnVwdF9wZW5kaW5nKGJhc2VfYWRkcmVzcykpCiAJCXJldHVybiBJUlFfTk9ORTsKIAorCWRiZygicmVzcG9uZCB0byBpbnRlcnJ1cHQgYXQgJXNcbiIsIGdldF90aW1lc3RhbXAodHNidWYpKTsKKwogCWlmIChtb3VzZV9pbnRlcnJ1cHRfcGVuZGluZyhzcCkpIHsKLQkJaWJtYXNtX2hhbmRsZV9tb3VzZV9pbnRlcnJ1cHQoc3ApOwotCQltZmEgPSBnZXRfbWZhX291dGJvdW5kKGJhc2VfYWRkcmVzcyk7CisJCWlibWFzbV9oYW5kbGVfbW91c2VfaW50ZXJydXB0KHNwLCByZWdzKTsKIAkJY2xlYXJfbW91c2VfaW50ZXJydXB0KHNwKTsKLQkJc2V0X21mYV9vdXRib3VuZChiYXNlX2FkZHJlc3MsIG1mYSk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKIAltZmEgPSBnZXRfbWZhX291dGJvdW5kKGJhc2VfYWRkcmVzcyk7CiAJaWYgKHZhbGlkX21mYShtZmEpKSB7CiAJCXN0cnVjdCBpMm9fbWVzc2FnZSAqbXNnID0gZ2V0X2kyb19tZXNzYWdlKGJhc2VfYWRkcmVzcywgbWZhKTsKIAkJaWJtYXNtX3JlY2VpdmVfbWVzc2FnZShzcCwgJm1zZy0+ZGF0YSwgaW5jb21pbmdfZGF0YV9zaXplKG1zZykpOwotCX0KKwl9IGVsc2UKKwkJZGJnKCJkaWRuJ3QgZ2V0IGEgdmFsaWQgTUZBXG4iKTsKKwogCXNldF9tZmFfb3V0Ym91bmQoYmFzZV9hZGRyZXNzLCBtZmEpOworCWRiZygiZmluaXNoZWQgaW50ZXJydXB0IGF0ICAgJXNcbiIsIGdldF90aW1lc3RhbXAodHNidWYpKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vbW9kdWxlLmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL21vZHVsZS5jCmluZGV4IDc3NzQzMmEuLjFmZGYwM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vbW9kdWxlLmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9tb2R1bGUuYwpAQCAtNTYsMTcgKzU2LDI2IEBACiAjaW5jbHVkZSAibG93bGV2ZWwuaCIKICNpbmNsdWRlICJyZW1vdGUuaCIKIAoraW50IGlibWFzbV9kZWJ1ZyA9IDA7Cittb2R1bGVfcGFyYW0oaWJtYXNtX2RlYnVnLCBpbnQgLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGlibWFzbV9kZWJ1ZywgIiBTZXQgZGVidWcgbW9kZSBvbiBvciBvZmYiKTsKKwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpYm1hc21faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgZXJyLCByZXN1bHQgPSAtRU5PTUVNOworCWludCByZXN1bHQ7CiAJc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcDsKIAotCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGVuYWJsZSBQQ0kgZGV2aWNlIGF0ICVzXG4iLAotCQkJRFJJVkVSX05BTUUsIHBjaV9uYW1lKHBkZXYpKTsKLQkJcmV0dXJuIGVycjsKKwlpZiAoKHJlc3VsdCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzdWx0OwogCX0KKwlpZiAoKHJlc3VsdCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJJVkVSX05BTUUpKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgUENJIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyb3JfcmVzb3VyY2VzOworCX0KKwkvKiB2bmMgY2xpZW50IHdvbid0IHdvcmsgd2l0aG91dCBidXMtbWFzdGVyaW5nICovCisJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAlzcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciksIEdGUF9LRVJORUwpOwogCWlmIChzcCA9PSBOVUxMKSB7CkBAIC03Niw2ICs4NSw5IEBACiAJfQogCW1lbXNldChzcCwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvcikpOwogCisJc3AtPmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJSU5JVF9MSVNUX0hFQUQoJnNwLT5jb21tYW5kX3F1ZXVlKTsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCAodm9pZCAqKXNwKTsKIAlzcC0+ZGV2ID0gJnBkZXYtPmRldjsKIAlzcC0+bnVtYmVyID0gcGRldi0+YnVzLT5udW1iZXI7CkBAIC0xMDEsMTUgKzExMyw2IEBACiAJCWdvdG8gZXJyb3JfaW9yZW1hcDsKIAl9CiAKLQlyZXN1bHQgPSBpYm1hc21faW5pdF9yZW1vdGVfcXVldWUoc3ApOwotCWlmIChyZXN1bHQpIHsKLQkJZGV2X2VycihzcC0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgcmVtb3RlIHF1ZXVlXG4iKTsKLQkJZ290byBlcnJvcl9yZW1vdGVfcXVldWU7Ci0JfQotCi0Jc3Bpbl9sb2NrX2luaXQoJnNwLT5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmc3AtPmNvbW1hbmRfcXVldWUpOwotCiAJcmVzdWx0ID0gcmVxdWVzdF9pcnEoc3AtPmlycSwgaWJtYXNtX2ludGVycnVwdF9oYW5kbGVyLCBTQV9TSElSUSwgc3AtPmRldm5hbWUsICh2b2lkKilzcCk7CiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZXJyKHNwLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJcbiIpOwpAQCAtMTE3LDcgKzEyMCwxMiBAQAogCX0KIAogCWVuYWJsZV9zcF9pbnRlcnJ1cHRzKHNwLT5iYXNlX2FkZHJlc3MpOwotCWRpc2FibGVfbW91c2VfaW50ZXJydXB0cyhzcCk7CisKKwlyZXN1bHQgPSBpYm1hc21faW5pdF9yZW1vdGVfaW5wdXRfZGV2KHNwKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoc3AtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHJlbW90ZSBxdWV1ZVxuIik7CisJCWdvdG8gZXJyb3Jfc2VuZF9tZXNzYWdlOworCX0KIAogCXJlc3VsdCA9IGlibWFzbV9zZW5kX2RyaXZlcl92cGQoc3ApOwogCWlmIChyZXN1bHQpIHsKQEAgLTEzMywzMCArMTQxLDI1IEBACiAKIAlpYm1hc21fcmVnaXN0ZXJfdWFydChzcCk7CiAKLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJXQVJOSU5HOiBUaGlzIHNvZnR3YXJlIG1heSBub3QgYmUgc3VwcG9ydGVkIG9yIGZ1bmN0aW9uXG4iKTsKLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJjb3JyZWN0bHkgb24geW91ciBJQk0gc2VydmVyLiBQbGVhc2UgY29uc3VsdCB0aGUgSUJNXG4iKTsKLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJTZXJ2ZXJQcm92ZW4gd2Vic2l0ZVxuIik7Ci0JZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAiaHR0cDovL3d3dy5wYy5pYm0uY29tL3d3L2VzZXJ2ZXIveHNlcmllcy9zZXJ2ZXJwcm92ZW5cbiIpOwotCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgImZvciBpbmZvcm1hdGlvbiBvbiB0aGUgc3BlY2lmaWMgZHJpdmVyIGxldmVsIGFuZCBzdXBwb3J0XG4iKTsKLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJzdGF0ZW1lbnQgZm9yIHlvdXIgSUJNIHNlcnZlci5cbiIpOwotCiAJcmV0dXJuIDA7CiAKIGVycm9yX3NlbmRfbWVzc2FnZToKIAlkaXNhYmxlX3NwX2ludGVycnVwdHMoc3AtPmJhc2VfYWRkcmVzcyk7CisJaWJtYXNtX2ZyZWVfcmVtb3RlX2lucHV0X2RldihzcCk7CiAJZnJlZV9pcnEoc3AtPmlycSwgKHZvaWQgKilzcCk7CiBlcnJvcl9yZXF1ZXN0X2lycToKLQlpYm1hc21fZnJlZV9yZW1vdGVfcXVldWUoc3ApOwotZXJyb3JfcmVtb3RlX3F1ZXVlOgogCWlvdW5tYXAoc3AtPmJhc2VfYWRkcmVzcyk7CiBlcnJvcl9pb3JlbWFwOgogCWlibWFzbV9oZWFydGJlYXRfZXhpdChzcCk7CiBlcnJvcl9oZWFydGJlYXQ6CiAJaWJtYXNtX2V2ZW50X2J1ZmZlcl9leGl0KHNwKTsKIGVycm9yX2V2ZW50YnVmZmVyOgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShzcCk7CiBlcnJvcl9rbWFsbG9jOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKyAgICAgICAgcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycm9yX3Jlc291cmNlczoKKyAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2NSwxNiArMTY4LDI0IEBACiB7CiAJc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCA9IChzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKKwlkYmcoIlVucmVnaXN0ZXJpbmcgVUFSVFxuIik7CiAJaWJtYXNtX3VucmVnaXN0ZXJfdWFydChzcCk7Ci0JaWJtYXNtX3NlbmRfb3Nfc3RhdGUoc3AsIFNZU1RFTV9TVEFURV9PU19ET1dOKTsKLQlkaXNhYmxlX3NwX2ludGVycnVwdHMoc3AtPmJhc2VfYWRkcmVzcyk7Ci0JZGlzYWJsZV9tb3VzZV9pbnRlcnJ1cHRzKHNwKTsKLQlmcmVlX2lycShzcC0+aXJxLCAodm9pZCAqKXNwKTsKKwlkYmcoIlNlbmRpbmcgT1MgZG93biBtZXNzYWdlXG4iKTsKKwlpZiAoaWJtYXNtX3NlbmRfb3Nfc3RhdGUoc3AsIFNZU1RFTV9TVEFURV9PU19ET1dOKSkKKwkJZXJyKCJmYWlsZWQgdG8gZ2V0IHJlcHNvbnNlIHRvICdTZW5kIE9TIFN0YXRlJyBjb21tYW5kXG4iKTsKKwlkYmcoIkRpc2FibGluZyBoZWFydGJlYXRzXG4iKTsKIAlpYm1hc21faGVhcnRiZWF0X2V4aXQoc3ApOwotCWlibWFzbV9mcmVlX3JlbW90ZV9xdWV1ZShzcCk7CisJZGJnKCJEaXNhYmxpbmcgaW50ZXJydXB0c1xuIik7CisJZGlzYWJsZV9zcF9pbnRlcnJ1cHRzKHNwLT5iYXNlX2FkZHJlc3MpOworCWRiZygiRnJlZWluZyBTUCBpcnFcbiIpOworCWZyZWVfaXJxKHNwLT5pcnEsICh2b2lkICopc3ApOworCWRiZygiQ2xlYW5pbmcgdXBcbiIpOworCWlibWFzbV9mcmVlX3JlbW90ZV9pbnB1dF9kZXYoc3ApOwogCWlvdW5tYXAoc3AtPmJhc2VfYWRkcmVzcyk7CiAJaWJtYXNtX2V2ZW50X2J1ZmZlcl9leGl0KHNwKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUoc3ApOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL3JfaGVhcnRiZWF0LmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL3JfaGVhcnRiZWF0LmMKaW5kZXggOTNkOWMxYi4uZjhmZGIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9yX2hlYXJ0YmVhdC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vcl9oZWFydGJlYXQuYwpAQCAtNjMsNyArNjMsNyBAQAogCWludCB0aW1lc19mYWlsZWQgPSAwOwogCWludCByZXN1bHQgPSAxOwogCi0JY21kID0gaWJtYXNtX25ld19jb21tYW5kKHNpemVvZiByaGJfZG90X2NtZCk7CisJY21kID0gaWJtYXNtX25ld19jb21tYW5kKHNwLCBzaXplb2YgcmhiX2RvdF9jbWQpOwogCWlmICghY21kKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9yZW1vdGUuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmMKaW5kZXggNTIwYzNmMS4uZDNjNDhkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9yZW1vdGUuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL3JlbW90ZS5jCkBAIC0xLDQgKzEsMyBAQAotCiAvKgogICogSUJNIEFTTSBTZXJ2aWNlIFByb2Nlc3NvciBEZXZpY2UgRHJpdmVyCiAgKgpAQCAtMTgsMTIwICsxNywxNzggQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNAogICoKLSAqIEF1dGhvcjogTWF4IEFzYvZjayA8YW1heEB1cy5pYm0uY29tPiAKKyAqIEF1dGhvcnM6IE1heCBBc2L2Y2sgPGFtYXhAdXMuaWJtLmNvbT4KKyAqICAgICAgICAgIFZlcm5vbiBNYXVlcnkgPHZlcm51eEB1cy5pYm0uY29tPgogICoKICAqLwogCiAvKiBSZW1vdGUgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50IGhhbmRsaW5nIGZ1bmN0aW9ucyAqLwogCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSAiaWJtYXNtLmgiCiAjaW5jbHVkZSAicmVtb3RlLmgiCiAKLWludCBpYm1hc21faW5pdF9yZW1vdGVfcXVldWUoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCkKK3N0YXRpYyBpbnQgeG1heCA9IDE2MDA7CitzdGF0aWMgaW50IHltYXggPSAxMjAwOworCisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCB4bGF0ZV9oaWdoW1hMQVRFX1NJWkVdID0geworCVtLRVlfU1lNX0VOVEVSICYgMHhmZl0gPSBLRVlfRU5URVIsCisJW0tFWV9TWU1fS1BTTEFTSCAmIDB4ZmZdID0gS0VZX0tQU0xBU0gsCisJW0tFWV9TWU1fS1BTVEFSICYgMHhmZl0gPSBLRVlfS1BBU1RFUklTSywKKwlbS0VZX1NZTV9LUE1JTlVTICYgMHhmZl0gPSBLRVlfS1BNSU5VUywKKwlbS0VZX1NZTV9LUERPVCAmIDB4ZmZdID0gS0VZX0tQRE9ULAorCVtLRVlfU1lNX0tQUExVUyAmIDB4ZmZdID0gS0VZX0tQUExVUywKKwlbS0VZX1NZTV9LUDAgJiAweGZmXSA9IEtFWV9LUDAsCisJW0tFWV9TWU1fS1AxICYgMHhmZl0gPSBLRVlfS1AxLAorCVtLRVlfU1lNX0tQMiAmIDB4ZmZdID0gS0VZX0tQMiwgW0tFWV9TWU1fS1BET1dOICYgMHhmZl0gPSBLRVlfS1AyLAorCVtLRVlfU1lNX0tQMyAmIDB4ZmZdID0gS0VZX0tQMywKKwlbS0VZX1NZTV9LUDQgJiAweGZmXSA9IEtFWV9LUDQsIFtLRVlfU1lNX0tQTEVGVCAmIDB4ZmZdID0gS0VZX0tQNCwKKwlbS0VZX1NZTV9LUDUgJiAweGZmXSA9IEtFWV9LUDUsCisJW0tFWV9TWU1fS1A2ICYgMHhmZl0gPSBLRVlfS1A2LCBbS0VZX1NZTV9LUFJJR0hUICYgMHhmZl0gPSBLRVlfS1A2LAorCVtLRVlfU1lNX0tQNyAmIDB4ZmZdID0gS0VZX0tQNywKKwlbS0VZX1NZTV9LUDggJiAweGZmXSA9IEtFWV9LUDgsIFtLRVlfU1lNX0tQVVAgJiAweGZmXSA9IEtFWV9LUDgsCisJW0tFWV9TWU1fS1A5ICYgMHhmZl0gPSBLRVlfS1A5LAorCVtLRVlfU1lNX0JLX1NQQyAmIDB4ZmZdID0gS0VZX0JBQ0tTUEFDRSwKKwlbS0VZX1NZTV9UQUIgJiAweGZmXSA9IEtFWV9UQUIsCisJW0tFWV9TWU1fQ1RSTCAmIDB4ZmZdID0gS0VZX0xFRlRDVFJMLAorCVtLRVlfU1lNX0FMVCAmIDB4ZmZdID0gS0VZX0xFRlRBTFQsCisJW0tFWV9TWU1fSU5TRVJUICYgMHhmZl0gPSBLRVlfSU5TRVJULAorCVtLRVlfU1lNX0RFTEVURSAmIDB4ZmZdID0gS0VZX0RFTEVURSwKKwlbS0VZX1NZTV9TSElGVCAmIDB4ZmZdID0gS0VZX0xFRlRTSElGVCwKKwlbS0VZX1NZTV9VQVJST1cgJiAweGZmXSA9IEtFWV9VUCwKKwlbS0VZX1NZTV9EQVJST1cgJiAweGZmXSA9IEtFWV9ET1dOLAorCVtLRVlfU1lNX0xBUlJPVyAmIDB4ZmZdID0gS0VZX0xFRlQsCisJW0tFWV9TWU1fUkFSUk9XICYgMHhmZl0gPSBLRVlfUklHSFQsCisJW0tFWV9TWU1fRVNDQVBFICYgMHhmZl0gPSBLRVlfRVNDLAorICAgICAgICBbS0VZX1NZTV9QQUdFVVAgJiAweGZmXSA9IEtFWV9QQUdFVVAsCisgICAgICAgIFtLRVlfU1lNX1BBR0VET1dOICYgMHhmZl0gPSBLRVlfUEFHRURPV04sCisgICAgICAgIFtLRVlfU1lNX0hPTUUgJiAweGZmXSA9IEtFWV9IT01FLAorICAgICAgICBbS0VZX1NZTV9FTkQgJiAweGZmXSA9IEtFWV9FTkQsCisJW0tFWV9TWU1fRjEgJiAweGZmXSA9IEtFWV9GMSwKKwlbS0VZX1NZTV9GMiAmIDB4ZmZdID0gS0VZX0YyLAorCVtLRVlfU1lNX0YzICYgMHhmZl0gPSBLRVlfRjMsCisJW0tFWV9TWU1fRjQgJiAweGZmXSA9IEtFWV9GNCwKKwlbS0VZX1NZTV9GNSAmIDB4ZmZdID0gS0VZX0Y1LAorCVtLRVlfU1lNX0Y2ICYgMHhmZl0gPSBLRVlfRjYsCisJW0tFWV9TWU1fRjcgJiAweGZmXSA9IEtFWV9GNywKKwlbS0VZX1NZTV9GOCAmIDB4ZmZdID0gS0VZX0Y4LAorCVtLRVlfU1lNX0Y5ICYgMHhmZl0gPSBLRVlfRjksCisJW0tFWV9TWU1fRjEwICYgMHhmZl0gPSBLRVlfRjEwLAorCVtLRVlfU1lNX0YxMSAmIDB4ZmZdID0gS0VZX0YxMSwKKwlbS0VZX1NZTV9GMTIgJiAweGZmXSA9IEtFWV9GMTIsCisJW0tFWV9TWU1fQ0FQX0xPQ0sgJiAweGZmXSA9IEtFWV9DQVBTTE9DSywKKwlbS0VZX1NZTV9OVU1fTE9DSyAmIDB4ZmZdID0gS0VZX05VTUxPQ0ssCisJW0tFWV9TWU1fU0NSX0xPQ0sgJiAweGZmXSA9IEtFWV9TQ1JPTExMT0NLLAorfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCB4bGF0ZVtYTEFURV9TSVpFXSA9IHsKKwlbTk9fS0VZQ09ERV0gPSBLRVlfUkVTRVJWRUQsCisJW0tFWV9TWU1fU1BBQ0VdID0gS0VZX1NQQUNFLAorCVtLRVlfU1lNX1RJTERFXSA9IEtFWV9HUkFWRSwgICAgICAgIFtLRVlfU1lNX0JLVElDXSA9IEtFWV9HUkFWRSwKKwlbS0VZX1NZTV9PTkVdID0gS0VZXzEsICAgICAgICAgICAgICBbS0VZX1NZTV9CQU5HXSA9IEtFWV8xLAorCVtLRVlfU1lNX1RXT10gPSBLRVlfMiwgICAgICAgICAgICAgIFtLRVlfU1lNX0FUXSA9IEtFWV8yLAorCVtLRVlfU1lNX1RIUkVFXSA9IEtFWV8zLCAgICAgICAgICAgIFtLRVlfU1lNX1BPVU5EXSA9IEtFWV8zLAorCVtLRVlfU1lNX0ZPVVJdID0gS0VZXzQsICAgICAgICAgICAgIFtLRVlfU1lNX0RPTExBUl0gPSBLRVlfNCwKKwlbS0VZX1NZTV9GSVZFXSA9IEtFWV81LCAgICAgICAgICAgICBbS0VZX1NZTV9QRVJDRU5UXSA9IEtFWV81LAorCVtLRVlfU1lNX1NJWF0gPSBLRVlfNiwgICAgICAgICAgICAgIFtLRVlfU1lNX0NBUkFUXSA9IEtFWV82LAorCVtLRVlfU1lNX1NFVkVOXSA9IEtFWV83LCAgICAgICAgICAgIFtLRVlfU1lNX0FNUEVSXSA9IEtFWV83LAorCVtLRVlfU1lNX0VJR0hUXSA9IEtFWV84LCAgICAgICAgICAgIFtLRVlfU1lNX1NUQVJdID0gS0VZXzgsCisJW0tFWV9TWU1fTklORV0gPSBLRVlfOSwgICAgICAgICAgICAgW0tFWV9TWU1fTFBBUkVOXSA9IEtFWV85LAorCVtLRVlfU1lNX1pFUk9dID0gS0VZXzAsICAgICAgICAgICAgIFtLRVlfU1lNX1JQQVJFTl0gPSBLRVlfMCwKKwlbS0VZX1NZTV9NSU5VU10gPSBLRVlfTUlOVVMsICAgICAgICBbS0VZX1NZTV9VU0NPUkVdID0gS0VZX01JTlVTLAorCVtLRVlfU1lNX0VRVUFMXSA9IEtFWV9FUVVBTCwgICAgICAgIFtLRVlfU1lNX1BMVVNdID0gS0VZX0VRVUFMLAorCVtLRVlfU1lNX0xCUktUXSA9IEtFWV9MRUZUQlJBQ0UsICAgIFtLRVlfU1lNX0xDVVJMWV0gPSBLRVlfTEVGVEJSQUNFLAorCVtLRVlfU1lNX1JCUktUXSA9IEtFWV9SSUdIVEJSQUNFLCAgIFtLRVlfU1lNX1JDVVJMWV0gPSBLRVlfUklHSFRCUkFDRSwKKwlbS0VZX1NZTV9TTEFTSF0gPSBLRVlfQkFDS1NMQVNILCAgICBbS0VZX1NZTV9QSVBFXSA9IEtFWV9CQUNLU0xBU0gsCisJW0tFWV9TWU1fVElDXSA9IEtFWV9BUE9TVFJPUEhFLCAgICAgW0tFWV9TWU1fUVVPVEVdID0gS0VZX0FQT1NUUk9QSEUsCisJW0tFWV9TWU1fU0VNSUNdID0gS0VZX1NFTUlDT0xPTiwgICAgW0tFWV9TWU1fQ09MT05dID0gS0VZX1NFTUlDT0xPTiwKKwlbS0VZX1NZTV9DT01NQV0gPSBLRVlfQ09NTUEsICAgICAgICBbS0VZX1NZTV9MVF0gPSBLRVlfQ09NTUEsCisJW0tFWV9TWU1fUEVSSU9EXSA9IEtFWV9ET1QsICAgICAgICAgW0tFWV9TWU1fR1RdID0gS0VZX0RPVCwKKwlbS0VZX1NZTV9CU0xBU0hdID0gS0VZX1NMQVNILCAgICAgICBbS0VZX1NZTV9RTUFSS10gPSBLRVlfU0xBU0gsCisJW0tFWV9TWU1fQV0gPSBLRVlfQSwgICAgICAgICAgICAgICAgW0tFWV9TWU1fYV0gPSBLRVlfQSwKKwlbS0VZX1NZTV9CXSA9IEtFWV9CLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9iXSA9IEtFWV9CLAorCVtLRVlfU1lNX0NdID0gS0VZX0MsICAgICAgICAgICAgICAgIFtLRVlfU1lNX2NdID0gS0VZX0MsCisJW0tFWV9TWU1fRF0gPSBLRVlfRCwgICAgICAgICAgICAgICAgW0tFWV9TWU1fZF0gPSBLRVlfRCwKKwlbS0VZX1NZTV9FXSA9IEtFWV9FLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9lXSA9IEtFWV9FLAorCVtLRVlfU1lNX0ZdID0gS0VZX0YsICAgICAgICAgICAgICAgIFtLRVlfU1lNX2ZdID0gS0VZX0YsCisJW0tFWV9TWU1fR10gPSBLRVlfRywgICAgICAgICAgICAgICAgW0tFWV9TWU1fZ10gPSBLRVlfRywKKwlbS0VZX1NZTV9IXSA9IEtFWV9ILCAgICAgICAgICAgICAgICBbS0VZX1NZTV9oXSA9IEtFWV9ILAorCVtLRVlfU1lNX0ldID0gS0VZX0ksICAgICAgICAgICAgICAgIFtLRVlfU1lNX2ldID0gS0VZX0ksCisJW0tFWV9TWU1fSl0gPSBLRVlfSiwgICAgICAgICAgICAgICAgW0tFWV9TWU1fal0gPSBLRVlfSiwKKwlbS0VZX1NZTV9LXSA9IEtFWV9LLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9rXSA9IEtFWV9LLAorCVtLRVlfU1lNX0xdID0gS0VZX0wsICAgICAgICAgICAgICAgIFtLRVlfU1lNX2xdID0gS0VZX0wsCisJW0tFWV9TWU1fTV0gPSBLRVlfTSwgICAgICAgICAgICAgICAgW0tFWV9TWU1fbV0gPSBLRVlfTSwKKwlbS0VZX1NZTV9OXSA9IEtFWV9OLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9uXSA9IEtFWV9OLAorCVtLRVlfU1lNX09dID0gS0VZX08sICAgICAgICAgICAgICAgIFtLRVlfU1lNX29dID0gS0VZX08sCisJW0tFWV9TWU1fUF0gPSBLRVlfUCwgICAgICAgICAgICAgICAgW0tFWV9TWU1fcF0gPSBLRVlfUCwKKwlbS0VZX1NZTV9RXSA9IEtFWV9RLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9xXSA9IEtFWV9RLAorCVtLRVlfU1lNX1JdID0gS0VZX1IsICAgICAgICAgICAgICAgIFtLRVlfU1lNX3JdID0gS0VZX1IsCisJW0tFWV9TWU1fU10gPSBLRVlfUywgICAgICAgICAgICAgICAgW0tFWV9TWU1fc10gPSBLRVlfUywKKwlbS0VZX1NZTV9UXSA9IEtFWV9ULCAgICAgICAgICAgICAgICBbS0VZX1NZTV90XSA9IEtFWV9ULAorCVtLRVlfU1lNX1VdID0gS0VZX1UsICAgICAgICAgICAgICAgIFtLRVlfU1lNX3VdID0gS0VZX1UsCisJW0tFWV9TWU1fVl0gPSBLRVlfViwgICAgICAgICAgICAgICAgW0tFWV9TWU1fdl0gPSBLRVlfViwKKwlbS0VZX1NZTV9XXSA9IEtFWV9XLCAgICAgICAgICAgICAgICBbS0VZX1NZTV93XSA9IEtFWV9XLAorCVtLRVlfU1lNX1hdID0gS0VZX1gsICAgICAgICAgICAgICAgIFtLRVlfU1lNX3hdID0gS0VZX1gsCisJW0tFWV9TWU1fWV0gPSBLRVlfWSwgICAgICAgICAgICAgICAgW0tFWV9TWU1feV0gPSBLRVlfWSwKKwlbS0VZX1NZTV9aXSA9IEtFWV9aLCAgICAgICAgICAgICAgICBbS0VZX1NZTV96XSA9IEtFWV9aLAorfTsKKworc3RhdGljIGNoYXIgcmVtb3RlX21vdXNlX25hbWVbXSA9ICJpYm1hc20gUlNBIEkgcmVtb3RlIG1vdXNlIjsKK3N0YXRpYyBjaGFyIHJlbW90ZV9rZXliZF9uYW1lW10gPSAiaWJtYXNtIFJTQSBJIHJlbW90ZSBrZXlib2FyZCI7CisKK3N0YXRpYyB2b2lkIHByaW50X2lucHV0KHN0cnVjdCByZW1vdGVfaW5wdXQgKmlucHV0KQogewotCXN0cnVjdCByZW1vdGVfcXVldWUgKnEgPSAmc3AtPnJlbW90ZV9xdWV1ZTsKLQotCWRpc2FibGVfbW91c2VfaW50ZXJydXB0cyhzcCk7Ci0KLQlxLT5vcGVuID0gMDsKLQlxLT5zaXplID0gMDsKLQotCXEtPnN0YXJ0ID0ga21hbGxvYyhEUklWRVJfUkVNT1RFX1FVRVVFX1NJWkUgKiBzaXplb2Yoc3RydWN0IHJlbW90ZV9ldmVudCksIEdGUF9LRVJORUwpOwotICAgICAgICBpZiAocS0+c3RhcnQgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLQotCXEtPmVuZCA9IHEtPnN0YXJ0ICsgRFJJVkVSX1JFTU9URV9RVUVVRV9TSVpFOwotCXEtPnJlYWRlciA9IHEtPnN0YXJ0OwotCXEtPndyaXRlciA9IHEtPnN0YXJ0OwotCXEtPnNpemUgPSBEUklWRVJfUkVNT1RFX1FVRVVFX1NJWkU7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcS0+d2FpdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBpYm1hc21fZnJlZV9yZW1vdGVfcXVldWUoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCkKLXsKLQlrZnJlZShzcC0+cmVtb3RlX3F1ZXVlLnN0YXJ0KTsKLX0KLQotdm9pZCBpYm1hc21fYWR2YW5jZV9yZWFkZXIoc3RydWN0IHJlbW90ZV9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IG4pCi17Ci0JcS0+cmVhZGVyICs9IG47Ci0JaWYgKHEtPnJlYWRlciA+PSBxLT5lbmQpCi0JCXEtPnJlYWRlciAtPSBxLT5zaXplOwotfQotCi1zaXplX3QgaWJtYXNtX2V2ZW50c19hdmFpbGFibGUoc3RydWN0IHJlbW90ZV9xdWV1ZSAqcSkKLXsKLQlzc2l6ZV90IGRpZmYgPSBxLT53cml0ZXIgLSBxLT5yZWFkZXI7Ci0gCi0JcmV0dXJuIChkaWZmID49IDApID8gZGlmZiA6IHEtPmVuZCAtIHEtPnJlYWRlcjsJCi19Ci0JCi0KLXN0YXRpYyBpbnQgc3BhY2VfZnJlZShzdHJ1Y3QgcmVtb3RlX3F1ZXVlICpxKQotewotCWlmIChxLT5yZWFkZXIgPT0gcS0+d3JpdGVyKQotCQlyZXR1cm4gcS0+c2l6ZSAtIDE7Ci0KLQlyZXR1cm4gKCAocS0+cmVhZGVyICsgcS0+c2l6ZSAtIHEtPndyaXRlcikgJSBxLT5zaXplICkgLSAxOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfbW91c2VfZXZlbnQoc3RydWN0IHJlbW90ZV9pbnB1dCAqaW5wdXQsIHN0cnVjdCBtb3VzZV9ldmVudCAqbW91c2UpCi17Ci0Jc3RhdGljIGNoYXIgbGFzdF9idXR0b25zID0gMDsKLQotCW1vdXNlLT54ID0gaW5wdXQtPmRhdGEubW91c2UueDsKLQltb3VzZS0+eSA9IGlucHV0LT5kYXRhLm1vdXNlLnk7Ci0KLQlpZiAoaW5wdXQtPm1vdXNlX2J1dHRvbnMgPT0gUkVNT1RFX01PVVNFX0RPVUJMRV9DTElDSykgewotCQltb3VzZS0+YnV0dG9ucyA9IFJFTU9URV9NT1VTRV9ET1VCTEVfQ0xJQ0s7Ci0JCWxhc3RfYnV0dG9ucyA9IDA7Ci0JCXJldHVybjsKKwlpZiAoaW5wdXQtPnR5cGUgPT0gSU5QVVRfVFlQRV9NT1VTRSkgeworCQl1bnNpZ25lZCBjaGFyIGJ1dHRvbnMgPSBpbnB1dC0+bW91c2VfYnV0dG9uczsKKwkJZGJnKCJyZW1vdGUgbW91c2UgbW92ZW1lbnQ6ICh4LHkpPSglZCwlZCklcyVzJXMlc1xuIiwKKwkJCWlucHV0LT5kYXRhLm1vdXNlLngsIGlucHV0LT5kYXRhLm1vdXNlLnksCisJCQkoYnV0dG9ucyk/IiAtLSBidXR0b25zOiI6IiIsCisJCQkoYnV0dG9ucyAmIFJFTU9URV9CVVRUT05fTEVGVCk/ImxlZnQgIjoiIiwKKwkJCShidXR0b25zICYgUkVNT1RFX0JVVFRPTl9NSURETEUpPyJtaWRkbGUgIjoiIiwKKwkJCShidXR0b25zICYgUkVNT1RFX0JVVFRPTl9SSUdIVCk/InJpZ2h0IjoiIgorCQkgICAgICApOworCX0gZWxzZSB7CisJCWRiZygicmVtb3RlIGtleXByZXNzIChjb2RlLCBmbGFnLCBkb3duKToiCisJCQkgICAiJWQgKDB4JXgpIFsweCV4XSBbMHgleF1cbiIsCisJCQkJaW5wdXQtPmRhdGEua2V5Ym9hcmQua2V5X2NvZGUsCisJCQkJaW5wdXQtPmRhdGEua2V5Ym9hcmQua2V5X2NvZGUsCisJCQkJaW5wdXQtPmRhdGEua2V5Ym9hcmQua2V5X2ZsYWcsCisJCQkJaW5wdXQtPmRhdGEua2V5Ym9hcmQua2V5X2Rvd24KKwkJICAgICAgKTsKIAl9Ci0JbW91c2UtPnRyYW5zaXRpb25zID0gbGFzdF9idXR0b25zIF4gaW5wdXQtPm1vdXNlX2J1dHRvbnM7Ci0JbW91c2UtPmJ1dHRvbnMgPSBpbnB1dC0+bW91c2VfYnV0dG9uczsKLQotCWxhc3RfYnV0dG9ucyA9IGlucHV0LT5tb3VzZV9idXR0b25zOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfa2V5Ym9hcmRfZXZlbnQoc3RydWN0IHJlbW90ZV9pbnB1dCAqaW5wdXQsIHN0cnVjdCBrZXlib2FyZF9ldmVudCAqa2V5Ym9hcmQpCitzdGF0aWMgdm9pZCBzZW5kX21vdXNlX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXN0cnVjdCByZW1vdGVfaW5wdXQgKmlucHV0KQogewotCWtleWJvYXJkLT5rZXlfY29kZSA9IGlucHV0LT5kYXRhLmtleWJvYXJkLmtleV9jb2RlOwotCWtleWJvYXJkLT5rZXlfZG93biA9IGlucHV0LT5kYXRhLmtleWJvYXJkLmtleV9kb3duOworCXVuc2lnbmVkIGNoYXIgYnV0dG9ucyA9IGlucHV0LT5tb3VzZV9idXR0b25zOworCisJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgaW5wdXQtPmRhdGEubW91c2UueCk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBpbnB1dC0+ZGF0YS5tb3VzZS55KTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIGJ1dHRvbnMgJiBSRU1PVEVfQlVUVE9OX0xFRlQpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBidXR0b25zICYgUkVNT1RFX0JVVFRPTl9NSURETEUpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsIGJ1dHRvbnMgJiBSRU1PVEVfQlVUVE9OX1JJR0hUKTsKKwlpbnB1dF9zeW5jKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgYWRkX3RvX2RyaXZlcl9xdWV1ZShzdHJ1Y3QgcmVtb3RlX3F1ZXVlICpxLCBzdHJ1Y3QgcmVtb3RlX2lucHV0ICppbnB1dCkKK3N0YXRpYyB2b2lkIHNlbmRfa2V5Ym9hcmRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJc3RydWN0IHJlbW90ZV9pbnB1dCAqaW5wdXQpCiB7Ci0Jc3RydWN0IHJlbW90ZV9ldmVudCAqZXZlbnQgPSBxLT53cml0ZXI7CisJdW5zaWduZWQgaW50IGtleTsKKwl1bnNpZ25lZCBzaG9ydCBjb2RlID0gaW5wdXQtPmRhdGEua2V5Ym9hcmQua2V5X2NvZGU7CiAKLQlpZiAoc3BhY2VfZnJlZShxKSA8IDEpIHsKLQkJcmV0dXJuIDE7Ci0JfQotCi0Jc3dpdGNoKGlucHV0LT50eXBlKSB7Ci0JY2FzZSAoSU5QVVRfVFlQRV9NT1VTRSk6Ci0JCWV2ZW50LT50eXBlID0gSU5QVVRfVFlQRV9NT1VTRTsKLQkJc2V0X21vdXNlX2V2ZW50KGlucHV0LCAmZXZlbnQtPmRhdGEubW91c2UpOwotCQlicmVhazsKLQljYXNlIChJTlBVVF9UWVBFX0tFWUJPQVJEKToKLQkJZXZlbnQtPnR5cGUgPSBJTlBVVF9UWVBFX0tFWUJPQVJEOwotCQlzZXRfa2V5Ym9hcmRfZXZlbnQoaW5wdXQsICZldmVudC0+ZGF0YS5rZXlib2FyZCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLQlldmVudC0+dHlwZSA9IGlucHV0LT50eXBlOwotCi0JcS0+d3JpdGVyKys7Ci0JaWYgKHEtPndyaXRlciA9PSBxLT5lbmQpCi0JCXEtPndyaXRlciA9IHEtPnN0YXJ0OwotCi0JcmV0dXJuIDA7CisJaWYgKGNvZGUgJiAweGZmMDApCisJCWtleSA9IHhsYXRlX2hpZ2hbY29kZSAmIDB4ZmZdOworCWVsc2UKKwkJa2V5ID0geGxhdGVbY29kZV07CisJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXksIChpbnB1dC0+ZGF0YS5rZXlib2FyZC5rZXlfZG93bikgPyAxIDogMCk7CisJaW5wdXRfc3luYyhkZXYpOwogfQotCQogCi12b2lkIGlibWFzbV9oYW5kbGVfbW91c2VfaW50ZXJydXB0KHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3ApCit2b2lkIGlibWFzbV9oYW5kbGVfbW91c2VfaW50ZXJydXB0KHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3AsCisJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgcmVhZGVyOwogCXVuc2lnbmVkIGxvbmcgd3JpdGVyOwpAQCAtMTQxLDEyICsxOTgsNzUgQEAKIAl3cml0ZXIgPSBnZXRfcXVldWVfd3JpdGVyKHNwKTsKIAogCXdoaWxlIChyZWFkZXIgIT0gd3JpdGVyKSB7Ci0JCW1lbWNweSgmaW5wdXQsICh2b2lkICopZ2V0X3F1ZXVlX2VudHJ5KHNwLCByZWFkZXIpLCBzaXplb2Yoc3RydWN0IHJlbW90ZV9pbnB1dCkpOworCQltZW1jcHlfZnJvbWlvKCZpbnB1dCwgZ2V0X3F1ZXVlX2VudHJ5KHNwLCByZWFkZXIpLAorCQkJCXNpemVvZihzdHJ1Y3QgcmVtb3RlX2lucHV0KSk7CiAKLQkJaWYgKGFkZF90b19kcml2ZXJfcXVldWUoJnNwLT5yZW1vdGVfcXVldWUsICZpbnB1dCkpCisJCXByaW50X2lucHV0KCZpbnB1dCk7CisJCWlmIChpbnB1dC50eXBlID09IElOUFVUX1RZUEVfTU9VU0UpIHsKKwkJCXNlbmRfbW91c2VfZXZlbnQoJnNwLT5yZW1vdGUtPm1vdXNlX2RldiwgcmVncywgJmlucHV0KTsKKwkJfSBlbHNlIGlmIChpbnB1dC50eXBlID09IElOUFVUX1RZUEVfS0VZQk9BUkQpIHsKKwkJCXNlbmRfa2V5Ym9hcmRfZXZlbnQoJnNwLT5yZW1vdGUtPmtleWJkX2RldiwgcmVncywgJmlucHV0KTsKKwkJfSBlbHNlCiAJCQlicmVhazsKIAogCQlyZWFkZXIgPSBhZHZhbmNlX3F1ZXVlX3JlYWRlcihzcCwgcmVhZGVyKTsKKwkJd3JpdGVyID0gZ2V0X3F1ZXVlX3dyaXRlcihzcCk7CiAJfQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc3AtPnJlbW90ZV9xdWV1ZS53YWl0KTsKIH0KKworaW50IGlibWFzbV9pbml0X3JlbW90ZV9pbnB1dF9kZXYoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCkKK3sKKwkvKiBzZXQgdXAgdGhlIG1vdXNlIGlucHV0IGRldmljZSAqLworCXN0cnVjdCBpYm1hc21fcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHNwLT5kZXYpOworCWludCBpOworCisJc3AtPnJlbW90ZSA9IHJlbW90ZSA9IGttYWxsb2Moc2l6ZW9mKCpyZW1vdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlbW90ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQocmVtb3RlLCAwLCBzaXplb2YoKnJlbW90ZSkpOworCisJcmVtb3RlLT5tb3VzZV9kZXYucHJpdmF0ZSA9IHJlbW90ZTsKKwlpbml0X2lucHV0X2RldigmcmVtb3RlLT5tb3VzZV9kZXYpOworCXJlbW90ZS0+bW91c2VfZGV2LmlkLnZlbmRvciA9IHBkZXYtPnZlbmRvcjsKKwlyZW1vdGUtPm1vdXNlX2Rldi5pZC5wcm9kdWN0ID0gcGRldi0+ZGV2aWNlOworCXJlbW90ZS0+bW91c2VfZGV2LmV2Yml0WzBdICA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJcmVtb3RlLT5tb3VzZV9kZXYua2V5Yml0W0xPTkcoQlROX01PVVNFKV0gPSBCSVQoQlROX0xFRlQpIHwKKwkJQklUKEJUTl9SSUdIVCkgfCBCSVQoQlROX01JRERMRSk7CisJc2V0X2JpdChCVE5fVE9VQ0gsIHJlbW90ZS0+bW91c2VfZGV2LmtleWJpdCk7CisJcmVtb3RlLT5tb3VzZV9kZXYubmFtZSA9IHJlbW90ZV9tb3VzZV9uYW1lOworCWlucHV0X3NldF9hYnNfcGFyYW1zKCZyZW1vdGUtPm1vdXNlX2RldiwgQUJTX1gsIDAsIHhtYXgsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKCZyZW1vdGUtPm1vdXNlX2RldiwgQUJTX1ksIDAsIHltYXgsIDAsIDApOworCisJcmVtb3RlLT5rZXliZF9kZXYucHJpdmF0ZSA9IHJlbW90ZTsKKwlpbml0X2lucHV0X2RldigmcmVtb3RlLT5rZXliZF9kZXYpOworCXJlbW90ZS0+a2V5YmRfZGV2LmlkLnZlbmRvciA9IHBkZXYtPnZlbmRvcjsKKwlyZW1vdGUtPmtleWJkX2Rldi5pZC5wcm9kdWN0ID0gcGRldi0+ZGV2aWNlOworCXJlbW90ZS0+a2V5YmRfZGV2LmV2Yml0WzBdICA9IEJJVChFVl9LRVkpOworCXJlbW90ZS0+a2V5YmRfZGV2Lm5hbWUgPSByZW1vdGVfa2V5YmRfbmFtZTsKKworCWZvciAoaT0wOyBpPFhMQVRFX1NJWkU7IGkrKykgeworCQlpZiAoeGxhdGVfaGlnaFtpXSkKKwkJCXNldF9iaXQoeGxhdGVfaGlnaFtpXSwgcmVtb3RlLT5rZXliZF9kZXYua2V5Yml0KTsKKwkJaWYgKHhsYXRlW2ldKQorCQkJc2V0X2JpdCh4bGF0ZVtpXSwgcmVtb3RlLT5rZXliZF9kZXYua2V5Yml0KTsKKwl9CisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJnJlbW90ZS0+bW91c2VfZGV2KTsKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJnJlbW90ZS0+a2V5YmRfZGV2KTsKKwllbmFibGVfbW91c2VfaW50ZXJydXB0cyhzcCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJpYm1hc20gcmVtb3RlIHJlc3BvbmRpbmcgdG8gZXZlbnRzIG9uIFJTQSBjYXJkICVkXG4iLCBzcC0+bnVtYmVyKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGlibWFzbV9mcmVlX3JlbW90ZV9pbnB1dF9kZXYoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCkKK3sKKwlkaXNhYmxlX21vdXNlX2ludGVycnVwdHMoc3ApOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZzcC0+cmVtb3RlLT5rZXliZF9kZXYpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZzcC0+cmVtb3RlLT5tb3VzZV9kZXYpOworCWtmcmVlKHNwLT5yZW1vdGUpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL3JlbW90ZS5oIGIvZHJpdmVycy9taXNjL2libWFzbS9yZW1vdGUuaAppbmRleCBhOGViMTlmLi5iNzA3NmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL3JlbW90ZS5oCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmgKQEAgLTUxLDExICs1MSwxMyBAQAogCiAKIC8qIG1vdXNlIGJ1dHRvbiBzdGF0ZXMgcmVjZWl2ZWQgZnJvbSBTUCAqLwotI2RlZmluZSBSRU1PVEVfTU9VU0VfRE9VQkxFX0NMSUNLCTB4RjAKLSNkZWZpbmUgUkVNT1RFX01PVVNFX0JVVFRPTl9MRUZUCTB4MDEKLSNkZWZpbmUgUkVNT1RFX01PVVNFX0JVVFRPTl9NSURETEUJMHgwMgotI2RlZmluZSBSRU1PVEVfTU9VU0VfQlVUVE9OX1JJR0hUCTB4MDQKKyNkZWZpbmUgUkVNT1RFX0RPVUJMRV9DTElDSwkweEYwCisjZGVmaW5lIFJFTU9URV9CVVRUT05fTEVGVAkweDAxCisjZGVmaW5lIFJFTU9URV9CVVRUT05fTUlERExFCTB4MDIKKyNkZWZpbmUgUkVNT1RFX0JVVFRPTl9SSUdIVAkweDA0CiAKKy8qIHNpemUgb2Yga2V5c3ltL2tleWNvZGUgdHJhbnNsYXRpb24gbWF0cmljaWVzICovCisjZGVmaW5lIFhMQVRFX1NJWkUgMjU2CiAKIHN0cnVjdCBtb3VzZV9pbnB1dCB7CiAJdW5zaWduZWQgc2hvcnQJeTsKQEAgLTgzLDExICs4NSwxMyBAQAogCXVuc2lnbmVkIGNoYXIJcGFkMzsKIH07CiAKLSNkZWZpbmUgbW91c2VfYWRkcihzcCkgCQlzcC0+YmFzZV9hZGRyZXNzICsgQ09ORE9SX01PVVNFX0RBVEEKLSNkZWZpbmUgZGlzcGxheV93aWR0aChzcCkJbW91c2VfYWRkcihzcCkgKyBDT05ET1JfSU5QVVRfRElTUExBWV9SRVNYCi0jZGVmaW5lIGRpc3BsYXlfaGVpZ2h0KHNwKQltb3VzZV9hZGRyKHNwKSArIENPTkRPUl9JTlBVVF9ESVNQTEFZX1JFU1kKLSNkZWZpbmUgZGlzcGxheV9kZXB0aChzcCkJbW91c2VfYWRkcihzcCkgKyBDT05ET1JfSU5QVVRfRElTUExBWV9CSVRTCi0jZGVmaW5lIHZuY19zdGF0dXMoc3ApCQltb3VzZV9hZGRyKHNwKSArIENPTkRPUl9PVVRQVVRfVk5DX1NUQVRVUworI2RlZmluZSBtb3VzZV9hZGRyKHNwKSAJCShzcC0+YmFzZV9hZGRyZXNzICsgQ09ORE9SX01PVVNFX0RBVEEpCisjZGVmaW5lIGRpc3BsYXlfd2lkdGgoc3ApCShtb3VzZV9hZGRyKHNwKSArIENPTkRPUl9JTlBVVF9ESVNQTEFZX1JFU1gpCisjZGVmaW5lIGRpc3BsYXlfaGVpZ2h0KHNwKQkobW91c2VfYWRkcihzcCkgKyBDT05ET1JfSU5QVVRfRElTUExBWV9SRVNZKQorI2RlZmluZSBkaXNwbGF5X2RlcHRoKHNwKQkobW91c2VfYWRkcihzcCkgKyBDT05ET1JfSU5QVVRfRElTUExBWV9CSVRTKQorI2RlZmluZSBkZXNrdG9wX2luZm8oc3ApCShtb3VzZV9hZGRyKHNwKSArIENPTkRPUl9JTlBVVF9ERVNLVE9QX0lORk8pCisjZGVmaW5lIHZuY19zdGF0dXMoc3ApCQkobW91c2VfYWRkcihzcCkgKyBDT05ET1JfT1VUUFVUX1ZOQ19TVEFUVVMpCisjZGVmaW5lIGlzcl9jb250cm9sKHNwKQkJKG1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX01PVVNFX0lTUl9DT05UUk9MKQogCiAjZGVmaW5lIG1vdXNlX2ludGVycnVwdF9wZW5kaW5nKHNwKSAJcmVhZGwobW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfSVNSX1NUQVRVUykKICNkZWZpbmUgY2xlYXJfbW91c2VfaW50ZXJydXB0KHNwKQl3cml0ZWwoMCwgbW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfSVNSX1NUQVRVUykKQEAgLTEwMSwxMCArMTA1LDEwIEBACiAjZGVmaW5lIGdldF9xdWV1ZV9yZWFkZXIoc3ApCXJlYWRsKG1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX01PVVNFX1FfUkVBREVSKQogI2RlZmluZSBzZXRfcXVldWVfcmVhZGVyKHNwLCByZWFkZXIpCXdyaXRlbChyZWFkZXIsIG1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX01PVVNFX1FfUkVBREVSKQogCi0jZGVmaW5lIHF1ZXVlX2JlZ2luCW1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX01PVVNFX1FfQkVHSU4KKyNkZWZpbmUgcXVldWVfYmVnaW4JKG1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX01PVVNFX1FfQkVHSU4pCiAKICNkZWZpbmUgZ2V0X3F1ZXVlX2VudHJ5KHNwLCByZWFkX2luZGV4KSBcCi0JcXVldWVfYmVnaW4gKyByZWFkX2luZGV4ICogc2l6ZW9mKHN0cnVjdCByZW1vdGVfaW5wdXQpCisJKCh2b2lkKikocXVldWVfYmVnaW4gKyByZWFkX2luZGV4ICogc2l6ZW9mKHN0cnVjdCByZW1vdGVfaW5wdXQpKSkKIAogc3RhdGljIGlubGluZSBpbnQgYWR2YW5jZV9xdWV1ZV9yZWFkZXIoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCwgdW5zaWduZWQgbG9uZyByZWFkZXIpCiB7CkBAIC0xMTYsNCArMTIwLDE1MSBAQAogCXJldHVybiByZWFkZXI7CiB9CiAKKyNkZWZpbmUgTk9fS0VZQ09ERSAwCisjZGVmaW5lIEtFWV9TWU1fQktfU1BDICAgMHhGRjA4CisjZGVmaW5lIEtFWV9TWU1fVEFCICAgICAgMHhGRjA5CisjZGVmaW5lIEtFWV9TWU1fRU5URVIgICAgMHhGRjBECisjZGVmaW5lIEtFWV9TWU1fU0NSX0xPQ0sgMHhGRjE0CisjZGVmaW5lIEtFWV9TWU1fRVNDQVBFICAgMHhGRjFCCisjZGVmaW5lIEtFWV9TWU1fSE9NRSAgICAgMHhGRjUwCisjZGVmaW5lIEtFWV9TWU1fTEFSUk9XICAgMHhGRjUxCisjZGVmaW5lIEtFWV9TWU1fVUFSUk9XICAgMHhGRjUyCisjZGVmaW5lIEtFWV9TWU1fUkFSUk9XICAgMHhGRjUzCisjZGVmaW5lIEtFWV9TWU1fREFSUk9XICAgMHhGRjU0CisjZGVmaW5lIEtFWV9TWU1fUEFHRVVQICAgMHhGRjU1CisjZGVmaW5lIEtFWV9TWU1fUEFHRURPV04gMHhGRjU2CisjZGVmaW5lIEtFWV9TWU1fRU5EICAgICAgMHhGRjU3CisjZGVmaW5lIEtFWV9TWU1fSU5TRVJUICAgMHhGRjYzCisjZGVmaW5lIEtFWV9TWU1fTlVNX0xPQ0sgMHhGRjdGCisjZGVmaW5lIEtFWV9TWU1fS1BTVEFSICAgMHhGRkFBCisjZGVmaW5lIEtFWV9TWU1fS1BQTFVTICAgMHhGRkFCCisjZGVmaW5lIEtFWV9TWU1fS1BNSU5VUyAgMHhGRkFECisjZGVmaW5lIEtFWV9TWU1fS1BET1QgICAgMHhGRkFFCisjZGVmaW5lIEtFWV9TWU1fS1BTTEFTSCAgMHhGRkFGCisjZGVmaW5lIEtFWV9TWU1fS1BSSUdIVCAgMHhGRjk2CisjZGVmaW5lIEtFWV9TWU1fS1BVUCAgICAgMHhGRjk3CisjZGVmaW5lIEtFWV9TWU1fS1BMRUZUICAgMHhGRjk4CisjZGVmaW5lIEtFWV9TWU1fS1BET1dOICAgMHhGRjk5CisjZGVmaW5lIEtFWV9TWU1fS1AwICAgICAgMHhGRkIwCisjZGVmaW5lIEtFWV9TWU1fS1AxICAgICAgMHhGRkIxCisjZGVmaW5lIEtFWV9TWU1fS1AyICAgICAgMHhGRkIyCisjZGVmaW5lIEtFWV9TWU1fS1AzICAgICAgMHhGRkIzCisjZGVmaW5lIEtFWV9TWU1fS1A0ICAgICAgMHhGRkI0CisjZGVmaW5lIEtFWV9TWU1fS1A1ICAgICAgMHhGRkI1CisjZGVmaW5lIEtFWV9TWU1fS1A2ICAgICAgMHhGRkI2CisjZGVmaW5lIEtFWV9TWU1fS1A3ICAgICAgMHhGRkI3CisjZGVmaW5lIEtFWV9TWU1fS1A4ICAgICAgMHhGRkI4CisjZGVmaW5lIEtFWV9TWU1fS1A5ICAgICAgMHhGRkI5CisjZGVmaW5lIEtFWV9TWU1fRjEgICAgICAgMHhGRkJFICAgICAgLy8gMUIgNUIgNUIgNDEKKyNkZWZpbmUgS0VZX1NZTV9GMiAgICAgICAweEZGQkYgICAgICAvLyAxQiA1QiA1QiA0MgorI2RlZmluZSBLRVlfU1lNX0YzICAgICAgIDB4RkZDMCAgICAgIC8vIDFCIDVCIDVCIDQzCisjZGVmaW5lIEtFWV9TWU1fRjQgICAgICAgMHhGRkMxICAgICAgLy8gMUIgNUIgNUIgNDQKKyNkZWZpbmUgS0VZX1NZTV9GNSAgICAgICAweEZGQzIgICAgICAvLyAxQiA1QiA1QiA0NQorI2RlZmluZSBLRVlfU1lNX0Y2ICAgICAgIDB4RkZDMyAgICAgIC8vIDFCIDVCIDMxIDM3IDdFCisjZGVmaW5lIEtFWV9TWU1fRjcgICAgICAgMHhGRkM0ICAgICAgLy8gMUIgNUIgMzEgMzggN0UKKyNkZWZpbmUgS0VZX1NZTV9GOCAgICAgICAweEZGQzUgICAgICAvLyAxQiA1QiAzMSAzOSA3RQorI2RlZmluZSBLRVlfU1lNX0Y5ICAgICAgIDB4RkZDNiAgICAgIC8vIDFCIDVCIDMyIDMwIDdFCisjZGVmaW5lIEtFWV9TWU1fRjEwICAgICAgMHhGRkM3ICAgICAgLy8gMUIgNUIgMzIgMzEgN0UKKyNkZWZpbmUgS0VZX1NZTV9GMTEgICAgICAweEZGQzggICAgICAvLyAxQiA1QiAzMiAzMyA3RQorI2RlZmluZSBLRVlfU1lNX0YxMiAgICAgIDB4RkZDOSAgICAgIC8vIDFCIDVCIDMyIDM0IDdFCisjZGVmaW5lIEtFWV9TWU1fU0hJRlQgICAgMHhGRkUxCisjZGVmaW5lIEtFWV9TWU1fQ1RSTCAgICAgMHhGRkUzCisjZGVmaW5lIEtFWV9TWU1fQUxUICAgICAgMHhGRkU5CisjZGVmaW5lIEtFWV9TWU1fQ0FQX0xPQ0sgMHhGRkU1CisjZGVmaW5lIEtFWV9TWU1fREVMRVRFICAgMHhGRkZGCisjZGVmaW5lIEtFWV9TWU1fVElMREUgICAgMHg2MAorI2RlZmluZSBLRVlfU1lNX0JLVElDICAgIDB4N0UKKyNkZWZpbmUgS0VZX1NZTV9PTkUgICAgICAweDMxCisjZGVmaW5lIEtFWV9TWU1fQkFORyAgICAgMHgyMQorI2RlZmluZSBLRVlfU1lNX1RXTyAgICAgIDB4MzIKKyNkZWZpbmUgS0VZX1NZTV9BVCAgICAgICAweDQwCisjZGVmaW5lIEtFWV9TWU1fVEhSRUUgICAgMHgzMworI2RlZmluZSBLRVlfU1lNX1BPVU5EICAgIDB4MjMKKyNkZWZpbmUgS0VZX1NZTV9GT1VSICAgICAweDM0CisjZGVmaW5lIEtFWV9TWU1fRE9MTEFSICAgMHgyNAorI2RlZmluZSBLRVlfU1lNX0ZJVkUgICAgIDB4MzUKKyNkZWZpbmUgS0VZX1NZTV9QRVJDRU5UICAweDI1CisjZGVmaW5lIEtFWV9TWU1fU0lYICAgICAgMHgzNgorI2RlZmluZSBLRVlfU1lNX0NBUkFUICAgIDB4NUUKKyNkZWZpbmUgS0VZX1NZTV9TRVZFTiAgICAweDM3CisjZGVmaW5lIEtFWV9TWU1fQU1QRVIgICAgMHgyNgorI2RlZmluZSBLRVlfU1lNX0VJR0hUICAgIDB4MzgKKyNkZWZpbmUgS0VZX1NZTV9TVEFSICAgICAweDJBCisjZGVmaW5lIEtFWV9TWU1fTklORSAgICAgMHgzOQorI2RlZmluZSBLRVlfU1lNX0xQQVJFTiAgIDB4MjgKKyNkZWZpbmUgS0VZX1NZTV9aRVJPICAgICAweDMwCisjZGVmaW5lIEtFWV9TWU1fUlBBUkVOICAgMHgyOQorI2RlZmluZSBLRVlfU1lNX01JTlVTICAgIDB4MkQKKyNkZWZpbmUgS0VZX1NZTV9VU0NPUkUgICAweDVGCisjZGVmaW5lIEtFWV9TWU1fRVFVQUwgICAgMHgyQgorI2RlZmluZSBLRVlfU1lNX1BMVVMgICAgIDB4M0QKKyNkZWZpbmUgS0VZX1NZTV9MQlJLVCAgICAweDVCCisjZGVmaW5lIEtFWV9TWU1fTENVUkxZICAgMHg3QgorI2RlZmluZSBLRVlfU1lNX1JCUktUICAgIDB4NUQKKyNkZWZpbmUgS0VZX1NZTV9SQ1VSTFkgICAweDdECisjZGVmaW5lIEtFWV9TWU1fU0xBU0ggICAgMHg1QworI2RlZmluZSBLRVlfU1lNX1BJUEUgICAgIDB4N0MKKyNkZWZpbmUgS0VZX1NZTV9USUMgICAgICAweDI3CisjZGVmaW5lIEtFWV9TWU1fUVVPVEUgICAgMHgyMgorI2RlZmluZSBLRVlfU1lNX1NFTUlDICAgIDB4M0IKKyNkZWZpbmUgS0VZX1NZTV9DT0xPTiAgICAweDNBCisjZGVmaW5lIEtFWV9TWU1fQ09NTUEgICAgMHgyQworI2RlZmluZSBLRVlfU1lNX0xUICAgICAgIDB4M0MKKyNkZWZpbmUgS0VZX1NZTV9QRVJJT0QgICAweDJFCisjZGVmaW5lIEtFWV9TWU1fR1QgICAgICAgMHgzRQorI2RlZmluZSBLRVlfU1lNX0JTTEFTSCAgIDB4MkYKKyNkZWZpbmUgS0VZX1NZTV9RTUFSSyAgICAweDNGCisjZGVmaW5lIEtFWV9TWU1fQSAgICAgICAgMHg0MQorI2RlZmluZSBLRVlfU1lNX0IgICAgICAgIDB4NDIKKyNkZWZpbmUgS0VZX1NZTV9DICAgICAgICAweDQzCisjZGVmaW5lIEtFWV9TWU1fRCAgICAgICAgMHg0NAorI2RlZmluZSBLRVlfU1lNX0UgICAgICAgIDB4NDUKKyNkZWZpbmUgS0VZX1NZTV9GICAgICAgICAweDQ2CisjZGVmaW5lIEtFWV9TWU1fRyAgICAgICAgMHg0NworI2RlZmluZSBLRVlfU1lNX0ggICAgICAgIDB4NDgKKyNkZWZpbmUgS0VZX1NZTV9JICAgICAgICAweDQ5CisjZGVmaW5lIEtFWV9TWU1fSiAgICAgICAgMHg0QQorI2RlZmluZSBLRVlfU1lNX0sgICAgICAgIDB4NEIKKyNkZWZpbmUgS0VZX1NZTV9MICAgICAgICAweDRDCisjZGVmaW5lIEtFWV9TWU1fTSAgICAgICAgMHg0RAorI2RlZmluZSBLRVlfU1lNX04gICAgICAgIDB4NEUKKyNkZWZpbmUgS0VZX1NZTV9PICAgICAgICAweDRGCisjZGVmaW5lIEtFWV9TWU1fUCAgICAgICAgMHg1MAorI2RlZmluZSBLRVlfU1lNX1EgICAgICAgIDB4NTEKKyNkZWZpbmUgS0VZX1NZTV9SICAgICAgICAweDUyCisjZGVmaW5lIEtFWV9TWU1fUyAgICAgICAgMHg1MworI2RlZmluZSBLRVlfU1lNX1QgICAgICAgIDB4NTQKKyNkZWZpbmUgS0VZX1NZTV9VICAgICAgICAweDU1CisjZGVmaW5lIEtFWV9TWU1fViAgICAgICAgMHg1NgorI2RlZmluZSBLRVlfU1lNX1cgICAgICAgIDB4NTcKKyNkZWZpbmUgS0VZX1NZTV9YICAgICAgICAweDU4CisjZGVmaW5lIEtFWV9TWU1fWSAgICAgICAgMHg1OQorI2RlZmluZSBLRVlfU1lNX1ogICAgICAgIDB4NUEKKyNkZWZpbmUgS0VZX1NZTV9hICAgICAgICAweDYxCisjZGVmaW5lIEtFWV9TWU1fYiAgICAgICAgMHg2MgorI2RlZmluZSBLRVlfU1lNX2MgICAgICAgIDB4NjMKKyNkZWZpbmUgS0VZX1NZTV9kICAgICAgICAweDY0CisjZGVmaW5lIEtFWV9TWU1fZSAgICAgICAgMHg2NQorI2RlZmluZSBLRVlfU1lNX2YgICAgICAgIDB4NjYKKyNkZWZpbmUgS0VZX1NZTV9nICAgICAgICAweDY3CisjZGVmaW5lIEtFWV9TWU1faCAgICAgICAgMHg2OAorI2RlZmluZSBLRVlfU1lNX2kgICAgICAgIDB4NjkKKyNkZWZpbmUgS0VZX1NZTV9qICAgICAgICAweDZBCisjZGVmaW5lIEtFWV9TWU1fayAgICAgICAgMHg2QgorI2RlZmluZSBLRVlfU1lNX2wgICAgICAgIDB4NkMKKyNkZWZpbmUgS0VZX1NZTV9tICAgICAgICAweDZECisjZGVmaW5lIEtFWV9TWU1fbiAgICAgICAgMHg2RQorI2RlZmluZSBLRVlfU1lNX28gICAgICAgIDB4NkYKKyNkZWZpbmUgS0VZX1NZTV9wICAgICAgICAweDcwCisjZGVmaW5lIEtFWV9TWU1fcSAgICAgICAgMHg3MQorI2RlZmluZSBLRVlfU1lNX3IgICAgICAgIDB4NzIKKyNkZWZpbmUgS0VZX1NZTV9zICAgICAgICAweDczCisjZGVmaW5lIEtFWV9TWU1fdCAgICAgICAgMHg3NAorI2RlZmluZSBLRVlfU1lNX3UgICAgICAgIDB4NzUKKyNkZWZpbmUgS0VZX1NZTV92ICAgICAgICAweDc2CisjZGVmaW5lIEtFWV9TWU1fdyAgICAgICAgMHg3NworI2RlZmluZSBLRVlfU1lNX3ggICAgICAgIDB4NzgKKyNkZWZpbmUgS0VZX1NZTV95ICAgICAgICAweDc5CisjZGVmaW5lIEtFWV9TWU1feiAgICAgICAgMHg3QQorI2RlZmluZSBLRVlfU1lNX1NQQUNFICAgIDB4MjAKICNlbmRpZiAvKiBfSUJNQVNNX1JFTU9URV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggYjVlMDc2MC4uODBlYzlhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC0yMjAyLDkgKzIyMDIsOCBAQAogCiAJaWYgKHZvcnRleF9kZWJ1ZyA+IDYpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgImJvb21lcmFuZ19zdGFydF94bWl0KClcbiIpOwotCQlpZiAodm9ydGV4X2RlYnVnID4gMykKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJ5aW5nIHRvIHNlbmQgYSBwYWNrZXQsIFR4IGluZGV4ICVkLlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIHZwLT5jdXJfdHgpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyeWluZyB0byBzZW5kIGEgcGFja2V0LCBUeCBpbmRleCAlZC5cbiIsCisJCQkgICBkZXYtPm5hbWUsIHZwLT5jdXJfdHgpOwogCX0KIAogCWlmICh2cC0+Y3VyX3R4IC0gdnAtPmRpcnR5X3R4ID49IFRYX1JJTkdfU0laRSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODM5MC5jIGIvZHJpdmVycy9uZXQvODM5MC5jCmluZGV4IGJhYjE2YmMuLjZkNzZmM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgzOTAuYworKysgYi9kcml2ZXJzL25ldC84MzkwLmMKQEAgLTIyNSw5ICsyMjUsOSBAQAogCXVuc2lnbmVkIGxvbmcgaWN1Y3I7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWN1Y3IgPSBpbmwoSUNVQ1IxKTsKKwlpY3VjciA9IGlubChNMzJSX0lDVV9DUjFfUE9SVEwpOwogCWljdWNyIHw9IE0zMlJfSUNVQ1JfSVNNT0QxMTsKLQlvdXRsKGljdWNyLCBJQ1VDUjEpOworCW91dGwoaWN1Y3IsIE0zMlJfSUNVX0NSMV9QT1JUTCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogI2VuZGlmCiAJZWlfbG9jYWwtPnN0YXQudHhfZXJyb3JzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKaW5kZXggNTU3MjBkYy4uNzQ1YTE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwpAQCAtNjIsNyArNjIsNyBAQAogCS8qIFRvIGF2b2lkIGxhdGVuY3kgcHJvYmxlbXMsIHdlIG9ubHkgcHJvY2VzcyB0aGUgY3VycmVudCBDUFUsCiAJICogaG9waW5nIHRoYXQgbW9zdCBzYW1wbGVzIGZvciB0aGUgdGFzayBhcmUgb24gdGhpcyBDUFUKIAkgKi8KLQlzeW5jX2J1ZmZlcihfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzeW5jX2J1ZmZlcihyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKICAgCXJldHVybiAwOwogfQogCkBAIC04Niw3ICs4Niw3IEBACiAJCS8qIFRvIGF2b2lkIGxhdGVuY3kgcHJvYmxlbXMsIHdlIG9ubHkgcHJvY2VzcyB0aGUgY3VycmVudCBDUFUsCiAJCSAqIGhvcGluZyB0aGF0IG1vc3Qgc2FtcGxlcyBmb3IgdGhlIHRhc2sgYXJlIG9uIHRoaXMgQ1BVCiAJCSAqLwotCQlzeW5jX2J1ZmZlcihfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJc3luY19idWZmZXIocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKaW5kZXggNjM3NWViYy4uMTRlNDEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCkBAIC0xNzEsMTkgKzE3MSwyMSBAQAogY29uZmlnIE0zMlJfUENDCiAJYm9vbCAiTTMyUiBQQ01DSUEgSS9GIgogCWRlcGVuZHMgb24gTTMyUiAmJiBDSElQX00zMjcwMCAmJiBQQ01DSUEKKwlzZWxlY3QgUENDQVJEX05PTlNUQVRJQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gdXNlIHRoZSBNMzJSIFBDTUNJQSBjb250cm9sbGVyLgogCiBjb25maWcgTTMyUl9DRkMKIAlib29sICJNMzJSIENGIEkvRiBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gTTMyUiAmJiAoUExBVF9VU1JWIHx8IFBMQVRfTTMyNzAwVVQgfHwgUExBVF9NQVBQSTIgfHwgUExBVF9PUFNQVVQpCisJZGVwZW5kcyBvbiBNMzJSICYmIChQTEFUX1VTUlYgfHwgUExBVF9NMzI3MDBVVCB8fCBQTEFUX01BUFBJMiB8fCBQTEFUX01BUFBJMyB8fCBQTEFUX09QU1BVVCkKKwlzZWxlY3QgUENDQVJEX05PTlNUQVRJQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gdXNlIHRoZSBNMzJSIENvbXBhY3RGbGFzaCBjb250cm9sbGVyLgogCiBjb25maWcgTTMyUl9DRkNfTlVNCiAJaW50ICJNMzJSIENGIEkvRiBudW1iZXIiCiAJZGVwZW5kcyBvbiBNMzJSX0NGQwotCWRlZmF1bHQgIjEiIGlmIFBMQVRfVVNSViB8fCBQTEFUX00zMjcwMFVUIHx8IFBMQVRfTUFQUEkyIHx8IFBMQVRfT1BTUFVUCisJZGVmYXVsdCAiMSIgaWYgUExBVF9VU1JWIHx8IFBMQVRfTTMyNzAwVVQgfHwgUExBVF9NQVBQSTIgfHwgUExBVF9NQVBQSTMgfHwgUExBVF9PUFNQVVQKIAloZWxwCiAJICBTZXQgdGhlIG51bWJlciBvZiBNMzJSIENGIHNsb3RzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCA1ODFiZmE5Li5iMTExMWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTI0LDkgKzI0LDkgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CkBAIC00NDQsNyArNDQ0LDcgQEAKIAkJZGVidWcoMywgIm0zMnJfY2ZjOiBfcGNjX2dldF9zdGF0dXM6ICIKIAkJCSAicG93ZXIgb2ZmIChDUENSPTB4JTA4eClcbiIsIHN0YXR1cyk7CiAJfQotI2VsaWYgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTIpCisjZWxpZiBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJMikgfHwgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTMpCiAJaWYgKCBzdGF0dXMgKSB7CiAJCXN0YXR1cyA9IHBjY19nZXQoc29jaywgKHVuc2lnbmVkIGludClQTERfQ1BDUik7CiAJCWlmIChzdGF0dXMgPT0gMCkgeyAvKiBwb3dlciBvZmYgKi8KQEAgLTQ1MiwxOCArNDUyLDIzIEBACiAJCQlwY2Nfc2V0KHNvY2ssICh1bnNpZ25lZCBpbnQpUExEX0NGQlVGQ1IsMCk7IC8qIGZvcmNlIGJ1ZmZlciBvZmYgZm9yIFpBLTM2ICovCiAJCQl1ZGVsYXkoNTApOwogCQl9Ci0JCXN0YXR1cyA9IHBjY19nZXQoc29jaywgKHVuc2lnbmVkIGludClQTERfQ0ZCVUZDUik7Ci0JCWlmIChzdGF0dXMgIT0gMCkgeyAvKiBidWZmZXIgb2ZmICovCi0JCQlwY2Nfc2V0KHNvY2ssICh1bnNpZ25lZCBpbnQpUExEX0NGQlVGQ1IsMCk7Ci0JCQl1ZGVsYXkoNTApOwotCQkJcGNjX3NldChzb2NrLCAodW5zaWduZWQgaW50KVBMRF9DRlJTVENSLCAweDAxMDEpOwotCQkJdWRlbGF5KDI1KTsgLyogZm9yIElERSByZXNldCAqLwotCQkJcGNjX3NldChzb2NrLCAodW5zaWduZWQgaW50KVBMRF9DRlJTVENSLCAweDAxMDApOwotCQkJbWRlbGF5KDIpOyAgLyogZm9yIElERSByZXNldCAqLwotCQl9IGVsc2UgewotCQkJKnZhbHVlIHw9IFNTX1BPV0VST047Ci0JCQkqdmFsdWUgfD0gU1NfUkVBRFk7Ci0JCX0KKwkJKnZhbHVlIHw9IFNTX1BPV0VST047CisKKwkJcGNjX3NldChzb2NrLCAodW5zaWduZWQgaW50KVBMRF9DRkJVRkNSLDApOworCQl1ZGVsYXkoNTApOworCQlwY2Nfc2V0KHNvY2ssICh1bnNpZ25lZCBpbnQpUExEX0NGUlNUQ1IsIDB4MDEwMSk7CisJCXVkZWxheSgyNSk7IC8qIGZvciBJREUgcmVzZXQgKi8KKwkJcGNjX3NldChzb2NrLCAodW5zaWduZWQgaW50KVBMRF9DRlJTVENSLCAweDAxMDApOworCQltZGVsYXkoMik7ICAvKiBmb3IgSURFIHJlc2V0ICovCisKKwkJKnZhbHVlIHw9IFNTX1JFQURZOworCQkqdmFsdWUgfD0gU1NfM1ZDQVJEOworCX0gZWxzZSB7CisJCS8qIGRpc2FibGUgQ0YgcG93ZXIgKi8KKwkgICAgICAgIHBjY19zZXQoc29jaywgKHVuc2lnbmVkIGludClQTERfQ1BDUiwgMCk7CisJCXVkZWxheSgxMDApOworCQlkZWJ1ZygzLCAibTMycl9jZmM6IF9wY2NfZ2V0X3N0YXR1czogIgorCQkJICJwb3dlciBvZmYgKENQQ1I9MHglMDh4KVxuIiwgc3RhdHVzKTsKIAl9CiAjZWxzZQogI2Vycm9yIG5vIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24KQEAgLTQ3OSwxNCArNDg0LDEzIEBACiB7CiAvLwlwY2Nfc29ja2V0X3QgKnQgPSAmc29ja2V0W3NvY2tdOwogCi0jaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVCkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9VU1JWKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX09QU1BVVCkKIAlzdGF0ZS0+ZmxhZ3MgPSAwOwogCXN0YXRlLT5jc2NfbWFzayA9IFNTX0RFVEVDVDsKIAlzdGF0ZS0+Y3NjX21hc2sgfD0gU1NfUkVBRFk7CiAJc3RhdGUtPmlvX2lycSA9IDA7CiAJc3RhdGUtPlZjYyA9IDMzOwkvKiAzLjNWIGZpeGVkICovCiAJc3RhdGUtPlZwcCA9IDMzOwotI2VuZGlmCisKIAlkZWJ1ZygzLCAibTMycl9jZmM6IEdldFNvY2tldCglZCkgPSBmbGFncyAlIzMuM3gsIFZjYyAlZCwgVnBwICVkLCAiCiAJCSAgImlvX2lycSAlZCwgY3NjX21hc2sgJSMyLjJ4XG4iLCBzb2NrLCBzdGF0ZS0+ZmxhZ3MsCiAJCSAgc3RhdGUtPlZjYywgc3RhdGUtPlZwcCwgc3RhdGUtPmlvX2lycSwgc3RhdGUtPmNzY19tYXNrKTsKQEAgLTQ5NywzMiArNTAxLDE3IEBACiAKIHN0YXRpYyBpbnQgX3BjY19zZXRfc29ja2V0KHVfc2hvcnQgc29jaywgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQogewotI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkyKQotCXVfbG9uZyByZWcgPSAwOwotI2VuZGlmCiAJZGVidWcoMywgIm0zMnJfY2ZjOiBTZXRTb2NrZXQoJWQsIGZsYWdzICUjMy4zeCwgVmNjICVkLCBWcHAgJWQsICIKIAkJICAiaW9faXJxICVkLCBjc2NfbWFzayAlIzIuMngpXG4iLCBzb2NrLCBzdGF0ZS0+ZmxhZ3MsCiAJCSAgc3RhdGUtPlZjYywgc3RhdGUtPlZwcCwgc3RhdGUtPmlvX2lycSwgc3RhdGUtPmNzY19tYXNrKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVQpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfVVNSVikgfHwgZGVmaW5lZChDT05GSUdfUExBVF9PUFNQVVQpCisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVCkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9VU1JWKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX09QU1BVVCkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTIpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkzKQogCWlmIChzdGF0ZS0+VmNjKSB7CiAJCWlmICgoc3RhdGUtPlZjYyAhPSA1MCkgJiYgKHN0YXRlLT5WY2MgIT0gMzMpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCS8qIGFjY2VwdCA1ViBhbmQgMy4zViAqLwogCX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkyKQotCWlmIChzdGF0ZS0+VmNjKSB7Ci0JCS8qCi0JCSAqIDVWIG9ubHkKLQkJICovCi0JCWlmIChzdGF0ZS0+VmNjID09IDUwKSB7Ci0JCQlyZWcgfD0gUENDU0lHQ1JfVkVOOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9CiAjZW5kaWYKLQogCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkgewogCQlkZWJ1ZygzLCAiOlJFU0VUXG4iKTsKIAkJcGNjX3NldChzb2NrLCh1bnNpZ25lZCBpbnQpUExEX0NGUlNUQ1IsMHgxMDEpOwpAQCAtNzg4LDcgKzc3Nyw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTIpCisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTIpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkzKQogCXBjY19zZXQoMCwgKHVuc2lnbmVkIGludClQTERfQ0ZDUjAsIDB4MGYwZik7CiAJcGNjX3NldCgwLCAodW5zaWduZWQgaW50KVBMRF9DRkNSMSwgMHgwMjAwKTsKICNlbmRpZgpAQCAtODI1LDcgKzgxNCw3IEBACiAJZm9yIChpID0gMCA7IGkgPCBwY2Nfc29ja2V0cyA7IGkrKykgewogCQlzb2NrZXRbaV0uc29ja2V0LmRldi5kZXYgPSAmcGNjX2RldmljZS5kZXY7CiAJCXNvY2tldFtpXS5zb2NrZXQub3BzID0gJnBjY19vcGVyYXRpb25zOwotCQlzb2NrZXRbaV0uc29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfc3RhdGljX29wczsKKwkJc29ja2V0W2ldLnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX25vbnN0YXRpY19vcHM7CiAJCXNvY2tldFtpXS5zb2NrZXQub3duZXIgPSBUSElTX01PRFVMRTsKIAkJc29ja2V0W2ldLm51bWJlciA9IGk7CiAJCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoJnNvY2tldFtpXS5zb2NrZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuaCBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmgKaW5kZXggMTdjMWRiNy4uODE0NmUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5oCkBAIC03MSwxMSArNzEsMTUgQEAKIAogI2RlZmluZSBDRkNfSU9QT1JUX0JBU0UJCTB4MTAwMAogCi0jaWYgIWRlZmluZWQoQ09ORklHX1BMQVRfVVNSVikKKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJMykKKyNkZWZpbmUgQ0ZDX0FUVFJfTUFQQkFTRQkweDE0MDE0MDAwCisjZGVmaW5lIENGQ19JT19NQVBCQVNFX0JZVEUJMHhiNDAxMjAwMAorI2RlZmluZSBDRkNfSU9fTUFQQkFTRV9XT1JECTB4YjQwMDIwMDAKKyNlbGlmICFkZWZpbmVkKENPTkZJR19QTEFUX1VTUlYpCiAjZGVmaW5lIENGQ19BVFRSX01BUEJBU0UgICAgICAgIDB4MGMwMTQwMDAKICNkZWZpbmUgQ0ZDX0lPX01BUEJBU0VfQllURSAgICAgMHhhYzAxMjAwMAogI2RlZmluZSBDRkNfSU9fTUFQQkFTRV9XT1JEICAgICAweGFjMDAyMDAwCi0jZWxzZQkvKiBDT05GSUdfUExBVF9VU1JWICovCisjZWxzZQogI2RlZmluZSBDRkNfQVRUUl9NQVBCQVNFCTB4MDQwMTQwMDAKICNkZWZpbmUgQ0ZDX0lPX01BUEJBU0VfQllURQkweGE0MDEyMDAwCiAjZGVmaW5lIENGQ19JT19NQVBCQVNFX1dPUkQJMHhhNDAwMjAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKaW5kZXggNGEwNmM3ZC4uYWFjODNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBkcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCiAgKiAgIFMvMzkwIGNvbW1vbiBJL08gcm91dGluZXMgLS0gYmxhY2tsaXN0aW5nIG9mIHNwZWNpZmljIGRldmljZXMKLSAqICAgJFJldmlzaW9uOiAxLjMzICQKKyAqICAgJFJldmlzaW9uOiAxLjM0ICQKICAqCiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwKICAqCQkJICAgICAgSUJNIENvcnBvcmF0aW9uCkBAIC0yODksNyArMjg5LDcgQEAKIAlsZW4gPSAwOwogCWZvciAoZGV2bm8gPSBvZmY7IC8qIGFidXNlIHRoZSBwYWdlIHZhcmlhYmxlCiAJCQkgICAqIGFzIGNvdW50ZXIsIHNlZSBmcy9wcm9jL2dlbmVyaWMuYyAqLwotCSAgICAgZGV2bm8gPD0gX19NQVhfU1VCQ0hBTk5FTFMgJiYgbGVuICsgZW50cnlfc2l6ZSA8IGNvdW50OyBkZXZubysrKSB7CisJICAgICBkZXZubyA8IF9fTUFYX1NVQkNIQU5ORUxTICYmIGxlbiArIGVudHJ5X3NpemUgPCBjb3VudDsgZGV2bm8rKykgewogCQlpZiAoIXRlc3RfYml0KGRldm5vLCBibF9kZXYpKQogCQkJY29udGludWU7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIwLjAuJTA0bHgiLCBkZXZubyk7CkBAIC0zMDIsNyArMzAyLDcgQEAKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CiAJfQogCi0JaWYgKGRldm5vIDw9IF9fTUFYX1NVQkNIQU5ORUxTKQorCWlmIChkZXZubyA8IF9fTUFYX1NVQkNIQU5ORUxTKQogCQkqZW9mID0gMTsKIAkqc3RhcnQgPSAoY2hhciAqKSAoZGV2bm8gLSBvZmYpOyAvKiBudW1iZXIgb2YgY2hlY2tlZCBlbnRyaWVzICovCiAJcmV0dXJuIGxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKaW5kZXggODBiMGM0MC4uZWM4MTUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKQEAgLTE5NzUsNyArMTk3NSw3IEBACiBzdGF0aWMgaW50CiBtZWdhcmFpZF9yZXNldChTY3NpX0NtbmQgKmNtZCkKIHsKLQlhZGFwdGVyID0gKGFkYXB0ZXJfdCAqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKKwlhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoYWRhcHRlcl90ICopY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCWludCByYzsKIAogCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggNmU0NGI0Ni4uMjVmY2VmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC03NTMsNyArNzUzLDcgQEAKIAogY29uZmlnIFNFUklBTF9JQ09NCiAJdHJpc3RhdGUgIklCTSBNdWx0aXBvcnQgU2VyaWFsIEFkYXB0ZXIiCi0JZGVwZW5kcyBvbiBQUENfSVNFUklFUyB8fCBQUENfUFNFUklFUworCWRlcGVuZHMgb24gUENJICYmIChQUENfSVNFUklFUyB8fCBQUENfUFNFUklFUykKIAlzZWxlY3QgU0VSSUFMX0NPUkUKIAloZWxwCiAJICBUaGlzIGRyaXZlciBpcyBmb3IgYSBmYW1pbHkgb2YgbXVsdGlwb3J0IHNlcmlhbCBhZGFwdGVycwpAQCAtODQzLDQgKzg0MywxMyBAQAogICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogICAgICAgICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBqc20uCiAKK2NvbmZpZyBTRVJJQUxfU0dJX0lPQzQKKwl0cmlzdGF0ZSAiU0dJIElPQzQgY29udHJvbGxlciBzZXJpYWwgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIChJQTY0X0dFTkVSSUMgfHwgSUE2NF9TR0lfU04yKSAmJiBTR0lfSU9DNAorCXNlbGVjdCBTRVJJQUxfQ09SRQorCWhlbHAKKwkJSWYgeW91IGhhdmUgYW4gU0dJIEFsdGl4IHdpdGggYW4gSU9DNCBiYXNlZCBCYXNlIElPIGNhcmQKKwkJYW5kIHdpc2ggdG8gdXNlIHRoZSBzZXJpYWwgcG9ydHMgb24gdGhpcyBjYXJkLCBzYXkgWS4KKwkJT3RoZXJ3aXNlLCBzYXkgTi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQppbmRleCA4MWI3N2Q3Ni4uOGYxY2RkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKQEAgLTUxLDQgKzUxLDQgQEAKIG9iai0kKENPTkZJR19TRVJJQUxfSlNNKSArPSBqc20vCiBvYmotJChDT05GSUdfU0VSSUFMX1RYWDkpICs9IHNlcmlhbF90eHg5Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfVlI0MVhYKSArPSB2cjQxeHhfc2l1Lm8KLW9iai0kKENPTkZJR19CTEtfREVWX1NHSUlPQzQpICs9IGlvYzRfc2VyaWFsLm8KK29iai0kKENPTkZJR19TRVJJQUxfU0dJX0lPQzQpICs9IGlvYzRfc2VyaWFsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYwppbmRleCBiNDIyYzNhLi5jNGM4ZjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCkBAIC0xMzQsMTIgKzEzNCwyMSBAQAogCiB2b2lkIHNjYzJfbGluZWlmKHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbykKIHsKKwkvKgorCSAqIFNUeCBHUDMgdXNlcyB0aGUgU0NDMiBzZWNvbmRhcnkgb3B0aW9uIHBpbiBhc3NpZ25tZW50CisJICogd2hpY2ggdGhpcyBkcml2ZXIgZG9lc24ndCBhY2NvdW50IGZvciBpbiB0aGUgc3RhdGljCisJICogcGluIGFzc2lnbm1lbnRzLiBUaGlzIGtpbmQgb2YgYm9hcmQgc3BlY2lmaWMgaW5mbworCSAqIHJlYWxseSBoYXMgdG8gZ2V0IG91dCBvZiB0aGUgZHJpdmVyIHNvIGJvYXJkcyBjYW4KKwkgKiBiZSBzdXBwb3J0ZWQgaW4gYSBzYW5lIGZhc2hpb24uCisJICovCisjaWZuZGVmIENPTkZJR19TVFhfR1AzCiAJdm9sYXRpbGUgaW9wX2NwbTJfdCAqaW8gPSAmY3BtMl9pbW1yLT5pbV9pb3BvcnQ7CiAJaW8tPmlvcF9wcGFyYiB8PSAweDAwOGIwMDAwOwogCWlvLT5pb3BfcGRpcmIgfD0gMHgwMDg4MDAwMDsKIAlpby0+aW9wX3Bzb3JiIHw9IDB4MDA4ODAwMDA7CiAJaW8tPmlvcF9wZGlyYiAmPSB+MHgwMDAzMDAwMDsKIAlpby0+aW9wX3Bzb3JiICY9IH4weDAwMDMwMDAwOworI2VuZGlmCiAJY3BtMl9pbW1yLT5pbV9jcG11eC5jbXhfc2NyICY9IDB4ZmYwMGZmZmY7CiAJY3BtMl9pbW1yLT5pbV9jcG11eC5jbXhfc2NyIHw9IDB4MDAwOTAwMDA7CiAJcGluZm8tPmJyZyA9IDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYwppbmRleCBiYTRlMTNhLi43OTNjM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jNF9jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pb2M0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KIAogLyoKQEAgLTEzMCwxMiArMTMwLDE5IEBACiAJCQkJIElPQzRfU0lPX0lSX1MzX1RYX0VYUExJQ0lUKQogCiAvKiBCaXRtYXNrcyBmb3IgSU9DNF9PVEhFUl9JUiwgSU9DNF9PVEhFUl9JRUMsIGFuZCBJT0M0X09USEVSX0lFUyAgKi8KLSNkZWZpbmUgSU9DNF9PVEhFUl9JUl9BVEFfSU5UICAgICAgICAgICAweDAwMDAwMDAxICAvKiBBVEFQSSBpbnRyIHBhc3MtdGhydSAqLwotI2RlZmluZSBJT0M0X09USEVSX0lSX0FUQV9NRU1FUlIgICAgICAgIDB4MDAwMDAwMDIgIC8qIEFUQVBJIERNQSBQQ0kgZXJyb3IgKi8KLSNkZWZpbmUgSU9DNF9PVEhFUl9JUl9TMF9NRU1FUlIgICAgICAgICAweDAwMDAwMDA0ICAvKiBQb3J0IDAgUENJIGVycm9yICovCi0jZGVmaW5lIElPQzRfT1RIRVJfSVJfUzFfTUVNRVJSICAgICAgICAgMHgwMDAwMDAwOCAgLyogUG9ydCAxIFBDSSBlcnJvciAqLwotI2RlZmluZSBJT0M0X09USEVSX0lSX1MyX01FTUVSUiAgICAgICAgIDB4MDAwMDAwMTAgIC8qIFBvcnQgMiBQQ0kgZXJyb3IgKi8KLSNkZWZpbmUgSU9DNF9PVEhFUl9JUl9TM19NRU1FUlIgICAgICAgICAweDAwMDAwMDIwICAvKiBQb3J0IDMgUENJIGVycm9yICovCisjZGVmaW5lIElPQzRfT1RIRVJfSVJfQVRBX0lOVAkJMHgwMDAwMDAwMSAgLyogQVRBUEkgaW50ciBwYXNzLXRocnUgKi8KKyNkZWZpbmUgSU9DNF9PVEhFUl9JUl9BVEFfTUVNRVJSCTB4MDAwMDAwMDIgIC8qIEFUQVBJIERNQSBQQ0kgZXJyb3IgKi8KKyNkZWZpbmUgSU9DNF9PVEhFUl9JUl9TMF9NRU1FUlIJCTB4MDAwMDAwMDQgIC8qIFBvcnQgMCBQQ0kgZXJyb3IgKi8KKyNkZWZpbmUgSU9DNF9PVEhFUl9JUl9TMV9NRU1FUlIJCTB4MDAwMDAwMDggIC8qIFBvcnQgMSBQQ0kgZXJyb3IgKi8KKyNkZWZpbmUgSU9DNF9PVEhFUl9JUl9TMl9NRU1FUlIJCTB4MDAwMDAwMTAgIC8qIFBvcnQgMiBQQ0kgZXJyb3IgKi8KKyNkZWZpbmUgSU9DNF9PVEhFUl9JUl9TM19NRU1FUlIJCTB4MDAwMDAwMjAgIC8qIFBvcnQgMyBQQ0kgZXJyb3IgKi8KKyNkZWZpbmUgSU9DNF9PVEhFUl9JUl9LQkRfSU5UCQkweDAwMDAwMDQwICAvKiBLZXlib2FyZC9tb3VzZSAqLworI2RlZmluZSBJT0M0X09USEVSX0lSX1JFU0VSVkVECQkweDAwN2ZmZjgwICAvKiBSZXNlcnZlZCAqLworI2RlZmluZSBJT0M0X09USEVSX0lSX1JUX0lOVAkJMHgwMDgwMDAwMCAgLyogSU5UX09VVCBzZWN0aW9uIG91dHB1dCAqLworI2RlZmluZSBJT0M0X09USEVSX0lSX0dFTl9JTlQJCTB4ZmYwMDAwMDAgIC8qIEdlbmVyaWMgcGlucyAqLworCisjZGVmaW5lIElPQzRfT1RIRVJfSVJfU0VSX01FTUVSUiAoSU9DNF9PVEhFUl9JUl9TMF9NRU1FUlIgfCBJT0M0X09USEVSX0lSX1MxX01FTUVSUiB8IFwKKwkJCQkgIElPQzRfT1RIRVJfSVJfUzJfTUVNRVJSIHwgSU9DNF9PVEhFUl9JUl9TM19NRU1FUlIpCiAKIC8qIEJpdG1hc2tzIGZvciBJT0M0X1NJT19DUiAqLwogI2RlZmluZSBJT0M0X1NJT19DUl9DTURfUFVMU0VfU0hJRlQgICAgICAgICAgICAgIDAgIC8qIGJ5dGUgYnVzIHN0cm9iZSBzaGlmdCAqLwpAQCAtMjc0LDcwICsyODEsMjQgQEAKICNkZWZpbmUgaTR1X2RsbSB1Mi5kbG0KICNkZWZpbmUgaTR1X2ZjciB1My5mY3IKIAotLyogUENJIG1lbW9yeSBzcGFjZSByZWdpc3RlciBtYXAgYWRkcmVzc2VkIHVzaW5nIHBjaV9iYXIwICovCi1zdHJ1Y3QgaW9jNF9tZW1yZWdzIHsKLQlzdHJ1Y3QgaW9jNF9tZW0gewotCQkvKiBNaXNjZWxsYW5lb3VzIElPQzQgIHJlZ2lzdGVycyAqLwotCQl1aW50MzJfdCBwY2lfZXJyX2FkZHJfbDsKLQkJdWludDMyX3QgcGNpX2Vycl9hZGRyX2g7Ci0JCXVpbnQzMl90IHNpb19pcjsKLQkJdWludDMyX3Qgb3RoZXJfaXI7CisvKiBTZXJpYWwgcG9ydCByZWdpc3RlcnMgdXNlZCBmb3IgRE1BIHNlcmlhbCBJL08gKi8KK3N0cnVjdCBpb2M0X3NlcmlhbCB7CisJdWludDMyX3Qgc2JicjAxX2w7CisJdWludDMyX3Qgc2JicjAxX2g7CisJdWludDMyX3Qgc2JicjIzX2w7CisJdWludDMyX3Qgc2JicjIzX2g7CiAKLQkJLyogVGhlc2UgcmVnaXN0ZXJzIGFyZSByZWFkLW9ubHkgZm9yIGdlbmVyYWwga2VybmVsIGNvZGUuICAqLwotCQl1aW50MzJfdCBzaW9faWVzX3JvOwotCQl1aW50MzJfdCBvdGhlcl9pZXNfcm87Ci0JCXVpbnQzMl90IHNpb19pZWNfcm87Ci0JCXVpbnQzMl90IG90aGVyX2llY19ybzsKLQkJdWludDMyX3Qgc2lvX2NyOwotCQl1aW50MzJfdCBtaXNjX2ZpbGwxOwotCQl1aW50MzJfdCBpbnRfb3V0OwotCQl1aW50MzJfdCBtaXNjX2ZpbGwyOwotCQl1aW50MzJfdCBncGNyX3M7Ci0JCXVpbnQzMl90IGdwY3JfYzsKLQkJdWludDMyX3QgZ3BkcjsKLQkJdWludDMyX3QgbWlzY19maWxsMzsKLQkJdWludDMyX3QgZ3Bwcl8wOwotCQl1aW50MzJfdCBncHByXzE7Ci0JCXVpbnQzMl90IGdwcHJfMjsKLQkJdWludDMyX3QgZ3Bwcl8zOwotCQl1aW50MzJfdCBncHByXzQ7Ci0JCXVpbnQzMl90IGdwcHJfNTsKLQkJdWludDMyX3QgZ3Bwcl82OwotCQl1aW50MzJfdCBncHByXzc7Ci0JfSBpb2M0X21lbTsKLQotCWNoYXIgbWlzY19maWxsNFsweDEwMCAtIDB4NUMgLSA0XTsKLQotCS8qIEFUQS9BVEFQIHJlZ2lzdGVycyAqLwotCXVpbnQzMl90IGF0YV9ub3R1c2VkWzldOwotCWNoYXIgYXRhX2ZpbGwxWzB4MTQwIC0gMHgxMjAgLSA0XTsKLQl1aW50MzJfdCBhdGFfbm90dXNlZDFbOF07Ci0JY2hhciBhdGFfZmlsbDJbMHgyMDAgLSAweDE1QyAtIDRdOwotCi0JLyogS2V5Ym9hcmQgYW5kIG1vdXNlIHJlZ2lzdGVycyAqLwotCXVpbnQzMl90IGttX25vdHVzZWRbNV07OwotCWNoYXIga21fZmlsbDFbMHgzMDAgLSAweDIxMCAtIDRdOwotCi0JLyogU2VyaWFsIHBvcnQgcmVnaXN0ZXJzIHVzZWQgZm9yIERNQSBzZXJpYWwgSS9PICovCi0Jc3RydWN0IGlvYzRfc2VyaWFsIHsKLQkJdWludDMyX3Qgc2JicjAxX2w7Ci0JCXVpbnQzMl90IHNiYnIwMV9oOwotCQl1aW50MzJfdCBzYmJyMjNfbDsKLQkJdWludDMyX3Qgc2JicjIzX2g7Ci0KLQkJc3RydWN0IGlvYzRfc2VyaWFscmVncyBwb3J0XzA7Ci0JCXN0cnVjdCBpb2M0X3NlcmlhbHJlZ3MgcG9ydF8xOwotCQlzdHJ1Y3QgaW9jNF9zZXJpYWxyZWdzIHBvcnRfMjsKLQkJc3RydWN0IGlvYzRfc2VyaWFscmVncyBwb3J0XzM7Ci0JCXN0cnVjdCBpb2M0X3VhcnRyZWdzIHVhcnRfMDsKLQkJc3RydWN0IGlvYzRfdWFydHJlZ3MgdWFydF8xOwotCQlzdHJ1Y3QgaW9jNF91YXJ0cmVncyB1YXJ0XzI7Ci0JCXN0cnVjdCBpb2M0X3VhcnRyZWdzIHVhcnRfMzsKLQl9IGlvYzRfc2VyaWFsOwotfTsKKwlzdHJ1Y3QgaW9jNF9zZXJpYWxyZWdzIHBvcnRfMDsKKwlzdHJ1Y3QgaW9jNF9zZXJpYWxyZWdzIHBvcnRfMTsKKwlzdHJ1Y3QgaW9jNF9zZXJpYWxyZWdzIHBvcnRfMjsKKwlzdHJ1Y3QgaW9jNF9zZXJpYWxyZWdzIHBvcnRfMzsKKwlzdHJ1Y3QgaW9jNF91YXJ0cmVncyB1YXJ0XzA7CisJc3RydWN0IGlvYzRfdWFydHJlZ3MgdWFydF8xOworCXN0cnVjdCBpb2M0X3VhcnRyZWdzIHVhcnRfMjsKKwlzdHJ1Y3QgaW9jNF91YXJ0cmVncyB1YXJ0XzM7Cit9IGlvYzRfc2VyaWFsOwogCiAvKiBVQVJUIGNsb2NrIHNwZWVkICovCi0jZGVmaW5lIElPQzRfU0VSX1hJTl9DTEsgICAgICAgIElPQzRfU0VSX1hJTl9DTEtfNjYKICNkZWZpbmUgSU9DNF9TRVJfWElOX0NMS182NiAgICAgNjY2NjY2NjcKICNkZWZpbmUgSU9DNF9TRVJfWElOX0NMS18zMyAgICAgMzMzMzMzMzMKIApAQCAtNDEyLDggKzM3Myw4IEBACiAJCQkJCXwgVUFSVF9MQ1JfV0xFTjcgfCBVQVJUX0xDUl9XTEVOOCkKICNkZWZpbmUgTENSX01BU0tfU1RPUF9CSVRTCShVQVJUX0xDUl9TVE9QKQogCi0jZGVmaW5lIFBFTkRJTkcoX3ApCShyZWFkbCgmKF9wKS0+aXBfbWVtLT5zaW9faXIpICYgX3AtPmlwX2llbmIpCi0jZGVmaW5lIFJFQURfU0lPX0lSKF9wKSByZWFkbCgmKF9wKS0+aXBfbWVtLT5zaW9faXIpCisjZGVmaW5lIFBFTkRJTkcoX3ApCShyZWFkbCgmKF9wKS0+aXBfbWVtLT5zaW9faXIucmF3KSAmIF9wLT5pcF9pZW5iKQorI2RlZmluZSBSRUFEX1NJT19JUihfcCkgcmVhZGwoJihfcCktPmlwX21lbS0+c2lvX2lyLnJhdykKIAogLyogRGVmYXVsdCB0byA0ayBidWZmZXJzICovCiAjaWZkZWYgSU9DNF8xS19CVUZGRVJTCkBAIC00NDcsNyArNDA4LDcgQEAKICAqLwogI2RlZmluZSBNQVhfSU9DNF9JTlRSX0VOVFMJKDggKiBzaXplb2YodWludDMyX3QpKQogc3RydWN0IGlvYzRfc29mdCB7Ci0Jc3RydWN0IGlvYzRfbWVtIF9faW9tZW0gKmlzX2lvYzRfbWVtX2FkZHI7CisJc3RydWN0IGlvYzRfbWlzY19yZWdzIF9faW9tZW0gKmlzX2lvYzRfbWlzY19hZGRyOwogCXN0cnVjdCBpb2M0X3NlcmlhbCBfX2lvbWVtICppc19pb2M0X3NlcmlhbF9hZGRyOwogCiAJLyogRWFjaCBpbnRlcnJ1cHQgdHlwZSBoYXMgYW4gZW50cnkgaW4gdGhlIGFycmF5ICovCkBAIC00ODYsNyArNDQ3LDcgQEAKIAlzdHJ1Y3QgaW9jNF9zb2Z0ICppcF9pb2M0X3NvZnQ7CiAKIAkvKiBwY2kgbWVtIGFkZHJlc3NlcyAqLwotCXN0cnVjdCBpb2M0X21lbSBfX2lvbWVtICppcF9tZW07CisJc3RydWN0IGlvYzRfbWlzY19yZWdzIF9faW9tZW0gKmlwX21lbTsKIAlzdHJ1Y3QgaW9jNF9zZXJpYWwgX19pb21lbSAqaXBfc2VyaWFsOwogCXN0cnVjdCBpb2M0X3NlcmlhbHJlZ3MgX19pb21lbSAqaXBfc2VyaWFsX3JlZ3M7CiAJc3RydWN0IGlvYzRfdWFydHJlZ3MgX19pb21lbSAqaXBfdWFydF9yZWdzOwpAQCAtNTUzLDcgKzUxNCw3IEBACiAJdWludDMyX3QgaW50cl9kbWFfZXJyb3I7CiAJdWludDMyX3QgaW50cl9jbGVhcjsKIAl1aW50MzJfdCBpbnRyX2FsbDsKLQljaGFyIHJzNDIyX3NlbGVjdF9waW47CisJaW50IHJzNDIyX3NlbGVjdF9waW47CiB9OwogCiBzdGF0aWMgc3RydWN0IGhvb2tzIGhvb2tzX2FycmF5W0lPQzRfTlVNX1NFUklBTF9QT1JUU10gPSB7CkBAIC02NjksNyArNjMwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogd3JpdGVfaXJlZyhzdHJ1Y3QgaW9jNF9zb2Z0ICppb2M0X3NvZnQsIHVpbnQzMl90IHZhbCwgaW50IHdoaWNoLCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgaW9jNF9tZW0gX19pb21lbSAqbWVtID0gaW9jNF9zb2Z0LT5pc19pb2M0X21lbV9hZGRyOworCXN0cnVjdCBpb2M0X21pc2NfcmVncyBfX2lvbWVtICptZW0gPSBpb2M0X3NvZnQtPmlzX2lvYzRfbWlzY19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jNF9zb2Z0LT5pc19pcl9sb2NrLCBmbGFncyk7CkBAIC02NzgsMTEgKzYzOSwxMSBAQAogCWNhc2UgSU9DNF9TSU9fSU5UUl9UWVBFOgogCQlzd2l0Y2ggKHdoaWNoKSB7CiAJCWNhc2UgSU9DNF9XX0lFUzoKLQkJCXdyaXRlbCh2YWwsICZtZW0tPnNpb19pZXNfcm8pOworCQkJd3JpdGVsKHZhbCwgJm1lbS0+c2lvX2llcy5yYXcpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBJT0M0X1dfSUVDOgotCQkJd3JpdGVsKHZhbCwgJm1lbS0+c2lvX2llY19ybyk7CisJCQl3cml0ZWwodmFsLCAmbWVtLT5zaW9faWVjLnJhdyk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTY5MCwxMSArNjUxLDExIEBACiAJY2FzZSBJT0M0X09USEVSX0lOVFJfVFlQRToKIAkJc3dpdGNoICh3aGljaCkgewogCQljYXNlIElPQzRfV19JRVM6Ci0JCQl3cml0ZWwodmFsLCAmbWVtLT5vdGhlcl9pZXNfcm8pOworCQkJd3JpdGVsKHZhbCwgJm1lbS0+b3RoZXJfaWVzLnJhdyk7CiAJCQlicmVhazsKIAogCQljYXNlIElPQzRfV19JRUM6Ci0JCQl3cml0ZWwodmFsLCAmbWVtLT5vdGhlcl9pZWNfcm8pOworCQkJd3JpdGVsKHZhbCwgJm1lbS0+b3RoZXJfaWVjLnJhdyk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTc0Nyw3ICs3MDgsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGlvYzRfcG9ydCAqZ2V0X2lvYzRfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICp0aGVfcG9ydCkKIHsKLQlzdHJ1Y3QgaW9jNF9jb250cm9sICpjb250cm9sID0gZGV2X2dldF9kcnZkYXRhKHRoZV9wb3J0LT5kZXYpOworCXN0cnVjdCBpb2M0X2RyaXZlcl9kYXRhICppZGQgPSBkZXZfZ2V0X2RydmRhdGEodGhlX3BvcnQtPmRldik7CisJc3RydWN0IGlvYzRfY29udHJvbCAqY29udHJvbCA9IGlkZC0+aWRkX3NlcmlhbF9kYXRhOwogCWludCBpaTsKIAogCWlmIChjb250cm9sKSB7CkBAIC03ODIsNyArNzQ0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QKIHBlbmRpbmdfaW50cnMoc3RydWN0IGlvYzRfc29mdCAqc29mdCwgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IGlvYzRfbWVtIF9faW9tZW0gKm1lbSA9IHNvZnQtPmlzX2lvYzRfbWVtX2FkZHI7CisJc3RydWN0IGlvYzRfbWlzY19yZWdzIF9faW9tZW0gKm1lbSA9IHNvZnQtPmlzX2lvYzRfbWlzY19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAl1aW50MzJfdCBpbnRycyA9IDA7CiAKQEAgLTc5MywxMSArNzU1LDExIEBACiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIElPQzRfU0lPX0lOVFJfVFlQRToKLQkJaW50cnMgPSByZWFkbCgmbWVtLT5zaW9faXIpICYgcmVhZGwoJm1lbS0+c2lvX2llc19ybyk7CisJCWludHJzID0gcmVhZGwoJm1lbS0+c2lvX2lyLnJhdykgJiByZWFkbCgmbWVtLT5zaW9faWVzLnJhdyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJT0M0X09USEVSX0lOVFJfVFlQRToKLQkJaW50cnMgPSByZWFkbCgmbWVtLT5vdGhlcl9pcikgJiByZWFkbCgmbWVtLT5vdGhlcl9pZXNfcm8pOworCQlpbnRycyA9IHJlYWRsKCZtZW0tPm90aGVyX2lyLnJhdykgJiByZWFkbCgmbWVtLT5vdGhlcl9pZXMucmF3KTsKIAogCQkvKiBEb24ndCBwcm9jZXNzIGFueSBBVEEgaW50ZXJydXB0ZSAqLwogCQlpbnRycyAmPSB+KElPQzRfT1RIRVJfSVJfQVRBX0lOVCB8IElPQzRfT1RIRVJfSVJfQVRBX01FTUVSUik7CkBAIC04MjYsNyArNzg4LDcgQEAKIAogCS8qIFdhaXQgdW50aWwgYW55IHBlbmRpbmcgYnVzIGFjdGl2aXR5IGZvciB0aGlzIHBvcnQgaGFzIGNlYXNlZCAqLwogCWRvCi0JCXNpb19jciA9IHJlYWRsKCZwb3J0LT5pcF9tZW0tPnNpb19jcik7CisJCXNpb19jciA9IHJlYWRsKCZwb3J0LT5pcF9tZW0tPnNpb19jci5yYXcpOwogCXdoaWxlICghKHNpb19jciAmIElPQzRfU0lPX0NSX1NJT19ESUFHX0lETEUpKTsKIAogCS8qIEZpbmlzaCByZXNldCBzZXF1ZW5jZSAqLwpAQCAtODk5LDcgKzg2MSw3IEBACiAJd3JpdGVfaXJlZyhwb3J0LT5pcF9pb2M0X3NvZnQsIGhvb2tzLT5pbnRyX2NsZWFyLAogCQkgICAgICAgSU9DNF9XX0lFQywgSU9DNF9TSU9fSU5UUl9UWVBFKTsKIAlwb3J0LT5pcF9pZW5iICY9IH5ob29rcy0+aW50cl9jbGVhcjsKLQl3cml0ZWwoaG9va3MtPmludHJfY2xlYXIsICZwb3J0LT5pcF9tZW0tPnNpb19pcik7CisJd3JpdGVsKGhvb2tzLT5pbnRyX2NsZWFyLCAmcG9ydC0+aXBfbWVtLT5zaW9faXIucmF3KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE4LDIzICs4ODAsMjMgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aXBfbG9jaywgZmxhZ3MpOwogCiAJLyogQUNLIHRoZSBpbnRlcnJ1cHQgKi8KLQl3cml0ZWwoaG9va3MtPmludHJfZG1hX2Vycm9yLCAmcG9ydC0+aXBfbWVtLT5vdGhlcl9pcik7CisJd3JpdGVsKGhvb2tzLT5pbnRyX2RtYV9lcnJvciwgJnBvcnQtPmlwX21lbS0+b3RoZXJfaXIucmF3KTsKIAotCWlmIChyZWFkbCgmcG9ydC0+aXBfbWVtLT5wY2lfZXJyX2FkZHJfbCkgJiBJT0M0X1BDSV9FUlJfQUREUl9WTEQpIHsKKwlpZiAocmVhZGwoJnBvcnQtPmlwX21lbS0+cGNpX2Vycl9hZGRyX2wucmF3KSAmIElPQzRfUENJX0VSUl9BRERSX1ZMRCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJQQ0kgZXJyb3IgYWRkcmVzcyBpcyAweCVseCwgIgogCQkJCSJtYXN0ZXIgaXMgc2VyaWFsIHBvcnQgJWMgJXNcbiIsCiAJCSAgICAgKCgodWludDY0X3QpcmVhZGwoJnBvcnQtPmlwX21lbS0+cGNpX2Vycl9hZGRyX2gpCiAJCQkJCQkJIDw8IDMyKQotCQkJCXwgcmVhZGwoJnBvcnQtPmlwX21lbS0+cGNpX2Vycl9hZGRyX2wpKQorCQkJCXwgcmVhZGwoJnBvcnQtPmlwX21lbS0+cGNpX2Vycl9hZGRyX2wucmF3KSkKIAkJCQkJJiBJT0M0X1BDSV9FUlJfQUREUl9BRERSX01TSywgJzEnICsKLQkJICAgICAoKGNoYXIpKHJlYWRsKCZwb3J0LT5pcF9tZW0tPiBwY2lfZXJyX2FkZHJfbCkgJgorCQkgICAgICgoY2hhcikocmVhZGwoJnBvcnQtPmlwX21lbS0+cGNpX2Vycl9hZGRyX2wucmF3KSAmCiAJCQkgICAgIElPQzRfUENJX0VSUl9BRERSX01TVF9OVU1fTVNLKSA+PiAxKSwKLQkJICAgICAocmVhZGwoJnBvcnQtPmlwX21lbS0+cGNpX2Vycl9hZGRyX2wpCisJCSAgICAgKHJlYWRsKCZwb3J0LT5pcF9tZW0tPnBjaV9lcnJfYWRkcl9sLnJhdykKIAkJCQkmIElPQzRfUENJX0VSUl9BRERSX01TVF9UWVBfTVNLKQogCQkJCT8gIlJYIiA6ICJUWCIpOwogCi0JCWlmIChyZWFkbCgmcG9ydC0+aXBfbWVtLT5wY2lfZXJyX2FkZHJfbCkKKwkJaWYgKHJlYWRsKCZwb3J0LT5pcF9tZW0tPnBjaV9lcnJfYWRkcl9sLnJhdykKIAkJCQkJCSYgSU9DNF9QQ0lfRVJSX0FERFJfTVVMX0VSUikgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJIk11bHRpcGxlIGVycm9ycyBvY2N1cnJlZFxuIik7CkBAIC0xMDE4LDI2ICs5ODAsMjYgQEAKIAkJCQkib3RoZXJfaWVzID0gMHgleFxuIiwKIAkJCSAgICAgICAoaW50cl90eXBlID09IElPQzRfU0lPX0lOVFJfVFlQRSkgPyAic2lvIiA6CiAJCQkgICAgICAgIm90aGVyIiwgdGhpc19pciwKLQkJCSAgICAgICByZWFkbCgmc29mdC0+aXNfaW9jNF9tZW1fYWRkci0+c2lvX2lyKSwKLQkJCSAgICAgICByZWFkbCgmc29mdC0+aXNfaW9jNF9tZW1fYWRkci0+c2lvX2llc19ybyksCi0JCQkgICAgICAgcmVhZGwoJnNvZnQtPmlzX2lvYzRfbWVtX2FkZHItPm90aGVyX2lyKSwKLQkJCSAgICAgICByZWFkbCgmc29mdC0+aXNfaW9jNF9tZW1fYWRkci0+b3RoZXJfaWVzX3JvKSk7CisJCQkgICAgICAgcmVhZGwoJnNvZnQtPmlzX2lvYzRfbWlzY19hZGRyLT5zaW9faXIucmF3KSwKKwkJCSAgICAgICByZWFkbCgmc29mdC0+aXNfaW9jNF9taXNjX2FkZHItPnNpb19pZXMucmF3KSwKKwkJCSAgICAgICByZWFkbCgmc29mdC0+aXNfaW9jNF9taXNjX2FkZHItPm90aGVyX2lyLnJhdyksCisJCQkgICAgICAgcmVhZGwoJnNvZnQtPmlzX2lvYzRfbWlzY19hZGRyLT5vdGhlcl9pZXMucmF3KSk7CiAJCX0KIAl9CiAjaWZkZWYgREVCVUdfSU5URVJSVVBUUwogCXsKLQkJc3RydWN0IGlvYzRfbWVtIF9faW9tZW0gKm1lbSA9IHNvZnQtPmlzX2lvYzRfbWVtX2FkZHI7CisJCXN0cnVjdCBpb2M0X21pc2NfcmVncyBfX2lvbWVtICptZW0gPSBzb2Z0LT5pc19pb2M0X21pc2NfYWRkcjsKIAkJc3BpbmxvY2tfdCAqbHAgPSAmc29mdC0+aXNfaXJfbG9jazsKIAkJdW5zaWduZWQgbG9uZyBmbGFnOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzb2Z0LT5pc19pcl9sb2NrLCBmbGFnKTsKLQkJcHJpbnRrICgiJXMgOiAlZCA6IG1lbSAweCVwIHNpb19pciAweCV4IHNpb19pZXNfcm8gMHgleCAiCi0JCQkJIm90aGVyX2lyIDB4JXggb3RoZXJfaWVzX3JvIDB4JXggbWFzayAweCV4XG4iLAorCQlwcmludGsgKCIlcyA6ICVkIDogbWVtIDB4JXAgc2lvX2lyIDB4JXggc2lvX2llcyAweCV4ICIKKwkJCQkib3RoZXJfaXIgMHgleCBvdGhlcl9pZXMgMHgleCBtYXNrIDB4JXhcbiIsCiAJCSAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXywKLQkJICAgICAodm9pZCAqKW1lbSwgcmVhZGwoJm1lbS0+c2lvX2lyKSwKLQkJICAgICByZWFkbCgmbWVtLT5zaW9faWVzX3JvKSwKLQkJICAgICByZWFkbCgmbWVtLT5vdGhlcl9pciksCi0JCSAgICAgcmVhZGwoJm1lbS0+b3RoZXJfaWVzX3JvKSwKKwkJICAgICAodm9pZCAqKW1lbSwgcmVhZGwoJm1lbS0+c2lvX2lyLnJhdyksCisJCSAgICAgcmVhZGwoJm1lbS0+c2lvX2llcy5yYXcpLAorCQkgICAgIHJlYWRsKCZtZW0tPm90aGVyX2lyLnJhdyksCisJCSAgICAgcmVhZGwoJm1lbS0+b3RoZXJfaWVzLnJhdyksCiAJCSAgICAgSU9DNF9PVEhFUl9JUl9BVEFfSU5UIHwgSU9DNF9PVEhFUl9JUl9BVEFfTUVNRVJSKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29mdC0+aXNfaXJfbG9jaywgZmxhZyk7CiAJfQpAQCAtMTA0OSwyMSArMTAxMSwyMCBAQAogICogaW9jNF9hdHRhY2hfbG9jYWwgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24uCiAgKgkJCUNhbGxlZCBhdCAqX2F0dGFjaCgpIHRpbWUgZm9yIGVhY2gKICAqCQkJSU9DNCB3aXRoIHNlcmlhbCBwb3J0cyBpbiB0aGUgc3lzdGVtLgotICogQGNvbnRyb2w6IGlvYzRfY29udHJvbCBwdHIKLSAqIEBwZGV2OiBQQ0kgaGFuZGxlIGZvciB0aGlzIGRldmljZQotICogQHNvZnQ6IHNvZnQgc3RydWN0IGZvciB0aGlzIGRldmljZQotICogQGlvYzQ6IGlvYzQgbWVtIHNwYWNlCisgKiBAaWRkOiBNYXN0ZXIgbW9kdWxlIGRhdGEgZm9yIHRoaXMgSU9DNAogICovCi1zdGF0aWMgaW50IGlubGluZSBpb2M0X2F0dGFjaF9sb2NhbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCXN0cnVjdCBpb2M0X2NvbnRyb2wgKmNvbnRyb2wsCi0JCQlzdHJ1Y3QgaW9jNF9zb2Z0ICpzb2Z0LCB2b2lkIF9faW9tZW0gKmlvYzRfbWVtLAotCQkJdm9pZCBfX2lvbWVtICppb2M0X3NlcmlhbCkKK3N0YXRpYyBpbnQgaW5saW5lIGlvYzRfYXR0YWNoX2xvY2FsKHN0cnVjdCBpb2M0X2RyaXZlcl9kYXRhICppZGQpCiB7CiAJc3RydWN0IGlvYzRfcG9ydCAqcG9ydDsKIAlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0c1tJT0M0X05VTV9TRVJJQUxfUE9SVFNdOwogCWludCBwb3J0X251bWJlcjsKIAl1aW50MTZfdCBpb2M0X3JldmlkX21pbiA9IDYyOwogCXVpbnQxNl90IGlvYzRfcmV2aWQ7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBpZGQtPmlkZF9wZGV2OworCXN0cnVjdCBpb2M0X2NvbnRyb2wqIGNvbnRyb2wgPSBpZGQtPmlkZF9zZXJpYWxfZGF0YTsKKwlzdHJ1Y3QgaW9jNF9zb2Z0ICpzb2Z0ID0gY29udHJvbC0+aWNfc29mdDsKKwl2b2lkIF9faW9tZW0gKmlvYzRfbWlzYyA9IGlkZC0+aWRkX21pc2NfcmVnczsKKwl2b2lkIF9faW9tZW0gKmlvYzRfc2VyaWFsID0gc29mdC0+aXNfaW9jNF9zZXJpYWxfYWRkcjsKIAogCS8qIElPQzQgZmlybXdhcmUgbXVzdCBiZSBhdCBsZWFzdCByZXYgNjIgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORF9TUEVDSUFMLCAmaW9jNF9yZXZpZCk7CkBAIC0xMDc2LDcgKzEwMzcsNyBAQAogCQkJCWlvYzRfcmV2aWQsIGlvYzRfcmV2aWRfbWluKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9Ci0JQlVHX09OKGlvYzRfbWVtID09IE5VTEwpOworCUJVR19PTihpb2M0X21pc2MgPT0gTlVMTCk7CiAJQlVHX09OKGlvYzRfc2VyaWFsID09IE5VTEwpOwogCiAJLyogQ3JlYXRlIHBvcnQgc3RydWN0dXJlcyBmb3IgZWFjaCBwb3J0ICovCkBAIC0xMTAwLDEwICsxMDYxLDE4IEBACiAJCXBvcnQtPmlwX2lvYzRfc29mdCA9IHNvZnQ7CiAJCXBvcnQtPmlwX3BkZXYgPSBwZGV2OwogCQlwb3J0LT5pcF9pZW5iID0gMDsKLQkJcG9ydC0+aXBfcGNpX2J1c19zcGVlZCA9IElPQzRfU0VSX1hJTl9DTEs7CisJCS8qIFVzZSBiYXVkIHJhdGUgY2FsY3VsYXRpb25zIGJhc2VkIG9uIGRldGVjdGVkIFBDSQorCQkgKiBidXMgc3BlZWQuICBTaW1wbHkgdGVzdCB3aGV0aGVyIHRoZSBQQ0kgY2xvY2sgaXMKKwkJICogcnVubmluZyBjbG9zZXIgdG8gNjZNSHogb3IgMzNNSHouCisJCSAqLworCQlpZiAoaWRkLT5jb3VudF9wZXJpb2QvSU9DNF9FWFRJTlRfQ09VTlRfRElWSVNPUiA8IDIwKSB7CisJCQlwb3J0LT5pcF9wY2lfYnVzX3NwZWVkID0gSU9DNF9TRVJfWElOX0NMS182NjsKKwkJfSBlbHNlIHsKKwkJCXBvcnQtPmlwX3BjaV9idXNfc3BlZWQgPSBJT0M0X1NFUl9YSU5fQ0xLXzMzOworCQl9CiAJCXBvcnQtPmlwX2JhdWQgPSA5NjAwOwogCQlwb3J0LT5pcF9jb250cm9sID0gY29udHJvbDsKLQkJcG9ydC0+aXBfbWVtID0gaW9jNF9tZW07CisJCXBvcnQtPmlwX21lbSA9IGlvYzRfbWlzYzsKIAkJcG9ydC0+aXBfc2VyaWFsID0gaW9jNF9zZXJpYWw7CiAKIAkJLyogcG9pbnQgdG8gdGhlIHJpZ2h0IGhvb2sgKi8KQEAgLTE2MDQsMTQgKzE1NzMsMTIgQEAKIAlzd2l0Y2ggKHByb3RvKSB7CiAJY2FzZSBQUk9UT19SUzIzMjoKIAkJLyogQ2xlYXIgdGhlIGFwcHJvcHJpYXRlIEdJTyBwaW4gKi8KLQkJd3JpdGVsKDAsICgmcG9ydC0+aXBfbWVtLT5ncHByXzAgKwotCQkJCSAgaG9va3MtPnJzNDIyX3NlbGVjdF9waW4pKTsKKwkJd3JpdGVsKDAsICgmcG9ydC0+aXBfbWVtLT5ncHByW2hvb2tzLT5yczQyMl9zZWxlY3RfcGluXS5yYXcpKTsKIAkJYnJlYWs7CiAKIAljYXNlIFBST1RPX1JTNDIyOgogCQkvKiBTZXQgdGhlIGFwcHJvcHJpYXRlIEdJTyBwaW4gKi8KLQkJd3JpdGVsKDEsICgmcG9ydC0+aXBfbWVtLT5ncHByXzAgKwotCQkJCSAgaG9va3MtPnJzNDIyX3NlbGVjdF9waW4pKTsKKwkJd3JpdGVsKDEsICgmcG9ydC0+aXBfbWVtLT5ncHByW2hvb2tzLT5yczQyMl9zZWxlY3RfcGluXS5yYXcpKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTg4NSw3ICsxODUyLDcgQEAKIAkJaWYgKHNpb19pciAmIGhvb2tzLT5pbnRyX2RlbHRhX2RjZCkgewogCQkJLyogQUNLIHRoZSBpbnRlcnJ1cHQgKi8KIAkJCXdyaXRlbChob29rcy0+aW50cl9kZWx0YV9kY2QsCi0JCQkJJnBvcnQtPmlwX21lbS0+c2lvX2lyKTsKKwkJCQkmcG9ydC0+aXBfbWVtLT5zaW9faXIucmF3KTsKIAogCQkJc2hhZG93ID0gcmVhZGwoJnBvcnQtPmlwX3NlcmlhbF9yZWdzLT5zaGFkb3cpOwogCkBAIC0xOTA3LDcgKzE4NzQsNyBAQAogCQlpZiAoc2lvX2lyICYgaG9va3MtPmludHJfZGVsdGFfY3RzKSB7CiAJCQkvKiBBQ0sgdGhlIGludGVycnVwdCAqLwogCQkJd3JpdGVsKGhvb2tzLT5pbnRyX2RlbHRhX2N0cywKLQkJCQkJJnBvcnQtPmlwX21lbS0+c2lvX2lyKTsKKwkJCQkJJnBvcnQtPmlwX21lbS0+c2lvX2lyLnJhdyk7CiAKIAkJCXNoYWRvdyA9IHJlYWRsKCZwb3J0LT5pcF9zZXJpYWxfcmVncy0+c2hhZG93KTsKIApAQCAtMTkyOCw3ICsxODk1LDcgQEAKIAkJaWYgKHNpb19pciAmIGhvb2tzLT5pbnRyX3J4X3RpbWVyKSB7CiAJCQkvKiBBQ0sgdGhlIGludGVycnVwdCAqLwogCQkJd3JpdGVsKGhvb2tzLT5pbnRyX3J4X3RpbWVyLAotCQkJCSZwb3J0LT5pcF9tZW0tPnNpb19pcik7CisJCQkJJnBvcnQtPmlwX21lbS0+c2lvX2lyLnJhdyk7CiAKIAkJCWlmICgocG9ydC0+aXBfbm90aWZ5ICYgTl9EQVRBX1JFQURZKQogCQkJCQkmJiAocG9ydC0+aXBfcG9ydCkpIHsKQEAgLTE5NzQsNyArMTk0MSw3IEBACiAKIAkJCS8qIEFDSyB0aGUgaW50ZXJydXB0ICovCiAJCQl3cml0ZWwoaG9va3MtPmludHJfdHhfZXhwbGljaXQsCi0JCQkJCSZwb3J0LT5pcF9tZW0tPnNpb19pcik7CisJCQkJCSZwb3J0LT5pcF9tZW0tPnNpb19pci5yYXcpOwogCiAJCQlpZiAocG9ydC0+aXBfbm90aWZ5ICYgTl9PVVRQVVRfTE9XQVQpCiAJCQkJaW9jNF9jYl9vdXRwdXRfbG93YXQocG9ydCk7CkBAIC0yNjM0LDcgKzI2MDEsOCBAQAogewogCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQ7CiAJc3RydWN0IHVhcnRfcG9ydCAqdGhlX3BvcnQ7Ci0Jc3RydWN0IGlvYzRfY29udHJvbCAqY29udHJvbCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaW9jNF9kcml2ZXJfZGF0YSAqaWRkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpb2M0X2NvbnRyb2wgKmNvbnRyb2wgPSBpZGQtPmlkZF9zZXJpYWxfZGF0YTsKIAlpbnQgaWk7CiAKIAlEUFJJTlRfQ09ORklHKCgiJXM6IGF0dGFjaCBwZGV2IDB4JXAgLSBjb250cm9sIDB4JXBcbiIsCkBAIC0yNjgwLDU1ICsyNjQ4LDI5IEBACiAKIC8qKgogICogaW9jNF9zZXJpYWxfYXR0YWNoX29uZSAtIHJlZ2lzdGVyIGF0dGFjaCBmdW5jdGlvbgotICoJCWNhbGxlZCBwZXIgY2FyZCBmb3VuZCBmcm9tIGlvYzRfc2VyaWFsX2RldGVjdCBhcyBwYXJ0Ci0gKgkJb2YgbW9kdWxlX2luaXQoKS4KLSAqIEBwZGV2OiBoYW5kbGUgZm9yIHRoaXMgY2FyZAotICogQHBjaV9pZDogcGNpIGlkIGZvciB0aGlzIGNhcmQKKyAqCQljYWxsZWQgcGVyIGNhcmQgZm91bmQgZnJvbSBJT0M0IG1hc3RlciBtb2R1bGUuCisgKiBAaWRkOiBNYXN0ZXIgbW9kdWxlIGRhdGEgZm9yIHRoaXMgSU9DNAogICovCiBpbnQKLWlvYzRfc2VyaWFsX2F0dGFjaF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCitpb2M0X3NlcmlhbF9hdHRhY2hfb25lKHN0cnVjdCBpb2M0X2RyaXZlcl9kYXRhICppZGQpCiB7Ci0Jc3RydWN0IGlvYzRfbWVtIF9faW9tZW0gKm1lbTsKLQl1bnNpZ25lZCBsb25nIHRtcF9hZGRyLCB0bXBfYWRkcjE7CisJdW5zaWduZWQgbG9uZyB0bXBfYWRkcjE7CiAJc3RydWN0IGlvYzRfc2VyaWFsIF9faW9tZW0gKnNlcmlhbDsKIAlzdHJ1Y3QgaW9jNF9zb2Z0ICpzb2Z0OwogCXN0cnVjdCBpb2M0X2NvbnRyb2wgKmNvbnRyb2w7Ci0JaW50IHRtcCwgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogCi0JRFBSSU5UX0NPTkZJRygoIiVzICgweCVwLCAweCVwKVxuIiwgX19GVU5DVElPTl9fLCBwZGV2LCBwY2lfaWQpKTsKLQotCS8qIE1hcCBpbiB0aGUgaW9jNCBtZW1vcnkgKi8KLQl0bXBfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQlpZiAoIXRtcF9hZGRyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAiaW9jNCAoJXApIDogdW5hYmxlIHRvIGdldCBQSU8gbWFwcGluZyBmb3IgIgotCQkJCSJNRU0gc3BhY2VcbiIsICh2b2lkICopcGRldik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKHRtcF9hZGRyLCBzaXplb2Yoc3RydWN0IGlvYzRfbWVtKSwgInNpb2M0X21lbSIpKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUCi0JCQkiaW9jNCAoJXApOiB1bmFibGUgdG8gZ2V0IHJlcXVlc3QgcmVnaW9uIGZvciAiCi0JCQkiTUVNIHNwYWNlXG4iLCAodm9pZCAqKXBkZXYpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JbWVtID0gaW9yZW1hcCh0bXBfYWRkciwgc2l6ZW9mKHN0cnVjdCBpb2M0X21lbSkpOwotCWlmICghbWVtKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAiaW9jNCAoJXApIDogdW5hYmxlIHRvIHJlbWFwIGlvYzQgbWVtb3J5XG4iLAotCQkJCSh2b2lkICopcGRldik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0MTsKLQl9CisJRFBSSU5UX0NPTkZJRygoIiVzICgweCVwLCAweCVwKVxuIiwgX19GVU5DVElPTl9fLCBpZGQtPmlkZF9wZGV2LCBpZGQtPmlkZF9wY2lfaWQpKTsKIAogCS8qIHJlcXVlc3Qgc2VyaWFsIHJlZ2lzdGVycyAqLwotCXRtcF9hZGRyMSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSArIElPQzRfU0VSSUFMX09GRlNFVDsKKwl0bXBfYWRkcjEgPSBpZGQtPmlkZF9iYXIwICsgSU9DNF9TRVJJQUxfT0ZGU0VUOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbih0bXBfYWRkcjEsIHNpemVvZihzdHJ1Y3QgaW9jNF9zZXJpYWwpLAogCQkJCQkic2lvYzRfdWFydCIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSJpb2M0ICglcCk6IHVuYWJsZSB0byBnZXQgcmVxdWVzdCByZWdpb24gZm9yICIKLQkJCQkidWFydCBzcGFjZVxuIiwgKHZvaWQgKilwZGV2KTsKKwkJCQkidWFydCBzcGFjZVxuIiwgKHZvaWQgKilpZGQtPmlkZF9wZGV2KTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQxOwogCX0KQEAgLTI3MzYsMTIgKzI2NzgsMTIgQEAKIAlpZiAoIXNlcmlhbCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgImlvYzQgKCVwKSA6IHVuYWJsZSB0byByZW1hcCBpb2M0IHNlcmlhbCByZWdpc3RlclxuIiwKLQkJCQkodm9pZCAqKXBkZXYpOworCQkJCSh2b2lkICopaWRkLT5pZGRfcGRldik7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0MjsKIAl9CiAJRFBSSU5UX0NPTkZJRygoIiVzIDogbWVtIDB4JXAsIHNlcmlhbCAweCVwXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgKHZvaWQgKiltZW0sICh2b2lkICopc2VyaWFsKSk7CisJCQkJX19GVU5DVElPTl9fLCAodm9pZCAqKWlkZC0+aWRkX21pc2NfcmVncywgKHZvaWQgKilzZXJpYWwpKTsKIAogCS8qIEdldCBtZW1vcnkgZm9yIHRoZSBuZXcgY2FyZCAqLwogCWNvbnRyb2wgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9jNF9jb250cm9sKSAqIElPQzRfTlVNX1NFUklBTF9QT1JUUywKQEAgLTI3NTQsNTkgKzI2OTYsNTYgQEAKIAkJZ290byBvdXQyOwogCX0KIAltZW1zZXQoY29udHJvbCwgMCwgc2l6ZW9mKHN0cnVjdCBpb2M0X2NvbnRyb2wpKTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgY29udHJvbCk7CisJaWRkLT5pZGRfc2VyaWFsX2RhdGEgPSBjb250cm9sOwogCiAJLyogQWxsb2NhdGUgdGhlIHNvZnQgc3RydWN0dXJlICovCiAJc29mdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb2M0X3NvZnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNvZnQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgImlvYzQgKCVwKTogdW5hYmxlIHRvIGdldCBtZW1vcnkgZm9yIHRoZSBzb2Z0IHN0cnVjdFxuIiwKLQkJICAgICAgICh2b2lkICopcGRldik7CisJCSAgICAgICAodm9pZCAqKWlkZC0+aWRkX3BkZXYpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDM7CiAJfQogCW1lbXNldChzb2Z0LCAwLCBzaXplb2Yoc3RydWN0IGlvYzRfc29mdCkpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnNvZnQtPmlzX2lyX2xvY2spOwotCXNvZnQtPmlzX2lvYzRfbWVtX2FkZHIgPSBtZW07CisJc29mdC0+aXNfaW9jNF9taXNjX2FkZHIgPSBpZGQtPmlkZF9taXNjX3JlZ3M7CiAJc29mdC0+aXNfaW9jNF9zZXJpYWxfYWRkciA9IHNlcmlhbDsKIAogCS8qIEluaXQgdGhlIElPQzQgKi8KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0NPTU1BTkQsICZ0bXApOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX0NPTU1BTkQsCi0JCQkgICAgICAgdG1wIHwgUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUik7Ci0KLQl3cml0ZWwoMHhmIDw8IElPQzRfU0lPX0NSX0NNRF9QVUxTRV9TSElGVCwgJm1lbS0+c2lvX2NyKTsKKwl3cml0ZWwoMHhmIDw8IElPQzRfU0lPX0NSX0NNRF9QVUxTRV9TSElGVCwKKwkgICAgICAgJmlkZC0+aWRkX21pc2NfcmVncy0+c2lvX2NyLnJhdyk7CiAKIAkvKiBFbmFibGUgc2VyaWFsIHBvcnQgbW9kZSBzZWxlY3QgZ2VuZXJpYyBQSU8gcGlucyBhcyBvdXRwdXRzICovCiAJd3JpdGVsKElPQzRfR1BDUl9VQVJUMF9NT0RFU0VMIHwgSU9DNF9HUENSX1VBUlQxX01PREVTRUwKIAkJfCBJT0M0X0dQQ1JfVUFSVDJfTU9ERVNFTCB8IElPQzRfR1BDUl9VQVJUM19NT0RFU0VMLAotCQkmbWVtLT5ncGNyX3MpOworCQkmaWRkLT5pZGRfbWlzY19yZWdzLT5ncGNyX3MucmF3KTsKIAotCS8qIENsZWFyIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJLyogQ2xlYXIgYW5kIGRpc2FibGUgYWxsIHNlcmlhbCBpbnRlcnJ1cHRzICovCiAJd3JpdGVfaXJlZyhzb2Z0LCB+MCwgSU9DNF9XX0lFQywgSU9DNF9TSU9fSU5UUl9UWVBFKTsKLQl3cml0ZWwofjAsICZtZW0tPnNpb19pcik7Ci0Jd3JpdGVfaXJlZyhzb2Z0LCB+KElPQzRfT1RIRVJfSVJfQVRBX0lOVCB8IElPQzRfT1RIRVJfSVJfQVRBX01FTUVSUiksCi0JCQlJT0M0X1dfSUVDLCBJT0M0X09USEVSX0lOVFJfVFlQRSk7Ci0Jd3JpdGVsKH4oSU9DNF9PVEhFUl9JUl9BVEFfTUVNRVJSIHwgSU9DNF9PVEhFUl9JUl9BVEFfTUVNRVJSKSwKLQkJCQkJJm1lbS0+b3RoZXJfaXIpOworCXdyaXRlbCh+MCwgJmlkZC0+aWRkX21pc2NfcmVncy0+c2lvX2lyLnJhdyk7CisJd3JpdGVfaXJlZyhzb2Z0LCBJT0M0X09USEVSX0lSX1NFUl9NRU1FUlIsIElPQzRfV19JRUMsCisJCSAgIElPQzRfT1RIRVJfSU5UUl9UWVBFKTsKKwl3cml0ZWwoSU9DNF9PVEhFUl9JUl9TRVJfTUVNRVJSLCAmaWRkLT5pZGRfbWlzY19yZWdzLT5vdGhlcl9pci5yYXcpOwogCWNvbnRyb2wtPmljX3NvZnQgPSBzb2Z0OwotCWlmICghcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpb2M0X2ludHIsIFNBX1NISVJRLAorCisJLyogSG9vayB1cCBpbnRlcnJ1cHQgaGFuZGxlciAqLworCWlmICghcmVxdWVzdF9pcnEoaWRkLT5pZGRfcGRldi0+aXJxLCBpb2M0X2ludHIsIFNBX1NISVJRLAogCQkJCSJzZ2ktaW9jNHNlcmlhbCIsICh2b2lkICopc29mdCkpIHsKLQkJY29udHJvbC0+aWNfaXJxID0gcGRldi0+aXJxOworCQljb250cm9sLT5pY19pcnEgPSBpZGQtPmlkZF9wZGV2LT5pcnE7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgIiVzIDogcmVxdWVzdF9pcnEgZmFpbHMgZm9yIElSUSAweCV4XG4gIiwKLQkJCV9fRlVOQ1RJT05fXywgcGRldi0+aXJxKTsKKwkJCV9fRlVOQ1RJT05fXywgaWRkLT5pZGRfcGRldi0+aXJxKTsKIAl9Ci0JaWYgKChyZXQgPSBpb2M0X2F0dGFjaF9sb2NhbChwZGV2LCBjb250cm9sLCBzb2Z0LAotCQkJCXNvZnQtPmlzX2lvYzRfbWVtX2FkZHIsCi0JCQkJc29mdC0+aXNfaW9jNF9zZXJpYWxfYWRkcikpKQorCXJldCA9IGlvYzRfYXR0YWNoX2xvY2FsKGlkZCk7CisJaWYgKHJldCkKIAkJZ290byBvdXQ0OwogCiAJLyogcmVnaXN0ZXIgcG9ydCB3aXRoIHRoZSBzZXJpYWwgY29yZSAqLwogCi0JaWYgKChyZXQgPSBpb2M0X3NlcmlhbF9jb3JlX2F0dGFjaChwZGV2KSkpCisJaWYgKChyZXQgPSBpb2M0X3NlcmlhbF9jb3JlX2F0dGFjaChpZGQtPmlkZF9wZGV2KSkpCiAJCWdvdG8gb3V0NDsKIAogCXJldHVybiByZXQ7CkBAIC0yODE5LDcgKzI3NTgsNiBAQAogb3V0MjoKIAlyZWxlYXNlX3JlZ2lvbih0bXBfYWRkcjEsIHNpemVvZihzdHJ1Y3QgaW9jNF9zZXJpYWwpKTsKIG91dDE6Ci0JcmVsZWFzZV9yZWdpb24odG1wX2FkZHIsIHNpemVvZihzdHJ1Y3QgaW9jNF9tZW0pKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yODI4LDExICsyNzY2LDEwIEBACiAvKioKICAqIGlvYzRfc2VyaWFsX3JlbW92ZV9vbmUgLSBkZXRhY2ggZnVuY3Rpb24KICAqCi0gKiBAcGRldjogaGFuZGxlIGZvciB0aGlzIGNhcmQKKyAqIEBpZGQ6IElPQzQgbWFzdGVyIG1vZHVsZSBkYXRhIGZvciB0aGlzIElPQzQKICAqLwogCi0jaWYgMAotdm9pZCBpb2M0X3NlcmlhbF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoraW50IGlvYzRfc2VyaWFsX3JlbW92ZV9vbmUoc3RydWN0IGlvYzRfZHJpdmVyX2RhdGEgKmlkZCkKIHsKIAlpbnQgaWk7CiAJc3RydWN0IGlvYzRfY29udHJvbCAqY29udHJvbDsKQEAgLTI4NDAsNyArMjc3Nyw3IEBACiAJc3RydWN0IGlvYzRfcG9ydCAqcG9ydDsKIAlzdHJ1Y3QgaW9jNF9zb2Z0ICpzb2Z0OwogCi0JY29udHJvbCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwljb250cm9sID0gaWRkLT5pZGRfc2VyaWFsX2RhdGE7CiAKIAlmb3IgKGlpID0gMDsgaWkgPCBJT0M0X05VTV9TRVJJQUxfUE9SVFM7IGlpKyspIHsKIAkJdGhlX3BvcnQgPSAmY29udHJvbC0+aWNfcG9ydFtpaV0uaWNwX3VhcnRfcG9ydDsKQEAgLTI4NjcsMTAgKzI4MDQsMTcgQEAKIAkJa2ZyZWUoc29mdCk7CiAJfQogCWtmcmVlKGNvbnRyb2wpOwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZpb2M0X3VhcnQpOworCWlkZC0+aWRkX3NlcmlhbF9kYXRhID0gTlVMTDsKKworCXJldHVybiAwOwogfQotI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaW9jNF9zdWJtb2R1bGUgaW9jNF9zZXJpYWxfc3VibW9kdWxlID0geworCS5pc19uYW1lID0gIklPQzRfc2VyaWFsIiwKKwkuaXNfb3duZXIgPSBUSElTX01PRFVMRSwKKwkuaXNfcHJvYmUgPSBpb2M0X3NlcmlhbF9hdHRhY2hfb25lLAorCS5pc19yZW1vdmUgPSBpb2M0X3NlcmlhbF9yZW1vdmVfb25lLAorfTsKIAogLyoqCiAgKiBpb2M0X3NlcmlhbF9pbml0IC0gbW9kdWxlIGluaXQKQEAgLTI4ODYsMTIgKzI4MzAsMjAgQEAKIAkJCV9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiByZXQ7CiAJfQotCXJldHVybiAwOworCisJLyogcmVnaXN0ZXIgd2l0aCBJT0M0IG1haW4gbW9kdWxlICovCisJcmV0dXJuIGlvYzRfcmVnaXN0ZXJfc3VibW9kdWxlKCZpb2M0X3NlcmlhbF9zdWJtb2R1bGUpOwogfQogCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgaW9jNF9zZXJpYWxfZXhpdCh2b2lkKQoreworCWlvYzRfdW5yZWdpc3Rlcl9zdWJtb2R1bGUoJmlvYzRfc2VyaWFsX3N1Ym1vZHVsZSk7CisJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmaW9jNF91YXJ0KTsKK30KKworbW9kdWxlX2luaXQoaW9jNF9zZXJpYWxfaW5pdCk7Cittb2R1bGVfZXhpdChpb2M0X3NlcmlhbF9leGl0KTsKKwogTU9EVUxFX0FVVEhPUigiUGF0IEdlZnJlIC0gU2lsaWNvbiBHcmFwaGljcyBJbmMuIChTR0kpIDxwZmdAc2dpLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU2VyaWFsIFBDSSBkcml2ZXIgbW9kdWxlIGZvciBTR0kgSU9DNCBCYXNlLUlPIENhcmQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotRVhQT1JUX1NZTUJPTChpb2M0X3NlcmlhbF9pbml0KTsKLUVYUE9SVF9TWU1CT0woaW9jNF9zZXJpYWxfYXR0YWNoX29uZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NuL0tjb25maWcgYi9kcml2ZXJzL3NuL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiOGQyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc24vS2NvbmZpZwpAQCAtMCwwICsxLDIwIEBACisjCisjIE1pc2NlbGxhbmVvdXMgU04tc3BlY2lmaWMgZGV2aWNlcworIworCittZW51ICJTTiBEZXZpY2VzIgorCitjb25maWcgU0dJX0lPQzQKKwl0cmlzdGF0ZSAiU0dJIElPQzQgQmFzZSBJTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gKElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9TTjIpICYmIE1NVElNRVIKKwlkZWZhdWx0IG0KKwktLS1oZWxwLS0tCisJVGhpcyBvcHRpb24gZW5hYmxlcyBiYXNpYyBzdXBwb3J0IGZvciB0aGUgU0dJIElPQzQtYmFzZWQgQmFzZSBJTworCWNvbnRyb2xsZXIgY2FyZC4gIFRoaXMgb3B0aW9uIGRvZXMgbm90IGVuYWJsZSBhbnkgc3BlY2lmaWMKKwlmdW5jdGlvbnMgb24gc3VjaCBhIGNhcmQsIGJ1dCBwcm92aWRlcyBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUKKwlmb3Igb3RoZXIgZHJpdmVycyB0byB1dGlsaXplLgorCisJSWYgeW91IGhhdmUgYW4gU0dJIEFsdGl4IHdpdGggYW4gSU9DNC1iYXNlZAorCUkvTyBjb250cm9sbGVyIHNheSBZLiAgT3RoZXJ3aXNlIHNheSBOLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NuL01ha2VmaWxlIGIvZHJpdmVycy9zbi9NYWtlZmlsZQppbmRleCA2MzFlNTQ5Li5jMmEyODQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc24vTWFrZWZpbGUKQEAgLTMsNCArMyw0IEBACiAjCiAjCiAKLW9iai0kKENPTkZJR19CTEtfREVWX1NHSUlPQzQpICs9IGlvYzQubworb2JqLSQoQ09ORklHX1NHSV9JT0M0KSArPSBpb2M0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc24vaW9jNC5jIGIvZHJpdmVycy9zbi9pb2M0LmMKaW5kZXggZDllNGVlMi4uZWE3NWIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zbi9pb2M0LmMKKysrIGIvZHJpdmVycy9zbi9pb2M0LmMKQEAgLTYsNjAgKzYsNDIyIEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqLwogCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2hpbSBkcml2ZXIgZm9yIHRoZSBJT0M0IElERSBhbmQgc2VyaWFsIGRyaXZlcnMuCisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG1hc3RlciBkcml2ZXIgbW9kdWxlIGZvciB1c2UgYnkgU0dJIElPQzQgc3ViZHJpdmVycy4KKyAqCisgKiBJdCBhbGxvY2F0ZXMgYW55IHJlc291cmNlcyBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBzdWJkZXZpY2VzLCBhbmQKKyAqIHByb3ZpZGVzIGFjY2Vzc29yIGZ1bmN0aW9ucyAod2hlcmUgbmVlZGVkKSBhbmQgdGhlIGxpa2UgZm9yIHRob3NlCisgKiByZXNvdXJjZXMuICBJdCBhbHNvIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciB0aGUgc3ViZGV2aWNlIG1vZHVsZXMKKyAqIHRvIHN1cHBvcnQgbG9hZGluZyBhbmQgdW5sb2FkaW5nLgorICoKKyAqIE5vbi1zaGFyZWQgcmVzb3VyY2VzIChlLmcuIGV4dGVybmFsIGludGVycnVwdCBBX0lOVF9PVVQgcmVnaXN0ZXIgcGFnZQorICogYWxpYXMsIHNlcmlhbCBwb3J0IGFuZCBVQVJUIHJlZ2lzdGVycykgYXJlIGhhbmRsZWQgYnkgdGhlIHN1YmRldmljZQorICogbW9kdWxlcyB0aGVtc2VsdmVzLgorICoKKyAqIFRoaXMgaXMgYWxsIG5lY2Vzc2FyeSBiZWNhdXNlIElPQzQgaXMgbm90IGltcGxlbWVudGVkIGFzIGEgbXVsdGktZnVuY3Rpb24KKyAqIFBDSSBkZXZpY2UsIGJ1dCBhbiBhbWFsZ2FtYXRpb24gb2YgZGlzcGFyYXRlIHJlZ2lzdGVycyBmb3Igc2V2ZXJhbAorICogdHlwZXMgb2YgZGV2aWNlIChBVEEsIHNlcmlhbCwgZXh0ZXJuYWwgaW50ZXJydXB0cykuICBUaGUgbm9ybWFsCisgKiByZXNvdXJjZSBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwgZG9lc24ndCBoYXZlIHF1aXRlIHRoZSByaWdodCBpbnRlcmZhY2VzCisgKiB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24gKGUuZy4gbXVsdGlwbGUgbW9kdWxlcyBjYW4ndCBjbGFpbSB0aGUgc2FtZQorICogUENJIElEKSwgdGh1cyB0aGlzIElPQzQgbWFzdGVyIG1vZHVsZS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2M0X2NvbW1vbi5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvYzQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbXRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KKyNpbmNsdWRlIDxhc20vc24vY2xrc3VwcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9zbi9zaHViX21tci5oPgogCisvKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucyAqCisgKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotaW9jNF9wcm9iZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCisvKiBUd2Vha2FibGUgdmFsdWVzICovCisKKy8qIFBDSSBidXMgc3BlZWQgZGV0ZWN0aW9uL2NhbGlicmF0aW9uICovCisjZGVmaW5lIElPQzRfQ0FMSUJSQVRFX0NPVU5UIDYzCS8qIENhbGlicmF0aW9uIGN5Y2xlIHBlcmlvZCAqLworI2RlZmluZSBJT0M0X0NBTElCUkFURV9DWUNMRVMgMjU2CS8qIEF2ZXJhZ2Ugb3ZlciB0aGlzIG1hbnkgY3ljbGVzICovCisjZGVmaW5lIElPQzRfQ0FMSUJSQVRFX0RJU0NBUkQgMgkvKiBEaXNjYXJkIGZpcnN0IGZldyBjeWNsZXMgKi8KKyNkZWZpbmUgSU9DNF9DQUxJQlJBVEVfTE9XX01IWiAyNQkvKiBMb3dlciBib3VuZCBvbiBidXMgc3BlZWQgc2FuaXR5ICovCisjZGVmaW5lIElPQzRfQ0FMSUJSQVRFX0hJR0hfTUhaIDc1CS8qIFVwcGVyIGJvdW5kIG9uIGJ1cyBzcGVlZCBzYW5pdHkgKi8KKyNkZWZpbmUgSU9DNF9DQUxJQlJBVEVfREVGQVVMVF9NSFogNjYJLyogQXNzdW1lZCBpZiBzYW5pdHkgY2hlY2sgZmFpbHMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKgorICogU3VibW9kdWxlIG1hbmFnZW1lbnQgKgorICoqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIExJU1RfSEVBRChpb2M0X2RldmljZXMpOworc3RhdGljIERFQ0xBUkVfUldTRU0oaW9jNF9kZXZpY2VzX3J3c2VtKTsKKworc3RhdGljIExJU1RfSEVBRChpb2M0X3N1Ym1vZHVsZXMpOworc3RhdGljIERFQ0xBUkVfUldTRU0oaW9jNF9zdWJtb2R1bGVzX3J3c2VtKTsKKworLyogUmVnaXN0ZXIgYW4gSU9DNCBzdWJtb2R1bGUgKi8KK2ludAoraW9jNF9yZWdpc3Rlcl9zdWJtb2R1bGUoc3RydWN0IGlvYzRfc3VibW9kdWxlICppcykKIHsKKwlzdHJ1Y3QgaW9jNF9kcml2ZXJfZGF0YSAqaWRkOworCisJZG93bl93cml0ZSgmaW9jNF9zdWJtb2R1bGVzX3J3c2VtKTsKKwlsaXN0X2FkZCgmaXMtPmlzX2xpc3QsICZpb2M0X3N1Ym1vZHVsZXMpOworCXVwX3dyaXRlKCZpb2M0X3N1Ym1vZHVsZXNfcndzZW0pOworCisJLyogSW5pdGlhbGl6ZSBzdWJtb2R1bGUgZm9yIGVhY2ggSU9DNCAqLworCWlmICghaXMtPmlzX3Byb2JlKQorCQlyZXR1cm4gMDsKKworCWRvd25fcmVhZCgmaW9jNF9kZXZpY2VzX3J3c2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlkZCwgJmlvYzRfZGV2aWNlcywgaWRkX2xpc3QpIHsKKwkJaWYgKGlzLT5pc19wcm9iZShpZGQpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBJT0M0IHN1Ym1vZHVsZSAlcyBwcm9iZSBmYWlsZWQgIgorCQkJICAgICAgICJmb3IgcGNpX2RldiAlcyIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBtb2R1bGVfbmFtZShpcy0+aXNfb3duZXIpLAorCQkJICAgICAgIHBjaV9uYW1lKGlkZC0+aWRkX3BkZXYpKTsKKwkJfQorCX0KKwl1cF9yZWFkKCZpb2M0X2RldmljZXNfcndzZW0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFVucmVnaXN0ZXIgYW4gSU9DNCBzdWJtb2R1bGUgKi8KK3ZvaWQKK2lvYzRfdW5yZWdpc3Rlcl9zdWJtb2R1bGUoc3RydWN0IGlvYzRfc3VibW9kdWxlICppcykKK3sKKwlzdHJ1Y3QgaW9jNF9kcml2ZXJfZGF0YSAqaWRkOworCisJZG93bl93cml0ZSgmaW9jNF9zdWJtb2R1bGVzX3J3c2VtKTsKKwlsaXN0X2RlbCgmaXMtPmlzX2xpc3QpOworCXVwX3dyaXRlKCZpb2M0X3N1Ym1vZHVsZXNfcndzZW0pOworCisJLyogUmVtb3ZlIHN1Ym1vZHVsZSBmb3IgZWFjaCBJT0M0ICovCisJaWYgKCFpcy0+aXNfcmVtb3ZlKQorCQlyZXR1cm47CisKKwlkb3duX3JlYWQoJmlvYzRfZGV2aWNlc19yd3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpZGQsICZpb2M0X2RldmljZXMsIGlkZF9saXN0KSB7CisJCWlmIChpcy0+aXNfcmVtb3ZlKGlkZCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IElPQzQgc3VibW9kdWxlICVzIHJlbW92ZSBmYWlsZWQgIgorCQkJICAgICAgICJmb3IgcGNpX2RldiAlcy5cbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBtb2R1bGVfbmFtZShpcy0+aXNfb3duZXIpLAorCQkJICAgICAgIHBjaV9uYW1lKGlkZC0+aWRkX3BkZXYpKTsKKwkJfQorCX0KKwl1cF9yZWFkKCZpb2M0X2RldmljZXNfcndzZW0pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqCisgKiBEZXZpY2UgbWFuYWdlbWVudCAqCisgKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElPQzRfQ0FMSUJSQVRFX0xPV19MSU1JVCBcCisJKDEwMDAqSU9DNF9FWFRJTlRfQ09VTlRfRElWSVNPUi9JT0M0X0NBTElCUkFURV9MT1dfTUhaKQorI2RlZmluZSBJT0M0X0NBTElCUkFURV9ISUdIX0xJTUlUIFwKKwkoMTAwMCpJT0M0X0VYVElOVF9DT1VOVF9ESVZJU09SL0lPQzRfQ0FMSUJSQVRFX0hJR0hfTUhaKQorI2RlZmluZSBJT0M0X0NBTElCUkFURV9ERUZBVUxUIFwKKwkoMTAwMCpJT0M0X0VYVElOVF9DT1VOVF9ESVZJU09SL0lPQzRfQ0FMSUJSQVRFX0RFRkFVTFRfTUhaKQorCisjZGVmaW5lIElPQzRfQ0FMSUJSQVRFX0VORCBcCisJKElPQzRfQ0FMSUJSQVRFX0NZQ0xFUyArIElPQzRfQ0FMSUJSQVRFX0RJU0NBUkQpCisKKyNkZWZpbmUgSU9DNF9JTlRfT1VUX01PREVfVE9HR0xFIDB4NwkvKiBUb2dnbGUgSU5UX09VVCBldmVyeSBDT1VOVCsxIHRpY2tzICovCisKKy8qIERldGVybWluZXMgZXh0ZXJuYWwgaW50ZXJydXB0IG91dHB1dCBjbG9jayBwZXJpb2Qgb2YgdGhlIFBDSSBidXMgYW4KKyAqIElPQzQgaXMgYXR0YWNoZWQgdG8uICBUaGlzIHZhbHVlIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgUENJCisgKiBidXMgc3BlZWQuCisgKgorICogSU9DNCBoYXMgYSBkZXNpZ24gZmVhdHVyZSB0aGF0IHZhcmlvdXMgaW50ZXJuYWwgdGltZXJzIGFyZSBkZXJpdmVkIGZyb20KKyAqIHRoZSBQQ0kgYnVzIGNsb2NrLiAgVGhpcyBjYXVzZXMgSU9DNCBkZXZpY2UgZHJpdmVycyB0byBuZWVkIHRvIHRha2UgdGhlCisgKiBidXMgc3BlZWQgaW50byBhY2NvdW50IHdoZW4gc2V0dGluZyB2YXJpb3VzIHJlZ2lzdGVyIHZhbHVlcyAoZS5nLiBJTlRfT1VUCisgKiByZWdpc3RlciBDT1VOVCBmaWVsZCwgVUFSVCBkaXZpc29ycywgZXRjKS4gIFNpbmNlIHRoaXMgaW5mb3JtYXRpb24gaXMKKyAqIG5lZWRlZCBieSBzZXZlcmFsIHN1YmRyaXZlcnMsIGl0IGlzIGRldGVybWluZWQgYnkgdGhlIG1haW4gSU9DNCBkcml2ZXIsCisgKiBldmVuIHRob3VnaCB0aGUgZm9sbG93aW5nIGNvZGUgdXRpbGl6ZXMgZXh0ZXJuYWwgaW50ZXJydXB0IHJlZ2lzdGVycworICogdG8gcGVyZm9ybSB0aGUgc3BlZWQgY2FsY3VsYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitpb2M0X2Nsb2NrX2NhbGlicmF0ZShzdHJ1Y3QgaW9jNF9kcml2ZXJfZGF0YSAqaWRkKQoreworCWV4dGVybiB1bnNpZ25lZCBsb25nIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZDsKKwl1bmlvbiBpb2M0X2ludF9vdXQgaW50X291dDsKKwl1bmlvbiBpb2M0X2dwY3IgZ3BjcjsKKwl1bnNpZ25lZCBpbnQgc3RhdGUsIGxhc3Rfc3RhdGUgPSAxOworCXVpbnQ2NF90IHN0YXJ0ID0gMCwgZW5kLCBwZXJpb2Q7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKworCS8qIEVuYWJsZSBvdXRwdXQgKi8KKwlncGNyLnJhdyA9IDA7CisJZ3Bjci5maWVsZHMuZGlyID0gSU9DNF9HUENSX0RJUl8wOworCWdwY3IuZmllbGRzLmludF9vdXRfZW4gPSAxOworCXdyaXRlbChncGNyLnJhdywgJmlkZC0+aWRkX21pc2NfcmVncy0+Z3Bjcl9zLnJhdyk7CisKKwkvKiBSZXNldCB0byBwb3dlci1vbiBzdGF0ZSAqLworCXdyaXRlbCgwLCAmaWRkLT5pZGRfbWlzY19yZWdzLT5pbnRfb3V0LnJhdyk7CisJbW1pb3diKCk7CisKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICIlczogQ2FsaWJyYXRpbmcgUENJIGJ1cyBzcGVlZCAiCisJICAgICAgICJmb3IgcGNpX2RldiAlcyAuLi4gIiwgX19GVU5DVElPTl9fLCBwY2lfbmFtZShpZGQtPmlkZF9wZGV2KSk7CisJLyogU2V0IHVwIHNxdWFyZSB3YXZlICovCisJaW50X291dC5yYXcgPSAwOworCWludF9vdXQuZmllbGRzLmNvdW50ID0gSU9DNF9DQUxJQlJBVEVfQ09VTlQ7CisJaW50X291dC5maWVsZHMubW9kZSA9IElPQzRfSU5UX09VVF9NT0RFX1RPR0dMRTsKKwlpbnRfb3V0LmZpZWxkcy5kaWFnID0gMDsKKwl3cml0ZWwoaW50X291dC5yYXcsICZpZGQtPmlkZF9taXNjX3JlZ3MtPmludF9vdXQucmF3KTsKKwltbWlvd2IoKTsKKworCS8qIENoZWNrIHNxdWFyZSB3YXZlIHBlcmlvZCBhdmVyYWdlZCBvdmVyIHNvbWUgbnVtYmVyIG9mIGN5Y2xlcyAqLworCWRvIHsKKwkJaW50X291dC5yYXcgPSByZWFkbCgmaWRkLT5pZGRfbWlzY19yZWdzLT5pbnRfb3V0LnJhdyk7CisJCXN0YXRlID0gaW50X291dC5maWVsZHMuaW50X291dDsKKwkJaWYgKCFsYXN0X3N0YXRlICYmIHN0YXRlKSB7CisJCQljb3VudCsrOworCQkJaWYgKGNvdW50ID09IElPQzRfQ0FMSUJSQVRFX0VORCkgeworCQkJCWVuZCA9IHJ0Y190aW1lKCk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKGNvdW50ID09IElPQzRfQ0FMSUJSQVRFX0RJU0NBUkQpCisJCQkJc3RhcnQgPSBydGNfdGltZSgpOworCQl9CisJCWxhc3Rfc3RhdGUgPSBzdGF0ZTsKKwl9IHdoaWxlICgxKTsKKworCS8qIENhbGN1bGF0aW9uIHJlYXJyYW5nZWQgdG8gcHJlc2VydmUgaW50ZXJtZWRpYXRlIHByZWNpc2lvbi4KKwkgKiBMb2dpY2FsbHk6CisJICogMS4gImVuZCAtIHN0YXJ0IiBnaXZlcyB1cyBudW1iZXIgb2YgUlRDIGN5Y2xlcyBvdmVyIGFsbCB0aGUKKwkgKiAgICBzcXVhcmUgd2F2ZSBjeWNsZXMgbWVhc3VyZWQuCisJICogMi4gRGl2aWRlIGJ5IG51bWJlciBvZiBzcXVhcmUgd2F2ZSBjeWNsZXMgdG8gZ2V0IG51bWJlciBvZgorCSAqICAgIFJUQyBjeWNsZXMgcGVyIHNxdWFyZSB3YXZlIGN5Y2xlLgorCSAqIDMuIERpdmlkZSBieSAyKihpbnRfb3V0LmZpZWxkcy5jb3VudCsxKSwgd2hpY2ggaXMgdGhlIGZvcm11bGEKKwkgKiAgICBieSB3aGljaCB0aGUgSU9DNCBnZW5lcmF0ZXMgdGhlIHNxdWFyZSB3YXZlLCB0byBnZXQgdGhlCisJICogICAgbnVtYmVyIG9mIFJUQyBjeWNsZXMgcGVyIElPQzQgSU5UX09VVCBjb3VudC4KKwkgKiA0LiBEaXZpZGUgYnkgc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kIHRvIGdldCBzZWNvbmRzIHBlcgorCSAqICAgIGNvdW50LgorCSAqIDUuIE11bHRpcGx5IGJ5IDFFOSB0byBnZXQgbmFub3NlY29uZHMgcGVyIGNvdW50LgorCSAqLworCXBlcmlvZCA9ICgoZW5kIC0gc3RhcnQpICogMTAwMDAwMDAwMCkgLworCSAgICAoSU9DNF9DQUxJQlJBVEVfQ1lDTEVTICogMiAqIChJT0M0X0NBTElCUkFURV9DT1VOVCArIDEpCisJICAgICAqIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCk7CisKKwkvKiBCb3VuZHMgY2hlY2sgdGhlIHJlc3VsdC4gKi8KKwlpZiAocGVyaW9kID4gSU9DNF9DQUxJQlJBVEVfTE9XX0xJTUlUIHx8CisJICAgIHBlcmlvZCA8IElPQzRfQ0FMSUJSQVRFX0hJR0hfTElNSVQpIHsKKwkJcHJpbnRrKCJmYWlsZWQuIEFzc3VtaW5nIFBDSSBjbG9jayB0aWNrcyBhcmUgJWQgbnMuXG4iLAorCQkgICAgICAgSU9DNF9DQUxJQlJBVEVfREVGQVVMVCAvIElPQzRfRVhUSU5UX0NPVU5UX0RJVklTT1IpOworCQlwZXJpb2QgPSBJT0M0X0NBTElCUkFURV9ERUZBVUxUOworCX0gZWxzZSB7CisJCXByaW50aygic3VjY2VlZGVkLiBQQ0kgY2xvY2sgdGlja3MgYXJlICVsZCBucy5cbiIsCisJCSAgICAgICBwZXJpb2QgLyBJT0M0X0VYVElOVF9DT1VOVF9ESVZJU09SKTsKKwl9CisKKwkvKiBSZW1lbWJlciByZXN1bHRzLiAgV2Ugc3RvcmUgdGhlIGV4dGludCBjbG9jayBwZXJpb2QgcmF0aGVyCisJICogdGhhbiB0aGUgUENJIGNsb2NrIHBlcmlvZCBzbyB0aGF0IGdyZWF0ZXIgcHJlY2lzaW9uIGlzCisJICogcmV0YWluZWQuICBEaXZpZGUgYnkgSU9DNF9FWFRJTlRfQ09VTlRfRElWSVNPUiB0byBnZXQKKwkgKiBQQ0kgY2xvY2sgcGVyaW9kLgorCSAqLworCWlkZC0+Y291bnRfcGVyaW9kID0gcGVyaW9kOworfQorCisvKiBBZGRzIGEgbmV3IGluc3RhbmNlIG9mIGFuIElPQzQgY2FyZCAqLworc3RhdGljIGludAoraW9jNF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3sKKwlzdHJ1Y3QgaW9jNF9kcml2ZXJfZGF0YSAqaWRkOworCXN0cnVjdCBpb2M0X3N1Ym1vZHVsZSAqaXM7CisJdWludDMyX3QgcGNtZDsKIAlpbnQgcmV0OwogCisJLyogRW5hYmxlIElPQzQgYW5kIHRha2Ugb3duZXJzaGlwIG9mIGl0ICovCiAJaWYgKChyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICIlczogRmFpbGVkIHRvIGVuYWJsZSBkZXZpY2Ugd2l0aCAiCi0JCQkJInBjaV9kZXYgMHglcC4uLiByZXR1cm5pbmdcbiIsCi0JCQkJX19GVU5DVElPTl9fLCAodm9pZCAqKXBkZXYpOwotCQlyZXR1cm4gcmV0OworCQkgICAgICAgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIElPQzQgZGV2aWNlIGZvciBwY2lfZGV2ICVzLlxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgcGNpX25hbWUocGRldikpOworCQlnb3RvIG91dDsKIAl9CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKLQkvKiBhdHRhY2ggZWFjaCBzdWItZGV2aWNlICovCi0JcmV0ID0gaW9jNF9pZGVfYXR0YWNoX29uZShwZGV2LCBwY2lfaWQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JcmV0dXJuIGlvYzRfc2VyaWFsX2F0dGFjaF9vbmUocGRldiwgcGNpX2lkKTsKKwkvKiBTZXQgdXAgcGVyLUlPQzQgZGF0YSAqLworCWlkZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb2M0X2RyaXZlcl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZGQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgSU9DNCBkYXRhIGZvciBwY2lfZGV2ICVzLlxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgcGNpX25hbWUocGRldikpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9pZGQ7CisJfQorCWlkZC0+aWRkX3BkZXYgPSBwZGV2OworCWlkZC0+aWRkX3BjaV9pZCA9IHBjaV9pZDsKKworCS8qIE1hcCBJT0M0IG1pc2MgcmVnaXN0ZXJzLiAgVGhlc2UgYXJlIHNoYXJlZCBiZXR3ZWVuIHN1YmRldmljZXMKKwkgKiBzbyB0aGUgbWFpbiBJT0M0IG1vZHVsZSBtYW5hZ2VzIHRoZW0uCisJICovCisJaWRkLT5pZGRfYmFyMCA9IHBjaV9yZXNvdXJjZV9zdGFydChpZGQtPmlkZF9wZGV2LCAwKTsKKwlpZiAoIWlkZC0+aWRkX2JhcjApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIiVzOiBVbmFibGUgdG8gZmluZCBJT0M0IG1pc2MgcmVzb3VyY2UgIgorCQkgICAgICAgImZvciBwY2lfZGV2ICVzLlxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgcGNpX25hbWUoaWRkLT5pZGRfcGRldikpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9wY2k7CisJfQorCWlmICghcmVxdWVzdF9yZWdpb24oaWRkLT5pZGRfYmFyMCwgc2l6ZW9mKHN0cnVjdCBpb2M0X21pc2NfcmVncyksCisJCQkgICAgImlvYzRfbWlzYyIpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICIlczogVW5hYmxlIHRvIHJlcXVlc3QgSU9DNCBtaXNjIHJlZ2lvbiAiCisJCSAgICAgICAiZm9yIHBjaV9kZXYgJXMuXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBwY2lfbmFtZShpZGQtPmlkZF9wZGV2KSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3BjaTsKKwl9CisJaWRkLT5pZGRfbWlzY19yZWdzID0gaW9yZW1hcChpZGQtPmlkZF9iYXIwLAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBpb2M0X21pc2NfcmVncykpOworCWlmICghaWRkLT5pZGRfbWlzY19yZWdzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICIlczogVW5hYmxlIHRvIHJlbWFwIElPQzQgbWlzYyByZWdpb24gIgorCQkgICAgICAgImZvciBwY2lfZGV2ICVzLlxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgcGNpX25hbWUoaWRkLT5pZGRfcGRldikpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9taXNjX3JlZ2lvbjsKKwl9CisKKwkvKiBGYWlsc2FmZSBwb3J0aW9uIG9mIHBlci1JT0M0IGluaXRpYWxpemF0aW9uICovCisKKwkvKiBJbml0aWFsaXplIElPQzQgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoaWRkLT5pZGRfcGRldiwgUENJX0NPTU1BTkQsICZwY21kKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGlkZC0+aWRkX3BkZXYsIFBDSV9DT01NQU5ELAorCQkJICAgICAgIHBjbWQgfCBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSKTsKKworCS8qIERldGVybWluZSBQQ0kgY2xvY2sgKi8KKwlpb2M0X2Nsb2NrX2NhbGlicmF0ZShpZGQpOworCisJLyogRGlzYWJsZS9jbGVhciBhbGwgaW50ZXJydXB0cy4gIE5lZWQgdG8gZG8gdGhpcyBoZXJlIGxlc3QKKwkgKiBvbmUgc3VibW9kdWxlIHJlcXVlc3QgdGhlIHNoYXJlZCBJT0M0IElSUSwgYnV0IGludGVycnVwdAorCSAqIGlzIGdlbmVyYXRlZCBieSBhIGRpZmZlcmVudCBzdWJkZXZpY2UuCisJICovCisJLyogRGlzYWJsZSAqLworCXdyaXRlbCh+MCwgJmlkZC0+aWRkX21pc2NfcmVncy0+b3RoZXJfaWVjLnJhdyk7CisJd3JpdGVsKH4wLCAmaWRkLT5pZGRfbWlzY19yZWdzLT5zaW9faWVjKTsKKwkvKiBDbGVhciAoaS5lLiBhY2tub3dsZWRnZSkgKi8KKwl3cml0ZWwofjAsICZpZGQtPmlkZF9taXNjX3JlZ3MtPm90aGVyX2lyLnJhdyk7CisJd3JpdGVsKH4wLCAmaWRkLT5pZGRfbWlzY19yZWdzLT5zaW9faXIpOworCisJLyogVHJhY2sgUENJLWRldmljZSBzcGVjaWZpYyBkYXRhICovCisJaWRkLT5pZGRfc2VyaWFsX2RhdGEgPSBOVUxMOworCXBjaV9zZXRfZHJ2ZGF0YShpZGQtPmlkZF9wZGV2LCBpZGQpOworCWRvd25fd3JpdGUoJmlvYzRfZGV2aWNlc19yd3NlbSk7CisJbGlzdF9hZGQoJmlkZC0+aWRkX2xpc3QsICZpb2M0X2RldmljZXMpOworCXVwX3dyaXRlKCZpb2M0X2RldmljZXNfcndzZW0pOworCisJLyogQWRkIHRoaXMgSU9DNCB0byBhbGwgc3VibW9kdWxlcyAqLworCWRvd25fcmVhZCgmaW9jNF9zdWJtb2R1bGVzX3J3c2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlzLCAmaW9jNF9zdWJtb2R1bGVzLCBpc19saXN0KSB7CisJCWlmIChpcy0+aXNfcHJvYmUgJiYgaXMtPmlzX3Byb2JlKGlkZCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IElPQzQgc3VibW9kdWxlIDB4JXMgcHJvYmUgZmFpbGVkICIKKwkJCSAgICAgICAiZm9yIHBjaV9kZXYgJXMuXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgbW9kdWxlX25hbWUoaXMtPmlzX293bmVyKSwKKwkJCSAgICAgICBwY2lfbmFtZShpZGQtPmlkZF9wZGV2KSk7CisJCX0KKwl9CisJdXBfcmVhZCgmaW9jNF9zdWJtb2R1bGVzX3J3c2VtKTsKKworCXJldHVybiAwOworCitvdXRfbWlzY19yZWdpb246CisJcmVsZWFzZV9yZWdpb24oaWRkLT5pZGRfYmFyMCwgc2l6ZW9mKHN0cnVjdCBpb2M0X21pc2NfcmVncykpOworb3V0X3BjaToKKwlrZnJlZShpZGQpOworb3V0X2lkZDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAotLyogcGNpIGRldmljZSBzdHJ1Y3QgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpb2M0X3NfaWRfdGFibGVbXSA9IHsKKy8qIFJlbW92ZXMgYSBwYXJ0aWN1bGFyIGluc3RhbmNlIG9mIGFuIElPQzQgY2FyZC4gKi8KK3N0YXRpYyB2b2lkCitpb2M0X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaW9jNF9zdWJtb2R1bGUgKmlzOworCXN0cnVjdCBpb2M0X2RyaXZlcl9kYXRhICppZGQ7CisKKwlpZGQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiBSZW1vdmUgdGhpcyBJT0M0IGZyb20gYWxsIHN1Ym1vZHVsZXMgKi8KKwlkb3duX3JlYWQoJmlvYzRfc3VibW9kdWxlc19yd3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpcywgJmlvYzRfc3VibW9kdWxlcywgaXNfbGlzdCkgeworCQlpZiAoaXMtPmlzX3JlbW92ZSAmJiBpcy0+aXNfcmVtb3ZlKGlkZCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IElPQzQgc3VibW9kdWxlIDB4JXMgcmVtb3ZlIGZhaWxlZCAiCisJCQkgICAgICAgImZvciBwY2lfZGV2ICVzLlxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIG1vZHVsZV9uYW1lKGlzLT5pc19vd25lciksCisJCQkgICAgICAgcGNpX25hbWUoaWRkLT5pZGRfcGRldikpOworCQl9CisJfQorCXVwX3JlYWQoJmlvYzRfc3VibW9kdWxlc19yd3NlbSk7CisKKwkvKiBSZWxlYXNlIHJlc291cmNlcyAqLworCWlvdW5tYXAoaWRkLT5pZGRfbWlzY19yZWdzKTsKKwlpZiAoIWlkZC0+aWRkX2JhcjApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIiVzOiBVbmFibGUgdG8gZ2V0IElPQzQgbWlzYyBtYXBwaW5nIGZvciBwY2lfZGV2ICVzLiAiCisJCSAgICAgICAiRGV2aWNlIHJlbW92YWwgbWF5IGJlIGluY29tcGxldGUuXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBwY2lfbmFtZShpZGQtPmlkZF9wZGV2KSk7CisJfQorCXJlbGVhc2VfcmVnaW9uKGlkZC0+aWRkX2JhcjAsIHNpemVvZihzdHJ1Y3QgaW9jNF9taXNjX3JlZ3MpKTsKKworCS8qIERpc2FibGUgSU9DNCBhbmQgcmVsaW5xdWlzaCAqLworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCS8qIFJlbW92ZSBhbmQgZnJlZSBkcml2ZXIgZGF0YSAqLworCWRvd25fd3JpdGUoJmlvYzRfZGV2aWNlc19yd3NlbSk7CisJbGlzdF9kZWwoJmlkZC0+aWRkX2xpc3QpOworCXVwX3dyaXRlKCZpb2M0X2RldmljZXNfcndzZW0pOworCWtmcmVlKGlkZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpb2M0X2lkX3RhYmxlW10gPSB7CiAJe1BDSV9WRU5ET1JfSURfU0dJLCBQQ0lfREVWSUNFX0lEX1NHSV9JT0M0LCBQQ0lfQU5ZX0lELAogCSBQQ0lfQU5ZX0lELCAweDBiNDAwMCwgMHhGRkZGRkZ9LAogCXswfQogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpb2M0X3NfaWRfdGFibGUpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgX19kZXZpbml0ZGF0YSBpb2M0X3NfZHJpdmVyID0gewotCS5uYW1lCT0gIklPQzQiLAotCS5pZF90YWJsZSA9IGlvYzRfc19pZF90YWJsZSwKLQkucHJvYmUJPSBpb2M0X3Byb2JlX29uZSwKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBfX2RldmluaXRkYXRhIGlvYzRfZHJpdmVyID0geworCS5uYW1lID0gIklPQzQiLAorCS5pZF90YWJsZSA9IGlvYzRfaWRfdGFibGUsCisJLnByb2JlID0gaW9jNF9wcm9iZSwKKwkucmVtb3ZlID0gaW9jNF9yZW1vdmUsCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpb2M0X2RldGVjdCh2b2lkKQorTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlvYzRfaWRfdGFibGUpOworCisvKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2R1bGUgbWFuYWdlbWVudCAqCisgKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNb2R1bGUgbG9hZCAqLworc3RhdGljIGludCBfX2RldmluaXQKK2lvYzRfaW5pdCh2b2lkKQogewotCWlvYzRfc2VyaWFsX2luaXQoKTsKLQotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpb2M0X3NfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaW9jNF9kcml2ZXIpOwogfQotbW9kdWxlX2luaXQoaW9jNF9kZXRlY3QpOwogCi1NT0RVTEVfQVVUSE9SKCJQYXQgR2VmcmUgLSBTaWxpY29uIEdyYXBoaWNzIEluYy4gKFNHSSkgPHBmZ0BzZ2kuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0kgZHJpdmVyIG1vZHVsZSBmb3IgU0dJIElPQzQgQmFzZS1JTyBDYXJkIik7CisvKiBNb2R1bGUgdW5sb2FkICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK2lvYzRfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaW9jNF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpb2M0X2luaXQpOworbW9kdWxlX2V4aXQoaW9jNF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQnJlbnQgQ2FzYXZhbnQgLSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIDxiY2FzYXZhbkBzZ2kuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0kgZHJpdmVyIG1hc3RlciBtb2R1bGUgZm9yIFNHSSBJT0M0IEJhc2UtSU8gQ2FyZCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitFWFBPUlRfU1lNQk9MKGlvYzRfcmVnaXN0ZXJfc3VibW9kdWxlKTsKK0VYUE9SVF9TWU1CT0woaW9jNF91bnJlZ2lzdGVyX3N1Ym1vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggNmJlOGZiZS4uMDRkMzEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMzIyLDYgKzMyMiwyMiBAQAogCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIHRoZSBBbWlnYSBGcmFtZU1hc3RlcgogCSAgY2FyZCBmcm9tIEJTQyAoZXhoaWJpdGVkIDE5OTIgYnV0IG5vdCBzaGlwcGVkIGFzIGEgQ0JNIHByb2R1Y3QpLgogCitjb25maWcgRkJfQVJDCisJdHJpc3RhdGUgIkFyYyBNb25vY2hyb21lIExDRCBib2FyZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkIgJiYgWDg2CisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9TT0ZUX0NVUlNPUgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQXJjIE1vbm9jaHJvbWUgTENEIGJvYXJkLiBUaGUgYm9hcmQKKwkgIGlzIGJhc2VkIG9uIHRoZSBLUy0xMDggbGNkIGNvbnRyb2xsZXIgYW5kIGlzIHR5cGljYWxseSBhIG1hdHJpeAorCSAgb2YgMipuIGNoaXBzLiBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIHdpdGggYSAxMjh4NjQgcGFuZWwuIFRoaXMKKwkgIGRyaXZlciBzdXBwb3J0cyBpdCBmb3IgdXNlIHdpdGggeDg2IFNCQ3MgdGhyb3VnaCBhIDE2IGJpdCBHUElPCisJICBpbnRlcmZhY2UgKDggYml0IGRhdGEsIDggYml0IGNvbnRyb2wpLiBJZiB5b3UgYW50aWNwYXRlIHVzaW5nCisJICB0aGlzIGRyaXZlciwgc2F5IFkgb3IgTTsgb3RoZXJ3aXNlIHNheSBOLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZQorCSAgR1BJTyBJTyBhZGRyZXNzIHRvIGJlIHVzZWQgZm9yIHNldHRpbmcgY29udHJvbCBhbmQgZGF0YS4KKwogY29uZmlnIEZCX0FUQVJJCiAJYm9vbCAiQXRhcmkgbmF0aXZlIGNoaXBzZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIChGQiA9IHkpICYmIEFUQVJJICYmIEJST0tFTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggYmQ4ZGMwZi4uYjAxOGRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC0yMSw2ICsyMSw3IEBACiAjIEhhcmR3YXJlIHNwZWNpZmljIGRyaXZlcnMgZ28gZmlyc3QKIG9iai0kKENPTkZJR19GQl9SRVRJTkFaMykgICAgICAgICArPSByZXR6M2ZiLm8KIG9iai0kKENPTkZJR19GQl9BTUlHQSkgICAgICAgICAgICArPSBhbWlmYi5vIGMycC5vCitvYmotJChDT05GSUdfRkJfQVJDKSAgICAgICAgICAgICAgKz0gYXJjZmIubwogb2JqLSQoQ09ORklHX0ZCX0NMUFM3MTFYKSAgICAgICAgICs9IGNscHM3MTF4ZmIubwogb2JqLSQoQ09ORklHX0ZCX0NZQkVSKSAgICAgICAgICAgICs9IGN5YmVyZmIubwogb2JqLSQoQ09ORklHX0ZCX0NZQkVSMjAwMCkgICAgICAgICs9IGN5YmVyMjAwMGZiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjg0NTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9hcmNmYi5jCkBAIC0wLDAgKzEsNjg0IEBACisvKgorICogbGludXgvZHJpdmVycy92aWRlby9hcmNmYi5jIC0tIEZCIGRyaXZlciBmb3IgQXJjIG1vbm9jaHJvbWUgTENEIGJvYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCBKYXlhIEt1bWFyIDxqYXlhbGtAaW50d29ya3MuYml6PgorICogaHR0cDovL3d3dy5pbnR3b3Jrcy5iaXovYXJjbGNkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogTGF5b3V0IGlzIGJhc2VkIG9uIHNrZWxldG9uZmIuYyBieSBKYW1lcyBTaW1tb25zIGFuZCBHZWVydCBVeXR0ZXJob2V2ZW4uCisgKgorICogVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gdG8gYmUgdXNlZCB3aXRoIHRoZSBBcmMgTENEIGJvYXJkLiBBcmMgdXNlcyBhCisgKiBzZXQgb2YgS1MxMDggY2hpcHMgdGhhdCBjb250cm9sIGluZGl2aWR1YWwgNjR4NjQgTENEIG1hdHJpY2VzLiBUaGUgYm9hcmQKKyAqIGNhbiBiZSBwYW5lbGVkIGluIGEgdmFyaWV0eSBvZiBzZXR1cHMgc3VjaCBhcyAyeDE9MTI4eDY0LCA0eDQ9MjU2eDI1NiBhbmQKKyAqIHNvIG9uLiBUaGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGJvYXJkIGFuZCB0aGUgaG9zdCBpcyBUVEwgYmFzZWQgR1BJTy4gVGhlCisgKiBHUElPIHJlcXVpcmVtZW50cyBhcmUgOCB3cml0YWJsZSBkYXRhIGxpbmVzIGFuZCA0K24gbGluZXMgZm9yIGNvbnRyb2wuIE9uIGEKKyAqIEdQSU8tbGVzcyBzeXN0ZW0sIHRoZSBib2FyZCBjYW4gYmUgdGVzdGVkIGJ5IGNvbm5lY3RpbmcgdGhlIHJlc3BlY3RpdmUgc2lncworICogdXAgdG8gYSBwYXJhbGxlbCBwb3J0IGNvbm5lY3Rvci4gVGhlIGRyaXZlciByZXF1aXJlcyB0aGUgSU8gYWRkcmVzc2VzIGZvcgorICogZGF0YSBhbmQgY29udHJvbCBHUElPIGF0IGxvYWQgdGltZS4gSXQgaXMgdW5hYmxlIHRvIHByb2JlIGZvciB0aGUKKyAqIGV4aXN0ZW5jZSBvZiB0aGUgTENEIHNvIGl0IG11c3QgYmUgdG9sZCBhdCBsb2FkIHRpbWUgd2hldGhlciBpdCBzaG91bGQKKyAqIGJlIGVuYWJsZWQgb3Igbm90LgorICoKKyAqIFRvZG86CisgKiAtIHRlc3Rpbmcgd2l0aCA0eDQKKyAqIC0gdGVzdGluZyB3aXRoIGludGVycnVwdCBodworICoKKyAqIEdlbmVyYWwgbm90ZXM6CisgKiAtIFVzZXIgbXVzdCBzZXQgdHVob2xkLiBJdCdzIGluIG1pY3Jvc2Vjb25kcy4gQWNjb3JkaW5nIHRvIHRoZSAxMDggc3BlYywKKyAqICAgdGhlIGhvbGQgdGltZSBpcyBzdXBwb3NlZCB0byBiZSBhdCBsZWFzdCAxIG1pY3Jvc2Vjb25kLgorICogLSBVc2VyIG11c3Qgc2V0IG51bV9jb2xzPXggbnVtX3Jvd3M9eSwgZWc6IHg9MiBtZWFucyAxMjgKKyAqIC0gVXNlciBtdXN0IHNldCBhcmNmYl9lbmFibGU9MSB0byBlbmFibGUgaXQKKyAqIC0gVXNlciBtdXN0IHNldCBkaW9fYWRkcj0weElPQUREUiBjaW9fYWRkcj0weElPQUREUgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9hcmNmYi5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2RlZmluZSBmbG9vcjgoYSkgKGEmKH4weDA3KSkKKyNkZWZpbmUgZmxvb3JYcmVzKGEseHJlcykgKGEmKH4oeHJlcyAtIDEpKSkKKyNkZWZpbmUgaWNlaWw4KGEpICgoKGludCkoKGErNykvOCkpKjgpCisjZGVmaW5lIGNlaWw2NChhKSAoYXwweDNGKQorI2RlZmluZSBjZWlsWHJlcyhhLHhyZXMpIChhfCh4cmVzIC0gMSkpCisKKy8qIGtzMTA4IGNoaXBzZXQgc3BlY2lmaWMgZGVmaW5lcyBhbmQgY29kZSAqLworCisjZGVmaW5lIEtTX1NFVF9EUFlfU1RBUlRfTElORSAJMHhDMAorI2RlZmluZSBLU19TRVRfUEFHRV9OVU0gCTB4QjgKKyNkZWZpbmUgS1NfU0VUX1ggCQkweDQwCisjZGVmaW5lIEtTX0NFSEkgCQkweDAxCisjZGVmaW5lIEtTX0NFTE8gCQkweDAwCisjZGVmaW5lIEtTX1NFTF9DTUQgCQkweDA4CisjZGVmaW5lIEtTX1NFTF9EQVRBIAkJMHgwMAorI2RlZmluZSBLU19EUFlfT04gCQkweDNGCisjZGVmaW5lIEtTX0RQWV9PRkYgCQkweDNFCisjZGVmaW5lIEtTX0lOVEFDSyAJCTB4NDAKKyNkZWZpbmUgS1NfQ0xSSU5UCQkweDAyCisKK3N0cnVjdCBhcmNmYl9wYXIgeworCXVuc2lnbmVkIGxvbmcgZGlvX2FkZHI7CisJdW5zaWduZWQgbG9uZyBjaW9fYWRkcjsKKwl1bnNpZ25lZCBsb25nIGMyaW9fYWRkcjsKKwlhdG9taWNfdCByZWZfY291bnQ7CisJdW5zaWduZWQgY2hhciBjc2x1dFs5XTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gYXJjZmJfZml4IF9faW5pdGRhdGEgPSB7CisJLmlkID0JCSJhcmNmYiIsCisJLnR5cGUgPQkJRkJfVFlQRV9QQUNLRURfUElYRUxTLAorCS52aXN1YWwgPQlGQl9WSVNVQUxfTU9OTzAxLAorCS54cGFuc3RlcCA9CTAsCisJLnlwYW5zdGVwID0JMSwKKwkueXdyYXBzdGVwID0JMCwKKwkuYWNjZWwgPQlGQl9BQ0NFTF9OT05FLAorfTsKKworc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBhcmNmYl92YXIgX19pbml0ZGF0YSA9IHsKKwkueHJlcwkJPSAxMjgsCisJLnlyZXMJCT0gNjQsCisJLnhyZXNfdmlydHVhbAk9IDEyOCwKKwkueXJlc192aXJ0dWFsCT0gNjQsCisJLmJpdHNfcGVyX3BpeGVsCT0gMSwKKwkubm9uc3RkCQk9IDEsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fY29sczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG51bV9yb3dzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZGlvX2FkZHI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjaW9fYWRkcjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGMyaW9fYWRkcjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNwbGFzaHZhbDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHR1aG9sZDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbm9zcGxhc2g7CitzdGF0aWMgdW5zaWduZWQgaW50IGFyY2ZiX2VuYWJsZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXJxOworCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXJjZmJfd2FpdHEpOworCitzdGF0aWMgdm9pZCBrczEwOF93cml0ZWJfY3RsKHN0cnVjdCBhcmNmYl9wYXIgKnBhciwKKwkJCQl1bnNpZ25lZCBpbnQgY2hpcGluZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgY2hpcHNlbHZhbCA9IHBhci0+Y3NsdXRbY2hpcGluZGV4XTsKKworCW91dGIoY2hpcHNlbHZhbHxLU19DRUhJfEtTX1NFTF9DTUQsIHBhci0+Y2lvX2FkZHIpOworCW91dGIodmFsdWUsIHBhci0+ZGlvX2FkZHIpOworCXVkZWxheSh0dWhvbGQpOworCW91dGIoY2hpcHNlbHZhbHxLU19DRUxPfEtTX1NFTF9DTUQsIHBhci0+Y2lvX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBrczEwOF93cml0ZWJfbWFpbmN0bChzdHJ1Y3QgYXJjZmJfcGFyICpwYXIsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisKKwlvdXRiKHZhbHVlLCBwYXItPmNpb19hZGRyKTsKKwl1ZGVsYXkodHVob2xkKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIga3MxMDhfcmVhZGJfY3RsMihzdHJ1Y3QgYXJjZmJfcGFyICpwYXIpCit7CisJcmV0dXJuIGluYihwYXItPmMyaW9fYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIGtzMTA4X3dyaXRlYl9kYXRhKHN0cnVjdCBhcmNmYl9wYXIgKnBhciwKKwkJCQl1bnNpZ25lZCBpbnQgY2hpcGluZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgY2hpcHNlbHZhbCA9IHBhci0+Y3NsdXRbY2hpcGluZGV4XTsKKworCW91dGIoY2hpcHNlbHZhbHxLU19DRUhJfEtTX1NFTF9EQVRBLCBwYXItPmNpb19hZGRyKTsKKwlvdXRiKHZhbHVlLCBwYXItPmRpb19hZGRyKTsKKwl1ZGVsYXkodHVob2xkKTsKKwlvdXRiKGNoaXBzZWx2YWx8S1NfQ0VMT3xLU19TRUxfREFUQSwgcGFyLT5jaW9fYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIGtzMTA4X3NldF9zdGFydF9saW5lKHN0cnVjdCBhcmNmYl9wYXIgKnBhciwKKwkJCQl1bnNpZ25lZCBpbnQgY2hpcGluZGV4LCB1bnNpZ25lZCBjaGFyIHkpCit7CisJa3MxMDhfd3JpdGViX2N0bChwYXIsIGNoaXBpbmRleCwgS1NfU0VUX0RQWV9TVEFSVF9MSU5FfHkpOworfQorCitzdGF0aWMgdm9pZCBrczEwOF9zZXRfeWFkZHIoc3RydWN0IGFyY2ZiX3BhciAqcGFyLAorCQkJCXVuc2lnbmVkIGludCBjaGlwaW5kZXgsIHVuc2lnbmVkIGNoYXIgeSkKK3sKKwlrczEwOF93cml0ZWJfY3RsKHBhciwgY2hpcGluZGV4LCBLU19TRVRfUEFHRV9OVU18eSk7Cit9CisKK3N0YXRpYyB2b2lkIGtzMTA4X3NldF94YWRkcihzdHJ1Y3QgYXJjZmJfcGFyICpwYXIsCisJCQkJdW5zaWduZWQgaW50IGNoaXBpbmRleCwgdW5zaWduZWQgY2hhciB4KQoreworCWtzMTA4X3dyaXRlYl9jdGwocGFyLCBjaGlwaW5kZXgsIEtTX1NFVF9YfHgpOworfQorCitzdGF0aWMgdm9pZCBrczEwOF9jbGVhcl9sY2Qoc3RydWN0IGFyY2ZiX3BhciAqcGFyLCB1bnNpZ25lZCBpbnQgY2hpcGluZGV4KQoreworCWludCBpLGo7CisKKwlmb3IgKGkgPSAwOyBpIDw9IDg7IGkrKykgeworCQlrczEwOF9zZXRfeWFkZHIocGFyLCBjaGlwaW5kZXgsIGkpOworCQlrczEwOF9zZXRfeGFkZHIocGFyLCBjaGlwaW5kZXgsIDApOworCQlmb3IgKGogPSAwOyBqIDwgNjQ7IGorKykgeworCQkJa3MxMDhfd3JpdGViX2RhdGEocGFyLCBjaGlwaW5kZXgsCisJCQkJKHVuc2lnbmVkIGNoYXIpIHNwbGFzaHZhbCk7CisJCX0KKwl9Cit9CisKKy8qIG1haW4gYXJjZmIgZnVuY3Rpb25zICovCisKK3N0YXRpYyBpbnQgYXJjZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJc3RydWN0IGFyY2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJYXRvbWljX2luYygmcGFyLT5yZWZfY291bnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFyY2ZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXN0cnVjdCBhcmNmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwlpbnQgY291bnQgPSBhdG9taWNfcmVhZCgmcGFyLT5yZWZfY291bnQpOworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYXRvbWljX2RlYygmcGFyLT5yZWZfY291bnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFyY2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWludCBpOworCXN0cnVjdCBhcmNmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCWlmICgodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKSAmJiAodmFyLT55b2Zmc2V0IDwgNjQpCisJCSYmIChpbmZvLT52YXIueXJlcyA8PSA2NCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9jb2xzOyBpKyspIHsKKwkJCWtzMTA4X3NldF9zdGFydF9saW5lKHBhciwgaSwgdmFyLT55b2Zmc2V0KTsKKwkJfQorCQlpbmZvLT52YXIueW9mZnNldCA9IHZhci0+eW9mZnNldDsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhcmNmYl9pbnRlcnJ1cHQoaW50IHZlYywgdm9pZCAqZGV2X2luc3RhbmNlLAorCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9pbnN0YW5jZTsKKwl1bnNpZ25lZCBjaGFyIGN0bDJzdGF0dXM7CisJc3RydWN0IGFyY2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJY3RsMnN0YXR1cyA9IGtzMTA4X3JlYWRiX2N0bDIocGFyKTsKKworCWlmICghKGN0bDJzdGF0dXMgJiBLU19JTlRBQ0spKSAvKiBub3QgYXJjIGdlbmVyYXRlZCBpbnRlcnJ1cHQgKi8KKwkJcmV0dXJuIElSUV9OT05FOworCisJa3MxMDhfd3JpdGViX21haW5jdGwocGFyLCBLU19DTFJJTlQpOworCisJc3Bpbl9sb2NrKCZwYXItPmxvY2spOworICAgICAgICBpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmYXJjZmJfd2FpdHEpKSB7CisgICAgICAgICAgICAgICAgd2FrZV91cCgmYXJjZmJfd2FpdHEpOworICAgICAgICB9CisJc3Bpbl91bmxvY2soJnBhci0+bG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBoZXJlIHdlIGhhbmRsZSBhIHNwZWNpZmljIHBhZ2Ugb24gdGhlIGxjZC4gdGhlIGNvbXBsZXhpdHkgY29tZXMgZnJvbQorICogdGhlIGZhY3QgdGhhdCB0aGUgZmIgaXMgbGFpZG91dCBpbiA4eFggdmVydGljYWwgY29sdW1ucy4gd2UgZXh0cmFjdAorICogZWFjaCB3cml0ZSBvZiA4IHZlcnRpY2FsIHBpeGVscy4gdGhlbiB3ZSBzaGlmdCBvdXQgYXMgd2UgbW92ZSBhbG9uZworICogWC4gVGhhdCdzIHdoYXQgcmlnaHRzaGlmdCBkb2VzLiBiaXRtYXNrIHNlbGVjdHMgdGhlIGRlc2lyZWQgaW5wdXQgYml0LgorICovCitzdGF0aWMgdm9pZCBhcmNmYl9sY2RfdXBkYXRlX3BhZ2Uoc3RydWN0IGFyY2ZiX3BhciAqcGFyLCB1bnNpZ25lZCBpbnQgdXBwZXIsCisJCXVuc2lnbmVkIGludCBsZWZ0LCB1bnNpZ25lZCBpbnQgcmlnaHQsIHVuc2lnbmVkIGludCBkaXN0YW5jZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpzcmM7CisJdW5zaWduZWQgaW50IHhpbmRleCwgeWluZGV4LCBjaGlwaW5kZXgsIGxpbmVzaXplOworCWludCBpLCBjb3VudDsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKwl1bnNpZ25lZCBjaGFyIGJpdG1hc2ssIHJpZ2h0c2hpZnQ7CisKKwl4aW5kZXggPSBsZWZ0ID4+IDY7CisJeWluZGV4ID0gdXBwZXIgPj4gNjsKKwljaGlwaW5kZXggPSAoeGluZGV4ICsgKHlpbmRleCpudW1fY29scykpOworCisJa3MxMDhfc2V0X3lhZGRyKHBhciwgY2hpcGluZGV4LCB1cHBlci84KTsKKworCWxpbmVzaXplID0gcGFyLT5pbmZvLT52YXIueHJlcy84OworCXNyYyA9IHBhci0+aW5mby0+c2NyZWVuX2Jhc2UgKyAobGVmdC84KSArICh1cHBlciAqIGxpbmVzaXplKTsKKwlrczEwOF9zZXRfeGFkZHIocGFyLCBjaGlwaW5kZXgsIGxlZnQpOworCisJYml0bWFzaz0xOworCXJpZ2h0c2hpZnQ9MDsKKwl3aGlsZSAobGVmdCA8PSByaWdodCkgeworCQl2YWwgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCQlpZiAoIGkgPiByaWdodHNoaWZ0KSB7CisJCQkJdmFsIHw9ICgqKHNyYyArIChpKmxpbmVzaXplKSkgJiBiaXRtYXNrKQorCQkJCQkJPDwgKGkgLSByaWdodHNoaWZ0KTsKKwkJCX0gZWxzZSB7CisJCQkJdmFsIHw9ICgqKHNyYyArIChpKmxpbmVzaXplKSkgJiBiaXRtYXNrKQorCQkJCQkJID4+IChyaWdodHNoaWZ0IC0gaSk7CisJCQl9CisJCX0KKwkJa3MxMDhfd3JpdGViX2RhdGEocGFyLCBjaGlwaW5kZXgsIHZhbCk7CisJCWxlZnQrKzsKKwkJY291bnQrKzsKKwkJaWYgKGJpdG1hc2sgPT0gMHg4MCkgeworCQkJYml0bWFzayA9IDE7CisJCQlzcmMrKzsKKwkJCXJpZ2h0c2hpZnQ9MDsKKwkJfSBlbHNlIHsKKwkJCWJpdG1hc2sgPDw9IDE7CisJCQlyaWdodHNoaWZ0Kys7CisJCX0KKwl9Cit9CisKKy8qCisgKiBoZXJlIHdlIGhhbmRsZSB0aGUgZW50aXJlIHZlcnRpY2FsIHBhZ2Ugb2YgdGhlIHVwZGF0ZS4gd2Ugd3JpdGUgYWNyb3NzCisgKiBsY2QgY2hpcHMuIHVwZGF0ZV9wYWdlIHVzZXMgdGhlIHVwcGVyL2xlZnQgdmFsdWVzIHRvIGRlY2lkZSB3aGljaAorICogY2hpcCB0byBzZWxlY3QgZm9yIHRoZSByaWdodC4gdXBwZXIgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHRoZSBwYWdlCisgKiBkZXNpcmVkIGZvciB0aGUgd3JpdGUuCisgKi8KK3N0YXRpYyB2b2lkIGFyY2ZiX2xjZF91cGRhdGVfdmVydChzdHJ1Y3QgYXJjZmJfcGFyICpwYXIsIHVuc2lnbmVkIGludCB0b3AsCisJCXVuc2lnbmVkIGludCBib3R0b20sIHVuc2lnbmVkIGludCBsZWZ0LCB1bnNpZ25lZCBpbnQgcmlnaHQpCit7CisJdW5zaWduZWQgaW50IGRpc3RhbmNlLCB1cHBlciwgbG93ZXI7CisKKwlkaXN0YW5jZSA9IChib3R0b20gLSB0b3ApICsgMTsKKwl1cHBlciA9IHRvcDsKKwlsb3dlciA9IHRvcCArIDc7CisKKwl3aGlsZSAoZGlzdGFuY2UgPiAwKSB7CisJCWRpc3RhbmNlIC09IDg7CisJCWFyY2ZiX2xjZF91cGRhdGVfcGFnZShwYXIsIHVwcGVyLCBsZWZ0LCByaWdodCwgOCk7CisJCXVwcGVyID0gbG93ZXIgKyAxOworCQlsb3dlciA9IHVwcGVyICsgNzsKKwl9Cit9CisKKy8qCisgKiBoZXJlIHdlIGhhbmRsZSBob3Jpem9udGFsIGJsb2NrcyBmb3IgdGhlIHVwZGF0ZS4gdXBkYXRlX3ZlcnQgd2lsbAorICogaGFuZGxlIHNwYW5pbmcgbXVsdGlwbGUgcGFnZXMuIHdlIGJyZWFrIG91dCBlYWNoIGhvcml6b250YWwKKyAqIGJsb2NrIGluIHRvIGluZGl2aWR1YWwgYmxvY2tzIG5vIHRhbGxlciB0aGFuIDY0IHBpeGVscy4KKyAqLworc3RhdGljIHZvaWQgYXJjZmJfbGNkX3VwZGF0ZV9ob3JpeihzdHJ1Y3QgYXJjZmJfcGFyICpwYXIsIHVuc2lnbmVkIGludCBsZWZ0LAorCQkJdW5zaWduZWQgaW50IHJpZ2h0LCB1bnNpZ25lZCBpbnQgdG9wLCB1bnNpZ25lZCBpbnQgaCkKK3sKKwl1bnNpZ25lZCBpbnQgZGlzdGFuY2UsIHVwcGVyLCBsb3dlcjsKKworCWRpc3RhbmNlID0gaDsKKwl1cHBlciA9IGZsb29yOCh0b3ApOworCWxvd2VyID0gbWluKHVwcGVyICsgZGlzdGFuY2UgLSAxLCBjZWlsNjQodXBwZXIpKTsKKworCXdoaWxlIChkaXN0YW5jZSA+IDApIHsKKwkJZGlzdGFuY2UgLT0gKChsb3dlciAtIHVwcGVyKSArIDEgKTsKKwkJYXJjZmJfbGNkX3VwZGF0ZV92ZXJ0KHBhciwgdXBwZXIsIGxvd2VyLCBsZWZ0LCByaWdodCk7CisJCXVwcGVyID0gbG93ZXIgKyAxOworCQlsb3dlciA9IG1pbih1cHBlciArIGRpc3RhbmNlIC0gMSwgY2VpbDY0KHVwcGVyKSk7CisJfQorfQorCisvKgorICogaGVyZSB3ZSBzdGFydCB0aGUgcHJvY2VzcyBvZiBzcGxpdGluZyBvdXQgdGhlIGZiIHVwZGF0ZSBpbnRvCisgKiBpbmRpdmlkdWFsIGJsb2NrcyBvZiBwaXhlbHMuIHdlIGVuZCB1cCBzcGxpdGluZyBpbnRvIDY0eDY0IGJsb2NrcworICogYW5kIGZpbmFsbHkgZG93biB0byA2NHg4IHBhZ2VzLgorICovCitzdGF0aWMgdm9pZCBhcmNmYl9sY2RfdXBkYXRlKHN0cnVjdCBhcmNmYl9wYXIgKnBhciwgdW5zaWduZWQgaW50IGR4LAorCQkJdW5zaWduZWQgaW50IGR5LCB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgpCit7CisJdW5zaWduZWQgaW50IGxlZnQsIHJpZ2h0LCBkaXN0YW5jZSwgeTsKKworCS8qIGFsaWduIHRoZSByZXF1ZXN0IGZpcnN0ICovCisJeSA9IGZsb29yOChkeSk7CisJaCArPSBkeSAtIHk7CisJaCA9IGljZWlsOChoKTsKKworCWRpc3RhbmNlID0gdzsKKwlsZWZ0ID0gZHg7CisJcmlnaHQgPSBtaW4obGVmdCArIHcgLSAxLCBjZWlsNjQobGVmdCkpOworCisJd2hpbGUgKGRpc3RhbmNlID4gMCkgeworCQlhcmNmYl9sY2RfdXBkYXRlX2hvcml6KHBhciwgbGVmdCwgcmlnaHQsIHksIGgpOworCQlkaXN0YW5jZSAtPSAoKHJpZ2h0IC0gbGVmdCkgKyAxKTsKKwkJbGVmdCA9IHJpZ2h0ICsgMTsKKwkJcmlnaHQgPSBtaW4obGVmdCArIGRpc3RhbmNlIC0gMSwgY2VpbDY0KGxlZnQpKTsKKwl9Cit9CisKK3ZvaWQgYXJjZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3QgYXJjZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwljZmJfZmlsbHJlY3QoaW5mbywgcmVjdCk7CisKKwkvKiB1cGRhdGUgdGhlIHBoeXNpY2FsIGxjZCAqLworCWFyY2ZiX2xjZF91cGRhdGUocGFyLCByZWN0LT5keCwgcmVjdC0+ZHksIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOworfQorCit2b2lkIGFyY2ZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCit7CisJc3RydWN0IGFyY2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJY2ZiX2NvcHlhcmVhKGluZm8sIGFyZWEpOworCisJLyogdXBkYXRlIHRoZSBwaHlzaWNhbCBsY2QgKi8KKwlhcmNmYl9sY2RfdXBkYXRlKHBhciwgYXJlYS0+ZHgsIGFyZWEtPmR5LCBhcmVhLT53aWR0aCwgYXJlYS0+aGVpZ2h0KTsKK30KKwordm9pZCBhcmNmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJc3RydWN0IGFyY2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJY2ZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisKKwkvKiB1cGRhdGUgdGhlIHBoeXNpY2FsIGxjZCAqLworCWFyY2ZiX2xjZF91cGRhdGUocGFyLCBpbWFnZS0+ZHgsIGltYWdlLT5keSwgaW1hZ2UtPndpZHRoLAorCQkJCWltYWdlLT5oZWlnaHQpOworfQorCitzdGF0aWMgaW50IGFyY2ZiX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKKwkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IGFyY2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIEZCSU9fV0FJVEVWRU5UOgorCQl7CisJCQlERUZJTkVfV0FJVCh3YWl0KTsKKwkJCS8qIGlsbGVnYWwgdG8gd2FpdCBvbiBhcmMgaWYgbm8gaXJxIHdpbGwgb2NjdXIgKi8KKwkJCWlmICghcGFyLT5pcnEpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8qIHdhaXQgdW50aWwgdGhlIEFyYyBoYXMgZ2VuZXJhdGVkIGFuIGludGVycnVwdAorCQkJICogd2hpY2ggd2lsbCB3YWtlIHVzIHVwICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGFyLT5sb2NrLCBmbGFncyk7CisJCQlwcmVwYXJlX3RvX3dhaXQoJmFyY2ZiX3dhaXRxLCAmd2FpdCwKKwkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBhci0+bG9jaywgZmxhZ3MpOworCQkJc2NoZWR1bGUoKTsKKwkJCWZpbmlzaF93YWl0KCZhcmNmYl93YWl0cSwgJndhaXQpOworCQl9CisJCWNhc2UgRkJJT19HRVRDT05UUk9MMjoKKwkJeworCQkJdW5zaWduZWQgY2hhciBjdGwyOworCisJCQljdGwyID0ga3MxMDhfcmVhZGJfY3RsMihpbmZvLT5wYXIpOworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmY3RsMiwgc2l6ZW9mKGN0bDIpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qCisgKiB0aGlzIGlzIHRoZSBhY2Nlc3MgcGF0aCBmcm9tIHVzZXJzcGFjZS4gdGhleSBjYW4gc2VlayBhbmQgd3JpdGUgdG8KKyAqIHRoZSBmYi4gaXQncyBpbmVmZmljaWVudCBmb3IgdGhlbSB0byBkbyBhbnl0aGluZyBsZXNzIHRoYW4gNjQqOAorICogd3JpdGVzIHNpbmNlIHdlIHVwZGF0ZSB0aGUgbGNkIGluIGVhY2ggd3JpdGUoKSBhbnl3YXkuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGFyY2ZiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCQlsb2ZmX3QgKnBwb3MpCit7CisJLyogbW9kZGVkIGZyb20gZXBzb24gMTM1NSAqLworCisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbnQgZmJpZHg7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJdW5zaWduZWQgbG9uZyBwOworCWludCBlcnI9LUVJTlZBTDsKKwl1bnNpZ25lZCBpbnQgZmJtZW1sZW5ndGgseCx5LHcsaCwgYml0cHBvcywgc3RhcnRwb3MsIGVuZHBvcywgYml0Y291bnQ7CisJc3RydWN0IGFyY2ZiX3BhciAqcGFyOworCXVuc2lnbmVkIGludCB4cmVzOworCisJcCA9ICpwcG9zOworCWlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJZmJpZHggPSBpbWlub3IoaW5vZGUpOworCWluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKKwlwYXIgPSBpbmZvLT5wYXI7CisKKwlpZiAoIWluZm8gfHwgIWluZm8tPnNjcmVlbl9iYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXhyZXMgPSBpbmZvLT52YXIueHJlczsKKwlmYm1lbWxlbmd0aCA9ICh4cmVzICogaW5mby0+dmFyLnlyZXMpLzg7CisKKwlpZiAocCA+IGZibWVtbGVuZ3RoKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWVyciA9IDA7CisJaWYgKChjb3VudCArIHApID4gZmJtZW1sZW5ndGgpIHsKKwkJY291bnQgPSBmYm1lbWxlbmd0aCAtIHA7CisJCWVyciA9IC1FTk9TUEM7CisJfQorCisJaWYgKGNvdW50KSB7CisJCWNoYXIgKmJhc2VfYWRkcjsKKworCQliYXNlX2FkZHIgPSBpbmZvLT5zY3JlZW5fYmFzZTsKKwkJY291bnQgLT0gY29weV9mcm9tX3VzZXIoYmFzZV9hZGRyICsgcCwgYnVmLCBjb3VudCk7CisJCSpwcG9zICs9IGNvdW50OworCQllcnIgPSAtRUZBVUxUOworCX0KKworCisJYml0cHBvcyA9IHAqODsKKwlzdGFydHBvcyA9IGZsb29yWHJlcyhiaXRwcG9zLCB4cmVzKTsKKwllbmRwb3MgPSBjZWlsWHJlcygoYml0cHBvcyArIChjb3VudCo4KSksIHhyZXMpOworCWJpdGNvdW50ID0gZW5kcG9zIC0gc3RhcnRwb3M7CisKKwl4ID0gc3RhcnRwb3MgJSB4cmVzOworCXkgPSBzdGFydHBvcyAvIHhyZXM7CisJdyA9IHhyZXM7CisJaCA9IGJpdGNvdW50IC8geHJlczsKKwlhcmNmYl9sY2RfdXBkYXRlKHBhciwgeCwgeSwgdywgaCk7CisKKwlpZiAoY291bnQpCisJCXJldHVybiBjb3VudDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhcmNmYl9wbGF0Zm9ybV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgYXJjZmJfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZmJfb3Blbgk9IGFyY2ZiX29wZW4sCisJLmZiX3dyaXRlCT0gYXJjZmJfd3JpdGUsCisJLmZiX3JlbGVhc2UJPSBhcmNmYl9yZWxlYXNlLAorCS5mYl9wYW5fZGlzcGxheQk9IGFyY2ZiX3Bhbl9kaXNwbGF5LAorCS5mYl9maWxscmVjdAk9IGFyY2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IGFyY2ZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQJPSBhcmNmYl9pbWFnZWJsaXQsCisJLmZiX2N1cnNvcgk9IHNvZnRfY3Vyc29yLAorCS5mYl9pb2N0bCAJPSBhcmNmYl9pb2N0bCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFyY2ZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgdmlkZW9tZW1vcnlzaXplOworCXVuc2lnbmVkIGNoYXIgKnZpZGVvbWVtb3J5OworCXN0cnVjdCBhcmNmYl9wYXIgKnBhcjsKKwlpbnQgaTsKKworCXZpZGVvbWVtb3J5c2l6ZSA9ICgoKDY0KjY0KSpudW1fY29scykqbnVtX3Jvd3MpLzg7CisKKwkvKiBXZSBuZWVkIGEgZmxhdCBiYWNraW5nIHN0b3JlIGZvciB0aGUgQXJjJ3MKKwkgICBsZXNzLWZsYXQgYWN0dWFsIHBhZ2VkIGZyYW1lYnVmZmVyICovCisJaWYgKCEodmlkZW9tZW1vcnkgPSB2bWFsbG9jKHZpZGVvbWVtb3J5c2l6ZSkpKQorCQlyZXR1cm4gcmV0dmFsOworCisJbWVtc2V0KHZpZGVvbWVtb3J5LCAwLCB2aWRlb21lbW9yeXNpemUpOworCisJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgYXJjZmJfcGFyKSwgJmRldi0+ZGV2KTsKKwlpZiAoIWluZm8pCisJCWdvdG8gZXJyOworCisJaW5mby0+c2NyZWVuX2Jhc2UgPSAoY2hhciBfX2lvbWVtICopdmlkZW9tZW1vcnk7CisJaW5mby0+ZmJvcHMgPSAmYXJjZmJfb3BzOworCisJaW5mby0+dmFyID0gYXJjZmJfdmFyOworCWluZm8tPmZpeCA9IGFyY2ZiX2ZpeDsKKwlwYXIgPSBpbmZvLT5wYXI7CisJcGFyLT5pbmZvID0gaW5mbzsKKworCWlmICghZGlvX2FkZHIgfHwgIWNpb19hZGRyIHx8ICFjMmlvX2FkZHIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibm8gSU8gYWRkcmVzc2VzIHN1cHBsaWVkXG4iKTsKKwkJZ290byBlcnIxOworCX0KKwlwYXItPmRpb19hZGRyID0gZGlvX2FkZHI7CisJcGFyLT5jaW9fYWRkciA9IGNpb19hZGRyOworCXBhci0+YzJpb19hZGRyID0gYzJpb19hZGRyOworCXBhci0+Y3NsdXRbMF0gPSAweDAwOworCXBhci0+Y3NsdXRbMV0gPSAweDA2OworCWluZm8tPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKKwlzcGluX2xvY2tfaW5pdCgmcGFyLT5sb2NrKTsKKwlyZXR2YWwgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBlcnIxOworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCWlmIChpcnEpIHsKKwkJcGFyLT5pcnEgPSBpcnE7CisJCWlmIChyZXF1ZXN0X2lycShwYXItPmlycSwgJmFyY2ZiX2ludGVycnVwdCwgU0FfU0hJUlEsCisJCQkJImFyY2ZiIiwgaW5mbykpIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkiYXJjZmI6IEZhaWxlZCByZXEgSVJRICVkXG4iLCBwYXItPmlycSk7CisJCQlnb3RvIGVycjE7CisJCX0KKwl9CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiZmIlZDogQXJjIGZyYW1lIGJ1ZmZlciBkZXZpY2UsIHVzaW5nICVkSyBvZiB2aWRlbyBtZW1vcnlcbiIsCisJICAgICAgIGluZm8tPm5vZGUsIHZpZGVvbWVtb3J5c2l6ZSA+PiAxMCk7CisKKwkvKiB0aGlzIGluaXRzIHRoZSBsY2QgYnV0IGRvZXNuJ3QgY2xlYXIgZGlydHkgcGl4ZWxzICovCisJZm9yIChpID0gMDsgaSA8IG51bV9jb2xzICogbnVtX3Jvd3M7IGkrKykgeworCQlrczEwOF93cml0ZWJfY3RsKHBhciwgaSwgS1NfRFBZX09GRik7CisJCWtzMTA4X3NldF9zdGFydF9saW5lKHBhciwgaSwgMCk7CisJCWtzMTA4X3NldF95YWRkcihwYXIsIGksIDApOworCQlrczEwOF9zZXRfeGFkZHIocGFyLCBpLCAwKTsKKwkJa3MxMDhfd3JpdGViX2N0bChwYXIsIGksIEtTX0RQWV9PTik7CisJfQorCisJLyogaWYgd2Ugd2VyZSB0b2xkIHRvIHNwbGFzaCB0aGUgc2NyZWVuLCB3ZSBqdXN0IGNsZWFyIGl0ICovCisJaWYgKCFub3NwbGFzaCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvbHMgKiBudW1fcm93czsgaSsrKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJmYiVkOiBzcGxhc2hpbmcgbGNkICVkXG4iLAorCQkJCWluZm8tPm5vZGUsIGkpOworCQkJa3MxMDhfc2V0X3N0YXJ0X2xpbmUocGFyLCBpLCAwKTsKKwkJCWtzMTA4X2NsZWFyX2xjZChwYXIsIGkpOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnIxOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CitlcnI6CisJdmZyZWUodmlkZW9tZW1vcnkpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXJjZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCisJaWYgKGluZm8pIHsKKwkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwkJdmZyZWUoaW5mby0+c2NyZWVuX2Jhc2UpOworCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGFyY2ZiX2RyaXZlciA9IHsKKwkubmFtZQk9ICJhcmNmYiIsCisJLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJPSBhcmNmYl9wcm9iZSwKKwkucmVtb3ZlID0gYXJjZmJfcmVtb3ZlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXJjZmJfZGV2aWNlID0geworCS5uYW1lCT0gImFyY2ZiIiwKKwkuaWQJPSAwLAorCS5kZXYJPSB7CisJCS5yZWxlYXNlID0gYXJjZmJfcGxhdGZvcm1fcmVsZWFzZSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBhcmNmYl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghYXJjZmJfZW5hYmxlKQorCQlyZXR1cm4gLUVOWElPOworCisJcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZhcmNmYl9kcml2ZXIpOworCWlmICghcmV0KSB7CisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXJjZmJfZGV2aWNlKTsKKwkJaWYgKHJldCkKKwkJCWRyaXZlcl91bnJlZ2lzdGVyKCZhcmNmYl9kcml2ZXIpOworCX0KKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhcmNmYl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmFyY2ZiX2RldmljZSk7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9wYXJhbShudW1fY29scywgdWxvbmcsIDApOworTU9EVUxFX1BBUk1fREVTQyhudW1fY29scywgIk51bSBob3JpeiBwYW5lbHMsIGVnOiAyID0gMTI4IGJpdCB3aWRlIik7Cittb2R1bGVfcGFyYW0obnVtX3Jvd3MsIHVsb25nLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobnVtX3Jvd3MsICJOdW0gdmVydCBwYW5lbHMsIGVnOiAxID0gNjQgYml0IGhpZ2giKTsKK21vZHVsZV9wYXJhbShub3NwbGFzaCwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vc3BsYXNoLCAiRGlzYWJsZSBkb2luZyB0aGUgc3BsYXNoIHNjcmVlbiIpOworbW9kdWxlX3BhcmFtKGFyY2ZiX2VuYWJsZSwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGFyY2ZiX2VuYWJsZSwgIkVuYWJsZSBjb21tdW5pY2F0aW9uIHdpdGggQXJjIGJvYXJkIik7Cittb2R1bGVfcGFyYW0oZGlvX2FkZHIsIHVsb25nLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGlvX2FkZHIsICJJTyBhZGRyZXNzIGZvciBkYXRhLCBlZzogMHg0ODAiKTsKK21vZHVsZV9wYXJhbShjaW9fYWRkciwgdWxvbmcsIDApOworTU9EVUxFX1BBUk1fREVTQyhjaW9fYWRkciwgIklPIGFkZHJlc3MgZm9yIGNvbnRyb2wsIGVnOiAweDQwMCIpOworbW9kdWxlX3BhcmFtKGMyaW9fYWRkciwgdWxvbmcsIDApOworTU9EVUxFX1BBUk1fREVTQyhjMmlvX2FkZHIsICJJTyBhZGRyZXNzIGZvciBzZWNvbmRhcnkgY29udHJvbCwgZWc6IDB4NDA4Iik7Cittb2R1bGVfcGFyYW0oc3BsYXNodmFsLCB1bG9uZywgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNwbGFzaHZhbCwgIlNwbGFzaCBwYXR0ZXJuOiAweEZGIGlzIGJsYWNrLCAweDAwIGlzIGdyZWVuIik7Cittb2R1bGVfcGFyYW0odHVob2xkLCB1bG9uZywgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHR1aG9sZCwgIlRpbWUgdG8gaG9sZCBiZXR3ZWVuIHN0cm9iaW5nIGRhdGEgdG8gQXJjIGJvYXJkIik7Cittb2R1bGVfcGFyYW0oaXJxLCB1aW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRIGZvciB0aGUgQXJjIGJvYXJkIik7CisKK21vZHVsZV9pbml0KGFyY2ZiX2luaXQpOworbW9kdWxlX2V4aXQoYXJjZmJfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiZmJkZXYgZHJpdmVyIGZvciBBcmMgbW9ub2Nocm9tZSBMQ0QgYm9hcmQiKTsKK01PRFVMRV9BVVRIT1IoIkpheWEgS3VtYXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2NoaXBzZmIuYwppbmRleCBhYjk4ZjIyLi45NWU3MjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NoaXBzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NoaXBzZmIuYwpAQCAtNDIzLDkgKzQyMyw2IEBACiAJcG11X3JlZ2lzdGVyX3NsZWVwX25vdGlmaWVyKCZjaGlwc19zbGVlcF9ub3RpZmllcik7CiAjZW5kaWYgLyogQ09ORklHX1BNQUNfUEJPT0sgKi8KIAotCS8qIENsZWFyIHRoZSBlbnRpcmUgZnJhbWVidWZmZXIgKi8KLQltZW1zZXQocC0+c2NyZWVuX2Jhc2UsIDAsIDB4MTAwMDAwKTsKLQogCXBjaV9zZXRfZHJ2ZGF0YShkcCwgcCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCmluZGV4IGNjZjU1ODEuLmU0YjkxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCkBAIC0xNTMsNiArMTUzLDE1IEBACiAJICBTbWFsbCBjb25zb2xlIGZvbnQgd2l0aCBNYWNpbnRvc2gtc3R5bGUgaGlnaC1oYWxmIGdseXBocy4gIFNvbWUgTWFjCiAJICBmcmFtZWJ1ZmZlciBkcml2ZXJzIGRvbid0IHN1cHBvcnQgdGhpcyBvbmUgYXQgYWxsLgogCitjb25maWcgRk9OVF83eDE0CisJYm9vbCAiY29uc29sZSA3eDE0IGZvbnQgKG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGRyaXZlcnMpIiBpZiBGT05UUworCWRlcGVuZHMgb24gRlJBTUVCVUZGRVJfQ09OU09MRQorCWRlZmF1bHQgeSBpZiAhU1BBUkMzMiAmJiAhU1BBUkM2NCAmJiAhRk9OVFMKKwloZWxwCisJICBDb25zb2xlIGZvbnQgd2l0aCBjaGFyYWN0ZXJzIGp1c3QgYSBiaXQgc21hbGxlciB0aGFuIHRoZSBkZWZhdWx0LgorCSAgSWYgdGhlIHN0YW5kYXJkIDh4MTYgZm9udCBpcyBhIGxpdHRsZSB0b28gYmlnIGZvciB5b3UsIHNheSBZLgorCSAgT3RoZXJ3aXNlLCBzYXkgTi4KKwogY29uZmlnIEZPTlRfUEVBUkxfOHg4CiAJYm9vbCAiUGVhcmwgKG9sZCBtNjhrKSBjb25zb2xlIDh4OCBmb250IiBpZiBGT05UUwogCWRlcGVuZHMgb24gRlJBTUVCVUZGRVJfQ09OU09MRQpAQCAtMTg3LDUgKzE5NiwxMyBAQAogCSAgYmlnIGxldHRlcnMgKGxpa2UgdGhlIGxldHRlcnMgdXNlZCBpbiB0aGUgU1BBUkMgUFJPTSkuIElmIHRoZQogCSAgc3RhbmRhcmQgZm9udCBpcyB1bnJlYWRhYmxlIGZvciB5b3UsIHNheSBZLCBvdGhlcndpc2Ugc2F5IE4uCiAKK2NvbmZpZyBGT05UXzEweDE4CisJYm9vbCAiY29uc29sZSAxMHgxOCBmb250IChub3Qgc3VwcG9ydGVkIGJ5IGFsbCBkcml2ZXJzKSIKKwlkZXBlbmRzIG9uIEZPTlRTCisJaGVscAorCSAgVGhpcyBpcyBhIGhpZ2ggcmVzb2x1dGlvbiBjb25zb2xlIGZvbnQgZm9yIG1hY2hpbmVzIHdpdGggdmVyeQorCSAgYmlnIGxldHRlcnMuIEl0IGZpdHMgYmV0d2VlbiB0aGUgc3VuIDEyeDIyIGFuZCB0aGUgbm9ybWFsIDh4MTYgZm9udC4KKwkgIElmIG90aGVyIGZvbnRzIGFyZSB0b28gYmlnIG9yIHRvbyBzbWFsbCBmb3IgeW91LCBzYXkgWSwgb3RoZXJ3aXNlIHNheSBOLgorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9NYWtlZmlsZQppbmRleCAzMzUxNjQ0Li5iNTYyZjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw4IEBACiBmb250LW9ianMtJChDT05GSUdfRk9OVF84eDgpICAgICAgICs9IGZvbnRfOHg4Lm8KIGZvbnQtb2Jqcy0kKENPTkZJR19GT05UXzh4MTYpICAgICAgKz0gZm9udF84eDE2Lm8KIGZvbnQtb2Jqcy0kKENPTkZJR19GT05UXzZ4MTEpICAgICAgKz0gZm9udF82eDExLm8KK2ZvbnQtb2Jqcy0kKENPTkZJR19GT05UXzd4MTQpICAgICAgKz0gZm9udF83eDE0Lm8KK2ZvbnQtb2Jqcy0kKENPTkZJR19GT05UXzEweDE4KSAgICAgKz0gZm9udF8xMHgxOC5vCiBmb250LW9ianMtJChDT05GSUdfRk9OVF9QRUFSTF84eDgpICs9IGZvbnRfcGVhcmxfOHg4Lm8KIGZvbnQtb2Jqcy0kKENPTkZJR19GT05UX0FDT1JOXzh4OCkgKz0gZm9udF9hY29ybl84eDgubwogZm9udC1vYmpzLSQoQ09ORklHX0ZPTlRfTUlOSV80eDYpICArPSBmb250X21pbmlfNHg2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9iaXRibGl0LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYml0YmxpdC5jCmluZGV4IGIyOGE0YjAuLjNjNzMxNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9iaXRibGl0LmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2JpdGJsaXQuYwpAQCAtMTA3LDEzICsxMDcsNiBAQAogCQkgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcywgaW50IGNvdW50LCBpbnQgeXksIGludCB4eCwKIAkJICAgICAgaW50IGZnLCBpbnQgYmcpCiB7Ci0Jdm9pZCAoKm1vdmVfdW5hbGlnbmVkKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3BpeG1hcCAqYnVmLAotCQkJICAgICAgIHU4ICpkc3QsIHUzMiBkX3BpdGNoLCB1OCAqc3JjLCB1MzIgaWR4LAotCQkJICAgICAgIHUzMiBoZWlnaHQsIHUzMiBzaGlmdF9oaWdoLCB1MzIgc2hpZnRfbG93LAotCQkJICAgICAgIHUzMiBtb2QpOwotCXZvaWQgKCptb3ZlX2FsaWduZWQpKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfcGl4bWFwICpidWYsCi0JCQkgICAgIHU4ICpkc3QsIHUzMiBkX3BpdGNoLCB1OCAqc3JjLCB1MzIgc19waXRjaCwKLQkJCSAgICAgdTMyIGhlaWdodCk7CiAJdW5zaWduZWQgc2hvcnQgY2hhcm1hc2sgPSB2Yy0+dmNfaGlfZm9udF9tYXNrID8gMHgxZmYgOiAweGZmOwogCXVuc2lnbmVkIGludCB3aWR0aCA9ICh2Yy0+dmNfZm9udC53aWR0aCArIDcpID4+IDM7CiAJdW5zaWduZWQgaW50IGNlbGxzaXplID0gdmMtPnZjX2ZvbnQuaGVpZ2h0ICogd2lkdGg7CkBAIC0xNDEsMTMgKzEzNCw2IEBACiAJaW1hZ2UuaGVpZ2h0ID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OwogCWltYWdlLmRlcHRoID0gMTsKIAotCWlmIChpbmZvLT5waXhtYXAub3V0YnVmICYmIGluZm8tPnBpeG1hcC5pbmJ1ZikgewotCQltb3ZlX2FsaWduZWQgPSBmYl9pb21vdmVfYnVmX2FsaWduZWQ7Ci0JCW1vdmVfdW5hbGlnbmVkID0gZmJfaW9tb3ZlX2J1Zl91bmFsaWduZWQ7Ci0JfSBlbHNlIHsKLQkJbW92ZV9hbGlnbmVkID0gZmJfc3lzbW92ZV9idWZfYWxpZ25lZDsKLQkJbW92ZV91bmFsaWduZWQgPSBmYl9zeXNtb3ZlX2J1Zl91bmFsaWduZWQ7Ci0JfQogCXdoaWxlIChjb3VudCkgewogCQlpZiAoY291bnQgPiBtYXhjbnQpCiAJCQljbnQgPSBrID0gbWF4Y250OwpAQCAtMTcxLDkgKzE1Nyw5IEBACiAJCQkJCXNyYyA9IGJ1ZjsKIAkJCQl9CiAKLQkJCQltb3ZlX3VuYWxpZ25lZChpbmZvLCAmaW5mby0+cGl4bWFwLCBkc3QsIHBpdGNoLAotCQkJCQkgICAgICAgc3JjLCBpZHgsIGltYWdlLmhlaWdodCwKLQkJCQkJICAgICAgIHNoaWZ0X2hpZ2gsIHNoaWZ0X2xvdywgbW9kKTsKKwkJCQlmYl9wYWRfdW5hbGlnbmVkX2J1ZmZlcihkc3QsIHBpdGNoLCBzcmMsIGlkeCwKKwkJCQkJCWltYWdlLmhlaWdodCwgc2hpZnRfaGlnaCwKKwkJCQkJCXNoaWZ0X2xvdywgbW9kKTsKIAkJCQlzaGlmdF9sb3cgKz0gbW9kOwogCQkJCWRzdCArPSAoc2hpZnRfbG93ID49IDgpID8gd2lkdGggOiB3aWR0aCAtIDE7CiAJCQkJc2hpZnRfbG93ICY9IDc7CkBAIC0xODksOCArMTc1LDcgQEAKIAkJCQkJc3JjID0gYnVmOwogCQkJCX0KIAotCQkJCW1vdmVfYWxpZ25lZChpbmZvLCAmaW5mby0+cGl4bWFwLCBkc3QsIHBpdGNoLAotCQkJCQkgICAgIHNyYywgaWR4LCBpbWFnZS5oZWlnaHQpOworCQkJCWZiX3BhZF9hbGlnbmVkX2J1ZmZlcihkc3QsIHBpdGNoLCBzcmMsIGlkeCwgaW1hZ2UuaGVpZ2h0KTsKIAkJCQlkc3QgKz0gd2lkdGg7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250XzEweDE4LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF8xMHgxOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMGFmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF8xMHgxOC5jCkBAIC0wLDAgKzEsNTE0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhZGFwdGVkIGZyb20gZm9udF9zdW4xMngyMi5jICoKKyAqIGJ5IEp1cnJpYWFuIEthbGttYW4gMDYtMjAwNSAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvZm9udC5oPgorCisjZGVmaW5lIEZPTlREQVRBTUFYIDkyMTYKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZm9udGRhdGFfMTB4MThbRk9OVERBVEFNQVhdID0geworCisJLyogMCAweDAwICdeQCcgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDEgMHgwMSAnXkEnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwICovCisJMHg0MCwgMHg0MCwgLyogMDEwMDAwMDAwMSAqLworCTB4NWIsIDB4NDAsIC8qIDAxMDExMDExMDEgKi8KKwkweDQwLCAweDQwLCAvKiAwMTAwMDAwMDAxICovCisJMHg0NCwgMHg0MCwgLyogMDEwMDAxMDAwMSAqLworCTB4NDQsIDB4NDAsIC8qIDAxMDAwMTAwMDEgKi8KKwkweDUxLCAweDQwLCAvKiAwMTAxMDAwMTAxICovCisJMHg0ZSwgMHg0MCwgLyogMDEwMDExMTAwMSAqLworCTB4NDAsIDB4NDAsIC8qIDAxMDAwMDAwMDEgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyIDB4MDIgJ15CJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMCAqLworCTB4N2YsIDB4YzAsIC8qIDAxMTExMTExMTEgKi8KKwkweDY0LCAweGMwLCAvKiAwMTEwMDEwMDExICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMSAqLworCTB4N2IsIDB4YzAsIC8qIDAxMTExMDExMTEgKi8KKwkweDdiLCAweGMwLCAvKiAwMTExMTAxMTExICovCisJMHg2ZSwgMHhjMCwgLyogMDExMDExMTAxMSAqLworCTB4NzEsIDB4YzAsIC8qIDAxMTEwMDAxMTEgKi8KKwkweDdmLCAweGMwLCAvKiAwMTExMTExMTExICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMyAweDAzICdeQycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MTEsIDB4MDAsIC8qIDAwMDEwMDAxMDAgKi8KKwkweDNiLCAweDgwLCAvKiAwMDExMTAxMTEwICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMSAqLworCTB4M2YsIDB4ODAsIC8qIDAwMTExMTExMTAgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDQgMHgwNCAnXkQnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA1IDB4MDUgJ15FJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDdiLCAweGMwLCAvKiAwMTExMTAxMTExICovCisJMHgzNSwgMHg4MCwgLyogMDAxMTAxMDExMCAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNiAweDA2ICdeRicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4M2YsIDB4ODAsIC8qIDAwMTExMTExMTAgKi8KKwkweDdmLCAweGMwLCAvKiAwMTExMTExMTExICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMSAqLworCTB4MzUsIDB4ODAsIC8qIDAwMTEwMTAxMTAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDcgMHgwNyAnXkcnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA4IDB4MDggJ15IJyAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmMywgMHhjMCwgLyogMTExMTAwMTExMSAqLworCTB4ZTEsIDB4YzAsIC8qIDExMTAwMDAxMTEgKi8KKwkweGUxLCAweGMwLCAvKiAxMTEwMDAwMTExICovCisJMHhjMCwgMHhjMCwgLyogMTEwMDAwMDAxMSAqLworCTB4YzAsIDB4YzAsIC8qIDExMDAwMDAwMTEgKi8KKwkweGUxLCAweGMwLCAvKiAxMTEwMDAwMTExICovCisJMHhlMSwgMHhjMCwgLyogMTExMDAwMDExMSAqLworCTB4ZjMsIDB4YzAsIC8qIDExMTEwMDExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCisJLyogOSAweDA5ICdeSScgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDEyLCAweDAwLCAvKiAwMDAxMDAxMDAwICovCisJMHgxMiwgMHgwMCwgLyogMDAwMTAwMTAwMCAqLworCTB4MjEsIDB4MDAsIC8qIDAwMTAwMDAxMDAgKi8KKwkweDIxLCAweDAwLCAvKiAwMDEwMDAwMTAwICovCisJMHgxMiwgMHgwMCwgLyogMDAwMTAwMTAwMCAqLworCTB4MTIsIDB4MDAsIC8qIDAwMDEwMDEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDEwIDB4MGEgJ15KJyAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmMywgMHhjMCwgLyogMTExMTAwMTExMSAqLworCTB4ZWQsIDB4YzAsIC8qIDExMTAxMTAxMTEgKi8KKwkweGVkLCAweGMwLCAvKiAxMTEwMTEwMTExICovCisJMHhkZSwgMHhjMCwgLyogMTEwMTExMTAxMSAqLworCTB4ZGUsIDB4YzAsIC8qIDExMDExMTEwMTEgKi8KKwkweGVkLCAweGMwLCAvKiAxMTEwMTEwMTExICovCisJMHhlZCwgMHhjMCwgLyogMTExMDExMDExMSAqLworCTB4ZjMsIDB4YzAsIC8qIDExMTEwMDExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCisJLyogMTEgMHgwYiAnXksnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBmLCAweGMwLCAvKiAwMDAwMTExMTExICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MDMsIDB4YzAsIC8qIDAwMDAwMDExMTEgKi8KKwkweDA2LCAweGMwLCAvKiAwMDAwMDExMDExICovCisJMHgwYywgMHhjMCwgLyogMDAwMDExMDAxMSAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDY2LCAweDAwLCAvKiAwMTEwMDExMDAwICovCisJMHhjMywgMHgwMCwgLyogMTEwMDAwMTEwMCAqLworCTB4YzMsIDB4MDAsIC8qIDExMDAwMDExMDAgKi8KKwkweGMzLCAweDAwLCAvKiAxMTAwMDAxMTAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMiAweDBjICdeTCcgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDEzIDB4MGQgJ15NJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGYsIDB4ODAsIC8qIDAwMDAxMTExMTAgKi8KKwkweDA4LCAweDgwLCAvKiAwMDAwMTAwMDEwICovCisJMHgwZiwgMHg4MCwgLyogMDAwMDExMTExMCAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDA4LCAweDAwLCAvKiAwMDAwMTAwMDAwICovCisJMHgwOCwgMHgwMCwgLyogMDAwMDEwMDAwMCAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDA4LCAweDAwLCAvKiAwMDAwMTAwMDAwICovCisJMHgwOCwgMHgwMCwgLyogMDAwMDEwMDAwMCAqLworCTB4MzgsIDB4MDAsIC8qIDAwMTExMDAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTQgMHgwZSAnXk4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMCAqLworCTB4MTAsIDB4ODAsIC8qIDAwMDEwMDAwMTAgKi8KKwkweDFmLCAweDgwLCAvKiAwMDAxMTExMTEwICovCisJMHgxMCwgMHg4MCwgLyogMDAwMTAwMDAxMCAqLworCTB4MTAsIDB4ODAsIC8qIDAwMDEwMDAwMTAgKi8KKwkweDEwLCAweDgwLCAvKiAwMDAxMDAwMDEwICovCisJMHgxMCwgMHg4MCwgLyogMDAwMTAwMDAxMCAqLworCTB4MTMsIDB4ODAsIC8qIDAwMDEwMDExMTAgKi8KKwkweDE3LCAweDgwLCAvKiAwMDAxMDExMTEwICovCisJMHg3MywgMHgwMCwgLyogMDExMTAwMTEwMCAqLworCTB4ZjAsIDB4MDAsIC8qIDExMTEwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNSAweDBmICdeTycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgyNCwgMHg4MCwgLyogMDAxMDAxMDAxMCAqLworCTB4MTUsIDB4MDAsIC8qIDAwMDEwMTAxMDAgKi8KKwkweDU1LCAweDQwLCAvKiAwMTAxMDEwMTAxICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4M2YsIDB4ODAsIC8qIDAwMTExMTExMTAgKi8KKwkweDU1LCAweDQwLCAvKiAwMTAxMDEwMTAxICovCisJMHgxNSwgMHgwMCwgLyogMDAwMTAxMDEwMCAqLworCTB4MjQsIDB4ODAsIC8qIDAwMTAwMTAwMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE2IDB4MTAgJ15QJyAqLworCTB4MDAsIDB4ODAsIC8qIDAwMDAwMDAwMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMywgMHg4MCwgLyogMDAwMDAwMTExMCAqLworCTB4MDcsIDB4ODAsIC8qIDAwMDAwMTExMTAgKi8KKwkweDBmLCAweDgwLCAvKiAwMDAwMTExMTEwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMCAqLworCTB4M2YsIDB4ODAsIC8qIDAwMTExMTExMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHhmZiwgMHg4MCwgLyogMTExMTExMTExMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMCAqLworCTB4MGYsIDB4ODAsIC8qIDAwMDAxMTExMTAgKi8KKwkweDA3LCAweDgwLCAvKiAwMDAwMDExMTEwICovCisJMHgwMywgMHg4MCwgLyogMDAwMDAwMTExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAwLCAweDgwLCAvKiAwMDAwMDAwMDEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTcgMHgxMSAnXlEnICovCisJMHg0MCwgMHgwMCwgLyogMDEwMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDcwLCAweDAwLCAvKiAwMTExMDAwMDAwICovCisJMHg3OCwgMHgwMCwgLyogMDExMTEwMDAwMCAqLworCTB4N2MsIDB4MDAsIC8qIDAxMTExMTAwMDAgKi8KKwkweDdlLCAweDAwLCAvKiAwMTExMTExMDAwICovCisJMHg3ZiwgMHgwMCwgLyogMDExMTExMTEwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDdmLCAweGMwLCAvKiAwMTExMTExMTExICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4N2YsIDB4MDAsIC8qIDAxMTExMTExMDAgKi8KKwkweDdlLCAweDAwLCAvKiAwMTExMTExMDAwICovCisJMHg3YywgMHgwMCwgLyogMDExMTExMDAwMCAqLworCTB4NzgsIDB4MDAsIC8qIDAxMTExMDAwMDAgKi8KKwkweDcwLCAweDAwLCAvKiAwMTExMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NDAsIDB4MDAsIC8qIDAxMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxOCAweDEyICdeUicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE5IDB4MTMgJ15TJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjAgMHgxNCAnXlQnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEgKi8KKwkweDM5LCAweDgwLCAvKiAwMDExMTAwMTEwICovCisJMHg3OSwgMHg4MCwgLyogMDExMTEwMDExMCAqLworCTB4NzksIDB4ODAsIC8qIDAxMTExMDAxMTAgKi8KKwkweDc5LCAweDgwLCAvKiAwMTExMTAwMTEwICovCisJMHgzOSwgMHg4MCwgLyogMDAxMTEwMDExMCAqLworCTB4MTksIDB4ODAsIC8qIDAwMDExMDAxMTAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMCAqLworCTB4MTksIDB4ODAsIC8qIDAwMDExMDAxMTAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMCAqLworCTB4MzksIDB4YzAsIC8qIDAwMTExMDAxMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyMSAweDE1ICdeVScgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHgzZSwgMHgwMCwgLyogMDAxMTExMTAwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHgzZSwgMHgwMCwgLyogMDAxMTExMTAwMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDNlLCAweDAwLCAvKiAwMDExMTExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIyIDB4MTYgJ15WJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjMgMHgxNyAnXlcnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyNCAweDE4ICdeWCcgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDI1IDB4MTkgJ15ZJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjYgMHgxYSAnXlonICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwNywgMHgwMCwgLyogMDAwMDAxMTEwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHgwNywgMHgwMCwgLyogMDAwMDAxMTEwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyNyAweDFiICdeWycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgzOCwgMHgwMCwgLyogMDAxMTEwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHgzOCwgMHgwMCwgLyogMDAxMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDA4LCAweDAwLCAvKiAwMDAwMTAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDI4IDB4MWMgJ15cJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjkgMHgxZCAnXl0nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDEyLCAweDAwLCAvKiAwMDAxMDAxMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4NzMsIDB4ODAsIC8qIDAxMTEwMDExMTAgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4NzMsIDB4ODAsIC8qIDAxMTEwMDExMTAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgxMiwgMHgwMCwgLyogMDAwMTAwMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAzMCAweDFlICdeXicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4M2YsIDB4ODAsIC8qIDAwMTExMTExMTAgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMSAqLworCTB4N2YsIDB4YzAsIC8qIDAxMTExMTExMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDMxIDB4MWYgJ15fJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMSAqLworCTB4N2YsIDB4YzAsIC8qIDAxMTExMTExMTEgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMzIgMHgyMCAnICcgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDMzIDB4MjEgJyEnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAzNCAweDIyICciJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHhmNywgMHg4MCwgLyogMTExMTAxMTExMCAqLworCTB4ZjcsIDB4ODAsIC8qIDExMTEwMTExMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDQyLCAweDAwLCAvKiAwMTAwMDAxMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMzUgMHgyMyAnIycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDM2IDB4MjQgJyQnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDNlLCAweDAwLCAvKiAwMDExMTExMDAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4NmYsIDB4ODAsIC8qIDAxMTAxMTExMTAgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHg2YywgMHg4MCwgLyogMDExMDExMDAxMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDBmLCAweDAwLCAvKiAwMDAwMTExMTAwICovCisJMHgwZCwgMHg4MCwgLyogMDAwMDExMDExMCAqLworCTB4NGQsIDB4ODAsIC8qIDAxMDAxMTAxMTAgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHg3ZiwgMHgwMCwgLyogMDExMTExMTEwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAzNyAweDI1ICclJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHg3YiwgMHgwMCwgLyogMDExMTEwMTEwMCAqLworCTB4N2IsIDB4MDAsIC8qIDAxMTExMDExMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDM3LCAweDgwLCAvKiAwMDExMDExMTEwICovCisJMHgzNywgMHg4MCwgLyogMDAxMTAxMTExMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMzggMHgyNiAnJicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwNywgMHgwMCwgLyogMDAwMDAxMTEwMCAqLworCTB4MGYsIDB4ODAsIC8qIDAwMDAxMTExMTAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMCAqLworCTB4MGYsIDB4ODAsIC8qIDAwMDAxMTExMTAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgzZSwgMHgwMCwgLyogMDAxMTExMTAwMCAqLworCTB4NzYsIDB4MDAsIC8qIDAxMTEwMTEwMDAgKi8KKwkweDY2LCAweDQwLCAvKiAwMTEwMDExMDAxICovCisJMHg2MywgMHhjMCwgLyogMDExMDAwMTExMSAqLworCTB4NjMsIDB4ODAsIC8qIDAxMTAwMDExMTAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMCAqLworCTB4MWMsIDB4YzAsIC8qIDAwMDExMTAwMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDM5IDB4MjcgJycnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwICovCisJMHg3OCwgMHgwMCwgLyogMDExMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MjAsIDB4MDAsIC8qIDAwMTAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA0MCAweDI4ICcoJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNDEgMHgyOSAnKScgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDQyIDB4MmEgJyonICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4NGMsIDB4ODAsIC8qIDAxMDAxMTAwMTAgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHg2ZCwgMHg4MCwgLyogMDExMDExMDExMCAqLworCTB4NGMsIDB4ODAsIC8qIDAxMDAxMTAwMTAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA0MyAweDJiICcrJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNDQgMHgyYyAnLCcgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4NzgsIDB4MDAsIC8qIDAxMTExMDAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NDAsIDB4MDAsIC8qIDAxMDAwMDAwMDAgKi8KKworCS8qIDQ1IDB4MmQgJy0nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA0NiAweDJlICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNDcgMHgyZiAnLycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMSwgMHg4MCwgLyogMDAwMDAwMDExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDQ4IDB4MzAgJzAnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgyMywgMHgwMCwgLyogMDAxMDAwMTEwMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYzLCAweDgwLCAvKiAwMTEwMDAxMTEwICovCisJMHg2NSwgMHg4MCwgLyogMDExMDAxMDExMCAqLworCTB4NjUsIDB4ODAsIC8qIDAxMTAwMTAxMTAgKi8KKwkweDY5LCAweDgwLCAvKiAwMTEwMTAwMTEwICovCisJMHg2OSwgMHg4MCwgLyogMDExMDEwMDExMCAqLworCTB4NzEsIDB4ODAsIC8qIDAxMTEwMDAxMTAgKi8KKwkweDYxLCAweDAwLCAvKiAwMTEwMDAwMTAwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKwkweDFjLCAweDAwLCAvKiAwMDAxMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA0OSAweDMxICcxJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MWMsIDB4MDAsIC8qIDAwMDExMTAwMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHg2YywgMHgwMCwgLyogMDExMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNTAgMHgzMiAnMicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDYzLCAweDgwLCAvKiAwMTEwMDAxMTEwICovCisJMHg0MSwgMHg4MCwgLyogMDEwMDAwMDExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDMwLCAweDgwLCAvKiAwMDExMDAwMDEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDUxIDB4MzMgJzMnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWMsIDB4MDAsIC8qIDAwMDExMTAwMDAgKi8KKwkweDNlLCAweDAwLCAvKiAwMDExMTExMDAwICovCisJMHg0NywgMHgwMCwgLyogMDEwMDAxMTEwMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDA3LCAweDAwLCAvKiAwMDAwMDExMTAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDA3LCAweDAwLCAvKiAwMDAwMDExMTAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDQxLCAweDgwLCAvKiAwMTAwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA1MiAweDM0ICc0JyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHgzNiwgMHgwMCwgLyogMDAxMTAxMTAwMCAqLworCTB4NjYsIDB4MDAsIC8qIDAxMTAwMTEwMDAgKi8KKwkweDY2LCAweDAwLCAvKiAwMTEwMDExMDAwICovCisJMHhjNiwgMHgwMCwgLyogMTEwMDAxMTAwMCAqLworCTB4YzYsIDB4MDAsIC8qIDExMDAwMTEwMDAgKi8KKwkweGZmLCAweDgwLCAvKiAxMTExMTExMTEwICovCisJMHhmZiwgMHg4MCwgLyogMTExMTExMTExMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNTMgMHgzNSAnNScgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDdlLCAweDAwLCAvKiAwMTExMTExMDAwICovCisJMHg2NywgMHgwMCwgLyogMDExMDAxMTEwMCAqLworCTB4MDMsIDB4ODAsIC8qIDAwMDAwMDExMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMSwgMHg4MCwgLyogMDAwMDAwMDExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDQxLCAweDgwLCAvKiAwMTAwMDAwMTEwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDU0IDB4MzYgJzYnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NmUsIDB4MDAsIC8qIDAxMTAxMTEwMDAgKi8KKwkweDdmLCAweDAwLCAvKiAwMTExMTExMTAwICovCisJMHg3MywgMHg4MCwgLyogMDExMTAwMTExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg3MSwgMHgwMCwgLyogMDExMTAwMDEwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKwkweDFjLCAweDAwLCAvKiAwMDAxMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA1NSAweDM3ICc3JyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDFmLCAweDgwLCAvKiAwMDAxMTExMTEwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNTYgMHgzOCAnOCcgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4MjMsIDB4MDAsIC8qIDAwMTAwMDExMDAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4MzEsIDB4MDAsIC8qIDAwMTEwMDAxMDAgKi8KKwkweDFhLCAweDAwLCAvKiAwMDAxMTAxMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MTYsIDB4MDAsIC8qIDAwMDEwMTEwMDAgKi8KKwkweDIzLCAweDAwLCAvKiAwMDEwMDAxMTAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDU3IDB4MzkgJzknICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDE3LCAweDAwLCAvKiAwMDAxMDExMTAwICovCisJMHgyMywgMHg4MCwgLyogMDAxMDAwMTExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NzMsIDB4ODAsIC8qIDAxMTEwMDExMTAgKi8KKwkweDNkLCAweDgwLCAvKiAwMDExMTEwMTEwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA1OCAweDNhICc6JyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgzYywgMHgwMCwgLyogMDAxMTExMDAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgzYywgMHgwMCwgLyogMDAxMTExMDAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNTkgMHgzYiAnOycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgzYywgMHgwMCwgLyogMDAxMTExMDAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHgzYywgMHgwMCwgLyogMDAxMTExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MjAsIDB4MDAsIC8qIDAwMTAwMDAwMDAgKi8KKworCS8qIDYwIDB4M2MgJzwnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA2MSAweDNkICc9JyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNjIgMHgzZSAnPicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwMSwgMHg4MCwgLyogMDAwMDAwMDExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDYzIDB4M2YgJz8nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgzYiwgMHg4MCwgLyogMDAxMTEwMTExMCAqLworCTB4MjEsIDB4ODAsIC8qIDAwMTAwMDAxMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA2NCAweDQwICdAJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHg2NSwgMHg4MCwgLyogMDExMDAxMDExMCAqLworCTB4NmQsIDB4ODAsIC8qIDAxMTAxMTAxMTAgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHg2ZCwgMHg4MCwgLyogMDExMDExMDExMCAqLworCTB4NmQsIDB4ODAsIC8qIDAxMTAxMTAxMTAgKi8KKwkweDZmLCAweDgwLCAvKiAwMTEwMTExMTEwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNjUgMHg0MSAnQScgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMCAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYwLCAweGMwLCAvKiAwMTEwMDAwMDExICovCisJMHg2MCwgMHhjMCwgLyogMDExMDAwMDAxMSAqLworCTB4ZjEsIDB4YzAsIC8qIDExMTEwMDAxMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDY2IDB4NDIgJ0InICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZmMsIDB4MDAsIC8qIDExMTExMTAwMDAgKi8KKwkweDYyLCAweDAwLCAvKiAwMTEwMDAxMDAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4N2UsIDB4MDAsIC8qIDAxMTExMTEwMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweGZlLCAweDAwLCAvKiAxMTExMTExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA2NyAweDQzICdDJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBmLCAweDAwLCAvKiAwMDAwMTExMTAwICovCisJMHgxMSwgMHg4MCwgLyogMDAwMTAwMDExMCAqLworCTB4MjAsIDB4ODAsIC8qIDAwMTAwMDAwMTAgKi8KKwkweDIwLCAweDAwLCAvKiAwMDEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHgyMCwgMHgwMCwgLyogMDAxMDAwMDAwMCAqLworCTB4MzAsIDB4ODAsIC8qIDAwMTEwMDAwMTAgKi8KKwkweDE5LCAweDAwLCAvKiAwMDAxMTAwMTAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNjggMHg0NCAnRCcgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmYywgMHgwMCwgLyogMTExMTExMDAwMCAqLworCTB4NjcsIDB4MDAsIC8qIDAxMTAwMTExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDAwLCAvKiAwMTEwMDAwMTAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4ZjgsIDB4MDAsIC8qIDExMTExMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDY5IDB4NDUgJ0UnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDMwLCAweDgwLCAvKiAwMDExMDAwMDEwICovCisJMHgzMCwgMHg4MCwgLyogMDAxMTAwMDAxMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDMxLCAweDAwLCAvKiAwMDExMDAwMTAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHg4MCwgLyogMDAxMTAwMDAxMCAqLworCTB4MzAsIDB4ODAsIC8qIDAwMTEwMDAwMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA3MCAweDQ2ICdGJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHgzMCwgMHg4MCwgLyogMDAxMTAwMDAxMCAqLworCTB4MzAsIDB4ODAsIC8qIDAwMTEwMDAwMTAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzEsIDB4MDAsIC8qIDAwMTEwMDAxMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHg3OCwgMHgwMCwgLyogMDExMTEwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNzEgMHg0NyAnRycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMCAqLworCTB4MTEsIDB4ODAsIC8qIDAwMDEwMDAxMTAgKi8KKwkweDIwLCAweDgwLCAvKiAwMDEwMDAwMDEwICovCisJMHgyMCwgMHgwMCwgLyogMDAxMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDY3LCAweGMwLCAvKiAwMTEwMDExMTExICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4MjEsIDB4ODAsIC8qIDAwMTAwMDAxMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDcyIDB4NDggJ0gnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZjMsIDB4YzAsIC8qIDExMTEwMDExMTEgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweGYzLCAweGMwLCAvKiAxMTExMDAxMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA3MyAweDQ5ICdJJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNzQgMHg0YSAnSicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDcwLCAweDAwLCAvKiAwMTExMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDc1IDB4NGIgJ0snICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZjEsIDB4ODAsIC8qIDExMTEwMDAxMTAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4NmMsIDB4MDAsIC8qIDAxMTAxMTAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwICovCisJMHg3MCwgMHgwMCwgLyogMDExMTAwMDAwMCAqLworCTB4NzAsIDB4MDAsIC8qIDAxMTEwMDAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwICovCisJMHg3OCwgMHgwMCwgLyogMDExMTEwMDAwMCAqLworCTB4NmMsIDB4MDAsIC8qIDAxMTAxMTAwMDAgKi8KKwkweDY2LCAweDAwLCAvKiAwMTEwMDExMDAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweGYwLCAweGMwLCAvKiAxMTExMDAwMDExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA3NiAweDRjICdMJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4ODAsIC8qIDAwMTEwMDAwMTAgKi8KKwkweDMwLCAweDgwLCAvKiAwMDExMDAwMDEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogNzcgMHg0ZCAnTScgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhlMCwgMHhjMCwgLyogMTExMDAwMDAxMSAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDczLCAweDgwLCAvKiAwMTExMDAxMTEwICovCisJMHg3MywgMHg4MCwgLyogMDExMTAwMTExMCAqLworCTB4NmQsIDB4ODAsIC8qIDAxMTAxMTAxMTAgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4ZjMsIDB4YzAsIC8qIDExMTEwMDExMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDc4IDB4NGUgJ04nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZjMsIDB4YzAsIC8qIDExMTEwMDExMTEgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NzEsIDB4ODAsIC8qIDAxMTEwMDAxMTAgKi8KKwkweDc5LCAweDgwLCAvKiAwMTExMTAwMTEwICovCisJMHg3OSwgMHg4MCwgLyogMDExMTEwMDExMCAqLworCTB4NmQsIDB4ODAsIC8qIDAxMTAxMTAxMTAgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHg2NywgMHg4MCwgLyogMDExMDAxMTExMCAqLworCTB4NjcsIDB4ODAsIC8qIDAxMTAwMTExMTAgKi8KKwkweDYzLCAweDgwLCAvKiAwMTEwMDAxMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweGYzLCAweGMwLCAvKiAxMTExMDAxMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA3OSAweDRmICdPJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxNywgMHgwMCwgLyogMDAwMTAxMTEwMCAqLworCTB4MjMsIDB4MDAsIC8qIDAwMTAwMDExMDAgKi8KKwkweDIxLCAweDgwLCAvKiAwMDEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHgyMSwgMHgwMCwgLyogMDAxMDAwMDEwMCAqLworCTB4MzEsIDB4MDAsIC8qIDAwMTEwMDAxMDAgKi8KKwkweDFhLCAweDAwLCAvKiAwMDAxMTAxMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogODAgMHg1MCAnUCcgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmZSwgMHgwMCwgLyogMTExMTExMTAwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg3ZSwgMHgwMCwgLyogMDExMTExMTAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4ZjAsIDB4MDAsIC8qIDExMTEwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDgxIDB4NTEgJ1EnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDEzLCAweDAwLCAvKiAwMDAxMDAxMTAwICovCisJMHgyMywgMHgwMCwgLyogMDAxMDAwMTEwMCAqLworCTB4MjEsIDB4ODAsIC8qIDAwMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDNiLCAweDAwLCAvKiAwMDExMTAxMTAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgyNiwgMHgwMCwgLyogMDAxMDAxMTAwMCAqLworCTB4MDMsIDB4ODAsIC8qIDAwMDAwMDExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA4MiAweDUyICdSJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGZlLCAweDAwLCAvKiAxMTExMTExMDAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4MDAsIC8qIDAxMTAwMDAxMDAgKi8KKwkweDdlLCAweDAwLCAvKiAwMTExMTExMDAwICovCisJMHg3OCwgMHgwMCwgLyogMDExMTEwMDAwMCAqLworCTB4NmMsIDB4MDAsIC8qIDAxMTAxMTAwMDAgKi8KKwkweDZlLCAweDAwLCAvKiAwMTEwMTExMDAwICovCisJMHg2NywgMHgwMCwgLyogMDExMDAxMTEwMCAqLworCTB4NjMsIDB4ODAsIC8qIDAxMTAwMDExMTAgKi8KKwkweDYxLCAweGMwLCAvKiAwMTEwMDAwMTExICovCisJMHhmMCwgMHhjMCwgLyogMTExMTAwMDAxMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogODMgMHg1MyAnUycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDYwLCAweDgwLCAvKiAwMTEwMDAwMDEwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDQxLCAweDgwLCAvKiAwMTAwMDAwMTEwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDg0IDB4NTQgJ1QnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDRjLCAweDgwLCAvKiAwMTAwMTEwMDEwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA4NSAweDU1ICdVJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGYzLCAweGMwLCAvKiAxMTExMDAxMTExICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NzMsIDB4MDAsIC8qIDAxMTEwMDExMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogODYgMHg1NiAnVicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhlMSwgMHhjMCwgLyogMTExMDAwMDExMSAqLworCTB4YzAsIDB4YzAsIC8qIDExMDAwMDAwMTEgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDEyLCAweDAwLCAvKiAwMDAxMDAxMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDg3IDB4NTcgJ1cnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZTEsIDB4YzAsIC8qIDExMTAwMDAxMTEgKi8KKwkweGMwLCAweGMwLCAvKiAxMTAwMDAwMDExICovCisJMHhjMCwgMHhjMCwgLyogMTEwMDAwMDAxMSAqLworCTB4YzAsIDB4YzAsIC8qIDExMDAwMDAwMTEgKi8KKwkweGUwLCAweGMwLCAvKiAxMTEwMDAwMDExICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NmQsIDB4ODAsIC8qIDAxMTAxMTAxMTAgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4NzcsIDB4MDAsIC8qIDAxMTEwMTExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA4OCAweDU4ICdYJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGY3LCAweDgwLCAvKiAxMTExMDExMTEwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHgzNiwgMHgwMCwgLyogMDAxMTAxMTAwMCAqLworCTB4MzYsIDB4MDAsIC8qIDAwMTEwMTEwMDAgKi8KKwkweDFjLCAweDAwLCAvKiAwMDAxMTEwMDAwICovCisJMHgxYywgMHgwMCwgLyogMDAwMTExMDAwMCAqLworCTB4MzYsIDB4MDAsIC8qIDAwMTEwMTEwMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHgzNiwgMHgwMCwgLyogMDAxMTAxMTAwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHhmNywgMHg4MCwgLyogMTExMTAxMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogODkgMHg1OSAnWScgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmMywgMHhjMCwgLyogMTExMTAwMTExMSAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDkwIDB4NWEgJ1onICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4M2YsIDB4ODAsIC8qIDAwMTExMTExMTAgKi8KKwkweDIxLCAweDgwLCAvKiAwMDEwMDAwMTEwICovCisJMHgwMSwgMHg4MCwgLyogMDAwMDAwMDExMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4ODAsIC8qIDAwMTEwMDAwMTAgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA5MSAweDViICdbJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogOTIgMHg1YyAnXCcgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhjMCwgMHgwMCwgLyogMTEwMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMCwgMHhjMCwgLyogMDAwMDAwMDAxMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDkzIDB4NWQgJ10nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKwkweDNlLCAweDAwLCAvKiAwMDExMTExMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDNlLCAweDAwLCAvKiAwMDExMTExMDAwICovCisJMHgzZSwgMHgwMCwgLyogMDAxMTExMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA5NCAweDVlICdeJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogOTUgMHg1ZiAnXycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDk2IDB4NjAgJ2AnICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiA5NyAweDYxICdhJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDIxLCAweDgwLCAvKiAwMDEwMDAwMTEwICovCisJMHgwNywgMHg4MCwgLyogMDAwMDAxMTExMCAqLworCTB4MzksIDB4ODAsIC8qIDAwMTExMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDczLCAweDgwLCAvKiAwMTExMDAxMTEwICovCisJMHgzZCwgMHhjMCwgLyogMDAxMTExMDExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogOTggMHg2MiAnYicgKi8KKwkweDIwLCAweDAwLCAvKiAwMDEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4ZTAsIDB4MDAsIC8qIDExMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjYsIDB4MDAsIC8qIDAxMTAwMTEwMDAgKi8KKwkweDZmLCAweDAwLCAvKiAwMTEwMTExMTAwICovCisJMHg3MywgMHg4MCwgLyogMDExMTAwMTExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDcxLCAweDgwLCAvKiAwMTExMDAwMTEwICovCisJMHg3YiwgMHgwMCwgLyogMDExMTEwMTEwMCAqLworCTB4NGUsIDB4MDAsIC8qIDAxMDAxMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDk5IDB4NjMgJ2MnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgzNywgMHgwMCwgLyogMDAxMTAxMTEwMCAqLworCTB4MjMsIDB4MDAsIC8qIDAwMTAwMDExMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg3MSwgMHgwMCwgLyogMDExMTAwMDEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMDAgMHg2NCAnZCcgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMywgMHg4MCwgLyogMDAwMDAwMTExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMSwgMHg4MCwgLyogMDAwMDAwMDExMCAqLworCTB4MGQsIDB4ODAsIC8qIDAwMDAxMTAxMTAgKi8KKwkweDM3LCAweDgwLCAvKiAwMDExMDExMTEwICovCisJMHgyMywgMHg4MCwgLyogMDAxMDAwMTExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDczLCAweDgwLCAvKiAwMTExMDAxMTEwICovCisJMHgzNSwgMHg4MCwgLyogMDAxMTAxMDExMCAqLworCTB4MTksIDB4YzAsIC8qIDAwMDExMDAxMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDEwMSAweDY1ICdlJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTAyIDB4NjYgJ2YnICovCisJMHgwNywgMHgwMCwgLyogMDAwMDAxMTEwMCAqLworCTB4MDksIDB4ODAsIC8qIDAwMDAxMDAxMTAgKi8KKwkweDA5LCAweDgwLCAvKiAwMDAwMTAwMTEwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4N2YsIDB4MDAsIC8qIDAxMTExMTExMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMDMgMHg2NyAnZycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWMsIDB4ODAsIC8qIDAwMDExMTAwMTAgKi8KKwkweDM3LCAweDgwLCAvKiAwMDExMDExMTEwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHgzYywgMHgwMCwgLyogMDAxMTExMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDdmLCAweDAwLCAvKiAwMTExMTExMTAwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMCAqLworCTB4MjEsIDB4ODAsIC8qIDAwMTAwMDAxMTAgKi8KKwkweDQwLCAweDgwLCAvKiAwMTAwMDAwMDEwICovCisJMHg3ZiwgMHgwMCwgLyogMDExMTExMTEwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKworCS8qIDEwNCAweDY4ICdoJyAqLworCTB4MTAsIDB4MDAsIC8qIDAwMDEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHg3MCwgMHgwMCwgLyogMDExMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzNywgMHgwMCwgLyogMDAxMTAxMTEwMCAqLworCTB4M2IsIDB4ODAsIC8qIDAwMTExMDExMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHg3YiwgMHhjMCwgLyogMDExMTEwMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTA1IDB4NjkgJ2knICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMDYgMHg2YSAnaicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMSwgMHg4MCwgLyogMDAwMDAwMDExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDcsIDB4ODAsIC8qIDAwMDAwMTExMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMSwgMHg4MCwgLyogMDAwMDAwMDExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMSwgMHg4MCwgLyogMDAwMDAwMDExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHg0MSwgMHg4MCwgLyogMDEwMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDcxLCAweDgwLCAvKiAwMTExMDAwMTEwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4MWMsIDB4MDAsIC8qIDAwMDExMTAwMDAgKi8KKworCS8qIDEwNyAweDZiICdrJyAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweGUwLCAweDAwLCAvKiAxMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MywgMHg4MCwgLyogMDExMDAwMTExMCAqLworCTB4NjYsIDB4MDAsIC8qIDAxMTAwMTEwMDAgKi8KKwkweDZjLCAweDAwLCAvKiAwMTEwMTEwMDAwICovCisJMHg3OCwgMHgwMCwgLyogMDExMTEwMDAwMCAqLworCTB4NzAsIDB4MDAsIC8qIDAxMTEwMDAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwICovCisJMHg2YywgMHgwMCwgLyogMDExMDExMDAwMCAqLworCTB4NmUsIDB4MDAsIC8qIDAxMTAxMTEwMDAgKi8KKwkweDY3LCAweDAwLCAvKiAwMTEwMDExMTAwICovCisJMHhmMywgMHg4MCwgLyogMTExMTAwMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTA4IDB4NmMgJ2wnICovCisJMHgzYywgMHgwMCwgLyogMDAxMTExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMDkgMHg2ZCAnbScgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZGIsIDB4ODAsIC8qIDExMDExMDExMTAgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHg2ZCwgMHg4MCwgLyogMDExMDExMDExMCAqLworCTB4NmQsIDB4ODAsIC8qIDAxMTAxMTAxMTAgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHg2ZCwgMHg4MCwgLyogMDExMDExMDExMCAqLworCTB4NmQsIDB4ODAsIC8qIDAxMTAxMTAxMTAgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHg2ZCwgMHg4MCwgLyogMDExMDExMDExMCAqLworCTB4ZWQsIDB4YzAsIC8qIDExMTAxMTAxMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDExMCAweDZlICduJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg2ZiwgMHgwMCwgLyogMDExMDExMTEwMCAqLworCTB4N2IsIDB4ODAsIC8qIDAxMTExMDExMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHg3YiwgMHhjMCwgLyogMDExMTEwMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTExIDB4NmYgJ28nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4YzMsIDB4MDAsIC8qIDExMDAwMDExMDAgKi8KKwkweGMxLCAweDgwLCAvKiAxMTAwMDAwMTEwICovCisJMHhjMSwgMHg4MCwgLyogMTEwMDAwMDExMCAqLworCTB4YzEsIDB4ODAsIC8qIDExMDAwMDAxMTAgKi8KKwkweGMxLCAweDgwLCAvKiAxMTAwMDAwMTEwICovCisJMHhlMSwgMHg4MCwgLyogMTExMDAwMDExMCAqLworCTB4NzMsIDB4MDAsIC8qIDAxMTEwMDExMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMTIgMHg3MCAncCcgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZGUsIDB4MDAsIC8qIDExMDExMTEwMDAgKi8KKwkweDc2LCAweDAwLCAvKiAwMTExMDExMDAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDcxLCAweDgwLCAvKiAwMTExMDAwMTEwICovCisJMHg3YiwgMHgwMCwgLyogMDExMTEwMTEwMCAqLworCTB4N2UsIDB4MDAsIC8qIDAxMTExMTEwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4ZjAsIDB4MDAsIC8qIDExMTEwMDAwMDAgKi8KKworCS8qIDExMyAweDcxICdxJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwZSwgMHhjMCwgLyogMDAwMDExMTAxMSAqLworCTB4MWIsIDB4ODAsIC8qIDAwMDExMDExMTAgKi8KKwkweDMzLCAweDgwLCAvKiAwMDExMDAxMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NzEsIDB4ODAsIC8qIDAxMTEwMDAxMTAgKi8KKwkweDNiLCAweDgwLCAvKiAwMDExMTAxMTEwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMywgMHhjMCwgLyogMDAwMDAwMTExMSAqLworCisJLyogMTE0IDB4NzIgJ3InICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDczLCAweDAwLCAvKiAwMTExMDAxMTAwICovCisJMHgzNSwgMHg4MCwgLyogMDAxMTAxMDExMCAqLworCTB4MzksIDB4ODAsIC8qIDAwMTExMDAxMTAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMTUgMHg3MyAncycgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MSwgMHgwMCwgLyogMDExMDAwMDEwMCAqLworCTB4NzAsIDB4MDAsIC8qIDAxMTEwMDAwMDAgKi8KKwkweDM4LCAweDAwLCAvKiAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MDcsIDB4MDAsIC8qIDAwMDAwMTExMDAgKi8KKwkweDQzLCAweDAwLCAvKiAwMTAwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4N2UsIDB4MDAsIC8qIDAxMTExMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDExNiAweDc0ICd0JyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwOCwgMHgwMCwgLyogMDAwMDEwMDAwMCAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDFjLCAweDgwLCAvKiAwMDAxMTEwMDEwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTE3IDB4NzUgJ3UnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGY3LCAweDgwLCAvKiAxMTExMDExMTEwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NzcsIDB4MDAsIC8qIDAxMTEwMTExMDAgKi8KKwkweDNkLCAweDgwLCAvKiAwMDExMTEwMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMTggMHg3NiAndicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZjEsIDB4YzAsIC8qIDExMTEwMDAxMTEgKi8KKwkweDYwLCAweGMwLCAvKiAwMTEwMDAwMDExICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAgKi8KKwkweDBmLCAweDAwLCAvKiAwMDAwMTExMTAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDExOSAweDc3ICd3JyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhlMywgMHhjMCwgLyogMTExMDAwMTExMSAqLworCTB4YzEsIDB4ODAsIC8qIDExMDAwMDAxMTAgKi8KKwkweGMxLCAweDgwLCAvKiAxMTAwMDAwMTEwICovCisJMHhjMSwgMHg4MCwgLyogMTEwMDAwMDExMCAqLworCTB4YzEsIDB4ODAsIC8qIDExMDAwMDAxMTAgKi8KKwkweDZiLCAweDAwLCAvKiAwMTEwMTAxMTAwICovCisJMHg2YiwgMHgwMCwgLyogMDExMDEwMTEwMCAqLworCTB4N2UsIDB4MDAsIC8qIDAxMTExMTEwMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHgzNiwgMHgwMCwgLyogMDAxMTAxMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTIwIDB4NzggJ3gnICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGY3LCAweDgwLCAvKiAxMTExMDExMTEwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4MzYsIDB4MDAsIC8qIDAwMTEwMTEwMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHgxYywgMHgwMCwgLyogMDAwMTExMDAwMCAqLworCTB4MWMsIDB4MDAsIC8qIDAwMDExMTAwMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweGY3LCAweDgwLCAvKiAxMTExMDExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMjEgMHg3OSAneScgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZjMsIDB4YzAsIC8qIDExMTEwMDExMTEgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHg3OCwgMHgwMCwgLyogMDExMTEwMDAwMCAqLworCTB4NzAsIDB4MDAsIC8qIDAxMTEwMDAwMDAgKi8KKworCS8qIDEyMiAweDdhICd6JyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDQzLCAweDAwLCAvKiAwMTAwMDAxMTAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4NjAsIDB4ODAsIC8qIDAxMTAwMDAwMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTIzIDB4N2IgJ3snICovCisJMHgwNywgMHgwMCwgLyogMDAwMDAxMTEwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4NzAsIDB4MDAsIC8qIDAxMTEwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDA3LCAweDAwLCAvKiAwMDAwMDExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMjQgMHg3YyAnfCcgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDEyNSAweDdkICd9JyAqLworCTB4MzgsIDB4MDAsIC8qIDAwMTExMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDAzLCAweDgwLCAvKiAwMDAwMDAxMTEwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgzOCwgMHgwMCwgLyogMDAxMTEwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTI2IDB4N2UgJ34nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MTgsIDB4ODAsIC8qIDAwMDExMDAwMTAgKi8KKwkweDNkLCAweDgwLCAvKiAwMDExMTEwMTEwICovCisJMHg2ZiwgMHgwMCwgLyogMDExMDExMTEwMCAqLworCTB4NDYsIDB4MDAsIC8qIDAxMDAwMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMjcgMHg3ZiAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDEyLCAweDAwLCAvKiAwMDAxMDAxMDAwICovCisJMHgyMSwgMHgwMCwgLyogMDAxMDAwMDEwMCAqLworCTB4NDAsIDB4ODAsIC8qIDAxMDAwMDAwMTAgKi8KKwkweDQwLCAweDgwLCAvKiAwMTAwMDAwMDEwICovCisJMHg0MCwgMHg4MCwgLyogMDEwMDAwMDAxMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDEyOCAweDgwICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgyMSwgMHg4MCwgLyogMDAxMDAwMDExMCAqLworCTB4NDAsIDB4ODAsIC8qIDAxMDAwMDAwMTAgKi8KKwkweDQwLCAweDAwLCAvKiAwMTAwMDAwMDAwICovCisJMHg0MCwgMHgwMCwgLyogMDEwMDAwMDAwMCAqLworCTB4NDAsIDB4MDAsIC8qIDAxMDAwMDAwMDAgKi8KKwkweDQwLCAweDAwLCAvKiAwMTAwMDAwMDAwICovCisJMHg0MCwgMHgwMCwgLyogMDEwMDAwMDAwMCAqLworCTB4NDAsIDB4MDAsIC8qIDAxMDAwMDAwMDAgKi8KKwkweDYwLCAweDgwLCAvKiAwMTEwMDAwMDEwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDA4LCAweDAwLCAvKiAwMDAwMTAwMDAwICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMCAqLworCTB4MDIsIDB4MDAsIC8qIDAwMDAwMDEwMDAgKi8KKwkweDAyLCAweDAwLCAvKiAwMDAwMDAxMDAwICovCisJMHgxYywgMHgwMCwgLyogMDAwMTExMDAwMCAqLworCisJLyogMTI5IDB4ODEgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDdiLCAweDgwLCAvKiAwMTExMTAxMTEwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4MzEsIDB4MDAsIC8qIDAwMTEwMDAxMDAgKi8KKwkweDMxLCAweDAwLCAvKiAwMDExMDAwMTAwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4MzEsIDB4MDAsIC8qIDAwMTEwMDAxMDAgKi8KKwkweDMxLCAweDAwLCAvKiAwMDExMDAwMTAwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4M2IsIDB4MDAsIC8qIDAwMTExMDExMDAgKi8KKwkweDFjLCAweDgwLCAvKiAwMDAxMTEwMDEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMzAgMHg4MiAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMSwgMHgwMCwgLyogMDAwMDAwMDEwMCAqLworCTB4MDIsIDB4MDAsIC8qIDAwMDAwMDEwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDEzMSAweDgzICcuJyAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDIxLCAweDgwLCAvKiAwMDEwMDAwMTEwICovCisJMHgwNywgMHg4MCwgLyogMDAwMDAxMTExMCAqLworCTB4MzksIDB4ODAsIC8qIDAwMTExMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDczLCAweDgwLCAvKiAwMTExMDAxMTEwICovCisJMHgzZCwgMHhjMCwgLyogMDAxMTExMDExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTMyIDB4ODQgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MjEsIDB4ODAsIC8qIDAwMTAwMDAxMTAgKi8KKwkweDA3LCAweDgwLCAvKiAwMDAwMDExMTEwICovCisJMHgzOSwgMHg4MCwgLyogMDAxMTEwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NzMsIDB4ODAsIC8qIDAxMTEwMDExMTAgKi8KKwkweDNkLCAweGMwLCAvKiAwMDExMTEwMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMzMgMHg4NSAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgyMSwgMHg4MCwgLyogMDAxMDAwMDExMCAqLworCTB4MDcsIDB4ODAsIC8qIDAwMDAwMTExMTAgKi8KKwkweDM5LCAweDgwLCAvKiAwMDExMTAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg3MywgMHg4MCwgLyogMDExMTAwMTExMCAqLworCTB4M2QsIDB4YzAsIC8qIDAwMTExMTAxMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDEzNCAweDg2ICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDIxLCAweDgwLCAvKiAwMDEwMDAwMTEwICovCisJMHgwNywgMHg4MCwgLyogMDAwMDAxMTExMCAqLworCTB4MzksIDB4ODAsIC8qIDAwMTExMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDczLCAweDgwLCAvKiAwMTExMDAxMTEwICovCisJMHgzZCwgMHhjMCwgLyogMDAxMTExMDExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTM1IDB4ODcgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MjAsIDB4ODAsIC8qIDAwMTAwMDAwMTAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDcwLCAweDgwLCAvKiAwMTExMDAwMDEwICovCisJMHgzMCwgMHg4MCwgLyogMDAxMTAwMDAxMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgwMiwgMHgwMCwgLyogMDAwMDAwMTAwMCAqLworCTB4MDEsIDB4MDAsIC8qIDAwMDAwMDAxMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisKKwkvKiAxMzYgMHg4OCAnLicgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDEzNyAweDg5ICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHgzNiwgMHgwMCwgLyogMDAxMTAxMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTM4IDB4OGEgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MTksIDB4ODAsIC8qIDAwMDExMDAxMTAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxMzkgMHg4YiAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzNiwgMHgwMCwgLyogMDAxMTAxMTAwMCAqLworCTB4MzYsIDB4MDAsIC8qIDAwMTEwMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE0MCAweDhjICcuJyAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDFjLCAweDAwLCAvKiAwMDAxMTEwMDAwICovCisJMHgzNiwgMHgwMCwgLyogMDAxMTAxMTAwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzYywgMHgwMCwgLyogMDAxMTExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTQxIDB4OGQgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNDIgMHg4ZSAnLicgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgxOSwgMHgwMCwgLyogMDAwMTEwMDEwMCAqLworCTB4MTksIDB4MDAsIC8qIDAwMDExMDAxMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4MzEsIDB4MDAsIC8qIDAwMTEwMDAxMDAgKi8KKwkweDYwLCAweDgwLCAvKiAwMTEwMDAwMDEwICovCisJMHg2MCwgMHg4MCwgLyogMDExMDAwMDAxMCAqLworCTB4ZjMsIDB4YzAsIC8qIDExMTEwMDExMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE0MyAweDhmICcuJyAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAgKi8KKwkweDBhLCAweDAwLCAvKiAwMDAwMTAxMDAwICovCisJMHgwYSwgMHgwMCwgLyogMDAwMDEwMTAwMCAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDE5LCAweDAwLCAvKiAwMDAxMTAwMTAwICovCisJMHgxOSwgMHgwMCwgLyogMDAwMTEwMDEwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDMxLCAweDAwLCAvKiAwMDExMDAwMTAwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4NjAsIDB4ODAsIC8qIDAxMTAwMDAwMTAgKi8KKwkweDYwLCAweDgwLCAvKiAwMTEwMDAwMDEwICovCisJMHhmMywgMHhjMCwgLyogMTExMTAwMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTQ0IDB4OTAgJy4nICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MzAsIDB4ODAsIC8qIDAwMTEwMDAwMTAgKi8KKwkweDMwLCAweDgwLCAvKiAwMDExMDAwMDEwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzEsIDB4MDAsIC8qIDAwMTEwMDAxMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHg4MCwgLyogMDAxMTAwMDAxMCAqLworCTB4MzAsIDB4ODAsIC8qIDAwMTEwMDAwMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNDUgMHg5MSAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4M2IsIDB4ODAsIC8qIDAwMTExMDExMTAgKi8KKwkweDZjLCAweGMwLCAvKiAwMTEwMTEwMDExICovCisJMHg0YywgMHhjMCwgLyogMDEwMDExMDAxMSAqLworCTB4MGMsIDB4YzAsIC8qIDAwMDAxMTAwMTEgKi8KKwkweDNmLCAweGMwLCAvKiAwMDExMTExMTExICovCisJMHg2YywgMHgwMCwgLyogMDExMDExMDAwMCAqLworCTB4Y2MsIDB4MDAsIC8qIDExMDAxMTAwMDAgKi8KKwkweGNjLCAweDAwLCAvKiAxMTAwMTEwMDAwICovCisJMHhlZSwgMHhjMCwgLyogMTExMDExMTAxMSAqLworCTB4N2IsIDB4ODAsIC8qIDAxMTExMDExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE0NiAweDkyICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDA3LCAweGMwLCAvKiAwMDAwMDExMTExICovCisJMHgwZSwgMHg0MCwgLyogMDAwMDExMTAwMSAqLworCTB4MGUsIDB4NDAsIC8qIDAwMDAxMTEwMDEgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgxNiwgMHgwMCwgLyogMDAwMTAxMTAwMCAqLworCTB4MTYsIDB4ODAsIC8qIDAwMDEwMTEwMTAgKi8KKwkweDE3LCAweDgwLCAvKiAwMDAxMDExMTEwICovCisJMHgxNiwgMHg4MCwgLyogMDAwMTAxMTAxMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKwkweDI2LCAweDAwLCAvKiAwMDEwMDExMDAwICovCisJMHgyNiwgMHgwMCwgLyogMDAxMDAxMTAwMCAqLworCTB4NDYsIDB4NDAsIC8qIDAxMDAwMTEwMDEgKi8KKwkweDQ2LCAweDQwLCAvKiAwMTAwMDExMDAxICovCisJMHhlZiwgMHhjMCwgLyogMTExMDExMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTQ3IDB4OTMgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDFjLCAweDAwLCAvKiAwMDAxMTEwMDAwICovCisJMHgzNiwgMHgwMCwgLyogMDAxMTAxMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4YzMsIDB4MDAsIC8qIDExMDAwMDExMDAgKi8KKwkweGMxLCAweDgwLCAvKiAxMTAwMDAwMTEwICovCisJMHhjMSwgMHg4MCwgLyogMTEwMDAwMDExMCAqLworCTB4YzEsIDB4ODAsIC8qIDExMDAwMDAxMTAgKi8KKwkweGMxLCAweDgwLCAvKiAxMTAwMDAwMTEwICovCisJMHhlMSwgMHg4MCwgLyogMTExMDAwMDExMCAqLworCTB4NzMsIDB4MDAsIC8qIDAxMTEwMDExMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNDggMHg5NCAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDY2LCAweDAwLCAvKiAwMTEwMDExMDAwICovCisJMHhjMywgMHgwMCwgLyogMTEwMDAwMTEwMCAqLworCTB4YzEsIDB4ODAsIC8qIDExMDAwMDAxMTAgKi8KKwkweGMxLCAweDgwLCAvKiAxMTAwMDAwMTEwICovCisJMHhjMSwgMHg4MCwgLyogMTEwMDAwMDExMCAqLworCTB4YzEsIDB4ODAsIC8qIDExMDAwMDAxMTAgKi8KKwkweGUxLCAweDgwLCAvKiAxMTEwMDAwMTEwICovCisJMHg3MywgMHgwMCwgLyogMDExMTAwMTEwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE0OSAweDk1ICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzYywgMHgwMCwgLyogMDAxMTExMDAwMCAqLworCTB4NjYsIDB4MDAsIC8qIDAxMTAwMTEwMDAgKi8KKwkweGMzLCAweDAwLCAvKiAxMTAwMDAxMTAwICovCisJMHhjMSwgMHg4MCwgLyogMTEwMDAwMDExMCAqLworCTB4YzEsIDB4ODAsIC8qIDExMDAwMDAxMTAgKi8KKwkweGMxLCAweDgwLCAvKiAxMTAwMDAwMTEwICovCisJMHhjMSwgMHg4MCwgLyogMTEwMDAwMDExMCAqLworCTB4ZTEsIDB4ODAsIC8qIDExMTAwMDAxMTAgKi8KKwkweDczLCAweDAwLCAvKiAwMTExMDAxMTAwICovCisJMHgzYywgMHgwMCwgLyogMDAxMTExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTUwIDB4OTYgJy4nICovCisJMHgwOCwgMHgwMCwgLyogMDAwMDEwMDAwMCAqLworCTB4MWMsIDB4MDAsIC8qIDAwMDExMTAwMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGY3LCAweDgwLCAvKiAxMTExMDExMTEwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NzcsIDB4MDAsIC8qIDAxMTEwMTExMDAgKi8KKwkweDNkLCAweDgwLCAvKiAwMDExMTEwMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNTEgMHg5NyAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZjcsIDB4ODAsIC8qIDExMTEwMTExMTAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg3NywgMHgwMCwgLyogMDExMTAxMTEwMCAqLworCTB4M2QsIDB4ODAsIC8qIDAwMTExMTAxMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE1MiAweDk4ICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmMywgMHhjMCwgLyogMTExMTAwMTExMSAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwICovCisJMHg3MCwgMHgwMCwgLyogMDExMTAwMDAwMCAqLworCisJLyogMTUzIDB4OTkgJy4nICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxNywgMHgwMCwgLyogMDAwMTAxMTEwMCAqLworCTB4MjMsIDB4MDAsIC8qIDAwMTAwMDExMDAgKi8KKwkweDIxLCAweDgwLCAvKiAwMDEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDIxLCAweDAwLCAvKiAwMDEwMDAwMTAwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4MWEsIDB4MDAsIC8qIDAwMDExMDEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNTQgMHg5YSAnLicgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGYxLCAweGMwLCAvKiAxMTExMDAwMTExICovCisJMHg2MCwgMHg4MCwgLyogMDExMDAwMDAxMCAqLworCTB4NjAsIDB4ODAsIC8qIDAxMTAwMDAwMTAgKi8KKwkweDYwLCAweDgwLCAvKiAwMTEwMDAwMDEwICovCisJMHg2MCwgMHg4MCwgLyogMDExMDAwMDAxMCAqLworCTB4NjAsIDB4ODAsIC8qIDAxMTAwMDAwMTAgKi8KKwkweDYwLCAweDgwLCAvKiAwMTEwMDAwMDEwICovCisJMHg2MCwgMHg4MCwgLyogMDExMDAwMDAxMCAqLworCTB4NjAsIDB4ODAsIC8qIDAxMTAwMDAwMTAgKi8KKwkweDcxLCAweDAwLCAvKiAwMTExMDAwMTAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE1NSAweDliICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMCAqLworCTB4MzYsIDB4ODAsIC8qIDAwMTEwMTEwMTAgKi8KKwkweDI2LCAweDAwLCAvKiAwMDEwMDExMDAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4NjYsIDB4MDAsIC8qIDAxMTAwMTEwMDAgKi8KKwkweDY2LCAweDAwLCAvKiAwMTEwMDExMDAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4NzYsIDB4MDAsIC8qIDAxMTEwMTEwMDAgKi8KKwkweDM2LCAweDgwLCAvKiAwMDExMDExMDEwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTU2IDB4OWMgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDNiLCAweDAwLCAvKiAwMDExMTAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4N2UsIDB4MDAsIC8qIDAxMTExMTEwMDAgKi8KKwkweDdlLCAweDAwLCAvKiAwMTExMTExMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4N2MsIDB4ODAsIC8qIDAxMTExMTAwMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg0MywgMHgwMCwgLyogMDEwMDAwMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNTcgMHg5ZCAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg0MCwgMHg4MCwgLyogMDEwMDAwMDAxMCAqLworCTB4NDAsIDB4ODAsIC8qIDAxMDAwMDAwMTAgKi8KKwkweDIxLCAweDAwLCAvKiAwMDEwMDAwMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE1OCAweDllICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGJmLCAweDAwLCAvKiAxMDExMTExMTAwICovCisJMHg0MCwgMHg4MCwgLyogMDEwMDAwMDAxMCAqLworCTB4NDAsIDB4ODAsIC8qIDAxMDAwMDAwMTAgKi8KKwkweDdmLCAweDAwLCAvKiAwMTExMTExMTAwICovCisJMHg0MCwgMHgwMCwgLyogMDEwMDAwMDAwMCAqLworCTB4NDgsIDB4MDAsIC8qIDAxMDAxMDAwMDAgKi8KKwkweDQ4LCAweDAwLCAvKiAwMTAwMTAwMDAwICovCisJMHg1ZSwgMHgwMCwgLyogMDEwMTExMTAwMCAqLworCTB4NDgsIDB4MDAsIC8qIDAxMDAxMDAwMDAgKi8KKwkweDQ4LCAweDAwLCAvKiAwMTAwMTAwMDAwICovCisJMHg0OCwgMHgwMCwgLyogMDEwMDEwMDAwMCAqLworCTB4NDgsIDB4ODAsIC8qIDAxMDAxMDAwMTAgKi8KKwkweDQ3LCAweDAwLCAvKiAwMTAwMDExMTAwICovCisJMHhlMCwgMHgwMCwgLyogMTExMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTU5IDB4OWYgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDA0LCAweDgwLCAvKiAwMDAwMDEwMDEwICovCisJMHgwOCwgMHgwMCwgLyogMDAwMDEwMDAwMCAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDA4LCAweDAwLCAvKiAwMDAwMTAwMDAwICovCisJMHgwOCwgMHgwMCwgLyogMDAwMDEwMDAwMCAqLworCTB4MDksIDB4MDAsIC8qIDAwMDAxMDAxMDAgKi8KKwkweDNlLCAweDAwLCAvKiAwMDExMTExMDAwICovCisJMHg0OCwgMHgwMCwgLyogMDEwMDEwMDAwMCAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDA4LCAweDAwLCAvKiAwMDAwMTAwMDAwICovCisJMHgwOCwgMHgwMCwgLyogMDAwMDEwMDAwMCAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDA4LCAweDAwLCAvKiAwMDAwMTAwMDAwICovCisJMHg5MCwgMHgwMCwgLyogMTAwMTAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNjAgMHhhMCAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgyMSwgMHg4MCwgLyogMDAxMDAwMDExMCAqLworCTB4MDcsIDB4ODAsIC8qIDAwMDAwMTExMTAgKi8KKwkweDM5LCAweDgwLCAvKiAwMDExMTAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg3MywgMHg4MCwgLyogMDExMTAwMTExMCAqLworCTB4M2QsIDB4YzAsIC8qIDAwMTExMTAxMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE2MSAweGExICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzYywgMHgwMCwgLyogMDAxMTExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTYyIDB4YTIgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4YzMsIDB4MDAsIC8qIDExMDAwMDExMDAgKi8KKwkweGMxLCAweDgwLCAvKiAxMTAwMDAwMTEwICovCisJMHhjMSwgMHg4MCwgLyogMTEwMDAwMDExMCAqLworCTB4YzEsIDB4ODAsIC8qIDExMDAwMDAxMTAgKi8KKwkweGMxLCAweDgwLCAvKiAxMTAwMDAwMTEwICovCisJMHhlMSwgMHg4MCwgLyogMTExMDAwMDExMCAqLworCTB4NzMsIDB4MDAsIC8qIDAxMTEwMDExMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNjMgMHhhMyAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZjcsIDB4ODAsIC8qIDExMTEwMTExMTAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg3NywgMHgwMCwgLyogMDExMTAxMTEwMCAqLworCTB4M2QsIDB4ODAsIC8qIDAwMTExMTAxMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE2NCAweGE0ICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDM4LCAweDgwLCAvKiAwMDExMTAwMDEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4NDcsIDB4MDAsIC8qIDAxMDAwMTExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg2ZiwgMHgwMCwgLyogMDExMDExMTEwMCAqLworCTB4N2IsIDB4ODAsIC8qIDAxMTExMDExMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwICovCisJMHg3YiwgMHhjMCwgLyogMDExMTEwMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTY1IDB4YTUgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MzgsIDB4ODAsIC8qIDAwMTExMDAwMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg0NywgMHgwMCwgLyogMDEwMDAxMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGUzLCAweGMwLCAvKiAxMTEwMDAxMTExICovCisJMHg3MSwgMHg4MCwgLyogMDExMTAwMDExMCAqLworCTB4NzksIDB4ODAsIC8qIDAxMTExMDAxMTAgKi8KKwkweDc5LCAweDgwLCAvKiAwMTExMTAwMTEwICovCisJMHg2ZCwgMHg4MCwgLyogMDExMDExMDExMCAqLworCTB4NmQsIDB4ODAsIC8qIDAxMTAxMTAxMTAgKi8KKwkweDY3LCAweDgwLCAvKiAwMTEwMDExMTEwICovCisJMHg2MywgMHg4MCwgLyogMDExMDAwMTExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweGYwLCAweGMwLCAvKiAxMTExMDAwMDExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNjYgMHhhNiAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzZSwgMHgwMCwgLyogMDAxMTExMTAwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjcsIDB4MDAsIC8qIDAxMTAwMTExMDAgKi8KKwkweDNiLCAweDgwLCAvKiAwMDExMTAxMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE2NyAweGE3ICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MjEsIDB4ODAsIC8qIDAwMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDAwLCAvKiAwMTEwMDAwMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MWMsIDB4MDAsIC8qIDAwMDExMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTY4IDB4YTggJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDgwLCAvKiAwMTEwMDAwMDEwICovCisJMHg3MywgMHg4MCwgLyogMDExMTAwMTExMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNjkgMHhhOSAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE3MCAweGFhICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMSwgMHg4MCwgLyogMDAwMDAwMDExMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTcxIDB4YWIgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MjAsIDB4MDAsIC8qIDAwMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHgyMCwgMHgwMCwgLyogMDAxMDAwMDAwMCAqLworCTB4MjAsIDB4ODAsIC8qIDAwMTAwMDAwMTAgKi8KKwkweDIxLCAweDAwLCAvKiAwMDEwMDAwMTAwICovCisJMHgyMiwgMHgwMCwgLyogMDAxMDAwMTAwMCAqLworCTB4NzQsIDB4MDAsIC8qIDAxMTEwMTAwMDAgKi8KKwkweDA4LCAweDAwLCAvKiAwMDAwMTAwMDAwICovCisJMHgxNywgMHgwMCwgLyogMDAwMTAxMTEwMCAqLworCTB4MjgsIDB4ODAsIC8qIDAwMTAxMDAwMTAgKi8KKwkweDQzLCAweDAwLCAvKiAwMTAwMDAxMTAwICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMCAqLworCTB4MDgsIDB4MDAsIC8qIDAwMDAxMDAwMDAgKi8KKwkweDBmLCAweDgwLCAvKiAwMDAwMTExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNzIgMHhhYyAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgyMCwgMHgwMCwgLyogMDAxMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDIwLCAweDAwLCAvKiAwMDEwMDAwMDAwICovCisJMHgyMCwgMHg4MCwgLyogMDAxMDAwMDAxMCAqLworCTB4MjEsIDB4MDAsIC8qIDAwMTAwMDAxMDAgKi8KKwkweDIyLCAweDAwLCAvKiAwMDEwMDAxMDAwICovCisJMHg3NCwgMHgwMCwgLyogMDExMTAxMDAwMCAqLworCTB4MDksIDB4MDAsIC8qIDAwMDAxMDAxMDAgKi8KKwkweDEzLCAweDAwLCAvKiAwMDAxMDAxMTAwICovCisJMHgyNSwgMHgwMCwgLyogMDAxMDAxMDEwMCAqLworCTB4NDksIDB4MDAsIC8qIDAxMDAxMDAxMDAgKi8KKwkweDFmLCAweDgwLCAvKiAwMDAxMTExMTEwICovCisJMHgwMSwgMHgwMCwgLyogMDAwMDAwMDEwMCAqLworCTB4MDEsIDB4MDAsIC8qIDAwMDAwMDAxMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE3MyAweGFkICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTc0IDB4YWUgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBkLCAweDgwLCAvKiAwMDAwMTEwMTEwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MzYsIDB4MDAsIC8qIDAwMTEwMTEwMDAgKi8KKwkweDZjLCAweDAwLCAvKiAwMTEwMTEwMDAwICovCisJMHhkOCwgMHgwMCwgLyogMTEwMTEwMDAwMCAqLworCTB4NmMsIDB4MDAsIC8qIDAxMTAxMTAwMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MGQsIDB4ODAsIC8qIDAwMDAxMTAxMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxNzUgMHhhZiAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4NmMsIDB4MDAsIC8qIDAxMTAxMTAwMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MGQsIDB4ODAsIC8qIDAwMDAxMTAxMTAgKi8KKwkweDA2LCAweGMwLCAvKiAwMDAwMDExMDExICovCisJMHgwZCwgMHg4MCwgLyogMDAwMDExMDExMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwICovCisJMHg2YywgMHgwMCwgLyogMDExMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE3NiAweGIwICcuJyAqLworCTB4YzMsIDB4MDAsIC8qIDExMDAwMDExMDAgKi8KKwkweDQxLCAweDAwLCAvKiAwMTAwMDAwMTAwICovCisJMHgxOCwgMHg0MCwgLyogMDAwMTEwMDAwMSAqLworCTB4MTAsIDB4NDAsIC8qIDAwMDEwMDAwMDEgKi8KKwkweGMzLCAweDAwLCAvKiAxMTAwMDAxMTAwICovCisJMHg0MSwgMHgwMCwgLyogMDEwMDAwMDEwMCAqLworCTB4MTgsIDB4NDAsIC8qIDAwMDExMDAwMDEgKi8KKwkweDEwLCAweDQwLCAvKiAwMDAxMDAwMDAxICovCisJMHhjMywgMHgwMCwgLyogMTEwMDAwMTEwMCAqLworCTB4NDEsIDB4MDAsIC8qIDAxMDAwMDAxMDAgKi8KKwkweDE4LCAweDQwLCAvKiAwMDAxMTAwMDAxICovCisJMHgxMCwgMHg0MCwgLyogMDAwMTAwMDAwMSAqLworCTB4YzMsIDB4MDAsIC8qIDExMDAwMDExMDAgKi8KKwkweDQxLCAweDAwLCAvKiAwMTAwMDAwMTAwICovCisJMHgxOCwgMHg0MCwgLyogMDAwMTEwMDAwMSAqLworCTB4MTAsIDB4NDAsIC8qIDAwMDEwMDAwMDEgKi8KKwkweGMzLCAweDAwLCAvKiAxMTAwMDAxMTAwICovCisJMHg0MSwgMHgwMCwgLyogMDEwMDAwMDEwMCAqLworCisJLyogMTc3IDB4YjEgJy4nICovCisJMHgxMSwgMHgwMCwgLyogMDAwMTAwMDEwMCAqLworCTB4YmIsIDB4ODAsIC8qIDEwMTExMDExMTAgKi8KKwkweDExLCAweDAwLCAvKiAwMDAxMDAwMTAwICovCisJMHg0NCwgMHg0MCwgLyogMDEwMDAxMDAwMSAqLworCTB4ZWUsIDB4YzAsIC8qIDExMTAxMTEwMTEgKi8KKwkweDQ0LCAweDQwLCAvKiAwMTAwMDEwMDAxICovCisJMHgxMSwgMHgwMCwgLyogMDAwMTAwMDEwMCAqLworCTB4YmIsIDB4ODAsIC8qIDEwMTExMDExMTAgKi8KKwkweDExLCAweDAwLCAvKiAwMDAxMDAwMTAwICovCisJMHg0NCwgMHg0MCwgLyogMDEwMDAxMDAwMSAqLworCTB4ZWUsIDB4YzAsIC8qIDExMTAxMTEwMTEgKi8KKwkweDQ0LCAweDQwLCAvKiAwMTAwMDEwMDAxICovCisJMHgxMSwgMHgwMCwgLyogMDAwMTAwMDEwMCAqLworCTB4YmIsIDB4ODAsIC8qIDEwMTExMDExMTAgKi8KKwkweDExLCAweDAwLCAvKiAwMDAxMDAwMTAwICovCisJMHg0NCwgMHg0MCwgLyogMDEwMDAxMDAwMSAqLworCTB4ZWUsIDB4YzAsIC8qIDExMTAxMTEwMTEgKi8KKwkweDQ0LCAweDQwLCAvKiAwMTAwMDEwMDAxICovCisKKwkvKiAxNzggMHhiMiAnLicgKi8KKwkweDNjLCAweGMwLCAvKiAwMDExMTEwMDExICovCisJMHhiZSwgMHhjMCwgLyogMTAxMTExMTAxMSAqLworCTB4ZTcsIDB4ODAsIC8qIDExMTAwMTExMTAgKi8KKwkweGVmLCAweDgwLCAvKiAxMTEwMTExMTEwICovCisJMHgzYywgMHhjMCwgLyogMDAxMTExMDAxMSAqLworCTB4YmUsIDB4YzAsIC8qIDEwMTExMTEwMTEgKi8KKwkweGU3LCAweDgwLCAvKiAxMTEwMDExMTEwICovCisJMHhlZiwgMHg4MCwgLyogMTExMDExMTExMCAqLworCTB4M2MsIDB4YzAsIC8qIDAwMTExMTAwMTEgKi8KKwkweGJlLCAweGMwLCAvKiAxMDExMTExMDExICovCisJMHhlNywgMHg4MCwgLyogMTExMDAxMTExMCAqLworCTB4ZWYsIDB4ODAsIC8qIDExMTAxMTExMTAgKi8KKwkweDNjLCAweGMwLCAvKiAwMDExMTEwMDExICovCisJMHhiZSwgMHhjMCwgLyogMTAxMTExMTAxMSAqLworCTB4ZTcsIDB4ODAsIC8qIDExMTAwMTExMTAgKi8KKwkweGVmLCAweDgwLCAvKiAxMTEwMTExMTEwICovCisJMHgzYywgMHhjMCwgLyogMDAxMTExMDAxMSAqLworCTB4YmUsIDB4YzAsIC8qIDEwMTExMTEwMTEgKi8KKworCS8qIDE3OSAweGIzICcuJyAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCisJLyogMTgwIDB4YjQgJy4nICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweGZjLCAweDAwLCAvKiAxMTExMTEwMDAwICovCisJMHhmYywgMHgwMCwgLyogMTExMTExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisKKwkvKiAxODEgMHhiNSAnLicgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4ZmMsIDB4MDAsIC8qIDExMTExMTAwMDAgKi8KKwkweGZjLCAweDAwLCAvKiAxMTExMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4ZmMsIDB4MDAsIC8qIDExMTExMTAwMDAgKi8KKwkweGZjLCAweDAwLCAvKiAxMTExMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKworCS8qIDE4MiAweGI2ICcuJyAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHhmYiwgMHgwMCwgLyogMTExMTEwMTEwMCAqLworCTB4ZmIsIDB4MDAsIC8qIDExMTExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCisJLyogMTgzIDB4YjcgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGZmLCAweDAwLCAvKiAxMTExMTExMTAwICovCisJMHhmZiwgMHgwMCwgLyogMTExMTExMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisKKwkvKiAxODQgMHhiOCAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZmMsIDB4MDAsIC8qIDExMTExMTAwMDAgKi8KKwkweGZjLCAweDAwLCAvKiAxMTExMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4ZmMsIDB4MDAsIC8qIDExMTExMTAwMDAgKi8KKwkweGZjLCAweDAwLCAvKiAxMTExMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKworCS8qIDE4NSAweGI5ICcuJyAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHhmYiwgMHgwMCwgLyogMTExMTEwMTEwMCAqLworCTB4ZmIsIDB4MDAsIC8qIDExMTExMDExMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHhmYiwgMHgwMCwgLyogMTExMTEwMTEwMCAqLworCTB4ZmIsIDB4MDAsIC8qIDExMTExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCisJLyogMTg2IDB4YmEgJy4nICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisKKwkvKiAxODcgMHhiYiAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZmYsIDB4MDAsIC8qIDExMTExMTExMDAgKi8KKwkweGZmLCAweDAwLCAvKiAxMTExMTExMTAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4ZmIsIDB4MDAsIC8qIDExMTExMDExMDAgKi8KKwkweGZiLCAweDAwLCAvKiAxMTExMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKworCS8qIDE4OCAweGJjICcuJyAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHhmYiwgMHgwMCwgLyogMTExMTEwMTEwMCAqLworCTB4ZmIsIDB4MDAsIC8qIDExMTExMDExMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHhmZiwgMHgwMCwgLyogMTExMTExMTEwMCAqLworCTB4ZmYsIDB4MDAsIC8qIDExMTExMTExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMTg5IDB4YmQgJy4nICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweGZmLCAweDAwLCAvKiAxMTExMTExMTAwICovCisJMHhmZiwgMHgwMCwgLyogMTExMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxOTAgMHhiZSAnLicgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4ZmMsIDB4MDAsIC8qIDExMTExMTAwMDAgKi8KKwkweGZjLCAweDAwLCAvKiAxMTExMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4ZmMsIDB4MDAsIC8qIDExMTExMTAwMDAgKi8KKwkweGZjLCAweDAwLCAvKiAxMTExMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE5MSAweGJmICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmYywgMHgwMCwgLyogMTExMTExMDAwMCAqLworCTB4ZmMsIDB4MDAsIC8qIDExMTExMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCisJLyogMTkyIDB4YzAgJy4nICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBmLCAweGMwLCAvKiAwMDAwMTExMTExICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAxOTMgMHhjMSAnLicgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE5NCAweGMyICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCisJLyogMTk1IDB4YzMgJy4nICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBmLCAweGMwLCAvKiAwMDAwMTExMTExICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisKKwkvKiAxOTYgMHhjNCAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDE5NyAweGM1ICcuJyAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCisJLyogMTk4IDB4YzYgJy4nICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBmLCAweGMwLCAvKiAwMDAwMTExMTExICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBmLCAweGMwLCAvKiAwMDAwMTExMTExICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisKKwkvKiAxOTkgMHhjNyAnLicgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4YzAsIC8qIDAwMDExMDExMTEgKi8KKwkweDFiLCAweGMwLCAvKiAwMDAxMTAxMTExICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKworCS8qIDIwMCAweGM4ICcuJyAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHhjMCwgLyogMDAwMTEwMTExMSAqLworCTB4MWIsIDB4YzAsIC8qIDAwMDExMDExMTEgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxZiwgMHhjMCwgLyogMDAwMTExMTExMSAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjAxIDB4YzkgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDFmLCAweGMwLCAvKiAwMDAxMTExMTExICovCisJMHgxZiwgMHhjMCwgLyogMDAwMTExMTExMSAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDFiLCAweGMwLCAvKiAwMDAxMTAxMTExICovCisJMHgxYiwgMHhjMCwgLyogMDAwMTEwMTExMSAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisKKwkvKiAyMDIgMHhjYSAnLicgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4ZmIsIDB4YzAsIC8qIDExMTExMDExMTEgKi8KKwkweGZiLCAweGMwLCAvKiAxMTExMTAxMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIwMyAweGNiICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmYiwgMHhjMCwgLyogMTExMTEwMTExMSAqLworCTB4ZmIsIDB4YzAsIC8qIDExMTExMDExMTEgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCisJLyogMjA0IDB4Y2MgJy4nICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweGMwLCAvKiAwMDAxMTAxMTExICovCisJMHgxYiwgMHhjMCwgLyogMDAwMTEwMTExMSAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDFiLCAweGMwLCAvKiAwMDAxMTAxMTExICovCisJMHgxYiwgMHhjMCwgLyogMDAwMTEwMTExMSAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisKKwkvKiAyMDUgMHhjZCAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIwNiAweGNlICcuJyAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHhmYiwgMHhjMCwgLyogMTExMTEwMTExMSAqLworCTB4ZmIsIDB4YzAsIC8qIDExMTExMDExMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmYiwgMHhjMCwgLyogMTExMTEwMTExMSAqLworCTB4ZmIsIDB4YzAsIC8qIDExMTExMDExMTEgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCisJLyogMjA3IDB4Y2YgJy4nICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyMDggMHhkMCAnLicgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIwOSAweGQxICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCisJLyogMjEwIDB4ZDIgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisKKwkvKiAyMTEgMHhkMyAnLicgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEgKi8KKwkweDFmLCAweGMwLCAvKiAwMDAxMTExMTExICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIxMiAweGQ0ICcuJyAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MGYsIDB4YzAsIC8qIDAwMDAxMTExMTEgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MGYsIDB4YzAsIC8qIDAwMDAxMTExMTEgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjEzIDB4ZDUgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBmLCAweGMwLCAvKiAwMDAwMTExMTExICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBmLCAweGMwLCAvKiAwMDAwMTExMTExICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisKKwkvKiAyMTQgMHhkNiAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEgKi8KKwkweDFmLCAweGMwLCAvKiAwMDAxMTExMTExICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKworCS8qIDIxNSAweGQ3ICcuJyAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCTB4MWIsIDB4MDAsIC8qIDAwMDExMDExMDAgKi8KKwkweDFiLCAweDAwLCAvKiAwMDAxMTAxMTAwICovCisJMHgxYiwgMHgwMCwgLyogMDAwMTEwMTEwMCAqLworCisJLyogMjE2IDB4ZDggJy4nICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisKKwkvKiAyMTcgMHhkOSAnLicgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4ZmMsIDB4MDAsIC8qIDExMTExMTAwMDAgKi8KKwkweGZjLCAweDAwLCAvKiAxMTExMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIxOCAweGRhICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MGYsIDB4YzAsIC8qIDAwMDAxMTExMTEgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCisJLyogMjE5IDB4ZGIgJy4nICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisKKwkvKiAyMjAgMHhkYyAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKworCS8qIDIyMSAweGRkICcuJyAqLworCTB4ZjgsIDB4MDAsIC8qIDExMTExMDAwMDAgKi8KKwkweGY4LCAweDAwLCAvKiAxMTExMTAwMDAwICovCisJMHhmOCwgMHgwMCwgLyogMTExMTEwMDAwMCAqLworCTB4ZjgsIDB4MDAsIC8qIDExMTExMDAwMDAgKi8KKwkweGY4LCAweDAwLCAvKiAxMTExMTAwMDAwICovCisJMHhmOCwgMHgwMCwgLyogMTExMTEwMDAwMCAqLworCTB4ZjgsIDB4MDAsIC8qIDExMTExMDAwMDAgKi8KKwkweGY4LCAweDAwLCAvKiAxMTExMTAwMDAwICovCisJMHhmOCwgMHgwMCwgLyogMTExMTEwMDAwMCAqLworCTB4ZjgsIDB4MDAsIC8qIDExMTExMDAwMDAgKi8KKwkweGY4LCAweDAwLCAvKiAxMTExMTAwMDAwICovCisJMHhmOCwgMHgwMCwgLyogMTExMTEwMDAwMCAqLworCTB4ZjgsIDB4MDAsIC8qIDExMTExMDAwMDAgKi8KKwkweGY4LCAweDAwLCAvKiAxMTExMTAwMDAwICovCisJMHhmOCwgMHgwMCwgLyogMTExMTEwMDAwMCAqLworCTB4ZjgsIDB4MDAsIC8qIDExMTExMDAwMDAgKi8KKwkweGY4LCAweDAwLCAvKiAxMTExMTAwMDAwICovCisJMHhmOCwgMHgwMCwgLyogMTExMTEwMDAwMCAqLworCisJLyogMjIyIDB4ZGUgJy4nICovCisJMHgwNywgMHhjMCwgLyogMDAwMDAxMTExMSAqLworCTB4MDcsIDB4YzAsIC8qIDAwMDAwMTExMTEgKi8KKwkweDA3LCAweGMwLCAvKiAwMDAwMDExMTExICovCisJMHgwNywgMHhjMCwgLyogMDAwMDAxMTExMSAqLworCTB4MDcsIDB4YzAsIC8qIDAwMDAwMTExMTEgKi8KKwkweDA3LCAweGMwLCAvKiAwMDAwMDExMTExICovCisJMHgwNywgMHhjMCwgLyogMDAwMDAxMTExMSAqLworCTB4MDcsIDB4YzAsIC8qIDAwMDAwMTExMTEgKi8KKwkweDA3LCAweGMwLCAvKiAwMDAwMDExMTExICovCisJMHgwNywgMHhjMCwgLyogMDAwMDAxMTExMSAqLworCTB4MDcsIDB4YzAsIC8qIDAwMDAwMTExMTEgKi8KKwkweDA3LCAweGMwLCAvKiAwMDAwMDExMTExICovCisJMHgwNywgMHhjMCwgLyogMDAwMDAxMTExMSAqLworCTB4MDcsIDB4YzAsIC8qIDAwMDAwMTExMTEgKi8KKwkweDA3LCAweGMwLCAvKiAwMDAwMDExMTExICovCisJMHgwNywgMHhjMCwgLyogMDAwMDAxMTExMSAqLworCTB4MDcsIDB4YzAsIC8qIDAwMDAwMTExMTEgKi8KKwkweDA3LCAweGMwLCAvKiAwMDAwMDExMTExICovCisKKwkvKiAyMjMgMHhkZiAnLicgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4ZmYsIDB4YzAsIC8qIDExMTExMTExMTEgKi8KKwkweGZmLCAweGMwLCAvKiAxMTExMTExMTExICovCisJMHhmZiwgMHhjMCwgLyogMTExMTExMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIyNCAweGUwICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxYywgMHg4MCwgLyogMDAwMTExMDAxMCAqLworCTB4MzUsIDB4ODAsIC8qIDAwMTEwMTAxMTAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDM3LCAweDgwLCAvKiAwMDExMDExMTEwICovCisJMHgxYywgMHg4MCwgLyogMDAwMTExMDAxMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjI1IDB4ZTEgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMCAqLworCTB4NmYsIDB4MDAsIC8qIDAxMTAxMTExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjMsIDB4MDAsIC8qIDAxMTAwMDExMDAgKi8KKwkweDZlLCAweDAwLCAvKiAwMTEwMTExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyMjYgMHhlMiAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIyNyAweGUzICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjI4IDB4ZTQgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGZmLCAweDgwLCAvKiAxMTExMTExMTEwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHg4MCwgLyogMDAxMTAwMDAxMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweGZmLCAweDgwLCAvKiAxMTExMTExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyMjkgMHhlNSAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZiwgMHhjMCwgLyogMDAwMTExMTExMSAqLworCTB4MzYsIDB4MDAsIC8qIDAwMTEwMTEwMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIzMCAweGU2ICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg3MywgMHg4MCwgLyogMDExMTAwMTExMCAqLworCTB4NmQsIDB4ODAsIC8qIDAxMTAxMTAxMTAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDYwLCAweDAwLCAvKiAwMTEwMDAwMDAwICovCisJMHhjMCwgMHgwMCwgLyogMTEwMDAwMDAwMCAqLworCisJLyogMjMxIDB4ZTcgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMSwgMHg4MCwgLyogMDAwMDAwMDExMCAqLworCTB4MzYsIDB4NDAsIC8qIDAwMTEwMTEwMDEgKi8KKwkweDVlLCAweDAwLCAvKiAwMTAxMTExMDAwICovCisJMHg4YywgMHgwMCwgLyogMTAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyMzIgMHhlOCAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIzMyAweGU5ICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDYwLCAweGMwLCAvKiAwMTEwMDAwMDExICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMSAqLworCTB4N2YsIDB4YzAsIC8qIDAxMTExMTExMTEgKi8KKwkweDYwLCAweGMwLCAvKiAwMTEwMDAwMDExICovCisJMHgzMSwgMHg4MCwgLyogMDAxMTAwMDExMCAqLworCTB4MzEsIDB4ODAsIC8qIDAwMTEwMDAxMTAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjM0IDB4ZWEgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4YzAsIDB4YzAsIC8qIDExMDAwMDAwMTEgKi8KKwkweGMwLCAweGMwLCAvKiAxMTAwMDAwMDExICovCisJMHhjMCwgMHhjMCwgLyogMTEwMDAwMDAxMSAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHhmMywgMHhjMCwgLyogMTExMTAwMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyMzUgMHhlYiAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwNywgMHgwMCwgLyogMDAwMDAxMTEwMCAqLworCTB4MWYsIDB4ODAsIC8qIDAwMDExMTExMTAgKi8KKwkweDMwLCAweGMwLCAvKiAwMDExMDAwMDExICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAgKi8KKwkweDY2LCAweDAwLCAvKiAwMTEwMDExMDAwICovCisJMHhjMywgMHgwMCwgLyogMTEwMDAwMTEwMCAqLworCTB4YzMsIDB4MDAsIC8qIDExMDAwMDExMDAgKi8KKwkweGMzLCAweDAwLCAvKiAxMTAwMDAxMTAwICovCisJMHg2NiwgMHgwMCwgLyogMDExMDAxMTAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIzNiAweGVjICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4NmQsIDB4ODAsIC8qIDAxMTAxMTAxMTAgKi8KKwkweGNjLCAweGMwLCAvKiAxMTAwMTEwMDExICovCisJMHhjYywgMHhjMCwgLyogMTEwMDExMDAxMSAqLworCTB4Y2MsIDB4YzAsIC8qIDExMDAxMTAwMTEgKi8KKwkweGNjLCAweGMwLCAvKiAxMTAwMTEwMDExICovCisJMHg2ZCwgMHg4MCwgLyogMDExMDExMDExMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjM3IDB4ZWQgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDM3LCAweDAwLCAvKiAwMDExMDExMTAwICovCisJMHg2ZCwgMHg4MCwgLyogMDExMDExMDExMCAqLworCTB4Y2MsIDB4YzAsIC8qIDExMDAxMTAwMTEgKi8KKwkweGNjLCAweGMwLCAvKiAxMTAwMTEwMDExICovCisJMHhjYywgMHhjMCwgLyogMTEwMDExMDAxMSAqLworCTB4Y2MsIDB4YzAsIC8qIDExMDAxMTAwMTEgKi8KKwkweDZkLCAweDgwLCAvKiAwMTEwMTEwMTEwICovCisJMHgzYiwgMHgwMCwgLyogMDAxMTEwMTEwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyMzggMHhlZSAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMywgMHg4MCwgLyogMDAwMDAwMTExMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMCAqLworCTB4M2YsIDB4ODAsIC8qIDAwMTExMTExMTAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MDMsIDB4ODAsIC8qIDAwMDAwMDExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDIzOSAweGVmICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4NjEsIDB4ODAsIC8qIDAxMTAwMDAxMTAgKi8KKwkweDYxLCAweDgwLCAvKiAwMTEwMDAwMTEwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjQwIDB4ZjAgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyNDEgMHhmMSAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDI0MiAweGYyICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHhlMCwgMHgwMCwgLyogMTExMDAwMDAwMCAqLworCTB4MzgsIDB4MDAsIC8qIDAwMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwICovCisJMHgwMywgMHg4MCwgLyogMDAwMDAwMTExMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDM4LCAweDAwLCAvKiAwMDExMTAwMDAwICovCisJMHhlMCwgMHgwMCwgLyogMTExMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweGZmLCAweDAwLCAvKiAxMTExMTExMTAwICovCisJMHhmZiwgMHgwMCwgLyogMTExMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjQzIDB4ZjMgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAzLCAweDgwLCAvKiAwMDAwMDAxMTEwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMCAqLworCTB4MzgsIDB4MDAsIC8qIDAwMTExMDAwMDAgKi8KKwkweGUwLCAweDAwLCAvKiAxMTEwMDAwMDAwICovCisJMHgzOCwgMHgwMCwgLyogMDAxMTEwMDAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAgKi8KKwkweDAzLCAweDgwLCAvKiAwMDAwMDAxMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4ZmYsIDB4ODAsIC8qIDExMTExMTExMTAgKi8KKwkweGZmLCAweDgwLCAvKiAxMTExMTExMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyNDQgMHhmNCAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDI0NSAweGY1ICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDMzLCAweDAwLCAvKiAwMDExMDAxMTAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMCAqLworCTB4MDMsIDB4MDAsIC8qIDAwMDAwMDExMDAgKi8KKwkweDAzLCAweDAwLCAvKiAwMDAwMDAxMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjQ2IDB4ZjYgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyNDcgMHhmNyAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDM4LCAweDAwLCAvKiAwMDExMTAwMDAwICovCisJMHg2YywgMHgwMCwgLyogMDExMDExMDAwMCAqLworCTB4MDYsIDB4YzAsIC8qIDAwMDAwMTEwMTEgKi8KKwkweDAzLCAweDgwLCAvKiAwMDAwMDAxMTEwICovCisJMHgzOCwgMHgwMCwgLyogMDAxMTEwMDAwMCAqLworCTB4NmMsIDB4MDAsIC8qIDAxMTAxMTAwMDAgKi8KKwkweDA2LCAweGMwLCAvKiAwMDAwMDExMDExICovCisJMHgwMywgMHg4MCwgLyogMDAwMDAwMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDI0OCAweGY4ICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjQ5IDB4ZjkgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyNTAgMHhmYSAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDI1MSAweGZiICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwZiwgMHhjMCwgLyogMDAwMDExMTExMSAqLworCTB4MGYsIDB4YzAsIC8qIDAwMDAxMTExMTEgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MGMsIDB4MDAsIC8qIDAwMDAxMTAwMDAgKi8KKwkweGNjLCAweDAwLCAvKiAxMTAwMTEwMDAwICovCisJMHg2YywgMHgwMCwgLyogMDExMDExMDAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAgKi8KKwkweDFjLCAweDAwLCAvKiAwMDAxMTEwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjUyIDB4ZmMgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MjcsIDB4MDAsIC8qIDAwMTAwMTExMDAgKi8KKwkweDdiLCAweDAwLCAvKiAwMTExMTAxMTAwICovCisJMHgzMSwgMHgwMCwgLyogMDAxMTAwMDEwMCAqLworCTB4MzEsIDB4MDAsIC8qIDAwMTEwMDAxMDAgKi8KKwkweDMxLCAweDAwLCAvKiAwMDExMDAwMTAwICovCisJMHg3YiwgMHg4MCwgLyogMDExMTEwMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKKwkvKiAyNTMgMHhmZCAnLicgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDYzLCAweDAwLCAvKiAwMTEwMDAxMTAwICovCisJMHg0MywgMHgwMCwgLyogMDEwMDAwMTEwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMCAqLworCTB4MzAsIDB4ODAsIC8qIDAwMTEwMDAwMTAgKi8KKwkweDdmLCAweDgwLCAvKiAwMTExMTExMTEwICovCisJMHg3ZiwgMHg4MCwgLyogMDExMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKworCS8qIDI1NCAweGZlICcuJyAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4M2YsIDB4MDAsIC8qIDAwMTExMTExMDAgKi8KKwkweDNmLCAweDAwLCAvKiAwMDExMTExMTAwICovCisJMHgzZiwgMHgwMCwgLyogMDAxMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCisJLyogMjU1IDB4ZmYgJy4nICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwICovCisKK307CisKKworc3RydWN0IGZvbnRfZGVzYyBmb250XzEweDE4ID0geworCUZPTlQxMHgxOF9JRFgsCisJIjEweDE4IiwKKwkxMCwKKwkxOCwKKwlmb250ZGF0YV8xMHgxOCwKKyNpZmRlZiBfX3NwYXJjX18KKwk1CisjZWxzZQorCS0xCisjZW5kaWYKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF83eDE0LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF83eDE0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhN2ZjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250Xzd4MTQuYwpAQCAtMCwwICsxLDQxMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHRoaXMgZmlsZSBhZGFwdGVkIGZyb20gZm9udF84eDE2LmMgKi8KKy8qIGJ5IEp1cnJpYWFuIEthbGttYW4gMDUtMjAwNSAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZvbnQuaD4KKworI2RlZmluZSBGT05UREFUQU1BWCAzNTg0CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGZvbnRkYXRhXzd4MTRbRk9OVERBVEFNQVhdID0geworCisJLyogMCAweDAwICdeQCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMSAweDAxICdeQScgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4ODIsIC8qIDEwMDAwMDEgKi8KKwkweGFhLCAvKiAxMDEwMTAxICovCisJMHg4MiwgLyogMTAwMDAwMSAqLworCTB4ODIsIC8qIDEwMDAwMDEgKi8KKwkweGJhLCAvKiAxMDExMTAxICovCisJMHg5MiwgLyogMTAwMTAwMSAqLworCTB4ODIsIC8qIDEwMDAwMDEgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMiAweDAyICdeQicgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGQ2LCAvKiAxMTAxMDExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGM2LCAvKiAxMTAwMDExICovCisJMHhlZSwgLyogMTExMDExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMyAweDAzICdeQycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxMCwgLyogMDAwMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogNCAweDA0ICdeRCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogNSAweDA1ICdeRScgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4ZWUsIC8qIDExMTAxMTEgKi8KKwkweGVlLCAvKiAxMTEwMTExICovCisJMHhlZSwgLyogMTExMDExMSAqLworCTB4MTAsIC8qIDAwMDEwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogNiAweDA2ICdeRicgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4MTAsIC8qIDAwMDEwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogNyAweDA3ICdeRycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwICovCisJMHgzYywgLyogMDAxMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogOCAweDA4ICdeSCcgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZTYsIC8qIDExMTAwMTEgKi8KKwkweGMyLCAvKiAxMTAwMDAxICovCisJMHhjMiwgLyogMTEwMDAwMSAqLworCTB4ZTYsIC8qIDExMTAwMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCisJLyogOSAweDA5ICdeSScgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg0NCwgLyogMDEwMDAxMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTAgMHgwYSAnXkonICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGM2LCAvKiAxMTAwMDExICovCisJMHg5MiwgLyogMTAwMTAwMSAqLworCTB4YmEsIC8qIDEwMTExMDEgKi8KKwkweDkyLCAvKiAxMDAxMDAxICovCisJMHhjNiwgLyogMTEwMDAxMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKworCS8qIDExIDB4MGIgJ15LJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDFlLCAvKiAwMDAxMTExICovCisJMHgwZSwgLyogMDAwMDExMSAqLworCTB4MWEsIC8qIDAwMDExMDEgKi8KKwkweDFhLCAvKiAwMDAxMTAxICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxMiAweDBjICdeTCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgzYywgLyogMDAxMTExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEgKi8KKwkweDY2LCAvKiAwMTEwMDExICovCisJMHg2NiwgLyogMDExMDAxMSAqLworCTB4NjYsIC8qIDAxMTAwMTEgKi8KKwkweDNjLCAvKiAwMDExMTEwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4N2UsIC8qIDAxMTExMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTMgMHgwZCAnXk0nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4M2UsIC8qIDAwMTExMTEgKi8KKwkweDM2LCAvKiAwMDExMDExICovCisJMHgzZSwgLyogMDAxMTExMSAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDcwLCAvKiAwMTExMDAwICovCisJMHhmMCwgLyogMTExMTAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE0IDB4MGUgJ15OJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHg2NiwgLyogMDExMDAxMSAqLworCTB4N2UsIC8qIDAxMTExMTEgKi8KKwkweDY2LCAvKiAwMTEwMDExICovCisJMHg2NiwgLyogMDExMDAxMSAqLworCTB4NjYsIC8qIDAxMTAwMTEgKi8KKwkweDY2LCAvKiAwMTEwMDExICovCisJMHg2ZSwgLyogMDExMDExMSAqLworCTB4ZWUsIC8qIDExMTAxMTEgKi8KKwkweGVjLCAvKiAxMTEwMTEwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNSAweDBmICdeTycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwICovCisJMHhkNiwgLyogMTEwMTAxMSAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweGVlLCAvKiAxMTEwMTExICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4ZDYsIC8qIDExMDEwMTEgKi8KKwkweDEwLCAvKiAwMDAxMDAwICovCisJMHgxMCwgLyogMDAwMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTYgMHgxMCAnXlAnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ODAsIC8qIDEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhlMCwgLyogMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhmMCwgLyogMTExMTAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHg4MCwgLyogMTAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE3IDB4MTEgJ15RJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDA0LCAvKiAwMDAwMDEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MWMsIC8qIDAwMDExMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4M2MsIC8qIDAwMTExMTAgKi8KKwkweDFjLCAvKiAwMDAxMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MDQsIC8qIDAwMDAwMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxOCAweDEyICdeUicgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4M2MsIC8qIDAwMTExMTAgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHg3ZSwgLyogMDExMTExMSAqLworCTB4M2MsIC8qIDAwMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTkgMHgxMyAnXlMnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDIwIDB4MTQgJ15UJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHhkNCwgLyogMTEwMTAxMCAqLworCTB4ZDQsIC8qIDExMDEwMTAgKi8KKwkweGQ0LCAvKiAxMTAxMDEwICovCisJMHg3NCwgLyogMDExMTAxMCAqLworCTB4MTQsIC8qIDAwMDEwMTAgKi8KKwkweDE0LCAvKiAwMDAxMDEwICovCisJMHgxNCwgLyogMDAwMTAxMCAqLworCTB4MTQsIC8qIDAwMDEwMTAgKi8KKwkweDE2LCAvKiAwMDAxMDExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMSAweDE1ICdeVScgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEgKi8KKwkweGM2LCAvKiAxMTAwMDExICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjIgMHgxNiAnXlYnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDIzIDB4MTcgJ15XJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzYywgLyogMDAxMTExMCAqLworCTB4N2UsIC8qIDAxMTExMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHgzYywgLyogMDAxMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyNCAweDE4ICdeWCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4M2MsIC8qIDAwMTExMTAgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjUgMHgxOSAnXlknICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHgzYywgLyogMDAxMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDI2IDB4MWEgJ15aJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyNyAweDFiICdeWycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjggMHgxYyAnXlwnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDI5IDB4MWQgJ15dJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDI4LCAvKiAwMDEwMTAwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHgyOCwgLyogMDAxMDEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAzMCAweDFlICdeXicgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMzEgMHgxZiAnXl8nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDMyIDB4MjAgJyAnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDMzIDB4MjEgJyEnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwICovCisJMHgzYywgLyogMDAxMTExMCAqLworCTB4M2MsIC8qIDAwMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDM0IDB4MjIgJyInICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4MjgsIC8qIDAwMTAxMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDM1IDB4MjMgJyMnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDM2IDB4MjQgJyQnICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4YzQsIC8qIDExMDAwMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDhjLCAvKiAxMDAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDM3IDB4MjUgJyUnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzQsIC8qIDExMDAwMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4OGMsIC8qIDEwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDM4IDB4MjYgJyYnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhkZSwgLyogMTEwMTExMSAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhkYywgLyogMTEwMTExMCAqLworCTB4NzYsIC8qIDAxMTEwMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDM5IDB4MjcgJycnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDQwIDB4MjggJygnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDQxIDB4MjkgJyknICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDQyIDB4MmEgJyonICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDQzIDB4MmIgJysnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4MTAsIC8qIDAwMDEwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDQ0IDB4MmMgJywnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDQ1IDB4MmQgJy0nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDQ2IDB4MmUgJy4nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDQ3IDB4MmYgJy8nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDQsIC8qIDAwMDAwMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4ODAsIC8qIDEwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDQ4IDB4MzAgJzAnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGRjLCAvKiAxMTAxMTEwICovCisJMHhlYywgLyogMTExMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDQ5IDB4MzEgJzEnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDUwIDB4MzIgJzInICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDUxIDB4MzMgJzMnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDUyIDB4MzQgJzQnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDFjLCAvKiAwMDAxMTEwICovCisJMHgzYywgLyogMDAxMTExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDUzIDB4MzUgJzUnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDU0IDB4MzYgJzYnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDU1IDB4MzcgJzcnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDU2IDB4MzggJzgnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDU3IDB4MzkgJzknICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDU4IDB4M2EgJzonICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDU5IDB4M2IgJzsnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDYwIDB4M2MgJzwnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDA0LCAvKiAwMDAwMDEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MDQsIC8qIDAwMDAwMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDYxIDB4M2QgJz0nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDYyIDB4M2UgJz4nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDQwLCAvKiAwMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4NDAsIC8qIDAxMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDYzIDB4M2YgJz8nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDY0IDB4NDAgJ0AnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhkYywgLyogMTEwMTExMCAqLworCTB4ZGMsIC8qIDExMDExMTAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDY1IDB4NDEgJ0EnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDY2IDB4NDIgJ0InICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4ZjgsIC8qIDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDY3IDB4NDMgJ0MnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhjNCwgLyogMTEwMDAxMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGM0LCAvKiAxMTAwMDEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDY4IDB4NDQgJ0QnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDY5IDB4NDUgJ0UnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2NCwgLyogMDExMDAxMCAqLworCTB4NjgsIC8qIDAxMTAxMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHg2OCwgLyogMDExMDEwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDY0LCAvKiAwMTEwMDEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDcwIDB4NDYgJ0YnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweDY0LCAvKiAwMTEwMDEwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4NjgsIC8qIDAxMTAxMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHg2OCwgLyogMDExMDEwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDcxIDB4NDcgJ0cnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhjNCwgLyogMTEwMDAxMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhkYywgLyogMTEwMTExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4MzQsIC8qIDAwMTEwMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDcyIDB4NDggJ0gnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDczIDB4NDkgJ0knICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4M2MsIC8qIDAwMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDc0IDB4NGEgJ0onICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MWMsIC8qIDAwMDExMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDc1IDB4NGIgJ0snICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwICovCisJMHhmMCwgLyogMTExMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDc2IDB4NGMgJ0wnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGM0LCAvKiAxMTAwMDEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDc3IDB4NGQgJ00nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEgKi8KKwkweGVlLCAvKiAxMTEwMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGQ2LCAvKiAxMTAxMDExICovCisJMHhjNiwgLyogMTEwMDAxMSAqLworCTB4YzYsIC8qIDExMDAwMTEgKi8KKwkweGM2LCAvKiAxMTAwMDExICovCisJMHhjNiwgLyogMTEwMDAxMSAqLworCTB4YzYsIC8qIDExMDAwMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDc4IDB4NGUgJ04nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGVjLCAvKiAxMTEwMTEwICovCisJMHhlYywgLyogMTExMDExMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGRjLCAvKiAxMTAxMTEwICovCisJMHhkYywgLyogMTEwMTExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDc5IDB4NGYgJ08nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDgwIDB4NTAgJ1AnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGY4LCAvKiAxMTExMTAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDgxIDB4NTEgJ1EnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhkYywgLyogMTEwMTExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxYywgLyogMDAwMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDgyIDB4NTIgJ1InICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGY4LCAvKiAxMTExMTAwICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDgzIDB4NTMgJ1MnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweGM0LCAvKiAxMTAwMDEwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHg4YywgLyogMTAwMDExMCAqLworCTB4ZjgsIC8qIDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDg0IDB4NTQgJ1QnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhiNCwgLyogMTAxMTAxMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDg1IDB4NTUgJ1UnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDg2IDB4NTYgJ1YnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDg3IDB4NTcgJ1cnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4NDgsIC8qIDAxMDAxMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDg4IDB4NTggJ1gnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDg5IDB4NTkgJ1knICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDkwIDB4NWEgJ1onICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg4YywgLyogMTAwMDExMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweGM0LCAvKiAxMTAwMDEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDkxIDB4NWIgJ1snICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDkyIDB4NWMgJ1wnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg4MCwgLyogMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwICovCisJMHg3MCwgLyogMDExMTAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDFjLCAvKiAwMDAxMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MDQsIC8qIDAwMDAwMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDkzIDB4NWQgJ10nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDk0IDB4NWUgJ14nICovCisJMHgxMCwgLyogMDAwMTAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDk1IDB4NWYgJ18nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDk2IDB4NjAgJ2AnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDk3IDB4NjEgJ2EnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzYsIC8qIDAxMTEwMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDk4IDB4NjIgJ2InICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZjgsIC8qIDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDk5IDB4NjMgJ2MnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDEwMCAweDY0ICdkJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDFjLCAvKiAwMDAxMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc2LCAvKiAwMTExMDExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxMDEgMHg2NSAnZScgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTAyIDB4NjYgJ2YnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2NCwgLyogMDExMDAxMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDEwMyAweDY3ICdnJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc2LCAvKiAwMTExMDExICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisKKwkvKiAxMDQgMHg2OCAnaCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4ZWMsIC8qIDExMTAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTA1IDB4NjkgJ2knICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDEwNiAweDZhICdqJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDFjLCAvKiAwMDAxMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisKKwkvKiAxMDcgMHg2YiAnaycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwICovCisJMHhmMCwgLyogMTExMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTA4IDB4NmMgJ2wnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDEwOSAweDZkICdtJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGVjLCAvKiAxMTEwMTEwICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZDYsIC8qIDExMDEwMTEgKi8KKwkweGQ2LCAvKiAxMTAxMDExICovCisJMHhkNiwgLyogMTEwMTAxMSAqLworCTB4ZDYsIC8qIDExMDEwMTEgKi8KKwkweGQ2LCAvKiAxMTAxMDExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxMTAgMHg2ZSAnbicgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhiOCwgLyogMTAxMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTExIDB4NmYgJ28nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDExMiAweDcwICdwJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGI4LCAvKiAxMDExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGY4LCAvKiAxMTExMTAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisKKwkvKiAxMTMgMHg3MSAncScgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3NCwgLyogMDExMTAxMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCisJLyogMTE0IDB4NzIgJ3InICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4YjgsIC8qIDEwMTExMDAgKi8KKwkweGVjLCAvKiAxMTEwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDExNSAweDczICdzJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxMTYgMHg3NCAndCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgxMCwgLyogMDAwMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDM2LCAvKiAwMDExMDExICovCisJMHgxYywgLyogMDAwMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTE3IDB4NzUgJ3UnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzYsIC8qIDAxMTEwMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDExOCAweDc2ICd2JyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxMTkgMHg3NyAndycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMSAqLworCTB4YzYsIC8qIDExMDAwMTEgKi8KKwkweGQ2LCAvKiAxMTAxMDExICovCisJMHhkNiwgLyogMTEwMTAxMSAqLworCTB4ZDYsIC8qIDExMDEwMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTIwIDB4NzggJ3gnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDEyMSAweDc5ICd5JyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwICovCisKKwkvKiAxMjIgMHg3YSAneicgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTIzIDB4N2IgJ3snICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MWMsIC8qIDAwMDExMTAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MWMsIC8qIDAwMDExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDEyNCAweDdjICd8JyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxMjUgMHg3ZCAnfScgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3MCwgLyogMDExMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MGUsIC8qIDAwMDAxMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHg3MCwgLyogMDExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTI2IDB4N2UgJ34nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZWMsIC8qIDExMTAxMTAgKi8KKwkweGI4LCAvKiAxMDExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDEyNyAweDdmICd/JyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEgKi8KKwkweGM2LCAvKiAxMTAwMDExICovCisJMHhjNiwgLyogMTEwMDAxMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxMjggMHg4MCAngCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweGM0LCAvKiAxMTAwMDEwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzQsIC8qIDExMDAwMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDcwLCAvKiAwMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTI5IDB4ODEgJ4EnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzYsIC8qIDAxMTEwMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDEzMCAweDgyICeCJyAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxMzEgMHg4MyAngycgKi8KKwkweDEwLCAvKiAwMDAxMDAwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3NiwgLyogMDExMTAxMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTMyIDB4ODQgJ4QnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzYsIC8qIDAxMTEwMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDEzMyAweDg1ICeFJyAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc2LCAvKiAwMTExMDExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxMzQgMHg4NiAnhicgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3NiwgLyogMDExMTAxMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTM1IDB4ODcgJ4cnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAgKi8KKworCS8qIDEzNiAweDg4ICeIJyAqLworCTB4MTAsIC8qIDAwMDEwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxMzcgMHg4OSAniScgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTM4IDB4OGEgJ4onICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDEzOSAweDhiICeLJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNDAgMHg4YyAnjCcgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3MCwgLyogMDExMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTQxIDB4OGQgJ40nICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE0MiAweDhlICeOJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNDMgMHg4ZiAnjycgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg0OCwgLyogMDEwMDEwMCAqLworCTB4NDgsIC8qIDAxMDAxMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTQ0IDB4OTAgJ5AnICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4YzQsIC8qIDExMDAwMTAgKi8KKwkweGQwLCAvKiAxMTAxMDAwICovCisJMHhmMCwgLyogMTExMTAwMCAqLworCTB4ZDAsIC8qIDExMDEwMDAgKi8KKwkweGM0LCAvKiAxMTAwMDEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE0NSAweDkxICeRJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGVjLCAvKiAxMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMSAqLworCTB4MzYsIC8qIDAwMTEwMTEgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweDZlLCAvKiAwMTEwMTExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNDYgMHg5MiAnkicgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgzZSwgLyogMDAxMTExMSAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjZSwgLyogMTEwMDExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTQ3IDB4OTMgJ5MnICovCisJMHgxMCwgLyogMDAwMTAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE0OCAweDk0ICeUJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNDkgMHg5NSAnlScgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTUwIDB4OTYgJ5YnICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzYsIC8qIDAxMTEwMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE1MSAweDk3ICeXJyAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc2LCAvKiAwMTExMDExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNTIgMHg5OCAnmCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHg3MCwgLyogMDExMTAwMCAqLworCisJLyogMTUzIDB4OTkgJ5knICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE1NCAweDlhICeaJyAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNTUgMHg5YiAnmycgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTU2IDB4OWMgJ5wnICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDY0LCAvKiAwMTEwMDEwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHhlNiwgLyogMTExMDAxMSAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE1NyAweDlkICedJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNTggMHg5ZSAnnicgKi8KKwkweGY4LCAvKiAxMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGY4LCAvKiAxMTExMTAwICovCisJMHhjNCwgLyogMTEwMDAxMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGRlLCAvKiAxMTAxMTExICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTU5IDB4OWYgJ58nICovCisJMHgxYywgLyogMDAwMTExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHhiMCwgLyogMTAxMTAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE2MCAweGEwICegJyAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc2LCAvKiAwMTExMDExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNjEgMHhhMSAnoScgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3MCwgLyogMDExMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTYyIDB4YTIgJ6InICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE2MyAweGEzICejJyAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc2LCAvKiAwMTExMDExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNjQgMHhhNCAnpCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMSAqLworCTB4ZGMsIC8qIDExMDExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhiOCwgLyogMTAxMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTY1IDB4YTUgJ6UnICovCisJMHg3NiwgLyogMDExMTAxMSAqLworCTB4ZGMsIC8qIDExMDExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZWMsIC8qIDExMTAxMTAgKi8KKwkweGVjLCAvKiAxMTEwMTEwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4ZGMsIC8qIDExMDExMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE2NiAweGE2ICemJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNjcgMHhhNyAnpycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3MCwgLyogMDExMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwICovCisJMHg3MCwgLyogMDExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTY4IDB4YTggJ6gnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE2OSAweGE5ICepJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNzAgMHhhYSAnqicgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTcxIDB4YWIgJ6snICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAgKi8KKwkweDYyLCAvKiAwMTEwMDAxICovCisJMHg2NiwgLyogMDExMDAxMSAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhiOCwgLyogMTAxMTEwMCAqLworCTB4NGMsIC8qIDAxMDAxMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKworCS8qIDE3MiAweGFjICesJyAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwICovCisJMHg2MiwgLyogMDExMDAwMSAqLworCTB4NjYsIC8qIDAxMTAwMTEgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhkYywgLyogMTEwMTExMCAqLworCTB4YjQsIC8qIDEwMTEwMTAgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNzMgMHhhZCAnrScgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTc0IDB4YWUgJ64nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzYsIC8qIDAwMTEwMTEgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE3NSAweGFmICevJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxNzYgMHhiMCAnsCcgKi8KKwkweDg4LCAvKiAxMDAwMTAwICovCisJMHgyMiwgLyogMDAxMDAwMSAqLworCTB4ODgsIC8qIDEwMDAxMDAgKi8KKwkweDIyLCAvKiAwMDEwMDAxICovCisJMHg4OCwgLyogMTAwMDEwMCAqLworCTB4MjIsIC8qIDAwMTAwMDEgKi8KKwkweDg4LCAvKiAxMDAwMTAwICovCisJMHgyMiwgLyogMDAxMDAwMSAqLworCTB4ODgsIC8qIDEwMDAxMDAgKi8KKwkweDIyLCAvKiAwMDEwMDAxICovCisJMHg4OCwgLyogMTAwMDEwMCAqLworCTB4MjIsIC8qIDAwMTAwMDEgKi8KKwkweDg4LCAvKiAxMDAwMTAwICovCisJMHgyMiwgLyogMDAxMDAwMSAqLworCisJLyogMTc3IDB4YjEgJ7EnICovCisJMHg1NCwgLyogMDEwMTAxMCAqLworCTB4YWEsIC8qIDEwMTAxMDEgKi8KKwkweDU0LCAvKiAwMTAxMDEwICovCisJMHhhYSwgLyogMTAxMDEwMSAqLworCTB4NTQsIC8qIDAxMDEwMTAgKi8KKwkweGFhLCAvKiAxMDEwMTAxICovCisJMHg1NCwgLyogMDEwMTAxMCAqLworCTB4YWEsIC8qIDEwMTAxMDEgKi8KKwkweDU0LCAvKiAwMTAxMDEwICovCisJMHhhYSwgLyogMTAxMDEwMSAqLworCTB4NTQsIC8qIDAxMDEwMTAgKi8KKwkweGFhLCAvKiAxMDEwMTAxICovCisJMHg1NCwgLyogMDEwMTAxMCAqLworCTB4YWEsIC8qIDEwMTAxMDEgKi8KKworCS8qIDE3OCAweGIyICeyJyAqLworCTB4ZWUsIC8qIDExMTAxMTEgKi8KKwkweGJhLCAvKiAxMDExMTAxICovCisJMHhlZSwgLyogMTExMDExMSAqLworCTB4YmEsIC8qIDEwMTExMDEgKi8KKwkweGVlLCAvKiAxMTEwMTExICovCisJMHhiYSwgLyogMTAxMTEwMSAqLworCTB4ZWUsIC8qIDExMTAxMTEgKi8KKwkweGJhLCAvKiAxMDExMTAxICovCisJMHhlZSwgLyogMTExMDExMSAqLworCTB4YmEsIC8qIDEwMTExMDEgKi8KKwkweGVlLCAvKiAxMTEwMTExICovCisJMHhiYSwgLyogMTAxMTEwMSAqLworCTB4ZWUsIC8qIDExMTAxMTEgKi8KKwkweGJhLCAvKiAxMDExMTAxICovCisKKwkvKiAxNzkgMHhiMyAnsycgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCisJLyogMTgwIDB4YjQgJ7QnICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHhmMCwgLyogMTExMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKworCS8qIDE4MSAweGI1ICe1JyAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisKKwkvKiAxODIgMHhiNiAnticgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweGVjLCAvKiAxMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCisJLyogMTgzIDB4YjcgJ7cnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKworCS8qIDE4NCAweGI4ICe4JyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisKKwkvKiAxODUgMHhiOSAnuScgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhlYywgLyogMTExMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweGVjLCAvKiAxMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCisJLyogMTg2IDB4YmEgJ7onICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKworCS8qIDE4NyAweGJiICe7JyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4ZWMsIC8qIDExMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisKKwkvKiAxODggMHhiYyAnvCcgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhlYywgLyogMTExMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMTg5IDB4YmQgJ70nICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE5MCAweGJlICe+JyAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxOTEgMHhiZiAnvycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCisJLyogMTkyIDB4YzAgJ8AnICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzZSwgLyogMDAxMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDE5MyAweGMxICfBJyAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxOTQgMHhjMiAnwicgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCisJLyogMTk1IDB4YzMgJ8MnICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzZSwgLyogMDAxMTExMSAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKworCS8qIDE5NiAweGM0ICfEJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAxOTcgMHhjNSAnxScgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCisJLyogMTk4IDB4YzYgJ8YnICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4M2UsIC8qIDAwMTExMTEgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzZSwgLyogMDAxMTExMSAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKworCS8qIDE5OSAweGM3ICfHJyAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmUsIC8qIDAxMTAxMTEgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisKKwkvKiAyMDAgMHhjOCAnyCcgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2ZSwgLyogMDExMDExMSAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjAxIDB4YzkgJ8knICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHg2ZSwgLyogMDExMDExMSAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKworCS8qIDIwMiAweGNhICfKJyAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweGVlLCAvKiAxMTEwMTExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMDMgMHhjYiAnyycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGVlLCAvKiAxMTEwMTExICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCisJLyogMjA0IDB4Y2MgJ8wnICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmUsIC8qIDAxMTAxMTEgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHg2ZSwgLyogMDExMDExMSAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKworCS8qIDIwNSAweGNkICfNJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMDYgMHhjZSAnzicgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhlZSwgLyogMTExMDExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGVlLCAvKiAxMTEwMTExICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCisJLyogMjA3IDB4Y2YgJ88nICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDIwOCAweGQwICfQJyAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMDkgMHhkMSAn0ScgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCisJLyogMjEwIDB4ZDIgJ9InICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKworCS8qIDIxMSAweGQzICfTJyAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4N2UsIC8qIDAxMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMTIgMHhkNCAn1CcgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzZSwgLyogMDAxMTExMSAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDNlLCAvKiAwMDExMTExICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjEzIDB4ZDUgJ9UnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4M2UsIC8qIDAwMTExMTEgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzZSwgLyogMDAxMTExMSAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKworCS8qIDIxNCAweGQ2ICfWJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisKKwkvKiAyMTUgMHhkNyAn1ycgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCisJLyogMjE2IDB4ZDggJ9gnICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKworCS8qIDIxNyAweGQ5ICfZJyAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMTggMHhkYSAn2icgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDNlLCAvKiAwMDExMTExICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCisJLyogMjE5IDB4ZGIgJ9snICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKworCS8qIDIyMCAweGRjICfcJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisKKwkvKiAyMjEgMHhkZCAn3ScgKi8KKwkweGUwLCAvKiAxMTEwMDAwICovCisJMHhlMCwgLyogMTExMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwICovCisJMHhlMCwgLyogMTExMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwICovCisJMHhlMCwgLyogMTExMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwICovCisJMHhlMCwgLyogMTExMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwICovCisJMHhlMCwgLyogMTExMDAwMCAqLworCisJLyogMjIyIDB4ZGUgJ94nICovCisJMHgxZSwgLyogMDAwMTExMSAqLworCTB4MWUsIC8qIDAwMDExMTEgKi8KKwkweDFlLCAvKiAwMDAxMTExICovCisJMHgxZSwgLyogMDAwMTExMSAqLworCTB4MWUsIC8qIDAwMDExMTEgKi8KKwkweDFlLCAvKiAwMDAxMTExICovCisJMHgxZSwgLyogMDAwMTExMSAqLworCTB4MWUsIC8qIDAwMDExMTEgKi8KKwkweDFlLCAvKiAwMDAxMTExICovCisJMHgxZSwgLyogMDAwMTExMSAqLworCTB4MWUsIC8qIDAwMDExMTEgKi8KKwkweDFlLCAvKiAwMDAxMTExICovCisJMHgxZSwgLyogMDAwMTExMSAqLworCTB4MWUsIC8qIDAwMDExMTEgKi8KKworCS8qIDIyMyAweGRmICffJyAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHhmZSwgLyogMTExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMjQgMHhlMCAn4CcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMSAqLworCTB4ZGMsIC8qIDExMDExMTAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweGRjLCAvKiAxMTAxMTEwICovCisJMHg3NiwgLyogMDExMTAxMSAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjI1IDB4ZTEgJ+EnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEgKi8KKwkweGM2LCAvKiAxMTAwMDExICovCisJMHhjNiwgLyogMTEwMDAxMSAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDIyNiAweGUyICfiJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMjcgMHhlMyAn4ycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEgKi8KKwkweGZlLCAvKiAxMTExMTExICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjI4IDB4ZTQgJ+QnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDIyOSAweGU1ICflJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweDcwLCAvKiAwMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMzAgMHhlNiAn5icgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhmOCwgLyogMTExMTEwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHg4MCwgLyogMTAwMDAwMCAqLworCisJLyogMjMxIDB4ZTcgJ+cnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMSAqLworCTB4ZGMsIC8qIDExMDExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDIzMiAweGU4ICfoJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHg3OCwgLyogMDExMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMzMgMHhlOSAn6ScgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjM0IDB4ZWEgJ+onICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMSAqLworCTB4YzYsIC8qIDExMDAwMTEgKi8KKwkweGM2LCAvKiAxMTAwMDExICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4ZWUsIC8qIDExMTAxMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDIzNSAweGViICfrJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMzYgMHhlYyAn7CcgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEgKi8KKwkweGQ2LCAvKiAxMTAxMDExICovCisJMHhkNiwgLyogMTEwMTAxMSAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjM3IDB4ZWQgJ+0nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDA2LCAvKiAwMDAwMDExICovCisJMHgwYywgLyogMDAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweGQ2LCAvKiAxMTAxMDExICovCisJMHhkNiwgLyogMTEwMTAxMSAqLworCTB4ZTYsIC8qIDExMTAwMTEgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDIzOCAweGVlICfuJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDFjLCAvKiAwMDAxMTEwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDFjLCAvKiAwMDAxMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyMzkgMHhlZiAn7ycgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHhjYywgLyogMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjQwIDB4ZjAgJ/AnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDI0MSAweGYxICfxJyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyNDIgMHhmMiAn8icgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjQzIDB4ZjMgJ/MnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDI0NCAweGY0ICf0JyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDFjLCAvKiAwMDAxMTEwICovCisJMHgzNiwgLyogMDAxMTAxMSAqLworCTB4MzYsIC8qIDAwMTEwMTEgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisKKwkvKiAyNDUgMHhmNSAn9ScgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjQ2IDB4ZjYgJ/YnICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDI0NyAweGY3ICf3JyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc2LCAvKiAwMTExMDExICovCisJMHhkYywgLyogMTEwMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDc2LCAvKiAwMTExMDExICovCisJMHhkYywgLyogMTEwMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyNDggMHhmOCAn+CcgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDM4LCAvKiAwMDExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjQ5IDB4ZjkgJ/knICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDI1MCAweGZhICf6JyAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyNTEgMHhmYiAn+ycgKi8KKwkweDFlLCAvKiAwMDAxMTExICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4ZDgsIC8qIDExMDExMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwICovCisJMHgzOCwgLyogMDAxMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjUyIDB4ZmMgJ/wnICovCisJMHhkOCwgLyogMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworCS8qIDI1MyAweGZkICf9JyAqLworCTB4NzgsIC8qIDAxMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwICovCisJMHgxOCwgLyogMDAwMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAgKi8KKwkweDY0LCAvKiAwMTEwMDEwICovCisJMHhmYywgLyogMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisKKwkvKiAyNTQgMHhmZSAn/icgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHg3YywgLyogMDExMTExMCAqLworCTB4N2MsIC8qIDAxMTExMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCisJLyogMjU1IDB4ZmYgJ/8nICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAgKi8KKworfTsKKworCitzdHJ1Y3QgZm9udF9kZXNjIGZvbnRfN3gxNCA9IHsKKwlGT05UN3gxNF9JRFgsCisJIjd4MTQiLAorCTcsCisJMTQsCisJZm9udGRhdGFfN3gxNCwKKwkwCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfc3VuMTJ4MjIuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X3N1bjEyeDIyLmMKaW5kZXggMDUyMTVkMC4uYzdiZDk2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfc3VuMTJ4MjIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9zdW4xMngyMi5jCkBAIC0yOSwyNCArMjksMjMgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDEgMHgwMSAnXkEnICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDFmLCAweGMwLCAvKiAwMDAxMTExMTExMDAgKi8KKwkweDMwLCAweDYwLCAvKiAwMDExMDAwMDAxMTAgKi8KKwkweDY1LCAweDMwLCAvKiAwMTEwMDEwMTAwMTEgKi8KKwkweDZkLCAweGIwLCAvKiAwMTEwMTEwMTEwMTEgKi8KKwkweDYwLCAweDMwLCAvKiAwMTEwMDAwMDAwMTEgKi8KKwkweDYyLCAweDMwLCAvKiAwMTEwMDAxMDAwMTEgKi8KKwkweDYyLCAweDMwLCAvKiAwMTEwMDAxMDAwMTEgKi8KKwkweDYwLCAweDMwLCAvKiAwMTEwMDAwMDAwMTEgKi8KKwkweDZmLCAweGIwLCAvKiAwMTEwMTExMTEwMTEgKi8KKwkweDY3LCAweDMwLCAvKiAwMTEwMDExMTAwMTEgKi8KKwkweDMwLCAweDYwLCAvKiAwMDExMDAwMDAxMTAgKi8KKwkweDFmLCAweGMwLCAvKiAwMDAxMTExMTExMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTU0LDI0ICs1MywyMyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMiAweDAyICdeQicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEwMCAqLworCTB4M2YsIDB4ZTAsIC8qIDAwMTExMTExMTExMCAqLworCTB4N2EsIDB4ZjAsIC8qIDAxMTExMDEwMTExMSAqLworCTB4NzIsIDB4NzAsIC8qIDAxMTEwMDEwMDExMSAqLworCTB4N2YsIDB4ZjAsIC8qIDAxMTExMTExMTExMSAqLworCTB4N2QsIDB4ZjAsIC8qIDAxMTExMTAxMTExMSAqLworCTB4N2QsIDB4ZjAsIC8qIDAxMTExMTAxMTExMSAqLworCTB4N2YsIDB4ZjAsIC8qIDAxMTExMTExMTExMSAqLworCTB4NzAsIDB4NzAsIC8qIDAxMTEwMDAwMDExMSAqLworCTB4NzgsIDB4ZjAsIC8qIDAxMTExMDAwMTExMSAqLworCTB4M2YsIDB4ZTAsIC8qIDAwMTExMTExMTExMCAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNzksMjQgKzc3LDIzIEBACiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAzIDB4MDMgJ15DJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMDAwICovCisJMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCiAJMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCiAJMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMDAwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMDAwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMDAwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCkBAIC0xMDQsNDkgKzEwMSw0NyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogNCAweDA0ICdeRCcgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDIsIDB4MDAsIC8qIDAwMDAwMDEwMDAwMCAqLworCTB4MDcsIDB4MDAsIC8qIDAwMDAwMTExMDAwMCAqLworCTB4MGYsIDB4ODAsIC8qIDAwMDAxMTExMTAwMCAqLworCTB4MGYsIDB4ODAsIC8qIDAwMDAxMTExMTAwMCAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEwMCAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEwMCAqLworCTB4M2YsIDB4ZTAsIC8qIDAwMTExMTExMTExMCAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEwMCAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEwMCAqLworCTB4MGYsIDB4ODAsIC8qIDAwMDAxMTExMTAwMCAqLworCTB4MGYsIDB4ODAsIC8qIDAwMDAxMTExMTAwMCAqLworCTB4MDcsIDB4MDAsIC8qIDAwMDAwMTExMDAwMCAqLworCTB4MDIsIDB4MDAsIC8qIDAwMDAwMDEwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogNSAweDA1ICdeRScgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDIsIDB4MDAsIC8qIDAwMDAwMDEwMDAwMCAqLworCTB4MDcsIDB4MDAsIC8qIDAwMDAwMTExMDAwMCAqLworCTB4MDcsIDB4MDAsIC8qIDAwMDAwMTExMDAwMCAqLworCTB4MDIsIDB4MDAsIC8qIDAwMDAwMDEwMDAwMCAqLworCTB4MTgsIDB4YzAsIC8qIDAwMDExMDAwMTEwMCAqLworCTB4M2QsIDB4ZTAsIC8qIDAwMTExMTAxMTExMCAqLworCTB4M2QsIDB4ZTAsIC8qIDAwMTExMTAxMTExMCAqLworCTB4MWEsIDB4YzAsIC8qIDAwMDExMDEwMTEwMCAqLworCTB4MDIsIDB4MDAsIC8qIDAwMDAwMDEwMDAwMCAqLworCTB4MDcsIDB4MDAsIC8qIDAwMDAwMTExMDAwMCAqLworCTB4MGYsIDB4ODAsIC8qIDAwMDAxMTExMTAwMCAqLworCTB4MWYsIDB4YzAsIC8qIDAwMDExMTExMTEwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtMTU0LDIzICsxNDksMjIgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDYgMHgwNiAnXkYnICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDBmLCAweDAwLCAvKiAwMDAwMTExMTAwMDAgKi8KKwkweDFmLCAweDgwLCAvKiAwMDAxMTExMTEwMDAgKi8KKwkweDFmLCAweDgwLCAvKiAwMDAxMTExMTEwMDAgKi8KIAkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDM2LCAweGMwLCAvKiAwMDExMDExMDExMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDBmLCAweDAwLCAvKiAwMDAwMTExMTAwMDAgKi8KKwkweDFmLCAweDgwLCAvKiAwMDAxMTExMTEwMDAgKi8KIAkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTE3OSwyNCArMTczLDIzIEBACiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiA3IDB4MDcgJ15HJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMDAwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMDAwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMDAwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMDAwICovCisJMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMDAwICovCisJMHgxZiwgMHg4MCwgLyogMDAwMTExMTExMDAwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMDAwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCkBAIC0yMDQsNDkgKzE5Nyw0NyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogOCAweDA4ICdeSCcgKi8KLQkvKiBGSVhNRSAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4ZjksIDB4ZjAsIC8qIDExMTExMDAxMTExMSAqLworCTB4ZjAsIDB4ZjAsIC8qIDExMTEwMDAwMTExMSAqLworCTB4ZjAsIDB4ZjAsIC8qIDExMTEwMDAwMTExMSAqLworCTB4ZTAsIDB4NzAsIC8qIDExMTAwMDAwMDExMSAqLworCTB4ZTAsIDB4NzAsIC8qIDExMTAwMDAwMDExMSAqLworCTB4YzAsIDB4MzAsIC8qIDExMDAwMDAwMDAxMSAqLworCTB4YzAsIDB4MzAsIC8qIDExMDAwMDAwMDAxMSAqLworCTB4ZTAsIDB4NzAsIC8qIDExMTAwMDAwMDExMSAqLworCTB4ZTAsIDB4NzAsIC8qIDExMTAwMDAwMDExMSAqLworCTB4ZjAsIDB4ZjAsIC8qIDExMTEwMDAwMTExMSAqLworCTB4ZjAsIDB4ZjAsIC8qIDExMTEwMDAwMTExMSAqLworCTB4ZjksIDB4ZjAsIC8qIDExMTExMDAxMTExMSAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLwogCiAJLyogOSAweDA5ICdeSScgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAwMCAqLworCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLworCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLworCTB4MTksIDB4ODAsIC8qIDAwMDExMDAxMTAwMCAqLworCTB4MTksIDB4ODAsIC8qIDAwMDExMDAxMTAwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MTksIDB4ODAsIC8qIDAwMDExMDAxMTAwMCAqLworCTB4MTksIDB4ODAsIC8qIDAwMDExMDAxMTAwMCAqLworCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLworCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtMjU0LDE0OSArMjQ1LDE0MyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMTAgMHgwYSAnXkonICovCi0JLyogRklYTUUgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KKwkweGY5LCAweGYwLCAvKiAxMTExMTAwMTExMTEgKi8KKwkweGYwLCAweGYwLCAvKiAxMTExMDAwMDExMTEgKi8KKwkweGYwLCAweGYwLCAvKiAxMTExMDAwMDExMTEgKi8KKwkweGU2LCAweDcwLCAvKiAxMTEwMDExMDAxMTEgKi8KKwkweGU2LCAweDcwLCAvKiAxMTEwMDExMDAxMTEgKi8KKwkweGNmLCAweDMwLCAvKiAxMTAwMTExMTAwMTEgKi8KKwkweGNmLCAweDMwLCAvKiAxMTAwMTExMTAwMTEgKi8KKwkweGU2LCAweDcwLCAvKiAxMTEwMDExMDAxMTEgKi8KKwkweGU2LCAweDcwLCAvKiAxMTEwMDExMDAxMTEgKi8KKwkweGYwLCAweGYwLCAvKiAxMTExMDAwMDExMTEgKi8KKwkweGYwLCAweGYwLCAvKiAxMTExMDAwMDExMTEgKi8KKwkweGY5LCAweGYwLCAvKiAxMTExMTAwMTExMTEgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KIAogCS8qIDExIDB4MGIgJ15LJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwZiwgMHhlMCwgLyogMDAwMDExMTExMTEwICovCisJMHgwZiwgMHhlMCwgLyogMDAwMDExMTExMTEwICovCisJMHgwMSwgMHhlMCwgLyogMDAwMDAwMDExMTEwICovCisJMHgwMywgMHg2MCwgLyogMDAwMDAwMTEwMTEwICovCisJMHgwNiwgMHg2MCwgLyogMDAwMDAxMTAwMTEwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMDAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMDAwICovCisJMHg2MSwgMHg4MCwgLyogMDExMDAwMDExMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMDAwICovCisJMHgzMywgMHgwMCwgLyogMDAxMTAwMTEwMDAwICovCisJMHgxZSwgMHgwMCwgLyogMDAwMTExMTAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAxMiAweDBjICdeTCcgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAwMCAqLworCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLworCTB4MTksIDB4ODAsIC8qIDAwMDExMDAxMTAwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MTksIDB4ODAsIC8qIDAwMDExMDAxMTAwMCAqLworCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAwMCAqLworCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLworCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAwMCAqLworCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMTMgMHgwZCAnXk0nICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDBmLCAweGUwLCAvKiAwMDAwMTExMTExMTAgKi8KKwkweDBjLCAweDYwLCAvKiAwMDAwMTEwMDAxMTAgKi8KKwkweDBjLCAweDYwLCAvKiAwMDAwMTEwMDAxMTAgKi8KKwkweDBmLCAweGUwLCAvKiAwMDAwMTExMTExMTAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDNjLCAweDAwLCAvKiAwMDExMTEwMDAwMDAgKi8KKwkweDdjLCAweDAwLCAvKiAwMTExMTEwMDAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDE0IDB4MGUgJ15OJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgxZiwgMHhlMCwgLyogMDAwMTExMTExMTEwICovCisJMHgxOCwgMHg2MCwgLyogMDAwMTEwMDAwMTEwICovCisJMHgxOCwgMHg2MCwgLyogMDAwMTEwMDAwMTEwICovCisJMHgxZiwgMHhlMCwgLyogMDAwMTExMTExMTEwICovCisJMHgxOCwgMHg2MCwgLyogMDAwMTEwMDAwMTEwICovCisJMHgxOCwgMHg2MCwgLyogMDAwMTEwMDAwMTEwICovCisJMHgxOCwgMHg2MCwgLyogMDAwMTEwMDAwMTEwICovCisJMHgxOCwgMHg2MCwgLyogMDAwMTEwMDAwMTEwICovCisJMHgxOCwgMHg2MCwgLyogMDAwMTEwMDAwMTEwICovCisJMHgxOCwgMHg2MCwgLyogMDAwMTEwMDAwMTEwICovCisJMHgxOSwgMHhlMCwgLyogMDAwMTEwMDExMTEwICovCisJMHgxYiwgMHhlMCwgLyogMDAwMTEwMTExMTEwICovCisJMHgxYiwgMHhjMCwgLyogMDAwMTEwMTExMTAwICovCisJMHg3OSwgMHg4MCwgLyogMDExMTEwMDExMDAwICovCisJMHhmOCwgMHgwMCwgLyogMTExMTEwMDAwMDAwICovCisJMHhmMCwgMHgwMCwgLyogMTExMTAwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAxNSAweDBmICdeTycgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MTgsIDB4YzAsIC8qIDAwMDExMDAwMTEwMCAqLworCTB4MGQsIDB4ODAsIC8qIDAwMDAxMTAxMTAwMCAqLworCTB4NmQsIDB4YjAsIC8qIDAxMTAxMTAxMTAxMSAqLworCTB4M2QsIDB4ZTAsIC8qIDAwMTExMTAxMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4M2QsIDB4ZTAsIC8qIDAwMTExMTAxMTExMCAqLworCTB4NmQsIDB4YjAsIC8qIDAxMTAxMTAxMTAxMSAqLworCTB4MGQsIDB4ODAsIC8qIDAwMDAxMTAxMTAwMCAqLworCTB4MTgsIDB4YzAsIC8qIDAwMDExMDAwMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNDA0LDc0ICszODksNzEgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDE2IDB4MTAgJ15QJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgyMCwgLyogMDAwMDAwMDAwMDEwICovCisJMHgwMCwgMHg2MCwgLyogMDAwMDAwMDAwMTEwICovCisJMHgwMCwgMHhlMCwgLyogMDAwMDAwMDAxMTEwICovCisJMHgwMSwgMHhlMCwgLyogMDAwMDAwMDExMTEwICovCisJMHgwMywgMHhlMCwgLyogMDAwMDAwMTExMTEwICovCisJMHgwNywgMHhlMCwgLyogMDAwMDAxMTExMTEwICovCisJMHgwZiwgMHhlMCwgLyogMDAwMDExMTExMTEwICovCisJMHgxZiwgMHhlMCwgLyogMDAwMTExMTExMTEwICovCisJMHgzZiwgMHhlMCwgLyogMDAxMTExMTExMTEwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCisJMHgzZiwgMHhlMCwgLyogMDAxMTExMTExMTEwICovCisJMHgxZiwgMHhlMCwgLyogMDAwMTExMTExMTEwICovCisJMHgwZiwgMHhlMCwgLyogMDAwMDExMTExMTEwICovCisJMHgwNywgMHhlMCwgLyogMDAwMDAxMTExMTEwICovCisJMHgwMywgMHhlMCwgLyogMDAwMDAwMTExMTEwICovCisJMHgwMSwgMHhlMCwgLyogMDAwMDAwMDExMTEwICovCisJMHgwMCwgMHhlMCwgLyogMDAwMDAwMDAxMTEwICovCisJMHgwMCwgMHg2MCwgLyogMDAwMDAwMDAwMTEwICovCisJMHgwMCwgMHgyMCwgLyogMDAwMDAwMDAwMDEwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAxNyAweDExICdeUScgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4NDAsIDB4MDAsIC8qIDAxMDAwMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAwMCAqLworCTB4NzAsIDB4MDAsIC8qIDAxMTEwMDAwMDAwMCAqLworCTB4NzgsIDB4MDAsIC8qIDAxMTExMDAwMDAwMCAqLworCTB4N2MsIDB4MDAsIC8qIDAxMTExMTAwMDAwMCAqLworCTB4N2UsIDB4MDAsIC8qIDAxMTExMTEwMDAwMCAqLworCTB4N2YsIDB4MDAsIC8qIDAxMTExMTExMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAwMCAqLworCTB4N2YsIDB4YzAsIC8qIDAxMTExMTExMTEwMCAqLworCTB4N2YsIDB4ZTAsIC8qIDAxMTExMTExMTExMCAqLworCTB4N2YsIDB4YzAsIC8qIDAxMTExMTExMTEwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAwMCAqLworCTB4N2YsIDB4MDAsIC8qIDAxMTExMTExMDAwMCAqLworCTB4N2UsIDB4MDAsIC8qIDAxMTExMTEwMDAwMCAqLworCTB4N2MsIDB4MDAsIC8qIDAxMTExMTAwMDAwMCAqLworCTB4NzgsIDB4MDAsIC8qIDAxMTExMDAwMDAwMCAqLworCTB4NzAsIDB4MDAsIC8qIDAxMTEwMDAwMDAwMCAqLworCTB4NjAsIDB4MDAsIC8qIDAxMTAwMDAwMDAwMCAqLworCTB4NDAsIDB4MDAsIC8qIDAxMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMTggMHgxMiAnXlInICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwMDAgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwMDAgKi8KKwkweDdmLCAweGMwLCAvKiAwMTExMTExMTExMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDdmLCAweGMwLCAvKiAwMTExMTExMTExMDAgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTU1MSwyNCArNTMzLDIzIEBACiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAyMiAweDE2ICdeVicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ZTAsIC8qIDAxMTExMTExMTExMCAqLworCTB4N2YsIDB4ZTAsIC8qIDAxMTExMTExMTExMCAqLworCTB4N2YsIDB4ZTAsIC8qIDAxMTExMTExMTExMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNTc2LDI0ICs1NTcsMjMgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDIzIDB4MTcgJ15XJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMDAwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMDAwICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMTAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMTAwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCkBAIC02MDEsNDkgKzU4MSw0NyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMjQgMHgxOCAnXlgnICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDA0LCAweDAwLCAvKiAwMDAwMDEwMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwMDAgKi8KKwkweDNmLCAweDgwLCAvKiAwMDExMTExMTEwMDAgKi8KKwkweDdmLCAweGMwLCAvKiAwMTExMTExMTExMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDI1IDB4MTkgJ15ZJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMTAwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCkBAIC02NTEsMjQgKzYyOSwyMyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMjYgMHgxYSAnXlonICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDA4LCAweDAwLCAvKiAwMDAwMTAwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwMDAgKi8KKwkweDM4LCAweDAwLCAvKiAwMDExMTAwMDAwMDAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweGZmLCAweGUwLCAvKiAxMTExMTExMTExMTAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDM4LCAweDAwLCAvKiAwMDExMTAwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwMDAgKi8KKwkweDA4LCAweDAwLCAvKiAwMDAwMTAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTY3NiwyNCArNjUzLDIzIEBACiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAyNyAweDFiICdeWycgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDEsIDB4MDAsIC8qIDAwMDAwMDAxMDAwMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAwMCAqLworCTB4MDEsIDB4YzAsIC8qIDAwMDAwMDAxMTEwMCAqLworCTB4N2YsIDB4ZTAsIC8qIDAxMTExMTExMTExMCAqLworCTB4N2YsIDB4ZjAsIC8qIDAxMTExMTExMTExMSAqLworCTB4N2YsIDB4ZTAsIC8qIDAxMTExMTExMTExMCAqLworCTB4MDEsIDB4YzAsIC8qIDAwMDAwMDAxMTEwMCAqLworCTB4MDEsIDB4ODAsIC8qIDAwMDAwMDAxMTAwMCAqLworCTB4MDEsIDB4MDAsIC8qIDAwMDAwMDAxMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNzAxLDI0ICs2NzcsMjMgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDI4IDB4MWMgJ15cJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMDAwICovCisJMHgzZiwgMHhlMCwgLyogMDAxMTExMTExMTEwICovCisJMHgzZiwgMHhlMCwgLyogMDAxMTExMTExMTEwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCkBAIC03MjYsMjQgKzcwMSwyMyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMjkgMHgxZCAnXl0nICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDA5LCAweDAwLCAvKiAwMDAwMTAwMTAwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDM5LCAweGMwLCAvKiAwMDExMTAwMTExMDAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweGZmLCAweGYwLCAvKiAxMTExMTExMTExMTEgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDM5LCAweGMwLCAvKiAwMDExMTAwMTExMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDA5LCAweDAwLCAvKiAwMDAwMTAwMTAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTc1MSwyNCArNzI1LDIzIEBACiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAzMCAweDFlICdeXicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAwMCAqLworCTB4MDQsIDB4MDAsIC8qIDAwMDAwMTAwMDAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAwMCAqLworCTB4MGUsIDB4MDAsIC8qIDAwMDAxMTEwMDAwMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAwMCAqLworCTB4MWYsIDB4MDAsIC8qIDAwMDExMTExMDAwMCAqLworCTB4M2YsIDB4ODAsIC8qIDAwMTExMTExMTAwMCAqLworCTB4M2YsIDB4ODAsIC8qIDAwMTExMTExMTAwMCAqLworCTB4N2YsIDB4YzAsIC8qIDAxMTExMTExMTEwMCAqLworCTB4N2YsIDB4YzAsIC8qIDAxMTExMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNzc2LDI0ICs3NDksMjMgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDMxIDB4MWYgJ15fJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMTAwICovCisJMHg3ZiwgMHhjMCwgLyogMDExMTExMTExMTAwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMDAwICovCisJMHgzZiwgMHg4MCwgLyogMDAxMTExMTExMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMDAwICovCisJMHgwNCwgMHgwMCwgLyogMDAwMDAxMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCkBAIC0zMDgxLDI5ICszMDUzLDI4IEBACiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAxMjcgMHg3ZiAnLicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4ZmYsIDB4ZjAsIC8qIDExMTExMTExMTExMSAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMTI4IDB4ODAgJy4nICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCkBAIC0zODI2LDUzICszNzk3LDUxIEBACiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAxNTggMHg5ZSAnLicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ODAsIC8qIDAxMTExMTExMTAwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4NjAsIC8qIDAwMTEwMDAwMDExMCAqLworCTB4MzAsIDB4NjAsIC8qIDAwMTEwMDAwMDExMCAqLworCTB4MzAsIDB4NjAsIC8qIDAwMTEwMDAwMDExMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzcsIDB4ODAsIC8qIDAwMTEwMTExMTAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAwMCAqLworCTB4MzcsIDB4ODAsIC8qIDAwMTEwMTExMTAwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAwMCAqLworCTB4MzMsIDB4MDAsIC8qIDAwMTEwMDExMDAwMCAqLworCTB4MzMsIDB4MzAsIC8qIDAwMTEwMDExMDAxMSAqLworCTB4MzEsIDB4ZTAsIC8qIDAwMTEwMDAxMTExMCAqLworCTB4NzgsIDB4YzAsIC8qIDAxMTExMDAwMTEwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMTU5IDB4OWYgJy4nICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweGMwLCAvKiAwMDAwMDAwMDExMDAgKi8KKwkweDAxLCAweGUwLCAvKiAwMDAwMDAwMTExMTAgKi8KKwkweDAzLCAweDMwLCAvKiAwMDAwMDAxMTAwMTEgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDNmLCAweGUwLCAvKiAwMDExMTExMTExMTAgKi8KKwkweDdmLCAweGMwLCAvKiAwMTExMTExMTExMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweGNjLCAweDAwLCAvKiAxMTAwMTEwMDAwMDAgKi8KKwkweDc4LCAweDAwLCAvKiAwMTExMTAwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDE2MCAweGEwICcuJyAqLwpAQCAtNDA5MiwyNCArNDA2MSwyMyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMTY5IDB4YTkgJy4nICovCi0JLyogRklYTUUgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KKwkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTU0MTMsMjQgKzUzODEsMjMgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDIyNCAweGUwICcuJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwZiwgMHg2MCwgLyogMDAwMDExMTEwMTEwICovCisJMHgxMywgMHhlMCwgLyogMDAwMTAwMTExMTEwICovCisJMHgyMSwgMHhjMCwgLyogMDAxMDAwMDExMTAwICovCisJMHg2MCwgMHhjMCwgLyogMDExMDAwMDAxMTAwICovCisJMHg2MCwgMHhjMCwgLyogMDExMDAwMDAxMTAwICovCisJMHg2MCwgMHhjMCwgLyogMDExMDAwMDAxMTAwICovCisJMHg2MCwgMHhjMCwgLyogMDExMDAwMDAxMTAwICovCisJMHg3MCwgMHg4MCwgLyogMDExMTAwMDAxMDAwICovCisJMHgzOSwgMHhjMCwgLyogMDAxMTEwMDExMTAwICovCisJMHgxZiwgMHg2MCwgLyogMDAwMTExMTEwMTEwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCkBAIC01NDYyLDQ5ICs1NDI5LDQ3IEBACiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAyMjYgMHhlMiAnLicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4M2YsIDB4ZTAsIC8qIDAwMTExMTExMTExMCAqLworCTB4M2YsIDB4ZTAsIC8qIDAwMTExMTExMTExMCAqLworCTB4MzAsIDB4NjAsIC8qIDAwMTEwMDAwMDExMCAqLworCTB4MzAsIDB4NjAsIC8qIDAwMTEwMDAwMDExMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLworCTB4MzAsIDB4MDAsIC8qIDAwMTEwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMjI3IDB4ZTMgJy4nICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTU1MTIsNDkgKzU0NzcsNDcgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDIyOCAweGU0ICcuJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCisJMHg2MCwgMHg2MCwgLyogMDExMDAwMDAwMTEwICovCisJMHgzMCwgMHg2MCwgLyogMDAxMTAwMDAwMTEwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMDAwICovCisJMHgzMCwgMHgwMCwgLyogMDAxMTAwMDAwMDAwICovCisJMHgzMCwgMHg2MCwgLyogMDAxMTAwMDAwMTEwICovCisJMHg2MCwgMHg2MCwgLyogMDExMDAwMDAwMTEwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAyMjkgMHhlNSAnLicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLworCTB4MDcsIDB4ZTAsIC8qIDAwMDAwMTExMTExMCAqLworCTB4MGYsIDB4ZTAsIC8qIDAwMDAxMTExMTExMCAqLworCTB4MTMsIDB4ODAsIC8qIDAwMDEwMDExMTAwMCAqLworCTB4MjEsIDB4YzAsIC8qIDAwMTAwMDAxMTEwMCAqLworCTB4NjAsIDB4YzAsIC8qIDAxMTAwMDAwMTEwMCAqLworCTB4NjAsIDB4YzAsIC8qIDAxMTAwMDAwMTEwMCAqLworCTB4NjAsIDB4YzAsIC8qIDAxMTAwMDAwMTEwMCAqLworCTB4NjAsIDB4YzAsIC8qIDAxMTAwMDAwMTEwMCAqLworCTB4NzAsIDB4ODAsIC8qIDAxMTEwMDAwMTAwMCAqLworCTB4MzksIDB4MDAsIC8qIDAwMTExMDAxMDAwMCAqLworCTB4MWUsIDB4MDAsIC8qIDAwMDExMTEwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNTU4Niw3NCArNTU0OSw3MSBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMjMxIDB4ZTcgJy4nICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KKwkweDY2LCAweDYwLCAvKiAwMTEwMDExMDAxMTAgKi8KKwkweDY2LCAweDYwLCAvKiAwMTEwMDExMDAxMTAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDIzMiAweGU4ICcuJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMDAwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMDAwICovCisJMHgzMCwgMHhjMCwgLyogMDAxMTAwMDAxMTAwICovCisJMHgzMCwgMHhjMCwgLyogMDAxMTAwMDAxMTAwICovCisJMHgxOSwgMHg4MCwgLyogMDAwMTEwMDExMDAwICovCisJMHgwZiwgMHgwMCwgLyogMDAwMDExMTEwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAyMzMgMHhlOSAnLicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLworCTB4MWYsIDB4ODAsIC8qIDAwMDExMTExMTAwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4NjAsIDB4NjAsIC8qIDAxMTAwMDAwMDExMCAqLworCTB4NjAsIDB4NjAsIC8qIDAxMTAwMDAwMDExMCAqLworCTB4N2YsIDB4ZTAsIC8qIDAxMTExMTExMTExMCAqLworCTB4N2YsIDB4ZTAsIC8qIDAxMTExMTExMTExMCAqLworCTB4NjAsIDB4NjAsIC8qIDAxMTAwMDAwMDExMCAqLworCTB4NjAsIDB4NjAsIC8qIDAxMTAwMDAwMDExMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MWYsIDB4ODAsIC8qIDAwMDExMTExMTAwMCAqLworCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNTY2MSwyNCArNTYyMSwyMyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMjM0IDB4ZWEgJy4nICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDFmLCAweDAwLCAvKiAwMDAxMTExMTAwMDAgKi8KKwkweDMxLCAweDgwLCAvKiAwMDExMDAwMTEwMDAgKi8KKwkweDMwLCAweGMwLCAvKiAwMDExMDAwMDExMDAgKi8KKwkweDMwLCAweGMwLCAvKiAwMDExMDAwMDExMDAgKi8KKwkweDYwLCAweDYwLCAvKiAwMTEwMDAwMDAxMTAgKi8KKwkweDYwLCAweDYwLCAvKiAwMTEwMDAwMDAxMTAgKi8KKwkweDMwLCAweGMwLCAvKiAwMDExMDAwMDExMDAgKi8KKwkweDMwLCAweGMwLCAvKiAwMDExMDAwMDExMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweDE5LCAweDgwLCAvKiAwMDAxMTAwMTEwMDAgKi8KKwkweGQ5LCAweGIwLCAvKiAxMTAxMTAwMTEwMTEgKi8KKwkweDc5LCAweGUwLCAvKiAwMTExMTAwMTExMTAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTU2ODYsNDkgKzU2NDUsNDcgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDIzNSAweGViICcuJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwNywgMHg4MCwgLyogMDAwMDAxMTExMDAwICovCisJMHgwYywgMHhjMCwgLyogMDAwMDExMDAxMTAwICovCisJMHgxOCwgMHg2MCwgLyogMDAwMTEwMDAwMTEwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwZiwgMHg4MCwgLyogMDAwMDExMTExMDAwICovCisJMHgxMSwgMHhjMCwgLyogMDAwMTAwMDExMTAwICovCisJMHgyMCwgMHhlMCwgLyogMDAxMDAwMDAxMTEwICovCisJMHg2MCwgMHg2MCwgLyogMDExMDAwMDAwMTEwICovCisJMHg2MCwgMHg2MCwgLyogMDExMDAwMDAwMTEwICovCisJMHg3MCwgMHg0MCwgLyogMDExMTAwMDAwMTAwICovCisJMHgzOCwgMHg4MCwgLyogMDAxMTEwMDAxMDAwICovCisJMHgxZiwgMHgwMCwgLyogMDAwMTExMTEwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAyMzYgMHhlYyAnLicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MzksIDB4YzAsIC8qIDAwMTExMDAxMTEwMCAqLworCTB4NmYsIDB4NjAsIC8qIDAxMTAxMTExMDExMCAqLworCTB4NjYsIDB4NjAsIC8qIDAxMTAwMTEwMDExMCAqLworCTB4YzYsIDB4MzAsIC8qIDExMDAwMTEwMDAxMSAqLworCTB4YzYsIDB4MzAsIC8qIDExMDAwMTEwMDAxMSAqLworCTB4NjYsIDB4NjAsIC8qIDAxMTAwMTEwMDExMCAqLworCTB4NmYsIDB4NjAsIC8qIDAxMTAxMTExMDExMCAqLworCTB4MzksIDB4YzAsIC8qIDAwMTExMDAxMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNTczNiw3NCArNTY5Myw3MSBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMjM3IDB4ZWQgJy4nICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweGMwLCAvKiAwMDAwMDAwMDExMDAgKi8KKwkweDAwLCAweGMwLCAvKiAwMDAwMDAwMDExMDAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwMDAgKi8KKwkweDAxLCAweDgwLCAvKiAwMDAwMDAwMTEwMDAgKi8KKwkweDNiLCAweGMwLCAvKiAwMDExMTAxMTExMDAgKi8KKwkweDZmLCAweDYwLCAvKiAwMTEwMTExMTAxMTAgKi8KKwkweDY2LCAweDYwLCAvKiAwMTEwMDExMDAxMTAgKi8KKwkweGM2LCAweDMwLCAvKiAxMTAwMDExMDAwMTEgKi8KKwkweGM2LCAweDMwLCAvKiAxMTAwMDExMDAwMTEgKi8KKwkweDY2LCAweDYwLCAvKiAwMTEwMDExMDAxMTAgKi8KKwkweDZmLCAweDYwLCAvKiAwMTEwMTExMTAxMTAgKi8KKwkweDNkLCAweGMwLCAvKiAwMDExMTEwMTExMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwMDAgKi8KKwkweDE4LCAweDAwLCAvKiAwMDAxMTAwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwMDAgKi8KKwkweDMwLCAweDAwLCAvKiAwMDExMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDIzOCAweGVlICcuJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMSwgMHhjMCwgLyogMDAwMDAwMDExMTAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMDAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMDAwICovCisJMHgxZiwgMHhjMCwgLyogMDAwMTExMTExMTAwICovCisJMHgxOCwgMHgwMCwgLyogMDAwMTEwMDAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMDAwICovCisJMHgwYywgMHgwMCwgLyogMDAwMDExMDAwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHgwNiwgMHgwMCwgLyogMDAwMDAxMTAwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMSwgMHhjMCwgLyogMDAwMDAwMDExMTAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAyMzkgMHhlZiAnLicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLworCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLworCTB4MWYsIDB4ODAsIC8qIDAwMDExMTExMTAwMCAqLworCTB4MzksIDB4YzAsIC8qIDAwMTExMDAxMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLworCTB4MzAsIDB4YzAsIC8qIDAwMTEwMDAwMTEwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNTgxMSwyNCArNTc2NSwyMyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMjQwIDB4ZjAgJy4nICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KKwkweDdmLCAweGUwLCAvKiAwMTExMTExMTExMTAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTU4NjAsMjQgKzU4MTMsMjMgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDI0MiAweGYyICcuJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMDAwICovCisJMHgzOCwgMHgwMCwgLyogMDAxMTEwMDAwMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgwMywgMHg4MCwgLyogMDAwMDAwMTExMDAwICovCisJMHgwMCwgMHhlMCwgLyogMDAwMDAwMDAxMTEwICovCisJMHgwMCwgMHhlMCwgLyogMDAwMDAwMDAxMTEwICovCisJMHgwMywgMHg4MCwgLyogMDAwMDAwMTExMDAwICovCisJMHgwZSwgMHgwMCwgLyogMDAwMDExMTAwMDAwICovCisJMHgzOCwgMHgwMCwgLyogMDAxMTEwMDAwMDAwICovCisJMHg2MCwgMHgwMCwgLyogMDExMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCisJMHg3ZiwgMHhlMCwgLyogMDExMTExMTExMTEwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCkBAIC01ODg1LDI0ICs1ODM3LDIzIEBACiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAyNDMgMHhmMyAnLicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4NjAsIC8qIDAwMDAwMDAwMDExMCAqLworCTB4MDEsIDB4YzAsIC8qIDAwMDAwMDAxMTEwMCAqLworCTB4MDcsIDB4MDAsIC8qIDAwMDAwMTExMDAwMCAqLworCTB4MWMsIDB4MDAsIC8qIDAwMDExMTAwMDAwMCAqLworCTB4NzAsIDB4MDAsIC8qIDAxMTEwMDAwMDAwMCAqLworCTB4NzAsIDB4MDAsIC8qIDAxMTEwMDAwMDAwMCAqLworCTB4MWMsIDB4MDAsIC8qIDAwMDExMTAwMDAwMCAqLworCTB4MDcsIDB4MDAsIC8qIDAwMDAwMTExMDAwMCAqLworCTB4MDEsIDB4YzAsIC8qIDAwMDAwMDAxMTEwMCAqLworCTB4MDAsIDB4NjAsIC8qIDAwMDAwMDAwMDExMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4N2YsIDB4ZTAsIC8qIDAxMTExMTExMTExMCAqLworCTB4N2YsIDB4ZTAsIC8qIDAxMTExMTExMTExMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNTkxMCw1NCArNTg2MSw1MiBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMjQ0IDB4ZjQgJy4nICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDAzLCAweDgwLCAvKiAwMDAwMDAxMTEwMDAgKi8KKwkweDA3LCAweGMwLCAvKiAwMDAwMDExMTExMDAgKi8KKwkweDBjLCAweDYwLCAvKiAwMDAwMTEwMDAxMTAgKi8KKwkweDBjLCAweDYwLCAvKiAwMDAwMTEwMDAxMTAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KKwkweDBjLCAweDAwLCAvKiAwMDAwMTEwMDAwMDAgKi8KIAogCS8qIDI0NSAweGY1ICcuJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgxYywgMHgwMCwgLyogMDAwMTExMDAwMDAwICovCisJMHgzZSwgMHgwMCwgLyogMDAxMTExMTAwMDAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMDAwICovCisJMHg2MywgMHgwMCwgLyogMDExMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCisJMHgwMywgMHgwMCwgLyogMDAwMDAwMTEwMDAwICovCiAKIAkvKiAyNDYgMHhmNiAnLicgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KQEAgLTU5ODQsMjQgKzU5MzMsMjMgQEAKIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDI0NyAweGY3ICcuJyAqLwotCS8qIEZJWE1FICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgzOCwgMHgwMCwgLyogMDAxMTEwMDAwMDAwICovCisJMHg2YywgMHgwMCwgLyogMDExMDExMDAwMDAwICovCisJMHgwNiwgMHgzMCwgLyogMDAwMDAxMTAwMDExICovCisJMHgwMywgMHg2MCwgLyogMDAwMDAwMTEwMTEwICovCisJMHgzOSwgMHhjMCwgLyogMDAxMTEwMDExMTAwICovCisJMHg2YywgMHgwMCwgLyogMDExMDExMDAwMDAwICovCisJMHgwNiwgMHgzMCwgLyogMDAwMDAxMTAwMDExICovCisJMHgwMywgMHg2MCwgLyogMDAwMDAwMTEwMTEwICovCisJMHgwMSwgMHhjMCwgLyogMDAwMDAwMDExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCkBAIC02MDMzLDI0ICs1OTgxLDIzIEBACiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAKIAkvKiAyNDkgMHhmOSAnLicgKi8KLQkvKiBGSVhNRSAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLwotCTB4M2YsIDB4YzAsIC8qIDAwMTExMTExMTEwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MWMsIDB4MDAsIC8qIDAwMDExMTAwMDAwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAwMCAqLworCTB4M2UsIDB4MDAsIC8qIDAwMTExMTEwMDAwMCAqLworCTB4MWMsIDB4MDAsIC8qIDAwMDExMTAwMDAwMCAqLworCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNjA2NywxMyArNjAxNCwxMyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwotCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAwMCAqLwotCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLwotCTB4MGYsIDB4MDAsIC8qIDAwMDAxMTExMDAwMCAqLwotCTB4MDYsIDB4MDAsIC8qIDAwMDAwMTEwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAwMCAqLworCTB4M2MsIDB4MDAsIC8qIDAwMTExMTAwMDAwMCAqLworCTB4MTgsIDB4MDAsIC8qIDAwMDExMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwpAQCAtNjA4Miw0OSArNjAyOSw0NyBAQAogCTB4MDAsIDB4MDAsIC8qIDAwMDAwMDAwMDAwMCAqLwogCiAJLyogMjUxIDB4ZmIgJy4nICovCi0JLyogRklYTUUgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDNmLCAweGMwLCAvKiAwMDExMTExMTExMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KLQkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KKwkweDA3LCAweGUwLCAvKiAwMDAwMDExMTExMTAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweGM2LCAweDAwLCAvKiAxMTAwMDExMDAwMDAgKi8KKwkweDY2LCAweDAwLCAvKiAwMTEwMDExMDAwMDAgKi8KKwkweDM2LCAweDAwLCAvKiAwMDExMDExMDAwMDAgKi8KKwkweDFlLCAweDAwLCAvKiAwMDAxMTExMDAwMDAgKi8KKwkweDBlLCAweDAwLCAvKiAwMDAwMTExMDAwMDAgKi8KKwkweDA2LCAweDAwLCAvKiAwMDAwMDExMDAwMDAgKi8KKwkweDAyLCAweDAwLCAvKiAwMDAwMDAxMDAwMDAgKi8KIAkweDAwLCAweDAwLCAvKiAwMDAwMDAwMDAwMDAgKi8KIAogCS8qIDI1MiAweGZjICcuJyAqLwotCS8qIEZJWE1FICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgxMywgMHg4MCwgLyogMDAwMTAwMTExMDAwICovCisJMHgzZCwgMHhjMCwgLyogMDAxMTExMDExMTAwICovCisJMHgxOCwgMHhjMCwgLyogMDAwMTEwMDAxMTAwICovCisJMHgxOCwgMHhjMCwgLyogMDAwMTEwMDAxMTAwICovCisJMHgxOCwgMHhjMCwgLyogMDAwMTEwMDAxMTAwICovCisJMHgxOCwgMHhjMCwgLyogMDAwMTEwMDAxMTAwICovCisJMHgzZCwgMHhlMCwgLyogMDAxMTExMDExMTEwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCi0JMHgzZiwgMHhjMCwgLyogMDAxMTExMTExMTAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCisJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCiAJMHgwMCwgMHgwMCwgLyogMDAwMDAwMDAwMDAwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udHMuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jCmluZGV4IDQ2NWQ2NzguLmU3OWIyOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jCkBAIC0zNiw2ICszNiwxMCBAQAogI3VuZGVmIE5PX0ZPTlRTCiAgICAgJmZvbnRfdmdhXzZ4MTEsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfRk9OVF83eDE0CisjdW5kZWYgTk9fRk9OVFMKKyAgICAmZm9udF83eDE0LAorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZPTlRfU1VOOHgxNgogI3VuZGVmIE5PX0ZPTlRTCiAgICAgJmZvbnRfc3VuXzh4MTYsCkBAIC00NCw2ICs0OCwxMCBAQAogI3VuZGVmIE5PX0ZPTlRTCiAgICAgJmZvbnRfc3VuXzEyeDIyLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0ZPTlRfMTB4MTgKKyN1bmRlZiBOT19GT05UUworICAgICZmb250XzEweDE4LAorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZPTlRfQUNPUk5fOHg4CiAjdW5kZWYgTk9fRk9OVFMKICAgICAmZm9udF9hY29ybl84eDgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKaW5kZXggYmNmNTliMi4uZDI3ZmE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwpAQCAtOTUsNiArOTUsNyBAQAogLyogRGVzY3JpcHRpb24gb2YgdGhlIGhhcmR3YXJlIHNpdHVhdGlvbiAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcJdmdhX3ZyYW1fYmFzZTsJCS8qIEJhc2Ugb2YgdmlkZW8gbWVtb3J5ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZwl2Z2FfdnJhbV9lbmQ7CQkvKiBFbmQgb2YgdmlkZW8gbWVtb3J5ICovCitzdGF0aWMgaW50CQl2Z2FfdnJhbV9zaXplOwkJLyogU2l6ZSBvZiB2aWRlbyBtZW1vcnkgKi8KIHN0YXRpYyB1MTYJCXZnYV92aWRlb19wb3J0X3JlZzsJLyogVmlkZW8gcmVnaXN0ZXIgc2VsZWN0IHBvcnQgKi8KIHN0YXRpYyB1MTYJCXZnYV92aWRlb19wb3J0X3ZhbDsJLyogVmlkZW8gcmVnaXN0ZXIgdmFsdWUgcG9ydCAqLwogc3RhdGljIHVuc2lnbmVkIGludAl2Z2FfdmlkZW9fbnVtX2NvbHVtbnM7CS8qIE51bWJlciBvZiB0ZXh0IGNvbHVtbnMgKi8KQEAgLTI4OCw2ICsyODksNyBAQAogCiAJdmdhX3ZyYW1fYmFzZSA9IFZHQV9NQVBfTUVNKHZnYV92cmFtX2Jhc2UpOwogCXZnYV92cmFtX2VuZCA9IFZHQV9NQVBfTUVNKHZnYV92cmFtX2VuZCk7CisJdmdhX3ZyYW1fc2l6ZSA9IHZnYV92cmFtX2VuZCAtIHZnYV92cmFtX2Jhc2U7CiAKIAkvKgogCSAqICAgICAgRmluZCBvdXQgaWYgdGhlcmUgaXMgYSBncmFwaGljcyBjYXJkIHByZXNlbnQuCkBAIC01MDQsOSArNTA2LDEzIEBACiAJICovCiAJdmdhX3ZpZGVvX251bV9jb2x1bW5zID0gYy0+dmNfY29sczsKIAl2Z2FfdmlkZW9fbnVtX2xpbmVzID0gYy0+dmNfcm93czsKKworCS8qIFdlIGNhbiBvbmx5IGNvcHkgb3V0IHRoZSBzaXplIG9mIHRoZSB2aWRlbyBidWZmZXIgaGVyZSwKKwkgKiBvdGhlcndpc2Ugd2UgZ2V0IGludG8gVkdBIEJJT1MgKi8KKwogCWlmICghdmdhX2lzX2dmeCkKIAkJc2NyX21lbWNweXcoKHUxNiAqKSBjLT52Y19vcmlnaW4sICh1MTYgKikgYy0+dmNfc2NyZWVuYnVmLAotCQkJICAgIGMtPnZjX3NjcmVlbmJ1Zl9zaXplKTsKKwkJCSAgICBjLT52Y19zY3JlZW5idWZfc2l6ZSA+IHZnYV92cmFtX3NpemUgPyB2Z2FfdnJhbV9zaXplIDogYy0+dmNfc2NyZWVuYnVmX3NpemUpOwogCXJldHVybiAwOwkJLyogUmVkcmF3aW5nIG5vdCBuZWVkZWQgKi8KIH0KIApAQCAtOTYxLDcgKzk2Nyw2IEBACiAJaWYgKCFsaW5lcykJCS8qIFR1cm4gc2Nyb2xsYmFjayBvZmYgKi8KIAkJYy0+dmNfdmlzaWJsZV9vcmlnaW4gPSBjLT52Y19vcmlnaW47CiAJZWxzZSB7Ci0JCWludCB2cmFtX3NpemUgPSB2Z2FfdnJhbV9lbmQgLSB2Z2FfdnJhbV9iYXNlOwogCQlpbnQgbWFyZ2luID0gYy0+dmNfc2l6ZV9yb3cgKiA0OwogCQlpbnQgdWwsIHdlLCBwLCBzdDsKIApAQCAtOTcxLDcgKzk3Niw3IEBACiAJCQl3ZSA9IHZnYV9yb2xsZWRfb3ZlciArIGMtPnZjX3NpemVfcm93OwogCQl9IGVsc2UgewogCQkJdWwgPSAwOwotCQkJd2UgPSB2cmFtX3NpemU7CisJCQl3ZSA9IHZnYV92cmFtX3NpemU7CiAJCX0KIAkJcCA9IChjLT52Y192aXNpYmxlX29yaWdpbiAtIHZnYV92cmFtX2Jhc2UgLSB1bCArIHdlKSAlIHdlICsKIAkJICAgIGxpbmVzICogYy0+dmNfc2l6ZV9yb3c7CkBAIC0xMDEyLDkgKzEwMTcsMTMgQEAKIAkJYy0+dmNfeCA9IE9SSUdfWDsKIAkJYy0+dmNfeSA9IE9SSUdfWTsKIAl9CisKKwkvKiBXZSBjYW4ndCBjb3B5IGluIG1vcmUgdGhlbiB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gYnVmZmVyLAorCSAqIG9yIHdlJ2xsIGJlIGNvcHlpbmcgaW4gVkdBIEJJT1MgKi8KKwogCWlmICghdmdhX2lzX2dmeCkKIAkJc2NyX21lbWNweXcoKHUxNiAqKSBjLT52Y19zY3JlZW5idWYsICh1MTYgKikgYy0+dmNfb3JpZ2luLAotCQkJICAgIGMtPnZjX3NjcmVlbmJ1Zl9zaXplKTsKKwkJCSAgICBjLT52Y19zY3JlZW5idWZfc2l6ZSA+IHZnYV92cmFtX3NpemUgPyB2Z2FfdnJhbV9zaXplIDogYy0+dmNfc2NyZWVuYnVmX3NpemUpOwogfQogCiBzdGF0aWMgaW50IHZnYWNvbl9zY3JvbGwoc3RydWN0IHZjX2RhdGEgKmMsIGludCB0LCBpbnQgYiwgaW50IGRpciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCA4Y2VmMDIwLi4yMjIyZGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC03Niw3MCArNzYsMjIgQEAKIEVYUE9SVF9TWU1CT0woZmJfZ2V0X2NvbG9yX2RlcHRoKTsKIAogLyoKLSAqIERyYXdpbmcgaGVscGVycy4KKyAqIERhdGEgcGFkZGluZyBmdW5jdGlvbnMuCiAgKi8KLXZvaWQgZmJfaW9tb3ZlX2J1Zl9hbGlnbmVkKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfcGl4bWFwICpidWYsCi0JCQkgICB1OCAqZHN0LCB1MzIgZF9waXRjaCwgdTggKnNyYywgdTMyIHNfcGl0Y2gsCi0JCQkgICB1MzIgaGVpZ2h0KQordm9pZCBmYl9wYWRfYWxpZ25lZF9idWZmZXIodTggKmRzdCwgdTMyIGRfcGl0Y2gsIHU4ICpzcmMsIHUzMiBzX3BpdGNoLCB1MzIgaGVpZ2h0KQogewogCWludCBpOwogCiAJZm9yIChpID0gaGVpZ2h0OyBpLS07ICkgewotCQlidWYtPm91dGJ1ZihpbmZvLCBkc3QsIHNyYywgc19waXRjaCk7CisJCW1lbWNweShkc3QsIHNyYywgc19waXRjaCk7CiAJCXNyYyArPSBzX3BpdGNoOwogCQlkc3QgKz0gZF9waXRjaDsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGZiX3BhZF9hbGlnbmVkX2J1ZmZlcik7CiAKLXZvaWQgZmJfc3lzbW92ZV9idWZfYWxpZ25lZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3BpeG1hcCAqYnVmLAotCQkJICAgIHU4ICpkc3QsIHUzMiBkX3BpdGNoLCB1OCAqc3JjLCB1MzIgc19waXRjaCwKLQkJCSAgICB1MzIgaGVpZ2h0KQotewotCWludCBpLCBqOwotCi0JZm9yIChpID0gaGVpZ2h0OyBpLS07ICkgewotCQlmb3IgKGogPSAwOyBqIDwgc19waXRjaDsgaisrKQotCQkJZHN0W2pdID0gc3JjW2pdOwotCQlzcmMgKz0gc19waXRjaDsKLQkJZHN0ICs9IGRfcGl0Y2g7Ci0JfQotfQotCi12b2lkIGZiX2lvbW92ZV9idWZfdW5hbGlnbmVkKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfcGl4bWFwICpidWYsCi0JCQkgICAgIHU4ICpkc3QsIHUzMiBkX3BpdGNoLCB1OCAqc3JjLCB1MzIgaWR4LAotCQkJICAgICB1MzIgaGVpZ2h0LCB1MzIgc2hpZnRfaGlnaCwgdTMyIHNoaWZ0X2xvdywKLQkJCSAgICAgdTMyIG1vZCkKLXsKLQl1OCBtYXNrID0gKHU4KSAoMHhmZmYgPDwgc2hpZnRfaGlnaCksIHRtcDsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IGhlaWdodDsgaS0tOyApIHsKLQkJZm9yIChqID0gMDsgaiA8IGlkeDsgaisrKSB7Ci0JCQl0bXAgPSBidWYtPmluYnVmKGluZm8sIGRzdCtqKTsKLQkJCXRtcCAmPSBtYXNrOwotCQkJdG1wIHw9ICpzcmMgPj4gc2hpZnRfbG93OwotCQkJYnVmLT5vdXRidWYoaW5mbywgZHN0K2osICZ0bXAsIDEpOwotCQkJdG1wID0gKnNyYyA8PCBzaGlmdF9oaWdoOwotCQkJYnVmLT5vdXRidWYoaW5mbywgZHN0K2orMSwgJnRtcCwgMSk7Ci0JCQlzcmMrKzsKLQkJfQotCQl0bXAgPSBidWYtPmluYnVmKGluZm8sIGRzdCtpZHgpOwotCQl0bXAgJj0gbWFzazsKLQkJdG1wIHw9ICpzcmMgPj4gc2hpZnRfbG93OwotCQlidWYtPm91dGJ1ZihpbmZvLCBkc3QraWR4LCAmdG1wLCAxKTsKLQkJaWYgKHNoaWZ0X2hpZ2ggPCBtb2QpIHsKLQkJCXRtcCA9ICpzcmMgPDwgc2hpZnRfaGlnaDsKLQkJCWJ1Zi0+b3V0YnVmKGluZm8sIGRzdCtpZHgrMSwgJnRtcCwgMSk7Ci0JCX0JCi0JCXNyYysrOwotCQlkc3QgKz0gZF9waXRjaDsKLQl9Ci19Ci0KLXZvaWQgZmJfc3lzbW92ZV9idWZfdW5hbGlnbmVkKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfcGl4bWFwICpidWYsCi0JCQkgICAgICB1OCAqZHN0LCB1MzIgZF9waXRjaCwgdTggKnNyYywgdTMyIGlkeCwKLQkJCSAgICAgIHUzMiBoZWlnaHQsIHUzMiBzaGlmdF9oaWdoLCB1MzIgc2hpZnRfbG93LAotCQkJICAgICAgdTMyIG1vZCkKK3ZvaWQgZmJfcGFkX3VuYWxpZ25lZF9idWZmZXIodTggKmRzdCwgdTMyIGRfcGl0Y2gsIHU4ICpzcmMsIHUzMiBpZHgsIHUzMiBoZWlnaHQsCisJCQkJdTMyIHNoaWZ0X2hpZ2gsIHUzMiBzaGlmdF9sb3csIHUzMiBtb2QpCiB7CiAJdTggbWFzayA9ICh1OCkgKDB4ZmZmIDw8IHNoaWZ0X2hpZ2gpLCB0bXA7CiAJaW50IGksIGo7CkBAIC0xNjYsNiArMTE4LDcgQEAKIAkJZHN0ICs9IGRfcGl0Y2g7CiAJfQogfQorRVhQT1JUX1NZTUJPTChmYl9wYWRfdW5hbGlnbmVkX2J1ZmZlcik7CiAKIC8qCiAgKiB3ZSBuZWVkIHRvIGxvY2sgdGhpcyBzZWN0aW9uIHNpbmNlIGZiX2N1cnNvcgpAQCAtMTA4MSw3ICsxMDM0LDcgQEAKIAkJCWZiX2luZm8tPnBpeG1hcC5zaXplID0gRkJQSVhNQVBTSVpFOwogCQkJZmJfaW5mby0+cGl4bWFwLmJ1Zl9hbGlnbiA9IDE7CiAJCQlmYl9pbmZvLT5waXhtYXAuc2Nhbl9hbGlnbiA9IDE7Ci0JCQlmYl9pbmZvLT5waXhtYXAuYWNjZXNzX2FsaWduID0gNDsKKwkJCWZiX2luZm8tPnBpeG1hcC5hY2Nlc3NfYWxpZ24gPSAzMjsKIAkJCWZiX2luZm8tPnBpeG1hcC5mbGFncyA9IEZCX1BJWE1BUF9ERUZBVUxUOwogCQl9CiAJfQkKQEAgLTEzNTcsMTAgKzEzMTAsNiBAQAogRVhQT1JUX1NZTUJPTChmYl9ibGFuayk7CiBFWFBPUlRfU1lNQk9MKGZiX3Bhbl9kaXNwbGF5KTsKIEVYUE9SVF9TWU1CT0woZmJfZ2V0X2J1ZmZlcl9vZmZzZXQpOwotRVhQT1JUX1NZTUJPTChmYl9pb21vdmVfYnVmX3VuYWxpZ25lZCk7Ci1FWFBPUlRfU1lNQk9MKGZiX2lvbW92ZV9idWZfYWxpZ25lZCk7Ci1FWFBPUlRfU1lNQk9MKGZiX3N5c21vdmVfYnVmX3VuYWxpZ25lZCk7Ci1FWFBPUlRfU1lNQk9MKGZiX3N5c21vdmVfYnVmX2FsaWduZWQpOwogRVhQT1JUX1NZTUJPTChmYl9zZXRfc3VzcGVuZCk7CiBFWFBPUlRfU1lNQk9MKGZiX3JlZ2lzdGVyX2NsaWVudCk7CiBFWFBPUlRfU1lNQk9MKGZiX3VucmVnaXN0ZXJfY2xpZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYwppbmRleCBhOWE2MThmLi43NTEzZmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCkBAIC0xODg1LDYgKzE4ODUsNyBAQAogCW1lbXNldChpbmZvLT5waXhtYXAuYWRkciwgMCwgOCoxMDI0KTsKIAlpbmZvLT5waXhtYXAuc2l6ZSA9IDgqMTAyNDsKIAlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gODsKKwlpbmZvLT5waXhtYXAuYWNjZXNzX2FsaWduID0gMzI7CiAJaW5mby0+cGl4bWFwLmZsYWdzID0gRkJfUElYTUFQX1NZU1RFTTsKIAogCWlmICgoZXJyID0gaTgxMF9hbGxvY2F0ZV9wY2lfcmVzb3VyY2UocGFyLCBlbnRyeSkpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwppbmRleCAyNWY5YTlhLi4yOThiYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiAvKiBQQ0kgZHJpdmVyIG1vZHVsZSB0YWJsZSAqLwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGludGVsZmJfZHJpdmVyID0gewotCS5uYW1lID0JCSJJbnRlbChSKSAiIFNVUFBPUlRFRF9DSElQU0VUUyAiIEZyYW1lYnVmZmVyIERyaXZlciIsCisJLm5hbWUgPQkJImludGVsZmIiLAogCS5pZF90YWJsZSA9CWludGVsZmJfcGNpX3RhYmxlLAogCS5wcm9iZSA9CWludGVsZmJfcGNpX3JlZ2lzdGVyLAogCS5yZW1vdmUgPQlfX2RldmV4aXRfcChpbnRlbGZiX3BjaV91bnJlZ2lzdGVyKQpAQCAtMjM4LDEyICsyMzgsMTUgQEAKIHN0YXRpYyBpbnQgcHJvYmVvbmx5ICAgID0gMDsKIHN0YXRpYyBpbnQgaWRvbmx5ICAgICAgID0gMDsKIHN0YXRpYyBpbnQgYmFpbGVhcmx5ICAgID0gMDsKK3N0YXRpYyBpbnQgdm9mZnNldAk9IDQ4Owogc3RhdGljIGNoYXIgKm1vZGUgICAgICAgPSBOVUxMOwogCiBtb2R1bGVfcGFyYW0oYWNjZWwsIGJvb2wsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhhY2NlbCwgIkVuYWJsZSBjb25zb2xlIGFjY2VsZXJhdGlvbiIpOwogbW9kdWxlX3BhcmFtKHZyYW0sIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHZyYW0sICJTeXN0ZW0gUkFNIHRvIGFsbG9jYXRlIHRvIGZyYW1lYnVmZmVyIGluIE1pQiIpOworbW9kdWxlX3BhcmFtKHZvZmZzZXQsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHZvZmZzZXQsICJPZmZzZXQgb2YgZnJhbWVidWZmZXIgaW4gTWlCIik7CiBtb2R1bGVfcGFyYW0oaHdjdXJzb3IsIGJvb2wsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhod2N1cnNvciwgIkVuYWJsZSBIVyBjdXJzb3IiKTsKIG1vZHVsZV9wYXJhbShtdHJyLCBib29sLCBTX0lSVUdPKTsKQEAgLTUwMyw2ICs1MDYsNyBAQAogCXN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZTsKICAJaW50IGFwZXJ0dXJlX2JhciA9IDA7CiAgCWludCBtbWlvX2JhciA9IDE7CisJaW50IG9mZnNldDsKIAogCURCR19NU0coImludGVsZmJfcGNpX3JlZ2lzdGVyXG4iKTsKIApAQCAtNjU5LDE3ICs2NjMsMjEgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaWYgKE1CKHZvZmZzZXQpIDwgc3RvbGVuX3NpemUpCisJCW9mZnNldCA9IChzdG9sZW5fc2l6ZSA+PiAxMik7CisJZWxzZQorCQlvZmZzZXQgPSBST1VORF9VUF9UT19QQUdFKE1CKHZvZmZzZXQpKS9HVFRfUEFHRV9TSVpFOworCiAJLyogc2V0IHRoZSBtZW0gb2Zmc2V0cyAtIHNldCB0aGVtIGFmdGVyIHRoZSBhbHJlYWR5IHVzZWQgcGFnZXMgKi8KIAlpZiAoZGluZm8tPmFjY2VsKSB7Ci0JCWRpbmZvLT5yaW5nLm9mZnNldCA9IChzdG9sZW5fc2l6ZSA+PiAxMikKLQkJCSsgZ3R0X2luZm8uY3VycmVudF9tZW1vcnk7CisJCWRpbmZvLT5yaW5nLm9mZnNldCA9IG9mZnNldCArIGd0dF9pbmZvLmN1cnJlbnRfbWVtb3J5OwogCX0KIAlpZiAoZGluZm8tPmh3Y3Vyc29yKSB7Ci0JCWRpbmZvLT5jdXJzb3Iub2Zmc2V0ID0gKHN0b2xlbl9zaXplID4+IDEyKSArCisJCWRpbmZvLT5jdXJzb3Iub2Zmc2V0ID0gb2Zmc2V0ICsKIAkJCSsgZ3R0X2luZm8uY3VycmVudF9tZW1vcnkgKyAoZGluZm8tPnJpbmcuc2l6ZSA+PiAxMik7CiAJfQogCWlmIChkaW5mby0+ZmJtZW1fZ2FydCkgewotCQlkaW5mby0+ZmIub2Zmc2V0ID0gKHN0b2xlbl9zaXplID4+IDEyKSArCisJCWRpbmZvLT5mYi5vZmZzZXQgPSBvZmZzZXQgKwogCQkJKyBndHRfaW5mby5jdXJyZW50X21lbW9yeSArIChkaW5mby0+cmluZy5zaXplID4+IDEyKQogCQkJKyAoZGluZm8tPmN1cnNvci5zaXplID4+IDEyKTsKIAl9CkBAIC0xMDgzLDYgKzEwOTEsNyBAQAogCiAJaW5mby0+cGl4bWFwLnNpemUgPSA2NCoxMDI0OwogCWluZm8tPnBpeG1hcC5idWZfYWxpZ24gPSA4OworCWluZm8tPnBpeG1hcC5hY2Nlc3NfYWxpZ24gPSAzMjsKIAlpbmZvLT5waXhtYXAuZmxhZ3MgPSBGQl9QSVhNQVBfU1lTVEVNOwogCiAJaWYgKGludGVsZmJfaW5pdF92YXIoZGluZm8pKQpAQCAtMTI5Myw3ICsxMzAyLDcgQEAKIAogCWludGVsZmJfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOLCBpbmZvKTsKIAotCWlmIChkaW5mby0+YWNjZWwpCisJaWYgKEFDQ0VMKGRpbmZvLCBpbmZvKSkKIAkJaW50ZWxmYmh3XzJkX3N0b3AoZGluZm8pOwogCiAgCW1lbWNweShodywgJmRpbmZvLT5zYXZlX3N0YXRlLCBzaXplb2YoKmh3KSk7CkBAIC0xMzA5LDcgKzEzMTgsNyBAQAogCiAJdXBkYXRlX2RpbmZvKGRpbmZvLCAmaW5mby0+dmFyKTsKIAotCWlmIChkaW5mby0+YWNjZWwpCisJaWYgKEFDQ0VMKGRpbmZvLCBpbmZvKSkKIAkJaW50ZWxmYmh3XzJkX3N0YXJ0KGRpbmZvKTsKIAogCWludGVsZmJfcGFuX2Rpc3BsYXkoJmluZm8tPnZhciwgaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCmluZGV4IDQ3NzMzZjUuLmIyZTZiMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCkBAIC01MTYsOSArNTE2LDkgQEAKIHN0YXRpYyB2b2lkIG52aWRpYWZiX2xvYWRfY3Vyc29yX2ltYWdlKHN0cnVjdCBudmlkaWFfcGFyICpwYXIsIHU4ICogZGF0YTgsCiAJCQkJICAgICAgIHUxNiBiZywgdTE2IGZnLCB1MzIgdywgdTMyIGgpCiB7CisJdTMyICpkYXRhID0gKHUzMiAqKSBkYXRhODsKIAlpbnQgaSwgaiwgayA9IDA7CiAJdTMyIGIsIHRtcDsKLQl1MzIgKmRhdGEgPSAodTMyICopIGRhdGE4OwogCiAJdyA9ICh3ICsgMSkgJiB+MTsKIApAQCAtODkwLDExICs4OTAsMTEgQEAKIHsKIAlzdHJ1Y3QgbnZpZGlhX3BhciAqcGFyID0gaW5mby0+cGFyOwogCXU4IGRhdGFbTUFYX0NVUlMgKiBNQVhfQ1VSUyAvIDhdOwotCXUxNiBmZywgYmc7CiAJaW50IGksIHNldCA9IGN1cnNvci0+c2V0OworCXUxNiBmZywgYmc7CiAKIAlpZiAoY3Vyc29yLT5pbWFnZS53aWR0aCA+IE1BWF9DVVJTIHx8IGN1cnNvci0+aW1hZ2UuaGVpZ2h0ID4gTUFYX0NVUlMpCi0JCXJldHVybiBzb2Z0X2N1cnNvcihpbmZvLCBjdXJzb3IpOworCQlyZXR1cm4gLUVOWElPOwogCiAJTlZTaG93SGlkZUN1cnNvcihwYXIsIDApOwogCkBAIC05MzEsMjEgKzkzMSwxOCBAQAogCQlpZiAoc3JjKSB7CiAJCQlzd2l0Y2ggKGN1cnNvci0+cm9wKSB7CiAJCQljYXNlIFJPUF9YT1I6Ci0JCQkJZm9yIChpID0gMDsgaSA8IHNfcGl0Y2ggKiBjdXJzb3ItPmltYWdlLmhlaWdodDsKLQkJCQkgICAgIGkrKykKKwkJCQlmb3IgKGkgPSAwOyBpIDwgc19waXRjaCAqIGN1cnNvci0+aW1hZ2UuaGVpZ2h0OyBpKyspCiAJCQkJCXNyY1tpXSA9IGRhdFtpXSBeIG1za1tpXTsKIAkJCQlicmVhazsKIAkJCWNhc2UgUk9QX0NPUFk6CiAJCQlkZWZhdWx0OgotCQkJCWZvciAoaSA9IDA7IGkgPCBzX3BpdGNoICogY3Vyc29yLT5pbWFnZS5oZWlnaHQ7Ci0JCQkJICAgICBpKyspCisJCQkJZm9yIChpID0gMDsgaSA8IHNfcGl0Y2ggKiBjdXJzb3ItPmltYWdlLmhlaWdodDsgaSsrKQogCQkJCQlzcmNbaV0gPSBkYXRbaV0gJiBtc2tbaV07CiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWZiX3N5c21vdmVfYnVmX2FsaWduZWQoaW5mbywgJmluZm8tPnBpeG1hcCwgZGF0YSwKLQkJCQkJICAgICAgIGRfcGl0Y2gsIHNyYywgc19waXRjaCwKLQkJCQkJICAgICAgIGN1cnNvci0+aW1hZ2UuaGVpZ2h0KTsKKwkJCWZiX3BhZF9hbGlnbmVkX2J1ZmZlcihkYXRhLCBkX3BpdGNoLCBzcmMsIHNfcGl0Y2gsCisJCQkJCQljdXJzb3ItPmltYWdlLmhlaWdodCk7CiAKIAkJCWJnID0gKChpbmZvLT5jbWFwLnJlZFtiZ19pZHhdICYgMHhmOCkgPDwgNykgfAogCQkJICAgICgoaW5mby0+Y21hcC5ncmVlbltiZ19pZHhdICYgMHhmOCkgPDwgMikgfApAQCAtMTM0OCw2ICsxMzQ1LDcgQEAKIAogCWluZm8tPnBpeG1hcC5zY2FuX2FsaWduID0gNDsKIAlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gNDsKKwlpbmZvLT5waXhtYXAuYWNjZXNzX2FsaWduID0gMzI7CiAJaW5mby0+cGl4bWFwLnNpemUgPSA4ICogMTAyNDsKIAlpbmZvLT5waXhtYXAuZmxhZ3MgPSBGQl9QSVhNQVBfU1lTVEVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BtM2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtM2ZiLmMKaW5kZXggOGUwMjRhYS4uZTBkYWQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbTNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG0zZmIuYwpAQCAtNSw3ICs1LDcgQEAKICAqICBCYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnk6CiAgKiAgICAgICAgICAgU3ZlbiBMdXRoZXIsIDxsdXRoZXJAZHB0LWluZm8udS1zdHJhc2JnLmZyPgogICogICAgICAgICAgIEFsYW4gSG91cmloYW5lLCA8YWxhbmhAZmFpcmxpdGUuZGVtb24uY28udWs+Ci0gKiAgICAgICAgICAgUnVzc2VsIEtpbmcsIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KKyAqICAgICAgICAgICBSdXNzZWxsIEtpbmcsIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KICAqICBCYXNlZCBvbiBsaW51eC9kcml2ZXJzL3ZpZGVvL3NrZWxldG9uZmIuYzoKICAqCUNvcHlyaWdodCAoQykgMTk5NyBHZWVydCBVeXR0ZXJob2V2ZW4KICAqICBCYXNlZCBvbiBsaW51eC9kcml2ZXIvdmlkZW8vcG0yZmIuYzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jIGIvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKaW5kZXggYjBjODg2ZC4uNmE5ZTE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKKysrIGIvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKQEAgLTE1ODIsMTIgKzE1ODIsMTEgQEAKIHsKIAlzdHJ1Y3Qgcml2YV9wYXIgKnBhciA9IChzdHJ1Y3Qgcml2YV9wYXIgKikgaW5mby0+cGFyOwogCXU4IGRhdGFbTUFYX0NVUlMgKiBNQVhfQ1VSUy84XTsKLQl1MTYgZmcsIGJnOwogCWludCBpLCBzZXQgPSBjdXJzb3ItPnNldDsKKwl1MTYgZmcsIGJnOwogCi0JaWYgKGN1cnNvci0+aW1hZ2Uud2lkdGggPiBNQVhfQ1VSUyB8fAotCSAgICBjdXJzb3ItPmltYWdlLmhlaWdodCA+IE1BWF9DVVJTKQotCQlyZXR1cm4gc29mdF9jdXJzb3IoaW5mbywgY3Vyc29yKTsKKwlpZiAoY3Vyc29yLT5pbWFnZS53aWR0aCA+IE1BWF9DVVJTIHx8IGN1cnNvci0+aW1hZ2UuaGVpZ2h0ID4gTUFYX0NVUlMpCisJCXJldHVybiAtRU5YSU87CiAKIAlwYXItPnJpdmEuU2hvd0hpZGVDdXJzb3IoJnBhci0+cml2YSwgMCk7CiAKQEAgLTE2MjUsMjEgKzE2MjQsMTggQEAKIAkJaWYgKHNyYykgewogCQkJc3dpdGNoIChjdXJzb3ItPnJvcCkgewogCQkJY2FzZSBST1BfWE9SOgotCQkJCWZvciAoaSA9IDA7IGkgPCBzX3BpdGNoICogY3Vyc29yLT5pbWFnZS5oZWlnaHQ7Ci0JCQkJICAgICBpKyspCisJCQkJZm9yIChpID0gMDsgaSA8IHNfcGl0Y2ggKiBjdXJzb3ItPmltYWdlLmhlaWdodDsgaSsrKQogCQkJCQlzcmNbaV0gPSBkYXRbaV0gXiBtc2tbaV07CiAJCQkJYnJlYWs7CiAJCQljYXNlIFJPUF9DT1BZOgogCQkJZGVmYXVsdDoKLQkJCQlmb3IgKGkgPSAwOyBpIDwgc19waXRjaCAqIGN1cnNvci0+aW1hZ2UuaGVpZ2h0OwotCQkJCSAgICAgaSsrKQorCQkJCWZvciAoaSA9IDA7IGkgPCBzX3BpdGNoICogY3Vyc29yLT5pbWFnZS5oZWlnaHQ7IGkrKykKIAkJCQkJc3JjW2ldID0gZGF0W2ldICYgbXNrW2ldOwogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlmYl9zeXNtb3ZlX2J1Zl9hbGlnbmVkKGluZm8sICZpbmZvLT5waXhtYXAsIGRhdGEsCi0JCQkJCSAgICAgICBkX3BpdGNoLCBzcmMsIHNfcGl0Y2gsCi0JCQkJCSAgICAgICBjdXJzb3ItPmltYWdlLmhlaWdodCk7CisJCQlmYl9wYWRfYWxpZ25lZF9idWZmZXIoZGF0YSwgZF9waXRjaCwgc3JjLCBzX3BpdGNoLAorCQkJCQkJY3Vyc29yLT5pbWFnZS5oZWlnaHQpOwogCiAJCQliZyA9ICgoaW5mby0+Y21hcC5yZWRbYmdfaWR4XSAmIDB4ZjgpIDw8IDcpIHwKIAkJCQkoKGluZm8tPmNtYXAuZ3JlZW5bYmdfaWR4XSAmIDB4ZjgpIDw8IDIpIHwKQEAgLTE3MjcsNiArMTcyMyw3IEBACiAKIAlpbmZvLT5waXhtYXAuc2l6ZSA9IDggKiAxMDI0OwogCWluZm8tPnBpeG1hcC5idWZfYWxpZ24gPSA0OworCWluZm8tPnBpeG1hcC5hY2Nlc3NfYWxpZ24gPSAzMjsKIAlpbmZvLT5waXhtYXAuZmxhZ3MgPSBGQl9QSVhNQVBfU1lTVEVNOwogCWluZm8tPnZhci55cmVzX3ZpcnR1YWwgPSAtMTsKIAlOVlRSQUNFX0xFQVZFKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCmluZGV4IGI2MzdjMzguLjc4OWRlMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCkBAIC00OTMsNyArNDkzLDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdAorc3RhdGljIGludAogczFkMTN4eHhmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IDAzZDc0ZTguLjhmYWRjZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0xODk3LDcgKzE4OTcsNyBAQAogCQlpbmZvLT5waXhtYXAuc2l6ZSA9IDgqMTAyNDsKIAkJaW5mby0+cGl4bWFwLnNjYW5fYWxpZ24gPSA0OwogCQlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gNDsKLQkJaW5mby0+cGl4bWFwLmFjY2Vzc19hbGlnbiA9IDQ7CisJCWluZm8tPnBpeG1hcC5hY2Nlc3NfYWxpZ24gPSAzMjsKIAogCQlmYl9hbGxvY19jbWFwICgmaW5mby0+Y21hcCwgTlJfUEFMRVRURSwgMCk7CiAJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc29mdGN1cnNvci5jIGIvZHJpdmVycy92aWRlby9zb2Z0Y3Vyc29yLmMKaW5kZXggMTNhNDUxMS4uMjI5YzRiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zb2Z0Y3Vyc29yLmMKKysrIGIvZHJpdmVycy92aWRlby9zb2Z0Y3Vyc29yLmMKQEAgLTU4LDE3ICs1OCwxMCBAQAogCX0gZWxzZSAKIAkJbWVtY3B5KHNyYywgaW1hZ2UtPmRhdGEsIGRzaXplKTsKIAkKLQlpZiAoaW5mby0+cGl4bWFwLm91dGJ1ZikKLQkJZmJfaW9tb3ZlX2J1Zl9hbGlnbmVkKGluZm8sICZpbmZvLT5waXhtYXAsIGRzdCwgZF9waXRjaCwgc3JjLAotCQkJCSAgc19waXRjaCwgaW1hZ2UtPmhlaWdodCk7Ci0JZWxzZQotCQlmYl9zeXNtb3ZlX2J1Zl9hbGlnbmVkKGluZm8sICZpbmZvLT5waXhtYXAsIGRzdCwgZF9waXRjaCwgc3JjLAotCQkJCSAgIHNfcGl0Y2gsIGltYWdlLT5oZWlnaHQpOwotCisJZmJfcGFkX2FsaWduZWRfYnVmZmVyKGRzdCwgZF9waXRjaCwgc3JjLCBzX3BpdGNoLCBpbWFnZS0+aGVpZ2h0KTsKIAlpbWFnZS0+ZGF0YSA9IGRzdDsKIAlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKIAlrZnJlZShzcmMpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCmluZGV4IDMwMjc4NDEuLmYzMDY5YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby92ZXNhZmIuYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbih2ZXNhZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwsICJ2ZXNhZmIiKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAidmVzYWZiOiBhYm9ydCwgY2Fubm90IHJlc2VydmUgdmlkZW8gbWVtb3J5IGF0IDB4JWx4XG4iLAorCQkgICAgICAgInZlc2FmYjogY2Fubm90IHJlc2VydmUgdmlkZW8gbWVtb3J5IGF0IDB4JWx4XG4iLAogCQkJdmVzYWZiX2ZpeC5zbWVtX3N0YXJ0KTsKIAkJLyogV2UgY2Fubm90IG1ha2UgdGhpcyBmYXRhbC4gU29tZXRpbWVzIHRoaXMgY29tZXMgZnJvbSBtYWdpYwogCQkgICBzcGFjZXMgb3VyIHJlc291cmNlIGhhbmRsZXJzIHNpbXBseSBkb24ndCBrbm93IGFib3V0ICovCkBAIC0yNzksMTMgKzI3OSwxMyBAQAogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZih1MzIpICogMjU2LCAmZGV2LT5kZXYpOwogCWlmICghaW5mbykgewotCQlyZWxlYXNlX21lbV9yZWdpb24odmVzYWZiX2ZpeC5zbWVtX3N0YXJ0LCB2ZXNhZmJfZml4LnNtZW1fbGVuKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHZlc2FmYl9maXguc21lbV9zdGFydCwgc2l6ZV90b3RhbCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGluZm8tPnBhcjsKIAlpbmZvLT5wYXIgPSBOVUxMOwogCi0gICAgICAgIGluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcCh2ZXNhZmJfZml4LnNtZW1fc3RhcnQsIHZlc2FmYl9maXguc21lbV9sZW4pOworCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcCh2ZXNhZmJfZml4LnNtZW1fc3RhcnQsIHZlc2FmYl9maXguc21lbV9sZW4pOwogCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAidmVzYWZiOiBhYm9ydCwgY2Fubm90IGlvcmVtYXAgdmlkZW8gbWVtb3J5IDB4JXggQCAweCVseFxuIiwKQEAgLTM4Niw3ICszODYsNyBAQAogCXJlcXVlc3RfcmVnaW9uKDB4M2MwLCAzMiwgInZlc2FmYiIpOwogCiAJaWYgKG10cnIpIHsKLQkJaW50IHRlbXBfc2l6ZSA9IHNpemVfdG90YWw7CisJCXVuc2lnbmVkIGludCB0ZW1wX3NpemUgPSBzaXplX3RvdGFsOwogCQkvKiBGaW5kIHRoZSBsYXJnZXN0IHBvd2VyLW9mLXR3byAqLwogCQl3aGlsZSAodGVtcF9zaXplICYgKHRlbXBfc2l6ZSAtIDEpKQogICAgICAgICAgICAgICAgIAl0ZW1wX3NpemUgJj0gKHRlbXBfc2l6ZSAtIDEpOwpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggNmE0YWQ0Yi4uMTc4ZTI3NCAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC03NDEsNTYgKzc0MSw2IEBACiAKIAlEZXNpZ25lcnMgb2YgZW1iZWRkZWQgc3lzdGVtcyBtYXkgd2lzaCB0byBzYXkgTiBoZXJlIHRvIGNvbnNlcnZlIHNwYWNlLgogCi1jb25maWcgREVWRlNfRlMKLQlib29sICIvZGV2IGZpbGUgc3lzdGVtIHN1cHBvcnQgKE9CU09MRVRFKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIFRoaXMgaXMgc3VwcG9ydCBmb3IgZGV2ZnMsIGEgdmlydHVhbCBmaWxlIHN5c3RlbSAobGlrZSAvcHJvYykgd2hpY2gKLQkgIHByb3ZpZGVzIHRoZSBmaWxlIHN5c3RlbSBpbnRlcmZhY2UgdG8gZGV2aWNlIGRyaXZlcnMsIG5vcm1hbGx5IGZvdW5kCi0JICBpbiAvZGV2LiBEZXZmcyBkb2VzIG5vdCBkZXBlbmQgb24gbWFqb3IgYW5kIG1pbm9yIG51bWJlcgotCSAgYWxsb2NhdGlvbnMuIERldmljZSBkcml2ZXJzIHJlZ2lzdGVyIGVudHJpZXMgaW4gL2RldiB3aGljaCB0aGVuCi0JICBhcHBlYXIgYXV0b21hdGljYWxseSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgZG9lcwotCSAgbm90IGhhdmUgdG8gY3JlYXRlIGNoYXJhY3RlciBhbmQgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgaW4gdGhlCi0JICAvZGV2IGRpcmVjdG9yeSB1c2luZyB0aGUgbWtub2QgY29tbWFuZCAob3IgTUFLRURFViBzY3JpcHQpIGFueW1vcmUuCi0KLQkgIFRoaXMgaXMgd29yayBpbiBwcm9ncmVzcy4gSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMsIHlvdSAqbXVzdCogcmVhZAotCSAgdGhlIG1hdGVyaWFsIGluIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvPiwgZXNwZWNpYWxseQotCSAgdGhlIGZpbGUgUkVBRE1FIHRoZXJlLgotCi0JICBOb3RlIHRoYXQgZGV2ZnMgbm8gbG9uZ2VyIG1hbmFnZXMgL2Rldi9wdHMhICBJZiB5b3UgYXJlIHVzaW5nIFVOSVg5OAotCSAgcHR5cywgeW91IHdpbGwgYWxzbyBuZWVkIHRvIG1vdW50IHRoZSAvZGV2L3B0cyBmaWxlc3lzdGVtIChkZXZwdHMpLgotCi0JICBOb3RlIHRoYXQgZGV2ZnMgaGFzIGJlZW4gb2Jzb2xldGVkIGJ5IHVkZXYsCi0JICA8aHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy8+LgotCSAgSXQgaGFzIGJlZW4gc3RyaXBwZWQgZG93biB0byBhIGJhcmUgbWluaW11bSBhbmQgaXMgb25seSBwcm92aWRlZCBmb3IKLQkgIGxlZ2FjeSBpbnN0YWxsYXRpb25zIHRoYXQgdXNlIGl0cyBuYW1pbmcgc2NoZW1lIHdoaWNoIGlzCi0JICB1bmZvcnR1bmF0ZWx5IGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lcyBub3JtYWwgTGludXggaW5zdGFsbGF0aW9ucwotCSAgdXNlLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgREVWRlNfTU9VTlQKLQlib29sICJBdXRvbWF0aWNhbGx5IG1vdW50IGF0IGJvb3QiCi0JZGVwZW5kcyBvbiBERVZGU19GUwotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFwcGVhcnMgaWYgeW91IGhhdmUgQ09ORklHX0RFVkZTX0ZTIGVuYWJsZWQuIFNldHRpbmcKLQkgIHRoaXMgdG8gJ1knIHdpbGwgbWFrZSB0aGUga2VybmVsIGF1dG9tYXRpY2FsbHkgbW91bnQgZGV2ZnMgb250byAvZGV2Ci0JICB3aGVuIHRoZSBzeXN0ZW0gaXMgYm9vdGVkLCBiZWZvcmUgdGhlIGluaXQgdGhyZWFkIGlzIHN0YXJ0ZWQuCi0JICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgd2l0aCB0aGUgImRldmZzPW5vbW91bnQiIGJvb3Qgb3B0aW9uLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgREVWRlNfREVCVUcKLQlib29sICJEZWJ1ZyBkZXZmcyIKLQlkZXBlbmRzIG9uIERFVkZTX0ZTCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIC9kZXYgZmlsZSBzeXN0ZW0gY29kZSB3aWxsIGdlbmVyYXRlCi0JICBkZWJ1Z2dpbmcgbWVzc2FnZXMuIFNlZSB0aGUgZmlsZQotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9ib290LW9wdGlvbnM+IGZvciBtb3JlCi0JICBkZXRhaWxzLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgREVWUFRTX0ZTX1hBVFRSCiAJYm9vbCAiL2Rldi9wdHMgRXh0ZW5kZWQgQXR0cmlidXRlcyIKIAlkZXBlbmRzIG9uIFVOSVg5OF9QVFlTCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2F1dG9mc19pLmggYi9mcy9hdXRvZnM0L2F1dG9mc19pLmgKaW5kZXggYzdiMmI4OC4uOWMwOTY0MSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCisrKyBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaApAQCAtMTg1LDYgKzE4NSwxOSBAQAogaW50IGF1dG9mczRfd2FpdF9yZWxlYXNlKHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqLGF1dG9mc193cXRfdCxpbnQpOwogdm9pZCBhdXRvZnM0X2NhdGF0b25pY19tb2RlKHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqKTsKIAorc3RhdGljIGlubGluZSBpbnQgYXV0b2ZzNF9mb2xsb3dfbW91bnQoc3RydWN0IHZmc21vdW50ICoqbW50LCBzdHJ1Y3QgZGVudHJ5ICoqZGVudHJ5KQoreworCWludCByZXMgPSAwOworCisJd2hpbGUgKGRfbW91bnRwb2ludCgqZGVudHJ5KSkgeworCQlpbnQgZm9sbG93ZWQgPSBmb2xsb3dfZG93bihtbnQsIGRlbnRyeSk7CisJCWlmICghZm9sbG93ZWQpCisJCQlicmVhazsKKwkJcmVzID0gMTsKKwl9CisJcmV0dXJuIHJlczsKK30KKwogc3RhdGljIGlubGluZSBpbnQgc2ltcGxlX3Bvc2l0aXZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlyZXR1cm4gZGVudHJ5LT5kX2lub2RlICYmICFkX3VuaGFzaGVkKGRlbnRyeSk7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2V4cGlyZS5jIGIvZnMvYXV0b2ZzNC9leHBpcmUuYwppbmRleCA1MDA0MjVlLi5mZWI2YWM0IDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2V4cGlyZS5jCisrKyBiL2ZzL2F1dG9mczQvZXhwaXJlLmMKQEAgLTU2LDEyICs1Niw5IEBACiAJbW50Z2V0KG1udCk7CiAJZGdldChkZW50cnkpOwogCi0JaWYgKCFmb2xsb3dfZG93bigmbW50LCAmZGVudHJ5KSkKKwlpZiAoIWF1dG9mczRfZm9sbG93X21vdW50KCZtbnQsICZkZW50cnkpKQogCQlnb3RvIGRvbmU7CiAKLQl3aGlsZSAoZF9tb3VudHBvaW50KGRlbnRyeSkgJiYgZm9sbG93X2Rvd24oJm1udCwgJmRlbnRyeSkpCi0JCTsKLQogCS8qIFRoaXMgaXMgYW4gYXV0b2ZzIHN1Ym1vdW50LCB3ZSBjYW4ndCBleHBpcmUgaXQgKi8KIAlpZiAoaXNfYXV0b2ZzNF9kZW50cnkoZGVudHJ5KSkKIAkJZ290byBkb25lOwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9yb290LmMgYi9mcy9hdXRvZnM0L3Jvb3QuYwppbmRleCAzNzY1YzA0Li4yYTc3MWVjIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3Jvb3QuYworKysgYi9mcy9hdXRvZnM0L3Jvb3QuYwpAQCAtMjA1LDcgKzIwNSwxMSBAQAogCQlzdHJ1Y3QgdmZzbW91bnQgKmZwX21udCA9IG1udGdldChtbnQpOwogCQlzdHJ1Y3QgZGVudHJ5ICpmcF9kZW50cnkgPSBkZ2V0KGRlbnRyeSk7CiAKLQkJd2hpbGUgKGZvbGxvd19kb3duKCZmcF9tbnQsICZmcF9kZW50cnkpICYmIGRfbW91bnRwb2ludChmcF9kZW50cnkpKTsKKwkJaWYgKCFhdXRvZnM0X2ZvbGxvd19tb3VudCgmZnBfbW50LCAmZnBfZGVudHJ5KSkgeworCQkJZHB1dChmcF9kZW50cnkpOworCQkJbW50cHV0KGZwX21udCk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQogCiAJCWZwID0gZGVudHJ5X29wZW4oZnBfZGVudHJ5LCBmcF9tbnQsIGZpbGUtPmZfZmxhZ3MpOwogCQlzdGF0dXMgPSBQVFJfRVJSKGZwKTsKQEAgLTMwMiw3ICszMDYsMTQgQEAKIAkJCiAJCURQUklOVEsoImV4cGlyZSBkb25lIHN0YXR1cz0lZCIsIHN0YXR1cyk7CiAJCQotCQlyZXR1cm4gMDsKKwkJLyoKKwkJICogSWYgdGhlIGRpcmVjdG9yeSBzdGlsbCBleGlzdHMgdGhlIG1vdW50IHJlcXVlc3QgbXVzdAorCQkgKiBjb250aW51ZSBvdGhlcndpc2UgaXQgY2FuJ3QgYmUgZm9sbG93ZWQgYXQgdGhlIHJpZ2h0CisJCSAqIHRpbWUgZHVyaW5nIHRoZSB3YWxrLgorCQkgKi8KKwkJc3RhdHVzID0gZF9pbnZhbGlkYXRlKGRlbnRyeSk7CisJCWlmIChzdGF0dXMgIT0gLUVCVVNZKQorCQkJcmV0dXJuIDA7CiAJfQogCiAJRFBSSU5USygiZGVudHJ5PSVwICUuKnMgaW5vPSVwIiwKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvd2FpdHEuYyBiL2ZzL2F1dG9mczQvd2FpdHEuYwppbmRleCA1YTQwZDM2Li5mYTIzNDhkIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3dhaXRxLmMKKysrIGIvZnMvYXV0b2ZzNC93YWl0cS5jCkBAIC0xOTEsNiArMTkxLDEzIEBACiAJfQogCiAJaWYgKCAhd3EgKSB7CisJCS8qIENhbid0IHdhaXQgZm9yIGFuIGV4cGlyZSBpZiB0aGVyZSdzIG5vIG1vdW50ICovCisJCWlmIChub3RpZnkgPT0gTkZZX05PTkUgJiYgIWRfbW91bnRwb2ludChkZW50cnkpKSB7CisJCQlrZnJlZShuYW1lKTsKKwkJCXVwKCZzYmktPndxX3NlbSk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCiAJCS8qIENyZWF0ZSBhIG5ldyB3YWl0IHF1ZXVlICovCiAJCXdxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlKSxHRlBfS0VSTkVMKTsKIAkJaWYgKCAhd3EgKSB7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfYW91dC5jIGIvZnMvYmluZm10X2FvdXQuYwppbmRleCAwMDliODkyLi5kZDliYWFiIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfYW91dC5jCisrKyBiL2ZzL2JpbmZtdF9hb3V0LmMKQEAgLTMxNiw2ICszMTYsNyBAQAogCWN1cnJlbnQtPm1tLT5icmsgPSBleC5hX2JzcyArCiAJCShjdXJyZW50LT5tbS0+c3RhcnRfYnJrID0gTl9CU1NBRERSKGV4KSk7CiAJY3VycmVudC0+bW0tPmZyZWVfYXJlYV9jYWNoZSA9IGN1cnJlbnQtPm1tLT5tbWFwX2Jhc2U7CisJY3VycmVudC0+bW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOwogCiAJc2V0X21tX2NvdW50ZXIoY3VycmVudC0+bW0sIHJzcywgMCk7CiAJY3VycmVudC0+bW0tPm1tYXAgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZi5jIGIvZnMvYmluZm10X2VsZi5jCmluZGV4IGY4ZjZiNmIuLjc5NzZhMjMgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGYuYworKysgYi9mcy9iaW5mbXRfZWxmLmMKQEAgLTc3NSw2ICs3NzUsNyBAQAogCSAgIGNoYW5nZSBzb21lIG9mIHRoZXNlIGxhdGVyICovCiAJc2V0X21tX2NvdW50ZXIoY3VycmVudC0+bW0sIHJzcywgMCk7CiAJY3VycmVudC0+bW0tPmZyZWVfYXJlYV9jYWNoZSA9IGN1cnJlbnQtPm1tLT5tbWFwX2Jhc2U7CisJY3VycmVudC0+bW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOwogCXJldHZhbCA9IHNldHVwX2FyZ19wYWdlcyhicHJtLCByYW5kb21pemVfc3RhY2tfdG9wKFNUQUNLX1RPUCksCiAJCQkJIGV4ZWN1dGFibGVfc3RhY2spOwogCWlmIChyZXR2YWwgPCAwKSB7CmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IDdlOWU0MDkuLjBiZWZhNzIgMTAwNjQ0Ci0tLSBhL2ZzL2J1ZmZlci5jCisrKyBiL2ZzL2J1ZmZlci5jCkBAIC01MjgsNyArNTI4LDcgQEAKIAlmb3JfZWFjaF9wZ2RhdChwZ2RhdCkgewogCQl6b25lcyA9IHBnZGF0LT5ub2RlX3pvbmVsaXN0c1tHRlBfTk9GUyZHRlBfWk9ORU1BU0tdLnpvbmVzOwogCQlpZiAoKnpvbmVzKQotCQkJdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZXMsIEdGUF9OT0ZTLCAwKTsKKwkJCXRyeV90b19mcmVlX3BhZ2VzKHpvbmVzLCBHRlBfTk9GUyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IDJhZjMzMzguLjNhOWI2ZDEgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC0xMjIsNiArMTIyLDkgQEAKIAogCXN0YXJ0X2FkZHIgPSBtbS0+ZnJlZV9hcmVhX2NhY2hlOwogCisJaWYgKGxlbiA8PSBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSkKKwkJc3RhcnRfYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwogZnVsbF9zZWFyY2g6CiAJYWRkciA9IEFMSUdOKHN0YXJ0X2FkZHIsIEhQQUdFX1NJWkUpOwogCmRpZmYgLS1naXQgYS9mcy9pc29mcy9kaXIuYyBiL2ZzL2lzb2ZzL2Rpci5jCmluZGV4IDYwMzA5NTYuLjc5MDFhYzkgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2Rpci5jCisrKyBiL2ZzL2lzb2ZzL2Rpci5jCkBAIC0xOTMsMTIgKzE5MywxNyBAQAogCiAJCS8qIEhhbmRsZSBldmVyeXRoaW5nIGVsc2UuICBEbyBuYW1lIHRyYW5zbGF0aW9uIGlmIHRoZXJlCiAJCSAgIGlzIG5vIFJvY2sgUmlkZ2UgTk0gZmllbGQuICovCi0JCWlmIChzYmktPnNfdW5oaWRlID09ICduJykgewotCQkJLyogRG8gbm90IHJlcG9ydCBoaWRkZW4gb3IgYXNzb2NpYXRlZCBmaWxlcyAqLwotCQkJaWYgKGRlLT5mbGFnc1stc2JpLT5zX2hpZ2hfc2llcnJhXSAmIDUpIHsKLQkJCQlmaWxwLT5mX3BvcyArPSBkZV9sZW47Ci0JCQkJY29udGludWU7Ci0JCQl9CisKKwkJLyoKKwkJICogRG8gbm90IHJlcG9ydCBoaWRkZW4gZmlsZXMgaWYgc28gaW5zdHJ1Y3RlZCwgb3IgYXNzb2NpYXRlZAorCQkgKiBmaWxlcyB1bmxlc3MgaW5zdHJ1Y3RlZCB0byBkbyBzbworCQkgKi8KKwkJaWYgKChzYmktPnNfaGlkZSA9PSAneScgJiYKKwkJCQkoZGUtPmZsYWdzWy1zYmktPnNfaGlnaF9zaWVycmFdICYgMSkpIHx8CisJCSAgICAgIChzYmktPnNfc2hvd2Fzc29jID09J24nICYmCisJCQkJKGRlLT5mbGFnc1stc2JpLT5zX2hpZ2hfc2llcnJhXSAmIDQpKSkgeworCQkJZmlscC0+Zl9wb3MgKz0gZGVfbGVuOworCQkJY29udGludWU7CiAJCX0KIAogCQltYXAgPSAxOwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaW5vZGUuYyBiL2ZzL2lzb2ZzL2lub2RlLmMKaW5kZXggYWJkN2IxMi4uMTY1MmRlMSAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaW5vZGUuYworKysgYi9mcy9pc29mcy9pbm9kZS5jCkBAIC0yOCwxMSArMjgsNiBAQAogCiAjZGVmaW5lIEJFUVVJRVQKIAotI2lmZGVmIExFQUtfQ0hFQ0sKLXN0YXRpYyBpbnQgY2hlY2tfbWFsbG9jOwotc3RhdGljIGludCBjaGVja19icmVhZDsKLSNlbmRpZgotCiBzdGF0aWMgaW50IGlzb2ZzX2hhc2hpKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IHFzdHIgKnFzdHIpOwogc3RhdGljIGludCBpc29mc19oYXNoKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IHFzdHIgKnFzdHIpOwogc3RhdGljIGludCBpc29mc19kZW50cnlfY21waShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICphLCBzdHJ1Y3QgcXN0ciAqYik7CkBAIC01NSwxMSArNTAsNiBAQAogCX0KICNlbmRpZgogCi0jaWZkZWYgTEVBS19DSEVDSwotCXByaW50aygiT3V0c3RhbmRpbmcgbWFsbG9jczolZCwgb3V0c3RhbmRpbmcgYnVmZmVyczogJWRcbiIsCi0JICAgICAgIGNoZWNrX21hbGxvYywgY2hlY2tfYnJlYWQpOwotI2VuZGlmCi0KIAlrZnJlZShzYmkpOwogCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwogCXJldHVybjsKQEAgLTczLDcgKzYzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmlzb2ZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IGlzb19pbm9kZV9pbmZvICplaTsKLQllaSA9IChzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKilrbWVtX2NhY2hlX2FsbG9jKGlzb2ZzX2lub2RlX2NhY2hlcCwgU0xBQl9LRVJORUwpOworCWVpID0ga21lbV9jYWNoZV9hbGxvYyhpc29mc19pbm9kZV9jYWNoZXAsIFNMQUJfS0VSTkVMKTsKIAlpZiAoIWVpKQogCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CkBAIC04NCw5ICs3NCw5IEBACiAJa21lbV9jYWNoZV9mcmVlKGlzb2ZzX2lub2RlX2NhY2hlcCwgSVNPRlNfSShpbm9kZSkpOwogfQogCi1zdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqIGZvbywga21lbV9jYWNoZV90ICogY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbywga21lbV9jYWNoZV90ICogY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IGlzb19pbm9kZV9pbmZvICopIGZvbzsKKwlzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmVpID0gZm9vOwogCiAJaWYgKChmbGFncyAmIChTTEFCX0NUT1JfVkVSSUZZfFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikpID09CiAJICAgIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKQEAgLTEwNyw3ICs5Nyw4IEBACiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKIAlpZiAoa21lbV9jYWNoZV9kZXN0cm95KGlzb2ZzX2lub2RlX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0lORk8gImlzb19pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJpc29faW5vZGVfY2FjaGU6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlICIKKwkJCQkJImZyZWVkXG4iKTsKIH0KIAogc3RhdGljIGludCBpc29mc19yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCkBAIC0xNDQsNyArMTM1LDcgQEAKIAl7CiAJCS5kX2hhc2gJCT0gaXNvZnNfaGFzaGlfbXMsCiAJCS5kX2NvbXBhcmUJPSBpc29mc19kZW50cnlfY21waV9tcywKLQl9CisJfSwKICNlbmRpZgogfTsKIApAQCAtMTUzLDcgKzE0NCw4IEBACiAJY2hhciByb2NrOwogCWNoYXIgam9saWV0OwogCWNoYXIgY3J1ZnQ7Ci0JY2hhciB1bmhpZGU7CisJY2hhciBoaWRlOworCWNoYXIgc2hvd2Fzc29jOwogCWNoYXIgbm9jb21wcmVzczsKIAl1bnNpZ25lZCBjaGFyIGNoZWNrOwogCXVuc2lnbmVkIGludCBibG9ja3NpemU7CkBAIC0yMTksOCArMjExLDggQEAKIC8qCiAgKiBDYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmUgb2YgdHdvIGlzb2ZzIG5hbWVzLgogICovCi1zdGF0aWMgaW50Ci1pc29mc19kZW50cnlfY21waV9jb21tb24oc3RydWN0IGRlbnRyeSAqZGVudHJ5LHN0cnVjdCBxc3RyICphLHN0cnVjdCBxc3RyICpiLGludCBtcykKK3N0YXRpYyBpbnQgaXNvZnNfZGVudHJ5X2NtcGlfY29tbW9uKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKmEsCisJCQkJc3RydWN0IHFzdHIgKmIsIGludCBtcykKIHsKIAlpbnQgYWxlbiwgYmxlbjsKIApAQCAtMjQzLDggKzIzNSw4IEBACiAvKgogICogQ2FzZSBzZW5zaXRpdmUgY29tcGFyZSBvZiB0d28gaXNvZnMgbmFtZXMuCiAgKi8KLXN0YXRpYyBpbnQKLWlzb2ZzX2RlbnRyeV9jbXBfY29tbW9uKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxzdHJ1Y3QgcXN0ciAqYSxzdHJ1Y3QgcXN0ciAqYixpbnQgbXMpCitzdGF0aWMgaW50IGlzb2ZzX2RlbnRyeV9jbXBfY29tbW9uKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKmEsCisJCQkJCXN0cnVjdCBxc3RyICpiLCBpbnQgbXMpCiB7CiAJaW50IGFsZW4sIGJsZW47CiAKQEAgLTMxOCwxMyArMzEwLDE1IEBACiAJT3B0X2Jsb2NrLCBPcHRfY2hlY2tfciwgT3B0X2NoZWNrX3MsIE9wdF9jcnVmdCwgT3B0X2dpZCwgT3B0X2lnbm9yZSwKIAlPcHRfaW9jaGFyc2V0LCBPcHRfbWFwX2EsIE9wdF9tYXBfbiwgT3B0X21hcF9vLCBPcHRfbW9kZSwgT3B0X25vam9saWV0LAogCU9wdF9ub3JvY2ssIE9wdF9zYiwgT3B0X3Nlc3Npb24sIE9wdF91aWQsIE9wdF91bmhpZGUsIE9wdF91dGY4LCBPcHRfZXJyLAotCU9wdF9ub2NvbXByZXNzLAorCU9wdF9ub2NvbXByZXNzLCBPcHRfaGlkZSwgT3B0X3Nob3dhc3NvYywKIH07CiAKIHN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X25vcm9jaywgIm5vcm9jayJ9LAogCXtPcHRfbm9qb2xpZXQsICJub2pvbGlldCJ9LAogCXtPcHRfdW5oaWRlLCAidW5oaWRlIn0sCisJe09wdF9oaWRlLCAiaGlkZSJ9LAorCXtPcHRfc2hvd2Fzc29jLCAic2hvd2Fzc29jIn0sCiAJe09wdF9jcnVmdCwgImNydWZ0In0sCiAJe09wdF91dGY4LCAidXRmOCJ9LAogCXtPcHRfaW9jaGFyc2V0LCAiaW9jaGFyc2V0PSVzIn0sCkBAIC0zNTYsNyArMzUwLDcgQEAKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKLXN0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBzdHJ1Y3QgaXNvOTY2MF9vcHRpb25zICogcG9wdCkKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBzdHJ1Y3QgaXNvOTY2MF9vcHRpb25zICpwb3B0KQogewogCWNoYXIgKnA7CiAJaW50IG9wdGlvbjsKQEAgLTM2NSw3ICszNTksOCBAQAogCXBvcHQtPnJvY2sgPSAneSc7CiAJcG9wdC0+am9saWV0ID0gJ3knOwogCXBvcHQtPmNydWZ0ID0gJ24nOwotCXBvcHQtPnVuaGlkZSA9ICduJzsKKwlwb3B0LT5oaWRlID0gJ24nOworCXBvcHQtPnNob3dhc3NvYyA9ICduJzsKIAlwb3B0LT5jaGVjayA9ICd1JzsJCS8qIHVuc2V0ICovCiAJcG9wdC0+bm9jb21wcmVzcyA9IDA7CiAJcG9wdC0+YmxvY2tzaXplID0gMTAyNDsKQEAgLTM5OCw4ICszOTMsMTIgQEAKIAkJY2FzZSBPcHRfbm9qb2xpZXQ6CiAJCQlwb3B0LT5qb2xpZXQgPSAnbic7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfaGlkZToKKwkJCXBvcHQtPmhpZGUgPSAneSc7CisJCQlicmVhazsKIAkJY2FzZSBPcHRfdW5oaWRlOgotCQkJcG9wdC0+dW5oaWRlID0gJ3knOworCQljYXNlIE9wdF9zaG93YXNzb2M6CisJCQlwb3B0LT5zaG93YXNzb2MgPSAneSc7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfY3J1ZnQ6CiAJCQlwb3B0LT5jcnVmdCA9ICd5JzsKQEAgLTQ5Myw3ICs0OTIsNyBAQAogICovCiAjZGVmaW5lIFdFX09CRVlfVEhFX1dSSVRURU5fU1RBTkRBUkRTIDEKIAotc3RhdGljIHVuc2lnbmVkIGludCBpc29mc19nZXRfbGFzdF9zZXNzaW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsczMyIHNlc3Npb24gKQorc3RhdGljIHVuc2lnbmVkIGludCBpc29mc19nZXRfbGFzdF9zZXNzaW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHMzMiBzZXNzaW9uKQogewogCXN0cnVjdCBjZHJvbV9tdWx0aXNlc3Npb24gbXNfaW5mbzsKIAl1bnNpZ25lZCBpbnQgdm9sX2Rlc2Nfc3RhcnQ7CkBAIC01MTgsNyArNTE3LDggQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIHNlc3Npb24gbnVtYmVyIG9yIHR5cGUgb2YgdHJhY2tcbiIpOwogCX0KIAlpID0gaW9jdGxfYnlfYmRldihiZGV2LCBDRFJPTU1VTFRJU0VTU0lPTiwgKHVuc2lnbmVkIGxvbmcpICZtc19pbmZvKTsKLQlpZihzZXNzaW9uID4gMCkgcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIHNlc3Npb24gbnVtYmVyXG4iKTsKKwlpZiAoc2Vzc2lvbiA+IDApCisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBzZXNzaW9uIG51bWJlclxuIik7CiAjaWYgMAogCXByaW50aygiaXNvZnMuaW5vZGU6IENEUk9NTVVMVElTRVNTSU9OOiByYz0lZFxuIixpKTsKIAlpZiAoaT09MCkgewpAQCAtNTU3LDEzICs1NTcsMTMgQEAKIAlzdHJ1Y3QgaXNvOTY2MF9vcHRpb25zCQlvcHQ7CiAJc3RydWN0IGlzb2ZzX3NiX2luZm8JICAgICAgKiBzYmk7CiAKLQlzYmkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXNvZnNfc2JfaW5mbyksIEdGUF9LRVJORUwpOworCXNiaSA9IGttYWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNiaSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcy0+c19mc19pbmZvID0gc2JpOwotCW1lbXNldChzYmksIDAsIHNpemVvZihzdHJ1Y3QgaXNvZnNfc2JfaW5mbykpOworCW1lbXNldChzYmksIDAsIHNpemVvZigqc2JpKSk7CiAKLQlpZiAoIXBhcnNlX29wdGlvbnMoKGNoYXIgKikgZGF0YSwgJm9wdCkpCisJaWYgKCFwYXJzZV9vcHRpb25zKChjaGFyICopZGF0YSwgJm9wdCkpCiAJCWdvdG8gb3V0X2ZyZWVzYmk7CiAKIAkvKgpAQCAtNzkyLDcgKzc5Miw4IEBACiAJc2JpLT5zX3JvY2sgPSAob3B0LnJvY2sgPT0gJ3knID8gMiA6IDApOwogCXNiaS0+c19yb2NrX29mZnNldCA9IC0xOyAvKiBpbml0aWFsIG9mZnNldCwgd2lsbCBndWVzcyB1bnRpbCBTUCBpcyBmb3VuZCovCiAJc2JpLT5zX2NydWZ0ID0gb3B0LmNydWZ0OwotCXNiaS0+c191bmhpZGUgPSBvcHQudW5oaWRlOworCXNiaS0+c19oaWRlID0gb3B0LmhpZGU7CisJc2JpLT5zX3Nob3dhc3NvYyA9IG9wdC5zaG93YXNzb2M7CiAJc2JpLT5zX3VpZCA9IG9wdC51aWQ7CiAJc2JpLT5zX2dpZCA9IG9wdC5naWQ7CiAJc2JpLT5zX3V0ZjggPSBvcHQudXRmODsKQEAgLTEwMDIsNyArMTAwMyw2IEBACiAJCXJ2Kys7CiAJfQogCi0KIGFib3J0OgogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcnY7CkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogc3RhdGljIGludCBpc29mc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCiB7Ci0JaWYgKCBjcmVhdGUgKSB7CisJaWYgKGNyZWF0ZSkgewogCQlwcmludGsoImlzb2ZzX2dldF9ibG9jazogS2VybmVsIHRyaWVzIHRvIGFsbG9jYXRlIGEgYmxvY2tcbiIpOwogCQlyZXR1cm4gLUVST0ZTOwogCX0KQEAgLTEwNjEsMTkgKzEwNjEsMTcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHRlc3RfYW5kX3NldF91aWQodWlkX3QgKnAsIHVpZF90IHZhbHVlKQogewotCWlmKHZhbHVlKSB7CisJaWYgKHZhbHVlKQogCQkqcCA9IHZhbHVlOwotCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRlc3RfYW5kX3NldF9naWQoZ2lkX3QgKnAsIGdpZF90IHZhbHVlKQogewotICAgICAgICBpZih2YWx1ZSkgeworICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICAgICAgKnAgPSB2YWx1ZTsKLSAgICAgICAgfQogfQogCi1zdGF0aWMgaW50IGlzb2ZzX3JlYWRfbGV2ZWwzX3NpemUoc3RydWN0IGlub2RlICogaW5vZGUpCitzdGF0aWMgaW50IGlzb2ZzX3JlYWRfbGV2ZWwzX3NpemUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGJ1ZnNpemUgPSBJU09GU19CVUZGRVJfU0laRShpbm9kZSk7CiAJaW50IGhpZ2hfc2llcnJhID0gSVNPRlNfU0IoaW5vZGUtPmlfc2IpLT5zX2hpZ2hfc2llcnJhOwpAQCAtMTEzNiw3ICsxMTM0LDcgQEAKIAkJCQliaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBibG9jayk7CiAJCQkJaWYgKCFiaCkKIAkJCQkJZ290byBvdXRfbm9yZWFkOwotCQkJCW1lbWNweSgodm9pZCAqKSB0bXBkZSArIHNsb3AsIGJoLT5iX2RhdGEsIG9mZnNldCk7CisJCQkJbWVtY3B5KCh2b2lkICopdG1wZGUrc2xvcCwgYmgtPmJfZGF0YSwgb2Zmc2V0KTsKIAkJCX0KIAkJCWRlID0gdG1wZGU7CiAJCX0KQEAgLTExNTAsMTIgKzExNDgsMTEgQEAKIAkJbW9yZV9lbnRyaWVzID0gZGUtPmZsYWdzWy1oaWdoX3NpZXJyYV0gJiAweDgwOwogCiAJCWkrKzsKLQkJaWYoaSA+IDEwMCkKKwkJaWYgKGkgPiAxMDApCiAJCQlnb3RvIG91dF90b29tYW55OwotCX0gd2hpbGUobW9yZV9lbnRyaWVzKTsKKwl9IHdoaWxlIChtb3JlX2VudHJpZXMpOwogb3V0OgotCWlmICh0bXBkZSkKLQkJa2ZyZWUodG1wZGUpOworCWtmcmVlKHRtcGRlKTsKIAlpZiAoYmgpCiAJCWJyZWxzZShiaCk7CiAJcmV0dXJuIDA7CkBAIC0xMTc5LDcgKzExNzYsNyBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgdm9pZCBpc29mc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQorc3RhdGljIHZvaWQgaXNvZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpOwpAQCAtMTI0OSw3ICsxMjQ2LDcgQEAKIAllaS0+aV9mb3JtYXRfcGFybVsyXSA9IDA7CiAKIAllaS0+aV9zZWN0aW9uX3NpemUgPSBpc29udW1fNzMzIChkZS0+c2l6ZSk7Ci0JaWYoZGUtPmZsYWdzWy1oaWdoX3NpZXJyYV0gJiAweDgwKSB7CisJaWYgKGRlLT5mbGFnc1staGlnaF9zaWVycmFdICYgMHg4MCkgewogCQlpZihpc29mc19yZWFkX2xldmVsM19zaXplKGlub2RlKSkgZ290byBmYWlsOwogCX0gZWxzZSB7CiAJCWVpLT5pX25leHRfc2VjdGlvbl9ibG9jayA9IDA7CkBAIC0xMzM2LDE2ICsxMzMzLDE2IEBACiAJCS8qIFhYWCAtIHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoKSBoYWQgYWxyZWFkeSBzZXQgaV9yZGV2LiAqLwogCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX3JkZXYpOwogCi0gb3V0Ogorb3V0OgogCWlmICh0bXBkZSkKIAkJa2ZyZWUodG1wZGUpOwogCWlmIChiaCkKIAkJYnJlbHNlKGJoKTsKIAlyZXR1cm47CiAKLSBvdXRfYmFkcmVhZDoKK291dF9iYWRyZWFkOgogCXByaW50ayhLRVJOX1dBUk5JTkcgIklTT0ZTOiB1bmFibGUgdG8gcmVhZCBpLW5vZGUgYmxvY2tcbiIpOwotIGZhaWw6CitmYWlsOgogCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIAlnb3RvIG91dDsKIH0KQEAgLTEzOTQsMTEgKzEzOTEsOCBAQAogCiAJaGFzaHZhbCA9IChibG9jayA8PCBzYi0+c19ibG9ja3NpemVfYml0cykgfCBvZmZzZXQ7CiAKLQlpbm9kZSA9IGlnZXQ1X2xvY2tlZChzYiwKLQkJCSAgICAgaGFzaHZhbCwKLQkJCSAgICAgJmlzb2ZzX2lnZXQ1X3Rlc3QsCi0JCQkgICAgICZpc29mc19pZ2V0NV9zZXQsCi0JCQkgICAgICZkYXRhKTsKKwlpbm9kZSA9IGlnZXQ1X2xvY2tlZChzYiwgaGFzaHZhbCwgJmlzb2ZzX2lnZXQ1X3Rlc3QsCisJCQkgICAgICZpc29mc19pZ2V0NV9zZXQsICZkYXRhKTsKIAogCWlmIChpbm9kZSAmJiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykpIHsKIAkJc2ItPnNfb3AtPnJlYWRfaW5vZGUoaW5vZGUpOwpAQCAtMTQwOCwzNiArMTQwMiw2IEBACiAJcmV0dXJuIGlub2RlOwogfQogCi0jaWZkZWYgTEVBS19DSEVDSwotI3VuZGVmIG1hbGxvYwotI3VuZGVmIGZyZWVfcwotI3VuZGVmIHNiX2JyZWFkCi0jdW5kZWYgYnJlbHNlCi0KLXZvaWQgKiBsZWFrX2NoZWNrX21hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSl7Ci0gIHZvaWQgKiB0bXA7Ci0gIGNoZWNrX21hbGxvYysrOwotICB0bXAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotICByZXR1cm4gdG1wOwotfQotCi12b2lkIGxlYWtfY2hlY2tfZnJlZV9zKHZvaWQgKiBvYmosIGludCBzaXplKXsKLSAgY2hlY2tfbWFsbG9jLS07Ci0gIHJldHVybiBrZnJlZShvYmopOwotfQotCi1zdHJ1Y3QgYnVmZmVyX2hlYWQgKiBsZWFrX2NoZWNrX2JyZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBibG9jayl7Ci0gIGNoZWNrX2JyZWFkKys7Ci0gIHJldHVybiBzYl9icmVhZChzYiwgYmxvY2spOwotfQotCi12b2lkIGxlYWtfY2hlY2tfYnJlbHNlKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKXsKLSAgY2hlY2tfYnJlYWQtLTsKLSAgcmV0dXJuIGJyZWxzZShiaCk7Ci19Ci0KLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICppc29mc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCiAJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSkKIHsKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lzb2ZzLmggYi9mcy9pc29mcy9pc29mcy5oCmluZGV4IDljZTdiNTEuLjM4Yzc1MTUgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lzb2ZzLmgKKysrIGIvZnMvaXNvZnMvaXNvZnMuaApAQCAtNDcsNiArNDcsOCBAQAogCXVuc2lnbmVkIGNoYXIgc19ub3N1aWQ7CiAJdW5zaWduZWQgY2hhciBzX25vZGV2OwogCXVuc2lnbmVkIGNoYXIgc19ub2NvbXByZXNzOworCXVuc2lnbmVkIGNoYXIgc19oaWRlOworCXVuc2lnbmVkIGNoYXIgc19zaG93YXNzb2M7CiAKIAltb2RlX3Qgc19tb2RlOwogCWdpZF90IHNfZ2lkOwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvbmFtZWkuYyBiL2ZzL2lzb2ZzL25hbWVpLmMKaW5kZXggNjkwZWRmMy4uZTM3ZTgyYiAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvbmFtZWkuYworKysgYi9mcy9pc29mcy9uYW1laS5jCkBAIC0xMzEsMTQgKzEzMSwxNiBAQAogCQl9CiAKIAkJLyoKLQkJICogU2tpcCBoaWRkZW4gb3IgYXNzb2NpYXRlZCBmaWxlcyB1bmxlc3MgdW5oaWRlIGlzIHNldCAKKwkJICogU2tpcCBoaWRkZW4gb3IgYXNzb2NpYXRlZCBmaWxlcyB1bmxlc3MgaGlkZSBvciBzaG93YXNzb2MsCisJCSAqIHJlc3BlY3RpdmVseSwgaXMgc2V0CiAJCSAqLwogCQltYXRjaCA9IDA7CiAJCWlmIChkbGVuID4gMCAmJgotCQkgICAgKCEoZGUtPmZsYWdzWy1zYmktPnNfaGlnaF9zaWVycmFdICYgNSkKLQkJICAgICB8fCBzYmktPnNfdW5oaWRlID09ICd5JykpCi0JCXsKLQkJCW1hdGNoID0gKGlzb2ZzX2NtcChkZW50cnksZHBudCxkbGVuKSA9PSAwKTsKKwkJCShzYmktPnNfaGlkZSA9PSduJyB8fAorCQkJCSghKGRlLT5mbGFnc1stc2JpLT5zX2hpZ2hfc2llcnJhXSAmIDEpKSkgJiYKKwkJCShzYmktPnNfc2hvd2Fzc29jID09J3knIHx8CisJCQkJKCEoZGUtPmZsYWdzWy1zYmktPnNfaGlnaF9zaWVycmFdICYgNCkpKSkgeworCQkJbWF0Y2ggPSAoaXNvZnNfY21wKGRlbnRyeSwgZHBudCwgZGxlbikgPT0gMCk7CiAJCX0KIAkJaWYgKG1hdGNoKSB7CiAJCQlpc29mc19ub3JtYWxpemVfYmxvY2tfYW5kX29mZnNldChkZSwKQEAgLTE0NiwxMSArMTQ4LDExIEBACiAJCQkJCQkJICZvZmZzZXRfc2F2ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgKmJsb2NrX3J2ID0gYmxvY2tfc2F2ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAqb2Zmc2V0X3J2ID0gb2Zmc2V0X3NhdmVkOwotCQkJaWYgKGJoKSBicmVsc2UoYmgpOworCQkJYnJlbHNlKGJoKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfQotCWlmIChiaCkgYnJlbHNlKGJoKTsKKwlicmVsc2UoYmgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmMKaW5kZXggMDg5ZTc5Yy4uNDMyNmNiNCAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvcm9jay5jCisrKyBiL2ZzL2lzb2ZzL3JvY2suYwpAQCAtMTMsMzUyICsxMyw1NDIgQEAKICNpbmNsdWRlICJpc29mcy5oIgogI2luY2x1ZGUgInJvY2suaCIKIAotLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byByZWFkIHRoZSBzeXN0ZW0gYXJlYXMgb2YgYSBkaXJlY3RvcnkgcmVjb3JkCisvKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byByZWFkIHRoZSBzeXN0ZW0gYXJlYXMgb2YgYSBkaXJlY3RvcnkgcmVjb3JkCiAgKiBhbmQgZXh0cmFjdCByZWxldmFudCBpbmZvcm1hdGlvbi4gIFRoZXJlIGFyZSBkaWZmZXJlbnQgZnVuY3Rpb25zIHByb3ZpZGVkCiAgKiBkZXBlbmRpbmcgdXBvbiB3aGF0IGluZm9ybWF0aW9uIHdlIG5lZWQgYXQgdGhlIHRpbWUuICBPbmUgZnVuY3Rpb24gZmlsbHMKICAqIG91dCBhbiBpbm9kZSBzdHJ1Y3R1cmUsIGEgc2Vjb25kIG9uZSBleHRyYWN0cyBhIGZpbGVuYW1lLCBhIHRoaXJkIG9uZQogICogcmV0dXJucyBhIHN5bWJvbGljIGxpbmsgbmFtZSwgYW5kIGEgZm91cnRoIG9uZSByZXR1cm5zIHRoZSBleHRlbnQgbnVtYmVyCi0gKiBmb3IgdGhlIGZpbGUuICovCisgKiBmb3IgdGhlIGZpbGUuCisgKi8KIAotI2RlZmluZSBTSUcoQSxCKSAoKEEpIHwgKChCKSA8PCA4KSkgLyogaXNvbnVtXzcyMSgpICovCisjZGVmaW5lIFNJRyhBLEIpICgoQSkgfCAoKEIpIDw8IDgpKQkvKiBpc29udW1fNzIxKCkgKi8KIAorc3RydWN0IHJvY2tfc3RhdGUgeworCXZvaWQgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICpjaHI7CisJaW50IGxlbjsKKwlpbnQgY29udF9zaXplOworCWludCBjb250X2V4dGVudDsKKwlpbnQgY29udF9vZmZzZXQ7CisJc3RydWN0IGlub2RlICppbm9kZTsKK307CiAKLS8qIFRoaXMgaXMgYSB3YXkgb2YgZW5zdXJpbmcgdGhhdCB3ZSBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc3lzdGVtCi0gICB1c2UgZmllbGRzIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIFJvY2sgUmlkZ2UgKi8KLSNkZWZpbmUgQ0hFQ0tfU1AoRkFJTCkJICAgICAgIAkJCVwKLSAgICAgIGlmKHJyLT51LlNQLm1hZ2ljWzBdICE9IDB4YmUpIEZBSUw7CVwKLSAgICAgIGlmKHJyLT51LlNQLm1hZ2ljWzFdICE9IDB4ZWYpIEZBSUw7ICAgICAgIFwKLSAgICAgIElTT0ZTX1NCKGlub2RlLT5pX3NiKS0+c19yb2NrX29mZnNldD1yci0+dS5TUC5za2lwOwotLyogV2UgZGVmaW5lIGEgc2VyaWVzIG9mIG1hY3JvcyBiZWNhdXNlIGVhY2ggZnVuY3Rpb24gbXVzdCBkbyBleGFjdGx5IHRoZQotICAgc2FtZSB0aGluZyBpbiBjZXJ0YWluIHBsYWNlcy4gIFdlIHVzZSB0aGUgbWFjcm9zIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcKLSAgIGlzIGRvbmUgY29ycmVjdGx5ICovCisvKgorICogVGhpcyBpcyBhIHdheSBvZiBlbnN1cmluZyB0aGF0IHdlIGhhdmUgc29tZXRoaW5nIGluIHRoZSBzeXN0ZW0KKyAqIHVzZSBmaWVsZHMgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggUm9jayBSaWRnZS4gIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MuCisgKi8KIAotI2RlZmluZSBDT05USU5VRV9ERUNMUyBcCi0gIGludCBjb250X2V4dGVudCA9IDAsIGNvbnRfb2Zmc2V0ID0gMCwgY29udF9zaXplID0gMDsgICBcCi0gIHZvaWQgKmJ1ZmZlciA9IE5VTEwKLQotI2RlZmluZSBDSEVDS19DRQkgICAgICAgCQkJXAotICAgICAge2NvbnRfZXh0ZW50ID0gaXNvbnVtXzczMyhyci0+dS5DRS5leHRlbnQpOyBcCi0gICAgICBjb250X29mZnNldCA9IGlzb251bV83MzMocnItPnUuQ0Uub2Zmc2V0KTsgXAotICAgICAgY29udF9zaXplID0gaXNvbnVtXzczMyhyci0+dS5DRS5zaXplKTt9Ci0KLSNkZWZpbmUgU0VUVVBfUk9DS19SSURHRShERSxDSFIsTEVOKQkgICAgICAJCSAgICAgIAlcCi0gIHtMRU49IHNpemVvZihzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQpICsgREUtPm5hbWVfbGVuWzBdOwlcCi0gIGlmKExFTiAmIDEpIExFTisrOwkJCQkJCVwKLSAgQ0hSID0gKCh1bnNpZ25lZCBjaGFyICopIERFKSArIExFTjsJCQkJXAotICBMRU4gPSAqKCh1bnNpZ25lZCBjaGFyICopIERFKSAtIExFTjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKExFTjwwKSBMRU49MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChJU09GU19TQihpbm9kZS0+aV9zYiktPnNfcm9ja19vZmZzZXQhPS0xKSAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBMRU4tPUlTT0ZTX1NCKGlub2RlLT5pX3NiKS0+c19yb2NrX29mZnNldDsgICAgICAgICAgICAgICAgXAotICAgICBDSFIrPUlTT0ZTX1NCKGlub2RlLT5pX3NiKS0+c19yb2NrX29mZnNldDsgICAgICAgICAgICAgICAgXAotICAgICBpZiAoTEVOPDApIExFTj0wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0jZGVmaW5lIE1BWUJFX0NPTlRJTlVFKExBQkVMLERFVikgXAotICB7aWYgKGJ1ZmZlcikgeyBrZnJlZShidWZmZXIpOyBidWZmZXIgPSBOVUxMOyB9IFwKLSAgaWYgKGNvbnRfZXh0ZW50KXsgXAotICAgIGludCBibG9jaywgb2Zmc2V0LCBvZmZzZXQxOyBcCi0gICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogcGJoOyBcCi0gICAgYnVmZmVyID0ga21hbGxvYyhjb250X3NpemUsR0ZQX0tFUk5FTCk7IFwKLSAgICBpZiAoIWJ1ZmZlcikgZ290byBvdXQ7IFwKLSAgICBibG9jayA9IGNvbnRfZXh0ZW50OyBcCi0gICAgb2Zmc2V0ID0gY29udF9vZmZzZXQ7IFwKLSAgICBvZmZzZXQxID0gMDsgXAotICAgIHBiaCA9IHNiX2JyZWFkKERFVi0+aV9zYiwgYmxvY2spOyBcCi0gICAgaWYocGJoKXsgICAgICAgXAotICAgICAgaWYgKG9mZnNldCA+IHBiaC0+Yl9zaXplIHx8IG9mZnNldCArIGNvbnRfc2l6ZSA+IHBiaC0+Yl9zaXplKXsJXAotCWJyZWxzZShwYmgpOyBcCi0JZ290byBvdXQ7IFwKLSAgICAgIH0gXAotICAgICAgbWVtY3B5KGJ1ZmZlciArIG9mZnNldDEsIHBiaC0+Yl9kYXRhICsgb2Zmc2V0LCBjb250X3NpemUgLSBvZmZzZXQxKTsgXAotICAgICAgYnJlbHNlKHBiaCk7IFwKLSAgICAgIGNociA9ICh1bnNpZ25lZCBjaGFyICopIGJ1ZmZlcjsgXAotICAgICAgbGVuID0gY29udF9zaXplOyBcCi0gICAgICBjb250X2V4dGVudCA9IDA7IFwKLSAgICAgIGNvbnRfc2l6ZSA9IDA7IFwKLSAgICAgIGNvbnRfb2Zmc2V0ID0gMDsgXAotICAgICAgZ290byBMQUJFTDsgXAotICAgIH0gICAgXAotICAgIHByaW50aygiVW5hYmxlIHRvIHJlYWQgcm9jay1yaWRnZSBhdHRyaWJ1dGVzXG4iKTsgICAgXAotICB9fQotCi0vKiByZXR1cm4gbGVuZ3RoIG9mIG5hbWUgZmllbGQ7IDA6IG5vdCBmb3VuZCwgLTE6IHRvIGJlIGlnbm9yZWQgKi8KLWludCBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiBkZSwKLQkJCSAgICBjaGFyICogcmV0bmFtZSwgc3RydWN0IGlub2RlICogaW5vZGUpCitzdGF0aWMgaW50IGNoZWNrX3NwKHN0cnVjdCByb2NrX3JpZGdlICpyciwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLSAgaW50IGxlbjsKLSAgdW5zaWduZWQgY2hhciAqIGNocjsKLSAgQ09OVElOVUVfREVDTFM7Ci0gIGludCByZXRuYW1sZW4gPSAwLCB0cnVuY2F0ZT0wOwotIAotICBpZiAoIUlTT0ZTX1NCKGlub2RlLT5pX3NiKS0+c19yb2NrKSByZXR1cm4gMDsKLSAgKnJldG5hbWUgPSAwOworCWlmIChyci0+dS5TUC5tYWdpY1swXSAhPSAweGJlKQorCQlyZXR1cm4gLTE7CisJaWYgKHJyLT51LlNQLm1hZ2ljWzFdICE9IDB4ZWYpCisJCXJldHVybiAtMTsKKwlJU09GU19TQihpbm9kZS0+aV9zYiktPnNfcm9ja19vZmZzZXQgPSByci0+dS5TUC5za2lwOworCXJldHVybiAwOworfQogCi0gIFNFVFVQX1JPQ0tfUklER0UoZGUsIGNociwgbGVuKTsKLSByZXBlYXQ6Ci0gIHsKLSAgICBzdHJ1Y3Qgcm9ja19yaWRnZSAqIHJyOwotICAgIGludCBzaWc7Ci0gICAgCi0gICAgd2hpbGUgKGxlbiA+IDIpeyAvKiBUaGVyZSBtYXkgYmUgb25lIGJ5dGUgZm9yIHBhZGRpbmcgc29tZXdoZXJlICovCi0gICAgICByciA9IChzdHJ1Y3Qgcm9ja19yaWRnZSAqKSBjaHI7Ci0gICAgICBpZiAocnItPmxlbiA8IDMpIGdvdG8gb3V0OyAvKiBTb21ldGhpbmcgZ290IHNjcmV3ZWQgdXAgaGVyZSAqLwotICAgICAgc2lnID0gaXNvbnVtXzcyMShjaHIpOwotICAgICAgY2hyICs9IHJyLT5sZW47IAotICAgICAgbGVuIC09IHJyLT5sZW47Ci0gICAgICBpZiAobGVuIDwgMCkgZ290byBvdXQ7CS8qIGNvcnJ1cHRlZCBpc29mcyAqLworc3RhdGljIHZvaWQgc2V0dXBfcm9ja19yaWRnZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLAorCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHJvY2tfc3RhdGUgKnJzKQoreworCXJzLT5sZW4gPSBzaXplb2Yoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkKSArIGRlLT5uYW1lX2xlblswXTsKKwlpZiAocnMtPmxlbiAmIDEpCisJCShycy0+bGVuKSsrOworCXJzLT5jaHIgPSAodW5zaWduZWQgY2hhciAqKWRlICsgcnMtPmxlbjsKKwlycy0+bGVuID0gKigodW5zaWduZWQgY2hhciAqKWRlKSAtIHJzLT5sZW47CisJaWYgKHJzLT5sZW4gPCAwKQorCQlycy0+bGVuID0gMDsKIAotICAgICAgc3dpdGNoKHNpZyl7Ci0gICAgICBjYXNlIFNJRygnUicsJ1InKToKLQlpZigocnItPnUuUlIuZmxhZ3NbMF0gJiBSUl9OTSkgPT0gMCkgZ290byBvdXQ7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIFNJRygnUycsJ1AnKToKLQlDSEVDS19TUChnb3RvIG91dCk7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIFNJRygnQycsJ0UnKToKLQlDSEVDS19DRTsKLQlicmVhazsKLSAgICAgIGNhc2UgU0lHKCdOJywnTScpOgotCWlmICh0cnVuY2F0ZSkgYnJlYWs7Ci0JaWYgKHJyLT5sZW4gPCA1KSBicmVhazsKLSAgICAgICAgLyoKLQkgKiBJZiB0aGUgZmxhZ3MgYXJlIDIgb3IgNCwgdGhpcyBpbmRpY2F0ZXMgJy4nIG9yICcuLicuCi0JICogV2UgZG9uJ3Qgd2FudCB0byBkbyBhbnl0aGluZyB3aXRoIHRoaXMsIGJlY2F1c2UgaXQKLQkgKiBzY3Jld3MgdXAgdGhlIGNvZGUgdGhhdCBjYWxscyB1cy4gIFdlIGRvbid0IHJlYWxseQotCSAqIGNhcmUgYW55d2F5cywgc2luY2Ugd2UgY2FuIGp1c3QgdXNlIHRoZSBub24tUlIKLQkgKiBuYW1lLgotCSAqLwotCWlmIChyci0+dS5OTS5mbGFncyAmIDYpIHsKLQkgIGJyZWFrOworCWlmIChJU09GU19TQihpbm9kZS0+aV9zYiktPnNfcm9ja19vZmZzZXQgIT0gLTEpIHsKKwkJcnMtPmxlbiAtPSBJU09GU19TQihpbm9kZS0+aV9zYiktPnNfcm9ja19vZmZzZXQ7CisJCXJzLT5jaHIgKz0gSVNPRlNfU0IoaW5vZGUtPmlfc2IpLT5zX3JvY2tfb2Zmc2V0OworCQlpZiAocnMtPmxlbiA8IDApCisJCQlycy0+bGVuID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfcm9ja19zdGF0ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJbWVtc2V0KHJzLCAwLCBzaXplb2YoKnJzKSk7CisJcnMtPmlub2RlID0gaW5vZGU7Cit9CisKKy8qCisgKiBSZXR1cm5zIDAgaWYgdGhlIGNhbGxlciBzaG91bGQgY29udGludWUgc2Nhbm5pbmcsIDEgaWYgdGhlIHNjYW4gbXVzdCBlbmQKKyAqIGFuZCAtdmUgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpCit7CisJaW50IHJldCA9IDE7CisJaW50IGJsb2Nrc2l6ZSA9IDEgPDwgcnMtPmlub2RlLT5pX2Jsa2JpdHM7CisJY29uc3QgaW50IG1pbl9kZV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IHJvY2tfcmlkZ2UsIHUpOworCisJa2ZyZWUocnMtPmJ1ZmZlcik7CisJcnMtPmJ1ZmZlciA9IE5VTEw7CisKKwlpZiAoKHVuc2lnbmVkKXJzLT5jb250X29mZnNldCA+IGJsb2Nrc2l6ZSAtIG1pbl9kZV9zaXplIHx8CisJICAgICh1bnNpZ25lZClycy0+Y29udF9zaXplID4gYmxvY2tzaXplIHx8CisJICAgICh1bnNpZ25lZCkocnMtPmNvbnRfb2Zmc2V0ICsgcnMtPmNvbnRfc2l6ZSkgPiBibG9ja3NpemUpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiAiCisJCQkiZXh0ZW50PSVkLCBvZmZzZXQ9JWQsIHNpemU9JWRcbiIsCisJCQlycy0+Y29udF9leHRlbnQsIHJzLT5jb250X29mZnNldCwgcnMtPmNvbnRfc2l6ZSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OwogCX0KIAotCWlmIChyci0+dS5OTS5mbGFncyAmIH4xKSB7Ci0JICBwcmludGsoIlVuc3VwcG9ydGVkIE5NIGZsYWcgc2V0dGluZ3MgKCVkKVxuIixyci0+dS5OTS5mbGFncyk7Ci0JICBicmVhazsKKwlpZiAocnMtPmNvbnRfZXh0ZW50KSB7CisJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisKKwkJcnMtPmJ1ZmZlciA9IGttYWxsb2MocnMtPmNvbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcnMtPmJ1ZmZlcikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJldCA9IC1FSU87CisJCWJoID0gc2JfYnJlYWQocnMtPmlub2RlLT5pX3NiLCBycy0+Y29udF9leHRlbnQpOworCQlpZiAoYmgpIHsKKwkJCW1lbWNweShycy0+YnVmZmVyLCBiaC0+Yl9kYXRhICsgcnMtPmNvbnRfb2Zmc2V0LAorCQkJCQlycy0+Y29udF9zaXplKTsKKwkJCXB1dF9iaChiaCk7CisJCQlycy0+Y2hyID0gcnMtPmJ1ZmZlcjsKKwkJCXJzLT5sZW4gPSBycy0+Y29udF9zaXplOworCQkJcnMtPmNvbnRfZXh0ZW50ID0gMDsKKwkJCXJzLT5jb250X3NpemUgPSAwOworCQkJcnMtPmNvbnRfb2Zmc2V0ID0gMDsKKwkJCXJldHVybiAwOworCQl9CisJCXByaW50aygiVW5hYmxlIHRvIHJlYWQgcm9jay1yaWRnZSBhdHRyaWJ1dGVzXG4iKTsKIAl9Ci0JaWYoKHN0cmxlbihyZXRuYW1lKSArIHJyLT5sZW4gLSA1KSA+PSAyNTQpIHsKLQkgIHRydW5jYXRlID0gMTsKLQkgIGJyZWFrOworb3V0OgorCWtmcmVlKHJzLT5idWZmZXIpOworCXJzLT5idWZmZXIgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBXZSB0aGluayB0aGVyZSdzIGEgcmVjb3JkIG9mIHR5cGUgYHNpZycgYXQgcnMtPmNoci4gIFBhcnNlIHRoZSBzaWduYXR1cmUKKyAqIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGVyZSdzIHJlYWxseSByb29tIGZvciBhIHJlY29yZCBvZiB0aGF0IHR5cGUuCisgKi8KK3N0YXRpYyBpbnQgcm9ja19jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMsIGludCBzaWcpCit7CisJaW50IGxlbjsKKworCXN3aXRjaCAoc2lnKSB7CisJY2FzZSBTSUcoJ1MnLCAnUCcpOgorCQlsZW4gPSBzaXplb2Yoc3RydWN0IFNVX1NQX3MpOworCQlicmVhazsKKwljYXNlIFNJRygnQycsICdFJyk6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgU1VfQ0Vfcyk7CisJCWJyZWFrOworCWNhc2UgU0lHKCdFJywgJ1InKToKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBTVV9FUl9zKTsKKwkJYnJlYWs7CisJY2FzZSBTSUcoJ1InLCAnUicpOgorCQlsZW4gPSBzaXplb2Yoc3RydWN0IFJSX1JSX3MpOworCQlicmVhazsKKwljYXNlIFNJRygnUCcsICdYJyk6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgUlJfUFhfcyk7CisJCWJyZWFrOworCWNhc2UgU0lHKCdQJywgJ04nKToKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBSUl9QTl9zKTsKKwkJYnJlYWs7CisJY2FzZSBTSUcoJ1MnLCAnTCcpOgorCQlsZW4gPSBzaXplb2Yoc3RydWN0IFJSX1NMX3MpOworCQlicmVhazsKKwljYXNlIFNJRygnTicsICdNJyk6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgUlJfTk1fcyk7CisJCWJyZWFrOworCWNhc2UgU0lHKCdDJywgJ0wnKToKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBSUl9DTF9zKTsKKwkJYnJlYWs7CisJY2FzZSBTSUcoJ1AnLCAnTCcpOgorCQlsZW4gPSBzaXplb2Yoc3RydWN0IFJSX1BMX3MpOworCQlicmVhazsKKwljYXNlIFNJRygnVCcsICdGJyk6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgUlJfVEZfcyk7CisJCWJyZWFrOworCWNhc2UgU0lHKCdaJywgJ0YnKToKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBSUl9aRl9zKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGVuID0gMDsKKwkJYnJlYWs7CiAJfQotCXN0cm5jYXQocmV0bmFtZSwgcnItPnUuTk0ubmFtZSwgcnItPmxlbiAtIDUpOwotCXJldG5hbWxlbiArPSByci0+bGVuIC0gNTsKLQlicmVhazsKLSAgICAgIGNhc2UgU0lHKCdSJywnRScpOgotCWlmIChidWZmZXIpIGtmcmVlKGJ1ZmZlcik7Ci0JcmV0dXJuIC0xOwotICAgICAgZGVmYXVsdDoKLQlicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgTUFZQkVfQ09OVElOVUUocmVwZWF0LGlub2RlKTsKLSAgaWYgKGJ1ZmZlcikga2ZyZWUoYnVmZmVyKTsKLSAgcmV0dXJuIHJldG5hbWxlbjsgLyogSWYgMCwgdGhpcyBmaWxlIGRpZCBub3QgaGF2ZSBhIE5NIGZpZWxkICovCi0gb3V0OgotICBpZihidWZmZXIpIGtmcmVlKGJ1ZmZlcik7Ci0gIHJldHVybiAwOworCWxlbiArPSBvZmZzZXRvZihzdHJ1Y3Qgcm9ja19yaWRnZSwgdSk7CisJaWYgKGxlbiA+IHJzLT5sZW4pIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJyb2NrOiBkaXJlY3RvcnkgZW50cnkgd291bGQgb3ZlcmZsb3cgIgorCQkJCSJzdG9yYWdlXG4iKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJyb2NrOiBzaWc9MHglMDJ4LCBzaXplPSVkLCByZW1haW5pbmc9JWRcbiIsCisJCQkJc2lnLCBsZW4sIHJzLT5sZW4pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXR1cm4gbGVuZ3RoIG9mIG5hbWUgZmllbGQ7IDA6IG5vdCBmb3VuZCwgLTE6IHRvIGJlIGlnbm9yZWQKKyAqLworaW50IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsCisJCQkgICAgY2hhciAqcmV0bmFtZSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgcm9ja19zdGF0ZSByczsKKwlzdHJ1Y3Qgcm9ja19yaWRnZSAqcnI7CisJaW50IHNpZzsKKwlpbnQgcmV0bmFtbGVuID0gMDsKKwlpbnQgdHJ1bmNhdGUgPSAwOworCWludCByZXQgPSAwOworCisJaWYgKCFJU09GU19TQihpbm9kZS0+aV9zYiktPnNfcm9jaykKKwkJcmV0dXJuIDA7CisJKnJldG5hbWUgPSAwOworCisJaW5pdF9yb2NrX3N0YXRlKCZycywgaW5vZGUpOworCXNldHVwX3JvY2tfcmlkZ2UoZGUsIGlub2RlLCAmcnMpOworcmVwZWF0OgorCisJd2hpbGUgKHJzLmxlbiA+IDIpIHsgLyogVGhlcmUgbWF5IGJlIG9uZSBieXRlIGZvciBwYWRkaW5nIHNvbWV3aGVyZSAqLworCQlyciA9IChzdHJ1Y3Qgcm9ja19yaWRnZSAqKXJzLmNocjsKKwkJaWYgKHJyLT5sZW4gPCAzKQorCQkJZ290byBvdXQ7CS8qIFNvbWV0aGluZyBnb3Qgc2NyZXdlZCB1cCBoZXJlICovCisJCXNpZyA9IGlzb251bV83MjEocnMuY2hyKTsKKwkJaWYgKHJvY2tfY2hlY2tfb3ZlcmZsb3coJnJzLCBzaWcpKQorCQkJZ290byBlaW87CisJCXJzLmNociArPSByci0+bGVuOworCQlycy5sZW4gLT0gcnItPmxlbjsKKwkJaWYgKHJzLmxlbiA8IDApCisJCQlnb3RvIGVpbzsJLyogY29ycnVwdGVkIGlzb2ZzICovCisKKwkJc3dpdGNoIChzaWcpIHsKKwkJY2FzZSBTSUcoJ1InLCAnUicpOgorCQkJaWYgKChyci0+dS5SUi5mbGFnc1swXSAmIFJSX05NKSA9PSAwKQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCWNhc2UgU0lHKCdTJywgJ1AnKToKKwkJCWlmIChjaGVja19zcChyciwgaW5vZGUpKQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCWNhc2UgU0lHKCdDJywgJ0UnKToKKwkJCXJzLmNvbnRfZXh0ZW50ID0gaXNvbnVtXzczMyhyci0+dS5DRS5leHRlbnQpOworCQkJcnMuY29udF9vZmZzZXQgPSBpc29udW1fNzMzKHJyLT51LkNFLm9mZnNldCk7CisJCQlycy5jb250X3NpemUgPSBpc29udW1fNzMzKHJyLT51LkNFLnNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU0lHKCdOJywgJ00nKToKKwkJCWlmICh0cnVuY2F0ZSkKKwkJCQlicmVhazsKKwkJCWlmIChyci0+bGVuIDwgNSkKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBJZiB0aGUgZmxhZ3MgYXJlIDIgb3IgNCwgdGhpcyBpbmRpY2F0ZXMgJy4nIG9yICcuLicuCisJCQkgKiBXZSBkb24ndCB3YW50IHRvIGRvIGFueXRoaW5nIHdpdGggdGhpcywgYmVjYXVzZSBpdAorCQkJICogc2NyZXdzIHVwIHRoZSBjb2RlIHRoYXQgY2FsbHMgdXMuICBXZSBkb24ndCByZWFsbHkKKwkJCSAqIGNhcmUgYW55d2F5cywgc2luY2Ugd2UgY2FuIGp1c3QgdXNlIHRoZSBub24tUlIKKwkJCSAqIG5hbWUuCisJCQkgKi8KKwkJCWlmIChyci0+dS5OTS5mbGFncyAmIDYpCisJCQkJYnJlYWs7CisKKwkJCWlmIChyci0+dS5OTS5mbGFncyAmIH4xKSB7CisJCQkJcHJpbnRrKCJVbnN1cHBvcnRlZCBOTSBmbGFnIHNldHRpbmdzICglZClcbiIsCisJCQkJCXJyLT51Lk5NLmZsYWdzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICgoc3RybGVuKHJldG5hbWUpICsgcnItPmxlbiAtIDUpID49IDI1NCkgeworCQkJCXRydW5jYXRlID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN0cm5jYXQocmV0bmFtZSwgcnItPnUuTk0ubmFtZSwgcnItPmxlbiAtIDUpOworCQkJcmV0bmFtbGVuICs9IHJyLT5sZW4gLSA1OworCQkJYnJlYWs7CisJCWNhc2UgU0lHKCdSJywgJ0UnKToKKwkJCWtmcmVlKHJzLmJ1ZmZlcik7CisJCQlyZXR1cm4gLTE7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXQgPSByb2NrX2NvbnRpbnVlKCZycyk7CisJaWYgKHJldCA9PSAwKQorCQlnb3RvIHJlcGVhdDsKKwlpZiAocmV0ID09IDEpCisJCXJldHVybiByZXRuYW1sZW47IC8qIElmIDAsIHRoaXMgZmlsZSBkaWQgbm90IGhhdmUgYSBOTSBmaWVsZCAqLworb3V0OgorCWtmcmVlKHJzLmJ1ZmZlcik7CisJcmV0dXJuIHJldDsKK2VpbzoKKwlyZXQgPSAtRUlPOworCWdvdG8gb3V0OwogfQogCiBzdGF0aWMgaW50CiBwYXJzZV9yb2NrX3JpZGdlX2lub2RlX2ludGVybmFsKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsCiAJCQkJc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlZ2FyZF94YSkKIHsKLSAgaW50IGxlbjsKLSAgdW5zaWduZWQgY2hhciAqIGNocjsKLSAgaW50IHN5bWxpbmtfbGVuID0gMDsKLSAgQ09OVElOVUVfREVDTFM7CisJaW50IHN5bWxpbmtfbGVuID0gMDsKKwlpbnQgY250LCBzaWc7CisJc3RydWN0IGlub2RlICpyZWxvYzsKKwlzdHJ1Y3Qgcm9ja19yaWRnZSAqcnI7CisJaW50IHJvb3RmbGFnOworCXN0cnVjdCByb2NrX3N0YXRlIHJzOworCWludCByZXQgPSAwOwogCi0gIGlmICghSVNPRlNfU0IoaW5vZGUtPmlfc2IpLT5zX3JvY2spIHJldHVybiAwOworCWlmICghSVNPRlNfU0IoaW5vZGUtPmlfc2IpLT5zX3JvY2spCisJCXJldHVybiAwOwogCi0gIFNFVFVQX1JPQ0tfUklER0UoZGUsIGNociwgbGVuKTsKLSAgaWYgKHJlZ2FyZF94YSkKLSAgIHsKLSAgICAgY2hyKz0xNDsKLSAgICAgbGVuLT0xNDsKLSAgICAgaWYgKGxlbjwwKSBsZW49MDsKLSAgIH0KLSAgIAotIHJlcGVhdDoKLSAgewotICAgIGludCBjbnQsIHNpZzsKLSAgICBzdHJ1Y3QgaW5vZGUgKiByZWxvYzsKLSAgICBzdHJ1Y3Qgcm9ja19yaWRnZSAqIHJyOwotICAgIGludCByb290ZmxhZzsKLSAgICAKLSAgICB3aGlsZSAobGVuID4gMil7IC8qIFRoZXJlIG1heSBiZSBvbmUgYnl0ZSBmb3IgcGFkZGluZyBzb21ld2hlcmUgKi8KLSAgICAgIHJyID0gKHN0cnVjdCByb2NrX3JpZGdlICopIGNocjsKLSAgICAgIGlmIChyci0+bGVuIDwgMykgZ290byBvdXQ7IC8qIFNvbWV0aGluZyBnb3Qgc2NyZXdlZCB1cCBoZXJlICovCi0gICAgICBzaWcgPSBpc29udW1fNzIxKGNocik7Ci0gICAgICBjaHIgKz0gcnItPmxlbjsgCi0gICAgICBsZW4gLT0gcnItPmxlbjsKLSAgICAgIGlmIChsZW4gPCAwKSBnb3RvIG91dDsJLyogY29ycnVwdGVkIGlzb2ZzICovCi0gICAgICAKLSAgICAgIHN3aXRjaChzaWcpeworCWluaXRfcm9ja19zdGF0ZSgmcnMsIGlub2RlKTsKKwlzZXR1cF9yb2NrX3JpZGdlKGRlLCBpbm9kZSwgJnJzKTsKKwlpZiAocmVnYXJkX3hhKSB7CisJCXJzLmNociArPSAxNDsKKwkJcnMubGVuIC09IDE0OworCQlpZiAocnMubGVuIDwgMCkKKwkJCXJzLmxlbiA9IDA7CisJfQorCityZXBlYXQ6CisJd2hpbGUgKHJzLmxlbiA+IDIpIHsgLyogVGhlcmUgbWF5IGJlIG9uZSBieXRlIGZvciBwYWRkaW5nIHNvbWV3aGVyZSAqLworCQlyciA9IChzdHJ1Y3Qgcm9ja19yaWRnZSAqKXJzLmNocjsKKwkJaWYgKHJyLT5sZW4gPCAzKQorCQkJZ290byBvdXQ7CS8qIFNvbWV0aGluZyBnb3Qgc2NyZXdlZCB1cCBoZXJlICovCisJCXNpZyA9IGlzb251bV83MjEocnMuY2hyKTsKKwkJaWYgKHJvY2tfY2hlY2tfb3ZlcmZsb3coJnJzLCBzaWcpKQorCQkJZ290byBlaW87CisJCXJzLmNociArPSByci0+bGVuOworCQlycy5sZW4gLT0gcnItPmxlbjsKKwkJaWYgKHJzLmxlbiA8IDApCisJCQlnb3RvIGVpbzsJLyogY29ycnVwdGVkIGlzb2ZzICovCisKKwkJc3dpdGNoIChzaWcpIHsKICNpZm5kZWYgQ09ORklHX1pJU09GUwkJLyogTm8gZmxhZyBmb3IgU0Ygb3IgWkYgKi8KLSAgICAgIGNhc2UgU0lHKCdSJywnUicpOgotCWlmKChyci0+dS5SUi5mbGFnc1swXSAmIAotIAkgICAgKFJSX1BYIHwgUlJfVEYgfCBSUl9TTCB8IFJSX0NMKSkgPT0gMCkgZ290byBvdXQ7Ci0JYnJlYWs7CisJCWNhc2UgU0lHKCdSJywgJ1InKToKKwkJCWlmICgocnItPnUuUlIuZmxhZ3NbMF0gJgorCQkJICAgICAoUlJfUFggfCBSUl9URiB8IFJSX1NMIHwgUlJfQ0wpKSA9PSAwKQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAjZW5kaWYKLSAgICAgIGNhc2UgU0lHKCdTJywnUCcpOgotCUNIRUNLX1NQKGdvdG8gb3V0KTsKLQlicmVhazsKLSAgICAgIGNhc2UgU0lHKCdDJywnRScpOgotCUNIRUNLX0NFOwotCWJyZWFrOwotICAgICAgY2FzZSBTSUcoJ0UnLCdSJyk6Ci0JSVNPRlNfU0IoaW5vZGUtPmlfc2IpLT5zX3JvY2sgPSAxOwotCXByaW50ayhLRVJOX0RFQlVHICJJU08gOTY2MCBFeHRlbnNpb25zOiAiKTsKLQl7IGludCBwOwotCSAgZm9yKHA9MDtwPHJyLT51LkVSLmxlbl9pZDtwKyspIHByaW50aygiJWMiLHJyLT51LkVSLmRhdGFbcF0pOwotCX0KLQkgIHByaW50aygiXG4iKTsKLQlicmVhazsKLSAgICAgIGNhc2UgU0lHKCdQJywnWCcpOgotCWlub2RlLT5pX21vZGUgID0gaXNvbnVtXzczMyhyci0+dS5QWC5tb2RlKTsKLQlpbm9kZS0+aV9ubGluayA9IGlzb251bV83MzMocnItPnUuUFgubl9saW5rcyk7Ci0JaW5vZGUtPmlfdWlkICAgPSBpc29udW1fNzMzKHJyLT51LlBYLnVpZCk7Ci0JaW5vZGUtPmlfZ2lkICAgPSBpc29udW1fNzMzKHJyLT51LlBYLmdpZCk7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIFNJRygnUCcsJ04nKToKLQl7IGludCBoaWdoLCBsb3c7Ci0JICBoaWdoID0gaXNvbnVtXzczMyhyci0+dS5QTi5kZXZfaGlnaCk7Ci0JICBsb3cgPSBpc29udW1fNzMzKHJyLT51LlBOLmRldl9sb3cpOwotCSAgLyoKLQkgICAqIFRoZSBSb2NrIFJpZGdlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IGlmIHNpemVvZihkZXZfdCkgPD0gNCwKLQkgICAqIHRoZW4gdGhlIGhpZ2ggZmllbGQgaXMgdW51c2VkLCBhbmQgdGhlIGRldmljZSBudW1iZXIgaXMgY29tcGxldGVseQotCSAgICogc3RvcmVkIGluIHRoZSBsb3cgZmllbGQuICBTb21lIHdyaXRlcnMgbWF5IGlnbm9yZSB0aGlzIHN1YnRsZXR5LAotCSAgICogYW5kIGFzIGEgcmVzdWx0IHdlIHRlc3QgdG8gc2VlIGlmIHRoZSBlbnRpcmUgZGV2aWNlIG51bWJlciBpcwotCSAgICogc3RvcmVkIGluIHRoZSBsb3cgZmllbGQsIGFuZCB1c2UgdGhhdC4KLQkgICAqLwotCSAgaWYoKGxvdyAmIH4weGZmKSAmJiBoaWdoID09IDApIHsKLQkgICAgaW5vZGUtPmlfcmRldiA9IE1LREVWKGxvdyA+PiA4LCBsb3cgJiAweGZmKTsKLQkgIH0gZWxzZSB7Ci0JICAgIGlub2RlLT5pX3JkZXYgPSBNS0RFVihoaWdoLCBsb3cpOwotCSAgfQotCX0KLQlicmVhazsKLSAgICAgIGNhc2UgU0lHKCdUJywnRicpOgotCS8qIFNvbWUgUlJJUCB3cml0ZXJzIGluY29ycmVjdGx5IHBsYWNlIGN0aW1lIGluIHRoZSBURl9DUkVBVEUgZmllbGQuCi0JICAgVHJ5IHRvIGhhbmRsZSB0aGlzIGNvcnJlY3RseSBmb3IgZWl0aGVyIGNhc2UuICovCi0JY250ID0gMDsgLyogUm9jayByaWRnZSBuZXZlciBhcHBlYXJzIG9uIGEgSGlnaCBTaWVycmEgZGlzayAqLwotCWlmKHJyLT51LlRGLmZsYWdzICYgVEZfQ1JFQVRFKSB7IAotCSAgaW5vZGUtPmlfY3RpbWUudHZfc2VjID0gaXNvX2RhdGUocnItPnUuVEYudGltZXNbY250KytdLnRpbWUsIDApOwotCSAgaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IDA7Ci0JfQotCWlmKHJyLT51LlRGLmZsYWdzICYgVEZfTU9ESUZZKSB7Ci0JICBpbm9kZS0+aV9tdGltZS50dl9zZWMgPSBpc29fZGF0ZShyci0+dS5URi50aW1lc1tjbnQrK10udGltZSwgMCk7Ci0JICBpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gMDsKLQl9Ci0JaWYocnItPnUuVEYuZmxhZ3MgJiBURl9BQ0NFU1MpIHsKLQkgIGlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IGlzb19kYXRlKHJyLT51LlRGLnRpbWVzW2NudCsrXS50aW1lLCAwKTsKLQkgIGlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSAwOwotCX0KLQlpZihyci0+dS5URi5mbGFncyAmIFRGX0FUVFJJQlVURVMpIHsgCi0JICBpbm9kZS0+aV9jdGltZS50dl9zZWMgPSBpc29fZGF0ZShyci0+dS5URi50aW1lc1tjbnQrK10udGltZSwgMCk7Ci0JICBpbm9kZS0+aV9jdGltZS50dl9uc2VjID0gMDsKLQl9IAotCWJyZWFrOwotICAgICAgY2FzZSBTSUcoJ1MnLCdMJyk6Ci0Je2ludCBzbGVuOwotCSBzdHJ1Y3QgU0xfY29tcG9uZW50ICogc2xwOwotCSBzdHJ1Y3QgU0xfY29tcG9uZW50ICogb2xkc2xwOwotCSBzbGVuID0gcnItPmxlbiAtIDU7Ci0JIHNscCA9ICZyci0+dS5TTC5saW5rOwotCSBpbm9kZS0+aV9zaXplID0gc3ltbGlua19sZW47Ci0JIHdoaWxlIChzbGVuID4gMSl7Ci0JICAgcm9vdGZsYWcgPSAwOwotCSAgIHN3aXRjaChzbHAtPmZsYWdzICZ+MSl7Ci0JICAgY2FzZSAwOgotCSAgICAgaW5vZGUtPmlfc2l6ZSArPSBzbHAtPmxlbjsKLQkgICAgIGJyZWFrOwotCSAgIGNhc2UgMjoKLQkgICAgIGlub2RlLT5pX3NpemUgKz0gMTsKLQkgICAgIGJyZWFrOwotCSAgIGNhc2UgNDoKLQkgICAgIGlub2RlLT5pX3NpemUgKz0gMjsKLQkgICAgIGJyZWFrOwotCSAgIGNhc2UgODoKLQkgICAgIHJvb3RmbGFnID0gMTsKLQkgICAgIGlub2RlLT5pX3NpemUgKz0gMTsKLQkgICAgIGJyZWFrOwotCSAgIGRlZmF1bHQ6Ci0JICAgICBwcmludGsoIlN5bWxpbmsgY29tcG9uZW50IGZsYWcgbm90IGltcGxlbWVudGVkXG4iKTsKLQkgICB9Ci0JICAgc2xlbiAtPSBzbHAtPmxlbiArIDI7Ci0JICAgb2xkc2xwID0gc2xwOwotCSAgIHNscCA9IChzdHJ1Y3QgU0xfY29tcG9uZW50ICopICgoKGNoYXIgKikgc2xwKSArIHNscC0+bGVuICsgMik7CisJCWNhc2UgU0lHKCdTJywgJ1AnKToKKwkJCWlmIChjaGVja19zcChyciwgaW5vZGUpKQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCWNhc2UgU0lHKCdDJywgJ0UnKToKKwkJCXJzLmNvbnRfZXh0ZW50ID0gaXNvbnVtXzczMyhyci0+dS5DRS5leHRlbnQpOworCQkJcnMuY29udF9vZmZzZXQgPSBpc29udW1fNzMzKHJyLT51LkNFLm9mZnNldCk7CisJCQlycy5jb250X3NpemUgPSBpc29udW1fNzMzKHJyLT51LkNFLnNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU0lHKCdFJywgJ1InKToKKwkJCUlTT0ZTX1NCKGlub2RlLT5pX3NiKS0+c19yb2NrID0gMTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJJU08gOTY2MCBFeHRlbnNpb25zOiAiKTsKKwkJCXsKKwkJCQlpbnQgcDsKKwkJCQlmb3IgKHAgPSAwOyBwIDwgcnItPnUuRVIubGVuX2lkOyBwKyspCisJCQkJCXByaW50aygiJWMiLCByci0+dS5FUi5kYXRhW3BdKTsKKwkJCX0KKwkJCXByaW50aygiXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFNJRygnUCcsICdYJyk6CisJCQlpbm9kZS0+aV9tb2RlID0gaXNvbnVtXzczMyhyci0+dS5QWC5tb2RlKTsKKwkJCWlub2RlLT5pX25saW5rID0gaXNvbnVtXzczMyhyci0+dS5QWC5uX2xpbmtzKTsKKwkJCWlub2RlLT5pX3VpZCA9IGlzb251bV83MzMocnItPnUuUFgudWlkKTsKKwkJCWlub2RlLT5pX2dpZCA9IGlzb251bV83MzMocnItPnUuUFguZ2lkKTsKKwkJCWJyZWFrOworCQljYXNlIFNJRygnUCcsICdOJyk6CisJCQl7CisJCQkJaW50IGhpZ2gsIGxvdzsKKwkJCQloaWdoID0gaXNvbnVtXzczMyhyci0+dS5QTi5kZXZfaGlnaCk7CisJCQkJbG93ID0gaXNvbnVtXzczMyhyci0+dS5QTi5kZXZfbG93KTsKKwkJCQkvKgorCQkJCSAqIFRoZSBSb2NrIFJpZGdlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IGlmCisJCQkJICogc2l6ZW9mKGRldl90KSA8PSA0LCB0aGVuIHRoZSBoaWdoIGZpZWxkIGlzCisJCQkJICogdW51c2VkLCBhbmQgdGhlIGRldmljZSBudW1iZXIgaXMgY29tcGxldGVseQorCQkJCSAqIHN0b3JlZCBpbiB0aGUgbG93IGZpZWxkLiAgU29tZSB3cml0ZXJzIG1heQorCQkJCSAqIGlnbm9yZSB0aGlzIHN1YnRsZXR5LAorCQkJCSAqIGFuZCBhcyBhIHJlc3VsdCB3ZSB0ZXN0IHRvIHNlZSBpZiB0aGUgZW50aXJlCisJCQkJICogZGV2aWNlIG51bWJlciBpcworCQkJCSAqIHN0b3JlZCBpbiB0aGUgbG93IGZpZWxkLCBhbmQgdXNlIHRoYXQuCisJCQkJICovCisJCQkJaWYgKChsb3cgJiB+MHhmZikgJiYgaGlnaCA9PSAwKSB7CisJCQkJCWlub2RlLT5pX3JkZXYgPQorCQkJCQkgICAgTUtERVYobG93ID4+IDgsIGxvdyAmIDB4ZmYpOworCQkJCX0gZWxzZSB7CisJCQkJCWlub2RlLT5pX3JkZXYgPQorCQkJCQkgICAgTUtERVYoaGlnaCwgbG93KTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTSUcoJ1QnLCAnRicpOgorCQkJLyoKKwkJCSAqIFNvbWUgUlJJUCB3cml0ZXJzIGluY29ycmVjdGx5IHBsYWNlIGN0aW1lIGluIHRoZQorCQkJICogVEZfQ1JFQVRFIGZpZWxkLiBUcnkgdG8gaGFuZGxlIHRoaXMgY29ycmVjdGx5IGZvcgorCQkJICogZWl0aGVyIGNhc2UuCisJCQkgKi8KKwkJCS8qIFJvY2sgcmlkZ2UgbmV2ZXIgYXBwZWFycyBvbiBhIEhpZ2ggU2llcnJhIGRpc2sgKi8KKwkJCWNudCA9IDA7CisJCQlpZiAocnItPnUuVEYuZmxhZ3MgJiBURl9DUkVBVEUpIHsKKwkJCQlpbm9kZS0+aV9jdGltZS50dl9zZWMgPQorCQkJCSAgICBpc29fZGF0ZShyci0+dS5URi50aW1lc1tjbnQrK10udGltZSwKKwkJCQkJICAgICAwKTsKKwkJCQlpbm9kZS0+aV9jdGltZS50dl9uc2VjID0gMDsKKwkJCX0KKwkJCWlmIChyci0+dS5URi5mbGFncyAmIFRGX01PRElGWSkgeworCQkJCWlub2RlLT5pX210aW1lLnR2X3NlYyA9CisJCQkJICAgIGlzb19kYXRlKHJyLT51LlRGLnRpbWVzW2NudCsrXS50aW1lLAorCQkJCQkgICAgIDApOworCQkJCWlub2RlLT5pX210aW1lLnR2X25zZWMgPSAwOworCQkJfQorCQkJaWYgKHJyLT51LlRGLmZsYWdzICYgVEZfQUNDRVNTKSB7CisJCQkJaW5vZGUtPmlfYXRpbWUudHZfc2VjID0KKwkJCQkgICAgaXNvX2RhdGUocnItPnUuVEYudGltZXNbY250KytdLnRpbWUsCisJCQkJCSAgICAgMCk7CisJCQkJaW5vZGUtPmlfYXRpbWUudHZfbnNlYyA9IDA7CisJCQl9CisJCQlpZiAocnItPnUuVEYuZmxhZ3MgJiBURl9BVFRSSUJVVEVTKSB7CisJCQkJaW5vZGUtPmlfY3RpbWUudHZfc2VjID0KKwkJCQkgICAgaXNvX2RhdGUocnItPnUuVEYudGltZXNbY250KytdLnRpbWUsCisJCQkJCSAgICAgMCk7CisJCQkJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTSUcoJ1MnLCAnTCcpOgorCQkJeworCQkJCWludCBzbGVuOworCQkJCXN0cnVjdCBTTF9jb21wb25lbnQgKnNscDsKKwkJCQlzdHJ1Y3QgU0xfY29tcG9uZW50ICpvbGRzbHA7CisJCQkJc2xlbiA9IHJyLT5sZW4gLSA1OworCQkJCXNscCA9ICZyci0+dS5TTC5saW5rOworCQkJCWlub2RlLT5pX3NpemUgPSBzeW1saW5rX2xlbjsKKwkJCQl3aGlsZSAoc2xlbiA+IDEpIHsKKwkJCQkJcm9vdGZsYWcgPSAwOworCQkJCQlzd2l0Y2ggKHNscC0+ZmxhZ3MgJiB+MSkgeworCQkJCQljYXNlIDA6CisJCQkJCQlpbm9kZS0+aV9zaXplICs9CisJCQkJCQkgICAgc2xwLT5sZW47CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAyOgorCQkJCQkJaW5vZGUtPmlfc2l6ZSArPSAxOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgNDoKKwkJCQkJCWlub2RlLT5pX3NpemUgKz0gMjsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDg6CisJCQkJCQlyb290ZmxhZyA9IDE7CisJCQkJCQlpbm9kZS0+aV9zaXplICs9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXByaW50aygiU3ltbGluayBjb21wb25lbnQgZmxhZyAiCisJCQkJCQkJIm5vdCBpbXBsZW1lbnRlZFxuIik7CisJCQkJCX0KKwkJCQkJc2xlbiAtPSBzbHAtPmxlbiArIDI7CisJCQkJCW9sZHNscCA9IHNscDsKKwkJCQkJc2xwID0gKHN0cnVjdCBTTF9jb21wb25lbnQgKikKKwkJCQkJCSgoKGNoYXIgKilzbHApICsgc2xwLT5sZW4gKyAyKTsKIAotCSAgIGlmKHNsZW4gPCAyKSB7Ci0JICAgICBpZiggICAgKChyci0+dS5TTC5mbGFncyAmIDEpICE9IDApIAotCQkgICAgJiYgKChvbGRzbHAtPmZsYWdzICYgMSkgPT0gMCkgKSBpbm9kZS0+aV9zaXplICs9IDE7Ci0JICAgICBicmVhazsKLQkgICB9CisJCQkJCWlmIChzbGVuIDwgMikgeworCQkJCQkJaWYgKCgocnItPnUuU0wuCisJCQkJCQkgICAgICBmbGFncyAmIDEpICE9IDApCisJCQkJCQkgICAgJiYKKwkJCQkJCSAgICAoKG9sZHNscC0+CisJCQkJCQkgICAgICBmbGFncyAmIDEpID09IDApKQorCQkJCQkJCWlub2RlLT5pX3NpemUgKz0KKwkJCQkJCQkgICAgMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CiAKLQkgICAvKgotCSAgICAqIElmIHRoaXMgY29tcG9uZW50IHJlY29yZCBpc24ndCBjb250aW51ZWQsIHRoZW4gYXBwZW5kIGEgJy8nLgotCSAgICAqLwotCSAgIGlmICghcm9vdGZsYWcgJiYgKG9sZHNscC0+ZmxhZ3MgJiAxKSA9PSAwKQotCQkgICBpbm9kZS0+aV9zaXplICs9IDE7Ci0JIH0KLQl9Ci0Jc3ltbGlua19sZW4gPSBpbm9kZS0+aV9zaXplOwotCWJyZWFrOwotICAgICAgY2FzZSBTSUcoJ1InLCdFJyk6Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiQXR0ZW1wdCB0byByZWFkIGlub2RlIGZvciByZWxvY2F0ZWQgZGlyZWN0b3J5XG4iKTsKLQlnb3RvIG91dDsKLSAgICAgIGNhc2UgU0lHKCdDJywnTCcpOgotCUlTT0ZTX0koaW5vZGUpLT5pX2ZpcnN0X2V4dGVudCA9IGlzb251bV83MzMocnItPnUuQ0wubG9jYXRpb24pOwotCXJlbG9jID0gaXNvZnNfaWdldChpbm9kZS0+aV9zYiwgSVNPRlNfSShpbm9kZSktPmlfZmlyc3RfZXh0ZW50LCAwKTsKLQlpZiAoIXJlbG9jKQotCQlnb3RvIG91dDsKLQlpbm9kZS0+aV9tb2RlID0gcmVsb2MtPmlfbW9kZTsKLQlpbm9kZS0+aV9ubGluayA9IHJlbG9jLT5pX25saW5rOwotCWlub2RlLT5pX3VpZCA9IHJlbG9jLT5pX3VpZDsKLQlpbm9kZS0+aV9naWQgPSByZWxvYy0+aV9naWQ7Ci0JaW5vZGUtPmlfcmRldiA9IHJlbG9jLT5pX3JkZXY7Ci0JaW5vZGUtPmlfc2l6ZSA9IHJlbG9jLT5pX3NpemU7Ci0JaW5vZGUtPmlfYmxvY2tzID0gcmVsb2MtPmlfYmxvY2tzOwotCWlub2RlLT5pX2F0aW1lID0gcmVsb2MtPmlfYXRpbWU7Ci0JaW5vZGUtPmlfY3RpbWUgPSByZWxvYy0+aV9jdGltZTsKLQlpbm9kZS0+aV9tdGltZSA9IHJlbG9jLT5pX210aW1lOwotCWlwdXQocmVsb2MpOwotCWJyZWFrOworCQkJCQkvKgorCQkJCQkgKiBJZiB0aGlzIGNvbXBvbmVudCByZWNvcmQgaXNuJ3QKKwkJCQkJICogY29udGludWVkLCB0aGVuIGFwcGVuZCBhICcvJy4KKwkJCQkJICovCisJCQkJCWlmICghcm9vdGZsYWcKKwkJCQkJICAgICYmIChvbGRzbHAtPmZsYWdzICYgMSkgPT0gMCkKKwkJCQkJCWlub2RlLT5pX3NpemUgKz0gMTsKKwkJCQl9CisJCQl9CisJCQlzeW1saW5rX2xlbiA9IGlub2RlLT5pX3NpemU7CisJCQlicmVhazsKKwkJY2FzZSBTSUcoJ1InLCAnRScpOgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQXR0ZW1wdCB0byByZWFkIGlub2RlIGZvciAiCisJCQkJCSJyZWxvY2F0ZWQgZGlyZWN0b3J5XG4iKTsKKwkJCWdvdG8gb3V0OworCQljYXNlIFNJRygnQycsICdMJyk6CisJCQlJU09GU19JKGlub2RlKS0+aV9maXJzdF9leHRlbnQgPQorCQkJICAgIGlzb251bV83MzMocnItPnUuQ0wubG9jYXRpb24pOworCQkJcmVsb2MgPQorCQkJICAgIGlzb2ZzX2lnZXQoaW5vZGUtPmlfc2IsCisJCQkJICAgICAgIElTT0ZTX0koaW5vZGUpLT5pX2ZpcnN0X2V4dGVudCwKKwkJCQkgICAgICAgMCk7CisJCQlpZiAoIXJlbG9jKQorCQkJCWdvdG8gb3V0OworCQkJaW5vZGUtPmlfbW9kZSA9IHJlbG9jLT5pX21vZGU7CisJCQlpbm9kZS0+aV9ubGluayA9IHJlbG9jLT5pX25saW5rOworCQkJaW5vZGUtPmlfdWlkID0gcmVsb2MtPmlfdWlkOworCQkJaW5vZGUtPmlfZ2lkID0gcmVsb2MtPmlfZ2lkOworCQkJaW5vZGUtPmlfcmRldiA9IHJlbG9jLT5pX3JkZXY7CisJCQlpbm9kZS0+aV9zaXplID0gcmVsb2MtPmlfc2l6ZTsKKwkJCWlub2RlLT5pX2Jsb2NrcyA9IHJlbG9jLT5pX2Jsb2NrczsKKwkJCWlub2RlLT5pX2F0aW1lID0gcmVsb2MtPmlfYXRpbWU7CisJCQlpbm9kZS0+aV9jdGltZSA9IHJlbG9jLT5pX2N0aW1lOworCQkJaW5vZGUtPmlfbXRpbWUgPSByZWxvYy0+aV9tdGltZTsKKwkJCWlwdXQocmVsb2MpOworCQkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX1pJU09GUwotICAgICAgY2FzZSBTSUcoJ1onLCdGJyk6Ci0JICAgICAgaWYgKCAhSVNPRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25vY29tcHJlc3MgKSB7Ci0JCSAgICAgIGludCBhbGdvOwotCQkgICAgICBhbGdvID0gaXNvbnVtXzcyMShyci0+dS5aRi5hbGdvcml0aG0pOwotCQkgICAgICBpZiAoIGFsZ28gPT0gU0lHKCdwJywneicpICkgewotCQkJICAgICAgaW50IGJsb2NrX3NoaWZ0ID0gaXNvbnVtXzcxMSgmcnItPnUuWkYucGFybXNbMV0pOwotCQkJICAgICAgaWYgKCBibG9ja19zaGlmdCA8IFBBR0VfQ0FDSEVfU0hJRlQgfHwgYmxvY2tfc2hpZnQgPiAxNyApIHsKLQkJCQkgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJpc29mczogQ2FuJ3QgaGFuZGxlIFpGIGJsb2NrIHNpemUgb2YgMl4lZFxuIiwgYmxvY2tfc2hpZnQpOwotCQkJICAgICAgfSBlbHNlIHsKLQkJCQkvKiBOb3RlOiB3ZSBkb24ndCBjaGFuZ2UgaV9ibG9ja3MgaGVyZSAqLwotCQkJCSAgICAgIElTT0ZTX0koaW5vZGUpLT5pX2ZpbGVfZm9ybWF0ID0gaXNvZnNfZmlsZV9jb21wcmVzc2VkOwotCQkJCS8qIFBhcmFtZXRlcnMgdG8gY29tcHJlc3Npb24gYWxnb3JpdGhtIChoZWFkZXIgc2l6ZSwgYmxvY2sgc2l6ZSkgKi8KLQkJCQkgICAgICBJU09GU19JKGlub2RlKS0+aV9mb3JtYXRfcGFybVswXSA9IGlzb251bV83MTEoJnJyLT51LlpGLnBhcm1zWzBdKTsKLQkJCQkgICAgICBJU09GU19JKGlub2RlKS0+aV9mb3JtYXRfcGFybVsxXSA9IGlzb251bV83MTEoJnJyLT51LlpGLnBhcm1zWzFdKTsKLQkJCQkgICAgICBpbm9kZS0+aV9zaXplID0gaXNvbnVtXzczMyhyci0+dS5aRi5yZWFsX3NpemUpOwotCQkJICAgICAgfQotCQkgICAgICB9IGVsc2UgewotCQkJICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiaXNvZnM6IFVua25vd24gWkYgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAlYyVjXG4iLAotCQkJCSAgICAgcnItPnUuWkYuYWxnb3JpdGhtWzBdLCByci0+dS5aRi5hbGdvcml0aG1bMV0pOwotCQkgICAgICB9Ci0JICAgICAgfQotCSAgICAgIGJyZWFrOworCQljYXNlIFNJRygnWicsICdGJyk6IHsKKwkJCWludCBhbGdvOworCisJCQlpZiAoSVNPRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25vY29tcHJlc3MpCisJCQkJYnJlYWs7CisJCQlhbGdvID0gaXNvbnVtXzcyMShyci0+dS5aRi5hbGdvcml0aG0pOworCQkJaWYgKGFsZ28gPT0gU0lHKCdwJywgJ3onKSkgeworCQkJCWludCBibG9ja19zaGlmdCA9CisJCQkJCWlzb251bV83MTEoJnJyLT51LlpGLnBhcm1zWzFdKTsKKwkJCQlpZiAoYmxvY2tfc2hpZnQgPCBQQUdFX0NBQ0hFX1NISUZUCisJCQkJCQl8fCBibG9ja19zaGlmdCA+IDE3KSB7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlzb2ZzOiAiCisJCQkJCQkiQ2FuJ3QgaGFuZGxlIFpGIGJsb2NrICIKKwkJCQkJCSJzaXplIG9mIDJeJWRcbiIsCisJCQkJCQlibG9ja19zaGlmdCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogTm90ZTogd2UgZG9uJ3QgY2hhbmdlCisJCQkJCSAqIGlfYmxvY2tzIGhlcmUKKwkJCQkJICovCisJCQkJCUlTT0ZTX0koaW5vZGUpLT5pX2ZpbGVfZm9ybWF0ID0KKwkJCQkJCWlzb2ZzX2ZpbGVfY29tcHJlc3NlZDsKKwkJCQkJLyoKKwkJCQkJICogUGFyYW1ldGVycyB0byBjb21wcmVzc2lvbgorCQkJCQkgKiBhbGdvcml0aG0gKGhlYWRlciBzaXplLAorCQkJCQkgKiBibG9jayBzaXplKQorCQkJCQkgKi8KKwkJCQkJSVNPRlNfSShpbm9kZSktPmlfZm9ybWF0X3Bhcm1bMF0gPQorCQkJCQkJaXNvbnVtXzcxMSgmcnItPnUuWkYucGFybXNbMF0pOworCQkJCQlJU09GU19JKGlub2RlKS0+aV9mb3JtYXRfcGFybVsxXSA9CisJCQkJCQlpc29udW1fNzExKCZyci0+dS5aRi5wYXJtc1sxXSk7CisJCQkJCWlub2RlLT5pX3NpemUgPQorCQkJCQkgICAgaXNvbnVtXzczMyhyci0+dS5aRi4KKwkJCQkJCSAgICAgICByZWFsX3NpemUpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiaXNvZnM6IFVua25vd24gWkYgY29tcHJlc3Npb24gIgorCQkJCQkJImFsZ29yaXRobTogJWMlY1xuIiwKKwkJCQkgICAgICAgcnItPnUuWkYuYWxnb3JpdGhtWzBdLAorCQkJCSAgICAgICByci0+dS5aRi5hbGdvcml0aG1bMV0pOworCQkJfQorCQkJYnJlYWs7CisJCX0KICNlbmRpZgotICAgICAgZGVmYXVsdDoKLQlicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgTUFZQkVfQ09OVElOVUUocmVwZWF0LGlub2RlKTsKLSBvdXQ6Ci0gIGlmKGJ1ZmZlcikga2ZyZWUoYnVmZmVyKTsKLSAgcmV0dXJuIDA7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXQgPSByb2NrX2NvbnRpbnVlKCZycyk7CisJaWYgKHJldCA9PSAwKQorCQlnb3RvIHJlcGVhdDsKKwlpZiAocmV0ID09IDEpCisJCXJldCA9IDA7CitvdXQ6CisJa2ZyZWUocnMuYnVmZmVyKTsKKwlyZXR1cm4gcmV0OworZWlvOgorCXJldCA9IC1FSU87CisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyBjaGFyICpnZXRfc3ltbGlua19jaHVuayhjaGFyICpycG50LCBzdHJ1Y3Qgcm9ja19yaWRnZSAqcnIsIGNoYXIgKnBsaW1pdCkKQEAgLTM3NiwzMiArNTY2LDMyIEBACiAJCQlpZiAoc2xwLT5sZW4gPiBwbGltaXQgLSBycG50KQogCQkJCXJldHVybiBOVUxMOwogCQkJbWVtY3B5KHJwbnQsIHNscC0+dGV4dCwgc2xwLT5sZW4pOwotCQkJcnBudCs9c2xwLT5sZW47CisJCQlycG50ICs9IHNscC0+bGVuOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKIAkJCWlmIChycG50ID49IHBsaW1pdCkKIAkJCQlyZXR1cm4gTlVMTDsKLQkJCSpycG50Kys9Jy4nOworCQkJKnJwbnQrKyA9ICcuJzsKIAkJCWJyZWFrOwogCQljYXNlIDQ6CiAJCQlpZiAoMiA+IHBsaW1pdCAtIHJwbnQpCiAJCQkJcmV0dXJuIE5VTEw7Ci0JCQkqcnBudCsrPScuJzsKLQkJCSpycG50Kys9Jy4nOworCQkJKnJwbnQrKyA9ICcuJzsKKwkJCSpycG50KysgPSAnLic7CiAJCQlicmVhazsKIAkJY2FzZSA4OgogCQkJaWYgKHJwbnQgPj0gcGxpbWl0KQogCQkJCXJldHVybiBOVUxMOwogCQkJcm9vdGZsYWcgPSAxOwotCQkJKnJwbnQrKz0nLyc7CisJCQkqcnBudCsrID0gJy8nOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoIlN5bWxpbmsgY29tcG9uZW50IGZsYWcgbm90IGltcGxlbWVudGVkICglZClcbiIsCi0JCQkgICAgIHNscC0+ZmxhZ3MpOworCQkJICAgICAgIHNscC0+ZmxhZ3MpOwogCQl9CiAJCXNsZW4gLT0gc2xwLT5sZW4gKyAyOwogCQlvbGRzbHAgPSBzbHA7Ci0JCXNscCA9IChzdHJ1Y3QgU0xfY29tcG9uZW50ICopICgoY2hhciAqKSBzbHAgKyBzbHAtPmxlbiArIDIpOworCQlzbHAgPSAoc3RydWN0IFNMX2NvbXBvbmVudCAqKSgoY2hhciAqKXNscCArIHNscC0+bGVuICsgMik7CiAKIAkJaWYgKHNsZW4gPCAyKSB7CiAJCQkvKgpAQCAtNDEyLDcgKzYwMiw3IEBACiAJCQkgICAgIShvbGRzbHAtPmZsYWdzICYgMSkpIHsKIAkJCQlpZiAocnBudCA+PSBwbGltaXQpCiAJCQkJCXJldHVybiBOVUxMOwotCQkJCSpycG50Kys9Jy8nOworCQkJCSpycG50KysgPSAnLyc7CiAJCQl9CiAJCQlicmVhazsKIAkJfQpAQCAtNDIzLDU5ICs2MTMsNjEgQEAKIAkJaWYgKCFyb290ZmxhZyAmJiAhKG9sZHNscC0+ZmxhZ3MgJiAxKSkgewogCQkJaWYgKHJwbnQgPj0gcGxpbWl0KQogCQkJCXJldHVybiBOVUxMOwotCQkJKnJwbnQrKz0nLyc7CisJCQkqcnBudCsrID0gJy8nOwogCQl9CiAJfQogCXJldHVybiBycG50OwogfQogCi1pbnQgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiBkZSwKLQkJCSAgIHN0cnVjdCBpbm9kZSAqIGlub2RlKQoraW50IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLSAgIGludCByZXN1bHQ9cGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChkZSxpbm9kZSwwKTsKLSAgIC8qIGlmIHJvY2tyaWRnZSBmbGFnIHdhcyByZXNldCBhbmQgd2UgZGlkbid0IGxvb2sgZm9yIGF0dHJpYnV0ZXMKLSAgICAqIGJlaGluZCBldmVudHVhbCBYQSBhdHRyaWJ1dGVzLCBoYXZlIGEgbG9vayB0aGVyZSAqLwotICAgaWYgKChJU09GU19TQihpbm9kZS0+aV9zYiktPnNfcm9ja19vZmZzZXQ9PS0xKQotICAgICAgICYmKElTT0ZTX1NCKGlub2RlLT5pX3NiKS0+c19yb2NrPT0yKSkKLSAgICAgewotCXJlc3VsdD1wYXJzZV9yb2NrX3JpZGdlX2lub2RlX2ludGVybmFsKGRlLGlub2RlLDE0KTsKLSAgICAgfQotICAgcmV0dXJuIHJlc3VsdDsKKwlpbnQgcmVzdWx0ID0gcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChkZSwgaW5vZGUsIDApOworCisJLyoKKwkgKiBpZiByb2NrcmlkZ2UgZmxhZyB3YXMgcmVzZXQgYW5kIHdlIGRpZG4ndCBsb29rIGZvciBhdHRyaWJ1dGVzCisJICogYmVoaW5kIGV2ZW50dWFsIFhBIGF0dHJpYnV0ZXMsIGhhdmUgYSBsb29rIHRoZXJlCisJICovCisJaWYgKChJU09GU19TQihpbm9kZS0+aV9zYiktPnNfcm9ja19vZmZzZXQgPT0gLTEpCisJICAgICYmIChJU09GU19TQihpbm9kZS0+aV9zYiktPnNfcm9jayA9PSAyKSkgeworCQlyZXN1bHQgPSBwYXJzZV9yb2NrX3JpZGdlX2lub2RlX2ludGVybmFsKGRlLCBpbm9kZSwgMTQpOworCX0KKwlyZXR1cm4gcmVzdWx0OwogfQogCi0vKiByZWFkcGFnZSgpIGZvciBzeW1saW5rczogcmVhZHMgc3ltbGluayBjb250ZW50cyBpbnRvIHRoZSBwYWdlIGFuZCBlaXRoZXIKLSAgIG1ha2VzIGl0IHVwdG9kYXRlIGFuZCByZXR1cm5zIDAgb3IgcmV0dXJucyBlcnJvciAoLUVJTykgKi8KLQorLyoKKyAqIHJlYWRwYWdlKCkgZm9yIHN5bWxpbmtzOiByZWFkcyBzeW1saW5rIGNvbnRlbnRzIGludG8gdGhlIHBhZ2UgYW5kIGVpdGhlcgorICogbWFrZXMgaXQgdXB0b2RhdGUgYW5kIHJldHVybnMgMCBvciByZXR1cm5zIGVycm9yICgtRUlPKQorICovCiBzdGF0aWMgaW50IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7Ci0gICAgICAgIHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTsKKwlzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmVpID0gSVNPRlNfSShpbm9kZSk7CiAJY2hhciAqbGluayA9IGttYXAocGFnZSk7CiAJdW5zaWduZWQgbG9uZyBidWZzaXplID0gSVNPRlNfQlVGRkVSX1NJWkUoaW5vZGUpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJY2hhciAqcnBudCA9IGxpbms7CiAJdW5zaWduZWQgY2hhciAqcG50OwotCXN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqcmF3X2lub2RlOwotCUNPTlRJTlVFX0RFQ0xTOworCXN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqcmF3X2RlOwogCXVuc2lnbmVkIGxvbmcgYmxvY2ssIG9mZnNldDsKIAlpbnQgc2lnOwotCWludCBsZW47Ci0JdW5zaWduZWQgY2hhciAqY2hyOwogCXN0cnVjdCByb2NrX3JpZGdlICpycjsKKwlzdHJ1Y3Qgcm9ja19zdGF0ZSByczsKKwlpbnQgcmV0OwogCiAJaWYgKCFJU09GU19TQihpbm9kZS0+aV9zYiktPnNfcm9jaykKIAkJZ290byBlcnJvcjsKIAorCWluaXRfcm9ja19zdGF0ZSgmcnMsIGlub2RlKTsKIAlibG9jayA9IGVpLT5pX2lnZXQ1X2Jsb2NrOwogCWxvY2tfa2VybmVsKCk7CiAJYmggPSBzYl9icmVhZChpbm9kZS0+aV9zYiwgYmxvY2spOwogCWlmICghYmgpCiAJCWdvdG8gb3V0X25vcmVhZDsKIAotICAgICAgICBvZmZzZXQgPSBlaS0+aV9pZ2V0NV9vZmZzZXQ7Ci0JcG50ID0gKHVuc2lnbmVkIGNoYXIgKikgYmgtPmJfZGF0YSArIG9mZnNldDsKKwlvZmZzZXQgPSBlaS0+aV9pZ2V0NV9vZmZzZXQ7CisJcG50ID0gKHVuc2lnbmVkIGNoYXIgKiliaC0+Yl9kYXRhICsgb2Zmc2V0OwogCi0JcmF3X2lub2RlID0gKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqKSBwbnQ7CisJcmF3X2RlID0gKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqKXBudDsKIAogCS8qCiAJICogSWYgd2UgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHRoZXJlIGlzIHNvbWUgc29ydCBvZiBlcnJvci4KQEAgLTQ4MywyMCArNjc1LDI0IEBACiAJaWYgKG9mZnNldCArICpwbnQgPiBidWZzaXplKQogCQlnb3RvIG91dF9iYWRfc3BhbjsKIAotCS8qIE5vdyB0ZXN0IGZvciBwb3NzaWJsZSBSb2NrIFJpZGdlIGV4dGVuc2lvbnMgd2hpY2ggd2lsbCBvdmVycmlkZQotCSAgIHNvbWUgb2YgdGhlc2UgbnVtYmVycyBpbiB0aGUgaW5vZGUgc3RydWN0dXJlLiAqLworCS8qCisJICogTm93IHRlc3QgZm9yIHBvc3NpYmxlIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyB3aGljaCB3aWxsIG92ZXJyaWRlCisJICogc29tZSBvZiB0aGVzZSBudW1iZXJzIGluIHRoZSBpbm9kZSBzdHJ1Y3R1cmUuCisJICovCiAKLQlTRVRVUF9ST0NLX1JJREdFKHJhd19pbm9kZSwgY2hyLCBsZW4pOworCXNldHVwX3JvY2tfcmlkZ2UocmF3X2RlLCBpbm9kZSwgJnJzKTsKIAotICAgICAgcmVwZWF0OgotCXdoaWxlIChsZW4gPiAyKSB7IC8qIFRoZXJlIG1heSBiZSBvbmUgYnl0ZSBmb3IgcGFkZGluZyBzb21ld2hlcmUgKi8KLQkJcnIgPSAoc3RydWN0IHJvY2tfcmlkZ2UgKikgY2hyOworcmVwZWF0OgorCXdoaWxlIChycy5sZW4gPiAyKSB7IC8qIFRoZXJlIG1heSBiZSBvbmUgYnl0ZSBmb3IgcGFkZGluZyBzb21ld2hlcmUgKi8KKwkJcnIgPSAoc3RydWN0IHJvY2tfcmlkZ2UgKilycy5jaHI7CiAJCWlmIChyci0+bGVuIDwgMykKIAkJCWdvdG8gb3V0OwkvKiBTb21ldGhpbmcgZ290IHNjcmV3ZWQgdXAgaGVyZSAqLwotCQlzaWcgPSBpc29udW1fNzIxKGNocik7Ci0JCWNociArPSByci0+bGVuOwotCQlsZW4gLT0gcnItPmxlbjsKLQkJaWYgKGxlbiA8IDApCisJCXNpZyA9IGlzb251bV83MjEocnMuY2hyKTsKKwkJaWYgKHJvY2tfY2hlY2tfb3ZlcmZsb3coJnJzLCBzaWcpKQorCQkJZ290byBvdXQ7CisJCXJzLmNociArPSByci0+bGVuOworCQlycy5sZW4gLT0gcnItPmxlbjsKKwkJaWYgKHJzLmxlbiA8IDApCiAJCQlnb3RvIG91dDsJLyogY29ycnVwdGVkIGlzb2ZzICovCiAKIAkJc3dpdGNoIChzaWcpIHsKQEAgLTUwNSw3ICs3MDEsOCBAQAogCQkJCWdvdG8gb3V0OwogCQkJYnJlYWs7CiAJCWNhc2UgU0lHKCdTJywgJ1AnKToKLQkJCUNIRUNLX1NQKGdvdG8gb3V0KTsKKwkJCWlmIChjaGVja19zcChyciwgaW5vZGUpKQorCQkJCWdvdG8gb3V0OwogCQkJYnJlYWs7CiAJCWNhc2UgU0lHKCdTJywgJ0wnKToKIAkJCXJwbnQgPSBnZXRfc3ltbGlua19jaHVuayhycG50LCByciwKQEAgLTUxNSwxNCArNzEyLDE4IEBACiAJCQlicmVhazsKIAkJY2FzZSBTSUcoJ0MnLCAnRScpOgogCQkJLyogVGhpcyB0ZWxscyBpcyBpZiB0aGVyZSBpcyBhIGNvbnRpbnVhdGlvbiByZWNvcmQgKi8KLQkJCUNIRUNLX0NFOworCQkJcnMuY29udF9leHRlbnQgPSBpc29udW1fNzMzKHJyLT51LkNFLmV4dGVudCk7CisJCQlycy5jb250X29mZnNldCA9IGlzb251bV83MzMocnItPnUuQ0Uub2Zmc2V0KTsKKwkJCXJzLmNvbnRfc2l6ZSA9IGlzb251bV83MzMocnItPnUuQ0Uuc2l6ZSk7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQogCX0KLQlNQVlCRV9DT05USU5VRShyZXBlYXQsIGlub2RlKTsKLQlpZiAoYnVmZmVyKQotCQlrZnJlZShidWZmZXIpOworCXJldCA9IHJvY2tfY29udGludWUoJnJzKTsKKwlpZiAocmV0ID09IDApCisJCWdvdG8gcmVwZWF0OworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWw7CiAKIAlpZiAocnBudCA9PSBsaW5rKQogCQlnb3RvIGZhaWw7CkBAIC01MzUsMTkgKzczNiwxOCBAQAogCXJldHVybiAwOwogCiAJLyogZXJyb3IgZXhpdCBmcm9tIG1hY3JvICovCi0gICAgICBvdXQ6Ci0JaWYgKGJ1ZmZlcikKLQkJa2ZyZWUoYnVmZmVyKTsKK291dDoKKwlrZnJlZShycy5idWZmZXIpOwogCWdvdG8gZmFpbDsKLSAgICAgIG91dF9ub3JlYWQ6CitvdXRfbm9yZWFkOgogCXByaW50aygidW5hYmxlIHRvIHJlYWQgaS1ub2RlIGJsb2NrIik7CiAJZ290byBmYWlsOwotICAgICAgb3V0X2JhZF9zcGFuOgorb3V0X2JhZF9zcGFuOgogCXByaW50aygic3ltbGluayBzcGFucyBpc285NjYwIGJsb2Nrc1xuIik7Ci0gICAgICBmYWlsOgorZmFpbDoKIAlicmVsc2UoYmgpOwogCXVubG9ja19rZXJuZWwoKTsKLSAgICAgIGVycm9yOgorZXJyb3I6CiAJU2V0UGFnZUVycm9yKHBhZ2UpOwogCWt1bm1hcChwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKQEAgLTU1NSw1ICs3NTUsNSBAQAogfQogCiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGlzb2ZzX3N5bWxpbmtfYW9wcyA9IHsKLQkucmVhZHBhZ2UJPSByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZHBhZ2UKKwkucmVhZHBhZ2UgPSByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZHBhZ2UKIH07CmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmggYi9mcy9pc29mcy9yb2NrLmgKaW5kZXggZGVhZjVjOC4uZWQwOWUyYiAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvcm9jay5oCisrKyBiL2ZzL2lzb2ZzL3JvY2suaApAQCAtMSw4NSArMSw4OCBAQAotLyogVGhlc2Ugc3RydWN0cyBhcmUgdXNlZCBieSB0aGUgc3lzdGVtLXVzZS1zaGFyaW5nIHByb3RvY29sLCBpbiB3aGljaCB0aGUKLSAgIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyBhcmUgZW1iZWRkZWQuICBJdCBpcyBxdWl0ZSBwb3NzaWJsZSB0aGF0IG90aGVyCi0gICBleHRlbnNpb25zIGFyZSBwcmVzZW50IG9uIHRoZSBkaXNrLCBhbmQgdGhpcyBpcyBmaW5lIGFzIGxvbmcgYXMgdGhleQotICAgYWxsIHVzZSBTVVNQICovCisvKgorICogVGhlc2Ugc3RydWN0cyBhcmUgdXNlZCBieSB0aGUgc3lzdGVtLXVzZS1zaGFyaW5nIHByb3RvY29sLCBpbiB3aGljaCB0aGUKKyAqIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyBhcmUgZW1iZWRkZWQuICBJdCBpcyBxdWl0ZSBwb3NzaWJsZSB0aGF0IG90aGVyCisgKiBleHRlbnNpb25zIGFyZSBwcmVzZW50IG9uIHRoZSBkaXNrLCBhbmQgdGhpcyBpcyBmaW5lIGFzIGxvbmcgYXMgdGhleQorICogYWxsIHVzZSBTVVNQCisgKi8KIAotc3RydWN0IFNVX1NQewotICB1bnNpZ25lZCBjaGFyIG1hZ2ljWzJdOwotICB1bnNpZ25lZCBjaGFyIHNraXA7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworc3RydWN0IFNVX1NQX3MgeworCXVuc2lnbmVkIGNoYXIgbWFnaWNbMl07CisJdW5zaWduZWQgY2hhciBza2lwOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBTVV9DRXsKLSAgY2hhciBleHRlbnRbOF07Ci0gIGNoYXIgb2Zmc2V0WzhdOwotICBjaGFyIHNpemVbOF07CitzdHJ1Y3QgU1VfQ0VfcyB7CisJY2hhciBleHRlbnRbOF07CisJY2hhciBvZmZzZXRbOF07CisJY2hhciBzaXplWzhdOwogfTsKIAotc3RydWN0IFNVX0VSewotICB1bnNpZ25lZCBjaGFyIGxlbl9pZDsKLSAgdW5zaWduZWQgY2hhciBsZW5fZGVzOwotICB1bnNpZ25lZCBjaGFyIGxlbl9zcmM7Ci0gIHVuc2lnbmVkIGNoYXIgZXh0X3ZlcjsKLSAgY2hhciBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK3N0cnVjdCBTVV9FUl9zIHsKKwl1bnNpZ25lZCBjaGFyIGxlbl9pZDsKKwl1bnNpZ25lZCBjaGFyIGxlbl9kZXM7CisJdW5zaWduZWQgY2hhciBsZW5fc3JjOworCXVuc2lnbmVkIGNoYXIgZXh0X3ZlcjsKKwljaGFyIGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IFJSX1JSewotICBjaGFyIGZsYWdzWzFdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK3N0cnVjdCBSUl9SUl9zIHsKKwljaGFyIGZsYWdzWzFdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBSUl9QWHsKLSAgY2hhciBtb2RlWzhdOwotICBjaGFyIG5fbGlua3NbOF07Ci0gIGNoYXIgdWlkWzhdOwotICBjaGFyIGdpZFs4XTsKK3N0cnVjdCBSUl9QWF9zIHsKKwljaGFyIG1vZGVbOF07CisJY2hhciBuX2xpbmtzWzhdOworCWNoYXIgdWlkWzhdOworCWNoYXIgZ2lkWzhdOwogfTsKIAotc3RydWN0IFJSX1BOewotICBjaGFyIGRldl9oaWdoWzhdOwotICBjaGFyIGRldl9sb3dbOF07CitzdHJ1Y3QgUlJfUE5fcyB7CisJY2hhciBkZXZfaGlnaFs4XTsKKwljaGFyIGRldl9sb3dbOF07CiB9OwogCitzdHJ1Y3QgU0xfY29tcG9uZW50IHsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgbGVuOworCWNoYXIgdGV4dFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgU0xfY29tcG9uZW50ewotICB1bnNpZ25lZCBjaGFyIGZsYWdzOwotICB1bnNpZ25lZCBjaGFyIGxlbjsKLSAgY2hhciB0ZXh0WzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK3N0cnVjdCBSUl9TTF9zIHsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzOworCXN0cnVjdCBTTF9jb21wb25lbnQgbGluazsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgUlJfU0x7Ci0gIHVuc2lnbmVkIGNoYXIgZmxhZ3M7Ci0gIHN0cnVjdCBTTF9jb21wb25lbnQgbGluazsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CitzdHJ1Y3QgUlJfTk1fcyB7CisJdW5zaWduZWQgY2hhciBmbGFnczsKKwljaGFyIG5hbWVbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IFJSX05NewotICB1bnNpZ25lZCBjaGFyIGZsYWdzOwotICBjaGFyIG5hbWVbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgUlJfQ0x7Ci0gIGNoYXIgbG9jYXRpb25bOF07CitzdHJ1Y3QgUlJfQ0xfcyB7CisJY2hhciBsb2NhdGlvbls4XTsKIH07CiAKLXN0cnVjdCBSUl9QTHsKLSAgY2hhciBsb2NhdGlvbls4XTsKK3N0cnVjdCBSUl9QTF9zIHsKKwljaGFyIGxvY2F0aW9uWzhdOwogfTsKIAotc3RydWN0IHN0YW1wewotICBjaGFyIHRpbWVbN107Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworc3RydWN0IHN0YW1wIHsKKwljaGFyIHRpbWVbN107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IFJSX1RGewotICBjaGFyIGZsYWdzOwotICBzdHJ1Y3Qgc3RhbXAgdGltZXNbMF07ICAvKiBWYXJpYWJsZSBudW1iZXIgb2YgdGhlc2UgYmVhc3RzICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworc3RydWN0IFJSX1RGX3MgeworCWNoYXIgZmxhZ3M7CisJc3RydWN0IHN0YW1wIHRpbWVzWzBdOwkvKiBWYXJpYWJsZSBudW1iZXIgb2YgdGhlc2UgYmVhc3RzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogTGludXgtc3BlY2lmaWMgZXh0ZW5zaW9uIGZvciB0cmFuc3BhcmVudCBkZWNvbXByZXNzaW9uICovCi1zdHJ1Y3QgUlJfWkZ7Ci0gIGNoYXIgYWxnb3JpdGhtWzJdOwotICBjaGFyIHBhcm1zWzJdOwotICBjaGFyIHJlYWxfc2l6ZVs4XTsKK3N0cnVjdCBSUl9aRl9zIHsKKwljaGFyIGFsZ29yaXRobVsyXTsKKwljaGFyIHBhcm1zWzJdOworCWNoYXIgcmVhbF9zaXplWzhdOwogfTsKIAotLyogVGhlc2UgYXJlIHRoZSBiaXRzIGFuZCB0aGVpciBtZWFuaW5ncyBmb3IgZmxhZ3MgaW4gdGhlIFRGIHN0cnVjdHVyZS4gKi8KKy8qCisgKiBUaGVzZSBhcmUgdGhlIGJpdHMgYW5kIHRoZWlyIG1lYW5pbmdzIGZvciBmbGFncyBpbiB0aGUgVEYgc3RydWN0dXJlLgorICovCiAjZGVmaW5lIFRGX0NSRUFURSAxCiAjZGVmaW5lIFRGX01PRElGWSAyCiAjZGVmaW5lIFRGX0FDQ0VTUyA0CkBAIC04OSwzMSArOTIsMzEgQEAKICNkZWZpbmUgVEZfRUZGRUNUSVZFIDY0CiAjZGVmaW5lIFRGX0xPTkdfRk9STSAxMjgKIAotc3RydWN0IHJvY2tfcmlkZ2V7Ci0gIGNoYXIgc2lnbmF0dXJlWzJdOwotICB1bnNpZ25lZCBjaGFyIGxlbjsKLSAgdW5zaWduZWQgY2hhciB2ZXJzaW9uOwotICB1bmlvbnsKLSAgICBzdHJ1Y3QgU1VfU1AgU1A7Ci0gICAgc3RydWN0IFNVX0NFIENFOwotICAgIHN0cnVjdCBTVV9FUiBFUjsKLSAgICBzdHJ1Y3QgUlJfUlIgUlI7Ci0gICAgc3RydWN0IFJSX1BYIFBYOwotICAgIHN0cnVjdCBSUl9QTiBQTjsKLSAgICBzdHJ1Y3QgUlJfU0wgU0w7Ci0gICAgc3RydWN0IFJSX05NIE5NOwotICAgIHN0cnVjdCBSUl9DTCBDTDsKLSAgICBzdHJ1Y3QgUlJfUEwgUEw7Ci0gICAgc3RydWN0IFJSX1RGIFRGOwotICAgIHN0cnVjdCBSUl9aRiBaRjsKLSAgfSB1Oworc3RydWN0IHJvY2tfcmlkZ2UgeworCWNoYXIgc2lnbmF0dXJlWzJdOworCXVuc2lnbmVkIGNoYXIgbGVuOworCXVuc2lnbmVkIGNoYXIgdmVyc2lvbjsKKwl1bmlvbiB7CisJCXN0cnVjdCBTVV9TUF9zIFNQOworCQlzdHJ1Y3QgU1VfQ0VfcyBDRTsKKwkJc3RydWN0IFNVX0VSX3MgRVI7CisJCXN0cnVjdCBSUl9SUl9zIFJSOworCQlzdHJ1Y3QgUlJfUFhfcyBQWDsKKwkJc3RydWN0IFJSX1BOX3MgUE47CisJCXN0cnVjdCBSUl9TTF9zIFNMOworCQlzdHJ1Y3QgUlJfTk1fcyBOTTsKKwkJc3RydWN0IFJSX0NMX3MgQ0w7CisJCXN0cnVjdCBSUl9QTF9zIFBMOworCQlzdHJ1Y3QgUlJfVEZfcyBURjsKKwkJc3RydWN0IFJSX1pGX3MgWkY7CisJfSB1OwogfTsKIAotI2RlZmluZSBSUl9QWCAxICAgLyogUE9TSVggYXR0cmlidXRlcyAqLwotI2RlZmluZSBSUl9QTiAyICAgLyogUE9TSVggZGV2aWNlcyAqLwotI2RlZmluZSBSUl9TTCA0ICAgLyogU3ltYm9saWMgbGluayAqLwotI2RlZmluZSBSUl9OTSA4ICAgLyogQWx0ZXJuYXRlIE5hbWUgKi8KLSNkZWZpbmUgUlJfQ0wgMTYgIC8qIENoaWxkIGxpbmsgKi8KLSNkZWZpbmUgUlJfUEwgMzIgIC8qIFBhcmVudCBsaW5rICovCi0jZGVmaW5lIFJSX1JFIDY0ICAvKiBSZWxvY2F0aW9uIGRpcmVjdG9yeSAqLwotI2RlZmluZSBSUl9URiAxMjggLyogVGltZXN0YW1wcyAqLworI2RlZmluZSBSUl9QWCAxCQkJLyogUE9TSVggYXR0cmlidXRlcyAqLworI2RlZmluZSBSUl9QTiAyCQkJLyogUE9TSVggZGV2aWNlcyAqLworI2RlZmluZSBSUl9TTCA0CQkJLyogU3ltYm9saWMgbGluayAqLworI2RlZmluZSBSUl9OTSA4CQkJLyogQWx0ZXJuYXRlIE5hbWUgKi8KKyNkZWZpbmUgUlJfQ0wgMTYJCS8qIENoaWxkIGxpbmsgKi8KKyNkZWZpbmUgUlJfUEwgMzIJCS8qIFBhcmVudCBsaW5rICovCisjZGVmaW5lIFJSX1JFIDY0CQkvKiBSZWxvY2F0aW9uIGRpcmVjdG9yeSAqLworI2RlZmluZSBSUl9URiAxMjgJCS8qIFRpbWVzdGFtcHMgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmcy9hY2wuYyBiL2ZzL2pmcy9hY2wuYwppbmRleCA4ZDJhOWFiLi4zMGEyYmY5IDEwMDY0NAotLS0gYS9mcy9qZnMvYWNsLmMKKysrIGIvZnMvamZzL2FjbC5jCkBAIC03MCw4ICs3MCw3IEBACiAJCWlmICghSVNfRVJSKGFjbCkpCiAJCQkqcF9hY2wgPSBwb3NpeF9hY2xfZHVwKGFjbCk7CiAJfQotCWlmICh2YWx1ZSkKLQkJa2ZyZWUodmFsdWUpOworCWtmcmVlKHZhbHVlKTsKIAlyZXR1cm4gYWNsOwogfQogCkBAIC0xMTIsOCArMTExLDcgQEAKIAl9CiAJcmMgPSBfX2pmc19zZXR4YXR0cihpbm9kZSwgZWFfbmFtZSwgdmFsdWUsIHNpemUsIDApOwogb3V0OgotCWlmICh2YWx1ZSkKLQkJa2ZyZWUodmFsdWUpOworCWtmcmVlKHZhbHVlKTsKIAogCWlmICghcmMpIHsKIAkJaWYgKCpwX2FjbCAmJiAoKnBfYWNsICE9IEpGU19BQ0xfTk9UX0NBQ0hFRCkpCmRpZmYgLS1naXQgYS9mcy9qZnMvZmlsZS5jIGIvZnMvamZzL2ZpbGUuYwppbmRleCBhODdiMDZmLi5jMmMxOWM5IDEwMDY0NAotLS0gYS9mcy9qZnMvZmlsZS5jCisrKyBiL2ZzL2pmcy9maWxlLmMKQEAgLTEsNiArMSw2IEBACiAvKgotICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4sIDIwMDAtMjAwMgotICogICBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIENocmlzdG9waCBIZWxsd2lnLCAyMDAxLTIwMDIKKyAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnAuLCAyMDAwLTIwMDIKKyAqICAgUG9ydGlvbnMgQ29weXJpZ2h0IChDKSBDaHJpc3RvcGggSGVsbHdpZywgMjAwMS0yMDAyCiAgKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDE2ICsxOSwxMyBAQAogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlICJqZnNfaW5jb3JlLmgiCisjaW5jbHVkZSAiamZzX2lub2RlLmgiCiAjaW5jbHVkZSAiamZzX2RtYXAuaCIKICNpbmNsdWRlICJqZnNfdHhubWdyLmgiCiAjaW5jbHVkZSAiamZzX3hhdHRyLmgiCiAjaW5jbHVkZSAiamZzX2FjbC5oIgogI2luY2x1ZGUgImpmc19kZWJ1Zy5oIgogCi0KLWV4dGVybiBpbnQgamZzX2NvbW1pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKLWV4dGVybiB2b2lkIGpmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKik7Ci0KIGludCBqZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CmRpZmYgLS1naXQgYS9mcy9qZnMvaW5vZGUuYyBiL2ZzL2pmcy9pbm9kZS5jCmluZGV4IDI0YTY4OTEuLjIxMzcxMzggMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9pbm9kZS5jCisrKyBiL2ZzL2pmcy9pbm9kZS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSAiamZzX2luY29yZS5oIgorI2luY2x1ZGUgImpmc19pbm9kZS5oIgogI2luY2x1ZGUgImpmc19maWxzeXMuaCIKICNpbmNsdWRlICJqZnNfaW1hcC5oIgogI2luY2x1ZGUgImpmc19leHRlbnQuaCIKQEAgLTMwLDE0ICszMSw2IEBACiAjaW5jbHVkZSAiamZzX2RlYnVnLmgiCiAKIAotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqZnNfZGlyX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqZnNfZmlsZV9vcGVyYXRpb25zOwotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfYW9wczsKLWV4dGVybiBpbnQgZnJlZVplcm9MaW5rKHN0cnVjdCBpbm9kZSAqKTsKLQogdm9pZCBqZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWlmIChkaVJlYWQoaW5vZGUpKSB7IApAQCAtMTM2LDcgKzEyOSw3IEBACiAJamZzX2luZm8oIkluIGpmc19kZWxldGVfaW5vZGUsIGlub2RlID0gMHglcCIsIGlub2RlKTsKIAogCWlmICh0ZXN0X2NmbGFnKENPTU1JVF9GcmVld21hcCwgaW5vZGUpKQotCQlmcmVlWmVyb0xpbmsoaW5vZGUpOworCQlqZnNfZnJlZV96ZXJvX2xpbmsoaW5vZGUpOwogCiAJZGlGcmVlKGlub2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kZWJ1Zy5jIGIvZnMvamZzL2pmc19kZWJ1Zy5jCmluZGV4IDkxYTBhODguLjRjYWVhNmIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZGVidWcuYworKysgYi9mcy9qZnMvamZzX2RlYnVnLmMKQEAgLTU4LDggKzU4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYmFzZTsKICNpZmRlZiBDT05GSUdfSkZTX0RFQlVHCi1leHRlcm4gcmVhZF9wcm9jX3QgamZzX3R4YW5jaG9yX3JlYWQ7Ci0KIHN0YXRpYyBpbnQgbG9nbGV2ZWxfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKIAkJCSBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewpAQCAtOTcsMTQgKzk1LDYgQEAKIH0KICNlbmRpZgogCi0KLSNpZmRlZiBDT05GSUdfSkZTX1NUQVRJU1RJQ1MKLWV4dGVybiByZWFkX3Byb2NfdCBqZnNfbG1zdGF0c19yZWFkOwotZXh0ZXJuIHJlYWRfcHJvY190IGpmc190eHN0YXRzX3JlYWQ7Ci1leHRlcm4gcmVhZF9wcm9jX3QgamZzX3h0c3RhdF9yZWFkOwotZXh0ZXJuIHJlYWRfcHJvY190IGpmc19tcHN0YXRfcmVhZDsKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHsKIAljb25zdCBjaGFyCSpuYW1lOwogCXJlYWRfcHJvY190CSpyZWFkX2ZuOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kZWJ1Zy5oIGIvZnMvamZzL2pmc19kZWJ1Zy5oCmluZGV4IGEzODA3OWEuLmRkZmZiYmQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZGVidWcuaAorKysgYi9mcy9qZnMvamZzX2RlYnVnLmgKQEAgLTEsNiArMSw2IEBACiAvKgotICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4sIDIwMDAtMjAwMgotICogICBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIENocmlzdG9waCBIZWxsd2lnLCAyMDAxLTIwMDIKKyAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnAuLCAyMDAwLTIwMDIKKyAqICAgUG9ydGlvbnMgQ29weXJpZ2h0IChDKSBDaHJpc3RvcGggSGVsbHdpZywgMjAwMS0yMDAyCiAgKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTMxLDcgKzMxLDkgQEAKICAqIENPTkZJR19KRlNfREVCVUcgb3IgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIGRlZmluZWQKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpICYmIChkZWZpbmVkKENPTkZJR19KRlNfREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX0pGU19TVEFUSVNUSUNTKSkKLQkjZGVmaW5lIFBST0NfRlNfSkZTCisjZGVmaW5lIFBST0NfRlNfSkZTCitleHRlcm4gdm9pZCBqZnNfcHJvY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgamZzX3Byb2NfY2xlYW4odm9pZCk7CiAjZW5kaWYKIAogLyoKQEAgLTY1LDggKzY3LDggQEAKIAogZXh0ZXJuIGludCBqZnNsb2dsZXZlbDsKIAotLyogZHVtcCBtZW1vcnkgY29udGVudHMgKi8KIGV4dGVybiB2b2lkIGR1bXBfbWVtKGNoYXIgKmxhYmVsLCB2b2lkICpkYXRhLCBpbnQgbGVuZ3RoKTsKK2V4dGVybiBpbnQgamZzX3R4YW5jaG9yX3JlYWQoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsKIAogLyogaW5mb3JtYXRpb24gbWVzc2FnZTogZS5nLiwgY29uZmlndXJhdGlvbiwgbWFqb3IgZXZlbnQgKi8KICNkZWZpbmUgamZzX2luZm8oZm10LCBhcmcuLi4pIGRvIHsJCQlcCkBAIC0xMTAsNiArMTEyLDExIEBACiAgKgktLS0tLS0tLS0tCiAgKi8KICNpZmRlZglDT05GSUdfSkZTX1NUQVRJU1RJQ1MKK2V4dGVybiBpbnQgamZzX2xtc3RhdHNfcmVhZChjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOworZXh0ZXJuIGludCBqZnNfdHhzdGF0c19yZWFkKGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QsIGludCwgaW50ICosIHZvaWQgKik7CitleHRlcm4gaW50IGpmc19tcHN0YXRfcmVhZChjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOworZXh0ZXJuIGludCBqZnNfeHRzdGF0X3JlYWQoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsKKwogI2RlZmluZQlJTkNSRU1FTlQoeCkJCSgoeCkrKykKICNkZWZpbmUJREVDUkVNRU5UKHgpCQkoKHgpLS0pCiAjZGVmaW5lCUhJR0hXQVRFUk1BUksoeCx5KQkoKHgpID0gbWF4KCh4KSwgKHkpKSkKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZG1hcC5jIGIvZnMvamZzL2pmc19kbWFwLmMKaW5kZXggNjkwMDdmZC4uY2NlZDJmZSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19kbWFwLmMKKysrIGIvZnMvamZzL2pmc19kbWFwLmMKQEAgLTI3Miw3ICsyNzIsNiBAQAogaW50IGRiVW5tb3VudChzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgaW50IG1vdW50ZXJyb3IpCiB7CiAJc3RydWN0IGJtYXAgKmJtcCA9IEpGU19TQkkoaXBibWFwLT5pX3NiKS0+Ym1hcDsKLQlpbnQgaTsKIAogCWlmICghKG1vdW50ZXJyb3IgfHwgaXNSZWFkT25seShpcGJtYXApKSkKIAkJZGJTeW5jKGlwYm1hcCk7CkBAIC0yODIsMTQgKzI4MSw2IEBACiAJICovCiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaXBibWFwLT5pX21hcHBpbmcsIDApOwogCi0JLyoKLQkgKiBTYW5pdHkgQ2hlY2sKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYm1wLT5kYl9udW1hZzsgaSsrKQotCQlpZiAoYXRvbWljX3JlYWQoJmJtcC0+ZGJfYWN0aXZlW2ldKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiZGJVbm1vdW50OiBkYl9hY3RpdmVbJWRdID0gJWRcbiIsCi0JCQkgICAgICAgaSwgYXRvbWljX3JlYWQoJmJtcC0+ZGJfYWN0aXZlW2ldKSk7Ci0KIAkvKiBmcmVlIHRoZSBtZW1vcnkgZm9yIHRoZSBpbi1tZW1vcnkgYm1hcC4gKi8KIAlrZnJlZShibXApOwogCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2R0cmVlLmMgYi9mcy9qZnMvamZzX2R0cmVlLmMKaW5kZXggYWM0MWY3Mi4uODY3NmFlZSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19kdHJlZS5jCisrKyBiL2ZzL2pmcy9qZnNfZHRyZWUuYwpAQCAtMjkzMSw2ICsyOTMxLDkgQEAKIAlBU1NFUlQocC0+aGVhZGVyLmZsYWcgJiBCVF9MRUFGKTsKIAogCXRsY2sgPSB0eExvY2sodGlkLCBpbm9kZSwgbXAsIHRsY2tEVFJFRSB8IHRsY2tFTlRSWSk7CisJaWYgKEJUX0lTX1JPT1QobXApKQorCQl0bGNrLT50eXBlIHw9IHRsY2tCVFJPT1Q7CisKIAlkdGxjayA9IChzdHJ1Y3QgZHRfbG9jayAqKSAmdGxjay0+bG9jazsKIAogCXN0YmwgPSBEVF9HRVRTVEJMKHApOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19leHRlbnQuYyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKaW5kZXggMTk1M2FjYi4uNDg3OTYwMyAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19leHRlbnQuYworKysgYi9mcy9qZnMvamZzX2V4dGVudC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgImpmc19pbmNvcmUuaCIKKyNpbmNsdWRlICJqZnNfaW5vZGUuaCIKICNpbmNsdWRlICJqZnNfc3VwZXJibG9jay5oIgogI2luY2x1ZGUgImpmc19kbWFwLmgiCiAjaW5jbHVkZSAiamZzX2V4dGVudC5oIgpAQCAtMzMsMTIgKzM0LDYgQEAKICNlbmRpZgogc3RhdGljIHM2NCBleHRSb3VuZERvd24oczY0IG5iKTsKIAotLyoKLSAqIGV4dGVybmFsIHJlZmVyZW5jZXMKLSAqLwotZXh0ZXJuIGludCBqZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwotCi0KICNkZWZpbmUgRFBEKGEpICAgICAgICAgIChwcmludGsoIihhKTogJWRcbiIsKGEpKSkKICNkZWZpbmUgRFBDKGEpICAgICAgICAgIChwcmludGsoIihhKTogJWNcbiIsKGEpKSkKICNkZWZpbmUgRFBMMShhKQkJCQkJXApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbWFwLmMgYi9mcy9qZnMvamZzX2ltYXAuYwppbmRleCA3YWNmZjJjLi45NzFhZjI5IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2ltYXAuYworKysgYi9mcy9qZnMvamZzX2ltYXAuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAKICNpbmNsdWRlICJqZnNfaW5jb3JlLmgiCisjaW5jbHVkZSAiamZzX2lub2RlLmgiCiAjaW5jbHVkZSAiamZzX2ZpbHN5cy5oIgogI2luY2x1ZGUgImpmc19kaW5vZGUuaCIKICNpbmNsdWRlICJqZnNfZG1hcC5oIgpAQCAtNjksMTEgKzcwLDYgQEAKICNkZWZpbmUgQUdfVU5MT0NLKGltYXAsYWdubykJCXVwKCZpbWFwLT5pbV9hZ2xvY2tbYWdub10pCiAKIC8qCi0gKiBleHRlcm5hbCByZWZlcmVuY2VzCi0gKi8KLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmc19hb3BzOwotCi0vKgogICogZm9yd2FyZCByZWZlcmVuY2VzCiAgKi8KIHN0YXRpYyBpbnQgZGlBbGxvY0FHKHN0cnVjdCBpbm9tYXAgKiwgaW50LCBib29sZWFuX3QsIHN0cnVjdCBpbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW5vZGUuYyBiL2ZzL2pmcy9qZnNfaW5vZGUuYwppbmRleCA4NGYyNDU5Li4yYWY1ZWZiIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2lub2RlLmMKKysrIGIvZnMvamZzL2pmc19pbm9kZS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgImpmc19pbmNvcmUuaCIKKyNpbmNsdWRlICJqZnNfaW5vZGUuaCIKICNpbmNsdWRlICJqZnNfZmlsc3lzLmgiCiAjaW5jbHVkZSAiamZzX2ltYXAuaCIKICNpbmNsdWRlICJqZnNfZGlub2RlLmgiCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2lub2RlLmggYi9mcy9qZnMvamZzX2lub2RlLmgKaW5kZXggM2RmOTFmYi4uYjU0YmFjNSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbm9kZS5oCisrKyBiL2ZzL2pmcy9qZnNfaW5vZGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLiwgMjAwMC0yMDAxCisgKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLiwgMjAwMC0yMDAxCiAgKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDUgKzE5LDIyIEBACiAjZGVmaW5lIF9IX0pGU19JTk9ERQogCiBleHRlcm4gc3RydWN0IGlub2RlICppYWxsb2Moc3RydWN0IGlub2RlICosIHVtb2RlX3QpOworZXh0ZXJuIGludCBqZnNfZnN5bmMoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgamZzX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludCBqZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIGludCBqZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlKiwgaW50KTsKK2V4dGVybiB2b2lkIGpmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgamZzX2RpcnR5X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGpmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBqZnNfdHJ1bmNhdGVfbm9sb2NrKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3QpOworZXh0ZXJuIHZvaWQgamZzX2ZyZWVfemVyb19saW5rKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpqZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCitleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfYW9wczsKK2V4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqZnNfZGlyX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpmc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zOwogI2VuZGlmCQkJCS8qIF9IX0pGU19JTk9ERSAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19sb2dtZ3IuYyBiL2ZzL2pmcy9qZnNfbG9nbWdyLmMKaW5kZXggZGZhMTIwMC4uN2M4Mzg3ZSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19sb2dtZ3IuYworKysgYi9mcy9qZnMvamZzX2xvZ21nci5jCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiamZzX2luY29yZS5oIgogI2luY2x1ZGUgImpmc19maWxzeXMuaCIKICNpbmNsdWRlICJqZnNfbWV0YXBhZ2UuaCIKKyNpbmNsdWRlICJqZnNfc3VwZXJibG9jay5oIgogI2luY2x1ZGUgImpmc190eG5tZ3IuaCIKICNpbmNsdWRlICJqZnNfZGVidWcuaCIKIApAQCAtMTY3LDE0ICsxNjgsNiBAQAogc3RhdGljIERFQ0xBUkVfTVVURVgoamZzX2xvZ19zZW0pOwogCiAvKgotICogZXh0ZXJuYWwgcmVmZXJlbmNlcwotICovCi1leHRlcm4gdm9pZCB0eExhenlVbmxvY2soc3RydWN0IHRibG9jayAqIHRibGspOwotZXh0ZXJuIGludCBqZnNfc3RvcF90aHJlYWRzOwotZXh0ZXJuIHN0cnVjdCBjb21wbGV0aW9uIGpmc0lPd2FpdDsKLWV4dGVybiBpbnQgamZzX3Rsb2Nrc19sb3c7Ci0KLS8qCiAgKiBmb3J3YXJkIHJlZmVyZW5jZXMKICAqLwogc3RhdGljIGludCBsbVdyaXRlUmVjb3JkKHN0cnVjdCBqZnNfbG9nICogbG9nLCBzdHJ1Y3QgdGJsb2NrICogdGJsaywKQEAgLTE2MjQsNiArMTYxNyw4IEBACiAJCX0KIAl9CiAJYXNzZXJ0KGxpc3RfZW1wdHkoJmxvZy0+Y3F1ZXVlKSk7CisKKyNpZmRlZiBDT05GSUdfSkZTX0RFQlVHCiAJaWYgKCFsaXN0X2VtcHR5KCZsb2ctPnN5bmNsaXN0KSkgewogCQlzdHJ1Y3QgbG9nc3luY2JsayAqbHA7CiAKQEAgLTE2MzgsOSArMTYzMyw4IEBACiAJCQkJZHVtcF9tZW0oIm9ycGhhbiB0YmxvY2siLCBscCwKIAkJCQkJIHNpemVvZihzdHJ1Y3QgdGJsb2NrKSk7CiAJCX0KLS8vCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLS8vCQlzY2hlZHVsZSgpOwogCX0KKyNlbmRpZgogCS8vYXNzZXJ0KGxpc3RfZW1wdHkoJmxvZy0+c3luY2xpc3QpKTsKIAljbGVhcl9iaXQobG9nX0ZMVVNILCAmbG9nLT5mbGFnKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbG9nbWdyLmggYi9mcy9qZnMvamZzX2xvZ21nci5oCmluZGV4IDUxMjkxZmIuLjc0NzExNGMgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbG9nbWdyLmgKKysrIGIvZnMvamZzL2pmc19sb2dtZ3IuaApAQCAtNTA3LDYgKzUwNyw4IEBACiBleHRlcm4gaW50IGxtTG9nU2h1dGRvd24oc3RydWN0IGpmc19sb2cgKiBsb2cpOwogZXh0ZXJuIGludCBsbUxvZ0luaXQoc3RydWN0IGpmc19sb2cgKiBsb2cpOwogZXh0ZXJuIGludCBsbUxvZ0Zvcm1hdChzdHJ1Y3QgamZzX2xvZyAqbG9nLCBzNjQgbG9nQWRkcmVzcywgaW50IGxvZ1NpemUpOworZXh0ZXJuIGludCBsbUdyb3VwQ29tbWl0KHN0cnVjdCBqZnNfbG9nICosIHN0cnVjdCB0YmxvY2sgKik7CitleHRlcm4gaW50IGpmc0lPV2FpdCh2b2lkICopOwogZXh0ZXJuIHZvaWQgamZzX2ZsdXNoX2pvdXJuYWwoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCB3YWl0KTsKIGV4dGVybiB2b2lkIGpmc19zeW5jcHQoc3RydWN0IGpmc19sb2cgKmxvZyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwppbmRleCA0MWJmMDc4Li42YzU0ODVkIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX21ldGFwYWdlLmMKKysrIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICphbGxvY19tZXRhcGFnZShpbnQgZ2ZwX21hc2spCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqYWxsb2NfbWV0YXBhZ2UodW5zaWduZWQgaW50IGdmcF9tYXNrKQogewogCXJldHVybiBtZW1wb29sX2FsbG9jKG1ldGFwYWdlX21lbXBvb2wsIGdmcF9tYXNrKTsKIH0KQEAgLTcyNiwxMiArNzI2LDEyIEBACiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogfQogCi1leHRlcm4gdm9pZCBob2xkX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCit2b2lkIGhvbGRfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKIHsKIAlsb2NrX3BhZ2UobXAtPnBhZ2UpOwogfQogCi1leHRlcm4gdm9pZCBwdXRfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKK3ZvaWQgcHV0X21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCiB7CiAJaWYgKG1wLT5jb3VudCB8fCBtcC0+bm9ob21lb2spIHsKIAkJLyogU29tZW9uZSBlbHNlIHdpbGwgcmVsZWFzZSB0aGlzICovCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmggYi9mcy9qZnMvamZzX21ldGFwYWdlLmgKaW5kZXggOTkxZTlmYi4uZjBiN2QzMiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19tZXRhcGFnZS5oCisrKyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuaApAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLiwgMjAwMC0yMDAyCi0gKiAgIFBvcnRpb25zIENvcHlyaWdodCAoYykgQ2hyaXN0b3BoIEhlbGx3aWcsIDIwMDEtMjAwMgorICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4sIDIwMDAtMjAwMgorICogICBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIENocmlzdG9waCBIZWxsd2lnLCAyMDAxLTIwMDIKICAqCiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTgsNiArNTgsOCBAQAogI2RlZmluZSBtYXJrX21ldGFwYWdlX2RpcnR5KG1wKSBzZXRfYml0KE1FVEFfZGlydHksICYobXApLT5mbGFnKQogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCitleHRlcm4gaW50IG1ldGFwYWdlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBtZXRhcGFnZV9leGl0KHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBtZXRhcGFnZSAqX19nZXRfbWV0YXBhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgbGJsb2NrLCB1bnNpZ25lZCBpbnQgc2l6ZSwKIAkJCQkgIGludCBhYnNvbHV0ZSwgdW5zaWduZWQgbG9uZyBuZXcpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19zdXBlcmJsb2NrLmggYi9mcy9qZnMvamZzX3N1cGVyYmxvY2suaAppbmRleCBhYjA1NjZmLi5mY2Y3ODFiIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3N1cGVyYmxvY2suaAorKysgYi9mcy9qZnMvamZzX3N1cGVyYmxvY2suaApAQCAtMTA5LDUgKzEwOSwxNiBAQAogZXh0ZXJuIGludCByZWFkU3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CiBleHRlcm4gaW50IHVwZGF0ZVN1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1aW50KTsKIGV4dGVybiB2b2lkIGpmc19lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCAuLi4pOworZXh0ZXJuIGludCBqZnNfbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICopOworZXh0ZXJuIGludCBqZnNfbW91bnRfcncoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CitleHRlcm4gaW50IGpmc191bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICopOworZXh0ZXJuIGludCBqZnNfdW1vdW50X3J3KHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKKworZXh0ZXJuIGludCBqZnNfc3RvcF90aHJlYWRzOworZXh0ZXJuIHN0cnVjdCBjb21wbGV0aW9uIGpmc0lPd2FpdDsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBqZnNfSU9fdGhyZWFkX3dhaXQ7CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgamZzX2NvbW1pdF90aHJlYWRfd2FpdDsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBqZnNfc3luY190aHJlYWRfd2FpdDsKK2V4dGVybiBpbnQgamZzX2V4dGVuZGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzNjQsIGludCk7CiAKICNlbmRpZiAvKl9IX0pGU19TVVBFUkJMT0NLICovCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3R4bm1nci5jIGIvZnMvamZzL2pmc190eG5tZ3IuYwppbmRleCBlOTNkMDFhLi44Y2JhYWZmIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3R4bm1nci5jCisrKyBiL2ZzL2pmcy9qZnNfdHhubWdyLmMKQEAgLTQyLDcgKzQyLDYgQEAKICAqIGhvbGQgb24gdG8gbXArbG9jayB0aHJ1IHVwZGF0ZSBvZiBtYXBzCiAgKi8KIAotCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KQEAgLTUxLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgImpmc19pbmNvcmUuaCIKKyNpbmNsdWRlICJqZnNfaW5vZGUuaCIKICNpbmNsdWRlICJqZnNfZmlsc3lzLmgiCiAjaW5jbHVkZSAiamZzX21ldGFwYWdlLmgiCiAjaW5jbHVkZSAiamZzX2Rpbm9kZS5oIgpAQCAtMTA5LDcgKzEwOSw2IEBACiBzdGF0aWMgaW50IFR4TG9ja1ZIV007CQkvKiBWZXJ5IEhpZ2ggd2F0ZXIgbWFyayAqLwogc3RydWN0IHRsb2NrICpUeExvY2s7ICAgICAgICAgICAvKiB0cmFuc2FjdGlvbiBsb2NrIHRhYmxlICovCiAKLQogLyoKICAqICAgICAgdHJhbnNhY3Rpb24gbWFuYWdlbWVudCBsb2NrCiAgKi8KQEAgLTE0OSw3ICsxNDgsNiBAQAogCiAjZGVmaW5lIFRYTl9XQUtFVVAoZXZlbnQpIHdha2VfdXBfYWxsKGV2ZW50KQogCi0KIC8qCiAgKiAgICAgIHN0YXRpc3RpY3MKICAqLwpAQCAtMTYxLDE2ICsxNTksNiBAQAogCWludCB3YWl0bG9jazsJCS8qIDQ6ICMgb2YgdGxvY2sgd2FpdCAqLwogfSBzdGF0dHg7CiAKLQotLyoKLSAqIGV4dGVybmFsIHJlZmVyZW5jZXMKLSAqLwotZXh0ZXJuIGludCBsbUdyb3VwQ29tbWl0KHN0cnVjdCBqZnNfbG9nICosIHN0cnVjdCB0YmxvY2sgKik7Ci1leHRlcm4gaW50IGpmc19jb21taXRfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7Ci1leHRlcm4gaW50IGpmc19zdG9wX3RocmVhZHM7Ci0KLWV4dGVybiBzdHJ1Y3QgY29tcGxldGlvbiBqZnNJT3dhaXQ7Ci0KIC8qCiAgKiBmb3J3YXJkIHJlZmVyZW5jZXMKICAqLwpAQCAtMzU4LDcgKzM0Niw2IEBACiAJVHhCbG9jayA9IE5VTEw7CiB9CiAKLQogLyoKICAqIE5BTUU6ICAgICAgICB0eEJlZ2luKCkKICAqCkBAIC00NjAsNyArNDQ3LDYgQEAKIAlyZXR1cm4gdDsKIH0KIAotCiAvKgogICogTkFNRTogICAgICAgIHR4QmVnaW5Bbm9uKCkKICAqCkBAIC01MDMsNyArNDg5LDYgQEAKIAlUWE5fVU5MT0NLKCk7CiB9CiAKLQogLyoKICAqICAgICAgdHhFbmQoKQogICoKQEAgLTU5Miw3ICs1NzcsNiBAQAogCVRYTl9XQUtFVVAoJlR4QW5jaG9yLmZyZWV3YWl0KTsKIH0KIAotCiAvKgogICogICAgICB0eExvY2soKQogICoKQEAgLTg2OCw3ICs4NTIsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi0KIC8qCiAgKiBOQU1FOiAgICAgICAgdHhSZWxlYXNlKCkKICAqCkBAIC05MDgsNyArODkxLDYgQEAKIAlUWE5fVU5MT0NLKCk7CiB9CiAKLQogLyoKICAqIE5BTUU6ICAgICAgICB0eFVubG9jaygpCiAgKgpAQCAtOTk2LDcgKzk3OCw2IEBACiAJfQogfQogCi0KIC8qCiAgKiAgICAgIHR4TWFwbG9jaygpCiAgKgpAQCAtMTA2OSw3ICsxMDUwLDYgQEAKIAlyZXR1cm4gdGxjazsKIH0KIAotCiAvKgogICogICAgICB0eExpbmVsb2NrKCkKICAqCkBAIC0xMTAzLDggKzEwODMsNiBAQAogCXJldHVybiBsaW5lbG9jazsKIH0KIAotCi0KIC8qCiAgKiAgICAgICAgICAgICAgdHJhbnNhY3Rpb24gY29tbWl0IG1hbmFnZW1lbnQKICAqICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM3Myw3ICsxMzUxLDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQogLyoKICAqIE5BTUU6ICAgICAgICB0eExvZygpCiAgKgpAQCAtMTQzNyw3ICsxNDE0LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQogLyoKICAqICAgICAgZGlMb2coKQogICoKQEAgLTE0NjUsNyArMTQ0MSw2IEBACiAJaWYgKHRsY2stPnR5cGUgJiB0bGNrRU5UUlkpIHsKIAkJLyogbG9nIGFmdGVyLWltYWdlIGZvciBsb2dyZWRvKCk6ICovCiAJCWxyZC0+dHlwZSA9IGNwdV90b19sZTE2KExPR19SRURPUEFHRSk7Ci0vLyAgICAgICAgICAgICAgKnB4ZCA9IG1wLT5jbV9weGQ7CiAJCVBYRGFkZHJlc3MocHhkLCBtcC0+aW5kZXgpOwogCQlQWERsZW5ndGgocHhkLAogCQkJICBtcC0+bG9naWNhbF9zaXplID4+IHRibGstPnNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKQEAgLTE1NTIsNyArMTUyNyw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0KIC8qCiAgKiAgICAgIGRhdGFMb2coKQogICoKQEAgLTE1OTksNyArMTU3Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogLyoKICAqICAgICAgZHRMb2coKQogICoKQEAgLTE2MzksNyArMTYxMiw2IEBACiAJCQlscmQtPmxvZy5yZWRvcGFnZS50eXBlIHw9IGNwdV90b19sZTE2KExPR19FWFRFTkQpOwogCQllbHNlCiAJCQlscmQtPmxvZy5yZWRvcGFnZS50eXBlIHw9IGNwdV90b19sZTE2KExPR19ORVcpOwotLy8gICAgICAgICAgICAgICpweGQgPSBtcC0+Y21fcHhkOwogCQlQWERhZGRyZXNzKHB4ZCwgbXAtPmluZGV4KTsKIAkJUFhEbGVuZ3RoKHB4ZCwKIAkJCSAgbXAtPmxvZ2ljYWxfc2l6ZSA+PiB0YmxrLT5zYi0+c19ibG9ja3NpemVfYml0cyk7CkBAIC0xNzA0LDcgKzE2NzYsNiBAQAogCXJldHVybjsKIH0KIAotCiAvKgogICogICAgICB4dExvZygpCiAgKgpAQCAtMTc2MCw3ICsxNzMxLDYgQEAKIAkJICogYXBwbHlpbmcgdGhlIGFmdGVyLWltYWdlIHRvIHRoZSBtZXRhLWRhdGEgcGFnZS4KIAkJICovCiAJCWxyZC0+dHlwZSA9IGNwdV90b19sZTE2KExPR19SRURPUEFHRSk7Ci0vLyAgICAgICAgICAgICAgKnBhZ2VfcHhkID0gbXAtPmNtX3B4ZDsKIAkJUFhEYWRkcmVzcyhwYWdlX3B4ZCwgbXAtPmluZGV4KTsKIAkJUFhEbGVuZ3RoKHBhZ2VfcHhkLAogCQkJICBtcC0+bG9naWNhbF9zaXplID4+IHRibGstPnNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKQEAgLTIwOTMsNyArMjA2Myw2IEBACiAJcmV0dXJuOwogfQogCi0KIC8qCiAgKiAgICAgIG1hcExvZygpCiAgKgpAQCAtMjE4MCw3ICsyMTQ5LDYgQEAKIAl9CiB9CiAKLQogLyoKICAqICAgICAgdHhFQSgpCiAgKgpAQCAtMjIzMyw3ICsyMjAxLDYgQEAKIAl9CiB9CiAKLQogLyoKICAqICAgICAgdHhGb3JjZSgpCiAgKgpAQCAtMjMwMCw3ICsyMjY3LDYgQEAKIAl9CiB9CiAKLQogLyoKICAqICAgICAgdHhVcGRhdGVNYXAoKQogICoKQEAgLTI0MzcsNyArMjQwMyw2IEBACiAJfQogfQogCi0KIC8qCiAgKiAgICAgIHR4QWxsb2NQTWFwKCkKICAqCkBAIC0yNTA5LDcgKzI0NzQsNiBAQAogCX0KIH0KIAotCiAvKgogICogICAgICB0eEZyZWVNYXAoKQogICoKQEAgLTI2MTEsNyArMjU3NSw2IEBACiAJfQogfQogCi0KIC8qCiAgKiAgICAgIHR4RnJlZWxvY2soKQogICoKQEAgLTI2NTIsNyArMjYxNSw2IEBACiAJVFhOX1VOTE9DSygpOwogfQogCi0KIC8qCiAgKiAgICAgIHR4QWJvcnQoKQogICoKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfdHhubWdyLmggYi9mcy9qZnMvamZzX3R4bm1nci5oCmluZGV4IGI3MWI4MmMuLjU5YWQwZjYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfdHhubWdyLmgKKysrIGIvZnMvamZzL2pmc190eG5tZ3IuaApAQCAtMjg1LDM0ICsyODUsMjYgQEAKIC8qCiAgKiBleHRlcm5hbCBkZWNsYXJhdGlvbnMKICAqLwotZXh0ZXJuIHN0cnVjdCB0bG9jayAqdHhMb2NrKHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgc3RydWN0IG1ldGFwYWdlICptcCwKLQkJCSAgICBpbnQgZmxhZyk7CitleHRlcm4gaW50IGpmc190bG9ja3NfbG93OwogCi1leHRlcm4gc3RydWN0IHRsb2NrICp0eE1hcGxvY2sodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwLCBpbnQgZmxhZyk7Ci0KLWV4dGVybiBpbnQgdHhDb21taXQodGlkX3QgdGlkLCBpbnQgbmlwLCBzdHJ1Y3QgaW5vZGUgKippcGxpc3QsIGludCBmbGFnKTsKLQotZXh0ZXJuIHRpZF90IHR4QmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWcpOwotCi1leHRlcm4gdm9pZCB0eEJlZ2luQW5vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKLQotZXh0ZXJuIHZvaWQgdHhFbmQodGlkX3QgdGlkKTsKLQotZXh0ZXJuIHZvaWQgdHhBYm9ydCh0aWRfdCB0aWQsIGludCBkaXJ0eSk7Ci0KLWV4dGVybiBzdHJ1Y3QgbGluZWxvY2sgKnR4TGluZWxvY2soc3RydWN0IGxpbmVsb2NrICogdGxvY2spOwotCi1leHRlcm4gdm9pZCB0eEZyZWVNYXAoc3RydWN0IGlub2RlICppcCwgc3RydWN0IG1hcGxvY2sgKiBtYXBsb2NrLAotCQkgICAgICBzdHJ1Y3QgdGJsb2NrICogdGJsaywgaW50IG1hcHR5cGUpOwotCi1leHRlcm4gdm9pZCB0eEVBKHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgZHhkX3QgKiBvbGRlYSwgZHhkX3QgKiBuZXdlYSk7Ci0KLWV4dGVybiB2b2lkIHR4RnJlZWxvY2soc3RydWN0IGlub2RlICppcCk7Ci0KLWV4dGVybiBpbnQgbG1Mb2coc3RydWN0IGpmc19sb2cgKiBsb2csIHN0cnVjdCB0YmxvY2sgKiB0YmxrLCBzdHJ1Y3QgbHJkICogbHJkLAotCQkgc3RydWN0IHRsb2NrICogdGxjayk7Ci0KLWV4dGVybiB2b2lkIHR4UXVpZXNjZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKLQotZXh0ZXJuIHZvaWQgdHhSZXN1bWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitleHRlcm4gaW50IHR4SW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHR4RXhpdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgdGxvY2sgKnR4TG9jayh0aWRfdCwgc3RydWN0IGlub2RlICosIHN0cnVjdCBtZXRhcGFnZSAqLCBpbnQpOworZXh0ZXJuIHN0cnVjdCB0bG9jayAqdHhNYXBsb2NrKHRpZF90LCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgdHhDb21taXQodGlkX3QsIGludCwgc3RydWN0IGlub2RlICoqLCBpbnQpOworZXh0ZXJuIHRpZF90IHR4QmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CitleHRlcm4gdm9pZCB0eEJlZ2luQW5vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitleHRlcm4gdm9pZCB0eEVuZCh0aWRfdCk7CitleHRlcm4gdm9pZCB0eEFib3J0KHRpZF90LCBpbnQpOworZXh0ZXJuIHN0cnVjdCBsaW5lbG9jayAqdHhMaW5lbG9jayhzdHJ1Y3QgbGluZWxvY2sgKik7CitleHRlcm4gdm9pZCB0eEZyZWVNYXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBtYXBsb2NrICosIHN0cnVjdCB0YmxvY2sgKiwgaW50KTsKK2V4dGVybiB2b2lkIHR4RUEodGlkX3QsIHN0cnVjdCBpbm9kZSAqLCBkeGRfdCAqLCBkeGRfdCAqKTsKK2V4dGVybiB2b2lkIHR4RnJlZWxvY2soc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludCBsbUxvZyhzdHJ1Y3QgamZzX2xvZyAqLCBzdHJ1Y3QgdGJsb2NrICosIHN0cnVjdCBscmQgKiwKKwkJIHN0cnVjdCB0bG9jayAqKTsKK2V4dGVybiB2b2lkIHR4UXVpZXNjZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitleHRlcm4gdm9pZCB0eFJlc3VtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitleHRlcm4gdm9pZCB0eExhenlVbmxvY2soc3RydWN0IHRibG9jayAqKTsKK2V4dGVybiBpbnQgamZzX2xhenljb21taXQodm9pZCAqKTsKK2V4dGVybiBpbnQgamZzX3N5bmModm9pZCAqKTsKICNlbmRpZgkJCQkvKiBfSF9KRlNfVFhOTUdSICovCmRpZmYgLS1naXQgYS9mcy9qZnMvbmFtZWkuYyBiL2ZzL2pmcy9uYW1laS5jCmluZGV4IDg0MTNhMzYuLjFjYWUxNGUgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9uYW1laS5jCisrKyBiL2ZzL2pmcy9uYW1laS5jCkBAIC0zMSwyMCArMzEsOSBAQAogI2luY2x1ZGUgImpmc19hY2wuaCIKICNpbmNsdWRlICJqZnNfZGVidWcuaCIKIAotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmc19maWxlX2lub2RlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpmc19maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfYW9wczsKLQotZXh0ZXJuIGludCBqZnNfZnN5bmMoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgamZzX3RydW5jYXRlX25vbG9jayhzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90KTsKLWV4dGVybiBpbnQgamZzX2luaXRfYWNsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7Ci0KIC8qCiAgKiBmb3J3YXJkIHJlZmVyZW5jZXMKICAqLwotc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqZnNfZGlyX29wZXJhdGlvbnM7CiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zOwogCiBzdGF0aWMgczY0IGNvbW1pdFplcm9MaW5rKHRpZF90LCBzdHJ1Y3QgaW5vZGUgKik7CkBAIC02NTUsNyArNjQ0LDcgQEAKIAogCiAvKgotICogTkFNRToJZnJlZVplcm9MaW5rKCkKKyAqIE5BTUU6CWpmc19mcmVlX3plcm9fbGluaygpCiAgKgogICogRlVOQ1RJT046ICAgIGZvciBub24tZGlyZWN0b3J5LCBjYWxsZWQgYnkgaUNsb3NlKCksCiAgKgkJZnJlZSByZXNvdXJjZXMgb2YgYSBmaWxlIGZyb20gY2FjaGUgYW5kIFdPUktJTkcgbWFwIApAQCAtNjYzLDE1ICs2NTIsMTIgQEAKICAqCQl3aGlsZSBhc3NvY2lhdGVkIHdpdGggYSBwYWdlciBvYmplY3QsCiAgKgogICogUEFSQU1FVEVSOglpcAktIHBvaW50ZXIgdG8gaW5vZGUgb2YgZmlsZS4KLSAqCi0gKiBSRVRVUk46CTAgLW9rCiAgKi8KLWludCBmcmVlWmVyb0xpbmsoc3RydWN0IGlub2RlICppcCkKK3ZvaWQgamZzX2ZyZWVfemVyb19saW5rKHN0cnVjdCBpbm9kZSAqaXApCiB7Ci0JaW50IHJjID0gMDsKIAlpbnQgdHlwZTsKIAotCWpmc19pbmZvKCJmcmVlWmVyb0xpbms6IGlwID0gMHglcCIsIGlwKTsKKwlqZnNfaW5mbygiamZzX2ZyZWVfemVyb19saW5rOiBpcCA9IDB4JXAiLCBpcCk7CiAKIAkvKiByZXR1cm4gaWYgbm90IHJlZyBvciBzeW1ib2xpYyBsaW5rIG9yIGlmIHNpemUgaXMKIAkgKiBhbHJlYWR5IG9rLgpAQCAtNjg0LDEwICs2NzAsMTAgQEAKIAljYXNlIFNfSUZMTks6CiAJCS8qIGlmIGl0cyBjb250YWluZWQgaW4gaW5vZGUgbm90aGluZyB0byBkbyAqLwogCQlpZiAoaXAtPmlfc2l6ZSA8IElEQVRBU0laRSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAogCS8qCkBAIC03MzcsOSArNzIzLDcgQEAKIAkgKiBmcmVlIHh0cmVlL2RhdGEgYmxvY2tzIGZyb20gd29ya2luZyBibG9jayBtYXA7CiAJICovCiAJaWYgKGlwLT5pX3NpemUpCi0JCXJjID0geHRUcnVuY2F0ZSgwLCBpcCwgMCwgQ09NTUlUX1dNQVApOwotCi0JcmV0dXJuIHJjOworCQl4dFRydW5jYXRlKDAsIGlwLCAwLCBDT01NSVRfV01BUCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9qZnMvc3VwZXIuYyBiL2ZzL2pmcy9zdXBlci5jCmluZGV4IDVlNzc0ZWQuLjgxMGEzNjUgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9zdXBlci5jCisrKyBiL2ZzL2pmcy9zdXBlci5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJqZnNfaW5jb3JlLmgiCiAjaW5jbHVkZSAiamZzX2ZpbHN5cy5oIgorI2luY2x1ZGUgImpmc19pbm9kZS5oIgogI2luY2x1ZGUgImpmc19tZXRhcGFnZS5oIgogI2luY2x1ZGUgImpmc19zdXBlcmJsb2NrLmgiCiAjaW5jbHVkZSAiamZzX2RtYXAuaCIKQEAgLTYyLDM3ICs2Myw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKGpmc2xvZ2xldmVsLCAiU3BlY2lmeSBKRlMgbG9nbGV2ZWwgKDAsIDEgb3IgMikiKTsKICNlbmRpZgogCi0vKgotICogRXh0ZXJuYWwgZGVjbGFyYXRpb25zCi0gKi8KLWV4dGVybiBpbnQgamZzX21vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgamZzX21vdW50X3J3KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwotZXh0ZXJuIGludCBqZnNfdW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgamZzX3Vtb3VudF9ydyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Ci0KLWV4dGVybiBpbnQgamZzSU9XYWl0KHZvaWQgKik7Ci1leHRlcm4gaW50IGpmc19sYXp5Y29tbWl0KHZvaWQgKik7Ci1leHRlcm4gaW50IGpmc19zeW5jKHZvaWQgKik7Ci0KLWV4dGVybiB2b2lkIGpmc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotZXh0ZXJuIHZvaWQgamZzX2RpcnR5X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotZXh0ZXJuIHZvaWQgamZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWV4dGVybiBpbnQgamZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KTsKLQotZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmpmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1leHRlcm4gaW50IGpmc19leHRlbmRmcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgczY0LCBpbnQpOwotCi1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGpmc19jaV9kZW50cnlfb3BlcmF0aW9uczsKLQotI2lmZGVmIFBST0NfRlNfSkZTCQkvKiBzZWUgamZzX2RlYnVnLmggKi8KLWV4dGVybiB2b2lkIGpmc19wcm9jX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBqZnNfcHJvY19jbGVhbih2b2lkKTsKLSNlbmRpZgotCi1leHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgamZzX0lPX3RocmVhZF93YWl0OwotZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGpmc19jb21taXRfdGhyZWFkX3dhaXQ7Ci1leHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgamZzX3N5bmNfdGhyZWFkX3dhaXQ7Ci0KIHN0YXRpYyB2b2lkIGpmc19oYW5kbGVfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgamZzX3NiX2luZm8gKnNiaSA9IEpGU19TQkkoc2IpOwpAQCAtNTkzLDExICs1NjMsNiBAQAogCS5mc19mbGFncwk9IEZTX1JFUVVJUkVTX0RFViwKIH07CiAKLWV4dGVybiBpbnQgbWV0YXBhZ2VfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgdHhJbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgdHhFeGl0KHZvaWQpOwotZXh0ZXJuIHZvaWQgbWV0YXBhZ2VfZXhpdCh2b2lkKTsKLQogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbywga21lbV9jYWNoZV90ICogY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBqZnNfaW5vZGVfaW5mbyAqamZzX2lwID0gKHN0cnVjdCBqZnNfaW5vZGVfaW5mbyAqKSBmb287CmRpZmYgLS1naXQgYS9mcy9qZnMvc3ltbGluay5jIGIvZnMvamZzL3N5bWxpbmsuYwppbmRleCBlZjRjMDdlLi4yODdkOGQ2IDEwMDY0NAotLS0gYS9mcy9qZnMvc3ltbGluay5jCisrKyBiL2ZzL2pmcy9zeW1saW5rLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogICBDb3B5cmlnaHQgKGMpIENocmlzdG9waCBIZWxsd2lnLCAyMDAxLTIwMDIKKyAqICAgQ29weXJpZ2h0IChDKSBDaHJpc3RvcGggSGVsbHdpZywgMjAwMS0yMDAyCiAgKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSAiamZzX2luY29yZS5oIgorI2luY2x1ZGUgImpmc19pbm9kZS5oIgogI2luY2x1ZGUgImpmc194YXR0ci5oIgogCiBzdGF0aWMgaW50IGpmc19mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQpkaWZmIC0tZ2l0IGEvZnMvamZzL3hhdHRyLmMgYi9mcy9qZnMveGF0dHIuYwppbmRleCA3YTlmZmQ1Li42MDE2MzczIDEwMDY0NAotLS0gYS9mcy9qZnMveGF0dHIuYworKysgYi9mcy9qZnMveGF0dHIuYwpAQCAtOTQ2LDggKzk0Niw3IEBACiAgICAgICBvdXQ6CiAJdXBfd3JpdGUoJkpGU19JUChpbm9kZSktPnhhdHRyX3NlbSk7CiAKLQlpZiAob3MybmFtZSkKLQkJa2ZyZWUob3MybmFtZSk7CisJa2ZyZWUob3MybmFtZSk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0xMDQyLDggKzEwNDEsNyBAQAogICAgICAgb3V0OgogCXVwX3JlYWQoJkpGU19JUChpbm9kZSktPnhhdHRyX3NlbSk7CiAKLQlpZiAob3MybmFtZSkKLQkJa2ZyZWUob3MybmFtZSk7CisJa2ZyZWUob3MybmFtZSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19taXNjLmMgYi9mcy9wcm9jL3Byb2NfbWlzYy5jCmluZGV4IGE2MGEzYjMuLjYzYTlmYmYgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19taXNjLmMKKysrIGIvZnMvcHJvYy9wcm9jX21pc2MuYwpAQCAtMjE5LDYgKzIxOSwxOSBAQAogCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCiB9OwogCitleHRlcm4gc3RydWN0IHNlcV9vcGVyYXRpb25zIHpvbmVpbmZvX29wOworc3RhdGljIGludCB6b25laW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmem9uZWluZm9fb3ApOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3pvbmVpbmZvX2ZpbGVfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSB6b25laW5mb19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OworCiBzdGF0aWMgaW50IHZlcnNpb25fcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAogCQkJCSBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewpAQCAtNTg5LDYgKzYwMiw3IEBACiAJY3JlYXRlX3NlcV9lbnRyeSgic2xhYmluZm8iLFNfSVdVU1J8U19JUlVHTywmcHJvY19zbGFiaW5mb19vcGVyYXRpb25zKTsKIAljcmVhdGVfc2VxX2VudHJ5KCJidWRkeWluZm8iLFNfSVJVR08sICZmcmFnbWVudGF0aW9uX2ZpbGVfb3BlcmF0aW9ucyk7CiAJY3JlYXRlX3NlcV9lbnRyeSgidm1zdGF0IixTX0lSVUdPLCAmcHJvY192bXN0YXRfZmlsZV9vcGVyYXRpb25zKTsKKwljcmVhdGVfc2VxX2VudHJ5KCJ6b25laW5mbyIsU19JUlVHTywgJnByb2Nfem9uZWluZm9fZmlsZV9vcGVyYXRpb25zKTsKIAljcmVhdGVfc2VxX2VudHJ5KCJkaXNrc3RhdHMiLCAwLCAmcHJvY19kaXNrc3RhdHNfb3BlcmF0aW9ucyk7CiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAljcmVhdGVfc2VxX2VudHJ5KCJtb2R1bGVzIiwgMCwgJnByb2NfbW9kdWxlc19vcGVyYXRpb25zKTsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDNhMWI4Y2EuLjU3M2JjYzggMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtODM1LDYgKzgzNSw3IEBACiAJbW50LT5tbnRfcGFyZW50ID0gbW50OwogCW1udC0+bW50X25hbWVzcGFjZSA9IGN1cnJlbnQtPm5hbWVzcGFjZTsKIAl1cF93cml0ZSgmc2ItPnNfdW1vdW50KTsKKwlmcmVlX3NlY2RhdGEoc2VjZGF0YSk7CiAJcHV0X2ZpbGVzeXN0ZW0odHlwZSk7CiAJcmV0dXJuIG1udDsKIG91dF9zYjoKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggOTk3OTYzZTUuLmM2MGU2OTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC02MSwxMiArNjEsMTMgQEAKICAqIEZpbGUgd2lkZSBnbG9iYWxzCiAgKi8KIAotU1RBVElDIGttZW1fY2FjaGVfdCAqcGFnZWJ1Zl9jYWNoZTsKK1NUQVRJQyBrbWVtX2NhY2hlX3QgKnBhZ2VidWZfem9uZTsKIFNUQVRJQyBrbWVtX3NoYWtlcl90IHBhZ2VidWZfc2hha2U7Ci1TVEFUSUMgaW50IHBhZ2VidWZfZGFlbW9uX3dha2V1cChpbnQsIHVuc2lnbmVkIGludCk7CitTVEFUSUMgaW50IHhmc2J1ZmRfd2FrZXVwKGludCwgdW5zaWduZWQgaW50KTsKIFNUQVRJQyB2b2lkIHBhZ2VidWZfZGVsd3JpX3F1ZXVlKHhmc19idWZfdCAqLCBpbnQpOwotU1RBVElDIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpwYWdlYnVmX2xvZ2lvX3dvcmtxdWV1ZTsKLVNUQVRJQyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcGFnZWJ1Zl9kYXRhaW9fd29ya3F1ZXVlOworCitTVEFUSUMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnhmc2xvZ2Rfd29ya3F1ZXVlOworU1RBVElDIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp4ZnNkYXRhZF93b3JrcXVldWU7CiAKIC8qCiAgKiBQYWdlYnVmIGRlYnVnZ2luZwpAQCAtMTIzLDkgKzEyNCw5IEBACiAKIAogI2RlZmluZSBwYWdlYnVmX2FsbG9jYXRlKGZsYWdzKSBcCi0Ja21lbV96b25lX2FsbG9jKHBhZ2VidWZfY2FjaGUsIHBiX3RvX2ttKGZsYWdzKSkKKwlrbWVtX3pvbmVfYWxsb2MocGFnZWJ1Zl96b25lLCBwYl90b19rbShmbGFncykpCiAjZGVmaW5lIHBhZ2VidWZfZGVhbGxvY2F0ZShwYikgXAotCWttZW1fem9uZV9mcmVlKHBhZ2VidWZfY2FjaGUsIChwYikpOworCWttZW1fem9uZV9mcmVlKHBhZ2VidWZfem9uZSwgKHBiKSk7CiAKIC8qCiAgKiBQYWdlIFJlZ2lvbiBpbnRlcmZhY2VzLgpAQCAtNDI1LDcgKzQyNiw3IEBACiAJCQkJCV9fRlVOQ1RJT05fXywgZ2ZwX21hc2spOwogCiAJCQlYRlNfU1RBVFNfSU5DKHBiX3BhZ2VfcmV0cmllcyk7Ci0JCQlwYWdlYnVmX2RhZW1vbl93YWtldXAoMCwgZ2ZwX21hc2spOworCQkJeGZzYnVmZF93YWtldXAoMCwgZ2ZwX21hc2spOwogCQkJYmxrX2Nvbmdlc3Rpb25fd2FpdChXUklURSwgSFovNTApOwogCQkJZ290byByZXRyeTsKIAkJfQpAQCAtMTEzNiw4ICsxMTM3LDggQEAKIAlpZiAoKHBiLT5wYl9pb2RvbmUpIHx8IChwYi0+cGJfZmxhZ3MgJiBQQkZfQVNZTkMpKSB7CiAJCWlmIChzY2hlZHVsZSkgewogCQkJSU5JVF9XT1JLKCZwYi0+cGJfaW9kb25lX3dvcmssIHBhZ2VidWZfaW9kb25lX3dvcmssIHBiKTsKLQkJCXF1ZXVlX3dvcmsoZGF0YWlvID8gcGFnZWJ1Zl9kYXRhaW9fd29ya3F1ZXVlIDoKLQkJCQlwYWdlYnVmX2xvZ2lvX3dvcmtxdWV1ZSwgJnBiLT5wYl9pb2RvbmVfd29yayk7CisJCQlxdWV1ZV93b3JrKGRhdGFpbyA/IHhmc2RhdGFkX3dvcmtxdWV1ZSA6CisJCQkJeGZzbG9nZF93b3JrcXVldWUsICZwYi0+cGJfaW9kb25lX3dvcmspOwogCQl9IGVsc2UgewogCQkJcGFnZWJ1Zl9pb2RvbmVfd29yayhwYik7CiAJCX0KQEAgLTE1NjIsMTYgKzE1NjMsNiBAQAogCWttZW1fZnJlZShidHAsIHNpemVvZigqYnRwKSk7CiB9CiAKLXZvaWQKLXhmc19pbmNvcmVfcmVsc2UoCi0JeGZzX2J1ZnRhcmdfdAkJKmJ0cCwKLQlpbnQJCQlkZWx3cmlfb25seSwKLQlpbnQJCQl3YWl0KQotewotCWludmFsaWRhdGVfYmRldihidHAtPnBicl9iZGV2LCAxKTsKLQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhidHAtPnBicl9tYXBwaW5nLCAwTEwpOwotfQotCiBTVEFUSUMgaW50CiB4ZnNfc2V0c2l6ZV9idWZ0YXJnX2ZsYWdzKAogCXhmc19idWZ0YXJnX3QJCSpidHAsCkBAIC0xNzQyLDI3ICsxNzMzLDI3IEBACiB9CiAKIC8qIERlZmluZXMgZm9yIHBhZ2VidWYgZGFlbW9uICovCi1TVEFUSUMgREVDTEFSRV9DT01QTEVUSU9OKHBhZ2VidWZfZGFlbW9uX2RvbmUpOwotU1RBVElDIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFnZWJ1Zl9kYWVtb25fdGFzazsKLVNUQVRJQyBpbnQgcGFnZWJ1Zl9kYWVtb25fYWN0aXZlOwotU1RBVElDIGludCBmb3JjZV9mbHVzaDsKLVNUQVRJQyBpbnQgZm9yY2Vfc2xlZXA7CitTVEFUSUMgREVDTEFSRV9DT01QTEVUSU9OKHhmc2J1ZmRfZG9uZSk7CitTVEFUSUMgc3RydWN0IHRhc2tfc3RydWN0ICp4ZnNidWZkX3Rhc2s7CitTVEFUSUMgaW50IHhmc2J1ZmRfYWN0aXZlOworU1RBVElDIGludCB4ZnNidWZkX2ZvcmNlX2ZsdXNoOworU1RBVElDIGludCB4ZnNidWZkX2ZvcmNlX3NsZWVwOwogCiBTVEFUSUMgaW50Ci1wYWdlYnVmX2RhZW1vbl93YWtldXAoCit4ZnNidWZkX3dha2V1cCgKIAlpbnQJCQlwcmlvcml0eSwKIAl1bnNpZ25lZCBpbnQJCW1hc2spCiB7Ci0JaWYgKGZvcmNlX3NsZWVwKQorCWlmICh4ZnNidWZkX2ZvcmNlX3NsZWVwKQogCQlyZXR1cm4gMDsKLQlmb3JjZV9mbHVzaCA9IDE7CisJeGZzYnVmZF9mb3JjZV9mbHVzaCA9IDE7CiAJYmFycmllcigpOwotCXdha2VfdXBfcHJvY2VzcyhwYWdlYnVmX2RhZW1vbl90YXNrKTsKKwl3YWtlX3VwX3Byb2Nlc3MoeGZzYnVmZF90YXNrKTsKIAlyZXR1cm4gMDsKIH0KIAogU1RBVElDIGludAotcGFnZWJ1Zl9kYWVtb24oCit4ZnNidWZkKAogCXZvaWQJCQkqZGF0YSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXRtcDsKQEAgLTE3NzQsMTcgKzE3NjUsMTcgQEAKIAlkYWVtb25pemUoInhmc2J1ZmQiKTsKIAljdXJyZW50LT5mbGFncyB8PSBQRl9NRU1BTExPQzsKIAotCXBhZ2VidWZfZGFlbW9uX3Rhc2sgPSBjdXJyZW50OwotCXBhZ2VidWZfZGFlbW9uX2FjdGl2ZSA9IDE7CisJeGZzYnVmZF90YXNrID0gY3VycmVudDsKKwl4ZnNidWZkX2FjdGl2ZSA9IDE7CiAJYmFycmllcigpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnRtcCk7CiAJZG8gewogCQlpZiAodW5saWtlbHkoY3VycmVudC0+ZmxhZ3MgJiBQRl9GUkVFWkUpKSB7Ci0JCQlmb3JjZV9zbGVlcCA9IDE7CisJCQl4ZnNidWZkX2ZvcmNlX3NsZWVwID0gMTsKIAkJCXJlZnJpZ2VyYXRvcihQRl9GUkVFWkUpOwogCQl9IGVsc2UgewotCQkJZm9yY2Vfc2xlZXAgPSAwOworCQkJeGZzYnVmZF9mb3JjZV9zbGVlcCA9IDA7CiAJCX0KIAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwpAQCAtMTc5Nyw3ICsxNzg4LDcgQEAKIAkJCUFTU0VSVChwYi0+cGJfZmxhZ3MgJiBQQkZfREVMV1JJKTsKIAogCQkJaWYgKCFwYWdlYnVmX2lzcGluKHBiKSAmJiAhcGFnZWJ1Zl9jb25kX2xvY2socGIpKSB7Ci0JCQkJaWYgKCFmb3JjZV9mbHVzaCAmJgorCQkJCWlmICgheGZzYnVmZF9mb3JjZV9mbHVzaCAmJgogCQkJCSAgICB0aW1lX2JlZm9yZShqaWZmaWVzLAogCQkJCQkJcGItPnBiX3F1ZXVldGltZSArIGFnZSkpIHsKIAkJCQkJcGFnZWJ1Zl91bmxvY2socGIpOwpAQCAtMTgyNCwxMCArMTgxNSwxMCBAQAogCQlpZiAoYXNfbGlzdF9sZW4gPiAwKQogCQkJcHVyZ2VfYWRkcmVzc2VzKCk7CiAKLQkJZm9yY2VfZmx1c2ggPSAwOwotCX0gd2hpbGUgKHBhZ2VidWZfZGFlbW9uX2FjdGl2ZSk7CisJCXhmc2J1ZmRfZm9yY2VfZmx1c2ggPSAwOworCX0gd2hpbGUgKHhmc2J1ZmRfYWN0aXZlKTsKIAotCWNvbXBsZXRlX2FuZF9leGl0KCZwYWdlYnVmX2RhZW1vbl9kb25lLCAwKTsKKwljb21wbGV0ZV9hbmRfZXhpdCgmeGZzYnVmZF9kb25lLCAwKTsKIH0KIAogLyoKQEAgLTE4NDQsOCArMTgzNSw4IEBACiAJeGZzX2J1Zl90CQkqcGIsICpuOwogCWludAkJCXBpbmNvdW50ID0gMDsKIAotCXBhZ2VidWZfcnVuYWxsX3F1ZXVlcyhwYWdlYnVmX2RhdGFpb193b3JrcXVldWUpOwotCXBhZ2VidWZfcnVuYWxsX3F1ZXVlcyhwYWdlYnVmX2xvZ2lvX3dvcmtxdWV1ZSk7CisJcGFnZWJ1Zl9ydW5hbGxfcXVldWVzKHhmc2RhdGFkX3dvcmtxdWV1ZSk7CisJcGFnZWJ1Zl9ydW5hbGxfcXVldWVzKHhmc2xvZ2Rfd29ya3F1ZXVlKTsKIAogCUlOSVRfTElTVF9IRUFEKCZ0bXApOwogCXNwaW5fbG9jaygmcGJkX2RlbHdyaXRlX2xvY2spOwpAQCAtMTg5OCw0MyArMTg4OSw0MyBAQAogfQogCiBTVEFUSUMgaW50Ci1wYWdlYnVmX2RhZW1vbl9zdGFydCh2b2lkKQoreGZzX2J1Zl9kYWVtb25zX3N0YXJ0KHZvaWQpCiB7Ci0JaW50CQlydmFsOworCWludAkJZXJyb3IgPSAtRU5PTUVNOwogCi0JcGFnZWJ1Zl9sb2dpb193b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKCJ4ZnNsb2dkIik7Ci0JaWYgKCFwYWdlYnVmX2xvZ2lvX3dvcmtxdWV1ZSkKLQkJcmV0dXJuIC1FTk9NRU07CisJeGZzbG9nZF93b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKCJ4ZnNsb2dkIik7CisJaWYgKCF4ZnNsb2dkX3dvcmtxdWV1ZSkKKwkJZ290byBvdXQ7CiAKLQlwYWdlYnVmX2RhdGFpb193b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKCJ4ZnNkYXRhZCIpOwotCWlmICghcGFnZWJ1Zl9kYXRhaW9fd29ya3F1ZXVlKSB7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKHBhZ2VidWZfbG9naW9fd29ya3F1ZXVlKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCXhmc2RhdGFkX3dvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoInhmc2RhdGFkIik7CisJaWYgKCF4ZnNkYXRhZF93b3JrcXVldWUpCisJCWdvdG8gb3V0X2Rlc3Ryb3lfeGZzbG9nZF93b3JrcXVldWU7CiAKLQlydmFsID0ga2VybmVsX3RocmVhZChwYWdlYnVmX2RhZW1vbiwgTlVMTCwgQ0xPTkVfRlN8Q0xPTkVfRklMRVMpOwotCWlmIChydmFsIDwgMCkgewotCQlkZXN0cm95X3dvcmtxdWV1ZShwYWdlYnVmX2xvZ2lvX3dvcmtxdWV1ZSk7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKHBhZ2VidWZfZGF0YWlvX3dvcmtxdWV1ZSk7Ci0JfQorCWVycm9yID0ga2VybmVsX3RocmVhZCh4ZnNidWZkLCBOVUxMLCBDTE9ORV9GU3xDTE9ORV9GSUxFUyk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXRfZGVzdHJveV94ZnNkYXRhZF93b3JrcXVldWU7CisJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcnZhbDsKKyBvdXRfZGVzdHJveV94ZnNkYXRhZF93b3JrcXVldWU6CisJZGVzdHJveV93b3JrcXVldWUoeGZzZGF0YWRfd29ya3F1ZXVlKTsKKyBvdXRfZGVzdHJveV94ZnNsb2dkX3dvcmtxdWV1ZToKKwlkZXN0cm95X3dvcmtxdWV1ZSh4ZnNsb2dkX3dvcmtxdWV1ZSk7Cisgb3V0OgorCXJldHVybiBlcnJvcjsKIH0KIAogLyoKLSAqIHBhZ2VidWZfZGFlbW9uX3N0b3AKLSAqCiAgKiBOb3RlOiBkbyBub3QgbWFyayBhcyBfX2V4aXQsIGl0IGlzIGNhbGxlZCBmcm9tIHBhZ2VidWZfdGVybWluYXRlLgogICovCiBTVEFUSUMgdm9pZAotcGFnZWJ1Zl9kYWVtb25fc3RvcCh2b2lkKQoreGZzX2J1Zl9kYWVtb25zX3N0b3Aodm9pZCkKIHsKLQlwYWdlYnVmX2RhZW1vbl9hY3RpdmUgPSAwOworCXhmc2J1ZmRfYWN0aXZlID0gMDsKIAliYXJyaWVyKCk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmcGFnZWJ1Zl9kYWVtb25fZG9uZSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmeGZzYnVmZF9kb25lKTsKIAotCWRlc3Ryb3lfd29ya3F1ZXVlKHBhZ2VidWZfbG9naW9fd29ya3F1ZXVlKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShwYWdlYnVmX2RhdGFpb193b3JrcXVldWUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKHhmc2xvZ2Rfd29ya3F1ZXVlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZSh4ZnNkYXRhZF93b3JrcXVldWUpOwogfQogCiAvKgpAQCAtMTk0NCwyNyArMTkzNSwzNyBAQAogaW50IF9faW5pdAogcGFnZWJ1Zl9pbml0KHZvaWQpCiB7Ci0JcGFnZWJ1Zl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJ4ZnNfYnVmX3QiLCBzaXplb2YoeGZzX2J1Zl90KSwgMCwKLQkJCVNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCwgTlVMTCk7Ci0JaWYgKHBhZ2VidWZfY2FjaGUgPT0gTlVMTCkgewotCQlwcmludGsoIlhGUzogY291bGRuJ3QgaW5pdCB4ZnNfYnVmX3QgY2FjaGVcbiIpOwotCQlwYWdlYnVmX3Rlcm1pbmF0ZSgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaW50CQllcnJvciA9IC1FTk9NRU07CisKKwlwYWdlYnVmX3pvbmUgPSBrbWVtX3pvbmVfaW5pdChzaXplb2YoeGZzX2J1Zl90KSwgInhmc19idWYiKTsKKwlpZiAoIXBhZ2VidWZfem9uZSkKKwkJZ290byBvdXQ7CiAKICNpZmRlZiBQQUdFQlVGX1RSQUNFCiAJcGFnZWJ1Zl90cmFjZV9idWYgPSBrdHJhY2VfYWxsb2MoUEFHRUJVRl9UUkFDRV9TSVpFLCBLTV9TTEVFUCk7CiAjZW5kaWYKIAotCXBhZ2VidWZfZGFlbW9uX3N0YXJ0KCk7CisJZXJyb3IgPSB4ZnNfYnVmX2RhZW1vbnNfc3RhcnQoKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2ZyZWVfYnVmX3pvbmU7CiAKLQlwYWdlYnVmX3NoYWtlID0ga21lbV9zaGFrZV9yZWdpc3RlcihwYWdlYnVmX2RhZW1vbl93YWtldXApOwotCWlmIChwYWdlYnVmX3NoYWtlID09IE5VTEwpIHsKLQkJcGFnZWJ1Zl90ZXJtaW5hdGUoKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJcGFnZWJ1Zl9zaGFrZSA9IGttZW1fc2hha2VfcmVnaXN0ZXIoeGZzYnVmZF93YWtldXApOworCWlmICghcGFnZWJ1Zl9zaGFrZSkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3N0b3BfZGFlbW9uczsKIAl9CiAKIAlyZXR1cm4gMDsKKworIG91dF9zdG9wX2RhZW1vbnM6CisJeGZzX2J1Zl9kYWVtb25zX3N0b3AoKTsKKyBvdXRfZnJlZV9idWZfem9uZToKKyNpZmRlZiBQQUdFQlVGX1RSQUNFCisJa3RyYWNlX2ZyZWUocGFnZWJ1Zl90cmFjZV9idWYpOworI2VuZGlmCisJa21lbV96b25lX2Rlc3Ryb3kocGFnZWJ1Zl96b25lKTsKKyBvdXQ6CisJcmV0dXJuIGVycm9yOwogfQogCiAKQEAgLTE5NzYsMTIgKzE5NzcsMTIgQEAKIHZvaWQKIHBhZ2VidWZfdGVybWluYXRlKHZvaWQpCiB7Ci0JcGFnZWJ1Zl9kYWVtb25fc3RvcCgpOworCXhmc19idWZfZGFlbW9uc19zdG9wKCk7CiAKICNpZmRlZiBQQUdFQlVGX1RSQUNFCiAJa3RyYWNlX2ZyZWUocGFnZWJ1Zl90cmFjZV9idWYpOwogI2VuZGlmCiAKLQlrbWVtX3pvbmVfZGVzdHJveShwYWdlYnVmX2NhY2hlKTsKKwlrbWVtX3pvbmVfZGVzdHJveShwYWdlYnVmX3pvbmUpOwogCWttZW1fc2hha2VfZGVyZWdpc3RlcihwYWdlYnVmX3NoYWtlKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKaW5kZXggNzRkZWVkOC4uM2Y4ZjY5YSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKQEAgLTU3Niw3ICs1NzYsNiBAQAogZXh0ZXJuIHZvaWQgeGZzX2ZyZWVfYnVmdGFyZyh4ZnNfYnVmdGFyZ190ICosIGludCk7CiBleHRlcm4gdm9pZCB4ZnNfd2FpdF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKik7CiBleHRlcm4gaW50IHhmc19zZXRzaXplX2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCB4ZnNfaW5jb3JlX3JlbHNlKHhmc19idWZ0YXJnX3QgKiwgaW50LCBpbnQpOwogZXh0ZXJuIGludCB4ZnNfZmx1c2hfYnVmdGFyZyh4ZnNfYnVmdGFyZ190ICosIGludCk7CiAKICNkZWZpbmUgeGZzX2dldHNpemVfYnVmdGFyZyhidWZ0YXJnKSBcCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKaW5kZXggMjRmYTNiMS4uZjFjZTQzMiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwpAQCAtNTcsNyArNTcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbGludmZzX2ZpbGVfdm1fb3BzOwotCisjaWZkZWYgQ09ORklHX1hGU19ETUFQSQorc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBsaW52ZnNfZG1hcGlfZmlsZV92bV9vcHM7CisjZW5kaWYKIAogU1RBVElDIGlubGluZSBzc2l6ZV90CiBfX2xpbnZmc19yZWFkKApAQCAtMzg4LDYgKzM5MCwxNCBAQAogCXJldHVybiAtZXJyb3I7CiB9CiAKKyNpZmRlZiBDT05GSUdfWEZTX0RNQVBJCitTVEFUSUMgdm9pZAorbGludmZzX21tYXBfY2xvc2UoCisJc3RydWN0IHZtX2FyZWFfc3RydWN0CSp2bWEpCit7CisJeGZzX2RtX21tX3B1dCh2bWEpOworfQorI2VuZGlmIC8qIENPTkZJR19YRlNfRE1BUEkgKi8KIAogU1RBVElDIGludAogbGludmZzX2ZpbGVfbW1hcCgKQEAgLTM5OSwxNiArNDA5LDE5IEBACiAJdmF0dHJfdAkJdmEgPSB7IC52YV9tYXNrID0gWEZTX0FUX1VQREFUSU1FIH07CiAJaW50CQllcnJvcjsKIAorCXZtYS0+dm1fb3BzID0gJmxpbnZmc19maWxlX3ZtX29wczsKKwogCWlmICh2cC0+dl92ZnNwLT52ZnNfZmxhZyAmIFZGU19ETUkpIHsKIAkJeGZzX21vdW50X3QJKm1wID0gWEZTX1ZGU1RPTSh2cC0+dl92ZnNwKTsKIAogCQllcnJvciA9IC1YRlNfU0VORF9NTUFQKG1wLCB2bWEsIDApOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CisjaWZkZWYgQ09ORklHX1hGU19ETUFQSQorCQl2bWEtPnZtX29wcyA9ICZsaW52ZnNfZG1hcGlfZmlsZV92bV9vcHM7CisjZW5kaWYKIAl9CiAKLQl2bWEtPnZtX29wcyA9ICZsaW52ZnNfZmlsZV92bV9vcHM7Ci0KIAlWT1BfU0VUQVRUUih2cCwgJnZhLCBYRlNfQVRfVVBEQVRJTUUsIE5VTEwsIGVycm9yKTsKIAlpZiAoIWVycm9yKQogCQl2bl9yZXZhbGlkYXRlKHZwKTsJLyogdXBkYXRlIExpbnV4IGlub2RlIGZsYWdzICovCkBAIC02MDksNyArNjIyLDE1IEBACiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGxpbnZmc19maWxlX3ZtX29wcyA9IHsKIAkubm9wYWdlCQk9IGZpbGVtYXBfbm9wYWdlLAogCS5wb3B1bGF0ZQk9IGZpbGVtYXBfcG9wdWxhdGUsCit9OworCisjaWZkZWYgQ09ORklHX1hGU19ETUFQSQorc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBsaW52ZnNfZG1hcGlfZmlsZV92bV9vcHMgPSB7CisJLmNsb3NlCQk9IGxpbnZmc19tbWFwX2Nsb3NlLAorCS5ub3BhZ2UJCT0gZmlsZW1hcF9ub3BhZ2UsCisJLnBvcHVsYXRlCT0gZmlsZW1hcF9wb3B1bGF0ZSwKICNpZmRlZiBIQVZFX1ZNT1BfTVBST1RFQ1QKIAkubXByb3RlY3QJPSBsaW52ZnNfbXByb3RlY3QsCiAjZW5kaWYKIH07CisjZW5kaWYgLyogQ09ORklHX1hGU19ETUFQSSAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKaW5kZXggNjk4MDllZS4uMDVhNDQ3ZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCkBAIC0xMTc0LDcgKzExNzQsOCBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFhGU19JT0NfRlNHRVRYQVRUUjogewotCQl2YS52YV9tYXNrID0gWEZTX0FUX1hGTEFHU3xYRlNfQVRfRVhUU0laRXxYRlNfQVRfTkVYVEVOVFM7CisJCXZhLnZhX21hc2sgPSBYRlNfQVRfWEZMQUdTIHwgWEZTX0FUX0VYVFNJWkUgfCBcCisJCQkgICAgIFhGU19BVF9ORVhURU5UUyB8IFhGU19BVF9QUk9KSUQ7CiAJCVZPUF9HRVRBVFRSKHZwLCAmdmEsIDAsIE5VTEwsIGVycm9yKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIC1lcnJvcjsKQEAgLTExODIsNiArMTE4Myw3IEBACiAJCWZhLmZzeF94ZmxhZ3MJPSB2YS52YV94ZmxhZ3M7CiAJCWZhLmZzeF9leHRzaXplCT0gdmEudmFfZXh0c2l6ZTsKIAkJZmEuZnN4X25leHRlbnRzID0gdmEudmFfbmV4dGVudHM7CisJCWZhLmZzeF9wcm9qaWQJPSB2YS52YV9wcm9qaWQ7CiAKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmYSwgc2l6ZW9mKGZhKSkpCiAJCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOwpAQCAtMTE5Niw5ICsxMTk4LDEwIEBACiAJCWlmIChmaWxwLT5mX2ZsYWdzICYgKE9fTkRFTEFZfE9fTk9OQkxPQ0spKQogCQkJYXR0cl9mbGFncyB8PSBBVFRSX05PTkJMT0NLOwogCi0JCXZhLnZhX21hc2sgPSBYRlNfQVRfWEZMQUdTIHwgWEZTX0FUX0VYVFNJWkU7CisJCXZhLnZhX21hc2sgPSBYRlNfQVRfWEZMQUdTIHwgWEZTX0FUX0VYVFNJWkUgfCBYRlNfQVRfUFJPSklEOwogCQl2YS52YV94ZmxhZ3MgID0gZmEuZnN4X3hmbGFnczsKIAkJdmEudmFfZXh0c2l6ZSA9IGZhLmZzeF9leHRzaXplOworCQl2YS52YV9wcm9qaWQgID0gZmEuZnN4X3Byb2ppZDsKIAogCQlWT1BfU0VUQVRUUih2cCwgJnZhLCBhdHRyX2ZsYWdzLCBOVUxMLCBlcnJvcik7CiAJCWlmICghZXJyb3IpCkBAIC0xMjA3LDcgKzEyMTAsOCBAQAogCX0KIAogCWNhc2UgWEZTX0lPQ19GU0dFVFhBVFRSQTogewotCQl2YS52YV9tYXNrID0gWEZTX0FUX1hGTEFHU3xYRlNfQVRfRVhUU0laRXxYRlNfQVRfQU5FWFRFTlRTOworCQl2YS52YV9tYXNrID0gWEZTX0FUX1hGTEFHUyB8IFhGU19BVF9FWFRTSVpFIHwgXAorCQkJICAgICBYRlNfQVRfQU5FWFRFTlRTIHwgWEZTX0FUX1BST0pJRDsKIAkJVk9QX0dFVEFUVFIodnAsICZ2YSwgMCwgTlVMTCwgZXJyb3IpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gLWVycm9yOwpAQCAtMTIxNSw2ICsxMjE5LDcgQEAKIAkJZmEuZnN4X3hmbGFncwk9IHZhLnZhX3hmbGFnczsKIAkJZmEuZnN4X2V4dHNpemUJPSB2YS52YV9leHRzaXplOwogCQlmYS5mc3hfbmV4dGVudHMgPSB2YS52YV9hbmV4dGVudHM7CisJCWZhLmZzeF9wcm9qaWQJPSB2YS52YV9wcm9qaWQ7CiAKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmYSwgc2l6ZW9mKGZhKSkpCiAJCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKaW5kZXggNzFiYjQxMC4uNDJkYzVlNCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCkBAIC0xNDUsMTAgKzE0NSwxMCBAQAogI2RlZmluZSB4ZnNfaW5oZXJpdF9ub3N5bWxpbmtzCXhmc19wYXJhbXMuaW5oZXJpdF9ub3N5bS52YWwKICNkZWZpbmUgeGZzX3JvdG9yc3RlcAkJeGZzX3BhcmFtcy5yb3RvcnN0ZXAudmFsCiAKLSNpZm5kZWYgX19zbXBfcHJvY2Vzc29yX2lkCi0jZGVmaW5lIF9fc21wX3Byb2Nlc3Nvcl9pZCgpCXNtcF9wcm9jZXNzb3JfaWQoKQorI2lmbmRlZiByYXdfc21wX3Byb2Nlc3Nvcl9pZAorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCXNtcF9wcm9jZXNzb3JfaWQoKQogI2VuZGlmCi0jZGVmaW5lIGN1cnJlbnRfY3B1KCkJCV9fc21wX3Byb2Nlc3Nvcl9pZCgpCisjZGVmaW5lIGN1cnJlbnRfY3B1KCkJCXJhd19zbXBfcHJvY2Vzc29yX2lkKCkKICNkZWZpbmUgY3VycmVudF9waWQoKQkJKGN1cnJlbnQtPnBpZCkKICNkZWZpbmUgY3VycmVudF9mc3VpZChjcmVkKQkoY3VycmVudC0+ZnN1aWQpCiAjZGVmaW5lIGN1cnJlbnRfZnNnaWQoY3JlZCkJKGN1cnJlbnQtPmZzZ2lkKQpAQCAtMjMwLDggKzIzMCwxMCBAQAogICogZmllbGQgKHNlZSB0aGUgUUNNRCBtYWNybyBpbiBxdW90YS5oKS4gIFRoZXNlIG1hY3JvcyBoZWxwIGtlZXAgdGhlCiAgKiBjb2RlIHBvcnRhYmxlIC0gdGhleSBhcmUgbm90IHZpc2libGUgZnJvbSB0aGUgc3lzY2FsbCBpbnRlcmZhY2UuCiAgKi8KLSNkZWZpbmUgUV9YU0VUR1FMSU0JWFFNX0NNRCgweDgpCS8qIHNldCBncm91cHMgZGlzayBsaW1pdHMgKi8KLSNkZWZpbmUgUV9YR0VUR1FVT1RBCVhRTV9DTUQoMHg5KQkvKiBnZXQgZ3JvdXBzIGRpc2sgbGltaXRzICovCisjZGVmaW5lIFFfWFNFVEdRTElNCVhRTV9DTUQoOCkJLyogc2V0IGdyb3VwcyBkaXNrIGxpbWl0cyAqLworI2RlZmluZSBRX1hHRVRHUVVPVEEJWFFNX0NNRCg5KQkvKiBnZXQgZ3JvdXBzIGRpc2sgbGltaXRzICovCisjZGVmaW5lIFFfWFNFVFBRTElNCVhRTV9DTUQoMTApCS8qIHNldCBwcm9qZWN0cyBkaXNrIGxpbWl0cyAqLworI2RlZmluZSBRX1hHRVRQUVVPVEEJWFFNX0NNRCgxMSkJLyogZ2V0IHByb2plY3RzIGRpc2sgbGltaXRzICovCiAKIC8qIElSSVggdXNlcyBhIGR5bmFtaWMgc2l6aW5nIGFsZ29yaXRobSAobmRxdW90ID0gMjAwICsgbnVtcHJvY3MqMikgKi8KIC8qIHdlIG1heSB3ZWxsIG5lZWQgdG8gZmluZS10dW5lIHRoaXMgaWYgaXQgZXZlciBiZWNvbWVzIGFuIGlzc3VlLiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggYWE5ZGFhZS4uYWNhYjU4YyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTIwOSwzMCArMjA5LDYgQEAKIAlyZXR1cm4gKC1zdGF0dXMpOwogfQogCi0vKgotICogeGZzX2ludmFsX2NhY2hlZF9wYWdlcwotICogCi0gKiBUaGlzIHJvdXRpbmUgaXMgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PCi0gKiBzb21ld2hhdCBjb2hlcmVudC4gIEZyb20gaGVyZSB3ZSBtYWtlIHN1cmUgdGhhdCB3ZSdyZSBhdCBsZWFzdAotICogdGVtcG9yYXJpbHkgaG9sZGluZyB0aGUgaW5vZGUgSS9PIGxvY2sgZXhjbHVzaXZlbHkgYW5kIHRoZW4gY2FsbAotICogdGhlIHBhZ2UgY2FjaGUgdG8gZmx1c2ggYW5kIGludmFsaWRhdGUgYW55IGNhY2hlZCBwYWdlcy4gIElmIHRoZXJlCi0gKiBhcmUgbm8gY2FjaGVkIHBhZ2VzIHRoaXMgcm91dGluZSB3aWxsIGJlIHZlcnkgcXVpY2suCi0gKi8KLXZvaWQKLXhmc19pbnZhbF9jYWNoZWRfcGFnZXMoCi0Jdm5vZGVfdAkJKnZwLAotCXhmc19pb2NvcmVfdAkqaW8sCi0JeGZzX29mZl90CW9mZnNldCwKLQlpbnQJCXdyaXRlLAotCWludAkJcmVsb2NrKQotewotCWlmIChWTl9DQUNIRUQodnApKSB7Ci0JCXhmc19pbnZhbF9jYWNoZWRfdHJhY2UoaW8sIG9mZnNldCwgLTEsIGN0b29mZihvZmZ0b2N0KG9mZnNldCkpLCAtMSk7Ci0JCVZPUF9GTFVTSElOVkFMX1BBR0VTKHZwLCBjdG9vZmYob2ZmdG9jdChvZmZzZXQpKSwgLTEsIEZJX1JFTUFQRl9MT0NLRUQpOwotCX0KLQotfQotCiBzc2l6ZV90CQkJLyogYnl0ZXMgcmVhZCwgb3IgKC0pICBlcnJvciAqLwogeGZzX3JlYWQoCiAJYmh2X2Rlc2NfdAkJKmJkcCwKQEAgLTMwNCwxMCArMjgwLDExIEBACiAJaWYgKERNX0VWRU5UX0VOQUJMRUQodnAtPnZfdmZzcCwgaXAsIERNX0VWRU5UX1JFQUQpICYmCiAJICAgICEoaW9mbGFncyAmIElPX0lOVklTKSkgewogCQl2cndsb2NrX3QgbG9ja3R5cGUgPSBWUldMT0NLX1JFQUQ7CisJCWludCBkbWZsYWdzID0gRklMUF9ERUxBWV9GTEFHKGZpbGUpIHwgRE1fU0VNX0ZMQUdfUkQoaW9mbGFncyk7CiAKIAkJcmV0ID0gLVhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1JFQUQsCiAJCQkJCUJIVl9UT19WTk9ERShiZHApLCAqb2Zmc2V0LCBzaXplLAotCQkJCQlGSUxQX0RFTEFZX0ZMQUcoZmlsZSksICZsb2NrdHlwZSk7CisJCQkJCWRtZmxhZ3MsICZsb2NrdHlwZSk7CiAJCWlmIChyZXQpIHsKIAkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CiAJCQlnb3RvIHVubG9ja19pc2VtOwpAQCAtODY3LDExICs4NDQsMTUgQEAKIAkgICAgIShpb2ZsYWdzICYgSU9fSU5WSVMpKSB7CiAKIAkJeGZzX3J3dW5sb2NrKGJkcCwgbG9ja3R5cGUpOworCQlpZiAobmVlZF9pc2VtKQorCQkJdXAoJmlub2RlLT5pX3NlbSk7CiAJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKHhpcC0+aV9tb3VudCwgRE1fRVZFTlRfTk9TUEFDRSwgdnAsCiAJCQkJRE1fUklHSFRfTlVMTCwgdnAsIERNX1JJR0hUX05VTEwsIE5VTEwsIE5VTEwsCiAJCQkJMCwgMCwgMCk7IC8qIERlbGF5IGZsYWcgaW50ZW50aW9uYWxseSAgdW51c2VkICovCiAJCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X3VubG9ja19pc2VtOworCQkJZ290byBvdXRfbm91bmxvY2tzOworCQlpZiAobmVlZF9pc2VtKQorCQkJZG93bigmaW5vZGUtPmlfc2VtKTsKIAkJeGZzX3J3bG9jayhiZHAsIGxvY2t0eXBlKTsKIAkJcG9zID0geGlwLT5pX2QuZGlfc2l6ZTsKIAkJcmV0ID0gMDsKQEAgLTk4Niw2ICs5NjcsNyBAQAogIG91dF91bmxvY2tfaXNlbToKIAlpZiAobmVlZF9pc2VtKQogCQl1cCgmaW5vZGUtPmlfc2VtKTsKKyBvdXRfbm91bmxvY2tzOgogCXJldHVybiAtZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmgKaW5kZXggZDcyM2UzNS4uZjE5N2E3MiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmgKQEAgLTk0LDggKzk0LDYgQEAKIAogZXh0ZXJuIGludCB4ZnNfemVyb19lb2Yoc3RydWN0IHZub2RlICosIHN0cnVjdCB4ZnNfaW9jb3JlICosIHhmc19vZmZfdCwKIAkJCQl4ZnNfZnNpemVfdCwgeGZzX2ZzaXplX3QpOwotZXh0ZXJuIHZvaWQgeGZzX2ludmFsX2NhY2hlZF9wYWdlcyhzdHJ1Y3Qgdm5vZGUJKiwgc3RydWN0IHhmc19pb2NvcmUgKiwKLQkJCQl4ZnNfb2ZmX3QsIGludCwgaW50KTsKIGV4dGVybiBzc2l6ZV90IHhmc19yZWFkKHN0cnVjdCBiaHZfZGVzYyAqLCBzdHJ1Y3Qga2lvY2IgKiwKIAkJCQljb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgaW50LAogCQkJCWxvZmZfdCAqLCBpbnQsIHN0cnVjdCBjcmVkICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggNDU1ZTJiMi4uNWZlOWFmMyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC01OTAsOCArNTkwLDEwIEBACiAJaW50CQllcnJvcjsKIAlpbnQJCWZsYWdzID0gU1lOQ19GU0RBVEE7CiAKLQlpZiAod2FpdCkKLQkJZmxhZ3MgfD0gU1lOQ19XQUlUOworCWlmICh1bmxpa2VseShzYi0+c19mcm96ZW4gPT0gU0JfRlJFRVpFX1dSSVRFKSkKKwkJZmxhZ3MgPSBTWU5DX1FVSUVTQ0U7CisJZWxzZQorCQlmbGFncyA9IFNZTkNfRlNEQVRBIHwgKHdhaXQgPyBTWU5DX1dBSVQgOiAwKTsKIAogCVZGU19TWU5DKHZmc3AsIGZsYWdzLCBOVUxMLCBlcnJvcik7CiAJc2ItPnNfZGlydCA9IDA7CkBAIC03MDEsNyArNzAzLDggQEAKIAlzdHJ1Y3QgdmZzCQkqdmZzcCA9IExJTlZGU19HRVRfVkZTKHNiKTsKIAlpbnQJCQllcnJvciwgZ2V0bW9kZTsKIAotCWdldG1vZGUgPSAodHlwZSA9PSBHUlBRVU9UQSkgPyBRX1hHRVRHUVVPVEEgOiBRX1hHRVRRVU9UQTsKKwlnZXRtb2RlID0gKHR5cGUgPT0gVVNSUVVPVEEpID8gUV9YR0VUUVVPVEEgOgorCQkgKCh0eXBlID09IEdSUFFVT1RBKSA/IFFfWEdFVEdRVU9UQSA6IFFfWEdFVFBRVU9UQSk7CiAJVkZTX1FVT1RBQ1RMKHZmc3AsIGdldG1vZGUsIGlkLCAoY2FkZHJfdClmZHEsIGVycm9yKTsKIAlyZXR1cm4gLWVycm9yOwogfQpAQCAtNzE2LDcgKzcxOSw4IEBACiAJc3RydWN0IHZmcwkJKnZmc3AgPSBMSU5WRlNfR0VUX1ZGUyhzYik7CiAJaW50CQkJZXJyb3IsIHNldG1vZGU7CiAKLQlzZXRtb2RlID0gKHR5cGUgPT0gR1JQUVVPVEEpID8gUV9YU0VUR1FMSU0gOiBRX1hTRVRRTElNOworCXNldG1vZGUgPSAodHlwZSA9PSBVU1JRVU9UQSkgPyBRX1hTRVRRTElNIDoKKwkJICgodHlwZSA9PSBHUlBRVU9UQSkgPyBRX1hTRVRHUUxJTSA6IFFfWFNFVFBRTElNKTsKIAlWRlNfUVVPVEFDVEwodmZzcCwgc2V0bW9kZSwgaWQsIChjYWRkcl90KWZkcSwgZXJyb3IpOwogCXJldHVybiAtZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192ZnMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5oCmluZGV4IDc2NDkzOTkuLjdlZTFmNzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5oCkBAIC0xMDcsNiArMTA3LDcgQEAKICNkZWZpbmUgU1lOQ19GU0RBVEEJCTB4MDAyMAkvKiBmbHVzaCBmcyBkYXRhIChlLmcuIHN1cGVyYmxvY2tzKSAqLwogI2RlZmluZSBTWU5DX1JFRkNBQ0hFCQkweDAwNDAgIC8qIHBydW5lIHNvbWUgb2YgdGhlIG5mcyByZWYgY2FjaGUgKi8KICNkZWZpbmUgU1lOQ19SRU1PVU5UCQkweDAwODAgIC8qIHJlbW91bnQgcmVhZG9ubHksIG5vIGR1bW15IExScyAqLworI2RlZmluZSBTWU5DX1FVSUVTQ0UJCTB4MDEwMCAgLyogcXVpZXNjZSBmaWxleXN0ZW0gZm9yIGEgc25hcHNob3QgKi8KIAogdHlwZWRlZiBpbnQJKCp2ZnNfbW91bnRfdCkoYmh2X2Rlc2NfdCAqLAogCQkJCXN0cnVjdCB4ZnNfbW91bnRfYXJncyAqLCBzdHJ1Y3QgY3JlZCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5jCmluZGV4IGE4MzJkMTYuLjI1MGNhZDUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuYwpAQCAtNDExLDEzICs0MTEsMTMgQEAKIC8qICAwICovCQkodm9pZCAqKShfX3BzaW50X3QpKHZrKSwJCVwKIC8qICAxICovCQkodm9pZCAqKShzKSwJCQkJXAogLyogIDIgKi8JCSh2b2lkICopKF9fcHNpbnRfdCkgbGluZSwJCVwKLS8qICAzICovCQkodm9pZCAqKSh2bl9jb3VudCh2cCkpLCBcCisvKiAgMyAqLwkJKHZvaWQgKikoX19wc2ludF90KSh2bl9jb3VudCh2cCkpLAlcCiAvKiAgNCAqLwkJKHZvaWQgKikocmEpLAkJCQlcCiAvKiAgNSAqLwkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpKHZwKS0+dl9mbGFnLAlcCiAvKiAgNiAqLwkJKHZvaWQgKikoX19wc2ludF90KWN1cnJlbnRfY3B1KCksCVwKIC8qICA3ICovCQkodm9pZCAqKShfX3BzaW50X3QpY3VycmVudF9waWQoKSwJXAogLyogIDggKi8JCSh2b2lkICopX19yZXR1cm5fYWRkcmVzcywJCVwKLS8qICA5ICovCQkwLCAwLCAwLCAwLCAwLCAwLCAwKQorLyogIDkgKi8JCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCiAKIC8qCiAgKiBWbm9kZSB0cmFjaW5nIGNvZGUuCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaAppbmRleCAwMDQ2NmMzLi5hNmU1N2M2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKQEAgLTQyNiw3ICs0MjYsNyBAQAogCXVfbG9uZwkJdmFfZXh0c2l6ZTsJLyogZmlsZSBleHRlbnQgc2l6ZSAqLwogCXVfbG9uZwkJdmFfbmV4dGVudHM7CS8qIG51bWJlciBvZiBleHRlbnRzIGluIGZpbGUgKi8KIAl1X2xvbmcJCXZhX2FuZXh0ZW50czsJLyogbnVtYmVyIG9mIGF0dHIgZXh0ZW50cyBpbiBmaWxlICovCi0JaW50CQl2YV9wcm9qaWQ7CS8qIHByb2plY3QgaWQgKi8KKwlwcmlkX3QJCXZhX3Byb2ppZDsJLyogcHJvamVjdCBpZCAqLwogfSB2YXR0cl90OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCmluZGV4IDc0MGQyMGQuLjQ2Y2UxZTMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogICogaXMgdGhlIGRfaWQgZmllbGQuIFRoZSBpZGVhIGlzIHRvIGZpbGwgaW4gdGhlIGVudGlyZSBxX2NvcmUKICAqIHdoZW4gd2UgcmVhZCBpbiB0aGUgb24gZGlzayBkcXVvdC4KICAqLwoteGZzX2RxdW90X3QgKgorU1RBVElDIHhmc19kcXVvdF90ICoKIHhmc19xbV9kcWluaXQoCiAJeGZzX21vdW50X3QgICptcCwKIAl4ZnNfZHFpZF90ICAgaWQsCkBAIC0yODYsNyArMjg2LDkgQEAKICAqIFdlIGFsc28gcmV0dXJuIDAgYXMgdGhlIHZhbHVlcyBvZiB0aGUgdGltZXJzIGluIFFfR0VUUVVPVEEgY2FsbHMsIHdoZW4KICAqIGVuZm9yY2VtZW50J3Mgb2ZmLgogICogSW4gY29udHJhc3QsIHdhcm5pbmdzIGFyZSBhIGxpdHRsZSBkaWZmZXJlbnQgaW4gdGhhdCB0aGV5IGRvbid0Ci0gKiAnYXV0b21hdGljYWxseScgZ2V0IHN0YXJ0ZWQgd2hlbiBsaW1pdHMgZ2V0IGV4Y2VlZGVkLgorICogJ2F1dG9tYXRpY2FsbHknIGdldCBzdGFydGVkIHdoZW4gbGltaXRzIGdldCBleGNlZWRlZC4gIFRoZXkgZG8KKyAqIGdldCByZXNldCB0byB6ZXJvLCBob3dldmVyLCB3aGVuIHdlIGZpbmQgdGhlIGNvdW50IHRvIGJlIHVuZGVyCisgKiB0aGUgc29mdCBsaW1pdCAodGhleSBhcmUgb25seSBldmVyIHNldCBub24temVybyB2aWEgdXNlcnNwYWNlKS4KICAqLwogdm9pZAogeGZzX3FtX2FkanVzdF9kcXRpbWVycygKQEAgLTMxNSw2ICszMTcsOCBAQAogCQkJCUlOVF9HRVQoZC0+ZF9ibGtfaGFyZGxpbWl0LCBBUkNIX0NPTlZFUlQpKSkpIHsKIAkJCUlOVF9TRVQoZC0+ZF9idGltZXIsIEFSQ0hfQ09OVkVSVCwKIAkJCQlnZXRfc2Vjb25kcygpICsgWEZTX1FJX0JUSU1FTElNSVQobXApKTsKKwkJfSBlbHNlIHsKKwkJCWQtPmRfYndhcm5zID0gMDsKIAkJfQogCX0gZWxzZSB7CiAJCWlmICgoIWQtPmRfYmxrX3NvZnRsaW1pdCB8fApAQCAtMzM2LDYgKzM0MCw4IEBACiAJCQkJSU5UX0dFVChkLT5kX2lub19oYXJkbGltaXQsIEFSQ0hfQ09OVkVSVCkpKSkgewogCQkJSU5UX1NFVChkLT5kX2l0aW1lciwgQVJDSF9DT05WRVJULAogCQkJCWdldF9zZWNvbmRzKCkgKyBYRlNfUUlfSVRJTUVMSU1JVChtcCkpOworCQl9IGVsc2UgeworCQkJZC0+ZF9pd2FybnMgPSAwOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKCghZC0+ZF9pbm9fc29mdGxpbWl0IHx8CkBAIC0zNTcsNiArMzYzLDggQEAKIAkJCQlJTlRfR0VUKGQtPmRfcnRiX2hhcmRsaW1pdCwgQVJDSF9DT05WRVJUKSkpKSB7CiAJCQlJTlRfU0VUKGQtPmRfcnRidGltZXIsIEFSQ0hfQ09OVkVSVCwKIAkJCQlnZXRfc2Vjb25kcygpICsgWEZTX1FJX1JUQlRJTUVMSU1JVChtcCkpOworCQl9IGVsc2UgeworCQkJZC0+ZF9ydGJ3YXJucyA9IDA7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoKCFkLT5kX3J0Yl9zb2Z0bGltaXQgfHwKQEAgLTM3MSw2OCArMzc5LDYgQEAKIH0KIAogLyoKLSAqIEluY3JlbWVudCBvciByZXNldCB3YXJuaW5ncyBvZiBhIGdpdmVuIGRxdW90LgotICovCi1pbnQKLXhmc19xbV9kcXdhcm4oCi0JeGZzX2Rpc2tfZHF1b3RfdAkqZCwKLQl1aW50CQkJZmxhZ3MpCi17Ci0JaW50CXdhcm5lZDsKLQotCS8qCi0JICogcm9vdCdzIGxpbWl0cyBhcmUgbm90IHJlYWwgbGltaXRzLgotCSAqLwotCWlmICghZC0+ZF9pZCkKLQkJcmV0dXJuICgwKTsKLQotCXdhcm5lZCA9IDA7Ci0JaWYgKElOVF9HRVQoZC0+ZF9ibGtfc29mdGxpbWl0LCBBUkNIX0NPTlZFUlQpICYmCi0JICAgIChJTlRfR0VUKGQtPmRfYmNvdW50LCBBUkNIX0NPTlZFUlQpID49Ci0JICAgICBJTlRfR0VUKGQtPmRfYmxrX3NvZnRsaW1pdCwgQVJDSF9DT05WRVJUKSkpIHsKLQkJaWYgKGZsYWdzICYgWEZTX1FNT1BUX0RPV0FSTikgewotCQkJSU5UX01PRChkLT5kX2J3YXJucywgQVJDSF9DT05WRVJULCArMSk7Ci0JCQl3YXJuZWQrKzsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICghZC0+ZF9ibGtfc29mdGxpbWl0IHx8Ci0JCSAgICAoSU5UX0dFVChkLT5kX2Jjb3VudCwgQVJDSF9DT05WRVJUKSA8Ci0JCSAgICAgSU5UX0dFVChkLT5kX2Jsa19zb2Z0bGltaXQsIEFSQ0hfQ09OVkVSVCkpKSB7Ci0JCQlkLT5kX2J3YXJucyA9IDA7Ci0JCX0KLQl9Ci0KLQlpZiAoSU5UX0dFVChkLT5kX2lub19zb2Z0bGltaXQsIEFSQ0hfQ09OVkVSVCkgPiAwICYmCi0JICAgIChJTlRfR0VUKGQtPmRfaWNvdW50LCBBUkNIX0NPTlZFUlQpID49Ci0JICAgICBJTlRfR0VUKGQtPmRfaW5vX3NvZnRsaW1pdCwgQVJDSF9DT05WRVJUKSkpIHsKLQkJaWYgKGZsYWdzICYgWEZTX1FNT1BUX0RPV0FSTikgewotCQkJSU5UX01PRChkLT5kX2l3YXJucywgQVJDSF9DT05WRVJULCArMSk7Ci0JCQl3YXJuZWQrKzsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICghZC0+ZF9pbm9fc29mdGxpbWl0IHx8Ci0JCSAgICAoSU5UX0dFVChkLT5kX2ljb3VudCwgQVJDSF9DT05WRVJUKSA8Ci0JCSAgICAgSU5UX0dFVChkLT5kX2lub19zb2Z0bGltaXQsIEFSQ0hfQ09OVkVSVCkpKSB7Ci0JCQlkLT5kX2l3YXJucyA9IDA7Ci0JCX0KLQl9Ci0jaWZkZWYgUVVPVEFERUJVRwotCWlmIChJTlRfR0VUKGQtPmRfaXdhcm5zLCBBUkNIX0NPTlZFUlQpKQotCQljbW5fZXJyKENFX0RFQlVHLAotCQkJIi0tLS0tLS0tQEBJbm9kZSB3YXJuaW5ncyBydW5uaW5nIDogJUx1ID49ICVMdSIsCi0JCQlJTlRfR0VUKGQtPmRfaWNvdW50LCBBUkNIX0NPTlZFUlQpLAotCQkJSU5UX0dFVChkLT5kX2lub19zb2Z0bGltaXQsIEFSQ0hfQ09OVkVSVCkpOwotCWlmIChJTlRfR0VUKGQtPmRfYndhcm5zLCBBUkNIX0NPTlZFUlQpKQotCQljbW5fZXJyKENFX0RFQlVHLAotCQkJIi0tLS0tLS0tQEBCbGtzIHdhcm5pbmdzIHJ1bm5pbmcgOiAlTHUgPj0gJUx1IiwKLQkJCUlOVF9HRVQoZC0+ZF9iY291bnQsIEFSQ0hfQ09OVkVSVCksCi0JCQlJTlRfR0VUKGQtPmRfYmxrX3NvZnRsaW1pdCwgQVJDSF9DT05WRVJUKSk7Ci0jZW5kaWYKLQlyZXR1cm4gKHdhcm5lZCk7Ci19Ci0KLQotLyoKICAqIGluaXRpYWxpemUgYSBidWZmZXIgZnVsbCBvZiBkcXVvdHMgYW5kIGxvZyB0aGUgd2hvbGUgdGhpbmcKICAqLwogU1RBVElDIHZvaWQKQEAgLTQ2MSw5ICs0MDcsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBYRlNfUU1fRFFQRVJCTEsobXApOyBpKyssIGQrKywgY3VyaWQrKykKIAkJeGZzX3FtX2RxaW5pdF9jb3JlKGN1cmlkLCB0eXBlLCBkKTsKIAl4ZnNfdHJhbnNfZHF1b3RfYnVmKHRwLCBicCwKLQkJCSAgICB0eXBlICYgWEZTX0RRX1VTRVIgPwotCQkJICAgIFhGU19CTElfVURRVU9UX0JVRiA6Ci0JCQkgICAgWEZTX0JMSV9HRFFVT1RfQlVGKTsKKwkJCSAgICAodHlwZSAmIFhGU19EUV9VU0VSID8gWEZTX0JMSV9VRFFVT1RfQlVGIDoKKwkJCSAgICAoKHR5cGUgJiBYRlNfRFFfUFJPSikgPyBYRlNfQkxJX1BEUVVPVF9CVUYgOgorCQkJICAgICBYRlNfQkxJX0dEUVVPVF9CVUYpKSk7CiAJeGZzX3RyYW5zX2xvZ19idWYodHAsIGJwLCAwLCBCQlRPQihYRlNfUUlfRFFDSFVOS0xFTihtcCkpIC0gMSk7CiB9CiAKQEAgLTU0NCw4ICs0OTAsNyBAQAogCSAqIHRoZSBlbnRpcmUgdGhpbmcuCiAJICovCiAJeGZzX3FtX2luaXRfZHF1b3RfYmxrKHRwLCBtcCwgSU5UX0dFVChkcXAtPnFfY29yZS5kX2lkLCBBUkNIX0NPTlZFUlQpLAotCQkJICAgICAgZHFwLT5kcV9mbGFncyAmIChYRlNfRFFfVVNFUnxYRlNfRFFfR1JPVVApLAotCQkJICAgICAgYnApOworCQkJICAgICAgZHFwLT5kcV9mbGFncyAmIFhGU19EUV9BTExUWVBFUywgYnApOwogCiAJaWYgKChlcnJvciA9IHhmc19ibWFwX2ZpbmlzaCgmdHAsICZmbGlzdCwgZmlyc3RibG9jaywgJmNvbW1pdHRlZCkpKSB7CiAJCWdvdG8gZXJyb3IxOwpAQCAtNjc1LDggKzYyMCw3IEBACiAJLyoKIAkgKiBBIHNpbXBsZSBzYW5pdHkgY2hlY2sgaW4gY2FzZSB3ZSBnb3QgYSBjb3JydXB0ZWQgZHF1b3QuLi4KIAkgKi8KLQlpZiAoeGZzX3FtX2RxY2hlY2soZGRxLCBpZCwKLQkJCSAgIGRxcC0+ZHFfZmxhZ3MgJiAoWEZTX0RRX1VTRVJ8WEZTX0RRX0dST1VQKSwKKwlpZiAoeGZzX3FtX2RxY2hlY2soZGRxLCBpZCwgZHFwLT5kcV9mbGFncyAmIFhGU19EUV9BTExUWVBFUywKIAkJCSAgIGZsYWdzICYgKFhGU19RTU9QVF9EUVJFUEFJUnxYRlNfUU1PUFRfRE9XQVJOKSwKIAkJCSAgICJkcXRvYnAiKSkgewogCQlpZiAoIShmbGFncyAmIFhGU19RTU9QVF9EUVJFUEFJUikpIHsKQEAgLTk1Myw4ICs4OTcsOCBAQAogeGZzX3FtX2RxZ2V0KAogCXhmc19tb3VudF90CSptcCwKIAl4ZnNfaW5vZGVfdAkqaXAsCSAgLyogbG9ja2VkIGlub2RlIChvcHRpb25hbCkgKi8KLQl4ZnNfZHFpZF90CWlkLAkgIC8qIGdpZCBvciB1aWQsIGRlcGVuZGluZyBvbiB0eXBlICovCi0JdWludAkJdHlwZSwJICAvKiBVRFFVT1Qgb3IgR0RRVU9UICovCisJeGZzX2RxaWRfdAlpZCwJICAvKiB1aWQvcHJvamlkL2dpZCBkZXBlbmRpbmcgb24gdHlwZSAqLworCXVpbnQJCXR5cGUsCSAgLyogWEZTX0RRX1VTRVIvWEZTX0RRX1BST0ovWEZTX0RRX0dST1VQICovCiAJdWludAkJZmxhZ3MsCSAgLyogRFFBTExPQywgRFFTVVNFUiwgRFFSRVBBSVIsIERPV0FSTiAqLwogCXhmc19kcXVvdF90CSoqT19kcXBwKSAvKiBPVVQgOiBsb2NrZWQgaW5jb3JlIGRxdW90ICovCiB7CkBAIC05NjUsNiArOTA5LDcgQEAKIAogCUFTU0VSVChYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpOwogCWlmICgoISBYRlNfSVNfVVFVT1RBX09OKG1wKSAmJiB0eXBlID09IFhGU19EUV9VU0VSKSB8fAorCSAgICAoISBYRlNfSVNfUFFVT1RBX09OKG1wKSAmJiB0eXBlID09IFhGU19EUV9QUk9KKSB8fAogCSAgICAoISBYRlNfSVNfR1FVT1RBX09OKG1wKSAmJiB0eXBlID09IFhGU19EUV9HUk9VUCkpIHsKIAkJcmV0dXJuIChFU1JDSCk7CiAJfQpAQCAtOTgzLDcgKzkyOCw5IEBACiAgYWdhaW46CiAKICNpZmRlZiBERUJVRwotCUFTU0VSVCh0eXBlID09IFhGU19EUV9VU0VSIHx8IHR5cGUgPT0gWEZTX0RRX0dST1VQKTsKKwlBU1NFUlQodHlwZSA9PSBYRlNfRFFfVVNFUiB8fAorCSAgICAgICB0eXBlID09IFhGU19EUV9QUk9KIHx8CisJICAgICAgIHR5cGUgPT0gWEZTX0RRX0dST1VQKTsKIAlpZiAoaXApIHsKIAkJQVNTRVJUKFhGU19JU0xPQ0tFRF9JTk9ERV9FWENMKGlwKSk7CiAJCWlmICh0eXBlID09IFhGU19EUV9VU0VSKQpAQCAtMTMwNiw4ICsxMjUzLDggQEAKIAkJcmV0dXJuIChlcnJvcik7CiAJfQogCi0JaWYgKHhmc19xbV9kcWNoZWNrKCZkcXAtPnFfY29yZSwgSU5UX0dFVChkZHFwLT5kX2lkLCBBUkNIX0NPTlZFUlQpLCAwLCBYRlNfUU1PUFRfRE9XQVJOLAotCQkJICAgImRxZmx1c2ggKGluY29yZSBjb3B5KSIpKSB7CisJaWYgKHhmc19xbV9kcWNoZWNrKCZkcXAtPnFfY29yZSwgSU5UX0dFVChkZHFwLT5kX2lkLCBBUkNIX0NPTlZFUlQpLAorCQkJICAgMCwgWEZTX1FNT1BUX0RPV0FSTiwgImRxZmx1c2ggKGluY29yZSBjb3B5KSIpKSB7CiAJCXhmc19mb3JjZV9zaHV0ZG93bihkcXAtPnFfbW91bnQsIFhGU19DT1JSVVBUX0lOQ09SRSk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9CkBAIC0xNDU5LDcgKzE0MDYsOCBAQAogewogCWlmIChkMSAmJiBkMikgewogCQlBU1NFUlQoZDEgIT0gZDIpOwotCQlpZiAoSU5UX0dFVChkMS0+cV9jb3JlLmRfaWQsIEFSQ0hfQ09OVkVSVCkgPiBJTlRfR0VUKGQyLT5xX2NvcmUuZF9pZCwgQVJDSF9DT05WRVJUKSkgeworCQlpZiAoSU5UX0dFVChkMS0+cV9jb3JlLmRfaWQsIEFSQ0hfQ09OVkVSVCkgPgorCQkgICAgSU5UX0dFVChkMi0+cV9jb3JlLmRfaWQsIEFSQ0hfQ09OVkVSVCkpIHsKIAkJCXhmc19kcWxvY2soZDIpOwogCQkJeGZzX2RxbG9jayhkMSk7CiAJCX0gZWxzZSB7CkBAIC0xNTgyLDggKzE1MzAsNyBAQAogCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tLS0tLS0tLUtFUk5FTCBEUVVPVC0tLS0tLS0tLS0tLS0tLS0iKTsKIAljbW5fZXJyKENFX0RFQlVHLCAiLS0tLSBkcXVvdElEID0gICVkIiwKIAkJKGludClJTlRfR0VUKGRxcC0+cV9jb3JlLmRfaWQsIEFSQ0hfQ09OVkVSVCkpOwotCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIHR5cGUgICAgPSAgJXMiLAotCQlYRlNfUU1fSVNVRFEoZHFwKSA/ICJVU1IiIDogIkdSUCIpOworCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIHR5cGUgICAgPSAgJXMiLCBEUUZMQUdUT19UWVBFU1RSKGRxcCkpOwogCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIGZzICAgICAgPSAgMHglcCIsIGRxcC0+cV9tb3VudCk7CiAJY21uX2VycihDRV9ERUJVRywgIi0tLS0gYmxrbm8gICA9ICAweCV4IiwgKGludCkgZHFwLT5xX2Jsa25vKTsKIAljbW5fZXJyKENFX0RFQlVHLCAiLS0tLSBib2Zmc2V0ID0gIDB4JXgiLCAoaW50KSBkcXAtPnFfYnVmb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuaCBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuaAppbmRleCAwYzNmZTMxLi4zOTE3NTEwIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5oCkBAIC0xMTQsMjUgKzExNCwxOCBAQAogI2RlZmluZSBYRlNfRFFIT0xEKGRxcCkJCSgoZHFwKS0+cV9ucmVmcysrKQogCiAvKgotICogUXVvdGEgQWNjb3VudGluZyBmbGFncworICogUXVvdGEgQWNjb3VudGluZy9FbmZvcmNlbWVudCBmbGFncwogICovCi0jZGVmaW5lIFhGU19BTExfUVVPVEFfQUNDVAkoWEZTX1VRVU9UQV9BQ0NUIHwgWEZTX0dRVU9UQV9BQ0NUKQotI2RlZmluZSBYRlNfQUxMX1FVT1RBX0VORkQJKFhGU19VUVVPVEFfRU5GRCB8IFhGU19HUVVPVEFfRU5GRCkKLSNkZWZpbmUgWEZTX0FMTF9RVU9UQV9DSEtECShYRlNfVVFVT1RBX0NIS0QgfCBYRlNfR1FVT1RBX0NIS0QpCi0jZGVmaW5lIFhGU19BTExfUVVPVEFfQUNUVgkoWEZTX1VRVU9UQV9BQ1RJVkUgfCBYRlNfR1FVT1RBX0FDVElWRSkKLSNkZWZpbmUgWEZTX0FMTF9RVU9UQV9BQ0NUX0VORkQgKFhGU19VUVVPVEFfQUNDVHxYRlNfVVFVT1RBX0VORkR8XAotCQkJCSBYRlNfR1FVT1RBX0FDQ1R8WEZTX0dRVU9UQV9FTkZEKQorI2RlZmluZSBYRlNfQUxMX1FVT1RBX0FDQ1QJXAorCQkoWEZTX1VRVU9UQV9BQ0NUIHwgWEZTX0dRVU9UQV9BQ0NUIHwgWEZTX1BRVU9UQV9BQ0NUKQorI2RlZmluZSBYRlNfQUxMX1FVT1RBX0VORkQJKFhGU19VUVVPVEFfRU5GRCB8IFhGU19PUVVPVEFfRU5GRCkKKyNkZWZpbmUgWEZTX0FMTF9RVU9UQV9DSEtECShYRlNfVVFVT1RBX0NIS0QgfCBYRlNfT1FVT1RBX0NIS0QpCiAKLSNkZWZpbmUgWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApICAoKG1wKS0+bV9xZmxhZ3MgJiBYRlNfQUxMX1FVT1RBX0FDQ1QpCi0jZGVmaW5lIFhGU19JU19VUVVPVEFfUlVOTklORyhtcCkgKChtcCktPm1fcWZsYWdzICYgWEZTX1VRVU9UQV9BQ0NUKQotI2RlZmluZSBYRlNfSVNfR1FVT1RBX1JVTk5JTkcobXApICgobXApLT5tX3FmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkKLQotLyoKLSAqIFF1b3RhIExpbWl0IEVuZm9yY2VtZW50IGZsYWdzCi0gKi8KKyNkZWZpbmUgWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApCSgobXApLT5tX3FmbGFncyAmIFhGU19BTExfUVVPVEFfQUNDVCkKICNkZWZpbmUgWEZTX0lTX1FVT1RBX0VORk9SQ0VEKG1wKQkoKG1wKS0+bV9xZmxhZ3MgJiBYRlNfQUxMX1FVT1RBX0VORkQpCi0jZGVmaW5lIFhGU19JU19VUVVPVEFfRU5GT1JDRUQobXApCSgobXApLT5tX3FmbGFncyAmIFhGU19VUVVPVEFfRU5GRCkKLSNkZWZpbmUgWEZTX0lTX0dRVU9UQV9FTkZPUkNFRChtcCkJKChtcCktPm1fcWZsYWdzICYgWEZTX0dRVU9UQV9FTkZEKQorI2RlZmluZSBYRlNfSVNfVVFVT1RBX1JVTk5JTkcobXApCSgobXApLT5tX3FmbGFncyAmIFhGU19VUVVPVEFfQUNDVCkKKyNkZWZpbmUgWEZTX0lTX1BRVU9UQV9SVU5OSU5HKG1wKQkoKG1wKS0+bV9xZmxhZ3MgJiBYRlNfUFFVT1RBX0FDQ1QpCisjZGVmaW5lIFhGU19JU19HUVVPVEFfUlVOTklORyhtcCkJKChtcCktPm1fcWZsYWdzICYgWEZTX0dRVU9UQV9BQ0NUKQogCiAjaWZkZWYgREVCVUcKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0xNjcsNiArMTYwLDggQEAKICNkZWZpbmUgWEZTX0RRX0lTX09OX0ZSRUVMSVNUKGRxcCkgICgoZHFwKS0+ZHFfZmxuZXh0ICE9IChkcXApKQogI2RlZmluZSBYRlNfRFFfSVNfRElSVFkoZHFwKQkoKGRxcCktPmRxX2ZsYWdzICYgWEZTX0RRX0RJUlRZKQogI2RlZmluZSBYRlNfUU1fSVNVRFEoZHFwKQkoKGRxcCktPmRxX2ZsYWdzICYgWEZTX0RRX1VTRVIpCisjZGVmaW5lIFhGU19RTV9JU1BEUShkcXApCSgoZHFwKS0+ZHFfZmxhZ3MgJiBYRlNfRFFfUFJPSikKKyNkZWZpbmUgWEZTX1FNX0lTR0RRKGRxcCkJKChkcXApLT5kcV9mbGFncyAmIFhGU19EUV9HUk9VUCkKICNkZWZpbmUgWEZTX0RRX1RPX1FJTkYoZHFwKQkoKGRxcCktPnFfbW91bnQtPm1fcXVvdGFpbmZvKQogI2RlZmluZSBYRlNfRFFfVE9fUUlQKGRxcCkJKFhGU19RTV9JU1VEUShkcXApID8gXAogCQkJCSBYRlNfRFFfVE9fUUlORihkcXApLT5xaV91cXVvdGFpcCA6IFwKQEAgLTE3NCw3ICsxNjksNyBAQAogCiAjZGVmaW5lIFhGU19JU19USElTX1FVT1RBX09GRihkKSAoISAoWEZTX1FNX0lTVURRKGQpID8gXAogCQkJCSAgICAgKFhGU19JU19VUVVPVEFfT04oKGQpLT5xX21vdW50KSkgOiBcCi0JCQkJICAgICAoWEZTX0lTX0dRVU9UQV9PTigoZCktPnFfbW91bnQpKSkpCisJCQkJICAgICAoWEZTX0lTX09RVU9UQV9PTigoZCktPnFfbW91bnQpKSkpCiAKICNpZmRlZiBYRlNfRFFVT1RfVFJBQ0UKIC8qCkBAIC0yMTEsNyArMjA2LDYgQEAKIAkJCQkJeGZzX2Rpc2tfZHF1b3RfdCAqKTsKIGV4dGVybiB2b2lkCQl4ZnNfcW1fYWRqdXN0X2RxbGltaXRzKHhmc19tb3VudF90ICosCiAJCQkJCXhmc19kaXNrX2RxdW90X3QgKik7Ci1leHRlcm4gaW50CQl4ZnNfcW1fZHF3YXJuKHhmc19kaXNrX2RxdW90X3QgKiwgdWludCk7CiBleHRlcm4gaW50CQl4ZnNfcW1fZHFnZXQoeGZzX21vdW50X3QgKiwgeGZzX2lub2RlX3QgKiwKIAkJCQkJeGZzX2RxaWRfdCwgdWludCwgdWludCwgeGZzX2RxdW90X3QgKiopOwogZXh0ZXJuIHZvaWQJCXhmc19xbV9kcXB1dCh4ZnNfZHF1b3RfdCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKaW5kZXggYTU0MjVlZS4uZjUyNzFiNyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKQEAgLTQyOCw3ICs0MjgsNyBAQAogLyoKICAqIFRoaXMgaXMgdGhlIG9wcyB2ZWN0b3IgZm9yIGRxdW90cwogICovCi1zdHJ1Y3QgeGZzX2l0ZW1fb3BzIHhmc19kcXVvdF9pdGVtX29wcyA9IHsKK1NUQVRJQyBzdHJ1Y3QgeGZzX2l0ZW1fb3BzIHhmc19kcXVvdF9pdGVtX29wcyA9IHsKIAkuaW9wX3NpemUJPSAodWludCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19xbV9kcXVvdF9sb2dpdGVtX3NpemUsCiAJLmlvcF9mb3JtYXQJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sb2dfaW92ZWNfdCopKQogCQkJCQl4ZnNfcW1fZHF1b3RfbG9naXRlbV9mb3JtYXQsCkBAIC02NDYsNyArNjQ2LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0cnVjdCB4ZnNfaXRlbV9vcHMgeGZzX3FtX3FvZmZlbmRfbG9naXRlbV9vcHMgPSB7CitTVEFUSUMgc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfcW1fcW9mZmVuZF9sb2dpdGVtX29wcyA9IHsKIAkuaW9wX3NpemUJPSAodWludCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19xbV9xb2ZmX2xvZ2l0ZW1fc2l6ZSwKIAkuaW9wX2Zvcm1hdAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xvZ19pb3ZlY190KikpCiAJCQkJCXhmc19xbV9xb2ZmX2xvZ2l0ZW1fZm9ybWF0LApAQCAtNjY5LDcgKzY2OSw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgb3BzIHZlY3RvciBzaGFyZWQgYnkgYWxsIHF1b3Rhb2ZmLXN0YXJ0IGxvZyBpdGVtcy4KICAqLwotc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfcW1fcW9mZl9sb2dpdGVtX29wcyA9IHsKK1NUQVRJQyBzdHJ1Y3QgeGZzX2l0ZW1fb3BzIHhmc19xbV9xb2ZmX2xvZ2l0ZW1fb3BzID0gewogCS5pb3Bfc2l6ZQk9ICh1aW50KCopKHhmc19sb2dfaXRlbV90KikpeGZzX3FtX3FvZmZfbG9naXRlbV9zaXplLAogCS5pb3BfZm9ybWF0CT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbG9nX2lvdmVjX3QqKSkKIAkJCQkJeGZzX3FtX3FvZmZfbG9naXRlbV9mb3JtYXQsCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKaW5kZXggODlmMmNkNi4uZjY2NWNhOGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKQEAgLTgxLDEyICs4MSwxOCBAQAogCiBrbWVtX3pvbmVfdAkqcW1fZHF6b25lOwoga21lbV96b25lX3QJKnFtX2RxdHJ4em9uZTsKLWttZW1fc2hha2VyX3QJeGZzX3FtX3NoYWtlcjsKK1NUQVRJQyBrbWVtX3NoYWtlcl90CXhmc19xbV9zaGFrZXI7CiAKIFNUQVRJQyB2b2lkCXhmc19xbV9saXN0X2luaXQoeGZzX2RxbGlzdF90ICosIGNoYXIgKiwgaW50KTsKIFNUQVRJQyB2b2lkCXhmc19xbV9saXN0X2Rlc3Ryb3koeGZzX2RxbGlzdF90ICopOwogCitTVEFUSUMgdm9pZAl4ZnNfcW1fZnJlZWxpc3RfaW5pdCh4ZnNfZnJsaXN0X3QgKik7CitTVEFUSUMgdm9pZAl4ZnNfcW1fZnJlZWxpc3RfZGVzdHJveSh4ZnNfZnJsaXN0X3QgKik7CitTVEFUSUMgaW50CXhmc19xbV9tcGxpc3Rfbm93YWl0KHhmc19tb3VudF90ICopOworU1RBVElDIGludAl4ZnNfcW1fZHFoYXNobG9ja19ub3dhaXQoeGZzX2RxdW90X3QgKik7CisKIFNUQVRJQyBpbnQJeGZzX3FtX2luaXRfcXVvdGFpbm9zKHhmc19tb3VudF90ICopOworU1RBVElDIGludAl4ZnNfcW1faW5pdF9xdW90YWluZm8oeGZzX21vdW50X3QgKik7CiBTVEFUSUMgaW50CXhmc19xbV9zaGFrZShpbnQsIHVuc2lnbmVkIGludCk7CiAKICNpZmRlZiBERUJVRwpAQCAtMTg0LDcgKzE5MCw3IEBACiAvKgogICogRGVzdHJveSB0aGUgZ2xvYmFsIHF1b3RhIG1hbmFnZXIgd2hlbiBpdHMgcmVmZXJlbmNlIGNvdW50IGdvZXMgdG8gemVyby4KICAqLwotdm9pZAorU1RBVElDIHZvaWQKIHhmc19xbV9kZXN0cm95KAogCXN0cnVjdCB4ZnNfcW0JKnhxbSkKIHsKQEAgLTMwNCw5ICszMTAsOSBAQAogCXVpbnQJCWZsYWdzKQogewogCS8qCi0JICogVXNlciBvciBncm91cCBxdW90YXMgaGFzIHRvIGJlIG9uLgorCSAqIFVzZXIsIHByb2plY3RzIG9yIGdyb3VwIHF1b3RhcyBoYXMgdG8gYmUgb24uCiAJICovCi0JQVNTRVJUKGZsYWdzICYgKFhGU01OVF9VUVVPVEEgfCBYRlNNTlRfR1FVT1RBKSk7CisJQVNTRVJUKGZsYWdzICYgKFhGU01OVF9VUVVPVEEgfCBYRlNNTlRfUFFVT1RBIHwgWEZTTU5UX0dRVU9UQSkpOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBmbGFncyBpbiB0aGUgbW91bnQgc3RydWN0dXJlLiBGcm9tIHRoaXMgcG9pbnQKQEAgLTMyNCw3ICszMzAsMTEgQEAKIAlpZiAoZmxhZ3MgJiBYRlNNTlRfR1FVT1RBKSB7CiAJCW1wLT5tX3FmbGFncyB8PSAoWEZTX0dRVU9UQV9BQ0NUIHwgWEZTX0dRVU9UQV9BQ1RJVkUpOwogCQlpZiAoZmxhZ3MgJiBYRlNNTlRfR1FVT1RBRU5GKQotCQkJbXAtPm1fcWZsYWdzIHw9IFhGU19HUVVPVEFfRU5GRDsKKwkJCW1wLT5tX3FmbGFncyB8PSBYRlNfT1FVT1RBX0VORkQ7CisJfSBlbHNlIGlmIChmbGFncyAmIFhGU01OVF9QUVVPVEEpIHsKKwkJbXAtPm1fcWZsYWdzIHw9IChYRlNfUFFVT1RBX0FDQ1QgfCBYRlNfUFFVT1RBX0FDVElWRSk7CisJCWlmIChmbGFncyAmIFhGU01OVF9QUVVPVEFFTkYpCisJCQltcC0+bV9xZmxhZ3MgfD0gWEZTX09RVU9UQV9FTkZEOwogCX0KIH0KIApAQCAtMzU3LDExICszNjcsMTEgQEAKIAogCS8qCiAJICogSWYgYSBmaWxlIHN5c3RlbSBoYWQgcXVvdGFzIHJ1bm5pbmcgZWFybGllciwgYnV0IGRlY2lkZWQgdG8KLQkgKiBtb3VudCB3aXRob3V0IC1vIHF1b3RhL3VxdW90YS9ncXVvdGEgb3B0aW9ucywgcmV2b2tlIHRoZQorCSAqIG1vdW50IHdpdGhvdXQgLW8gdXF1b3RhL3BxdW90YS9ncXVvdGEgb3B0aW9ucywgcmV2b2tlIHRoZQogCSAqIHF1b3RhY2hlY2tlZCBsaWNlbnNlLCBhbmQgYmFpbCBvdXQuCiAJICovCiAJaWYgKCEgWEZTX0lTX1FVT1RBX09OKG1wKSAmJgotCSAgICAobXAtPm1fc2Iuc2JfcWZsYWdzICYgKFhGU19VUVVPVEFfQUNDVHxYRlNfR1FVT1RBX0FDQ1QpKSkgeworCSAgICAobXAtPm1fc2Iuc2JfcWZsYWdzICYgWEZTX0FMTF9RVU9UQV9BQ0NUKSkgewogCQltcC0+bV9xZmxhZ3MgPSAwOwogCQlnb3RvIHdyaXRlX2NoYW5nZXM7CiAJfQpAQCAtNTA5LDcgKzUxOSw3IEBACiAgKiBGbHVzaCBhbGwgZHF1b3RzIG9mIHRoZSBnaXZlbiBmaWxlIHN5c3RlbSB0byBkaXNrLiBUaGUgZHF1b3RzIGFyZQogICogX25vdF8gcHVyZ2VkIGZyb20gbWVtb3J5IGhlcmUsIGp1c3QgdGhlaXIgZGF0YSB3cml0dGVuIHRvIGRpc2suCiAgKi8KLWludAorU1RBVElDIGludAogeGZzX3FtX2RxZmx1c2hfYWxsKAogCXhmc19tb3VudF90CSptcCwKIAlpbnQJCWZsYWdzKQpAQCAtNjEzLDcgKzYyMyw3IEBACiBTVEFUSUMgaW50CiB4ZnNfcW1fZHFwdXJnZV9pbnQoCiAJeGZzX21vdW50X3QJKm1wLAotCXVpbnQJCWZsYWdzKSAvKiBRVU9UQU9GRi9VTU9VTlRJTkcvVVFVT1RBL0dRVU9UQSAqLworCXVpbnQJCWZsYWdzKSAvKiBRVU9UQU9GRi9VTU9VTlRJTkcvVVFVT1RBL1BRVU9UQS9HUVVPVEEgKi8KIHsKIAl4ZnNfZHF1b3RfdAkqZHFwOwogCXVpbnQJCWRxdHlwZTsKQEAgLTYyNSw2ICs2MzUsNyBAQAogCQlyZXR1cm4gKDApOwogCiAJZHF0eXBlID0gKGZsYWdzICYgWEZTX1FNT1BUX1VRVU9UQSkgPyBYRlNfRFFfVVNFUiA6IDA7CisJZHF0eXBlIHw9IChmbGFncyAmIFhGU19RTU9QVF9QUVVPVEEpID8gWEZTX0RRX1BST0ogOiAwOwogCWRxdHlwZSB8PSAoZmxhZ3MgJiBYRlNfUU1PUFRfR1FVT1RBKSA/IFhGU19EUV9HUk9VUCA6IDA7CiAKIAl4ZnNfcW1fbXBsaXN0X2xvY2sobXApOwpAQCAtNzM0LDExICs3NDUsMTEgQEAKIAogCS8qCiAJICogdWRxaGludCBpcyB0aGUgaV91ZHF1b3QgZmllbGQgaW4gaW5vZGUsIGFuZCBpcyBub24tTlVMTCBvbmx5Ci0JICogd2hlbiB0aGUgdHlwZSBhcmcgaXMgWEZTX0RRX0dST1VQLiBJdHMgcHVycG9zZSBpcyB0byBzYXZlIGEKKwkgKiB3aGVuIHRoZSB0eXBlIGFyZyBpcyBncm91cC9wcm9qZWN0LiBJdHMgcHVycG9zZSBpcyB0byBzYXZlIGEKIAkgKiBsb29rdXAgYnkgZHFpZCAoeGZzX3FtX2RxZ2V0KSBieSBjYWNoaW5nIGEgZ3JvdXAgZHF1b3QgaW5zaWRlCiAJICogdGhlIHVzZXIgZHF1b3QuCiAJICovCi0JQVNTRVJUKCF1ZHFoaW50IHx8IHR5cGUgPT0gWEZTX0RRX0dST1VQKTsKKwlBU1NFUlQoIXVkcWhpbnQgfHwgdHlwZSA9PSBYRlNfRFFfR1JPVVAgfHwgdHlwZSA9PSBYRlNfRFFfUFJPSik7CiAJaWYgKHVkcWhpbnQgJiYgIWRvbG9jaykKIAkJeGZzX2RxbG9jayh1ZHFoaW50KTsKIApAQCAtODk3LDggKzkwOCw4IEBACiAKIAogLyoKLSAqIEdpdmVuIGEgbG9ja2VkIGlub2RlLCBhdHRhY2ggZHF1b3QocykgdG8gaXQsIHRha2luZyBVUVVPVEFPTiAvIEdRVU9UQU9OCi0gKiBpbiB0byBhY2NvdW50LgorICogR2l2ZW4gYSBsb2NrZWQgaW5vZGUsIGF0dGFjaCBkcXVvdChzKSB0byBpdCwgdGFraW5nIFUvRy9QLVFVT1RBT04KKyAqIGludG8gYWNjb3VudC4KICAqIElmIFhGU19RTU9QVF9EUUFMTE9DLCB0aGUgZHF1b3Qocykgd2lsbCBiZSBhbGxvY2F0ZWQgaWYgbmVlZGVkLgogICogSWYgWEZTX1FNT1BUX0RRTE9DSywgdGhlIGRxdW90KHMpIHdpbGwgYmUgcmV0dXJuZWQgbG9ja2VkLiBUaGlzIG9wdGlvbiBwcmV0dHkKICAqIG11Y2ggbWFkZSB0aGlzIGNvZGUgYSBjb21wbGV0ZSBtZXNzLCBidXQgaXQgaGFzIGJlZW4gcHJldHR5IHVzZWZ1bC4KQEAgLTkzNyw4ICs5NDgsMTMgQEAKIAkJbnF1b3RhcysrOwogCX0KIAlBU1NFUlQoWEZTX0lTTE9DS0VEX0lOT0RFX0VYQ0woaXApKTsKLQlpZiAoWEZTX0lTX0dRVU9UQV9PTihtcCkpIHsKLQkJZXJyb3IgPSB4ZnNfcW1fZHFhdHRhY2hfb25lKGlwLCBpcC0+aV9kLmRpX2dpZCwgWEZTX0RRX0dST1VQLAorCWlmIChYRlNfSVNfT1FVT1RBX09OKG1wKSkgeworCQllcnJvciA9IFhGU19JU19HUVVPVEFfT04obXApID8KKwkJCXhmc19xbV9kcWF0dGFjaF9vbmUoaXAsIGlwLT5pX2QuZGlfZ2lkLCBYRlNfRFFfR1JPVVAsCisJCQkJCQlmbGFncyAmIFhGU19RTU9QVF9EUUFMTE9DLAorCQkJCQkJZmxhZ3MgJiBYRlNfUU1PUFRfRFFMT0NLLAorCQkJCQkJaXAtPmlfdWRxdW90LCAmaXAtPmlfZ2RxdW90KSA6CisJCQl4ZnNfcW1fZHFhdHRhY2hfb25lKGlwLCBpcC0+aV9kLmRpX3Byb2ppZCwgWEZTX0RRX1BST0osCiAJCQkJCQlmbGFncyAmIFhGU19RTU9QVF9EUUFMTE9DLAogCQkJCQkJZmxhZ3MgJiBYRlNfUU1PUFRfRFFMT0NLLAogCQkJCQkJaXAtPmlfdWRxdW90LCAmaXAtPmlfZ2RxdW90KTsKQEAgLTk4OSw3ICsxMDA1LDcgQEAKIAkJfQogCQlpZiAoWEZTX0lTX1VRVU9UQV9PTihtcCkpCiAJCQlBU1NFUlQoaXAtPmlfdWRxdW90KTsKLQkJaWYgKFhGU19JU19HUVVPVEFfT04obXApKQorCQlpZiAoWEZTX0lTX09RVU9UQV9PTihtcCkpCiAJCQlBU1NFUlQoaXAtPmlfZ2RxdW90KTsKIAl9CiAjZW5kaWYKQEAgLTEwMTgsMTMgKzEwMzQsMTMgQEAKIAogCUFTU0VSVChpcC0+aV9pbm8gIT0gaXAtPmlfbW91bnQtPm1fc2Iuc2JfdXF1b3Rpbm8pOwogCUFTU0VSVChpcC0+aV9pbm8gIT0gaXAtPmlfbW91bnQtPm1fc2Iuc2JfZ3F1b3Rpbm8pOwotCWlmIChpcC0+aV91ZHF1b3QpCi0JCXhmc19kcXRyYWNlX2VudHJ5X2lubyhpcC0+aV91ZHF1b3QsICJEUURFVFRBQ0giLCBpcCk7CiAJaWYgKGlwLT5pX3VkcXVvdCkgeworCQl4ZnNfZHF0cmFjZV9lbnRyeV9pbm8oaXAtPmlfdWRxdW90LCAiRFFERVRUQUNIIiwgaXApOwogCQl4ZnNfcW1fZHFyZWxlKGlwLT5pX3VkcXVvdCk7CiAJCWlwLT5pX3VkcXVvdCA9IE5VTEw7CiAJfQogCWlmIChpcC0+aV9nZHF1b3QpIHsKKwkJeGZzX2RxdHJhY2VfZW50cnlfaW5vKGlwLT5pX2dkcXVvdCwgIkRRREVUVEFDSCIsIGlwKTsKIAkJeGZzX3FtX2RxcmVsZShpcC0+aV9nZHF1b3QpOwogCQlpcC0+aV9nZHF1b3QgPSBOVUxMOwogCX0KQEAgLTExNDksNyArMTE2NSw3IEBACiAgKiBUaGlzIGluaXRpYWxpemVzIGFsbCB0aGUgcXVvdGEgaW5mb3JtYXRpb24gdGhhdCdzIGtlcHQgaW4gdGhlCiAgKiBtb3VudCBzdHJ1Y3R1cmUKICAqLwotaW50CitTVEFUSUMgaW50CiB4ZnNfcW1faW5pdF9xdW90YWluZm8oCiAJeGZzX21vdW50X3QJKm1wKQogewpAQCAtMTIwMiw4ICsxMjE4LDkgQEAKIAkgKiBhbmQgZ3JvdXAgcXVvdGFzLCBhdCBsZWFzdCBub3QgYXQgdGhpcyBwb2ludC4KIAkgKi8KIAllcnJvciA9IHhmc19xbV9kcWdldChtcCwgTlVMTCwgKHhmc19kcWlkX3QpMCwKLQkJCSAgICAgKFhGU19JU19VUVVPVEFfUlVOTklORyhtcCkpID8KLQkJCSAgICAgWEZTX0RRX1VTRVIgOiBYRlNfRFFfR1JPVVAsCisJCQkgICAgIFhGU19JU19VUVVPVEFfUlVOTklORyhtcCkgPyBYRlNfRFFfVVNFUiA6IAorCQkJICAgICAoWEZTX0lTX0dRVU9UQV9SVU5OSU5HKG1wKSA/IFhGU19EUV9HUk9VUCA6CisJCQkJWEZTX0RRX1BST0opLAogCQkJICAgICBYRlNfUU1PUFRfRFFTVVNFUnxYRlNfUU1PUFRfRE9XQVJOLAogCQkJICAgICAmZHFwKTsKIAlpZiAoISBlcnJvcikgewpAQCAtMTIzNCw2ICsxMjUxLDEwIEBACiAJCQkJSU5UX0dFVChkZHFwLT5kX2l3YXJucywgQVJDSF9DT05WRVJUKSA/CiAJCQkJSU5UX0dFVChkZHFwLT5kX2l3YXJucywgQVJDSF9DT05WRVJUKSA6CiAJCQkJWEZTX1FNX0lXQVJOTElNSVQ7CisJCXFpbmYtPnFpX3J0Yndhcm5saW1pdCA9CisJCQkJSU5UX0dFVChkZHFwLT5kX3J0Yndhcm5zLCBBUkNIX0NPTlZFUlQpID8KKwkJCQlJTlRfR0VUKGRkcXAtPmRfcnRid2FybnMsIEFSQ0hfQ09OVkVSVCkgOgorCQkJCVhGU19RTV9SVEJXQVJOTElNSVQ7CiAJCXFpbmYtPnFpX2JoYXJkbGltaXQgPQogCQkJCUlOVF9HRVQoZGRxcC0+ZF9ibGtfaGFyZGxpbWl0LCBBUkNIX0NPTlZFUlQpOwogCQlxaW5mLT5xaV9ic29mdGxpbWl0ID0KQEAgLTEyNTksNiArMTI4MCw3IEBACiAJCXFpbmYtPnFpX3J0YnRpbWVsaW1pdCA9IFhGU19RTV9SVEJUSU1FTElNSVQ7CiAJCXFpbmYtPnFpX2J3YXJubGltaXQgPSBYRlNfUU1fQldBUk5MSU1JVDsKIAkJcWluZi0+cWlfaXdhcm5saW1pdCA9IFhGU19RTV9JV0FSTkxJTUlUOworCQlxaW5mLT5xaV9ydGJ3YXJubGltaXQgPSBYRlNfUU1fUlRCV0FSTkxJTUlUOwogCX0KIAogCXJldHVybiAoMCk7CkBAIC0xMzY2LDEzICsxMzg4LDIwIEBACiAJCUFTU0VSVCh1ZHFwKTsKIAl9CiAKLQlpZiAoWEZTX0lTX0dRVU9UQV9PTihtcCkpIHsKKwlpZiAoWEZTX0lTX09RVU9UQV9PTihtcCkpIHsKIAkJQVNTRVJUKGlwLT5pX2dkcXVvdCA9PSBOVUxMKTsKIAkJaWYgKHVkcXApCiAJCQl4ZnNfZHF1bmxvY2sodWRxcCk7Ci0JCWlmICgoZXJyb3IgPSB4ZnNfcW1fZHFnZXQobXAsIGlwLCBpcC0+aV9kLmRpX2dpZCwgWEZTX0RRX0dST1VQLAotCQkJCQkgWEZTX1FNT1BUX0RRQUxMT0N8WEZTX1FNT1BUX0RPV0FSTiwKLQkJCQkJICZnZHFwKSkpIHsKKwkJZXJyb3IgPSBYRlNfSVNfR1FVT1RBX09OKG1wKSA/CisJCQkJeGZzX3FtX2RxZ2V0KG1wLCBpcCwKKwkJCQkJICAgICBpcC0+aV9kLmRpX2dpZCwgWEZTX0RRX0dST1VQLAorCQkJCQkgICAgIFhGU19RTU9QVF9EUUFMTE9DfFhGU19RTU9QVF9ET1dBUk4sCisJCQkJCSAgICAgJmdkcXApIDoKKwkJCQl4ZnNfcW1fZHFnZXQobXAsIGlwLAorCQkJCQkgICAgIGlwLT5pX2QuZGlfcHJvamlkLCBYRlNfRFFfUFJPSiwKKwkJCQkJICAgICBYRlNfUU1PUFRfRFFBTExPQ3xYRlNfUU1PUFRfRE9XQVJOLAorCQkJCQkgICAgICZnZHFwKTsKKwkJaWYgKGVycm9yKSB7CiAJCQlpZiAodWRxcCkKIAkJCQl4ZnNfcW1fZHFyZWxlKHVkcXApOwogCQkJQVNTRVJUKGVycm9yICE9IEVTUkNIKTsKQEAgLTE1MjEsOCArMTU1MCwxMCBAQAogCQlJTlRfU0VUKGRkcS0+ZF9ydGJjb3VudCwgQVJDSF9DT05WRVJULCAwVUxMKTsKIAkJSU5UX1NFVChkZHEtPmRfYnRpbWVyLCBBUkNIX0NPTlZFUlQsICh0aW1lX3QpMCk7CiAJCUlOVF9TRVQoZGRxLT5kX2l0aW1lciwgQVJDSF9DT05WRVJULCAodGltZV90KTApOworCQlJTlRfU0VUKGRkcS0+ZF9ydGJ0aW1lciwgQVJDSF9DT05WRVJULCAodGltZV90KTApOwogCQlJTlRfU0VUKGRkcS0+ZF9id2FybnMsIEFSQ0hfQ09OVkVSVCwgMFVMKTsKIAkJSU5UX1NFVChkZHEtPmRfaXdhcm5zLCBBUkNIX0NPTlZFUlQsIDBVTCk7CisJCUlOVF9TRVQoZGRxLT5kX3J0Yndhcm5zLCBBUkNIX0NPTlZFUlQsIDBVTCk7CiAJCWRkcSA9ICh4ZnNfZGlza19kcXVvdF90ICopICgoeGZzX2RxYmxrX3QgKilkZHEgKyAxKTsKIAl9CiAKQEAgLTE1NDEsMTEgKzE1NzIsMTQgQEAKIAlpbnQJCWVycm9yOwogCWludAkJbm90Y29tbWl0dGVkOwogCWludAkJaW5jcjsKKwlpbnQJCXR5cGU7CiAKIAlBU1NFUlQoYmxrY250ID4gMCk7CiAJbm90Y29tbWl0dGVkID0gMDsKIAlpbmNyID0gKGJsa2NudCA+IFhGU19RTV9NQVhfRFFDTFVTVEVSX0xPR1NaKSA/CiAJCVhGU19RTV9NQVhfRFFDTFVTVEVSX0xPR1NaIDogYmxrY250OworCXR5cGUgPSBmbGFncyAmIFhGU19RTU9QVF9VUVVPVEEgPyBYRlNfRFFfVVNFUiA6CisJCShmbGFncyAmIFhGU19RTU9QVF9QUVVPVEEgPyBYRlNfRFFfUFJPSiA6IFhGU19EUV9HUk9VUCk7CiAJZXJyb3IgPSAwOwogCiAJLyoKQEAgLTE1NjQsOSArMTU5OCw3IEBACiAJCWlmIChlcnJvcikKIAkJCWJyZWFrOwogCi0JCSh2b2lkKSB4ZnNfcW1fcmVzZXRfZHFjb3VudHMobXAsIGJwLCBmaXJzdGlkLAotCQkJCQkgICAgIGZsYWdzICYgWEZTX1FNT1BUX1VRVU9UQSA/Ci0JCQkJCSAgICAgWEZTX0RRX1VTRVIgOiBYRlNfRFFfR1JPVVApOworCQkodm9pZCkgeGZzX3FtX3Jlc2V0X2RxY291bnRzKG1wLCBicCwgZmlyc3RpZCwgdHlwZSk7CiAJCXhmc19iZHdyaXRlKG1wLCBicCk7CiAJCS8qCiAJCSAqIGdvdG8gdGhlIG5leHQgYmxvY2suCkBAIC0xNTc4LDcgKzE2MTAsNyBAQAogfQogCiAvKgotICogSXRlcmF0ZSBvdmVyIGFsbCBhbGxvY2F0ZWQgVVNSL0dSUCBkcXVvdHMgaW4gdGhlIHN5c3RlbSwgY2FsbGluZyBhCisgKiBJdGVyYXRlIG92ZXIgYWxsIGFsbG9jYXRlZCBVU1IvR1JQL1BSSiBkcXVvdHMgaW4gdGhlIHN5c3RlbSwgY2FsbGluZyBhCiAgKiBjYWxsZXIgc3VwcGxpZWQgZnVuY3Rpb24gZm9yIGV2ZXJ5IGNodW5rIG9mIGRxdW90cyB0aGF0IHdlIGZpbmQuCiAgKi8KIFNUQVRJQyBpbnQKQEAgLTE4NDksNyArMTg4MSw3IEBACiAJCXhmc19xbV9xdW90YWNoZWNrX2RxYWRqdXN0KHVkcXAsIG5ibGtzLCBydGJsa3MpOwogCQl4ZnNfcW1fZHFwdXQodWRxcCk7CiAJfQotCWlmIChYRlNfSVNfR1FVT1RBX09OKG1wKSkgeworCWlmIChYRlNfSVNfT1FVT1RBX09OKG1wKSkgewogCQlBU1NFUlQoZ2RxcCk7CiAJCXhmc19xbV9xdW90YWNoZWNrX2RxYWRqdXN0KGdkcXAsIG5ibGtzLCBydGJsa3MpOwogCQl4ZnNfcW1fZHFwdXQoZ2RxcCk7CkBAIC0xODk4LDcgKzE5MzAsNyBAQAogCWNtbl9lcnIoQ0VfTk9URSwgIlhGUyBxdW90YWNoZWNrICVzOiBQbGVhc2Ugd2FpdC4iLCBtcC0+bV9mc25hbWUpOwogCiAJLyoKLQkgKiBGaXJzdCB3ZSBnbyB0aHJ1IGFsbCB0aGUgZHF1b3RzIG9uIGRpc2ssIFVTUiBhbmQgR1JQLCBhbmQgcmVzZXQKKwkgKiBGaXJzdCB3ZSBnbyB0aHJ1IGFsbCB0aGUgZHF1b3RzIG9uIGRpc2ssIFVTUiBhbmQgR1JQL1BSSiwgYW5kIHJlc2V0CiAJICogdGhlaXIgY291bnRlcnMgdG8gemVyby4gV2UgbmVlZCBhIGNsZWFuIHNsYXRlLgogCSAqIFdlIGRvbid0IGxvZyBvdXIgY2hhbmdlcyB0aWxsIGxhdGVyLgogCSAqLwpAQCAtMTkwOSw5ICsxOTQxLDEwIEBACiAJfQogCiAJaWYgKChnaXAgPSBYRlNfUUlfR1FJUChtcCkpKSB7Ci0JCWlmICgoZXJyb3IgPSB4ZnNfcW1fZHFpdGVyYXRlKG1wLCBnaXAsIFhGU19RTU9QVF9HUVVPVEEpKSkKKwkJaWYgKChlcnJvciA9IHhmc19xbV9kcWl0ZXJhdGUobXAsIGdpcCwgWEZTX0lTX0dRVU9UQV9PTihtcCkgPworCQkJCQlYRlNfUU1PUFRfR1FVT1RBIDogWEZTX1FNT1BUX1BRVU9UQSkpKQogCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JCWZsYWdzIHw9IFhGU19HUVVPVEFfQ0hLRDsKKwkJZmxhZ3MgfD0gWEZTX09RVU9UQV9DSEtEOwogCX0KIAogCWRvIHsKQEAgLTE5MzgsNyArMTk3MSw3IEBACiAJaWYgKGVycm9yKSB7CiAJCXhmc19xbV9kcXB1cmdlX2FsbChtcCwKIAkJCQkgICBYRlNfUU1PUFRfVVFVT1RBfFhGU19RTU9QVF9HUVVPVEF8Ci0JCQkJICAgWEZTX1FNT1BUX1FVT1RBT0ZGKTsKKwkJCQkgICBYRlNfUU1PUFRfUFFVT1RBfFhGU19RTU9QVF9RVU9UQU9GRik7CiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KIAkvKgpAQCAtMTk2MSw3ICsxOTk0LDcgQEAKIAkgKiBxdW90YWNoZWNrZWQgc3RhdHVzLCBzaW5jZSB3ZSB3b24ndCBiZSBkb2luZyBhY2NvdW50aW5nIGZvcgogCSAqIHRoYXQgdHlwZSBhbnltb3JlLgogCSAqLwotCW1wLT5tX3FmbGFncyAmPSB+KFhGU19HUVVPVEFfQ0hLRCB8IFhGU19VUVVPVEFfQ0hLRCk7CisJbXAtPm1fcWZsYWdzICY9IH4oWEZTX09RVU9UQV9DSEtEIHwgWEZTX1VRVU9UQV9DSEtEKTsKIAltcC0+bV9xZmxhZ3MgfD0gZmxhZ3M7CiAKIAlYUU1fTElTVF9QUklOVCgmKFhGU19RSV9NUExfTElTVChtcCkpLCBNUExfTkVYVCwgIisrKysgTXAgbGlzdCArKysiKTsKQEAgLTIwMTMsNyArMjA0Niw3IEBACiAJCQkJCSAgICAgMCwgMCwgJnVpcCwgMCkpKQogCQkJCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOwogCQl9Ci0JCWlmIChYRlNfSVNfR1FVT1RBX09OKG1wKSAmJgorCQlpZiAoWEZTX0lTX09RVU9UQV9PTihtcCkgJiYKIAkJICAgIG1wLT5tX3NiLnNiX2dxdW90aW5vICE9IE5VTExGU0lOTykgewogCQkJQVNTRVJUKG1wLT5tX3NiLnNiX2dxdW90aW5vID4gMCk7CiAJCQlpZiAoKGVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIG1wLT5tX3NiLnNiX2dxdW90aW5vLApAQCAtMjA0MywxMCArMjA3NiwxMiBAQAogCiAJCWZsYWdzICY9IH5YRlNfUU1PUFRfU0JWRVJTSU9OOwogCX0KLQlpZiAoWEZTX0lTX0dRVU9UQV9PTihtcCkgJiYgZ2lwID09IE5VTEwpIHsKLQkJaWYgKChlcnJvciA9IHhmc19xbV9xaW5vX2FsbG9jKG1wLCAmZ2lwLAotCQkJCQkgICAgICBzYmZsYWdzIHwgWEZTX1NCX0dRVU9USU5PLAotCQkJCQkgICAgICBmbGFncyB8IFhGU19RTU9QVF9HUVVPVEEpKSkgeworCWlmIChYRlNfSVNfT1FVT1RBX09OKG1wKSAmJiBnaXAgPT0gTlVMTCkgeworCQlmbGFncyB8PSAoWEZTX0lTX0dRVU9UQV9PTihtcCkgPworCQkJCVhGU19RTU9QVF9HUVVPVEEgOiBYRlNfUU1PUFRfUFFVT1RBKTsKKwkJZXJyb3IgPSB4ZnNfcW1fcWlub19hbGxvYyhtcCwgJmdpcCwKKwkJCQkJICBzYmZsYWdzIHwgWEZTX1NCX0dRVU9USU5PLCBmbGFncyk7CisJCWlmIChlcnJvcikgewogCQkJaWYgKHVpcCkKIAkJCQlWTl9SRUxFKFhGU19JVE9WKHVpcCkpOwogCkBAIC0yNDUyLDYgKzI0ODcsNyBAQAogCXhmc19pbm9kZV90CSppcCwKIAl1aWRfdAkJdWlkLAogCWdpZF90CQlnaWQsCisJcHJpZF90CQlwcmlkLAogCXVpbnQJCWZsYWdzLAogCXhmc19kcXVvdF90CSoqT191ZHFwcCwKIAl4ZnNfZHF1b3RfdAkqKk9fZ2RxcHApCkBAIC0yNDgzLDggKzI1MTksNyBAQAogCX0KIAogCXVxID0gZ3EgPSBOVUxMOwotCWlmICgoZmxhZ3MgJiBYRlNfUU1PUFRfVVFVT1RBKSAmJgotCSAgICBYRlNfSVNfVVFVT1RBX09OKG1wKSkgeworCWlmICgoZmxhZ3MgJiBYRlNfUU1PUFRfVVFVT1RBKSAmJiBYRlNfSVNfVVFVT1RBX09OKG1wKSkgewogCQlpZiAoaXAtPmlfZC5kaV91aWQgIT0gdWlkKSB7CiAJCQkvKgogCQkJICogV2hhdCB3ZSBuZWVkIGlzIHRoZSBkcXVvdCB0aGF0IGhhcyB0aGlzIHVpZCwgYW5kCkBAIC0yNTIyLDggKzI1NTcsNyBAQAogCQkJeGZzX2RxdW5sb2NrKHVxKTsKIAkJfQogCX0KLQlpZiAoKGZsYWdzICYgWEZTX1FNT1BUX0dRVU9UQSkgJiYKLQkgICAgWEZTX0lTX0dRVU9UQV9PTihtcCkpIHsKKwlpZiAoKGZsYWdzICYgWEZTX1FNT1BUX0dRVU9UQSkgJiYgWEZTX0lTX0dRVU9UQV9PTihtcCkpIHsKIAkJaWYgKGlwLT5pX2QuZGlfZ2lkICE9IGdpZCkgewogCQkJeGZzX2l1bmxvY2soaXAsIGxvY2tmbGFncyk7CiAJCQlpZiAoKGVycm9yID0geGZzX3FtX2RxZ2V0KG1wLCBOVUxMLCAoeGZzX2RxaWRfdClnaWQsCkBAIC0yNTQ2LDYgKzI1ODAsMjkgQEAKIAkJCVhGU19EUUhPTEQoZ3EpOwogCQkJeGZzX2RxdW5sb2NrKGdxKTsKIAkJfQorCX0gZWxzZSBpZiAoKGZsYWdzICYgWEZTX1FNT1BUX1BRVU9UQSkgJiYgWEZTX0lTX1BRVU9UQV9PTihtcCkpIHsKKwkJaWYgKGlwLT5pX2QuZGlfcHJvamlkICE9IHByaWQpIHsKKwkJCXhmc19pdW5sb2NrKGlwLCBsb2NrZmxhZ3MpOworCQkJaWYgKChlcnJvciA9IHhmc19xbV9kcWdldChtcCwgTlVMTCwgKHhmc19kcWlkX3QpcHJpZCwKKwkJCQkJCSBYRlNfRFFfUFJPSiwKKwkJCQkJCSBYRlNfUU1PUFRfRFFBTExPQyB8CisJCQkJCQkgWEZTX1FNT1BUX0RPV0FSTiwKKwkJCQkJCSAmZ3EpKSkgeworCQkJCWlmICh1cSkKKwkJCQkJeGZzX3FtX2RxcmVsZSh1cSk7CisJCQkJQVNTRVJUKGVycm9yICE9IEVOT0VOVCk7CisJCQkJcmV0dXJuIChlcnJvcik7CisJCQl9CisJCQl4ZnNfZHF1bmxvY2soZ3EpOworCQkJbG9ja2ZsYWdzID0gWEZTX0lMT0NLX1NIQVJFRDsKKwkJCXhmc19pbG9jayhpcCwgbG9ja2ZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCUFTU0VSVChpcC0+aV9nZHF1b3QpOworCQkJZ3EgPSBpcC0+aV9nZHF1b3Q7CisJCQl4ZnNfZHFsb2NrKGdxKTsKKwkJCVhGU19EUUhPTEQoZ3EpOworCQkJeGZzX2RxdW5sb2NrKGdxKTsKKwkJfQogCX0KIAlpZiAodXEpCiAJCXhmc19kcXRyYWNlX2VudHJ5X2lubyh1cSwgIkRRQUxMT0MiLCBpcCk7CkBAIC0yNTc0LDYgKzI2MzEsOSBAQAogCXhmc19kcXVvdF90CSpuZXdkcSkKIHsKIAl4ZnNfZHF1b3RfdAkqcHJldmRxOworCXVpbnQJCWJmaWVsZCA9IFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkgPworCQkJCSBYRlNfVFJBTlNfRFFfUlRCQ09VTlQgOiBYRlNfVFJBTlNfRFFfQkNPVU5UOworCiAJQVNTRVJUKFhGU19JU0xPQ0tFRF9JTk9ERV9FWENMKGlwKSk7CiAJQVNTRVJUKFhGU19JU19RVU9UQV9SVU5OSU5HKGlwLT5pX21vdW50KSk7CiAKQEAgLTI1ODIsMjAgKzI2NDIsMTIgQEAKIAlBU1NFUlQocHJldmRxKTsKIAlBU1NFUlQocHJldmRxICE9IG5ld2RxKTsKIAotCXhmc190cmFuc19tb2RfZHF1b3QodHAsIHByZXZkcSwKLQkJCSAgICBYRlNfVFJBTlNfRFFfQkNPVU5ULAotCQkJICAgIC0oaXAtPmlfZC5kaV9uYmxvY2tzKSk7Ci0JeGZzX3RyYW5zX21vZF9kcXVvdCh0cCwgcHJldmRxLAotCQkJICAgIFhGU19UUkFOU19EUV9JQ09VTlQsCi0JCQkgICAgLTEpOworCXhmc190cmFuc19tb2RfZHF1b3QodHAsIHByZXZkcSwgYmZpZWxkLCAtKGlwLT5pX2QuZGlfbmJsb2NrcykpOworCXhmc190cmFuc19tb2RfZHF1b3QodHAsIHByZXZkcSwgWEZTX1RSQU5TX0RRX0lDT1VOVCwgLTEpOwogCiAJLyogdGhlIHNwYXJrbGluZyBuZXcgZHF1b3QgKi8KLQl4ZnNfdHJhbnNfbW9kX2RxdW90KHRwLCBuZXdkcSwKLQkJCSAgICBYRlNfVFJBTlNfRFFfQkNPVU5ULAotCQkJICAgIGlwLT5pX2QuZGlfbmJsb2Nrcyk7Ci0JeGZzX3RyYW5zX21vZF9kcXVvdCh0cCwgbmV3ZHEsCi0JCQkgICAgWEZTX1RSQU5TX0RRX0lDT1VOVCwKLQkJCSAgICAxKTsKKwl4ZnNfdHJhbnNfbW9kX2RxdW90KHRwLCBuZXdkcSwgYmZpZWxkLCBpcC0+aV9kLmRpX25ibG9ja3MpOworCXhmc190cmFuc19tb2RfZHF1b3QodHAsIG5ld2RxLCBYRlNfVFJBTlNfRFFfSUNPVU5ULCAxKTsKIAogCS8qCiAJICogVGFrZSBhbiBleHRyYSByZWZlcmVuY2UsIGJlY2F1c2UgdGhlIGlub2RlCkBAIC0yNjExLDcgKzI2NjMsNyBAQAogfQogCiAvKgotICogUXVvdGEgcmVzZXJ2YXRpb25zIGZvciBzZXRhdHRyKEFUX1VJRHxBVF9HSUQpLgorICogUXVvdGEgcmVzZXJ2YXRpb25zIGZvciBzZXRhdHRyKEFUX1VJRHxBVF9HSUR8QVRfUFJPSklEKS4KICAqLwogaW50CiB4ZnNfcW1fdm9wX2Nob3duX3Jlc2VydmUoCkBAIC0yNjIzLDcgKzI2NzUsNyBAQAogewogCWludAkJZXJyb3I7CiAJeGZzX21vdW50X3QJKm1wOwotCXVpbnQJCWRlbGJsa3M7CisJdWludAkJZGVsYmxrcywgYmxrZmxhZ3M7CiAJeGZzX2RxdW90X3QJKnVucmVzdWRxLCAqdW5yZXNnZHEsICpkZWxibGtzdWRxLCAqZGVsYmxrc2dkcTsKIAogCUFTU0VSVChYRlNfSVNMT0NLRURfSU5PREUoaXApKTsKQEAgLTI2MzIsNiArMjY4NCw4IEBACiAKIAlkZWxibGtzID0gaXAtPmlfZGVsYXllZF9ibGtzOwogCWRlbGJsa3N1ZHEgPSBkZWxibGtzZ2RxID0gdW5yZXN1ZHEgPSB1bnJlc2dkcSA9IE5VTEw7CisJYmxrZmxhZ3MgPSBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApID8KKwkJCVhGU19RTU9QVF9SRVNfUlRCTEtTIDogWEZTX1FNT1BUX1JFU19SRUdCTEtTOwogCiAJaWYgKFhGU19JU19VUVVPVEFfT04obXApICYmIHVkcXAgJiYKIAkgICAgaXAtPmlfZC5kaV91aWQgIT0gKHVpZF90KUlOVF9HRVQodWRxcC0+cV9jb3JlLmRfaWQsIEFSQ0hfQ09OVkVSVCkpIHsKQEAgLTI2NDYsMTggKzI3MDAsMjIgQEAKIAkJCXVucmVzdWRxID0gaXAtPmlfdWRxdW90OwogCQl9CiAJfQotCWlmIChYRlNfSVNfR1FVT1RBX09OKGlwLT5pX21vdW50KSAmJiBnZHFwICYmCi0JICAgIGlwLT5pX2QuZGlfZ2lkICE9IElOVF9HRVQoZ2RxcC0+cV9jb3JlLmRfaWQsIEFSQ0hfQ09OVkVSVCkpIHsKLQkJZGVsYmxrc2dkcSA9IGdkcXA7Ci0JCWlmIChkZWxibGtzKSB7Ci0JCQlBU1NFUlQoaXAtPmlfZ2RxdW90KTsKLQkJCXVucmVzZ2RxID0gaXAtPmlfZ2RxdW90OworCWlmIChYRlNfSVNfT1FVT1RBX09OKGlwLT5pX21vdW50KSAmJiBnZHFwKSB7CisJCWlmICgoWEZTX0lTX0dRVU9UQV9PTihpcC0+aV9tb3VudCkgJiYgaXAtPmlfZC5kaV9naWQgIT0KKwkJCQlJTlRfR0VUKGdkcXAtPnFfY29yZS5kX2lkLCBBUkNIX0NPTlZFUlQpKSB8fAorCQkgICAgKFhGU19JU19QUVVPVEFfT04oaXAtPmlfbW91bnQpICYmIGlwLT5pX2QuZGlfcHJvamlkICE9CisJCQkJSU5UX0dFVChnZHFwLT5xX2NvcmUuZF9pZCwgQVJDSF9DT05WRVJUKSkpIHsKKwkJCWRlbGJsa3NnZHEgPSBnZHFwOworCQkJaWYgKGRlbGJsa3MpIHsKKwkJCQlBU1NFUlQoaXAtPmlfZ2RxdW90KTsKKwkJCQl1bnJlc2dkcSA9IGlwLT5pX2dkcXVvdDsKKwkJCX0KIAkJfQogCX0KIAogCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZV9xdW90YV9ieWRxdW90cyh0cCwgaXAtPmlfbW91bnQsCiAJCQkJZGVsYmxrc3VkcSwgZGVsYmxrc2dkcSwgaXAtPmlfZC5kaV9uYmxvY2tzLCAxLAotCQkJCWZsYWdzIHwgWEZTX1FNT1BUX1JFU19SRUdCTEtTKSkpCisJCQkJZmxhZ3MgfCBibGtmbGFncykpKQogCQlyZXR1cm4gKGVycm9yKTsKIAogCS8qCkBAIC0yNjc0LDExICsyNzMyLDExIEBACiAJCUFTU0VSVCh1bnJlc3VkcSB8fCB1bnJlc2dkcSk7CiAJCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZV9xdW90YV9ieWRxdW90cyhOVUxMLCBpcC0+aV9tb3VudCwKIAkJCQlkZWxibGtzdWRxLCBkZWxibGtzZ2RxLCAoeGZzX3FjbnRfdClkZWxibGtzLCAwLAotCQkJCWZsYWdzIHwgWEZTX1FNT1BUX1JFU19SRUdCTEtTKSkpCisJCQkJZmxhZ3MgfCBibGtmbGFncykpKQogCQkJcmV0dXJuIChlcnJvcik7CiAJCXhmc190cmFuc19yZXNlcnZlX3F1b3RhX2J5ZHF1b3RzKE5VTEwsIGlwLT5pX21vdW50LAogCQkJCXVucmVzdWRxLCB1bnJlc2dkcSwgLSgoeGZzX3FjbnRfdClkZWxibGtzKSwgMCwKLQkJCQlYRlNfUU1PUFRfUkVTX1JFR0JMS1MpOworCQkJCWJsa2ZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gKDApOwpAQCAtMjc1MSw3ICsyODA5LDcgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLSBsaXN0IHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfcW1fZnJlZWxpc3RfaW5pdCh4ZnNfZnJsaXN0X3QgKnFsKQogewogCXFsLT5xaF9uZXh0ID0gcWwtPnFoX3ByZXYgPSAoeGZzX2RxdW90X3QgKikgcWw7CkBAIC0yNzYwLDcgKzI4MTgsNyBAQAogCXFsLT5xaF9uZWxlbXMgPSAwOwogfQogCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX3FtX2ZyZWVsaXN0X2Rlc3Ryb3koeGZzX2ZybGlzdF90ICpxbCkKIHsKIAl4ZnNfZHF1b3RfdAkqZHFwLCAqbmV4dGRxcDsKQEAgLTI3ODYsNyArMjg0NCw3IEBACiAJQVNTRVJUKHFsLT5xaF9uZWxlbXMgPT0gMCk7CiB9CiAKLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfcW1fZnJlZWxpc3RfaW5zZXJ0KHhmc19mcmxpc3RfdCAqcWwsIHhmc19kcXVvdF90ICpkcSkKIHsKIAlkcS0+ZHFfZmxuZXh0ID0gcWwtPnFoX25leHQ7CkBAIC0yODE2LDcgKzI4NzQsNyBAQAogCXhmc19xbV9mcmVlbGlzdF9pbnNlcnQoKHhmc19mcmxpc3RfdCAqKXFsLT5xaF9wcmV2LCBkcSk7CiB9CiAKLWludAorU1RBVElDIGludAogeGZzX3FtX2RxaGFzaGxvY2tfbm93YWl0KAogCXhmc19kcXVvdF90ICpkcXApCiB7CkBAIC0yODM2LDcgKzI4OTQsNyBAQAogCXJldHVybiAobG9ja2VkKTsKIH0KIAotaW50CitTVEFUSUMgaW50CiB4ZnNfcW1fbXBsaXN0X25vd2FpdCgKIAl4ZnNfbW91bnRfdAkqbXApCiB7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtLmggYi9mcy94ZnMvcXVvdGEveGZzX3FtLmgKaW5kZXggZGNmMWE3YS4uYjAzZWVjZiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbS5oCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTEzMyw4ICsxMzMsOSBAQAogCXRpbWVfdAkJIHFpX2J0aW1lbGltaXQ7CSAvKiBsaW1pdCBmb3IgYmxrcyB0aW1lciAqLwogCXRpbWVfdAkJIHFpX2l0aW1lbGltaXQ7CSAvKiBsaW1pdCBmb3IgaW5vZGVzIHRpbWVyICovCiAJdGltZV90CQkgcWlfcnRidGltZWxpbWl0Oy8qIGxpbWl0IGZvciBydCBibGtzIHRpbWVyICovCi0JeGZzX3F3YXJuY250X3QJIHFpX2J3YXJubGltaXQ7CSAvKiBsaW1pdCBmb3IgbnVtIHdhcm5pbmdzICovCi0JeGZzX3F3YXJuY250X3QJIHFpX2l3YXJubGltaXQ7CSAvKiBsaW1pdCBmb3IgbnVtIHdhcm5pbmdzICovCisJeGZzX3F3YXJuY250X3QJIHFpX2J3YXJubGltaXQ7CSAvKiBsaW1pdCBmb3IgYmxrcyB3YXJuaW5ncyAqLworCXhmc19xd2FybmNudF90CSBxaV9pd2FybmxpbWl0OwkgLyogbGltaXQgZm9yIGlub2RlcyB3YXJuaW5ncyAqLworCXhmc19xd2FybmNudF90CSBxaV9ydGJ3YXJubGltaXQ7LyogbGltaXQgZm9yIHJ0IGJsa3Mgd2FybmluZ3MgKi8KIAltdXRleF90CQkgcWlfcXVvdGFvZmZsb2NrOy8qIHRvIHNlcmlhbGl6ZSBxdW90YW9mZiAqLwogCXhmc19maWxibGtzX3QJIHFpX2RxY2h1bmtsZW47CSAvKiAjIEJCcyBpbiBhIGNodW5rIG9mIGRxcyAqLwogCXVpbnQJCSBxaV9kcXBlcmNodW5rOwkgLyogIyBvbmRpc2sgZHFzIGluIGFib3ZlIGNodW5rICovCkBAIC0xNzYsNiArMTc3LDcgQEAKIAogI2RlZmluZSBYRlNfUU1fQldBUk5MSU1JVAk1CiAjZGVmaW5lIFhGU19RTV9JV0FSTkxJTUlUCTUKKyNkZWZpbmUgWEZTX1FNX1JUQldBUk5MSU1JVAk1CiAKICNkZWZpbmUgWEZTX1FNX0xPQ0soeHFtKQkobXV0ZXhfbG9jaygmeHFtIyNfbG9jaywgUElOT0QpKQogI2RlZmluZSBYRlNfUU1fVU5MT0NLKHhxbSkJKG11dGV4X3VubG9jaygmeHFtIyNfbG9jaykpCkBAIC0xODQsNyArMTg2LDYgQEAKIAogZXh0ZXJuIHZvaWQJCXhmc19tb3VudF9yZXNldF9zYnFmbGFncyh4ZnNfbW91bnRfdCAqKTsKIAotZXh0ZXJuIGludAkJeGZzX3FtX2luaXRfcXVvdGFpbmZvKHhmc19tb3VudF90ICopOwogZXh0ZXJuIHZvaWQJCXhmc19xbV9kZXN0cm95X3F1b3RhaW5mbyh4ZnNfbW91bnRfdCAqKTsKIGV4dGVybiBpbnQJCXhmc19xbV9tb3VudF9xdW90YXMoeGZzX21vdW50X3QgKiwgaW50KTsKIGV4dGVybiB2b2lkCQl4ZnNfcW1fbW91bnRfcXVvdGFpbml0KHhmc19tb3VudF90ICosIHVpbnQpOwpAQCAtMjAzLDcgKzIwNCw3IEBACiAKIC8qIHZvcCBzdHVmZiAqLwogZXh0ZXJuIGludAkJeGZzX3FtX3ZvcF9kcWFsbG9jKHhmc19tb3VudF90ICosIHhmc19pbm9kZV90ICosCi0JCQkJCXVpZF90LCBnaWRfdCwgdWludCwKKwkJCQkJdWlkX3QsIGdpZF90LCBwcmlkX3QsIHVpbnQsCiAJCQkJCXhmc19kcXVvdF90ICoqLCB4ZnNfZHF1b3RfdCAqKik7CiBleHRlcm4gdm9pZAkJeGZzX3FtX3ZvcF9kcWF0dGFjaF9hbmRfZHFtb2RfbmV3aW5vZGUoCiAJCQkJCXhmc190cmFuc190ICosIHhmc19pbm9kZV90ICosCkBAIC0yMTUsMTQgKzIxNiw5IEBACiAJCQkJCXhmc19kcXVvdF90ICosIHhmc19kcXVvdF90ICosIHVpbnQpOwogCiAvKiBsaXN0IHN0dWZmICovCi1leHRlcm4gdm9pZAkJeGZzX3FtX2ZyZWVsaXN0X2luaXQoeGZzX2ZybGlzdF90ICopOwotZXh0ZXJuIHZvaWQJCXhmc19xbV9mcmVlbGlzdF9kZXN0cm95KHhmc19mcmxpc3RfdCAqKTsKLWV4dGVybiB2b2lkCQl4ZnNfcW1fZnJlZWxpc3RfaW5zZXJ0KHhmc19mcmxpc3RfdCAqLCB4ZnNfZHF1b3RfdCAqKTsKIGV4dGVybiB2b2lkCQl4ZnNfcW1fZnJlZWxpc3RfYXBwZW5kKHhmc19mcmxpc3RfdCAqLCB4ZnNfZHF1b3RfdCAqKTsKIGV4dGVybiB2b2lkCQl4ZnNfcW1fZnJlZWxpc3RfdW5saW5rKHhmc19kcXVvdF90ICopOwogZXh0ZXJuIGludAkJeGZzX3FtX2ZyZWVsaXN0X2xvY2tfbm93YWl0KHhmc19xbV90ICopOwotZXh0ZXJuIGludAkJeGZzX3FtX21wbGlzdF9ub3dhaXQoeGZzX21vdW50X3QgKik7Ci1leHRlcm4gaW50CQl4ZnNfcW1fZHFoYXNobG9ja19ub3dhaXQoeGZzX2RxdW90X3QgKik7CiAKIC8qIHN5c3RlbSBjYWxsIGludGVyZmFjZSAqLwogZXh0ZXJuIGludAkJeGZzX3FtX3F1b3RhY3RsKGJodl9kZXNjX3QgKiwgaW50LCBpbnQsIHhmc19jYWRkcl90KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCmluZGV4IGJlNjdkOWMuLmRjM2MzN2EgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYwpAQCAtNzEsMTAgKzcxLDEzIEBACiAjZGVmaW5lIE1OVE9QVF9OT1FVT1RBCSJub3F1b3RhIgkvKiBubyBxdW90YXMgKi8KICNkZWZpbmUgTU5UT1BUX1VTUlFVT1RBCSJ1c3JxdW90YSIJLyogdXNlciBxdW90YSBlbmFibGVkICovCiAjZGVmaW5lIE1OVE9QVF9HUlBRVU9UQQkiZ3JwcXVvdGEiCS8qIGdyb3VwIHF1b3RhIGVuYWJsZWQgKi8KKyNkZWZpbmUgTU5UT1BUX1BSSlFVT1RBCSJwcmpxdW90YSIJLyogcHJvamVjdCBxdW90YSBlbmFibGVkICovCiAjZGVmaW5lIE1OVE9QVF9VUVVPVEEJInVxdW90YSIJLyogdXNlciBxdW90YSAoSVJJWCB2YXJpYW50KSAqLwogI2RlZmluZSBNTlRPUFRfR1FVT1RBCSJncXVvdGEiCS8qIGdyb3VwIHF1b3RhIChJUklYIHZhcmlhbnQpICovCisjZGVmaW5lIE1OVE9QVF9QUVVPVEEJInBxdW90YSIJLyogcHJvamVjdCBxdW90YSAoSVJJWCB2YXJpYW50KSAqLwogI2RlZmluZSBNTlRPUFRfVVFVT1RBTk9FTkYgInVxbm9lbmZvcmNlIi8qIHVzZXIgcXVvdGEgbGltaXQgZW5mb3JjZW1lbnQgKi8KICNkZWZpbmUgTU5UT1BUX0dRVU9UQU5PRU5GICJncW5vZW5mb3JjZSIvKiBncm91cCBxdW90YSBsaW1pdCBlbmZvcmNlbWVudCAqLworI2RlZmluZSBNTlRPUFRfUFFVT1RBTk9FTkYgInBxbm9lbmZvcmNlIi8qIHByb2plY3QgcXVvdGEgbGltaXQgZW5mb3JjZW1lbnQgKi8KICNkZWZpbmUgTU5UT1BUX1FVT1RBTk9FTkYgICJxbm9lbmZvcmNlIgkvKiBzYW1lIGFzIHVxbm9lbmZvcmNlICovCiAKIFNUQVRJQyBpbnQKQEAgLTEwOSw2ICsxMTIsMTQgQEAKIAkJCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9VUVVPVEE7CiAJCQlhcmdzLT5mbGFncyAmPSB+WEZTTU5UX1VRVU9UQUVORjsKIAkJCXJlZmVyZW5jZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfUFFVT1RBKSB8fAorCQkJICAgIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9QUkpRVU9UQSkpIHsKKwkJCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9QUVVPVEEgfCBYRlNNTlRfUFFVT1RBRU5GOworCQkJcmVmZXJlbmNlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9QUVVPVEFOT0VORikpIHsKKwkJCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9QUVVPVEE7CisJCQlhcmdzLT5mbGFncyAmPSB+WEZTTU5UX1BRVU9UQUVORjsKKwkJCXJlZmVyZW5jZWQgPSAxOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfR1FVT1RBKSB8fAogCQkJICAgIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9HUlBRVU9UQSkpIHsKIAkJCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9HUVVPVEEgfCBYRlNNTlRfR1FVT1RBRU5GOwpAQCAtMTI3LDYgKzEzOCwxMiBAQAogCQkJKnRoaXNfY2hhcisrID0gJywnOwogCX0KIAorCWlmICgoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfR1FVT1RBKSAmJiAoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfUFFVT1RBKSkgeworCQljbW5fZXJyKENFX1dBUk4sCisJCQkiWEZTOiBjYW5ub3QgbW91bnQgd2l0aCBib3RoIHByb2plY3QgYW5kIGdyb3VwIHF1b3RhIik7CisJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKKwl9CisKIAlQVkZTX1BBUlNFQVJHUyhCSFZfTkVYVChiaHYpLCBvcHRpb25zLCBhcmdzLCB1cGRhdGUsIGVycm9yKTsKIAlpZiAoIWVycm9yICYmICFyZWZlcmVuY2VkKQogCQliaHZfcmVtb3ZlX3Zmc29wcyhiaHZ0b3ZmcyhiaHYpLCBWRlNfUE9TSVRJT05fUU0pOwpAQCAtMTQ4LDEzICsxNjUsMTkgQEAKIAkJCXNlcV9wdXRzKG0sICIsIiBNTlRPUFRfVVFVT1RBTk9FTkYpOwogCX0KIAorCWlmIChtcC0+bV9xZmxhZ3MgJiBYRlNfUFFVT1RBX0FDQ1QpIHsKKwkJKG1wLT5tX3FmbGFncyAmIFhGU19PUVVPVEFfRU5GRCkgPworCQkJc2VxX3B1dHMobSwgIiwiIE1OVE9QVF9QUkpRVU9UQSkgOgorCQkJc2VxX3B1dHMobSwgIiwiIE1OVE9QVF9QUVVPVEFOT0VORik7CisJfQorCiAJaWYgKG1wLT5tX3FmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkgewotCQkobXAtPm1fcWZsYWdzICYgWEZTX0dRVU9UQV9FTkZEKSA/CisJCShtcC0+bV9xZmxhZ3MgJiBYRlNfT1FVT1RBX0VORkQpID8KIAkJCXNlcV9wdXRzKG0sICIsIiBNTlRPUFRfR1JQUVVPVEEpIDoKIAkJCXNlcV9wdXRzKG0sICIsIiBNTlRPUFRfR1FVT1RBTk9FTkYpOwogCX0KIAotCWlmICghKG1wLT5tX3FmbGFncyAmIChYRlNfVVFVT1RBX0FDQ1R8WEZTX0dRVU9UQV9BQ0NUKSkpCisJaWYgKCEobXAtPm1fcWZsYWdzICYgWEZTX0FMTF9RVU9UQV9BQ0NUKSkKIAkJc2VxX3B1dHMobSwgIiwiIE1OVE9QVF9OT1FVT1RBKTsKIAogCVBWRlNfU0hPV0FSR1MoQkhWX05FWFQoYmh2KSwgbSwgZXJyb3IpOwpAQCAtMTcxLDcgKzE5NCw3IEBACiAJc3RydWN0IHhmc19tb3VudAkqbXAgPSBYRlNfVkZTVE9NKHZmc3ApOwogCWludAkJCWVycm9yOwogCi0JaWYgKGFyZ3MtPmZsYWdzICYgKFhGU01OVF9VUVVPVEEgfCBYRlNNTlRfR1FVT1RBKSkKKwlpZiAoYXJncy0+ZmxhZ3MgJiAoWEZTTU5UX1VRVU9UQSB8IFhGU01OVF9HUVVPVEEgfCBYRlNNTlRfUFFVT1RBKSkKIAkJeGZzX3FtX21vdW50X3F1b3RhaW5pdChtcCwgYXJncy0+ZmxhZ3MpOwogCVBWRlNfTU9VTlQoQkhWX05FWFQoYmh2KSwgYXJncywgY3IsIGVycm9yKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC0yNTUsMTYgKzI3OCwxNyBAQAogCXVpbnQJCSpxdW90YWZsYWdzKQogewogCXVpbnQJCXF1b3Rhb25kaXNrOwotCXVpbnQJCXVxdW90YW9uZGlzayA9IDAsIGdxdW90YW9uZGlzayA9IDA7CisJdWludAkJdXF1b3Rhb25kaXNrID0gMCwgZ3F1b3Rhb25kaXNrID0gMCwgcHF1b3Rhb25kaXNrID0gMDsKIAogCSpxdW90YWZsYWdzID0gMDsKIAkqbmVlZHF1b3RhbW91bnQgPSBCX0ZBTFNFOwogCiAJcXVvdGFvbmRpc2sgPSBYRlNfU0JfVkVSU0lPTl9IQVNRVU9UQSgmbXAtPm1fc2IpICYmCi0JCW1wLT5tX3NiLnNiX3FmbGFncyAmIChYRlNfVVFVT1RBX0FDQ1R8WEZTX0dRVU9UQV9BQ0NUKTsKKwkJCQkobXAtPm1fc2Iuc2JfcWZsYWdzICYgWEZTX0FMTF9RVU9UQV9BQ0NUKTsKIAogCWlmIChxdW90YW9uZGlzaykgewogCQl1cXVvdGFvbmRpc2sgPSBtcC0+bV9zYi5zYl9xZmxhZ3MgJiBYRlNfVVFVT1RBX0FDQ1Q7CisJCXBxdW90YW9uZGlzayA9IG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19QUVVPVEFfQUNDVDsKIAkJZ3F1b3Rhb25kaXNrID0gbXAtPm1fc2Iuc2JfcWZsYWdzICYgWEZTX0dRVU9UQV9BQ0NUOwogCX0KIApAQCAtMjc3LDEzICszMDEsMTYgQEAKIAogCWlmICgoKHVxdW90YW9uZGlzayAmJiAhWEZTX0lTX1VRVU9UQV9PTihtcCkpIHx8CiAJICAgICghdXF1b3Rhb25kaXNrICYmICBYRlNfSVNfVVFVT1RBX09OKG1wKSkgfHwKKwkgICAgIChwcXVvdGFvbmRpc2sgJiYgIVhGU19JU19QUVVPVEFfT04obXApKSB8fAorCSAgICAoIXBxdW90YW9uZGlzayAmJiAgWEZTX0lTX1BRVU9UQV9PTihtcCkpIHx8CiAJICAgICAoZ3F1b3Rhb25kaXNrICYmICFYRlNfSVNfR1FVT1RBX09OKG1wKSkgfHwKLQkgICAgKCFncXVvdGFvbmRpc2sgJiYgIFhGU19JU19HUVVPVEFfT04obXApKSkgICYmCisJICAgICghZ3F1b3Rhb25kaXNrICYmICBYRlNfSVNfT1FVT1RBX09OKG1wKSkpICAmJgogCSAgICB4ZnNfZGV2X2lzX3JlYWRfb25seShtcCwgImNoYW5naW5nIHF1b3RhIHN0YXRlIikpIHsKIAkJY21uX2VycihDRV9XQVJOLAotCQkJIlhGUzogcGxlYXNlIG1vdW50IHdpdGglcyVzJXMuIiwKKwkJCSJYRlM6IHBsZWFzZSBtb3VudCB3aXRoJXMlcyVzJXMuIiwKIAkJCSghcXVvdGFvbmRpc2sgPyAib3V0IHF1b3RhIiA6ICIiKSwKIAkJCSh1cXVvdGFvbmRpc2sgPyAiIHVzcnF1b3RhIiA6ICIiKSwKKwkJCShwcXVvdGFvbmRpc2sgPyAiIHByanF1b3RhIiA6ICIiKSwKIAkJCShncXVvdGFvbmRpc2sgPyAiIGdycHF1b3RhIiA6ICIiKSk7CiAJCXJldHVybiBYRlNfRVJST1IoRVBFUk0pOwogCX0KQEAgLTM1OSw3ICszODYsNyBAQAogfQogCiAKLXN0cnVjdCB4ZnNfcW1vcHMgeGZzX3FtY29yZV94ZnMgPSB7CitTVEFUSUMgc3RydWN0IHhmc19xbW9wcyB4ZnNfcW1jb3JlX3hmcyA9IHsKIAkueGZzX3FtaW5pdAkJPSB4ZnNfcW1fbmV3bW91bnQsCiAJLnhmc19xbWRvbmUJCT0geGZzX3FtX3VubW91bnRfcXVvdGFkZXN0cm95LAogCS54ZnNfcW1tb3VudAkJPSB4ZnNfcW1fZW5kbW91bnQsCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKaW5kZXggMjI5ZjViNS4uNjhlOTg5NiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwpAQCAtMTE4LDQwICsxMTgsNDEgQEAKIAkgKiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSB2YWxpZCBldmVuIHdoZW4gcXVvdGFvZmYuCiAJICovCiAJc3dpdGNoIChjbWQpIHsKKwljYXNlIFFfWFFVT1RBUk06CiAJCS8qCi0JCSAqIHRydW5jYXRlIHF1b3RhIGZpbGVzLiBxdW90YSBtdXN0IGJlIG9mZi4KKwkJICogVHJ1bmNhdGUgcXVvdGEgZmlsZXMuIHF1b3RhIG11c3QgYmUgb2ZmLgogCQkgKi8KLQkgICAgICBjYXNlIFFfWFFVT1RBUk06CiAJCWlmIChYRlNfSVNfUVVPVEFfT04obXApIHx8IGFkZHIgPT0gTlVMTCkKIAkJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIAkJaWYgKHZmc3AtPnZmc19mbGFnICYgVkZTX1JET05MWSkKIAkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwogCQlyZXR1cm4gKHhmc19xbV9zY2FsbF90cnVuY19xZmlsZXMobXAsCiAJCQkgICAgICAgeGZzX3FtX2ltcG9ydF9xdHlwZV9mbGFncygqKHVpbnQgKilhZGRyKSkpOworCisJY2FzZSBRX1hHRVRRU1RBVDoKIAkJLyoKIAkJICogR2V0IHF1b3RhIHN0YXR1cyBpbmZvcm1hdGlvbi4KIAkJICovCi0JICAgICAgY2FzZSBRX1hHRVRRU1RBVDoKIAkJcmV0dXJuICh4ZnNfcW1fc2NhbGxfZ2V0cXN0YXQobXAsIChmc19xdW90YV9zdGF0X3QgKilhZGRyKSk7CiAKKwljYXNlIFFfWFFVT1RBT046CiAJCS8qCi0JCSAqIFFVT1RBT04gZm9yIHJvb3QgZi9zIGFuZCBxdW90YSBlbmZvcmNlbWVudCBvbiBvdGhlcnMuLgotCQkgKiBRdW90YSBhY2NvdW50aW5nIGZvciBub24tcm9vdCBmL3MncyBtdXN0IGJlIHR1cm5lZCBvbgotCQkgKiBhdCBtb3VudCB0aW1lLgorCQkgKiBRVU9UQU9OIC0gZW5hYmxpbmcgcXVvdGEgZW5mb3JjZW1lbnQuCisJCSAqIFF1b3RhIGFjY291bnRpbmcgbXVzdCBiZSB0dXJuZWQgb24gYXQgbW91bnQgdGltZS4KIAkJICovCi0JICAgICAgY2FzZSBRX1hRVU9UQU9OOgogCQlpZiAoYWRkciA9PSBOVUxMKQogCQkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCQlpZiAodmZzcC0+dmZzX2ZsYWcgJiBWRlNfUkRPTkxZKQogCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7CiAJCXJldHVybiAoeGZzX3FtX3NjYWxsX3F1b3Rhb24obXAsCiAJCQkJCSAgeGZzX3FtX2ltcG9ydF9mbGFncygqKHVpbnQgKilhZGRyKSkpOwotCSAgICAgIGNhc2UgUV9YUVVPVEFPRkY6CisKKwljYXNlIFFfWFFVT1RBT0ZGOgogCQlpZiAodmZzcC0+dmZzX2ZsYWcgJiBWRlNfUkRPTkxZKQogCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7CiAJCWJyZWFrOwogCi0JICAgICAgZGVmYXVsdDoKKwlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKQEAgLTE1OSw3ICsxNjAsNyBAQAogCQlyZXR1cm4gWEZTX0VSUk9SKEVTUkNIKTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JICAgICAgY2FzZSBRX1hRVU9UQU9GRjoKKwljYXNlIFFfWFFVT1RBT0ZGOgogCQlpZiAodmZzcC0+dmZzX2ZsYWcgJiBWRlNfUkRPTkxZKQogCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7CiAJCWVycm9yID0geGZzX3FtX3NjYWxsX3F1b3Rhb2ZmKG1wLApAQCAtMTY3LDQyICsxNjgsMzkgQEAKIAkJCQkJICAgIEJfRkFMU0UpOwogCQlicmVhazsKIAotCQkvKgotCQkgKiBEZWZhdWx0cyB0byBYRlNfR0VUVVFVT1RBLgotCQkgKi8KLQkgICAgICBjYXNlIFFfWEdFVFFVT1RBOgorCWNhc2UgUV9YR0VUUVVPVEE6CiAJCWVycm9yID0geGZzX3FtX3NjYWxsX2dldHF1b3RhKG1wLCAoeGZzX2RxaWRfdClpZCwgWEZTX0RRX1VTRVIsCiAJCQkJCShmc19kaXNrX3F1b3RhX3QgKilhZGRyKTsKIAkJYnJlYWs7Ci0JCS8qCi0JCSAqIFNldCBsaW1pdHMsIGJvdGggaGFyZCBhbmQgc29mdC4gRGVmYXVsdHMgdG8gUV9TRVRVUUxJTS4KLQkJICovCi0JICAgICAgY2FzZSBRX1hTRVRRTElNOgorCWNhc2UgUV9YR0VUR1FVT1RBOgorCQllcnJvciA9IHhmc19xbV9zY2FsbF9nZXRxdW90YShtcCwgKHhmc19kcWlkX3QpaWQsIFhGU19EUV9HUk9VUCwKKwkJCQkJKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOworCQlicmVhazsKKwljYXNlIFFfWEdFVFBRVU9UQToKKwkJZXJyb3IgPSB4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEobXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfUFJPSiwKKwkJCQkJKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOworCQlicmVhazsKKworCWNhc2UgUV9YU0VUUUxJTToKIAkJaWYgKHZmc3AtPnZmc19mbGFnICYgVkZTX1JET05MWSkKIAkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwogCQllcnJvciA9IHhmc19xbV9zY2FsbF9zZXRxbGltKG1wLCAoeGZzX2RxaWRfdClpZCwgWEZTX0RRX1VTRVIsCiAJCQkJCSAgICAgKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwogCQlicmVhazsKLQotCSAgICAgICBjYXNlIFFfWFNFVEdRTElNOgorCWNhc2UgUV9YU0VUR1FMSU06CiAJCWlmICh2ZnNwLT52ZnNfZmxhZyAmIFZGU19SRE9OTFkpCiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVST0ZTKTsKIAkJZXJyb3IgPSB4ZnNfcW1fc2NhbGxfc2V0cWxpbShtcCwgKHhmc19kcWlkX3QpaWQsIFhGU19EUV9HUk9VUCwKIAkJCQkJICAgICAoZnNfZGlza19xdW90YV90ICopYWRkcik7CiAJCWJyZWFrOwotCi0KLQkgICAgICBjYXNlIFFfWEdFVEdRVU9UQToKLQkJZXJyb3IgPSB4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEobXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfR1JPVVAsCi0JCQkJCShmc19kaXNrX3F1b3RhX3QgKilhZGRyKTsKKwljYXNlIFFfWFNFVFBRTElNOgorCQlpZiAodmZzcC0+dmZzX2ZsYWcgJiBWRlNfUkRPTkxZKQorCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7CisJCWVycm9yID0geGZzX3FtX3NjYWxsX3NldHFsaW0obXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfUFJPSiwKKwkJCQkJICAgICAoZnNfZGlza19xdW90YV90ICopYWRkcik7CiAJCWJyZWFrOwogCi0JCS8qCi0JCSAqIFF1b3RhcyBhcmUgZW50aXJlbHkgdW5kZWZpbmVkIGFmdGVyIHF1b3Rhb2ZmIGluIFhGUyBxdW90YXMuCi0JCSAqIEZvciBpbnN0YW5jZSwgdGhlcmUncyBubyB3YXkgdG8gc2V0IGxpbWl0cyB3aGVuIHF1b3Rhb2ZmLgotCQkgKi8KLQotCSAgICAgIGRlZmF1bHQ6CisJZGVmYXVsdDoKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjg2LDggKzI4NCwxMiBAQAogCX0KIAlpZiAoZmxhZ3MgJiBYRlNfR1FVT1RBX0FDQ1QpIHsKIAkJZHF0eXBlIHw9IFhGU19RTU9QVF9HUVVPVEE7Ci0JCWZsYWdzIHw9IChYRlNfR1FVT1RBX0NIS0QgfCBYRlNfR1FVT1RBX0VORkQpOworCQlmbGFncyB8PSAoWEZTX09RVU9UQV9DSEtEIHwgWEZTX09RVU9UQV9FTkZEKTsKIAkJaW5hY3RpdmF0ZV9mbGFncyB8PSBYRlNfR1FVT1RBX0FDVElWRTsKKwl9IGVsc2UgaWYgKGZsYWdzICYgWEZTX1BRVU9UQV9BQ0NUKSB7CisJCWRxdHlwZSB8PSBYRlNfUU1PUFRfUFFVT1RBOworCQlmbGFncyB8PSAoWEZTX09RVU9UQV9DSEtEIHwgWEZTX09RVU9UQV9FTkZEKTsKKwkJaW5hY3RpdmF0ZV9mbGFncyB8PSBYRlNfUFFVT1RBX0FDVElWRTsKIAl9CiAKIAkvKgpAQCAtMzY0LDcgKzM2Niw4IEBACiAJLyoKIAkgKiBJZiBxdW90YXMgaXMgY29tcGxldGVseSBkaXNhYmxlZCwgY2xvc2Ugc2hvcC4KIAkgKi8KLQlpZiAoKGZsYWdzICYgWEZTX01PVU5UX1FVT1RBX0FMTCkgPT0gWEZTX01PVU5UX1FVT1RBX0FMTCkgeworCWlmICgoKGZsYWdzICYgWEZTX01PVU5UX1FVT1RBX0FMTCkgPT0gWEZTX01PVU5UX1FVT1RBX1NFVDEpIHx8CisJICAgICgoZmxhZ3MgJiBYRlNfTU9VTlRfUVVPVEFfQUxMKSA9PSBYRlNfTU9VTlRfUVVPVEFfU0VUMikpIHsKIAkJbXV0ZXhfdW5sb2NrKCYoWEZTX1FJX1FPRkZMT0NLKG1wKSkpOwogCQl4ZnNfcW1fZGVzdHJveV9xdW90YWluZm8obXApOwogCQlyZXR1cm4gKDApOwpAQCAtMzc4LDcgKzM4MSw3IEBACiAJCVhGU19QVVJHRV9JTk9ERShYRlNfUUlfVVFJUChtcCkpOwogCQlYRlNfUUlfVVFJUChtcCkgPSBOVUxMOwogCX0KLQlpZiAoKGRxdHlwZSAmIFhGU19RTU9QVF9HUVVPVEEpICYmIFhGU19RSV9HUUlQKG1wKSkgeworCWlmICgoZHF0eXBlICYgKFhGU19RTU9QVF9HUVVPVEF8WEZTX1FNT1BUX1BRVU9UQSkpICYmIFhGU19RSV9HUUlQKG1wKSkgewogCQlYRlNfUFVSR0VfSU5PREUoWEZTX1FJX0dRSVAobXApKTsKIAkJWEZTX1FJX0dRSVAobXApID0gTlVMTDsKIAl9CkBAIC00MTEsNyArNDE0LDggQEAKIAkJfQogCX0KIAotCWlmICgoZmxhZ3MgJiBYRlNfRFFfR1JPVVApICYmIG1wLT5tX3NiLnNiX2dxdW90aW5vICE9IE5VTExGU0lOTykgeworCWlmICgoZmxhZ3MgJiAoWEZTX0RRX0dST1VQfFhGU19EUV9QUk9KKSkgJiYKKwkgICAgbXAtPm1fc2Iuc2JfZ3F1b3Rpbm8gIT0gTlVMTEZTSU5PKSB7CiAJCWVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIG1wLT5tX3NiLnNiX2dxdW90aW5vLCAwLCAwLCAmcWlwLCAwKTsKIAkJaWYgKCEgZXJyb3IpIHsKIAkJCSh2b2lkKSB4ZnNfdHJ1bmNhdGVfZmlsZShtcCwgcWlwKTsKQEAgLTQzNCw3ICs0MzgsNyBAQAogCXVpbnQJCWZsYWdzKQogewogCWludAkJZXJyb3I7Ci0JdW5zaWduZWQgbG9uZyBzOworCXVuc2lnbmVkIGxvbmcJczsKIAl1aW50CQlxZjsKIAl1aW50CQlhY2NmbGFnczsKIAlfX2ludDY0X3QJc2JmbGFnczsKQEAgLTQ2OCw5ICs0NzIsMTMgQEAKIAkgICAgKG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19VUVVPVEFfQUNDVCkgPT0gMCAmJgogCSAgICAoZmxhZ3MgJiBYRlNfVVFVT1RBX0VORkQpKQogCSAgICB8fAorCSAgICAoKGZsYWdzICYgWEZTX1BRVU9UQV9BQ0NUKSA9PSAwICYmCisJICAgIChtcC0+bV9zYi5zYl9xZmxhZ3MgJiBYRlNfUFFVT1RBX0FDQ1QpID09IDAgJiYKKwkgICAgKGZsYWdzICYgWEZTX09RVU9UQV9FTkZEKSkKKwkgICAgfHwKIAkgICAgKChmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkgPT0gMCAmJgogCSAgICAobXAtPm1fc2Iuc2JfcWZsYWdzICYgWEZTX0dRVU9UQV9BQ0NUKSA9PSAwICYmCi0JICAgIChmbGFncyAmIFhGU19HUVVPVEFfRU5GRCkpKSB7CisJICAgIChmbGFncyAmIFhGU19PUVVPVEFfRU5GRCkpKSB7CiAJCXFkcHJpbnRrKCJDYW4ndCBlbmZvcmNlIHdpdGhvdXQgYWNjdCwgZmxhZ3M9JXggc2JmbGFncz0leFxuIiwKIAkJCWZsYWdzLCBtcC0+bV9zYi5zYl9xZmxhZ3MpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CkBAIC01MDQsNiArNTEyLDEwIEBACiAJICovCiAJaWYgICgoKG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19VUVVPVEFfQUNDVCkgIT0KIAkgICAgIChtcC0+bV9xZmxhZ3MgJiBYRlNfVVFVT1RBX0FDQ1QpKSB8fAorCSAgICAgKChtcC0+bV9zYi5zYl9xZmxhZ3MgJiBYRlNfUFFVT1RBX0FDQ1QpICE9CisJICAgICAobXAtPm1fcWZsYWdzICYgWEZTX1BRVU9UQV9BQ0NUKSkgfHwKKwkgICAgICgobXAtPm1fc2Iuc2JfcWZsYWdzICYgWEZTX0dRVU9UQV9BQ0NUKSAhPQorCSAgICAgKG1wLT5tX3FmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkpIHx8CiAJICAgIChmbGFncyAmIFhGU19BTExfUVVPVEFfRU5GRCkgPT0gMCkKIAkJcmV0dXJuICgwKTsKIApAQCAtNTIxLDcgKzUzMyw2IEBACiB9CiAKIAotCiAvKgogICogUmV0dXJuIHF1b3RhIHN0YXR1cyBpbmZvcm1hdGlvbiwgc3VjaCBhcyB1cXVvdGEtb2ZmLCBlbmZvcmNlbWVudHMsIGV0Yy4KICAqLwpAQCAtNjA2LDcgKzYxNyw4IEBACiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVQRVJNKTsKIAotCWlmICgobmV3bGltLT5kX2ZpZWxkbWFzayAmIChGU19EUV9MSU1JVF9NQVNLfEZTX0RRX1RJTUVSX01BU0spKSA9PSAwKQorCWlmICgobmV3bGltLT5kX2ZpZWxkbWFzayAmCisJICAgIChGU19EUV9MSU1JVF9NQVNLfEZTX0RRX1RJTUVSX01BU0t8RlNfRFFfV0FSTlNfTUFTSykpID09IDApCiAJCXJldHVybiAoMCk7CiAKIAl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1FNX1NFVFFMSU0pOwpAQCAtNjkxLDEyICs3MDMsMjMgQEAKIAkJcWRwcmludGsoImloYXJkICVMZCA8IGlzb2Z0ICVMZFxuIiwgaGFyZCwgc29mdCk7CiAJfQogCisJLyoKKwkgKiBVcGRhdGUgd2FybmluZ3MgY291bnRlcihzKSBpZiByZXF1ZXN0ZWQKKwkgKi8KKwlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JXQVJOUykKKwkJSU5UX1NFVChkZHEtPmRfYndhcm5zLCBBUkNIX0NPTlZFUlQsIG5ld2xpbS0+ZF9id2FybnMpOworCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfSVdBUk5TKQorCQlJTlRfU0VUKGRkcS0+ZF9pd2FybnMsIEFSQ0hfQ09OVkVSVCwgbmV3bGltLT5kX2l3YXJucyk7CisJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJXQVJOUykKKwkJSU5UX1NFVChkZHEtPmRfcnRid2FybnMsIEFSQ0hfQ09OVkVSVCwgbmV3bGltLT5kX3J0Yndhcm5zKTsKKwogCWlmIChpZCA9PSAwKSB7CiAJCS8qCiAJCSAqIFRpbWVsaW1pdHMgZm9yIHRoZSBzdXBlciB1c2VyIHNldCB0aGUgcmVsYXRpdmUgdGltZQogCQkgKiB0aGUgb3RoZXIgdXNlcnMgY2FuIGJlIG92ZXIgcXVvdGEgZm9yIHRoaXMgZmlsZSBzeXN0ZW0uCiAJCSAqIElmIGl0IGlzIHplcm8gYSBkZWZhdWx0IGlzIHVzZWQuICBEaXR0byBmb3IgdGhlIGRlZmF1bHQKLQkJICogc29mdCBhbmQgaGFyZCBsaW1pdCB2YWx1ZXMgKGFscmVhZHkgZG9uZSwgYWJvdmUpLgorCQkgKiBzb2Z0IGFuZCBoYXJkIGxpbWl0IHZhbHVlcyAoYWxyZWFkeSBkb25lLCBhYm92ZSksIGFuZAorCQkgKiBmb3Igd2FybmluZ3MuCiAJCSAqLwogCQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JUSU1FUikgewogCQkJbXAtPm1fcXVvdGFpbmZvLT5xaV9idGltZWxpbWl0ID0gbmV3bGltLT5kX2J0aW1lcjsKQEAgLTcxMCw3ICs3MzMsMTMgQEAKIAkJCW1wLT5tX3F1b3RhaW5mby0+cWlfcnRidGltZWxpbWl0ID0gbmV3bGltLT5kX3J0YnRpbWVyOwogCQkJSU5UX1NFVChkZHEtPmRfcnRidGltZXIsIEFSQ0hfQ09OVkVSVCwgbmV3bGltLT5kX3J0YnRpbWVyKTsKIAkJfQotCX0gZWxzZSAvKiBpZiAoWEZTX0lTX1FVT1RBX0VORk9SQ0VEKG1wKSkgKi8geworCQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JXQVJOUykKKwkJCW1wLT5tX3F1b3RhaW5mby0+cWlfYndhcm5saW1pdCA9IG5ld2xpbS0+ZF9id2FybnM7CisJCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfSVdBUk5TKQorCQkJbXAtPm1fcXVvdGFpbmZvLT5xaV9pd2FybmxpbWl0ID0gbmV3bGltLT5kX2l3YXJuczsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJXQVJOUykKKwkJCW1wLT5tX3F1b3RhaW5mby0+cWlfcnRid2FybmxpbWl0ID0gbmV3bGltLT5kX3J0Yndhcm5zOworCX0gZWxzZSB7CiAJCS8qCiAJCSAqIElmIHRoZSB1c2VyIGlzIG5vdyBvdmVyIHF1b3RhLCBzdGFydCB0aGUgdGltZWxpbWl0LgogCQkgKiBUaGUgdXNlciB3aWxsIG5vdCBiZSAnd2FybmVkJy4KQEAgLTc3Niw5ICs4MDUsOSBAQAogCXhmc19xb2ZmX2xvZ2l0ZW1fdAkqc3RhcnRxb2ZmLAogCXVpbnQJCQlmbGFncykKIHsKLQl4ZnNfdHJhbnNfdAkgICAgICAgKnRwOworCXhmc190cmFuc190CQkqdHA7CiAJaW50CQkJZXJyb3I7Ci0JeGZzX3FvZmZfbG9naXRlbV90ICAgICAqcW9mZmk7CisJeGZzX3FvZmZfbG9naXRlbV90CSpxb2ZmaTsKIAogCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfUU1fUVVPVEFPRkZfRU5EKTsKIApAQCAtOTI4LDE4ICs5NTcsMjYgQEAKIAogU1RBVElDIHVpbnQKIHhmc19xbV9pbXBvcnRfcXR5cGVfZmxhZ3MoCi0JdWludCB1ZmxhZ3MpCisJdWludAkJdWZsYWdzKQogeworCXVpbnQJCW9mbGFncyA9IDA7CisKIAkvKgotCSAqIENhbid0IGJlIGJvdGggYXQgdGhlIHNhbWUgdGltZS4KKwkgKiBDYW4ndCBiZSBtb3JlIHRoYW4gb25lLCBvciBub25lLgogCSAqLwogCWlmICgoKHVmbGFncyAmIChYRlNfR1JPVVBfUVVPVEEgfCBYRlNfVVNFUl9RVU9UQSkpID09Ci0JICAgICAoWEZTX0dST1VQX1FVT1RBIHwgWEZTX1VTRVJfUVVPVEEpKSB8fAotCSAgICAoKHVmbGFncyAmIChYRlNfR1JPVVBfUVVPVEEgfCBYRlNfVVNFUl9RVU9UQSkpID09IDApKQorCQkJKFhGU19HUk9VUF9RVU9UQSB8IFhGU19VU0VSX1FVT1RBKSkgfHwKKwkgICAgKCh1ZmxhZ3MgJiAoWEZTX0dST1VQX1FVT1RBIHwgWEZTX1BST0pfUVVPVEEpKSA9PQorCQkJKFhGU19HUk9VUF9RVU9UQSB8IFhGU19QUk9KX1FVT1RBKSkgfHwKKwkgICAgKCh1ZmxhZ3MgJiAoWEZTX1VTRVJfUVVPVEEgfCBYRlNfUFJPSl9RVU9UQSkpID09CisJCQkoWEZTX1VTRVJfUVVPVEEgfCBYRlNfUFJPSl9RVU9UQSkpIHx8CisJICAgICgodWZsYWdzICYgKFhGU19HUk9VUF9RVU9UQXxYRlNfVVNFUl9RVU9UQXxYRlNfUFJPSl9RVU9UQSkpID09IDApKQogCQlyZXR1cm4gKDApOwogCi0JcmV0dXJuICh1ZmxhZ3MgJiBYRlNfVVNFUl9RVU9UQSkgPwotCQlYRlNfRFFfVVNFUiA6IFhGU19EUV9HUk9VUDsKKwlvZmxhZ3MgfD0gKHVmbGFncyAmIFhGU19VU0VSX1FVT1RBKSA/IFhGU19EUV9VU0VSIDogMDsKKwlvZmxhZ3MgfD0gKHVmbGFncyAmIFhGU19QUk9KX1FVT1RBKSA/IFhGU19EUV9QUk9KIDogMDsKKwlvZmxhZ3MgfD0gKHVmbGFncyAmIFhGU19HUk9VUF9RVU9UQSkgPyBYRlNfRFFfR1JPVVA6IDA7CisJcmV0dXJuIG9mbGFnczsKIH0KIAogU1RBVElDIHVpbnQKQEAgLTk0NywxNCArOTg0LDE5IEBACiAJdWludCBmbGFncykKIHsKIAkvKgotCSAqIENhbid0IGJlIGJvdGggYXQgdGhlIHNhbWUgdGltZS4KKwkgKiBDYW4ndCBiZSBtb3JlIHRoYW4gb25lLCBvciBub25lLgogCSAqLwotCUFTU0VSVCgoZmxhZ3MgJiAoWEZTX0dST1VQX1FVT1RBIHwgWEZTX1VTRVJfUVVPVEEpKSAhPQotCQkoWEZTX0dST1VQX1FVT1RBIHwgWEZTX1VTRVJfUVVPVEEpKTsKLQlBU1NFUlQoKGZsYWdzICYgKFhGU19HUk9VUF9RVU9UQSB8IFhGU19VU0VSX1FVT1RBKSkgIT0gMCk7CisJQVNTRVJUKChmbGFncyAmIChYRlNfUFJPSl9RVU9UQSB8IFhGU19VU0VSX1FVT1RBKSkgIT0KKwkJKFhGU19QUk9KX1FVT1RBIHwgWEZTX1VTRVJfUVVPVEEpKTsKKwlBU1NFUlQoKGZsYWdzICYgKFhGU19QUk9KX1FVT1RBIHwgWEZTX0dST1VQX1FVT1RBKSkgIT0KKwkJKFhGU19QUk9KX1FVT1RBIHwgWEZTX0dST1VQX1FVT1RBKSk7CisJQVNTRVJUKChmbGFncyAmIChYRlNfVVNFUl9RVU9UQSB8IFhGU19HUk9VUF9RVU9UQSkpICE9CisJCShYRlNfVVNFUl9RVU9UQSB8IFhGU19HUk9VUF9RVU9UQSkpOworCUFTU0VSVCgoZmxhZ3MgJiAoWEZTX1BST0pfUVVPVEF8WEZTX1VTRVJfUVVPVEF8WEZTX0dST1VQX1FVT1RBKSkgIT0gMCk7CiAKIAlyZXR1cm4gKGZsYWdzICYgWEZTX0RRX1VTRVIpID8KLQkJWEZTX1VTRVJfUVVPVEEgOiBYRlNfR1JPVVBfUVVPVEE7CisJCVhGU19VU0VSX1FVT1RBIDogKGZsYWdzICYgWEZTX0RRX1BST0opID8KKwkJCVhGU19QUk9KX1FVT1RBIDogWEZTX0dST1VQX1FVT1RBOwogfQogCiBTVEFUSUMgdWludApAQCAtOTY1LDEyICsxMDA3LDE0IEBACiAKIAlpZiAodWZsYWdzICYgWEZTX1FVT1RBX1VEUV9BQ0NUKQogCQlmbGFncyB8PSBYRlNfVVFVT1RBX0FDQ1Q7CisJaWYgKHVmbGFncyAmIFhGU19RVU9UQV9QRFFfQUNDVCkKKwkJZmxhZ3MgfD0gWEZTX1BRVU9UQV9BQ0NUOwogCWlmICh1ZmxhZ3MgJiBYRlNfUVVPVEFfR0RRX0FDQ1QpCiAJCWZsYWdzIHw9IFhGU19HUVVPVEFfQUNDVDsKIAlpZiAodWZsYWdzICYgWEZTX1FVT1RBX1VEUV9FTkZEKQogCQlmbGFncyB8PSBYRlNfVVFVT1RBX0VORkQ7Ci0JaWYgKHVmbGFncyAmIFhGU19RVU9UQV9HRFFfRU5GRCkKLQkJZmxhZ3MgfD0gWEZTX0dRVU9UQV9FTkZEOworCWlmICh1ZmxhZ3MgJiAoWEZTX1FVT1RBX1BEUV9FTkZEfFhGU19RVU9UQV9HRFFfRU5GRCkpCisJCWZsYWdzIHw9IFhGU19PUVVPVEFfRU5GRDsKIAlyZXR1cm4gKGZsYWdzKTsKIH0KIApAQCAtOTg0LDEyICsxMDI4LDE2IEBACiAJdWZsYWdzID0gMDsKIAlpZiAoZmxhZ3MgJiBYRlNfVVFVT1RBX0FDQ1QpCiAJCXVmbGFncyB8PSBYRlNfUVVPVEFfVURRX0FDQ1Q7CisJaWYgKGZsYWdzICYgWEZTX1BRVU9UQV9BQ0NUKQorCQl1ZmxhZ3MgfD0gWEZTX1FVT1RBX1BEUV9BQ0NUOwogCWlmIChmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkKIAkJdWZsYWdzIHw9IFhGU19RVU9UQV9HRFFfQUNDVDsKIAlpZiAoZmxhZ3MgJiBYRlNfVVFVT1RBX0VORkQpCiAJCXVmbGFncyB8PSBYRlNfUVVPVEFfVURRX0VORkQ7Ci0JaWYgKGZsYWdzICYgWEZTX0dRVU9UQV9FTkZEKQotCQl1ZmxhZ3MgfD0gWEZTX1FVT1RBX0dEUV9FTkZEOworCWlmIChmbGFncyAmIChYRlNfT1FVT1RBX0VORkQpKSB7CisJCXVmbGFncyB8PSAoZmxhZ3MgJiBYRlNfR1FVT1RBX0FDQ1QpID8KKwkJCVhGU19RVU9UQV9HRFFfRU5GRCA6IFhGU19RVU9UQV9QRFFfRU5GRDsKKwl9CiAJcmV0dXJuICh1ZmxhZ3MpOwogfQogCkBAIC0xMDcwLDcgKzExMTgsNyBAQAogCQkJeGZzX3FtX2RxcmVsZShpcC0+aV91ZHF1b3QpOwogCQkJaXAtPmlfdWRxdW90ID0gTlVMTDsKIAkJfQotCQlpZiAoKGZsYWdzICYgWEZTX0dRVU9UQV9BQ0NUKSAmJiBpcC0+aV9nZHF1b3QpIHsKKwkJaWYgKGZsYWdzICYgKFhGU19QUVVPVEFfQUNDVHxYRlNfR1FVT1RBX0FDQ1QpICYmIGlwLT5pX2dkcXVvdCkgewogCQkJeGZzX3FtX2RxcmVsZShpcC0+aV9nZHF1b3QpOwogCQkJaXAtPmlfZ2RxdW90ID0gTlVMTDsKIAkJfQpAQCAtMTE2MCw3ICsxMjA4LDYgQEAKIHsKIAljbW5fZXJyKENFX0RFQlVHLCAiLS0tLS0tLS0tLS1EUVRFU1QgRFFVT1QtLS0tLS0tLS0tLS0tLS0tIik7CiAJY21uX2VycihDRV9ERUJVRywgIi0tLS0gZHF1b3QgSUQgPSAlZCIsIGQtPmRfaWQpOwotCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIHR5cGUgICAgID0gJXMiLCBYRlNfUU1fSVNVRFEoZCk/ICJVU1IiIDogIkdSUCIpOwogCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIGZzICAgICAgID0gMHglcCIsIGQtPnFfbW91bnQpOwogCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIGJjb3VudCAgID0gJUx1ICgweCV4KSIsCiAJCWQtPmRfYmNvdW50LCAoaW50KWQtPmRfYmNvdW50KTsKQEAgLTEyMzEsNyArMTI3OCw3IEBACiAjaWZkZWYgUVVPVEFERUJVRwogCWlmICghZXJyKSB7CiAJCWNtbl9lcnIoQ0VfREVCVUcsICIlZCBbJXNdIFsweCVwXSBxY2hlY2tlZCIsCi0JCQlkLT5kX2lkLCBYRlNfUU1fSVNVRFEoZCkgPyAiVVNSIiA6ICJHUlAiLCBkLT5xX21vdW50KTsKKwkJCWQtPmRfaWQsIERRRkxBR1RPX1RZUEVTVFIoZCksIGQtPnFfbW91bnQpOwogCX0KICNlbmRpZgogCXJldHVybiAoZXJyKTsKQEAgLTEyODcsNiArMTMzNCw3IEBACiB4ZnNfcW1faW50ZXJuYWxxY2hlY2tfZ2V0X2RxdW90cygKIAl4ZnNfbW91bnRfdAkqbXAsCiAJeGZzX2RxaWRfdAl1aWQsCisJeGZzX2RxaWRfdAlwcm9qaWQsCiAJeGZzX2RxaWRfdAlnaWQsCiAJeGZzX2RxdGVzdF90CSoqdWQsCiAJeGZzX2RxdGVzdF90CSoqZ2QpCkBAIC0xMjk1LDYgKzEzNDMsOCBAQAogCQl4ZnNfcW1faW50ZXJuYWxxY2hlY2tfZHFnZXQobXAsIHVpZCwgWEZTX0RRX1VTRVIsIHVkKTsKIAlpZiAoWEZTX0lTX0dRVU9UQV9PTihtcCkpCiAJCXhmc19xbV9pbnRlcm5hbHFjaGVja19kcWdldChtcCwgZ2lkLCBYRlNfRFFfR1JPVVAsIGdkKTsKKwllbHNlIGlmIChYRlNfSVNfUFFVT1RBX09OKG1wKSkKKwkJeGZzX3FtX2ludGVybmFscWNoZWNrX2RxZ2V0KG1wLCBwcm9qaWQsIFhGU19EUV9QUk9KLCBnZCk7CiB9CiAKIApAQCAtMTM2MiwxMyArMTQxMiwxNCBAQAogCX0KIAl4ZnNfcW1faW50ZXJuYWxxY2hlY2tfZ2V0X2RxdW90cyhtcCwKIAkJCQkJKHhmc19kcWlkX3QpIGlwLT5pX2QuZGlfdWlkLAorCQkJCQkoeGZzX2RxaWRfdCkgaXAtPmlfZC5kaV9wcm9qaWQsCiAJCQkJCSh4ZnNfZHFpZF90KSBpcC0+aV9kLmRpX2dpZCwKIAkJCQkJJnVkLCAmZ2QpOwogCWlmIChYRlNfSVNfVVFVT1RBX09OKG1wKSkgewogCQlBU1NFUlQodWQpOwogCQl4ZnNfcW1faW50ZXJuYWxxY2hlY2tfZHFhZGp1c3QoaXAsIHVkKTsKIAl9Ci0JaWYgKFhGU19JU19HUVVPVEFfT04obXApKSB7CisJaWYgKFhGU19JU19PUVVPVEFfT04obXApKSB7CiAJCUFTU0VSVChnZCk7CiAJCXhmc19xbV9pbnRlcm5hbHFjaGVja19kcWFkanVzdChpcCwgZ2QpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcXVvdGFfcHJpdi5oIGIvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKaW5kZXggNDE0YjYwMC4uYmY0MTNlNyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKQEAgLTU2LDYgKzU2LDcgQEAKICNkZWZpbmUgWEZTX1FJX1JUQlRJTUVMSU1JVChtcCkgKChtcCktPm1fcXVvdGFpbmZvLT5xaV9ydGJ0aW1lbGltaXQpCiAjZGVmaW5lIFhGU19RSV9JVElNRUxJTUlUKG1wKQkoKG1wKS0+bV9xdW90YWluZm8tPnFpX2l0aW1lbGltaXQpCiAjZGVmaW5lIFhGU19RSV9CV0FSTkxJTUlUKG1wKQkoKG1wKS0+bV9xdW90YWluZm8tPnFpX2J3YXJubGltaXQpCisjZGVmaW5lIFhGU19RSV9SVEJXQVJOTElNSVQobXApCSgobXApLT5tX3F1b3RhaW5mby0+cWlfcnRid2FybmxpbWl0KQogI2RlZmluZSBYRlNfUUlfSVdBUk5MSU1JVChtcCkJKChtcCktPm1fcXVvdGFpbmZvLT5xaV9pd2FybmxpbWl0KQogI2RlZmluZSBYRlNfUUlfUU9GRkxPQ0sobXApCSgobXApLT5tX3F1b3RhaW5mby0+cWlfcXVvdGFvZmZsb2NrKQogCkBAIC0xMDIsNyArMTAzLDggQEAKIAkJCQkgICAgICh4ZnNfR3FtLT5xbV9ncnBfZHFodGFibGUgKyBcCiAJCQkJICAgICAgWEZTX0RRX0hBU0hWQUwobXAsIGlkKSkpCiAjZGVmaW5lIFhGU19JU19EUVRZUEVfT04obXAsIHR5cGUpICAgKHR5cGUgPT0gWEZTX0RRX1VTRVIgPyBcCi0JCQkJICAgICAgWEZTX0lTX1VRVU9UQV9PTihtcCk6WEZTX0lTX0dRVU9UQV9PTihtcCkpCisJCQkJCVhGU19JU19VUVVPVEFfT04obXApIDogXAorCQkJCQlYRlNfSVNfT1FVT1RBX09OKG1wKSkKICNkZWZpbmUgWEZTX0lTX0RRVU9UX1VOSU5JVElBTElaRUQoZHFwKSAoIFwKIAkhZHFwLT5xX2NvcmUuZF9ibGtfaGFyZGxpbWl0ICYmIFwKIAkhZHFwLT5xX2NvcmUuZF9ibGtfc29mdGxpbWl0ICYmIFwKQEAgLTE3NywxNiArMTc5LDExIEBACiAJKCEoKGRxcCktPnFfY29yZS5kX2lkKSkKIAogI2RlZmluZSBYRlNfUFVSR0VfSU5PREUoaXApCQlcCi0JewkJCQlcCi0JICB2bWFwX3QgZHF2bWFwOwkJXAotCSAgdm5vZGVfdCAqZHF2cDsJCVwKLQkgIGRxdnAgPSBYRlNfSVRPVihpcCk7CQlcCi0JICBWTUFQKGRxdnAsIGRxdm1hcCk7CQlcCi0JICBWTl9SRUxFKGRxdnApOwkJXAotCX0KKwlJUkVMRShpcCk7CiAKICNkZWZpbmUgRFFGTEFHVE9fVFlQRVNUUihkKQkoKChkKS0+ZHFfZmxhZ3MgJiBYRlNfRFFfVVNFUikgPyAiVVNSIiA6IFwKLQkJCQkgKCgoZCktPmRxX2ZsYWdzICYgWEZTX0RRX0dST1VQKSA/ICJHUlAiIDogIj8/PyIpKQorCQkJCSAoKChkKS0+ZHFfZmxhZ3MgJiBYRlNfRFFfR1JPVVApID8gIkdSUCIgOiBcCisJCQkJICgoKGQpLT5kcV9mbGFncyAmIFhGU19EUV9QUk9KKSA/ICJQUkoiOiI/Pz8iKSkpCiAjZGVmaW5lIERRRkxBR1RPX0RJUlRZU1RSKGQpCShYRlNfRFFfSVNfRElSVFkoZCkgPyAiRElSVFkiIDogIk5PVERJUlRZIikKIAogI2VuZGlmCS8qIF9fWEZTX1FVT1RBX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMgYi9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKaW5kZXggMTQ5YjJhMS4uM2I5OWRhZiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAvKgogICogV3JhcCBhcm91bmQgbW9kX2RxdW90IHRvIGFjY291bnQgZm9yIGJvdGggdXNlciBhbmQgZ3JvdXAgcXVvdGFzLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX3RyYW5zX21vZF9kcXVvdF9ieWlubygKIAl4ZnNfdHJhbnNfdAkqdHAsCiAJeGZzX2lub2RlX3QJKmlwLApAQCAtMjA3LDEyICsyMDcsMTAgQEAKIAlpZiAodHAtPnRfZHFpbmZvID09IE5VTEwpCiAJCXhmc190cmFuc19hbGxvY19kcWluZm8odHApOwogCi0JaWYgKFhGU19JU19VUVVPVEFfT04obXApICYmIGlwLT5pX3VkcXVvdCkgeworCWlmIChYRlNfSVNfVVFVT1RBX09OKG1wKSAmJiBpcC0+aV91ZHF1b3QpCiAJCSh2b2lkKSB4ZnNfdHJhbnNfbW9kX2RxdW90KHRwLCBpcC0+aV91ZHF1b3QsIGZpZWxkLCBkZWx0YSk7Ci0JfQotCWlmIChYRlNfSVNfR1FVT1RBX09OKG1wKSAmJiBpcC0+aV9nZHF1b3QpIHsKKwlpZiAoWEZTX0lTX09RVU9UQV9PTihtcCkgJiYgaXAtPmlfZ2RxdW90KQogCQkodm9pZCkgeGZzX3RyYW5zX21vZF9kcXVvdCh0cCwgaXAtPmlfZ2RxdW90LCBmaWVsZCwgZGVsdGEpOwotCX0KIH0KIAogU1RBVElDIHhmc19kcXRyeF90ICoKQEAgLTM2OCw3ICszNjYsNyBAQAogICogVW5yZXNlcnZlIGp1c3QgdGhlIHJlc2VydmF0aW9ucyBkb25lIGJ5IHRoaXMgdHJhbnNhY3Rpb24uCiAgKiBkcXVvdCBpcyBzdGlsbCBsZWZ0IGxvY2tlZCBhdCBleGl0LgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX3RyYW5zX2FwcGx5X2RxdW90X2RlbHRhcygKIAl4ZnNfdHJhbnNfdAkJKnRwKQogewpAQCAtNDk5LDcgKzQ5Nyw3IEBACiAJCQkgKiBBZGp1c3QgdGhlIFJUIHJlc2VydmF0aW9uLgogCQkJICovCiAJCQlpZiAocXRyeC0+cXRfcnRibGtfcmVzICE9IDApIHsKLQkJCQlpZiAocXRyeC0+cXRfYmxrX3JlcyAhPSBxdHJ4LT5xdF9ibGtfcmVzX3VzZWQpIHsKKwkJCQlpZiAocXRyeC0+cXRfcnRibGtfcmVzICE9IHF0cngtPnF0X3J0YmxrX3Jlc191c2VkKSB7CiAJCQkJCWlmIChxdHJ4LT5xdF9ydGJsa19yZXMgPgogCQkJCQkgICAgcXRyeC0+cXRfcnRibGtfcmVzX3VzZWQpCiAJCQkJCSAgICAgICBkcXAtPnFfcmVzX3J0YmNvdW50IC09ICh4ZnNfcWNudF90KQpAQCAtNTMyLDEyICs1MzAsNiBAQAogCQkJCQkgICAgKHhmc19xY250X3QpcXRyeC0+cXRfaWNvdW50X2RlbHRhOwogCQkJfQogCi0KLSNpZmRlZiBRVU9UQURFQlVHCi0JCQlpZiAocXRyeC0+cXRfcnRibGtfcmVzICE9IDApCi0JCQkJY21uX2VycihDRV9ERUJVRywgIlJUIHJlcyAlZCBmb3IgMHglcFxuIiwKLQkJCQkJKGludCkgcXRyeC0+cXRfcnRibGtfcmVzLCBkcXApOwotI2VuZGlmCiAJCQlBU1NFUlQoZHFwLT5xX3Jlc19iY291bnQgPj0KIAkJCQlJTlRfR0VUKGRxcC0+cV9jb3JlLmRfYmNvdW50LCBBUkNIX0NPTlZFUlQpKTsKIAkJCUFTU0VSVChkcXAtPnFfcmVzX2ljb3VudCA+PQpAQCAtNjM4LDcgKzYzMCwxMCBAQAogCWludAkJZXJyb3I7CiAJeGZzX3FjbnRfdAloYXJkbGltaXQ7CiAJeGZzX3FjbnRfdAlzb2Z0bGltaXQ7Ci0JdGltZV90CQlidGltZXI7CisJdGltZV90CQl0aW1lcjsKKwl4ZnNfcXdhcm5jbnRfdAl3YXJuczsKKwl4ZnNfcXdhcm5jbnRfdAl3YXJubGltaXQ7CisJeGZzX3FjbnRfdAljb3VudDsKIAl4ZnNfcWNudF90CSpyZXNiY291bnRwOwogCXhmc19xdW90YWluZm9fdAkqcSA9IG1wLT5tX3F1b3RhaW5mbzsKIApAQCAtNjUzLDcgKzY0OCw5IEBACiAJCXNvZnRsaW1pdCA9IElOVF9HRVQoZHFwLT5xX2NvcmUuZF9ibGtfc29mdGxpbWl0LCBBUkNIX0NPTlZFUlQpOwogCQlpZiAoIXNvZnRsaW1pdCkKIAkJCXNvZnRsaW1pdCA9IHEtPnFpX2Jzb2Z0bGltaXQ7Ci0JCWJ0aW1lciA9IElOVF9HRVQoZHFwLT5xX2NvcmUuZF9idGltZXIsIEFSQ0hfQ09OVkVSVCk7CisJCXRpbWVyID0gSU5UX0dFVChkcXAtPnFfY29yZS5kX2J0aW1lciwgQVJDSF9DT05WRVJUKTsKKwkJd2FybnMgPSBJTlRfR0VUKGRxcC0+cV9jb3JlLmRfYndhcm5zLCBBUkNIX0NPTlZFUlQpOworCQl3YXJubGltaXQgPSBYRlNfUUlfQldBUk5MSU1JVChkcXAtPnFfbW91bnQpOwogCQlyZXNiY291bnRwID0gJmRxcC0+cV9yZXNfYmNvdW50OwogCX0gZWxzZSB7CiAJCUFTU0VSVChmbGFncyAmIFhGU19UUkFOU19EUV9SRVNfUlRCTEtTKTsKQEAgLTY2Myw3ICs2NjAsOSBAQAogCQlzb2Z0bGltaXQgPSBJTlRfR0VUKGRxcC0+cV9jb3JlLmRfcnRiX3NvZnRsaW1pdCwgQVJDSF9DT05WRVJUKTsKIAkJaWYgKCFzb2Z0bGltaXQpCiAJCQlzb2Z0bGltaXQgPSBxLT5xaV9ydGJzb2Z0bGltaXQ7Ci0JCWJ0aW1lciA9IElOVF9HRVQoZHFwLT5xX2NvcmUuZF9ydGJ0aW1lciwgQVJDSF9DT05WRVJUKTsKKwkJdGltZXIgPSBJTlRfR0VUKGRxcC0+cV9jb3JlLmRfcnRidGltZXIsIEFSQ0hfQ09OVkVSVCk7CisJCXdhcm5zID0gSU5UX0dFVChkcXAtPnFfY29yZS5kX3J0Yndhcm5zLCBBUkNIX0NPTlZFUlQpOworCQl3YXJubGltaXQgPSBYRlNfUUlfUlRCV0FSTkxJTUlUKGRxcC0+cV9tb3VudCk7CiAJCXJlc2Jjb3VudHAgPSAmZHFwLT5xX3Jlc19ydGJjb3VudDsKIAl9CiAJZXJyb3IgPSAwOwpAQCAtNjkzLDM3ICs2OTIsMzYgQEAKIAkJCQkgKiBJZiB0aW1lciBvciB3YXJuaW5ncyBoYXMgZXhwaXJlZCwKIAkJCQkgKiByZXR1cm4gRURRVU9UCiAJCQkJICovCi0JCQkJaWYgKChidGltZXIgIT0gMCAmJiBnZXRfc2Vjb25kcygpID4gYnRpbWVyKSB8fAotCQkJCSAgICAoZHFwLT5xX2NvcmUuZF9id2FybnMgJiYKLQkJCQkgICAgIElOVF9HRVQoZHFwLT5xX2NvcmUuZF9id2FybnMsIEFSQ0hfQ09OVkVSVCkgPj0KLQkJCQkgICAgIFhGU19RSV9CV0FSTkxJTUlUKGRxcC0+cV9tb3VudCkpKSB7CisJCQkJaWYgKCh0aW1lciAhPSAwICYmIGdldF9zZWNvbmRzKCkgPiB0aW1lcikgfHwKKwkJCQkgICAgKHdhcm5zICE9IDAgJiYgd2FybnMgPj0gd2FybmxpbWl0KSkgewogCQkJCQllcnJvciA9IEVEUVVPVDsKIAkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQkJfQogCQkJfQogCQl9CiAJCWlmIChuaW5vcyA+IDApIHsKLQkJCWhhcmRsaW1pdCA9IElOVF9HRVQoZHFwLT5xX2NvcmUuZF9pbm9faGFyZGxpbWl0LCBBUkNIX0NPTlZFUlQpOworCQkJY291bnQgPSBJTlRfR0VUKGRxcC0+cV9jb3JlLmRfaWNvdW50LCBBUkNIX0NPTlZFUlQpOworCQkJdGltZXIgPSBJTlRfR0VUKGRxcC0+cV9jb3JlLmRfaXRpbWVyLCBBUkNIX0NPTlZFUlQpOworCQkJd2FybnMgPSBJTlRfR0VUKGRxcC0+cV9jb3JlLmRfaXdhcm5zLCBBUkNIX0NPTlZFUlQpOworCQkJd2FybmxpbWl0ID0gWEZTX1FJX0lXQVJOTElNSVQoZHFwLT5xX21vdW50KTsKKwkJCWhhcmRsaW1pdCA9IElOVF9HRVQoZHFwLT5xX2NvcmUuZF9pbm9faGFyZGxpbWl0LAorCQkJCQkJQVJDSF9DT05WRVJUKTsKIAkJCWlmICghaGFyZGxpbWl0KQogCQkJCWhhcmRsaW1pdCA9IHEtPnFpX2loYXJkbGltaXQ7Ci0JCQlzb2Z0bGltaXQgPSBJTlRfR0VUKGRxcC0+cV9jb3JlLmRfaW5vX3NvZnRsaW1pdCwgQVJDSF9DT05WRVJUKTsKKwkJCXNvZnRsaW1pdCA9IElOVF9HRVQoZHFwLT5xX2NvcmUuZF9pbm9fc29mdGxpbWl0LAorCQkJCQkJQVJDSF9DT05WRVJUKTsKIAkJCWlmICghc29mdGxpbWl0KQogCQkJCXNvZnRsaW1pdCA9IHEtPnFpX2lzb2Z0bGltaXQ7Ci0JCQlpZiAoaGFyZGxpbWl0ID4gMFVMTCAmJgotCQkJICAgIElOVF9HRVQoZHFwLT5xX2NvcmUuZF9pY291bnQsIEFSQ0hfQ09OVkVSVCkgPj0gaGFyZGxpbWl0KSB7CisJCQlpZiAoaGFyZGxpbWl0ID4gMFVMTCAmJiBjb3VudCA+PSBoYXJkbGltaXQpIHsKIAkJCQllcnJvciA9IEVEUVVPVDsKIAkJCQlnb3RvIGVycm9yX3JldHVybjsKLQkJCX0gZWxzZSBpZiAoc29mdGxpbWl0ID4gMFVMTCAmJgotCQkJCSAgIElOVF9HRVQoZHFwLT5xX2NvcmUuZF9pY291bnQsIEFSQ0hfQ09OVkVSVCkgPj0gc29mdGxpbWl0KSB7CisJCQl9IGVsc2UgaWYgKHNvZnRsaW1pdCA+IDBVTEwgJiYgY291bnQgPj0gc29mdGxpbWl0KSB7CiAJCQkJLyoKIAkJCQkgKiBJZiB0aW1lciBvciB3YXJuaW5ncyBoYXMgZXhwaXJlZCwKIAkJCQkgKiByZXR1cm4gRURRVU9UCiAJCQkJICovCi0JCQkJaWYgKChkcXAtPnFfY29yZS5kX2l0aW1lciAmJgotCQkJCSAgICAgZ2V0X3NlY29uZHMoKSA+IElOVF9HRVQoZHFwLT5xX2NvcmUuZF9pdGltZXIsIEFSQ0hfQ09OVkVSVCkpIHx8Ci0JCQkJICAgIChkcXAtPnFfY29yZS5kX2l3YXJucyAmJgotCQkJCSAgICAgSU5UX0dFVChkcXAtPnFfY29yZS5kX2l3YXJucywgQVJDSF9DT05WRVJUKSA+PQotCQkJCSAgICAgWEZTX1FJX0lXQVJOTElNSVQoZHFwLT5xX21vdW50KSkpIHsKKwkJCQlpZiAoKHRpbWVyICE9IDAgJiYgZ2V0X3NlY29uZHMoKSA+IHRpbWVyKSB8fAorCQkJCSAgICAgKHdhcm5zICE9IDAgJiYgd2FybnMgPj0gd2FybmxpbWl0KSkgewogCQkJCQllcnJvciA9IEVEUVVPVDsKIAkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQkJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3N1cHBvcnQvZGVidWcuYyBiL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmMKaW5kZXggN2Q2ZTFmMy4uNGVkN2I2OSAxMDA2NDQKLS0tIGEvZnMveGZzL3N1cHBvcnQvZGVidWcuYworKysgYi9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAotaW50CQkJZG9hc3MgPSAxOwogc3RhdGljIGNoYXIJCW1lc3NhZ2VbMjU2XTsJLyoga2VlcCBpdCBvZmYgdGhlIHN0YWNrICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmc19lcnJfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmggYi9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5oCmluZGV4IDQwYjBmNGMuLmM1YjkzNjUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmgKKysrIGIvZnMveGZzL3N1cHBvcnQvZGVidWcuaApAQCAtNTAsMTYgKzUwLDExIEBACiAjZW5kaWYKIAogI2lmZGVmIERFQlVHCi0jIGlmZGVmIGxpbnQKLSMgIGRlZmluZSBBU1NFUlQoRVgpCSgodm9pZCkwKSAvKiBhdm9pZCAiY29uc3RhbnQgaW4gY29uZGl0aW9uYWwiIGJhYmJsZSAqLwotIyBlbHNlCi0jICBkZWZpbmUgQVNTRVJUKEVYKSAoKCFkb2Fzc3x8KEVYKSk/KCh2b2lkKTApOmFzc2ZhaWwoI0VYLCBfX0ZJTEVfXywgX19MSU5FX18pKQotIyBlbmRpZgkvKiBsaW50ICovCisjIGRlZmluZSBBU1NFUlQoRVgpCSgoRVgpID8gKCh2b2lkKTApIDogYXNzZmFpbCgjRVgsIF9fRklMRV9fLCBfX0xJTkVfXykpCiAjZWxzZQogIyBkZWZpbmUgQVNTRVJUKHgpCSgodm9pZCkwKQogI2VuZGlmCiAKLWV4dGVybiBpbnQgZG9hc3M7CQkvKiBkeW5hbWljYWxseSB0dXJuIG9mZiBhc3NlcnRzICovCiBleHRlcm4gdm9pZCBhc3NmYWlsKGNoYXIgKiwgY2hhciAqLCBpbnQpOwogI2lmZGVmIERFQlVHCiBleHRlcm4gdW5zaWduZWQgbG9uZyByYW5kb20odm9pZCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggMzY2MDNkYi4uZGNmZTE5NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtNTksNyArNTksNyBAQAogI2RlZmluZQlYRlNBX0ZJWFVQX0JOT19PSwkxCiAjZGVmaW5lCVhGU0FfRklYVVBfQ05UX09LCTIKIAotaW50CitTVEFUSUMgaW50CiB4ZnNfYWxsb2Nfc2VhcmNoX2J1c3koeGZzX3RyYW5zX3QgKnRwLAogCQkgICAgeGZzX2FnbnVtYmVyX3QgYWdubywKIAkJICAgIHhmc19hZ2Jsb2NrX3QgYm5vLApAQCAtMjU2Miw3ICsyNTYyLDcgQEAKIC8qCiAgKiByZXR1cm5zIG5vbi16ZXJvIGlmIGFueSBvZiAoYWdubyxibm8pOmxlbiBpcyBpbiBhIGJ1c3kgbGlzdAogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19hbGxvY19zZWFyY2hfYnVzeSh4ZnNfdHJhbnNfdCAqdHAsCiAJCSAgICB4ZnNfYWdudW1iZXJfdCBhZ25vLAogCQkgICAgeGZzX2FnYmxvY2tfdCBibm8sCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHIuYyBiL2ZzL3hmcy94ZnNfYXR0ci5jCmluZGV4IGVlOGI1OTAuLmE0MWFkM2EgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0ci5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0ci5jCkBAIC03MSw2ICs3MSwxMSBAQAogICogUHJvdmlkZSB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlcyB0byBtYW5hZ2UgYXR0cmlidXRlIGxpc3RzLgogICovCiAKKyNkZWZpbmUgQVRUUl9TWVNDT1VOVAkyCitTVEFUSUMgc3RydWN0IGF0dHJuYW1lcyBwb3NpeF9hY2xfYWNjZXNzOworU1RBVElDIHN0cnVjdCBhdHRybmFtZXMgcG9zaXhfYWNsX2RlZmF1bHQ7CitTVEFUSUMgc3RydWN0IGF0dHJuYW1lcyAqYXR0cl9zeXN0ZW1fbmFtZXNbQVRUUl9TWVNDT1VOVF07CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUga2VybmVsLgogICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtODMsNiArODgsNyBAQAogLyoKICAqIEludGVybmFsIHJvdXRpbmVzIHdoZW4gYXR0cmlidXRlIGxpc3QgaXMgb25lIGJsb2NrLgogICovCitTVEFUSUMgaW50IHhmc19hdHRyX2xlYWZfZ2V0KHhmc19kYV9hcmdzX3QgKmFyZ3MpOwogU1RBVElDIGludCB4ZnNfYXR0cl9sZWFmX2FkZG5hbWUoeGZzX2RhX2FyZ3NfdCAqYXJncyk7CiBTVEFUSUMgaW50IHhmc19hdHRyX2xlYWZfcmVtb3ZlbmFtZSh4ZnNfZGFfYXJnc190ICphcmdzKTsKIFNUQVRJQyBpbnQgeGZzX2F0dHJfbGVhZl9saXN0KHhmc19hdHRyX2xpc3RfY29udGV4dF90ICpjb250ZXh0KTsKQEAgLTkwLDYgKzk2LDcgQEAKIC8qCiAgKiBJbnRlcm5hbCByb3V0aW5lcyB3aGVuIGF0dHJpYnV0ZSBsaXN0IGlzIG1vcmUgdGhhbiBvbmUgYmxvY2suCiAgKi8KK1NUQVRJQyBpbnQgeGZzX2F0dHJfbm9kZV9nZXQoeGZzX2RhX2FyZ3NfdCAqYXJncyk7CiBTVEFUSUMgaW50IHhmc19hdHRyX25vZGVfYWRkbmFtZSh4ZnNfZGFfYXJnc190ICphcmdzKTsKIFNUQVRJQyBpbnQgeGZzX2F0dHJfbm9kZV9yZW1vdmVuYW1lKHhmc19kYV9hcmdzX3QgKmFyZ3MpOwogU1RBVElDIGludCB4ZnNfYXR0cl9ub2RlX2xpc3QoeGZzX2F0dHJfbGlzdF9jb250ZXh0X3QgKmNvbnRleHQpOwpAQCAtMTEwMiw3ICsxMTA5LDcgQEAKICAqIFRoaXMgbGVhZiBibG9jayBjYW5ub3QgaGF2ZSBhICJyZW1vdGUiIHZhbHVlLCB3ZSBvbmx5IGNhbGwgdGhpcyByb3V0aW5lCiAgKiBpZiBibWFwX29uZV9ibG9jaygpIHNheXMgdGhlcmUgaXMgb25seSBvbmUgYmxvY2sgKGllOiBubyByZW1vdGUgYmxrcykuCiAgKi8KLWludAorU1RBVElDIGludAogeGZzX2F0dHJfbGVhZl9nZXQoeGZzX2RhX2FyZ3NfdCAqYXJncykKIHsKIAl4ZnNfZGFidWZfdCAqYnA7CkBAIC0xNzA3LDcgKzE3MTQsNyBAQAogICogYmxvY2ssIGllOiBib3RoIHRydWUgQnRyZWUgYXR0ciBsaXN0cyBhbmQgZm9yIHNpbmdsZS1sZWFmLWJsb2NrcyB3aXRoCiAgKiAicmVtb3RlIiB2YWx1ZXMgdGFraW5nIHVwIG1vcmUgYmxvY2tzLgogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19hdHRyX25vZGVfZ2V0KHhmc19kYV9hcmdzX3QgKmFyZ3MpCiB7CiAJeGZzX2RhX3N0YXRlX3QgKnN0YXRlOwpAQCAtMjM5OCw3ICsyNDA1LDcgQEAKIAlyZXR1cm4geGZzX2FjbF92aGFzYWNsX2RlZmF1bHQodnApOwogfQogCi1zdHJ1Y3QgYXR0cm5hbWVzIHBvc2l4X2FjbF9hY2Nlc3MgPSB7CitTVEFUSUMgc3RydWN0IGF0dHJuYW1lcyBwb3NpeF9hY2xfYWNjZXNzID0gewogCS5hdHRyX25hbWUJPSAicG9zaXhfYWNsX2FjY2VzcyIsCiAJLmF0dHJfbmFtZWxlbgk9IHNpemVvZigicG9zaXhfYWNsX2FjY2VzcyIpIC0gMSwKIAkuYXR0cl9nZXQJPSBwb3NpeF9hY2xfYWNjZXNzX2dldCwKQEAgLTI0MDcsNyArMjQxNCw3IEBACiAJLmF0dHJfZXhpc3RzCT0gcG9zaXhfYWNsX2FjY2Vzc19leGlzdHMsCiB9OwogCi1zdHJ1Y3QgYXR0cm5hbWVzIHBvc2l4X2FjbF9kZWZhdWx0ID0geworU1RBVElDIHN0cnVjdCBhdHRybmFtZXMgcG9zaXhfYWNsX2RlZmF1bHQgPSB7CiAJLmF0dHJfbmFtZQk9ICJwb3NpeF9hY2xfZGVmYXVsdCIsCiAJLmF0dHJfbmFtZWxlbgk9IHNpemVvZigicG9zaXhfYWNsX2RlZmF1bHQiKSAtIDEsCiAJLmF0dHJfZ2V0CT0gcG9zaXhfYWNsX2RlZmF1bHRfZ2V0LApAQCAtMjQxNiw3ICsyNDIzLDcgQEAKIAkuYXR0cl9leGlzdHMJPSBwb3NpeF9hY2xfZGVmYXVsdF9leGlzdHMsCiB9OwogCi1zdHJ1Y3QgYXR0cm5hbWVzICphdHRyX3N5c3RlbV9uYW1lc1tdID0KK1NUQVRJQyBzdHJ1Y3QgYXR0cm5hbWVzICphdHRyX3N5c3RlbV9uYW1lc1tdID0KIAl7ICZwb3NpeF9hY2xfYWNjZXNzLCAmcG9zaXhfYWNsX2RlZmF1bHQgfTsKIAogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHIuaCBiL2ZzL3hmcy94ZnNfYXR0ci5oCmluZGV4IDY3Y2QwZjUuLjQ1YWIxYzUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0ci5oCisrKyBiL2ZzL3hmcy94ZnNfYXR0ci5oCkBAIC03NiwxMSArNzYsNiBAQAogZXh0ZXJuIHN0cnVjdCBhdHRybmFtZXMgYXR0cl90cnVzdGVkOwogZXh0ZXJuIHN0cnVjdCBhdHRybmFtZXMgKmF0dHJfbmFtZXNwYWNlc1tBVFRSX05BTUVDT1VOVF07CiAKLSNkZWZpbmUgQVRUUl9TWVNDT1VOVAkyCi1leHRlcm4gc3RydWN0IGF0dHJuYW1lcyBwb3NpeF9hY2xfYWNjZXNzOwotZXh0ZXJuIHN0cnVjdCBhdHRybmFtZXMgcG9zaXhfYWNsX2RlZmF1bHQ7Ci1leHRlcm4gc3RydWN0IGF0dHJuYW1lcyAqYXR0cl9zeXN0ZW1fbmFtZXNbQVRUUl9TWVNDT1VOVF07Ci0KIGV4dGVybiBhdHRybmFtZXNfdCAqYXR0cl9sb29rdXBfbmFtZXNwYWNlKGNoYXIgKiwgYXR0cm5hbWVzX3QgKiosIGludCk7CiBleHRlcm4gaW50IGF0dHJfZ2VuZXJpY19saXN0KHN0cnVjdCB2bm9kZSAqLCB2b2lkICosIHNpemVfdCwgaW50LCBzc2l6ZV90ICopOwogCkBAIC0xODQsOCArMTc5LDYgQEAKIAkJCSBzdHJ1Y3QgYXR0cmxpc3RfY3Vyc29yX2tlcm4gKiwgc3RydWN0IGNyZWQgKik7CiBpbnQgeGZzX2F0dHJfaW5hY3RpdmUoc3RydWN0IHhmc19pbm9kZSAqZHApOwogCi1pbnQgeGZzX2F0dHJfbm9kZV9nZXQoc3RydWN0IHhmc19kYV9hcmdzICopOwotaW50IHhmc19hdHRyX2xlYWZfZ2V0KHN0cnVjdCB4ZnNfZGFfYXJncyAqKTsKIGludCB4ZnNfYXR0cl9zaG9ydGZvcm1fZ2V0dmFsdWUoc3RydWN0IHhmc19kYV9hcmdzICopOwogaW50IHhmc19hdHRyX2ZldGNoKHN0cnVjdCB4ZnNfaW5vZGUgKiwgY2hhciAqLCBpbnQsCiAJCQljaGFyICosIGludCAqLCBpbnQsIHN0cnVjdCBjcmVkICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKaW5kZXggYjExMjU2ZS4uMWNkZDU3NCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCkBAIC03OSw2ICs3OSw4IEBACiAvKgogICogUm91dGluZXMgdXNlZCBmb3IgZ3Jvd2luZyB0aGUgQnRyZWUuCiAgKi8KK1NUQVRJQyBpbnQgeGZzX2F0dHJfbGVhZl9jcmVhdGUoeGZzX2RhX2FyZ3NfdCAqYXJncywgeGZzX2RhYmxrX3Qgd2hpY2hfYmxvY2ssCisJCQkJICAgIHhmc19kYWJ1Zl90ICoqYnBwKTsKIFNUQVRJQyBpbnQgeGZzX2F0dHJfbGVhZl9hZGRfd29yayh4ZnNfZGFidWZfdCAqbGVhZl9idWZmZXIsIHhmc19kYV9hcmdzX3QgKmFyZ3MsCiAJCQkJCSAgICAgIGludCBmcmVlbWFwX2luZGV4KTsKIFNUQVRJQyB2b2lkIHhmc19hdHRyX2xlYWZfY29tcGFjdCh4ZnNfdHJhbnNfdCAqdHJhbnMsIHhmc19kYWJ1Zl90ICpsZWFmX2J1ZmZlcik7CkBAIC05Miw2ICs5NCwxNiBAQAogCQkJCQkgICBpbnQgKm51bWJlcl91c2VkYnl0ZXNfaW5fYmxrMSk7CiAKIC8qCisgKiBSb3V0aW5lcyB1c2VkIGZvciBzaHJpbmtpbmcgdGhlIEJ0cmVlLgorICovCitTVEFUSUMgaW50IHhmc19hdHRyX25vZGVfaW5hY3RpdmUoeGZzX3RyYW5zX3QgKip0cmFucywgeGZzX2lub2RlX3QgKmRwLAorCQkJCSAgeGZzX2RhYnVmX3QgKmJwLCBpbnQgbGV2ZWwpOworU1RBVElDIGludCB4ZnNfYXR0cl9sZWFmX2luYWN0aXZlKHhmc190cmFuc190ICoqdHJhbnMsIHhmc19pbm9kZV90ICpkcCwKKwkJCQkgIHhmc19kYWJ1Zl90ICpicCk7CitTVEFUSUMgaW50IHhmc19hdHRyX2xlYWZfZnJlZXh0ZW50KHhmc190cmFuc190ICoqdHJhbnMsIHhmc19pbm9kZV90ICpkcCwKKwkJCQkgICB4ZnNfZGFibGtfdCBibGtubywgaW50IGJsa2NudCk7CisKKy8qCiAgKiBVdGlsaXR5IHJvdXRpbmVzLgogICovCiBTVEFUSUMgdm9pZCB4ZnNfYXR0cl9sZWFmX21vdmVlbnRzKHhmc19hdHRyX2xlYWZibG9ja190ICpzcmNfbGVhZiwKQEAgLTk5LDYgKzExMSwxMCBAQAogCQkJCQkgeGZzX2F0dHJfbGVhZmJsb2NrX3QgKmRzdF9sZWFmLAogCQkJCQkgaW50IGRzdF9zdGFydCwgaW50IG1vdmVfY291bnQsCiAJCQkJCSB4ZnNfbW91bnRfdCAqbXApOworU1RBVElDIGludCB4ZnNfYXR0cl9sZWFmX2VudHNpemUoeGZzX2F0dHJfbGVhZmJsb2NrX3QgKmxlYWYsIGludCBpbmRleCk7CitTVEFUSUMgaW50IHhmc19hdHRyX3B1dF9saXN0ZW50KHhmc19hdHRyX2xpc3RfY29udGV4dF90ICpjb250ZXh0LAorCQkJICAgICBhdHRybmFtZXNfdCAqLCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCSAgICAgaW50IHZhbHVlbGVuKTsKIAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzc0LDcgKzc5MCw3IEBACiAgKiBDcmVhdGUgdGhlIGluaXRpYWwgY29udGVudHMgb2YgYSBsZWFmIGF0dHJpYnV0ZSBsaXN0CiAgKiBvciBhIGxlYWYgaW4gYSBub2RlIGF0dHJpYnV0ZSBsaXN0LgogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19hdHRyX2xlYWZfY3JlYXRlKHhmc19kYV9hcmdzX3QgKmFyZ3MsIHhmc19kYWJsa190IGJsa25vLCB4ZnNfZGFidWZfdCAqKmJwcCkKIHsKIAl4ZnNfYXR0cl9sZWFmYmxvY2tfdCAqbGVhZjsKQEAgLTIyMDksNyArMjIyNSw3IEBACiAgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBieXRlcyB1c2VkIHRvIHN0b3JlIHRoZSBpbmRpY2F0ZWQgYXR0cmlidXRlCiAgKiAod2hldGhlciBsb2NhbCBvciByZW1vdGUgb25seSBjYWxjdWxhdGUgYnl0ZXMgaW4gdGhpcyBibG9jaykuCiAgKi8KLWludAorU1RBVElDIGludAogeGZzX2F0dHJfbGVhZl9lbnRzaXplKHhmc19hdHRyX2xlYWZibG9ja190ICpsZWFmLCBpbnQgaW5kZXgpCiB7CiAJeGZzX2F0dHJfbGVhZl9uYW1lX2xvY2FsX3QgKm5hbWVfbG9jOwpAQCAtMjM4MCw3ICsyMzk2LDcgQEAKICAqIHdlIG1heSBiZSByZWFkaW5nIHRoZW0gZGlyZWN0bHkgb3V0IG9mIGEgdXNlciBidWZmZXIuCiAgKi8KIC8qQVJHU1VTRUQqLwotaW50CitTVEFUSUMgaW50CiB4ZnNfYXR0cl9wdXRfbGlzdGVudCh4ZnNfYXR0cl9saXN0X2NvbnRleHRfdCAqY29udGV4dCwKIAkJICAgICBhdHRybmFtZXNfdCAqbmFtZXNwLCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IHZhbHVlbGVuKQogewpAQCAtMjc0MCw3ICsyNzU2LDcgQEAKICAqIFJlY3Vyc2UgKGdhc3AhKSB0aHJvdWdoIHRoZSBhdHRyaWJ1dGUgbm9kZXMgdW50aWwgd2UgZmluZCBsZWF2ZXMuCiAgKiBXZSdyZSBkb2luZyBhIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCBpbiBvcmRlciB0byBpbnZhbGlkYXRlIGV2ZXJ5dGhpbmcuCiAgKi8KLWludAorU1RBVElDIGludAogeGZzX2F0dHJfbm9kZV9pbmFjdGl2ZSh4ZnNfdHJhbnNfdCAqKnRyYW5zLCB4ZnNfaW5vZGVfdCAqZHAsIHhmc19kYWJ1Zl90ICpicCwKIAkJCQkgICBpbnQgbGV2ZWwpCiB7CkBAIC0yODQ5LDcgKzI4NjUsNyBAQAogICogTm90ZSB0aGF0IHdlIG11c3QgcmVsZWFzZSB0aGUgbG9jayBvbiB0aGUgYnVmZmVyIHNvIHRoYXQgd2UgYXJlIG5vdAogICogY2F1Z2h0IGhvbGRpbmcgc29tZXRoaW5nIHRoYXQgdGhlIGxvZ2dpbmcgY29kZSB3YW50cyB0byBmbHVzaCB0byBkaXNrLgogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19hdHRyX2xlYWZfaW5hY3RpdmUoeGZzX3RyYW5zX3QgKip0cmFucywgeGZzX2lub2RlX3QgKmRwLCB4ZnNfZGFidWZfdCAqYnApCiB7CiAJeGZzX2F0dHJfbGVhZmJsb2NrX3QgKmxlYWY7CkBAIC0yOTM0LDcgKzI5NTAsNyBAQAogICogTG9vayBhdCBhbGwgdGhlIGV4dGVudHMgZm9yIHRoaXMgbG9naWNhbCByZWdpb24sCiAgKiBpbnZhbGlkYXRlIGFueSBidWZmZXJzIHRoYXQgYXJlIGluY29yZS9pbiB0cmFuc2FjdGlvbnMuCiAgKi8KLWludAorU1RBVElDIGludAogeGZzX2F0dHJfbGVhZl9mcmVleHRlbnQoeGZzX3RyYW5zX3QgKip0cmFucywgeGZzX2lub2RlX3QgKmRwLAogCQkJCSAgICB4ZnNfZGFibGtfdCBibGtubywgaW50IGJsa2NudCkKIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmggYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5oCmluZGV4IGIxNDgwZTAuLjBhNGNmYWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmgKKysrIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuaApAQCAtMjYxLDggKzI2MSw2IEBACiAvKgogICogUm91dGluZXMgdXNlZCBmb3IgZ3Jvd2luZyB0aGUgQnRyZWUuCiAgKi8KLWludAl4ZnNfYXR0cl9sZWFmX2NyZWF0ZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIHhmc19kYWJsa190IHdoaWNoX2Jsb2NrLAotCQkJCSAgICBzdHJ1Y3QgeGZzX2RhYnVmICoqYnBwKTsKIGludAl4ZnNfYXR0cl9sZWFmX3NwbGl0KHN0cnVjdCB4ZnNfZGFfc3RhdGUgKnN0YXRlLAogCQkJCSAgIHN0cnVjdCB4ZnNfZGFfc3RhdGVfYmxrICpvbGRibGssCiAJCQkJICAgc3RydWN0IHhmc19kYV9zdGF0ZV9ibGsgKm5ld2Jsayk7CkBAIC0yODQsMTIgKzI4Miw2IEBACiAJCQkJICAgICAgIHN0cnVjdCB4ZnNfZGFfc3RhdGVfYmxrICpkcm9wX2JsaywKIAkJCQkgICAgICAgc3RydWN0IHhmc19kYV9zdGF0ZV9ibGsgKnNhdmVfYmxrKTsKIGludAl4ZnNfYXR0cl9yb290X2luYWN0aXZlKHN0cnVjdCB4ZnNfdHJhbnMgKip0cmFucywgc3RydWN0IHhmc19pbm9kZSAqZHApOwotaW50CXhmc19hdHRyX25vZGVfaW5hY3RpdmUoc3RydWN0IHhmc190cmFucyAqKnRyYW5zLCBzdHJ1Y3QgeGZzX2lub2RlICpkcCwKLQkJCQkgICAgICBzdHJ1Y3QgeGZzX2RhYnVmICpicCwgaW50IGxldmVsKTsKLWludAl4ZnNfYXR0cl9sZWFmX2luYWN0aXZlKHN0cnVjdCB4ZnNfdHJhbnMgKip0cmFucywgc3RydWN0IHhmc19pbm9kZSAqZHAsCi0JCQkJICAgICAgc3RydWN0IHhmc19kYWJ1ZiAqYnApOwotaW50CXhmc19hdHRyX2xlYWZfZnJlZXh0ZW50KHN0cnVjdCB4ZnNfdHJhbnMgKip0cmFucywgc3RydWN0IHhmc19pbm9kZSAqZHAsCi0JCQkJICAgICAgIHhmc19kYWJsa190IGJsa25vLCBpbnQgYmxrY250KTsKIAogLyoKICAqIFV0aWxpdHkgcm91dGluZXMuCkBAIC0yOTksMTAgKzI5MSw2IEBACiAJCQkJICAgc3RydWN0IHhmc19kYWJ1ZiAqbGVhZjJfYnApOwogaW50CXhmc19hdHRyX2xlYWZfbmV3ZW50c2l6ZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIGludCBibG9ja3NpemUsCiAJCQkJCWludCAqbG9jYWwpOwotaW50CXhmc19hdHRyX2xlYWZfZW50c2l6ZShzdHJ1Y3QgeGZzX2F0dHJfbGVhZmJsb2NrICpsZWFmLCBpbnQgaW5kZXgpOwotaW50CXhmc19hdHRyX3B1dF9saXN0ZW50KHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmNvbnRleHQsCi0JCQkgICAgIHN0cnVjdCBhdHRybmFtZXMgKiwgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCQkgICAgIGludCB2YWx1ZWxlbik7CiBpbnQJeGZzX2F0dHJfcm9sbHRyYW5zKHN0cnVjdCB4ZnNfdHJhbnMgKip0cmFuc3AsIHN0cnVjdCB4ZnNfaW5vZGUgKmRwKTsKIAogI2VuZGlmCS8qIF9fWEZTX0FUVFJfTEVBRl9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYml0LmMgYi9mcy94ZnMveGZzX2JpdC5jCmluZGV4IGEyMGE2YzMuLjc2YzlhZDMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYml0LmMKKysrIGIvZnMveGZzL3hmc19iaXQuYwpAQCAtNDUsNyArNDUsNyBAQAogLyoKICAqIEluZGV4IG9mIGhpZ2ggYml0IG51bWJlciBpbiBieXRlLCAtMSBmb3Igbm9uZSBzZXQsIDAuLjcgb3RoZXJ3aXNlLgogICovCi1jb25zdCBjaGFyIHhmc19oaWdoYml0WzI1Nl0gPSB7CitTVEFUSUMgY29uc3QgY2hhciB4ZnNfaGlnaGJpdFsyNTZdID0gewogICAgICAgIC0xLCAwLCAxLCAxLCAyLCAyLCAyLCAyLAkJCS8qIDAwIC4uIDA3ICovCiAJMywgMywgMywgMywgMywgMywgMywgMywJCQkvKiAwOCAuLiAwZiAqLwogCTQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCQkJLyogMTAgLi4gMTcgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5jIGIvZnMveGZzL3hmc19ibWFwLmMKaW5kZXggZGUzMTYyNC4uNmY1ZDI4MyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmMKKysrIGIvZnMveGZzL3hmc19ibWFwLmMKQEAgLTMwMSw2ICszMDEsMTkgQEAKIAl4ZnNfYm1idF9pcmVjX3QJKmdvdHAsCQkvKiBvdXQ6IGV4dGVudCBlbnRyeSBmb3VuZCAqLwogCXhmc19ibWJ0X2lyZWNfdAkqcHJldnApOwkvKiBvdXQ6IHByZXZpb3VzIGV4dGVudCBlbnRyeSBmb3VuZCAqLwogCisvKgorICogQ2hlY2sgdGhlIGxhc3QgaW5vZGUgZXh0ZW50IHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgYWxsb2NhdGlvbiB3aWxsIHJlc3VsdAorICogaW4gYmxvY2tzIGJlaW5nIGFsbG9jYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBXaGVuIHdlIGFsbG9jYXRlIG5ldyBkYXRhCisgKiBibG9ja3MgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSB3aGljaCBkbyBub3Qgc3RhcnQgYXQgdGhlIHByZXZpb3VzIGRhdGEgYmxvY2ssCisgKiB3ZSB3aWxsIHRyeSB0byBhbGlnbiB0aGUgbmV3IGJsb2NrcyBhdCBzdHJpcGUgdW5pdCBib3VuZGFyaWVzLgorICovCitTVEFUSUMgaW50CQkJCS8qIGVycm9yICovCit4ZnNfYm1hcF9pc2Flb2YoCisJeGZzX2lub2RlX3QJKmlwLAkJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KKwl4ZnNfZmlsZW9mZl90ICAgb2ZmLAkJLyogZmlsZSBvZmZzZXQgaW4gZnNibG9ja3MgKi8KKwlpbnQgICAgICAgICAgICAgd2hpY2hmb3JrLAkvKiBkYXRhIG9yIGF0dHJpYnV0ZSBmb3JrICovCisJY2hhcgkJKmFlb2YpOwkJLyogcmV0dXJuIHZhbHVlICovCisKICNpZmRlZiBYRlNfQk1BUF9UUkFDRQogLyoKICAqIEFkZCBhIGJtYXAgdHJhY2UgYnVmZmVyIGVudHJ5LiAgQmFzZSByb3V0aW5lIGZvciB0aGUgb3RoZXJzLgpAQCAtNDUzMiwxOCArNDU0NSwxNyBAQAogCXhmc19leHRsZW5fdAlhbGVuOwkJLyogYWxsb2NhdGVkIGV4dGVudCBsZW5ndGggKi8KIAl4ZnNfZmlsZW9mZl90CWFvZmY7CQkvKiBhbGxvY2F0ZWQgZmlsZSBvZmZzZXQgKi8KIAl4ZnNfYm1hbGxvY2FfdAlibWE7CQkvKiBhcmdzIGZvciB4ZnNfYm1hcF9hbGxvYyAqLwotCWNoYXIJCWNvbnRpZzsJCS8qIGFsbG9jYXRpb24gbXVzdCBiZSBvbmUgZXh0ZW50ICovCiAJeGZzX2J0cmVlX2N1cl90CSpjdXI7CQkvKiBibWFwIGJ0cmVlIGN1cnNvciAqLwotCWNoYXIJCWRlbGF5OwkJLyogdGhpcyByZXF1ZXN0IGlzIGZvciBkZWxheWVkIGFsbG9jICovCiAJeGZzX2ZpbGVvZmZfdAllbmQ7CQkvKiBlbmQgb2YgbWFwcGVkIGZpbGUgcmVnaW9uICovCiAJaW50CQllb2Y7CQkvKiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiBleHRlbnQgbGlzdCAqLworCWNoYXIJCWNvbnRpZzsJCS8qIGFsbG9jYXRpb24gbXVzdCBiZSBvbmUgZXh0ZW50ICovCisJY2hhcgkJZGVsYXk7CQkvKiB0aGlzIHJlcXVlc3QgaXMgZm9yIGRlbGF5ZWQgYWxsb2MgKi8KKwljaGFyCQlleGFjdDsJCS8qIGRvbid0IGRvIGFsbCBvZiB3YXNkZWxheWVkIGV4dGVudCAqLwogCXhmc19ibWJ0X3JlY190CSplcDsJCS8qIGV4dGVudCBsaXN0IGVudHJ5IHBvaW50ZXIgKi8KIAlpbnQJCWVycm9yOwkJLyogZXJyb3IgcmV0dXJuICovCi0JY2hhcgkJZXhhY3Q7CQkvKiBkb24ndCBkbyBhbGwgb2Ygd2FzZGVsYXllZCBleHRlbnQgKi8KIAl4ZnNfYm1idF9pcmVjX3QJZ290OwkJLyogY3VycmVudCBleHRlbnQgbGlzdCByZWNvcmQgKi8KIAl4ZnNfaWZvcmtfdAkqaWZwOwkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCiAJeGZzX2V4dGxlbl90CWluZGxlbjsJCS8qIGluZGlyZWN0IGJsb2NrcyBsZW5ndGggKi8KLQljaGFyCQlpbmhvbGU7CQkvKiBjdXJyZW50IGxvY2F0aW9uIGlzIGhvbGUgaW4gZmlsZSAqLwogCXhmc19leHRudW1fdAlsYXN0eDsJCS8qIGxhc3QgdXNlZnVsIGV4dGVudCBudW1iZXIgKi8KIAlpbnQJCWxvZ2ZsYWdzOwkvKiBmbGFncyBmb3IgdHJhbnNhY3Rpb24gbG9nZ2luZyAqLwogCXhmc19leHRsZW5fdAltaW5sZWZ0OwkvKiBtaW4gYmxvY2tzIGxlZnQgYWZ0ZXIgYWxsb2NhdGlvbiAqLwpAQCAtNDU1NCwxMyArNDU2NiwxNSBAQAogCXhmc19leHRudW1fdAluZXh0ZW50czsJLyogbnVtYmVyIG9mIGV4dGVudHMgaW4gZmlsZSAqLwogCXhmc19maWxlb2ZmX3QJb2JubzsJCS8qIG9sZCBibG9jayBudW1iZXIgKG9mZnNldCkgKi8KIAl4ZnNfYm1idF9pcmVjX3QJcHJldjsJCS8qIHByZXZpb3VzIGV4dGVudCBsaXN0IHJlY29yZCAqLwotCWNoYXIJCXN0YXRlbGVzczsJLyogaWdub3JlIHN0YXRlIGZsYWcgc2V0ICovCiAJaW50CQl0bXBfbG9nZmxhZ3M7CS8qIHRlbXAgZmxhZ3MgaG9sZGVyICovCisJaW50CQl3aGljaGZvcms7CS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCisJY2hhcgkJaW5ob2xlOwkJLyogY3VycmVudCBsb2NhdGlvbiBpcyBob2xlIGluIGZpbGUgKi8KKwljaGFyCQlzdGF0ZWxlc3M7CS8qIGlnbm9yZSBzdGF0ZSBmbGFnIHNldCAqLwogCWNoYXIJCXRyaW07CQkvKiBvdXRwdXQgdHJpbW1lZCB0byBtYXRjaCByYW5nZSAqLwogCWNoYXIJCXVzZXJkYXRhOwkvKiBhbGxvY2F0aW5nIG5vbi1tZXRhZGF0YSAqLwogCWNoYXIJCXdhc2RlbGF5OwkvKiBvbGQgZXh0ZW50IHdhcyBkZWxheWVkICovCi0JaW50CQl3aGljaGZvcms7CS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiAJY2hhcgkJd3I7CQkvKiB0aGlzIGlzIGEgd3JpdGUgcmVxdWVzdCAqLworCWNoYXIJCXJ0OwkJLyogdGhpcyBpcyBhIHJlYWx0aW1lIGZpbGUgKi8KIAljaGFyCQlyc3ZkOwkJLyogT0sgdG8gYWxsb2NhdGUgcmVzZXJ2ZWQgYmxvY2tzICovCiAjaWZkZWYgREVCVUcKIAl4ZnNfZmlsZW9mZl90CW9yaWdfYm5vOwkvKiBvcmlnaW5hbCBibG9jayBudW1iZXIgdmFsdWUgKi8KQEAgLTQ1OTAsNiArNDYwNCw3IEBACiAJfQogCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJcmV0dXJuIFhGU19FUlJPUihFSU8pOworCXJ0ID0gWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKTsKIAlpZnAgPSBYRlNfSUZPUktfUFRSKGlwLCB3aGljaGZvcmspOwogCUFTU0VSVChpZnAtPmlmX2V4dF9tYXggPT0KIAkgICAgICAgWEZTX0lGT1JLX1NJWkUoaXAsIHdoaWNoZm9yaykgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpKTsKQEAgLTQ2OTQsOSArNDcwOSwxNiBAQAogCQkJfQogCQkJbWlubGVuID0gY29udGlnID8gYWxlbiA6IDE7CiAJCQlpZiAoZGVsYXkpIHsKLQkJCQlpbmRsZW4gPSAoeGZzX2V4dGxlbl90KQotCQkJCQl4ZnNfYm1hcF93b3JzdF9pbmRsZW4oaXAsIGFsZW4pOwotCQkJCUFTU0VSVChpbmRsZW4gPiAwKTsKKwkJCQl4ZnNfZXh0bGVuX3QJZXh0c3ogPSAwOworCisJCQkJLyogRmlndXJlIG91dCB0aGUgZXh0ZW50IHNpemUsIGFkanVzdCBhbGVuICovCisJCQkJaWYgKHJ0KSB7CisJCQkJCWlmICghKGV4dHN6ID0gaXAtPmlfZC5kaV9leHRzaXplKSkKKwkJCQkJCWV4dHN6ID0gbXAtPm1fc2Iuc2JfcmV4dHNpemU7CisJCQkJCWFsZW4gPSByb3VuZHVwKGFsZW4sIGV4dHN6KTsKKwkJCQkJZXh0c3ogPSBhbGVuIC8gbXAtPm1fc2Iuc2JfcmV4dHNpemU7CisJCQkJfQorCiAJCQkJLyoKIAkJCQkgKiBNYWtlIGEgdHJhbnNhY3Rpb24tbGVzcyBxdW90YSByZXNlcnZhdGlvbiBmb3IKIAkJCQkgKiBkZWxheWVkIGFsbG9jYXRpb24gYmxvY2tzLiBUaGlzIG51bWJlciBnZXRzCkBAIC00NzA0LDggKzQ3MjYsMTAgQEAKIAkJCQkgKiBXZSByZXR1cm4gRURRVU9UIGlmIHdlIGhhdmVuJ3QgYWxsb2NhdGVkCiAJCQkJICogYmxrcyBhbHJlYWR5IGluc2lkZSB0aGlzIGxvb3A7CiAJCQkJICovCi0JCQkJaWYgKFhGU19UUkFOU19SRVNFUlZFX0JMS1FVT1RBKAotCQkJCQkJbXAsIE5VTEwsIGlwLCAobG9uZylhbGVuKSkgeworCQkJCWlmIChYRlNfVFJBTlNfUkVTRVJWRV9RVU9UQV9OQkxLUygKKwkJCQkJCW1wLCBOVUxMLCBpcCwgKGxvbmcpYWxlbiwgMCwKKwkJCQkJCXJ0ID8gWEZTX1FNT1BUX1JFU19SVEJMS1MgOgorCQkJCQkJICAgICBYRlNfUU1PUFRfUkVTX1JFR0JMS1MpKSB7CiAJCQkJCWlmIChuID09IDApIHsKIAkJCQkJCSpubWFwID0gMDsKIAkJCQkJCUFTU0VSVChjdXIgPT0gTlVMTCk7CkBAIC00NzE4LDQwICs0NzQyLDM0IEBACiAJCQkJICogU3BsaXQgY2hhbmdpbmcgc2IgZm9yIGFsZW4gYW5kIGluZGxlbiBzaW5jZQogCQkJCSAqIHRoZXkgY291bGQgYmUgY29taW5nIGZyb20gZGlmZmVyZW50IHBsYWNlcy4KIAkJCQkgKi8KLQkJCQlpZiAoaXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfUkVBTFRJTUUpIHsKLQkJCQkJeGZzX2V4dGxlbl90CWV4dHN6OwotCQkJCQl4ZnNfZXh0bGVuX3QJcmFsZW47Ci0JCQkJCWlmICghKGV4dHN6ID0gaXAtPmlfZC5kaV9leHRzaXplKSkKLQkJCQkJCWV4dHN6ID0gbXAtPm1fc2Iuc2JfcmV4dHNpemU7Ci0JCQkJCXJhbGVuID0gcm91bmR1cChhbGVuLCBleHRzeik7Ci0JCQkJCXJhbGVuID0gcmFsZW4gLyBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKLQkJCQkJaWYgKHhmc19tb2RfaW5jb3JlX3NiKG1wLAotCQkJCQkJWEZTX1NCU19GUkVYVEVOVFMsCi0JCQkJCQktKHJhbGVuKSwgcnN2ZCkpIHsKLQkJCQkJCWlmIChYRlNfSVNfUVVPVEFfT04oaXAtPmlfbW91bnQpKQotCQkJCQkJCVhGU19UUkFOU19VTlJFU0VSVkVfQkxLUVVPVEEoCi0JCQkJCQkgICAgIAkJbXAsIE5VTEwsIGlwLAotCQkJCQkJCQkobG9uZylhbGVuKTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHhmc19tb2RfaW5jb3JlX3NiKG1wLAotCQkJCQkJCSAgICAgIFhGU19TQlNfRkRCTE9DS1MsCi0JCQkJCQkJICAgICAgLShhbGVuKSwgcnN2ZCkpIHsKLQkJCQkJCWlmIChYRlNfSVNfUVVPVEFfT04oaXAtPmlfbW91bnQpKQotCQkJCQkJCVhGU19UUkFOU19VTlJFU0VSVkVfQkxLUVVPVEEoCi0JCQkJCQkJCW1wLCBOVUxMLCBpcCwKLQkJCQkJCQkJKGxvbmcpYWxlbik7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KKwkJCQlpbmRsZW4gPSAoeGZzX2V4dGxlbl90KQorCQkJCQl4ZnNfYm1hcF93b3JzdF9pbmRsZW4oaXAsIGFsZW4pOworCQkJCUFTU0VSVChpbmRsZW4gPiAwKTsKIAotCQkJCWlmICh4ZnNfbW9kX2luY29yZV9zYihtcCwgWEZTX1NCU19GREJMT0NLUywKLQkJCQkJCS0oaW5kbGVuKSwgcnN2ZCkpIHsKLQkJCQkJWEZTX1RSQU5TX1VOUkVTRVJWRV9CTEtRVU9UQSgKLQkJCQkJCW1wLCBOVUxMLCBpcCwgKGxvbmcpYWxlbik7CisJCQkJaWYgKHJ0KQorCQkJCQllcnJvciA9IHhmc19tb2RfaW5jb3JlX3NiKG1wLAorCQkJCQkJCVhGU19TQlNfRlJFWFRFTlRTLAorCQkJCQkJCS0oZXh0c3opLCByc3ZkKTsKKwkJCQllbHNlCisJCQkJCWVycm9yID0geGZzX21vZF9pbmNvcmVfc2IobXAsCisJCQkJCQkJWEZTX1NCU19GREJMT0NLUywKKwkJCQkJCQktKGFsZW4pLCByc3ZkKTsKKwkJCQlpZiAoIWVycm9yKQorCQkJCQllcnJvciA9IHhmc19tb2RfaW5jb3JlX3NiKG1wLAorCQkJCQkJCVhGU19TQlNfRkRCTE9DS1MsCisJCQkJCQkJLShpbmRsZW4pLCByc3ZkKTsKKworCQkJCWlmIChlcnJvcikgeworCQkJCQlpZiAoWEZTX0lTX1FVT1RBX09OKGlwLT5pX21vdW50KSkKKwkJCQkJCS8qIHVucmVzZXJ2ZSB0aGUgYmxvY2tzIG5vdyAqLworCQkJCQkJWEZTX1RSQU5TX1VOUkVTRVJWRV9RVU9UQV9OQkxLUygKKwkJCQkJCQltcCwgTlVMTCwgaXAsCisJCQkJCQkJKGxvbmcpYWxlbiwgMCwgcnQgPworCQkJCQkJCVhGU19RTU9QVF9SRVNfUlRCTEtTIDoKKwkJCQkJCQlYRlNfUU1PUFRfUkVTX1JFR0JMS1MpOwogCQkJCQlicmVhazsKIAkJCQl9CisKIAkJCQlpcC0+aV9kZWxheWVkX2Jsa3MgKz0gYWxlbjsKIAkJCQlhYm5vID0gTlVMTFNUQVJUQkxPQ0soaW5kbGVuKTsKIAkJCX0gZWxzZSB7CkBAIC01Mzc2LDEzICs1Mzk0LDI0IEBACiAJCX0KIAkJaWYgKHdhc2RlbCkgewogCQkJQVNTRVJUKFNUQVJUQkxPQ0tWQUwoZGVsLmJyX3N0YXJ0YmxvY2spID4gMCk7Ci0JCQl4ZnNfbW9kX2luY29yZV9zYihtcCwgWEZTX1NCU19GREJMT0NLUywKLQkJCQkoaW50KWRlbC5icl9ibG9ja2NvdW50LCByc3ZkKTsKLQkJCS8qIFVucmVzZXJ2ZSBvdXIgcXVvdGEgc3BhY2UgKi8KLQkJCVhGU19UUkFOU19SRVNFUlZFX1FVT1RBX05CTEtTKAotCQkJCW1wLCBOVUxMLCBpcCwgLSgobG9uZylkZWwuYnJfYmxvY2tjb3VudCksIDAsCi0JCQkJaXNydCA/CVhGU19RTU9QVF9SRVNfUlRCTEtTIDoKKwkJCS8qIFVwZGF0ZSByZWFsdGltL2RhdGEgZnJlZXNwYWNlLCB1bnJlc2VydmUgcXVvdGEgKi8KKwkJCWlmIChpc3J0KSB7CisJCQkJeGZzX2ZpbGJsa3NfdCBydGV4dHM7CisKKwkJCQlydGV4dHMgPSBYRlNfRlNCX1RPX0IobXAsIGRlbC5icl9ibG9ja2NvdW50KTsKKwkJCQlkb19kaXYocnRleHRzLCBtcC0+bV9zYi5zYl9yZXh0c2l6ZSk7CisJCQkJeGZzX21vZF9pbmNvcmVfc2IobXAsIFhGU19TQlNfRlJFWFRFTlRTLAorCQkJCQkJKGludClydGV4dHMsIHJzdmQpOworCQkJCVhGU19UUkFOU19SRVNFUlZFX1FVT1RBX05CTEtTKG1wLCBOVUxMLCBpcCwKKwkJCQkJLSgobG9uZylkZWwuYnJfYmxvY2tjb3VudCksIDAsCisJCQkJCVhGU19RTU9QVF9SRVNfUlRCTEtTKTsKKwkJCX0gZWxzZSB7CisJCQkJeGZzX21vZF9pbmNvcmVfc2IobXAsIFhGU19TQlNfRkRCTE9DS1MsCisJCQkJCQkoaW50KWRlbC5icl9ibG9ja2NvdW50LCByc3ZkKTsKKwkJCQlYRlNfVFJBTlNfUkVTRVJWRV9RVU9UQV9OQkxLUyhtcCwgTlVMTCwgaXAsCisJCQkJCS0oKGxvbmcpZGVsLmJyX2Jsb2NrY291bnQpLCAwLAogCQkJCQlYRlNfUU1PUFRfUkVTX1JFR0JMS1MpOworCQkJfQogCQkJaXAtPmlfZGVsYXllZF9ibGtzIC09IGRlbC5icl9ibG9ja2NvdW50OwogCQkJaWYgKGN1cikKIAkJCQljdXItPmJjX3ByaXZhdGUuYi5mbGFncyB8PQpAQCAtNTcxNCw3ICs1NzQzLDcgQEAKICAqIGJsb2NrcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIHdoaWNoIGRvIG5vdCBzdGFydCBhdCB0aGUgcHJldmlvdXMgZGF0YSBibG9jaywKICAqIHdlIHdpbGwgdHJ5IHRvIGFsaWduIHRoZSBuZXcgYmxvY2tzIGF0IHN0cmlwZSB1bml0IGJvdW5kYXJpZXMuCiAgKi8KLWludAkJCQkJLyogZXJyb3IgKi8KK1NUQVRJQyBpbnQJCQkJLyogZXJyb3IgKi8KIHhmc19ibWFwX2lzYWVvZigKIAl4ZnNfaW5vZGVfdAkqaXAsCQkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19maWxlb2ZmX3QgICBvZmYsCQkvKiBmaWxlIG9mZnNldCBpbiBmc2Jsb2NrcyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmggYi9mcy94ZnMveGZzX2JtYXAuaAppbmRleCBmMWJjMjJmLi5lNmQyMmVjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuaAorKysgYi9mcy94ZnMveGZzX2JtYXAuaApAQCAtMzMyLDE5ICszMzIsNiBAQAogCWludAkJCWlmbGFncyk7CS8qIGludGVyZmFjZSBmbGFncyAqLwogCiAvKgotICogQ2hlY2sgdGhlIGxhc3QgaW5vZGUgZXh0ZW50IHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgYWxsb2NhdGlvbiB3aWxsIHJlc3VsdAotICogaW4gYmxvY2tzIGJlaW5nIGFsbG9jYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBXaGVuIHdlIGFsbG9jYXRlIG5ldyBkYXRhCi0gKiBibG9ja3MgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSB3aGljaCBkbyBub3Qgc3RhcnQgYXQgdGhlIHByZXZpb3VzIGRhdGEgYmxvY2ssCi0gKiB3ZSB3aWxsIHRyeSB0byBhbGlnbiB0aGUgbmV3IGJsb2NrcyBhdCBzdHJpcGUgdW5pdCBib3VuZGFyaWVzLgotICovCi1pbnQKLXhmc19ibWFwX2lzYWVvZigKLQlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKLQl4ZnNfZmlsZW9mZl90CQlvZmYsCi0JaW50CQkJd2hpY2hmb3JrLAotCWNoYXIJCQkqYWVvZik7Ci0KLS8qCiAgKiBDaGVjayBpZiB0aGUgZW5kb2ZmIGlzIG91dHNpZGUgdGhlIGxhc3QgZXh0ZW50LiBJZiBzbyB0aGUgY2FsbGVyIHdpbGwgZ3JvdwogICogdGhlIGFsbG9jYXRpb24gdG8gYSBzdHJpcGUgdW5pdCBib3VuZGFyeQogICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCmluZGV4IDE2MzMwNWEuLjA5YzQxMzUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCkBAIC0yMzMxLDIwICsyMzMxLDYgQEAKIAlyZXR1cm4geGZzX2JtYnRfbG9va3VwKGN1ciwgWEZTX0xPT0tVUF9HRSwgc3RhdCk7CiB9CiAKLWludAkJCQkJLyogZXJyb3IgKi8KLXhmc19ibWJ0X2xvb2t1cF9sZSgKLQl4ZnNfYnRyZWVfY3VyX3QJKmN1ciwKLQl4ZnNfZmlsZW9mZl90CW9mZiwKLQl4ZnNfZnNibG9ja190CWJubywKLQl4ZnNfZmlsYmxrc190CWxlbiwKLQlpbnQJCSpzdGF0KQkJLyogc3VjY2Vzcy9mYWlsdXJlICovCi17Ci0JY3VyLT5iY19yZWMuYi5icl9zdGFydG9mZiA9IG9mZjsKLQljdXItPmJjX3JlYy5iLmJyX3N0YXJ0YmxvY2sgPSBibm87Ci0JY3VyLT5iY19yZWMuYi5icl9ibG9ja2NvdW50ID0gbGVuOwotCXJldHVybiB4ZnNfYm1idF9sb29rdXAoY3VyLCBYRlNfTE9PS1VQX0xFLCBzdGF0KTsKLX0KLQogLyoKICAqIEdpdmUgdGhlIGJtYXAgYnRyZWUgYSBuZXcgcm9vdCBibG9jay4gIENvcHkgdGhlIG9sZCBicm9vdCBjb250ZW50cwogICogZG93biBpbnRvIGEgcmVhbCBibG9jayBhbmQgbWFrZSB0aGUgYnJvb3QgcG9pbnQgdG8gaXQuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCmluZGV4IDg0M2ZmMTIuLjBhNDBjZjEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCkBAIC01ODAsMTQgKzU4MCw2IEBACiAJeGZzX2ZpbGJsa3NfdCwKIAlpbnQgKik7CiAKLWludAoteGZzX2JtYnRfbG9va3VwX2xlKAotCXN0cnVjdCB4ZnNfYnRyZWVfY3VyICosCi0JeGZzX2ZpbGVvZmZfdCwKLQl4ZnNfZnNibG9ja190LAotCXhmc19maWxibGtzX3QsCi0JaW50ICopOwotCiAvKgogICogR2l2ZSB0aGUgYm1hcCBidHJlZSBhIG5ldyByb290IGJsb2NrLiAgQ29weSB0aGUgb2xkIGJyb290IGNvbnRlbnRzCiAgKiBkb3duIGludG8gYSByZWFsIGJsb2NrIGFuZCBtYWtlIHRoZSBicm9vdCBwb2ludCB0byBpdC4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfYnRyZWUuYwppbmRleCA5ZGQyMmRkLi4wY2M2M2Q2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19idHJlZS5jCkBAIC05MCw2ICs5MCwxNiBAQAogICovCiAKIC8qCisgKiBSZXRyaWV2ZSB0aGUgYmxvY2sgcG9pbnRlciBmcm9tIHRoZSBjdXJzb3IgYXQgdGhlIGdpdmVuIGxldmVsLgorICogVGhpcyBtYXkgYmUgYSBibWFwIGJ0cmVlIHJvb3Qgb3IgZnJvbSBhIGJ1ZmZlci4KKyAqLworU1RBVElDIHhmc19idHJlZV9ibG9ja190ICoJCQkvKiBnZW5lcmljIGJ0cmVlIGJsb2NrIHBvaW50ZXIgKi8KK3hmc19idHJlZV9nZXRfYmxvY2soCisJeGZzX2J0cmVlX2N1cl90CQkqY3VyLAkvKiBidHJlZSBjdXJzb3IgKi8KKwlpbnQJCQlsZXZlbCwJLyogbGV2ZWwgaW4gYnRyZWUgKi8KKwlzdHJ1Y3QgeGZzX2J1ZgkJKipicHApOwkvKiBidWZmZXIgY29udGFpbmluZyB0aGUgYmxvY2sgKi8KKworLyoKICAqIENoZWNraW5nIHJvdXRpbmU6IHJldHVybiBtYXhyZWNzIGZvciB0aGUgYmxvY2suCiAgKi8KIFNUQVRJQyBpbnQJCQkJLyogbnVtYmVyIG9mIHJlY29yZHMgZml0dGluZyBpbiBibG9jayAqLwpAQCAtNDk3LDcgKzUwNyw3IEBACiAgKiBSZXRyaWV2ZSB0aGUgYmxvY2sgcG9pbnRlciBmcm9tIHRoZSBjdXJzb3IgYXQgdGhlIGdpdmVuIGxldmVsLgogICogVGhpcyBtYXkgYmUgYSBibWFwIGJ0cmVlIHJvb3Qgb3IgZnJvbSBhIGJ1ZmZlci4KICAqLwoteGZzX2J0cmVlX2Jsb2NrX3QgKgkJCS8qIGdlbmVyaWMgYnRyZWUgYmxvY2sgcG9pbnRlciAqLworU1RBVElDIHhmc19idHJlZV9ibG9ja190ICoJCS8qIGdlbmVyaWMgYnRyZWUgYmxvY2sgcG9pbnRlciAqLwogeGZzX2J0cmVlX2dldF9ibG9jaygKIAl4ZnNfYnRyZWVfY3VyX3QJCSpjdXIsCS8qIGJ0cmVlIGN1cnNvciAqLwogCWludAkJCWxldmVsLAkvKiBsZXZlbCBpbiBidHJlZSAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idHJlZS5oIGIvZnMveGZzL3hmc19idHJlZS5oCmluZGV4IDkzODcyYmIuLjA5YjRlMTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnRyZWUuaAorKysgYi9mcy94ZnMveGZzX2J0cmVlLmgKQEAgLTMyNSwxNiArMzI1LDYgQEAKIAlpbnQJCQlsZXZlbCk7CS8qIGxldmVsIHRvIGNoYW5nZSAqLwogCiAvKgotICogUmV0cmlldmUgdGhlIGJsb2NrIHBvaW50ZXIgZnJvbSB0aGUgY3Vyc29yIGF0IHRoZSBnaXZlbiBsZXZlbC4KLSAqIFRoaXMgbWF5IGJlIGEgYm1hcCBidHJlZSByb290IG9yIGZyb20gYSBidWZmZXIuCi0gKi8KLXhmc19idHJlZV9ibG9ja190ICoJCQkvKiBnZW5lcmljIGJ0cmVlIGJsb2NrIHBvaW50ZXIgKi8KLXhmc19idHJlZV9nZXRfYmxvY2soCi0JeGZzX2J0cmVlX2N1cl90CQkqY3VyLAkvKiBidHJlZSBjdXJzb3IgKi8KLQlpbnQJCQlsZXZlbCwJLyogbGV2ZWwgaW4gYnRyZWUgKi8KLQlzdHJ1Y3QgeGZzX2J1ZgkJKipicHApOwkvKiBidWZmZXIgY29udGFpbmluZyB0aGUgYmxvY2sgKi8KLQotLyoKICAqIEdldCBhIGJ1ZmZlciBmb3IgdGhlIGJsb2NrLCByZXR1cm4gaXQgd2l0aCBubyBkYXRhIHJlYWQuCiAgKiBMb25nLWZvcm0gYWRkcmVzc2luZy4KICAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idWZfaXRlbS5jIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCmluZGV4IDlhYjAwMzkuLjMwYjgyODUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogICoKICAqIElmIHRoZSBYRlNfQkxJX1NUQUxFIGZsYWcgaGFzIGJlZW4gc2V0LCB0aGVuIGxvZyBub3RoaW5nLgogICovCi11aW50CitTVEFUSUMgdWludAogeGZzX2J1Zl9pdGVtX3NpemUoCiAJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXApCiB7CkBAIC0yNDAsNyArMjQwLDcgQEAKICAqIGZvcm1hdCBzdHJ1Y3R1cmUsIGFuZCB0aGUgcmVzdCBwb2ludCB0byBjb250aWd1b3VzIGNodW5rcwogICogd2l0aGluIHRoZSBidWZmZXIuCiAgKi8KLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfYnVmX2l0ZW1fZm9ybWF0KAogCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwLAogCXhmc19sb2dfaW92ZWNfdAkJKmxvZ192ZWN0b3IpCkBAIC0zNjUsNyArMzY1LDcgQEAKICAqIGl0ZW0gaW4gbWVtb3J5IHNvIGl0IGNhbm5vdCBiZSB3cml0dGVuIG91dC4gIFNpbXBseSBjYWxsIGJwaW4oKQogICogb24gdGhlIGJ1ZmZlciB0byBkbyB0aGlzLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2J1Zl9pdGVtX3BpbigKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCkKIHsKQEAgLTM5MSw3ICszOTEsNyBAQAogICogSWYgdGhlIFhGU19CTElfU1RBTEUgZmxhZyBpcyBzZXQgYW5kIHdlIGFyZSB0aGUgbGFzdCByZWZlcmVuY2UsCiAgKiB0aGVuIGZyZWUgdXAgdGhlIGJ1ZiBsb2cgaXRlbSBhbmQgdW5sb2NrIHRoZSBidWZmZXIuCiAgKi8KLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfYnVmX2l0ZW1fdW5waW4oCiAJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXAsCiAJaW50CQkJc3RhbGUpCkBAIC00NDYsNyArNDQ2LDcgQEAKICAqIHNvIHdlIG5lZWQgdG8gZnJlZSB0aGUgaXRlbSdzIGRlc2NyaXB0b3IgKHRoYXQgcG9pbnRzIHRvIHRoZSBpdGVtKQogICogaW4gdGhlIHRyYW5zYWN0aW9uLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2J1Zl9pdGVtX3VucGluX3JlbW92ZSgKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCwKIAl4ZnNfdHJhbnNfdAkJKnRwKQpAQCAtNDkzLDcgKzQ5Myw3IEBACiAgKiB0aGUgbG9jayByaWdodCBhd2F5LCByZXR1cm4gMC4gIElmIHdlIGNhbiBnZXQgdGhlIGxvY2ssIHB1bGwgdGhlCiAgKiBidWZmZXIgZnJvbSB0aGUgZnJlZSBsaXN0LCBtYXJrIGl0IGJ1c3ksIGFuZCByZXR1cm4gMS4KICAqLwotdWludAorU1RBVElDIHVpbnQKIHhmc19idWZfaXRlbV90cnlsb2NrKAogCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwKQogewpAQCAtNTM3LDcgKzUzNyw3IEBACiAgKiBUaGlzIGlzIGZvciBzdXBwb3J0IG9mIHhmc190cmFuc19iaG9sZCgpLiBNYWtlIHN1cmUgdGhlCiAgKiBYRlNfQkxJX0hPTEQgZmllbGQgaXMgY2xlYXJlZCBpZiB3ZSBkb24ndCBmcmVlIHRoZSBpdGVtLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2J1Zl9pdGVtX3VubG9jaygKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCkKIHsKQEAgLTYzNSw3ICs2MzUsNyBAQAogICogYnkgcmV0dXJuaW5nIHRoZSBvcmlnaW5hbCBsc24gb2YgdGhhdCB0cmFuc2FjdGlvbiBoZXJlIHJhdGhlciB0aGFuCiAgKiB0aGUgY3VycmVudCBvbmUuCiAgKi8KLXhmc19sc25fdAorU1RBVElDIHhmc19sc25fdAogeGZzX2J1Zl9pdGVtX2NvbW1pdHRlZCgKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCwKIAl4ZnNfbHNuX3QJCWxzbikKQEAgLTY1NCw3ICs2NTQsNyBAQAogICogYW5kIGhhdmUgYWJvcnRlZCB0aGlzIHRyYW5zYWN0aW9uLCB3ZSdsbCB0cmFwIHRoaXMgYnVmZmVyIHdoZW4gaXQgdHJpZXMgdG8KICAqIGdldCB3cml0dGVuIG91dC4KICAqLwotdm9pZAorU1RBVElDIHZvaWQKIHhmc19idWZfaXRlbV9hYm9ydCgKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCkKIHsKQEAgLTY3NCw3ICs2NzQsNyBAQAogICogQl9ERUxXUkkgc2V0LCB0aGVuIGdldCBpdCBnb2luZyBvdXQgdG8gZGlzayB3aXRoIGEgY2FsbCB0byBiYXdyaXRlKCkuCiAgKiBJZiBub3QsIHRoZW4ganVzdCByZWxlYXNlIHRoZSBidWZmZXIuCiAgKi8KLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfYnVmX2l0ZW1fcHVzaCgKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCkKIHsKQEAgLTY5Myw3ICs2OTMsNyBAQAogfQogCiAvKiBBUkdTVVNFRCAqLwotdm9pZAorU1RBVElDIHZvaWQKIHhmc19idWZfaXRlbV9jb21taXR0aW5nKHhmc19idWZfbG9nX2l0ZW1fdCAqYmlwLCB4ZnNfbHNuX3QgY29tbWl0X2xzbikKIHsKIH0KQEAgLTcwMSw3ICs3MDEsNyBAQAogLyoKICAqIFRoaXMgaXMgdGhlIG9wcyB2ZWN0b3Igc2hhcmVkIGJ5IGFsbCBidWYgbG9nIGl0ZW1zLgogICovCi1zdHJ1Y3QgeGZzX2l0ZW1fb3BzIHhmc19idWZfaXRlbV9vcHMgPSB7CitTVEFUSUMgc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfYnVmX2l0ZW1fb3BzID0gewogCS5pb3Bfc2l6ZQk9ICh1aW50KCopKHhmc19sb2dfaXRlbV90KikpeGZzX2J1Zl9pdGVtX3NpemUsCiAJLmlvcF9mb3JtYXQJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sb2dfaW92ZWNfdCopKQogCQkJCQl4ZnNfYnVmX2l0ZW1fZm9ybWF0LApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idWZfaXRlbS5oIGIvZnMveGZzL3hmc19idWZfaXRlbS5oCmluZGV4IDVmMWIwYzkuLjAxYWVkNWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uaAorKysgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmgKQEAgLTgwLDcgKzgwLDcgQEAKICAqIHVzZXIgb3IgZ3JvdXAgZHF1b3RzIGFuZCBtYXkgcmVxdWlyZSBzcGVjaWFsIHJlY292ZXJ5IGhhbmRsaW5nLgogICovCiAjZGVmaW5lCVhGU19CTElfVURRVU9UX0JVRgkweDQKLS8qICNkZWZpbmUgWEZTX0JMSV9QRFFVT1RfQlVGCTB4OCAqLworI2RlZmluZSBYRlNfQkxJX1BEUVVPVF9CVUYJMHg4CiAjZGVmaW5lCVhGU19CTElfR0RRVU9UX0JVRgkweDEwCiAKICNkZWZpbmUJWEZTX0JMSV9DSFVOSwkJMTI4CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RhX2J0cmVlLmMgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmMKaW5kZXggZDdmZTI4OC4uOGI3OTJkZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kYV9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwpAQCAtMTEzLDcgKzExMywxMCBAQAogU1RBVElDIHVpbnQJeGZzX2RhX25vZGVfbGFzdGhhc2goeGZzX2RhYnVmX3QgKmJwLCBpbnQgKmNvdW50KTsKIFNUQVRJQyBpbnQJeGZzX2RhX25vZGVfb3JkZXIoeGZzX2RhYnVmX3QgKm5vZGUxX2JwLCB4ZnNfZGFidWZfdCAqbm9kZTJfYnApOwogU1RBVElDIHhmc19kYWJ1Zl90ICp4ZnNfZGFfYnVmX21ha2UoaW50IG5idWYsIHhmc19idWZfdCAqKmJwcywgaW5zdF90ICpyYSk7Ci0KK1NUQVRJQyBpbnQJeGZzX2RhX2Jsa191bmxpbmsoeGZzX2RhX3N0YXRlX3QgKnN0YXRlLAorCQkJCSAgeGZzX2RhX3N0YXRlX2Jsa190ICpkcm9wX2JsaywKKwkJCQkgIHhmc19kYV9zdGF0ZV9ibGtfdCAqc2F2ZV9ibGspOworU1RBVElDIHZvaWQJeGZzX2RhX3N0YXRlX2tpbGxfYWx0cGF0aCh4ZnNfZGFfc3RhdGVfdCAqc3RhdGUpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogUm91dGluZXMgdXNlZCBmb3IgZ3Jvd2luZyB0aGUgQnRyZWUuCkBAIC0xNDI0LDcgKzE0MjcsNyBAQAogLyoKICAqIFVubGluayBhIGJsb2NrIGZyb20gYSBkb3VibHkgbGlua2VkIGxpc3Qgb2YgYmxvY2tzLgogICovCi1pbnQJCQkJCQkJLyogZXJyb3IgKi8KK1NUQVRJQyBpbnQJCQkJCQkvKiBlcnJvciAqLwogeGZzX2RhX2Jsa191bmxpbmsoeGZzX2RhX3N0YXRlX3QgKnN0YXRlLCB4ZnNfZGFfc3RhdGVfYmxrX3QgKmRyb3BfYmxrLAogCQkJCSB4ZnNfZGFfc3RhdGVfYmxrX3QgKnNhdmVfYmxrKQogewpAQCAtMjM4MSw3ICsyMzg0LDcgQEAKIC8qCiAgKiBLaWxsIHRoZSBhbHRwYXRoIGNvbnRlbnRzIG9mIGEgZGEtc3RhdGUgc3RydWN0dXJlLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2RhX3N0YXRlX2tpbGxfYWx0cGF0aCh4ZnNfZGFfc3RhdGVfdCAqc3RhdGUpCiB7CiAJaW50CWk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RhX2J0cmVlLmggYi9mcy94ZnMveGZzX2RhX2J0cmVlLmgKaW5kZXggOWZjNjk5ZC4uM2E5YjllOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kYV9idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaApAQCAtMjk2LDggKzI5Niw2IEBACiAvKgogICogVXRpbGl0eSByb3V0aW5lcy4KICAqLwotaW50CXhmc19kYV9ibGtfdW5saW5rKHhmc19kYV9zdGF0ZV90ICpzdGF0ZSwgeGZzX2RhX3N0YXRlX2Jsa190ICpkcm9wX2JsaywKLQkJCQkJIHhmc19kYV9zdGF0ZV9ibGtfdCAqc2F2ZV9ibGspOwogaW50CXhmc19kYV9ibGtfbGluayh4ZnNfZGFfc3RhdGVfdCAqc3RhdGUsIHhmc19kYV9zdGF0ZV9ibGtfdCAqb2xkX2JsaywKIAkJCQkgICAgICAgeGZzX2RhX3N0YXRlX2Jsa190ICpuZXdfYmxrKTsKIApAQCAtMzIwLDcgKzMxOCw2IEBACiB1aW50IHhmc19kYV9sb2cyX3JvdW5kdXAodWludCBpKTsKIHhmc19kYV9zdGF0ZV90ICp4ZnNfZGFfc3RhdGVfYWxsb2Modm9pZCk7CiB2b2lkIHhmc19kYV9zdGF0ZV9mcmVlKHhmc19kYV9zdGF0ZV90ICpzdGF0ZSk7Ci12b2lkIHhmc19kYV9zdGF0ZV9raWxsX2FsdHBhdGgoeGZzX2RhX3N0YXRlX3QgKnN0YXRlKTsKIAogdm9pZCB4ZnNfZGFfYnVmX2RvbmUoeGZzX2RhYnVmX3QgKmRhYnVmKTsKIHZvaWQgeGZzX2RhX2xvZ19idWYoc3RydWN0IHhmc190cmFucyAqdHAsIHhmc19kYWJ1Zl90ICpkYWJ1ZiwgdWludCBmaXJzdCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCA2M2FiZGMyLi42ODFiZTVjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC0xODAsOSArMTgwLDEwIEBACiAJCWdvdG8gZXJyb3IwOwogCX0KIAotCWlmIChWTl9DQUNIRUQodHZwKSAhPSAwKQotCQl4ZnNfaW52YWxfY2FjaGVkX3BhZ2VzKFhGU19JVE9WKHRpcCksICYodGlwLT5pX2lvY29yZSksCi0JCQkJCQkoeGZzX29mZl90KTAsIDAsIDApOworCWlmIChWTl9DQUNIRUQodHZwKSAhPSAwKSB7CisJCXhmc19pbnZhbF9jYWNoZWRfdHJhY2UoJnRpcC0+aV9pb2NvcmUsIDAsIC0xLCAwLCAtMSk7CisJCVZPUF9GTFVTSElOVkFMX1BBR0VTKHR2cCwgMCwgLTEsIEZJX1JFTUFQRl9MT0NLRUQpOworCX0KIAogCS8qIFZlcmlmeSBPX0RJUkVDVCBmb3IgZnRtcCAqLwogCWlmIChWTl9DQUNIRUQodHZwKSAhPSAwKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfZGF0YS5jIGIvZnMveGZzL3hmc19kaXIyX2RhdGEuYwppbmRleCBkYjk4ODdhLi5hMGFhMGU0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfZGF0YS5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogLyoKICAqIFJlbW92ZSBhIGJlc3RmcmVlIGVudHJ5IGZyb20gdGhlIHRhYmxlLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2RpcjJfZGF0YV9mcmVlcmVtb3ZlKAogCXhmc19kaXIyX2RhdGFfdAkJKmQsCQkvKiBkYXRhIGJsb2NrIHBvaW50ZXIgKi8KIAl4ZnNfZGlyMl9kYXRhX2ZyZWVfdAkqZGZwLAkJLyogYmVzdGZyZWUgZW50cnkgcG9pbnRlciAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2RhdGEuaCBiL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmgKaW5kZXggM2YwMjI5NC4uNDc2Y2FjOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2RhdGEuaAorKysgYi9mcy94ZnMveGZzX2RpcjJfZGF0YS5oCkBAIC0xOTMsMTAgKzE5Myw2IEBACiAJCQkJIHhmc19kaXIyX2RhdGFfdW51c2VkX3QgKmR1cCwgaW50ICpsb2doZWFkKTsKIAogZXh0ZXJuIHZvaWQKLQl4ZnNfZGlyMl9kYXRhX2ZyZWVyZW1vdmUoeGZzX2RpcjJfZGF0YV90ICpkLAotCQkJCSB4ZnNfZGlyMl9kYXRhX2ZyZWVfdCAqZGZwLCBpbnQgKmxvZ2hlYWQpOwotCi1leHRlcm4gdm9pZAogCXhmc19kaXIyX2RhdGFfZnJlZXNjYW4oc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19kaXIyX2RhdGFfdCAqZCwKIAkJCSAgICAgICBpbnQgKmxvZ2hlYWQsIGNoYXIgKmFlbmRwKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKaW5kZXggMjYyZDFlOC4uMDU2ZjUyOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCkBAIC03Nyw2ICs3NywxMCBAQAogI2VuZGlmCiBzdGF0aWMgaW50IHhmc19kaXIyX2xlYWZfbG9va3VwX2ludCh4ZnNfZGFfYXJnc190ICphcmdzLCB4ZnNfZGFidWZfdCAqKmxicHAsCiAJCQkJICAgIGludCAqaW5kZXhwLCB4ZnNfZGFidWZfdCAqKmRicHApOworc3RhdGljIHZvaWQgeGZzX2RpcjJfbGVhZl9sb2dfYmVzdHMoc3RydWN0IHhmc190cmFucyAqdHAsIHN0cnVjdCB4ZnNfZGFidWYgKmJwLAorCQkJCSAgICBpbnQgZmlyc3QsIGludCBsYXN0KTsKK3N0YXRpYyB2b2lkIHhmc19kaXIyX2xlYWZfbG9nX3RhaWwoc3RydWN0IHhmc190cmFucyAqdHAsIHN0cnVjdCB4ZnNfZGFidWYgKmJwKTsKKwogCiAvKgogICogQ29udmVydCBhIGJsb2NrIGZvcm0gZGlyZWN0b3J5IHRvIGEgbGVhZiBmb3JtIGRpcmVjdG9yeS4KQEAgLTEyMTQsNyArMTIxOCw3IEBACiAvKgogICogTG9nIHRoZSBiZXN0cyBlbnRyaWVzIGluZGljYXRlZCBmcm9tIGEgbGVhZjEgYmxvY2suCiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiB4ZnNfZGlyMl9sZWFmX2xvZ19iZXN0cygKIAl4ZnNfdHJhbnNfdAkJKnRwLAkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCXhmc19kYWJ1Zl90CQkqYnAsCQkvKiBsZWFmIGJ1ZmZlciAqLwpAQCAtMTI3OCw3ICsxMjgyLDcgQEAKIC8qCiAgKiBMb2cgdGhlIHRhaWwgb2YgdGhlIGxlYWYxIGJsb2NrLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2RpcjJfbGVhZl9sb2dfdGFpbCgKIAl4ZnNfdHJhbnNfdAkJKnRwLAkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCXhmc19kYWJ1Zl90CQkqYnApCQkvKiBsZWFmIGJ1ZmZlciAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2xlYWYuaCBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmgKaW5kZXggN2YyMGVlZS4uMzMwM2NkNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2xlYWYuaAorKysgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5oCkBAIC0zMzAsMTUgKzMzMCw4IEBACiAJCQkgICAgICAgaW50IGZpcnN0LCBpbnQgbGFzdCk7CiAKIGV4dGVybiB2b2lkCi0JeGZzX2RpcjJfbGVhZl9sb2dfYmVzdHMoc3RydWN0IHhmc190cmFucyAqdHAsIHN0cnVjdCB4ZnNfZGFidWYgKmJwLAotCQkJCWludCBmaXJzdCwgaW50IGxhc3QpOwotCi1leHRlcm4gdm9pZAogCXhmc19kaXIyX2xlYWZfbG9nX2hlYWRlcihzdHJ1Y3QgeGZzX3RyYW5zICp0cCwgc3RydWN0IHhmc19kYWJ1ZiAqYnApOwogCi1leHRlcm4gdm9pZAotCXhmc19kaXIyX2xlYWZfbG9nX3RhaWwoc3RydWN0IHhmc190cmFucyAqdHAsIHN0cnVjdCB4ZnNfZGFidWYgKmJwKTsKLQogZXh0ZXJuIGludAogCXhmc19kaXIyX2xlYWZfbG9va3VwKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncyk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfZGlyX2xlYWYuYwppbmRleCA2MTcwMThkLi5jMmVhNjE3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Rpcl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19kaXJfbGVhZi5jCkBAIC05MSw2ICs5MSwxMCBAQAogCQkJCQkgIGludCAqbnVtYmVyX2VudHJpZXNfaW5fYmxrMSwKIAkJCQkJICBpbnQgKm51bWJlcl9uYW1lYnl0ZXNfaW5fYmxrMSk7CiAKK1NUQVRJQyBpbnQgeGZzX2Rpcl9sZWFmX2NyZWF0ZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCisJCQkJeGZzX2RhYmxrX3Qgd2hpY2hfYmxvY2ssCisJCQkJc3RydWN0IHhmc19kYWJ1ZiAqKmJwcCk7CisKIC8qCiAgKiBVdGlsaXR5IHJvdXRpbmVzLgogICovCkBAIC03ODEsNyArNzg1LDcgQEAKICAqIENyZWF0ZSB0aGUgaW5pdGlhbCBjb250ZW50cyBvZiBhIGxlYWYgZGlyZWN0b3J5CiAgKiBvciBhIGxlYWYgaW4gYSBub2RlIGRpcmVjdG9yeS4KICAqLwotaW50CitTVEFUSUMgaW50CiB4ZnNfZGlyX2xlYWZfY3JlYXRlKHhmc19kYV9hcmdzX3QgKmFyZ3MsIHhmc19kYWJsa190IGJsa25vLCB4ZnNfZGFidWZfdCAqKmJwcCkKIHsKIAl4ZnNfZGlyX2xlYWZibG9ja190ICpsZWFmOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXJfbGVhZi5oIGIvZnMveGZzL3hmc19kaXJfbGVhZi5oCmluZGV4IDAwZDY4ZDMuLmRkNDIzY2UgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyX2xlYWYuaAorKysgYi9mcy94ZnMveGZzX2Rpcl9sZWFmLmgKQEAgLTIwMiw4ICsyMDIsNiBAQAogLyoKICAqIFJvdXRpbmVzIHVzZWQgZm9yIGdyb3dpbmcgdGhlIEJ0cmVlLgogICovCi1pbnQJeGZzX2Rpcl9sZWFmX2NyZWF0ZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIHhmc19kYWJsa190IHdoaWNoX2Jsb2NrLAotCQkJCSAgIHN0cnVjdCB4ZnNfZGFidWYgKipicHApOwogaW50CXhmc19kaXJfbGVhZl9zcGxpdChzdHJ1Y3QgeGZzX2RhX3N0YXRlICpzdGF0ZSwKIAkJCQkgIHN0cnVjdCB4ZnNfZGFfc3RhdGVfYmxrICpvbGRibGssCiAJCQkJICBzdHJ1Y3QgeGZzX2RhX3N0YXRlX2JsayAqbmV3YmxrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZG1hcGkuaCBiL2ZzL3hmcy94ZnNfZG1hcGkuaAppbmRleCA1NWFlM2U2Li41NWMxN2FkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RtYXBpLmgKKysrIGIvZnMveGZzL3hmc19kbWFwaS5oCkBAIC0xNjYsMjcgKzE2NiwzMiBAQAogI2RlZmluZSBETV9GTEFHU19OREVMQVkJCTB4MDAxCS8qIHJldHVybiBFQUdBSU4gYWZ0ZXIgZG1fcGVuZGluZygpICovCiAjZGVmaW5lIERNX0ZMQUdTX1VOV0FOVEVECTB4MDAyCS8qIGV2ZW50IG5vdCBpbiBmc3lzIGRtX2V2ZW50c2V0X3QgKi8KICNkZWZpbmUgRE1fRkxBR1NfSVNFTQkJMHgwMDQJLyogdGhyZWFkIGhvbGRzIGlfc2VtICovCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw0LDIxKQotLyogaV9hbGxvY19zZW0gd2FzIGFkZGVkIGluIDIuNC4yMi1wcmUxICovCiAjZGVmaW5lIERNX0ZMQUdTX0lBTExPQ1NFTV9SRAkweDAxMAkvKiB0aHJlYWQgaG9sZHMgaV9hbGxvY19zZW0gcmQgKi8KICNkZWZpbmUgRE1fRkxBR1NfSUFMTE9DU0VNX1dSCTB4MDIwCS8qIHRocmVhZCBob2xkcyBpX2FsbG9jX3NlbSB3ciAqLwotI2VuZGlmCi0jZW5kaWYKIAogLyoKICAqCUJhc2VkIG9uIElPX0lTRElSRUNULCBkZWNpZGUgd2hpY2ggaV8gZmxhZyBpcyBzZXQuCiAgKi8KLSNpZmRlZiBETV9GTEFHU19JQUxMT0NTRU1fUkQKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMCkKKyNkZWZpbmUgRE1fU0VNX0ZMQUdfUkQoaW9mbGFncykgKCgoaW9mbGFncykgJiBJT19JU0RJUkVDVCkgPyBcCisJCQkgICAgICBETV9GTEFHU19JU0VNIDogMCkKKyNkZWZpbmUgRE1fU0VNX0ZMQUdfV1IJKERNX0ZMQUdTX0lBTExPQ1NFTV9XUiB8IERNX0ZMQUdTX0lTRU0pCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkpICYmIFwKKyAgICAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwyMikpCiAjZGVmaW5lIERNX1NFTV9GTEFHX1JEKGlvZmxhZ3MpICgoKGlvZmxhZ3MpICYgSU9fSVNESVJFQ1QpID8gXAogCQkJICAgICAgRE1fRkxBR1NfSUFMTE9DU0VNX1JEIDogRE1fRkxBR1NfSVNFTSkKICNkZWZpbmUgRE1fU0VNX0ZMQUdfV1IJKERNX0ZMQUdTX0lBTExPQ1NFTV9XUiB8IERNX0ZMQUdTX0lTRU0pCi0jZWxzZQorI2VuZGlmCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw0LDIxKQogI2RlZmluZSBETV9TRU1fRkxBR19SRChpb2ZsYWdzKSAoKChpb2ZsYWdzKSAmIElPX0lTRElSRUNUKSA/IFwKIAkJCSAgICAgIDAgOiBETV9GTEFHU19JU0VNKQogI2RlZmluZSBETV9TRU1fRkxBR19XUgkoRE1fRkxBR1NfSVNFTSkKICNlbmRpZgogCisKIC8qCiAgKglNYWNyb3MgdG8gdHVybiBjYWxsZXIgc3BlY2lmaWVkIGRlbGF5L2Jsb2NrIGZsYWdzIGludG8KICAqCWRtX3NlbmRfeHh4eF9ldmVudCBmbGFnIERNX0ZMQUdTX05ERUxBWS4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZXJyb3IuYyBiL2ZzL3hmcy94ZnNfZXJyb3IuYwppbmRleCBiYmUxZGVhLi5kY2QzZmRkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Vycm9yLmMKKysrIGIvZnMveGZzL3hmc19lcnJvci5jCkBAIC0yODAsNyArMjgwLDcgQEAKIAl9CiB9CiAKLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfaGV4X2R1bXAodm9pZCAqcCwgaW50IGxlbmd0aCkKIHsKIAlfX3VpbnQ4X3QgKnVpcCA9IChfX3VpbnQ4X3QqKXA7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Vycm9yLmggYi9mcy94ZnMveGZzX2Vycm9yLmgKaW5kZXggNmJjMDUzNS4uNTJlZTJiOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19lcnJvci5oCisrKyBiL2ZzL3hmcy94ZnNfZXJyb3IuaApAQCAtNzMsOSArNzMsNiBAQAogCWludAkJbGluZW51bSwKIAlpbnN0X3QJCSpyYSk7CiAKLWV4dGVybiB2b2lkCi14ZnNfaGV4X2R1bXAodm9pZCAqcCwgaW50IGxlbmd0aCk7Ci0KICNkZWZpbmUJWEZTX0VSUk9SX1JFUE9SVChlLCBsdmwsIG1wKQlcCiAJeGZzX2Vycm9yX3JlcG9ydChlLCBsdmwsIG1wLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fcmV0dXJuX2FkZHJlc3MpCiAjZGVmaW5lCVhGU19DT1JSVVBUSU9OX0VSUk9SKGUsIGx2bCwgbXAsIG1lbSkJXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKaW5kZXggNWVhZmQ1Yi4uZGI3Y2JkMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCkBAIC01OSw2ICs1OSwxOCBAQAogU1RBVElDIHZvaWQJeGZzX2VmZF9pdGVtX2Fib3J0KHhmc19lZmRfbG9nX2l0ZW1fdCAqKTsKIAogCit2b2lkCit4ZnNfZWZpX2l0ZW1fZnJlZSh4ZnNfZWZpX2xvZ19pdGVtX3QgKmVmaXApCit7CisJaW50IG5leHRzID0gZWZpcC0+ZWZpX2Zvcm1hdC5lZmlfbmV4dGVudHM7CisKKwlpZiAobmV4dHMgPiBYRlNfRUZJX01BWF9GQVNUX0VYVEVOVFMpIHsKKwkJa21lbV9mcmVlKGVmaXAsIHNpemVvZih4ZnNfZWZpX2xvZ19pdGVtX3QpICsKKwkJCQkobmV4dHMgLSAxKSAqIHNpemVvZih4ZnNfZXh0ZW50X3QpKTsKKwl9IGVsc2UgeworCQlrbWVtX3pvbmVfZnJlZSh4ZnNfZWZpX3pvbmUsIGVmaXApOworCX0KK30KIAogLyoKICAqIFRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGlvdmVjcyBuZWVkZWQgdG8gbG9nIHRoZSBnaXZlbiBlZmkgaXRlbS4KQEAgLTEyMCw4ICsxMzIsNiBAQAogU1RBVElDIHZvaWQKIHhmc19lZmlfaXRlbV91bnBpbih4ZnNfZWZpX2xvZ19pdGVtX3QgKmVmaXAsIGludCBzdGFsZSkKIHsKLQlpbnQJCW5leHRzOwotCWludAkJc2l6ZTsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJU1BMREVDTChzKTsKIApAQCAtMTMyLDIxICsxNDIsMTEgQEAKIAkJICogeGZzX3RyYW5zX2RlbGV0ZV9haWwoKSBkcm9wcyB0aGUgQUlMIGxvY2suCiAJCSAqLwogCQl4ZnNfdHJhbnNfZGVsZXRlX2FpbChtcCwgKHhmc19sb2dfaXRlbV90ICopZWZpcCwgcyk7Ci0KLQkJbmV4dHMgPSBlZmlwLT5lZmlfZm9ybWF0LmVmaV9uZXh0ZW50czsKLQkJaWYgKG5leHRzID4gWEZTX0VGSV9NQVhfRkFTVF9FWFRFTlRTKSB7Ci0JCQlzaXplID0gc2l6ZW9mKHhmc19lZmlfbG9nX2l0ZW1fdCk7Ci0JCQlzaXplICs9IChuZXh0cyAtIDEpICogc2l6ZW9mKHhmc19leHRlbnRfdCk7Ci0JCQlrbWVtX2ZyZWUoZWZpcCwgc2l6ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlrbWVtX3pvbmVfZnJlZSh4ZnNfZWZpX3pvbmUsIGVmaXApOwotCQl9CisJCXhmc19lZmlfaXRlbV9mcmVlKGVmaXApOwogCX0gZWxzZSB7CiAJCWVmaXAtPmVmaV9mbGFncyB8PSBYRlNfRUZJX0NPTU1JVFRFRDsKIAkJQUlMX1VOTE9DSyhtcCwgcyk7CiAJfQotCi0JcmV0dXJuOwogfQogCiAvKgpAQCAtMTU5LDggKzE1OSw2IEBACiBTVEFUSUMgdm9pZAogeGZzX2VmaV9pdGVtX3VucGluX3JlbW92ZSh4ZnNfZWZpX2xvZ19pdGVtX3QgKmVmaXAsIHhmc190cmFuc190ICp0cCkKIHsKLQlpbnQJCW5leHRzOwotCWludAkJc2l6ZTsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJeGZzX2xvZ19pdGVtX2Rlc2NfdAkqbGlkcDsKIAlTUExERUNMKHMpOwpAQCAtMTc4LDIzICsxNzYsMTEgQEAKIAkJICogeGZzX3RyYW5zX2RlbGV0ZV9haWwoKSBkcm9wcyB0aGUgQUlMIGxvY2suCiAJCSAqLwogCQl4ZnNfdHJhbnNfZGVsZXRlX2FpbChtcCwgKHhmc19sb2dfaXRlbV90ICopZWZpcCwgcyk7Ci0JCS8qCi0JCSAqIG5vdyBmcmVlIHRoZSBpdGVtIGl0c2VsZgotCQkgKi8KLQkJbmV4dHMgPSBlZmlwLT5lZmlfZm9ybWF0LmVmaV9uZXh0ZW50czsKLQkJaWYgKG5leHRzID4gWEZTX0VGSV9NQVhfRkFTVF9FWFRFTlRTKSB7Ci0JCQlzaXplID0gc2l6ZW9mKHhmc19lZmlfbG9nX2l0ZW1fdCk7Ci0JCQlzaXplICs9IChuZXh0cyAtIDEpICogc2l6ZW9mKHhmc19leHRlbnRfdCk7Ci0JCQlrbWVtX2ZyZWUoZWZpcCwgc2l6ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlrbWVtX3pvbmVfZnJlZSh4ZnNfZWZpX3pvbmUsIGVmaXApOwotCQl9CisJCXhmc19lZmlfaXRlbV9mcmVlKGVmaXApOwogCX0gZWxzZSB7CiAJCWVmaXAtPmVmaV9mbGFncyB8PSBYRlNfRUZJX0NPTU1JVFRFRDsKIAkJQUlMX1VOTE9DSyhtcCwgcyk7CiAJfQotCi0JcmV0dXJuOwogfQogCiAvKgpAQCAtMjQ1LDE4ICsyMzEsNyBAQAogU1RBVElDIHZvaWQKIHhmc19lZmlfaXRlbV9hYm9ydCh4ZnNfZWZpX2xvZ19pdGVtX3QgKmVmaXApCiB7Ci0JaW50CW5leHRzOwotCWludAlzaXplOwotCi0JbmV4dHMgPSBlZmlwLT5lZmlfZm9ybWF0LmVmaV9uZXh0ZW50czsKLQlpZiAobmV4dHMgPiBYRlNfRUZJX01BWF9GQVNUX0VYVEVOVFMpIHsKLQkJc2l6ZSA9IHNpemVvZih4ZnNfZWZpX2xvZ19pdGVtX3QpOwotCQlzaXplICs9IChuZXh0cyAtIDEpICogc2l6ZW9mKHhmc19leHRlbnRfdCk7Ci0JCWttZW1fZnJlZShlZmlwLCBzaXplKTsKLQl9IGVsc2UgewotCQlrbWVtX3pvbmVfZnJlZSh4ZnNfZWZpX3pvbmUsIGVmaXApOwotCX0KLQlyZXR1cm47CisJeGZzX2VmaV9pdGVtX2ZyZWUoZWZpcCk7CiB9CiAKIC8qCkBAIC0yODgsNyArMjYzLDcgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBvcHMgdmVjdG9yIHNoYXJlZCBieSBhbGwgZWZpIGxvZyBpdGVtcy4KICAqLwotc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfZWZpX2l0ZW1fb3BzID0geworU1RBVElDIHN0cnVjdCB4ZnNfaXRlbV9vcHMgeGZzX2VmaV9pdGVtX29wcyA9IHsKIAkuaW9wX3NpemUJPSAodWludCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19lZmlfaXRlbV9zaXplLAogCS5pb3BfZm9ybWF0CT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbG9nX2lvdmVjX3QqKSkKIAkJCQkJeGZzX2VmaV9pdGVtX2Zvcm1hdCwKQEAgLTM1NSw4ICszMzAsNiBAQAogewogCXhmc19tb3VudF90CSptcDsKIAlpbnQJCWV4dGVudHNfbGVmdDsKLQl1aW50CQlzaXplOwotCWludAkJbmV4dHM7CiAJU1BMREVDTChzKTsKIAogCW1wID0gZWZpcC0+ZWZpX2l0ZW0ubGlfbW91bnRwOwpAQCAtMzcyLDIwICszNDUsMTAgQEAKIAkJICogeGZzX3RyYW5zX2RlbGV0ZV9haWwoKSBkcm9wcyB0aGUgQUlMIGxvY2suCiAJCSAqLwogCQl4ZnNfdHJhbnNfZGVsZXRlX2FpbChtcCwgKHhmc19sb2dfaXRlbV90ICopZWZpcCwgcyk7CisJCXhmc19lZmlfaXRlbV9mcmVlKGVmaXApOwogCX0gZWxzZSB7CiAJCUFJTF9VTkxPQ0sobXAsIHMpOwogCX0KLQotCWlmIChleHRlbnRzX2xlZnQgPT0gMCkgewotCQluZXh0cyA9IGVmaXAtPmVmaV9mb3JtYXQuZWZpX25leHRlbnRzOwotCQlpZiAobmV4dHMgPiBYRlNfRUZJX01BWF9GQVNUX0VYVEVOVFMpIHsKLQkJCXNpemUgPSBzaXplb2YoeGZzX2VmaV9sb2dfaXRlbV90KTsKLQkJCXNpemUgKz0gKG5leHRzIC0gMSkgKiBzaXplb2YoeGZzX2V4dGVudF90KTsKLQkJCWttZW1fZnJlZShlZmlwLCBzaXplKTsKLQkJfSBlbHNlIHsKLQkJCWttZW1fem9uZV9mcmVlKHhmc19lZmlfem9uZSwgZWZpcCk7Ci0JCX0KLQl9CiB9CiAKIC8qCkBAIC0zOTgsOCArMzYxLDYgQEAKIHhmc19lZmlfY2FuY2VsKAogCXhmc19lZmlfbG9nX2l0ZW1fdAkqZWZpcCkKIHsKLQlpbnQJCW5leHRzOwotCWludAkJc2l6ZTsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJU1BMREVDTChzKTsKIApAQCAtNDEwLDI2ICszNzEsMjUgQEAKIAkJICogeGZzX3RyYW5zX2RlbGV0ZV9haWwoKSBkcm9wcyB0aGUgQUlMIGxvY2suCiAJCSAqLwogCQl4ZnNfdHJhbnNfZGVsZXRlX2FpbChtcCwgKHhmc19sb2dfaXRlbV90ICopZWZpcCwgcyk7Ci0KLQkJbmV4dHMgPSBlZmlwLT5lZmlfZm9ybWF0LmVmaV9uZXh0ZW50czsKLQkJaWYgKG5leHRzID4gWEZTX0VGSV9NQVhfRkFTVF9FWFRFTlRTKSB7Ci0JCQlzaXplID0gc2l6ZW9mKHhmc19lZmlfbG9nX2l0ZW1fdCk7Ci0JCQlzaXplICs9IChuZXh0cyAtIDEpICogc2l6ZW9mKHhmc19leHRlbnRfdCk7Ci0JCQlrbWVtX2ZyZWUoZWZpcCwgc2l6ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlrbWVtX3pvbmVfZnJlZSh4ZnNfZWZpX3pvbmUsIGVmaXApOwotCQl9CisJCXhmc19lZmlfaXRlbV9mcmVlKGVmaXApOwogCX0gZWxzZSB7CiAJCWVmaXAtPmVmaV9mbGFncyB8PSBYRlNfRUZJX0NBTkNFTEVEOwogCQlBSUxfVU5MT0NLKG1wLCBzKTsKIAl9Ci0KLQlyZXR1cm47CiB9CiAKK1NUQVRJQyB2b2lkCit4ZnNfZWZkX2l0ZW1fZnJlZSh4ZnNfZWZkX2xvZ19pdGVtX3QgKmVmZHApCit7CisJaW50IG5leHRzID0gZWZkcC0+ZWZkX2Zvcm1hdC5lZmRfbmV4dGVudHM7CiAKLQotCisJaWYgKG5leHRzID4gWEZTX0VGRF9NQVhfRkFTVF9FWFRFTlRTKSB7CisJCWttZW1fZnJlZShlZmRwLCBzaXplb2YoeGZzX2VmZF9sb2dfaXRlbV90KSArCisJCQkJKG5leHRzIC0gMSkgKiBzaXplb2YoeGZzX2V4dGVudF90KSk7CisJfSBlbHNlIHsKKwkJa21lbV96b25lX2ZyZWUoeGZzX2VmZF96b25lLCBlZmRwKTsKKwl9Cit9CiAKIC8qCiAgKiBUaGlzIHJldHVybnMgdGhlIG51bWJlciBvZiBpb3ZlY3MgbmVlZGVkIHRvIGxvZyB0aGUgZ2l2ZW4gZWZkIGl0ZW0uCkBAIC01MzMsOSArNDkzLDYgQEAKIFNUQVRJQyB4ZnNfbHNuX3QKIHhmc19lZmRfaXRlbV9jb21taXR0ZWQoeGZzX2VmZF9sb2dfaXRlbV90ICplZmRwLCB4ZnNfbHNuX3QgbHNuKQogewotCXVpbnQJc2l6ZTsKLQlpbnQJbmV4dHM7Ci0KIAkvKgogCSAqIElmIHdlIGdvdCBhIGxvZyBJL08gZXJyb3IsIGl0J3MgYWx3YXlzIHRoZSBjYXNlIHRoYXQgdGhlIExSIHdpdGggdGhlCiAJICogRUZJIGdvdCB1bnBpbm5lZCBhbmQgZnJlZWQgYmVmb3JlIHRoZSBFRkQgZ290IGFib3J0ZWQuCkBAIC01NDMsMTUgKzUwMCw3IEBACiAJaWYgKChlZmRwLT5lZmRfaXRlbS5saV9mbGFncyAmIFhGU19MSV9BQk9SVEVEKSA9PSAwKQogCQl4ZnNfZWZpX3JlbGVhc2UoZWZkcC0+ZWZkX2VmaXAsIGVmZHAtPmVmZF9mb3JtYXQuZWZkX25leHRlbnRzKTsKIAotCW5leHRzID0gZWZkcC0+ZWZkX2Zvcm1hdC5lZmRfbmV4dGVudHM7Ci0JaWYgKG5leHRzID4gWEZTX0VGRF9NQVhfRkFTVF9FWFRFTlRTKSB7Ci0JCXNpemUgPSBzaXplb2YoeGZzX2VmZF9sb2dfaXRlbV90KTsKLQkJc2l6ZSArPSAobmV4dHMgLSAxKSAqIHNpemVvZih4ZnNfZXh0ZW50X3QpOwotCQlrbWVtX2ZyZWUoZWZkcCwgc2l6ZSk7Ci0JfSBlbHNlIHsKLQkJa21lbV96b25lX2ZyZWUoeGZzX2VmZF96b25lLCBlZmRwKTsKLQl9Ci0KKwl4ZnNfZWZkX2l0ZW1fZnJlZShlZmRwKTsKIAlyZXR1cm4gKHhmc19sc25fdCktMTsKIH0KIApAQCAtNTY1LDkgKzUxNCw2IEBACiBTVEFUSUMgdm9pZAogeGZzX2VmZF9pdGVtX2Fib3J0KHhmc19lZmRfbG9nX2l0ZW1fdCAqZWZkcCkKIHsKLQlpbnQJbmV4dHM7Ci0JaW50CXNpemU7Ci0KIAkvKgogCSAqIElmIHdlIGdvdCBhIGxvZyBJL08gZXJyb3IsIGl0J3MgYWx3YXlzIHRoZSBjYXNlIHRoYXQgdGhlIExSIHdpdGggdGhlCiAJICogRUZJIGdvdCB1bnBpbm5lZCBhbmQgZnJlZWQgYmVmb3JlIHRoZSBFRkQgZ290IGFib3J0ZWQuIFNvIGRvbid0CkBAIC01NzYsMTUgKzUyMiw3IEBACiAJaWYgKChlZmRwLT5lZmRfaXRlbS5saV9mbGFncyAmIFhGU19MSV9BQk9SVEVEKSA9PSAwKQogCQl4ZnNfZWZpX2NhbmNlbChlZmRwLT5lZmRfZWZpcCk7CiAKLQluZXh0cyA9IGVmZHAtPmVmZF9mb3JtYXQuZWZkX25leHRlbnRzOwotCWlmIChuZXh0cyA+IFhGU19FRkRfTUFYX0ZBU1RfRVhURU5UUykgewotCQlzaXplID0gc2l6ZW9mKHhmc19lZmRfbG9nX2l0ZW1fdCk7Ci0JCXNpemUgKz0gKG5leHRzIC0gMSkgKiBzaXplb2YoeGZzX2V4dGVudF90KTsKLQkJa21lbV9mcmVlKGVmZHAsIHNpemUpOwotCX0gZWxzZSB7Ci0JCWttZW1fem9uZV9mcmVlKHhmc19lZmRfem9uZSwgZWZkcCk7Ci0JfQotCXJldHVybjsKKwl4ZnNfZWZkX2l0ZW1fZnJlZShlZmRwKTsKIH0KIAogLyoKQEAgLTYxNSw3ICs1NTMsNyBAQAogLyoKICAqIFRoaXMgaXMgdGhlIG9wcyB2ZWN0b3Igc2hhcmVkIGJ5IGFsbCBlZmQgbG9nIGl0ZW1zLgogICovCi1zdHJ1Y3QgeGZzX2l0ZW1fb3BzIHhmc19lZmRfaXRlbV9vcHMgPSB7CitTVEFUSUMgc3RydWN0IHhmc19pdGVtX29wcyB4ZnNfZWZkX2l0ZW1fb3BzID0gewogCS5pb3Bfc2l6ZQk9ICh1aW50KCopKHhmc19sb2dfaXRlbV90KikpeGZzX2VmZF9pdGVtX3NpemUsCiAJLmlvcF9mb3JtYXQJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sb2dfaW92ZWNfdCopKQogCQkJCQl4ZnNfZWZkX2l0ZW1fZm9ybWF0LApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uaCBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmgKaW5kZXggNzEyMmQ2MS4uZDQzM2JhYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uaAorKysgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5oCkBAIC0xMTgsNiArMTE4LDggQEAKIHhmc19lZmRfbG9nX2l0ZW1fdAkqeGZzX2VmZF9pbml0KHN0cnVjdCB4ZnNfbW91bnQgKiwgeGZzX2VmaV9sb2dfaXRlbV90ICosCiAJCQkJICAgICAgdWludCk7CiAKK3ZvaWQJCQl4ZnNfZWZpX2l0ZW1fZnJlZSh4ZnNfZWZpX2xvZ19pdGVtX3QgKik7CisKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgkvKiBfX1hGU19FWFRGUkVFX0lURU1fSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzLmggYi9mcy94ZnMveGZzX2ZzLmgKaW5kZXggNmVlODQ0My4uMDk1YWYwYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19mcy5oCisrKyBiL2ZzL3hmcy94ZnNfZnMuaApAQCAtNjAsNyArNjAsOCBAQAogCV9fdTMyCQlmc3hfeGZsYWdzOwkvKiB4ZmxhZ3MgZmllbGQgdmFsdWUgKGdldC9zZXQpICovCiAJX191MzIJCWZzeF9leHRzaXplOwkvKiBleHRzaXplIGZpZWxkIHZhbHVlIChnZXQvc2V0KSovCiAJX191MzIJCWZzeF9uZXh0ZW50czsJLyogbmV4dGVudHMgZmllbGQgdmFsdWUgKGdldCkJKi8KLQl1bnNpZ25lZCBjaGFyCWZzeF9wYWRbMTZdOworCV9fdTMyCQlmc3hfcHJvamlkOwkvKiBwcm9qZWN0IGlkZW50aWZpZXIgKGdldC9zZXQpICovCisJdW5zaWduZWQgY2hhcglmc3hfcGFkWzEyXTsKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc29wcy5jIGIvZnMveGZzL3hmc19mc29wcy5jCmluZGV4IDIxMjEzMDUuLmNhNTM1ZDYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnNvcHMuYworKysgYi9mcy94ZnMveGZzX2Zzb3BzLmMKQEAgLTU1OSwzMiArNTU5LDYgQEAKIAlyZXR1cm4oMCk7CiB9CiAKLXZvaWQKLXhmc19mc19sb2dfZHVtbXkoeGZzX21vdW50X3QgKm1wKQotewotCXhmc190cmFuc190ICp0cDsKLQl4ZnNfaW5vZGVfdCAqaXA7Ci0KLQotCXRwID0gX3hmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX0RVTU1ZMSk7Ci0JYXRvbWljX2luYygmbXAtPm1fYWN0aXZlX3RyYW5zKTsKLQlpZiAoeGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIFhGU19JQ0hBTkdFX0xPR19SRVMobXApLCAwLCAwLCAwKSkgewotCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCWlwID0gbXAtPm1fcm9vdGlwOwotCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCi0JeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXhmc190cmFuc19paG9sZCh0cCwgaXApOwotCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKLQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwotCXhmc190cmFuc19jb21taXQodHAsIDAsIE5VTEwpOwotCi0JeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLX0KLQogaW50CiB4ZnNfZnNfZ29pbmdkb3duKAogCXhmc19tb3VudF90CSptcCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmggYi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5oCmluZGV4IDgwM2M0ZDEuLjQ0YmUxODggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuaApAQCAtMTAwLDkgKzEwMCwxMyBAQAogI2VuZGlmCiAjaWYgWEZTX1dBTlRfRlVOQ1MgfHwgKFhGU19XQU5UX1NQQUNFICYmIFhGU1NPX1hGU19JTk9CVF9JU19GUkVFKQogaW50IHhmc19pbm9idF9pc19mcmVlKHhmc19pbm9idF9yZWNfdCAqcnAsIGludCBpKTsKLSNkZWZpbmUJWEZTX0lOT0JUX0lTX0ZSRUUocnAsaSkJeGZzX2lub2J0X2lzX2ZyZWUocnAsaSkKKyNkZWZpbmUJWEZTX0lOT0JUX0lTX0ZSRUUocnAsaSkJCXhmc19pbm9idF9pc19mcmVlKHJwLGkpCisjZGVmaW5lCVhGU19JTk9CVF9JU19GUkVFX0RJU0socnAsaSkJeGZzX2lub2J0X2lzX2ZyZWVfZGlzayhycCxpKQogI2Vsc2UKLSNkZWZpbmUJWEZTX0lOT0JUX0lTX0ZSRUUocnAsaSkJKCgocnApLT5pcl9mcmVlICYgWEZTX0lOT0JUX01BU0soaSkpICE9IDApCisjZGVmaW5lCVhGU19JTk9CVF9JU19GUkVFKHJwLGkpCVwKKwkoKChycCktPmlyX2ZyZWUgJiBYRlNfSU5PQlRfTUFTSyhpKSkgIT0gMCkKKyNkZWZpbmUgWEZTX0lOT0JUX0lTX0ZSRUVfRElTSyhycCxpKSBcCisJKChJTlRfR0VUKChycCktPmlyX2ZyZWUsIEFSQ0hfQ09OVkVSVCkgJiBYRlNfSU5PQlRfTUFTSyhpKSkgIT0gMCkKICNlbmRpZgogI2lmIFhGU19XQU5UX0ZVTkNTIHx8IChYRlNfV0FOVF9TUEFDRSAmJiBYRlNTT19YRlNfSU5PQlRfU0VUX0ZSRUUpCiB2b2lkIHhmc19pbm9idF9zZXRfZnJlZSh4ZnNfaW5vYnRfcmVjX3QgKnJwLCBpbnQgaSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggYmM4YzhjNy4uMzRiZGY1OSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMTQ2LDUxICsxNDYsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBjYWxsZWQgZnJvbSBid3JpdGUgb24geGZzIGlub2RlIGJ1ZmZlcnMKLSAqLwotdm9pZAoteGZzX2lub2JwX2J3Y2hlY2soeGZzX2J1Zl90ICpicCkKLXsKLQl4ZnNfbW91bnRfdAkqbXA7Ci0JaW50CQlpOwotCWludAkJajsKLQl4ZnNfZGlub2RlX3QJKmRpcDsKLQotCUFTU0VSVChYRlNfQlVGX0ZTUFJJVkFURTMoYnAsIHZvaWQgKikgIT0gTlVMTCk7Ci0KLQltcCA9IFhGU19CVUZfRlNQUklWQVRFMyhicCwgeGZzX21vdW50X3QgKik7Ci0KLQotCWogPSBtcC0+bV9pbm9kZV9jbHVzdGVyX3NpemUgPj4gbXAtPm1fc2Iuc2JfaW5vZGVsb2c7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSAgewotCQlkaXAgPSAoeGZzX2Rpbm9kZV90ICopIHhmc19idWZfb2Zmc2V0KGJwLAotCQkJCQkJaSAqIG1wLT5tX3NiLnNiX2lub2Rlc2l6ZSk7Ci0JCWlmIChJTlRfR0VUKGRpcC0+ZGlfY29yZS5kaV9tYWdpYywgQVJDSF9DT05WRVJUKSAhPSBYRlNfRElOT0RFX01BR0lDKSB7Ci0JCQljbW5fZXJyKENFX1dBUk4sCi0iQmFkIG1hZ2ljICMgMHgleCBpbiBYRlMgaW5vZGUgYnVmZmVyIDB4JUx4LCBzdGFydGluZyBibG9ja25vICVMZCwgb2Zmc2V0IDB4JXgiLAotCQkJCUlOVF9HRVQoZGlwLT5kaV9jb3JlLmRpX21hZ2ljLCBBUkNIX0NPTlZFUlQpLAotCQkJCShfX3VpbnQ2NF90KShfX3BzdW5zaWduZWRfdCkgYnAsCi0JCQkJKF9faW50NjRfdCkgWEZTX0JVRl9BRERSKGJwKSwKLQkJCQl4ZnNfYnVmX29mZnNldChicCwgaSAqIG1wLT5tX3NiLnNiX2lub2Rlc2l6ZSkpOwotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCi0JCQkJImNvcnJ1cHQsIHVubW91bnQgYW5kIHJ1biB4ZnNfcmVwYWlyIik7Ci0JCX0KLQkJaWYgKCFkaXAtPmRpX25leHRfdW5saW5rZWQpICB7Ci0JCQljbW5fZXJyKENFX1dBUk4sCi0iQmFkIG5leHRfdW5saW5rZWQgZmllbGQgKDApIGluIFhGUyBpbm9kZSBidWZmZXIgMHglcCwgc3RhcnRpbmcgYmxvY2tubyAlTGQsIG9mZnNldCAweCV4IiwKLQkJCQkoX191aW50NjRfdCkoX19wc3Vuc2lnbmVkX3QpIGJwLAotCQkJCShfX2ludDY0X3QpIFhGU19CVUZfQUREUihicCksCi0JCQkJeGZzX2J1Zl9vZmZzZXQoYnAsIGkgKiBtcC0+bV9zYi5zYl9pbm9kZXNpemUpKTsKLQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAotCQkJCSJjb3JydXB0LCB1bm1vdW50IGFuZCBydW4geGZzX3JlcGFpciIpOwotCQl9Ci0JfQotCi0JcmV0dXJuOwotfQotCi0vKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBtYXAgYW4gaW5vZGUgbnVtYmVyIHdpdGhpbiBhIGZpbGUKICAqIHN5c3RlbSB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG9uLWRpc2sgdmVyc2lvbiBvZiB0aGUKICAqIGlub2RlLiAgSXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZQpAQCAtMjAzLDcgKzE1OCw3IEBACiAgKiBVc2UgeGZzX2ltYXAoKSB0byBkZXRlcm1pbmUgdGhlIHNpemUgYW5kIGxvY2F0aW9uIG9mIHRoZQogICogYnVmZmVyIHRvIHJlYWQgZnJvbSBkaXNrLgogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19pbm90b2JwKAogCXhmc19tb3VudF90CSptcCwKIAl4ZnNfdHJhbnNfdAkqdHAsCkBAIC0xMjQ3LDI2ICsxMjAyLDMyIEBACiAJY2FzZSBTX0lGUkVHOgogCWNhc2UgU19JRkRJUjoKIAkJaWYgKHVubGlrZWx5KHBpcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19BTlkpKSB7Ci0JCQlpZiAocGlwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1JUSU5IRVJJVCkgewotCQkJCWlmICgobW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUikgewotCQkJCQlpcC0+aV9kLmRpX2ZsYWdzIHw9IFhGU19ESUZMQUdfUlRJTkhFUklUOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlwLT5pX2QuZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19SRUFMVElNRTsKKwkJCXVpbnQJZGlfZmxhZ3MgPSAwOworCisJCQlpZiAoKG1vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpIHsKKwkJCQlpZiAocGlwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1JUSU5IRVJJVCkKKwkJCQkJZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19SVElOSEVSSVQ7CisJCQl9IGVsc2UgeworCQkJCWlmIChwaXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfUlRJTkhFUklUKSB7CisJCQkJCWRpX2ZsYWdzIHw9IFhGU19ESUZMQUdfUkVBTFRJTUU7CiAJCQkJCWlwLT5pX2lvY29yZS5pb19mbGFncyB8PSBYRlNfSU9DT1JFX1JUOwogCQkJCX0KIAkJCX0KIAkJCWlmICgocGlwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX05PQVRJTUUpICYmCiAJCQkgICAgeGZzX2luaGVyaXRfbm9hdGltZSkKLQkJCQlpcC0+aV9kLmRpX2ZsYWdzIHw9IFhGU19ESUZMQUdfTk9BVElNRTsKKwkJCQlkaV9mbGFncyB8PSBYRlNfRElGTEFHX05PQVRJTUU7CiAJCQlpZiAoKHBpcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19OT0RVTVApICYmCiAJCQkgICAgeGZzX2luaGVyaXRfbm9kdW1wKQotCQkJCWlwLT5pX2QuZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19OT0RVTVA7CisJCQkJZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19OT0RVTVA7CiAJCQlpZiAoKHBpcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19TWU5DKSAmJgogCQkJICAgIHhmc19pbmhlcml0X3N5bmMpCi0JCQkJaXAtPmlfZC5kaV9mbGFncyB8PSBYRlNfRElGTEFHX1NZTkM7CisJCQkJZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19TWU5DOwogCQkJaWYgKChwaXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfTk9TWU1MSU5LUykgJiYKIAkJCSAgICB4ZnNfaW5oZXJpdF9ub3N5bWxpbmtzKQotCQkJCWlwLT5pX2QuZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19OT1NZTUxJTktTOworCQkJCWRpX2ZsYWdzIHw9IFhGU19ESUZMQUdfTk9TWU1MSU5LUzsKKwkJCWlmIChwaXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfUFJPSklOSEVSSVQpCisJCQkJZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19QUk9KSU5IRVJJVDsKKwkJCWlwLT5pX2QuZGlfZmxhZ3MgfD0gZGlfZmxhZ3M7CiAJCX0KIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIFNfSUZMTks6CkBAIC0yMTU2LDcgKzIxMTcsNyBAQAogCQkoaXAtPmlfdXBkYXRlX2NvcmUgPT0gMCkpOwogfQogCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2lmcmVlX2NsdXN0ZXIoCiAJeGZzX2lub2RlX3QJKmZyZWVfaXAsCiAJeGZzX3RyYW5zX3QJKnRwLApAQCAtMjg3NSw3ICsyODM2LDcgQEAKICAqIGJlIHN1YnNlcXVlbnRseSBwaW5uZWQgb25jZSBzb21lb25lIGlzIHdhaXRpbmcgZm9yIGl0IHRvIGJlCiAgKiB1bnBpbm5lZC4KICAqLwotdm9pZAorU1RBVElDIHZvaWQKIHhmc19pdW5waW5fd2FpdCgKIAl4ZnNfaW5vZGVfdAkqaXApCiB7CkBAIC0zNjAxLDEwNiArMzU2Miw0MiBAQAogCiAKIC8qCi0gKiBGbHVzaCBhbGwgaW5hY3RpdmUgaW5vZGVzIGluIG1wLiAgUmV0dXJuIHRydWUgaWYgbm8gdXNlciByZWZlcmVuY2VzCi0gKiB3ZXJlIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuCisgKiBGbHVzaCBhbGwgaW5hY3RpdmUgaW5vZGVzIGluIG1wLgogICovCi1pbnQKK3ZvaWQKIHhmc19pZmx1c2hfYWxsKAotCXhmc19tb3VudF90CSptcCwKLQlpbnQJCWZsYWcpCisJeGZzX21vdW50X3QJKm1wKQogewotCWludAkJYnVzeTsKLQlpbnQJCWRvbmU7Ci0JaW50CQlwdXJnZWQ7CiAJeGZzX2lub2RlX3QJKmlwOwotCXZtYXBfdAkJdm1hcDsKIAl2bm9kZV90CQkqdnA7CiAKLQlidXN5ID0gZG9uZSA9IDA7Ci0Jd2hpbGUgKCFkb25lKSB7Ci0JCXB1cmdlZCA9IDA7Ci0JCVhGU19NT1VOVF9JTE9DSyhtcCk7Ci0JCWlwID0gbXAtPm1faW5vZGVzOwotCQlpZiAoaXAgPT0gTlVMTCkgewotCQkJYnJlYWs7CisgYWdhaW46CisJWEZTX01PVU5UX0lMT0NLKG1wKTsKKwlpcCA9IG1wLT5tX2lub2RlczsKKwlpZiAoaXAgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlkbyB7CisJCS8qIE1ha2Ugc3VyZSB3ZSBza2lwIG1hcmtlcnMgaW5zZXJ0ZWQgYnkgc3luYyAqLworCQlpZiAoaXAtPmlfbW91bnQgPT0gTlVMTCkgeworCQkJaXAgPSBpcC0+aV9tbmV4dDsKKwkJCWNvbnRpbnVlOwogCQl9Ci0JCWRvIHsKLQkJCS8qIE1ha2Ugc3VyZSB3ZSBza2lwIG1hcmtlcnMgaW5zZXJ0ZWQgYnkgc3luYyAqLwotCQkJaWYgKGlwLT5pX21vdW50ID09IE5VTEwpIHsKLQkJCQlpcCA9IGlwLT5pX21uZXh0OwotCQkJCWNvbnRpbnVlOwotCQkJfQogCi0JCQkvKgotCQkJICogSXQncyB1cCB0byBvdXIgY2FsbGVyIHRvIHB1cmdlIHRoZSByb290Ci0JCQkgKiBhbmQgcXVvdGEgdm5vZGVzIGxhdGVyLgotCQkJICovCi0JCQl2cCA9IFhGU19JVE9WX05VTEwoaXApOwotCi0JCQlpZiAoIXZwKSB7Ci0JCQkJWEZTX01PVU5UX0lVTkxPQ0sobXApOwotCQkJCXhmc19maW5pc2hfcmVjbGFpbShpcCwgMCwgWEZTX0lGTFVTSF9BU1lOQyk7Ci0JCQkJcHVyZ2VkID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKHZuX2NvdW50KHZwKSAhPSAwKSB7Ci0JCQkJaWYgKHZuX2NvdW50KHZwKSA9PSAxICYmCi0JCQkJICAgIChpcCA9PSBtcC0+bV9yb290aXAgfHwKLQkJCQkgICAgIChtcC0+bV9xdW90YWluZm8gJiYKLQkJCQkgICAgICAoaXAtPmlfaW5vID09IG1wLT5tX3NiLnNiX3VxdW90aW5vIHx8Ci0JCQkJICAgICAgIGlwLT5pX2lubyA9PSBtcC0+bV9zYi5zYl9ncXVvdGlubykpKSkgewotCi0JCQkJCWlwID0gaXAtPmlfbW5leHQ7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlpZiAoIShmbGFnICYgWEZTX0ZMVVNIX0FMTCkpIHsKLQkJCQkJYnVzeSA9IDE7Ci0JCQkJCWRvbmUgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJLyoKLQkJCQkgKiBJZ25vcmUgYnVzeSBpbm9kZXMgYnV0IGNvbnRpbnVlIGZsdXNoaW5nCi0JCQkJICogb3RoZXJzLgotCQkJCSAqLwotCQkJCWlwID0gaXAtPmlfbW5leHQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKgotCQkJICogU2FtcGxlIHZwIG1hcHBpbmcgd2hpbGUgaG9sZGluZyBtcCBsb2NrZWQgb24gTVAKLQkJCSAqIHN5c3RlbXMsIHNvIHdlIGRvbid0IHB1cmdlIGEgcmVjbGFpbWVkIG9yCi0JCQkgKiBub25leGlzdGVudCB2bm9kZS4gIFdlIGJyZWFrIGZyb20gdGhlIGxvb3AKLQkJCSAqIHNpbmNlIHdlIGtub3cgdGhhdCB3ZSBtb2RpZnkKLQkJCSAqIGl0IGJ5IHB1bGxpbmcgb3Vyc2VsdmVzIGZyb20gaXQgaW4geGZzX3JlY2xhaW0oKQotCQkJICogY2FsbGVkIHZpYSB2bl9wdXJnZSgpIGJlbG93LiAgU2V0IGlwIHRvIHRoZSBuZXh0Ci0JCQkgKiBlbnRyeSBpbiB0aGUgbGlzdCBhbnl3YXkgc28gd2UnbGwga25vdyBiZWxvdwotCQkJICogd2hldGhlciB3ZSByZWFjaGVkIHRoZSBlbmQgb3Igbm90LgotCQkJICovCi0JCQlWTUFQKHZwLCB2bWFwKTsKKwkJdnAgPSBYRlNfSVRPVl9OVUxMKGlwKTsKKwkJaWYgKCF2cCkgewogCQkJWEZTX01PVU5UX0lVTkxPQ0sobXApOwotCi0JCQl2bl9wdXJnZSh2cCwgJnZtYXApOwotCi0JCQlwdXJnZWQgPSAxOwotCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKGlwICE9IG1wLT5tX2lub2Rlcyk7Ci0JCS8qCi0JCSAqIFdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB3aGVuIHdlIGV4aXQgdGhlIGxvb3AKLQkJICogYWZ0ZXIgYSBwdXJnZSBhbmQgd2hlbiB3ZSBzaW1wbHkgaGl0IHRoZSBlbmQgb2YgdGhlCi0JCSAqIGxpc3QuICBXZSBjYW4ndCB1c2UgdGhlIChpcCA9PSBtcC0+bV9pbm9kZXMpIHRlc3QsCi0JCSAqIGJlY2F1c2Ugd2hlbiB3ZSBwdXJnZSBhbiBpbm9kZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QKLQkJICogdGhlIG5leHQgaW5vZGUgb24gdGhlIGxpc3QgYmVjb21lcyBtcC0+bV9pbm9kZXMuICBUaGF0Ci0JCSAqIHdvdWxkIGNhdXNlIHN1Y2ggYSB0ZXN0IHRvIGJhaWwgb3V0IGVhcmx5LiAgVGhlIHB1cmdlZAotCQkgKiB2YXJpYWJsZSB0ZWxscyB1cyBob3cgd2UgZ290IG91dCBvZiB0aGUgbG9vcC4KLQkJICovCi0JCWlmICghcHVyZ2VkKSB7Ci0JCQlkb25lID0gMTsKKwkJCXhmc19maW5pc2hfcmVjbGFpbShpcCwgMCwgWEZTX0lGTFVTSF9BU1lOQyk7CisJCQlnb3RvIGFnYWluOwogCQl9Ci0JfQotCVhGU19NT1VOVF9JVU5MT0NLKG1wKTsKLQlyZXR1cm4gIWJ1c3k7Ci19CiAKKwkJQVNTRVJUKHZuX2NvdW50KHZwKSA9PSAwKTsKKworCQlpcCA9IGlwLT5pX21uZXh0OworCX0gd2hpbGUgKGlwICE9IG1wLT5tX2lub2Rlcyk7Cisgb3V0OgorCVhGU19NT1VOVF9JVU5MT0NLKG1wKTsKK30KIAogLyoKICAqIHhmc19pYWNjZXNzOiBjaGVjayBhY2Nlc3NpYmlsaXR5IG9mIGlub2RlIGZvciBtb2RlLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IDM3ZTFjMzEuLjU0ZDllNTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTQxMiwxMSArNDEyLDYgQEAKICNkZWZpbmUJWEZTX0lGTFVTSF9ERUxXUkkJCTUKIAogLyoKLSAqIEZsYWdzIGZvciB4ZnNfaWZsdXNoX2FsbC4KLSAqLwotI2RlZmluZQlYRlNfRkxVU0hfQUxMCQkweDEKLQotLyoKICAqIEZsYWdzIGZvciB4ZnNfaXRydW5jYXRlX3N0YXJ0KCkuCiAgKi8KICNkZWZpbmUJWEZTX0lUUlVOQ19ERUZJTklURQkweDEKQEAgLTQ4Nyw4ICs0ODIsNiBAQAogLyoKICAqIHhmc19pbm9kZS5jIHByb3RvdHlwZXMuCiAgKi8KLWludAkJeGZzX2lub3RvYnAoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX3RyYW5zICosIHhmc19pbm9fdCwKLQkJCSAgICB4ZnNfZGlub2RlX3QgKiosIHN0cnVjdCB4ZnNfYnVmICoqLCBpbnQgKik7CiBpbnQJCXhmc19pdG9icChzdHJ1Y3QgeGZzX21vdW50ICosIHN0cnVjdCB4ZnNfdHJhbnMgKiwKIAkJCSAgeGZzX2lub2RlX3QgKiwgeGZzX2Rpbm9kZV90ICoqLCBzdHJ1Y3QgeGZzX2J1ZiAqKiwKIAkJCSAgeGZzX2RhZGRyX3QpOwpAQCAtNTIyLDcgKzUxNSw3IEBACiB2b2lkCQl4ZnNfaXVucGluKHhmc19pbm9kZV90ICopOwogaW50CQl4ZnNfaWV4dGVudHNfY29weSh4ZnNfaW5vZGVfdCAqLCB4ZnNfYm1idF9yZWNfdCAqLCBpbnQpOwogaW50CQl4ZnNfaWZsdXNoKHhmc19pbm9kZV90ICosIHVpbnQpOwotaW50CQl4ZnNfaWZsdXNoX2FsbChzdHJ1Y3QgeGZzX21vdW50ICosIGludCk7Cit2b2lkCQl4ZnNfaWZsdXNoX2FsbChzdHJ1Y3QgeGZzX21vdW50ICopOwogaW50CQl4ZnNfaWFjY2Vzcyh4ZnNfaW5vZGVfdCAqLCBtb2RlX3QsIGNyZWRfdCAqKTsKIHVpbnQJCXhmc19pcm91bmR1cCh1aW50KTsKIHZvaWQJCXhmc19pY2hndGltZSh4ZnNfaW5vZGVfdCAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwppbmRleCA3NjhjYjE4Li4wZWVkMzBmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwpAQCAtOTEwLDcgKzkxMCw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgb3BzIHZlY3RvciBzaGFyZWQgYnkgYWxsIGJ1ZiBsb2cgaXRlbXMuCiAgKi8KLXN0cnVjdCB4ZnNfaXRlbV9vcHMgeGZzX2lub2RlX2l0ZW1fb3BzID0geworU1RBVElDIHN0cnVjdCB4ZnNfaXRlbV9vcHMgeGZzX2lub2RlX2l0ZW1fb3BzID0gewogCS5pb3Bfc2l6ZQk9ICh1aW50KCopKHhmc19sb2dfaXRlbV90KikpeGZzX2lub2RlX2l0ZW1fc2l6ZSwKIAkuaW9wX2Zvcm1hdAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xvZ19pb3ZlY190KikpCiAJCQkJCXhmc19pbm9kZV9pdGVtX2Zvcm1hdCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwppbmRleCA0NjllMWE3Li4yZWRkNjc2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lvbWFwLmMKKysrIGIvZnMveGZzL3hmc19pb21hcC5jCkBAIC0zODUsMTUgKzM4NSwxNSBAQAogCWludAkJbmltYXBzLCBtYXBzOwogCWludAkJZXJyb3I7CiAJaW50CQlibWFwaV9mbGFnOworCWludAkJcXVvdGFfZmxhZzsKIAlpbnQJCXJ0OwogCXhmc190cmFuc190CSp0cDsKIAl4ZnNfYm1idF9pcmVjX3QgaW1hcFtYRlNfV1JJVEVfSU1BUFNdLCAqaW1hcHA7CiAJeGZzX2JtYXBfZnJlZV90IGZyZWVfbGlzdDsKIAlpbnQJCWFlb2Y7Ci0JeGZzX2ZpbGJsa3NfdAlkYXRhYmxvY2tzOworCXhmc19maWxibGtzX3QJZGF0YWJsb2NrcywgcWJsb2NrcywgcmVzYmxrczsKIAlpbnQJCWNvbW1pdHRlZDsKIAlpbnQJCW51bXJ0ZXh0ZW50czsKLQl1aW50CQlyZXNibGtzOwogCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgZHF1b3RzIGFyZSB0aGVyZS4gVGhpcyBkb2Vzbid0IGhvbGQKQEAgLTQxOSw3ICs0MTksNiBAQAogCQl4ZnNfZmlsZW9mZl90CW1hcF9sYXN0X2ZzYjsKIAogCQltYXBfbGFzdF9mc2IgPSByZXRfaW1hcC0+YnJfYmxvY2tjb3VudCArIHJldF9pbWFwLT5icl9zdGFydG9mZjsKLQogCQlpZiAobWFwX2xhc3RfZnNiIDwgbGFzdF9mc2IpIHsKIAkJCWxhc3RfZnNiID0gbWFwX2xhc3RfZnNiOwogCQkJY291bnRfZnNiID0gbGFzdF9mc2IgLSBvZmZzZXRfZnNiOwpAQCAtNDI4LDU2ICs0MjcsNDcgQEAKIAl9CiAKIAkvKgotCSAqIGRldGVybWluZSBpZiByZXNlcnZpbmcgc3BhY2Ugb24KLQkgKiB0aGUgZGF0YSBvciByZWFsdGltZSBwYXJ0aXRpb24uCisJICogRGV0ZXJtaW5lIGlmIHJlc2VydmluZyBzcGFjZSBvbiB0aGUgZGF0YSBvciByZWFsdGltZSBwYXJ0aXRpb24uCiAJICovCiAJaWYgKChydCA9IFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkpKSB7Ci0JCWludAlzYnJ0ZXh0c2l6ZSwgaXBydGV4dHNpemU7CisJCXhmc19leHRsZW5fdAlleHRzejsKIAotCQlzYnJ0ZXh0c2l6ZSA9IG1wLT5tX3NiLnNiX3JleHRzaXplOwotCQlpcHJ0ZXh0c2l6ZSA9Ci0JCQlpcC0+aV9kLmRpX2V4dHNpemUgPyBpcC0+aV9kLmRpX2V4dHNpemUgOiBzYnJ0ZXh0c2l6ZTsKLQkJbnVtcnRleHRlbnRzID0gKGNvdW50X2ZzYiArIGlwcnRleHRzaXplIC0gMSk7Ci0JCWRvX2RpdihudW1ydGV4dGVudHMsIHNicnRleHRzaXplKTsKKwkJaWYgKCEoZXh0c3ogPSBpcC0+aV9kLmRpX2V4dHNpemUpKQorCQkJZXh0c3ogPSBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKKwkJbnVtcnRleHRlbnRzID0gcWJsb2NrcyA9IChjb3VudF9mc2IgKyBleHRzeiAtIDEpOworCQlkb19kaXYobnVtcnRleHRlbnRzLCBtcC0+bV9zYi5zYl9yZXh0c2l6ZSk7CisJCXF1b3RhX2ZsYWcgPSBYRlNfUU1PUFRfUkVTX1JUQkxLUzsKIAkJZGF0YWJsb2NrcyA9IDA7CiAJfSBlbHNlIHsKLQkJZGF0YWJsb2NrcyA9IGNvdW50X2ZzYjsKKwkJZGF0YWJsb2NrcyA9IHFibG9ja3MgPSBjb3VudF9mc2I7CisJCXF1b3RhX2ZsYWcgPSBYRlNfUU1PUFRfUkVTX1JFR0JMS1M7CiAJCW51bXJ0ZXh0ZW50cyA9IDA7CiAJfQogCiAJLyoKLQkgKiBhbGxvY2F0ZSBhbmQgc2V0dXAgdGhlIHRyYW5zYWN0aW9uCisJICogQWxsb2NhdGUgYW5kIHNldHVwIHRoZSB0cmFuc2FjdGlvbgogCSAqLwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19ESU9TVFJBVCk7Ci0KIAlyZXNibGtzID0gWEZTX0RJT1NUUkFUX1NQQUNFX1JFUyhtcCwgZGF0YWJsb2Nrcyk7Ci0KIAllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCByZXNibGtzLAogCQkJWEZTX1dSSVRFX0xPR19SRVMobXApLCBudW1ydGV4dGVudHMsCiAJCQlYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLAogCQkJWEZTX1dSSVRFX0xPR19DT1VOVCk7CiAKIAkvKgotCSAqIGNoZWNrIGZvciBydW5uaW5nIG91dCBvZiBzcGFjZQorCSAqIENoZWNrIGZvciBydW5uaW5nIG91dCBvZiBzcGFjZSwgbm90ZTogbmVlZCBsb2NrIHRvIHJldHVybgogCSAqLwogCWlmIChlcnJvcikKLQkJLyoKLQkJICogRnJlZSB0aGUgdHJhbnNhY3Rpb24gc3RydWN0dXJlLgotCQkgKi8KIAkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0KIAl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQogCWlmIChlcnJvcikKLQkJZ290byBlcnJvcl9vdXQ7IC8qIERvbid0IHJldHVybiBpbiBhYm92ZSBpZiAuLiB0cmFucyAuLiwKLQkJCQkJbmVlZCBsb2NrIHRvIHJldHVybiAqLworCQlnb3RvIGVycm9yX291dDsKIAotCWlmIChYRlNfVFJBTlNfUkVTRVJWRV9CTEtRVU9UQShtcCwgdHAsIGlwLCByZXNibGtzKSkgeworCWlmIChYRlNfVFJBTlNfUkVTRVJWRV9RVU9UQV9OQkxLUyhtcCwgdHAsIGlwLCBxYmxvY2tzLCAwLCBxdW90YV9mbGFnKSkgewogCQllcnJvciA9IChFRFFVT1QpOwogCQlnb3RvIGVycm9yMTsKIAl9Ci0JbmltYXBzID0gMTsKIAogCWJtYXBpX2ZsYWcgPSBYRlNfQk1BUElfV1JJVEU7CiAJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwpAQCAtNDg3LDMxICs0NzcsMjkgQEAKIAkJYm1hcGlfZmxhZyB8PSBYRlNfQk1BUElfUFJFQUxMT0M7CiAKIAkvKgotCSAqIGlzc3VlIHRoZSBibWFwaSgpIGNhbGwgdG8gYWxsb2NhdGUgdGhlIGJsb2NrcworCSAqIElzc3VlIHRoZSBibWFwaSgpIGNhbGwgdG8gYWxsb2NhdGUgdGhlIGJsb2NrcwogCSAqLwogCVhGU19CTUFQX0lOSVQoJmZyZWVfbGlzdCwgJmZpcnN0ZnNiKTsKKwluaW1hcHMgPSAxOwogCWltYXBwID0gJmltYXBbMF07CiAJZXJyb3IgPSB4ZnNfYm1hcGkodHAsIGlwLCBvZmZzZXRfZnNiLCBjb3VudF9mc2IsCiAJCWJtYXBpX2ZsYWcsICZmaXJzdGZzYiwgMCwgaW1hcHAsICZuaW1hcHMsICZmcmVlX2xpc3QpOwotCWlmIChlcnJvcikgeworCWlmIChlcnJvcikKIAkJZ290byBlcnJvcjA7Ci0JfQogCiAJLyoKLQkgKiBjb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24KKwkgKiBDb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24KIAkgKi8KLQogCWVycm9yID0geGZzX2JtYXBfZmluaXNoKCZ0cCwgJmZyZWVfbGlzdCwgZmlyc3Rmc2IsICZjb21taXR0ZWQpOwotCWlmIChlcnJvcikgeworCWlmIChlcnJvcikKIAkJZ290byBlcnJvcjA7Ci0JfQotCiAJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTLCBOVUxMKTsKLQlpZiAoZXJyb3IpIHsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyb3Jfb3V0OwotCX0KIAotCS8qIGNvcHkgYW55IG1hcHMgdG8gY2FsbGVyJ3MgYXJyYXkgYW5kIHJldHVybiBhbnkgZXJyb3IuICovCisJLyoKKwkgKiBDb3B5IGFueSBtYXBzIHRvIGNhbGxlcidzIGFycmF5IGFuZCByZXR1cm4gYW55IGVycm9yLgorCSAqLwogCWlmIChuaW1hcHMgPT0gMCkgewogCQllcnJvciA9IChFTk9TUEMpOwogCQlnb3RvIGVycm9yX291dDsKQEAgLTUzMCwxMCArNTE4LDExIEBACiAgICAgICAgIH0KIAlyZXR1cm4gMDsKIAotIGVycm9yMDoJLyogQ2FuY2VsIGJtYXAsIHVubG9jayBpbm9kZSwgYW5kIGNhbmNlbCB0cmFucyAqLworZXJyb3IwOgkvKiBDYW5jZWwgYm1hcCwgdW5sb2NrIGlub2RlLCB1bnJlc2VydmUgcXVvdGEgYmxvY2tzLCBjYW5jZWwgdHJhbnMgKi8KIAl4ZnNfYm1hcF9jYW5jZWwoJmZyZWVfbGlzdCk7CisJWEZTX1RSQU5TX1VOUkVTRVJWRV9RVU9UQV9OQkxLUyhtcCwgdHAsIGlwLCBxYmxvY2tzLCAwLCBxdW90YV9mbGFnKTsKIAotIGVycm9yMToJLyogSnVzdCBjYW5jZWwgdHJhbnNhY3Rpb24gKi8KK2Vycm9yMToJLyogSnVzdCBjYW5jZWwgdHJhbnNhY3Rpb24gKi8KIAl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTIHwgWEZTX1RSQU5TX0FCT1JUKTsKIAkqbm1hcHMgPSAwOwkvKiBub3RoaW5nIHNldC11cCBoZXJlICovCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmMgYi9mcy94ZnMveGZzX2xvZy5jCmluZGV4IDA5MmQ1ZmIuLjFjZDJhYzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmMKKysrIGIvZnMveGZzL3hmc19sb2cuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAjZGVmaW5lIHhsb2dfdmVyaWZ5X3RhaWxfbHNuKGEsYixjKQogI2VuZGlmCiAKLWludAkJeGxvZ19pY2xvZ3NfZW1wdHkoeGxvZ190ICpsb2cpOworU1RBVElDIGludAl4bG9nX2ljbG9nc19lbXB0eSh4bG9nX3QgKmxvZyk7CiAKICNpZmRlZiBERUJVRwogaW50IHhsb2dfZG9fZXJyb3IgPSAwOwpAQCAtMTg1Nyw3ICsxODU3LDcgQEAKICAqCiAgKiBTdGF0ZSBDaGFuZ2U6IERJUlRZIC0+IEFDVElWRQogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGxvZ19zdGF0ZV9jbGVhbl9sb2coeGxvZ190ICpsb2cpCiB7CiAJeGxvZ19pbl9jb3JlX3QJKmljbG9nOwpAQCAtMzU0Miw3ICszNTQyLDcgQEAKIAlyZXR1cm4gKHJldHZhbCk7CiB9CiAKLWludAorU1RBVElDIGludAogeGxvZ19pY2xvZ3NfZW1wdHkoeGxvZ190ICpsb2cpCiB7CiAJeGxvZ19pbl9jb3JlX3QJKmljbG9nOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcHJpdi5oIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCmluZGV4IGMzMWUzY2UuLjFhMWQ0NTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAorKysgYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKQEAgLTUzNSw3ICs1MzUsNiBAQAogCiAvKiBjb21tb24gcm91dGluZXMgKi8KIGV4dGVybiB4ZnNfbHNuX3QgeGxvZ19hc3NpZ25fdGFpbF9sc24oc3RydWN0IHhmc19tb3VudCAqbXApOwotZXh0ZXJuIGludAkgeGxvZ19maW5kX2hlYWQoeGxvZ190ICpsb2csIHhmc19kYWRkcl90ICpoZWFkX2Jsayk7CiBleHRlcm4gaW50CSB4bG9nX2ZpbmRfdGFpbCh4bG9nX3QJKmxvZywKIAkJCQl4ZnNfZGFkZHJfdCAqaGVhZF9ibGssCiAJCQkJeGZzX2RhZGRyX3QgKnRhaWxfYmxrLApAQCAtNTQ4LDcgKzU0Nyw2IEBACiBleHRlcm4gc3RydWN0IHhmc19idWYgKnhsb2dfZ2V0X2JwKHhsb2dfdCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQJIHhsb2dfcHV0X2JwKHN0cnVjdCB4ZnNfYnVmICopOwogZXh0ZXJuIGludAkgeGxvZ19icmVhZCh4bG9nX3QgKiwgeGZzX2RhZGRyX3QsIGludCwgc3RydWN0IHhmc19idWYgKik7Ci1leHRlcm4geGZzX2NhZGRyX3QgeGxvZ19hbGlnbih4bG9nX3QgKiwgeGZzX2RhZGRyX3QsIGludCwgc3RydWN0IHhmc19idWYgKik7CiAKIC8qIGljbG9nIHRyYWNpbmcgKi8KICNkZWZpbmUgWExPR19UUkFDRV9HUkFCX0ZMVVNIICAxCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggOTgyNGI1Yi4uMGFhYzI4ZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgKiBUaGUgYnVmZmVyIGlzIGtlcHQgbG9ja2VkIGFjcm9zcyB0aGUgd3JpdGUgYW5kIGlzIHJldHVybmVkIGxvY2tlZC4KICAqIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBmb3Igc3luY2hyb25vdXMgbG9nIHdyaXRlcy4KICAqLwotaW50CitTVEFUSUMgaW50CiB4bG9nX2J3cml0ZSgKIAl4bG9nX3QJCSpsb2csCiAJeGZzX2RhZGRyX3QJYmxrX25vLApAQCAtMTc5LDcgKzE3OSw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi14ZnNfY2FkZHJfdAorU1RBVElDIHhmc19jYWRkcl90CiB4bG9nX2FsaWduKAogCXhsb2dfdAkJKmxvZywKIAl4ZnNfZGFkZHJfdAlibGtfbm8sCkBAIC01MjgsNyArNTI4LDcgQEAKICAqCiAgKiBSZXR1cm46IHplcm8gaWYgbm9ybWFsLCBub24temVybyBpZiBlcnJvci4KICAqLwotaW50CitTVEFUSUMgaW50CiB4bG9nX2ZpbmRfaGVhZCgKIAl4bG9nX3QgCQkqbG9nLAogCXhmc19kYWRkcl90CSpyZXR1cm5faGVhZF9ibGspCkBAIC0xOTY0LDcgKzE5NjQsOCBAQAogCQkgKiBwcm9iYWJseSBhIGdvb2QgdGhpbmcgdG8gZG8gZm9yIG90aGVyIGJ1ZiB0eXBlcyBhbHNvLgogCQkgKi8KIAkJZXJyb3IgPSAwOwotCQlpZiAoYnVmX2YtPmJsZl9mbGFncyAmIChYRlNfQkxJX1VEUVVPVF9CVUZ8WEZTX0JMSV9HRFFVT1RfQlVGKSkgeworCQlpZiAoYnVmX2YtPmJsZl9mbGFncyAmCisJCSAgIChYRlNfQkxJX1VEUVVPVF9CVUZ8WEZTX0JMSV9QRFFVT1RfQlVGfFhGU19CTElfR0RRVU9UX0JVRikpIHsKIAkJCWVycm9yID0geGZzX3FtX2RxY2hlY2soKHhmc19kaXNrX2RxdW90X3QgKikKIAkJCQkJICAgICAgIGl0ZW0tPnJpX2J1ZltpXS5pX2FkZHIsCiAJCQkJCSAgICAgICAtMSwgMCwgWEZTX1FNT1BUX0RPV0FSTiwKQEAgLTIwMzAsNiArMjAzMSw3IEBACiAJfQogCiAJaWYgKElOVF9HRVQoZGRxLT5kX2ZsYWdzLCBBUkNIX0NPTlZFUlQpICE9IFhGU19EUV9VU0VSICYmCisJICAgIElOVF9HRVQoZGRxLT5kX2ZsYWdzLCBBUkNIX0NPTlZFUlQpICE9IFhGU19EUV9QUk9KICYmCiAJICAgIElOVF9HRVQoZGRxLT5kX2ZsYWdzLCBBUkNIX0NPTlZFUlQpICE9IFhGU19EUV9HUk9VUCkgewogCQlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRE9XQVJOKQogCQkJY21uX2VycihDRV9BTEVSVCwKQEAgLTIxMzUsNiArMjEzNyw4IEBACiAJdHlwZSA9IDA7CiAJaWYgKGJ1Zl9mLT5ibGZfZmxhZ3MgJiBYRlNfQkxJX1VEUVVPVF9CVUYpCiAJCXR5cGUgfD0gWEZTX0RRX1VTRVI7CisJaWYgKGJ1Zl9mLT5ibGZfZmxhZ3MgJiBYRlNfQkxJX1BEUVVPVF9CVUYpCisJCXR5cGUgfD0gWEZTX0RRX1BST0o7CiAJaWYgKGJ1Zl9mLT5ibGZfZmxhZ3MgJiBYRlNfQkxJX0dEUVVPVF9CVUYpCiAJCXR5cGUgfD0gWEZTX0RRX0dST1VQOwogCS8qCkBAIC0yMjQ3LDcgKzIyNTEsOCBAQAogCWVycm9yID0gMDsKIAlpZiAoZmxhZ3MgJiBYRlNfQkxJX0lOT0RFX0JVRikgewogCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19pbm9kZV9idWZmZXIobXAsIGl0ZW0sIGJwLCBidWZfZik7Ci0JfSBlbHNlIGlmIChmbGFncyAmIChYRlNfQkxJX1VEUVVPVF9CVUYgfCBYRlNfQkxJX0dEUVVPVF9CVUYpKSB7CisJfSBlbHNlIGlmIChmbGFncyAmCisJCSAgKFhGU19CTElfVURRVU9UX0JVRnxYRlNfQkxJX1BEUVVPVF9CVUZ8WEZTX0JMSV9HRFFVT1RfQlVGKSkgewogCQl4bG9nX3JlY292ZXJfZG9fZHF1b3RfYnVmZmVyKG1wLCBsb2csIGl0ZW0sIGJwLCBidWZfZik7CiAJfSBlbHNlIHsKIAkJeGxvZ19yZWNvdmVyX2RvX3JlZ19idWZmZXIobXAsIGl0ZW0sIGJwLCBidWZfZik7CkBAIC0yNjE5LDcgKzI2MjQsNyBAQAogCSAqIFRoaXMgdHlwZSBvZiBxdW90YXMgd2FzIHR1cm5lZCBvZmYsIHNvIGlnbm9yZSB0aGlzIHJlY29yZC4KIAkgKi8KIAl0eXBlID0gSU5UX0dFVChyZWNkZHEtPmRfZmxhZ3MsIEFSQ0hfQ09OVkVSVCkgJgotCQkJKFhGU19EUV9VU0VSIHwgWEZTX0RRX0dST1VQKTsKKwkJCShYRlNfRFFfVVNFUiB8IFhGU19EUV9QUk9KIHwgWEZTX0RRX0dST1VQKTsKIAlBU1NFUlQodHlwZSk7CiAJaWYgKGxvZy0+bF9xdW90YW9mZnNfZmxhZyAmIHR5cGUpCiAJCXJldHVybiAoMCk7CkBAIC0yNzQyLDcgKzI3NDcsNiBAQAogCXhmc19lZmlfbG9nX2l0ZW1fdAkqZWZpcCA9IE5VTEw7CiAJeGZzX2xvZ19pdGVtX3QJCSpsaXA7CiAJaW50CQkJZ2VuOwotCWludAkJCW5leHRzOwogCV9fdWludDY0X3QJCWVmaV9pZDsKIAlTUExERUNMKHMpOwogCkBAIC0yNzc3LDIyICsyNzgxLDE1IEBACiAJCX0KIAkJbGlwID0geGZzX3RyYW5zX25leHRfYWlsKG1wLCBsaXAsICZnZW4sIE5VTEwpOwogCX0KLQlpZiAobGlwID09IE5VTEwpIHsKLQkJQUlMX1VOTE9DSyhtcCwgcyk7Ci0JfQogCiAJLyoKIAkgKiBJZiB3ZSBmb3VuZCBpdCwgdGhlbiBmcmVlIGl0IHVwLiAgSWYgaXQgd2Fzbid0IHRoZXJlLCBpdAogCSAqIG11c3QgaGF2ZSBiZWVuIG92ZXJ3cml0dGVuIGluIHRoZSBsb2cuICBPaCB3ZWxsLgogCSAqLwogCWlmIChsaXAgIT0gTlVMTCkgewotCQluZXh0cyA9IGVmaXAtPmVmaV9mb3JtYXQuZWZpX25leHRlbnRzOwotCQlpZiAobmV4dHMgPiBYRlNfRUZJX01BWF9GQVNUX0VYVEVOVFMpIHsKLQkJCWttZW1fZnJlZShsaXAsIHNpemVvZih4ZnNfZWZpX2xvZ19pdGVtX3QpICsKLQkJCQkgICgobmV4dHMgLSAxKSAqIHNpemVvZih4ZnNfZXh0ZW50X3QpKSk7Ci0JCX0gZWxzZSB7Ci0JCQlrbWVtX3pvbmVfZnJlZSh4ZnNfZWZpX3pvbmUsIGVmaXApOwotCQl9CisJCXhmc19lZmlfaXRlbV9mcmVlKGVmaXApOworCX0gZWxzZSB7CisJCUFJTF9VTkxPQ0sobXAsIHMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tYWNyb3MuYyBiL2ZzL3hmcy94ZnNfbWFjcm9zLmMKaW5kZXggY2U0ZjQ2Yy4uNjk4YzJjZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tYWNyb3MuYworKysgYi9mcy94ZnMveGZzX21hY3Jvcy5jCkBAIC0xNjU4LDYgKzE2NTgsMTEgQEAKIHsKIAlyZXR1cm4gWEZTX0lOT0JUX0lTX0ZSRUUocnAsIGkpOwogfQoraW50Cit4ZnNfaW5vYnRfaXNfZnJlZV9kaXNrKHhmc19pbm9idF9yZWNfdCAqcnAsIGludCBpKQoreworCXJldHVybiBYRlNfSU5PQlRfSVNfRlJFRV9ESVNLKHJwLCBpKTsKK30KICNlbmRpZgogCiAjaWYgWEZTX1dBTlRfRlVOQ1NfQyB8fCAoWEZTX1dBTlRfU1BBQ0VfQyAmJiBYRlNTT19YRlNfSU5PQlRfSVNfTEFTVF9SRUMpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmMgYi9mcy94ZnMveGZzX21vdW50LmMKaW5kZXggMmVjOTY3ZC4uODJlMTY0NiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5jCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuYwpAQCAtNjQsNiArNjQsNyBAQAogU1RBVElDIHZvaWQJeGZzX21vdW50X2xvZ19zYnVuaXQoeGZzX21vdW50X3QgKiwgX19pbnQ2NF90KTsKIFNUQVRJQyBpbnQJeGZzX3V1aWRfbW91bnQoeGZzX21vdW50X3QgKik7CiBTVEFUSUMgdm9pZAl4ZnNfdXVpZF91bm1vdW50KHhmc19tb3VudF90ICptcCk7CitTVEFUSUMgdm9pZAl4ZnNfdW5tb3VudGZzX3dhaXQoeGZzX21vdW50X3QgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgewogICAgIHNob3J0IG9mZnNldDsKQEAgLTU1NSw3ICs1NTYsNyBAQAogICogZmllbGRzIGZyb20gdGhlIHN1cGVyYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbgogICogbW91bnQgc3RydWN0dXJlCiAgKi8KLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfbW91bnRfY29tbW9uKHhmc19tb3VudF90ICptcCwgeGZzX3NiX3QgKnNicCkKIHsKIAlpbnQJaTsKQEAgLTEwODEsNyArMTA4Miw3IEBACiAJaW50NjRfdAkJZnNpZDsKICNlbmRpZgogCi0JeGZzX2lmbHVzaF9hbGwobXAsIFhGU19GTFVTSF9BTEwpOworCXhmc19pZmx1c2hfYWxsKG1wKTsKIAogCVhGU19RTV9EUVBVUkdFQUxMKG1wLAogCQlYRlNfUU1PUFRfVVFVT1RBIHwgWEZTX1FNT1BUX0dRVU9UQSB8IFhGU19RTU9QVF9VTU9VTlRJTkcpOwpAQCAtMTExMSwxNSArMTExMiw2IEBACiAJICovCiAJQVNTRVJUKG1wLT5tX2lub2RlcyA9PSBOVUxMKTsKIAotCS8qCi0JICogV2UgbWF5IGhhdmUgYnVmcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBnZXR0aW5nIHdyaXR0ZW4gc3RpbGwuCi0JICogV2UgbXVzdCB3YWl0IGZvciB0aGUgSS9PIGNvbXBsZXRpb24gb2YgdGhvc2UuIFRoZSBzeW5jIGZsYWcgaGVyZQotCSAqIGRvZXMgYSB0d28gcGFzcyBpdGVyYXRpb24gdGhydSB0aGUgYnVmY2FjaGUuCi0JICovCi0JaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKSB7Ci0JCXhmc19pbmNvcmVfcmVsc2UobXAtPm1fZGRldl90YXJncCwgMCwgMSk7IC8qIHN5bmNocm9ub3VzICovCi0JfQotCiAJeGZzX3VubW91bnRmc19jbG9zZShtcCwgY3IpOwogCWlmICgobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9VVUlEKSA9PSAwKQogCQl4ZnNfdXVpZF91bm1vdW50KG1wKTsKQEAgLTExNDYsNyArMTEzOCw3IEBACiAJeGZzX2ZyZWVfYnVmdGFyZyhtcC0+bV9kZGV2X3RhcmdwLCAwKTsKIH0KIAotdm9pZAorU1RBVElDIHZvaWQKIHhmc191bm1vdW50ZnNfd2FpdCh4ZnNfbW91bnRfdCAqbXApCiB7CiAJaWYgKG1wLT5tX2xvZ2Rldl90YXJncCAhPSBtcC0+bV9kZGV2X3RhcmdwKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDMwZGQwOGYuLjVhZmZiYTMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaAorKysgYi9mcy94ZnMveGZzX21vdW50LmgKQEAgLTE0MSw3ICsxNDEsNyBAQAogdHlwZWRlZiB2b2lkCSgqeGZzX2RxZGV0YWNoX3QpKHN0cnVjdCB4ZnNfaW5vZGUgKik7CiB0eXBlZGVmIGludAkoKnhmc19kcXB1cmdlYWxsX3QpKHN0cnVjdCB4ZnNfbW91bnQgKiwgdWludCk7CiB0eXBlZGVmIGludAkoKnhmc19kcXZvcGFsbG9jX3QpKHN0cnVjdCB4ZnNfbW91bnQgKiwKLQkJCXN0cnVjdCB4ZnNfaW5vZGUgKiwgdWlkX3QsIGdpZF90LCB1aW50LAorCQkJc3RydWN0IHhmc19pbm9kZSAqLCB1aWRfdCwgZ2lkX3QsIHByaWRfdCwgdWludCwKIAkJCXN0cnVjdCB4ZnNfZHF1b3QgKiosIHN0cnVjdCB4ZnNfZHF1b3QgKiopOwogdHlwZWRlZiB2b2lkCSgqeGZzX2Rxdm9wY3JlYXRlX3QpKHN0cnVjdCB4ZnNfdHJhbnMgKiwgc3RydWN0IHhmc19pbm9kZSAqLAogCQkJc3RydWN0IHhmc19kcXVvdCAqLCBzdHJ1Y3QgeGZzX2RxdW90ICopOwpAQCAtMTg1LDggKzE4NSw4IEBACiAJKCoobXApLT5tX3FtX29wcy54ZnNfZHFkZXRhY2gpKGlwKQogI2RlZmluZSBYRlNfUU1fRFFQVVJHRUFMTChtcCwgZmwpIFwKIAkoKihtcCktPm1fcW1fb3BzLnhmc19kcXB1cmdlYWxsKShtcCwgZmwpCi0jZGVmaW5lIFhGU19RTV9EUVZPUEFMTE9DKG1wLCBpcCwgdWlkLCBnaWQsIGZsLCBkcTEsIGRxMikgXAotCSgqKG1wKS0+bV9xbV9vcHMueGZzX2Rxdm9wYWxsb2MpKG1wLCBpcCwgdWlkLCBnaWQsIGZsLCBkcTEsIGRxMikKKyNkZWZpbmUgWEZTX1FNX0RRVk9QQUxMT0MobXAsIGlwLCB1aWQsIGdpZCwgcHJpZCwgZmwsIGRxMSwgZHEyKSBcCisJKCoobXApLT5tX3FtX29wcy54ZnNfZHF2b3BhbGxvYykobXAsIGlwLCB1aWQsIGdpZCwgcHJpZCwgZmwsIGRxMSwgZHEyKQogI2RlZmluZSBYRlNfUU1fRFFWT1BDUkVBVEUobXAsIHRwLCBpcCwgZHExLCBkcTIpIFwKIAkoKihtcCktPm1fcW1fb3BzLnhmc19kcXZvcGNyZWF0ZSkodHAsIGlwLCBkcTEsIGRxMikKICNkZWZpbmUgWEZTX1FNX0RRVk9QUkVOQU1FKG1wLCBpcCkgXApAQCAtNTQ0LDcgKzU0NCw2IEBACiBleHRlcm4gaW50CXhmc19tb3VudGZzKHN0cnVjdCB2ZnMgKiwgeGZzX21vdW50X3QgKm1wLCBpbnQpOwogCiBleHRlcm4gaW50CXhmc191bm1vdW50ZnMoeGZzX21vdW50X3QgKiwgc3RydWN0IGNyZWQgKik7Ci1leHRlcm4gdm9pZAl4ZnNfdW5tb3VudGZzX3dhaXQoeGZzX21vdW50X3QgKik7CiBleHRlcm4gdm9pZAl4ZnNfdW5tb3VudGZzX2Nsb3NlKHhmc19tb3VudF90ICosIHN0cnVjdCBjcmVkICopOwogZXh0ZXJuIGludAl4ZnNfdW5tb3VudGZzX3dyaXRlc2IoeGZzX21vdW50X3QgKik7CiBleHRlcm4gaW50CXhmc191bm1vdW50X2ZsdXNoKHhmc19tb3VudF90ICosIGludCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3F1b3RhLmggYi9mcy94ZnMveGZzX3F1b3RhLmgKaW5kZXggNzAzZWM0ZS4uNzEzNDU3NiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19xdW90YS5oCisrKyBiL2ZzL3hmcy94ZnNfcXVvdGEuaApAQCAtOTYsNyArOTYsNyBAQAogICogZmxhZ3MgZm9yIHFfZmxhZ3MgZmllbGQgaW4gdGhlIGRxdW90LgogICovCiAjZGVmaW5lIFhGU19EUV9VU0VSCQkweDAwMDEJCS8qIGEgdXNlciBxdW90YSAqLwotLyogI2RlZmluZSBYRlNfRFFfUFJPSgkJMHgwMDAyCQktLSBwcm9qZWN0IHF1b3RhIChJUklYKSAqLworI2RlZmluZSBYRlNfRFFfUFJPSgkJMHgwMDAyCQkvKiBwcm9qZWN0IHF1b3RhICovCiAjZGVmaW5lIFhGU19EUV9HUk9VUAkJMHgwMDA0CQkvKiBhIGdyb3VwIHF1b3RhICovCiAjZGVmaW5lIFhGU19EUV9GTE9DS0VECQkweDAwMDgJCS8qIGZsdXNoIGxvY2sgdGFrZW4gKi8KICNkZWZpbmUgWEZTX0RRX0RJUlRZCQkweDAwMTAJCS8qIGRxdW90IGlzIGRpcnR5ICovCkBAIC0xMDQsNiArMTA0LDggQEAKICNkZWZpbmUgWEZTX0RRX0lOQUNUSVZFCQkweDAwNDAJCS8qIGRxIG9mZiBtcGxpc3QgJiBoYXNobGlzdCAqLwogI2RlZmluZSBYRlNfRFFfTUFSS0VSCQkweDAwODAJCS8qIHNlbnRpbmVsICovCiAKKyNkZWZpbmUgWEZTX0RRX0FMTFRZUEVTCQkoWEZTX0RRX1VTRVJ8WEZTX0RRX1BST0p8WEZTX0RRX0dST1VQKQorCiAvKgogICogSW4gdGhlIHdvcnN0IGNhc2UsIHdoZW4gYm90aCB1c2VyIGFuZCBncm91cCBxdW90YXMgYXJlIG9uLAogICogd2UgY2FuIGhhdmUgYSBtYXggb2YgdGhyZWUgZHF1b3RzIGNoYW5naW5nIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLgpAQCAtMTI0LDcgKzEyNiw3IEBACiB0eXBlZGVmIHN0cnVjdCB4ZnNfZHFfbG9nZm9ybWF0IHsKIAlfX3VpbnQxNl90CQlxbGZfdHlwZTsgICAgICAvKiBkcXVvdCBsb2cgaXRlbSB0eXBlICovCiAJX191aW50MTZfdAkJcWxmX3NpemU7ICAgICAgLyogc2l6ZSBvZiB0aGlzIGl0ZW0gKi8KLQl4ZnNfZHFpZF90CQlxbGZfaWQ7CSAgICAgICAvKiB1c3IvZ3JwIGlkIG51bWJlciA6IDMyIGJpdHMgKi8KKwl4ZnNfZHFpZF90CQlxbGZfaWQ7CSAgICAgICAvKiB1c3IvZ3JwL3Byb2ogaWQgOiAzMiBiaXRzICovCiAJX19pbnQ2NF90CQlxbGZfYmxrbm87ICAgICAvKiBibGtubyBvZiBkcXVvdCBidWZmZXIgKi8KIAlfX2ludDMyX3QJCXFsZl9sZW47ICAgICAgIC8qIGxlbiBvZiBkcXVvdCBidWZmZXIgKi8KIAlfX3VpbnQzMl90CQlxbGZfYm9mZnNldDsgICAvKiBvZmYgb2YgZHF1b3QgaW4gYnVmZmVyICovCkBAIC0xNTIsOSArMTU0LDkgQEAKICNkZWZpbmUgWEZTX1VRVU9UQV9BQ0NUCTB4MDAwMSAgLyogdXNlciBxdW90YSBhY2NvdW50aW5nIE9OICovCiAjZGVmaW5lIFhGU19VUVVPVEFfRU5GRAkweDAwMDIgIC8qIHVzZXIgcXVvdGEgbGltaXRzIGVuZm9yY2VkICovCiAjZGVmaW5lIFhGU19VUVVPVEFfQ0hLRAkweDAwMDQgIC8qIHF1b3RhY2hlY2sgcnVuIG9uIHVzciBxdW90YXMgKi8KLSNkZWZpbmUgWEZTX1BRVU9UQV9BQ0NUCTB4MDAwOCAgLyogKElSSVgpIHByb2plY3QgcXVvdGEgYWNjb3VudGluZyBPTiAqLwotI2RlZmluZSBYRlNfR1FVT1RBX0VORkQJMHgwMDEwICAvKiBncm91cCBxdW90YSBsaW1pdHMgZW5mb3JjZWQgKi8KLSNkZWZpbmUgWEZTX0dRVU9UQV9DSEtECTB4MDAyMCAgLyogcXVvdGFjaGVjayBydW4gb24gZ3JwIHF1b3RhcyAqLworI2RlZmluZSBYRlNfUFFVT1RBX0FDQ1QJMHgwMDA4ICAvKiBwcm9qZWN0IHF1b3RhIGFjY291bnRpbmcgT04gKi8KKyNkZWZpbmUgWEZTX09RVU9UQV9FTkZECTB4MDAxMCAgLyogb3RoZXIgKGdycC9wcmopIHF1b3RhIGxpbWl0cyBlbmZvcmNlZCAqLworI2RlZmluZSBYRlNfT1FVT1RBX0NIS0QJMHgwMDIwICAvKiBxdW90YWNoZWNrIHJ1biBvbiBvdGhlciAoZ3JwL3ByaikgcXVvdGFzICovCiAjZGVmaW5lIFhGU19HUVVPVEFfQUNDVAkweDAwNDAgIC8qIGdyb3VwIHF1b3RhIGFjY291bnRpbmcgT04gKi8KIAogLyoKQEAgLTE2MiwxNyArMTY0LDIyIEBACiAgKiBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZ2V0dGluZyB0dXJuZWQgb2ZmLiBUaGVzZSBmbGFncyBhcmUgaW4gbV9xZmxhZ3MgYnV0CiAgKiBuZXZlciBpbiBzYl9xZmxhZ3MuCiAgKi8KLSNkZWZpbmUgWEZTX1VRVU9UQV9BQ1RJVkUJMHgwMDgwICAvKiB1cXVvdGFzIGFyZSBiZWluZyB0dXJuZWQgb2ZmICovCi0jZGVmaW5lIFhGU19HUVVPVEFfQUNUSVZFCTB4MDEwMCAgLyogZ3F1b3RhcyBhcmUgYmVpbmcgdHVybmVkIG9mZiAqLworI2RlZmluZSBYRlNfVVFVT1RBX0FDVElWRQkweDAxMDAgIC8qIHVxdW90YXMgYXJlIGJlaW5nIHR1cm5lZCBvZmYgKi8KKyNkZWZpbmUgWEZTX1BRVU9UQV9BQ1RJVkUJMHgwMjAwICAvKiBwcXVvdGFzIGFyZSBiZWluZyB0dXJuZWQgb2ZmICovCisjZGVmaW5lIFhGU19HUVVPVEFfQUNUSVZFCTB4MDQwMCAgLyogZ3F1b3RhcyBhcmUgYmVpbmcgdHVybmVkIG9mZiAqLwogCiAvKgogICogQ2hlY2tpbmcgWEZTX0lTXypRVU9UQV9PTigpIHdoaWxlIGhvbGRpbmcgYW55IGlub2RlIGxvY2sgZ3VhcmFudGVlcwogICogcXVvdGEgd2lsbCBiZSBub3QgYmUgc3dpdGNoZWQgb2ZmIGFzIGxvbmcgYXMgdGhhdCBpbm9kZSBsb2NrIGlzIGhlbGQuCiAgKi8KICNkZWZpbmUgWEZTX0lTX1FVT1RBX09OKG1wKQkoKG1wKS0+bV9xZmxhZ3MgJiAoWEZTX1VRVU9UQV9BQ1RJVkUgfCBcCi0JCQkJCQkgICBYRlNfR1FVT1RBX0FDVElWRSkpCisJCQkJCQkgICBYRlNfR1FVT1RBX0FDVElWRSB8IFwKKwkJCQkJCSAgIFhGU19QUVVPVEFfQUNUSVZFKSkKKyNkZWZpbmUgWEZTX0lTX09RVU9UQV9PTihtcCkJKChtcCktPm1fcWZsYWdzICYgKFhGU19HUVVPVEFfQUNUSVZFIHwgXAorCQkJCQkJICAgWEZTX1BRVU9UQV9BQ1RJVkUpKQogI2RlZmluZSBYRlNfSVNfVVFVT1RBX09OKG1wKQkoKG1wKS0+bV9xZmxhZ3MgJiBYRlNfVVFVT1RBX0FDVElWRSkKICNkZWZpbmUgWEZTX0lTX0dRVU9UQV9PTihtcCkJKChtcCktPm1fcWZsYWdzICYgWEZTX0dRVU9UQV9BQ1RJVkUpCisjZGVmaW5lIFhGU19JU19QUVVPVEFfT04obXApCSgobXApLT5tX3FmbGFncyAmIFhGU19QUVVPVEFfQUNUSVZFKQogCiAvKgogICogRmxhZ3MgdG8gdGVsbCB2YXJpb3VzIGZ1bmN0aW9ucyB3aGF0IHRvIGRvLiBOb3QgYWxsIG9mIHRoZXNlIGFyZSBtZWFuaW5nZnVsCkBAIC0xODIsNyArMTg5LDcgQEAKICNkZWZpbmUgWEZTX1FNT1BUX0RRTE9DSwkweDAwMDAwMDEgLyogZHFsb2NrICovCiAjZGVmaW5lIFhGU19RTU9QVF9EUUFMTE9DCTB4MDAwMDAwMiAvKiBhbGxvYyBkcXVvdCBvbmRpc2sgaWYgbmVlZGVkICovCiAjZGVmaW5lIFhGU19RTU9QVF9VUVVPVEEJMHgwMDAwMDA0IC8qIHVzZXIgZHF1b3QgcmVxdWVzdGVkICovCi0jZGVmaW5lIFhGU19RTU9QVF9HUVVPVEEJMHgwMDAwMDA4IC8qIGdyb3VwIGRxdW90IHJlcXVlc3RlZCAqLworI2RlZmluZSBYRlNfUU1PUFRfUFFVT1RBCTB4MDAwMDAwOCAvKiBwcm9qZWN0IGRxdW90IHJlcXVlc3RlZCAqLwogI2RlZmluZSBYRlNfUU1PUFRfRk9SQ0VfUkVTCTB4MDAwMDAxMCAvKiBpZ25vcmUgcXVvdGEgbGltaXRzICovCiAjZGVmaW5lIFhGU19RTU9QVF9EUVNVU0VSCTB4MDAwMDAyMCAvKiBkb24ndCBjYWNoZSBzdXBlciB1c2VycyBkcXVvdCAqLwogI2RlZmluZSBYRlNfUU1PUFRfU0JWRVJTSU9OCTB4MDAwMDA0MCAvKiBjaGFuZ2Ugc3VwZXJibG9jayB2ZXJzaW9uIG51bSAqLwpAQCAtMTkyLDYgKzE5OSw3IEBACiAjZGVmaW5lIFhGU19RTU9QVF9ET1dBUk4gICAgICAgIDB4MDAwMDQwMCAvKiBpbmNyZWFzZSB3YXJuaW5nIGNudCBpZiBuZWNlc3NhcnkgKi8KICNkZWZpbmUgWEZTX1FNT1BUX0lMT0NLRUQJMHgwMDAwODAwIC8qIGlub2RlIGlzIGFscmVhZHkgbG9ja2VkIChleGNsKSAqLwogI2RlZmluZSBYRlNfUU1PUFRfRFFSRVBBSVIJMHgwMDAxMDAwIC8qIHJlcGFpciBkcXVvdCwgaWYgZGFtYWdlZC4gKi8KKyNkZWZpbmUgWEZTX1FNT1BUX0dRVU9UQQkweDAwMDIwMDAgLyogZ3JvdXAgZHF1b3QgcmVxdWVzdGVkICovCiAKIC8qCiAgKiBmbGFncyB0byB4ZnNfdHJhbnNfbW9kX2RxdW90IHRvIGluZGljYXRlIHdoaWNoIGZpZWxkIG5lZWRzIHRvIGJlCkBAIC0yMzEsNyArMjM5LDggQEAKICNkZWZpbmUgWEZTX1RSQU5TX0RRX0RFTFJUQkNPVU5UIFhGU19RTU9QVF9ERUxSVEJDT1VOVAogCiAKLSNkZWZpbmUgWEZTX1FNT1BUX1FVT1RBTEwJKFhGU19RTU9QVF9VUVVPVEF8WEZTX1FNT1BUX0dRVU9UQSkKKyNkZWZpbmUgWEZTX1FNT1BUX1FVT1RBTEwJXAorCQkoWEZTX1FNT1BUX1VRVU9UQSB8IFhGU19RTU9QVF9QUVVPVEEgfCBYRlNfUU1PUFRfR1FVT1RBKQogI2RlZmluZSBYRlNfUU1PUFRfUkVTQkxLX01BU0sJKFhGU19RTU9QVF9SRVNfUkVHQkxLUyB8IFhGU19RTU9QVF9SRVNfUlRCTEtTKQogCiAjaWZkZWYgX19LRVJORUxfXwpAQCAtMjQ2LDIxICsyNTUsMzMgQEAKICAqLwogI2RlZmluZSBYRlNfTk9UX0RRQVRUQUNIRUQobXAsIGlwKSAoKFhGU19JU19VUVVPVEFfT04obXApICYmXAogCQkJCSAgICAgKGlwKS0+aV91ZHF1b3QgPT0gTlVMTCkgfHwgXAotCQkJCSAgICAoWEZTX0lTX0dRVU9UQV9PTihtcCkgJiYgXAorCQkJCSAgICAoWEZTX0lTX09RVU9UQV9PTihtcCkgJiYgXAogCQkJCSAgICAgKGlwKS0+aV9nZHF1b3QgPT0gTlVMTCkpCiAKLSNkZWZpbmUgWEZTX1FNX05FRURfUVVPVEFDSEVDSyhtcCkgKChYRlNfSVNfVVFVT1RBX09OKG1wKSAmJiBcCi0JCQkJICAgICAobXAtPm1fc2Iuc2JfcWZsYWdzICYgXAotCQkJCSAgICAgIFhGU19VUVVPVEFfQ0hLRCkgPT0gMCkgfHwgXAotCQkJCSAgICAoWEZTX0lTX0dRVU9UQV9PTihtcCkgJiYgXAotCQkJCSAgICAgKG1wLT5tX3NiLnNiX3FmbGFncyAmIFwKLQkJCQkgICAgICBYRlNfR1FVT1RBX0NIS0QpID09IDApKQorI2RlZmluZSBYRlNfUU1fTkVFRF9RVU9UQUNIRUNLKG1wKSBcCisJKChYRlNfSVNfVVFVT1RBX09OKG1wKSAmJiBcCisJCShtcC0+bV9zYi5zYl9xZmxhZ3MgJiBYRlNfVVFVT1RBX0NIS0QpID09IDApIHx8IFwKKwkgKFhGU19JU19HUVVPVEFfT04obXApICYmIFwKKwkJKChtcC0+bV9zYi5zYl9xZmxhZ3MgJiBYRlNfT1FVT1RBX0NIS0QpID09IDAgfHwgXAorCQkgKG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19QUVVPVEFfQUNDVCkpKSB8fCBcCisJIChYRlNfSVNfUFFVT1RBX09OKG1wKSAmJiBcCisJCSgobXAtPm1fc2Iuc2JfcWZsYWdzICYgWEZTX09RVU9UQV9DSEtEKSA9PSAwIHx8IFwKKwkJIChtcC0+bV9zYi5zYl9xZmxhZ3MgJiBYRlNfR1FVT1RBX0FDQ1QpKSkpCisKKyNkZWZpbmUgWEZTX01PVU5UX1FVT1RBX1NFVDEJKFhGU19VUVVPVEFfQUNDVHxYRlNfVVFVT1RBX0VORkR8XAorCQkJCSBYRlNfVVFVT1RBX0NIS0R8WEZTX1BRVU9UQV9BQ0NUfFwKKwkJCQkgWEZTX09RVU9UQV9FTkZEfFhGU19PUVVPVEFfQ0hLRCkKKworI2RlZmluZSBYRlNfTU9VTlRfUVVPVEFfU0VUMgkoWEZTX1VRVU9UQV9BQ0NUfFhGU19VUVVPVEFfRU5GRHxcCisJCQkJIFhGU19VUVVPVEFfQ0hLRHxYRlNfR1FVT1RBX0FDQ1R8XAorCQkJCSBYRlNfT1FVT1RBX0VORkR8WEZTX09RVU9UQV9DSEtEKQogCiAjZGVmaW5lIFhGU19NT1VOVF9RVU9UQV9BTEwJKFhGU19VUVVPVEFfQUNDVHxYRlNfVVFVT1RBX0VORkR8XAotCQkJCSBYRlNfVVFVT1RBX0NIS0R8WEZTX0dRVU9UQV9BQ0NUfFwKLQkJCQkgWEZTX0dRVU9UQV9FTkZEfFhGU19HUVVPVEFfQ0hLRCkKKwkJCQkgWEZTX1VRVU9UQV9DSEtEfFhGU19QUVVPVEFfQUNDVHxcCisJCQkJIFhGU19PUVVPVEFfRU5GRHxYRlNfT1FVT1RBX0NIS0R8XAorCQkJCSBYRlNfR1FVT1RBX0FDQ1QpCiAjZGVmaW5lIFhGU19NT1VOVF9RVU9UQV9NQVNLCShYRlNfTU9VTlRfUVVPVEFfQUxMIHwgWEZTX1VRVU9UQV9BQ1RJVkUgfCBcCi0JCQkJIFhGU19HUVVPVEFfQUNUSVZFKQorCQkJCSBYRlNfR1FVT1RBX0FDVElWRSB8IFhGU19QUVVPVEFfQUNUSVZFKQogCiAKIC8qCkBAIC0zMzEsMTUgKzM1Miw4IEBACiAjZGVmaW5lIFhGU19UUkFOU19VTlJFU0VSVkVfQU5EX01PRF9EUVVPVFMobXAsIHRwKSBcCiAJWEZTX0RRVFJYT1BfVk9JRChtcCwgdHAsIHFvX3VucmVzZXJ2ZV9hbmRfbW9kX2RxdW90cykKIAotI2RlZmluZSBYRlNfVFJBTlNfUkVTRVJWRV9CTEtRVU9UQShtcCwgdHAsIGlwLCBuYmxrcykgXAotCVhGU19UUkFOU19SRVNFUlZFX1FVT1RBX05CTEtTKG1wLCB0cCwgaXAsIG5ibGtzLCAwLCBcCi0JCQkJWEZTX1FNT1BUX1JFU19SRUdCTEtTKQotI2RlZmluZSBYRlNfVFJBTlNfUkVTRVJWRV9CTEtRVU9UQV9GT1JDRShtcCwgdHAsIGlwLCBuYmxrcykgXAotCVhGU19UUkFOU19SRVNFUlZFX1FVT1RBX05CTEtTKG1wLCB0cCwgaXAsIG5ibGtzLCAwLCBcCi0JCQkJWEZTX1FNT1BUX1JFU19SRUdCTEtTIHwgWEZTX1FNT1BUX0ZPUkNFX1JFUykKLSNkZWZpbmUgWEZTX1RSQU5TX1VOUkVTRVJWRV9CTEtRVU9UQShtcCwgdHAsIGlwLCBuYmxrcykgXAotCVhGU19UUkFOU19SRVNFUlZFX1FVT1RBX05CTEtTKG1wLCB0cCwgaXAsIC0obmJsa3MpLCAwLCBcCi0JCQkJWEZTX1FNT1BUX1JFU19SRUdCTEtTKQorI2RlZmluZSBYRlNfVFJBTlNfVU5SRVNFUlZFX1FVT1RBX05CTEtTKG1wLCB0cCwgaXAsIG5ibGtzLCBuaW5vcywgZmxhZ3MpIFwKKwlYRlNfVFJBTlNfUkVTRVJWRV9RVU9UQV9OQkxLUyhtcCwgdHAsIGlwLCAtKG5ibGtzKSwgLShuaW5vcyksIGZsYWdzKQogI2RlZmluZSBYRlNfVFJBTlNfUkVTRVJWRV9RVU9UQShtcCwgdHAsIHVkLCBnZCwgbmIsIG5pLCBmKSBcCiAJWEZTX1RSQU5TX1JFU0VSVkVfUVVPVEFfQllEUVVPVFMobXAsIHRwLCB1ZCwgZ2QsIG5iLCBuaSwgXAogCQkJCWYgfCBYRlNfUU1PUFRfUkVTX1JFR0JMS1MpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3JlbmFtZS5jIGIvZnMveGZzL3hmc19yZW5hbWUuYwppbmRleCBjYjEzZjlhLi4yM2I0OGFjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3JlbmFtZS5jCisrKyBiL2ZzL3hmcy94ZnNfcmVuYW1lLmMKQEAgLTIzNCw5ICsyMzQsNiBAQAogCXJldHVybiAwOwogfQogCi0KLWludCByZW5hbWVfd2hpY2hfZXJyb3JfcmV0dXJuID0gMDsKLQogLyoKICAqIHhmc19yZW5hbWUKICAqLwpAQCAtMzE2LDcgKzMxMyw2IEBACiAJCQkmbnVtX2lub2Rlcyk7CiAKIAlpZiAoZXJyb3IpIHsKLQkJcmVuYW1lX3doaWNoX2Vycm9yX3JldHVybiA9IF9fTElORV9fOwogCQkvKgogCQkgKiBXZSBoYXZlIG5vdGhpbmcgbG9ja2VkLCBubyBpbm9kZSByZWZlcmVuY2VzLCBhbmQKIAkJICogbm8gdHJhbnNhY3Rpb24sIHNvIGp1c3QgZ2V0IG91dC4KQEAgLTMzMiw3ICszMjgsNiBAQAogCQkgKi8KIAkJaWYgKHRhcmdldF9pcCA9PSBOVUxMICYmIChzcmNfZHAgIT0gdGFyZ2V0X2RwKSAmJgogCQkgICAgdGFyZ2V0X2RwLT5pX2QuZGlfbmxpbmsgPj0gWEZTX01BWExJTkspIHsKLQkJCXJlbmFtZV93aGljaF9lcnJvcl9yZXR1cm4gPSBfX0xJTkVfXzsKIAkJCWVycm9yID0gWEZTX0VSUk9SKEVNTElOSyk7CiAJCQl4ZnNfcmVuYW1lX3VubG9jazQoaW5vZGVzLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAkJCWdvdG8gcmVsZV9yZXR1cm47CkBAIC0zNTksNyArMzU0LDYgQEAKIAkJCQlYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLCBYRlNfUkVOQU1FX0xPR19DT1VOVCk7CiAJfQogCWlmIChlcnJvcikgewotCQlyZW5hbWVfd2hpY2hfZXJyb3JfcmV0dXJuID0gX19MSU5FX187CiAJCXhmc190cmFuc19jYW5jZWwodHAsIDApOwogCQlnb3RvIHJlbGVfcmV0dXJuOwogCX0KQEAgLTM2OSw3ICszNjMsNiBAQAogCSAqLwogCWlmICgoZXJyb3IgPSBYRlNfUU1fRFFWT1BSRU5BTUUobXAsIGlub2RlcykpKSB7CiAJCXhmc190cmFuc19jYW5jZWwodHAsIGNhbmNlbF9mbGFncyk7Ci0JCXJlbmFtZV93aGljaF9lcnJvcl9yZXR1cm4gPSBfX0xJTkVfXzsKIAkJZ290byByZWxlX3JldHVybjsKIAl9CiAKQEAgLTQxMyw3ICs0MDYsNiBAQAogCQlpZiAoc3BhY2VyZXMgPT0gMCAmJgogCQkgICAgKGVycm9yID0gWEZTX0RJUl9DQU5FTlRFUihtcCwgdHAsIHRhcmdldF9kcCwgdGFyZ2V0X25hbWUsCiAJCQkJdGFyZ2V0X25hbWVsZW4pKSkgewotCQkJcmVuYW1lX3doaWNoX2Vycm9yX3JldHVybiA9IF9fTElORV9fOwogCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCX0KIAkJLyoKQEAgLTQyNSwxMSArNDE3LDkgQEAKIAkJCQkJICAgdGFyZ2V0X25hbWVsZW4sIHNyY19pcC0+aV9pbm8sCiAJCQkJCSAgICZmaXJzdF9ibG9jaywgJmZyZWVfbGlzdCwgc3BhY2VyZXMpOwogCQlpZiAoZXJyb3IgPT0gRU5PU1BDKSB7Ci0JCQlyZW5hbWVfd2hpY2hfZXJyb3JfcmV0dXJuID0gX19MSU5FX187CiAJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJfQogCQlpZiAoZXJyb3IpIHsKLQkJCXJlbmFtZV93aGljaF9lcnJvcl9yZXR1cm4gPSBfX0xJTkVfXzsKIAkJCWdvdG8gYWJvcnRfcmV0dXJuOwogCQl9CiAJCXhmc19pY2hndGltZSh0YXJnZXRfZHAsIFhGU19JQ0hHVElNRV9NT0QgfCBYRlNfSUNIR1RJTUVfQ0hHKTsKQEAgLTQzNyw3ICs0MjcsNiBAQAogCQlpZiAobmV3X3BhcmVudCAmJiBzcmNfaXNfZGlyZWN0b3J5KSB7CiAJCQllcnJvciA9IHhmc19idW1wbGluayh0cCwgdGFyZ2V0X2RwKTsKIAkJCWlmIChlcnJvcikgewotCQkJCXJlbmFtZV93aGljaF9lcnJvcl9yZXR1cm4gPSBfX0xJTkVfXzsKIAkJCQlnb3RvIGFib3J0X3JldHVybjsKIAkJCX0KIAkJfQpAQCAtNDU1LDcgKzQ0NCw2IEBACiAJCQlpZiAoIShYRlNfRElSX0lTRU1QVFkodGFyZ2V0X2lwLT5pX21vdW50LCB0YXJnZXRfaXApKSB8fAogCQkJICAgICh0YXJnZXRfaXAtPmlfZC5kaV9ubGluayA+IDIpKSB7CiAJCQkJZXJyb3IgPSBYRlNfRVJST1IoRUVYSVNUKTsKLQkJCQlyZW5hbWVfd2hpY2hfZXJyb3JfcmV0dXJuID0gX19MSU5FX187CiAJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQl9CiAJCX0KQEAgLTQ3Myw3ICs0NjEsNiBAQAogCQkJdGFyZ2V0X25hbWVsZW4sIHNyY19pcC0+aV9pbm8sICZmaXJzdF9ibG9jaywKIAkJCSZmcmVlX2xpc3QsIHNwYWNlcmVzKTsKIAkJaWYgKGVycm9yKSB7Ci0JCQlyZW5hbWVfd2hpY2hfZXJyb3JfcmV0dXJuID0gX19MSU5FX187CiAJCQlnb3RvIGFib3J0X3JldHVybjsKIAkJfQogCQl4ZnNfaWNoZ3RpbWUodGFyZ2V0X2RwLCBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRyk7CkBAIC00ODQsNyArNDcxLDYgQEAKIAkJICovCiAJCWVycm9yID0geGZzX2Ryb3BsaW5rKHRwLCB0YXJnZXRfaXApOwogCQlpZiAoZXJyb3IpIHsKLQkJCXJlbmFtZV93aGljaF9lcnJvcl9yZXR1cm4gPSBfX0xJTkVfXzsKIAkJCWdvdG8gYWJvcnRfcmV0dXJuOwogCQl9CiAJCXRhcmdldF9pcF9kcm9wcGVkID0gMTsKQEAgLTQ5NSw3ICs0ODEsNiBAQAogCQkJICovCiAJCQllcnJvciA9IHhmc19kcm9wbGluayh0cCwgdGFyZ2V0X2lwKTsKIAkJCWlmIChlcnJvcikgewotCQkJCXJlbmFtZV93aGljaF9lcnJvcl9yZXR1cm4gPSBfX0xJTkVfXzsKIAkJCQlnb3RvIGFib3J0X3JldHVybjsKIAkJCX0KIAkJfQpAQCAtNTE5LDcgKzUwNCw2IEBACiAJCQkJCSZmcmVlX2xpc3QsIHNwYWNlcmVzKTsKIAkJQVNTRVJUKGVycm9yICE9IEVFWElTVCk7CiAJCWlmIChlcnJvcikgewotCQkJcmVuYW1lX3doaWNoX2Vycm9yX3JldHVybiA9IF9fTElORV9fOwogCQkJZ290byBhYm9ydF9yZXR1cm47CiAJCX0KIAkJeGZzX2ljaGd0aW1lKHNyY19pcCwgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOwpAQCAtNTUwLDcgKzUzNCw2IEBACiAJCSAqLwogCQllcnJvciA9IHhmc19kcm9wbGluayh0cCwgc3JjX2RwKTsKIAkJaWYgKGVycm9yKSB7Ci0JCQlyZW5hbWVfd2hpY2hfZXJyb3JfcmV0dXJuID0gX19MSU5FX187CiAJCQlnb3RvIGFib3J0X3JldHVybjsKIAkJfQogCX0KQEAgLTU1OCw3ICs1NDEsNiBAQAogCWVycm9yID0gWEZTX0RJUl9SRU1PVkVOQU1FKG1wLCB0cCwgc3JjX2RwLCBzcmNfbmFtZSwgc3JjX25hbWVsZW4sCiAJCQlzcmNfaXAtPmlfaW5vLCAmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsIHNwYWNlcmVzKTsKIAlpZiAoZXJyb3IpIHsKLQkJcmVuYW1lX3doaWNoX2Vycm9yX3JldHVybiA9IF9fTElORV9fOwogCQlnb3RvIGFib3J0X3JldHVybjsKIAl9CiAJeGZzX2ljaGd0aW1lKHNyY19kcCwgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5jIGIvZnMveGZzL3hmc190cmFucy5jCmluZGV4IDNkYjBlMjIuLjA2ZGZjYTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuYworKysgYi9mcy94ZnMveGZzX3RyYW5zLmMKQEAgLTMzMiwyNSArMzMyLDYgQEAKIAogCiAvKgotICogVGhpcyBpcyBjYWxsZWQgdG8gc2V0IHRoZSBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBnaXZlbgotICogdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIHRvIGRpc2suICBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBhbmQgdGhlCi0gKiBhcmd1bWVudCBwb2ludGVyIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayByb3V0aW5lLgotICoKLSAqIE9ubHkgb25lIGNhbGxiYWNrIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYW55IHNpbmdsZSB0cmFuc2FjdGlvbi4KLSAqLwotdm9pZAoteGZzX3RyYW5zX2NhbGxiYWNrKAotCXhmc190cmFuc190CQkqdHAsCi0JeGZzX3RyYW5zX2NhbGxiYWNrX3QJY2FsbGJhY2ssCi0Jdm9pZAkJCSphcmcpCi17Ci0JQVNTRVJUKHRwLT50X2NhbGxiYWNrID09IE5VTEwpOwotCXRwLT50X2NhbGxiYWNrID0gY2FsbGJhY2s7Ci0JdHAtPnRfY2FsbGFyZyA9IGFyZzsKLX0KLQotCi0vKgogICogUmVjb3JkIHRoZSBpbmRpY2F0ZWQgY2hhbmdlIHRvIHRoZSBnaXZlbiBmaWVsZCBmb3IgYXBwbGljYXRpb24KICAqIHRvIHRoZSBmaWxlIHN5c3RlbSdzIHN1cGVyYmxvY2sgd2hlbiB0aGUgdHJhbnNhY3Rpb24gY29tbWl0cy4KICAqIEZvciBub3csIGp1c3Qgc3RvcmUgdGhlIGNoYW5nZSBpbiB0aGUgdHJhbnNhY3Rpb24gc3RydWN0dXJlLgpAQCAtNTUxLDcgKzUzMiw3IEBACiAgKgogICogVGhpcyBpcyBkb25lIGVmZmljaWVudGx5IHdpdGggYSBzaW5nbGUgY2FsbCB0byB4ZnNfbW9kX2luY29yZV9zYl9iYXRjaCgpLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX3RyYW5zX3VucmVzZXJ2ZV9hbmRfbW9kX3NiKAogCXhmc190cmFuc190CSp0cCkKIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuaCBiL2ZzL3hmcy94ZnNfdHJhbnMuaAppbmRleCBiZDM3Y2NiLi5lYzU0MWQ2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmgKKysrIGIvZnMveGZzL3hmc190cmFucy5oCkBAIC05ODcsOCArOTg3LDYgQEAKIHhmc190cmFuc190CSp4ZnNfdHJhbnNfZHVwKHhmc190cmFuc190ICopOwogaW50CQl4ZnNfdHJhbnNfcmVzZXJ2ZSh4ZnNfdHJhbnNfdCAqLCB1aW50LCB1aW50LCB1aW50LAogCQkJCSAgdWludCwgdWludCk7Ci12b2lkCQl4ZnNfdHJhbnNfY2FsbGJhY2soeGZzX3RyYW5zX3QgKiwKLQkJCQkgICB2b2lkICgqKSh4ZnNfdHJhbnNfdCAqLCB2b2lkICopLCB2b2lkICopOwogdm9pZAkJeGZzX3RyYW5zX21vZF9zYih4ZnNfdHJhbnNfdCAqLCB1aW50LCBsb25nKTsKIHN0cnVjdCB4ZnNfYnVmCSp4ZnNfdHJhbnNfZ2V0X2J1Zih4ZnNfdHJhbnNfdCAqLCBzdHJ1Y3QgeGZzX2J1ZnRhcmcgKiwgeGZzX2RhZGRyX3QsCiAJCQkJICAgaW50LCB1aW50KTsKQEAgLTEwMTAsNyArMTAwOCw2IEBACiAJCQkgICAgICAgeGZzX2lub190ICwgdWludCwgdWludCwgc3RydWN0IHhmc19pbm9kZSAqKik7CiB2b2lkCQl4ZnNfdHJhbnNfaWpvaW4oeGZzX3RyYW5zX3QgKiwgc3RydWN0IHhmc19pbm9kZSAqLCB1aW50KTsKIHZvaWQJCXhmc190cmFuc19paG9sZCh4ZnNfdHJhbnNfdCAqLCBzdHJ1Y3QgeGZzX2lub2RlICopOwotdm9pZAkJeGZzX3RyYW5zX2lob2xkX3JlbGVhc2UoeGZzX3RyYW5zX3QgKiwgc3RydWN0IHhmc19pbm9kZSAqKTsKIHZvaWQJCXhmc190cmFuc19sb2dfYnVmKHhmc190cmFuc190ICosIHN0cnVjdCB4ZnNfYnVmICosIHVpbnQsIHVpbnQpOwogdm9pZAkJeGZzX3RyYW5zX2xvZ19pbm9kZSh4ZnNfdHJhbnNfdCAqLCBzdHJ1Y3QgeGZzX2lub2RlICosIHVpbnQpOwogc3RydWN0IHhmc19lZmlfbG9nX2l0ZW0JKnhmc190cmFuc19nZXRfZWZpKHhmc190cmFuc190ICosIHVpbnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19idWYuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKaW5kZXggYTk2ODJiOS4uMTQ0ZGE3YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19idWYuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCkBAIC05NzYsNiArOTc2LDcgQEAKIAlBU1NFUlQoWEZTX0JVRl9GU1BSSVZBVEUyKGJwLCB4ZnNfdHJhbnNfdCAqKSA9PSB0cCk7CiAJQVNTRVJUKFhGU19CVUZfRlNQUklWQVRFKGJwLCB2b2lkICopICE9IE5VTEwpOwogCUFTU0VSVCh0eXBlID09IFhGU19CTElfVURRVU9UX0JVRiB8fAorCSAgICAgICB0eXBlID09IFhGU19CTElfUERRVU9UX0JVRiB8fAogCSAgICAgICB0eXBlID09IFhGU19CTElfR0RRVU9UX0JVRik7CiAKIAliaXAgPSBYRlNfQlVGX0ZTUFJJVkFURShicCwgeGZzX2J1Zl9sb2dfaXRlbV90ICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19pbm9kZS5jIGIvZnMveGZzL3hmc190cmFuc19pbm9kZS5jCmluZGV4IGUyYzM3MDYuLjdlNzYzMWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2lub2RlLmMKQEAgLTI1MywyNCArMjUzLDYgQEAKIAlpcC0+aV9pdGVtcC0+aWxpX2ZsYWdzIHw9IFhGU19JTElfSE9MRDsKIH0KIAotLyoKLSAqIENhbmNlbCB0aGUgcHJldmlvdXMgaW5vZGUgaG9sZCByZXF1ZXN0IG1hZGUgb24gdGhpcyBpbm9kZQotICogZm9yIHRoaXMgdHJhbnNhY3Rpb24uCi0gKi8KLS8qQVJHU1VTRUQqLwotdm9pZAoteGZzX3RyYW5zX2lob2xkX3JlbGVhc2UoCi0JeGZzX3RyYW5zX3QJKnRwLAotCXhmc19pbm9kZV90CSppcCkKLXsKLQlBU1NFUlQoaXAtPmlfdHJhbnNwID09IHRwKTsKLQlBU1NFUlQoaXAtPmlfaXRlbXAgIT0gTlVMTCk7Ci0JQVNTRVJUKGlzbXJsb2NrZWQoJmlwLT5pX2xvY2ssIE1SX1VQREFURSkpOwotCUFTU0VSVChpcC0+aV9pdGVtcC0+aWxpX2ZsYWdzICYgWEZTX0lMSV9IT0xEKTsKLQotCWlwLT5pX2l0ZW1wLT5pbGlfZmxhZ3MgJj0gflhGU19JTElfSE9MRDsKLX0KLQogCiAvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gbWFyayB0aGUgZmllbGRzIGluZGljYXRlZCBpbiBmaWVsZG1hc2sgYXMgbmVlZGluZwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190eXBlcy5oIGIvZnMveGZzL3hmc190eXBlcy5oCmluZGV4IGU0YmY3MTEuLjE2ZjUzNzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHlwZXMuaAorKysgYi9mcy94ZnMveGZzX3R5cGVzLmgKQEAgLTU1LDcgKzU1LDcgQEAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludAlfX3VpbnQ2NF90OwogCiB0eXBlZGVmIGVudW0geyBCX0ZBTFNFLEJfVFJVRSB9CWJvb2xlYW5fdDsKLXR5cGVkZWYgX19pbnQ2NF90CQlwcmlkX3Q7CQkvKiBwcm9qZWN0IElEICovCit0eXBlZGVmIF9fdWludDMyX3QJCXByaWRfdDsJCS8qIHByb2plY3QgSUQgKi8KIHR5cGVkZWYgX191aW50MzJfdAkJaW5zdF90OwkJLyogYW4gaW5zdHJ1Y3Rpb24gKi8KIAogdHlwZWRlZiBfX3M2NAkJCXhmc19vZmZfdDsJLyogPGZpbGUgb2Zmc2V0PiB0eXBlICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3V0aWxzLmMgYi9mcy94ZnMveGZzX3V0aWxzLmMKaW5kZXggZDFmODE0Ni4uMTEzNTFmMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc191dGlscy5jCisrKyBiL2ZzL3hmcy94ZnNfdXRpbHMuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJCWlmIChpcC0+aV9pbm8gIT0gbXAtPm1fc2Iuc2JfdXF1b3Rpbm8pCiAJCQlBU1NFUlQoaXAtPmlfdWRxdW90KTsKIAl9Ci0JaWYgKFhGU19JU19HUVVPVEFfT04obXApKSB7CisJaWYgKFhGU19JU19PUVVPVEFfT04obXApKSB7CiAJCWlmIChpcC0+aV9pbm8gIT0gbXAtPm1fc2Iuc2JfZ3F1b3Rpbm8pCiAJCQlBU1NFUlQoaXAtPmlfZ2RxdW90KTsKIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zmc29wcy5jIGIvZnMveGZzL3hmc192ZnNvcHMuYwppbmRleCBiNTM3MzY2Li40MmJjYzAyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zmc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdmZzb3BzLmMKQEAgLTM2OCwxNiArMzY4LDYgQEAKIAl9CiAKIAkvKgotCSAqIGRpc2FsbG93IG1vdW50IGF0dGVtcHRzIHdpdGggKElSSVgpIHByb2plY3QgcXVvdGEgZW5hYmxlZAotCSAqLwotCWlmIChYRlNfU0JfVkVSU0lPTl9IQVNRVU9UQSgmbXAtPm1fc2IpICYmCi0JICAgIChtcC0+bV9zYi5zYl9xZmxhZ3MgJiBYRlNfUFFVT1RBX0FDQ1QpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkiWEZTOiBjYW5ub3QgbW91bnQgYSBmaWxlc3lzdGVtIHdpdGggSVJJWCBwcm9qZWN0IHF1b3RhIGVuYWJsZWQiKTsKLQkJcmV0dXJuIFhGU19FUlJPUihFTk9TWVMpOwotCX0KLQotCS8qCiAJICogY2hlY2sgZm9yIHNoYXJlZCBtb3VudC4KIAkgKi8KIAlpZiAoYXAtPmZsYWdzICYgWEZTTU5UX1NIQVJFRCkgewpAQCAtNjIyLDcgKzYxMiwzNCBAQAogCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOwogfQogCi0jZGVmaW5lIFJFTU9VTlRfUkVBRE9OTFlfRkxBR1MJKFNZTkNfUkVNT1VOVHxTWU5DX0FUVFJ8U1lOQ19XQUlUKQorU1RBVElDIGludAoreGZzX3F1aWVzY2VfZnMoCisJeGZzX21vdW50X3QJCSptcCkKK3sKKwlpbnQJCQljb3VudCA9IDAsIHBpbmNvdW50OworCQkKKwl4ZnNfcmVmY2FjaGVfcHVyZ2VfbXAobXApOworCXhmc19mbHVzaF9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3AsIDApOworCXhmc19maW5pc2hfcmVjbGFpbV9hbGwobXAsIDApOworCisJLyogVGhpcyBsb29wIG11c3QgcnVuIGF0IGxlYXN0IHR3aWNlLgorCSAqIFRoZSBmaXJzdCBpbnN0YW5jZSBvZiB0aGUgbG9vcCB3aWxsIGZsdXNoCisJICogbW9zdCBtZXRhIGRhdGEgYnV0IHRoYXQgd2lsbCBnZW5lcmF0ZSBtb3JlCisJICogbWV0YSBkYXRhICh0eXBpY2FsbHkgZGlyZWN0b3J5IHVwZGF0ZXMpLgorCSAqIFdoaWNoIHRoZW4gbXVzdCBiZSBmbHVzaGVkIGFuZCBsb2dnZWQgYmVmb3JlCisJICogd2UgY2FuIHdyaXRlIHRoZSB1bm1vdW50IHJlY29yZC4KKwkgKi8gCisJZG8geworCQl4ZnNfc3luY3N1YihtcCwgU1lOQ19SRU1PVU5UfFNZTkNfQVRUUnxTWU5DX1dBSVQsIDAsIE5VTEwpOworCQlwaW5jb3VudCA9IHhmc19mbHVzaF9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3AsIDEpOworCQlpZiAoIXBpbmNvdW50KSB7CisJCQlkZWxheSg1MCk7CisJCQljb3VudCsrOworCQl9CisJfSB3aGlsZSAoY291bnQgPCAyKTsKKworCXJldHVybiAwOworfQogCiBTVEFUSUMgaW50CiB4ZnNfbW50dXBkYXRlKApAQCAtNjMyLDggKzY0OSw3IEBACiB7CiAJc3RydWN0IHZmcwkqdmZzcCA9IGJodnRvdmZzKGJkcCk7CiAJeGZzX21vdW50X3QJKm1wID0gWEZTX0JIVlRPTShiZHApOwotCWludAkJcGluY291bnQsIGVycm9yOwotCWludAkJY291bnQgPSAwOworCWludAkJZXJyb3I7CiAKIAlpZiAoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfTk9BVElNRSkKIAkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX05PQVRJTUU7CkBAIC02NDUsMjUgKzY2MSw3IEBACiAJfQogCiAJaWYgKCpmbGFncyAmIE1TX1JET05MWSkgewotCQl4ZnNfcmVmY2FjaGVfcHVyZ2VfbXAobXApOwotCQl4ZnNfZmx1c2hfYnVmdGFyZyhtcC0+bV9kZGV2X3RhcmdwLCAwKTsKLQkJeGZzX2ZpbmlzaF9yZWNsYWltX2FsbChtcCwgMCk7Ci0KLQkJLyogVGhpcyBsb29wIG11c3QgcnVuIGF0IGxlYXN0IHR3aWNlLgotCQkgKiBUaGUgZmlyc3QgaW5zdGFuY2Ugb2YgdGhlIGxvb3Agd2lsbCBmbHVzaAotCQkgKiBtb3N0IG1ldGEgZGF0YSBidXQgdGhhdCB3aWxsIGdlbmVyYXRlIG1vcmUKLQkJICogbWV0YSBkYXRhICh0eXBpY2FsbHkgZGlyZWN0b3J5IHVwZGF0ZXMpLgotCQkgKiBXaGljaCB0aGVuIG11c3QgYmUgZmx1c2hlZCBhbmQgbG9nZ2VkIGJlZm9yZQotCQkgKiB3ZSBjYW4gd3JpdGUgdGhlIHVubW91bnQgcmVjb3JkLgotCQkgKi8gCi0JCWRvIHsKLQkJCVZGU19TWU5DKHZmc3AsIFJFTU9VTlRfUkVBRE9OTFlfRkxBR1MsIE5VTEwsIGVycm9yKTsKLQkJCXBpbmNvdW50ID0geGZzX2ZsdXNoX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCwgMSk7Ci0JCQlpZiAoIXBpbmNvdW50KSB7Ci0JCQkJZGVsYXkoNTApOwotCQkJCWNvdW50Kys7Ci0JCQl9Ci0JCX0gd2hpbGUgKGNvdW50IDwgMik7CisJCXhmc19xdWllc2NlX2ZzKG1wKTsKIAogCQkvKiBPayBub3cgd3JpdGUgb3V0IGFuIHVubW91bnQgcmVjb3JkICovCiAJCXhmc19sb2dfdW5tb3VudF93cml0ZShtcCk7CkBAIC04NzksMTAgKzg3NywxMiBAQAogCWludAkJZmxhZ3MsCiAJY3JlZF90CQkqY3JlZHApCiB7Ci0JeGZzX21vdW50X3QJKm1wOworCXhmc19tb3VudF90CSptcCA9IFhGU19CSFZUT00oYmRwKTsKIAotCW1wID0gWEZTX0JIVlRPTShiZHApOwotCXJldHVybiAoeGZzX3N5bmNzdWIobXAsIGZsYWdzLCAwLCBOVUxMKSk7CisJaWYgKHVubGlrZWx5KGZsYWdzID09IFNZTkNfUVVJRVNDRSkpCisJCXJldHVybiB4ZnNfcXVpZXNjZV9mcyhtcCk7CisJZWxzZQorCQlyZXR1cm4geGZzX3N5bmNzdWIobXAsIGZsYWdzLCAwLCBOVUxMKTsKIH0KIAogLyoKQEAgLTE2ODEsNyArMTY4MSw3IEBACiAJcmV0dXJuIHNpbXBsZV9zdHJ0b3VsKGNwLCBlbmRwLCBiYXNlKSA8PCBzaGlmdF9sZWZ0X2ZhY3RvcjsKIH0KIAotaW50CitTVEFUSUMgaW50CiB4ZnNfcGFyc2VhcmdzKAogCXN0cnVjdCBiaHZfZGVzYwkJKmJodiwKIAljaGFyCQkJKm9wdGlvbnMsCkBAIC0xODY3LDcgKzE4NjcsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19zaG93YXJncygKIAlzdHJ1Y3QgYmh2X2Rlc2MJCSpiaHYsCiAJc3RydWN0IHNlcV9maWxlCQkqbSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCAyNWE1MjY2Li4xMzc3Yzg2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzUxLDIxICszNTEsMjggQEAKIAkgKiBJZiB0aGUgSURzIGRvIGNoYW5nZSBiZWZvcmUgd2UgdGFrZSB0aGUgaWxvY2ssIHdlJ3JlIGNvdmVyZWQKIAkgKiBiZWNhdXNlIHRoZSBpXypkcXVvdCBmaWVsZHMgd2lsbCBnZXQgdXBkYXRlZCBhbnl3YXkuCiAJICovCi0JaWYgKFhGU19JU19RVU9UQV9PTihtcCkgJiYgKG1hc2sgJiAoWEZTX0FUX1VJRHxYRlNfQVRfR0lEKSkpIHsKKwlpZiAoWEZTX0lTX1FVT1RBX09OKG1wKSAmJgorCSAgICAobWFzayAmIChYRlNfQVRfVUlEfFhGU19BVF9HSUR8WEZTX0FUX1BST0pJRCkpKSB7CiAJCXVpbnQJcWZsYWdzID0gMDsKIAotCQlpZiAobWFzayAmIFhGU19BVF9VSUQpIHsKKwkJaWYgKChtYXNrICYgWEZTX0FUX1VJRCkgJiYgWEZTX0lTX1VRVU9UQV9PTihtcCkpIHsKIAkJCXVpZCA9IHZhcC0+dmFfdWlkOwogCQkJcWZsYWdzIHw9IFhGU19RTU9QVF9VUVVPVEE7CiAJCX0gZWxzZSB7CiAJCQl1aWQgPSBpcC0+aV9kLmRpX3VpZDsKIAkJfQotCQlpZiAobWFzayAmIFhGU19BVF9HSUQpIHsKKwkJaWYgKChtYXNrICYgWEZTX0FUX0dJRCkgJiYgWEZTX0lTX0dRVU9UQV9PTihtcCkpIHsKIAkJCWdpZCA9IHZhcC0+dmFfZ2lkOwogCQkJcWZsYWdzIHw9IFhGU19RTU9QVF9HUVVPVEE7CiAJCX0gIGVsc2UgewogCQkJZ2lkID0gaXAtPmlfZC5kaV9naWQ7CiAJCX0KKwkJaWYgKChtYXNrICYgWEZTX0FUX1BST0pJRCkgJiYgWEZTX0lTX1BRVU9UQV9PTihtcCkpIHsKKwkJCXByb2ppZCA9IHZhcC0+dmFfcHJvamlkOworCQkJcWZsYWdzIHw9IFhGU19RTU9QVF9QUVVPVEE7CisJCX0gIGVsc2UgeworCQkJcHJvamlkID0gaXAtPmlfZC5kaV9wcm9qaWQ7CisJCX0KIAkJLyoKIAkJICogV2UgdGFrZSBhIHJlZmVyZW5jZSB3aGVuIHdlIGluaXRpYWxpemUgdWRxcCBhbmQgZ2RxcCwKIAkJICogc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgd2UgbmV2ZXIgYmxpbmRseSBkb3VibGUgdHJpcCBvbgpAQCAtMzczLDcgKzM4MCw4IEBACiAJCSAqLwogCQlBU1NFUlQodWRxcCA9PSBOVUxMKTsKIAkJQVNTRVJUKGdkcXAgPT0gTlVMTCk7Ci0JCWNvZGUgPSBYRlNfUU1fRFFWT1BBTExPQyhtcCwgaXAsIHVpZCxnaWQsIHFmbGFncywgJnVkcXAsICZnZHFwKTsKKwkJY29kZSA9IFhGU19RTV9EUVZPUEFMTE9DKG1wLCBpcCwgdWlkLCBnaWQsIHByb2ppZCwgcWZsYWdzLAorCQkJCQkgJnVkcXAsICZnZHFwKTsKIAkJaWYgKGNvZGUpCiAJCQlyZXR1cm4gKGNvZGUpOwogCX0KQEAgLTQ5OSw4ICs1MDcsNiBAQAogCQkgKiB0aGF0IHRoZSBncm91cCBJRCBzdXBwbGllZCB0byB0aGUgY2hvd24oKSBmdW5jdGlvbgogCQkgKiBzaGFsbCBiZSBlcXVhbCB0byBlaXRoZXIgdGhlIGdyb3VwIElEIG9yIG9uZSBvZiB0aGUKIAkJICogc3VwcGxlbWVudGFyeSBncm91cCBJRHMgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4KLQkJICoKLQkJICogWFhYOiBIb3cgZG9lcyByZXN0cmljdGVkX2Nob3duIGFmZmVjdCBwcm9qaWQ/CiAJCSAqLwogCQlpZiAocmVzdHJpY3RlZF9jaG93biAmJgogCQkgICAgKGl1aWQgIT0gdWlkIHx8IChpZ2lkICE9IGdpZCAmJgpAQCAtNTEwLDEwICs1MTYsMTEgQEAKIAkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQl9CiAJCS8qCi0JCSAqIERvIGEgcXVvdGEgcmVzZXJ2YXRpb24gb25seSBpZiB1aWQgb3IgZ2lkIGlzIGFjdHVhbGx5CisJCSAqIERvIGEgcXVvdGEgcmVzZXJ2YXRpb24gb25seSBpZiB1aWQvcHJvamlkL2dpZCBpcyBhY3R1YWxseQogCQkgKiBnb2luZyB0byBjaGFuZ2UuCiAJCSAqLwogCQlpZiAoKFhGU19JU19VUVVPVEFfT04obXApICYmIGl1aWQgIT0gdWlkKSB8fAorCQkgICAgKFhGU19JU19QUVVPVEFfT04obXApICYmIGlwcm9qaWQgIT0gcHJvamlkKSB8fAogCQkgICAgKFhGU19JU19HUVVPVEFfT04obXApICYmIGlnaWQgIT0gZ2lkKSkgewogCQkJQVNTRVJUKHRwKTsKIAkJCWNvZGUgPSBYRlNfUU1fRFFWT1BDSE9XTlJFU1YobXAsIHRwLCBpcCwgdWRxcCwgZ2RxcCwKQEAgLTc3NCw2ICs3ODEsNyBAQAogCQl9CiAJCWlmIChpZ2lkICE9IGdpZCkgewogCQkJaWYgKFhGU19JU19HUVVPVEFfT04obXApKSB7CisJCQkJQVNTRVJUKCFYRlNfSVNfUFFVT1RBX09OKG1wKSk7CiAJCQkJQVNTRVJUKG1hc2sgJiBYRlNfQVRfR0lEKTsKIAkJCQlBU1NFUlQoZ2RxcCk7CiAJCQkJb2xkZHF1b3QyID0gWEZTX1FNX0RRVk9QQ0hPV04obXAsIHRwLCBpcCwKQEAgLTc4Miw2ICs3OTAsMTMgQEAKIAkJCWlwLT5pX2QuZGlfZ2lkID0gZ2lkOwogCQl9CiAJCWlmIChpcHJvamlkICE9IHByb2ppZCkgeworCQkJaWYgKFhGU19JU19QUVVPVEFfT04obXApKSB7CisJCQkJQVNTRVJUKCFYRlNfSVNfR1FVT1RBX09OKG1wKSk7CisJCQkJQVNTRVJUKG1hc2sgJiBYRlNfQVRfUFJPSklEKTsKKwkJCQlBU1NFUlQoZ2RxcCk7CisJCQkJb2xkZHF1b3QyID0gWEZTX1FNX0RRVk9QQ0hPV04obXAsIHRwLCBpcCwKKwkJCQkJCQkmaXAtPmlfZ2RxdW90LCBnZHFwKTsKKwkJCX0KIAkJCWlwLT5pX2QuZGlfcHJvamlkID0gcHJvamlkOwogCQkJLyoKIAkJCSAqIFdlIG1heSBoYXZlIHRvIHJldiB0aGUgaW5vZGUgYXMgd2VsbCBhcwpAQCAtODQzLDYgKzg1OCw4IEBACiAJCQkJZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19OT0FUSU1FOwogCQkJaWYgKHZhcC0+dmFfeGZsYWdzICYgWEZTX1hGTEFHX05PRFVNUCkKIAkJCQlkaV9mbGFncyB8PSBYRlNfRElGTEFHX05PRFVNUDsKKwkJCWlmICh2YXAtPnZhX3hmbGFncyAmIFhGU19YRkxBR19QUk9KSU5IRVJJVCkKKwkJCQlkaV9mbGFncyB8PSBYRlNfRElGTEFHX1BST0pJTkhFUklUOwogCQkJaWYgKChpcC0+aV9kLmRpX21vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpIHsKIAkJCQlpZiAodmFwLT52YV94ZmxhZ3MgJiBYRlNfWEZMQUdfUlRJTkhFUklUKQogCQkJCQlkaV9mbGFncyB8PSBYRlNfRElGTEFHX1JUSU5IRVJJVDsKQEAgLTE4OTgsNyArMTkxNSw5IEBACiAJLyogUmV0dXJuIHRocm91Z2ggc3RkX3JldHVybiBhZnRlciB0aGlzIHBvaW50LiAqLwogCiAJdWRxcCA9IGdkcXAgPSBOVUxMOwotCWlmICh2YXAtPnZhX21hc2sgJiBYRlNfQVRfUFJPSklEKQorCWlmIChkcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19QUk9KSU5IRVJJVCkKKwkJcHJpZCA9IGRwLT5pX2QuZGlfcHJvamlkOworCWVsc2UgaWYgKHZhcC0+dmFfbWFzayAmIFhGU19BVF9QUk9KSUQpCiAJCXByaWQgPSAoeGZzX3ByaWRfdCl2YXAtPnZhX3Byb2ppZDsKIAllbHNlCiAJCXByaWQgPSAoeGZzX3ByaWRfdClkZmx0cHJpZDsKQEAgLTE5MDcsNyArMTkyNiw3IEBACiAJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbGxvY2F0ZWQgZHF1b3Qocykgb24gZGlzay4KIAkgKi8KIAllcnJvciA9IFhGU19RTV9EUVZPUEFMTE9DKG1wLCBkcCwKLQkJCWN1cnJlbnRfZnN1aWQoY3JlZHApLCBjdXJyZW50X2ZzZ2lkKGNyZWRwKSwKKwkJCWN1cnJlbnRfZnN1aWQoY3JlZHApLCBjdXJyZW50X2ZzZ2lkKGNyZWRwKSwgcHJpZCwKIAkJCVhGU19RTU9QVF9RVU9UQUxMfFhGU19RTU9QVF9JTkhFUklULCAmdWRxcCwgJmdkcXApOwogCWlmIChlcnJvcikKIAkJZ290byBzdGRfcmV0dXJuOwpAQCAtMjYwNCwxNyArMjYyMyw3IEBACiAJaWYgKHNyY192cC0+dl90eXBlID09IFZESVIpCiAJCXJldHVybiBYRlNfRVJST1IoRVBFUk0pOwogCi0JLyoKLQkgKiBGb3Igbm93LCBtYW51YWxseSBmaW5kIHRoZSBYRlMgYmVoYXZpb3IgZGVzY3JpcHRvciBmb3IKLQkgKiB0aGUgc291cmNlIHZub2RlLiAgSWYgaXQgZG9lc24ndCBleGlzdCB0aGVuIHNvbWV0aGluZwotCSAqIGlzIHdyb25nIGFuZCB3ZSBzaG91bGQganVzdCByZXR1cm4gYW4gZXJyb3IuCi0JICogRXZlbnR1YWxseSB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGxpbmsgaXMgZ29pbmcgdG8KLQkgKiB3b3JrIGluIHRoZSBmYWNlIG9mIHN0YWNrZWQgdm5vZGVzLgotCSAqLwogCXNyY19iZHAgPSB2bl9iaHZfbG9va3VwX3VubG9ja2VkKFZOX0JIVl9IRUFEKHNyY192cCksICZ4ZnNfdm5vZGVvcHMpOwotCWlmIChzcmNfYmRwID09IE5VTEwpIHsKLQkJcmV0dXJuIFhGU19FUlJPUihFWERFVik7Ci0JfQogCXNpcCA9IFhGU19CSFZUT0koc3JjX2JkcCk7CiAJdGRwID0gWEZTX0JIVlRPSSh0YXJnZXRfZGlyX2JkcCk7CiAJbXAgPSB0ZHAtPmlfbW91bnQ7CkBAIC0yNjgxLDYgKzI2OTAsMTcgQEAKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJfQogCisJLyoKKwkgKiBJZiB3ZSBhcmUgdXNpbmcgcHJvamVjdCBpbmhlcml0YW5jZSwgd2Ugb25seSBhbGxvdyBoYXJkIGxpbmsKKwkgKiBjcmVhdGlvbiBpbiBvdXIgdHJlZSB3aGVuIHRoZSBwcm9qZWN0IElEcyBhcmUgdGhlIHNhbWU7IGVsc2UKKwkgKiB0aGUgdHJlZSBxdW90YSBtZWNoYW5pc20gY291bGQgYmUgY2lyY3VtdmVudGVkLgorCSAqLworCWlmICh1bmxpa2VseSgodGRwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKSAmJgorCQkgICAgICh0ZHAtPmlfZC5kaV9wcm9qaWQgIT0gc2lwLT5pX2QuZGlfcHJvamlkKSkpIHsKKwkJZXJyb3IgPSBYRlNfRVJST1IoRVBFUk0pOworCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CisKIAlpZiAocmVzYmxrcyA9PSAwICYmCiAJICAgIChlcnJvciA9IFhGU19ESVJfQ0FORU5URVIobXAsIHRwLCB0ZHAsIHRhcmdldF9uYW1lLAogCQkJdGFyZ2V0X25hbWVsZW4pKSkKQEAgLTI4MDMsNyArMjgyMyw5IEBACiAKIAltcCA9IGRwLT5pX21vdW50OwogCXVkcXAgPSBnZHFwID0gTlVMTDsKLQlpZiAodmFwLT52YV9tYXNrICYgWEZTX0FUX1BST0pJRCkKKwlpZiAoZHAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfUFJPSklOSEVSSVQpCisJCXByaWQgPSBkcC0+aV9kLmRpX3Byb2ppZDsKKwllbHNlIGlmICh2YXAtPnZhX21hc2sgJiBYRlNfQVRfUFJPSklEKQogCQlwcmlkID0gKHhmc19wcmlkX3QpdmFwLT52YV9wcm9qaWQ7CiAJZWxzZQogCQlwcmlkID0gKHhmc19wcmlkX3QpZGZsdHByaWQ7CkBAIC0yODEyLDcgKzI4MzQsNyBAQAogCSAqIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYWxsb2NhdGVkIGRxdW90KHMpIG9uIGRpc2suCiAJICovCiAJZXJyb3IgPSBYRlNfUU1fRFFWT1BBTExPQyhtcCwgZHAsCi0JCQljdXJyZW50X2ZzdWlkKGNyZWRwKSwgY3VycmVudF9mc2dpZChjcmVkcCksCisJCQljdXJyZW50X2ZzdWlkKGNyZWRwKSwgY3VycmVudF9mc2dpZChjcmVkcCksIHByaWQsCiAJCQlYRlNfUU1PUFRfUVVPVEFMTCB8IFhGU19RTU9QVF9JTkhFUklULCAmdWRxcCwgJmdkcXApOwogCWlmIChlcnJvcikKIAkJZ290byBzdGRfcmV0dXJuOwpAQCAtMzM1Nyw3ICszMzc5LDkgQEAKIAkvKiBSZXR1cm4gdGhyb3VnaCBzdGRfcmV0dXJuIGFmdGVyIHRoaXMgcG9pbnQuICovCiAKIAl1ZHFwID0gZ2RxcCA9IE5VTEw7Ci0JaWYgKHZhcC0+dmFfbWFzayAmIFhGU19BVF9QUk9KSUQpCisJaWYgKGRwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKQorCQlwcmlkID0gZHAtPmlfZC5kaV9wcm9qaWQ7CisJZWxzZSBpZiAodmFwLT52YV9tYXNrICYgWEZTX0FUX1BST0pJRCkKIAkJcHJpZCA9ICh4ZnNfcHJpZF90KXZhcC0+dmFfcHJvamlkOwogCWVsc2UKIAkJcHJpZCA9ICh4ZnNfcHJpZF90KWRmbHRwcmlkOwpAQCAtMzM2Niw3ICszMzkwLDcgQEAKIAkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGFsbG9jYXRlZCBkcXVvdChzKSBvbiBkaXNrLgogCSAqLwogCWVycm9yID0gWEZTX1FNX0RRVk9QQUxMT0MobXAsIGRwLAotCQkJY3VycmVudF9mc3VpZChjcmVkcCksIGN1cnJlbnRfZnNnaWQoY3JlZHApLAorCQkJY3VycmVudF9mc3VpZChjcmVkcCksIGN1cnJlbnRfZnNnaWQoY3JlZHApLCBwcmlkLAogCQkJWEZTX1FNT1BUX1FVT1RBTEwgfCBYRlNfUU1PUFRfSU5IRVJJVCwgJnVkcXAsICZnZHFwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gc3RkX3JldHVybjsKQEAgLTQwMjgsNyArNDA1Miw3IEBACiAgKiAgICAgIGVycm5vIG9uIGVycm9yCiAgKgogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19hbGxvY19maWxlX3NwYWNlKAogCXhmc19pbm9kZV90CQkqaXAsCiAJeGZzX29mZl90CQlvZmZzZXQsCkBAIC00MTUxLDkgKzQxNzUsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCWVycm9yID0gWEZTX1RSQU5TX1JFU0VSVkVfUVVPVEFfQllEUVVPVFMobXAsIHRwLAotCQkJCWlwLT5pX3VkcXVvdCwgaXAtPmlfZ2RxdW90LCByZXNibGtzLCAwLCBydCA/Ci0JCQkJWEZTX1FNT1BUX1JFU19SVEJMS1MgOiBYRlNfUU1PUFRfUkVTX1JFR0JMS1MpOworCQllcnJvciA9IFhGU19UUkFOU19SRVNFUlZFX1FVT1RBKG1wLCB0cCwKKwkJCQlpcC0+aV91ZHF1b3QsIGlwLT5pX2dkcXVvdCwgcmVzYmxrcywgMCwgMCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZXJyb3IxOwogCkBAIC00MzA1LDYgKzQzMjgsNyBAQAogCXhmc19vZmZfdAkJbGVuLAogCWludAkJCWF0dHJfZmxhZ3MpCiB7CisJdm5vZGVfdAkJCSp2cDsKIAlpbnQJCQljb21taXR0ZWQ7CiAJaW50CQkJZG9uZTsKIAl4ZnNfb2ZmX3QJCWVuZF9kbWlfb2Zmc2V0OwpAQCAtNDMyNSw5ICs0MzQ5LDExIEBACiAJeGZzX3RyYW5zX3QJCSp0cDsKIAlpbnQJCQluZWVkX2lvbG9jayA9IDE7CiAKLQl2bl90cmFjZV9lbnRyeShYRlNfSVRPVihpcCksIF9fRlVOQ1RJT05fXywgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOworCXZwID0gWEZTX0lUT1YoaXApOwogCW1wID0gaXAtPmlfbW91bnQ7CiAKKwl2bl90cmFjZV9lbnRyeSh2cCwgX19GVU5DVElPTl9fLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcyk7CisKIAlpZiAoKGVycm9yID0gWEZTX1FNX0RRQVRUQUNIKG1wLCBpcCwgMCkpKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTQzNDQsNyArNDM3MCw3IEBACiAJICAgIERNX0VWRU5UX0VOQUJMRUQoWEZTX01UT1ZGUyhtcCksIGlwLCBETV9FVkVOVF9XUklURSkpIHsKIAkJaWYgKGVuZF9kbWlfb2Zmc2V0ID4gaXAtPmlfZC5kaV9zaXplKQogCQkJZW5kX2RtaV9vZmZzZXQgPSBpcC0+aV9kLmRpX3NpemU7Ci0JCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfV1JJVEUsIFhGU19JVE9WKGlwKSwKKwkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9XUklURSwgdnAsCiAJCQkJb2Zmc2V0LCBlbmRfZG1pX29mZnNldCAtIG9mZnNldCwKIAkJCQlBVF9ERUxBWV9GTEFHKGF0dHJfZmxhZ3MpLCBOVUxMKTsKIAkJaWYgKGVycm9yKQpAQCAtNDM2Myw3ICs0Mzg5LDE0IEBACiAJaW9mZnNldCA9IG9mZnNldCAmIH4ocm91bmRpbmcgLSAxKTsKIAlpZiAoaWxlbiAmIChyb3VuZGluZyAtIDEpKQogCQlpbGVuID0gKGlsZW4gKyByb3VuZGluZykgJiB+KHJvdW5kaW5nIC0gMSk7Ci0JeGZzX2ludmFsX2NhY2hlZF9wYWdlcyhYRlNfSVRPVihpcCksICYoaXAtPmlfaW9jb3JlKSwgaW9mZnNldCwgMCwgMCk7CisKKwlpZiAoVk5fQ0FDSEVEKHZwKSAhPSAwKSB7CisJCXhmc19pbnZhbF9jYWNoZWRfdHJhY2UoJmlwLT5pX2lvY29yZSwgaW9mZnNldCwgLTEsCisJCQkJY3Rvb2ZmKG9mZnRvY3QoaW9mZnNldCkpLCAtMSk7CisJCVZPUF9GTFVTSElOVkFMX1BBR0VTKHZwLCBjdG9vZmYob2ZmdG9jdChpb2Zmc2V0KSksCisJCQkJLTEsIEZJX1JFTUFQRl9MT0NLRUQpOworCX0KKwogCS8qCiAJICogTmVlZCB0byB6ZXJvIHRoZSBzdHVmZiB3ZSdyZSBub3QgZnJlZWluZywgb24gZGlzay4KIAkgKiBJZiBpdHMgYSByZWFsdGltZSBmaWxlICYgY2FuJ3QgdXNlIHVud3JpdHRlbiBleHRlbnRzIHRoZW4gd2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NtcC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKaW5kZXggY2JjMTczYS4uOTk1MDcwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKQEAgLTQzLDcgKzQzLDcgQEAKICNkZWZpbmUgUFJPQ19DSEFOR0VfUEVOQUxUWSAgICAgMjAKIAogI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQlfX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCi0jZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQogCiBleHRlcm4gY3B1bWFza190IGNwdV9wcmVzZW50X21hc2s7CiBleHRlcm4gY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NtcC5oIGIvaW5jbHVkZS9hc20tYXJtL3NtcC5oCmluZGV4IGJkNDRmODkuLjZjNmM2MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc21wLmgKQEAgLTIxLDcgKzIxLDcgQEAKICMgZXJyb3IgIjxhc20tYXJtL3NtcC5oPiBpbmNsdWRlZCBpbiBub24tU01QIGJ1aWxkIgogI2VuZGlmCiAKLSNkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X3ByZXNlbnRfbWFzazsKICNkZWZpbmUgY3B1X3Bvc3NpYmxlX21hcCBjcHVfcHJlc2VudF9tYXNrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKaW5kZXggODQwNWViNi4uMzlkZDcwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaApAQCAtMzA4LDcgKzMwOCw3IEBACiAoewkJCQkJXAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQlcCiAJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CVwKLQlmbGFncyAmIFBTUl9JX0JJVDsJCVwKKwkoaW50KShmbGFncyAmIFBTUl9JX0JJVCk7CVwKIH0pCiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCmluZGV4IDFmNGVjN2IuLmY0MDU5MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCkBAIC0xMjUsNiArMTI1LDkgQEAKIAogI2lmbmRlZiBfX0hBVkVfQVJDSF9QQUdFX1RFU1RfQU5EX0NMRUFSX0RJUlRZCiAjZGVmaW5lIHBhZ2VfdGVzdF9hbmRfY2xlYXJfZGlydHkocGFnZSkgKDApCisjZGVmaW5lIHB0ZV9tYXliZV9kaXJ0eShwdGUpCQlwdGVfZGlydHkocHRlKQorI2Vsc2UKKyNkZWZpbmUgcHRlX21heWJlX2RpcnR5KHB0ZSkJCSgxKQogI2VuZGlmCiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfUEFHRV9URVNUX0FORF9DTEVBUl9ZT1VORwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wYWdlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaAppbmRleCBlZDEzOTY5Li40MTQwMGQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaApAQCAtNjgsNiArNjgsNyBAQAogI2RlZmluZSBIUEFHRV9NQVNLCSh+KEhQQUdFX1NJWkUgLSAxKSkKICNkZWZpbmUgSFVHRVRMQl9QQUdFX09SREVSCShIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpCiAjZGVmaW5lIEhBVkVfQVJDSF9IVUdFVExCX1VOTUFQUEVEX0FSRUEKKyNkZWZpbmUgQVJDSF9IQVNfSFVHRVRMQl9DTEVBTl9TVEFMRV9QR1RBQkxFCiAjZW5kaWYKIAogI2RlZmluZSBwZ2RfdmFsKHgpCSgoeCkucGdkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAppbmRleCA4ZDYwYzJiLi5lOWVmZTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaApAQCAtMjM2LDYgKzIzNiw3IEBACiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyAocHRlKS5wdGVfbG93IHw9IF9QQUdFX0RJUlRZOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkJeyAocHRlKS5wdGVfbG93IHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJeyAocHRlKS5wdGVfbG93IHw9IF9QQUdFX1JXOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKQl7IChwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BTRTsgcmV0dXJuIHB0ZTsgfQogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKICMgaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLmg+CkBAIC0yNzUsNyArMjc2LDYgQEAKICAqLwogCiAjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQotI2RlZmluZSBta19wdGVfaHVnZShlbnRyeSkgKChlbnRyeSkucHRlX2xvdyB8PSBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFNFKQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zbXAuaCBiL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKaW5kZXggZTAzYTIwNi4uNTVlZjMxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCkBAIC01MSw3ICs1MSw3IEBACiAgKiBmcm9tIHRoZSBpbml0aWFsIHN0YXJ0dXAuIFdlIG1hcCBBUElDX0JBU0UgdmVyeSBlYXJseSBpbiBwYWdlX3NldHVwKCksCiAgKiBzbyB0aGlzIGlzIGNvcnJlY3QgaW4gdGhlIHg4NiBjYXNlLgogICovCi0jZGVmaW5lIF9fc21wX3Byb2Nlc3Nvcl9pZCgpIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwogZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCmluZGV4IDYxYmNjMWIuLjE3NjQxM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaApAQCAtMjU2LDcgKzI1Niw3IEBACiAjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNDgKICNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI0OQogI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJMjUwCi0KKyNkZWZpbmUgX19OUl9zZXRfem9uZV9yZWNsYWltCTI1MQogI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCTI1MgogI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCTI1MwogI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkyNTQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbW16b25lLmggYi9pbmNsdWRlL2FzbS1pYTY0L21tem9uZS5oCmluZGV4IDk0OTFkYWMuLjgzY2E0MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbW16b25lLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tbXpvbmUuaApAQCAtMTUsNiArMTUsMjAgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tZW1pbml0Lmg+CiAKK3N0YXRpYyBpbmxpbmUgaW50IHBmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisjaWZkZWYgQ09ORklHX05VTUEKKwlleHRlcm4gaW50IHBhZGRyX3RvX25pZCh1bnNpZ25lZCBsb25nKTsKKwlpbnQgbmlkID0gcGFkZHJfdG9fbmlkKHBmbiA8PCBQQUdFX1NISUZUKTsKKwlpZiAobmlkIDwgMCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gbmlkOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCiAjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQogCiAjaWZkZWYgQ09ORklHX0lBNjRfRElHIC8qIERJRyBzeXN0ZW1zIGFyZSBzbWFsbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAppbmRleCBmY2M5YzMzLi40ODU4NmUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaApAQCAtMjgzLDYgKzI4Myw3IEBACiAjZGVmaW5lIHB0ZV9ta3lvdW5nKHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0EpKQogI2RlZmluZSBwdGVfbWtjbGVhbihwdGUpCShfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfRCkpCiAjZGVmaW5lIHB0ZV9ta2RpcnR5KHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0QpKQorI2RlZmluZSBwdGVfbWtodWdlKHB0ZSkJCShfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9QKSkKIAogLyoKICAqIE1hY3JvIHRvIGEgcGFnZSBwcm90ZWN0aW9uIHZhbHVlIGFzICJ1bmNhY2hlYWJsZSIuICBOb3RlIHRoYXQgInByb3RlY3Rpb24iIGlzIHJlYWxseSBhCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbXAuaAppbmRleCAzYmExYTA2Li5hMzkxNDM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc21wLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKICNkZWZpbmUgU01QX0lSUV9SRURJUkVDVElPTgkoMSA8PCAwKQogI2RlZmluZSBTTVBfSVBJX1JFRElSRUNUSU9OCSgxIDw8IDEpCiAKLSNkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAKIGV4dGVybiBzdHJ1Y3Qgc21wX2Jvb3RfZGF0YSB7CiAJaW50IGNwdV9jb3VudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vbXNwZWMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vbXNwZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmUxM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9tc3BlYy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9TTl9NU1BFQ19ICisjZGVmaW5lIF9BU01fSUE2NF9TTl9NU1BFQ19ICisKKyNkZWZpbmUgRkVUQ0hPUF9WQVJfU0laRSA2NCAvKiA2NCBieXRlIHBlciBmZXRjaG9wIHZhcmlhYmxlICovCisKKyNkZWZpbmUgRkVUQ0hPUF9MT0FECQkwCisjZGVmaW5lIEZFVENIT1BfSU5DUkVNRU5UCTgKKyNkZWZpbmUgRkVUQ0hPUF9ERUNSRU1FTlQJMTYKKyNkZWZpbmUgRkVUQ0hPUF9DTEVBUgkJMjQKKworI2RlZmluZSBGRVRDSE9QX1NUT1JFCQkwCisjZGVmaW5lIEZFVENIT1BfQU5ECQkyNAorI2RlZmluZSBGRVRDSE9QX09SCQkzMgorCisjZGVmaW5lIEZFVENIT1BfQ0xFQVJfQ0FDSEUJNTYKKworI2RlZmluZSBGRVRDSE9QX0xPQURfT1AoYWRkciwgb3ApICggXAorICAgICAgICAgKih2b2xhdGlsZSBsb25nICopKChjaGFyKikgKGFkZHIpICsgKG9wKSkpCisKKyNkZWZpbmUgRkVUQ0hPUF9TVE9SRV9PUChhZGRyLCBvcCwgeCkgKCBcCisgICAgICAgICAqKHZvbGF0aWxlIGxvbmcgKikoKGNoYXIqKSAoYWRkcikgKyAob3ApKSA9IChsb25nKSAoeCkpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBFYWNoIEF0b21pYyBNZW1vcnkgT3BlcmF0aW9uIChBTU8gZm9ybWVybHkga25vd24gYXMgZmV0Y2hvcCkKKyAqIHZhcmlhYmxlIGlzIDY0IGJ5dGVzIGxvbmcuICBUaGUgZmlyc3QgOCBieXRlcyBhcmUgdXNlZC4gIFRoZQorICogcmVtYWluaW5nIDU2IGJ5dGVzIGFyZSB1bmFkZHJlc3NhYmxlIGR1ZSB0byB0aGUgb3BlcmF0aW9uIHRha2luZworICogdGhhdCBwb3J0aW9uIG9mIHRoZSBhZGRyZXNzLgorICoKKyAqIE5PVEU6IFRoZSBBTU9fdCBfTVVTVF8gYmUgcGxhY2VkIGluIGVpdGhlciB0aGUgZmlyc3Qgb3Igc2Vjb25kIGhhbGYKKyAqIG9mIHRoZSBjYWNoZSBsaW5lLiAgVGhlIGNhY2hlIGxpbmUgX01VU1QgTk9UXyBiZSB1c2VkIGZvciBhbnl0aGluZworICogb3RoZXIgdGhhbiBhZGRpdGlvbmFsIEFNT190IGVudHJpZXMuICBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgYXJlIHR3bworICogYWRkcmVzc2VzIHdoaWNoIHJlZmVyZW5jZSB0aGUgc2FtZSBwaHlzaWNhbCBjYWNoZSBsaW5lLiAgT25lIHdpbGwKKyAqIGJlIGEgY2FjaGVkIGVudHJ5IHdpdGggdGhlIG1lbW9yeSB0eXBlIGJpdHMgYWxsIHNldC4gIFRoaXMgYWRkcmVzcworICogbWF5IGJlIGxvYWRlZCBpbnRvIHByb2Nlc3NvciBjYWNoZS4gIFRoZSBBTU9fdCB3aWxsIGJlIHJlZmVyZW5jZWQKKyAqIHVuY2FjaGVkIHZpYSB0aGUgbWVtb3J5IHNwZWNpYWwgbWVtb3J5IHR5cGUuICBJZiBhbnkgcG9ydGlvbiBvZiB0aGUKKyAqIGNhY2hlZCBjYWNoZS1saW5lIGlzIG1vZGlmaWVkLCB3aGVuIHRoYXQgbGluZSBpcyBmbHVzaGVkLCBpdCB3aWxsCisgKiBvdmVyd3JpdGUgdGhlIHVuY2FjaGVkIHZhbHVlIGluIHBoeXNpY2FsIG1lbW9yeSBhbmQgbGVhZCB0bworICogaW5jb25zaXN0ZW5jeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICB1NjQgdmFyaWFibGU7CisgICAgICAgIHU2NCB1bnVzZWRbN107Cit9IEFNT190OworCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU05fTVNQRUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91bmNhY2hlZC5oIGIvaW5jbHVkZS9hc20taWE2NC91bmNhY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MmQ5MjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3VuY2FjaGVkLmgKQEAgLTAsMCArMSwxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBQcm90b3R5cGVzIGZvciB0aGUgdW5jYWNoZWQgcGFnZSBhbGxvY2F0b3IKKyAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyB1bmNhY2hlZF9hbGxvY19wYWdlKGludCBuaWQpOworZXh0ZXJuIHZvaWQgdW5jYWNoZWRfZnJlZV9wYWdlKHVuc2lnbmVkIGxvbmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKaW5kZXggMzNlMjZjNS4uZjdmNDNlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCkBAIC0yNjMsNiArMjYzLDcgQEAKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkJMTI3MQogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CQkxMjcyCiAjZGVmaW5lIF9fTlJfa2V5Y3RsCQkJMTI3MworI2RlZmluZSBfX05SX3NldF96b25lX3JlY2xhaW0JCTEyNzYKIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9kaXY2NC5oIGIvaW5jbHVkZS9hc20tbTMyci9kaXY2NC5oCmluZGV4IDQxN2E1MWIuLjZjZDk3OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvZGl2NjQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2RpdjY0LmgKQEAgLTEsMzggKzEgQEAKLSNpZm5kZWYgX0FTTV9NMzJSX0RJVjY0Ci0jZGVmaW5lIF9BU01fTTMyUl9ESVY2NAotCi0vKiAkSWQkICovCi0KLS8qIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXZpc2lvbi4KLSAqIElucHV0OgotICogIHVuc2lnbmVkIGxvbmcgbG9uZyAgbgotICogIHVuc2lnbmVkIGxvbmcgIGJhc2UKLSAqIE91dHB1dDoKLSAqICBuID0gbiAvIGJhc2U7Ci0gKiAgcmV0dXJuIHZhbHVlID0gbiAlIGJhc2U7Ci0gKi8KLSNkZWZpbmUgZG9fZGl2KG4sIGJhc2UpCQkJCQkJXAotKHsJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9yZXMsIF9oaWdoLCBfbWlkLCBfbG93OwkJCVwKLQkJCQkJCQkJXAotCV9sb3cgPSAobikgJiAweGZmZmZmZmZmVUw7CQkJCVwKLQlfaGlnaCA9IChuKSA+PiAzMjsJCQkJCVwKLQlpZiAoX2hpZ2gpIHsJCQkJCQlcCi0JCV9taWQgPSAoX2hpZ2ggJSAodW5zaWduZWQgbG9uZykoYmFzZSkpIDw8IDE2OwlcCi0JCV9oaWdoID0gX2hpZ2ggLyAodW5zaWduZWQgbG9uZykoYmFzZSk7CQlcCi0JCV9taWQgKz0gX2xvdyA+PiAxNjsJCQkJXAotCQlfbG93ICY9IDB4MDAwMGZmZmZVTDsJCQkJXAotCQlfbG93ICs9IChfbWlkICUgKHVuc2lnbmVkIGxvbmcpKGJhc2UpKSA8PCAxNjsJXAotCQlfbWlkID0gX21pZCAvICh1bnNpZ25lZCBsb25nKShiYXNlKTsJCVwKLQkJX3JlcyA9IF9sb3cgJSAodW5zaWduZWQgbG9uZykoYmFzZSk7CQlcCi0JCV9sb3cgPSBfbG93IC8gKHVuc2lnbmVkIGxvbmcpKGJhc2UpOwkJXAotCQluID0gX2xvdyArICgobG9uZyBsb25nKV9taWQgPDwgMTYpICsJCVwKLQkJCSgobG9uZyBsb25nKV9oaWdoIDw8IDMyKTsJCVwKLQl9IGVsc2UgewkJCQkJCVwKLQkJX3JlcyA9IF9sb3cgJSAodW5zaWduZWQgbG9uZykoYmFzZSk7CQlcCi0JCW4gPSAoX2xvdyAvICh1bnNpZ25lZCBsb25nKShiYXNlKSk7CQlcCi0JfQkJCQkJCQlcCi0JX3JlczsJCQkJCQkJXAotfSkKLQotI2VuZGlmICAvKiBfQVNNX00zMlJfRElWNjQgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9pZGUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvaWRlLmgKaW5kZXggYmU2NGYyNC4uMTk0MzkzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2lkZS5oCkBAIC0zNSw3ICszNSw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgaWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKIHsKIAlzd2l0Y2ggKGJhc2UpIHsKLSNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJMikKKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJMikgfHwgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTMpCiAJCWNhc2UgMHgxZjA6IHJldHVybiBQTERfSVJRX0NGSVJFUTsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tMzIxMDIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTAyLmgKaW5kZXggYjU2MDM0MC4uY2I5ODEwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9tMzIxMDIuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL20zMjEwMi5oCkBAIC0xNzUsNiArMTc1LDcgQEAKICNkZWZpbmUgTTMyUl9JQ1VfQ1I1X1BPUlRMICAgICgweDIxMCtNMzJSX0lDVV9PRkZTRVQpICAvKiBJTlQ0ICovCiAjZGVmaW5lIE0zMlJfSUNVX0NSNl9QT1JUTCAgICAoMHgyMTQrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogSU5UNSAqLwogI2RlZmluZSBNMzJSX0lDVV9DUjdfUE9SVEwgICAgKDB4MjE4K00zMlJfSUNVX09GRlNFVCkgIC8qIElOVDYgKi8KKyNkZWZpbmUgTTMyUl9JQ1VfQ1I4X1BPUlRMICAgICgweDIxOStNMzJSX0lDVV9PRkZTRVQpICAvKiBJTlQ3ICovCiAjZGVmaW5lIE0zMlJfSUNVX0NSMTZfUE9SVEwgICAoMHgyM0MrTTMyUl9JQ1VfT0ZGU0VUKSAgLyogTUZUMCAqLwogI2RlZmluZSBNMzJSX0lDVV9DUjE3X1BPUlRMICAgKDB4MjQwK00zMlJfSUNVX09GRlNFVCkgIC8qIE1GVDEgKi8KICNkZWZpbmUgTTMyUl9JQ1VfQ1IxOF9QT1JUTCAgICgweDI0NCtNMzJSX0lDVV9PRkZTRVQpICAvKiBNRlQyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL20zMjEwMnBlcmkuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTAycGVyaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzEyOTU1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTAycGVyaS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDY4ICswLDAgQEAKLS8qICRJZCQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSBieSBIaXJveXVraSBLb25kbwotICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXR5cGVkZWYJdm9pZAlWOwotdHlwZWRlZgljaGFyCUI7Ci10eXBlZGVmCXNob3J0CVM7Ci10eXBlZGVmCWludAkJVzsKLXR5cGVkZWYJbG9uZwlMOwotdHlwZWRlZglmbG9hdAlGOwotdHlwZWRlZglkb3VibGUJRDsKLXR5cGVkZWYJdW5zaWduZWQgY2hhcglVQjsKLXR5cGVkZWYJdW5zaWduZWQgc2hvcnQJVVM7Ci10eXBlZGVmCXVuc2lnbmVkIGludAlVVzsKLXR5cGVkZWYJdW5zaWduZWQgbG9uZwlVTDsKLXR5cGVkZWYJY29uc3QgdW5zaWduZWQgaW50CUNVVzsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1NMzIxMDIgSUNVCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUJCUlDVUlTVFMJCShVVyAqKTB4YTBFRkYwMDQKLSNkZWZpbmUJCUlDVUlSRVEwCShVVyAqKTB4YTBFRkYwMDgKLSNkZWZpbmUJCUlDVUlSRVExCShVVyAqKTB4YTBFRkYwMEMKLQotI2RlZmluZQkJSUNVU0JJQ1IJKFVXICopMHhhMEVGRjAxOAotI2RlZmluZQkJSUNVSU1BU0sJKFVXICopMHhhMEVGRjAxQwotCi0jZGVmaW5lCQlJQ1VDUjEJCShVVyAqKTB4YTBFRkYyMDAJLyogSU5UMCAqLwotI2RlZmluZQkJSUNVQ1IyCQkoVVcgKikweGEwRUZGMjA0CS8qIElOVDEgKi8KLSNkZWZpbmUJCUlDVUNSMwkJKFVXICopMHhhMEVGRjIwOAkvKiBJTlQyICovCi0jZGVmaW5lCQlJQ1VDUjQJCShVVyAqKTB4YTBFRkYyMEMJLyogSU5UMyAqLwotI2RlZmluZQkJSUNVQ1I1CQkoVVcgKikweGEwRUZGMjEwCS8qIElOVDQgKi8KLSNkZWZpbmUJCUlDVUNSNgkJKFVXICopMHhhMEVGRjIxNAkvKiBJTlQ1ICovCi0jZGVmaW5lCQlJQ1VDUjcJCShVVyAqKTB4YTBFRkYyMTgJLyogSU5UNiAqLwotCi0jZGVmaW5lCQlJQ1VDUjE2CQkoVVcgKikweGEwRUZGMjNDCS8qIE1GVDAgKi8KLSNkZWZpbmUJCUlDVUNSMTcJCShVVyAqKTB4YTBFRkYyNDAJLyogTUZUMSAqLwotI2RlZmluZQkJSUNVQ1IxOAkJKFVXICopMHhhMEVGRjI0NAkvKiBNRlQyICovCi0jZGVmaW5lCQlJQ1VDUjE5CQkoVVcgKikweGEwRUZGMjQ4CS8qIE1GVDMgKi8KLSNkZWZpbmUJCUlDVUNSMjAJCShVVyAqKTB4YTBFRkYyNEMJLyogTUZUNCAqLwotI2RlZmluZQkJSUNVQ1IyMQkJKFVXICopMHhhMEVGRjI1MAkvKiBNRlQ1ICovCi0KLSNkZWZpbmUJCUlDVUNSMzIJCShVVyAqKTB4YTBFRkYyN0MJLyogRE1BMCAqLwotI2RlZmluZQkJSUNVQ1IzMwkJKFVXICopMHhhMEVGRjI4MAkvKiBETUExICovCi0KLSNkZWZpbmUJCUlDVUNSNDgJCShVVyAqKTB4YTBFRkYyQkMJLyogU0lPMFIgKi8KLSNkZWZpbmUJCUlDVUNSNDkJCShVVyAqKTB4YTBFRkYyQzAJLyogU0lPMFMgKi8KLSNkZWZpbmUJCUlDVUNSNTAJCShVVyAqKTB4YTBFRkYyQzQJLyogU0lPMVIgKi8KLSNkZWZpbmUJCUlDVUNSNTEJCShVVyAqKTB4YTBFRkYyQzgJLyogU0lPMVMgKi8KLSNkZWZpbmUJCUlDVUNSNTIJCShVVyAqKTB4YTBFRkYyQ0MJLyogU0lPMlIgKi8KLSNkZWZpbmUJCUlDVUNSNTMJCShVVyAqKTB4YTBFRkYyRDAJLyogU0lPMlMgKi8KLSNkZWZpbmUJCUlDVUNSNTQJCShVVyAqKTB4YTBFRkYyRDQJLyogU0lPM1IgKi8KLSNkZWZpbmUJCUlDVUNSNTUJCShVVyAqKTB4YTBFRkYyRDgJLyogU0lPM1MgKi8KLSNkZWZpbmUJCUlDVUNSNTYJCShVVyAqKTB4YTBFRkYyREMJLyogU0lPNFIgKi8KLSNkZWZpbmUJCUlDVUNSNTcJCShVVyAqKTB4YTBFRkYyRTAJLyogU0lPNFMgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1NMzIxMDIgTUZUCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUJCU1GVENSCQkoVVMgKikweGEwRUZDMDAyCi0jZGVmaW5lCQlNRlRSUFIJCShVQiAqKTB4YTBFRkMwMDYKLQotI2RlZmluZQkJTUZUME1PRAkJKFVTICopMHhhMEVGQzEwMgotI2RlZmluZQkJTUZUMEJPUwkJKFVTICopMHhhMEVGQzEwNgotI2RlZmluZQkJTUZUMENVVAkJKFVTICopMHhhMEVGQzEwQQotI2RlZmluZQkJTUZUMFJMRAkJKFVTICopMHhhMEVGQzEwRQotI2RlZmluZQkJTUZUMENSTEQJKFVTICopMHhhMEVGQzExMgotCi0jZGVmaW5lCQlNRlQxTU9ECQkoVVMgKikweGEwRUZDMjAyCi0jZGVmaW5lCQlNRlQxQk9TCQkoVVMgKikweGEwRUZDMjA2Ci0jZGVmaW5lCQlNRlQxQ1VUCQkoVVMgKikweGEwRUZDMjBBCi0jZGVmaW5lCQlNRlQxUkxECQkoVVMgKikweGEwRUZDMjBFCi0jZGVmaW5lCQlNRlQxQ1JMRAkoVVMgKikweGEwRUZDMjEyCi0KLSNkZWZpbmUJCU1GVDJNT0QJCShVUyAqKTB4YTBFRkMzMDIKLSNkZWZpbmUJCU1GVDJCT1MJCShVUyAqKTB4YTBFRkMzMDYKLSNkZWZpbmUJCU1GVDJDVVQJCShVUyAqKTB4YTBFRkMzMEEKLSNkZWZpbmUJCU1GVDJSTEQJCShVUyAqKTB4YTBFRkMzMEUKLSNkZWZpbmUJCU1GVDJDUkxECShVUyAqKTB4YTBFRkMzMTIKLQotI2RlZmluZQkJTUZUM01PRAkJKFVTICopMHhhMEVGQzQwMgotI2RlZmluZQkJTUZUM0NVVAkJKFVTICopMHhhMEVGQzQwQQotI2RlZmluZQkJTUZUM1JMRAkJKFVTICopMHhhMEVGQzQwRQotI2RlZmluZQkJTUZUM0NSTEQJKFVTICopMHhhMEVGQzQxMgotCi0jZGVmaW5lCQlNRlQ0TU9ECQkoVVMgKikweGEwRUZDNTAyCi0jZGVmaW5lCQlNRlQ0Q1VUCQkoVVMgKikweGEwRUZDNTBBCi0jZGVmaW5lCQlNRlQ0UkxECQkoVVMgKikweGEwRUZDNTBFCi0jZGVmaW5lCQlNRlQ0Q1JMRAkoVVMgKikweGEwRUZDNTEyCi0KLSNkZWZpbmUJCU1GVDVNT0QJCShVUyAqKTB4YTBFRkM2MDIKLSNkZWZpbmUJCU1GVDVDVVQJCShVUyAqKTB4YTBFRkM2MEEKLSNkZWZpbmUJCU1GVDVSTEQJCShVUyAqKTB4YTBFRkM2MEUKLSNkZWZpbmUJCU1GVDVDUkxECShVUyAqKTB4YTBFRkM2MTIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1NMzIxMDIgU0lPCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBTSU8wQ1IgICAgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMDAwCi0jZGVmaW5lIFNJTzBNT0QwICAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQwMDQKLSNkZWZpbmUgU0lPME1PRDEgICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDAwOAotI2RlZmluZSBTSU8wU1RTICAgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMDBjCi0jZGVmaW5lIFNJTzBJTUFTSyAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQwMTAKLSNkZWZpbmUgU0lPMEJBVVIgICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDAxNAotI2RlZmluZSBTSU8wUkJBVVIgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMDE4Ci0jZGVmaW5lIFNJTzBUWEIgICAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQwMWMKLSNkZWZpbmUgU0lPMFJYQiAgICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDAyMAotCi0jZGVmaW5lIFNJTzFDUiAgICAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQxMDAKLSNkZWZpbmUgU0lPMU1PRDAgICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDEwNAotI2RlZmluZSBTSU8xTU9EMSAgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMTA4Ci0jZGVmaW5lIFNJTzFTVFMgICAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQxMGMKLSNkZWZpbmUgU0lPMUlNQVNLICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDExMAotI2RlZmluZSBTSU8xQkFVUiAgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMTE0Ci0jZGVmaW5lIFNJTzFSQkFVUiAgKHZvbGF0aWxlIGludCAqKTB4YTBlZmQxMTgKLSNkZWZpbmUgU0lPMVRYQiAgICAodm9sYXRpbGUgaW50ICopMHhhMGVmZDExYwotI2RlZmluZSBTSU8xUlhCICAgICh2b2xhdGlsZSBpbnQgKikweGEwZWZkMTIwCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLU0zMjEwMiBQT1JUCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUJCVBJRU4JCShVQiAqKTB4YTBFRjEwMDMJLyogaW5wdXQgZW5hYmxlICovCi0KLSNkZWZpbmUJCVAwREFUQQkJKFVCICopMHhhMEVGMTAyMAkvKiBkYXRhICovCi0jZGVmaW5lCQlQMURBVEEJCShVQiAqKTB4YTBFRjEwMjEKLSNkZWZpbmUJCVAyREFUQQkJKFVCICopMHhhMEVGMTAyMgotI2RlZmluZQkJUDNEQVRBCQkoVUIgKikweGEwRUYxMDIzCi0jZGVmaW5lCQlQNERBVEEJCShVQiAqKTB4YTBFRjEwMjQKLSNkZWZpbmUJCVA1REFUQQkJKFVCICopMHhhMEVGMTAyNQotI2RlZmluZQkJUDZEQVRBCQkoVUIgKikweGEwRUYxMDI2Ci0jZGVmaW5lCQlQN0RBVEEJCShVQiAqKTB4YTBFRjEwMjcKLQotI2RlZmluZQkJUDBESVIJCShVQiAqKTB4YTBFRjEwNDAJLyogZGlyZWN0aW9uICovCi0jZGVmaW5lCQlQMURJUgkJKFVCICopMHhhMEVGMTA0MQotI2RlZmluZQkJUDJESVIJCShVQiAqKTB4YTBFRjEwNDIKLSNkZWZpbmUJCVAzRElSCQkoVUIgKikweGEwRUYxMDQzCi0jZGVmaW5lCQlQNERJUgkJKFVCICopMHhhMEVGMTA0NAotI2RlZmluZQkJUDVESVIJCShVQiAqKTB4YTBFRjEwNDUKLSNkZWZpbmUJCVA2RElSCQkoVUIgKikweGEwRUYxMDQ2Ci0jZGVmaW5lCQlQN0RJUgkJKFVCICopMHhhMEVGMTA0NwotCi0jZGVmaW5lCQlQME1PRAkJKFVTICopMHhhMEVGMTA2MAkvKiBtb2RlIGNvbnRyb2wgKi8KLSNkZWZpbmUJCVAxTU9ECQkoVVMgKikweGEwRUYxMDYyCi0jZGVmaW5lCQlQMk1PRAkJKFVTICopMHhhMEVGMTA2NAotI2RlZmluZQkJUDNNT0QJCShVUyAqKTB4YTBFRjEwNjYKLSNkZWZpbmUJCVA0TU9ECQkoVVMgKikweGEwRUYxMDY4Ci0jZGVmaW5lCQlQNU1PRAkJKFVTICopMHhhMEVGMTA2QQotI2RlZmluZQkJUDZNT0QJCShVUyAqKTB4YTBFRjEwNkMKLSNkZWZpbmUJCVA3TU9ECQkoVVMgKikweGEwRUYxMDZFCi0KLSNkZWZpbmUJCVAwT0RDUgkJKFVCICopMHhhMEVGMTA4MAkvKiBvcGVuLWRyYWluIGNvbnRyb2wgKi8KLSNkZWZpbmUJCVAxT0RDUgkJKFVCICopMHhhMEVGMTA4MQotI2RlZmluZQkJUDJPRENSCQkoVUIgKikweGEwRUYxMDgyCi0jZGVmaW5lCQlQM09EQ1IJCShVQiAqKTB4YTBFRjEwODMKLSNkZWZpbmUJCVA0T0RDUgkJKFVCICopMHhhMEVGMTA4NAotI2RlZmluZQkJUDVPRENSCQkoVUIgKikweGEwRUYxMDg1Ci0jZGVmaW5lCQlQNk9EQ1IJCShVQiAqKTB4YTBFRjEwODYKLSNkZWZpbmUJCVA3T0RDUgkJKFVCICopMHhhMEVGMTA4NwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLU0zMjEwMiBDYWNoZQotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZQkJTUNDUgkoVVMgKikweEZGRkZGRkZFCi0KLQotI2Vsc2UgIC8qIF9fQVNTRU1CTFlfXyAqLwotCi07OwotOzsgUElPICAgICAweDgwZWYxMDAwCi07OwotCi0jZGVmaW5lIFBJRU4gICAgICAgICAgMHhhMGVmMTAwMAotCi0jZGVmaW5lIFAwREFUQSAgICAgICAgMHhhMGVmMTAyMAotI2RlZmluZSBQMURBVEEgICAgICAgIDB4YTBlZjEwMjEKLSNkZWZpbmUgUDJEQVRBICAgICAgICAweGEwZWYxMDIyCi0jZGVmaW5lIFAzREFUQSAgICAgICAgMHhhMGVmMTAyMwotI2RlZmluZSBQNERBVEEgICAgICAgIDB4YTBlZjEwMjQKLSNkZWZpbmUgUDVEQVRBICAgICAgICAweGEwZWYxMDI1Ci0jZGVmaW5lIFA2REFUQSAgICAgICAgMHhhMGVmMTAyNgotI2RlZmluZSBQN0RBVEEgICAgICAgIDB4YTBlZjEwMjcKLQotI2RlZmluZSBQMERJUiAgICAgICAgIDB4YTBlZjEwNDAKLSNkZWZpbmUgUDFESVIgICAgICAgICAweGEwZWYxMDQxCi0jZGVmaW5lIFAyRElSICAgICAgICAgMHhhMGVmMTA0MgotI2RlZmluZSBQM0RJUiAgICAgICAgIDB4YTBlZjEwNDMKLSNkZWZpbmUgUDRESVIgICAgICAgICAweGEwZWYxMDQ0Ci0jZGVmaW5lIFA1RElSICAgICAgICAgMHhhMGVmMTA0NQotI2RlZmluZSBQNkRJUiAgICAgICAgIDB4YTBlZjEwNDYKLSNkZWZpbmUgUDdESVIgICAgICAgICAweGEwZWYxMDQ3Ci0KLSNkZWZpbmUgUDBNT0QgICAgICAgICAweGEwZWYxMDYwCi0jZGVmaW5lIFAxTU9EICAgICAgICAgMHhhMGVmMTA2MgotI2RlZmluZSBQMk1PRCAgICAgICAgIDB4YTBlZjEwNjQKLSNkZWZpbmUgUDNNT0QgICAgICAgICAweGEwZWYxMDY2Ci0jZGVmaW5lIFA0TU9EICAgICAgICAgMHhhMGVmMTA2OAotI2RlZmluZSBQNU1PRCAgICAgICAgIDB4YTBlZjEwNmEKLSNkZWZpbmUgUDZNT0QgICAgICAgICAweGEwZWYxMDZjCi0jZGVmaW5lIFA3TU9EICAgICAgICAgMHhhMGVmMTA2ZQotOwotI2RlZmluZSBQME9EQ1IgICAgICAgIDB4YTBlZjEwODAKLSNkZWZpbmUgUDFPRENSICAgICAgICAweGEwZWYxMDgxCi0jZGVmaW5lIFAyT0RDUiAgICAgICAgMHhhMGVmMTA4MgotI2RlZmluZSBQM09EQ1IgICAgICAgIDB4YTBlZjEwODMKLSNkZWZpbmUgUDRPRENSICAgICAgICAweGEwZWYxMDg0Ci0jZGVmaW5lIFA1T0RDUiAgICAgICAgMHhhMGVmMTA4NQotI2RlZmluZSBQNk9EQ1IgICAgICAgIDB4YTBlZjEwODYKLSNkZWZpbmUgUDdPRENSICAgICAgICAweGEwZWYxMDg3Ci0KLTs7Ci07OyBXRFQgICAgIDB4YTBlZjIwMDAKLTs7Ci0KLSNkZWZpbmUgV0RUQ1IgICAgICAgICAweGEwZWYyMDAwCi0KLQotOzsKLTs7IENMSyAgICAgMHhhMGVmNDAwMAotOzsKLQotI2RlZmluZSBDUFVDTEtDUiAgICAgIDB4YTBlZjQwMDAKLSNkZWZpbmUgQ0xLTU9EICAgICAgICAweGEwZWY0MDA0Ci0jZGVmaW5lIFBMTENSICAgICAgICAgMHhhMGVmNDAwOAotCi0KLTs7Ci07OyBCU0VMICAgIDB4YTBlZjUwMDAKLTs7Ci0KLSNkZWZpbmUgQlNFTDBDUiAgICAgICAweGEwZWY1MDAwCi0jZGVmaW5lIEJTRUwxQ1IgICAgICAgMHhhMGVmNTAwNAotI2RlZmluZSBCU0VMMkNSICAgICAgIDB4YTBlZjUwMDgKLSNkZWZpbmUgQlNFTDNDUiAgICAgICAweGEwZWY1MDBjCi0jZGVmaW5lIEJTRUw0Q1IgICAgICAgMHhhMGVmNTAxMAotI2RlZmluZSBCU0VMNUNSICAgICAgIDB4YTBlZjUwMTQKLQotCi07OwotOzsgU0RSQU1DICAweGEwZWY2MDAwCi07OwotCi0jZGVmaW5lIFNEUkYwICAgICAgICAgMHhhMGVmNjAwMAotI2RlZmluZSBTRFJGMSAgICAgICAgIDB4YTBlZjYwMDQKLSNkZWZpbmUgU0RJUjAgICAgICAgICAweGEwZWY2MDA4Ci0jZGVmaW5lIFNESVIxICAgICAgICAgMHhhMGVmNjAwYwotI2RlZmluZSBTREJSICAgICAgICAgIDB4YTBlZjYwMTAKLQotOzsgQ0gwCi0jZGVmaW5lIFNEMEFEUiAgICAgICAgMHhhMGVmNjAyMAotI2RlZmluZSBTRDBTWiAgICAgICAgIDB4YTBlZjYwMjIKLSNkZWZpbmUgU0QwRVIgICAgICAgICAweGEwZWY2MDI0Ci0jZGVmaW5lIFNEMFRSICAgICAgICAgMHhhMGVmNjAyOAotI2RlZmluZSBTRDBNT0QgICAgICAgIDB4YTBlZjYwMmMKLQotOzsgQ0gxCi0jZGVmaW5lIFNEMUFEUiAgICAgICAgMHhhMGVmNjA0MAotI2RlZmluZSBTRDFTWiAgICAgICAgIDB4YTBlZjYwNDIKLSNkZWZpbmUgU0QxRVIgICAgICAgICAweGEwZWY2MDQ0Ci0jZGVmaW5lIFNEMVRSICAgICAgICAgMHhhMGVmNjA0OAotI2RlZmluZSBTRDFNT0QgICAgICAgIDB4YTBlZjYwNGMKLQotCi07OwotOzsgRE1BQyAgICAweGEwZWY4MDAwCi07OwotCi0jZGVmaW5lIERNQUVOICAgICAgICAgMHhhMGVmODAwMAotI2RlZmluZSBETUFJU1RTICAgICAgIDB4YTBlZjgwMDQKLSNkZWZpbmUgRE1BRURFVCAgICAgICAweGEwZWY4MDA4Ci0jZGVmaW5lIERNQUFTVFMgICAgICAgMHhhMGVmODAwYwotCi07OyBDSDAKLSNkZWZpbmUgRE1BMENSMCAgICAgICAweGEwZWY4MTAwCi0jZGVmaW5lIERNQTBDUjEgICAgICAgMHhhMGVmODEwNAotI2RlZmluZSBETUEwQ1NBICAgICAgIDB4YTBlZjgxMDgKLSNkZWZpbmUgRE1BMFJTQSAgICAgICAweGEwZWY4MTBjCi0jZGVmaW5lIERNQTBDREEgICAgICAgMHhhMGVmODExMAotI2RlZmluZSBETUEwUkRBICAgICAgIDB4YTBlZjgxMTQKLSNkZWZpbmUgRE1BMENCQ1VUICAgICAweGEwZWY4MTE4Ci0jZGVmaW5lIERNQTBSQkNVVCAgICAgMHhhMGVmODExYwotCi07OyBDSDEKLSNkZWZpbmUgRE1BMUNSMCAgICAgICAweGEwZWY4MjAwCi0jZGVmaW5lIERNQTFDUjEgICAgICAgMHhhMGVmODIwNAotI2RlZmluZSBETUExQ1NBICAgICAgIDB4YTBlZjgyMDgKLSNkZWZpbmUgRE1BMVJTQSAgICAgICAweGEwZWY4MjBjCi0jZGVmaW5lIERNQTFDREEgICAgICAgMHhhMGVmODIxMAotI2RlZmluZSBETUExUkRBICAgICAgIDB4YTBlZjgyMTQKLSNkZWZpbmUgRE1BMUNCQ1VUICAgICAweGEwZWY4MjE4Ci0jZGVmaW5lIERNQTFSQkNVVCAgICAgMHhhMGVmODIxYwotCi0KLTs7Ci07OyBNRlQgICAgIDB4YTBlZmMwMDAKLTs7Ci0KLSNkZWZpbmUgTUZUQ1IgICAgICAgIDB4YTBlZmMwMDAKLSNkZWZpbmUgTUZUUlBSICAgICAgIDB4YTBlZmMwMDQKLQotOzsgQ0gwCi0jZGVmaW5lIE1GVDBNT0QgICAgICAweGEwZWZjMTAwCi0jZGVmaW5lIE1GVDBCT1MgICAgICAweGEwZWZjMTA0Ci0jZGVmaW5lIE1GVDBDVVQgICAgICAweGEwZWZjMTA4Ci0jZGVmaW5lIE1GVDBSTEQgICAgICAweGEwZWZjMTBjCi0jZGVmaW5lIE1GVDBDTVBSTEQgICAweGEwZWZjMTEwCi0KLTs7IENIMQotI2RlZmluZSBNRlQxTU9EICAgICAgMHhhMGVmYzIwMAotI2RlZmluZSBNRlQxQk9TICAgICAgMHhhMGVmYzIwNAotI2RlZmluZSBNRlQxQ1VUICAgICAgMHhhMGVmYzIwOAotI2RlZmluZSBNRlQxUkxEICAgICAgMHhhMGVmYzIwYwotI2RlZmluZSBNRlQxQ01QUkxEICAgMHhhMGVmYzIxMAotCi07OyBDSDIKLSNkZWZpbmUgTUZUMk1PRCAgICAgIDB4YTBlZmMzMDAKLSNkZWZpbmUgTUZUMkJPUyAgICAgIDB4YTBlZmMzMDQKLSNkZWZpbmUgTUZUMkNVVCAgICAgIDB4YTBlZmMzMDgKLSNkZWZpbmUgTUZUMlJMRCAgICAgIDB4YTBlZmMzMGMKLSNkZWZpbmUgTUZUMkNNUFJMRCAgIDB4YTBlZmMzMTAKLQotOzsgQ0gzCi0jZGVmaW5lIE1GVDNNT0QgICAgICAweGEwZWZjNDAwCi0jZGVmaW5lIE1GVDNCT1MgICAgICAweGEwZWZjNDA0Ci0jZGVmaW5lIE1GVDNDVVQgICAgICAweGEwZWZjNDA4Ci0jZGVmaW5lIE1GVDNSTEQgICAgICAweGEwZWZjNDBjCi0jZGVmaW5lIE1GVDNDTVBSTEQgICAweGEwZWZjNDEwCi0KLTs7IENINAotI2RlZmluZSBNRlQ0TU9EICAgICAgMHhhMGVmYzUwMAotI2RlZmluZSBNRlQ0Qk9TICAgICAgMHhhMGVmYzUwNAotI2RlZmluZSBNRlQ0Q1VUICAgICAgMHhhMGVmYzUwOAotI2RlZmluZSBNRlQ0UkxEICAgICAgMHhhMGVmYzUwYwotI2RlZmluZSBNRlQ0Q01QUkxEICAgMHhhMGVmYzUxMAotCi07OyBDSDUKLSNkZWZpbmUgTUZUNU1PRCAgICAgIDB4YTBlZmM2MDAKLSNkZWZpbmUgTUZUNUJPUyAgICAgIDB4YTBlZmM2MDQKLSNkZWZpbmUgTUZUNUNVVCAgICAgIDB4YTBlZmM2MDgKLSNkZWZpbmUgTUZUNVJMRCAgICAgIDB4YTBlZmM2MGMKLSNkZWZpbmUgTUZUNUNNUFJMRCAgIDB4YTBlZmM2MTAKLQotCi07OwotOzsgU0lPICAgICAweGEwZWZkMDAwCi07OwotCi07OyBDSDAKLSNkZWZpbmUgU0lPMENSICAgICAgICAweGEwZWZkMDAwCi0jZGVmaW5lIFNJTzBNT0QwICAgICAgMHhhMGVmZDAwNAotI2RlZmluZSBTSU8wTU9EMSAgICAgIDB4YTBlZmQwMDgKLSNkZWZpbmUgU0lPMFNUUyAgICAgICAweGEwZWZkMDBjCi0jZGVmaW5lIFNJTzBJTUFTSyAgICAgMHhhMGVmZDAxMAotI2RlZmluZSBTSU8wQkFVUiAgICAgIDB4YTBlZmQwMTQKLSNkZWZpbmUgU0lPMFJCQVVSICAgICAweGEwZWZkMDE4Ci0jZGVmaW5lIFNJTzBUWEIgICAgICAgMHhhMGVmZDAxYwotI2RlZmluZSBTSU8wUlhCICAgICAgIDB4YTBlZmQwMjAKLQotOzsgQ0gxCi0jZGVmaW5lIFNJTzFDUiAgICAgICAgMHhhMGVmZDEwMAotI2RlZmluZSBTSU8xTU9EMCAgICAgIDB4YTBlZmQxMDQKLSNkZWZpbmUgU0lPMU1PRDEgICAgICAweGEwZWZkMTA4Ci0jZGVmaW5lIFNJTzFTVFMgICAgICAgMHhhMGVmZDEwYwotI2RlZmluZSBTSU8xSU1BU0sgICAgIDB4YTBlZmQxMTAKLSNkZWZpbmUgU0lPMUJBVVIgICAgICAweGEwZWZkMTE0Ci0jZGVmaW5lIFNJTzFSQkFVUiAgICAgMHhhMGVmZDExOAotI2RlZmluZSBTSU8xVFhCICAgICAgIDB4YTBlZmQxMWMKLSNkZWZpbmUgU0lPMVJYQiAgICAgICAweGEwZWZkMTIwCi0KLTs7IENIMgotI2RlZmluZSBTSU8yQ1IgICAgICAgIDB4YTBlZmQyMDAKLSNkZWZpbmUgU0lPMk1PRDAgICAgICAweGEwZWZkMjA0Ci0jZGVmaW5lIFNJTzJNT0QxICAgICAgMHhhMGVmZDIwOAotI2RlZmluZSBTSU8yU1RTICAgICAgIDB4YTBlZmQyMGMKLSNkZWZpbmUgU0lPMklNQVNLICAgICAweGEwZWZkMjEwCi0jZGVmaW5lIFNJTzJCQVVSICAgICAgMHhhMGVmZDIxNAotI2RlZmluZSBTSU8yUkJBVVIgICAgIDB4YTBlZmQyMTgKLSNkZWZpbmUgU0lPMlRYQiAgICAgICAweGEwZWZkMjFjCi0jZGVmaW5lIFNJTzJSWEIgICAgICAgMHhhMGVmZDIyMAotCi07OyBDSDMKLSNkZWZpbmUgU0lPM0NSICAgICAgICAweGEwZWZkMzAwCi0jZGVmaW5lIFNJTzNNT0QwICAgICAgMHhhMGVmZDMwNAotI2RlZmluZSBTSU8zTU9EMSAgICAgIDB4YTBlZmQzMDgKLSNkZWZpbmUgU0lPM1NUUyAgICAgICAweGEwZWZkMzBjCi0jZGVmaW5lIFNJTzNJTUFTSyAgICAgMHhhMGVmZDMxMAotI2RlZmluZSBTSU8zQkFVUiAgICAgIDB4YTBlZmQzMTQKLSNkZWZpbmUgU0lPM1JCQVVSICAgICAweGEwZWZkMzE4Ci0jZGVmaW5lIFNJTzNUWEIgICAgICAgMHhhMGVmZDMxYwotI2RlZmluZSBTSU8zUlhCICAgICAgIDB4YTBlZmQzMjAKLQotOzsgQ0g0Ci0jZGVmaW5lIFNJTzRDUiAgICAgICAgMHhhMGVmZDQwMAotI2RlZmluZSBTSU80TU9EMCAgICAgIDB4YTBlZmQ0MDQKLSNkZWZpbmUgU0lPNE1PRDEgICAgICAweGEwZWZkNDA4Ci0jZGVmaW5lIFNJTzRTVFMgICAgICAgMHhhMGVmZDQwYwotI2RlZmluZSBTSU80SU1BU0sgICAgIDB4YTBlZmQ0MTAKLSNkZWZpbmUgU0lPNEJBVVIgICAgICAweGEwZWZkNDE0Ci0jZGVmaW5lIFNJTzRSQkFVUiAgICAgMHhhMGVmZDQxOAotI2RlZmluZSBTSU80VFhCICAgICAgIDB4YTBlZmQ0MWMKLSNkZWZpbmUgU0lPNFJYQiAgICAgICAweGEwZWZkNDIwCi0KLQotOzsKLTs7IElDVSAgICAgMHhhMGVmZjAwMAotOzsKLQotI2RlZmluZSBJQ1VJU1RTICAgICAgIDB4YTBlZmYwMDQKLSNkZWZpbmUgSUNVSVJFUTAgICAgICAweGEwZWZmMDA4Ci0jZGVmaW5lIElDVUlSRVExICAgICAgMHhhMGVmZjAwYwotCi0jZGVmaW5lIElDVVNCSUNSICAgICAgMHhhMGVmZjAxOAotI2RlZmluZSBJQ1VJTUFTSyAgICAgIDB4YTBlZmYwMWMKLQotI2RlZmluZSBJQ1VDUjEgICAgICAgIDB4YTBlZmYyMDAKLSNkZWZpbmUgSUNVQ1IyICAgICAgICAweGEwZWZmMjA0Ci0jZGVmaW5lIElDVUNSMyAgICAgICAgMHhhMGVmZjIwOAotI2RlZmluZSBJQ1VDUjQgICAgICAgIDB4YTBlZmYyMGMKLSNkZWZpbmUgSUNVQ1I1ICAgICAgICAweGEwZWZmMjEwCi0jZGVmaW5lIElDVUNSNiAgICAgICAgMHhhMGVmZjIxNAotI2RlZmluZSBJQ1VDUjcgICAgICAgIDB4YTBlZmYyMTgKLQotI2RlZmluZSBJQ1VDUjE2ICAgICAgIDB4YTBlZmYyM2MKLSNkZWZpbmUgSUNVQ1IxNyAgICAgICAweGEwZWZmMjQwCi0jZGVmaW5lIElDVUNSMTggICAgICAgMHhhMGVmZjI0NAotI2RlZmluZSBJQ1VDUjE5ICAgICAgIDB4YTBlZmYyNDgKLSNkZWZpbmUgSUNVQ1IyMCAgICAgICAweGEwZWZmMjRjCi0jZGVmaW5lIElDVUNSMjEgICAgICAgMHhhMGVmZjI1MAotCi0jZGVmaW5lIElDVUNSMzIgICAgICAgMHhhMGVmZjI3YwotI2RlZmluZSBJQ1VDUjMzICAgICAgIDB4YTBlZmYyODAKLQotI2RlZmluZSBJQ1VDUjQ4ICAgICAgIDB4YTBlZmYyYmMKLSNkZWZpbmUgSUNVQ1I0OSAgICAgICAweGEwZWZmMmMwCi0jZGVmaW5lIElDVUNSNTAgICAgICAgMHhhMGVmZjJjNAotI2RlZmluZSBJQ1VDUjUxICAgICAgIDB4YTBlZmYyYzgKLSNkZWZpbmUgSUNVQ1I1MiAgICAgICAweGEwZWZmMmNjCi0jZGVmaW5lIElDVUNSNTMgICAgICAgMHhhMGVmZjJkMAotI2RlZmluZSBJQ1VDUjU0ICAgICAgIDB4YTBlZmYyZDQKLSNkZWZpbmUgSUNVQ1I1NSAgICAgICAweGEwZWZmMmQ4Ci0jZGVmaW5lIElDVUNSNTYgICAgICAgMHhhMGVmZjJkYwotI2RlZmluZSBJQ1VDUjU3ICAgICAgIDB4YTBlZmYyZTAKLQotOzsKLTs7IENBQ0hFCi07OwotCi0jZGVmaW5lIE1DQ1IJCSAgMHhmZmZmZmZmYwotCi0KLSNlbmRpZiAgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL20zMnIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyci5oCmluZGV4IGYxMTY2NDkuLmVjMTQyYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyci5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyci5oCkBAIC0xNiw3ICsxNiw2IEBACiAJfHwgZGVmaW5lZChDT05GSUdfQ0hJUF9NMzI3MDApIHx8IGRlZmluZWQoQ09ORklHX0NISVBfTTMyMTAyKSBcCiAgICAgICAgIHx8IGRlZmluZWQoQ09ORklHX0NISVBfT1BTUCkKICNpbmNsdWRlIDxhc20vbTMyMTAyLmg+Ci0jaW5jbHVkZSA8YXNtL20zMjEwMnBlcmkuaD4KICNlbmRpZgogCiAvKiBQbGF0Zm9ybSB0eXBlICovCkBAIC0zNiw2ICszNSwxMCBAQAogI2luY2x1ZGUgPGFzbS9tYXBwaTIvbWFwcGkyX3BsZC5oPgogI2VuZGlmCS8qIENPTkZJR19QTEFUX01BUFBJMiAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTMpCisjaW5jbHVkZSA8YXNtL21hcHBpMy9tYXBwaTNfcGxkLmg+CisjZW5kaWYJLyogQ09ORklHX1BMQVRfTUFQUEkzICovCisKICNpZiBkZWZpbmVkKENPTkZJR19QTEFUX1VTUlYpCiAjaW5jbHVkZSA8YXNtL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL21hcHBpMy9tYXBwaTNfcGxkLmggYi9pbmNsdWRlL2FzbS1tMzJyL21hcHBpMy9tYXBwaTNfcGxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxNTUxZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbWFwcGkzL21hcHBpM19wbGQuaApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtL21hcHBpMy9tYXBwaTNfcGxkLmgKKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgRXh0ZW5kZWQgSU8gTG9naWMgb24gTUFQUEkzIGJvYXJkLgorICogIGJhc2VkIG9uIG0zMjcwMHV0X3BsZC5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZgorICogdGhpcyBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX01BUFBJM19QTERfSAorI2RlZmluZSBfTUFQUEkzX1BMRF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKiBGSVhNRToKKyAqIFNvbWUgQyBmdW5jdGlvbnMgdXNlIG5vbi1jYWNoZSBhZGRyZXNzLCBzbyBjYW4ndCBkZWZpbmUgbm9uLWNhY2hlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgUExEX0JBU0UJCSgweDFjMDAwMDAwIC8qICsgTk9OQ0FDSEVfT0ZGU0VUICovKQorI2RlZmluZSBfX3JlZzgJCQkodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKQorI2RlZmluZSBfX3JlZzE2CQkJKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopCisjZGVmaW5lIF9fcmVnMzIJCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopCisjZWxzZQorI2RlZmluZSBQTERfQkFTRQkJKDB4MWMwMDAwMDAgKyBOT05DQUNIRV9PRkZTRVQpCisjZGVmaW5lIF9fcmVnOAorI2RlZmluZSBfX3JlZzE2CisjZGVmaW5lIF9fcmVnMzIKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworLyogQ0ZDICovCisjZGVmaW5lCVBMRF9DRlJTVENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgwMDAwKQorI2RlZmluZSBQTERfQ0ZTVFMJCV9fcmVnMTYoUExEX0JBU0UgKyAweDAwMDIpCisjZGVmaW5lIFBMRF9DRklNQVNLCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgwMDA0KQorI2RlZmluZSBQTERfQ0ZCVUZDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MDAwNikKKyNkZWZpbmUgUExEX0NGQ1IwCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgwMDBhKQorI2RlZmluZSBQTERfQ0ZDUjEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDAwMGMpCisKKy8qIE1NQyAqLworI2RlZmluZSBQTERfTU1DQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDQwMDApCisjZGVmaW5lIFBMRF9NTUNNT0QJCV9fcmVnMTYoUExEX0JBU0UgKyAweDQwMDIpCisjZGVmaW5lIFBMRF9NTUNTVFMJCV9fcmVnMTYoUExEX0JBU0UgKyAweDQwMDYpCisjZGVmaW5lIFBMRF9NTUNCQVVSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg0MDBhKQorI2RlZmluZSBQTERfTU1DQ01EQkNVVAkJX19yZWcxNihQTERfQkFTRSArIDB4NDAwYykKKyNkZWZpbmUgUExEX01NQ0NEVEJDVVQJCV9fcmVnMTYoUExEX0JBU0UgKyAweDQwMGUpCisjZGVmaW5lIFBMRF9NTUNERVQJCV9fcmVnMTYoUExEX0JBU0UgKyAweDQwMTApCisjZGVmaW5lIFBMRF9NTUNXUAkJX19yZWcxNihQTERfQkFTRSArIDB4NDAxMikKKyNkZWZpbmUgUExEX01NQ1dEQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg1MDAwKQorI2RlZmluZSBQTERfTU1DUkRBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDYwMDApCisjZGVmaW5lIFBMRF9NTUNDTUREQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHg3MDAwKQorI2RlZmluZSBQTERfTU1DUlNQREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4NzAwNikKKworLyogUG93ZXIgQ29udHJvbCBvZiBNTUMgYW5kIENGICovCisjZGVmaW5lIFBMRF9DUENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxNDAwMCkKKworCisvKj09PT0gSUNVID09PT0qLworI2RlZmluZSAgTTMyUl9JUlFfUEMxMDQgICAgICAgICg1KSAgIC8qIElOVDQoUEMvMTA0KSAqLworI2RlZmluZSAgTTMyUl9JUlFfSTJDICAgICAgICAgICgyOCkgIC8qIEkyQy1CVVMgICAgICovCisjZGVmaW5lICBQTERfSVJRX0NGSVJFUSAgICAgICAoNikgIC8qIElOVDUgQ0ZDIENhcmQgSW50ZXJydXB0ICovCisjZGVmaW5lICBQTERfSVJRX0NGQ19JTlNFUlQgICAoNykgIC8qIElOVDYgQ0ZDIENhcmQgSW5zZXJ0ICovCisjZGVmaW5lICBQTERfSVJRX0NGQ19FSkVDVCAgICAoOCkgIC8qIElOVDcgQ0ZDIENhcmQgRWplY3QgKi8KKyNkZWZpbmUgIFBMRF9JUlFfTU1DQ0FSRCAgICAgICg0MykgIC8qIE1NQyBDYXJkIEluc2VydCAqLworI2RlZmluZSAgUExEX0lSUV9NTUNJUlEgICAgICAgKDQ0KSAgLyogTU1DIFRyYW5zZmVyIERvbmUgKi8KKworCisjaWYgMAorLyogTEVEIENvbnRyb2wKKyAqCisgKiAxOiBESVAgc3dpY2ggc2lkZQorICogMjogUmVzZXQgc3dpdGNoIHNpZGUKKyAqLworI2RlZmluZSBQTERfSU9MRURDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MTQwMDIpCisjZGVmaW5lIFBMRF9JT0xFRF8xX09OCQkweDAwMQorI2RlZmluZSBQTERfSU9MRURfMV9PRkYJCTB4MDAwCisjZGVmaW5lIFBMRF9JT0xFRF8yX09OCQkweDAwMgorI2RlZmluZSBQTERfSU9MRURfMl9PRkYJCTB4MDAwCisKKy8qIERJUCBTd2l0Y2gKKyAqICAwOiBXcml0ZS1wcm90ZWN0IG9mIEZsYXNoIE1lbW9yeSAoMDpwcm90ZWN0ZWQsIDE6bm9uLXByb3RlY3RlZCkKKyAqICAxOiAtCisgKiAgMjogLQorICogIDM6IC0KKyAqLworI2RlZmluZSBQTERfSU9TV1NUUwkJX19yZWcxNihQTERfQkFTRSArIDB4MTQwMDQpCisjZGVmaW5lCVBMRF9JT1NXU1RTX0lPU1cyCTB4MDIwMAorI2RlZmluZQlQTERfSU9TV1NUU19JT1NXMQkweDAxMDAKKyNkZWZpbmUJUExEX0lPU1dTVFNfSU9XUDAJMHgwMDAxCisKKyNlbmRpZgorCisvKiBDUkMgKi8KKyNkZWZpbmUgUExEX0NSQzdEQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxODAwMCkKKyNkZWZpbmUgUExEX0NSQzdJTkRBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDAyKQorI2RlZmluZSBQTERfQ1JDMTZEQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxODAwNCkKKyNkZWZpbmUgUExEX0NSQzE2SU5EQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxODAwNikKKyNkZWZpbmUgUExEX0NSQzE2QURBVEEJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDA4KQorI2RlZmluZSBQTERfQ1JDMTZBSU5EQVRBCV9fcmVnMTYoUExEX0JBU0UgKyAweDE4MDBhKQorCisKKyNpZiAwCisvKiBSVEMgKi8KKyNkZWZpbmUgUExEX1JUQ0NSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxYzAwMCkKKyNkZWZpbmUgUExEX1JUQ0JBVVIJCV9fcmVnMTYoUExEX0JBU0UgKyAweDFjMDAyKQorI2RlZmluZSBQTERfUlRDV1JEQVRBCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgxYzAwNCkKKyNkZWZpbmUgUExEX1JUQ1JEREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4MWMwMDYpCisjZGVmaW5lIFBMRF9SVENSU1RPRFQJCV9fcmVnMTYoUExEX0JBU0UgKyAweDFjMDA4KQorCisvKiBTSU8wICovCisjZGVmaW5lIFBMRF9FU0lPMENSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwMCkKKyNkZWZpbmUJUExEX0VTSU8wQ1JfVFhFTgkweDAwMDEKKyNkZWZpbmUJUExEX0VTSU8wQ1JfUlhFTgkweDAwMDIKKyNkZWZpbmUgUExEX0VTSU8wTU9EMAkJX19yZWcxNihQTERfQkFTRSArIDB4MjAwMDIpCisjZGVmaW5lCVBMRF9FU0lPME1PRDBfQ1RTUwkweDAwNDAKKyNkZWZpbmUJUExEX0VTSU8wTU9EMF9SVFNTCTB4MDA4MAorI2RlZmluZSBQTERfRVNJTzBNT0QxCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgyMDAwNCkKKyNkZWZpbmUJUExEX0VTSU8wTU9EMV9MTUZTCTB4MDAxMAorI2RlZmluZSBQTERfRVNJTzBTVFMJCV9fcmVnMTYoUExEX0JBU0UgKyAweDIwMDA2KQorI2RlZmluZQlQTERfRVNJTzBTVFNfVEVNUAkweDAwMDEKKyNkZWZpbmUJUExEX0VTSU8wU1RTX1RYQ1AJMHgwMDAyCisjZGVmaW5lCVBMRF9FU0lPMFNUU19SWENQCTB4MDAwNAorI2RlZmluZQlQTERfRVNJTzBTVFNfVFhTQwkweDAxMDAKKyNkZWZpbmUJUExEX0VTSU8wU1RTX1JYU0MJMHgwMjAwCisjZGVmaW5lIFBMRF9FU0lPMFNUU19UWFJFQURZCShQTERfRVNJTzBTVFNfVFhDUCB8IFBMRF9FU0lPMFNUU19URU1QKQorI2RlZmluZSBQTERfRVNJTzBJTlRDUgkJX19yZWcxNihQTERfQkFTRSArIDB4MjAwMDgpCisjZGVmaW5lCVBMRF9FU0lPMElOVENSX1RYSUVOCTB4MDAwMgorI2RlZmluZQlQTERfRVNJTzBJTlRDUl9SWENFTgkweDAwMDQKKyNkZWZpbmUgUExEX0VTSU8wQkFVUgkJX19yZWcxNihQTERfQkFTRSArIDB4MjAwMGEpCisjZGVmaW5lIFBMRF9FU0lPMFRYQgkJX19yZWcxNihQTERfQkFTRSArIDB4MjAwMGMpCisjZGVmaW5lIFBMRF9FU0lPMFJYQgkJX19yZWcxNihQTERfQkFTRSArIDB4MjAwMGUpCisKKy8qIFNJTSBDYXJkICovCisjZGVmaW5lIFBMRF9TQ0NSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgzODAwMCkKKyNkZWZpbmUgUExEX1NDTU9ECQlfX3JlZzE2KFBMRF9CQVNFICsgMHgzODAwNCkKKyNkZWZpbmUgUExEX1NDU1RTCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgzODAwNikKKyNkZWZpbmUgUExEX1NDSU5UQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDA4KQorI2RlZmluZSBQTERfU0NCQVVSCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgzODAwYSkKKyNkZWZpbmUgUExEX1NDVFhCCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgzODAwYykKKyNkZWZpbmUgUExEX1NDUlhCCQlfX3JlZzE2KFBMRF9CQVNFICsgMHgzODAwZSkKKworI2VuZGlmCisKKyNlbmRpZgkvKiBfTUFQUEkzX1BMRC5IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaAppbmRleCA4Y2Q0ZDBkLi5iOWEyMGNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc21wLmgKQEAgLTY2LDcgKzY2LDcgQEAKICNkZWZpbmUgcGh5c2lkX3RvX2NwdShwaHlzaWQpCXBoeXNpZF8yX2NwdVtwaHlzaWRdCiAjZGVmaW5lIGNwdV90b19waHlzaWQoY3B1X2lkKQljcHVfMl9waHlzaWRbY3B1X2lkXQogCi0jZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQogCiBleHRlcm4gY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKICNkZWZpbmUgY3B1X3Bvc3NpYmxlX21hcCBjcHVfY2FsbG91dF9tYXAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc21wLmggYi9pbmNsdWRlL2FzbS1taXBzL3NtcC5oCmluZGV4IDhiYTM3MGUuLjU2MThmMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbXAuaApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKLSNkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAKIC8qIE1hcCBmcm9tIGNwdSBpZCB0byBzZXF1ZW50aWFsIGxvZ2ljYWwgY3B1IG51bWJlci4gIFRoaXMgd2lsbCBvbmx5CiAgICBub3QgYmUgaWRlbXBvdGVudCB3aGVuIGNwdXMgZmFpbGVkIHRvIGNvbWUgb24tbGluZS4gICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC9naXUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L2dpdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTA4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC9naXUuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogIEluY2x1ZGUgZmlsZSBmb3IgTkVDIFZSNDEwMCBzZXJpZXMgR2VuZXJhbC1wdXJwb3NlIEkvTyBVbml0LgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgIFlvaWNoaSBZdWFzYSA8eXVhc2FAaGguaWlqNHUub3IuanA+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19ORUNfVlI0MVhYX0dJVV9ICisjZGVmaW5lIF9fTkVDX1ZSNDFYWF9HSVVfSAorCit0eXBlZGVmIGVudW0geworCUlSUV9UUklHR0VSX0xFVkVMLAorCUlSUV9UUklHR0VSX0VER0UsCisJSVJRX1RSSUdHRVJfRURHRV9GQUxMSU5HLAorCUlSUV9UUklHR0VSX0VER0VfUklTSU5HLAorfSBpcnFfdHJpZ2dlcl90OworCit0eXBlZGVmIGVudW0geworCUlSUV9TSUdOQUxfVEhST1VHSCwKKwlJUlFfU0lHTkFMX0hPTEQsCit9IGlycV9zaWduYWxfdDsKKworZXh0ZXJuIHZvaWQgdnI0MXh4X3NldF9pcnFfdHJpZ2dlcih1bnNpZ25lZCBpbnQgcGluLCBpcnFfdHJpZ2dlcl90IHRyaWdnZXIsIGlycV9zaWduYWxfdCBzaWduYWwpOworCit0eXBlZGVmIGVudW0geworCUlSUV9MRVZFTF9MT1csCisJSVJRX0xFVkVMX0hJR0gsCit9IGlycV9sZXZlbF90OworCitleHRlcm4gdm9pZCB2cjQxeHhfc2V0X2lycV9sZXZlbCh1bnNpZ25lZCBpbnQgcGluLCBpcnFfbGV2ZWxfdCBsZXZlbCk7CisKK3R5cGVkZWYgZW51bSB7CisJR1BJT19EQVRBX0xPVywKKwlHUElPX0RBVEFfSElHSCwKKwlHUElPX0RBVEFfSU5WQUwsCit9IGdwaW9fZGF0YV90OworCitleHRlcm4gZ3Bpb19kYXRhX3QgdnI0MXh4X2dwaW9fZ2V0X3Bpbih1bnNpZ25lZCBpbnQgcGluKTsKK2V4dGVybiBpbnQgdnI0MXh4X2dwaW9fc2V0X3Bpbih1bnNpZ25lZCBpbnQgcGluLCBncGlvX2RhdGFfdCBkYXRhKTsKKwordHlwZWRlZiBlbnVtIHsKKwlHUElPX0lOUFVULAorCUdQSU9fT1VUUFVULAorCUdQSU9fT1VUUFVUX0RJU0FCTEUsCit9IGdwaW9fZGlyZWN0aW9uX3Q7CisKK2V4dGVybiBpbnQgdnI0MXh4X2dwaW9fc2V0X2RpcmVjdGlvbih1bnNpZ25lZCBpbnQgcGluLCBncGlvX2RpcmVjdGlvbl90IGRpcik7CisKK3R5cGVkZWYgZW51bSB7CisJR1BJT19QVUxMX0RPV04sCisJR1BJT19QVUxMX1VQLAorCUdQSU9fUFVMTF9ESVNBQkxFLAorfSBncGlvX3B1bGxfdDsKKworZXh0ZXJuIGludCB2cjQxeHhfZ3Bpb19wdWxsdXBkb3duKHVuc2lnbmVkIGludCBwaW4sIGdwaW9fcHVsbF90IHB1bGwpOworCisjZW5kaWYgLyogX19ORUNfVlI0MVhYX0dJVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC92cjQxeHguaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3ZyNDF4eC5oCmluZGV4IGFkMGQxZWEuLjdkNDFlNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3ZyNDF4eC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3ZyNDF4eC5oCkBAIC0xMjYsNyArMTI2LDYgQEAKICNkZWZpbmUgR0lVX0lSUV9CQVNFCQk0MAogI2RlZmluZSBHSVVfSVJRKHgpCQkoR0lVX0lSUV9CQVNFICsgKHgpKQkvKiBJUlEgNDAtNzEgKi8KICNkZWZpbmUgR0lVX0lSUV9MQVNUCQlHSVVfSVJRKDMxKQotI2RlZmluZSBHSVVfSVJRX1RPX1BJTih4KQkoKHgpIC0gR0lVX0lSUV9CQVNFKQkvKiBQaW4gMC0zMSAqLwogCiBleHRlcm4gaW50IHZyNDF4eF9zZXRfaW50YXNzaWduKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGNoYXIgaW50YXNzaWduKTsKIGV4dGVybiBpbnQgdnI0MXh4X2Nhc2NhZGVfaXJxKHVuc2lnbmVkIGludCBpcnEsIGludCAoKmdldF9pcnFfbnVtYmVyKShpbnQgaXJxKSk7CkBAIC0xOTcsMzggKzE5Niw0IEBACiBleHRlcm4gdm9pZCB2cjQxeHhfZW5hYmxlX2JjdWludCh2b2lkKTsKIGV4dGVybiB2b2lkIHZyNDF4eF9kaXNhYmxlX2JjdWludCh2b2lkKTsKIAotLyoKLSAqIEdlbmVyYWwtUHVycG9zZSBJL08gVW5pdAotICovCi1lbnVtIHsKLQlUUklHR0VSX0xFVkVMLAotCVRSSUdHRVJfRURHRSwKLQlUUklHR0VSX0VER0VfRkFMTElORywKLQlUUklHR0VSX0VER0VfUklTSU5HCi19OwotCi1lbnVtIHsKLQlTSUdOQUxfVEhST1VHSCwKLQlTSUdOQUxfSE9MRAotfTsKLQotZXh0ZXJuIHZvaWQgdnI0MXh4X3NldF9pcnFfdHJpZ2dlcihpbnQgcGluLCBpbnQgdHJpZ2dlciwgaW50IGhvbGQpOwotCi1lbnVtIHsKLQlMRVZFTF9MT1csCi0JTEVWRUxfSElHSAotfTsKLQotZXh0ZXJuIHZvaWQgdnI0MXh4X3NldF9pcnFfbGV2ZWwoaW50IHBpbiwgaW50IGxldmVsKTsKLQotZW51bSB7Ci0JUElPX0lOUFVULAotCVBJT19PVVRQVVQKLX07Ci0KLWVudW0gewotCURBVEFfTE9XLAotCURBVEFfSElHSAotfTsKLQogI2VuZGlmIC8qIF9fTkVDX1ZSNDFYWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc21wLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc21wLmgKaW5kZXggZmRlNzdhYy4uOTQxM2Y2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zbXAuaApAQCAtNTEsNyArNTEsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVfcHJlc2VudF9tYXNrOwogCi0jZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaXJxLmggYi9pbmNsdWRlL2FzbS1wcGMvaXJxLmgKaW5kZXggMDZiODZiZS4uYTliMzMzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pcnEuaApAQCAtMTc2LDcgKzE3Niw3IEBACiAqLwogI2luY2x1ZGUgPGFzbS9tcGM4NXh4Lmg+CiAKLS8qIFRoZSBNUEM4NTYwIG9wZW5waWMgaGFzICAzMiBpbnRlcm5hbCBpbnRlcnJ1cHRzIGFuZCAxMiBleHRlcm5hbAorLyogVGhlIE1QQzg1NDggb3BlbnBpYyBoYXMgNDggaW50ZXJuYWwgaW50ZXJydXB0cyBhbmQgMTIgZXh0ZXJuYWwKICAqIGludGVycnVwdHMuCiAgKgogICogV2UgYXJlICJmbGF0dGVuaW5nIiB0aGUgaW50ZXJydXB0IHZlY3RvcnMgb2YgdGhlIGNhc2NhZGVkIENQTQpAQCAtMTg0LDcgKzE4NCw3IEBACiAgKiBzaW5nbGUgaW50ZWdlci4KICAqLwogI2RlZmluZSBOUl9DUE1fSU5UUwk2NAotI2RlZmluZSBOUl9FUElDX0lOVFMJNDQKKyNkZWZpbmUgTlJfRVBJQ19JTlRTCTYwCiAjaWZuZGVmIE5SXzgyNTlfSU5UUwogI2RlZmluZSBOUl84MjU5X0lOVFMJMAogI2VuZGlmCkBAIC0yMjMsOSArMjIzLDE1IEBACiAjZGVmaW5lIE1QQzg1eHhfSVJRX1JJT19SWAkoMTIgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKICNkZWZpbmUgTVBDODV4eF9JUlFfVFNFQzFfVFgJKDEzICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCiAjZGVmaW5lIE1QQzg1eHhfSVJRX1RTRUMxX1JYCSgxNCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9UU0VDM19UWAkoMTUgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfVFNFQzNfUlgJKDE2ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX1RTRUMzX0VSUk9SCSgxNyArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQogI2RlZmluZSBNUEM4NXh4X0lSUV9UU0VDMV9FUlJPUgkoMTggKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKICNkZWZpbmUgTVBDODV4eF9JUlFfVFNFQzJfVFgJKDE5ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCiAjZGVmaW5lIE1QQzg1eHhfSVJRX1RTRUMyX1JYCSgyMCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9UU0VDNF9UWAkoMjEgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfVFNFQzRfUlgJKDIyICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX1RTRUM0X0VSUk9SCSgyMyArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQogI2RlZmluZSBNUEM4NXh4X0lSUV9UU0VDMl9FUlJPUgkoMjQgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKICNkZWZpbmUgTVBDODV4eF9JUlFfRkVDCQkoMjUgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKICNkZWZpbmUgTVBDODV4eF9JUlFfRFVBUlQJKDI2ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCkBAIC0yMzUsMTggKzI0MSwxOCBAQAogI2RlZmluZSBNUEM4NXh4X0lSUV9DUE0JCSgzMCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQogCiAvKiBUaGUgMTIgZXh0ZXJuYWwgaW50ZXJydXB0IGxpbmVzICovCi0jZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDAgICAgICAgICgzMiArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQotI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQxICAgICAgICAoMzMgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKLSNkZWZpbmUgTVBDODV4eF9JUlFfRVhUMiAgICAgICAgKDM0ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCi0jZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDMgICAgICAgICgzNSArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQotI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQ0ICAgICAgICAoMzYgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKLSNkZWZpbmUgTVBDODV4eF9JUlFfRVhUNSAgICAgICAgKDM3ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCi0jZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDYgICAgICAgICgzOCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQotI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQ3ICAgICAgICAoMzkgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKLSNkZWZpbmUgTVBDODV4eF9JUlFfRVhUOCAgICAgICAgKDQwICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCi0jZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDkgICAgICAgICg0MSArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQotI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQxMCAgICAgICAoNDIgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKLSNkZWZpbmUgTVBDODV4eF9JUlFfRVhUMTEgICAgICAgKDQzICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDAgICAgICAgICg0OCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQxICAgICAgICAoNDkgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfRVhUMiAgICAgICAgKDUwICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDMgICAgICAgICg1MSArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQ0ICAgICAgICAoNTIgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfRVhUNSAgICAgICAgKDUzICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDYgICAgICAgICg1NCArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQ3ICAgICAgICAoNTUgKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfRVhUOCAgICAgICAgKDU2ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCisjZGVmaW5lIE1QQzg1eHhfSVJRX0VYVDkgICAgICAgICg1NyArIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VUKQorI2RlZmluZSBNUEM4NXh4X0lSUV9FWFQxMCAgICAgICAoNTggKyBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCkKKyNkZWZpbmUgTVBDODV4eF9JUlFfRVhUMTEgICAgICAgKDU5ICsgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQpCiAKIC8qIENQTSByZWxhdGVkIGludGVycnVwdHMgKi8KICNkZWZpbmUJU0lVX0lOVF9FUlJPUgkJKCh1aW50KTB4MDArQ1BNX0lSUV9PRkZTRVQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjMTB4LmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjMTB4LmgKaW5kZXggZDhlN2UyZC4uZjUxOTZhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21wYzEweC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGMxMHguaApAQCAtMTU5LDYgKzE1OSwxMiBAQAogI2RlZmluZQlNUEMxMFhfTUFQQV9FVU1CX0JBU0UJCShpb3JlbWFwX2Jhc2UgLSBNUEMxMFhfRVVNQl9TSVpFKQogI2RlZmluZQlNUEMxMFhfTUFQQl9FVU1CX0JBU0UJCU1QQzEwWF9NQVBBX0VVTUJfQkFTRQogCitlbnVtIHBwY19zeXNfZGV2aWNlcyB7CisJTVBDMTBYX0lJQzEsCisJTVBDMTBYX0RNQTAsCisJTVBDMTBYX0RNQTEsCisJTVBDMTBYX0RVQVJULAorfTsKIAogaW50IG1wYzEweF9icmlkZ2VfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCiAJCSAgICAgICB1aW50IGN1cnJlbnRfbWFwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzg1eHguaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4NXh4LmgKaW5kZXggMjI3MTNlMy4uNTE2OTg0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21wYzg1eHguaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjODV4eC5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZkZWYgQ09ORklHX01QQzg1NDBfQURTCiAjaW5jbHVkZSA8cGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuaD4KICNlbmRpZgotI2lmZGVmIENPTkZJR19NUEM4NTU1X0NEUworI2lmIGRlZmluZWQoQ09ORklHX01QQzg1NTVfQ0RTKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTQ4X0NEUykKICNpbmNsdWRlIDxwbGF0Zm9ybXMvODV4eC9tcGM4NTU1X2Nkcy5oPgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX01QQzg1NjBfQURTCkBAIC03NCw3ICs3NCw3IEBACiAjZGVmaW5lIE1QQzg1eHhfR1VUU19PRkZTRVQJKDB4ZTAwMDApCiAjZGVmaW5lIE1QQzg1eHhfR1VUU19TSVpFCSgweDAxMDAwKQogI2RlZmluZSBNUEM4NXh4X0lJQzFfT0ZGU0VUCSgweDAzMDAwKQotI2RlZmluZSBNUEM4NXh4X0lJQzFfU0laRQkoMHgwMTAwMCkKKyNkZWZpbmUgTVBDODV4eF9JSUMxX1NJWkUJKDB4MDAxMDApCiAjZGVmaW5lIE1QQzg1eHhfT1BFTlBJQ19PRkZTRVQJKDB4NDAwMDApCiAjZGVmaW5lIE1QQzg1eHhfT1BFTlBJQ19TSVpFCSgweDQwMDAwKQogI2RlZmluZSBNUEM4NXh4X1BDSTFfT0ZGU0VUCSgweDA4MDAwKQpAQCAtMTI3LDggKzEyNyw2NCBAQAogCU1QQzg1eHhfQ1BNX01DQzIsCiAJTVBDODV4eF9DUE1fU01DMSwKIAlNUEM4NXh4X0NQTV9TTUMyLAorCU1QQzg1eHhfZVRTRUMxLAorCU1QQzg1eHhfZVRTRUMyLAorCU1QQzg1eHhfZVRTRUMzLAorCU1QQzg1eHhfZVRTRUM0LAorCU1QQzg1eHhfSUlDMiwKIH07CiAKKy8qIEludGVybmFsIGludGVycnVwdHMgYXJlIGFsbCBMZXZlbCBTZW5zaXRpdmUsIGFuZCBQb3NpdGl2ZSBQb2xhcml0eSAqLworI2RlZmluZSBNUEM4NVhYX0lOVEVSTkFMX0lSUV9TRU5TRVMgXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgMCAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICAxICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDIgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgMyAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA0ICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDUgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgNiAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA3ICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDggKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgOSAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDEwICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTEgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxMiAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDEzICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTQgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxNSAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE2ICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTcgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxOCAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE5ICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjAgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyMSAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDIyICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjMgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyNCAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI1ICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjYgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyNyAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI4ICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjkgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAzMCAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDMxICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzIgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAzMyAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDM0ICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzUgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAzNiAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDM3ICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzggKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAzOSAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDQwICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgNDEgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCA0MiAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDQzICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgNDQgKi8JXAorCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCA0NSAqLwlcCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDQ2ICovCVwKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKQkvKiBJbnRlcm5hbCA0NyAqLworCiAjZW5kaWYgLyogQ09ORklHXzg1eHggKi8KICNlbmRpZiAvKiBfX0FTTV9NUEM4NXh4X0hfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oCmluZGV4IGEzODYwNmQuLjRkNGIyMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BndGFibGUuaApAQCAtMjY3LDggKzI2Nyw2IEBACiAjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCiAjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQogCi0jZGVmaW5lIE5VTV9UTEJDQU1TCSgxNikKLQogI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4KQogLyogRGVmaW5pdGlvbnMgZm9yIDh4eCBlbWJlZGRlZCBjaGlwcy4gKi8KICNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEJLyogUGFnZSBpcyB2YWxpZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BwY19zeXMuaCBiL2luY2x1ZGUvYXNtLXBwYy9wcGNfc3lzLmgKaW5kZXggMjRiOTkxYy4uOGVhNjI0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BwY19zeXMuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcHBjX3N5cy5oCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8YXNtL21wYzg1eHguaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19NUEM1Mnh4KQogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19NUEMxMFhfQlJJREdFKQorI2luY2x1ZGUgPGFzbS9tcGMxMHguaD4KICNlbHNlCiAjZXJyb3IgIm5lZWQgZGVmaW5pdGlvbiBvZiBwcGNfc3lzX2RldmljZXMiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zbXAuaCBiL2luY2x1ZGUvYXNtLXBwYy9zbXAuaAppbmRleCBlYmZiNjE0Li4xNzUzMGMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NtcC5oCkBAIC00NCw3ICs0NCw3IEBACiAjZGVmaW5lIE5PX1BST0NfSUQJCTB4RkYgICAgICAgICAgICAvKiBObyBwcm9jZXNzb3IgbWFnaWMgbWFya2VyICovCiAjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMjAKIAotI2RlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKIAogZXh0ZXJuIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvZG1hLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9kbWEuaAppbmRleCBkNjkzYjgwLi5kZmQxZjY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9kbWEuaApAQCAtMjcsNiArMjcsOCBAQAogLyogRG9lc24ndCByZWFsbHkgYXBwbHkuLi4gKi8KICNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICAofjBVTCkKIAorI2lmICFkZWZpbmVkKENPTkZJR19QUENfSVNFUklFUykgfHwgZGVmaW5lZChDT05GSUdfUENJKQorCiAjZGVmaW5lIGRtYV9vdXRiCW91dGIKICNkZWZpbmUgZG1hX2luYgkJaW5iCiAKQEAgLTMyMyw0ICszMjUsNSBAQAogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICNkZWZpbmUgaXNhX2RtYV9icmlkZ2VfYnVnZ3kgICAoMCkKICNlbmRpZgorI2VuZGlmCS8qICFkZWZpbmVkKENPTkZJR19QUENfSVNFUklFUykgfHwgZGVmaW5lZChDT05GSUdfUENJKSAqLwogI2VuZGlmIC8qIF9BU01fRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbC5oCmluZGV4IGQ5YTJlNzQuLmMzZjE5NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGwuaApAQCAtMSw4NCArMSwzNiBAQAogLyoKICAqIEh2Q2FsbC5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLwlUaGlzIGZpbGUgY29udGFpbnMgdGhlICJoeXBlcnZpc29yIGNhbGwiIGludGVyZmFjZSB3aGljaCBpcyB1c2VkIHRvCi0vLwlkcml2ZSB0aGUgaHlwZXJ2aXNvciBmcm9tIHRoZSBPUy4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgImh5cGVydmlzb3IgY2FsbCIgaW50ZXJmYWNlIHdoaWNoIGlzIHVzZWQgdG8KKyAqIGRyaXZlIHRoZSBoeXBlcnZpc29yIGZyb20gdGhlIE9TLgorICovCiAjaWZuZGVmIF9IVkNBTExfSAogI2RlZmluZSBfSFZDQUxMX0gKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTdGFuZGFyZCBJbmNsdWRlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsU2MuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KIAotLyoKLWVudW0gSHZDYWxsX1JldHVybkNvZGUKLXsKLQlIdkNhbGxfR29vZAkJPSAwLAotCUh2Q2FsbF9QYXJ0aWFsCQk9IDEsCi0JSHZDYWxsX05vdE93bmVkCQk9IDIsCi0JSHZDYWxsX05vdEZyZWVkCQk9IDMsCi0JSHZDYWxsX1Vuc3BlY2lmaWVkRXJyb3IJPSA0Ci19OwotCi1lbnVtIEh2Q2FsbF9UeXBlT2ZTSVQKLXsKLQlIdkNhbGxfUmVkdWNlT25seQk9IDAsCi0JSHZDYWxsX1VuY29uZGl0aW9uYWwJPSAxCi19OwotCi1lbnVtIEh2Q2FsbF9UeXBlT2ZZaWVsZAotewotCUh2Q2FsbF9ZaWVsZFRpbWVkCT0gMCwJLy8gWWllbGQgdW50aWwgc3BlY2lmaWVkIHRpbWUKLQlIdkNhbGxfWWllbGRUb0FjdGl2ZQk9IDEsCS8vIFlpZWxkIHVudGlsIGFsbCBhY3RpdmUgcHJvY3MgaGF2ZSBydW4KLQlIdkNhbGxfWWllbGRUb1Byb2MJPSAyCS8vIFlpZWxkIHVudGlsIHRoZSBzcGVjaWZpZWQgcHJvY2Vzc29yIGhhcyBydW4KLX07Ci0KLWVudW0gSHZDYWxsX0ludGVycnVwdE1hc2tzCi17Ci0JSHZDYWxsX01hc2tJUEkJCT0gMHgwMDAwMDAwMSwKLQlIdkNhbGxfTWFza0xwRXZlbnQJPSAweDAwMDAwMDAyLAotCUh2Q2FsbF9NYXNrTHBQcm9kCT0gMHgwMDAwMDAwNCwKLQlIdkNhbGxfTWFza1RpbWVvdXQJPSAweDAwMDAwMDA4Ci19OwotCi1lbnVtIEh2Q2FsbF9WYXJ5T2ZmQ2h1bmtSYwotewotCUh2Q2FsbF9WYXJ5T2ZmU3VjY2VlZGVkCQk9IDAsCi0JSHZDYWxsX1ZhcnlPZmZXaXRoZHJhd24JCT0gMSwKLQlIdkNhbGxfQ2h1bmtJbkxvYWRBcmVhCQk9IDIsCi0JSHZDYWxsX0NodW5rSW5IUFQJCT0gMywKLQlIdkNhbGxfQ2h1bmtOb3RBY2Nlc3NpYmxlCT0gNCwKLQlIdkNhbGxfQ2h1bmtJblVzZQkJPSA1Ci19OwotKi8KLQogLyogVHlwZSBvZiB5aWVsZCBmb3IgSHZDYWxsQmFzZVlpZWxkUHJvY2Vzc29yICovCi0jZGVmaW5lIEh2Q2FsbF9ZaWVsZFRpbWVkIAkwCS8vIFlpZWxkIHVudGlsIHNwZWNpZmllZCB0aW1lICh0YikKLSNkZWZpbmUgSHZDYWxsX1lpZWxkVG9BY3RpdmUJMQkvLyBZaWVsZCB1bnRpbCBhbGwgYWN0aXZlIHByb2NzIGhhdmUgcnVuCi0jZGVmaW5lIEh2Q2FsbF9ZaWVsZFRvUHJvYwkyCS8vIFlpZWxkIHVudGlsIHRoZSBzcGVjaWZpZWQgcHJvY2Vzc29yIGhhcyBydW4KKyNkZWZpbmUgSHZDYWxsX1lpZWxkVGltZWQJMAkvKiBZaWVsZCB1bnRpbCBzcGVjaWZpZWQgdGltZSAodGIpICovCisjZGVmaW5lIEh2Q2FsbF9ZaWVsZFRvQWN0aXZlCTEJLyogWWllbGQgdW50aWwgYWxsIGFjdGl2ZSBwcm9jcyBoYXZlIHJ1biAqLworI2RlZmluZSBIdkNhbGxfWWllbGRUb1Byb2MJMgkvKiBZaWVsZCB1bnRpbCB0aGUgc3BlY2lmaWVkIHByb2Nlc3NvciBoYXMgcnVuICovCiAKIC8qIGludGVycnVwdCBtYXNrcyBmb3Igc2V0RW5hYmxlZEludGVycnVwdHMgKi8KICNkZWZpbmUgSHZDYWxsX01hc2tJUEkJCTB4MDAwMDAwMDEKQEAgLTg2LDcgKzM4LDcgQEAKICNkZWZpbmUgSHZDYWxsX01hc2tMcFByb2QJMHgwMDAwMDAwNAogI2RlZmluZSBIdkNhbGxfTWFza1RpbWVvdXQJMHgwMDAwMDAwOAogCi0vKiBMb2cgYnVmZmVyIGZvcm1hdHMgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBMb2cgYnVmZmVyIGZvcm1hdHMgKi8KICNkZWZpbmUgSHZDYWxsX0xvZ0J1ZmZlcl9BU0NJSSAgICAgICAgICAwCiAjZGVmaW5lIEh2Q2FsbF9Mb2dCdWZmZXJfRUJDRElDICAgICAgICAgMQogCkBAIC05NSw3ICs0Nyw3IEBACiAjZGVmaW5lIEh2Q2FsbEJhc2VHZXRId1BhdGNoCQkJCUh2Q2FsbEJhc2UgKyAgMgogI2RlZmluZSBIdkNhbGxCYXNlUmVJcGxTcEF0dG4JCQkJSHZDYWxsQmFzZSArICAzCiAjZGVmaW5lIEh2Q2FsbEJhc2VTZXRBU1IJCQkJSHZDYWxsQmFzZSArICA0Ci0jZGVmaW5lIEh2Q2FsbEJhc2VTZXRBU1JBbmRSZmkJCQkJSHZDYWxsQmFzZSArICA1IAorI2RlZmluZSBIdkNhbGxCYXNlU2V0QVNSQW5kUmZpCQkJCUh2Q2FsbEJhc2UgKyAgNQogI2RlZmluZSBIdkNhbGxCYXNlU2V0SU1SCQkJCUh2Q2FsbEJhc2UgKyAgNgogI2RlZmluZSBIdkNhbGxCYXNlU2VuZElQSQkJCQlIdkNhbGxCYXNlICsgIDcKICNkZWZpbmUgSHZDYWxsQmFzZVRlcm1pbmF0ZU1hY2hpbmUJCQlIdkNhbGxCYXNlICsgIDgKQEAgLTExNSw5MSArNjcsNDcgQEAKICNkZWZpbmUgSHZDYWxsQmFzZUdldExvZ0J1ZmZlckNvZGVQYWdlCQkJSHZDYWxsQmFzZSArIDIyCiAjZGVmaW5lIEh2Q2FsbEJhc2VHZXRMb2dCdWZmZXJGb3JtYXQJCQlIdkNhbGxCYXNlICsgMjMKICNkZWZpbmUgSHZDYWxsQmFzZUdldExvZ0J1ZmZlckxlbmd0aAkJCUh2Q2FsbEJhc2UgKyAyNAotI2RlZmluZSBIdkNhbGxCYXNlUmVhZExvZ0J1ZmZlciAJCQlIdkNhbGxCYXNlICsgMjUKKyNkZWZpbmUgSHZDYWxsQmFzZVJlYWRMb2dCdWZmZXIJCQkJSHZDYWxsQmFzZSArIDI1CiAjZGVmaW5lIEh2Q2FsbEJhc2VTZXRMb2dCdWZmZXJGb3JtYXRBbmRDb2RlUGFnZQkJSHZDYWxsQmFzZSArIDI2Ci0jZGVmaW5lIEh2Q2FsbEJhc2VXcml0ZUxvZ0J1ZmZlciAgICAgICAgICAgICAgIAkJSHZDYWxsQmFzZSArIDI3CisjZGVmaW5lIEh2Q2FsbEJhc2VXcml0ZUxvZ0J1ZmZlcgkJCUh2Q2FsbEJhc2UgKyAyNwogI2RlZmluZSBIdkNhbGxCYXNlUm91dGVyMjgJCQkJSHZDYWxsQmFzZSArIDI4CiAjZGVmaW5lIEh2Q2FsbEJhc2VSb3V0ZXIyOQkJCQlIdkNhbGxCYXNlICsgMjkKICNkZWZpbmUgSHZDYWxsQmFzZVJvdXRlcjMwCQkJCUh2Q2FsbEJhc2UgKyAzMAotI2RlZmluZSBIdkNhbGxCYXNlU2V0RGVidWdCdXMgCQkJCUh2Q2FsbEJhc2UgKyAzMQorI2RlZmluZSBIdkNhbGxCYXNlU2V0RGVidWdCdXMJCQkJSHZDYWxsQmFzZSArIDMxCiAKLSNkZWZpbmUgSHZDYWxsQ2NTZXREQUJSICAJCQkJSHZDYWxsQ2MgKyA3CisjZGVmaW5lIEh2Q2FsbENjU2V0REFCUgkJCQkJSHZDYWxsQ2MgKyA3CiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB2b2lkCQlIdkNhbGxfc2V0VmlydHVhbERlY3Iodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBIdkNhbGxfc2V0VmlydHVhbERlY3Iodm9pZCkKIHsKLQkvKiBJZ25vcmUgYW55IGVycm9yIHJldHVybiBjb2RlcyAtIG1vc3QgbGlrZWx5IG1lYW5zIHRoYXQgdGhlIHRhcmdldCB2YWx1ZSBmb3IgdGhlCi0JICogTFAgaGFzIGJlZW4gaW5jcmVhc2VkIGFuZCB0aGlzIHZhcnkgb2ZmIHdvdWxkIGJyaW5nIHVzIGJlbG93IHRoZSBuZXcgdGFyZ2V0LiAqLworCS8qCisJICogSWdub3JlIGFueSBlcnJvciByZXR1cm4gY29kZXMgLSBtb3N0IGxpa2VseSBtZWFucyB0aGF0IHRoZQorCSAqIHRhcmdldCB2YWx1ZSBmb3IgdGhlIExQIGhhcyBiZWVuIGluY3JlYXNlZCBhbmQgdGhpcyB2YXJ5IG9mZgorCSAqIHdvdWxkIGJyaW5nIHVzIGJlbG93IHRoZSBuZXcgdGFyZ2V0LgorCSAqLwogCUh2Q2FsbDAoSHZDYWxsQmFzZVNldFZpcnR1YWxEZWNyKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHZvaWQJCUh2Q2FsbF95aWVsZFByb2Nlc3Nvcih1bnNpZ25lZCB0eXBlT2ZZaWVsZCwgdTY0IHlpZWxkUGFybSkKKworc3RhdGljIGlubGluZSB2b2lkIEh2Q2FsbF95aWVsZFByb2Nlc3Nvcih1bnNpZ25lZCB0eXBlT2ZZaWVsZCwgdTY0IHlpZWxkUGFybSkKIHsKLQlIdkNhbGwyKCBIdkNhbGxCYXNlWWllbGRQcm9jZXNzb3IsIHR5cGVPZllpZWxkLCB5aWVsZFBhcm0gKTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHZvaWQJCUh2Q2FsbF9zZXRFbmFibGVkSW50ZXJydXB0cyh1NjQgZW5hYmxlZEludGVycnVwdHMpCi17Ci0JSHZDYWxsMShIdkNhbGxCYXNlU2V0RW5hYmxlZEludGVycnVwdHMsZW5hYmxlZEludGVycnVwdHMpOworCUh2Q2FsbDIoSHZDYWxsQmFzZVlpZWxkUHJvY2Vzc29yLCB0eXBlT2ZZaWVsZCwgeWllbGRQYXJtKTsKIH0KIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdm9pZAkJSHZDYWxsX2NsZWFyTG9nQnVmZmVyKEh2THBJbmRleCBscGluZGV4KQorc3RhdGljIGlubGluZSB2b2lkIEh2Q2FsbF9zZXRFbmFibGVkSW50ZXJydXB0cyh1NjQgZW5hYmxlZEludGVycnVwdHMpCiB7Ci0JSHZDYWxsMShIdkNhbGxCYXNlQ2xlYXJMb2dCdWZmZXIsbHBpbmRleCk7CisJSHZDYWxsMShIdkNhbGxCYXNlU2V0RW5hYmxlZEludGVycnVwdHMsIGVuYWJsZWRJbnRlcnJ1cHRzKTsKIH0KIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTMyICAJCUh2Q2FsbF9nZXRMb2dCdWZmZXJDb2RlUGFnZShIdkxwSW5kZXggbHBpbmRleCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBIdkNhbGxfc2V0TG9nQnVmZmVyRm9ybWF0QW5kQ29kZXBhZ2UoaW50IGZvcm1hdCwKKwkJdTMyIGNvZGVQYWdlKQogewotCXUzMiByZXRWYWwgPSBIdkNhbGwxKEh2Q2FsbEJhc2VHZXRMb2dCdWZmZXJDb2RlUGFnZSxscGluZGV4KTsKLQlyZXR1cm4gcmV0VmFsOworCUh2Q2FsbDIoSHZDYWxsQmFzZVNldExvZ0J1ZmZlckZvcm1hdEFuZENvZGVQYWdlLCBmb3JtYXQsIGNvZGVQYWdlKTsKIH0KIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgaW50ICAJCUh2Q2FsbF9nZXRMb2dCdWZmZXJGb3JtYXQoSHZMcEluZGV4IGxwaW5kZXgpCi17Ci0JaW50IHJldFZhbCA9IEh2Q2FsbDEoSHZDYWxsQmFzZUdldExvZ0J1ZmZlckZvcm1hdCxscGluZGV4KTsKLQlyZXR1cm4gcmV0VmFsOwotfQorZXh0ZXJuIHZvaWQgSHZDYWxsX3dyaXRlTG9nQnVmZmVyKGNvbnN0IHZvaWQgKmJ1ZmZlciwgdTY0IGJ1Zkxlbik7CiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHUzMiAgCQlIdkNhbGxfZ2V0TG9nQnVmZmVyTGVuZ3RoKEh2THBJbmRleCBscGluZGV4KQorc3RhdGljIGlubGluZSB2b2lkIEh2Q2FsbF9zZW5kSVBJKHN0cnVjdCBwYWNhX3N0cnVjdCAqdGFyZ2V0UGFjYSkKIHsKLQl1MzIgcmV0VmFsID0gSHZDYWxsMShIdkNhbGxCYXNlR2V0TG9nQnVmZmVyTGVuZ3RoLGxwaW5kZXgpOwotCXJldHVybiByZXRWYWw7Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHZvaWQgIAkJSHZDYWxsX3NldExvZ0J1ZmZlckZvcm1hdEFuZENvZGVwYWdlKGludCBmb3JtYXQsIHUzMiBjb2RlUGFnZSkKLXsKLQlIdkNhbGwyKEh2Q2FsbEJhc2VTZXRMb2dCdWZmZXJGb3JtYXRBbmRDb2RlUGFnZSxmb3JtYXQsIGNvZGVQYWdlKTsKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWludCBIdkNhbGxfcmVhZExvZ0J1ZmZlcihIdkxwSW5kZXggbHBpbmRleCwgdm9pZCAqYnVmZmVyLCB1NjQgYnVmTGVuKTsKLXZvaWQgSHZDYWxsX3dyaXRlTG9nQnVmZmVyKGNvbnN0IHZvaWQgKmJ1ZmZlciwgdTY0IGJ1Zkxlbik7Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHZvaWQJCUh2Q2FsbF9zZW5kSVBJKHN0cnVjdCBwYWNhX3N0cnVjdCAqIHRhcmdldFBhY2EpCi17Ci0JSHZDYWxsMSggSHZDYWxsQmFzZVNlbmRJUEksIHRhcmdldFBhY2EtPnBhY2FfaW5kZXggKTsKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdm9pZAkJSHZDYWxsX3Rlcm1pbmF0ZU1hY2hpbmVTcmModm9pZCkKLXsKLQlIdkNhbGwwKCBIdkNhbGxCYXNlVGVybWluYXRlTWFjaGluZVNyYyApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgSHZDYWxsX3NldERBQlIodW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JSHZDYWxsMShIdkNhbGxDY1NldERBQlIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBIdkNhbGxfc2V0RGVidWdCdXModW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JSHZDYWxsMShIdkNhbGxCYXNlU2V0RGVidWdCdXMsIHZhbCk7CisJSHZDYWxsMShIdkNhbGxCYXNlU2VuZElQSSwgdGFyZ2V0UGFjYS0+cGFjYV9pbmRleCk7CiB9CiAKICNlbmRpZiAvKiBfSFZDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsQ2ZnLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbENmZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjQwZjE2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsQ2ZnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLyoKLSAqIEh2Q2FsbENmZy5oCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8JVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSAiaHlwZXJ2aXNvciBjYWxsIiBpbnRlcmZhY2Ugd2hpY2ggaXMgdXNlZCB0bwotLy8JZHJpdmUgdGhlIGh5cGVydmlzb3IgZnJvbSB0aGUgT1MuCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jaWZuZGVmIF9IVkNBTExDRkdfSAotI2RlZmluZSBfSFZDQUxMQ0ZHX0gKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTdGFuZGFyZCBJbmNsdWRlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsU2MuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29uc3RhbnRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZW51bSBIdkNhbGxDZmdfUmVxUXVhbAotewotCUh2Q2FsbENmZ19DdXIJPSAwLAotCUh2Q2FsbENmZ19Jbml0CT0gMSwKLQlIdkNhbGxDZmdfTWF4CT0gMiwKLQlIdkNhbGxDZmdfTWluCT0gMwotfTsKLQotI2RlZmluZSBIdkNhbGxDZmdHZXRMcHMJCQkJCUh2Q2FsbENmZyArICAwCi0jZGVmaW5lIEh2Q2FsbENmZ0dldEFjdGl2ZUxwTWFwCQkJCUh2Q2FsbENmZyArICAxCi0jZGVmaW5lIEh2Q2FsbENmZ0dldExwVnJtSW5kZXgJCQkJSHZDYWxsQ2ZnICsgIDIKLSNkZWZpbmUgSHZDYWxsQ2ZnR2V0THBNaW5TdXBwb3J0ZWRQbGljVnJtSW5kZXgJCUh2Q2FsbENmZyArICAzCi0jZGVmaW5lIEh2Q2FsbENmZ0dldExwTWluQ29tcGF0YWJsZVBsaWNWcm1JbmRleAkJSHZDYWxsQ2ZnICsgIDQKLSNkZWZpbmUgSHZDYWxsQ2ZnR2V0THBWcm1OYW1lCQkJCUh2Q2FsbENmZyArICA1IAotI2RlZmluZSBIdkNhbGxDZmdHZXRTeXN0ZW1QaHlzaWNhbFByb2Nlc3NvcnMJCUh2Q2FsbENmZyArICA2Ci0jZGVmaW5lIEh2Q2FsbENmZ0dldFBoeXNpY2FsUHJvY2Vzc29ycwkJCUh2Q2FsbENmZyArICA3Ci0jZGVmaW5lIEh2Q2FsbENmZ0dldFN5c3RlbU1zQ2h1bmtzCQkJSHZDYWxsQ2ZnICsgIDgKLSNkZWZpbmUgSHZDYWxsQ2ZnR2V0TXNDaHVua3MJCQkJSHZDYWxsQ2ZnICsgIDkKLSNkZWZpbmUgSHZDYWxsQ2ZnR2V0SW50ZXJhY3RpdmVQZXJjZW50YWdlCQlIdkNhbGxDZmcgKyAxMAotI2RlZmluZSBIdkNhbGxDZmdJc0J1c0RlZGljYXRlZAkJCQlIdkNhbGxDZmcgKyAxMQotI2RlZmluZSBIdkNhbGxDZmdHZXRCdXNPd25lcgkJCQlIdkNhbGxDZmcgKyAxMgotI2RlZmluZSBIdkNhbGxDZmdHZXRCdXNBbGxvY2F0aW9uCQkJSHZDYWxsQ2ZnICsgMTMKLSNkZWZpbmUgSHZDYWxsQ2ZnR2V0QnVzVW5pdE93bmVyCQkJSHZDYWxsQ2ZnICsgMTQKLSNkZWZpbmUgSHZDYWxsQ2ZnR2V0QnVzVW5pdEFsbG9jYXRpb24JCQlIdkNhbGxDZmcgKyAxNQotI2RlZmluZSBIdkNhbGxDZmdHZXRWaXJ0dWFsQnVzUG9vbAkJCUh2Q2FsbENmZyArIDE2Ci0jZGVmaW5lIEh2Q2FsbENmZ0dldEJ1c1VuaXRJbnRlcnJ1cHRQcm9jCQlIdkNhbGxDZmcgKyAxNwotI2RlZmluZSBIdkNhbGxDZmdHZXRDb25maWd1cmVkQnVzVW5pdHNGb3JJbnRQcm9jCUh2Q2FsbENmZyArIDE4Ci0jZGVmaW5lIEh2Q2FsbENmZ0dldFJpb1NhbkJ1c1Bvb2wJCQlIdkNhbGxDZmcgKyAxOQotI2RlZmluZSBIdkNhbGxDZmdHZXRTaGFyZWRQb29sSW5kZXgJCQlIdkNhbGxDZmcgKyAyMAotI2RlZmluZSBIdkNhbGxDZmdHZXRTaGFyZWRQcm9jVW5pdHMJCQlIdkNhbGxDZmcgKyAyMQotI2RlZmluZSBIdkNhbGxDZmdHZXROdW1Qcm9jc0luU2hhcmVkUG9vbAkJSHZDYWxsQ2ZnICsgMjIKLSNkZWZpbmUgSHZDYWxsQ2ZnUm91dGVyMjMJCQkJSHZDYWxsQ2ZnICsgMjMKLSNkZWZpbmUgSHZDYWxsQ2ZnUm91dGVyMjQJCQkJSHZDYWxsQ2ZnICsgMjQKLSNkZWZpbmUgSHZDYWxsQ2ZnUm91dGVyMjUJCQkJSHZDYWxsQ2ZnICsgMjUKLSNkZWZpbmUgSHZDYWxsQ2ZnUm91dGVyMjYJCQkJSHZDYWxsQ2ZnICsgMjYKLSNkZWZpbmUgSHZDYWxsQ2ZnUm91dGVyMjcJCQkJSHZDYWxsQ2ZnICsgMjcKLSNkZWZpbmUgSHZDYWxsQ2ZnR2V0TWluUnVudGltZU1zQ2h1bmtzCQkJSHZDYWxsQ2ZnICsgMjgKLSNkZWZpbmUgSHZDYWxsQ2ZnU2V0TWluUnVudGltZU1zQ2h1bmtzCQkJSHZDYWxsQ2ZnICsgMjkKLSNkZWZpbmUgSHZDYWxsQ2ZnR2V0VmlydHVhbExhbkluZGV4TWFwCQkJSHZDYWxsQ2ZnICsgMzAKLSNkZWZpbmUgSHZDYWxsQ2ZnR2V0THBFeGVjdXRpb25Nb2RlCQkJSHZDYWxsQ2ZnICsgMzEKLSNkZWZpbmUgSHZDYWxsQ2ZnR2V0SG9zdGluZ0xwSW5kZXggCQkJSHZDYWxsQ2ZnICsgMzIKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSBIdkxwSW5kZXgJSHZDYWxsQ2ZnX2dldExwcyh2b2lkKQotewotCUh2THBJbmRleCByZXRWYWwgPSBIdkNhbGwwKEh2Q2FsbENmZ0dldExwcyk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXRWYWw7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIGludAkJSHZDYWxsQ2ZnX2lzQnVzRGVkaWNhdGVkKHU2NCBidXNJbmRleCkKLXsKLQlpbnQgcmV0VmFsID0gSHZDYWxsMShIdkNhbGxDZmdJc0J1c0RlZGljYXRlZCxidXNJbmRleCk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXRWYWw7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIEh2THBJbmRleAlIdkNhbGxDZmdfZ2V0QnVzT3duZXIodTY0IGJ1c0luZGV4KQotewotCUh2THBJbmRleCByZXRWYWwgPSBIdkNhbGwxKEh2Q2FsbENmZ0dldEJ1c093bmVyLGJ1c0luZGV4KTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgSHZMcEluZGV4TWFwCUh2Q2FsbENmZ19nZXRCdXNBbGxvY2F0aW9uKHU2NCBidXNJbmRleCkKLXsKLQlIdkxwSW5kZXhNYXAgcmV0VmFsID0gSHZDYWxsMShIdkNhbGxDZmdHZXRCdXNBbGxvY2F0aW9uLGJ1c0luZGV4KTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgSHZMcEluZGV4TWFwCUh2Q2FsbENmZ19nZXRBY3RpdmVMcE1hcCh2b2lkKQotewotCUh2THBJbmRleE1hcCByZXRWYWwgPSBIdkNhbGwwKEh2Q2FsbENmZ0dldEFjdGl2ZUxwTWFwKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgSHZMcFZpcnR1YWxMYW5JbmRleE1hcAlIdkNhbGxDZmdfZ2V0VmlydHVhbExhbkluZGV4TWFwKEh2THBJbmRleCBscCkKLXsKLQkvLyBUaGlzIGlzIGEgbmV3IGZ1bmN0aW9uIGluIFY1UjEgc28gY2FsbHMgdG8gdGhpcyBvbiBvbGRlciAKLQkvLyBoeXBlcnZpc29ycyB3aWxsIHJldHVybiAtMQotCXU2NCByZXRWYWwgPSBIdkNhbGwxKEh2Q2FsbENmZ0dldFZpcnR1YWxMYW5JbmRleE1hcCwgbHApOwotCWlmKHJldFZhbCA9PSAtMSkKLQkJcmV0VmFsID0gMDsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbENmZ19nZXRTeXN0ZW1Nc0NodW5rcyh2b2lkKQotewotCXU2NCByZXRWYWwgPSBIdkNhbGwwKEh2Q2FsbENmZ0dldFN5c3RlbU1zQ2h1bmtzKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwSW5kZXggbHAsZW51bSBIdkNhbGxDZmdfUmVxUXVhbCBxdWFsKQotewotCXU2NCByZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbENmZ0dldE1zQ2h1bmtzLGxwLHF1YWwpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQlyZXR1cm4gcmV0VmFsOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZDYWxsQ2ZnX2dldE1pblJ1bnRpbWVNc0NodW5rcyhIdkxwSW5kZXggbHApCi17Ci0JLy8gTk9URTogVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gdjVyMSBzbyBvbGRlciBoeXBlcnZpc29ycyB3aWxsIHJldHVybiBhIC0xIHZhbHVlCi0JdTY0IHJldFZhbCA9IEh2Q2FsbDEoSHZDYWxsQ2ZnR2V0TWluUnVudGltZU1zQ2h1bmtzLGxwKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbENmZ19zZXRNaW5SdW50aW1lTXNDaHVua3ModTY0IGNodW5rcykKLXsKLQl1NjQgcmV0VmFsID0gSHZDYWxsMShIdkNhbGxDZmdTZXRNaW5SdW50aW1lTXNDaHVua3MsY2h1bmtzKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbENmZ19nZXRTeXN0ZW1QaHlzaWNhbFByb2Nlc3NvcnModm9pZCkKLXsKLQl1NjQgcmV0VmFsID0gSHZDYWxsMChIdkNhbGxDZmdHZXRTeXN0ZW1QaHlzaWNhbFByb2Nlc3NvcnMpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQlyZXR1cm4gcmV0VmFsOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZDYWxsQ2ZnX2dldFBoeXNpY2FsUHJvY2Vzc29ycyhIdkxwSW5kZXggbHAsZW51bSBIdkNhbGxDZmdfUmVxUXVhbCBxdWFsKQotewotCXU2NCByZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbENmZ0dldFBoeXNpY2FsUHJvY2Vzc29ycyxscCxxdWFsKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbENmZ19nZXRDb25maWd1cmVkQnVzVW5pdHNGb3JJbnRlcnJ1cHRQcm9jKEh2THBJbmRleCBscCwKLQkJCQkJCQkJCQl1MTYgaHZMb2dpY2FsUHJvY0luZGV4KQotewotCXU2NCByZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbENmZ0dldENvbmZpZ3VyZWRCdXNVbml0c0ZvckludFByb2MsbHAsaHZMb2dpY2FsUHJvY0luZGV4KTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLQotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgSHZMcFNoYXJlZFBvb2xJbmRleAlIdkNhbGxDZmdfZ2V0U2hhcmVkUG9vbEluZGV4KEh2THBJbmRleCBscCkKLXsKLQlIdkxwU2hhcmVkUG9vbEluZGV4IHJldFZhbCA9Ci0JCUh2Q2FsbDEoSHZDYWxsQ2ZnR2V0U2hhcmVkUG9vbEluZGV4LGxwKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLQotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbENmZ19nZXRTaGFyZWRQcm9jVW5pdHMoSHZMcEluZGV4IGxwLGVudW0gSHZDYWxsQ2ZnX1JlcVF1YWwgcXVhbCkKLXsKLQl1NjQgcmV0VmFsID0gSHZDYWxsMihIdkNhbGxDZmdHZXRTaGFyZWRQcm9jVW5pdHMsbHAscXVhbCk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXRWYWw7Ci0KLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxDZmdfZ2V0TnVtUHJvY3NJblNoYXJlZFBvb2woSHZMcFNoYXJlZFBvb2xJbmRleCBzUEkpCi17Ci0JdTE2IHJldFZhbCA9IEh2Q2FsbDEoSHZDYWxsQ2ZnR2V0TnVtUHJvY3NJblNoYXJlZFBvb2wsc1BJKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKLQotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgSHZMcEluZGV4CUh2Q2FsbENmZ19nZXRIb3N0aW5nTHBJbmRleChIdkxwSW5kZXggbHApCi17Ci0JdTY0IHJldFZhbCA9IEh2Q2FsbDEoSHZDYWxsQ2ZnR2V0SG9zdGluZ0xwSW5kZXgsbHApOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQlyZXR1cm4gcmV0VmFsOwotCi19Ci0KLSNlbmRpZiAvKiBfSFZDQUxMQ0ZHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsRXZlbnQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsRXZlbnQuaAppbmRleCAxOTFkZGNlLi41ZDlhMzI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbEV2ZW50LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxFdmVudC5oCkBAIC0xLDMyICsxLDI4IEBACiAvKgogICogSHZDYWxsRXZlbnQuaAogICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCi0KIC8qCi0gKglUaGlzIGZpbGUgY29udGFpbnMgdGhlICJoeXBlcnZpc29yIGNhbGwiIGludGVyZmFjZSB3aGljaCBpcyB1c2VkIHRvCi0gKglkcml2ZSB0aGUgaHlwZXJ2aXNvciBmcm9tIHRoZSBPUy4KKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgImh5cGVydmlzb3IgY2FsbCIgaW50ZXJmYWNlIHdoaWNoIGlzIHVzZWQgdG8KKyAqIGRyaXZlIHRoZSBoeXBlcnZpc29yIGZyb20gdGhlIE9TLgogICovCiAjaWZuZGVmIF9IVkNBTExFVkVOVF9ICiAjZGVmaW5lIF9IVkNBTExFVkVOVF9ICiAKLS8qCi0gKiBTdGFuZGFyZCBJbmNsdWRlcwotICovCiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZDYWxsU2MuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdlR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CkBAIC03MSw3ICs2Nyw3IEBACiAjZGVmaW5lIEh2Q2FsbEV2ZW50Q2xvc2VMcEV2ZW50UGF0aAkJCUh2Q2FsbEV2ZW50ICsgIDIKICNkZWZpbmUgSHZDYWxsRXZlbnREbWFCdWZMaXN0CQkJCUh2Q2FsbEV2ZW50ICsgIDMKICNkZWZpbmUgSHZDYWxsRXZlbnREbWFTaW5nbGUJCQkJSHZDYWxsRXZlbnQgKyAgNAotI2RlZmluZSBIdkNhbGxFdmVudERtYVRvU3AJCQkJSHZDYWxsRXZlbnQgKyAgNSAKKyNkZWZpbmUgSHZDYWxsRXZlbnREbWFUb1NwCQkJCUh2Q2FsbEV2ZW50ICsgIDUKICNkZWZpbmUgSHZDYWxsRXZlbnRHZXRPdmVyZmxvd0xwRXZlbnRzCQkJSHZDYWxsRXZlbnQgKyAgNgogI2RlZmluZSBIdkNhbGxFdmVudEdldFNvdXJjZUxwSW5zdGFuY2VJZAkJSHZDYWxsRXZlbnQgKyAgNwogI2RlZmluZSBIdkNhbGxFdmVudEdldFRhcmdldExwSW5zdGFuY2VJZAkJSHZDYWxsRXZlbnQgKyAgOApAQCAtODUsMTQgKzgxLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBIdkNhbGxFdmVudF9nZXRPdmVyZmxvd0xwRXZlbnRzKHU4IHF1ZXVlSW5kZXgpCiB7Ci0JSHZDYWxsMShIdkNhbGxFdmVudEdldE92ZXJmbG93THBFdmVudHMscXVldWVJbmRleCk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCUh2Q2FsbDEoSHZDYWxsRXZlbnRHZXRPdmVyZmxvd0xwRXZlbnRzLCBxdWV1ZUluZGV4KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIEh2Q2FsbEV2ZW50X3NldEludGVyTHBRdWV1ZUluZGV4KHU4IHF1ZXVlSW5kZXgpCiB7Ci0JSHZDYWxsMShIdkNhbGxFdmVudFNldEludGVyTHBRdWV1ZUluZGV4LHF1ZXVlSW5kZXgpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlIdkNhbGwxKEh2Q2FsbEV2ZW50U2V0SW50ZXJMcFF1ZXVlSW5kZXgsIHF1ZXVlSW5kZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgSHZDYWxsRXZlbnRfc2V0THBFdmVudFN0YWNrKHU4IHF1ZXVlSW5kZXgsCkBAIC0xMDMsNyArOTcsNiBAQAogCWFic19hZGRyID0gdmlydF90b19hYnMoZXZlbnRTdGFja0FkZHIpOwogCUh2Q2FsbDMoSHZDYWxsRXZlbnRTZXRMcEV2ZW50U3RhY2ssIHF1ZXVlSW5kZXgsIGFic19hZGRyLAogCQkJZXZlbnRTdGFja1NpemUpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIEh2Q2FsbEV2ZW50X3NldExwRXZlbnRRdWV1ZUludGVycnVwdFByb2ModTggcXVldWVJbmRleCwKQEAgLTExMSwyMiArMTA0LDE4IEBACiB7CiAJSHZDYWxsMihIdkNhbGxFdmVudFNldExwRXZlbnRRdWV1ZUludGVycnVwdFByb2MsIHF1ZXVlSW5kZXgsCiAJCQlscExvZ2ljYWxQcm9jSW5kZXgpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKIH0KIAogc3RhdGljIGlubGluZSBIdkxwRXZlbnRfUmMgSHZDYWxsRXZlbnRfc2lnbmFsTHBFdmVudChzdHJ1Y3QgSHZMcEV2ZW50ICpldmVudCkKIHsKIAl1NjQgYWJzX2FkZHI7Ci0JSHZMcEV2ZW50X1JjIHJldFZhbDsKIAogI2lmZGVmIERFQlVHX1NFTkRFVkVOVAogCXByaW50aygiSHZDYWxsRXZlbnRfc2lnbmFsTHBFdmVudDogKmV2ZW50ID0gJTAxNmx4XG4gIiwKIAkJCSh1bnNpZ25lZCBsb25nKWV2ZW50KTsKICNlbmRpZgogCWFic19hZGRyID0gdmlydF90b19hYnMoZXZlbnQpOwotCXJldFZhbCA9IChIdkxwRXZlbnRfUmMpSHZDYWxsMShIdkNhbGxFdmVudFNpZ25hbExwRXZlbnQsIGFic19hZGRyKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKKwlyZXR1cm4gSHZDYWxsMShIdkNhbGxFdmVudFNpZ25hbExwRXZlbnQsIGFic19hZGRyKTsKIH0KIAogc3RhdGljIGlubGluZSBIdkxwRXZlbnRfUmMgSHZDYWxsRXZlbnRfc2lnbmFsTHBFdmVudEZhc3QoSHZMcEluZGV4IHRhcmdldExwLApAQCAtMTM2LDkgKzEyNSw3IEBACiAJCXU2NCBldmVudERhdGExLCB1NjQgZXZlbnREYXRhMiwgdTY0IGV2ZW50RGF0YTMsCiAJCXU2NCBldmVudERhdGE0LCB1NjQgZXZlbnREYXRhNSkKIHsKLQlIdkxwRXZlbnRfUmMgcmV0VmFsOwotCi0JLy8gUGFjayB0aGUgbWlzYyBiaXRzIGludG8gYSBzaW5nbGUgRHdvcmQgdG8gcGFzcyB0byBQTElDCisJLyogUGFjayB0aGUgbWlzYyBiaXRzIGludG8gYSBzaW5nbGUgRHdvcmQgdG8gcGFzcyB0byBQTElDICovCiAJdW5pb24gewogCQlzdHJ1Y3QgSHZDYWxsRXZlbnRfUGFja2VkUGFybXMJcGFybXM7CiAJCXU2NAkJZHdvcmQ7CkBAIC0xNTIsNjcgKzEzOSw0OSBAQAogCXBhY2tlZC5wYXJtcy54U291cmNlSW5zdElkCT0gc291cmNlSW5zdGFuY2VJZDsKIAlwYWNrZWQucGFybXMueFRhcmdldEluc3RJZAk9IHRhcmdldEluc3RhbmNlSWQ7CiAKLQlyZXRWYWwgPSAoSHZMcEV2ZW50X1JjKUh2Q2FsbDcoSHZDYWxsRXZlbnRTaWduYWxMcEV2ZW50UGFybXMsCi0JCQlwYWNrZWQuZHdvcmQsIGNvcnJlbGF0aW9uVG9rZW4sIGV2ZW50RGF0YTEsZXZlbnREYXRhMiwKLQkJCWV2ZW50RGF0YTMsZXZlbnREYXRhNCwgZXZlbnREYXRhNSk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXRWYWw7CisJcmV0dXJuIEh2Q2FsbDcoSHZDYWxsRXZlbnRTaWduYWxMcEV2ZW50UGFybXMsIHBhY2tlZC5kd29yZCwKKwkJCWNvcnJlbGF0aW9uVG9rZW4sIGV2ZW50RGF0YTEsIGV2ZW50RGF0YTIsCisJCQlldmVudERhdGEzLCBldmVudERhdGE0LCBldmVudERhdGE1KTsKIH0KIAogc3RhdGljIGlubGluZSBIdkxwRXZlbnRfUmMgSHZDYWxsRXZlbnRfYWNrTHBFdmVudChzdHJ1Y3QgSHZMcEV2ZW50ICpldmVudCkKIHsKIAl1NjQgYWJzX2FkZHI7Ci0JSHZMcEV2ZW50X1JjIHJldFZhbDsKIAogCWFic19hZGRyID0gdmlydF90b19hYnMoZXZlbnQpOwotCXJldFZhbCA9IChIdkxwRXZlbnRfUmMpSHZDYWxsMShIdkNhbGxFdmVudEFja0xwRXZlbnQsIGFic19hZGRyKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKKwlyZXR1cm4gSHZDYWxsMShIdkNhbGxFdmVudEFja0xwRXZlbnQsIGFic19hZGRyKTsKIH0KIAogc3RhdGljIGlubGluZSBIdkxwRXZlbnRfUmMgSHZDYWxsRXZlbnRfY2FuY2VsTHBFdmVudChzdHJ1Y3QgSHZMcEV2ZW50ICpldmVudCkKIHsKIAl1NjQgYWJzX2FkZHI7Ci0JSHZMcEV2ZW50X1JjIHJldFZhbDsKIAogCWFic19hZGRyID0gdmlydF90b19hYnMoZXZlbnQpOwotCXJldFZhbCA9IChIdkxwRXZlbnRfUmMpSHZDYWxsMShIdkNhbGxFdmVudENhbmNlbExwRXZlbnQsIGFic19hZGRyKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKKwlyZXR1cm4gSHZDYWxsMShIdkNhbGxFdmVudENhbmNlbExwRXZlbnQsIGFic19hZGRyKTsKIH0KIAogc3RhdGljIGlubGluZSBIdkxwSW5zdGFuY2VJZCBIdkNhbGxFdmVudF9nZXRTb3VyY2VMcEluc3RhbmNlSWQoCiAJCUh2THBJbmRleCB0YXJnZXRMcCwgSHZMcEV2ZW50X1R5cGUgdHlwZSkKIHsKLQlIdkxwSW5zdGFuY2VJZCByZXRWYWw7CQotCi0JcmV0VmFsID0gSHZDYWxsMihIdkNhbGxFdmVudEdldFNvdXJjZUxwSW5zdGFuY2VJZCwgdGFyZ2V0THAsIHR5cGUpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQlyZXR1cm4gcmV0VmFsOworCXJldHVybiBIdkNhbGwyKEh2Q2FsbEV2ZW50R2V0U291cmNlTHBJbnN0YW5jZUlkLCB0YXJnZXRMcCwgdHlwZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSHZMcEluc3RhbmNlSWQgSHZDYWxsRXZlbnRfZ2V0VGFyZ2V0THBJbnN0YW5jZUlkKAogCQlIdkxwSW5kZXggdGFyZ2V0THAsIEh2THBFdmVudF9UeXBlIHR5cGUpCiB7Ci0JSHZMcEluc3RhbmNlSWQgcmV0VmFsOwkKLQotCXJldFZhbCA9IEh2Q2FsbDIoSHZDYWxsRXZlbnRHZXRUYXJnZXRMcEluc3RhbmNlSWQsIHRhcmdldExwLCB0eXBlKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKKwlyZXR1cm4gSHZDYWxsMihIdkNhbGxFdmVudEdldFRhcmdldExwSW5zdGFuY2VJZCwgdGFyZ2V0THAsIHR5cGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgSHZDYWxsRXZlbnRfb3BlbkxwRXZlbnRQYXRoKEh2THBJbmRleCB0YXJnZXRMcCwKIAkJSHZMcEV2ZW50X1R5cGUgdHlwZSkKIHsKIAlIdkNhbGwyKEh2Q2FsbEV2ZW50T3BlbkxwRXZlbnRQYXRoLCB0YXJnZXRMcCwgdHlwZSk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgSHZDYWxsRXZlbnRfY2xvc2VMcEV2ZW50UGF0aChIdkxwSW5kZXggdGFyZ2V0THAsCiAJCUh2THBFdmVudF9UeXBlIHR5cGUpCiB7CiAJSHZDYWxsMihIdkNhbGxFdmVudENsb3NlTHBFdmVudFBhdGgsIHRhcmdldExwLCB0eXBlKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSHZMcERtYV9SYyBIdkNhbGxFdmVudF9kbWFCdWZMaXN0KEh2THBFdmVudF9UeXBlIHR5cGUsCkBAIC0yMjQsOCArMTkzLDcgQEAKIAkJLyogRG8gdGhlc2UgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gYWJzb2x1dGUgYWRkcmVzc2VzPyAqLwogCQl1NjQgbG9jYWxCdWZMaXN0LCB1NjQgcmVtb3RlQnVmTGlzdCwgdTMyIHRyYW5zZmVyTGVuZ3RoKQogewotCUh2THBEbWFfUmMgcmV0VmFsOwotCS8vIFBhY2sgdGhlIG1pc2MgYml0cyBpbnRvIGEgc2luZ2xlIER3b3JkIHRvIHBhc3MgdG8gUExJQworCS8qIFBhY2sgdGhlIG1pc2MgYml0cyBpbnRvIGEgc2luZ2xlIER3b3JkIHRvIHBhc3MgdG8gUExJQyAqLwogCXVuaW9uIHsKIAkJc3RydWN0IEh2Q2FsbEV2ZW50X1BhY2tlZERtYVBhcm1zCXBhcm1zOwogCQl1NjQJCWR3b3JkOwpAQCAtMjQxLDExICsyMDksOCBAQAogCXBhY2tlZC5wYXJtcy54TG9jYWxJbnN0SWQJPSBsb2NhbEluc3RhbmNlSWQ7CiAJcGFja2VkLnBhcm1zLnhSZW1vdGVJbnN0SWQJPSByZW1vdGVJbnN0YW5jZUlkOwogCi0JcmV0VmFsID0gKEh2THBEbWFfUmMpSHZDYWxsNChIdkNhbGxFdmVudERtYUJ1Zkxpc3QsCi0JCQlwYWNrZWQuZHdvcmQsIGxvY2FsQnVmTGlzdCwgcmVtb3RlQnVmTGlzdCwKLQkJCXRyYW5zZmVyTGVuZ3RoKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKKwlyZXR1cm4gSHZDYWxsNChIdkNhbGxFdmVudERtYUJ1Zkxpc3QsIHBhY2tlZC5kd29yZCwgbG9jYWxCdWZMaXN0LAorCQkJcmVtb3RlQnVmTGlzdCwgdHJhbnNmZXJMZW5ndGgpOwogfQogCiBzdGF0aWMgaW5saW5lIEh2THBEbWFfUmMgSHZDYWxsRXZlbnRfZG1hU2luZ2xlKEh2THBFdmVudF9UeXBlIHR5cGUsCkBAIC0yNTYsOCArMjIxLDcgQEAKIAkJSHZMcERtYV9BZGRyZXNzVHlwZSByZW1vdGVBZGRyZXNzVHlwZSwKIAkJdTY0IGxvY2FsQWRkck9yVGNlLCB1NjQgcmVtb3RlQWRkck9yVGNlLCB1MzIgdHJhbnNmZXJMZW5ndGgpCiB7Ci0JSHZMcERtYV9SYyByZXRWYWw7Ci0JLy8gUGFjayB0aGUgbWlzYyBiaXRzIGludG8gYSBzaW5nbGUgRHdvcmQgdG8gcGFzcyB0byBQTElDCisJLyogUGFjayB0aGUgbWlzYyBiaXRzIGludG8gYSBzaW5nbGUgRHdvcmQgdG8gcGFzcyB0byBQTElDICovCiAJdW5pb24gewogCQlzdHJ1Y3QgSHZDYWxsRXZlbnRfUGFja2VkRG1hUGFybXMJcGFybXM7CiAJCXU2NAkJZHdvcmQ7CkBAIC0yNzMsMjUgKzIzNywxNyBAQAogCXBhY2tlZC5wYXJtcy54TG9jYWxJbnN0SWQJPSBsb2NhbEluc3RhbmNlSWQ7CiAJcGFja2VkLnBhcm1zLnhSZW1vdGVJbnN0SWQJPSByZW1vdGVJbnN0YW5jZUlkOwogCi0JcmV0VmFsID0gKEh2THBEbWFfUmMpSHZDYWxsNChIdkNhbGxFdmVudERtYVNpbmdsZSwKLQkJCXBhY2tlZC5kd29yZCwgbG9jYWxBZGRyT3JUY2UsIHJlbW90ZUFkZHJPclRjZSwKLQkJCXRyYW5zZmVyTGVuZ3RoKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldFZhbDsKKwlyZXR1cm4gKEh2THBEbWFfUmMpSHZDYWxsNChIdkNhbGxFdmVudERtYVNpbmdsZSwgcGFja2VkLmR3b3JkLAorCQkJbG9jYWxBZGRyT3JUY2UsIHJlbW90ZUFkZHJPclRjZSwgdHJhbnNmZXJMZW5ndGgpOwogfQogCi1zdGF0aWMgaW5saW5lIEh2THBEbWFfUmMgSHZDYWxsRXZlbnRfZG1hVG9TcCh2b2lkKiBsb2NhbCwgdTMyIHJlbW90ZSwKK3N0YXRpYyBpbmxpbmUgSHZMcERtYV9SYyBIdkNhbGxFdmVudF9kbWFUb1NwKHZvaWQgKmxvY2FsLCB1MzIgcmVtb3RlLAogCQl1MzIgbGVuZ3RoLCBIdkxwRG1hX0RpcmVjdGlvbiBkaXIpCiB7CiAJdTY0IGFic19hZGRyOwotCUh2THBEbWFfUmMgcmV0VmFsOwogCiAJYWJzX2FkZHIgPSB2aXJ0X3RvX2Ficyhsb2NhbCk7Ci0JcmV0VmFsID0gKEh2THBEbWFfUmMpSHZDYWxsNChIdkNhbGxFdmVudERtYVRvU3AsIGFic19hZGRyLCByZW1vdGUsCi0JCQlsZW5ndGgsIGRpcik7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXRWYWw7CisJcmV0dXJuIEh2Q2FsbDQoSHZDYWxsRXZlbnREbWFUb1NwLCBhYnNfYWRkciwgcmVtb3RlLCBsZW5ndGgsIGRpcik7CiB9CiAKLQogI2VuZGlmIC8qIF9IVkNBTExFVkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbEhwdC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxIcHQuaAppbmRleCBkYTc2OTg3Li42NmYzODIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbEhwdC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsSHB0LmgKQEAgLTEsMTcgKzEsMTcgQEAKIC8qCiAgKiBIdkNhbGxIcHQuaAogICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQpAQCAtMTksMjEgKzE5LDE1IEBACiAjaWZuZGVmIF9IVkNBTExIUFRfSAogI2RlZmluZSBfSFZDQUxMSFBUX0gKIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8JVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSAiaHlwZXJ2aXNvciBjYWxsIiBpbnRlcmZhY2Ugd2hpY2ggaXMgdXNlZCB0bwotLy8JZHJpdmUgdGhlIGh5cGVydmlzb3IgZnJvbSB0aGUgT1MuCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSAiaHlwZXJ2aXNvciBjYWxsIiBpbnRlcmZhY2Ugd2hpY2ggaXMgdXNlZCB0bworICogZHJpdmUgdGhlIGh5cGVydmlzb3IgZnJvbSB0aGUgT1MuCisgKi8KIAogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbFNjLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZUeXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29uc3RhbnRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICNkZWZpbmUgSHZDYWxsSHB0R2V0SHB0QWRkcmVzcwkJSHZDYWxsSHB0ICsgIDAKICNkZWZpbmUgSHZDYWxsSHB0R2V0SHB0UGFnZXMJCUh2Q2FsbEhwdCArICAxCiAjZGVmaW5lIEh2Q2FsbEhwdFNldFBwCQkJSHZDYWxsSHB0ICsgIDUKQEAgLTQ3LDgxICs0MSw2MyBAQAogI2RlZmluZSBIdkNhbGxIcHRJbnZhbGlkYXRlU2V0U3dCaXRzR2V0IEh2Q2FsbEhwdCArIDE4CiAKIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZDYWxsSHB0X2dldEhwdEFkZHJlc3Modm9pZCkKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbEhwdF9nZXRIcHRBZGRyZXNzKHZvaWQpCiB7Ci0JdTY0IHJldHZhbCA9IEh2Q2FsbDAoSHZDYWxsSHB0R2V0SHB0QWRkcmVzcyk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIEh2Q2FsbDAoSHZDYWxsSHB0R2V0SHB0QWRkcmVzcyk7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkNhbGxIcHRfZ2V0SHB0UGFnZXModm9pZCkKLXsJCi0JdTY0IHJldHZhbCA9IEh2Q2FsbDAoSHZDYWxsSHB0R2V0SHB0UGFnZXMpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB2b2lkCQlIdkNhbGxIcHRfc2V0UHAodTMyIGhwdGVJbmRleCwgdTggdmFsdWUpCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbEhwdF9nZXRIcHRQYWdlcyh2b2lkKQogewotCUh2Q2FsbDIoIEh2Q2FsbEhwdFNldFBwLCBocHRlSW5kZXgsIHZhbHVlICk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCXJldHVybiBIdkNhbGwwKEh2Q2FsbEhwdEdldEhwdFBhZ2VzKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdm9pZAkJSHZDYWxsSHB0X3NldFN3Qml0cyh1MzIgaHB0ZUluZGV4LCB1OCBiaXRzb24sIHU4IGJpdHNvZmYgKQorCitzdGF0aWMgaW5saW5lIHZvaWQgSHZDYWxsSHB0X3NldFBwKHUzMiBocHRlSW5kZXgsIHU4IHZhbHVlKQogewotCUh2Q2FsbDMoIEh2Q2FsbEhwdFNldFN3Qml0cywgaHB0ZUluZGV4LCBiaXRzb24sIGJpdHNvZmYgKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJSHZDYWxsMihIdkNhbGxIcHRTZXRQcCwgaHB0ZUluZGV4LCB2YWx1ZSk7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHZvaWQJCUh2Q2FsbEhwdF9pbnZhbGlkYXRlTm9TeW5jSUNhY2hlKHUzMiBocHRlSW5kZXgpCi0JCQkJCQkKKworc3RhdGljIGlubGluZSB2b2lkIEh2Q2FsbEhwdF9zZXRTd0JpdHModTMyIGhwdGVJbmRleCwgdTggYml0c29uLCB1OCBiaXRzb2ZmKQogewotCUh2Q2FsbDEoIEh2Q2FsbEhwdEludmFsaWRhdGVOb1N5bmNJQ2FjaGUsIGhwdGVJbmRleCApOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwlIdkNhbGwzKEh2Q2FsbEhwdFNldFN3Qml0cywgaHB0ZUluZGV4LCBiaXRzb24sIGJpdHNvZmYpOwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbEhwdF9pbnZhbGlkYXRlU2V0U3dCaXRzR2V0KHUzMiBocHRlSW5kZXgsIHU4IGJpdHNvbiwgdTggYml0c29mZiApCi0JCQkJCQkKKworc3RhdGljIGlubGluZSB2b2lkIEh2Q2FsbEhwdF9pbnZhbGlkYXRlTm9TeW5jSUNhY2hlKHUzMiBocHRlSW5kZXgpCit7CisJSHZDYWxsMShIdkNhbGxIcHRJbnZhbGlkYXRlTm9TeW5jSUNhY2hlLCBocHRlSW5kZXgpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxIcHRfaW52YWxpZGF0ZVNldFN3Qml0c0dldCh1MzIgaHB0ZUluZGV4LCB1OCBiaXRzb24sCisJCXU4IGJpdHNvZmYpCiB7CiAJdTY0IGNvbXByZXNzZWRTdGF0dXM7Ci0JY29tcHJlc3NlZFN0YXR1cyA9IEh2Q2FsbDQoIEh2Q2FsbEhwdEludmFsaWRhdGVTZXRTd0JpdHNHZXQsIGhwdGVJbmRleCwgYml0c29uLCBiaXRzb2ZmLCAxICk7Ci0JSHZDYWxsMSggSHZDYWxsSHB0SW52YWxpZGF0ZU5vU3luY0lDYWNoZSwgaHB0ZUluZGV4ICk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOworCisJY29tcHJlc3NlZFN0YXR1cyA9IEh2Q2FsbDQoSHZDYWxsSHB0SW52YWxpZGF0ZVNldFN3Qml0c0dldCwKKwkJCWhwdGVJbmRleCwgYml0c29uLCBiaXRzb2ZmLCAxKTsKKwlIdkNhbGwxKEh2Q2FsbEhwdEludmFsaWRhdGVOb1N5bmNJQ2FjaGUsIGhwdGVJbmRleCk7CiAJcmV0dXJuIGNvbXByZXNzZWRTdGF0dXM7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZDYWxsSHB0X2ZpbmRWYWxpZCggSFBURSAqaHB0ZSwgdTY0IHZwbiApCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbEhwdF9maW5kVmFsaWQoSFBURSAqaHB0ZSwgdTY0IHZwbikKIHsKLQl1NjQgcmV0SW5kZXggPSBIdkNhbGwzUmV0MTYoIEh2Q2FsbEhwdEZpbmRWYWxpZCwgaHB0ZSwgdnBuLCAwLCAwICk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXRJbmRleDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkNhbGxIcHRfZmluZE5leHRWYWxpZCggSFBURSAqaHB0ZSwgdTMyIGhwdGVJbmRleCwgdTggYml0c29uLCB1OCBiaXRzb2ZmICkKLXsKLQl1NjQgcmV0SW5kZXggPSBIdkNhbGwzUmV0MTYoIEh2Q2FsbEhwdEZpbmROZXh0VmFsaWQsIGhwdGUsIGhwdGVJbmRleCwgYml0c29uLCBiaXRzb2ZmICk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXRJbmRleDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdm9pZAkJSHZDYWxsSHB0X2dldCggSFBURSAqaHB0ZSwgdTMyIGhwdGVJbmRleCApCi17Ci0JSHZDYWxsMlJldDE2KCBIdkNhbGxIcHRHZXQsIGhwdGUsIGhwdGVJbmRleCwgMCApOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB2b2lkCQlIdkNhbGxIcHRfYWRkVmFsaWRhdGUoIHUzMiBocHRlSW5kZXgsCi0JCQkJCQkgICAgICAgdTMyIGhCaXQsCi0JCQkJCQkgICAgICAgSFBURSAqaHB0ZSApCi0JCQkJCQkKLXsKLQlIdkNhbGw0KCBIdkNhbGxIcHRBZGRWYWxpZGF0ZSwgaHB0ZUluZGV4LAotCQkgaEJpdCwgKCooKHU2NCAqKWhwdGUpKSwgKCooKCh1NjQgKilocHRlKSsxKSkgKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJcmV0dXJuIEh2Q2FsbDNSZXQxNihIdkNhbGxIcHRGaW5kVmFsaWQsIGhwdGUsIHZwbiwgMCwgMCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbEhwdF9maW5kTmV4dFZhbGlkKEhQVEUgKmhwdGUsIHUzMiBocHRlSW5kZXgsCisJCXU4IGJpdHNvbiwgdTggYml0c29mZikKK3sKKwlyZXR1cm4gSHZDYWxsM1JldDE2KEh2Q2FsbEhwdEZpbmROZXh0VmFsaWQsIGhwdGUsIGhwdGVJbmRleCwKKwkJCWJpdHNvbiwgYml0c29mZik7Cit9CiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbmxpbmUgdm9pZCBIdkNhbGxIcHRfZ2V0KEhQVEUgKmhwdGUsIHUzMiBocHRlSW5kZXgpCit7CisJSHZDYWxsMlJldDE2KEh2Q2FsbEhwdEdldCwgaHB0ZSwgaHB0ZUluZGV4LCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEh2Q2FsbEhwdF9hZGRWYWxpZGF0ZSh1MzIgaHB0ZUluZGV4LCB1MzIgaEJpdCwgSFBURSAqaHB0ZSkKK3sKKwlIdkNhbGw0KEh2Q2FsbEhwdEFkZFZhbGlkYXRlLCBocHRlSW5kZXgsIGhCaXQsICgqKCh1NjQgKilocHRlKSksCisJCQkoKigoKHU2NCAqKWhwdGUpKzEpKSk7Cit9CiAKICNlbmRpZiAvKiBfSFZDQUxMSFBUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsUGNpLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbFBjaS5oCmluZGV4IDY4ODdiNjEuLmM4ZDY3NWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsUGNpLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxQY2kuaApAQCAtMSwyNiArMSwyNiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFByb3ZpZGVzIHRoZSBIeXBlcnZpc29yIFBDSSBjYWxscyBmb3IgaVNlcmllcyBMaW51eCBQYXJpdGlvbi4gICAgICAgICovCi0vKiBDb3B5cmlnaHQgKEMpIDIwMDEgIDxXYXluZSBHIEhvbG0+IDxJQk0gQ29ycG9yYXRpb24+ICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICovCi0vKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAqLwotLyogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgKi8KLS8qIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgKi8gCi0vKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAqLwotLyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgKi8KLS8qIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgKi8gCi0vKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGU6ICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCi0vKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLS8qIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ2hhbmdlIEFjdGl2aXR5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgQ3JlYXRlZCwgSmFuIDksIDIwMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFByb3ZpZGVzIHRoZSBIeXBlcnZpc29yIFBDSSBjYWxscyBmb3IgaVNlcmllcyBMaW51eCBQYXJpdGlvbi4KKyAqIENvcHlyaWdodCAoQykgMjAwMSAgPFdheW5lIEcgSG9sbT4gPElCTSBDb3Jwb3JhdGlvbj4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZToKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogQ2hhbmdlIEFjdGl2aXR5OgorICogICBDcmVhdGVkLCBKYW4gOSwgMjAwMQorICovCiAKICNpZm5kZWYgX0hWQ0FMTFBDSV9ICiAjZGVmaW5lIF9IVkNBTExQQ0lfSApAQCAtMzQsOCArMzQsOCBAQAogICovCiBzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgewogCXUxNgkJYnVzTnVtYmVyOwkJLyogUEhCIGluZGV4PyAqLwotCXU4CQlzdWJCdXNOdW1iZXI7IAkJLyogUENJIGJ1cyBudW1iZXI/ICovCi0JdTgJCWRldmljZUlkOyAgICAgCQkvKiBkZXZpY2UgYW5kIGZ1bmN0aW9uPyAqLworCXU4CQlzdWJCdXNOdW1iZXI7CQkvKiBQQ0kgYnVzIG51bWJlcj8gKi8KKwl1OAkJZGV2aWNlSWQ7CQkvKiBkZXZpY2UgYW5kIGZ1bmN0aW9uPyAqLwogCXU4CQliYXJOdW1iZXI7CiAJdTgJCXJlc2VydmVkWzNdOwogfTsKQEAgLTUyLDM0ICs1MiwzNyBAQAogCiBlbnVtIEh2Q2FsbFBjaV9EZXZpY2VUeXBlIHsKIAlIdkNhbGxQY2lfTm9kZURldmljZQk9IDEsCi0JSHZDYWxsUGNpX1NwRGV2aWNlCT0gMiwJCi0JSHZDYWxsUGNpX0lvcERldmljZSAgICAgPSAzLAkKLQlIdkNhbGxQY2lfQnJpZGdlRGV2aWNlCT0gNCwJCi0JSHZDYWxsUGNpX011bHRpRnVuY3Rpb25EZXZpY2UgPSA1LAkKLQlIdkNhbGxQY2lfSW9hRGV2aWNlCT0gNgkKKwlIdkNhbGxQY2lfU3BEZXZpY2UJPSAyLAorCUh2Q2FsbFBjaV9Jb3BEZXZpY2UgICAgID0gMywKKwlIdkNhbGxQY2lfQnJpZGdlRGV2aWNlCT0gNCwKKwlIdkNhbGxQY2lfTXVsdGlGdW5jdGlvbkRldmljZSA9IDUsCisJSHZDYWxsUGNpX0lvYURldmljZQk9IDYKIH07CiAKIAogc3RydWN0IEh2Q2FsbFBjaV9EZXZpY2VJbmZvIHsKLQl1MzIJZGV2aWNlVHlwZTsJCS8vIFNlZSBEZXZpY2VUeXBlIGVudW0gZm9yIHZhbHVlcworCXUzMglkZXZpY2VUeXBlOwkJLyogU2VlIERldmljZVR5cGUgZW51bSBmb3IgdmFsdWVzICovCiB9OwotICAgIAorCiBzdHJ1Y3QgSHZDYWxsUGNpX0J1c1VuaXRJbmZvIHsKLQl1MzIJc2l6ZVJldHVybmVkOwkJLy8gbGVuZ3RoIG9mIGRhdGEgcmV0dXJuZWQKLQl1MzIJZGV2aWNlVHlwZTsJCS8vIHNlZSBEZXZpY2VUeXBlIGVudW0gZm9yIHZhbHVlcworCXUzMglzaXplUmV0dXJuZWQ7CQkvKiBsZW5ndGggb2YgZGF0YSByZXR1cm5lZCAqLworCXUzMglkZXZpY2VUeXBlOwkJLyogc2VlIERldmljZVR5cGUgZW51bSBmb3IgdmFsdWVzICovCiB9OwogCiBzdHJ1Y3QgSHZDYWxsUGNpX0JyaWRnZUluZm8gewotCXN0cnVjdCBIdkNhbGxQY2lfQnVzVW5pdEluZm8gYnVzVW5pdEluZm87ICAvLyBHZW5lcmljIGJ1cyB1bml0IGluZm8KLQl1OAkJc3ViQnVzTnVtYmVyOwkJLy8gQnVzIG51bWJlciBvZiBzZWNvbmRhcnkgYnVzCi0JdTgJCW1heEFnZW50czsJCS8vIE1heCBpZHNlbHMgb24gc2Vjb25kYXJ5IGJ1cwotICAgICAgICB1OCAgICAgICAgICAgICAgbWF4U3ViQnVzTnVtYmVyOyAgICAgICAgLy8gTWF4IFN1YiBCdXMKLQl1OAkJbG9naWNhbFNsb3ROdW1iZXI7CS8vIExvZ2ljYWwgU2xvdCBOdW1iZXIgZm9yIElPQSAKKwlzdHJ1Y3QgSHZDYWxsUGNpX0J1c1VuaXRJbmZvIGJ1c1VuaXRJbmZvOyAgLyogR2VuZXJpYyBidXMgdW5pdCBpbmZvICovCisJdTgJCXN1YkJ1c051bWJlcjsJLyogQnVzIG51bWJlciBvZiBzZWNvbmRhcnkgYnVzICovCisJdTgJCW1heEFnZW50czsJLyogTWF4IGlkc2VscyBvbiBzZWNvbmRhcnkgYnVzICovCisgICAgICAgIHU4ICAgICAgICAgICAgICBtYXhTdWJCdXNOdW1iZXI7IC8qIE1heCBTdWIgQnVzICovCisJdTgJCWxvZ2ljYWxTbG90TnVtYmVyOyAvKiBMb2dpY2FsIFNsb3QgTnVtYmVyIGZvciBJT0EgKi8KIH07Ci0gICAgCiAKLS8vICBNYXhpbXVtIEJ1c1VuaXRJbmZvIGJ1ZmZlciBzaXplLiAgUHJvdmlkZWQgZm9yIGNsaWVudHMgc28gdGhleSBjYW4gYWxsb2NhdGUKLS8vICBhIGJ1ZmZlciBiaWcgZW5vdWdoIGZvciBhbnkgdHlwZSBvZiBidXMgdW5pdC4gIEluY3JlYXNlIGFzIG5lZWRlZC4KKworLyoKKyAqIE1heGltdW0gQnVzVW5pdEluZm8gYnVmZmVyIHNpemUuICBQcm92aWRlZCBmb3IgY2xpZW50cyBzbworICogdGhleSBjYW4gYWxsb2NhdGUgYSBidWZmZXIgYmlnIGVub3VnaCBmb3IgYW55IHR5cGUgb2YgYnVzCisgKiB1bml0LiAgSW5jcmVhc2UgYXMgbmVlZGVkLgorICovCiBlbnVtIHtIdkNhbGxQY2lfTWF4QnVzVW5pdEluZm9TaXplID0gMTI4fTsKIAogc3RydWN0IEh2Q2FsbFBjaV9CYXJQYXJtcyB7CkBAIC04OSwxMiArOTIsMTIgQEAKIAl1NjQJCXByb3RlY3RTdGFydDsKIAl1NjQJCXByb3RlY3RFbmQ7CiAJdTY0CQlyZWxvY2F0aW9uT2Zmc2V0OwotCXU2NAkJcGNpQWRkcmVzczsJCQorCXU2NAkJcGNpQWRkcmVzczsKIAl1NjQJCXJlc2VydmVkWzNdOwotfTsJCQkJCQorfTsKIAogZW51bSBIdkNhbGxQY2lfVnBkVHlwZSB7Ci0JSHZDYWxsUGNpX0J1c1ZwZAkJPSAxLAorCUh2Q2FsbFBjaV9CdXNWcGQJPSAxLAogCUh2Q2FsbFBjaV9CdXNBZGFwdGVyVnBkCT0gMgogfTsKIApAQCAtMTIzLDE1ICsxMjYsMTMgQEAKICNkZWZpbmUgSHZDYWxsUGNpVW5tYXNrSW50ZXJydXB0cwlIdkNhbGxQY2kgKyA0OQogI2RlZmluZSBIdkNhbGxQY2lHZXRCdXNVbml0SW5mbwkJSHZDYWxsUGNpICsgNTAKIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxQY2lfY29uZmlnTG9hZDgodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAotCQkJCQl1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwKLQkJCQkJdTggKnZhbHVlKQorCQl1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwgdTggKnZhbHVlKQogewogCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CiAJc3RydWN0IEh2Q2FsbFBjaV9Mb2FkUmV0dXJuIHJldFZhbDsKIAotCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKwkqKCh1NjQqKSZkc2EpID0gMDsKIAogCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXI7CiAJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c051bWJlcjsKQEAgLTEzOSwyMSArMTQwLDE4IEBACiAKIAlIdkNhbGwzUmV0MTYoSHZDYWxsUGNpQ29uZmlnTG9hZDgsICZyZXRWYWwsICoodTY0ICopJmRzYSwgb2Zmc2V0LCAwKTsKIAotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQogCSp2YWx1ZSA9IHJldFZhbC52YWx1ZTsKIAogCXJldHVybiByZXRWYWwucmM7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogc3RhdGljIGlubGluZSB1NjQgSHZDYWxsUGNpX2NvbmZpZ0xvYWQxNih1MTYgYnVzTnVtYmVyLCB1OCBzdWJCdXNOdW1iZXIsCi0JCQkJCSB1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwKLQkJCQkJIHUxNiAqdmFsdWUpCisJCXU4IGRldmljZUlkLCB1MzIgb2Zmc2V0LCB1MTYgKnZhbHVlKQogewogCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CiAJc3RydWN0IEh2Q2FsbFBjaV9Mb2FkUmV0dXJuIHJldFZhbDsKIAotCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKwkqKCh1NjQqKSZkc2EpID0gMDsKIAogCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXI7CiAJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c051bWJlcjsKQEAgLTE2MSwyMSArMTU5LDE4IEBACiAKIAlIdkNhbGwzUmV0MTYoSHZDYWxsUGNpQ29uZmlnTG9hZDE2LCAmcmV0VmFsLCAqKHU2NCAqKSZkc2EsIG9mZnNldCwgMCk7CiAKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0KIAkqdmFsdWUgPSByZXRWYWwudmFsdWU7CiAKIAlyZXR1cm4gcmV0VmFsLnJjOwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfY29uZmlnTG9hZDMyKHUxNiBidXNOdW1iZXIsIHU4IHN1YkJ1c051bWJlciwKLQkJCQkJICAgICAgdTggZGV2aWNlSWQsIHUzMiBvZmZzZXQsCi0JCQkJCSAgICAgIHUzMiAqdmFsdWUpCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbFBjaV9jb25maWdMb2FkMzIodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAorCQl1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwgdTMyICp2YWx1ZSkKIHsKIAlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOwogCXN0cnVjdCBIdkNhbGxQY2lfTG9hZFJldHVybiByZXRWYWw7CiAKLQkqKCh1NjQqKSZkc2EpID0gMDsJCQkJCisJKigodTY0KikmZHNhKSA9IDA7CiAKIAlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyOwogCWRzYS5zdWJCdXNOdW1iZXIgPSBzdWJCdXNOdW1iZXI7CkBAIC0xODMsODQgKzE3OCw2MSBAQAogCiAJSHZDYWxsM1JldDE2KEh2Q2FsbFBjaUNvbmZpZ0xvYWQzMiwgJnJldFZhbCwgKih1NjQgKikmZHNhLCBvZmZzZXQsIDApOwogCi0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCiAJKnZhbHVlID0gcmV0VmFsLnZhbHVlOwogCiAJcmV0dXJuIHJldFZhbC5yYzsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2NvbmZpZ1N0b3JlOCh1MTYgYnVzTnVtYmVyLCB1OCBzdWJCdXNOdW1iZXIsCi0JCQkJCSAgICAgIHU4IGRldmljZUlkLCB1MzIgb2Zmc2V0LAotCQkJCQkgICAgICB1OCAgdmFsdWUpCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbFBjaV9jb25maWdTdG9yZTgodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAorCQl1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwgdTggdmFsdWUpCiB7CiAJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKLQl1NjQgcmV0VmFsOwogCi0JKigodTY0KikmZHNhKSA9IDA7CQkJCQorCSooKHU2NCopJmRzYSkgPSAwOwogCiAJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlcjsKIAlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzTnVtYmVyOwogCWRzYS5kZXZpY2VJZCA9IGRldmljZUlkOwogCi0JcmV0VmFsID0gSHZDYWxsNChIdkNhbGxQY2lDb25maWdTdG9yZTgsICoodTY0ICopJmRzYSwgb2Zmc2V0LCB2YWx1ZSwgMCk7Ci0KLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0KLQlyZXR1cm4gcmV0VmFsOworCXJldHVybiBIdkNhbGw0KEh2Q2FsbFBjaUNvbmZpZ1N0b3JlOCwgKih1NjQgKikmZHNhLCBvZmZzZXQsIHZhbHVlLCAwKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2NvbmZpZ1N0b3JlMTYodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAotCQkJCQkgICAgICB1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwKLQkJCQkJICAgICAgdTE2ICB2YWx1ZSkKKworc3RhdGljIGlubGluZSB1NjQgSHZDYWxsUGNpX2NvbmZpZ1N0b3JlMTYodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAorCQl1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwgdTE2IHZhbHVlKQogewogCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7Ci0JdTY0IHJldFZhbDsKIAotCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKwkqKCh1NjQqKSZkc2EpID0gMDsKIAogCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXI7CiAJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c051bWJlcjsKIAlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZDsKIAotCXJldFZhbCA9IEh2Q2FsbDQoSHZDYWxsUGNpQ29uZmlnU3RvcmUxNiwgKih1NjQgKikmZHNhLCBvZmZzZXQsIHZhbHVlLCAwKTsKLQotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQotCXJldHVybiByZXRWYWw7CisJcmV0dXJuIEh2Q2FsbDQoSHZDYWxsUGNpQ29uZmlnU3RvcmUxNiwgKih1NjQgKikmZHNhLCBvZmZzZXQsIHZhbHVlLCAwKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2NvbmZpZ1N0b3JlMzIodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAotCQkJCQkgICAgICB1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwKLQkJCQkJICAgICAgdTMyICB2YWx1ZSkKKworc3RhdGljIGlubGluZSB1NjQgSHZDYWxsUGNpX2NvbmZpZ1N0b3JlMzIodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAorCQl1OCBkZXZpY2VJZCwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQogewogCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7Ci0JdTY0IHJldFZhbDsKIAotCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKwkqKCh1NjQqKSZkc2EpID0gMDsKIAogCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXI7CiAJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c051bWJlcjsKIAlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZDsKIAotCXJldFZhbCA9IEh2Q2FsbDQoSHZDYWxsUGNpQ29uZmlnU3RvcmUzMiwgKih1NjQgKikmZHNhLCBvZmZzZXQsIHZhbHVlLCAwKTsKLQotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQotCXJldHVybiByZXRWYWw7CisJcmV0dXJuIEh2Q2FsbDQoSHZDYWxsUGNpQ29uZmlnU3RvcmUzMiwgKih1NjQgKikmZHNhLCBvZmZzZXQsIHZhbHVlLCAwKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2JhckxvYWQ4KHUxNglidXNOdW1iZXJQYXJtLAotCQkJCQkgICB1OAkJc3ViQnVzUGFybSwKLQkJCQkJICAgdTgJCWRldmljZUlkUGFybSwKLQkJCQkJICAgdTgJCWJhck51bWJlclBhcm0sCi0JCQkJCSAgIHU2NAkJb2Zmc2V0UGFybSwKLQkJCQkJICAgdTgqCQl2YWx1ZVBhcm0pCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbFBjaV9iYXJMb2FkOCh1MTYgYnVzTnVtYmVyUGFybSwgdTggc3ViQnVzUGFybSwKKwkJdTggZGV2aWNlSWRQYXJtLCB1OCBiYXJOdW1iZXJQYXJtLCB1NjQgb2Zmc2V0UGFybSwKKwkJdTggKnZhbHVlUGFybSkKIHsKIAlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOwogCXN0cnVjdCBIdkNhbGxQY2lfTG9hZFJldHVybiByZXRWYWw7CiAKLQkqKCh1NjQqKSZkc2EpID0gMDsJCQkJCisJKigodTY0KikmZHNhKSA9IDA7CiAKIAlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyUGFybTsKIAlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKQEAgLTI2OSwyNCArMjQxLDE5IEBACiAKIAlIdkNhbGwzUmV0MTYoSHZDYWxsUGNpQmFyTG9hZDgsICZyZXRWYWwsICoodTY0ICopJmRzYSwgb2Zmc2V0UGFybSwgMCk7CiAKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0KIAkqdmFsdWVQYXJtID0gcmV0VmFsLnZhbHVlOwogCiAJcmV0dXJuIHJldFZhbC5yYzsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2JhckxvYWQxNih1MTYJYnVzTnVtYmVyUGFybSwKLQkJCQkJICAgdTgJCXN1YkJ1c1Bhcm0sCi0JCQkJCSAgIHU4CQlkZXZpY2VJZFBhcm0sCi0JCQkJCSAgIHU4CQliYXJOdW1iZXJQYXJtLAotCQkJCQkgICB1NjQJCW9mZnNldFBhcm0sCi0JCQkJCSAgIHUxNioJCXZhbHVlUGFybSkKKworc3RhdGljIGlubGluZSB1NjQgSHZDYWxsUGNpX2JhckxvYWQxNih1MTYgYnVzTnVtYmVyUGFybSwgdTggc3ViQnVzUGFybSwKKwkJdTggZGV2aWNlSWRQYXJtLCB1OCBiYXJOdW1iZXJQYXJtLCB1NjQgb2Zmc2V0UGFybSwKKwkJdTE2ICp2YWx1ZVBhcm0pCiB7CiAJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKIAlzdHJ1Y3QgSHZDYWxsUGNpX0xvYWRSZXR1cm4gcmV0VmFsOwogCi0JKigodTY0KikmZHNhKSA9IDA7CQkJCQorCSooKHU2NCopJmRzYSkgPSAwOwogCiAJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CiAJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CkBAIC0yOTUsMjQgKzI2MiwxOSBAQAogCiAJSHZDYWxsM1JldDE2KEh2Q2FsbFBjaUJhckxvYWQxNiwgJnJldFZhbCwgKih1NjQgKikmZHNhLCBvZmZzZXRQYXJtLCAwKTsKIAotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQogCSp2YWx1ZVBhcm0gPSByZXRWYWwudmFsdWU7CiAKIAlyZXR1cm4gcmV0VmFsLnJjOwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfYmFyTG9hZDMyKHUxNglidXNOdW1iZXJQYXJtLAotCQkJCQkgICB1OAkJc3ViQnVzUGFybSwKLQkJCQkJICAgdTgJCWRldmljZUlkUGFybSwKLQkJCQkJICAgdTgJCWJhck51bWJlclBhcm0sCi0JCQkJCSAgIHU2NAkJb2Zmc2V0UGFybSwKLQkJCQkJICAgdTMyKgkJdmFsdWVQYXJtKQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxQY2lfYmFyTG9hZDMyKHUxNiBidXNOdW1iZXJQYXJtLCB1OCBzdWJCdXNQYXJtLAorCQl1OCBkZXZpY2VJZFBhcm0sIHU4IGJhck51bWJlclBhcm0sIHU2NCBvZmZzZXRQYXJtLAorCQl1MzIgKnZhbHVlUGFybSkKIHsKIAlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOwogCXN0cnVjdCBIdkNhbGxQY2lfTG9hZFJldHVybiByZXRWYWw7CiAKLQkqKCh1NjQqKSZkc2EpID0gMDsJCQkJCisJKigodTY0KikmZHNhKSA9IDA7CiAKIAlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyUGFybTsKIAlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKQEAgLTMyMSwyNCArMjgzLDE5IEBACiAKIAlIdkNhbGwzUmV0MTYoSHZDYWxsUGNpQmFyTG9hZDMyLCAmcmV0VmFsLCAqKHU2NCAqKSZkc2EsIG9mZnNldFBhcm0sIDApOwogCi0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCiAJKnZhbHVlUGFybSA9IHJldFZhbC52YWx1ZTsKIAogCXJldHVybiByZXRWYWwucmM7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbFBjaV9iYXJMb2FkNjQodTE2CWJ1c051bWJlclBhcm0sCi0JCQkJCSAgIHU4CQlzdWJCdXNQYXJtLAotCQkJCQkgICB1OAkJZGV2aWNlSWRQYXJtLAotCQkJCQkgICB1OAkJYmFyTnVtYmVyUGFybSwKLQkJCQkJICAgdTY0CQlvZmZzZXRQYXJtLAotCQkJCQkgICB1NjQqCQl2YWx1ZVBhcm0pCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbFBjaV9iYXJMb2FkNjQodTE2IGJ1c051bWJlclBhcm0sIHU4IHN1YkJ1c1Bhcm0sCisJCXU4IGRldmljZUlkUGFybSwgdTggYmFyTnVtYmVyUGFybSwgdTY0IG9mZnNldFBhcm0sCisJCXU2NCAqdmFsdWVQYXJtKQogewogCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7CiAJc3RydWN0IEh2Q2FsbFBjaV9Mb2FkUmV0dXJuIHJldFZhbDsKIAotCSooKHU2NCopJmRzYSkgPSAwOwkJCQkKKwkqKCh1NjQqKSZkc2EpID0gMDsKIAogCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXJQYXJtOwogCWRzYS5zdWJCdXNOdW1iZXIgPSBzdWJCdXNQYXJtOwpAQCAtMzQ3LDExMiArMzA0LDgxIEBACiAKIAlIdkNhbGwzUmV0MTYoSHZDYWxsUGNpQmFyTG9hZDY0LCAmcmV0VmFsLCAqKHU2NCAqKSZkc2EsIG9mZnNldFBhcm0sIDApOwogCi0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCiAJKnZhbHVlUGFybSA9IHJldFZhbC52YWx1ZTsKIAogCXJldHVybiByZXRWYWwucmM7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbFBjaV9iYXJTdG9yZTgodTE2CWJ1c051bWJlclBhcm0sCi0JCQkJCSAgICB1OAkJc3ViQnVzUGFybSwKLQkJCQkJICAgIHU4CQlkZXZpY2VJZFBhcm0sCi0JCQkJCSAgICB1OAkJYmFyTnVtYmVyUGFybSwKLQkJCQkJICAgIHU2NAkJb2Zmc2V0UGFybSwKLQkJCQkJICAgIHU4CQl2YWx1ZVBhcm0pCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbFBjaV9iYXJTdG9yZTgodTE2IGJ1c051bWJlclBhcm0sIHU4IHN1YkJ1c1Bhcm0sCisJCXU4IGRldmljZUlkUGFybSwgdTggYmFyTnVtYmVyUGFybSwgdTY0IG9mZnNldFBhcm0sCisJCXU4IHZhbHVlUGFybSkKIHsKIAlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOwotCXU2NCByZXRWYWw7CiAKIAkqKCh1NjQqKSZkc2EpID0gMDsKLQkJCQkKKwogCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXJQYXJtOwogCWRzYS5zdWJCdXNOdW1iZXIgPSBzdWJCdXNQYXJtOwogCWRzYS5kZXZpY2VJZCA9IGRldmljZUlkUGFybTsKIAlkc2EuYmFyTnVtYmVyID0gYmFyTnVtYmVyUGFybTsKIAotCXJldFZhbCA9IEh2Q2FsbDQoSHZDYWxsUGNpQmFyU3RvcmU4LCAqKHU2NCAqKSZkc2EsIG9mZnNldFBhcm0sIHZhbHVlUGFybSwgMCk7Ci0KLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0KLQlyZXR1cm4gcmV0VmFsOworCXJldHVybiBIdkNhbGw0KEh2Q2FsbFBjaUJhclN0b3JlOCwgKih1NjQgKikmZHNhLCBvZmZzZXRQYXJtLAorCQkJdmFsdWVQYXJtLCAwKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2JhclN0b3JlMTYodTE2CWJ1c051bWJlclBhcm0sCi0JCQkJCSAgICAgdTgJCXN1YkJ1c1Bhcm0sCi0JCQkJCSAgICAgdTgJCWRldmljZUlkUGFybSwKLQkJCQkJICAgICB1OAkJYmFyTnVtYmVyUGFybSwKLQkJCQkJICAgICB1NjQJb2Zmc2V0UGFybSwKLQkJCQkJICAgICB1MTYJdmFsdWVQYXJtKQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxQY2lfYmFyU3RvcmUxNih1MTYgYnVzTnVtYmVyUGFybSwgdTggc3ViQnVzUGFybSwKKwkJdTggZGV2aWNlSWRQYXJtLCB1OCBiYXJOdW1iZXJQYXJtLCB1NjQgb2Zmc2V0UGFybSwKKwkJdTE2IHZhbHVlUGFybSkKIHsKIAlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOwotCXU2NCByZXRWYWw7CiAKIAkqKCh1NjQqKSZkc2EpID0gMDsKLQkJCQkKKwogCWRzYS5idXNOdW1iZXIgPSBidXNOdW1iZXJQYXJtOwogCWRzYS5zdWJCdXNOdW1iZXIgPSBzdWJCdXNQYXJtOwogCWRzYS5kZXZpY2VJZCA9IGRldmljZUlkUGFybTsKIAlkc2EuYmFyTnVtYmVyID0gYmFyTnVtYmVyUGFybTsKIAotCXJldFZhbCA9IEh2Q2FsbDQoSHZDYWxsUGNpQmFyU3RvcmUxNiwgKih1NjQgKikmZHNhLCBvZmZzZXRQYXJtLCB2YWx1ZVBhcm0sIDApOwotCi0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCi0JcmV0dXJuIHJldFZhbDsKKwlyZXR1cm4gSHZDYWxsNChIdkNhbGxQY2lCYXJTdG9yZTE2LCAqKHU2NCAqKSZkc2EsIG9mZnNldFBhcm0sCisJCQl2YWx1ZVBhcm0sIDApOwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfYmFyU3RvcmUzMih1MTYJYnVzTnVtYmVyUGFybSwKLQkJCQkJICAgICB1OAkJc3ViQnVzUGFybSwKLQkJCQkJICAgICB1OAkJZGV2aWNlSWRQYXJtLAotCQkJCQkgICAgIHU4CQliYXJOdW1iZXJQYXJtLAotCQkJCQkgICAgIHU2NAlvZmZzZXRQYXJtLAotCQkJCQkgICAgIHUzMgl2YWx1ZVBhcm0pCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbFBjaV9iYXJTdG9yZTMyKHUxNiBidXNOdW1iZXJQYXJtLCB1OCBzdWJCdXNQYXJtLAorCQl1OCBkZXZpY2VJZFBhcm0sIHU4IGJhck51bWJlclBhcm0sIHU2NCBvZmZzZXRQYXJtLAorCQl1MzIgdmFsdWVQYXJtKQogewogCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7Ci0JdTY0IHJldFZhbDsKIAogCSooKHU2NCopJmRzYSkgPSAwOwotCQkJCQorCiAJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CiAJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CiAJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOwogCWRzYS5iYXJOdW1iZXIgPSBiYXJOdW1iZXJQYXJtOwogCi0JcmV0VmFsID0gSHZDYWxsNChIdkNhbGxQY2lCYXJTdG9yZTMyLCAqKHU2NCAqKSZkc2EsIG9mZnNldFBhcm0sIHZhbHVlUGFybSwgMCk7Ci0KLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0KLQlyZXR1cm4gcmV0VmFsOworCXJldHVybiBIdkNhbGw0KEh2Q2FsbFBjaUJhclN0b3JlMzIsICoodTY0ICopJmRzYSwgb2Zmc2V0UGFybSwKKwkJCXZhbHVlUGFybSwgMCk7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbFBjaV9iYXJTdG9yZTY0KHUxNglidXNOdW1iZXJQYXJtLAotCQkJCQkgICAgIHU4CQlzdWJCdXNQYXJtLAotCQkJCQkgICAgIHU4CQlkZXZpY2VJZFBhcm0sCi0JCQkJCSAgICAgdTgJCWJhck51bWJlclBhcm0sCi0JCQkJCSAgICAgdTY0CW9mZnNldFBhcm0sCi0JCQkJCSAgICAgdTY0CXZhbHVlUGFybSkKKworc3RhdGljIGlubGluZSB1NjQgSHZDYWxsUGNpX2JhclN0b3JlNjQodTE2IGJ1c051bWJlclBhcm0sIHU4IHN1YkJ1c1Bhcm0sCisJCXU4IGRldmljZUlkUGFybSwgdTggYmFyTnVtYmVyUGFybSwgdTY0IG9mZnNldFBhcm0sCisJCXU2NCB2YWx1ZVBhcm0pCiB7CiAJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKLQl1NjQgcmV0VmFsOwogCiAJKigodTY0KikmZHNhKSA9IDA7Ci0JCQkJCisKIAlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyUGFybTsKIAlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKIAlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZFBhcm07CiAJZHNhLmJhck51bWJlciA9IGJhck51bWJlclBhcm07CiAKLQlyZXRWYWwgPSBIdkNhbGw0KEh2Q2FsbFBjaUJhclN0b3JlNjQsICoodTY0ICopJmRzYSwgb2Zmc2V0UGFybSwgdmFsdWVQYXJtLCAwKTsKLQotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQotCXJldHVybiByZXRWYWw7CisJcmV0dXJuIEh2Q2FsbDQoSHZDYWxsUGNpQmFyU3RvcmU2NCwgKih1NjQgKikmZHNhLCBvZmZzZXRQYXJtLAorCQkJdmFsdWVQYXJtLCAwKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2VvaSh1MTYJYnVzTnVtYmVyUGFybSwKLQkJCQkgICAgICB1OAlzdWJCdXNQYXJtLCAgCi0JCQkJICAgICAgdTgJZGV2aWNlSWRQYXJtKQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxQY2lfZW9pKHUxNiBidXNOdW1iZXJQYXJtLCB1OCBzdWJCdXNQYXJtLAorCQl1OCBkZXZpY2VJZFBhcm0pCiB7CiAJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKIAlzdHJ1Y3QgSHZDYWxsUGNpX0xvYWRSZXR1cm4gcmV0VmFsOwpAQCAtNDY1LDIwICszOTEsMTMgQEAKIAogCUh2Q2FsbDFSZXQxNihIdkNhbGxQY2lFb2ksICZyZXRWYWwsICoodTY0KikmZHNhKTsKIAotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQogCXJldHVybiByZXRWYWwucmM7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbFBjaV9nZXRCYXJQYXJtcyh1MTYJYnVzTnVtYmVyUGFybSwKLQkJCQkJICAgICAgdTgJc3ViQnVzUGFybSwgIAotCQkJCQkgICAgICB1OAlkZXZpY2VJZFBhcm0sCi0JCQkJCSAgICAgIHU4CWJhck51bWJlclBhcm0sCi0JCQkJCSAgICAgIHU2NAlwYXJtcywKLQkJCQkJICAgICAgdTMyCXNpemVvZlBhcm1zKQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxQY2lfZ2V0QmFyUGFybXModTE2IGJ1c051bWJlclBhcm0sIHU4IHN1YkJ1c1Bhcm0sCisJCXU4IGRldmljZUlkUGFybSwgdTggYmFyTnVtYmVyUGFybSwgdTY0IHBhcm1zLCB1MzIgc2l6ZW9mUGFybXMpCiB7CiAJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKLQl1NjQgcmV0VmFsOwogCiAJKigodTY0KikmZHNhKSA9IDA7CiAKQEAgLTQ4Nyw2MiArNDA2LDEzIEBACiAJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOwogCWRzYS5iYXJOdW1iZXIgPSBiYXJOdW1iZXJQYXJtOwogCi0JcmV0VmFsID0gSHZDYWxsMyhIdkNhbGxQY2lHZXRCYXJQYXJtcywgKih1NjQqKSZkc2EsIHBhcm1zLCBzaXplb2ZQYXJtcyk7Ci0KLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0KLQlyZXR1cm4gcmV0VmFsOworCXJldHVybiBIdkNhbGwzKEh2Q2FsbFBjaUdldEJhclBhcm1zLCAqKHU2NCopJmRzYSwgcGFybXMsIHNpemVvZlBhcm1zKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX21hc2tGaXNyKHUxNglidXNOdW1iZXJQYXJtLAotCQkJCQkgICB1OAlzdWJCdXNQYXJtLCAgCi0JCQkJCSAgIHU4CWRldmljZUlkUGFybSwKLQkJCQkJICAgdTY0CWZpc3JNYXNrKQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxQY2lfbWFza0Zpc3IodTE2IGJ1c051bWJlclBhcm0sIHU4IHN1YkJ1c1Bhcm0sCisJCXU4IGRldmljZUlkUGFybSwgdTY0IGZpc3JNYXNrKQogewogCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7Ci0JdTY0IHJldFZhbDsKLQotCSooKHU2NCopJmRzYSkgPSAwOwkJCi0KLQlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyUGFybTsKLQlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKLQlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZFBhcm07Ci0KLQlyZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbFBjaU1hc2tGaXNyLCAqKHU2NCopJmRzYSwgZmlzck1hc2spOwotCi0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCi0JcmV0dXJuIHJldFZhbDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX3VubWFza0Zpc3IodTE2CWJ1c051bWJlclBhcm0sCi0JCQkJCSAgICAgdTgJCXN1YkJ1c1Bhcm0sICAKLQkJCQkJICAgICB1OAkJZGV2aWNlSWRQYXJtLAotCQkJCQkgICAgIHU2NAlmaXNyTWFzaykKLXsKLQlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOwotCXU2NCByZXRWYWw7Ci0KLQkqKCh1NjQqKSZkc2EpID0gMDsJCQotCi0JZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07Ci0JZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07Ci0JZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOwotCi0JcmV0VmFsID0gSHZDYWxsMihIdkNhbGxQY2lVbm1hc2tGaXNyLCAqKHU2NCopJmRzYSwgZmlzck1hc2spOwotCi0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCi0JcmV0dXJuIHJldFZhbDsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX3NldFNsb3RSZXNldCh1MTYJCWJ1c051bWJlclBhcm0sCi0JCQkJCSAgICAgICB1OAkJc3ViQnVzUGFybSwKLQkJCQkJICAgICAgIHU4CQlkZXZpY2VJZFBhcm0sCi0JCQkJCSAgICAgICB1NjQJCW9uTm90T2ZmKQotewotCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7Ci0JdTY0IHJldFZhbDsKIAogCSooKHU2NCopJmRzYSkgPSAwOwogCkBAIC01NTAsMjEgKzQyMCw0MSBAQAogCWRzYS5zdWJCdXNOdW1iZXIgPSBzdWJCdXNQYXJtOwogCWRzYS5kZXZpY2VJZCA9IGRldmljZUlkUGFybTsKIAotCXJldFZhbCA9IEh2Q2FsbDIoSHZDYWxsUGNpU2V0U2xvdFJlc2V0LCAqKHU2NCopJmRzYSwgb25Ob3RPZmYpOwotCi0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCi0JcmV0dXJuIHJldFZhbDsKKwlyZXR1cm4gSHZDYWxsMihIdkNhbGxQY2lNYXNrRmlzciwgKih1NjQqKSZkc2EsIGZpc3JNYXNrKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX2dldERldmljZUluZm8odTE2CWJ1c051bWJlclBhcm0sCi0JCQkJCQl1OAlzdWJCdXNQYXJtLCAgCi0JCQkJCQl1OAlkZXZpY2VOdW1iZXJQYXJtLAotCQkJCQkJdTY0ICAgICBwYXJtcywKLQkJCQkJCXUzMglzaXplb2ZQYXJtcykKKworc3RhdGljIGlubGluZSB1NjQgSHZDYWxsUGNpX3VubWFza0Zpc3IodTE2IGJ1c051bWJlclBhcm0sIHU4IHN1YkJ1c1Bhcm0sCisJCXU4IGRldmljZUlkUGFybSwgdTY0IGZpc3JNYXNrKQogewogCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7Ci0JdTY0IHJldFZhbDsKKworCSooKHU2NCopJmRzYSkgPSAwOworCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CisJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOworCisJcmV0dXJuIEh2Q2FsbDIoSHZDYWxsUGNpVW5tYXNrRmlzciwgKih1NjQqKSZkc2EsIGZpc3JNYXNrKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgSHZDYWxsUGNpX3NldFNsb3RSZXNldCh1MTYgYnVzTnVtYmVyUGFybSwgdTggc3ViQnVzUGFybSwKKwkJdTggZGV2aWNlSWRQYXJtLCB1NjQgb25Ob3RPZmYpCit7CisJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKKworCSooKHU2NCopJmRzYSkgPSAwOworCisJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CisJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CisJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOworCisJcmV0dXJuIEh2Q2FsbDIoSHZDYWxsUGNpU2V0U2xvdFJlc2V0LCAqKHU2NCopJmRzYSwgb25Ob3RPZmYpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxQY2lfZ2V0RGV2aWNlSW5mbyh1MTYgYnVzTnVtYmVyUGFybSwgdTggc3ViQnVzUGFybSwKKwkJdTggZGV2aWNlTnVtYmVyUGFybSwgdTY0IHBhcm1zLCB1MzIgc2l6ZW9mUGFybXMpCit7CisJc3RydWN0IEh2Q2FsbFBjaV9Ec2FBZGRyIGRzYTsKIAogCSooKHU2NCopJmRzYSkgPSAwOwogCkBAIC01NzIsMTAyICs0NjIsNzIgQEAKIAlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKIAlkc2EuZGV2aWNlSWQgPSBkZXZpY2VOdW1iZXJQYXJtIDw8IDQ7CiAKLQlyZXRWYWwgPSBIdkNhbGwzKEh2Q2FsbFBjaUdldERldmljZUluZm8sICoodTY0KikmZHNhLCBwYXJtcywgc2l6ZW9mUGFybXMpOwotCi0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCi0JcmV0dXJuIHJldFZhbDsKKwlyZXR1cm4gSHZDYWxsMyhIdkNhbGxQY2lHZXREZXZpY2VJbmZvLCAqKHU2NCopJmRzYSwgcGFybXMsIHNpemVvZlBhcm1zKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJSHZDYWxsUGNpX21hc2tJbnRlcnJ1cHRzKHUxNglidXNOdW1iZXJQYXJtLAotCQkJCQkJIHU4CXN1YkJ1c1Bhcm0sICAKLQkJCQkJCSB1OAlkZXZpY2VJZFBhcm0sCi0JCQkJCQkgdTY0CWludGVycnVwdE1hc2spCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbFBjaV9tYXNrSW50ZXJydXB0cyh1MTYgYnVzTnVtYmVyUGFybSwgdTggc3ViQnVzUGFybSwKKwkJdTggZGV2aWNlSWRQYXJtLCB1NjQgaW50ZXJydXB0TWFzaykKIHsKIAlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOwotCXU2NCByZXRWYWw7CiAKLQkqKCh1NjQqKSZkc2EpID0gMDsJCQorCSooKHU2NCopJmRzYSkgPSAwOwogCiAJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CiAJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CiAJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOwogCi0JcmV0VmFsID0gSHZDYWxsMihIdkNhbGxQY2lNYXNrSW50ZXJydXB0cywgKih1NjQqKSZkc2EsIGludGVycnVwdE1hc2spOwotCi0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCi0JcmV0dXJuIHJldFZhbDsKKwlyZXR1cm4gSHZDYWxsMihIdkNhbGxQY2lNYXNrSW50ZXJydXB0cywgKih1NjQqKSZkc2EsIGludGVycnVwdE1hc2spOwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfdW5tYXNrSW50ZXJydXB0cyh1MTYJYnVzTnVtYmVyUGFybSwKLQkJCQkJCSB1OAkJc3ViQnVzUGFybSwgIAotCQkJCQkJIHU4CQlkZXZpY2VJZFBhcm0sCi0JCQkJCQkgdTY0CQlpbnRlcnJ1cHRNYXNrKQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxQY2lfdW5tYXNrSW50ZXJydXB0cyh1MTYgYnVzTnVtYmVyUGFybSwgdTggc3ViQnVzUGFybSwKKwkJdTggZGV2aWNlSWRQYXJtLCB1NjQgaW50ZXJydXB0TWFzaykKIHsKIAlzdHJ1Y3QgSHZDYWxsUGNpX0RzYUFkZHIgZHNhOwotCXU2NCByZXRWYWw7CiAKLQkqKCh1NjQqKSZkc2EpID0gMDsJCQorCSooKHU2NCopJmRzYSkgPSAwOwogCiAJZHNhLmJ1c051bWJlciA9IGJ1c051bWJlclBhcm07CiAJZHNhLnN1YkJ1c051bWJlciA9IHN1YkJ1c1Bhcm07CiAJZHNhLmRldmljZUlkID0gZGV2aWNlSWRQYXJtOwogCi0JcmV0VmFsID0gSHZDYWxsMihIdkNhbGxQY2lVbm1hc2tJbnRlcnJ1cHRzLCAqKHU2NCopJmRzYSwgaW50ZXJydXB0TWFzayk7Ci0KLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0KLQlyZXR1cm4gcmV0VmFsOworCXJldHVybiBIdkNhbGwyKEh2Q2FsbFBjaVVubWFza0ludGVycnVwdHMsICoodTY0KikmZHNhLCBpbnRlcnJ1cHRNYXNrKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1zdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxQY2lfZ2V0QnVzVW5pdEluZm8odTE2CQlidXNOdW1iZXJQYXJtLAotCQkJCQkJIHU4CQlzdWJCdXNQYXJtLCAgCi0JCQkJCQkgdTgJCWRldmljZUlkUGFybSwKLQkJCQkJCSB1NjQgICAgICAgICAgICBwYXJtcywKLQkJCQkJCSB1MzIJCXNpemVvZlBhcm1zKQorc3RhdGljIGlubGluZSB1NjQgSHZDYWxsUGNpX2dldEJ1c1VuaXRJbmZvKHUxNiBidXNOdW1iZXJQYXJtLCB1OCBzdWJCdXNQYXJtLAorCQl1OCBkZXZpY2VJZFBhcm0sIHU2NCBwYXJtcywgdTMyIHNpemVvZlBhcm1zKQogewogCXN0cnVjdCBIdkNhbGxQY2lfRHNhQWRkciBkc2E7Ci0JdTY0IHJldFZhbDsKIAotCSooKHU2NCopJmRzYSkgPSAwOwkJCisJKigodTY0KikmZHNhKSA9IDA7CiAKIAlkc2EuYnVzTnVtYmVyID0gYnVzTnVtYmVyUGFybTsKIAlkc2Euc3ViQnVzTnVtYmVyID0gc3ViQnVzUGFybTsKIAlkc2EuZGV2aWNlSWQgPSBkZXZpY2VJZFBhcm07CiAKLQlyZXRWYWwgPSBIdkNhbGwzKEh2Q2FsbFBjaUdldEJ1c1VuaXRJbmZvLCAqKHU2NCopJmRzYSwgcGFybXMsIHNpemVvZlBhcm1zKTsKLQotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQotCXJldHVybiByZXRWYWw7CisJcmV0dXJuIEh2Q2FsbDMoSHZDYWxsUGNpR2V0QnVzVW5pdEluZm8sICoodTY0KikmZHNhLCBwYXJtcywKKwkJCXNpemVvZlBhcm1zKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1zdGF0aWMgaW5saW5lIGludCBIdkNhbGxQY2lfZ2V0QnVzVnBkKHUxNiBidXNOdW1QYXJtLCB1NjQgZGVzdFBhcm0sIHUxNiBzaXplUGFybSkKK3N0YXRpYyBpbmxpbmUgaW50IEh2Q2FsbFBjaV9nZXRCdXNWcGQodTE2IGJ1c051bVBhcm0sIHU2NCBkZXN0UGFybSwKKwkJdTE2IHNpemVQYXJtKQogewotCWludCB4UmV0U2l6ZTsKLQl1NjQgeFJjID0gSHZDYWxsNChIdkNhbGxQY2lHZXRDYXJkVnBkLCBidXNOdW1QYXJtLCBkZXN0UGFybSwgc2l6ZVBhcm0sIEh2Q2FsbFBjaV9CdXNWcGQpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKKwl1NjQgeFJjID0gSHZDYWxsNChIdkNhbGxQY2lHZXRDYXJkVnBkLCBidXNOdW1QYXJtLCBkZXN0UGFybSwKKwkJCXNpemVQYXJtLCBIdkNhbGxQY2lfQnVzVnBkKTsKIAlpZiAoeFJjID09IC0xKQotCQl4UmV0U2l6ZSA9IC0xOworCQlyZXR1cm4gLTE7CiAJZWxzZQotCQl4UmV0U2l6ZSA9IHhSYyAmIDB4RkZGRjsKLQlyZXR1cm4geFJldFNpemU7CisJCXJldHVybiB4UmMgJiAweEZGRkY7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotc3RhdGljIGlubGluZSBpbnQgSHZDYWxsUGNpX2dldEJ1c0FkYXB0ZXJWcGQodTE2IGJ1c051bVBhcm0sIHU2NCBkZXN0UGFybSwgdTE2IHNpemVQYXJtKQorc3RhdGljIGlubGluZSBpbnQgSHZDYWxsUGNpX2dldEJ1c0FkYXB0ZXJWcGQodTE2IGJ1c051bVBhcm0sIHU2NCBkZXN0UGFybSwKKwkJdTE2IHNpemVQYXJtKQogewotCWludCB4UmV0U2l6ZTsKLQl1NjQgeFJjID0gSHZDYWxsNChIdkNhbGxQY2lHZXRDYXJkVnBkLCBidXNOdW1QYXJtLCBkZXN0UGFybSwgc2l6ZVBhcm0sIEh2Q2FsbFBjaV9CdXNBZGFwdGVyVnBkKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7CisJdTY0IHhSYyA9IEh2Q2FsbDQoSHZDYWxsUGNpR2V0Q2FyZFZwZCwgYnVzTnVtUGFybSwgZGVzdFBhcm0sCisJCQlzaXplUGFybSwgSHZDYWxsUGNpX0J1c0FkYXB0ZXJWcGQpOwogCWlmICh4UmMgPT0gLTEpCi0JCXhSZXRTaXplID0gLTE7CisJCXJldHVybiAtMTsKIAllbHNlCi0JCXhSZXRTaXplID0geFJjICYgMHhGRkZGOwotCXJldHVybiB4UmV0U2l6ZTsKKwkJcmV0dXJuIHhSYyAmIDB4RkZGRjsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiAjZW5kaWYgLyogX0hWQ0FMTFBDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbFNjLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbFNjLmgKaW5kZXggZWVhMjU4NC4uYTYyY2VmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxTYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsU2MuaApAQCAtMSwxNyArMSwxNyBAQAogLyoKICAqIEh2Q2FsbFNjLmgKICAqIENvcHlyaWdodCAoQykgMjAwMSAgTWlrZSBDb3JyaWdhbiBJQk0gQ29ycG9yYXRpb24KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKQEAgLTE5LDcgKzE5LDcgQEAKICNpZm5kZWYgX0hWQ0FMTFNDX0gKICNkZWZpbmUgX0hWQ0FMTFNDX0gKIAotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2VHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIEh2Q2FsbEJhc2UJCTB4ODAwMDAwMDAwMDAwMDAwMHVsCiAjZGVmaW5lIEh2Q2FsbENjCQkweDgwMDEwMDAwMDAwMDAwMDB1bApAQCAtMzAsMjIgKzMwLDIyIEBACiAjZGVmaW5lIEh2Q2FsbFNtCQkweDgwMDcwMDAwMDAwMDAwMDB1bAogI2RlZmluZSBIdkNhbGxYbQkJMHg4MDA5MDAwMDAwMDAwMDAwdWwKIAotdTY0IEh2Q2FsbDAoIHU2NCApOwotdTY0IEh2Q2FsbDEoIHU2NCwgdTY0ICk7Ci11NjQgSHZDYWxsMiggdTY0LCB1NjQsIHU2NCApOwotdTY0IEh2Q2FsbDMoIHU2NCwgdTY0LCB1NjQsIHU2NCApOwotdTY0IEh2Q2FsbDQoIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0ICk7Ci11NjQgSHZDYWxsNSggdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCApOwotdTY0IEh2Q2FsbDYoIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCApOwotdTY0IEh2Q2FsbDcoIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0ICk7CitleHRlcm4gdTY0IEh2Q2FsbDAodTY0KTsKK2V4dGVybiB1NjQgSHZDYWxsMSh1NjQsIHU2NCk7CitleHRlcm4gdTY0IEh2Q2FsbDIodTY0LCB1NjQsIHU2NCk7CitleHRlcm4gdTY0IEh2Q2FsbDModTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiB1NjQgSHZDYWxsNCh1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gdTY0IEh2Q2FsbDUodTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gdTY0IEh2Q2FsbDYodTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiB1NjQgSHZDYWxsNyh1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CiAKLXU2NCBIdkNhbGwwUmV0MTYoIHU2NCwgdm9pZCAqICk7Ci11NjQgSHZDYWxsMVJldDE2KCB1NjQsIHZvaWQgKiwgdTY0ICk7Ci11NjQgSHZDYWxsMlJldDE2KCB1NjQsIHZvaWQgKiwgdTY0LCB1NjQgKTsKLXU2NCBIdkNhbGwzUmV0MTYoIHU2NCwgdm9pZCAqLCB1NjQsIHU2NCwgdTY0ICk7Ci11NjQgSHZDYWxsNFJldDE2KCB1NjQsIHZvaWQgKiwgdTY0LCB1NjQsIHU2NCwgdTY0ICk7Ci11NjQgSHZDYWxsNVJldDE2KCB1NjQsIHZvaWQgKiwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQgKTsKLXU2NCBIdkNhbGw2UmV0MTYoIHU2NCwgdm9pZCAqLCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0ICk7Ci11NjQgSHZDYWxsN1JldDE2KCB1NjQsIHZvaWQgKiwgdTY0LCB1NjQgLHU2NCAsdTY0ICx1NjQgLHU2NCAsdTY0ICk7CitleHRlcm4gdTY0IEh2Q2FsbDBSZXQxNih1NjQsIHZvaWQgKik7CitleHRlcm4gdTY0IEh2Q2FsbDFSZXQxNih1NjQsIHZvaWQgKiwgdTY0KTsKK2V4dGVybiB1NjQgSHZDYWxsMlJldDE2KHU2NCwgdm9pZCAqLCB1NjQsIHU2NCk7CitleHRlcm4gdTY0IEh2Q2FsbDNSZXQxNih1NjQsIHZvaWQgKiwgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gdTY0IEh2Q2FsbDRSZXQxNih1NjQsIHZvaWQgKiwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiB1NjQgSHZDYWxsNVJldDE2KHU2NCwgdm9pZCAqLCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gdTY0IEh2Q2FsbDZSZXQxNih1NjQsIHZvaWQgKiwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gdTY0IEh2Q2FsbDdSZXQxNih1NjQsIHZvaWQgKiwgdTY0LCB1NjQgLHU2NCAsdTY0ICx1NjQgLHU2NCAsdTY0KTsKIAogI2VuZGlmIC8qIF9IVkNBTExTQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbFNtLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbFNtLmgKaW5kZXggOTA1MGM5NC4uOGEzZGJiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxTbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsU20uaApAQCAtMSwxNyArMSwxNyBAQAogLyoKICAqIEh2Q2FsbFNtLmgKICAqIENvcHlyaWdodCAoQykgMjAwMSAgTWlrZSBDb3JyaWdhbiBJQk0gQ29ycG9yYXRpb24KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKQEAgLTE5LDM0ICsxOSwyMCBAQAogI2lmbmRlZiBfSFZDQUxMU01fSAogI2RlZmluZSBfSFZDQUxMU01fSAogCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLwlUaGlzIGZpbGUgY29udGFpbnMgdGhlICJoeXBlcnZpc29yIGNhbGwiIGludGVyZmFjZSB3aGljaCBpcyB1c2VkIHRvCi0vLwlkcml2ZSB0aGUgaHlwZXJ2aXNvciBmcm9tIHRoZSBPUy4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlICJoeXBlcnZpc29yIGNhbGwiIGludGVyZmFjZSB3aGljaCBpcyB1c2VkIHRvCisgKiBkcml2ZSB0aGUgaHlwZXJ2aXNvciBmcm9tIHRoZSBPUy4KKyAqLwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFN0YW5kYXJkIEluY2x1ZGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxTYy5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2VHlwZXMuaD4KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29uc3RhbnRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICNkZWZpbmUgSHZDYWxsU21HZXQ2NEJpdHNPZkFjY2Vzc01hcAlIdkNhbGxTbSAgKyAxMQogCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbFNtX2dldDY0Qml0c09mQWNjZXNzTWFwKAotCQkJCQlIdkxwSW5kZXggbHBJbmRleCwgdTY0IGluZGV4SW50b0JpdE1hcCApCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxTbV9nZXQ2NEJpdHNPZkFjY2Vzc01hcChIdkxwSW5kZXggbHBJbmRleCwKKwkJdTY0IGluZGV4SW50b0JpdE1hcCkKIHsKLQl1NjQgcmV0dmFsID0gSHZDYWxsMihIdkNhbGxTbUdldDY0Qml0c09mQWNjZXNzTWFwLCBscEluZGV4LAotCQkJICAgICBpbmRleEludG9CaXRNYXAgKTsKLQkvLyBnZXRQYWNhKCktPmFkanVzdEhtdEZvck5vT2ZTcGluTG9ja3NIZWxkKCk7Ci0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gSHZDYWxsMihIdkNhbGxTbUdldDY0Qml0c09mQWNjZXNzTWFwLCBscEluZGV4LCBpbmRleEludG9CaXRNYXApOwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKICNlbmRpZiAvKiBfSFZDQUxMU01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxYbS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkNhbGxYbS5oCmluZGV4IGJmYjg5OGYuLjhiOWJhNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZDYWxsWG0uaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2Q2FsbFhtLmgKQEAgLTEsMzAgKzEsMTMgQEAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8JCQkJCQkJIEhlYWRlciBGaWxlIElkCi0vLyBOYW1lX19fX19fX19fX19fX186CUh2Q2FsbFhtLkgKLS8vCi0vLyBEZXNjcmlwdGlvbl9fX19fX186Ci0vLwotLy8JVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSAiaHlwZXJ2aXNvciBjYWxsIiBpbnRlcmZhY2Ugd2hpY2ggaXMgdXNlZCB0bwotLy8JZHJpdmUgdGhlIGh5cGVydmlzb3IgZnJvbSBTTElDLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgImh5cGVydmlzb3IgY2FsbCIgaW50ZXJmYWNlIHdoaWNoIGlzIHVzZWQgdG8KKyAqIGRyaXZlIHRoZSBoeXBlcnZpc29yIGZyb20gU0xJQy4KKyAqLwogI2lmbmRlZiBfSFZDQUxMWE1fSAogI2RlZmluZSBfSFZDQUxMWE1fSAogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU3RhbmRhcmQgSW5jbHVkZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbFNjLmg+CiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZUeXBlcy5oPgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb25zdGFudHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogI2RlZmluZSBIdkNhbGxYbUdldFRjZVRhYmxlUGFybXMJSHZDYWxsWG0gKyAgMAogI2RlZmluZSBIdkNhbGxYbVRlc3RCdXMJCQlIdkNhbGxYbSArICAxCiAjZGVmaW5lIEh2Q2FsbFhtQ29ubmVjdEJ1c1VuaXQJCUh2Q2FsbFhtICsgIDIKQEAgLTMzLDYzICsxNiw2MyBAQAogI2RlZmluZSBIdkNhbGxYbVNldFRjZQkJCUh2Q2FsbFhtICsgMTEKICNkZWZpbmUgSHZDYWxsWG1TZXRUY2VzCQkJSHZDYWxsWG0gKyAxMwogCisvKgorICogU3RydWN0dXJlIHBhc3NlZCB0byBIdkNhbGxYbV9nZXRUY2VUYWJsZVBhcm1zCisgKi8KK3N0cnVjdCBpb21tdV90YWJsZV9jYiB7CisJdW5zaWduZWQgbG9uZwlpdGNfYnVzbm87CS8qIEJ1cyBudW1iZXIgZm9yIHRoaXMgdGNlIHRhYmxlICovCisJdW5zaWduZWQgbG9uZwlpdGNfc3RhcnQ7CS8qIFdpbGwgYmUgTlVMTCBmb3Igc2Vjb25kYXJ5ICovCisJdW5zaWduZWQgbG9uZwlpdGNfdG90YWxzaXplOwkvKiBTaXplIChpbiBwYWdlcykgb2Ygd2hvbGUgdGFibGUgKi8KKwl1bnNpZ25lZCBsb25nCWl0Y19vZmZzZXQ7CS8qIEluZGV4IGludG8gcmVhbCB0Y2UgdGFibGUgb2YgdGhlCisJCQkJCSAgIHN0YXJ0IG9mIG91ciBzZWN0aW9uICovCisJdW5zaWduZWQgbG9uZwlpdGNfc2l6ZTsJLyogU2l6ZSAoaW4gcGFnZXMpIG9mIG91ciBzZWN0aW9uICovCisJdW5zaWduZWQgbG9uZwlpdGNfaW5kZXg7CS8qIEluZGV4IG9mIHRoaXMgdGNlIHRhYmxlICovCisJdW5zaWduZWQgc2hvcnQJaXRjX21heHRhYmxlczsJLyogTWF4IG51bSBvZiB0YWJsZXMgZm9yIHBhcnRpdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJaXRjX3ZpcnRidXM7CS8qIEZsYWcgdG8gaW5kaWNhdGUgdmlydHVhbCBidXMgKi8KKwl1bnNpZ25lZCBjaGFyCWl0Y19zbG90bm87CS8qIElPQSBUY2UgU2xvdCBJbmRleCAqLworCXVuc2lnbmVkIGNoYXIJaXRjX3JzdmRbNF07Cit9OwogCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB2b2lkCQlIdkNhbGxYbV9nZXRUY2VUYWJsZVBhcm1zKHU2NCBjYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBIdkNhbGxYbV9nZXRUY2VUYWJsZVBhcm1zKHU2NCBjYikKIHsKIAlIdkNhbGwxKEh2Q2FsbFhtR2V0VGNlVGFibGVQYXJtcywgY2IpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2Q2FsbFhtX3NldFRjZSh1NjQgdGNlVGFibGVUb2tlbiwgdTY0IHRjZU9mZnNldCwgdTY0IHRjZSkKLXsJCi0JdTY0IHJldHZhbCA9IEh2Q2FsbDMoSHZDYWxsWG1TZXRUY2UsIHRjZVRhYmxlVG9rZW4sIHRjZU9mZnNldCwgdGNlICk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXR2YWw7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkNhbGxYbV9zZXRUY2VzKHU2NCB0Y2VUYWJsZVRva2VuLCB1NjQgdGNlT2Zmc2V0LCB1NjQgbnVtVGNlcywgdTY0IHRjZTEsIHU2NCB0Y2UyLCB1NjQgdGNlMywgdTY0IHRjZTQpCi17CQotCXU2NCByZXR2YWwgPSBIdkNhbGw3KEh2Q2FsbFhtU2V0VGNlcywgdGNlVGFibGVUb2tlbiwgdGNlT2Zmc2V0LCBudW1UY2VzLAotCQkJICAgICB0Y2UxLCB0Y2UyLCB0Y2UzLCB0Y2U0ICk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXR2YWw7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxYbV90ZXN0QnVzKHUxNiBidXNOdW1iZXIpCi17Ci0JdTY0IHJldFZhbCA9IEh2Q2FsbDEoSHZDYWxsWG1UZXN0QnVzLCBidXNOdW1iZXIpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQlyZXR1cm4gcmV0VmFsOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAlIdkNhbGxYbV90ZXN0QnVzVW5pdCh1MTYgYnVzTnVtYmVyLCB1OCBzdWJCdXNOdW1iZXIsIHU4IGRldmljZUlkKQotewotCXU2NCBidXNVbml0TnVtYmVyID0gKHN1YkJ1c051bWJlciA8PCA4KSB8IGRldmljZUlkOwotCXU2NCByZXRWYWwgPSBIdkNhbGwyKEh2Q2FsbFhtVGVzdEJ1c1VuaXQsIGJ1c051bWJlciwgYnVzVW5pdE51bWJlcik7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXRWYWw7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbFhtX2Nvbm5lY3RCdXNVbml0KHUxNiBidXNOdW1iZXIsIHU4IHN1YkJ1c051bWJlciwgdTggZGV2aWNlSWQsCi0JCQkJCQl1NjQgaW50ZXJydXB0VG9rZW4pCi17Ci0JdTY0IGJ1c1VuaXROdW1iZXIgPSAoc3ViQnVzTnVtYmVyIDw8IDgpIHwgZGV2aWNlSWQ7Ci0JdTY0IHF1ZXVlSW5kZXggPSAwOyAvLyBIdkxwQ29uZmlnOjptYXBEc2FUb1F1ZXVlSW5kZXgoSHZMcERTQShidXNOdW1iZXIsIHhCb2FyZCwgeENhcmQpKTsgIAogCi0JdTY0IHJldFZhbCA9IEh2Q2FsbDUoSHZDYWxsWG1Db25uZWN0QnVzVW5pdCwgYnVzTnVtYmVyLCBidXNVbml0TnVtYmVyLAotCQkJICAgICBpbnRlcnJ1cHRUb2tlbiwgMCwgcXVldWVJbmRleCk7Ci0JLy8gZ2V0UGFjYSgpLT5hZGp1c3RIbXRGb3JOb09mU3BpbkxvY2tzSGVsZCgpOwotCXJldHVybiByZXRWYWw7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CUh2Q2FsbFhtX2xvYWRUb2Qodm9pZCkKK3N0YXRpYyBpbmxpbmUgdTY0IEh2Q2FsbFhtX3NldFRjZSh1NjQgdGNlVGFibGVUb2tlbiwgdTY0IHRjZU9mZnNldCwgdTY0IHRjZSkKIHsKLQl1NjQgcmV0VmFsID0gSHZDYWxsMChIdkNhbGxYbUxvYWRUb2QpOwotCS8vIGdldFBhY2EoKS0+YWRqdXN0SG10Rm9yTm9PZlNwaW5Mb2Nrc0hlbGQoKTsKLQlyZXR1cm4gcmV0VmFsOworCXJldHVybiBIdkNhbGwzKEh2Q2FsbFhtU2V0VGNlLCB0Y2VUYWJsZVRva2VuLCB0Y2VPZmZzZXQsIHRjZSk7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3RhdGljIGlubGluZSB1NjQgSHZDYWxsWG1fc2V0VGNlcyh1NjQgdGNlVGFibGVUb2tlbiwgdTY0IHRjZU9mZnNldCwKKwkJdTY0IG51bVRjZXMsIHU2NCB0Y2UxLCB1NjQgdGNlMiwgdTY0IHRjZTMsIHU2NCB0Y2U0KQoreworCXJldHVybiBIdkNhbGw3KEh2Q2FsbFhtU2V0VGNlcywgdGNlVGFibGVUb2tlbiwgdGNlT2Zmc2V0LCBudW1UY2VzLAorCQkJICAgICB0Y2UxLCB0Y2UyLCB0Y2UzLCB0Y2U0KTsKK30KKworc3RhdGljIGlubGluZSB1NjQgSHZDYWxsWG1fdGVzdEJ1cyh1MTYgYnVzTnVtYmVyKQoreworCXJldHVybiBIdkNhbGwxKEh2Q2FsbFhtVGVzdEJ1cywgYnVzTnVtYmVyKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgSHZDYWxsWG1fdGVzdEJ1c1VuaXQodTE2IGJ1c051bWJlciwgdTggc3ViQnVzTnVtYmVyLAorCQl1OCBkZXZpY2VJZCkKK3sKKwlyZXR1cm4gSHZDYWxsMihIdkNhbGxYbVRlc3RCdXNVbml0LCBidXNOdW1iZXIsCisJCQkoc3ViQnVzTnVtYmVyIDw8IDgpIHwgZGV2aWNlSWQpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxYbV9jb25uZWN0QnVzVW5pdCh1MTYgYnVzTnVtYmVyLCB1OCBzdWJCdXNOdW1iZXIsCisJCXU4IGRldmljZUlkLCB1NjQgaW50ZXJydXB0VG9rZW4pCit7CisJcmV0dXJuIEh2Q2FsbDUoSHZDYWxsWG1Db25uZWN0QnVzVW5pdCwgYnVzTnVtYmVyLAorCQkJKHN1YkJ1c051bWJlciA8PCA4KSB8IGRldmljZUlkLCBpbnRlcnJ1cHRUb2tlbiwgMCwKKwkJCTAgLyogSHZMcENvbmZpZzo6bWFwRHNhVG9RdWV1ZUluZGV4KEh2THBEU0EoYnVzTnVtYmVyLCB4Qm9hcmQsIHhDYXJkKSkgKi8pOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkNhbGxYbV9sb2FkVG9kKHZvaWQpCit7CisJcmV0dXJuIEh2Q2FsbDAoSHZDYWxsWG1Mb2FkVG9kKTsKK30KIAogI2VuZGlmIC8qIF9IVkNBTExYTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2THBDb25maWcuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZMcENvbmZpZy5oCmluZGV4IGJkYmQ3MGYuLmYxY2YxZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZMcENvbmZpZy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZMcENvbmZpZy5oCkBAIC0xLDE3ICsxLDE3IEBACiAvKgogICogSHZMcENvbmZpZy5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCkBAIC0xOSwyNjIgKzE5LDEyMCBAQAogI2lmbmRlZiBfSFZMUENPTkZJR19ICiAjZGVmaW5lIF9IVkxQQ09ORklHX0gKIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyAgICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW50ZXJmYWNlIHRvIHRoZSBMUEFSIGNvbmZpZ3VyYXRpb24gZGF0YQotLy8gIHRvIGRldGVybWluZSB3aGljaCByZXNvdXJjZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCB0byBlYWNoIHBhcnRpdGlvbi4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW50ZXJmYWNlIHRvIHRoZSBMUEFSIGNvbmZpZ3VyYXRpb24gZGF0YQorICogdG8gZGV0ZXJtaW5lIHdoaWNoIHJlc291cmNlcyBzaG91bGQgYmUgYWxsb2NhdGVkIHRvIGVhY2ggcGFydGl0aW9uLgorICovCiAKLSNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxDZmcuaD4KKyNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxTYy5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2VHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaVNlcmllcy9JdExwTmFjYS5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0xwYXJEYXRhLmg+CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29uc3RhbnRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VudW0geworCUh2Q2FsbENmZ19DdXIJPSAwLAorCUh2Q2FsbENmZ19Jbml0CT0gMSwKKwlIdkNhbGxDZmdfTWF4CT0gMiwKKwlIdkNhbGxDZmdfTWluCT0gMworfTsKKworI2RlZmluZSBIdkNhbGxDZmdHZXRTeXN0ZW1QaHlzaWNhbFByb2Nlc3NvcnMJCUh2Q2FsbENmZyArICA2CisjZGVmaW5lIEh2Q2FsbENmZ0dldFBoeXNpY2FsUHJvY2Vzc29ycwkJCUh2Q2FsbENmZyArICA3CisjZGVmaW5lIEh2Q2FsbENmZ0dldE1zQ2h1bmtzCQkJCUh2Q2FsbENmZyArICA5CisjZGVmaW5lIEh2Q2FsbENmZ0dldFNoYXJlZFBvb2xJbmRleAkJCUh2Q2FsbENmZyArIDIwCisjZGVmaW5lIEh2Q2FsbENmZ0dldFNoYXJlZFByb2NVbml0cwkJCUh2Q2FsbENmZyArIDIxCisjZGVmaW5lIEh2Q2FsbENmZ0dldE51bVByb2NzSW5TaGFyZWRQb29sCQlIdkNhbGxDZmcgKyAyMgorI2RlZmluZSBIdkNhbGxDZmdHZXRWaXJ0dWFsTGFuSW5kZXhNYXAJCQlIdkNhbGxDZmcgKyAzMAorI2RlZmluZSBIdkNhbGxDZmdHZXRIb3N0aW5nTHBJbmRleAkJCUh2Q2FsbENmZyArIDMyCiAKIGV4dGVybiBIdkxwSW5kZXggSHZMcENvbmZpZ19nZXRMcEluZGV4X291dGxpbmUodm9pZCk7CiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogc3RhdGljIGlubGluZSBIdkxwSW5kZXgJSHZMcENvbmZpZ19nZXRMcEluZGV4KHZvaWQpCiB7CiAJcmV0dXJuIGl0THBOYWNhLnhMcEluZGV4OwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIHN0YXRpYyBpbmxpbmUgSHZMcEluZGV4CUh2THBDb25maWdfZ2V0UHJpbWFyeUxwSW5kZXgodm9pZCkKIHsKIAlyZXR1cm4gaXRMcE5hY2EueFByaW1hcnlMcEluZGV4OwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSBIdkxwSW5kZXgJSHZMcENvbmZpZ19nZXRMcHModm9pZCkKKworc3RhdGljIGlubGluZSB1NjQgSHZMcENvbmZpZ19nZXRNc0NodW5rcyh2b2lkKQogewotCXJldHVybiBIdkNhbGxDZmdfZ2V0THBzKCk7CisJcmV0dXJuIEh2Q2FsbDIoSHZDYWxsQ2ZnR2V0TXNDaHVua3MsIEh2THBDb25maWdfZ2V0THBJbmRleCgpLAorCQkJSHZDYWxsQ2ZnX0N1cik7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIEh2THBJbmRleE1hcAlIdkxwQ29uZmlnX2dldEFjdGl2ZUxwTWFwKHZvaWQpCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2THBDb25maWdfZ2V0U3lzdGVtUGh5c2ljYWxQcm9jZXNzb3JzKHZvaWQpCiB7Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRBY3RpdmVMcE1hcCgpOworCXJldHVybiBIdkNhbGwwKEh2Q2FsbENmZ0dldFN5c3RlbVBoeXNpY2FsUHJvY2Vzc29ycyk7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRTeXN0ZW1Nc01lZ3Modm9pZCkKKworc3RhdGljIGlubGluZSB1NjQgSHZMcENvbmZpZ19nZXROdW1Qcm9jc0luU2hhcmVkUG9vbChIdkxwU2hhcmVkUG9vbEluZGV4IHNQSSkKIHsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldFN5c3RlbU1zQ2h1bmtzKCkgLyBIVkNIVU5LU1BFUk1FRzsKKwlyZXR1cm4gKHUxNilIdkNhbGwxKEh2Q2FsbENmZ0dldE51bVByb2NzSW5TaGFyZWRQb29sLCBzUEkpOwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0U3lzdGVtTXNDaHVua3Modm9pZCkKKworc3RhdGljIGlubGluZSB1NjQgSHZMcENvbmZpZ19nZXRQaHlzaWNhbFByb2Nlc3NvcnModm9pZCkKIHsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldFN5c3RlbU1zQ2h1bmtzKCk7CisJcmV0dXJuIEh2Q2FsbDIoSHZDYWxsQ2ZnR2V0UGh5c2ljYWxQcm9jZXNzb3JzLCBIdkxwQ29uZmlnX2dldExwSW5kZXgoKSwKKwkJCUh2Q2FsbENmZ19DdXIpOwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0U3lzdGVtTXNQYWdlcyh2b2lkKQorCitzdGF0aWMgaW5saW5lIEh2THBTaGFyZWRQb29sSW5kZXggSHZMcENvbmZpZ19nZXRTaGFyZWRQb29sSW5kZXgodm9pZCkKIHsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldFN5c3RlbU1zQ2h1bmtzKCkgKiBIVlBBR0VTUEVSQ0hVTks7CisJcmV0dXJuIEh2Q2FsbDEoSHZDYWxsQ2ZnR2V0U2hhcmVkUG9vbEluZGV4LCBIdkxwQ29uZmlnX2dldExwSW5kZXgoKSk7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1zTWVncyh2b2lkKQorCitzdGF0aWMgaW5saW5lIHU2NCBIdkxwQ29uZmlnX2dldFNoYXJlZFByb2NVbml0cyh2b2lkKQogewotCXJldHVybiBIdkNhbGxDZmdfZ2V0TXNDaHVua3MoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX0N1cikgLyBIVkNIVU5LU1BFUk1FRzsKKwlyZXR1cm4gSHZDYWxsMihIdkNhbGxDZmdHZXRTaGFyZWRQcm9jVW5pdHMsIEh2THBDb25maWdfZ2V0THBJbmRleCgpLAorCQkJSHZDYWxsQ2ZnX0N1cik7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1zQ2h1bmtzKHZvaWQpCisKK3N0YXRpYyBpbmxpbmUgdTY0IEh2THBDb25maWdfZ2V0TWF4U2hhcmVkUHJvY1VuaXRzKHZvaWQpCiB7Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfQ3VyKTsKKwlyZXR1cm4gSHZDYWxsMihIdkNhbGxDZmdHZXRTaGFyZWRQcm9jVW5pdHMsIEh2THBDb25maWdfZ2V0THBJbmRleCgpLAorCQkJSHZDYWxsQ2ZnX01heCk7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1zUGFnZXModm9pZCkKKworc3RhdGljIGlubGluZSB1NjQgSHZMcENvbmZpZ19nZXRNYXhQaHlzaWNhbFByb2Nlc3NvcnModm9pZCkKIHsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19DdXIpICogSFZQQUdFU1BFUkNIVU5LOworCXJldHVybiBIdkNhbGwyKEh2Q2FsbENmZ0dldFBoeXNpY2FsUHJvY2Vzc29ycywgSHZMcENvbmZpZ19nZXRMcEluZGV4KCksCisJCQlIdkNhbGxDZmdfTWF4KTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TWluTXNNZWdzKHZvaWQpCisKK3N0YXRpYyBpbmxpbmUgSHZMcFZpcnR1YWxMYW5JbmRleE1hcCBIdkxwQ29uZmlnX2dldFZpcnR1YWxMYW5JbmRleE1hcEZvckxwKAorCQlIdkxwSW5kZXggbHApCiB7Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfTWluKSAvIEhWQ0hVTktTUEVSTUVHOworCS8qCisJICogVGhpcyBpcyBhIG5ldyBmdW5jdGlvbiBpbiBWNVIxIHNvIGNhbGxzIHRvIHRoaXMgb24gb2xkZXIKKwkgKiBoeXBlcnZpc29ycyB3aWxsIHJldHVybiAtMQorCSAqLworCXU2NCByZXRWYWwgPSBIdkNhbGwxKEh2Q2FsbENmZ0dldFZpcnR1YWxMYW5JbmRleE1hcCwgbHApOworCWlmIChyZXRWYWwgPT0gLTEpCisJCXJldFZhbCA9IDA7CisJcmV0dXJuIHJldFZhbDsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TWluTXNDaHVua3Modm9pZCkKKworc3RhdGljIGlubGluZSBIdkxwVmlydHVhbExhbkluZGV4TWFwIEh2THBDb25maWdfZ2V0VmlydHVhbExhbkluZGV4TWFwKHZvaWQpCiB7Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfTWluKTsKKwlyZXR1cm4gSHZMcENvbmZpZ19nZXRWaXJ0dWFsTGFuSW5kZXhNYXBGb3JMcCgKKwkJCUh2THBDb25maWdfZ2V0THBJbmRleF9vdXRsaW5lKCkpOwogfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNaW5Nc1BhZ2VzKHZvaWQpCisKK3N0YXRpYyBpbmxpbmUgaW50IEh2THBDb25maWdfZG9McHNDb21tdW5pY2F0ZU9uVmlydHVhbExhbihIdkxwSW5kZXggbHAxLAorCQlIdkxwSW5kZXggbHAyKQogewotCXJldHVybiBIdkNhbGxDZmdfZ2V0TXNDaHVua3MoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX01pbikgKiBIVlBBR0VTUEVSQ0hVTks7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1pblJ1bnRpbWVNc01lZ3Modm9pZCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1pblJ1bnRpbWVNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSkgLyBIVkNIVU5LU1BFUk1FRzsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNaW5SdW50aW1lTXNDaHVua3Modm9pZCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1pblJ1bnRpbWVNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSk7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TWluUnVudGltZU1zUGFnZXModm9pZCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1pblJ1bnRpbWVNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSkgKiBIVlBBR0VTUEVSQ0hVTks7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TWF4TXNNZWdzKHZvaWQpCi17Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfTWF4KSAvIEhWQ0hVTktTUEVSTUVHOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldE1heE1zQ2h1bmtzKHZvaWQpCi17Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfTWF4KTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNYXhNc1BhZ2VzKHZvaWQpCi17Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfTWF4KSAqIEhWUEFHRVNQRVJDSFVOSzsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRJbml0TXNNZWdzKHZvaWQpCi17Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRNc0NodW5rcyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfSW5pdCkgLyBIVkNIVU5LU1BFUk1FRzsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRJbml0TXNDaHVua3Modm9pZCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldE1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19Jbml0KTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRJbml0TXNQYWdlcyh2b2lkKQoteyAgICByZXR1cm4gSHZDYWxsQ2ZnX2dldE1zQ2h1bmtzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19Jbml0KSAqIEhWUEFHRVNQRVJDSFVOSzsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRTeXN0ZW1QaHlzaWNhbFByb2Nlc3NvcnModm9pZCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldFN5c3RlbVBoeXNpY2FsUHJvY2Vzc29ycygpOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldFN5c3RlbUxvZ2ljYWxQcm9jZXNzb3JzKHZvaWQpCi17Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRTeXN0ZW1QaHlzaWNhbFByb2Nlc3NvcnMoKSAqICgvKmdldFBhY2EoKS0+Z2V0U2Vjb25kYXJ5VGhyZWFkQ291bnQoKSArKi8gMSk7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TnVtUHJvY3NJblNoYXJlZFBvb2woSHZMcFNoYXJlZFBvb2xJbmRleCBzUEkpCi17Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXROdW1Qcm9jc0luU2hhcmVkUG9vbChzUEkpOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldFBoeXNpY2FsUHJvY2Vzc29ycyh2b2lkKQotewotCXJldHVybiBIdkNhbGxDZmdfZ2V0UGh5c2ljYWxQcm9jZXNzb3JzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19DdXIpOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldExvZ2ljYWxQcm9jZXNzb3JzKHZvaWQpCi17Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRQaHlzaWNhbFByb2Nlc3NvcnMoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX0N1cikgKiAoLypnZXRQYWNhKCktPmdldFNlY29uZGFyeVRocmVhZENvdW50KCkgKyovIDEpOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgSHZMcFNoYXJlZFBvb2xJbmRleAlIdkxwQ29uZmlnX2dldFNoYXJlZFBvb2xJbmRleCh2b2lkKQotewotCXJldHVybiBIdkNhbGxDZmdfZ2V0U2hhcmVkUG9vbEluZGV4KEh2THBDb25maWdfZ2V0THBJbmRleCgpKTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRTaGFyZWRQcm9jVW5pdHModm9pZCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldFNoYXJlZFByb2NVbml0cyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfQ3VyKTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNaW5TaGFyZWRQcm9jVW5pdHModm9pZCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldFNoYXJlZFByb2NVbml0cyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfTWluKTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNYXhTaGFyZWRQcm9jVW5pdHModm9pZCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldFNoYXJlZFByb2NVbml0cyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfTWF4KTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNaW5QaHlzaWNhbFByb2Nlc3NvcnModm9pZCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldFBoeXNpY2FsUHJvY2Vzc29ycyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfTWluKTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNaW5Mb2dpY2FsUHJvY2Vzc29ycyh2b2lkKQotewotCXJldHVybiBIdkNhbGxDZmdfZ2V0UGh5c2ljYWxQcm9jZXNzb3JzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19NaW4pICogKC8qZ2V0UGFjYSgpLT5nZXRTZWNvbmRhcnlUaHJlYWRDb3VudCgpICsqLyAxKTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNYXhQaHlzaWNhbFByb2Nlc3NvcnModm9pZCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldFBoeXNpY2FsUHJvY2Vzc29ycyhIdkxwQ29uZmlnX2dldExwSW5kZXgoKSxIdkNhbGxDZmdfTWF4KTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRNYXhMb2dpY2FsUHJvY2Vzc29ycyh2b2lkKQotewotCXJldHVybiBIdkNhbGxDZmdfZ2V0UGh5c2ljYWxQcm9jZXNzb3JzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19NYXgpICogKC8qZ2V0UGFjYSgpLT5nZXRTZWNvbmRhcnlUaHJlYWRDb3VudCgpICsqLyAxKTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIHU2NAkJSHZMcENvbmZpZ19nZXRJbml0UGh5c2ljYWxQcm9jZXNzb3JzKHZvaWQpCi17Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRQaHlzaWNhbFByb2Nlc3NvcnMoSHZMcENvbmZpZ19nZXRMcEluZGV4KCksSHZDYWxsQ2ZnX0luaXQpOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgdTY0CQlIdkxwQ29uZmlnX2dldEluaXRMb2dpY2FsUHJvY2Vzc29ycyh2b2lkKQotewotCXJldHVybiBIdkNhbGxDZmdfZ2V0UGh5c2ljYWxQcm9jZXNzb3JzKEh2THBDb25maWdfZ2V0THBJbmRleCgpLEh2Q2FsbENmZ19Jbml0KSAqICgvKmdldFBhY2EoKS0+Z2V0U2Vjb25kYXJ5VGhyZWFkQ291bnQoKSArKi8gMSk7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgSHZMcFZpcnR1YWxMYW5JbmRleE1hcAlIdkxwQ29uZmlnX2dldFZpcnR1YWxMYW5JbmRleE1hcCh2b2lkKQotewotCXJldHVybiBIdkNhbGxDZmdfZ2V0VmlydHVhbExhbkluZGV4TWFwKEh2THBDb25maWdfZ2V0THBJbmRleF9vdXRsaW5lKCkpOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgSHZMcFZpcnR1YWxMYW5JbmRleE1hcAlIdkxwQ29uZmlnX2dldFZpcnR1YWxMYW5JbmRleE1hcEZvckxwKEh2THBJbmRleCBscCkKLXsKLQlyZXR1cm4gSHZDYWxsQ2ZnX2dldFZpcnR1YWxMYW5JbmRleE1hcChscCk7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgSHZMcEluZGV4CUh2THBDb25maWdfZ2V0QnVzT3duZXIoSHZCdXNOdW1iZXIgYnVzTnVtYmVyKQotewotCXJldHVybiBIdkNhbGxDZmdfZ2V0QnVzT3duZXIoYnVzTnVtYmVyKTsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIGludAkJSHZMcENvbmZpZ19pc0J1c0RlZGljYXRlZChIdkJ1c051bWJlciBidXNOdW1iZXIpCi17Ci0JcmV0dXJuIEh2Q2FsbENmZ19pc0J1c0RlZGljYXRlZChidXNOdW1iZXIpOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW5saW5lIEh2THBJbmRleE1hcAlIdkxwQ29uZmlnX2dldEJ1c0FsbG9jYXRpb24oSHZCdXNOdW1iZXIgYnVzTnVtYmVyKQotewotCXJldHVybiBIdkNhbGxDZmdfZ2V0QnVzQWxsb2NhdGlvbihidXNOdW1iZXIpOwotfQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyByZXR1cm5zIHRoZSBhYnNvbHV0ZSByZWFsIGFkZHJlc3Mgb2YgdGhlIGxvYWQgYXJlYQotc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TG9hZEFkZHJlc3Modm9pZCkKLXsKLQlyZXR1cm4gaXRMcE5hY2EueExvYWRBcmVhQWRkciAmIDB4N2ZmZmZmZmZmZmZmZmZmZjsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSB1NjQJCUh2THBDb25maWdfZ2V0TG9hZFBhZ2VzKHZvaWQpCi17Ci0JcmV0dXJuIGl0THBOYWNhLnhMb2FkQXJlYUNodW5rcyAqIEhWUEFHRVNQRVJDSFVOSzsKLX0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGlubGluZSBpbnQJCUh2THBDb25maWdfaXNCdXNPd25lZEJ5VGhpc0xwKEh2QnVzTnVtYmVyIGJ1c051bWJlcikKLXsKLQlIdkxwSW5kZXggYnVzT3duZXIgPSBIdkxwQ29uZmlnX2dldEJ1c093bmVyKGJ1c051bWJlcik7Ci0JcmV0dXJuIChidXNPd25lciA9PSBIdkxwQ29uZmlnX2dldExwSW5kZXgoKSk7Ci19Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgaW50ICAgICAgICAgSHZMcENvbmZpZ19kb0xwc0NvbW11bmljYXRlT25WaXJ0dWFsTGFuKEh2THBJbmRleCBscDEsIEh2THBJbmRleCBscDIpCi17Ci0JSHZMcFZpcnR1YWxMYW5JbmRleE1hcCB2aXJ0dWFsTGFuSW5kZXhNYXAxID0gSHZDYWxsQ2ZnX2dldFZpcnR1YWxMYW5JbmRleE1hcCggbHAxICk7Ci0JSHZMcFZpcnR1YWxMYW5JbmRleE1hcCB2aXJ0dWFsTGFuSW5kZXhNYXAyID0gSHZDYWxsQ2ZnX2dldFZpcnR1YWxMYW5JbmRleE1hcCggbHAyICk7CisJSHZMcFZpcnR1YWxMYW5JbmRleE1hcCB2aXJ0dWFsTGFuSW5kZXhNYXAxID0KKwkJSHZMcENvbmZpZ19nZXRWaXJ0dWFsTGFuSW5kZXhNYXBGb3JMcChscDEpOworCUh2THBWaXJ0dWFsTGFuSW5kZXhNYXAgdmlydHVhbExhbkluZGV4TWFwMiA9CisJCUh2THBDb25maWdfZ2V0VmlydHVhbExhbkluZGV4TWFwRm9yTHAobHAyKTsKIAlyZXR1cm4gKCh2aXJ0dWFsTGFuSW5kZXhNYXAxICYgdmlydHVhbExhbkluZGV4TWFwMikgIT0gMCk7CiB9Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbmxpbmUgSHZMcEluZGV4CQlIdkxwQ29uZmlnX2dldEhvc3RpbmdMcEluZGV4KEh2THBJbmRleCBscCkKKworc3RhdGljIGlubGluZSBIdkxwSW5kZXggSHZMcENvbmZpZ19nZXRIb3N0aW5nTHBJbmRleChIdkxwSW5kZXggbHApCiB7Ci0JcmV0dXJuIEh2Q2FsbENmZ19nZXRIb3N0aW5nTHBJbmRleChscCk7CisJcmV0dXJuIEh2Q2FsbDEoSHZDYWxsQ2ZnR2V0SG9zdGluZ0xwSW5kZXgsIGxwKTsKIH0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAjZW5kaWYgLyogX0hWTFBDT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkxwRXZlbnQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZMcEV2ZW50LmgKaW5kZXggMzA5MzZlNDMuLjg2NTAwMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZMcEV2ZW50LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdkxwRXZlbnQuaApAQCAtMSwyNyArMSwyNCBAQAogLyoKICAqIEh2THBFdmVudC5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8JVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjbGFzcyBmb3IgSFYgZXZlbnRzIGluIHRoZSBzeXN0ZW0uCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY2xhc3MgZm9yIEhWIGV2ZW50cyBpbiB0aGUgc3lzdGVtLiAqLworCiAjaWZuZGVmIF9IVkxQRVZFTlRfSAogI2RlZmluZSBfSFZMUEVWRU5UX0gKIApAQCAtMzAsNjkgKzI3LDcwIEBACiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZUeXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2Q2FsbEV2ZW50Lmg+CiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gSHZMcEV2ZW50IGlzIHRoZSBzdHJ1Y3R1cmUgZm9yIExwIEV2ZW50IG1lc3NhZ2VzIHBhc3NlZCBiZXR3ZWVuCi0vLyBwYXJ0aXRpb25zIHRocm91Z2ggUExJQy4gCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qCisgKiBIdkxwRXZlbnQgaXMgdGhlIHN0cnVjdHVyZSBmb3IgTHAgRXZlbnQgbWVzc2FnZXMgcGFzc2VkIGJldHdlZW4KKyAqIHBhcnRpdGlvbnMgdGhyb3VnaCBQTElDLgorICovCiAKLXN0cnVjdCBIdkV2ZW50RmxhZ3MKLXsKLQl1OAl4VmFsaWQ6MTsJCS8vIEluZGljYXRlcyBhIHZhbGlkIHJlcXVlc3QJeDAwLXgwMAotCXU4CXhSc3ZkMTo0OwkJLy8gUmVzZXJ2ZWQJCQkuLi4KLQl1OAl4QWNrVHlwZToxOwkJLy8gSW1tZWRpYXRlIG9yIGRlZmVycmVkCS4uLgotCXU4CXhBY2tJbmQ6MTsJCS8vIEluZGljYXRlcyBpZiBBQ0sgcmVxdWlyZWQJLi4uCi0JdTgJeEZ1bmN0aW9uOjE7CQkvLyBJbnRlcnJ1cHQgb3IgQWNrbm93bGVkZ2UJLi4uCitzdHJ1Y3QgSHZFdmVudEZsYWdzIHsKKwl1OAl4VmFsaWQ6MTsJLyogSW5kaWNhdGVzIGEgdmFsaWQgcmVxdWVzdAl4MDAteDAwICovCisJdTgJeFJzdmQxOjQ7CS8qIFJlc2VydmVkCQkJLi4uICovCisJdTgJeEFja1R5cGU6MTsJLyogSW1tZWRpYXRlIG9yIGRlZmVycmVkCS4uLiAqLworCXU4CXhBY2tJbmQ6MTsJLyogSW5kaWNhdGVzIGlmIEFDSyByZXF1aXJlZAkuLi4gKi8KKwl1OAl4RnVuY3Rpb246MTsJLyogSW50ZXJydXB0IG9yIEFja25vd2xlZGdlCS4uLiAqLwogfTsKIAogCi1zdHJ1Y3QgSHZMcEV2ZW50Ci17Ci0Jc3RydWN0IEh2RXZlbnRGbGFncyB4RmxhZ3M7CS8vIEV2ZW50IGZsYWdzCQkJeDAwLXgwMAotCXU4CXhUeXBlOwkJCS8vIFR5cGUgb2YgbWVzc2FnZQkJeDAxLXgwMQotCXUxNgl4U3VidHlwZTsJCS8vIFN1YnR5cGUgZm9yIGV2ZW50CQl4MDIteDAzCi0JdTgJeFNvdXJjZUxwOwkJLy8gU291cmNlIExQCQkJeDA0LXgwNAotCXU4CXhUYXJnZXRMcDsJCS8vIFRhcmdldCBMUAkJCXgwNS14MDUKLQl1OAl4U2l6ZU1pbnVzMTsJCS8vIFNpemUgb2YgRGVyaXZlZCBjbGFzcyAtIDEJeDA2LXgwNgotCXU4CXhSYzsJCQkvLyBSQyBmb3IgQWNrIGZsb3dzCQl4MDcteDA3Ci0JdTE2CXhTb3VyY2VJbnN0YW5jZUlkOwkvLyBTb3VyY2Ugc2lkZXMgaW5zdGFuY2UgaWQJeDA4LXgwOQotCXUxNgl4VGFyZ2V0SW5zdGFuY2VJZDsJLy8gVGFyZ2V0IHNpZGVzIGluc3RhbmNlIGlkCXgwQS14MEIKK3N0cnVjdCBIdkxwRXZlbnQgeworCXN0cnVjdCBIdkV2ZW50RmxhZ3MgeEZsYWdzOwkvKiBFdmVudCBmbGFncwkJICAgICAgeDAwLXgwMCAqLworCXU4CXhUeXBlOwkJCS8qIFR5cGUgb2YgbWVzc2FnZQkgICAgICB4MDEteDAxICovCisJdTE2CXhTdWJ0eXBlOwkJLyogU3VidHlwZSBmb3IgZXZlbnQJICAgICAgeDAyLXgwMyAqLworCXU4CXhTb3VyY2VMcDsJCS8qIFNvdXJjZSBMUAkJICAgICAgeDA0LXgwNCAqLworCXU4CXhUYXJnZXRMcDsJCS8qIFRhcmdldCBMUAkJICAgICAgeDA1LXgwNSAqLworCXU4CXhTaXplTWludXMxOwkJLyogU2l6ZSBvZiBEZXJpdmVkIGNsYXNzIC0gMSAgeDA2LXgwNiAqLworCXU4CXhSYzsJCQkvKiBSQyBmb3IgQWNrIGZsb3dzCSAgICAgIHgwNy14MDcgKi8KKwl1MTYJeFNvdXJjZUluc3RhbmNlSWQ7CS8qIFNvdXJjZSBzaWRlcyBpbnN0YW5jZSBpZCAgIHgwOC14MDkgKi8KKwl1MTYJeFRhcmdldEluc3RhbmNlSWQ7CS8qIFRhcmdldCBzaWRlcyBpbnN0YW5jZSBpZCAgIHgwQS14MEIgKi8KIAl1bmlvbiB7Ci0JCXUzMgl4U3VidHlwZURhdGE7CS8vIERhdGEgdXNhYmxlIGJ5IHRoZSBzdWJ0eXBlCXgwQy14MEYKLQkJdTE2CXhTdWJ0eXBlRGF0YVNob3J0WzJdOwkvLyBEYXRhIGFzIDIgc2hvcnRzCi0JCXU4CXhTdWJ0eXBlRGF0YUNoYXJbNF07CS8vIERhdGEgYXMgNCBjaGFycworCQl1MzIJeFN1YnR5cGVEYXRhOwkvKiBEYXRhIHVzYWJsZSBieSB0aGUgc3VidHlwZSB4MEMteDBGICovCisJCXUxNgl4U3VidHlwZURhdGFTaG9ydFsyXTsJLyogRGF0YSBhcyAyIHNob3J0cyAqLworCQl1OAl4U3VidHlwZURhdGFDaGFyWzRdOwkvKiBEYXRhIGFzIDQgY2hhcnMgKi8KIAl9IHg7CiAKLQl1NjQJeENvcnJlbGF0aW9uVG9rZW47CS8vIFVuaXF1ZSB2YWx1ZSBmb3Igc291cmNlL3R5cGUgeDEwLXgxNworCXU2NAl4Q29ycmVsYXRpb25Ub2tlbjsJLyogVW5pcXVlIHZhbHVlIGZvciBzb3VyY2UvdHlwZSB4MTAteDE3ICovCiB9OwogCi0vLyBMcCBFdmVudCBoYW5kbGVyIGZ1bmN0aW9uCiB0eXBlZGVmIHZvaWQgKCpMcEV2ZW50SGFuZGxlcikoc3RydWN0IEh2THBFdmVudCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAotLy8gUmVnaXN0ZXIgYSBoYW5kbGVyIGZvciBhbiBldmVudCB0eXBlCi0vLyAgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKLWV4dGVybiBpbnQgSHZMcEV2ZW50X3JlZ2lzdGVySGFuZGxlciggSHZMcEV2ZW50X1R5cGUgZXZlbnRUeXBlLCBMcEV2ZW50SGFuZGxlciBoZGxyKTsKKy8qIFJlZ2lzdGVyIGEgaGFuZGxlciBmb3IgYW4gZXZlbnQgdHlwZSAtIHJldHVybnMgMCBvbiBzdWNjZXNzICovCitleHRlcm4gaW50IEh2THBFdmVudF9yZWdpc3RlckhhbmRsZXIoSHZMcEV2ZW50X1R5cGUgZXZlbnRUeXBlLAorCQlMcEV2ZW50SGFuZGxlciBoZGxyKTsKIAotLy8gVW5yZWdpc3RlciBhIGhhbmRsZXIgZm9yIGFuIGV2ZW50IHR5cGUKLS8vICBUaGlzIGNhbGwgd2lsbCBzbGVlcCB1bnRpbCB0aGUgaGFuZGxlciBiZWluZyByZW1vdmVkIGlzIGd1YXJhbnRlZWQgdG8KLS8vICBiZSBubyBsb25nZXIgZXhlY3V0aW5nIG9uIGFueSBDUFUuIERvIG5vdCBjYWxsIHdpdGggbG9ja3MgaGVsZC4KLS8vCi0vLyAgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKLS8vICBVbnJlZ2lzdGVyIHdpbGwgZmFpbCBpZiB0aGVyZSBhcmUgYW55IHBhdGhzIG9wZW4gZm9yIHRoZSB0eXBlCi1leHRlcm4gaW50IEh2THBFdmVudF91bnJlZ2lzdGVySGFuZGxlciggSHZMcEV2ZW50X1R5cGUgZXZlbnRUeXBlICk7CisvKgorICogVW5yZWdpc3RlciBhIGhhbmRsZXIgZm9yIGFuIGV2ZW50IHR5cGUKKyAqCisgKiBUaGlzIGNhbGwgd2lsbCBzbGVlcCB1bnRpbCB0aGUgaGFuZGxlciBiZWluZyByZW1vdmVkIGlzIGd1YXJhbnRlZWQgdG8KKyAqIGJlIG5vIGxvbmdlciBleGVjdXRpbmcgb24gYW55IENQVS4gRG8gbm90IGNhbGwgd2l0aCBsb2NrcyBoZWxkLgorICoKKyAqICByZXR1cm5zIDAgb24gc3VjY2VzcworICogIFVucmVnaXN0ZXIgd2lsbCBmYWlsIGlmIHRoZXJlIGFyZSBhbnkgcGF0aHMgb3BlbiBmb3IgdGhlIHR5cGUKKyAqLworZXh0ZXJuIGludCBIdkxwRXZlbnRfdW5yZWdpc3RlckhhbmRsZXIoSHZMcEV2ZW50X1R5cGUgZXZlbnRUeXBlKTsKIAotLy8gT3BlbiBhbiBMcCBFdmVudCBQYXRoIGZvciBhbiBldmVudCB0eXBlCi0vLyAgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKLS8vICBvcGVuUGF0aCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgbm8gaGFuZGxlciByZWdpc3RlcmVkIGZvciB0aGUgZXZlbnQgdHlwZS4KLS8vICBUaGUgbHBJbmRleCBzcGVjaWZpZWQgaXMgdGhlIHBhcnRpdGlvbiBpbmRleCBmb3IgdGhlIHRhcmdldCBwYXJ0aXRpb24KLS8vICAoZm9yIFZpcnR1YWxJbywgVmlydHVhbExhbiBhbmQgU2Vzc2lvbk1ncikgb3RoZXIgdHlwZXMgc3BlY2lmeSB6ZXJvKSAKLWV4dGVybiBpbnQgSHZMcEV2ZW50X29wZW5QYXRoKCBIdkxwRXZlbnRfVHlwZSBldmVudFR5cGUsIEh2THBJbmRleCBscEluZGV4ICk7CisvKgorICogT3BlbiBhbiBMcCBFdmVudCBQYXRoIGZvciBhbiBldmVudCB0eXBlCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcworICogb3BlblBhdGggd2lsbCBmYWlsIGlmIHRoZXJlIGlzIG5vIGhhbmRsZXIgcmVnaXN0ZXJlZCBmb3IgdGhlIGV2ZW50IHR5cGUuCisgKiBUaGUgbHBJbmRleCBzcGVjaWZpZWQgaXMgdGhlIHBhcnRpdGlvbiBpbmRleCBmb3IgdGhlIHRhcmdldCBwYXJ0aXRpb24KKyAqIChmb3IgVmlydHVhbElvLCBWaXJ0dWFsTGFuIGFuZCBTZXNzaW9uTWdyKSBvdGhlciB0eXBlcyBzcGVjaWZ5IHplcm8pCisgKi8KK2V4dGVybiBpbnQgSHZMcEV2ZW50X29wZW5QYXRoKEh2THBFdmVudF9UeXBlIGV2ZW50VHlwZSwgSHZMcEluZGV4IGxwSW5kZXgpOwogCi0KLS8vIENsb3NlIGFuIExwIEV2ZW50IFBhdGggZm9yIGEgdHlwZSBhbmQgcGFydGl0aW9uCi0vLyAgcmV0dXJucyAwIG9uIHN1Y2VzcwotZXh0ZXJuIGludCBIdkxwRXZlbnRfY2xvc2VQYXRoKCBIdkxwRXZlbnRfVHlwZSBldmVudFR5cGUsIEh2THBJbmRleCBscEluZGV4ICk7CisvKgorICogQ2xvc2UgYW4gTHAgRXZlbnQgUGF0aCBmb3IgYSB0eXBlIGFuZCBwYXJ0aXRpb24KKyAqIHJldHVybnMgMCBvbiBzdWNlc3MKKyAqLworZXh0ZXJuIGludCBIdkxwRXZlbnRfY2xvc2VQYXRoKEh2THBFdmVudF9UeXBlIGV2ZW50VHlwZSwgSHZMcEluZGV4IGxwSW5kZXgpOwogCiAjZGVmaW5lIEh2THBFdmVudF9UeXBlX0h5cGVydmlzb3IgMAogI2RlZmluZSBIdkxwRXZlbnRfVHlwZV9NYWNoaW5lRmFjIDEKQEAgLTE0MSw0ICsxMzksNCBAQAogI2RlZmluZSBIdkxwRG1hX1JjX0ludmFsaWRBZGRyZXNzIDQKICNkZWZpbmUgSHZMcERtYV9SY19JbnZhbGlkTGVuZ3RoIDUKIAotI2VuZGlmIC8vIF9IVkxQRVZFTlRfSAorI2VuZGlmIC8qIF9IVkxQRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9IdlJlbGVhc2VEYXRhLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2UmVsZWFzZURhdGEuaAppbmRleCAxODNlNWU3Li4wMWExZjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2UmVsZWFzZURhdGEuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2UmVsZWFzZURhdGEuaApAQCAtMSwxNyArMSwxNyBAQAogLyoKICAqIEh2UmVsZWFzZURhdGEuaAogICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQpAQCAtMTksNDcgKzE5LDQ1IEBACiAjaWZuZGVmIF9IVlJFTEVBU0VEQVRBX0gKICNkZWZpbmUgX0hWUkVMRUFTRURBVEFfSAogCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gICBUaGlzIGNvbnRyb2wgYmxvY2sgY29udGFpbnMgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uIGFib3V0IHRoZSAKLS8vICAgcmVsZWFzZSBzbyB0aGF0IGl0IGNhbiBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUgKGllLCB0aGUgdmlydHVhbCAKLS8vICAgYWRkcmVzcyBvZiB0aGUgT1MncyBOQUNBKS4KLS8vCisvKgorICogVGhpcyBjb250cm9sIGJsb2NrIGNvbnRhaW5zIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIHJlbGVhc2Ugc28gdGhhdCBpdCBjYW4gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIChpZSwgdGhlIHZpcnR1YWwKKyAqIGFkZHJlc3Mgb2YgdGhlIE9TJ3MgTkFDQSkuCisgKi8KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbmFjYS5oPgogCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8JV2hlbiB3ZSBJUEwgYSBzZWNvbmRhcnkgcGFydGl0aW9uLCB3ZSB3aWxsIGNoZWNrIGlmIGlmIHRoZSAKLS8vCXNlY29uZGFyeSB4TWluUGxpY1ZybUluZGV4ID4gdGhlIHByaW1hcnkgeFZybUluZGV4LiAgCi0vLwlJZiBpdCBpcyB0aGVuIHRoaXMgdGVsbHMgUExJQyB0aGF0IHRoaXMgc2Vjb25kYXJ5IGlzIG5vdCAKLS8vCXN1cHBvcnRlZCBydW5uaW5nIG9uIHRoaXMgIm9sZCIgb2YgYSBsZXZlbCBvZiBQTElDLgotLy8KLS8vCUxpa2V3aXNlLCB3ZSB3aWxsIGNvbXBhcmUgdGhlIHByaW1hcnkgeE1pblNsaWNWcm1JbmRleCB0byAKLS8vCXRoZSBzZWNvbmRhcnkgeFZybUluZGV4LiAKLS8vCUlmIHRoZSBwcmltYXJ5IHhNaW5TbGljVnJtRGVsdGEgPiBzZWNvbmRhcnkgeFZybURlbHRhIHRoZW4gd2UgCi0vLwlrbm93IHRoYXQgdGhpcyBQTElDIGRvZXMgbm90IHN1cHBvcnQgcnVubmluZyBhbiBPUyAidGhhdCBvbGQiLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qCisgKiBXaGVuIHdlIElQTCBhIHNlY29uZGFyeSBwYXJ0aXRpb24sIHdlIHdpbGwgY2hlY2sgaWYgaWYgdGhlCisgKiBzZWNvbmRhcnkgeE1pblBsaWNWcm1JbmRleCA+IHRoZSBwcmltYXJ5IHhWcm1JbmRleC4KKyAqIElmIGl0IGlzIHRoZW4gdGhpcyB0ZWxscyBQTElDIHRoYXQgdGhpcyBzZWNvbmRhcnkgaXMgbm90CisgKiBzdXBwb3J0ZWQgcnVubmluZyBvbiB0aGlzICJvbGQiIG9mIGEgbGV2ZWwgb2YgUExJQy4KKyAqCisgKiBMaWtld2lzZSwgd2Ugd2lsbCBjb21wYXJlIHRoZSBwcmltYXJ5IHhNaW5TbGljVnJtSW5kZXggdG8KKyAqIHRoZSBzZWNvbmRhcnkgeFZybUluZGV4LgorICogSWYgdGhlIHByaW1hcnkgeE1pblNsaWNWcm1EZWx0YSA+IHNlY29uZGFyeSB4VnJtRGVsdGEgdGhlbiB3ZQorICoga25vdyB0aGF0IHRoaXMgUExJQyBkb2VzIG5vdCBzdXBwb3J0IHJ1bm5pbmcgYW4gT1MgInRoYXQgb2xkIi4KKyAqLwogCi1zdHJ1Y3QJSHZSZWxlYXNlRGF0YQotewotCXUzMgl4RGVzYzsJCQkvLyBEZXNjcmlwdG9yCSJIdlJEIiBlYmNkaWMJeDAwLXgwMwotCXUxNgl4U2l6ZTsJCQkvLyBTaXplIG9mIHRoaXMgY29udHJvbCBibG9jawl4MDQteDA1Ci0JdTE2CXhWcGRBcmVhc1B0ck9mZnNldDsJLy8gT2Zmc2V0IGluIE5BQ0Egb2YgSXRWcGRBcmVhcwl4MDYteDA3Ci0Jc3RydWN0ICBuYWNhX3N0cnVjdCAqIHhTbGljTmFjYUFkZHI7IC8vIFZpcnQgYWRkciBvZiBTTElDIE5BQ0EgIHgwOC14MEYKLQl1MzIJeE1zTnVjRGF0YU9mZnNldDsJLy8gT2Zmc2V0IG9mIExpbnV4IE1hcHBpbmcgRGF0YSB4MTAteDEzCi0JdTMyCXhSc3ZkMTsJCQkvLyBSZXNlcnZlZAkJCXgxNC14MTcKLQl1MTYJeFRhZ3NNb2RlOjE7CQkvLyAwID09IHRhZ3MgYWN0aXZlLCAxID09IHRhZ3MgaW5hY3RpdmUKLQl1MTYJeEFkZHJlc3NTaXplOjE7CQkvLyAwID09IDY0LWJpdCwgMSA9PSAzMi1iaXQKLQl1MTYJeE5vU2hhcmVkUHJvY3M6MTsJLy8gMCA9PSBzaGFyZWQgcHJvY3MsIDEgPT0gbm8gc2hhcmVkCi0JdTE2CXhOb0hNVDoxOwkJLy8gMCA9PSBhbGxvdyBITVQsIDEgPT0gbm8gSE1UCi0JdTE2CXhSc3ZkMjoxMjsJCS8vIFJlc2VydmVkCQkJeDE4LXgxOQotCXUxNgl4VnJtSW5kZXg7CQkvLyBWUk0gSW5kZXggb2YgT1MgaW1hZ2UJeDFBLXgxQgotCXUxNgl4TWluU3VwcG9ydGVkUGxpY1ZybUluZGV4Oy8vIE1pbiBQTElDIGxldmVsICAoc29mdCkJeDFDLXgxRAotCXUxNgl4TWluQ29tcGF0YWJsZVBsaWNWcm1JbmRleDsvLyBNaW4gUExJQyBsZXZlbFAgKGhhcmQpCXgxRS14MUYKLQljaGFyCXhWcm1OYW1lWzEyXTsJCS8vIERpc3BsYXlhYmxlIG5hbWUgIAkJeDIwLXgyQgotCWNoYXIJeFJzdmQzWzIwXTsJCS8vIFJlc2VydmVkCQkJeDJDLXgzRgorc3RydWN0IEh2UmVsZWFzZURhdGEgeworCXUzMgl4RGVzYzsJCS8qIERlc2NyaXB0b3IgIkh2UkQiIGViY2RpYwl4MDAteDAzICovCisJdTE2CXhTaXplOwkJLyogU2l6ZSBvZiB0aGlzIGNvbnRyb2wgYmxvY2sJeDA0LXgwNSAqLworCXUxNgl4VnBkQXJlYXNQdHJPZmZzZXQ7IC8qIE9mZnNldCBpbiBOQUNBIG9mIEl0VnBkQXJlYXMgeDA2LXgwNyAqLworCXN0cnVjdCAgbmFjYV9zdHJ1Y3QJKnhTbGljTmFjYUFkZHI7IC8qIFZpcnQgYWRkciBvZiBTTElDIE5BQ0EgeDA4LXgwRiAqLworCXUzMgl4TXNOdWNEYXRhT2Zmc2V0OyAvKiBPZmZzZXQgb2YgTGludXggTWFwcGluZyBEYXRhIHgxMC14MTMgKi8KKwl1MzIJeFJzdmQxOwkJLyogUmVzZXJ2ZWQJCQl4MTQteDE3ICovCisJdTE2CXhUYWdzTW9kZToxOwkvKiAwID09IHRhZ3MgYWN0aXZlLCAxID09IHRhZ3MgaW5hY3RpdmUgKi8KKwl1MTYJeEFkZHJlc3NTaXplOjE7CS8qIDAgPT0gNjQtYml0LCAxID09IDMyLWJpdCAqLworCXUxNgl4Tm9TaGFyZWRQcm9jczoxOyAvKiAwID09IHNoYXJlZCBwcm9jcywgMSA9PSBubyBzaGFyZWQgKi8KKwl1MTYJeE5vSE1UOjE7CS8qIDAgPT0gYWxsb3cgSE1ULCAxID09IG5vIEhNVCAqLworCXUxNgl4UnN2ZDI6MTI7CS8qIFJlc2VydmVkCQkJeDE4LXgxOSAqLworCXUxNgl4VnJtSW5kZXg7CS8qIFZSTSBJbmRleCBvZiBPUyBpbWFnZQl4MUEteDFCICovCisJdTE2CXhNaW5TdXBwb3J0ZWRQbGljVnJtSW5kZXg7IC8qIE1pbiBQTElDIGxldmVsICAoc29mdCkgeDFDLXgxRCAqLworCXUxNgl4TWluQ29tcGF0YWJsZVBsaWNWcm1JbmRleDsgLyogTWluIFBMSUMgbGV2ZWxQIChoYXJkKSB4MUUteDFGICovCisJY2hhcgl4VnJtTmFtZVsxMl07CS8qIERpc3BsYXlhYmxlIG5hbWUJCXgyMC14MkIgKi8KKwljaGFyCXhSc3ZkM1syMF07CS8qIFJlc2VydmVkCQkJeDJDLXgzRiAqLwogfTsKIAorZXh0ZXJuIHN0cnVjdCBIdlJlbGVhc2VEYXRhCWh2UmVsZWFzZURhdGE7CisKICNlbmRpZiAvKiBfSFZSRUxFQVNFREFUQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0h2VHlwZXMuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZUeXBlcy5oCmluZGV4IDNlYzQ5YzEuLmIxZWYyYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZUeXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSHZUeXBlcy5oCkBAIC0xLDE3ICsxLDE3IEBACiAvKgogICogSHZUeXBlcy5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCkBAIC0xOSw3NCArMTksNjAgQEAKICNpZm5kZWYgX0hWVFlQRVNfSAogI2RlZmluZSBfSFZUWVBFU19ICiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWFkZXIgRmlsZSBJZAotLy8gTmFtZV9fX19fX19fX19fX19fOiAgSHZUeXBlcy5ICi0vLwotLy8gRGVzY3JpcHRpb25fX19fX19fOgotLy8KLS8vCUdlbmVyYWwgdHlwZWRlZnMgZm9yIHRoZSBoeXBlcnZpc29yLgotLy8KLS8vIERlY2xhcmVkIENsYXNzKGVzKToKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyoKKyAqIEdlbmVyYWwgdHlwZWRlZnMgZm9yIHRoZSBoeXBlcnZpc29yLgorICovCiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUeXBlZGVmcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0eXBlZGVmIHU4CUh2THBJbmRleDsKIHR5cGVkZWYgdTE2CUh2THBJbnN0YW5jZUlkOwotdHlwZWRlZiB1NjQgICAgIEh2THBUT0Q7Ci10eXBlZGVmIHU2NCAgICAgSHZMcFN5c3RlbVNlcmlhbE51bTsKLXR5cGVkZWYgdTggICAgICBIdkxwRGV2aWNlU2VyaWFsTnVtWzEyXTsKLXR5cGVkZWYgdTE2ICAgICBIdkxwU2FuSHdTZXQ7Ci10eXBlZGVmIHUxNiAgICAgSHZMcEJ1czsKLXR5cGVkZWYgdTE2ICAgICBIdkxwQm9hcmQ7Ci10eXBlZGVmIHUxNiAgICAgSHZMcENhcmQ7Ci10eXBlZGVmIHU4ICAgICAgSHZMcERldmljZVR5cGVbNF07Ci10eXBlZGVmIHU4ICAgICAgSHZMcERldmljZU1vZGVsWzNdOwotdHlwZWRlZiB1NjQgICAgIEh2SW9Ub2tlbjsKLXR5cGVkZWYgdTggICAgICBIdkxwTmFtZVs4XTsKK3R5cGVkZWYgdTY0CUh2THBUT0Q7Cit0eXBlZGVmIHU2NAlIdkxwU3lzdGVtU2VyaWFsTnVtOwordHlwZWRlZiB1OAlIdkxwRGV2aWNlU2VyaWFsTnVtWzEyXTsKK3R5cGVkZWYgdTE2CUh2THBTYW5Id1NldDsKK3R5cGVkZWYgdTE2CUh2THBCdXM7Cit0eXBlZGVmIHUxNglIdkxwQm9hcmQ7Cit0eXBlZGVmIHUxNglIdkxwQ2FyZDsKK3R5cGVkZWYgdTgJSHZMcERldmljZVR5cGVbNF07Cit0eXBlZGVmIHU4CUh2THBEZXZpY2VNb2RlbFszXTsKK3R5cGVkZWYgdTY0CUh2SW9Ub2tlbjsKK3R5cGVkZWYgdTgJSHZMcE5hbWVbOF07CiB0eXBlZGVmIHUzMglIdklvSWQ7CiB0eXBlZGVmIHU2NAlIdlJlYWxNZW1vcnlJbmRleDsKLXR5cGVkZWYgdTMyICAgICBIdkxwSW5kZXhNYXA7CQkvLyBNdXN0IGhvbGQgSHZNYXhBcmNoaXRlY3RlZExwcyBiaXRzISEhCit0eXBlZGVmIHUzMglIdkxwSW5kZXhNYXA7CS8qIE11c3QgaG9sZCBIVk1BWEFSQ0hJVEVDVEVETFBTIGJpdHMhISEgKi8KIHR5cGVkZWYgdTE2CUh2THBWcm1JbmRleDsKIHR5cGVkZWYgdTMyCUh2WG1HZW5lcmF0aW9uSWQ7Ci10eXBlZGVmIHU4CUh2THBCdXNQb29sOwkJCQotdHlwZWRlZiB1OAlIdkxwU2hhcmVkUG9vbEluZGV4OwkJCit0eXBlZGVmIHU4CUh2THBCdXNQb29sOwordHlwZWRlZiB1OAlIdkxwU2hhcmVkUG9vbEluZGV4OwogdHlwZWRlZiB1MTYJSHZMcFNoYXJlZFByb2NVbml0c1gxMDA7CiB0eXBlZGVmIHU4CUh2THBWaXJ0dWFsTGFuSW5kZXg7Ci10eXBlZGVmIHUxNglIdkxwVmlydHVhbExhbkluZGV4TWFwOwkvLyBNdXN0IGhvbGQgSHZNYXhBcmNoaXRlY3RlZFZpcnR1YWxMYW5zIGJpdHMhISEKLXR5cGVkZWYgdTE2CUh2QnVzTnVtYmVyOwkJLy8gSHlwZXJ2aXNvciBCdXMgTnVtYmVyCi10eXBlZGVmIHU4CUh2U3ViQnVzTnVtYmVyOwkJLy8gSHlwZXJ2aXNvciBTdWJCdXMgTnVtYmVyCi10eXBlZGVmIHU4CUh2QWdlbnRJZDsJCS8vIEh5cGVydmlzb3IgRGV2Rm4KK3R5cGVkZWYgdTE2CUh2THBWaXJ0dWFsTGFuSW5kZXhNYXA7CS8qIE11c3QgaG9sZCBIVk1BWEFSQ0hJVEVDVEVEVklSVFVBTExBTlMgYml0cyEhISAqLwordHlwZWRlZiB1MTYJSHZCdXNOdW1iZXI7CS8qIEh5cGVydmlzb3IgQnVzIE51bWJlciAqLwordHlwZWRlZiB1OAlIdlN1YkJ1c051bWJlcjsJLyogSHlwZXJ2aXNvciBTdWJCdXMgTnVtYmVyICovCit0eXBlZGVmIHU4CUh2QWdlbnRJZDsJLyogSHlwZXJ2aXNvciBEZXZGbiAqLwogCiAKLSNkZWZpbmUgSFZNQVhBUkNISVRFQ1RFRExQUyAzMgotI2RlZmluZSBIVk1BWEFSQ0hJVEVDVEVEVklSVFVBTExBTlMgMTYKLSNkZWZpbmUgSFZNQVhBUkNISVRFQ1RFRFZJUlRVQUxESVNLUyAzMgotI2RlZmluZSBIVk1BWEFSQ0hJVEVDVEVEVklSVFVBTENEUk9NUyA4Ci0jZGVmaW5lIEhWTUFYQVJDSElURUNURURWSVJUVUFMVEFQRVMgOAotI2RlZmluZSBIVkNIVU5LU0laRSAyNTYgKiAxMDI0Ci0jZGVmaW5lIEhWUEFHRVNJWkUgNCAqIDEwMjQKLSNkZWZpbmUgSFZMUE1JTk1FR1NQUklNQVJZIDI1NgotI2RlZmluZSBIVkxQTUlOTUVHU1NFQ09OREFSWSA2NAotI2RlZmluZSBIVkNIVU5LU1BFUk1FRyA0Ci0jZGVmaW5lIEhWUEFHRVNQRVJNRUcgMjU2Ci0jZGVmaW5lIEhWUEFHRVNQRVJDSFVOSyA2NAotIAotI2RlZmluZSBIdk1heEFyY2hpdGVjdGVkTHBzIAkJKChIdkxwSW5kZXgpSFZNQVhBUkNISVRFQ1RFRExQUykKLSNkZWZpbmUgSHZNYXhBcmNoaXRlY3RlZFZpcnR1YWxMYW5zCSgoSHZMcFZpcnR1YWxMYW5JbmRleCkxNikKKyNkZWZpbmUgSFZNQVhBUkNISVRFQ1RFRExQUwkJMzIKKyNkZWZpbmUgSFZNQVhBUkNISVRFQ1RFRFZJUlRVQUxMQU5TCTE2CisjZGVmaW5lIEhWTUFYQVJDSElURUNURURWSVJUVUFMRElTS1MJMzIKKyNkZWZpbmUgSFZNQVhBUkNISVRFQ1RFRFZJUlRVQUxDRFJPTVMJOAorI2RlZmluZSBIVk1BWEFSQ0hJVEVDVEVEVklSVFVBTFRBUEVTCTgKKyNkZWZpbmUgSFZDSFVOS1NJWkUJCQkoMjU2ICogMTAyNCkKKyNkZWZpbmUgSFZQQUdFU0laRQkJCSg0ICogMTAyNCkKKyNkZWZpbmUgSFZMUE1JTk1FR1NQUklNQVJZCQkyNTYKKyNkZWZpbmUgSFZMUE1JTk1FR1NTRUNPTkRBUlkJCTY0CisjZGVmaW5lIEhWQ0hVTktTUEVSTUVHCQkJNAorI2RlZmluZSBIVlBBR0VTUEVSTUVHCQkJMjU2CisjZGVmaW5lIEhWUEFHRVNQRVJDSFVOSwkJCTY0CisKICNkZWZpbmUgSHZMcEluZGV4SW52YWxpZAkJKChIdkxwSW5kZXgpMHhmZikKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRW51bXMgZm9yIHRoZSBzdWItY29tcG9uZW50cyB1bmRlciBQTElDCi0vLyBVc2VkIGluIEh2Q2FsbCAgYW5kIEh2UHJpbWFyeUNhbGwKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVudW0gICBIdkNhbGxDb21wSWRzCi17CisvKgorICogRW51bXMgZm9yIHRoZSBzdWItY29tcG9uZW50cyB1bmRlciBQTElDCisgKiBVc2VkIGluIEh2Q2FsbCAgYW5kIEh2UHJpbWFyeUNhbGwKKyAqLworZW51bSB7CiAJSHZDYWxsQ29tcElkID0gMCwKIAlIdkNhbGxDcHVDdGxzQ29tcElkID0gMSwKIAlIdkNhbGxDZmdDb21wSWQgPSAyLApAQCAtOTcsMTggKzgzLDE4IEBACiAJSHZDYWxsU21Db21wSWQgPSA3LAogCUh2Q2FsbFNwZENvbXBJZCA9IDgsCiAJSHZDYWxsWG1Db21wSWQgPSA5LAotCUh2Q2FsbFJpb0NvbXBJZCA9IDEwLCAKKwlIdkNhbGxSaW9Db21wSWQgPSAxMCwKIAlIdkNhbGxSc3ZkM0NvbXBJZCA9IDExLAogCUh2Q2FsbFJzdmQyQ29tcElkID0gMTIsCiAJSHZDYWxsUnN2ZDFDb21wSWQgPSAxMywKIAlIdkNhbGxNYXhDb21wSWQgPSAxNCwKLQlIdlByaW1hcnlDYWxsQ29tcElkID0gMCwgICAgCisJSHZQcmltYXJ5Q2FsbENvbXBJZCA9IDAsCiAJSHZQcmltYXJ5Q2FsbENmZ0NvbXBJZCA9IDEsCi0JSHZQcmltYXJ5Q2FsbFBjaUNvbXBJZCA9IDIsICAgIAorCUh2UHJpbWFyeUNhbGxQY2lDb21wSWQgPSAyLAogCUh2UHJpbWFyeUNhbGxTbUNvbXBJZCA9IDMsCiAJSHZQcmltYXJ5Q2FsbFNwZENvbXBJZCA9IDQsCiAJSHZQcmltYXJ5Q2FsbFhtQ29tcElkID0gNSwKLQlIdlByaW1hcnlDYWxsUmlvQ29tcElkID0gNiwgCisJSHZQcmltYXJ5Q2FsbFJpb0NvbXBJZCA9IDYsCiAJSHZQcmltYXJ5Q2FsbFJzdmQ3Q29tcElkID0gNywKIAlIdlByaW1hcnlDYWxsUnN2ZDZDb21wSWQgPSA4LAogCUh2UHJpbWFyeUNhbGxSc3ZkNUNvbXBJZCA9IDksCkBAIC0xMTYsNyArMTAyLDcgQEAKIAlIdlByaW1hcnlDYWxsUnN2ZDNDb21wSWQgPSAxMSwKIAlIdlByaW1hcnlDYWxsUnN2ZDJDb21wSWQgPSAxMiwKIAlIdlByaW1hcnlDYWxsUnN2ZDFDb21wSWQgPSAxMywKLQlIdlByaW1hcnlDYWxsTWF4Q29tcElkID0gSHZDYWxsTWF4Q29tcElkICAgICAKKwlIdlByaW1hcnlDYWxsTWF4Q29tcElkID0gSHZDYWxsTWF4Q29tcElkCiB9OwogCiBzdHJ1Y3QgSHZMcEJ1ZmZlckxpc3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9Jb0hyaU1haW5TdG9yZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9Jb0hyaU1haW5TdG9yZS5oCmluZGV4IGZmMDBlODYuLjQ1ZWQzZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSW9IcmlNYWluU3RvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0lvSHJpTWFpblN0b3JlLmgKQEAgLTEsMTcgKzEsMTcgQEAKIC8qCiAgKiBJb0hyaU1haW5TdG9yZS5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIF9JT0hSSU1BSU5TVE9SRV9ICiAKIC8qIE1haW4gU3RvcmUgVnBkIGZvciBDb25kb3IsaVN0YXIsc1N0YXIgKi8KLXN0cnVjdCBJb0hyaU1haW5TdG9yZVNlZ21lbnQ0IHsgICAgCitzdHJ1Y3QgSW9IcmlNYWluU3RvcmVTZWdtZW50NCB7CiAJdTgJbXNBcmVhMEV4aXN0czoxOwogCXU4CW1zQXJlYTFFeGlzdHM6MTsKIAl1OAltc0FyZWEyRXhpc3RzOjE7CkBAIC01MSw3ICs1MSw3IEBACiAJdTgJbXNBcmVhMUhhc1Jpc2VyVnBkOjE7CiAJdTgJbXNBcmVhMkhhc1Jpc2VyVnBkOjE7CiAJdTgJbXNBcmVhM0hhc1Jpc2VyVnBkOjE7Ci0JdTgJcmVzZXJ2ZWQ1OjQ7CQorCXU4CXJlc2VydmVkNTo0OwogCXU4CXJlc2VydmVkNjsKIAl1MTYJcmVzZXJ2ZWQ3OwogCkBAIC04Miw4ICs4Miw4IEBACiB9OwogCiBzdHJ1Y3QgSW9IcmlNYWluU3RvcmVBZHJSYW5nZUJsb2NrIHsKLQl2b2lkICoJYmxvY2tTdGFydCAgICAgIF9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQl2b2lkICoJYmxvY2tFbmQgICAgICAgIF9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl2b2lkCSpibG9ja1N0YXJ0ICAgICAgX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXZvaWQJKmJsb2NrRW5kICAgICAgICBfX2F0dHJpYnV0ZSgocGFja2VkKSk7CiAJdTMyCWJsb2NrUHJvY0NoaXBJZCBfX2F0dHJpYnV0ZSgocGFja2VkKSk7CiB9OwogCkBAIC0xMDIsNyArMTAyLDcgQEAKIAl1MzIJcHJvY05vZGVJZAkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKIAogCXUzMgludW1BZHJSYW5nZUJsb2NrcwkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwotCXN0cnVjdCBJb0hyaU1haW5TdG9yZUFkclJhbmdlQmxvY2sgeEFkclJhbmdlQmxvY2tbTWF4QXJlYUFkclJhbmdlQmxvY2tzXSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJc3RydWN0IElvSHJpTWFpblN0b3JlQWRyUmFuZ2VCbG9jayB4QWRyUmFuZ2VCbG9ja1tNYXhBcmVhQWRyUmFuZ2VCbG9ja3NdCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKIAogCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzAJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwogCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzEJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwpAQCAtMTEzLDE3ICsxMTMsMTcgQEAKIAlzdHJ1Y3QgSW9IcmlNYWluU3RvcmVDaGlwSW5mbzEJY2hpcEluZm82CV9fYXR0cmlidXRlKChwYWNrZWQpKTsKIAlzdHJ1Y3QgSW9IcmlNYWluU3RvcmVDaGlwSW5mbzEJY2hpcEluZm83CV9fYXR0cmlidXRlKChwYWNrZWQpKTsKIAotCXZvaWQgKiAgIG1zUmFtQXJlYUFycmF5CQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXZvaWQJKm1zUmFtQXJlYUFycmF5CQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwogCXUzMgltc1JhbUFyZWFBcnJheU51bUVudHJpZXMJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwogCXUzMgltc1JhbUFyZWFBcnJheUVudHJ5U2l6ZQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwogCiAJdTMyCW51bWFEaW1tRXhpc3RzCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwogCXUzMgludW1hRGltbUZ1bmN0aW9uYWwJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQl2b2lkICoJbnVtYURpbW1BcnJheQkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl2b2lkCSpudW1hRGltbUFycmF5CQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwogCXUzMgludW1hRGltbUFycmF5TnVtRW50cmllcwkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwogCXUzMgludW1hRGltbUFycmF5RW50cnlTaXplCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CiAKLQlzdHJ1Y3QgSW9IcmlNYWluU3RvcmVWcGRJZERhdGEgIGlkRGF0YQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJc3RydWN0IElvSHJpTWFpblN0b3JlVnBkSWREYXRhIGlkRGF0YQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CiAKIAl1NjQJcG93ZXJEYXRhCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwogCXU2NAljYXJkQXNzZW1ibHlQYXJ0TnVtCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CkBAIC0xNDMsNyArMTQzLDcgQEAKIH07CiAKIAotc3RydWN0IElvSHJpTWFpblN0b3JlU2VnbWVudDUgeyAgICAKK3N0cnVjdCBJb0hyaU1haW5TdG9yZVNlZ21lbnQ1IHsKIAl1MTYJcmVzZXJ2ZWQxOwogCXU4CXJlc2VydmVkMjsKIAl1OAltc1ZwZEZvcm1hdDsKQEAgLTE1MSwxNyArMTUxLDE2IEBACiAJdTMyCXRvdGFsTWFpblN0b3JlOwogCXU2NAltYXhDb25maWd1cmVkTXNBZHI7CiAKLQlzdHJ1Y3QgSW9IcmlNYWluU3RvcmVBcmVhNCoJbXNBcmVhQXJyYXk7CisJc3RydWN0IElvSHJpTWFpblN0b3JlQXJlYTQJKm1zQXJlYUFycmF5OwogCXUzMgltc0FyZWFBcnJheU51bUVudHJpZXM7CiAJdTMyCW1zQXJlYUFycmF5RW50cnlTaXplOwogCi0JdTMyCW1zQXJlYUV4aXN0czsgICAgCisJdTMyCW1zQXJlYUV4aXN0czsKIAl1MzIJbXNBcmVhRnVuY3Rpb25hbDsKIAogCXU2NAlyZXNlcnZlZDM7CiB9OwogCitleHRlcm4gdTY0CXhNc1ZwZFtdOwogCi0KLSNlbmRpZiAvLyBfSU9IUklNQUlOU1RPUkVfSAotCisjZW5kaWYJLyogX0lPSFJJTUFJTlNUT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSW9IcmlQcm9jZXNzb3JWcGQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSW9IcmlQcm9jZXNzb3JWcGQuaAppbmRleCA5NjU0MzM4Li43M2I3M2Q4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0lvSHJpUHJvY2Vzc29yVnBkLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9Jb0hyaVByb2Nlc3NvclZwZC5oCkBAIC0xLDE3ICsxLDE3IEBACiAvKgogICogSW9IcmlQcm9jZXNzb3JWcGQuaAogICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQpAQCAtMTksMTYgKzE5LDEyIEBACiAjaWZuZGVmIF9JT0hSSVBST0NFU1NPUlZQRF9ICiAjZGVmaW5lIF9JT0hSSVBST0NFU1NPUlZQRF9ICiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vCVRoaXMgc3RydWN0IG1hcHMgUHJvY2Vzc29yIFZwZCB0aGF0IGlzIERNQWQgdG8gU0xJQyBieSBDU1AgCi0vLwotCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLXN0cnVjdCBJb0hyaVByb2Nlc3NvclZwZAotewotCisvKgorICogVGhpcyBzdHJ1Y3QgbWFwcyBQcm9jZXNzb3IgVnBkIHRoYXQgaXMgRE1BZCB0byBTTElDIGJ5IENTUAorICovCitzdHJ1Y3QgSW9IcmlQcm9jZXNzb3JWcGQgewogCXU4CXhGb3JtYXQ7CQkvLyBWUEQgZm9ybWF0IGluZGljYXRvcgkJeDAwLXgwMAogCXU4CXhQcm9jU3RhdHVzOjg7CQkvLyBQcm9jZXNzb3IgU3RhdGUJCXgwMS14MDEKIAl1OAl4U2Vjb25kYXJ5VGhyZWFkQ291bnQ7CS8vIFNlY29uZGFyeSB0aHJlYWQgY250CQl4MDIteDAyCkBAIC00MCwxMiArMzYsMTIgQEAKIAl1MTYJeFJzdmQyOwkJCS8vIFJlc2VydmVkCQkJeDA2LXgwNwogCXUzMgl4SHdOb2RlSWQ7CQkvLyBIYXJkd2FyZSBub2RlIGlkCQl4MDgteDBCCiAJdTMyCXhId1Byb2NJZDsJCS8vIEhhcmR3YXJlIHByb2Nlc3NvciBpZAl4MEMteDBGCi0JCisKIAl1MzIJeFR5cGVOdW07CQkvLyBDYXJkIFR5cGUvQ0NJTiBudW1iZXIJeDEwLXgxMwogCXUzMgl4TW9kZWxOdW07CQkvLyBNb2RlbC9GZWF0dXJlIG51bWJlcgkJeDE0LXgxNwogCXU2NAl4U2VyaWFsTnVtOwkJLy8gU2VyaWFsIG51bWJlcgkJeDE4LXgxRgotCWNoYXIgeFBhcnROdW1bMTJdOwkJLy8gQm9vayBQYXJ0IG9yIEZQVSBudW1iZXIJeDIwLXgyQgotCWNoYXIgeE1mZ0lEWzRdOwkJCS8vIE1hbnVmYWN0dXJpbmcgSUQJCXgyQy14MkYKKwljaGFyCXhQYXJ0TnVtWzEyXTsJCS8vIEJvb2sgUGFydCBvciBGUFUgbnVtYmVyCXgyMC14MkIKKwljaGFyCXhNZmdJRFs0XTsJCS8vIE1hbnVmYWN0dXJpbmcgSUQJCXgyQy14MkYKIAogCXUzMgl4UHJvY0ZyZXE7CQkvLyBQcm9jZXNzb3IgRnJlcXVlbmN5CQl4MzAteDMzCiAJdTMyCXhUaW1lQmFzZUZyZXE7CQkvLyBUaW1lIEJhc2UgRnJlcXVlbmN5CQl4MzQteDM3CkBAIC03MSw3ICs2Nyw3IEBACiAJdTMyCXhEYXRhTDNDYWNoZVNpemVLQjsJLy8gTDMgZGF0YSBjYWNoZSBzaXplIGluIEtCCXg4MC14ODMKIAl1MzIJeERhdGFMM0NhY2hlTGluZVNpemU7CS8vIEwzIGRhdGEgY2FjaGUgYmxvY2sgc2l6ZQl4ODQteDg3CiAJdTY0CXhSc3ZkNjsJCQkvLyBSZXNlcnZlZAkJCXg4OC14OEYKLSAgIAorCiAJdTY0CXhGcnVMYWJlbDsJCS8vIENhcmQgTG9jYXRpb24gTGFiZWwJCXg5MC14OTcKIAl1OAl4U2xvdHNPbkNhcmQ7CQkvLyBTbG90cyBvbiBjYXJkICgwPW5vIHNsb3RzKQl4OTgteDk4CiAJdTgJeFBhcnRMb2NGbGFnOwkJLy8gTG9jYXRpb24gZmxhZyAoMC1wbHVnZ2FibGUgMS1pbWJlZGRlZCkgeDk5LXg5OQpAQCAtNzksMTAgKzc1LDEyIEBACiAJdTgJeFNtYXJ0Q2FyZFBvcnRObzsJLy8gU21hcnQgY2FyZCBwb3J0IG51bWJlcgl4OUMteDlDCiAJdTgJeFJzdmQ3OwkJCS8vIFJlc2VydmVkCQkJeDlELXg5RAogCXUxNgl4RnJhbWVJZEFuZFJhY2tVbml0OwkvLyBGcmFtZSBJRCBhbmQgcmFjayB1bml0IGFkcgl4OUUteDlGCi0gICAgCisKIAl1OAl4UnN2ZDhbMjRdOwkJLy8gUmVzZXJ2ZWQJCQl4QTAteEI3CiAKLQljaGFyIHhQcm9jU3JjWzcyXTsJCS8vIENTUCBmb3JtYXQgU1JDCQl4QjgteEZGCisJY2hhcgl4UHJvY1NyY1s3Ml07CQkvLyBDU1AgZm9ybWF0IFNSQwkJeEI4LXhGRgogfTsKIAorZXh0ZXJuIHN0cnVjdCBJb0hyaVByb2Nlc3NvclZwZAl4SW9IcmlQcm9jZXNzb3JWcGRbXTsKKwogI2VuZGlmIC8qIF9JT0hSSVBST0NFU1NPUlZQRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0RXh0VnBkUGFuZWwuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRFeHRWcGRQYW5lbC5oCmluZGV4IGRlZTZiMTIuLjRjNTQ2YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRFeHRWcGRQYW5lbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRFeHRWcGRQYW5lbC5oCkBAIC0xLDE3ICsxLDE3IEBACiAvKgogICogSXRFeHRWcGRQYW5lbC5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIERhdmUgQm91dGNoZXIgSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCkBAIC0yMCwzOSArMjAsMzMgQEAKICNkZWZpbmUgX0lURVhUVlBEUEFORUxfSAogCiAvKgotICoKLSAqCVRoaXMgc3RydWN0IG1hcHMgdGhlIHBhbmVsIGluZm9ybWF0aW9uIAorICoJVGhpcyBzdHJ1Y3QgbWFwcyB0aGUgcGFuZWwgaW5mb3JtYXRpb24KICAqCiAgKiBXYXJuaW5nOgogICoJVGhpcyBkYXRhIG11c3QgbWF0Y2ggdGhlIGFyY2hpdGVjdHVyZSBmb3IgdGhlIHBhbmVsIGluZm9ybWF0aW9uCi0gKgogICovCiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTdGFuZGFyZCBJbmNsdWRlcwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotKi8KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAotc3RydWN0IEl0RXh0VnBkUGFuZWwKLXsKLSAgLy8gRGVmaW5pdGlvbiBvZiB0aGUgRXh0ZW5kZWQgVnBkIE9uIFBhbmVsIERhdGEgQXJlYQotICBjaGFyICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbVNlcmlhbFs4XTsKLSAgY2hhciAgICAgICAgICAgICAgICAgICAgICBtZmdJRFs0XTsKLSAgY2hhciAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDFbMjRdOwotICBjaGFyICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVUeXBlWzRdOwotICBjaGFyICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbUlEWzZdOwotICBjaGFyICAgICAgICAgICAgICAgICAgICAgIHNvbVVuaXF1ZUNudFs0XTsKLSAgY2hhciAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxOdW1iZXJDb3VudDsKLSAgY2hhciAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDJbN107Ci0gIHUxNiAgICAgICAgICAgICAgICAgICAgICAgYmJ1MzsKLSAgdTE2ICAgICAgICAgICAgICAgICAgICAgICBiYnUyOwotICB1MTYgICAgICAgICAgICAgICAgICAgICAgIGJidTE7Ci0gIGNoYXIgICAgICAgICAgICAgICAgICAgICAgeExvY2F0aW9uTGFiZWxbOF07Ci0gIHU4ICAgICAgICAgICAgICAgICAgICAgICAgeFJzdmQxWzZdOwotICB1MTYgICAgICAgICAgICAgICAgICAgICAgIHhGcmFtZUlkOwotICB1OCAgICAgICAgICAgICAgICAgICAgICAgIHhSc3ZkMls0OF07CitzdHJ1Y3QgSXRFeHRWcGRQYW5lbCB7CisJLyogRGVmaW5pdGlvbiBvZiB0aGUgRXh0ZW5kZWQgVnBkIE9uIFBhbmVsIERhdGEgQXJlYSAqLworCWNoYXIJc3lzdGVtU2VyaWFsWzhdOworCWNoYXIJbWZnSURbNF07CisJY2hhcglyZXNlcnZlZDFbMjRdOworCWNoYXIJbWFjaGluZVR5cGVbNF07CisJY2hhcglzeXN0ZW1JRFs2XTsKKwljaGFyCXNvbVVuaXF1ZUNudFs0XTsKKwljaGFyCXNlcmlhbE51bWJlckNvdW50OworCWNoYXIJcmVzZXJ2ZWQyWzddOworCXUxNgliYnUzOworCXUxNgliYnUyOworCXUxNgliYnUxOworCWNoYXIJeExvY2F0aW9uTGFiZWxbOF07CisJdTgJeFJzdmQxWzZdOworCXUxNgl4RnJhbWVJZDsKKwl1OAl4UnN2ZDJbNDhdOwogfTsKIAotI2VuZGlmIC8qIF9JVEVYVFZQRFBBTkVMX0ggICovCitleHRlcm4gc3RydWN0IEl0RXh0VnBkUGFuZWwJeEl0RXh0VnBkUGFuZWw7CisKKyNlbmRpZiAvKiBfSVRFWFRWUERQQU5FTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0SXBsUGFybXNSZWFsLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0SXBsUGFybXNSZWFsLmgKaW5kZXggNGQ4YjQzMC4uYWUzNDE3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdElwbFBhcm1zUmVhbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRJcGxQYXJtc1JlYWwuaApAQCAtMSwxNyArMSwxNyBAQAogLyoKICAqIEl0SXBsUGFybXNSZWFsLmgKICAqIENvcHlyaWdodCAoQykgMjAwMSAgTWlrZSBDb3JyaWdhbiBJQk0gQ29ycG9yYXRpb24KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKQEAgLTE5LDU4ICsxOSw1MyBAQAogI2lmbmRlZiBfSVRJUExQQVJNU1JFQUxfSAogI2RlZmluZSBfSVRJUExQQVJNU1JFQUxfSAogCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vCVRoaXMgc3RydWN0IG1hcHMgdGhlIElQTCBQYXJhbWV0ZXJzIERNQSdkIGZyb20gdGhlIFNQLiAgICAgICAgICAgICAgICAgIAotLy8KLS8vIFdhcm5pbmc6Ci0vLwlUaGlzIGRhdGEgbXVzdCBtYXAgaW4gZXhhY3RseSA2NCBieXRlcyBhbmQgbWF0Y2ggdGhlIGFyY2hpdGVjdHVyZSBmb3IKLS8vCXRoZSBJUEwgcGFybXMKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvKgorICoJVGhpcyBzdHJ1Y3QgbWFwcyB0aGUgSVBMIFBhcmFtZXRlcnMgRE1BJ2QgZnJvbSB0aGUgU1AuCisgKgorICogV2FybmluZzoKKyAqCVRoaXMgZGF0YSBtdXN0IG1hcCBpbiBleGFjdGx5IDY0IGJ5dGVzIGFuZCBtYXRjaCB0aGUgYXJjaGl0ZWN0dXJlIGZvcgorICoJdGhlIElQTCBwYXJtcworICovCiAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTdGFuZGFyZCBJbmNsdWRlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLXN0cnVjdCBJdElwbFBhcm1zUmVhbAotewotCXU4CXhGb3JtYXQ7CQkvLyBEZWZpbmVzIGZvcm1hdCBvZiBJcGxQYXJtcwkJeDAwLXgwMAotCXU4CXhSc3ZkMDE6NjsJCS8vIFJlc2VydmVkCQkJCXgwMS14MDEKLQl1OAl4QWx0ZXJuYXRlU2VhcmNoOjE7CS8vIEFsdGVybmF0ZSBzZWFyY2ggaW5kaWNhdG9yCQkuLi4KLQl1OAl4VWFTdXBwbGllZDoxOwkJLy8gVUEgU3VwcGxpZWQgb24gcHJvZ3JhbW1lZCBJUEwJLi4uCi0JdTgJeExzVWFGb3JtYXQ7CQkvLyBGb3JtYXQgYnl0ZSBmb3IgVUEJCQl4MDIteDAyCi0JdTgJeFJzdmQwMjsJCS8vIFJlc2VydmVkCQkJCXgwMy14MDMKLQl1MzIJeExzVWE7CQkJLy8gTFMgVUEJCQkJeDA0LXgwNwotCXUzMgl4VW51c2VkTHNMaWQ7CQkvLyBGaXJzdCBPUyBMSUQgdG8gbG9hZAkJCXgwOC14MEIKLQl1MTYJeExzQnVzTnVtYmVyOwkJLy8gTFMgQnVzIE51bWJlcgkJCXgwQy14MEQKLQl1OAl4THNDYXJkQWRyOwkJLy8gTFMgQ2FyZCBBZGRyZXNzCQkJeDBFLXgwRQotCXU4CXhMc0JvYXJkQWRyOwkJLy8gTFMgQm9hcmQgQWRkcmVzcwkJCXgwRi14MEYKLQl1MzIJeFJzdmQwMzsJCS8vIFJlc2VydmVkCQkJCXgxMC14MTMKLQl1OAl4U3BjblByZXNlbnQ6MTsJCS8vIFNQQ04gcHJlc2VudAkJCQl4MTQteDE0Ci0JdTgJeENwbVByZXNlbnQ6MTsJCS8vIENQTSBwcmVzZW50CQkJCS4uLgotCXU4CXhSc3ZkMDQ6NjsJCS8vIFJlc2VydmVkCQkJCS4uLgotCXU4CXhSc3ZkMDU6NDsJCS8vIFJlc2VydmVkCQkJCXgxNS14MTUKLQl1OAl4S2V5TG9jazo0OwkJLy8gS2V5bG9jayBzZXR0aW5nCQkJLi4uCi0JdTgJeFJzdmQwNjo2OwkJLy8gUmVzZXJ2ZWQJCQkJeDE2LXgxNgotCXU4CXhJcGxNb2RlOjI7CQkvLyBJcGwgbW9kZSAoQXxCfEN8RCkJCQkuLi4KLQl1OAl4SHdJcGxUeXBlOwkJLy8gRmFzdCB2IHNsb3cgdiBzbG93IEVDIEhXIElQTAkJeDE3LXgxNwotCXUxNgl4Q3BtRW5hYmxlZElwbDoxOwkvLyBDUE0gaW4gZWZmZWN0IHdoZW4gSVBMIGluaXRpYXRlZAl4MTgteDE5Ci0JdTE2CXhQb3dlck9uUmVzZXRJcGw6MTsJLy8gSW5kaWNhdGUgUE9SIGNvbmRpdGlvbgkJLi4uCi0JdTE2CXhNYWluU3RvcmVQcmVzZXJ2ZWQ6MTsJLy8gTWFpbiBTdG9yYWdlIGlzIHByZXNlcnZlZAkJLi4uCi0JdTE2CXhSc3ZkMDc6MTM7CQkvLyBSZXNlcnZlZAkJCQkuLi4KLQl1MTYJeElwbFNvdXJjZToxNjsJCS8vIElwbCBzb3VyY2UJCQkJeDFBLXgxQgotCXU4CXhJcGxSZWFzb246ODsJCS8vIFJlYXNvbiBmb3IgdGhpcyBJUEwJCQl4MUMteDFDCi0JdTgJeFJzdmQwODsJCS8vIFJlc2VydmVkCQkJCXgxRC14MUQKLQl1MTYJeFJzdmQwOTsJCS8vIFJlc2VydmVkCQkJCXgxRS14MUYKLQl1MTYJeFN5c0JveFR5cGU7CQkvLyBTeXN0ZW0gQm94IFR5cGUJCQl4MjAteDIxCi0JdTE2CXhTeXNQcm9jVHlwZTsJCS8vIFN5c3RlbSBQcm9jZXNzb3IgVHlwZQkJeDIyLXgyMwotCXUzMgl4UnN2ZDEwOwkJLy8gUmVzZXJ2ZWQJCQkJeDI0LXgyNwotCXU2NAl4UnN2ZDExOwkJLy8gUmVzZXJ2ZWQJCQkJeDI4LXgyRgotCXU2NAl4UnN2ZDEyOwkJLy8gUmVzZXJ2ZWQJCQkJeDMwLXgzNwotCXU2NAl4UnN2ZDEzOwkJLy8gUmVzZXJ2ZWQJCQkJeDM4LXgzRgorc3RydWN0IEl0SXBsUGFybXNSZWFsIHsKKwl1OAl4Rm9ybWF0OwkJLy8gRGVmaW5lcyBmb3JtYXQgb2YgSXBsUGFybXMJeDAwLXgwMAorCXU4CXhSc3ZkMDE6NjsJCS8vIFJlc2VydmVkCQkJeDAxLXgwMQorCXU4CXhBbHRlcm5hdGVTZWFyY2g6MTsJLy8gQWx0ZXJuYXRlIHNlYXJjaCBpbmRpY2F0b3IJLi4uCisJdTgJeFVhU3VwcGxpZWQ6MTsJCS8vIFVBIFN1cHBsaWVkIG9uIHByb2dyYW1tZWQgSVBMLi4uCisJdTgJeExzVWFGb3JtYXQ7CQkvLyBGb3JtYXQgYnl0ZSBmb3IgVUEJCXgwMi14MDIKKwl1OAl4UnN2ZDAyOwkJLy8gUmVzZXJ2ZWQJCQl4MDMteDAzCisJdTMyCXhMc1VhOwkJCS8vIExTIFVBCQkJeDA0LXgwNworCXUzMgl4VW51c2VkTHNMaWQ7CQkvLyBGaXJzdCBPUyBMSUQgdG8gbG9hZAkJeDA4LXgwQgorCXUxNgl4THNCdXNOdW1iZXI7CQkvLyBMUyBCdXMgTnVtYmVyCQl4MEMteDBECisJdTgJeExzQ2FyZEFkcjsJCS8vIExTIENhcmQgQWRkcmVzcwkJeDBFLXgwRQorCXU4CXhMc0JvYXJkQWRyOwkJLy8gTFMgQm9hcmQgQWRkcmVzcwkJeDBGLXgwRgorCXUzMgl4UnN2ZDAzOwkJLy8gUmVzZXJ2ZWQJCQl4MTAteDEzCisJdTgJeFNwY25QcmVzZW50OjE7CQkvLyBTUENOIHByZXNlbnQJCQl4MTQteDE0CisJdTgJeENwbVByZXNlbnQ6MTsJCS8vIENQTSBwcmVzZW50CQkJLi4uCisJdTgJeFJzdmQwNDo2OwkJLy8gUmVzZXJ2ZWQJCQkuLi4KKwl1OAl4UnN2ZDA1OjQ7CQkvLyBSZXNlcnZlZAkJCXgxNS14MTUKKwl1OAl4S2V5TG9jazo0OwkJLy8gS2V5bG9jayBzZXR0aW5nCQkuLi4KKwl1OAl4UnN2ZDA2OjY7CQkvLyBSZXNlcnZlZAkJCXgxNi14MTYKKwl1OAl4SXBsTW9kZToyOwkJLy8gSXBsIG1vZGUgKEF8QnxDfEQpCQkuLi4KKwl1OAl4SHdJcGxUeXBlOwkJLy8gRmFzdCB2IHNsb3cgdiBzbG93IEVDIEhXIElQTAl4MTcteDE3CisJdTE2CXhDcG1FbmFibGVkSXBsOjE7CS8vIENQTSBpbiBlZmZlY3Qgd2hlbiBJUEwgaW5pdGlhdGVkeDE4LXgxOQorCXUxNgl4UG93ZXJPblJlc2V0SXBsOjE7CS8vIEluZGljYXRlIFBPUiBjb25kaXRpb24JLi4uCisJdTE2CXhNYWluU3RvcmVQcmVzZXJ2ZWQ6MTsJLy8gTWFpbiBTdG9yYWdlIGlzIHByZXNlcnZlZAkuLi4KKwl1MTYJeFJzdmQwNzoxMzsJCS8vIFJlc2VydmVkCQkJLi4uCisJdTE2CXhJcGxTb3VyY2U6MTY7CQkvLyBJcGwgc291cmNlCQkJeDFBLXgxQgorCXU4CXhJcGxSZWFzb246ODsJCS8vIFJlYXNvbiBmb3IgdGhpcyBJUEwJCXgxQy14MUMKKwl1OAl4UnN2ZDA4OwkJLy8gUmVzZXJ2ZWQJCQl4MUQteDFECisJdTE2CXhSc3ZkMDk7CQkvLyBSZXNlcnZlZAkJCXgxRS14MUYKKwl1MTYJeFN5c0JveFR5cGU7CQkvLyBTeXN0ZW0gQm94IFR5cGUJCXgyMC14MjEKKwl1MTYJeFN5c1Byb2NUeXBlOwkJLy8gU3lzdGVtIFByb2Nlc3NvciBUeXBlCXgyMi14MjMKKwl1MzIJeFJzdmQxMDsJCS8vIFJlc2VydmVkCQkJeDI0LXgyNworCXU2NAl4UnN2ZDExOwkJLy8gUmVzZXJ2ZWQJCQl4MjgteDJGCisJdTY0CXhSc3ZkMTI7CQkvLyBSZXNlcnZlZAkJCXgzMC14MzcKKwl1NjQJeFJzdmQxMzsJCS8vIFJlc2VydmVkCQkJeDM4LXgzRgogfTsKIAorZXh0ZXJuIHN0cnVjdCBJdElwbFBhcm1zUmVhbAl4SXRJcGxQYXJtc1JlYWw7CisKICNlbmRpZiAvKiBfSVRJUExQQVJNU1JFQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdExwTmFjYS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdExwTmFjYS5oCmluZGV4IDViYWZmZGQuLjIyNWQwMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRMcE5hY2EuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0THBOYWNhLmgKQEAgLTEsMTcgKzEsMTcgQEAKIC8qCiAgKiBJdExwTmFjYS5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCkBAIC0xOSwxOCArMTksMTUgQEAKICNpZm5kZWYgX0lUTFBOQUNBX0gKICNkZWZpbmUgX0lUTFBOQUNBX0gKIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vCVRoaXMgY29udHJvbCBibG9jayBjb250YWlucyB0aGUgZGF0YSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZQotLy8JaHlwZXJ2aXNvciAoUExJQykgYW5kIHRoZSBPUy4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotc3RydWN0IEl0THBOYWNhCi17Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvKgorICoJVGhpcyBjb250cm9sIGJsb2NrIGNvbnRhaW5zIHRoZSBkYXRhIHRoYXQgaXMgc2hhcmVkIGJldHdlZW4gdGhlCisgKgloeXBlcnZpc29yIChQTElDKSBhbmQgdGhlIE9TLgorICovCisKK3N0cnVjdCBJdExwTmFjYSB7CiAvLyBDQUNIRV9MSU5FXzEgMHgwMDAwIC0gMHgwMDdGIENvbnRhaW5zIHJlYWQtb25seSBkYXRhCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAJdTMyCXhEZXNjOwkJCS8vIEV5ZSBjYXRjaGVyCQkJeDAwLXgwMwogCXUxNgl4U2l6ZTsJCQkvLyBTaXplIG9mIHRoaXMgY2xhc3MJCXgwNC14MDUKIAl1MTYJeEludEhkbHJPZmZzZXQ7CQkvLyBPZmZzZXQgdG8gSW50SGRsciBhcnJheQl4MDYteDA3CkBAIC01OSwzMCArNTYsMjUgQEAKIAl1NjQJeExvYWRBcmVhQWRkcjsJCS8vIEVSIGFkZHJlc3Mgb2YgbG9hZCBhcmVhCXgyOC14MkYKIAl1MzIJeExvYWRBcmVhQ2h1bmtzOwkvLyBDaHVua3MgZm9yIHRoZSBsb2FkIGFyZWEJeDMwLXgzMwogCXUzMgl4UGFzZVN5c0NhbGxDUk1hc2s7CS8vIE1hc2sgdXNlZCB0byB0ZXN0IENSIGJlZm9yZSAgeDM0LXgzNwotCS8vIGRvaW5nIGFuIEFTUiBzd2l0Y2ggb24gUEFTRQotCS8vIHN5c3RlbSBjYWxsLgotCXU2NAl4U2xpY1NlZ21lbnRUYWJsZVB0cjsgICAvLyBQb2ludGVyIHRvIFNsaWMgc2VnIHRhYmxlLiAgIHgzOC14M2YKLQl1OAl4UnN2ZDFfNFs2NF07CQkvLyAgICAgICAgIAkJCXg0MC14N0YgCi0gICAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkJLy8gZG9pbmcgYW4gQVNSIHN3aXRjaCBvbiBQQVNFCisJCQkJCS8vIHN5c3RlbSBjYWxsLgorCXU2NAl4U2xpY1NlZ21lbnRUYWJsZVB0cjsJLy8gUG9pbnRlciB0byBTbGljIHNlZyB0YWJsZS4gICB4MzgteDNmCisJdTgJeFJzdmQxXzRbNjRdOwkJLy8JCQkJeDQwLXg3RgorCiAvLyBDQUNIRV9MSU5FXzIgMHgwMDgwIC0gMHgwMEZGIENvbnRhaW5zIGxvY2FsIHJlYWQtd3JpdGUgZGF0YQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCXU4CXhSc3ZkMl8wWzEyOF07CQkvLyBSZXNlcnZlZAkJCXgwMC14N0YKIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gQ0FDSEVfTElORV8zLTYgMHgwMTAwIC0gMHgwMkZGIENvbnRhaW5zIExQIFF1ZXVlIGluZGljYXRvcnMKLS8vIE5COiBQYWRkaW5nIHJlcXVpcmVkIHRvIGtlZXAgeEludGVycnJ1cHRIZGxyIGF0IHgzMDAgd2hpY2ggaXMgcmVxdWlyZWQgCisvLyBOQjogUGFkZGluZyByZXF1aXJlZCB0byBrZWVwIHhJbnRlcnJydXB0SGRsciBhdCB4MzAwIHdoaWNoIGlzIHJlcXVpcmVkCiAvLyBmb3IgdjRyNCBQTElDLgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCXU4CXhPbGRMcFF1ZXVlWzEyOF07CS8vIExQIFF1ZXVlIG5lZWRlZCBmb3IgdjRyNAkxMDAtMTdGCiAJdTgJeFJzdmQzXzBbMzg0XTsJCS8vIFJlc2VydmVkCQkJMTgwLTJGRgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiAvLyBDQUNIRV9MSU5FXzctOCAweDAzMDAgLSAweDAzRkYgQ29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIE9TIGludGVycnVwdAogLy8gIGhhbmRsZXJzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAJdTY0CXhJbnRlcnJ1cHRIZGxyWzMyXTsJLy8gSW50ZXJydXB0IGhhbmRsZXJzCQkzMDAteDNGRgogfTsKIAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZXh0ZXJuIHN0cnVjdCBJdExwTmFjYQkJaXRMcE5hY2E7CiAKICNlbmRpZiAvKiBfSVRMUE5BQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdExwUXVldWUuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRMcFF1ZXVlLmgKaW5kZXggNGY0ZGRlMi4uMzkzMjk5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdExwUXVldWUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0THBRdWV1ZS5oCkBAIC0xLDE3ICsxLDE3IEBACiAvKgogICogSXRMcFF1ZXVlLmgKICAqIENvcHlyaWdodCAoQykgMjAwMSAgTWlrZSBDb3JyaWdhbiBJQk0gQ29ycG9yYXRpb24KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKQEAgLTE5LDU0ICsxOSw1NCBAQAogI2lmbmRlZiBfSVRMUFFVRVVFX0gKICNkZWZpbmUgX0lUTFBRVUVVRV9ICiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLwlUaGlzIGNvbnRyb2wgYmxvY2sgZGVmaW5lcyB0aGUgc2ltcGxlIExQIHF1ZXVlIHN0cnVjdHVyZSB0aGF0IGlzIAotLy8Jc2hhcmVkIGJldHdlZW4gdGhlIGh5cGVydmlzb3IgKFBMSUMpIGFuZCB0aGUgT1MgaW4gb3JkZXIgdG8gc2VuZCAKLS8vCWV2ZW50cyB0byBhbiBMUC4gIAotLy8gICAgCisvKgorICoJVGhpcyBjb250cm9sIGJsb2NrIGRlZmluZXMgdGhlIHNpbXBsZSBMUCBxdWV1ZSBzdHJ1Y3R1cmUgdGhhdCBpcworICoJc2hhcmVkIGJldHdlZW4gdGhlIGh5cGVydmlzb3IgKFBMSUMpIGFuZCB0aGUgT1MgaW4gb3JkZXIgdG8gc2VuZAorICoJZXZlbnRzIHRvIGFuIExQLgorICovCiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKIHN0cnVjdCBIdkxwRXZlbnQ7CiAKLSNkZWZpbmUgSVRNYXhMcFF1ZXVlcyA4CisjZGVmaW5lIElUTWF4THBRdWV1ZXMJOAogCiAjZGVmaW5lIE5vdFVzZWQJCTAJLy8gUXVldWUgd2lsbCBub3QgYmUgdXNlZCBieSBQTElDCiAjZGVmaW5lIERlZGljYXRlZElvCTEJLy8gUXVldWUgZGVkaWNhdGVkIHRvIElPIHByb2Nlc3NvciBzcGVjaWZpZWQKICNkZWZpbmUgRGVkaWNhdGVkTHAJMgkvLyBRdWV1ZSBkZWRpY2F0ZWQgdG8gTFAgc3BlY2lmaWVkCiAjZGVmaW5lIFNoYXJlZAkJMwkvLyBRdWV1ZSBzaGFyZWQgZm9yIGJvdGggSU8gYW5kIExQCiAKLSNkZWZpbmUgTHBFdmVudFN0YWNrU2l6ZSA0MDk2Ci0jZGVmaW5lIExwRXZlbnRNYXhTaXplICAgMjU2Ci0jZGVmaW5lIExwRXZlbnRBbGlnbgkgNjQKKyNkZWZpbmUgTHBFdmVudFN0YWNrU2l6ZQk0MDk2CisjZGVmaW5lIExwRXZlbnRNYXhTaXplCQkyNTYKKyNkZWZpbmUgTHBFdmVudEFsaWduCQk2NAogCi1zdHJ1Y3QgSXRMcFF1ZXVlCi17Ci0vLwotLy8gIFRoZSB4U2xpY0N1ckV2ZW50UHRyIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGV2ZW50IHN0YWNrIGVudHJ5IHRoYXQgd2lsbAotLy8gIGJlY29tZSB2YWxpZC4gIFRoZSBPUyBtdXN0IHBlZWsgYXQgdGhpcyBlbnRyeSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdmFsaWQuCi0vLyAgUExJQyB3aWxsIHNldCB0aGUgdmFsaWQgaW5kaWNhdG9yIGFzIHRoZSB2ZXJ5IGxhc3Qgc3RvcmUgaW50byB0aGF0IGVudHJ5LgotLy8KLS8vICBXaGVuIHRoZSBPUyBoYXMgY29tcGxldGVkIHByb2Nlc3Npbmcgb2YgdGhlIGV2ZW50IHRoZW4gaXQgd2lsbCBtYXJrIHRoZSBldmVudAotLy8gIGFzIGludmFsaWQgc28gdGhhdCBQTElDIGtub3dzIGl0IGNhbiBzdG9yZSBpbnRvIHRoYXQgZXZlbnQgbG9jYXRpb24gYWdhaW4uCi0vLwotLy8gSWYgdGhlIGV2ZW50IHN0YWNrIGZpbGxzIGFuZCB0aGVyZSBhcmUgb3ZlcmZsb3cgZXZlbnRzLCB0aGVuIFBMSUMgd2lsbCBzZXQgCi0vLyB0aGUgeFBsaWNPdmVyZmxvd0ludFBlbmRpbmcgZmxhZyBpbiB3aGljaCBjYXNlIHRoZSBPUyB3aWxsIGhhdmUgdG8gZmV0Y2ggdGhlIAotLy8gYWRkaXRpb25hbCBMUCBldmVudHMgb25jZSB0aGV5IGhhdmUgZHJhaW5lZCB0aGUgZXZlbnQgc3RhY2suCi0vLwotLy8gVGhlIGZpcnN0IDE2LWJ5dGVzIGFyZSBrbm93biBieSBib3RoIHRoZSBPUyBhbmQgUExJQy4gIFRoZSByZW1haW5kZXIgb2YgdGhlCi0vLyBjYWNoZSBsaW5lIGlzIGZvciB1c2UgYnkgdGhlIE9TLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0cnVjdCBJdExwUXVldWUgeworLyoKKyAqIFRoZSB4U2xpY0N1ckV2ZW50UHRyIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGV2ZW50IHN0YWNrIGVudHJ5CisgKiB0aGF0IHdpbGwgYmVjb21lIHZhbGlkLiAgVGhlIE9TIG11c3QgcGVlayBhdCB0aGlzIGVudHJ5IHRvIGRldGVybWluZQorICogaWYgaXQgaXMgdmFsaWQuICBQTElDIHdpbGwgc2V0IHRoZSB2YWxpZCBpbmRpY2F0b3IgYXMgdGhlIHZlcnkgbGFzdAorICogc3RvcmUgaW50byB0aGF0IGVudHJ5LgorICoKKyAqIFdoZW4gdGhlIE9TIGhhcyBjb21wbGV0ZWQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgdGhlbiBpdCB3aWxsIG1hcmsKKyAqIHRoZSBldmVudCBhcyBpbnZhbGlkIHNvIHRoYXQgUExJQyBrbm93cyBpdCBjYW4gc3RvcmUgaW50byB0aGF0IGV2ZW50CisgKiBsb2NhdGlvbiBhZ2Fpbi4KKyAqCisgKiBJZiB0aGUgZXZlbnQgc3RhY2sgZmlsbHMgYW5kIHRoZXJlIGFyZSBvdmVyZmxvdyBldmVudHMsIHRoZW4gUExJQworICogd2lsbCBzZXQgdGhlIHhQbGljT3ZlcmZsb3dJbnRQZW5kaW5nIGZsYWcgaW4gd2hpY2ggY2FzZSB0aGUgT1Mgd2lsbAorICogaGF2ZSB0byBmZXRjaCB0aGUgYWRkaXRpb25hbCBMUCBldmVudHMgb25jZSB0aGV5IGhhdmUgZHJhaW5lZCB0aGUKKyAqIGV2ZW50IHN0YWNrLgorICoKKyAqIFRoZSBmaXJzdCAxNi1ieXRlcyBhcmUga25vd24gYnkgYm90aCB0aGUgT1MgYW5kIFBMSUMuICBUaGUgcmVtYWluZGVyCisgKiBvZiB0aGUgY2FjaGUgbGluZSBpcyBmb3IgdXNlIGJ5IHRoZSBPUy4KKyAqLwogCXU4CXhQbGljT3ZlcmZsb3dJbnRQZW5kaW5nOy8vIDB4MDAgT3ZlcmZsb3cgZXZlbnRzIGFyZSBwZW5kaW5nCiAJdTgJeFBsaWNTdGF0dXM7CQkvLyAweDAxIERlZGljYXRlZElvIG9yIERlZGljYXRlZExwIG9yIE5vdFVzZWQKIAl1MTYJeFNsaWNMb2dpY2FsUHJvY0luZGV4OwkvLyAweDAyIExvZ2ljYWwgUHJvYyBJbmRleCBmb3IgY29ycmVsYXRpb24KIAl1OAl4UGxpY1JzdmRbMTJdOwkJLy8gMHgwNAotCWNoYXIqCXhTbGljQ3VyRXZlbnRQdHI7CS8vIDB4MTAKLQljaGFyKgl4U2xpY0xhc3RWYWxpZEV2ZW50UHRyOwkvLyAweDE4Ci0JY2hhcioJeFNsaWNFdmVudFN0YWNrUHRyOwkvLyAweDIwCisJY2hhcgkqeFNsaWNDdXJFdmVudFB0cjsJLy8gMHgxMAorCWNoYXIJKnhTbGljTGFzdFZhbGlkRXZlbnRQdHI7IC8vIDB4MTgKKwljaGFyCSp4U2xpY0V2ZW50U3RhY2tQdHI7CS8vIDB4MjAKIAl1OAl4SW5kZXg7CQkJLy8gMHgyOCB1bmlxdWUgc2VxdWVudGlhbCBpbmRleC4KIAl1OAl4U2xpY1JzdmRbM107CQkvLyAweDI5LTJiCiAJdTMyCXhJblVzZVdvcmQ7CQkvLyAweDJDCkBAIC03NiwxNyArNzYsOSBAQAogCiBleHRlcm4gc3RydWN0IEl0THBRdWV1ZSB4SXRMcFF1ZXVlOwogCi1leHRlcm4gc3RydWN0IEh2THBFdmVudCAqIEl0THBRdWV1ZV9nZXROZXh0THBFdmVudCggc3RydWN0IEl0THBRdWV1ZSAqICk7Ci1leHRlcm4gaW50IEl0THBRdWV1ZV9pc0xwSW50UGVuZGluZyggc3RydWN0IEl0THBRdWV1ZSAqICk7IAotZXh0ZXJuIHVuc2lnbmVkIEl0THBRdWV1ZV9wcm9jZXNzKCBzdHJ1Y3QgSXRMcFF1ZXVlICosIHN0cnVjdCBwdF9yZWdzICogKTsKLWV4dGVybiB2b2lkIEl0THBRdWV1ZV9jbGVhclZhbGlkKCBzdHJ1Y3QgSHZMcEV2ZW50ICogKTsKLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBwcm9jZXNzX2lTZXJpZXNfZXZlbnRzKCB2b2lkICkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JIglsaQkwLDB4NTU1NQlcblwKLQkJc2MiCi0JOiA6IDogInIwIiwgInIzIiApOwkKLX0KK2V4dGVybiBzdHJ1Y3QgSHZMcEV2ZW50ICpJdExwUXVldWVfZ2V0TmV4dExwRXZlbnQoc3RydWN0IEl0THBRdWV1ZSAqKTsKK2V4dGVybiBpbnQgSXRMcFF1ZXVlX2lzTHBJbnRQZW5kaW5nKHN0cnVjdCBJdExwUXVldWUgKik7CitleHRlcm4gdW5zaWduZWQgSXRMcFF1ZXVlX3Byb2Nlc3Moc3RydWN0IEl0THBRdWV1ZSAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB2b2lkIEl0THBRdWV1ZV9jbGVhclZhbGlkKHN0cnVjdCBIdkxwRXZlbnQgKik7CiAKICNlbmRpZiAvKiBfSVRMUFFVRVVFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRMcFJlZ1NhdmUuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRMcFJlZ1NhdmUuaAppbmRleCBkYWZjNGM4Li4xYjMwODdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0THBSZWdTYXZlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdExwUmVnU2F2ZS5oCkBAIC0xLDE3ICsxLDE3IEBACiAvKgogICogSXRMcFJlZ1NhdmUuaAogICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQpAQCAtMTksMzMgKzE5LDMwIEBACiAjaWZuZGVmIF9JVExQUkVHU0FWRV9ICiAjZGVmaW5lIF9JVExQUkVHU0FWRV9ICiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vCVRoaXMgY29udHJvbCBibG9jayBjb250YWlucyB0aGUgZGF0YSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIFBMSUMKLS8vCWFuZCB0aGUgT1MKLS8vICAgIAotLy8KKy8qCisgKiBUaGlzIGNvbnRyb2wgYmxvY2sgY29udGFpbnMgdGhlIGRhdGEgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiBQTElDCisgKiBhbmQgdGhlIE9TCisgKi8KIAotc3RydWN0IEl0THBSZWdTYXZlCi17CitzdHJ1Y3QgSXRMcFJlZ1NhdmUgewogCXUzMgl4RGVzYzsJCS8vIEV5ZSBjYXRjaGVyICAiTHBSUyIgZWJjZGljCTAwMC0wMDMKIAl1MTYJeFNpemU7CQkvLyBTaXplIG9mIHRoaXMgY2xhc3MJCTAwNC0wMDUKIAl1OAl4SW5Vc2U7ICAgICAgICAgLy8gQXJlYSBpcyBsaXZlICAgICAgICAgICAgICAgICAwMDYtMDA3Ci0JdTgJeFJzdmQxWzldOyAJLy8gUmVzZXJ2ZWQJCQkwMDctMDBGCisJdTgJeFJzdmQxWzldOwkvLyBSZXNlcnZlZAkJCTAwNy0wMEYKIAotCXU4ICAgICAgeEZpeGVkUmVnU2F2ZVszNTJdOyAvLyBGaXhlZCBSZWdpc3RlciBTYXZlIEFyZWEgMDEwLTE2RiAKKwl1OCAgICAgIHhGaXhlZFJlZ1NhdmVbMzUyXTsgLy8gRml4ZWQgUmVnaXN0ZXIgU2F2ZSBBcmVhIDAxMC0xNkYKIAl1MzIJeENUUkw7CQkvLyBDb250cm9sIFJlZ2lzdGVyCQkxNzAtMTczCi0JdTMyCXhERUM7CQkvLyBEZWNyZW1lbnRlcgkJCTE3NC0xNzcgICAgCisJdTMyCXhERUM7CQkvLyBEZWNyZW1lbnRlcgkJCTE3NC0xNzcKIAl1MzIJeEZQU0NSOwkJLy8gRlAgU3RhdHVzIGFuZCBDb250cm9sIFJlZwkxNzgtMTdCCiAJdTMyCXhQVlI7CQkvLyBQcm9jZXNzb3IgVmVyc2lvbiBOdW1iZXIJMTdDLTE3RgotICAgIAorCiAJdTY0CXhNTUNSMDsJCS8vIE1vbml0b3IgTW9kZSBDb250cm9sIFJlZyAwCTE4MC0xODcKIAl1MzIJeFBNQzE7CQkvLyBQZXJmIE1vbml0b3IgQ291bnRlciAxCTE4OC0xOEIKIAl1MzIJeFBNQzI7CQkvLyBQZXJmIE1vbml0b3IgQ291bnRlciAyCTE4Qy0xOEYKIAl1MzIJeFBNQzM7CQkvLyBQZXJmIE1vbml0b3IgQ291bnRlciAzCTE5MC0xOTMKIAl1MzIJeFBNQzQ7CQkvLyBQZXJmIE1vbml0b3IgQ291bnRlciA0CTE5NC0xOTcKIAl1MzIJeFBJUjsJCS8vIFByb2Nlc3NvciBJRCBSZWcJCTE5OC0xOUIKLSAgICAKKwogCXUzMgl4TU1DUjE7CQkvLyBNb25pdG9yIE1vZGUgQ29udHJvbCBSZWcgMQkxOUMtMTlGCiAJdTMyCXhNTUNSQTsJCS8vIE1vbml0b3IgTW9kZSBDb250cm9sIFJlZyBBCTFBMC0xQTMKIAl1MzIJeFBNQzU7CQkvLyBQZXJmIE1vbml0b3IgQ291bnRlciA1CTFBNC0xQTcKQEAgLTU3LDE3ICs1NCwxNyBAQAogCXUzMgl4UnN2ZDsgICAgICAgICAgLy8gUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAxQkMtMUJGCiAKIAl1NjQJeEFDQ1I7CQkvLyBBZGRyZXNzIENvbXBhcmUgQ29udHJvbCBSZWcJMUMwLTFDNwotCXU2NAl4SU1SOwkJLy8gSW5zdHJ1Y3Rpb24gTWF0Y2ggUmVnaXN0ZXIJMUM4LTFDRiAgICAKLQl1NjQJeFNEUjE7CQkvLyBTdG9yYWdlIERlc2NyaXB0aW9uIFJlZyAxCTFEMC0xRDcgICAgCisJdTY0CXhJTVI7CQkvLyBJbnN0cnVjdGlvbiBNYXRjaCBSZWdpc3RlcgkxQzgtMUNGCisJdTY0CXhTRFIxOwkJLy8gU3RvcmFnZSBEZXNjcmlwdGlvbiBSZWcgMQkxRDAtMUQ3CiAJdTY0CXhTUFJHMDsJCS8vIFNwZWNpYWwgUHVycG9zZSBSZWcgR2VuZXJhbDAJMUQ4LTFERgogCXU2NAl4U1BSRzE7CQkvLyBTcGVjaWFsIFB1cnBvc2UgUmVnIEdlbmVyYWwxCTFFMC0xRTcKIAl1NjQJeFNQUkcyOwkJLy8gU3BlY2lhbCBQdXJwb3NlIFJlZyBHZW5lcmFsMgkxRTgtMUVGCiAJdTY0CXhTUFJHMzsJCS8vIFNwZWNpYWwgUHVycG9zZSBSZWcgR2VuZXJhbDMJMUYwLTFGNwogCXU2NAl4VEI7CQkvLyBUaW1lIEJhc2UgUmVnaXN0ZXIJCTFGOC0xRkYKLSAgIAorCiAJdTY0CXhGUFJbMzJdOwkvLyBGbG9hdGluZyBQb2ludCBSZWdpc3RlcnMJMjAwLTJGRgogCi0JdTY0CXhNU1I7CQkvLyBNYWNoaW5lIFN0YXRlIFJlZ2lzdGVyICAJMzAwLTMwNworCXU2NAl4TVNSOwkJLy8gTWFjaGluZSBTdGF0ZSBSZWdpc3RlcgkzMDAtMzA3CiAJdTY0CXhOSUE7CQkvLyBOZXh0IEluc3RydWN0aW9uIEFkZHJlc3MJMzA4LTMwRgogCiAJdTY0CXhEQUJSOwkJLy8gRGF0YSBBZGRyZXNzIEJyZWFrcG9pbnQgUmVnCTMxMC0zMTcKQEAgLTc2LDggKzczLDggQEAKIAl1NjQJeEhJRDA7CQkvLyBIVyBJbXBsZW1lbnRhdGlvbiBEZXBlbmRlbnQwCTMyMC0zMjcKIAogCXU2NAl4SElENDsJCS8vIEhXIEltcGxlbWVudGF0aW9uIERlcGVuZGVudDQJMzI4LTMyRgotCXU2NAl4U0NPTWQ7CQkvLyBTQ09OIERhdGEgUmVnIChTUFJHNCkgICAgICAgCTMzMC0zMzcKLQl1NjQJeFNDT01jOwkJLy8gU0NPTiBDb21tYW5kIFJlZyAoU1BSRzUpICAgIAkzMzgtMzNGCisJdTY0CXhTQ09NZDsJCS8vIFNDT04gRGF0YSBSZWcgKFNQUkc0KQkzMzAtMzM3CisJdTY0CXhTQ09NYzsJCS8vIFNDT04gQ29tbWFuZCBSZWcgKFNQUkc1KQkzMzgtMzNGCiAJdTY0CXhTREFSOwkJLy8gU2FtcGxlIERhdGEgQWRkcmVzcyBSZWdpc3RlcgkzNDAtMzQ3CiAJdTY0CXhTSUFSOwkJLy8gU2FtcGxlIEluc3QgQWRkcmVzcyBSZWdpc3RlcgkzNDgtMzRGCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRTcENvbW1BcmVhLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0U3BDb21tQXJlYS5oCmluZGV4IGYxYjU2ZjkuLjU1MzVmODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvSXRTcENvbW1BcmVhLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdFNwQ29tbUFyZWEuaApAQCAtMSwyOSArMSwyNyBAQAogLyoKICAqIEl0U3BDb21tQXJlYS5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIE1pa2UgQ29ycmlnYW4gSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotCiAjaWZuZGVmIF9JVFNQQ09NTUFSRUFfSAogI2RlZmluZSBfSVRTUENPTU1BUkVBX0gKIAogCi1zdHJ1Y3QgU3BDb21tQXJlYQoteworc3RydWN0IFNwQ29tbUFyZWEgewogCXUzMgl4RGVzYzsJCQkvLyBEZXNjcmlwdG9yIChvbmx5IGluIG5ldyBmb3JtYXRzKQkwMDAtMDAzCiAJdTgJeEZvcm1hdDsJCS8vIEZvcm1hdCAob25seSBpbiBuZXcgZm9ybWF0cykJCTAwNC0wMDQKIAl1OAl4UnN2ZDFbMTFdOwkJLy8gUmVzZXJ2ZWQJCQkJMDA1LTAwRgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9JdFZwZEFyZWFzLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0VnBkQXJlYXMuaAppbmRleCBkMTIwNDM5Li43MWIzYWQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0VnBkQXJlYXMuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0l0VnBkQXJlYXMuaApAQCAtMSwxNyArMSwxNyBAQAogLyoKICAqIEl0VnBkQXJlYXMuaAogICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQpAQCAtMTksNzggKzE5LDcxIEBACiAjaWZuZGVmIF9JVFZQREFSRUFTX0gKICNkZWZpbmUgX0lUVlBEQVJFQVNfSAogCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgYWxsIG9mIHRoZSBWUEQgYXJlYSBwYXNzZWQgdG8KLS8vCXRoZSBPUyBmcm9tIFBMSUMgKG1vc3Qgb2Ygd2hpY2ggc3RhcnQgZnJvbSB0aGUgU1ApLgotLy8KKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIGFsbCBvZiB0aGUgVlBEIGFyZWEgcGFzc2VkIHRvCisgKiB0aGUgT1MgZnJvbSBQTElDIChtb3N0IG9mIHdoaWNoIHN0YXJ0IGZyb20gdGhlIFNQKS4KKyAqLwogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLS8vIFZQRCBFbnRyeSBpbmRleCBpcyBjYXJ2ZWQgaW4gc3RvbmUgLSBjYW5ub3QgYmUgY2hhbmdlZCAoZWFzaWx5KS4KLSNkZWZpbmUgSXRWcGRDZWNWcGQJCQkJICAgMAotI2RlZmluZSBJdFZwZER5bmFtaWNTcGFjZQkJCSAgIDEKLSNkZWZpbmUgSXRWcGRFeHRWcGQJCQkJICAgMgotI2RlZmluZSBJdFZwZEV4dFZwZE9uUGFuZWwJCQkgICAzCi0jZGVmaW5lIEl0VnBkRmlyc3RQYWNhCQkJCSAgIDQKLSNkZWZpbmUgSXRWcGRJb1ZwZAkJCQkgICA1Ci0jZGVmaW5lIEl0VnBkSXBsUGFybXMJCQkJICAgNgotI2RlZmluZSBJdFZwZE1zVnBkCQkJCSAgIDcKLSNkZWZpbmUgSXRWcGRQYW5lbFZwZAkJCQkgICA4Ci0jZGVmaW5lIEl0VnBkTHBOYWNhCQkJCSAgIDkKLSNkZWZpbmUgSXRWcGRCYWNrcGxhbmVBbmRNYXliZUNsb2NrQ2FyZFZwZCAgICAgICAgMTAgCi0jZGVmaW5lIEl0VnBkUmVjb3ZlcnlMb2dCdWZmZXIJCSAgICAgICAgICAxMQotI2RlZmluZSBJdFZwZFNwQ29tbUFyZWEJCQkJICAxMgotI2RlZmluZSBJdFZwZFNwTG9nQnVmZmVyCQkJICAxMwotI2RlZmluZSBJdFZwZFNwTG9nQnVmZmVyU2F2ZQkJCSAgMTQKLSNkZWZpbmUgSXRWcGRTcENhcmRWcGQJCQkJICAxNQotI2RlZmluZSBJdFZwZEZpcnN0UHJvY1ZwZAkJCSAgMTYJCi0jZGVmaW5lIEl0VnBkQXBNb2RlbFZwZAkJCQkgIDE3Ci0jZGVmaW5lIEl0VnBkQ2xvY2tDYXJkVnBkCQkJICAxOAotI2RlZmluZSBJdFZwZEJ1c0V4dENhcmRWcGQJCQkgIDE5Ci0jZGVmaW5lIEl0VnBkUHJvY0NhcGFjaXR5VnBkCQkJICAyMAotI2RlZmluZSBJdFZwZEludGVyYWN0aXZlQ2FwYWNpdHlWcGQJCSAgMjEKLSNkZWZpbmUgSXRWcGRGaXJzdFNsb3RMYWJlbAkJCSAgMjIKLSNkZWZpbmUgSXRWcGRGaXJzdExwUXVldWUJCQkgIDIzCi0jZGVmaW5lIEl0VnBkRmlyc3RMM0NhY2hlVnBkCQkJICAyNAkKLSNkZWZpbmUgSXRWcGRGaXJzdFByb2NGcnVWcGQJCQkgIDI1CisvKiBWUEQgRW50cnkgaW5kZXggaXMgY2FydmVkIGluIHN0b25lIC0gY2Fubm90IGJlIGNoYW5nZWQgKGVhc2lseSkuICovCisjZGVmaW5lIEl0VnBkQ2VjVnBkCQkJCTAKKyNkZWZpbmUgSXRWcGREeW5hbWljU3BhY2UJCQkxCisjZGVmaW5lIEl0VnBkRXh0VnBkCQkJCTIKKyNkZWZpbmUgSXRWcGRFeHRWcGRPblBhbmVsCQkJMworI2RlZmluZSBJdFZwZEZpcnN0UGFjYQkJCQk0CisjZGVmaW5lIEl0VnBkSW9WcGQJCQkJNQorI2RlZmluZSBJdFZwZElwbFBhcm1zCQkJCTYKKyNkZWZpbmUgSXRWcGRNc1ZwZAkJCQk3CisjZGVmaW5lIEl0VnBkUGFuZWxWcGQJCQkJOAorI2RlZmluZSBJdFZwZExwTmFjYQkJCQk5CisjZGVmaW5lIEl0VnBkQmFja3BsYW5lQW5kTWF5YmVDbG9ja0NhcmRWcGQJMTAKKyNkZWZpbmUgSXRWcGRSZWNvdmVyeUxvZ0J1ZmZlcgkJCTExCisjZGVmaW5lIEl0VnBkU3BDb21tQXJlYQkJCQkxMgorI2RlZmluZSBJdFZwZFNwTG9nQnVmZmVyCQkJMTMKKyNkZWZpbmUgSXRWcGRTcExvZ0J1ZmZlclNhdmUJCQkxNAorI2RlZmluZSBJdFZwZFNwQ2FyZFZwZAkJCQkxNQorI2RlZmluZSBJdFZwZEZpcnN0UHJvY1ZwZAkJCTE2CisjZGVmaW5lIEl0VnBkQXBNb2RlbFZwZAkJCQkxNworI2RlZmluZSBJdFZwZENsb2NrQ2FyZFZwZAkJCTE4CisjZGVmaW5lIEl0VnBkQnVzRXh0Q2FyZFZwZAkJCTE5CisjZGVmaW5lIEl0VnBkUHJvY0NhcGFjaXR5VnBkCQkJMjAKKyNkZWZpbmUgSXRWcGRJbnRlcmFjdGl2ZUNhcGFjaXR5VnBkCQkyMQorI2RlZmluZSBJdFZwZEZpcnN0U2xvdExhYmVsCQkJMjIKKyNkZWZpbmUgSXRWcGRGaXJzdExwUXVldWUJCQkyMworI2RlZmluZSBJdFZwZEZpcnN0TDNDYWNoZVZwZAkJCTI0CisjZGVmaW5lIEl0VnBkRmlyc3RQcm9jRnJ1VnBkCQkJMjUKIAotI2RlZmluZSBJdFZwZE1heEVudHJpZXMJCQkJICAyNgorI2RlZmluZSBJdFZwZE1heEVudHJpZXMJCQkJMjYKKworI2RlZmluZSBJdERtYU1heEVudHJpZXMJCQkJMTAKKworI2RlZmluZSBJdFZwZEFyZWFzTWF4U2xvdExhYmVscwkJCTE5MgogCiAKLSNkZWZpbmUgSXREbWFNYXhFbnRyaWVzCQkJCSAgMTAKLQotI2RlZmluZSBJdFZwZEFyZWFzTWF4U2xvdExhYmVscwkJIDE5MiAKLQotCi1zdHJ1Y3QgU2xpY1ZwZEFkcnMgewotCXUzMglwYWQxOwotCXZvaWQgKiAgdnBkQWRkcjsKK3N0cnVjdCBJdFZwZEFyZWFzIHsKKwl1MzIJeFNsaWNEZXNjOwkJLy8gRGVzY3JpcHRvcgkJCTAwMC0wMDMKKwl1MTYJeFNsaWNTaXplOwkJLy8gU2l6ZSBvZiB0aGlzIGNvbnRyb2wgYmxvY2sJMDA0LTAwNQorCXUxNgl4UGxpY0FkanVzdFZwZExlbnM6MTsJLy8gRmxhZyB0byBpbmRpY2F0ZSBuZXcgaW50ZXJmYWNlMDA2LTAwNworCXUxNgl4UnN2ZDE6MTU7CQkvLyBSZXNlcnZlZCBiaXRzCQkuLi4KKwl1MTYJeFNsaWNWcGRFbnRyaWVzOwkvLyBOdW1iZXIgb2YgVlBEIGVudHJpZXMJMDA4LTAwOQorCXUxNgl4U2xpY0RtYUVudHJpZXM7CS8vIE51bWJlciBvZiBETUEgZW50cmllcwkwMEEtMDBCCisJdTE2CXhTbGljTWF4TG9naWNhbFByb2NzOwkvLyBNYXhpbXVtIGxvZ2ljYWwgcHJvY2Vzc29ycwkwMEMtMDBECisJdTE2CXhTbGljTWF4UGh5c2ljYWxQcm9jczsJLy8gTWF4aW11bSBwaHlzaWNhbCBwcm9jZXNzb3JzCTAwRS0wMEYKKwl1MTYJeFNsaWNEbWFUb2tzT2Zmc2V0OwkvLyBPZmZzZXQgaW50byB0aGlzIG9mIGFycmF5CTAxMC0wMTEKKwl1MTYJeFNsaWNWcGRBZHJzT2Zmc2V0OwkvLyBPZmZzZXQgaW50byB0aGlzIG9mIGFycmF5CTAxMi0wMTMKKwl1MTYJeFNsaWNEbWFMZW5zT2Zmc2V0OwkvLyBPZmZzZXQgaW50byB0aGlzIG9mIGFycmF5CTAxNC0wMTUKKwl1MTYJeFNsaWNWcGRMZW5zT2Zmc2V0OwkvLyBPZmZzZXQgaW50byB0aGlzIG9mIGFycmF5CTAxNi0wMTcKKwl1MTYJeFNsaWNNYXhTbG90TGFiZWxzOwkvLyBNYXhpbXVtIG51bWJlciBvZiBzbG90IGxhYmVsczAxOC0wMTkKKwl1MTYJeFNsaWNNYXhMcFF1ZXVlczsJLy8gTWF4aW11bSBudW1iZXIgb2YgTFAgUXVldWVzCTAxQS0wMUIKKwl1OAl4UnN2ZDJbNF07CQkvLyBSZXNlcnZlZAkJCTAxQy0wMUYKKwl1NjQJeFJzdmQzWzEyXTsJCS8vIFJlc2VydmVkCQkJMDIwLTA3RgorCXUzMgl4UGxpY0RtYUxlbnNbSXREbWFNYXhFbnRyaWVzXTsvLyBBcnJheSBvZiBETUEgbGVuZ3RocwkwODAtMEE3CisJdTMyCXhQbGljRG1hVG9rc1tJdERtYU1heEVudHJpZXNdOy8vIEFycmF5IG9mIERNQSB0b2tlbnMJMEE4LTBDRgorCXUzMgl4U2xpY1ZwZExlbnNbSXRWcGRNYXhFbnRyaWVzXTsvLyBBcnJheSBvZiBWUEQgbGVuZ3RocwkwRDAtMTJGCisJdm9pZAkqeFNsaWNWcGRBZHJzW0l0VnBkTWF4RW50cmllc107Ly8gQXJyYXkgb2YgVlBEIGJ1ZmZlcnMJMTMwLTFFRgogfTsKIAotCi1zdHJ1Y3QJSXRWcGRBcmVhcwotewotCXUzMgl4U2xpY0Rlc2M7CQkvLyBEZXNjcmlwdG9yCQkJCTAwMC0wMDMKLQl1MTYJeFNsaWNTaXplOwkJLy8gU2l6ZSBvZiB0aGlzIGNvbnRyb2wgYmxvY2sJCTAwNC0wMDUKLQl1MTYJeFBsaWNBZGp1c3RWcGRMZW5zOjE7CS8vIEZsYWcgdG8gaW5kaWNhdGUgbmV3IGludGVyZmFjZSAJMDA2LTAwNwotCXUxNgl4UnN2ZDE6MTU7CQkvLyBSZXNlcnZlZCBiaXRzCQkJLi4uCi0JdTE2CXhTbGljVnBkRW50cmllczsJLy8gTnVtYmVyIG9mIFZQRCBlbnRyaWVzCQkwMDgtMDA5Ci0JdTE2CXhTbGljRG1hRW50cmllczsJLy8gTnVtYmVyIG9mIERNQSBlbnRyaWVzCQkwMEEtMDBCCi0JdTE2CXhTbGljTWF4TG9naWNhbFByb2NzOwkvLyBNYXhpbXVtIGxvZ2ljYWwgcHJvY2Vzc29ycwkJMDBDLTAwRAotCXUxNgl4U2xpY01heFBoeXNpY2FsUHJvY3M7CS8vIE1heGltdW0gcGh5c2ljYWwgcHJvY2Vzc29ycwkJMDBFLTAwRgotCXUxNgl4U2xpY0RtYVRva3NPZmZzZXQ7CS8vIE9mZnNldCBpbnRvIHRoaXMgb2YgYXJyYXkJCTAxMC0wMTEKLQl1MTYJeFNsaWNWcGRBZHJzT2Zmc2V0OwkvLyBPZmZzZXQgaW50byB0aGlzIG9mIGFycmF5CQkwMTItMDEzCi0JdTE2CXhTbGljRG1hTGVuc09mZnNldDsJLy8gT2Zmc2V0IGludG8gdGhpcyBvZiBhcnJheQkJMDE0LTAxNQotCXUxNgl4U2xpY1ZwZExlbnNPZmZzZXQ7CS8vIE9mZnNldCBpbnRvIHRoaXMgb2YgYXJyYXkJCTAxNi0wMTcKLQl1MTYJeFNsaWNNYXhTbG90TGFiZWxzOwkvLyBNYXhpbXVtIG51bWJlciBvZiBzbG90IGxhYmVscwkwMTgtMDE5Ci0JdTE2CXhTbGljTWF4THBRdWV1ZXM7CS8vIE1heGltdW0gbnVtYmVyIG9mIExQIFF1ZXVlcwkJMDFBLTAxQgotCXU4CXhSc3ZkMls0XTsJCS8vIFJlc2VydmVkCQkJCTAxQy0wMUYKLQl1NjQJeFJzdmQzWzEyXTsJCS8vIFJlc2VydmVkCQkJCTAyMC0wN0YKLQl1MzIJeFBsaWNEbWFMZW5zW0l0RG1hTWF4RW50cmllc107Ly8gQXJyYXkgb2YgRE1BIGxlbmd0aHMJCTA4MC0wQTcKLQl1MzIJeFBsaWNEbWFUb2tzW0l0RG1hTWF4RW50cmllc107Ly8gQXJyYXkgb2YgRE1BIHRva2VucwkJMEE4LTBDRgotCXUzMgl4U2xpY1ZwZExlbnNbSXRWcGRNYXhFbnRyaWVzXTsvLyBBcnJheSBvZiBWUEQgbGVuZ3RocwkJMEQwLTEyRgotCXZvaWQgKiB4U2xpY1ZwZEFkcnNbSXRWcGRNYXhFbnRyaWVzXTsvLyBBcnJheSBvZiBWUEQgYnVmZmVycwkxMzAtMUVGCi19OworZXh0ZXJuIHN0cnVjdCBJdFZwZEFyZWFzCWl0VnBkQXJlYXM7CiAKICNlbmRpZiAvKiBfSVRWUERBUkVBU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0xwYXJEYXRhLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0xwYXJEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NGYzYjYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9McGFyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIExwYXJEYXRhLmgKLSAqIENvcHlyaWdodCAoQykgMjAwMSAgTWlrZSBDb3JyaWdhbiBJQk0gQ29ycG9yYXRpb24KLSAqIAotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaWZuZGVmIF9MUEFSREFUQV9ICi0jZGVmaW5lIF9MUEFSREFUQV9ICi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgotCi0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvSXRMcE5hY2EuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9JdExwUmVnU2F2ZS5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2UmVsZWFzZURhdGEuaD4KLSNpbmNsdWRlIDxhc20vaVNlcmllcy9McGFyTWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvSXRWcGRBcmVhcy5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0l0SXBsUGFybXNSZWFsLmg+Ci0jaW5jbHVkZSA8YXNtL2lTZXJpZXMvSXRFeHRWcGRQYW5lbC5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0l0THBRdWV1ZS5oPgotI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0lvSHJpUHJvY2Vzc29yVnBkLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgTHBhck1hcAl4THBhck1hcDsKLWV4dGVybiBzdHJ1Y3QgSHZSZWxlYXNlRGF0YSBodlJlbGVhc2VEYXRhOwotZXh0ZXJuIHN0cnVjdCBJdExwTmFjYQlpdExwTmFjYTsKLWV4dGVybiBzdHJ1Y3QgSXRJcGxQYXJtc1JlYWwgeEl0SXBsUGFybXNSZWFsOwotZXh0ZXJuIHN0cnVjdCBJdEV4dFZwZFBhbmVsIHhJdEV4dFZwZFBhbmVsOwotZXh0ZXJuIHN0cnVjdCBJb0hyaVByb2Nlc3NvclZwZCB4SW9IcmlQcm9jZXNzb3JWcGRbXTsKLWV4dGVybiBzdHJ1Y3QgSXRMcFF1ZXVlIHhJdExwUXVldWU7Ci1leHRlcm4gc3RydWN0IEl0VnBkQXJlYXMgaXRWcGRBcmVhczsKLWV4dGVybiB1NjQgICAgeE1zVnBkW107Ci1leHRlcm4gc3RydWN0IG1zQ2h1bmtzIG1zQ2h1bmtzOwotCi0KLSNlbmRpZiAvKiBfTFBBUkRBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9McGFyTWFwLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0xwYXJNYXAuaAppbmRleCAwNzUyMDViLi4wMzhlNWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0xwYXJNYXAuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL0xwYXJNYXAuaApAQCAtMSwxNyArMSwxNyBAQAogLyoKICAqIExwYXJNYXAuaAogICogQ29weXJpZ2h0IChDKSAyMDAxICBNaWtlIENvcnJpZ2FuIElCTSBDb3Jwb3JhdGlvbgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQpAQCAtMjEsMTMgKzIxLDE0IEBACiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAotLyogVGhlIGlTZXJpZXMgaHlwZXJ2aXNvciB3aWxsIHNldCB1cCBtYXBwaW5nIGZvciBvbmUgb3IgbW9yZSAKKy8qCisgKiBUaGUgaVNlcmllcyBoeXBlcnZpc29yIHdpbGwgc2V0IHVwIG1hcHBpbmcgZm9yIG9uZSBvciBtb3JlCiAgKiBFU0lEL1ZTSUQgcGFpcnMgKGluIFNMQi9zZWdtZW50IHJlZ2lzdGVycykgYW5kIHdpbGwgc2V0IHVwCiAgKiBtYXBwaW5ncyBvZiBvbmUgb3IgbW9yZSByYW5nZXMgb2YgcGFnZXMgdG8gVkFzLgogICogV2Ugd2lsbCBoYXZlIHRoZSBoeXBlcnZpc29yIHNldCB1cCB0aGUgRVNJRC0+VlNJRCBtYXBwaW5nCiAgKiBmb3IgdGhlIGZvdXIga2VybmVsIHNlZ21lbnRzIChDLUYpLiAgV2l0aCBzaGFyZWQgcHJvY2Vzc29ycywKICAqIHRoZSBoeXBlcnZpc29yIHdpbGwgY2xlYXIgYWxsIHNlZ21lbnQgcmVnaXN0ZXJzIGFuZCByZWxvYWQKLSAqIHRoZXNlIGZvdXIgd2hlbmV2ZXIgdGhlIHByb2Nlc3NvciBpcyBzd2l0Y2hlZCBmcm9tIG9uZSAKKyAqIHRoZXNlIGZvdXIgd2hlbmV2ZXIgdGhlIHByb2Nlc3NvciBpcyBzd2l0Y2hlZCBmcm9tIG9uZQogICogcGFydGl0aW9uIHRvIGFub3RoZXIuCiAgKi8KIApAQCAtMzgsMzAgKzM5LDMxIEBACiAgKiBuZWVkIHRvIGJlIGxvY2F0ZWQgd2l0aGluIHRoZSBsb2FkIGFyZWEgKGlmIHRoZSB0b3RhbCBwYXJ0aXRpb24gc2l6ZQogICogaXMgNjQgTUIpLCBidXQgY2Fubm90IGJlIG1hcHBlZC4gIFR5cGljYWxseSwgdGhpcyBzaG91bGQgc3BlY2lmeQogICogdG8gbWFwIGhhbGYgKDMyIE1CKSBvZiB0aGUgbG9hZCBhcmVhLgotICogCi0gKiBUaGUgaHlwZXJ2aXNvciB3aWxsIHNldCB1cCBwYWdlIHRhYmxlIGVudHJpZXMgZm9yIHRoZSBudW1iZXIgb2YgCisgKgorICogVGhlIGh5cGVydmlzb3Igd2lsbCBzZXQgdXAgcGFnZSB0YWJsZSBlbnRyaWVzIGZvciB0aGUgbnVtYmVyIG9mCiAgKiBwYWdlcyBzcGVjaWZpZWQuCiAgKgogICogSW4gMzItYml0IG1vZGUsIHRoZSBoeXBlcnZpc29yIHdpbGwgbG9hZCBhbGwgZm91ciBvZiB0aGUKLSAqIHNlZ21lbnQgcmVnaXN0ZXJzIChpZGVudGlmaWVkIGJ5IHRoZSBsb3ctb3JkZXIgZm91ciBiaXRzIG9mIHRoZSAKKyAqIHNlZ21lbnQgcmVnaXN0ZXJzIChpZGVudGlmaWVkIGJ5IHRoZSBsb3ctb3JkZXIgZm91ciBiaXRzIG9mIHRoZQogICogRXNpZCBmaWVsZC4gIEluIDY0LWJpdCBtb2RlLCB0aGUgaHlwZXJ2aXNvciB3aWxsIGxvYWQgb25lIFNMQgogICogZW50cnkgdG8gbWFwIHRoZSBFc2lkIHRvIHRoZSBWc2lkLgogKi8KIAotLy8gSHlwZXJ2aXNvciBpbml0aWFsbHkgbWFwcyAzMk1CIG9mIHRoZSBsb2FkIGFyZWEgCi0jZGVmaW5lIEh2UGFnZXNUb01hcCA4MTkyCisvKiBIeXBlcnZpc29yIGluaXRpYWxseSBtYXBzIDMyTUIgb2YgdGhlIGxvYWQgYXJlYSAqLworI2RlZmluZSBIdlBhZ2VzVG9NYXAJODE5MgogCi1zdHJ1Y3QgTHBhck1hcAotewotCXU2NAkgIHhOdW1iZXJFc2lkczsJCS8vIE51bWJlciBvZiBFU0lEL1ZTSUQgcGFpcnMgKDEpCi0JdTY0CSAgeE51bWJlclJhbmdlczsJLy8gTnVtYmVyIG9mIFZBIHJhbmdlcyB0byBtYXAgKDEpCi0JdTY0CSAgeFNlZ21lbnRUYWJsZU9mZnM7CS8vIFBhZ2UgbnVtYmVyIHdpdGhpbiBsb2FkIGFyZWEgb2Ygc2VnIHRhYmxlICgwKQotCXU2NAkgIHhSc3ZkWzVdOwkJLy8gUmVzZXJ2ZWQgKDApCi0JdTY0CSAgeEtlcm5lbEVzaWQ7ICAJLy8gRXNpZCB1c2VkIHRvIG1hcCBrZXJuZWwgbG9hZCAoMHgwQzAwMDAwMDAwKQkKLQl1NjQJICB4S2VybmVsVnNpZDsJCS8vIFZzaWQgdXNlZCB0byBtYXAga2VybmVsIGxvYWQgKDB4MEMwMDAwMDAwMCkKLQl1NjQJICB4UGFnZXM7CQkvLyBOdW1iZXIgb2YgcGFnZXMgdG8gYmUgbWFwcGVkCSg4MTkyKQotCXU2NAkgIHhPZmZzZXQ7CQkvLyBPZmZzZXQgZnJvbSBzdGFydCBvZiBsb2FkIGFyZWEgKDApCi0JdTY0CSAgeFZQTjsJCQkvLyBWaXJ0dWFsIFBhZ2UgTnVtYmVyICgweDAwMEMwMDAwMDAwMDAwMDApCitzdHJ1Y3QgTHBhck1hcCB7CisJdTY0CXhOdW1iZXJFc2lkczsJLy8gTnVtYmVyIG9mIEVTSUQvVlNJRCBwYWlycyAoMSkKKwl1NjQJeE51bWJlclJhbmdlczsJLy8gTnVtYmVyIG9mIFZBIHJhbmdlcyB0byBtYXAgKDEpCisJdTY0CXhTZWdtZW50VGFibGVPZmZzOyAvLyBQYWdlIG51bWJlciB3aXRoaW4gbG9hZCBhcmVhIG9mIHNlZyB0YWJsZSAoMCkKKwl1NjQJeFJzdmRbNV07CisJdTY0CXhLZXJuZWxFc2lkOwkvLyBFc2lkIHVzZWQgdG8gbWFwIGtlcm5lbCBsb2FkICgweDBDMDAwMDAwMDApCisJdTY0CXhLZXJuZWxWc2lkOwkvLyBWc2lkIHVzZWQgdG8gbWFwIGtlcm5lbCBsb2FkICgweDBDMDAwMDAwMDApCisJdTY0CXhQYWdlczsJCS8vIE51bWJlciBvZiBwYWdlcyB0byBiZSBtYXBwZWQJKDgxOTIpCisJdTY0CXhPZmZzZXQ7CS8vIE9mZnNldCBmcm9tIHN0YXJ0IG9mIGxvYWQgYXJlYSAoMCkKKwl1NjQJeFZQTjsJCS8vIFZpcnR1YWwgUGFnZSBOdW1iZXIgKDB4MDAwQzAwMDAwMDAwMDAwMCkKIH07CiAKK2V4dGVybiBzdHJ1Y3QgTHBhck1hcAkJeExwYXJNYXA7CisKICNlbmRpZiAvKiBfTFBBUk1BUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL1htUGNpTHBFdmVudC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9YbVBjaUxwRXZlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNkMjdmMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL1htUGNpTHBFdmVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotCi0jaWZuZGVmCV9fWE1QQ0lMUEVWRU5UX0hfXwotI2RlZmluZQlfX1hNUENJTFBFVkVOVF9IX18KLQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLWludCBYbVBjaUxwRXZlbnRfaW5pdCh2b2lkKTsKLXZvaWQgcHBjX2lycV9kaXNwYXRjaF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXJxKTsKLQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19YTVBDSUxQRVZFTlRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL2lTZXJpZXNfaW8uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19pby5oCmluZGV4IGY1MmI3NTkuLjlmNzk0MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19pby5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19pby5oCkBAIC01LDMyICs1LDMzIEBACiAKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEZpbGUgaVNlcmllc19pby5oIGNyZWF0ZWQgYnkgQWxsYW4gVHJhdXRtYW4gb24gVGh1IERlYyAyOCAyMDAwLiAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUmVtYXBzIHRoZSBpby5oIGZvciB0aGUgaVNlcmllcyBJbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIENvcHlyaWdodCAoQykgMjB5eSAgQWxsYW4gSCBUcmF1dG1hbiwgSUJNIENvcnBvcmF0aW9uICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgKi8KLS8qIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICovCi0vKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAqLwotLyogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAqLyAKLS8qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICovCi0vKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAqLwotLyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAqLyAKLS8qIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZTogICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLS8qIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotLyogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBDaGFuZ2UgQWN0aXZpdHk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBDcmVhdGVkIERlY2VtYmVyIDI4LCAyMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEVuZCBDaGFuZ2UgQWN0aXZpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEZpbGUgaVNlcmllc19pby5oIGNyZWF0ZWQgYnkgQWxsYW4gVHJhdXRtYW4gb24gVGh1IERlYyAyOCAyMDAwLgorICoKKyAqIFJlbWFwcyB0aGUgaW8uaCBmb3IgdGhlIGlTZXJpZXMgSW8KKyAqIENvcHlyaWdodCAoQykgMjAwMCAgQWxsYW4gSCBUcmF1dG1hbiwgSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGU6CisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIENoYW5nZSBBY3Rpdml0eToKKyAqICAgQ3JlYXRlZCBEZWNlbWJlciAyOCwgMjAwMAorICogRW5kIENoYW5nZSBBY3Rpdml0eQorICovCisKIGV4dGVybiB1OCAgIGlTZXJpZXNfUmVhZF9CeXRlKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqIElvQWRkcmVzcyk7CiBleHRlcm4gdTE2ICBpU2VyaWVzX1JlYWRfV29yZChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBJb0FkZHJlc3MpOwogZXh0ZXJuIHUzMiAgaVNlcmllc19SZWFkX0xvbmcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICogSW9BZGRyZXNzKTsKQEAgLTM5LDggKzQwLDEwIEBACiBleHRlcm4gdm9pZCBpU2VyaWVzX1dyaXRlX0xvbmcodTMyIElvRGF0YSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICogSW9BZGRyZXNzKTsKIAogZXh0ZXJuIHZvaWQgaVNlcmllc19tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkZXN0LCBjaGFyIHgsIHNpemVfdCBuKTsKLWV4dGVybiB2b2lkIGlTZXJpZXNfbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkZXN0LCB2b2lkICpzb3VyY2UsIHNpemVfdCBuKTsKLWV4dGVybiB2b2lkIGlTZXJpZXNfbWVtY3B5X2Zyb21pbyh2b2lkICpkZXN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNvdXJjZSwgc2l6ZV90IG4pOworZXh0ZXJuIHZvaWQgaVNlcmllc19tZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRlc3QsIHZvaWQgKnNvdXJjZSwKKwkJc2l6ZV90IG4pOworZXh0ZXJuIHZvaWQgaVNlcmllc19tZW1jcHlfZnJvbWlvKHZvaWQgKmRlc3QsCisJCWNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc291cmNlLCBzaXplX3Qgbik7CiAKICNlbmRpZiAvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KICNlbmRpZiAvKiBfSVNFUklFU19JT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL2lTZXJpZXNfaXJxLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL2lTZXJpZXNfaXJxLmgKaW5kZXggZmY4ZGRlZC4uNmM5NzY3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9pU2VyaWVzX2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19pcnEuaApAQCAtMSwxOSArMSw4IEBACiAjaWZuZGVmCV9fSVNFUklFU19JUlFfSF9fCiAjZGVmaW5lCV9fSVNFUklFU19JUlFfSF9fCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotdm9pZCBpU2VyaWVzX2luaXRfSVJRKHZvaWQpOwotaW50ICBpU2VyaWVzX2FsbG9jYXRlX0lSUShIdkJ1c051bWJlciwgSHZTdWJCdXNOdW1iZXIsIEh2QWdlbnRJZCk7Ci1pbnQgIGlTZXJpZXNfYXNzaWduX0lSUShpbnQsIEh2QnVzTnVtYmVyLCBIdlN1YkJ1c051bWJlciwgSHZBZ2VudElkKTsKLXZvaWQgaVNlcmllc19hY3RpdmF0ZV9JUlFzKHZvaWQpOwotCi1pbnQgWG1QY2lMcEV2ZW50X2luaXQodm9pZCk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCitleHRlcm4gdm9pZCBpU2VyaWVzX2luaXRfSVJRKHZvaWQpOworZXh0ZXJuIGludCAgaVNlcmllc19hbGxvY2F0ZV9JUlEoSHZCdXNOdW1iZXIsIEh2U3ViQnVzTnVtYmVyLCBIdkFnZW50SWQpOworZXh0ZXJuIHZvaWQgaVNlcmllc19hY3RpdmF0ZV9JUlFzKHZvaWQpOwogCiAjZW5kaWYgLyogX19JU0VSSUVTX0lSUV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19wY2kuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19wY2kuaAppbmRleCA1NzY5Y2ZmLi41NzVmNjExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL2lTZXJpZXNfcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9pU2VyaWVzX3BjaS5oCkBAIC0xLDExMiArMSw4OCBAQAogI2lmbmRlZiBfSVNFUklFU182NF9QQ0lfSAogI2RlZmluZSBfSVNFUklFU182NF9QQ0lfSAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRmlsZSBpU2VyaWVzX3BjaS5oIGNyZWF0ZWQgYnkgQWxsYW4gVHJhdXRtYW4gb24gVHVlIEZlYiAyMCwgMjAwMS4gICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEZWZpbmUgc29tZSB1c2VmdWwgbWFjcm9zIGZvciB0aGUgaVNlcmllcyBwY2kgcm91dGluZXMuICAgICAgICAgICAgICAqLwotLyogQ29weXJpZ2h0IChDKSAyMDAxICBBbGxhbiBIIFRyYXV0bWFuLCBJQk0gQ29ycG9yYXRpb24gICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAqLwotLyogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgKi8KLS8qIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICovCi0vKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICovIAotLyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgKi8KLS8qIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICovCi0vKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICovIAotLyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlOiAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotLyogNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCi0vKiBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIENoYW5nZSBBY3Rpdml0eTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIENyZWF0ZWQgRmViIDIwLCAyMDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBBZGRlZCBkZXZpY2UgcmVzZXQsIE1hcmNoIDIyLCAyMDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgUG9ydGVkIHRvIHBwYzY0LCBNYXkgMjUsIDIwMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBFbmQgQ2hhbmdlIEFjdGl2aXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBGaWxlIGlTZXJpZXNfcGNpLmggY3JlYXRlZCBieSBBbGxhbiBUcmF1dG1hbiBvbiBUdWUgRmViIDIwLCAyMDAxLgorICoKKyAqIERlZmluZSBzb21lIHVzZWZ1bCBtYWNyb3MgZm9yIHRoZSBpU2VyaWVzIHBjaSByb3V0aW5lcy4KKyAqIENvcHlyaWdodCAoQykgMjAwMSAgQWxsYW4gSCBUcmF1dG1hbiwgSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGU6CisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIENoYW5nZSBBY3Rpdml0eToKKyAqICAgQ3JlYXRlZCBGZWIgMjAsIDIwMDEKKyAqICAgQWRkZWQgZGV2aWNlIHJlc2V0LCBNYXJjaCAyMiwgMjAwMQorICogICBQb3J0ZWQgdG8gcHBjNjQsIE1heSAyNSwgMjAwMQorICogRW5kIENoYW5nZSBBY3Rpdml0eQorICovCiAKICNpbmNsdWRlIDxhc20vaVNlcmllcy9IdkNhbGxQY2kuaD4KICNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KIAotc3RydWN0IHBjaV9kZXY7CQkJCS8qIEZvciBGb3J3YXJkIFJlZmVyZW5jZSAgICAgICAgKi8KK3N0cnVjdCBwY2lfZGV2OwkJCQkvKiBGb3IgRm9yd2FyZCBSZWZlcmVuY2UgKi8KIHN0cnVjdCBpU2VyaWVzX0RldmljZV9Ob2RlOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogR2V0cyBpU2VyaWVzIEJ1cywgU3ViQnVzLCBEZXZGbiB1c2luZyBpU2VyaWVzX0RldmljZV9Ob2RlIHN0cnVjdHVyZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBHZXRzIGlTZXJpZXMgQnVzLCBTdWJCdXMsIERldkZuIHVzaW5nIGlTZXJpZXNfRGV2aWNlX05vZGUgc3RydWN0dXJlCisgKi8KIAogI2RlZmluZSBJU0VSSUVTX0JVUyhEZXZQdHIpCURldlB0ci0+RHNhQWRkci5Ec2EuYnVzTnVtYmVyCiAjZGVmaW5lIElTRVJJRVNfU1VCQlVTKERldlB0cikJRGV2UHRyLT5Ec2FBZGRyLkRzYS5zdWJCdXNOdW1iZXIKICNkZWZpbmUgSVNFUklFU19ERVZJQ0UoRGV2UHRyKQlEZXZQdHItPkRzYUFkZHIuRHNhLmRldmljZUlkCiAjZGVmaW5lIElTRVJJRVNfRFNBKERldlB0cikJRGV2UHRyLT5Ec2FBZGRyLkRzYUFkZHIKLSNkZWZpbmUgSVNFUklFU19ERVZGVU4oRGV2UHRyKQlEZXZQdHItPkRldkZuCi0jZGVmaW5lIElTRVJJRVNfREVWTk9ERShQY2lEZXYpICgoc3RydWN0IGlTZXJpZXNfRGV2aWNlX05vZGUqKVBjaURldi0+c3lzZGF0YSkKKyNkZWZpbmUgSVNFUklFU19ERVZOT0RFKFBjaURldikJKChzdHJ1Y3QgaVNlcmllc19EZXZpY2VfTm9kZSAqKVBjaURldi0+c3lzZGF0YSkKIAogI2RlZmluZSBFQURzTWF4QWdlbnRzIDcKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERlY29kZXMgTGludXggRGV2Rm4gdG8gaVNlcmllcyBEZXZGbiwgYnJpZGdlIGRldmljZSwgb3IgZnVuY3Rpb24uICAgICovCi0vKiBGb3IgTGludXgsIHNlZSBQQ0lfU0xPVCBhbmQgUENJX0ZVTkMgaW4gaW5jbHVkZS9saW51eC9wY2kuaCAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBEZWNvZGVzIExpbnV4IERldkZuIHRvIGlTZXJpZXMgRGV2Rm4sIGJyaWRnZSBkZXZpY2UsIG9yIGZ1bmN0aW9uLgorICogRm9yIExpbnV4LCBzZWUgUENJX1NMT1QgYW5kIFBDSV9GVU5DIGluIGluY2x1ZGUvbGludXgvcGNpLmgKKyAqLwogCi0jZGVmaW5lIElTRVJJRVNfUENJX0FHRU5USUQoaWRzZWwsZnVuYykJKChpZHNlbCAmIDB4MEYpIDw8IDQpIHwgKGZ1bmMgICYgMHgwNykKLSNkZWZpbmUgSVNFUklFU19FTkNPREVfREVWSUNFKGFnZW50aWQpCSgoMHgxMCkgfCAoKGFnZW50aWQmMHgyMCk+PjIpIHwgKGFnZW50aWQmMDcpKQorI2RlZmluZSBJU0VSSUVTX1BDSV9BR0VOVElEKGlkc2VsLCBmdW5jKQlcCisJKCgoaWRzZWwgJiAweDBGKSA8PCA0KSB8IChmdW5jICYgMHgwNykpCisjZGVmaW5lIElTRVJJRVNfRU5DT0RFX0RFVklDRShhZ2VudGlkKQkJXAorCSgoMHgxMCkgfCAoKGFnZW50aWQgJiAweDIwKSA+PiAyKSB8IChhZ2VudGlkICYgMHgwNykpCiAKLSNkZWZpbmUgSVNFUklFU19HRVRfREVWSUNFX0ZST01fU1VCQlVTKHN1YmJ1cykgICAoKHN1YmJ1cyA+PiA1KSAmIDB4NykKLSNkZWZpbmUgSVNFUklFU19HRVRfRlVOQ1RJT05fRlJPTV9TVUJCVVMoc3ViYnVzKSAoKHN1YmJ1cyA+PiAyKSAmIDB4NykKKyNkZWZpbmUgSVNFUklFU19HRVRfREVWSUNFX0ZST01fU1VCQlVTKHN1YmJ1cykJCSgoc3ViYnVzID4+IDUpICYgMHg3KQorI2RlZmluZSBJU0VSSUVTX0dFVF9GVU5DVElPTl9GUk9NX1NVQkJVUyhzdWJidXMpCSgoc3ViYnVzID4+IDIpICYgMHg3KQogCiAvKgotICogTi5CLiB0aGUgSVNFUklFU19ERUNPREVfKiBtYWNyb3MgYXJlIG5vdCB1c2VkIGFueXdoZXJlLCBhbmQgSSB0aGluawotICogdGhlIDB4NzEgKGF0IGxlYXN0KSBtdXN0IGJlIHdyb25nIC0gMHg3OCBtYXliZT8gIC0tIHBhdWx1cy4KKyAqIENvbnZlcnRzIFZpcnR1YWwgQWRkcmVzcyB0byBSZWFsIEFkZHJlc3MgZm9yIEh5cGVydmlzb3IgY2FsbHMKICAqLwotI2RlZmluZSBJU0VSSUVTX0RFQ09ERV9ERVZGTihsaW51eGRldmZuKSAgKCgobGludXhkZXZmbiAmIDB4NzEpIDw8IDEpIHwgKGxpbnV4ZGV2Zm4gJiAweDA3KSkKLSNkZWZpbmUgSVNFUklFU19ERUNPREVfREVWSUNFKGxpbnV4ZGV2Zm4pICgoKGxpbnV4ZGV2Zm4gJiAweDM4KSA+PiAzKSB8KCgobGludXhkZXZmbiAmIDB4NDApID4+IDIpICsgMHgxMCkpCi0jZGVmaW5lIElTRVJJRVNfREVDT0RFX0ZVTkNUSU9OKGxpbnV4ZGV2Zm4pIChsaW51eGRldmZuICYgMHgwNykKKyNkZWZpbmUgSVNFUklFU19IVl9BRERSKHZpcnRhZGRyKQlcCisJKDB4ODAwMDAwMDAwMDAwMDAwMCB8IHZpcnRfdG9fYWJzKHZpcnRhZGRyKSkKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIENvbnZlcnRzIFZpcnR1YWwgQWRkcmVzcyB0byBSZWFsIEFkZHJlc3MgZm9yIEh5cGVydmlzb3IgY2FsbHMgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElTRVJJRVNfSFZfQUREUih2aXJ0YWRkcikgICgweDgwMDAwMDAwMDAwMDAwMDAgfCB2aXJ0X3RvX2Ficyh2aXJ0YWRkcikpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBpU2VyaWVzIERldmljZSBJbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQorLyoKKyAqIGlTZXJpZXMgRGV2aWNlIEluZm9ybWF0aW9uCisgKi8KIHN0cnVjdCBpU2VyaWVzX0RldmljZV9Ob2RlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIERldmljZV9MaXN0OwotCXN0cnVjdCBwY2lfZGV2KiBQY2lEZXY7ICAgICAgICAgLyogUG9pbnRlciB0byBwY2lfZGV2IHN0cnVjdHVyZSovCi0gICAgICAgIHVuaW9uIEh2RHNhTWFwCURzYUFkZHI7CS8qIERpcmVjdCBTZWxlY3QgQWRkcmVzcyAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1c051bWJlcixzdWJCdXNOdW1iZXIsICAgICAqLyAKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRldmljZUlkLCBiYXJOdW1iZXIgICAgICAgICAqLwotCUh2QWdlbnRJZCAgICAgICBBZ2VudElkOwkvKiBIeXBlcnZpc29yIERldkZuICAgICAgICAgICAgKi8KLQlpbnQgICAgICAgICAgICAgRGV2Rm47ICAgICAgICAgIC8qIExpbnV4IGRldmZuICAgICAgICAgICAgICAgICAqLwotCWludCAgICAgICAgICAgICBCYXJPZmZzZXQ7Ci0JaW50ICAgICAgICAgICAgIElycTsgICAgICAgICAgICAvKiBBc3NpZ25lZCBJUlEgICAgICAgICAgICAgICAgKi8KLQlpbnQgICAgICAgICAgICAgUmV0dXJuQ29kZTsJLyogUmV0dXJuIENvZGUgSG9sZGVyICAgICAgICAgICovCi0JaW50ICAgICAgICAgICAgIElvUmV0cnk7ICAgICAgICAvKiBDdXJyZW50IFJldHJ5IENvdW50ICAgICAgICAgKi8KLQlpbnQgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgIC8qIFBvc3NpYmxlIGZsYWdzKGRpc2FibGUvYmlzdCkqLwotCXUxNiAgICAgICAgICAgICBWZW5kb3I7ICAgICAgICAgLyogVmVuZG9yIElEICAgICAgICAgICAgICAgICAgICovCi0JdTggICAgICAgICAgICAgIExvZ2ljYWxTbG90OyAgICAvKiBIdiBTbG90IEluZGV4IGZvciBUY2VzICAgICAgKi8KLQlzdHJ1Y3QgaW9tbXVfdGFibGUqIGlvbW11X3RhYmxlOy8qIERldmljZSBUQ0UgVGFibGUgICAgICAgICAgICAqLyAKLQl1OCAgICAgICAgICAgICAgUGhiSWQ7ICAgICAgICAgIC8qIFBoYiBDYXJkIGlzIG9uLiAgICAgICAgICAgICAqLwotCXUxNiAgICAgICAgICAgICBCb2FyZDsgICAgICAgICAgLyogQm9hcmQgTnVtYmVyICAgICAgICAgICAgICAgICovCi0JdTggICAgICAgICAgICAgIEZyYW1lSWQ7CS8qIGlTZXJpZXMgc3BjbiBGcmFtZSBJZCAgICAgICAqLwotCWNoYXIgICAgICAgICAgICBDYXJkTG9jYXRpb25bNF07LyogQ2hhciBmb3JtYXQgb2YgcGxhbmFyIHZwZCAgICovCi0JY2hhciAgICAgICAgICAgIExvY2F0aW9uWzIwXTsgICAvKiBGcmFtZSAgMSwgQ2FyZCBDMTAgICAgICAgICAgKi8KKwlzdHJ1Y3QgcGNpX2RldgkqUGNpRGV2OworCXVuaW9uIEh2RHNhTWFwCURzYUFkZHI7CS8qIERpcmVjdCBTZWxlY3QgQWRkcmVzcyAqLworCQkJCQkvKiBidXNOdW1iZXIsIHN1YkJ1c051bWJlciwgKi8KKwkJCQkJLyogZGV2aWNlSWQsIGJhck51bWJlciAqLworCWludAkJRGV2Rm47CQkvKiBMaW51eCBkZXZmbiAqLworCWludAkJSXJxOwkJLyogQXNzaWduZWQgSVJRICovCisJaW50CQlGbGFnczsJCS8qIFBvc3NpYmxlIGZsYWdzKGRpc2FibGUvYmlzdCkqLworCXU4CQlMb2dpY2FsU2xvdDsJLyogSHYgU2xvdCBJbmRleCBmb3IgVGNlcyAqLworCXN0cnVjdCBpb21tdV90YWJsZSAqaW9tbXVfdGFibGU7LyogRGV2aWNlIFRDRSBUYWJsZSAqLwogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1leHRlcm4gaW50ICAgICAgICAgICBpU2VyaWVzX0RldmljZV9JbmZvcm1hdGlvbihzdHJ1Y3QgcGNpX2RldiosY2hhciosIGludCk7Ci1leHRlcm4gdm9pZCAgICAgICAgICBpU2VyaWVzX0dldF9Mb2NhdGlvbl9Db2RlKHN0cnVjdCBpU2VyaWVzX0RldmljZV9Ob2RlKik7Ci1leHRlcm4gaW50ICAgICAgICAgICBpU2VyaWVzX0RldmljZV9Ub2dnbGVSZXNldChzdHJ1Y3QgcGNpX2RldiogUGNpRGV2LCBpbnQgQXNzZXJ0VGltZSwgaW50IERlbGF5VGltZSk7CitleHRlcm4gdm9pZAlpU2VyaWVzX0RldmljZV9JbmZvcm1hdGlvbihzdHJ1Y3QgcGNpX2RldiosIGludCk7CiAKICNlbmRpZiAvKiBfSVNFUklFU182NF9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9pU2VyaWVzX3Byb2MuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19wcm9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYjZkYzE0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvaVNlcmllc19wcm9jLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKgotICogaVNlcmllc19wcm9jLmgKLSAqIENvcHlyaWdodCAoQykgMjAwMSAgS3lsZSBBLiBMdWNrZSBJQk0gQ29ycG9yYXRpb24KLSAqIAotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKLSAqLwotI2lmbmRlZiBfSVNFUklFU19QUk9DX0gKLSNkZWZpbmUgX0lTRVJJRVNfUFJPQ19ICi0KLWV4dGVybiB2b2lkIGlTZXJpZXNfcHJvY19lYXJseV9pbml0KHZvaWQpOwotCi0jZW5kaWYgLyogX2lTZXJpZXNfUFJPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL21mLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL21mLmgKaW5kZXggZGIzMzNlMS4uN2U2YTBkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaVNlcmllcy9tZi5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvbWYuaApAQCAtOSwxNyArOSwxNiBAQAogICogYWxsIHBhcnRpdGlvbnMgaW4gdGhlIGlTZXJpZXMuICBJdCBhbHNvIHByb3ZpZGVzIG1pc2NlbGxhbmVvdXMgbG93LWxldmVsCiAgKiBtYWNoaW5lIGZhY2lsaXR5IHR5cGUgb3BlcmF0aW9ucy4KICAqCi0gKiAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvdmlvLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL3Zpby5oCmluZGV4IDNlNTc2NmEuLjZjMDVlNjI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9pU2VyaWVzL3Zpby5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2lTZXJpZXMvdmlvLmgKQEAgLTgsMzIgKzgsMzIgQEAKICAqICAgICAgICAgICBDb2xpbiBEZXZpbGJpc3MgPGRldmlsYmlzQHVzLmlibS5jb20+CiAgKgogICogKEMpIENvcHlyaWdodCAyMDAwIElCTSBDb3Jwb3JhdGlvbgotICogCisgKgogICogVGhpcyBoZWFkZXIgZmlsZSBpcyB1c2VkIGJ5IHRoZSBpU2VyaWVzIHZpcnR1YWwgSS9PIGRldmljZQogICogZHJpdmVycy4gIEl0IGRlZmluZXMgdGhlIGludGVyZmFjZXMgdG8gdGhlIGNvbW1vbiBmdW5jdGlvbnMKICAqIChpbXBsZW1lbnRlZCBpbiBkcml2ZXJzL2NoYXIvdmlvcGF0aC5oKSBhcyB3ZWxsIGFzIGRlZmluaW5nCi0gKiBjb21tb24gZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzLiAgQ3VycmVudGx5IChhdCB0aGUgdGltZSBJIAorICogY29tbW9uIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcy4gIEN1cnJlbnRseSAoYXQgdGhlIHRpbWUgSQogICogd3JvdGUgdGhpcyBjb21tZW50KSB0aGUgaVNlcmllcyB2aXJ0dWFsIEkvTyBkZXZpY2UgZHJpdmVycwotICogdGhhdCB1c2UgdGhpcyBhcmUgCi0gKiAgIGRyaXZlcnMvYmxvY2svdmlvZGFzZC5jIAorICogdGhhdCB1c2UgdGhpcyBhcmUKKyAqICAgZHJpdmVycy9ibG9jay92aW9kYXNkLmMKICAqICAgZHJpdmVycy9jaGFyL3Zpb2NvbnMuYwogICogICBkcml2ZXJzL2NoYXIvdmlvdGFwZS5jCiAgKiAgIGRyaXZlcnMvY2Ryb20vdmlvY2QuYwogICoKICAqIFRoZSBpU2VyaWVzIHZpcnR1YWwgZXRoZXJuZXQgc3VwcG9ydCAodmV0aC5jKSB1c2VzIGEgd2hvbGUKICAqIGRpZmZlcmVudCBzZXQgb2YgZnVuY3Rpb25zLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKICAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55dSBsYXRlciB2ZXJzaW9uLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgCisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKICAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAgKgpAQCAtNDQsMzkgKzQ0LDQxIEBACiAjaW5jbHVkZSA8YXNtL2lTZXJpZXMvSHZUeXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pU2VyaWVzL0h2THBFdmVudC5oPgogCi0vKiBpU2VyaWVzIHZpcnR1YWwgSS9PIGV2ZW50cyB1c2UgdGhlIHN1YnR5cGUgZmllbGQgaW4KKy8qCisgKiBpU2VyaWVzIHZpcnR1YWwgSS9PIGV2ZW50cyB1c2UgdGhlIHN1YnR5cGUgZmllbGQgaW4KICAqIEh2THBFdmVudCB0byBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiB2aW8gZXZlbnQgaXMgY29taW5nCiAgKiBpbi4gIFdlIHVzZSBhIHRhYmxlIHRvIHJvdXRlIHRoZXNlLCBhbmQgdGhpcyBkZWZpbmVzCiAgKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZGlzdGluY3Qgc3VidHlwZXMKICAqLwogI2RlZmluZSBWSU9fTUFYX1NVQlRZUEVTIDgKIAotLyogRWFjaCBzdWJ0eXBlIGNhbiByZWdpc3RlciBhIGhhbmRsZXIgdG8gcHJvY2VzcyB0aGVpciBldmVudHMuCisvKgorICogRWFjaCBzdWJ0eXBlIGNhbiByZWdpc3RlciBhIGhhbmRsZXIgdG8gcHJvY2VzcyB0aGVpciBldmVudHMuCiAgKiBUaGUgaGFuZGxlciBtdXN0IGhhdmUgdGhpcyBpbnRlcmZhY2UuCiAgKi8KIHR5cGVkZWYgdm9pZCAodmlvX2V2ZW50X2hhbmRsZXJfdCkgKHN0cnVjdCBIdkxwRXZlbnQgKiBldmVudCk7CiAKLWludCB2aW9wYXRoX29wZW4oSHZMcEluZGV4IHJlbW90ZUxwLCBpbnQgc3VidHlwZSwgaW50IG51bVJlcSk7Ci1pbnQgdmlvcGF0aF9jbG9zZShIdkxwSW5kZXggcmVtb3RlTHAsIGludCBzdWJ0eXBlLCBpbnQgbnVtUmVxKTsKLWludCB2aW9fc2V0SGFuZGxlcihpbnQgc3VidHlwZSwgdmlvX2V2ZW50X2hhbmRsZXJfdCAqIGJlaCk7Ci1pbnQgdmlvX2NsZWFySGFuZGxlcihpbnQgc3VidHlwZSk7Ci1pbnQgdmlvcGF0aF9pc2FjdGl2ZShIdkxwSW5kZXggbHApOwotSHZMcEluc3RhbmNlSWQgdmlvcGF0aF9zb3VyY2VpbnN0KEh2THBJbmRleCBscCk7Ci1IdkxwSW5zdGFuY2VJZCB2aW9wYXRoX3RhcmdldGluc3QoSHZMcEluZGV4IGxwKTsKLXZvaWQgdmlvX3NldF9ob3N0bHAodm9pZCk7Ci12b2lkICp2aW9fZ2V0X2V2ZW50X2J1ZmZlcihpbnQgc3VidHlwZSk7Ci12b2lkIHZpb19mcmVlX2V2ZW50X2J1ZmZlcihpbnQgc3VidHlwZSwgdm9pZCAqYnVmZmVyKTsKK2V4dGVybiBpbnQgdmlvcGF0aF9vcGVuKEh2THBJbmRleCByZW1vdGVMcCwgaW50IHN1YnR5cGUsIGludCBudW1SZXEpOworZXh0ZXJuIGludCB2aW9wYXRoX2Nsb3NlKEh2THBJbmRleCByZW1vdGVMcCwgaW50IHN1YnR5cGUsIGludCBudW1SZXEpOworZXh0ZXJuIGludCB2aW9fc2V0SGFuZGxlcihpbnQgc3VidHlwZSwgdmlvX2V2ZW50X2hhbmRsZXJfdCAqIGJlaCk7CitleHRlcm4gaW50IHZpb19jbGVhckhhbmRsZXIoaW50IHN1YnR5cGUpOworZXh0ZXJuIGludCB2aW9wYXRoX2lzYWN0aXZlKEh2THBJbmRleCBscCk7CitleHRlcm4gSHZMcEluc3RhbmNlSWQgdmlvcGF0aF9zb3VyY2VpbnN0KEh2THBJbmRleCBscCk7CitleHRlcm4gSHZMcEluc3RhbmNlSWQgdmlvcGF0aF90YXJnZXRpbnN0KEh2THBJbmRleCBscCk7CitleHRlcm4gdm9pZCB2aW9fc2V0X2hvc3RscCh2b2lkKTsKK2V4dGVybiB2b2lkICp2aW9fZ2V0X2V2ZW50X2J1ZmZlcihpbnQgc3VidHlwZSk7CitleHRlcm4gdm9pZCB2aW9fZnJlZV9ldmVudF9idWZmZXIoaW50IHN1YnR5cGUsIHZvaWQgKmJ1ZmZlcik7CiAKIGV4dGVybiBIdkxwSW5kZXggdmlvcGF0aF9ob3N0THA7CiBleHRlcm4gSHZMcEluZGV4IHZpb3BhdGhfb3VyTHA7CiAKLSNkZWZpbmUgVklPQ0hBUl9NQVhfREFUQSAyMDAKKyNkZWZpbmUgVklPQ0hBUl9NQVhfREFUQQkyMDAKIAotI2RlZmluZSBWSU9NQUpPUl9TVUJUWVBFX01BU0sgMHhmZjAwCi0jZGVmaW5lIFZJT01JTk9SX1NVQlRZUEVfTUFTSyAweDAwZmYKLSNkZWZpbmUgVklPTUFKT1JfU1VCVFlQRV9TSElGVCA4CisjZGVmaW5lIFZJT01BSk9SX1NVQlRZUEVfTUFTSwkweGZmMDAKKyNkZWZpbmUgVklPTUlOT1JfU1VCVFlQRV9NQVNLCTB4MDBmZgorI2RlZmluZSBWSU9NQUpPUl9TVUJUWVBFX1NISUZUCTgKIAotI2RlZmluZSBWSU9WRVJTSU9OICAgICAgICAgICAgMHgwMTAxCisjZGVmaW5lIFZJT1ZFUlNJT04JCTB4MDEwMQogCiAvKgogICogVGhpcyBpcyB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgZm9yIFZJTyBlcnJvcnM7IGVhY2ggbW9kdWxlIHNob3VsZCBoYXZlCkBAIC04OSw4ICs5MSw4IEBACiAJaW50IGVycm5vOwogCWNvbnN0IGNoYXIgKm1zZzsKIH07Ci1jb25zdCBzdHJ1Y3QgdmlvX2Vycm9yX2VudHJ5ICp2aW9fbG9va3VwX3JjKGNvbnN0IHN0cnVjdCB2aW9fZXJyb3JfZW50cnkKLQkJCQkJICAgICpsb2NhbF90YWJsZSwgdTE2IHJjKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdmlvX2Vycm9yX2VudHJ5ICp2aW9fbG9va3VwX3JjKAorCQljb25zdCBzdHJ1Y3QgdmlvX2Vycm9yX2VudHJ5ICpsb2NhbF90YWJsZSwgdTE2IHJjKTsKIAogZW51bSB2aW9zdWJ0eXBlcyB7CiAJdmlvbWFqb3JzdWJ0eXBlX21vbml0b3IgPSAweDAxMDAsCkBAIC0xMDIsNyArMTA0LDYgQEAKIAl2aW9tYWpvcnN1YnR5cGVfc2NzaSA9IDB4MDcwMAogfTsKIAotCiBlbnVtIHZpb2NvbmZpZ3N1YnR5cGUgewogCXZpb2NvbmZpZ2dldCA9IDB4MDAwMSwKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9pbWFsbG9jLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pbWFsbG9jLmgKaW5kZXggM2E0NWU5MS4uZTQ2ZmY2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaW1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2ltYWxsb2MuaApAQCAtNCw5ICs0LDkgQEAKIC8qCiAgKiBEZWZpbmUgdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIGltYWxsb2MgVk0gYXJlYS4KICAqLwotI2RlZmluZSBQSEJTX0lPX0JBU0UgIAkgIElPUkVHSU9OQkFTRQotI2RlZmluZSBJTUFMTE9DX0JBU0UgICAgICAoSU9SRUdJT05CQVNFICsgMHg4MDAwMDAwMHVsKQkvKiBSZXNlcnZlIDIgZ2lncyBmb3IgUEhCcyAqLwotI2RlZmluZSBJTUFMTE9DX0VORCAgICAgICAoSU9SRUdJT05CQVNFICsgRUFERFJfTUFTSykKKyNkZWZpbmUgUEhCU19JT19CQVNFICAJICBWTUFMTE9DX0VORAorI2RlZmluZSBJTUFMTE9DX0JBU0UgICAgICAoUEhCU19JT19CQVNFICsgMHg4MDAwMDAwMHVsKQkvKiBSZXNlcnZlIDIgZ2lncyBmb3IgUEhCcyAqLworI2RlZmluZSBJTUFMTE9DX0VORCAgICAgICAoVk1BTExPQ19TVEFSVCArIEVBRERSX01BU0spCiAKIAogLyogaW1hbGxvYyByZWdpb24gdHlwZXMgKi8KQEAgLTE4LDcgKzE4LDkgQEAKIAogZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKiBpbV9nZXRfZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqIGltX2dldF9hcmVhKHVuc2lnbmVkIGxvbmcgdl9hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQlpbnQgcmVnaW9uX3R5cGUpOwotdW5zaWduZWQgbG9uZyBpbV9mcmVlKHZvaWQgKmFkZHIpOworCQkJCSAgICAgIGludCByZWdpb25fdHlwZSk7CitleHRlcm4gdm9pZCBpbV9mcmVlKHZvaWQgKmFkZHIpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBpb3JlbWFwX2JvdDsKIAogI2VuZGlmIC8qIF9QUEM2NF9JTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2lvbW11LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9pb21tdS5oCmluZGV4IGJkNTNjYTQuLjcyOWRlNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2lvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvaW9tbXUuaApAQCAtODIsMjQgKzgyLDYgQEAKIAl1bnNpZ25lZCBsb25nICppdF9tYXA7ICAgICAgIC8qIEEgc2ltcGxlIGFsbG9jYXRpb24gYml0bWFwIGZvciBub3cgKi8KIH07CiAKLSNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLXN0cnVjdCBpb21tdV90YWJsZV9jYiB7Ci0JdW5zaWduZWQgbG9uZwlpdGNfYnVzbm87CS8qIEJ1cyBudW1iZXIgZm9yIHRoaXMgdGNlIHRhYmxlICovCi0JdW5zaWduZWQgbG9uZwlpdGNfc3RhcnQ7CS8qIFdpbGwgYmUgTlVMTCBmb3Igc2Vjb25kYXJ5ICovCi0JdW5zaWduZWQgbG9uZwlpdGNfdG90YWxzaXplOwkvKiBTaXplIChpbiBwYWdlcykgb2Ygd2hvbGUgdGFibGUgKi8KLQl1bnNpZ25lZCBsb25nCWl0Y19vZmZzZXQ7CS8qIEluZGV4IGludG8gcmVhbCB0Y2UgdGFibGUgb2YgdGhlCi0JCQkJCSAgIHN0YXJ0IG9mIG91ciBzZWN0aW9uICovCi0JdW5zaWduZWQgbG9uZwlpdGNfc2l6ZTsJLyogU2l6ZSAoaW4gcGFnZXMpIG9mIG91ciBzZWN0aW9uICovCi0JdW5zaWduZWQgbG9uZwlpdGNfaW5kZXg7CS8qIEluZGV4IG9mIHRoaXMgdGNlIHRhYmxlICovCi0JdW5zaWduZWQgc2hvcnQJaXRjX21heHRhYmxlczsJLyogTWF4IG51bSBvZiB0YWJsZXMgZm9yIHBhcnRpdGlvbiAqLwotCXVuc2lnbmVkIGNoYXIJaXRjX3ZpcnRidXM7CS8qIEZsYWcgdG8gaW5kaWNhdGUgdmlydHVhbCBidXMgKi8KLSAJdW5zaWduZWQgY2hhcglpdGNfc2xvdG5vOwkvKiBJT0EgVGNlIFNsb3QgSW5kZXggKi8KLSAJdW5zaWduZWQgY2hhcglpdGNfcnN2ZFs0XTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgaW9tbXVfdGFibGUgdmlvX3RjZV90YWJsZTsgICAgICAvKiBUY2UgdGFibGUgZm9yIHZpcnR1YWwgYnVzICovCi0jZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCi0KIHN0cnVjdCBzY2F0dGVybGlzdDsKIAogI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQpAQCAtMTIyLDkgKzEwNCw2IEBACiAKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIAotLyogV2Fsa3MgYWxsIGJ1c2VzIGFuZCBjcmVhdGVzIGlvbW11IHRhYmxlcyAqLwotZXh0ZXJuIHZvaWQgaW9tbXVfc2V0dXBfaVNlcmllcyh2b2lkKTsKLQogLyogSW5pdGlhbGl6ZXMgdGFibGVzIGZvciBiaW8gYnVzZXMgKi8KIGV4dGVybiB2b2lkIF9faW5pdCBpb21tdV92aW9faW5pdCh2b2lkKTsKIApAQCAtMTU4LDggKzEzNywxMiBAQAogZXh0ZXJuIHZvaWQgaW9tbXVfaW5pdF9lYXJseV9pU2VyaWVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW9tbXVfaW5pdF9lYXJseV91Myh2b2lkKTsKIAorI2lmZGVmIENPTkZJR19QQ0kKIGV4dGVybiB2b2lkIHBjaV9pb21tdV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcGNpX2RpcmVjdF9pb21tdV9pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfaW9tbXVfaW5pdCh2b2lkKSB7IH0KKyNlbmRpZgogCiBleHRlcm4gdm9pZCBhbGxvY191M19kYXJ0X3RhYmxlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wYWNhLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wYWNhLmgKaW5kZXggMWEwMjIzYi4uYWU3NmNhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGFjYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BhY2EuaApAQCAtMjAsMTMgKzIwLDEzIEBACiAjaW5jbHVkZQk8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZQk8YXNtL2xwcGFjYS5oPgogI2luY2x1ZGUJPGFzbS9pU2VyaWVzL0l0THBSZWdTYXZlLmg+CisjaW5jbHVkZQk8YXNtL2lTZXJpZXMvSXRMcFF1ZXVlLmg+CiAjaW5jbHVkZQk8YXNtL21tdS5oPgogCiByZWdpc3RlciBzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKmxvY2FsX3BhY2EgYXNtKCJyMTMiKTsKICNkZWZpbmUgZ2V0X3BhY2EoKQlsb2NhbF9wYWNhCiAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKLXN0cnVjdCBJdExwUXVldWU7CiAKIC8qCiAgKiBEZWZpbmVzIHRoZSBsYXlvdXQgb2YgdGhlIHBhY2EuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmgKaW5kZXggYmNkMjE3OC4uMjU3ZDg3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BhZ2UuaApAQCAtMjAyLDkgKzIwMiw3IEBACiAjZGVmaW5lIFBBR0VfT0ZGU0VUICAgICBBU01fQ09OU1QoMHhDMDAwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBLRVJORUxCQVNFICAgICAgUEFHRV9PRkZTRVQKICNkZWZpbmUgVk1BTExPQ0JBU0UgICAgIEFTTV9DT05TVCgweEQwMDAwMDAwMDAwMDAwMDApCi0jZGVmaW5lIElPUkVHSU9OQkFTRSAgICBBU01fQ09OU1QoMHhFMDAwMDAwMDAwMDAwMDAwKQogCi0jZGVmaW5lIElPX1JFR0lPTl9JRCAgICAgICAoSU9SRUdJT05CQVNFID4+IFJFR0lPTl9TSElGVCkKICNkZWZpbmUgVk1BTExPQ19SRUdJT05fSUQgIChWTUFMTE9DQkFTRSA+PiBSRUdJT05fU0hJRlQpCiAjZGVmaW5lIEtFUk5FTF9SRUdJT05fSUQgICAoS0VSTkVMQkFTRSA+PiBSRUdJT05fU0hJRlQpCiAjZGVmaW5lIFVTRVJfUkVHSU9OX0lEICAgICAoMFVMKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGd0YWJsZS5oCmluZGV4IDI2NGM0ZjcuLjQ2Y2Y2MWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wZ3RhYmxlLmgKQEAgLTUzLDcgKzUzLDggQEAKICAqIERlZmluZSB0aGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhLgogICovCiAjZGVmaW5lIFZNQUxMT0NfU1RBUlQgKDB4RDAwMDAwMDAwMDAwMDAwMHVsKQotI2RlZmluZSBWTUFMTE9DX0VORCAgIChWTUFMTE9DX1NUQVJUICsgRUFERFJfTUFTSykKKyNkZWZpbmUgVk1BTExPQ19TSVpFICAoMHgxMDAwMDAwMDAwMFVMKQorI2RlZmluZSBWTUFMTE9DX0VORCAgIChWTUFMTE9DX1NUQVJUICsgVk1BTExPQ19TSVpFKQogCiAvKgogICogQml0cyBpbiBhIGxpbnV4LXN0eWxlIFBURS4gIFRoZXNlIG1hdGNoIHRoZSBiaXRzIGluIHRoZQpAQCAtMjM5LDkgKzI0MCw2IEBACiAvKiBUaGlzIG5vdyBvbmx5IGNvbnRhaW5zIHRoZSB2bWFsbG9jIHBhZ2VzICovCiAjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQogCi0vKiB0byBmaW5kIGFuIGVudHJ5IGluIHRoZSBpb3JlbWFwIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCi0jZGVmaW5lIHBnZF9vZmZzZXRfaShhZGRyZXNzKSAoaW9yZW1hcF9wZ2QgKyBwZ2RfaW5kZXgoYWRkcmVzcykpCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCiAgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCkBAIC00NTksMTUgKzQ1NywxMiBAQAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU0FNRQogI2RlZmluZSBwdGVfc2FtZShBLEIpCSgoKHB0ZV92YWwoQSkgXiBwdGVfdmFsKEIpKSAmIH5fUEFHRV9IUFRFRkxBR1MpID09IDApCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGlvcmVtYXBfYm90LCBpb3JlbWFwX2Jhc2U7Ci0KICNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKIAlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwOHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBtZF92YWwoZSkpCiAjZGVmaW5lIHBnZF9FUlJPUihlKSBcCiAJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDh4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQogCiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbXTsKLWV4dGVybiBwZ2RfdCBpb3JlbWFwX2RpcltdOwogCiBleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wcm9jZXNzb3IuaAppbmRleCA4MDljNjM0Yi4uMzA4NDA5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcHJvY2Vzc29yLmgKQEAgLTQzMCwxNiArNDMwLDYgQEAKIH0KIAogLyoKLSAqIE5vdGU6IHRoZSB2bV9zdGFydCBhbmQgdm1fZW5kIGZpZWxkcyBoZXJlIHNob3VsZCAqbm90KgotICogYmUgaW4ga2VybmVsIHNwYWNlLiAgKENvdWxkIHZtX2VuZCA9PSB2bV9zdGFydCBwZXJoYXBzPykKLSAqLwotI2RlZmluZSBJT1JFTUFQX01NQVAgeyAmaW9yZW1hcF9tbSwgMCwgMHgxMDAwLCBOVUxMLCBcCi0JCSAgICBQQUdFX1NIQVJFRCwgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQywgXAotCQkgICAgMSwgTlVMTCwgTlVMTCB9Ci0KLWV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0IGlvcmVtYXBfbW07Ci0KLS8qCiAgKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4gRm9yIG5vdywgdGhpcyBpcyB0aGUgInVzZXIiIFBDCiAgKi8KICNkZWZpbmUgdGhyZWFkX3NhdmVkX3BjKHRzaykgICAgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvc21wLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zbXAuaAppbmRleCBjODY0NmZhLi44MTE1ZWNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9zbXAuaApAQCAtNDUsNyArNDUsNyBAQAogdm9pZCBnZW5lcmljX21hY2hfY3B1X2RpZSh2b2lkKTsKICNlbmRpZgogCi0jZGVmaW5lIF9fc21wX3Byb2Nlc3Nvcl9pZCgpIChnZXRfcGFjYSgpLT5wYWNhX2luZGV4KQorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShnZXRfcGFjYSgpLT5wYWNhX2luZGV4KQogI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSAoZ2V0X3BhY2EoKS0+aHdfY3B1X2lkKQogCiBleHRlcm4gY3B1bWFza190IGNwdV9zaWJsaW5nX21hcFtOUl9DUFVTXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc21wLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCmluZGV4IDk0NzM3ODYuLmRkNTBlNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zbXAuaApAQCAtNDcsNyArNDcsNyBAQAogIAogI2RlZmluZSBQUk9DX0NIQU5HRV9QRU5BTFRZCTIwCQkvKiBTY2hlZHVsZSBwZW5hbHR5ICovCiAKLSNkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpIChTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X25yKQorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X25yKQogCiBleHRlcm4gaW50IHNtcF9nZXRfY3B1KGNwdW1hc2tfdCBjcHVfbWFwKTsKIGV4dGVybiB2b2lkIHNtcF9wdXRfY3B1KGludCBjcHUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGFnZS5oIGIvaW5jbHVkZS9hc20tc2gvcGFnZS5oCmluZGV4IDRjNmQxMjkuLjE4MDQ2N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wYWdlLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgSFBBR0VfU0laRQkJKDFVTCA8PCBIUEFHRV9TSElGVCkKICNkZWZpbmUgSFBBR0VfTUFTSwkJKH4oSFBBR0VfU0laRS0xKSkKICNkZWZpbmUgSFVHRVRMQl9QQUdFX09SREVSCShIUEFHRV9TSElGVC1QQUdFX1NISUZUKQorI2RlZmluZSBBUkNIX0hBU19TRVRDTEVBUl9IVUdFX1BURQogI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmgKaW5kZXggY2Q4NDdhNC4uZWNiOTA5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaApAQCAtMTk2LDYgKzE5Niw3IEBACiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0RJUlRZKSk7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfQUNDRVNTRUQpKTsgcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9SVykpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfU1pIVUdFKSk7IHJldHVybiBwdGU7IH0KIAogLyoKICAqIE1hY3JvIGFuZCBpbXBsZW1lbnRhdGlvbiB0byBtYWtlIGEgcGFnZSBwcm90ZWN0aW9uIGFzIHVuY2FjaGFibGUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zbXAuaCBiL2luY2x1ZGUvYXNtLXNoL3NtcC5oCmluZGV4IDM4YjU0NDYuLmYxOWE4YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NtcC5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNkZWZpbmUgY3B1X29ubGluZShjcHUpCQljcHVfaXNzZXQoY3B1LCBjcHVfb25saW5lX21hcCkKIAotI2RlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKIAogLyogSSd2ZSBubyBpZGVhIHdoYXQgdGhlIHJlYWwgbWVhbmluZyBvZiB0aGlzIGlzICovCiAjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMjAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvcGFnZS5oIGIvaW5jbHVkZS9hc20tc2g2NC9wYWdlLmgKaW5kZXggZTFmN2Y1YS4uZDYxNjdmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9wYWdlLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNkZWZpbmUgSFBBR0VfU0laRQkJKDFVTCA8PCBIUEFHRV9TSElGVCkKICNkZWZpbmUgSFBBR0VfTUFTSwkJKH4oSFBBR0VfU0laRS0xKSkKICNkZWZpbmUgSFVHRVRMQl9QQUdFX09SREVSCShIUEFHRV9TSElGVC1QQUdFX1NISUZUKQorI2RlZmluZSBBUkNIX0hBU19TRVRDTEVBUl9IVUdFX1BURQogI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oCmluZGV4IDUyNWUxNTIuLjc4YWM2YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oCkBAIC00MzAsNiArNDMwLDggQEAKIGV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9FWEVDVVRFKSk7IHJldHVybiBwdGU7IH0KIGV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfRElSVFkpKTsgcmV0dXJuIHB0ZTsgfQogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9BQ0NFU1NFRCkpOyByZXR1cm4gcHRlOyB9CitleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfU1pIVUdFKSk7IHJldHVybiBwdGU7IH0KKwogCiAvKgogICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc21wLmgKaW5kZXggZjk4NmMwZC4uNGY5NmQ4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc21wLmgKQEAgLTE0OCw3ICsxNDgsNyBAQAogfQogI2VuZGlmCiAKLSNkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQogCiAjZGVmaW5lIHByb2ZfbXVsdGlwbGllcihfX2NwdSkJCWNwdV9kYXRhKF9fY3B1KS5tdWx0aXBsaWVyCiAjZGVmaW5lIHByb2ZfY291bnRlcihfX2NwdSkJCWNwdV9kYXRhKF9fY3B1KS5jb3VudGVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCmluZGV4IDIxOWVhMDQuLmI4N2RiYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCkBAIC05NSw2ICs5NSw4IEBACiAjZGVmaW5lIEhQQUdFX1NJWkUJCShfQUMoMSxVTCkgPDwgSFBBR0VfU0hJRlQpCiAjZGVmaW5lIEhQQUdFX01BU0sJCSh+KEhQQUdFX1NJWkUgLSAxVUwpKQogI2RlZmluZSBIVUdFVExCX1BBR0VfT1JERVIJKEhQQUdFX1NISUZUIC0gUEFHRV9TSElGVCkKKyNkZWZpbmUgQVJDSF9IQVNfU0VUQ0xFQVJfSFVHRV9QVEUKKyNkZWZpbmUgQVJDSF9IQVNfSFVHRVRMQl9QUkVGQVVMVF9IT09LCiAjZW5kaWYKIAogI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKaW5kZXggYWUyY2Q1Yi4uMWFlMDBjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKQEAgLTI4Niw2ICsyODYsNyBAQAogI2RlZmluZSBwdGVfbWt5b3VuZyhwdGUpCShfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1IpKQogI2RlZmluZSBwdGVfbWt3cml0ZShwdGUpCShfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9XUklURSkpCiAjZGVmaW5lIHB0ZV9ta2RpcnR5KHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX01PRElGSUVEIHwgX1BBR0VfVykpCisjZGVmaW5lIHB0ZV9ta2h1Z2UocHRlKQkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1NaSFVHRSkpCiAKIC8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeS4gKi8KICNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpCSgoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QgLSAxKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Byb2Nlc3Nvci5oCmluZGV4IGJjMTQ0NWIuLmQwYmVlMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaApAQCAtMTkyLDYgKzE5Miw0MCBAQAogCiAjZGVmaW5lIGNwdV9yZWxheCgpCWJhcnJpZXIoKQogCisvKiBQcmVmZXRjaCBzdXBwb3J0LiAgVGhpcyBpcyB0dW5lZCBmb3IgVWx0cmFTUEFSQy1JSUkgYW5kIGxhdGVyLgorICogVWx0cmFTUEFSQy1JIHdpbGwgdHJlYXQgdGhlc2UgYXMgbm9wcywgYW5kIFVsdHJhU1BBUkMtSUkgaGFzCisgKiBhIHNoYWxsb3dlciBwcmVmZXRjaCBxdWV1ZSB0aGFuIGxhdGVyIGNoaXBzLgorICovCisjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICisjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIVworI2RlZmluZSBBUkNIX0hBU19TUElOTE9DS19QUkVGRVRDSAorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqeCkKK3sKKwkvKiBXZSBkbyBub3QgdXNlIHRoZSByZWFkIHByZWZldGNoIG1uZW1vbmljIGJlY2F1c2UgdGhhdAorCSAqIHByZWZldGNoZXMgaW50byB0aGUgcHJlZmV0Y2gtY2FjaGUgd2hpY2ggb25seSBpcyBhY2Nlc3NpYmxlCisJICogYnkgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBpbiBVbHRyYVNQQVJDLUlJSSBhbmQgbGF0ZXIuCisJICogQnkgY29udHJhc3QsICIjb25lX3dyaXRlIiBwcmVmZXRjaGVzIGludG8gdGhlIEwyIGNhY2hlCisJICogaW4gc2hhcmVkIHN0YXRlLgorCSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJwcmVmZXRjaCBbJTBdLCAjb25lX3dyaXRlIgorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCSAgICAgOiAiciIgKHgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICp4KQoreworCS8qIFRoZSBtb3N0IG9wdGltYWwgcHJlZmV0Y2ggdG8gdXNlIGZvciB3cml0ZXMgaXMKKwkgKiAiI25fd3JpdGVzIi4gIFRoaXMgYnJpbmdzIHRoZSBjYWNoZWxpbmUgaW50byB0aGUKKwkgKiBMMiBjYWNoZSBpbiAib3duZWQiIHN0YXRlLgorCSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJwcmVmZXRjaCBbJTBdLCAjbl93cml0ZXMiCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICA6ICJyIiAoeCkpOworfQorCisjZGVmaW5lIHNwaW5fbG9ja19wcmVmZXRjaCh4KQlwcmVmZXRjaHcoeCkKKwogI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwogCiAjZW5kaWYgLyogIShfX0FTTV9TUEFSQzY0X1BST0NFU1NPUl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc21wLmgKaW5kZXggNWUzZTA2ZC4uMTEwYTJkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oCkBAIC02NCw3ICs2NCw3IEBACiAJfQogfQogCi0jZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQogCiAjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NtcC5oIGIvaW5jbHVkZS9hc20tdW0vc21wLmgKaW5kZXggNDQxMmQ1ZC4uZDg3OWViYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vc21wLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vc21wLmgKQEAgLTgsNyArOCw4IEBACiAjaW5jbHVkZSAiYXNtL2N1cnJlbnQuaCIKICNpbmNsdWRlICJsaW51eC9jcHVtYXNrLmgiCiAKLSNkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpIChjdXJyZW50X3RocmVhZC0+Y3B1KQorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpIChjdXJyZW50X3RocmVhZC0+Y3B1KQorCiAjZGVmaW5lIGNwdV9sb2dpY2FsX21hcChuKSAobikKICNkZWZpbmUgY3B1X251bWJlcl9tYXAobikgKG4pCiAjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMTUgLyogUGljayBhIG51bWJlciwgYW55IG51bWJlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2Eub3V0LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvYS5vdXQuaAppbmRleCA1OTUyOTE0Li43MjU1Y2RlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYS5vdXQuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYS5vdXQuaApAQCAtMjEsNyArMjEsNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+Ci0jZGVmaW5lIFNUQUNLX1RPUCAodGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikgPyBJQTMyX1BBR0VfT0ZGU0VUIDogVEFTS19TSVpFKQorI2RlZmluZSBTVEFDS19UT1AgVEFTS19TSVpFCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQV9PVVRfR05VX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYWdlLmgKaW5kZXggZjQzMDQ4MC4uOWNlMzM4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGFnZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIEhQQUdFX1NJWkUJKCgxVUwpIDw8IEhQQUdFX1NISUZUKQogI2RlZmluZSBIUEFHRV9NQVNLCSh+KEhQQUdFX1NJWkUgLSAxKSkKICNkZWZpbmUgSFVHRVRMQl9QQUdFX09SREVSCShIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpCisjZGVmaW5lIEFSQ0hfSEFTX0hVR0VUTEJfQ0xFQU5fU1RBTEVfUEdUQUJMRQogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGd0YWJsZS5oCmluZGV4IGRiMmEwZWYuLjRlZWMxNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaApAQCAtMjUzLDYgKzI1Myw3IEBACiBleHRlcm4gaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfUlc7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KIAorI2RlZmluZSBfX0xBUkdFX1BURSAoX1BBR0VfUFNFfF9QQUdFX1BSRVNFTlQpCiBleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX1VTRVIpKTsgcmV0dXJuIHB0ZTsgfQogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9VU0VSKSk7IHJldHVybiBwdGU7IH0KIGV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0RJUlRZKSk7IHJldHVybiBwdGU7IH0KQEAgLTI2Myw2ICsyNjQsNyBAQAogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9ESVJUWSkpOyByZXR1cm4gcHRlOyB9CiBleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0FDQ0VTU0VEKSk7IHJldHVybiBwdGU7IH0KIGV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfUlcpKTsgcmV0dXJuIHB0ZTsgfQorZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9fTEFSR0VfUFRFKSk7IHJldHVybiBwdGU7IH0KIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCkBAIC0yOTAsNyArMjkyLDYgQEAKICAqLwogI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCShfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUKSkKIAotI2RlZmluZSBfX0xBUkdFX1BURSAoX1BBR0VfUFNFfF9QQUdFX1BSRVNFTlQpIAogc3RhdGljIGlubGluZSBpbnQgcG1kX2xhcmdlKHBtZF90IHB0ZSkgeyAKIAlyZXR1cm4gKHBtZF92YWwocHRlKSAmIF9fTEFSR0VfUFRFKSA9PSBfX0xBUkdFX1BURTsgCiB9IAkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm9jZXNzb3IuaAppbmRleCBkNjQxYjE5Li44YjU1ZjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3Byb2Nlc3Nvci5oCkBAIC0xNjAsMTYgKzE2MCwxNyBAQAogLyoKICAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplLiA0N2JpdHMgbWludXMgb25lIGd1YXJkIHBhZ2UuCiAgKi8KLSNkZWZpbmUgVEFTS19TSVpFCSgweDgwMDAwMDAwMDAwMFVMIC0gNDA5NikKKyNkZWZpbmUgVEFTS19TSVpFNjQJKDB4ODAwMDAwMDAwMDAwVUwgLSA0MDk2KQogCiAvKiBUaGlzIGRlY2lkZXMgd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHNlYXJjaCBmb3IgYSBmcmVlIGNodW5rIG9mIHZtCiAgKiBzcGFjZSBkdXJpbmcgbW1hcCdzLgogICovCiAjZGVmaW5lIElBMzJfUEFHRV9PRkZTRVQgKChjdXJyZW50LT5wZXJzb25hbGl0eSAmIEFERFJfTElNSVRfM0dCKSA/IDB4YzAwMDAwMDAgOiAweEZGRkZlMDAwKQotI2RlZmluZSBUQVNLX1VOTUFQUEVEXzMyIFBBR0VfQUxJR04oSUEzMl9QQUdFX09GRlNFVC8zKQotI2RlZmluZSBUQVNLX1VOTUFQUEVEXzY0IFBBR0VfQUxJR04oVEFTS19TSVpFLzMpIAotI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJXAotCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSA/IFRBU0tfVU5NQVBQRURfMzIgOiBUQVNLX1VOTUFQUEVEXzY0KSAgCisKKyNkZWZpbmUgVEFTS19TSVpFIAkJKHRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpID8gSUEzMl9QQUdFX09GRlNFVCA6IFRBU0tfU0laRTY0KQorI2RlZmluZSBUQVNLX1NJWkVfT0YoY2hpbGQpIAkoKHRlc3RfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfSUEzMikpID8gSUEzMl9QQUdFX09GRlNFVCA6IFRBU0tfU0laRTY0KQorCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQlQQUdFX0FMSUdOKFRBU0tfU0laRS8zKQogCiAvKgogICogU2l6ZSBvZiBpb19iaXRtYXAuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKaW5kZXggOTY4NDRmZS4uYTc0MjVhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaApAQCAtNjgsNyArNjgsNyBAQAogCXJldHVybiBjcHVzX3dlaWdodChjcHVfY2FsbG91dF9tYXApOwogfQogCi0jZGVmaW5lIF9fc21wX3Byb2Nlc3Nvcl9pZCgpIHJlYWRfcGRhKGNwdW51bWJlcikKKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSByZWFkX3BkYShjcHVudW1iZXIpCiAKIGV4dGVybiBfX2lubGluZSBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FyY2ZiLmggYi9pbmNsdWRlL2xpbnV4L2FyY2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIxZTc2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXJjZmIuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19MSU5VWF9BUkNGQl9IX18KKyNkZWZpbmUgX19MSU5VWF9BUkNGQl9IX18KKworI2RlZmluZSBGQklPX1dBSVRFVkVOVAkJX0lPKCdGJywgMHg4OCkKKyNkZWZpbmUgRkJJT19HRVRDT05UUk9MMglfSU9SKCdGJywgMHg4OSwgc2l6ZV90KQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oIGIvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oCmluZGV4IGExNjU3ZmIuLjkzNDNjODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXV0b19mczQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1dG9fZnM0LmgKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgQVVUT0ZTX01JTl9QUk9UT19WRVJTSU9OCTMKICNkZWZpbmUgQVVUT0ZTX01BWF9QUk9UT19WRVJTSU9OCTQKIAotI2RlZmluZSBBVVRPRlNfUFJPVE9fU1VCVkVSU0lPTgkJNgorI2RlZmluZSBBVVRPRlNfUFJPVE9fU1VCVkVSU0lPTgkJNwogCiAvKiBNYXNrIGZvciBleHBpcmUgYmVoYXZpb3VyICovCiAjZGVmaW5lIEFVVE9GU19FWFBfSU1NRURJQVRFCQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggYjQ2OGJmNC4uYmMyNGJlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtNTI0LDExICs1MjQsMTEgQEAKIAl1MzIgb2Zmc2V0OwkJLyogY3VycmVudCBvZmZzZXQgdG8gYnVmZmVyCQkqLwogCXUzMiBidWZfYWxpZ247CQkvKiBieXRlIGFsaWdubWVudCBvZiBlYWNoIGJpdG1hcAkqLwogCXUzMiBzY2FuX2FsaWduOwkJLyogYWxpZ25tZW50IHBlciBzY2FubGluZQkJKi8KLQl1MzIgYWNjZXNzX2FsaWduOwkvKiBhbGlnbm1lbnQgcGVyIHJlYWQvd3JpdGUJCSovCisJdTMyIGFjY2Vzc19hbGlnbjsJLyogYWxpZ25tZW50IHBlciByZWFkL3dyaXRlIChiaXRzKQkqLwogCXUzMiBmbGFnczsJCS8qIHNlZSBGQl9QSVhNQVBfKgkJCSovCiAJLyogYWNjZXNzIG1ldGhvZHMgKi8KLQl2b2lkICgqb3V0YnVmKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdTggKmFkZHIsIHU4ICpzcmMsIHVuc2lnbmVkIGludCBzaXplKTsKLQl1OCAgICgqaW5idWYpIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdTggKmFkZHIpOworCXZvaWQgKCp3cml0ZWlvKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdm9pZCBfX2lvbWVtICpkc3QsIHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNpemUpOworCXZvaWQgKCpyZWFkaW8pIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdm9pZCAqZHN0LCB2b2lkIF9faW9tZW0gKnNyYywgdW5zaWduZWQgaW50IHNpemUpOwogfTsKIAogCkBAIC04MTYsMTggKzgxNiw5IEBACiBleHRlcm4gaW50IGZiX3ByZXBhcmVfbG9nbyhzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CiBleHRlcm4gaW50IGZiX3Nob3dfbG9nbyhzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CiBleHRlcm4gY2hhciogZmJfZ2V0X2J1ZmZlcl9vZmZzZXQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9waXhtYXAgKmJ1ZiwgdTMyIHNpemUpOwotZXh0ZXJuIHZvaWQgZmJfaW9tb3ZlX2J1Zl91bmFsaWduZWQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9waXhtYXAgKmJ1ZiwKLQkJCQl1OCAqZHN0LCB1MzIgZF9waXRjaCwgdTggKnNyYywgdTMyIGlkeCwKK2V4dGVybiB2b2lkIGZiX3BhZF91bmFsaWduZWRfYnVmZmVyKHU4ICpkc3QsIHUzMiBkX3BpdGNoLCB1OCAqc3JjLCB1MzIgaWR4LAogCQkJCXUzMiBoZWlnaHQsIHUzMiBzaGlmdF9oaWdoLCB1MzIgc2hpZnRfbG93LCB1MzIgbW9kKTsKLWV4dGVybiB2b2lkIGZiX2lvbW92ZV9idWZfYWxpZ25lZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3BpeG1hcCAqYnVmLAotCQkJCXU4ICpkc3QsIHUzMiBkX3BpdGNoLCB1OCAqc3JjLCB1MzIgc19waXRjaCwKLQkJCQl1MzIgaGVpZ2h0KTsKLWV4dGVybiB2b2lkIGZiX3N5c21vdmVfYnVmX3VuYWxpZ25lZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3BpeG1hcCAqYnVmLAotCQkJCXU4ICpkc3QsIHUzMiBkX3BpdGNoLCB1OCAqc3JjLCB1MzIgaWR4LAotCQkJCXUzMiBoZWlnaHQsIHUzMiBzaGlmdF9oaWdoLCB1MzIgc2hpZnRfbG93LCB1MzIgbW9kKTsKLWV4dGVybiB2b2lkIGZiX3N5c21vdmVfYnVmX2FsaWduZWQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9waXhtYXAgKmJ1ZiwKLQkJCQl1OCAqZHN0LCB1MzIgZF9waXRjaCwgdTggKnNyYywgdTMyIHNfcGl0Y2gsCi0JCQkJdTMyIGhlaWdodCk7CitleHRlcm4gdm9pZCBmYl9wYWRfYWxpZ25lZF9idWZmZXIodTggKmRzdCwgdTMyIGRfcGl0Y2gsIHU4ICpzcmMsIHUzMiBzX3BpdGNoLCB1MzIgaGVpZ2h0KTsKIGV4dGVybiB2b2lkIGZiX3NldF9zdXNwZW5kKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3RhdGUpOwogZXh0ZXJuIGludCBmYl9nZXRfY29sb3JfZGVwdGgoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOwogZXh0ZXJuIGludCBmYl9nZXRfb3B0aW9ucyhjaGFyICpuYW1lLCBjaGFyICoqb3B0aW9uKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZm9udC5oIGIvaW5jbHVkZS9saW51eC9mb250LmgKaW5kZXggZmMyZDY5MC4uOGZjODBhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mb250LmgKKysrIGIvaW5jbHVkZS9saW51eC9mb250LmgKQEAgLTI1LDE5ICsyNSwyMyBAQAogI2RlZmluZSBWR0E4eDE2X0lEWAkxCiAjZGVmaW5lIFBFQVJMOHg4X0lEWAkyCiAjZGVmaW5lIFZHQTZ4MTFfSURYCTMKLSNkZWZpbmUgU1VOOHgxNl9JRFgJNAotI2RlZmluZSBTVU4xMngyMl9JRFgJNQotI2RlZmluZSBBQ09STjh4OF9JRFgJNgotI2RlZmluZQlNSU5JNHg2X0lEWAk3CisjZGVmaW5lIEZPTlQ3eDE0X0lEWAk0CisjZGVmaW5lCUZPTlQxMHgxOF9JRFgJNQorI2RlZmluZSBTVU44eDE2X0lEWAk2CisjZGVmaW5lIFNVTjEyeDIyX0lEWAk3CisjZGVmaW5lIEFDT1JOOHg4X0lEWAk4CisjZGVmaW5lCU1JTkk0eDZfSURYCTkKIAogZXh0ZXJuIHN0cnVjdCBmb250X2Rlc2MJZm9udF92Z2FfOHg4LAotCQkJCWZvbnRfdmdhXzh4MTYsCi0JCQkJZm9udF9wZWFybF84eDgsCi0JCQkJZm9udF92Z2FfNngxMSwKLQkJCQlmb250X3N1bl84eDE2LAotCQkJCWZvbnRfc3VuXzEyeDIyLAotCQkJCWZvbnRfYWNvcm5fOHg4LAotCQkJCWZvbnRfbWluaV80eDY7CisJCQlmb250X3ZnYV84eDE2LAorCQkJZm9udF9wZWFybF84eDgsCisJCQlmb250X3ZnYV82eDExLAorCQkJZm9udF83eDE0LAorCQkJZm9udF8xMHgxOCwKKwkJCWZvbnRfc3VuXzh4MTYsCisJCQlmb250X3N1bl8xMngyMiwKKwkJCWZvbnRfYWNvcm5fOHg4LAorCQkJZm9udF9taW5pXzR4NjsKIAogLyogRmluZCBhIGZvbnQgd2l0aCBhIHNwZWNpZmljIG5hbWUgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCmluZGV4IGZhYWZmNGMuLjcwZjU0YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKQEAgLTUxLDYgKzUxLDcgQEAKIAogCS8qIGJvYXJkIHNwZWNpZmljIGluZm9ybWF0aW9uICovCiAJdTMyIGJvYXJkX2ZsYWdzOworCXUzMiBwaHlfZmxhZ3M7CiAJdTMyIHBoeWlkOwogCXUzMiBpbnRlcnJ1cHRQSFk7CiAJdTggbWFjX2FkZHJbNl07CkBAIC02MSw5ICs2MiwxNCBAQAogI2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFCQkweDAwMDAwMDAyCiAjZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTgkJMHgwMDAwMDAwNAogI2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIJCTB4MDAwMDAwMDgKKyNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNCQkweDAwMDAwMDEwCisjZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTgkJMHgwMDAwMDAyMAorI2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX0VYVEVOREVEX0hBU0gJMHgwMDAwMDA0MAorI2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX1BBRERJTkcJCTB4MDAwMDAwODAKIAogLyogRmxhZ3MgaW4gZ2lhbmZhcl9wbGF0Zm9ybV9kYXRhICovCi0jZGVmaW5lIEZTTF9HSUFORkFSX0JSRF9IQVNfUEhZX0lOVFIJMHgwMDAwMDAwMQkvKiBpZiBub3Qgc2V0IHVzZSBhIHRpbWVyICovCisjZGVmaW5lIEZTTF9HSUFORkFSX0JSRF9IQVNfUEhZX0lOVFIJMHgwMDAwMDAwMSAvKiBzZXQgb3IgdXNlIGEgdGltZXIgKi8KKyNkZWZpbmUgRlNMX0dJQU5GQVJfQlJEX0lTX1JFRFVDRUQJMHgwMDAwMDAwMiAvKiBTZXQgaWYgUkdNSUksIFJNSUkgKi8KIAogc3RydWN0IGZzbF9pMmNfcGxhdGZvcm1fZGF0YSB7CiAJLyogZGV2aWNlIHNwZWNpZmljIGluZm9ybWF0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L2dlbmFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkMDU3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuYWxsb2MuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQmFzaWMgZ2VuZXJhbCBwdXJwb3NlIGFsbG9jYXRvciBmb3IgbWFuYWdpbmcgc3BlY2lhbCBwdXJwb3NlIG1lbW9yeQorICogbm90IG1hbmFnZWQgYnkgdGhlIHJlZ3VsYXIga21hbGxvYy9rZnJlZSBpbnRlcmZhY2UuCisgKiBVc2VzIGZvciB0aGlzIGluY2x1ZGVzIG9uLWRldmljZSBzcGVjaWFsIG1lbW9yeSwgdW5jYWNoZWQgbWVtb3J5CisgKiBldGMuCisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBidWRkeSBhbGxvY2F0b3IgZm91bmQgaW4gdGhlIHN5bTUzYzh4eF8yCisgKiBkcml2ZXIsIGFkYXB0ZWQgZm9yIGdlbmVyYWwgcHVycG9zZSB1c2UuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiBWZXJzaW9uIDIuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjZGVmaW5lIEFMTE9DX01JTl9TSElGVAkJNSAvKiAzMiBieXRlcyBtaW5pbXVtICovCisvKgorICogIExpbmsgYmV0d2VlbiBmcmVlIG1lbW9yeSBjaHVua3Mgb2YgYSBnaXZlbiBzaXplLgorICovCitzdHJ1Y3QgZ2VuX3Bvb2xfbGluayB7CisJc3RydWN0IGdlbl9wb29sX2xpbmsgKm5leHQ7Cit9OworCisvKgorICogIE1lbW9yeSBwb29sIGRlc2NyaXB0b3IuCisgKi8KK3N0cnVjdCBnZW5fcG9vbCB7CisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfbmV3X2NodW5rKShzdHJ1Y3QgZ2VuX3Bvb2wgKik7CisJc3RydWN0IGdlbl9wb29sICpuZXh0OworCXN0cnVjdCBnZW5fcG9vbF9saW5rICpoOworCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZTsKKwlpbnQgbWF4X2NodW5rX3NoaWZ0OworfTsKKwordW5zaWduZWQgbG9uZyBnZW5fcG9vbF9hbGxvYyhzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2xwLCBpbnQgc2l6ZSk7Cit2b2lkIGdlbl9wb29sX2ZyZWUoc3RydWN0IGdlbl9wb29sICptcCwgdW5zaWduZWQgbG9uZyBwdHIsIGludCBzaXplKTsKK3N0cnVjdCBnZW5fcG9vbCAqZ2VuX3Bvb2xfY3JlYXRlKGludCBucl9jaHVua3MsIGludCBtYXhfY2h1bmtfc2hpZnQsCisJCQkJIHVuc2lnbmVkIGxvbmcgKCpmcCkoc3RydWN0IGdlbl9wb29sICopLAorCQkJCSB1bnNpZ25lZCBsb25nIGRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggYWY3NDA3ZS4uOGQ2YmY2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0zOSw2ICszOSw3IEBACiAjZGVmaW5lIF9fR0ZQX0NPTVAJMHg0MDAwdQkvKiBBZGQgY29tcG91bmQgcGFnZSBtZXRhZGF0YSAqLwogI2RlZmluZSBfX0dGUF9aRVJPCTB4ODAwMHUJLyogUmV0dXJuIHplcm9lZCBwYWdlIG9uIHN1Y2Nlc3MgKi8KICNkZWZpbmUgX19HRlBfTk9NRU1BTExPQyAweDEwMDAwdSAvKiBEb24ndCB1c2UgZW1lcmdlbmN5IHJlc2VydmVzICovCisjZGVmaW5lIF9fR0ZQX05PUkVDTEFJTSAgMHgyMDAwMHUgLyogTm8gcmVhbHkgem9uZSByZWNsYWltIGR1cmluZyBhbGxvY2F0aW9uICovCiAKICNkZWZpbmUgX19HRlBfQklUU19TSElGVCAyMAkvKiBSb29tIGZvciAyMCBfX0dGUF9GT08gYml0cyAqLwogI2RlZmluZSBfX0dGUF9CSVRTX01BU0sgKCgxIDw8IF9fR0ZQX0JJVFNfU0hJRlQpIC0gMSkKQEAgLTQ3LDcgKzQ4LDcgQEAKICNkZWZpbmUgR0ZQX0xFVkVMX01BU0sgKF9fR0ZQX1dBSVR8X19HRlBfSElHSHxfX0dGUF9JT3xfX0dGUF9GU3wgXAogCQkJX19HRlBfQ09MRHxfX0dGUF9OT1dBUk58X19HRlBfUkVQRUFUfCBcCiAJCQlfX0dGUF9OT0ZBSUx8X19HRlBfTk9SRVRSWXxfX0dGUF9OT19HUk9XfF9fR0ZQX0NPTVB8IFwKLQkJCV9fR0ZQX05PTUVNQUxMT0MpCisJCQlfX0dGUF9OT01FTUFMTE9DfF9fR0ZQX05PUkVDTEFJTSkKIAogI2RlZmluZSBHRlBfQVRPTUlDCShfX0dGUF9ISUdIKQogI2RlZmluZSBHRlBfTk9JTwkoX19HRlBfV0FJVCkKQEAgLTEzMiw1ICsxMzMsMTAgQEAKICNkZWZpbmUgZnJlZV9wYWdlKGFkZHIpIGZyZWVfcGFnZXMoKGFkZHIpLDApCiAKIHZvaWQgcGFnZV9hbGxvY19pbml0KHZvaWQpOworI2lmZGVmIENPTkZJR19OVU1BCit2b2lkIGRyYWluX3JlbW90ZV9wYWdlcyh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZHJhaW5fcmVtb3RlX3BhZ2VzKHZvaWQpIHsgfTsKKyNlbmRpZgogCiAjZW5kaWYgLyogX19MSU5VWF9HRlBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCA2YWYxYWU0Li5mNTI5ZDE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtNCw2ICs0LDcgQEAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAKICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogc3RydWN0IGN0bF90YWJsZTsKIApAQCAtMjIsMTIgKzIzLDYgQEAKIGludCBodWdldGxiX3JlcG9ydF9ub2RlX21lbWluZm8oaW50LCBjaGFyICopOwogaW50IGlzX2h1Z2VwYWdlX21lbV9lbm91Z2goc2l6ZV90KTsKIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKTsKLXN0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgICAgICBpbnQgd3JpdGUpOwotc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkJCXBtZF90ICpwbWQsIGludCB3cml0ZSk7Ci1pbnQgaXNfYWxpZ25lZF9odWdlcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKLWludCBwbWRfaHVnZShwbWRfdCBwbWQpOwogc3RydWN0IHBhZ2UgKmFsbG9jX2h1Z2VfcGFnZSh2b2lkKTsKIHZvaWQgZnJlZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CiAKQEAgLTM1LDYgKzMwLDE3IEBACiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBodWdldGxiX3plcm8sIGh1Z2V0bGJfaW5maW5pdHk7CiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cDsKIAorLyogYXJjaCBjYWxsYmFja3MgKi8KKworcHRlX3QgKmh1Z2VfcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOworcHRlX3QgKmh1Z2VfcHRlX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK3N0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkgICAgICBpbnQgd3JpdGUpOworc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCXBtZF90ICpwbWQsIGludCB3cml0ZSk7CitpbnQgaXNfYWxpZ25lZF9odWdlcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKK2ludCBwbWRfaHVnZShwbWRfdCBwbWQpOworCiAjaWZuZGVmIEFSQ0hfSEFTX0hVR0VQQUdFX09OTFlfUkFOR0UKICNkZWZpbmUgaXNfaHVnZXBhZ2Vfb25seV9yYW5nZShtbSwgYWRkciwgbGVuKQkwCiAjZGVmaW5lIGh1Z2V0bGJfZnJlZV9wZ2RfcmFuZ2UodGxiLCBhZGRyLCBlbmQsIGZsb29yLCBjZWlsaW5nKSBcCkBAIC00OCw2ICs1NCwyOCBAQAogaW50IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CiAjZW5kaWYKIAorI2lmbmRlZiBBUkNIX0hBU19TRVRDTEVBUl9IVUdFX1BURQorI2RlZmluZSBzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSkJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQorI2RlZmluZSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlcCkgcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGVwKQorI2Vsc2UKK3ZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCSAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CitwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgcHRlX3QgKnB0ZXApOworI2VuZGlmCisKKyNpZm5kZWYgQVJDSF9IQVNfSFVHRVRMQl9QUkVGQVVMVF9IT09LCisjZGVmaW5lIGh1Z2V0bGJfcHJlZmF1bHRfYXJjaF9ob29rKG1tKQkJZG8geyB9IHdoaWxlICgwKQorI2Vsc2UKK3ZvaWQgaHVnZXRsYl9wcmVmYXVsdF9hcmNoX2hvb2soc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2VuZGlmCisKKyNpZm5kZWYgQVJDSF9IQVNfSFVHRVRMQl9DTEVBTl9TVEFMRV9QR1RBQkxFCisjZGVmaW5lIGh1Z2V0bGJfY2xlYW5fc3RhbGVfcGd0YWJsZShwdGUpCUJVRygpCisjZWxzZQordm9pZCBodWdldGxiX2NsZWFuX3N0YWxlX3BndGFibGUocHRlX3QgKnB0ZSk7CisjZW5kaWYKKwogI2Vsc2UgLyogIUNPTkZJR19IVUdFVExCX1BBR0UgKi8KIAogc3RhdGljIGlubGluZSBpbnQgaXNfdm1faHVnZXRsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb2M0LmggYi9pbmNsdWRlL2xpbnV4L2lvYzQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQxOGI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pb2M0LmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JT0M0X0gKKyNkZWZpbmUgX0xJTlVYX0lPQzRfSAorCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKy8qKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zICoKKyAqKioqKioqKioqKioqKiovCisKKy8qIE1pc2NlbGxhbmVvdXMgdmFsdWVzIGluaGVyZW50IHRvIGhhcmR3YXJlICovCisKKyNkZWZpbmUgSU9DNF9FWFRJTlRfQ09VTlRfRElWSVNPUiA1MjAJLyogUENJIGNsb2NrcyBwZXIgQ09VTlQgdGljayAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN0cnVjdHVyZXMgbmVlZGVkIGJ5IHN1YmRyaXZlcnMgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIHN0cnVjdHVyZSBmdWxseSBkZXNjcmliZXMgdGhlIElPQzQgbWlzY2VsbGFuZW91cyByZWdpc3RlcnMgd2hpY2gKKyAqIGFwcGVhciBhdCBiYXJbMF0rMHgwMDAwMCB0aHJvdWdoIGJhclswXSsweDAwMDVjLiAgVGhlIGNvcnJlc3BvbmRpbmcKKyAqIFBDSSByZXNvdXJjZSBpcyBtYW5hZ2VkIGJ5IHRoZSBtYWluIElPQzQgZHJpdmVyIGJlY2F1c2UgaXQgY29udGFpbnMKKyAqIHJlZ2lzdGVycyBvZiBpbnRlcmVzdCB0byBtYW55IGRpZmZlcmVudCBJT0M0IHN1YmRyaXZlcnMuCisgKi8KK3N0cnVjdCBpb2M0X21pc2NfcmVncyB7CisJLyogTWlzY2VsbGFuZW91cyBJT0M0IHJlZ2lzdGVycyAqLworCXVuaW9uIGlvYzRfcGNpX2Vycl9hZGRyX2wgeworCQl1aW50MzJfdCByYXc7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCB2YWxpZDoxOwkvKiBBZGRyZXNzIGNhcHR1cmVkICovCisJCQl1aW50MzJfdCBtYXN0ZXJfaWQ6NDsJLyogVW5pdCBjYXVzaW5nIGVycm9yCisJCQkJCQkgKiAwLzE6IFNlcmlhbCBwb3J0IDAgVFgvUlgKKwkJCQkJCSAqIDIvMzogU2VyaWFsIHBvcnQgMSBUWC9SWAorCQkJCQkJICogNC81OiBTZXJpYWwgcG9ydCAyIFRYL1JYCisJCQkJCQkgKiA2Lzc6IFNlcmlhbCBwb3J0IDMgVFgvUlgKKwkJCQkJCSAqIDg6IEFUQS9BVEFQSQorCQkJCQkJICogOS0xNTogVW5kZWZpbmVkCisJCQkJCQkgKi8KKwkJCXVpbnQzMl90IG11bF9lcnI6MTsJLyogTXVsdGlwbGUgZXJyb3JzIG9jY3VycmVkICovCisJCQl1aW50MzJfdCBhZGRyOjI2OwkvKiBCaXRzIDMxLTYgb2YgZXJyb3IgYWRkciAqLworCQl9IGZpZWxkczsKKwl9IHBjaV9lcnJfYWRkcl9sOworCXVpbnQzMl90IHBjaV9lcnJfYWRkcl9oOwkvKiBCaXRzIDYzLTMyIG9mIGVycm9yIGFkZHIgKi8KKwl1bmlvbiBpb2M0X3Npb19pbnQgeworCQl1aW50MzJfdCByYXc7CisJCXN0cnVjdCB7CisJCQl1aW50OF90IHR4X210OjE7CS8qIFRYIHJpbmcgYnVmZmVyIGVtcHR5ICovCisJCQl1aW50OF90IHJ4X2Z1bGw6MTsJLyogUlggcmluZyBidWZmZXIgZnVsbCAqLworCQkJdWludDhfdCByeF9oaWdoOjE7CS8qIFJYIGhpZ2gtd2F0ZXIgZXhjZWVkZWQgKi8KKwkJCXVpbnQ4X3QgcnhfdGltZXI6MTsJLyogUlggdGltZXIgaGFzIHRyaWdnZXJlZCAqLworCQkJdWludDhfdCBkZWx0YV9kY2Q6MTsJLyogREVMVEFfRENEIHNlZW4gKi8KKwkJCXVpbnQ4X3QgZGVsdGFfY3RzOjE7CS8qIERFTFRBX0NUUyBzZWVuICovCisJCQl1aW50OF90IGludHJfcGFzczoxOwkvKiBJbnRlcnJ1cHQgcGFzcy10aHJvdWdoICovCisJCQl1aW50OF90IHR4X2V4cGxpY2l0OjE7CS8qIFRYLCBNQ1csIG9yIGRlbGF5IGNvbXBsZXRlICovCisJCX0gZmllbGRzWzRdOworCX0gc2lvX2lyOwkJLyogU2VyaWFsIGludGVycnVwdCBzdGF0ZSAqLworCXVuaW9uIGlvYzRfb3RoZXJfaW50IHsKKwkJdWludDMyX3QgcmF3OworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgYXRhX2ludDoxOwkvKiBBVEEgcG9ydCBwYXNzdGhydSAqLworCQkJdWludDMyX3QgYXRhX21lbWVycjoxOwkvKiBBVEEgaGFsdGVkIGJ5IG1lbSBlcnJvciAqLworCQkJdWludDMyX3QgbWVtZXJyOjQ7CS8qIFNlcmlhbCBoYWx0ZWQgYnkgbWVtIGVyciAqLworCQkJdWludDMyX3Qga2JkX2ludDoxOwkvKiBrYmQvbW91c2UgaW50ciBhc3NlcnRlZCAqLworCQkJdWludDMyX3QgcmVzZXJ2ZWQ6MTY7CS8qIHplcm8gKi8KKwkJCXVpbnQzMl90IHJ0X2ludDoxOwkvKiBJTlRfT1VUIHNlY3Rpb24gbGF0Y2ggKi8KKwkJCXVpbnQzMl90IGdlbl9pbnQ6ODsJLyogSW50ci4gZnJvbSBnZW5lcmljIHBpbnMgKi8KKwkJfSBmaWVsZHM7CisJfSBvdGhlcl9pcjsJCS8qIE90aGVyIGludGVycnVwdCBzdGF0ZSAqLworCXVuaW9uIGlvYzRfc2lvX2ludCBzaW9faWVzOwkvKiBTZXJpYWwgaW50ZXJydXB0IGVuYWJsZSBzZXQgKi8KKwl1bmlvbiBpb2M0X290aGVyX2ludCBvdGhlcl9pZXM7CS8qIE90aGVyIGludGVycnVwdCBlbmFibGUgc2V0ICovCisJdW5pb24gaW9jNF9zaW9faW50IHNpb19pZWM7CS8qIFNlcmlhbCBpbnRlcnJ1cHQgZW5hYmxlIGNsZWFyICovCisJdW5pb24gaW9jNF9vdGhlcl9pbnQgb3RoZXJfaWVjOwkvKiBPdGhlciBpbnRlcnJ1cHQgZW5hYmxlIGNsZWFyICovCisJdW5pb24gaW9jNF9zaW9fY3IgeworCQl1aW50MzJfdCByYXc7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBjbWRfcHVsc2U6NDsJLyogQnl0ZWJ1cyBzdHJvYmUgd2lkdGggKi8KKwkJCXVpbnQzMl90IGFyYl9kaWFnOjM7CS8qIFBDSSBidXMgcmVxdWVzdGVyICovCisJCQl1aW50MzJfdCBzaW9fZGlhZ19pZGxlOjE7CS8qIEFjdGl2ZSBzZXIgcmVxPyAqLworCQkJdWludDMyX3QgYXRhX2RpYWdfaWRsZToxOwkvKiBBY3RpdmUgQVRBIHJlcT8gKi8KKwkJCXVpbnQzMl90IGF0YV9kaWFnX2FjdGl2ZToxOwkvKiBBVEEgcmVxIGlzIHdpbm5lciAqLworCQkJdWludDMyX3QgcmVzZXJ2ZWQ6MjI7CS8qIHplcm8gKi8KKwkJfSBmaWVsZHM7CisJfSBzaW9fY3I7CisJdWludDMyX3QgdW51c2VkMTsKKwl1bmlvbiBpb2M0X2ludF9vdXQgeworCQl1aW50MzJfdCByYXc7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBjb3VudDoxNjsJLyogUGVyaW9kIGNvbnRyb2wgKi8KKwkJCXVpbnQzMl90IG1vZGU6MzsJLyogT3V0cHV0IHNpZ25hbCBzaGFwZSAqLworCQkJdWludDMyX3QgcmVzZXJ2ZWQ6MTE7CS8qIHplcm8gKi8KKwkJCXVpbnQzMl90IGRpYWc6MTsJLyogVGltZWJhc2UgY29udHJvbCAqLworCQkJdWludDMyX3QgaW50X291dDoxOwkvKiBDdXJyZW50IHZhbHVlICovCisJCX0gZmllbGRzOworCX0gaW50X291dDsJCS8qIEV4dGVybmFsIGludGVycnVwdCBvdXRwdXQgY29udHJvbCAqLworCXVpbnQzMl90IHVudXNlZDI7CisJdW5pb24gaW9jNF9ncGNyIHsKKwkJdWludDMyX3QgcmF3OworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgZGlyOjg7CS8qIFBpbiBkaXJlY3Rpb24gKi8KKwkJCXVpbnQzMl90IGVkZ2U6ODsJLyogRWRnZS9sZXZlbCBtb2RlICovCisJCQl1aW50MzJfdCByZXNlcnZlZDE6NDsJLyogemVybyAqLworCQkJdWludDMyX3QgaW50X291dF9lbjoxOwkvKiBJTlRfT1VUIGVuYWJsZSAqLworCQkJdWludDMyX3QgcmVzZXJ2ZWQyOjExOwkvKiB6ZXJvICovCisJCX0gZmllbGRzOworCX0gZ3Bjcl9zOwkJLyogR2VuZXJpYyBQSU8gY29udHJvbCBzZXQgKi8KKwl1bmlvbiBpb2M0X2dwY3IgZ3Bjcl9jOwkvKiBHZW5lcmljIFBJTyBjb250cm9sIGNsZWFyICovCisJdW5pb24gaW9jNF9ncGRyIHsKKwkJdWludDMyX3QgcmF3OworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgZ2VuX3Bpbjo4OwkvKiBTdGF0ZSBvZiBwaW5zICovCisJCQl1aW50MzJfdCByZXNlcnZlZDoyNDsKKwkJfSBmaWVsZHM7CisJfSBncGRyOwkJCS8qIEdlbmVyaWMgUElPIGRhdGEgKi8KKwl1aW50MzJfdCB1bnVzZWQzOworCXVuaW9uIGlvYzRfZ3BwciB7CisJCXVpbnQzMl90IHJhdzsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGdlbl9waW46MTsJLyogU2luZ2xlIHBpbiBzdGF0ZSAqLworCQkJdWludDMyX3QgcmVzZXJ2ZWQ6MzE7CisJCX0gZmllbGRzOworCX0gZ3Bwcls4XTsJCS8qIEdlbmVyaWMgUElPIHBpbnMgKi8KK307CisKKy8qIE1hc2tzIGZvciBHUENSIERJUiBwaW5zICovCisjZGVmaW5lIElPQzRfR1BDUl9ESVJfMCAweDAxCS8qIEV4dGVybmFsIGludGVycnVwdCBvdXRwdXQgKi8KKyNkZWZpbmUgSU9DNF9HUENSX0RJUl8xIDB4MDIJLyogRXh0ZXJuYWwgaW50ZXJydXB0IGlucHV0ICovCisjZGVmaW5lIElPQzRfR1BDUl9ESVJfMiAweDA0CisjZGVmaW5lIElPQzRfR1BDUl9ESVJfMyAweDA4CS8qIEtleWJvYXJkL21vdXNlIHByZXNlbmNlICovCisjZGVmaW5lIElPQzRfR1BDUl9ESVJfNCAweDEwCS8qIFNlci4gcG9ydCAwIHhjdnIgc2VsZWN0ICgwPTIzMiwgMT00MjIpICovCisjZGVmaW5lIElPQzRfR1BDUl9ESVJfNSAweDIwCS8qIFNlci4gcG9ydCAxIHhjdnIgc2VsZWN0ICgwPTIzMiwgMT00MjIpICovCisjZGVmaW5lIElPQzRfR1BDUl9ESVJfNiAweDQwCS8qIFNlci4gcG9ydCAyIHhjdnIgc2VsZWN0ICgwPTIzMiwgMT00MjIpICovCisjZGVmaW5lIElPQzRfR1BDUl9ESVJfNyAweDgwCS8qIFNlci4gcG9ydCAzIHhjdnIgc2VsZWN0ICgwPTIzMiwgMT00MjIpICovCisKKy8qIE1hc2tzIGZvciBHUENSIEVER0UgcGlucyAqLworI2RlZmluZSBJT0M0X0dQQ1JfRURHRV8wIDB4MDEKKyNkZWZpbmUgSU9DNF9HUENSX0VER0VfMSAweDAyCS8qIEV4dGVybmFsIGludGVycnVwdCBpbnB1dCAqLworI2RlZmluZSBJT0M0X0dQQ1JfRURHRV8yIDB4MDQKKyNkZWZpbmUgSU9DNF9HUENSX0VER0VfMyAweDA4CisjZGVmaW5lIElPQzRfR1BDUl9FREdFXzQgMHgxMAorI2RlZmluZSBJT0M0X0dQQ1JfRURHRV81IDB4MjAKKyNkZWZpbmUgSU9DNF9HUENSX0VER0VfNiAweDQwCisjZGVmaW5lIElPQzRfR1BDUl9FREdFXzcgMHg4MAorCisvKiBPbmUgb2YgdGhlc2UgcGVyIElPQzQgKi8KK3N0cnVjdCBpb2M0X2RyaXZlcl9kYXRhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlkZF9saXN0OworCXVuc2lnbmVkIGxvbmcgaWRkX2JhcjA7CisJc3RydWN0IHBjaV9kZXYgKmlkZF9wZGV2OworCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZGRfcGNpX2lkOworCXN0cnVjdCBfX2lvbWVtIGlvYzRfbWlzY19yZWdzICppZGRfbWlzY19yZWdzOworCXVuc2lnbmVkIGxvbmcgY291bnRfcGVyaW9kOworCXZvaWQgKmlkZF9zZXJpYWxfZGF0YTsKK307CisKKy8qIE9uZSBwZXIgc3VibW9kdWxlICovCitzdHJ1Y3QgaW9jNF9zdWJtb2R1bGUgeworCXN0cnVjdCBsaXN0X2hlYWQgaXNfbGlzdDsKKwljaGFyICppc19uYW1lOworCXN0cnVjdCBtb2R1bGUgKmlzX293bmVyOworCWludCAoKmlzX3Byb2JlKSAoc3RydWN0IGlvYzRfZHJpdmVyX2RhdGEgKik7CisJaW50ICgqaXNfcmVtb3ZlKSAoc3RydWN0IGlvYzRfZHJpdmVyX2RhdGEgKik7Cit9OworCisjZGVmaW5lIElPQzRfTlVNX0NBUkRTCQk4CS8qIG1heCBjYXJkcyBwZXIgcGFydGl0aW9uICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbnMgbmVlZGVkIGJ5IHN1Ym1vZHVsZXMgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiBpbnQgaW9jNF9yZWdpc3Rlcl9zdWJtb2R1bGUoc3RydWN0IGlvYzRfc3VibW9kdWxlICopOworZXh0ZXJuIHZvaWQgaW9jNF91bnJlZ2lzdGVyX3N1Ym1vZHVsZShzdHJ1Y3QgaW9jNF9zdWJtb2R1bGUgKik7CisKKyNlbmRpZgkJCQkvKiBfTElOVVhfSU9DNF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvYzRfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2lvYzRfY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwM2JjYzQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9pb2M0X2NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICovCi0KLSNpZm5kZWYgX0xJTlVYX0lPQzRfQ09NTU9OX0gKLSNkZWZpbmUgX0xJTlVYX0lPQzRfQ09NTU9OX0gKLQotLyogcHJvdG90eXBlcyAqLwotCi1pbnQgaW9jNF9zZXJpYWxfaW5pdCh2b2lkKTsKLQotaW50IGlvYzRfc2VyaWFsX2F0dGFjaF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdAotCQkJCXBjaV9kZXZpY2VfaWQgKnBjaV9pZCk7Ci1pbnQgaW9jNF9pZGVfYXR0YWNoX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0Ci0JCQkJcGNpX2RldmljZV9pZCAqcGNpX2lkKTsKLQotI2VuZGlmCS8qIF9MSU5VWF9JT0M0X0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCBjM2ZmNGQxLi43ZmMxMDIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTQ3LDYgKzQ3LDEwIEBACiAJdm9pZCAoKmFjaykodW5zaWduZWQgaW50IGlycSk7CiAJdm9pZCAoKmVuZCkodW5zaWduZWQgaW50IGlycSk7CiAJdm9pZCAoKnNldF9hZmZpbml0eSkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IGRlc3QpOworCS8qIEN1cnJlbnRseSB1c2VkIG9ubHkgYnkgVU1MLCBtaWdodCBkaXNhcHBlYXIgb25lIGRheS4qLworI2lmZGVmIENPTkZJR19JUlFfUkVMRUFTRV9NRVRIT0QKKwl2b2lkICgqcmVsZWFzZSkodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKKyNlbmRpZgogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgIGh3X2lycV9jb250cm9sbGVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDE3NTE4ZmUuLjE4MTNiMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTY5MSw2ICs2OTEsMTIgQEAKIGV4dGVybiB2b2lkIHNpX21lbWluZm8oc3RydWN0IHN5c2luZm8gKiB2YWwpOwogZXh0ZXJuIHZvaWQgc2lfbWVtaW5mb19ub2RlKHN0cnVjdCBzeXNpbmZvICp2YWwsIGludCBuaWQpOwogCisjaWZkZWYgQ09ORklHX05VTUEKK2V4dGVybiB2b2lkIHNldHVwX3Blcl9jcHVfcGFnZXNldCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcGVyX2NwdV9wYWdlc2V0KHZvaWQpIHt9CisjZW5kaWYKKwogLyogcHJpb190cmVlLmMgKi8KIHZvaWQgdm1hX3ByaW9fdHJlZV9hZGQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkKTsKIHZvaWQgdm1hX3ByaW9fdHJlZV9pbnNlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCBwcmlvX3RyZWVfcm9vdCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGU1MzBjNmMuLjQ3MzNkMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNjMsNiArNjMsMTIgQEAKICNlbmRpZgogfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCisjaWZkZWYgQ09ORklHX05VTUEKKyNkZWZpbmUgem9uZV9wY3AoX196LCBfX2NwdSkgKChfX3opLT5wYWdlc2V0WyhfX2NwdSldKQorI2Vsc2UKKyNkZWZpbmUgem9uZV9wY3AoX196LCBfX2NwdSkgKCYoX196KS0+cGFnZXNldFsoX19jcHUpXSkKKyNlbmRpZgorCiAjZGVmaW5lIFpPTkVfRE1BCQkwCiAjZGVmaW5lIFpPTkVfTk9STUFMCQkxCiAjZGVmaW5lIFpPTkVfSElHSE1FTQkJMgpAQCAtMTIyLDggKzEyOCwxMSBAQAogCSAqLwogCXVuc2lnbmVkIGxvbmcJCWxvd21lbV9yZXNlcnZlW01BWF9OUl9aT05FU107CiAKKyNpZmRlZiBDT05GSUdfTlVNQQorCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQJKnBhZ2VzZXRbTlJfQ1BVU107CisjZWxzZQogCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQJcGFnZXNldFtOUl9DUFVTXTsKLQorI2VuZGlmCiAJLyoKIAkgKiBmcmVlIGFyZWFzIG9mIGRpZmZlcmVudCBzaXplcwogCSAqLwpAQCAtMTQ1LDYgKzE1NCwxNCBAQAogCWludAkJCWFsbF91bnJlY2xhaW1hYmxlOyAvKiBBbGwgcGFnZXMgcGlubmVkICovCiAKIAkvKgorCSAqIERvZXMgdGhlIGFsbG9jYXRvciB0cnkgdG8gcmVjbGFpbSBwYWdlcyBmcm9tIHRoZSB6b25lIGFzIHNvb24KKwkgKiBhcyBpdCBmYWlscyBhIHdhdGVybWFya19vaygpIGluIF9fYWxsb2NfcGFnZXM/CisJICovCisJaW50CQkJcmVjbGFpbV9wYWdlczsKKwkvKiBBIGNvdW50IG9mIGhvdyBtYW55IHJlY2xhaW1lcnMgYXJlIHNjYW5uaW5nIHRoaXMgem9uZSAqLworCWF0b21pY190CQlyZWNsYWltX2luX3Byb2dyZXNzOworCisJLyoKIAkgKiBwcmV2X3ByaW9yaXR5IGhvbGRzIHRoZSBzY2FubmluZyBwcmlvcml0eSBmb3IgdGhpcyB6b25lLiAgSXQgaXMKIAkgKiBkZWZpbmVkIGFzIHRoZSBzY2FubmluZyBwcmlvcml0eSBhdCB3aGljaCB3ZSBhY2hpZXZlZCBvdXIgcmVjbGFpbQogCSAqIHRhcmdldCBhdCB0aGUgcHJldmlvdXMgdHJ5X3RvX2ZyZWVfcGFnZXMoKSBvciBiYWxhbmNlX3BnZGF0KCkKQEAgLTM4MSw3ICszOTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KIC8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgY3VycmVudCBOb2RlLiAqLwotI2RlZmluZSBudW1hX25vZGVfaWQoKQkJKGNwdV90b19ub2RlKF9zbXBfcHJvY2Vzc29yX2lkKCkpKQorI2RlZmluZSBudW1hX25vZGVfaWQoKQkJKGNwdV90b19ub2RlKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpKQogCiAjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCmluZGV4IDllNTc1MDAuLjNlYmMzNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKQEAgLTc1LDEyICs3NSw2IEBACiAjZGVmaW5lIFNPX09SSUdJTkFMX0RTVCA4MAogCiAjaWZkZWYgX19LRVJORUxfXwotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKLXZvaWQgbmZfZGVidWdfaXBfbG9jYWxfZGVsaXZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQgbmZfZGVidWdfaXBfbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiKTsKLXZvaWQgbmZfZGVidWdfaXBfZmluaXNoX291dHB1dDIoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0jZW5kaWYgLypDT05GSUdfTkVURklMVEVSX0RFQlVHKi8KLQogZXh0ZXJuIGludCBpcF9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKIAogLyogQ2FsbCB0aGlzIGJlZm9yZSBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgSVAgcGFja2V0OiBlbnN1cmVzIGl0IGlzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19jb3JlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19jb3JlLmgKaW5kZXggZDg0YmUwMmMuLjY5NGFlYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19jb3JlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9JUF9DT05OVFJBQ0tfQ09SRV9ICiAjZGVmaW5lIF9JUF9DT05OVFJBQ0tfQ09SRV9ICiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaD4KIAogLyogVGhpcyBoZWFkZXIgaXMgdXNlZCB0byBzaGFyZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYmV0d2VlbiB0aGUKICAgIHN0YW5kYWxvbmUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUsIGFuZCB0aGUgY29tcGF0aWJpbGl0eSBsYXllcidzIHVzZQpAQCAtNDcsNiArNDYsNiBAQAogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqaXBfY29ubnRyYWNrX2hhc2g7CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpcF9jb25udHJhY2tfZXhwZWN0X2xpc3Q7Ci1ERUNMQVJFX1JXTE9DS19FWFRFUk4oaXBfY29ubnRyYWNrX2xvY2spOworZXh0ZXJuIHJ3bG9ja190IGlwX2Nvbm50cmFja19sb2NrOwogI2VuZGlmIC8qIF9JUF9DT05OVFJBQ0tfQ09SRV9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oCmluZGV4IDJiNzJiODYuLmUyMDFlYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaApAQCAtNTAsMTAgKzUwLDkgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaD4KIAogLyogUHJvdGVjdHMgTkFUIGhhc2ggdGFibGVzLCBhbmQgTkFULXByaXZhdGUgcGFydCBvZiBjb25udHJhY2tzLiAqLwotREVDTEFSRV9SV0xPQ0tfRVhURVJOKGlwX25hdF9sb2NrKTsKK2V4dGVybiByd2xvY2tfdCBpcF9uYXRfbG9jazsKIAogLyogVGhlIHN0cnVjdHVyZSBlbWJlZGRlZCBpbiB0aGUgY29ubnRyYWNrIHN0cnVjdHVyZS4gKi8KIHN0cnVjdCBpcF9uYXRfaW5mbwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oCmluZGV4IGYyYWU3YzUuLjM2MDQyOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2xpc3RoZWxwLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9MSVNUSEVMUF9ICiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2xvY2toZWxwLmg+CiAKIC8qIEhlYWRlciB0byBkbyBtb3JlIGNvbXByZWhlbnNpdmUgam9iIHRoYW4gbGludXgvbGlzdC5oOyBhc3N1bWUgbGlzdAogICAgaXMgZmlyc3QgZW50cnkgaW4gc3RydWN0dXJlLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9sb2NraGVscC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9sb2NraGVscC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzI4ODYzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0jaWZuZGVmIF9MT0NLSEVMUF9ICi0jZGVmaW5lIF9MT0NLSEVMUF9ICi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLQotLyogSGVhZGVyIHRvIGRvIGhlbHAgaW4gbG9jayBkZWJ1Z2dpbmcuICovCi0KLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi1zdHJ1Y3Qgc3BpbmxvY2tfZGVidWcKLXsKLQlzcGlubG9ja190IGw7Ci0JYXRvbWljX3QgbG9ja2VkX2J5OwotfTsKLQotc3RydWN0IHJ3bG9ja19kZWJ1ZwotewotCXJ3bG9ja190IGw7Ci0JbG9uZyByZWFkX2xvY2tlZF9tYXA7Ci0JbG9uZyB3cml0ZV9sb2NrZWRfbWFwOwotfTsKLQotI2RlZmluZSBERUNMQVJFX0xPQ0sobCkgCQkJCQkJXAotc3RydWN0IHNwaW5sb2NrX2RlYnVnIGwgPSB7IFNQSU5fTE9DS19VTkxPQ0tFRCwgQVRPTUlDX0lOSVQoLTEpIH0KLSNkZWZpbmUgREVDTEFSRV9MT0NLX0VYVEVSTihsKSAJCQlcCi1leHRlcm4gc3RydWN0IHNwaW5sb2NrX2RlYnVnIGwKLSNkZWZpbmUgREVDTEFSRV9SV0xPQ0sobCkJCQkJXAotc3RydWN0IHJ3bG9ja19kZWJ1ZyBsID0geyBSV19MT0NLX1VOTE9DS0VELCAwLCAwIH0KLSNkZWZpbmUgREVDTEFSRV9SV0xPQ0tfRVhURVJOKGwpCQlcCi1leHRlcm4gc3RydWN0IHJ3bG9ja19kZWJ1ZyBsCi0KLSNkZWZpbmUgTVVTVF9CRV9MT0NLRUQobCkJCQkJCQlcCi1kbyB7IGlmIChhdG9taWNfcmVhZCgmKGwpLT5sb2NrZWRfYnkpICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkJCVwKLQlwcmludGsoIkFTU0VSVCAlczoldSAlcyB1bmxvY2tlZFxuIiwgX19GSUxFX18sIF9fTElORV9fLCAjbCk7CVwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBNVVNUX0JFX1VOTE9DS0VEKGwpCQkJCQkJXAotZG8geyBpZiAoYXRvbWljX3JlYWQoJihsKS0+bG9ja2VkX2J5KSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCQlcCi0JcHJpbnRrKCJBU1NFUlQgJXM6JXUgJXMgbG9ja2VkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICNsKTsJXAotfSB3aGlsZSgwKQotCi0vKiBXcml0ZSBsb2NrZWQgT0sgYXMgd2VsbC4gKi8KLSNkZWZpbmUgTVVTVF9CRV9SRUFEX0xPQ0tFRChsKQkJCQkJCSAgICBcCi1kbyB7IGlmICghKChsKS0+cmVhZF9sb2NrZWRfbWFwICYgKDFVTCA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpKQkJICAgIFwKLQkgJiYgISgobCktPndyaXRlX2xvY2tlZF9tYXAgJiAoMVVMIDw8IHNtcF9wcm9jZXNzb3JfaWQoKSkpKQkgICAgXAotCXByaW50aygiQVNTRVJUICVzOiV1ICVzIG5vdCByZWFkbG9ja2VkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICNsKTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIE1VU1RfQkVfV1JJVEVfTE9DS0VEKGwpCQkJCQkJICAgICBcCi1kbyB7IGlmICghKChsKS0+d3JpdGVfbG9ja2VkX21hcCAmICgxVUwgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkpCSAgICAgXAotCXByaW50aygiQVNTRVJUICVzOiV1ICVzIG5vdCB3cml0ZWxvY2tlZFxuIiwgX19GSUxFX18sIF9fTElORV9fLCAjbCk7IFwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBNVVNUX0JFX1JFQURfV1JJVEVfVU5MT0NLRUQobCkJCQkJCSAgXAotZG8geyBpZiAoKGwpLT5yZWFkX2xvY2tlZF9tYXAgJiAoMVVMIDw8IHNtcF9wcm9jZXNzb3JfaWQoKSkpCQkgIFwKLQlwcmludGsoIkFTU0VSVCAlczoldSAlcyByZWFkbG9ja2VkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICNsKTsJICBcCi0gZWxzZSBpZiAoKGwpLT53cml0ZV9sb2NrZWRfbWFwICYgKDFVTCA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpKQkJICBcCi0JIHByaW50aygiQVNTRVJUICVzOiV1ICVzIHdyaXRlbG9ja2VkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICNsKTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIExPQ0tfQkgobGspCQkJCQkJXAotZG8gewkJCQkJCQkJXAotCU1VU1RfQkVfVU5MT0NLRUQobGspOwkJCQkJXAotCXNwaW5fbG9ja19iaCgmKGxrKS0+bCk7CQkJCQlcCi0JYXRvbWljX3NldCgmKGxrKS0+bG9ja2VkX2J5LCBzbXBfcHJvY2Vzc29yX2lkKCkpOwlcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUgVU5MT0NLX0JIKGxrKQkJCQlcCi1kbyB7CQkJCQkJXAotCU1VU1RfQkVfTE9DS0VEKGxrKTsJCQlcCi0JYXRvbWljX3NldCgmKGxrKS0+bG9ja2VkX2J5LCAtMSk7CVwKLQlzcGluX3VubG9ja19iaCgmKGxrKS0+bCk7CQlcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUgUkVBRF9MT0NLKGxrKSAJCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0JTVVTVF9CRV9SRUFEX1dSSVRFX1VOTE9DS0VEKGxrKTsJCQlcCi0JcmVhZF9sb2NrX2JoKCYobGspLT5sKTsJCQkJCVwKLQlzZXRfYml0KHNtcF9wcm9jZXNzb3JfaWQoKSwgJihsayktPnJlYWRfbG9ja2VkX21hcCk7CVwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBXUklURV9MT0NLKGxrKQkJCQkJCQkgIFwKLWRvIHsJCQkJCQkJCQkgIFwKLQlNVVNUX0JFX1JFQURfV1JJVEVfVU5MT0NLRUQobGspOwkJCQkgIFwKLQl3cml0ZV9sb2NrX2JoKCYobGspLT5sKTsJCQkJCSAgXAotCXNldF9iaXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCAmKGxrKS0+d3JpdGVfbG9ja2VkX21hcCk7CQkgIFwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBSRUFEX1VOTE9DSyhsaykJCQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlpZiAoISgobGspLT5yZWFkX2xvY2tlZF9tYXAgJiAoMVVMIDw8IHNtcF9wcm9jZXNzb3JfaWQoKSkpKQlcCi0JCXByaW50aygiQVNTRVJUOiAlczoldSAlcyBub3QgcmVhZGxvY2tlZFxuIiwgCQlcCi0JCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICNsayk7CQkJXAotCWNsZWFyX2JpdChzbXBfcHJvY2Vzc29yX2lkKCksICYobGspLT5yZWFkX2xvY2tlZF9tYXApOwkJXAotCXJlYWRfdW5sb2NrX2JoKCYobGspLT5sKTsJCQkJCVwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBXUklURV9VTkxPQ0sobGspCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0JTVVTVF9CRV9XUklURV9MT0NLRUQobGspOwkJCQlcCi0JY2xlYXJfYml0KHNtcF9wcm9jZXNzb3JfaWQoKSwgJihsayktPndyaXRlX2xvY2tlZF9tYXApOwlcCi0Jd3JpdGVfdW5sb2NrX2JoKCYobGspLT5sKTsJCQkJXAotfSB3aGlsZSgwKQotCi0jZWxzZQotI2RlZmluZSBERUNMQVJFX0xPQ0sobCkgc3BpbmxvY2tfdCBsID0gU1BJTl9MT0NLX1VOTE9DS0VECi0jZGVmaW5lIERFQ0xBUkVfTE9DS19FWFRFUk4obCkgZXh0ZXJuIHNwaW5sb2NrX3QgbAotI2RlZmluZSBERUNMQVJFX1JXTE9DSyhsKSByd2xvY2tfdCBsID0gUldfTE9DS19VTkxPQ0tFRAotI2RlZmluZSBERUNMQVJFX1JXTE9DS19FWFRFUk4obCkgZXh0ZXJuIHJ3bG9ja190IGwKLQotI2RlZmluZSBNVVNUX0JFX0xPQ0tFRChsKQotI2RlZmluZSBNVVNUX0JFX1VOTE9DS0VEKGwpCi0jZGVmaW5lIE1VU1RfQkVfUkVBRF9MT0NLRUQobCkKLSNkZWZpbmUgTVVTVF9CRV9XUklURV9MT0NLRUQobCkKLSNkZWZpbmUgTVVTVF9CRV9SRUFEX1dSSVRFX1VOTE9DS0VEKGwpCi0KLSNkZWZpbmUgTE9DS19CSChsKSBzcGluX2xvY2tfYmgobCkKLSNkZWZpbmUgVU5MT0NLX0JIKGwpIHNwaW5fdW5sb2NrX2JoKGwpCi0KLSNkZWZpbmUgUkVBRF9MT0NLKGwpIHJlYWRfbG9ja19iaChsKQotI2RlZmluZSBXUklURV9MT0NLKGwpIHdyaXRlX2xvY2tfYmgobCkKLSNkZWZpbmUgUkVBRF9VTkxPQ0sobCkgcmVhZF91bmxvY2tfYmgobCkKLSNkZWZpbmUgV1JJVEVfVU5MT0NLKGwpIHdyaXRlX3VubG9ja19iaChsKQotI2VuZGlmIC8qQ09ORklHX05FVEZJTFRFUl9ERUJVRyovCi0KLSNlbmRpZiAvKiBfTE9DS0hFTFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAppbmRleCA1NjFkNGRjLi4zMDI5Y2FkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJaW50CQkoKmR1bXApKHN0cnVjdCBza19idWZmICogc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogCWludAkJKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogCWludAkJZmFtaWx5OwotCWxvbmcJCWFyZ3NbNF07CisJbG9uZwkJYXJnc1s1XTsKIH07CiAKIHN0cnVjdCBuZXRsaW5rX25vdGlmeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCAzOWFiOGM2Li5mNWE2Njk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtNjEsMjEgKzYxLDIwIEBACiAjZGVmaW5lIFBHX2FjdGl2ZQkJIDYKICNkZWZpbmUgUEdfc2xhYgkJCSA3CS8qIHNsYWIgZGVidWcgKFN1cGFybmEgd2FudHMgdGhpcykgKi8KIAotI2RlZmluZSBQR19oaWdobWVtCQkgOAotI2RlZmluZSBQR19jaGVja2VkCQkgOQkvKiBraWxsIG1lIGluIDIuNS48ZWFybHk+LiAqLwotI2RlZmluZSBQR19hcmNoXzEJCTEwCi0jZGVmaW5lIFBHX3Jlc2VydmVkCQkxMQorI2RlZmluZSBQR19jaGVja2VkCQkgOAkvKiBraWxsIG1lIGluIDIuNS48ZWFybHk+LiAqLworI2RlZmluZSBQR19hcmNoXzEJCSA5CisjZGVmaW5lIFBHX3Jlc2VydmVkCQkxMAorI2RlZmluZSBQR19wcml2YXRlCQkxMQkvKiBIYXMgc29tZXRoaW5nIGF0IC0+cHJpdmF0ZSAqLwogCi0jZGVmaW5lIFBHX3ByaXZhdGUJCTEyCS8qIEhhcyBzb21ldGhpbmcgYXQgLT5wcml2YXRlICovCi0jZGVmaW5lIFBHX3dyaXRlYmFjawkJMTMJLyogUGFnZSBpcyB1bmRlciB3cml0ZWJhY2sgKi8KLSNkZWZpbmUgUEdfbm9zYXZlCQkxNAkvKiBVc2VkIGZvciBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUgKi8KLSNkZWZpbmUgUEdfY29tcG91bmQJCTE1CS8qIFBhcnQgb2YgYSBjb21wb3VuZCBwYWdlICovCisjZGVmaW5lIFBHX3dyaXRlYmFjawkJMTIJLyogUGFnZSBpcyB1bmRlciB3cml0ZWJhY2sgKi8KKyNkZWZpbmUgUEdfbm9zYXZlCQkxMwkvKiBVc2VkIGZvciBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUgKi8KKyNkZWZpbmUgUEdfY29tcG91bmQJCTE0CS8qIFBhcnQgb2YgYSBjb21wb3VuZCBwYWdlICovCisjZGVmaW5lIFBHX3N3YXBjYWNoZQkJMTUJLyogU3dhcCBwYWdlOiBzd3BfZW50cnlfdCBpbiBwcml2YXRlICovCiAKLSNkZWZpbmUgUEdfc3dhcGNhY2hlCQkxNgkvKiBTd2FwIHBhZ2U6IHN3cF9lbnRyeV90IGluIHByaXZhdGUgKi8KLSNkZWZpbmUgUEdfbWFwcGVkdG9kaXNrCQkxNwkvKiBIYXMgYmxvY2tzIGFsbG9jYXRlZCBvbi1kaXNrICovCi0jZGVmaW5lIFBHX3JlY2xhaW0JCTE4CS8qIFRvIGJlIHJlY2xhaW1lZCBhc2FwICovCi0jZGVmaW5lIFBHX25vc2F2ZV9mcmVlCQkxOQkvKiBGcmVlLCBzaG91bGQgbm90IGJlIHdyaXR0ZW4gKi8KLSNkZWZpbmUgUEdfdW5jYWNoZWQJCTIwCS8qIFBhZ2UgaGFzIGJlZW4gbWFwcGVkIGFzIHVuY2FjaGVkICovCisjZGVmaW5lIFBHX21hcHBlZHRvZGlzawkJMTYJLyogSGFzIGJsb2NrcyBhbGxvY2F0ZWQgb24tZGlzayAqLworI2RlZmluZSBQR19yZWNsYWltCQkxNwkvKiBUbyBiZSByZWNsYWltZWQgYXNhcCAqLworI2RlZmluZSBQR19ub3NhdmVfZnJlZQkJMTgJLyogRnJlZSwgc2hvdWxkIG5vdCBiZSB3cml0dGVuICovCisjZGVmaW5lIFBHX3VuY2FjaGVkCQkxOQkvKiBQYWdlIGhhcyBiZWVuIG1hcHBlZCBhcyB1bmNhY2hlZCAqLwogCiAvKgogICogR2xvYmFsIHBhZ2UgYWNjb3VudGluZy4gIE9uZSBpbnN0YW5jZSBwZXIgQ1BVLiAgT25seSB1bnNpZ25lZCBsb25ncyBhcmUKQEAgLTEzNiw4ICsxMzUsOCBAQAogCiBleHRlcm4gdm9pZCBnZXRfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcmV0KTsKIGV4dGVybiB2b2lkIGdldF9mdWxsX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2Vfc3RhdGUgKnJldCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3JlYWRfcGFnZV9zdGF0ZSh1bnNpZ25lZCBvZmZzZXQpOwotZXh0ZXJuIHZvaWQgX19tb2RfcGFnZV9zdGF0ZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgZGVsdGEpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19yZWFkX3BhZ2Vfc3RhdGUodW5zaWduZWQgbG9uZyBvZmZzZXQpOworZXh0ZXJuIHZvaWQgX19tb2RfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBkZWx0YSk7CiAKICNkZWZpbmUgcmVhZF9wYWdlX3N0YXRlKG1lbWJlcikgXAogCV9fcmVhZF9wYWdlX3N0YXRlKG9mZnNldG9mKHN0cnVjdCBwYWdlX3N0YXRlLCBtZW1iZXIpKQpAQCAtMjE1LDcgKzIxNCw3IEBACiAjZGVmaW5lIFRlc3RTZXRQYWdlU2xhYihwYWdlKQl0ZXN0X2FuZF9zZXRfYml0KFBHX3NsYWIsICYocGFnZSktPmZsYWdzKQogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KLSNkZWZpbmUgUGFnZUhpZ2hNZW0ocGFnZSkJdGVzdF9iaXQoUEdfaGlnaG1lbSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIFBhZ2VIaWdoTWVtKHBhZ2UpCWlzX2hpZ2htZW0ocGFnZV96b25lKHBhZ2UpKQogI2Vsc2UKICNkZWZpbmUgUGFnZUhpZ2hNZW0ocGFnZSkJMCAvKiBuZWVkZWQgdG8gb3B0aW1pemUgYXdheSBhdCBjb21waWxlIHRpbWUgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCAwNDIyMDMxLi5kOWEyNTY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtNTIsMTIgKzUyLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VfY2FjaGVfYWxsb2Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKngpCiB7Ci0JcmV0dXJuIGFsbG9jX3BhZ2VzKG1hcHBpbmdfZ2ZwX21hc2soeCksIDApOworCXJldHVybiBhbGxvY19wYWdlcyhtYXBwaW5nX2dmcF9tYXNrKHgpfF9fR0ZQX05PUkVDTEFJTSwgMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VfY2FjaGVfYWxsb2NfY29sZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqeCkKIHsKLQlyZXR1cm4gYWxsb2NfcGFnZXMobWFwcGluZ19nZnBfbWFzayh4KXxfX0dGUF9DT0xELCAwKTsKKwlyZXR1cm4gYWxsb2NfcGFnZXMobWFwcGluZ19nZnBfbWFzayh4KXxfX0dGUF9DT0xEfF9fR0ZQX05PUkVDTEFJTSwgMCk7CiB9CiAKIHR5cGVkZWYgaW50IGZpbGxlcl90KHZvaWQgKiwgc3RydWN0IHBhZ2UgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGI4YjRlYmYuLjYzZTg5ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC01NzUsNiArNTc1LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU1MAkJMHgwMGUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1RfNjU1NTQJCTB4MDBlNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NUXzY1NTU1CQkweDAwZTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82OTAwMAkJMHgwMGMwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NSVJPCQkweDEwMzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NSVJPXzM2MDUwCTB4NTYwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL2JpdG1hcC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL2JpdG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNGI3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmgKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBiaXRtYXAuaDogQ29weXJpZ2h0IChDKSBQZXRlciBULiBCcmV1ZXIgKHB0YkBvdC51YzNtLmVzKSAyMDAzCisgKgorICogYWRkaXRpb25zOiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCwgUGF1bCBDbGVtZW50cywgU3RlZWxFeWUgVGVjaG5vbG9neSwgSW5jLgorICovCisjaWZuZGVmIEJJVE1BUF9ICisjZGVmaW5lIEJJVE1BUF9IIDEKKworI2RlZmluZSBCSVRNQVBfTUFKT1IgMworI2RlZmluZSBCSVRNQVBfTUlOT1IgMzgKKworLyoKKyAqIGluLW1lbW9yeSBiaXRtYXA6CisgKgorICogVXNlIDE2IGJpdCBibG9jayBjb3VudGVycyB0byB0cmFjayBwZW5kaW5nIHdyaXRlcyB0byBlYWNoICJjaHVuayIuCisgKiBUaGUgMiBoaWdoIG9yZGVyIGJpdHMgYXJlIHNwZWNpYWwtcHVycG9zZSwgdGhlIGZpcnN0IGlzIGEgZmxhZyBpbmRpY2F0aW5nCisgKiB3aGV0aGVyIGEgcmVzeW5jIGlzIG5lZWRlZC4gIFRoZSBzZWNvbmQgaXMgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBhCisgKiByZXN5bmMgaXMgYWN0aXZlLgorICogVGhpcyBtZWFucyB0aGF0IHRoZSBjb3VudGVyIGlzIGFjdHVhbGx5IDE0IGJpdHM6CisgKgorICogKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgcmVzeW5jIHwgcmVzeW5jIHwgICAgICAgICAgICAgICBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8IG5lZWRlZCB8IGFjdGl2ZSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgKDAtMSkgfCAgKDAtMSkgfCAgICAgICAgICAgICAgKDAtMTYzODMpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogVGhlICJyZXN5bmMgbmVlZGVkIiBiaXQgaXMgc2V0IHdoZW46CisgKiAgICBhICcxJyBiaXQgaXMgcmVhZCBmcm9tIHN0b3JhZ2UgYXQgc3RhcnR1cC4KKyAqICAgIGEgd3JpdGUgcmVxdWVzdCBmYWlscyBvbiBzb21lIGRyaXZlcworICogICAgYSByZXN5bmMgaXMgYWJvcnRlZCBvbiBhIGNodW5rIHdpdGggJ3Jlc3luYyBhY3RpdmUnIHNldAorICogSXQgaXMgY2xlYXJlZCAoYW5kIHJlc3luYy1hY3RpdmUgc2V0KSB3aGVuIGEgcmVzeW5jIHN0YXJ0cyBhY3Jvc3MgYWxsIGRyaXZlcworICogb2YgdGhlIGNodW5rLgorICoKKyAqCisgKiBUaGUgInJlc3luYyBhY3RpdmUiIGJpdCBpcyBzZXQgd2hlbjoKKyAqICAgIGEgcmVzeW5jIGlzIHN0YXJ0ZWQgb24gYWxsIGRyaXZlcywgYW5kIHJlc3luY19uZWVkZWQgaXMgc2V0LgorICogICAgICAgcmVzeW5jX25lZWRlZCB3aWxsIGJlIGNsZWFyZWQgKGFzIGxvbmcgYXMgcmVzeW5jX2FjdGl2ZSB3YXNuJ3QgYWxyZWFkeSBzZXQpLgorICogSXQgaXMgY2xlYXJlZCB3aGVuIGEgcmVzeW5jIGNvbXBsZXRlcy4KKyAqCisgKiBUaGUgY291bnRlciBjb3VudHMgcGVuZGluZyB3cml0ZSByZXF1ZXN0cywgcGx1cyB0aGUgb24tZGlzayBiaXQuCisgKiBXaGVuIHRoZSBjb3VudGVyIGlzICcxJyBhbmQgdGhlIHJlc3luYyBiaXRzIGFyZSBjbGVhciwgdGhlIG9uLWRpc2sKKyAqIGJpdCBjYW4gYmUgY2xlYXJlZCBhc3dlbGwsIHRodXMgc2V0dGluZyB0aGUgY291bnRlciB0byAwLgorICogV2hlbiB3ZSBzZXQgYSBiaXQsIG9yIGluIHRoZSBjb3VudGVyICh0byBzdGFydCBhIHdyaXRlKSwgaWYgdGhlIGZpZWxkcyBpcworICogMCwgd2UgZmlyc3Qgc2V0IHRoZSBkaXNrIGJpdCBhbmQgc2V0IHRoZSBjb3VudGVyIHRvIDEuCisgKgorICogSWYgdGhlIGNvdW50ZXIgaXMgMCwgdGhlIG9uLWRpc2sgYml0IGlzIGNsZWFyIGFuZCB0aGUgc3RpcGUgaXMgY2xlYW4KKyAqIEFueXRoaW5nIHRoYXQgZGlydGllcyB0aGUgc3RpcGUgcHVzaGVzIHRoZSBjb3VudGVyIHRvIDIgKGF0IGxlYXN0KQorICogYW5kIHNldHMgdGhlIG9uLWRpc2sgYml0IChsYXppbHkpLgorICogSWYgYSBwZXJpb2RpYyBzd2VlcCBmaW5kIHRoZSBjb3VudGVyIGF0IDIsIGl0IGlzIGRlY3JlbWVudGVkIHRvIDEuCisgKiBJZiB0aGUgc3dlZXAgZmluZCB0aGUgY291bnRlciBhdCAxLCB0aGUgb24tZGlzayBiaXQgaXMgY2xlYXJlZCBhbmQgdGhlCisgKiBjb3VudGVyIGdvZXMgdG8gemVyby4KKyAqCisgKiBBbHNvLCB3ZSdsbCBoaWphY2sgdGhlICJtYXAiIHBvaW50ZXIgaXRzZWxmIGFuZCB1c2UgaXQgYXMgdHdvIDE2IGJpdCBibG9jaworICogY291bnRlcnMgYXMgYSBmYWxsYmFjayB3aGVuICJwYWdlIiBtZW1vcnkgY2Fubm90IGJlIGFsbG9jYXRlZDoKKyAqCisgKiBOb3JtYWwgY2FzZSAocGFnZSBtZW1vcnkgYWxsb2NhdGVkKToKKyAqCisgKiAgICAgcGFnZSBwb2ludGVyICgzMi1iaXQpCisgKgorICogICAgIFsgXSAtLS0tLS0rCisgKiAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgKy0tLS0tLS0+IFsgICBdWyAgIF0uLlsgICBdICg0MDk2IGJ5dGUgcGFnZSA9PSAyMDQ4IGNvdW50ZXJzKQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGMxICAgYzIgICAgYzIwNDgKKyAqCisgKiBIaWphY2tlZCBjYXNlIChwYWdlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCk6CisgKgorICogICAgIGhpamFja2VkIHBhZ2UgcG9pbnRlciAoMzItYml0KQorICoKKyAqICAgICBbCQkgIF1bCQkgIF0gKG5vIHBhZ2UgbWVtb3J5IGFsbG9jYXRlZCkKKyAqICAgICAgY291bnRlciAjMSAoMTYtYml0KSBjb3VudGVyICMyICgxNi1iaXQpCisgKgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgUEFHRV9CSVRTIChQQUdFX1NJWkUgPDwgMykKKyNkZWZpbmUgUEFHRV9CSVRfU0hJRlQgKFBBR0VfU0hJRlQgKyAzKQorCit0eXBlZGVmIF9fdTE2IGJpdG1hcF9jb3VudGVyX3Q7CisjZGVmaW5lIENPVU5URVJfQklUUyAxNgorI2RlZmluZSBDT1VOVEVSX0JJVF9TSElGVCA0CisjZGVmaW5lIENPVU5URVJfQllURV9SQVRJTyAoQ09VTlRFUl9CSVRTIC8gOCkKKyNkZWZpbmUgQ09VTlRFUl9CWVRFX1NISUZUIChDT1VOVEVSX0JJVF9TSElGVCAtIDMpCisKKyNkZWZpbmUgTkVFREVEX01BU0sgKChiaXRtYXBfY291bnRlcl90KSAoMSA8PCAoQ09VTlRFUl9CSVRTIC0gMSkpKQorI2RlZmluZSBSRVNZTkNfTUFTSyAoKGJpdG1hcF9jb3VudGVyX3QpICgxIDw8IChDT1VOVEVSX0JJVFMgLSAyKSkpCisjZGVmaW5lIENPVU5URVJfTUFYICgoYml0bWFwX2NvdW50ZXJfdCkgUkVTWU5DX01BU0sgLSAxKQorI2RlZmluZSBORUVERUQoeCkgKCgoYml0bWFwX2NvdW50ZXJfdCkgeCkgJiBORUVERURfTUFTSykKKyNkZWZpbmUgUkVTWU5DKHgpICgoKGJpdG1hcF9jb3VudGVyX3QpIHgpICYgUkVTWU5DX01BU0spCisjZGVmaW5lIENPVU5URVIoeCkgKCgoYml0bWFwX2NvdW50ZXJfdCkgeCkgJiBDT1VOVEVSX01BWCkKKworLyogaG93IG1hbnkgY291bnRlcnMgcGVyIHBhZ2U/ICovCisjZGVmaW5lIFBBR0VfQ09VTlRFUl9SQVRJTyAoUEFHRV9CSVRTIC8gQ09VTlRFUl9CSVRTKQorLyogc2FtZSwgZXhjZXB0IGEgc2hpZnQgdmFsdWUgZm9yIG1vcmUgZWZmaWNpZW50IGJpdG9wcyAqLworI2RlZmluZSBQQUdFX0NPVU5URVJfU0hJRlQgKFBBR0VfQklUX1NISUZUIC0gQ09VTlRFUl9CSVRfU0hJRlQpCisvKiBzYW1lLCBleGNlcHQgYSBtYXNrIHZhbHVlIGZvciBtb3JlIGVmZmljaWVudCBiaXRvcHMgKi8KKyNkZWZpbmUgUEFHRV9DT1VOVEVSX01BU0sgIChQQUdFX0NPVU5URVJfUkFUSU8gLSAxKQorCisjZGVmaW5lIEJJVE1BUF9CTE9DS19TSVpFIDUxMgorI2RlZmluZSBCSVRNQVBfQkxPQ0tfU0hJRlQgOQorCisvKiBob3cgbWFueSBibG9ja3MgcGVyIGNodW5rPyAodGhpcyBpcyB2YXJpYWJsZSkgKi8KKyNkZWZpbmUgQ0hVTktfQkxPQ0tfUkFUSU8oYml0bWFwKSAoKGJpdG1hcCktPmNodW5rc2l6ZSA+PiBCSVRNQVBfQkxPQ0tfU0hJRlQpCisjZGVmaW5lIENIVU5LX0JMT0NLX1NISUZUKGJpdG1hcCkgKChiaXRtYXApLT5jaHVua3NoaWZ0IC0gQklUTUFQX0JMT0NLX1NISUZUKQorI2RlZmluZSBDSFVOS19CTE9DS19NQVNLKGJpdG1hcCkgKENIVU5LX0JMT0NLX1JBVElPKGJpdG1hcCkgLSAxKQorCisvKiB3aGVuIGhpamFja2VkLCB0aGUgY291bnRlcnMgYW5kIGJpdHMgcmVwcmVzZW50IGV2ZW4gbGFyZ2VyICJjaHVua3MiICovCisvKiB0aGVyZSB3aWxsIGJlIDEwMjQgY2h1bmtzIHJlcHJlc2VudGVkIGJ5IGVhY2ggY291bnRlciBpbiB0aGUgcGFnZSBwb2ludGVycyAqLworI2RlZmluZSBQQUdFUFRSX0JMT0NLX1JBVElPKGJpdG1hcCkgXAorCQkJKENIVU5LX0JMT0NLX1JBVElPKGJpdG1hcCkgPDwgUEFHRV9DT1VOVEVSX1NISUZUID4+IDEpCisjZGVmaW5lIFBBR0VQVFJfQkxPQ0tfU0hJRlQoYml0bWFwKSBcCisJCQkoQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSArIFBBR0VfQ09VTlRFUl9TSElGVCAtIDEpCisjZGVmaW5lIFBBR0VQVFJfQkxPQ0tfTUFTSyhiaXRtYXApIChQQUdFUFRSX0JMT0NLX1JBVElPKGJpdG1hcCkgLSAxKQorCisvKgorICogb24tZGlzayBiaXRtYXA6CisgKgorICogVXNlIG9uZSBiaXQgcGVyICJjaHVuayIgKGJsb2NrIHNldCkuIFdlIGRvIHRoZSBkaXNrIEkvTyBvbiB0aGUgYml0bWFwCisgKiBmaWxlIGEgcGFnZSBhdCBhIHRpbWUuIFRoZXJlJ3MgYSBzdXBlcmJsb2NrIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZS4KKyAqLworCisvKiBtYXAgY2h1bmtzIChiaXRzKSB0byBmaWxlIHBhZ2VzIC0gb2Zmc2V0IGJ5IHRoZSBzaXplIG9mIHRoZSBzdXBlcmJsb2NrICovCisjZGVmaW5lIENIVU5LX0JJVF9PRkZTRVQoY2h1bmspICgoY2h1bmspICsgKHNpemVvZihiaXRtYXBfc3VwZXJfdCkgPDwgMykpCisKKyNlbmRpZgorCisvKgorICogYml0bWFwIHN0cnVjdHVyZXM6CisgKi8KKworI2RlZmluZSBCSVRNQVBfTUFHSUMgMHg2ZDc0Njk2MgorCisvKiB1c2UgdGhlc2UgZm9yIGJpdG1hcC0+ZmxhZ3MgYW5kIGJpdG1hcC0+c2ItPnN0YXRlIGJpdC1maWVsZHMgKi8KK2VudW0gYml0bWFwX3N0YXRlIHsKKwlCSVRNQVBfQUNUSVZFID0gMHgwMDEsIC8qIHRoZSBiaXRtYXAgaXMgaW4gdXNlICovCisJQklUTUFQX1NUQUxFICA9IDB4MDAyICAvKiB0aGUgYml0bWFwIGZpbGUgaXMgb3V0IG9mIGRhdGUgb3IgaGFkIC1FSU8gKi8KK307CisKKy8qIHRoZSBzdXBlcmJsb2NrIGF0IHRoZSBmcm9udCBvZiB0aGUgYml0bWFwIGZpbGUgLS0gbGl0dGxlIGVuZGlhbiAqLwordHlwZWRlZiBzdHJ1Y3QgYml0bWFwX3N1cGVyX3MgeworCV9fdTMyIG1hZ2ljOyAgICAgICAgLyogIDAgIEJJVE1BUF9NQUdJQyAqLworCV9fdTMyIHZlcnNpb247ICAgICAgLyogIDQgIHRoZSBiaXRtYXAgbWFqb3IgZm9yIG5vdywgY291bGQgY2hhbmdlLi4uICovCisJX191OCAgdXVpZFsxNl07ICAgICAvKiAgOCAgMTI4IGJpdCB1dWlkIC0gbXVzdCBtYXRjaCBtZCBkZXZpY2UgdXVpZCAqLworCV9fdTY0IGV2ZW50czsgICAgICAgLyogMjQgIGV2ZW50IGNvdW50ZXIgZm9yIHRoZSBiaXRtYXAgKDEpKi8KKwlfX3U2NCBldmVudHNfY2xlYXJlZDsvKjMyICBldmVudCBjb3VudGVyIHdoZW4gbGFzdCBiaXQgY2xlYXJlZCAoMikgKi8KKwlfX3U2NCBzeW5jX3NpemU7ICAgIC8qIDQwICB0aGUgc2l6ZSBvZiB0aGUgbWQgZGV2aWNlJ3Mgc3luYyByYW5nZSgzKSAqLworCV9fdTMyIHN0YXRlOyAgICAgICAgLyogNDggIGJpdG1hcCBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCV9fdTMyIGNodW5rc2l6ZTsgICAgLyogNTIgIHRoZSBiaXRtYXAgY2h1bmsgc2l6ZSBpbiBieXRlcyAqLworCV9fdTMyIGRhZW1vbl9zbGVlcDsgLyogNTYgIHNlY29uZHMgYmV0d2VlbiBkaXNrIGZsdXNoZXMgKi8KKworCV9fdTggIHBhZFsyNTYgLSA2MF07IC8qIHNldCB0byB6ZXJvICovCit9IGJpdG1hcF9zdXBlcl90OworCisvKiBub3RlczoKKyAqICgxKSBUaGlzIGV2ZW50IGNvdW50ZXIgaXMgdXBkYXRlZCBiZWZvcmUgdGhlIGV2ZW50Y291bnRlciBpbiB0aGUgbWQgc3VwZXJibG9jaworICogICAgV2hlbiBhIGJpdG1hcCBpcyBsb2FkZWQsIGl0IGlzIG9ubHkgYWNjZXB0ZWQgaWYgdGhpcyBldmVudCBjb3VudGVyIGlzIGVxdWFsCisgKiAgICB0bywgb3Igb25lIGdyZWF0ZXIgdGhhbiwgdGhlIGV2ZW50IGNvdW50ZXIgaW4gdGhlIHN1cGVyYmxvY2suCisgKiAoMikgVGhpcyBldmVudCBjb3VudGVyIGlzIHVwZGF0ZWQgd2hlbiB0aGUgb3RoZXIgb25lIGlzICppZiphbmQqb25seSppZiogdGhlCisgKiAgICBhcnJheSBpcyBub3QgZGVncmFkZWQuICBBcyBiaXRzIGFyZSBub3QgY2xlYXJlZCB3aGVuIHRoZSBhcnJheSBpcyBkZWdyYWRlZCwKKyAqICAgIHRoaXMgcmVwcmVzZW50cyB0aGUgbGFzdCB0aW1lIHRoYXQgYW55IGJpdHMgd2VyZSBjbGVhcmVkLgorICogICAgSWYgYSBkZXZpY2UgaXMgYmVpbmcgYWRkZWQgdGhhdCBoYXMgYW4gZXZlbnQgY291bnQgd2l0aCB0aGlzIHZhbHVlIG9yCisgKiAgICBoaWdoZXIsIGl0IGlzIGFjY2VwdGVkIGFzIGNvbmZvcm1pbmcgdG8gdGhlIGJpdG1hcC4KKyAqICgzKVRoaXMgaXMgdGhlIG51bWJlciBvZiBzZWN0b3JzIHJlcHJlc2VudGVkIGJ5IHRoZSBiaXRtYXAsIGFuZCBpcyB0aGUgcmFuZ2UgdGhhdAorICogICAgcmVzeW5jIGhhcHBlbnMgYWNyb3NzLiAgRm9yIHJhaWQxIGFuZCByYWlkNS82IGl0IGlzIHRoZSBzaXplIG9mIGluZGl2aWR1YWwKKyAqICAgIGRldmljZXMuICBGb3IgcmFpZDEwIGl0IGlzIHRoZSBzaXplIG9mIHRoZSBhcnJheS4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKiB0aGUgaW4tbWVtb3J5IGJpdG1hcCBpcyByZXByZXNlbnRlZCBieSBiaXRtYXBfcGFnZXMgKi8KK3N0cnVjdCBiaXRtYXBfcGFnZSB7CisJLyoKKwkgKiBtYXAgcG9pbnRzIHRvIHRoZSBhY3R1YWwgbWVtb3J5IHBhZ2UKKwkgKi8KKwljaGFyICptYXA7CisJLyoKKwkgKiBpbiBlbWVyZ2VuY2llcyAod2hlbiBtYXAgY2Fubm90IGJlIGFsbG9jZWQpLCBoaWphY2sgdGhlIG1hcAorCSAqIHBvaW50ZXIgYW5kIHVzZSBpdCBhcyB0d28gY291bnRlcnMgaXRzZWxmCisJICovCisJdW5zaWduZWQgaW50IGhpamFja2VkOjE7CisJLyoKKwkgKiBjb3VudCBvZiBkaXJ0eSBiaXRzIG9uIHRoZSBwYWdlCisJICovCisJdW5zaWduZWQgaW50ICBjb3VudDozMTsKK307CisKKy8qIGtlZXAgdHJhY2sgb2YgYml0bWFwIGZpbGUgcGFnZXMgdGhhdCBoYXZlIHBlbmRpbmcgd3JpdGVzIG9uIHRoZW0gKi8KK3N0cnVjdCBwYWdlX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKK307CisKKy8qIHRoZSBtYWluIGJpdG1hcCBzdHJ1Y3R1cmUgLSBvbmUgcGVyIG1kZGV2ICovCitzdHJ1Y3QgYml0bWFwIHsKKwlzdHJ1Y3QgYml0bWFwX3BhZ2UgKmJwOworCXVuc2lnbmVkIGxvbmcgcGFnZXM7IC8qIHRvdGFsIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYml0bWFwICovCisJdW5zaWduZWQgbG9uZyBtaXNzaW5nX3BhZ2VzOyAvKiBudW1iZXIgb2YgcGFnZXMgbm90IHlldCBhbGxvY2F0ZWQgKi8KKworCW1kZGV2X3QgKm1kZGV2OyAvKiB0aGUgbWQgZGV2aWNlIHRoYXQgdGhlIGJpdG1hcCBpcyBmb3IgKi8KKworCWludCBjb3VudGVyX2JpdHM7IC8qIGhvdyBtYW55IGJpdHMgcGVyIGJsb2NrIGNvdW50ZXIgKi8KKworCS8qIGJpdG1hcCBjaHVua3NpemUgLS0gaG93IG11Y2ggZGF0YSBkb2VzIGVhY2ggYml0IHJlcHJlc2VudD8gKi8KKwl1bnNpZ25lZCBsb25nIGNodW5rc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGNodW5rc2hpZnQ7IC8qIGNodW5rc2l6ZSA9IDJeY2h1bmtzaGlmdCAoZm9yIGJpdG9wcykgKi8KKwl1bnNpZ25lZCBsb25nIGNodW5rczsgLyogdG90YWwgbnVtYmVyIG9mIGRhdGEgY2h1bmtzIGZvciB0aGUgYXJyYXkgKi8KKworCS8qIFdlIGhvbGQgYSBjb3VudCBvbiB0aGUgY2h1bmsgY3VycmVudGx5IGJlaW5nIHN5bmNlZCwgYW5kIGRyb3AKKwkgKiBpdCB3aGVuIHRoZSBsYXN0IGJsb2NrIGlzIHN0YXJ0ZWQuICBJZiB0aGUgcmVzeW5jIGlzIGFib3J0ZWQKKwkgKiBtaWR3YXksIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkcm9wIHRoYXQgY291bnQsIHNvIHdlIHJlbWVtYmVyCisJICogdGhlIGNvdW50ZWQgY2h1bmsuLgorCSAqLworCXVuc2lnbmVkIGxvbmcgc3luY2NodW5rOworCisJX191NjQJZXZlbnRzX2NsZWFyZWQ7CisKKwkvKiBiaXRtYXAgc3BpbmxvY2sgKi8KKwlzcGlubG9ja190IGxvY2s7CisKKwlsb25nIG9mZnNldDsgLyogb2Zmc2V0IGZyb20gc3VwZXJibG9jayBpZiBmaWxlIGlzIE5VTEwgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlsZTsgLyogYmFja2luZyBkaXNrIGZpbGUgKi8KKwlzdHJ1Y3QgcGFnZSAqc2JfcGFnZTsgLyogY2FjaGVkIGNvcHkgb2YgdGhlIGJpdG1hcCBmaWxlIHN1cGVyYmxvY2sgKi8KKwlzdHJ1Y3QgcGFnZSAqKmZpbGVtYXA7IC8qIGxpc3Qgb2YgY2FjaGUgcGFnZXMgZm9yIHRoZSBmaWxlICovCisJdW5zaWduZWQgbG9uZyAqZmlsZW1hcF9hdHRyOyAvKiBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgdy8gZmlsZW1hcCBwYWdlcyAqLworCXVuc2lnbmVkIGxvbmcgZmlsZV9wYWdlczsgLyogbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBmaWxlICovCisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiB0aGUgYml0bWFwIGRhZW1vbiAtIHBlcmlvZGljYWxseSB3YWtlcyB1cCBhbmQgc3dlZXBzIHRoZSBiaXRtYXAKKwkgKiBmaWxlLCBjbGVhbmluZyB1cCBiaXRzIGFuZCBmbHVzaGluZyBvdXQgcGFnZXMgdG8gZGlzayBhcyBuZWNlc3NhcnkKKwkgKi8KKwl1bnNpZ25lZCBsb25nIGRhZW1vbl9sYXN0cnVuOyAvKiBqaWZmaWVzIG9mIGxhc3QgcnVuICovCisJdW5zaWduZWQgbG9uZyBkYWVtb25fc2xlZXA7IC8qIGhvdyBtYW55IHNlY29uZHMgYmV0d2VlbiB1cGRhdGVzPyAqLworCisJLyoKKwkgKiBiaXRtYXBfd3JpdGViYWNrX2RhZW1vbiB3YWl0cyBmb3IgZmlsZS1wYWdlcyB0aGF0IGhhdmUgYmVlbiB3cml0dGVuLAorCSAqIGFzIHRoZXJlIGlzIG5vIHdheSB0byBnZXQgYSBjYWxsLWJhY2sgd2hlbiBhIHBhZ2Ugd3JpdGUgY29tcGxldGVzLgorCSAqLworCW1ka190aHJlYWRfdCAqd3JpdGViYWNrX2RhZW1vbjsKKwlzcGlubG9ja190IHdyaXRlX2xvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3JpdGVfd2FpdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNvbXBsZXRlX3BhZ2VzOworCW1lbXBvb2xfdCAqd3JpdGVfcG9vbDsKK307CisKKy8qIHRoZSBiaXRtYXAgQVBJICovCisKKy8qIHRoZXNlIGFyZSB1c2VkIG9ubHkgYnkgbWQvYml0bWFwICovCitpbnQgIGJpdG1hcF9jcmVhdGUobWRkZXZfdCAqbWRkZXYpOwordm9pZCBiaXRtYXBfZGVzdHJveShtZGRldl90ICptZGRldik7CitpbnQgIGJpdG1hcF9hY3RpdmUoc3RydWN0IGJpdG1hcCAqYml0bWFwKTsKKworY2hhciAqZmlsZV9wYXRoKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIGludCBjb3VudCk7Cit2b2lkIGJpdG1hcF9wcmludF9zYihzdHJ1Y3QgYml0bWFwICpiaXRtYXApOworaW50IGJpdG1hcF91cGRhdGVfc2Ioc3RydWN0IGJpdG1hcCAqYml0bWFwKTsKKworaW50ICBiaXRtYXBfc2V0YWxsYml0cyhzdHJ1Y3QgYml0bWFwICpiaXRtYXApOwordm9pZCBiaXRtYXBfd3JpdGVfYWxsKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCk7CisKKy8qIHRoZXNlIGFyZSBleHBvcnRlZCAqLworaW50IGJpdG1hcF9zdGFydHdyaXRlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc2VjdG9yX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNlY3RvcnMpOwordm9pZCBiaXRtYXBfZW5kd3JpdGUoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2VjdG9ycywKKwkJICAgICBpbnQgc3VjY2Vzcyk7CitpbnQgYml0bWFwX3N0YXJ0X3N5bmMoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIGludCAqYmxvY2tzKTsKK3ZvaWQgYml0bWFwX2VuZF9zeW5jKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc2VjdG9yX3Qgb2Zmc2V0LCBpbnQgKmJsb2NrcywgaW50IGFib3J0ZWQpOwordm9pZCBiaXRtYXBfY2xvc2Vfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXApOworCitpbnQgYml0bWFwX3VucGx1ZyhzdHJ1Y3QgYml0bWFwICpiaXRtYXApOworaW50IGJpdG1hcF9kYWVtb25fd29yayhzdHJ1Y3QgYml0bWFwICpiaXRtYXApOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaAppbmRleCBhNmE2N2QxLi5mZmEzMTZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaApAQCAtNjAsNyArNjAsMTQgQEAKICAqLwogI2RlZmluZSBNRF9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgTURfTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAgICA5MAotI2RlZmluZSBNRF9QQVRDSExFVkVMX1ZFUlNJT04gICAgICAgICAgIDEKKy8qCisgKiBNRF9QQVRDSExFVkVMX1ZFUlNJT04gaW5kaWNhdGVzIGtlcm5lbCBmdW5jdGlvbmFsaXR5LgorICogPj0xIG1lYW5zIGRpZmZlcmVudCBzdXBlcmJsb2NrIGZvcm1hdHMgYXJlIHNlbGVjdGFibGUgdXNpbmcgU0VUX0FSUkFZX0lORk8KKyAqICAgICBhbmQgbWFqb3JfdmVyc2lvbi9taW5vcl92ZXJzaW9uIGFjY29yZGluZ2x5CisgKiA+PTIgbWVhbnMgdGhhdCBJbnRlcm5hbCBiaXRtYXBzIGFyZSBzdXBwb3J0ZWQgYnkgc2V0dGluZyBNRF9TQl9CSVRNQVBfUFJFU0VOVAorICogICAgIGluIHRoZSBzdXBlciBzdGF0dXMgYnl0ZQorICovCisjZGVmaW5lIE1EX1BBVENITEVWRUxfVkVSU0lPTiAgICAgICAgICAgMgogCiBleHRlcm4gaW50IHJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5IChpbnQgcF9udW0sIG1ka19wZXJzb25hbGl0eV90ICpwKTsKIGV4dGVybiBpbnQgdW5yZWdpc3Rlcl9tZF9wZXJzb25hbGl0eSAoaW50IHBfbnVtKTsKQEAgLTY5LDcgKzc2LDcgQEAKIGV4dGVybiB2b2lkIG1kX3VucmVnaXN0ZXJfdGhyZWFkIChtZGtfdGhyZWFkX3QgKnRocmVhZCk7CiBleHRlcm4gdm9pZCBtZF93YWtldXBfdGhyZWFkKG1ka190aHJlYWRfdCAqdGhyZWFkKTsKIGV4dGVybiB2b2lkIG1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiB2b2lkIG1kX3dyaXRlX3N0YXJ0KG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiB2b2lkIG1kX3dyaXRlX3N0YXJ0KG1kZGV2X3QgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaSk7CiBleHRlcm4gdm9pZCBtZF93cml0ZV9lbmQobWRkZXZfdCAqbWRkZXYpOwogZXh0ZXJuIHZvaWQgbWRfaGFuZGxlX3NhZmVtb2RlKG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiB2b2lkIG1kX2RvbmVfc3luYyhtZGRldl90ICptZGRldiwgaW50IGJsb2NrcywgaW50IG9rKTsKQEAgLTc4LDYgKzg1LDEyIEBACiAKIGV4dGVybiB2b2lkIG1kX3ByaW50X2RldmljZXMgKHZvaWQpOwogCitleHRlcm4gdm9pZCBtZF9zdXBlcl93cml0ZShtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldiwKKwkJCSAgIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsIHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiBpbnQgc3luY19wYWdlX2lvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJ3KTsKKworCiAjZGVmaW5lIE1EX0JVRyh4Li4uKSB7IHByaW50aygibWQ6IGJ1ZyBpbiBmaWxlICVzLCBsaW5lICVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBtZF9wcmludF9kZXZpY2VzKCk7IH0KIAogI2VuZGlmIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9rLmgKaW5kZXggYzlhMGQ0MC4uOGMxNGJhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oCkBAIC0xNSw2ICsxNSw5IEBACiAjaWZuZGVmIF9NRF9LX0gKICNkZWZpbmUgX01EX0tfSAogCisvKiBhbmQgZG0tYmlvLWxpc3QuaCBpcyBub3QgdW5kZXIgaW5jbHVkZS9saW51eCBiZWNhdXNlLi4uLiA/Pz8gKi8KKyNpbmNsdWRlICIuLi8uLi8uLi9kcml2ZXJzL21kL2RtLWJpby1saXN0LmgiCisKICNkZWZpbmUgTURfUkVTRVJWRUQgICAgICAgMFVMCiAjZGVmaW5lIExJTkVBUiAgICAgICAgICAgIDFVTAogI2RlZmluZSBSQUlEMCAgICAgICAgICAgICAyVUwKQEAgLTE4MCw2ICsxODMsMTAgQEAKIAogCWludCBkZXNjX25yOwkJCS8qIGRlc2NyaXB0b3IgaW5kZXggaW4gdGhlIHN1cGVyYmxvY2sgKi8KIAlpbnQgcmFpZF9kaXNrOwkJCS8qIHJvbGUgb2YgZGV2aWNlIGluIGFycmF5ICovCisJaW50IHNhdmVkX3JhaWRfZGlzazsJCS8qIHJvbGUgdGhhdCBkZXZpY2UgdXNlZCB0byBoYXZlIGluIHRoZQorCQkJCQkgKiBhcnJheSBhbmQgY291bGQgYWdhaW4gaWYgd2UgZGlkIGEgcGFydGlhbAorCQkJCQkgKiByZXN5bmMgZnJvbSB0aGUgYml0bWFwCisJCQkJCSAqLwogCiAJYXRvbWljX3QJbnJfcGVuZGluZzsJLyogbnVtYmVyIG9mIHBlbmRpbmcgcmVxdWVzdHMuCiAJCQkJCSAqIG9ubHkgbWFpbnRhaW5lZCBmb3IgYXJyYXlzIHRoYXQKQEAgLTI1Miw2ICsyNTksMTEgQEAKIAlhdG9taWNfdAkJCXJlY292ZXJ5X2FjdGl2ZTsgLyogYmxvY2tzIHNjaGVkdWxlZCwgYnV0IG5vdCB3cml0dGVuICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJCXJlY292ZXJ5X3dhaXQ7CiAJc2VjdG9yX3QJCQlyZWNvdmVyeV9jcDsKKworCXNwaW5sb2NrX3QJCQl3cml0ZV9sb2NrOworCXdhaXRfcXVldWVfaGVhZF90CQlzYl93YWl0OwkvKiBmb3Igd2FpdGluZyBvbiBzdXBlcmJsb2NrIHVwZGF0ZXMgKi8KKwlhdG9taWNfdAkJCXBlbmRpbmdfd3JpdGVzOwkvKiBudW1iZXIgb2YgYWN0aXZlIHN1cGVyYmxvY2sgd3JpdGVzICovCisKIAl1bnNpZ25lZCBpbnQJCQlzYWZlbW9kZTsJLyogaWYgc2V0LCB1cGRhdGUgImNsZWFuIiBzdXBlcmJsb2NrCiAJCQkJCQkJICogd2hlbiBubyB3cml0ZXMgcGVuZGluZy4KIAkJCQkJCQkgKi8gCkBAIC0yNjAsNiArMjcyLDEzIEBACiAJYXRvbWljX3QJCQl3cml0ZXNfcGVuZGluZzsgCiAJcmVxdWVzdF9xdWV1ZV90CQkJKnF1ZXVlOwkvKiBmb3IgcGx1Z2dpbmcgLi4uICovCiAKKwlzdHJ1Y3QgYml0bWFwICAgICAgICAgICAgICAgICAgICpiaXRtYXA7IC8qIHRoZSBiaXRtYXAgZm9yIHRoZSBkZXZpY2UgKi8KKwlzdHJ1Y3QgZmlsZQkJCSpiaXRtYXBfZmlsZTsgLyogdGhlIGJpdG1hcCBmaWxlICovCisJbG9uZwkJCQliaXRtYXBfb2Zmc2V0OyAvKiBvZmZzZXQgZnJvbSBzdXBlcmJsb2NrIG9mCisJCQkJCQkJKiBzdGFydCBvZiBiaXRtYXAuIE1heSBiZQorCQkJCQkJCSogbmVnYXRpdmUsIGJ1dCBub3QgJzAnCisJCQkJCQkJKi8KKwogCXN0cnVjdCBsaXN0X2hlYWQJCWFsbF9tZGRldnM7CiB9OwogCkBAIC0yOTEsNyArMzEwLDcgQEAKIAlpbnQgKCpob3RfYWRkX2Rpc2spIChtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7CiAJaW50ICgqaG90X3JlbW92ZV9kaXNrKSAobWRkZXZfdCAqbWRkZXYsIGludCBudW1iZXIpOwogCWludCAoKnNwYXJlX2FjdGl2ZSkgKG1kZGV2X3QgKm1kZGV2KTsKLQlpbnQgKCpzeW5jX3JlcXVlc3QpKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsIGludCBnb19mYXN0ZXIpOworCXNlY3Rvcl90ICgqc3luY19yZXF1ZXN0KShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgKnNraXBwZWQsIGludCBnb19mYXN0ZXIpOwogCWludCAoKnJlc2l6ZSkgKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzKTsKIAlpbnQgKCpyZXNoYXBlKSAobWRkZXZfdCAqbWRkZXYsIGludCByYWlkX2Rpc2tzKTsKIAlpbnQgKCpyZWNvbmZpZykgKG1kZGV2X3QgKm1kZGV2LCBpbnQgbGF5b3V0LCBpbnQgY2h1bmtfc2l6ZSk7CkBAIC0zMzQsNiArMzUzLDcgQEAKIAl1bnNpZ25lZCBsb25nICAgICAgICAgICBmbGFnczsKIAlzdHJ1Y3QgY29tcGxldGlvbgkqZXZlbnQ7CiAJc3RydWN0IHRhc2tfc3RydWN0CSp0c2s7CisJdW5zaWduZWQgbG9uZwkJdGltZW91dDsKIAljb25zdCBjaGFyCQkqbmFtZTsKIH0gbWRrX3RocmVhZF90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaAppbmRleCA4YmE5NWQ2Li5kYzY1Y2Q0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKQEAgLTk2LDYgKzk2LDcgQEAKICNkZWZpbmUgTURfU0JfQ0xFQU4JCTAKICNkZWZpbmUgTURfU0JfRVJST1JTCQkxCiAKKyNkZWZpbmUJTURfU0JfQklUTUFQX1BSRVNFTlQJOCAvKiBiaXRtYXAgbWF5IGJlIHByZXNlbnQgbmVhcmJ5ICovCiB0eXBlZGVmIHN0cnVjdCBtZHBfc3VwZXJibG9ja19zIHsKIAkvKgogCSAqIENvbnN0YW50IGdlbmVyaWMgaW5mb3JtYXRpb24KQEAgLTE4NCw3ICsxODUsNyBAQAogCS8qIGNvbnN0YW50IGFycmF5IGluZm9ybWF0aW9uIC0gMTI4IGJ5dGVzICovCiAJX191MzIJbWFnaWM7CQkvKiBNRF9TQl9NQUdJQzogMHhhOTJiNGVmYyAtIGxpdHRsZSBlbmRpYW4gKi8KIAlfX3UzMgltYWpvcl92ZXJzaW9uOwkvKiAxICovCi0JX191MzIJZmVhdHVyZV9tYXA7CS8qIDAgZm9yIG5vdyAqLworCV9fdTMyCWZlYXR1cmVfbWFwOwkvKiBiaXQgMCBzZXQgaWYgJ2JpdG1hcF9vZmZzZXQnIGlzIG1lYW5pbmdmdWwgKi8KIAlfX3UzMglwYWQwOwkJLyogYWx3YXlzIHNldCB0byAwIHdoZW4gd3JpdGluZyAqLwogCiAJX191OAlzZXRfdXVpZFsxNl07CS8qIHVzZXItc3BhY2UgZ2VuZXJhdGVkLiAqLwpAQCAtMTk3LDcgKzE5OCwxMSBAQAogCiAJX191MzIJY2h1bmtzaXplOwkvKiBpbiA1MTJieXRlIHNlY3RvcnMgKi8KIAlfX3UzMglyYWlkX2Rpc2tzOwotCV9fdTgJcGFkMVsxMjgtOTZdOwkvKiBzZXQgdG8gMCB3aGVuIHdyaXR0ZW4gKi8KKwlfX3UzMgliaXRtYXBfb2Zmc2V0OwkvKiBzZWN0b3JzIGFmdGVyIHN0YXJ0IG9mIHN1cGVyYmxvY2sgdGhhdCBiaXRtYXAgc3RhcnRzCisJCQkJICogTk9URTogc2lnbmVkLCBzbyBiaXRtYXAgY2FuIGJlIGJlZm9yZSBzdXBlcmJsb2NrCisJCQkJICogb25seSBtZWFuaW5nZnVsIG9mIGZlYXR1cmVfbWFwWzBdIGlzIHNldC4KKwkJCQkgKi8KKwlfX3U4CXBhZDFbMTI4LTEwMF07CS8qIHNldCB0byAwIHdoZW4gd3JpdHRlbiAqLwogCiAJLyogY29uc3RhbnQgdGhpcy1kZXZpY2UgaW5mb3JtYXRpb24gLSA2NCBieXRlcyAqLwogCV9fdTY0CWRhdGFfb2Zmc2V0OwkvKiBzZWN0b3Igc3RhcnQgb2YgZGF0YSwgb2Z0ZW4gMCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kX3UuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF91LmgKaW5kZXggYTJkZjVjMi4uODFkYTIwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL21kX3UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfdS5oCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIEdFVF9ESVNLX0lORk8JCV9JT1IgKE1EX01BSk9SLCAweDEyLCBtZHVfZGlza19pbmZvX3QpCiAjZGVmaW5lIFBSSU5UX1JBSURfREVCVUcJX0lPIChNRF9NQUpPUiwgMHgxMykKICNkZWZpbmUgUkFJRF9BVVRPUlVOCQlfSU8gKE1EX01BSk9SLCAweDE0KQorI2RlZmluZSBHRVRfQklUTUFQX0ZJTEUJCV9JT1IgKE1EX01BSk9SLCAweDE1LCBtZHVfYml0bWFwX2ZpbGVfdCkKIAogLyogY29uZmlndXJhdGlvbiAqLwogI2RlZmluZSBDTEVBUl9BUlJBWQkJX0lPIChNRF9NQUpPUiwgMHgyMCkKQEAgLTM2LDYgKzM3LDcgQEAKICNkZWZpbmUgSE9UX0FERF9ESVNLCQlfSU8gKE1EX01BSk9SLCAweDI4KQogI2RlZmluZSBTRVRfRElTS19GQVVMVFkJCV9JTyAoTURfTUFKT1IsIDB4MjkpCiAjZGVmaW5lIEhPVF9HRU5FUkFURV9FUlJPUglfSU8gKE1EX01BSk9SLCAweDJhKQorI2RlZmluZSBTRVRfQklUTUFQX0ZJTEUJCV9JT1cgKE1EX01BSk9SLCAweDJiLCBpbnQpCiAKIC8qIHVzYWdlICovCiAjZGVmaW5lIFJVTl9BUlJBWQkJX0lPVyAoTURfTUFKT1IsIDB4MzAsIG1kdV9wYXJhbV90KQpAQCAtMTA2LDYgKzEwOCwxMSBAQAogCiB9IG1kdV9zdGFydF9pbmZvX3Q7CiAKK3R5cGVkZWYgc3RydWN0IG1kdV9iaXRtYXBfZmlsZV9zCit7CisJY2hhciBwYXRobmFtZVs0MDk2XTsKK30gbWR1X2JpdG1hcF9maWxlX3Q7CisKIHR5cGVkZWYgc3RydWN0IG1kdV9wYXJhbV9zCiB7CiAJaW50CQkJcGVyc29uYWxpdHk7CS8qIDEsMiwzLDQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oIGIvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQxLmgKaW5kZXggYWJiZmRkOS4uOWQ5M2NmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQxLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQxLmgKQEAgLTM2LDEyICszNiwyMSBAQAogCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOwogCiAJc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OworCS8qIHF1ZXVlIHBlbmRpbmcgd3JpdGVzIGFuZCBzdWJtaXQgdGhlbSBvbiB1bnBsdWcgKi8KKwlzdHJ1Y3QgYmlvX2xpc3QJCXBlbmRpbmdfYmlvX2xpc3Q7CisJLyogcXVldWUgb2Ygd3JpdGVzIHRoYXQgaGF2ZSBiZWVuIHVucGx1Z2dlZCAqLworCXN0cnVjdCBiaW9fbGlzdAkJZmx1c2hpbmdfYmlvX2xpc3Q7CisKIAkvKiBmb3IgdXNlIHdoZW4gc3luY2luZyBtaXJyb3JzOiAqLwogCiAJc3BpbmxvY2tfdAkJcmVzeW5jX2xvY2s7Ci0JaW50IG5yX3BlbmRpbmc7Ci0JaW50IGJhcnJpZXI7CisJaW50CQkJbnJfcGVuZGluZzsKKwlpbnQJCQliYXJyaWVyOwogCXNlY3Rvcl90CQluZXh0X3Jlc3luYzsKKwlpbnQJCQlmdWxsc3luYzsgIC8qIHNldCB0byAxIGlmIGEgZnVsbCBzeW5jIGlzIG5lZWRlZCwKKwkJCQkJICAgICogKGZyZXNoIGRldmljZSBhZGRlZCkuCisJCQkJCSAgICAqIENsZWFyZWQgd2hlbiBhIHN5bmMgY29tcGxldGVzLgorCQkJCQkgICAgKi8KIAogCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfaWRsZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X3Jlc3VtZTsKQEAgLTg1LDE0ICs5NCwxNyBAQAogCWludAkJCXJlYWRfZGlzazsKIAogCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKKwlzdHJ1Y3QgYml0bWFwX3VwZGF0ZQkqYml0bWFwX3VwZGF0ZTsKIAkvKgogCSAqIGlmIHRoZSBJTyBpcyBpbiBXUklURSBkaXJlY3Rpb24sIHRoZW4gbXVsdGlwbGUgYmlvcyBhcmUgdXNlZC4KIAkgKiBXZSBjaG9vc2UgdGhlIG51bWJlciB3aGVuIHRoZXkgYXJlIGFsbG9jYXRlZC4KIAkgKi8KIAlzdHJ1Y3QgYmlvCQkqYmlvc1swXTsKKwkvKiBETyBOT1QgUFVUIEFOWSBORVcgRklFTERTIEhFUkUgLSBiaW9zIGFycmF5IGlzIGNvbnRpZ3VvdXNseSBhbGxvY2VkKi8KIH07CiAKIC8qIGJpdHMgZm9yIHIxYmlvLnN0YXRlICovCiAjZGVmaW5lCVIxQklPX1VwdG9kYXRlCTAKICNkZWZpbmUJUjFCSU9fSXNTeW5jCTEKKyNkZWZpbmUJUjFCSU9fRGVncmFkZWQJMgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggNGRiYjEwOTAuLmI1OGFmZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTIwMSw4ICsyMDEsOCBAQAogYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAogCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLWV4dGVybiB2b2lkIGFyY2hfdW5tYXBfYXJlYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpOwotZXh0ZXJuIHZvaWQgYXJjaF91bm1hcF9hcmVhX3RvcGRvd24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKTsKK2V4dGVybiB2b2lkIGFyY2hfdW5tYXBfYXJlYShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgYXJjaF91bm1hcF9hcmVhX3RvcGRvd24oc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKIAogI2RlZmluZSBzZXRfbW1fY291bnRlcihtbSwgbWVtYmVyLCB2YWx1ZSkgKG1tKS0+XyMjbWVtYmVyID0gKHZhbHVlKQogI2RlZmluZSBnZXRfbW1fY291bnRlcihtbSwgbWVtYmVyKSAoKG1tKS0+XyMjbWVtYmVyKQpAQCAtMjE4LDkgKzIxOCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgKCpnZXRfdW5tYXBwZWRfYXJlYSkgKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCQkJdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0Jdm9pZCAoKnVubWFwX2FyZWEpIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpOwotCXVuc2lnbmVkIGxvbmcgbW1hcF9iYXNlOwkJLyogYmFzZSBvZiBtbWFwIGFyZWEgKi8KLQl1bnNpZ25lZCBsb25nIGZyZWVfYXJlYV9jYWNoZTsJCS8qIGZpcnN0IGhvbGUgKi8KKwl2b2lkICgqdW5tYXBfYXJlYSkgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOworICAgICAgICB1bnNpZ25lZCBsb25nIG1tYXBfYmFzZTsJCS8qIGJhc2Ugb2YgbW1hcCBhcmVhICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgY2FjaGVkX2hvbGVfc2l6ZTsgICAgICAgICAvKiBpZiBub24temVybywgdGhlIGxhcmdlc3QgaG9sZSBiZWxvdyBmcmVlX2FyZWFfY2FjaGUgKi8KKwl1bnNpZ25lZCBsb25nIGZyZWVfYXJlYV9jYWNoZTsJCS8qIGZpcnN0IGhvbGUgb2Ygc2l6ZSBjYWNoZWRfaG9sZV9zaXplIG9yIGxhcmdlciAqLwogCXBnZF90ICogcGdkOwogCWF0b21pY190IG1tX3VzZXJzOwkJCS8qIEhvdyBtYW55IHVzZXJzIHdpdGggdXNlciBzcGFjZT8gKi8KIAlhdG9taWNfdCBtbV9jb3VudDsJCQkvKiBIb3cgbWFueSByZWZlcmVuY2VzIHRvICJzdHJ1Y3QgbW1fc3RydWN0IiAodXNlcnMgY291bnQgYXMgMSkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGNjMDRmNWMuLmQ3YzgzOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMTkzLDcgKzE5Myw2IEBACiAgKglAbmZjYWNoZTogQ2FjaGUgaW5mbwogICoJQG5mY3Q6IEFzc29jaWF0ZWQgY29ubmVjdGlvbiwgaWYgYW55CiAgKglAbmZjdGluZm86IFJlbGF0aW9uc2hpcCBvZiB0aGlzIHNrYiB0byB0aGUgY29ubmVjdGlvbgotICoJQG5mX2RlYnVnOiBOZXRmaWx0ZXIgZGVidWdnaW5nCiAgKglAbmZfYnJpZGdlOiBTYXZlZCBkYXRhIGFib3V0IGEgYnJpZGdlZCBmcmFtZSAtIHNlZSBicl9uZXRmaWx0ZXIuYwogICogICAgICBAcHJpdmF0ZTogRGF0YSB3aGljaCBpcyBwcml2YXRlIHRvIHRoZSBISVBQSSBpbXBsZW1lbnRhdGlvbgogICoJQHRjX2luZGV4OiBUcmFmZmljIGNvbnRyb2wgaW5kZXgKQEAgLTI2NCw5ICsyNjMsNiBAQAogCV9fdTMyCQkJbmZjYWNoZTsKIAlfX3UzMgkJCW5mY3RpbmZvOwogCXN0cnVjdCBuZl9jb25udHJhY2sJKm5mY3Q7Ci0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotICAgICAgICB1bnNpZ25lZCBpbnQJCW5mX2RlYnVnOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKIAlzdHJ1Y3QgbmZfYnJpZGdlX2luZm8JKm5mX2JyaWRnZTsKICNlbmRpZgpAQCAtMTIxOSwxNSArMTIxNSw2IEBACiB7CiAJbmZfY29ubnRyYWNrX3B1dChza2ItPm5mY3QpOwogCXNrYi0+bmZjdCA9IE5VTEw7Ci0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotCXNrYi0+bmZfZGVidWcgPSAwOwotI2VuZGlmCi19Ci1zdGF0aWMgaW5saW5lIHZvaWQgbmZfcmVzZXRfZGVidWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0Jc2tiLT5uZl9kZWJ1ZyA9IDA7Ci0jZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcC5oIGIvaW5jbHVkZS9saW51eC9zbXAuaAppbmRleCBkY2YxZGIzLi45ZGZhM2VlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wLmgKQEAgLTkyLDEwICs5Miw3IEBACiAvKgogICoJVGhlc2UgbWFjcm9zIGZvbGQgdGhlIFNNUCBmdW5jdGlvbmFsaXR5IGludG8gYSBzaW5nbGUgQ1BVIHN5c3RlbQogICovCi0KLSNpZiAhZGVmaW5lZChfX3NtcF9wcm9jZXNzb3JfaWQpIHx8ICFkZWZpbmVkKENPTkZJR19QUkVFTVBUKQotIyBkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpCQkJMAotI2VuZGlmCisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJCQkwCiAjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQkJMAogI2RlZmluZSBzbXBfY2FsbF9mdW5jdGlvbihmdW5jLGluZm8scmV0cnksd2FpdCkJKHsgMDsgfSkKICNkZWZpbmUgb25fZWFjaF9jcHUoZnVuYyxpbmZvLHJldHJ5LHdhaXQpCSh7IGZ1bmMoaW5mbyk7IDA7IH0pCkBAIC0xMDYsMzAgKzEwMywyNSBAQAogI2VuZGlmIC8qICFTTVAgKi8KIAogLyoKLSAqIERFQlVHX1BSRUVNUFQgc3VwcG9ydDogY2hlY2sgd2hldGhlciBzbXBfcHJvY2Vzc29yX2lkKCkgaXMgYmVpbmcKLSAqIHVzZWQgaW4gYSBwcmVlbXB0aW9uLXNhZmUgd2F5LgorICogc21wX3Byb2Nlc3Nvcl9pZCgpOiBnZXQgdGhlIGN1cnJlbnQgQ1BVIElELgogICoKLSAqIEFuIGFyY2hpdGVjdHVyZSBoYXMgdG8gZW5hYmxlIHRoaXMgZGVidWdnaW5nIGNvZGUgZXhwbGljaXRseS4KLSAqIEl0IGNhbiBkbyBzbyBieSByZW5hbWluZyB0aGUgc21wX3Byb2Nlc3Nvcl9pZCgpIG1hY3JvIHRvCi0gKiBfX3NtcF9wcm9jZXNzb3JfaWQoKS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgZG9uZSBhZnRlciBzb21lIG1pbmltYWwKLSAqIHRlc3RpbmcsIGJlY2F1c2UgdXN1YWxseSB0aGVyZSBhcmUgYSBudW1iZXIgb2YgZmFsc2UgcG9zaXRpdmVzCi0gKiB0aGF0IGFuIGFyY2hpdGVjdHVyZSB3aWxsIHRyaWdnZXIuCisgKiBpZiBERUJVR19QUkVFTVBUIGlzIGVuYWJsZWQgdGhlIHdlIGNoZWNrIHdoZXRoZXIgaXQgaXMKKyAqIHVzZWQgaW4gYSBwcmVlbXB0aW9uLXNhZmUgd2F5LiAoc21wX3Byb2Nlc3Nvcl9pZCgpIGlzIHNhZmUKKyAqIGlmIGl0J3MgdXNlZCBpbiBhIHByZWVtcHRpb24tb2ZmIGNyaXRpY2FsIHNlY3Rpb24sIG9yIGluCisgKiBhIHRocmVhZCB0aGF0IGlzIGJvdW5kIHRvIHRoZSBjdXJyZW50IENQVS4pCiAgKgotICogVG8gZml4IGEgZmFsc2UgcG9zaXRpdmUgKGkuZS4gc21wX3Byb2Nlc3Nvcl9pZCgpIHVzZSB0aGF0IHRoZQotICogZGVidWdnaW5nIGNvZGUgcmVwb3J0cyBidXQgd2hpY2ggdXNlIGZvciBzb21lIHJlYXNvbiBpcyBsZWdhbCksCi0gKiBjaGFuZ2UgdGhlIHNtcF9wcm9jZXNzb3JfaWQoKSByZWZlcmVuY2UgdG8gX3NtcF9wcm9jZXNzb3JfaWQoKSwKLSAqIHdoaWNoIGlzIHRoZSBub25kZWJ1ZyB2YXJpYW50LiAgTk9URTogZG9uJ3QgdXNlIHRoaXMgdG8gaGFjayBhcm91bmQKLSAqIHJlYWwgYnVncy4KKyAqIE5PVEU6IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5CisgKiAoc21wX3Byb2Nlc3Nvcl9pZCgpIGlzIHRoZSBwcmVmZXJyZWQgdmFyaWFudCksIGJ1dCBpbiByYXJlCisgKiBpbnN0YW5jZXMgaXQgbWlnaHQgYWxzbyBiZSB1c2VkIHRvIHR1cm4gb2ZmIGZhbHNlIHBvc2l0aXZlcworICogKGkuZS4gc21wX3Byb2Nlc3Nvcl9pZCgpIHVzZSB0aGF0IHRoZSBkZWJ1Z2dpbmcgY29kZSByZXBvcnRzIGJ1dAorICogd2hpY2ggdXNlIGZvciBzb21lIHJlYXNvbiBpcyBsZWdhbCkuIERvbid0IHVzZSB0aGlzIHRvIGhhY2sgYXJvdW5kCisgKiB0aGUgd2FybmluZyBtZXNzYWdlLCBhcyB5b3VyIGNvZGUgbWlnaHQgbm90IHdvcmsgdW5kZXIgUFJFRU1QVC4KICAqLwotI2lmZGVmIF9fc21wX3Byb2Nlc3Nvcl9pZAotIyBpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKSAmJiBkZWZpbmVkKENPTkZJR19ERUJVR19QUkVFTVBUKQotICAgZXh0ZXJuIHVuc2lnbmVkIGludCBzbXBfcHJvY2Vzc29yX2lkKHZvaWQpOwotIyBlbHNlCi0jICBkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpIF9fc21wX3Byb2Nlc3Nvcl9pZCgpCi0jIGVuZGlmCi0jIGRlZmluZSBfc21wX3Byb2Nlc3Nvcl9pZCgpIF9fc21wX3Byb2Nlc3Nvcl9pZCgpCisjaWZkZWYgQ09ORklHX0RFQlVHX1BSRUVNUFQKKyAgZXh0ZXJuIHVuc2lnbmVkIGludCBkZWJ1Z19zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOworIyBkZWZpbmUgc21wX3Byb2Nlc3Nvcl9pZCgpIGRlYnVnX3NtcF9wcm9jZXNzb3JfaWQoKQogI2Vsc2UKLSMgZGVmaW5lIF9zbXBfcHJvY2Vzc29yX2lkKCkgc21wX3Byb2Nlc3Nvcl9pZCgpCisjIGRlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQogI2VuZGlmCiAKICNkZWZpbmUgZ2V0X2NwdSgpCQkoeyBwcmVlbXB0X2Rpc2FibGUoKTsgc21wX3Byb2Nlc3Nvcl9pZCgpOyB9KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAzYmJjNDFiLi4yMzQzZjk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMTcyLDcgKzE3Miw4IEBACiBleHRlcm4gdm9pZCBzd2FwX3NldHVwKHZvaWQpOwogCiAvKiBsaW51eC9tbS92bXNjYW4uYyAqLwotZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgem9uZV9yZWNsYWltKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgc2hyaW5rX2FsbF9tZW1vcnkoaW50KTsKIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCmluZGV4IDMxOTkwNDUuLmE2NmU5ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKQEAgLTE2NywxNCArMTY3LDE3IEBACiBleHRlcm4gaW50CQkJZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwKIAkJCQkJIHN0cnVjdCBydDZfaW5mbyAqcnQsCiAJCQkJCSBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKLQkJCQkJIHZvaWQgKnJ0YXR0cik7CisJCQkJCSB2b2lkICpydGF0dHIsCisJCQkJCSBzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKnJlcSk7CiAKIGV4dGVybiBpbnQJCQlmaWI2X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0LAogCQkJCQkgc3RydWN0IG5sbXNnaGRyICpubGgsCi0JCQkJCSB2b2lkICpydGF0dHIpOworCQkJCQkgdm9pZCAqcnRhdHRyLAorCQkJCQkgc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpyZXEpOwogCiBleHRlcm4gdm9pZAkJCWluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBydDZfaW5mbyAqcnQsCi0JCQkJCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCk7CisJCQkJCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJCQkJCXN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqcmVxKTsKIAogZXh0ZXJuIHZvaWQJCQlmaWI2X3J1bl9nYyh1bnNpZ25lZCBsb25nIGR1bW15KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCBkNWQxZGQxLi5mOTIwNzA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtNDEsMTMgKzQxLDE2IEBACiAKIGV4dGVybiBpbnQJCQlpcDZfcm91dGVfYWRkKHN0cnVjdCBpbjZfcnRtc2cgKnJ0bXNnLAogCQkJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKiwKLQkJCQkJICAgICAgdm9pZCAqcnRhdHRyKTsKKwkJCQkJICAgICAgdm9pZCAqcnRhdHRyLAorCQkJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKnJlcSk7CiBleHRlcm4gaW50CQkJaXA2X2luc19ydChzdHJ1Y3QgcnQ2X2luZm8gKiwKIAkJCQkJICAgc3RydWN0IG5sbXNnaGRyICosCi0JCQkJCSAgIHZvaWQgKnJ0YXR0cik7CisJCQkJCSAgIHZvaWQgKnJ0YXR0ciwKKwkJCQkJICAgc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpyZXEpOwogZXh0ZXJuIGludAkJCWlwNl9kZWxfcnQoc3RydWN0IHJ0Nl9pbmZvICosCiAJCQkJCSAgIHN0cnVjdCBubG1zZ2hkciAqLAotCQkJCQkgICB2b2lkICpydGF0dHIpOworCQkJCQkgICB2b2lkICpydGF0dHIsCisJCQkJCSAgIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqcmVxKTsKIAogZXh0ZXJuIGludAkJCWlwNl9ydF9hZGRyX2FkZChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCiAJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKaW5kZXggZDM0Y2E4Zi4uYzNjZDA2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcm91dGUuaAorKysgYi9pbmNsdWRlL25ldC9yb3V0ZS5oCkBAIC0xMDcsNyArMTA3LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBydF9jYWNoZV9zdGF0ICpydF9jYWNoZV9zdGF0OwogI2RlZmluZSBSVF9DQUNIRV9TVEFUX0lOQyhmaWVsZCkJCQkJCSAgXAotCQkocGVyX2NwdV9wdHIocnRfY2FjaGVfc3RhdCwgX3NtcF9wcm9jZXNzb3JfaWQoKSktPmZpZWxkKyspCisJCShwZXJfY3B1X3B0cihydF9jYWNoZV9zdGF0LCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+ZmllbGQrKykKIAogZXh0ZXJuIHN0cnVjdCBpcF9ydF9hY2N0ICppcF9ydF9hY2N0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zbm1wLmggYi9pbmNsdWRlL25ldC9zbm1wLmgKaW5kZXggYTE1YWIyNS4uYTM2YmVkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc25tcC5oCisrKyBiL2luY2x1ZGUvbmV0L3NubXAuaApAQCAtMTI4LDE4ICsxMjgsMTggQEAKICNkZWZpbmUgU05NUF9TVEFUX1VTUlBUUihuYW1lKQkobmFtZVsxXSkKIAogI2RlZmluZSBTTk1QX0lOQ19TVEFUU19CSChtaWIsIGZpZWxkKSAJXAotCShwZXJfY3B1X3B0cihtaWJbMF0sIF9zbXBfcHJvY2Vzc29yX2lkKCkpLT5taWJzW2ZpZWxkXSsrKQorCShwZXJfY3B1X3B0cihtaWJbMF0sIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLT5taWJzW2ZpZWxkXSsrKQogI2RlZmluZSBTTk1QX0lOQ19TVEFUU19PRkZTRVRfQkgobWliLCBmaWVsZCwgb2Zmc2V0KQlcCi0JKHBlcl9jcHVfcHRyKG1pYlswXSwgX3NtcF9wcm9jZXNzb3JfaWQoKSktPm1pYnNbZmllbGQgKyAob2Zmc2V0KV0rKykKKwkocGVyX2NwdV9wdHIobWliWzBdLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+bWlic1tmaWVsZCArIChvZmZzZXQpXSsrKQogI2RlZmluZSBTTk1QX0lOQ19TVEFUU19VU0VSKG1pYiwgZmllbGQpIFwKLQkocGVyX2NwdV9wdHIobWliWzFdLCBfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+bWlic1tmaWVsZF0rKykKKwkocGVyX2NwdV9wdHIobWliWzFdLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+bWlic1tmaWVsZF0rKykKICNkZWZpbmUgU05NUF9JTkNfU1RBVFMobWliLCBmaWVsZCkgCVwKLQkocGVyX2NwdV9wdHIobWliWyFpbl9zb2Z0aXJxKCldLCBfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+bWlic1tmaWVsZF0rKykKKwkocGVyX2NwdV9wdHIobWliWyFpbl9zb2Z0aXJxKCldLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+bWlic1tmaWVsZF0rKykKICNkZWZpbmUgU05NUF9ERUNfU1RBVFMobWliLCBmaWVsZCkgCVwKLQkocGVyX2NwdV9wdHIobWliWyFpbl9zb2Z0aXJxKCldLCBfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+bWlic1tmaWVsZF0tLSkKKwkocGVyX2NwdV9wdHIobWliWyFpbl9zb2Z0aXJxKCldLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+bWlic1tmaWVsZF0tLSkKICNkZWZpbmUgU05NUF9BRERfU1RBVFNfQkgobWliLCBmaWVsZCwgYWRkZW5kKSAJXAotCShwZXJfY3B1X3B0cihtaWJbMF0sIF9zbXBfcHJvY2Vzc29yX2lkKCkpLT5taWJzW2ZpZWxkXSArPSBhZGRlbmQpCisJKHBlcl9jcHVfcHRyKG1pYlswXSwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSktPm1pYnNbZmllbGRdICs9IGFkZGVuZCkKICNkZWZpbmUgU05NUF9BRERfU1RBVFNfVVNFUihtaWIsIGZpZWxkLCBhZGRlbmQpIAlcCi0JKHBlcl9jcHVfcHRyKG1pYlsxXSwgX3NtcF9wcm9jZXNzb3JfaWQoKSktPm1pYnNbZmllbGRdICs9IGFkZGVuZCkKKwkocGVyX2NwdV9wdHIobWliWzFdLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+bWlic1tmaWVsZF0gKz0gYWRkZW5kKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggNDBiZjM2Ny4uZDMyNDgwMSAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTQ5MCw2ICs0OTAsNyBAQAogCXZmc19jYWNoZXNfaW5pdF9lYXJseSgpOwogCW1lbV9pbml0KCk7CiAJa21lbV9jYWNoZV9pbml0KCk7CisJc2V0dXBfcGVyX2NwdV9wYWdlc2V0KCk7CiAJbnVtYV9wb2xpY3lfaW5pdCgpOwogCWlmIChsYXRlX3RpbWVfaW5pdCkKIAkJbGF0ZV90aW1lX2luaXQoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGY0MmExN2YuLmEyOGQxMWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtMTk0LDYgKzE5NCw3IEBACiAJbW0tPm1tYXAgPSBOVUxMOwogCW1tLT5tbWFwX2NhY2hlID0gTlVMTDsKIAltbS0+ZnJlZV9hcmVhX2NhY2hlID0gb2xkbW0tPm1tYXBfYmFzZTsKKwltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7CiAJbW0tPm1hcF9jb3VudCA9IDA7CiAJc2V0X21tX2NvdW50ZXIobW0sIHJzcywgMCk7CiAJc2V0X21tX2NvdW50ZXIobW0sIGFub25fcnNzLCAwKTsKQEAgLTI0OSw4ICsyNTAsOSBAQAogCiAJCS8qCiAJCSAqIExpbmsgaW4gdGhlIG5ldyB2bWEgYW5kIGNvcHkgdGhlIHBhZ2UgdGFibGUgZW50cmllczoKLQkJICogbGluayBpbiBmaXJzdCBzbyB0aGF0IHN3YXBvZmYgY2FuIHNlZSBzd2FwIGVudHJpZXMsCi0JCSAqIGFuZCB0cnlfdG9fdW5tYXBfb25lJ3MgZmluZF92bWEgZmluZCB0aGUgbmV3IHZtYS4KKwkJICogbGluayBpbiBmaXJzdCBzbyB0aGF0IHN3YXBvZmYgY2FuIHNlZSBzd2FwIGVudHJpZXMuCisJCSAqIE5vdGUgdGhhdCwgZXhjZXB0aW9uYWxseSwgaGVyZSB0aGUgdm1hIGlzIGluc2VydGVkCisJCSAqIHdpdGhvdXQgaG9sZGluZyBtbS0+bW1hcF9zZW0uCiAJCSAqLwogCQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCQkqcHByZXYgPSB0bXA7CkBAIC0zMjIsNiArMzI0LDcgQEAKIAltbS0+aW9jdHhfbGlzdCA9IE5VTEw7CiAJbW0tPmRlZmF1bHRfa2lvY3R4ID0gKHN0cnVjdCBraW9jdHgpSU5JVF9LSU9DVFgobW0tPmRlZmF1bHRfa2lvY3R4LCAqbW0pOwogCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB+MFVMOwogCiAJaWYgKGxpa2VseSghbW1fYWxsb2NfcGdkKG1tKSkpIHsKIAkJbW0tPmRlZl9mbGFncyA9IDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCA1MjAyZTRjLi5hYzY3MDA5IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTYsNiArNiw3IEBACiAgKiBUaGlzIGZpbGUgY29udGFpbnMgZHJpdmVyIEFQSXMgdG8gdGhlIGlycSBzdWJzeXN0ZW0uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgpAQCAtMjU1LDYgKzI1NiwxMyBAQAogCiAJCQkvKiBGb3VuZCBpdCAtIG5vdyByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBlbnRyaWVzICovCiAJCQkqcHAgPSBhY3Rpb24tPm5leHQ7CisKKwkJCS8qIEN1cnJlbnRseSB1c2VkIG9ubHkgYnkgVU1MLCBtaWdodCBkaXNhcHBlYXIgb25lIGRheS4qLworI2lmZGVmIENPTkZJR19JUlFfUkVMRUFTRV9NRVRIT0QKKwkJCWlmIChkZXNjLT5oYW5kbGVyLT5yZWxlYXNlKQorCQkJCWRlc2MtPmhhbmRsZXItPnJlbGVhc2UoaXJxLCBkZXZfaWQpOworI2VuZGlmCisKIAkJCWlmICghZGVzYy0+YWN0aW9uKSB7CiAJCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKIAkJCQlpZiAoZGVzYy0+aGFuZGxlci0+c2h1dGRvd24pCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggODNiM2QzNy4uYTU2Njc0NSAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKIAkJbG9jYWxfc2V0KCZtb2QtPnJlZltpXS5jb3VudCwgMCk7CiAJLyogSG9sZCByZWZlcmVuY2UgY291bnQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAqLwotCWxvY2FsX3NldCgmbW9kLT5yZWZbX3NtcF9wcm9jZXNzb3JfaWQoKV0uY291bnQsIDEpOworCWxvY2FsX3NldCgmbW9kLT5yZWZbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0uY291bnQsIDEpOwogCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1hY3JvcyBwdXQgcmVmY291bnQgZHVyaW5nIGluaXQuICovCiAJbW9kLT53YWl0ZXIgPSBjdXJyZW50OwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NtcC5jIGIva2VybmVsL3Bvd2VyL3NtcC5jCmluZGV4IGNiYTM1ODRiLi40NTdjMjMwIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc21wLmMKKysrIGIva2VybmVsL3Bvd2VyL3NtcC5jCkBAIC00OCwxMSArNDgsMTEgQEAKIHsKIAlvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoMCkpOwotCXByaW50aygiRnJlZXppbmcgQ1BVcyAoYXQgJWQpIiwgX3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJcHJpbnRrKCJGcmVlemluZyBDUFVzIChhdCAlZCkiLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKIAlzY2hlZHVsZV90aW1lb3V0KEhaKTsKIAlwcmludGsoIi4uLiIpOwotCUJVR19PTihfc21wX3Byb2Nlc3Nvcl9pZCgpICE9IDApOworCUJVR19PTihyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpICE9IDApOwogCiAJLyogRklYTUU6IGZvciB0aGlzIHRvIHdvcmssIGFsbCB0aGUgQ1BVcyBtdXN0IGJlIHJ1bm5pbmcKIAkgKiAiaWRsZSIgdGhyZWFkIChvciB3ZSBkZWFkbG9jaykuIElzIHRoYXQgZ3VhcmFudGVlZD8gKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggZjEyYTBjOC4uZGVjYTA0MSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTM4MTQsNyArMzgxNCw3IEBACiAgKi8KIHZvaWQgX19zY2hlZCBpb19zY2hlZHVsZSh2b2lkKQogewotCXN0cnVjdCBydW5xdWV1ZSAqcnEgPSAmcGVyX2NwdShydW5xdWV1ZXMsIF9zbXBfcHJvY2Vzc29yX2lkKCkpOworCXN0cnVjdCBydW5xdWV1ZSAqcnEgPSAmcGVyX2NwdShydW5xdWV1ZXMsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJYXRvbWljX2luYygmcnEtPm5yX2lvd2FpdCk7CiAJc2NoZWR1bGUoKTsKQEAgLTM4MjUsNyArMzgyNSw3IEBACiAKIGxvbmcgX19zY2hlZCBpb19zY2hlZHVsZV90aW1lb3V0KGxvbmcgdGltZW91dCkKIHsKLQlzdHJ1Y3QgcnVucXVldWUgKnJxID0gJnBlcl9jcHUocnVucXVldWVzLCBfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzdHJ1Y3QgcnVucXVldWUgKnJxID0gJnBlcl9jcHUocnVucXVldWVzLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlsb25nIHJldDsKIAogCWF0b21pY19pbmMoJnJxLT5ucl9pb3dhaXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N0b3BfbWFjaGluZS5jIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCmluZGV4IDYxMTZiMjUuLjg0YTlkMTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYworKysgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCXN0b3BtYWNoaW5lX3N0YXRlID0gU1RPUE1BQ0hJTkVfV0FJVDsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlpZiAoaSA9PSBfc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQlpZiAoaSA9PSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKQogCQkJY29udGludWU7CiAJCXJldCA9IGtlcm5lbF90aHJlYWQoc3RvcG1hY2hpbmUsICh2b2lkICopKGxvbmcpaSxDTE9ORV9LRVJORUwpOwogCQlpZiAocmV0IDwgMCkKQEAgLTE4Miw3ICsxODIsNyBAQAogCiAJLyogSWYgdGhleSBkb24ndCBjYXJlIHdoaWNoIENQVSBmbiBydW5zIG9uLCBiaW5kIHRvIGFueSBvbmxpbmUgb25lLiAqLwogCWlmIChjcHUgPT0gTlJfQ1BVUykKLQkJY3B1ID0gX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAogCXAgPSBrdGhyZWFkX2NyZWF0ZShkb19zdG9wLCAmc21kYXRhLCAia3N0b3BtYWNoaW5lIik7CiAJaWYgKCFJU19FUlIocCkpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNfbmkuYyBiL2tlcm5lbC9zeXNfbmkuYwppbmRleCAwZGRhNzBlLi42ZjE1YmVhIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzX25pLmMKKysrIGIva2VybmVsL3N5c19uaS5jCkBAIC03Nyw2ICs3Nyw3IEBACiBjb25kX3N5c2NhbGwoc3lzX2tleWN0bCk7CiBjb25kX3N5c2NhbGwoY29tcGF0X3N5c19rZXljdGwpOwogY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfc29ja2V0Y2FsbCk7Citjb25kX3N5c2NhbGwoc3lzX3NldF96b25lX3JlY2xhaW0pOwogCiAvKiBhcmNoLXNwZWNpZmljIHdlYWsgc3lzY2FsbCBlbnRyaWVzICovCiBjb25kX3N5c2NhbGwoc3lzX3BjaWNvbmZpZ19yZWFkKTsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnIGIvbGliL0tjb25maWcKaW5kZXggZWViNDUyMi4uMmQ0ZDRlMyAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcKKysrIGIvbGliL0tjb25maWcKQEAgLTQwLDYgKzQwLDEyIEBACiAJdHJpc3RhdGUKIAogIworIyBHZW5lcmljIGFsbG9jYXRvciBzdXBwb3J0IGlzIHNlbGVjdGVkIGlmIG5lZWRlZAorIworY29uZmlnIEdFTkVSSUNfQUxMT0NBVE9SCisJYm9vbGVhbgorCisjCiAjIHJlZWQgc29sb21vbiBzdXBwb3J0IGlzIHNlbGVjdCdlZCBpZiBuZWVkZWQKICMKIGNvbmZpZyBSRUVEX1NPTE9NT04KZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCA5ZWNjZWE5Li5kY2I0MjMxIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC0yMCw2ICsyMCw3IEBACiBsaWItJChDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0pICs9IHJ3c2VtLm8KIGxpYi0kKENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQpICs9IGZpbmRfbmV4dF9iaXQubwogb2JqLSQoQ09ORklHX0xPQ0tfS0VSTkVMKSArPSBrZXJuZWxfbG9jay5vCitvYmotJChDT05GSUdfREVCVUdfUFJFRU1QVCkgKz0gc21wX3Byb2Nlc3Nvcl9pZC5vCiAKIGlmbmVxICgkKENPTkZJR19IQVZFX0RFQ19MT0NLKSx5KSAKICAgbGliLXkgKz0gZGVjX2FuZF9sb2NrLm8KQEAgLTI5LDYgKzMwLDcgQEAKIG9iai0kKENPTkZJR19DUkMzMikJKz0gY3JjMzIubwogb2JqLSQoQ09ORklHX0xJQkNSQzMyQykJKz0gbGliY3JjMzJjLm8KIG9iai0kKENPTkZJR19HRU5FUklDX0lPTUFQKSArPSBpb21hcC5vCitvYmotJChDT05GSUdfR0VORVJJQ19BTExPQ0FUT1IpICs9IGdlbmFsbG9jLm8KIAogb2JqLSQoQ09ORklHX1pMSUJfSU5GTEFURSkgKz0gemxpYl9pbmZsYXRlLwogb2JqLSQoQ09ORklHX1pMSUJfREVGTEFURSkgKz0gemxpYl9kZWZsYXRlLwpkaWZmIC0tZ2l0IGEvbGliL2dlbmFsbG9jLmMgYi9saWIvZ2VuYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmQzMGQyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nZW5hbGxvYy5jCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQmFzaWMgZ2VuZXJhbCBwdXJwb3NlIGFsbG9jYXRvciBmb3IgbWFuYWdpbmcgc3BlY2lhbCBwdXJwb3NlIG1lbW9yeQorICogbm90IG1hbmFnZWQgYnkgdGhlIHJlZ3VsYXIga21hbGxvYy9rZnJlZSBpbnRlcmZhY2UuCisgKiBVc2VzIGZvciB0aGlzIGluY2x1ZGVzIG9uLWRldmljZSBzcGVjaWFsIG1lbW9yeSwgdW5jYWNoZWQgbWVtb3J5CisgKiBldGMuCisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBidWRkeSBhbGxvY2F0b3IgZm91bmQgaW4gdGhlIHN5bTUzYzh4eF8yCisgKiBkcml2ZXIgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgIEdlcmFyZCBSb3VkaWVyIDxncm91ZGllckBmcmVlLmZyPiwKKyAqIGFuZCBhZGFwdGVkIGZvciBnZW5lcmFsIHB1cnBvc2UgdXNlLgorICoKKyAqIENvcHlyaWdodCAyMDA1IChDKSBKZXMgU29yZW5zZW4gPGplc0B0cmFpbmVkLW1vbmtleS5vcmc+CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiBWZXJzaW9uIDIuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5hbGxvYy5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworCitzdHJ1Y3QgZ2VuX3Bvb2wgKmdlbl9wb29sX2NyZWF0ZShpbnQgbnJfY2h1bmtzLCBpbnQgbWF4X2NodW5rX3NoaWZ0LAorCQkJCSB1bnNpZ25lZCBsb25nICgqZnApKHN0cnVjdCBnZW5fcG9vbCAqKSwKKwkJCQkgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBnZW5fcG9vbCAqcG9vbHA7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJaW50IGk7CisKKwkvKgorCSAqIFRoaXMgaXMgcmVhbGx5IGFuIGFyYml0cmFyeSBsaW1pdCwgKzEwIGlzIGVub3VnaCBmb3IKKwkgKiBJQTY0X0dSQU5VTEVfU0hJRlQsIGFrYSAxNk1CLiBJZiBhbnlvbmUgbmVlZHMgYSBsYXJnZSBsaW1pdAorCSAqIHRoaXMgY2FuIGJlIGluY3JlYXNlZCB3aXRob3V0IHByb2JsZW1zLgorCSAqLworCWlmICgobWF4X2NodW5rX3NoaWZ0ID4gKFBBR0VfU0hJRlQgKyAxMCkpIHx8CisJICAgICgobWF4X2NodW5rX3NoaWZ0IDwgQUxMT0NfTUlOX1NISUZUKSAmJiBtYXhfY2h1bmtfc2hpZnQpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghbWF4X2NodW5rX3NoaWZ0KQorCQltYXhfY2h1bmtfc2hpZnQgPSBQQUdFX1NISUZUOworCisJcG9vbHAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ2VuX3Bvb2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvb2xwKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQocG9vbHAsIDAsIHNpemVvZihzdHJ1Y3QgZ2VuX3Bvb2wpKTsKKwlwb29scC0+aCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnZW5fcG9vbF9saW5rKSAqCisJCQkgICAobWF4X2NodW5rX3NoaWZ0IC0gQUxMT0NfTUlOX1NISUZUICsgMSksCisJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvb2xwLT5oKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImdlbl9wb29sX2FsbG9jKCkgZmFpbGVkIHRvIGFsbG9jYXRlXG4iKTsKKwkJa2ZyZWUocG9vbHApOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtc2V0KHBvb2xwLT5oLCAwLCBzaXplb2Yoc3RydWN0IGdlbl9wb29sX2xpbmspICoKKwkgICAgICAgKG1heF9jaHVua19zaGlmdCAtIEFMTE9DX01JTl9TSElGVCArIDEpKTsKKworCXNwaW5fbG9ja19pbml0KCZwb29scC0+bG9jayk7CisJcG9vbHAtPmdldF9uZXdfY2h1bmsgPSBmcDsKKwlwb29scC0+bWF4X2NodW5rX3NoaWZ0ID0gbWF4X2NodW5rX3NoaWZ0OworCXBvb2xwLT5wcml2YXRlID0gZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jaHVua3M7IGkrKykgeworCQl0bXAgPSBwb29scC0+Z2V0X25ld19jaHVuayhwb29scCk7CisJCXByaW50ayhLRVJOX0lORk8gImFsbG9jYXRlZCAlbHhcbiIsIHRtcCk7CisJCWlmICghdG1wKQorCQkJYnJlYWs7CisJCWdlbl9wb29sX2ZyZWUocG9vbHAsIHRtcCwgKDEgPDwgcG9vbHAtPm1heF9jaHVua19zaGlmdCkpOworCX0KKworCXJldHVybiBwb29scDsKK30KK0VYUE9SVF9TWU1CT0woZ2VuX3Bvb2xfY3JlYXRlKTsKKworCisvKgorICogIFNpbXBsZSBwb3dlciBvZiB0d28gYnVkZHktbGlrZSBnZW5lcmljIGFsbG9jYXRvci4KKyAqICBQcm92aWRlcyBuYXR1cmFsbHkgYWxpZ25lZCBtZW1vcnkgY2h1bmtzLgorICovCit1bnNpZ25lZCBsb25nIGdlbl9wb29sX2FsbG9jKHN0cnVjdCBnZW5fcG9vbCAqcG9vbHAsIGludCBzaXplKQoreworCWludCBqLCBpLCBzLCBtYXhfY2h1bmtfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGEsIGZsYWdzOworCXN0cnVjdCBnZW5fcG9vbF9saW5rICpoID0gcG9vbHAtPmg7CisKKwltYXhfY2h1bmtfc2l6ZSA9IDEgPDwgcG9vbHAtPm1heF9jaHVua19zaGlmdDsKKworCWlmIChzaXplID4gbWF4X2NodW5rX3NpemUpCisJCXJldHVybiAwOworCisJaSA9IDA7CisKKwlzaXplID0gbWF4KHNpemUsIDEgPDwgQUxMT0NfTUlOX1NISUZUKTsKKwlzID0gcm91bmR1cF9wb3dfb2ZfdHdvKHNpemUpOworCisJaiA9IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbHAtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWhbal0ubmV4dCkgeworCQlpZiAocyA9PSBtYXhfY2h1bmtfc2l6ZSkgeworCQkJc3RydWN0IGdlbl9wb29sX2xpbmsgKnB0cjsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2xwLT5sb2NrLCBmbGFncyk7CisJCQlwdHIgPSAoc3RydWN0IGdlbl9wb29sX2xpbmsgKilwb29scC0+Z2V0X25ld19jaHVuayhwb29scCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbHAtPmxvY2ssIGZsYWdzKTsKKwkJCWhbal0ubmV4dCA9IHB0cjsKKwkJCWlmIChoW2pdLm5leHQpCisJCQkJaFtqXS5uZXh0LT5uZXh0ID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWorKzsKKwkJcyA8PD0gMTsKKwl9CisJYSA9ICh1bnNpZ25lZCBsb25nKSBoW2pdLm5leHQ7CisJaWYgKGEpIHsKKwkJaFtqXS5uZXh0ID0gaFtqXS5uZXh0LT5uZXh0OworCQkvKgorCQkgKiBUaGlzIHNob3VsZCBiZSBzcGxpdCBpbnRvIGEgc2VwZXJhdGUgZnVuY3Rpb24gZG9pbmcKKwkJICogdGhlIGNodW5rIHNwbGl0IGluIG9yZGVyIHRvIHN1cHBvcnQgY3VzdG9tCisJCSAqIGhhbmRsaW5nIG1lbW9yeSBub3QgcGh5c2ljYWxseSBhY2Nlc3NpYmxlIGJ5IGhvc3QKKwkJICovCisJCXdoaWxlIChqID4gaSkgeworCQkJaiAtPSAxOworCQkJcyA+Pj0gMTsKKwkJCWhbal0ubmV4dCA9IChzdHJ1Y3QgZ2VuX3Bvb2xfbGluayAqKSAoYSArIHMpOworCQkJaFtqXS5uZXh0LT5uZXh0ID0gTlVMTDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29scC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBhOworfQorRVhQT1JUX1NZTUJPTChnZW5fcG9vbF9hbGxvYyk7CisKKworLyoKKyAqICBDb3VudGVyLXBhcnQgb2YgdGhlIGdlbmVyaWMgYWxsb2NhdG9yLgorICovCit2b2lkIGdlbl9wb29sX2ZyZWUoc3RydWN0IGdlbl9wb29sICpwb29scCwgdW5zaWduZWQgbG9uZyBwdHIsIGludCBzaXplKQoreworCXN0cnVjdCBnZW5fcG9vbF9saW5rICpxOworCXN0cnVjdCBnZW5fcG9vbF9saW5rICpoID0gcG9vbHAtPmg7CisJdW5zaWduZWQgbG9uZyBhLCBiLCBmbGFnczsKKwlpbnQgaSwgcywgbWF4X2NodW5rX3NpemU7CisKKwltYXhfY2h1bmtfc2l6ZSA9IDEgPDwgcG9vbHAtPm1heF9jaHVua19zaGlmdDsKKworCWlmIChzaXplID4gbWF4X2NodW5rX3NpemUpCisJCXJldHVybjsKKworCWkgPSAwOworCisJc2l6ZSA9IG1heChzaXplLCAxIDw8IEFMTE9DX01JTl9TSElGVCk7CisJcyA9IHJvdW5kdXBfcG93X29mX3R3byhzaXplKTsKKworCWEgPSBwdHI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbHAtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoMSkgeworCQlpZiAocyA9PSBtYXhfY2h1bmtfc2l6ZSkgeworCQkJKChzdHJ1Y3QgZ2VuX3Bvb2xfbGluayAqKWEpLT5uZXh0ID0gaFtpXS5uZXh0OworCQkJaFtpXS5uZXh0ID0gKHN0cnVjdCBnZW5fcG9vbF9saW5rICopYTsKKwkJCWJyZWFrOworCQl9CisJCWIgPSBhIF4gczsKKwkJcSA9ICZoW2ldOworCisJCXdoaWxlIChxLT5uZXh0ICYmIHEtPm5leHQgIT0gKHN0cnVjdCBnZW5fcG9vbF9saW5rICopYikKKwkJCXEgPSBxLT5uZXh0OworCisJCWlmICghcS0+bmV4dCkgeworCQkJKChzdHJ1Y3QgZ2VuX3Bvb2xfbGluayAqKWEpLT5uZXh0ID0gaFtpXS5uZXh0OworCQkJaFtpXS5uZXh0ID0gKHN0cnVjdCBnZW5fcG9vbF9saW5rICopYTsKKwkJCWJyZWFrOworCQl9CisJCXEtPm5leHQgPSBxLT5uZXh0LT5uZXh0OworCQlhID0gYSAmIGI7CisJCXMgPDw9IDE7CisJCWkrKzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbHAtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZ2VuX3Bvb2xfZnJlZSk7CmRpZmYgLS1naXQgYS9saWIvaWRyLmMgYi9saWIvaWRyLmMKaW5kZXggODFmYzQzMC4uYzViZTg4OSAxMDA2NDQKLS0tIGEvbGliL2lkci5jCisrKyBiL2xpYi9pZHIuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJICogQWRkIGEgbmV3IGxheWVyIHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUgaWYgdGhlIHJlcXVlc3RlZAogCSAqIGlkIGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50bHkgYWxsb2NhdGVkIHNwYWNlLgogCSAqLwotCXdoaWxlICgobGF5ZXJzIDwgTUFYX0xFVkVMKSAmJiAoaWQgPj0gKDEgPDwgKGxheWVycypJRFJfQklUUykpKSkgeworCXdoaWxlICgobGF5ZXJzIDwgKE1BWF9MRVZFTCAtIDEpKSAmJiAoaWQgPj0gKDEgPDwgKGxheWVycypJRFJfQklUUykpKSkgewogCQlsYXllcnMrKzsKIAkJaWYgKCFwLT5jb3VudCkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbGliL2tlcm5lbF9sb2NrLmMgYi9saWIva2VybmVsX2xvY2suYwppbmRleCA5OWIwYWUzLi5iZDJiYzVkIDEwMDY0NAotLS0gYS9saWIva2VybmVsX2xvY2suYworKysgYi9saWIva2VybmVsX2xvY2suYwpAQCAtOSw2MSArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX1BSRUVNUFQpICYmIGRlZmluZWQoX19zbXBfcHJvY2Vzc29yX2lkKSAmJiBcCi0JCWRlZmluZWQoQ09ORklHX0RFQlVHX1BSRUVNUFQpCi0KLS8qCi0gKiBEZWJ1Z2dpbmcgY2hlY2suCi0gKi8KLXVuc2lnbmVkIGludCBzbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBwcmVlbXB0X2NvdW50ID0gcHJlZW1wdF9jb3VudCgpOwotCWludCB0aGlzX2NwdSA9IF9fc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWNwdW1hc2tfdCB0aGlzX21hc2s7Ci0KLQlpZiAobGlrZWx5KHByZWVtcHRfY291bnQpKQotCQlnb3RvIG91dDsKLQotCWlmIChpcnFzX2Rpc2FibGVkKCkpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBLZXJuZWwgdGhyZWFkcyBib3VuZCB0byBhIHNpbmdsZSBDUFUgY2FuIHNhZmVseSB1c2UKLQkgKiBzbXBfcHJvY2Vzc29yX2lkKCk6Ci0JICovCi0JdGhpc19tYXNrID0gY3B1bWFza19vZl9jcHUodGhpc19jcHUpOwotCi0JaWYgKGNwdXNfZXF1YWwoY3VycmVudC0+Y3B1c19hbGxvd2VkLCB0aGlzX21hc2spKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICogSXQgaXMgdmFsaWQgdG8gYXNzdW1lIENQVS1sb2NhbGl0eSBkdXJpbmcgZWFybHkgYm9vdHVwOgotCSAqLwotCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBBdm9pZCByZWN1cnNpb246Ci0JICovCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKLQkJZ290byBvdXRfZW5hYmxlOwotCi0JcHJpbnRrKEtFUk5fRVJSICJCVUc6IHVzaW5nIHNtcF9wcm9jZXNzb3JfaWQoKSBpbiBwcmVlbXB0aWJsZSBbJTA4eF0gY29kZTogJXMvJWRcbiIsIHByZWVtcHRfY291bnQoKSwgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKLQlwcmludF9zeW1ib2woImNhbGxlciBpcyAlc1xuIiwgKGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQlkdW1wX3N0YWNrKCk7Ci0KLW91dF9lbmFibGU6Ci0JcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwotb3V0OgotCXJldHVybiB0aGlzX2NwdTsKLX0KLQotRVhQT1JUX1NZTUJPTChzbXBfcHJvY2Vzc29yX2lkKTsKLQotI2VuZGlmIC8qIFBSRUVNUFQgJiYgX19zbXBfcHJvY2Vzc29yX2lkICYmIERFQlVHX1BSRUVNUFQgKi8KLQogI2lmZGVmIENPTkZJR19QUkVFTVBUX0JLTAogLyoKICAqIFRoZSAnYmlnIGtlcm5lbCBzZW1hcGhvcmUnCmRpZmYgLS1naXQgYS9saWIvc21wX3Byb2Nlc3Nvcl9pZC5jIGIvbGliL3NtcF9wcm9jZXNzb3JfaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmMwOGVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3NtcF9wcm9jZXNzb3JfaWQuYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogbGliL3NtcF9wcm9jZXNzb3JfaWQuYworICoKKyAqIERFQlVHX1BSRUVNUFQgdmFyaWFudCBvZiBzbXBfcHJvY2Vzc29yX2lkKCkuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCit1bnNpZ25lZCBpbnQgZGVidWdfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcHJlZW1wdF9jb3VudCA9IHByZWVtcHRfY291bnQoKTsKKwlpbnQgdGhpc19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWNwdW1hc2tfdCB0aGlzX21hc2s7CisKKwlpZiAobGlrZWx5KHByZWVtcHRfY291bnQpKQorCQlnb3RvIG91dDsKKworCWlmIChpcnFzX2Rpc2FibGVkKCkpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBLZXJuZWwgdGhyZWFkcyBib3VuZCB0byBhIHNpbmdsZSBDUFUgY2FuIHNhZmVseSB1c2UKKwkgKiBzbXBfcHJvY2Vzc29yX2lkKCk6CisJICovCisJdGhpc19tYXNrID0gY3B1bWFza19vZl9jcHUodGhpc19jcHUpOworCisJaWYgKGNwdXNfZXF1YWwoY3VycmVudC0+Y3B1c19hbGxvd2VkLCB0aGlzX21hc2spKQorCQlnb3RvIG91dDsKKworCS8qCisJICogSXQgaXMgdmFsaWQgdG8gYXNzdW1lIENQVS1sb2NhbGl0eSBkdXJpbmcgZWFybHkgYm9vdHVwOgorCSAqLworCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBBdm9pZCByZWN1cnNpb246CisJICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKwlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKKwkJZ290byBvdXRfZW5hYmxlOworCisJcHJpbnRrKEtFUk5fRVJSICJCVUc6IHVzaW5nIHNtcF9wcm9jZXNzb3JfaWQoKSBpbiBwcmVlbXB0aWJsZSBbJTA4eF0gY29kZTogJXMvJWRcbiIsIHByZWVtcHRfY291bnQoKSwgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKKwlwcmludF9zeW1ib2woImNhbGxlciBpcyAlc1xuIiwgKGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlkdW1wX3N0YWNrKCk7CisKK291dF9lbmFibGU6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworb3V0OgorCXJldHVybiB0aGlzX2NwdTsKK30KKworRVhQT1JUX1NZTUJPTChkZWJ1Z19zbXBfcHJvY2Vzc29yX2lkKTsKKwpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDRlYjVhZTMuLmZiZDExMTEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTcsMTAgKzcsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KIAogY29uc3QgdW5zaWduZWQgbG9uZyBodWdldGxiX3plcm8gPSAwLCBodWdldGxiX2luZmluaXR5ID0gfjBVTDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5yX2h1Z2VfcGFnZXMsIGZyZWVfaHVnZV9wYWdlczsKQEAgLTI0OSw2ICsyNTMsNzIgQEAKIAkubm9wYWdlID0gaHVnZXRsYl9ub3BhZ2UsCiB9OwogCitzdGF0aWMgcHRlX3QgbWFrZV9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcHRlX3QgZW50cnk7CisKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB7CisJCWVudHJ5ID0KKwkJICAgIHB0ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCkpKTsKKwl9IGVsc2UgeworCQllbnRyeSA9IHB0ZV93cnByb3RlY3QobWtfcHRlKHBhZ2UsIHZtYS0+dm1fcGFnZV9wcm90KSk7CisJfQorCWVudHJ5ID0gcHRlX21reW91bmcoZW50cnkpOworCWVudHJ5ID0gcHRlX21raHVnZShlbnRyeSk7CisKKwlyZXR1cm4gZW50cnk7Cit9CisKK2ludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYywKKwkJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlwdGVfdCAqc3JjX3B0ZSwgKmRzdF9wdGUsIGVudHJ5OworCXN0cnVjdCBwYWdlICpwdGVwYWdlOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQgPSB2bWEtPnZtX2VuZDsKKworCXdoaWxlIChhZGRyIDwgZW5kKSB7CisJCWRzdF9wdGUgPSBodWdlX3B0ZV9hbGxvYyhkc3QsIGFkZHIpOworCQlpZiAoIWRzdF9wdGUpCisJCQlnb3RvIG5vbWVtOworCQlzcmNfcHRlID0gaHVnZV9wdGVfb2Zmc2V0KHNyYywgYWRkcik7CisJCUJVR19PTighc3JjX3B0ZSB8fCBwdGVfbm9uZSgqc3JjX3B0ZSkpOyAvKiBwcmVmYXVsdGVkICovCisJCWVudHJ5ID0gKnNyY19wdGU7CisJCXB0ZXBhZ2UgPSBwdGVfcGFnZShlbnRyeSk7CisJCWdldF9wYWdlKHB0ZXBhZ2UpOworCQlhZGRfbW1fY291bnRlcihkc3QsIHJzcywgSFBBR0VfU0laRSAvIFBBR0VfU0laRSk7CisJCXNldF9odWdlX3B0ZV9hdChkc3QsIGFkZHIsIGRzdF9wdGUsIGVudHJ5KTsKKwkJYWRkciArPSBIUEFHRV9TSVpFOworCX0KKwlyZXR1cm4gMDsKKworbm9tZW06CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJcHRlX3QgcHRlOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJV0FSTl9PTighaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpOworCUJVR19PTihzdGFydCAmIH5IUEFHRV9NQVNLKTsKKwlCVUdfT04oZW5kICYgfkhQQUdFX01BU0spOworCisJZm9yIChhZGRyZXNzID0gc3RhcnQ7IGFkZHJlc3MgPCBlbmQ7IGFkZHJlc3MgKz0gSFBBR0VfU0laRSkgeworCQlwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkcmVzcywgaHVnZV9wdGVfb2Zmc2V0KG1tLCBhZGRyZXNzKSk7CisJCWlmIChwdGVfbm9uZShwdGUpKQorCQkJY29udGludWU7CisJCXBhZ2UgPSBwdGVfcGFnZShwdGUpOworCQlwdXRfcGFnZShwYWdlKTsKKwl9CisJYWRkX21tX2NvdW50ZXIobW0sIHJzcywgIC0oKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKSk7CisJZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7Cit9CisKIHZvaWQgemFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW5ndGgpCiB7CkBAIC0yNTgsMyArMzI4LDEwOCBAQAogCXVubWFwX2h1Z2VwYWdlX3JhbmdlKHZtYSwgc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKTsKIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiB9CisKK2ludCBodWdldGxiX3ByZWZhdWx0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgcmV0ID0gMDsKKworCVdBUk5fT04oIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTsKKwlCVUdfT04odm1hLT52bV9zdGFydCAmIH5IUEFHRV9NQVNLKTsKKwlCVUdfT04odm1hLT52bV9lbmQgJiB+SFBBR0VfTUFTSyk7CisKKwlodWdldGxiX3ByZWZhdWx0X2FyY2hfaG9vayhtbSk7CisKKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCWZvciAoYWRkciA9IHZtYS0+dm1fc3RhcnQ7IGFkZHIgPCB2bWEtPnZtX2VuZDsgYWRkciArPSBIUEFHRV9TSVpFKSB7CisJCXVuc2lnbmVkIGxvbmcgaWR4OworCQlwdGVfdCAqcHRlID0gaHVnZV9wdGVfYWxsb2MobW0sIGFkZHIpOworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQlpZiAoIXB0ZSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICghIHB0ZV9ub25lKCpwdGUpKQorCQkJaHVnZXRsYl9jbGVhbl9zdGFsZV9wZ3RhYmxlKHB0ZSk7CisKKwkJaWR4ID0gKChhZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gSFBBR0VfU0hJRlQpCisJCQkrICh2bWEtPnZtX3Bnb2ZmID4+IChIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpKTsKKwkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaWR4KTsKKwkJaWYgKCFwYWdlKSB7CisJCQkvKiBjaGFyZ2UgdGhlIGZzIHF1b3RhIGZpcnN0ICovCisJCQlpZiAoaHVnZXRsYl9nZXRfcXVvdGEobWFwcGluZykpIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJcGFnZSA9IGFsbG9jX2h1Z2VfcGFnZSgpOworCQkJaWYgKCFwYWdlKSB7CisJCQkJaHVnZXRsYl9wdXRfcXVvdGEobWFwcGluZyk7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKHBhZ2UsIG1hcHBpbmcsIGlkeCwgR0ZQX0FUT01JQyk7CisJCQlpZiAoISByZXQpIHsKKwkJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCX0gZWxzZSB7CisJCQkJaHVnZXRsYl9wdXRfcXVvdGEobWFwcGluZyk7CisJCQkJZnJlZV9odWdlX3BhZ2UocGFnZSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJYWRkX21tX2NvdW50ZXIobW0sIHJzcywgSFBBR0VfU0laRSAvIFBBR0VfU0laRSk7CisJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBtYWtlX2h1Z2VfcHRlKHZtYSwgcGFnZSkpOworCX0KK291dDoKKwlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGZvbGxvd19odWdldGxiX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcywKKwkJCXVuc2lnbmVkIGxvbmcgKnBvc2l0aW9uLCBpbnQgKmxlbmd0aCwgaW50IGkpCit7CisJdW5zaWduZWQgbG9uZyB2cGZuLCB2YWRkciA9ICpwb3NpdGlvbjsKKwlpbnQgcmVtYWluZGVyID0gKmxlbmd0aDsKKworCUJVR19PTighaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpOworCisJdnBmbiA9IHZhZGRyL1BBR0VfU0laRTsKKwl3aGlsZSAodmFkZHIgPCB2bWEtPnZtX2VuZCAmJiByZW1haW5kZXIpIHsKKworCQlpZiAocGFnZXMpIHsKKwkJCXB0ZV90ICpwdGU7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQkJLyogU29tZSBhcmNocyAoc3BhcmM2NCwgc2gqKSBoYXZlIG11bHRpcGxlCisJCQkgKiBwdGVfdHMgdG8gZWFjaCBodWdlcGFnZS4gIFdlIGhhdmUgdG8gbWFrZQorCQkJICogc3VyZSB3ZSBnZXQgdGhlIGZpcnN0LCBmb3IgdGhlIHBhZ2UKKwkJCSAqIGluZGV4aW5nIGJlbG93IHRvIHdvcmsuICovCisJCQlwdGUgPSBodWdlX3B0ZV9vZmZzZXQobW0sIHZhZGRyICYgSFBBR0VfTUFTSyk7CisKKwkJCS8qIGh1Z2V0bGIgc2hvdWxkIGJlIGxvY2tlZCwgYW5kIGhlbmNlLCBwcmVmYXVsdGVkICovCisJCQlXQVJOX09OKCFwdGUgfHwgcHRlX25vbmUoKnB0ZSkpOworCisJCQlwYWdlID0gJnB0ZV9wYWdlKCpwdGUpW3ZwZm4gJSAoSFBBR0VfU0laRS9QQUdFX1NJWkUpXTsKKworCQkJV0FSTl9PTighUGFnZUNvbXBvdW5kKHBhZ2UpKTsKKworCQkJZ2V0X3BhZ2UocGFnZSk7CisJCQlwYWdlc1tpXSA9IHBhZ2U7CisJCX0KKworCQlpZiAodm1hcykKKwkJCXZtYXNbaV0gPSB2bWE7CisKKwkJdmFkZHIgKz0gUEFHRV9TSVpFOworCQkrK3ZwZm47CisJCS0tcmVtYWluZGVyOworCQkrK2k7CisJfQorCisJKmxlbmd0aCA9IHJlbWFpbmRlcjsKKwkqcG9zaXRpb24gPSB2YWRkcjsKKworCXJldHVybiBpOworfQpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IDk0NGI1ZTUuLmUzMTA4MDUgMTAwNjQ0Ci0tLSBhL21tL21hZHZpc2UuYworKysgYi9tbS9tYWR2aXNlLmMKQEAgLTgsMTcgKzgsNDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogCiAvKgogICogV2UgY2FuIHBvdGVudGlhbGx5IHNwbGl0IGEgdm0gYXJlYSBpbnRvIHNlcGFyYXRlCiAgKiBhcmVhcywgZWFjaCBhcmVhIHdpdGggaXRzIG93biBiZWhhdmlvci4KICAqLwotc3RhdGljIGxvbmcgbWFkdmlzZV9iZWhhdmlvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgYmVoYXZpb3IpCitzdGF0aWMgbG9uZyBtYWR2aXNlX2JlaGF2aW9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKKwkJICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcmV2LAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgYmVoYXZpb3IpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqIG1tID0gdm1hLT52bV9tbTsKIAlpbnQgZXJyb3IgPSAwOworCXBnb2ZmX3QgcGdvZmY7CisJaW50IG5ld19mbGFncyA9IHZtYS0+dm1fZmxhZ3MgJiB+Vk1fUkVBREhJTlRNQVNLOworCisJc3dpdGNoIChiZWhhdmlvcikgeworCWNhc2UgTUFEVl9TRVFVRU5USUFMOgorCQluZXdfZmxhZ3MgfD0gVk1fU0VRX1JFQUQ7CisJCWJyZWFrOworCWNhc2UgTUFEVl9SQU5ET006CisJCW5ld19mbGFncyB8PSBWTV9SQU5EX1JFQUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChuZXdfZmxhZ3MgPT0gdm1hLT52bV9mbGFncykgeworCQkqcHJldiA9IHZtYTsKKwkJZ290byBzdWNjZXNzOworCX0KKworCXBnb2ZmID0gdm1hLT52bV9wZ29mZiArICgoc3RhcnQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKTsKKwkqcHJldiA9IHZtYV9tZXJnZShtbSwgKnByZXYsIHN0YXJ0LCBlbmQsIG5ld19mbGFncywgdm1hLT5hbm9uX3ZtYSwKKwkJCQl2bWEtPnZtX2ZpbGUsIHBnb2ZmLCB2bWFfcG9saWN5KHZtYSkpOworCWlmICgqcHJldikgeworCQl2bWEgPSAqcHJldjsKKwkJZ290byBzdWNjZXNzOworCX0KKworCSpwcmV2ID0gdm1hOwogCiAJaWYgKHN0YXJ0ICE9IHZtYS0+dm1fc3RhcnQpIHsKIAkJZXJyb3IgPSBzcGxpdF92bWEobW0sIHZtYSwgc3RhcnQsIDEpOwpAQCAtMzYsMjEgKzY2LDEyIEBACiAJICogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX3NlbSBoZWxkIGluIHdyaXRlIG1vZGUuCiAJICovCiAJVk1fQ2xlYXJSZWFkSGludCh2bWEpOwotCi0Jc3dpdGNoIChiZWhhdmlvcikgewotCWNhc2UgTUFEVl9TRVFVRU5USUFMOgotCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX1NFUV9SRUFEOwotCQlicmVhazsKLQljYXNlIE1BRFZfUkFORE9NOgotCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JBTkRfUkVBRDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQorCXZtYS0+dm1fZmxhZ3MgPSBuZXdfZmxhZ3M7CiAKIG91dDoKIAlpZiAoZXJyb3IgPT0gLUVOT01FTSkKIAkJZXJyb3IgPSAtRUFHQUlOOworc3VjY2VzczoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTU4LDYgKzc5LDcgQEAKICAqIFNjaGVkdWxlIGFsbCByZXF1aXJlZCBJL08gb3BlcmF0aW9ucy4gIERvIG5vdCB3YWl0IGZvciBjb21wbGV0aW9uLgogICovCiBzdGF0aWMgbG9uZyBtYWR2aXNlX3dpbGxuZWVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKKwkJCSAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqIHByZXYsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOwpAQCAtNjUsNiArODcsNyBAQAogCWlmICghZmlsZSkKIAkJcmV0dXJuIC1FQkFERjsKIAorCSpwcmV2ID0gdm1hOwogCXN0YXJ0ID0gKChzdGFydCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQpICsgdm1hLT52bV9wZ29mZjsKIAlpZiAoZW5kID4gdm1hLT52bV9lbmQpCiAJCWVuZCA9IHZtYS0+dm1fZW5kOwpAQCAtOTUsOCArMTE4LDEwIEBACiAgKiBkaXJ0eSBwYWdlcyBpcyBhbHJlYWR5IGF2YWlsYWJsZSBhcyBtc3luYyhNU19JTlZBTElEQVRFKS4KICAqLwogc3RhdGljIGxvbmcgbWFkdmlzZV9kb250bmVlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCisJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKiBwcmV2LAogCQkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKKwkqcHJldiA9IHZtYTsKIAlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHx8IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTExLDggKzEzNiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIG1hZHZpc2Vfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCXVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgYmVoYXZpb3IpCitzdGF0aWMgbG9uZyBtYWR2aXNlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqcHJldiwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgYmVoYXZpb3IpCiB7CiAJbG9uZyBlcnJvciA9IC1FQkFERjsKIApAQCAtMTIwLDE1ICsxNDUsMTUgQEAKIAljYXNlIE1BRFZfTk9STUFMOgogCWNhc2UgTUFEVl9TRVFVRU5USUFMOgogCWNhc2UgTUFEVl9SQU5ET006Ci0JCWVycm9yID0gbWFkdmlzZV9iZWhhdmlvcih2bWEsIHN0YXJ0LCBlbmQsIGJlaGF2aW9yKTsKKwkJZXJyb3IgPSBtYWR2aXNlX2JlaGF2aW9yKHZtYSwgcHJldiwgc3RhcnQsIGVuZCwgYmVoYXZpb3IpOwogCQlicmVhazsKIAogCWNhc2UgTUFEVl9XSUxMTkVFRDoKLQkJZXJyb3IgPSBtYWR2aXNlX3dpbGxuZWVkKHZtYSwgc3RhcnQsIGVuZCk7CisJCWVycm9yID0gbWFkdmlzZV93aWxsbmVlZCh2bWEsIHByZXYsIHN0YXJ0LCBlbmQpOwogCQlicmVhazsKIAogCWNhc2UgTUFEVl9ET05UTkVFRDoKLQkJZXJyb3IgPSBtYWR2aXNlX2RvbnRuZWVkKHZtYSwgc3RhcnQsIGVuZCk7CisJCWVycm9yID0gbWFkdmlzZV9kb250bmVlZCh2bWEsIHByZXYsIHN0YXJ0LCBlbmQpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xNzUsOCArMjAwLDggQEAKICAqLwogYXNtbGlua2FnZSBsb25nIHN5c19tYWR2aXNlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sIGludCBiZWhhdmlvcikKIHsKLQl1bnNpZ25lZCBsb25nIGVuZDsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWE7CisJdW5zaWduZWQgbG9uZyBlbmQsIHRtcDsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsICpwcmV2OwogCWludCB1bm1hcHBlZF9lcnJvciA9IDA7CiAJaW50IGVycm9yID0gLUVJTlZBTDsKIAlzaXplX3QgbGVuOwpAQCAtMjAyLDQwICsyMjcsNDIgQEAKIAkvKgogCSAqIElmIHRoZSBpbnRlcnZhbCBbc3RhcnQsZW5kKSBjb3ZlcnMgc29tZSB1bm1hcHBlZCBhZGRyZXNzCiAJICogcmFuZ2VzLCBqdXN0IGlnbm9yZSB0aGVtLCBidXQgcmV0dXJuIC1FTk9NRU0gYXQgdGhlIGVuZC4KKwkgKiAtIGRpZmZlcmVudCBmcm9tIHRoZSB3YXkgb2YgaGFuZGxpbmcgaW4gbWxvY2sgZXRjLgogCSAqLwotCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBzdGFydCk7CisJdm1hID0gZmluZF92bWFfcHJldihjdXJyZW50LT5tbSwgc3RhcnQsICZwcmV2KTsKKwlpZiAoIXZtYSAmJiBwcmV2KQorCQl2bWEgPSBwcmV2LT52bV9uZXh0OwogCWZvciAoOzspIHsKIAkJLyogU3RpbGwgc3RhcnQgPCBlbmQuICovCiAJCWVycm9yID0gLUVOT01FTTsKIAkJaWYgKCF2bWEpCiAJCQlnb3RvIG91dDsKIAotCQkvKiBIZXJlIHN0YXJ0IDwgdm1hLT52bV9lbmQuICovCisJCS8qIEhlcmUgc3RhcnQgPCAoZW5kfHZtYS0+dm1fZW5kKS4gKi8KIAkJaWYgKHN0YXJ0IDwgdm1hLT52bV9zdGFydCkgewogCQkJdW5tYXBwZWRfZXJyb3IgPSAtRU5PTUVNOwogCQkJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCQkJaWYgKHN0YXJ0ID49IGVuZCkKKwkJCQlnb3RvIG91dDsKIAkJfQogCi0JCS8qIEhlcmUgdm1hLT52bV9zdGFydCA8PSBzdGFydCA8IHZtYS0+dm1fZW5kLiAqLwotCQlpZiAoZW5kIDw9IHZtYS0+dm1fZW5kKSB7Ci0JCQlpZiAoc3RhcnQgPCBlbmQpIHsKLQkJCQllcnJvciA9IG1hZHZpc2Vfdm1hKHZtYSwgc3RhcnQsIGVuZCwKLQkJCQkJCQliZWhhdmlvcik7Ci0JCQkJaWYgKGVycm9yKQotCQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWVycm9yID0gdW5tYXBwZWRfZXJyb3I7Ci0JCQlnb3RvIG91dDsKLQkJfQorCQkvKiBIZXJlIHZtYS0+dm1fc3RhcnQgPD0gc3RhcnQgPCAoZW5kfHZtYS0+dm1fZW5kKSAqLworCQl0bXAgPSB2bWEtPnZtX2VuZDsKKwkJaWYgKGVuZCA8IHRtcCkKKwkJCXRtcCA9IGVuZDsKIAotCQkvKiBIZXJlIHZtYS0+dm1fc3RhcnQgPD0gc3RhcnQgPCB2bWEtPnZtX2VuZCA8IGVuZC4gKi8KLQkJZXJyb3IgPSBtYWR2aXNlX3ZtYSh2bWEsIHN0YXJ0LCB2bWEtPnZtX2VuZCwgYmVoYXZpb3IpOworCQkvKiBIZXJlIHZtYS0+dm1fc3RhcnQgPD0gc3RhcnQgPCB0bXAgPD0gKGVuZHx2bWEtPnZtX2VuZCkuICovCisJCWVycm9yID0gbWFkdmlzZV92bWEodm1hLCAmcHJldiwgc3RhcnQsIHRtcCwgYmVoYXZpb3IpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKLQkJc3RhcnQgPSB2bWEtPnZtX2VuZDsKLQkJdm1hID0gdm1hLT52bV9uZXh0OworCQlzdGFydCA9IHRtcDsKKwkJaWYgKHN0YXJ0IDwgcHJldi0+dm1fZW5kKQorCQkJc3RhcnQgPSBwcmV2LT52bV9lbmQ7CisJCWVycm9yID0gdW5tYXBwZWRfZXJyb3I7CisJCWlmIChzdGFydCA+PSBlbmQpCisJCQlnb3RvIG91dDsKKwkJdm1hID0gcHJldi0+dm1fbmV4dDsKIAl9Ci0KIG91dDoKIAl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGQyMDlmNzQuLmRhOTFiN2IgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC04NDAsMjMgKzg0MCw4IEBACiB7CiAJcmV0dXJuIF9fZm9sbG93X3BhZ2UobW0sIGFkZHJlc3MsIC8qcmVhZCovMSwgLyp3cml0ZSovMCkgIT0gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTChjaGVja191c2VyX3BhZ2VfcmVhZGFibGUpOwogCi0vKiAKLSAqIEdpdmVuIGEgcGh5c2ljYWwgYWRkcmVzcywgaXMgdGhlcmUgYSB1c2VmdWwgc3RydWN0IHBhZ2UgcG9pbnRpbmcgdG8KLSAqIGl0PyAgVGhpcyBtYXkgYmVjb21lIG1vcmUgY29tcGxleCBpbiB0aGUgZnV0dXJlIGlmIHdlIHN0YXJ0IGRlYWxpbmcKLSAqIHdpdGggSU8tYXBlcnR1cmUgcGFnZXMgZm9yIGRpcmVjdC1JTy4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpnZXRfcGFnZV9tYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JaWYgKCFwZm5fdmFsaWQocGFnZV90b19wZm4ocGFnZSkpKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gcGFnZTsKLX0KLQotCiBzdGF0aWMgaW5saW5lIGludAogdW50b3VjaGVkX2Fub255bW91c19wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QqIG1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCkBAIC04ODcsNyArODcyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBpbnQgZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgd3JpdGUsIGludCBmb3JjZSwKIAkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcykKQEAgLTk1MSwyMSArOTM1LDIxIEBACiAJCX0KIAkJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAkJZG8gewotCQkJc3RydWN0IHBhZ2UgKm1hcDsKKwkJCXN0cnVjdCBwYWdlICpwYWdlOwogCQkJaW50IGxvb2t1cF93cml0ZSA9IHdyaXRlOwogCiAJCQljb25kX3Jlc2NoZWRfbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JCQl3aGlsZSAoIShtYXAgPSBmb2xsb3dfcGFnZShtbSwgc3RhcnQsIGxvb2t1cF93cml0ZSkpKSB7CisJCQl3aGlsZSAoIShwYWdlID0gZm9sbG93X3BhZ2UobW0sIHN0YXJ0LCBsb29rdXBfd3JpdGUpKSkgewogCQkJCS8qCiAJCQkJICogU2hvcnRjdXQgZm9yIGFub255bW91cyBwYWdlcy4gV2UgZG9uJ3Qgd2FudAogCQkJCSAqIHRvIGZvcmNlIHRoZSBjcmVhdGlvbiBvZiBwYWdlcyB0YWJsZXMgZm9yCi0JCQkJICogaW5zYW5seSBiaWcgYW5vbnltb3VzbHkgbWFwcGVkIGFyZWFzIHRoYXQKKwkJCQkgKiBpbnNhbmVseSBiaWcgYW5vbnltb3VzbHkgbWFwcGVkIGFyZWFzIHRoYXQKIAkJCQkgKiBub2JvZHkgdG91Y2hlZCBzbyBmYXIuIFRoaXMgaXMgaW1wb3J0YW50CiAJCQkJICogZm9yIGRvaW5nIGEgY29yZSBkdW1wIGZvciB0aGVzZSBtYXBwaW5ncy4KIAkJCQkgKi8KIAkJCQlpZiAoIWxvb2t1cF93cml0ZSAmJgogCQkJCSAgICB1bnRvdWNoZWRfYW5vbnltb3VzX3BhZ2UobW0sdm1hLHN0YXJ0KSkgewotCQkJCQltYXAgPSBaRVJPX1BBR0Uoc3RhcnQpOworCQkJCQlwYWdlID0gWkVST19QQUdFKHN0YXJ0KTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKQEAgLTk5NCwzMCArOTc4LDIxIEBACiAJCQkJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAkJCX0KIAkJCWlmIChwYWdlcykgewotCQkJCXBhZ2VzW2ldID0gZ2V0X3BhZ2VfbWFwKG1hcCk7Ci0JCQkJaWYgKCFwYWdlc1tpXSkgewotCQkJCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JCQkJCXdoaWxlIChpLS0pCi0JCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZXNbaV0pOwotCQkJCQlpID0gLUVGQVVMVDsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQotCQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VzW2ldKTsKLQkJCQlpZiAoIVBhZ2VSZXNlcnZlZChwYWdlc1tpXSkpCi0JCQkJCXBhZ2VfY2FjaGVfZ2V0KHBhZ2VzW2ldKTsKKwkJCQlwYWdlc1tpXSA9IHBhZ2U7CisJCQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJCQkJaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkpCisJCQkJCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOwogCQkJfQogCQkJaWYgKHZtYXMpCiAJCQkJdm1hc1tpXSA9IHZtYTsKIAkJCWkrKzsKIAkJCXN0YXJ0ICs9IFBBR0VfU0laRTsKIAkJCWxlbi0tOwotCQl9IHdoaWxlKGxlbiAmJiBzdGFydCA8IHZtYS0+dm1fZW5kKTsKKwkJfSB3aGlsZSAobGVuICYmIHN0YXJ0IDwgdm1hLT52bV9lbmQpOwogCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JfSB3aGlsZShsZW4pOwotb3V0OgorCX0gd2hpbGUgKGxlbik7CiAJcmV0dXJuIGk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZ2V0X3VzZXJfcGFnZXMpOwogCiBzdGF0aWMgaW50IHplcm9tYXBfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLApAQCAtMTI2NCw3ICsxMjM5LDcgQEAKIAl9CiAJb2xkX3BhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JaWYgKCFUZXN0U2V0UGFnZUxvY2tlZChvbGRfcGFnZSkpIHsKKwlpZiAoUGFnZUFub24ob2xkX3BhZ2UpICYmICFUZXN0U2V0UGFnZUxvY2tlZChvbGRfcGFnZSkpIHsKIAkJaW50IHJldXNlID0gY2FuX3NoYXJlX3N3YXBfcGFnZShvbGRfcGFnZSk7CiAJCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKIAkJaWYgKHJldXNlKSB7CkBAIC0xNzExLDEwICsxNjg2LDYgQEAKIAl9CiAKIAkvKiBUaGUgcGFnZSBpc24ndCBwcmVzZW50IHlldCwgZ28gYWhlYWQgd2l0aCB0aGUgZmF1bHQuICovCi0JCQotCXN3YXBfZnJlZShlbnRyeSk7Ci0JaWYgKHZtX3N3YXBfZnVsbCgpKQotCQlyZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShwYWdlKTsKIAogCWluY19tbV9jb3VudGVyKG1tLCByc3MpOwogCXB0ZSA9IG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CkBAIC0xNzIyLDEyICsxNjkzLDE2IEBACiAJCXB0ZSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkocHRlKSwgdm1hKTsKIAkJd3JpdGVfYWNjZXNzID0gMDsKIAl9Ci0JdW5sb2NrX3BhZ2UocGFnZSk7CiAKIAlmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBhZ2UpOwogCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIHB0ZSk7CiAJcGFnZV9hZGRfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAKKwlzd2FwX2ZyZWUoZW50cnkpOworCWlmICh2bV9zd2FwX2Z1bGwoKSkKKwkJcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2UocGFnZSk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CisKIAlpZiAod3JpdGVfYWNjZXNzKSB7CiAJCWlmIChkb193cF9wYWdlKG1tLCB2bWEsIGFkZHJlc3MsCiAJCQkJcGFnZV90YWJsZSwgcG1kLCBwdGUpID09IFZNX0ZBVUxUX09PTSkKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggMDhjNDFkYS4uY2I0MWMzMSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKKysrIGIvbW0vbWVtcG9saWN5LmMKQEAgLTIzOCw0NiArMjM4LDgwIEBACiB9CiAKIC8qIEVuc3VyZSBhbGwgZXhpc3RpbmcgcGFnZXMgZm9sbG93IHRoZSBwb2xpY3kuICovCi1zdGF0aWMgaW50Ci12ZXJpZnlfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpub2RlcykKK3N0YXRpYyBpbnQgY2hlY2tfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAorCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpub2RlcykKIHsKLQl3aGlsZSAoYWRkciA8IGVuZCkgewotCQlzdHJ1Y3QgcGFnZSAqcDsKLQkJcHRlX3QgKnB0ZTsKLQkJcG1kX3QgKnBtZDsKLQkJcHVkX3QgKnB1ZDsKLQkJcGdkX3QgKnBnZDsKLQkJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcik7Ci0JCWlmIChwZ2Rfbm9uZSgqcGdkKSkgewotCQkJdW5zaWduZWQgbG9uZyBuZXh0ID0gKGFkZHIgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7Ci0JCQlpZiAobmV4dCA+IGFkZHIpCi0JCQkJYnJlYWs7Ci0JCQlhZGRyID0gbmV4dDsKKwlwdGVfdCAqb3JpZ19wdGU7CisJcHRlX3QgKnB0ZTsKKworCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJb3JpZ19wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHIpOworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBwZm47CisJCXVuc2lnbmVkIGludCBuaWQ7CisKKwkJaWYgKCFwdGVfcHJlc2VudCgqcHRlKSkKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKLQkJaWYgKHB1ZF9ub25lKCpwdWQpKSB7Ci0JCQlhZGRyID0gKGFkZHIgKyBQVURfU0laRSkgJiBQVURfTUFTSzsKKwkJcGZuID0gcHRlX3BmbigqcHRlKTsKKwkJaWYgKCFwZm5fdmFsaWQocGZuKSkKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKLQkJaWYgKHBtZF9ub25lKCpwbWQpKSB7Ci0JCQlhZGRyID0gKGFkZHIgKyBQTURfU0laRSkgJiBQTURfTUFTSzsKKwkJbmlkID0gcGZuX3RvX25pZChwZm4pOworCQlpZiAoIXRlc3RfYml0KG5pZCwgbm9kZXMpKQorCQkJYnJlYWs7CisJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CisJcHRlX3VubWFwKG9yaWdfcHRlKTsKKwlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJcmV0dXJuIGFkZHIgIT0gZW5kOworfQorCitzdGF0aWMgaW5saW5lIGludCBjaGVja19wbWRfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsCisJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgKm5vZGVzKQoreworCXBtZF90ICpwbWQ7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCWRvIHsKKwkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCQlpZiAocG1kX25vbmVfb3JfY2xlYXJfYmFkKHBtZCkpCiAJCQljb250aW51ZTsKLQkJfQotCQlwID0gTlVMTDsKLQkJcHRlID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyKTsKLQkJaWYgKHB0ZV9wcmVzZW50KCpwdGUpKQotCQkJcCA9IHB0ZV9wYWdlKCpwdGUpOwotCQlwdGVfdW5tYXAocHRlKTsKLQkJaWYgKHApIHsKLQkJCXVuc2lnbmVkIG5pZCA9IHBhZ2VfdG9fbmlkKHApOwotCQkJaWYgKCF0ZXN0X2JpdChuaWQsIG5vZGVzKSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJfQotCQlhZGRyICs9IFBBR0VfU0laRTsKLQl9CisJCWlmIChjaGVja19wdGVfcmFuZ2UobW0sIHBtZCwgYWRkciwgbmV4dCwgbm9kZXMpKQorCQkJcmV0dXJuIC1FSU87CisJfSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3B1ZF9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqbm9kZXMpCit7CisJcHVkX3QgKnB1ZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJZG8geworCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2hlY2tfcG1kX3JhbmdlKG1tLCBwdWQsIGFkZHIsIG5leHQsIG5vZGVzKSkKKwkJCXJldHVybiAtRUlPOworCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjaGVja19wZ2RfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgKm5vZGVzKQoreworCXBnZF90ICpwZ2Q7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCisJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcik7CisJZG8geworCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2hlY2tfcHVkX3JhbmdlKG1tLCBwZ2QsIGFkZHIsIG5leHQsIG5vZGVzKSkKKwkJCXJldHVybiAtRUlPOworCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTksNyArMzMzLDcgQEAKIAkJaWYgKHByZXYgJiYgcHJldi0+dm1fZW5kIDwgdm1hLT52bV9zdGFydCkKIAkJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCQlpZiAoKGZsYWdzICYgTVBPTF9NRl9TVFJJQ1QpICYmICFpc192bV9odWdldGxiX3BhZ2Uodm1hKSkgewotCQkJZXJyID0gdmVyaWZ5X3BhZ2VzKHZtYS0+dm1fbW0sCisJCQllcnIgPSBjaGVja19wZ2RfcmFuZ2Uodm1hLT52bV9tbSwKIAkJCQkJICAgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIG5vZGVzKTsKIAkJCWlmIChlcnIpIHsKIAkJCQlmaXJzdCA9IEVSUl9QVFIoZXJyKTsKQEAgLTcyMSw3ICs3NTUsNyBAQAogCXpsID0gTk9ERV9EQVRBKG5pZCktPm5vZGVfem9uZWxpc3RzICsgKGdmcCAmIEdGUF9aT05FTUFTSyk7CiAJcGFnZSA9IF9fYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgemwpOwogCWlmIChwYWdlICYmIHBhZ2Vfem9uZShwYWdlKSA9PSB6bC0+em9uZXNbMF0pIHsKLQkJemwtPnpvbmVzWzBdLT5wYWdlc2V0W2dldF9jcHUoKV0uaW50ZXJsZWF2ZV9oaXQrKzsKKwkJem9uZV9wY3AoemwtPnpvbmVzWzBdLGdldF9jcHUoKSktPmludGVybGVhdmVfaGl0Kys7CiAJCXB1dF9jcHUoKTsKIAl9CiAJcmV0dXJuIHBhZ2U7CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggZGU1NGFjZC4uZGEzZmE5MCAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMTE3NSw3ICsxMTc1LDEyIEBACiAJCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpKQogCQkJcmV0dXJuIGFkZHI7CiAJfQotCXN0YXJ0X2FkZHIgPSBhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKKwlpZiAobGVuID4gbW0tPmNhY2hlZF9ob2xlX3NpemUpIHsKKwkgICAgICAgIHN0YXJ0X2FkZHIgPSBhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKKwl9IGVsc2UgeworCSAgICAgICAgc3RhcnRfYWRkciA9IGFkZHIgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJICAgICAgICBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CisJfQogCiBmdWxsX3NlYXJjaDoKIAlmb3IgKHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsgOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKQEAgLTExODYsNyArMTE5MSw5IEBACiAJCQkgKiBzb21lIGhvbGVzLgogCQkJICovCiAJCQlpZiAoc3RhcnRfYWRkciAhPSBUQVNLX1VOTUFQUEVEX0JBU0UpIHsKLQkJCQlzdGFydF9hZGRyID0gYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwkJCQlhZGRyID0gVEFTS19VTk1BUFBFRF9CQVNFOworCQkJICAgICAgICBzdGFydF9hZGRyID0gYWRkcjsKKwkJCQltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CiAJCQkJZ290byBmdWxsX3NlYXJjaDsKIAkJCX0KIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMTE5OCwxOSArMTIwNSwyMiBAQAogCQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHIgKyBsZW47CiAJCQlyZXR1cm4gYWRkcjsKIAkJfQorCQlpZiAoYWRkciArIG1tLT5jYWNoZWRfaG9sZV9zaXplIDwgdm1hLT52bV9zdGFydCkKKwkJICAgICAgICBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IHZtYS0+dm1fc3RhcnQgLSBhZGRyOwogCQlhZGRyID0gdm1hLT52bV9lbmQ7CiAJfQogfQogI2VuZGlmCQogCi12b2lkIGFyY2hfdW5tYXBfYXJlYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCit2b2lkIGFyY2hfdW5tYXBfYXJlYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCS8qCiAJICogSXMgdGhpcyBhIG5ldyBob2xlIGF0IHRoZSBsb3dlc3QgcG9zc2libGUgYWRkcmVzcz8KIAkgKi8KLQlpZiAoYXJlYS0+dm1fc3RhcnQgPj0gVEFTS19VTk1BUFBFRF9CQVNFICYmCi0JCQlhcmVhLT52bV9zdGFydCA8IGFyZWEtPnZtX21tLT5mcmVlX2FyZWFfY2FjaGUpCi0JCWFyZWEtPnZtX21tLT5mcmVlX2FyZWFfY2FjaGUgPSBhcmVhLT52bV9zdGFydDsKKwlpZiAoYWRkciA+PSBUQVNLX1VOTUFQUEVEX0JBU0UgJiYgYWRkciA8IG1tLT5mcmVlX2FyZWFfY2FjaGUpIHsKKwkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHI7CisJCW1tLT5jYWNoZWRfaG9sZV9zaXplID0gfjBVTDsKKwl9CiB9CiAKIC8qCkBAIC0xMjQwLDYgKzEyNTAsMTIgQEAKIAkJCXJldHVybiBhZGRyOwogCX0KIAorCS8qIGNoZWNrIGlmIGZyZWVfYXJlYV9jYWNoZSBpcyB1c2VmdWwgZm9yIHVzICovCisJaWYgKGxlbiA8PSBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSkgeworIAkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKKyAJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBtbS0+bW1hcF9iYXNlOworIAl9CisKIAkvKiBlaXRoZXIgbm8gYWRkcmVzcyByZXF1ZXN0ZWQgb3IgY2FuJ3QgZml0IGluIHJlcXVlc3RlZCBhZGRyZXNzIGhvbGUgKi8KIAlhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKIApAQCAtMTI1MSw2ICsxMjY3LDkgQEAKIAkJCXJldHVybiAobW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHItbGVuKTsKIAl9CiAKKwlpZiAobW0tPm1tYXBfYmFzZSA8IGxlbikKKwkJZ290byBib3R0b211cDsKKwogCWFkZHIgPSBtbS0+bW1hcF9iYXNlLWxlbjsKIAogCWRvIHsKQEAgLTEyNjQsMzggKzEyODMsNDUgQEAKIAkJCS8qIHJlbWVtYmVyIHRoZSBhZGRyZXNzIGFzIGEgaGludCBmb3IgbmV4dCB0aW1lICovCiAJCQlyZXR1cm4gKG1tLT5mcmVlX2FyZWFfY2FjaGUgPSBhZGRyKTsKIAorIAkJLyogcmVtZW1iZXIgdGhlIGxhcmdlc3QgaG9sZSB3ZSBzYXcgc28gZmFyICovCisgCQlpZiAoYWRkciArIG1tLT5jYWNoZWRfaG9sZV9zaXplIDwgdm1hLT52bV9zdGFydCkKKyAJCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB2bWEtPnZtX3N0YXJ0IC0gYWRkcjsKKwogCQkvKiB0cnkganVzdCBiZWxvdyB0aGUgY3VycmVudCB2bWEtPnZtX3N0YXJ0ICovCiAJCWFkZHIgPSB2bWEtPnZtX3N0YXJ0LWxlbjsKIAl9IHdoaWxlIChsZW4gPCB2bWEtPnZtX3N0YXJ0KTsKIAorYm90dG9tdXA6CiAJLyoKIAkgKiBBIGZhaWxlZCBtbWFwKCkgdmVyeSBsaWtlbHkgY2F1c2VzIGFwcGxpY2F0aW9uIGZhaWx1cmUsCiAJICogc28gZmFsbCBiYWNrIHRvIHRoZSBib3R0b20tdXAgZnVuY3Rpb24gaGVyZS4gVGhpcyBzY2VuYXJpbwogCSAqIGNhbiBoYXBwZW4gd2l0aCBsYXJnZSBzdGFjayBsaW1pdHMgYW5kIGxhcmdlIG1tYXAoKQogCSAqIGFsbG9jYXRpb25zLgogCSAqLwotCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB+MFVMOworICAJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKIAlhZGRyID0gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MpOwogCS8qCiAJICogUmVzdG9yZSB0aGUgdG9wZG93biBiYXNlOgogCSAqLwogCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBtbS0+bW1hcF9iYXNlOworCW1tLT5jYWNoZWRfaG9sZV9zaXplID0gfjBVTDsKIAogCXJldHVybiBhZGRyOwogfQogI2VuZGlmCiAKLXZvaWQgYXJjaF91bm1hcF9hcmVhX3RvcGRvd24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKQordm9pZCBhcmNoX3VubWFwX2FyZWFfdG9wZG93bihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCS8qCiAJICogSXMgdGhpcyBhIG5ldyBob2xlIGF0IHRoZSBoaWdoZXN0IHBvc3NpYmxlIGFkZHJlc3M/CiAJICovCi0JaWYgKGFyZWEtPnZtX2VuZCA+IGFyZWEtPnZtX21tLT5mcmVlX2FyZWFfY2FjaGUpCi0JCWFyZWEtPnZtX21tLT5mcmVlX2FyZWFfY2FjaGUgPSBhcmVhLT52bV9lbmQ7CisJaWYgKGFkZHIgPiBtbS0+ZnJlZV9hcmVhX2NhY2hlKQorCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYWRkcjsKIAogCS8qIGRvbnQgYWxsb3cgYWxsb2NhdGlvbnMgYWJvdmUgY3VycmVudCBiYXNlICovCi0JaWYgKGFyZWEtPnZtX21tLT5mcmVlX2FyZWFfY2FjaGUgPiBhcmVhLT52bV9tbS0+bW1hcF9iYXNlKQotCQlhcmVhLT52bV9tbS0+ZnJlZV9hcmVhX2NhY2hlID0gYXJlYS0+dm1fbW0tPm1tYXBfYmFzZTsKKwlpZiAobW0tPmZyZWVfYXJlYV9jYWNoZSA+IG1tLT5tbWFwX2Jhc2UpCisJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBtbS0+bW1hcF9iYXNlOwogfQogCiB1bnNpZ25lZCBsb25nCkBAIC0xNTk1LDcgKzE2MjEsNiBAQAogCWlmIChhcmVhLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKIAkJYXJlYS0+dm1fbW0tPmxvY2tlZF92bSAtPSBsZW4gPj4gUEFHRV9TSElGVDsKIAl2bV9zdGF0X3VuYWNjb3VudChhcmVhKTsKLQlhcmVhLT52bV9tbS0+dW5tYXBfYXJlYShhcmVhKTsKIAlyZW1vdmVfdm1fc3RydWN0KGFyZWEpOwogfQogCkBAIC0xNjQ5LDYgKzE2NzQsNyBAQAogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKmluc2VydGlvbl9wb2ludDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnRhaWxfdm1hID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlpbnNlcnRpb25fcG9pbnQgPSAocHJldiA/ICZwcmV2LT52bV9uZXh0IDogJm1tLT5tbWFwKTsKIAlkbyB7CkBAIC0xNjU5LDYgKzE2ODUsMTEgQEAKIAl9IHdoaWxlICh2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZCk7CiAJKmluc2VydGlvbl9wb2ludCA9IHZtYTsKIAl0YWlsX3ZtYS0+dm1fbmV4dCA9IE5VTEw7CisJaWYgKG1tLT51bm1hcF9hcmVhID09IGFyY2hfdW5tYXBfYXJlYSkKKwkJYWRkciA9IHByZXYgPyBwcmV2LT52bV9lbmQgOiBtbS0+bW1hcF9iYXNlOworCWVsc2UKKwkJYWRkciA9IHZtYSA/ICB2bWEtPnZtX3N0YXJ0IDogbW0tPm1tYXBfYmFzZTsKKwltbS0+dW5tYXBfYXJlYShtbSwgYWRkcik7CiAJbW0tPm1tYXBfY2FjaGUgPSBOVUxMOwkJLyogS2lsbCB0aGUgY2FjaGUuICovCiB9CiAKZGlmZiAtLWdpdCBhL21tL21zeW5jLmMgYi9tbS9tc3luYy5jCmluZGV4IDA5MGY0MjYuLmQwZjVhMWIgMTAwNjQ0Ci0tLSBhL21tL21zeW5jLmMKKysrIGIvbW0vbXN5bmMuYwpAQCAtMzQsNiArMzQsOCBAQAogCiAJCWlmICghcHRlX3ByZXNlbnQoKnB0ZSkpCiAJCQljb250aW51ZTsKKwkJaWYgKCFwdGVfbWF5YmVfZGlydHkoKnB0ZSkpCisJCQljb250aW51ZTsKIAkJcGZuID0gcHRlX3BmbigqcHRlKTsKIAkJaWYgKCFwZm5fdmFsaWQocGZuKSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggYzUzZTljOC4uY2U3NDQ1MiAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC0xMDY3LDcgKzEwNjcsNyBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi12b2lkIGFyY2hfdW5tYXBfYXJlYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCit2b2lkIGFyY2hfdW5tYXBfYXJlYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogfQogCmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCA0YmJiMWNiLi41OTY2NmQ5IDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTI1OCw2ICsyNTgsMTAgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7CiAJdGFza190ICogcDsKIAorCXByaW50aygib29tLWtpbGxlcjogZ2ZwX21hc2s9MHgleFxuIiwgZ2ZwX21hc2spOworCS8qIHByaW50IG1lbW9yeSBzdGF0cyAqLworCXNob3dfbWVtKCk7CisKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogcmV0cnk6CiAJcCA9IHNlbGVjdF9iYWRfcHJvY2VzcygpOwpAQCAtMjY4LDEyICsyNzIsOSBAQAogCS8qIEZvdW5kIG5vdGhpbmc/IT8hIEVpdGhlciB3ZSBoYW5nIGZvcmV2ZXIsIG9yIHdlIHBhbmljLiAqLwogCWlmICghcCkgewogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCXNob3dfZnJlZV9hcmVhcygpOwogCQlwYW5pYygiT3V0IG9mIG1lbW9yeSBhbmQgbm8ga2lsbGFibGUgcHJvY2Vzc2VzLi4uXG4iKTsKIAl9CiAKLQlwcmludGsoIm9vbS1raWxsZXI6IGdmcF9tYXNrPTB4JXhcbiIsIGdmcF9tYXNrKTsKLQlzaG93X2ZyZWVfYXJlYXMoKTsKIAltbSA9IG9vbV9raWxsX3Byb2Nlc3MocCk7CiAJaWYgKCFtbSkKIAkJZ290byByZXRyeTsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBiMTA2MWIxLi4yMDY5MjA3IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xMDUsMTEgKzEwNSwxMyBAQAogCXByaW50ayhLRVJOX0VNRVJHICJCYWNrdHJhY2U6XG4iKTsKIAlkdW1wX3N0YWNrKCk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlRyeWluZyB0byBmaXggaXQgdXAsIGJ1dCBhIHJlYm9vdCBpcyBuZWVkZWRcbiIpOwotCXBhZ2UtPmZsYWdzICY9IH4oMSA8PCBQR19wcml2YXRlCXwKKwlwYWdlLT5mbGFncyAmPSB+KDEgPDwgUEdfbHJ1CXwKKwkJCTEgPDwgUEdfcHJpdmF0ZSB8CiAJCQkxIDw8IFBHX2xvY2tlZAl8Ci0JCQkxIDw8IFBHX2xydQl8CiAJCQkxIDw8IFBHX2FjdGl2ZQl8CiAJCQkxIDw8IFBHX2RpcnR5CXwKKwkJCTEgPDwgUEdfcmVjbGFpbSB8CisJCQkxIDw8IFBHX3NsYWIgICAgfAogCQkJMSA8PCBQR19zd2FwY2FjaGUgfAogCQkJMSA8PCBQR193cml0ZWJhY2spOwogCXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwpAQCAtNDQwLDE0ICs0NDIsMTcgQEAKICAqLwogc3RhdGljIHZvaWQgcHJlcF9uZXdfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogewotCWlmIChwYWdlLT5tYXBwaW5nIHx8IHBhZ2VfbWFwY291bnQocGFnZSkgfHwKLQkgICAgKHBhZ2UtPmZsYWdzICYgKAorCWlmICgJcGFnZV9tYXBjb3VudChwYWdlKSB8fAorCQlwYWdlLT5tYXBwaW5nICE9IE5VTEwgfHwKKwkJcGFnZV9jb3VudChwYWdlKSAhPSAwIHx8CisJCShwYWdlLT5mbGFncyAmICgKKwkJCTEgPDwgUEdfbHJ1CXwKIAkJCTEgPDwgUEdfcHJpdmF0ZQl8CiAJCQkxIDw8IFBHX2xvY2tlZAl8Ci0JCQkxIDw8IFBHX2xydQl8CiAJCQkxIDw8IFBHX2FjdGl2ZQl8CiAJCQkxIDw8IFBHX2RpcnR5CXwKIAkJCTEgPDwgUEdfcmVjbGFpbQl8CisJCQkxIDw8IFBHX3NsYWIgICAgfAogCQkJMSA8PCBQR19zd2FwY2FjaGUgfAogCQkJMSA8PCBQR193cml0ZWJhY2sgKSkpCiAJCWJhZF9wYWdlKF9fRlVOQ1RJT05fXywgcGFnZSk7CkBAIC01MTEsNiArNTE2LDM2IEBACiAJcmV0dXJuIGFsbG9jYXRlZDsKIH0KIAorI2lmZGVmIENPTkZJR19OVU1BCisvKiBDYWxsZWQgZnJvbSB0aGUgc2xhYiByZWFwZXIgdG8gZHJhaW4gcmVtb3RlIHBhZ2VzZXRzICovCit2b2lkIGRyYWluX3JlbW90ZV9wYWdlcyh2b2lkKQoreworCXN0cnVjdCB6b25lICp6b25lOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yX2VhY2hfem9uZSh6b25lKSB7CisJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzZXQ7CisKKwkJLyogRG8gbm90IGRyYWluIGxvY2FsIHBhZ2VzZXRzICovCisJCWlmICh6b25lLT56b25lX3BnZGF0LT5ub2RlX2lkID09IG51bWFfbm9kZV9pZCgpKQorCQkJY29udGludWU7CisKKwkJcHNldCA9IHpvbmUtPnBhZ2VzZXRbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHNldC0+cGNwKTsgaSsrKSB7CisJCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOworCisJCQlwY3AgPSAmcHNldC0+cGNwW2ldOworCQkJaWYgKHBjcC0+Y291bnQpCisJCQkJcGNwLT5jb3VudCAtPSBmcmVlX3BhZ2VzX2J1bGsoem9uZSwgcGNwLT5jb3VudCwKKwkJCQkJCSZwY3AtPmxpc3QsIDApOworCQl9CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfUE0pIHx8IGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKQogc3RhdGljIHZvaWQgX19kcmFpbl9wYWdlcyh1bnNpZ25lZCBpbnQgY3B1KQogewpAQCAtNTIwLDcgKzU1NSw3IEBACiAJZm9yX2VhY2hfem9uZSh6b25lKSB7CiAJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzZXQ7CiAKLQkJcHNldCA9ICZ6b25lLT5wYWdlc2V0W2NwdV07CisJCXBzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwc2V0LT5wY3ApOyBpKyspIHsKIAkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7CiAKQEAgLTU4MywxMiArNjE4LDEyIEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXAgPSAmei0+cGFnZXNldFtjcHVdOworCXAgPSB6b25lX3BjcCh6LGNwdSk7CiAJaWYgKHBnID09IG9yaWcpIHsKLQkJei0+cGFnZXNldFtjcHVdLm51bWFfaGl0Kys7CisJCXAtPm51bWFfaGl0Kys7CiAJfSBlbHNlIHsKIAkJcC0+bnVtYV9taXNzKys7Ci0JCXpvbmVsaXN0LT56b25lc1swXS0+cGFnZXNldFtjcHVdLm51bWFfZm9yZWlnbisrOworCQl6b25lX3BjcCh6b25lbGlzdC0+em9uZXNbMF0sIGNwdSktPm51bWFfZm9yZWlnbisrOwogCX0KIAlpZiAocGcgPT0gTk9ERV9EQVRBKG51bWFfbm9kZV9pZCgpKSkKIAkJcC0+bG9jYWxfbm9kZSsrOwpAQCAtNjE1LDEyICs2NTAsMTIgQEAKIAlpZiAoUGFnZUFub24ocGFnZSkpCiAJCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwogCWZyZWVfcGFnZXNfY2hlY2soX19GVU5DVElPTl9fLCBwYWdlKTsKLQlwY3AgPSAmem9uZS0+cGFnZXNldFtnZXRfY3B1KCldLnBjcFtjb2xkXTsKKwlwY3AgPSAmem9uZV9wY3Aoem9uZSwgZ2V0X2NwdSgpKS0+cGNwW2NvbGRdOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAocGNwLT5jb3VudCA+PSBwY3AtPmhpZ2gpCi0JCXBjcC0+Y291bnQgLT0gZnJlZV9wYWdlc19idWxrKHpvbmUsIHBjcC0+YmF0Y2gsICZwY3AtPmxpc3QsIDApOwogCWxpc3RfYWRkKCZwYWdlLT5scnUsICZwY3AtPmxpc3QpOwogCXBjcC0+Y291bnQrKzsKKwlpZiAocGNwLT5jb3VudCA+PSBwY3AtPmhpZ2gpCisJCXBjcC0+Y291bnQgLT0gZnJlZV9wYWdlc19idWxrKHpvbmUsIHBjcC0+YmF0Y2gsICZwY3AtPmxpc3QsIDApOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwdXRfY3B1KCk7CiB9CkBAIC02NTksNyArNjk0LDcgQEAKIAlpZiAob3JkZXIgPT0gMCkgewogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOwogCi0JCXBjcCA9ICZ6b25lLT5wYWdlc2V0W2dldF9jcHUoKV0ucGNwW2NvbGRdOworCQlwY3AgPSAmem9uZV9wY3Aoem9uZSwgZ2V0X2NwdSgpKS0+cGNwW2NvbGRdOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCWlmIChwY3AtPmNvdW50IDw9IHBjcC0+bG93KQogCQkJcGNwLT5jb3VudCArPSBybXF1ZXVlX2J1bGsoem9uZSwgMCwKQEAgLTcyNCw2ICs3NTksMTYgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK3Nob3VsZF9yZWNsYWltX3pvbmUoc3RydWN0IHpvbmUgKnosIHVuc2lnbmVkIGludCBnZnBfbWFzaykKK3sKKwlpZiAoIXotPnJlY2xhaW1fcGFnZXMpCisJCXJldHVybiAwOworCWlmIChnZnBfbWFzayAmIF9fR0ZQX05PUkVDTEFJTSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBUaGlzIGlzIHRoZSAnaGVhcnQnIG9mIHRoZSB6b25lZCBidWRkeSBhbGxvY2F0b3IuCiAgKi8KQEAgLTc2MCwxNyArODA1LDMyIEBACiAKIAljbGFzc3pvbmVfaWR4ID0gem9uZV9pZHgoem9uZXNbMF0pOwogCi0gcmVzdGFydDoKK3Jlc3RhcnQ6CiAJLyogR28gdGhyb3VnaCB0aGUgem9uZWxpc3Qgb25jZSwgbG9va2luZyBmb3IgYSB6b25lIHdpdGggZW5vdWdoIGZyZWUgKi8KIAlmb3IgKGkgPSAwOyAoeiA9IHpvbmVzW2ldKSAhPSBOVUxMOyBpKyspIHsKLQotCQlpZiAoIXpvbmVfd2F0ZXJtYXJrX29rKHosIG9yZGVyLCB6LT5wYWdlc19sb3csCi0JCQkJICAgICAgIGNsYXNzem9uZV9pZHgsIDAsIDApKQotCQkJY29udGludWU7CisJCWludCBkb19yZWNsYWltID0gc2hvdWxkX3JlY2xhaW1fem9uZSh6LCBnZnBfbWFzayk7CiAKIAkJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkKHopKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogSWYgdGhlIHpvbmUgaXMgdG8gYXR0ZW1wdCBlYXJseSBwYWdlIHJlY2xhaW0gdGhlbiB0aGlzIGxvb3AKKwkJICogd2lsbCB0cnkgdG8gcmVjbGFpbSBwYWdlcyBhbmQgY2hlY2sgdGhlIHdhdGVybWFyayBhIHNlY29uZAorCQkgKiB0aW1lIGJlZm9yZSBnaXZpbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB0byB0aGUgbmV4dCB6b25lLgorCQkgKi8KK3pvbmVfcmVjbGFpbV9yZXRyeToKKwkJaWYgKCF6b25lX3dhdGVybWFya19vayh6LCBvcmRlciwgei0+cGFnZXNfbG93LAorCQkJCSAgICAgICBjbGFzc3pvbmVfaWR4LCAwLCAwKSkgeworCQkJaWYgKCFkb19yZWNsYWltKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZSB7CisJCQkJem9uZV9yZWNsYWltKHosIGdmcF9tYXNrLCBvcmRlcik7CisJCQkJLyogT25seSB0cnkgcmVjbGFpbSBvbmNlICovCisJCQkJZG9fcmVjbGFpbSA9IDA7CisJCQkJZ290byB6b25lX3JlY2xhaW1fcmV0cnk7CisJCQl9CisJCX0KKwogCQlwYWdlID0gYnVmZmVyZWRfcm1xdWV1ZSh6LCBvcmRlciwgZ2ZwX21hc2spOwogCQlpZiAocGFnZSkKIAkJCWdvdG8gZ290X3BnOwpAQCAtODI5LDcgKzg4OSw3IEBACiAJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7CiAJcC0+cmVjbGFpbV9zdGF0ZSA9ICZyZWNsYWltX3N0YXRlOwogCi0JZGlkX3NvbWVfcHJvZ3Jlc3MgPSB0cnlfdG9fZnJlZV9wYWdlcyh6b25lcywgZ2ZwX21hc2ssIG9yZGVyKTsKKwlkaWRfc29tZV9wcm9ncmVzcyA9IHRyeV90b19mcmVlX3BhZ2VzKHpvbmVzLCBnZnBfbWFzayk7CiAKIAlwLT5yZWNsYWltX3N0YXRlID0gTlVMTDsKIAlwLT5mbGFncyAmPSB+UEZfTUVNQUxMT0M7CkBAIC05MDUsNiArOTY1LDcgQEAKIAkJCSIgb3JkZXI6JWQsIG1vZGU6MHgleFxuIiwKIAkJCXAtPmNvbW0sIG9yZGVyLCBnZnBfbWFzayk7CiAJCWR1bXBfc3RhY2soKTsKKwkJc2hvd19tZW0oKTsKIAl9CiAJcmV0dXJuIE5VTEw7CiBnb3RfcGc6CkBAIC0xMTE0LDcgKzExNzUsNyBAQAogCV9fZ2V0X3BhZ2Vfc3RhdGUocmV0LCBzaXplb2YoKnJldCkgLyBzaXplb2YodW5zaWduZWQgbG9uZykpOwogfQogCi11bnNpZ25lZCBsb25nIF9fcmVhZF9wYWdlX3N0YXRlKHVuc2lnbmVkIG9mZnNldCkKK3Vuc2lnbmVkIGxvbmcgX19yZWFkX3BhZ2Vfc3RhdGUodW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCWludCBjcHU7CkBAIC0xMTI4LDcgKzExODksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgX19tb2RfcGFnZV9zdGF0ZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgZGVsdGEpCit2b2lkIF9fbW9kX3BhZ2Vfc3RhdGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgZGVsdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkKiBwdHI7CkBAIC0xMjM3LDIyICsxMjk4LDIzIEBACiAJCQlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlwYWdlc2V0ID0gem9uZS0+cGFnZXNldCArIGNwdTsKKwkJCXBhZ2VzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOwogCiAJCQlmb3IgKHRlbXBlcmF0dXJlID0gMDsgdGVtcGVyYXR1cmUgPCAyOyB0ZW1wZXJhdHVyZSsrKQotCQkJCXByaW50aygiY3B1ICVkICVzOiBsb3cgJWQsIGhpZ2ggJWQsIGJhdGNoICVkXG4iLAorCQkJCXByaW50aygiY3B1ICVkICVzOiBsb3cgJWQsIGhpZ2ggJWQsIGJhdGNoICVkIHVzZWQ6JWRcbiIsCiAJCQkJCWNwdSwKIAkJCQkJdGVtcGVyYXR1cmUgPyAiY29sZCIgOiAiaG90IiwKIAkJCQkJcGFnZXNldC0+cGNwW3RlbXBlcmF0dXJlXS5sb3csCiAJCQkJCXBhZ2VzZXQtPnBjcFt0ZW1wZXJhdHVyZV0uaGlnaCwKLQkJCQkJcGFnZXNldC0+cGNwW3RlbXBlcmF0dXJlXS5iYXRjaCk7CisJCQkJCXBhZ2VzZXQtPnBjcFt0ZW1wZXJhdHVyZV0uYmF0Y2gsCisJCQkJCXBhZ2VzZXQtPnBjcFt0ZW1wZXJhdHVyZV0uY291bnQpOwogCQl9CiAJfQogCiAJZ2V0X3BhZ2Vfc3RhdGUoJnBzKTsKIAlnZXRfem9uZV9jb3VudHMoJmFjdGl2ZSwgJmluYWN0aXZlLCAmZnJlZSk7CiAKLQlwcmludGsoIlxuRnJlZSBwYWdlczogJTExdWtCICgldWtCIEhpZ2hNZW0pXG4iLAorCXByaW50aygiRnJlZSBwYWdlczogJTExdWtCICgldWtCIEhpZ2hNZW0pXG4iLAogCQlLKG5yX2ZyZWVfcGFnZXMoKSksCiAJCUsobnJfZnJlZV9oaWdocGFnZXMoKSkpOwogCkBAIC0xNjIwLDYgKzE2ODIsMTU1IEBACiAJbWVtbWFwX2luaXRfem9uZSgoc2l6ZSksIChuaWQpLCAoem9uZSksIChzdGFydF9wZm4pKQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHpvbmVfYmF0Y2hzaXplKHN0cnVjdCB6b25lICp6b25lKQoreworCWludCBiYXRjaDsKKworCS8qCisJICogVGhlIHBlci1jcHUtcGFnZXMgcG9vbHMgYXJlIHNldCB0byBhcm91bmQgMTAwMHRoIG9mIHRoZQorCSAqIHNpemUgb2YgdGhlIHpvbmUuICBCdXQgbm8gbW9yZSB0aGFuIDEvNCBvZiBhIG1lZyAtIHRoZXJlJ3MKKwkgKiBubyBwb2ludCBpbiBnb2luZyBiZXlvbmQgdGhlIHNpemUgb2YgTDIgY2FjaGUuCisJICoKKwkgKiBPSywgc28gd2UgZG9uJ3Qga25vdyBob3cgYmlnIHRoZSBjYWNoZSBpcy4gIFNvIGd1ZXNzLgorCSAqLworCWJhdGNoID0gem9uZS0+cHJlc2VudF9wYWdlcyAvIDEwMjQ7CisJaWYgKGJhdGNoICogUEFHRV9TSVpFID4gMjU2ICogMTAyNCkKKwkJYmF0Y2ggPSAoMjU2ICogMTAyNCkgLyBQQUdFX1NJWkU7CisJYmF0Y2ggLz0gNDsJCS8qIFdlIGVmZmVjdGl2ZWx5ICo9IDQgYmVsb3cgKi8KKwlpZiAoYmF0Y2ggPCAxKQorCQliYXRjaCA9IDE7CisKKwkvKgorCSAqIENsYW1wIHRoZSBiYXRjaCB0byBhIDJebiAtIDEgdmFsdWUuIEhhdmluZyBhIHBvd2VyCisJICogb2YgMiB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgbW9yZSBsaWtlbHkgdG8gaGF2ZQorCSAqIHN1Ym9wdGltYWwgY2FjaGUgYWxpYXNpbmcgcHJvcGVydGllcyBpbiBzb21lIGNhc2VzLgorCSAqCisJICogRm9yIGV4YW1wbGUgaWYgMiB0YXNrcyBhcmUgYWx0ZXJuYXRlbHkgYWxsb2NhdGluZworCSAqIGJhdGNoZXMgb2YgcGFnZXMsIG9uZSB0YXNrIGNhbiBlbmQgdXAgd2l0aCBhIGxvdAorCSAqIG9mIHBhZ2VzIG9mIG9uZSBoYWxmIG9mIHRoZSBwb3NzaWJsZSBwYWdlIGNvbG9ycworCSAqIGFuZCB0aGUgb3RoZXIgd2l0aCBwYWdlcyBvZiB0aGUgb3RoZXIgY29sb3JzLgorCSAqLworCWJhdGNoID0gKDEgPDwgZmxzKGJhdGNoICsgYmF0Y2gvMikpIC0gMTsKKwlyZXR1cm4gYmF0Y2g7Cit9CisKK2lubGluZSB2b2lkIHNldHVwX3BhZ2VzZXQoc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcCwgdW5zaWduZWQgbG9uZyBiYXRjaCkKK3sKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOworCisJcGNwID0gJnAtPnBjcFswXTsJCS8qIGhvdCAqLworCXBjcC0+Y291bnQgPSAwOworCXBjcC0+bG93ID0gMiAqIGJhdGNoOworCXBjcC0+aGlnaCA9IDYgKiBiYXRjaDsKKwlwY3AtPmJhdGNoID0gbWF4KDFVTCwgMSAqIGJhdGNoKTsKKwlJTklUX0xJU1RfSEVBRCgmcGNwLT5saXN0KTsKKworCXBjcCA9ICZwLT5wY3BbMV07CQkvKiBjb2xkKi8KKwlwY3AtPmNvdW50ID0gMDsKKwlwY3AtPmxvdyA9IDA7CisJcGNwLT5oaWdoID0gMiAqIGJhdGNoOworCXBjcC0+YmF0Y2ggPSBtYXgoMVVMLCAxICogYmF0Y2gpOworCUlOSVRfTElTVF9IRUFEKCZwY3AtPmxpc3QpOworfQorCisjaWZkZWYgQ09ORklHX05VTUEKKy8qCisgKiBCb290IHBhZ2VzZXQgdGFibGUuIE9uZSBwZXIgY3B1IHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIGFsbAorICogem9uZXMgYW5kIGFsbCBub2Rlcy4gVGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBzZXQgaW4gc3VjaCBhIHdheQorICogdGhhdCBhbiBpdGVtIHB1dCBvbiBhIGxpc3Qgd2lsbCBpbW1lZGlhdGVseSBiZSBoYW5kZWQgb3ZlciB0bworICogdGhlIGJ1ZGR5IGxpc3QuIFRoaXMgaXMgc2FmZSBzaW5jZSBwYWdlc2V0IG1hbmlwdWxhdGlvbiBpcyBkb25lCisgKiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICogU29tZSBOVU1BIGNvdW50ZXIgdXBkYXRlcyBtYXkgYWxzbyBiZSBjYXVnaHQgYnkgdGhlIGJvb3QgcGFnZXNldHMuCisgKiBUaGVzZSB3aWxsIGJlIGRpc2NhcmRlZCB3aGVuIGJvb3R1cCBpcyBjb21wbGV0ZS4KKyAqLworc3RhdGljIHN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQKKwlib290X3BhZ2VzZXRbTlJfQ1BVU10gX19pbml0ZGF0YTsKKworLyoKKyAqIER5bmFtaWNhbGx5IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlCisgKiBwZXIgY3B1IHBhZ2VzZXQgYXJyYXkgaW4gc3RydWN0IHpvbmUuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHByb2Nlc3Nfem9uZXMoaW50IGNwdSkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZSwgKmR6b25lOworCisJZm9yX2VhY2hfem9uZSh6b25lKSB7CisKKwkJem9uZS0+cGFnZXNldFtjcHVdID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0KSwKKwkJCQkJIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGNwdSkpOworCQlpZiAoIXpvbmUtPnBhZ2VzZXRbY3B1XSkKKwkJCWdvdG8gYmFkOworCisJCXNldHVwX3BhZ2VzZXQoem9uZS0+cGFnZXNldFtjcHVdLCB6b25lX2JhdGNoc2l6ZSh6b25lKSk7CisJfQorCisJcmV0dXJuIDA7CitiYWQ6CisJZm9yX2VhY2hfem9uZShkem9uZSkgeworCQlpZiAoZHpvbmUgPT0gem9uZSkKKwkJCWJyZWFrOworCQlrZnJlZShkem9uZS0+cGFnZXNldFtjcHVdKTsKKwkJZHpvbmUtPnBhZ2VzZXRbY3B1XSA9IE5VTEw7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV96b25lX3BhZ2VzZXRzKGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX05VTUEKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKworCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwc2V0ID0gem9uZV9wY3Aoem9uZSwgY3B1KTsKKworCQl6b25lX3BjcCh6b25lLCBjcHUpID0gTlVMTDsKKwkJa2ZyZWUocHNldCk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhZ2VzZXRfY3B1dXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCisJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQl2b2lkICpoY3B1KQoreworCWludCBjcHUgPSAobG9uZyloY3B1OworCWludCByZXQgPSBOT1RJRllfT0s7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCQljYXNlIENQVV9VUF9QUkVQQVJFOgorCQkJaWYgKHByb2Nlc3Nfem9uZXMoY3B1KSkKKwkJCQlyZXQgPSBOT1RJRllfQkFEOworCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJCWNhc2UgQ1BVX0RFQUQ6CisJCQlmcmVlX3pvbmVfcGFnZXNldHMoY3B1KTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYWdlc2V0X25vdGlmaWVyID0KKwl7ICZwYWdlc2V0X2NwdXVwX2NhbGxiYWNrLCBOVUxMLCAwIH07CisKK3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfcGFnZXNldCgpCit7CisJaW50IGVycjsKKworCS8qIEluaXRpYWxpemUgcGVyX2NwdV9wYWdlc2V0IGZvciBjcHUgMC4KKwkgKiBBIGNwdXVwIGNhbGxiYWNrIHdpbGwgZG8gdGhpcyBmb3IgZXZlcnkgY3B1CisJICogYXMgaXQgY29tZXMgb25saW5lCisJICovCisJZXJyID0gcHJvY2Vzc196b25lcyhzbXBfcHJvY2Vzc29yX2lkKCkpOworCUJVR19PTihlcnIpOworCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmcGFnZXNldF9ub3RpZmllcik7Cit9CisKKyNlbmRpZgorCiAvKgogICogU2V0IHVwIHRoZSB6b25lIGRhdGEgc3RydWN0dXJlczoKICAqICAgLSBtYXJrIGFsbCBwYWdlcyByZXNlcnZlZApAQCAtMTY2Miw0OCArMTg3MywxNiBAQAogCiAJCXpvbmUtPnRlbXBfcHJpb3JpdHkgPSB6b25lLT5wcmV2X3ByaW9yaXR5ID0gREVGX1BSSU9SSVRZOwogCi0JCS8qCi0JCSAqIFRoZSBwZXItY3B1LXBhZ2VzIHBvb2xzIGFyZSBzZXQgdG8gYXJvdW5kIDEwMDB0aCBvZiB0aGUKLQkJICogc2l6ZSBvZiB0aGUgem9uZS4gIEJ1dCBubyBtb3JlIHRoYW4gMS80IG9mIGEgbWVnIC0gdGhlcmUncwotCQkgKiBubyBwb2ludCBpbiBnb2luZyBiZXlvbmQgdGhlIHNpemUgb2YgTDIgY2FjaGUuCi0JCSAqCi0JCSAqIE9LLCBzbyB3ZSBkb24ndCBrbm93IGhvdyBiaWcgdGhlIGNhY2hlIGlzLiAgU28gZ3Vlc3MuCi0JCSAqLwotCQliYXRjaCA9IHpvbmUtPnByZXNlbnRfcGFnZXMgLyAxMDI0OwotCQlpZiAoYmF0Y2ggKiBQQUdFX1NJWkUgPiAyNTYgKiAxMDI0KQotCQkJYmF0Y2ggPSAoMjU2ICogMTAyNCkgLyBQQUdFX1NJWkU7Ci0JCWJhdGNoIC89IDQ7CQkvKiBXZSBlZmZlY3RpdmVseSAqPSA0IGJlbG93ICovCi0JCWlmIChiYXRjaCA8IDEpCi0JCQliYXRjaCA9IDE7Ci0KLQkJLyoKLQkJICogQ2xhbXAgdGhlIGJhdGNoIHRvIGEgMl5uIC0gMSB2YWx1ZS4gSGF2aW5nIGEgcG93ZXIKLQkJICogb2YgMiB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgbW9yZSBsaWtlbHkgdG8gaGF2ZQotCQkgKiBzdWJvcHRpbWFsIGNhY2hlIGFsaWFzaW5nIHByb3BlcnRpZXMgaW4gc29tZSBjYXNlcy4KLQkJICoKLQkJICogRm9yIGV4YW1wbGUgaWYgMiB0YXNrcyBhcmUgYWx0ZXJuYXRlbHkgYWxsb2NhdGluZwotCQkgKiBiYXRjaGVzIG9mIHBhZ2VzLCBvbmUgdGFzayBjYW4gZW5kIHVwIHdpdGggYSBsb3QKLQkJICogb2YgcGFnZXMgb2Ygb25lIGhhbGYgb2YgdGhlIHBvc3NpYmxlIHBhZ2UgY29sb3JzCi0JCSAqIGFuZCB0aGUgb3RoZXIgd2l0aCBwYWdlcyBvZiB0aGUgb3RoZXIgY29sb3JzLgotCQkgKi8KLQkJYmF0Y2ggPSAoMSA8PCBmbHMoYmF0Y2ggKyBiYXRjaC8yKSkgLSAxOworCQliYXRjaCA9IHpvbmVfYmF0Y2hzaXplKHpvbmUpOwogCiAJCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKLQkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7Ci0KLQkJCXBjcCA9ICZ6b25lLT5wYWdlc2V0W2NwdV0ucGNwWzBdOwkvKiBob3QgKi8KLQkJCXBjcC0+Y291bnQgPSAwOwotCQkJcGNwLT5sb3cgPSAyICogYmF0Y2g7Ci0JCQlwY3AtPmhpZ2ggPSA2ICogYmF0Y2g7Ci0JCQlwY3AtPmJhdGNoID0gMSAqIGJhdGNoOwotCQkJSU5JVF9MSVNUX0hFQUQoJnBjcC0+bGlzdCk7Ci0KLQkJCXBjcCA9ICZ6b25lLT5wYWdlc2V0W2NwdV0ucGNwWzFdOwkvKiBjb2xkICovCi0JCQlwY3AtPmNvdW50ID0gMDsKLQkJCXBjcC0+bG93ID0gMDsKLQkJCXBjcC0+aGlnaCA9IDIgKiBiYXRjaDsKLQkJCXBjcC0+YmF0Y2ggPSAxICogYmF0Y2g7Ci0JCQlJTklUX0xJU1RfSEVBRCgmcGNwLT5saXN0KTsKKyNpZmRlZiBDT05GSUdfTlVNQQorCQkJLyogRWFybHkgYm9vdC4gU2xhYiBhbGxvY2F0b3Igbm90IGZ1bmN0aW9uYWwgeWV0ICovCisJCQl6b25lLT5wYWdlc2V0W2NwdV0gPSAmYm9vdF9wYWdlc2V0W2NwdV07CisJCQlzZXR1cF9wYWdlc2V0KCZib290X3BhZ2VzZXRbY3B1XSwwKTsKKyNlbHNlCisJCQlzZXR1cF9wYWdlc2V0KHpvbmVfcGNwKHpvbmUsY3B1KSwgYmF0Y2gpOworI2VuZGlmCiAJCX0KIAkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgem9uZTogJWx1IHBhZ2VzLCBMSUZPIGJhdGNoOiVsdVxuIiwKIAkJCQl6b25lX25hbWVzW2pdLCByZWFsc2l6ZSwgYmF0Y2gpOwpAQCAtMTcxMyw2ICsxODkyLDcgQEAKIAkJem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSA9IDA7CiAJCXpvbmUtPm5yX2FjdGl2ZSA9IDA7CiAJCXpvbmUtPm5yX2luYWN0aXZlID0gMDsKKwkJYXRvbWljX3NldCgmem9uZS0+cmVjbGFpbV9pbl9wcm9ncmVzcywgLTEpOwogCQlpZiAoIXNpemUpCiAJCQljb250aW51ZTsKIApAQCAtMTg1Myw2ICsyMDMzLDExNSBAQAogCS5zaG93CT0gZnJhZ19zaG93LAogfTsKIAorLyoKKyAqIE91dHB1dCBpbmZvcm1hdGlvbiBhYm91dCB6b25lcyBpbiBAcGdkYXQuCisgKi8KK3N0YXRpYyBpbnQgem9uZWluZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZykKK3sKKwlwZ19kYXRhX3QgKnBnZGF0ID0gYXJnOworCXN0cnVjdCB6b25lICp6b25lOworCXN0cnVjdCB6b25lICpub2RlX3pvbmVzID0gcGdkYXQtPm5vZGVfem9uZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWZvciAoem9uZSA9IG5vZGVfem9uZXM7IHpvbmUgLSBub2RlX3pvbmVzIDwgTUFYX05SX1pPTkVTOyB6b25lKyspIHsKKwkJaW50IGk7CisKKwkJaWYgKCF6b25lLT5wcmVzZW50X3BhZ2VzKQorCQkJY29udGludWU7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKKwkJc2VxX3ByaW50ZihtLCAiTm9kZSAlZCwgem9uZSAlOHMiLCBwZ2RhdC0+bm9kZV9pZCwgem9uZS0+bmFtZSk7CisJCXNlcV9wcmludGYobSwKKwkJCSAgICJcbiAgcGFnZXMgZnJlZSAgICAgJWx1IgorCQkJICAgIlxuICAgICAgICBtaW4gICAgICAlbHUiCisJCQkgICAiXG4gICAgICAgIGxvdyAgICAgICVsdSIKKwkJCSAgICJcbiAgICAgICAgaGlnaCAgICAgJWx1IgorCQkJICAgIlxuICAgICAgICBhY3RpdmUgICAlbHUiCisJCQkgICAiXG4gICAgICAgIGluYWN0aXZlICVsdSIKKwkJCSAgICJcbiAgICAgICAgc2Nhbm5lZCAgJWx1IChhOiAlbHUgaTogJWx1KSIKKwkJCSAgICJcbiAgICAgICAgc3Bhbm5lZCAgJWx1IgorCQkJICAgIlxuICAgICAgICBwcmVzZW50ICAlbHUiLAorCQkJICAgem9uZS0+ZnJlZV9wYWdlcywKKwkJCSAgIHpvbmUtPnBhZ2VzX21pbiwKKwkJCSAgIHpvbmUtPnBhZ2VzX2xvdywKKwkJCSAgIHpvbmUtPnBhZ2VzX2hpZ2gsCisJCQkgICB6b25lLT5ucl9hY3RpdmUsCisJCQkgICB6b25lLT5ucl9pbmFjdGl2ZSwKKwkJCSAgIHpvbmUtPnBhZ2VzX3NjYW5uZWQsCisJCQkgICB6b25lLT5ucl9zY2FuX2FjdGl2ZSwgem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSwKKwkJCSAgIHpvbmUtPnNwYW5uZWRfcGFnZXMsCisJCQkgICB6b25lLT5wcmVzZW50X3BhZ2VzKTsKKwkJc2VxX3ByaW50ZihtLAorCQkJICAgIlxuICAgICAgICBwcm90ZWN0aW9uOiAoJWx1IiwKKwkJCSAgIHpvbmUtPmxvd21lbV9yZXNlcnZlWzBdKTsKKwkJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUoem9uZS0+bG93bWVtX3Jlc2VydmUpOyBpKyspCisJCQlzZXFfcHJpbnRmKG0sICIsICVsdSIsIHpvbmUtPmxvd21lbV9yZXNlcnZlW2ldKTsKKwkJc2VxX3ByaW50ZihtLAorCQkJICAgIikiCisJCQkgICAiXG4gIHBhZ2VzZXRzIik7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHpvbmUtPnBhZ2VzZXQpOyBpKyspIHsKKwkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBhZ2VzZXQ7CisJCQlpbnQgajsKKworCQkJcGFnZXNldCA9IHpvbmVfcGNwKHpvbmUsIGkpOworCQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocGFnZXNldC0+cGNwKTsgaisrKSB7CisJCQkJaWYgKHBhZ2VzZXQtPnBjcFtqXS5jb3VudCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaiA9PSBBUlJBWV9TSVpFKHBhZ2VzZXQtPnBjcCkpCisJCQkJY29udGludWU7CisJCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwYWdlc2V0LT5wY3ApOyBqKyspIHsKKwkJCQlzZXFfcHJpbnRmKG0sCisJCQkJCSAgICJcbiAgICBjcHU6ICVpIHBjcDogJWkiCisJCQkJCSAgICJcbiAgICAgICAgICAgICAgY291bnQ6ICVpIgorCQkJCQkgICAiXG4gICAgICAgICAgICAgIGxvdzogICAlaSIKKwkJCQkJICAgIlxuICAgICAgICAgICAgICBoaWdoOiAgJWkiCisJCQkJCSAgICJcbiAgICAgICAgICAgICAgYmF0Y2g6ICVpIiwKKwkJCQkJICAgaSwgaiwKKwkJCQkJICAgcGFnZXNldC0+cGNwW2pdLmNvdW50LAorCQkJCQkgICBwYWdlc2V0LT5wY3Bbal0ubG93LAorCQkJCQkgICBwYWdlc2V0LT5wY3Bbal0uaGlnaCwKKwkJCQkJICAgcGFnZXNldC0+cGNwW2pdLmJhdGNoKTsKKwkJCX0KKyNpZmRlZiBDT05GSUdfTlVNQQorCQkJc2VxX3ByaW50ZihtLAorCQkJCSAgICJcbiAgICAgICAgICAgIG51bWFfaGl0OiAgICAgICAlbHUiCisJCQkJICAgIlxuICAgICAgICAgICAgbnVtYV9taXNzOiAgICAgICVsdSIKKwkJCQkgICAiXG4gICAgICAgICAgICBudW1hX2ZvcmVpZ246ICAgJWx1IgorCQkJCSAgICJcbiAgICAgICAgICAgIGludGVybGVhdmVfaGl0OiAlbHUiCisJCQkJICAgIlxuICAgICAgICAgICAgbG9jYWxfbm9kZTogICAgICVsdSIKKwkJCQkgICAiXG4gICAgICAgICAgICBvdGhlcl9ub2RlOiAgICAgJWx1IiwKKwkJCQkgICBwYWdlc2V0LT5udW1hX2hpdCwKKwkJCQkgICBwYWdlc2V0LT5udW1hX21pc3MsCisJCQkJICAgcGFnZXNldC0+bnVtYV9mb3JlaWduLAorCQkJCSAgIHBhZ2VzZXQtPmludGVybGVhdmVfaGl0LAorCQkJCSAgIHBhZ2VzZXQtPmxvY2FsX25vZGUsCisJCQkJICAgcGFnZXNldC0+b3RoZXJfbm9kZSk7CisjZW5kaWYKKwkJfQorCQlzZXFfcHJpbnRmKG0sCisJCQkgICAiXG4gIGFsbF91bnJlY2xhaW1hYmxlOiAldSIKKwkJCSAgICJcbiAgcHJldl9wcmlvcml0eTogICAgICVpIgorCQkJICAgIlxuICB0ZW1wX3ByaW9yaXR5OiAgICAgJWkiCisJCQkgICAiXG4gIHN0YXJ0X3BmbjogICAgICAgICAlbHUiLAorCQkJICAgem9uZS0+YWxsX3VucmVjbGFpbWFibGUsCisJCQkgICB6b25lLT5wcmV2X3ByaW9yaXR5LAorCQkJICAgem9uZS0+dGVtcF9wcmlvcml0eSwKKwkJCSAgIHpvbmUtPnpvbmVfc3RhcnRfcGZuKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bG9jaywgZmxhZ3MpOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzZXFfb3BlcmF0aW9ucyB6b25laW5mb19vcCA9IHsKKwkuc3RhcnQJPSBmcmFnX3N0YXJ0LCAvKiBpdGVyYXRlIG92ZXIgYWxsIHpvbmVzLiBUaGUgc2FtZSBhcyBpbgorCQkJICAgICAgICogZnJhZ21lbnRhdGlvbi4gKi8KKwkubmV4dAk9IGZyYWdfbmV4dCwKKwkuc3RvcAk9IGZyYWdfc3RvcCwKKwkuc2hvdwk9IHpvbmVpbmZvX3Nob3csCit9OworCiBzdGF0aWMgY2hhciAqdm1zdGF0X3RleHRbXSA9IHsKIAkibnJfZGlydHkiLAogCSJucl93cml0ZWJhY2siLApAQCAtMjA1OCwxMCArMjM0NywxMCBAQAogCQkJCW1pbl9wYWdlcyA9IDEyODsKIAkJCXpvbmUtPnBhZ2VzX21pbiA9IG1pbl9wYWdlczsKIAkJfSBlbHNlIHsKLQkJCS8qIGlmIGl0J3MgYSBsb3dtZW0gem9uZSwgcmVzZXJ2ZSBhIG51bWJlciBvZiBwYWdlcyAKKwkJCS8qIGlmIGl0J3MgYSBsb3dtZW0gem9uZSwgcmVzZXJ2ZSBhIG51bWJlciBvZiBwYWdlcwogCQkJICogcHJvcG9ydGlvbmF0ZSB0byB0aGUgem9uZSdzIHNpemUuCiAJCQkgKi8KLQkJCXpvbmUtPnBhZ2VzX21pbiA9IChwYWdlc19taW4gKiB6b25lLT5wcmVzZW50X3BhZ2VzKSAvIAorCQkJem9uZS0+cGFnZXNfbWluID0gKHBhZ2VzX21pbiAqIHpvbmUtPnByZXNlbnRfcGFnZXMpIC8KIAkJCSAgICAgICAgICAgICAgICAgICBsb3dtZW1fcGFnZXM7CiAJCX0KIApkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDk4Mjc0MDkuLjg5NzcwYmQgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTUzOSwyNyArNTM5LDYgQEAKIAkJZ290byBvdXRfdW5tYXA7CiAJfQogCi0JLyoKLQkgKiBEb24ndCBwdWxsIGFuIGFub255bW91cyBwYWdlIG91dCBmcm9tIHVuZGVyIGdldF91c2VyX3BhZ2VzLgotCSAqIEdVUCBjYXJlZnVsbHkgYnJlYWtzIENPVyBhbmQgcmFpc2VzIHBhZ2UgY291bnQgKHdoaWxlIGhvbGRpbmcKLQkgKiBwYWdlX3RhYmxlX2xvY2ssIGFzIHdlIGhhdmUgaGVyZSkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBhZ2UKLQkgKiBjYW5ub3QgYmUgZnJlZWQuICBJZiB3ZSB1bm1hcCB0aGF0IHBhZ2UgaGVyZSwgYSB1c2VyIHdyaXRlCi0JICogYWNjZXNzIHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgd2lsbCBicmluZyBiYWNrIHRoZSBwYWdlLCBidXQKLQkgKiBpdHMgcmFpc2VkIGNvdW50IHdpbGwgKGlyb25pY2FsbHkpIGJlIHRha2VuIHRvIG1lYW4gaXQncyBub3QKLQkgKiBhbiBleGNsdXNpdmUgc3dhcCBwYWdlLCBkb193cF9wYWdlIHdpbGwgcmVwbGFjZSBpdCBieSBhIGNvcHkKLQkgKiBwYWdlLCBhbmQgdGhlIHVzZXIgbmV2ZXIgZ2V0IHRvIHNlZSB0aGUgZGF0YSBHVVAgd2FzIGhvbGRpbmcKLQkgKiB0aGUgb3JpZ2luYWwgcGFnZSBmb3IuCi0JICoKLQkgKiBUaGlzIHRlc3QgaXMgYWxzbyB1c2VmdWwgZm9yIHdoZW4gc3dhcG9mZiAodW51c2VfcHJvY2VzcykgaGFzCi0JICogdG8gZHJvcCBwYWdlIGxvY2s6IGl0cyByZWZlcmVuY2UgdG8gdGhlIHBhZ2Ugc3RvcHMgZXhpc3RpbmcKLQkgKiBwdGVzIGZyb20gYmVpbmcgdW5tYXBwZWQsIHNvIHN3YXBvZmYgY2FuIG1ha2UgcHJvZ3Jlc3MuCi0JICovCi0JaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkgJiYKLQkgICAgcGFnZV9jb3VudChwYWdlKSAhPSBwYWdlX21hcGNvdW50KHBhZ2UpICsgMikgewotCQlyZXQgPSBTV0FQX0ZBSUw7Ci0JCWdvdG8gb3V0X3VubWFwOwotCX0KLQogCS8qIE51a2UgdGhlIHBhZ2UgdGFibGUgZW50cnkuICovCiAJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKIAlwdGV2YWwgPSBwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHRlKTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDYxNTc0YjguLmU2NGZhNzIgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtNiw4ICs2LDggQEAKICAqCQkgMjAwMC0yMDAxIENocmlzdG9waCBSb2hsYW5kCiAgKgkJIDIwMDAtMjAwMSBTQVAgQUcKICAqCQkgMjAwMiBSZWQgSGF0IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0IEh1Z2ggRGlja2lucy4KLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0IFZFUklUQVMgU29mdHdhcmUgQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBIdWdoIERpY2tpbnMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBWRVJJVEFTIFNvZnR3YXJlIENvcnBvcmF0aW9uLgogICogQ29weXJpZ2h0IChDKSAyMDA0IEFuZGkgS2xlZW4sIFN1U0UgTGFicwogICoKICAqIEV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IGZvciB0bXBmczoKQEAgLTE5NCw3ICsxOTQsNyBAQAogc3RhdGljIHZvaWQgc2htZW1fZnJlZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBwYWdlcykKIHsKIAlzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtPmlfc2IpOwotCWlmIChzYmluZm8pIHsKKwlpZiAoc2JpbmZvLT5tYXhfYmxvY2tzKSB7CiAJCXNwaW5fbG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOwogCQlzYmluZm8tPmZyZWVfYmxvY2tzICs9IHBhZ2VzOwogCQlpbm9kZS0+aV9ibG9ja3MgLT0gcGFnZXMqQkxPQ0tTX1BFUl9QQUdFOwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAJCSAqIHBhZ2UgKGFuZCBwZXJoYXBzIGluZGlyZWN0IGluZGV4IHBhZ2VzKSB5ZXQgdG8gYWxsb2NhdGU6CiAJCSAqIGEgd2FzdGUgdG8gYWxsb2NhdGUgaW5kZXggaWYgd2UgY2Fubm90IGFsbG9jYXRlIGRhdGEuCiAJCSAqLwotCQlpZiAoc2JpbmZvKSB7CisJCWlmIChzYmluZm8tPm1heF9ibG9ja3MpIHsKIAkJCXNwaW5fbG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOwogCQkJaWYgKHNiaW5mby0+ZnJlZV9ibG9ja3MgPD0gMSkgewogCQkJCXNwaW5fdW5sb2NrKCZzYmluZm8tPnN0YXRfbG9jayk7CkBAIC02NzcsOCArNjc3LDggQEAKIAkJCXNwaW5fdW5sb2NrKCZzaG1lbV9zd2FwbGlzdF9sb2NrKTsKIAkJfQogCX0KLQlpZiAoc2JpbmZvKSB7Ci0JCUJVR19PTihpbm9kZS0+aV9ibG9ja3MpOworCUJVR19PTihpbm9kZS0+aV9ibG9ja3MpOworCWlmIChzYmluZm8tPm1heF9pbm9kZXMpIHsKIAkJc3Bpbl9sb2NrKCZzYmluZm8tPnN0YXRfbG9jayk7CiAJCXNiaW5mby0+ZnJlZV9pbm9kZXMrKzsKIAkJc3Bpbl91bmxvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKQEAgLTEwODAsNyArMTA4MCw3IEBACiAJfSBlbHNlIHsKIAkJc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKIAkJc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtPmlfc2IpOwotCQlpZiAoc2JpbmZvKSB7CisJCWlmIChzYmluZm8tPm1heF9ibG9ja3MpIHsKIAkJCXNwaW5fbG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOwogCQkJaWYgKHNiaW5mby0+ZnJlZV9ibG9ja3MgPT0gMCB8fAogCQkJICAgIHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKSB7CkBAIC0xMjY5LDcgKzEyNjksNyBAQAogCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvOwogCXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7CiAKLQlpZiAoc2JpbmZvKSB7CisJaWYgKHNiaW5mby0+bWF4X2lub2RlcykgewogCQlzcGluX2xvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKIAkJaWYgKCFzYmluZm8tPmZyZWVfaW5vZGVzKSB7CiAJCQlzcGluX3VubG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOwpAQCAtMTMxOSw3ICsxMzE5LDcgQEAKIAkJCW1wb2xfc2hhcmVkX3BvbGljeV9pbml0KCZpbmZvLT5wb2xpY3kpOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKHNiaW5mbykgeworCX0gZWxzZSBpZiAoc2JpbmZvLT5tYXhfaW5vZGVzKSB7CiAJCXNwaW5fbG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOwogCQlzYmluZm8tPmZyZWVfaW5vZGVzKys7CiAJCXNwaW5fdW5sb2NrKCZzYmluZm8tPnN0YXRfbG9jayk7CkBAIC0xMzI4LDMxICsxMzI4LDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19UTVBGUwotCi1zdGF0aWMgaW50IHNobWVtX3NldF9zaXplKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sCi0JCQkgIHVuc2lnbmVkIGxvbmcgbWF4X2Jsb2NrcywgdW5zaWduZWQgbG9uZyBtYXhfaW5vZGVzKQotewotCWludCBlcnJvcjsKLQl1bnNpZ25lZCBsb25nIGJsb2NrcywgaW5vZGVzOwotCi0Jc3Bpbl9sb2NrKCZzYmluZm8tPnN0YXRfbG9jayk7Ci0JYmxvY2tzID0gc2JpbmZvLT5tYXhfYmxvY2tzIC0gc2JpbmZvLT5mcmVlX2Jsb2NrczsKLQlpbm9kZXMgPSBzYmluZm8tPm1heF9pbm9kZXMgLSBzYmluZm8tPmZyZWVfaW5vZGVzOwotCWVycm9yID0gLUVJTlZBTDsKLQlpZiAobWF4X2Jsb2NrcyA8IGJsb2NrcykKLQkJZ290byBvdXQ7Ci0JaWYgKG1heF9pbm9kZXMgPCBpbm9kZXMpCi0JCWdvdG8gb3V0OwotCWVycm9yID0gMDsKLQlzYmluZm8tPm1heF9ibG9ja3MgID0gbWF4X2Jsb2NrczsKLQlzYmluZm8tPmZyZWVfYmxvY2tzID0gbWF4X2Jsb2NrcyAtIGJsb2NrczsKLQlzYmluZm8tPm1heF9pbm9kZXMgID0gbWF4X2lub2RlczsKLQlzYmluZm8tPmZyZWVfaW5vZGVzID0gbWF4X2lub2RlcyAtIGlub2RlczsKLW91dDoKLQlzcGluX3VubG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOwotCXJldHVybiBlcnJvcjsKLX0KLQogc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zeW1saW5rX2lubGluZV9vcGVyYXRpb25zOwogCkBAIC0xNjA3LDE1ICsxNTgyLDE3IEBACiAJYnVmLT5mX3R5cGUgPSBUTVBGU19NQUdJQzsKIAlidWYtPmZfYnNpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJYnVmLT5mX25hbWVsZW4gPSBOQU1FX01BWDsKLQlpZiAoc2JpbmZvKSB7Ci0JCXNwaW5fbG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOworCXNwaW5fbG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOworCWlmIChzYmluZm8tPm1heF9ibG9ja3MpIHsKIAkJYnVmLT5mX2Jsb2NrcyA9IHNiaW5mby0+bWF4X2Jsb2NrczsKIAkJYnVmLT5mX2JhdmFpbCA9IGJ1Zi0+Zl9iZnJlZSA9IHNiaW5mby0+ZnJlZV9ibG9ja3M7CisJfQorCWlmIChzYmluZm8tPm1heF9pbm9kZXMpIHsKIAkJYnVmLT5mX2ZpbGVzID0gc2JpbmZvLT5tYXhfaW5vZGVzOwogCQlidWYtPmZfZmZyZWUgPSBzYmluZm8tPmZyZWVfaW5vZGVzOwotCQlzcGluX3VubG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOwogCX0KIAkvKiBlbHNlIGxlYXZlIHRob3NlIGZpZWxkcyAwIGxpa2Ugc2ltcGxlX3N0YXRmcyAqLworCXNwaW5fdW5sb2NrKCZzYmluZm8tPnN0YXRfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NzIsNyArMTY0OSw3IEBACiAJICogYnV0IGVhY2ggbmV3IGxpbmsgbmVlZHMgYSBuZXcgZGVudHJ5LCBwaW5uaW5nIGxvd21lbSwgYW5kCiAJICogdG1wZnMgZGVudHJpZXMgY2Fubm90IGJlIHBydW5lZCB1bnRpbCB0aGV5IGFyZSB1bmxpbmtlZC4KIAkgKi8KLQlpZiAoc2JpbmZvKSB7CisJaWYgKHNiaW5mby0+bWF4X2lub2RlcykgewogCQlzcGluX2xvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKIAkJaWYgKCFzYmluZm8tPmZyZWVfaW5vZGVzKSB7CiAJCQlzcGluX3VubG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOwpAQCAtMTY5Nyw3ICsxNjc0LDcgQEAKIAogCWlmIChpbm9kZS0+aV9ubGluayA+IDEgJiYgIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLT5pX3NiKTsKLQkJaWYgKHNiaW5mbykgeworCQlpZiAoc2JpbmZvLT5tYXhfaW5vZGVzKSB7CiAJCQlzcGluX2xvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKIAkJCXNiaW5mby0+ZnJlZV9pbm9kZXMrKzsKIAkJCXNwaW5fdW5sb2NrKCZzYmluZm8tPnN0YXRfbG9jayk7CkBAIC0xOTIxLDIyICsxODk4LDQyIEBACiBzdGF0aWMgaW50IHNobWVtX3JlbW91bnRfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpOwotCXVuc2lnbmVkIGxvbmcgbWF4X2Jsb2NrcyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBtYXhfaW5vZGVzID0gMDsKKwl1bnNpZ25lZCBsb25nIG1heF9ibG9ja3MgPSBzYmluZm8tPm1heF9ibG9ja3M7CisJdW5zaWduZWQgbG9uZyBtYXhfaW5vZGVzID0gc2JpbmZvLT5tYXhfaW5vZGVzOworCXVuc2lnbmVkIGxvbmcgYmxvY2tzOworCXVuc2lnbmVkIGxvbmcgaW5vZGVzOworCWludCBlcnJvciA9IC1FSU5WQUw7CiAKLQlpZiAoc2JpbmZvKSB7Ci0JCW1heF9ibG9ja3MgPSBzYmluZm8tPm1heF9ibG9ja3M7Ci0JCW1heF9pbm9kZXMgPSBzYmluZm8tPm1heF9pbm9kZXM7Ci0JfQotCWlmIChzaG1lbV9wYXJzZV9vcHRpb25zKGRhdGEsIE5VTEwsIE5VTEwsIE5VTEwsICZtYXhfYmxvY2tzLCAmbWF4X2lub2RlcykpCi0JCXJldHVybiAtRUlOVkFMOwotCS8qIEtlZXAgaXQgc2ltcGxlOiBkaXNhbGxvdyBsaW1pdGVkIDwtPiB1bmxpbWl0ZWQgcmVtb3VudCAqLwotCWlmICgobWF4X2Jsb2NrcyB8fCBtYXhfaW5vZGVzKSA9PSAhc2JpbmZvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkvKiBCdXQgYWxsb3cgdGhlIHBvaW50bGVzcyB1bmxpbWl0ZWQgLT4gdW5saW1pdGVkIHJlbW91bnQgKi8KLQlpZiAoIXNiaW5mbykKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNobWVtX3NldF9zaXplKHNiaW5mbywgbWF4X2Jsb2NrcywgbWF4X2lub2Rlcyk7CisJaWYgKHNobWVtX3BhcnNlX29wdGlvbnMoZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkmbWF4X2Jsb2NrcywgJm1heF9pbm9kZXMpKQorCQlyZXR1cm4gZXJyb3I7CisKKwlzcGluX2xvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKKwlibG9ja3MgPSBzYmluZm8tPm1heF9ibG9ja3MgLSBzYmluZm8tPmZyZWVfYmxvY2tzOworCWlub2RlcyA9IHNiaW5mby0+bWF4X2lub2RlcyAtIHNiaW5mby0+ZnJlZV9pbm9kZXM7CisJaWYgKG1heF9ibG9ja3MgPCBibG9ja3MpCisJCWdvdG8gb3V0OworCWlmIChtYXhfaW5vZGVzIDwgaW5vZGVzKQorCQlnb3RvIG91dDsKKwkvKgorCSAqIFRob3NlIHRlc3RzIGFsc28gZGlzYWxsb3cgbGltaXRlZC0+dW5saW1pdGVkIHdoaWxlIGFueSBhcmUgaW4KKwkgKiB1c2UsIHNvIGlfYmxvY2tzIHdpbGwgYWx3YXlzIGJlIHplcm8gd2hlbiBtYXhfYmxvY2tzIGlzIHplcm87CisJICogYnV0IHdlIG11c3Qgc2VwYXJhdGVseSBkaXNhbGxvdyB1bmxpbWl0ZWQtPmxpbWl0ZWQsIGJlY2F1c2UKKwkgKiBpbiB0aGF0IGNhc2Ugd2UgaGF2ZSBubyByZWNvcmQgb2YgaG93IG11Y2ggaXMgYWxyZWFkeSBpbiB1c2UuCisJICovCisJaWYgKG1heF9ibG9ja3MgJiYgIXNiaW5mby0+bWF4X2Jsb2NrcykKKwkJZ290byBvdXQ7CisJaWYgKG1heF9pbm9kZXMgJiYgIXNiaW5mby0+bWF4X2lub2RlcykKKwkJZ290byBvdXQ7CisKKwllcnJvciA9IDA7CisJc2JpbmZvLT5tYXhfYmxvY2tzICA9IG1heF9ibG9ja3M7CisJc2JpbmZvLT5mcmVlX2Jsb2NrcyA9IG1heF9ibG9ja3MgLSBibG9ja3M7CisJc2JpbmZvLT5tYXhfaW5vZGVzICA9IG1heF9pbm9kZXM7CisJc2JpbmZvLT5mcmVlX2lub2RlcyA9IG1heF9pbm9kZXMgLSBpbm9kZXM7CitvdXQ6CisJc3Bpbl91bmxvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAjZW5kaWYKIApAQCAtMTk2MSwxMSArMTk1OCwxMSBAQAogCXVpZF90IHVpZCA9IGN1cnJlbnQtPmZzdWlkOwogCWdpZF90IGdpZCA9IGN1cnJlbnQtPmZzZ2lkOwogCWludCBlcnIgPSAtRU5PTUVNOwotCi0jaWZkZWYgQ09ORklHX1RNUEZTCisJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbzsKIAl1bnNpZ25lZCBsb25nIGJsb2NrcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBpbm9kZXMgPSAwOwogCisjaWZkZWYgQ09ORklHX1RNUEZTCiAJLyoKIAkgKiBQZXIgZGVmYXVsdCB3ZSBvbmx5IGFsbG93IGhhbGYgb2YgdGhlIHBoeXNpY2FsIHJhbSBwZXIKIAkgKiB0bXBmcyBpbnN0YW5jZSwgbGltaXRpbmcgaW5vZGVzIHRvIG9uZSBwZXIgcGFnZSBvZiBsb3dtZW07CkBAIC0xOTc2LDM0ICsxOTczLDM0IEBACiAJCWlub2RlcyA9IHRvdGFscmFtX3BhZ2VzIC0gdG90YWxoaWdoX3BhZ2VzOwogCQlpZiAoaW5vZGVzID4gYmxvY2tzKQogCQkJaW5vZGVzID0gYmxvY2tzOwotCi0JCWlmIChzaG1lbV9wYXJzZV9vcHRpb25zKGRhdGEsICZtb2RlLAotCQkJCQkmdWlkLCAmZ2lkLCAmYmxvY2tzLCAmaW5vZGVzKSkKKwkJaWYgKHNobWVtX3BhcnNlX29wdGlvbnMoZGF0YSwgJm1vZGUsICZ1aWQsICZnaWQsCisJCQkJCSZibG9ja3MsICZpbm9kZXMpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JaWYgKGJsb2NrcyB8fCBpbm9kZXMpIHsKLQkJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbzsKLQkJc2JpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNobWVtX3NiX2luZm8pLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzYmluZm8pCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJc2ItPnNfZnNfaW5mbyA9IHNiaW5mbzsKLQkJc3Bpbl9sb2NrX2luaXQoJnNiaW5mby0+c3RhdF9sb2NrKTsKLQkJc2JpbmZvLT5tYXhfYmxvY2tzID0gYmxvY2tzOwotCQlzYmluZm8tPmZyZWVfYmxvY2tzID0gYmxvY2tzOwotCQlzYmluZm8tPm1heF9pbm9kZXMgPSBpbm9kZXM7Ci0JCXNiaW5mby0+ZnJlZV9pbm9kZXMgPSBpbm9kZXM7Ci0JfQotCXNiLT5zX3hhdHRyID0gc2htZW1feGF0dHJfaGFuZGxlcnM7CiAjZWxzZQogCXNiLT5zX2ZsYWdzIHw9IE1TX05PVVNFUjsKICNlbmRpZgogCisJLyogUm91bmQgdXAgdG8gTDFfQ0FDSEVfQllURVMgdG8gcmVzaXN0IGZhbHNlIHNoYXJpbmcgKi8KKwlzYmluZm8gPSBrbWFsbG9jKG1heCgoaW50KXNpemVvZihzdHJ1Y3Qgc2htZW1fc2JfaW5mbyksCisJCQkJTDFfQ0FDSEVfQllURVMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNiaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmc2JpbmZvLT5zdGF0X2xvY2spOworCXNiaW5mby0+bWF4X2Jsb2NrcyA9IGJsb2NrczsKKwlzYmluZm8tPmZyZWVfYmxvY2tzID0gYmxvY2tzOworCXNiaW5mby0+bWF4X2lub2RlcyA9IGlub2RlczsKKwlzYmluZm8tPmZyZWVfaW5vZGVzID0gaW5vZGVzOworCisJc2ItPnNfZnNfaW5mbyA9IHNiaW5mbzsKIAlzYi0+c19tYXhieXRlcyA9IFNITUVNX01BWF9CWVRFUzsKIAlzYi0+c19ibG9ja3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBQQUdFX0NBQ0hFX1NISUZUOwogCXNiLT5zX21hZ2ljID0gVE1QRlNfTUFHSUM7CiAJc2ItPnNfb3AgPSAmc2htZW1fb3BzOworCXNiLT5zX3hhdHRyID0gc2htZW1feGF0dHJfaGFuZGxlcnM7CisKIAlpbm9kZSA9IHNobWVtX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IG1vZGUsIDApOwogCWlmICghaW5vZGUpCiAJCWdvdG8gZmFpbGVkOwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IGM3OGQzNDMuLjkzY2JiYmIgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTI4NTEsNiArMjg1MSw3IEBACiAJfQogCWNoZWNrX2lycV9vbigpOwogCXVwKCZjYWNoZV9jaGFpbl9zZW0pOworCWRyYWluX3JlbW90ZV9wYWdlcygpOwogCS8qIFNldHVwIHRoZSBuZXh0IGl0ZXJhdGlvbiAqLwogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmX19nZXRfY3B1X3ZhcihyZWFwX3dvcmspLCBSRUFQVElNRU9VVF9DUFVDICsgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGRhNDg0MDUuLjYwY2QyNGEgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtMjc2LDYxICsyNzYsMzcgQEAKIH0KIAogLyoKLSAqIENoZWNrIGlmIHdlJ3JlIHRoZSBvbmx5IHVzZXIgb2YgYSBzd2FwIHBhZ2UsCi0gKiB3aGVuIHRoZSBwYWdlIGlzIGxvY2tlZC4KKyAqIEhvdyBtYW55IHJlZmVyZW5jZXMgdG8gcGFnZSBhcmUgY3VycmVudGx5IHN3YXBwZWQgb3V0PwogICovCi1zdGF0aWMgaW50IGV4Y2x1c2l2ZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgaW5saW5lIGludCBwYWdlX3N3YXBjb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqIHA7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqcDsKIAlzd3BfZW50cnlfdCBlbnRyeTsKIAogCWVudHJ5LnZhbCA9IHBhZ2UtPnByaXZhdGU7CiAJcCA9IHN3YXBfaW5mb19nZXQoZW50cnkpOwogCWlmIChwKSB7Ci0JCS8qIElzIHRoZSBvbmx5IHN3YXAgY2FjaGUgdXNlciB0aGUgY2FjaGUgaXRzZWxmPyAqLwotCQlpZiAocC0+c3dhcF9tYXBbc3dwX29mZnNldChlbnRyeSldID09IDEpIHsKLQkJCS8qIFJlY2hlY2sgdGhlIHBhZ2UgY291bnQgd2l0aCB0aGUgc3dhcGNhY2hlIGxvY2sgaGVsZC4uICovCi0JCQl3cml0ZV9sb2NrX2lycSgmc3dhcHBlcl9zcGFjZS50cmVlX2xvY2spOwotCQkJaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMikKLQkJCQlyZXR2YWwgPSAxOwotCQkJd3JpdGVfdW5sb2NrX2lycSgmc3dhcHBlcl9zcGFjZS50cmVlX2xvY2spOwotCQl9CisJCS8qIFN1YnRyYWN0IHRoZSAxIGZvciB0aGUgc3dhcCBjYWNoZSBpdHNlbGYgKi8KKwkJY291bnQgPSBwLT5zd2FwX21hcFtzd3Bfb2Zmc2V0KGVudHJ5KV0gLSAxOwogCQlzd2FwX2luZm9fcHV0KHApOwogCX0KLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBjb3VudDsKIH0KIAogLyoKICAqIFdlIGNhbiB1c2UgdGhpcyBzd2FwIGNhY2hlIGVudHJ5IGRpcmVjdGx5CiAgKiBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBpdC4KLSAqCi0gKiBIZXJlICJleGNsdXNpdmVfc3dhcF9wYWdlKCkiIGRvZXMgdGhlIHJlYWwKLSAqIHdvcmssIGJ1dCB3ZSBvcHBvcnR1bmlzdGljYWxseSBjaGVjayB3aGV0aGVyCi0gKiB3ZSBuZWVkIHRvIGdldCBhbGwgdGhlIGxvY2tzIGZpcnN0Li4KICAqLwogaW50IGNhbl9zaGFyZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JaW50IHJldHZhbCA9IDA7CisJaW50IGNvdW50OwogCi0JaWYgKCFQYWdlTG9ja2VkKHBhZ2UpKQotCQlCVUcoKTsKLQlzd2l0Y2ggKHBhZ2VfY291bnQocGFnZSkpIHsKLQljYXNlIDM6Ci0JCWlmICghUGFnZVByaXZhdGUocGFnZSkpCi0JCQlicmVhazsKLQkJLyogRmFsbHRocm91Z2ggKi8KLQljYXNlIDI6Ci0JCWlmICghUGFnZVN3YXBDYWNoZShwYWdlKSkKLQkJCWJyZWFrOwotCQlyZXR2YWwgPSBleGNsdXNpdmVfc3dhcF9wYWdlKHBhZ2UpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCi0JCQlicmVhazsKLQkJcmV0dmFsID0gMTsKLQl9Ci0JcmV0dXJuIHJldHZhbDsKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCWNvdW50ID0gcGFnZV9tYXBjb3VudChwYWdlKTsKKwlpZiAoY291bnQgPD0gMSAmJiBQYWdlU3dhcENhY2hlKHBhZ2UpKQorCQljb3VudCArPSBwYWdlX3N3YXBjb3VudChwYWdlKTsKKwlyZXR1cm4gY291bnQgPT0gMTsKIH0KIAogLyoKQEAgLTUyOSw5ICs1MDUsMTAgQEAKIAogCWlmICghZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpIHsKIAkJLyoKLQkJICogT3VyIHJlZmVyZW5jZSB0byB0aGUgcGFnZSBzdG9wcyB0cnlfdG9fdW5tYXBfb25lIGZyb20KLQkJICogdW5tYXBwaW5nIGl0cyBwdGVzLCBzbyBzd2Fwb2ZmIGNhbiBtYWtlIHByb2dyZXNzLgorCQkgKiBBY3RpdmF0ZSBwYWdlIHNvIHNocmlua19jYWNoZSBpcyB1bmxpa2VseSB0byB1bm1hcCBpdHMKKwkJICogcHRlcyB3aGlsZSBsb2NrIGlzIGRyb3BwZWQsIHNvIHN3YXBvZmYgY2FuIG1ha2UgcHJvZ3Jlc3MuCiAJCSAqLworCQlhY3RpdmF0ZV9wYWdlKHBhZ2UpOwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQlsb2NrX3BhZ2UocGFnZSk7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDI2OWVkZWQuLjRiOGU2MmEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC03NCw2ICs3NCw5IEBACiAKIAlpbnQgbWF5X3dyaXRlcGFnZTsKIAorCS8qIENhbiBwYWdlcyBiZSBzd2FwcGVkIGFzIHBhcnQgb2YgcmVjbGFpbT8gKi8KKwlpbnQgbWF5X3N3YXA7CisKIAkvKiBUaGlzIGNvbnRleHQncyBTV0FQX0NMVVNURVJfTUFYLiBJZiBmcmVlaW5nIG1lbW9yeSBmb3IKIAkgKiBzdXNwZW5kLCB3ZSBlZmZlY3RpdmVseSBpZ25vcmUgU1dBUF9DTFVTVEVSX01BWC4KIAkgKiBJbiB0aGlzIGNvbnRleHQsIGl0IGRvZXNuJ3QgbWF0dGVyIHRoYXQgd2Ugc2NhbiB0aGUKQEAgLTE4MCwxNyArMTgzLDIwIEBACiAgKiBgbHJ1X3BhZ2VzJyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Ygb24tTFJVIHBhZ2VzIGluIGFsbCB0aGUgem9uZXMgd2hpY2gKICAqIGFyZSBlbGlnaWJsZSBmb3IgdGhlIGNhbGxlcidzIGFsbG9jYXRpb24gYXR0ZW1wdC4gIEl0IGlzIHVzZWQgZm9yIGJhbGFuY2luZwogICogc2xhYiByZWNsYWltIHZlcnN1cyBwYWdlIHJlY2xhaW0uCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNsYWIgb2JqZWN0cyB3aGljaCB3ZSBzaHJ1bmsuCiAgKi8KIHN0YXRpYyBpbnQgc2hyaW5rX3NsYWIodW5zaWduZWQgbG9uZyBzY2FubmVkLCB1bnNpZ25lZCBpbnQgZ2ZwX21hc2ssCiAJCQl1bnNpZ25lZCBsb25nIGxydV9wYWdlcykKIHsKIAlzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyOworCWludCByZXQgPSAwOwogCiAJaWYgKHNjYW5uZWQgPT0gMCkKIAkJc2Nhbm5lZCA9IFNXQVBfQ0xVU1RFUl9NQVg7CiAKIAlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZzaHJpbmtlcl9yd3NlbSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gMTsJLyogQXNzdW1lIHdlJ2xsIGJlIGFibGUgdG8gc2hyaW5rIG5leHQgdGltZSAqLwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzaHJpbmtlciwgJnNocmlua2VyX2xpc3QsIGxpc3QpIHsKIAkJdW5zaWduZWQgbG9uZyBsb25nIGRlbHRhOwpAQCAtMjA5LDEwICsyMTUsMTQgQEAKIAkJd2hpbGUgKHRvdGFsX3NjYW4gPj0gU0hSSU5LX0JBVENIKSB7CiAJCQlsb25nIHRoaXNfc2NhbiA9IFNIUklOS19CQVRDSDsKIAkJCWludCBzaHJpbmtfcmV0OworCQkJaW50IG5yX2JlZm9yZTsKIAorCQkJbnJfYmVmb3JlID0gKCpzaHJpbmtlci0+c2hyaW5rZXIpKDAsIGdmcF9tYXNrKTsKIAkJCXNocmlua19yZXQgPSAoKnNocmlua2VyLT5zaHJpbmtlcikodGhpc19zY2FuLCBnZnBfbWFzayk7CiAJCQlpZiAoc2hyaW5rX3JldCA9PSAtMSkKIAkJCQlicmVhazsKKwkJCWlmIChzaHJpbmtfcmV0IDwgbnJfYmVmb3JlKQorCQkJCXJldCArPSBucl9iZWZvcmUgLSBzaHJpbmtfcmV0OwogCQkJbW9kX3BhZ2Vfc3RhdGUoc2xhYnNfc2Nhbm5lZCwgdGhpc19zY2FuKTsKIAkJCXRvdGFsX3NjYW4gLT0gdGhpc19zY2FuOwogCkBAIC0yMjIsNyArMjMyLDcgQEAKIAkJc2hyaW5rZXItPm5yICs9IHRvdGFsX3NjYW47CiAJfQogCXVwX3JlYWQoJnNocmlua2VyX3J3c2VtKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBDYWxsZWQgd2l0aG91dCBsb2NrIG9uIHdoZXRoZXIgcGFnZSBpcyBtYXBwZWQsIHNvIGFuc3dlciBpcyB1bnN0YWJsZSAqLwpAQCAtNDA3LDcgKzQxNyw3IEBACiAJCSAqIEFub255bW91cyBwcm9jZXNzIG1lbW9yeSBoYXMgYmFja2luZyBzdG9yZT8KIAkJICogVHJ5IHRvIGFsbG9jYXRlIGl0IHNvbWUgc3dhcCBzcGFjZSBoZXJlLgogCQkgKi8KLQkJaWYgKFBhZ2VBbm9uKHBhZ2UpICYmICFQYWdlU3dhcENhY2hlKHBhZ2UpKSB7CisJCWlmIChQYWdlQW5vbihwYWdlKSAmJiAhUGFnZVN3YXBDYWNoZShwYWdlKSAmJiBzYy0+bWF5X3N3YXApIHsKIAkJCWlmICghYWRkX3RvX3N3YXAocGFnZSkpCiAJCQkJZ290byBhY3RpdmF0ZV9sb2NrZWQ7CiAJCX0KQEAgLTg5MCw3ICs5MDAsOSBAQAogCQlpZiAoem9uZS0+YWxsX3VucmVjbGFpbWFibGUgJiYgc2MtPnByaW9yaXR5ICE9IERFRl9QUklPUklUWSkKIAkJCWNvbnRpbnVlOwkvKiBMZXQga3N3YXBkIHBvbGwgaXQgKi8KIAorCQlhdG9taWNfaW5jKCZ6b25lLT5yZWNsYWltX2luX3Byb2dyZXNzKTsKIAkJc2hyaW5rX3pvbmUoem9uZSwgc2MpOworCQlhdG9taWNfZGVjKCZ6b25lLT5yZWNsYWltX2luX3Byb2dyZXNzKTsKIAl9CiB9CiAgCkBAIC05MDcsOCArOTE5LDcgQEAKICAqIGhvbGRzIGZpbGVzeXN0ZW0gbG9ja3Mgd2hpY2ggcHJldmVudCB3cml0ZW91dCB0aGlzIG1pZ2h0IG5vdCB3b3JrLCBhbmQgdGhlCiAgKiBhbGxvY2F0aW9uIGF0dGVtcHQgd2lsbCBmYWlsLgogICovCi1pbnQgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKip6b25lcywKLQkJdW5zaWduZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCitpbnQgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKip6b25lcywgdW5zaWduZWQgaW50IGdmcF9tYXNrKQogewogCWludCBwcmlvcml0eTsKIAlpbnQgcmV0ID0gMDsKQEAgLTkyMCw2ICs5MzEsNyBAQAogCiAJc2MuZ2ZwX21hc2sgPSBnZnBfbWFzazsKIAlzYy5tYXlfd3JpdGVwYWdlID0gMDsKKwlzYy5tYXlfc3dhcCA9IDE7CiAKIAlpbmNfcGFnZV9zdGF0ZShhbGxvY3N0YWxsKTsKIApAQCAtMTAyMCw2ICsxMDMyLDcgQEAKIAl0b3RhbF9yZWNsYWltZWQgPSAwOwogCXNjLmdmcF9tYXNrID0gR0ZQX0tFUk5FTDsKIAlzYy5tYXlfd3JpdGVwYWdlID0gMDsKKwlzYy5tYXlfc3dhcCA9IDE7CiAJc2MubnJfbWFwcGVkID0gcmVhZF9wYWdlX3N0YXRlKG5yX21hcHBlZCk7CiAKIAlpbmNfcGFnZV9zdGF0ZShwYWdlb3V0cnVuKTsKQEAgLTEwNzksNiArMTA5Miw3IEBACiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDw9IGVuZF96b25lOyBpKyspIHsKIAkJCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBpOworCQkJaW50IG5yX3NsYWI7CiAKIAkJCWlmICh6b25lLT5wcmVzZW50X3BhZ2VzID09IDApCiAJCQkJY29udGludWU7CkBAIC0xMDk4LDE2ICsxMTEyLDE5IEBACiAJCQlzYy5ucl9yZWNsYWltZWQgPSAwOwogCQkJc2MucHJpb3JpdHkgPSBwcmlvcml0eTsKIAkJCXNjLnN3YXBfY2x1c3Rlcl9tYXggPSBucl9wYWdlcz8gbnJfcGFnZXMgOiBTV0FQX0NMVVNURVJfTUFYOworCQkJYXRvbWljX2luYygmem9uZS0+cmVjbGFpbV9pbl9wcm9ncmVzcyk7CiAJCQlzaHJpbmtfem9uZSh6b25lLCAmc2MpOworCQkJYXRvbWljX2RlYygmem9uZS0+cmVjbGFpbV9pbl9wcm9ncmVzcyk7CiAJCQlyZWNsYWltX3N0YXRlLT5yZWNsYWltZWRfc2xhYiA9IDA7Ci0JCQlzaHJpbmtfc2xhYihzYy5ucl9zY2FubmVkLCBHRlBfS0VSTkVMLCBscnVfcGFnZXMpOworCQkJbnJfc2xhYiA9IHNocmlua19zbGFiKHNjLm5yX3NjYW5uZWQsIEdGUF9LRVJORUwsCisJCQkJCQlscnVfcGFnZXMpOwogCQkJc2MubnJfcmVjbGFpbWVkICs9IHJlY2xhaW1fc3RhdGUtPnJlY2xhaW1lZF9zbGFiOwogCQkJdG90YWxfcmVjbGFpbWVkICs9IHNjLm5yX3JlY2xhaW1lZDsKIAkJCXRvdGFsX3NjYW5uZWQgKz0gc2MubnJfc2Nhbm5lZDsKIAkJCWlmICh6b25lLT5hbGxfdW5yZWNsYWltYWJsZSkKIAkJCQljb250aW51ZTsKLQkJCWlmICh6b25lLT5wYWdlc19zY2FubmVkID49ICh6b25lLT5ucl9hY3RpdmUgKwotCQkJCQkJCXpvbmUtPm5yX2luYWN0aXZlKSAqIDQpCisJCQlpZiAobnJfc2xhYiA9PSAwICYmIHpvbmUtPnBhZ2VzX3NjYW5uZWQgPj0KKwkJCQkgICAgKHpvbmUtPm5yX2FjdGl2ZSArIHpvbmUtPm5yX2luYWN0aXZlKSAqIDQpCiAJCQkJem9uZS0+YWxsX3VucmVjbGFpbWFibGUgPSAxOwogCQkJLyoKIAkJCSAqIElmIHdlJ3ZlIGRvbmUgYSBkZWNlbnQgYW1vdW50IG9mIHNjYW5uaW5nIGFuZApAQCAtMTMwOSwzICsxMzI2LDczIEBACiB9CiAKIG1vZHVsZV9pbml0KGtzd2FwZF9pbml0KQorCisKKy8qCisgKiBUcnkgdG8gZnJlZSB1cCBzb21lIHBhZ2VzIGZyb20gdGhpcyB6b25lIHRocm91Z2ggcmVjbGFpbS4KKyAqLworaW50IHpvbmVfcmVjbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJc3RydWN0IHNjYW5fY29udHJvbCBzYzsKKwlpbnQgbnJfcGFnZXMgPSAxIDw8IG9yZGVyOworCWludCB0b3RhbF9yZWNsYWltZWQgPSAwOworCisJLyogVGhlIHJlY2xhaW0gbWF5IHNsZWVwLCBzbyBkb24ndCBkbyBpdCBpZiBzbGVlcCBpc24ndCBhbGxvd2VkICovCisJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkKKwkJcmV0dXJuIDA7CisJaWYgKHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlKQorCQlyZXR1cm4gMDsKKworCXNjLmdmcF9tYXNrID0gZ2ZwX21hc2s7CisJc2MubWF5X3dyaXRlcGFnZSA9IDA7CisJc2MubWF5X3N3YXAgPSAwOworCXNjLm5yX21hcHBlZCA9IHJlYWRfcGFnZV9zdGF0ZShucl9tYXBwZWQpOworCXNjLm5yX3NjYW5uZWQgPSAwOworCXNjLm5yX3JlY2xhaW1lZCA9IDA7CisJLyogc2NhbiBhdCB0aGUgaGlnaGVzdCBwcmlvcml0eSAqLworCXNjLnByaW9yaXR5ID0gMDsKKworCWlmIChucl9wYWdlcyA+IFNXQVBfQ0xVU1RFUl9NQVgpCisJCXNjLnN3YXBfY2x1c3Rlcl9tYXggPSBucl9wYWdlczsKKwllbHNlCisJCXNjLnN3YXBfY2x1c3Rlcl9tYXggPSBTV0FQX0NMVVNURVJfTUFYOworCisJLyogRG9uJ3QgcmVjbGFpbSB0aGUgem9uZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVjbGFpbWVycyBhY3RpdmUgKi8KKwlpZiAoIWF0b21pY19pbmNfYW5kX3Rlc3QoJnpvbmUtPnJlY2xhaW1faW5fcHJvZ3Jlc3MpKQorCQlnb3RvIG91dDsKKworCXNocmlua196b25lKHpvbmUsICZzYyk7CisJdG90YWxfcmVjbGFpbWVkID0gc2MubnJfcmVjbGFpbWVkOworCisgb3V0OgorCWF0b21pY19kZWMoJnpvbmUtPnJlY2xhaW1faW5fcHJvZ3Jlc3MpOworCXJldHVybiB0b3RhbF9yZWNsYWltZWQ7Cit9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0X3pvbmVfcmVjbGFpbSh1bnNpZ25lZCBpbnQgbm9kZSwgdW5zaWduZWQgaW50IHpvbmUsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJc3RydWN0IHpvbmUgKno7CisJaW50IGk7CisKKwlpZiAobm9kZSA+PSBNQVhfTlVNTk9ERVMgfHwgIW5vZGVfb25saW5lKG5vZGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRoaXMgd2lsbCBicmVhayBpZiB3ZSBldmVyIGFkZCBtb3JlIHpvbmVzICovCisJaWYgKCEoem9uZSAmICgxPDxaT05FX0RNQXwxPDxaT05FX05PUk1BTHwxPDxaT05FX0hJR0hNRU0pKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKKwkJaWYgKCEoem9uZSAmIDE8PGkpKQorCQkJY29udGludWU7CisKKwkJeiA9ICZOT0RFX0RBVEEobm9kZSktPm5vZGVfem9uZXNbaV07CisKKwkJaWYgKHN0YXRlKQorCQkJei0+cmVjbGFpbV9wYWdlcyA9IDE7CisJCWVsc2UKKwkJCXotPnJlY2xhaW1fcGFnZXMgPSAwOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMgYi9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYwppbmRleCBlZjlmMjA5Li4wNjkyNTNmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYworKysgYi9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYwpAQCAtNTcsOSArNTcsNiBAQAogc3RhdGljIHZvaWQgX19icl9kZWxpdmVyKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXNrYi0+ZGV2ID0gdG8tPmRldjsKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0Jc2tiLT5uZl9kZWJ1ZyA9IDA7Ci0jZW5kaWYKIAlORl9IT09LKFBGX0JSSURHRSwgTkZfQlJfTE9DQUxfT1VULCBza2IsIE5VTEwsIHNrYi0+ZGV2LAogCQkJYnJfZm9yd2FyZF9maW5pc2gpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IDhmNWYyZTcuLjlhNDVlNjIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYworKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKQEAgLTIzLDExICsyMyw3IEBACiAKIHN0YXRpYyBpbnQgYnJfcGFzc19mcmFtZV91cF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0Jc2tiLT5uZl9kZWJ1ZyA9IDA7Ci0jZW5kaWYKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IGJlMDNkM2EuLjAzYWU0ZWQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtMTAyLDEwICsxMDIsNiBAQAogewogCXN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlID0gc2tiLT5uZl9icmlkZ2U7CiAKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0Jc2tiLT5uZl9kZWJ1ZyBePSAoMSA8PCBORl9CUl9QUkVfUk9VVElORyk7Ci0jZW5kaWYKLQogCWlmIChuZl9icmlkZ2UtPm1hc2sgJiBCUk5GX1BLVF9UWVBFKSB7CiAJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwogCQluZl9icmlkZ2UtPm1hc2sgXj0gQlJORl9QS1RfVFlQRTsKQEAgLTE4MiwxMCArMTc4LDYgQEAKICAqIC0tQmFydCwgMjAwMjEwMDcgKHVwZGF0ZWQpICovCiBzdGF0aWMgaW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0Jc2tiLT5uZl9kZWJ1ZyB8PSAoMSA8PCBORl9CUl9QUkVfUk9VVElORykgfCAoMSA8PCBORl9CUl9GT1JXQVJEKTsKLSNlbmRpZgotCiAJaWYgKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX09USEVSSE9TVCkgewogCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJCXNrYi0+bmZfYnJpZGdlLT5tYXNrIHw9IEJSTkZfUEtUX1RZUEU7CkBAIC0yMDcsMTAgKzE5OSw2IEBACiAJc3RydWN0IGlwaGRyICppcGggPSBza2ItPm5oLmlwaDsKIAlzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZSA9IHNrYi0+bmZfYnJpZGdlOwogCi0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotCXNrYi0+bmZfZGVidWcgXj0gKDEgPDwgTkZfQlJfUFJFX1JPVVRJTkcpOwotI2VuZGlmCi0KIAlpZiAobmZfYnJpZGdlLT5tYXNrICYgQlJORl9QS1RfVFlQRSkgewogCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKIAkJbmZfYnJpZGdlLT5tYXNrIF49IEJSTkZfUEtUX1RZUEU7CkBAIC0zODIsOSArMzcwLDYgQEAKIAlpZiAoaGRyLT5uZXh0aGRyID09IE5FWFRIRFJfSE9QICYmIGNoZWNrX2hiaF9sZW4oc2tiKSkKIAkJCWdvdG8gaW5oZHJfZXJyb3I7CiAKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0Jc2tiLT5uZl9kZWJ1ZyBePSAoMSA8PCBORl9JUDZfUFJFX1JPVVRJTkcpOwotI2VuZGlmCiAJaWYgKChuZl9icmlkZ2UgPSBuZl9icmlkZ2VfYWxsb2Moc2tiKSkgPT0gTlVMTCkKIAkJcmV0dXJuIE5GX0RST1A7CiAJc2V0dXBfcHJlX3JvdXRpbmcoc2tiKTsKQEAgLTQ2OCw5ICs0NTMsNiBAQAogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCX0KIAotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKLQlza2ItPm5mX2RlYnVnIF49ICgxIDw8IE5GX0lQX1BSRV9ST1VUSU5HKTsKLSNlbmRpZgogCWlmICgobmZfYnJpZGdlID0gbmZfYnJpZGdlX2FsbG9jKHNrYikpID09IE5VTEwpCiAJCXJldHVybiBORl9EUk9QOwogCXNldHVwX3ByZV9yb3V0aW5nKHNrYik7CkBAIC01MTcsMTAgKzQ5OSw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmluOwogCXN0cnVjdCB2bGFuX2V0aGhkciAqaGRyID0gdmxhbl9ldGhfaGRyKHNrYik7CiAKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0Jc2tiLT5uZl9kZWJ1ZyBePSAoMSA8PCBORl9CUl9GT1JXQVJEKTsKLSNlbmRpZgotCiAJaWYgKHNrYi0+cHJvdG9jb2wgIT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApICYmICFJU19WTEFOX0FSUCkgewogCQlpbiA9IG5mX2JyaWRnZS0+cGh5c2luZGV2OwogCQlpZiAobmZfYnJpZGdlLT5tYXNrICYgQlJORl9QS1RfVFlQRSkgewpAQCAtNTY2LDkgKzU0NCw2IEBACiAJCSgqcHNrYiktPm5oLnJhdyArPSBWTEFOX0hMRU47CiAJfQogCi0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotCXNrYi0+bmZfZGVidWcgXj0gKDEgPDwgTkZfQlJfRk9SV0FSRCk7Ci0jZW5kaWYKIAluZl9icmlkZ2UgPSBza2ItPm5mX2JyaWRnZTsKIAlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUKSB7CiAJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKQEAgLTYwNSwxMCArNTgwLDYgQEAKIAkJKCpwc2tiKS0+bmgucmF3ICs9IFZMQU5fSExFTjsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0Jc2tiLT5uZl9kZWJ1ZyBePSAoMSA8PCBORl9CUl9GT1JXQVJEKTsKLSNlbmRpZgotCiAJaWYgKHNrYi0+bmguYXJwaC0+YXJfcGxuICE9IDQpIHsKIAkJaWYgKElTX1ZMQU5fQVJQKSB7CiAJCQlza2JfcHVzaCgqcHNrYiwgVkxBTl9ITEVOKTsKQEAgLTYyNyw5ICs1OTgsNiBAQAogLyogUEZfQlJJREdFL0xPQ0FMX09VVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgYnJfbmZfbG9jYWxfb3V0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKLQlza2ItPm5mX2RlYnVnICY9IH4oMSA8PCBORl9CUl9MT0NBTF9PVVQpOwotI2VuZGlmCiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpIHsKIAkJc2tiX3B1c2goc2tiLCBWTEFOX0hMRU4pOwogCQlza2ItPm5oLnJhdyAtPSBWTEFOX0hMRU47CkBAIC03MzEsMTAgKzY5OSw2IEBACiAJCQkgICAgICAgcmVhbG91dGRldiwgYnJfbmZfbG9jYWxfb3V0X2ZpbmlzaCwKIAkJCSAgICAgICBORl9JUF9QUklfQlJJREdFX1NBQk9UQUdFX0ZPUldBUkQgKyAxKTsKIAl9IGVsc2UgewotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKLQkJc2tiLT5uZl9kZWJ1ZyBePSAoMSA8PCBORl9JUF9MT0NBTF9PVVQpOwotI2VuZGlmCi0KIAkJTkZfSE9PS19USFJFU0gocGYsIE5GX0lQX0xPQ0FMX09VVCwgc2tiLCByZWFsaW5kZXYsCiAJCQkgICAgICAgcmVhbG91dGRldiwgYnJfbmZfbG9jYWxfb3V0X2ZpbmlzaCwKIAkJCSAgICAgICBORl9JUF9QUklfQlJJREdFX1NBQk9UQUdFX0xPQ0FMX09VVCArIDEpOwpAQCAtNzc5LDggKzc0Myw2IEBACiAJCXByaW50ayhLRVJOX0NSSVQgImJyX25ldGZpbHRlcjogc2tiLT5kc3QgPT0gTlVMTC4iKTsKIAkJZ290byBwcmludF9lcnJvcjsKIAl9Ci0KLQlza2ItPm5mX2RlYnVnIF49ICgxIDw8IE5GX0lQX1BPU1RfUk9VVElORyk7CiAjZW5kaWYKIAogCS8qIFdlIGFzc3VtZSBhbnkgY29kZSBmcm9tIGJyX2Rldl9xdWV1ZV9wdXNoX3htaXQgb253YXJkcyBkb2Vzbid0IGNhcmUKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGZpbHRlci5jIGIvbmV0L2NvcmUvbmV0ZmlsdGVyLmMKaW5kZXggMjJhOGYxMi4uMDc2YzE1NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2NvcmUvbmV0ZmlsdGVyLmMKQEAgLTE0MSwxMzYgKzE0MSw2IEBACiAJdXAoJm5mX3NvY2tvcHRfbXV0ZXgpOwogfQogCi0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotI2luY2x1ZGUgPG5ldC9pcC5oPgotI2luY2x1ZGUgPG5ldC90Y3AuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgotCi1zdGF0aWMgdm9pZCBkZWJ1Z19wcmludF9ob29rc19pcCh1bnNpZ25lZCBpbnQgbmZfZGVidWcpCi17Ci0JaWYgKG5mX2RlYnVnICYgKDEgPDwgTkZfSVBfUFJFX1JPVVRJTkcpKSB7Ci0JCXByaW50aygiUFJFX1JPVVRJTkcgIik7Ci0JCW5mX2RlYnVnIF49ICgxIDw8IE5GX0lQX1BSRV9ST1VUSU5HKTsKLQl9Ci0JaWYgKG5mX2RlYnVnICYgKDEgPDwgTkZfSVBfTE9DQUxfSU4pKSB7Ci0JCXByaW50aygiTE9DQUxfSU4gIik7Ci0JCW5mX2RlYnVnIF49ICgxIDw8IE5GX0lQX0xPQ0FMX0lOKTsKLQl9Ci0JaWYgKG5mX2RlYnVnICYgKDEgPDwgTkZfSVBfRk9SV0FSRCkpIHsKLQkJcHJpbnRrKCJGT1JXQVJEICIpOwotCQluZl9kZWJ1ZyBePSAoMSA8PCBORl9JUF9GT1JXQVJEKTsKLQl9Ci0JaWYgKG5mX2RlYnVnICYgKDEgPDwgTkZfSVBfTE9DQUxfT1VUKSkgewotCQlwcmludGsoIkxPQ0FMX09VVCAiKTsKLQkJbmZfZGVidWcgXj0gKDEgPDwgTkZfSVBfTE9DQUxfT1VUKTsKLQl9Ci0JaWYgKG5mX2RlYnVnICYgKDEgPDwgTkZfSVBfUE9TVF9ST1VUSU5HKSkgewotCQlwcmludGsoIlBPU1RfUk9VVElORyAiKTsKLQkJbmZfZGVidWcgXj0gKDEgPDwgTkZfSVBfUE9TVF9ST1VUSU5HKTsKLQl9Ci0JaWYgKG5mX2RlYnVnKQotCQlwcmludGsoIkNyYXAgYml0czogMHglMDRYIiwgbmZfZGVidWcpOwotCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgbmZfZHVtcF9za2IoaW50IHBmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXByaW50aygic2tiOiBwZj0laSAlcyBkZXY9JXMgbGVuPSV1XG4iLCAKLQkgICAgICAgcGYsCi0JICAgICAgIHNrYi0+c2sgPyAiKG93bmVkKSIgOiAiKHVub3duZWQpIiwKLQkgICAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICIobm8gZGV2KSIsCi0JICAgICAgIHNrYi0+bGVuKTsKLQlzd2l0Y2ggKHBmKSB7Ci0JY2FzZSBQRl9JTkVUOiB7Ci0JCWNvbnN0IHN0cnVjdCBpcGhkciAqaXAgPSBza2ItPm5oLmlwaDsKLQkJX191MzIgKm9wdCA9IChfX3UzMiAqKSAoaXAgKyAxKTsKLQkJaW50IG9wdGk7Ci0JCV9fdTE2IHNyY19wb3J0ID0gMCwgZHN0X3BvcnQgPSAwOwotCi0JCWlmIChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AKLQkJICAgIHx8IGlwLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgewotCQkJc3RydWN0IHRjcGhkciAqdGNwPShzdHJ1Y3QgdGNwaGRyICopKChfX3UzMiAqKWlwK2lwLT5paGwpOwotCQkJc3JjX3BvcnQgPSBudG9ocyh0Y3AtPnNvdXJjZSk7Ci0JCQlkc3RfcG9ydCA9IG50b2hzKHRjcC0+ZGVzdCk7Ci0JCX0KLQkKLQkJcHJpbnRrKCJQUk9UTz0lZCAldS4ldS4ldS4ldTolaHUgJXUuJXUuJXUuJXU6JWh1IgotCQkgICAgICAgIiBMPSVodSBTPTB4JTIuMmhYIEk9JWh1IEY9MHglNC40aFggVD0laHUiLAotCQkgICAgICAgaXAtPnByb3RvY29sLCBOSVBRVUFEKGlwLT5zYWRkciksCi0JCSAgICAgICBzcmNfcG9ydCwgTklQUVVBRChpcC0+ZGFkZHIpLAotCQkgICAgICAgZHN0X3BvcnQsCi0JCSAgICAgICBudG9ocyhpcC0+dG90X2xlbiksIGlwLT50b3MsIG50b2hzKGlwLT5pZCksCi0JCSAgICAgICBudG9ocyhpcC0+ZnJhZ19vZmYpLCBpcC0+dHRsKTsKLQotCQlmb3IgKG9wdGkgPSAwOyBvcHRpIDwgKGlwLT5paGwgLSBzaXplb2Yoc3RydWN0IGlwaGRyKSAvIDQpOyBvcHRpKyspCi0JCQlwcmludGsoIiBPPTB4JTguOFgiLCAqb3B0KyspOwotCQlwcmludGsoIlxuIik7Ci0JfQotCX0KLX0KLQotdm9pZCBuZl9kZWJ1Z19pcF9sb2NhbF9kZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JLyogSWYgaXQncyBhIGxvb3BiYWNrIHBhY2tldCwgaXQgbXVzdCBoYXZlIGNvbWUgdGhyb3VnaAotCSAqIE5GX0lQX0xPQ0FMX09VVCwgTkZfSVBfUkFXX0lOUFVULCBORl9JUF9QUkVfUk9VVElORyBhbmQKLQkgKiBORl9JUF9MT0NBTF9JTi4gIE90aGVyd2lzZSwgbXVzdCBoYXZlIGdvbmUgdGhyb3VnaAotCSAqIE5GX0lQX1JBV19JTlBVVCBhbmQgTkZfSVBfUFJFX1JPVVRJTkcuICAqLwotCWlmICghc2tiLT5kZXYpIHsKLQkJcHJpbnRrKCJpcF9sb2NhbF9kZWxpdmVyOiBza2ItPmRldiBpcyBOVUxMLlxuIik7Ci0JfSBlbHNlIHsKLQkJaWYgKHNrYi0+bmZfZGVidWcgIT0gKCgxPDxORl9JUF9QUkVfUk9VVElORykKLQkJCQkgICAgICB8ICgxPDxORl9JUF9MT0NBTF9JTikpKSB7Ci0JCQlwcmludGsoImlwX2xvY2FsX2RlbGl2ZXI6IGJhZCBza2I6ICIpOwotCQkJZGVidWdfcHJpbnRfaG9va3NfaXAoc2tiLT5uZl9kZWJ1Zyk7Ci0JCQluZl9kdW1wX3NrYihQRl9JTkVULCBza2IpOwotCQl9Ci0JfQotfQotCi12b2lkIG5mX2RlYnVnX2lwX2xvb3BiYWNrX3htaXQoc3RydWN0IHNrX2J1ZmYgKm5ld3NrYikKLXsKLQlpZiAobmV3c2tiLT5uZl9kZWJ1ZyAhPSAoKDEgPDwgTkZfSVBfTE9DQUxfT1VUKQotCQkJCSB8ICgxIDw8IE5GX0lQX1BPU1RfUk9VVElORykpKSB7Ci0JCXByaW50aygiaXBfZGV2X2xvb3BiYWNrX3htaXQ6IGJhZCBvd25lZCBza2IgPSAlcDogIiwgCi0JCSAgICAgICBuZXdza2IpOwotCQlkZWJ1Z19wcmludF9ob29rc19pcChuZXdza2ItPm5mX2RlYnVnKTsKLQkJbmZfZHVtcF9za2IoUEZfSU5FVCwgbmV3c2tiKTsKLQl9Ci19Ci0KLXZvaWQgbmZfZGVidWdfaXBfZmluaXNoX291dHB1dDIoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQkvKiBJZiBpdCdzIG93bmVkLCBpdCBtdXN0IGhhdmUgZ29uZSB0aHJvdWdoIHRoZQotCSAqIE5GX0lQX0xPQ0FMX09VVCBhbmQgTkZfSVBfUE9TVF9ST1VUSU5HLgotCSAqIE90aGVyd2lzZSwgbXVzdCBoYXZlIGdvbmUgdGhyb3VnaAotCSAqIE5GX0lQX1BSRV9ST1VUSU5HLCBORl9JUF9GT1JXQVJEIGFuZCBORl9JUF9QT1NUX1JPVVRJTkcuCi0JICovCi0JaWYgKHNrYi0+c2spIHsKLQkJaWYgKHNrYi0+bmZfZGVidWcgIT0gKCgxIDw8IE5GX0lQX0xPQ0FMX09VVCkKLQkJCQkgICAgICB8ICgxIDw8IE5GX0lQX1BPU1RfUk9VVElORykpKSB7Ci0JCQlwcmludGsoImlwX2ZpbmlzaF9vdXRwdXQ6IGJhZCBvd25lZCBza2IgPSAlcDogIiwgc2tiKTsKLQkJCWRlYnVnX3ByaW50X2hvb2tzX2lwKHNrYi0+bmZfZGVidWcpOwotCQkJbmZfZHVtcF9za2IoUEZfSU5FVCwgc2tiKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChza2ItPm5mX2RlYnVnICE9ICgoMSA8PCBORl9JUF9QUkVfUk9VVElORykKLQkJCQkgICAgICB8ICgxIDw8IE5GX0lQX0ZPUldBUkQpCi0JCQkJICAgICAgfCAoMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcpKSkgewotCQkJLyogRnJhZ21lbnRzLCBlbnR1bm5lbGxlZCBwYWNrZXRzLCBUQ1AgUlNUcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGJ5IGlwdF9SRUpFQ1Qgd2lsbCBoYXZlIG5vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcnMsIGJ1dCBzdGlsbCBtYXkgYmUgbG9jYWwgKi8KLQkJCWlmIChza2ItPm5mX2RlYnVnICE9ICgoMSA8PCBORl9JUF9MT0NBTF9PVVQpCi0JCQkJCSAgICAgIHwgKDEgPDwgTkZfSVBfUE9TVF9ST1VUSU5HKSkpewotCQkJCXByaW50aygiaXBfZmluaXNoX291dHB1dDoiCi0JCQkJICAgICAgICIgYmFkIHVub3duZWQgc2tiID0gJXA6ICIsc2tiKTsKLQkJCQlkZWJ1Z19wcmludF9ob29rc19pcChza2ItPm5mX2RlYnVnKTsKLQkJCQluZl9kdW1wX3NrYihQRl9JTkVULCBza2IpOwotCQkJfQotCQl9Ci0JfQotfQotI2VuZGlmIC8qQ09ORklHX05FVEZJTFRFUl9ERUJVRyovCi0KIC8qIENhbGwgZ2V0L3NldHNvY2tvcHQoKSAqLwogc3RhdGljIGludCBuZl9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IHBmLCBpbnQgdmFsLCAKIAkJICAgICAgY2hhciBfX3VzZXIgKm9wdCwgaW50ICpsZW4sIGludCBnZXQpCkBAIC00ODgsMTQgKzM1OCw2IEBACiAJLyogV2UgbWF5IGFscmVhZHkgaGF2ZSB0aGlzLCBidXQgcmVhZC1sb2NrcyBuZXN0IGFueXdheSAqLwogCXJjdV9yZWFkX2xvY2soKTsKIAotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKLQlpZiAodW5saWtlbHkoKCpwc2tiKS0+bmZfZGVidWcgJiAoMSA8PCBob29rKSkpIHsKLQkJcHJpbnRrKCJuZl9ob29rOiBob29rICVpIGFscmVhZHkgc2V0LlxuIiwgaG9vayk7Ci0JCW5mX2R1bXBfc2tiKHBmLCAqcHNrYik7Ci0JfQotCSgqcHNrYiktPm5mX2RlYnVnIHw9ICgxIDw8IGhvb2spOwotI2VuZGlmCi0KIAllbGVtID0gJm5mX2hvb2tzW3BmXVtob29rXTsKIG5leHRfaG9vazoKIAl2ZXJkaWN0ID0gbmZfaXRlcmF0ZSgmbmZfaG9va3NbcGZdW2hvb2tdLCBwc2tiLCBob29rLCBpbmRldiwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggZjY1YjNkZS4uNmQ2OGMwMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTM2NSw5ICszNjUsNiBAQAogCUMobmZjdCk7CiAJbmZfY29ubnRyYWNrX2dldChza2ItPm5mY3QpOwogCUMobmZjdGluZm8pOwotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKLQlDKG5mX2RlYnVnKTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCiAJQyhuZl9icmlkZ2UpOwogCW5mX2JyaWRnZV9nZXQoc2tiLT5uZl9icmlkZ2UpOwpAQCAtNDMyLDkgKzQyOSw2IEBACiAJbmV3LT5uZmN0CT0gb2xkLT5uZmN0OwogCW5mX2Nvbm50cmFja19nZXQob2xkLT5uZmN0KTsKIAluZXctPm5mY3RpbmZvCT0gb2xkLT5uZmN0aW5mbzsKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0JbmV3LT5uZl9kZWJ1Zwk9IG9sZC0+bmZfZGVidWc7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCW5ldy0+bmZfYnJpZGdlCT0gb2xkLT5uZl9icmlkZ2U7CiAJbmZfYnJpZGdlX2dldChvbGQtPm5mX2JyaWRnZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCA2ZDNlOGIxLi4wNTEwN2UwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCisrKyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTEsNiArMSwzMiBAQAogIwogIyBJUCBjb25maWd1cmF0aW9uCiAjCitjaG9pY2UgCisJcHJvbXB0ICJDaG9vc2UgSVA6IEZJQiBsb29rdXAiIgorCWRlcGVuZHMgb24gSU5FVAorCWRlZmF1bHQgSVBfRklCX0hBU0gKKworY29uZmlnIElQX0ZJQl9IQVNICisJYm9vbCAiRklCX0hBU0giCisJLS0taGVscC0tLQorCUN1cnJlbnQgRklCIGlzIHZlcnkgcHJvdmVuIGFuZCBnb29kIGVub3VnaCBmb3IgbW9zdCB1c2Vycy4KKworY29uZmlnIElQX0ZJQl9UUklFCisJYm9vbCAiRklCX1RSSUUiCisJLS0taGVscC0tLQorCVVzZSBuZXcgZXhwZXJpbWVudGFsIExDLXRyaWUgYXMgRklCIGxvb2t1cCBhbGdvcml0bS4gCisgICAgICAgIFRoaXMgaW1wcm92ZXMgbG9va3VwIHBlcmZvcm1hbmNlCisJCisJTEMtdHJpZSBpcyBkZXNjcmliZWQgaW46CisJCisgCUlQLWFkZHJlc3MgbG9va3VwIHVzaW5nIExDLXRyaWVzLiBTdGVmYW4gTmlsc3NvbiBhbmQgR3VubmFyIEthcmxzc29uCisgCUlFRUUgSm91cm5hbCBvbiBTZWxlY3RlZCBBcmVhcyBpbiBDb21tdW5pY2F0aW9ucywgMTcoNik6MTA4My0xMDkyLCBKdW5lIDE5OTkKKwlBbiBleHBlcmltZW50YWwgc3R1ZHkgb2YgY29tcHJlc3Npb24gbWV0aG9kcyBmb3IgZHluYW1pYyB0cmllcworIAlTdGVmYW4gTmlsc3NvbiBhbmQgTWF0dGkgVGlra2FuZW4uIEFsZ29yaXRobWljYSwgMzMoMSk6MTktMzMsIDIwMDIuCisgCWh0dHA6Ly93d3cubmFkYS5rdGguc2UvfnNuaWxzc29uL3B1YmxpYy9wYXBlcnMvZHludHJpZTIvCisgICAgICAgCitlbmRjaG9pY2UKKwogY29uZmlnIElQX01VTFRJQ0FTVAogCWJvb2wgIklQOiBtdWx0aWNhc3RpbmciCiAJZGVwZW5kcyBvbiBJTkVUCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9NYWtlZmlsZSBiL25ldC9pcHY0L01ha2VmaWxlCmluZGV4IDhiMzc5NjI3Li42NWQ1N2Q4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9NYWtlZmlsZQorKysgYi9uZXQvaXB2NC9NYWtlZmlsZQpAQCAtNyw4ICs3LDEwIEBACiAJICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIFwKIAkgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIHRjcF9taW5pc29ja3MubyBcCiAJICAgICBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcCi0JICAgICBzeXNjdGxfbmV0X2lwdjQubyBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX2hhc2gubworCSAgICAgc3lzY3RsX25ldF9pcHY0Lm8gZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vCiAKK29iai0kKENPTkZJR19JUF9GSUJfSEFTSCkgKz0gZmliX2hhc2gubworb2JqLSQoQ09ORklHX0lQX0ZJQl9UUklFKSArPSBmaWJfdHJpZS5vCiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTKSArPSBmaWJfcnVsZXMubwogb2JqLSQoQ09ORklHX0lQX01ST1VURSkgKz0gaXBtci5vCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggMDM5NDJmMS4uNjU4ZTc5NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCisrKyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtMTExOSw2ICsxMTE5LDEwIEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIGV4dGVybiBpbnQgIGZpYl9wcm9jX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBmaWJfcHJvY19leGl0KHZvaWQpOworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRQorZXh0ZXJuIGludCAgZmliX3N0YXRfcHJvY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZmliX3N0YXRfcHJvY19leGl0KHZvaWQpOworI2VuZGlmCiBleHRlcm4gaW50ICBpcF9taXNjX3Byb2NfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgIHJhd19wcm9jX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCByYXdfcHJvY19leGl0KHZvaWQpOwpAQCAtMTEzOSwxMSArMTE0MywxOSBAQAogCQlnb3RvIG91dF91ZHA7CiAJaWYgKGZpYl9wcm9jX2luaXQoKSkKIAkJZ290byBvdXRfZmliOworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRQorICAgICAgICAgaWYgKGZpYl9zdGF0X3Byb2NfaW5pdCgpKQorICAgICAgICAgICAgICAgICBnb3RvIG91dF9maWJfc3RhdDsKKyAjZW5kaWYKIAlpZiAoaXBfbWlzY19wcm9jX2luaXQoKSkKIAkJZ290byBvdXRfbWlzYzsKIG91dDoKIAlyZXR1cm4gcmM7CiBvdXRfbWlzYzoKKyNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUUKKyAJZmliX3N0YXRfcHJvY19leGl0KCk7CitvdXRfZmliX3N0YXQ6CisjZW5kaWYKIAlmaWJfcHJvY19leGl0KCk7CiBvdXRfZmliOgogCXVkcDRfcHJvY19leGl0KCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjcxNTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvZmliX3RyaWUuYwpAQCAtMCwwICsxLDI0NTQgQEAKKy8qCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBSb2JlcnQgT2xzc29uIDxyb2JlcnQub2xzc29uQGl0cy51dS5zZT4gVXBwc2FsYSBVbml2ZXJzaXRldAorICogICAgICYgU3dlZGlzaCBVbml2ZXJzaXR5IG9mIEFncmljdWx0dXJhbCBTY2llbmNlcy4KKyAqCisgKiAgIEplbnMgTGFhcyA8amVucy5sYWFzQGRhdGEuc2x1LnNlPiBTd2VkaXNoIFVuaXZlcnNpdHkgb2YgCisgKiAgICAgQWdyaWN1bHR1cmFsIFNjaWVuY2VzLgorICogCisgKiAgIEhhbnMgTGlzcyA8aGFucy5saXNzQGl0cy51dS5zZT4gIFVwcHNhbGEgVW5pdmVyc2l0ZXQKKyAqCisgKiBUaGlzIHdvcmsgaXMgYmFzZWQgb24gdGhlIExQQy10cmllIHdoaWNoIGlzIG9yaWdpbmFsbHkgZGVzY2liZWQgaW46CisgKiAKKyAqIEFuIGV4cGVyaW1lbnRhbCBzdHVkeSBvZiBjb21wcmVzc2lvbiBtZXRob2RzIGZvciBkeW5hbWljIHRyaWVzCisgKiBTdGVmYW4gTmlsc3NvbiBhbmQgTWF0dGkgVGlra2FuZW4uIEFsZ29yaXRobWljYSwgMzMoMSk6MTktMzMsIDIwMDIuCisgKiBodHRwOi8vd3d3Lm5hZGEua3RoLnNlL35zbmlsc3Nvbi9wdWJsaWMvcGFwZXJzL2R5bnRyaWUyLworICoKKyAqCisgKiBJUC1hZGRyZXNzIGxvb2t1cCB1c2luZyBMQy10cmllcy4gU3RlZmFuIE5pbHNzb24gYW5kIEd1bm5hciBLYXJsc3NvbgorICogSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb25zLCAxNyg2KToxMDgzLTEwOTIsIEp1bmUgMTk5OQorICoKKyAqIFZlcnNpb246CSRJZDogZmliX3RyaWUuYyx2IDEuMyAyMDA1LzA2LzA4IDE0OjIwOjAxIHJvYmVydCBFeHAgJAorICoKKyAqCisgKiBDb2RlIGZyb20gZmliX2hhc2ggaGFzIGJlZW4gcmV1c2VkIHdoaWNoIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgaGVhZGVyOgorICoKKyAqCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJSVB2NCBGSUI6IGxvb2t1cCBlbmdpbmUgYW5kIG1haW50ZW5hbmNlIHJvdXRpbmVzLgorICoKKyAqCisgKiBBdXRob3JzOglBbGV4ZXkgS3V6bmV0c292LCA8a3V6bmV0QG1zMi5pbnIuYWMucnU+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBWRVJTSU9OICIwLjMyMyIKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L2lwX2ZpYi5oPgorI2luY2x1ZGUgImZpYl9sb29rdXAuaCIKKworI3VuZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworI2RlZmluZSBNQVhfQ0hJTERTIDE2Mzg0CisKKyNkZWZpbmUgRVhUUkFDVChwLCBuLCBzdHIpICgoc3RyKTw8KHApPj4oMzItKG4pKSkKKyNkZWZpbmUgS0VZTEVOR1RIICg4KnNpemVvZih0X2tleSkpCisjZGVmaW5lIE1BU0tfUEZYKGssIGwpICgoKGwpPT0wKT8wOihrID4+IChLRVlMRU5HVEgtbCkpIDw8IChLRVlMRU5HVEgtbCkpCisjZGVmaW5lIFRLRVlfR0VUX01BU0sob2Zmc2V0LCBiaXRzKSAoKChiaXRzKT09MCk/MDooKHRfa2V5KSgtMSkgPDwgKEtFWUxFTkdUSCAtIGJpdHMpID4+IG9mZnNldCkpCisKK3N0YXRpYyBERUZJTkVfUldMT0NLKGZpYl9sb2NrKTsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdF9rZXk7CisKKyNkZWZpbmUgVF9UTk9ERSAwCisjZGVmaW5lIFRfTEVBRiAgMQorI2RlZmluZSBOT0RFX1RZUEVfTUFTSwkweDFVTAorI2RlZmluZSBOT0RFX1BBUkVOVChfbm9kZSkgXAorKChzdHJ1Y3QgdG5vZGUgKikoKF9ub2RlKS0+X3BhcmVudCAmIH5OT0RFX1RZUEVfTUFTSykpCisjZGVmaW5lIE5PREVfU0VUX1BBUkVOVChfbm9kZSwgX3B0cikgXAorKChfbm9kZSktPl9wYXJlbnQgPSAoKCh1bnNpZ25lZCBsb25nKShfcHRyKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAoKF9ub2RlKS0+X3BhcmVudCAmIE5PREVfVFlQRV9NQVNLKSkpCisjZGVmaW5lIE5PREVfSU5JVF9QQVJFTlQoX25vZGUsIF90eXBlKSBcCisoKF9ub2RlKS0+X3BhcmVudCA9IChfdHlwZSkpCisjZGVmaW5lIE5PREVfVFlQRShfbm9kZSkgXAorKChfbm9kZSktPl9wYXJlbnQgJiBOT0RFX1RZUEVfTUFTSykKKworI2RlZmluZSBJU19UTk9ERShuKSAoIShuLT5fcGFyZW50ICYgVF9MRUFGKSkKKyNkZWZpbmUgSVNfTEVBRihuKSAobi0+X3BhcmVudCAmIFRfTEVBRikKKworc3RydWN0IG5vZGUgeworICAgICAgICB0X2tleSBrZXk7CisJdW5zaWduZWQgbG9uZyBfcGFyZW50OworfTsKKworc3RydWN0IGxlYWYgeworICAgICAgICB0X2tleSBrZXk7CisJdW5zaWduZWQgbG9uZyBfcGFyZW50OworCXN0cnVjdCBobGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdHJ1Y3QgbGVhZl9pbmZvIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKKwlpbnQgcGxlbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZhbGg7Cit9OworCitzdHJ1Y3QgdG5vZGUgeworICAgICAgICB0X2tleSBrZXk7CisJdW5zaWduZWQgbG9uZyBfcGFyZW50OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3M6NTsgICAgICAgIC8qIDJsb2coS0VZTEVOR1RIKSBiaXRzIG5lZWRlZCAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCBiaXRzOjU7ICAgICAgIC8qIDJsb2coS0VZTEVOR1RIKSBiaXRzIG5lZWRlZCAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCBmdWxsX2NoaWxkcmVuOyAgLyogS0VZTEVOR1RIIGJpdHMgbmVlZGVkICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0IGVtcHR5X2NoaWxkcmVuOyAvKiBLRVlMRU5HVEggYml0cyBuZWVkZWQgKi8KKyAgICAgICAgc3RydWN0IG5vZGUgKmNoaWxkWzBdOworfTsKKworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworc3RydWN0IHRyaWVfdXNlX3N0YXRzIHsKKwl1bnNpZ25lZCBpbnQgZ2V0czsKKwl1bnNpZ25lZCBpbnQgYmFja3RyYWNrOworCXVuc2lnbmVkIGludCBzZW1hbnRpY19tYXRjaF9wYXNzZWQ7CisJdW5zaWduZWQgaW50IHNlbWFudGljX21hdGNoX21pc3M7CisJdW5zaWduZWQgaW50IG51bGxfbm9kZV9oaXQ7Cit9OworI2VuZGlmCisKK3N0cnVjdCB0cmllX3N0YXQgeworCXVuc2lnbmVkIGludCB0b3RkZXB0aDsKKwl1bnNpZ25lZCBpbnQgbWF4ZGVwdGg7CisJdW5zaWduZWQgaW50IHRub2RlczsKKwl1bnNpZ25lZCBpbnQgbGVhdmVzOworCXVuc2lnbmVkIGludCBudWxscG9pbnRlcnM7CisJdW5zaWduZWQgaW50IG5vZGVzaXplc1tNQVhfQ0hJTERTXTsKK307ICAgIAorCitzdHJ1Y3QgdHJpZSB7CisgICAgICAgIHN0cnVjdCBub2RlICp0cmllOworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworCXN0cnVjdCB0cmllX3VzZV9zdGF0cyBzdGF0czsKKyNlbmRpZgorICAgICAgICBpbnQgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcmV2aXNpb247Cit9OworCitzdGF0aWMgaW50IHRyaWVfZGVidWcgPSAwOworCitzdGF0aWMgaW50IHRub2RlX2Z1bGwoc3RydWN0IHRub2RlICp0biwgc3RydWN0IG5vZGUgKm4pOworc3RhdGljIHZvaWQgcHV0X2NoaWxkKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgdG5vZGUgKnRuLCBpbnQgaSwgc3RydWN0IG5vZGUgKm4pOworc3RhdGljIHZvaWQgdG5vZGVfcHV0X2NoaWxkX3Jlb3JnKHN0cnVjdCB0bm9kZSAqdG4sIGludCBpLCBzdHJ1Y3Qgbm9kZSAqbiwgaW50IHdhc2Z1bGwpOworc3RhdGljIGludCB0bm9kZV9jaGlsZF9sZW5ndGgoc3RydWN0IHRub2RlICp0bik7CitzdGF0aWMgc3RydWN0IG5vZGUgKnJlc2l6ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bik7CitzdGF0aWMgc3RydWN0IHRub2RlICppbmZsYXRlKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgdG5vZGUgKnRuKTsKK3N0YXRpYyBzdHJ1Y3QgdG5vZGUgKmhhbHZlKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgdG5vZGUgKnRuKTsKK3N0YXRpYyB2b2lkIHRub2RlX2ZyZWUoc3RydWN0IHRub2RlICp0bik7CitzdGF0aWMgdm9pZCB0cmllX2R1bXBfc2VxKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdHJpZSAqdCk7CitleHRlcm4gc3RydWN0IGZpYl9hbGlhcyAqZmliX2ZpbmRfYWxpYXMoc3RydWN0IGxpc3RfaGVhZCAqZmFoLCB1OCB0b3MsIHUzMiBwcmlvKTsKK2V4dGVybiBpbnQgZmliX2RldGVjdF9kZWF0aChzdHJ1Y3QgZmliX2luZm8gKmZpLCBpbnQgb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZpYl9pbmZvICoqbGFzdF9yZXNvcnQsIGludCAqbGFzdF9pZHgsIGludCAqZGZsdCk7CisKK2V4dGVybiB2b2lkIHJ0bXNnX2ZpYihpbnQgZXZlbnQsIHUzMiBrZXksIHN0cnVjdCBmaWJfYWxpYXMgKmZhLCBpbnQgeiwgaW50IHRiX2lkLAorICAgICAgICAgICAgICAgc3RydWN0IG5sbXNnaGRyICpuLCBzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKnJlcSk7CisKK3N0YXRpYyBrbWVtX2NhY2hlX3QgKmZuX2FsaWFzX2ttZW07CitzdGF0aWMgc3RydWN0IHRyaWUgKnRyaWVfbG9jYWwgPSBOVUxMLCAqdHJpZV9tYWluID0gTlVMTDsKKworc3RhdGljIHZvaWQgdHJpZV9idWcoY2hhciAqZXJyKQoreworCXByaW50aygiVHJpZSBCdWc6ICVzXG4iLCBlcnIpOworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBub2RlICp0bm9kZV9nZXRfY2hpbGQoc3RydWN0IHRub2RlICp0biwgaW50IGkpIAoreworICAgICAgICBpZiAoaSA+PSAgMTw8dG4tPmJpdHMpIAorICAgICAgICAgICAgICAgIHRyaWVfYnVnKCJ0bm9kZV9nZXRfY2hpbGQiKTsKKworICAgICAgICByZXR1cm4gdG4tPmNoaWxkW2ldOworfQorCitzdGF0aWMgaW5saW5lIGludCB0bm9kZV9jaGlsZF9sZW5ndGgoc3RydWN0IHRub2RlICp0bikKK3sKKyAgICAgICAgcmV0dXJuIDE8PHRuLT5iaXRzOworfQorCisvKgorICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICB8IGkgfCBpIHwgaSB8IGkgfCBpIHwgaSB8IGkgfCBOIHwgTiB8IE4gfCBTIHwgUyB8IFMgfCBTIHwgUyB8IEMgfAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgMTAgIDExICAxMiAgMTMgIDE0ICAxNSAKKworICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICB8IEMgfCBDIHwgQyB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgMTYgIDE3ICAxOCAgMTkgIDIwICAyMSAgMjIgIDIzICAyNCAgMjUgIDI2ICAyNyAgMjggIDI5ICAzMCAgMzEKKworICB0cC0+cG9zID0gNworICB0cC0+Yml0cyA9IDMKKyAgbi0+cG9zID0gMTUKKyAgbi0+Yml0cz00CisgIEtFWUxFTkdUSD0zMgorKi8KKworc3RhdGljIGlubGluZSB0X2tleSB0a2V5X2V4dHJhY3RfYml0cyh0X2tleSBhLCBpbnQgb2Zmc2V0LCBpbnQgYml0cykKK3sKKyAgICAgICAgaWYgKG9mZnNldCA8IEtFWUxFTkdUSCkKKwkJcmV0dXJuICgodF9rZXkpKGEgPDwgb2Zmc2V0KSkgPj4gKEtFWUxFTkdUSCAtIGJpdHMpOworICAgICAgICBlbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0a2V5X2VxdWFscyh0X2tleSBhLCB0X2tleSBiKQoreworICByZXR1cm4gYSA9PSBiOworfQorCitzdGF0aWMgaW5saW5lIGludCB0a2V5X3N1Yl9lcXVhbHModF9rZXkgYSwgaW50IG9mZnNldCwgaW50IGJpdHMsIHRfa2V5IGIpCit7CisgICAgIGlmIChiaXRzID09IDAgfHwgb2Zmc2V0ID49IEtFWUxFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBiaXRzID0gYml0cyA+IEtFWUxFTkdUSCA/IEtFWUxFTkdUSCA6IGJpdHM7CisgICAgICAgIHJldHVybiAoKGEgXiBiKSA8PCBvZmZzZXQpID4+IChLRVlMRU5HVEggLSBiaXRzKSA9PSAwOworfQkKKworc3RhdGljIGlubGluZSBpbnQgdGtleV9taXNtYXRjaCh0X2tleSBhLCBpbnQgb2Zmc2V0LCB0X2tleSBiKQoreworCXRfa2V5IGRpZmYgPSBhIF4gYjsKKwlpbnQgaSA9IG9mZnNldDsKKworCWlmKCFkaWZmKSAKKwkgIHJldHVybiAwOworCXdoaWxlKChkaWZmIDw8IGkpID4+IChLRVlMRU5HVEgtMSkgPT0gMCkKKwkJaSsrOworCXJldHVybiBpOworfQorCisvKiBDYW5kaWF0ZSBmb3IgZmliX3NlbWFudGljcyAqLworCitzdGF0aWMgdm9pZCBmbl9mcmVlX2FsaWFzKHN0cnVjdCBmaWJfYWxpYXMgKmZhKQoreworCWZpYl9yZWxlYXNlX2luZm8oZmEtPmZhX2luZm8pOworCWttZW1fY2FjaGVfZnJlZShmbl9hbGlhc19rbWVtLCBmYSk7Cit9CisKKy8qCisgIFRvIHVuZGVyc3RhbmQgdGhpcyBzdHVmZiwgYW4gdW5kZXJzdGFuZGluZyBvZiBrZXlzIGFuZCBhbGwgdGhlaXIgYml0cyBpcyAKKyAgbmVjZXNzYXJ5LiBFdmVyeSBub2RlIGluIHRoZSB0cmllIGhhcyBhIGtleSBhc3NvY2lhdGVkIHdpdGggaXQsIGJ1dCBub3QgCisgIGFsbCBvZiB0aGUgYml0cyBpbiB0aGF0IGtleSBhcmUgc2lnbmlmaWNhbnQuCisKKyAgQ29uc2lkZXIgYSBub2RlICduJyBhbmQgaXRzIHBhcmVudCAndHAnLgorCisgIElmIG4gaXMgYSBsZWFmLCBldmVyeSBiaXQgaW4gaXRzIGtleSBpcyBzaWduaWZpY2FudC4gSXRzIHByZXNlbmNlIGlzIAorICBuZWNlc3NpdGFkZWQgYnkgcGF0aCBjb21wcmVzc2lvbiwgc2luY2UgZHVyaW5nIGEgdHJlZSB0cmF2ZXJzYWwgKHdoZW4gCisgIHNlYXJjaGluZyBmb3IgYSBsZWFmIC0gdW5sZXNzIHdlIGFyZSBkb2luZyBhbiBpbnNlcnRpb24pIHdlIHdpbGwgY29tcGxldGVseSAKKyAgaWdub3JlIGFsbCBza2lwcGVkIGJpdHMgd2UgZW5jb3VudGVyLiBUaHVzIHdlIG5lZWQgdG8gdmVyaWZ5LCBhdCB0aGUgZW5kIG9mIAorICBhIHBvdGVudGlhbGx5IHN1Y2Nlc3NmdWwgc2VhcmNoLCB0aGF0IHdlIGhhdmUgaW5kZWVkIGJlZW4gd2Fsa2luZyB0aGUgCisgIGNvcnJlY3Qga2V5IHBhdGguCisKKyAgTm90ZSB0aGF0IHdlIGNhbiBuZXZlciAibWlzcyIgdGhlIGNvcnJlY3Qga2V5IGluIHRoZSB0cmVlIGlmIHByZXNlbnQgYnkgCisgIGZvbGxvd2luZyB0aGUgd3JvbmcgcGF0aC4gUGF0aCBjb21wcmVzc2lvbiBlbnN1cmVzIHRoYXQgc2VnbWVudHMgb2YgdGhlIGtleSAKKyAgdGhhdCBhcmUgdGhlIHNhbWUgZm9yIGFsbCBrZXlzIHdpdGggYSBnaXZlbiBwcmVmaXggYXJlIHNraXBwZWQsIGJ1dCB0aGUgCisgIHNraXBwZWQgcGFydCAqaXMqIGlkZW50aWNhbCBmb3IgZWFjaCBub2RlIGluIHRoZSBzdWJ0cmllIGJlbG93IHRoZSBza2lwcGVkIAorICBiaXQhIHRyaWVfaW5zZXJ0KCkgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB0YWtlcyBjYXJlIG9mIHRoYXQgLSBub3RlIHRoZSAKKyAgY2FsbCB0byB0a2V5X3N1Yl9lcXVhbHMoKSBpbiB0cmllX2luc2VydCgpLgorCisgIGlmIG4gaXMgYW4gaW50ZXJuYWwgbm9kZSAtIGEgJ3Rub2RlJyBoZXJlLCB0aGUgdmFyaW91cyBwYXJ0cyBvZiBpdHMga2V5IAorICBoYXZlIG1hbnkgZGlmZmVyZW50IG1lYW5pbmdzLgorCisgIEV4YW1wbGU6ICAKKyAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgfCBpIHwgaSB8IGkgfCBpIHwgaSB8IGkgfCBpIHwgTiB8IE4gfCBOIHwgUyB8IFMgfCBTIHwgUyB8IFMgfCBDIHwKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDggICA5ICAxMCAgMTEgIDEyICAxMyAgMTQgIDE1IAorCisgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgIHwgQyB8IEMgfCBDIHwgdSB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAxNiAgMTcgIDE4ICAxOSAgMjAgIDIxICAyMiAgMjMgIDI0ICAyNSAgMjYgIDI3ICAyOCAgMjkgIDMwICAzMQorCisgIHRwLT5wb3MgPSA3CisgIHRwLT5iaXRzID0gMworICBuLT5wb3MgPSAxNQorICBuLT5iaXRzPTQKKworICBGaXJzdCwgbGV0J3MganVzdCBpZ25vcmUgdGhlIGJpdHMgdGhhdCBjb21lIGJlZm9yZSB0aGUgcGFyZW50IHRwLCB0aGF0IGlzIAorICB0aGUgYml0cyBmcm9tIDAgdG8gKHRwLT5wb3MtMSkuIFRoZXkgYXJlICprbm93biogYnV0IGF0IHRoaXMgcG9pbnQgd2UgZG8gCisgIG5vdCB1c2UgdGhlbSBmb3IgYW55dGhpbmcuCisKKyAgVGhlIGJpdHMgZnJvbSAodHAtPnBvcykgdG8gKHRwLT5wb3MgKyB0cC0+Yml0cyAtIDEpIC0gIk4iLCBhYm92ZSAtIGFyZSB0aGUKKyAgaW5kZXggaW50byB0aGUgcGFyZW50J3MgY2hpbGQgYXJyYXkuIFRoYXQgaXMsIHRoZXkgd2lsbCBiZSB1c2VkIHRvIGZpbmQgCisgICduJyBhbW9uZyB0cCdzIGNoaWxkcmVuLgorCisgIFRoZSBiaXRzIGZyb20gKHRwLT5wb3MgKyB0cC0+Yml0cykgdG8gKG4tPnBvcyAtIDEpIC0gIlMiIC0gYXJlIHNraXBwZWQgYml0cworICBmb3IgdGhlIG5vZGUgbi4KKworICBBbGwgdGhlIGJpdHMgd2UgaGF2ZSBzZWVuIHNvIGZhciBhcmUgc2lnbmlmaWNhbnQgdG8gdGhlIG5vZGUgbi4gVGhlIHJlc3QgCisgIG9mIHRoZSBiaXRzIGFyZSByZWFsbHkgbm90IG5lZWRlZCBvciBpbmRlZWQga25vd24gaW4gbi0+a2V5LgorCisgIFRoZSBiaXRzIGZyb20gKG4tPnBvcykgdG8gKG4tPnBvcyArIG4tPmJpdHMgLSAxKSAtICJDIiAtIGFyZSB0aGUgaW5kZXggaW50byAKKyAgbidzIGNoaWxkIGFycmF5LCBhbmQgd2lsbCBvZiBjb3Vyc2UgYmUgZGlmZmVyZW50IGZvciBlYWNoIGNoaWxkLgorICAKKyAgVGhlIHJlc3Qgb2YgdGhlIGJpdHMsIGZyb20gKG4tPnBvcyArIG4tPmJpdHMpIG9ud2FyZCwgYXJlIGNvbXBsZXRlbHkgdW5rbm93bgorICBhdCB0aGlzIHBvaW50LgorCisqLworCitzdGF0aWMgdm9pZCBjaGVja190bm9kZShzdHJ1Y3QgdG5vZGUgKnRuKQoreworCWlmKHRuICYmIHRuLT5wb3MrdG4tPmJpdHMgPiAzMikgeworCQlwcmludGsoIlROT0RFIEVSUk9SIHRuPSVwLCBwb3M9JWQsIGJpdHM9JWRcbiIsIHRuLCB0bi0+cG9zLCB0bi0+Yml0cyk7CisJfQorfQorCitzdGF0aWMgaW50IGhhbHZlX3RocmVzaG9sZCA9IDI1Oworc3RhdGljIGludCBpbmZsYXRlX3RocmVzaG9sZCA9IDUwOworCitzdGF0aWMgc3RydWN0IGxlYWYgKmxlYWZfbmV3KHZvaWQpCit7CisJc3RydWN0IGxlYWYgKmwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGVhZiksICBHRlBfS0VSTkVMKTsKKwlpZihsKSB7CisJCU5PREVfSU5JVF9QQVJFTlQobCwgVF9MRUFGKTsKKwkJSU5JVF9ITElTVF9IRUFEKCZsLT5saXN0KTsKKwl9CisJcmV0dXJuIGw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGVhZl9pbmZvICpsZWFmX2luZm9fbmV3KGludCBwbGVuKQoreworCXN0cnVjdCBsZWFmX2luZm8gKmxpID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxlYWZfaW5mbyksICBHRlBfS0VSTkVMKTsKKwlsaS0+cGxlbiA9IHBsZW47CisJSU5JVF9MSVNUX0hFQUQoJmxpLT5mYWxoKTsKKwlyZXR1cm4gbGk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2xlYWYoc3RydWN0IGxlYWYgKmwpCit7CisJa2ZyZWUobCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2xlYWZfaW5mbyhzdHJ1Y3QgbGVhZl9pbmZvICpsaSkKK3sKKwlrZnJlZShsaSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdG5vZGUqIHRub2RlX25ldyh0X2tleSBrZXksIGludCBwb3MsIGludCBiaXRzKQoreworCWludCBuY2hpbGRyZW4gPSAxPDxiaXRzOworCWludCBzeiA9IHNpemVvZihzdHJ1Y3QgdG5vZGUpICsgbmNoaWxkcmVuICogc2l6ZW9mKHN0cnVjdCBub2RlICopOworCXN0cnVjdCB0bm9kZSAqdG4gPSBrbWFsbG9jKHN6LCAgR0ZQX0tFUk5FTCk7CisKKwlpZih0bikgIHsKKwkJbWVtc2V0KHRuLCAwLCBzeik7CisJCU5PREVfSU5JVF9QQVJFTlQodG4sIFRfVE5PREUpOworCQl0bi0+cG9zID0gcG9zOworCQl0bi0+Yml0cyA9IGJpdHM7CisJCXRuLT5rZXkgPSBrZXk7CisJCXRuLT5mdWxsX2NoaWxkcmVuID0gMDsKKwkJdG4tPmVtcHR5X2NoaWxkcmVuID0gMTw8Yml0czsKKwl9CisJaWYodHJpZV9kZWJ1ZyA+IDApIAorCQlwcmludGsoIkFUICVwIHM9JXUgJXVcbiIsIHRuLCAodW5zaWduZWQgaW50KSBzaXplb2Yoc3RydWN0IHRub2RlKSwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpIChzaXplb2Yoc3RydWN0IG5vZGUpICogMTw8Yml0cykpOworCXJldHVybiB0bjsKK30KKworc3RhdGljIHZvaWQgdG5vZGVfZnJlZShzdHJ1Y3QgdG5vZGUgKnRuKQoreworCWlmKCF0bikgeworCQl0cmllX2J1ZygidG5vZGVfZnJlZVxuIik7CisJfQorCWlmKElTX0xFQUYodG4pKSB7CisJCWZyZWVfbGVhZigoc3RydWN0IGxlYWYgKil0bik7CisJCWlmKHRyaWVfZGVidWcgPiAwICkgCisJCQlwcmludGsoIkZMICVwIFxuIiwgdG4pOworCX0KKwllbHNlIGlmKElTX1ROT0RFKHRuKSkgeyAKKwkJa2ZyZWUodG4pOworCQlpZih0cmllX2RlYnVnID4gMCApIAorCQkJcHJpbnRrKCJGVCAlcCBcbiIsIHRuKTsKKwl9CisJZWxzZSB7CisJCXRyaWVfYnVnKCJ0bm9kZV9mcmVlXG4iKTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIGEgdG5vZGUgJ24nIGlzICJmdWxsIiwgaS5lLiBpdCBpcyBhbiBpbnRlcm5hbCBub2RlCisgKiBhbmQgbm8gYml0cyBhcmUgc2tpcHBlZC4gU2VlIGRpc2N1c3Npb24gaW4gZHludHJlZSBwYXBlciBwLiA2CisgKi8KKworc3RhdGljIGlubGluZSBpbnQgdG5vZGVfZnVsbChzdHJ1Y3QgdG5vZGUgKnRuLCBzdHJ1Y3Qgbm9kZSAqbikKK3sKKwlpZihuID09IE5VTEwgfHwgSVNfTEVBRihuKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKChzdHJ1Y3QgdG5vZGUgKikgbiktPnBvcyA9PSB0bi0+cG9zICsgdG4tPmJpdHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfY2hpbGQoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqdG4sIGludCBpLCBzdHJ1Y3Qgbm9kZSAqbikgCit7CisJdG5vZGVfcHV0X2NoaWxkX3Jlb3JnKHRuLCBpLCBuLCAtMSk7Cit9CisKKyAvKiAKKyAgKiBBZGQgYSBjaGlsZCBhdCBwb3NpdGlvbiBpIG92ZXJ3cml0aW5nIHRoZSBvbGQgdmFsdWUuCisgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiBmdWxsX2NoaWxkcmVuIGFuZCBlbXB0eV9jaGlsZHJlbi4KKyAgKi8KKworc3RhdGljIHZvaWQgdG5vZGVfcHV0X2NoaWxkX3Jlb3JnKHN0cnVjdCB0bm9kZSAqdG4sIGludCBpLCBzdHJ1Y3Qgbm9kZSAqbiwgaW50IHdhc2Z1bGwpIAoreworCXN0cnVjdCBub2RlICpjaGk7CisJaW50IGlzZnVsbDsKKworCWlmKGkgPj0gIDE8PHRuLT5iaXRzKSB7CisJCXByaW50aygiYml0cz0lZCwgaT0lZFxuIiwgdG4tPmJpdHMsIGkpOworCQl0cmllX2J1ZygidG5vZGVfcHV0X2NoaWxkX3Jlb3JnIGJpdHMiKTsKKwl9CisJd3JpdGVfbG9ja19iaCgmZmliX2xvY2spOworCWNoaSA9IHRuLT5jaGlsZFtpXTsJCisKKwkvKiB1cGRhdGUgZW1wdHlDaGlsZHJlbiAqLworCWlmIChuID09IE5VTEwgJiYgY2hpICE9IE5VTEwpCisJCXRuLT5lbXB0eV9jaGlsZHJlbisrOworCWVsc2UgaWYgKG4gIT0gTlVMTCAmJiBjaGkgPT0gTlVMTCkKKwkJdG4tPmVtcHR5X2NoaWxkcmVuLS07CisgIAorCS8qIHVwZGF0ZSBmdWxsQ2hpbGRyZW4gKi8KKyAgICAgICAgaWYgKHdhc2Z1bGwgPT0gLTEpCisJCXdhc2Z1bGwgPSB0bm9kZV9mdWxsKHRuLCBjaGkpOworCisJaXNmdWxsID0gdG5vZGVfZnVsbCh0biwgbik7CisJaWYgKHdhc2Z1bGwgJiYgIWlzZnVsbCkgCisJCXRuLT5mdWxsX2NoaWxkcmVuLS07CisJCisJZWxzZSBpZiAoIXdhc2Z1bGwgJiYgaXNmdWxsKSAKKwkJdG4tPmZ1bGxfY2hpbGRyZW4rKzsKKwlpZihuKSAKKwkJTk9ERV9TRVRfUEFSRU5UKG4sIHRuKTsJCisKKwl0bi0+Y2hpbGRbaV0gPSBuOworCXdyaXRlX3VubG9ja19iaCgmZmliX2xvY2spOworfQorCitzdGF0aWMgc3RydWN0IG5vZGUgKnJlc2l6ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bikgCit7CisJaW50IGk7CisKKyAJaWYgKCF0bikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZih0cmllX2RlYnVnKSAKKwkJcHJpbnRrKCJJbiB0bm9kZV9yZXNpemUgJXAgaW5mbGF0ZV90aHJlc2hvbGQ9JWQgdGhyZXNob2xkPSVkXG4iLCAKKwkJICAgICAgdG4sIGluZmxhdGVfdGhyZXNob2xkLCBoYWx2ZV90aHJlc2hvbGQpOworCisJLyogTm8gY2hpbGRyZW4gKi8KKwlpZiAodG4tPmVtcHR5X2NoaWxkcmVuID09IHRub2RlX2NoaWxkX2xlbmd0aCh0bikpIHsKKwkJdG5vZGVfZnJlZSh0bik7CisJCXJldHVybiBOVUxMOworCX0KKwkvKiBPbmUgY2hpbGQgKi8KKwlpZiAodG4tPmVtcHR5X2NoaWxkcmVuID09IHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSAxKQorCQlmb3IgKGkgPSAwOyBpIDwgdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKTsgaSsrKSB7CisKKwkJCXdyaXRlX2xvY2tfYmgoJmZpYl9sb2NrKTsKKwkJCWlmICh0bi0+Y2hpbGRbaV0gIT0gTlVMTCkgeworCisJCQkJLyogY29tcHJlc3Mgb25lIGxldmVsICovCisJCQkJc3RydWN0IG5vZGUgKm4gPSB0bi0+Y2hpbGRbaV07CisJCQkJaWYobikKKwkJCQkJTk9ERV9JTklUX1BBUkVOVChuLCBOT0RFX1RZUEUobikpOworCisJCQkJd3JpdGVfdW5sb2NrX2JoKCZmaWJfbG9jayk7CisJCQkJdG5vZGVfZnJlZSh0bik7CisJCQkJcmV0dXJuIG47CisJCQl9CisJCQl3cml0ZV91bmxvY2tfYmgoJmZpYl9sb2NrKTsKKwkJfQorCS8qIAorCSAqIERvdWJsZSBhcyBsb25nIGFzIHRoZSByZXN1bHRpbmcgbm9kZSBoYXMgYSBudW1iZXIgb2YKKwkgKiBub25lbXB0eSBub2RlcyB0aGF0IGFyZSBhYm92ZSB0aGUgdGhyZXNob2xkLgorCSAqLworCisJLyoKKwkgKiBGcm9tICJJbXBsZW1lbnRpbmcgYSBkeW5hbWljIGNvbXByZXNzZWQgdHJpZSIgYnkgU3RlZmFuIE5pbHNzb24gb2YgCisJICogdGhlIEhlbHNpbmtpIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSBhbmQgTWF0dGkgVGlra2FuZW4gb2YgTm9raWEgCisJICogVGVsZWNvbW11bmljYXRpb25zLCBwYWdlIDY6CisJICogIkEgbm9kZSBpcyBkb3VibGVkIGlmIHRoZSByYXRpbyBvZiBub24tZW1wdHkgY2hpbGRyZW4gdG8gYWxsIAorCSAqIGNoaWxkcmVuIGluIHRoZSAqZG91YmxlZCogbm9kZSBpcyBhdCBsZWFzdCAnaGlnaCcuIgorCSAqCisJICogJ2hpZ2gnIGluIHRoaXMgaW5zdGFuY2UgaXMgdGhlIHZhcmlhYmxlICdpbmZsYXRlX3RocmVzaG9sZCcuIEl0IAorCSAqIGlzIGV4cHJlc3NlZCBhcyBhIHBlcmNlbnRhZ2UsIHNvIHdlIG11bHRpcGx5IGl0IHdpdGggCisJICogdG5vZGVfY2hpbGRfbGVuZ3RoKCkgYW5kIGluc3RlYWQgb2YgbXVsdGlwbHlpbmcgYnkgMiAoc2luY2UgdGhlIAorCSAqIGNoaWxkIGFycmF5IHdpbGwgYmUgZG91YmxlZCBieSBpbmZsYXRlKCkpIGFuZCBtdWx0aXBseWluZyAKKwkgKiB0aGUgbGVmdC1oYW5kIHNpZGUgYnkgMTAwICh0byBoYW5kbGUgdGhlIHBlcmNlbnRhZ2UgdGhpbmcpIHdlIAorCSAqIG11bHRpcGx5IHRoZSBsZWZ0LWhhbmQgc2lkZSBieSA1MC4KKwkgKiAKKwkgKiBUaGUgbGVmdC1oYW5kIHNpZGUgbWF5IGxvb2sgYSBiaXQgd2VpcmQ6IHRub2RlX2NoaWxkX2xlbmd0aCh0bikgCisJICogLSB0bi0+ZW1wdHlfY2hpbGRyZW4gaXMgb2YgY291cnNlIHRoZSBudW1iZXIgb2Ygbm9uLW51bGwgY2hpbGRyZW4gCisJICogaW4gdGhlIGN1cnJlbnQgbm9kZS4gdG4tPmZ1bGxfY2hpbGRyZW4gaXMgdGhlIG51bWJlciBvZiAiZnVsbCIgCisJICogY2hpbGRyZW4sIHRoYXQgaXMgbm9uLW51bGwgdG5vZGVzIHdpdGggYSBza2lwIHZhbHVlIG9mIDAuCisJICogQWxsIG9mIHRob3NlIHdpbGwgYmUgZG91YmxlZCBpbiB0aGUgcmVzdWx0aW5nIGluZmxhdGVkIHRub2RlLCBzbyAKKwkgKiB3ZSBqdXN0IGNvdW50IHRoZW0gb25lIGV4dHJhIHRpbWUgaGVyZS4KKwkgKiAKKwkgKiBBIGNsZWFyZXIgd2F5IHRvIHdyaXRlIHRoaXMgd291bGQgYmU6CisJICogCisJICogdG9fYmVfZG91YmxlZCA9IHRuLT5mdWxsX2NoaWxkcmVuOworCSAqIG5vdF90b19iZV9kb3VibGVkID0gdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSAtIHRuLT5lbXB0eV9jaGlsZHJlbiAtIAorCSAqICAgICB0bi0+ZnVsbF9jaGlsZHJlbjsKKwkgKgorCSAqIG5ld19jaGlsZF9sZW5ndGggPSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pICogMjsKKwkgKgorCSAqIG5ld19maWxsX2ZhY3RvciA9IDEwMCAqIChub3RfdG9fYmVfZG91YmxlZCArIDIqdG9fYmVfZG91YmxlZCkgLyAKKwkgKiAgICAgIG5ld19jaGlsZF9sZW5ndGg7CisJICogaWYgKG5ld19maWxsX2ZhY3RvciA+PSBpbmZsYXRlX3RocmVzaG9sZCkKKwkgKiAKKwkgKiAuLi5hbmQgc28gb24sIHRobyBpdCB3b3VsZCBtZXNzIHVwIHRoZSB3aGlsZSgpIGxvb3AuCisJICogCisJICogYW55d2F5LAorCSAqIDEwMCAqIChub3RfdG9fYmVfZG91YmxlZCArIDIqdG9fYmVfZG91YmxlZCkgLyBuZXdfY2hpbGRfbGVuZ3RoID49CisJICogICAgICBpbmZsYXRlX3RocmVzaG9sZAorCSAqIAorCSAqIGF2b2lkIGEgZGl2aXNpb246CisJICogMTAwICogKG5vdF90b19iZV9kb3VibGVkICsgMip0b19iZV9kb3VibGVkKSA+PQorCSAqICAgICAgaW5mbGF0ZV90aHJlc2hvbGQgKiBuZXdfY2hpbGRfbGVuZ3RoCisJICogCisJICogZXhwYW5kIG5vdF90b19iZV9kb3VibGVkIGFuZCB0b19iZV9kb3VibGVkLCBhbmQgc2hvcnRlbjoKKwkgKiAxMDAgKiAodG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSAtIHRuLT5lbXB0eV9jaGlsZHJlbiArIAorCSAqICAgIHRuLT5mdWxsX2NoaWxkcmVuICkgPj0gaW5mbGF0ZV90aHJlc2hvbGQgKiBuZXdfY2hpbGRfbGVuZ3RoCisJICogCisJICogZXhwYW5kIG5ld19jaGlsZF9sZW5ndGg6CisJICogMTAwICogKHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSB0bi0+ZW1wdHlfY2hpbGRyZW4gKyAKKwkgKiAgICB0bi0+ZnVsbF9jaGlsZHJlbiApID49CisJICogICAgICBpbmZsYXRlX3RocmVzaG9sZCAqIHRub2RlX2NoaWxkX2xlbmd0aCh0bikgKiAyCisJICogCisJICogc2hvcnRlbiBhZ2FpbjoKKwkgKiA1MCAqICh0bi0+ZnVsbF9jaGlsZHJlbiArIHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSAKKwkgKiAgICB0bi0+ZW1wdHlfY2hpbGRyZW4gKSA+PSBpbmZsYXRlX3RocmVzaG9sZCAqIAorCSAqICAgIHRub2RlX2NoaWxkX2xlbmd0aCh0bikKKwkgKiAKKwkgKi8KKworCWNoZWNrX3Rub2RlKHRuKTsKKworCXdoaWxlICgodG4tPmZ1bGxfY2hpbGRyZW4gPiAwICYmCisJICAgICAgIDUwICogKHRuLT5mdWxsX2NoaWxkcmVuICsgdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSAtIHRuLT5lbXB0eV9jaGlsZHJlbikgPj0KKwkJCQlpbmZsYXRlX3RocmVzaG9sZCAqIHRub2RlX2NoaWxkX2xlbmd0aCh0bikpKSB7CisKKwkJdG4gPSBpbmZsYXRlKHQsIHRuKTsKKwl9CisKKwljaGVja190bm9kZSh0bik7CisKKwkvKgorCSAqIEhhbHZlIGFzIGxvbmcgYXMgdGhlIG51bWJlciBvZiBlbXB0eSBjaGlsZHJlbiBpbiB0aGlzCisJICogbm9kZSBpcyBhYm92ZSB0aHJlc2hvbGQuCisJICovCisJd2hpbGUgKHRuLT5iaXRzID4gMSAmJgorCSAgICAgICAxMDAgKiAodG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSAtIHRuLT5lbXB0eV9jaGlsZHJlbikgPAorCSAgICAgICBoYWx2ZV90aHJlc2hvbGQgKiB0bm9kZV9jaGlsZF9sZW5ndGgodG4pKQorCisJCXRuID0gaGFsdmUodCwgdG4pOworICAKKwkvKiBPbmx5IG9uZSBjaGlsZCByZW1haW5zICovCisKKwlpZiAodG4tPmVtcHR5X2NoaWxkcmVuID09IHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSAxKQorCQlmb3IgKGkgPSAwOyBpIDwgdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKTsgaSsrKSB7CisJCQkKKwkJCXdyaXRlX2xvY2tfYmgoJmZpYl9sb2NrKTsKKwkJCWlmICh0bi0+Y2hpbGRbaV0gIT0gTlVMTCkgeworCQkJCS8qIGNvbXByZXNzIG9uZSBsZXZlbCAqLworCQkJCXN0cnVjdCBub2RlICpuID0gdG4tPmNoaWxkW2ldOworCisJCQkJaWYobikKKwkJCQkJTk9ERV9JTklUX1BBUkVOVChuLCBOT0RFX1RZUEUobikpOworCisJCQkJd3JpdGVfdW5sb2NrX2JoKCZmaWJfbG9jayk7CisJCQkJdG5vZGVfZnJlZSh0bik7CisJCQkJcmV0dXJuIG47CisJCQl9CisJCQl3cml0ZV91bmxvY2tfYmgoJmZpYl9sb2NrKTsKKwkJfQorCisJcmV0dXJuIChzdHJ1Y3Qgbm9kZSAqKSB0bjsKK30KKworc3RhdGljIHN0cnVjdCB0bm9kZSAqaW5mbGF0ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bikKK3sKKwlzdHJ1Y3QgdG5vZGUgKmlub2RlOworCXN0cnVjdCB0bm9kZSAqb2xkdG5vZGUgPSB0bjsKKwlpbnQgb2xlbiA9IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7CisJaW50IGk7CisKKyAgCWlmKHRyaWVfZGVidWcpIAorCQlwcmludGsoIkluIGluZmxhdGVcbiIpOworCisJdG4gPSB0bm9kZV9uZXcob2xkdG5vZGUtPmtleSwgb2xkdG5vZGUtPnBvcywgb2xkdG5vZGUtPmJpdHMgKyAxKTsKKworCWlmICghdG4pCisJCXRyaWVfYnVnKCJ0bm9kZV9uZXcgZmFpbGVkIik7CisKKwlmb3IoaSA9IDA7IGkgPCBvbGVuOyBpKyspIHsKKwkJc3RydWN0IG5vZGUgKm5vZGUgPSB0bm9kZV9nZXRfY2hpbGQob2xkdG5vZGUsIGkpOworICAgICAgCisJCS8qIEFuIGVtcHR5IGNoaWxkICovCisJCWlmIChub2RlID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKiBBIGxlYWYgb3IgYW4gaW50ZXJuYWwgbm9kZSB3aXRoIHNraXBwZWQgYml0cyAqLworCisJCWlmKElTX0xFQUYobm9kZSkgfHwgKChzdHJ1Y3QgdG5vZGUgKikgbm9kZSktPnBvcyA+CisJCSAgIHRuLT5wb3MgKyB0bi0+Yml0cyAtIDEpIHsKKwkJCWlmKHRrZXlfZXh0cmFjdF9iaXRzKG5vZGUtPmtleSwgdG4tPnBvcyArIHRuLT5iaXRzIC0gMSwKKwkJCQkJICAgICAxKSA9PSAwKQorCQkJCXB1dF9jaGlsZCh0LCB0biwgMippLCBub2RlKTsKKwkJCWVsc2UKKwkJCQlwdXRfY2hpbGQodCwgdG4sIDIqaSsxLCBub2RlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQW4gaW50ZXJuYWwgbm9kZSB3aXRoIHR3byBjaGlsZHJlbiAqLworCQlpbm9kZSA9IChzdHJ1Y3QgdG5vZGUgKikgbm9kZTsKKworCQlpZiAoaW5vZGUtPmJpdHMgPT0gMSkgeworCQkJcHV0X2NoaWxkKHQsIHRuLCAyKmksIGlub2RlLT5jaGlsZFswXSk7CisJCQlwdXRfY2hpbGQodCwgdG4sIDIqaSsxLCBpbm9kZS0+Y2hpbGRbMV0pOworCisJCQl0bm9kZV9mcmVlKGlub2RlKTsKKwkJfQorCisJCQkvKiBBbiBpbnRlcm5hbCBub2RlIHdpdGggbW9yZSB0aGFuIHR3byBjaGlsZHJlbiAqLworCQllbHNlIHsKKwkJCXN0cnVjdCB0bm9kZSAqbGVmdCwgKnJpZ2h0OworCQkJaW50IHNpemUsIGo7CisKKwkJCS8qIFdlIHdpbGwgcmVwbGFjZSB0aGlzIG5vZGUgJ2lub2RlJyB3aXRoIHR3byBuZXcgCisJCQkgKiBvbmVzLCAnbGVmdCcgYW5kICdyaWdodCcsIGVhY2ggd2l0aCBoYWxmIG9mIHRoZSAKKwkJCSAqIG9yaWdpbmFsIGNoaWxkcmVuLiBUaGUgdHdvIG5ldyBub2RlcyB3aWxsIGhhdmUgCisJCQkgKiBhIHBvc2l0aW9uIG9uZSBiaXQgZnVydGhlciBkb3duIHRoZSBrZXkgYW5kIHRoaXMgCisJCQkgKiBtZWFucyB0aGF0IHRoZSAic2lnbmlmaWNhbnQiIHBhcnQgb2YgdGhlaXIga2V5cyAKKwkJCSAqIChzZWUgdGhlIGRpc2N1c3Npb24gbmVhciB0aGUgdG9wIG9mIHRoaXMgZmlsZSkgCisJCQkgKiB3aWxsIGRpZmZlciBieSBvbmUgYml0LCB3aGljaCB3aWxsIGJlICIwIiBpbiAKKwkJCSAqIGxlZnQncyBrZXkgYW5kICIxIiBpbiByaWdodCdzIGtleS4gU2luY2Ugd2UgYXJlIAorCQkJICogbW92aW5nIHRoZSBrZXkgcG9zaXRpb24gYnkgb25lIHN0ZXAsIHRoZSBiaXQgdGhhdCAKKwkJCSAqIHdlIGFyZSBtb3ZpbmcgYXdheSBmcm9tIC0gdGhlIGJpdCBhdCBwb3NpdGlvbiAKKwkJCSAqIChpbm9kZS0+cG9zKSAtIGlzIHRoZSBvbmUgdGhhdCB3aWxsIGRpZmZlciBiZXR3ZWVuIAorCQkJICogbGVmdCBhbmQgcmlnaHQuIFNvLi4uIHdlIHN5bnRoZXNpemUgdGhhdCBiaXQgaW4gdGhlCisJCQkgKiB0d28gIG5ldyBrZXlzLgorCQkJICogVGhlIG1hc2sgJ20nIGJlbG93IHdpbGwgYmUgYSBzaW5nbGUgIm9uZSIgYml0IGF0IAorCQkJICogdGhlIHBvc2l0aW9uIChpbm9kZS0+cG9zKQorCQkJICovCisKKwkJCXRfa2V5IG0gPSBUS0VZX0dFVF9NQVNLKGlub2RlLT5wb3MsIDEpOworIAorCQkJLyogVXNlIHRoZSBvbGQga2V5LCBidXQgc2V0IHRoZSBuZXcgc2lnbmlmaWNhbnQgCisJCQkgKiAgIGJpdCB0byB6ZXJvLiAKKwkJCSAqLworCQkJbGVmdCA9IHRub2RlX25ldyhpbm9kZS0+a2V5Jih+bSksIGlub2RlLT5wb3MgKyAxLAorCQkJCQkgaW5vZGUtPmJpdHMgLSAxKTsKKworCQkJaWYoIWxlZnQpIAorCQkJCXRyaWVfYnVnKCJ0bm9kZV9uZXcgZmFpbGVkIik7CisJCQkKKwkJCQorCQkJLyogVXNlIHRoZSBvbGQga2V5LCBidXQgc2V0IHRoZSBuZXcgc2lnbmlmaWNhbnQgCisJCQkgKiBiaXQgdG8gb25lLiAKKwkJCSAqLworCQkJcmlnaHQgPSB0bm9kZV9uZXcoaW5vZGUtPmtleXxtLCBpbm9kZS0+cG9zICsgMSwKKwkJCQkJICBpbm9kZS0+Yml0cyAtIDEpOworCisJCQlpZighcmlnaHQpIAorCQkJCXRyaWVfYnVnKCJ0bm9kZV9uZXcgZmFpbGVkIik7CisJCQkKKwkJCXNpemUgPSB0bm9kZV9jaGlsZF9sZW5ndGgobGVmdCk7CisJCQlmb3IoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKwkJCQlwdXRfY2hpbGQodCwgbGVmdCwgaiwgaW5vZGUtPmNoaWxkW2pdKTsKKwkJCQlwdXRfY2hpbGQodCwgcmlnaHQsIGosIGlub2RlLT5jaGlsZFtqICsgc2l6ZV0pOworCQkJfQorCQkJcHV0X2NoaWxkKHQsIHRuLCAyKmksIHJlc2l6ZSh0LCBsZWZ0KSk7CisJCQlwdXRfY2hpbGQodCwgdG4sIDIqaSsxLCByZXNpemUodCwgcmlnaHQpKTsKKworCQkJdG5vZGVfZnJlZShpbm9kZSk7CisJCX0KKwl9CisJdG5vZGVfZnJlZShvbGR0bm9kZSk7CisJcmV0dXJuIHRuOworfQorCitzdGF0aWMgc3RydWN0IHRub2RlICpoYWx2ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bikKK3sKKwlzdHJ1Y3QgdG5vZGUgKm9sZHRub2RlID0gdG47CisJc3RydWN0IG5vZGUgKmxlZnQsICpyaWdodDsKKwlpbnQgaTsKKwlpbnQgb2xlbiA9IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7CisKKwlpZih0cmllX2RlYnVnKSBwcmludGsoIkluIGhhbHZlXG4iKTsKKyAgCisJdG49dG5vZGVfbmV3KG9sZHRub2RlLT5rZXksIG9sZHRub2RlLT5wb3MsIG9sZHRub2RlLT5iaXRzIC0gMSk7CisKKwlpZighdG4pIAorCQl0cmllX2J1ZygidG5vZGVfbmV3IGZhaWxlZCIpOworCisJZm9yKGkgPSAwOyBpIDwgb2xlbjsgaSArPSAyKSB7CisJCWxlZnQgPSB0bm9kZV9nZXRfY2hpbGQob2xkdG5vZGUsIGkpOworCQlyaWdodCA9IHRub2RlX2dldF9jaGlsZChvbGR0bm9kZSwgaSsxKTsKKyAgICAKKwkJLyogQXQgbGVhc3Qgb25lIG9mIHRoZSBjaGlsZHJlbiBpcyBlbXB0eSAqLworCQlpZiAobGVmdCA9PSBOVUxMKSB7CisJCQlpZiAocmlnaHQgPT0gTlVMTCkgICAgLyogQm90aCBhcmUgZW1wdHkgKi8KKwkJCQljb250aW51ZTsKKwkJCXB1dF9jaGlsZCh0LCB0biwgaS8yLCByaWdodCk7CisJCX0gZWxzZSBpZiAocmlnaHQgPT0gTlVMTCkKKwkJCXB1dF9jaGlsZCh0LCB0biwgaS8yLCBsZWZ0KTsKKyAgICAgCisJCS8qIFR3byBub25lbXB0eSBjaGlsZHJlbiAqLworCQllbHNlIHsKKwkJCXN0cnVjdCB0bm9kZSAqbmV3QmluTm9kZSA9CisJCQkJdG5vZGVfbmV3KGxlZnQtPmtleSwgdG4tPnBvcyArIHRuLT5iaXRzLCAxKTsKKworCQkJaWYoIW5ld0Jpbk5vZGUpIAorCQkJCXRyaWVfYnVnKCJ0bm9kZV9uZXcgZmFpbGVkIik7CisKKwkJCXB1dF9jaGlsZCh0LCBuZXdCaW5Ob2RlLCAwLCBsZWZ0KTsKKwkJCXB1dF9jaGlsZCh0LCBuZXdCaW5Ob2RlLCAxLCByaWdodCk7CisJCQlwdXRfY2hpbGQodCwgdG4sIGkvMiwgcmVzaXplKHQsIG5ld0Jpbk5vZGUpKTsKKwkJfQorCX0KKwl0bm9kZV9mcmVlKG9sZHRub2RlKTsKKwlyZXR1cm4gdG47Cit9CisKK3N0YXRpYyB2b2lkICp0cmllX2luaXQoc3RydWN0IHRyaWUgKnQpCit7CisJaWYodCkgeworCQl0LT5zaXplID0gMDsKKwkJdC0+dHJpZSA9IE5VTEw7CisJCXQtPnJldmlzaW9uID0gMDsKKyNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKKyAgICAgICAJCW1lbXNldCgmdC0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgdHJpZV91c2Vfc3RhdHMpKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gdDsKK30KKworc3RhdGljIHN0cnVjdCBsZWFmX2luZm8gKmZpbmRfbGVhZl9pbmZvKHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLCBpbnQgcGxlbikKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbGVhZl9pbmZvICpsaTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpLCBub2RlLCBoZWFkLCBobGlzdCkgeworCQkgIAorCQlpZiAoIGxpLT5wbGVuID09IHBsZW4gKQorCQkJcmV0dXJuIGxpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9oZWFkICogZ2V0X2ZhX2hlYWQoc3RydWN0IGxlYWYgKmwsIGludCBwbGVuKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmZhX2hlYWQ9TlVMTDsKKwlzdHJ1Y3QgbGVhZl9pbmZvICpsaSA9IGZpbmRfbGVhZl9pbmZvKCZsLT5saXN0LCBwbGVuKTsKKwkKKwlpZihsaSkgCisJCWZhX2hlYWQgPSAmbGktPmZhbGg7CisJCisJcmV0dXJuIGZhX2hlYWQ7Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF9sZWFmX2luZm8oc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsZWFmX2luZm8gKm5ldykKK3sKKwlzdHJ1Y3QgbGVhZl9pbmZvICpsaT1OVUxMLCAqbGFzdD1OVUxMOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOworCisJd3JpdGVfbG9ja19iaCgmZmliX2xvY2spOworCQorCWlmKGhsaXN0X2VtcHR5KGhlYWQpKQorCQlobGlzdF9hZGRfaGVhZCgmbmV3LT5obGlzdCwgaGVhZCk7CisJZWxzZSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGksIG5vZGUsIHRtcCwgaGVhZCwgaGxpc3QpIHsKKwkJCQorCQkJaWYgKG5ldy0+cGxlbiA+IGxpLT5wbGVuKSAKKwkJCQlicmVhazsKKwkJCQorCQkJbGFzdCA9IGxpOworCQl9CisJCWlmKGxhc3QpIAorCQkJaGxpc3RfYWRkX2FmdGVyKCZsYXN0LT5obGlzdCwgJm5ldy0+aGxpc3QpOworCQllbHNlIAorCQkJaGxpc3RfYWRkX2JlZm9yZSgmbmV3LT5obGlzdCwgJmxpLT5obGlzdCk7CisJfQorCXdyaXRlX3VubG9ja19iaCgmZmliX2xvY2spOworfQorCitzdGF0aWMgc3RydWN0IGxlYWYgKgorZmliX2ZpbmRfbm9kZShzdHJ1Y3QgdHJpZSAqdCwgdTMyIGtleSkKK3sKKwlpbnQgcG9zOworCXN0cnVjdCB0bm9kZSAqdG47CisJc3RydWN0IG5vZGUgKm47CisKKwlwb3MgPSAwOworCW49dC0+dHJpZTsKKworCXdoaWxlIChuICE9IE5VTEwgJiYgIE5PREVfVFlQRShuKSA9PSBUX1ROT0RFKSB7CisJCXRuID0gKHN0cnVjdCB0bm9kZSAqKSBuOworCQkJCisJCWNoZWNrX3Rub2RlKHRuKTsKKwkJCQorCQlpZih0a2V5X3N1Yl9lcXVhbHModG4tPmtleSwgcG9zLCB0bi0+cG9zLXBvcywga2V5KSkgeworCQkJcG9zPXRuLT5wb3MgKyB0bi0+Yml0czsKKwkJCW4gPSB0bm9kZV9nZXRfY2hpbGQodG4sIHRrZXlfZXh0cmFjdF9iaXRzKGtleSwgdG4tPnBvcywgdG4tPmJpdHMpKTsKKwkJfQorCQllbHNlCisJCQlicmVhazsKKwl9CisJLyogQ2FzZSB3ZSBoYXZlIGZvdW5kIGEgbGVhZi4gQ29tcGFyZSBwcmVmaXhlcyAqLworCisJaWYgKG4gIT0gTlVMTCAmJiBJU19MRUFGKG4pICYmIHRrZXlfZXF1YWxzKGtleSwgbi0+a2V5KSkgeworCQlzdHJ1Y3QgbGVhZiAqbCA9IChzdHJ1Y3QgbGVhZiAqKSBuOworCQlyZXR1cm4gbDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm9kZSAqdHJpZV9yZWJhbGFuY2Uoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqdG4pCit7CisJaW50IGkgPSAwOworCWludCB3YXNmdWxsOworCXRfa2V5IGNpbmRleCwga2V5OworCXN0cnVjdCB0bm9kZSAqdHAgPSBOVUxMOworCisJaWYoIXRuKSAKKwkJQlVHKCk7CisJCisJa2V5ID0gdG4tPmtleTsKKwlpID0gMDsKKworCXdoaWxlICh0biAhPSBOVUxMICYmIE5PREVfUEFSRU5UKHRuKSAhPSBOVUxMKSB7CisKKwkJaWYoIGkgPiAxMCApIHsKKwkJCXByaW50aygiUmViYWxhbmNlIHRuPSVwIFxuIiwgdG4pOworCQkJaWYodG4pIAkJcHJpbnRrKCJ0bi0+cGFyZW50PSVwIFxuIiwgTk9ERV9QQVJFTlQodG4pKTsKKwkJCQorCQkJcHJpbnRrKCJSZWJhbGFuY2UgdHA9JXAgXG4iLCB0cCk7CisJCQlpZih0cCkgCQlwcmludGsoInRwLT5wYXJlbnQ9JXAgXG4iLCBOT0RFX1BBUkVOVCh0cCkpOworCQl9CisKKwkJaWYoIGkgPiAxMiApIEJVRygpOworCQlpKys7CisKKwkJdHAgPSBOT0RFX1BBUkVOVCh0bik7CisJCWNpbmRleCA9IHRrZXlfZXh0cmFjdF9iaXRzKGtleSwgdHAtPnBvcywgdHAtPmJpdHMpOworCQl3YXNmdWxsID0gdG5vZGVfZnVsbCh0cCwgdG5vZGVfZ2V0X2NoaWxkKHRwLCBjaW5kZXgpKTsKKwkJdG4gPSAoc3RydWN0IHRub2RlICopIHJlc2l6ZSAodCwgKHN0cnVjdCB0bm9kZSAqKXRuKTsKKwkJdG5vZGVfcHV0X2NoaWxkX3Jlb3JnKChzdHJ1Y3QgdG5vZGUgKil0cCwgY2luZGV4LChzdHJ1Y3Qgbm9kZSopdG4sIHdhc2Z1bGwpOworCQkKKwkJaWYoIU5PREVfUEFSRU5UKHRuKSkKKwkJCWJyZWFrOworCisJCXRuID0gTk9ERV9QQVJFTlQodG4pOworCX0KKwkvKiBIYW5kbGUgbGFzdCAodG9wKSB0bm9kZSAqLworCWlmIChJU19UTk9ERSh0bikpIAorCQl0biA9IChzdHJ1Y3QgdG5vZGUqKSByZXNpemUodCwgKHN0cnVjdCB0bm9kZSAqKXRuKTsKKworCXJldHVybiAoc3RydWN0IG5vZGUqKSB0bjsKK30KKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKgorZmliX2luc2VydF9ub2RlKHN0cnVjdCB0cmllICp0LCB1MzIga2V5LCBpbnQgcGxlbikKK3sKKwlpbnQgcG9zLCBuZXdwb3M7CisJc3RydWN0IHRub2RlICp0cCA9IE5VTEwsICp0biA9IE5VTEw7CisJc3RydWN0IG5vZGUgKm47CisJc3RydWN0IGxlYWYgKmw7CisJaW50IG1pc3NiaXQ7CisJc3RydWN0IGxpc3RfaGVhZCAqZmFfaGVhZD1OVUxMOworCXN0cnVjdCBsZWFmX2luZm8gKmxpOworCXRfa2V5IGNpbmRleDsKKworCXBvcyA9IDA7CisJbj10LT50cmllOworCisJLyogSWYgd2UgcG9pbnQgdG8gTlVMTCwgc3RvcC4gRWl0aGVyIHRoZSB0cmVlIGlzIGVtcHR5IGFuZCB3ZSBzaG91bGQgCisJICoganVzdCBwdXQgYSBuZXcgbGVhZiBpbiBpZiwgb3Igd2UgaGF2ZSByZWFjaGVkIGFuIGVtcHR5IGNoaWxkIHNsb3QsIAorCSAqIGFuZCB3ZSBzaG91bGQganVzdCBwdXQgb3VyIG5ldyBsZWFmIGluIHRoYXQuCisJICogSWYgd2UgcG9pbnQgdG8gYSBUX1ROT0RFLCBjaGVjayBpZiBpdCBtYXRjaGVzIG91ciBrZXkuIE5vdGUgdGhhdCAKKwkgKiBhIFRfVE5PREUgbWlnaHQgYmUgc2tpcHBpbmcgYW55IG51bWJlciBvZiBiaXRzIC0gaXRzICdwb3MnIG5lZWQgCisJICogbm90IGJlIHRoZSBwYXJlbnQncyAncG9zJysnYml0cychCisJICoKKwkgKiBJZiBpdCBkb2VzIG1hdGNoIHRoZSBjdXJyZW50IGtleSwgZ2V0IHBvcy9iaXRzIGZyb20gaXQsIGV4dHJhY3QgCisJICogdGhlIGluZGV4IGZyb20gb3VyIGtleSwgcHVzaCB0aGUgVF9UTk9ERSBhbmQgd2FsayB0aGUgdHJlZS4KKwkgKgorCSAqIElmIGl0IGRvZXNuJ3QsIHdlIGhhdmUgdG8gcmVwbGFjZSBpdCB3aXRoIGEgbmV3IFRfVE5PREUuCisJICoKKwkgKiBJZiB3ZSBwb2ludCB0byBhIFRfTEVBRiwgaXQgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgdGhlIHNhbWUga2V5IAorCSAqIGFzIHdlIGRvLiBJZiBpdCBkb2VzLCBqdXN0IGNoYW5nZSB0aGUgdmFsdWUsIHVwZGF0ZSB0aGUgVF9MRUFGJ3MgCisJICogdmFsdWUsIGFuZCByZXR1cm4gaXQuIAorCSAqIElmIGl0IGRvZXNuJ3QsIHdlIG5lZWQgdG8gcmVwbGFjZSBpdCB3aXRoIGEgVF9UTk9ERS4KKwkgKi8KKworCXdoaWxlIChuICE9IE5VTEwgJiYgIE5PREVfVFlQRShuKSA9PSBUX1ROT0RFKSB7CisJCXRuID0gKHN0cnVjdCB0bm9kZSAqKSBuOworCQkJCisJCWNoZWNrX3Rub2RlKHRuKTsKKwkJCisJCWlmKHRrZXlfc3ViX2VxdWFscyh0bi0+a2V5LCBwb3MsIHRuLT5wb3MtcG9zLCBrZXkpKSB7CisJCQl0cCA9IHRuOworCQkJcG9zPXRuLT5wb3MgKyB0bi0+Yml0czsKKwkJCW4gPSB0bm9kZV9nZXRfY2hpbGQodG4sIHRrZXlfZXh0cmFjdF9iaXRzKGtleSwgdG4tPnBvcywgdG4tPmJpdHMpKTsKKworCQkJaWYobiAmJiBOT0RFX1BBUkVOVChuKSAhPSB0bikgeworCQkJCXByaW50aygiQlVHIHRuPSVwLCBuLT5wYXJlbnQ9JXBcbiIsIHRuLCBOT0RFX1BBUkVOVChuKSk7CisJCQkJQlVHKCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBuICAtLS0tPiBOVUxMLCBMRUFGIG9yIFROT0RFCisJICoKKwkgKiB0cCBpcyBuJ3MgKHBhcmVudCkgLS0tLT4gTlVMTCBvciBUTk9ERSAgCisJICovCisKKwlpZih0cCAmJiBJU19MRUFGKHRwKSkKKwkJQlVHKCk7CisKKwl0LT5yZXZpc2lvbisrOworCisJLyogQ2FzZSAxOiBuIGlzIGEgbGVhZi4gQ29tcGFyZSBwcmVmaXhlcyAqLworCisJaWYgKG4gIT0gTlVMTCAmJiBJU19MRUFGKG4pICYmIHRrZXlfZXF1YWxzKGtleSwgbi0+a2V5KSkgeyAKKwkJc3RydWN0IGxlYWYgKmwgPSAoIHN0cnVjdCBsZWFmICopICBuOworCQkKKwkJbGkgPSBsZWFmX2luZm9fbmV3KHBsZW4pOworCQkKKwkJaWYoISBsaSkgCisJCQlCVUcoKTsKKworCQlmYV9oZWFkID0gJmxpLT5mYWxoOworCQlpbnNlcnRfbGVhZl9pbmZvKCZsLT5saXN0LCBsaSk7CisJCWdvdG8gZG9uZTsKKwl9CisJdC0+c2l6ZSsrOworCWwgPSBsZWFmX25ldygpOworCisJaWYoISBsKSAKKwkJQlVHKCk7CisKKwlsLT5rZXkgPSBrZXk7CisJbGkgPSBsZWFmX2luZm9fbmV3KHBsZW4pOworCisJaWYoISBsaSkgCisJCUJVRygpOworCisJZmFfaGVhZCA9ICZsaS0+ZmFsaDsKKwlpbnNlcnRfbGVhZl9pbmZvKCZsLT5saXN0LCBsaSk7CisKKwkvKiBDYXNlIDI6IG4gaXMgTlVMTCwgYW5kIHdpbGwganVzdCBpbnNlcnQgYSBuZXcgbGVhZiAqLworCWlmICh0LT50cmllICYmIG4gPT0gTlVMTCkgeworCisJCU5PREVfU0VUX1BBUkVOVChsLCB0cCk7CisJCQorCQlpZiAoIXRwKSAKKwkJCUJVRygpOworCisJCWVsc2UgeworCQkJY2luZGV4ID0gdGtleV9leHRyYWN0X2JpdHMoa2V5LCB0cC0+cG9zLCB0cC0+Yml0cyk7CisJCQlwdXRfY2hpbGQodCwgKHN0cnVjdCB0bm9kZSAqKXRwLCBjaW5kZXgsIChzdHJ1Y3Qgbm9kZSAqKWwpOworCQl9CisJfQorCS8qIENhc2UgMzogbiBpcyBhIExFQUYgb3IgYSBUTk9ERSBhbmQgdGhlIGtleSBkb2Vzbid0IG1hdGNoLiAqLworCWVsc2UgeworCQkvKiAKKwkJICogIEFkZCBhIG5ldyB0bm9kZSBoZXJlIAorCQkgKiAgZmlyc3QgdG5vZGUgbmVlZCBzb21lIHNwZWNpYWwgaGFuZGxpbmcKKwkJICovCisKKwkJaWYgKHRwKQorCQkJcG9zPXRwLT5wb3MrdHAtPmJpdHM7CisJCWVsc2UKKwkJCXBvcz0wOworCQlpZihuKSB7CisJCQluZXdwb3MgPSB0a2V5X21pc21hdGNoKGtleSwgcG9zLCBuLT5rZXkpOworCQkJdG4gPSB0bm9kZV9uZXcobi0+a2V5LCBuZXdwb3MsIDEpOworCQl9CisJCWVsc2UgeworCQkJbmV3cG9zID0gMDsKKwkJCXRuID0gdG5vZGVfbmV3KGtleSwgbmV3cG9zLCAxKTsgLyogRmlyc3QgdG5vZGUgKi8gCisJCX0KKwkJaWYoIXRuKSAKKwkJCXRyaWVfYnVnKCJ0bm9kZV9wZnhfbmV3IGZhaWxlZCIpOworCisJCU5PREVfU0VUX1BBUkVOVCh0biwgdHApOworCisJCW1pc3NiaXQ9dGtleV9leHRyYWN0X2JpdHMoa2V5LCBuZXdwb3MsIDEpOworCQlwdXRfY2hpbGQodCwgdG4sIG1pc3NiaXQsIChzdHJ1Y3Qgbm9kZSAqKWwpOworCQlwdXRfY2hpbGQodCwgdG4sIDEtbWlzc2JpdCwgbik7CisKKwkJaWYodHApIHsKKwkJCWNpbmRleCA9IHRrZXlfZXh0cmFjdF9iaXRzKGtleSwgdHAtPnBvcywgdHAtPmJpdHMpOworCQkJcHV0X2NoaWxkKHQsIChzdHJ1Y3QgdG5vZGUgKil0cCwgY2luZGV4LCAoc3RydWN0IG5vZGUgKil0bik7CisJCX0KKwkJZWxzZSB7IAorCQkJdC0+dHJpZSA9IChzdHJ1Y3Qgbm9kZSopIHRuOyAvKiBGaXJzdCB0bm9kZSAqLworCQkJdHAgPSB0bjsKKwkJfQorCX0KKwlpZih0cCAmJiB0cC0+cG9zK3RwLT5iaXRzID4gMzIpIHsKKwkJcHJpbnRrKCJFUlJPUiB0cD0lcCBwb3M9JWQsIGJpdHM9JWQsIGtleT0lMHggcGxlbj0lZFxuIiwgCisJCSAgICAgICB0cCwgdHAtPnBvcywgdHAtPmJpdHMsIGtleSwgcGxlbik7CisJfQorCS8qIFJlYmFsYW5jZSB0aGUgdHJpZSAqLworCXQtPnRyaWUgPSB0cmllX3JlYmFsYW5jZSh0LCB0cCk7Citkb25lOjsKKwlyZXR1cm4gZmFfaGVhZDsKK30KKworc3RhdGljIGludAorZm5fdHJpZV9pbnNlcnQoc3RydWN0IGZpYl90YWJsZSAqdGIsIHN0cnVjdCBydG1zZyAqciwgc3RydWN0IGtlcm5fcnRhICpydGEsCisJICAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoZHIsIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqcmVxKQoreworCXN0cnVjdCB0cmllICp0ID0gKHN0cnVjdCB0cmllICopIHRiLT50Yl9kYXRhOworCXN0cnVjdCBmaWJfYWxpYXMgKmZhLCAqbmV3X2ZhOworCXN0cnVjdCBsaXN0X2hlYWQgKmZhX2hlYWQ9TlVMTDsKKwlzdHJ1Y3QgZmliX2luZm8gKmZpOworCWludCBwbGVuID0gci0+cnRtX2RzdF9sZW47CisJaW50IHR5cGUgPSByLT5ydG1fdHlwZTsKKwl1OCB0b3MgPSByLT5ydG1fdG9zOworCXUzMiBrZXksIG1hc2s7CisJaW50IGVycjsKKwlzdHJ1Y3QgbGVhZiAqbDsKKworCWlmIChwbGVuID4gMzIpCisJCXJldHVybiAtRUlOVkFMOworCisJa2V5ID0gMDsKKwlpZiAocnRhLT5ydGFfZHN0KSAKKwkJbWVtY3B5KCZrZXksIHJ0YS0+cnRhX2RzdCwgNCk7CisKKwlrZXkgPSBudG9obChrZXkpOworCisJaWYodHJpZV9kZWJ1ZykKKwkJcHJpbnRrKCJJbnNlcnQgdGFibGU9JWQgJTA4eC8lZFxuIiwgdGItPnRiX2lkLCBrZXksIHBsZW4pOworCisJbWFzayA9ICBudG9obCggaW5ldF9tYWtlX21hc2socGxlbikgKTsKKworCWlmKGtleSAmIH5tYXNrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWtleSA9IGtleSAmIG1hc2s7CisKKwlpZiAgKChmaSA9IGZpYl9jcmVhdGVfaW5mbyhyLCBydGEsIG5saGRyLCAmZXJyKSkgPT0gTlVMTCkKKwkJZ290byBlcnI7CisKKwlsID0gZmliX2ZpbmRfbm9kZSh0LCBrZXkpOworCWZhID0gTlVMTDsJCisKKwlpZihsKSB7CisJCWZhX2hlYWQgPSBnZXRfZmFfaGVhZChsLCBwbGVuKTsKKwkJZmEgPSBmaWJfZmluZF9hbGlhcyhmYV9oZWFkLCB0b3MsIGZpLT5maWJfcHJpb3JpdHkpOworCX0KKworCS8qIE5vdyBmYSwgaWYgbm9uLU5VTEwsIHBvaW50cyB0byB0aGUgZmlyc3QgZmliIGFsaWFzCisJICogd2l0aCB0aGUgc2FtZSBrZXlzIFtwcmVmaXgsdG9zLHByaW9yaXR5XSwgaWYgc3VjaCBrZXkgYWxyZWFkeQorCSAqIGV4aXN0cyBvciB0byB0aGUgbm9kZSBiZWZvcmUgd2hpY2ggd2Ugd2lsbCBpbnNlcnQgbmV3IG9uZS4KKwkgKgorCSAqIElmIGZhIGlzIE5VTEwsIHdlIHdpbGwgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBvbmUgYW5kCisJICogaW5zZXJ0IHRvIHRoZSBoZWFkIG9mIGYuCisJICoKKwkgKiBJZiBmIGlzIE5VTEwsIG5vIGZpYiBub2RlIG1hdGNoZWQgdGhlIGRlc3RpbmF0aW9uIGtleQorCSAqIGFuZCB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IG9uZSBvZiB0aG9zZSBhcyB3ZWxsLgorCSAqLworCisJaWYgKGZhICYmCisJICAgIGZhLT5mYV9pbmZvLT5maWJfcHJpb3JpdHkgPT0gZmktPmZpYl9wcmlvcml0eSkgeworCQlzdHJ1Y3QgZmliX2FsaWFzICpmYV9vcmlnOworCisJCWVyciA9IC1FRVhJU1Q7CisJCWlmIChubGhkci0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9FWENMKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKG5saGRyLT5ubG1zZ19mbGFncyAmIE5MTV9GX1JFUExBQ0UpIHsKKwkJCXN0cnVjdCBmaWJfaW5mbyAqZmlfZHJvcDsKKwkJCXU4IHN0YXRlOworCisJCQl3cml0ZV9sb2NrX2JoKCZmaWJfbG9jayk7CisKKwkJCWZpX2Ryb3AgPSBmYS0+ZmFfaW5mbzsKKwkJCWZhLT5mYV9pbmZvID0gZmk7CisJCQlmYS0+ZmFfdHlwZSA9IHR5cGU7CisJCQlmYS0+ZmFfc2NvcGUgPSByLT5ydG1fc2NvcGU7CisJCQlzdGF0ZSA9IGZhLT5mYV9zdGF0ZTsKKwkJCWZhLT5mYV9zdGF0ZSAmPSB+RkFfU19BQ0NFU1NFRDsKKworCQkJd3JpdGVfdW5sb2NrX2JoKCZmaWJfbG9jayk7CisKKwkJCWZpYl9yZWxlYXNlX2luZm8oZmlfZHJvcCk7CisJCQlpZiAoc3RhdGUgJiBGQV9TX0FDQ0VTU0VEKQorCQkJICBydF9jYWNoZV9mbHVzaCgtMSk7CisKKwkJCSAgICBnb3RvIHN1Y2NlZWRlZDsKKwkJfQorCQkvKiBFcnJvciBpZiB3ZSBmaW5kIGEgcGVyZmVjdCBtYXRjaCB3aGljaAorCQkgKiB1c2VzIHRoZSBzYW1lIHNjb3BlLCB0eXBlLCBhbmQgbmV4dGhvcAorCQkgKiBpbmZvcm1hdGlvbi4KKwkJICovCisJCWZhX29yaWcgPSBmYTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmYSwgZmFfb3JpZy0+ZmFfbGlzdC5wcmV2LCBmYV9saXN0KSB7CisJCQlpZiAoZmEtPmZhX3RvcyAhPSB0b3MpCisJCQkJYnJlYWs7CisJCQlpZiAoZmEtPmZhX2luZm8tPmZpYl9wcmlvcml0eSAhPSBmaS0+ZmliX3ByaW9yaXR5KQorCQkJCWJyZWFrOworCQkJaWYgKGZhLT5mYV90eXBlID09IHR5cGUgJiYKKwkJCSAgICBmYS0+ZmFfc2NvcGUgPT0gci0+cnRtX3Njb3BlICYmCisJCQkgICAgZmEtPmZhX2luZm8gPT0gZmkpIHsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQlpZiAoIShubGhkci0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9BUFBFTkQpKQorCQkJZmEgPSBmYV9vcmlnOworCX0KKwllcnIgPSAtRU5PRU5UOworCWlmICghKG5saGRyLT5ubG1zZ19mbGFncyZOTE1fRl9DUkVBVEUpKQorCQlnb3RvIG91dDsKKworCWVyciA9IC1FTk9CVUZTOworCW5ld19mYSA9IGttZW1fY2FjaGVfYWxsb2MoZm5fYWxpYXNfa21lbSwgU0xBQl9LRVJORUwpOworCWlmIChuZXdfZmEgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwluZXdfZmEtPmZhX2luZm8gPSBmaTsKKwluZXdfZmEtPmZhX3RvcyA9IHRvczsKKwluZXdfZmEtPmZhX3R5cGUgPSB0eXBlOworCW5ld19mYS0+ZmFfc2NvcGUgPSByLT5ydG1fc2NvcGU7CisJbmV3X2ZhLT5mYV9zdGF0ZSA9IDA7CisjaWYgMAorCW5ld19mYS0+ZHN0ICA9IE5VTEw7CisjZW5kaWYKKwkvKgorCSAqIEluc2VydCBuZXcgZW50cnkgdG8gdGhlIGxpc3QuCisJICovCisKKwlpZighZmFfaGVhZCkKKwkJZmFfaGVhZCA9IGZpYl9pbnNlcnRfbm9kZSh0LCBrZXksIHBsZW4pOworCisJd3JpdGVfbG9ja19iaCgmZmliX2xvY2spOworCisJbGlzdF9hZGRfdGFpbCgmbmV3X2ZhLT5mYV9saXN0LAorCQkgKGZhID8gJmZhLT5mYV9saXN0IDogZmFfaGVhZCkpOworCisJd3JpdGVfdW5sb2NrX2JoKCZmaWJfbG9jayk7CisKKwlydF9jYWNoZV9mbHVzaCgtMSk7CisJcnRtc2dfZmliKFJUTV9ORVdST1VURSwgaHRvbmwoa2V5KSwgbmV3X2ZhLCBwbGVuLCB0Yi0+dGJfaWQsIG5saGRyLCByZXEpOworc3VjY2VlZGVkOgorCXJldHVybiAwOworb3V0OgorCWZpYl9yZWxlYXNlX2luZm8oZmkpOworZXJyOjsJCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfbGVhZihzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IGxlYWYgKmwsICB0X2tleSBrZXksIGludCAqcGxlbiwgY29uc3Qgc3RydWN0IGZsb3dpICpmbHAsIAorCQkJICAgICBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgKmVycikKK3sKKwlpbnQgaTsKKwl0X2tleSBtYXNrOworCXN0cnVjdCBsZWFmX2luZm8gKmxpOworCXN0cnVjdCBobGlzdF9oZWFkICpoaGVhZCA9ICZsLT5saXN0OworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCQorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpLCBub2RlLCBoaGVhZCwgaGxpc3QpIHsKKworCQlpID0gbGktPnBsZW47CisJCW1hc2sgPSBudG9obChpbmV0X21ha2VfbWFzayhpKSk7CisJCWlmIChsLT5rZXkgIT0gKGtleSAmIG1hc2spKSAKKwkJCWNvbnRpbnVlOworCisJCWlmICgoKCplcnIpID0gZmliX3NlbWFudGljX21hdGNoKCZsaS0+ZmFsaCwgZmxwLCByZXMsIGwtPmtleSwgbWFzaywgaSkpID09IDApIHsKKwkJCSpwbGVuID0gaTsKKyNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKKwkJCXQtPnN0YXRzLnNlbWFudGljX21hdGNoX3Bhc3NlZCsrOworI2VuZGlmCisJCQlyZXR1cm4gMTsKKwkJfQorI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworCQl0LT5zdGF0cy5zZW1hbnRpY19tYXRjaF9taXNzKys7CisjZW5kaWYKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ZuX3RyaWVfbG9va3VwKHN0cnVjdCBmaWJfdGFibGUgKnRiLCBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZscCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcykKK3sKKwlzdHJ1Y3QgdHJpZSAqdCA9IChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YTsKKwlpbnQgcGxlbiwgcmV0ID0gMDsKKwlzdHJ1Y3Qgbm9kZSAqbjsKKwlzdHJ1Y3QgdG5vZGUgKnBuOworCWludCBwb3MsIGJpdHM7CisJdF9rZXkga2V5PW50b2hsKGZscC0+Zmw0X2RzdCk7CisJaW50IGNob3BwZWRfb2ZmOworCXRfa2V5IGNpbmRleCA9IDA7CisJaW50IGN1cnJlbnRfcHJlZml4X2xlbmd0aCA9IEtFWUxFTkdUSDsKKwluID0gdC0+dHJpZTsKKworCXJlYWRfbG9jaygmZmliX2xvY2spOworCWlmKCFuKQorCQlnb3RvIGZhaWxlZDsKKworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworCXQtPnN0YXRzLmdldHMrKzsKKyNlbmRpZgorCisJLyogSnVzdCBhIGxlYWY/ICovCisJaWYgKElTX0xFQUYobikpIHsKKwkJaWYoIGNoZWNrX2xlYWYodCwgKHN0cnVjdCBsZWFmICopbiwga2V5LCAmcGxlbiwgZmxwLCByZXMsICZyZXQpICkKKwkJCWdvdG8gZm91bmQ7CisJCWdvdG8gZmFpbGVkOworCX0KKwlwbiA9IChzdHJ1Y3QgdG5vZGUgKikgbjsKKwljaG9wcGVkX29mZiA9IDA7CisJCisgICAgICAgIHdoaWxlIChwbikgeworCisJCXBvcyA9IHBuLT5wb3M7CisJCWJpdHMgPSBwbi0+Yml0czsKKworCQlpZighY2hvcHBlZF9vZmYpIAorCQkJY2luZGV4ID0gdGtleV9leHRyYWN0X2JpdHMoTUFTS19QRlgoa2V5LCBjdXJyZW50X3ByZWZpeF9sZW5ndGgpLCBwb3MsIGJpdHMpOworCisJCW4gPSB0bm9kZV9nZXRfY2hpbGQocG4sIGNpbmRleCk7CisKKwkJaWYgKG4gPT0gTlVMTCkgeworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworCQkJdC0+c3RhdHMubnVsbF9ub2RlX2hpdCsrOworI2VuZGlmCisJCQlnb3RvIGJhY2t0cmFjZTsKKwkJfQorCisJCWlmIChJU19UTk9ERShuKSkgeworI2RlZmluZSBITF9PUFRJTUlaRQorI2lmZGVmIEhMX09QVElNSVpFCisJCQlzdHJ1Y3QgdG5vZGUgKmNuID0gKHN0cnVjdCB0bm9kZSAqKW47CisJCQl0X2tleSBub2RlX3ByZWZpeCwga2V5X3ByZWZpeCwgcHJlZl9taXNtYXRjaDsKKwkJCWludCBtcDsKKworCQkJLyoKKwkJCSAqIEl0J3MgYSB0bm9kZSwgYW5kIHdlIGNhbiBkbyBzb21lIGV4dHJhIGNoZWNrcyBoZXJlIGlmIHdlIAorCQkJICogbGlrZSwgdG8gYXZvaWQgZGVzY2VuZGluZyBpbnRvIGEgZGVhZC1lbmQgYnJhbmNoLgorCQkJICogVGhpcyB0bm9kZSBpcyBpbiB0aGUgcGFyZW50J3MgY2hpbGQgYXJyYXkgYXQgaW5kZXggCisJCQkgKiBrZXlbcF9wb3MuLnBfcG9zK3BfYml0c10gYnV0IHBvdGVudGlhbGx5IHdpdGggc29tZSBiaXRzIAorCQkJICogY2hvcHBlZCBvZmYsIHNvIGluIHJlYWxpdHkgdGhlIGluZGV4IG1heSBiZSBqdXN0IGEgCisJCQkgKiBzdWJwcmVmaXgsIHBhZGRlZCB3aXRoIHplcm8gYXQgdGhlIGVuZC4KKwkJCSAqIFdlIGNhbiBhbHNvIHRha2UgYSBsb29rIGF0IGFueSBza2lwcGVkIGJpdHMgaW4gdGhpcyAKKwkJCSAqIHRub2RlIC0gZXZlcnl0aGluZyB1cCB0byBwX3BvcyBpcyBzdXBwb3NlZCB0byBiZSBvaywgCisJCQkgKiBhbmQgdGhlIG5vbi1jaG9wcGVkIGJpdHMgb2YgdGhlIGluZGV4IChzZSBwcmV2aW91cworCQkJICogcGFyYWdyYXBoKSBhcmUgYWxzbyBndWFyYW50ZWVkIG9rLCBidXQgdGhlIHJlc3QgaXMgCisJCQkgKiBjb25zaWRlcmVkIHVua25vd24uCisJCQkgKgorCQkJICogVGhlIHNraXBwZWQgYml0cyBhcmUga2V5W3BvcytiaXRzLi5jbi0+cG9zXS4KKwkJCSAqLworCQkJCisJCQkvKiBJZiBjdXJyZW50X3ByZWZpeF9sZW5ndGggPCBwb3MrYml0cywgd2UgYXJlIGFscmVhZHkgZG9pbmcgCisJCQkgKiBhY3R1YWwgcHJlZml4ICBtYXRjaGluZywgd2hpY2ggbWVhbnMgZXZlcnl0aGluZyBmcm9tIAorCQkJICogcG9zKyhiaXRzLWNob3BwZWRfb2ZmKSBvbndhcmQgbXVzdCBiZSB6ZXJvIGFsb25nIHNvbWUgCisJCQkgKiBicmFuY2ggb2YgdGhpcyBzdWJ0cmVlIC0gb3RoZXJ3aXNlIHRoZXJlIGlzICpubyogdmFsaWQgCisJCQkgKiBwcmVmaXggcHJlc2VudC4gSGVyZSB3ZSBjYW4gb25seSBjaGVjayB0aGUgc2tpcHBlZAorCQkJICogYml0cy4gUmVtZW1iZXIsIHNpbmNlIHdlIGhhdmUgYWxyZWFkeSBpbmRleGVkIGludG8gdGhlIAorCQkJICogcGFyZW50J3MgY2hpbGQgYXJyYXksIHdlIGtub3cgdGhhdCB0aGUgYml0cyB3ZSBjaG9wcGVkIG9mIAorCQkJICogKmFyZSogemVyby4KKwkJCSAqLworCisJCQkvKiBOT1RBIEJFTkU6IENIRUNLSU5HIE9OTFkgU0tJUFBFRCBCSVRTIEZPUiBUSEUgTkVXIE5PREUgSEVSRSAqLworCQkJCisJCQlpZiAoY3VycmVudF9wcmVmaXhfbGVuZ3RoIDwgcG9zK2JpdHMpIHsKKwkJCQlpZiAodGtleV9leHRyYWN0X2JpdHMoY24tPmtleSwgY3VycmVudF9wcmVmaXhfbGVuZ3RoLAorCQkJCQkJICAgICAgY24tPnBvcyAtIGN1cnJlbnRfcHJlZml4X2xlbmd0aCkgIT0gMCB8fAorCQkJCSAgICAhKGNuLT5jaGlsZFswXSkpCisJCQkJCWdvdG8gYmFja3RyYWNlOworCQkJfQorCisJCQkvKgorCQkJICogSWYgY2hvcHBlZF9vZmY9MCwgdGhlIGluZGV4IGlzIGZ1bGx5IHZhbGlkYXRlZCBhbmQgd2UgCisJCQkgKiBvbmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgc2tpcHBlZCBiaXRzIGZvciB0aGlzLCB0aGUgbmV3LCAKKwkJCSAqIHRub2RlLiBXaGF0IHdlIGFjdHVhbGx5IHdhbnQgdG8gZG8gaXMgdG8gZmluZCBvdXQgaWYKKwkJCSAqIHRoZXNlIHNraXBwZWQgYml0cyBtYXRjaCBvdXIga2V5IHBlcmZlY3RseSwgb3IgaWYgd2Ugd2lsbAorCQkJICogaGF2ZSB0byBjb3VudCBvbiBmaW5kaW5nIGEgbWF0Y2hpbmcgcHJlZml4IGZ1cnRoZXIgZG93biwgCisJCQkgKiBiZWNhdXNlIGlmIHdlIGRvLCB3ZSB3b3VsZCBsaWtlIHRvIGhhdmUgc29tZSB3YXkgb2YgCisJCQkgKiB2ZXJpZnlpbmcgdGhlIGV4aXN0ZW5jZSBvZiBzdWNoIGEgcHJlZml4IGF0IHRoaXMgcG9pbnQuIAorCQkJICovCisKKwkJCS8qIFRoZSBvbmx5IHRoaW5nIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50IGlzIHRvIHZlcmlmeSB0aGF0CisJCQkgKiBhbnkgc3VjaCBtYXRjaGluZyBwcmVmaXggY2FuIGluZGVlZCBiZSBhIHByZWZpeCB0byBvdXIKKwkJCSAqIGtleSwgYW5kIGlmIHRoZSBiaXRzIGluIHRoZSBub2RlIHdlIGFyZSBpbnNwZWN0aW5nIHRoYXQKKwkJCSAqIGRvIG5vdCBtYXRjaCBvdXIga2V5IGFyZSBub3QgWkVSTywgdGhpcyBjYW5ub3QgYmUgdHJ1ZS4KKwkJCSAqIFRodXMsIGZpbmQgb3V0IHdoZXJlIHRoZXJlIGlzIGEgbWlzbWF0Y2ggKGJlZm9yZSBjbi0+cG9zKQorCQkJICogYW5kIHZlcmlmeSB0aGF0IGFsbCB0aGUgbWlzbWF0Y2hpbmcgYml0cyBhcmUgemVybyBpbiB0aGUKKwkJCSAqIG5ldyB0bm9kZSdzIGtleS4KKwkJCSAqLworCisJCQkvKiBOb3RlOiBXZSBhcmVuJ3QgdmVyeSBjb25jZXJuZWQgYWJvdXQgdGhlIHBpZWNlIG9mIHRoZSBrZXkgCisJCQkgKiB0aGF0IHByZWNlZGUgcG4tPnBvcytwbi0+Yml0cywgc2luY2UgdGhlc2UgaGF2ZSBhbHJlYWR5IGJlZW4gCisJCQkgKiBjaGVja2VkLiBUaGUgYml0cyBhZnRlciBjbi0+cG9zIGFyZW4ndCBjaGVja2VkIHNpbmNlIHRoZXNlIGFyZSAKKwkJCSAqIGJ5IGRlZmluaXRpb24gInVua25vd24iIGF0IHRoaXMgcG9pbnQuIFRodXMsIHdoYXQgd2Ugd2FudCB0byAKKwkJCSAqIHNlZSBpcyBpZiB3ZSBhcmUgYWJvdXQgdG8gZW50ZXIgdGhlICJwcmVmaXggbWF0Y2hpbmciIHN0YXRlLCAKKwkJCSAqIGFuZCBpbiB0aGF0IGNhc2UgdmVyaWZ5IHRoYXQgdGhlIHNraXBwZWQgYml0cyB0aGF0IHdpbGwgcHJldmFpbCAKKwkJCSAqIHRocm91Z2hvdXQgdGhpcyBzdWJ0cmVlIGFyZSB6ZXJvLCBhcyB0aGV5IGhhdmUgdG8gYmUgaWYgd2UgYXJlIAorCQkJICogdG8gZmluZCBhIG1hdGNoaW5nIHByZWZpeC4KKwkJCSAqLworCisJCQlub2RlX3ByZWZpeCA9IE1BU0tfUEZYKGNuLT5rZXksIGNuLT5wb3MpOworCQkJa2V5X3ByZWZpeCA9ICBNQVNLX1BGWChrZXksIGNuLT5wb3MpOworCQkJcHJlZl9taXNtYXRjaCA9IGtleV9wcmVmaXhebm9kZV9wcmVmaXg7CisJCQltcCA9IDA7CisKKwkJCS8qIEluIHNob3J0OiBJZiBza2lwcGVkIGJpdHMgaW4gdGhpcyBub2RlIGRvIG5vdCBtYXRjaCB0aGUgc2VhcmNoIAorCQkJICoga2V5LCBlbnRlciB0aGUgInByZWZpeCBtYXRjaGluZyIgc3RhdGUuZGlyZWN0bHkuCisJCQkgKi8KKwkJCWlmIChwcmVmX21pc21hdGNoKSB7CisJCQkJd2hpbGUgKCEocHJlZl9taXNtYXRjaCAmICgxPDwoS0VZTEVOR1RILTEpKSkpIHsKKwkJCQkJbXArKzsKKwkJCQkJcHJlZl9taXNtYXRjaCA9IHByZWZfbWlzbWF0Y2ggPDwxOworCQkJCX0KKwkJCQlrZXlfcHJlZml4ID0gdGtleV9leHRyYWN0X2JpdHMoY24tPmtleSwgbXAsIGNuLT5wb3MtbXApOworCQkJCQorCQkJCWlmIChrZXlfcHJlZml4ICE9IDApCisJCQkJCWdvdG8gYmFja3RyYWNlOworCisJCQkJaWYgKGN1cnJlbnRfcHJlZml4X2xlbmd0aCA+PSBjbi0+cG9zKQorCQkJCQljdXJyZW50X3ByZWZpeF9sZW5ndGg9bXA7CisJCSAgICAgICB9CisjZW5kaWYKKwkJICAgICAgIHBuID0gKHN0cnVjdCB0bm9kZSAqKW47IC8qIERlc2NlbmQgKi8KKwkJICAgICAgIGNob3BwZWRfb2ZmID0gMDsKKwkJICAgICAgIGNvbnRpbnVlOworCQl9IAorCQlpZiAoSVNfTEVBRihuKSkgewkKKwkJCWlmKCBjaGVja19sZWFmKHQsIChzdHJ1Y3QgbGVhZiAqKW4sIGtleSwgJnBsZW4sIGZscCwgcmVzLCAmcmV0KSkKKwkJCQlnb3RvIGZvdW5kOworCSAgICAgICB9CitiYWNrdHJhY2U6CisJCWNob3BwZWRfb2ZmKys7CisKKwkJLyogQXMgemVybyBkb24ndCBjaGFuZ2UgdGhlIGNoaWxkIGtleSAoY2luZGV4KSAqLworCQl3aGlsZSAoKGNob3BwZWRfb2ZmIDw9IHBuLT5iaXRzKSAmJiAhKGNpbmRleCAmICgxPDwoY2hvcHBlZF9vZmYtMSkpKSkgeworCQkJY2hvcHBlZF9vZmYrKzsKKwkJfQorCisJCS8qIERlY3JlYXNlIGN1cnJlbnRfLi4uIHdpdGggYml0cyBjaG9wcGVkIG9mZiAqLworCQlpZiAoY3VycmVudF9wcmVmaXhfbGVuZ3RoID4gcG4tPnBvcyArIHBuLT5iaXRzIC0gY2hvcHBlZF9vZmYpCisJCQljdXJyZW50X3ByZWZpeF9sZW5ndGggPSBwbi0+cG9zICsgcG4tPmJpdHMgLSBjaG9wcGVkX29mZjsKKwkJCisJCS8qCisJCSAqIEVpdGhlciB3ZSBkbyB0aGUgYWN0dWFsIGNob3Agb2ZmIGFjY29yZGluZyBvciBpZiB3ZSBoYXZlIAorCQkgKiBjaG9wcGVkIG9mZiBhbGwgYml0cyBpbiB0aGlzIHRub2RlIHdhbGsgdXAgdG8gb3VyIHBhcmVudC4KKwkJICovCisKKwkJaWYoY2hvcHBlZF9vZmYgPD0gcG4tPmJpdHMpCisJCQljaW5kZXggJj0gfigxIDw8IChjaG9wcGVkX29mZi0xKSk7CisJCWVsc2UgeworCQkJaWYoIE5PREVfUEFSRU5UKHBuKSA9PSBOVUxMKQorCQkJCWdvdG8gZmFpbGVkOworCQkJCisJCQkvKiBHZXQgQ2hpbGQncyBpbmRleCAqLworCQkJY2luZGV4ID0gdGtleV9leHRyYWN0X2JpdHMocG4tPmtleSwgTk9ERV9QQVJFTlQocG4pLT5wb3MsIE5PREVfUEFSRU5UKHBuKS0+Yml0cyk7CisJCQlwbiA9IE5PREVfUEFSRU5UKHBuKTsKKwkJCWNob3BwZWRfb2ZmID0gMDsKKworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworCQkJdC0+c3RhdHMuYmFja3RyYWNrKys7CisjZW5kaWYKKwkJCWdvdG8gYmFja3RyYWNlOworCQl9IAorCX0KK2ZhaWxlZDoKKwlyZXQgPSAgMTsKK2ZvdW5kOgorCXJlYWRfdW5sb2NrKCZmaWJfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cmllX2xlYWZfcmVtb3ZlKHN0cnVjdCB0cmllICp0LCB0X2tleSBrZXkpCit7CisJdF9rZXkgY2luZGV4OworCXN0cnVjdCB0bm9kZSAqdHAgPSBOVUxMOworCXN0cnVjdCBub2RlICpuID0gdC0+dHJpZTsKKwlzdHJ1Y3QgbGVhZiAqbDsKKworCWlmKHRyaWVfZGVidWcpIAorCQlwcmludGsoImVudGVyaW5nIHRyaWVfbGVhZl9yZW1vdmUoJXApXG4iLCBuKTsKKworCS8qIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSBza2lwcGVkIGJpdHMsIHRob3NlIGJpdHMgYXJlICpub3QqIGNoZWNrZWQhCisJICogV2hlbiB3ZSBmaW5pc2ggdGhpcywgd2Ugd2lsbCBoYXZlIE5VTEwgb3IgYSBUX0xFQUYsIGFuZCB0aGUgCisJICogVF9MRUFGIG1heSBvciBtYXkgbm90IG1hdGNoIG91ciBrZXkuCisJICovCisKKyAgICAgICAgd2hpbGUgKG4gIT0gTlVMTCAmJiBJU19UTk9ERShuKSkgeworCQlzdHJ1Y3QgdG5vZGUgKnRuID0gKHN0cnVjdCB0bm9kZSAqKSBuOworCQljaGVja190bm9kZSh0bik7CisJCW4gPSB0bm9kZV9nZXRfY2hpbGQodG4gLHRrZXlfZXh0cmFjdF9iaXRzKGtleSwgdG4tPnBvcywgdG4tPmJpdHMpKTsKKworCQkJaWYobiAmJiBOT0RFX1BBUkVOVChuKSAhPSB0bikgeworCQkJCXByaW50aygiQlVHIHRuPSVwLCBuLT5wYXJlbnQ9JXBcbiIsIHRuLCBOT0RFX1BBUkVOVChuKSk7CisJCQkJQlVHKCk7CisJCQl9CisgICAgICAgIH0KKwlsID0gKHN0cnVjdCBsZWFmICopIG47CisKKwlpZighbiB8fCAhdGtleV9lcXVhbHMobC0+a2V5LCBrZXkpKSAKKwkJcmV0dXJuIDA7CisgICAgCisJLyogCisJICogS2V5IGZvdW5kLiAKKwkgKiBSZW1vdmUgdGhlIGxlYWYgYW5kIHJlYmFsYW5jZSB0aGUgdHJlZSAKKwkgKi8KKworCXQtPnJldmlzaW9uKys7CisJdC0+c2l6ZS0tOworCisJdHAgPSBOT0RFX1BBUkVOVChuKTsKKwl0bm9kZV9mcmVlKChzdHJ1Y3QgdG5vZGUgKikgbik7CisKKwlpZih0cCkgeworCQljaW5kZXggPSB0a2V5X2V4dHJhY3RfYml0cyhrZXksIHRwLT5wb3MsIHRwLT5iaXRzKTsKKwkJcHV0X2NoaWxkKHQsIChzdHJ1Y3QgdG5vZGUgKil0cCwgY2luZGV4LCBOVUxMKTsKKwkJdC0+dHJpZSA9IHRyaWVfcmViYWxhbmNlKHQsIHRwKTsKKwl9CisJZWxzZQorCQl0LT50cmllID0gTlVMTDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Citmbl90cmllX2RlbGV0ZShzdHJ1Y3QgZmliX3RhYmxlICp0Yiwgc3RydWN0IHJ0bXNnICpyLCBzdHJ1Y3Qga2Vybl9ydGEgKnJ0YSwKKwkgICAgICAgc3RydWN0IG5sbXNnaGRyICpubGhkciwgc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpyZXEpCit7CisJc3RydWN0IHRyaWUgKnQgPSAoc3RydWN0IHRyaWUgKikgdGItPnRiX2RhdGE7CisJdTMyIGtleSwgbWFzazsKKwlpbnQgcGxlbiA9IHItPnJ0bV9kc3RfbGVuOworCXU4IHRvcyA9IHItPnJ0bV90b3M7CisJc3RydWN0IGZpYl9hbGlhcyAqZmEsICpmYV90b19kZWxldGU7CisJc3RydWN0IGxpc3RfaGVhZCAqZmFfaGVhZDsKKwlzdHJ1Y3QgbGVhZiAqbDsKKworCWlmIChwbGVuID4gMzIpIAorCQlyZXR1cm4gLUVJTlZBTDsKKworCWtleSA9IDA7CisJaWYgKHJ0YS0+cnRhX2RzdCkgCisJCW1lbWNweSgma2V5LCBydGEtPnJ0YV9kc3QsIDQpOworCisJa2V5ID0gbnRvaGwoa2V5KTsKKwltYXNrID0gIG50b2hsKCBpbmV0X21ha2VfbWFzayhwbGVuKSApOworCisJaWYoa2V5ICYgfm1hc2spCisJCXJldHVybiAtRUlOVkFMOworCisJa2V5ID0ga2V5ICYgbWFzazsKKwlsID0gZmliX2ZpbmRfbm9kZSh0LCBrZXkpOworCisJaWYoIWwpCisJCXJldHVybiAtRVNSQ0g7CisKKwlmYV9oZWFkID0gZ2V0X2ZhX2hlYWQobCwgcGxlbik7CisJZmEgPSBmaWJfZmluZF9hbGlhcyhmYV9oZWFkLCB0b3MsIDApOworCisJaWYgKCFmYSkKKwkJcmV0dXJuIC1FU1JDSDsKKworCWlmICh0cmllX2RlYnVnKQorCQlwcmludGsoIkRlbGV0aW5nICUwOHgvJWQgdG9zPSVkIHQ9JXBcbiIsIGtleSwgcGxlbiwgdG9zLCB0KTsKKworCWZhX3RvX2RlbGV0ZSA9IE5VTEw7CisJZmFfaGVhZCA9IGZhLT5mYV9saXN0LnByZXY7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmYSwgZmFfaGVhZCwgZmFfbGlzdCkgeworCQlzdHJ1Y3QgZmliX2luZm8gKmZpID0gZmEtPmZhX2luZm87CisKKwkJaWYgKGZhLT5mYV90b3MgIT0gdG9zKQorCQkJYnJlYWs7CisKKwkJaWYgKCghci0+cnRtX3R5cGUgfHwKKwkJICAgICBmYS0+ZmFfdHlwZSA9PSByLT5ydG1fdHlwZSkgJiYKKwkJICAgIChyLT5ydG1fc2NvcGUgPT0gUlRfU0NPUEVfTk9XSEVSRSB8fAorCQkgICAgIGZhLT5mYV9zY29wZSA9PSByLT5ydG1fc2NvcGUpICYmCisJCSAgICAoIXItPnJ0bV9wcm90b2NvbCB8fAorCQkgICAgIGZpLT5maWJfcHJvdG9jb2wgPT0gci0+cnRtX3Byb3RvY29sKSAmJgorCQkgICAgZmliX25oX21hdGNoKHIsIG5saGRyLCBydGEsIGZpKSA9PSAwKSB7CisJCQlmYV90b19kZWxldGUgPSBmYTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZhX3RvX2RlbGV0ZSkgeworCQlpbnQga2lsbF9saSA9IDA7CisJCXN0cnVjdCBsZWFmX2luZm8gKmxpOworCisJCWZhID0gZmFfdG9fZGVsZXRlOworCQlydG1zZ19maWIoUlRNX0RFTFJPVVRFLCBodG9ubChrZXkpLCBmYSwgcGxlbiwgdGItPnRiX2lkLCBubGhkciwgcmVxKTsKKworCQlsID0gZmliX2ZpbmRfbm9kZSh0LCBrZXkpOworCQlsaSA9IGZpbmRfbGVhZl9pbmZvKCZsLT5saXN0LCBwbGVuKTsKKworCQl3cml0ZV9sb2NrX2JoKCZmaWJfbG9jayk7CisKKwkJbGlzdF9kZWwoJmZhLT5mYV9saXN0KTsKKworCQlpZihsaXN0X2VtcHR5KGZhX2hlYWQpKSB7CisJCQlobGlzdF9kZWwoJmxpLT5obGlzdCk7CisJCQlraWxsX2xpID0gMTsKKwkJfQorCQl3cml0ZV91bmxvY2tfYmgoJmZpYl9sb2NrKTsKKwkJCisJCWlmKGtpbGxfbGkpCisJCQlmcmVlX2xlYWZfaW5mbyhsaSk7CisKKwkJaWYoaGxpc3RfZW1wdHkoJmwtPmxpc3QpKQorCQkJdHJpZV9sZWFmX3JlbW92ZSh0LCBrZXkpOworCisJCWlmIChmYS0+ZmFfc3RhdGUgJiBGQV9TX0FDQ0VTU0VEKQorCQkJcnRfY2FjaGVfZmx1c2goLTEpOworCisJCWZuX2ZyZWVfYWxpYXMoZmEpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FU1JDSDsKK30KKworc3RhdGljIGludCB0cmllX2ZsdXNoX2xpc3Qoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGZpYl9hbGlhcyAqZmEsICpmYV9ub2RlOworCWludCBmb3VuZCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmEsIGZhX25vZGUsIGhlYWQsIGZhX2xpc3QpIHsKKwkJc3RydWN0IGZpYl9pbmZvICpmaSA9IGZhLT5mYV9pbmZvOworCQkKKwkJaWYgKGZpICYmIChmaS0+ZmliX2ZsYWdzJlJUTkhfRl9ERUFEKSkgeworCisgCQkJd3JpdGVfbG9ja19iaCgmZmliX2xvY2spOwkKKwkJCWxpc3RfZGVsKCZmYS0+ZmFfbGlzdCk7CisJCQl3cml0ZV91bmxvY2tfYmgoJmZpYl9sb2NrKTsgCisKKwkJCWZuX2ZyZWVfYWxpYXMoZmEpOworCQkJZm91bmQrKzsKKwkJfQorCX0KKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyBpbnQgdHJpZV9mbHVzaF9sZWFmKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgbGVhZiAqbCkKK3sKKwlpbnQgZm91bmQgPSAwOworCXN0cnVjdCBobGlzdF9oZWFkICpsaWggPSAmbC0+bGlzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKKwlzdHJ1Y3QgbGVhZl9pbmZvICpsaSA9IE5VTEw7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpLCBub2RlLCB0bXAsIGxpaCwgaGxpc3QpIHsKKwkJCQorCQlmb3VuZCArPSB0cmllX2ZsdXNoX2xpc3QodCwgJmxpLT5mYWxoKTsKKworCQlpZiAobGlzdF9lbXB0eSgmbGktPmZhbGgpKSB7CisKKyAJCQl3cml0ZV9sb2NrX2JoKCZmaWJfbG9jayk7IAorCQkJaGxpc3RfZGVsKCZsaS0+aGxpc3QpOworCQkJd3JpdGVfdW5sb2NrX2JoKCZmaWJfbG9jayk7IAorCisJCQlmcmVlX2xlYWZfaW5mbyhsaSk7CisJCX0KKwl9CisJcmV0dXJuIGZvdW5kOworfQorCitzdGF0aWMgc3RydWN0IGxlYWYgKm5leHRsZWFmKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgbGVhZiAqdGhpc2xlYWYpCit7CisJc3RydWN0IG5vZGUgKmMgPSAoc3RydWN0IG5vZGUgKikgdGhpc2xlYWY7CisJc3RydWN0IHRub2RlICpwOworCWludCBpZHg7CisKKwlpZihjID09IE5VTEwpIHsKKwkJaWYodC0+dHJpZSA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKElTX0xFQUYodC0+dHJpZSkpICAgICAgICAgIC8qIHRyaWUgdy4ganVzdCBhIGxlYWYgKi8KKwkJCXJldHVybiAoc3RydWN0IGxlYWYgKikgdC0+dHJpZTsKKworCQlwID0gKHN0cnVjdCB0bm9kZSopIHQtPnRyaWU7ICAvKiBTdGFydCAqLworCX0KKwllbHNlIAorCQlwID0gKHN0cnVjdCB0bm9kZSAqKSBOT0RFX1BBUkVOVChjKTsKKwl3aGlsZSAocCkgeworCQlpbnQgcG9zLCBsYXN0OworCisJCS8qICBGaW5kIHRoZSBuZXh0IGNoaWxkIG9mIHRoZSBwYXJlbnQgKi8KKwkJaWYoYykKKwkJCXBvcyAgPSAxICsgdGtleV9leHRyYWN0X2JpdHMoYy0+a2V5LCBwLT5wb3MsIHAtPmJpdHMpOworCQllbHNlIAorCQkJcG9zID0gMDsKKworCQlsYXN0ID0gMSA8PCBwLT5iaXRzOworCQlmb3IoaWR4ID0gcG9zOyBpZHggPCBsYXN0IDsgaWR4KyspIHsKKwkJCWlmKCBwLT5jaGlsZFtpZHhdKSB7CisKKwkJCQkvKiBEZWNlbmQgaWYgdG5vZGUgKi8KKworCQkJCXdoaWxlIChJU19UTk9ERShwLT5jaGlsZFtpZHhdKSkgeworCQkJCQlwID0gKHN0cnVjdCB0bm9kZSopIHAtPmNoaWxkW2lkeF07CisJCQkJCWlkeCA9IDA7CisJCQkJCQorCQkJCQkvKiBSaWdodG1vc3Qgbm9uLU5VTEwgYnJhbmNoICovCisJCQkJCWlmKCBwICYmIElTX1ROT0RFKHApICkKKwkJCQkJCXdoaWxlICggcC0+Y2hpbGRbaWR4XSA9PSBOVUxMICYmIGlkeCA8ICgxIDw8IHAtPmJpdHMpICkgaWR4Kys7CisKKwkJCQkJLyogRG9uZSB3aXRoIHRoaXMgdG5vZGU/ICovCisJCQkJCWlmKCBpZHggPj0gKDEgPDwgcC0+Yml0cykgfHwgcC0+Y2hpbGRbaWR4XSA9PSBOVUxMICkgCisJCQkJCQlnb3RvIHVwOworCQkJCX0KKwkJCQlyZXR1cm4gKHN0cnVjdCBsZWFmKikgcC0+Y2hpbGRbaWR4XTsKKwkJCX0KKwkJfQordXA6CisJCS8qIE5vIG1vcmUgY2hpbGRyZW4gZ28gdXAgb25lIHN0ZXAgICovCisJCWMgPSAoc3RydWN0IG5vZGUqKSBwOworCQlwID0gKHN0cnVjdCB0bm9kZSAqKSBOT0RFX1BBUkVOVChwKTsKKwl9CisJcmV0dXJuIE5VTEw7IC8qIFJlYWR5LiBSb290IG9mIHRyaWUgKi8KK30KKworc3RhdGljIGludCBmbl90cmllX2ZsdXNoKHN0cnVjdCBmaWJfdGFibGUgKnRiKQoreworCXN0cnVjdCB0cmllICp0ID0gKHN0cnVjdCB0cmllICopIHRiLT50Yl9kYXRhOworCXN0cnVjdCBsZWFmICpsbCA9IE5VTEwsICpsID0gTlVMTDsKKwlpbnQgZm91bmQgPSAwLCBoOworCisJdC0+cmV2aXNpb24rKzsKKworCWZvciAoaD0wOyAobCA9IG5leHRsZWFmKHQsIGwpKSAhPSBOVUxMOyBoKyspIHsKKwkJZm91bmQgKz0gdHJpZV9mbHVzaF9sZWFmKHQsIGwpOworCisJCWlmIChsbCAmJiBobGlzdF9lbXB0eSgmbGwtPmxpc3QpKQorCQkJdHJpZV9sZWFmX3JlbW92ZSh0LCBsbC0+a2V5KTsKKwkJbGwgPSBsOworCX0KKworCWlmIChsbCAmJiBobGlzdF9lbXB0eSgmbGwtPmxpc3QpKQorCQl0cmllX2xlYWZfcmVtb3ZlKHQsIGxsLT5rZXkpOworCisJaWYodHJpZV9kZWJ1ZykgCisJCXByaW50aygidHJpZV9mbHVzaCBmb3VuZD0lZFxuIiwgZm91bmQpOworCXJldHVybiBmb3VuZDsKK30KKworc3RhdGljIGludCB0cmllX2xhc3RfZGZsdD0tMTsKKworc3RhdGljIHZvaWQKK2ZuX3RyaWVfc2VsZWN0X2RlZmF1bHQoc3RydWN0IGZpYl90YWJsZSAqdGIsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmxwLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKQoreworCXN0cnVjdCB0cmllICp0ID0gKHN0cnVjdCB0cmllICopIHRiLT50Yl9kYXRhOworCWludCBvcmRlciwgbGFzdF9pZHg7CisJc3RydWN0IGZpYl9pbmZvICpmaSA9IE5VTEw7CisJc3RydWN0IGZpYl9pbmZvICpsYXN0X3Jlc29ydDsKKwlzdHJ1Y3QgZmliX2FsaWFzICpmYSA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqZmFfaGVhZDsKKwlzdHJ1Y3QgbGVhZiAqbDsKKworCWxhc3RfaWR4ID0gLTE7CisJbGFzdF9yZXNvcnQgPSBOVUxMOworCW9yZGVyID0gLTE7CisKKwlyZWFkX2xvY2soJmZpYl9sb2NrKTsKKwkKKwlsID0gZmliX2ZpbmRfbm9kZSh0LCAwKTsKKwlpZighbCkgCisJCWdvdG8gb3V0OworCisJZmFfaGVhZCA9IGdldF9mYV9oZWFkKGwsIDApOworCWlmKCFmYV9oZWFkKQorCQlnb3RvIG91dDsKKworCWlmIChsaXN0X2VtcHR5KGZhX2hlYWQpKSAKKwkJZ290byBvdXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZhLCBmYV9oZWFkLCBmYV9saXN0KSB7CisJCXN0cnVjdCBmaWJfaW5mbyAqbmV4dF9maSA9IGZhLT5mYV9pbmZvOworCQkKKwkJaWYgKGZhLT5mYV9zY29wZSAhPSByZXMtPnNjb3BlIHx8CisJCSAgICBmYS0+ZmFfdHlwZSAhPSBSVE5fVU5JQ0FTVCkKKwkJCWNvbnRpbnVlOworCQkKKwkJaWYgKG5leHRfZmktPmZpYl9wcmlvcml0eSA+IHJlcy0+ZmktPmZpYl9wcmlvcml0eSkKKwkJCWJyZWFrOworCQlpZiAoIW5leHRfZmktPmZpYl9uaFswXS5uaF9ndyB8fAorCQkgICAgbmV4dF9maS0+ZmliX25oWzBdLm5oX3Njb3BlICE9IFJUX1NDT1BFX0xJTkspCisJCQljb250aW51ZTsKKwkJZmEtPmZhX3N0YXRlIHw9IEZBX1NfQUNDRVNTRUQ7CisJCQorCQlpZiAoZmkgPT0gTlVMTCkgeworCQkJaWYgKG5leHRfZmkgIT0gcmVzLT5maSkKKwkJCQlicmVhazsKKwkJfSBlbHNlIGlmICghZmliX2RldGVjdF9kZWF0aChmaSwgb3JkZXIsICZsYXN0X3Jlc29ydCwKKwkJCQkJICAgICAmbGFzdF9pZHgsICZ0cmllX2xhc3RfZGZsdCkpIHsKKwkJCWlmIChyZXMtPmZpKQorCQkJCWZpYl9pbmZvX3B1dChyZXMtPmZpKTsKKwkJCXJlcy0+ZmkgPSBmaTsKKwkJCWF0b21pY19pbmMoJmZpLT5maWJfY2xudHJlZik7CisJCQl0cmllX2xhc3RfZGZsdCA9IG9yZGVyOworCQkJZ290byBvdXQ7CisJCX0KKwkJZmkgPSBuZXh0X2ZpOworCQlvcmRlcisrOworCX0KKwlpZiAob3JkZXIgPD0gMCB8fCBmaSA9PSBOVUxMKSB7CisJCXRyaWVfbGFzdF9kZmx0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghZmliX2RldGVjdF9kZWF0aChmaSwgb3JkZXIsICZsYXN0X3Jlc29ydCwgJmxhc3RfaWR4LCAmdHJpZV9sYXN0X2RmbHQpKSB7CisJCWlmIChyZXMtPmZpKQorCQkJZmliX2luZm9fcHV0KHJlcy0+ZmkpOworCQlyZXMtPmZpID0gZmk7CisJCWF0b21pY19pbmMoJmZpLT5maWJfY2xudHJlZik7CisJCXRyaWVfbGFzdF9kZmx0ID0gb3JkZXI7CisJCWdvdG8gb3V0OworCX0KKwlpZiAobGFzdF9pZHggPj0gMCkgeworCQlpZiAocmVzLT5maSkKKwkJCWZpYl9pbmZvX3B1dChyZXMtPmZpKTsKKwkJcmVzLT5maSA9IGxhc3RfcmVzb3J0OworCQlpZiAobGFzdF9yZXNvcnQpCisJCQlhdG9taWNfaW5jKCZsYXN0X3Jlc29ydC0+ZmliX2NsbnRyZWYpOworCX0KKwl0cmllX2xhc3RfZGZsdCA9IGxhc3RfaWR4OworIG91dDo7CisJcmVhZF91bmxvY2soJmZpYl9sb2NrKTsJCit9CisKK3N0YXRpYyBpbnQgZm5fdHJpZV9kdW1wX2ZhKHRfa2V5IGtleSwgaW50IHBsZW4sIHN0cnVjdCBsaXN0X2hlYWQgKmZhaCwgc3RydWN0IGZpYl90YWJsZSAqdGIsIAorCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQoreworCWludCBpLCBzX2k7CisJc3RydWN0IGZpYl9hbGlhcyAqZmE7CisKKwl1MzIgeGtleT1odG9ubChrZXkpOworCisJc19pPWNiLT5hcmdzWzNdOworCWkgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShmYSwgZmFoLCBmYV9saXN0KSB7CisJCWlmIChpIDwgc19pKSB7CisJCQlpKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmEtPmZhX2luZm8tPmZpYl9uaCA9PSBOVUxMKSB7CisJCQlwcmludGsoIlRyaWUgZXJyb3IgX2ZpYl9uaD1OVUxMIGluIGZhWyVkXSBrPSUwOHggcGxlbj0lZFxuIiwgaSwga2V5LCBwbGVuKTsKKwkJCWkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmYS0+ZmFfaW5mbyA9PSBOVUxMKSB7CisJCQlwcmludGsoIlRyaWUgZXJyb3IgZmFfaW5mbz1OVUxMIGluIGZhWyVkXSBrPSUwOHggcGxlbj0lZFxuIiwgaSwga2V5LCBwbGVuKTsKKwkJCWkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGZpYl9kdW1wX2luZm8oc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKKwkJCQkgIGNiLT5ubGgtPm5sbXNnX3NlcSwKKwkJCQkgIFJUTV9ORVdST1VURSwKKwkJCQkgIHRiLT50Yl9pZCwKKwkJCQkgIGZhLT5mYV90eXBlLAorCQkJCSAgZmEtPmZhX3Njb3BlLAorCQkJCSAgJnhrZXksCisJCQkJICBwbGVuLAorCQkJCSAgZmEtPmZhX3RvcywKKwkJCQkgIGZhLT5mYV9pbmZvLCAwKSA8IDApIHsKKwkJCWNiLT5hcmdzWzNdID0gaTsKKwkJCXJldHVybiAtMTsKKwkJCX0KKwkJaSsrOworCX0KKwljYi0+YXJnc1szXT1pOworCXJldHVybiBza2ItPmxlbjsKK30KKworc3RhdGljIGludCBmbl90cmllX2R1bXBfcGxlbihzdHJ1Y3QgdHJpZSAqdCwgaW50IHBsZW4sIHN0cnVjdCBmaWJfdGFibGUgKnRiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKKwkJCSAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQoreworCWludCBoLCBzX2g7CisJc3RydWN0IGxpc3RfaGVhZCAqZmFfaGVhZDsKKwlzdHJ1Y3QgbGVhZiAqbCA9IE5VTEw7CisJc19oPWNiLT5hcmdzWzJdOworCisJZm9yIChoPTA7IChsID0gbmV4dGxlYWYodCwgbCkpICE9IE5VTEw7IGgrKykgeworCisJCWlmIChoIDwgc19oKQorCQkJY29udGludWU7CisJCWlmIChoID4gc19oKQorCQkJbWVtc2V0KCZjYi0+YXJnc1szXSwgMCwKKwkJCSAgICAgICBzaXplb2YoY2ItPmFyZ3MpIC0gMypzaXplb2YoY2ItPmFyZ3NbMF0pKTsKKworCQlmYV9oZWFkID0gZ2V0X2ZhX2hlYWQobCwgcGxlbik7CisJCQorCQlpZighZmFfaGVhZCkKKwkJCWNvbnRpbnVlOworCisJCWlmKGxpc3RfZW1wdHkoZmFfaGVhZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoZm5fdHJpZV9kdW1wX2ZhKGwtPmtleSwgcGxlbiwgZmFfaGVhZCwgdGIsIHNrYiwgY2IpPDApIHsKKwkJCWNiLT5hcmdzWzJdPWg7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJY2ItPmFyZ3NbMl09aDsKKwlyZXR1cm4gc2tiLT5sZW47Cit9CisKK3N0YXRpYyBpbnQgZm5fdHJpZV9kdW1wKHN0cnVjdCBmaWJfdGFibGUgKnRiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCit7CisJaW50IG0sIHNfbTsKKwlzdHJ1Y3QgdHJpZSAqdCA9IChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YTsKKworCXNfbSA9IGNiLT5hcmdzWzFdOworCisJcmVhZF9sb2NrKCZmaWJfbG9jayk7CisJZm9yIChtPTA7IG08PTMyOyBtKyspIHsKKworCQlpZiAobSA8IHNfbSkKKwkJCWNvbnRpbnVlOworCQlpZiAobSA+IHNfbSkKKwkJCW1lbXNldCgmY2ItPmFyZ3NbMl0sIDAsCisJCQkgICAgICAgc2l6ZW9mKGNiLT5hcmdzKSAtIDIqc2l6ZW9mKGNiLT5hcmdzWzBdKSk7CisKKwkJaWYgKGZuX3RyaWVfZHVtcF9wbGVuKHQsIDMyLW0sIHRiLCBza2IsIGNiKTwwKSB7CisJCQljYi0+YXJnc1sxXSA9IG07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyZWFkX3VubG9jaygmZmliX2xvY2spOworCWNiLT5hcmdzWzFdID0gbTsKKwlyZXR1cm4gc2tiLT5sZW47Cisgb3V0OgorCXJlYWRfdW5sb2NrKCZmaWJfbG9jayk7CisJcmV0dXJuIC0xOworfQorCisvKiBGaXggbW9yZSBnZW5lcmljIEZJQiBuYW1lcyBmb3IgaW5pdCBsYXRlciAqLworCisjaWZkZWYgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUworc3RydWN0IGZpYl90YWJsZSAqIGZpYl9oYXNoX2luaXQoaW50IGlkKQorI2Vsc2UKK3N0cnVjdCBmaWJfdGFibGUgKiBfX2luaXQgZmliX2hhc2hfaW5pdChpbnQgaWQpCisjZW5kaWYKK3sKKwlzdHJ1Y3QgZmliX3RhYmxlICp0YjsKKwlzdHJ1Y3QgdHJpZSAqdDsKKworCWlmIChmbl9hbGlhc19rbWVtID09IE5VTEwpCisJCWZuX2FsaWFzX2ttZW0gPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaXBfZmliX2FsaWFzIiwKKwkJCQkJCSAgc2l6ZW9mKHN0cnVjdCBmaWJfYWxpYXMpLAorCQkJCQkJICAwLCBTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJCQkgIE5VTEwsIE5VTEwpOworCisJdGIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmliX3RhYmxlKSArIHNpemVvZihzdHJ1Y3QgdHJpZSksCisJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHRiID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJdGItPnRiX2lkID0gaWQ7CisJdGItPnRiX2xvb2t1cCA9IGZuX3RyaWVfbG9va3VwOworCXRiLT50Yl9pbnNlcnQgPSBmbl90cmllX2luc2VydDsKKwl0Yi0+dGJfZGVsZXRlID0gZm5fdHJpZV9kZWxldGU7CisJdGItPnRiX2ZsdXNoID0gZm5fdHJpZV9mbHVzaDsKKwl0Yi0+dGJfc2VsZWN0X2RlZmF1bHQgPSBmbl90cmllX3NlbGVjdF9kZWZhdWx0OworCXRiLT50Yl9kdW1wID0gZm5fdHJpZV9kdW1wOworCW1lbXNldCh0Yi0+dGJfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCB0cmllKSk7CisKKwl0ID0gKHN0cnVjdCB0cmllICopIHRiLT50Yl9kYXRhOworCisJdHJpZV9pbml0KHQpOworCisJaWYgKGlkID09IFJUX1RBQkxFX0xPQ0FMKSAKKyAgICAgICAgICAgICAgICB0cmllX2xvY2FsPXQ7CisJICBlbHNlIGlmIChpZCA9PSBSVF9UQUJMRV9NQUlOKSAKKyAgICAgICAgICAgICAgICB0cmllX21haW49dDsKKworCWlmIChpZCA9PSBSVF9UQUJMRV9MT0NBTCkKKwkJcHJpbnRrKCJJUHY0IEZJQjogVXNpbmcgTEMtdHJpZSB2ZXJzaW9uICVzXG4iLCBWRVJTSU9OKTsKKworCXJldHVybiB0YjsKK30KKworLyogVHJpZSBkdW1wIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgdm9pZCBwdXRzcGFjZV9zZXEoc3RydWN0IHNlcV9maWxlICpzZXEsIGludCBuKQoreworCXdoaWxlIChuLS0pIHNlcV9wcmludGYoc2VxLCAiICIpOworfQorCitzdGF0aWMgdm9pZCBwcmludGJpbl9zZXEoc3RydWN0IHNlcV9maWxlICpzZXEsIHVuc2lnbmVkIGludCB2LCBpbnQgYml0cykKK3sKKwl3aGlsZSAoYml0cy0tKQorCQlzZXFfcHJpbnRmKHNlcSwgIiVzIiwgKHYgJiAoMTw8Yml0cykpPyIxIjoiMCIpOworfQorCitzdGF0aWMgdm9pZCBwcmludG5vZGVfc2VxKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBpbnQgaW5kZW50LCBzdHJ1Y3Qgbm9kZSAqbiwgCisJCSAgIGludCBwZW5kLCBpbnQgY2luZGV4LCBpbnQgYml0cykKK3sKKwlwdXRzcGFjZV9zZXEoc2VxLCBpbmRlbnQpOworCWlmIChJU19MRUFGKG4pKQorCQlzZXFfcHJpbnRmKHNlcSwgInwiKTsKKwllbHNlCisJCXNlcV9wcmludGYoc2VxLCAiKyIpOworCWlmIChiaXRzKSB7CisJCXNlcV9wcmludGYoc2VxLCAiJWQvIiwgY2luZGV4KTsKKwkJcHJpbnRiaW5fc2VxKHNlcSwgY2luZGV4LCBiaXRzKTsKKwkJc2VxX3ByaW50ZihzZXEsICI6ICIpOworCX0KKwllbHNlCisJCXNlcV9wcmludGYoc2VxLCAiPHJvb3Q+OiAiKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiVzOiVwICIsIElTX0xFQUYobik/IkxlYWYiOiJJbnRlcm5hbCBub2RlIiwgbik7CisKKwlpZiAoSVNfTEVBRihuKSkKKwkJc2VxX3ByaW50ZihzZXEsICJrZXk9JWQuJWQuJWQuJWRcbiIsIAorCQkJICAgbi0+a2V5ID4+IDI0LCAobi0+a2V5ID4+IDE2KSAlIDI1NiwgKG4tPmtleSA+PiA4KSAlIDI1Niwgbi0+a2V5ICUgMjU2KTsKKwllbHNlIHsKKwkJaW50IHBsZW49KChzdHJ1Y3QgdG5vZGUgKiluKS0+cG9zOworCQl0X2tleSBwcmY9TUFTS19QRlgobi0+a2V5LCBwbGVuKTsKKwkJc2VxX3ByaW50ZihzZXEsICJrZXk9JWQuJWQuJWQuJWQvJWRcbiIsIAorCQkJICAgcHJmID4+IDI0LCAocHJmID4+IDE2KSAlIDI1NiwgKHByZiA+PiA4KSAlIDI1NiwgcHJmICUgMjU2LCBwbGVuKTsKKwl9CisJaWYgKElTX0xFQUYobikpIHsKKwkJc3RydWN0IGxlYWYgKmw9KHN0cnVjdCBsZWFmICopbjsKKwkJc3RydWN0IGZpYl9hbGlhcyAqZmE7CisJCWludCBpOworCQlmb3IgKGk9MzI7IGk+PTA7IGktLSkKKwkJICBpZihmaW5kX2xlYWZfaW5mbygmbC0+bGlzdCwgaSkpIHsKKwkJCQorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmZhX2hlYWQgPSBnZXRfZmFfaGVhZChsLCBpKTsKKwkJCQkKKwkJCQlpZighZmFfaGVhZCkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZihsaXN0X2VtcHR5KGZhX2hlYWQpKQorCQkJCQljb250aW51ZTsKKworCQkJCXB1dHNwYWNlX3NlcShzZXEsIGluZGVudCsyKTsKKwkJCQlzZXFfcHJpbnRmKHNlcSwgInsvJWQuLi5kdW1waW5nfVxuIiwgaSk7CisKKworCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmEsIGZhX2hlYWQsIGZhX2xpc3QpIHsKKwkJCQkJcHV0c3BhY2Vfc2VxKHNlcSwgaW5kZW50KzIpOworCQkJCQlpZiAoZmEtPmZhX2luZm8tPmZpYl9uaCA9PSBOVUxMKSB7CisJCQkJCQlzZXFfcHJpbnRmKHNlcSwgIkVycm9yIF9maWJfbmg9TlVMTFxuIik7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlpZiAoZmEtPmZhX2luZm8gPT0gTlVMTCkgeworCQkJCQkJc2VxX3ByaW50ZihzZXEsICJFcnJvciBmYV9pbmZvPU5VTExcbiIpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlzZXFfcHJpbnRmKHNlcSwgInt0eXBlPSVkIHNjb3BlPSVkIFRPUz0lZH1cbiIsCisJCQkJCSAgICAgIGZhLT5mYV90eXBlLAorCQkJCQkgICAgICBmYS0+ZmFfc2NvcGUsCisJCQkJCSAgICAgIGZhLT5mYV90b3MpOworCQkJCX0KKwkJCX0KKwl9CisJZWxzZSBpZiAoSVNfVE5PREUobikpIHsKKwkJc3RydWN0IHRub2RlICp0bj0oc3RydWN0IHRub2RlICopbjsKKwkJcHV0c3BhY2Vfc2VxKHNlcSwgaW5kZW50KTsgc2VxX3ByaW50ZihzZXEsICJ8ICAgICIpOworCQlzZXFfcHJpbnRmKHNlcSwgIntrZXkgcHJlZml4PSUwOHgvIiwgdG4tPmtleSZUS0VZX0dFVF9NQVNLKDAsIHRuLT5wb3MpKTsKKwkJcHJpbnRiaW5fc2VxKHNlcSwgdGtleV9leHRyYWN0X2JpdHModG4tPmtleSwgMCwgdG4tPnBvcyksIHRuLT5wb3MpOworCQlzZXFfcHJpbnRmKHNlcSwgIn1cbiIpOworCQlwdXRzcGFjZV9zZXEoc2VxLCBpbmRlbnQpOyBzZXFfcHJpbnRmKHNlcSwgInwgICAgIik7CisJCXNlcV9wcmludGYoc2VxLCAie3Bvcz0lZCIsIHRuLT5wb3MpOworCQlzZXFfcHJpbnRmKHNlcSwgIiAoc2tpcD0lZCBiaXRzKSIsIHRuLT5wb3MgLSBwZW5kKTsKKwkJc2VxX3ByaW50ZihzZXEsICIgYml0cz0lZCAoJXUgY2hpbGRyZW4pfVxuIiwgdG4tPmJpdHMsICgxIDw8IHRuLT5iaXRzKSk7CisJCXB1dHNwYWNlX3NlcShzZXEsIGluZGVudCk7IHNlcV9wcmludGYoc2VxLCAifCAgICAiKTsKKwkJc2VxX3ByaW50ZihzZXEsICJ7ZW1wdHk9JWQgZnVsbD0lZH1cbiIsIHRuLT5lbXB0eV9jaGlsZHJlbiwgdG4tPmZ1bGxfY2hpbGRyZW4pOworCX0KK30KKworc3RhdGljIHZvaWQgdHJpZV9kdW1wX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHRyaWUgKnQpCit7CisJc3RydWN0IG5vZGUgKm49dC0+dHJpZTsKKwlpbnQgY2luZGV4PTA7CisJaW50IGluZGVudD0xOworCWludCBwZW5kPTA7CisJaW50IGRlcHRoID0gMDsKKworICAJcmVhZF9sb2NrKCZmaWJfbG9jayk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIi0tLS0tLSB0cmllX2R1bXAgb2YgdD0lcCAtLS0tLS1cbiIsIHQpOworCWlmIChuKSB7CisJCXByaW50bm9kZV9zZXEoc2VxLCBpbmRlbnQsIG4sIHBlbmQsIGNpbmRleCwgMCk7CisJCWlmIChJU19UTk9ERShuKSkgeworCQkJc3RydWN0IHRub2RlICp0bj0oc3RydWN0IHRub2RlICopbjsKKwkJCXBlbmQgPSB0bi0+cG9zK3RuLT5iaXRzOworCQkJcHV0c3BhY2Vfc2VxKHNlcSwgaW5kZW50KTsgc2VxX3ByaW50ZihzZXEsICJcXC0tXG4iKTsKKwkJCWluZGVudCArPSAzOworCQkJZGVwdGgrKzsKKworCQkJd2hpbGUgKHRuICYmIGNpbmRleCA8ICgxIDw8IHRuLT5iaXRzKSkgeworCQkJCWlmICh0bi0+Y2hpbGRbY2luZGV4XSkgeworCQkJCQkKKwkJCQkJLyogR290IGEgY2hpbGQgKi8KKwkJCQkJCisJCQkJCXByaW50bm9kZV9zZXEoc2VxLCBpbmRlbnQsIHRuLT5jaGlsZFtjaW5kZXhdLCBwZW5kLCBjaW5kZXgsIHRuLT5iaXRzKTsKKwkJCQkJaWYgKElTX0xFQUYodG4tPmNoaWxkW2NpbmRleF0pKSB7IAorCQkJCQkJY2luZGV4Kys7CisJCQkJCQkKKwkJCQkJfQorCQkJCQllbHNlIHsKKwkJCQkJCS8qIAorCQkJCQkJICogTmV3IHRub2RlLiBEZWNlbmQgb25lIGxldmVsIAorCQkJCQkJICovCisJCQkJCQkKKwkJCQkJCWRlcHRoKys7CisJCQkJCQluPXRuLT5jaGlsZFtjaW5kZXhdOworCQkJCQkJdG49KHN0cnVjdCB0bm9kZSAqKW47CisJCQkJCQlwZW5kPXRuLT5wb3MrdG4tPmJpdHM7CisJCQkJCQlwdXRzcGFjZV9zZXEoc2VxLCBpbmRlbnQpOyBzZXFfcHJpbnRmKHNlcSwgIlxcLS1cbiIpOworCQkJCQkJaW5kZW50Kz0zOworCQkJCQkJY2luZGV4PTA7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSAKKwkJCQkJY2luZGV4Kys7CisKKwkJCQkvKgorCQkJCSAqIFRlc3QgaWYgd2UgYXJlIGRvbmUgCisJCQkJICovCisJCQkJCisJCQkJd2hpbGUgKGNpbmRleCA+PSAoMSA8PCB0bi0+Yml0cykpIHsKKworCQkJCQkvKgorCQkJCQkgKiBNb3ZlIHVwd2FyZHMgYW5kIHRlc3QgZm9yIHJvb3QKKwkJCQkJICogcG9wIG9mZiBhbGwgdHJhdmVyc2VkICBub2RlcworCQkJCQkgKi8KKwkJCQkJCisJCQkJCWlmIChOT0RFX1BBUkVOVCh0bikgPT0gTlVMTCkgeworCQkJCQkJdG4gPSBOVUxMOworCQkJCQkJbiA9IE5VTEw7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQllbHNlIHsKKwkJCQkJCWNpbmRleCA9IHRrZXlfZXh0cmFjdF9iaXRzKHRuLT5rZXksIE5PREVfUEFSRU5UKHRuKS0+cG9zLCBOT0RFX1BBUkVOVCh0biktPmJpdHMpOworCQkJCQkJdG4gPSBOT0RFX1BBUkVOVCh0bik7CisJCQkJCQljaW5kZXgrKzsKKwkJCQkJCW49KHN0cnVjdCBub2RlICopdG47CisJCQkJCQlwZW5kPXRuLT5wb3MrdG4tPmJpdHM7CisJCQkJCQlpbmRlbnQtPTM7CisJCQkJCQlkZXB0aC0tOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgbiA9IE5VTEw7CisJfQorCWVsc2Ugc2VxX3ByaW50ZihzZXEsICItLS0tLS0gdHJpZSBpcyBlbXB0eVxuIik7CisKKyAgCXJlYWRfdW5sb2NrKCZmaWJfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJpZV9zdGF0ICp0cmllX3N0YXRfbmV3KHZvaWQpCit7CisJc3RydWN0IHRyaWVfc3RhdCAqcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmllX3N0YXQpLCBHRlBfS0VSTkVMKTsKKwlpbnQgaTsKKwkKKwlpZihzKSB7CisJCXMtPnRvdGRlcHRoID0gMDsKKwkJcy0+bWF4ZGVwdGggPSAwOworCQlzLT50bm9kZXMgPSAwOworCQlzLT5sZWF2ZXMgPSAwOworCQlzLT5udWxscG9pbnRlcnMgPSAwOworCQkKKwkJZm9yKGk9MDsgaTwgTUFYX0NISUxEUzsgaSsrKQorCQkJcy0+bm9kZXNpemVzW2ldID0gMDsKKwl9CisJcmV0dXJuIHM7Cit9ICAgIAorCitzdGF0aWMgc3RydWN0IHRyaWVfc3RhdCAqdHJpZV9jb2xsZWN0X3N0YXRzKHN0cnVjdCB0cmllICp0KQoreworCXN0cnVjdCBub2RlICpuPXQtPnRyaWU7CisJc3RydWN0IHRyaWVfc3RhdCAqcyA9IHRyaWVfc3RhdF9uZXcoKTsKKwlpbnQgY2luZGV4ID0gMDsKKwlpbnQgaW5kZW50ID0gMTsKKwlpbnQgcGVuZCA9IDA7CisJaW50IGRlcHRoID0gMDsKKworCXJlYWRfbG9jaygmZmliX2xvY2spOwkJCisKKwlpZiAocykgeworCQlpZiAobikgeworCQkJaWYgKElTX1ROT0RFKG4pKSB7CisJCQkJc3RydWN0IHRub2RlICp0biA9IChzdHJ1Y3QgdG5vZGUgKiluOworCQkJCXBlbmQ9dG4tPnBvcyt0bi0+Yml0czsKKwkJCQlpbmRlbnQgKz0gMzsKKwkJCQlzLT5ub2Rlc2l6ZXNbdG4tPmJpdHNdKys7CisJCQkJZGVwdGgrKzsKKworCQkJCXdoaWxlICh0biAmJiBjaW5kZXggPCAoMSA8PCB0bi0+Yml0cykpIHsKKwkJCQkJaWYgKHRuLT5jaGlsZFtjaW5kZXhdKSB7CisJCQkJCQkvKiBHb3QgYSBjaGlsZCAqLworCQkJCQkKKwkJCQkJCWlmIChJU19MRUFGKHRuLT5jaGlsZFtjaW5kZXhdKSkgeyAKKwkJCQkJCQljaW5kZXgrKzsKKwkJCQkJCQorCQkJCQkJCS8qIHN0YXRzICovCisJCQkJCQkJaWYgKGRlcHRoID4gcy0+bWF4ZGVwdGgpCisJCQkJCQkJCXMtPm1heGRlcHRoID0gZGVwdGg7CisJCQkJCQkJcy0+dG90ZGVwdGggKz0gZGVwdGg7CisJCQkJCQkJcy0+bGVhdmVzKys7CisJCQkJCQl9CisJCQkJCQorCQkJCQkJZWxzZSB7CisJCQkJCQkJLyogCisJCQkJCQkJICogTmV3IHRub2RlLiBEZWNlbmQgb25lIGxldmVsIAorCQkJCQkJCSAqLworCQkJCQkJCisJCQkJCQkJcy0+dG5vZGVzKys7CisJCQkJCQkJcy0+bm9kZXNpemVzW3RuLT5iaXRzXSsrOworCQkJCQkJCWRlcHRoKys7CisJCQkJCQkKKwkJCQkJCQluID0gdG4tPmNoaWxkW2NpbmRleF07CisJCQkJCQkJdG4gPSAoc3RydWN0IHRub2RlICopbjsKKwkJCQkJCQlwZW5kID0gdG4tPnBvcyt0bi0+Yml0czsKKworCQkJCQkJCWluZGVudCArPSAzOworCQkJCQkJCWNpbmRleCA9IDA7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQljaW5kZXgrKzsKKwkJCQkJCXMtPm51bGxwb2ludGVycysrOyAKKwkJCQkJfQorCisJCQkJCS8qCisJCQkJCSAqIFRlc3QgaWYgd2UgYXJlIGRvbmUgCisJCQkJCSAqLworCQkJCQorCQkJCQl3aGlsZSAoY2luZGV4ID49ICgxIDw8IHRuLT5iaXRzKSkgeworCisJCQkJCQkvKgorCQkJCQkJICogTW92ZSB1cHdhcmRzIGFuZCB0ZXN0IGZvciByb290CisJCQkJCQkgKiBwb3Agb2ZmIGFsbCB0cmF2ZXJzZWQgIG5vZGVzCisJCQkJCQkgKi8KKworCQkJCQkJCisJCQkJCQlpZiAoTk9ERV9QQVJFTlQodG4pID09IE5VTEwpIHsKKwkJCQkJCQl0biA9IE5VTEw7CisJCQkJCQkJbiA9IE5VTEw7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQllbHNlIHsKKwkJCQkJCQljaW5kZXggPSB0a2V5X2V4dHJhY3RfYml0cyh0bi0+a2V5LCBOT0RFX1BBUkVOVCh0biktPnBvcywgTk9ERV9QQVJFTlQodG4pLT5iaXRzKTsKKwkJCQkJCQl0biA9IE5PREVfUEFSRU5UKHRuKTsKKwkJCQkJCQljaW5kZXgrKzsgCisJCQkJCQkJbiA9IChzdHJ1Y3Qgbm9kZSAqKXRuOworCQkJCQkJCXBlbmQ9dG4tPnBvcyt0bi0+Yml0czsKKwkJCQkJCQlpbmRlbnQgLT0gMzsKKwkJCQkJCQlkZXB0aC0tOworCQkJCQkJfQorIAkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgbiA9IE5VTEw7CisJCX0KKwl9CisKKwlyZWFkX3VubG9jaygmZmliX2xvY2spOwkJCisJcmV0dXJuIHM7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCitzdGF0aWMgc3RydWN0IGZpYl9hbGlhcyAqZmliX3RyaWVzdGF0X2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBmaWJfYWxpYXMgKmZpYl90cmllc3RhdF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmZpYl90cmllc3RhdF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQoreworCXZvaWQgKnYgPSBOVUxMOworCisJaWYgKGlwX2ZpYl9tYWluX3RhYmxlKQorCQl2ID0gKnBvcyA/IGZpYl90cmllc3RhdF9nZXRfbmV4dChzZXEpIDogU0VRX1NUQVJUX1RPS0VOOworCXJldHVybiB2OworfQorCitzdGF0aWMgdm9pZCAqZmliX3RyaWVzdGF0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkrKypwb3M7CisJcmV0dXJuIHYgPT0gU0VRX1NUQVJUX1RPS0VOID8gZmliX3RyaWVzdGF0X2dldF9maXJzdChzZXEpIDogZmliX3RyaWVzdGF0X2dldF9uZXh0KHNlcSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpYl90cmllc3RhdF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKworfQorCisvKiAKKyAqCVRoaXMgb3V0cHV0cyAvcHJvYy9uZXQvZmliX3RyaWVzdGF0cworICoKKyAqCUl0IGFsd2F5cyB3b3JrcyBpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUuCisgKglUaGUgZm9ybWF0IG9mIHRoZSBmaWxlIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBjaGFuZ2VkLgorICovCisKK3N0YXRpYyB2b2lkIGNvbGxlY3RfYW5kX3Nob3coc3RydWN0IHRyaWUgKnQsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQoreworCWludCBieXRlcyA9IDA7IC8qIEhvdyBtYW55IGJ5dGVzIGFyZSB1c2VkLCBhIHJlZiBpcyA0IGJ5dGVzICovCisJaW50IGksIG1heCwgcG9pbnRlcnM7CisgICAgICAgIHN0cnVjdCB0cmllX3N0YXQgKnN0YXQ7CisJaW50IGF2ZGVwdGg7CisKKwlzdGF0ID0gdHJpZV9jb2xsZWN0X3N0YXRzKHQpOworCisJYnl0ZXM9MDsKKwlzZXFfcHJpbnRmKHNlcSwgInRyaWU9JXBcbiIsIHQpOworCisJaWYgKHN0YXQpIHsKKwkJaWYgKHN0YXQtPmxlYXZlcykKKwkJCWF2ZGVwdGg9c3RhdC0+dG90ZGVwdGgqMTAwIC8gc3RhdC0+bGVhdmVzOworCQllbHNlCisJCQlhdmRlcHRoPTA7CisJCXNlcV9wcmludGYoc2VxLCAiQXZlciBkZXB0aDogJWQuJTAyZFxuIiwgYXZkZXB0aCAvIDEwMCwgYXZkZXB0aCAlIDEwMCApOworCQlzZXFfcHJpbnRmKHNlcSwgIk1heCBkZXB0aDogJTRkXG4iLCBzdGF0LT5tYXhkZXB0aCk7CisJCQkJCisJCXNlcV9wcmludGYoc2VxLCAiTGVhdmVzOiAlZFxuIiwgc3RhdC0+bGVhdmVzKTsKKwkJYnl0ZXMgKz0gc2l6ZW9mKHN0cnVjdCBsZWFmKSAqIHN0YXQtPmxlYXZlczsKKwkJc2VxX3ByaW50ZihzZXEsICJJbnRlcm5hbCBub2RlczogJWRcbiIsIHN0YXQtPnRub2Rlcyk7CisJCWJ5dGVzICs9IHNpemVvZihzdHJ1Y3QgdG5vZGUpICogc3RhdC0+dG5vZGVzOworCisJCW1heCA9IE1BWF9DSElMRFMtMTsKKworCQl3aGlsZSAobWF4ID49IDAgJiYgc3RhdC0+bm9kZXNpemVzW21heF0gPT0gMCkKKwkJCW1heC0tOworCQlwb2ludGVycyA9IDA7CisKKwkJZm9yIChpID0gMTsgaSA8PSBtYXg7IGkrKykgCisJCQlpZiAoc3RhdC0+bm9kZXNpemVzW2ldICE9IDApIHsKKwkJCQlzZXFfcHJpbnRmKHNlcSwgIiAgJWQ6ICVkIiwgIGksIHN0YXQtPm5vZGVzaXplc1tpXSk7CisJCQkJcG9pbnRlcnMgKz0gKDE8PGkpICogc3RhdC0+bm9kZXNpemVzW2ldOworCQkJfQorCQlzZXFfcHJpbnRmKHNlcSwgIlxuIik7CisJCXNlcV9wcmludGYoc2VxLCAiUG9pbnRlcnM6ICVkXG4iLCBwb2ludGVycyk7CisJCWJ5dGVzICs9IHNpemVvZihzdHJ1Y3Qgbm9kZSAqKSAqIHBvaW50ZXJzOworCQlzZXFfcHJpbnRmKHNlcSwgIk51bGwgcHRyczogJWRcbiIsIHN0YXQtPm51bGxwb2ludGVycyk7CisJCXNlcV9wcmludGYoc2VxLCAiVG90YWwgc2l6ZTogJWQgIGtCXG4iLCBieXRlcyAvIDEwMjQpOworCisJCWtmcmVlKHN0YXQpOworCX0KKworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworCXNlcV9wcmludGYoc2VxLCAiQ291bnRlcnM6XG4tLS0tLS0tLS1cbiIpOworCXNlcV9wcmludGYoc2VxLCJnZXRzID0gJWRcbiIsIHQtPnN0YXRzLmdldHMpOworCXNlcV9wcmludGYoc2VxLCJiYWNrdHJhY2tzID0gJWRcbiIsIHQtPnN0YXRzLmJhY2t0cmFjayk7CisJc2VxX3ByaW50ZihzZXEsInNlbWFudGljIG1hdGNoIHBhc3NlZCA9ICVkXG4iLCB0LT5zdGF0cy5zZW1hbnRpY19tYXRjaF9wYXNzZWQpOworCXNlcV9wcmludGYoc2VxLCJzZW1hbnRpYyBtYXRjaCBtaXNzID0gJWRcbiIsIHQtPnN0YXRzLnNlbWFudGljX21hdGNoX21pc3MpOworCXNlcV9wcmludGYoc2VxLCJudWxsIG5vZGUgaGl0PSAlZFxuIiwgdC0+c3RhdHMubnVsbF9ub2RlX2hpdCk7CisjaWZkZWYgQ0xFQVJfU1RBVFMKKwltZW1zZXQoJih0LT5zdGF0cyksIDAsIHNpemVvZih0LT5zdGF0cykpOworI2VuZGlmCisjZW5kaWYgLyogIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUyAqLworfQorCitzdGF0aWMgaW50IGZpYl90cmllc3RhdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwljaGFyIGJmWzEyOF07CisgICAgCisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJCXNlcV9wcmludGYoc2VxLCAiQmFzaWMgaW5mbzogc2l6ZSBvZiBsZWFmOiAlWmQgYnl0ZXMsIHNpemUgb2YgdG5vZGU6ICVaZCBieXRlcy5cbiIsIAorCQkJICAgc2l6ZW9mKHN0cnVjdCBsZWFmKSwgc2l6ZW9mKHN0cnVjdCB0bm9kZSkpOworCQlpZiAodHJpZV9sb2NhbCkgCisJCQljb2xsZWN0X2FuZF9zaG93KHRyaWVfbG9jYWwsIHNlcSk7CisKKwkJaWYgKHRyaWVfbWFpbikgCisJCQljb2xsZWN0X2FuZF9zaG93KHRyaWVfbWFpbiwgc2VxKTsKKwl9CisJZWxzZSB7CisJCXNucHJpbnRmKGJmLCBzaXplb2YoYmYpLAorCQkJICIqXHQlMDhYXHQlMDhYIiwgMjAwLCA0MDApOworCQkKKwkJc2VxX3ByaW50ZihzZXEsICIlLTEyN3NcbiIsIGJmKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZmliX3RyaWVzdGF0X3NlcV9vcHMgPSB7CisJLnN0YXJ0ICA9IGZpYl90cmllc3RhdF9zZXFfc3RhcnQsCisJLm5leHQgICA9IGZpYl90cmllc3RhdF9zZXFfbmV4dCwKKwkuc3RvcCAgID0gZmliX3RyaWVzdGF0X3NlcV9zdG9wLAorCS5zaG93ICAgPSBmaWJfdHJpZXN0YXRfc2VxX3Nob3csCit9OworCitzdGF0aWMgaW50IGZpYl90cmllc3RhdF9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKKwlpbnQgcmMgPSAtRU5PTUVNOworCisJcmMgPSBzZXFfb3BlbihmaWxlLCAmZmliX3RyaWVzdGF0X3NlcV9vcHMpOworCWlmIChyYykKKwkJZ290byBvdXRfa2ZyZWU7CisKKwlzZXEJICAgICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKK291dDoKKwlyZXR1cm4gcmM7CitvdXRfa2ZyZWU6CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZpYl90cmllc3RhdF9zZXFfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgICAgID0gZmliX3RyaWVzdGF0X3NlcV9vcGVuLAorCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCit9OworCitpbnQgX19pbml0IGZpYl9zdGF0X3Byb2NfaW5pdCh2b2lkKQoreworCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoImZpYl90cmllc3RhdCIsIFNfSVJVR08sICZmaWJfdHJpZXN0YXRfc2VxX2ZvcHMpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgZmliX3N0YXRfcHJvY19leGl0KHZvaWQpCit7CisJcHJvY19uZXRfcmVtb3ZlKCJmaWJfdHJpZXN0YXQiKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWJfYWxpYXMgKmZpYl90cmllX2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBmaWJfYWxpYXMgKmZpYl90cmllX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqZmliX3RyaWVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3sKKwl2b2lkICp2ID0gTlVMTDsKKworCWlmIChpcF9maWJfbWFpbl90YWJsZSkKKwkJdiA9ICpwb3MgPyBmaWJfdHJpZV9nZXRfbmV4dChzZXEpIDogU0VRX1NUQVJUX1RPS0VOOworCXJldHVybiB2OworfQorCitzdGF0aWMgdm9pZCAqZmliX3RyaWVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCSsrKnBvczsKKwlyZXR1cm4gdiA9PSBTRVFfU1RBUlRfVE9LRU4gPyBmaWJfdHJpZV9nZXRfZmlyc3Qoc2VxKSA6IGZpYl90cmllX2dldF9uZXh0KHNlcSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpYl90cmllX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCit9CisKKy8qIAorICoJVGhpcyBvdXRwdXRzIC9wcm9jL25ldC9maWJfdHJpZS4KKyAqCisgKglJdCBhbHdheXMgd29ya3MgaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBtb2RlLgorICoJVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZC4KKyAqLworCitzdGF0aWMgaW50IGZpYl90cmllX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCWNoYXIgYmZbMTI4XTsKKworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgeworCQlpZiAodHJpZV9sb2NhbCkgCisJCQl0cmllX2R1bXBfc2VxKHNlcSwgdHJpZV9sb2NhbCk7CisKKwkJaWYgKHRyaWVfbWFpbikgCisJCQl0cmllX2R1bXBfc2VxKHNlcSwgdHJpZV9tYWluKTsKKwl9CisKKwllbHNlIHsKKwkJc25wcmludGYoYmYsIHNpemVvZihiZiksCisJCQkgIipcdCUwOFhcdCUwOFgiLCAyMDAsIDQwMCk7CisJCXNlcV9wcmludGYoc2VxLCAiJS0xMjdzXG4iLCBiZik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZmliX3RyaWVfc2VxX29wcyA9IHsKKwkuc3RhcnQgID0gZmliX3RyaWVfc2VxX3N0YXJ0LAorCS5uZXh0ICAgPSBmaWJfdHJpZV9zZXFfbmV4dCwKKwkuc3RvcCAgID0gZmliX3RyaWVfc2VxX3N0b3AsCisJLnNob3cgICA9IGZpYl90cmllX3NlcV9zaG93LAorfTsKKworc3RhdGljIGludCBmaWJfdHJpZV9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKKwlpbnQgcmMgPSAtRU5PTUVNOworCisJcmMgPSBzZXFfb3BlbihmaWxlLCAmZmliX3RyaWVfc2VxX29wcyk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9rZnJlZTsKKworCXNlcQkgICAgID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworb3V0OgorCXJldHVybiByYzsKK291dF9rZnJlZToKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmliX3RyaWVfc2VxX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICA9IGZpYl90cmllX3NlcV9vcGVuLAorCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCit9OworCitpbnQgX19pbml0IGZpYl9wcm9jX2luaXQodm9pZCkKK3sKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKCJmaWJfdHJpZSIsIFNfSVJVR08sICZmaWJfdHJpZV9zZXFfZm9wcykpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBmaWJfcHJvY19leGl0KHZvaWQpCit7CisJcHJvY19uZXRfcmVtb3ZlKCJmaWJfdHJpZSIpOworfQorCisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2lucHV0LmMgYi9uZXQvaXB2NC9pcF9pbnB1dC5jCmluZGV4IDRlNDdhMjYuLmFmMmVjODggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfaW5wdXQuYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAJCQkJCXJhd19yY3YobGFzdCwgc2tiMik7CiAJCQl9CiAJCQlsYXN0ID0gc2s7CisJCQluZl9yZXNldChza2IpOwogCQl9CiAJfQogCkBAIC0yMDAsMTAgKzIwMSw2IEBACiB7CiAJaW50IGlobCA9IHNrYi0+bmguaXBoLT5paGwqNDsKIAotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKLQluZl9kZWJ1Z19pcF9sb2NhbF9kZWxpdmVyKHNrYik7Ci0jZW5kaWYgLypDT05GSUdfTkVURklMVEVSX0RFQlVHKi8KLQogCV9fc2tiX3B1bGwoc2tiLCBpaGwpOwogCiAJLyogRnJlZSByZWZlcmVuY2UgZWFybHk6IHdlIGRvbid0IG5lZWQgaXQgYW55IG1vcmUsIGFuZCBpdCBtYXkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggNzYwZGM4Mi4uZWUwN2FlYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTEwNywxMCArMTA3LDYgQEAKIAluZXdza2ItPnBrdF90eXBlID0gUEFDS0VUX0xPT1BCQUNLOwogCW5ld3NrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJQlVHX1RSQVAobmV3c2tiLT5kc3QpOwotCi0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotCW5mX2RlYnVnX2lwX2xvb3BiYWNrX3htaXQobmV3c2tiKTsKLSNlbmRpZgogCW5mX3Jlc2V0KG5ld3NrYik7CiAJbmV0aWZfcngobmV3c2tiKTsKIAlyZXR1cm4gMDsKQEAgLTE5MiwxMCArMTg4LDYgQEAKIAkJc2tiID0gc2tiMjsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0JbmZfZGVidWdfaXBfZmluaXNoX291dHB1dDIoc2tiKTsKLSNlbmRpZiAvKkNPTkZJR19ORVRGSUxURVJfREVCVUcqLwotCiAJbmZfcmVzZXQoc2tiKTsKIAogCWlmIChoaCkgewpAQCAtNDE1LDkgKzQwNyw2IEBACiAJdG8tPm5mX2JyaWRnZSA9IGZyb20tPm5mX2JyaWRnZTsKIAluZl9icmlkZ2VfZ2V0KHRvLT5uZl9icmlkZ2UpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotCXRvLT5uZl9kZWJ1ZyA9IGZyb20tPm5mX2RlYnVnOwotI2VuZGlmCiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IGUyMWMwNDkuLmU0ZjgwOWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTEzNTAsNiArMTM1MCw3IEBACiAJCQkgICAgICovCiAJCQkgICAgcmVhZF9sb2NrKCZtcnRfbG9jayk7CiAJCQkgICAgaWYgKG1yb3V0ZV9zb2NrZXQpIHsKKwkJCQkgICAgbmZfcmVzZXQoc2tiKTsKIAkJCQkgICAgcmF3X3Jjdihtcm91dGVfc29ja2V0LCBza2IpOwogCQkJCSAgICByZWFkX3VubG9jaygmbXJ0X2xvY2spOwogCQkJCSAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c194bWl0LmMKaW5kZXggZGUyMWRhMC4uYTg1MTJhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c194bWl0LmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c194bWl0LmMKQEAgLTEyNyw3ICsxMjcsNiBAQAogCiAjZGVmaW5lIElQX1ZTX1hNSVQoc2tiLCBydCkJCQkJXAogZG8gewkJCQkJCQlcCi0JbmZfcmVzZXRfZGVidWcoc2tiKTsJCQkJXAogCShza2IpLT5uZmNhY2hlIHw9IE5GQ19JUFZTX1BST1BFUlRZOwkJXAogCShza2IpLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwkJXAogCU5GX0hPT0soUEZfSU5FVCwgTkZfSVBfTE9DQUxfT1VULCAoc2tiKSwgTlVMTCwJXApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggZGY3OWY1ZS4uZmExNjM0MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC02MCw3ICs2MCw2IEBACiAKICNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KSBBUlBfTkZfQVNTRVJUKGRvd25fdHJ5bG9jaygmYXJwdF9tdXRleCkgIT0gMCkKICNkZWZpbmUgQVNTRVJUX1dSSVRFX0xPQ0soeCkgQVJQX05GX0FTU0VSVChkb3duX3RyeWxvY2soJmFycHRfbXV0ZXgpICE9IDApCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oPgogCiBzdHJ1Y3QgYXJwdF90YWJsZV9pbmZvIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2FtYW5kYS5jCmluZGV4IDNkYmRkZDAuLmE3OGEzMjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19hbWFuZGEuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC91ZHAuaD4KIAotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2xvY2toZWxwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19hbWFuZGEuaD4KIApAQCAtNDIsNyArNDEsNyBAQAogCiAvKiBUaGlzIGlzIHNsb3csIGJ1dCBpdCdzIHNpbXBsZS4gLS1SUiAqLwogc3RhdGljIGNoYXIgYW1hbmRhX2J1ZmZlcls2NTUzNl07Ci1zdGF0aWMgREVDTEFSRV9MT0NLKGFtYW5kYV9idWZmZXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFtYW5kYV9idWZmZXJfbG9jayk7CiAKIHVuc2lnbmVkIGludCAoKmlwX25hdF9hbWFuZGFfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAogCQkJCSAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLApAQCAtNzYsNyArNzUsNyBAQAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAotCUxPQ0tfQkgoJmFtYW5kYV9idWZmZXJfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZhbWFuZGFfYnVmZmVyX2xvY2spOwogCXNrYl9jb3B5X2JpdHMoKnBza2IsIGRhdGFvZmYsIGFtYW5kYV9idWZmZXIsICgqcHNrYiktPmxlbiAtIGRhdGFvZmYpOwogCWRhdGEgPSBhbWFuZGFfYnVmZmVyOwogCWRhdGFfbGltaXQgPSBhbWFuZGFfYnVmZmVyICsgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZjsKQEAgLTEzNCw3ICsxMzMsNyBAQAogCX0KIAogb3V0OgotCVVOTE9DS19CSCgmYW1hbmRhX2J1ZmZlcl9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYW1hbmRhX2J1ZmZlcl9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jCmluZGV4IDA5ZTgyNDYuLjRiNzhlYmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jCkBAIC0zOCwxMCArMzgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCi0vKiBUaGlzIHJ3bG9jayBwcm90ZWN0cyB0aGUgbWFpbiBoYXNoIHRhYmxlLCBwcm90b2NvbC9oZWxwZXIvZXhwZWN0ZWQKKy8qIGlwX2Nvbm50cmFja19sb2NrIHByb3RlY3RzIHRoZSBtYWluIGhhc2ggdGFibGUsIHByb3RvY29sL2hlbHBlci9leHBlY3RlZAogICAgcmVnaXN0cmF0aW9ucywgY29ubnRyYWNrIHRpbWVycyovCi0jZGVmaW5lIEFTU0VSVF9SRUFEX0xPQ0soeCkgTVVTVF9CRV9SRUFEX0xPQ0tFRCgmaXBfY29ubnRyYWNrX2xvY2spCi0jZGVmaW5lIEFTU0VSVF9XUklURV9MT0NLKHgpIE1VU1RfQkVfV1JJVEVfTE9DS0VEKCZpcF9jb25udHJhY2tfbG9jaykKKyNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KQorI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KQogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmg+CkBAIC01Nyw3ICs1Nyw3IEBACiAjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAotREVDTEFSRV9SV0xPQ0soaXBfY29ubnRyYWNrX2xvY2spOworREVGSU5FX1JXTE9DSyhpcF9jb25udHJhY2tfbG9jayk7CiAKIC8qIGlwX2Nvbm50cmFja19zdGFuZGFsb25lIG5lZWRzIHRoaXMgKi8KIGF0b21pY190IGlwX2Nvbm50cmFja19jb3VudCA9IEFUT01JQ19JTklUKDApOwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIHN0YXRpYyB2b2lkIHVubGlua19leHBlY3Qoc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCkKIHsKLQlNVVNUX0JFX1dSSVRFX0xPQ0tFRCgmaXBfY29ubnRyYWNrX2xvY2spOworCUFTU0VSVF9XUklURV9MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CiAJbGlzdF9kZWwoJmV4cC0+bGlzdCk7CiAJLyogTG9naWNhbGx5IGluIGRlc3Ryb3lfZXhwZWN0LCBidXQgd2UgaG9sZCB0aGUgbG9jayBoZXJlLiAqLwogCWV4cC0+bWFzdGVyLT5leHBlY3RpbmctLTsKQEAgLTE1Nyw5ICsxNTcsOSBAQAogewogCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHAgPSAodm9pZCAqKXVsX2V4cGVjdDsKIAotCVdSSVRFX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJdW5saW5rX2V4cGVjdChleHApOwotCVdSSVRFX1VOTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCWRlc3Ryb3lfZXhwZWN0KGV4cCk7CiB9CiAKQEAgLTIwOSw3ICsyMDksNyBAQAogCXVuc2lnbmVkIGludCBobywgaHI7CiAJCiAJREVCVUdQKCJjbGVhbl9mcm9tX2xpc3RzKCVwKVxuIiwgY3QpOwotCU1VU1RfQkVfV1JJVEVfTE9DS0VEKCZpcF9jb25udHJhY2tfbG9jayk7CisJQVNTRVJUX1dSSVRFX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKIAogCWhvID0gaGFzaF9jb25udHJhY2soJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CiAJaHIgPSBoYXNoX2Nvbm50cmFjaygmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKQEAgLTI0MCw3ICsyNDAsNyBAQAogCWlmIChpcF9jb25udHJhY2tfZGVzdHJveWVkKQogCQlpcF9jb25udHJhY2tfZGVzdHJveWVkKGN0KTsKIAotCVdSSVRFX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJLyogRXhwZWN0YXRpb25zIHdpbGwgaGF2ZSBiZWVuIHJlbW92ZWQgaW4gY2xlYW5fZnJvbV9saXN0cywKIAkgKiBleGNlcHQgVEZUUCBjYW4gY3JlYXRlIGFuIGV4cGVjdGF0aW9uIG9uIHRoZSBmaXJzdCBwYWNrZXQsCiAJICogYmVmb3JlIGNvbm5lY3Rpb24gaXMgaW4gdGhlIGxpc3QsIHNvIHdlIG5lZWQgdG8gY2xlYW4gaGVyZSwKQEAgLTI1NCw3ICsyNTQsNyBAQAogCX0KIAogCUNPTk5UUkFDS19TVEFUX0lOQyhkZWxldGUpOwotCVdSSVRFX1VOTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCiAJaWYgKGN0LT5tYXN0ZXIpCiAJCWlwX2Nvbm50cmFja19wdXQoY3QtPm1hc3Rlcik7CkBAIC0yNjgsMTIgKzI2OCwxMiBAQAogewogCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0ID0gKHZvaWQgKil1bF9jb25udHJhY2s7CiAKLQlXUklURV9MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJd3JpdGVfbG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCS8qIEluc2lkZSBsb2NrIHNvIHByZWVtcHQgaXMgZGlzYWJsZWQgb24gbW9kdWxlIHJlbW92YWwgcGF0aC4KIAkgKiBPdGhlcndpc2Ugd2UgY2FuIGdldCBzcHVyaW91cyB3YXJuaW5ncy4gKi8KIAlDT05OVFJBQ0tfU1RBVF9JTkMoZGVsZXRlX2xpc3QpOwogCWNsZWFuX2Zyb21fbGlzdHMoY3QpOwotCVdSSVRFX1VOTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCWlwX2Nvbm50cmFja19wdXQoY3QpOwogfQogCkBAIC0yODIsNyArMjgyLDcgQEAKIAkJICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFjayAqaWdub3JlZF9jb25udHJhY2spCiB7Ci0JTVVTVF9CRV9SRUFEX0xPQ0tFRCgmaXBfY29ubnRyYWNrX2xvY2spOworCUFTU0VSVF9SRUFEX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKIAlyZXR1cm4gdHVwbGVoYXNoX3RvX2N0cmFjayhpKSAhPSBpZ25vcmVkX2Nvbm50cmFjawogCQkmJiBpcF9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmktPnR1cGxlKTsKIH0KQEAgLTI5NCw3ICsyOTQsNyBAQAogCXN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKHR1cGxlKTsKIAotCU1VU1RfQkVfUkVBRF9MT0NLRUQoJmlwX2Nvbm50cmFja19sb2NrKTsKKwlBU1NFUlRfUkVBRF9MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShoLCAmaXBfY29ubnRyYWNrX2hhc2hbaGFzaF0sIGxpc3QpIHsKIAkJaWYgKGNvbm50cmFja190dXBsZV9jbXAoaCwgdHVwbGUsIGlnbm9yZWRfY29ubnRyYWNrKSkgewogCQkJQ09OTlRSQUNLX1NUQVRfSU5DKGZvdW5kKTsKQEAgLTMxMywxMSArMzEzLDExIEBACiB7CiAJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCi0JUkVBRF9MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJaCA9IF9faXBfY29ubnRyYWNrX2ZpbmQodHVwbGUsIGlnbm9yZWRfY29ubnRyYWNrKTsKIAlpZiAoaCkKIAkJYXRvbWljX2luYygmdHVwbGVoYXNoX3RvX2N0cmFjayhoKS0+Y3RfZ2VuZXJhbC51c2UpOwotCVJFQURfVU5MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAogCXJldHVybiBoOwogfQpAQCAtMzUyLDcgKzM1Miw3IEBACiAJSVBfTkZfQVNTRVJUKCFpc19jb25maXJtZWQoY3QpKTsKIAlERUJVR1AoIkNvbmZpcm1pbmcgY29ubnRyYWNrICVwXG4iLCBjdCk7CiAKLQlXUklURV9MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJd3JpdGVfbG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCiAJLyogU2VlIGlmIHRoZXJlJ3Mgb25lIGluIHRoZSBsaXN0IGFscmVhZHksIGluY2x1ZGluZyByZXZlcnNlOgogICAgICAgICAgICBOQVQgY291bGQgaGF2ZSBncmFiYmVkIGl0IHdpdGhvdXQgcmVhbGl6aW5nLCBzaW5jZSB3ZSdyZQpAQCAtMzgwLDEyICszODAsMTIgQEAKIAkJYXRvbWljX2luYygmY3QtPmN0X2dlbmVyYWwudXNlKTsKIAkJc2V0X2JpdChJUFNfQ09ORklSTUVEX0JJVCwgJmN0LT5zdGF0dXMpOwogCQlDT05OVFJBQ0tfU1RBVF9JTkMoaW5zZXJ0KTsKLQkJV1JJVEVfVU5MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJCXdyaXRlX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAogCUNPTk5UUkFDS19TVEFUX0lOQyhpbnNlcnRfZmFpbGVkKTsKLQlXUklURV9VTkxPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAogCXJldHVybiBORl9EUk9QOwogfQpAQCAtMzk4LDkgKzM5OCw5IEBACiB7CiAJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCi0JUkVBRF9MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJaCA9IF9faXBfY29ubnRyYWNrX2ZpbmQodHVwbGUsIGlnbm9yZWRfY29ubnRyYWNrKTsKLQlSRUFEX1VOTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAKIAlyZXR1cm4gaCAhPSBOVUxMOwogfQpAQCAtNDE5LDEzICs0MTksMTMgQEAKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCA9IE5VTEw7CiAJaW50IGRyb3BwZWQgPSAwOwogCi0JUkVBRF9MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJaCA9IExJU1RfRklORF9CKGNoYWluLCB1bnJlcGxpZWQsIHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGVfaGFzaCAqKTsKIAlpZiAoaCkgewogCQljdCA9IHR1cGxlaGFzaF90b19jdHJhY2soaCk7CiAJCWF0b21pY19pbmMoJmN0LT5jdF9nZW5lcmFsLnVzZSk7CiAJfQotCVJFQURfVU5MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAogCWlmICghY3QpCiAJCXJldHVybiBkcm9wcGVkOwpAQCAtNTA4LDcgKzUwOCw3IEBACiAJY29ubnRyYWNrLT50aW1lb3V0LmRhdGEgPSAodW5zaWduZWQgbG9uZyljb25udHJhY2s7CiAJY29ubnRyYWNrLT50aW1lb3V0LmZ1bmN0aW9uID0gZGVhdGhfYnlfdGltZW91dDsKIAotCVdSSVRFX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJZXhwID0gZmluZF9leHBlY3RhdGlvbih0dXBsZSk7CiAKIAlpZiAoZXhwKSB7CkBAIC01MzIsNyArNTMyLDcgQEAKIAlsaXN0X2FkZCgmY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5saXN0LCAmdW5jb25maXJtZWQpOwogCiAJYXRvbWljX2luYygmaXBfY29ubnRyYWNrX2NvdW50KTsKLQlXUklURV9VTkxPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAogCWlmIChleHApIHsKIAkJaWYgKGV4cC0+ZXhwZWN0Zm4pCkBAIC03MjMsMTcgKzcyMywxNyBAQAogewogCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICppOwogCi0JV1JJVEVfTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAkvKiBjaG9vc2UgdGhlIHRoZSBvbGRlc3QgZXhwZWN0YXRpb24gdG8gZXZpY3QgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoaSwgJmlwX2Nvbm50cmFja19leHBlY3RfbGlzdCwgbGlzdCkgewogCQlpZiAoZXhwZWN0X21hdGNoZXMoaSwgZXhwKSAmJiBkZWxfdGltZXIoJmktPnRpbWVvdXQpKSB7CiAJCQl1bmxpbmtfZXhwZWN0KGkpOwotCQkJV1JJVEVfVU5MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJCQl3cml0ZV91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAkJCWRlc3Ryb3lfZXhwZWN0KGkpOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCVdSSVRFX1VOTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogfQogCiBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqaXBfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyh2b2lkKQpAQCAtNzYwLDE1ICs3NjAsMTEgQEAKIAlleHAtPm1hc3Rlci0+ZXhwZWN0aW5nKys7CiAJbGlzdF9hZGQoJmV4cC0+bGlzdCwgJmlwX2Nvbm50cmFja19leHBlY3RfbGlzdCk7CiAKLQlpZiAoZXhwLT5tYXN0ZXItPmhlbHBlci0+dGltZW91dCkgewotCQlpbml0X3RpbWVyKCZleHAtPnRpbWVvdXQpOwotCQlleHAtPnRpbWVvdXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWV4cDsKLQkJZXhwLT50aW1lb3V0LmZ1bmN0aW9uID0gZXhwZWN0YXRpb25fdGltZWRfb3V0OwotCQlleHAtPnRpbWVvdXQuZXhwaXJlcwotCQkJPSBqaWZmaWVzICsgZXhwLT5tYXN0ZXItPmhlbHBlci0+dGltZW91dCAqIEhaOwotCQlhZGRfdGltZXIoJmV4cC0+dGltZW91dCk7Ci0JfSBlbHNlCi0JCWV4cC0+dGltZW91dC5mdW5jdGlvbiA9IE5VTEw7CisJaW5pdF90aW1lcigmZXhwLT50aW1lb3V0KTsKKwlleHAtPnRpbWVvdXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWV4cDsKKwlleHAtPnRpbWVvdXQuZnVuY3Rpb24gPSBleHBlY3RhdGlvbl90aW1lZF9vdXQ7CisJZXhwLT50aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgZXhwLT5tYXN0ZXItPmhlbHBlci0+dGltZW91dCAqIEhaOworCWFkZF90aW1lcigmZXhwLT50aW1lb3V0KTsKIAogCUNPTk5UUkFDS19TVEFUX0lOQyhleHBlY3RfY3JlYXRlKTsKIH0KQEAgLTgwOCw3ICs4MDQsNyBAQAogCURFQlVHUCgidHVwbGU6ICIpOyBEVU1QX1RVUExFKCZleHBlY3QtPnR1cGxlKTsKIAlERUJVR1AoIm1hc2s6ICAiKTsgRFVNUF9UVVBMRSgmZXhwZWN0LT5tYXNrKTsKIAotCVdSSVRFX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmaXBfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7CiAJCWlmIChleHBlY3RfbWF0Y2hlcyhpLCBleHBlY3QpKSB7CiAJCQkvKiBSZWZyZXNoIHRpbWVyOiBpZiBpdCdzIGR5aW5nLCBpZ25vcmUuLiAqLwpAQCAtODMyLDcgKzgyOCw3IEBACiAJaXBfY29ubnRyYWNrX2V4cGVjdF9pbnNlcnQoZXhwZWN0KTsKIAlyZXQgPSAwOwogb3V0OgotCVdSSVRFX1VOTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogIAlyZXR1cm4gcmV0OwogfQogCkBAIC04NDEsNyArODM3LDcgQEAKIHZvaWQgaXBfY29ubnRyYWNrX2FsdGVyX3JlcGx5KHN0cnVjdCBpcF9jb25udHJhY2sgKmNvbm50cmFjaywKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKm5ld3JlcGx5KQogewotCVdSSVRFX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJLyogU2hvdWxkIGJlIHVuY29uZmlybWVkLCBzbyBub3QgaW4gaGFzaCB0YWJsZSB5ZXQgKi8KIAlJUF9ORl9BU1NFUlQoIWlzX2NvbmZpcm1lZChjb25udHJhY2spKTsKIApAQCAtODUxLDE1ICs4NDcsMTUgQEAKIAljb25udHJhY2stPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlID0gKm5ld3JlcGx5OwogCWlmICghY29ubnRyYWNrLT5tYXN0ZXIgJiYgY29ubnRyYWNrLT5leHBlY3RpbmcgPT0gMCkKIAkJY29ubnRyYWNrLT5oZWxwZXIgPSBpcF9jdF9maW5kX2hlbHBlcihuZXdyZXBseSk7Ci0JV1JJVEVfVU5MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiB9CiAKIGludCBpcF9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyICptZSkKIHsKIAlCVUdfT04obWUtPnRpbWVvdXQgPT0gMCk7Ci0JV1JJVEVfTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAlsaXN0X3ByZXBlbmQoJmhlbHBlcnMsIG1lKTsKLQlXUklURV9VTkxPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtODc4LDcgKzg3NCw3IEBACiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCwgKnRtcDsKIAogCS8qIE5lZWQgd3JpdGUgbG9jayBoZXJlLCB0byBkZWxldGUgaGVscGVyLiAqLwotCVdSSVRFX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJTElTVF9ERUxFVEUoJmhlbHBlcnMsIG1lKTsKIAogCS8qIEdldCByaWQgb2YgZXhwZWN0YXRpb25zICovCkBAIC04OTMsNyArODg5LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaXBfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBpKyspCiAJCUxJU1RfRklORF9XKCZpcF9jb25udHJhY2tfaGFzaFtpXSwgdW5oZWxwLAogCQkJICAgIHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGVfaGFzaCAqLCBtZSk7Ci0JV1JJVEVfVU5MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAKIAkvKiBTb21lb25lIGNvdWxkIGJlIHN0aWxsIGxvb2tpbmcgYXQgdGhlIGhlbHBlciBpbiBhIGJoLiAqLwogCXN5bmNocm9uaXplX25ldCgpOwpAQCAtOTI1LDE0ICs5MjEsMTQgQEAKIAkJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IGV4dHJhX2ppZmZpZXM7CiAJCWN0X2FkZF9jb3VudGVycyhjdCwgY3RpbmZvLCBza2IpOwogCX0gZWxzZSB7Ci0JCVdSSVRFX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwkJd3JpdGVfbG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCQkvKiBOZWVkIGRlbF90aW1lciBmb3IgcmFjZSBhdm9pZGFuY2UgKG1heSBhbHJlYWR5IGJlIGR5aW5nKS4gKi8KIAkJaWYgKGRlbF90aW1lcigmY3QtPnRpbWVvdXQpKSB7CiAJCQljdC0+dGltZW91dC5leHBpcmVzID0gamlmZmllcyArIGV4dHJhX2ppZmZpZXM7CiAJCQlhZGRfdGltZXIoJmN0LT50aW1lb3V0KTsKIAkJfQogCQljdF9hZGRfY291bnRlcnMoY3QsIGN0aW5mbywgc2tiKTsKLQkJV1JJVEVfVU5MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJCXdyaXRlX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCX0KIH0KIApAQCAtOTQwLDEwICs5MzYsNiBAQAogc3RydWN0IHNrX2J1ZmYgKgogaXBfY3RfZ2F0aGVyX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsIHVfaW50MzJfdCB1c2VyKQogewotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKLQl1bnNpZ25lZCBpbnQgb2xkZGVidWcgPSBza2ItPm5mX2RlYnVnOwotI2VuZGlmCi0KIAlza2Jfb3JwaGFuKHNrYik7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7IApAQCAtOTUzLDEyICs5NDUsNyBAQAogCWlmIChza2IpIHsKIAkJaXBfc2VuZF9jaGVjayhza2ItPm5oLmlwaCk7CiAJCXNrYi0+bmZjYWNoZSB8PSBORkNfQUxURVJFRDsKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0JCS8qIFBhY2tldCBwYXRoIGFzIGlmIG5vdGhpbmcgaGFkIGhhcHBlbmVkLiAqLwotCQlza2ItPm5mX2RlYnVnID0gb2xkZGVidWc7Ci0jZW5kaWYKIAl9Ci0KIAlyZXR1cm4gc2tiOwogfQogCkBAIC05OTcsNyArOTg0LDcgQEAKIHsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmggPSBOVUxMOwogCi0JV1JJVEVfTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAlmb3IgKDsgKmJ1Y2tldCA8IGlwX2Nvbm50cmFja19odGFibGVfc2l6ZTsgKCpidWNrZXQpKyspIHsKIAkJaCA9IExJU1RfRklORF9XKCZpcF9jb25udHJhY2tfaGFzaFsqYnVja2V0XSwgZG9faXRlciwKIAkJCQlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlX2hhc2ggKiwgaXRlciwgZGF0YSk7CkBAIC0xMDA5LDcgKzk5Niw3IEBACiAJCQkJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZV9oYXNoICosIGl0ZXIsIGRhdGEpOwogCWlmIChoKQogCQlhdG9taWNfaW5jKCZ0dXBsZWhhc2hfdG9fY3RyYWNrKGgpLT5jdF9nZW5lcmFsLnVzZSk7Ci0JV1JJVEVfVU5MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAKIAlyZXR1cm4gaDsKIH0KQEAgLTEyMDEsMTQgKzExODgsMTQgQEAKIAl9CiAKIAkvKiBEb24ndCBORUVEIGxvY2sgaGVyZSwgYnV0IGdvb2QgZm9ybSBhbnl3YXkuICovCi0JV1JJVEVfTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0lQX0NUX1BST1RPOyBpKyspCiAJCWlwX2N0X3Byb3Rvc1tpXSA9ICZpcF9jb25udHJhY2tfZ2VuZXJpY19wcm90b2NvbDsKIAkvKiBTZXcgaW4gYnVpbHRpbiBwcm90b2NvbHMuICovCiAJaXBfY3RfcHJvdG9zW0lQUFJPVE9fVENQXSA9ICZpcF9jb25udHJhY2tfcHJvdG9jb2xfdGNwOwogCWlwX2N0X3Byb3Rvc1tJUFBST1RPX1VEUF0gPSAmaXBfY29ubnRyYWNrX3Byb3RvY29sX3VkcDsKIAlpcF9jdF9wcm90b3NbSVBQUk9UT19JQ01QXSA9ICZpcF9jb25udHJhY2tfcHJvdG9jb2xfaWNtcDsKLQlXUklURV9VTkxPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBpcF9jb25udHJhY2tfaHRhYmxlX3NpemU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJmlwX2Nvbm50cmFja19oYXNoW2ldKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfZnRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jCmluZGV4IGRkODY1MDMuLmZlYTZkZDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfZnRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KIAotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2xvY2toZWxwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19mdHAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtMjgsNyArMjcsNyBAQAogLyogVGhpcyBpcyBzbG93LCBidXQgaXQncyBzaW1wbGUuIC0tUlIgKi8KIHN0YXRpYyBjaGFyIGZ0cF9idWZmZXJbNjU1MzZdOwogCi1zdGF0aWMgREVDTEFSRV9MT0NLKGlwX2Z0cF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBfZnRwX2xvY2spOwogCiAjZGVmaW5lIE1BWF9QT1JUUyA4CiBzdGF0aWMgaW50IHBvcnRzW01BWF9QT1JUU107CkBAIC0zMTksNyArMzE4LDcgQEAKIAl9CiAJZGF0YWxlbiA9ICgqcHNrYiktPmxlbiAtIGRhdGFvZmY7CiAKLQlMT0NLX0JIKCZpcF9mdHBfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZpcF9mdHBfbG9jayk7CiAJZmJfcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCBkYXRhb2ZmLAogCQkJCSAgICAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLCBmdHBfYnVmZmVyKTsKIAlCVUdfT04oZmJfcHRyID09IE5VTEwpOwpAQCAtNDQyLDcgKzQ0MSw3IEBACiAJaWYgKGVuZHNfaW5fbmwpCiAJCXVwZGF0ZV9ubF9zZXEoc2VxLCBjdF9mdHBfaW5mbyxkaXIpOwogIG91dDoKLQlVTkxPQ0tfQkgoJmlwX2Z0cF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmaXBfZnRwX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaXJjLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2lyYy5jCmluZGV4IDMzY2M3MzQuLmNkOTg3NzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaXJjLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19pcmMuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KIAotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2xvY2toZWxwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19pcmMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtNDEsNyArNDAsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBkY2NfdGltZW91dCA9IDMwMDsKIC8qIFRoaXMgaXMgc2xvdywgYnV0IGl0J3Mgc2ltcGxlLiAtLVJSICovCiBzdGF0aWMgY2hhciBpcmNfYnVmZmVyWzY1NTM2XTsKLXN0YXRpYyBERUNMQVJFX0xPQ0soaXJjX2J1ZmZlcl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJjX2J1ZmZlcl9sb2NrKTsKIAogdW5zaWduZWQgaW50ICgqaXBfbmF0X2lyY19ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCiAJCQkJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCkBAIC0xNDEsNyArMTQwLDcgQEAKIAlpZiAoZGF0YW9mZiA+PSAoKnBza2IpLT5sZW4pCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKLQlMT0NLX0JIKCZpcmNfYnVmZmVyX2xvY2spOworCXNwaW5fbG9ja19iaCgmaXJjX2J1ZmZlcl9sb2NrKTsKIAlpYl9wdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsIGRhdGFvZmYsCiAJCQkJICAgICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsIGlyY19idWZmZXIpOwogCUJVR19PTihpYl9wdHIgPT0gTlVMTCk7CkBAIC0yMzcsNyArMjM2LDcgQEAKIAl9IC8qIHdoaWxlIGRhdGEgPCAuLi4gKi8KIAogIG91dDoKLQlVTkxPQ0tfQkgoJmlyY19idWZmZXJfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmlyY19idWZmZXJfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19zY3RwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCBmZjhjMzRhLi4zMWQ3NTM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwpAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaD4KIAogI2lmIDAKICNkZWZpbmUgREVCVUdQKGZvcm1hdCwgLi4uKSBwcmludGsoZm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKQEAgLTM1LDcgKzM0LDcgQEAKICNlbmRpZgogCiAvKiBQcm90ZWN0cyBjb25udHJhY2stPnByb3RvLnNjdHAgKi8KLXN0YXRpYyBERUNMQVJFX1JXTE9DSyhzY3RwX2xvY2spOworc3RhdGljIERFRklORV9SV0xPQ0soc2N0cF9sb2NrKTsKIAogLyogRklYTUU6IEV4YW1pbmUgaXBmaWx0ZXIncyB0aW1lb3V0cyBhbmQgY29ubnRyYWNrIHRyYW5zaXRpb25zIG1vcmUKICAgIGNsb3NlbHkuICBUaGV5J3JlIG1vcmUgY29tcGxleC4gLS1SUiAKQEAgLTE5OSw5ICsxOTgsOSBAQAogCURFQlVHUChfX0ZVTkNUSU9OX18pOwogCURFQlVHUCgiXG4iKTsKIAotCVJFQURfTE9DSygmc2N0cF9sb2NrKTsKKwlyZWFkX2xvY2tfYmgoJnNjdHBfbG9jayk7CiAJc3RhdGUgPSBjb25udHJhY2stPnByb3RvLnNjdHAuc3RhdGU7Ci0JUkVBRF9VTkxPQ0soJnNjdHBfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJnNjdHBfbG9jayk7CiAKIAlyZXR1cm4gc2VxX3ByaW50ZihzLCAiJXMgIiwgc2N0cF9jb25udHJhY2tfbmFtZXNbc3RhdGVdKTsKIH0KQEAgLTM0MywxMyArMzQyLDEzIEBACiAKIAlvbGRzY3Rwc3RhdGUgPSBuZXdjb25udHJhY2sgPSBTQ1RQX0NPTk5UUkFDS19NQVg7CiAJZm9yX2VhY2hfc2N0cF9jaHVuayAoc2tiLCBzY2gsIF9zY2gsIG9mZnNldCwgY291bnQpIHsKLQkJV1JJVEVfTE9DSygmc2N0cF9sb2NrKTsKKwkJd3JpdGVfbG9ja19iaCgmc2N0cF9sb2NrKTsKIAogCQkvKiBTcGVjaWFsIGNhc2VzIG9mIFZlcmlmaWNhdGlvbiB0YWcgY2hlY2sgKFNlYyA4LjUuMSkgKi8KIAkJaWYgKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9JTklUKSB7CiAJCQkvKiBTZWMgOC41LjEgKEEpICovCiAJCQlpZiAoc2gtPnZ0YWcgIT0gMCkgewotCQkJCVdSSVRFX1VOTE9DSygmc2N0cF9sb2NrKTsKKwkJCQl3cml0ZV91bmxvY2tfYmgoJnNjdHBfbG9jayk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQl9IGVsc2UgaWYgKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9BQk9SVCkgewpAQCAtMzU3LDcgKzM1Niw3IEBACiAJCQlpZiAoIShzaC0+dnRhZyA9PSBjb25udHJhY2stPnByb3RvLnNjdHAudnRhZ1tDVElORk8yRElSKGN0aW5mbyldKQogCQkJCSYmICEoc2gtPnZ0YWcgPT0gY29ubnRyYWNrLT5wcm90by5zY3RwLnZ0YWcKIAkJCQkJCQlbMSAtIENUSU5GTzJESVIoY3RpbmZvKV0pKSB7Ci0JCQkJV1JJVEVfVU5MT0NLKCZzY3RwX2xvY2spOworCQkJCXdyaXRlX3VubG9ja19iaCgmc2N0cF9sb2NrKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCX0gZWxzZSBpZiAoc2NoLT50eXBlID09IFNDVFBfQ0lEX1NIVVRET1dOX0NPTVBMRVRFKSB7CkBAIC0zNjYsMTMgKzM2NSwxMyBAQAogCQkJCSYmICEoc2gtPnZ0YWcgPT0gY29ubnRyYWNrLT5wcm90by5zY3RwLnZ0YWcKIAkJCQkJCQlbMSAtIENUSU5GTzJESVIoY3RpbmZvKV0gCiAJCQkJCSYmIChzY2gtPmZsYWdzICYgMSkpKSB7Ci0JCQkJV1JJVEVfVU5MT0NLKCZzY3RwX2xvY2spOworCQkJCXdyaXRlX3VubG9ja19iaCgmc2N0cF9sb2NrKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCX0gZWxzZSBpZiAoc2NoLT50eXBlID09IFNDVFBfQ0lEX0NPT0tJRV9FQ0hPKSB7CiAJCQkvKiBTZWMgOC41LjEgKEQpICovCiAJCQlpZiAoIShzaC0+dnRhZyA9PSBjb25udHJhY2stPnByb3RvLnNjdHAudnRhZ1tDVElORk8yRElSKGN0aW5mbyldKSkgewotCQkJCVdSSVRFX1VOTE9DSygmc2N0cF9sb2NrKTsKKwkJCQl3cml0ZV91bmxvY2tfYmgoJnNjdHBfbG9jayk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQl9CkBAIC0zODQsNyArMzgzLDcgQEAKIAkJaWYgKG5ld2Nvbm50cmFjayA9PSBTQ1RQX0NPTk5UUkFDS19NQVgpIHsKIAkJCURFQlVHUCgiaXBfY29ubnRyYWNrX3NjdHA6IEludmFsaWQgZGlyPSVpIGN0eXBlPSV1IGNvbm50cmFjaz0ldVxuIiwKIAkJCSAgICAgICBDVElORk8yRElSKGN0aW5mbyksIHNjaC0+dHlwZSwgb2xkc2N0cHN0YXRlKTsKLQkJCVdSSVRFX1VOTE9DSygmc2N0cF9sb2NrKTsKKwkJCXdyaXRlX3VubG9ja19iaCgmc2N0cF9sb2NrKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCkBAIC0zOTYsNyArMzk1LDcgQEAKIAkJCWloID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICsgc2l6ZW9mKHNjdHBfY2h1bmtoZHJfdCksCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoX2luaXRoZHIpLCAmX2luaXRoZHIpOwogCQkJaWYgKGloID09IE5VTEwpIHsKLQkJCQkJV1JJVEVfVU5MT0NLKCZzY3RwX2xvY2spOworCQkJCQl3cml0ZV91bmxvY2tfYmgoJnNjdHBfbG9jayk7CiAJCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCURFQlVHUCgiU2V0dGluZyB2dGFnICV4IGZvciBkaXIgJWRcbiIsIApAQCAtNDA1LDcgKzQwNCw3IEBACiAJCX0KIAogCQljb25udHJhY2stPnByb3RvLnNjdHAuc3RhdGUgPSBuZXdjb25udHJhY2s7Ci0JCVdSSVRFX1VOTE9DSygmc2N0cF9sb2NrKTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZzY3RwX2xvY2spOwogCX0KIAogCWlwX2N0X3JlZnJlc2hfYWNjdChjb25udHJhY2ssIGN0aW5mbywgc2tiLCAqc2N0cF90aW1lb3V0c1tuZXdjb25udHJhY2tdKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IDcyMWRkYmYuLjgwOWRmZWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaD4KIAogI2lmIDAKICNkZWZpbmUgREVCVUdQIHByaW50awpAQCAtNDYsNyArNDUsNyBAQAogI2VuZGlmCiAKIC8qIFByb3RlY3RzIGNvbm50cmFjay0+cHJvdG8udGNwICovCi1zdGF0aWMgREVDTEFSRV9SV0xPQ0sodGNwX2xvY2spOworc3RhdGljIERFRklORV9SV0xPQ0sodGNwX2xvY2spOwogCiAvKiAiQmUgY29uc2VydmF0aXZlIGluIHdoYXQgeW91IGRvLCAKICAgICBiZSBsaWJlcmFsIGluIHdoYXQgeW91IGFjY2VwdCBmcm9tIG90aGVycy4iIApAQCAtMzMwLDkgKzMyOSw5IEBACiB7CiAJZW51bSB0Y3BfY29ubnRyYWNrIHN0YXRlOwogCi0JUkVBRF9MT0NLKCZ0Y3BfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZ0Y3BfbG9jayk7CiAJc3RhdGUgPSBjb25udHJhY2stPnByb3RvLnRjcC5zdGF0ZTsKLQlSRUFEX1VOTE9DSygmdGNwX2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZ0Y3BfbG9jayk7CiAKIAlyZXR1cm4gc2VxX3ByaW50ZihzLCAiJXMgIiwgdGNwX2Nvbm50cmFja19uYW1lc1tzdGF0ZV0pOwogfQpAQCAtNzM4LDE0ICs3MzcsMTQgQEAKIAogCWVuZCA9IHNlZ21lbnRfc2VxX3BsdXNfbGVuKG50b2hsKHRjcGgtPnNlcSksIHNrYi0+bGVuLCBpcGgsIHRjcGgpOwogCQotCVdSSVRFX0xPQ0soJnRjcF9sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZ0Y3BfbG9jayk7CiAJLyoKIAkgKiBXZSBoYXZlIHRvIHdvcnJ5IGZvciB0aGUgYWNrIGluIHRoZSByZXBseSBwYWNrZXQgb25seS4uLgogCSAqLwogCWlmIChhZnRlcihlbmQsIGNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpKQogCQljb25udHJhY2stPnByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kID0gZW5kOwogCWNvbm50cmFjay0+cHJvdG8udGNwLmxhc3RfZW5kID0gZW5kOwotCVdSSVRFX1VOTE9DSygmdGNwX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmdGNwX2xvY2spOwogCURFQlVHUCgidGNwX3VwZGF0ZTogc2VuZGVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1IHNjYWxlPSVpICIKIAkgICAgICAgInJlY2VpdmVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1IHNjYWxlPSVpXG4iLAogCQlzZW5kZXItPnRkX2VuZCwgc2VuZGVyLT50ZF9tYXhlbmQsIHNlbmRlci0+dGRfbWF4d2luLApAQCAtODU3LDcgKzg1Niw3IEBACiAJCQkJc2l6ZW9mKF90Y3BoKSwgJl90Y3BoKTsKIAlCVUdfT04odGggPT0gTlVMTCk7CiAJCi0JV1JJVEVfTE9DSygmdGNwX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJnRjcF9sb2NrKTsKIAlvbGRfc3RhdGUgPSBjb25udHJhY2stPnByb3RvLnRjcC5zdGF0ZTsKIAlkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJaW5kZXggPSBnZXRfY29ubnRyYWNrX2luZGV4KHRoKTsKQEAgLTg3OSw3ICs4NzgsNyBAQAogCQkJICogdGhhdCB0aGUgY2xpZW50IGNhbm5vdCBidXQgcmV0cmFuc21pdCBpdHMgU1lOIGFuZCAKIAkJCSAqIHRodXMgaW5pdGlhdGUgYSBjbGVhbiBuZXcgc2Vzc2lvbi4KIAkJCSAqLwotCQkgICAgCVdSSVRFX1VOTE9DSygmdGNwX2xvY2spOworCQkgICAgCXdyaXRlX3VubG9ja19iaCgmdGNwX2xvY2spOwogCQkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKIAkJCQluZl9sb2dfcGFja2V0KFBGX0lORVQsIDAsIHNrYiwgTlVMTCwgTlVMTCwgCiAJCQkJCSAgImlwX2N0X3RjcDoga2lsbGluZyBvdXQgb2Ygc3luYyBzZXNzaW9uICIpOwpAQCAtODk0LDcgKzg5Myw3IEBACiAJCWNvbm50cmFjay0+cHJvdG8udGNwLmxhc3RfZW5kID0gCiAJCSAgICBzZWdtZW50X3NlcV9wbHVzX2xlbihudG9obCh0aC0+c2VxKSwgc2tiLT5sZW4sIGlwaCwgdGgpOwogCQkKLQkJV1JJVEVfVU5MT0NLKCZ0Y3BfbG9jayk7CisJCXdyaXRlX3VubG9ja19iaCgmdGNwX2xvY2spOwogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19UQ1ApKQogCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIAogCQkJCSAgImlwX2N0X3RjcDogaW52YWxpZCBwYWNrZXQgaWdub3JlZCAiKTsKQEAgLTkwNCw3ICs5MDMsNyBAQAogCQlERUJVR1AoImlwX2N0X3RjcDogSW52YWxpZCBkaXI9JWkgaW5kZXg9JXUgb3N0YXRlPSV1XG4iLAogCQkgICAgICAgZGlyLCBnZXRfY29ubnRyYWNrX2luZGV4KHRoKSwKIAkJICAgICAgIG9sZF9zdGF0ZSk7Ci0JCVdSSVRFX1VOTE9DSygmdGNwX2xvY2spOworCQl3cml0ZV91bmxvY2tfYmgoJnRjcF9sb2NrKTsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCAKIAkJCQkgICJpcF9jdF90Y3A6IGludmFsaWQgc3RhdGUgIik7CkBAIC05MTgsMTMgKzkxNywxMyBAQAogCQkgICAgCSAgICAgY29ubnRyYWNrLT5wcm90by50Y3Auc2VlbltkaXJdLnRkX2VuZCkpIHsJCiAJCSAgICAJLyogQXR0ZW1wdCB0byByZW9wZW4gYSBjbG9zZWQgY29ubmVjdGlvbi4KIAkJICAgIAkqIERlbGV0ZSB0aGlzIGNvbm5lY3Rpb24gYW5kIGxvb2sgdXAgYWdhaW4uICovCi0JCSAgICAJV1JJVEVfVU5MT0NLKCZ0Y3BfbG9jayk7CisJCSAgICAJd3JpdGVfdW5sb2NrX2JoKCZ0Y3BfbG9jayk7CiAJCSAgICAJaWYgKGRlbF90aW1lcigmY29ubnRyYWNrLT50aW1lb3V0KSkKIAkJICAgIAkJY29ubnRyYWNrLT50aW1lb3V0LmZ1bmN0aW9uKCh1bnNpZ25lZCBsb25nKQogCQkgICAgCQkJCQkgICAgY29ubnRyYWNrKTsKIAkJICAgIAlyZXR1cm4gLU5GX1JFUEVBVDsKIAkJfSBlbHNlIHsKLQkJCVdSSVRFX1VOTE9DSygmdGNwX2xvY2spOworCQkJd3JpdGVfdW5sb2NrX2JoKCZ0Y3BfbG9jayk7CiAJCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19UQ1ApKQogCQkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLAogCQkJCSAgICAgICAgICAgICAgImlwX2N0X3RjcDogaW52YWxpZCBTWU4iKTsKQEAgLTk0OSw3ICs5NDgsNyBAQAogCiAJaWYgKCF0Y3BfaW5fd2luZG93KCZjb25udHJhY2stPnByb3RvLnRjcCwgZGlyLCBpbmRleCwgCiAJCQkgICBza2IsIGlwaCwgdGgpKSB7Ci0JCVdSSVRFX1VOTE9DSygmdGNwX2xvY2spOworCQl3cml0ZV91bmxvY2tfYmgoJnRjcF9sb2NrKTsKIAkJcmV0dXJuIC1ORl9BQ0NFUFQ7CiAJfQogICAgIGluX3dpbmRvdzoKQEAgLTk3Miw3ICs5NzEsNyBAQAogCXRpbWVvdXQgPSBjb25udHJhY2stPnByb3RvLnRjcC5yZXRyYW5zID49IGlwX2N0X3RjcF9tYXhfcmV0cmFucwogCQkgICYmICp0Y3BfdGltZW91dHNbbmV3X3N0YXRlXSA+IGlwX2N0X3RjcF90aW1lb3V0X21heF9yZXRyYW5zCiAJCSAgPyBpcF9jdF90Y3BfdGltZW91dF9tYXhfcmV0cmFucyA6ICp0Y3BfdGltZW91dHNbbmV3X3N0YXRlXTsKLQlXUklURV9VTkxPQ0soJnRjcF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnRjcF9sb2NrKTsKIAogCWlmICghdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmY29ubnRyYWNrLT5zdGF0dXMpKSB7CiAJCS8qIElmIG9ubHkgcmVwbHkgaXMgYSBSU1QsIHdlIGNhbiBjb25zaWRlciBvdXJzZWx2ZXMgbm90IHRvCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCA1YmMyOGEyLi44YzFlYWJhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMKQEAgLTEyMCw2ICsxMjAsNyBAQAogCSAqIGFuZCBtb3Jlb3ZlciByb290IG1pZ2h0IHNlbmQgcmF3IHBhY2tldHMuCiAJICogRklYTUU6IFNvdXJjZSByb3V0ZSBJUCBvcHRpb24gcGFja2V0cyAtLVJSICovCiAJaWYgKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcKKwkgICAgJiYgc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkKIAkgICAgJiYgY3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwgdWRwbGVuLCBJUFBST1RPX1VEUCwKIAkJCSAgICAgICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXID8gc2tiLT5jc3VtCiAJCQkgICAgICAJIDogc2tiX2NoZWNrc3VtKHNrYiwgaXBoLT5paGwqNCwgdWRwbGVuLCAwKSkpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMKaW5kZXggYmM1OWY3Yi4uNDJkYzk1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KIAotI2RlZmluZSBBU1NFUlRfUkVBRF9MT0NLKHgpIE1VU1RfQkVfUkVBRF9MT0NLRUQoJmlwX2Nvbm50cmFja19sb2NrKQotI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KSBNVVNUX0JFX1dSSVRFX0xPQ0tFRCgmaXBfY29ubnRyYWNrX2xvY2spCisjZGVmaW5lIEFTU0VSVF9SRUFEX0xPQ0soeCkKKyNkZWZpbmUgQVNTRVJUX1dSSVRFX0xPQ0soeCkKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcm90b2NvbC5oPgpAQCAtMTE5LDcgKzExOSw3IEBACiAKIHN0YXRpYyB2b2lkICpjdF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCVJFQURfTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXJlYWRfbG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCXJldHVybiBjdF9nZXRfaWR4KHNlcSwgKnBvcyk7CiB9CiAKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAKIHN0YXRpYyB2b2lkIGN0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKIHsKLQlSRUFEX1VOTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiB9CiAgCiBzdGF0aWMgaW50IGN0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKQEAgLTE0MCw3ICsxNDAsNyBAQAogCWNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2sgKmNvbm50cmFjayA9IHR1cGxlaGFzaF90b19jdHJhY2soaGFzaCk7CiAJc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG87CiAKLQlNVVNUX0JFX1JFQURfTE9DS0VEKCZpcF9jb25udHJhY2tfbG9jayk7CisJQVNTRVJUX1JFQURfTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOwogCUlQX05GX0FTU0VSVChjb25udHJhY2spOwogCiAJLyogd2Ugb25seSB3YW50IHRvIHByaW50IERJUl9PUklHSU5BTCAqLwpAQCAtMjM5LDcgKzIzOSw3IEBACiAKIAkvKiBzdHJhbmdlIHNlcV9maWxlIGFwaSBjYWxscyBzdG9wIGV2ZW4gaWYgd2UgZmFpbCwKIAkgKiB0aHVzIHdlIG5lZWQgdG8gZ3JhYiBsb2NrIHNpbmNlIHN0b3AgdW5sb2NrcyAqLwotCVJFQURfTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXJlYWRfbG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCiAJaWYgKGxpc3RfZW1wdHkoZSkpCiAJCXJldHVybiBOVUxMOwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAKIHN0YXRpYyB2b2lkIGV4cF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7Ci0JUkVBRF9VTkxPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwlyZWFkX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogfQogCiBzdGF0aWMgaW50IGV4cF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCkBAIC05MjEsMjIgKzkyMSwyMiBAQAogewogCWludCByZXQgPSAwOwogCi0JV1JJVEVfTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAlpZiAoaXBfY3RfcHJvdG9zW3Byb3RvLT5wcm90b10gIT0gJmlwX2Nvbm50cmFja19nZW5lcmljX3Byb3RvY29sKSB7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CiAJfQogCWlwX2N0X3Byb3Rvc1twcm90by0+cHJvdG9dID0gcHJvdG87CiAgb3V0OgotCVdSSVRFX1VOTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgaXBfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCiB7Ci0JV1JJVEVfTE9DSygmaXBfY29ubnRyYWNrX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAlpcF9jdF9wcm90b3NbcHJvdG8tPnByb3RvXSA9ICZpcF9jb25udHJhY2tfZ2VuZXJpY19wcm90b2NvbDsKLQlXUklURV9VTkxPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAkKIAkvKiBTb21lYm9keSBjb3VsZCBiZSBzdGlsbCBsb29raW5nIGF0IHRoZSBwcm90byBpbiBiaC4gKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMKaW5kZXggOWZjNmY5My4uNzM5YjZkZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KICNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogCi0jZGVmaW5lIEFTU0VSVF9SRUFEX0xPQ0soeCkgTVVTVF9CRV9SRUFEX0xPQ0tFRCgmaXBfbmF0X2xvY2spCi0jZGVmaW5lIEFTU0VSVF9XUklURV9MT0NLKHgpIE1VU1RfQkVfV1JJVEVfTE9DS0VEKCZpcF9uYXRfbG9jaykKKyNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KQorI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KQogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2NvcmUuaD4KQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCi1ERUNMQVJFX1JXTE9DSyhpcF9uYXRfbG9jayk7CitERUZJTkVfUldMT0NLKGlwX25hdF9sb2NrKTsKIAogLyogQ2FsY3VsYXRlZCBhdCBpbml0IGJhc2VkIG9uIG1lbW9yeSBzaXplICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9odGFibGVfc2l6ZTsKQEAgLTY1LDkgKzY1LDkgQEAKIAlpZiAoIShjb25uLT5zdGF0dXMgJiBJUFNfTkFUX0RPTkVfTUFTSykpCiAJCXJldHVybjsKIAotCVdSSVRFX0xPQ0soJmlwX25hdF9sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZpcF9uYXRfbG9jayk7CiAJbGlzdF9kZWwoJmNvbm4tPm5hdC5pbmZvLmJ5c291cmNlKTsKLQlXUklURV9VTkxPQ0soJmlwX25hdF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX25hdF9sb2NrKTsKIH0KIAogLyogV2UgZG8gY2hlY2tzdW0gbWFuZ2xpbmcsIHNvIGlmIHRoZXkgd2VyZSB3cm9uZyBiZWZvcmUgdGhleSdyZSBzdGlsbApAQCAtMTQyLDcgKzE0Miw3IEBACiAJdW5zaWduZWQgaW50IGggPSBoYXNoX2J5X3NyYyh0dXBsZSk7CiAJc3RydWN0IGlwX2Nvbm50cmFjayAqY3Q7CiAKLQlSRUFEX0xPQ0soJmlwX25hdF9sb2NrKTsKKwlyZWFkX2xvY2tfYmgoJmlwX25hdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0LCAmYnlzb3VyY2VbaF0sIG5hdC5pbmZvLmJ5c291cmNlKSB7CiAJCWlmIChzYW1lX3NyYyhjdCwgdHVwbGUpKSB7CiAJCQkvKiBDb3B5IHNvdXJjZSBwYXJ0IGZyb20gcmVwbHkgdHVwbGUuICovCkBAIC0xNTEsMTIgKzE1MSwxMiBAQAogCQkJcmVzdWx0LT5kc3QgPSB0dXBsZS0+ZHN0OwogCiAJCQlpZiAoaW5fcmFuZ2UocmVzdWx0LCByYW5nZSkpIHsKLQkJCQlSRUFEX1VOTE9DSygmaXBfbmF0X2xvY2spOworCQkJCXJlYWRfdW5sb2NrX2JoKCZpcF9uYXRfbG9jayk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCX0KIAl9Ci0JUkVBRF9VTkxPQ0soJmlwX25hdF9sb2NrKTsKKwlyZWFkX3VubG9ja19iaCgmaXBfbmF0X2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0yOTcsOSArMjk3LDkgQEAKIAkJdW5zaWduZWQgaW50IHNyY2hhc2gKIAkJCT0gaGFzaF9ieV9zcmMoJmNvbm50cmFjay0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0KIAkJCQkgICAgICAudHVwbGUpOwotCQlXUklURV9MT0NLKCZpcF9uYXRfbG9jayk7CisJCXdyaXRlX2xvY2tfYmgoJmlwX25hdF9sb2NrKTsKIAkJbGlzdF9hZGQoJmluZm8tPmJ5c291cmNlLCAmYnlzb3VyY2Vbc3JjaGFzaF0pOwotCQlXUklURV9VTkxPQ0soJmlwX25hdF9sb2NrKTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZpcF9uYXRfbG9jayk7CiAJfQogCiAJLyogSXQncyBkb25lLiAqLwpAQCAtNDc0LDIzICs0NzQsMjMgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCVdSSVRFX0xPQ0soJmlwX25hdF9sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZpcF9uYXRfbG9jayk7CiAJaWYgKGlwX25hdF9wcm90b3NbcHJvdG8tPnByb3RvbnVtXSAhPSAmaXBfbmF0X3Vua25vd25fcHJvdG9jb2wpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CiAJaXBfbmF0X3Byb3Rvc1twcm90by0+cHJvdG9udW1dID0gcHJvdG87CiAgb3V0OgotCVdSSVRFX1VOTE9DSygmaXBfbmF0X2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmaXBfbmF0X2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKIC8qIE5vb25lIHN0b3JlcyB0aGUgcHJvdG9jb2wgYW55d2hlcmU7IHNpbXBseSBkZWxldGUgaXQuICovCiB2b2lkIGlwX25hdF9wcm90b2NvbF91bnJlZ2lzdGVyKHN0cnVjdCBpcF9uYXRfcHJvdG9jb2wgKnByb3RvKQogewotCVdSSVRFX0xPQ0soJmlwX25hdF9sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZpcF9uYXRfbG9jayk7CiAJaXBfbmF0X3Byb3Rvc1twcm90by0+cHJvdG9udW1dID0gJmlwX25hdF91bmtub3duX3Byb3RvY29sOwotCVdSSVRFX1VOTE9DSygmaXBfbmF0X2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmaXBfbmF0X2xvY2spOwogCiAJLyogU29tZW9uZSBjb3VsZCBiZSBzdGlsbCBsb29raW5nIGF0IHRoZSBwcm90byBpbiBhIGJoLiAqLwogCXN5bmNocm9uaXplX25ldCgpOwpAQCAtNTA5LDEzICs1MDksMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBTZXcgaW4gYnVpbHRpbiBwcm90b2NvbHMuICovCi0JV1JJVEVfTE9DSygmaXBfbmF0X2xvY2spOworCXdyaXRlX2xvY2tfYmgoJmlwX25hdF9sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0lQX05BVF9QUk9UTzsgaSsrKQogCQlpcF9uYXRfcHJvdG9zW2ldID0gJmlwX25hdF91bmtub3duX3Byb3RvY29sOwogCWlwX25hdF9wcm90b3NbSVBQUk9UT19UQ1BdID0gJmlwX25hdF9wcm90b2NvbF90Y3A7CiAJaXBfbmF0X3Byb3Rvc1tJUFBST1RPX1VEUF0gPSAmaXBfbmF0X3Byb3RvY29sX3VkcDsKIAlpcF9uYXRfcHJvdG9zW0lQUFJPVE9fSUNNUF0gPSAmaXBfbmF0X3Byb3RvY29sX2ljbXA7Ci0JV1JJVEVfVU5MT0NLKCZpcF9uYXRfbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9uYXRfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaXBfbmF0X2h0YWJsZV9zaXplOyBpKyspIHsKIAkJSU5JVF9MSVNUX0hFQUQoJmJ5c291cmNlW2ldKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlci5jCmluZGV4IDE2MzdiOTYuLjE1OGYzNGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXIuYwpAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CiAKLSNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KSBNVVNUX0JFX1JFQURfTE9DS0VEKCZpcF9uYXRfbG9jaykKLSNkZWZpbmUgQVNTRVJUX1dSSVRFX0xPQ0soeCkgTVVTVF9CRV9XUklURV9MT0NLRUQoJmlwX25hdF9sb2NrKQorI2RlZmluZSBBU1NFUlRfUkVBRF9MT0NLKHgpCisjZGVmaW5lIEFTU0VSVF9XUklURV9MT0NLKHgpCiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmg+CkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lIERVTVBfT0ZGU0VUKHgpCiAjZW5kaWYKIAotc3RhdGljIERFQ0xBUkVfTE9DSyhpcF9uYXRfc2Vxb2ZzX2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhpcF9uYXRfc2Vxb2ZzX2xvY2spOwogCiAvKiBTZXR1cCBUQ1Agc2VxdWVuY2UgY29ycmVjdGlvbiBnaXZlbiB0aGlzIGNoYW5nZSBhdCB0aGlzIHNlcXVlbmNlICovCiBzdGF0aWMgaW5saW5lIHZvaWQgCkBAIC03MCw3ICs3MCw3IEBACiAJREVCVUdQKCJpcF9uYXRfcmVzaXplX3BhY2tldDogU2VxX29mZnNldCBiZWZvcmU6ICIpOwogCURVTVBfT0ZGU0VUKHRoaXNfd2F5KTsKIAotCUxPQ0tfQkgoJmlwX25hdF9zZXFvZnNfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZpcF9uYXRfc2Vxb2ZzX2xvY2spOwogCiAJLyogU1lOIGFkanVzdC4gSWYgaXQncyB1bmluaXRpYWxpemVkLCBvciB0aGlzIGlzIGFmdGVyIGxhc3QKIAkgKiBjb3JyZWN0aW9uLCByZWNvcmQgaXQ6IHdlIGRvbid0IGhhbmRsZSBtb3JlIHRoYW4gb25lCkBAIC04Miw3ICs4Miw3IEBACiAJCSAgICB0aGlzX3dheS0+b2Zmc2V0X2JlZm9yZSA9IHRoaXNfd2F5LT5vZmZzZXRfYWZ0ZXI7CiAJCSAgICB0aGlzX3dheS0+b2Zmc2V0X2FmdGVyICs9IHNpemVkaWZmOwogCX0KLQlVTkxPQ0tfQkgoJmlwX25hdF9zZXFvZnNfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmlwX25hdF9zZXFvZnNfbG9jayk7CiAKIAlERUJVR1AoImlwX25hdF9yZXNpemVfcGFja2V0OiBTZXFfb2Zmc2V0IGFmdGVyOiAiKTsKIAlEVU1QX09GRlNFVCh0aGlzX3dheSk7CkBAIC0xNDIsOSArMTQyLDYgQEAKIAkvKiBUcmFuc2ZlciBzb2NrZXQgdG8gbmV3IHNrYi4gKi8KIAlpZiAoKCpwc2tiKS0+c2spCiAJCXNrYl9zZXRfb3duZXJfdyhuc2tiLCAoKnBza2IpLT5zayk7Ci0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotCW5za2ItPm5mX2RlYnVnID0gKCpwc2tiKS0+bmZfZGVidWc7Ci0jZW5kaWYKIAlrZnJlZV9za2IoKnBza2IpOwogCSpwc2tiID0gbnNrYjsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcnVsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKaW5kZXggNTgxZjA5Ny4uNjBkNzBmYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxuZXQvcm91dGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAotI2RlZmluZSBBU1NFUlRfUkVBRF9MT0NLKHgpIE1VU1RfQkVfUkVBRF9MT0NLRUQoJmlwX25hdF9sb2NrKQotI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KSBNVVNUX0JFX1dSSVRFX0xPQ0tFRCgmaXBfbmF0X2xvY2spCisjZGVmaW5lIEFTU0VSVF9SRUFEX0xPQ0soeCkKKyNkZWZpbmUgQVNTRVJUX1dSSVRFX0xPQ0soeCkKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYwppbmRleCA3OWY1NmY2Li5iYzU5ZDBkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYwpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKLSNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KSBNVVNUX0JFX1JFQURfTE9DS0VEKCZpcF9uYXRfbG9jaykKLSNkZWZpbmUgQVNTRVJUX1dSSVRFX0xPQ0soeCkgTVVTVF9CRV9XUklURV9MT0NLRUQoJmlwX25hdF9sb2NrKQorI2RlZmluZSBBU1NFUlRfUkVBRF9MT0NLKHgpCisjZGVmaW5lIEFTU0VSVF9XUklURV9MT0NLKHgpCiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcnVsZS5oPgpAQCAtMzczLDcgKzM3Myw2IEBACiAgY2xlYW51cF9ydWxlX2luaXQ6CiAJaXBfbmF0X3J1bGVfY2xlYW51cCgpOwogIGNsZWFudXBfbm90aGluZzoKLQlNVVNUX0JFX1JFQURfV1JJVEVfVU5MT0NLRUQoJmlwX25hdF9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggOGE1NGY5Mi4uYzg4ZGZjZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtNjcsNyArNjcsNiBAQAogLyogTXVzdCBoYXZlIG11dGV4ICovCiAjZGVmaW5lIEFTU0VSVF9SRUFEX0xPQ0soeCkgSVBfTkZfQVNTRVJUKGRvd25fdHJ5bG9jaygmaXB0X211dGV4KSAhPSAwKQogI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KSBJUF9ORl9BU1NFUlQoZG93bl90cnlsb2NrKCZpcHRfbXV0ZXgpICE9IDApCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oPgogCiAjaWYgMApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKaW5kZXggMGYxMmUzYS4uZGM0MzYyYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMVVNURVJJUC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2xvY2toZWxwLmg+CiAKICNkZWZpbmUgQ0xVU1RFUklQX1ZFUlNJT04gIjAuNiIKIApAQCAtNDEsNiArNDAsOCBAQAogI2RlZmluZSBERUJVR1AKICNlbmRpZgogCisjZGVmaW5lIEFTU0VSVF9SRUFEX0xPQ0soeCkKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImlwdGFibGVzIHRhcmdldCBmb3IgQ0xVU1RFUklQIik7CkBAIC02Nyw3ICs2OCw3IEBACiAKIC8qIGNsdXN0ZXJpcF9sb2NrIHByb3RlY3RzIHRoZSBjbHVzdGVyaXBfY29uZmlncyBsaXN0IF9BTkRfIHRoZSBjb25maWd1cmFibGUKICAqIGRhdGEgd2l0aGluIGFsbCBzdHJ1Y3R1cnNlcyAobnVtX2xvY2FsX25vZGVzLCBsb2NhbF9ub2Rlc1tdKSAqLwotc3RhdGljIERFQ0xBUkVfUldMT0NLKGNsdXN0ZXJpcF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUldMT0NLKGNsdXN0ZXJpcF9sb2NrKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjbHVzdGVyaXBfcHJvY19mb3BzOwpAQCAtODIsOSArODMsOSBAQAogc3RhdGljIGlubGluZSB2b2lkCiBjbHVzdGVyaXBfY29uZmlnX3B1dChzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYykgewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjLT5yZWZjb3VudCkpIHsKLQkJV1JJVEVfTE9DSygmY2x1c3RlcmlwX2xvY2spOworCQl3cml0ZV9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CiAJCWxpc3RfZGVsKCZjLT5saXN0KTsKLQkJV1JJVEVfVU5MT0NLKCZjbHVzdGVyaXBfbG9jayk7CisJCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCQlkZXZfbWNfZGVsZXRlKGMtPmRldiwgYy0+Y2x1c3Rlcm1hYywgRVRIX0FMRU4sIDApOwogCQlkZXZfcHV0KGMtPmRldik7CiAJCWtmcmVlKGMpOwpAQCAtOTcsNyArOTgsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAotCU1VU1RfQkVfUkVBRF9MT0NLRUQoJmNsdXN0ZXJpcF9sb2NrKTsKKwlBU1NFUlRfUkVBRF9MT0NLKCZjbHVzdGVyaXBfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChwb3MsICZjbHVzdGVyaXBfY29uZmlncykgewogCQlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYyA9IGxpc3RfZW50cnkocG9zLCAKIAkJCQkJc3RydWN0IGNsdXN0ZXJpcF9jb25maWcsIGxpc3QpOwpAQCAtMTE0LDE0ICsxMTUsMTQgQEAKIHsKIAlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYzsKIAotCVJFQURfTE9DSygmY2x1c3RlcmlwX2xvY2spOworCXJlYWRfbG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCWMgPSBfX2NsdXN0ZXJpcF9jb25maWdfZmluZChjbHVzdGVyaXApOwogCWlmICghYykgewotCQlSRUFEX1VOTE9DSygmY2x1c3RlcmlwX2xvY2spOworCQlyZWFkX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJYXRvbWljX2luYygmYy0+cmVmY291bnQpOwotCVJFQURfVU5MT0NLKCZjbHVzdGVyaXBfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAogCXJldHVybiBjOwogfQpAQCAtMTYwLDkgKzE2MSw5IEBACiAJYy0+cGRlLT5kYXRhID0gYzsKICNlbmRpZgogCi0JV1JJVEVfTE9DSygmY2x1c3RlcmlwX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAlsaXN0X2FkZCgmYy0+bGlzdCwgJmNsdXN0ZXJpcF9jb25maWdzKTsKLQlXUklURV9VTkxPQ0soJmNsdXN0ZXJpcF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAogCXJldHVybiBjOwogfQpAQCAtMTcyLDI1ICsxNzMsMjUgQEAKIHsKIAlpbnQgaTsKIAotCVdSSVRFX0xPQ0soJmNsdXN0ZXJpcF9sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CiAKIAlpZiAoYy0+bnVtX2xvY2FsX25vZGVzID49IENMVVNURVJJUF9NQVhfTk9ERVMKIAkgICAgfHwgbm9kZW51bSA+IENMVVNURVJJUF9NQVhfTk9ERVMpIHsKLQkJV1JJVEVfVU5MT0NLKCZjbHVzdGVyaXBfbG9jayk7CisJCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBjaGVjayBpZiB3ZSBhbHJhZHkgaGF2ZSB0aGlzIG51bWJlciBpbiBvdXIgYXJyYXkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYy0+bnVtX2xvY2FsX25vZGVzOyBpKyspIHsKIAkJaWYgKGMtPmxvY2FsX25vZGVzW2ldID09IG5vZGVudW0pIHsKLQkJCVdSSVRFX1VOTE9DSygmY2x1c3RlcmlwX2xvY2spOworCQkJd3JpdGVfdW5sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KIAogCWMtPmxvY2FsX25vZGVzW2MtPm51bV9sb2NhbF9ub2RlcysrXSA9IG5vZGVudW07CiAKLQlXUklURV9VTkxPQ0soJmNsdXN0ZXJpcF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk5LDEwICsyMDAsMTAgQEAKIHsKIAlpbnQgaTsKIAotCVdSSVRFX0xPQ0soJmNsdXN0ZXJpcF9sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CiAKIAlpZiAoYy0+bnVtX2xvY2FsX25vZGVzIDw9IDEgfHwgbm9kZW51bSA+IENMVVNURVJJUF9NQVhfTk9ERVMpIHsKLQkJV1JJVEVfVU5MT0NLKCZjbHVzdGVyaXBfbG9jayk7CisJCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCQlyZXR1cm4gMTsKIAl9CiAJCQpAQCAtMjExLDEyICsyMTIsMTIgQEAKIAkJCWludCBzaXplID0gc2l6ZW9mKHVfaW50MTZfdCkqKGMtPm51bV9sb2NhbF9ub2Rlcy0oaSsxKSk7CiAJCQltZW1tb3ZlKCZjLT5sb2NhbF9ub2Rlc1tpXSwgJmMtPmxvY2FsX25vZGVzW2krMV0sIHNpemUpOwogCQkJYy0+bnVtX2xvY2FsX25vZGVzLS07Ci0JCQlXUklURV9VTkxPQ0soJmNsdXN0ZXJpcF9sb2NrKTsKKwkJCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlXUklURV9VTkxPQ0soJmNsdXN0ZXJpcF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjg2LDIxICsyODcsMjEgQEAKIHsKIAlpbnQgaTsKIAotCVJFQURfTE9DSygmY2x1c3RlcmlwX2xvY2spOworCXJlYWRfbG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCiAJaWYgKGNvbmZpZy0+bnVtX2xvY2FsX25vZGVzID09IDApIHsKLQkJUkVBRF9VTkxPQ0soJmNsdXN0ZXJpcF9sb2NrKTsKKwkJcmVhZF91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+bnVtX2xvY2FsX25vZGVzOyBpKyspIHsKIAkJaWYgKGNvbmZpZy0+bG9jYWxfbm9kZXNbaV0gPT0gaGFzaCkgewotCQkJUkVBRF9VTkxPQ0soJmNsdXN0ZXJpcF9sb2NrKTsKKwkJCXJlYWRfdW5sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KIAotCVJFQURfVU5MT0NLKCZjbHVzdGVyaXBfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTc4LDcgKzU3OSw3IEBACiAJc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMgPSBwZGUtPmRhdGE7CiAJdW5zaWduZWQgaW50ICpub2RlaWR4OwogCi0JUkVBRF9MT0NLKCZjbHVzdGVyaXBfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CiAJaWYgKCpwb3MgPj0gYy0+bnVtX2xvY2FsX25vZGVzKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNjA4LDcgKzYwOSw3IEBACiB7CiAJa2ZyZWUodik7CiAKLQlSRUFEX1VOTE9DSygmY2x1c3RlcmlwX2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgY2x1c3RlcmlwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKaW5kZXggNTdlOWY2Yy4uOTFlNzQ1MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKQEAgLTMzLDcgKzMzLDcgQEAKICNlbmRpZgogCiAvKiBMb2NrIHByb3RlY3RzIG1hc3EgcmVnaW9uIGluc2lkZSBjb25udHJhY2sgKi8KLXN0YXRpYyBERUNMQVJFX1JXTE9DSyhtYXNxX2xvY2spOworc3RhdGljIERFRklORV9SV0xPQ0sobWFzcV9sb2NrKTsKIAogLyogRklYTUU6IE11bHRpcGxlIHRhcmdldHMuIC0tUlIgKi8KIHN0YXRpYyBpbnQKQEAgLTEwMyw5ICsxMDMsOSBAQAogCQlyZXR1cm4gTkZfRFJPUDsKIAl9CiAKLQlXUklURV9MT0NLKCZtYXNxX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJm1hc3FfbG9jayk7CiAJY3QtPm5hdC5tYXNxX2luZGV4ID0gb3V0LT5pZmluZGV4OwotCVdSSVRFX1VOTE9DSygmbWFzcV9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJm1hc3FfbG9jayk7CiAKIAkvKiBUcmFuc2ZlciBmcm9tIG9yaWdpbmFsIHJhbmdlLiAqLwogCW5ld3JhbmdlID0gKChzdHJ1Y3QgaXBfbmF0X3JhbmdlKQpAQCAtMTIyLDkgKzEyMiw5IEBACiB7CiAJaW50IHJldDsKIAotCVJFQURfTE9DSygmbWFzcV9sb2NrKTsKKwlyZWFkX2xvY2tfYmgoJm1hc3FfbG9jayk7CiAJcmV0ID0gKGktPm5hdC5tYXNxX2luZGV4ID09IChpbnQpKGxvbmcpaWZpbmRleCk7Ci0JUkVBRF9VTkxPQ0soJm1hc3FfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJm1hc3FfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKaW5kZXggMjY2ZDY0OS4uOTE1Njk2NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCkBAIC0xMDQsMTAgKzEwNCwxMiBAQAogc3RhdGljIHZvaWQgc2VuZF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLCBpbnQgaG9vaykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IG9sZHNrYi0+bmguaXBoOwogCXN0cnVjdCB0Y3BoZHIgX290Y3BoLCAqb3RoLCAqdGNwaDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAl1X2ludDE2X3QgdG1wX3BvcnQ7CiAJdV9pbnQzMl90IHRtcF9hZGRyOworCXVuc2lnbmVkIGludCB0Y3BsZW47CiAJaW50IG5lZWRzX2FjazsKIAlpbnQgaGhfbGVuOwogCkBAIC0xMjQsNyArMTI2LDE2IEBACiAJaWYgKG90aC0+cnN0KQogCQlyZXR1cm47CiAKLQkvKiBGSVhNRTogQ2hlY2sgY2hlY2tzdW0gLS1SUiAqLworCS8qIENoZWNrIGNoZWNrc3VtICovCisJdGNwbGVuID0gb2xkc2tiLT5sZW4gLSBpcGgtPmlobCAqIDQ7CisJaWYgKCgoaG9vayAhPSBORl9JUF9MT0NBTF9JTiAmJiBvbGRza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9IVykgfHwKKwkgICAgIChob29rID09IE5GX0lQX0xPQ0FMX0lOICYmCisJICAgICAgb2xkc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpKSAmJgorCSAgICBjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCB0Y3BsZW4sIElQUFJPVE9fVENQLAorCSAgICAgICAgICAgICAgICAgICAgICBvbGRza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IG9sZHNrYi0+Y3N1bSA6CisJICAgICAgICAgICAgICAgICAgICAgIHNrYl9jaGVja3N1bShvbGRza2IsIGlwaC0+aWhsICogNCwgdGNwbGVuLCAwKSkpCisJCXJldHVybjsKKwogCWlmICgocnQgPSByb3V0ZV9yZXZlcnNlKG9sZHNrYiwgb3RoLCBob29rKSkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCmluZGV4IDZmMmNlZmIuLjUyYTAwNzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1VMT0cuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9sb2NraGVscC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKQEAgLTk5LDggKzk4LDggQEAKIAogc3RhdGljIHVsb2dfYnVmZl90IHVsb2dfYnVmZmVyc1tVTE9HX01BWE5MR1JPVVBTXTsJLyogYXJyYXkgb2YgYnVmZmVycyAqLwogCi1zdGF0aWMgc3RydWN0IHNvY2sgKm5mbG9nbmw7CS8qIG91ciBzb2NrZXQgKi8KLXN0YXRpYyBERUNMQVJFX0xPQ0sodWxvZ19sb2NrKTsJLyogc3BpbmxvY2sgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29jayAqbmZsb2dubDsJCS8qIG91ciBzb2NrZXQgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWxvZ19sb2NrKTsJLyogc3BpbmxvY2sgKi8KIAogLyogc2VuZCBvbmUgdWxvZ19idWZmX3QgdG8gdXNlcnNwYWNlICovCiBzdGF0aWMgdm9pZCB1bG9nX3NlbmQodW5zaWduZWQgaW50IG5sZ3JvdXBudW0pCkBAIC0xMzUsOSArMTM0LDkgQEAKIAogCS8qIGxvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHNvbWVib2R5IG1vZGlmeWluZyBvdXIgc3RydWN0dXJlCiAJICogZnJvbSBpcHRfdWxvZ190YXJnZXQgYXQgdGhlIHNhbWUgdGltZSAqLwotCUxPQ0tfQkgoJnVsb2dfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZ1bG9nX2xvY2spOwogCXVsb2dfc2VuZChkYXRhKTsKLQlVTkxPQ0tfQkgoJnVsb2dfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnVsb2dfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWxvZ19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUpCkBAIC0xOTMsNyArMTkyLDcgQEAKIAogCXViID0gJnVsb2dfYnVmZmVyc1tncm91cG51bV07CiAJCi0JTE9DS19CSCgmdWxvZ19sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnVsb2dfbG9jayk7CiAKIAlpZiAoIXViLT5za2IpIHsKIAkJaWYgKCEodWItPnNrYiA9IHVsb2dfYWxsb2Nfc2tiKHNpemUpKSkKQEAgLTI3OCw3ICsyNzcsNyBAQAogCQl1bG9nX3NlbmQoZ3JvdXBudW0pOwogCX0KIAotCVVOTE9DS19CSCgmdWxvZ19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmdWxvZ19sb2NrKTsKIAogCXJldHVybjsKIApAQCAtMjg4LDcgKzI4Nyw3IEBACiBhbGxvY19mYWlsdXJlOgogCVBSSU5UUigiaXB0X1VMT0c6IEVycm9yIGJ1aWxkaW5nIG5ldGxpbmsgbWVzc2FnZVxuIik7CiAKLQlVTkxPQ0tfQkgoJnVsb2dfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnVsb2dfbG9jayk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB0X3Vsb2dfdGFyZ2V0KHN0cnVjdCBza19idWZmICoqcHNrYiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGFzaGxpbWl0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hhc2hsaW1pdC5jCmluZGV4IGYxOTM3MTkwLi41NjRiNDliIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGFzaGxpbWl0LmMKQEAgLTM3LDcgKzM3LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9sb2NraGVscC5oPgogCiAvKiBGSVhNRTogdGhpcyBpcyBqdXN0IGZvciBJUF9ORl9BU1NFUlJUICovCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CkBAIC05Miw3ICs5MSw3IEBACiAJc3RydWN0IGhsaXN0X2hlYWQgaGFzaFswXTsJLyogaGFzaHRhYmxlIGl0c2VsZiAqLwogfTsKIAotc3RhdGljIERFQ0xBUkVfTE9DSyhoYXNobGltaXRfbG9jayk7CS8qIHByb3RlY3RzIGh0YWJsZXMgbGlzdCAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhoYXNobGltaXRfbG9jayk7CS8qIHByb3RlY3RzIGh0YWJsZXMgbGlzdCAqLwogc3RhdGljIERFQ0xBUkVfTVVURVgoaGxpbWl0X211dGV4KTsJLyogYWRkaXRpb25hbCBjaGVja2VudHJ5IHByb3RlY3Rpb24gKi8KIHN0YXRpYyBITElTVF9IRUFEKGhhc2hsaW1pdF9odGFibGVzKTsKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKmhhc2hsaW1pdF9jYWNoZXA7CkBAIC0yMzMsOSArMjMyLDkgQEAKIAloaW5mby0+dGltZXIuZnVuY3Rpb24gPSBodGFibGVfZ2M7CiAJYWRkX3RpbWVyKCZoaW5mby0+dGltZXIpOwogCi0JTE9DS19CSCgmaGFzaGxpbWl0X2xvY2spOworCXNwaW5fbG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOwogCWhsaXN0X2FkZF9oZWFkKCZoaW5mby0+bm9kZSwgJmhhc2hsaW1pdF9odGFibGVzKTsKLQlVTkxPQ0tfQkgoJmhhc2hsaW1pdF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDEsMTUgKzMwMCwxNSBAQAogCXN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm87CiAJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKIAotCUxPQ0tfQkgoJmhhc2hsaW1pdF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShoaW5mbywgcG9zLCAmaGFzaGxpbWl0X2h0YWJsZXMsIG5vZGUpIHsKIAkJaWYgKCFzdHJjbXAobmFtZSwgaGluZm8tPnBkZS0+bmFtZSkpIHsKIAkJCWF0b21pY19pbmMoJmhpbmZvLT51c2UpOwotCQkJVU5MT0NLX0JIKCZoYXNobGltaXRfbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOwogCQkJcmV0dXJuIGhpbmZvOwogCQl9CiAJfQotCVVOTE9DS19CSCgmaGFzaGxpbWl0X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZoYXNobGltaXRfbG9jayk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTMxNyw5ICszMTYsOSBAQAogc3RhdGljIHZvaWQgaHRhYmxlX3B1dChzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZoaW5mby0+dXNlKSkgewotCQlMT0NLX0JIKCZoYXNobGltaXRfbG9jayk7CisJCXNwaW5fbG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOwogCQlobGlzdF9kZWwoJmhpbmZvLT5ub2RlKTsKLQkJVU5MT0NLX0JIKCZoYXNobGltaXRfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZoYXNobGltaXRfbG9jayk7CiAJCWh0YWJsZV9kZXN0cm95KGhpbmZvKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hlbHBlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9oZWxwZXIuYwppbmRleCAzM2ZkZjM2Li4zZTdkZDAxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hlbHBlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGVscGVyLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlSRUFEX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKKwlyZWFkX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAlpZiAoIWN0LT5tYXN0ZXItPmhlbHBlcikgewogCQlERUJVR1AoImlwdF9oZWxwZXI6IG1hc3RlciBjdCAlcCBoYXMgbm8gaGVscGVyXG4iLCAKIAkJCWV4cC0+ZXhwZWN0YW50KTsKQEAgLTY5LDcgKzY5LDcgQEAKIAkJcmV0IF49ICFzdHJuY21wKGN0LT5tYXN0ZXItPmhlbHBlci0+bmFtZSwgaW5mby0+bmFtZSwgCiAJCSAgICAgICAgICAgICAgICBzdHJsZW4oY3QtPm1hc3Rlci0+aGVscGVyLT5uYW1lKSk7CiBvdXRfdW5sb2NrOgotCVJFQURfVU5MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCA0N2EzMGMzLi4xNGY1YzUzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTY5NSw3ICs2OTUsNyBAQAogCiAJCWlmIChydCAmJiAoKHJ0LT5ydDZpX2ZsYWdzICYgKFJURl9HQVRFV0FZIHwgUlRGX0RFRkFVTFQpKSA9PSAwKSkgewogCQkJaWYgKG9ubGluayA9PSAwKSB7Ci0JCQkJaXA2X2RlbF9ydChydCwgTlVMTCwgTlVMTCk7CisJCQkJaXA2X2RlbF9ydChydCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJCQkJcnQgPSBOVUxMOwogCQkJfSBlbHNlIGlmICghKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0VYUElSRVMpKSB7CiAJCQkJcnQtPnJ0NmlfZXhwaXJlcyA9IGV4cGlyZXM7CkBAIC0xMzQwLDcgKzEzNDAsNyBAQAogCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX1NJVCAmJiAoZGV2LT5mbGFncyZJRkZfUE9JTlRPUE9JTlQpKQogCQlydG1zZy5ydG1zZ19mbGFncyB8PSBSVEZfTk9ORVhUSE9QOwogCi0JaXA2X3JvdXRlX2FkZCgmcnRtc2csIE5VTEwsIE5VTEwpOworCWlwNl9yb3V0ZV9hZGQoJnJ0bXNnLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAogLyogQ3JlYXRlICJkZWZhdWx0IiBtdWx0aWNhc3Qgcm91dGUgdG8gdGhlIGludGVyZmFjZSAqLwpAQCAtMTM1Nyw3ICsxMzU3LDcgQEAKIAlydG1zZy5ydG1zZ19pZmluZGV4ID0gZGV2LT5pZmluZGV4OwogCXJ0bXNnLnJ0bXNnX2ZsYWdzID0gUlRGX1VQOwogCXJ0bXNnLnJ0bXNnX3R5cGUgPSBSVE1TR19ORVdST1VURTsKLQlpcDZfcm91dGVfYWRkKCZydG1zZywgTlVMTCwgTlVMTCk7CisJaXA2X3JvdXRlX2FkZCgmcnRtc2csIE5VTEwsIE5VTEwsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBzaXRfcm91dGVfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xMzc0LDcgKzEzNzQsNyBAQAogCXJ0bXNnLnJ0bXNnX2ZsYWdzCT0gUlRGX1VQfFJURl9OT05FWFRIT1A7CiAJcnRtc2cucnRtc2dfaWZpbmRleAk9IGRldi0+aWZpbmRleDsKIAotCWlwNl9yb3V0ZV9hZGQoJnJ0bXNnLCBOVUxMLCBOVUxMKTsKKwlpcDZfcm91dGVfYWRkKCZydG1zZywgTlVMTCwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZHJjb25mX2FkZF9scm91dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE0NjcsNyArMTQ2Nyw3IEBACiAJCWlmIChydCAmJiAoKHJ0LT5ydDZpX2ZsYWdzICYgKFJURl9HQVRFV0FZIHwgUlRGX0RFRkFVTFQpKSA9PSAwKSkgewogCQkJaWYgKHJ0LT5ydDZpX2ZsYWdzJlJURl9FWFBJUkVTKSB7CiAJCQkJaWYgKHZhbGlkX2xmdCA9PSAwKSB7Ci0JCQkJCWlwNl9kZWxfcnQocnQsIE5VTEwsIE5VTEwpOworCQkJCQlpcDZfZGVsX3J0KHJ0LCBOVUxMLCBOVUxMLCBOVUxMKTsKIAkJCQkJcnQgPSBOVUxMOwogCQkJCX0gZWxzZSB7CiAJCQkJCXJ0LT5ydDZpX2V4cGlyZXMgPSBydF9leHBpcmVzOwpAQCAtMzA5NCw3ICszMDk0LDcgQEAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBSVE1fTkVXQUREUjoKIAkJZHN0X2hvbGQoJmlmcC0+cnQtPnUuZHN0KTsKLQkJaWYgKGlwNl9pbnNfcnQoaWZwLT5ydCwgTlVMTCwgTlVMTCkpCisJCWlmIChpcDZfaW5zX3J0KGlmcC0+cnQsIE5VTEwsIE5VTEwsIE5VTEwpKQogCQkJZHN0X3JlbGVhc2UoJmlmcC0+cnQtPnUuZHN0KTsKIAkJaWYgKGlmcC0+aWRldi0+Y25mLmZvcndhcmRpbmcpCiAJCQlhZGRyY29uZl9qb2luX2FueWNhc3QoaWZwKTsKQEAgLTMxMDQsNyArMzEwNCw3IEBACiAJCQlhZGRyY29uZl9sZWF2ZV9hbnljYXN0KGlmcCk7CiAJCWFkZHJjb25mX2xlYXZlX3NvbGljdChpZnAtPmlkZXYsICZpZnAtPmFkZHIpOwogCQlkc3RfaG9sZCgmaWZwLT5ydC0+dS5kc3QpOwotCQlpZiAoaXA2X2RlbF9ydChpZnAtPnJ0LCBOVUxMLCBOVUxMKSkKKwkJaWYgKGlwNl9kZWxfcnQoaWZwLT5ydCwgTlVMTCwgTlVMTCwgTlVMTCkpCiAJCQlkc3RfZnJlZSgmaWZwLT5ydC0+dS5kc3QpOwogCQllbHNlCiAJCQlkc3RfcmVsZWFzZSgmaWZwLT5ydC0+dS5kc3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYW55Y2FzdC5jIGIvbmV0L2lwdjYvYW55Y2FzdC5jCmluZGV4IDVkMjJjYTMuLjZiNzI5NDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FueWNhc3QuYworKysgYi9uZXQvaXB2Ni9hbnljYXN0LmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAKIAlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKLQlpZiAoaXA2X2luc19ydChydCwgTlVMTCwgTlVMTCkpCisJaWYgKGlwNl9pbnNfcnQocnQsIE5VTEwsIE5VTEwsIE5VTEwpKQogCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKIAogCWFkZHJjb25mX2pvaW5fc29saWN0KGRldiwgJmFjYS0+YWNhX2FkZHIpOwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJYWRkcmNvbmZfbGVhdmVfc29saWN0KGlkZXYsICZhY2EtPmFjYV9hZGRyKTsKIAogCWRzdF9ob2xkKCZhY2EtPmFjYV9ydC0+dS5kc3QpOwotCWlmIChpcDZfZGVsX3J0KGFjYS0+YWNhX3J0LCBOVUxMLCBOVUxMKSkKKwlpZiAoaXA2X2RlbF9ydChhY2EtPmFjYV9ydCwgTlVMTCwgTlVMTCwgTlVMTCkpCiAJCWRzdF9mcmVlKCZhY2EtPmFjYV9ydC0+dS5kc3QpOwogCWVsc2UKIAkJZHN0X3JlbGVhc2UoJmFjYS0+YWNhX3J0LT51LmRzdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggNDA1NzQwYi4uMWIzNTRhYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jCisrKyBiL25ldC9pcHY2L2lwNl9maWIuYwpAQCAtMzk0LDcgKzM5NCw3IEBACiAgKi8KIAogc3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LAotICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoKQorCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqcmVxKQogewogCXN0cnVjdCBydDZfaW5mbyAqaXRlciA9IE5VTEw7CiAJc3RydWN0IHJ0Nl9pbmZvICoqaW5zOwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJKmlucyA9IHJ0OwogCXJ0LT5ydDZpX25vZGUgPSBmbjsKIAlhdG9taWNfaW5jKCZydC0+cnQ2aV9yZWYpOwotCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBubGgpOworCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBubGgsIHJlcSk7CiAJcnQ2X3N0YXRzLmZpYl9ydF9lbnRyaWVzKys7CiAKIAlpZiAoKGZuLT5mbl9mbGFncyAmIFJUTl9SVElORk8pID09IDApIHsKQEAgLTQ3OSw3ICs0NzksOCBAQAogICoJd2l0aCBzb3VyY2UgYWRkciBpbmZvIGluIHN1Yi10cmVlcwogICovCiAKLWludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqX3J0YXR0cikKK2ludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAKKwkJc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKl9ydGF0dHIsIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqcmVxKQogewogCXN0cnVjdCBmaWI2X25vZGUgKmZuOwogCWludCBlcnIgPSAtRU5PTUVNOwpAQCAtNTUyLDcgKzU1Myw3IEBACiAJfQogI2VuZGlmCiAKLQllcnIgPSBmaWI2X2FkZF9ydDJub2RlKGZuLCBydCwgbmxoKTsKKwllcnIgPSBmaWI2X2FkZF9ydDJub2RlKGZuLCBydCwgbmxoLCByZXEpOwogCiAJaWYgKGVyciA9PSAwKSB7CiAJCWZpYjZfc3RhcnRfZ2MocnQpOwpAQCAtODU5LDcgKzg2MCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgcnQ2X2luZm8gKipydHAsCi0gICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKl9ydGF0dHIpCisgICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKl9ydGF0dHIsIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqcmVxKQogewogCXN0cnVjdCBmaWI2X3dhbGtlcl90ICp3OwogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAqcnRwOwpAQCAtOTE1LDExICs5MTYsMTEgQEAKIAkJaWYgKGF0b21pY19yZWFkKCZydC0+cnQ2aV9yZWYpICE9IDEpIEJVRygpOwogCX0KIAotCWluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBubGgpOworCWluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBubGgsIHJlcSk7CiAJcnQ2X3JlbGVhc2UocnQpOwogfQogCi1pbnQgZmliNl9kZWwoc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKl9ydGF0dHIpCitpbnQgZmliNl9kZWwoc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKl9ydGF0dHIsIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqcmVxKQogewogCXN0cnVjdCBmaWI2X25vZGUgKmZuID0gcnQtPnJ0Nmlfbm9kZTsKIAlzdHJ1Y3QgcnQ2X2luZm8gKipydHA7CkBAIC05NDQsNyArOTQ1LDcgQEAKIAogCWZvciAocnRwID0gJmZuLT5sZWFmOyAqcnRwOyBydHAgPSAmKCpydHApLT51Lm5leHQpIHsKIAkJaWYgKCpydHAgPT0gcnQpIHsKLQkJCWZpYjZfZGVsX3JvdXRlKGZuLCBydHAsIG5saCwgX3J0YXR0cik7CisJCQlmaWI2X2RlbF9yb3V0ZShmbiwgcnRwLCBubGgsIF9ydGF0dHIsIHJlcSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTEwNzMsNyArMTA3NCw3IEBACiAJCXJlcyA9IGMtPmZ1bmMocnQsIGMtPmFyZyk7CiAJCWlmIChyZXMgPCAwKSB7CiAJCQl3LT5sZWFmID0gcnQ7Ci0JCQlyZXMgPSBmaWI2X2RlbChydCwgTlVMTCwgTlVMTCk7CisJCQlyZXMgPSBmaWI2X2RlbChydCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJCQlpZiAocmVzKSB7CiAjaWYgUlQ2X0RFQlVHID49IDIKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiZmliNl9jbGVhbl9ub2RlOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcbiIsIHJ0LCBydC0+cnQ2aV9ub2RlLCByZXMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IGI3OGE1MzUuLjA2ZTdjZGFlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC00ODQsOSArNDg0LDYgQEAKIAl0by0+bmZfYnJpZGdlID0gZnJvbS0+bmZfYnJpZGdlOwogCW5mX2JyaWRnZV9nZXQodG8tPm5mX2JyaWRnZSk7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCi0JdG8tPm5mX2RlYnVnID0gZnJvbS0+bmZfZGVidWc7Ci0jZW5kaWYKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggMjc5YWI4Ni4uZjNlZjRjMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtNDIzLDExICs0MjMsMTIgQEAKIAkJCXBzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmZ3JlcXMuZ3NyX2dyb3VwOwogCQkJcmV0diA9IGlwdjZfc29ja19tY19qb2luKHNrLCBncmVxcy5nc3JfaW50ZXJmYWNlLAogCQkJCSZwc2luNi0+c2luNl9hZGRyKTsKLQkJCWlmIChyZXR2KQorCQkJLyogcHJpb3Igam9pbiB3LyBkaWZmZXJlbnQgc291cmNlIGlzIG9rICovCisJCQlpZiAocmV0diAmJiByZXR2ICE9IC1FQUREUklOVVNFKQogCQkJCWJyZWFrOwogCQkJb21vZGUgPSBNQ0FTVF9JTkNMVURFOwogCQkJYWRkID0gMTsKLQkJfSBlbHNlIC8qSVBfRFJPUF9TT1VSQ0VfTUVNQkVSU0hJUCAqLyB7CisJCX0gZWxzZSAvKiBNQ0FTVF9MRUFWRV9TT1VSQ0VfR1JPVVAgKi8gewogCQkJb21vZGUgPSBNQ0FTVF9JTkNMVURFOwogCQkJYWRkID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmMKaW5kZXggMzkzYjZlNi4uNTYyZmNkMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWNhc3QuYworKysgYi9uZXQvaXB2Ni9tY2FzdC5jCkBAIC0xODgsNiArMTg4LDE2IEBACiAJaWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KGFkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXJlYWRfbG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKKwlmb3IgKG1jX2xzdD1ucC0+aXB2Nl9tY19saXN0OyBtY19sc3Q7IG1jX2xzdD1tY19sc3QtPm5leHQpIHsKKwkJaWYgKChpZmluZGV4ID09IDAgfHwgbWNfbHN0LT5pZmluZGV4ID09IGlmaW5kZXgpICYmCisJCSAgICBpcHY2X2FkZHJfZXF1YWwoJm1jX2xzdC0+YWRkciwgYWRkcikpIHsKKwkJCXJlYWRfdW5sb2NrX2JoKCZpcHY2X3NrX21jX2xvY2spOworCQkJcmV0dXJuIC1FQUREUklOVVNFOworCQl9CisJfQorCXJlYWRfdW5sb2NrX2JoKCZpcHY2X3NrX21jX2xvY2spOworCiAJbWNfbHN0ID0gc29ja19rbWFsbG9jKHNrLCBzaXplb2Yoc3RydWN0IGlwdjZfbWNfc29ja2xpc3QpLCBHRlBfS0VSTkVMKTsKIAogCWlmIChtY19sc3QgPT0gTlVMTCkKQEAgLTM0OSw2ICszNTksNyBAQAogCXN0cnVjdCBpcHY2X3BpbmZvICppbmV0NiA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3QgaXA2X3NmX3NvY2tsaXN0ICpwc2w7CiAJaW50IGksIGosIHJ2OworCWludCBsZWF2ZWdyb3VwID0gMDsKIAlpbnQgZXJyOwogCiAJaWYgKHBnc3ItPmdzcl9ncm91cC5zc19mYW1pbHkgIT0gQUZfSU5FVDYgfHwKQEAgLTM2OCw2ICszNzksNyBAQAogCiAJZXJyID0gLUVBRERSTk9UQVZBSUw7CiAKKwlyZWFkX2xvY2tfYmgoJmlwdjZfc2tfbWNfbG9jayk7CiAJZm9yIChwbWM9aW5ldDYtPmlwdjZfbWNfbGlzdDsgcG1jOyBwbWM9cG1jLT5uZXh0KSB7CiAJCWlmIChwZ3NyLT5nc3JfaW50ZXJmYWNlICYmIHBtYy0+aWZpbmRleCAhPSBwZ3NyLT5nc3JfaW50ZXJmYWNlKQogCQkJY29udGludWU7CkBAIC00MDEsNiArNDEzLDEyIEBACiAJCWlmIChydikJCS8qIHNvdXJjZSBub3QgZm91bmQgKi8KIAkJCWdvdG8gZG9uZTsKIAorCQkvKiBzcGVjaWFsIGNhc2UgLSAoSU5DTFVERSwgZW1wdHkpID09IExFQVZFX0dST1VQICovCisJCWlmIChwc2wtPnNsX2NvdW50ID09IDEgJiYgb21vZGUgPT0gTUNBU1RfSU5DTFVERSkgeworCQkJbGVhdmVncm91cCA9IDE7CisJCQlnb3RvIGRvbmU7CisJCX0KKwogCQkvKiB1cGRhdGUgdGhlIGludGVyZmFjZSBmaWx0ZXIgKi8KIAkJaXA2X21jX2RlbF9zcmMoaWRldiwgZ3JvdXAsIG9tb2RlLCAxLCBzb3VyY2UsIDEpOwogCkBAIC00NTMsOSArNDcxLDEyIEBACiAJLyogdXBkYXRlIHRoZSBpbnRlcmZhY2UgbGlzdCAqLwogCWlwNl9tY19hZGRfc3JjKGlkZXYsIGdyb3VwLCBvbW9kZSwgMSwgc291cmNlLCAxKTsKIGRvbmU6CisJcmVhZF91bmxvY2tfYmgoJmlwdjZfc2tfbWNfbG9jayk7CiAJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCWluNl9kZXZfcHV0KGlkZXYpOwogCWRldl9wdXQoZGV2KTsKKwlpZiAobGVhdmVncm91cCkKKwkJcmV0dXJuIGlwdjZfc29ja19tY19kcm9wKHNrLCBwZ3NyLT5nc3JfaW50ZXJmYWNlLCBncm91cCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTI4MCwxNSArMTMwMSw2IEBACiAJCXJldHVybiBOVUxMOwogCiAJc2tiX3Jlc2VydmUoc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKTsKLQlpZiAoZGV2LT5oYXJkX2hlYWRlcikgewotCQl1bnNpZ25lZCBjaGFyIGhhW01BWF9BRERSX0xFTl07Ci0KLQkJbmRpc2NfbWNfbWFwKCZtbGQyX2FsbF9tY3IsIGhhLCBkZXYsIDEpOwotCQlpZiAoZGV2LT5oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfSVBWNixoYSxOVUxMLHNpemUpIDwgMCkgewotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KIAogCWlmIChpcHY2X2dldF9sbGFkZHIoZGV2LCAmYWRkcl9idWYpKSB7CiAJCS8qIDxkcmFmdC1pZXRmLW1hZ21hLW1sZC1zb3VyY2UtMDUudHh0PjoKQEAgLTEzMTIsNiArMTMyNCwzMCBAQAogCXJldHVybiBza2I7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG1sZF9kZXZfcXVldWVfeG1pdDIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CisKKwlpZiAoZGV2LT5oYXJkX2hlYWRlcikgeworCQl1bnNpZ25lZCBjaGFyIGhhW01BWF9BRERSX0xFTl07CisJCWludCBlcnI7CisKKwkJbmRpc2NfbWNfbWFwKCZza2ItPm5oLmlwdjZoLT5kYWRkciwgaGEsIGRldiwgMSk7CisJCWVyciA9IGRldi0+aGFyZF9oZWFkZXIoc2tiLCBkZXYsIEVUSF9QX0lQVjYsIGhhLCBOVUxMLCBza2ItPmxlbik7CisJCWlmIChlcnIgPCAwKSB7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisJcmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1sZF9kZXZfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBORl9IT09LKFBGX0lORVQ2LCBORl9JUDZfUE9TVF9ST1VUSU5HLCBza2IsIE5VTEwsIHNrYi0+ZGV2LAorCSAgICAgICAgICAgICAgIG1sZF9kZXZfcXVldWVfeG1pdDIpOworfQorCiBzdGF0aWMgdm9pZCBtbGRfc2VuZHBhY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqcGlwNiA9IHNrYi0+bmguaXB2Nmg7CkBAIC0xMzI5LDcgKzEzNjUsNyBAQAogCXBtci0+Y3N1bSA9IGNzdW1faXB2Nl9tYWdpYygmcGlwNi0+c2FkZHIsICZwaXA2LT5kYWRkciwgbWxkbGVuLAogCQlJUFBST1RPX0lDTVBWNiwgY3N1bV9wYXJ0aWFsKHNrYi0+aC5yYXcsIG1sZGxlbiwgMCkpOwogCWVyciA9IE5GX0hPT0soUEZfSU5FVDYsIE5GX0lQNl9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kZXYsCi0JCWRldl9xdWV1ZV94bWl0KTsKKwkJbWxkX2Rldl9xdWV1ZV94bWl0KTsKIAlpZiAoIWVycikgewogCQlJQ01QNl9JTkNfU1RBVFMoaWRldixJQ01QNl9NSUJfT1VUTVNHUyk7CiAJCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfT1VUTUNBU1RQS1RTKTsKQEAgLTE2MzUsMTIgKzE2NzEsNiBAQAogCX0KIAogCXNrYl9yZXNlcnZlKHNrYiwgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSk7Ci0JaWYgKGRldi0+aGFyZF9oZWFkZXIpIHsKLQkJdW5zaWduZWQgY2hhciBoYVtNQVhfQUREUl9MRU5dOwotCQluZGlzY19tY19tYXAoc25kX2FkZHIsIGhhLCBkZXYsIDEpOwotCQlpZiAoZGV2LT5oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfSVBWNiwgaGEsIE5VTEwsIGZ1bGxfbGVuKSA8IDApCi0JCQlnb3RvIG91dDsKLQl9CiAKIAlpZiAoaXB2Nl9nZXRfbGxhZGRyKGRldiwgJmFkZHJfYnVmKSkgewogCQkvKiA8ZHJhZnQtaWV0Zi1tYWdtYS1tbGQtc291cmNlLTA1LnR4dD46CkBAIC0xNjY4LDcgKzE2OTgsNyBAQAogCWlkZXYgPSBpbjZfZGV2X2dldChza2ItPmRldik7CiAKIAllcnIgPSBORl9IT09LKFBGX0lORVQ2LCBORl9JUDZfTE9DQUxfT1VULCBza2IsIE5VTEwsIHNrYi0+ZGV2LAotCQlkZXZfcXVldWVfeG1pdCk7CisJCW1sZF9kZXZfcXVldWVfeG1pdCk7CiAJaWYgKCFlcnIpIHsKIAkJaWYgKHR5cGUgPT0gSUNNUFY2X01HTV9SRURVQ1RJT04pCiAJCQlJQ01QNl9JTkNfU1RBVFMoaWRldiwgSUNNUDZfTUlCX09VVEdST1VQTUVNQlJFRFVDVElPTlMpOwpAQCAtMTY4MiwxMCArMTcxMiw2IEBACiAJaWYgKGxpa2VseShpZGV2ICE9IE5VTEwpKQogCQlpbjZfZGV2X3B1dChpZGV2KTsKIAlyZXR1cm47Ci0KLW91dDoKLQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKLQlrZnJlZV9za2Ioc2tiKTsKIH0KIAogc3RhdGljIGludCBpcDZfbWNfZGVsMV9zcmMoc3RydWN0IGlmbWNhZGRyNiAqcG1jLCBpbnQgc2Ztb2RlLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggN2MyOTFmNC4uN2FlNzJkNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC05NTUsNyArOTU1LDcgQEAKIAkJCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiAJCQlydCA9IHJ0Nl9nZXRfZGZsdF9yb3V0ZXIoc2FkZHIsIGRldik7CiAJCQlpZiAocnQpCi0JCQkJaXA2X2RlbF9ydChydCwgTlVMTCwgTlVMTCk7CisJCQkJaXA2X2RlbF9ydChydCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJCX0KIAogb3V0OgpAQCAtMTA5Niw3ICsxMDk2LDcgQEAKIAogCWlmIChydCAmJiBsaWZldGltZSA9PSAwKSB7CiAJCW5laWdoX2Nsb25lKG5laWdoKTsKLQkJaXA2X2RlbF9ydChydCwgTlVMTCwgTlVMTCk7CisJCWlwNl9kZWxfcnQocnQsIE5VTEwsIE5VTEwsIE5VTEwpOwogCQlydCA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwppbmRleCBjNzM1Mjc2Li43MzAzNDUxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKQEAgLTcxLDcgKzcxLDYgQEAKIC8qIE11c3QgaGF2ZSBtdXRleCAqLwogI2RlZmluZSBBU1NFUlRfUkVBRF9MT0NLKHgpIElQX05GX0FTU0VSVChkb3duX3RyeWxvY2soJmlwNnRfbXV0ZXgpICE9IDApCiAjZGVmaW5lIEFTU0VSVF9XUklURV9MT0NLKHgpIElQX05GX0FTU0VSVChkb3duX3RyeWxvY2soJmlwNnRfbXV0ZXgpICE9IDApCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oPgogCiAjaWYgMApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwppbmRleCBiZmMzZDAxLi5jNDQ2ODVlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwpAQCAtMzY2LDggKzM2Niw2IEBACiAJCWNvbnN0IGNoYXIgKmxldmVsX3N0cmluZywKIAkJY29uc3QgY2hhciAqcHJlZml4KQogewotCXN0cnVjdCBpcHY2aGRyICppcHY2aCA9IHNrYi0+bmguaXB2Nmg7Ci0KIAlzcGluX2xvY2tfYmgoJmxvZ19sb2NrKTsKIAlwcmludGsobGV2ZWxfc3RyaW5nKTsKIAlwcmludGsoIiVzSU49JXMgT1VUPSVzICIsCkBAIC0zNzcsMzkgKzM3NSwyNSBAQAogCWlmIChpbiAmJiAhb3V0KSB7CiAJCS8qIE1BQyBsb2dnaW5nIGZvciBpbnB1dCBjaGFpbiBvbmx5LiAqLwogCQlwcmludGsoIk1BQz0iKTsKLQkJaWYgKHNrYi0+ZGV2ICYmIHNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW4gJiYgc2tiLT5tYWMucmF3ICE9ICh2b2lkKilpcHY2aCkgewotCQkJaWYgKHNrYi0+ZGV2LT50eXBlICE9IEFSUEhSRF9TSVQpewotCQkJICBpbnQgaTsKLQkJCSAgdW5zaWduZWQgY2hhciAqcCA9IHNrYi0+bWFjLnJhdzsKLQkJCSAgZm9yIChpID0gMDsgaSA8IHNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW47IGkrKyxwKyspCi0JCQkJcHJpbnRrKCIlMDJ4JWMiLCAqcCwKLQkJCSAgICAgICAJCWk9PXNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW4gLSAxCi0JCQkgICAgICAgCQk/ICcgJzonOicpOwotCQkJfSBlbHNlIHsKLQkJCSAgaW50IGk7Ci0JCQkgIHVuc2lnbmVkIGNoYXIgKnAgPSBza2ItPm1hYy5yYXc7Ci0JCQkgIGlmICggcCAtIChFVEhfQUxFTioyKzIpID4gc2tiLT5oZWFkICl7Ci0JCQkgICAgcCAtPSAoRVRIX0FMRU4rMik7Ci0JCQkgICAgZm9yIChpID0gMDsgaSA8IChFVEhfQUxFTik7IGkrKyxwKyspCi0JCQkJcHJpbnRrKCIlMDJ4JXMiLCAqcCwKLQkJCQkJaSA9PSBFVEhfQUxFTi0xID8gIi0+IiA6ICI6Iik7Ci0JCQkgICAgcCAtPSAoRVRIX0FMRU4qMik7Ci0JCQkgICAgZm9yIChpID0gMDsgaSA8IChFVEhfQUxFTik7IGkrKyxwKyspCi0JCQkJcHJpbnRrKCIlMDJ4JWMiLCAqcCwKLQkJCQkJaSA9PSBFVEhfQUxFTi0xID8gJyAnIDogJzonKTsKLQkJCSAgfQotCQkJICAKLQkJCSAgaWYgKChza2ItPmRldi0+YWRkcl9sZW4gPT0gNCkgJiYKLQkJCSAgICAgIHNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW4gPiAyMCl7Ci0JCQkgICAgcHJpbnRrKCJUVU5ORUw9Iik7Ci0JCQkgICAgcCA9IHNrYi0+bWFjLnJhdyArIDEyOwotCQkJICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKysscCsrKQotCQkJCXByaW50aygiJTNkJXMiLCAqcCwKLQkJCQkJaSA9PSAzID8gIi0+IiA6ICIuIik7Ci0JCQkgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKyxwKyspCi0JCQkJcHJpbnRrKCIlM2QlYyIsICpwLAotCQkJCQlpID09IDMgPyAnICcgOiAnLicpOwotCQkJICB9CisJCWlmIChza2ItPmRldiAmJiBza2ItPmRldi0+aGFyZF9oZWFkZXJfbGVuICYmCisJCSAgICBza2ItPm1hYy5yYXcgIT0gc2tiLT5uaC5yYXcpIHsKKwkJCXVuc2lnbmVkIGNoYXIgKnAgPSBza2ItPm1hYy5yYXc7CisJCQlpbnQgaTsKKworCQkJaWYgKHNrYi0+ZGV2LT50eXBlID09IEFSUEhSRF9TSVQgJiYKKwkJCSAgICAocCAtPSBFVEhfSExFTikgPCBza2ItPmhlYWQpCisJCQkJcCA9IE5VTEw7CisKKwkJCWlmIChwICE9IE5VTEwpCisJCQkJZm9yIChpID0gMDsgaSA8IHNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW47IGkrKykKKwkJCQkJcHJpbnRrKCIlMDJ4IiwgcFtpXSk7CisJCQlwcmludGsoIiAiKTsKKworCQkJaWYgKHNrYi0+ZGV2LT50eXBlID09IEFSUEhSRF9TSVQpIHsKKwkJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPm1hYy5yYXc7CisJCQkJcHJpbnRrKCJUVU5ORUw9JXUuJXUuJXUuJXUtPiV1LiV1LiV1LiV1ICIsCisJCQkJICAgICAgIE5JUFFVQUQoaXBoLT5zYWRkciksCisJCQkJICAgICAgIE5JUFFVQUQoaXBoLT5kYWRkcikpOwogCQkJfQogCQl9IGVsc2UKIAkJCXByaW50aygiICIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCmluZGV4IDcxNDA3YmUuLmMyOTgyZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKQEAgLTEyOSwxMyArMTI5LDE1IEBACiAJICAuaG9vayA9IGlwNnRfaG9vaywgCiAJICAucGYgPSBQRl9JTkVUNiwKIAkgIC5ob29rbnVtID0gTkZfSVA2X1BSRV9ST1VUSU5HLAotCSAgLnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVAorCSAgLnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCwKKwkgIC5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewogCSAgLmhvb2sgPSBpcDZ0X2hvb2ssIAogCSAgLnBmID0gUEZfSU5FVDYsIAogCSAgLmhvb2tudW0gPSBORl9JUDZfTE9DQUxfT1VULAotCSAgLnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVAorCSAgLnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCwKKwkgIC5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCAxZjViMjI2Li44Nzg3ODliIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTM4NCwxMiArMzg0LDEzIEBACiAgICBiZSBkZXN0cm95ZWQuCiAgKi8KIAotaW50IGlwNl9pbnNfcnQoc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKl9ydGF0dHIpCitpbnQgaXA2X2luc19ydChzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJdm9pZCAqX3J0YXR0ciwgc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpyZXEpCiB7CiAJaW50IGVycjsKIAogCXdyaXRlX2xvY2tfYmgoJnJ0Nl9sb2NrKTsKLQllcnIgPSBmaWI2X2FkZCgmaXA2X3JvdXRpbmdfdGFibGUsIHJ0LCBubGgsIF9ydGF0dHIpOworCWVyciA9IGZpYjZfYWRkKCZpcDZfcm91dGluZ190YWJsZSwgcnQsIG5saCwgX3J0YXR0ciwgcmVxKTsKIAl3cml0ZV91bmxvY2tfYmgoJnJ0Nl9sb2NrKTsKIAogCXJldHVybiBlcnI7CkBAIC00MDAsNyArNDAxLDcgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfY293KHN0cnVjdCBydDZfaW5mbyAqb3J0LCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCisJCQkJc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpyZXEpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwpAQCAtNDMyLDcgKzQzMyw3IEBACiAKIAkJZHN0X2hvbGQoJnJ0LT51LmRzdCk7CiAKLQkJZXJyID0gaXA2X2luc19ydChydCwgTlVMTCwgTlVMTCk7CisJCWVyciA9IGlwNl9pbnNfcnQocnQsIE5VTEwsIE5VTEwsIHJlcSk7CiAJCWlmIChlcnIgPT0gMCkKIAkJCXJldHVybiBydDsKIApAQCAtNDkxLDcgKzQ5Miw4IEBACiAJCXJlYWRfdW5sb2NrX2JoKCZydDZfbG9jayk7CiAKIAkJbnJ0ID0gcnQ2X2NvdyhydCwgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAotCQkJICAgICAgJnNrYi0+bmguaXB2NmgtPnNhZGRyKTsKKwkJCSAgICAgICZza2ItPm5oLmlwdjZoLT5zYWRkciwKKwkJCSAgICAgICZORVRMSU5LX0NCKHNrYikpOwogCiAJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwogCQlydCA9IG5ydDsKQEAgLTU1MSw3ICs1NTMsNyBAQAogCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKIAkJcmVhZF91bmxvY2tfYmgoJnJ0Nl9sb2NrKTsKIAotCQlucnQgPSBydDZfY293KHJ0LCAmZmwtPmZsNl9kc3QsICZmbC0+Zmw2X3NyYyk7CisJCW5ydCA9IHJ0Nl9jb3cocnQsICZmbC0+Zmw2X2RzdCwgJmZsLT5mbDZfc3JjLCBOVUxMKTsKIAogCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKIAkJcnQgPSBucnQ7CkBAIC01OTgsNyArNjAwLDcgQEAKIAogCWlmIChydCkgewogCQlpZiAocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQ0FDSEUpCi0JCQlpcDZfZGVsX3J0KHJ0LCBOVUxMLCBOVUxMKTsKKwkJCWlwNl9kZWxfcnQocnQsIE5VTEwsIE5VTEwsIE5VTEwpOwogCQllbHNlCiAJCQlkc3RfcmVsZWFzZShkc3QpOwogCX0KQEAgLTc4Nyw3ICs3ODksOCBAQAogICoKICAqLwogCi1pbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgaW42X3J0bXNnICpydG1zZywgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKl9ydGF0dHIpCitpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgaW42X3J0bXNnICpydG1zZywgc3RydWN0IG5sbXNnaGRyICpubGgsIAorCQl2b2lkICpfcnRhdHRyLCBzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKnJlcSkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBydG1zZyAqcjsKQEAgLTk3NCw3ICs5NzcsNyBAQAogCQlydC0+dS5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKGRzdF9tdHUoJnJ0LT51LmRzdCkpOwogCXJ0LT51LmRzdC5kZXYgPSBkZXY7CiAJcnQtPnJ0NmlfaWRldiA9IGlkZXY7Ci0JcmV0dXJuIGlwNl9pbnNfcnQocnQsIG5saCwgX3J0YXR0cik7CisJcmV0dXJuIGlwNl9pbnNfcnQocnQsIG5saCwgX3J0YXR0ciwgcmVxKTsKIAogb3V0OgogCWlmIChkZXYpCkBAIC05ODYsNyArOTg5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqX3J0YXR0cikKK2ludCBpcDZfZGVsX3J0KHN0cnVjdCBydDZfaW5mbyAqcnQsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICpfcnRhdHRyLCBzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKnJlcSkKIHsKIAlpbnQgZXJyOwogCkBAIC05OTQsNyArOTk3LDcgQEAKIAogCXJ0Nl9yZXNldF9kZmx0X3BvaW50ZXIoTlVMTCk7CiAKLQllcnIgPSBmaWI2X2RlbChydCwgbmxoLCBfcnRhdHRyKTsKKwllcnIgPSBmaWI2X2RlbChydCwgbmxoLCBfcnRhdHRyLCByZXEpOwogCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwogCiAJd3JpdGVfdW5sb2NrX2JoKCZydDZfbG9jayk7CkBAIC0xMDAyLDcgKzEwMDUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgaW42X3J0bXNnICpydG1zZywgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKl9ydGF0dHIpCitzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGluNl9ydG1zZyAqcnRtc2csIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICpfcnRhdHRyLCBzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKnJlcSkKIHsKIAlzdHJ1Y3QgZmliNl9ub2RlICpmbjsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwpAQCAtMTAyOSw3ICsxMDMyLDcgQEAKIAkJCWRzdF9ob2xkKCZydC0+dS5kc3QpOwogCQkJcmVhZF91bmxvY2tfYmgoJnJ0Nl9sb2NrKTsKIAotCQkJcmV0dXJuIGlwNl9kZWxfcnQocnQsIG5saCwgX3J0YXR0cik7CisJCQlyZXR1cm4gaXA2X2RlbF9ydChydCwgbmxoLCBfcnRhdHRyLCByZXEpOwogCQl9CiAJfQogCXJlYWRfdW5sb2NrX2JoKCZydDZfbG9jayk7CkBAIC0xMTM2LDExICsxMTM5LDExIEBACiAJbnJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gaXB2Nl9nZXRfbXR1KG5laWdoLT5kZXYpOwogCW5ydC0+dS5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKGRzdF9tdHUoJm5ydC0+dS5kc3QpKTsKIAotCWlmIChpcDZfaW5zX3J0KG5ydCwgTlVMTCwgTlVMTCkpCisJaWYgKGlwNl9pbnNfcnQobnJ0LCBOVUxMLCBOVUxMLCBOVUxMKSkKIAkJZ290byBvdXQ7CiAKIAlpZiAocnQtPnJ0NmlfZmxhZ3MmUlRGX0NBQ0hFKSB7Ci0JCWlwNl9kZWxfcnQocnQsIE5VTEwsIE5VTEwpOworCQlpcDZfZGVsX3J0KHJ0LCBOVUxMLCBOVUxMLCBOVUxMKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTIwNCw3ICsxMjA3LDcgQEAKIAkgICAyLiBJdCBpcyBnYXRld2F5ZWQgcm91dGUgb3IgTk9ORVhUSE9QIHJvdXRlLiBBY3Rpb246IGNsb25lIGl0LgogCSAqLwogCWlmICghcnQtPnJ0NmlfbmV4dGhvcCAmJiAhKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX05PTkVYVEhPUCkpIHsKLQkJbnJ0ID0gcnQ2X2NvdyhydCwgZGFkZHIsIHNhZGRyKTsKKwkJbnJ0ID0gcnQ2X2NvdyhydCwgZGFkZHIsIHNhZGRyLCBOVUxMKTsKIAkJaWYgKCFucnQtPnUuZHN0LmVycm9yKSB7CiAJCQlucnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBwbXR1OwogCQkJaWYgKGFsbGZyYWcpCkBAIC0xMjMyLDcgKzEyMzUsNyBAQAogCQlucnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBwbXR1OwogCQlpZiAoYWxsZnJhZykKIAkJCW5ydC0+dS5kc3QubWV0cmljc1tSVEFYX0ZFQVRVUkVTLTFdIHw9IFJUQVhfRkVBVFVSRV9BTExGUkFHOwotCQlpcDZfaW5zX3J0KG5ydCwgTlVMTCwgTlVMTCk7CisJCWlwNl9pbnNfcnQobnJ0LCBOVUxMLCBOVUxMLCBOVUxMKTsKIAl9CiAKIG91dDoKQEAgLTEzMDUsNyArMTMwOCw3IEBACiAKIAlydG1zZy5ydG1zZ19pZmluZGV4ID0gZGV2LT5pZmluZGV4OwogCi0JaXA2X3JvdXRlX2FkZCgmcnRtc2csIE5VTEwsIE5VTEwpOworCWlwNl9yb3V0ZV9hZGQoJnJ0bXNnLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAlyZXR1cm4gcnQ2X2dldF9kZmx0X3JvdXRlcihnd2FkZHIsIGRldik7CiB9CiAKQEAgLTEzMjMsNyArMTMyNiw3IEBACiAKIAkJCXJlYWRfdW5sb2NrX2JoKCZydDZfbG9jayk7CiAKLQkJCWlwNl9kZWxfcnQocnQsIE5VTEwsIE5VTEwpOworCQkJaXA2X2RlbF9ydChydCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQpAQCAtMTM0OSwxMCArMTM1MiwxMCBAQAogCQlydG5sX2xvY2soKTsKIAkJc3dpdGNoIChjbWQpIHsKIAkJY2FzZSBTSU9DQUREUlQ6Ci0JCQllcnIgPSBpcDZfcm91dGVfYWRkKCZydG1zZywgTlVMTCwgTlVMTCk7CisJCQllcnIgPSBpcDZfcm91dGVfYWRkKCZydG1zZywgTlVMTCwgTlVMTCwgTlVMTCk7CiAJCQlicmVhazsKIAkJY2FzZSBTSU9DREVMUlQ6Ci0JCQllcnIgPSBpcDZfcm91dGVfZGVsKCZydG1zZywgTlVMTCwgTlVMTCk7CisJCQllcnIgPSBpcDZfcm91dGVfZGVsKCZydG1zZywgTlVMTCwgTlVMTCwgTlVMTCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVyciA9IC1FSU5WQUw7CkBAIC0xNTQ2LDcgKzE1NDksNyBAQAogCiAJaWYgKGluZXQ2X3J0bV90b19ydG1zZyhyLCBhcmcsICZydG1zZykpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBpcDZfcm91dGVfZGVsKCZydG1zZywgbmxoLCBhcmcpOworCXJldHVybiBpcDZfcm91dGVfZGVsKCZydG1zZywgbmxoLCBhcmcsICZORVRMSU5LX0NCKHNrYikpOwogfQogCiBpbnQgaW5ldDZfcnRtX25ld3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLCB2b2lkICphcmcpCkBAIC0xNTU2LDcgKzE1NTksNyBAQAogCiAJaWYgKGluZXQ2X3J0bV90b19ydG1zZyhyLCBhcmcsICZydG1zZykpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBpcDZfcm91dGVfYWRkKCZydG1zZywgbmxoLCBhcmcpOworCXJldHVybiBpcDZfcm91dGVfYWRkKCZydG1zZywgbmxoLCBhcmcsICZORVRMSU5LX0NCKHNrYikpOwogfQogCiBzdHJ1Y3QgcnQ2X3J0bmxfZHVtcF9hcmcKQEAgLTE1NjYsMTIgKzE1NjksOSBAQAogfTsKIAogc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydDZfaW5mbyAqcnQsCi0JCQkgc3RydWN0IGluNl9hZGRyICpkc3QsCi0JCQkgc3RydWN0IGluNl9hZGRyICpzcmMsCi0JCQkgaW50IGlpZiwKLQkJCSBpbnQgdHlwZSwgdTMyIHBpZCwgdTMyIHNlcSwKLQkJCSBzdHJ1Y3Qgbmxtc2doZHIgKmluX25saCwgaW50IHByZWZpeCwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCisJCQkgc3RydWN0IGluNl9hZGRyICpkc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLAorCQkJIGludCBpaWYsIGludCB0eXBlLCB1MzIgcGlkLCB1MzIgc2VxLAorCQkJIGludCBwcmVmaXgsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcnRtc2cgKnJ0bTsKIAlzdHJ1Y3Qgbmxtc2doZHIgICpubGg7CkBAIC0xNTg1LDEwICsxNTg1LDYgQEAKIAkJfQogCX0KIAotCWlmICghcGlkICYmIGluX25saCkgewotCQlwaWQgPSBpbl9ubGgtPm5sbXNnX3BpZDsKLQl9Ci0KIAlubGggPSBOTE1TR19ORVcoc2tiLCBwaWQsIHNlcSwgdHlwZSwgc2l6ZW9mKCpydG0pLCBmbGFncyk7CiAJcnRtID0gTkxNU0dfREFUQShubGgpOwogCXJ0bS0+cnRtX2ZhbWlseSA9IEFGX0lORVQ2OwpAQCAtMTY3NSw3ICsxNjcxLDcgQEAKIAogCXJldHVybiBydDZfZmlsbF9ub2RlKGFyZy0+c2tiLCBydCwgTlVMTCwgTlVMTCwgMCwgUlRNX05FV1JPVVRFLAogCQkgICAgIE5FVExJTktfQ0IoYXJnLT5jYi0+c2tiKS5waWQsIGFyZy0+Y2ItPm5saC0+bmxtc2dfc2VxLAotCQkgICAgIE5VTEwsIHByZWZpeCwgTkxNX0ZfTVVMVEkpOworCQkgICAgIHByZWZpeCwgTkxNX0ZfTVVMVEkpOwogfQogCiBzdGF0aWMgaW50IGZpYjZfZHVtcF9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlcl90ICp3KQpAQCAtMTgyMyw3ICsxODE5LDcgQEAKIAkJCSAgICAmZmwuZmw2X2RzdCwgJmZsLmZsNl9zcmMsCiAJCQkgICAgaWlmLAogCQkJICAgIFJUTV9ORVdST1VURSwgTkVUTElOS19DQihpbl9za2IpLnBpZCwKLQkJCSAgICBubGgtPm5sbXNnX3NlcSwgbmxoLCAwLCAwKTsKKwkJCSAgICBubGgtPm5sbXNnX3NlcSwgMCwgMCk7CiAJaWYgKGVyciA8IDApIHsKIAkJZXJyID0gLUVNU0dTSVpFOwogCQlnb3RvIG91dF9mcmVlOwpAQCAtMTgzOSwxNyArMTgzNSwyNSBAQAogCWdvdG8gb3V0OwkKIH0KIAotdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKK3ZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IG5sbXNnaGRyICpubGgsIAorCQkJc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpyZXEpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgc2l6ZSA9IE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgcnRtc2cpKzI1Nik7CisJdTMyIHBpZCA9IGN1cnJlbnQtPnBpZDsKKwl1MzIgc2VxID0gMDsKIAorCWlmIChyZXEpCisJCXBpZCA9IHJlcS0+cGlkOworCWlmIChubGgpCisJCXNlcSA9IG5saC0+bmxtc2dfc2VxOworCQogCXNrYiA9IGFsbG9jX3NrYihzaXplLCBnZnBfYW55KCkpOwogCWlmICghc2tiKSB7CiAJCW5ldGxpbmtfc2V0X2VycihydG5sLCAwLCBSVE1HUlBfSVBWNl9ST1VURSwgRU5PQlVGUyk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHJ0Nl9maWxsX25vZGUoc2tiLCBydCwgTlVMTCwgTlVMTCwgMCwgZXZlbnQsIDAsIDAsIG5saCwgMCwgMCkgPCAwKSB7CisJaWYgKHJ0Nl9maWxsX25vZGUoc2tiLCBydCwgTlVMTCwgTlVMTCwgMCwgZXZlbnQsIHBpZCwgc2VxLCAwLCAwKSA8IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCW5ldGxpbmtfc2V0X2VycihydG5sLCAwLCBSVE1HUlBfSVBWNl9ST1VURSwgRUlOVkFMKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGRiODQ1Y2IuLjg3MzAyYTQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTE5NDUsNiArMTk0NSw3IEBACiAJfSB3aGlsZSAoKmluX2VuZCsrKTsKIAogCWNvcHlfcGFnZShpbl9zYXZlLCBub3NlY19zYXZlKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpbm9zZWNfc2F2ZSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3JtZTk2eHguYyBiL3NvdW5kL29zcy9ybWU5Nnh4LmMKaW5kZXggNzY3NzRiYi4uYjQyNzhlZSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3JtZTk2eHguYworKysgYi9zb3VuZC9vc3Mvcm1lOTZ4eC5jCkBAIC04MDcsNyArODA3LDcgQEAKICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSogcGFnZSwgKmxhc3RfcGFnZTsKIAogICAgICAgICAgICAgICAgIHBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYnVmKTsKLSAgICAgICAgICAgICAgICBsYXN0X3BhZ2UgPSB2aXJ0X3RvX3BhZ2UoYnVmICsgKDEgPDwgcGcpKTsKKyAgICAgICAgICAgICAgICBsYXN0X3BhZ2UgPSBwYWdlICsgKDEgPDwgcGcpOwogICAgICAgICAgICAgICAgIERCRyhwcmludGsoInNldHRpbmcgcmVzZXJ2ZWQgYml0XG4iKSk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHBhZ2UgPCBsYXN0X3BhZ2UpIHsKIAkJCVNldFBhZ2VSZXNlcnZlZChwYWdlKTsK